{"version":3,"file":"index.cjs","sources":["../core/lib/prosemirror-patches.ts","../node_modules/@tiptap/extension-mention/dist/index.js","../node_modules/@tiptap/extension-list/dist/index.js","../node_modules/@tiptap/extension-text-style/dist/index.js","../node_modules/@tiptap/extension-typography/dist/index.js","../node_modules/@tiptap/extension-highlight/dist/index.js","../node_modules/@tiptap/extension-superscript/dist/index.js","../node_modules/@tiptap/extension-subscript/dist/index.js","../node_modules/@tiptap/extension-text-align/dist/index.js","../node_modules/katex/dist/katex.mjs","../node_modules/@tiptap/extension-mathematics/dist/index.js","../node_modules/@tiptap/extension-unique-id/node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/@tiptap/extension-unique-id/node_modules/uuid/dist/esm-browser/rng.js","../node_modules/@tiptap/extension-unique-id/node_modules/uuid/dist/esm-browser/native.js","../node_modules/@tiptap/extension-unique-id/node_modules/uuid/dist/esm-browser/v4.js","../node_modules/@tiptap/extension-unique-id/dist/index.js","../node_modules/emoji-regex/index.mjs","../node_modules/is-emoji-supported/dist/esm/is-emoji-supported.js","../node_modules/@tiptap/extension-emoji/dist/index.js","../node_modules/@tiptap/extension-table-of-contents/node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/@tiptap/extension-table-of-contents/node_modules/uuid/dist/esm-browser/rng.js","../node_modules/@tiptap/extension-table-of-contents/node_modules/uuid/dist/esm-browser/native.js","../node_modules/@tiptap/extension-table-of-contents/node_modules/uuid/dist/esm-browser/v4.js","../node_modules/@tiptap/extension-table-of-contents/dist/index.js","../node_modules/prosemirror-model/dist/index.js","../node_modules/prosemirror-transform/dist/index.js","../node_modules/prosemirror-state/dist/index.js","../node_modules/prosemirror-view/dist/index.js","../node_modules/w3c-keyname/index.js","../node_modules/prosemirror-keymap/dist/index.js","../node_modules/prosemirror-tables/dist/index.js","../node_modules/@tiptap/extension-table/dist/index.js","../node_modules/linkifyjs/dist/linkify.mjs","../node_modules/@tiptap/extension-link/dist/index.js","../core/extensions/link-extension-enhanced.ts","../node_modules/@tiptap/extension-horizontal-rule/dist/index.js","../core/components/tiptap-node/horizontal-rule-node/horizontal-rule-node-extension.ts","../core/components/tiptap-extension/ui-state-extension.ts","../node_modules/@tiptap/extension-image/dist/index.js","../core/lib/tiptap-utils.ts","../node_modules/tslib/tslib.es6.js","../core/components/tiptap-ui-primitive/input/input.tsx","../core/components/tiptap-node/image-node/image-node-view.tsx","../core/components/tiptap-node/image-node/image-node-extension.ts","../core/components/tiptap-ui-primitive/tooltip/tooltip.tsx","../core/components/tiptap-ui-primitive/button/button.tsx","../core/components/tiptap-icons/close-icon.tsx","../core/components/tiptap-node/image-upload-node/image-upload-node.tsx","../core/components/tiptap-node/image-upload-node/image-upload-node-extension.ts","../core/components/tiptap-node/video-node/video-node-view.tsx","../core/components/tiptap-node/video-node/video-node-extension.ts","../core/components/tiptap-node/video-upload-node/video-upload-node.tsx","../core/components/tiptap-node/video-upload-node/video-upload-node-extension.ts","../core/components/tiptap-node/annotation-node/annotation-node-view.tsx","../core/components/tiptap-node/annotation-node/annotation-node-extension.ts","../core/lib/utils.ts","../core/components/tiptap-node/utility-card-node/utility-card-node-view.tsx","../core/components/tiptap-node/utility-card-node/utility-card-node-extension.ts","../core/components/tiptap-icons/plus-icon.tsx","../core/components/tiptap-icons/x-icon.tsx","../core/contexts/ProductDataContext.tsx","../core/components/tiptap-node/tabs-node/tabs-node-view.tsx","../core/components/tiptap-node/tabs-node/tabs-node-extension.ts","../src/components/TnkrModelView/partUtils.ts","../src/components/TnkrModelView/modelViewCore.ts","../src/components/ui/Button.tsx","../src/components/TnkrModelView/PartContextMenu.tsx","../core/components/tiptap-node/explorer-card-node/_components/PartsTree.tsx","../src/components/ui/IsolationCustomRange.tsx","../src/components/TnkrModelView/IsolationTransparencyModal.tsx","../src/components/TnkrModelView/TnkrEditorModelViewCore.tsx","../src/components/TnkrModelView/AnimationProvider.tsx","../src/components/TnkrModelView/ModelViewCoreProvider.tsx","../src/utils/s3Utils.ts","../core/lib/utils/color-utils.ts","../core/contexts/ThemeContext.tsx","../node_modules/zustand/esm/vanilla.mjs","../node_modules/zustand/esm/react.mjs","../node_modules/zustand/esm/middleware.mjs","../core/stores/useProductDataStore.ts","../src/utils/cloudfront.ts","../src/services/TnkrX3DStore.ts","../core/hooks/useProductData.ts","../core/components/ui/LayeredCard.tsx","../core/components/ui/LayeredCardCarousel.tsx","../core/components/ui/Callout.tsx","../core/components/ui/ToggleSwitch.tsx","../core/components/unified-side-menu/UnifiedSideMenu.tsx","../core/components/unified-side-menu/UnifiedSideMenuContext.tsx","../core/components/tiptap-node/explorer-card-node/explorer-card-node-view.tsx","../core/components/tiptap-node/explorer-card-node/explorer-card-node-extension.ts","../core/components/tiptap-ui/table-controls/table-cell-menu.tsx","../core/components/tiptap-ui/table-controls/table-plus-buttons.tsx","../core/hooks/use-table.ts","../core/components/tiptap-node/bom-node/bom-column-config.ts","../core/components/tiptap-node/bom-node/regions-data.ts","../core/components/tiptap-node/bom-node/bom-input-components.tsx","../core/components/tiptap-ui/searchablePopup/TreeNode.tsx","../core/components/tiptap-ui/searchablePopup/SearchablePopupMenu.tsx","../core/components/tiptap-ui/searchablePopup/useSearchablePopup.tsx","../core/components/tiptap-node/bom-node/bom-node-view.tsx","../core/components/tiptap-node/bom-node/config/bom-types-config.ts","../core/components/tiptap-node/bom-node/bom-node-extension.ts","../core/components/tiptap-node/callout-node/callout-node-view.tsx","../core/components/tiptap-node/callout-node/callout-node-extension.ts","../node_modules/@tiptap/extension-code-block/dist/index.js","../node_modules/highlight.js/lib/core.js","../node_modules/highlight.js/es/core.js","../node_modules/@tiptap/extension-code-block-lowlight/dist/index.js","../core/components/tiptap-node/code-block-node/code-block-view.tsx","../core/components/tiptap-node/code-block-node/code-block-extension.ts","../core/components/tiptap-node/toggle-list-node/toggle-list-node-view.tsx","../core/components/tiptap-node/toggle-list-node/toggle-list-node-extension.ts","../core/hooks/use-ui-editor-state.ts","../core/components/tiptap-node/card-node/card-node-view.tsx","../core/components/tiptap-node/card-node/card-node-extension.ts","../core/components/tiptap-node/columns-node/column-list-extension.ts","../core/components/tiptap-node/columns-node/column-extension.ts","../core/components/tiptap-node/columns-node/columns-extension.ts","../node_modules/@ariakit/react-core/esm/__chunks/3YLGPPWQ.js","../node_modules/@ariakit/core/esm/__chunks/3YLGPPWQ.js","../node_modules/@ariakit/core/esm/__chunks/PBFD2E7P.js","../node_modules/@ariakit/react-core/esm/__chunks/SK3NAZA3.js","../node_modules/@ariakit/core/esm/__chunks/DTR5TSDJ.js","../node_modules/@ariakit/core/esm/__chunks/QAGXQEUG.js","../node_modules/@ariakit/core/esm/utils/events.js","../node_modules/@ariakit/react-core/esm/__chunks/5GGHRIN3.js","../node_modules/@ariakit/react-core/esm/__chunks/VOQWLFSQ.js","../node_modules/@ariakit/react-core/esm/__chunks/5CPL3B7G.js","../node_modules/@ariakit/react-core/esm/__chunks/APTFW6PT.js","../node_modules/@ariakit/react-core/esm/__chunks/5VQZOHHZ.js","../node_modules/@ariakit/react-core/esm/__chunks/Y62RTBST.js","../node_modules/@ariakit/react-core/esm/__chunks/SWN3JYXT.js","../node_modules/@ariakit/core/esm/utils/focus.js","../node_modules/@ariakit/react-core/esm/__chunks/OE2EFRVA.js","../node_modules/@ariakit/react-core/esm/__chunks/2W3RN7C5.js","../node_modules/@ariakit/core/esm/__chunks/BCALMBPZ.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/@ariakit/react-core/esm/__chunks/RTNCFSKZ.js","../node_modules/@ariakit/react-core/esm/__chunks/SBSPVDDI.js","../node_modules/@ariakit/core/esm/__chunks/7PRQYBBV.js","../node_modules/@ariakit/react-core/esm/__chunks/NSTBQJLB.js","../node_modules/@ariakit/react-core/esm/__chunks/ABN76PSX.js","../node_modules/@ariakit/react-core/esm/__chunks/T2AZQXQU.js","../node_modules/@ariakit/react-core/esm/__chunks/K4R5DNTX.js","../node_modules/@ariakit/core/esm/__chunks/RCQ5P4YE.js","../node_modules/@ariakit/react-core/esm/__chunks/T22PY7TE.js","../node_modules/@ariakit/react-core/esm/__chunks/Y67KZUMI.js","../node_modules/@ariakit/core/esm/__chunks/EO4GVUA4.js","../node_modules/@ariakit/react-core/esm/__chunks/AMMIPFT4.js","../node_modules/@ariakit/core/esm/__chunks/2CHYBBFH.js","../node_modules/@ariakit/react-core/esm/__chunks/B7UTNDHN.js","../node_modules/@ariakit/react-core/esm/__chunks/OLVWQA7U.js","../node_modules/@ariakit/react-core/esm/__chunks/7Z7JH52O.js","../node_modules/@ariakit/react-core/esm/__chunks/X7QOZUD3.js","../node_modules/@ariakit/react-core/esm/__chunks/AOQQTIBO.js","../node_modules/@ariakit/react-core/esm/__chunks/DXGKYUAD.js","../node_modules/@ariakit/react-core/esm/__chunks/S2F2XXEH.js","../node_modules/@ariakit/react-core/esm/__chunks/M5DFOEFU.js","../node_modules/@ariakit/react-core/esm/__chunks/CZ4GFWYL.js","../node_modules/@ariakit/react-core/esm/__chunks/5M6RIVE2.js","../node_modules/@ariakit/react-core/esm/__chunks/LC6GJMGV.js","../node_modules/@ariakit/react-core/esm/__chunks/6GXEOXGT.js","../node_modules/@ariakit/react-core/esm/__chunks/HLTQOHKZ.js","../node_modules/@ariakit/react-core/esm/__chunks/K2ZF5NU7.js","../node_modules/@ariakit/react-core/esm/__chunks/AOUGVQZ3.js","../node_modules/@ariakit/react-core/esm/__chunks/63XF7ACK.js","../node_modules/@ariakit/react-core/esm/__chunks/3NDVDEB4.js","../node_modules/@ariakit/react-core/esm/__chunks/JZEJYXOQ.js","../node_modules/@ariakit/react-core/esm/__chunks/PVECYOSC.js","../node_modules/@ariakit/react-core/esm/__chunks/W6WVJJEY.js","../node_modules/@ariakit/react-core/esm/__chunks/SOMPWLIQ.js","../node_modules/@ariakit/react-core/esm/__chunks/IGR4SXG2.js","../node_modules/@ariakit/react-core/esm/__chunks/677M2CI3.js","../node_modules/@ariakit/react-core/esm/__chunks/S7U6BLGA.js","../node_modules/@ariakit/react-core/esm/__chunks/Z5GCVBAY.js","../node_modules/@ariakit/react-core/esm/__chunks/QJ4LGO2N.js","../node_modules/@ariakit/react-core/esm/__chunks/FVE2C5B3.js","../node_modules/@ariakit/core/esm/__chunks/FZZ2AVHF.js","../node_modules/@ariakit/react-core/esm/__chunks/Y2U4BRIM.js","../node_modules/@ariakit/react-core/esm/__chunks/CAGBPNDP.js","../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/@ariakit/react-core/esm/__chunks/C6DAL6ZN.js","../node_modules/@ariakit/react-core/esm/__chunks/IUFFNNPK.js","../node_modules/@ariakit/react-core/esm/__chunks/TRDK6LYC.js","../node_modules/@ariakit/core/esm/__chunks/ME2CUF3F.js","../node_modules/@ariakit/react-core/esm/__chunks/RUY5BUJG.js","../node_modules/@ariakit/core/esm/__chunks/JTLIIJ4U.js","../node_modules/@ariakit/react-core/esm/__chunks/GVVKDT6A.js","../node_modules/@ariakit/react-core/esm/__chunks/JUCYQ5OS.js","../node_modules/@ariakit/react-core/esm/__chunks/HMCFFQCB.js","../node_modules/@ariakit/react-core/esm/__chunks/XCKGTAUF.js","../node_modules/@ariakit/react-core/esm/__chunks/NMGNQVTG.js","../node_modules/@ariakit/react-core/esm/__chunks/ZTXFEM5L.js","../node_modules/@ariakit/react-core/esm/__chunks/4I4MLMKD.js","../node_modules/@ariakit/react-core/esm/__chunks/A5NH37Z4.js","../node_modules/@ariakit/react-core/esm/__chunks/BGBYET7R.js","../node_modules/@ariakit/react-core/esm/__chunks/SQZLCNLX.js","../node_modules/@ariakit/react-core/esm/__chunks/OYOFZOGB.js","../node_modules/@ariakit/react-core/esm/__chunks/7HVFURXT.js","../node_modules/@ariakit/react-core/esm/__chunks/WXI7YN3P.js","../node_modules/@ariakit/react-core/esm/__chunks/T4WMOWCD.js","../node_modules/@ariakit/react-core/esm/__chunks/IABE5EV2.js","../node_modules/@ariakit/react-core/esm/__chunks/EYKMH5G5.js","../node_modules/@ariakit/react-core/esm/__chunks/X5OJP2NB.js","../node_modules/@ariakit/react-core/esm/__chunks/4QTMCR75.js","../node_modules/@ariakit/react-core/esm/__chunks/W5BTY3ZG.js","../node_modules/@ariakit/react-core/esm/menu/menu.js","../node_modules/@ariakit/react-core/esm/menu/menu-button.js","../node_modules/@ariakit/react-core/esm/menu/menu-button-arrow.js","../node_modules/@ariakit/react-core/esm/menu/menu-group.js","../node_modules/@ariakit/react-core/esm/__chunks/BSJHR6LI.js","../node_modules/@ariakit/react-core/esm/menu/menu-item-check.js","../node_modules/@ariakit/react-core/esm/menu/menu-item-radio.js","../node_modules/@ariakit/core/esm/menu/menu-store.js","../node_modules/@ariakit/react-core/esm/__chunks/BV5PFOXH.js","../node_modules/@ariakit/react-core/esm/menu/menu-provider.js","../node_modules/@ariakit/react-core/esm/combobox/combobox.js","../node_modules/@ariakit/react-core/esm/__chunks/D7FSM5GC.js","../node_modules/@ariakit/react-core/esm/__chunks/MNJRSAAC.js","../node_modules/@ariakit/react-core/esm/combobox/combobox-popover.js","../node_modules/@ariakit/react-core/esm/__chunks/VJQU3YUE.js","../node_modules/@ariakit/core/esm/combobox/combobox-store.js","../node_modules/@ariakit/react-core/esm/__chunks/HI6DYBVE.js","../node_modules/@ariakit/react-core/esm/combobox/combobox-provider.js","../core/hooks/use-isomorphic-layout-effect.ts","../core/hooks/use-on-click-outside.ts","../core/hooks/use-composed-ref.ts","../core/components/tiptap-ui-primitive/combobox/combobox.tsx","../core/components/tiptap-ui-primitive/label/label.tsx","../core/components/tiptap-ui-primitive/menu/menu.tsx","../core/components/tiptap-ui-primitive/menu/menu-context.ts","../core/components/tiptap-ui-primitive/menu/menu-hooks.ts","../core/components/tiptap-node/columns-node/column-node-menu.tsx","../core/extensions/default-extensions.ts","../core/extensions/extension-manager.ts","../node_modules/lib0/math.js","../node_modules/lib0/binary.js","../node_modules/lib0/number.js","../node_modules/lib0/set.js","../node_modules/lib0/array.js","../node_modules/lib0/string.js","../node_modules/lib0/encoding.js","../node_modules/lib0/error.js","../node_modules/lib0/map.js","../node_modules/lib0/object.js","../node_modules/lib0/function.js","../node_modules/lib0/mutex.js","../node_modules/lib0/diff.js","../node_modules/lib0/webcrypto.js","../node_modules/lib0/random.js","../node_modules/lib0/conditions.js","../node_modules/lib0/storage.js","../node_modules/lib0/environment.js","../node_modules/lib0/dom.js","../node_modules/lib0/eventloop.js","../node_modules/lib0/hash/sha256.js","../node_modules/lib0/buffer.js","../node_modules/@tiptap/y-tiptap/dist/y-tiptap.js","../node_modules/@tiptap/extension-collaboration/dist/index.js","../core/hooks/use-floating-element.ts","../core/hooks/use-menu-navigation.ts","../core/hooks/use-tiptap-editor.ts","../core/components/tiptap-ui-utils/suggestion-menu/suggestion-menu-utils.ts","../core/components/tiptap-ui-utils/suggestion-menu/suggestion-menu.tsx","../core/lib/tiptap-collab-utils.ts","../core/components/tiptap-ui-primitive/card/card.tsx","../core/components/tiptap-ui/emoji-menu/emoji-menu-utils.ts","../core/components/tiptap-ui/emoji-menu/emoji-menu.tsx","../core/components/tiptap-ui/emoji-dropdown-menu/emoji-dropdown-menu.tsx","../core/components/tiptap-ui-primitive/avatar/avatar.tsx","../core/components/tiptap-ui/mention-dropdown-menu/mention-dropdown-menu.tsx","../core/components/tiptap-icons/code-block-icon.tsx","../core/components/tiptap-icons/image-icon.tsx","../core/components/tiptap-icons/video-icon.tsx","../core/components/tiptap-icons/list-icon.tsx","../core/components/tiptap-icons/list-ordered-icon.tsx","../core/components/tiptap-icons/list-todo-icon.tsx","../core/components/tiptap-icons/ai-sparkles-icon.tsx","../core/components/tiptap-icons/minus-icon.tsx","../core/components/tiptap-icons/smile-plus-icon.tsx","../core/components/tiptap-icons/tabs-icon.tsx","../core/components/tiptap-icons/explorer-icon.tsx","../core/components/tiptap-icons/grid-icon.tsx","../core/components/tiptap-icons/toggle-list-icon.tsx","../core/components/tiptap-icons/callout-icons.tsx","../core/lib/tiptap-advanced-utils.ts","../core/components/tiptap-ui-primitive/badge/badge.tsx","../core/components/tiptap-ui/emoji-trigger-button/emoji-trigger-button.tsx","../core/hooks/use-mobile.ts","../core/components/tiptap-ui/emoji-trigger-button/use-emoji-trigger.ts","../core/components/tiptap-ui/slash-dropdown-menu/use-slash-dropdown-menu.ts","../core/components/tiptap-ui-primitive/separator/separator.tsx","../core/components/tiptap-ui/slash-dropdown-menu/slash-dropdown-menu.tsx","../core/hooks/use-floating-toolbar-visibility.ts","../core/components/tiptap-ui-primitive/spacer/spacer.tsx","../core/components/tiptap-ui/image-download-button/image-download-button.tsx","../core/components/tiptap-icons/arrow-down-to-line-icon.tsx","../core/components/tiptap-ui/image-download-button/use-image-download.ts","../core/components/tiptap-ui/duplicate-button/duplicate-button.tsx","../core/components/tiptap-icons/copy-icon.tsx","../core/components/tiptap-ui/duplicate-button/use-duplicate.ts","../core/components/tiptap-ui/copy-to-clipboard-button/copy-to-clipboard-button.tsx","../core/components/tiptap-icons/clipboard-icon.tsx","../core/components/tiptap-ui/copy-to-clipboard-button/use-copy-to-clipboard.ts","../core/components/tiptap-ui/delete-node-button/delete-node-button.tsx","../core/components/tiptap-icons/trash-icon.tsx","../core/components/tiptap-ui/delete-node-button/use-delete-node.ts","../core/components/tiptap-ui/reset-all-formatting-button/reset-all-formatting-button.tsx","../core/components/tiptap-icons/rotate-ccw-icon.tsx","../core/components/tiptap-ui/reset-all-formatting-button/use-reset-all-formatting.ts","../core/components/tiptap-ui/slash-command-trigger-button/slash-command-trigger-button.tsx","../core/components/tiptap-ui/slash-command-trigger-button/use-slash-command-trigger.ts","../core/components/tiptap-ui/color-text-button/color-text-button.tsx","../core/components/tiptap-icons/text-color-small-icon.tsx","../core/components/tiptap-ui/color-text-button/use-color-text.ts","../core/components/tiptap-ui/color-highlight-button/color-highlight-button.tsx","../core/components/tiptap-icons/highlighter-icon.tsx","../core/components/tiptap-ui/color-highlight-button/use-color-highlight.ts","../core/components/tiptap-ui/ai-ask-button/ai-ask-button.tsx","../core/components/tiptap-ui/ai-ask-button/use-ai-ask.ts","../core/components/tiptap-ui/text-button/text-button.tsx","../core/components/tiptap-icons/type-icon.tsx","../core/components/tiptap-ui/text-button/use-text.ts","../core/components/tiptap-ui/heading-button/heading-button.tsx","../core/components/tiptap-icons/heading-one-icon.tsx","../core/components/tiptap-icons/heading-two-icon.tsx","../core/components/tiptap-icons/heading-three-icon.tsx","../core/components/tiptap-icons/heading-four-icon.tsx","../core/components/tiptap-icons/heading-five-icon.tsx","../core/components/tiptap-icons/heading-six-icon.tsx","../core/components/tiptap-ui/heading-button/use-heading.ts","../core/components/tiptap-ui/list-button/list-button.tsx","../core/components/tiptap-ui/list-button/use-list.ts","../core/components/tiptap-ui/blockquote-button/blockquote-button.tsx","../core/components/tiptap-icons/blockquote-icon.tsx","../core/components/tiptap-ui/blockquote-button/use-blockquote.ts","../core/components/tiptap-ui/code-block-button/code-block-button.tsx","../core/components/tiptap-ui/code-block-button/use-code-block.ts","../core/components/tiptap-icons/chevron-down-icon.tsx","../core/components/tiptap-ui-primitive/popover/popover.tsx","../core/components/tiptap-ui/color-text-popover/color-text-popover.tsx","../core/components/tiptap-ui/color-text-popover/use-color-text-popover.ts","../node_modules/@tiptap/extension-node-range/dist/index.js","../node_modules/@tiptap/extension-drag-handle/dist/index.js","../node_modules/@tiptap/extension-drag-handle-react/dist/index.js","../core/components/tiptap-icons/corner-down-left-icon.tsx","../core/components/tiptap-icons/external-link-icon.tsx","../core/components/tiptap-icons/link-icon.tsx","../core/components/tiptap-ui/link-popover/link-popover.tsx","../core/components/tiptap-ui/link-popover/use-link-popover.ts","../src/components/IconPicker/IconPicker.tsx","../core/components/tiptap-node/card-node/card-icon-picker.tsx","../core/components/tiptap-node/card-node/card-cta-modal.tsx","../core/components/tiptap-node/card-node/card-columns-modal.tsx","../core/components/tiptap-ui-primitive/dropdown-menu/dropdown-menu.tsx","../core/components/tiptap-ui/turn-into-dropdown/turn-into-dropdown.tsx","../core/components/tiptap-ui/turn-into-dropdown/use-turn-into-dropdown.ts","../core/components/tiptap-ui/drag-context-menu/drag-context-menu-hooks.ts","../core/components/tiptap-icons/grip-vertical-icon.tsx","../core/components/tiptap-icons/paint-bucket-icon.tsx","../core/components/tiptap-icons/chevron-right-icon.tsx","../core/components/tiptap-icons/repeat-2-icon.tsx","../core/components/tiptap-icons/add-row-above-icon.tsx","../core/components/tiptap-icons/add-row-below-icon.tsx","../core/components/tiptap-icons/duplicate-outline-icon.tsx","../core/components/tiptap-ui/drag-context-menu/drag-context-menu.tsx","../core/hooks/use-unmount.ts","../core/hooks/use-throttled-callback.ts","../core/hooks/use-window-size.ts","../core/components/tiptap-icons/ban-icon.tsx","../core/components/tiptap-ui/color-highlight-popover/color-highlight-popover.tsx","../core/components/tiptap-ui/image-upload-button/image-upload-button.tsx","../core/components/tiptap-icons/image-plus-icon.tsx","../core/components/tiptap-ui/image-upload-button/use-image-upload.ts","../core/components/tiptap-ui/mark-button/mark-button.tsx","../core/components/tiptap-icons/bold-icon.tsx","../core/components/tiptap-icons/code2-icon.tsx","../core/components/tiptap-icons/italic-icon.tsx","../core/components/tiptap-icons/strike-icon.tsx","../core/components/tiptap-icons/subscript-icon.tsx","../core/components/tiptap-icons/superscript-icon.tsx","../core/components/tiptap-icons/underline-icon.tsx","../core/components/tiptap-ui/mark-button/use-mark.ts","../core/components/tiptap-ui/text-align-button/text-align-button.tsx","../core/components/tiptap-icons/align-center-icon.tsx","../core/components/tiptap-icons/align-justify-icon.tsx","../core/components/tiptap-icons/align-left-icon.tsx","../core/components/tiptap-icons/align-right-icon.tsx","../core/components/tiptap-ui/text-align-button/use-text-align.ts","../core/components/tiptap-ui/copy-anchor-link-button/use-copy-anchor-link.ts","../core/components/tiptap-ui/copy-anchor-link-button/copy-anchor-link-button.tsx","../core/components/tiptap-ui/copy-anchor-link-button/use-scroll-to-hash.ts","../core/components/tiptap-icons/arrow-left-icon.tsx","../core/components/tiptap-icons/more-vertical-icon.tsx","../core/components/tiptap-ui-primitive/toolbar/toolbar.tsx","../core/components/tiptap-ui/move-node-button/move-node-button.tsx","../core/components/tiptap-icons/align-top-icon.tsx","../core/components/tiptap-icons/align-bottom-icon.tsx","../core/components/tiptap-ui/move-node-button/use-move-node.ts","../core/hooks/use-element-rect.ts","../core/hooks/use-cursor-visibility.ts","../core/components/tiptap-templates/notion-like/notion-like-editor-mobile-toolbar.tsx","../core/components/tiptap-ui/image-align-button/image-align-button.tsx","../core/components/tiptap-icons/align-center-vertical-icon.tsx","../core/components/tiptap-icons/align-end-vertical-icon.tsx","../core/components/tiptap-icons/align-start-vertical-icon.tsx","../core/components/tiptap-ui/image-align-button/use-image-align.ts","../core/components/tiptap-node/image-node/image-link-modal.tsx","../core/components/tiptap-node/image-node/image-node-floating.tsx","../core/components/tiptap-node/annotation-node/annotation-node-floating.tsx","../core/components/tiptap-node/card-node/card-node-floating.tsx","../core/components/tiptap-node/bom-node/bom-node-floating.tsx","../core/components/tiptap-ui-utils/floating-element/floating-element-utils.ts","../core/components/tiptap-ui-utils/floating-element/floating-element.tsx","../core/components/tiptap-templates/notion-like/notion-like-editor-toolbar-floating.tsx","../core/TnkrEditor.tsx","../src/components/Chevron.tsx","../src/components/ui/TnkrSelect.tsx","../src/components/assembly/constants.ts","../src/components/ui/textarea.tsx","../src/utils/fonts.ts","../src/components/assembly/AssemblyAnnotationsOverlay.tsx","../src/components/ui/dropdown-menu.tsx","../node_modules/react-icons/lib/iconContext.mjs","../node_modules/react-icons/lib/iconBase.mjs","../node_modules/react-icons/ci/index.mjs","../src/components/assembly/InlineTextEditor.tsx","../src/components/assembly/AssemblyViewMode.tsx","../src/components/assembly/AssemblyView.tsx","../node_modules/ua-parser-js/dist/ua-parser.min.js","../node_modules/react-device-detect/dist/lib.js","../preview/utils.ts","../src/components/page-content-helpers.ts","../src/components/CustomPage.tsx","../preview/PreviewSidebar.tsx","../preview/PageContentNavigator.tsx","../src/components/ui/Input.tsx","../preview/PreviewNavbar.tsx","../src/components/WhatsNext.tsx","../src/components/PreviousPage.tsx","../preview/searchUtils.ts","../preview/SearchModal.tsx","../node_modules/fuse.js/dist/fuse.mjs","../preview/useSearchIndex.ts","../preview/TnkrPreview.tsx","../preview/PageNavigation.tsx"],"sourcesContent":["/**\n * Monkey patches for ProseMirror to handle edge cases\n * This patches the Node.nodeAt method to gracefully handle invalid positions\n * instead of throwing errors. This is needed because some extensions (like DragHandle)\n * may calculate invalid positions (like -1) when dealing with nodes at the start of the document.\n */\n\nimport { Node as PMNode } from '@tiptap/pm/model'\n\n// Store the original nodeAt method\nconst originalNodeAt = PMNode.prototype.nodeAt\n\n// Override with a safer version\nPMNode.prototype.nodeAt = function (pos: number) {\n  // If position is invalid, return null instead of throwing\n  if (pos < 0 || pos >= this.content.size) {\n    // console.warn(`[ProseMirror Patch] Invalid position ${pos} for nodeAt (content size: ${this.content.size})`)\n    return null\n  }\n\n  // Call the original method\n  return originalNodeAt.call(this, pos)\n}\n\nconsole.log('[ProseMirror Patch] nodeAt method patched to handle invalid positions')\n","// src/mention.ts\nimport { mergeAttributes, Node } from \"@tiptap/core\";\nimport { Node as ProseMirrorNode } from \"@tiptap/pm/model\";\nimport Suggestion from \"@tiptap/suggestion\";\n\n// src/utils/get-default-suggestion-attributes.ts\nimport { PluginKey } from \"@tiptap/pm/state\";\nfunction getSuggestionOptions({\n  editor: tiptapEditor,\n  overrideSuggestionOptions,\n  extensionName,\n  char = \"@\"\n}) {\n  const pluginKey = new PluginKey();\n  return {\n    editor: tiptapEditor,\n    char,\n    pluginKey,\n    command: ({ editor, range, props }) => {\n      var _a, _b, _c;\n      const nodeAfter = editor.view.state.selection.$to.nodeAfter;\n      const overrideSpace = (_a = nodeAfter == null ? void 0 : nodeAfter.text) == null ? void 0 : _a.startsWith(\" \");\n      if (overrideSpace) {\n        range.to += 1;\n      }\n      editor.chain().focus().insertContentAt(range, [\n        {\n          type: extensionName,\n          attrs: { ...props, mentionSuggestionChar: char }\n        },\n        {\n          type: \"text\",\n          text: \" \"\n        }\n      ]).run();\n      (_c = (_b = editor.view.dom.ownerDocument.defaultView) == null ? void 0 : _b.getSelection()) == null ? void 0 : _c.collapseToEnd();\n    },\n    allow: ({ state, range }) => {\n      const $from = state.doc.resolve(range.from);\n      const type = state.schema.nodes[extensionName];\n      const allow = !!$from.parent.type.contentMatch.matchType(type);\n      return allow;\n    },\n    ...overrideSuggestionOptions\n  };\n}\n\n// src/mention.ts\nfunction getSuggestions(options) {\n  return (options.options.suggestions.length ? options.options.suggestions : [options.options.suggestion]).map(\n    (suggestion) => getSuggestionOptions({\n      // @ts-ignore `editor` can be `undefined` when converting the document to HTML with the HTML utility\n      editor: options.editor,\n      overrideSuggestionOptions: suggestion,\n      extensionName: options.name,\n      char: suggestion.char\n    })\n  );\n}\nfunction getSuggestionFromChar(options, char) {\n  const suggestions = getSuggestions(options);\n  const suggestion = suggestions.find((s) => s.char === char);\n  if (suggestion) {\n    return suggestion;\n  }\n  if (suggestions.length) {\n    return suggestions[0];\n  }\n  return null;\n}\nvar Mention = Node.create({\n  name: \"mention\",\n  priority: 101,\n  addOptions() {\n    return {\n      HTMLAttributes: {},\n      renderText({ node, suggestion }) {\n        var _a, _b;\n        return `${(_a = suggestion == null ? void 0 : suggestion.char) != null ? _a : \"@\"}${(_b = node.attrs.label) != null ? _b : node.attrs.id}`;\n      },\n      deleteTriggerWithBackspace: false,\n      renderHTML({ options, node, suggestion }) {\n        var _a, _b;\n        return [\n          \"span\",\n          mergeAttributes(this.HTMLAttributes, options.HTMLAttributes),\n          `${(_a = suggestion == null ? void 0 : suggestion.char) != null ? _a : \"@\"}${(_b = node.attrs.label) != null ? _b : node.attrs.id}`\n        ];\n      },\n      suggestions: [],\n      suggestion: {}\n    };\n  },\n  group: \"inline\",\n  inline: true,\n  selectable: false,\n  atom: true,\n  addAttributes() {\n    return {\n      id: {\n        default: null,\n        parseHTML: (element) => element.getAttribute(\"data-id\"),\n        renderHTML: (attributes) => {\n          if (!attributes.id) {\n            return {};\n          }\n          return {\n            \"data-id\": attributes.id\n          };\n        }\n      },\n      label: {\n        default: null,\n        parseHTML: (element) => element.getAttribute(\"data-label\"),\n        renderHTML: (attributes) => {\n          if (!attributes.label) {\n            return {};\n          }\n          return {\n            \"data-label\": attributes.label\n          };\n        }\n      },\n      // When there are multiple types of mentions, this attribute helps distinguish them\n      mentionSuggestionChar: {\n        default: \"@\",\n        parseHTML: (element) => element.getAttribute(\"data-mention-suggestion-char\"),\n        renderHTML: (attributes) => {\n          return {\n            \"data-mention-suggestion-char\": attributes.mentionSuggestionChar\n          };\n        }\n      }\n    };\n  },\n  parseHTML() {\n    return [\n      {\n        tag: `span[data-type=\"${this.name}\"]`\n      }\n    ];\n  },\n  renderHTML({ node, HTMLAttributes }) {\n    const suggestion = getSuggestionFromChar(this, node.attrs.mentionSuggestionChar);\n    if (this.options.renderLabel !== void 0) {\n      console.warn(\"renderLabel is deprecated use renderText and renderHTML instead\");\n      return [\n        \"span\",\n        mergeAttributes({ \"data-type\": this.name }, this.options.HTMLAttributes, HTMLAttributes),\n        this.options.renderLabel({\n          options: this.options,\n          node,\n          suggestion\n        })\n      ];\n    }\n    const mergedOptions = { ...this.options };\n    mergedOptions.HTMLAttributes = mergeAttributes(\n      { \"data-type\": this.name },\n      this.options.HTMLAttributes,\n      HTMLAttributes\n    );\n    const html = this.options.renderHTML({\n      options: mergedOptions,\n      node,\n      suggestion\n    });\n    if (typeof html === \"string\") {\n      return [\"span\", mergeAttributes({ \"data-type\": this.name }, this.options.HTMLAttributes, HTMLAttributes), html];\n    }\n    return html;\n  },\n  renderText({ node }) {\n    const args = {\n      options: this.options,\n      node,\n      suggestion: getSuggestionFromChar(this, node.attrs.mentionSuggestionChar)\n    };\n    if (this.options.renderLabel !== void 0) {\n      console.warn(\"renderLabel is deprecated use renderText and renderHTML instead\");\n      return this.options.renderLabel(args);\n    }\n    return this.options.renderText(args);\n  },\n  addKeyboardShortcuts() {\n    return {\n      Backspace: () => this.editor.commands.command(({ tr, state }) => {\n        let isMention = false;\n        const { selection } = state;\n        const { empty, anchor } = selection;\n        if (!empty) {\n          return false;\n        }\n        let mentionNode = new ProseMirrorNode();\n        let mentionPos = 0;\n        state.doc.nodesBetween(anchor - 1, anchor, (node, pos) => {\n          if (node.type.name === this.name) {\n            isMention = true;\n            mentionNode = node;\n            mentionPos = pos;\n            return false;\n          }\n        });\n        if (isMention) {\n          tr.insertText(\n            this.options.deleteTriggerWithBackspace ? \"\" : mentionNode.attrs.mentionSuggestionChar,\n            mentionPos,\n            mentionPos + mentionNode.nodeSize\n          );\n        }\n        return isMention;\n      })\n    };\n  },\n  addProseMirrorPlugins() {\n    return getSuggestions(this).map(Suggestion);\n  }\n});\n\n// src/index.ts\nvar index_default = Mention;\nexport {\n  Mention,\n  index_default as default\n};\n//# sourceMappingURL=index.js.map","var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/bullet-list/bullet-list.ts\nimport { mergeAttributes, Node, wrappingInputRule } from \"@tiptap/core\";\nvar ListItemName = \"listItem\";\nvar TextStyleName = \"textStyle\";\nvar bulletListInputRegex = /^\\s*([-+*])\\s$/;\nvar BulletList = Node.create({\n  name: \"bulletList\",\n  addOptions() {\n    return {\n      itemTypeName: \"listItem\",\n      HTMLAttributes: {},\n      keepMarks: false,\n      keepAttributes: false\n    };\n  },\n  group: \"block list\",\n  content() {\n    return `${this.options.itemTypeName}+`;\n  },\n  parseHTML() {\n    return [{ tag: \"ul\" }];\n  },\n  renderHTML({ HTMLAttributes }) {\n    return [\"ul\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n  },\n  addCommands() {\n    return {\n      toggleBulletList: () => ({ commands, chain }) => {\n        if (this.options.keepAttributes) {\n          return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItemName, this.editor.getAttributes(TextStyleName)).run();\n        }\n        return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks);\n      }\n    };\n  },\n  addKeyboardShortcuts() {\n    return {\n      \"Mod-Shift-8\": () => this.editor.commands.toggleBulletList()\n    };\n  },\n  addInputRules() {\n    let inputRule = wrappingInputRule({\n      find: bulletListInputRegex,\n      type: this.type\n    });\n    if (this.options.keepMarks || this.options.keepAttributes) {\n      inputRule = wrappingInputRule({\n        find: bulletListInputRegex,\n        type: this.type,\n        keepMarks: this.options.keepMarks,\n        keepAttributes: this.options.keepAttributes,\n        getAttributes: () => {\n          return this.editor.getAttributes(TextStyleName);\n        },\n        editor: this.editor\n      });\n    }\n    return [inputRule];\n  }\n});\n\n// src/item/list-item.ts\nimport { mergeAttributes as mergeAttributes2, Node as Node2 } from \"@tiptap/core\";\nvar ListItem = Node2.create({\n  name: \"listItem\",\n  addOptions() {\n    return {\n      HTMLAttributes: {},\n      bulletListTypeName: \"bulletList\",\n      orderedListTypeName: \"orderedList\"\n    };\n  },\n  content: \"paragraph block*\",\n  defining: true,\n  parseHTML() {\n    return [\n      {\n        tag: \"li\"\n      }\n    ];\n  },\n  renderHTML({ HTMLAttributes }) {\n    return [\"li\", mergeAttributes2(this.options.HTMLAttributes, HTMLAttributes), 0];\n  },\n  addKeyboardShortcuts() {\n    return {\n      Enter: () => this.editor.commands.splitListItem(this.name),\n      Tab: () => this.editor.commands.sinkListItem(this.name),\n      \"Shift-Tab\": () => this.editor.commands.liftListItem(this.name)\n    };\n  }\n});\n\n// src/keymap/list-keymap.ts\nimport { Extension } from \"@tiptap/core\";\n\n// src/keymap/listHelpers/index.ts\nvar listHelpers_exports = {};\n__export(listHelpers_exports, {\n  findListItemPos: () => findListItemPos,\n  getNextListDepth: () => getNextListDepth,\n  handleBackspace: () => handleBackspace,\n  handleDelete: () => handleDelete,\n  hasListBefore: () => hasListBefore,\n  hasListItemAfter: () => hasListItemAfter,\n  hasListItemBefore: () => hasListItemBefore,\n  listItemHasSubList: () => listItemHasSubList,\n  nextListIsDeeper: () => nextListIsDeeper,\n  nextListIsHigher: () => nextListIsHigher\n});\n\n// src/keymap/listHelpers/findListItemPos.ts\nimport { getNodeType } from \"@tiptap/core\";\nvar findListItemPos = (typeOrName, state) => {\n  const { $from } = state.selection;\n  const nodeType = getNodeType(typeOrName, state.schema);\n  let currentNode = null;\n  let currentDepth = $from.depth;\n  let currentPos = $from.pos;\n  let targetDepth = null;\n  while (currentDepth > 0 && targetDepth === null) {\n    currentNode = $from.node(currentDepth);\n    if (currentNode.type === nodeType) {\n      targetDepth = currentDepth;\n    } else {\n      currentDepth -= 1;\n      currentPos -= 1;\n    }\n  }\n  if (targetDepth === null) {\n    return null;\n  }\n  return { $pos: state.doc.resolve(currentPos), depth: targetDepth };\n};\n\n// src/keymap/listHelpers/getNextListDepth.ts\nimport { getNodeAtPosition } from \"@tiptap/core\";\nvar getNextListDepth = (typeOrName, state) => {\n  const listItemPos = findListItemPos(typeOrName, state);\n  if (!listItemPos) {\n    return false;\n  }\n  const [, depth] = getNodeAtPosition(state, typeOrName, listItemPos.$pos.pos + 4);\n  return depth;\n};\n\n// src/keymap/listHelpers/handleBackspace.ts\nimport { isAtStartOfNode, isNodeActive } from \"@tiptap/core\";\n\n// src/keymap/listHelpers/hasListBefore.ts\nvar hasListBefore = (editorState, name, parentListTypes) => {\n  const { $anchor } = editorState.selection;\n  const previousNodePos = Math.max(0, $anchor.pos - 2);\n  const previousNode = editorState.doc.resolve(previousNodePos).node();\n  if (!previousNode || !parentListTypes.includes(previousNode.type.name)) {\n    return false;\n  }\n  return true;\n};\n\n// src/keymap/listHelpers/hasListItemBefore.ts\nvar hasListItemBefore = (typeOrName, state) => {\n  var _a;\n  const { $anchor } = state.selection;\n  const $targetPos = state.doc.resolve($anchor.pos - 2);\n  if ($targetPos.index() === 0) {\n    return false;\n  }\n  if (((_a = $targetPos.nodeBefore) == null ? void 0 : _a.type.name) !== typeOrName) {\n    return false;\n  }\n  return true;\n};\n\n// src/keymap/listHelpers/listItemHasSubList.ts\nimport { getNodeType as getNodeType2 } from \"@tiptap/core\";\nvar listItemHasSubList = (typeOrName, state, node) => {\n  if (!node) {\n    return false;\n  }\n  const nodeType = getNodeType2(typeOrName, state.schema);\n  let hasSubList = false;\n  node.descendants((child) => {\n    if (child.type === nodeType) {\n      hasSubList = true;\n    }\n  });\n  return hasSubList;\n};\n\n// src/keymap/listHelpers/handleBackspace.ts\nvar handleBackspace = (editor, name, parentListTypes) => {\n  if (editor.commands.undoInputRule()) {\n    return true;\n  }\n  if (editor.state.selection.from !== editor.state.selection.to) {\n    return false;\n  }\n  if (!isNodeActive(editor.state, name) && hasListBefore(editor.state, name, parentListTypes)) {\n    const { $anchor } = editor.state.selection;\n    const $listPos = editor.state.doc.resolve($anchor.before() - 1);\n    const listDescendants = [];\n    $listPos.node().descendants((node, pos) => {\n      if (node.type.name === name) {\n        listDescendants.push({ node, pos });\n      }\n    });\n    const lastItem = listDescendants.at(-1);\n    if (!lastItem) {\n      return false;\n    }\n    const $lastItemPos = editor.state.doc.resolve($listPos.start() + lastItem.pos + 1);\n    return editor.chain().cut({ from: $anchor.start() - 1, to: $anchor.end() + 1 }, $lastItemPos.end()).joinForward().run();\n  }\n  if (!isNodeActive(editor.state, name)) {\n    return false;\n  }\n  if (!isAtStartOfNode(editor.state)) {\n    return false;\n  }\n  const listItemPos = findListItemPos(name, editor.state);\n  if (!listItemPos) {\n    return false;\n  }\n  const $prev = editor.state.doc.resolve(listItemPos.$pos.pos - 2);\n  const prevNode = $prev.node(listItemPos.depth);\n  const previousListItemHasSubList = listItemHasSubList(name, editor.state, prevNode);\n  if (hasListItemBefore(name, editor.state) && !previousListItemHasSubList) {\n    return editor.commands.joinItemBackward();\n  }\n  return editor.chain().liftListItem(name).run();\n};\n\n// src/keymap/listHelpers/handleDelete.ts\nimport { isAtEndOfNode, isNodeActive as isNodeActive2 } from \"@tiptap/core\";\n\n// src/keymap/listHelpers/nextListIsDeeper.ts\nvar nextListIsDeeper = (typeOrName, state) => {\n  const listDepth = getNextListDepth(typeOrName, state);\n  const listItemPos = findListItemPos(typeOrName, state);\n  if (!listItemPos || !listDepth) {\n    return false;\n  }\n  if (listDepth > listItemPos.depth) {\n    return true;\n  }\n  return false;\n};\n\n// src/keymap/listHelpers/nextListIsHigher.ts\nvar nextListIsHigher = (typeOrName, state) => {\n  const listDepth = getNextListDepth(typeOrName, state);\n  const listItemPos = findListItemPos(typeOrName, state);\n  if (!listItemPos || !listDepth) {\n    return false;\n  }\n  if (listDepth < listItemPos.depth) {\n    return true;\n  }\n  return false;\n};\n\n// src/keymap/listHelpers/handleDelete.ts\nvar handleDelete = (editor, name) => {\n  if (!isNodeActive2(editor.state, name)) {\n    return false;\n  }\n  if (!isAtEndOfNode(editor.state, name)) {\n    return false;\n  }\n  const { selection } = editor.state;\n  const { $from, $to } = selection;\n  if (!selection.empty && $from.sameParent($to)) {\n    return false;\n  }\n  if (nextListIsDeeper(name, editor.state)) {\n    return editor.chain().focus(editor.state.selection.from + 4).lift(name).joinBackward().run();\n  }\n  if (nextListIsHigher(name, editor.state)) {\n    return editor.chain().joinForward().joinBackward().run();\n  }\n  return editor.commands.joinItemForward();\n};\n\n// src/keymap/listHelpers/hasListItemAfter.ts\nvar hasListItemAfter = (typeOrName, state) => {\n  var _a;\n  const { $anchor } = state.selection;\n  const $targetPos = state.doc.resolve($anchor.pos - $anchor.parentOffset - 2);\n  if ($targetPos.index() === $targetPos.parent.childCount - 1) {\n    return false;\n  }\n  if (((_a = $targetPos.nodeAfter) == null ? void 0 : _a.type.name) !== typeOrName) {\n    return false;\n  }\n  return true;\n};\n\n// src/keymap/list-keymap.ts\nvar ListKeymap = Extension.create({\n  name: \"listKeymap\",\n  addOptions() {\n    return {\n      listTypes: [\n        {\n          itemName: \"listItem\",\n          wrapperNames: [\"bulletList\", \"orderedList\"]\n        },\n        {\n          itemName: \"taskItem\",\n          wrapperNames: [\"taskList\"]\n        }\n      ]\n    };\n  },\n  addKeyboardShortcuts() {\n    return {\n      Delete: ({ editor }) => {\n        let handled = false;\n        this.options.listTypes.forEach(({ itemName }) => {\n          if (editor.state.schema.nodes[itemName] === void 0) {\n            return;\n          }\n          if (handleDelete(editor, itemName)) {\n            handled = true;\n          }\n        });\n        return handled;\n      },\n      \"Mod-Delete\": ({ editor }) => {\n        let handled = false;\n        this.options.listTypes.forEach(({ itemName }) => {\n          if (editor.state.schema.nodes[itemName] === void 0) {\n            return;\n          }\n          if (handleDelete(editor, itemName)) {\n            handled = true;\n          }\n        });\n        return handled;\n      },\n      Backspace: ({ editor }) => {\n        let handled = false;\n        this.options.listTypes.forEach(({ itemName, wrapperNames }) => {\n          if (editor.state.schema.nodes[itemName] === void 0) {\n            return;\n          }\n          if (handleBackspace(editor, itemName, wrapperNames)) {\n            handled = true;\n          }\n        });\n        return handled;\n      },\n      \"Mod-Backspace\": ({ editor }) => {\n        let handled = false;\n        this.options.listTypes.forEach(({ itemName, wrapperNames }) => {\n          if (editor.state.schema.nodes[itemName] === void 0) {\n            return;\n          }\n          if (handleBackspace(editor, itemName, wrapperNames)) {\n            handled = true;\n          }\n        });\n        return handled;\n      }\n    };\n  }\n});\n\n// src/kit/index.ts\nimport { Extension as Extension2 } from \"@tiptap/core\";\n\n// src/ordered-list/ordered-list.ts\nimport { mergeAttributes as mergeAttributes3, Node as Node3, wrappingInputRule as wrappingInputRule2 } from \"@tiptap/core\";\nvar ListItemName2 = \"listItem\";\nvar TextStyleName2 = \"textStyle\";\nvar orderedListInputRegex = /^(\\d+)\\.\\s$/;\nvar OrderedList = Node3.create({\n  name: \"orderedList\",\n  addOptions() {\n    return {\n      itemTypeName: \"listItem\",\n      HTMLAttributes: {},\n      keepMarks: false,\n      keepAttributes: false\n    };\n  },\n  group: \"block list\",\n  content() {\n    return `${this.options.itemTypeName}+`;\n  },\n  addAttributes() {\n    return {\n      start: {\n        default: 1,\n        parseHTML: (element) => {\n          return element.hasAttribute(\"start\") ? parseInt(element.getAttribute(\"start\") || \"\", 10) : 1;\n        }\n      },\n      type: {\n        default: null,\n        parseHTML: (element) => element.getAttribute(\"type\")\n      }\n    };\n  },\n  parseHTML() {\n    return [\n      {\n        tag: \"ol\"\n      }\n    ];\n  },\n  renderHTML({ HTMLAttributes }) {\n    const { start, ...attributesWithoutStart } = HTMLAttributes;\n    return start === 1 ? [\"ol\", mergeAttributes3(this.options.HTMLAttributes, attributesWithoutStart), 0] : [\"ol\", mergeAttributes3(this.options.HTMLAttributes, HTMLAttributes), 0];\n  },\n  addCommands() {\n    return {\n      toggleOrderedList: () => ({ commands, chain }) => {\n        if (this.options.keepAttributes) {\n          return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItemName2, this.editor.getAttributes(TextStyleName2)).run();\n        }\n        return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks);\n      }\n    };\n  },\n  addKeyboardShortcuts() {\n    return {\n      \"Mod-Shift-7\": () => this.editor.commands.toggleOrderedList()\n    };\n  },\n  addInputRules() {\n    let inputRule = wrappingInputRule2({\n      find: orderedListInputRegex,\n      type: this.type,\n      getAttributes: (match) => ({ start: +match[1] }),\n      joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1]\n    });\n    if (this.options.keepMarks || this.options.keepAttributes) {\n      inputRule = wrappingInputRule2({\n        find: orderedListInputRegex,\n        type: this.type,\n        keepMarks: this.options.keepMarks,\n        keepAttributes: this.options.keepAttributes,\n        getAttributes: (match) => ({ start: +match[1], ...this.editor.getAttributes(TextStyleName2) }),\n        joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n        editor: this.editor\n      });\n    }\n    return [inputRule];\n  }\n});\n\n// src/task-item/task-item.ts\nimport { mergeAttributes as mergeAttributes4, Node as Node4, wrappingInputRule as wrappingInputRule3 } from \"@tiptap/core\";\nvar inputRegex = /^\\s*(\\[([( |x])?\\])\\s$/;\nvar TaskItem = Node4.create({\n  name: \"taskItem\",\n  addOptions() {\n    return {\n      nested: false,\n      HTMLAttributes: {},\n      taskListTypeName: \"taskList\",\n      a11y: void 0\n    };\n  },\n  content() {\n    return this.options.nested ? \"paragraph block*\" : \"paragraph+\";\n  },\n  defining: true,\n  addAttributes() {\n    return {\n      checked: {\n        default: false,\n        keepOnSplit: false,\n        parseHTML: (element) => {\n          const dataChecked = element.getAttribute(\"data-checked\");\n          return dataChecked === \"\" || dataChecked === \"true\";\n        },\n        renderHTML: (attributes) => ({\n          \"data-checked\": attributes.checked\n        })\n      }\n    };\n  },\n  parseHTML() {\n    return [\n      {\n        tag: `li[data-type=\"${this.name}\"]`,\n        priority: 51\n      }\n    ];\n  },\n  renderHTML({ node, HTMLAttributes }) {\n    return [\n      \"li\",\n      mergeAttributes4(this.options.HTMLAttributes, HTMLAttributes, {\n        \"data-type\": this.name\n      }),\n      [\n        \"label\",\n        [\n          \"input\",\n          {\n            type: \"checkbox\",\n            checked: node.attrs.checked ? \"checked\" : null\n          }\n        ],\n        [\"span\"]\n      ],\n      [\"div\", 0]\n    ];\n  },\n  addKeyboardShortcuts() {\n    const shortcuts = {\n      Enter: () => this.editor.commands.splitListItem(this.name),\n      \"Shift-Tab\": () => this.editor.commands.liftListItem(this.name)\n    };\n    if (!this.options.nested) {\n      return shortcuts;\n    }\n    return {\n      ...shortcuts,\n      Tab: () => this.editor.commands.sinkListItem(this.name)\n    };\n  },\n  addNodeView() {\n    return ({ node, HTMLAttributes, getPos, editor }) => {\n      const listItem = document.createElement(\"li\");\n      const checkboxWrapper = document.createElement(\"label\");\n      const checkboxStyler = document.createElement(\"span\");\n      const checkbox = document.createElement(\"input\");\n      const content = document.createElement(\"div\");\n      const updateA11Y = (currentNode) => {\n        var _a, _b;\n        checkbox.ariaLabel = ((_b = (_a = this.options.a11y) == null ? void 0 : _a.checkboxLabel) == null ? void 0 : _b.call(_a, currentNode, checkbox.checked)) || `Task item checkbox for ${currentNode.textContent || \"empty task item\"}`;\n      };\n      updateA11Y(node);\n      checkboxWrapper.contentEditable = \"false\";\n      checkbox.type = \"checkbox\";\n      checkbox.addEventListener(\"mousedown\", (event) => event.preventDefault());\n      checkbox.addEventListener(\"change\", (event) => {\n        if (!editor.isEditable && !this.options.onReadOnlyChecked) {\n          checkbox.checked = !checkbox.checked;\n          return;\n        }\n        const { checked } = event.target;\n        if (editor.isEditable && typeof getPos === \"function\") {\n          editor.chain().focus(void 0, { scrollIntoView: false }).command(({ tr }) => {\n            const position = getPos();\n            if (typeof position !== \"number\") {\n              return false;\n            }\n            const currentNode = tr.doc.nodeAt(position);\n            tr.setNodeMarkup(position, void 0, {\n              ...currentNode == null ? void 0 : currentNode.attrs,\n              checked\n            });\n            return true;\n          }).run();\n        }\n        if (!editor.isEditable && this.options.onReadOnlyChecked) {\n          if (!this.options.onReadOnlyChecked(node, checked)) {\n            checkbox.checked = !checkbox.checked;\n          }\n        }\n      });\n      Object.entries(this.options.HTMLAttributes).forEach(([key, value]) => {\n        listItem.setAttribute(key, value);\n      });\n      listItem.dataset.checked = node.attrs.checked;\n      checkbox.checked = node.attrs.checked;\n      checkboxWrapper.append(checkbox, checkboxStyler);\n      listItem.append(checkboxWrapper, content);\n      Object.entries(HTMLAttributes).forEach(([key, value]) => {\n        listItem.setAttribute(key, value);\n      });\n      return {\n        dom: listItem,\n        contentDOM: content,\n        update: (updatedNode) => {\n          if (updatedNode.type !== this.type) {\n            return false;\n          }\n          listItem.dataset.checked = updatedNode.attrs.checked;\n          checkbox.checked = updatedNode.attrs.checked;\n          updateA11Y(updatedNode);\n          return true;\n        }\n      };\n    };\n  },\n  addInputRules() {\n    return [\n      wrappingInputRule3({\n        find: inputRegex,\n        type: this.type,\n        getAttributes: (match) => ({\n          checked: match[match.length - 1] === \"x\"\n        })\n      })\n    ];\n  }\n});\n\n// src/task-list/task-list.ts\nimport { mergeAttributes as mergeAttributes5, Node as Node5 } from \"@tiptap/core\";\nvar TaskList = Node5.create({\n  name: \"taskList\",\n  addOptions() {\n    return {\n      itemTypeName: \"taskItem\",\n      HTMLAttributes: {}\n    };\n  },\n  group: \"block list\",\n  content() {\n    return `${this.options.itemTypeName}+`;\n  },\n  parseHTML() {\n    return [\n      {\n        tag: `ul[data-type=\"${this.name}\"]`,\n        priority: 51\n      }\n    ];\n  },\n  renderHTML({ HTMLAttributes }) {\n    return [\"ul\", mergeAttributes5(this.options.HTMLAttributes, HTMLAttributes, { \"data-type\": this.name }), 0];\n  },\n  addCommands() {\n    return {\n      toggleTaskList: () => ({ commands }) => {\n        return commands.toggleList(this.name, this.options.itemTypeName);\n      }\n    };\n  },\n  addKeyboardShortcuts() {\n    return {\n      \"Mod-Shift-9\": () => this.editor.commands.toggleTaskList()\n    };\n  }\n});\n\n// src/kit/index.ts\nvar ListKit = Extension2.create({\n  name: \"listKit\",\n  addExtensions() {\n    const extensions = [];\n    if (this.options.bulletList !== false) {\n      extensions.push(BulletList.configure(this.options.bulletList));\n    }\n    if (this.options.listItem !== false) {\n      extensions.push(ListItem.configure(this.options.listItem));\n    }\n    if (this.options.listKeymap !== false) {\n      extensions.push(ListKeymap.configure(this.options.listKeymap));\n    }\n    if (this.options.orderedList !== false) {\n      extensions.push(OrderedList.configure(this.options.orderedList));\n    }\n    if (this.options.taskItem !== false) {\n      extensions.push(TaskItem.configure(this.options.taskItem));\n    }\n    if (this.options.taskList !== false) {\n      extensions.push(TaskList.configure(this.options.taskList));\n    }\n    return extensions;\n  }\n});\nexport {\n  BulletList,\n  ListItem,\n  ListKeymap,\n  ListKit,\n  OrderedList,\n  TaskItem,\n  TaskList,\n  bulletListInputRegex,\n  inputRegex,\n  listHelpers_exports as listHelpers,\n  orderedListInputRegex\n};\n//# sourceMappingURL=index.js.map","// src/text-style/index.ts\nimport { Mark, mergeAttributes } from \"@tiptap/core\";\nvar mergeNestedSpanStyles = (element) => {\n  if (!element.children.length) {\n    return;\n  }\n  const childSpans = element.querySelectorAll(\"span\");\n  if (!childSpans) {\n    return;\n  }\n  childSpans.forEach((childSpan) => {\n    var _a, _b;\n    const childStyle = childSpan.getAttribute(\"style\");\n    const closestParentSpanStyleOfChild = (_b = (_a = childSpan.parentElement) == null ? void 0 : _a.closest(\"span\")) == null ? void 0 : _b.getAttribute(\"style\");\n    childSpan.setAttribute(\"style\", `${closestParentSpanStyleOfChild};${childStyle}`);\n  });\n};\nvar TextStyle = Mark.create({\n  name: \"textStyle\",\n  priority: 101,\n  addOptions() {\n    return {\n      HTMLAttributes: {},\n      mergeNestedSpanStyles: true\n    };\n  },\n  parseHTML() {\n    return [\n      {\n        tag: \"span\",\n        consuming: false,\n        getAttrs: (element) => {\n          const hasStyles = element.hasAttribute(\"style\");\n          if (!hasStyles) {\n            return false;\n          }\n          if (this.options.mergeNestedSpanStyles) {\n            mergeNestedSpanStyles(element);\n          }\n          return {};\n        }\n      }\n    ];\n  },\n  renderHTML({ HTMLAttributes }) {\n    return [\"span\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n  },\n  addCommands() {\n    return {\n      toggleTextStyle: (attributes) => ({ commands }) => {\n        return commands.toggleMark(this.name, attributes);\n      },\n      removeEmptyTextStyle: () => ({ tr }) => {\n        const { selection } = tr;\n        tr.doc.nodesBetween(selection.from, selection.to, (node, pos) => {\n          if (node.isTextblock) {\n            return true;\n          }\n          if (!node.marks.filter((mark) => mark.type === this.type).some((mark) => Object.values(mark.attrs).some((value) => !!value))) {\n            tr.removeMark(pos, pos + node.nodeSize, this.type);\n          }\n        });\n        return true;\n      }\n    };\n  }\n});\n\n// src/background-color/background-color.ts\nimport { Extension } from \"@tiptap/core\";\nvar BackgroundColor = Extension.create({\n  name: \"backgroundColor\",\n  addOptions() {\n    return {\n      types: [\"textStyle\"]\n    };\n  },\n  addGlobalAttributes() {\n    return [\n      {\n        types: this.options.types,\n        attributes: {\n          backgroundColor: {\n            default: null,\n            parseHTML: (element) => {\n              var _a;\n              const styleAttr = element.getAttribute(\"style\");\n              if (styleAttr) {\n                const decls = styleAttr.split(\";\").map((s) => s.trim()).filter(Boolean);\n                for (let i = decls.length - 1; i >= 0; i -= 1) {\n                  const parts = decls[i].split(\":\");\n                  if (parts.length >= 2) {\n                    const prop = parts[0].trim().toLowerCase();\n                    const val = parts.slice(1).join(\":\").trim();\n                    if (prop === \"background-color\") {\n                      return val.replace(/['\"]+/g, \"\");\n                    }\n                  }\n                }\n              }\n              return (_a = element.style.backgroundColor) == null ? void 0 : _a.replace(/['\"]+/g, \"\");\n            },\n            renderHTML: (attributes) => {\n              if (!attributes.backgroundColor) {\n                return {};\n              }\n              return {\n                style: `background-color: ${attributes.backgroundColor}`\n              };\n            }\n          }\n        }\n      }\n    ];\n  },\n  addCommands() {\n    return {\n      setBackgroundColor: (backgroundColor) => ({ chain }) => {\n        return chain().setMark(\"textStyle\", { backgroundColor }).run();\n      },\n      unsetBackgroundColor: () => ({ chain }) => {\n        return chain().setMark(\"textStyle\", { backgroundColor: null }).removeEmptyTextStyle().run();\n      }\n    };\n  }\n});\n\n// src/color/color.ts\nimport { Extension as Extension2 } from \"@tiptap/core\";\nvar Color = Extension2.create({\n  name: \"color\",\n  addOptions() {\n    return {\n      types: [\"textStyle\"]\n    };\n  },\n  addGlobalAttributes() {\n    return [\n      {\n        types: this.options.types,\n        attributes: {\n          color: {\n            default: null,\n            parseHTML: (element) => {\n              var _a;\n              const styleAttr = element.getAttribute(\"style\");\n              if (styleAttr) {\n                const decls = styleAttr.split(\";\").map((s) => s.trim()).filter(Boolean);\n                for (let i = decls.length - 1; i >= 0; i -= 1) {\n                  const parts = decls[i].split(\":\");\n                  if (parts.length >= 2) {\n                    const prop = parts[0].trim().toLowerCase();\n                    const val = parts.slice(1).join(\":\").trim();\n                    if (prop === \"color\") {\n                      return val.replace(/['\"]+/g, \"\");\n                    }\n                  }\n                }\n              }\n              return (_a = element.style.color) == null ? void 0 : _a.replace(/['\"]+/g, \"\");\n            },\n            renderHTML: (attributes) => {\n              if (!attributes.color) {\n                return {};\n              }\n              return {\n                style: `color: ${attributes.color}`\n              };\n            }\n          }\n        }\n      }\n    ];\n  },\n  addCommands() {\n    return {\n      setColor: (color) => ({ chain }) => {\n        return chain().setMark(\"textStyle\", { color }).run();\n      },\n      unsetColor: () => ({ chain }) => {\n        return chain().setMark(\"textStyle\", { color: null }).removeEmptyTextStyle().run();\n      }\n    };\n  }\n});\n\n// src/font-family/font-family.ts\nimport { Extension as Extension3 } from \"@tiptap/core\";\nvar FontFamily = Extension3.create({\n  name: \"fontFamily\",\n  addOptions() {\n    return {\n      types: [\"textStyle\"]\n    };\n  },\n  addGlobalAttributes() {\n    return [\n      {\n        types: this.options.types,\n        attributes: {\n          fontFamily: {\n            default: null,\n            parseHTML: (element) => element.style.fontFamily,\n            renderHTML: (attributes) => {\n              if (!attributes.fontFamily) {\n                return {};\n              }\n              return {\n                style: `font-family: ${attributes.fontFamily}`\n              };\n            }\n          }\n        }\n      }\n    ];\n  },\n  addCommands() {\n    return {\n      setFontFamily: (fontFamily) => ({ chain }) => {\n        return chain().setMark(\"textStyle\", { fontFamily }).run();\n      },\n      unsetFontFamily: () => ({ chain }) => {\n        return chain().setMark(\"textStyle\", { fontFamily: null }).removeEmptyTextStyle().run();\n      }\n    };\n  }\n});\n\n// src/font-size/font-size.ts\nimport { Extension as Extension4 } from \"@tiptap/core\";\nvar FontSize = Extension4.create({\n  name: \"fontSize\",\n  addOptions() {\n    return {\n      types: [\"textStyle\"]\n    };\n  },\n  addGlobalAttributes() {\n    return [\n      {\n        types: this.options.types,\n        attributes: {\n          fontSize: {\n            default: null,\n            parseHTML: (element) => element.style.fontSize,\n            renderHTML: (attributes) => {\n              if (!attributes.fontSize) {\n                return {};\n              }\n              return {\n                style: `font-size: ${attributes.fontSize}`\n              };\n            }\n          }\n        }\n      }\n    ];\n  },\n  addCommands() {\n    return {\n      setFontSize: (fontSize) => ({ chain }) => {\n        return chain().setMark(\"textStyle\", { fontSize }).run();\n      },\n      unsetFontSize: () => ({ chain }) => {\n        return chain().setMark(\"textStyle\", { fontSize: null }).removeEmptyTextStyle().run();\n      }\n    };\n  }\n});\n\n// src/line-height/line-height.ts\nimport { Extension as Extension5 } from \"@tiptap/core\";\nvar LineHeight = Extension5.create({\n  name: \"lineHeight\",\n  addOptions() {\n    return {\n      types: [\"textStyle\"]\n    };\n  },\n  addGlobalAttributes() {\n    return [\n      {\n        types: this.options.types,\n        attributes: {\n          lineHeight: {\n            default: null,\n            parseHTML: (element) => element.style.lineHeight,\n            renderHTML: (attributes) => {\n              if (!attributes.lineHeight) {\n                return {};\n              }\n              return {\n                style: `line-height: ${attributes.lineHeight}`\n              };\n            }\n          }\n        }\n      }\n    ];\n  },\n  addCommands() {\n    return {\n      setLineHeight: (lineHeight) => ({ chain }) => {\n        return chain().setMark(\"textStyle\", { lineHeight }).run();\n      },\n      unsetLineHeight: () => ({ chain }) => {\n        return chain().setMark(\"textStyle\", { lineHeight: null }).removeEmptyTextStyle().run();\n      }\n    };\n  }\n});\n\n// src/text-style-kit/index.ts\nimport { Extension as Extension6 } from \"@tiptap/core\";\nvar TextStyleKit = Extension6.create({\n  name: \"textStyleKit\",\n  addExtensions() {\n    const extensions = [];\n    if (this.options.backgroundColor !== false) {\n      extensions.push(BackgroundColor.configure(this.options.backgroundColor));\n    }\n    if (this.options.color !== false) {\n      extensions.push(Color.configure(this.options.color));\n    }\n    if (this.options.fontFamily !== false) {\n      extensions.push(FontFamily.configure(this.options.fontFamily));\n    }\n    if (this.options.fontSize !== false) {\n      extensions.push(FontSize.configure(this.options.fontSize));\n    }\n    if (this.options.lineHeight !== false) {\n      extensions.push(LineHeight.configure(this.options.lineHeight));\n    }\n    if (this.options.textStyle !== false) {\n      extensions.push(TextStyle.configure(this.options.textStyle));\n    }\n    return extensions;\n  }\n});\nexport {\n  BackgroundColor,\n  Color,\n  FontFamily,\n  FontSize,\n  LineHeight,\n  TextStyle,\n  TextStyleKit\n};\n//# sourceMappingURL=index.js.map","// src/typography.ts\nimport { Extension, textInputRule } from \"@tiptap/core\";\nvar emDash = (override) => textInputRule({\n  find: /--$/,\n  replace: override != null ? override : \"\\u2014\"\n});\nvar ellipsis = (override) => textInputRule({\n  find: /\\.\\.\\.$/,\n  replace: override != null ? override : \"\\u2026\"\n});\nvar openDoubleQuote = (override) => textInputRule({\n  find: /(?:^|[\\s{[(<'\"\\u2018\\u201C])(\")$/,\n  replace: override != null ? override : \"\\u201C\"\n});\nvar closeDoubleQuote = (override) => textInputRule({\n  find: /\"$/,\n  replace: override != null ? override : \"\\u201D\"\n});\nvar openSingleQuote = (override) => textInputRule({\n  find: /(?:^|[\\s{[(<'\"\\u2018\\u201C])(')$/,\n  replace: override != null ? override : \"\\u2018\"\n});\nvar closeSingleQuote = (override) => textInputRule({\n  find: /'$/,\n  replace: override != null ? override : \"\\u2019\"\n});\nvar leftArrow = (override) => textInputRule({\n  find: /<-$/,\n  replace: override != null ? override : \"\\u2190\"\n});\nvar rightArrow = (override) => textInputRule({\n  find: /->$/,\n  replace: override != null ? override : \"\\u2192\"\n});\nvar copyright = (override) => textInputRule({\n  find: /\\(c\\)$/,\n  replace: override != null ? override : \"\\xA9\"\n});\nvar trademark = (override) => textInputRule({\n  find: /\\(tm\\)$/,\n  replace: override != null ? override : \"\\u2122\"\n});\nvar servicemark = (override) => textInputRule({\n  find: /\\(sm\\)$/,\n  replace: override != null ? override : \"\\u2120\"\n});\nvar registeredTrademark = (override) => textInputRule({\n  find: /\\(r\\)$/,\n  replace: override != null ? override : \"\\xAE\"\n});\nvar oneHalf = (override) => textInputRule({\n  find: /(?:^|\\s)(1\\/2)\\s$/,\n  replace: override != null ? override : \"\\xBD\"\n});\nvar plusMinus = (override) => textInputRule({\n  find: /\\+\\/-$/,\n  replace: override != null ? override : \"\\xB1\"\n});\nvar notEqual = (override) => textInputRule({\n  find: /!=$/,\n  replace: override != null ? override : \"\\u2260\"\n});\nvar laquo = (override) => textInputRule({\n  find: /<<$/,\n  replace: override != null ? override : \"\\xAB\"\n});\nvar raquo = (override) => textInputRule({\n  find: />>$/,\n  replace: override != null ? override : \"\\xBB\"\n});\nvar multiplication = (override) => textInputRule({\n  find: /\\d+\\s?([*x])\\s?\\d+$/,\n  replace: override != null ? override : \"\\xD7\"\n});\nvar superscriptTwo = (override) => textInputRule({\n  find: /\\^2$/,\n  replace: override != null ? override : \"\\xB2\"\n});\nvar superscriptThree = (override) => textInputRule({\n  find: /\\^3$/,\n  replace: override != null ? override : \"\\xB3\"\n});\nvar oneQuarter = (override) => textInputRule({\n  find: /(?:^|\\s)(1\\/4)\\s$/,\n  replace: override != null ? override : \"\\xBC\"\n});\nvar threeQuarters = (override) => textInputRule({\n  find: /(?:^|\\s)(3\\/4)\\s$/,\n  replace: override != null ? override : \"\\xBE\"\n});\nvar Typography = Extension.create({\n  name: \"typography\",\n  addOptions() {\n    return {\n      closeDoubleQuote: \"\\u201D\",\n      closeSingleQuote: \"\\u2019\",\n      copyright: \"\\xA9\",\n      ellipsis: \"\\u2026\",\n      emDash: \"\\u2014\",\n      laquo: \"\\xAB\",\n      leftArrow: \"\\u2190\",\n      multiplication: \"\\xD7\",\n      notEqual: \"\\u2260\",\n      oneHalf: \"\\xBD\",\n      oneQuarter: \"\\xBC\",\n      openDoubleQuote: \"\\u201C\",\n      openSingleQuote: \"\\u2018\",\n      plusMinus: \"\\xB1\",\n      raquo: \"\\xBB\",\n      registeredTrademark: \"\\xAE\",\n      rightArrow: \"\\u2192\",\n      servicemark: \"\\u2120\",\n      superscriptThree: \"\\xB3\",\n      superscriptTwo: \"\\xB2\",\n      threeQuarters: \"\\xBE\",\n      trademark: \"\\u2122\"\n    };\n  },\n  addInputRules() {\n    const rules = [];\n    if (this.options.emDash !== false) {\n      rules.push(emDash(this.options.emDash));\n    }\n    if (this.options.ellipsis !== false) {\n      rules.push(ellipsis(this.options.ellipsis));\n    }\n    if (this.options.openDoubleQuote !== false) {\n      rules.push(openDoubleQuote(this.options.openDoubleQuote));\n    }\n    if (this.options.closeDoubleQuote !== false) {\n      rules.push(closeDoubleQuote(this.options.closeDoubleQuote));\n    }\n    if (this.options.openSingleQuote !== false) {\n      rules.push(openSingleQuote(this.options.openSingleQuote));\n    }\n    if (this.options.closeSingleQuote !== false) {\n      rules.push(closeSingleQuote(this.options.closeSingleQuote));\n    }\n    if (this.options.leftArrow !== false) {\n      rules.push(leftArrow(this.options.leftArrow));\n    }\n    if (this.options.rightArrow !== false) {\n      rules.push(rightArrow(this.options.rightArrow));\n    }\n    if (this.options.copyright !== false) {\n      rules.push(copyright(this.options.copyright));\n    }\n    if (this.options.trademark !== false) {\n      rules.push(trademark(this.options.trademark));\n    }\n    if (this.options.servicemark !== false) {\n      rules.push(servicemark(this.options.servicemark));\n    }\n    if (this.options.registeredTrademark !== false) {\n      rules.push(registeredTrademark(this.options.registeredTrademark));\n    }\n    if (this.options.oneHalf !== false) {\n      rules.push(oneHalf(this.options.oneHalf));\n    }\n    if (this.options.plusMinus !== false) {\n      rules.push(plusMinus(this.options.plusMinus));\n    }\n    if (this.options.notEqual !== false) {\n      rules.push(notEqual(this.options.notEqual));\n    }\n    if (this.options.laquo !== false) {\n      rules.push(laquo(this.options.laquo));\n    }\n    if (this.options.raquo !== false) {\n      rules.push(raquo(this.options.raquo));\n    }\n    if (this.options.multiplication !== false) {\n      rules.push(multiplication(this.options.multiplication));\n    }\n    if (this.options.superscriptTwo !== false) {\n      rules.push(superscriptTwo(this.options.superscriptTwo));\n    }\n    if (this.options.superscriptThree !== false) {\n      rules.push(superscriptThree(this.options.superscriptThree));\n    }\n    if (this.options.oneQuarter !== false) {\n      rules.push(oneQuarter(this.options.oneQuarter));\n    }\n    if (this.options.threeQuarters !== false) {\n      rules.push(threeQuarters(this.options.threeQuarters));\n    }\n    return rules;\n  }\n});\n\n// src/index.ts\nvar index_default = Typography;\nexport {\n  Typography,\n  closeDoubleQuote,\n  closeSingleQuote,\n  copyright,\n  index_default as default,\n  ellipsis,\n  emDash,\n  laquo,\n  leftArrow,\n  multiplication,\n  notEqual,\n  oneHalf,\n  oneQuarter,\n  openDoubleQuote,\n  openSingleQuote,\n  plusMinus,\n  raquo,\n  registeredTrademark,\n  rightArrow,\n  servicemark,\n  superscriptThree,\n  superscriptTwo,\n  threeQuarters,\n  trademark\n};\n//# sourceMappingURL=index.js.map","// src/highlight.ts\nimport { Mark, markInputRule, markPasteRule, mergeAttributes } from \"@tiptap/core\";\nvar inputRegex = /(?:^|\\s)(==(?!\\s+==)((?:[^=]+))==(?!\\s+==))$/;\nvar pasteRegex = /(?:^|\\s)(==(?!\\s+==)((?:[^=]+))==(?!\\s+==))/g;\nvar Highlight = Mark.create({\n  name: \"highlight\",\n  addOptions() {\n    return {\n      multicolor: false,\n      HTMLAttributes: {}\n    };\n  },\n  addAttributes() {\n    if (!this.options.multicolor) {\n      return {};\n    }\n    return {\n      color: {\n        default: null,\n        parseHTML: (element) => element.getAttribute(\"data-color\") || element.style.backgroundColor,\n        renderHTML: (attributes) => {\n          if (!attributes.color) {\n            return {};\n          }\n          return {\n            \"data-color\": attributes.color,\n            style: `background-color: ${attributes.color}; color: inherit`\n          };\n        }\n      }\n    };\n  },\n  parseHTML() {\n    return [\n      {\n        tag: \"mark\"\n      }\n    ];\n  },\n  renderHTML({ HTMLAttributes }) {\n    return [\"mark\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n  },\n  addCommands() {\n    return {\n      setHighlight: (attributes) => ({ commands }) => {\n        return commands.setMark(this.name, attributes);\n      },\n      toggleHighlight: (attributes) => ({ commands }) => {\n        return commands.toggleMark(this.name, attributes);\n      },\n      unsetHighlight: () => ({ commands }) => {\n        return commands.unsetMark(this.name);\n      }\n    };\n  },\n  addKeyboardShortcuts() {\n    return {\n      \"Mod-Shift-h\": () => this.editor.commands.toggleHighlight()\n    };\n  },\n  addInputRules() {\n    return [\n      markInputRule({\n        find: inputRegex,\n        type: this.type\n      })\n    ];\n  },\n  addPasteRules() {\n    return [\n      markPasteRule({\n        find: pasteRegex,\n        type: this.type\n      })\n    ];\n  }\n});\n\n// src/index.ts\nvar index_default = Highlight;\nexport {\n  Highlight,\n  index_default as default,\n  inputRegex,\n  pasteRegex\n};\n//# sourceMappingURL=index.js.map","// src/superscript.ts\nimport { Mark, mergeAttributes } from \"@tiptap/core\";\nvar Superscript = Mark.create({\n  name: \"superscript\",\n  addOptions() {\n    return {\n      HTMLAttributes: {}\n    };\n  },\n  parseHTML() {\n    return [\n      {\n        tag: \"sup\"\n      },\n      {\n        style: \"vertical-align\",\n        getAttrs(value) {\n          if (value !== \"super\") {\n            return false;\n          }\n          return null;\n        }\n      }\n    ];\n  },\n  renderHTML({ HTMLAttributes }) {\n    return [\"sup\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n  },\n  addCommands() {\n    return {\n      setSuperscript: () => ({ commands }) => {\n        return commands.setMark(this.name);\n      },\n      toggleSuperscript: () => ({ commands }) => {\n        return commands.toggleMark(this.name);\n      },\n      unsetSuperscript: () => ({ commands }) => {\n        return commands.unsetMark(this.name);\n      }\n    };\n  },\n  addKeyboardShortcuts() {\n    return {\n      \"Mod-.\": () => this.editor.commands.toggleSuperscript()\n    };\n  }\n});\n\n// src/index.ts\nvar index_default = Superscript;\nexport {\n  Superscript,\n  index_default as default\n};\n//# sourceMappingURL=index.js.map","// src/subscript.ts\nimport { Mark, mergeAttributes } from \"@tiptap/core\";\nvar Subscript = Mark.create({\n  name: \"subscript\",\n  addOptions() {\n    return {\n      HTMLAttributes: {}\n    };\n  },\n  parseHTML() {\n    return [\n      {\n        tag: \"sub\"\n      },\n      {\n        style: \"vertical-align\",\n        getAttrs(value) {\n          if (value !== \"sub\") {\n            return false;\n          }\n          return null;\n        }\n      }\n    ];\n  },\n  renderHTML({ HTMLAttributes }) {\n    return [\"sub\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n  },\n  addCommands() {\n    return {\n      setSubscript: () => ({ commands }) => {\n        return commands.setMark(this.name);\n      },\n      toggleSubscript: () => ({ commands }) => {\n        return commands.toggleMark(this.name);\n      },\n      unsetSubscript: () => ({ commands }) => {\n        return commands.unsetMark(this.name);\n      }\n    };\n  },\n  addKeyboardShortcuts() {\n    return {\n      \"Mod-,\": () => this.editor.commands.toggleSubscript()\n    };\n  }\n});\n\n// src/index.ts\nvar index_default = Subscript;\nexport {\n  Subscript,\n  index_default as default\n};\n//# sourceMappingURL=index.js.map","// src/text-align.ts\nimport { Extension } from \"@tiptap/core\";\nvar TextAlign = Extension.create({\n  name: \"textAlign\",\n  addOptions() {\n    return {\n      types: [],\n      alignments: [\"left\", \"center\", \"right\", \"justify\"],\n      defaultAlignment: null\n    };\n  },\n  addGlobalAttributes() {\n    return [\n      {\n        types: this.options.types,\n        attributes: {\n          textAlign: {\n            default: this.options.defaultAlignment,\n            parseHTML: (element) => {\n              const alignment = element.style.textAlign;\n              return this.options.alignments.includes(alignment) ? alignment : this.options.defaultAlignment;\n            },\n            renderHTML: (attributes) => {\n              if (!attributes.textAlign) {\n                return {};\n              }\n              return { style: `text-align: ${attributes.textAlign}` };\n            }\n          }\n        }\n      }\n    ];\n  },\n  addCommands() {\n    return {\n      setTextAlign: (alignment) => ({ commands }) => {\n        if (!this.options.alignments.includes(alignment)) {\n          return false;\n        }\n        return this.options.types.map((type) => commands.updateAttributes(type, { textAlign: alignment })).every((response) => response);\n      },\n      unsetTextAlign: () => ({ commands }) => {\n        return this.options.types.map((type) => commands.resetAttributes(type, \"textAlign\")).every((response) => response);\n      },\n      toggleTextAlign: (alignment) => ({ editor, commands }) => {\n        if (!this.options.alignments.includes(alignment)) {\n          return false;\n        }\n        if (editor.isActive({ textAlign: alignment })) {\n          return commands.unsetTextAlign();\n        }\n        return commands.setTextAlign(alignment);\n      }\n    };\n  },\n  addKeyboardShortcuts() {\n    return {\n      \"Mod-Shift-l\": () => this.editor.commands.setTextAlign(\"left\"),\n      \"Mod-Shift-e\": () => this.editor.commands.setTextAlign(\"center\"),\n      \"Mod-Shift-r\": () => this.editor.commands.setTextAlign(\"right\"),\n      \"Mod-Shift-j\": () => this.editor.commands.setTextAlign(\"justify\")\n    };\n  }\n});\n\n// src/index.ts\nvar index_default = TextAlign;\nexport {\n  TextAlign,\n  index_default as default\n};\n//# sourceMappingURL=index.js.map","/**\n * Lexing or parsing positional information for error reporting.\n * This object is immutable.\n */\nclass SourceLocation {\n  // The + prefix indicates that these fields aren't writeable\n  // Lexer holding the input string.\n  // Start offset, zero-based inclusive.\n  // End offset, zero-based exclusive.\n  constructor(lexer, start, end) {\n    this.lexer = void 0;\n    this.start = void 0;\n    this.end = void 0;\n    this.lexer = lexer;\n    this.start = start;\n    this.end = end;\n  }\n  /**\n   * Merges two `SourceLocation`s from location providers, given they are\n   * provided in order of appearance.\n   * - Returns the first one's location if only the first is provided.\n   * - Returns a merged range of the first and the last if both are provided\n   *   and their lexers match.\n   * - Otherwise, returns null.\n   */\n\n\n  static range(first, second) {\n    if (!second) {\n      return first && first.loc;\n    } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) {\n      return null;\n    } else {\n      return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end);\n    }\n  }\n\n}\n\n/**\n * Interface required to break circular dependency between Token, Lexer, and\n * ParseError.\n */\n\n/**\n * The resulting token returned from `lex`.\n *\n * It consists of the token text plus some position information.\n * The position information is essentially a range in an input string,\n * but instead of referencing the bare input string, we refer to the lexer.\n * That way it is possible to attach extra metadata to the input string,\n * like for example a file name or similar.\n *\n * The position information is optional, so it is OK to construct synthetic\n * tokens if appropriate. Not providing available position information may\n * lead to degraded error reporting, though.\n */\nclass Token {\n  // don't expand the token\n  // used in \\noexpand\n  constructor(text, // the text of this token\n  loc) {\n    this.text = void 0;\n    this.loc = void 0;\n    this.noexpand = void 0;\n    this.treatAsRelax = void 0;\n    this.text = text;\n    this.loc = loc;\n  }\n  /**\n   * Given a pair of tokens (this and endToken), compute a `Token` encompassing\n   * the whole input range enclosed by these two.\n   */\n\n\n  range(endToken, // last token of the range, inclusive\n  text // the text of the newly constructed token\n  ) {\n    return new Token(text, SourceLocation.range(this, endToken));\n  }\n\n}\n\n/**\n * This is the ParseError class, which is the main error thrown by KaTeX\n * functions when something has gone wrong. This is used to distinguish internal\n * errors from errors in the expression that the user provided.\n *\n * If possible, a caller should provide a Token or ParseNode with information\n * about where in the source string the problem occurred.\n */\nclass ParseError {\n  // Error start position based on passed-in Token or ParseNode.\n  // Length of affected text based on passed-in Token or ParseNode.\n  // The underlying error message without any context added.\n  constructor(message, // The error message\n  token // An object providing position information\n  ) {\n    this.name = void 0;\n    this.position = void 0;\n    this.length = void 0;\n    this.rawMessage = void 0;\n    var error = \"KaTeX parse error: \" + message;\n    var start;\n    var end;\n    var loc = token && token.loc;\n\n    if (loc && loc.start <= loc.end) {\n      // If we have the input and a position, make the error a bit fancier\n      // Get the input\n      var input = loc.lexer.input; // Prepend some information\n\n      start = loc.start;\n      end = loc.end;\n\n      if (start === input.length) {\n        error += \" at end of input: \";\n      } else {\n        error += \" at position \" + (start + 1) + \": \";\n      } // Underline token in question using combining underscores\n\n\n      var underlined = input.slice(start, end).replace(/[^]/g, \"$&\\u0332\"); // Extract some context from the input and add it to the error\n\n      var left;\n\n      if (start > 15) {\n        left = \"…\" + input.slice(start - 15, start);\n      } else {\n        left = input.slice(0, start);\n      }\n\n      var right;\n\n      if (end + 15 < input.length) {\n        right = input.slice(end, end + 15) + \"…\";\n      } else {\n        right = input.slice(end);\n      }\n\n      error += left + underlined + right;\n    } // Some hackery to make ParseError a prototype of Error\n    // See http://stackoverflow.com/a/8460753\n    // $FlowFixMe\n\n\n    var self = new Error(error);\n    self.name = \"ParseError\"; // $FlowFixMe\n\n    self.__proto__ = ParseError.prototype;\n    self.position = start;\n\n    if (start != null && end != null) {\n      self.length = end - start;\n    }\n\n    self.rawMessage = message;\n    return self;\n  }\n\n} // $FlowFixMe More hackery\n\n\nParseError.prototype.__proto__ = Error.prototype;\n\n/**\n * This file contains a list of utility functions which are useful in other\n * files.\n */\n\n/**\n * Return whether an element is contained in a list\n */\nvar contains = function contains(list, elem) {\n  return list.indexOf(elem) !== -1;\n};\n/**\n * Provide a default value if a setting is undefined\n * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022.\n */\n\n\nvar deflt = function deflt(setting, defaultIfUndefined) {\n  return setting === undefined ? defaultIfUndefined : setting;\n}; // hyphenate and escape adapted from Facebook's React under Apache 2 license\n\n\nvar uppercase = /([A-Z])/g;\n\nvar hyphenate = function hyphenate(str) {\n  return str.replace(uppercase, \"-$1\").toLowerCase();\n};\n\nvar ESCAPE_LOOKUP = {\n  \"&\": \"&amp;\",\n  \">\": \"&gt;\",\n  \"<\": \"&lt;\",\n  \"\\\"\": \"&quot;\",\n  \"'\": \"&#x27;\"\n};\nvar ESCAPE_REGEX = /[&><\"']/g;\n/**\n * Escapes text to prevent scripting attacks.\n */\n\nfunction escape(text) {\n  return String(text).replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]);\n}\n/**\n * Sometimes we want to pull out the innermost element of a group. In most\n * cases, this will just be the group itself, but when ordgroups and colors have\n * a single element, we want to pull that out.\n */\n\n\nvar getBaseElem = function getBaseElem(group) {\n  if (group.type === \"ordgroup\") {\n    if (group.body.length === 1) {\n      return getBaseElem(group.body[0]);\n    } else {\n      return group;\n    }\n  } else if (group.type === \"color\") {\n    if (group.body.length === 1) {\n      return getBaseElem(group.body[0]);\n    } else {\n      return group;\n    }\n  } else if (group.type === \"font\") {\n    return getBaseElem(group.body);\n  } else {\n    return group;\n  }\n};\n/**\n * TeXbook algorithms often reference \"character boxes\", which are simply groups\n * with a single character in them. To decide if something is a character box,\n * we find its innermost group, and see if it is a single character.\n */\n\n\nvar isCharacterBox = function isCharacterBox(group) {\n  var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters\n\n  return baseElem.type === \"mathord\" || baseElem.type === \"textord\" || baseElem.type === \"atom\";\n};\n\nvar assert = function assert(value) {\n  if (!value) {\n    throw new Error('Expected non-null, but got ' + String(value));\n  }\n\n  return value;\n};\n/**\n * Return the protocol of a URL, or \"_relative\" if the URL does not specify a\n * protocol (and thus is relative), or `null` if URL has invalid protocol\n * (so should be outright rejected).\n */\n\nvar protocolFromUrl = function protocolFromUrl(url) {\n  // Check for possible leading protocol.\n  // https://url.spec.whatwg.org/#url-parsing strips leading whitespace\n  // (U+20) or C0 control (U+00-U+1F) characters.\n  // eslint-disable-next-line no-control-regex\n  var protocol = /^[\\x00-\\x20]*([^\\\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(url);\n\n  if (!protocol) {\n    return \"_relative\";\n  } // Reject weird colons\n\n\n  if (protocol[2] !== \":\") {\n    return null;\n  } // Reject invalid characters in scheme according to\n  // https://datatracker.ietf.org/doc/html/rfc3986#section-3.1\n\n\n  if (!/^[a-zA-Z][a-zA-Z0-9+\\-.]*$/.test(protocol[1])) {\n    return null;\n  } // Lowercase the protocol\n\n\n  return protocol[1].toLowerCase();\n};\nvar utils = {\n  contains,\n  deflt,\n  escape,\n  hyphenate,\n  getBaseElem,\n  isCharacterBox,\n  protocolFromUrl\n};\n\n/* eslint no-console:0 */\n// TODO: automatically generate documentation\n// TODO: check all properties on Settings exist\n// TODO: check the type of a property on Settings matches\nvar SETTINGS_SCHEMA = {\n  displayMode: {\n    type: \"boolean\",\n    description: \"Render math in display mode, which puts the math in \" + \"display style (so \\\\int and \\\\sum are large, for example), and \" + \"centers the math on the page on its own line.\",\n    cli: \"-d, --display-mode\"\n  },\n  output: {\n    type: {\n      enum: [\"htmlAndMathml\", \"html\", \"mathml\"]\n    },\n    description: \"Determines the markup language of the output.\",\n    cli: \"-F, --format <type>\"\n  },\n  leqno: {\n    type: \"boolean\",\n    description: \"Render display math in leqno style (left-justified tags).\"\n  },\n  fleqn: {\n    type: \"boolean\",\n    description: \"Render display math flush left.\"\n  },\n  throwOnError: {\n    type: \"boolean\",\n    default: true,\n    cli: \"-t, --no-throw-on-error\",\n    cliDescription: \"Render errors (in the color given by --error-color) ins\" + \"tead of throwing a ParseError exception when encountering an error.\"\n  },\n  errorColor: {\n    type: \"string\",\n    default: \"#cc0000\",\n    cli: \"-c, --error-color <color>\",\n    cliDescription: \"A color string given in the format 'rgb' or 'rrggbb' \" + \"(no #). This option determines the color of errors rendered by the \" + \"-t option.\",\n    cliProcessor: color => \"#\" + color\n  },\n  macros: {\n    type: \"object\",\n    cli: \"-m, --macro <def>\",\n    cliDescription: \"Define custom macro of the form '\\\\foo:expansion' (use \" + \"multiple -m arguments for multiple macros).\",\n    cliDefault: [],\n    cliProcessor: (def, defs) => {\n      defs.push(def);\n      return defs;\n    }\n  },\n  minRuleThickness: {\n    type: \"number\",\n    description: \"Specifies a minimum thickness, in ems, for fraction lines,\" + \" `\\\\sqrt` top lines, `{array}` vertical lines, `\\\\hline`, \" + \"`\\\\hdashline`, `\\\\underline`, `\\\\overline`, and the borders of \" + \"`\\\\fbox`, `\\\\boxed`, and `\\\\fcolorbox`.\",\n    processor: t => Math.max(0, t),\n    cli: \"--min-rule-thickness <size>\",\n    cliProcessor: parseFloat\n  },\n  colorIsTextColor: {\n    type: \"boolean\",\n    description: \"Makes \\\\color behave like LaTeX's 2-argument \\\\textcolor, \" + \"instead of LaTeX's one-argument \\\\color mode change.\",\n    cli: \"-b, --color-is-text-color\"\n  },\n  strict: {\n    type: [{\n      enum: [\"warn\", \"ignore\", \"error\"]\n    }, \"boolean\", \"function\"],\n    description: \"Turn on strict / LaTeX faithfulness mode, which throws an \" + \"error if the input uses features that are not supported by LaTeX.\",\n    cli: \"-S, --strict\",\n    cliDefault: false\n  },\n  trust: {\n    type: [\"boolean\", \"function\"],\n    description: \"Trust the input, enabling all HTML features such as \\\\url.\",\n    cli: \"-T, --trust\"\n  },\n  maxSize: {\n    type: \"number\",\n    default: Infinity,\n    description: \"If non-zero, all user-specified sizes, e.g. in \" + \"\\\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, \" + \"elements and spaces can be arbitrarily large\",\n    processor: s => Math.max(0, s),\n    cli: \"-s, --max-size <n>\",\n    cliProcessor: parseInt\n  },\n  maxExpand: {\n    type: \"number\",\n    default: 1000,\n    description: \"Limit the number of macro expansions to the specified \" + \"number, to prevent e.g. infinite macro loops. If set to Infinity, \" + \"the macro expander will try to fully expand as in LaTeX.\",\n    processor: n => Math.max(0, n),\n    cli: \"-e, --max-expand <n>\",\n    cliProcessor: n => n === \"Infinity\" ? Infinity : parseInt(n)\n  },\n  globalGroup: {\n    type: \"boolean\",\n    cli: false\n  }\n};\n\nfunction getDefaultValue(schema) {\n  if (schema.default) {\n    return schema.default;\n  }\n\n  var type = schema.type;\n  var defaultType = Array.isArray(type) ? type[0] : type;\n\n  if (typeof defaultType !== 'string') {\n    return defaultType.enum[0];\n  }\n\n  switch (defaultType) {\n    case 'boolean':\n      return false;\n\n    case 'string':\n      return '';\n\n    case 'number':\n      return 0;\n\n    case 'object':\n      return {};\n  }\n}\n/**\n * The main Settings object\n *\n * The current options stored are:\n *  - displayMode: Whether the expression should be typeset as inline math\n *                 (false, the default), meaning that the math starts in\n *                 \\textstyle and is placed in an inline-block); or as display\n *                 math (true), meaning that the math starts in \\displaystyle\n *                 and is placed in a block with vertical margin.\n */\n\n\nclass Settings {\n  constructor(options) {\n    this.displayMode = void 0;\n    this.output = void 0;\n    this.leqno = void 0;\n    this.fleqn = void 0;\n    this.throwOnError = void 0;\n    this.errorColor = void 0;\n    this.macros = void 0;\n    this.minRuleThickness = void 0;\n    this.colorIsTextColor = void 0;\n    this.strict = void 0;\n    this.trust = void 0;\n    this.maxSize = void 0;\n    this.maxExpand = void 0;\n    this.globalGroup = void 0;\n    // allow null options\n    options = options || {};\n\n    for (var prop in SETTINGS_SCHEMA) {\n      if (SETTINGS_SCHEMA.hasOwnProperty(prop)) {\n        // $FlowFixMe\n        var schema = SETTINGS_SCHEMA[prop]; // TODO: validate options\n        // $FlowFixMe\n\n        this[prop] = options[prop] !== undefined ? schema.processor ? schema.processor(options[prop]) : options[prop] : getDefaultValue(schema);\n      }\n    }\n  }\n  /**\n   * Report nonstrict (non-LaTeX-compatible) input.\n   * Can safely not be called if `this.strict` is false in JavaScript.\n   */\n\n\n  reportNonstrict(errorCode, errorMsg, token) {\n    var strict = this.strict;\n\n    if (typeof strict === \"function\") {\n      // Allow return value of strict function to be boolean or string\n      // (or null/undefined, meaning no further processing).\n      strict = strict(errorCode, errorMsg, token);\n    }\n\n    if (!strict || strict === \"ignore\") {\n      return;\n    } else if (strict === true || strict === \"error\") {\n      throw new ParseError(\"LaTeX-incompatible input and strict mode is set to 'error': \" + (errorMsg + \" [\" + errorCode + \"]\"), token);\n    } else if (strict === \"warn\") {\n      typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n    } else {\n      // won't happen in type-safe code\n      typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n    }\n  }\n  /**\n   * Check whether to apply strict (LaTeX-adhering) behavior for unusual\n   * input (like `\\\\`).  Unlike `nonstrict`, will not throw an error;\n   * instead, \"error\" translates to a return value of `true`, while \"ignore\"\n   * translates to a return value of `false`.  May still print a warning:\n   * \"warn\" prints a warning and returns `false`.\n   * This is for the second category of `errorCode`s listed in the README.\n   */\n\n\n  useStrictBehavior(errorCode, errorMsg, token) {\n    var strict = this.strict;\n\n    if (typeof strict === \"function\") {\n      // Allow return value of strict function to be boolean or string\n      // (or null/undefined, meaning no further processing).\n      // But catch any exceptions thrown by function, treating them\n      // like \"error\".\n      try {\n        strict = strict(errorCode, errorMsg, token);\n      } catch (error) {\n        strict = \"error\";\n      }\n    }\n\n    if (!strict || strict === \"ignore\") {\n      return false;\n    } else if (strict === true || strict === \"error\") {\n      return true;\n    } else if (strict === \"warn\") {\n      typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n      return false;\n    } else {\n      // won't happen in type-safe code\n      typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n      return false;\n    }\n  }\n  /**\n   * Check whether to test potentially dangerous input, and return\n   * `true` (trusted) or `false` (untrusted).  The sole argument `context`\n   * should be an object with `command` field specifying the relevant LaTeX\n   * command (as a string starting with `\\`), and any other arguments, etc.\n   * If `context` has a `url` field, a `protocol` field will automatically\n   * get added by this function (changing the specified object).\n   */\n\n\n  isTrusted(context) {\n    if (context.url && !context.protocol) {\n      var protocol = utils.protocolFromUrl(context.url);\n\n      if (protocol == null) {\n        return false;\n      }\n\n      context.protocol = protocol;\n    }\n\n    var trust = typeof this.trust === \"function\" ? this.trust(context) : this.trust;\n    return Boolean(trust);\n  }\n\n}\n\n/**\n * This file contains information and classes for the various kinds of styles\n * used in TeX. It provides a generic `Style` class, which holds information\n * about a specific style. It then provides instances of all the different kinds\n * of styles possible, and provides functions to move between them and get\n * information about them.\n */\n\n/**\n * The main style class. Contains a unique id for the style, a size (which is\n * the same for cramped and uncramped version of a style), and a cramped flag.\n */\nclass Style {\n  constructor(id, size, cramped) {\n    this.id = void 0;\n    this.size = void 0;\n    this.cramped = void 0;\n    this.id = id;\n    this.size = size;\n    this.cramped = cramped;\n  }\n  /**\n   * Get the style of a superscript given a base in the current style.\n   */\n\n\n  sup() {\n    return styles[sup[this.id]];\n  }\n  /**\n   * Get the style of a subscript given a base in the current style.\n   */\n\n\n  sub() {\n    return styles[sub[this.id]];\n  }\n  /**\n   * Get the style of a fraction numerator given the fraction in the current\n   * style.\n   */\n\n\n  fracNum() {\n    return styles[fracNum[this.id]];\n  }\n  /**\n   * Get the style of a fraction denominator given the fraction in the current\n   * style.\n   */\n\n\n  fracDen() {\n    return styles[fracDen[this.id]];\n  }\n  /**\n   * Get the cramped version of a style (in particular, cramping a cramped style\n   * doesn't change the style).\n   */\n\n\n  cramp() {\n    return styles[cramp[this.id]];\n  }\n  /**\n   * Get a text or display version of this style.\n   */\n\n\n  text() {\n    return styles[text$1[this.id]];\n  }\n  /**\n   * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)\n   */\n\n\n  isTight() {\n    return this.size >= 2;\n  }\n\n} // Export an interface for type checking, but don't expose the implementation.\n// This way, no more styles can be generated.\n\n\n// IDs of the different styles\nvar D = 0;\nvar Dc = 1;\nvar T = 2;\nvar Tc = 3;\nvar S = 4;\nvar Sc = 5;\nvar SS = 6;\nvar SSc = 7; // Instances of the different styles\n\nvar styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another\n\nvar sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];\nvar sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];\nvar fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];\nvar fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];\nvar cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];\nvar text$1 = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles.\n\nvar Style$1 = {\n  DISPLAY: styles[D],\n  TEXT: styles[T],\n  SCRIPT: styles[S],\n  SCRIPTSCRIPT: styles[SS]\n};\n\n/*\n * This file defines the Unicode scripts and script families that we\n * support. To add new scripts or families, just add a new entry to the\n * scriptData array below. Adding scripts to the scriptData array allows\n * characters from that script to appear in \\text{} environments.\n */\n\n/**\n * Each script or script family has a name and an array of blocks.\n * Each block is an array of two numbers which specify the start and\n * end points (inclusive) of a block of Unicode codepoints.\n */\n\n/**\n * Unicode block data for the families of scripts we support in \\text{}.\n * Scripts only need to appear here if they do not have font metrics.\n */\nvar scriptData = [{\n  // Latin characters beyond the Latin-1 characters we have metrics for.\n  // Needed for Czech, Hungarian and Turkish text, for example.\n  name: 'latin',\n  blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B\n  [0x0300, 0x036f] // Combining Diacritical marks\n  ]\n}, {\n  // The Cyrillic script used by Russian and related languages.\n  // A Cyrillic subset used to be supported as explicitly defined\n  // symbols in symbols.js\n  name: 'cyrillic',\n  blocks: [[0x0400, 0x04ff]]\n}, {\n  // Armenian\n  name: 'armenian',\n  blocks: [[0x0530, 0x058F]]\n}, {\n  // The Brahmic scripts of South and Southeast Asia\n  // Devanagari (0900–097F)\n  // Bengali (0980–09FF)\n  // Gurmukhi (0A00–0A7F)\n  // Gujarati (0A80–0AFF)\n  // Oriya (0B00–0B7F)\n  // Tamil (0B80–0BFF)\n  // Telugu (0C00–0C7F)\n  // Kannada (0C80–0CFF)\n  // Malayalam (0D00–0D7F)\n  // Sinhala (0D80–0DFF)\n  // Thai (0E00–0E7F)\n  // Lao (0E80–0EFF)\n  // Tibetan (0F00–0FFF)\n  // Myanmar (1000–109F)\n  name: 'brahmic',\n  blocks: [[0x0900, 0x109F]]\n}, {\n  name: 'georgian',\n  blocks: [[0x10A0, 0x10ff]]\n}, {\n  // Chinese and Japanese.\n  // The \"k\" in cjk is for Korean, but we've separated Korean out\n  name: \"cjk\",\n  blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana\n  [0x4E00, 0x9FAF], // CJK ideograms\n  [0xFF00, 0xFF60] // Fullwidth punctuation\n  // TODO: add halfwidth Katakana and Romanji glyphs\n  ]\n}, {\n  // Korean\n  name: 'hangul',\n  blocks: [[0xAC00, 0xD7AF]]\n}];\n/**\n * Given a codepoint, return the name of the script or script family\n * it is from, or null if it is not part of a known block\n */\n\nfunction scriptFromCodepoint(codepoint) {\n  for (var i = 0; i < scriptData.length; i++) {\n    var script = scriptData[i];\n\n    for (var _i = 0; _i < script.blocks.length; _i++) {\n      var block = script.blocks[_i];\n\n      if (codepoint >= block[0] && codepoint <= block[1]) {\n        return script.name;\n      }\n    }\n  }\n\n  return null;\n}\n/**\n * A flattened version of all the supported blocks in a single array.\n * This is an optimization to make supportedCodepoint() fast.\n */\n\nvar allBlocks = [];\nscriptData.forEach(s => s.blocks.forEach(b => allBlocks.push(...b)));\n/**\n * Given a codepoint, return true if it falls within one of the\n * scripts or script families defined above and false otherwise.\n *\n * Micro benchmarks shows that this is faster than\n * /[\\u3000-\\u30FF\\u4E00-\\u9FAF\\uFF00-\\uFF60\\uAC00-\\uD7AF\\u0900-\\u109F]/.test()\n * in Firefox, Chrome and Node.\n */\n\nfunction supportedCodepoint(codepoint) {\n  for (var i = 0; i < allBlocks.length; i += 2) {\n    if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * This file provides support to domTree.js and delimiter.js.\n * It's a storehouse of path geometry for SVG images.\n */\n// In all paths below, the viewBox-to-em scale is 1000:1.\nvar hLinePad = 80; // padding above a sqrt vinculum. Prevents image cropping.\n// The vinculum of a \\sqrt can be made thicker by a KaTeX rendering option.\n// Think of variable extraVinculum as two detours in the SVG path.\n// The detour begins at the lower left of the area labeled extraVinculum below.\n// The detour proceeds one extraVinculum distance up and slightly to the right,\n// displacing the radiused corner between surd and vinculum. The radius is\n// traversed as usual, then the detour resumes. It goes right, to the end of\n// the very long vinculum, then down one extraVinculum distance,\n// after which it resumes regular path geometry for the radical.\n\n/*                                                  vinculum\n                                                   /\n         /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraVinculum\n        / █████████████████████←0.04em (40 unit) std vinculum thickness\n       / /\n      / /\n     / /\\\n    / / surd\n*/\n\nvar sqrtMain = function sqrtMain(extraVinculum, hLinePad) {\n  // sqrtMain path geometry is from glyph U221A in the font KaTeX Main\n  return \"M95,\" + (622 + extraVinculum + hLinePad) + \"\\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\\nc69,-144,104.5,-217.7,106.5,-221\\nl\" + extraVinculum / 2.075 + \" -\" + extraVinculum + \"\\nc5.3,-9.3,12,-14,20,-14\\nH400000v\" + (40 + extraVinculum) + \"H845.2724\\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\\nM\" + (834 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize1 = function sqrtSize1(extraVinculum, hLinePad) {\n  // size1 is from glyph U221A in the font KaTeX_Size1-Regular\n  return \"M263,\" + (601 + extraVinculum + hLinePad) + \"c0.7,0,18,39.7,52,119\\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\\nc340,-704.7,510.7,-1060.3,512,-1067\\nl\" + extraVinculum / 2.084 + \" -\" + extraVinculum + \"\\nc4.7,-7.3,11,-11,19,-11\\nH40000v\" + (40 + extraVinculum) + \"H1012.3\\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize2 = function sqrtSize2(extraVinculum, hLinePad) {\n  // size2 is from glyph U221A in the font KaTeX_Size2-Regular\n  return \"M983 \" + (10 + extraVinculum + hLinePad) + \"\\nl\" + extraVinculum / 3.13 + \" -\" + extraVinculum + \"\\nc4,-6.7,10,-10,18,-10 H400000v\" + (40 + extraVinculum) + \"\\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize3 = function sqrtSize3(extraVinculum, hLinePad) {\n  // size3 is from glyph U221A in the font KaTeX_Size3-Regular\n  return \"M424,\" + (2398 + extraVinculum + hLinePad) + \"\\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\\nl\" + extraVinculum / 4.223 + \" -\" + extraVinculum + \"c4,-6.7,10,-10,18,-10 H400000\\nv\" + (40 + extraVinculum) + \"H1014.6\\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\\nc-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2z M\" + (1001 + extraVinculum) + \" \" + hLinePad + \"\\nh400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize4 = function sqrtSize4(extraVinculum, hLinePad) {\n  // size4 is from glyph U221A in the font KaTeX_Size4-Regular\n  return \"M473,\" + (2713 + extraVinculum + hLinePad) + \"\\nc339.3,-1799.3,509.3,-2700,510,-2702 l\" + extraVinculum / 5.298 + \" -\" + extraVinculum + \"\\nc3.3,-7.3,9.3,-11,18,-11 H400000v\" + (40 + extraVinculum) + \"H1017.7\\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\\n606zM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"H1017.7z\";\n};\n\nvar phasePath = function phasePath(y) {\n  var x = y / 2; // x coordinate at top of angle\n\n  return \"M400000 \" + y + \" H0 L\" + x + \" 0 l65 45 L145 \" + (y - 80) + \" H400000z\";\n};\n\nvar sqrtTall = function sqrtTall(extraVinculum, hLinePad, viewBoxHeight) {\n  // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular\n  // One path edge has a variable length. It runs vertically from the vinculum\n  // to a point near (14 units) the bottom of the surd. The vinculum\n  // is normally 40 units thick. So the length of the line in question is:\n  var vertSegment = viewBoxHeight - 54 - hLinePad - extraVinculum;\n  return \"M702 \" + (extraVinculum + hLinePad) + \"H400000\" + (40 + extraVinculum) + \"\\nH742v\" + vertSegment + \"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\\n219 661 l218 661zM702 \" + hLinePad + \"H400000v\" + (40 + extraVinculum) + \"H742z\";\n};\n\nvar sqrtPath = function sqrtPath(size, extraVinculum, viewBoxHeight) {\n  extraVinculum = 1000 * extraVinculum; // Convert from document ems to viewBox.\n\n  var path = \"\";\n\n  switch (size) {\n    case \"sqrtMain\":\n      path = sqrtMain(extraVinculum, hLinePad);\n      break;\n\n    case \"sqrtSize1\":\n      path = sqrtSize1(extraVinculum, hLinePad);\n      break;\n\n    case \"sqrtSize2\":\n      path = sqrtSize2(extraVinculum, hLinePad);\n      break;\n\n    case \"sqrtSize3\":\n      path = sqrtSize3(extraVinculum, hLinePad);\n      break;\n\n    case \"sqrtSize4\":\n      path = sqrtSize4(extraVinculum, hLinePad);\n      break;\n\n    case \"sqrtTall\":\n      path = sqrtTall(extraVinculum, hLinePad, viewBoxHeight);\n  }\n\n  return path;\n};\nvar innerPath = function innerPath(name, height) {\n  // The inner part of stretchy tall delimiters\n  switch (name) {\n    case \"\\u239c\":\n      return \"M291 0 H417 V\" + height + \" H291z M291 0 H417 V\" + height + \" H291z\";\n\n    case \"\\u2223\":\n      return \"M145 0 H188 V\" + height + \" H145z M145 0 H188 V\" + height + \" H145z\";\n\n    case \"\\u2225\":\n      return \"M145 0 H188 V\" + height + \" H145z M145 0 H188 V\" + height + \" H145z\" + (\"M367 0 H410 V\" + height + \" H367z M367 0 H410 V\" + height + \" H367z\");\n\n    case \"\\u239f\":\n      return \"M457 0 H583 V\" + height + \" H457z M457 0 H583 V\" + height + \" H457z\";\n\n    case \"\\u23a2\":\n      return \"M319 0 H403 V\" + height + \" H319z M319 0 H403 V\" + height + \" H319z\";\n\n    case \"\\u23a5\":\n      return \"M263 0 H347 V\" + height + \" H263z M263 0 H347 V\" + height + \" H263z\";\n\n    case \"\\u23aa\":\n      return \"M384 0 H504 V\" + height + \" H384z M384 0 H504 V\" + height + \" H384z\";\n\n    case \"\\u23d0\":\n      return \"M312 0 H355 V\" + height + \" H312z M312 0 H355 V\" + height + \" H312z\";\n\n    case \"\\u2016\":\n      return \"M257 0 H300 V\" + height + \" H257z M257 0 H300 V\" + height + \" H257z\" + (\"M478 0 H521 V\" + height + \" H478z M478 0 H521 V\" + height + \" H478z\");\n\n    default:\n      return \"\";\n  }\n};\nvar path = {\n  // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main\n  doubleleftarrow: \"M262 157\\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\\nm8 0v40h399730v-40zm0 194v40h399730v-40z\",\n  // doublerightarrow is from glyph U+21D2 in font KaTeX Main\n  doublerightarrow: \"M399738 392l\\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z\",\n  // leftarrow is from glyph U+2190 in font KaTeX Main\n  leftarrow: \"M400000 241H110l3-3c68.7-52.7 113.7-120\\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\\n l-3-3h399890zM100 241v40h399900v-40z\",\n  // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular\n  leftbrace: \"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z\",\n  leftbraceunder: \"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z\",\n  // overgroup is from the MnSymbol package (public domain)\n  leftgroup: \"M400000 80\\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\\n 435 0h399565z\",\n  leftgroupunder: \"M400000 262\\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\\n 435 219h399565z\",\n  // Harpoons are from glyph U+21BD in font KaTeX Main\n  leftharpoon: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z\",\n  leftharpoonplus: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\\nm0 0v40h400000v-40z\",\n  leftharpoondown: \"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z\",\n  leftharpoondownplus: \"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z\",\n  // hook is from glyph U+21A9 in font KaTeX Main\n  lefthook: \"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\\n 71.5 23h399859zM103 281v-40h399897v40z\",\n  leftlinesegment: \"M40 281 V428 H0 V94 H40 V241 H400000 v40z\\nM40 281 V428 H0 V94 H40 V241 H400000 v40z\",\n  leftmapsto: \"M40 281 V448H0V74H40V241H400000v40z\\nM40 281 V448H0V74H40V241H400000v40z\",\n  // tofrom is from glyph U+21C4 in font KaTeX AMS Regular\n  leftToFrom: \"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z\",\n  longequal: \"M0 50 h400000 v40H0z m0 194h40000v40H0z\\nM0 50 h400000 v40H0z m0 194h40000v40H0z\",\n  midbrace: \"M200428 334\\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z\",\n  midbraceunder: \"M199572 214\\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z\",\n  oiintSize1: \"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z\",\n  oiintSize2: \"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\\nc0 110 84 276 504 276s502.4-166 502.4-276z\",\n  oiiintSize1: \"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z\",\n  oiiintSize2: \"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z\",\n  rightarrow: \"M0 241v40h399891c-47.3 35.3-84 78-110 128\\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n 151.7 139 205zm0 0v40h399900v-40z\",\n  rightbrace: \"M400000 542l\\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z\",\n  rightbraceunder: \"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z\",\n  rightgroup: \"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\\n 3-1 3-3v-38c-76-158-257-219-435-219H0z\",\n  rightgroupunder: \"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z\",\n  rightharpoon: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\\n 69.2 92 94.5zm0 0v40h399900v-40z\",\n  rightharpoonplus: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z\",\n  rightharpoondown: \"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z\",\n  rightharpoondownplus: \"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\\nm0-194v40h400000v-40zm0 0v40h400000v-40z\",\n  righthook: \"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z\",\n  rightlinesegment: \"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z\",\n  rightToFrom: \"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z\",\n  // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular\n  twoheadleftarrow: \"M0 167c68 40\\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z\",\n  twoheadrightarrow: \"M400000 167\\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z\",\n  // tilde1 is a modified version of a glyph from the MnSymbol package\n  tilde1: \"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\\n-68.267.847-113-73.952-191-73.952z\",\n  // ditto tilde2, tilde3, & tilde4\n  tilde2: \"M344 55.266c-142 0-300.638 81.316-311.5 86.418\\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z\",\n  tilde3: \"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\\n -338 0-409-156.573-744-156.573z\",\n  tilde4: \"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\\n -175.236-744-175.236z\",\n  // vec is from glyph U+20D7 in font KaTeX Main\n  vec: \"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\\nc-16-25.333-24-45-24-59z\",\n  // widehat1 is a modified version of a glyph from the MnSymbol package\n  widehat1: \"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z\",\n  // ditto widehat2, widehat3, & widehat4\n  widehat2: \"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n  widehat3: \"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n  widehat4: \"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n  // widecheck paths are all inverted versions of widehat\n  widecheck1: \"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z\",\n  widecheck2: \"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n  widecheck3: \"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n  widecheck4: \"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n  // The next ten paths support reaction arrows from the mhchem package.\n  // Arrows for \\ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX\n  // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main\n  baraboveleftarrow: \"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z\",\n  // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main\n  rightarrowabovebar: \"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z\",\n  // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.\n  // Ref from mhchem.sty: \\rlap{\\raisebox{-.22ex}{$\\kern0.5em\n  baraboveshortleftharpoon: \"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z\",\n  rightharpoonaboveshortbar: \"M0,241 l0,40c399126,0,399993,0,399993,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z\",\n  shortbaraboveleftharpoon: \"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z\",\n  shortrightharpoonabovebar: \"M53,241l0,40c398570,0,399437,0,399437,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z\"\n};\nvar tallDelim = function tallDelim(label, midHeight) {\n  switch (label) {\n    case \"lbrack\":\n      return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v1759 h347 v-84\\nH403z M403 1759 V0 H319 V1759 v\" + midHeight + \" v1759 h84z\";\n\n    case \"rbrack\":\n      return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v1759 H0 v84 H347z\\nM347 1759 V0 H263 V1759 v\" + midHeight + \" v1759 h84z\";\n\n    case \"vert\":\n      return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\";\n\n    case \"doublevert\":\n      return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\\nM367 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v\" + midHeight + \" v585 h43z\";\n\n    case \"lfloor\":\n      return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1715 h263 v84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n\n    case \"rfloor\":\n      return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1799 H0 v-84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n\n    case \"lceil\":\n      return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v602 h84z\\nM403 1759 V0 H319 V1759 v\" + midHeight + \" v602 h84z\";\n\n    case \"rceil\":\n      return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v602 h84z\\nM347 1759 V0 h-84 V1759 v\" + midHeight + \" v602 h84z\";\n\n    case \"lparen\":\n      return \"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\\n-36,557 l0,\" + (midHeight + 84) + \"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\\nl0,-\" + (midHeight + 92) + \"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z\";\n\n    case \"rparen\":\n      return \"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,\" + (midHeight + 9) + \"\\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\\nl0,-\" + (midHeight + 144) + \"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z\";\n\n    default:\n      // We should not ever get here.\n      throw new Error(\"Unknown stretchy delimiter.\");\n  }\n};\n\n/**\n * This node represents a document fragment, which contains elements, but when\n * placed into the DOM doesn't have any representation itself. It only contains\n * children and doesn't have any DOM node properties.\n */\nclass DocumentFragment {\n  // HtmlDomNode\n  // Never used; needed for satisfying interface.\n  constructor(children) {\n    this.children = void 0;\n    this.classes = void 0;\n    this.height = void 0;\n    this.depth = void 0;\n    this.maxFontSize = void 0;\n    this.style = void 0;\n    this.children = children;\n    this.classes = [];\n    this.height = 0;\n    this.depth = 0;\n    this.maxFontSize = 0;\n    this.style = {};\n  }\n\n  hasClass(className) {\n    return utils.contains(this.classes, className);\n  }\n  /** Convert the fragment into a node. */\n\n\n  toNode() {\n    var frag = document.createDocumentFragment();\n\n    for (var i = 0; i < this.children.length; i++) {\n      frag.appendChild(this.children[i].toNode());\n    }\n\n    return frag;\n  }\n  /** Convert the fragment into HTML markup. */\n\n\n  toMarkup() {\n    var markup = \"\"; // Simply concatenate the markup for the children together.\n\n    for (var i = 0; i < this.children.length; i++) {\n      markup += this.children[i].toMarkup();\n    }\n\n    return markup;\n  }\n  /**\n   * Converts the math node into a string, similar to innerText. Applies to\n   * MathDomNode's only.\n   */\n\n\n  toText() {\n    // To avoid this, we would subclass documentFragment separately for\n    // MathML, but polyfills for subclassing is expensive per PR 1469.\n    // $FlowFixMe: Only works for ChildType = MathDomNode.\n    var toText = child => child.toText();\n\n    return this.children.map(toText).join(\"\");\n  }\n\n}\n\n// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY.\nvar fontMetricsData = {\n  \"AMS-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"65\": [0, 0.68889, 0, 0, 0.72222],\n    \"66\": [0, 0.68889, 0, 0, 0.66667],\n    \"67\": [0, 0.68889, 0, 0, 0.72222],\n    \"68\": [0, 0.68889, 0, 0, 0.72222],\n    \"69\": [0, 0.68889, 0, 0, 0.66667],\n    \"70\": [0, 0.68889, 0, 0, 0.61111],\n    \"71\": [0, 0.68889, 0, 0, 0.77778],\n    \"72\": [0, 0.68889, 0, 0, 0.77778],\n    \"73\": [0, 0.68889, 0, 0, 0.38889],\n    \"74\": [0.16667, 0.68889, 0, 0, 0.5],\n    \"75\": [0, 0.68889, 0, 0, 0.77778],\n    \"76\": [0, 0.68889, 0, 0, 0.66667],\n    \"77\": [0, 0.68889, 0, 0, 0.94445],\n    \"78\": [0, 0.68889, 0, 0, 0.72222],\n    \"79\": [0.16667, 0.68889, 0, 0, 0.77778],\n    \"80\": [0, 0.68889, 0, 0, 0.61111],\n    \"81\": [0.16667, 0.68889, 0, 0, 0.77778],\n    \"82\": [0, 0.68889, 0, 0, 0.72222],\n    \"83\": [0, 0.68889, 0, 0, 0.55556],\n    \"84\": [0, 0.68889, 0, 0, 0.66667],\n    \"85\": [0, 0.68889, 0, 0, 0.72222],\n    \"86\": [0, 0.68889, 0, 0, 0.72222],\n    \"87\": [0, 0.68889, 0, 0, 1.0],\n    \"88\": [0, 0.68889, 0, 0, 0.72222],\n    \"89\": [0, 0.68889, 0, 0, 0.72222],\n    \"90\": [0, 0.68889, 0, 0, 0.66667],\n    \"107\": [0, 0.68889, 0, 0, 0.55556],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"165\": [0, 0.675, 0.025, 0, 0.75],\n    \"174\": [0.15559, 0.69224, 0, 0, 0.94666],\n    \"240\": [0, 0.68889, 0, 0, 0.55556],\n    \"295\": [0, 0.68889, 0, 0, 0.54028],\n    \"710\": [0, 0.825, 0, 0, 2.33334],\n    \"732\": [0, 0.9, 0, 0, 2.33334],\n    \"770\": [0, 0.825, 0, 0, 2.33334],\n    \"771\": [0, 0.9, 0, 0, 2.33334],\n    \"989\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"1008\": [0, 0.43056, 0.04028, 0, 0.66667],\n    \"8245\": [0, 0.54986, 0, 0, 0.275],\n    \"8463\": [0, 0.68889, 0, 0, 0.54028],\n    \"8487\": [0, 0.68889, 0, 0, 0.72222],\n    \"8498\": [0, 0.68889, 0, 0, 0.55556],\n    \"8502\": [0, 0.68889, 0, 0, 0.66667],\n    \"8503\": [0, 0.68889, 0, 0, 0.44445],\n    \"8504\": [0, 0.68889, 0, 0, 0.66667],\n    \"8513\": [0, 0.68889, 0, 0, 0.63889],\n    \"8592\": [-0.03598, 0.46402, 0, 0, 0.5],\n    \"8594\": [-0.03598, 0.46402, 0, 0, 0.5],\n    \"8602\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8603\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8606\": [0.01354, 0.52239, 0, 0, 1.0],\n    \"8608\": [0.01354, 0.52239, 0, 0, 1.0],\n    \"8610\": [0.01354, 0.52239, 0, 0, 1.11111],\n    \"8611\": [0.01354, 0.52239, 0, 0, 1.11111],\n    \"8619\": [0, 0.54986, 0, 0, 1.0],\n    \"8620\": [0, 0.54986, 0, 0, 1.0],\n    \"8621\": [-0.13313, 0.37788, 0, 0, 1.38889],\n    \"8622\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8624\": [0, 0.69224, 0, 0, 0.5],\n    \"8625\": [0, 0.69224, 0, 0, 0.5],\n    \"8630\": [0, 0.43056, 0, 0, 1.0],\n    \"8631\": [0, 0.43056, 0, 0, 1.0],\n    \"8634\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8635\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8638\": [0.19444, 0.69224, 0, 0, 0.41667],\n    \"8639\": [0.19444, 0.69224, 0, 0, 0.41667],\n    \"8642\": [0.19444, 0.69224, 0, 0, 0.41667],\n    \"8643\": [0.19444, 0.69224, 0, 0, 0.41667],\n    \"8644\": [0.1808, 0.675, 0, 0, 1.0],\n    \"8646\": [0.1808, 0.675, 0, 0, 1.0],\n    \"8647\": [0.1808, 0.675, 0, 0, 1.0],\n    \"8648\": [0.19444, 0.69224, 0, 0, 0.83334],\n    \"8649\": [0.1808, 0.675, 0, 0, 1.0],\n    \"8650\": [0.19444, 0.69224, 0, 0, 0.83334],\n    \"8651\": [0.01354, 0.52239, 0, 0, 1.0],\n    \"8652\": [0.01354, 0.52239, 0, 0, 1.0],\n    \"8653\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8654\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8655\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8666\": [0.13667, 0.63667, 0, 0, 1.0],\n    \"8667\": [0.13667, 0.63667, 0, 0, 1.0],\n    \"8669\": [-0.13313, 0.37788, 0, 0, 1.0],\n    \"8672\": [-0.064, 0.437, 0, 0, 1.334],\n    \"8674\": [-0.064, 0.437, 0, 0, 1.334],\n    \"8705\": [0, 0.825, 0, 0, 0.5],\n    \"8708\": [0, 0.68889, 0, 0, 0.55556],\n    \"8709\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8717\": [0, 0.43056, 0, 0, 0.42917],\n    \"8722\": [-0.03598, 0.46402, 0, 0, 0.5],\n    \"8724\": [0.08198, 0.69224, 0, 0, 0.77778],\n    \"8726\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8733\": [0, 0.69224, 0, 0, 0.77778],\n    \"8736\": [0, 0.69224, 0, 0, 0.72222],\n    \"8737\": [0, 0.69224, 0, 0, 0.72222],\n    \"8738\": [0.03517, 0.52239, 0, 0, 0.72222],\n    \"8739\": [0.08167, 0.58167, 0, 0, 0.22222],\n    \"8740\": [0.25142, 0.74111, 0, 0, 0.27778],\n    \"8741\": [0.08167, 0.58167, 0, 0, 0.38889],\n    \"8742\": [0.25142, 0.74111, 0, 0, 0.5],\n    \"8756\": [0, 0.69224, 0, 0, 0.66667],\n    \"8757\": [0, 0.69224, 0, 0, 0.66667],\n    \"8764\": [-0.13313, 0.36687, 0, 0, 0.77778],\n    \"8765\": [-0.13313, 0.37788, 0, 0, 0.77778],\n    \"8769\": [-0.13313, 0.36687, 0, 0, 0.77778],\n    \"8770\": [-0.03625, 0.46375, 0, 0, 0.77778],\n    \"8774\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8776\": [-0.01688, 0.48312, 0, 0, 0.77778],\n    \"8778\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8782\": [0.06062, 0.54986, 0, 0, 0.77778],\n    \"8783\": [0.06062, 0.54986, 0, 0, 0.77778],\n    \"8785\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8786\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8787\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8790\": [0, 0.69224, 0, 0, 0.77778],\n    \"8791\": [0.22958, 0.72958, 0, 0, 0.77778],\n    \"8796\": [0.08198, 0.91667, 0, 0, 0.77778],\n    \"8806\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"8807\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"8808\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"8809\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"8812\": [0.25583, 0.75583, 0, 0, 0.5],\n    \"8814\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8815\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8816\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8817\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8818\": [0.22958, 0.72958, 0, 0, 0.77778],\n    \"8819\": [0.22958, 0.72958, 0, 0, 0.77778],\n    \"8822\": [0.1808, 0.675, 0, 0, 0.77778],\n    \"8823\": [0.1808, 0.675, 0, 0, 0.77778],\n    \"8828\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8829\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8830\": [0.22958, 0.72958, 0, 0, 0.77778],\n    \"8831\": [0.22958, 0.72958, 0, 0, 0.77778],\n    \"8832\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8833\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8840\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8841\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8842\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8843\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8847\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8848\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8858\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8859\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8861\": [0.08198, 0.58198, 0, 0, 0.77778],\n    \"8862\": [0, 0.675, 0, 0, 0.77778],\n    \"8863\": [0, 0.675, 0, 0, 0.77778],\n    \"8864\": [0, 0.675, 0, 0, 0.77778],\n    \"8865\": [0, 0.675, 0, 0, 0.77778],\n    \"8872\": [0, 0.69224, 0, 0, 0.61111],\n    \"8873\": [0, 0.69224, 0, 0, 0.72222],\n    \"8874\": [0, 0.69224, 0, 0, 0.88889],\n    \"8876\": [0, 0.68889, 0, 0, 0.61111],\n    \"8877\": [0, 0.68889, 0, 0, 0.61111],\n    \"8878\": [0, 0.68889, 0, 0, 0.72222],\n    \"8879\": [0, 0.68889, 0, 0, 0.72222],\n    \"8882\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8883\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8884\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8885\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8888\": [0, 0.54986, 0, 0, 1.11111],\n    \"8890\": [0.19444, 0.43056, 0, 0, 0.55556],\n    \"8891\": [0.19444, 0.69224, 0, 0, 0.61111],\n    \"8892\": [0.19444, 0.69224, 0, 0, 0.61111],\n    \"8901\": [0, 0.54986, 0, 0, 0.27778],\n    \"8903\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8905\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8906\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"8907\": [0, 0.69224, 0, 0, 0.77778],\n    \"8908\": [0, 0.69224, 0, 0, 0.77778],\n    \"8909\": [-0.03598, 0.46402, 0, 0, 0.77778],\n    \"8910\": [0, 0.54986, 0, 0, 0.76042],\n    \"8911\": [0, 0.54986, 0, 0, 0.76042],\n    \"8912\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8913\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"8914\": [0, 0.54986, 0, 0, 0.66667],\n    \"8915\": [0, 0.54986, 0, 0, 0.66667],\n    \"8916\": [0, 0.69224, 0, 0, 0.66667],\n    \"8918\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8919\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8920\": [0.03517, 0.54986, 0, 0, 1.33334],\n    \"8921\": [0.03517, 0.54986, 0, 0, 1.33334],\n    \"8922\": [0.38569, 0.88569, 0, 0, 0.77778],\n    \"8923\": [0.38569, 0.88569, 0, 0, 0.77778],\n    \"8926\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8927\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"8928\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8929\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8934\": [0.23222, 0.74111, 0, 0, 0.77778],\n    \"8935\": [0.23222, 0.74111, 0, 0, 0.77778],\n    \"8936\": [0.23222, 0.74111, 0, 0, 0.77778],\n    \"8937\": [0.23222, 0.74111, 0, 0, 0.77778],\n    \"8938\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8939\": [0.20576, 0.70576, 0, 0, 0.77778],\n    \"8940\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8941\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"8994\": [0.19444, 0.69224, 0, 0, 0.77778],\n    \"8995\": [0.19444, 0.69224, 0, 0, 0.77778],\n    \"9416\": [0.15559, 0.69224, 0, 0, 0.90222],\n    \"9484\": [0, 0.69224, 0, 0, 0.5],\n    \"9488\": [0, 0.69224, 0, 0, 0.5],\n    \"9492\": [0, 0.37788, 0, 0, 0.5],\n    \"9496\": [0, 0.37788, 0, 0, 0.5],\n    \"9585\": [0.19444, 0.68889, 0, 0, 0.88889],\n    \"9586\": [0.19444, 0.74111, 0, 0, 0.88889],\n    \"9632\": [0, 0.675, 0, 0, 0.77778],\n    \"9633\": [0, 0.675, 0, 0, 0.77778],\n    \"9650\": [0, 0.54986, 0, 0, 0.72222],\n    \"9651\": [0, 0.54986, 0, 0, 0.72222],\n    \"9654\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"9660\": [0, 0.54986, 0, 0, 0.72222],\n    \"9661\": [0, 0.54986, 0, 0, 0.72222],\n    \"9664\": [0.03517, 0.54986, 0, 0, 0.77778],\n    \"9674\": [0.11111, 0.69224, 0, 0, 0.66667],\n    \"9733\": [0.19444, 0.69224, 0, 0, 0.94445],\n    \"10003\": [0, 0.69224, 0, 0, 0.83334],\n    \"10016\": [0, 0.69224, 0, 0, 0.83334],\n    \"10731\": [0.11111, 0.69224, 0, 0, 0.66667],\n    \"10846\": [0.19444, 0.75583, 0, 0, 0.61111],\n    \"10877\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"10878\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"10885\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"10886\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"10887\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"10888\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"10889\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10890\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10891\": [0.48256, 0.98256, 0, 0, 0.77778],\n    \"10892\": [0.48256, 0.98256, 0, 0, 0.77778],\n    \"10901\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"10902\": [0.13667, 0.63667, 0, 0, 0.77778],\n    \"10933\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"10934\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"10935\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10936\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10937\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10938\": [0.26167, 0.75726, 0, 0, 0.77778],\n    \"10949\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"10950\": [0.25583, 0.75583, 0, 0, 0.77778],\n    \"10955\": [0.28481, 0.79383, 0, 0, 0.77778],\n    \"10956\": [0.28481, 0.79383, 0, 0, 0.77778],\n    \"57350\": [0.08167, 0.58167, 0, 0, 0.22222],\n    \"57351\": [0.08167, 0.58167, 0, 0, 0.38889],\n    \"57352\": [0.08167, 0.58167, 0, 0, 0.77778],\n    \"57353\": [0, 0.43056, 0.04028, 0, 0.66667],\n    \"57356\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57357\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57358\": [0.41951, 0.91951, 0, 0, 0.77778],\n    \"57359\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"57360\": [0.30274, 0.79383, 0, 0, 0.77778],\n    \"57361\": [0.41951, 0.91951, 0, 0, 0.77778],\n    \"57366\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57367\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57368\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57369\": [0.25142, 0.75726, 0, 0, 0.77778],\n    \"57370\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"57371\": [0.13597, 0.63597, 0, 0, 0.77778]\n  },\n  \"Caligraphic-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"65\": [0, 0.68333, 0, 0.19445, 0.79847],\n    \"66\": [0, 0.68333, 0.03041, 0.13889, 0.65681],\n    \"67\": [0, 0.68333, 0.05834, 0.13889, 0.52653],\n    \"68\": [0, 0.68333, 0.02778, 0.08334, 0.77139],\n    \"69\": [0, 0.68333, 0.08944, 0.11111, 0.52778],\n    \"70\": [0, 0.68333, 0.09931, 0.11111, 0.71875],\n    \"71\": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487],\n    \"72\": [0, 0.68333, 0.00965, 0.11111, 0.84452],\n    \"73\": [0, 0.68333, 0.07382, 0, 0.54452],\n    \"74\": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778],\n    \"75\": [0, 0.68333, 0.01445, 0.05556, 0.76195],\n    \"76\": [0, 0.68333, 0, 0.13889, 0.68972],\n    \"77\": [0, 0.68333, 0, 0.13889, 1.2009],\n    \"78\": [0, 0.68333, 0.14736, 0.08334, 0.82049],\n    \"79\": [0, 0.68333, 0.02778, 0.11111, 0.79611],\n    \"80\": [0, 0.68333, 0.08222, 0.08334, 0.69556],\n    \"81\": [0.09722, 0.68333, 0, 0.11111, 0.81667],\n    \"82\": [0, 0.68333, 0, 0.08334, 0.8475],\n    \"83\": [0, 0.68333, 0.075, 0.13889, 0.60556],\n    \"84\": [0, 0.68333, 0.25417, 0, 0.54464],\n    \"85\": [0, 0.68333, 0.09931, 0.08334, 0.62583],\n    \"86\": [0, 0.68333, 0.08222, 0, 0.61278],\n    \"87\": [0, 0.68333, 0.08222, 0.08334, 0.98778],\n    \"88\": [0, 0.68333, 0.14643, 0.13889, 0.7133],\n    \"89\": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834],\n    \"90\": [0, 0.68333, 0.07944, 0.13889, 0.72473],\n    \"160\": [0, 0, 0, 0, 0.25]\n  },\n  \"Fraktur-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69141, 0, 0, 0.29574],\n    \"34\": [0, 0.69141, 0, 0, 0.21471],\n    \"38\": [0, 0.69141, 0, 0, 0.73786],\n    \"39\": [0, 0.69141, 0, 0, 0.21201],\n    \"40\": [0.24982, 0.74947, 0, 0, 0.38865],\n    \"41\": [0.24982, 0.74947, 0, 0, 0.38865],\n    \"42\": [0, 0.62119, 0, 0, 0.27764],\n    \"43\": [0.08319, 0.58283, 0, 0, 0.75623],\n    \"44\": [0, 0.10803, 0, 0, 0.27764],\n    \"45\": [0.08319, 0.58283, 0, 0, 0.75623],\n    \"46\": [0, 0.10803, 0, 0, 0.27764],\n    \"47\": [0.24982, 0.74947, 0, 0, 0.50181],\n    \"48\": [0, 0.47534, 0, 0, 0.50181],\n    \"49\": [0, 0.47534, 0, 0, 0.50181],\n    \"50\": [0, 0.47534, 0, 0, 0.50181],\n    \"51\": [0.18906, 0.47534, 0, 0, 0.50181],\n    \"52\": [0.18906, 0.47534, 0, 0, 0.50181],\n    \"53\": [0.18906, 0.47534, 0, 0, 0.50181],\n    \"54\": [0, 0.69141, 0, 0, 0.50181],\n    \"55\": [0.18906, 0.47534, 0, 0, 0.50181],\n    \"56\": [0, 0.69141, 0, 0, 0.50181],\n    \"57\": [0.18906, 0.47534, 0, 0, 0.50181],\n    \"58\": [0, 0.47534, 0, 0, 0.21606],\n    \"59\": [0.12604, 0.47534, 0, 0, 0.21606],\n    \"61\": [-0.13099, 0.36866, 0, 0, 0.75623],\n    \"63\": [0, 0.69141, 0, 0, 0.36245],\n    \"65\": [0, 0.69141, 0, 0, 0.7176],\n    \"66\": [0, 0.69141, 0, 0, 0.88397],\n    \"67\": [0, 0.69141, 0, 0, 0.61254],\n    \"68\": [0, 0.69141, 0, 0, 0.83158],\n    \"69\": [0, 0.69141, 0, 0, 0.66278],\n    \"70\": [0.12604, 0.69141, 0, 0, 0.61119],\n    \"71\": [0, 0.69141, 0, 0, 0.78539],\n    \"72\": [0.06302, 0.69141, 0, 0, 0.7203],\n    \"73\": [0, 0.69141, 0, 0, 0.55448],\n    \"74\": [0.12604, 0.69141, 0, 0, 0.55231],\n    \"75\": [0, 0.69141, 0, 0, 0.66845],\n    \"76\": [0, 0.69141, 0, 0, 0.66602],\n    \"77\": [0, 0.69141, 0, 0, 1.04953],\n    \"78\": [0, 0.69141, 0, 0, 0.83212],\n    \"79\": [0, 0.69141, 0, 0, 0.82699],\n    \"80\": [0.18906, 0.69141, 0, 0, 0.82753],\n    \"81\": [0.03781, 0.69141, 0, 0, 0.82699],\n    \"82\": [0, 0.69141, 0, 0, 0.82807],\n    \"83\": [0, 0.69141, 0, 0, 0.82861],\n    \"84\": [0, 0.69141, 0, 0, 0.66899],\n    \"85\": [0, 0.69141, 0, 0, 0.64576],\n    \"86\": [0, 0.69141, 0, 0, 0.83131],\n    \"87\": [0, 0.69141, 0, 0, 1.04602],\n    \"88\": [0, 0.69141, 0, 0, 0.71922],\n    \"89\": [0.18906, 0.69141, 0, 0, 0.83293],\n    \"90\": [0.12604, 0.69141, 0, 0, 0.60201],\n    \"91\": [0.24982, 0.74947, 0, 0, 0.27764],\n    \"93\": [0.24982, 0.74947, 0, 0, 0.27764],\n    \"94\": [0, 0.69141, 0, 0, 0.49965],\n    \"97\": [0, 0.47534, 0, 0, 0.50046],\n    \"98\": [0, 0.69141, 0, 0, 0.51315],\n    \"99\": [0, 0.47534, 0, 0, 0.38946],\n    \"100\": [0, 0.62119, 0, 0, 0.49857],\n    \"101\": [0, 0.47534, 0, 0, 0.40053],\n    \"102\": [0.18906, 0.69141, 0, 0, 0.32626],\n    \"103\": [0.18906, 0.47534, 0, 0, 0.5037],\n    \"104\": [0.18906, 0.69141, 0, 0, 0.52126],\n    \"105\": [0, 0.69141, 0, 0, 0.27899],\n    \"106\": [0, 0.69141, 0, 0, 0.28088],\n    \"107\": [0, 0.69141, 0, 0, 0.38946],\n    \"108\": [0, 0.69141, 0, 0, 0.27953],\n    \"109\": [0, 0.47534, 0, 0, 0.76676],\n    \"110\": [0, 0.47534, 0, 0, 0.52666],\n    \"111\": [0, 0.47534, 0, 0, 0.48885],\n    \"112\": [0.18906, 0.52396, 0, 0, 0.50046],\n    \"113\": [0.18906, 0.47534, 0, 0, 0.48912],\n    \"114\": [0, 0.47534, 0, 0, 0.38919],\n    \"115\": [0, 0.47534, 0, 0, 0.44266],\n    \"116\": [0, 0.62119, 0, 0, 0.33301],\n    \"117\": [0, 0.47534, 0, 0, 0.5172],\n    \"118\": [0, 0.52396, 0, 0, 0.5118],\n    \"119\": [0, 0.52396, 0, 0, 0.77351],\n    \"120\": [0.18906, 0.47534, 0, 0, 0.38865],\n    \"121\": [0.18906, 0.47534, 0, 0, 0.49884],\n    \"122\": [0.18906, 0.47534, 0, 0, 0.39054],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"8216\": [0, 0.69141, 0, 0, 0.21471],\n    \"8217\": [0, 0.69141, 0, 0, 0.21471],\n    \"58112\": [0, 0.62119, 0, 0, 0.49749],\n    \"58113\": [0, 0.62119, 0, 0, 0.4983],\n    \"58114\": [0.18906, 0.69141, 0, 0, 0.33328],\n    \"58115\": [0.18906, 0.69141, 0, 0, 0.32923],\n    \"58116\": [0.18906, 0.47534, 0, 0, 0.50343],\n    \"58117\": [0, 0.69141, 0, 0, 0.33301],\n    \"58118\": [0, 0.62119, 0, 0, 0.33409],\n    \"58119\": [0, 0.47534, 0, 0, 0.50073]\n  },\n  \"Main-Bold\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0, 0, 0.35],\n    \"34\": [0, 0.69444, 0, 0, 0.60278],\n    \"35\": [0.19444, 0.69444, 0, 0, 0.95833],\n    \"36\": [0.05556, 0.75, 0, 0, 0.575],\n    \"37\": [0.05556, 0.75, 0, 0, 0.95833],\n    \"38\": [0, 0.69444, 0, 0, 0.89444],\n    \"39\": [0, 0.69444, 0, 0, 0.31944],\n    \"40\": [0.25, 0.75, 0, 0, 0.44722],\n    \"41\": [0.25, 0.75, 0, 0, 0.44722],\n    \"42\": [0, 0.75, 0, 0, 0.575],\n    \"43\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"44\": [0.19444, 0.15556, 0, 0, 0.31944],\n    \"45\": [0, 0.44444, 0, 0, 0.38333],\n    \"46\": [0, 0.15556, 0, 0, 0.31944],\n    \"47\": [0.25, 0.75, 0, 0, 0.575],\n    \"48\": [0, 0.64444, 0, 0, 0.575],\n    \"49\": [0, 0.64444, 0, 0, 0.575],\n    \"50\": [0, 0.64444, 0, 0, 0.575],\n    \"51\": [0, 0.64444, 0, 0, 0.575],\n    \"52\": [0, 0.64444, 0, 0, 0.575],\n    \"53\": [0, 0.64444, 0, 0, 0.575],\n    \"54\": [0, 0.64444, 0, 0, 0.575],\n    \"55\": [0, 0.64444, 0, 0, 0.575],\n    \"56\": [0, 0.64444, 0, 0, 0.575],\n    \"57\": [0, 0.64444, 0, 0, 0.575],\n    \"58\": [0, 0.44444, 0, 0, 0.31944],\n    \"59\": [0.19444, 0.44444, 0, 0, 0.31944],\n    \"60\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"61\": [-0.10889, 0.39111, 0, 0, 0.89444],\n    \"62\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"63\": [0, 0.69444, 0, 0, 0.54305],\n    \"64\": [0, 0.69444, 0, 0, 0.89444],\n    \"65\": [0, 0.68611, 0, 0, 0.86944],\n    \"66\": [0, 0.68611, 0, 0, 0.81805],\n    \"67\": [0, 0.68611, 0, 0, 0.83055],\n    \"68\": [0, 0.68611, 0, 0, 0.88194],\n    \"69\": [0, 0.68611, 0, 0, 0.75555],\n    \"70\": [0, 0.68611, 0, 0, 0.72361],\n    \"71\": [0, 0.68611, 0, 0, 0.90416],\n    \"72\": [0, 0.68611, 0, 0, 0.9],\n    \"73\": [0, 0.68611, 0, 0, 0.43611],\n    \"74\": [0, 0.68611, 0, 0, 0.59444],\n    \"75\": [0, 0.68611, 0, 0, 0.90138],\n    \"76\": [0, 0.68611, 0, 0, 0.69166],\n    \"77\": [0, 0.68611, 0, 0, 1.09166],\n    \"78\": [0, 0.68611, 0, 0, 0.9],\n    \"79\": [0, 0.68611, 0, 0, 0.86388],\n    \"80\": [0, 0.68611, 0, 0, 0.78611],\n    \"81\": [0.19444, 0.68611, 0, 0, 0.86388],\n    \"82\": [0, 0.68611, 0, 0, 0.8625],\n    \"83\": [0, 0.68611, 0, 0, 0.63889],\n    \"84\": [0, 0.68611, 0, 0, 0.8],\n    \"85\": [0, 0.68611, 0, 0, 0.88472],\n    \"86\": [0, 0.68611, 0.01597, 0, 0.86944],\n    \"87\": [0, 0.68611, 0.01597, 0, 1.18888],\n    \"88\": [0, 0.68611, 0, 0, 0.86944],\n    \"89\": [0, 0.68611, 0.02875, 0, 0.86944],\n    \"90\": [0, 0.68611, 0, 0, 0.70277],\n    \"91\": [0.25, 0.75, 0, 0, 0.31944],\n    \"92\": [0.25, 0.75, 0, 0, 0.575],\n    \"93\": [0.25, 0.75, 0, 0, 0.31944],\n    \"94\": [0, 0.69444, 0, 0, 0.575],\n    \"95\": [0.31, 0.13444, 0.03194, 0, 0.575],\n    \"97\": [0, 0.44444, 0, 0, 0.55902],\n    \"98\": [0, 0.69444, 0, 0, 0.63889],\n    \"99\": [0, 0.44444, 0, 0, 0.51111],\n    \"100\": [0, 0.69444, 0, 0, 0.63889],\n    \"101\": [0, 0.44444, 0, 0, 0.52708],\n    \"102\": [0, 0.69444, 0.10903, 0, 0.35139],\n    \"103\": [0.19444, 0.44444, 0.01597, 0, 0.575],\n    \"104\": [0, 0.69444, 0, 0, 0.63889],\n    \"105\": [0, 0.69444, 0, 0, 0.31944],\n    \"106\": [0.19444, 0.69444, 0, 0, 0.35139],\n    \"107\": [0, 0.69444, 0, 0, 0.60694],\n    \"108\": [0, 0.69444, 0, 0, 0.31944],\n    \"109\": [0, 0.44444, 0, 0, 0.95833],\n    \"110\": [0, 0.44444, 0, 0, 0.63889],\n    \"111\": [0, 0.44444, 0, 0, 0.575],\n    \"112\": [0.19444, 0.44444, 0, 0, 0.63889],\n    \"113\": [0.19444, 0.44444, 0, 0, 0.60694],\n    \"114\": [0, 0.44444, 0, 0, 0.47361],\n    \"115\": [0, 0.44444, 0, 0, 0.45361],\n    \"116\": [0, 0.63492, 0, 0, 0.44722],\n    \"117\": [0, 0.44444, 0, 0, 0.63889],\n    \"118\": [0, 0.44444, 0.01597, 0, 0.60694],\n    \"119\": [0, 0.44444, 0.01597, 0, 0.83055],\n    \"120\": [0, 0.44444, 0, 0, 0.60694],\n    \"121\": [0.19444, 0.44444, 0.01597, 0, 0.60694],\n    \"122\": [0, 0.44444, 0, 0, 0.51111],\n    \"123\": [0.25, 0.75, 0, 0, 0.575],\n    \"124\": [0.25, 0.75, 0, 0, 0.31944],\n    \"125\": [0.25, 0.75, 0, 0, 0.575],\n    \"126\": [0.35, 0.34444, 0, 0, 0.575],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"163\": [0, 0.69444, 0, 0, 0.86853],\n    \"168\": [0, 0.69444, 0, 0, 0.575],\n    \"172\": [0, 0.44444, 0, 0, 0.76666],\n    \"176\": [0, 0.69444, 0, 0, 0.86944],\n    \"177\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"184\": [0.17014, 0, 0, 0, 0.51111],\n    \"198\": [0, 0.68611, 0, 0, 1.04166],\n    \"215\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"216\": [0.04861, 0.73472, 0, 0, 0.89444],\n    \"223\": [0, 0.69444, 0, 0, 0.59722],\n    \"230\": [0, 0.44444, 0, 0, 0.83055],\n    \"247\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"248\": [0.09722, 0.54167, 0, 0, 0.575],\n    \"305\": [0, 0.44444, 0, 0, 0.31944],\n    \"338\": [0, 0.68611, 0, 0, 1.16944],\n    \"339\": [0, 0.44444, 0, 0, 0.89444],\n    \"567\": [0.19444, 0.44444, 0, 0, 0.35139],\n    \"710\": [0, 0.69444, 0, 0, 0.575],\n    \"711\": [0, 0.63194, 0, 0, 0.575],\n    \"713\": [0, 0.59611, 0, 0, 0.575],\n    \"714\": [0, 0.69444, 0, 0, 0.575],\n    \"715\": [0, 0.69444, 0, 0, 0.575],\n    \"728\": [0, 0.69444, 0, 0, 0.575],\n    \"729\": [0, 0.69444, 0, 0, 0.31944],\n    \"730\": [0, 0.69444, 0, 0, 0.86944],\n    \"732\": [0, 0.69444, 0, 0, 0.575],\n    \"733\": [0, 0.69444, 0, 0, 0.575],\n    \"915\": [0, 0.68611, 0, 0, 0.69166],\n    \"916\": [0, 0.68611, 0, 0, 0.95833],\n    \"920\": [0, 0.68611, 0, 0, 0.89444],\n    \"923\": [0, 0.68611, 0, 0, 0.80555],\n    \"926\": [0, 0.68611, 0, 0, 0.76666],\n    \"928\": [0, 0.68611, 0, 0, 0.9],\n    \"931\": [0, 0.68611, 0, 0, 0.83055],\n    \"933\": [0, 0.68611, 0, 0, 0.89444],\n    \"934\": [0, 0.68611, 0, 0, 0.83055],\n    \"936\": [0, 0.68611, 0, 0, 0.89444],\n    \"937\": [0, 0.68611, 0, 0, 0.83055],\n    \"8211\": [0, 0.44444, 0.03194, 0, 0.575],\n    \"8212\": [0, 0.44444, 0.03194, 0, 1.14999],\n    \"8216\": [0, 0.69444, 0, 0, 0.31944],\n    \"8217\": [0, 0.69444, 0, 0, 0.31944],\n    \"8220\": [0, 0.69444, 0, 0, 0.60278],\n    \"8221\": [0, 0.69444, 0, 0, 0.60278],\n    \"8224\": [0.19444, 0.69444, 0, 0, 0.51111],\n    \"8225\": [0.19444, 0.69444, 0, 0, 0.51111],\n    \"8242\": [0, 0.55556, 0, 0, 0.34444],\n    \"8407\": [0, 0.72444, 0.15486, 0, 0.575],\n    \"8463\": [0, 0.69444, 0, 0, 0.66759],\n    \"8465\": [0, 0.69444, 0, 0, 0.83055],\n    \"8467\": [0, 0.69444, 0, 0, 0.47361],\n    \"8472\": [0.19444, 0.44444, 0, 0, 0.74027],\n    \"8476\": [0, 0.69444, 0, 0, 0.83055],\n    \"8501\": [0, 0.69444, 0, 0, 0.70277],\n    \"8592\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8593\": [0.19444, 0.69444, 0, 0, 0.575],\n    \"8594\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8595\": [0.19444, 0.69444, 0, 0, 0.575],\n    \"8596\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8597\": [0.25, 0.75, 0, 0, 0.575],\n    \"8598\": [0.19444, 0.69444, 0, 0, 1.14999],\n    \"8599\": [0.19444, 0.69444, 0, 0, 1.14999],\n    \"8600\": [0.19444, 0.69444, 0, 0, 1.14999],\n    \"8601\": [0.19444, 0.69444, 0, 0, 1.14999],\n    \"8636\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8637\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8640\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8641\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8656\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8657\": [0.19444, 0.69444, 0, 0, 0.70277],\n    \"8658\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8659\": [0.19444, 0.69444, 0, 0, 0.70277],\n    \"8660\": [-0.10889, 0.39111, 0, 0, 1.14999],\n    \"8661\": [0.25, 0.75, 0, 0, 0.70277],\n    \"8704\": [0, 0.69444, 0, 0, 0.63889],\n    \"8706\": [0, 0.69444, 0.06389, 0, 0.62847],\n    \"8707\": [0, 0.69444, 0, 0, 0.63889],\n    \"8709\": [0.05556, 0.75, 0, 0, 0.575],\n    \"8711\": [0, 0.68611, 0, 0, 0.95833],\n    \"8712\": [0.08556, 0.58556, 0, 0, 0.76666],\n    \"8715\": [0.08556, 0.58556, 0, 0, 0.76666],\n    \"8722\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8723\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8725\": [0.25, 0.75, 0, 0, 0.575],\n    \"8726\": [0.25, 0.75, 0, 0, 0.575],\n    \"8727\": [-0.02778, 0.47222, 0, 0, 0.575],\n    \"8728\": [-0.02639, 0.47361, 0, 0, 0.575],\n    \"8729\": [-0.02639, 0.47361, 0, 0, 0.575],\n    \"8730\": [0.18, 0.82, 0, 0, 0.95833],\n    \"8733\": [0, 0.44444, 0, 0, 0.89444],\n    \"8734\": [0, 0.44444, 0, 0, 1.14999],\n    \"8736\": [0, 0.69224, 0, 0, 0.72222],\n    \"8739\": [0.25, 0.75, 0, 0, 0.31944],\n    \"8741\": [0.25, 0.75, 0, 0, 0.575],\n    \"8743\": [0, 0.55556, 0, 0, 0.76666],\n    \"8744\": [0, 0.55556, 0, 0, 0.76666],\n    \"8745\": [0, 0.55556, 0, 0, 0.76666],\n    \"8746\": [0, 0.55556, 0, 0, 0.76666],\n    \"8747\": [0.19444, 0.69444, 0.12778, 0, 0.56875],\n    \"8764\": [-0.10889, 0.39111, 0, 0, 0.89444],\n    \"8768\": [0.19444, 0.69444, 0, 0, 0.31944],\n    \"8771\": [0.00222, 0.50222, 0, 0, 0.89444],\n    \"8773\": [0.027, 0.638, 0, 0, 0.894],\n    \"8776\": [0.02444, 0.52444, 0, 0, 0.89444],\n    \"8781\": [0.00222, 0.50222, 0, 0, 0.89444],\n    \"8801\": [0.00222, 0.50222, 0, 0, 0.89444],\n    \"8804\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8805\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8810\": [0.08556, 0.58556, 0, 0, 1.14999],\n    \"8811\": [0.08556, 0.58556, 0, 0, 1.14999],\n    \"8826\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"8827\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"8834\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"8835\": [0.08556, 0.58556, 0, 0, 0.89444],\n    \"8838\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8839\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8846\": [0, 0.55556, 0, 0, 0.76666],\n    \"8849\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8850\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"8851\": [0, 0.55556, 0, 0, 0.76666],\n    \"8852\": [0, 0.55556, 0, 0, 0.76666],\n    \"8853\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8854\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8855\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8856\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8857\": [0.13333, 0.63333, 0, 0, 0.89444],\n    \"8866\": [0, 0.69444, 0, 0, 0.70277],\n    \"8867\": [0, 0.69444, 0, 0, 0.70277],\n    \"8868\": [0, 0.69444, 0, 0, 0.89444],\n    \"8869\": [0, 0.69444, 0, 0, 0.89444],\n    \"8900\": [-0.02639, 0.47361, 0, 0, 0.575],\n    \"8901\": [-0.02639, 0.47361, 0, 0, 0.31944],\n    \"8902\": [-0.02778, 0.47222, 0, 0, 0.575],\n    \"8968\": [0.25, 0.75, 0, 0, 0.51111],\n    \"8969\": [0.25, 0.75, 0, 0, 0.51111],\n    \"8970\": [0.25, 0.75, 0, 0, 0.51111],\n    \"8971\": [0.25, 0.75, 0, 0, 0.51111],\n    \"8994\": [-0.13889, 0.36111, 0, 0, 1.14999],\n    \"8995\": [-0.13889, 0.36111, 0, 0, 1.14999],\n    \"9651\": [0.19444, 0.69444, 0, 0, 1.02222],\n    \"9657\": [-0.02778, 0.47222, 0, 0, 0.575],\n    \"9661\": [0.19444, 0.69444, 0, 0, 1.02222],\n    \"9667\": [-0.02778, 0.47222, 0, 0, 0.575],\n    \"9711\": [0.19444, 0.69444, 0, 0, 1.14999],\n    \"9824\": [0.12963, 0.69444, 0, 0, 0.89444],\n    \"9825\": [0.12963, 0.69444, 0, 0, 0.89444],\n    \"9826\": [0.12963, 0.69444, 0, 0, 0.89444],\n    \"9827\": [0.12963, 0.69444, 0, 0, 0.89444],\n    \"9837\": [0, 0.75, 0, 0, 0.44722],\n    \"9838\": [0.19444, 0.69444, 0, 0, 0.44722],\n    \"9839\": [0.19444, 0.69444, 0, 0, 0.44722],\n    \"10216\": [0.25, 0.75, 0, 0, 0.44722],\n    \"10217\": [0.25, 0.75, 0, 0, 0.44722],\n    \"10815\": [0, 0.68611, 0, 0, 0.9],\n    \"10927\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"10928\": [0.19667, 0.69667, 0, 0, 0.89444],\n    \"57376\": [0.19444, 0.69444, 0, 0, 0]\n  },\n  \"Main-BoldItalic\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0.11417, 0, 0.38611],\n    \"34\": [0, 0.69444, 0.07939, 0, 0.62055],\n    \"35\": [0.19444, 0.69444, 0.06833, 0, 0.94444],\n    \"37\": [0.05556, 0.75, 0.12861, 0, 0.94444],\n    \"38\": [0, 0.69444, 0.08528, 0, 0.88555],\n    \"39\": [0, 0.69444, 0.12945, 0, 0.35555],\n    \"40\": [0.25, 0.75, 0.15806, 0, 0.47333],\n    \"41\": [0.25, 0.75, 0.03306, 0, 0.47333],\n    \"42\": [0, 0.75, 0.14333, 0, 0.59111],\n    \"43\": [0.10333, 0.60333, 0.03306, 0, 0.88555],\n    \"44\": [0.19444, 0.14722, 0, 0, 0.35555],\n    \"45\": [0, 0.44444, 0.02611, 0, 0.41444],\n    \"46\": [0, 0.14722, 0, 0, 0.35555],\n    \"47\": [0.25, 0.75, 0.15806, 0, 0.59111],\n    \"48\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"49\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"50\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"51\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"52\": [0.19444, 0.64444, 0.13167, 0, 0.59111],\n    \"53\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"54\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"55\": [0.19444, 0.64444, 0.13167, 0, 0.59111],\n    \"56\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"57\": [0, 0.64444, 0.13167, 0, 0.59111],\n    \"58\": [0, 0.44444, 0.06695, 0, 0.35555],\n    \"59\": [0.19444, 0.44444, 0.06695, 0, 0.35555],\n    \"61\": [-0.10889, 0.39111, 0.06833, 0, 0.88555],\n    \"63\": [0, 0.69444, 0.11472, 0, 0.59111],\n    \"64\": [0, 0.69444, 0.09208, 0, 0.88555],\n    \"65\": [0, 0.68611, 0, 0, 0.86555],\n    \"66\": [0, 0.68611, 0.0992, 0, 0.81666],\n    \"67\": [0, 0.68611, 0.14208, 0, 0.82666],\n    \"68\": [0, 0.68611, 0.09062, 0, 0.87555],\n    \"69\": [0, 0.68611, 0.11431, 0, 0.75666],\n    \"70\": [0, 0.68611, 0.12903, 0, 0.72722],\n    \"71\": [0, 0.68611, 0.07347, 0, 0.89527],\n    \"72\": [0, 0.68611, 0.17208, 0, 0.8961],\n    \"73\": [0, 0.68611, 0.15681, 0, 0.47166],\n    \"74\": [0, 0.68611, 0.145, 0, 0.61055],\n    \"75\": [0, 0.68611, 0.14208, 0, 0.89499],\n    \"76\": [0, 0.68611, 0, 0, 0.69777],\n    \"77\": [0, 0.68611, 0.17208, 0, 1.07277],\n    \"78\": [0, 0.68611, 0.17208, 0, 0.8961],\n    \"79\": [0, 0.68611, 0.09062, 0, 0.85499],\n    \"80\": [0, 0.68611, 0.0992, 0, 0.78721],\n    \"81\": [0.19444, 0.68611, 0.09062, 0, 0.85499],\n    \"82\": [0, 0.68611, 0.02559, 0, 0.85944],\n    \"83\": [0, 0.68611, 0.11264, 0, 0.64999],\n    \"84\": [0, 0.68611, 0.12903, 0, 0.7961],\n    \"85\": [0, 0.68611, 0.17208, 0, 0.88083],\n    \"86\": [0, 0.68611, 0.18625, 0, 0.86555],\n    \"87\": [0, 0.68611, 0.18625, 0, 1.15999],\n    \"88\": [0, 0.68611, 0.15681, 0, 0.86555],\n    \"89\": [0, 0.68611, 0.19803, 0, 0.86555],\n    \"90\": [0, 0.68611, 0.14208, 0, 0.70888],\n    \"91\": [0.25, 0.75, 0.1875, 0, 0.35611],\n    \"93\": [0.25, 0.75, 0.09972, 0, 0.35611],\n    \"94\": [0, 0.69444, 0.06709, 0, 0.59111],\n    \"95\": [0.31, 0.13444, 0.09811, 0, 0.59111],\n    \"97\": [0, 0.44444, 0.09426, 0, 0.59111],\n    \"98\": [0, 0.69444, 0.07861, 0, 0.53222],\n    \"99\": [0, 0.44444, 0.05222, 0, 0.53222],\n    \"100\": [0, 0.69444, 0.10861, 0, 0.59111],\n    \"101\": [0, 0.44444, 0.085, 0, 0.53222],\n    \"102\": [0.19444, 0.69444, 0.21778, 0, 0.4],\n    \"103\": [0.19444, 0.44444, 0.105, 0, 0.53222],\n    \"104\": [0, 0.69444, 0.09426, 0, 0.59111],\n    \"105\": [0, 0.69326, 0.11387, 0, 0.35555],\n    \"106\": [0.19444, 0.69326, 0.1672, 0, 0.35555],\n    \"107\": [0, 0.69444, 0.11111, 0, 0.53222],\n    \"108\": [0, 0.69444, 0.10861, 0, 0.29666],\n    \"109\": [0, 0.44444, 0.09426, 0, 0.94444],\n    \"110\": [0, 0.44444, 0.09426, 0, 0.64999],\n    \"111\": [0, 0.44444, 0.07861, 0, 0.59111],\n    \"112\": [0.19444, 0.44444, 0.07861, 0, 0.59111],\n    \"113\": [0.19444, 0.44444, 0.105, 0, 0.53222],\n    \"114\": [0, 0.44444, 0.11111, 0, 0.50167],\n    \"115\": [0, 0.44444, 0.08167, 0, 0.48694],\n    \"116\": [0, 0.63492, 0.09639, 0, 0.385],\n    \"117\": [0, 0.44444, 0.09426, 0, 0.62055],\n    \"118\": [0, 0.44444, 0.11111, 0, 0.53222],\n    \"119\": [0, 0.44444, 0.11111, 0, 0.76777],\n    \"120\": [0, 0.44444, 0.12583, 0, 0.56055],\n    \"121\": [0.19444, 0.44444, 0.105, 0, 0.56166],\n    \"122\": [0, 0.44444, 0.13889, 0, 0.49055],\n    \"126\": [0.35, 0.34444, 0.11472, 0, 0.59111],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"168\": [0, 0.69444, 0.11473, 0, 0.59111],\n    \"176\": [0, 0.69444, 0, 0, 0.94888],\n    \"184\": [0.17014, 0, 0, 0, 0.53222],\n    \"198\": [0, 0.68611, 0.11431, 0, 1.02277],\n    \"216\": [0.04861, 0.73472, 0.09062, 0, 0.88555],\n    \"223\": [0.19444, 0.69444, 0.09736, 0, 0.665],\n    \"230\": [0, 0.44444, 0.085, 0, 0.82666],\n    \"248\": [0.09722, 0.54167, 0.09458, 0, 0.59111],\n    \"305\": [0, 0.44444, 0.09426, 0, 0.35555],\n    \"338\": [0, 0.68611, 0.11431, 0, 1.14054],\n    \"339\": [0, 0.44444, 0.085, 0, 0.82666],\n    \"567\": [0.19444, 0.44444, 0.04611, 0, 0.385],\n    \"710\": [0, 0.69444, 0.06709, 0, 0.59111],\n    \"711\": [0, 0.63194, 0.08271, 0, 0.59111],\n    \"713\": [0, 0.59444, 0.10444, 0, 0.59111],\n    \"714\": [0, 0.69444, 0.08528, 0, 0.59111],\n    \"715\": [0, 0.69444, 0, 0, 0.59111],\n    \"728\": [0, 0.69444, 0.10333, 0, 0.59111],\n    \"729\": [0, 0.69444, 0.12945, 0, 0.35555],\n    \"730\": [0, 0.69444, 0, 0, 0.94888],\n    \"732\": [0, 0.69444, 0.11472, 0, 0.59111],\n    \"733\": [0, 0.69444, 0.11472, 0, 0.59111],\n    \"915\": [0, 0.68611, 0.12903, 0, 0.69777],\n    \"916\": [0, 0.68611, 0, 0, 0.94444],\n    \"920\": [0, 0.68611, 0.09062, 0, 0.88555],\n    \"923\": [0, 0.68611, 0, 0, 0.80666],\n    \"926\": [0, 0.68611, 0.15092, 0, 0.76777],\n    \"928\": [0, 0.68611, 0.17208, 0, 0.8961],\n    \"931\": [0, 0.68611, 0.11431, 0, 0.82666],\n    \"933\": [0, 0.68611, 0.10778, 0, 0.88555],\n    \"934\": [0, 0.68611, 0.05632, 0, 0.82666],\n    \"936\": [0, 0.68611, 0.10778, 0, 0.88555],\n    \"937\": [0, 0.68611, 0.0992, 0, 0.82666],\n    \"8211\": [0, 0.44444, 0.09811, 0, 0.59111],\n    \"8212\": [0, 0.44444, 0.09811, 0, 1.18221],\n    \"8216\": [0, 0.69444, 0.12945, 0, 0.35555],\n    \"8217\": [0, 0.69444, 0.12945, 0, 0.35555],\n    \"8220\": [0, 0.69444, 0.16772, 0, 0.62055],\n    \"8221\": [0, 0.69444, 0.07939, 0, 0.62055]\n  },\n  \"Main-Italic\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0.12417, 0, 0.30667],\n    \"34\": [0, 0.69444, 0.06961, 0, 0.51444],\n    \"35\": [0.19444, 0.69444, 0.06616, 0, 0.81777],\n    \"37\": [0.05556, 0.75, 0.13639, 0, 0.81777],\n    \"38\": [0, 0.69444, 0.09694, 0, 0.76666],\n    \"39\": [0, 0.69444, 0.12417, 0, 0.30667],\n    \"40\": [0.25, 0.75, 0.16194, 0, 0.40889],\n    \"41\": [0.25, 0.75, 0.03694, 0, 0.40889],\n    \"42\": [0, 0.75, 0.14917, 0, 0.51111],\n    \"43\": [0.05667, 0.56167, 0.03694, 0, 0.76666],\n    \"44\": [0.19444, 0.10556, 0, 0, 0.30667],\n    \"45\": [0, 0.43056, 0.02826, 0, 0.35778],\n    \"46\": [0, 0.10556, 0, 0, 0.30667],\n    \"47\": [0.25, 0.75, 0.16194, 0, 0.51111],\n    \"48\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"49\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"50\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"51\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"52\": [0.19444, 0.64444, 0.13556, 0, 0.51111],\n    \"53\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"54\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"55\": [0.19444, 0.64444, 0.13556, 0, 0.51111],\n    \"56\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"57\": [0, 0.64444, 0.13556, 0, 0.51111],\n    \"58\": [0, 0.43056, 0.0582, 0, 0.30667],\n    \"59\": [0.19444, 0.43056, 0.0582, 0, 0.30667],\n    \"61\": [-0.13313, 0.36687, 0.06616, 0, 0.76666],\n    \"63\": [0, 0.69444, 0.1225, 0, 0.51111],\n    \"64\": [0, 0.69444, 0.09597, 0, 0.76666],\n    \"65\": [0, 0.68333, 0, 0, 0.74333],\n    \"66\": [0, 0.68333, 0.10257, 0, 0.70389],\n    \"67\": [0, 0.68333, 0.14528, 0, 0.71555],\n    \"68\": [0, 0.68333, 0.09403, 0, 0.755],\n    \"69\": [0, 0.68333, 0.12028, 0, 0.67833],\n    \"70\": [0, 0.68333, 0.13305, 0, 0.65277],\n    \"71\": [0, 0.68333, 0.08722, 0, 0.77361],\n    \"72\": [0, 0.68333, 0.16389, 0, 0.74333],\n    \"73\": [0, 0.68333, 0.15806, 0, 0.38555],\n    \"74\": [0, 0.68333, 0.14028, 0, 0.525],\n    \"75\": [0, 0.68333, 0.14528, 0, 0.76888],\n    \"76\": [0, 0.68333, 0, 0, 0.62722],\n    \"77\": [0, 0.68333, 0.16389, 0, 0.89666],\n    \"78\": [0, 0.68333, 0.16389, 0, 0.74333],\n    \"79\": [0, 0.68333, 0.09403, 0, 0.76666],\n    \"80\": [0, 0.68333, 0.10257, 0, 0.67833],\n    \"81\": [0.19444, 0.68333, 0.09403, 0, 0.76666],\n    \"82\": [0, 0.68333, 0.03868, 0, 0.72944],\n    \"83\": [0, 0.68333, 0.11972, 0, 0.56222],\n    \"84\": [0, 0.68333, 0.13305, 0, 0.71555],\n    \"85\": [0, 0.68333, 0.16389, 0, 0.74333],\n    \"86\": [0, 0.68333, 0.18361, 0, 0.74333],\n    \"87\": [0, 0.68333, 0.18361, 0, 0.99888],\n    \"88\": [0, 0.68333, 0.15806, 0, 0.74333],\n    \"89\": [0, 0.68333, 0.19383, 0, 0.74333],\n    \"90\": [0, 0.68333, 0.14528, 0, 0.61333],\n    \"91\": [0.25, 0.75, 0.1875, 0, 0.30667],\n    \"93\": [0.25, 0.75, 0.10528, 0, 0.30667],\n    \"94\": [0, 0.69444, 0.06646, 0, 0.51111],\n    \"95\": [0.31, 0.12056, 0.09208, 0, 0.51111],\n    \"97\": [0, 0.43056, 0.07671, 0, 0.51111],\n    \"98\": [0, 0.69444, 0.06312, 0, 0.46],\n    \"99\": [0, 0.43056, 0.05653, 0, 0.46],\n    \"100\": [0, 0.69444, 0.10333, 0, 0.51111],\n    \"101\": [0, 0.43056, 0.07514, 0, 0.46],\n    \"102\": [0.19444, 0.69444, 0.21194, 0, 0.30667],\n    \"103\": [0.19444, 0.43056, 0.08847, 0, 0.46],\n    \"104\": [0, 0.69444, 0.07671, 0, 0.51111],\n    \"105\": [0, 0.65536, 0.1019, 0, 0.30667],\n    \"106\": [0.19444, 0.65536, 0.14467, 0, 0.30667],\n    \"107\": [0, 0.69444, 0.10764, 0, 0.46],\n    \"108\": [0, 0.69444, 0.10333, 0, 0.25555],\n    \"109\": [0, 0.43056, 0.07671, 0, 0.81777],\n    \"110\": [0, 0.43056, 0.07671, 0, 0.56222],\n    \"111\": [0, 0.43056, 0.06312, 0, 0.51111],\n    \"112\": [0.19444, 0.43056, 0.06312, 0, 0.51111],\n    \"113\": [0.19444, 0.43056, 0.08847, 0, 0.46],\n    \"114\": [0, 0.43056, 0.10764, 0, 0.42166],\n    \"115\": [0, 0.43056, 0.08208, 0, 0.40889],\n    \"116\": [0, 0.61508, 0.09486, 0, 0.33222],\n    \"117\": [0, 0.43056, 0.07671, 0, 0.53666],\n    \"118\": [0, 0.43056, 0.10764, 0, 0.46],\n    \"119\": [0, 0.43056, 0.10764, 0, 0.66444],\n    \"120\": [0, 0.43056, 0.12042, 0, 0.46389],\n    \"121\": [0.19444, 0.43056, 0.08847, 0, 0.48555],\n    \"122\": [0, 0.43056, 0.12292, 0, 0.40889],\n    \"126\": [0.35, 0.31786, 0.11585, 0, 0.51111],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"168\": [0, 0.66786, 0.10474, 0, 0.51111],\n    \"176\": [0, 0.69444, 0, 0, 0.83129],\n    \"184\": [0.17014, 0, 0, 0, 0.46],\n    \"198\": [0, 0.68333, 0.12028, 0, 0.88277],\n    \"216\": [0.04861, 0.73194, 0.09403, 0, 0.76666],\n    \"223\": [0.19444, 0.69444, 0.10514, 0, 0.53666],\n    \"230\": [0, 0.43056, 0.07514, 0, 0.71555],\n    \"248\": [0.09722, 0.52778, 0.09194, 0, 0.51111],\n    \"338\": [0, 0.68333, 0.12028, 0, 0.98499],\n    \"339\": [0, 0.43056, 0.07514, 0, 0.71555],\n    \"710\": [0, 0.69444, 0.06646, 0, 0.51111],\n    \"711\": [0, 0.62847, 0.08295, 0, 0.51111],\n    \"713\": [0, 0.56167, 0.10333, 0, 0.51111],\n    \"714\": [0, 0.69444, 0.09694, 0, 0.51111],\n    \"715\": [0, 0.69444, 0, 0, 0.51111],\n    \"728\": [0, 0.69444, 0.10806, 0, 0.51111],\n    \"729\": [0, 0.66786, 0.11752, 0, 0.30667],\n    \"730\": [0, 0.69444, 0, 0, 0.83129],\n    \"732\": [0, 0.66786, 0.11585, 0, 0.51111],\n    \"733\": [0, 0.69444, 0.1225, 0, 0.51111],\n    \"915\": [0, 0.68333, 0.13305, 0, 0.62722],\n    \"916\": [0, 0.68333, 0, 0, 0.81777],\n    \"920\": [0, 0.68333, 0.09403, 0, 0.76666],\n    \"923\": [0, 0.68333, 0, 0, 0.69222],\n    \"926\": [0, 0.68333, 0.15294, 0, 0.66444],\n    \"928\": [0, 0.68333, 0.16389, 0, 0.74333],\n    \"931\": [0, 0.68333, 0.12028, 0, 0.71555],\n    \"933\": [0, 0.68333, 0.11111, 0, 0.76666],\n    \"934\": [0, 0.68333, 0.05986, 0, 0.71555],\n    \"936\": [0, 0.68333, 0.11111, 0, 0.76666],\n    \"937\": [0, 0.68333, 0.10257, 0, 0.71555],\n    \"8211\": [0, 0.43056, 0.09208, 0, 0.51111],\n    \"8212\": [0, 0.43056, 0.09208, 0, 1.02222],\n    \"8216\": [0, 0.69444, 0.12417, 0, 0.30667],\n    \"8217\": [0, 0.69444, 0.12417, 0, 0.30667],\n    \"8220\": [0, 0.69444, 0.1685, 0, 0.51444],\n    \"8221\": [0, 0.69444, 0.06961, 0, 0.51444],\n    \"8463\": [0, 0.68889, 0, 0, 0.54028]\n  },\n  \"Main-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0, 0, 0.27778],\n    \"34\": [0, 0.69444, 0, 0, 0.5],\n    \"35\": [0.19444, 0.69444, 0, 0, 0.83334],\n    \"36\": [0.05556, 0.75, 0, 0, 0.5],\n    \"37\": [0.05556, 0.75, 0, 0, 0.83334],\n    \"38\": [0, 0.69444, 0, 0, 0.77778],\n    \"39\": [0, 0.69444, 0, 0, 0.27778],\n    \"40\": [0.25, 0.75, 0, 0, 0.38889],\n    \"41\": [0.25, 0.75, 0, 0, 0.38889],\n    \"42\": [0, 0.75, 0, 0, 0.5],\n    \"43\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"44\": [0.19444, 0.10556, 0, 0, 0.27778],\n    \"45\": [0, 0.43056, 0, 0, 0.33333],\n    \"46\": [0, 0.10556, 0, 0, 0.27778],\n    \"47\": [0.25, 0.75, 0, 0, 0.5],\n    \"48\": [0, 0.64444, 0, 0, 0.5],\n    \"49\": [0, 0.64444, 0, 0, 0.5],\n    \"50\": [0, 0.64444, 0, 0, 0.5],\n    \"51\": [0, 0.64444, 0, 0, 0.5],\n    \"52\": [0, 0.64444, 0, 0, 0.5],\n    \"53\": [0, 0.64444, 0, 0, 0.5],\n    \"54\": [0, 0.64444, 0, 0, 0.5],\n    \"55\": [0, 0.64444, 0, 0, 0.5],\n    \"56\": [0, 0.64444, 0, 0, 0.5],\n    \"57\": [0, 0.64444, 0, 0, 0.5],\n    \"58\": [0, 0.43056, 0, 0, 0.27778],\n    \"59\": [0.19444, 0.43056, 0, 0, 0.27778],\n    \"60\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"61\": [-0.13313, 0.36687, 0, 0, 0.77778],\n    \"62\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"63\": [0, 0.69444, 0, 0, 0.47222],\n    \"64\": [0, 0.69444, 0, 0, 0.77778],\n    \"65\": [0, 0.68333, 0, 0, 0.75],\n    \"66\": [0, 0.68333, 0, 0, 0.70834],\n    \"67\": [0, 0.68333, 0, 0, 0.72222],\n    \"68\": [0, 0.68333, 0, 0, 0.76389],\n    \"69\": [0, 0.68333, 0, 0, 0.68056],\n    \"70\": [0, 0.68333, 0, 0, 0.65278],\n    \"71\": [0, 0.68333, 0, 0, 0.78472],\n    \"72\": [0, 0.68333, 0, 0, 0.75],\n    \"73\": [0, 0.68333, 0, 0, 0.36111],\n    \"74\": [0, 0.68333, 0, 0, 0.51389],\n    \"75\": [0, 0.68333, 0, 0, 0.77778],\n    \"76\": [0, 0.68333, 0, 0, 0.625],\n    \"77\": [0, 0.68333, 0, 0, 0.91667],\n    \"78\": [0, 0.68333, 0, 0, 0.75],\n    \"79\": [0, 0.68333, 0, 0, 0.77778],\n    \"80\": [0, 0.68333, 0, 0, 0.68056],\n    \"81\": [0.19444, 0.68333, 0, 0, 0.77778],\n    \"82\": [0, 0.68333, 0, 0, 0.73611],\n    \"83\": [0, 0.68333, 0, 0, 0.55556],\n    \"84\": [0, 0.68333, 0, 0, 0.72222],\n    \"85\": [0, 0.68333, 0, 0, 0.75],\n    \"86\": [0, 0.68333, 0.01389, 0, 0.75],\n    \"87\": [0, 0.68333, 0.01389, 0, 1.02778],\n    \"88\": [0, 0.68333, 0, 0, 0.75],\n    \"89\": [0, 0.68333, 0.025, 0, 0.75],\n    \"90\": [0, 0.68333, 0, 0, 0.61111],\n    \"91\": [0.25, 0.75, 0, 0, 0.27778],\n    \"92\": [0.25, 0.75, 0, 0, 0.5],\n    \"93\": [0.25, 0.75, 0, 0, 0.27778],\n    \"94\": [0, 0.69444, 0, 0, 0.5],\n    \"95\": [0.31, 0.12056, 0.02778, 0, 0.5],\n    \"97\": [0, 0.43056, 0, 0, 0.5],\n    \"98\": [0, 0.69444, 0, 0, 0.55556],\n    \"99\": [0, 0.43056, 0, 0, 0.44445],\n    \"100\": [0, 0.69444, 0, 0, 0.55556],\n    \"101\": [0, 0.43056, 0, 0, 0.44445],\n    \"102\": [0, 0.69444, 0.07778, 0, 0.30556],\n    \"103\": [0.19444, 0.43056, 0.01389, 0, 0.5],\n    \"104\": [0, 0.69444, 0, 0, 0.55556],\n    \"105\": [0, 0.66786, 0, 0, 0.27778],\n    \"106\": [0.19444, 0.66786, 0, 0, 0.30556],\n    \"107\": [0, 0.69444, 0, 0, 0.52778],\n    \"108\": [0, 0.69444, 0, 0, 0.27778],\n    \"109\": [0, 0.43056, 0, 0, 0.83334],\n    \"110\": [0, 0.43056, 0, 0, 0.55556],\n    \"111\": [0, 0.43056, 0, 0, 0.5],\n    \"112\": [0.19444, 0.43056, 0, 0, 0.55556],\n    \"113\": [0.19444, 0.43056, 0, 0, 0.52778],\n    \"114\": [0, 0.43056, 0, 0, 0.39167],\n    \"115\": [0, 0.43056, 0, 0, 0.39445],\n    \"116\": [0, 0.61508, 0, 0, 0.38889],\n    \"117\": [0, 0.43056, 0, 0, 0.55556],\n    \"118\": [0, 0.43056, 0.01389, 0, 0.52778],\n    \"119\": [0, 0.43056, 0.01389, 0, 0.72222],\n    \"120\": [0, 0.43056, 0, 0, 0.52778],\n    \"121\": [0.19444, 0.43056, 0.01389, 0, 0.52778],\n    \"122\": [0, 0.43056, 0, 0, 0.44445],\n    \"123\": [0.25, 0.75, 0, 0, 0.5],\n    \"124\": [0.25, 0.75, 0, 0, 0.27778],\n    \"125\": [0.25, 0.75, 0, 0, 0.5],\n    \"126\": [0.35, 0.31786, 0, 0, 0.5],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"163\": [0, 0.69444, 0, 0, 0.76909],\n    \"167\": [0.19444, 0.69444, 0, 0, 0.44445],\n    \"168\": [0, 0.66786, 0, 0, 0.5],\n    \"172\": [0, 0.43056, 0, 0, 0.66667],\n    \"176\": [0, 0.69444, 0, 0, 0.75],\n    \"177\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"182\": [0.19444, 0.69444, 0, 0, 0.61111],\n    \"184\": [0.17014, 0, 0, 0, 0.44445],\n    \"198\": [0, 0.68333, 0, 0, 0.90278],\n    \"215\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"216\": [0.04861, 0.73194, 0, 0, 0.77778],\n    \"223\": [0, 0.69444, 0, 0, 0.5],\n    \"230\": [0, 0.43056, 0, 0, 0.72222],\n    \"247\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"248\": [0.09722, 0.52778, 0, 0, 0.5],\n    \"305\": [0, 0.43056, 0, 0, 0.27778],\n    \"338\": [0, 0.68333, 0, 0, 1.01389],\n    \"339\": [0, 0.43056, 0, 0, 0.77778],\n    \"567\": [0.19444, 0.43056, 0, 0, 0.30556],\n    \"710\": [0, 0.69444, 0, 0, 0.5],\n    \"711\": [0, 0.62847, 0, 0, 0.5],\n    \"713\": [0, 0.56778, 0, 0, 0.5],\n    \"714\": [0, 0.69444, 0, 0, 0.5],\n    \"715\": [0, 0.69444, 0, 0, 0.5],\n    \"728\": [0, 0.69444, 0, 0, 0.5],\n    \"729\": [0, 0.66786, 0, 0, 0.27778],\n    \"730\": [0, 0.69444, 0, 0, 0.75],\n    \"732\": [0, 0.66786, 0, 0, 0.5],\n    \"733\": [0, 0.69444, 0, 0, 0.5],\n    \"915\": [0, 0.68333, 0, 0, 0.625],\n    \"916\": [0, 0.68333, 0, 0, 0.83334],\n    \"920\": [0, 0.68333, 0, 0, 0.77778],\n    \"923\": [0, 0.68333, 0, 0, 0.69445],\n    \"926\": [0, 0.68333, 0, 0, 0.66667],\n    \"928\": [0, 0.68333, 0, 0, 0.75],\n    \"931\": [0, 0.68333, 0, 0, 0.72222],\n    \"933\": [0, 0.68333, 0, 0, 0.77778],\n    \"934\": [0, 0.68333, 0, 0, 0.72222],\n    \"936\": [0, 0.68333, 0, 0, 0.77778],\n    \"937\": [0, 0.68333, 0, 0, 0.72222],\n    \"8211\": [0, 0.43056, 0.02778, 0, 0.5],\n    \"8212\": [0, 0.43056, 0.02778, 0, 1.0],\n    \"8216\": [0, 0.69444, 0, 0, 0.27778],\n    \"8217\": [0, 0.69444, 0, 0, 0.27778],\n    \"8220\": [0, 0.69444, 0, 0, 0.5],\n    \"8221\": [0, 0.69444, 0, 0, 0.5],\n    \"8224\": [0.19444, 0.69444, 0, 0, 0.44445],\n    \"8225\": [0.19444, 0.69444, 0, 0, 0.44445],\n    \"8230\": [0, 0.123, 0, 0, 1.172],\n    \"8242\": [0, 0.55556, 0, 0, 0.275],\n    \"8407\": [0, 0.71444, 0.15382, 0, 0.5],\n    \"8463\": [0, 0.68889, 0, 0, 0.54028],\n    \"8465\": [0, 0.69444, 0, 0, 0.72222],\n    \"8467\": [0, 0.69444, 0, 0.11111, 0.41667],\n    \"8472\": [0.19444, 0.43056, 0, 0.11111, 0.63646],\n    \"8476\": [0, 0.69444, 0, 0, 0.72222],\n    \"8501\": [0, 0.69444, 0, 0, 0.61111],\n    \"8592\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8593\": [0.19444, 0.69444, 0, 0, 0.5],\n    \"8594\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8595\": [0.19444, 0.69444, 0, 0, 0.5],\n    \"8596\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8597\": [0.25, 0.75, 0, 0, 0.5],\n    \"8598\": [0.19444, 0.69444, 0, 0, 1.0],\n    \"8599\": [0.19444, 0.69444, 0, 0, 1.0],\n    \"8600\": [0.19444, 0.69444, 0, 0, 1.0],\n    \"8601\": [0.19444, 0.69444, 0, 0, 1.0],\n    \"8614\": [0.011, 0.511, 0, 0, 1.0],\n    \"8617\": [0.011, 0.511, 0, 0, 1.126],\n    \"8618\": [0.011, 0.511, 0, 0, 1.126],\n    \"8636\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8637\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8640\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8641\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8652\": [0.011, 0.671, 0, 0, 1.0],\n    \"8656\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8657\": [0.19444, 0.69444, 0, 0, 0.61111],\n    \"8658\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8659\": [0.19444, 0.69444, 0, 0, 0.61111],\n    \"8660\": [-0.13313, 0.36687, 0, 0, 1.0],\n    \"8661\": [0.25, 0.75, 0, 0, 0.61111],\n    \"8704\": [0, 0.69444, 0, 0, 0.55556],\n    \"8706\": [0, 0.69444, 0.05556, 0.08334, 0.5309],\n    \"8707\": [0, 0.69444, 0, 0, 0.55556],\n    \"8709\": [0.05556, 0.75, 0, 0, 0.5],\n    \"8711\": [0, 0.68333, 0, 0, 0.83334],\n    \"8712\": [0.0391, 0.5391, 0, 0, 0.66667],\n    \"8715\": [0.0391, 0.5391, 0, 0, 0.66667],\n    \"8722\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8723\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8725\": [0.25, 0.75, 0, 0, 0.5],\n    \"8726\": [0.25, 0.75, 0, 0, 0.5],\n    \"8727\": [-0.03472, 0.46528, 0, 0, 0.5],\n    \"8728\": [-0.05555, 0.44445, 0, 0, 0.5],\n    \"8729\": [-0.05555, 0.44445, 0, 0, 0.5],\n    \"8730\": [0.2, 0.8, 0, 0, 0.83334],\n    \"8733\": [0, 0.43056, 0, 0, 0.77778],\n    \"8734\": [0, 0.43056, 0, 0, 1.0],\n    \"8736\": [0, 0.69224, 0, 0, 0.72222],\n    \"8739\": [0.25, 0.75, 0, 0, 0.27778],\n    \"8741\": [0.25, 0.75, 0, 0, 0.5],\n    \"8743\": [0, 0.55556, 0, 0, 0.66667],\n    \"8744\": [0, 0.55556, 0, 0, 0.66667],\n    \"8745\": [0, 0.55556, 0, 0, 0.66667],\n    \"8746\": [0, 0.55556, 0, 0, 0.66667],\n    \"8747\": [0.19444, 0.69444, 0.11111, 0, 0.41667],\n    \"8764\": [-0.13313, 0.36687, 0, 0, 0.77778],\n    \"8768\": [0.19444, 0.69444, 0, 0, 0.27778],\n    \"8771\": [-0.03625, 0.46375, 0, 0, 0.77778],\n    \"8773\": [-0.022, 0.589, 0, 0, 0.778],\n    \"8776\": [-0.01688, 0.48312, 0, 0, 0.77778],\n    \"8781\": [-0.03625, 0.46375, 0, 0, 0.77778],\n    \"8784\": [-0.133, 0.673, 0, 0, 0.778],\n    \"8801\": [-0.03625, 0.46375, 0, 0, 0.77778],\n    \"8804\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8805\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8810\": [0.0391, 0.5391, 0, 0, 1.0],\n    \"8811\": [0.0391, 0.5391, 0, 0, 1.0],\n    \"8826\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8827\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8834\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8835\": [0.0391, 0.5391, 0, 0, 0.77778],\n    \"8838\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8839\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8846\": [0, 0.55556, 0, 0, 0.66667],\n    \"8849\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8850\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"8851\": [0, 0.55556, 0, 0, 0.66667],\n    \"8852\": [0, 0.55556, 0, 0, 0.66667],\n    \"8853\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8854\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8855\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8856\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8857\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"8866\": [0, 0.69444, 0, 0, 0.61111],\n    \"8867\": [0, 0.69444, 0, 0, 0.61111],\n    \"8868\": [0, 0.69444, 0, 0, 0.77778],\n    \"8869\": [0, 0.69444, 0, 0, 0.77778],\n    \"8872\": [0.249, 0.75, 0, 0, 0.867],\n    \"8900\": [-0.05555, 0.44445, 0, 0, 0.5],\n    \"8901\": [-0.05555, 0.44445, 0, 0, 0.27778],\n    \"8902\": [-0.03472, 0.46528, 0, 0, 0.5],\n    \"8904\": [0.005, 0.505, 0, 0, 0.9],\n    \"8942\": [0.03, 0.903, 0, 0, 0.278],\n    \"8943\": [-0.19, 0.313, 0, 0, 1.172],\n    \"8945\": [-0.1, 0.823, 0, 0, 1.282],\n    \"8968\": [0.25, 0.75, 0, 0, 0.44445],\n    \"8969\": [0.25, 0.75, 0, 0, 0.44445],\n    \"8970\": [0.25, 0.75, 0, 0, 0.44445],\n    \"8971\": [0.25, 0.75, 0, 0, 0.44445],\n    \"8994\": [-0.14236, 0.35764, 0, 0, 1.0],\n    \"8995\": [-0.14236, 0.35764, 0, 0, 1.0],\n    \"9136\": [0.244, 0.744, 0, 0, 0.412],\n    \"9137\": [0.244, 0.745, 0, 0, 0.412],\n    \"9651\": [0.19444, 0.69444, 0, 0, 0.88889],\n    \"9657\": [-0.03472, 0.46528, 0, 0, 0.5],\n    \"9661\": [0.19444, 0.69444, 0, 0, 0.88889],\n    \"9667\": [-0.03472, 0.46528, 0, 0, 0.5],\n    \"9711\": [0.19444, 0.69444, 0, 0, 1.0],\n    \"9824\": [0.12963, 0.69444, 0, 0, 0.77778],\n    \"9825\": [0.12963, 0.69444, 0, 0, 0.77778],\n    \"9826\": [0.12963, 0.69444, 0, 0, 0.77778],\n    \"9827\": [0.12963, 0.69444, 0, 0, 0.77778],\n    \"9837\": [0, 0.75, 0, 0, 0.38889],\n    \"9838\": [0.19444, 0.69444, 0, 0, 0.38889],\n    \"9839\": [0.19444, 0.69444, 0, 0, 0.38889],\n    \"10216\": [0.25, 0.75, 0, 0, 0.38889],\n    \"10217\": [0.25, 0.75, 0, 0, 0.38889],\n    \"10222\": [0.244, 0.744, 0, 0, 0.412],\n    \"10223\": [0.244, 0.745, 0, 0, 0.412],\n    \"10229\": [0.011, 0.511, 0, 0, 1.609],\n    \"10230\": [0.011, 0.511, 0, 0, 1.638],\n    \"10231\": [0.011, 0.511, 0, 0, 1.859],\n    \"10232\": [0.024, 0.525, 0, 0, 1.609],\n    \"10233\": [0.024, 0.525, 0, 0, 1.638],\n    \"10234\": [0.024, 0.525, 0, 0, 1.858],\n    \"10236\": [0.011, 0.511, 0, 0, 1.638],\n    \"10815\": [0, 0.68333, 0, 0, 0.75],\n    \"10927\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"10928\": [0.13597, 0.63597, 0, 0, 0.77778],\n    \"57376\": [0.19444, 0.69444, 0, 0, 0]\n  },\n  \"Math-BoldItalic\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"48\": [0, 0.44444, 0, 0, 0.575],\n    \"49\": [0, 0.44444, 0, 0, 0.575],\n    \"50\": [0, 0.44444, 0, 0, 0.575],\n    \"51\": [0.19444, 0.44444, 0, 0, 0.575],\n    \"52\": [0.19444, 0.44444, 0, 0, 0.575],\n    \"53\": [0.19444, 0.44444, 0, 0, 0.575],\n    \"54\": [0, 0.64444, 0, 0, 0.575],\n    \"55\": [0.19444, 0.44444, 0, 0, 0.575],\n    \"56\": [0, 0.64444, 0, 0, 0.575],\n    \"57\": [0.19444, 0.44444, 0, 0, 0.575],\n    \"65\": [0, 0.68611, 0, 0, 0.86944],\n    \"66\": [0, 0.68611, 0.04835, 0, 0.8664],\n    \"67\": [0, 0.68611, 0.06979, 0, 0.81694],\n    \"68\": [0, 0.68611, 0.03194, 0, 0.93812],\n    \"69\": [0, 0.68611, 0.05451, 0, 0.81007],\n    \"70\": [0, 0.68611, 0.15972, 0, 0.68889],\n    \"71\": [0, 0.68611, 0, 0, 0.88673],\n    \"72\": [0, 0.68611, 0.08229, 0, 0.98229],\n    \"73\": [0, 0.68611, 0.07778, 0, 0.51111],\n    \"74\": [0, 0.68611, 0.10069, 0, 0.63125],\n    \"75\": [0, 0.68611, 0.06979, 0, 0.97118],\n    \"76\": [0, 0.68611, 0, 0, 0.75555],\n    \"77\": [0, 0.68611, 0.11424, 0, 1.14201],\n    \"78\": [0, 0.68611, 0.11424, 0, 0.95034],\n    \"79\": [0, 0.68611, 0.03194, 0, 0.83666],\n    \"80\": [0, 0.68611, 0.15972, 0, 0.72309],\n    \"81\": [0.19444, 0.68611, 0, 0, 0.86861],\n    \"82\": [0, 0.68611, 0.00421, 0, 0.87235],\n    \"83\": [0, 0.68611, 0.05382, 0, 0.69271],\n    \"84\": [0, 0.68611, 0.15972, 0, 0.63663],\n    \"85\": [0, 0.68611, 0.11424, 0, 0.80027],\n    \"86\": [0, 0.68611, 0.25555, 0, 0.67778],\n    \"87\": [0, 0.68611, 0.15972, 0, 1.09305],\n    \"88\": [0, 0.68611, 0.07778, 0, 0.94722],\n    \"89\": [0, 0.68611, 0.25555, 0, 0.67458],\n    \"90\": [0, 0.68611, 0.06979, 0, 0.77257],\n    \"97\": [0, 0.44444, 0, 0, 0.63287],\n    \"98\": [0, 0.69444, 0, 0, 0.52083],\n    \"99\": [0, 0.44444, 0, 0, 0.51342],\n    \"100\": [0, 0.69444, 0, 0, 0.60972],\n    \"101\": [0, 0.44444, 0, 0, 0.55361],\n    \"102\": [0.19444, 0.69444, 0.11042, 0, 0.56806],\n    \"103\": [0.19444, 0.44444, 0.03704, 0, 0.5449],\n    \"104\": [0, 0.69444, 0, 0, 0.66759],\n    \"105\": [0, 0.69326, 0, 0, 0.4048],\n    \"106\": [0.19444, 0.69326, 0.0622, 0, 0.47083],\n    \"107\": [0, 0.69444, 0.01852, 0, 0.6037],\n    \"108\": [0, 0.69444, 0.0088, 0, 0.34815],\n    \"109\": [0, 0.44444, 0, 0, 1.0324],\n    \"110\": [0, 0.44444, 0, 0, 0.71296],\n    \"111\": [0, 0.44444, 0, 0, 0.58472],\n    \"112\": [0.19444, 0.44444, 0, 0, 0.60092],\n    \"113\": [0.19444, 0.44444, 0.03704, 0, 0.54213],\n    \"114\": [0, 0.44444, 0.03194, 0, 0.5287],\n    \"115\": [0, 0.44444, 0, 0, 0.53125],\n    \"116\": [0, 0.63492, 0, 0, 0.41528],\n    \"117\": [0, 0.44444, 0, 0, 0.68102],\n    \"118\": [0, 0.44444, 0.03704, 0, 0.56666],\n    \"119\": [0, 0.44444, 0.02778, 0, 0.83148],\n    \"120\": [0, 0.44444, 0, 0, 0.65903],\n    \"121\": [0.19444, 0.44444, 0.03704, 0, 0.59028],\n    \"122\": [0, 0.44444, 0.04213, 0, 0.55509],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"915\": [0, 0.68611, 0.15972, 0, 0.65694],\n    \"916\": [0, 0.68611, 0, 0, 0.95833],\n    \"920\": [0, 0.68611, 0.03194, 0, 0.86722],\n    \"923\": [0, 0.68611, 0, 0, 0.80555],\n    \"926\": [0, 0.68611, 0.07458, 0, 0.84125],\n    \"928\": [0, 0.68611, 0.08229, 0, 0.98229],\n    \"931\": [0, 0.68611, 0.05451, 0, 0.88507],\n    \"933\": [0, 0.68611, 0.15972, 0, 0.67083],\n    \"934\": [0, 0.68611, 0, 0, 0.76666],\n    \"936\": [0, 0.68611, 0.11653, 0, 0.71402],\n    \"937\": [0, 0.68611, 0.04835, 0, 0.8789],\n    \"945\": [0, 0.44444, 0, 0, 0.76064],\n    \"946\": [0.19444, 0.69444, 0.03403, 0, 0.65972],\n    \"947\": [0.19444, 0.44444, 0.06389, 0, 0.59003],\n    \"948\": [0, 0.69444, 0.03819, 0, 0.52222],\n    \"949\": [0, 0.44444, 0, 0, 0.52882],\n    \"950\": [0.19444, 0.69444, 0.06215, 0, 0.50833],\n    \"951\": [0.19444, 0.44444, 0.03704, 0, 0.6],\n    \"952\": [0, 0.69444, 0.03194, 0, 0.5618],\n    \"953\": [0, 0.44444, 0, 0, 0.41204],\n    \"954\": [0, 0.44444, 0, 0, 0.66759],\n    \"955\": [0, 0.69444, 0, 0, 0.67083],\n    \"956\": [0.19444, 0.44444, 0, 0, 0.70787],\n    \"957\": [0, 0.44444, 0.06898, 0, 0.57685],\n    \"958\": [0.19444, 0.69444, 0.03021, 0, 0.50833],\n    \"959\": [0, 0.44444, 0, 0, 0.58472],\n    \"960\": [0, 0.44444, 0.03704, 0, 0.68241],\n    \"961\": [0.19444, 0.44444, 0, 0, 0.6118],\n    \"962\": [0.09722, 0.44444, 0.07917, 0, 0.42361],\n    \"963\": [0, 0.44444, 0.03704, 0, 0.68588],\n    \"964\": [0, 0.44444, 0.13472, 0, 0.52083],\n    \"965\": [0, 0.44444, 0.03704, 0, 0.63055],\n    \"966\": [0.19444, 0.44444, 0, 0, 0.74722],\n    \"967\": [0.19444, 0.44444, 0, 0, 0.71805],\n    \"968\": [0.19444, 0.69444, 0.03704, 0, 0.75833],\n    \"969\": [0, 0.44444, 0.03704, 0, 0.71782],\n    \"977\": [0, 0.69444, 0, 0, 0.69155],\n    \"981\": [0.19444, 0.69444, 0, 0, 0.7125],\n    \"982\": [0, 0.44444, 0.03194, 0, 0.975],\n    \"1009\": [0.19444, 0.44444, 0, 0, 0.6118],\n    \"1013\": [0, 0.44444, 0, 0, 0.48333],\n    \"57649\": [0, 0.44444, 0, 0, 0.39352],\n    \"57911\": [0.19444, 0.44444, 0, 0, 0.43889]\n  },\n  \"Math-Italic\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"48\": [0, 0.43056, 0, 0, 0.5],\n    \"49\": [0, 0.43056, 0, 0, 0.5],\n    \"50\": [0, 0.43056, 0, 0, 0.5],\n    \"51\": [0.19444, 0.43056, 0, 0, 0.5],\n    \"52\": [0.19444, 0.43056, 0, 0, 0.5],\n    \"53\": [0.19444, 0.43056, 0, 0, 0.5],\n    \"54\": [0, 0.64444, 0, 0, 0.5],\n    \"55\": [0.19444, 0.43056, 0, 0, 0.5],\n    \"56\": [0, 0.64444, 0, 0, 0.5],\n    \"57\": [0.19444, 0.43056, 0, 0, 0.5],\n    \"65\": [0, 0.68333, 0, 0.13889, 0.75],\n    \"66\": [0, 0.68333, 0.05017, 0.08334, 0.75851],\n    \"67\": [0, 0.68333, 0.07153, 0.08334, 0.71472],\n    \"68\": [0, 0.68333, 0.02778, 0.05556, 0.82792],\n    \"69\": [0, 0.68333, 0.05764, 0.08334, 0.7382],\n    \"70\": [0, 0.68333, 0.13889, 0.08334, 0.64306],\n    \"71\": [0, 0.68333, 0, 0.08334, 0.78625],\n    \"72\": [0, 0.68333, 0.08125, 0.05556, 0.83125],\n    \"73\": [0, 0.68333, 0.07847, 0.11111, 0.43958],\n    \"74\": [0, 0.68333, 0.09618, 0.16667, 0.55451],\n    \"75\": [0, 0.68333, 0.07153, 0.05556, 0.84931],\n    \"76\": [0, 0.68333, 0, 0.02778, 0.68056],\n    \"77\": [0, 0.68333, 0.10903, 0.08334, 0.97014],\n    \"78\": [0, 0.68333, 0.10903, 0.08334, 0.80347],\n    \"79\": [0, 0.68333, 0.02778, 0.08334, 0.76278],\n    \"80\": [0, 0.68333, 0.13889, 0.08334, 0.64201],\n    \"81\": [0.19444, 0.68333, 0, 0.08334, 0.79056],\n    \"82\": [0, 0.68333, 0.00773, 0.08334, 0.75929],\n    \"83\": [0, 0.68333, 0.05764, 0.08334, 0.6132],\n    \"84\": [0, 0.68333, 0.13889, 0.08334, 0.58438],\n    \"85\": [0, 0.68333, 0.10903, 0.02778, 0.68278],\n    \"86\": [0, 0.68333, 0.22222, 0, 0.58333],\n    \"87\": [0, 0.68333, 0.13889, 0, 0.94445],\n    \"88\": [0, 0.68333, 0.07847, 0.08334, 0.82847],\n    \"89\": [0, 0.68333, 0.22222, 0, 0.58056],\n    \"90\": [0, 0.68333, 0.07153, 0.08334, 0.68264],\n    \"97\": [0, 0.43056, 0, 0, 0.52859],\n    \"98\": [0, 0.69444, 0, 0, 0.42917],\n    \"99\": [0, 0.43056, 0, 0.05556, 0.43276],\n    \"100\": [0, 0.69444, 0, 0.16667, 0.52049],\n    \"101\": [0, 0.43056, 0, 0.05556, 0.46563],\n    \"102\": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],\n    \"103\": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],\n    \"104\": [0, 0.69444, 0, 0, 0.57616],\n    \"105\": [0, 0.65952, 0, 0, 0.34451],\n    \"106\": [0.19444, 0.65952, 0.05724, 0, 0.41181],\n    \"107\": [0, 0.69444, 0.03148, 0, 0.5206],\n    \"108\": [0, 0.69444, 0.01968, 0.08334, 0.29838],\n    \"109\": [0, 0.43056, 0, 0, 0.87801],\n    \"110\": [0, 0.43056, 0, 0, 0.60023],\n    \"111\": [0, 0.43056, 0, 0.05556, 0.48472],\n    \"112\": [0.19444, 0.43056, 0, 0.08334, 0.50313],\n    \"113\": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],\n    \"114\": [0, 0.43056, 0.02778, 0.05556, 0.45116],\n    \"115\": [0, 0.43056, 0, 0.05556, 0.46875],\n    \"116\": [0, 0.61508, 0, 0.08334, 0.36111],\n    \"117\": [0, 0.43056, 0, 0.02778, 0.57246],\n    \"118\": [0, 0.43056, 0.03588, 0.02778, 0.48472],\n    \"119\": [0, 0.43056, 0.02691, 0.08334, 0.71592],\n    \"120\": [0, 0.43056, 0, 0.02778, 0.57153],\n    \"121\": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],\n    \"122\": [0, 0.43056, 0.04398, 0.05556, 0.46505],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"915\": [0, 0.68333, 0.13889, 0.08334, 0.61528],\n    \"916\": [0, 0.68333, 0, 0.16667, 0.83334],\n    \"920\": [0, 0.68333, 0.02778, 0.08334, 0.76278],\n    \"923\": [0, 0.68333, 0, 0.16667, 0.69445],\n    \"926\": [0, 0.68333, 0.07569, 0.08334, 0.74236],\n    \"928\": [0, 0.68333, 0.08125, 0.05556, 0.83125],\n    \"931\": [0, 0.68333, 0.05764, 0.08334, 0.77986],\n    \"933\": [0, 0.68333, 0.13889, 0.05556, 0.58333],\n    \"934\": [0, 0.68333, 0, 0.08334, 0.66667],\n    \"936\": [0, 0.68333, 0.11, 0.05556, 0.61222],\n    \"937\": [0, 0.68333, 0.05017, 0.08334, 0.7724],\n    \"945\": [0, 0.43056, 0.0037, 0.02778, 0.6397],\n    \"946\": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],\n    \"947\": [0.19444, 0.43056, 0.05556, 0, 0.51773],\n    \"948\": [0, 0.69444, 0.03785, 0.05556, 0.44444],\n    \"949\": [0, 0.43056, 0, 0.08334, 0.46632],\n    \"950\": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],\n    \"951\": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],\n    \"952\": [0, 0.69444, 0.02778, 0.08334, 0.46944],\n    \"953\": [0, 0.43056, 0, 0.05556, 0.35394],\n    \"954\": [0, 0.43056, 0, 0, 0.57616],\n    \"955\": [0, 0.69444, 0, 0, 0.58334],\n    \"956\": [0.19444, 0.43056, 0, 0.02778, 0.60255],\n    \"957\": [0, 0.43056, 0.06366, 0.02778, 0.49398],\n    \"958\": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],\n    \"959\": [0, 0.43056, 0, 0.05556, 0.48472],\n    \"960\": [0, 0.43056, 0.03588, 0, 0.57003],\n    \"961\": [0.19444, 0.43056, 0, 0.08334, 0.51702],\n    \"962\": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],\n    \"963\": [0, 0.43056, 0.03588, 0, 0.57141],\n    \"964\": [0, 0.43056, 0.1132, 0.02778, 0.43715],\n    \"965\": [0, 0.43056, 0.03588, 0.02778, 0.54028],\n    \"966\": [0.19444, 0.43056, 0, 0.08334, 0.65417],\n    \"967\": [0.19444, 0.43056, 0, 0.05556, 0.62569],\n    \"968\": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],\n    \"969\": [0, 0.43056, 0.03588, 0, 0.62245],\n    \"977\": [0, 0.69444, 0, 0.08334, 0.59144],\n    \"981\": [0.19444, 0.69444, 0, 0.08334, 0.59583],\n    \"982\": [0, 0.43056, 0.02778, 0, 0.82813],\n    \"1009\": [0.19444, 0.43056, 0, 0.08334, 0.51702],\n    \"1013\": [0, 0.43056, 0, 0.05556, 0.4059],\n    \"57649\": [0, 0.43056, 0, 0.02778, 0.32246],\n    \"57911\": [0.19444, 0.43056, 0, 0.08334, 0.38403]\n  },\n  \"SansSerif-Bold\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0, 0, 0.36667],\n    \"34\": [0, 0.69444, 0, 0, 0.55834],\n    \"35\": [0.19444, 0.69444, 0, 0, 0.91667],\n    \"36\": [0.05556, 0.75, 0, 0, 0.55],\n    \"37\": [0.05556, 0.75, 0, 0, 1.02912],\n    \"38\": [0, 0.69444, 0, 0, 0.83056],\n    \"39\": [0, 0.69444, 0, 0, 0.30556],\n    \"40\": [0.25, 0.75, 0, 0, 0.42778],\n    \"41\": [0.25, 0.75, 0, 0, 0.42778],\n    \"42\": [0, 0.75, 0, 0, 0.55],\n    \"43\": [0.11667, 0.61667, 0, 0, 0.85556],\n    \"44\": [0.10556, 0.13056, 0, 0, 0.30556],\n    \"45\": [0, 0.45833, 0, 0, 0.36667],\n    \"46\": [0, 0.13056, 0, 0, 0.30556],\n    \"47\": [0.25, 0.75, 0, 0, 0.55],\n    \"48\": [0, 0.69444, 0, 0, 0.55],\n    \"49\": [0, 0.69444, 0, 0, 0.55],\n    \"50\": [0, 0.69444, 0, 0, 0.55],\n    \"51\": [0, 0.69444, 0, 0, 0.55],\n    \"52\": [0, 0.69444, 0, 0, 0.55],\n    \"53\": [0, 0.69444, 0, 0, 0.55],\n    \"54\": [0, 0.69444, 0, 0, 0.55],\n    \"55\": [0, 0.69444, 0, 0, 0.55],\n    \"56\": [0, 0.69444, 0, 0, 0.55],\n    \"57\": [0, 0.69444, 0, 0, 0.55],\n    \"58\": [0, 0.45833, 0, 0, 0.30556],\n    \"59\": [0.10556, 0.45833, 0, 0, 0.30556],\n    \"61\": [-0.09375, 0.40625, 0, 0, 0.85556],\n    \"63\": [0, 0.69444, 0, 0, 0.51945],\n    \"64\": [0, 0.69444, 0, 0, 0.73334],\n    \"65\": [0, 0.69444, 0, 0, 0.73334],\n    \"66\": [0, 0.69444, 0, 0, 0.73334],\n    \"67\": [0, 0.69444, 0, 0, 0.70278],\n    \"68\": [0, 0.69444, 0, 0, 0.79445],\n    \"69\": [0, 0.69444, 0, 0, 0.64167],\n    \"70\": [0, 0.69444, 0, 0, 0.61111],\n    \"71\": [0, 0.69444, 0, 0, 0.73334],\n    \"72\": [0, 0.69444, 0, 0, 0.79445],\n    \"73\": [0, 0.69444, 0, 0, 0.33056],\n    \"74\": [0, 0.69444, 0, 0, 0.51945],\n    \"75\": [0, 0.69444, 0, 0, 0.76389],\n    \"76\": [0, 0.69444, 0, 0, 0.58056],\n    \"77\": [0, 0.69444, 0, 0, 0.97778],\n    \"78\": [0, 0.69444, 0, 0, 0.79445],\n    \"79\": [0, 0.69444, 0, 0, 0.79445],\n    \"80\": [0, 0.69444, 0, 0, 0.70278],\n    \"81\": [0.10556, 0.69444, 0, 0, 0.79445],\n    \"82\": [0, 0.69444, 0, 0, 0.70278],\n    \"83\": [0, 0.69444, 0, 0, 0.61111],\n    \"84\": [0, 0.69444, 0, 0, 0.73334],\n    \"85\": [0, 0.69444, 0, 0, 0.76389],\n    \"86\": [0, 0.69444, 0.01528, 0, 0.73334],\n    \"87\": [0, 0.69444, 0.01528, 0, 1.03889],\n    \"88\": [0, 0.69444, 0, 0, 0.73334],\n    \"89\": [0, 0.69444, 0.0275, 0, 0.73334],\n    \"90\": [0, 0.69444, 0, 0, 0.67223],\n    \"91\": [0.25, 0.75, 0, 0, 0.34306],\n    \"93\": [0.25, 0.75, 0, 0, 0.34306],\n    \"94\": [0, 0.69444, 0, 0, 0.55],\n    \"95\": [0.35, 0.10833, 0.03056, 0, 0.55],\n    \"97\": [0, 0.45833, 0, 0, 0.525],\n    \"98\": [0, 0.69444, 0, 0, 0.56111],\n    \"99\": [0, 0.45833, 0, 0, 0.48889],\n    \"100\": [0, 0.69444, 0, 0, 0.56111],\n    \"101\": [0, 0.45833, 0, 0, 0.51111],\n    \"102\": [0, 0.69444, 0.07639, 0, 0.33611],\n    \"103\": [0.19444, 0.45833, 0.01528, 0, 0.55],\n    \"104\": [0, 0.69444, 0, 0, 0.56111],\n    \"105\": [0, 0.69444, 0, 0, 0.25556],\n    \"106\": [0.19444, 0.69444, 0, 0, 0.28611],\n    \"107\": [0, 0.69444, 0, 0, 0.53056],\n    \"108\": [0, 0.69444, 0, 0, 0.25556],\n    \"109\": [0, 0.45833, 0, 0, 0.86667],\n    \"110\": [0, 0.45833, 0, 0, 0.56111],\n    \"111\": [0, 0.45833, 0, 0, 0.55],\n    \"112\": [0.19444, 0.45833, 0, 0, 0.56111],\n    \"113\": [0.19444, 0.45833, 0, 0, 0.56111],\n    \"114\": [0, 0.45833, 0.01528, 0, 0.37222],\n    \"115\": [0, 0.45833, 0, 0, 0.42167],\n    \"116\": [0, 0.58929, 0, 0, 0.40417],\n    \"117\": [0, 0.45833, 0, 0, 0.56111],\n    \"118\": [0, 0.45833, 0.01528, 0, 0.5],\n    \"119\": [0, 0.45833, 0.01528, 0, 0.74445],\n    \"120\": [0, 0.45833, 0, 0, 0.5],\n    \"121\": [0.19444, 0.45833, 0.01528, 0, 0.5],\n    \"122\": [0, 0.45833, 0, 0, 0.47639],\n    \"126\": [0.35, 0.34444, 0, 0, 0.55],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"168\": [0, 0.69444, 0, 0, 0.55],\n    \"176\": [0, 0.69444, 0, 0, 0.73334],\n    \"180\": [0, 0.69444, 0, 0, 0.55],\n    \"184\": [0.17014, 0, 0, 0, 0.48889],\n    \"305\": [0, 0.45833, 0, 0, 0.25556],\n    \"567\": [0.19444, 0.45833, 0, 0, 0.28611],\n    \"710\": [0, 0.69444, 0, 0, 0.55],\n    \"711\": [0, 0.63542, 0, 0, 0.55],\n    \"713\": [0, 0.63778, 0, 0, 0.55],\n    \"728\": [0, 0.69444, 0, 0, 0.55],\n    \"729\": [0, 0.69444, 0, 0, 0.30556],\n    \"730\": [0, 0.69444, 0, 0, 0.73334],\n    \"732\": [0, 0.69444, 0, 0, 0.55],\n    \"733\": [0, 0.69444, 0, 0, 0.55],\n    \"915\": [0, 0.69444, 0, 0, 0.58056],\n    \"916\": [0, 0.69444, 0, 0, 0.91667],\n    \"920\": [0, 0.69444, 0, 0, 0.85556],\n    \"923\": [0, 0.69444, 0, 0, 0.67223],\n    \"926\": [0, 0.69444, 0, 0, 0.73334],\n    \"928\": [0, 0.69444, 0, 0, 0.79445],\n    \"931\": [0, 0.69444, 0, 0, 0.79445],\n    \"933\": [0, 0.69444, 0, 0, 0.85556],\n    \"934\": [0, 0.69444, 0, 0, 0.79445],\n    \"936\": [0, 0.69444, 0, 0, 0.85556],\n    \"937\": [0, 0.69444, 0, 0, 0.79445],\n    \"8211\": [0, 0.45833, 0.03056, 0, 0.55],\n    \"8212\": [0, 0.45833, 0.03056, 0, 1.10001],\n    \"8216\": [0, 0.69444, 0, 0, 0.30556],\n    \"8217\": [0, 0.69444, 0, 0, 0.30556],\n    \"8220\": [0, 0.69444, 0, 0, 0.55834],\n    \"8221\": [0, 0.69444, 0, 0, 0.55834]\n  },\n  \"SansSerif-Italic\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0.05733, 0, 0.31945],\n    \"34\": [0, 0.69444, 0.00316, 0, 0.5],\n    \"35\": [0.19444, 0.69444, 0.05087, 0, 0.83334],\n    \"36\": [0.05556, 0.75, 0.11156, 0, 0.5],\n    \"37\": [0.05556, 0.75, 0.03126, 0, 0.83334],\n    \"38\": [0, 0.69444, 0.03058, 0, 0.75834],\n    \"39\": [0, 0.69444, 0.07816, 0, 0.27778],\n    \"40\": [0.25, 0.75, 0.13164, 0, 0.38889],\n    \"41\": [0.25, 0.75, 0.02536, 0, 0.38889],\n    \"42\": [0, 0.75, 0.11775, 0, 0.5],\n    \"43\": [0.08333, 0.58333, 0.02536, 0, 0.77778],\n    \"44\": [0.125, 0.08333, 0, 0, 0.27778],\n    \"45\": [0, 0.44444, 0.01946, 0, 0.33333],\n    \"46\": [0, 0.08333, 0, 0, 0.27778],\n    \"47\": [0.25, 0.75, 0.13164, 0, 0.5],\n    \"48\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"49\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"50\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"51\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"52\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"53\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"54\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"55\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"56\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"57\": [0, 0.65556, 0.11156, 0, 0.5],\n    \"58\": [0, 0.44444, 0.02502, 0, 0.27778],\n    \"59\": [0.125, 0.44444, 0.02502, 0, 0.27778],\n    \"61\": [-0.13, 0.37, 0.05087, 0, 0.77778],\n    \"63\": [0, 0.69444, 0.11809, 0, 0.47222],\n    \"64\": [0, 0.69444, 0.07555, 0, 0.66667],\n    \"65\": [0, 0.69444, 0, 0, 0.66667],\n    \"66\": [0, 0.69444, 0.08293, 0, 0.66667],\n    \"67\": [0, 0.69444, 0.11983, 0, 0.63889],\n    \"68\": [0, 0.69444, 0.07555, 0, 0.72223],\n    \"69\": [0, 0.69444, 0.11983, 0, 0.59722],\n    \"70\": [0, 0.69444, 0.13372, 0, 0.56945],\n    \"71\": [0, 0.69444, 0.11983, 0, 0.66667],\n    \"72\": [0, 0.69444, 0.08094, 0, 0.70834],\n    \"73\": [0, 0.69444, 0.13372, 0, 0.27778],\n    \"74\": [0, 0.69444, 0.08094, 0, 0.47222],\n    \"75\": [0, 0.69444, 0.11983, 0, 0.69445],\n    \"76\": [0, 0.69444, 0, 0, 0.54167],\n    \"77\": [0, 0.69444, 0.08094, 0, 0.875],\n    \"78\": [0, 0.69444, 0.08094, 0, 0.70834],\n    \"79\": [0, 0.69444, 0.07555, 0, 0.73611],\n    \"80\": [0, 0.69444, 0.08293, 0, 0.63889],\n    \"81\": [0.125, 0.69444, 0.07555, 0, 0.73611],\n    \"82\": [0, 0.69444, 0.08293, 0, 0.64584],\n    \"83\": [0, 0.69444, 0.09205, 0, 0.55556],\n    \"84\": [0, 0.69444, 0.13372, 0, 0.68056],\n    \"85\": [0, 0.69444, 0.08094, 0, 0.6875],\n    \"86\": [0, 0.69444, 0.1615, 0, 0.66667],\n    \"87\": [0, 0.69444, 0.1615, 0, 0.94445],\n    \"88\": [0, 0.69444, 0.13372, 0, 0.66667],\n    \"89\": [0, 0.69444, 0.17261, 0, 0.66667],\n    \"90\": [0, 0.69444, 0.11983, 0, 0.61111],\n    \"91\": [0.25, 0.75, 0.15942, 0, 0.28889],\n    \"93\": [0.25, 0.75, 0.08719, 0, 0.28889],\n    \"94\": [0, 0.69444, 0.0799, 0, 0.5],\n    \"95\": [0.35, 0.09444, 0.08616, 0, 0.5],\n    \"97\": [0, 0.44444, 0.00981, 0, 0.48056],\n    \"98\": [0, 0.69444, 0.03057, 0, 0.51667],\n    \"99\": [0, 0.44444, 0.08336, 0, 0.44445],\n    \"100\": [0, 0.69444, 0.09483, 0, 0.51667],\n    \"101\": [0, 0.44444, 0.06778, 0, 0.44445],\n    \"102\": [0, 0.69444, 0.21705, 0, 0.30556],\n    \"103\": [0.19444, 0.44444, 0.10836, 0, 0.5],\n    \"104\": [0, 0.69444, 0.01778, 0, 0.51667],\n    \"105\": [0, 0.67937, 0.09718, 0, 0.23889],\n    \"106\": [0.19444, 0.67937, 0.09162, 0, 0.26667],\n    \"107\": [0, 0.69444, 0.08336, 0, 0.48889],\n    \"108\": [0, 0.69444, 0.09483, 0, 0.23889],\n    \"109\": [0, 0.44444, 0.01778, 0, 0.79445],\n    \"110\": [0, 0.44444, 0.01778, 0, 0.51667],\n    \"111\": [0, 0.44444, 0.06613, 0, 0.5],\n    \"112\": [0.19444, 0.44444, 0.0389, 0, 0.51667],\n    \"113\": [0.19444, 0.44444, 0.04169, 0, 0.51667],\n    \"114\": [0, 0.44444, 0.10836, 0, 0.34167],\n    \"115\": [0, 0.44444, 0.0778, 0, 0.38333],\n    \"116\": [0, 0.57143, 0.07225, 0, 0.36111],\n    \"117\": [0, 0.44444, 0.04169, 0, 0.51667],\n    \"118\": [0, 0.44444, 0.10836, 0, 0.46111],\n    \"119\": [0, 0.44444, 0.10836, 0, 0.68334],\n    \"120\": [0, 0.44444, 0.09169, 0, 0.46111],\n    \"121\": [0.19444, 0.44444, 0.10836, 0, 0.46111],\n    \"122\": [0, 0.44444, 0.08752, 0, 0.43472],\n    \"126\": [0.35, 0.32659, 0.08826, 0, 0.5],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"168\": [0, 0.67937, 0.06385, 0, 0.5],\n    \"176\": [0, 0.69444, 0, 0, 0.73752],\n    \"184\": [0.17014, 0, 0, 0, 0.44445],\n    \"305\": [0, 0.44444, 0.04169, 0, 0.23889],\n    \"567\": [0.19444, 0.44444, 0.04169, 0, 0.26667],\n    \"710\": [0, 0.69444, 0.0799, 0, 0.5],\n    \"711\": [0, 0.63194, 0.08432, 0, 0.5],\n    \"713\": [0, 0.60889, 0.08776, 0, 0.5],\n    \"714\": [0, 0.69444, 0.09205, 0, 0.5],\n    \"715\": [0, 0.69444, 0, 0, 0.5],\n    \"728\": [0, 0.69444, 0.09483, 0, 0.5],\n    \"729\": [0, 0.67937, 0.07774, 0, 0.27778],\n    \"730\": [0, 0.69444, 0, 0, 0.73752],\n    \"732\": [0, 0.67659, 0.08826, 0, 0.5],\n    \"733\": [0, 0.69444, 0.09205, 0, 0.5],\n    \"915\": [0, 0.69444, 0.13372, 0, 0.54167],\n    \"916\": [0, 0.69444, 0, 0, 0.83334],\n    \"920\": [0, 0.69444, 0.07555, 0, 0.77778],\n    \"923\": [0, 0.69444, 0, 0, 0.61111],\n    \"926\": [0, 0.69444, 0.12816, 0, 0.66667],\n    \"928\": [0, 0.69444, 0.08094, 0, 0.70834],\n    \"931\": [0, 0.69444, 0.11983, 0, 0.72222],\n    \"933\": [0, 0.69444, 0.09031, 0, 0.77778],\n    \"934\": [0, 0.69444, 0.04603, 0, 0.72222],\n    \"936\": [0, 0.69444, 0.09031, 0, 0.77778],\n    \"937\": [0, 0.69444, 0.08293, 0, 0.72222],\n    \"8211\": [0, 0.44444, 0.08616, 0, 0.5],\n    \"8212\": [0, 0.44444, 0.08616, 0, 1.0],\n    \"8216\": [0, 0.69444, 0.07816, 0, 0.27778],\n    \"8217\": [0, 0.69444, 0.07816, 0, 0.27778],\n    \"8220\": [0, 0.69444, 0.14205, 0, 0.5],\n    \"8221\": [0, 0.69444, 0.00316, 0, 0.5]\n  },\n  \"SansSerif-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"33\": [0, 0.69444, 0, 0, 0.31945],\n    \"34\": [0, 0.69444, 0, 0, 0.5],\n    \"35\": [0.19444, 0.69444, 0, 0, 0.83334],\n    \"36\": [0.05556, 0.75, 0, 0, 0.5],\n    \"37\": [0.05556, 0.75, 0, 0, 0.83334],\n    \"38\": [0, 0.69444, 0, 0, 0.75834],\n    \"39\": [0, 0.69444, 0, 0, 0.27778],\n    \"40\": [0.25, 0.75, 0, 0, 0.38889],\n    \"41\": [0.25, 0.75, 0, 0, 0.38889],\n    \"42\": [0, 0.75, 0, 0, 0.5],\n    \"43\": [0.08333, 0.58333, 0, 0, 0.77778],\n    \"44\": [0.125, 0.08333, 0, 0, 0.27778],\n    \"45\": [0, 0.44444, 0, 0, 0.33333],\n    \"46\": [0, 0.08333, 0, 0, 0.27778],\n    \"47\": [0.25, 0.75, 0, 0, 0.5],\n    \"48\": [0, 0.65556, 0, 0, 0.5],\n    \"49\": [0, 0.65556, 0, 0, 0.5],\n    \"50\": [0, 0.65556, 0, 0, 0.5],\n    \"51\": [0, 0.65556, 0, 0, 0.5],\n    \"52\": [0, 0.65556, 0, 0, 0.5],\n    \"53\": [0, 0.65556, 0, 0, 0.5],\n    \"54\": [0, 0.65556, 0, 0, 0.5],\n    \"55\": [0, 0.65556, 0, 0, 0.5],\n    \"56\": [0, 0.65556, 0, 0, 0.5],\n    \"57\": [0, 0.65556, 0, 0, 0.5],\n    \"58\": [0, 0.44444, 0, 0, 0.27778],\n    \"59\": [0.125, 0.44444, 0, 0, 0.27778],\n    \"61\": [-0.13, 0.37, 0, 0, 0.77778],\n    \"63\": [0, 0.69444, 0, 0, 0.47222],\n    \"64\": [0, 0.69444, 0, 0, 0.66667],\n    \"65\": [0, 0.69444, 0, 0, 0.66667],\n    \"66\": [0, 0.69444, 0, 0, 0.66667],\n    \"67\": [0, 0.69444, 0, 0, 0.63889],\n    \"68\": [0, 0.69444, 0, 0, 0.72223],\n    \"69\": [0, 0.69444, 0, 0, 0.59722],\n    \"70\": [0, 0.69444, 0, 0, 0.56945],\n    \"71\": [0, 0.69444, 0, 0, 0.66667],\n    \"72\": [0, 0.69444, 0, 0, 0.70834],\n    \"73\": [0, 0.69444, 0, 0, 0.27778],\n    \"74\": [0, 0.69444, 0, 0, 0.47222],\n    \"75\": [0, 0.69444, 0, 0, 0.69445],\n    \"76\": [0, 0.69444, 0, 0, 0.54167],\n    \"77\": [0, 0.69444, 0, 0, 0.875],\n    \"78\": [0, 0.69444, 0, 0, 0.70834],\n    \"79\": [0, 0.69444, 0, 0, 0.73611],\n    \"80\": [0, 0.69444, 0, 0, 0.63889],\n    \"81\": [0.125, 0.69444, 0, 0, 0.73611],\n    \"82\": [0, 0.69444, 0, 0, 0.64584],\n    \"83\": [0, 0.69444, 0, 0, 0.55556],\n    \"84\": [0, 0.69444, 0, 0, 0.68056],\n    \"85\": [0, 0.69444, 0, 0, 0.6875],\n    \"86\": [0, 0.69444, 0.01389, 0, 0.66667],\n    \"87\": [0, 0.69444, 0.01389, 0, 0.94445],\n    \"88\": [0, 0.69444, 0, 0, 0.66667],\n    \"89\": [0, 0.69444, 0.025, 0, 0.66667],\n    \"90\": [0, 0.69444, 0, 0, 0.61111],\n    \"91\": [0.25, 0.75, 0, 0, 0.28889],\n    \"93\": [0.25, 0.75, 0, 0, 0.28889],\n    \"94\": [0, 0.69444, 0, 0, 0.5],\n    \"95\": [0.35, 0.09444, 0.02778, 0, 0.5],\n    \"97\": [0, 0.44444, 0, 0, 0.48056],\n    \"98\": [0, 0.69444, 0, 0, 0.51667],\n    \"99\": [0, 0.44444, 0, 0, 0.44445],\n    \"100\": [0, 0.69444, 0, 0, 0.51667],\n    \"101\": [0, 0.44444, 0, 0, 0.44445],\n    \"102\": [0, 0.69444, 0.06944, 0, 0.30556],\n    \"103\": [0.19444, 0.44444, 0.01389, 0, 0.5],\n    \"104\": [0, 0.69444, 0, 0, 0.51667],\n    \"105\": [0, 0.67937, 0, 0, 0.23889],\n    \"106\": [0.19444, 0.67937, 0, 0, 0.26667],\n    \"107\": [0, 0.69444, 0, 0, 0.48889],\n    \"108\": [0, 0.69444, 0, 0, 0.23889],\n    \"109\": [0, 0.44444, 0, 0, 0.79445],\n    \"110\": [0, 0.44444, 0, 0, 0.51667],\n    \"111\": [0, 0.44444, 0, 0, 0.5],\n    \"112\": [0.19444, 0.44444, 0, 0, 0.51667],\n    \"113\": [0.19444, 0.44444, 0, 0, 0.51667],\n    \"114\": [0, 0.44444, 0.01389, 0, 0.34167],\n    \"115\": [0, 0.44444, 0, 0, 0.38333],\n    \"116\": [0, 0.57143, 0, 0, 0.36111],\n    \"117\": [0, 0.44444, 0, 0, 0.51667],\n    \"118\": [0, 0.44444, 0.01389, 0, 0.46111],\n    \"119\": [0, 0.44444, 0.01389, 0, 0.68334],\n    \"120\": [0, 0.44444, 0, 0, 0.46111],\n    \"121\": [0.19444, 0.44444, 0.01389, 0, 0.46111],\n    \"122\": [0, 0.44444, 0, 0, 0.43472],\n    \"126\": [0.35, 0.32659, 0, 0, 0.5],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"168\": [0, 0.67937, 0, 0, 0.5],\n    \"176\": [0, 0.69444, 0, 0, 0.66667],\n    \"184\": [0.17014, 0, 0, 0, 0.44445],\n    \"305\": [0, 0.44444, 0, 0, 0.23889],\n    \"567\": [0.19444, 0.44444, 0, 0, 0.26667],\n    \"710\": [0, 0.69444, 0, 0, 0.5],\n    \"711\": [0, 0.63194, 0, 0, 0.5],\n    \"713\": [0, 0.60889, 0, 0, 0.5],\n    \"714\": [0, 0.69444, 0, 0, 0.5],\n    \"715\": [0, 0.69444, 0, 0, 0.5],\n    \"728\": [0, 0.69444, 0, 0, 0.5],\n    \"729\": [0, 0.67937, 0, 0, 0.27778],\n    \"730\": [0, 0.69444, 0, 0, 0.66667],\n    \"732\": [0, 0.67659, 0, 0, 0.5],\n    \"733\": [0, 0.69444, 0, 0, 0.5],\n    \"915\": [0, 0.69444, 0, 0, 0.54167],\n    \"916\": [0, 0.69444, 0, 0, 0.83334],\n    \"920\": [0, 0.69444, 0, 0, 0.77778],\n    \"923\": [0, 0.69444, 0, 0, 0.61111],\n    \"926\": [0, 0.69444, 0, 0, 0.66667],\n    \"928\": [0, 0.69444, 0, 0, 0.70834],\n    \"931\": [0, 0.69444, 0, 0, 0.72222],\n    \"933\": [0, 0.69444, 0, 0, 0.77778],\n    \"934\": [0, 0.69444, 0, 0, 0.72222],\n    \"936\": [0, 0.69444, 0, 0, 0.77778],\n    \"937\": [0, 0.69444, 0, 0, 0.72222],\n    \"8211\": [0, 0.44444, 0.02778, 0, 0.5],\n    \"8212\": [0, 0.44444, 0.02778, 0, 1.0],\n    \"8216\": [0, 0.69444, 0, 0, 0.27778],\n    \"8217\": [0, 0.69444, 0, 0, 0.27778],\n    \"8220\": [0, 0.69444, 0, 0, 0.5],\n    \"8221\": [0, 0.69444, 0, 0, 0.5]\n  },\n  \"Script-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"65\": [0, 0.7, 0.22925, 0, 0.80253],\n    \"66\": [0, 0.7, 0.04087, 0, 0.90757],\n    \"67\": [0, 0.7, 0.1689, 0, 0.66619],\n    \"68\": [0, 0.7, 0.09371, 0, 0.77443],\n    \"69\": [0, 0.7, 0.18583, 0, 0.56162],\n    \"70\": [0, 0.7, 0.13634, 0, 0.89544],\n    \"71\": [0, 0.7, 0.17322, 0, 0.60961],\n    \"72\": [0, 0.7, 0.29694, 0, 0.96919],\n    \"73\": [0, 0.7, 0.19189, 0, 0.80907],\n    \"74\": [0.27778, 0.7, 0.19189, 0, 1.05159],\n    \"75\": [0, 0.7, 0.31259, 0, 0.91364],\n    \"76\": [0, 0.7, 0.19189, 0, 0.87373],\n    \"77\": [0, 0.7, 0.15981, 0, 1.08031],\n    \"78\": [0, 0.7, 0.3525, 0, 0.9015],\n    \"79\": [0, 0.7, 0.08078, 0, 0.73787],\n    \"80\": [0, 0.7, 0.08078, 0, 1.01262],\n    \"81\": [0, 0.7, 0.03305, 0, 0.88282],\n    \"82\": [0, 0.7, 0.06259, 0, 0.85],\n    \"83\": [0, 0.7, 0.19189, 0, 0.86767],\n    \"84\": [0, 0.7, 0.29087, 0, 0.74697],\n    \"85\": [0, 0.7, 0.25815, 0, 0.79996],\n    \"86\": [0, 0.7, 0.27523, 0, 0.62204],\n    \"87\": [0, 0.7, 0.27523, 0, 0.80532],\n    \"88\": [0, 0.7, 0.26006, 0, 0.94445],\n    \"89\": [0, 0.7, 0.2939, 0, 0.70961],\n    \"90\": [0, 0.7, 0.24037, 0, 0.8212],\n    \"160\": [0, 0, 0, 0, 0.25]\n  },\n  \"Size1-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"40\": [0.35001, 0.85, 0, 0, 0.45834],\n    \"41\": [0.35001, 0.85, 0, 0, 0.45834],\n    \"47\": [0.35001, 0.85, 0, 0, 0.57778],\n    \"91\": [0.35001, 0.85, 0, 0, 0.41667],\n    \"92\": [0.35001, 0.85, 0, 0, 0.57778],\n    \"93\": [0.35001, 0.85, 0, 0, 0.41667],\n    \"123\": [0.35001, 0.85, 0, 0, 0.58334],\n    \"125\": [0.35001, 0.85, 0, 0, 0.58334],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"710\": [0, 0.72222, 0, 0, 0.55556],\n    \"732\": [0, 0.72222, 0, 0, 0.55556],\n    \"770\": [0, 0.72222, 0, 0, 0.55556],\n    \"771\": [0, 0.72222, 0, 0, 0.55556],\n    \"8214\": [-0.00099, 0.601, 0, 0, 0.77778],\n    \"8593\": [1e-05, 0.6, 0, 0, 0.66667],\n    \"8595\": [1e-05, 0.6, 0, 0, 0.66667],\n    \"8657\": [1e-05, 0.6, 0, 0, 0.77778],\n    \"8659\": [1e-05, 0.6, 0, 0, 0.77778],\n    \"8719\": [0.25001, 0.75, 0, 0, 0.94445],\n    \"8720\": [0.25001, 0.75, 0, 0, 0.94445],\n    \"8721\": [0.25001, 0.75, 0, 0, 1.05556],\n    \"8730\": [0.35001, 0.85, 0, 0, 1.0],\n    \"8739\": [-0.00599, 0.606, 0, 0, 0.33333],\n    \"8741\": [-0.00599, 0.606, 0, 0, 0.55556],\n    \"8747\": [0.30612, 0.805, 0.19445, 0, 0.47222],\n    \"8748\": [0.306, 0.805, 0.19445, 0, 0.47222],\n    \"8749\": [0.306, 0.805, 0.19445, 0, 0.47222],\n    \"8750\": [0.30612, 0.805, 0.19445, 0, 0.47222],\n    \"8896\": [0.25001, 0.75, 0, 0, 0.83334],\n    \"8897\": [0.25001, 0.75, 0, 0, 0.83334],\n    \"8898\": [0.25001, 0.75, 0, 0, 0.83334],\n    \"8899\": [0.25001, 0.75, 0, 0, 0.83334],\n    \"8968\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"8969\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"8970\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"8971\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"9168\": [-0.00099, 0.601, 0, 0, 0.66667],\n    \"10216\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"10217\": [0.35001, 0.85, 0, 0, 0.47222],\n    \"10752\": [0.25001, 0.75, 0, 0, 1.11111],\n    \"10753\": [0.25001, 0.75, 0, 0, 1.11111],\n    \"10754\": [0.25001, 0.75, 0, 0, 1.11111],\n    \"10756\": [0.25001, 0.75, 0, 0, 0.83334],\n    \"10758\": [0.25001, 0.75, 0, 0, 0.83334]\n  },\n  \"Size2-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"40\": [0.65002, 1.15, 0, 0, 0.59722],\n    \"41\": [0.65002, 1.15, 0, 0, 0.59722],\n    \"47\": [0.65002, 1.15, 0, 0, 0.81111],\n    \"91\": [0.65002, 1.15, 0, 0, 0.47222],\n    \"92\": [0.65002, 1.15, 0, 0, 0.81111],\n    \"93\": [0.65002, 1.15, 0, 0, 0.47222],\n    \"123\": [0.65002, 1.15, 0, 0, 0.66667],\n    \"125\": [0.65002, 1.15, 0, 0, 0.66667],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"710\": [0, 0.75, 0, 0, 1.0],\n    \"732\": [0, 0.75, 0, 0, 1.0],\n    \"770\": [0, 0.75, 0, 0, 1.0],\n    \"771\": [0, 0.75, 0, 0, 1.0],\n    \"8719\": [0.55001, 1.05, 0, 0, 1.27778],\n    \"8720\": [0.55001, 1.05, 0, 0, 1.27778],\n    \"8721\": [0.55001, 1.05, 0, 0, 1.44445],\n    \"8730\": [0.65002, 1.15, 0, 0, 1.0],\n    \"8747\": [0.86225, 1.36, 0.44445, 0, 0.55556],\n    \"8748\": [0.862, 1.36, 0.44445, 0, 0.55556],\n    \"8749\": [0.862, 1.36, 0.44445, 0, 0.55556],\n    \"8750\": [0.86225, 1.36, 0.44445, 0, 0.55556],\n    \"8896\": [0.55001, 1.05, 0, 0, 1.11111],\n    \"8897\": [0.55001, 1.05, 0, 0, 1.11111],\n    \"8898\": [0.55001, 1.05, 0, 0, 1.11111],\n    \"8899\": [0.55001, 1.05, 0, 0, 1.11111],\n    \"8968\": [0.65002, 1.15, 0, 0, 0.52778],\n    \"8969\": [0.65002, 1.15, 0, 0, 0.52778],\n    \"8970\": [0.65002, 1.15, 0, 0, 0.52778],\n    \"8971\": [0.65002, 1.15, 0, 0, 0.52778],\n    \"10216\": [0.65002, 1.15, 0, 0, 0.61111],\n    \"10217\": [0.65002, 1.15, 0, 0, 0.61111],\n    \"10752\": [0.55001, 1.05, 0, 0, 1.51112],\n    \"10753\": [0.55001, 1.05, 0, 0, 1.51112],\n    \"10754\": [0.55001, 1.05, 0, 0, 1.51112],\n    \"10756\": [0.55001, 1.05, 0, 0, 1.11111],\n    \"10758\": [0.55001, 1.05, 0, 0, 1.11111]\n  },\n  \"Size3-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"40\": [0.95003, 1.45, 0, 0, 0.73611],\n    \"41\": [0.95003, 1.45, 0, 0, 0.73611],\n    \"47\": [0.95003, 1.45, 0, 0, 1.04445],\n    \"91\": [0.95003, 1.45, 0, 0, 0.52778],\n    \"92\": [0.95003, 1.45, 0, 0, 1.04445],\n    \"93\": [0.95003, 1.45, 0, 0, 0.52778],\n    \"123\": [0.95003, 1.45, 0, 0, 0.75],\n    \"125\": [0.95003, 1.45, 0, 0, 0.75],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"710\": [0, 0.75, 0, 0, 1.44445],\n    \"732\": [0, 0.75, 0, 0, 1.44445],\n    \"770\": [0, 0.75, 0, 0, 1.44445],\n    \"771\": [0, 0.75, 0, 0, 1.44445],\n    \"8730\": [0.95003, 1.45, 0, 0, 1.0],\n    \"8968\": [0.95003, 1.45, 0, 0, 0.58334],\n    \"8969\": [0.95003, 1.45, 0, 0, 0.58334],\n    \"8970\": [0.95003, 1.45, 0, 0, 0.58334],\n    \"8971\": [0.95003, 1.45, 0, 0, 0.58334],\n    \"10216\": [0.95003, 1.45, 0, 0, 0.75],\n    \"10217\": [0.95003, 1.45, 0, 0, 0.75]\n  },\n  \"Size4-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.25],\n    \"40\": [1.25003, 1.75, 0, 0, 0.79167],\n    \"41\": [1.25003, 1.75, 0, 0, 0.79167],\n    \"47\": [1.25003, 1.75, 0, 0, 1.27778],\n    \"91\": [1.25003, 1.75, 0, 0, 0.58334],\n    \"92\": [1.25003, 1.75, 0, 0, 1.27778],\n    \"93\": [1.25003, 1.75, 0, 0, 0.58334],\n    \"123\": [1.25003, 1.75, 0, 0, 0.80556],\n    \"125\": [1.25003, 1.75, 0, 0, 0.80556],\n    \"160\": [0, 0, 0, 0, 0.25],\n    \"710\": [0, 0.825, 0, 0, 1.8889],\n    \"732\": [0, 0.825, 0, 0, 1.8889],\n    \"770\": [0, 0.825, 0, 0, 1.8889],\n    \"771\": [0, 0.825, 0, 0, 1.8889],\n    \"8730\": [1.25003, 1.75, 0, 0, 1.0],\n    \"8968\": [1.25003, 1.75, 0, 0, 0.63889],\n    \"8969\": [1.25003, 1.75, 0, 0, 0.63889],\n    \"8970\": [1.25003, 1.75, 0, 0, 0.63889],\n    \"8971\": [1.25003, 1.75, 0, 0, 0.63889],\n    \"9115\": [0.64502, 1.155, 0, 0, 0.875],\n    \"9116\": [1e-05, 0.6, 0, 0, 0.875],\n    \"9117\": [0.64502, 1.155, 0, 0, 0.875],\n    \"9118\": [0.64502, 1.155, 0, 0, 0.875],\n    \"9119\": [1e-05, 0.6, 0, 0, 0.875],\n    \"9120\": [0.64502, 1.155, 0, 0, 0.875],\n    \"9121\": [0.64502, 1.155, 0, 0, 0.66667],\n    \"9122\": [-0.00099, 0.601, 0, 0, 0.66667],\n    \"9123\": [0.64502, 1.155, 0, 0, 0.66667],\n    \"9124\": [0.64502, 1.155, 0, 0, 0.66667],\n    \"9125\": [-0.00099, 0.601, 0, 0, 0.66667],\n    \"9126\": [0.64502, 1.155, 0, 0, 0.66667],\n    \"9127\": [1e-05, 0.9, 0, 0, 0.88889],\n    \"9128\": [0.65002, 1.15, 0, 0, 0.88889],\n    \"9129\": [0.90001, 0, 0, 0, 0.88889],\n    \"9130\": [0, 0.3, 0, 0, 0.88889],\n    \"9131\": [1e-05, 0.9, 0, 0, 0.88889],\n    \"9132\": [0.65002, 1.15, 0, 0, 0.88889],\n    \"9133\": [0.90001, 0, 0, 0, 0.88889],\n    \"9143\": [0.88502, 0.915, 0, 0, 1.05556],\n    \"10216\": [1.25003, 1.75, 0, 0, 0.80556],\n    \"10217\": [1.25003, 1.75, 0, 0, 0.80556],\n    \"57344\": [-0.00499, 0.605, 0, 0, 1.05556],\n    \"57345\": [-0.00499, 0.605, 0, 0, 1.05556],\n    \"57680\": [0, 0.12, 0, 0, 0.45],\n    \"57681\": [0, 0.12, 0, 0, 0.45],\n    \"57682\": [0, 0.12, 0, 0, 0.45],\n    \"57683\": [0, 0.12, 0, 0, 0.45]\n  },\n  \"Typewriter-Regular\": {\n    \"32\": [0, 0, 0, 0, 0.525],\n    \"33\": [0, 0.61111, 0, 0, 0.525],\n    \"34\": [0, 0.61111, 0, 0, 0.525],\n    \"35\": [0, 0.61111, 0, 0, 0.525],\n    \"36\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"37\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"38\": [0, 0.61111, 0, 0, 0.525],\n    \"39\": [0, 0.61111, 0, 0, 0.525],\n    \"40\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"41\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"42\": [0, 0.52083, 0, 0, 0.525],\n    \"43\": [-0.08056, 0.53055, 0, 0, 0.525],\n    \"44\": [0.13889, 0.125, 0, 0, 0.525],\n    \"45\": [-0.08056, 0.53055, 0, 0, 0.525],\n    \"46\": [0, 0.125, 0, 0, 0.525],\n    \"47\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"48\": [0, 0.61111, 0, 0, 0.525],\n    \"49\": [0, 0.61111, 0, 0, 0.525],\n    \"50\": [0, 0.61111, 0, 0, 0.525],\n    \"51\": [0, 0.61111, 0, 0, 0.525],\n    \"52\": [0, 0.61111, 0, 0, 0.525],\n    \"53\": [0, 0.61111, 0, 0, 0.525],\n    \"54\": [0, 0.61111, 0, 0, 0.525],\n    \"55\": [0, 0.61111, 0, 0, 0.525],\n    \"56\": [0, 0.61111, 0, 0, 0.525],\n    \"57\": [0, 0.61111, 0, 0, 0.525],\n    \"58\": [0, 0.43056, 0, 0, 0.525],\n    \"59\": [0.13889, 0.43056, 0, 0, 0.525],\n    \"60\": [-0.05556, 0.55556, 0, 0, 0.525],\n    \"61\": [-0.19549, 0.41562, 0, 0, 0.525],\n    \"62\": [-0.05556, 0.55556, 0, 0, 0.525],\n    \"63\": [0, 0.61111, 0, 0, 0.525],\n    \"64\": [0, 0.61111, 0, 0, 0.525],\n    \"65\": [0, 0.61111, 0, 0, 0.525],\n    \"66\": [0, 0.61111, 0, 0, 0.525],\n    \"67\": [0, 0.61111, 0, 0, 0.525],\n    \"68\": [0, 0.61111, 0, 0, 0.525],\n    \"69\": [0, 0.61111, 0, 0, 0.525],\n    \"70\": [0, 0.61111, 0, 0, 0.525],\n    \"71\": [0, 0.61111, 0, 0, 0.525],\n    \"72\": [0, 0.61111, 0, 0, 0.525],\n    \"73\": [0, 0.61111, 0, 0, 0.525],\n    \"74\": [0, 0.61111, 0, 0, 0.525],\n    \"75\": [0, 0.61111, 0, 0, 0.525],\n    \"76\": [0, 0.61111, 0, 0, 0.525],\n    \"77\": [0, 0.61111, 0, 0, 0.525],\n    \"78\": [0, 0.61111, 0, 0, 0.525],\n    \"79\": [0, 0.61111, 0, 0, 0.525],\n    \"80\": [0, 0.61111, 0, 0, 0.525],\n    \"81\": [0.13889, 0.61111, 0, 0, 0.525],\n    \"82\": [0, 0.61111, 0, 0, 0.525],\n    \"83\": [0, 0.61111, 0, 0, 0.525],\n    \"84\": [0, 0.61111, 0, 0, 0.525],\n    \"85\": [0, 0.61111, 0, 0, 0.525],\n    \"86\": [0, 0.61111, 0, 0, 0.525],\n    \"87\": [0, 0.61111, 0, 0, 0.525],\n    \"88\": [0, 0.61111, 0, 0, 0.525],\n    \"89\": [0, 0.61111, 0, 0, 0.525],\n    \"90\": [0, 0.61111, 0, 0, 0.525],\n    \"91\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"92\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"93\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"94\": [0, 0.61111, 0, 0, 0.525],\n    \"95\": [0.09514, 0, 0, 0, 0.525],\n    \"96\": [0, 0.61111, 0, 0, 0.525],\n    \"97\": [0, 0.43056, 0, 0, 0.525],\n    \"98\": [0, 0.61111, 0, 0, 0.525],\n    \"99\": [0, 0.43056, 0, 0, 0.525],\n    \"100\": [0, 0.61111, 0, 0, 0.525],\n    \"101\": [0, 0.43056, 0, 0, 0.525],\n    \"102\": [0, 0.61111, 0, 0, 0.525],\n    \"103\": [0.22222, 0.43056, 0, 0, 0.525],\n    \"104\": [0, 0.61111, 0, 0, 0.525],\n    \"105\": [0, 0.61111, 0, 0, 0.525],\n    \"106\": [0.22222, 0.61111, 0, 0, 0.525],\n    \"107\": [0, 0.61111, 0, 0, 0.525],\n    \"108\": [0, 0.61111, 0, 0, 0.525],\n    \"109\": [0, 0.43056, 0, 0, 0.525],\n    \"110\": [0, 0.43056, 0, 0, 0.525],\n    \"111\": [0, 0.43056, 0, 0, 0.525],\n    \"112\": [0.22222, 0.43056, 0, 0, 0.525],\n    \"113\": [0.22222, 0.43056, 0, 0, 0.525],\n    \"114\": [0, 0.43056, 0, 0, 0.525],\n    \"115\": [0, 0.43056, 0, 0, 0.525],\n    \"116\": [0, 0.55358, 0, 0, 0.525],\n    \"117\": [0, 0.43056, 0, 0, 0.525],\n    \"118\": [0, 0.43056, 0, 0, 0.525],\n    \"119\": [0, 0.43056, 0, 0, 0.525],\n    \"120\": [0, 0.43056, 0, 0, 0.525],\n    \"121\": [0.22222, 0.43056, 0, 0, 0.525],\n    \"122\": [0, 0.43056, 0, 0, 0.525],\n    \"123\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"124\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"125\": [0.08333, 0.69444, 0, 0, 0.525],\n    \"126\": [0, 0.61111, 0, 0, 0.525],\n    \"127\": [0, 0.61111, 0, 0, 0.525],\n    \"160\": [0, 0, 0, 0, 0.525],\n    \"176\": [0, 0.61111, 0, 0, 0.525],\n    \"184\": [0.19445, 0, 0, 0, 0.525],\n    \"305\": [0, 0.43056, 0, 0, 0.525],\n    \"567\": [0.22222, 0.43056, 0, 0, 0.525],\n    \"711\": [0, 0.56597, 0, 0, 0.525],\n    \"713\": [0, 0.56555, 0, 0, 0.525],\n    \"714\": [0, 0.61111, 0, 0, 0.525],\n    \"715\": [0, 0.61111, 0, 0, 0.525],\n    \"728\": [0, 0.61111, 0, 0, 0.525],\n    \"730\": [0, 0.61111, 0, 0, 0.525],\n    \"770\": [0, 0.61111, 0, 0, 0.525],\n    \"771\": [0, 0.61111, 0, 0, 0.525],\n    \"776\": [0, 0.61111, 0, 0, 0.525],\n    \"915\": [0, 0.61111, 0, 0, 0.525],\n    \"916\": [0, 0.61111, 0, 0, 0.525],\n    \"920\": [0, 0.61111, 0, 0, 0.525],\n    \"923\": [0, 0.61111, 0, 0, 0.525],\n    \"926\": [0, 0.61111, 0, 0, 0.525],\n    \"928\": [0, 0.61111, 0, 0, 0.525],\n    \"931\": [0, 0.61111, 0, 0, 0.525],\n    \"933\": [0, 0.61111, 0, 0, 0.525],\n    \"934\": [0, 0.61111, 0, 0, 0.525],\n    \"936\": [0, 0.61111, 0, 0, 0.525],\n    \"937\": [0, 0.61111, 0, 0, 0.525],\n    \"8216\": [0, 0.61111, 0, 0, 0.525],\n    \"8217\": [0, 0.61111, 0, 0, 0.525],\n    \"8242\": [0, 0.61111, 0, 0, 0.525],\n    \"9251\": [0.11111, 0.21944, 0, 0, 0.525]\n  }\n};\n\n/**\n * This file contains metrics regarding fonts and individual symbols. The sigma\n * and xi variables, as well as the metricMap map contain data extracted from\n * TeX, TeX font metrics, and the TTF files. These data are then exposed via the\n * `metrics` variable and the getCharacterMetrics function.\n */\n// In TeX, there are actually three sets of dimensions, one for each of\n// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:\n// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt).  These are\n// provided in the arrays below, in that order.\n//\n// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respectively.\n// This was determined by running the following script:\n//\n//     latex -interaction=nonstopmode \\\n//     '\\documentclass{article}\\usepackage{amsmath}\\begin{document}' \\\n//     '$a$ \\expandafter\\show\\the\\textfont2' \\\n//     '\\expandafter\\show\\the\\scriptfont2' \\\n//     '\\expandafter\\show\\the\\scriptscriptfont2' \\\n//     '\\stop'\n//\n// The metrics themselves were retrieved using the following commands:\n//\n//     tftopl cmsy10\n//     tftopl cmsy7\n//     tftopl cmsy5\n//\n// The output of each of these commands is quite lengthy.  The only part we\n// care about is the FONTDIMEN section. Each value is measured in EMs.\nvar sigmasAndXis = {\n  slant: [0.250, 0.250, 0.250],\n  // sigma1\n  space: [0.000, 0.000, 0.000],\n  // sigma2\n  stretch: [0.000, 0.000, 0.000],\n  // sigma3\n  shrink: [0.000, 0.000, 0.000],\n  // sigma4\n  xHeight: [0.431, 0.431, 0.431],\n  // sigma5\n  quad: [1.000, 1.171, 1.472],\n  // sigma6\n  extraSpace: [0.000, 0.000, 0.000],\n  // sigma7\n  num1: [0.677, 0.732, 0.925],\n  // sigma8\n  num2: [0.394, 0.384, 0.387],\n  // sigma9\n  num3: [0.444, 0.471, 0.504],\n  // sigma10\n  denom1: [0.686, 0.752, 1.025],\n  // sigma11\n  denom2: [0.345, 0.344, 0.532],\n  // sigma12\n  sup1: [0.413, 0.503, 0.504],\n  // sigma13\n  sup2: [0.363, 0.431, 0.404],\n  // sigma14\n  sup3: [0.289, 0.286, 0.294],\n  // sigma15\n  sub1: [0.150, 0.143, 0.200],\n  // sigma16\n  sub2: [0.247, 0.286, 0.400],\n  // sigma17\n  supDrop: [0.386, 0.353, 0.494],\n  // sigma18\n  subDrop: [0.050, 0.071, 0.100],\n  // sigma19\n  delim1: [2.390, 1.700, 1.980],\n  // sigma20\n  delim2: [1.010, 1.157, 1.420],\n  // sigma21\n  axisHeight: [0.250, 0.250, 0.250],\n  // sigma22\n  // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;\n  // they correspond to the font parameters of the extension fonts (family 3).\n  // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to\n  // match cmex7, we'd use cmex7.tfm values for script and scriptscript\n  // values.\n  defaultRuleThickness: [0.04, 0.049, 0.049],\n  // xi8; cmex7: 0.049\n  bigOpSpacing1: [0.111, 0.111, 0.111],\n  // xi9\n  bigOpSpacing2: [0.166, 0.166, 0.166],\n  // xi10\n  bigOpSpacing3: [0.2, 0.2, 0.2],\n  // xi11\n  bigOpSpacing4: [0.6, 0.611, 0.611],\n  // xi12; cmex7: 0.611\n  bigOpSpacing5: [0.1, 0.143, 0.143],\n  // xi13; cmex7: 0.143\n  // The \\sqrt rule width is taken from the height of the surd character.\n  // Since we use the same font at all sizes, this thickness doesn't scale.\n  sqrtRuleThickness: [0.04, 0.04, 0.04],\n  // This value determines how large a pt is, for metrics which are defined\n  // in terms of pts.\n  // This value is also used in katex.scss; if you change it make sure the\n  // values match.\n  ptPerEm: [10.0, 10.0, 10.0],\n  // The space between adjacent `|` columns in an array definition. From\n  // `\\showthe\\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.\n  doubleRuleSep: [0.2, 0.2, 0.2],\n  // The width of separator lines in {array} environments. From\n  // `\\showthe\\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.\n  arrayRuleWidth: [0.04, 0.04, 0.04],\n  // Two values from LaTeX source2e:\n  fboxsep: [0.3, 0.3, 0.3],\n  //        3 pt / ptPerEm\n  fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm\n\n}; // This map contains a mapping from font name and character code to character\n// should have Latin-1 and Cyrillic characters, but may not depending on the\n// operating system.  The metrics do not account for extra height from the\n// accents.  In the case of Cyrillic characters which have both ascenders and\n// descenders we prefer approximations with ascenders, primarily to prevent\n// the fraction bar or root line from intersecting the glyph.\n// TODO(kevinb) allow union of multiple glyph metrics for better accuracy.\n\nvar extraCharacterMap = {\n  // Latin-1\n  'Å': 'A',\n  'Ð': 'D',\n  'Þ': 'o',\n  'å': 'a',\n  'ð': 'd',\n  'þ': 'o',\n  // Cyrillic\n  'А': 'A',\n  'Б': 'B',\n  'В': 'B',\n  'Г': 'F',\n  'Д': 'A',\n  'Е': 'E',\n  'Ж': 'K',\n  'З': '3',\n  'И': 'N',\n  'Й': 'N',\n  'К': 'K',\n  'Л': 'N',\n  'М': 'M',\n  'Н': 'H',\n  'О': 'O',\n  'П': 'N',\n  'Р': 'P',\n  'С': 'C',\n  'Т': 'T',\n  'У': 'y',\n  'Ф': 'O',\n  'Х': 'X',\n  'Ц': 'U',\n  'Ч': 'h',\n  'Ш': 'W',\n  'Щ': 'W',\n  'Ъ': 'B',\n  'Ы': 'X',\n  'Ь': 'B',\n  'Э': '3',\n  'Ю': 'X',\n  'Я': 'R',\n  'а': 'a',\n  'б': 'b',\n  'в': 'a',\n  'г': 'r',\n  'д': 'y',\n  'е': 'e',\n  'ж': 'm',\n  'з': 'e',\n  'и': 'n',\n  'й': 'n',\n  'к': 'n',\n  'л': 'n',\n  'м': 'm',\n  'н': 'n',\n  'о': 'o',\n  'п': 'n',\n  'р': 'p',\n  'с': 'c',\n  'т': 'o',\n  'у': 'y',\n  'ф': 'b',\n  'х': 'x',\n  'ц': 'n',\n  'ч': 'n',\n  'ш': 'w',\n  'щ': 'w',\n  'ъ': 'a',\n  'ы': 'm',\n  'ь': 'a',\n  'э': 'e',\n  'ю': 'm',\n  'я': 'r'\n};\n\n/**\n * This function adds new font metrics to default metricMap\n * It can also override existing metrics\n */\nfunction setFontMetrics(fontName, metrics) {\n  fontMetricsData[fontName] = metrics;\n}\n/**\n * This function is a convenience function for looking up information in the\n * metricMap table. It takes a character as a string, and a font.\n *\n * Note: the `width` property may be undefined if fontMetricsData.js wasn't\n * built using `Make extended_metrics`.\n */\n\nfunction getCharacterMetrics(character, font, mode) {\n  if (!fontMetricsData[font]) {\n    throw new Error(\"Font metrics not found for font: \" + font + \".\");\n  }\n\n  var ch = character.charCodeAt(0);\n  var metrics = fontMetricsData[font][ch];\n\n  if (!metrics && character[0] in extraCharacterMap) {\n    ch = extraCharacterMap[character[0]].charCodeAt(0);\n    metrics = fontMetricsData[font][ch];\n  }\n\n  if (!metrics && mode === 'text') {\n    // We don't typically have font metrics for Asian scripts.\n    // But since we support them in text mode, we need to return\n    // some sort of metrics.\n    // So if the character is in a script we support but we\n    // don't have metrics for it, just use the metrics for\n    // the Latin capital letter M. This is close enough because\n    // we (currently) only care about the height of the glyph\n    // not its width.\n    if (supportedCodepoint(ch)) {\n      metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M'\n    }\n  }\n\n  if (metrics) {\n    return {\n      depth: metrics[0],\n      height: metrics[1],\n      italic: metrics[2],\n      skew: metrics[3],\n      width: metrics[4]\n    };\n  }\n}\nvar fontMetricsBySizeIndex = {};\n/**\n * Get the font metrics for a given size.\n */\n\nfunction getGlobalMetrics(size) {\n  var sizeIndex;\n\n  if (size >= 5) {\n    sizeIndex = 0;\n  } else if (size >= 3) {\n    sizeIndex = 1;\n  } else {\n    sizeIndex = 2;\n  }\n\n  if (!fontMetricsBySizeIndex[sizeIndex]) {\n    var metrics = fontMetricsBySizeIndex[sizeIndex] = {\n      cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18\n    };\n\n    for (var key in sigmasAndXis) {\n      if (sigmasAndXis.hasOwnProperty(key)) {\n        metrics[key] = sigmasAndXis[key][sizeIndex];\n      }\n    }\n  }\n\n  return fontMetricsBySizeIndex[sizeIndex];\n}\n\n/**\n * This file contains information about the options that the Parser carries\n * around with it while parsing. Data is held in an `Options` object, and when\n * recursing, a new `Options` object can be created with the `.with*` and\n * `.reset` functions.\n */\nvar sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize].\n// The size mappings are taken from TeX with \\normalsize=10pt.\n[1, 1, 1], // size1: [5, 5, 5]              \\tiny\n[2, 1, 1], // size2: [6, 5, 5]\n[3, 1, 1], // size3: [7, 5, 5]              \\scriptsize\n[4, 2, 1], // size4: [8, 6, 5]              \\footnotesize\n[5, 2, 1], // size5: [9, 6, 5]              \\small\n[6, 3, 1], // size6: [10, 7, 5]             \\normalsize\n[7, 4, 2], // size7: [12, 8, 6]             \\large\n[8, 6, 3], // size8: [14.4, 10, 7]          \\Large\n[9, 7, 6], // size9: [17.28, 12, 10]        \\LARGE\n[10, 8, 7], // size10: [20.74, 14.4, 12]     \\huge\n[11, 10, 9] // size11: [24.88, 20.74, 17.28] \\HUGE\n];\nvar sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if\n// you change size indexes, change that function.\n0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488];\n\nvar sizeAtStyle = function sizeAtStyle(size, style) {\n  return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];\n}; // In these types, \"\" (empty string) means \"no change\".\n\n\n/**\n * This is the main options class. It contains the current style, size, color,\n * and font.\n *\n * Options objects should not be modified. To create a new Options with\n * different properties, call a `.having*` method.\n */\nclass Options {\n  // A font family applies to a group of fonts (i.e. SansSerif), while a font\n  // represents a specific font (i.e. SansSerif Bold).\n  // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm\n\n  /**\n   * The base size index.\n   */\n  constructor(data) {\n    this.style = void 0;\n    this.color = void 0;\n    this.size = void 0;\n    this.textSize = void 0;\n    this.phantom = void 0;\n    this.font = void 0;\n    this.fontFamily = void 0;\n    this.fontWeight = void 0;\n    this.fontShape = void 0;\n    this.sizeMultiplier = void 0;\n    this.maxSize = void 0;\n    this.minRuleThickness = void 0;\n    this._fontMetrics = void 0;\n    this.style = data.style;\n    this.color = data.color;\n    this.size = data.size || Options.BASESIZE;\n    this.textSize = data.textSize || this.size;\n    this.phantom = !!data.phantom;\n    this.font = data.font || \"\";\n    this.fontFamily = data.fontFamily || \"\";\n    this.fontWeight = data.fontWeight || '';\n    this.fontShape = data.fontShape || '';\n    this.sizeMultiplier = sizeMultipliers[this.size - 1];\n    this.maxSize = data.maxSize;\n    this.minRuleThickness = data.minRuleThickness;\n    this._fontMetrics = undefined;\n  }\n  /**\n   * Returns a new options object with the same properties as \"this\".  Properties\n   * from \"extension\" will be copied to the new options object.\n   */\n\n\n  extend(extension) {\n    var data = {\n      style: this.style,\n      size: this.size,\n      textSize: this.textSize,\n      color: this.color,\n      phantom: this.phantom,\n      font: this.font,\n      fontFamily: this.fontFamily,\n      fontWeight: this.fontWeight,\n      fontShape: this.fontShape,\n      maxSize: this.maxSize,\n      minRuleThickness: this.minRuleThickness\n    };\n\n    for (var key in extension) {\n      if (extension.hasOwnProperty(key)) {\n        data[key] = extension[key];\n      }\n    }\n\n    return new Options(data);\n  }\n  /**\n   * Return an options object with the given style. If `this.style === style`,\n   * returns `this`.\n   */\n\n\n  havingStyle(style) {\n    if (this.style === style) {\n      return this;\n    } else {\n      return this.extend({\n        style: style,\n        size: sizeAtStyle(this.textSize, style)\n      });\n    }\n  }\n  /**\n   * Return an options object with a cramped version of the current style. If\n   * the current style is cramped, returns `this`.\n   */\n\n\n  havingCrampedStyle() {\n    return this.havingStyle(this.style.cramp());\n  }\n  /**\n   * Return an options object with the given size and in at least `\\textstyle`.\n   * Returns `this` if appropriate.\n   */\n\n\n  havingSize(size) {\n    if (this.size === size && this.textSize === size) {\n      return this;\n    } else {\n      return this.extend({\n        style: this.style.text(),\n        size: size,\n        textSize: size,\n        sizeMultiplier: sizeMultipliers[size - 1]\n      });\n    }\n  }\n  /**\n   * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,\n   * changes to at least `\\textstyle`.\n   */\n\n\n  havingBaseStyle(style) {\n    style = style || this.style.text();\n    var wantSize = sizeAtStyle(Options.BASESIZE, style);\n\n    if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) {\n      return this;\n    } else {\n      return this.extend({\n        style: style,\n        size: wantSize\n      });\n    }\n  }\n  /**\n   * Remove the effect of sizing changes such as \\Huge.\n   * Keep the effect of the current style, such as \\scriptstyle.\n   */\n\n\n  havingBaseSizing() {\n    var size;\n\n    switch (this.style.id) {\n      case 4:\n      case 5:\n        size = 3; // normalsize in scriptstyle\n\n        break;\n\n      case 6:\n      case 7:\n        size = 1; // normalsize in scriptscriptstyle\n\n        break;\n\n      default:\n        size = 6;\n      // normalsize in textstyle or displaystyle\n    }\n\n    return this.extend({\n      style: this.style.text(),\n      size: size\n    });\n  }\n  /**\n   * Create a new options object with the given color.\n   */\n\n\n  withColor(color) {\n    return this.extend({\n      color: color\n    });\n  }\n  /**\n   * Create a new options object with \"phantom\" set to true.\n   */\n\n\n  withPhantom() {\n    return this.extend({\n      phantom: true\n    });\n  }\n  /**\n   * Creates a new options object with the given math font or old text font.\n   * @type {[type]}\n   */\n\n\n  withFont(font) {\n    return this.extend({\n      font\n    });\n  }\n  /**\n   * Create a new options objects with the given fontFamily.\n   */\n\n\n  withTextFontFamily(fontFamily) {\n    return this.extend({\n      fontFamily,\n      font: \"\"\n    });\n  }\n  /**\n   * Creates a new options object with the given font weight\n   */\n\n\n  withTextFontWeight(fontWeight) {\n    return this.extend({\n      fontWeight,\n      font: \"\"\n    });\n  }\n  /**\n   * Creates a new options object with the given font weight\n   */\n\n\n  withTextFontShape(fontShape) {\n    return this.extend({\n      fontShape,\n      font: \"\"\n    });\n  }\n  /**\n   * Return the CSS sizing classes required to switch from enclosing options\n   * `oldOptions` to `this`. Returns an array of classes.\n   */\n\n\n  sizingClasses(oldOptions) {\n    if (oldOptions.size !== this.size) {\n      return [\"sizing\", \"reset-size\" + oldOptions.size, \"size\" + this.size];\n    } else {\n      return [];\n    }\n  }\n  /**\n   * Return the CSS sizing classes required to switch to the base size. Like\n   * `this.havingSize(BASESIZE).sizingClasses(this)`.\n   */\n\n\n  baseSizingClasses() {\n    if (this.size !== Options.BASESIZE) {\n      return [\"sizing\", \"reset-size\" + this.size, \"size\" + Options.BASESIZE];\n    } else {\n      return [];\n    }\n  }\n  /**\n   * Return the font metrics for this size.\n   */\n\n\n  fontMetrics() {\n    if (!this._fontMetrics) {\n      this._fontMetrics = getGlobalMetrics(this.size);\n    }\n\n    return this._fontMetrics;\n  }\n  /**\n   * Gets the CSS color of the current options object\n   */\n\n\n  getColor() {\n    if (this.phantom) {\n      return \"transparent\";\n    } else {\n      return this.color;\n    }\n  }\n\n}\n\nOptions.BASESIZE = 6;\n\n/**\n * This file does conversion between units.  In particular, it provides\n * calculateSize to convert other units into ems.\n */\n// Thus, multiplying a length by this number converts the length from units\n// into pts.  Dividing the result by ptPerEm gives the number of ems\n// *assuming* a font size of ptPerEm (normal size, normal style).\n\nvar ptPerUnit = {\n  // https://en.wikibooks.org/wiki/LaTeX/Lengths and\n  // https://tex.stackexchange.com/a/8263\n  \"pt\": 1,\n  // TeX point\n  \"mm\": 7227 / 2540,\n  // millimeter\n  \"cm\": 7227 / 254,\n  // centimeter\n  \"in\": 72.27,\n  // inch\n  \"bp\": 803 / 800,\n  // big (PostScript) points\n  \"pc\": 12,\n  // pica\n  \"dd\": 1238 / 1157,\n  // didot\n  \"cc\": 14856 / 1157,\n  // cicero (12 didot)\n  \"nd\": 685 / 642,\n  // new didot\n  \"nc\": 1370 / 107,\n  // new cicero (12 new didot)\n  \"sp\": 1 / 65536,\n  // scaled point (TeX's internal smallest unit)\n  // https://tex.stackexchange.com/a/41371\n  \"px\": 803 / 800 // \\pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX\n\n}; // Dictionary of relative units, for fast validity testing.\n\nvar relativeUnit = {\n  \"ex\": true,\n  \"em\": true,\n  \"mu\": true\n};\n\n/**\n * Determine whether the specified unit (either a string defining the unit\n * or a \"size\" parse node containing a unit field) is valid.\n */\nvar validUnit = function validUnit(unit) {\n  if (typeof unit !== \"string\") {\n    unit = unit.unit;\n  }\n\n  return unit in ptPerUnit || unit in relativeUnit || unit === \"ex\";\n};\n/*\n * Convert a \"size\" parse node (with numeric \"number\" and string \"unit\" fields,\n * as parsed by functions.js argType \"size\") into a CSS em value for the\n * current style/scale.  `options` gives the current options.\n */\n\nvar calculateSize = function calculateSize(sizeValue, options) {\n  var scale;\n\n  if (sizeValue.unit in ptPerUnit) {\n    // Absolute units\n    scale = ptPerUnit[sizeValue.unit] // Convert unit to pt\n    / options.fontMetrics().ptPerEm // Convert pt to CSS em\n    / options.sizeMultiplier; // Unscale to make absolute units\n  } else if (sizeValue.unit === \"mu\") {\n    // `mu` units scale with scriptstyle/scriptscriptstyle.\n    scale = options.fontMetrics().cssEmPerMu;\n  } else {\n    // Other relative units always refer to the *textstyle* font\n    // in the current size.\n    var unitOptions;\n\n    if (options.style.isTight()) {\n      // isTight() means current style is script/scriptscript.\n      unitOptions = options.havingStyle(options.style.text());\n    } else {\n      unitOptions = options;\n    } // TODO: In TeX these units are relative to the quad of the current\n    // *text* font, e.g. cmr10. KaTeX instead uses values from the\n    // comparably-sized *Computer Modern symbol* font. At 10pt, these\n    // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;\n    // cmr5=1.361133, cmsy5=1.472241. Consider $\\scriptsize a\\kern1emb$.\n    // TeX \\showlists shows a kern of 1.13889 * fontsize;\n    // KaTeX shows a kern of 1.171 * fontsize.\n\n\n    if (sizeValue.unit === \"ex\") {\n      scale = unitOptions.fontMetrics().xHeight;\n    } else if (sizeValue.unit === \"em\") {\n      scale = unitOptions.fontMetrics().quad;\n    } else {\n      throw new ParseError(\"Invalid unit: '\" + sizeValue.unit + \"'\");\n    }\n\n    if (unitOptions !== options) {\n      scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;\n    }\n  }\n\n  return Math.min(sizeValue.number * scale, options.maxSize);\n};\n/**\n * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. See\n * https://github.com/KaTeX/KaTeX/pull/2460.\n */\n\nvar makeEm = function makeEm(n) {\n  return +n.toFixed(4) + \"em\";\n};\n\n/**\n * These objects store the data about the DOM nodes we create, as well as some\n * extra data. They can then be transformed into real DOM nodes with the\n * `toNode` function or HTML markup using `toMarkup`. They are useful for both\n * storing extra properties on the nodes, as well as providing a way to easily\n * work with the DOM.\n *\n * Similar functions for working with MathML nodes exist in mathMLTree.js.\n *\n * TODO: refactor `span` and `anchor` into common superclass when\n * target environments support class inheritance\n */\n\n/**\n * Create an HTML className based on a list of classes. In addition to joining\n * with spaces, we also remove empty classes.\n */\nvar createClass = function createClass(classes) {\n  return classes.filter(cls => cls).join(\" \");\n};\n\nvar initNode = function initNode(classes, options, style) {\n  this.classes = classes || [];\n  this.attributes = {};\n  this.height = 0;\n  this.depth = 0;\n  this.maxFontSize = 0;\n  this.style = style || {};\n\n  if (options) {\n    if (options.style.isTight()) {\n      this.classes.push(\"mtight\");\n    }\n\n    var color = options.getColor();\n\n    if (color) {\n      this.style.color = color;\n    }\n  }\n};\n/**\n * Convert into an HTML node\n */\n\n\nvar toNode = function toNode(tagName) {\n  var node = document.createElement(tagName); // Apply the class\n\n  node.className = createClass(this.classes); // Apply inline styles\n\n  for (var style in this.style) {\n    if (this.style.hasOwnProperty(style)) {\n      // $FlowFixMe Flow doesn't seem to understand span.style's type.\n      node.style[style] = this.style[style];\n    }\n  } // Apply attributes\n\n\n  for (var attr in this.attributes) {\n    if (this.attributes.hasOwnProperty(attr)) {\n      node.setAttribute(attr, this.attributes[attr]);\n    }\n  } // Append the children, also as HTML nodes\n\n\n  for (var i = 0; i < this.children.length; i++) {\n    node.appendChild(this.children[i].toNode());\n  }\n\n  return node;\n};\n/**\n * https://w3c.github.io/html-reference/syntax.html#syntax-attributes\n *\n * > Attribute Names must consist of one or more characters\n * other than the space characters, U+0000 NULL,\n * '\"', \"'\", \">\", \"/\", \"=\", the control characters,\n * and any characters that are not defined by Unicode.\n */\n\n\nvar invalidAttributeNameRegex = /[\\s\"'>/=\\x00-\\x1f]/;\n/**\n * Convert into an HTML markup string\n */\n\nvar toMarkup = function toMarkup(tagName) {\n  var markup = \"<\" + tagName; // Add the class\n\n  if (this.classes.length) {\n    markup += \" class=\\\"\" + utils.escape(createClass(this.classes)) + \"\\\"\";\n  }\n\n  var styles = \"\"; // Add the styles, after hyphenation\n\n  for (var style in this.style) {\n    if (this.style.hasOwnProperty(style)) {\n      styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n    }\n  }\n\n  if (styles) {\n    markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n  } // Add the attributes\n\n\n  for (var attr in this.attributes) {\n    if (this.attributes.hasOwnProperty(attr)) {\n      if (invalidAttributeNameRegex.test(attr)) {\n        throw new ParseError(\"Invalid attribute name '\" + attr + \"'\");\n      }\n\n      markup += \" \" + attr + \"=\\\"\" + utils.escape(this.attributes[attr]) + \"\\\"\";\n    }\n  }\n\n  markup += \">\"; // Add the markup of the children, also as markup\n\n  for (var i = 0; i < this.children.length; i++) {\n    markup += this.children[i].toMarkup();\n  }\n\n  markup += \"</\" + tagName + \">\";\n  return markup;\n}; // Making the type below exact with all optional fields doesn't work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n// This type does not include all CSS properties. Additional properties should\n// be added as needed.\n\n\n/**\n * This node represents a span node, with a className, a list of children, and\n * an inline style. It also contains information about its height, depth, and\n * maxFontSize.\n *\n * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan\n * otherwise. This typesafety is important when HTML builders access a span's\n * children.\n */\nclass Span {\n  constructor(classes, children, options, style) {\n    this.children = void 0;\n    this.attributes = void 0;\n    this.classes = void 0;\n    this.height = void 0;\n    this.depth = void 0;\n    this.width = void 0;\n    this.maxFontSize = void 0;\n    this.style = void 0;\n    initNode.call(this, classes, options, style);\n    this.children = children || [];\n  }\n  /**\n   * Sets an arbitrary attribute on the span. Warning: use this wisely. Not\n   * all browsers support attributes the same, and having too many custom\n   * attributes is probably bad.\n   */\n\n\n  setAttribute(attribute, value) {\n    this.attributes[attribute] = value;\n  }\n\n  hasClass(className) {\n    return utils.contains(this.classes, className);\n  }\n\n  toNode() {\n    return toNode.call(this, \"span\");\n  }\n\n  toMarkup() {\n    return toMarkup.call(this, \"span\");\n  }\n\n}\n/**\n * This node represents an anchor (<a>) element with a hyperlink.  See `span`\n * for further details.\n */\n\nclass Anchor {\n  constructor(href, classes, children, options) {\n    this.children = void 0;\n    this.attributes = void 0;\n    this.classes = void 0;\n    this.height = void 0;\n    this.depth = void 0;\n    this.maxFontSize = void 0;\n    this.style = void 0;\n    initNode.call(this, classes, options);\n    this.children = children || [];\n    this.setAttribute('href', href);\n  }\n\n  setAttribute(attribute, value) {\n    this.attributes[attribute] = value;\n  }\n\n  hasClass(className) {\n    return utils.contains(this.classes, className);\n  }\n\n  toNode() {\n    return toNode.call(this, \"a\");\n  }\n\n  toMarkup() {\n    return toMarkup.call(this, \"a\");\n  }\n\n}\n/**\n * This node represents an image embed (<img>) element.\n */\n\nclass Img {\n  constructor(src, alt, style) {\n    this.src = void 0;\n    this.alt = void 0;\n    this.classes = void 0;\n    this.height = void 0;\n    this.depth = void 0;\n    this.maxFontSize = void 0;\n    this.style = void 0;\n    this.alt = alt;\n    this.src = src;\n    this.classes = [\"mord\"];\n    this.style = style;\n  }\n\n  hasClass(className) {\n    return utils.contains(this.classes, className);\n  }\n\n  toNode() {\n    var node = document.createElement(\"img\");\n    node.src = this.src;\n    node.alt = this.alt;\n    node.className = \"mord\"; // Apply inline styles\n\n    for (var style in this.style) {\n      if (this.style.hasOwnProperty(style)) {\n        // $FlowFixMe\n        node.style[style] = this.style[style];\n      }\n    }\n\n    return node;\n  }\n\n  toMarkup() {\n    var markup = \"<img src=\\\"\" + utils.escape(this.src) + \"\\\"\" + (\" alt=\\\"\" + utils.escape(this.alt) + \"\\\"\"); // Add the styles, after hyphenation\n\n    var styles = \"\";\n\n    for (var style in this.style) {\n      if (this.style.hasOwnProperty(style)) {\n        styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n      }\n    }\n\n    if (styles) {\n      markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n    }\n\n    markup += \"'/>\";\n    return markup;\n  }\n\n}\nvar iCombinations = {\n  'î': '\\u0131\\u0302',\n  'ï': '\\u0131\\u0308',\n  'í': '\\u0131\\u0301',\n  // 'ī': '\\u0131\\u0304', // enable when we add Extended Latin\n  'ì': '\\u0131\\u0300'\n};\n/**\n * A symbol node contains information about a single symbol. It either renders\n * to a single text node, or a span with a single text node in it, depending on\n * whether it has CSS classes, styles, or needs italic correction.\n */\n\nclass SymbolNode {\n  constructor(text, height, depth, italic, skew, width, classes, style) {\n    this.text = void 0;\n    this.height = void 0;\n    this.depth = void 0;\n    this.italic = void 0;\n    this.skew = void 0;\n    this.width = void 0;\n    this.maxFontSize = void 0;\n    this.classes = void 0;\n    this.style = void 0;\n    this.text = text;\n    this.height = height || 0;\n    this.depth = depth || 0;\n    this.italic = italic || 0;\n    this.skew = skew || 0;\n    this.width = width || 0;\n    this.classes = classes || [];\n    this.style = style || {};\n    this.maxFontSize = 0; // Mark text from non-Latin scripts with specific classes so that we\n    // can specify which fonts to use.  This allows us to render these\n    // characters with a serif font in situations where the browser would\n    // either default to a sans serif or render a placeholder character.\n    // We use CSS class names like cjk_fallback, hangul_fallback and\n    // brahmic_fallback. See ./unicodeScripts.js for the set of possible\n    // script names\n\n    var script = scriptFromCodepoint(this.text.charCodeAt(0));\n\n    if (script) {\n      this.classes.push(script + \"_fallback\");\n    }\n\n    if (/[îïíì]/.test(this.text)) {\n      // add ī when we add Extended Latin\n      this.text = iCombinations[this.text];\n    }\n  }\n\n  hasClass(className) {\n    return utils.contains(this.classes, className);\n  }\n  /**\n   * Creates a text node or span from a symbol node. Note that a span is only\n   * created if it is needed.\n   */\n\n\n  toNode() {\n    var node = document.createTextNode(this.text);\n    var span = null;\n\n    if (this.italic > 0) {\n      span = document.createElement(\"span\");\n      span.style.marginRight = makeEm(this.italic);\n    }\n\n    if (this.classes.length > 0) {\n      span = span || document.createElement(\"span\");\n      span.className = createClass(this.classes);\n    }\n\n    for (var style in this.style) {\n      if (this.style.hasOwnProperty(style)) {\n        span = span || document.createElement(\"span\"); // $FlowFixMe Flow doesn't seem to understand span.style's type.\n\n        span.style[style] = this.style[style];\n      }\n    }\n\n    if (span) {\n      span.appendChild(node);\n      return span;\n    } else {\n      return node;\n    }\n  }\n  /**\n   * Creates markup for a symbol node.\n   */\n\n\n  toMarkup() {\n    // TODO(alpert): More duplication than I'd like from\n    // span.prototype.toMarkup and symbolNode.prototype.toNode...\n    var needsSpan = false;\n    var markup = \"<span\";\n\n    if (this.classes.length) {\n      needsSpan = true;\n      markup += \" class=\\\"\";\n      markup += utils.escape(createClass(this.classes));\n      markup += \"\\\"\";\n    }\n\n    var styles = \"\";\n\n    if (this.italic > 0) {\n      styles += \"margin-right:\" + this.italic + \"em;\";\n    }\n\n    for (var style in this.style) {\n      if (this.style.hasOwnProperty(style)) {\n        styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n      }\n    }\n\n    if (styles) {\n      needsSpan = true;\n      markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n    }\n\n    var escaped = utils.escape(this.text);\n\n    if (needsSpan) {\n      markup += \">\";\n      markup += escaped;\n      markup += \"</span>\";\n      return markup;\n    } else {\n      return escaped;\n    }\n  }\n\n}\n/**\n * SVG nodes are used to render stretchy wide elements.\n */\n\nclass SvgNode {\n  constructor(children, attributes) {\n    this.children = void 0;\n    this.attributes = void 0;\n    this.children = children || [];\n    this.attributes = attributes || {};\n  }\n\n  toNode() {\n    var svgNS = \"http://www.w3.org/2000/svg\";\n    var node = document.createElementNS(svgNS, \"svg\"); // Apply attributes\n\n    for (var attr in this.attributes) {\n      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n        node.setAttribute(attr, this.attributes[attr]);\n      }\n    }\n\n    for (var i = 0; i < this.children.length; i++) {\n      node.appendChild(this.children[i].toNode());\n    }\n\n    return node;\n  }\n\n  toMarkup() {\n    var markup = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"\"; // Apply attributes\n\n    for (var attr in this.attributes) {\n      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n        markup += \" \" + attr + \"=\\\"\" + utils.escape(this.attributes[attr]) + \"\\\"\";\n      }\n    }\n\n    markup += \">\";\n\n    for (var i = 0; i < this.children.length; i++) {\n      markup += this.children[i].toMarkup();\n    }\n\n    markup += \"</svg>\";\n    return markup;\n  }\n\n}\nclass PathNode {\n  constructor(pathName, alternate) {\n    this.pathName = void 0;\n    this.alternate = void 0;\n    this.pathName = pathName;\n    this.alternate = alternate; // Used only for \\sqrt, \\phase, & tall delims\n  }\n\n  toNode() {\n    var svgNS = \"http://www.w3.org/2000/svg\";\n    var node = document.createElementNS(svgNS, \"path\");\n\n    if (this.alternate) {\n      node.setAttribute(\"d\", this.alternate);\n    } else {\n      node.setAttribute(\"d\", path[this.pathName]);\n    }\n\n    return node;\n  }\n\n  toMarkup() {\n    if (this.alternate) {\n      return \"<path d=\\\"\" + utils.escape(this.alternate) + \"\\\"/>\";\n    } else {\n      return \"<path d=\\\"\" + utils.escape(path[this.pathName]) + \"\\\"/>\";\n    }\n  }\n\n}\nclass LineNode {\n  constructor(attributes) {\n    this.attributes = void 0;\n    this.attributes = attributes || {};\n  }\n\n  toNode() {\n    var svgNS = \"http://www.w3.org/2000/svg\";\n    var node = document.createElementNS(svgNS, \"line\"); // Apply attributes\n\n    for (var attr in this.attributes) {\n      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n        node.setAttribute(attr, this.attributes[attr]);\n      }\n    }\n\n    return node;\n  }\n\n  toMarkup() {\n    var markup = \"<line\";\n\n    for (var attr in this.attributes) {\n      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n        markup += \" \" + attr + \"=\\\"\" + utils.escape(this.attributes[attr]) + \"\\\"\";\n      }\n    }\n\n    markup += \"/>\";\n    return markup;\n  }\n\n}\nfunction assertSymbolDomNode(group) {\n  if (group instanceof SymbolNode) {\n    return group;\n  } else {\n    throw new Error(\"Expected symbolNode but got \" + String(group) + \".\");\n  }\n}\nfunction assertSpan(group) {\n  if (group instanceof Span) {\n    return group;\n  } else {\n    throw new Error(\"Expected span<HtmlDomNode> but got \" + String(group) + \".\");\n  }\n}\n\n/**\n * This file holds a list of all no-argument functions and single-character\n * symbols (like 'a' or ';').\n *\n * For each of the symbols, there are three properties they can have:\n * - font (required): the font to be used for this symbol. Either \"main\" (the\n     normal font), or \"ams\" (the ams fonts).\n * - group (required): the ParseNode group type the symbol should have (i.e.\n     \"textord\", \"mathord\", etc).\n     See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types\n * - replace: the character that this symbol or function should be\n *   replaced with (i.e. \"\\phi\" has a replace value of \"\\u03d5\", the phi\n *   character in the main font).\n *\n * The outermost map in the table indicates what mode the symbols should be\n * accepted in (e.g. \"math\" or \"text\").\n */\n// Some of these have a \"-token\" suffix since these are also used as `ParseNode`\n// types for raw text tokens, and we want to avoid conflicts with higher-level\n// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by\n// looking up the `symbols` map.\nvar ATOMS = {\n  \"bin\": 1,\n  \"close\": 1,\n  \"inner\": 1,\n  \"open\": 1,\n  \"punct\": 1,\n  \"rel\": 1\n};\nvar NON_ATOMS = {\n  \"accent-token\": 1,\n  \"mathord\": 1,\n  \"op-token\": 1,\n  \"spacing\": 1,\n  \"textord\": 1\n};\nvar symbols = {\n  \"math\": {},\n  \"text\": {}\n};\n/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */\n\nfunction defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {\n  symbols[mode][name] = {\n    font,\n    group,\n    replace\n  };\n\n  if (acceptUnicodeChar && replace) {\n    symbols[mode][replace] = symbols[mode][name];\n  }\n} // Some abbreviations for commonly used strings.\n// This helps minify the code, and also spotting typos using jshint.\n// modes:\n\nvar math = \"math\";\nvar text = \"text\"; // fonts:\n\nvar main = \"main\";\nvar ams = \"ams\"; // groups:\n\nvar accent = \"accent-token\";\nvar bin = \"bin\";\nvar close = \"close\";\nvar inner = \"inner\";\nvar mathord = \"mathord\";\nvar op = \"op-token\";\nvar open = \"open\";\nvar punct = \"punct\";\nvar rel = \"rel\";\nvar spacing = \"spacing\";\nvar textord = \"textord\"; // Now comes the symbol table\n// Relation Symbols\n\ndefineSymbol(math, main, rel, \"\\u2261\", \"\\\\equiv\", true);\ndefineSymbol(math, main, rel, \"\\u227a\", \"\\\\prec\", true);\ndefineSymbol(math, main, rel, \"\\u227b\", \"\\\\succ\", true);\ndefineSymbol(math, main, rel, \"\\u223c\", \"\\\\sim\", true);\ndefineSymbol(math, main, rel, \"\\u22a5\", \"\\\\perp\");\ndefineSymbol(math, main, rel, \"\\u2aaf\", \"\\\\preceq\", true);\ndefineSymbol(math, main, rel, \"\\u2ab0\", \"\\\\succeq\", true);\ndefineSymbol(math, main, rel, \"\\u2243\", \"\\\\simeq\", true);\ndefineSymbol(math, main, rel, \"\\u2223\", \"\\\\mid\", true);\ndefineSymbol(math, main, rel, \"\\u226a\", \"\\\\ll\", true);\ndefineSymbol(math, main, rel, \"\\u226b\", \"\\\\gg\", true);\ndefineSymbol(math, main, rel, \"\\u224d\", \"\\\\asymp\", true);\ndefineSymbol(math, main, rel, \"\\u2225\", \"\\\\parallel\");\ndefineSymbol(math, main, rel, \"\\u22c8\", \"\\\\bowtie\", true);\ndefineSymbol(math, main, rel, \"\\u2323\", \"\\\\smile\", true);\ndefineSymbol(math, main, rel, \"\\u2291\", \"\\\\sqsubseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2292\", \"\\\\sqsupseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2250\", \"\\\\doteq\", true);\ndefineSymbol(math, main, rel, \"\\u2322\", \"\\\\frown\", true);\ndefineSymbol(math, main, rel, \"\\u220b\", \"\\\\ni\", true);\ndefineSymbol(math, main, rel, \"\\u221d\", \"\\\\propto\", true);\ndefineSymbol(math, main, rel, \"\\u22a2\", \"\\\\vdash\", true);\ndefineSymbol(math, main, rel, \"\\u22a3\", \"\\\\dashv\", true);\ndefineSymbol(math, main, rel, \"\\u220b\", \"\\\\owns\"); // Punctuation\n\ndefineSymbol(math, main, punct, \"\\u002e\", \"\\\\ldotp\");\ndefineSymbol(math, main, punct, \"\\u22c5\", \"\\\\cdotp\"); // Misc Symbols\n\ndefineSymbol(math, main, textord, \"\\u0023\", \"\\\\#\");\ndefineSymbol(text, main, textord, \"\\u0023\", \"\\\\#\");\ndefineSymbol(math, main, textord, \"\\u0026\", \"\\\\&\");\ndefineSymbol(text, main, textord, \"\\u0026\", \"\\\\&\");\ndefineSymbol(math, main, textord, \"\\u2135\", \"\\\\aleph\", true);\ndefineSymbol(math, main, textord, \"\\u2200\", \"\\\\forall\", true);\ndefineSymbol(math, main, textord, \"\\u210f\", \"\\\\hbar\", true);\ndefineSymbol(math, main, textord, \"\\u2203\", \"\\\\exists\", true);\ndefineSymbol(math, main, textord, \"\\u2207\", \"\\\\nabla\", true);\ndefineSymbol(math, main, textord, \"\\u266d\", \"\\\\flat\", true);\ndefineSymbol(math, main, textord, \"\\u2113\", \"\\\\ell\", true);\ndefineSymbol(math, main, textord, \"\\u266e\", \"\\\\natural\", true);\ndefineSymbol(math, main, textord, \"\\u2663\", \"\\\\clubsuit\", true);\ndefineSymbol(math, main, textord, \"\\u2118\", \"\\\\wp\", true);\ndefineSymbol(math, main, textord, \"\\u266f\", \"\\\\sharp\", true);\ndefineSymbol(math, main, textord, \"\\u2662\", \"\\\\diamondsuit\", true);\ndefineSymbol(math, main, textord, \"\\u211c\", \"\\\\Re\", true);\ndefineSymbol(math, main, textord, \"\\u2661\", \"\\\\heartsuit\", true);\ndefineSymbol(math, main, textord, \"\\u2111\", \"\\\\Im\", true);\ndefineSymbol(math, main, textord, \"\\u2660\", \"\\\\spadesuit\", true);\ndefineSymbol(math, main, textord, \"\\u00a7\", \"\\\\S\", true);\ndefineSymbol(text, main, textord, \"\\u00a7\", \"\\\\S\");\ndefineSymbol(math, main, textord, \"\\u00b6\", \"\\\\P\", true);\ndefineSymbol(text, main, textord, \"\\u00b6\", \"\\\\P\"); // Math and Text\n\ndefineSymbol(math, main, textord, \"\\u2020\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"\\u2020\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"\\u2020\", \"\\\\textdagger\");\ndefineSymbol(math, main, textord, \"\\u2021\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"\\u2021\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"\\u2021\", \"\\\\textdaggerdbl\"); // Large Delimiters\n\ndefineSymbol(math, main, close, \"\\u23b1\", \"\\\\rmoustache\", true);\ndefineSymbol(math, main, open, \"\\u23b0\", \"\\\\lmoustache\", true);\ndefineSymbol(math, main, close, \"\\u27ef\", \"\\\\rgroup\", true);\ndefineSymbol(math, main, open, \"\\u27ee\", \"\\\\lgroup\", true); // Binary Operators\n\ndefineSymbol(math, main, bin, \"\\u2213\", \"\\\\mp\", true);\ndefineSymbol(math, main, bin, \"\\u2296\", \"\\\\ominus\", true);\ndefineSymbol(math, main, bin, \"\\u228e\", \"\\\\uplus\", true);\ndefineSymbol(math, main, bin, \"\\u2293\", \"\\\\sqcap\", true);\ndefineSymbol(math, main, bin, \"\\u2217\", \"\\\\ast\");\ndefineSymbol(math, main, bin, \"\\u2294\", \"\\\\sqcup\", true);\ndefineSymbol(math, main, bin, \"\\u25ef\", \"\\\\bigcirc\", true);\ndefineSymbol(math, main, bin, \"\\u2219\", \"\\\\bullet\", true);\ndefineSymbol(math, main, bin, \"\\u2021\", \"\\\\ddagger\");\ndefineSymbol(math, main, bin, \"\\u2240\", \"\\\\wr\", true);\ndefineSymbol(math, main, bin, \"\\u2a3f\", \"\\\\amalg\");\ndefineSymbol(math, main, bin, \"\\u0026\", \"\\\\And\"); // from amsmath\n// Arrow Symbols\n\ndefineSymbol(math, main, rel, \"\\u27f5\", \"\\\\longleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d0\", \"\\\\Leftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f8\", \"\\\\Longleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f6\", \"\\\\longrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d2\", \"\\\\Rightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f9\", \"\\\\Longrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2194\", \"\\\\leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f7\", \"\\\\longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d4\", \"\\\\Leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27fa\", \"\\\\Longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21a6\", \"\\\\mapsto\", true);\ndefineSymbol(math, main, rel, \"\\u27fc\", \"\\\\longmapsto\", true);\ndefineSymbol(math, main, rel, \"\\u2197\", \"\\\\nearrow\", true);\ndefineSymbol(math, main, rel, \"\\u21a9\", \"\\\\hookleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21aa\", \"\\\\hookrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2198\", \"\\\\searrow\", true);\ndefineSymbol(math, main, rel, \"\\u21bc\", \"\\\\leftharpoonup\", true);\ndefineSymbol(math, main, rel, \"\\u21c0\", \"\\\\rightharpoonup\", true);\ndefineSymbol(math, main, rel, \"\\u2199\", \"\\\\swarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21bd\", \"\\\\leftharpoondown\", true);\ndefineSymbol(math, main, rel, \"\\u21c1\", \"\\\\rightharpoondown\", true);\ndefineSymbol(math, main, rel, \"\\u2196\", \"\\\\nwarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21cc\", \"\\\\rightleftharpoons\", true); // AMS Negated Binary Relations\n\ndefineSymbol(math, ams, rel, \"\\u226e\", \"\\\\nless\", true); // Symbol names preceded by \"@\" each have a corresponding macro.\n\ndefineSymbol(math, ams, rel, \"\\ue010\", \"\\\\@nleqslant\");\ndefineSymbol(math, ams, rel, \"\\ue011\", \"\\\\@nleqq\");\ndefineSymbol(math, ams, rel, \"\\u2a87\", \"\\\\lneq\", true);\ndefineSymbol(math, ams, rel, \"\\u2268\", \"\\\\lneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue00c\", \"\\\\@lvertneqq\");\ndefineSymbol(math, ams, rel, \"\\u22e6\", \"\\\\lnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a89\", \"\\\\lnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2280\", \"\\\\nprec\", true); // unicode-math maps \\u22e0 to \\npreccurlyeq. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u22e0\", \"\\\\npreceq\", true);\ndefineSymbol(math, ams, rel, \"\\u22e8\", \"\\\\precnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab9\", \"\\\\precnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2241\", \"\\\\nsim\", true);\ndefineSymbol(math, ams, rel, \"\\ue006\", \"\\\\@nshortmid\");\ndefineSymbol(math, ams, rel, \"\\u2224\", \"\\\\nmid\", true);\ndefineSymbol(math, ams, rel, \"\\u22ac\", \"\\\\nvdash\", true);\ndefineSymbol(math, ams, rel, \"\\u22ad\", \"\\\\nvDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22ea\", \"\\\\ntriangleleft\");\ndefineSymbol(math, ams, rel, \"\\u22ec\", \"\\\\ntrianglelefteq\", true);\ndefineSymbol(math, ams, rel, \"\\u228a\", \"\\\\subsetneq\", true);\ndefineSymbol(math, ams, rel, \"\\ue01a\", \"\\\\@varsubsetneq\");\ndefineSymbol(math, ams, rel, \"\\u2acb\", \"\\\\subsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue017\", \"\\\\@varsubsetneqq\");\ndefineSymbol(math, ams, rel, \"\\u226f\", \"\\\\ngtr\", true);\ndefineSymbol(math, ams, rel, \"\\ue00f\", \"\\\\@ngeqslant\");\ndefineSymbol(math, ams, rel, \"\\ue00e\", \"\\\\@ngeqq\");\ndefineSymbol(math, ams, rel, \"\\u2a88\", \"\\\\gneq\", true);\ndefineSymbol(math, ams, rel, \"\\u2269\", \"\\\\gneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue00d\", \"\\\\@gvertneqq\");\ndefineSymbol(math, ams, rel, \"\\u22e7\", \"\\\\gnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8a\", \"\\\\gnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2281\", \"\\\\nsucc\", true); // unicode-math maps \\u22e1 to \\nsucccurlyeq. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u22e1\", \"\\\\nsucceq\", true);\ndefineSymbol(math, ams, rel, \"\\u22e9\", \"\\\\succnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2aba\", \"\\\\succnapprox\", true); // unicode-math maps \\u2246 to \\simneqq. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u2246\", \"\\\\ncong\", true);\ndefineSymbol(math, ams, rel, \"\\ue007\", \"\\\\@nshortparallel\");\ndefineSymbol(math, ams, rel, \"\\u2226\", \"\\\\nparallel\", true);\ndefineSymbol(math, ams, rel, \"\\u22af\", \"\\\\nVDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22eb\", \"\\\\ntriangleright\");\ndefineSymbol(math, ams, rel, \"\\u22ed\", \"\\\\ntrianglerighteq\", true);\ndefineSymbol(math, ams, rel, \"\\ue018\", \"\\\\@nsupseteqq\");\ndefineSymbol(math, ams, rel, \"\\u228b\", \"\\\\supsetneq\", true);\ndefineSymbol(math, ams, rel, \"\\ue01b\", \"\\\\@varsupsetneq\");\ndefineSymbol(math, ams, rel, \"\\u2acc\", \"\\\\supsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue019\", \"\\\\@varsupsetneqq\");\ndefineSymbol(math, ams, rel, \"\\u22ae\", \"\\\\nVdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab5\", \"\\\\precneqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab6\", \"\\\\succneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue016\", \"\\\\@nsubseteqq\");\ndefineSymbol(math, ams, bin, \"\\u22b4\", \"\\\\unlhd\");\ndefineSymbol(math, ams, bin, \"\\u22b5\", \"\\\\unrhd\"); // AMS Negated Arrows\n\ndefineSymbol(math, ams, rel, \"\\u219a\", \"\\\\nleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u219b\", \"\\\\nrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21cd\", \"\\\\nLeftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21cf\", \"\\\\nRightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21ae\", \"\\\\nleftrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21ce\", \"\\\\nLeftrightarrow\", true); // AMS Misc\n\ndefineSymbol(math, ams, rel, \"\\u25b3\", \"\\\\vartriangle\");\ndefineSymbol(math, ams, textord, \"\\u210f\", \"\\\\hslash\");\ndefineSymbol(math, ams, textord, \"\\u25bd\", \"\\\\triangledown\");\ndefineSymbol(math, ams, textord, \"\\u25ca\", \"\\\\lozenge\");\ndefineSymbol(math, ams, textord, \"\\u24c8\", \"\\\\circledS\");\ndefineSymbol(math, ams, textord, \"\\u00ae\", \"\\\\circledR\");\ndefineSymbol(text, ams, textord, \"\\u00ae\", \"\\\\circledR\");\ndefineSymbol(math, ams, textord, \"\\u2221\", \"\\\\measuredangle\", true);\ndefineSymbol(math, ams, textord, \"\\u2204\", \"\\\\nexists\");\ndefineSymbol(math, ams, textord, \"\\u2127\", \"\\\\mho\");\ndefineSymbol(math, ams, textord, \"\\u2132\", \"\\\\Finv\", true);\ndefineSymbol(math, ams, textord, \"\\u2141\", \"\\\\Game\", true);\ndefineSymbol(math, ams, textord, \"\\u2035\", \"\\\\backprime\");\ndefineSymbol(math, ams, textord, \"\\u25b2\", \"\\\\blacktriangle\");\ndefineSymbol(math, ams, textord, \"\\u25bc\", \"\\\\blacktriangledown\");\ndefineSymbol(math, ams, textord, \"\\u25a0\", \"\\\\blacksquare\");\ndefineSymbol(math, ams, textord, \"\\u29eb\", \"\\\\blacklozenge\");\ndefineSymbol(math, ams, textord, \"\\u2605\", \"\\\\bigstar\");\ndefineSymbol(math, ams, textord, \"\\u2222\", \"\\\\sphericalangle\", true);\ndefineSymbol(math, ams, textord, \"\\u2201\", \"\\\\complement\", true); // unicode-math maps U+F0 to \\matheth. We map to AMS function \\eth\n\ndefineSymbol(math, ams, textord, \"\\u00f0\", \"\\\\eth\", true);\ndefineSymbol(text, main, textord, \"\\u00f0\", \"\\u00f0\");\ndefineSymbol(math, ams, textord, \"\\u2571\", \"\\\\diagup\");\ndefineSymbol(math, ams, textord, \"\\u2572\", \"\\\\diagdown\");\ndefineSymbol(math, ams, textord, \"\\u25a1\", \"\\\\square\");\ndefineSymbol(math, ams, textord, \"\\u25a1\", \"\\\\Box\");\ndefineSymbol(math, ams, textord, \"\\u25ca\", \"\\\\Diamond\"); // unicode-math maps U+A5 to \\mathyen. We map to AMS function \\yen\n\ndefineSymbol(math, ams, textord, \"\\u00a5\", \"\\\\yen\", true);\ndefineSymbol(text, ams, textord, \"\\u00a5\", \"\\\\yen\", true);\ndefineSymbol(math, ams, textord, \"\\u2713\", \"\\\\checkmark\", true);\ndefineSymbol(text, ams, textord, \"\\u2713\", \"\\\\checkmark\"); // AMS Hebrew\n\ndefineSymbol(math, ams, textord, \"\\u2136\", \"\\\\beth\", true);\ndefineSymbol(math, ams, textord, \"\\u2138\", \"\\\\daleth\", true);\ndefineSymbol(math, ams, textord, \"\\u2137\", \"\\\\gimel\", true); // AMS Greek\n\ndefineSymbol(math, ams, textord, \"\\u03dd\", \"\\\\digamma\", true);\ndefineSymbol(math, ams, textord, \"\\u03f0\", \"\\\\varkappa\"); // AMS Delimiters\n\ndefineSymbol(math, ams, open, \"\\u250c\", \"\\\\@ulcorner\", true);\ndefineSymbol(math, ams, close, \"\\u2510\", \"\\\\@urcorner\", true);\ndefineSymbol(math, ams, open, \"\\u2514\", \"\\\\@llcorner\", true);\ndefineSymbol(math, ams, close, \"\\u2518\", \"\\\\@lrcorner\", true); // AMS Binary Relations\n\ndefineSymbol(math, ams, rel, \"\\u2266\", \"\\\\leqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2a7d\", \"\\\\leqslant\", true);\ndefineSymbol(math, ams, rel, \"\\u2a95\", \"\\\\eqslantless\", true);\ndefineSymbol(math, ams, rel, \"\\u2272\", \"\\\\lesssim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a85\", \"\\\\lessapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u224a\", \"\\\\approxeq\", true);\ndefineSymbol(math, ams, bin, \"\\u22d6\", \"\\\\lessdot\");\ndefineSymbol(math, ams, rel, \"\\u22d8\", \"\\\\lll\", true);\ndefineSymbol(math, ams, rel, \"\\u2276\", \"\\\\lessgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u22da\", \"\\\\lesseqgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8b\", \"\\\\lesseqqgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2251\", \"\\\\doteqdot\");\ndefineSymbol(math, ams, rel, \"\\u2253\", \"\\\\risingdotseq\", true);\ndefineSymbol(math, ams, rel, \"\\u2252\", \"\\\\fallingdotseq\", true);\ndefineSymbol(math, ams, rel, \"\\u223d\", \"\\\\backsim\", true);\ndefineSymbol(math, ams, rel, \"\\u22cd\", \"\\\\backsimeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2ac5\", \"\\\\subseteqq\", true);\ndefineSymbol(math, ams, rel, \"\\u22d0\", \"\\\\Subset\", true);\ndefineSymbol(math, ams, rel, \"\\u228f\", \"\\\\sqsubset\", true);\ndefineSymbol(math, ams, rel, \"\\u227c\", \"\\\\preccurlyeq\", true);\ndefineSymbol(math, ams, rel, \"\\u22de\", \"\\\\curlyeqprec\", true);\ndefineSymbol(math, ams, rel, \"\\u227e\", \"\\\\precsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab7\", \"\\\\precapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u22b2\", \"\\\\vartriangleleft\");\ndefineSymbol(math, ams, rel, \"\\u22b4\", \"\\\\trianglelefteq\");\ndefineSymbol(math, ams, rel, \"\\u22a8\", \"\\\\vDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22aa\", \"\\\\Vvdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2323\", \"\\\\smallsmile\");\ndefineSymbol(math, ams, rel, \"\\u2322\", \"\\\\smallfrown\");\ndefineSymbol(math, ams, rel, \"\\u224f\", \"\\\\bumpeq\", true);\ndefineSymbol(math, ams, rel, \"\\u224e\", \"\\\\Bumpeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2267\", \"\\\\geqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2a7e\", \"\\\\geqslant\", true);\ndefineSymbol(math, ams, rel, \"\\u2a96\", \"\\\\eqslantgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2273\", \"\\\\gtrsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a86\", \"\\\\gtrapprox\", true);\ndefineSymbol(math, ams, bin, \"\\u22d7\", \"\\\\gtrdot\");\ndefineSymbol(math, ams, rel, \"\\u22d9\", \"\\\\ggg\", true);\ndefineSymbol(math, ams, rel, \"\\u2277\", \"\\\\gtrless\", true);\ndefineSymbol(math, ams, rel, \"\\u22db\", \"\\\\gtreqless\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8c\", \"\\\\gtreqqless\", true);\ndefineSymbol(math, ams, rel, \"\\u2256\", \"\\\\eqcirc\", true);\ndefineSymbol(math, ams, rel, \"\\u2257\", \"\\\\circeq\", true);\ndefineSymbol(math, ams, rel, \"\\u225c\", \"\\\\triangleq\", true);\ndefineSymbol(math, ams, rel, \"\\u223c\", \"\\\\thicksim\");\ndefineSymbol(math, ams, rel, \"\\u2248\", \"\\\\thickapprox\");\ndefineSymbol(math, ams, rel, \"\\u2ac6\", \"\\\\supseteqq\", true);\ndefineSymbol(math, ams, rel, \"\\u22d1\", \"\\\\Supset\", true);\ndefineSymbol(math, ams, rel, \"\\u2290\", \"\\\\sqsupset\", true);\ndefineSymbol(math, ams, rel, \"\\u227d\", \"\\\\succcurlyeq\", true);\ndefineSymbol(math, ams, rel, \"\\u22df\", \"\\\\curlyeqsucc\", true);\ndefineSymbol(math, ams, rel, \"\\u227f\", \"\\\\succsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab8\", \"\\\\succapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u22b3\", \"\\\\vartriangleright\");\ndefineSymbol(math, ams, rel, \"\\u22b5\", \"\\\\trianglerighteq\");\ndefineSymbol(math, ams, rel, \"\\u22a9\", \"\\\\Vdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2223\", \"\\\\shortmid\");\ndefineSymbol(math, ams, rel, \"\\u2225\", \"\\\\shortparallel\");\ndefineSymbol(math, ams, rel, \"\\u226c\", \"\\\\between\", true);\ndefineSymbol(math, ams, rel, \"\\u22d4\", \"\\\\pitchfork\", true);\ndefineSymbol(math, ams, rel, \"\\u221d\", \"\\\\varpropto\");\ndefineSymbol(math, ams, rel, \"\\u25c0\", \"\\\\blacktriangleleft\"); // unicode-math says that \\therefore is a mathord atom.\n// We kept the amssymb atom type, which is rel.\n\ndefineSymbol(math, ams, rel, \"\\u2234\", \"\\\\therefore\", true);\ndefineSymbol(math, ams, rel, \"\\u220d\", \"\\\\backepsilon\");\ndefineSymbol(math, ams, rel, \"\\u25b6\", \"\\\\blacktriangleright\"); // unicode-math says that \\because is a mathord atom.\n// We kept the amssymb atom type, which is rel.\n\ndefineSymbol(math, ams, rel, \"\\u2235\", \"\\\\because\", true);\ndefineSymbol(math, ams, rel, \"\\u22d8\", \"\\\\llless\");\ndefineSymbol(math, ams, rel, \"\\u22d9\", \"\\\\gggtr\");\ndefineSymbol(math, ams, bin, \"\\u22b2\", \"\\\\lhd\");\ndefineSymbol(math, ams, bin, \"\\u22b3\", \"\\\\rhd\");\ndefineSymbol(math, ams, rel, \"\\u2242\", \"\\\\eqsim\", true);\ndefineSymbol(math, main, rel, \"\\u22c8\", \"\\\\Join\");\ndefineSymbol(math, ams, rel, \"\\u2251\", \"\\\\Doteq\", true); // AMS Binary Operators\n\ndefineSymbol(math, ams, bin, \"\\u2214\", \"\\\\dotplus\", true);\ndefineSymbol(math, ams, bin, \"\\u2216\", \"\\\\smallsetminus\");\ndefineSymbol(math, ams, bin, \"\\u22d2\", \"\\\\Cap\", true);\ndefineSymbol(math, ams, bin, \"\\u22d3\", \"\\\\Cup\", true);\ndefineSymbol(math, ams, bin, \"\\u2a5e\", \"\\\\doublebarwedge\", true);\ndefineSymbol(math, ams, bin, \"\\u229f\", \"\\\\boxminus\", true);\ndefineSymbol(math, ams, bin, \"\\u229e\", \"\\\\boxplus\", true);\ndefineSymbol(math, ams, bin, \"\\u22c7\", \"\\\\divideontimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22c9\", \"\\\\ltimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22ca\", \"\\\\rtimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cb\", \"\\\\leftthreetimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cc\", \"\\\\rightthreetimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cf\", \"\\\\curlywedge\", true);\ndefineSymbol(math, ams, bin, \"\\u22ce\", \"\\\\curlyvee\", true);\ndefineSymbol(math, ams, bin, \"\\u229d\", \"\\\\circleddash\", true);\ndefineSymbol(math, ams, bin, \"\\u229b\", \"\\\\circledast\", true);\ndefineSymbol(math, ams, bin, \"\\u22c5\", \"\\\\centerdot\");\ndefineSymbol(math, ams, bin, \"\\u22ba\", \"\\\\intercal\", true);\ndefineSymbol(math, ams, bin, \"\\u22d2\", \"\\\\doublecap\");\ndefineSymbol(math, ams, bin, \"\\u22d3\", \"\\\\doublecup\");\ndefineSymbol(math, ams, bin, \"\\u22a0\", \"\\\\boxtimes\", true); // AMS Arrows\n// Note: unicode-math maps \\u21e2 to their own function \\rightdasharrow.\n// We'll map it to AMS function \\dashrightarrow. It produces the same atom.\n\ndefineSymbol(math, ams, rel, \"\\u21e2\", \"\\\\dashrightarrow\", true); // unicode-math maps \\u21e0 to \\leftdasharrow. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u21e0\", \"\\\\dashleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21c7\", \"\\\\leftleftarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21c6\", \"\\\\leftrightarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21da\", \"\\\\Lleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u219e\", \"\\\\twoheadleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21a2\", \"\\\\leftarrowtail\", true);\ndefineSymbol(math, ams, rel, \"\\u21ab\", \"\\\\looparrowleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21cb\", \"\\\\leftrightharpoons\", true);\ndefineSymbol(math, ams, rel, \"\\u21b6\", \"\\\\curvearrowleft\", true); // unicode-math maps \\u21ba to \\acwopencirclearrow. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u21ba\", \"\\\\circlearrowleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21b0\", \"\\\\Lsh\", true);\ndefineSymbol(math, ams, rel, \"\\u21c8\", \"\\\\upuparrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21bf\", \"\\\\upharpoonleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21c3\", \"\\\\downharpoonleft\", true);\ndefineSymbol(math, main, rel, \"\\u22b6\", \"\\\\origof\", true); // not in font\n\ndefineSymbol(math, main, rel, \"\\u22b7\", \"\\\\imageof\", true); // not in font\n\ndefineSymbol(math, ams, rel, \"\\u22b8\", \"\\\\multimap\", true);\ndefineSymbol(math, ams, rel, \"\\u21ad\", \"\\\\leftrightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21c9\", \"\\\\rightrightarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21c4\", \"\\\\rightleftarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21a0\", \"\\\\twoheadrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21a3\", \"\\\\rightarrowtail\", true);\ndefineSymbol(math, ams, rel, \"\\u21ac\", \"\\\\looparrowright\", true);\ndefineSymbol(math, ams, rel, \"\\u21b7\", \"\\\\curvearrowright\", true); // unicode-math maps \\u21bb to \\cwopencirclearrow. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u21bb\", \"\\\\circlearrowright\", true);\ndefineSymbol(math, ams, rel, \"\\u21b1\", \"\\\\Rsh\", true);\ndefineSymbol(math, ams, rel, \"\\u21ca\", \"\\\\downdownarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21be\", \"\\\\upharpoonright\", true);\ndefineSymbol(math, ams, rel, \"\\u21c2\", \"\\\\downharpoonright\", true);\ndefineSymbol(math, ams, rel, \"\\u21dd\", \"\\\\rightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21dd\", \"\\\\leadsto\");\ndefineSymbol(math, ams, rel, \"\\u21db\", \"\\\\Rrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21be\", \"\\\\restriction\");\ndefineSymbol(math, main, textord, \"\\u2018\", \"`\");\ndefineSymbol(math, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\textdollar\");\ndefineSymbol(math, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(text, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(math, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\textunderscore\");\ndefineSymbol(math, main, textord, \"\\u2220\", \"\\\\angle\", true);\ndefineSymbol(math, main, textord, \"\\u221e\", \"\\\\infty\", true);\ndefineSymbol(math, main, textord, \"\\u2032\", \"\\\\prime\");\ndefineSymbol(math, main, textord, \"\\u25b3\", \"\\\\triangle\");\ndefineSymbol(math, main, textord, \"\\u0393\", \"\\\\Gamma\", true);\ndefineSymbol(math, main, textord, \"\\u0394\", \"\\\\Delta\", true);\ndefineSymbol(math, main, textord, \"\\u0398\", \"\\\\Theta\", true);\ndefineSymbol(math, main, textord, \"\\u039b\", \"\\\\Lambda\", true);\ndefineSymbol(math, main, textord, \"\\u039e\", \"\\\\Xi\", true);\ndefineSymbol(math, main, textord, \"\\u03a0\", \"\\\\Pi\", true);\ndefineSymbol(math, main, textord, \"\\u03a3\", \"\\\\Sigma\", true);\ndefineSymbol(math, main, textord, \"\\u03a5\", \"\\\\Upsilon\", true);\ndefineSymbol(math, main, textord, \"\\u03a6\", \"\\\\Phi\", true);\ndefineSymbol(math, main, textord, \"\\u03a8\", \"\\\\Psi\", true);\ndefineSymbol(math, main, textord, \"\\u03a9\", \"\\\\Omega\", true);\ndefineSymbol(math, main, textord, \"A\", \"\\u0391\");\ndefineSymbol(math, main, textord, \"B\", \"\\u0392\");\ndefineSymbol(math, main, textord, \"E\", \"\\u0395\");\ndefineSymbol(math, main, textord, \"Z\", \"\\u0396\");\ndefineSymbol(math, main, textord, \"H\", \"\\u0397\");\ndefineSymbol(math, main, textord, \"I\", \"\\u0399\");\ndefineSymbol(math, main, textord, \"K\", \"\\u039A\");\ndefineSymbol(math, main, textord, \"M\", \"\\u039C\");\ndefineSymbol(math, main, textord, \"N\", \"\\u039D\");\ndefineSymbol(math, main, textord, \"O\", \"\\u039F\");\ndefineSymbol(math, main, textord, \"P\", \"\\u03A1\");\ndefineSymbol(math, main, textord, \"T\", \"\\u03A4\");\ndefineSymbol(math, main, textord, \"X\", \"\\u03A7\");\ndefineSymbol(math, main, textord, \"\\u00ac\", \"\\\\neg\", true);\ndefineSymbol(math, main, textord, \"\\u00ac\", \"\\\\lnot\");\ndefineSymbol(math, main, textord, \"\\u22a4\", \"\\\\top\");\ndefineSymbol(math, main, textord, \"\\u22a5\", \"\\\\bot\");\ndefineSymbol(math, main, textord, \"\\u2205\", \"\\\\emptyset\");\ndefineSymbol(math, ams, textord, \"\\u2205\", \"\\\\varnothing\");\ndefineSymbol(math, main, mathord, \"\\u03b1\", \"\\\\alpha\", true);\ndefineSymbol(math, main, mathord, \"\\u03b2\", \"\\\\beta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b3\", \"\\\\gamma\", true);\ndefineSymbol(math, main, mathord, \"\\u03b4\", \"\\\\delta\", true);\ndefineSymbol(math, main, mathord, \"\\u03f5\", \"\\\\epsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03b6\", \"\\\\zeta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b7\", \"\\\\eta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b8\", \"\\\\theta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b9\", \"\\\\iota\", true);\ndefineSymbol(math, main, mathord, \"\\u03ba\", \"\\\\kappa\", true);\ndefineSymbol(math, main, mathord, \"\\u03bb\", \"\\\\lambda\", true);\ndefineSymbol(math, main, mathord, \"\\u03bc\", \"\\\\mu\", true);\ndefineSymbol(math, main, mathord, \"\\u03bd\", \"\\\\nu\", true);\ndefineSymbol(math, main, mathord, \"\\u03be\", \"\\\\xi\", true);\ndefineSymbol(math, main, mathord, \"\\u03bf\", \"\\\\omicron\", true);\ndefineSymbol(math, main, mathord, \"\\u03c0\", \"\\\\pi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c1\", \"\\\\rho\", true);\ndefineSymbol(math, main, mathord, \"\\u03c3\", \"\\\\sigma\", true);\ndefineSymbol(math, main, mathord, \"\\u03c4\", \"\\\\tau\", true);\ndefineSymbol(math, main, mathord, \"\\u03c5\", \"\\\\upsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03d5\", \"\\\\phi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c7\", \"\\\\chi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c8\", \"\\\\psi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c9\", \"\\\\omega\", true);\ndefineSymbol(math, main, mathord, \"\\u03b5\", \"\\\\varepsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03d1\", \"\\\\vartheta\", true);\ndefineSymbol(math, main, mathord, \"\\u03d6\", \"\\\\varpi\", true);\ndefineSymbol(math, main, mathord, \"\\u03f1\", \"\\\\varrho\", true);\ndefineSymbol(math, main, mathord, \"\\u03c2\", \"\\\\varsigma\", true);\ndefineSymbol(math, main, mathord, \"\\u03c6\", \"\\\\varphi\", true);\ndefineSymbol(math, main, bin, \"\\u2217\", \"*\", true);\ndefineSymbol(math, main, bin, \"+\", \"+\");\ndefineSymbol(math, main, bin, \"\\u2212\", \"-\", true);\ndefineSymbol(math, main, bin, \"\\u22c5\", \"\\\\cdot\", true);\ndefineSymbol(math, main, bin, \"\\u2218\", \"\\\\circ\", true);\ndefineSymbol(math, main, bin, \"\\u00f7\", \"\\\\div\", true);\ndefineSymbol(math, main, bin, \"\\u00b1\", \"\\\\pm\", true);\ndefineSymbol(math, main, bin, \"\\u00d7\", \"\\\\times\", true);\ndefineSymbol(math, main, bin, \"\\u2229\", \"\\\\cap\", true);\ndefineSymbol(math, main, bin, \"\\u222a\", \"\\\\cup\", true);\ndefineSymbol(math, main, bin, \"\\u2216\", \"\\\\setminus\", true);\ndefineSymbol(math, main, bin, \"\\u2227\", \"\\\\land\");\ndefineSymbol(math, main, bin, \"\\u2228\", \"\\\\lor\");\ndefineSymbol(math, main, bin, \"\\u2227\", \"\\\\wedge\", true);\ndefineSymbol(math, main, bin, \"\\u2228\", \"\\\\vee\", true);\ndefineSymbol(math, main, textord, \"\\u221a\", \"\\\\surd\");\ndefineSymbol(math, main, open, \"\\u27e8\", \"\\\\langle\", true);\ndefineSymbol(math, main, open, \"\\u2223\", \"\\\\lvert\");\ndefineSymbol(math, main, open, \"\\u2225\", \"\\\\lVert\");\ndefineSymbol(math, main, close, \"?\", \"?\");\ndefineSymbol(math, main, close, \"!\", \"!\");\ndefineSymbol(math, main, close, \"\\u27e9\", \"\\\\rangle\", true);\ndefineSymbol(math, main, close, \"\\u2223\", \"\\\\rvert\");\ndefineSymbol(math, main, close, \"\\u2225\", \"\\\\rVert\");\ndefineSymbol(math, main, rel, \"=\", \"=\");\ndefineSymbol(math, main, rel, \":\", \":\");\ndefineSymbol(math, main, rel, \"\\u2248\", \"\\\\approx\", true);\ndefineSymbol(math, main, rel, \"\\u2245\", \"\\\\cong\", true);\ndefineSymbol(math, main, rel, \"\\u2265\", \"\\\\ge\");\ndefineSymbol(math, main, rel, \"\\u2265\", \"\\\\geq\", true);\ndefineSymbol(math, main, rel, \"\\u2190\", \"\\\\gets\");\ndefineSymbol(math, main, rel, \">\", \"\\\\gt\", true);\ndefineSymbol(math, main, rel, \"\\u2208\", \"\\\\in\", true);\ndefineSymbol(math, main, rel, \"\\ue020\", \"\\\\@not\");\ndefineSymbol(math, main, rel, \"\\u2282\", \"\\\\subset\", true);\ndefineSymbol(math, main, rel, \"\\u2283\", \"\\\\supset\", true);\ndefineSymbol(math, main, rel, \"\\u2286\", \"\\\\subseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2287\", \"\\\\supseteq\", true);\ndefineSymbol(math, ams, rel, \"\\u2288\", \"\\\\nsubseteq\", true);\ndefineSymbol(math, ams, rel, \"\\u2289\", \"\\\\nsupseteq\", true);\ndefineSymbol(math, main, rel, \"\\u22a8\", \"\\\\models\");\ndefineSymbol(math, main, rel, \"\\u2190\", \"\\\\leftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2264\", \"\\\\le\");\ndefineSymbol(math, main, rel, \"\\u2264\", \"\\\\leq\", true);\ndefineSymbol(math, main, rel, \"<\", \"\\\\lt\", true);\ndefineSymbol(math, main, rel, \"\\u2192\", \"\\\\rightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2192\", \"\\\\to\");\ndefineSymbol(math, ams, rel, \"\\u2271\", \"\\\\ngeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2270\", \"\\\\nleq\", true);\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\space\"); // Ref: LaTeX Source 2e: \\DeclareRobustCommand{\\nobreakspace}{%\n\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\nobreakspace\");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \" \");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\space\");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\nobreakspace\");\ndefineSymbol(math, main, spacing, null, \"\\\\nobreak\");\ndefineSymbol(math, main, spacing, null, \"\\\\allowbreak\");\ndefineSymbol(math, main, punct, \",\", \",\");\ndefineSymbol(math, main, punct, \";\", \";\");\ndefineSymbol(math, ams, bin, \"\\u22bc\", \"\\\\barwedge\", true);\ndefineSymbol(math, ams, bin, \"\\u22bb\", \"\\\\veebar\", true);\ndefineSymbol(math, main, bin, \"\\u2299\", \"\\\\odot\", true);\ndefineSymbol(math, main, bin, \"\\u2295\", \"\\\\oplus\", true);\ndefineSymbol(math, main, bin, \"\\u2297\", \"\\\\otimes\", true);\ndefineSymbol(math, main, textord, \"\\u2202\", \"\\\\partial\", true);\ndefineSymbol(math, main, bin, \"\\u2298\", \"\\\\oslash\", true);\ndefineSymbol(math, ams, bin, \"\\u229a\", \"\\\\circledcirc\", true);\ndefineSymbol(math, ams, bin, \"\\u22a1\", \"\\\\boxdot\", true);\ndefineSymbol(math, main, bin, \"\\u25b3\", \"\\\\bigtriangleup\");\ndefineSymbol(math, main, bin, \"\\u25bd\", \"\\\\bigtriangledown\");\ndefineSymbol(math, main, bin, \"\\u2020\", \"\\\\dagger\");\ndefineSymbol(math, main, bin, \"\\u22c4\", \"\\\\diamond\");\ndefineSymbol(math, main, bin, \"\\u22c6\", \"\\\\star\");\ndefineSymbol(math, main, bin, \"\\u25c3\", \"\\\\triangleleft\");\ndefineSymbol(math, main, bin, \"\\u25b9\", \"\\\\triangleright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\textbraceleft\");\ndefineSymbol(math, main, close, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\textbraceright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\lbrace\");\ndefineSymbol(math, main, close, \"}\", \"\\\\rbrace\");\ndefineSymbol(math, main, open, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(text, main, textord, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(math, main, close, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(text, main, textord, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(math, main, open, \"(\", \"\\\\lparen\", true);\ndefineSymbol(math, main, close, \")\", \"\\\\rparen\", true);\ndefineSymbol(text, main, textord, \"<\", \"\\\\textless\", true); // in T1 fontenc\n\ndefineSymbol(text, main, textord, \">\", \"\\\\textgreater\", true); // in T1 fontenc\n\ndefineSymbol(math, main, open, \"\\u230a\", \"\\\\lfloor\", true);\ndefineSymbol(math, main, close, \"\\u230b\", \"\\\\rfloor\", true);\ndefineSymbol(math, main, open, \"\\u2308\", \"\\\\lceil\", true);\ndefineSymbol(math, main, close, \"\\u2309\", \"\\\\rceil\", true);\ndefineSymbol(math, main, textord, \"\\\\\", \"\\\\backslash\");\ndefineSymbol(math, main, textord, \"\\u2223\", \"|\");\ndefineSymbol(math, main, textord, \"\\u2223\", \"\\\\vert\");\ndefineSymbol(text, main, textord, \"|\", \"\\\\textbar\", true); // in T1 fontenc\n\ndefineSymbol(math, main, textord, \"\\u2225\", \"\\\\|\");\ndefineSymbol(math, main, textord, \"\\u2225\", \"\\\\Vert\");\ndefineSymbol(text, main, textord, \"\\u2225\", \"\\\\textbardbl\");\ndefineSymbol(text, main, textord, \"~\", \"\\\\textasciitilde\");\ndefineSymbol(text, main, textord, \"\\\\\", \"\\\\textbackslash\");\ndefineSymbol(text, main, textord, \"^\", \"\\\\textasciicircum\");\ndefineSymbol(math, main, rel, \"\\u2191\", \"\\\\uparrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d1\", \"\\\\Uparrow\", true);\ndefineSymbol(math, main, rel, \"\\u2193\", \"\\\\downarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d3\", \"\\\\Downarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2195\", \"\\\\updownarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d5\", \"\\\\Updownarrow\", true);\ndefineSymbol(math, main, op, \"\\u2210\", \"\\\\coprod\");\ndefineSymbol(math, main, op, \"\\u22c1\", \"\\\\bigvee\");\ndefineSymbol(math, main, op, \"\\u22c0\", \"\\\\bigwedge\");\ndefineSymbol(math, main, op, \"\\u2a04\", \"\\\\biguplus\");\ndefineSymbol(math, main, op, \"\\u22c2\", \"\\\\bigcap\");\ndefineSymbol(math, main, op, \"\\u22c3\", \"\\\\bigcup\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\int\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\intop\");\ndefineSymbol(math, main, op, \"\\u222c\", \"\\\\iint\");\ndefineSymbol(math, main, op, \"\\u222d\", \"\\\\iiint\");\ndefineSymbol(math, main, op, \"\\u220f\", \"\\\\prod\");\ndefineSymbol(math, main, op, \"\\u2211\", \"\\\\sum\");\ndefineSymbol(math, main, op, \"\\u2a02\", \"\\\\bigotimes\");\ndefineSymbol(math, main, op, \"\\u2a01\", \"\\\\bigoplus\");\ndefineSymbol(math, main, op, \"\\u2a00\", \"\\\\bigodot\");\ndefineSymbol(math, main, op, \"\\u222e\", \"\\\\oint\");\ndefineSymbol(math, main, op, \"\\u222f\", \"\\\\oiint\");\ndefineSymbol(math, main, op, \"\\u2230\", \"\\\\oiiint\");\ndefineSymbol(math, main, op, \"\\u2a06\", \"\\\\bigsqcup\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\smallint\");\ndefineSymbol(text, main, inner, \"\\u2026\", \"\\\\textellipsis\");\ndefineSymbol(math, main, inner, \"\\u2026\", \"\\\\mathellipsis\");\ndefineSymbol(text, main, inner, \"\\u2026\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"\\u2026\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"\\u22ef\", \"\\\\@cdots\", true);\ndefineSymbol(math, main, inner, \"\\u22f1\", \"\\\\ddots\", true); // \\vdots is a macro that uses one of these two symbols (with made-up names):\n\ndefineSymbol(math, main, textord, \"\\u22ee\", \"\\\\varvdots\");\ndefineSymbol(text, main, textord, \"\\u22ee\", \"\\\\varvdots\");\ndefineSymbol(math, main, accent, \"\\u02ca\", \"\\\\acute\");\ndefineSymbol(math, main, accent, \"\\u02cb\", \"\\\\grave\");\ndefineSymbol(math, main, accent, \"\\u00a8\", \"\\\\ddot\");\ndefineSymbol(math, main, accent, \"\\u007e\", \"\\\\tilde\");\ndefineSymbol(math, main, accent, \"\\u02c9\", \"\\\\bar\");\ndefineSymbol(math, main, accent, \"\\u02d8\", \"\\\\breve\");\ndefineSymbol(math, main, accent, \"\\u02c7\", \"\\\\check\");\ndefineSymbol(math, main, accent, \"\\u005e\", \"\\\\hat\");\ndefineSymbol(math, main, accent, \"\\u20d7\", \"\\\\vec\");\ndefineSymbol(math, main, accent, \"\\u02d9\", \"\\\\dot\");\ndefineSymbol(math, main, accent, \"\\u02da\", \"\\\\mathring\"); // \\imath and \\jmath should be invariant to \\mathrm, \\mathbf, etc., so use PUA\n\ndefineSymbol(math, main, mathord, \"\\ue131\", \"\\\\@imath\");\ndefineSymbol(math, main, mathord, \"\\ue237\", \"\\\\@jmath\");\ndefineSymbol(math, main, textord, \"\\u0131\", \"\\u0131\");\ndefineSymbol(math, main, textord, \"\\u0237\", \"\\u0237\");\ndefineSymbol(text, main, textord, \"\\u0131\", \"\\\\i\", true);\ndefineSymbol(text, main, textord, \"\\u0237\", \"\\\\j\", true);\ndefineSymbol(text, main, textord, \"\\u00df\", \"\\\\ss\", true);\ndefineSymbol(text, main, textord, \"\\u00e6\", \"\\\\ae\", true);\ndefineSymbol(text, main, textord, \"\\u0153\", \"\\\\oe\", true);\ndefineSymbol(text, main, textord, \"\\u00f8\", \"\\\\o\", true);\ndefineSymbol(text, main, textord, \"\\u00c6\", \"\\\\AE\", true);\ndefineSymbol(text, main, textord, \"\\u0152\", \"\\\\OE\", true);\ndefineSymbol(text, main, textord, \"\\u00d8\", \"\\\\O\", true);\ndefineSymbol(text, main, accent, \"\\u02ca\", \"\\\\'\"); // acute\n\ndefineSymbol(text, main, accent, \"\\u02cb\", \"\\\\`\"); // grave\n\ndefineSymbol(text, main, accent, \"\\u02c6\", \"\\\\^\"); // circumflex\n\ndefineSymbol(text, main, accent, \"\\u02dc\", \"\\\\~\"); // tilde\n\ndefineSymbol(text, main, accent, \"\\u02c9\", \"\\\\=\"); // macron\n\ndefineSymbol(text, main, accent, \"\\u02d8\", \"\\\\u\"); // breve\n\ndefineSymbol(text, main, accent, \"\\u02d9\", \"\\\\.\"); // dot above\n\ndefineSymbol(text, main, accent, \"\\u00b8\", \"\\\\c\"); // cedilla\n\ndefineSymbol(text, main, accent, \"\\u02da\", \"\\\\r\"); // ring above\n\ndefineSymbol(text, main, accent, \"\\u02c7\", \"\\\\v\"); // caron\n\ndefineSymbol(text, main, accent, \"\\u00a8\", '\\\\\"'); // diaeresis\n\ndefineSymbol(text, main, accent, \"\\u02dd\", \"\\\\H\"); // double acute\n\ndefineSymbol(text, main, accent, \"\\u25ef\", \"\\\\textcircled\"); // \\bigcirc glyph\n// These ligatures are detected and created in Parser.js's `formLigatures`.\n\nvar ligatures = {\n  \"--\": true,\n  \"---\": true,\n  \"``\": true,\n  \"''\": true\n};\ndefineSymbol(text, main, textord, \"\\u2013\", \"--\", true);\ndefineSymbol(text, main, textord, \"\\u2013\", \"\\\\textendash\");\ndefineSymbol(text, main, textord, \"\\u2014\", \"---\", true);\ndefineSymbol(text, main, textord, \"\\u2014\", \"\\\\textemdash\");\ndefineSymbol(text, main, textord, \"\\u2018\", \"`\", true);\ndefineSymbol(text, main, textord, \"\\u2018\", \"\\\\textquoteleft\");\ndefineSymbol(text, main, textord, \"\\u2019\", \"'\", true);\ndefineSymbol(text, main, textord, \"\\u2019\", \"\\\\textquoteright\");\ndefineSymbol(text, main, textord, \"\\u201c\", \"``\", true);\ndefineSymbol(text, main, textord, \"\\u201c\", \"\\\\textquotedblleft\");\ndefineSymbol(text, main, textord, \"\\u201d\", \"''\", true);\ndefineSymbol(text, main, textord, \"\\u201d\", \"\\\\textquotedblright\"); //  \\degree from gensymb package\n\ndefineSymbol(math, main, textord, \"\\u00b0\", \"\\\\degree\", true);\ndefineSymbol(text, main, textord, \"\\u00b0\", \"\\\\degree\"); // \\textdegree from inputenc package\n\ndefineSymbol(text, main, textord, \"\\u00b0\", \"\\\\textdegree\", true); // TODO: In LaTeX, \\pounds can generate a different character in text and math\n// mode, but among our fonts, only Main-Regular defines this character \"163\".\n\ndefineSymbol(math, main, textord, \"\\u00a3\", \"\\\\pounds\");\ndefineSymbol(math, main, textord, \"\\u00a3\", \"\\\\mathsterling\", true);\ndefineSymbol(text, main, textord, \"\\u00a3\", \"\\\\pounds\");\ndefineSymbol(text, main, textord, \"\\u00a3\", \"\\\\textsterling\", true);\ndefineSymbol(math, ams, textord, \"\\u2720\", \"\\\\maltese\");\ndefineSymbol(text, ams, textord, \"\\u2720\", \"\\\\maltese\"); // There are lots of symbols which are the same, so we add them in afterwards.\n// All of these are textords in math mode\n\nvar mathTextSymbols = \"0123456789/@.\\\"\";\n\nfor (var i = 0; i < mathTextSymbols.length; i++) {\n  var ch = mathTextSymbols.charAt(i);\n  defineSymbol(math, main, textord, ch, ch);\n} // All of these are textords in text mode\n\n\nvar textSymbols = \"0123456789!@*()-=+\\\";:?/.,\";\n\nfor (var _i = 0; _i < textSymbols.length; _i++) {\n  var _ch = textSymbols.charAt(_i);\n\n  defineSymbol(text, main, textord, _ch, _ch);\n} // All of these are textords in text mode, and mathords in math mode\n\n\nvar letters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\nfor (var _i2 = 0; _i2 < letters.length; _i2++) {\n  var _ch2 = letters.charAt(_i2);\n\n  defineSymbol(math, main, mathord, _ch2, _ch2);\n  defineSymbol(text, main, textord, _ch2, _ch2);\n} // Blackboard bold and script letters in Unicode range\n\n\ndefineSymbol(math, ams, textord, \"C\", \"\\u2102\"); // blackboard bold\n\ndefineSymbol(text, ams, textord, \"C\", \"\\u2102\");\ndefineSymbol(math, ams, textord, \"H\", \"\\u210D\");\ndefineSymbol(text, ams, textord, \"H\", \"\\u210D\");\ndefineSymbol(math, ams, textord, \"N\", \"\\u2115\");\ndefineSymbol(text, ams, textord, \"N\", \"\\u2115\");\ndefineSymbol(math, ams, textord, \"P\", \"\\u2119\");\ndefineSymbol(text, ams, textord, \"P\", \"\\u2119\");\ndefineSymbol(math, ams, textord, \"Q\", \"\\u211A\");\ndefineSymbol(text, ams, textord, \"Q\", \"\\u211A\");\ndefineSymbol(math, ams, textord, \"R\", \"\\u211D\");\ndefineSymbol(text, ams, textord, \"R\", \"\\u211D\");\ndefineSymbol(math, ams, textord, \"Z\", \"\\u2124\");\ndefineSymbol(text, ams, textord, \"Z\", \"\\u2124\");\ndefineSymbol(math, main, mathord, \"h\", \"\\u210E\"); // italic h, Planck constant\n\ndefineSymbol(text, main, mathord, \"h\", \"\\u210E\"); // The next loop loads wide (surrogate pair) characters.\n// We support some letters in the Unicode range U+1D400 to U+1D7FF,\n// Mathematical Alphanumeric Symbols.\n// Some editors do not deal well with wide characters. So don't write the\n// string into this file. Instead, create the string from the surrogate pair.\n\nvar wideChar = \"\";\n\nfor (var _i3 = 0; _i3 < letters.length; _i3++) {\n  var _ch3 = letters.charAt(_i3); // The hex numbers in the next line are a surrogate pair.\n  // 0xD835 is the high surrogate for all letters in the range we support.\n  // 0xDC00 is the low surrogate for bold A.\n\n\n  wideChar = String.fromCharCode(0xD835, 0xDC00 + _i3); // A-Z a-z bold\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDC34 + _i3); // A-Z a-z italic\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDC68 + _i3); // A-Z a-z bold italic\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDD04 + _i3); // A-Z a-z Fraktur\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDD6C + _i3); // A-Z a-z bold Fraktur\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDDA0 + _i3); // A-Z a-z sans-serif\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDDD4 + _i3); // A-Z a-z sans bold\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDE08 + _i3); // A-Z a-z sans italic\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDE70 + _i3); // A-Z a-z monospace\n\n  defineSymbol(math, main, mathord, _ch3, wideChar);\n  defineSymbol(text, main, textord, _ch3, wideChar);\n\n  if (_i3 < 26) {\n    // KaTeX fonts have only capital letters for blackboard bold and script.\n    // See exception for k below.\n    wideChar = String.fromCharCode(0xD835, 0xDD38 + _i3); // A-Z double struck\n\n    defineSymbol(math, main, mathord, _ch3, wideChar);\n    defineSymbol(text, main, textord, _ch3, wideChar);\n    wideChar = String.fromCharCode(0xD835, 0xDC9C + _i3); // A-Z script\n\n    defineSymbol(math, main, mathord, _ch3, wideChar);\n    defineSymbol(text, main, textord, _ch3, wideChar);\n  } // TODO: Add bold script when it is supported by a KaTeX font.\n\n} // \"k\" is the only double struck lower case letter in the KaTeX fonts.\n\n\nwideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck\n\ndefineSymbol(math, main, mathord, \"k\", wideChar);\ndefineSymbol(text, main, textord, \"k\", wideChar); // Next, some wide character numerals\n\nfor (var _i4 = 0; _i4 < 10; _i4++) {\n  var _ch4 = _i4.toString();\n\n  wideChar = String.fromCharCode(0xD835, 0xDFCE + _i4); // 0-9 bold\n\n  defineSymbol(math, main, mathord, _ch4, wideChar);\n  defineSymbol(text, main, textord, _ch4, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDFE2 + _i4); // 0-9 sans serif\n\n  defineSymbol(math, main, mathord, _ch4, wideChar);\n  defineSymbol(text, main, textord, _ch4, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDFEC + _i4); // 0-9 bold sans\n\n  defineSymbol(math, main, mathord, _ch4, wideChar);\n  defineSymbol(text, main, textord, _ch4, wideChar);\n  wideChar = String.fromCharCode(0xD835, 0xDFF6 + _i4); // 0-9 monospace\n\n  defineSymbol(math, main, mathord, _ch4, wideChar);\n  defineSymbol(text, main, textord, _ch4, wideChar);\n} // We add these Latin-1 letters as symbols for backwards-compatibility,\n// but they are not actually in the font, nor are they supported by the\n// Unicode accent mechanism, so they fall back to Times font and look ugly.\n// TODO(edemaine): Fix this.\n\n\nvar extraLatin = \"\\u00d0\\u00de\\u00fe\";\n\nfor (var _i5 = 0; _i5 < extraLatin.length; _i5++) {\n  var _ch5 = extraLatin.charAt(_i5);\n\n  defineSymbol(math, main, mathord, _ch5, _ch5);\n  defineSymbol(text, main, textord, _ch5, _ch5);\n}\n\n/**\n * This file provides support for Unicode range U+1D400 to U+1D7FF,\n * Mathematical Alphanumeric Symbols.\n *\n * Function wideCharacterFont takes a wide character as input and returns\n * the font information necessary to render it properly.\n */\n/**\n * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf\n * That document sorts characters into groups by font type, say bold or italic.\n *\n * In the arrays below, each subarray consists three elements:\n *      * The CSS class of that group when in math mode.\n *      * The CSS class of that group when in text mode.\n *      * The font name, so that KaTeX can get font metrics.\n */\n\nvar wideLatinLetterData = [[\"mathbf\", \"textbf\", \"Main-Bold\"], // A-Z bold upright\n[\"mathbf\", \"textbf\", \"Main-Bold\"], // a-z bold upright\n[\"mathnormal\", \"textit\", \"Math-Italic\"], // A-Z italic\n[\"mathnormal\", \"textit\", \"Math-Italic\"], // a-z italic\n[\"boldsymbol\", \"boldsymbol\", \"Main-BoldItalic\"], // A-Z bold italic\n[\"boldsymbol\", \"boldsymbol\", \"Main-BoldItalic\"], // a-z bold italic\n// Map fancy A-Z letters to script, not calligraphic.\n// This aligns with unicode-math and math fonts (except Cambria Math).\n[\"mathscr\", \"textscr\", \"Script-Regular\"], // A-Z script\n[\"\", \"\", \"\"], // a-z script.  No font\n[\"\", \"\", \"\"], // A-Z bold script. No font\n[\"\", \"\", \"\"], // a-z bold script. No font\n[\"mathfrak\", \"textfrak\", \"Fraktur-Regular\"], // A-Z Fraktur\n[\"mathfrak\", \"textfrak\", \"Fraktur-Regular\"], // a-z Fraktur\n[\"mathbb\", \"textbb\", \"AMS-Regular\"], // A-Z double-struck\n[\"mathbb\", \"textbb\", \"AMS-Regular\"], // k double-struck\n// Note that we are using a bold font, but font metrics for regular Fraktur.\n[\"mathboldfrak\", \"textboldfrak\", \"Fraktur-Regular\"], // A-Z bold Fraktur\n[\"mathboldfrak\", \"textboldfrak\", \"Fraktur-Regular\"], // a-z bold Fraktur\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"], // A-Z sans-serif\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"], // a-z sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"], // A-Z bold sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"], // a-z bold sans-serif\n[\"mathitsf\", \"textitsf\", \"SansSerif-Italic\"], // A-Z italic sans-serif\n[\"mathitsf\", \"textitsf\", \"SansSerif-Italic\"], // a-z italic sans-serif\n[\"\", \"\", \"\"], // A-Z bold italic sans. No font\n[\"\", \"\", \"\"], // a-z bold italic sans. No font\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"], // A-Z monospace\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"] // a-z monospace\n];\nvar wideNumeralData = [[\"mathbf\", \"textbf\", \"Main-Bold\"], // 0-9 bold\n[\"\", \"\", \"\"], // 0-9 double-struck. No KaTeX font.\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"], // 0-9 sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"], // 0-9 bold sans-serif\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"] // 0-9 monospace\n];\nvar wideCharacterFont = function wideCharacterFont(wideChar, mode) {\n  // IE doesn't support codePointAt(). So work with the surrogate pair.\n  var H = wideChar.charCodeAt(0); // high surrogate\n\n  var L = wideChar.charCodeAt(1); // low surrogate\n\n  var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000;\n  var j = mode === \"math\" ? 0 : 1; // column index for CSS class.\n\n  if (0x1D400 <= codePoint && codePoint < 0x1D6A4) {\n    // wideLatinLetterData contains exactly 26 chars on each row.\n    // So we can calculate the relevant row. No traverse necessary.\n    var i = Math.floor((codePoint - 0x1D400) / 26);\n    return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]];\n  } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) {\n    // Numerals, ten per row.\n    var _i = Math.floor((codePoint - 0x1D7CE) / 10);\n\n    return [wideNumeralData[_i][2], wideNumeralData[_i][j]];\n  } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) {\n    // dotless i or j\n    return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]];\n  } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) {\n    // Greek letters. Not supported, yet.\n    return [\"\", \"\"];\n  } else {\n    // We don't support any wide characters outside 1D400–1D7FF.\n    throw new ParseError(\"Unsupported character: \" + wideChar);\n  }\n};\n\n/* eslint no-console:0 */\n\n/**\n * Looks up the given symbol in fontMetrics, after applying any symbol\n * replacements defined in symbol.js\n */\nvar lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this.\nfontName, mode) {\n  // Replace the value with its replaced value from symbol.js\n  if (symbols[mode][value] && symbols[mode][value].replace) {\n    value = symbols[mode][value].replace;\n  }\n\n  return {\n    value: value,\n    metrics: getCharacterMetrics(value, fontName, mode)\n  };\n};\n/**\n * Makes a symbolNode after translation via the list of symbols in symbols.js.\n * Correctly pulls out metrics for the character, and optionally takes a list of\n * classes to be attached to the node.\n *\n * TODO: make argument order closer to makeSpan\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n * TODO(#953): Make `options` mandatory and always pass it in.\n */\n\n\nvar makeSymbol = function makeSymbol(value, fontName, mode, options, classes) {\n  var lookup = lookupSymbol(value, fontName, mode);\n  var metrics = lookup.metrics;\n  value = lookup.value;\n  var symbolNode;\n\n  if (metrics) {\n    var italic = metrics.italic;\n\n    if (mode === \"text\" || options && options.font === \"mathit\") {\n      italic = 0;\n    }\n\n    symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes);\n  } else {\n    // TODO(emily): Figure out a good way to only print this in development\n    typeof console !== \"undefined\" && console.warn(\"No character metrics \" + (\"for '\" + value + \"' in style '\" + fontName + \"' and mode '\" + mode + \"'\"));\n    symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes);\n  }\n\n  if (options) {\n    symbolNode.maxFontSize = options.sizeMultiplier;\n\n    if (options.style.isTight()) {\n      symbolNode.classes.push(\"mtight\");\n    }\n\n    var color = options.getColor();\n\n    if (color) {\n      symbolNode.style.color = color;\n    }\n  }\n\n  return symbolNode;\n};\n/**\n * Makes a symbol in Main-Regular or AMS-Regular.\n * Used for rel, bin, open, close, inner, and punct.\n */\n\n\nvar mathsym = function mathsym(value, mode, options, classes) {\n  if (classes === void 0) {\n    classes = [];\n  }\n\n  // Decide what font to render the symbol in by its entry in the symbols\n  // table.\n  // Have a special case for when the value = \\ because the \\ is used as a\n  // textord in unsupported command errors but cannot be parsed as a regular\n  // text ordinal and is therefore not present as a symbol in the symbols\n  // table for text, as well as a special case for boldsymbol because it\n  // can be used for bold + and -\n  if (options.font === \"boldsymbol\" && lookupSymbol(value, \"Main-Bold\", mode).metrics) {\n    return makeSymbol(value, \"Main-Bold\", mode, options, classes.concat([\"mathbf\"]));\n  } else if (value === \"\\\\\" || symbols[mode][value].font === \"main\") {\n    return makeSymbol(value, \"Main-Regular\", mode, options, classes);\n  } else {\n    return makeSymbol(value, \"AMS-Regular\", mode, options, classes.concat([\"amsrm\"]));\n  }\n};\n/**\n * Determines which of the two font names (Main-Bold and Math-BoldItalic) and\n * corresponding style tags (mathbf or boldsymbol) to use for font \"boldsymbol\",\n * depending on the symbol.  Use this function instead of fontMap for font\n * \"boldsymbol\".\n */\n\n\nvar boldsymbol = function boldsymbol(value, mode, options, classes, type) {\n  if (type !== \"textord\" && lookupSymbol(value, \"Math-BoldItalic\", mode).metrics) {\n    return {\n      fontName: \"Math-BoldItalic\",\n      fontClass: \"boldsymbol\"\n    };\n  } else {\n    // Some glyphs do not exist in Math-BoldItalic so we need to use\n    // Main-Bold instead.\n    return {\n      fontName: \"Main-Bold\",\n      fontClass: \"mathbf\"\n    };\n  }\n};\n/**\n * Makes either a mathord or textord in the correct font and color.\n */\n\n\nvar makeOrd = function makeOrd(group, options, type) {\n  var mode = group.mode;\n  var text = group.text;\n  var classes = [\"mord\"]; // Math mode or Old font (i.e. \\rm)\n\n  var isFont = mode === \"math\" || mode === \"text\" && options.font;\n  var fontOrFamily = isFont ? options.font : options.fontFamily;\n  var wideFontName = \"\";\n  var wideFontClass = \"\";\n\n  if (text.charCodeAt(0) === 0xD835) {\n    [wideFontName, wideFontClass] = wideCharacterFont(text, mode);\n  }\n\n  if (wideFontName.length > 0) {\n    // surrogate pairs get special treatment\n    return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass));\n  } else if (fontOrFamily) {\n    var fontName;\n    var fontClasses;\n\n    if (fontOrFamily === \"boldsymbol\") {\n      var fontData = boldsymbol(text, mode, options, classes, type);\n      fontName = fontData.fontName;\n      fontClasses = [fontData.fontClass];\n    } else if (isFont) {\n      fontName = fontMap[fontOrFamily].fontName;\n      fontClasses = [fontOrFamily];\n    } else {\n      fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape);\n      fontClasses = [fontOrFamily, options.fontWeight, options.fontShape];\n    }\n\n    if (lookupSymbol(text, fontName, mode).metrics) {\n      return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses));\n    } else if (ligatures.hasOwnProperty(text) && fontName.slice(0, 10) === \"Typewriter\") {\n      // Deconstruct ligatures in monospace fonts (\\texttt, \\tt).\n      var parts = [];\n\n      for (var i = 0; i < text.length; i++) {\n        parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses)));\n      }\n\n      return makeFragment(parts);\n    }\n  } // Makes a symbol in the default font for mathords and textords.\n\n\n  if (type === \"mathord\") {\n    return makeSymbol(text, \"Math-Italic\", mode, options, classes.concat([\"mathnormal\"]));\n  } else if (type === \"textord\") {\n    var font = symbols[mode][text] && symbols[mode][text].font;\n\n    if (font === \"ams\") {\n      var _fontName = retrieveTextFontName(\"amsrm\", options.fontWeight, options.fontShape);\n\n      return makeSymbol(text, _fontName, mode, options, classes.concat(\"amsrm\", options.fontWeight, options.fontShape));\n    } else if (font === \"main\" || !font) {\n      var _fontName2 = retrieveTextFontName(\"textrm\", options.fontWeight, options.fontShape);\n\n      return makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape));\n    } else {\n      // fonts added by plugins\n      var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class\n\n\n      return makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape));\n    }\n  } else {\n    throw new Error(\"unexpected type: \" + type + \" in makeOrd\");\n  }\n};\n/**\n * Returns true if subsequent symbolNodes have the same classes, skew, maxFont,\n * and styles.\n */\n\n\nvar canCombine = (prev, next) => {\n  if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) {\n    return false;\n  } // If prev and next both are just \"mbin\"s or \"mord\"s we don't combine them\n  // so that the proper spacing can be preserved.\n\n\n  if (prev.classes.length === 1) {\n    var cls = prev.classes[0];\n\n    if (cls === \"mbin\" || cls === \"mord\") {\n      return false;\n    }\n  }\n\n  for (var style in prev.style) {\n    if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {\n      return false;\n    }\n  }\n\n  for (var _style in next.style) {\n    if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) {\n      return false;\n    }\n  }\n\n  return true;\n};\n/**\n * Combine consecutive domTree.symbolNodes into a single symbolNode.\n * Note: this function mutates the argument.\n */\n\n\nvar tryCombineChars = chars => {\n  for (var i = 0; i < chars.length - 1; i++) {\n    var prev = chars[i];\n    var next = chars[i + 1];\n\n    if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) {\n      prev.text += next.text;\n      prev.height = Math.max(prev.height, next.height);\n      prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use\n      // it to add padding to the right of the span created from\n      // the combined characters.\n\n      prev.italic = next.italic;\n      chars.splice(i + 1, 1);\n      i--;\n    }\n  }\n\n  return chars;\n};\n/**\n * Calculate the height, depth, and maxFontSize of an element based on its\n * children.\n */\n\n\nvar sizeElementFromChildren = function sizeElementFromChildren(elem) {\n  var height = 0;\n  var depth = 0;\n  var maxFontSize = 0;\n\n  for (var i = 0; i < elem.children.length; i++) {\n    var child = elem.children[i];\n\n    if (child.height > height) {\n      height = child.height;\n    }\n\n    if (child.depth > depth) {\n      depth = child.depth;\n    }\n\n    if (child.maxFontSize > maxFontSize) {\n      maxFontSize = child.maxFontSize;\n    }\n  }\n\n  elem.height = height;\n  elem.depth = depth;\n  elem.maxFontSize = maxFontSize;\n};\n/**\n * Makes a span with the given list of classes, list of children, and options.\n *\n * TODO(#953): Ensure that `options` is always provided (currently some call\n * sites don't pass it) and make the type below mandatory.\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n */\n\n\nvar makeSpan$2 = function makeSpan(classes, children, options, style) {\n  var span = new Span(classes, children, options, style);\n  sizeElementFromChildren(span);\n  return span;\n}; // SVG one is simpler -- doesn't require height, depth, max-font setting.\n// This is also a separate method for typesafety.\n\n\nvar makeSvgSpan = (classes, children, options, style) => new Span(classes, children, options, style);\n\nvar makeLineSpan = function makeLineSpan(className, options, thickness) {\n  var line = makeSpan$2([className], [], options);\n  line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n  line.style.borderBottomWidth = makeEm(line.height);\n  line.maxFontSize = 1.0;\n  return line;\n};\n/**\n * Makes an anchor with the given href, list of classes, list of children,\n * and options.\n */\n\n\nvar makeAnchor = function makeAnchor(href, classes, children, options) {\n  var anchor = new Anchor(href, classes, children, options);\n  sizeElementFromChildren(anchor);\n  return anchor;\n};\n/**\n * Makes a document fragment with the given list of children.\n */\n\n\nvar makeFragment = function makeFragment(children) {\n  var fragment = new DocumentFragment(children);\n  sizeElementFromChildren(fragment);\n  return fragment;\n};\n/**\n * Wraps group in a span if it's a document fragment, allowing to apply classes\n * and styles\n */\n\n\nvar wrapFragment = function wrapFragment(group, options) {\n  if (group instanceof DocumentFragment) {\n    return makeSpan$2([], [group], options);\n  }\n\n  return group;\n}; // These are exact object types to catch typos in the names of the optional fields.\n\n\n// Computes the updated `children` list and the overall depth.\n//\n// This helper function for makeVList makes it easier to enforce type safety by\n// allowing early exits (returns) in the logic.\nvar getVListChildrenAndDepth = function getVListChildrenAndDepth(params) {\n  if (params.positionType === \"individualShift\") {\n    var oldChildren = params.children;\n    var children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be\n    // shifted to the correct specified shift\n\n    var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth;\n\n    var currPos = _depth;\n\n    for (var i = 1; i < oldChildren.length; i++) {\n      var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;\n      var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);\n      currPos = currPos + diff;\n      children.push({\n        type: \"kern\",\n        size\n      });\n      children.push(oldChildren[i]);\n    }\n\n    return {\n      children,\n      depth: _depth\n    };\n  }\n\n  var depth;\n\n  if (params.positionType === \"top\") {\n    // We always start at the bottom, so calculate the bottom by adding up\n    // all the sizes\n    var bottom = params.positionData;\n\n    for (var _i = 0; _i < params.children.length; _i++) {\n      var child = params.children[_i];\n      bottom -= child.type === \"kern\" ? child.size : child.elem.height + child.elem.depth;\n    }\n\n    depth = bottom;\n  } else if (params.positionType === \"bottom\") {\n    depth = -params.positionData;\n  } else {\n    var firstChild = params.children[0];\n\n    if (firstChild.type !== \"elem\") {\n      throw new Error('First child must have type \"elem\".');\n    }\n\n    if (params.positionType === \"shift\") {\n      depth = -firstChild.elem.depth - params.positionData;\n    } else if (params.positionType === \"firstBaseline\") {\n      depth = -firstChild.elem.depth;\n    } else {\n      throw new Error(\"Invalid positionType \" + params.positionType + \".\");\n    }\n  }\n\n  return {\n    children: params.children,\n    depth\n  };\n};\n/**\n * Makes a vertical list by stacking elements and kerns on top of each other.\n * Allows for many different ways of specifying the positioning method.\n *\n * See VListParam documentation above.\n */\n\n\nvar makeVList = function makeVList(params, options) {\n  var {\n    children,\n    depth\n  } = getVListChildrenAndDepth(params); // Create a strut that is taller than any list item. The strut is added to\n  // each item, where it will determine the item's baseline. Since it has\n  // `overflow:hidden`, the strut's top edge will sit on the item's line box's\n  // top edge and the strut's bottom edge will sit on the item's baseline,\n  // with no additional line-height spacing. This allows the item baseline to\n  // be positioned precisely without worrying about font ascent and\n  // line-height.\n\n  var pstrutSize = 0;\n\n  for (var i = 0; i < children.length; i++) {\n    var child = children[i];\n\n    if (child.type === \"elem\") {\n      var elem = child.elem;\n      pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height);\n    }\n  }\n\n  pstrutSize += 2;\n  var pstrut = makeSpan$2([\"pstrut\"], []);\n  pstrut.style.height = makeEm(pstrutSize); // Create a new list of actual children at the correct offsets\n\n  var realChildren = [];\n  var minPos = depth;\n  var maxPos = depth;\n  var currPos = depth;\n\n  for (var _i2 = 0; _i2 < children.length; _i2++) {\n    var _child = children[_i2];\n\n    if (_child.type === \"kern\") {\n      currPos += _child.size;\n    } else {\n      var _elem = _child.elem;\n      var classes = _child.wrapperClasses || [];\n      var style = _child.wrapperStyle || {};\n      var childWrap = makeSpan$2(classes, [pstrut, _elem], undefined, style);\n      childWrap.style.top = makeEm(-pstrutSize - currPos - _elem.depth);\n\n      if (_child.marginLeft) {\n        childWrap.style.marginLeft = _child.marginLeft;\n      }\n\n      if (_child.marginRight) {\n        childWrap.style.marginRight = _child.marginRight;\n      }\n\n      realChildren.push(childWrap);\n      currPos += _elem.height + _elem.depth;\n    }\n\n    minPos = Math.min(minPos, currPos);\n    maxPos = Math.max(maxPos, currPos);\n  } // The vlist contents go in a table-cell with `vertical-align:bottom`.\n  // This cell's bottom edge will determine the containing table's baseline\n  // without overly expanding the containing line-box.\n\n\n  var vlist = makeSpan$2([\"vlist\"], realChildren);\n  vlist.style.height = makeEm(maxPos); // A second row is used if necessary to represent the vlist's depth.\n\n  var rows;\n\n  if (minPos < 0) {\n    // We will define depth in an empty span with display: table-cell.\n    // It should render with the height that we define. But Chrome, in\n    // contenteditable mode only, treats that span as if it contains some\n    // text content. And that min-height over-rides our desired height.\n    // So we put another empty span inside the depth strut span.\n    var emptySpan = makeSpan$2([], []);\n    var depthStrut = makeSpan$2([\"vlist\"], [emptySpan]);\n    depthStrut.style.height = makeEm(-minPos); // Safari wants the first row to have inline content; otherwise it\n    // puts the bottom of the *second* row on the baseline.\n\n    var topStrut = makeSpan$2([\"vlist-s\"], [new SymbolNode(\"\\u200b\")]);\n    rows = [makeSpan$2([\"vlist-r\"], [vlist, topStrut]), makeSpan$2([\"vlist-r\"], [depthStrut])];\n  } else {\n    rows = [makeSpan$2([\"vlist-r\"], [vlist])];\n  }\n\n  var vtable = makeSpan$2([\"vlist-t\"], rows);\n\n  if (rows.length === 2) {\n    vtable.classes.push(\"vlist-t2\");\n  }\n\n  vtable.height = maxPos;\n  vtable.depth = -minPos;\n  return vtable;\n}; // Glue is a concept from TeX which is a flexible space between elements in\n// either a vertical or horizontal list. In KaTeX, at least for now, it's\n// static space between elements in a horizontal layout.\n\n\nvar makeGlue = (measurement, options) => {\n  // Make an empty span for the space\n  var rule = makeSpan$2([\"mspace\"], [], options);\n  var size = calculateSize(measurement, options);\n  rule.style.marginRight = makeEm(size);\n  return rule;\n}; // Takes font options, and returns the appropriate fontLookup name\n\n\nvar retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) {\n  var baseFontName = \"\";\n\n  switch (fontFamily) {\n    case \"amsrm\":\n      baseFontName = \"AMS\";\n      break;\n\n    case \"textrm\":\n      baseFontName = \"Main\";\n      break;\n\n    case \"textsf\":\n      baseFontName = \"SansSerif\";\n      break;\n\n    case \"texttt\":\n      baseFontName = \"Typewriter\";\n      break;\n\n    default:\n      baseFontName = fontFamily;\n    // use fonts added by a plugin\n  }\n\n  var fontStylesName;\n\n  if (fontWeight === \"textbf\" && fontShape === \"textit\") {\n    fontStylesName = \"BoldItalic\";\n  } else if (fontWeight === \"textbf\") {\n    fontStylesName = \"Bold\";\n  } else if (fontWeight === \"textit\") {\n    fontStylesName = \"Italic\";\n  } else {\n    fontStylesName = \"Regular\";\n  }\n\n  return baseFontName + \"-\" + fontStylesName;\n};\n/**\n * Maps TeX font commands to objects containing:\n * - variant: string used for \"mathvariant\" attribute in buildMathML.js\n * - fontName: the \"style\" parameter to fontMetrics.getCharacterMetrics\n */\n// A map between tex font commands an MathML mathvariant attribute values\n\n\nvar fontMap = {\n  // styles\n  \"mathbf\": {\n    variant: \"bold\",\n    fontName: \"Main-Bold\"\n  },\n  \"mathrm\": {\n    variant: \"normal\",\n    fontName: \"Main-Regular\"\n  },\n  \"textit\": {\n    variant: \"italic\",\n    fontName: \"Main-Italic\"\n  },\n  \"mathit\": {\n    variant: \"italic\",\n    fontName: \"Main-Italic\"\n  },\n  \"mathnormal\": {\n    variant: \"italic\",\n    fontName: \"Math-Italic\"\n  },\n  \"mathsfit\": {\n    variant: \"sans-serif-italic\",\n    fontName: \"SansSerif-Italic\"\n  },\n  // \"boldsymbol\" is missing because they require the use of multiple fonts:\n  // Math-BoldItalic and Main-Bold.  This is handled by a special case in\n  // makeOrd which ends up calling boldsymbol.\n  // families\n  \"mathbb\": {\n    variant: \"double-struck\",\n    fontName: \"AMS-Regular\"\n  },\n  \"mathcal\": {\n    variant: \"script\",\n    fontName: \"Caligraphic-Regular\"\n  },\n  \"mathfrak\": {\n    variant: \"fraktur\",\n    fontName: \"Fraktur-Regular\"\n  },\n  \"mathscr\": {\n    variant: \"script\",\n    fontName: \"Script-Regular\"\n  },\n  \"mathsf\": {\n    variant: \"sans-serif\",\n    fontName: \"SansSerif-Regular\"\n  },\n  \"mathtt\": {\n    variant: \"monospace\",\n    fontName: \"Typewriter-Regular\"\n  }\n};\nvar svgData = {\n  //   path, width, height\n  vec: [\"vec\", 0.471, 0.714],\n  // values from the font glyph\n  oiintSize1: [\"oiintSize1\", 0.957, 0.499],\n  // oval to overlay the integrand\n  oiintSize2: [\"oiintSize2\", 1.472, 0.659],\n  oiiintSize1: [\"oiiintSize1\", 1.304, 0.499],\n  oiiintSize2: [\"oiiintSize2\", 1.98, 0.659]\n};\n\nvar staticSvg = function staticSvg(value, options) {\n  // Create a span with inline SVG for the element.\n  var [pathName, width, height] = svgData[value];\n  var path = new PathNode(pathName);\n  var svgNode = new SvgNode([path], {\n    \"width\": makeEm(width),\n    \"height\": makeEm(height),\n    // Override CSS rule `.katex svg { width: 100% }`\n    \"style\": \"width:\" + makeEm(width),\n    \"viewBox\": \"0 0 \" + 1000 * width + \" \" + 1000 * height,\n    \"preserveAspectRatio\": \"xMinYMin\"\n  });\n  var span = makeSvgSpan([\"overlay\"], [svgNode], options);\n  span.height = height;\n  span.style.height = makeEm(height);\n  span.style.width = makeEm(width);\n  return span;\n};\n\nvar buildCommon = {\n  fontMap,\n  makeSymbol,\n  mathsym,\n  makeSpan: makeSpan$2,\n  makeSvgSpan,\n  makeLineSpan,\n  makeAnchor,\n  makeFragment,\n  wrapFragment,\n  makeVList,\n  makeOrd,\n  makeGlue,\n  staticSvg,\n  svgData,\n  tryCombineChars\n};\n\n/**\n * Describes spaces between different classes of atoms.\n */\nvar thinspace = {\n  number: 3,\n  unit: \"mu\"\n};\nvar mediumspace = {\n  number: 4,\n  unit: \"mu\"\n};\nvar thickspace = {\n  number: 5,\n  unit: \"mu\"\n}; // Making the type below exact with all optional fields doesn't work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n\n// Spacing relationships for display and text styles\nvar spacings = {\n  mord: {\n    mop: thinspace,\n    mbin: mediumspace,\n    mrel: thickspace,\n    minner: thinspace\n  },\n  mop: {\n    mord: thinspace,\n    mop: thinspace,\n    mrel: thickspace,\n    minner: thinspace\n  },\n  mbin: {\n    mord: mediumspace,\n    mop: mediumspace,\n    mopen: mediumspace,\n    minner: mediumspace\n  },\n  mrel: {\n    mord: thickspace,\n    mop: thickspace,\n    mopen: thickspace,\n    minner: thickspace\n  },\n  mopen: {},\n  mclose: {\n    mop: thinspace,\n    mbin: mediumspace,\n    mrel: thickspace,\n    minner: thinspace\n  },\n  mpunct: {\n    mord: thinspace,\n    mop: thinspace,\n    mrel: thickspace,\n    mopen: thinspace,\n    mclose: thinspace,\n    mpunct: thinspace,\n    minner: thinspace\n  },\n  minner: {\n    mord: thinspace,\n    mop: thinspace,\n    mbin: mediumspace,\n    mrel: thickspace,\n    mopen: thinspace,\n    mpunct: thinspace,\n    minner: thinspace\n  }\n}; // Spacing relationships for script and scriptscript styles\n\nvar tightSpacings = {\n  mord: {\n    mop: thinspace\n  },\n  mop: {\n    mord: thinspace,\n    mop: thinspace\n  },\n  mbin: {},\n  mrel: {},\n  mopen: {},\n  mclose: {\n    mop: thinspace\n  },\n  mpunct: {},\n  minner: {\n    mop: thinspace\n  }\n};\n\n/** Context provided to function handlers for error messages. */\n// Note: reverse the order of the return type union will cause a flow error.\n// See https://github.com/facebook/flow/issues/3663.\n// More general version of `HtmlBuilder` for nodes (e.g. \\sum, accent types)\n// whose presence impacts super/subscripting. In this case, ParseNode<\"supsub\">\n// delegates its HTML building to the HtmlBuilder corresponding to these nodes.\n\n/**\n * Final function spec for use at parse time.\n * This is almost identical to `FunctionPropSpec`, except it\n * 1. includes the function handler, and\n * 2. requires all arguments except argTypes.\n * It is generated by `defineFunction()` below.\n */\n\n/**\n * All registered functions.\n * `functions.js` just exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary.\n */\nvar _functions = {};\n/**\n * All HTML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */\n\nvar _htmlGroupBuilders = {};\n/**\n * All MathML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */\n\nvar _mathmlGroupBuilders = {};\nfunction defineFunction(_ref) {\n  var {\n    type,\n    names,\n    props,\n    handler,\n    htmlBuilder,\n    mathmlBuilder\n  } = _ref;\n  // Set default values of functions\n  var data = {\n    type,\n    numArgs: props.numArgs,\n    argTypes: props.argTypes,\n    allowedInArgument: !!props.allowedInArgument,\n    allowedInText: !!props.allowedInText,\n    allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,\n    numOptionalArgs: props.numOptionalArgs || 0,\n    infix: !!props.infix,\n    primitive: !!props.primitive,\n    handler: handler\n  };\n\n  for (var i = 0; i < names.length; ++i) {\n    _functions[names[i]] = data;\n  }\n\n  if (type) {\n    if (htmlBuilder) {\n      _htmlGroupBuilders[type] = htmlBuilder;\n    }\n\n    if (mathmlBuilder) {\n      _mathmlGroupBuilders[type] = mathmlBuilder;\n    }\n  }\n}\n/**\n * Use this to register only the HTML and MathML builders for a function (e.g.\n * if the function's ParseNode is generated in Parser.js rather than via a\n * stand-alone handler provided to `defineFunction`).\n */\n\nfunction defineFunctionBuilders(_ref2) {\n  var {\n    type,\n    htmlBuilder,\n    mathmlBuilder\n  } = _ref2;\n  defineFunction({\n    type,\n    names: [],\n    props: {\n      numArgs: 0\n    },\n\n    handler() {\n      throw new Error('Should never be called.');\n    },\n\n    htmlBuilder,\n    mathmlBuilder\n  });\n}\nvar normalizeArgument = function normalizeArgument(arg) {\n  return arg.type === \"ordgroup\" && arg.body.length === 1 ? arg.body[0] : arg;\n}; // Since the corresponding buildHTML/buildMathML function expects a\n// list of elements, we normalize for different kinds of arguments\n\nvar ordargument = function ordargument(arg) {\n  return arg.type === \"ordgroup\" ? arg.body : [arg];\n};\n\n/**\n * This file does the main work of building a domTree structure from a parse\n * tree. The entry point is the `buildHTML` function, which takes a parse tree.\n * Then, the buildExpression, buildGroup, and various groupBuilders functions\n * are called, to produce a final HTML tree.\n */\nvar makeSpan$1 = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)\n// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,\n// and the text before Rule 19.\n\nvar binLeftCanceller = [\"leftmost\", \"mbin\", \"mopen\", \"mrel\", \"mop\", \"mpunct\"];\nvar binRightCanceller = [\"rightmost\", \"mrel\", \"mclose\", \"mpunct\"];\nvar styleMap$1 = {\n  \"display\": Style$1.DISPLAY,\n  \"text\": Style$1.TEXT,\n  \"script\": Style$1.SCRIPT,\n  \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\nvar DomEnum = {\n  mord: \"mord\",\n  mop: \"mop\",\n  mbin: \"mbin\",\n  mrel: \"mrel\",\n  mopen: \"mopen\",\n  mclose: \"mclose\",\n  mpunct: \"mpunct\",\n  minner: \"minner\"\n};\n\n/**\n * Take a list of nodes, build them in order, and return a list of the built\n * nodes. documentFragments are flattened into their contents, so the\n * returned list contains no fragments. `isRealGroup` is true if `expression`\n * is a real group (no atoms will be added on either side), as opposed to\n * a partial group (e.g. one created by \\color). `surrounding` is an array\n * consisting type of nodes that will be added to the left and right.\n */\nvar buildExpression$1 = function buildExpression(expression, options, isRealGroup, surrounding) {\n  if (surrounding === void 0) {\n    surrounding = [null, null];\n  }\n\n  // Parse expressions into `groups`.\n  var groups = [];\n\n  for (var i = 0; i < expression.length; i++) {\n    var output = buildGroup$1(expression[i], options);\n\n    if (output instanceof DocumentFragment) {\n      var children = output.children;\n      groups.push(...children);\n    } else {\n      groups.push(output);\n    }\n  } // Combine consecutive domTree.symbolNodes into a single symbolNode.\n\n\n  buildCommon.tryCombineChars(groups); // If `expression` is a partial group, let the parent handle spacings\n  // to avoid processing groups multiple times.\n\n  if (!isRealGroup) {\n    return groups;\n  }\n\n  var glueOptions = options;\n\n  if (expression.length === 1) {\n    var node = expression[0];\n\n    if (node.type === \"sizing\") {\n      glueOptions = options.havingSize(node.size);\n    } else if (node.type === \"styling\") {\n      glueOptions = options.havingStyle(styleMap$1[node.style]);\n    }\n  } // Dummy spans for determining spacings between surrounding atoms.\n  // If `expression` has no atoms on the left or right, class \"leftmost\"\n  // or \"rightmost\", respectively, is used to indicate it.\n\n\n  var dummyPrev = makeSpan$1([surrounding[0] || \"leftmost\"], [], options);\n  var dummyNext = makeSpan$1([surrounding[1] || \"rightmost\"], [], options); // TODO: These code assumes that a node's math class is the first element\n  // of its `classes` array. A later cleanup should ensure this, for\n  // instance by changing the signature of `makeSpan`.\n  // Before determining what spaces to insert, perform bin cancellation.\n  // Binary operators change to ordinary symbols in some contexts.\n\n  var isRoot = isRealGroup === \"root\";\n  traverseNonSpaceNodes(groups, (node, prev) => {\n    var prevType = prev.classes[0];\n    var type = node.classes[0];\n\n    if (prevType === \"mbin\" && utils.contains(binRightCanceller, type)) {\n      prev.classes[0] = \"mord\";\n    } else if (type === \"mbin\" && utils.contains(binLeftCanceller, prevType)) {\n      node.classes[0] = \"mord\";\n    }\n  }, {\n    node: dummyPrev\n  }, dummyNext, isRoot);\n  traverseNonSpaceNodes(groups, (node, prev) => {\n    var prevType = getTypeOfDomTree(prev);\n    var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style.\n\n    var space = prevType && type ? node.hasClass(\"mtight\") ? tightSpacings[prevType][type] : spacings[prevType][type] : null;\n\n    if (space) {\n      // Insert glue (spacing) after the `prev`.\n      return buildCommon.makeGlue(space, glueOptions);\n    }\n  }, {\n    node: dummyPrev\n  }, dummyNext, isRoot);\n  return groups;\n}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and\n// previous node as arguments, optionally returning a node to insert after the\n// previous node. `prev` is an object with the previous node and `insertAfter`\n// function to insert after it. `next` is a node that will be added to the right.\n// Used for bin cancellation and inserting spacings.\n\nvar traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next, isRoot) {\n  if (next) {\n    // temporarily append the right node, if exists\n    nodes.push(next);\n  }\n\n  var i = 0;\n\n  for (; i < nodes.length; i++) {\n    var node = nodes[i];\n    var partialGroup = checkPartialGroup(node);\n\n    if (partialGroup) {\n      // Recursive DFS\n      // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array\n      traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot);\n      continue;\n    } // Ignore explicit spaces (e.g., \\;, \\,) when determining what implicit\n    // spacing should go between atoms of different classes\n\n\n    var nonspace = !node.hasClass(\"mspace\");\n\n    if (nonspace) {\n      var result = callback(node, prev.node);\n\n      if (result) {\n        if (prev.insertAfter) {\n          prev.insertAfter(result);\n        } else {\n          // insert at front\n          nodes.unshift(result);\n          i++;\n        }\n      }\n    }\n\n    if (nonspace) {\n      prev.node = node;\n    } else if (isRoot && node.hasClass(\"newline\")) {\n      prev.node = makeSpan$1([\"leftmost\"]); // treat like beginning of line\n    }\n\n    prev.insertAfter = (index => n => {\n      nodes.splice(index + 1, 0, n);\n      i++;\n    })(i);\n  }\n\n  if (next) {\n    nodes.pop();\n  }\n}; // Check if given node is a partial group, i.e., does not affect spacing around.\n\n\nvar checkPartialGroup = function checkPartialGroup(node) {\n  if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass(\"enclosing\")) {\n    return node;\n  }\n\n  return null;\n}; // Return the outermost node of a domTree.\n\n\nvar getOutermostNode = function getOutermostNode(node, side) {\n  var partialGroup = checkPartialGroup(node);\n\n  if (partialGroup) {\n    var children = partialGroup.children;\n\n    if (children.length) {\n      if (side === \"right\") {\n        return getOutermostNode(children[children.length - 1], \"right\");\n      } else if (side === \"left\") {\n        return getOutermostNode(children[0], \"left\");\n      }\n    }\n  }\n\n  return node;\n}; // Return math atom class (mclass) of a domTree.\n// If `side` is given, it will get the type of the outermost node at given side.\n\n\nvar getTypeOfDomTree = function getTypeOfDomTree(node, side) {\n  if (!node) {\n    return null;\n  }\n\n  if (side) {\n    node = getOutermostNode(node, side);\n  } // This makes a lot of assumptions as to where the type of atom\n  // appears.  We should do a better job of enforcing this.\n\n\n  return DomEnum[node.classes[0]] || null;\n};\nvar makeNullDelimiter = function makeNullDelimiter(options, classes) {\n  var moreClasses = [\"nulldelimiter\"].concat(options.baseSizingClasses());\n  return makeSpan$1(classes.concat(moreClasses));\n};\n/**\n * buildGroup is the function that takes a group and calls the correct groupType\n * function for it. It also handles the interaction of size and style changes\n * between parents and children.\n */\n\nvar buildGroup$1 = function buildGroup(group, options, baseOptions) {\n  if (!group) {\n    return makeSpan$1();\n  }\n\n  if (_htmlGroupBuilders[group.type]) {\n    // Call the groupBuilders function\n    // $FlowFixMe\n    var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account\n    // for that size difference.\n\n    if (baseOptions && options.size !== baseOptions.size) {\n      groupNode = makeSpan$1(options.sizingClasses(baseOptions), [groupNode], options);\n      var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;\n      groupNode.height *= multiplier;\n      groupNode.depth *= multiplier;\n    }\n\n    return groupNode;\n  } else {\n    throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n  }\n};\n/**\n * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`)\n * into an unbreakable HTML node of class .base, with proper struts to\n * guarantee correct vertical extent.  `buildHTML` calls this repeatedly to\n * make up the entire expression as a sequence of unbreakable units.\n */\n\nfunction buildHTMLUnbreakable(children, options) {\n  // Compute height and depth of this chunk.\n  var body = makeSpan$1([\"base\"], children, options); // Add strut, which ensures that the top of the HTML element falls at\n  // the height of the expression, and the bottom of the HTML element\n  // falls at the depth of the expression.\n\n  var strut = makeSpan$1([\"strut\"]);\n  strut.style.height = makeEm(body.height + body.depth);\n\n  if (body.depth) {\n    strut.style.verticalAlign = makeEm(-body.depth);\n  }\n\n  body.children.unshift(strut);\n  return body;\n}\n/**\n * Take an entire parse tree, and build it into an appropriate set of HTML\n * nodes.\n */\n\n\nfunction buildHTML(tree, options) {\n  // Strip off outer tag wrapper for processing below.\n  var tag = null;\n\n  if (tree.length === 1 && tree[0].type === \"tag\") {\n    tag = tree[0].tag;\n    tree = tree[0].body;\n  } // Build the expression contained in the tree\n\n\n  var expression = buildExpression$1(tree, options, \"root\");\n  var eqnNum;\n\n  if (expression.length === 2 && expression[1].hasClass(\"tag\")) {\n    // An environment with automatic equation numbers, e.g. {gather}.\n    eqnNum = expression.pop();\n  }\n\n  var children = []; // Create one base node for each chunk between potential line breaks.\n  // The TeXBook [p.173] says \"A formula will be broken only after a\n  // relation symbol like $=$ or $<$ or $\\rightarrow$, or after a binary\n  // operation symbol like $+$ or $-$ or $\\times$, where the relation or\n  // binary operation is on the ``outer level'' of the formula (i.e., not\n  // enclosed in {...} and not part of an \\over construction).\"\n\n  var parts = [];\n\n  for (var i = 0; i < expression.length; i++) {\n    parts.push(expression[i]);\n\n    if (expression[i].hasClass(\"mbin\") || expression[i].hasClass(\"mrel\") || expression[i].hasClass(\"allowbreak\")) {\n      // Put any post-operator glue on same line as operator.\n      // Watch for \\nobreak along the way, and stop at \\newline.\n      var nobreak = false;\n\n      while (i < expression.length - 1 && expression[i + 1].hasClass(\"mspace\") && !expression[i + 1].hasClass(\"newline\")) {\n        i++;\n        parts.push(expression[i]);\n\n        if (expression[i].hasClass(\"nobreak\")) {\n          nobreak = true;\n        }\n      } // Don't allow break if \\nobreak among the post-operator glue.\n\n\n      if (!nobreak) {\n        children.push(buildHTMLUnbreakable(parts, options));\n        parts = [];\n      }\n    } else if (expression[i].hasClass(\"newline\")) {\n      // Write the line except the newline\n      parts.pop();\n\n      if (parts.length > 0) {\n        children.push(buildHTMLUnbreakable(parts, options));\n        parts = [];\n      } // Put the newline at the top level\n\n\n      children.push(expression[i]);\n    }\n  }\n\n  if (parts.length > 0) {\n    children.push(buildHTMLUnbreakable(parts, options));\n  } // Now, if there was a tag, build it too and append it as a final child.\n\n\n  var tagChild;\n\n  if (tag) {\n    tagChild = buildHTMLUnbreakable(buildExpression$1(tag, options, true));\n    tagChild.classes = [\"tag\"];\n    children.push(tagChild);\n  } else if (eqnNum) {\n    children.push(eqnNum);\n  }\n\n  var htmlNode = makeSpan$1([\"katex-html\"], children);\n  htmlNode.setAttribute(\"aria-hidden\", \"true\"); // Adjust the strut of the tag to be the maximum height of all children\n  // (the height of the enclosing htmlNode) for proper vertical alignment.\n\n  if (tagChild) {\n    var strut = tagChild.children[0];\n    strut.style.height = makeEm(htmlNode.height + htmlNode.depth);\n\n    if (htmlNode.depth) {\n      strut.style.verticalAlign = makeEm(-htmlNode.depth);\n    }\n  }\n\n  return htmlNode;\n}\n\n/**\n * These objects store data about MathML nodes. This is the MathML equivalent\n * of the types in domTree.js. Since MathML handles its own rendering, and\n * since we're mainly using MathML to improve accessibility, we don't manage\n * any of the styling state that the plain DOM nodes do.\n *\n * The `toNode` and `toMarkup` functions work similarly to how they do in\n * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.\n */\nfunction newDocumentFragment(children) {\n  return new DocumentFragment(children);\n}\n/**\n * This node represents a general purpose MathML node of any type. The\n * constructor requires the type of node to create (for example, `\"mo\"` or\n * `\"mspace\"`, corresponding to `<mo>` and `<mspace>` tags).\n */\n\nclass MathNode {\n  constructor(type, children, classes) {\n    this.type = void 0;\n    this.attributes = void 0;\n    this.children = void 0;\n    this.classes = void 0;\n    this.type = type;\n    this.attributes = {};\n    this.children = children || [];\n    this.classes = classes || [];\n  }\n  /**\n   * Sets an attribute on a MathML node. MathML depends on attributes to convey a\n   * semantic content, so this is used heavily.\n   */\n\n\n  setAttribute(name, value) {\n    this.attributes[name] = value;\n  }\n  /**\n   * Gets an attribute on a MathML node.\n   */\n\n\n  getAttribute(name) {\n    return this.attributes[name];\n  }\n  /**\n   * Converts the math node into a MathML-namespaced DOM element.\n   */\n\n\n  toNode() {\n    var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", this.type);\n\n    for (var attr in this.attributes) {\n      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n        node.setAttribute(attr, this.attributes[attr]);\n      }\n    }\n\n    if (this.classes.length > 0) {\n      node.className = createClass(this.classes);\n    }\n\n    for (var i = 0; i < this.children.length; i++) {\n      // Combine multiple TextNodes into one TextNode, to prevent\n      // screen readers from reading each as a separate word [#3995]\n      if (this.children[i] instanceof TextNode && this.children[i + 1] instanceof TextNode) {\n        var text = this.children[i].toText() + this.children[++i].toText();\n\n        while (this.children[i + 1] instanceof TextNode) {\n          text += this.children[++i].toText();\n        }\n\n        node.appendChild(new TextNode(text).toNode());\n      } else {\n        node.appendChild(this.children[i].toNode());\n      }\n    }\n\n    return node;\n  }\n  /**\n   * Converts the math node into an HTML markup string.\n   */\n\n\n  toMarkup() {\n    var markup = \"<\" + this.type; // Add the attributes\n\n    for (var attr in this.attributes) {\n      if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n        markup += \" \" + attr + \"=\\\"\";\n        markup += utils.escape(this.attributes[attr]);\n        markup += \"\\\"\";\n      }\n    }\n\n    if (this.classes.length > 0) {\n      markup += \" class =\\\"\" + utils.escape(createClass(this.classes)) + \"\\\"\";\n    }\n\n    markup += \">\";\n\n    for (var i = 0; i < this.children.length; i++) {\n      markup += this.children[i].toMarkup();\n    }\n\n    markup += \"</\" + this.type + \">\";\n    return markup;\n  }\n  /**\n   * Converts the math node into a string, similar to innerText, but escaped.\n   */\n\n\n  toText() {\n    return this.children.map(child => child.toText()).join(\"\");\n  }\n\n}\n/**\n * This node represents a piece of text.\n */\n\nclass TextNode {\n  constructor(text) {\n    this.text = void 0;\n    this.text = text;\n  }\n  /**\n   * Converts the text node into a DOM text node.\n   */\n\n\n  toNode() {\n    return document.createTextNode(this.text);\n  }\n  /**\n   * Converts the text node into escaped HTML markup\n   * (representing the text itself).\n   */\n\n\n  toMarkup() {\n    return utils.escape(this.toText());\n  }\n  /**\n   * Converts the text node into a string\n   * (representing the text itself).\n   */\n\n\n  toText() {\n    return this.text;\n  }\n\n}\n/**\n * This node represents a space, but may render as <mspace.../> or as text,\n * depending on the width.\n */\n\nclass SpaceNode {\n  /**\n   * Create a Space node with width given in CSS ems.\n   */\n  constructor(width) {\n    this.width = void 0;\n    this.character = void 0;\n    this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html\n    // for a table of space-like characters.  We use Unicode\n    // representations instead of &LongNames; as it's not clear how to\n    // make the latter via document.createTextNode.\n\n    if (width >= 0.05555 && width <= 0.05556) {\n      this.character = \"\\u200a\"; // &VeryThinSpace;\n    } else if (width >= 0.1666 && width <= 0.1667) {\n      this.character = \"\\u2009\"; // &ThinSpace;\n    } else if (width >= 0.2222 && width <= 0.2223) {\n      this.character = \"\\u2005\"; // &MediumSpace;\n    } else if (width >= 0.2777 && width <= 0.2778) {\n      this.character = \"\\u2005\\u200a\"; // &ThickSpace;\n    } else if (width >= -0.05556 && width <= -0.05555) {\n      this.character = \"\\u200a\\u2063\"; // &NegativeVeryThinSpace;\n    } else if (width >= -0.1667 && width <= -0.1666) {\n      this.character = \"\\u2009\\u2063\"; // &NegativeThinSpace;\n    } else if (width >= -0.2223 && width <= -0.2222) {\n      this.character = \"\\u205f\\u2063\"; // &NegativeMediumSpace;\n    } else if (width >= -0.2778 && width <= -0.2777) {\n      this.character = \"\\u2005\\u2063\"; // &NegativeThickSpace;\n    } else {\n      this.character = null;\n    }\n  }\n  /**\n   * Converts the math node into a MathML-namespaced DOM element.\n   */\n\n\n  toNode() {\n    if (this.character) {\n      return document.createTextNode(this.character);\n    } else {\n      var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"mspace\");\n      node.setAttribute(\"width\", makeEm(this.width));\n      return node;\n    }\n  }\n  /**\n   * Converts the math node into an HTML markup string.\n   */\n\n\n  toMarkup() {\n    if (this.character) {\n      return \"<mtext>\" + this.character + \"</mtext>\";\n    } else {\n      return \"<mspace width=\\\"\" + makeEm(this.width) + \"\\\"/>\";\n    }\n  }\n  /**\n   * Converts the math node into a string, similar to innerText.\n   */\n\n\n  toText() {\n    if (this.character) {\n      return this.character;\n    } else {\n      return \" \";\n    }\n  }\n\n}\n\nvar mathMLTree = {\n  MathNode,\n  TextNode,\n  SpaceNode,\n  newDocumentFragment\n};\n\n/**\n * This file converts a parse tree into a corresponding MathML tree. The main\n * entry point is the `buildMathML` function, which takes a parse tree from the\n * parser.\n */\n\n/**\n * Takes a symbol and converts it into a MathML text node after performing\n * optional replacement from symbols.js.\n */\nvar makeText = function makeText(text, mode, options) {\n  if (symbols[mode][text] && symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.slice(4, 6) === \"tt\" || options.font && options.font.slice(4, 6) === \"tt\"))) {\n    text = symbols[mode][text].replace;\n  }\n\n  return new mathMLTree.TextNode(text);\n};\n/**\n * Wrap the given array of nodes in an <mrow> node if needed, i.e.,\n * unless the array has length 1.  Always returns a single node.\n */\n\nvar makeRow = function makeRow(body) {\n  if (body.length === 1) {\n    return body[0];\n  } else {\n    return new mathMLTree.MathNode(\"mrow\", body);\n  }\n};\n/**\n * Returns the math variant as a string or null if none is required.\n */\n\nvar getVariant = function getVariant(group, options) {\n  // Handle \\text... font specifiers as best we can.\n  // MathML has a limited list of allowable mathvariant specifiers; see\n  // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt\n  if (options.fontFamily === \"texttt\") {\n    return \"monospace\";\n  } else if (options.fontFamily === \"textsf\") {\n    if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n      return \"sans-serif-bold-italic\";\n    } else if (options.fontShape === \"textit\") {\n      return \"sans-serif-italic\";\n    } else if (options.fontWeight === \"textbf\") {\n      return \"bold-sans-serif\";\n    } else {\n      return \"sans-serif\";\n    }\n  } else if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n    return \"bold-italic\";\n  } else if (options.fontShape === \"textit\") {\n    return \"italic\";\n  } else if (options.fontWeight === \"textbf\") {\n    return \"bold\";\n  }\n\n  var font = options.font;\n\n  if (!font || font === \"mathnormal\") {\n    return null;\n  }\n\n  var mode = group.mode;\n\n  if (font === \"mathit\") {\n    return \"italic\";\n  } else if (font === \"boldsymbol\") {\n    return group.type === \"textord\" ? \"bold\" : \"bold-italic\";\n  } else if (font === \"mathbf\") {\n    return \"bold\";\n  } else if (font === \"mathbb\") {\n    return \"double-struck\";\n  } else if (font === \"mathsfit\") {\n    return \"sans-serif-italic\";\n  } else if (font === \"mathfrak\") {\n    return \"fraktur\";\n  } else if (font === \"mathscr\" || font === \"mathcal\") {\n    // MathML makes no distinction between script and calligraphic\n    return \"script\";\n  } else if (font === \"mathsf\") {\n    return \"sans-serif\";\n  } else if (font === \"mathtt\") {\n    return \"monospace\";\n  }\n\n  var text = group.text;\n\n  if (utils.contains([\"\\\\imath\", \"\\\\jmath\"], text)) {\n    return null;\n  }\n\n  if (symbols[mode][text] && symbols[mode][text].replace) {\n    text = symbols[mode][text].replace;\n  }\n\n  var fontName = buildCommon.fontMap[font].fontName;\n\n  if (getCharacterMetrics(text, fontName, mode)) {\n    return buildCommon.fontMap[font].variant;\n  }\n\n  return null;\n};\n/**\n * Check for <mi>.</mi> which is how a dot renders in MathML,\n * or <mo separator=\"true\" lspace=\"0em\" rspace=\"0em\">,</mo>\n * which is how a braced comma {,} renders in MathML\n */\n\nfunction isNumberPunctuation(group) {\n  if (!group) {\n    return false;\n  }\n\n  if (group.type === 'mi' && group.children.length === 1) {\n    var child = group.children[0];\n    return child instanceof TextNode && child.text === '.';\n  } else if (group.type === 'mo' && group.children.length === 1 && group.getAttribute('separator') === 'true' && group.getAttribute('lspace') === '0em' && group.getAttribute('rspace') === '0em') {\n    var _child = group.children[0];\n    return _child instanceof TextNode && _child.text === ',';\n  } else {\n    return false;\n  }\n}\n/**\n * Takes a list of nodes, builds them, and returns a list of the generated\n * MathML nodes.  Also combine consecutive <mtext> outputs into a single\n * <mtext> tag.\n */\n\n\nvar buildExpression = function buildExpression(expression, options, isOrdgroup) {\n  if (expression.length === 1) {\n    var group = buildGroup(expression[0], options);\n\n    if (isOrdgroup && group instanceof MathNode && group.type === \"mo\") {\n      // When TeX writers want to suppress spacing on an operator,\n      // they often put the operator by itself inside braces.\n      group.setAttribute(\"lspace\", \"0em\");\n      group.setAttribute(\"rspace\", \"0em\");\n    }\n\n    return [group];\n  }\n\n  var groups = [];\n  var lastGroup;\n\n  for (var i = 0; i < expression.length; i++) {\n    var _group = buildGroup(expression[i], options);\n\n    if (_group instanceof MathNode && lastGroup instanceof MathNode) {\n      // Concatenate adjacent <mtext>s\n      if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) {\n        lastGroup.children.push(..._group.children);\n        continue; // Concatenate adjacent <mn>s\n      } else if (_group.type === 'mn' && lastGroup.type === 'mn') {\n        lastGroup.children.push(..._group.children);\n        continue; // Concatenate <mn>...</mn> followed by <mi>.</mi>\n      } else if (isNumberPunctuation(_group) && lastGroup.type === 'mn') {\n        lastGroup.children.push(..._group.children);\n        continue; // Concatenate <mi>.</mi> followed by <mn>...</mn>\n      } else if (_group.type === 'mn' && isNumberPunctuation(lastGroup)) {\n        _group.children = [...lastGroup.children, ..._group.children];\n        groups.pop(); // Put preceding <mn>...</mn> or <mi>.</mi> inside base of\n        // <msup><mn>...base...</mn>...exponent...</msup> (or <msub>)\n      } else if ((_group.type === 'msup' || _group.type === 'msub') && _group.children.length >= 1 && (lastGroup.type === 'mn' || isNumberPunctuation(lastGroup))) {\n        var base = _group.children[0];\n\n        if (base instanceof MathNode && base.type === 'mn') {\n          base.children = [...lastGroup.children, ...base.children];\n          groups.pop();\n        } // \\not\n\n      } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) {\n        var lastChild = lastGroup.children[0];\n\n        if (lastChild instanceof TextNode && lastChild.text === '\\u0338' && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) {\n          var child = _group.children[0];\n\n          if (child instanceof TextNode && child.text.length > 0) {\n            // Overlay with combining character long solidus\n            child.text = child.text.slice(0, 1) + \"\\u0338\" + child.text.slice(1);\n            groups.pop();\n          }\n        }\n      }\n    }\n\n    groups.push(_group);\n    lastGroup = _group;\n  }\n\n  return groups;\n};\n/**\n * Equivalent to buildExpression, but wraps the elements in an <mrow>\n * if there's more than one.  Returns a single node instead of an array.\n */\n\nvar buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) {\n  return makeRow(buildExpression(expression, options, isOrdgroup));\n};\n/**\n * Takes a group from the parser and calls the appropriate groupBuilders function\n * on it to produce a MathML node.\n */\n\nvar buildGroup = function buildGroup(group, options) {\n  if (!group) {\n    return new mathMLTree.MathNode(\"mrow\");\n  }\n\n  if (_mathmlGroupBuilders[group.type]) {\n    // Call the groupBuilders function\n    // $FlowFixMe\n    var result = _mathmlGroupBuilders[group.type](group, options); // $FlowFixMe\n\n    return result;\n  } else {\n    throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n  }\n};\n/**\n * Takes a full parse tree and settings and builds a MathML representation of\n * it. In particular, we put the elements from building the parse tree into a\n * <semantics> tag so we can also include that TeX source as an annotation.\n *\n * Note that we actually return a domTree element with a `<math>` inside it so\n * we can do appropriate styling.\n */\n\nfunction buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) {\n  var expression = buildExpression(tree, options); // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes\n  // and add spacing nodes. This is necessary only adjacent to math operators\n  // like \\sin or \\lim or to subsup elements that contain math operators.\n  // MathML takes care of the other spacing issues.\n  // Wrap up the expression in an mrow so it is presented in the semantics\n  // tag correctly, unless it's a single <mrow> or <mtable>.\n\n  var wrapper;\n\n  if (expression.length === 1 && expression[0] instanceof MathNode && utils.contains([\"mrow\", \"mtable\"], expression[0].type)) {\n    wrapper = expression[0];\n  } else {\n    wrapper = new mathMLTree.MathNode(\"mrow\", expression);\n  } // Build a TeX annotation of the source\n\n\n  var annotation = new mathMLTree.MathNode(\"annotation\", [new mathMLTree.TextNode(texExpression)]);\n  annotation.setAttribute(\"encoding\", \"application/x-tex\");\n  var semantics = new mathMLTree.MathNode(\"semantics\", [wrapper, annotation]);\n  var math = new mathMLTree.MathNode(\"math\", [semantics]);\n  math.setAttribute(\"xmlns\", \"http://www.w3.org/1998/Math/MathML\");\n\n  if (isDisplayMode) {\n    math.setAttribute(\"display\", \"block\");\n  } // You can't style <math> nodes, so we wrap the node in a span.\n  // NOTE: The span class is not typed to have <math> nodes as children, and\n  // we don't want to make the children type more generic since the children\n  // of span are expected to have more fields in `buildHtml` contexts.\n\n\n  var wrapperClass = forMathmlOnly ? \"katex\" : \"katex-mathml\"; // $FlowFixMe\n\n  return buildCommon.makeSpan([wrapperClass], [math]);\n}\n\nvar optionsFromSettings = function optionsFromSettings(settings) {\n  return new Options({\n    style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT,\n    maxSize: settings.maxSize,\n    minRuleThickness: settings.minRuleThickness\n  });\n};\n\nvar displayWrap = function displayWrap(node, settings) {\n  if (settings.displayMode) {\n    var classes = [\"katex-display\"];\n\n    if (settings.leqno) {\n      classes.push(\"leqno\");\n    }\n\n    if (settings.fleqn) {\n      classes.push(\"fleqn\");\n    }\n\n    node = buildCommon.makeSpan(classes, [node]);\n  }\n\n  return node;\n};\n\nvar buildTree = function buildTree(tree, expression, settings) {\n  var options = optionsFromSettings(settings);\n  var katexNode;\n\n  if (settings.output === \"mathml\") {\n    return buildMathML(tree, expression, options, settings.displayMode, true);\n  } else if (settings.output === \"html\") {\n    var htmlNode = buildHTML(tree, options);\n    katexNode = buildCommon.makeSpan([\"katex\"], [htmlNode]);\n  } else {\n    var mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false);\n\n    var _htmlNode = buildHTML(tree, options);\n\n    katexNode = buildCommon.makeSpan([\"katex\"], [mathMLNode, _htmlNode]);\n  }\n\n  return displayWrap(katexNode, settings);\n};\nvar buildHTMLTree = function buildHTMLTree(tree, expression, settings) {\n  var options = optionsFromSettings(settings);\n  var htmlNode = buildHTML(tree, options);\n  var katexNode = buildCommon.makeSpan([\"katex\"], [htmlNode]);\n  return displayWrap(katexNode, settings);\n};\n\n/**\n * This file provides support to buildMathML.js and buildHTML.js\n * for stretchy wide elements rendered from SVG files\n * and other CSS trickery.\n */\nvar stretchyCodePoint = {\n  widehat: \"^\",\n  widecheck: \"ˇ\",\n  widetilde: \"~\",\n  utilde: \"~\",\n  overleftarrow: \"\\u2190\",\n  underleftarrow: \"\\u2190\",\n  xleftarrow: \"\\u2190\",\n  overrightarrow: \"\\u2192\",\n  underrightarrow: \"\\u2192\",\n  xrightarrow: \"\\u2192\",\n  underbrace: \"\\u23df\",\n  overbrace: \"\\u23de\",\n  overgroup: \"\\u23e0\",\n  undergroup: \"\\u23e1\",\n  overleftrightarrow: \"\\u2194\",\n  underleftrightarrow: \"\\u2194\",\n  xleftrightarrow: \"\\u2194\",\n  Overrightarrow: \"\\u21d2\",\n  xRightarrow: \"\\u21d2\",\n  overleftharpoon: \"\\u21bc\",\n  xleftharpoonup: \"\\u21bc\",\n  overrightharpoon: \"\\u21c0\",\n  xrightharpoonup: \"\\u21c0\",\n  xLeftarrow: \"\\u21d0\",\n  xLeftrightarrow: \"\\u21d4\",\n  xhookleftarrow: \"\\u21a9\",\n  xhookrightarrow: \"\\u21aa\",\n  xmapsto: \"\\u21a6\",\n  xrightharpoondown: \"\\u21c1\",\n  xleftharpoondown: \"\\u21bd\",\n  xrightleftharpoons: \"\\u21cc\",\n  xleftrightharpoons: \"\\u21cb\",\n  xtwoheadleftarrow: \"\\u219e\",\n  xtwoheadrightarrow: \"\\u21a0\",\n  xlongequal: \"=\",\n  xtofrom: \"\\u21c4\",\n  xrightleftarrows: \"\\u21c4\",\n  xrightequilibrium: \"\\u21cc\",\n  // Not a perfect match.\n  xleftequilibrium: \"\\u21cb\",\n  // None better available.\n  \"\\\\cdrightarrow\": \"\\u2192\",\n  \"\\\\cdleftarrow\": \"\\u2190\",\n  \"\\\\cdlongequal\": \"=\"\n};\n\nvar mathMLnode = function mathMLnode(label) {\n  var node = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\\\/, '')])]);\n  node.setAttribute(\"stretchy\", \"true\");\n  return node;\n}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts.\n// Copyright (c) 2009-2010, Design Science, Inc. (<www.mathjax.org>)\n// Copyright (c) 2014-2017 Khan Academy (<www.khanacademy.org>)\n// Licensed under the SIL Open Font License, Version 1.1.\n// See \\nhttp://scripts.sil.org/OFL\n// Very Long SVGs\n//    Many of the KaTeX stretchy wide elements use a long SVG image and an\n//    overflow: hidden tactic to achieve a stretchy image while avoiding\n//    distortion of arrowheads or brace corners.\n//    The SVG typically contains a very long (400 em) arrow.\n//    The SVG is in a container span that has overflow: hidden, so the span\n//    acts like a window that exposes only part of the  SVG.\n//    The SVG always has a longer, thinner aspect ratio than the container span.\n//    After the SVG fills 100% of the height of the container span,\n//    there is a long arrow shaft left over. That left-over shaft is not shown.\n//    Instead, it is sliced off because the span's CSS has overflow: hidden.\n//    Thus, the reader sees an arrow that matches the subject matter width\n//    without distortion.\n//    Some functions, such as \\cancel, need to vary their aspect ratio. These\n//    functions do not get the overflow SVG treatment.\n// Second Brush Stroke\n//    Low resolution monitors struggle to display images in fine detail.\n//    So browsers apply anti-aliasing. A long straight arrow shaft therefore\n//    will sometimes appear as if it has a blurred edge.\n//    To mitigate this, these SVG files contain a second \"brush-stroke\" on the\n//    arrow shafts. That is, a second long thin rectangular SVG path has been\n//    written directly on top of each arrow shaft. This reinforcement causes\n//    some of the screen pixels to display as black instead of the anti-aliased\n//    gray pixel that a  single path would generate. So we get arrow shafts\n//    whose edges appear to be sharper.\n// In the katexImagesData object just below, the dimensions all\n// correspond to path geometry inside the relevant SVG.\n// For example, \\overrightarrow uses the same arrowhead as glyph U+2192\n// from the KaTeX Main font. The scaling factor is 1000.\n// That is, inside the font, that arrowhead is 522 units tall, which\n// corresponds to 0.522 em inside the document.\n\n\nvar katexImagesData = {\n  //   path(s), minWidth, height, align\n  overrightarrow: [[\"rightarrow\"], 0.888, 522, \"xMaxYMin\"],\n  overleftarrow: [[\"leftarrow\"], 0.888, 522, \"xMinYMin\"],\n  underrightarrow: [[\"rightarrow\"], 0.888, 522, \"xMaxYMin\"],\n  underleftarrow: [[\"leftarrow\"], 0.888, 522, \"xMinYMin\"],\n  xrightarrow: [[\"rightarrow\"], 1.469, 522, \"xMaxYMin\"],\n  \"\\\\cdrightarrow\": [[\"rightarrow\"], 3.0, 522, \"xMaxYMin\"],\n  // CD minwwidth2.5pc\n  xleftarrow: [[\"leftarrow\"], 1.469, 522, \"xMinYMin\"],\n  \"\\\\cdleftarrow\": [[\"leftarrow\"], 3.0, 522, \"xMinYMin\"],\n  Overrightarrow: [[\"doublerightarrow\"], 0.888, 560, \"xMaxYMin\"],\n  xRightarrow: [[\"doublerightarrow\"], 1.526, 560, \"xMaxYMin\"],\n  xLeftarrow: [[\"doubleleftarrow\"], 1.526, 560, \"xMinYMin\"],\n  overleftharpoon: [[\"leftharpoon\"], 0.888, 522, \"xMinYMin\"],\n  xleftharpoonup: [[\"leftharpoon\"], 0.888, 522, \"xMinYMin\"],\n  xleftharpoondown: [[\"leftharpoondown\"], 0.888, 522, \"xMinYMin\"],\n  overrightharpoon: [[\"rightharpoon\"], 0.888, 522, \"xMaxYMin\"],\n  xrightharpoonup: [[\"rightharpoon\"], 0.888, 522, \"xMaxYMin\"],\n  xrightharpoondown: [[\"rightharpoondown\"], 0.888, 522, \"xMaxYMin\"],\n  xlongequal: [[\"longequal\"], 0.888, 334, \"xMinYMin\"],\n  \"\\\\cdlongequal\": [[\"longequal\"], 3.0, 334, \"xMinYMin\"],\n  xtwoheadleftarrow: [[\"twoheadleftarrow\"], 0.888, 334, \"xMinYMin\"],\n  xtwoheadrightarrow: [[\"twoheadrightarrow\"], 0.888, 334, \"xMaxYMin\"],\n  overleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 0.888, 522],\n  overbrace: [[\"leftbrace\", \"midbrace\", \"rightbrace\"], 1.6, 548],\n  underbrace: [[\"leftbraceunder\", \"midbraceunder\", \"rightbraceunder\"], 1.6, 548],\n  underleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 0.888, 522],\n  xleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 1.75, 522],\n  xLeftrightarrow: [[\"doubleleftarrow\", \"doublerightarrow\"], 1.75, 560],\n  xrightleftharpoons: [[\"leftharpoondownplus\", \"rightharpoonplus\"], 1.75, 716],\n  xleftrightharpoons: [[\"leftharpoonplus\", \"rightharpoondownplus\"], 1.75, 716],\n  xhookleftarrow: [[\"leftarrow\", \"righthook\"], 1.08, 522],\n  xhookrightarrow: [[\"lefthook\", \"rightarrow\"], 1.08, 522],\n  overlinesegment: [[\"leftlinesegment\", \"rightlinesegment\"], 0.888, 522],\n  underlinesegment: [[\"leftlinesegment\", \"rightlinesegment\"], 0.888, 522],\n  overgroup: [[\"leftgroup\", \"rightgroup\"], 0.888, 342],\n  undergroup: [[\"leftgroupunder\", \"rightgroupunder\"], 0.888, 342],\n  xmapsto: [[\"leftmapsto\", \"rightarrow\"], 1.5, 522],\n  xtofrom: [[\"leftToFrom\", \"rightToFrom\"], 1.75, 528],\n  // The next three arrows are from the mhchem package.\n  // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the\n  // document as \\xrightarrow or \\xrightleftharpoons. Those have\n  // min-length = 1.75em, so we set min-length on these next three to match.\n  xrightleftarrows: [[\"baraboveleftarrow\", \"rightarrowabovebar\"], 1.75, 901],\n  xrightequilibrium: [[\"baraboveshortleftharpoon\", \"rightharpoonaboveshortbar\"], 1.75, 716],\n  xleftequilibrium: [[\"shortbaraboveleftharpoon\", \"shortrightharpoonabovebar\"], 1.75, 716]\n};\n\nvar groupLength = function groupLength(arg) {\n  if (arg.type === \"ordgroup\") {\n    return arg.body.length;\n  } else {\n    return 1;\n  }\n};\n\nvar svgSpan = function svgSpan(group, options) {\n  // Create a span with inline SVG for the element.\n  function buildSvgSpan_() {\n    var viewBoxWidth = 400000; // default\n\n    var label = group.label.slice(1);\n\n    if (utils.contains([\"widehat\", \"widecheck\", \"widetilde\", \"utilde\"], label)) {\n      // Each type in the `if` statement corresponds to one of the ParseNode\n      // types below. This narrowing is required to access `grp.base`.\n      // $FlowFixMe\n      var grp = group; // There are four SVG images available for each function.\n      // Choose a taller image when there are more characters.\n\n      var numChars = groupLength(grp.base);\n      var viewBoxHeight;\n      var pathName;\n\n      var _height;\n\n      if (numChars > 5) {\n        if (label === \"widehat\" || label === \"widecheck\") {\n          viewBoxHeight = 420;\n          viewBoxWidth = 2364;\n          _height = 0.42;\n          pathName = label + \"4\";\n        } else {\n          viewBoxHeight = 312;\n          viewBoxWidth = 2340;\n          _height = 0.34;\n          pathName = \"tilde4\";\n        }\n      } else {\n        var imgIndex = [1, 1, 2, 2, 3, 3][numChars];\n\n        if (label === \"widehat\" || label === \"widecheck\") {\n          viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex];\n          viewBoxHeight = [0, 239, 300, 360, 420][imgIndex];\n          _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex];\n          pathName = label + imgIndex;\n        } else {\n          viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex];\n          viewBoxHeight = [0, 260, 286, 306, 312][imgIndex];\n          _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex];\n          pathName = \"tilde\" + imgIndex;\n        }\n      }\n\n      var path = new PathNode(pathName);\n      var svgNode = new SvgNode([path], {\n        \"width\": \"100%\",\n        \"height\": makeEm(_height),\n        \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight,\n        \"preserveAspectRatio\": \"none\"\n      });\n      return {\n        span: buildCommon.makeSvgSpan([], [svgNode], options),\n        minWidth: 0,\n        height: _height\n      };\n    } else {\n      var spans = [];\n      var data = katexImagesData[label];\n      var [paths, _minWidth, _viewBoxHeight] = data;\n\n      var _height2 = _viewBoxHeight / 1000;\n\n      var numSvgChildren = paths.length;\n      var widthClasses;\n      var aligns;\n\n      if (numSvgChildren === 1) {\n        // $FlowFixMe: All these cases must be of the 4-tuple type.\n        var align1 = data[3];\n        widthClasses = [\"hide-tail\"];\n        aligns = [align1];\n      } else if (numSvgChildren === 2) {\n        widthClasses = [\"halfarrow-left\", \"halfarrow-right\"];\n        aligns = [\"xMinYMin\", \"xMaxYMin\"];\n      } else if (numSvgChildren === 3) {\n        widthClasses = [\"brace-left\", \"brace-center\", \"brace-right\"];\n        aligns = [\"xMinYMin\", \"xMidYMin\", \"xMaxYMin\"];\n      } else {\n        throw new Error(\"Correct katexImagesData or update code here to support\\n                    \" + numSvgChildren + \" children.\");\n      }\n\n      for (var i = 0; i < numSvgChildren; i++) {\n        var _path = new PathNode(paths[i]);\n\n        var _svgNode = new SvgNode([_path], {\n          \"width\": \"400em\",\n          \"height\": makeEm(_height2),\n          \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + _viewBoxHeight,\n          \"preserveAspectRatio\": aligns[i] + \" slice\"\n        });\n\n        var _span = buildCommon.makeSvgSpan([widthClasses[i]], [_svgNode], options);\n\n        if (numSvgChildren === 1) {\n          return {\n            span: _span,\n            minWidth: _minWidth,\n            height: _height2\n          };\n        } else {\n          _span.style.height = makeEm(_height2);\n          spans.push(_span);\n        }\n      }\n\n      return {\n        span: buildCommon.makeSpan([\"stretchy\"], spans, options),\n        minWidth: _minWidth,\n        height: _height2\n      };\n    }\n  } // buildSvgSpan_()\n\n\n  var {\n    span,\n    minWidth,\n    height\n  } = buildSvgSpan_(); // Note that we are returning span.depth = 0.\n  // Any adjustments relative to the baseline must be done in buildHTML.\n\n  span.height = height;\n  span.style.height = makeEm(height);\n\n  if (minWidth > 0) {\n    span.style.minWidth = makeEm(minWidth);\n  }\n\n  return span;\n};\n\nvar encloseSpan = function encloseSpan(inner, label, topPad, bottomPad, options) {\n  // Return an image span for \\cancel, \\bcancel, \\xcancel, \\fbox, or \\angl\n  var img;\n  var totalHeight = inner.height + inner.depth + topPad + bottomPad;\n\n  if (/fbox|color|angl/.test(label)) {\n    img = buildCommon.makeSpan([\"stretchy\", label], [], options);\n\n    if (label === \"fbox\") {\n      var color = options.color && options.getColor();\n\n      if (color) {\n        img.style.borderColor = color;\n      }\n    }\n  } else {\n    // \\cancel, \\bcancel, or \\xcancel\n    // Since \\cancel's SVG is inline and it omits the viewBox attribute,\n    // its stroke-width will not vary with span area.\n    var lines = [];\n\n    if (/^[bx]cancel$/.test(label)) {\n      lines.push(new LineNode({\n        \"x1\": \"0\",\n        \"y1\": \"0\",\n        \"x2\": \"100%\",\n        \"y2\": \"100%\",\n        \"stroke-width\": \"0.046em\"\n      }));\n    }\n\n    if (/^x?cancel$/.test(label)) {\n      lines.push(new LineNode({\n        \"x1\": \"0\",\n        \"y1\": \"100%\",\n        \"x2\": \"100%\",\n        \"y2\": \"0\",\n        \"stroke-width\": \"0.046em\"\n      }));\n    }\n\n    var svgNode = new SvgNode(lines, {\n      \"width\": \"100%\",\n      \"height\": makeEm(totalHeight)\n    });\n    img = buildCommon.makeSvgSpan([], [svgNode], options);\n  }\n\n  img.height = totalHeight;\n  img.style.height = makeEm(totalHeight);\n  return img;\n};\n\nvar stretchy = {\n  encloseSpan,\n  mathMLnode,\n  svgSpan\n};\n\n/**\n * Asserts that the node is of the given type and returns it with stricter\n * typing. Throws if the node's type does not match.\n */\nfunction assertNodeType(node, type) {\n  if (!node || node.type !== type) {\n    throw new Error(\"Expected node of type \" + type + \", but got \" + (node ? \"node of type \" + node.type : String(node)));\n  } // $FlowFixMe, >=0.125\n\n\n  return node;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\n\nfunction assertSymbolNodeType(node) {\n  var typedNode = checkSymbolNodeType(node);\n\n  if (!typedNode) {\n    throw new Error(\"Expected node of symbol group type, but got \" + (node ? \"node of type \" + node.type : String(node)));\n  }\n\n  return typedNode;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\n\nfunction checkSymbolNodeType(node) {\n  if (node && (node.type === \"atom\" || NON_ATOMS.hasOwnProperty(node.type))) {\n    // $FlowFixMe\n    return node;\n  }\n\n  return null;\n}\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"accent\", but\n// also \"supsub\" since an accent can affect super/subscripting.\nvar htmlBuilder$a = (grp, options) => {\n  // Accents are handled in the TeXbook pg. 443, rule 12.\n  var base;\n  var group;\n  var supSubGroup;\n\n  if (grp && grp.type === \"supsub\") {\n    // If our base is a character box, and we have superscripts and\n    // subscripts, the supsub will defer to us. In particular, we want\n    // to attach the superscripts and subscripts to the inner body (so\n    // that the position of the superscripts and subscripts won't be\n    // affected by the height of the accent). We accomplish this by\n    // sticking the base of the accent into the base of the supsub, and\n    // rendering that, while keeping track of where the accent is.\n    // The real accent group is the base of the supsub group\n    group = assertNodeType(grp.base, \"accent\"); // The character box is the base of the accent group\n\n    base = group.base; // Stick the character box into the base of the supsub group\n\n    grp.base = base; // Rerender the supsub group with its new base, and store that\n    // result.\n\n    supSubGroup = assertSpan(buildGroup$1(grp, options)); // reset original base\n\n    grp.base = group;\n  } else {\n    group = assertNodeType(grp, \"accent\");\n    base = group.base;\n  } // Build the base group\n\n\n  var body = buildGroup$1(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character?\n\n  var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line \"If the\n  // nucleus is not a single character, let s = 0; otherwise set s to the\n  // kern amount for the nucleus followed by the \\skewchar of its font.\"\n  // Note that our skew metrics are just the kern between each character\n  // and the skewchar.\n\n  var skew = 0;\n\n  if (mustShift) {\n    // If the base is a character box, then we want the skew of the\n    // innermost character. To do that, we find the innermost character:\n    var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it\n\n    var baseGroup = buildGroup$1(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol.\n\n    skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we\n    // removed with getBaseElem might contain things like \\color which\n    // we can't get rid of.\n    // TODO(emily): Find a better way to get the skew\n  }\n\n  var accentBelow = group.label === \"\\\\c\"; // calculate the amount of space between the body and the accent\n\n  var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); // Build the accent\n\n  var accentBody;\n\n  if (!group.isStretchy) {\n    var accent;\n    var width;\n\n    if (group.label === \"\\\\vec\") {\n      // Before version 0.9, \\vec used the combining font glyph U+20D7.\n      // But browsers, especially Safari, are not consistent in how they\n      // render combining characters when not preceded by a character.\n      // So now we use an SVG.\n      // If Safari reforms, we should consider reverting to the glyph.\n      accent = buildCommon.staticSvg(\"vec\", options);\n      width = buildCommon.svgData.vec[1];\n    } else {\n      accent = buildCommon.makeOrd({\n        mode: group.mode,\n        text: group.label\n      }, options, \"textord\");\n      accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to\n      // shift the accent over to a place we don't want.\n\n      accent.italic = 0;\n      width = accent.width;\n\n      if (accentBelow) {\n        clearance += accent.depth;\n      }\n    }\n\n    accentBody = buildCommon.makeSpan([\"accent-body\"], [accent]); // \"Full\" accents expand the width of the resulting symbol to be\n    // at least the width of the accent, and overlap directly onto the\n    // character without any vertical offset.\n\n    var accentFull = group.label === \"\\\\textcircled\";\n\n    if (accentFull) {\n      accentBody.classes.push('accent-full');\n      clearance = body.height;\n    } // Shift the accent over by the skew.\n\n\n    var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }`\n    // so that the accent doesn't contribute to the bounding box.\n    // We need to shift the character by its width (effectively half\n    // its width) to compensate.\n\n    if (!accentFull) {\n      left -= width / 2;\n    }\n\n    accentBody.style.left = makeEm(left); // \\textcircled uses the \\bigcirc glyph, so it needs some\n    // vertical adjustment to match LaTeX.\n\n    if (group.label === \"\\\\textcircled\") {\n      accentBody.style.top = \".2em\";\n    }\n\n    accentBody = buildCommon.makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: body\n      }, {\n        type: \"kern\",\n        size: -clearance\n      }, {\n        type: \"elem\",\n        elem: accentBody\n      }]\n    }, options);\n  } else {\n    accentBody = stretchy.svgSpan(group, options);\n    accentBody = buildCommon.makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: body\n      }, {\n        type: \"elem\",\n        elem: accentBody,\n        wrapperClasses: [\"svg-align\"],\n        wrapperStyle: skew > 0 ? {\n          width: \"calc(100% - \" + makeEm(2 * skew) + \")\",\n          marginLeft: makeEm(2 * skew)\n        } : undefined\n      }]\n    }, options);\n  }\n\n  var accentWrap = buildCommon.makeSpan([\"mord\", \"accent\"], [accentBody], options);\n\n  if (supSubGroup) {\n    // Here, we replace the \"base\" child of the supsub with our newly\n    // generated accent.\n    supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the\n    // accent, we manually recalculate height.\n\n    supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not.\n\n    supSubGroup.classes[0] = \"mord\";\n    return supSubGroup;\n  } else {\n    return accentWrap;\n  }\n};\n\nvar mathmlBuilder$9 = (group, options) => {\n  var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode(\"mo\", [makeText(group.label, group.mode)]);\n  var node = new mathMLTree.MathNode(\"mover\", [buildGroup(group.base, options), accentNode]);\n  node.setAttribute(\"accent\", \"true\");\n  return node;\n};\n\nvar NON_STRETCHY_ACCENT_REGEX = new RegExp([\"\\\\acute\", \"\\\\grave\", \"\\\\ddot\", \"\\\\tilde\", \"\\\\bar\", \"\\\\breve\", \"\\\\check\", \"\\\\hat\", \"\\\\vec\", \"\\\\dot\", \"\\\\mathring\"].map(accent => \"\\\\\" + accent).join(\"|\")); // Accents\n\ndefineFunction({\n  type: \"accent\",\n  names: [\"\\\\acute\", \"\\\\grave\", \"\\\\ddot\", \"\\\\tilde\", \"\\\\bar\", \"\\\\breve\", \"\\\\check\", \"\\\\hat\", \"\\\\vec\", \"\\\\dot\", \"\\\\mathring\", \"\\\\widecheck\", \"\\\\widehat\", \"\\\\widetilde\", \"\\\\overrightarrow\", \"\\\\overleftarrow\", \"\\\\Overrightarrow\", \"\\\\overleftrightarrow\", \"\\\\overgroup\", \"\\\\overlinesegment\", \"\\\\overleftharpoon\", \"\\\\overrightharpoon\"],\n  props: {\n    numArgs: 1\n  },\n  handler: (context, args) => {\n    var base = normalizeArgument(args[0]);\n    var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName);\n    var isShifty = !isStretchy || context.funcName === \"\\\\widehat\" || context.funcName === \"\\\\widetilde\" || context.funcName === \"\\\\widecheck\";\n    return {\n      type: \"accent\",\n      mode: context.parser.mode,\n      label: context.funcName,\n      isStretchy: isStretchy,\n      isShifty: isShifty,\n      base: base\n    };\n  },\n  htmlBuilder: htmlBuilder$a,\n  mathmlBuilder: mathmlBuilder$9\n}); // Text-mode accents\n\ndefineFunction({\n  type: \"accent\",\n  names: [\"\\\\'\", \"\\\\`\", \"\\\\^\", \"\\\\~\", \"\\\\=\", \"\\\\u\", \"\\\\.\", '\\\\\"', \"\\\\c\", \"\\\\r\", \"\\\\H\", \"\\\\v\", \"\\\\textcircled\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true,\n    allowedInMath: true,\n    // unless in strict mode\n    argTypes: [\"primitive\"]\n  },\n  handler: (context, args) => {\n    var base = args[0];\n    var mode = context.parser.mode;\n\n    if (mode === \"math\") {\n      context.parser.settings.reportNonstrict(\"mathVsTextAccents\", \"LaTeX's accent \" + context.funcName + \" works only in text mode\");\n      mode = \"text\";\n    }\n\n    return {\n      type: \"accent\",\n      mode: mode,\n      label: context.funcName,\n      isStretchy: false,\n      isShifty: true,\n      base: base\n    };\n  },\n  htmlBuilder: htmlBuilder$a,\n  mathmlBuilder: mathmlBuilder$9\n});\n\n// Horizontal overlap functions\ndefineFunction({\n  type: \"accentUnder\",\n  names: [\"\\\\underleftarrow\", \"\\\\underrightarrow\", \"\\\\underleftrightarrow\", \"\\\\undergroup\", \"\\\\underlinesegment\", \"\\\\utilde\"],\n  props: {\n    numArgs: 1\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var base = args[0];\n    return {\n      type: \"accentUnder\",\n      mode: parser.mode,\n      label: funcName,\n      base: base\n    };\n  },\n  htmlBuilder: (group, options) => {\n    // Treat under accents much like underlines.\n    var innerGroup = buildGroup$1(group.base, options);\n    var accentBody = stretchy.svgSpan(group, options);\n    var kern = group.label === \"\\\\utilde\" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns\n\n    var vlist = buildCommon.makeVList({\n      positionType: \"top\",\n      positionData: innerGroup.height,\n      children: [{\n        type: \"elem\",\n        elem: accentBody,\n        wrapperClasses: [\"svg-align\"]\n      }, {\n        type: \"kern\",\n        size: kern\n      }, {\n        type: \"elem\",\n        elem: innerGroup\n      }]\n    }, options);\n    return buildCommon.makeSpan([\"mord\", \"accentunder\"], [vlist], options);\n  },\n  mathmlBuilder: (group, options) => {\n    var accentNode = stretchy.mathMLnode(group.label);\n    var node = new mathMLTree.MathNode(\"munder\", [buildGroup(group.base, options), accentNode]);\n    node.setAttribute(\"accentunder\", \"true\");\n    return node;\n  }\n});\n\n// Helper function\nvar paddedNode = group => {\n  var node = new mathMLTree.MathNode(\"mpadded\", group ? [group] : []);\n  node.setAttribute(\"width\", \"+0.6em\");\n  node.setAttribute(\"lspace\", \"0.3em\");\n  return node;\n}; // Stretchy arrows with an optional argument\n\n\ndefineFunction({\n  type: \"xArrow\",\n  names: [\"\\\\xleftarrow\", \"\\\\xrightarrow\", \"\\\\xLeftarrow\", \"\\\\xRightarrow\", \"\\\\xleftrightarrow\", \"\\\\xLeftrightarrow\", \"\\\\xhookleftarrow\", \"\\\\xhookrightarrow\", \"\\\\xmapsto\", \"\\\\xrightharpoondown\", \"\\\\xrightharpoonup\", \"\\\\xleftharpoondown\", \"\\\\xleftharpoonup\", \"\\\\xrightleftharpoons\", \"\\\\xleftrightharpoons\", \"\\\\xlongequal\", \"\\\\xtwoheadrightarrow\", \"\\\\xtwoheadleftarrow\", \"\\\\xtofrom\", // The next 3 functions are here to support the mhchem extension.\n  // Direct use of these functions is discouraged and may break someday.\n  \"\\\\xrightleftarrows\", \"\\\\xrightequilibrium\", \"\\\\xleftequilibrium\", // The next 3 functions are here only to support the {CD} environment.\n  \"\\\\\\\\cdrightarrow\", \"\\\\\\\\cdleftarrow\", \"\\\\\\\\cdlongequal\"],\n  props: {\n    numArgs: 1,\n    numOptionalArgs: 1\n  },\n\n  handler(_ref, args, optArgs) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    return {\n      type: \"xArrow\",\n      mode: parser.mode,\n      label: funcName,\n      body: args[0],\n      below: optArgs[0]\n    };\n  },\n\n  // Flow is unable to correctly infer the type of `group`, even though it's\n  // unambiguously determined from the passed-in `type` above.\n  htmlBuilder(group, options) {\n    var style = options.style; // Build the argument groups in the appropriate style.\n    // Ref: amsmath.dtx:   \\hbox{$\\scriptstyle\\mkern#3mu{#6}\\mkern#4mu$}%\n    // Some groups can return document fragments.  Handle those by wrapping\n    // them in a span.\n\n    var newOptions = options.havingStyle(style.sup());\n    var upperGroup = buildCommon.wrapFragment(buildGroup$1(group.body, newOptions, options), options);\n    var arrowPrefix = group.label.slice(0, 2) === \"\\\\x\" ? \"x\" : \"cd\";\n    upperGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n    var lowerGroup;\n\n    if (group.below) {\n      // Build the lower group\n      newOptions = options.havingStyle(style.sub());\n      lowerGroup = buildCommon.wrapFragment(buildGroup$1(group.below, newOptions, options), options);\n      lowerGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n    }\n\n    var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0.\n    // The point we want on the math axis is at 0.5 * arrowBody.height.\n\n    var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\\if0#2\\else\\mkern#2mu\\fi\n\n    var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu\n\n    if (upperGroup.depth > 0.25 || group.label === \"\\\\xleftequilibrium\") {\n      upperShift -= upperGroup.depth; // shift up if depth encroaches\n    } // Generate the vlist\n\n\n    var vlist;\n\n    if (lowerGroup) {\n      var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111;\n      vlist = buildCommon.makeVList({\n        positionType: \"individualShift\",\n        children: [{\n          type: \"elem\",\n          elem: upperGroup,\n          shift: upperShift\n        }, {\n          type: \"elem\",\n          elem: arrowBody,\n          shift: arrowShift\n        }, {\n          type: \"elem\",\n          elem: lowerGroup,\n          shift: lowerShift\n        }]\n      }, options);\n    } else {\n      vlist = buildCommon.makeVList({\n        positionType: \"individualShift\",\n        children: [{\n          type: \"elem\",\n          elem: upperGroup,\n          shift: upperShift\n        }, {\n          type: \"elem\",\n          elem: arrowBody,\n          shift: arrowShift\n        }]\n      }, options);\n    } // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n\n\n    vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n    return buildCommon.makeSpan([\"mrel\", \"x-arrow\"], [vlist], options);\n  },\n\n  mathmlBuilder(group, options) {\n    var arrowNode = stretchy.mathMLnode(group.label);\n    arrowNode.setAttribute(\"minsize\", group.label.charAt(0) === \"x\" ? \"1.75em\" : \"3.0em\");\n    var node;\n\n    if (group.body) {\n      var upperNode = paddedNode(buildGroup(group.body, options));\n\n      if (group.below) {\n        var lowerNode = paddedNode(buildGroup(group.below, options));\n        node = new mathMLTree.MathNode(\"munderover\", [arrowNode, lowerNode, upperNode]);\n      } else {\n        node = new mathMLTree.MathNode(\"mover\", [arrowNode, upperNode]);\n      }\n    } else if (group.below) {\n      var _lowerNode = paddedNode(buildGroup(group.below, options));\n\n      node = new mathMLTree.MathNode(\"munder\", [arrowNode, _lowerNode]);\n    } else {\n      // This should never happen.\n      // Parser.js throws an error if there is no argument.\n      node = paddedNode();\n      node = new mathMLTree.MathNode(\"mover\", [arrowNode, node]);\n    }\n\n    return node;\n  }\n\n});\n\nvar makeSpan = buildCommon.makeSpan;\n\nfunction htmlBuilder$9(group, options) {\n  var elements = buildExpression$1(group.body, options, true);\n  return makeSpan([group.mclass], elements, options);\n}\n\nfunction mathmlBuilder$8(group, options) {\n  var node;\n  var inner = buildExpression(group.body, options);\n\n  if (group.mclass === \"minner\") {\n    node = new mathMLTree.MathNode(\"mpadded\", inner);\n  } else if (group.mclass === \"mord\") {\n    if (group.isCharacterBox) {\n      node = inner[0];\n      node.type = \"mi\";\n    } else {\n      node = new mathMLTree.MathNode(\"mi\", inner);\n    }\n  } else {\n    if (group.isCharacterBox) {\n      node = inner[0];\n      node.type = \"mo\";\n    } else {\n      node = new mathMLTree.MathNode(\"mo\", inner);\n    } // Set spacing based on what is the most likely adjacent atom type.\n    // See TeXbook p170.\n\n\n    if (group.mclass === \"mbin\") {\n      node.attributes.lspace = \"0.22em\"; // medium space\n\n      node.attributes.rspace = \"0.22em\";\n    } else if (group.mclass === \"mpunct\") {\n      node.attributes.lspace = \"0em\";\n      node.attributes.rspace = \"0.17em\"; // thinspace\n    } else if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n      node.attributes.lspace = \"0em\";\n      node.attributes.rspace = \"0em\";\n    } else if (group.mclass === \"minner\") {\n      node.attributes.lspace = \"0.0556em\"; // 1 mu is the most likely option\n\n      node.attributes.width = \"+0.1111em\";\n    } // MathML <mo> default space is 5/18 em, so <mrel> needs no action.\n    // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo\n\n  }\n\n  return node;\n} // Math class commands except \\mathop\n\n\ndefineFunction({\n  type: \"mclass\",\n  names: [\"\\\\mathord\", \"\\\\mathbin\", \"\\\\mathrel\", \"\\\\mathopen\", \"\\\\mathclose\", \"\\\\mathpunct\", \"\\\\mathinner\"],\n  props: {\n    numArgs: 1,\n    primitive: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"mclass\",\n      mode: parser.mode,\n      mclass: \"m\" + funcName.slice(5),\n      // TODO(kevinb): don't prefix with 'm'\n      body: ordargument(body),\n      isCharacterBox: utils.isCharacterBox(body)\n    };\n  },\n\n  htmlBuilder: htmlBuilder$9,\n  mathmlBuilder: mathmlBuilder$8\n});\nvar binrelClass = arg => {\n  // \\binrel@ spacing varies with (bin|rel|ord) of the atom in the argument.\n  // (by rendering separately and with {}s before and after, and measuring\n  // the change in spacing).  We'll do roughly the same by detecting the\n  // atom type directly.\n  var atom = arg.type === \"ordgroup\" && arg.body.length ? arg.body[0] : arg;\n\n  if (atom.type === \"atom\" && (atom.family === \"bin\" || atom.family === \"rel\")) {\n    return \"m\" + atom.family;\n  } else {\n    return \"mord\";\n  }\n}; // \\@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord.\n// This is equivalent to \\binrel@{x}\\binrel@@{y} in AMSTeX.\n\ndefineFunction({\n  type: \"mclass\",\n  names: [\"\\\\@binrel\"],\n  props: {\n    numArgs: 2\n  },\n\n  handler(_ref2, args) {\n    var {\n      parser\n    } = _ref2;\n    return {\n      type: \"mclass\",\n      mode: parser.mode,\n      mclass: binrelClass(args[0]),\n      body: ordargument(args[1]),\n      isCharacterBox: utils.isCharacterBox(args[1])\n    };\n  }\n\n}); // Build a relation or stacked op by placing one symbol on top of another\n\ndefineFunction({\n  type: \"mclass\",\n  names: [\"\\\\stackrel\", \"\\\\overset\", \"\\\\underset\"],\n  props: {\n    numArgs: 2\n  },\n\n  handler(_ref3, args) {\n    var {\n      parser,\n      funcName\n    } = _ref3;\n    var baseArg = args[1];\n    var shiftedArg = args[0];\n    var mclass;\n\n    if (funcName !== \"\\\\stackrel\") {\n      // LaTeX applies \\binrel spacing to \\overset and \\underset.\n      mclass = binrelClass(baseArg);\n    } else {\n      mclass = \"mrel\"; // for \\stackrel\n    }\n\n    var baseOp = {\n      type: \"op\",\n      mode: baseArg.mode,\n      limits: true,\n      alwaysHandleSupSub: true,\n      parentIsSupSub: false,\n      symbol: false,\n      suppressBaseShift: funcName !== \"\\\\stackrel\",\n      body: ordargument(baseArg)\n    };\n    var supsub = {\n      type: \"supsub\",\n      mode: shiftedArg.mode,\n      base: baseOp,\n      sup: funcName === \"\\\\underset\" ? null : shiftedArg,\n      sub: funcName === \"\\\\underset\" ? shiftedArg : null\n    };\n    return {\n      type: \"mclass\",\n      mode: parser.mode,\n      mclass,\n      body: [supsub],\n      isCharacterBox: utils.isCharacterBox(supsub)\n    };\n  },\n\n  htmlBuilder: htmlBuilder$9,\n  mathmlBuilder: mathmlBuilder$8\n});\n\n// \\pmb is a simulation of bold font.\n// The version of \\pmb in ambsy.sty works by typesetting three copies\n// with small offsets. We use CSS text-shadow.\n// It's a hack. Not as good as a real bold font. Better than nothing.\ndefineFunction({\n  type: \"pmb\",\n  names: [\"\\\\pmb\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"pmb\",\n      mode: parser.mode,\n      mclass: binrelClass(args[0]),\n      body: ordargument(args[0])\n    };\n  },\n\n  htmlBuilder(group, options) {\n    var elements = buildExpression$1(group.body, options, true);\n    var node = buildCommon.makeSpan([group.mclass], elements, options);\n    node.style.textShadow = \"0.02em 0.01em 0.04px\";\n    return node;\n  },\n\n  mathmlBuilder(group, style) {\n    var inner = buildExpression(group.body, style); // Wrap with an <mstyle> element.\n\n    var node = new mathMLTree.MathNode(\"mstyle\", inner);\n    node.setAttribute(\"style\", \"text-shadow: 0.02em 0.01em 0.04px\");\n    return node;\n  }\n\n});\n\nvar cdArrowFunctionName = {\n  \">\": \"\\\\\\\\cdrightarrow\",\n  \"<\": \"\\\\\\\\cdleftarrow\",\n  \"=\": \"\\\\\\\\cdlongequal\",\n  \"A\": \"\\\\uparrow\",\n  \"V\": \"\\\\downarrow\",\n  \"|\": \"\\\\Vert\",\n  \".\": \"no arrow\"\n};\n\nvar newCell = () => {\n  // Create an empty cell, to be filled below with parse nodes.\n  // The parseTree from this module must be constructed like the\n  // one created by parseArray(), so an empty CD cell must\n  // be a ParseNode<\"styling\">. And CD is always displaystyle.\n  // So these values are fixed and flow can do implicit typing.\n  return {\n    type: \"styling\",\n    body: [],\n    mode: \"math\",\n    style: \"display\"\n  };\n};\n\nvar isStartOfArrow = node => {\n  return node.type === \"textord\" && node.text === \"@\";\n};\n\nvar isLabelEnd = (node, endChar) => {\n  return (node.type === \"mathord\" || node.type === \"atom\") && node.text === endChar;\n};\n\nfunction cdArrow(arrowChar, labels, parser) {\n  // Return a parse tree of an arrow and its labels.\n  // This acts in a way similar to a macro expansion.\n  var funcName = cdArrowFunctionName[arrowChar];\n\n  switch (funcName) {\n    case \"\\\\\\\\cdrightarrow\":\n    case \"\\\\\\\\cdleftarrow\":\n      return parser.callFunction(funcName, [labels[0]], [labels[1]]);\n\n    case \"\\\\uparrow\":\n    case \"\\\\downarrow\":\n      {\n        var leftLabel = parser.callFunction(\"\\\\\\\\cdleft\", [labels[0]], []);\n        var bareArrow = {\n          type: \"atom\",\n          text: funcName,\n          mode: \"math\",\n          family: \"rel\"\n        };\n        var sizedArrow = parser.callFunction(\"\\\\Big\", [bareArrow], []);\n        var rightLabel = parser.callFunction(\"\\\\\\\\cdright\", [labels[1]], []);\n        var arrowGroup = {\n          type: \"ordgroup\",\n          mode: \"math\",\n          body: [leftLabel, sizedArrow, rightLabel]\n        };\n        return parser.callFunction(\"\\\\\\\\cdparent\", [arrowGroup], []);\n      }\n\n    case \"\\\\\\\\cdlongequal\":\n      return parser.callFunction(\"\\\\\\\\cdlongequal\", [], []);\n\n    case \"\\\\Vert\":\n      {\n        var arrow = {\n          type: \"textord\",\n          text: \"\\\\Vert\",\n          mode: \"math\"\n        };\n        return parser.callFunction(\"\\\\Big\", [arrow], []);\n      }\n\n    default:\n      return {\n        type: \"textord\",\n        text: \" \",\n        mode: \"math\"\n      };\n  }\n}\n\nfunction parseCD(parser) {\n  // Get the array's parse nodes with \\\\ temporarily mapped to \\cr.\n  var parsedRows = [];\n  parser.gullet.beginGroup();\n  parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n  parser.gullet.beginGroup();\n\n  while (true) {\n    // eslint-disable-line no-constant-condition\n    // Get the parse nodes for the next row.\n    parsedRows.push(parser.parseExpression(false, \"\\\\\\\\\"));\n    parser.gullet.endGroup();\n    parser.gullet.beginGroup();\n    var next = parser.fetch().text;\n\n    if (next === \"&\" || next === \"\\\\\\\\\") {\n      parser.consume();\n    } else if (next === \"\\\\end\") {\n      if (parsedRows[parsedRows.length - 1].length === 0) {\n        parsedRows.pop(); // final row ended in \\\\\n      }\n\n      break;\n    } else {\n      throw new ParseError(\"Expected \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n    }\n  }\n\n  var row = [];\n  var body = [row]; // Loop thru the parse nodes. Collect them into cells and arrows.\n\n  for (var i = 0; i < parsedRows.length; i++) {\n    // Start a new row.\n    var rowNodes = parsedRows[i]; // Create the first cell.\n\n    var cell = newCell();\n\n    for (var j = 0; j < rowNodes.length; j++) {\n      if (!isStartOfArrow(rowNodes[j])) {\n        // If a parseNode is not an arrow, it goes into a cell.\n        cell.body.push(rowNodes[j]);\n      } else {\n        // Parse node j is an \"@\", the start of an arrow.\n        // Before starting on the arrow, push the cell into `row`.\n        row.push(cell); // Now collect parseNodes into an arrow.\n        // The character after \"@\" defines the arrow type.\n\n        j += 1;\n        var arrowChar = assertSymbolNodeType(rowNodes[j]).text; // Create two empty label nodes. We may or may not use them.\n\n        var labels = new Array(2);\n        labels[0] = {\n          type: \"ordgroup\",\n          mode: \"math\",\n          body: []\n        };\n        labels[1] = {\n          type: \"ordgroup\",\n          mode: \"math\",\n          body: []\n        }; // Process the arrow.\n\n        if (\"=|.\".indexOf(arrowChar) > -1) ; else if (\"<>AV\".indexOf(arrowChar) > -1) {\n          // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take\n          // two optional labels. E.g. the right-point arrow syntax is\n          // really:  @>{optional label}>{optional label}>\n          // Collect parseNodes into labels.\n          for (var labelNum = 0; labelNum < 2; labelNum++) {\n            var inLabel = true;\n\n            for (var k = j + 1; k < rowNodes.length; k++) {\n              if (isLabelEnd(rowNodes[k], arrowChar)) {\n                inLabel = false;\n                j = k;\n                break;\n              }\n\n              if (isStartOfArrow(rowNodes[k])) {\n                throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[k]);\n              }\n\n              labels[labelNum].body.push(rowNodes[k]);\n            }\n\n            if (inLabel) {\n              // isLabelEnd never returned a true.\n              throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[j]);\n            }\n          }\n        } else {\n          throw new ParseError(\"Expected one of \\\"<>AV=|.\\\" after @\", rowNodes[j]);\n        } // Now join the arrow to its labels.\n\n\n        var arrow = cdArrow(arrowChar, labels, parser); // Wrap the arrow in  ParseNode<\"styling\">.\n        // This is done to match parseArray() behavior.\n\n        var wrappedArrow = {\n          type: \"styling\",\n          body: [arrow],\n          mode: \"math\",\n          style: \"display\" // CD is always displaystyle.\n\n        };\n        row.push(wrappedArrow); // In CD's syntax, cells are implicit. That is, everything that\n        // is not an arrow gets collected into a cell. So create an empty\n        // cell now. It will collect upcoming parseNodes.\n\n        cell = newCell();\n      }\n    }\n\n    if (i % 2 === 0) {\n      // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell\n      // The last cell is not yet pushed into `row`, so:\n      row.push(cell);\n    } else {\n      // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow\n      // Remove the empty cell that was placed at the beginning of `row`.\n      row.shift();\n    }\n\n    row = [];\n    body.push(row);\n  } // End row group\n\n\n  parser.gullet.endGroup(); // End array group defining \\\\\n\n  parser.gullet.endGroup(); // define column separation.\n\n  var cols = new Array(body[0].length).fill({\n    type: \"align\",\n    align: \"c\",\n    pregap: 0.25,\n    // CD package sets \\enskip between columns.\n    postgap: 0.25 // So pre and post each get half an \\enskip, i.e. 0.25em.\n\n  });\n  return {\n    type: \"array\",\n    mode: \"math\",\n    body,\n    arraystretch: 1,\n    addJot: true,\n    rowGaps: [null],\n    cols,\n    colSeparationType: \"CD\",\n    hLinesBeforeRow: new Array(body.length + 1).fill([])\n  };\n} // The functions below are not available for general use.\n// They are here only for internal use by the {CD} environment in placing labels\n// next to vertical arrows.\n// We don't need any such functions for horizontal arrows because we can reuse\n// the functionality that already exists for extensible arrows.\n\ndefineFunction({\n  type: \"cdlabel\",\n  names: [\"\\\\\\\\cdleft\", \"\\\\\\\\cdright\"],\n  props: {\n    numArgs: 1\n  },\n\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    return {\n      type: \"cdlabel\",\n      mode: parser.mode,\n      side: funcName.slice(4),\n      label: args[0]\n    };\n  },\n\n  htmlBuilder(group, options) {\n    var newOptions = options.havingStyle(options.style.sup());\n    var label = buildCommon.wrapFragment(buildGroup$1(group.label, newOptions, options), options);\n    label.classes.push(\"cd-label-\" + group.side);\n    label.style.bottom = makeEm(0.8 - label.depth); // Zero out label height & depth, so vertical align of arrow is set\n    // by the arrow height, not by the label.\n\n    label.height = 0;\n    label.depth = 0;\n    return label;\n  },\n\n  mathmlBuilder(group, options) {\n    var label = new mathMLTree.MathNode(\"mrow\", [buildGroup(group.label, options)]);\n    label = new mathMLTree.MathNode(\"mpadded\", [label]);\n    label.setAttribute(\"width\", \"0\");\n\n    if (group.side === \"left\") {\n      label.setAttribute(\"lspace\", \"-1width\");\n    } // We have to guess at vertical alignment. We know the arrow is 1.8em tall,\n    // But we don't know the height or depth of the label.\n\n\n    label.setAttribute(\"voffset\", \"0.7em\");\n    label = new mathMLTree.MathNode(\"mstyle\", [label]);\n    label.setAttribute(\"displaystyle\", \"false\");\n    label.setAttribute(\"scriptlevel\", \"1\");\n    return label;\n  }\n\n});\ndefineFunction({\n  type: \"cdlabelparent\",\n  names: [\"\\\\\\\\cdparent\"],\n  props: {\n    numArgs: 1\n  },\n\n  handler(_ref2, args) {\n    var {\n      parser\n    } = _ref2;\n    return {\n      type: \"cdlabelparent\",\n      mode: parser.mode,\n      fragment: args[0]\n    };\n  },\n\n  htmlBuilder(group, options) {\n    // Wrap the vertical arrow and its labels.\n    // The parent gets position: relative. The child gets position: absolute.\n    // So CSS can locate the label correctly.\n    var parent = buildCommon.wrapFragment(buildGroup$1(group.fragment, options), options);\n    parent.classes.push(\"cd-vert-arrow\");\n    return parent;\n  },\n\n  mathmlBuilder(group, options) {\n    return new mathMLTree.MathNode(\"mrow\", [buildGroup(group.fragment, options)]);\n  }\n\n});\n\n// {123} and converts into symbol with code 123.  It is used by the *macro*\n// \\char defined in macros.js.\n\ndefineFunction({\n  type: \"textord\",\n  names: [\"\\\\@char\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    var arg = assertNodeType(args[0], \"ordgroup\");\n    var group = arg.body;\n    var number = \"\";\n\n    for (var i = 0; i < group.length; i++) {\n      var node = assertNodeType(group[i], \"textord\");\n      number += node.text;\n    }\n\n    var code = parseInt(number);\n    var text;\n\n    if (isNaN(code)) {\n      throw new ParseError(\"\\\\@char has non-numeric argument \" + number); // If we drop IE support, the following code could be replaced with\n      // text = String.fromCodePoint(code)\n    } else if (code < 0 || code >= 0x10ffff) {\n      throw new ParseError(\"\\\\@char with invalid code point \" + number);\n    } else if (code <= 0xffff) {\n      text = String.fromCharCode(code);\n    } else {\n      // Astral code point; split into surrogate halves\n      code -= 0x10000;\n      text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00);\n    }\n\n    return {\n      type: \"textord\",\n      mode: parser.mode,\n      text: text\n    };\n  }\n\n});\n\nvar htmlBuilder$8 = (group, options) => {\n  var elements = buildExpression$1(group.body, options.withColor(group.color), false); // \\color isn't supposed to affect the type of the elements it contains.\n  // To accomplish this, we wrap the results in a fragment, so the inner\n  // elements will be able to directly interact with their neighbors. For\n  // example, `\\color{red}{2 +} 3` has the same spacing as `2 + 3`\n\n  return buildCommon.makeFragment(elements);\n};\n\nvar mathmlBuilder$7 = (group, options) => {\n  var inner = buildExpression(group.body, options.withColor(group.color));\n  var node = new mathMLTree.MathNode(\"mstyle\", inner);\n  node.setAttribute(\"mathcolor\", group.color);\n  return node;\n};\n\ndefineFunction({\n  type: \"color\",\n  names: [\"\\\\textcolor\"],\n  props: {\n    numArgs: 2,\n    allowedInText: true,\n    argTypes: [\"color\", \"original\"]\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    var color = assertNodeType(args[0], \"color-token\").color;\n    var body = args[1];\n    return {\n      type: \"color\",\n      mode: parser.mode,\n      color,\n      body: ordargument(body)\n    };\n  },\n\n  htmlBuilder: htmlBuilder$8,\n  mathmlBuilder: mathmlBuilder$7\n});\ndefineFunction({\n  type: \"color\",\n  names: [\"\\\\color\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true,\n    argTypes: [\"color\"]\n  },\n\n  handler(_ref2, args) {\n    var {\n      parser,\n      breakOnTokenText\n    } = _ref2;\n    var color = assertNodeType(args[0], \"color-token\").color; // Set macro \\current@color in current namespace to store the current\n    // color, mimicking the behavior of color.sty.\n    // This is currently used just to correctly color a \\right\n    // that follows a \\color command.\n\n    parser.gullet.macros.set(\"\\\\current@color\", color); // Parse out the implicit body that should be colored.\n\n    var body = parser.parseExpression(true, breakOnTokenText);\n    return {\n      type: \"color\",\n      mode: parser.mode,\n      color,\n      body\n    };\n  },\n\n  htmlBuilder: htmlBuilder$8,\n  mathmlBuilder: mathmlBuilder$7\n});\n\n// Row breaks within tabular environments, and line breaks at top level\n\ndefineFunction({\n  type: \"cr\",\n  names: [\"\\\\\\\\\"],\n  props: {\n    numArgs: 0,\n    numOptionalArgs: 0,\n    allowedInText: true\n  },\n\n  handler(_ref, args, optArgs) {\n    var {\n      parser\n    } = _ref;\n    var size = parser.gullet.future().text === \"[\" ? parser.parseSizeGroup(true) : null;\n    var newLine = !parser.settings.displayMode || !parser.settings.useStrictBehavior(\"newLineInDisplayMode\", \"In LaTeX, \\\\\\\\ or \\\\newline \" + \"does nothing in display mode\");\n    return {\n      type: \"cr\",\n      mode: parser.mode,\n      newLine,\n      size: size && assertNodeType(size, \"size\").value\n    };\n  },\n\n  // The following builders are called only at the top level,\n  // not within tabular/array environments.\n  htmlBuilder(group, options) {\n    var span = buildCommon.makeSpan([\"mspace\"], [], options);\n\n    if (group.newLine) {\n      span.classes.push(\"newline\");\n\n      if (group.size) {\n        span.style.marginTop = makeEm(calculateSize(group.size, options));\n      }\n    }\n\n    return span;\n  },\n\n  mathmlBuilder(group, options) {\n    var node = new mathMLTree.MathNode(\"mspace\");\n\n    if (group.newLine) {\n      node.setAttribute(\"linebreak\", \"newline\");\n\n      if (group.size) {\n        node.setAttribute(\"height\", makeEm(calculateSize(group.size, options)));\n      }\n    }\n\n    return node;\n  }\n\n});\n\nvar globalMap = {\n  \"\\\\global\": \"\\\\global\",\n  \"\\\\long\": \"\\\\\\\\globallong\",\n  \"\\\\\\\\globallong\": \"\\\\\\\\globallong\",\n  \"\\\\def\": \"\\\\gdef\",\n  \"\\\\gdef\": \"\\\\gdef\",\n  \"\\\\edef\": \"\\\\xdef\",\n  \"\\\\xdef\": \"\\\\xdef\",\n  \"\\\\let\": \"\\\\\\\\globallet\",\n  \"\\\\futurelet\": \"\\\\\\\\globalfuture\"\n};\n\nvar checkControlSequence = tok => {\n  var name = tok.text;\n\n  if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n    throw new ParseError(\"Expected a control sequence\", tok);\n  }\n\n  return name;\n};\n\nvar getRHS = parser => {\n  var tok = parser.gullet.popToken();\n\n  if (tok.text === \"=\") {\n    // consume optional equals\n    tok = parser.gullet.popToken();\n\n    if (tok.text === \" \") {\n      // consume one optional space\n      tok = parser.gullet.popToken();\n    }\n  }\n\n  return tok;\n};\n\nvar letCommand = (parser, name, tok, global) => {\n  var macro = parser.gullet.macros.get(tok.text);\n\n  if (macro == null) {\n    // don't expand it later even if a macro with the same name is defined\n    // e.g., \\let\\foo=\\frac \\def\\frac{\\relax} \\frac12\n    tok.noexpand = true;\n    macro = {\n      tokens: [tok],\n      numArgs: 0,\n      // reproduce the same behavior in expansion\n      unexpandable: !parser.gullet.isExpandable(tok.text)\n    };\n  }\n\n  parser.gullet.macros.set(name, macro, global);\n}; // <assignment> -> <non-macro assignment>|<macro assignment>\n// <non-macro assignment> -> <simple assignment>|\\global<non-macro assignment>\n// <macro assignment> -> <definition>|<prefix><macro assignment>\n// <prefix> -> \\global|\\long|\\outer\n\n\ndefineFunction({\n  type: \"internal\",\n  names: [\"\\\\global\", \"\\\\long\", \"\\\\\\\\globallong\" // can’t be entered directly\n  ],\n  props: {\n    numArgs: 0,\n    allowedInText: true\n  },\n\n  handler(_ref) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    parser.consumeSpaces();\n    var token = parser.fetch();\n\n    if (globalMap[token.text]) {\n      // KaTeX doesn't have \\par, so ignore \\long\n      if (funcName === \"\\\\global\" || funcName === \"\\\\\\\\globallong\") {\n        token.text = globalMap[token.text];\n      }\n\n      return assertNodeType(parser.parseFunction(), \"internal\");\n    }\n\n    throw new ParseError(\"Invalid token after macro prefix\", token);\n  }\n\n}); // Basic support for macro definitions: \\def, \\gdef, \\edef, \\xdef\n// <definition> -> <def><control sequence><definition text>\n// <def> -> \\def|\\gdef|\\edef|\\xdef\n// <definition text> -> <parameter text><left brace><balanced text><right brace>\n\ndefineFunction({\n  type: \"internal\",\n  names: [\"\\\\def\", \"\\\\gdef\", \"\\\\edef\", \"\\\\xdef\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    primitive: true\n  },\n\n  handler(_ref2) {\n    var {\n      parser,\n      funcName\n    } = _ref2;\n    var tok = parser.gullet.popToken();\n    var name = tok.text;\n\n    if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n      throw new ParseError(\"Expected a control sequence\", tok);\n    }\n\n    var numArgs = 0;\n    var insert;\n    var delimiters = [[]]; // <parameter text> contains no braces\n\n    while (parser.gullet.future().text !== \"{\") {\n      tok = parser.gullet.popToken();\n\n      if (tok.text === \"#\") {\n        // If the very last character of the <parameter text> is #, so that\n        // this # is immediately followed by {, TeX will behave as if the {\n        // had been inserted at the right end of both the parameter text\n        // and the replacement text.\n        if (parser.gullet.future().text === \"{\") {\n          insert = parser.gullet.future();\n          delimiters[numArgs].push(\"{\");\n          break;\n        } // A parameter, the first appearance of # must be followed by 1,\n        // the next by 2, and so on; up to nine #’s are allowed\n\n\n        tok = parser.gullet.popToken();\n\n        if (!/^[1-9]$/.test(tok.text)) {\n          throw new ParseError(\"Invalid argument number \\\"\" + tok.text + \"\\\"\");\n        }\n\n        if (parseInt(tok.text) !== numArgs + 1) {\n          throw new ParseError(\"Argument number \\\"\" + tok.text + \"\\\" out of order\");\n        }\n\n        numArgs++;\n        delimiters.push([]);\n      } else if (tok.text === \"EOF\") {\n        throw new ParseError(\"Expected a macro definition\");\n      } else {\n        delimiters[numArgs].push(tok.text);\n      }\n    } // replacement text, enclosed in '{' and '}' and properly nested\n\n\n    var {\n      tokens\n    } = parser.gullet.consumeArg();\n\n    if (insert) {\n      tokens.unshift(insert);\n    }\n\n    if (funcName === \"\\\\edef\" || funcName === \"\\\\xdef\") {\n      tokens = parser.gullet.expandTokens(tokens);\n      tokens.reverse(); // to fit in with stack order\n    } // Final arg is the expansion of the macro\n\n\n    parser.gullet.macros.set(name, {\n      tokens,\n      numArgs,\n      delimiters\n    }, funcName === globalMap[funcName]);\n    return {\n      type: \"internal\",\n      mode: parser.mode\n    };\n  }\n\n}); // <simple assignment> -> <let assignment>\n// <let assignment> -> \\futurelet<control sequence><token><token>\n//     | \\let<control sequence><equals><one optional space><token>\n// <equals> -> <optional spaces>|<optional spaces>=\n\ndefineFunction({\n  type: \"internal\",\n  names: [\"\\\\let\", \"\\\\\\\\globallet\" // can’t be entered directly\n  ],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    primitive: true\n  },\n\n  handler(_ref3) {\n    var {\n      parser,\n      funcName\n    } = _ref3;\n    var name = checkControlSequence(parser.gullet.popToken());\n    parser.gullet.consumeSpaces();\n    var tok = getRHS(parser);\n    letCommand(parser, name, tok, funcName === \"\\\\\\\\globallet\");\n    return {\n      type: \"internal\",\n      mode: parser.mode\n    };\n  }\n\n}); // ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf\n\ndefineFunction({\n  type: \"internal\",\n  names: [\"\\\\futurelet\", \"\\\\\\\\globalfuture\" // can’t be entered directly\n  ],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    primitive: true\n  },\n\n  handler(_ref4) {\n    var {\n      parser,\n      funcName\n    } = _ref4;\n    var name = checkControlSequence(parser.gullet.popToken());\n    var middle = parser.gullet.popToken();\n    var tok = parser.gullet.popToken();\n    letCommand(parser, name, tok, funcName === \"\\\\\\\\globalfuture\");\n    parser.gullet.pushToken(tok);\n    parser.gullet.pushToken(middle);\n    return {\n      type: \"internal\",\n      mode: parser.mode\n    };\n  }\n\n});\n\n/**\n * This file deals with creating delimiters of various sizes. The TeXbook\n * discusses these routines on page 441-442, in the \"Another subroutine sets box\n * x to a specified variable delimiter\" paragraph.\n *\n * There are three main routines here. `makeSmallDelim` makes a delimiter in the\n * normal font, but in either text, script, or scriptscript style.\n * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,\n * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of\n * smaller pieces that are stacked on top of one another.\n *\n * The functions take a parameter `center`, which determines if the delimiter\n * should be centered around the axis.\n *\n * Then, there are three exposed functions. `sizedDelim` makes a delimiter in\n * one of the given sizes. This is used for things like `\\bigl`.\n * `customSizedDelim` makes a delimiter with a given total height+depth. It is\n * called in places like `\\sqrt`. `leftRightDelim` makes an appropriate\n * delimiter which surrounds an expression of a given height an depth. It is\n * used in `\\left` and `\\right`.\n */\n\n/**\n * Get the metrics for a given symbol and font, after transformation (i.e.\n * after following replacement from symbols.js)\n */\nvar getMetrics = function getMetrics(symbol, font, mode) {\n  var replace = symbols.math[symbol] && symbols.math[symbol].replace;\n  var metrics = getCharacterMetrics(replace || symbol, font, mode);\n\n  if (!metrics) {\n    throw new Error(\"Unsupported symbol \" + symbol + \" and font size \" + font + \".\");\n  }\n\n  return metrics;\n};\n/**\n * Puts a delimiter span in a given style, and adds appropriate height, depth,\n * and maxFontSizes.\n */\n\n\nvar styleWrap = function styleWrap(delim, toStyle, options, classes) {\n  var newOptions = options.havingBaseStyle(toStyle);\n  var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options);\n  var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;\n  span.height *= delimSizeMultiplier;\n  span.depth *= delimSizeMultiplier;\n  span.maxFontSize = newOptions.sizeMultiplier;\n  return span;\n};\n\nvar centerSpan = function centerSpan(span, options, style) {\n  var newOptions = options.havingBaseStyle(style);\n  var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight;\n  span.classes.push(\"delimcenter\");\n  span.style.top = makeEm(shift);\n  span.height -= shift;\n  span.depth += shift;\n};\n/**\n * Makes a small delimiter. This is a delimiter that comes in the Main-Regular\n * font, but is restyled to either be in textstyle, scriptstyle, or\n * scriptscriptstyle.\n */\n\n\nvar makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) {\n  var text = buildCommon.makeSymbol(delim, \"Main-Regular\", mode, options);\n  var span = styleWrap(text, style, options, classes);\n\n  if (center) {\n    centerSpan(span, options, style);\n  }\n\n  return span;\n};\n/**\n * Builds a symbol in the given font size (note size is an integer)\n */\n\n\nvar mathrmSize = function mathrmSize(value, size, mode, options) {\n  return buildCommon.makeSymbol(value, \"Size\" + size + \"-Regular\", mode, options);\n};\n/**\n * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,\n * Size3, or Size4 fonts. It is always rendered in textstyle.\n */\n\n\nvar makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) {\n  var inner = mathrmSize(delim, size, mode, options);\n  var span = styleWrap(buildCommon.makeSpan([\"delimsizing\", \"size\" + size], [inner], options), Style$1.TEXT, options, classes);\n\n  if (center) {\n    centerSpan(span, options, Style$1.TEXT);\n  }\n\n  return span;\n};\n/**\n * Make a span from a font glyph with the given offset and in the given font.\n * This is used in makeStackedDelim to make the stacking pieces for the delimiter.\n */\n\n\nvar makeGlyphSpan = function makeGlyphSpan(symbol, font, mode) {\n  var sizeClass; // Apply the correct CSS class to choose the right font.\n\n  if (font === \"Size1-Regular\") {\n    sizeClass = \"delim-size1\";\n  } else\n    /* if (font === \"Size4-Regular\") */\n    {\n      sizeClass = \"delim-size4\";\n    }\n\n  var corner = buildCommon.makeSpan([\"delimsizinginner\", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element\n  // in the appropriate tag that VList uses.\n\n  return {\n    type: \"elem\",\n    elem: corner\n  };\n};\n\nvar makeInner = function makeInner(ch, height, options) {\n  // Create a span with inline SVG for the inner part of a tall stacked delimiter.\n  var width = fontMetricsData['Size4-Regular'][ch.charCodeAt(0)] ? fontMetricsData['Size4-Regular'][ch.charCodeAt(0)][4] : fontMetricsData['Size1-Regular'][ch.charCodeAt(0)][4];\n  var path = new PathNode(\"inner\", innerPath(ch, Math.round(1000 * height)));\n  var svgNode = new SvgNode([path], {\n    \"width\": makeEm(width),\n    \"height\": makeEm(height),\n    // Override CSS rule `.katex svg { width: 100% }`\n    \"style\": \"width:\" + makeEm(width),\n    \"viewBox\": \"0 0 \" + 1000 * width + \" \" + Math.round(1000 * height),\n    \"preserveAspectRatio\": \"xMinYMin\"\n  });\n  var span = buildCommon.makeSvgSpan([], [svgNode], options);\n  span.height = height;\n  span.style.height = makeEm(height);\n  span.style.width = makeEm(width);\n  return {\n    type: \"elem\",\n    elem: span\n  };\n}; // Helpers for makeStackedDelim\n\n\nvar lapInEms = 0.008;\nvar lap = {\n  type: \"kern\",\n  size: -1 * lapInEms\n};\nvar verts = [\"|\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\vert\"];\nvar doubleVerts = [\"\\\\|\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\Vert\"];\n/**\n * Make a stacked delimiter out of a given delimiter, with the total height at\n * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.\n */\n\nvar makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) {\n  // There are four parts, the top, an optional middle, a repeated part, and a\n  // bottom.\n  var top;\n  var middle;\n  var repeat;\n  var bottom;\n  var svgLabel = \"\";\n  var viewBoxWidth = 0;\n  top = repeat = bottom = delim;\n  middle = null; // Also keep track of what font the delimiters are in\n\n  var font = \"Size1-Regular\"; // We set the parts and font based on the symbol. Note that we use\n  // '\\u23d0' instead of '|' and '\\u2016' instead of '\\\\|' for the\n  // repeats of the arrows\n\n  if (delim === \"\\\\uparrow\") {\n    repeat = bottom = \"\\u23d0\";\n  } else if (delim === \"\\\\Uparrow\") {\n    repeat = bottom = \"\\u2016\";\n  } else if (delim === \"\\\\downarrow\") {\n    top = repeat = \"\\u23d0\";\n  } else if (delim === \"\\\\Downarrow\") {\n    top = repeat = \"\\u2016\";\n  } else if (delim === \"\\\\updownarrow\") {\n    top = \"\\\\uparrow\";\n    repeat = \"\\u23d0\";\n    bottom = \"\\\\downarrow\";\n  } else if (delim === \"\\\\Updownarrow\") {\n    top = \"\\\\Uparrow\";\n    repeat = \"\\u2016\";\n    bottom = \"\\\\Downarrow\";\n  } else if (utils.contains(verts, delim)) {\n    repeat = \"\\u2223\";\n    svgLabel = \"vert\";\n    viewBoxWidth = 333;\n  } else if (utils.contains(doubleVerts, delim)) {\n    repeat = \"\\u2225\";\n    svgLabel = \"doublevert\";\n    viewBoxWidth = 556;\n  } else if (delim === \"[\" || delim === \"\\\\lbrack\") {\n    top = \"\\u23a1\";\n    repeat = \"\\u23a2\";\n    bottom = \"\\u23a3\";\n    font = \"Size4-Regular\";\n    svgLabel = \"lbrack\";\n    viewBoxWidth = 667;\n  } else if (delim === \"]\" || delim === \"\\\\rbrack\") {\n    top = \"\\u23a4\";\n    repeat = \"\\u23a5\";\n    bottom = \"\\u23a6\";\n    font = \"Size4-Regular\";\n    svgLabel = \"rbrack\";\n    viewBoxWidth = 667;\n  } else if (delim === \"\\\\lfloor\" || delim === \"\\u230a\") {\n    repeat = top = \"\\u23a2\";\n    bottom = \"\\u23a3\";\n    font = \"Size4-Regular\";\n    svgLabel = \"lfloor\";\n    viewBoxWidth = 667;\n  } else if (delim === \"\\\\lceil\" || delim === \"\\u2308\") {\n    top = \"\\u23a1\";\n    repeat = bottom = \"\\u23a2\";\n    font = \"Size4-Regular\";\n    svgLabel = \"lceil\";\n    viewBoxWidth = 667;\n  } else if (delim === \"\\\\rfloor\" || delim === \"\\u230b\") {\n    repeat = top = \"\\u23a5\";\n    bottom = \"\\u23a6\";\n    font = \"Size4-Regular\";\n    svgLabel = \"rfloor\";\n    viewBoxWidth = 667;\n  } else if (delim === \"\\\\rceil\" || delim === \"\\u2309\") {\n    top = \"\\u23a4\";\n    repeat = bottom = \"\\u23a5\";\n    font = \"Size4-Regular\";\n    svgLabel = \"rceil\";\n    viewBoxWidth = 667;\n  } else if (delim === \"(\" || delim === \"\\\\lparen\") {\n    top = \"\\u239b\";\n    repeat = \"\\u239c\";\n    bottom = \"\\u239d\";\n    font = \"Size4-Regular\";\n    svgLabel = \"lparen\";\n    viewBoxWidth = 875;\n  } else if (delim === \")\" || delim === \"\\\\rparen\") {\n    top = \"\\u239e\";\n    repeat = \"\\u239f\";\n    bottom = \"\\u23a0\";\n    font = \"Size4-Regular\";\n    svgLabel = \"rparen\";\n    viewBoxWidth = 875;\n  } else if (delim === \"\\\\{\" || delim === \"\\\\lbrace\") {\n    top = \"\\u23a7\";\n    middle = \"\\u23a8\";\n    bottom = \"\\u23a9\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } else if (delim === \"\\\\}\" || delim === \"\\\\rbrace\") {\n    top = \"\\u23ab\";\n    middle = \"\\u23ac\";\n    bottom = \"\\u23ad\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } else if (delim === \"\\\\lgroup\" || delim === \"\\u27ee\") {\n    top = \"\\u23a7\";\n    bottom = \"\\u23a9\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } else if (delim === \"\\\\rgroup\" || delim === \"\\u27ef\") {\n    top = \"\\u23ab\";\n    bottom = \"\\u23ad\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } else if (delim === \"\\\\lmoustache\" || delim === \"\\u23b0\") {\n    top = \"\\u23a7\";\n    bottom = \"\\u23ad\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } else if (delim === \"\\\\rmoustache\" || delim === \"\\u23b1\") {\n    top = \"\\u23ab\";\n    bottom = \"\\u23a9\";\n    repeat = \"\\u23aa\";\n    font = \"Size4-Regular\";\n  } // Get the metrics of the four sections\n\n\n  var topMetrics = getMetrics(top, font, mode);\n  var topHeightTotal = topMetrics.height + topMetrics.depth;\n  var repeatMetrics = getMetrics(repeat, font, mode);\n  var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;\n  var bottomMetrics = getMetrics(bottom, font, mode);\n  var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;\n  var middleHeightTotal = 0;\n  var middleFactor = 1;\n\n  if (middle !== null) {\n    var middleMetrics = getMetrics(middle, font, mode);\n    middleHeightTotal = middleMetrics.height + middleMetrics.depth;\n    middleFactor = 2; // repeat symmetrically above and below middle\n  } // Calculate the minimal height that the delimiter can have.\n  // It is at least the size of the top, bottom, and optional middle combined.\n\n\n  var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need\n\n  var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols\n\n  var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note\n  // that in this context, \"center\" means that the delimiter should be\n  // centered around the axis in the current style, while normally it is\n  // centered around the axis in textstyle.\n\n  var axisHeight = options.fontMetrics().axisHeight;\n\n  if (center) {\n    axisHeight *= options.sizeMultiplier;\n  } // Calculate the depth\n\n\n  var depth = realHeightTotal / 2 - axisHeight; // Now, we start building the pieces that will go into the vlist\n  // Keep a list of the pieces of the stacked delimiter\n\n  var stack = [];\n\n  if (svgLabel.length > 0) {\n    // Instead of stacking glyphs, create a single SVG.\n    // This evades browser problems with imprecise positioning of spans.\n    var midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal;\n    var viewBoxHeight = Math.round(realHeightTotal * 1000);\n    var pathStr = tallDelim(svgLabel, Math.round(midHeight * 1000));\n    var path = new PathNode(svgLabel, pathStr);\n    var width = (viewBoxWidth / 1000).toFixed(3) + \"em\";\n    var height = (viewBoxHeight / 1000).toFixed(3) + \"em\";\n    var svg = new SvgNode([path], {\n      \"width\": width,\n      \"height\": height,\n      \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight\n    });\n    var wrapper = buildCommon.makeSvgSpan([], [svg], options);\n    wrapper.height = viewBoxHeight / 1000;\n    wrapper.style.width = width;\n    wrapper.style.height = height;\n    stack.push({\n      type: \"elem\",\n      elem: wrapper\n    });\n  } else {\n    // Stack glyphs\n    // Start by adding the bottom symbol\n    stack.push(makeGlyphSpan(bottom, font, mode));\n    stack.push(lap); // overlap\n\n    if (middle === null) {\n      // The middle section will be an SVG. Make it an extra 0.016em tall.\n      // We'll overlap by 0.008em at top and bottom.\n      var innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms;\n      stack.push(makeInner(repeat, innerHeight, options));\n    } else {\n      // When there is a middle bit, we need the middle part and two repeated\n      // sections\n      var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms;\n\n      stack.push(makeInner(repeat, _innerHeight, options)); // Now insert the middle of the brace.\n\n      stack.push(lap);\n      stack.push(makeGlyphSpan(middle, font, mode));\n      stack.push(lap);\n      stack.push(makeInner(repeat, _innerHeight, options));\n    } // Add the top symbol\n\n\n    stack.push(lap);\n    stack.push(makeGlyphSpan(top, font, mode));\n  } // Finally, build the vlist\n\n\n  var newOptions = options.havingBaseStyle(Style$1.TEXT);\n  var inner = buildCommon.makeVList({\n    positionType: \"bottom\",\n    positionData: depth,\n    children: stack\n  }, newOptions);\n  return styleWrap(buildCommon.makeSpan([\"delimsizing\", \"mult\"], [inner], newOptions), Style$1.TEXT, options, classes);\n}; // All surds have 0.08em padding above the vinculum inside the SVG.\n// That keeps browser span height rounding error from pinching the line.\n\n\nvar vbPad = 80; // padding above the surd, measured inside the viewBox.\n\nvar emPad = 0.08; // padding, in ems, measured in the document.\n\nvar sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraVinculum, options) {\n  var path = sqrtPath(sqrtName, extraVinculum, viewBoxHeight);\n  var pathNode = new PathNode(sqrtName, path);\n  var svg = new SvgNode([pathNode], {\n    // Note: 1000:1 ratio of viewBox to document em width.\n    \"width\": \"400em\",\n    \"height\": makeEm(height),\n    \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n    \"preserveAspectRatio\": \"xMinYMin slice\"\n  });\n  return buildCommon.makeSvgSpan([\"hide-tail\"], [svg], options);\n};\n/**\n * Make a sqrt image of the given height,\n */\n\n\nvar makeSqrtImage = function makeSqrtImage(height, options) {\n  // Define a newOptions that removes the effect of size changes such as \\Huge.\n  // We don't pick different a height surd for \\Huge. For it, we scale up.\n  var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds.\n\n  var delim = traverseSequence(\"\\\\surd\", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);\n  var sizeMultiplier = newOptions.sizeMultiplier; // default\n  // The standard sqrt SVGs each have a 0.04em thick vinculum.\n  // If Settings.minRuleThickness is larger than that, we add extraVinculum.\n\n  var extraVinculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol.\n\n  var span;\n  var spanHeight = 0;\n  var texHeight = 0;\n  var viewBoxHeight = 0;\n  var advanceWidth; // We create viewBoxes with 80 units of \"padding\" above each surd.\n  // Then browser rounding error on the parent span height will not\n  // encroach on the ink of the vinculum. But that padding is not\n  // included in the TeX-like `height` used for calculation of\n  // vertical alignment. So texHeight = span.height < span.style.height.\n\n  if (delim.type === \"small\") {\n    // Get an SVG that is derived from glyph U+221A in font KaTeX-Main.\n    // 1000 unit normal glyph height.\n    viewBoxHeight = 1000 + 1000 * extraVinculum + vbPad;\n\n    if (height < 1.0) {\n      sizeMultiplier = 1.0; // mimic a \\textfont radical\n    } else if (height < 1.4) {\n      sizeMultiplier = 0.7; // mimic a \\scriptfont radical\n    }\n\n    spanHeight = (1.0 + extraVinculum + emPad) / sizeMultiplier;\n    texHeight = (1.00 + extraVinculum) / sizeMultiplier;\n    span = sqrtSvg(\"sqrtMain\", spanHeight, viewBoxHeight, extraVinculum, options);\n    span.style.minWidth = \"0.853em\";\n    advanceWidth = 0.833 / sizeMultiplier; // from the font.\n  } else if (delim.type === \"large\") {\n    // These SVGs come from fonts: KaTeX_Size1, _Size2, etc.\n    viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size];\n    texHeight = (sizeToMaxHeight[delim.size] + extraVinculum) / sizeMultiplier;\n    spanHeight = (sizeToMaxHeight[delim.size] + extraVinculum + emPad) / sizeMultiplier;\n    span = sqrtSvg(\"sqrtSize\" + delim.size, spanHeight, viewBoxHeight, extraVinculum, options);\n    span.style.minWidth = \"1.02em\";\n    advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font.\n  } else {\n    // Tall sqrt. In TeX, this would be stacked using multiple glyphs.\n    // We'll use a single SVG to accomplish the same thing.\n    spanHeight = height + extraVinculum + emPad;\n    texHeight = height + extraVinculum;\n    viewBoxHeight = Math.floor(1000 * height + extraVinculum) + vbPad;\n    span = sqrtSvg(\"sqrtTall\", spanHeight, viewBoxHeight, extraVinculum, options);\n    span.style.minWidth = \"0.742em\";\n    advanceWidth = 1.056;\n  }\n\n  span.height = texHeight;\n  span.style.height = makeEm(spanHeight);\n  return {\n    span,\n    advanceWidth,\n    // Calculate the actual line width.\n    // This actually should depend on the chosen font -- e.g. \\boldmath\n    // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and\n    // have thicker rules.\n    ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier\n  };\n}; // There are three kinds of delimiters, delimiters that stack when they become\n// too large\n\n\nvar stackLargeDelimiters = [\"(\", \"\\\\lparen\", \")\", \"\\\\rparen\", \"[\", \"\\\\lbrack\", \"]\", \"\\\\rbrack\", \"\\\\{\", \"\\\\lbrace\", \"\\\\}\", \"\\\\rbrace\", \"\\\\lfloor\", \"\\\\rfloor\", \"\\u230a\", \"\\u230b\", \"\\\\lceil\", \"\\\\rceil\", \"\\u2308\", \"\\u2309\", \"\\\\surd\"]; // delimiters that always stack\n\nvar stackAlwaysDelimiters = [\"\\\\uparrow\", \"\\\\downarrow\", \"\\\\updownarrow\", \"\\\\Uparrow\", \"\\\\Downarrow\", \"\\\\Updownarrow\", \"|\", \"\\\\|\", \"\\\\vert\", \"\\\\Vert\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\lgroup\", \"\\\\rgroup\", \"\\u27ee\", \"\\u27ef\", \"\\\\lmoustache\", \"\\\\rmoustache\", \"\\u23b0\", \"\\u23b1\"]; // and delimiters that never stack\n\nvar stackNeverDelimiters = [\"<\", \">\", \"\\\\langle\", \"\\\\rangle\", \"/\", \"\\\\backslash\", \"\\\\lt\", \"\\\\gt\"]; // Metrics of the different sizes. Found by looking at TeX's output of\n// $\\bigl| // \\Bigl| \\biggl| \\Biggl| \\showlists$\n// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.\n\nvar sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0];\n/**\n * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.\n */\n\nvar makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) {\n  // < and > turn into \\langle and \\rangle in delimiters\n  if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"\\u27e8\") {\n    delim = \"\\\\langle\";\n  } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"\\u27e9\") {\n    delim = \"\\\\rangle\";\n  } // Sized delimiters are never centered.\n\n\n  if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) {\n    return makeLargeDelim(delim, size, false, options, mode, classes);\n  } else if (utils.contains(stackAlwaysDelimiters, delim)) {\n    return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes);\n  } else {\n    throw new ParseError(\"Illegal delimiter: '\" + delim + \"'\");\n  }\n};\n/**\n * There are three different sequences of delimiter sizes that the delimiters\n * follow depending on the kind of delimiter. This is used when creating custom\n * sized delimiters to decide whether to create a small, large, or stacked\n * delimiter.\n *\n * In real TeX, these sequences aren't explicitly defined, but are instead\n * defined inside the font metrics. Since there are only three sequences that\n * are possible for the delimiters that TeX defines, it is easier to just encode\n * them explicitly here.\n */\n\n\n// Delimiters that never stack try small delimiters and large delimiters only\nvar stackNeverDelimiterSequence = [{\n  type: \"small\",\n  style: Style$1.SCRIPTSCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.SCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.TEXT\n}, {\n  type: \"large\",\n  size: 1\n}, {\n  type: \"large\",\n  size: 2\n}, {\n  type: \"large\",\n  size: 3\n}, {\n  type: \"large\",\n  size: 4\n}]; // Delimiters that always stack try the small delimiters first, then stack\n\nvar stackAlwaysDelimiterSequence = [{\n  type: \"small\",\n  style: Style$1.SCRIPTSCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.SCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.TEXT\n}, {\n  type: \"stack\"\n}]; // Delimiters that stack when large try the small and then large delimiters, and\n// stack afterwards\n\nvar stackLargeDelimiterSequence = [{\n  type: \"small\",\n  style: Style$1.SCRIPTSCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.SCRIPT\n}, {\n  type: \"small\",\n  style: Style$1.TEXT\n}, {\n  type: \"large\",\n  size: 1\n}, {\n  type: \"large\",\n  size: 2\n}, {\n  type: \"large\",\n  size: 3\n}, {\n  type: \"large\",\n  size: 4\n}, {\n  type: \"stack\"\n}];\n/**\n * Get the font used in a delimiter based on what kind of delimiter it is.\n * TODO(#963) Use more specific font family return type once that is introduced.\n */\n\nvar delimTypeToFont = function delimTypeToFont(type) {\n  if (type.type === \"small\") {\n    return \"Main-Regular\";\n  } else if (type.type === \"large\") {\n    return \"Size\" + type.size + \"-Regular\";\n  } else if (type.type === \"stack\") {\n    return \"Size4-Regular\";\n  } else {\n    throw new Error(\"Add support for delim type '\" + type.type + \"' here.\");\n  }\n};\n/**\n * Traverse a sequence of types of delimiters to decide what kind of delimiter\n * should be used to create a delimiter of the given height+depth.\n */\n\n\nvar traverseSequence = function traverseSequence(delim, height, sequence, options) {\n  // Here, we choose the index we should start at in the sequences. In smaller\n  // sizes (which correspond to larger numbers in style.size) we start earlier\n  // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts\n  // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2\n  var start = Math.min(2, 3 - options.style.size);\n\n  for (var i = start; i < sequence.length; i++) {\n    if (sequence[i].type === \"stack\") {\n      // This is always the last delimiter, so we just break the loop now.\n      break;\n    }\n\n    var metrics = getMetrics(delim, delimTypeToFont(sequence[i]), \"math\");\n    var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we\n    // account for the style change size.\n\n    if (sequence[i].type === \"small\") {\n      var newOptions = options.havingBaseStyle(sequence[i].style);\n      heightDepth *= newOptions.sizeMultiplier;\n    } // Check if the delimiter at this size works for the given height.\n\n\n    if (heightDepth > height) {\n      return sequence[i];\n    }\n  } // If we reached the end of the sequence, return the last sequence element.\n\n\n  return sequence[sequence.length - 1];\n};\n/**\n * Make a delimiter of a given height+depth, with optional centering. Here, we\n * traverse the sequences, and create a delimiter that the sequence tells us to.\n */\n\n\nvar makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) {\n  if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"\\u27e8\") {\n    delim = \"\\\\langle\";\n  } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"\\u27e9\") {\n    delim = \"\\\\rangle\";\n  } // Decide what sequence to use\n\n\n  var sequence;\n\n  if (utils.contains(stackNeverDelimiters, delim)) {\n    sequence = stackNeverDelimiterSequence;\n  } else if (utils.contains(stackLargeDelimiters, delim)) {\n    sequence = stackLargeDelimiterSequence;\n  } else {\n    sequence = stackAlwaysDelimiterSequence;\n  } // Look through the sequence\n\n\n  var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs.\n  // Depending on the sequence element we decided on, call the\n  // appropriate function.\n\n  if (delimType.type === \"small\") {\n    return makeSmallDelim(delim, delimType.style, center, options, mode, classes);\n  } else if (delimType.type === \"large\") {\n    return makeLargeDelim(delim, delimType.size, center, options, mode, classes);\n  } else\n    /* if (delimType.type === \"stack\") */\n    {\n      return makeStackedDelim(delim, height, center, options, mode, classes);\n    }\n};\n/**\n * Make a delimiter for use with `\\left` and `\\right`, given a height and depth\n * of an expression that the delimiters surround.\n */\n\n\nvar makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) {\n  // We always center \\left/\\right delimiters, so the axis is always shifted\n  var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right\n\n  var delimiterFactor = 901;\n  var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm;\n  var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight);\n  var totalHeight = Math.max( // In real TeX, calculations are done using integral values which are\n  // 65536 per pt, or 655360 per em. So, the division here truncates in\n  // TeX but doesn't here, producing different results. If we wanted to\n  // exactly match TeX's calculation, we could do\n  //   Math.floor(655360 * maxDistFromAxis / 500) *\n  //    delimiterFactor / 655360\n  // (To see the difference, compare\n  //    x^{x^{\\left(\\rule{0.1em}{0.68em}\\right)}}\n  // in TeX and KaTeX)\n  maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total\n  // height\n\n  return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes);\n};\n\nvar delimiter = {\n  sqrtImage: makeSqrtImage,\n  sizedDelim: makeSizedDelim,\n  sizeToMaxHeight: sizeToMaxHeight,\n  customSizedDelim: makeCustomSizedDelim,\n  leftRightDelim: makeLeftRightDelim\n};\n\n// Extra data needed for the delimiter handler down below\nvar delimiterSizes = {\n  \"\\\\bigl\": {\n    mclass: \"mopen\",\n    size: 1\n  },\n  \"\\\\Bigl\": {\n    mclass: \"mopen\",\n    size: 2\n  },\n  \"\\\\biggl\": {\n    mclass: \"mopen\",\n    size: 3\n  },\n  \"\\\\Biggl\": {\n    mclass: \"mopen\",\n    size: 4\n  },\n  \"\\\\bigr\": {\n    mclass: \"mclose\",\n    size: 1\n  },\n  \"\\\\Bigr\": {\n    mclass: \"mclose\",\n    size: 2\n  },\n  \"\\\\biggr\": {\n    mclass: \"mclose\",\n    size: 3\n  },\n  \"\\\\Biggr\": {\n    mclass: \"mclose\",\n    size: 4\n  },\n  \"\\\\bigm\": {\n    mclass: \"mrel\",\n    size: 1\n  },\n  \"\\\\Bigm\": {\n    mclass: \"mrel\",\n    size: 2\n  },\n  \"\\\\biggm\": {\n    mclass: \"mrel\",\n    size: 3\n  },\n  \"\\\\Biggm\": {\n    mclass: \"mrel\",\n    size: 4\n  },\n  \"\\\\big\": {\n    mclass: \"mord\",\n    size: 1\n  },\n  \"\\\\Big\": {\n    mclass: \"mord\",\n    size: 2\n  },\n  \"\\\\bigg\": {\n    mclass: \"mord\",\n    size: 3\n  },\n  \"\\\\Bigg\": {\n    mclass: \"mord\",\n    size: 4\n  }\n};\nvar delimiters = [\"(\", \"\\\\lparen\", \")\", \"\\\\rparen\", \"[\", \"\\\\lbrack\", \"]\", \"\\\\rbrack\", \"\\\\{\", \"\\\\lbrace\", \"\\\\}\", \"\\\\rbrace\", \"\\\\lfloor\", \"\\\\rfloor\", \"\\u230a\", \"\\u230b\", \"\\\\lceil\", \"\\\\rceil\", \"\\u2308\", \"\\u2309\", \"<\", \">\", \"\\\\langle\", \"\\u27e8\", \"\\\\rangle\", \"\\u27e9\", \"\\\\lt\", \"\\\\gt\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\lgroup\", \"\\\\rgroup\", \"\\u27ee\", \"\\u27ef\", \"\\\\lmoustache\", \"\\\\rmoustache\", \"\\u23b0\", \"\\u23b1\", \"/\", \"\\\\backslash\", \"|\", \"\\\\vert\", \"\\\\|\", \"\\\\Vert\", \"\\\\uparrow\", \"\\\\Uparrow\", \"\\\\downarrow\", \"\\\\Downarrow\", \"\\\\updownarrow\", \"\\\\Updownarrow\", \".\"];\n\n// Delimiter functions\nfunction checkDelimiter(delim, context) {\n  var symDelim = checkSymbolNodeType(delim);\n\n  if (symDelim && utils.contains(delimiters, symDelim.text)) {\n    return symDelim;\n  } else if (symDelim) {\n    throw new ParseError(\"Invalid delimiter '\" + symDelim.text + \"' after '\" + context.funcName + \"'\", delim);\n  } else {\n    throw new ParseError(\"Invalid delimiter type '\" + delim.type + \"'\", delim);\n  }\n}\n\ndefineFunction({\n  type: \"delimsizing\",\n  names: [\"\\\\bigl\", \"\\\\Bigl\", \"\\\\biggl\", \"\\\\Biggl\", \"\\\\bigr\", \"\\\\Bigr\", \"\\\\biggr\", \"\\\\Biggr\", \"\\\\bigm\", \"\\\\Bigm\", \"\\\\biggm\", \"\\\\Biggm\", \"\\\\big\", \"\\\\Big\", \"\\\\bigg\", \"\\\\Bigg\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"primitive\"]\n  },\n  handler: (context, args) => {\n    var delim = checkDelimiter(args[0], context);\n    return {\n      type: \"delimsizing\",\n      mode: context.parser.mode,\n      size: delimiterSizes[context.funcName].size,\n      mclass: delimiterSizes[context.funcName].mclass,\n      delim: delim.text\n    };\n  },\n  htmlBuilder: (group, options) => {\n    if (group.delim === \".\") {\n      // Empty delimiters still count as elements, even though they don't\n      // show anything.\n      return buildCommon.makeSpan([group.mclass]);\n    } // Use delimiter.sizedDelim to generate the delimiter.\n\n\n    return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]);\n  },\n  mathmlBuilder: group => {\n    var children = [];\n\n    if (group.delim !== \".\") {\n      children.push(makeText(group.delim, group.mode));\n    }\n\n    var node = new mathMLTree.MathNode(\"mo\", children);\n\n    if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n      // Only some of the delimsizing functions act as fences, and they\n      // return \"mopen\" or \"mclose\" mclass.\n      node.setAttribute(\"fence\", \"true\");\n    } else {\n      // Explicitly disable fencing if it's not a fence, to override the\n      // defaults.\n      node.setAttribute(\"fence\", \"false\");\n    }\n\n    node.setAttribute(\"stretchy\", \"true\");\n    var size = makeEm(delimiter.sizeToMaxHeight[group.size]);\n    node.setAttribute(\"minsize\", size);\n    node.setAttribute(\"maxsize\", size);\n    return node;\n  }\n});\n\nfunction assertParsed(group) {\n  if (!group.body) {\n    throw new Error(\"Bug: The leftright ParseNode wasn't fully parsed.\");\n  }\n}\n\ndefineFunction({\n  type: \"leftright-right\",\n  names: [\"\\\\right\"],\n  props: {\n    numArgs: 1,\n    primitive: true\n  },\n  handler: (context, args) => {\n    // \\left case below triggers parsing of \\right in\n    //   `const right = parser.parseFunction();`\n    // uses this return value.\n    var color = context.parser.gullet.macros.get(\"\\\\current@color\");\n\n    if (color && typeof color !== \"string\") {\n      throw new ParseError(\"\\\\current@color set to non-string in \\\\right\");\n    }\n\n    return {\n      type: \"leftright-right\",\n      mode: context.parser.mode,\n      delim: checkDelimiter(args[0], context).text,\n      color // undefined if not set via \\color\n\n    };\n  }\n});\ndefineFunction({\n  type: \"leftright\",\n  names: [\"\\\\left\"],\n  props: {\n    numArgs: 1,\n    primitive: true\n  },\n  handler: (context, args) => {\n    var delim = checkDelimiter(args[0], context);\n    var parser = context.parser; // Parse out the implicit body\n\n    ++parser.leftrightDepth; // parseExpression stops before '\\\\right'\n\n    var body = parser.parseExpression(false);\n    --parser.leftrightDepth; // Check the next token\n\n    parser.expect(\"\\\\right\", false);\n    var right = assertNodeType(parser.parseFunction(), \"leftright-right\");\n    return {\n      type: \"leftright\",\n      mode: parser.mode,\n      body,\n      left: delim.text,\n      right: right.delim,\n      rightColor: right.color\n    };\n  },\n  htmlBuilder: (group, options) => {\n    assertParsed(group); // Build the inner expression\n\n    var inner = buildExpression$1(group.body, options, true, [\"mopen\", \"mclose\"]);\n    var innerHeight = 0;\n    var innerDepth = 0;\n    var hadMiddle = false; // Calculate its height and depth\n\n    for (var i = 0; i < inner.length; i++) {\n      // Property `isMiddle` not defined on `span`. See comment in\n      // \"middle\"'s htmlBuilder.\n      // $FlowFixMe\n      if (inner[i].isMiddle) {\n        hadMiddle = true;\n      } else {\n        innerHeight = Math.max(inner[i].height, innerHeight);\n        innerDepth = Math.max(inner[i].depth, innerDepth);\n      }\n    } // The size of delimiters is the same, regardless of what style we are\n    // in. Thus, to correctly calculate the size of delimiter we need around\n    // a group, we scale down the inner size based on the size.\n\n\n    innerHeight *= options.sizeMultiplier;\n    innerDepth *= options.sizeMultiplier;\n    var leftDelim;\n\n    if (group.left === \".\") {\n      // Empty delimiters in \\left and \\right make null delimiter spaces.\n      leftDelim = makeNullDelimiter(options, [\"mopen\"]);\n    } else {\n      // Otherwise, use leftRightDelim to generate the correct sized\n      // delimiter.\n      leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, [\"mopen\"]);\n    } // Add it to the beginning of the expression\n\n\n    inner.unshift(leftDelim); // Handle middle delimiters\n\n    if (hadMiddle) {\n      for (var _i = 1; _i < inner.length; _i++) {\n        var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in\n        // \"middle\"'s htmlBuilder.\n        // $FlowFixMe\n\n        var isMiddle = middleDelim.isMiddle;\n\n        if (isMiddle) {\n          // Apply the options that were active when \\middle was called\n          inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []);\n        }\n      }\n    }\n\n    var rightDelim; // Same for the right delimiter, but using color specified by \\color\n\n    if (group.right === \".\") {\n      rightDelim = makeNullDelimiter(options, [\"mclose\"]);\n    } else {\n      var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options;\n      rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, [\"mclose\"]);\n    } // Add it to the end of the expression.\n\n\n    inner.push(rightDelim);\n    return buildCommon.makeSpan([\"minner\"], inner, options);\n  },\n  mathmlBuilder: (group, options) => {\n    assertParsed(group);\n    var inner = buildExpression(group.body, options);\n\n    if (group.left !== \".\") {\n      var leftNode = new mathMLTree.MathNode(\"mo\", [makeText(group.left, group.mode)]);\n      leftNode.setAttribute(\"fence\", \"true\");\n      inner.unshift(leftNode);\n    }\n\n    if (group.right !== \".\") {\n      var rightNode = new mathMLTree.MathNode(\"mo\", [makeText(group.right, group.mode)]);\n      rightNode.setAttribute(\"fence\", \"true\");\n\n      if (group.rightColor) {\n        rightNode.setAttribute(\"mathcolor\", group.rightColor);\n      }\n\n      inner.push(rightNode);\n    }\n\n    return makeRow(inner);\n  }\n});\ndefineFunction({\n  type: \"middle\",\n  names: [\"\\\\middle\"],\n  props: {\n    numArgs: 1,\n    primitive: true\n  },\n  handler: (context, args) => {\n    var delim = checkDelimiter(args[0], context);\n\n    if (!context.parser.leftrightDepth) {\n      throw new ParseError(\"\\\\middle without preceding \\\\left\", delim);\n    }\n\n    return {\n      type: \"middle\",\n      mode: context.parser.mode,\n      delim: delim.text\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var middleDelim;\n\n    if (group.delim === \".\") {\n      middleDelim = makeNullDelimiter(options, []);\n    } else {\n      middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []);\n      var isMiddle = {\n        delim: group.delim,\n        options\n      }; // Property `isMiddle` not defined on `span`. It is only used in\n      // this file above.\n      // TODO: Fix this violation of the `span` type and possibly rename\n      // things since `isMiddle` sounds like a boolean, but is a struct.\n      // $FlowFixMe\n\n      middleDelim.isMiddle = isMiddle;\n    }\n\n    return middleDelim;\n  },\n  mathmlBuilder: (group, options) => {\n    // A Firefox \\middle will stretch a character vertically only if it\n    // is in the fence part of the operator dictionary at:\n    // https://www.w3.org/TR/MathML3/appendixc.html.\n    // So we need to avoid U+2223 and use plain \"|\" instead.\n    var textNode = group.delim === \"\\\\vert\" || group.delim === \"|\" ? makeText(\"|\", \"text\") : makeText(group.delim, group.mode);\n    var middleNode = new mathMLTree.MathNode(\"mo\", [textNode]);\n    middleNode.setAttribute(\"fence\", \"true\"); // MathML gives 5/18em spacing to each <mo> element.\n    // \\middle should get delimiter spacing instead.\n\n    middleNode.setAttribute(\"lspace\", \"0.05em\");\n    middleNode.setAttribute(\"rspace\", \"0.05em\");\n    return middleNode;\n  }\n});\n\nvar htmlBuilder$7 = (group, options) => {\n  // \\cancel, \\bcancel, \\xcancel, \\sout, \\fbox, \\colorbox, \\fcolorbox, \\phase\n  // Some groups can return document fragments.  Handle those by wrapping\n  // them in a span.\n  var inner = buildCommon.wrapFragment(buildGroup$1(group.body, options), options);\n  var label = group.label.slice(1);\n  var scale = options.sizeMultiplier;\n  var img;\n  var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different\n  // depending on whether the subject is wider than it is tall, or vice versa.\n  // We don't know the width of a group, so as a proxy, we test if\n  // the subject is a single character. This captures most of the\n  // subjects that should get the \"tall\" treatment.\n\n  var isSingleChar = utils.isCharacterBox(group.body);\n\n  if (label === \"sout\") {\n    img = buildCommon.makeSpan([\"stretchy\", \"sout\"]);\n    img.height = options.fontMetrics().defaultRuleThickness / scale;\n    imgShift = -0.5 * options.fontMetrics().xHeight;\n  } else if (label === \"phase\") {\n    // Set a couple of dimensions from the steinmetz package.\n    var lineWeight = calculateSize({\n      number: 0.6,\n      unit: \"pt\"\n    }, options);\n    var clearance = calculateSize({\n      number: 0.35,\n      unit: \"ex\"\n    }, options); // Prevent size changes like \\Huge from affecting line thickness\n\n    var newOptions = options.havingBaseSizing();\n    scale = scale / newOptions.sizeMultiplier;\n    var angleHeight = inner.height + inner.depth + lineWeight + clearance; // Reserve a left pad for the angle.\n\n    inner.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight); // Create an SVG\n\n    var viewBoxHeight = Math.floor(1000 * angleHeight * scale);\n    var path = phasePath(viewBoxHeight);\n    var svgNode = new SvgNode([new PathNode(\"phase\", path)], {\n      \"width\": \"400em\",\n      \"height\": makeEm(viewBoxHeight / 1000),\n      \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n      \"preserveAspectRatio\": \"xMinYMin slice\"\n    }); // Wrap it in a span with overflow: hidden.\n\n    img = buildCommon.makeSvgSpan([\"hide-tail\"], [svgNode], options);\n    img.style.height = makeEm(angleHeight);\n    imgShift = inner.depth + lineWeight + clearance;\n  } else {\n    // Add horizontal padding\n    if (/cancel/.test(label)) {\n      if (!isSingleChar) {\n        inner.classes.push(\"cancel-pad\");\n      }\n    } else if (label === \"angl\") {\n      inner.classes.push(\"anglpad\");\n    } else {\n      inner.classes.push(\"boxpad\");\n    } // Add vertical padding\n\n\n    var topPad = 0;\n    var bottomPad = 0;\n    var ruleThickness = 0; // ref: cancel package: \\advance\\totalheight2\\p@ % \"+2\"\n\n    if (/box/.test(label)) {\n      ruleThickness = Math.max(options.fontMetrics().fboxrule, // default\n      options.minRuleThickness // User override.\n      );\n      topPad = options.fontMetrics().fboxsep + (label === \"colorbox\" ? 0 : ruleThickness);\n      bottomPad = topPad;\n    } else if (label === \"angl\") {\n      ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n      topPad = 4 * ruleThickness; // gap = 3 × line, plus the line itself.\n\n      bottomPad = Math.max(0, 0.25 - inner.depth);\n    } else {\n      topPad = isSingleChar ? 0.2 : 0;\n      bottomPad = topPad;\n    }\n\n    img = stretchy.encloseSpan(inner, label, topPad, bottomPad, options);\n\n    if (/fbox|boxed|fcolorbox/.test(label)) {\n      img.style.borderStyle = \"solid\";\n      img.style.borderWidth = makeEm(ruleThickness);\n    } else if (label === \"angl\" && ruleThickness !== 0.049) {\n      img.style.borderTopWidth = makeEm(ruleThickness);\n      img.style.borderRightWidth = makeEm(ruleThickness);\n    }\n\n    imgShift = inner.depth + bottomPad;\n\n    if (group.backgroundColor) {\n      img.style.backgroundColor = group.backgroundColor;\n\n      if (group.borderColor) {\n        img.style.borderColor = group.borderColor;\n      }\n    }\n  }\n\n  var vlist;\n\n  if (group.backgroundColor) {\n    vlist = buildCommon.makeVList({\n      positionType: \"individualShift\",\n      children: [// Put the color background behind inner;\n      {\n        type: \"elem\",\n        elem: img,\n        shift: imgShift\n      }, {\n        type: \"elem\",\n        elem: inner,\n        shift: 0\n      }]\n    }, options);\n  } else {\n    var classes = /cancel|phase/.test(label) ? [\"svg-align\"] : [];\n    vlist = buildCommon.makeVList({\n      positionType: \"individualShift\",\n      children: [// Write the \\cancel stroke on top of inner.\n      {\n        type: \"elem\",\n        elem: inner,\n        shift: 0\n      }, {\n        type: \"elem\",\n        elem: img,\n        shift: imgShift,\n        wrapperClasses: classes\n      }]\n    }, options);\n  }\n\n  if (/cancel/.test(label)) {\n    // The cancel package documentation says that cancel lines add their height\n    // to the expression, but tests show that isn't how it actually works.\n    vlist.height = inner.height;\n    vlist.depth = inner.depth;\n  }\n\n  if (/cancel/.test(label) && !isSingleChar) {\n    // cancel does not create horiz space for its line extension.\n    return buildCommon.makeSpan([\"mord\", \"cancel-lap\"], [vlist], options);\n  } else {\n    return buildCommon.makeSpan([\"mord\"], [vlist], options);\n  }\n};\n\nvar mathmlBuilder$6 = (group, options) => {\n  var fboxsep = 0;\n  var node = new mathMLTree.MathNode(group.label.indexOf(\"colorbox\") > -1 ? \"mpadded\" : \"menclose\", [buildGroup(group.body, options)]);\n\n  switch (group.label) {\n    case \"\\\\cancel\":\n      node.setAttribute(\"notation\", \"updiagonalstrike\");\n      break;\n\n    case \"\\\\bcancel\":\n      node.setAttribute(\"notation\", \"downdiagonalstrike\");\n      break;\n\n    case \"\\\\phase\":\n      node.setAttribute(\"notation\", \"phasorangle\");\n      break;\n\n    case \"\\\\sout\":\n      node.setAttribute(\"notation\", \"horizontalstrike\");\n      break;\n\n    case \"\\\\fbox\":\n      node.setAttribute(\"notation\", \"box\");\n      break;\n\n    case \"\\\\angl\":\n      node.setAttribute(\"notation\", \"actuarial\");\n      break;\n\n    case \"\\\\fcolorbox\":\n    case \"\\\\colorbox\":\n      // <menclose> doesn't have a good notation option. So use <mpadded>\n      // instead. Set some attributes that come included with <menclose>.\n      fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm;\n      node.setAttribute(\"width\", \"+\" + 2 * fboxsep + \"pt\");\n      node.setAttribute(\"height\", \"+\" + 2 * fboxsep + \"pt\");\n      node.setAttribute(\"lspace\", fboxsep + \"pt\"); //\n\n      node.setAttribute(\"voffset\", fboxsep + \"pt\");\n\n      if (group.label === \"\\\\fcolorbox\") {\n        var thk = Math.max(options.fontMetrics().fboxrule, // default\n        options.minRuleThickness // user override\n        );\n        node.setAttribute(\"style\", \"border: \" + thk + \"em solid \" + String(group.borderColor));\n      }\n\n      break;\n\n    case \"\\\\xcancel\":\n      node.setAttribute(\"notation\", \"updiagonalstrike downdiagonalstrike\");\n      break;\n  }\n\n  if (group.backgroundColor) {\n    node.setAttribute(\"mathbackground\", group.backgroundColor);\n  }\n\n  return node;\n};\n\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\colorbox\"],\n  props: {\n    numArgs: 2,\n    allowedInText: true,\n    argTypes: [\"color\", \"text\"]\n  },\n\n  handler(_ref, args, optArgs) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var color = assertNodeType(args[0], \"color-token\").color;\n    var body = args[1];\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: funcName,\n      backgroundColor: color,\n      body\n    };\n  },\n\n  htmlBuilder: htmlBuilder$7,\n  mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\fcolorbox\"],\n  props: {\n    numArgs: 3,\n    allowedInText: true,\n    argTypes: [\"color\", \"color\", \"text\"]\n  },\n\n  handler(_ref2, args, optArgs) {\n    var {\n      parser,\n      funcName\n    } = _ref2;\n    var borderColor = assertNodeType(args[0], \"color-token\").color;\n    var backgroundColor = assertNodeType(args[1], \"color-token\").color;\n    var body = args[2];\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: funcName,\n      backgroundColor,\n      borderColor,\n      body\n    };\n  },\n\n  htmlBuilder: htmlBuilder$7,\n  mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\fbox\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"hbox\"],\n    allowedInText: true\n  },\n\n  handler(_ref3, args) {\n    var {\n      parser\n    } = _ref3;\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: \"\\\\fbox\",\n      body: args[0]\n    };\n  }\n\n});\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\cancel\", \"\\\\bcancel\", \"\\\\xcancel\", \"\\\\sout\", \"\\\\phase\"],\n  props: {\n    numArgs: 1\n  },\n\n  handler(_ref4, args) {\n    var {\n      parser,\n      funcName\n    } = _ref4;\n    var body = args[0];\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: funcName,\n      body\n    };\n  },\n\n  htmlBuilder: htmlBuilder$7,\n  mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n  type: \"enclose\",\n  names: [\"\\\\angl\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"hbox\"],\n    allowedInText: false\n  },\n\n  handler(_ref5, args) {\n    var {\n      parser\n    } = _ref5;\n    return {\n      type: \"enclose\",\n      mode: parser.mode,\n      label: \"\\\\angl\",\n      body: args[0]\n    };\n  }\n\n});\n\n/**\n * All registered environments.\n * `environments.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `environments.js`.\n */\nvar _environments = {};\nfunction defineEnvironment(_ref) {\n  var {\n    type,\n    names,\n    props,\n    handler,\n    htmlBuilder,\n    mathmlBuilder\n  } = _ref;\n  // Set default values of environments.\n  var data = {\n    type,\n    numArgs: props.numArgs || 0,\n    allowedInText: false,\n    numOptionalArgs: 0,\n    handler\n  };\n\n  for (var i = 0; i < names.length; ++i) {\n    // TODO: The value type of _environments should be a type union of all\n    // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is\n    // an existential type.\n    _environments[names[i]] = data;\n  }\n\n  if (htmlBuilder) {\n    _htmlGroupBuilders[type] = htmlBuilder;\n  }\n\n  if (mathmlBuilder) {\n    _mathmlGroupBuilders[type] = mathmlBuilder;\n  }\n}\n\n/**\n * All registered global/built-in macros.\n * `macros.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `macros.js`.\n */\nvar _macros = {}; // This function might one day accept an additional argument and do more things.\n\nfunction defineMacro(name, body) {\n  _macros[name] = body;\n}\n\n// Helper functions\nfunction getHLines(parser) {\n  // Return an array. The array length = number of hlines.\n  // Each element in the array tells if the line is dashed.\n  var hlineInfo = [];\n  parser.consumeSpaces();\n  var nxt = parser.fetch().text;\n\n  if (nxt === \"\\\\relax\") {\n    // \\relax is an artifact of the \\cr macro below\n    parser.consume();\n    parser.consumeSpaces();\n    nxt = parser.fetch().text;\n  }\n\n  while (nxt === \"\\\\hline\" || nxt === \"\\\\hdashline\") {\n    parser.consume();\n    hlineInfo.push(nxt === \"\\\\hdashline\");\n    parser.consumeSpaces();\n    nxt = parser.fetch().text;\n  }\n\n  return hlineInfo;\n}\n\nvar validateAmsEnvironmentContext = context => {\n  var settings = context.parser.settings;\n\n  if (!settings.displayMode) {\n    throw new ParseError(\"{\" + context.envName + \"} can be used only in\" + \" display mode.\");\n  }\n}; // autoTag (an argument to parseArray) can be one of three values:\n// * undefined: Regular (not-top-level) array; no tags on each row\n// * true: Automatic equation numbering, overridable by \\tag\n// * false: Tags allowed on each row, but no automatic numbering\n// This function *doesn't* work with the \"split\" environment name.\n\n\nfunction getAutoTag(name) {\n  if (name.indexOf(\"ed\") === -1) {\n    return name.indexOf(\"*\") === -1;\n  } // return undefined;\n\n}\n/**\n * Parse the body of the environment, with rows delimited by \\\\ and\n * columns delimited by &, and create a nested list in row-major order\n * with one group per cell.  If given an optional argument style\n * (\"text\", \"display\", etc.), then each cell is cast into that style.\n */\n\n\nfunction parseArray(parser, _ref, style) {\n  var {\n    hskipBeforeAndAfter,\n    addJot,\n    cols,\n    arraystretch,\n    colSeparationType,\n    autoTag,\n    singleRow,\n    emptySingleRow,\n    maxNumCols,\n    leqno\n  } = _ref;\n  parser.gullet.beginGroup();\n\n  if (!singleRow) {\n    // \\cr is equivalent to \\\\ without the optional size argument (see below)\n    // TODO: provide helpful error when \\cr is used outside array environment\n    parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n  } // Get current arraystretch if it's not set by the environment\n\n\n  if (!arraystretch) {\n    var stretch = parser.gullet.expandMacroAsText(\"\\\\arraystretch\");\n\n    if (stretch == null) {\n      // Default \\arraystretch from lttab.dtx\n      arraystretch = 1;\n    } else {\n      arraystretch = parseFloat(stretch);\n\n      if (!arraystretch || arraystretch < 0) {\n        throw new ParseError(\"Invalid \\\\arraystretch: \" + stretch);\n      }\n    }\n  } // Start group for first cell\n\n\n  parser.gullet.beginGroup();\n  var row = [];\n  var body = [row];\n  var rowGaps = [];\n  var hLinesBeforeRow = [];\n  var tags = autoTag != null ? [] : undefined; // amsmath uses \\global\\@eqnswtrue and \\global\\@eqnswfalse to represent\n  // whether this row should have an equation number.  Simulate this with\n  // a \\@eqnsw macro set to 1 or 0.\n\n  function beginRow() {\n    if (autoTag) {\n      parser.gullet.macros.set(\"\\\\@eqnsw\", \"1\", true);\n    }\n  }\n\n  function endRow() {\n    if (tags) {\n      if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n        tags.push(parser.subparse([new Token(\"\\\\df@tag\")]));\n        parser.gullet.macros.set(\"\\\\df@tag\", undefined, true);\n      } else {\n        tags.push(Boolean(autoTag) && parser.gullet.macros.get(\"\\\\@eqnsw\") === \"1\");\n      }\n    }\n  }\n\n  beginRow(); // Test for \\hline at the top of the array.\n\n  hLinesBeforeRow.push(getHLines(parser));\n\n  while (true) {\n    // eslint-disable-line no-constant-condition\n    // Parse each cell in its own group (namespace)\n    var cell = parser.parseExpression(false, singleRow ? \"\\\\end\" : \"\\\\\\\\\");\n    parser.gullet.endGroup();\n    parser.gullet.beginGroup();\n    cell = {\n      type: \"ordgroup\",\n      mode: parser.mode,\n      body: cell\n    };\n\n    if (style) {\n      cell = {\n        type: \"styling\",\n        mode: parser.mode,\n        style,\n        body: [cell]\n      };\n    }\n\n    row.push(cell);\n    var next = parser.fetch().text;\n\n    if (next === \"&\") {\n      if (maxNumCols && row.length === maxNumCols) {\n        if (singleRow || colSeparationType) {\n          // {equation} or {split}\n          throw new ParseError(\"Too many tab characters: &\", parser.nextToken);\n        } else {\n          // {array} environment\n          parser.settings.reportNonstrict(\"textEnv\", \"Too few columns \" + \"specified in the {array} column argument.\");\n        }\n      }\n\n      parser.consume();\n    } else if (next === \"\\\\end\") {\n      endRow(); // Arrays terminate newlines with `\\crcr` which consumes a `\\cr` if\n      // the last line is empty.  However, AMS environments keep the\n      // empty row if it's the only one.\n      // NOTE: Currently, `cell` is the last item added into `row`.\n\n      if (row.length === 1 && cell.type === \"styling\" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) {\n        body.pop();\n      }\n\n      if (hLinesBeforeRow.length < body.length + 1) {\n        hLinesBeforeRow.push([]);\n      }\n\n      break;\n    } else if (next === \"\\\\\\\\\") {\n      parser.consume();\n      var size = void 0; // \\def\\Let@{\\let\\\\\\math@cr}\n      // \\def\\math@cr{...\\math@cr@}\n      // \\def\\math@cr@{\\new@ifnextchar[\\math@cr@@{\\math@cr@@[\\z@]}}\n      // \\def\\math@cr@@[#1]{...\\math@cr@@@...}\n      // \\def\\math@cr@@@{\\cr}\n\n      if (parser.gullet.future().text !== \" \") {\n        size = parser.parseSizeGroup(true);\n      }\n\n      rowGaps.push(size ? size.value : null);\n      endRow(); // check for \\hline(s) following the row separator\n\n      hLinesBeforeRow.push(getHLines(parser));\n      row = [];\n      body.push(row);\n      beginRow();\n    } else {\n      throw new ParseError(\"Expected & or \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n    }\n  } // End cell group\n\n\n  parser.gullet.endGroup(); // End array group defining \\cr\n\n  parser.gullet.endGroup();\n  return {\n    type: \"array\",\n    mode: parser.mode,\n    addJot,\n    arraystretch,\n    body,\n    cols,\n    rowGaps,\n    hskipBeforeAndAfter,\n    hLinesBeforeRow,\n    colSeparationType,\n    tags,\n    leqno\n  };\n} // Decides on a style for cells in an array according to whether the given\n// environment name starts with the letter 'd'.\n\n\nfunction dCellStyle(envName) {\n  if (envName.slice(0, 1) === \"d\") {\n    return \"display\";\n  } else {\n    return \"text\";\n  }\n}\n\nvar htmlBuilder$6 = function htmlBuilder(group, options) {\n  var r;\n  var c;\n  var nr = group.body.length;\n  var hLinesBeforeRow = group.hLinesBeforeRow;\n  var nc = 0;\n  var body = new Array(nr);\n  var hlines = [];\n  var ruleThickness = Math.max( // From LaTeX \\showthe\\arrayrulewidth. Equals 0.04 em.\n  options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override.\n  ); // Horizontal spacing\n\n  var pt = 1 / options.fontMetrics().ptPerEm;\n  var arraycolsep = 5 * pt; // default value, i.e. \\arraycolsep in article.cls\n\n  if (group.colSeparationType && group.colSeparationType === \"small\") {\n    // We're in a {smallmatrix}. Default column space is \\thickspace,\n    // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}.\n    // But that needs adjustment because LaTeX applies \\scriptstyle to the\n    // entire array, including the colspace, but this function applies\n    // \\scriptstyle only inside each element.\n    var localMultiplier = options.havingStyle(Style$1.SCRIPT).sizeMultiplier;\n    arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier);\n  } // Vertical spacing\n\n\n  var baselineskip = group.colSeparationType === \"CD\" ? calculateSize({\n    number: 3,\n    unit: \"ex\"\n  }, options) : 12 * pt; // see size10.clo\n  // Default \\jot from ltmath.dtx\n  // TODO(edemaine): allow overriding \\jot via \\setlength (#687)\n\n  var jot = 3 * pt;\n  var arrayskip = group.arraystretch * baselineskip;\n  var arstrutHeight = 0.7 * arrayskip; // \\strutbox in ltfsstrc.dtx and\n\n  var arstrutDepth = 0.3 * arrayskip; // \\@arstrutbox in lttab.dtx\n\n  var totalHeight = 0; // Set a position for \\hline(s) at the top of the array, if any.\n\n  function setHLinePos(hlinesInGap) {\n    for (var i = 0; i < hlinesInGap.length; ++i) {\n      if (i > 0) {\n        totalHeight += 0.25;\n      }\n\n      hlines.push({\n        pos: totalHeight,\n        isDashed: hlinesInGap[i]\n      });\n    }\n  }\n\n  setHLinePos(hLinesBeforeRow[0]);\n\n  for (r = 0; r < group.body.length; ++r) {\n    var inrow = group.body[r];\n    var height = arstrutHeight; // \\@array adds an \\@arstrut\n\n    var depth = arstrutDepth; // to each tow (via the template)\n\n    if (nc < inrow.length) {\n      nc = inrow.length;\n    }\n\n    var outrow = new Array(inrow.length);\n\n    for (c = 0; c < inrow.length; ++c) {\n      var elt = buildGroup$1(inrow[c], options);\n\n      if (depth < elt.depth) {\n        depth = elt.depth;\n      }\n\n      if (height < elt.height) {\n        height = elt.height;\n      }\n\n      outrow[c] = elt;\n    }\n\n    var rowGap = group.rowGaps[r];\n    var gap = 0;\n\n    if (rowGap) {\n      gap = calculateSize(rowGap, options);\n\n      if (gap > 0) {\n        // \\@argarraycr\n        gap += arstrutDepth;\n\n        if (depth < gap) {\n          depth = gap; // \\@xargarraycr\n        }\n\n        gap = 0;\n      }\n    } // In AMS multiline environments such as aligned and gathered, rows\n    // correspond to lines that have additional \\jot added to the\n    // \\baselineskip via \\openup.\n\n\n    if (group.addJot) {\n      depth += jot;\n    }\n\n    outrow.height = height;\n    outrow.depth = depth;\n    totalHeight += height;\n    outrow.pos = totalHeight;\n    totalHeight += depth + gap; // \\@yargarraycr\n\n    body[r] = outrow; // Set a position for \\hline(s), if any.\n\n    setHLinePos(hLinesBeforeRow[r + 1]);\n  }\n\n  var offset = totalHeight / 2 + options.fontMetrics().axisHeight;\n  var colDescriptions = group.cols || [];\n  var cols = [];\n  var colSep;\n  var colDescrNum;\n  var tagSpans = [];\n\n  if (group.tags && group.tags.some(tag => tag)) {\n    // An environment with manual tags and/or automatic equation numbers.\n    // Create node(s), the latter of which trigger CSS counter increment.\n    for (r = 0; r < nr; ++r) {\n      var rw = body[r];\n      var shift = rw.pos - offset;\n      var tag = group.tags[r];\n      var tagSpan = void 0;\n\n      if (tag === true) {\n        // automatic numbering\n        tagSpan = buildCommon.makeSpan([\"eqn-num\"], [], options);\n      } else if (tag === false) {\n        // \\nonumber/\\notag or starred environment\n        tagSpan = buildCommon.makeSpan([], [], options);\n      } else {\n        // manual \\tag\n        tagSpan = buildCommon.makeSpan([], buildExpression$1(tag, options, true), options);\n      }\n\n      tagSpan.depth = rw.depth;\n      tagSpan.height = rw.height;\n      tagSpans.push({\n        type: \"elem\",\n        elem: tagSpan,\n        shift\n      });\n    }\n  }\n\n  for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column\n  // descriptions, so trailing separators don't get lost.\n  c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) {\n    var colDescr = colDescriptions[colDescrNum] || {};\n    var firstSeparator = true;\n\n    while (colDescr.type === \"separator\") {\n      // If there is more than one separator in a row, add a space\n      // between them.\n      if (!firstSeparator) {\n        colSep = buildCommon.makeSpan([\"arraycolsep\"], []);\n        colSep.style.width = makeEm(options.fontMetrics().doubleRuleSep);\n        cols.push(colSep);\n      }\n\n      if (colDescr.separator === \"|\" || colDescr.separator === \":\") {\n        var lineType = colDescr.separator === \"|\" ? \"solid\" : \"dashed\";\n        var separator = buildCommon.makeSpan([\"vertical-separator\"], [], options);\n        separator.style.height = makeEm(totalHeight);\n        separator.style.borderRightWidth = makeEm(ruleThickness);\n        separator.style.borderRightStyle = lineType;\n        separator.style.margin = \"0 \" + makeEm(-ruleThickness / 2);\n\n        var _shift = totalHeight - offset;\n\n        if (_shift) {\n          separator.style.verticalAlign = makeEm(-_shift);\n        }\n\n        cols.push(separator);\n      } else {\n        throw new ParseError(\"Invalid separator type: \" + colDescr.separator);\n      }\n\n      colDescrNum++;\n      colDescr = colDescriptions[colDescrNum] || {};\n      firstSeparator = false;\n    }\n\n    if (c >= nc) {\n      continue;\n    }\n\n    var sepwidth = void 0;\n\n    if (c > 0 || group.hskipBeforeAndAfter) {\n      sepwidth = utils.deflt(colDescr.pregap, arraycolsep);\n\n      if (sepwidth !== 0) {\n        colSep = buildCommon.makeSpan([\"arraycolsep\"], []);\n        colSep.style.width = makeEm(sepwidth);\n        cols.push(colSep);\n      }\n    }\n\n    var col = [];\n\n    for (r = 0; r < nr; ++r) {\n      var row = body[r];\n      var elem = row[c];\n\n      if (!elem) {\n        continue;\n      }\n\n      var _shift2 = row.pos - offset;\n\n      elem.depth = row.depth;\n      elem.height = row.height;\n      col.push({\n        type: \"elem\",\n        elem: elem,\n        shift: _shift2\n      });\n    }\n\n    col = buildCommon.makeVList({\n      positionType: \"individualShift\",\n      children: col\n    }, options);\n    col = buildCommon.makeSpan([\"col-align-\" + (colDescr.align || \"c\")], [col]);\n    cols.push(col);\n\n    if (c < nc - 1 || group.hskipBeforeAndAfter) {\n      sepwidth = utils.deflt(colDescr.postgap, arraycolsep);\n\n      if (sepwidth !== 0) {\n        colSep = buildCommon.makeSpan([\"arraycolsep\"], []);\n        colSep.style.width = makeEm(sepwidth);\n        cols.push(colSep);\n      }\n    }\n  }\n\n  body = buildCommon.makeSpan([\"mtable\"], cols); // Add \\hline(s), if any.\n\n  if (hlines.length > 0) {\n    var line = buildCommon.makeLineSpan(\"hline\", options, ruleThickness);\n    var dashes = buildCommon.makeLineSpan(\"hdashline\", options, ruleThickness);\n    var vListElems = [{\n      type: \"elem\",\n      elem: body,\n      shift: 0\n    }];\n\n    while (hlines.length > 0) {\n      var hline = hlines.pop();\n      var lineShift = hline.pos - offset;\n\n      if (hline.isDashed) {\n        vListElems.push({\n          type: \"elem\",\n          elem: dashes,\n          shift: lineShift\n        });\n      } else {\n        vListElems.push({\n          type: \"elem\",\n          elem: line,\n          shift: lineShift\n        });\n      }\n    }\n\n    body = buildCommon.makeVList({\n      positionType: \"individualShift\",\n      children: vListElems\n    }, options);\n  }\n\n  if (tagSpans.length === 0) {\n    return buildCommon.makeSpan([\"mord\"], [body], options);\n  } else {\n    var eqnNumCol = buildCommon.makeVList({\n      positionType: \"individualShift\",\n      children: tagSpans\n    }, options);\n    eqnNumCol = buildCommon.makeSpan([\"tag\"], [eqnNumCol], options);\n    return buildCommon.makeFragment([body, eqnNumCol]);\n  }\n};\n\nvar alignMap = {\n  c: \"center \",\n  l: \"left \",\n  r: \"right \"\n};\n\nvar mathmlBuilder$5 = function mathmlBuilder(group, options) {\n  var tbl = [];\n  var glue = new mathMLTree.MathNode(\"mtd\", [], [\"mtr-glue\"]);\n  var tag = new mathMLTree.MathNode(\"mtd\", [], [\"mml-eqn-num\"]);\n\n  for (var i = 0; i < group.body.length; i++) {\n    var rw = group.body[i];\n    var row = [];\n\n    for (var j = 0; j < rw.length; j++) {\n      row.push(new mathMLTree.MathNode(\"mtd\", [buildGroup(rw[j], options)]));\n    }\n\n    if (group.tags && group.tags[i]) {\n      row.unshift(glue);\n      row.push(glue);\n\n      if (group.leqno) {\n        row.unshift(tag);\n      } else {\n        row.push(tag);\n      }\n    }\n\n    tbl.push(new mathMLTree.MathNode(\"mtr\", row));\n  }\n\n  var table = new mathMLTree.MathNode(\"mtable\", tbl); // Set column alignment, row spacing, column spacing, and\n  // array lines by setting attributes on the table element.\n  // Set the row spacing. In MathML, we specify a gap distance.\n  // We do not use rowGap[] because MathML automatically increases\n  // cell height with the height/depth of the element content.\n  // LaTeX \\arraystretch multiplies the row baseline-to-baseline distance.\n  // We simulate this by adding (arraystretch - 1)em to the gap. This\n  // does a reasonable job of adjusting arrays containing 1 em tall content.\n  // The 0.16 and 0.09 values are found empirically. They produce an array\n  // similar to LaTeX and in which content does not interfere with \\hlines.\n\n  var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray}\n  : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0);\n  table.setAttribute(\"rowspacing\", makeEm(gap)); // MathML table lines go only between cells.\n  // To place a line on an edge we'll use <menclose>, if necessary.\n\n  var menclose = \"\";\n  var align = \"\";\n\n  if (group.cols && group.cols.length > 0) {\n    // Find column alignment, column spacing, and  vertical lines.\n    var cols = group.cols;\n    var columnLines = \"\";\n    var prevTypeWasAlign = false;\n    var iStart = 0;\n    var iEnd = cols.length;\n\n    if (cols[0].type === \"separator\") {\n      menclose += \"top \";\n      iStart = 1;\n    }\n\n    if (cols[cols.length - 1].type === \"separator\") {\n      menclose += \"bottom \";\n      iEnd -= 1;\n    }\n\n    for (var _i = iStart; _i < iEnd; _i++) {\n      if (cols[_i].type === \"align\") {\n        align += alignMap[cols[_i].align];\n\n        if (prevTypeWasAlign) {\n          columnLines += \"none \";\n        }\n\n        prevTypeWasAlign = true;\n      } else if (cols[_i].type === \"separator\") {\n        // MathML accepts only single lines between cells.\n        // So we read only the first of consecutive separators.\n        if (prevTypeWasAlign) {\n          columnLines += cols[_i].separator === \"|\" ? \"solid \" : \"dashed \";\n          prevTypeWasAlign = false;\n        }\n      }\n    }\n\n    table.setAttribute(\"columnalign\", align.trim());\n\n    if (/[sd]/.test(columnLines)) {\n      table.setAttribute(\"columnlines\", columnLines.trim());\n    }\n  } // Set column spacing.\n\n\n  if (group.colSeparationType === \"align\") {\n    var _cols = group.cols || [];\n\n    var spacing = \"\";\n\n    for (var _i2 = 1; _i2 < _cols.length; _i2++) {\n      spacing += _i2 % 2 ? \"0em \" : \"1em \";\n    }\n\n    table.setAttribute(\"columnspacing\", spacing.trim());\n  } else if (group.colSeparationType === \"alignat\" || group.colSeparationType === \"gather\") {\n    table.setAttribute(\"columnspacing\", \"0em\");\n  } else if (group.colSeparationType === \"small\") {\n    table.setAttribute(\"columnspacing\", \"0.2778em\");\n  } else if (group.colSeparationType === \"CD\") {\n    table.setAttribute(\"columnspacing\", \"0.5em\");\n  } else {\n    table.setAttribute(\"columnspacing\", \"1em\");\n  } // Address \\hline and \\hdashline\n\n\n  var rowLines = \"\";\n  var hlines = group.hLinesBeforeRow;\n  menclose += hlines[0].length > 0 ? \"left \" : \"\";\n  menclose += hlines[hlines.length - 1].length > 0 ? \"right \" : \"\";\n\n  for (var _i3 = 1; _i3 < hlines.length - 1; _i3++) {\n    rowLines += hlines[_i3].length === 0 ? \"none \" // MathML accepts only a single line between rows. Read one element.\n    : hlines[_i3][0] ? \"dashed \" : \"solid \";\n  }\n\n  if (/[sd]/.test(rowLines)) {\n    table.setAttribute(\"rowlines\", rowLines.trim());\n  }\n\n  if (menclose !== \"\") {\n    table = new mathMLTree.MathNode(\"menclose\", [table]);\n    table.setAttribute(\"notation\", menclose.trim());\n  }\n\n  if (group.arraystretch && group.arraystretch < 1) {\n    // A small array. Wrap in scriptstyle so row gap is not too large.\n    table = new mathMLTree.MathNode(\"mstyle\", [table]);\n    table.setAttribute(\"scriptlevel\", \"1\");\n  }\n\n  return table;\n}; // Convenience function for align, align*, aligned, alignat, alignat*, alignedat.\n\n\nvar alignedHandler = function alignedHandler(context, args) {\n  if (context.envName.indexOf(\"ed\") === -1) {\n    validateAmsEnvironmentContext(context);\n  }\n\n  var cols = [];\n  var separationType = context.envName.indexOf(\"at\") > -1 ? \"alignat\" : \"align\";\n  var isSplit = context.envName === \"split\";\n  var res = parseArray(context.parser, {\n    cols,\n    addJot: true,\n    autoTag: isSplit ? undefined : getAutoTag(context.envName),\n    emptySingleRow: true,\n    colSeparationType: separationType,\n    maxNumCols: isSplit ? 2 : undefined,\n    leqno: context.parser.settings.leqno\n  }, \"display\"); // Determining number of columns.\n  // 1. If the first argument is given, we use it as a number of columns,\n  //    and makes sure that each row doesn't exceed that number.\n  // 2. Otherwise, just count number of columns = maximum number\n  //    of cells in each row (\"aligned\" mode -- isAligned will be true).\n  //\n  // At the same time, prepend empty group {} at beginning of every second\n  // cell in each row (starting with second cell) so that operators become\n  // binary.  This behavior is implemented in amsmath's \\start@aligned.\n\n  var numMaths;\n  var numCols = 0;\n  var emptyGroup = {\n    type: \"ordgroup\",\n    mode: context.mode,\n    body: []\n  };\n\n  if (args[0] && args[0].type === \"ordgroup\") {\n    var arg0 = \"\";\n\n    for (var i = 0; i < args[0].body.length; i++) {\n      var textord = assertNodeType(args[0].body[i], \"textord\");\n      arg0 += textord.text;\n    }\n\n    numMaths = Number(arg0);\n    numCols = numMaths * 2;\n  }\n\n  var isAligned = !numCols;\n  res.body.forEach(function (row) {\n    for (var _i4 = 1; _i4 < row.length; _i4 += 2) {\n      // Modify ordgroup node within styling node\n      var styling = assertNodeType(row[_i4], \"styling\");\n      var ordgroup = assertNodeType(styling.body[0], \"ordgroup\");\n      ordgroup.body.unshift(emptyGroup);\n    }\n\n    if (!isAligned) {\n      // Case 1\n      var curMaths = row.length / 2;\n\n      if (numMaths < curMaths) {\n        throw new ParseError(\"Too many math in a row: \" + (\"expected \" + numMaths + \", but got \" + curMaths), row[0]);\n      }\n    } else if (numCols < row.length) {\n      // Case 2\n      numCols = row.length;\n    }\n  }); // Adjusting alignment.\n  // In aligned mode, we add one \\qquad between columns;\n  // otherwise we add nothing.\n\n  for (var _i5 = 0; _i5 < numCols; ++_i5) {\n    var align = \"r\";\n    var pregap = 0;\n\n    if (_i5 % 2 === 1) {\n      align = \"l\";\n    } else if (_i5 > 0 && isAligned) {\n      // \"aligned\" mode.\n      pregap = 1; // add one \\quad\n    }\n\n    cols[_i5] = {\n      type: \"align\",\n      align: align,\n      pregap: pregap,\n      postgap: 0\n    };\n  }\n\n  res.colSeparationType = isAligned ? \"align\" : \"alignat\";\n  return res;\n}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation\n// is part of the source2e.pdf file of LaTeX2e source documentation.\n// {darray} is an {array} environment where cells are set in \\displaystyle,\n// as defined in nccmath.sty.\n\n\ndefineEnvironment({\n  type: \"array\",\n  names: [\"array\", \"darray\"],\n  props: {\n    numArgs: 1\n  },\n\n  handler(context, args) {\n    // Since no types are specified above, the two possibilities are\n    // - The argument is wrapped in {} or [], in which case Parser's\n    //   parseGroup() returns an \"ordgroup\" wrapping some symbol node.\n    // - The argument is a bare symbol node.\n    var symNode = checkSymbolNodeType(args[0]);\n    var colalign = symNode ? [args[0]] : assertNodeType(args[0], \"ordgroup\").body;\n    var cols = colalign.map(function (nde) {\n      var node = assertSymbolNodeType(nde);\n      var ca = node.text;\n\n      if (\"lcr\".indexOf(ca) !== -1) {\n        return {\n          type: \"align\",\n          align: ca\n        };\n      } else if (ca === \"|\") {\n        return {\n          type: \"separator\",\n          separator: \"|\"\n        };\n      } else if (ca === \":\") {\n        return {\n          type: \"separator\",\n          separator: \":\"\n        };\n      }\n\n      throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n    });\n    var res = {\n      cols,\n      hskipBeforeAndAfter: true,\n      // \\@preamble in lttab.dtx\n      maxNumCols: cols.length\n    };\n    return parseArray(context.parser, res, dCellStyle(context.envName));\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n}); // The matrix environments of amsmath builds on the array environment\n// of LaTeX, which is discussed above.\n// The mathtools package adds starred versions of the same environments.\n// These have an optional argument to choose left|center|right justification.\n\ndefineEnvironment({\n  type: \"array\",\n  names: [\"matrix\", \"pmatrix\", \"bmatrix\", \"Bmatrix\", \"vmatrix\", \"Vmatrix\", \"matrix*\", \"pmatrix*\", \"bmatrix*\", \"Bmatrix*\", \"vmatrix*\", \"Vmatrix*\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(context) {\n    var delimiters = {\n      \"matrix\": null,\n      \"pmatrix\": [\"(\", \")\"],\n      \"bmatrix\": [\"[\", \"]\"],\n      \"Bmatrix\": [\"\\\\{\", \"\\\\}\"],\n      \"vmatrix\": [\"|\", \"|\"],\n      \"Vmatrix\": [\"\\\\Vert\", \"\\\\Vert\"]\n    }[context.envName.replace(\"*\", \"\")]; // \\hskip -\\arraycolsep in amsmath\n\n    var colAlign = \"c\";\n    var payload = {\n      hskipBeforeAndAfter: false,\n      cols: [{\n        type: \"align\",\n        align: colAlign\n      }]\n    };\n\n    if (context.envName.charAt(context.envName.length - 1) === \"*\") {\n      // It's one of the mathtools starred functions.\n      // Parse the optional alignment argument.\n      var parser = context.parser;\n      parser.consumeSpaces();\n\n      if (parser.fetch().text === \"[\") {\n        parser.consume();\n        parser.consumeSpaces();\n        colAlign = parser.fetch().text;\n\n        if (\"lcr\".indexOf(colAlign) === -1) {\n          throw new ParseError(\"Expected l or c or r\", parser.nextToken);\n        }\n\n        parser.consume();\n        parser.consumeSpaces();\n        parser.expect(\"]\");\n        parser.consume();\n        payload.cols = [{\n          type: \"align\",\n          align: colAlign\n        }];\n      }\n    }\n\n    var res = parseArray(context.parser, payload, dCellStyle(context.envName)); // Populate cols with the correct number of column alignment specs.\n\n    var numCols = Math.max(0, ...res.body.map(row => row.length));\n    res.cols = new Array(numCols).fill({\n      type: \"align\",\n      align: colAlign\n    });\n    return delimiters ? {\n      type: \"leftright\",\n      mode: context.mode,\n      body: [res],\n      left: delimiters[0],\n      right: delimiters[1],\n      rightColor: undefined // \\right uninfluenced by \\color in array\n\n    } : res;\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n  type: \"array\",\n  names: [\"smallmatrix\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(context) {\n    var payload = {\n      arraystretch: 0.5\n    };\n    var res = parseArray(context.parser, payload, \"script\");\n    res.colSeparationType = \"small\";\n    return res;\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n  type: \"array\",\n  names: [\"subarray\"],\n  props: {\n    numArgs: 1\n  },\n\n  handler(context, args) {\n    // Parsing of {subarray} is similar to {array}\n    var symNode = checkSymbolNodeType(args[0]);\n    var colalign = symNode ? [args[0]] : assertNodeType(args[0], \"ordgroup\").body;\n    var cols = colalign.map(function (nde) {\n      var node = assertSymbolNodeType(nde);\n      var ca = node.text; // {subarray} only recognizes \"l\" & \"c\"\n\n      if (\"lc\".indexOf(ca) !== -1) {\n        return {\n          type: \"align\",\n          align: ca\n        };\n      }\n\n      throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n    });\n\n    if (cols.length > 1) {\n      throw new ParseError(\"{subarray} can contain only one column\");\n    }\n\n    var res = {\n      cols,\n      hskipBeforeAndAfter: false,\n      arraystretch: 0.5\n    };\n    res = parseArray(context.parser, res, \"script\");\n\n    if (res.body.length > 0 && res.body[0].length > 1) {\n      throw new ParseError(\"{subarray} can contain only one column\");\n    }\n\n    return res;\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n}); // A cases environment (in amsmath.sty) is almost equivalent to\n// \\def\\arraystretch{1.2}%\n// \\left\\{\\begin{array}{@{}l@{\\quad}l@{}} … \\end{array}\\right.\n// {dcases} is a {cases} environment where cells are set in \\displaystyle,\n// as defined in mathtools.sty.\n// {rcases} is another mathtools environment. It's brace is on the right side.\n\ndefineEnvironment({\n  type: \"array\",\n  names: [\"cases\", \"dcases\", \"rcases\", \"drcases\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(context) {\n    var payload = {\n      arraystretch: 1.2,\n      cols: [{\n        type: \"align\",\n        align: \"l\",\n        pregap: 0,\n        // TODO(kevinb) get the current style.\n        // For now we use the metrics for TEXT style which is what we were\n        // doing before.  Before attempting to get the current style we\n        // should look at TeX's behavior especially for \\over and matrices.\n        postgap: 1.0\n        /* 1em quad */\n\n      }, {\n        type: \"align\",\n        align: \"l\",\n        pregap: 0,\n        postgap: 0\n      }]\n    };\n    var res = parseArray(context.parser, payload, dCellStyle(context.envName));\n    return {\n      type: \"leftright\",\n      mode: context.mode,\n      body: [res],\n      left: context.envName.indexOf(\"r\") > -1 ? \".\" : \"\\\\{\",\n      right: context.envName.indexOf(\"r\") > -1 ? \"\\\\}\" : \".\",\n      rightColor: undefined\n    };\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n}); // In the align environment, one uses ampersands, &, to specify number of\n// columns in each row, and to locate spacing between each column.\n// align gets automatic numbering. align* and aligned do not.\n// The alignedat environment can be used in math mode.\n// Note that we assume \\nomallineskiplimit to be zero,\n// so that \\strut@ is the same as \\strut.\n\ndefineEnvironment({\n  type: \"array\",\n  names: [\"align\", \"align*\", \"aligned\", \"split\"],\n  props: {\n    numArgs: 0\n  },\n  handler: alignedHandler,\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n}); // A gathered environment is like an array environment with one centered\n// column, but where rows are considered lines so get \\jot line spacing\n// and contents are set in \\displaystyle.\n\ndefineEnvironment({\n  type: \"array\",\n  names: [\"gathered\", \"gather\", \"gather*\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(context) {\n    if (utils.contains([\"gather\", \"gather*\"], context.envName)) {\n      validateAmsEnvironmentContext(context);\n    }\n\n    var res = {\n      cols: [{\n        type: \"align\",\n        align: \"c\"\n      }],\n      addJot: true,\n      colSeparationType: \"gather\",\n      autoTag: getAutoTag(context.envName),\n      emptySingleRow: true,\n      leqno: context.parser.settings.leqno\n    };\n    return parseArray(context.parser, res, \"display\");\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n}); // alignat environment is like an align environment, but one must explicitly\n// specify maximum number of columns in each row, and can adjust spacing between\n// each columns.\n\ndefineEnvironment({\n  type: \"array\",\n  names: [\"alignat\", \"alignat*\", \"alignedat\"],\n  props: {\n    numArgs: 1\n  },\n  handler: alignedHandler,\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n  type: \"array\",\n  names: [\"equation\", \"equation*\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(context) {\n    validateAmsEnvironmentContext(context);\n    var res = {\n      autoTag: getAutoTag(context.envName),\n      emptySingleRow: true,\n      singleRow: true,\n      maxNumCols: 1,\n      leqno: context.parser.settings.leqno\n    };\n    return parseArray(context.parser, res, \"display\");\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n  type: \"array\",\n  names: [\"CD\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(context) {\n    validateAmsEnvironmentContext(context);\n    return parseCD(context.parser);\n  },\n\n  htmlBuilder: htmlBuilder$6,\n  mathmlBuilder: mathmlBuilder$5\n});\ndefineMacro(\"\\\\nonumber\", \"\\\\gdef\\\\@eqnsw{0}\");\ndefineMacro(\"\\\\notag\", \"\\\\nonumber\"); // Catch \\hline outside array environment\n\ndefineFunction({\n  type: \"text\",\n  // Doesn't matter what this is.\n  names: [\"\\\\hline\", \"\\\\hdashline\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    allowedInMath: true\n  },\n\n  handler(context, args) {\n    throw new ParseError(context.funcName + \" valid only within array environment\");\n  }\n\n});\n\nvar environments = _environments;\n\n// defineEnvironment definitions.\n\ndefineFunction({\n  type: \"environment\",\n  names: [\"\\\\begin\", \"\\\\end\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"text\"]\n  },\n\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var nameGroup = args[0];\n\n    if (nameGroup.type !== \"ordgroup\") {\n      throw new ParseError(\"Invalid environment name\", nameGroup);\n    }\n\n    var envName = \"\";\n\n    for (var i = 0; i < nameGroup.body.length; ++i) {\n      envName += assertNodeType(nameGroup.body[i], \"textord\").text;\n    }\n\n    if (funcName === \"\\\\begin\") {\n      // begin...end is similar to left...right\n      if (!environments.hasOwnProperty(envName)) {\n        throw new ParseError(\"No such environment: \" + envName, nameGroup);\n      } // Build the environment object. Arguments and other information will\n      // be made available to the begin and end methods using properties.\n\n\n      var env = environments[envName];\n      var {\n        args: _args,\n        optArgs\n      } = parser.parseArguments(\"\\\\begin{\" + envName + \"}\", env);\n      var context = {\n        mode: parser.mode,\n        envName,\n        parser\n      };\n      var result = env.handler(context, _args, optArgs);\n      parser.expect(\"\\\\end\", false);\n      var endNameToken = parser.nextToken;\n      var end = assertNodeType(parser.parseFunction(), \"environment\");\n\n      if (end.name !== envName) {\n        throw new ParseError(\"Mismatch: \\\\begin{\" + envName + \"} matched by \\\\end{\" + end.name + \"}\", endNameToken);\n      } // $FlowFixMe, \"environment\" handler returns an environment ParseNode\n\n\n      return result;\n    }\n\n    return {\n      type: \"environment\",\n      mode: parser.mode,\n      name: envName,\n      nameGroup\n    };\n  }\n\n});\n\n// TODO(kevinb): implement \\\\sl and \\\\sc\n\nvar htmlBuilder$5 = (group, options) => {\n  var font = group.font;\n  var newOptions = options.withFont(font);\n  return buildGroup$1(group.body, newOptions);\n};\n\nvar mathmlBuilder$4 = (group, options) => {\n  var font = group.font;\n  var newOptions = options.withFont(font);\n  return buildGroup(group.body, newOptions);\n};\n\nvar fontAliases = {\n  \"\\\\Bbb\": \"\\\\mathbb\",\n  \"\\\\bold\": \"\\\\mathbf\",\n  \"\\\\frak\": \"\\\\mathfrak\",\n  \"\\\\bm\": \"\\\\boldsymbol\"\n};\ndefineFunction({\n  type: \"font\",\n  names: [// styles, except \\boldsymbol defined below\n  \"\\\\mathrm\", \"\\\\mathit\", \"\\\\mathbf\", \"\\\\mathnormal\", \"\\\\mathsfit\", // families\n  \"\\\\mathbb\", \"\\\\mathcal\", \"\\\\mathfrak\", \"\\\\mathscr\", \"\\\\mathsf\", \"\\\\mathtt\", // aliases, except \\bm defined below\n  \"\\\\Bbb\", \"\\\\bold\", \"\\\\frak\"],\n  props: {\n    numArgs: 1,\n    allowedInArgument: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var body = normalizeArgument(args[0]);\n    var func = funcName;\n\n    if (func in fontAliases) {\n      func = fontAliases[func];\n    }\n\n    return {\n      type: \"font\",\n      mode: parser.mode,\n      font: func.slice(1),\n      body\n    };\n  },\n  htmlBuilder: htmlBuilder$5,\n  mathmlBuilder: mathmlBuilder$4\n});\ndefineFunction({\n  type: \"mclass\",\n  names: [\"\\\\boldsymbol\", \"\\\\bm\"],\n  props: {\n    numArgs: 1\n  },\n  handler: (_ref2, args) => {\n    var {\n      parser\n    } = _ref2;\n    var body = args[0];\n    var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \\boldsymbol uses \\binrel spacing to inherit the\n    // argument's bin|rel|ord status\n\n    return {\n      type: \"mclass\",\n      mode: parser.mode,\n      mclass: binrelClass(body),\n      body: [{\n        type: \"font\",\n        mode: parser.mode,\n        font: \"boldsymbol\",\n        body\n      }],\n      isCharacterBox: isCharacterBox\n    };\n  }\n}); // Old font changing functions\n\ndefineFunction({\n  type: \"font\",\n  names: [\"\\\\rm\", \"\\\\sf\", \"\\\\tt\", \"\\\\bf\", \"\\\\it\", \"\\\\cal\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true\n  },\n  handler: (_ref3, args) => {\n    var {\n      parser,\n      funcName,\n      breakOnTokenText\n    } = _ref3;\n    var {\n      mode\n    } = parser;\n    var body = parser.parseExpression(true, breakOnTokenText);\n    var style = \"math\" + funcName.slice(1);\n    return {\n      type: \"font\",\n      mode: mode,\n      font: style,\n      body: {\n        type: \"ordgroup\",\n        mode: parser.mode,\n        body\n      }\n    };\n  },\n  htmlBuilder: htmlBuilder$5,\n  mathmlBuilder: mathmlBuilder$4\n});\n\nvar adjustStyle = (size, originalStyle) => {\n  // Figure out what style this fraction should be in based on the\n  // function used\n  var style = originalStyle;\n\n  if (size === \"display\") {\n    // Get display style as a default.\n    // If incoming style is sub/sup, use style.text() to get correct size.\n    style = style.id >= Style$1.SCRIPT.id ? style.text() : Style$1.DISPLAY;\n  } else if (size === \"text\" && style.size === Style$1.DISPLAY.size) {\n    // We're in a \\tfrac but incoming style is displaystyle, so:\n    style = Style$1.TEXT;\n  } else if (size === \"script\") {\n    style = Style$1.SCRIPT;\n  } else if (size === \"scriptscript\") {\n    style = Style$1.SCRIPTSCRIPT;\n  }\n\n  return style;\n};\n\nvar htmlBuilder$4 = (group, options) => {\n  // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).\n  var style = adjustStyle(group.size, options.style);\n  var nstyle = style.fracNum();\n  var dstyle = style.fracDen();\n  var newOptions;\n  newOptions = options.havingStyle(nstyle);\n  var numerm = buildGroup$1(group.numer, newOptions, options);\n\n  if (group.continued) {\n    // \\cfrac inserts a \\strut into the numerator.\n    // Get \\strut dimensions from TeXbook page 353.\n    var hStrut = 8.5 / options.fontMetrics().ptPerEm;\n    var dStrut = 3.5 / options.fontMetrics().ptPerEm;\n    numerm.height = numerm.height < hStrut ? hStrut : numerm.height;\n    numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth;\n  }\n\n  newOptions = options.havingStyle(dstyle);\n  var denomm = buildGroup$1(group.denom, newOptions, options);\n  var rule;\n  var ruleWidth;\n  var ruleSpacing;\n\n  if (group.hasBarLine) {\n    if (group.barSize) {\n      ruleWidth = calculateSize(group.barSize, options);\n      rule = buildCommon.makeLineSpan(\"frac-line\", options, ruleWidth);\n    } else {\n      rule = buildCommon.makeLineSpan(\"frac-line\", options);\n    }\n\n    ruleWidth = rule.height;\n    ruleSpacing = rule.height;\n  } else {\n    rule = null;\n    ruleWidth = 0;\n    ruleSpacing = options.fontMetrics().defaultRuleThickness;\n  } // Rule 15b\n\n\n  var numShift;\n  var clearance;\n  var denomShift;\n\n  if (style.size === Style$1.DISPLAY.size || group.size === \"display\") {\n    numShift = options.fontMetrics().num1;\n\n    if (ruleWidth > 0) {\n      clearance = 3 * ruleSpacing;\n    } else {\n      clearance = 7 * ruleSpacing;\n    }\n\n    denomShift = options.fontMetrics().denom1;\n  } else {\n    if (ruleWidth > 0) {\n      numShift = options.fontMetrics().num2;\n      clearance = ruleSpacing;\n    } else {\n      numShift = options.fontMetrics().num3;\n      clearance = 3 * ruleSpacing;\n    }\n\n    denomShift = options.fontMetrics().denom2;\n  }\n\n  var frac;\n\n  if (!rule) {\n    // Rule 15c\n    var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);\n\n    if (candidateClearance < clearance) {\n      numShift += 0.5 * (clearance - candidateClearance);\n      denomShift += 0.5 * (clearance - candidateClearance);\n    }\n\n    frac = buildCommon.makeVList({\n      positionType: \"individualShift\",\n      children: [{\n        type: \"elem\",\n        elem: denomm,\n        shift: denomShift\n      }, {\n        type: \"elem\",\n        elem: numerm,\n        shift: -numShift\n      }]\n    }, options);\n  } else {\n    // Rule 15d\n    var axisHeight = options.fontMetrics().axisHeight;\n\n    if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {\n      numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));\n    }\n\n    if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {\n      denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));\n    }\n\n    var midShift = -(axisHeight - 0.5 * ruleWidth);\n    frac = buildCommon.makeVList({\n      positionType: \"individualShift\",\n      children: [{\n        type: \"elem\",\n        elem: denomm,\n        shift: denomShift\n      }, {\n        type: \"elem\",\n        elem: rule,\n        shift: midShift\n      }, {\n        type: \"elem\",\n        elem: numerm,\n        shift: -numShift\n      }]\n    }, options);\n  } // Since we manually change the style sometimes (with \\dfrac or \\tfrac),\n  // account for the possible size change here.\n\n\n  newOptions = options.havingStyle(style);\n  frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier;\n  frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e\n\n  var delimSize;\n\n  if (style.size === Style$1.DISPLAY.size) {\n    delimSize = options.fontMetrics().delim1;\n  } else if (style.size === Style$1.SCRIPTSCRIPT.size) {\n    delimSize = options.havingStyle(Style$1.SCRIPT).fontMetrics().delim2;\n  } else {\n    delimSize = options.fontMetrics().delim2;\n  }\n\n  var leftDelim;\n  var rightDelim;\n\n  if (group.leftDelim == null) {\n    leftDelim = makeNullDelimiter(options, [\"mopen\"]);\n  } else {\n    leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, [\"mopen\"]);\n  }\n\n  if (group.continued) {\n    rightDelim = buildCommon.makeSpan([]); // zero width for \\cfrac\n  } else if (group.rightDelim == null) {\n    rightDelim = makeNullDelimiter(options, [\"mclose\"]);\n  } else {\n    rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, [\"mclose\"]);\n  }\n\n  return buildCommon.makeSpan([\"mord\"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan([\"mfrac\"], [frac]), rightDelim], options);\n};\n\nvar mathmlBuilder$3 = (group, options) => {\n  var node = new mathMLTree.MathNode(\"mfrac\", [buildGroup(group.numer, options), buildGroup(group.denom, options)]);\n\n  if (!group.hasBarLine) {\n    node.setAttribute(\"linethickness\", \"0px\");\n  } else if (group.barSize) {\n    var ruleWidth = calculateSize(group.barSize, options);\n    node.setAttribute(\"linethickness\", makeEm(ruleWidth));\n  }\n\n  var style = adjustStyle(group.size, options.style);\n\n  if (style.size !== options.style.size) {\n    node = new mathMLTree.MathNode(\"mstyle\", [node]);\n    var isDisplay = style.size === Style$1.DISPLAY.size ? \"true\" : \"false\";\n    node.setAttribute(\"displaystyle\", isDisplay);\n    node.setAttribute(\"scriptlevel\", \"0\");\n  }\n\n  if (group.leftDelim != null || group.rightDelim != null) {\n    var withDelims = [];\n\n    if (group.leftDelim != null) {\n      var leftOp = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(group.leftDelim.replace(\"\\\\\", \"\"))]);\n      leftOp.setAttribute(\"fence\", \"true\");\n      withDelims.push(leftOp);\n    }\n\n    withDelims.push(node);\n\n    if (group.rightDelim != null) {\n      var rightOp = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(group.rightDelim.replace(\"\\\\\", \"\"))]);\n      rightOp.setAttribute(\"fence\", \"true\");\n      withDelims.push(rightOp);\n    }\n\n    return makeRow(withDelims);\n  }\n\n  return node;\n};\n\ndefineFunction({\n  type: \"genfrac\",\n  names: [\"\\\\dfrac\", \"\\\\frac\", \"\\\\tfrac\", \"\\\\dbinom\", \"\\\\binom\", \"\\\\tbinom\", \"\\\\\\\\atopfrac\", // can’t be entered directly\n  \"\\\\\\\\bracefrac\", \"\\\\\\\\brackfrac\" // ditto\n  ],\n  props: {\n    numArgs: 2,\n    allowedInArgument: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var numer = args[0];\n    var denom = args[1];\n    var hasBarLine;\n    var leftDelim = null;\n    var rightDelim = null;\n    var size = \"auto\";\n\n    switch (funcName) {\n      case \"\\\\dfrac\":\n      case \"\\\\frac\":\n      case \"\\\\tfrac\":\n        hasBarLine = true;\n        break;\n\n      case \"\\\\\\\\atopfrac\":\n        hasBarLine = false;\n        break;\n\n      case \"\\\\dbinom\":\n      case \"\\\\binom\":\n      case \"\\\\tbinom\":\n        hasBarLine = false;\n        leftDelim = \"(\";\n        rightDelim = \")\";\n        break;\n\n      case \"\\\\\\\\bracefrac\":\n        hasBarLine = false;\n        leftDelim = \"\\\\{\";\n        rightDelim = \"\\\\}\";\n        break;\n\n      case \"\\\\\\\\brackfrac\":\n        hasBarLine = false;\n        leftDelim = \"[\";\n        rightDelim = \"]\";\n        break;\n\n      default:\n        throw new Error(\"Unrecognized genfrac command\");\n    }\n\n    switch (funcName) {\n      case \"\\\\dfrac\":\n      case \"\\\\dbinom\":\n        size = \"display\";\n        break;\n\n      case \"\\\\tfrac\":\n      case \"\\\\tbinom\":\n        size = \"text\";\n        break;\n    }\n\n    return {\n      type: \"genfrac\",\n      mode: parser.mode,\n      continued: false,\n      numer,\n      denom,\n      hasBarLine,\n      leftDelim,\n      rightDelim,\n      size,\n      barSize: null\n    };\n  },\n  htmlBuilder: htmlBuilder$4,\n  mathmlBuilder: mathmlBuilder$3\n});\ndefineFunction({\n  type: \"genfrac\",\n  names: [\"\\\\cfrac\"],\n  props: {\n    numArgs: 2\n  },\n  handler: (_ref2, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref2;\n    var numer = args[0];\n    var denom = args[1];\n    return {\n      type: \"genfrac\",\n      mode: parser.mode,\n      continued: true,\n      numer,\n      denom,\n      hasBarLine: true,\n      leftDelim: null,\n      rightDelim: null,\n      size: \"display\",\n      barSize: null\n    };\n  }\n}); // Infix generalized fractions -- these are not rendered directly, but replaced\n// immediately by one of the variants above.\n\ndefineFunction({\n  type: \"infix\",\n  names: [\"\\\\over\", \"\\\\choose\", \"\\\\atop\", \"\\\\brace\", \"\\\\brack\"],\n  props: {\n    numArgs: 0,\n    infix: true\n  },\n\n  handler(_ref3) {\n    var {\n      parser,\n      funcName,\n      token\n    } = _ref3;\n    var replaceWith;\n\n    switch (funcName) {\n      case \"\\\\over\":\n        replaceWith = \"\\\\frac\";\n        break;\n\n      case \"\\\\choose\":\n        replaceWith = \"\\\\binom\";\n        break;\n\n      case \"\\\\atop\":\n        replaceWith = \"\\\\\\\\atopfrac\";\n        break;\n\n      case \"\\\\brace\":\n        replaceWith = \"\\\\\\\\bracefrac\";\n        break;\n\n      case \"\\\\brack\":\n        replaceWith = \"\\\\\\\\brackfrac\";\n        break;\n\n      default:\n        throw new Error(\"Unrecognized infix genfrac command\");\n    }\n\n    return {\n      type: \"infix\",\n      mode: parser.mode,\n      replaceWith,\n      token\n    };\n  }\n\n});\nvar stylArray = [\"display\", \"text\", \"script\", \"scriptscript\"];\n\nvar delimFromValue = function delimFromValue(delimString) {\n  var delim = null;\n\n  if (delimString.length > 0) {\n    delim = delimString;\n    delim = delim === \".\" ? null : delim;\n  }\n\n  return delim;\n};\n\ndefineFunction({\n  type: \"genfrac\",\n  names: [\"\\\\genfrac\"],\n  props: {\n    numArgs: 6,\n    allowedInArgument: true,\n    argTypes: [\"math\", \"math\", \"size\", \"text\", \"math\", \"math\"]\n  },\n\n  handler(_ref4, args) {\n    var {\n      parser\n    } = _ref4;\n    var numer = args[4];\n    var denom = args[5]; // Look into the parse nodes to get the desired delimiters.\n\n    var leftNode = normalizeArgument(args[0]);\n    var leftDelim = leftNode.type === \"atom\" && leftNode.family === \"open\" ? delimFromValue(leftNode.text) : null;\n    var rightNode = normalizeArgument(args[1]);\n    var rightDelim = rightNode.type === \"atom\" && rightNode.family === \"close\" ? delimFromValue(rightNode.text) : null;\n    var barNode = assertNodeType(args[2], \"size\");\n    var hasBarLine;\n    var barSize = null;\n\n    if (barNode.isBlank) {\n      // \\genfrac acts differently than \\above.\n      // \\genfrac treats an empty size group as a signal to use a\n      // standard bar size. \\above would see size = 0 and omit the bar.\n      hasBarLine = true;\n    } else {\n      barSize = barNode.value;\n      hasBarLine = barSize.number > 0;\n    } // Find out if we want displaystyle, textstyle, etc.\n\n\n    var size = \"auto\";\n    var styl = args[3];\n\n    if (styl.type === \"ordgroup\") {\n      if (styl.body.length > 0) {\n        var textOrd = assertNodeType(styl.body[0], \"textord\");\n        size = stylArray[Number(textOrd.text)];\n      }\n    } else {\n      styl = assertNodeType(styl, \"textord\");\n      size = stylArray[Number(styl.text)];\n    }\n\n    return {\n      type: \"genfrac\",\n      mode: parser.mode,\n      numer,\n      denom,\n      continued: false,\n      hasBarLine,\n      barSize,\n      leftDelim,\n      rightDelim,\n      size\n    };\n  },\n\n  htmlBuilder: htmlBuilder$4,\n  mathmlBuilder: mathmlBuilder$3\n}); // \\above is an infix fraction that also defines a fraction bar size.\n\ndefineFunction({\n  type: \"infix\",\n  names: [\"\\\\above\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"size\"],\n    infix: true\n  },\n\n  handler(_ref5, args) {\n    var {\n      parser,\n      funcName,\n      token\n    } = _ref5;\n    return {\n      type: \"infix\",\n      mode: parser.mode,\n      replaceWith: \"\\\\\\\\abovefrac\",\n      size: assertNodeType(args[0], \"size\").value,\n      token\n    };\n  }\n\n});\ndefineFunction({\n  type: \"genfrac\",\n  names: [\"\\\\\\\\abovefrac\"],\n  props: {\n    numArgs: 3,\n    argTypes: [\"math\", \"size\", \"math\"]\n  },\n  handler: (_ref6, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref6;\n    var numer = args[0];\n    var barSize = assert(assertNodeType(args[1], \"infix\").size);\n    var denom = args[2];\n    var hasBarLine = barSize.number > 0;\n    return {\n      type: \"genfrac\",\n      mode: parser.mode,\n      numer,\n      denom,\n      continued: false,\n      hasBarLine,\n      barSize,\n      leftDelim: null,\n      rightDelim: null,\n      size: \"auto\"\n    };\n  },\n  htmlBuilder: htmlBuilder$4,\n  mathmlBuilder: mathmlBuilder$3\n});\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"horizBrace\", but\n// also \"supsub\" since an over/underbrace can affect super/subscripting.\nvar htmlBuilder$3 = (grp, options) => {\n  var style = options.style; // Pull out the `ParseNode<\"horizBrace\">` if `grp` is a \"supsub\" node.\n\n  var supSubGroup;\n  var group;\n\n  if (grp.type === \"supsub\") {\n    // Ref: LaTeX source2e: }}}}\\limits}\n    // i.e. LaTeX treats the brace similar to an op and passes it\n    // with \\limits, so we need to assign supsub style.\n    supSubGroup = grp.sup ? buildGroup$1(grp.sup, options.havingStyle(style.sup()), options) : buildGroup$1(grp.sub, options.havingStyle(style.sub()), options);\n    group = assertNodeType(grp.base, \"horizBrace\");\n  } else {\n    group = assertNodeType(grp, \"horizBrace\");\n  } // Build the base group\n\n\n  var body = buildGroup$1(group.base, options.havingBaseStyle(Style$1.DISPLAY)); // Create the stretchy element\n\n  var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns        ┏━━━━━━━━┓\n  // This first vlist contains the content and the brace:   equation\n\n  var vlist;\n\n  if (group.isOver) {\n    vlist = buildCommon.makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: body\n      }, {\n        type: \"kern\",\n        size: 0.1\n      }, {\n        type: \"elem\",\n        elem: braceBody\n      }]\n    }, options); // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n\n    vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n  } else {\n    vlist = buildCommon.makeVList({\n      positionType: \"bottom\",\n      positionData: body.depth + 0.1 + braceBody.height,\n      children: [{\n        type: \"elem\",\n        elem: braceBody\n      }, {\n        type: \"kern\",\n        size: 0.1\n      }, {\n        type: \"elem\",\n        elem: body\n      }]\n    }, options); // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n\n    vlist.children[0].children[0].children[0].classes.push(\"svg-align\");\n  }\n\n  if (supSubGroup) {\n    // To write the supsub, wrap the first vlist in another vlist:\n    // They can't all go in the same vlist, because the note might be\n    // wider than the equation. We want the equation to control the\n    // brace width.\n    //      note          long note           long note\n    //   ┏━━━━━━━━┓   or    ┏━━━┓     not    ┏━━━━━━━━━┓\n    //    equation           eqn                 eqn\n    var vSpan = buildCommon.makeSpan([\"mord\", group.isOver ? \"mover\" : \"munder\"], [vlist], options);\n\n    if (group.isOver) {\n      vlist = buildCommon.makeVList({\n        positionType: \"firstBaseline\",\n        children: [{\n          type: \"elem\",\n          elem: vSpan\n        }, {\n          type: \"kern\",\n          size: 0.2\n        }, {\n          type: \"elem\",\n          elem: supSubGroup\n        }]\n      }, options);\n    } else {\n      vlist = buildCommon.makeVList({\n        positionType: \"bottom\",\n        positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth,\n        children: [{\n          type: \"elem\",\n          elem: supSubGroup\n        }, {\n          type: \"kern\",\n          size: 0.2\n        }, {\n          type: \"elem\",\n          elem: vSpan\n        }]\n      }, options);\n    }\n  }\n\n  return buildCommon.makeSpan([\"mord\", group.isOver ? \"mover\" : \"munder\"], [vlist], options);\n};\n\nvar mathmlBuilder$2 = (group, options) => {\n  var accentNode = stretchy.mathMLnode(group.label);\n  return new mathMLTree.MathNode(group.isOver ? \"mover\" : \"munder\", [buildGroup(group.base, options), accentNode]);\n}; // Horizontal stretchy braces\n\n\ndefineFunction({\n  type: \"horizBrace\",\n  names: [\"\\\\overbrace\", \"\\\\underbrace\"],\n  props: {\n    numArgs: 1\n  },\n\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    return {\n      type: \"horizBrace\",\n      mode: parser.mode,\n      label: funcName,\n      isOver: /^\\\\over/.test(funcName),\n      base: args[0]\n    };\n  },\n\n  htmlBuilder: htmlBuilder$3,\n  mathmlBuilder: mathmlBuilder$2\n});\n\ndefineFunction({\n  type: \"href\",\n  names: [\"\\\\href\"],\n  props: {\n    numArgs: 2,\n    argTypes: [\"url\", \"original\"],\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser\n    } = _ref;\n    var body = args[1];\n    var href = assertNodeType(args[0], \"url\").url;\n\n    if (!parser.settings.isTrusted({\n      command: \"\\\\href\",\n      url: href\n    })) {\n      return parser.formatUnsupportedCmd(\"\\\\href\");\n    }\n\n    return {\n      type: \"href\",\n      mode: parser.mode,\n      href,\n      body: ordargument(body)\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var elements = buildExpression$1(group.body, options, false);\n    return buildCommon.makeAnchor(group.href, [], elements, options);\n  },\n  mathmlBuilder: (group, options) => {\n    var math = buildExpressionRow(group.body, options);\n\n    if (!(math instanceof MathNode)) {\n      math = new MathNode(\"mrow\", [math]);\n    }\n\n    math.setAttribute(\"href\", group.href);\n    return math;\n  }\n});\ndefineFunction({\n  type: \"href\",\n  names: [\"\\\\url\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"url\"],\n    allowedInText: true\n  },\n  handler: (_ref2, args) => {\n    var {\n      parser\n    } = _ref2;\n    var href = assertNodeType(args[0], \"url\").url;\n\n    if (!parser.settings.isTrusted({\n      command: \"\\\\url\",\n      url: href\n    })) {\n      return parser.formatUnsupportedCmd(\"\\\\url\");\n    }\n\n    var chars = [];\n\n    for (var i = 0; i < href.length; i++) {\n      var c = href[i];\n\n      if (c === \"~\") {\n        c = \"\\\\textasciitilde\";\n      }\n\n      chars.push({\n        type: \"textord\",\n        mode: \"text\",\n        text: c\n      });\n    }\n\n    var body = {\n      type: \"text\",\n      mode: parser.mode,\n      font: \"\\\\texttt\",\n      body: chars\n    };\n    return {\n      type: \"href\",\n      mode: parser.mode,\n      href,\n      body: ordargument(body)\n    };\n  }\n});\n\n// In LaTeX, \\vcenter can act only on a box, as in\n// \\vcenter{\\hbox{$\\frac{a+b}{\\dfrac{c}{d}}$}}\n// This function by itself doesn't do anything but prevent a soft line break.\n\ndefineFunction({\n  type: \"hbox\",\n  names: [\"\\\\hbox\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"text\"],\n    allowedInText: true,\n    primitive: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"hbox\",\n      mode: parser.mode,\n      body: ordargument(args[0])\n    };\n  },\n\n  htmlBuilder(group, options) {\n    var elements = buildExpression$1(group.body, options, false);\n    return buildCommon.makeFragment(elements);\n  },\n\n  mathmlBuilder(group, options) {\n    return new mathMLTree.MathNode(\"mrow\", buildExpression(group.body, options));\n  }\n\n});\n\ndefineFunction({\n  type: \"html\",\n  names: [\"\\\\htmlClass\", \"\\\\htmlId\", \"\\\\htmlStyle\", \"\\\\htmlData\"],\n  props: {\n    numArgs: 2,\n    argTypes: [\"raw\", \"original\"],\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName,\n      token\n    } = _ref;\n    var value = assertNodeType(args[0], \"raw\").string;\n    var body = args[1];\n\n    if (parser.settings.strict) {\n      parser.settings.reportNonstrict(\"htmlExtension\", \"HTML extension is disabled on strict mode\");\n    }\n\n    var trustContext;\n    var attributes = {};\n\n    switch (funcName) {\n      case \"\\\\htmlClass\":\n        attributes.class = value;\n        trustContext = {\n          command: \"\\\\htmlClass\",\n          class: value\n        };\n        break;\n\n      case \"\\\\htmlId\":\n        attributes.id = value;\n        trustContext = {\n          command: \"\\\\htmlId\",\n          id: value\n        };\n        break;\n\n      case \"\\\\htmlStyle\":\n        attributes.style = value;\n        trustContext = {\n          command: \"\\\\htmlStyle\",\n          style: value\n        };\n        break;\n\n      case \"\\\\htmlData\":\n        {\n          var data = value.split(\",\");\n\n          for (var i = 0; i < data.length; i++) {\n            var keyVal = data[i].split(\"=\");\n\n            if (keyVal.length !== 2) {\n              throw new ParseError(\"Error parsing key-value for \\\\htmlData\");\n            }\n\n            attributes[\"data-\" + keyVal[0].trim()] = keyVal[1].trim();\n          }\n\n          trustContext = {\n            command: \"\\\\htmlData\",\n            attributes\n          };\n          break;\n        }\n\n      default:\n        throw new Error(\"Unrecognized html command\");\n    }\n\n    if (!parser.settings.isTrusted(trustContext)) {\n      return parser.formatUnsupportedCmd(funcName);\n    }\n\n    return {\n      type: \"html\",\n      mode: parser.mode,\n      attributes,\n      body: ordargument(body)\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var elements = buildExpression$1(group.body, options, false);\n    var classes = [\"enclosing\"];\n\n    if (group.attributes.class) {\n      classes.push(...group.attributes.class.trim().split(/\\s+/));\n    }\n\n    var span = buildCommon.makeSpan(classes, elements, options);\n\n    for (var attr in group.attributes) {\n      if (attr !== \"class\" && group.attributes.hasOwnProperty(attr)) {\n        span.setAttribute(attr, group.attributes[attr]);\n      }\n    }\n\n    return span;\n  },\n  mathmlBuilder: (group, options) => {\n    return buildExpressionRow(group.body, options);\n  }\n});\n\ndefineFunction({\n  type: \"htmlmathml\",\n  names: [\"\\\\html@mathml\"],\n  props: {\n    numArgs: 2,\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"htmlmathml\",\n      mode: parser.mode,\n      html: ordargument(args[0]),\n      mathml: ordargument(args[1])\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var elements = buildExpression$1(group.html, options, false);\n    return buildCommon.makeFragment(elements);\n  },\n  mathmlBuilder: (group, options) => {\n    return buildExpressionRow(group.mathml, options);\n  }\n});\n\nvar sizeData = function sizeData(str) {\n  if (/^[-+]? *(\\d+(\\.\\d*)?|\\.\\d+)$/.test(str)) {\n    // str is a number with no unit specified.\n    // default unit is bp, per graphix package.\n    return {\n      number: +str,\n      unit: \"bp\"\n    };\n  } else {\n    var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(str);\n\n    if (!match) {\n      throw new ParseError(\"Invalid size: '\" + str + \"' in \\\\includegraphics\");\n    }\n\n    var data = {\n      number: +(match[1] + match[2]),\n      // sign + magnitude, cast to number\n      unit: match[3]\n    };\n\n    if (!validUnit(data)) {\n      throw new ParseError(\"Invalid unit: '\" + data.unit + \"' in \\\\includegraphics.\");\n    }\n\n    return data;\n  }\n};\n\ndefineFunction({\n  type: \"includegraphics\",\n  names: [\"\\\\includegraphics\"],\n  props: {\n    numArgs: 1,\n    numOptionalArgs: 1,\n    argTypes: [\"raw\", \"url\"],\n    allowedInText: false\n  },\n  handler: (_ref, args, optArgs) => {\n    var {\n      parser\n    } = _ref;\n    var width = {\n      number: 0,\n      unit: \"em\"\n    };\n    var height = {\n      number: 0.9,\n      unit: \"em\"\n    }; // sorta character sized.\n\n    var totalheight = {\n      number: 0,\n      unit: \"em\"\n    };\n    var alt = \"\";\n\n    if (optArgs[0]) {\n      var attributeStr = assertNodeType(optArgs[0], \"raw\").string; // Parser.js does not parse key/value pairs. We get a string.\n\n      var attributes = attributeStr.split(\",\");\n\n      for (var i = 0; i < attributes.length; i++) {\n        var keyVal = attributes[i].split(\"=\");\n\n        if (keyVal.length === 2) {\n          var str = keyVal[1].trim();\n\n          switch (keyVal[0].trim()) {\n            case \"alt\":\n              alt = str;\n              break;\n\n            case \"width\":\n              width = sizeData(str);\n              break;\n\n            case \"height\":\n              height = sizeData(str);\n              break;\n\n            case \"totalheight\":\n              totalheight = sizeData(str);\n              break;\n\n            default:\n              throw new ParseError(\"Invalid key: '\" + keyVal[0] + \"' in \\\\includegraphics.\");\n          }\n        }\n      }\n    }\n\n    var src = assertNodeType(args[0], \"url\").url;\n\n    if (alt === \"\") {\n      // No alt given. Use the file name. Strip away the path.\n      alt = src;\n      alt = alt.replace(/^.*[\\\\/]/, '');\n      alt = alt.substring(0, alt.lastIndexOf('.'));\n    }\n\n    if (!parser.settings.isTrusted({\n      command: \"\\\\includegraphics\",\n      url: src\n    })) {\n      return parser.formatUnsupportedCmd(\"\\\\includegraphics\");\n    }\n\n    return {\n      type: \"includegraphics\",\n      mode: parser.mode,\n      alt: alt,\n      width: width,\n      height: height,\n      totalheight: totalheight,\n      src: src\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var height = calculateSize(group.height, options);\n    var depth = 0;\n\n    if (group.totalheight.number > 0) {\n      depth = calculateSize(group.totalheight, options) - height;\n    }\n\n    var width = 0;\n\n    if (group.width.number > 0) {\n      width = calculateSize(group.width, options);\n    }\n\n    var style = {\n      height: makeEm(height + depth)\n    };\n\n    if (width > 0) {\n      style.width = makeEm(width);\n    }\n\n    if (depth > 0) {\n      style.verticalAlign = makeEm(-depth);\n    }\n\n    var node = new Img(group.src, group.alt, style);\n    node.height = height;\n    node.depth = depth;\n    return node;\n  },\n  mathmlBuilder: (group, options) => {\n    var node = new mathMLTree.MathNode(\"mglyph\", []);\n    node.setAttribute(\"alt\", group.alt);\n    var height = calculateSize(group.height, options);\n    var depth = 0;\n\n    if (group.totalheight.number > 0) {\n      depth = calculateSize(group.totalheight, options) - height;\n      node.setAttribute(\"valign\", makeEm(-depth));\n    }\n\n    node.setAttribute(\"height\", makeEm(height + depth));\n\n    if (group.width.number > 0) {\n      var width = calculateSize(group.width, options);\n      node.setAttribute(\"width\", makeEm(width));\n    }\n\n    node.setAttribute(\"src\", group.src);\n    return node;\n  }\n});\n\n// Horizontal spacing commands\n\ndefineFunction({\n  type: \"kern\",\n  names: [\"\\\\kern\", \"\\\\mkern\", \"\\\\hskip\", \"\\\\mskip\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"size\"],\n    primitive: true,\n    allowedInText: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var size = assertNodeType(args[0], \"size\");\n\n    if (parser.settings.strict) {\n      var mathFunction = funcName[1] === 'm'; // \\mkern, \\mskip\n\n      var muUnit = size.value.unit === 'mu';\n\n      if (mathFunction) {\n        if (!muUnit) {\n          parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" supports only mu units, \" + (\"not \" + size.value.unit + \" units\"));\n        }\n\n        if (parser.mode !== \"math\") {\n          parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" works only in math mode\");\n        }\n      } else {\n        // !mathFunction\n        if (muUnit) {\n          parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" doesn't support mu units\");\n        }\n      }\n    }\n\n    return {\n      type: \"kern\",\n      mode: parser.mode,\n      dimension: size.value\n    };\n  },\n\n  htmlBuilder(group, options) {\n    return buildCommon.makeGlue(group.dimension, options);\n  },\n\n  mathmlBuilder(group, options) {\n    var dimension = calculateSize(group.dimension, options);\n    return new mathMLTree.SpaceNode(dimension);\n  }\n\n});\n\n// Horizontal overlap functions\ndefineFunction({\n  type: \"lap\",\n  names: [\"\\\\mathllap\", \"\\\\mathrlap\", \"\\\\mathclap\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"lap\",\n      mode: parser.mode,\n      alignment: funcName.slice(5),\n      body\n    };\n  },\n  htmlBuilder: (group, options) => {\n    // mathllap, mathrlap, mathclap\n    var inner;\n\n    if (group.alignment === \"clap\") {\n      // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/\n      inner = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span\n\n      inner = buildCommon.makeSpan([\"inner\"], [inner], options);\n    } else {\n      inner = buildCommon.makeSpan([\"inner\"], [buildGroup$1(group.body, options)]);\n    }\n\n    var fix = buildCommon.makeSpan([\"fix\"], []);\n    var node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the\n    // two items involved in the lap.\n    // Next, use a strut to set the height of the HTML bounding box.\n    // Otherwise, a tall argument may be misplaced.\n    // This code resolved issue #1153\n\n    var strut = buildCommon.makeSpan([\"strut\"]);\n    strut.style.height = makeEm(node.height + node.depth);\n\n    if (node.depth) {\n      strut.style.verticalAlign = makeEm(-node.depth);\n    }\n\n    node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall.\n    // This code resolves issue #1234\n\n    node = buildCommon.makeSpan([\"thinbox\"], [node], options);\n    return buildCommon.makeSpan([\"mord\", \"vbox\"], [node], options);\n  },\n  mathmlBuilder: (group, options) => {\n    // mathllap, mathrlap, mathclap\n    var node = new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n\n    if (group.alignment !== \"rlap\") {\n      var offset = group.alignment === \"llap\" ? \"-1\" : \"-0.5\";\n      node.setAttribute(\"lspace\", offset + \"width\");\n    }\n\n    node.setAttribute(\"width\", \"0px\");\n    return node;\n  }\n});\n\ndefineFunction({\n  type: \"styling\",\n  names: [\"\\\\(\", \"$\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    allowedInMath: false\n  },\n\n  handler(_ref, args) {\n    var {\n      funcName,\n      parser\n    } = _ref;\n    var outerMode = parser.mode;\n    parser.switchMode(\"math\");\n    var close = funcName === \"\\\\(\" ? \"\\\\)\" : \"$\";\n    var body = parser.parseExpression(false, close);\n    parser.expect(close);\n    parser.switchMode(outerMode);\n    return {\n      type: \"styling\",\n      mode: parser.mode,\n      style: \"text\",\n      body\n    };\n  }\n\n}); // Check for extra closing math delimiters\n\ndefineFunction({\n  type: \"text\",\n  // Doesn't matter what this is.\n  names: [\"\\\\)\", \"\\\\]\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    allowedInMath: false\n  },\n\n  handler(context, args) {\n    throw new ParseError(\"Mismatched \" + context.funcName);\n  }\n\n});\n\nvar chooseMathStyle = (group, options) => {\n  switch (options.style.size) {\n    case Style$1.DISPLAY.size:\n      return group.display;\n\n    case Style$1.TEXT.size:\n      return group.text;\n\n    case Style$1.SCRIPT.size:\n      return group.script;\n\n    case Style$1.SCRIPTSCRIPT.size:\n      return group.scriptscript;\n\n    default:\n      return group.text;\n  }\n};\n\ndefineFunction({\n  type: \"mathchoice\",\n  names: [\"\\\\mathchoice\"],\n  props: {\n    numArgs: 4,\n    primitive: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"mathchoice\",\n      mode: parser.mode,\n      display: ordargument(args[0]),\n      text: ordargument(args[1]),\n      script: ordargument(args[2]),\n      scriptscript: ordargument(args[3])\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var body = chooseMathStyle(group, options);\n    var elements = buildExpression$1(body, options, false);\n    return buildCommon.makeFragment(elements);\n  },\n  mathmlBuilder: (group, options) => {\n    var body = chooseMathStyle(group, options);\n    return buildExpressionRow(body, options);\n  }\n});\n\nvar assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift) => {\n  base = buildCommon.makeSpan([], [base]);\n  var subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup);\n  var sub;\n  var sup; // We manually have to handle the superscripts and subscripts. This,\n  // aside from the kern calculations, is copied from supsub.\n\n  if (supGroup) {\n    var elem = buildGroup$1(supGroup, options.havingStyle(style.sup()), options);\n    sup = {\n      elem,\n      kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth)\n    };\n  }\n\n  if (subGroup) {\n    var _elem = buildGroup$1(subGroup, options.havingStyle(style.sub()), options);\n\n    sub = {\n      elem: _elem,\n      kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height)\n    };\n  } // Build the final group as a vlist of the possible subscript, base,\n  // and possible superscript.\n\n\n  var finalGroup;\n\n  if (sup && sub) {\n    var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift;\n    finalGroup = buildCommon.makeVList({\n      positionType: \"bottom\",\n      positionData: bottom,\n      children: [{\n        type: \"kern\",\n        size: options.fontMetrics().bigOpSpacing5\n      }, {\n        type: \"elem\",\n        elem: sub.elem,\n        marginLeft: makeEm(-slant)\n      }, {\n        type: \"kern\",\n        size: sub.kern\n      }, {\n        type: \"elem\",\n        elem: base\n      }, {\n        type: \"kern\",\n        size: sup.kern\n      }, {\n        type: \"elem\",\n        elem: sup.elem,\n        marginLeft: makeEm(slant)\n      }, {\n        type: \"kern\",\n        size: options.fontMetrics().bigOpSpacing5\n      }]\n    }, options);\n  } else if (sub) {\n    var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note\n    // that we are supposed to shift the limits by 1/2 of the slant,\n    // but since we are centering the limits adding a full slant of\n    // margin will shift by 1/2 that.\n\n    finalGroup = buildCommon.makeVList({\n      positionType: \"top\",\n      positionData: top,\n      children: [{\n        type: \"kern\",\n        size: options.fontMetrics().bigOpSpacing5\n      }, {\n        type: \"elem\",\n        elem: sub.elem,\n        marginLeft: makeEm(-slant)\n      }, {\n        type: \"kern\",\n        size: sub.kern\n      }, {\n        type: \"elem\",\n        elem: base\n      }]\n    }, options);\n  } else if (sup) {\n    var _bottom = base.depth + baseShift;\n\n    finalGroup = buildCommon.makeVList({\n      positionType: \"bottom\",\n      positionData: _bottom,\n      children: [{\n        type: \"elem\",\n        elem: base\n      }, {\n        type: \"kern\",\n        size: sup.kern\n      }, {\n        type: \"elem\",\n        elem: sup.elem,\n        marginLeft: makeEm(slant)\n      }, {\n        type: \"kern\",\n        size: options.fontMetrics().bigOpSpacing5\n      }]\n    }, options);\n  } else {\n    // This case probably shouldn't occur (this would mean the\n    // supsub was sending us a group with no superscript or\n    // subscript) but be safe.\n    return base;\n  }\n\n  var parts = [finalGroup];\n\n  if (sub && slant !== 0 && !subIsSingleCharacter) {\n    // A negative margin-left was applied to the lower limit.\n    // Avoid an overlap by placing a spacer on the left on the group.\n    var spacer = buildCommon.makeSpan([\"mspace\"], [], options);\n    spacer.style.marginRight = makeEm(slant);\n    parts.unshift(spacer);\n  }\n\n  return buildCommon.makeSpan([\"mop\", \"op-limits\"], parts, options);\n};\n\n// Limits, symbols\n// Most operators have a large successor symbol, but these don't.\nvar noSuccessor = [\"\\\\smallint\"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only \"op\", but also\n// \"supsub\" since some of them (like \\int) can affect super/subscripting.\n\nvar htmlBuilder$2 = (grp, options) => {\n  // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n  var supGroup;\n  var subGroup;\n  var hasLimits = false;\n  var group;\n\n  if (grp.type === \"supsub\") {\n    // If we have limits, supsub will pass us its group to handle. Pull\n    // out the superscript and subscript and set the group to the op in\n    // its base.\n    supGroup = grp.sup;\n    subGroup = grp.sub;\n    group = assertNodeType(grp.base, \"op\");\n    hasLimits = true;\n  } else {\n    group = assertNodeType(grp, \"op\");\n  }\n\n  var style = options.style;\n  var large = false;\n\n  if (style.size === Style$1.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) {\n    // Most symbol operators get larger in displaystyle (rule 13)\n    large = true;\n  }\n\n  var base;\n\n  if (group.symbol) {\n    // If this is a symbol, create the symbol.\n    var fontName = large ? \"Size2-Regular\" : \"Size1-Regular\";\n    var stash = \"\";\n\n    if (group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") {\n      // No font glyphs yet, so use a glyph w/o the oval.\n      // TODO: When font glyphs are available, delete this code.\n      stash = group.name.slice(1);\n      group.name = stash === \"oiint\" ? \"\\\\iint\" : \"\\\\iiint\";\n    }\n\n    base = buildCommon.makeSymbol(group.name, fontName, \"math\", options, [\"mop\", \"op-symbol\", large ? \"large-op\" : \"small-op\"]);\n\n    if (stash.length > 0) {\n      // We're in \\oiint or \\oiiint. Overlay the oval.\n      // TODO: When font glyphs are available, delete this code.\n      var italic = base.italic;\n      var oval = buildCommon.staticSvg(stash + \"Size\" + (large ? \"2\" : \"1\"), options);\n      base = buildCommon.makeVList({\n        positionType: \"individualShift\",\n        children: [{\n          type: \"elem\",\n          elem: base,\n          shift: 0\n        }, {\n          type: \"elem\",\n          elem: oval,\n          shift: large ? 0.08 : 0\n        }]\n      }, options);\n      group.name = \"\\\\\" + stash;\n      base.classes.unshift(\"mop\"); // $FlowFixMe\n\n      base.italic = italic;\n    }\n  } else if (group.body) {\n    // If this is a list, compose that list.\n    var inner = buildExpression$1(group.body, options, true);\n\n    if (inner.length === 1 && inner[0] instanceof SymbolNode) {\n      base = inner[0];\n      base.classes[0] = \"mop\"; // replace old mclass\n    } else {\n      base = buildCommon.makeSpan([\"mop\"], inner, options);\n    }\n  } else {\n    // Otherwise, this is a text operator. Build the text from the\n    // operator's name.\n    var output = [];\n\n    for (var i = 1; i < group.name.length; i++) {\n      output.push(buildCommon.mathsym(group.name[i], group.mode, options));\n    }\n\n    base = buildCommon.makeSpan([\"mop\"], output, options);\n  } // If content of op is a single symbol, shift it vertically.\n\n\n  var baseShift = 0;\n  var slant = 0;\n\n  if ((base instanceof SymbolNode || group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") && !group.suppressBaseShift) {\n    // We suppress the shift of the base of \\overset and \\underset. Otherwise,\n    // shift the symbol so its center lies on the axis (rule 13). It\n    // appears that our fonts have the centers of the symbols already\n    // almost on the axis, so these numbers are very small. Note we\n    // don't actually apply this here, but instead it is used either in\n    // the vlist creation or separately when there are no limits.\n    baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction.\n    // $FlowFixMe\n\n    slant = base.italic;\n  }\n\n  if (hasLimits) {\n    return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift);\n  } else {\n    if (baseShift) {\n      base.style.position = \"relative\";\n      base.style.top = makeEm(baseShift);\n    }\n\n    return base;\n  }\n};\n\nvar mathmlBuilder$1 = (group, options) => {\n  var node;\n\n  if (group.symbol) {\n    // This is a symbol. Just add the symbol.\n    node = new MathNode(\"mo\", [makeText(group.name, group.mode)]);\n\n    if (utils.contains(noSuccessor, group.name)) {\n      node.setAttribute(\"largeop\", \"false\");\n    }\n  } else if (group.body) {\n    // This is an operator with children. Add them.\n    node = new MathNode(\"mo\", buildExpression(group.body, options));\n  } else {\n    // This is a text operator. Add all of the characters from the\n    // operator's name.\n    node = new MathNode(\"mi\", [new TextNode(group.name.slice(1))]); // Append an <mo>&ApplyFunction;</mo>.\n    // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4\n\n    var operator = new MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n\n    if (group.parentIsSupSub) {\n      node = new MathNode(\"mrow\", [node, operator]);\n    } else {\n      node = newDocumentFragment([node, operator]);\n    }\n  }\n\n  return node;\n};\n\nvar singleCharBigOps = {\n  \"\\u220F\": \"\\\\prod\",\n  \"\\u2210\": \"\\\\coprod\",\n  \"\\u2211\": \"\\\\sum\",\n  \"\\u22c0\": \"\\\\bigwedge\",\n  \"\\u22c1\": \"\\\\bigvee\",\n  \"\\u22c2\": \"\\\\bigcap\",\n  \"\\u22c3\": \"\\\\bigcup\",\n  \"\\u2a00\": \"\\\\bigodot\",\n  \"\\u2a01\": \"\\\\bigoplus\",\n  \"\\u2a02\": \"\\\\bigotimes\",\n  \"\\u2a04\": \"\\\\biguplus\",\n  \"\\u2a06\": \"\\\\bigsqcup\"\n};\ndefineFunction({\n  type: \"op\",\n  names: [\"\\\\coprod\", \"\\\\bigvee\", \"\\\\bigwedge\", \"\\\\biguplus\", \"\\\\bigcap\", \"\\\\bigcup\", \"\\\\intop\", \"\\\\prod\", \"\\\\sum\", \"\\\\bigotimes\", \"\\\\bigoplus\", \"\\\\bigodot\", \"\\\\bigsqcup\", \"\\\\smallint\", \"\\u220F\", \"\\u2210\", \"\\u2211\", \"\\u22c0\", \"\\u22c1\", \"\\u22c2\", \"\\u22c3\", \"\\u2a00\", \"\\u2a01\", \"\\u2a02\", \"\\u2a04\", \"\\u2a06\"],\n  props: {\n    numArgs: 0\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var fName = funcName;\n\n    if (fName.length === 1) {\n      fName = singleCharBigOps[fName];\n    }\n\n    return {\n      type: \"op\",\n      mode: parser.mode,\n      limits: true,\n      parentIsSupSub: false,\n      symbol: true,\n      name: fName\n    };\n  },\n  htmlBuilder: htmlBuilder$2,\n  mathmlBuilder: mathmlBuilder$1\n}); // Note: calling defineFunction with a type that's already been defined only\n// works because the same htmlBuilder and mathmlBuilder are being used.\n\ndefineFunction({\n  type: \"op\",\n  names: [\"\\\\mathop\"],\n  props: {\n    numArgs: 1,\n    primitive: true\n  },\n  handler: (_ref2, args) => {\n    var {\n      parser\n    } = _ref2;\n    var body = args[0];\n    return {\n      type: \"op\",\n      mode: parser.mode,\n      limits: false,\n      parentIsSupSub: false,\n      symbol: false,\n      body: ordargument(body)\n    };\n  },\n  htmlBuilder: htmlBuilder$2,\n  mathmlBuilder: mathmlBuilder$1\n}); // There are 2 flags for operators; whether they produce limits in\n// displaystyle, and whether they are symbols and should grow in\n// displaystyle. These four groups cover the four possible choices.\n\nvar singleCharIntegrals = {\n  \"\\u222b\": \"\\\\int\",\n  \"\\u222c\": \"\\\\iint\",\n  \"\\u222d\": \"\\\\iiint\",\n  \"\\u222e\": \"\\\\oint\",\n  \"\\u222f\": \"\\\\oiint\",\n  \"\\u2230\": \"\\\\oiiint\"\n}; // No limits, not symbols\n\ndefineFunction({\n  type: \"op\",\n  names: [\"\\\\arcsin\", \"\\\\arccos\", \"\\\\arctan\", \"\\\\arctg\", \"\\\\arcctg\", \"\\\\arg\", \"\\\\ch\", \"\\\\cos\", \"\\\\cosec\", \"\\\\cosh\", \"\\\\cot\", \"\\\\cotg\", \"\\\\coth\", \"\\\\csc\", \"\\\\ctg\", \"\\\\cth\", \"\\\\deg\", \"\\\\dim\", \"\\\\exp\", \"\\\\hom\", \"\\\\ker\", \"\\\\lg\", \"\\\\ln\", \"\\\\log\", \"\\\\sec\", \"\\\\sin\", \"\\\\sinh\", \"\\\\sh\", \"\\\\tan\", \"\\\\tanh\", \"\\\\tg\", \"\\\\th\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(_ref3) {\n    var {\n      parser,\n      funcName\n    } = _ref3;\n    return {\n      type: \"op\",\n      mode: parser.mode,\n      limits: false,\n      parentIsSupSub: false,\n      symbol: false,\n      name: funcName\n    };\n  },\n\n  htmlBuilder: htmlBuilder$2,\n  mathmlBuilder: mathmlBuilder$1\n}); // Limits, not symbols\n\ndefineFunction({\n  type: \"op\",\n  names: [\"\\\\det\", \"\\\\gcd\", \"\\\\inf\", \"\\\\lim\", \"\\\\max\", \"\\\\min\", \"\\\\Pr\", \"\\\\sup\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(_ref4) {\n    var {\n      parser,\n      funcName\n    } = _ref4;\n    return {\n      type: \"op\",\n      mode: parser.mode,\n      limits: true,\n      parentIsSupSub: false,\n      symbol: false,\n      name: funcName\n    };\n  },\n\n  htmlBuilder: htmlBuilder$2,\n  mathmlBuilder: mathmlBuilder$1\n}); // No limits, symbols\n\ndefineFunction({\n  type: \"op\",\n  names: [\"\\\\int\", \"\\\\iint\", \"\\\\iiint\", \"\\\\oint\", \"\\\\oiint\", \"\\\\oiiint\", \"\\u222b\", \"\\u222c\", \"\\u222d\", \"\\u222e\", \"\\u222f\", \"\\u2230\"],\n  props: {\n    numArgs: 0\n  },\n\n  handler(_ref5) {\n    var {\n      parser,\n      funcName\n    } = _ref5;\n    var fName = funcName;\n\n    if (fName.length === 1) {\n      fName = singleCharIntegrals[fName];\n    }\n\n    return {\n      type: \"op\",\n      mode: parser.mode,\n      limits: false,\n      parentIsSupSub: false,\n      symbol: true,\n      name: fName\n    };\n  },\n\n  htmlBuilder: htmlBuilder$2,\n  mathmlBuilder: mathmlBuilder$1\n});\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only\n// \"operatorname\", but also  \"supsub\" since \\operatorname* can\n// affect super/subscripting.\nvar htmlBuilder$1 = (grp, options) => {\n  // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n  var supGroup;\n  var subGroup;\n  var hasLimits = false;\n  var group;\n\n  if (grp.type === \"supsub\") {\n    // If we have limits, supsub will pass us its group to handle. Pull\n    // out the superscript and subscript and set the group to the op in\n    // its base.\n    supGroup = grp.sup;\n    subGroup = grp.sub;\n    group = assertNodeType(grp.base, \"operatorname\");\n    hasLimits = true;\n  } else {\n    group = assertNodeType(grp, \"operatorname\");\n  }\n\n  var base;\n\n  if (group.body.length > 0) {\n    var body = group.body.map(child => {\n      // $FlowFixMe: Check if the node has a string `text` property.\n      var childText = child.text;\n\n      if (typeof childText === \"string\") {\n        return {\n          type: \"textord\",\n          mode: child.mode,\n          text: childText\n        };\n      } else {\n        return child;\n      }\n    }); // Consolidate function names into symbol characters.\n\n    var expression = buildExpression$1(body, options.withFont(\"mathrm\"), true);\n\n    for (var i = 0; i < expression.length; i++) {\n      var child = expression[i];\n\n      if (child instanceof SymbolNode) {\n        // Per amsopn package,\n        // change minus to hyphen and \\ast to asterisk\n        child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n      }\n    }\n\n    base = buildCommon.makeSpan([\"mop\"], expression, options);\n  } else {\n    base = buildCommon.makeSpan([\"mop\"], [], options);\n  }\n\n  if (hasLimits) {\n    return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0);\n  } else {\n    return base;\n  }\n};\n\nvar mathmlBuilder = (group, options) => {\n  // The steps taken here are similar to the html version.\n  var expression = buildExpression(group.body, options.withFont(\"mathrm\")); // Is expression a string or has it something like a fraction?\n\n  var isAllString = true; // default\n\n  for (var i = 0; i < expression.length; i++) {\n    var node = expression[i];\n\n    if (node instanceof mathMLTree.SpaceNode) ; else if (node instanceof mathMLTree.MathNode) {\n      switch (node.type) {\n        case \"mi\":\n        case \"mn\":\n        case \"ms\":\n        case \"mspace\":\n        case \"mtext\":\n          break;\n        // Do nothing yet.\n\n        case \"mo\":\n          {\n            var child = node.children[0];\n\n            if (node.children.length === 1 && child instanceof mathMLTree.TextNode) {\n              child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n            } else {\n              isAllString = false;\n            }\n\n            break;\n          }\n\n        default:\n          isAllString = false;\n      }\n    } else {\n      isAllString = false;\n    }\n  }\n\n  if (isAllString) {\n    // Write a single TextNode instead of multiple nested tags.\n    var word = expression.map(node => node.toText()).join(\"\");\n    expression = [new mathMLTree.TextNode(word)];\n  }\n\n  var identifier = new mathMLTree.MathNode(\"mi\", expression);\n  identifier.setAttribute(\"mathvariant\", \"normal\"); // \\u2061 is the same as &ApplyFunction;\n  // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp\n\n  var operator = new mathMLTree.MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n\n  if (group.parentIsSupSub) {\n    return new mathMLTree.MathNode(\"mrow\", [identifier, operator]);\n  } else {\n    return mathMLTree.newDocumentFragment([identifier, operator]);\n  }\n}; // \\operatorname\n// amsopn.dtx: \\mathop{#1\\kern\\z@\\operator@font#3}\\newmcodes@\n\n\ndefineFunction({\n  type: \"operatorname\",\n  names: [\"\\\\operatorname@\", \"\\\\operatornamewithlimits\"],\n  props: {\n    numArgs: 1\n  },\n  handler: (_ref, args) => {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"operatorname\",\n      mode: parser.mode,\n      body: ordargument(body),\n      alwaysHandleSupSub: funcName === \"\\\\operatornamewithlimits\",\n      limits: false,\n      parentIsSupSub: false\n    };\n  },\n  htmlBuilder: htmlBuilder$1,\n  mathmlBuilder\n});\ndefineMacro(\"\\\\operatorname\", \"\\\\@ifstar\\\\operatornamewithlimits\\\\operatorname@\");\n\ndefineFunctionBuilders({\n  type: \"ordgroup\",\n\n  htmlBuilder(group, options) {\n    if (group.semisimple) {\n      return buildCommon.makeFragment(buildExpression$1(group.body, options, false));\n    }\n\n    return buildCommon.makeSpan([\"mord\"], buildExpression$1(group.body, options, true), options);\n  },\n\n  mathmlBuilder(group, options) {\n    return buildExpressionRow(group.body, options, true);\n  }\n\n});\n\ndefineFunction({\n  type: \"overline\",\n  names: [\"\\\\overline\"],\n  props: {\n    numArgs: 1\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"overline\",\n      mode: parser.mode,\n      body\n    };\n  },\n\n  htmlBuilder(group, options) {\n    // Overlines are handled in the TeXbook pg 443, Rule 9.\n    // Build the inner group in the cramped style.\n    var innerGroup = buildGroup$1(group.body, options.havingCrampedStyle()); // Create the line above the body\n\n    var line = buildCommon.makeLineSpan(\"overline-line\", options); // Generate the vlist, with the appropriate kerns\n\n    var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n    var vlist = buildCommon.makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: innerGroup\n      }, {\n        type: \"kern\",\n        size: 3 * defaultRuleThickness\n      }, {\n        type: \"elem\",\n        elem: line\n      }, {\n        type: \"kern\",\n        size: defaultRuleThickness\n      }]\n    }, options);\n    return buildCommon.makeSpan([\"mord\", \"overline\"], [vlist], options);\n  },\n\n  mathmlBuilder(group, options) {\n    var operator = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(\"\\u203e\")]);\n    operator.setAttribute(\"stretchy\", \"true\");\n    var node = new mathMLTree.MathNode(\"mover\", [buildGroup(group.body, options), operator]);\n    node.setAttribute(\"accent\", \"true\");\n    return node;\n  }\n\n});\n\ndefineFunction({\n  type: \"phantom\",\n  names: [\"\\\\phantom\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      parser\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"phantom\",\n      mode: parser.mode,\n      body: ordargument(body)\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var elements = buildExpression$1(group.body, options.withPhantom(), false); // \\phantom isn't supposed to affect the elements it contains.\n    // See \"color\" for more details.\n\n    return buildCommon.makeFragment(elements);\n  },\n  mathmlBuilder: (group, options) => {\n    var inner = buildExpression(group.body, options);\n    return new mathMLTree.MathNode(\"mphantom\", inner);\n  }\n});\ndefineFunction({\n  type: \"hphantom\",\n  names: [\"\\\\hphantom\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n  handler: (_ref2, args) => {\n    var {\n      parser\n    } = _ref2;\n    var body = args[0];\n    return {\n      type: \"hphantom\",\n      mode: parser.mode,\n      body\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options.withPhantom())]);\n    node.height = 0;\n    node.depth = 0;\n\n    if (node.children) {\n      for (var i = 0; i < node.children.length; i++) {\n        node.children[i].height = 0;\n        node.children[i].depth = 0;\n      }\n    } // See smash for comment re: use of makeVList\n\n\n    node = buildCommon.makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: node\n      }]\n    }, options); // For spacing, TeX treats \\smash as a math group (same spacing as ord).\n\n    return buildCommon.makeSpan([\"mord\"], [node], options);\n  },\n  mathmlBuilder: (group, options) => {\n    var inner = buildExpression(ordargument(group.body), options);\n    var phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n    var node = new mathMLTree.MathNode(\"mpadded\", [phantom]);\n    node.setAttribute(\"height\", \"0px\");\n    node.setAttribute(\"depth\", \"0px\");\n    return node;\n  }\n});\ndefineFunction({\n  type: \"vphantom\",\n  names: [\"\\\\vphantom\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n  handler: (_ref3, args) => {\n    var {\n      parser\n    } = _ref3;\n    var body = args[0];\n    return {\n      type: \"vphantom\",\n      mode: parser.mode,\n      body\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var inner = buildCommon.makeSpan([\"inner\"], [buildGroup$1(group.body, options.withPhantom())]);\n    var fix = buildCommon.makeSpan([\"fix\"], []);\n    return buildCommon.makeSpan([\"mord\", \"rlap\"], [inner, fix], options);\n  },\n  mathmlBuilder: (group, options) => {\n    var inner = buildExpression(ordargument(group.body), options);\n    var phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n    var node = new mathMLTree.MathNode(\"mpadded\", [phantom]);\n    node.setAttribute(\"width\", \"0px\");\n    return node;\n  }\n});\n\ndefineFunction({\n  type: \"raisebox\",\n  names: [\"\\\\raisebox\"],\n  props: {\n    numArgs: 2,\n    argTypes: [\"size\", \"hbox\"],\n    allowedInText: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    var amount = assertNodeType(args[0], \"size\").value;\n    var body = args[1];\n    return {\n      type: \"raisebox\",\n      mode: parser.mode,\n      dy: amount,\n      body\n    };\n  },\n\n  htmlBuilder(group, options) {\n    var body = buildGroup$1(group.body, options);\n    var dy = calculateSize(group.dy, options);\n    return buildCommon.makeVList({\n      positionType: \"shift\",\n      positionData: -dy,\n      children: [{\n        type: \"elem\",\n        elem: body\n      }]\n    }, options);\n  },\n\n  mathmlBuilder(group, options) {\n    var node = new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n    var dy = group.dy.number + group.dy.unit;\n    node.setAttribute(\"voffset\", dy);\n    return node;\n  }\n\n});\n\ndefineFunction({\n  type: \"internal\",\n  names: [\"\\\\relax\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    allowedInArgument: true\n  },\n\n  handler(_ref) {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"internal\",\n      mode: parser.mode\n    };\n  }\n\n});\n\ndefineFunction({\n  type: \"rule\",\n  names: [\"\\\\rule\"],\n  props: {\n    numArgs: 2,\n    numOptionalArgs: 1,\n    allowedInText: true,\n    allowedInMath: true,\n    argTypes: [\"size\", \"size\", \"size\"]\n  },\n\n  handler(_ref, args, optArgs) {\n    var {\n      parser\n    } = _ref;\n    var shift = optArgs[0];\n    var width = assertNodeType(args[0], \"size\");\n    var height = assertNodeType(args[1], \"size\");\n    return {\n      type: \"rule\",\n      mode: parser.mode,\n      shift: shift && assertNodeType(shift, \"size\").value,\n      width: width.value,\n      height: height.value\n    };\n  },\n\n  htmlBuilder(group, options) {\n    // Make an empty span for the rule\n    var rule = buildCommon.makeSpan([\"mord\", \"rule\"], [], options); // Calculate the shift, width, and height of the rule, and account for units\n\n    var width = calculateSize(group.width, options);\n    var height = calculateSize(group.height, options);\n    var shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size\n\n    rule.style.borderRightWidth = makeEm(width);\n    rule.style.borderTopWidth = makeEm(height);\n    rule.style.bottom = makeEm(shift); // Record the height and width\n\n    rule.width = width;\n    rule.height = height + shift;\n    rule.depth = -shift; // Font size is the number large enough that the browser will\n    // reserve at least `absHeight` space above the baseline.\n    // The 1.125 factor was empirically determined\n\n    rule.maxFontSize = height * 1.125 * options.sizeMultiplier;\n    return rule;\n  },\n\n  mathmlBuilder(group, options) {\n    var width = calculateSize(group.width, options);\n    var height = calculateSize(group.height, options);\n    var shift = group.shift ? calculateSize(group.shift, options) : 0;\n    var color = options.color && options.getColor() || \"black\";\n    var rule = new mathMLTree.MathNode(\"mspace\");\n    rule.setAttribute(\"mathbackground\", color);\n    rule.setAttribute(\"width\", makeEm(width));\n    rule.setAttribute(\"height\", makeEm(height));\n    var wrapper = new mathMLTree.MathNode(\"mpadded\", [rule]);\n\n    if (shift >= 0) {\n      wrapper.setAttribute(\"height\", makeEm(shift));\n    } else {\n      wrapper.setAttribute(\"height\", makeEm(shift));\n      wrapper.setAttribute(\"depth\", makeEm(-shift));\n    }\n\n    wrapper.setAttribute(\"voffset\", makeEm(shift));\n    return wrapper;\n  }\n\n});\n\nfunction sizingGroup(value, options, baseOptions) {\n  var inner = buildExpression$1(value, options, false);\n  var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize\n  // manually. Handle nested size changes.\n\n  for (var i = 0; i < inner.length; i++) {\n    var pos = inner[i].classes.indexOf(\"sizing\");\n\n    if (pos < 0) {\n      Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));\n    } else if (inner[i].classes[pos + 1] === \"reset-size\" + options.size) {\n      // This is a nested size change: e.g., inner[i] is the \"b\" in\n      // `\\Huge a \\small b`. Override the old size (the `reset-` class)\n      // but not the new size.\n      inner[i].classes[pos + 1] = \"reset-size\" + baseOptions.size;\n    }\n\n    inner[i].height *= multiplier;\n    inner[i].depth *= multiplier;\n  }\n\n  return buildCommon.makeFragment(inner);\n}\nvar sizeFuncs = [\"\\\\tiny\", \"\\\\sixptsize\", \"\\\\scriptsize\", \"\\\\footnotesize\", \"\\\\small\", \"\\\\normalsize\", \"\\\\large\", \"\\\\Large\", \"\\\\LARGE\", \"\\\\huge\", \"\\\\Huge\"];\nvar htmlBuilder = (group, options) => {\n  // Handle sizing operators like \\Huge. Real TeX doesn't actually allow\n  // these functions inside of math expressions, so we do some special\n  // handling.\n  var newOptions = options.havingSize(group.size);\n  return sizingGroup(group.body, newOptions, options);\n};\ndefineFunction({\n  type: \"sizing\",\n  names: sizeFuncs,\n  props: {\n    numArgs: 0,\n    allowedInText: true\n  },\n  handler: (_ref, args) => {\n    var {\n      breakOnTokenText,\n      funcName,\n      parser\n    } = _ref;\n    var body = parser.parseExpression(false, breakOnTokenText);\n    return {\n      type: \"sizing\",\n      mode: parser.mode,\n      // Figure out what size to use based on the list of functions above\n      size: sizeFuncs.indexOf(funcName) + 1,\n      body\n    };\n  },\n  htmlBuilder,\n  mathmlBuilder: (group, options) => {\n    var newOptions = options.havingSize(group.size);\n    var inner = buildExpression(group.body, newOptions);\n    var node = new mathMLTree.MathNode(\"mstyle\", inner); // TODO(emily): This doesn't produce the correct size for nested size\n    // changes, because we don't keep state of what style we're currently\n    // in, so we can't reset the size to normal before changing it.  Now\n    // that we're passing an options parameter we should be able to fix\n    // this.\n\n    node.setAttribute(\"mathsize\", makeEm(newOptions.sizeMultiplier));\n    return node;\n  }\n});\n\n// smash, with optional [tb], as in AMS\ndefineFunction({\n  type: \"smash\",\n  names: [\"\\\\smash\"],\n  props: {\n    numArgs: 1,\n    numOptionalArgs: 1,\n    allowedInText: true\n  },\n  handler: (_ref, args, optArgs) => {\n    var {\n      parser\n    } = _ref;\n    var smashHeight = false;\n    var smashDepth = false;\n    var tbArg = optArgs[0] && assertNodeType(optArgs[0], \"ordgroup\");\n\n    if (tbArg) {\n      // Optional [tb] argument is engaged.\n      // ref: amsmath: \\renewcommand{\\smash}[1][tb]{%\n      //               def\\mb@t{\\ht}\\def\\mb@b{\\dp}\\def\\mb@tb{\\ht\\z@\\z@\\dp}%\n      var letter = \"\";\n\n      for (var i = 0; i < tbArg.body.length; ++i) {\n        var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property.\n\n        letter = node.text;\n\n        if (letter === \"t\") {\n          smashHeight = true;\n        } else if (letter === \"b\") {\n          smashDepth = true;\n        } else {\n          smashHeight = false;\n          smashDepth = false;\n          break;\n        }\n      }\n    } else {\n      smashHeight = true;\n      smashDepth = true;\n    }\n\n    var body = args[0];\n    return {\n      type: \"smash\",\n      mode: parser.mode,\n      body,\n      smashHeight,\n      smashDepth\n    };\n  },\n  htmlBuilder: (group, options) => {\n    var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]);\n\n    if (!group.smashHeight && !group.smashDepth) {\n      return node;\n    }\n\n    if (group.smashHeight) {\n      node.height = 0; // In order to influence makeVList, we have to reset the children.\n\n      if (node.children) {\n        for (var i = 0; i < node.children.length; i++) {\n          node.children[i].height = 0;\n        }\n      }\n    }\n\n    if (group.smashDepth) {\n      node.depth = 0;\n\n      if (node.children) {\n        for (var _i = 0; _i < node.children.length; _i++) {\n          node.children[_i].depth = 0;\n        }\n      }\n    } // At this point, we've reset the TeX-like height and depth values.\n    // But the span still has an HTML line height.\n    // makeVList applies \"display: table-cell\", which prevents the browser\n    // from acting on that line height. So we'll call makeVList now.\n\n\n    var smashedNode = buildCommon.makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: node\n      }]\n    }, options); // For spacing, TeX treats \\hphantom as a math group (same spacing as ord).\n\n    return buildCommon.makeSpan([\"mord\"], [smashedNode], options);\n  },\n  mathmlBuilder: (group, options) => {\n    var node = new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n\n    if (group.smashHeight) {\n      node.setAttribute(\"height\", \"0px\");\n    }\n\n    if (group.smashDepth) {\n      node.setAttribute(\"depth\", \"0px\");\n    }\n\n    return node;\n  }\n});\n\ndefineFunction({\n  type: \"sqrt\",\n  names: [\"\\\\sqrt\"],\n  props: {\n    numArgs: 1,\n    numOptionalArgs: 1\n  },\n\n  handler(_ref, args, optArgs) {\n    var {\n      parser\n    } = _ref;\n    var index = optArgs[0];\n    var body = args[0];\n    return {\n      type: \"sqrt\",\n      mode: parser.mode,\n      body,\n      index\n    };\n  },\n\n  htmlBuilder(group, options) {\n    // Square roots are handled in the TeXbook pg. 443, Rule 11.\n    // First, we do the same steps as in overline to build the inner group\n    // and line\n    var inner = buildGroup$1(group.body, options.havingCrampedStyle());\n\n    if (inner.height === 0) {\n      // Render a small surd.\n      inner.height = options.fontMetrics().xHeight;\n    } // Some groups can return document fragments.  Handle those by wrapping\n    // them in a span.\n\n\n    inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \\surd delimiter\n\n    var metrics = options.fontMetrics();\n    var theta = metrics.defaultRuleThickness;\n    var phi = theta;\n\n    if (options.style.id < Style$1.TEXT.id) {\n      phi = options.fontMetrics().xHeight;\n    } // Calculate the clearance between the body and line\n\n\n    var lineClearance = theta + phi / 4;\n    var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size\n\n    var {\n      span: img,\n      ruleWidth,\n      advanceWidth\n    } = delimiter.sqrtImage(minDelimiterHeight, options);\n    var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size\n\n    if (delimDepth > inner.height + inner.depth + lineClearance) {\n      lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2;\n    } // Shift the sqrt image\n\n\n    var imgShift = img.height - inner.height - lineClearance - ruleWidth;\n    inner.style.paddingLeft = makeEm(advanceWidth); // Overlay the image and the argument.\n\n    var body = buildCommon.makeVList({\n      positionType: \"firstBaseline\",\n      children: [{\n        type: \"elem\",\n        elem: inner,\n        wrapperClasses: [\"svg-align\"]\n      }, {\n        type: \"kern\",\n        size: -(inner.height + imgShift)\n      }, {\n        type: \"elem\",\n        elem: img\n      }, {\n        type: \"kern\",\n        size: ruleWidth\n      }]\n    }, options);\n\n    if (!group.index) {\n      return buildCommon.makeSpan([\"mord\", \"sqrt\"], [body], options);\n    } else {\n      // Handle the optional root index\n      // The index is always in scriptscript style\n      var newOptions = options.havingStyle(Style$1.SCRIPTSCRIPT);\n      var rootm = buildGroup$1(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX\n      // source, in the definition of `\\r@@t`.\n\n      var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly\n\n      var rootVList = buildCommon.makeVList({\n        positionType: \"shift\",\n        positionData: -toShift,\n        children: [{\n          type: \"elem\",\n          elem: rootm\n        }]\n      }, options); // Add a class surrounding it so we can add on the appropriate\n      // kerning\n\n      var rootVListWrap = buildCommon.makeSpan([\"root\"], [rootVList]);\n      return buildCommon.makeSpan([\"mord\", \"sqrt\"], [rootVListWrap, body], options);\n    }\n  },\n\n  mathmlBuilder(group, options) {\n    var {\n      body,\n      index\n    } = group;\n    return index ? new mathMLTree.MathNode(\"mroot\", [buildGroup(body, options), buildGroup(index, options)]) : new mathMLTree.MathNode(\"msqrt\", [buildGroup(body, options)]);\n  }\n\n});\n\nvar styleMap = {\n  \"display\": Style$1.DISPLAY,\n  \"text\": Style$1.TEXT,\n  \"script\": Style$1.SCRIPT,\n  \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\ndefineFunction({\n  type: \"styling\",\n  names: [\"\\\\displaystyle\", \"\\\\textstyle\", \"\\\\scriptstyle\", \"\\\\scriptscriptstyle\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true,\n    primitive: true\n  },\n\n  handler(_ref, args) {\n    var {\n      breakOnTokenText,\n      funcName,\n      parser\n    } = _ref;\n    // parse out the implicit body\n    var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g.\n    // here and in buildHTML and de-dupe the enumeration of all the styles).\n    // $FlowFixMe: The names above exactly match the styles.\n\n    var style = funcName.slice(1, funcName.length - 5);\n    return {\n      type: \"styling\",\n      mode: parser.mode,\n      // Figure out what style to use by pulling out the style from\n      // the function name\n      style,\n      body\n    };\n  },\n\n  htmlBuilder(group, options) {\n    // Style changes are handled in the TeXbook on pg. 442, Rule 3.\n    var newStyle = styleMap[group.style];\n    var newOptions = options.havingStyle(newStyle).withFont('');\n    return sizingGroup(group.body, newOptions, options);\n  },\n\n  mathmlBuilder(group, options) {\n    // Figure out what style we're changing to.\n    var newStyle = styleMap[group.style];\n    var newOptions = options.havingStyle(newStyle);\n    var inner = buildExpression(group.body, newOptions);\n    var node = new mathMLTree.MathNode(\"mstyle\", inner);\n    var styleAttributes = {\n      \"display\": [\"0\", \"true\"],\n      \"text\": [\"0\", \"false\"],\n      \"script\": [\"1\", \"false\"],\n      \"scriptscript\": [\"2\", \"false\"]\n    };\n    var attr = styleAttributes[group.style];\n    node.setAttribute(\"scriptlevel\", attr[0]);\n    node.setAttribute(\"displaystyle\", attr[1]);\n    return node;\n  }\n\n});\n\n/**\n * Sometimes, groups perform special rules when they have superscripts or\n * subscripts attached to them. This function lets the `supsub` group know that\n * Sometimes, groups perform special rules when they have superscripts or\n * its inner element should handle the superscripts and subscripts instead of\n * handling them itself.\n */\nvar htmlBuilderDelegate = function htmlBuilderDelegate(group, options) {\n  var base = group.base;\n\n  if (!base) {\n    return null;\n  } else if (base.type === \"op\") {\n    // Operators handle supsubs differently when they have limits\n    // (e.g. `\\displaystyle\\sum_2^3`)\n    var delegate = base.limits && (options.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub);\n    return delegate ? htmlBuilder$2 : null;\n  } else if (base.type === \"operatorname\") {\n    var _delegate = base.alwaysHandleSupSub && (options.style.size === Style$1.DISPLAY.size || base.limits);\n\n    return _delegate ? htmlBuilder$1 : null;\n  } else if (base.type === \"accent\") {\n    return utils.isCharacterBox(base.base) ? htmlBuilder$a : null;\n  } else if (base.type === \"horizBrace\") {\n    var isSup = !group.sub;\n    return isSup === base.isOver ? htmlBuilder$3 : null;\n  } else {\n    return null;\n  }\n}; // Super scripts and subscripts, whose precise placement can depend on other\n// functions that precede them.\n\n\ndefineFunctionBuilders({\n  type: \"supsub\",\n\n  htmlBuilder(group, options) {\n    // Superscript and subscripts are handled in the TeXbook on page\n    // 445-446, rules 18(a-f).\n    // Here is where we defer to the inner group if it should handle\n    // superscripts and subscripts itself.\n    var builderDelegate = htmlBuilderDelegate(group, options);\n\n    if (builderDelegate) {\n      return builderDelegate(group, options);\n    }\n\n    var {\n      base: valueBase,\n      sup: valueSup,\n      sub: valueSub\n    } = group;\n    var base = buildGroup$1(valueBase, options);\n    var supm;\n    var subm;\n    var metrics = options.fontMetrics(); // Rule 18a\n\n    var supShift = 0;\n    var subShift = 0;\n    var isCharacterBox = valueBase && utils.isCharacterBox(valueBase);\n\n    if (valueSup) {\n      var newOptions = options.havingStyle(options.style.sup());\n      supm = buildGroup$1(valueSup, newOptions, options);\n\n      if (!isCharacterBox) {\n        supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier;\n      }\n    }\n\n    if (valueSub) {\n      var _newOptions = options.havingStyle(options.style.sub());\n\n      subm = buildGroup$1(valueSub, _newOptions, options);\n\n      if (!isCharacterBox) {\n        subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier;\n      }\n    } // Rule 18c\n\n\n    var minSupShift;\n\n    if (options.style === Style$1.DISPLAY) {\n      minSupShift = metrics.sup1;\n    } else if (options.style.cramped) {\n      minSupShift = metrics.sup3;\n    } else {\n      minSupShift = metrics.sup2;\n    } // scriptspace is a font-size-independent size, so scale it\n    // appropriately for use as the marginRight.\n\n\n    var multiplier = options.sizeMultiplier;\n    var marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier);\n    var marginLeft = null;\n\n    if (subm) {\n      // Subscripts shouldn't be shifted by the base's italic correction.\n      // Account for that by shifting the subscript back the appropriate\n      // amount. Note we only do this when the base is a single symbol.\n      var isOiint = group.base && group.base.type === \"op\" && group.base.name && (group.base.name === \"\\\\oiint\" || group.base.name === \"\\\\oiiint\");\n\n      if (base instanceof SymbolNode || isOiint) {\n        // $FlowFixMe\n        marginLeft = makeEm(-base.italic);\n      }\n    }\n\n    var supsub;\n\n    if (supm && subm) {\n      supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n      subShift = Math.max(subShift, metrics.sub2);\n      var ruleWidth = metrics.defaultRuleThickness; // Rule 18e\n\n      var maxWidth = 4 * ruleWidth;\n\n      if (supShift - supm.depth - (subm.height - subShift) < maxWidth) {\n        subShift = maxWidth - (supShift - supm.depth) + subm.height;\n        var psi = 0.8 * metrics.xHeight - (supShift - supm.depth);\n\n        if (psi > 0) {\n          supShift += psi;\n          subShift -= psi;\n        }\n      }\n\n      var vlistElem = [{\n        type: \"elem\",\n        elem: subm,\n        shift: subShift,\n        marginRight,\n        marginLeft\n      }, {\n        type: \"elem\",\n        elem: supm,\n        shift: -supShift,\n        marginRight\n      }];\n      supsub = buildCommon.makeVList({\n        positionType: \"individualShift\",\n        children: vlistElem\n      }, options);\n    } else if (subm) {\n      // Rule 18b\n      subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);\n      var _vlistElem = [{\n        type: \"elem\",\n        elem: subm,\n        marginLeft,\n        marginRight\n      }];\n      supsub = buildCommon.makeVList({\n        positionType: \"shift\",\n        positionData: subShift,\n        children: _vlistElem\n      }, options);\n    } else if (supm) {\n      // Rule 18c, d\n      supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n      supsub = buildCommon.makeVList({\n        positionType: \"shift\",\n        positionData: -supShift,\n        children: [{\n          type: \"elem\",\n          elem: supm,\n          marginRight\n        }]\n      }, options);\n    } else {\n      throw new Error(\"supsub must have either sup or sub.\");\n    } // Wrap the supsub vlist in a span.msupsub to reset text-align.\n\n\n    var mclass = getTypeOfDomTree(base, \"right\") || \"mord\";\n    return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan([\"msupsub\"], [supsub])], options);\n  },\n\n  mathmlBuilder(group, options) {\n    // Is the inner group a relevant horizontal brace?\n    var isBrace = false;\n    var isOver;\n    var isSup;\n\n    if (group.base && group.base.type === \"horizBrace\") {\n      isSup = !!group.sup;\n\n      if (isSup === group.base.isOver) {\n        isBrace = true;\n        isOver = group.base.isOver;\n      }\n    }\n\n    if (group.base && (group.base.type === \"op\" || group.base.type === \"operatorname\")) {\n      group.base.parentIsSupSub = true;\n    }\n\n    var children = [buildGroup(group.base, options)];\n\n    if (group.sub) {\n      children.push(buildGroup(group.sub, options));\n    }\n\n    if (group.sup) {\n      children.push(buildGroup(group.sup, options));\n    }\n\n    var nodeType;\n\n    if (isBrace) {\n      nodeType = isOver ? \"mover\" : \"munder\";\n    } else if (!group.sub) {\n      var base = group.base;\n\n      if (base && base.type === \"op\" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) {\n        nodeType = \"mover\";\n      } else if (base && base.type === \"operatorname\" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) {\n        nodeType = \"mover\";\n      } else {\n        nodeType = \"msup\";\n      }\n    } else if (!group.sup) {\n      var _base = group.base;\n\n      if (_base && _base.type === \"op\" && _base.limits && (options.style === Style$1.DISPLAY || _base.alwaysHandleSupSub)) {\n        nodeType = \"munder\";\n      } else if (_base && _base.type === \"operatorname\" && _base.alwaysHandleSupSub && (_base.limits || options.style === Style$1.DISPLAY)) {\n        nodeType = \"munder\";\n      } else {\n        nodeType = \"msub\";\n      }\n    } else {\n      var _base2 = group.base;\n\n      if (_base2 && _base2.type === \"op\" && _base2.limits && options.style === Style$1.DISPLAY) {\n        nodeType = \"munderover\";\n      } else if (_base2 && _base2.type === \"operatorname\" && _base2.alwaysHandleSupSub && (options.style === Style$1.DISPLAY || _base2.limits)) {\n        nodeType = \"munderover\";\n      } else {\n        nodeType = \"msubsup\";\n      }\n    }\n\n    return new mathMLTree.MathNode(nodeType, children);\n  }\n\n});\n\ndefineFunctionBuilders({\n  type: \"atom\",\n\n  htmlBuilder(group, options) {\n    return buildCommon.mathsym(group.text, group.mode, options, [\"m\" + group.family]);\n  },\n\n  mathmlBuilder(group, options) {\n    var node = new mathMLTree.MathNode(\"mo\", [makeText(group.text, group.mode)]);\n\n    if (group.family === \"bin\") {\n      var variant = getVariant(group, options);\n\n      if (variant === \"bold-italic\") {\n        node.setAttribute(\"mathvariant\", variant);\n      }\n    } else if (group.family === \"punct\") {\n      node.setAttribute(\"separator\", \"true\");\n    } else if (group.family === \"open\" || group.family === \"close\") {\n      // Delims built here should not stretch vertically.\n      // See delimsizing.js for stretchy delims.\n      node.setAttribute(\"stretchy\", \"false\");\n    }\n\n    return node;\n  }\n\n});\n\n// \"mathord\" and \"textord\" ParseNodes created in Parser.js from symbol Groups in\n// src/symbols.js.\nvar defaultVariant = {\n  \"mi\": \"italic\",\n  \"mn\": \"normal\",\n  \"mtext\": \"normal\"\n};\ndefineFunctionBuilders({\n  type: \"mathord\",\n\n  htmlBuilder(group, options) {\n    return buildCommon.makeOrd(group, options, \"mathord\");\n  },\n\n  mathmlBuilder(group, options) {\n    var node = new mathMLTree.MathNode(\"mi\", [makeText(group.text, group.mode, options)]);\n    var variant = getVariant(group, options) || \"italic\";\n\n    if (variant !== defaultVariant[node.type]) {\n      node.setAttribute(\"mathvariant\", variant);\n    }\n\n    return node;\n  }\n\n});\ndefineFunctionBuilders({\n  type: \"textord\",\n\n  htmlBuilder(group, options) {\n    return buildCommon.makeOrd(group, options, \"textord\");\n  },\n\n  mathmlBuilder(group, options) {\n    var text = makeText(group.text, group.mode, options);\n    var variant = getVariant(group, options) || \"normal\";\n    var node;\n\n    if (group.mode === 'text') {\n      node = new mathMLTree.MathNode(\"mtext\", [text]);\n    } else if (/[0-9]/.test(group.text)) {\n      node = new mathMLTree.MathNode(\"mn\", [text]);\n    } else if (group.text === \"\\\\prime\") {\n      node = new mathMLTree.MathNode(\"mo\", [text]);\n    } else {\n      node = new mathMLTree.MathNode(\"mi\", [text]);\n    }\n\n    if (variant !== defaultVariant[node.type]) {\n      node.setAttribute(\"mathvariant\", variant);\n    }\n\n    return node;\n  }\n\n});\n\nvar cssSpace = {\n  \"\\\\nobreak\": \"nobreak\",\n  \"\\\\allowbreak\": \"allowbreak\"\n}; // A lookup table to determine whether a spacing function/symbol should be\n// treated like a regular space character.  If a symbol or command is a key\n// in this table, then it should be a regular space character.  Furthermore,\n// the associated value may have a `className` specifying an extra CSS class\n// to add to the created `span`.\n\nvar regularSpace = {\n  \" \": {},\n  \"\\\\ \": {},\n  \"~\": {\n    className: \"nobreak\"\n  },\n  \"\\\\space\": {},\n  \"\\\\nobreakspace\": {\n    className: \"nobreak\"\n  }\n}; // ParseNode<\"spacing\"> created in Parser.js from the \"spacing\" symbol Groups in\n// src/symbols.js.\n\ndefineFunctionBuilders({\n  type: \"spacing\",\n\n  htmlBuilder(group, options) {\n    if (regularSpace.hasOwnProperty(group.text)) {\n      var className = regularSpace[group.text].className || \"\"; // Spaces are generated by adding an actual space. Each of these\n      // things has an entry in the symbols table, so these will be turned\n      // into appropriate outputs.\n\n      if (group.mode === \"text\") {\n        var ord = buildCommon.makeOrd(group, options, \"textord\");\n        ord.classes.push(className);\n        return ord;\n      } else {\n        return buildCommon.makeSpan([\"mspace\", className], [buildCommon.mathsym(group.text, group.mode, options)], options);\n      }\n    } else if (cssSpace.hasOwnProperty(group.text)) {\n      // Spaces based on just a CSS class.\n      return buildCommon.makeSpan([\"mspace\", cssSpace[group.text]], [], options);\n    } else {\n      throw new ParseError(\"Unknown type of space \\\"\" + group.text + \"\\\"\");\n    }\n  },\n\n  mathmlBuilder(group, options) {\n    var node;\n\n    if (regularSpace.hasOwnProperty(group.text)) {\n      node = new mathMLTree.MathNode(\"mtext\", [new mathMLTree.TextNode(\"\\u00a0\")]);\n    } else if (cssSpace.hasOwnProperty(group.text)) {\n      // CSS-based MathML spaces (\\nobreak, \\allowbreak) are ignored\n      return new mathMLTree.MathNode(\"mspace\");\n    } else {\n      throw new ParseError(\"Unknown type of space \\\"\" + group.text + \"\\\"\");\n    }\n\n    return node;\n  }\n\n});\n\nvar pad = () => {\n  var padNode = new mathMLTree.MathNode(\"mtd\", []);\n  padNode.setAttribute(\"width\", \"50%\");\n  return padNode;\n};\n\ndefineFunctionBuilders({\n  type: \"tag\",\n\n  mathmlBuilder(group, options) {\n    var table = new mathMLTree.MathNode(\"mtable\", [new mathMLTree.MathNode(\"mtr\", [pad(), new mathMLTree.MathNode(\"mtd\", [buildExpressionRow(group.body, options)]), pad(), new mathMLTree.MathNode(\"mtd\", [buildExpressionRow(group.tag, options)])])]);\n    table.setAttribute(\"width\", \"100%\");\n    return table; // TODO: Left-aligned tags.\n    // Currently, the group and options passed here do not contain\n    // enough info to set tag alignment. `leqno` is in Settings but it is\n    // not passed to Options. On the HTML side, leqno is\n    // set by a CSS class applied in buildTree.js. That would have worked\n    // in MathML if browsers supported <mlabeledtr>. Since they don't, we\n    // need to rewrite the way this function is called.\n  }\n\n});\n\nvar textFontFamilies = {\n  \"\\\\text\": undefined,\n  \"\\\\textrm\": \"textrm\",\n  \"\\\\textsf\": \"textsf\",\n  \"\\\\texttt\": \"texttt\",\n  \"\\\\textnormal\": \"textrm\"\n};\nvar textFontWeights = {\n  \"\\\\textbf\": \"textbf\",\n  \"\\\\textmd\": \"textmd\"\n};\nvar textFontShapes = {\n  \"\\\\textit\": \"textit\",\n  \"\\\\textup\": \"textup\"\n};\n\nvar optionsWithFont = (group, options) => {\n  var font = group.font; // Checks if the argument is a font family or a font style.\n\n  if (!font) {\n    return options;\n  } else if (textFontFamilies[font]) {\n    return options.withTextFontFamily(textFontFamilies[font]);\n  } else if (textFontWeights[font]) {\n    return options.withTextFontWeight(textFontWeights[font]);\n  } else if (font === \"\\\\emph\") {\n    return options.fontShape === \"textit\" ? options.withTextFontShape(\"textup\") : options.withTextFontShape(\"textit\");\n  }\n\n  return options.withTextFontShape(textFontShapes[font]);\n};\n\ndefineFunction({\n  type: \"text\",\n  names: [// Font families\n  \"\\\\text\", \"\\\\textrm\", \"\\\\textsf\", \"\\\\texttt\", \"\\\\textnormal\", // Font weights\n  \"\\\\textbf\", \"\\\\textmd\", // Font Shapes\n  \"\\\\textit\", \"\\\\textup\", \"\\\\emph\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"text\"],\n    allowedInArgument: true,\n    allowedInText: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser,\n      funcName\n    } = _ref;\n    var body = args[0];\n    return {\n      type: \"text\",\n      mode: parser.mode,\n      body: ordargument(body),\n      font: funcName\n    };\n  },\n\n  htmlBuilder(group, options) {\n    var newOptions = optionsWithFont(group, options);\n    var inner = buildExpression$1(group.body, newOptions, true);\n    return buildCommon.makeSpan([\"mord\", \"text\"], inner, newOptions);\n  },\n\n  mathmlBuilder(group, options) {\n    var newOptions = optionsWithFont(group, options);\n    return buildExpressionRow(group.body, newOptions);\n  }\n\n});\n\ndefineFunction({\n  type: \"underline\",\n  names: [\"\\\\underline\"],\n  props: {\n    numArgs: 1,\n    allowedInText: true\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"underline\",\n      mode: parser.mode,\n      body: args[0]\n    };\n  },\n\n  htmlBuilder(group, options) {\n    // Underlines are handled in the TeXbook pg 443, Rule 10.\n    // Build the inner group.\n    var innerGroup = buildGroup$1(group.body, options); // Create the line to go below the body\n\n    var line = buildCommon.makeLineSpan(\"underline-line\", options); // Generate the vlist, with the appropriate kerns\n\n    var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n    var vlist = buildCommon.makeVList({\n      positionType: \"top\",\n      positionData: innerGroup.height,\n      children: [{\n        type: \"kern\",\n        size: defaultRuleThickness\n      }, {\n        type: \"elem\",\n        elem: line\n      }, {\n        type: \"kern\",\n        size: 3 * defaultRuleThickness\n      }, {\n        type: \"elem\",\n        elem: innerGroup\n      }]\n    }, options);\n    return buildCommon.makeSpan([\"mord\", \"underline\"], [vlist], options);\n  },\n\n  mathmlBuilder(group, options) {\n    var operator = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(\"\\u203e\")]);\n    operator.setAttribute(\"stretchy\", \"true\");\n    var node = new mathMLTree.MathNode(\"munder\", [buildGroup(group.body, options), operator]);\n    node.setAttribute(\"accentunder\", \"true\");\n    return node;\n  }\n\n});\n\ndefineFunction({\n  type: \"vcenter\",\n  names: [\"\\\\vcenter\"],\n  props: {\n    numArgs: 1,\n    argTypes: [\"original\"],\n    // In LaTeX, \\vcenter can act only on a box.\n    allowedInText: false\n  },\n\n  handler(_ref, args) {\n    var {\n      parser\n    } = _ref;\n    return {\n      type: \"vcenter\",\n      mode: parser.mode,\n      body: args[0]\n    };\n  },\n\n  htmlBuilder(group, options) {\n    var body = buildGroup$1(group.body, options);\n    var axisHeight = options.fontMetrics().axisHeight;\n    var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight));\n    return buildCommon.makeVList({\n      positionType: \"shift\",\n      positionData: dy,\n      children: [{\n        type: \"elem\",\n        elem: body\n      }]\n    }, options);\n  },\n\n  mathmlBuilder(group, options) {\n    // There is no way to do this in MathML.\n    // Write a class as a breadcrumb in case some post-processor wants\n    // to perform a vcenter adjustment.\n    return new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)], [\"vcenter\"]);\n  }\n\n});\n\ndefineFunction({\n  type: \"verb\",\n  names: [\"\\\\verb\"],\n  props: {\n    numArgs: 0,\n    allowedInText: true\n  },\n\n  handler(context, args, optArgs) {\n    // \\verb and \\verb* are dealt with directly in Parser.js.\n    // If we end up here, it's because of a failure to match the two delimiters\n    // in the regex in Lexer.js.  LaTeX raises the following error when \\verb is\n    // terminated by end of line (or file).\n    throw new ParseError(\"\\\\verb ended by end of line instead of matching delimiter\");\n  },\n\n  htmlBuilder(group, options) {\n    var text = makeVerb(group);\n    var body = []; // \\verb enters text mode and therefore is sized like \\textstyle\n\n    var newOptions = options.havingStyle(options.style.text());\n\n    for (var i = 0; i < text.length; i++) {\n      var c = text[i];\n\n      if (c === '~') {\n        c = '\\\\textasciitilde';\n      }\n\n      body.push(buildCommon.makeSymbol(c, \"Typewriter-Regular\", group.mode, newOptions, [\"mord\", \"texttt\"]));\n    }\n\n    return buildCommon.makeSpan([\"mord\", \"text\"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions);\n  },\n\n  mathmlBuilder(group, options) {\n    var text = new mathMLTree.TextNode(makeVerb(group));\n    var node = new mathMLTree.MathNode(\"mtext\", [text]);\n    node.setAttribute(\"mathvariant\", \"monospace\");\n    return node;\n  }\n\n});\n/**\n * Converts verb group into body string.\n *\n * \\verb* replaces each space with an open box \\u2423\n * \\verb replaces each space with a no-break space \\xA0\n */\n\nvar makeVerb = group => group.body.replace(/ /g, group.star ? '\\u2423' : '\\xA0');\n\n/** Include this to ensure that all functions are defined. */\nvar functions = _functions;\n\n/**\n * The Lexer class handles tokenizing the input in various ways. Since our\n * parser expects us to be able to backtrack, the lexer allows lexing from any\n * given starting point.\n *\n * Its main exposed function is the `lex` function, which takes a position to\n * lex from and a type of token to lex. It defers to the appropriate `_innerLex`\n * function.\n *\n * The various `_innerLex` functions perform the actual lexing of different\n * kinds.\n */\n\n/* The following tokenRegex\n * - matches typical whitespace (but not NBSP etc.) using its first group\n * - does not match any control character \\x00-\\x1f except whitespace\n * - does not match a bare backslash\n * - matches any ASCII character except those just mentioned\n * - does not match the BMP private use area \\uE000-\\uF8FF\n * - does not match bare surrogate code units\n * - matches any BMP character except for those just described\n * - matches any valid Unicode surrogate pair\n * - matches a backslash followed by one or more whitespace characters\n * - matches a backslash followed by one or more letters then whitespace\n * - matches a backslash followed by any BMP character\n * Capturing groups:\n *   [1] regular whitespace\n *   [2] backslash followed by whitespace\n *   [3] anything else, which may include:\n *     [4] left character of \\verb*\n *     [5] left character of \\verb\n *     [6] backslash followed by word, excluding any trailing whitespace\n * Just because the Lexer matches something doesn't mean it's valid input:\n * If there is no matching function or symbol definition, the Parser will\n * still reject the input.\n */\nvar spaceRegexString = \"[ \\r\\n\\t]\";\nvar controlWordRegexString = \"\\\\\\\\[a-zA-Z@]+\";\nvar controlSymbolRegexString = \"\\\\\\\\[^\\uD800-\\uDFFF]\";\nvar controlWordWhitespaceRegexString = \"(\" + controlWordRegexString + \")\" + spaceRegexString + \"*\";\nvar controlSpaceRegexString = \"\\\\\\\\(\\n|[ \\r\\t]+\\n?)[ \\r\\t]*\";\nvar combiningDiacriticalMarkString = \"[\\u0300-\\u036f]\";\nvar combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + \"+$\");\nvar tokenRegexString = \"(\" + spaceRegexString + \"+)|\" + ( // whitespace\ncontrolSpaceRegexString + \"|\") + // \\whitespace\n\"([!-\\\\[\\\\]-\\u2027\\u202A-\\uD7FF\\uF900-\\uFFFF]\" + ( // single codepoint\ncombiningDiacriticalMarkString + \"*\") + // ...plus accents\n\"|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]\" + ( // surrogate pair\ncombiningDiacriticalMarkString + \"*\") + // ...plus accents\n\"|\\\\\\\\verb\\\\*([^]).*?\\\\4\" + // \\verb*\n\"|\\\\\\\\verb([^*a-zA-Z]).*?\\\\5\" + ( // \\verb unstarred\n\"|\" + controlWordWhitespaceRegexString) + ( // \\macroName + spaces\n\"|\" + controlSymbolRegexString + \")\"); // \\\\, \\', etc.\n\n/** Main Lexer class */\n\nclass Lexer {\n  // Category codes. The lexer only supports comment characters (14) for now.\n  // MacroExpander additionally distinguishes active (13).\n  constructor(input, settings) {\n    this.input = void 0;\n    this.settings = void 0;\n    this.tokenRegex = void 0;\n    this.catcodes = void 0;\n    // Separate accents from characters\n    this.input = input;\n    this.settings = settings;\n    this.tokenRegex = new RegExp(tokenRegexString, 'g');\n    this.catcodes = {\n      \"%\": 14,\n      // comment character\n      \"~\": 13 // active character\n\n    };\n  }\n\n  setCatcode(char, code) {\n    this.catcodes[char] = code;\n  }\n  /**\n   * This function lexes a single token.\n   */\n\n\n  lex() {\n    var input = this.input;\n    var pos = this.tokenRegex.lastIndex;\n\n    if (pos === input.length) {\n      return new Token(\"EOF\", new SourceLocation(this, pos, pos));\n    }\n\n    var match = this.tokenRegex.exec(input);\n\n    if (match === null || match.index !== pos) {\n      throw new ParseError(\"Unexpected character: '\" + input[pos] + \"'\", new Token(input[pos], new SourceLocation(this, pos, pos + 1)));\n    }\n\n    var text = match[6] || match[3] || (match[2] ? \"\\\\ \" : \" \");\n\n    if (this.catcodes[text] === 14) {\n      // comment character\n      var nlIndex = input.indexOf('\\n', this.tokenRegex.lastIndex);\n\n      if (nlIndex === -1) {\n        this.tokenRegex.lastIndex = input.length; // EOF\n\n        this.settings.reportNonstrict(\"commentAtEnd\", \"% comment has no terminating newline; LaTeX would \" + \"fail because of commenting the end of math mode (e.g. $)\");\n      } else {\n        this.tokenRegex.lastIndex = nlIndex + 1;\n      }\n\n      return this.lex();\n    }\n\n    return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex));\n  }\n\n}\n\n/**\n * A `Namespace` refers to a space of nameable things like macros or lengths,\n * which can be `set` either globally or local to a nested group, using an\n * undo stack similar to how TeX implements this functionality.\n * Performance-wise, `get` and local `set` take constant time, while global\n * `set` takes time proportional to the depth of group nesting.\n */\nclass Namespace {\n  /**\n   * Both arguments are optional.  The first argument is an object of\n   * built-in mappings which never change.  The second argument is an object\n   * of initial (global-level) mappings, which will constantly change\n   * according to any global/top-level `set`s done.\n   */\n  constructor(builtins, globalMacros) {\n    if (builtins === void 0) {\n      builtins = {};\n    }\n\n    if (globalMacros === void 0) {\n      globalMacros = {};\n    }\n\n    this.current = void 0;\n    this.builtins = void 0;\n    this.undefStack = void 0;\n    this.current = globalMacros;\n    this.builtins = builtins;\n    this.undefStack = [];\n  }\n  /**\n   * Start a new nested group, affecting future local `set`s.\n   */\n\n\n  beginGroup() {\n    this.undefStack.push({});\n  }\n  /**\n   * End current nested group, restoring values before the group began.\n   */\n\n\n  endGroup() {\n    if (this.undefStack.length === 0) {\n      throw new ParseError(\"Unbalanced namespace destruction: attempt \" + \"to pop global namespace; please report this as a bug\");\n    }\n\n    var undefs = this.undefStack.pop();\n\n    for (var undef in undefs) {\n      if (undefs.hasOwnProperty(undef)) {\n        if (undefs[undef] == null) {\n          delete this.current[undef];\n        } else {\n          this.current[undef] = undefs[undef];\n        }\n      }\n    }\n  }\n  /**\n   * Ends all currently nested groups (if any), restoring values before the\n   * groups began.  Useful in case of an error in the middle of parsing.\n   */\n\n\n  endGroups() {\n    while (this.undefStack.length > 0) {\n      this.endGroup();\n    }\n  }\n  /**\n   * Detect whether `name` has a definition.  Equivalent to\n   * `get(name) != null`.\n   */\n\n\n  has(name) {\n    return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name);\n  }\n  /**\n   * Get the current value of a name, or `undefined` if there is no value.\n   *\n   * Note: Do not use `if (namespace.get(...))` to detect whether a macro\n   * is defined, as the definition may be the empty string which evaluates\n   * to `false` in JavaScript.  Use `if (namespace.get(...) != null)` or\n   * `if (namespace.has(...))`.\n   */\n\n\n  get(name) {\n    if (this.current.hasOwnProperty(name)) {\n      return this.current[name];\n    } else {\n      return this.builtins[name];\n    }\n  }\n  /**\n   * Set the current value of a name, and optionally set it globally too.\n   * Local set() sets the current value and (when appropriate) adds an undo\n   * operation to the undo stack.  Global set() may change the undo\n   * operation at every level, so takes time linear in their number.\n   * A value of undefined means to delete existing definitions.\n   */\n\n\n  set(name, value, global) {\n    if (global === void 0) {\n      global = false;\n    }\n\n    if (global) {\n      // Global set is equivalent to setting in all groups.  Simulate this\n      // by destroying any undos currently scheduled for this name,\n      // and adding an undo with the *new* value (in case it later gets\n      // locally reset within this environment).\n      for (var i = 0; i < this.undefStack.length; i++) {\n        delete this.undefStack[i][name];\n      }\n\n      if (this.undefStack.length > 0) {\n        this.undefStack[this.undefStack.length - 1][name] = value;\n      }\n    } else {\n      // Undo this set at end of this group (possibly to `undefined`),\n      // unless an undo is already in place, in which case that older\n      // value is the correct one.\n      var top = this.undefStack[this.undefStack.length - 1];\n\n      if (top && !top.hasOwnProperty(name)) {\n        top[name] = this.current[name];\n      }\n    }\n\n    if (value == null) {\n      delete this.current[name];\n    } else {\n      this.current[name] = value;\n    }\n  }\n\n}\n\n/**\n * Predefined macros for KaTeX.\n * This can be used to define some commands in terms of others.\n */\nvar macros = _macros;\n// macro tools\n\ndefineMacro(\"\\\\noexpand\", function (context) {\n  // The expansion is the token itself; but that token is interpreted\n  // as if its meaning were ‘\\relax’ if it is a control sequence that\n  // would ordinarily be expanded by TeX’s expansion rules.\n  var t = context.popToken();\n\n  if (context.isExpandable(t.text)) {\n    t.noexpand = true;\n    t.treatAsRelax = true;\n  }\n\n  return {\n    tokens: [t],\n    numArgs: 0\n  };\n});\ndefineMacro(\"\\\\expandafter\", function (context) {\n  // TeX first reads the token that comes immediately after \\expandafter,\n  // without expanding it; let’s call this token t. Then TeX reads the\n  // token that comes after t (and possibly more tokens, if that token\n  // has an argument), replacing it by its expansion. Finally TeX puts\n  // t back in front of that expansion.\n  var t = context.popToken();\n  context.expandOnce(true); // expand only an expandable token\n\n  return {\n    tokens: [t],\n    numArgs: 0\n  };\n}); // LaTeX's \\@firstoftwo{#1}{#2} expands to #1, skipping #2\n// TeX source: \\long\\def\\@firstoftwo#1#2{#1}\n\ndefineMacro(\"\\\\@firstoftwo\", function (context) {\n  var args = context.consumeArgs(2);\n  return {\n    tokens: args[0],\n    numArgs: 0\n  };\n}); // LaTeX's \\@secondoftwo{#1}{#2} expands to #2, skipping #1\n// TeX source: \\long\\def\\@secondoftwo#1#2{#2}\n\ndefineMacro(\"\\\\@secondoftwo\", function (context) {\n  var args = context.consumeArgs(2);\n  return {\n    tokens: args[1],\n    numArgs: 0\n  };\n}); // LaTeX's \\@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded)\n// symbol that isn't a space, consuming any spaces but not consuming the\n// first nonspace character.  If that nonspace character matches #1, then\n// the macro expands to #2; otherwise, it expands to #3.\n\ndefineMacro(\"\\\\@ifnextchar\", function (context) {\n  var args = context.consumeArgs(3); // symbol, if, else\n\n  context.consumeSpaces();\n  var nextToken = context.future();\n\n  if (args[0].length === 1 && args[0][0].text === nextToken.text) {\n    return {\n      tokens: args[1],\n      numArgs: 0\n    };\n  } else {\n    return {\n      tokens: args[2],\n      numArgs: 0\n    };\n  }\n}); // LaTeX's \\@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol.\n// If it is `*`, then it consumes the symbol, and the macro expands to #1;\n// otherwise, the macro expands to #2 (without consuming the symbol).\n// TeX source: \\def\\@ifstar#1{\\@ifnextchar *{\\@firstoftwo{#1}}}\n\ndefineMacro(\"\\\\@ifstar\", \"\\\\@ifnextchar *{\\\\@firstoftwo{#1}}\"); // LaTeX's \\TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode\n\ndefineMacro(\"\\\\TextOrMath\", function (context) {\n  var args = context.consumeArgs(2);\n\n  if (context.mode === 'text') {\n    return {\n      tokens: args[0],\n      numArgs: 0\n    };\n  } else {\n    return {\n      tokens: args[1],\n      numArgs: 0\n    };\n  }\n}); // Lookup table for parsing numbers in base 8 through 16\n\nvar digitToNumber = {\n  \"0\": 0,\n  \"1\": 1,\n  \"2\": 2,\n  \"3\": 3,\n  \"4\": 4,\n  \"5\": 5,\n  \"6\": 6,\n  \"7\": 7,\n  \"8\": 8,\n  \"9\": 9,\n  \"a\": 10,\n  \"A\": 10,\n  \"b\": 11,\n  \"B\": 11,\n  \"c\": 12,\n  \"C\": 12,\n  \"d\": 13,\n  \"D\": 13,\n  \"e\": 14,\n  \"E\": 14,\n  \"f\": 15,\n  \"F\": 15\n}; // TeX \\char makes a literal character (catcode 12) using the following forms:\n// (see The TeXBook, p. 43)\n//   \\char123  -- decimal\n//   \\char'123 -- octal\n//   \\char\"123 -- hex\n//   \\char`x   -- character that can be written (i.e. isn't active)\n//   \\char`\\x  -- character that cannot be written (e.g. %)\n// These all refer to characters from the font, so we turn them into special\n// calls to a function \\@char dealt with in the Parser.\n\ndefineMacro(\"\\\\char\", function (context) {\n  var token = context.popToken();\n  var base;\n  var number = '';\n\n  if (token.text === \"'\") {\n    base = 8;\n    token = context.popToken();\n  } else if (token.text === '\"') {\n    base = 16;\n    token = context.popToken();\n  } else if (token.text === \"`\") {\n    token = context.popToken();\n\n    if (token.text[0] === \"\\\\\") {\n      number = token.text.charCodeAt(1);\n    } else if (token.text === \"EOF\") {\n      throw new ParseError(\"\\\\char` missing argument\");\n    } else {\n      number = token.text.charCodeAt(0);\n    }\n  } else {\n    base = 10;\n  }\n\n  if (base) {\n    // Parse a number in the given base, starting with first `token`.\n    number = digitToNumber[token.text];\n\n    if (number == null || number >= base) {\n      throw new ParseError(\"Invalid base-\" + base + \" digit \" + token.text);\n    }\n\n    var digit;\n\n    while ((digit = digitToNumber[context.future().text]) != null && digit < base) {\n      number *= base;\n      number += digit;\n      context.popToken();\n    }\n  }\n\n  return \"\\\\@char{\" + number + \"}\";\n}); // \\newcommand{\\macro}[args]{definition}\n// \\renewcommand{\\macro}[args]{definition}\n// TODO: Optional arguments: \\newcommand{\\macro}[args][default]{definition}\n\nvar newcommand = (context, existsOK, nonexistsOK, skipIfExists) => {\n  var arg = context.consumeArg().tokens;\n\n  if (arg.length !== 1) {\n    throw new ParseError(\"\\\\newcommand's first argument must be a macro name\");\n  }\n\n  var name = arg[0].text;\n  var exists = context.isDefined(name);\n\n  if (exists && !existsOK) {\n    throw new ParseError(\"\\\\newcommand{\" + name + \"} attempting to redefine \" + (name + \"; use \\\\renewcommand\"));\n  }\n\n  if (!exists && !nonexistsOK) {\n    throw new ParseError(\"\\\\renewcommand{\" + name + \"} when command \" + name + \" \" + \"does not yet exist; use \\\\newcommand\");\n  }\n\n  var numArgs = 0;\n  arg = context.consumeArg().tokens;\n\n  if (arg.length === 1 && arg[0].text === \"[\") {\n    var argText = '';\n    var token = context.expandNextToken();\n\n    while (token.text !== \"]\" && token.text !== \"EOF\") {\n      // TODO: Should properly expand arg, e.g., ignore {}s\n      argText += token.text;\n      token = context.expandNextToken();\n    }\n\n    if (!argText.match(/^\\s*[0-9]+\\s*$/)) {\n      throw new ParseError(\"Invalid number of arguments: \" + argText);\n    }\n\n    numArgs = parseInt(argText);\n    arg = context.consumeArg().tokens;\n  }\n\n  if (!(exists && skipIfExists)) {\n    // Final arg is the expansion of the macro\n    context.macros.set(name, {\n      tokens: arg,\n      numArgs\n    });\n  }\n\n  return '';\n};\n\ndefineMacro(\"\\\\newcommand\", context => newcommand(context, false, true, false));\ndefineMacro(\"\\\\renewcommand\", context => newcommand(context, true, false, false));\ndefineMacro(\"\\\\providecommand\", context => newcommand(context, true, true, true)); // terminal (console) tools\n\ndefineMacro(\"\\\\message\", context => {\n  var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n\n  console.log(arg.reverse().map(token => token.text).join(\"\"));\n  return '';\n});\ndefineMacro(\"\\\\errmessage\", context => {\n  var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n\n  console.error(arg.reverse().map(token => token.text).join(\"\"));\n  return '';\n});\ndefineMacro(\"\\\\show\", context => {\n  var tok = context.popToken();\n  var name = tok.text; // eslint-disable-next-line no-console\n\n  console.log(tok, context.macros.get(name), functions[name], symbols.math[name], symbols.text[name]);\n  return '';\n}); //////////////////////////////////////////////////////////////////////\n// Grouping\n// \\let\\bgroup={ \\let\\egroup=}\n\ndefineMacro(\"\\\\bgroup\", \"{\");\ndefineMacro(\"\\\\egroup\", \"}\"); // Symbols from latex.ltx:\n// \\def~{\\nobreakspace{}}\n// \\def\\lq{`}\n// \\def\\rq{'}\n// \\def \\aa {\\r a}\n// \\def \\AA {\\r A}\n\ndefineMacro(\"~\", \"\\\\nobreakspace\");\ndefineMacro(\"\\\\lq\", \"`\");\ndefineMacro(\"\\\\rq\", \"'\");\ndefineMacro(\"\\\\aa\", \"\\\\r a\");\ndefineMacro(\"\\\\AA\", \"\\\\r A\"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML.\n// \\DeclareTextCommandDefault{\\textcopyright}{\\textcircled{c}}\n// \\DeclareTextCommandDefault{\\textregistered}{\\textcircled{%\n//      \\check@mathfonts\\fontsize\\sf@size\\z@\\math@fontsfalse\\selectfont R}}\n// \\DeclareRobustCommand{\\copyright}{%\n//    \\ifmmode{\\nfss@text{\\textcopyright}}\\else\\textcopyright\\fi}\n\ndefineMacro(\"\\\\textcopyright\", \"\\\\html@mathml{\\\\textcircled{c}}{\\\\char`©}\");\ndefineMacro(\"\\\\copyright\", \"\\\\TextOrMath{\\\\textcopyright}{\\\\text{\\\\textcopyright}}\");\ndefineMacro(\"\\\\textregistered\", \"\\\\html@mathml{\\\\textcircled{\\\\scriptsize R}}{\\\\char`®}\"); // Characters omitted from Unicode range 1D400–1D7FF\n\ndefineMacro(\"\\u212C\", \"\\\\mathscr{B}\"); // script\n\ndefineMacro(\"\\u2130\", \"\\\\mathscr{E}\");\ndefineMacro(\"\\u2131\", \"\\\\mathscr{F}\");\ndefineMacro(\"\\u210B\", \"\\\\mathscr{H}\");\ndefineMacro(\"\\u2110\", \"\\\\mathscr{I}\");\ndefineMacro(\"\\u2112\", \"\\\\mathscr{L}\");\ndefineMacro(\"\\u2133\", \"\\\\mathscr{M}\");\ndefineMacro(\"\\u211B\", \"\\\\mathscr{R}\");\ndefineMacro(\"\\u212D\", \"\\\\mathfrak{C}\"); // Fraktur\n\ndefineMacro(\"\\u210C\", \"\\\\mathfrak{H}\");\ndefineMacro(\"\\u2128\", \"\\\\mathfrak{Z}\"); // Define \\Bbbk with a macro that works in both HTML and MathML.\n\ndefineMacro(\"\\\\Bbbk\", \"\\\\Bbb{k}\"); // Unicode middle dot\n// The KaTeX fonts do not contain U+00B7. Instead, \\cdotp displays\n// the dot at U+22C5 and gives it punct spacing.\n\ndefineMacro(\"\\u00b7\", \"\\\\cdotp\"); // \\llap and \\rlap render their contents in text mode\n\ndefineMacro(\"\\\\llap\", \"\\\\mathllap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\rlap\", \"\\\\mathrlap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\clap\", \"\\\\mathclap{\\\\textrm{#1}}\"); // \\mathstrut from the TeXbook, p 360\n\ndefineMacro(\"\\\\mathstrut\", \"\\\\vphantom{(}\"); // \\underbar from TeXbook p 353\n\ndefineMacro(\"\\\\underbar\", \"\\\\underline{\\\\text{#1}}\"); // \\not is defined by base/fontmath.ltx via\n// \\DeclareMathSymbol{\\not}{\\mathrel}{symbols}{\"36}\n// It's thus treated like a \\mathrel, but defined by a symbol that has zero\n// width but extends to the right.  We use \\rlap to get that spacing.\n// For MathML we write U+0338 here. buildMathML.js will then do the overlay.\n\ndefineMacro(\"\\\\not\", '\\\\html@mathml{\\\\mathrel{\\\\mathrlap\\\\@not}}{\\\\char\"338}'); // Negated symbols from base/fontmath.ltx:\n// \\def\\neq{\\not=} \\let\\ne=\\neq\n// \\DeclareRobustCommand\n//   \\notin{\\mathrel{\\m@th\\mathpalette\\c@ncel\\in}}\n// \\def\\c@ncel#1#2{\\m@th\\ooalign{$\\hfil#1\\mkern1mu/\\hfil$\\crcr$#1#2$}}\n\ndefineMacro(\"\\\\neq\", \"\\\\html@mathml{\\\\mathrel{\\\\not=}}{\\\\mathrel{\\\\char`≠}}\");\ndefineMacro(\"\\\\ne\", \"\\\\neq\");\ndefineMacro(\"\\u2260\", \"\\\\neq\");\ndefineMacro(\"\\\\notin\", \"\\\\html@mathml{\\\\mathrel{{\\\\in}\\\\mathllap{/\\\\mskip1mu}}}\" + \"{\\\\mathrel{\\\\char`∉}}\");\ndefineMacro(\"\\u2209\", \"\\\\notin\"); // Unicode stacked relations\n\ndefineMacro(\"\\u2258\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\kern{-1em}\\\\raisebox{0.4em}{$\\\\scriptsize\\\\frown$}}\" + \"}{\\\\mathrel{\\\\char`\\u2258}}\");\ndefineMacro(\"\\u2259\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\wedge}{=}}{\\\\mathrel{\\\\char`\\u2258}}\");\ndefineMacro(\"\\u225A\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\vee}{=}}{\\\\mathrel{\\\\char`\\u225A}}\");\ndefineMacro(\"\\u225B\", \"\\\\html@mathml{\\\\stackrel{\\\\scriptsize\\\\star}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225B}}\");\ndefineMacro(\"\\u225D\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{def}}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225D}}\");\ndefineMacro(\"\\u225E\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{m}}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225E}}\");\ndefineMacro(\"\\u225F\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny?}{=}}{\\\\mathrel{\\\\char`\\u225F}}\"); // Misc Unicode\n\ndefineMacro(\"\\u27C2\", \"\\\\perp\");\ndefineMacro(\"\\u203C\", \"\\\\mathclose{!\\\\mkern-0.8mu!}\");\ndefineMacro(\"\\u220C\", \"\\\\notni\");\ndefineMacro(\"\\u231C\", \"\\\\ulcorner\");\ndefineMacro(\"\\u231D\", \"\\\\urcorner\");\ndefineMacro(\"\\u231E\", \"\\\\llcorner\");\ndefineMacro(\"\\u231F\", \"\\\\lrcorner\");\ndefineMacro(\"\\u00A9\", \"\\\\copyright\");\ndefineMacro(\"\\u00AE\", \"\\\\textregistered\");\ndefineMacro(\"\\uFE0F\", \"\\\\textregistered\"); // The KaTeX fonts have corners at codepoints that don't match Unicode.\n// For MathML purposes, use the Unicode code point.\n\ndefineMacro(\"\\\\ulcorner\", \"\\\\html@mathml{\\\\@ulcorner}{\\\\mathop{\\\\char\\\"231c}}\");\ndefineMacro(\"\\\\urcorner\", \"\\\\html@mathml{\\\\@urcorner}{\\\\mathop{\\\\char\\\"231d}}\");\ndefineMacro(\"\\\\llcorner\", \"\\\\html@mathml{\\\\@llcorner}{\\\\mathop{\\\\char\\\"231e}}\");\ndefineMacro(\"\\\\lrcorner\", \"\\\\html@mathml{\\\\@lrcorner}{\\\\mathop{\\\\char\\\"231f}}\"); //////////////////////////////////////////////////////////////////////\n// LaTeX_2ε\n// \\vdots{\\vbox{\\baselineskip4\\p@  \\lineskiplimit\\z@\n// \\kern6\\p@\\hbox{.}\\hbox{.}\\hbox{.}}}\n// We'll call \\varvdots, which gets a glyph from symbols.js.\n// The zero-width rule gets us an equivalent to the vertical 6pt kern.\n\ndefineMacro(\"\\\\vdots\", \"{\\\\varvdots\\\\rule{0pt}{15pt}}\");\ndefineMacro(\"\\u22ee\", \"\\\\vdots\"); //////////////////////////////////////////////////////////////////////\n// amsmath.sty\n// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf\n// Italic Greek capital letters.  AMS defines these with \\DeclareMathSymbol,\n// but they are equivalent to \\mathit{\\Letter}.\n\ndefineMacro(\"\\\\varGamma\", \"\\\\mathit{\\\\Gamma}\");\ndefineMacro(\"\\\\varDelta\", \"\\\\mathit{\\\\Delta}\");\ndefineMacro(\"\\\\varTheta\", \"\\\\mathit{\\\\Theta}\");\ndefineMacro(\"\\\\varLambda\", \"\\\\mathit{\\\\Lambda}\");\ndefineMacro(\"\\\\varXi\", \"\\\\mathit{\\\\Xi}\");\ndefineMacro(\"\\\\varPi\", \"\\\\mathit{\\\\Pi}\");\ndefineMacro(\"\\\\varSigma\", \"\\\\mathit{\\\\Sigma}\");\ndefineMacro(\"\\\\varUpsilon\", \"\\\\mathit{\\\\Upsilon}\");\ndefineMacro(\"\\\\varPhi\", \"\\\\mathit{\\\\Phi}\");\ndefineMacro(\"\\\\varPsi\", \"\\\\mathit{\\\\Psi}\");\ndefineMacro(\"\\\\varOmega\", \"\\\\mathit{\\\\Omega}\"); //\\newcommand{\\substack}[1]{\\subarray{c}#1\\endsubarray}\n\ndefineMacro(\"\\\\substack\", \"\\\\begin{subarray}{c}#1\\\\end{subarray}\"); // \\renewcommand{\\colon}{\\nobreak\\mskip2mu\\mathpunct{}\\nonscript\n// \\mkern-\\thinmuskip{:}\\mskip6muplus1mu\\relax}\n\ndefineMacro(\"\\\\colon\", \"\\\\nobreak\\\\mskip2mu\\\\mathpunct{}\" + \"\\\\mathchoice{\\\\mkern-3mu}{\\\\mkern-3mu}{}{}{:}\\\\mskip6mu\\\\relax\"); // \\newcommand{\\boxed}[1]{\\fbox{\\m@th$\\displaystyle#1$}}\n\ndefineMacro(\"\\\\boxed\", \"\\\\fbox{$\\\\displaystyle{#1}$}\"); // \\def\\iff{\\DOTSB\\;\\Longleftrightarrow\\;}\n// \\def\\implies{\\DOTSB\\;\\Longrightarrow\\;}\n// \\def\\impliedby{\\DOTSB\\;\\Longleftarrow\\;}\n\ndefineMacro(\"\\\\iff\", \"\\\\DOTSB\\\\;\\\\Longleftrightarrow\\\\;\");\ndefineMacro(\"\\\\implies\", \"\\\\DOTSB\\\\;\\\\Longrightarrow\\\\;\");\ndefineMacro(\"\\\\impliedby\", \"\\\\DOTSB\\\\;\\\\Longleftarrow\\\\;\"); // \\def\\dddot#1{{\\mathop{#1}\\limits^{\\vbox to-1.4\\ex@{\\kern-\\tw@\\ex@\n//  \\hbox{\\normalfont ...}\\vss}}}}\n// We use \\overset which avoids the vertical shift of \\mathop.\n\ndefineMacro(\"\\\\dddot\", \"{\\\\overset{\\\\raisebox{-0.1ex}{\\\\normalsize ...}}{#1}}\");\ndefineMacro(\"\\\\ddddot\", \"{\\\\overset{\\\\raisebox{-0.1ex}{\\\\normalsize ....}}{#1}}\"); // AMSMath's automatic \\dots, based on \\mdots@@ macro.\n\nvar dotsByToken = {\n  ',': '\\\\dotsc',\n  '\\\\not': '\\\\dotsb',\n  // \\keybin@ checks for the following:\n  '+': '\\\\dotsb',\n  '=': '\\\\dotsb',\n  '<': '\\\\dotsb',\n  '>': '\\\\dotsb',\n  '-': '\\\\dotsb',\n  '*': '\\\\dotsb',\n  ':': '\\\\dotsb',\n  // Symbols whose definition starts with \\DOTSB:\n  '\\\\DOTSB': '\\\\dotsb',\n  '\\\\coprod': '\\\\dotsb',\n  '\\\\bigvee': '\\\\dotsb',\n  '\\\\bigwedge': '\\\\dotsb',\n  '\\\\biguplus': '\\\\dotsb',\n  '\\\\bigcap': '\\\\dotsb',\n  '\\\\bigcup': '\\\\dotsb',\n  '\\\\prod': '\\\\dotsb',\n  '\\\\sum': '\\\\dotsb',\n  '\\\\bigotimes': '\\\\dotsb',\n  '\\\\bigoplus': '\\\\dotsb',\n  '\\\\bigodot': '\\\\dotsb',\n  '\\\\bigsqcup': '\\\\dotsb',\n  '\\\\And': '\\\\dotsb',\n  '\\\\longrightarrow': '\\\\dotsb',\n  '\\\\Longrightarrow': '\\\\dotsb',\n  '\\\\longleftarrow': '\\\\dotsb',\n  '\\\\Longleftarrow': '\\\\dotsb',\n  '\\\\longleftrightarrow': '\\\\dotsb',\n  '\\\\Longleftrightarrow': '\\\\dotsb',\n  '\\\\mapsto': '\\\\dotsb',\n  '\\\\longmapsto': '\\\\dotsb',\n  '\\\\hookrightarrow': '\\\\dotsb',\n  '\\\\doteq': '\\\\dotsb',\n  // Symbols whose definition starts with \\mathbin:\n  '\\\\mathbin': '\\\\dotsb',\n  // Symbols whose definition starts with \\mathrel:\n  '\\\\mathrel': '\\\\dotsb',\n  '\\\\relbar': '\\\\dotsb',\n  '\\\\Relbar': '\\\\dotsb',\n  '\\\\xrightarrow': '\\\\dotsb',\n  '\\\\xleftarrow': '\\\\dotsb',\n  // Symbols whose definition starts with \\DOTSI:\n  '\\\\DOTSI': '\\\\dotsi',\n  '\\\\int': '\\\\dotsi',\n  '\\\\oint': '\\\\dotsi',\n  '\\\\iint': '\\\\dotsi',\n  '\\\\iiint': '\\\\dotsi',\n  '\\\\iiiint': '\\\\dotsi',\n  '\\\\idotsint': '\\\\dotsi',\n  // Symbols whose definition starts with \\DOTSX:\n  '\\\\DOTSX': '\\\\dotsx'\n};\ndefineMacro(\"\\\\dots\", function (context) {\n  // TODO: If used in text mode, should expand to \\textellipsis.\n  // However, in KaTeX, \\textellipsis and \\ldots behave the same\n  // (in text mode), and it's unlikely we'd see any of the math commands\n  // that affect the behavior of \\dots when in text mode.  So fine for now\n  // (until we support \\ifmmode ... \\else ... \\fi).\n  var thedots = '\\\\dotso';\n  var next = context.expandAfterFuture().text;\n\n  if (next in dotsByToken) {\n    thedots = dotsByToken[next];\n  } else if (next.slice(0, 4) === '\\\\not') {\n    thedots = '\\\\dotsb';\n  } else if (next in symbols.math) {\n    if (utils.contains(['bin', 'rel'], symbols.math[next].group)) {\n      thedots = '\\\\dotsb';\n    }\n  }\n\n  return thedots;\n});\nvar spaceAfterDots = {\n  // \\rightdelim@ checks for the following:\n  ')': true,\n  ']': true,\n  '\\\\rbrack': true,\n  '\\\\}': true,\n  '\\\\rbrace': true,\n  '\\\\rangle': true,\n  '\\\\rceil': true,\n  '\\\\rfloor': true,\n  '\\\\rgroup': true,\n  '\\\\rmoustache': true,\n  '\\\\right': true,\n  '\\\\bigr': true,\n  '\\\\biggr': true,\n  '\\\\Bigr': true,\n  '\\\\Biggr': true,\n  // \\extra@ also tests for the following:\n  '$': true,\n  // \\extrap@ checks for the following:\n  ';': true,\n  '.': true,\n  ',': true\n};\ndefineMacro(\"\\\\dotso\", function (context) {\n  var next = context.future().text;\n\n  if (next in spaceAfterDots) {\n    return \"\\\\ldots\\\\,\";\n  } else {\n    return \"\\\\ldots\";\n  }\n});\ndefineMacro(\"\\\\dotsc\", function (context) {\n  var next = context.future().text; // \\dotsc uses \\extra@ but not \\extrap@, instead specially checking for\n  // ';' and '.', but doesn't check for ','.\n\n  if (next in spaceAfterDots && next !== ',') {\n    return \"\\\\ldots\\\\,\";\n  } else {\n    return \"\\\\ldots\";\n  }\n});\ndefineMacro(\"\\\\cdots\", function (context) {\n  var next = context.future().text;\n\n  if (next in spaceAfterDots) {\n    return \"\\\\@cdots\\\\,\";\n  } else {\n    return \"\\\\@cdots\";\n  }\n});\ndefineMacro(\"\\\\dotsb\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsm\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsi\", \"\\\\!\\\\cdots\"); // amsmath doesn't actually define \\dotsx, but \\dots followed by a macro\n// starting with \\DOTSX implies \\dotso, and then \\extra@ detects this case\n// and forces the added `\\,`.\n\ndefineMacro(\"\\\\dotsx\", \"\\\\ldots\\\\,\"); // \\let\\DOTSI\\relax\n// \\let\\DOTSB\\relax\n// \\let\\DOTSX\\relax\n\ndefineMacro(\"\\\\DOTSI\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSB\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSX\", \"\\\\relax\"); // Spacing, based on amsmath.sty's override of LaTeX defaults\n// \\DeclareRobustCommand{\\tmspace}[3]{%\n//   \\ifmmode\\mskip#1#2\\else\\kern#1#3\\fi\\relax}\n\ndefineMacro(\"\\\\tmspace\", \"\\\\TextOrMath{\\\\kern#1#3}{\\\\mskip#1#2}\\\\relax\"); // \\renewcommand{\\,}{\\tmspace+\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\n\ndefineMacro(\"\\\\,\", \"\\\\tmspace+{3mu}{.1667em}\"); // \\let\\thinspace\\,\n\ndefineMacro(\"\\\\thinspace\", \"\\\\,\"); // \\def\\>{\\mskip\\medmuskip}\n// \\renewcommand{\\:}{\\tmspace+\\medmuskip{.2222em}}\n// TODO: \\> and math mode of \\: should use \\medmuskip = 4mu plus 2mu minus 4mu\n\ndefineMacro(\"\\\\>\", \"\\\\mskip{4mu}\");\ndefineMacro(\"\\\\:\", \"\\\\tmspace+{4mu}{.2222em}\"); // \\let\\medspace\\:\n\ndefineMacro(\"\\\\medspace\", \"\\\\:\"); // \\renewcommand{\\;}{\\tmspace+\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip = 5mu plus 5mu\n\ndefineMacro(\"\\\\;\", \"\\\\tmspace+{5mu}{.2777em}\"); // \\let\\thickspace\\;\n\ndefineMacro(\"\\\\thickspace\", \"\\\\;\"); // \\renewcommand{\\!}{\\tmspace-\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\n\ndefineMacro(\"\\\\!\", \"\\\\tmspace-{3mu}{.1667em}\"); // \\let\\negthinspace\\!\n\ndefineMacro(\"\\\\negthinspace\", \"\\\\!\"); // \\newcommand{\\negmedspace}{\\tmspace-\\medmuskip{.2222em}}\n// TODO: math mode should use \\medmuskip\n\ndefineMacro(\"\\\\negmedspace\", \"\\\\tmspace-{4mu}{.2222em}\"); // \\newcommand{\\negthickspace}{\\tmspace-\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip\n\ndefineMacro(\"\\\\negthickspace\", \"\\\\tmspace-{5mu}{.277em}\"); // \\def\\enspace{\\kern.5em }\n\ndefineMacro(\"\\\\enspace\", \"\\\\kern.5em \"); // \\def\\enskip{\\hskip.5em\\relax}\n\ndefineMacro(\"\\\\enskip\", \"\\\\hskip.5em\\\\relax\"); // \\def\\quad{\\hskip1em\\relax}\n\ndefineMacro(\"\\\\quad\", \"\\\\hskip1em\\\\relax\"); // \\def\\qquad{\\hskip2em\\relax}\n\ndefineMacro(\"\\\\qquad\", \"\\\\hskip2em\\\\relax\"); // \\tag@in@display form of \\tag\n\ndefineMacro(\"\\\\tag\", \"\\\\@ifstar\\\\tag@literal\\\\tag@paren\");\ndefineMacro(\"\\\\tag@paren\", \"\\\\tag@literal{({#1})}\");\ndefineMacro(\"\\\\tag@literal\", context => {\n  if (context.macros.get(\"\\\\df@tag\")) {\n    throw new ParseError(\"Multiple \\\\tag\");\n  }\n\n  return \"\\\\gdef\\\\df@tag{\\\\text{#1}}\";\n}); // \\renewcommand{\\bmod}{\\nonscript\\mskip-\\medmuskip\\mkern5mu\\mathbin\n//   {\\operator@font mod}\\penalty900\n//   \\mkern5mu\\nonscript\\mskip-\\medmuskip}\n// \\newcommand{\\pod}[1]{\\allowbreak\n//   \\if@display\\mkern18mu\\else\\mkern8mu\\fi(#1)}\n// \\renewcommand{\\pmod}[1]{\\pod{{\\operator@font mod}\\mkern6mu#1}}\n// \\newcommand{\\mod}[1]{\\allowbreak\\if@display\\mkern18mu\n//   \\else\\mkern12mu\\fi{\\operator@font mod}\\,\\,#1}\n// TODO: math mode should use \\medmuskip = 4mu plus 2mu minus 4mu\n\ndefineMacro(\"\\\\bmod\", \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\" + \"\\\\mathbin{\\\\rm mod}\" + \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\");\ndefineMacro(\"\\\\pod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern8mu}{\\\\mkern8mu}{\\\\mkern8mu}(#1)\");\ndefineMacro(\"\\\\pmod\", \"\\\\pod{{\\\\rm mod}\\\\mkern6mu#1}\");\ndefineMacro(\"\\\\mod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern12mu}{\\\\mkern12mu}{\\\\mkern12mu}\" + \"{\\\\rm mod}\\\\,\\\\,#1\"); //////////////////////////////////////////////////////////////////////\n// LaTeX source2e\n// \\expandafter\\let\\expandafter\\@normalcr\n//     \\csname\\expandafter\\@gobble\\string\\\\ \\endcsname\n// \\DeclareRobustCommand\\newline{\\@normalcr\\relax}\n\ndefineMacro(\"\\\\newline\", \"\\\\\\\\\\\\relax\"); // \\def\\TeX{T\\kern-.1667em\\lower.5ex\\hbox{E}\\kern-.125emX\\@}\n// TODO: Doesn't normally work in math mode because \\@ fails.  KaTeX doesn't\n// support \\@ yet, so that's omitted, and we add \\text so that the result\n// doesn't look funny in math mode.\n\ndefineMacro(\"\\\\TeX\", \"\\\\textrm{\\\\html@mathml{\" + \"T\\\\kern-.1667em\\\\raisebox{-.5ex}{E}\\\\kern-.125emX\" + \"}{TeX}}\"); // \\DeclareRobustCommand{\\LaTeX}{L\\kern-.36em%\n//         {\\sbox\\z@ T%\n//          \\vbox to\\ht\\z@{\\hbox{\\check@mathfonts\n//                               \\fontsize\\sf@size\\z@\n//                               \\math@fontsfalse\\selectfont\n//                               A}%\n//                         \\vss}%\n//         }%\n//         \\kern-.15em%\n//         \\TeX}\n// This code aligns the top of the A with the T (from the perspective of TeX's\n// boxes, though visually the A appears to extend above slightly).\n// We compute the corresponding \\raisebox when A is rendered in \\normalsize\n// \\scriptstyle, which has a scale factor of 0.7 (see Options.js).\n\nvar latexRaiseA = makeEm(fontMetricsData['Main-Regular'][\"T\".charCodeAt(0)][1] - 0.7 * fontMetricsData['Main-Regular'][\"A\".charCodeAt(0)][1]);\ndefineMacro(\"\\\\LaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"L\\\\kern-.36em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{LaTeX}}\"); // New KaTeX logo based on tweaking LaTeX logo\n\ndefineMacro(\"\\\\KaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"K\\\\kern-.17em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{KaTeX}}\"); // \\DeclareRobustCommand\\hspace{\\@ifstar\\@hspacer\\@hspace}\n// \\def\\@hspace#1{\\hskip  #1\\relax}\n// \\def\\@hspacer#1{\\vrule \\@width\\z@\\nobreak\n//                 \\hskip #1\\hskip \\z@skip}\n\ndefineMacro(\"\\\\hspace\", \"\\\\@ifstar\\\\@hspacer\\\\@hspace\");\ndefineMacro(\"\\\\@hspace\", \"\\\\hskip #1\\\\relax\");\ndefineMacro(\"\\\\@hspacer\", \"\\\\rule{0pt}{0pt}\\\\hskip #1\\\\relax\"); //////////////////////////////////////////////////////////////////////\n// mathtools.sty\n//\\providecommand\\ordinarycolon{:}\n\ndefineMacro(\"\\\\ordinarycolon\", \":\"); //\\def\\vcentcolon{\\mathrel{\\mathop\\ordinarycolon}}\n//TODO(edemaine): Not yet centered. Fix via \\raisebox or #726\n\ndefineMacro(\"\\\\vcentcolon\", \"\\\\mathrel{\\\\mathop\\\\ordinarycolon}\"); // \\providecommand*\\dblcolon{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}\n\ndefineMacro(\"\\\\dblcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-.9mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2237}}\"); // \\providecommand*\\coloneqq{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}\n\ndefineMacro(\"\\\\coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + \"{\\\\mathop{\\\\char\\\"2254}}\"); // ≔\n// \\providecommand*\\Coloneqq{\\dblcolon\\mathrel{\\mkern-1.2mu}=}\n\ndefineMacro(\"\\\\Coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"3d}}\"); // \\providecommand*\\coloneq{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\n\ndefineMacro(\"\\\\coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"2212}}\"); // \\providecommand*\\Coloneq{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\n\ndefineMacro(\"\\\\Coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"2212}}\"); // \\providecommand*\\eqqcolon{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}\n\ndefineMacro(\"\\\\eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2255}}\"); // ≕\n// \\providecommand*\\Eqqcolon{=\\mathrel{\\mkern-1.2mu}\\dblcolon}\n\ndefineMacro(\"\\\\Eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + \"{\\\\mathop{\\\\char\\\"3d\\\\char\\\"2237}}\"); // \\providecommand*\\eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}\n\ndefineMacro(\"\\\\eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2239}}\"); // \\providecommand*\\Eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}\n\ndefineMacro(\"\\\\Eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + \"{\\\\mathop{\\\\char\\\"2212\\\\char\\\"2237}}\"); // \\providecommand*\\colonapprox{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}\n\ndefineMacro(\"\\\\colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"2248}}\"); // \\providecommand*\\Colonapprox{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}\n\ndefineMacro(\"\\\\Colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"2248}}\"); // \\providecommand*\\colonsim{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}\n\ndefineMacro(\"\\\\colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"223c}}\"); // \\providecommand*\\Colonsim{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}\n\ndefineMacro(\"\\\\Colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"223c}}\"); // Some Unicode characters are implemented with macros to mathtools functions.\n\ndefineMacro(\"\\u2237\", \"\\\\dblcolon\"); // ::\n\ndefineMacro(\"\\u2239\", \"\\\\eqcolon\"); // -:\n\ndefineMacro(\"\\u2254\", \"\\\\coloneqq\"); // :=\n\ndefineMacro(\"\\u2255\", \"\\\\eqqcolon\"); // =:\n\ndefineMacro(\"\\u2A74\", \"\\\\Coloneqq\"); // ::=\n//////////////////////////////////////////////////////////////////////\n// colonequals.sty\n// Alternate names for mathtools's macros:\n\ndefineMacro(\"\\\\ratio\", \"\\\\vcentcolon\");\ndefineMacro(\"\\\\coloncolon\", \"\\\\dblcolon\");\ndefineMacro(\"\\\\colonequals\", \"\\\\coloneqq\");\ndefineMacro(\"\\\\coloncolonequals\", \"\\\\Coloneqq\");\ndefineMacro(\"\\\\equalscolon\", \"\\\\eqqcolon\");\ndefineMacro(\"\\\\equalscoloncolon\", \"\\\\Eqqcolon\");\ndefineMacro(\"\\\\colonminus\", \"\\\\coloneq\");\ndefineMacro(\"\\\\coloncolonminus\", \"\\\\Coloneq\");\ndefineMacro(\"\\\\minuscolon\", \"\\\\eqcolon\");\ndefineMacro(\"\\\\minuscoloncolon\", \"\\\\Eqcolon\"); // \\colonapprox name is same in mathtools and colonequals.\n\ndefineMacro(\"\\\\coloncolonapprox\", \"\\\\Colonapprox\"); // \\colonsim name is same in mathtools and colonequals.\n\ndefineMacro(\"\\\\coloncolonsim\", \"\\\\Colonsim\"); // Additional macros, implemented by analogy with mathtools definitions:\n\ndefineMacro(\"\\\\simcolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\simcoloncolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\");\ndefineMacro(\"\\\\approxcolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\approxcoloncolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\"); // Present in newtxmath, pxfonts and txfonts\n\ndefineMacro(\"\\\\notni\", \"\\\\html@mathml{\\\\not\\\\ni}{\\\\mathrel{\\\\char`\\u220C}}\");\ndefineMacro(\"\\\\limsup\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,sup}\");\ndefineMacro(\"\\\\liminf\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,inf}\"); //////////////////////////////////////////////////////////////////////\n// From amsopn.sty\n\ndefineMacro(\"\\\\injlim\", \"\\\\DOTSB\\\\operatorname*{inj\\\\,lim}\");\ndefineMacro(\"\\\\projlim\", \"\\\\DOTSB\\\\operatorname*{proj\\\\,lim}\");\ndefineMacro(\"\\\\varlimsup\", \"\\\\DOTSB\\\\operatorname*{\\\\overline{lim}}\");\ndefineMacro(\"\\\\varliminf\", \"\\\\DOTSB\\\\operatorname*{\\\\underline{lim}}\");\ndefineMacro(\"\\\\varinjlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underrightarrow{lim}}\");\ndefineMacro(\"\\\\varprojlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underleftarrow{lim}}\"); //////////////////////////////////////////////////////////////////////\n// MathML alternates for KaTeX glyphs in the Unicode private area\n\ndefineMacro(\"\\\\gvertneqq\", \"\\\\html@mathml{\\\\@gvertneqq}{\\u2269}\");\ndefineMacro(\"\\\\lvertneqq\", \"\\\\html@mathml{\\\\@lvertneqq}{\\u2268}\");\ndefineMacro(\"\\\\ngeqq\", \"\\\\html@mathml{\\\\@ngeqq}{\\u2271}\");\ndefineMacro(\"\\\\ngeqslant\", \"\\\\html@mathml{\\\\@ngeqslant}{\\u2271}\");\ndefineMacro(\"\\\\nleqq\", \"\\\\html@mathml{\\\\@nleqq}{\\u2270}\");\ndefineMacro(\"\\\\nleqslant\", \"\\\\html@mathml{\\\\@nleqslant}{\\u2270}\");\ndefineMacro(\"\\\\nshortmid\", \"\\\\html@mathml{\\\\@nshortmid}{∤}\");\ndefineMacro(\"\\\\nshortparallel\", \"\\\\html@mathml{\\\\@nshortparallel}{∦}\");\ndefineMacro(\"\\\\nsubseteqq\", \"\\\\html@mathml{\\\\@nsubseteqq}{\\u2288}\");\ndefineMacro(\"\\\\nsupseteqq\", \"\\\\html@mathml{\\\\@nsupseteqq}{\\u2289}\");\ndefineMacro(\"\\\\varsubsetneq\", \"\\\\html@mathml{\\\\@varsubsetneq}{⊊}\");\ndefineMacro(\"\\\\varsubsetneqq\", \"\\\\html@mathml{\\\\@varsubsetneqq}{⫋}\");\ndefineMacro(\"\\\\varsupsetneq\", \"\\\\html@mathml{\\\\@varsupsetneq}{⊋}\");\ndefineMacro(\"\\\\varsupsetneqq\", \"\\\\html@mathml{\\\\@varsupsetneqq}{⫌}\");\ndefineMacro(\"\\\\imath\", \"\\\\html@mathml{\\\\@imath}{\\u0131}\");\ndefineMacro(\"\\\\jmath\", \"\\\\html@mathml{\\\\@jmath}{\\u0237}\"); //////////////////////////////////////////////////////////////////////\n// stmaryrd and semantic\n// The stmaryrd and semantic packages render the next four items by calling a\n// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros.\n\ndefineMacro(\"\\\\llbracket\", \"\\\\html@mathml{\" + \"\\\\mathopen{[\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`\\u27e6}}\");\ndefineMacro(\"\\\\rrbracket\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu]}}\" + \"{\\\\mathclose{\\\\char`\\u27e7}}\");\ndefineMacro(\"\\u27e6\", \"\\\\llbracket\"); // blackboard bold [\n\ndefineMacro(\"\\u27e7\", \"\\\\rrbracket\"); // blackboard bold ]\n\ndefineMacro(\"\\\\lBrace\", \"\\\\html@mathml{\" + \"\\\\mathopen{\\\\{\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`\\u2983}}\");\ndefineMacro(\"\\\\rBrace\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu\\\\}}}\" + \"{\\\\mathclose{\\\\char`\\u2984}}\");\ndefineMacro(\"\\u2983\", \"\\\\lBrace\"); // blackboard bold {\n\ndefineMacro(\"\\u2984\", \"\\\\rBrace\"); // blackboard bold }\n// TODO: Create variable sized versions of the last two items. I believe that\n// will require new font glyphs.\n// The stmaryrd function `\\minuso` provides a \"Plimsoll\" symbol that\n// superimposes the characters \\circ and \\mathminus. Used in chemistry.\n\ndefineMacro(\"\\\\minuso\", \"\\\\mathbin{\\\\html@mathml{\" + \"{\\\\mathrlap{\\\\mathchoice{\\\\kern{0.145em}}{\\\\kern{0.145em}}\" + \"{\\\\kern{0.1015em}}{\\\\kern{0.0725em}}\\\\circ}{-}}}\" + \"{\\\\char`⦵}}\");\ndefineMacro(\"⦵\", \"\\\\minuso\"); //////////////////////////////////////////////////////////////////////\n// texvc.sty\n// The texvc package contains macros available in mediawiki pages.\n// We omit the functions deprecated at\n// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax\n// We also omit texvc's \\O, which conflicts with \\text{\\O}\n\ndefineMacro(\"\\\\darr\", \"\\\\downarrow\");\ndefineMacro(\"\\\\dArr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\Darr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\lang\", \"\\\\langle\");\ndefineMacro(\"\\\\rang\", \"\\\\rangle\");\ndefineMacro(\"\\\\uarr\", \"\\\\uparrow\");\ndefineMacro(\"\\\\uArr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\Uarr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\N\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\R\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Z\", \"\\\\mathbb{Z}\");\ndefineMacro(\"\\\\alef\", \"\\\\aleph\");\ndefineMacro(\"\\\\alefsym\", \"\\\\aleph\");\ndefineMacro(\"\\\\Alpha\", \"\\\\mathrm{A}\");\ndefineMacro(\"\\\\Beta\", \"\\\\mathrm{B}\");\ndefineMacro(\"\\\\bull\", \"\\\\bullet\");\ndefineMacro(\"\\\\Chi\", \"\\\\mathrm{X}\");\ndefineMacro(\"\\\\clubs\", \"\\\\clubsuit\");\ndefineMacro(\"\\\\cnums\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Complex\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Dagger\", \"\\\\ddagger\");\ndefineMacro(\"\\\\diamonds\", \"\\\\diamondsuit\");\ndefineMacro(\"\\\\empty\", \"\\\\emptyset\");\ndefineMacro(\"\\\\Epsilon\", \"\\\\mathrm{E}\");\ndefineMacro(\"\\\\Eta\", \"\\\\mathrm{H}\");\ndefineMacro(\"\\\\exist\", \"\\\\exists\");\ndefineMacro(\"\\\\harr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\hArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Harr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\hearts\", \"\\\\heartsuit\");\ndefineMacro(\"\\\\image\", \"\\\\Im\");\ndefineMacro(\"\\\\infin\", \"\\\\infty\");\ndefineMacro(\"\\\\Iota\", \"\\\\mathrm{I}\");\ndefineMacro(\"\\\\isin\", \"\\\\in\");\ndefineMacro(\"\\\\Kappa\", \"\\\\mathrm{K}\");\ndefineMacro(\"\\\\larr\", \"\\\\leftarrow\");\ndefineMacro(\"\\\\lArr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\Larr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\lrarr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\lrArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Lrarr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Mu\", \"\\\\mathrm{M}\");\ndefineMacro(\"\\\\natnums\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\Nu\", \"\\\\mathrm{N}\");\ndefineMacro(\"\\\\Omicron\", \"\\\\mathrm{O}\");\ndefineMacro(\"\\\\plusmn\", \"\\\\pm\");\ndefineMacro(\"\\\\rarr\", \"\\\\rightarrow\");\ndefineMacro(\"\\\\rArr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\Rarr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\real\", \"\\\\Re\");\ndefineMacro(\"\\\\reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Rho\", \"\\\\mathrm{P}\");\ndefineMacro(\"\\\\sdot\", \"\\\\cdot\");\ndefineMacro(\"\\\\sect\", \"\\\\S\");\ndefineMacro(\"\\\\spades\", \"\\\\spadesuit\");\ndefineMacro(\"\\\\sub\", \"\\\\subset\");\ndefineMacro(\"\\\\sube\", \"\\\\subseteq\");\ndefineMacro(\"\\\\supe\", \"\\\\supseteq\");\ndefineMacro(\"\\\\Tau\", \"\\\\mathrm{T}\");\ndefineMacro(\"\\\\thetasym\", \"\\\\vartheta\"); // TODO: defineMacro(\"\\\\varcoppa\", \"\\\\\\mbox{\\\\coppa}\");\n\ndefineMacro(\"\\\\weierp\", \"\\\\wp\");\ndefineMacro(\"\\\\Zeta\", \"\\\\mathrm{Z}\"); //////////////////////////////////////////////////////////////////////\n// statmath.sty\n// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf\n\ndefineMacro(\"\\\\argmin\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,min}\");\ndefineMacro(\"\\\\argmax\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,max}\");\ndefineMacro(\"\\\\plim\", \"\\\\DOTSB\\\\mathop{\\\\operatorname{plim}}\\\\limits\"); //////////////////////////////////////////////////////////////////////\n// braket.sty\n// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf\n\ndefineMacro(\"\\\\bra\", \"\\\\mathinner{\\\\langle{#1}|}\");\ndefineMacro(\"\\\\ket\", \"\\\\mathinner{|{#1}\\\\rangle}\");\ndefineMacro(\"\\\\braket\", \"\\\\mathinner{\\\\langle{#1}\\\\rangle}\");\ndefineMacro(\"\\\\Bra\", \"\\\\left\\\\langle#1\\\\right|\");\ndefineMacro(\"\\\\Ket\", \"\\\\left|#1\\\\right\\\\rangle\");\n\nvar braketHelper = one => context => {\n  var left = context.consumeArg().tokens;\n  var middle = context.consumeArg().tokens;\n  var middleDouble = context.consumeArg().tokens;\n  var right = context.consumeArg().tokens;\n  var oldMiddle = context.macros.get(\"|\");\n  var oldMiddleDouble = context.macros.get(\"\\\\|\");\n  context.macros.beginGroup();\n\n  var midMacro = double => context => {\n    if (one) {\n      // Only modify the first instance of | or \\|\n      context.macros.set(\"|\", oldMiddle);\n\n      if (middleDouble.length) {\n        context.macros.set(\"\\\\|\", oldMiddleDouble);\n      }\n    }\n\n    var doubled = double;\n\n    if (!double && middleDouble.length) {\n      // Mimic \\@ifnextchar\n      var nextToken = context.future();\n\n      if (nextToken.text === \"|\") {\n        context.popToken();\n        doubled = true;\n      }\n    }\n\n    return {\n      tokens: doubled ? middleDouble : middle,\n      numArgs: 0\n    };\n  };\n\n  context.macros.set(\"|\", midMacro(false));\n\n  if (middleDouble.length) {\n    context.macros.set(\"\\\\|\", midMacro(true));\n  }\n\n  var arg = context.consumeArg().tokens;\n  var expanded = context.expandTokens([...right, ...arg, ...left // reversed\n  ]);\n  context.macros.endGroup();\n  return {\n    tokens: expanded.reverse(),\n    numArgs: 0\n  };\n};\n\ndefineMacro(\"\\\\bra@ket\", braketHelper(false));\ndefineMacro(\"\\\\bra@set\", braketHelper(true));\ndefineMacro(\"\\\\Braket\", \"\\\\bra@ket{\\\\left\\\\langle}\" + \"{\\\\,\\\\middle\\\\vert\\\\,}{\\\\,\\\\middle\\\\vert\\\\,}{\\\\right\\\\rangle}\");\ndefineMacro(\"\\\\Set\", \"\\\\bra@set{\\\\left\\\\{\\\\:}\" + \"{\\\\;\\\\middle\\\\vert\\\\;}{\\\\;\\\\middle\\\\Vert\\\\;}{\\\\:\\\\right\\\\}}\");\ndefineMacro(\"\\\\set\", \"\\\\bra@set{\\\\{\\\\,}{\\\\mid}{}{\\\\,\\\\}}\"); // has no support for special || or \\|\n//////////////////////////////////////////////////////////////////////\n// actuarialangle.dtx\n\ndefineMacro(\"\\\\angln\", \"{\\\\angl n}\"); // Custom Khan Academy colors, should be moved to an optional package\n\ndefineMacro(\"\\\\blue\", \"\\\\textcolor{##6495ed}{#1}\");\ndefineMacro(\"\\\\orange\", \"\\\\textcolor{##ffa500}{#1}\");\ndefineMacro(\"\\\\pink\", \"\\\\textcolor{##ff00af}{#1}\");\ndefineMacro(\"\\\\red\", \"\\\\textcolor{##df0030}{#1}\");\ndefineMacro(\"\\\\green\", \"\\\\textcolor{##28ae7b}{#1}\");\ndefineMacro(\"\\\\gray\", \"\\\\textcolor{gray}{#1}\");\ndefineMacro(\"\\\\purple\", \"\\\\textcolor{##9d38bd}{#1}\");\ndefineMacro(\"\\\\blueA\", \"\\\\textcolor{##ccfaff}{#1}\");\ndefineMacro(\"\\\\blueB\", \"\\\\textcolor{##80f6ff}{#1}\");\ndefineMacro(\"\\\\blueC\", \"\\\\textcolor{##63d9ea}{#1}\");\ndefineMacro(\"\\\\blueD\", \"\\\\textcolor{##11accd}{#1}\");\ndefineMacro(\"\\\\blueE\", \"\\\\textcolor{##0c7f99}{#1}\");\ndefineMacro(\"\\\\tealA\", \"\\\\textcolor{##94fff5}{#1}\");\ndefineMacro(\"\\\\tealB\", \"\\\\textcolor{##26edd5}{#1}\");\ndefineMacro(\"\\\\tealC\", \"\\\\textcolor{##01d1c1}{#1}\");\ndefineMacro(\"\\\\tealD\", \"\\\\textcolor{##01a995}{#1}\");\ndefineMacro(\"\\\\tealE\", \"\\\\textcolor{##208170}{#1}\");\ndefineMacro(\"\\\\greenA\", \"\\\\textcolor{##b6ffb0}{#1}\");\ndefineMacro(\"\\\\greenB\", \"\\\\textcolor{##8af281}{#1}\");\ndefineMacro(\"\\\\greenC\", \"\\\\textcolor{##74cf70}{#1}\");\ndefineMacro(\"\\\\greenD\", \"\\\\textcolor{##1fab54}{#1}\");\ndefineMacro(\"\\\\greenE\", \"\\\\textcolor{##0d923f}{#1}\");\ndefineMacro(\"\\\\goldA\", \"\\\\textcolor{##ffd0a9}{#1}\");\ndefineMacro(\"\\\\goldB\", \"\\\\textcolor{##ffbb71}{#1}\");\ndefineMacro(\"\\\\goldC\", \"\\\\textcolor{##ff9c39}{#1}\");\ndefineMacro(\"\\\\goldD\", \"\\\\textcolor{##e07d10}{#1}\");\ndefineMacro(\"\\\\goldE\", \"\\\\textcolor{##a75a05}{#1}\");\ndefineMacro(\"\\\\redA\", \"\\\\textcolor{##fca9a9}{#1}\");\ndefineMacro(\"\\\\redB\", \"\\\\textcolor{##ff8482}{#1}\");\ndefineMacro(\"\\\\redC\", \"\\\\textcolor{##f9685d}{#1}\");\ndefineMacro(\"\\\\redD\", \"\\\\textcolor{##e84d39}{#1}\");\ndefineMacro(\"\\\\redE\", \"\\\\textcolor{##bc2612}{#1}\");\ndefineMacro(\"\\\\maroonA\", \"\\\\textcolor{##ffbde0}{#1}\");\ndefineMacro(\"\\\\maroonB\", \"\\\\textcolor{##ff92c6}{#1}\");\ndefineMacro(\"\\\\maroonC\", \"\\\\textcolor{##ed5fa6}{#1}\");\ndefineMacro(\"\\\\maroonD\", \"\\\\textcolor{##ca337c}{#1}\");\ndefineMacro(\"\\\\maroonE\", \"\\\\textcolor{##9e034e}{#1}\");\ndefineMacro(\"\\\\purpleA\", \"\\\\textcolor{##ddd7ff}{#1}\");\ndefineMacro(\"\\\\purpleB\", \"\\\\textcolor{##c6b9fc}{#1}\");\ndefineMacro(\"\\\\purpleC\", \"\\\\textcolor{##aa87ff}{#1}\");\ndefineMacro(\"\\\\purpleD\", \"\\\\textcolor{##7854ab}{#1}\");\ndefineMacro(\"\\\\purpleE\", \"\\\\textcolor{##543b78}{#1}\");\ndefineMacro(\"\\\\mintA\", \"\\\\textcolor{##f5f9e8}{#1}\");\ndefineMacro(\"\\\\mintB\", \"\\\\textcolor{##edf2df}{#1}\");\ndefineMacro(\"\\\\mintC\", \"\\\\textcolor{##e0e5cc}{#1}\");\ndefineMacro(\"\\\\grayA\", \"\\\\textcolor{##f6f7f7}{#1}\");\ndefineMacro(\"\\\\grayB\", \"\\\\textcolor{##f0f1f2}{#1}\");\ndefineMacro(\"\\\\grayC\", \"\\\\textcolor{##e3e5e6}{#1}\");\ndefineMacro(\"\\\\grayD\", \"\\\\textcolor{##d6d8da}{#1}\");\ndefineMacro(\"\\\\grayE\", \"\\\\textcolor{##babec2}{#1}\");\ndefineMacro(\"\\\\grayF\", \"\\\\textcolor{##888d93}{#1}\");\ndefineMacro(\"\\\\grayG\", \"\\\\textcolor{##626569}{#1}\");\ndefineMacro(\"\\\\grayH\", \"\\\\textcolor{##3b3e40}{#1}\");\ndefineMacro(\"\\\\grayI\", \"\\\\textcolor{##21242c}{#1}\");\ndefineMacro(\"\\\\kaBlue\", \"\\\\textcolor{##314453}{#1}\");\ndefineMacro(\"\\\\kaGreen\", \"\\\\textcolor{##71B307}{#1}\");\n\n/**\n * This file contains the “gullet” where macros are expanded\n * until only non-macro tokens remain.\n */\n// List of commands that act like macros but aren't defined as a macro,\n// function, or symbol.  Used in `isDefined`.\nvar implicitCommands = {\n  \"^\": true,\n  // Parser.js\n  \"_\": true,\n  // Parser.js\n  \"\\\\limits\": true,\n  // Parser.js\n  \"\\\\nolimits\": true // Parser.js\n\n};\nclass MacroExpander {\n  constructor(input, settings, mode) {\n    this.settings = void 0;\n    this.expansionCount = void 0;\n    this.lexer = void 0;\n    this.macros = void 0;\n    this.stack = void 0;\n    this.mode = void 0;\n    this.settings = settings;\n    this.expansionCount = 0;\n    this.feed(input); // Make new global namespace\n\n    this.macros = new Namespace(macros, settings.macros);\n    this.mode = mode;\n    this.stack = []; // contains tokens in REVERSE order\n  }\n  /**\n   * Feed a new input string to the same MacroExpander\n   * (with existing macros etc.).\n   */\n\n\n  feed(input) {\n    this.lexer = new Lexer(input, this.settings);\n  }\n  /**\n   * Switches between \"text\" and \"math\" modes.\n   */\n\n\n  switchMode(newMode) {\n    this.mode = newMode;\n  }\n  /**\n   * Start a new group nesting within all namespaces.\n   */\n\n\n  beginGroup() {\n    this.macros.beginGroup();\n  }\n  /**\n   * End current group nesting within all namespaces.\n   */\n\n\n  endGroup() {\n    this.macros.endGroup();\n  }\n  /**\n   * Ends all currently nested groups (if any), restoring values before the\n   * groups began.  Useful in case of an error in the middle of parsing.\n   */\n\n\n  endGroups() {\n    this.macros.endGroups();\n  }\n  /**\n   * Returns the topmost token on the stack, without expanding it.\n   * Similar in behavior to TeX's `\\futurelet`.\n   */\n\n\n  future() {\n    if (this.stack.length === 0) {\n      this.pushToken(this.lexer.lex());\n    }\n\n    return this.stack[this.stack.length - 1];\n  }\n  /**\n   * Remove and return the next unexpanded token.\n   */\n\n\n  popToken() {\n    this.future(); // ensure non-empty stack\n\n    return this.stack.pop();\n  }\n  /**\n   * Add a given token to the token stack.  In particular, this get be used\n   * to put back a token returned from one of the other methods.\n   */\n\n\n  pushToken(token) {\n    this.stack.push(token);\n  }\n  /**\n   * Append an array of tokens to the token stack.\n   */\n\n\n  pushTokens(tokens) {\n    this.stack.push(...tokens);\n  }\n  /**\n   * Find an macro argument without expanding tokens and append the array of\n   * tokens to the token stack. Uses Token as a container for the result.\n   */\n\n\n  scanArgument(isOptional) {\n    var start;\n    var end;\n    var tokens;\n\n    if (isOptional) {\n      this.consumeSpaces(); // \\@ifnextchar gobbles any space following it\n\n      if (this.future().text !== \"[\") {\n        return null;\n      }\n\n      start = this.popToken(); // don't include [ in tokens\n\n      ({\n        tokens,\n        end\n      } = this.consumeArg([\"]\"]));\n    } else {\n      ({\n        tokens,\n        start,\n        end\n      } = this.consumeArg());\n    } // indicate the end of an argument\n\n\n    this.pushToken(new Token(\"EOF\", end.loc));\n    this.pushTokens(tokens);\n    return start.range(end, \"\");\n  }\n  /**\n   * Consume all following space tokens, without expansion.\n   */\n\n\n  consumeSpaces() {\n    for (;;) {\n      var token = this.future();\n\n      if (token.text === \" \") {\n        this.stack.pop();\n      } else {\n        break;\n      }\n    }\n  }\n  /**\n   * Consume an argument from the token stream, and return the resulting array\n   * of tokens and start/end token.\n   */\n\n\n  consumeArg(delims) {\n    // The argument for a delimited parameter is the shortest (possibly\n    // empty) sequence of tokens with properly nested {...} groups that is\n    // followed ... by this particular list of non-parameter tokens.\n    // The argument for an undelimited parameter is the next nonblank\n    // token, unless that token is ‘{’, when the argument will be the\n    // entire {...} group that follows.\n    var tokens = [];\n    var isDelimited = delims && delims.length > 0;\n\n    if (!isDelimited) {\n      // Ignore spaces between arguments.  As the TeXbook says:\n      // \"After you have said ‘\\def\\row#1#2{...}’, you are allowed to\n      //  put spaces between the arguments (e.g., ‘\\row x n’), because\n      //  TeX doesn’t use single spaces as undelimited arguments.\"\n      this.consumeSpaces();\n    }\n\n    var start = this.future();\n    var tok;\n    var depth = 0;\n    var match = 0;\n\n    do {\n      tok = this.popToken();\n      tokens.push(tok);\n\n      if (tok.text === \"{\") {\n        ++depth;\n      } else if (tok.text === \"}\") {\n        --depth;\n\n        if (depth === -1) {\n          throw new ParseError(\"Extra }\", tok);\n        }\n      } else if (tok.text === \"EOF\") {\n        throw new ParseError(\"Unexpected end of input in a macro argument\" + \", expected '\" + (delims && isDelimited ? delims[match] : \"}\") + \"'\", tok);\n      }\n\n      if (delims && isDelimited) {\n        if ((depth === 0 || depth === 1 && delims[match] === \"{\") && tok.text === delims[match]) {\n          ++match;\n\n          if (match === delims.length) {\n            // don't include delims in tokens\n            tokens.splice(-match, match);\n            break;\n          }\n        } else {\n          match = 0;\n        }\n      }\n    } while (depth !== 0 || isDelimited); // If the argument found ... has the form ‘{<nested tokens>}’,\n    // ... the outermost braces enclosing the argument are removed\n\n\n    if (start.text === \"{\" && tokens[tokens.length - 1].text === \"}\") {\n      tokens.pop();\n      tokens.shift();\n    }\n\n    tokens.reverse(); // to fit in with stack order\n\n    return {\n      tokens,\n      start,\n      end: tok\n    };\n  }\n  /**\n   * Consume the specified number of (delimited) arguments from the token\n   * stream and return the resulting array of arguments.\n   */\n\n\n  consumeArgs(numArgs, delimiters) {\n    if (delimiters) {\n      if (delimiters.length !== numArgs + 1) {\n        throw new ParseError(\"The length of delimiters doesn't match the number of args!\");\n      }\n\n      var delims = delimiters[0];\n\n      for (var i = 0; i < delims.length; i++) {\n        var tok = this.popToken();\n\n        if (delims[i] !== tok.text) {\n          throw new ParseError(\"Use of the macro doesn't match its definition\", tok);\n        }\n      }\n    }\n\n    var args = [];\n\n    for (var _i = 0; _i < numArgs; _i++) {\n      args.push(this.consumeArg(delimiters && delimiters[_i + 1]).tokens);\n    }\n\n    return args;\n  }\n  /**\n   * Increment `expansionCount` by the specified amount.\n   * Throw an error if it exceeds `maxExpand`.\n   */\n\n\n  countExpansion(amount) {\n    this.expansionCount += amount;\n\n    if (this.expansionCount > this.settings.maxExpand) {\n      throw new ParseError(\"Too many expansions: infinite loop or \" + \"need to increase maxExpand setting\");\n    }\n  }\n  /**\n   * Expand the next token only once if possible.\n   *\n   * If the token is expanded, the resulting tokens will be pushed onto\n   * the stack in reverse order, and the number of such tokens will be\n   * returned.  This number might be zero or positive.\n   *\n   * If not, the return value is `false`, and the next token remains at the\n   * top of the stack.\n   *\n   * In either case, the next token will be on the top of the stack,\n   * or the stack will be empty (in case of empty expansion\n   * and no other tokens).\n   *\n   * Used to implement `expandAfterFuture` and `expandNextToken`.\n   *\n   * If expandableOnly, only expandable tokens are expanded and\n   * an undefined control sequence results in an error.\n   */\n\n\n  expandOnce(expandableOnly) {\n    var topToken = this.popToken();\n    var name = topToken.text;\n    var expansion = !topToken.noexpand ? this._getExpansion(name) : null;\n\n    if (expansion == null || expandableOnly && expansion.unexpandable) {\n      if (expandableOnly && expansion == null && name[0] === \"\\\\\" && !this.isDefined(name)) {\n        throw new ParseError(\"Undefined control sequence: \" + name);\n      }\n\n      this.pushToken(topToken);\n      return false;\n    }\n\n    this.countExpansion(1);\n    var tokens = expansion.tokens;\n    var args = this.consumeArgs(expansion.numArgs, expansion.delimiters);\n\n    if (expansion.numArgs) {\n      // paste arguments in place of the placeholders\n      tokens = tokens.slice(); // make a shallow copy\n\n      for (var i = tokens.length - 1; i >= 0; --i) {\n        var tok = tokens[i];\n\n        if (tok.text === \"#\") {\n          if (i === 0) {\n            throw new ParseError(\"Incomplete placeholder at end of macro body\", tok);\n          }\n\n          tok = tokens[--i]; // next token on stack\n\n          if (tok.text === \"#\") {\n            // ## → #\n            tokens.splice(i + 1, 1); // drop first #\n          } else if (/^[1-9]$/.test(tok.text)) {\n            // replace the placeholder with the indicated argument\n            tokens.splice(i, 2, ...args[+tok.text - 1]);\n          } else {\n            throw new ParseError(\"Not a valid argument number\", tok);\n          }\n        }\n      }\n    } // Concatenate expansion onto top of stack.\n\n\n    this.pushTokens(tokens);\n    return tokens.length;\n  }\n  /**\n   * Expand the next token only once (if possible), and return the resulting\n   * top token on the stack (without removing anything from the stack).\n   * Similar in behavior to TeX's `\\expandafter\\futurelet`.\n   * Equivalent to expandOnce() followed by future().\n   */\n\n\n  expandAfterFuture() {\n    this.expandOnce();\n    return this.future();\n  }\n  /**\n   * Recursively expand first token, then return first non-expandable token.\n   */\n\n\n  expandNextToken() {\n    for (;;) {\n      if (this.expandOnce() === false) {\n        // fully expanded\n        var token = this.stack.pop(); // the token after \\noexpand is interpreted as if its meaning\n        // were ‘\\relax’\n\n        if (token.treatAsRelax) {\n          token.text = \"\\\\relax\";\n        }\n\n        return token;\n      }\n    } // Flow unable to figure out that this pathway is impossible.\n    // https://github.com/facebook/flow/issues/4808\n\n\n    throw new Error(); // eslint-disable-line no-unreachable\n  }\n  /**\n   * Fully expand the given macro name and return the resulting list of\n   * tokens, or return `undefined` if no such macro is defined.\n   */\n\n\n  expandMacro(name) {\n    return this.macros.has(name) ? this.expandTokens([new Token(name)]) : undefined;\n  }\n  /**\n   * Fully expand the given token stream and return the resulting list of\n   * tokens.  Note that the input tokens are in reverse order, but the\n   * output tokens are in forward order.\n   */\n\n\n  expandTokens(tokens) {\n    var output = [];\n    var oldStackLength = this.stack.length;\n    this.pushTokens(tokens);\n\n    while (this.stack.length > oldStackLength) {\n      // Expand only expandable tokens\n      if (this.expandOnce(true) === false) {\n        // fully expanded\n        var token = this.stack.pop();\n\n        if (token.treatAsRelax) {\n          // the expansion of \\noexpand is the token itself\n          token.noexpand = false;\n          token.treatAsRelax = false;\n        }\n\n        output.push(token);\n      }\n    } // Count all of these tokens as additional expansions, to prevent\n    // exponential blowup from linearly many \\edef's.\n\n\n    this.countExpansion(output.length);\n    return output;\n  }\n  /**\n   * Fully expand the given macro name and return the result as a string,\n   * or return `undefined` if no such macro is defined.\n   */\n\n\n  expandMacroAsText(name) {\n    var tokens = this.expandMacro(name);\n\n    if (tokens) {\n      return tokens.map(token => token.text).join(\"\");\n    } else {\n      return tokens;\n    }\n  }\n  /**\n   * Returns the expanded macro as a reversed array of tokens and a macro\n   * argument count.  Or returns `null` if no such macro.\n   */\n\n\n  _getExpansion(name) {\n    var definition = this.macros.get(name);\n\n    if (definition == null) {\n      // mainly checking for undefined here\n      return definition;\n    } // If a single character has an associated catcode other than 13\n    // (active character), then don't expand it.\n\n\n    if (name.length === 1) {\n      var catcode = this.lexer.catcodes[name];\n\n      if (catcode != null && catcode !== 13) {\n        return;\n      }\n    }\n\n    var expansion = typeof definition === \"function\" ? definition(this) : definition;\n\n    if (typeof expansion === \"string\") {\n      var numArgs = 0;\n\n      if (expansion.indexOf(\"#\") !== -1) {\n        var stripped = expansion.replace(/##/g, \"\");\n\n        while (stripped.indexOf(\"#\" + (numArgs + 1)) !== -1) {\n          ++numArgs;\n        }\n      }\n\n      var bodyLexer = new Lexer(expansion, this.settings);\n      var tokens = [];\n      var tok = bodyLexer.lex();\n\n      while (tok.text !== \"EOF\") {\n        tokens.push(tok);\n        tok = bodyLexer.lex();\n      }\n\n      tokens.reverse(); // to fit in with stack using push and pop\n\n      var expanded = {\n        tokens,\n        numArgs\n      };\n      return expanded;\n    }\n\n    return expansion;\n  }\n  /**\n   * Determine whether a command is currently \"defined\" (has some\n   * functionality), meaning that it's a macro (in the current group),\n   * a function, a symbol, or one of the special commands listed in\n   * `implicitCommands`.\n   */\n\n\n  isDefined(name) {\n    return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name);\n  }\n  /**\n   * Determine whether a command is expandable.\n   */\n\n\n  isExpandable(name) {\n    var macro = this.macros.get(name);\n    return macro != null ? typeof macro === \"string\" || typeof macro === \"function\" || !macro.unexpandable : functions.hasOwnProperty(name) && !functions[name].primitive;\n  }\n\n}\n\n// Helpers for Parser.js handling of Unicode (sub|super)script characters.\nvar unicodeSubRegEx = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/;\nvar uSubsAndSups = Object.freeze({\n  '₊': '+',\n  '₋': '-',\n  '₌': '=',\n  '₍': '(',\n  '₎': ')',\n  '₀': '0',\n  '₁': '1',\n  '₂': '2',\n  '₃': '3',\n  '₄': '4',\n  '₅': '5',\n  '₆': '6',\n  '₇': '7',\n  '₈': '8',\n  '₉': '9',\n  '\\u2090': 'a',\n  '\\u2091': 'e',\n  '\\u2095': 'h',\n  '\\u1D62': 'i',\n  '\\u2C7C': 'j',\n  '\\u2096': 'k',\n  '\\u2097': 'l',\n  '\\u2098': 'm',\n  '\\u2099': 'n',\n  '\\u2092': 'o',\n  '\\u209A': 'p',\n  '\\u1D63': 'r',\n  '\\u209B': 's',\n  '\\u209C': 't',\n  '\\u1D64': 'u',\n  '\\u1D65': 'v',\n  '\\u2093': 'x',\n  '\\u1D66': 'β',\n  '\\u1D67': 'γ',\n  '\\u1D68': 'ρ',\n  '\\u1D69': '\\u03d5',\n  '\\u1D6A': 'χ',\n  '⁺': '+',\n  '⁻': '-',\n  '⁼': '=',\n  '⁽': '(',\n  '⁾': ')',\n  '⁰': '0',\n  '¹': '1',\n  '²': '2',\n  '³': '3',\n  '⁴': '4',\n  '⁵': '5',\n  '⁶': '6',\n  '⁷': '7',\n  '⁸': '8',\n  '⁹': '9',\n  '\\u1D2C': 'A',\n  '\\u1D2E': 'B',\n  '\\u1D30': 'D',\n  '\\u1D31': 'E',\n  '\\u1D33': 'G',\n  '\\u1D34': 'H',\n  '\\u1D35': 'I',\n  '\\u1D36': 'J',\n  '\\u1D37': 'K',\n  '\\u1D38': 'L',\n  '\\u1D39': 'M',\n  '\\u1D3A': 'N',\n  '\\u1D3C': 'O',\n  '\\u1D3E': 'P',\n  '\\u1D3F': 'R',\n  '\\u1D40': 'T',\n  '\\u1D41': 'U',\n  '\\u2C7D': 'V',\n  '\\u1D42': 'W',\n  '\\u1D43': 'a',\n  '\\u1D47': 'b',\n  '\\u1D9C': 'c',\n  '\\u1D48': 'd',\n  '\\u1D49': 'e',\n  '\\u1DA0': 'f',\n  '\\u1D4D': 'g',\n  '\\u02B0': 'h',\n  '\\u2071': 'i',\n  '\\u02B2': 'j',\n  '\\u1D4F': 'k',\n  '\\u02E1': 'l',\n  '\\u1D50': 'm',\n  '\\u207F': 'n',\n  '\\u1D52': 'o',\n  '\\u1D56': 'p',\n  '\\u02B3': 'r',\n  '\\u02E2': 's',\n  '\\u1D57': 't',\n  '\\u1D58': 'u',\n  '\\u1D5B': 'v',\n  '\\u02B7': 'w',\n  '\\u02E3': 'x',\n  '\\u02B8': 'y',\n  '\\u1DBB': 'z',\n  '\\u1D5D': 'β',\n  '\\u1D5E': 'γ',\n  '\\u1D5F': 'δ',\n  '\\u1D60': '\\u03d5',\n  '\\u1D61': 'χ',\n  '\\u1DBF': 'θ'\n});\n\n/* eslint no-constant-condition:0 */\n\nvar unicodeAccents = {\n  \"́\": {\n    \"text\": \"\\\\'\",\n    \"math\": \"\\\\acute\"\n  },\n  \"̀\": {\n    \"text\": \"\\\\`\",\n    \"math\": \"\\\\grave\"\n  },\n  \"̈\": {\n    \"text\": \"\\\\\\\"\",\n    \"math\": \"\\\\ddot\"\n  },\n  \"̃\": {\n    \"text\": \"\\\\~\",\n    \"math\": \"\\\\tilde\"\n  },\n  \"̄\": {\n    \"text\": \"\\\\=\",\n    \"math\": \"\\\\bar\"\n  },\n  \"̆\": {\n    \"text\": \"\\\\u\",\n    \"math\": \"\\\\breve\"\n  },\n  \"̌\": {\n    \"text\": \"\\\\v\",\n    \"math\": \"\\\\check\"\n  },\n  \"̂\": {\n    \"text\": \"\\\\^\",\n    \"math\": \"\\\\hat\"\n  },\n  \"̇\": {\n    \"text\": \"\\\\.\",\n    \"math\": \"\\\\dot\"\n  },\n  \"̊\": {\n    \"text\": \"\\\\r\",\n    \"math\": \"\\\\mathring\"\n  },\n  \"̋\": {\n    \"text\": \"\\\\H\"\n  },\n  \"̧\": {\n    \"text\": \"\\\\c\"\n  }\n};\nvar unicodeSymbols = {\n  \"á\": \"á\",\n  \"à\": \"à\",\n  \"ä\": \"ä\",\n  \"ǟ\": \"ǟ\",\n  \"ã\": \"ã\",\n  \"ā\": \"ā\",\n  \"ă\": \"ă\",\n  \"ắ\": \"ắ\",\n  \"ằ\": \"ằ\",\n  \"ẵ\": \"ẵ\",\n  \"ǎ\": \"ǎ\",\n  \"â\": \"â\",\n  \"ấ\": \"ấ\",\n  \"ầ\": \"ầ\",\n  \"ẫ\": \"ẫ\",\n  \"ȧ\": \"ȧ\",\n  \"ǡ\": \"ǡ\",\n  \"å\": \"å\",\n  \"ǻ\": \"ǻ\",\n  \"ḃ\": \"ḃ\",\n  \"ć\": \"ć\",\n  \"ḉ\": \"ḉ\",\n  \"č\": \"č\",\n  \"ĉ\": \"ĉ\",\n  \"ċ\": \"ċ\",\n  \"ç\": \"ç\",\n  \"ď\": \"ď\",\n  \"ḋ\": \"ḋ\",\n  \"ḑ\": \"ḑ\",\n  \"é\": \"é\",\n  \"è\": \"è\",\n  \"ë\": \"ë\",\n  \"ẽ\": \"ẽ\",\n  \"ē\": \"ē\",\n  \"ḗ\": \"ḗ\",\n  \"ḕ\": \"ḕ\",\n  \"ĕ\": \"ĕ\",\n  \"ḝ\": \"ḝ\",\n  \"ě\": \"ě\",\n  \"ê\": \"ê\",\n  \"ế\": \"ế\",\n  \"ề\": \"ề\",\n  \"ễ\": \"ễ\",\n  \"ė\": \"ė\",\n  \"ȩ\": \"ȩ\",\n  \"ḟ\": \"ḟ\",\n  \"ǵ\": \"ǵ\",\n  \"ḡ\": \"ḡ\",\n  \"ğ\": \"ğ\",\n  \"ǧ\": \"ǧ\",\n  \"ĝ\": \"ĝ\",\n  \"ġ\": \"ġ\",\n  \"ģ\": \"ģ\",\n  \"ḧ\": \"ḧ\",\n  \"ȟ\": \"ȟ\",\n  \"ĥ\": \"ĥ\",\n  \"ḣ\": \"ḣ\",\n  \"ḩ\": \"ḩ\",\n  \"í\": \"í\",\n  \"ì\": \"ì\",\n  \"ï\": \"ï\",\n  \"ḯ\": \"ḯ\",\n  \"ĩ\": \"ĩ\",\n  \"ī\": \"ī\",\n  \"ĭ\": \"ĭ\",\n  \"ǐ\": \"ǐ\",\n  \"î\": \"î\",\n  \"ǰ\": \"ǰ\",\n  \"ĵ\": \"ĵ\",\n  \"ḱ\": \"ḱ\",\n  \"ǩ\": \"ǩ\",\n  \"ķ\": \"ķ\",\n  \"ĺ\": \"ĺ\",\n  \"ľ\": \"ľ\",\n  \"ļ\": \"ļ\",\n  \"ḿ\": \"ḿ\",\n  \"ṁ\": \"ṁ\",\n  \"ń\": \"ń\",\n  \"ǹ\": \"ǹ\",\n  \"ñ\": \"ñ\",\n  \"ň\": \"ň\",\n  \"ṅ\": \"ṅ\",\n  \"ņ\": \"ņ\",\n  \"ó\": \"ó\",\n  \"ò\": \"ò\",\n  \"ö\": \"ö\",\n  \"ȫ\": \"ȫ\",\n  \"õ\": \"õ\",\n  \"ṍ\": \"ṍ\",\n  \"ṏ\": \"ṏ\",\n  \"ȭ\": \"ȭ\",\n  \"ō\": \"ō\",\n  \"ṓ\": \"ṓ\",\n  \"ṑ\": \"ṑ\",\n  \"ŏ\": \"ŏ\",\n  \"ǒ\": \"ǒ\",\n  \"ô\": \"ô\",\n  \"ố\": \"ố\",\n  \"ồ\": \"ồ\",\n  \"ỗ\": \"ỗ\",\n  \"ȯ\": \"ȯ\",\n  \"ȱ\": \"ȱ\",\n  \"ő\": \"ő\",\n  \"ṕ\": \"ṕ\",\n  \"ṗ\": \"ṗ\",\n  \"ŕ\": \"ŕ\",\n  \"ř\": \"ř\",\n  \"ṙ\": \"ṙ\",\n  \"ŗ\": \"ŗ\",\n  \"ś\": \"ś\",\n  \"ṥ\": \"ṥ\",\n  \"š\": \"š\",\n  \"ṧ\": \"ṧ\",\n  \"ŝ\": \"ŝ\",\n  \"ṡ\": \"ṡ\",\n  \"ş\": \"ş\",\n  \"ẗ\": \"ẗ\",\n  \"ť\": \"ť\",\n  \"ṫ\": \"ṫ\",\n  \"ţ\": \"ţ\",\n  \"ú\": \"ú\",\n  \"ù\": \"ù\",\n  \"ü\": \"ü\",\n  \"ǘ\": \"ǘ\",\n  \"ǜ\": \"ǜ\",\n  \"ǖ\": \"ǖ\",\n  \"ǚ\": \"ǚ\",\n  \"ũ\": \"ũ\",\n  \"ṹ\": \"ṹ\",\n  \"ū\": \"ū\",\n  \"ṻ\": \"ṻ\",\n  \"ŭ\": \"ŭ\",\n  \"ǔ\": \"ǔ\",\n  \"û\": \"û\",\n  \"ů\": \"ů\",\n  \"ű\": \"ű\",\n  \"ṽ\": \"ṽ\",\n  \"ẃ\": \"ẃ\",\n  \"ẁ\": \"ẁ\",\n  \"ẅ\": \"ẅ\",\n  \"ŵ\": \"ŵ\",\n  \"ẇ\": \"ẇ\",\n  \"ẘ\": \"ẘ\",\n  \"ẍ\": \"ẍ\",\n  \"ẋ\": \"ẋ\",\n  \"ý\": \"ý\",\n  \"ỳ\": \"ỳ\",\n  \"ÿ\": \"ÿ\",\n  \"ỹ\": \"ỹ\",\n  \"ȳ\": \"ȳ\",\n  \"ŷ\": \"ŷ\",\n  \"ẏ\": \"ẏ\",\n  \"ẙ\": \"ẙ\",\n  \"ź\": \"ź\",\n  \"ž\": \"ž\",\n  \"ẑ\": \"ẑ\",\n  \"ż\": \"ż\",\n  \"Á\": \"Á\",\n  \"À\": \"À\",\n  \"Ä\": \"Ä\",\n  \"Ǟ\": \"Ǟ\",\n  \"Ã\": \"Ã\",\n  \"Ā\": \"Ā\",\n  \"Ă\": \"Ă\",\n  \"Ắ\": \"Ắ\",\n  \"Ằ\": \"Ằ\",\n  \"Ẵ\": \"Ẵ\",\n  \"Ǎ\": \"Ǎ\",\n  \"Â\": \"Â\",\n  \"Ấ\": \"Ấ\",\n  \"Ầ\": \"Ầ\",\n  \"Ẫ\": \"Ẫ\",\n  \"Ȧ\": \"Ȧ\",\n  \"Ǡ\": \"Ǡ\",\n  \"Å\": \"Å\",\n  \"Ǻ\": \"Ǻ\",\n  \"Ḃ\": \"Ḃ\",\n  \"Ć\": \"Ć\",\n  \"Ḉ\": \"Ḉ\",\n  \"Č\": \"Č\",\n  \"Ĉ\": \"Ĉ\",\n  \"Ċ\": \"Ċ\",\n  \"Ç\": \"Ç\",\n  \"Ď\": \"Ď\",\n  \"Ḋ\": \"Ḋ\",\n  \"Ḑ\": \"Ḑ\",\n  \"É\": \"É\",\n  \"È\": \"È\",\n  \"Ë\": \"Ë\",\n  \"Ẽ\": \"Ẽ\",\n  \"Ē\": \"Ē\",\n  \"Ḗ\": \"Ḗ\",\n  \"Ḕ\": \"Ḕ\",\n  \"Ĕ\": \"Ĕ\",\n  \"Ḝ\": \"Ḝ\",\n  \"Ě\": \"Ě\",\n  \"Ê\": \"Ê\",\n  \"Ế\": \"Ế\",\n  \"Ề\": \"Ề\",\n  \"Ễ\": \"Ễ\",\n  \"Ė\": \"Ė\",\n  \"Ȩ\": \"Ȩ\",\n  \"Ḟ\": \"Ḟ\",\n  \"Ǵ\": \"Ǵ\",\n  \"Ḡ\": \"Ḡ\",\n  \"Ğ\": \"Ğ\",\n  \"Ǧ\": \"Ǧ\",\n  \"Ĝ\": \"Ĝ\",\n  \"Ġ\": \"Ġ\",\n  \"Ģ\": \"Ģ\",\n  \"Ḧ\": \"Ḧ\",\n  \"Ȟ\": \"Ȟ\",\n  \"Ĥ\": \"Ĥ\",\n  \"Ḣ\": \"Ḣ\",\n  \"Ḩ\": \"Ḩ\",\n  \"Í\": \"Í\",\n  \"Ì\": \"Ì\",\n  \"Ï\": \"Ï\",\n  \"Ḯ\": \"Ḯ\",\n  \"Ĩ\": \"Ĩ\",\n  \"Ī\": \"Ī\",\n  \"Ĭ\": \"Ĭ\",\n  \"Ǐ\": \"Ǐ\",\n  \"Î\": \"Î\",\n  \"İ\": \"İ\",\n  \"Ĵ\": \"Ĵ\",\n  \"Ḱ\": \"Ḱ\",\n  \"Ǩ\": \"Ǩ\",\n  \"Ķ\": \"Ķ\",\n  \"Ĺ\": \"Ĺ\",\n  \"Ľ\": \"Ľ\",\n  \"Ļ\": \"Ļ\",\n  \"Ḿ\": \"Ḿ\",\n  \"Ṁ\": \"Ṁ\",\n  \"Ń\": \"Ń\",\n  \"Ǹ\": \"Ǹ\",\n  \"Ñ\": \"Ñ\",\n  \"Ň\": \"Ň\",\n  \"Ṅ\": \"Ṅ\",\n  \"Ņ\": \"Ņ\",\n  \"Ó\": \"Ó\",\n  \"Ò\": \"Ò\",\n  \"Ö\": \"Ö\",\n  \"Ȫ\": \"Ȫ\",\n  \"Õ\": \"Õ\",\n  \"Ṍ\": \"Ṍ\",\n  \"Ṏ\": \"Ṏ\",\n  \"Ȭ\": \"Ȭ\",\n  \"Ō\": \"Ō\",\n  \"Ṓ\": \"Ṓ\",\n  \"Ṑ\": \"Ṑ\",\n  \"Ŏ\": \"Ŏ\",\n  \"Ǒ\": \"Ǒ\",\n  \"Ô\": \"Ô\",\n  \"Ố\": \"Ố\",\n  \"Ồ\": \"Ồ\",\n  \"Ỗ\": \"Ỗ\",\n  \"Ȯ\": \"Ȯ\",\n  \"Ȱ\": \"Ȱ\",\n  \"Ő\": \"Ő\",\n  \"Ṕ\": \"Ṕ\",\n  \"Ṗ\": \"Ṗ\",\n  \"Ŕ\": \"Ŕ\",\n  \"Ř\": \"Ř\",\n  \"Ṙ\": \"Ṙ\",\n  \"Ŗ\": \"Ŗ\",\n  \"Ś\": \"Ś\",\n  \"Ṥ\": \"Ṥ\",\n  \"Š\": \"Š\",\n  \"Ṧ\": \"Ṧ\",\n  \"Ŝ\": \"Ŝ\",\n  \"Ṡ\": \"Ṡ\",\n  \"Ş\": \"Ş\",\n  \"Ť\": \"Ť\",\n  \"Ṫ\": \"Ṫ\",\n  \"Ţ\": \"Ţ\",\n  \"Ú\": \"Ú\",\n  \"Ù\": \"Ù\",\n  \"Ü\": \"Ü\",\n  \"Ǘ\": \"Ǘ\",\n  \"Ǜ\": \"Ǜ\",\n  \"Ǖ\": \"Ǖ\",\n  \"Ǚ\": \"Ǚ\",\n  \"Ũ\": \"Ũ\",\n  \"Ṹ\": \"Ṹ\",\n  \"Ū\": \"Ū\",\n  \"Ṻ\": \"Ṻ\",\n  \"Ŭ\": \"Ŭ\",\n  \"Ǔ\": \"Ǔ\",\n  \"Û\": \"Û\",\n  \"Ů\": \"Ů\",\n  \"Ű\": \"Ű\",\n  \"Ṽ\": \"Ṽ\",\n  \"Ẃ\": \"Ẃ\",\n  \"Ẁ\": \"Ẁ\",\n  \"Ẅ\": \"Ẅ\",\n  \"Ŵ\": \"Ŵ\",\n  \"Ẇ\": \"Ẇ\",\n  \"Ẍ\": \"Ẍ\",\n  \"Ẋ\": \"Ẋ\",\n  \"Ý\": \"Ý\",\n  \"Ỳ\": \"Ỳ\",\n  \"Ÿ\": \"Ÿ\",\n  \"Ỹ\": \"Ỹ\",\n  \"Ȳ\": \"Ȳ\",\n  \"Ŷ\": \"Ŷ\",\n  \"Ẏ\": \"Ẏ\",\n  \"Ź\": \"Ź\",\n  \"Ž\": \"Ž\",\n  \"Ẑ\": \"Ẑ\",\n  \"Ż\": \"Ż\",\n  \"ά\": \"ά\",\n  \"ὰ\": \"ὰ\",\n  \"ᾱ\": \"ᾱ\",\n  \"ᾰ\": \"ᾰ\",\n  \"έ\": \"έ\",\n  \"ὲ\": \"ὲ\",\n  \"ή\": \"ή\",\n  \"ὴ\": \"ὴ\",\n  \"ί\": \"ί\",\n  \"ὶ\": \"ὶ\",\n  \"ϊ\": \"ϊ\",\n  \"ΐ\": \"ΐ\",\n  \"ῒ\": \"ῒ\",\n  \"ῑ\": \"ῑ\",\n  \"ῐ\": \"ῐ\",\n  \"ό\": \"ό\",\n  \"ὸ\": \"ὸ\",\n  \"ύ\": \"ύ\",\n  \"ὺ\": \"ὺ\",\n  \"ϋ\": \"ϋ\",\n  \"ΰ\": \"ΰ\",\n  \"ῢ\": \"ῢ\",\n  \"ῡ\": \"ῡ\",\n  \"ῠ\": \"ῠ\",\n  \"ώ\": \"ώ\",\n  \"ὼ\": \"ὼ\",\n  \"Ύ\": \"Ύ\",\n  \"Ὺ\": \"Ὺ\",\n  \"Ϋ\": \"Ϋ\",\n  \"Ῡ\": \"Ῡ\",\n  \"Ῠ\": \"Ῠ\",\n  \"Ώ\": \"Ώ\",\n  \"Ὼ\": \"Ὼ\"\n};\n\n/**\n * This file contains the parser used to parse out a TeX expression from the\n * input. Since TeX isn't context-free, standard parsers don't work particularly\n * well.\n *\n * The strategy of this parser is as such:\n *\n * The main functions (the `.parse...` ones) take a position in the current\n * parse string to parse tokens from. The lexer (found in Lexer.js, stored at\n * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When\n * individual tokens are needed at a position, the lexer is called to pull out a\n * token, which is then used.\n *\n * The parser has a property called \"mode\" indicating the mode that\n * the parser is currently in. Currently it has to be one of \"math\" or\n * \"text\", which denotes whether the current environment is a math-y\n * one or a text-y one (e.g. inside \\text). Currently, this serves to\n * limit the functions which can be used in text mode.\n *\n * The main functions then return an object which contains the useful data that\n * was parsed at its given point, and a new position at the end of the parsed\n * data. The main functions can call each other and continue the parsing by\n * using the returned position as a new starting point.\n *\n * There are also extra `.handle...` functions, which pull out some reused\n * functionality into self-contained functions.\n *\n * The functions return ParseNodes.\n */\nclass Parser {\n  constructor(input, settings) {\n    this.mode = void 0;\n    this.gullet = void 0;\n    this.settings = void 0;\n    this.leftrightDepth = void 0;\n    this.nextToken = void 0;\n    // Start in math mode\n    this.mode = \"math\"; // Create a new macro expander (gullet) and (indirectly via that) also a\n    // new lexer (mouth) for this parser (stomach, in the language of TeX)\n\n    this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing\n\n    this.settings = settings; // Count leftright depth (for \\middle errors)\n\n    this.leftrightDepth = 0;\n  }\n  /**\n   * Checks a result to make sure it has the right type, and throws an\n   * appropriate error otherwise.\n   */\n\n\n  expect(text, consume) {\n    if (consume === void 0) {\n      consume = true;\n    }\n\n    if (this.fetch().text !== text) {\n      throw new ParseError(\"Expected '\" + text + \"', got '\" + this.fetch().text + \"'\", this.fetch());\n    }\n\n    if (consume) {\n      this.consume();\n    }\n  }\n  /**\n   * Discards the current lookahead token, considering it consumed.\n   */\n\n\n  consume() {\n    this.nextToken = null;\n  }\n  /**\n   * Return the current lookahead token, or if there isn't one (at the\n   * beginning, or if the previous lookahead token was consume()d),\n   * fetch the next token as the new lookahead token and return it.\n   */\n\n\n  fetch() {\n    if (this.nextToken == null) {\n      this.nextToken = this.gullet.expandNextToken();\n    }\n\n    return this.nextToken;\n  }\n  /**\n   * Switches between \"text\" and \"math\" modes.\n   */\n\n\n  switchMode(newMode) {\n    this.mode = newMode;\n    this.gullet.switchMode(newMode);\n  }\n  /**\n   * Main parsing function, which parses an entire input.\n   */\n\n\n  parse() {\n    if (!this.settings.globalGroup) {\n      // Create a group namespace for the math expression.\n      // (LaTeX creates a new group for every $...$, $$...$$, \\[...\\].)\n      this.gullet.beginGroup();\n    } // Use old \\color behavior (same as LaTeX's \\textcolor) if requested.\n    // We do this within the group for the math expression, so it doesn't\n    // pollute settings.macros.\n\n\n    if (this.settings.colorIsTextColor) {\n      this.gullet.macros.set(\"\\\\color\", \"\\\\textcolor\");\n    }\n\n    try {\n      // Try to parse the input\n      var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end\n\n      this.expect(\"EOF\"); // End the group namespace for the expression\n\n      if (!this.settings.globalGroup) {\n        this.gullet.endGroup();\n      }\n\n      return parse; // Close any leftover groups in case of a parse error.\n    } finally {\n      this.gullet.endGroups();\n    }\n  }\n  /**\n   * Fully parse a separate sequence of tokens as a separate job.\n   * Tokens should be specified in reverse order, as in a MacroDefinition.\n   */\n\n\n  subparse(tokens) {\n    // Save the next token from the current job.\n    var oldToken = this.nextToken;\n    this.consume(); // Run the new job, terminating it with an excess '}'\n\n    this.gullet.pushToken(new Token(\"}\"));\n    this.gullet.pushTokens(tokens);\n    var parse = this.parseExpression(false);\n    this.expect(\"}\"); // Restore the next token from the current job.\n\n    this.nextToken = oldToken;\n    return parse;\n  }\n\n  /**\n   * Parses an \"expression\", which is a list of atoms.\n   *\n   * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This\n   *                 happens when functions have higher precedence han infix\n   *                 nodes in implicit parses.\n   *\n   * `breakOnTokenText`: The text of the token that the expression should end\n   *                     with, or `null` if something else should end the\n   *                     expression.\n   */\n  parseExpression(breakOnInfix, breakOnTokenText) {\n    var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either\n    // we reached the end, a }, or a \\right)\n\n    while (true) {\n      // Ignore spaces in math mode\n      if (this.mode === \"math\") {\n        this.consumeSpaces();\n      }\n\n      var lex = this.fetch();\n\n      if (Parser.endOfExpression.indexOf(lex.text) !== -1) {\n        break;\n      }\n\n      if (breakOnTokenText && lex.text === breakOnTokenText) {\n        break;\n      }\n\n      if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) {\n        break;\n      }\n\n      var atom = this.parseAtom(breakOnTokenText);\n\n      if (!atom) {\n        break;\n      } else if (atom.type === \"internal\") {\n        // Internal nodes do not appear in parse tree\n        continue;\n      }\n\n      body.push(atom);\n    }\n\n    if (this.mode === \"text\") {\n      this.formLigatures(body);\n    }\n\n    return this.handleInfixNodes(body);\n  }\n  /**\n   * Rewrites infix operators such as \\over with corresponding commands such\n   * as \\frac.\n   *\n   * There can only be one infix operator per group.  If there's more than one\n   * then the expression is ambiguous.  This can be resolved by adding {}.\n   */\n\n\n  handleInfixNodes(body) {\n    var overIndex = -1;\n    var funcName;\n\n    for (var i = 0; i < body.length; i++) {\n      if (body[i].type === \"infix\") {\n        if (overIndex !== -1) {\n          throw new ParseError(\"only one infix operator per group\", body[i].token);\n        }\n\n        overIndex = i;\n        funcName = body[i].replaceWith;\n      }\n    }\n\n    if (overIndex !== -1 && funcName) {\n      var numerNode;\n      var denomNode;\n      var numerBody = body.slice(0, overIndex);\n      var denomBody = body.slice(overIndex + 1);\n\n      if (numerBody.length === 1 && numerBody[0].type === \"ordgroup\") {\n        numerNode = numerBody[0];\n      } else {\n        numerNode = {\n          type: \"ordgroup\",\n          mode: this.mode,\n          body: numerBody\n        };\n      }\n\n      if (denomBody.length === 1 && denomBody[0].type === \"ordgroup\") {\n        denomNode = denomBody[0];\n      } else {\n        denomNode = {\n          type: \"ordgroup\",\n          mode: this.mode,\n          body: denomBody\n        };\n      }\n\n      var node;\n\n      if (funcName === \"\\\\\\\\abovefrac\") {\n        node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []);\n      } else {\n        node = this.callFunction(funcName, [numerNode, denomNode], []);\n      }\n\n      return [node];\n    } else {\n      return body;\n    }\n  }\n  /**\n   * Handle a subscript or superscript with nice errors.\n   */\n\n\n  handleSupSubscript(name // For error reporting.\n  ) {\n    var symbolToken = this.fetch();\n    var symbol = symbolToken.text;\n    this.consume();\n    this.consumeSpaces(); // ignore spaces before sup/subscript argument\n    // Skip over allowed internal nodes such as \\relax\n\n    var group;\n\n    do {\n      var _group;\n\n      group = this.parseGroup(name);\n    } while (((_group = group) == null ? void 0 : _group.type) === \"internal\");\n\n    if (!group) {\n      throw new ParseError(\"Expected group after '\" + symbol + \"'\", symbolToken);\n    }\n\n    return group;\n  }\n  /**\n   * Converts the textual input of an unsupported command into a text node\n   * contained within a color node whose color is determined by errorColor\n   */\n\n\n  formatUnsupportedCmd(text) {\n    var textordArray = [];\n\n    for (var i = 0; i < text.length; i++) {\n      textordArray.push({\n        type: \"textord\",\n        mode: \"text\",\n        text: text[i]\n      });\n    }\n\n    var textNode = {\n      type: \"text\",\n      mode: this.mode,\n      body: textordArray\n    };\n    var colorNode = {\n      type: \"color\",\n      mode: this.mode,\n      color: this.settings.errorColor,\n      body: [textNode]\n    };\n    return colorNode;\n  }\n  /**\n   * Parses a group with optional super/subscripts.\n   */\n\n\n  parseAtom(breakOnTokenText) {\n    // The body of an atom is an implicit group, so that things like\n    // \\left(x\\right)^2 work correctly.\n    var base = this.parseGroup(\"atom\", breakOnTokenText); // Internal nodes (e.g. \\relax) cannot support super/subscripts.\n    // Instead we will pick up super/subscripts with blank base next round.\n\n    if ((base == null ? void 0 : base.type) === \"internal\") {\n      return base;\n    } // In text mode, we don't have superscripts or subscripts\n\n\n    if (this.mode === \"text\") {\n      return base;\n    } // Note that base may be empty (i.e. null) at this point.\n\n\n    var superscript;\n    var subscript;\n\n    while (true) {\n      // Guaranteed in math mode, so eat any spaces first.\n      this.consumeSpaces(); // Lex the first token\n\n      var lex = this.fetch();\n\n      if (lex.text === \"\\\\limits\" || lex.text === \"\\\\nolimits\") {\n        // We got a limit control\n        if (base && base.type === \"op\") {\n          var limits = lex.text === \"\\\\limits\";\n          base.limits = limits;\n          base.alwaysHandleSupSub = true;\n        } else if (base && base.type === \"operatorname\") {\n          if (base.alwaysHandleSupSub) {\n            base.limits = lex.text === \"\\\\limits\";\n          }\n        } else {\n          throw new ParseError(\"Limit controls must follow a math operator\", lex);\n        }\n\n        this.consume();\n      } else if (lex.text === \"^\") {\n        // We got a superscript start\n        if (superscript) {\n          throw new ParseError(\"Double superscript\", lex);\n        }\n\n        superscript = this.handleSupSubscript(\"superscript\");\n      } else if (lex.text === \"_\") {\n        // We got a subscript start\n        if (subscript) {\n          throw new ParseError(\"Double subscript\", lex);\n        }\n\n        subscript = this.handleSupSubscript(\"subscript\");\n      } else if (lex.text === \"'\") {\n        // We got a prime\n        if (superscript) {\n          throw new ParseError(\"Double superscript\", lex);\n        }\n\n        var prime = {\n          type: \"textord\",\n          mode: this.mode,\n          text: \"\\\\prime\"\n        }; // Many primes can be grouped together, so we handle this here\n\n        var primes = [prime];\n        this.consume(); // Keep lexing tokens until we get something that's not a prime\n\n        while (this.fetch().text === \"'\") {\n          // For each one, add another prime to the list\n          primes.push(prime);\n          this.consume();\n        } // If there's a superscript following the primes, combine that\n        // superscript in with the primes.\n\n\n        if (this.fetch().text === \"^\") {\n          primes.push(this.handleSupSubscript(\"superscript\"));\n        } // Put everything into an ordgroup as the superscript\n\n\n        superscript = {\n          type: \"ordgroup\",\n          mode: this.mode,\n          body: primes\n        };\n      } else if (uSubsAndSups[lex.text]) {\n        // A Unicode subscript or superscript character.\n        // We treat these similarly to the unicode-math package.\n        // So we render a string of Unicode (sub|super)scripts the\n        // same as a (sub|super)script of regular characters.\n        var isSub = unicodeSubRegEx.test(lex.text);\n        var subsupTokens = [];\n        subsupTokens.push(new Token(uSubsAndSups[lex.text]));\n        this.consume(); // Continue fetching tokens to fill out the string.\n\n        while (true) {\n          var token = this.fetch().text;\n\n          if (!uSubsAndSups[token]) {\n            break;\n          }\n\n          if (unicodeSubRegEx.test(token) !== isSub) {\n            break;\n          }\n\n          subsupTokens.unshift(new Token(uSubsAndSups[token]));\n          this.consume();\n        } // Now create a (sub|super)script.\n\n\n        var body = this.subparse(subsupTokens);\n\n        if (isSub) {\n          subscript = {\n            type: \"ordgroup\",\n            mode: \"math\",\n            body\n          };\n        } else {\n          superscript = {\n            type: \"ordgroup\",\n            mode: \"math\",\n            body\n          };\n        }\n      } else {\n        // If it wasn't ^, _, or ', stop parsing super/subscripts\n        break;\n      }\n    } // Base must be set if superscript or subscript are set per logic above,\n    // but need to check here for type check to pass.\n\n\n    if (superscript || subscript) {\n      // If we got either a superscript or subscript, create a supsub\n      return {\n        type: \"supsub\",\n        mode: this.mode,\n        base: base,\n        sup: superscript,\n        sub: subscript\n      };\n    } else {\n      // Otherwise return the original body\n      return base;\n    }\n  }\n  /**\n   * Parses an entire function, including its base and all of its arguments.\n   */\n\n\n  parseFunction(breakOnTokenText, name // For determining its context\n  ) {\n    var token = this.fetch();\n    var func = token.text;\n    var funcData = functions[func];\n\n    if (!funcData) {\n      return null;\n    }\n\n    this.consume(); // consume command token\n\n    if (name && name !== \"atom\" && !funcData.allowedInArgument) {\n      throw new ParseError(\"Got function '\" + func + \"' with no arguments\" + (name ? \" as \" + name : \"\"), token);\n    } else if (this.mode === \"text\" && !funcData.allowedInText) {\n      throw new ParseError(\"Can't use function '\" + func + \"' in text mode\", token);\n    } else if (this.mode === \"math\" && funcData.allowedInMath === false) {\n      throw new ParseError(\"Can't use function '\" + func + \"' in math mode\", token);\n    }\n\n    var {\n      args,\n      optArgs\n    } = this.parseArguments(func, funcData);\n    return this.callFunction(func, args, optArgs, token, breakOnTokenText);\n  }\n  /**\n   * Call a function handler with a suitable context and arguments.\n   */\n\n\n  callFunction(name, args, optArgs, token, breakOnTokenText) {\n    var context = {\n      funcName: name,\n      parser: this,\n      token,\n      breakOnTokenText\n    };\n    var func = functions[name];\n\n    if (func && func.handler) {\n      return func.handler(context, args, optArgs);\n    } else {\n      throw new ParseError(\"No function handler for \" + name);\n    }\n  }\n  /**\n   * Parses the arguments of a function or environment\n   */\n\n\n  parseArguments(func, // Should look like \"\\name\" or \"\\begin{name}\".\n  funcData) {\n    var totalArgs = funcData.numArgs + funcData.numOptionalArgs;\n\n    if (totalArgs === 0) {\n      return {\n        args: [],\n        optArgs: []\n      };\n    }\n\n    var args = [];\n    var optArgs = [];\n\n    for (var i = 0; i < totalArgs; i++) {\n      var argType = funcData.argTypes && funcData.argTypes[i];\n      var isOptional = i < funcData.numOptionalArgs;\n\n      if (funcData.primitive && argType == null || // \\sqrt expands into primitive if optional argument doesn't exist\n      funcData.type === \"sqrt\" && i === 1 && optArgs[0] == null) {\n        argType = \"primitive\";\n      }\n\n      var arg = this.parseGroupOfType(\"argument to '\" + func + \"'\", argType, isOptional);\n\n      if (isOptional) {\n        optArgs.push(arg);\n      } else if (arg != null) {\n        args.push(arg);\n      } else {\n        // should be unreachable\n        throw new ParseError(\"Null argument, please report this as a bug\");\n      }\n    }\n\n    return {\n      args,\n      optArgs\n    };\n  }\n  /**\n   * Parses a group when the mode is changing.\n   */\n\n\n  parseGroupOfType(name, type, optional) {\n    switch (type) {\n      case \"color\":\n        return this.parseColorGroup(optional);\n\n      case \"size\":\n        return this.parseSizeGroup(optional);\n\n      case \"url\":\n        return this.parseUrlGroup(optional);\n\n      case \"math\":\n      case \"text\":\n        return this.parseArgumentGroup(optional, type);\n\n      case \"hbox\":\n        {\n          // hbox argument type wraps the argument in the equivalent of\n          // \\hbox, which is like \\text but switching to \\textstyle size.\n          var group = this.parseArgumentGroup(optional, \"text\");\n          return group != null ? {\n            type: \"styling\",\n            mode: group.mode,\n            body: [group],\n            style: \"text\" // simulate \\textstyle\n\n          } : null;\n        }\n\n      case \"raw\":\n        {\n          var token = this.parseStringGroup(\"raw\", optional);\n          return token != null ? {\n            type: \"raw\",\n            mode: \"text\",\n            string: token.text\n          } : null;\n        }\n\n      case \"primitive\":\n        {\n          if (optional) {\n            throw new ParseError(\"A primitive argument cannot be optional\");\n          }\n\n          var _group2 = this.parseGroup(name);\n\n          if (_group2 == null) {\n            throw new ParseError(\"Expected group as \" + name, this.fetch());\n          }\n\n          return _group2;\n        }\n\n      case \"original\":\n      case null:\n      case undefined:\n        return this.parseArgumentGroup(optional);\n\n      default:\n        throw new ParseError(\"Unknown group type as \" + name, this.fetch());\n    }\n  }\n  /**\n   * Discard any space tokens, fetching the next non-space token.\n   */\n\n\n  consumeSpaces() {\n    while (this.fetch().text === \" \") {\n      this.consume();\n    }\n  }\n  /**\n   * Parses a group, essentially returning the string formed by the\n   * brace-enclosed tokens plus some position information.\n   */\n\n\n  parseStringGroup(modeName, // Used to describe the mode in error messages.\n  optional) {\n    var argToken = this.gullet.scanArgument(optional);\n\n    if (argToken == null) {\n      return null;\n    }\n\n    var str = \"\";\n    var nextToken;\n\n    while ((nextToken = this.fetch()).text !== \"EOF\") {\n      str += nextToken.text;\n      this.consume();\n    }\n\n    this.consume(); // consume the end of the argument\n\n    argToken.text = str;\n    return argToken;\n  }\n  /**\n   * Parses a regex-delimited group: the largest sequence of tokens\n   * whose concatenated strings match `regex`. Returns the string\n   * formed by the tokens plus some position information.\n   */\n\n\n  parseRegexGroup(regex, modeName // Used to describe the mode in error messages.\n  ) {\n    var firstToken = this.fetch();\n    var lastToken = firstToken;\n    var str = \"\";\n    var nextToken;\n\n    while ((nextToken = this.fetch()).text !== \"EOF\" && regex.test(str + nextToken.text)) {\n      lastToken = nextToken;\n      str += lastToken.text;\n      this.consume();\n    }\n\n    if (str === \"\") {\n      throw new ParseError(\"Invalid \" + modeName + \": '\" + firstToken.text + \"'\", firstToken);\n    }\n\n    return firstToken.range(lastToken, str);\n  }\n  /**\n   * Parses a color description.\n   */\n\n\n  parseColorGroup(optional) {\n    var res = this.parseStringGroup(\"color\", optional);\n\n    if (res == null) {\n      return null;\n    }\n\n    var match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text);\n\n    if (!match) {\n      throw new ParseError(\"Invalid color: '\" + res.text + \"'\", res);\n    }\n\n    var color = match[0];\n\n    if (/^[0-9a-f]{6}$/i.test(color)) {\n      // We allow a 6-digit HTML color spec without a leading \"#\".\n      // This follows the xcolor package's HTML color model.\n      // Predefined color names are all missed by this RegEx pattern.\n      color = \"#\" + color;\n    }\n\n    return {\n      type: \"color-token\",\n      mode: this.mode,\n      color\n    };\n  }\n  /**\n   * Parses a size specification, consisting of magnitude and unit.\n   */\n\n\n  parseSizeGroup(optional) {\n    var res;\n    var isBlank = false; // don't expand before parseStringGroup\n\n    this.gullet.consumeSpaces();\n\n    if (!optional && this.gullet.future().text !== \"{\") {\n      res = this.parseRegexGroup(/^[-+]? *(?:$|\\d+|\\d+\\.\\d*|\\.\\d*) *[a-z]{0,2} *$/, \"size\");\n    } else {\n      res = this.parseStringGroup(\"size\", optional);\n    }\n\n    if (!res) {\n      return null;\n    }\n\n    if (!optional && res.text.length === 0) {\n      // Because we've tested for what is !optional, this block won't\n      // affect \\kern, \\hspace, etc. It will capture the mandatory arguments\n      // to \\genfrac and \\above.\n      res.text = \"0pt\"; // Enable \\above{}\n\n      isBlank = true; // This is here specifically for \\genfrac\n    }\n\n    var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(res.text);\n\n    if (!match) {\n      throw new ParseError(\"Invalid size: '\" + res.text + \"'\", res);\n    }\n\n    var data = {\n      number: +(match[1] + match[2]),\n      // sign + magnitude, cast to number\n      unit: match[3]\n    };\n\n    if (!validUnit(data)) {\n      throw new ParseError(\"Invalid unit: '\" + data.unit + \"'\", res);\n    }\n\n    return {\n      type: \"size\",\n      mode: this.mode,\n      value: data,\n      isBlank\n    };\n  }\n  /**\n   * Parses an URL, checking escaped letters and allowed protocols,\n   * and setting the catcode of % as an active character (as in \\hyperref).\n   */\n\n\n  parseUrlGroup(optional) {\n    this.gullet.lexer.setCatcode(\"%\", 13); // active character\n\n    this.gullet.lexer.setCatcode(\"~\", 12); // other character\n\n    var res = this.parseStringGroup(\"url\", optional);\n    this.gullet.lexer.setCatcode(\"%\", 14); // comment character\n\n    this.gullet.lexer.setCatcode(\"~\", 13); // active character\n\n    if (res == null) {\n      return null;\n    } // hyperref package allows backslashes alone in href, but doesn't\n    // generate valid links in such cases; we interpret this as\n    // \"undefined\" behaviour, and keep them as-is. Some browser will\n    // replace backslashes with forward slashes.\n\n\n    var url = res.text.replace(/\\\\([#$%&~_^{}])/g, '$1');\n    return {\n      type: \"url\",\n      mode: this.mode,\n      url\n    };\n  }\n  /**\n   * Parses an argument with the mode specified.\n   */\n\n\n  parseArgumentGroup(optional, mode) {\n    var argToken = this.gullet.scanArgument(optional);\n\n    if (argToken == null) {\n      return null;\n    }\n\n    var outerMode = this.mode;\n\n    if (mode) {\n      // Switch to specified mode\n      this.switchMode(mode);\n    }\n\n    this.gullet.beginGroup();\n    var expression = this.parseExpression(false, \"EOF\"); // TODO: find an alternative way to denote the end\n\n    this.expect(\"EOF\"); // expect the end of the argument\n\n    this.gullet.endGroup();\n    var result = {\n      type: \"ordgroup\",\n      mode: this.mode,\n      loc: argToken.loc,\n      body: expression\n    };\n\n    if (mode) {\n      // Switch mode back\n      this.switchMode(outerMode);\n    }\n\n    return result;\n  }\n  /**\n   * Parses an ordinary group, which is either a single nucleus (like \"x\")\n   * or an expression in braces (like \"{x+y}\") or an implicit group, a group\n   * that starts at the current position, and ends right before a higher explicit\n   * group ends, or at EOF.\n   */\n\n\n  parseGroup(name, // For error reporting.\n  breakOnTokenText) {\n    var firstToken = this.fetch();\n    var text = firstToken.text;\n    var result; // Try to parse an open brace or \\begingroup\n\n    if (text === \"{\" || text === \"\\\\begingroup\") {\n      this.consume();\n      var groupEnd = text === \"{\" ? \"}\" : \"\\\\endgroup\";\n      this.gullet.beginGroup(); // If we get a brace, parse an expression\n\n      var expression = this.parseExpression(false, groupEnd);\n      var lastToken = this.fetch();\n      this.expect(groupEnd); // Check that we got a matching closing brace\n\n      this.gullet.endGroup();\n      result = {\n        type: \"ordgroup\",\n        mode: this.mode,\n        loc: SourceLocation.range(firstToken, lastToken),\n        body: expression,\n        // A group formed by \\begingroup...\\endgroup is a semi-simple group\n        // which doesn't affect spacing in math mode, i.e., is transparent.\n        // https://tex.stackexchange.com/questions/1930/when-should-one-\n        // use-begingroup-instead-of-bgroup\n        semisimple: text === \"\\\\begingroup\" || undefined\n      };\n    } else {\n      // If there exists a function with this name, parse the function.\n      // Otherwise, just return a nucleus\n      result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol();\n\n      if (result == null && text[0] === \"\\\\\" && !implicitCommands.hasOwnProperty(text)) {\n        if (this.settings.throwOnError) {\n          throw new ParseError(\"Undefined control sequence: \" + text, firstToken);\n        }\n\n        result = this.formatUnsupportedCmd(text);\n        this.consume();\n      }\n    }\n\n    return result;\n  }\n  /**\n   * Form ligature-like combinations of characters for text mode.\n   * This includes inputs like \"--\", \"---\", \"``\" and \"''\".\n   * The result will simply replace multiple textord nodes with a single\n   * character in each value by a single textord node having multiple\n   * characters in its value.  The representation is still ASCII source.\n   * The group will be modified in place.\n   */\n\n\n  formLigatures(group) {\n    var n = group.length - 1;\n\n    for (var i = 0; i < n; ++i) {\n      var a = group[i]; // $FlowFixMe: Not every node type has a `text` property.\n\n      var v = a.text;\n\n      if (v === \"-\" && group[i + 1].text === \"-\") {\n        if (i + 1 < n && group[i + 2].text === \"-\") {\n          group.splice(i, 3, {\n            type: \"textord\",\n            mode: \"text\",\n            loc: SourceLocation.range(a, group[i + 2]),\n            text: \"---\"\n          });\n          n -= 2;\n        } else {\n          group.splice(i, 2, {\n            type: \"textord\",\n            mode: \"text\",\n            loc: SourceLocation.range(a, group[i + 1]),\n            text: \"--\"\n          });\n          n -= 1;\n        }\n      }\n\n      if ((v === \"'\" || v === \"`\") && group[i + 1].text === v) {\n        group.splice(i, 2, {\n          type: \"textord\",\n          mode: \"text\",\n          loc: SourceLocation.range(a, group[i + 1]),\n          text: v + v\n        });\n        n -= 1;\n      }\n    }\n  }\n  /**\n   * Parse a single symbol out of the string. Here, we handle single character\n   * symbols and special functions like \\verb.\n   */\n\n\n  parseSymbol() {\n    var nucleus = this.fetch();\n    var text = nucleus.text;\n\n    if (/^\\\\verb[^a-zA-Z]/.test(text)) {\n      this.consume();\n      var arg = text.slice(5);\n      var star = arg.charAt(0) === \"*\";\n\n      if (star) {\n        arg = arg.slice(1);\n      } // Lexer's tokenRegex is constructed to always have matching\n      // first/last characters.\n\n\n      if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) {\n        throw new ParseError(\"\\\\verb assertion failed --\\n                    please report what input caused this bug\");\n      }\n\n      arg = arg.slice(1, -1); // remove first and last char\n\n      return {\n        type: \"verb\",\n        mode: \"text\",\n        body: arg,\n        star\n      };\n    } // At this point, we should have a symbol, possibly with accents.\n    // First expand any accented base symbol according to unicodeSymbols.\n\n\n    if (unicodeSymbols.hasOwnProperty(text[0]) && !symbols[this.mode][text[0]]) {\n      // This behavior is not strict (XeTeX-compatible) in math mode.\n      if (this.settings.strict && this.mode === \"math\") {\n        this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Accented Unicode text character \\\"\" + text[0] + \"\\\" used in \" + \"math mode\", nucleus);\n      }\n\n      text = unicodeSymbols[text[0]] + text.slice(1);\n    } // Strip off any combining characters\n\n\n    var match = combiningDiacriticalMarksEndRegex.exec(text);\n\n    if (match) {\n      text = text.substring(0, match.index);\n\n      if (text === 'i') {\n        text = '\\u0131'; // dotless i, in math and text mode\n      } else if (text === 'j') {\n        text = '\\u0237'; // dotless j, in math and text mode\n      }\n    } // Recognize base symbol\n\n\n    var symbol;\n\n    if (symbols[this.mode][text]) {\n      if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) {\n        this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Latin-1/Unicode text character \\\"\" + text[0] + \"\\\" used in \" + \"math mode\", nucleus);\n      }\n\n      var group = symbols[this.mode][text].group;\n      var loc = SourceLocation.range(nucleus);\n      var s;\n\n      if (ATOMS.hasOwnProperty(group)) {\n        // $FlowFixMe\n        var family = group;\n        s = {\n          type: \"atom\",\n          mode: this.mode,\n          family,\n          loc,\n          text\n        };\n      } else {\n        // $FlowFixMe\n        s = {\n          type: group,\n          mode: this.mode,\n          loc,\n          text\n        };\n      } // $FlowFixMe\n\n\n      symbol = s;\n    } else if (text.charCodeAt(0) >= 0x80) {\n      // no symbol for e.g. ^\n      if (this.settings.strict) {\n        if (!supportedCodepoint(text.charCodeAt(0))) {\n          this.settings.reportNonstrict(\"unknownSymbol\", \"Unrecognized Unicode character \\\"\" + text[0] + \"\\\"\" + (\" (\" + text.charCodeAt(0) + \")\"), nucleus);\n        } else if (this.mode === \"math\") {\n          this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Unicode text character \\\"\" + text[0] + \"\\\" used in math mode\", nucleus);\n        }\n      } // All nonmathematical Unicode characters are rendered as if they\n      // are in text mode (wrapped in \\text) because that's what it\n      // takes to render them in LaTeX.  Setting `mode: this.mode` is\n      // another natural choice (the user requested math mode), but\n      // this makes it more difficult for getCharacterMetrics() to\n      // distinguish Unicode characters without metrics and those for\n      // which we want to simulate the letter M.\n\n\n      symbol = {\n        type: \"textord\",\n        mode: \"text\",\n        loc: SourceLocation.range(nucleus),\n        text\n      };\n    } else {\n      return null; // EOF, ^, _, {, }, etc.\n    }\n\n    this.consume(); // Transform combining characters into accents\n\n    if (match) {\n      for (var i = 0; i < match[0].length; i++) {\n        var accent = match[0][i];\n\n        if (!unicodeAccents[accent]) {\n          throw new ParseError(\"Unknown accent ' \" + accent + \"'\", nucleus);\n        }\n\n        var command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text;\n\n        if (!command) {\n          throw new ParseError(\"Accent \" + accent + \" unsupported in \" + this.mode + \" mode\", nucleus);\n        }\n\n        symbol = {\n          type: \"accent\",\n          mode: this.mode,\n          loc: SourceLocation.range(nucleus),\n          label: command,\n          isStretchy: false,\n          isShifty: true,\n          // $FlowFixMe\n          base: symbol\n        };\n      }\n    } // $FlowFixMe\n\n\n    return symbol;\n  }\n\n}\nParser.endOfExpression = [\"}\", \"\\\\endgroup\", \"\\\\end\", \"\\\\right\", \"&\"];\n\n/**\n * Provides a single function for parsing an expression using a Parser\n * TODO(emily): Remove this\n */\n\n/**\n * Parses an expression using a Parser, then returns the parsed result.\n */\nvar parseTree = function parseTree(toParse, settings) {\n  if (!(typeof toParse === 'string' || toParse instanceof String)) {\n    throw new TypeError('KaTeX can only parse string typed expression');\n  }\n\n  var parser = new Parser(toParse, settings); // Blank out any \\df@tag to avoid spurious \"Duplicate \\tag\" errors\n\n  delete parser.gullet.macros.current[\"\\\\df@tag\"];\n  var tree = parser.parse(); // Prevent a color definition from persisting between calls to katex.render().\n\n  delete parser.gullet.macros.current[\"\\\\current@color\"];\n  delete parser.gullet.macros.current[\"\\\\color\"]; // If the input used \\tag, it will set the \\df@tag macro to the tag.\n  // In this case, we separately parse the tag and wrap the tree.\n\n  if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n    if (!settings.displayMode) {\n      throw new ParseError(\"\\\\tag works only in display equations\");\n    }\n\n    tree = [{\n      type: \"tag\",\n      mode: \"text\",\n      body: tree,\n      tag: parser.subparse([new Token(\"\\\\df@tag\")])\n    }];\n  }\n\n  return tree;\n};\n\n/* eslint no-console:0 */\n\n/**\n * Parse and build an expression, and place that expression in the DOM node\n * given.\n */\nvar render = function render(expression, baseNode, options) {\n  baseNode.textContent = \"\";\n  var node = renderToDomTree(expression, options).toNode();\n  baseNode.appendChild(node);\n}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and\n// disable rendering.\n\n\nif (typeof document !== \"undefined\") {\n  if (document.compatMode !== \"CSS1Compat\") {\n    typeof console !== \"undefined\" && console.warn(\"Warning: KaTeX doesn't work in quirks mode. Make sure your \" + \"website has a suitable doctype.\");\n\n    render = function render() {\n      throw new ParseError(\"KaTeX doesn't work in quirks mode.\");\n    };\n  }\n}\n/**\n * Parse and build an expression, and return the markup for that.\n */\n\n\nvar renderToString = function renderToString(expression, options) {\n  var markup = renderToDomTree(expression, options).toMarkup();\n  return markup;\n};\n/**\n * Parse an expression and return the parse tree.\n */\n\n\nvar generateParseTree = function generateParseTree(expression, options) {\n  var settings = new Settings(options);\n  return parseTree(expression, settings);\n};\n/**\n * If the given error is a KaTeX ParseError and options.throwOnError is false,\n * renders the invalid LaTeX as a span with hover title giving the KaTeX\n * error message.  Otherwise, simply throws the error.\n */\n\n\nvar renderError = function renderError(error, expression, options) {\n  if (options.throwOnError || !(error instanceof ParseError)) {\n    throw error;\n  }\n\n  var node = buildCommon.makeSpan([\"katex-error\"], [new SymbolNode(expression)]);\n  node.setAttribute(\"title\", error.toString());\n  node.setAttribute(\"style\", \"color:\" + options.errorColor);\n  return node;\n};\n/**\n * Generates and returns the katex build tree. This is used for advanced\n * use cases (like rendering to custom output).\n */\n\n\nvar renderToDomTree = function renderToDomTree(expression, options) {\n  var settings = new Settings(options);\n\n  try {\n    var tree = parseTree(expression, settings);\n    return buildTree(tree, expression, settings);\n  } catch (error) {\n    return renderError(error, expression, settings);\n  }\n};\n/**\n * Generates and returns the katex build tree, with just HTML (no MathML).\n * This is used for advanced use cases (like rendering to custom output).\n */\n\n\nvar renderToHTMLTree = function renderToHTMLTree(expression, options) {\n  var settings = new Settings(options);\n\n  try {\n    var tree = parseTree(expression, settings);\n    return buildHTMLTree(tree, expression, settings);\n  } catch (error) {\n    return renderError(error, expression, settings);\n  }\n};\n\nvar version = \"0.16.22\";\nvar __domTree = {\n  Span,\n  Anchor,\n  SymbolNode,\n  SvgNode,\n  PathNode,\n  LineNode\n}; // ESM exports\n\nvar katex = {\n  /**\n   * Current KaTeX version\n   */\n  version,\n\n  /**\n   * Renders the given LaTeX into an HTML+MathML combination, and adds\n   * it as a child to the specified DOM node.\n   */\n  render,\n\n  /**\n   * Renders the given LaTeX into an HTML+MathML combination string,\n   * for sending to the client.\n   */\n  renderToString,\n\n  /**\n   * KaTeX error, usually during parsing.\n   */\n  ParseError,\n\n  /**\n   * The schema of Settings\n   */\n  SETTINGS_SCHEMA,\n\n  /**\n   * Parses the given LaTeX into KaTeX's internal parse tree structure,\n   * without rendering to HTML or MathML.\n   *\n   * NOTE: This method is not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */\n  __parse: generateParseTree,\n\n  /**\n   * Renders the given LaTeX into an HTML+MathML internal DOM tree\n   * representation, without flattening that representation to a string.\n   *\n   * NOTE: This method is not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */\n  __renderToDomTree: renderToDomTree,\n\n  /**\n   * Renders the given LaTeX into an HTML internal DOM tree representation,\n   * without MathML and without flattening that representation to a string.\n   *\n   * NOTE: This method is not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */\n  __renderToHTMLTree: renderToHTMLTree,\n\n  /**\n   * extends internal font metrics object with a new object\n   * each key in the new object represents a font name\n  */\n  __setFontMetrics: setFontMetrics,\n\n  /**\n   * adds a new symbol to builtin symbols table\n   */\n  __defineSymbol: defineSymbol,\n\n  /**\n   * adds a new function to builtin function list,\n   * which directly produce parse tree elements\n   * and have their own html/mathml builders\n   */\n  __defineFunction: defineFunction,\n\n  /**\n   * adds a new macro to builtin macro list\n   */\n  __defineMacro: defineMacro,\n\n  /**\n   * Expose the dom tree node types, which can be useful for type checking nodes.\n   *\n   * NOTE: These methods are not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */\n  __domTree\n};\n\nexport { ParseError, SETTINGS_SCHEMA, defineFunction as __defineFunction, defineMacro as __defineMacro, defineSymbol as __defineSymbol, __domTree, generateParseTree as __parse, renderToDomTree as __renderToDomTree, renderToHTMLTree as __renderToHTMLTree, setFontMetrics as __setFontMetrics, katex as default, render, renderToString, version };\n","// src/mathematics.ts\nimport { Extension } from \"@tiptap/core\";\n\n// src/extensions/BlockMath.ts\nimport { InputRule, mergeAttributes, Node } from \"@tiptap/core\";\nimport katex from \"katex\";\nvar BlockMath = Node.create({\n  name: \"blockMath\",\n  group: \"block\",\n  atom: true,\n  addOptions() {\n    return {\n      onClick: void 0,\n      katexOptions: void 0\n    };\n  },\n  addAttributes() {\n    return {\n      latex: {\n        default: \"\",\n        parseHTML: (element) => element.getAttribute(\"data-latex\"),\n        renderHTML: (attributes) => {\n          return {\n            \"data-latex\": attributes.latex\n          };\n        }\n      }\n    };\n  },\n  addCommands() {\n    return {\n      insertBlockMath: (options) => ({ commands, editor }) => {\n        const { latex, pos } = options;\n        if (!latex) {\n          return false;\n        }\n        return commands.insertContentAt(pos != null ? pos : editor.state.selection.from, {\n          type: this.name,\n          attrs: { latex }\n        });\n      },\n      deleteBlockMath: (options) => ({ editor, tr }) => {\n        var _a;\n        const pos = (_a = options == null ? void 0 : options.pos) != null ? _a : editor.state.selection.$from.pos;\n        const node = editor.state.doc.nodeAt(pos);\n        if (!node || node.type.name !== this.name) {\n          return false;\n        }\n        tr.delete(pos, pos + node.nodeSize);\n        return true;\n      },\n      updateBlockMath: (options) => ({ editor, tr }) => {\n        const latex = options == null ? void 0 : options.latex;\n        let pos = options == null ? void 0 : options.pos;\n        if (pos === void 0) {\n          pos = editor.state.selection.$from.pos;\n        }\n        const node = editor.state.doc.nodeAt(pos);\n        if (!node || node.type.name !== this.name) {\n          return false;\n        }\n        tr.setNodeMarkup(pos, this.type, {\n          ...node.attrs,\n          latex: latex || node.attrs.latex\n        });\n        return true;\n      }\n    };\n  },\n  parseHTML() {\n    return [\n      {\n        tag: 'div[data-type=\"block-math\"]'\n      }\n    ];\n  },\n  renderHTML({ HTMLAttributes }) {\n    return [\"div\", mergeAttributes(HTMLAttributes, { \"data-type\": \"block-math\" })];\n  },\n  addInputRules() {\n    return [\n      new InputRule({\n        find: /^\\$\\$\\$([^$]+)\\$\\$\\$$/,\n        handler: ({ state, range, match }) => {\n          const [, latex] = match;\n          const { tr } = state;\n          const start = range.from;\n          const end = range.to;\n          tr.replaceWith(start, end, this.type.create({ latex }));\n        }\n      })\n    ];\n  },\n  addNodeView() {\n    const { katexOptions } = this.options;\n    return ({ node, getPos }) => {\n      const wrapper = document.createElement(\"div\");\n      const innerWrapper = document.createElement(\"div\");\n      wrapper.className = \"tiptap-mathematics-render\";\n      if (this.editor.isEditable) {\n        wrapper.classList.add(\"tiptap-mathematics-render--editable\");\n      }\n      innerWrapper.className = \"block-math-inner\";\n      wrapper.dataset.type = \"block-math\";\n      wrapper.setAttribute(\"data-latex\", node.attrs.latex);\n      wrapper.appendChild(innerWrapper);\n      function renderMath() {\n        try {\n          katex.render(node.attrs.latex, innerWrapper, katexOptions);\n          wrapper.classList.remove(\"block-math-error\");\n        } catch {\n          wrapper.textContent = node.attrs.latex;\n          wrapper.classList.add(\"block-math-error\");\n        }\n      }\n      const handleClick = (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        const pos = getPos();\n        if (pos == null) {\n          return;\n        }\n        if (this.options.onClick) {\n          this.options.onClick(node, pos);\n        }\n      };\n      if (this.options.onClick) {\n        wrapper.addEventListener(\"click\", handleClick);\n      }\n      renderMath();\n      return {\n        dom: wrapper,\n        destroy() {\n          wrapper.removeEventListener(\"click\", handleClick);\n        }\n      };\n    };\n  }\n});\n\n// src/extensions/InlineMath.ts\nimport { InputRule as InputRule2, mergeAttributes as mergeAttributes2, Node as Node2 } from \"@tiptap/core\";\nimport katex2 from \"katex\";\nvar InlineMath = Node2.create({\n  name: \"inlineMath\",\n  group: \"inline\",\n  inline: true,\n  atom: true,\n  addOptions() {\n    return {\n      onClick: void 0,\n      katexOptions: void 0\n    };\n  },\n  addAttributes() {\n    return {\n      latex: {\n        default: \"\",\n        parseHTML: (element) => element.getAttribute(\"data-latex\"),\n        renderHTML: (attributes) => {\n          return {\n            \"data-latex\": attributes.latex\n          };\n        }\n      }\n    };\n  },\n  addCommands() {\n    return {\n      insertInlineMath: (options) => ({ editor, tr }) => {\n        var _a;\n        const latex = options.latex;\n        const from = (_a = options == null ? void 0 : options.pos) != null ? _a : editor.state.selection.from;\n        if (!latex) {\n          return false;\n        }\n        tr.replaceWith(from, from, this.type.create({ latex }));\n        return true;\n      },\n      deleteInlineMath: (options) => ({ editor, tr }) => {\n        var _a;\n        const pos = (_a = options == null ? void 0 : options.pos) != null ? _a : editor.state.selection.$from.pos;\n        const node = editor.state.doc.nodeAt(pos);\n        if (!node || node.type.name !== this.name) {\n          return false;\n        }\n        tr.delete(pos, pos + node.nodeSize);\n        return true;\n      },\n      updateInlineMath: (options) => ({ editor, tr }) => {\n        const latex = options == null ? void 0 : options.latex;\n        let pos = options == null ? void 0 : options.pos;\n        if (pos === void 0) {\n          pos = editor.state.selection.$from.pos;\n        }\n        const node = editor.state.doc.nodeAt(pos);\n        if (!node || node.type.name !== this.name) {\n          return false;\n        }\n        tr.setNodeMarkup(pos, this.type, { ...node.attrs, latex });\n        return true;\n      }\n    };\n  },\n  parseHTML() {\n    return [\n      {\n        tag: 'span[data-type=\"inline-math\"]'\n      }\n    ];\n  },\n  renderHTML({ HTMLAttributes }) {\n    return [\"span\", mergeAttributes2(HTMLAttributes, { \"data-type\": \"inline-math\" })];\n  },\n  addInputRules() {\n    return [\n      new InputRule2({\n        find: /(^|[^$])(\\$\\$([^$\\n]+?)\\$\\$)(?!\\$)/,\n        handler: ({ state, range, match }) => {\n          const latex = match[3];\n          const { tr } = state;\n          const start = range.from;\n          const end = range.to;\n          tr.replaceWith(start, end, this.type.create({ latex }));\n        }\n      })\n    ];\n  },\n  addNodeView() {\n    const { katexOptions } = this.options;\n    return ({ node, getPos }) => {\n      const wrapper = document.createElement(\"span\");\n      wrapper.className = \"tiptap-mathematics-render\";\n      if (this.editor.isEditable) {\n        wrapper.classList.add(\"tiptap-mathematics-render--editable\");\n      }\n      wrapper.dataset.type = \"inline-math\";\n      wrapper.setAttribute(\"data-latex\", node.attrs.latex);\n      function renderMath() {\n        try {\n          katex2.render(node.attrs.latex, wrapper, katexOptions);\n          wrapper.classList.remove(\"inline-math-error\");\n        } catch {\n          wrapper.textContent = node.attrs.latex;\n          wrapper.classList.add(\"inline-math-error\");\n        }\n      }\n      const handleClick = (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        const pos = getPos();\n        if (pos == null) {\n          return;\n        }\n        if (this.options.onClick) {\n          this.options.onClick(node, pos);\n        }\n      };\n      if (this.options.onClick) {\n        wrapper.addEventListener(\"click\", handleClick);\n      }\n      renderMath();\n      return {\n        dom: wrapper,\n        destroy() {\n          wrapper.removeEventListener(\"click\", handleClick);\n        }\n      };\n    };\n  }\n});\n\n// src/mathematics.ts\nvar Mathematics = Extension.create({\n  name: \"Mathematics\",\n  addOptions() {\n    return {\n      inlineOptions: void 0,\n      blockOptions: void 0,\n      katexOptions: void 0\n    };\n  },\n  addExtensions() {\n    return [\n      BlockMath.configure({ ...this.options.blockOptions, katexOptions: this.options.katexOptions }),\n      InlineMath.configure({ ...this.options.inlineOptions, katexOptions: this.options.katexOptions })\n    ];\n  }\n});\n\n// src/utils.ts\nvar mathMigrationRegex = /\\$(?!\\d+\\$)(.+?)\\$(?!\\d)/g;\nfunction createMathMigrateTransaction(editor, tr, regex = mathMigrationRegex) {\n  tr.doc.descendants((node, pos) => {\n    if (!node.isText || !node.text || !node.text.includes(\"$\")) {\n      return;\n    }\n    const { text } = node;\n    const match = node.text.match(regex);\n    if (!match) {\n      return;\n    }\n    match.forEach((mathMatch) => {\n      const start = text.indexOf(mathMatch);\n      const end = start + mathMatch.length;\n      const from = tr.mapping.map(pos + start);\n      const $from = tr.doc.resolve(from);\n      const parent = $from.parent;\n      const index = $from.index();\n      const { inlineMath } = editor.schema.nodes;\n      if (!parent.canReplaceWith(index, index + 1, inlineMath)) {\n        return;\n      }\n      tr.replaceWith(\n        tr.mapping.map(pos + start),\n        tr.mapping.map(pos + end),\n        inlineMath.create({ latex: mathMatch.slice(1, -1) })\n      );\n    });\n  });\n  tr.setMeta(\"addToHistory\", false);\n  return tr;\n}\nfunction migrateMathStrings(editor, regex = mathMigrationRegex) {\n  const tr = createMathMigrateTransaction(editor, editor.state.tr, regex);\n  editor.view.dispatch(tr);\n}\n\n// src/index.ts\nvar index_default = Mathematics;\nexport {\n  BlockMath,\n  InlineMath,\n  Mathematics,\n  createMathMigrateTransaction,\n  index_default as default,\n  mathMigrationRegex,\n  migrateMathStrings\n};\n//# sourceMappingURL=index.js.map","import validate from './validate.js';\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  //\n  // Note to future-self: No, you can't remove the `toLowerCase()` call.\n  // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351\n  return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n  var uuid = unsafeStringify(arr, offset);\n  // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n  return uuid;\n}\nexport default stringify;","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\n\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n  // lazy load so that environments that need to polyfill have a chance to do so\n  if (!getRandomValues) {\n    // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n    if (!getRandomValues) {\n      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n    }\n  }\n  return getRandomValues(rnds8);\n}","var randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n  randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n  if (native.randomUUID && !buf && !options) {\n    return native.randomUUID();\n  }\n  options = options || {};\n  var rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    offset = offset || 0;\n    for (var i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n    return buf;\n  }\n  return unsafeStringify(rnds);\n}\nexport default v4;","// src/unique-id.ts\nimport { combineTransactionSteps, Extension, findChildren, findChildrenInRange, getChangedRanges } from \"@tiptap/core\";\nimport { Fragment, Slice } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { v4 as uuidv4 } from \"uuid\";\n\n// src/helpers/removeDuplicates.ts\nfunction removeDuplicates(array, by = JSON.stringify) {\n  const seen = {};\n  return array.filter((item) => {\n    const key = by(item);\n    return Object.prototype.hasOwnProperty.call(seen, key) ? false : seen[key] = true;\n  });\n}\n\n// src/helpers/findDuplicates.ts\nfunction findDuplicates(items) {\n  const filtered = items.filter((el, index) => items.indexOf(el) !== index);\n  const duplicates = removeDuplicates(filtered);\n  return duplicates;\n}\n\n// src/unique-id.ts\nvar UniqueID = Extension.create({\n  name: \"uniqueID\",\n  // we’ll set a very high priority to make sure this runs first\n  // and is compatible with `appendTransaction` hooks of other extensions\n  priority: 1e4,\n  addOptions() {\n    return {\n      attributeName: \"id\",\n      types: [],\n      generateID: () => uuidv4(),\n      filterTransaction: null\n    };\n  },\n  addGlobalAttributes() {\n    return [\n      {\n        types: this.options.types,\n        attributes: {\n          [this.options.attributeName]: {\n            default: null,\n            parseHTML: (element) => element.getAttribute(`data-${this.options.attributeName}`),\n            renderHTML: (attributes) => {\n              if (!attributes[this.options.attributeName]) {\n                return {};\n              }\n              return {\n                [`data-${this.options.attributeName}`]: attributes[this.options.attributeName]\n              };\n            }\n          }\n        }\n      }\n    ];\n  },\n  // check initial content for missing ids\n  onCreate() {\n    var _a;\n    const collaboration = this.editor.extensionManager.extensions.find((ext) => ext.name === \"collaboration\");\n    const collaborationCaret = this.editor.extensionManager.extensions.find((ext) => ext.name === \"collaborationCaret\");\n    const collabExtensions = [collaboration, collaborationCaret].filter(Boolean);\n    const collab = collabExtensions.find((ext) => {\n      var _a2;\n      return (_a2 = ext == null ? void 0 : ext.options) == null ? void 0 : _a2.provider;\n    });\n    const provider = (_a = collab == null ? void 0 : collab.options) == null ? void 0 : _a.provider;\n    const createIds = () => {\n      const { view, state } = this.editor;\n      const { tr, doc } = state;\n      const { types, attributeName, generateID } = this.options;\n      const nodesWithoutId = findChildren(doc, (node) => {\n        return types.includes(node.type.name) && node.attrs[attributeName] === null;\n      });\n      nodesWithoutId.forEach(({ node, pos }) => {\n        tr.setNodeMarkup(pos, void 0, {\n          ...node.attrs,\n          [attributeName]: generateID({ node, pos })\n        });\n      });\n      tr.setMeta(\"addToHistory\", false);\n      view.dispatch(tr);\n      if (provider) {\n        provider.off(\"synced\", createIds);\n      }\n    };\n    if (collab) {\n      if (!provider) {\n        return createIds();\n      }\n      provider.on(\"synced\", createIds);\n    } else {\n      return createIds();\n    }\n  },\n  addProseMirrorPlugins() {\n    let dragSourceElement = null;\n    let transformPasted = false;\n    return [\n      new Plugin({\n        key: new PluginKey(\"uniqueID\"),\n        appendTransaction: (transactions, oldState, newState) => {\n          const hasDocChanges = transactions.some((transaction) => transaction.docChanged) && !oldState.doc.eq(newState.doc);\n          const filterTransactions = this.options.filterTransaction && transactions.some((tr2) => {\n            var _a, _b;\n            return !((_b = (_a = this.options).filterTransaction) == null ? void 0 : _b.call(_a, tr2));\n          });\n          const isCollabTransaction = transactions.find((tr2) => tr2.getMeta(\"y-sync$\"));\n          if (isCollabTransaction) {\n            return;\n          }\n          if (!hasDocChanges || filterTransactions) {\n            return;\n          }\n          const { tr } = newState;\n          const { types, attributeName, generateID } = this.options;\n          const transform = combineTransactionSteps(oldState.doc, transactions);\n          const { mapping } = transform;\n          const changes = getChangedRanges(transform);\n          changes.forEach(({ newRange }) => {\n            const newNodes = findChildrenInRange(newState.doc, newRange, (node) => {\n              return types.includes(node.type.name);\n            });\n            const newIds = newNodes.map(({ node }) => node.attrs[attributeName]).filter((id) => id !== null);\n            newNodes.forEach(({ node, pos }, i) => {\n              var _a;\n              const id = (_a = tr.doc.nodeAt(pos)) == null ? void 0 : _a.attrs[attributeName];\n              if (id === null) {\n                tr.setNodeMarkup(pos, void 0, {\n                  ...node.attrs,\n                  [attributeName]: generateID({ node, pos })\n                });\n                return;\n              }\n              const nextNode = newNodes[i + 1];\n              if (nextNode && node.content.size === 0) {\n                tr.setNodeMarkup(nextNode.pos, void 0, {\n                  ...nextNode.node.attrs,\n                  [attributeName]: id\n                });\n                newIds[i + 1] = id;\n                if (nextNode.node.attrs[attributeName]) {\n                  return;\n                }\n                const generatedId = generateID({ node, pos });\n                tr.setNodeMarkup(pos, void 0, {\n                  ...node.attrs,\n                  [attributeName]: generatedId\n                });\n                newIds[i] = generatedId;\n                return tr;\n              }\n              const duplicatedNewIds = findDuplicates(newIds);\n              const { deleted } = mapping.invert().mapResult(pos);\n              const newNode = deleted && duplicatedNewIds.includes(id);\n              if (newNode) {\n                tr.setNodeMarkup(pos, void 0, {\n                  ...node.attrs,\n                  [attributeName]: generateID({ node, pos })\n                });\n              }\n            });\n          });\n          if (!tr.steps.length) {\n            return;\n          }\n          tr.setStoredMarks(newState.tr.storedMarks);\n          return tr;\n        },\n        // we register a global drag handler to track the current drag source element\n        view(view) {\n          const handleDragstart = (event) => {\n            var _a;\n            dragSourceElement = ((_a = view.dom.parentElement) == null ? void 0 : _a.contains(event.target)) ? view.dom.parentElement : null;\n          };\n          window.addEventListener(\"dragstart\", handleDragstart);\n          return {\n            destroy() {\n              window.removeEventListener(\"dragstart\", handleDragstart);\n            }\n          };\n        },\n        props: {\n          // `handleDOMEvents` is called before `transformPasted`\n          // so we can do some checks before\n          handleDOMEvents: {\n            // only create new ids for dropped content\n            // or dropped content while holding `alt`\n            // or content is dragged from another editor\n            drop: (view, event) => {\n              var _a, _b;\n              if (dragSourceElement !== view.dom.parentElement || ((_a = event.dataTransfer) == null ? void 0 : _a.effectAllowed) === \"copyMove\" || ((_b = event.dataTransfer) == null ? void 0 : _b.effectAllowed) === \"copy\") {\n                dragSourceElement = null;\n                transformPasted = true;\n              }\n              return false;\n            },\n            // always create new ids on pasted content\n            paste: () => {\n              transformPasted = true;\n              return false;\n            }\n          },\n          // we’ll remove ids for every pasted node\n          // so we can create a new one within `appendTransaction`\n          transformPasted: (slice) => {\n            if (!transformPasted) {\n              return slice;\n            }\n            const { types, attributeName } = this.options;\n            const removeId = (fragment) => {\n              const list = [];\n              fragment.forEach((node) => {\n                if (node.isText) {\n                  list.push(node);\n                  return;\n                }\n                if (!types.includes(node.type.name)) {\n                  list.push(node.copy(removeId(node.content)));\n                  return;\n                }\n                const nodeWithoutId = node.type.create(\n                  {\n                    ...node.attrs,\n                    [attributeName]: null\n                  },\n                  removeId(node.content),\n                  node.marks\n                );\n                list.push(nodeWithoutId);\n              });\n              return Fragment.from(list);\n            };\n            transformPasted = false;\n            return new Slice(removeId(slice.content), slice.openStart, slice.openEnd);\n          }\n        }\n      })\n    ];\n  }\n});\n\n// src/index.ts\nvar index_default = UniqueID;\nexport {\n  UniqueID,\n  index_default as default\n};\n//# sourceMappingURL=index.js.map","export default () => {\n\t// https://mths.be/emoji\n\treturn /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26D3\\uFE0F?(?:\\u200D\\uD83D\\uDCA5)?|\\u26F9(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF43\\uDF45-\\uDF4A\\uDF4C-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDF44(?:\\u200D\\uD83D\\uDFEB)?|\\uDF4B(?:\\u200D\\uD83D\\uDFE9)?|\\uDFC3(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E-\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4\\uDEB5](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE41\\uDE43\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED8\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC08(?:\\u200D\\u2B1B)?|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC26(?:\\u200D(?:\\u2B1B|\\uD83D\\uDD25))?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDD75(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?|\\uDE42(?:\\u200D[\\u2194\\u2195]\\uFE0F?)?|\\uDEB6(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3C-\\uDD3E\\uDDB8\\uDDB9\\uDDCD\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE8A\\uDE8E-\\uDEC2\\uDEC6\\uDEC8\\uDECD-\\uDEDC\\uDEDF-\\uDEEA\\uDEEF]|\\uDDCE(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1|\\uDDD1\\u200D\\uD83E\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?|\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;\n};\n","/**\n * @var {Object} cache\n */\nvar cache = new Map();\n/**\n * Check if emoji is supported with cache\n *\n * @params {string} unicode\n * @returns {boolean}\n */\nfunction isEmojiSupported(unicode) {\n    if (cache.has(unicode)) {\n        return cache.get(unicode);\n    }\n    var supported = isSupported(unicode);\n    cache.set(unicode, supported);\n    return supported;\n}\n/**\n * Request to handle cache directly\n *\n * @params {Map} store\n */\nfunction setCacheHandler(store) {\n    cache = store;\n}\n/**\n * Check if the two pixels parts are perfectly the sames\n *\n * @params {string} unicode\n * @returns {boolean}\n */\nvar isSupported = (function () {\n    var ctx = null;\n    try {\n        ctx = document.createElement('canvas').getContext('2d');\n    }\n    catch (_a) { }\n    // Not in browser env\n    if (!ctx) {\n        return function () { return false; };\n    }\n    var CANVAS_HEIGHT = 25;\n    var CANVAS_WIDTH = 20;\n    var textSize = Math.floor(CANVAS_HEIGHT / 2);\n    // Initialize convas context\n    ctx.font = textSize + 'px Arial, Sans-Serif';\n    ctx.textBaseline = 'top';\n    ctx.canvas.width = CANVAS_WIDTH * 2;\n    ctx.canvas.height = CANVAS_HEIGHT;\n    return function (unicode) {\n        ctx.clearRect(0, 0, CANVAS_WIDTH * 2, CANVAS_HEIGHT);\n        // Draw in red on the left\n        ctx.fillStyle = '#FF0000';\n        ctx.fillText(unicode, 0, 22);\n        // Draw in blue on right\n        ctx.fillStyle = '#0000FF';\n        ctx.fillText(unicode, CANVAS_WIDTH, 22);\n        var a = ctx.getImageData(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT).data;\n        var count = a.length;\n        var i = 0;\n        // Search the first visible pixel\n        for (; i < count && !a[i + 3]; i += 4)\n            ;\n        // No visible pixel\n        if (i >= count) {\n            return false;\n        }\n        // Emoji has immutable color, so we check the color of the emoji in two different colors\n        // the result show be the same.\n        var x = CANVAS_WIDTH + ((i / 4) % CANVAS_WIDTH);\n        var y = Math.floor(i / 4 / CANVAS_WIDTH);\n        var b = ctx.getImageData(x, y, 1, 1).data;\n        if (a[i] !== b[0] || a[i + 2] !== b[2]) {\n            return false;\n        }\n        // Some emojis are a contraction of different ones, so if it's not\n        // supported, it will show multiple characters\n        if (ctx.measureText(unicode).width >= CANVAS_WIDTH) {\n            return false;\n        }\n        // Supported\n        return true;\n    };\n})();\n\nexport { isEmojiSupported, setCacheHandler };\n//# sourceMappingURL=is-emoji-supported.js.map\n","// src/emoji.ts\nimport {\n  combineTransactionSteps,\n  escapeForRegEx,\n  findChildrenInRange,\n  getChangedRanges,\n  InputRule,\n  mergeAttributes,\n  Node,\n  nodeInputRule,\n  PasteRule\n} from \"@tiptap/core\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport Suggestion from \"@tiptap/suggestion\";\nimport emojiRegex from \"emoji-regex\";\nimport { isEmojiSupported } from \"is-emoji-supported\";\n\n// src/data.ts\nvar emojis = [\n  {\n    emoji: \"\\u{1F1E6}\",\n    name: \"regional_indicator_a\",\n    shortcodes: [\"regional_indicator_a\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1E7}\",\n    name: \"regional_indicator_b\",\n    shortcodes: [\"regional_indicator_b\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1E8}\",\n    name: \"regional_indicator_c\",\n    shortcodes: [\"regional_indicator_c\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1E9}\",\n    name: \"regional_indicator_d\",\n    shortcodes: [\"regional_indicator_d\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1EA}\",\n    name: \"regional_indicator_e\",\n    shortcodes: [\"regional_indicator_e\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1EB}\",\n    name: \"regional_indicator_f\",\n    shortcodes: [\"regional_indicator_f\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1EC}\",\n    name: \"regional_indicator_g\",\n    shortcodes: [\"regional_indicator_g\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1ED}\",\n    name: \"regional_indicator_h\",\n    shortcodes: [\"regional_indicator_h\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1EE}\",\n    name: \"regional_indicator_i\",\n    shortcodes: [\"regional_indicator_i\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1EF}\",\n    name: \"regional_indicator_j\",\n    shortcodes: [\"regional_indicator_j\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1F0}\",\n    name: \"regional_indicator_k\",\n    shortcodes: [\"regional_indicator_k\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1F1}\",\n    name: \"regional_indicator_l\",\n    shortcodes: [\"regional_indicator_l\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1F2}\",\n    name: \"regional_indicator_m\",\n    shortcodes: [\"regional_indicator_m\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1F3}\",\n    name: \"regional_indicator_n\",\n    shortcodes: [\"regional_indicator_n\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1F4}\",\n    name: \"regional_indicator_o\",\n    shortcodes: [\"regional_indicator_o\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1F5}\",\n    name: \"regional_indicator_p\",\n    shortcodes: [\"regional_indicator_p\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1F6}\",\n    name: \"regional_indicator_q\",\n    shortcodes: [\"regional_indicator_q\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1F7}\",\n    name: \"regional_indicator_r\",\n    shortcodes: [\"regional_indicator_r\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1F8}\",\n    name: \"regional_indicator_s\",\n    shortcodes: [\"regional_indicator_s\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1F9}\",\n    name: \"regional_indicator_t\",\n    shortcodes: [\"regional_indicator_t\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1FA}\",\n    name: \"regional_indicator_u\",\n    shortcodes: [\"regional_indicator_u\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1FB}\",\n    name: \"regional_indicator_v\",\n    shortcodes: [\"regional_indicator_v\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1FC}\",\n    name: \"regional_indicator_w\",\n    shortcodes: [\"regional_indicator_w\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1FD}\",\n    name: \"regional_indicator_x\",\n    shortcodes: [\"regional_indicator_x\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1FE}\",\n    name: \"regional_indicator_y\",\n    shortcodes: [\"regional_indicator_y\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F1FF}\",\n    name: \"regional_indicator_z\",\n    shortcodes: [\"regional_indicator_z\"],\n    tags: [],\n    group: \"\",\n    emoticons: [],\n    version: 0\n  },\n  {\n    emoji: \"\\u{1F600}\",\n    name: \"grinning\",\n    shortcodes: [\"grinning\", \"grinning_face\"],\n    tags: [\"face\", \"grin\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f600.png\"\n  },\n  {\n    emoji: \"\\u{1F603}\",\n    name: \"smiley\",\n    shortcodes: [\"grinning_face_with_big_eyes\", \"smiley\"],\n    tags: [\"face\", \"mouth\", \"open\", \"smile\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f603.png\"\n  },\n  {\n    emoji: \"\\u{1F604}\",\n    name: \"smile\",\n    shortcodes: [\"grinning_face_with_closed_eyes\", \"smile\"],\n    tags: [\"eye\", \"face\", \"mouth\", \"open\", \"smile\"],\n    group: \"\",\n    emoticons: [\":D\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f604.png\"\n  },\n  {\n    emoji: \"\\u{1F601}\",\n    name: \"grin\",\n    shortcodes: [\"beaming_face\", \"grin\"],\n    tags: [\"eye\", \"face\", \"grin\", \"smile\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f601.png\"\n  },\n  {\n    emoji: \"\\u{1F606}\",\n    name: \"laughing\",\n    shortcodes: [\"laughing\", \"lol\", \"satisfied\", \"squinting_face\"],\n    tags: [\"face\", \"laugh\", \"mouth\", \"satisfied\", \"smile\"],\n    group: \"\",\n    emoticons: [\"xD\", \"XD\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f606.png\"\n  },\n  {\n    emoji: \"\\u{1F605}\",\n    name: \"sweat_smile\",\n    shortcodes: [\"grinning_face_with_sweat\", \"sweat_smile\"],\n    tags: [\"cold\", \"face\", \"open\", \"smile\", \"sweat\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f605.png\"\n  },\n  {\n    emoji: \"\\u{1F923}\",\n    name: \"rofl\",\n    shortcodes: [\"rofl\"],\n    tags: [\"face\", \"floor\", \"laugh\", \"rofl\", \"rolling\", \"rotfl\"],\n    group: \"\",\n    emoticons: [\":'D\"],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f923.png\"\n  },\n  {\n    emoji: \"\\u{1F602}\",\n    name: \"joy\",\n    shortcodes: [\"joy\", \"lmao\", \"tears_of_joy\"],\n    tags: [\"face\", \"joy\", \"laugh\", \"tear\"],\n    group: \"\",\n    emoticons: [\":')\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f602.png\"\n  },\n  {\n    emoji: \"\\u{1F642}\",\n    name: \"slightly_smiling_face\",\n    shortcodes: [\"slightly_smiling_face\"],\n    tags: [\"face\", \"smile\"],\n    group: \"\",\n    emoticons: [\":)\"],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f642.png\"\n  },\n  {\n    emoji: \"\\u{1F643}\",\n    name: \"upside_down_face\",\n    shortcodes: [\"upside_down_face\"],\n    tags: [\"face\", \"upside-down\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f643.png\"\n  },\n  {\n    emoji: \"\\u{1FAE0}\",\n    name: \"melting_face\",\n    shortcodes: [\"melt\", \"melting_face\"],\n    tags: [\"disappear\", \"dissolve\", \"liquid\", \"melt\"],\n    group: \"\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F609}\",\n    name: \"wink\",\n    shortcodes: [\"wink\", \"winking_face\"],\n    tags: [\"face\", \"wink\"],\n    group: \"\",\n    emoticons: [\";)\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f609.png\"\n  },\n  {\n    emoji: \"\\u{1F60A}\",\n    name: \"blush\",\n    shortcodes: [\"blush\", \"smiling_face_with_closed_eyes\"],\n    tags: [\"blush\", \"eye\", \"face\", \"smile\"],\n    group: \"\",\n    emoticons: [\":>\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f60a.png\"\n  },\n  {\n    emoji: \"\\u{1F607}\",\n    name: \"innocent\",\n    shortcodes: [\"halo\", \"innocent\"],\n    tags: [\"angel\", \"face\", \"fantasy\", \"halo\", \"innocent\"],\n    group: \"\",\n    emoticons: [\"o:)\", \"O:)\"],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f607.png\"\n  },\n  {\n    emoji: \"\\u{1F970}\",\n    name: \"smiling_face_with_three_hearts\",\n    shortcodes: [\"smiling_face_with_3_hearts\"],\n    tags: [\"adore\", \"crush\", \"hearts\", \"in love\"],\n    group: \"\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f970.png\"\n  },\n  {\n    emoji: \"\\u{1F60D}\",\n    name: \"heart_eyes\",\n    shortcodes: [\"heart_eyes\", \"smiling_face_with_heart_eyes\"],\n    tags: [\"eye\", \"face\", \"love\", \"smile\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f60d.png\"\n  },\n  {\n    emoji: \"\\u{1F929}\",\n    name: \"star_struck\",\n    shortcodes: [\"star_struck\"],\n    tags: [\"eyes\", \"face\", \"grinning\", \"star\"],\n    group: \"\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f929.png\"\n  },\n  {\n    emoji: \"\\u{1F618}\",\n    name: \"kissing_heart\",\n    shortcodes: [\"blowing_a_kiss\", \"kissing_heart\"],\n    tags: [\"face\", \"kiss\"],\n    group: \"\",\n    emoticons: [\":x\", \":X\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f618.png\"\n  },\n  {\n    emoji: \"\\u{1F617}\",\n    name: \"kissing\",\n    shortcodes: [\"kissing\", \"kissing_face\"],\n    tags: [\"face\", \"kiss\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f617.png\"\n  },\n  {\n    emoji: \"\\u263A\",\n    name: \"relaxed\",\n    shortcodes: [\"relaxed\", \"smiling_face\"],\n    tags: [\"face\", \"outlined\", \"relaxed\", \"smile\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/263a-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F61A}\",\n    name: \"kissing_closed_eyes\",\n    shortcodes: [\"kissing_closed_eyes\", \"kissing_face_with_closed_eyes\"],\n    tags: [\"closed\", \"eye\", \"face\", \"kiss\"],\n    group: \"\",\n    emoticons: [\":*\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f61a.png\"\n  },\n  {\n    emoji: \"\\u{1F619}\",\n    name: \"kissing_smiling_eyes\",\n    shortcodes: [\"kissing_face_with_smiling_eyes\", \"kissing_smiling_eyes\"],\n    tags: [\"eye\", \"face\", \"kiss\", \"smile\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f619.png\"\n  },\n  {\n    emoji: \"\\u{1F972}\",\n    name: \"smiling_face_with_tear\",\n    shortcodes: [\"smiling_face_with_tear\"],\n    tags: [\"grateful\", \"proud\", \"relieved\", \"smiling\", \"tear\", \"touched\"],\n    group: \"\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f972.png\"\n  },\n  {\n    emoji: \"\\u{1F60B}\",\n    name: \"yum\",\n    shortcodes: [\"savoring_food\", \"yum\"],\n    tags: [\"delicious\", \"face\", \"savouring\", \"smile\", \"yum\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f60b.png\"\n  },\n  {\n    emoji: \"\\u{1F61B}\",\n    name: \"stuck_out_tongue\",\n    shortcodes: [\"face_with_tongue\", \"stuck_out_tongue\"],\n    tags: [\"face\", \"tongue\"],\n    group: \"\",\n    emoticons: [\":p\", \":P\"],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f61b.png\"\n  },\n  {\n    emoji: \"\\u{1F61C}\",\n    name: \"stuck_out_tongue_winking_eye\",\n    shortcodes: [\"stuck_out_tongue_winking_eye\"],\n    tags: [\"eye\", \"face\", \"joke\", \"tongue\", \"wink\"],\n    group: \"\",\n    emoticons: [\";p\", \";P\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f61c.png\"\n  },\n  {\n    emoji: \"\\u{1F92A}\",\n    name: \"zany_face\",\n    shortcodes: [\"zany\", \"zany_face\"],\n    tags: [\"eye\", \"goofy\", \"large\", \"small\"],\n    group: \"\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f92a.png\"\n  },\n  {\n    emoji: \"\\u{1F61D}\",\n    name: \"stuck_out_tongue_closed_eyes\",\n    shortcodes: [\"stuck_out_tongue_closed_eyes\"],\n    tags: [\"eye\", \"face\", \"horrible\", \"taste\", \"tongue\"],\n    group: \"\",\n    emoticons: [\"xp\", \"xP\", \"XP\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f61d.png\"\n  },\n  {\n    emoji: \"\\u{1F911}\",\n    name: \"money_mouth_face\",\n    shortcodes: [\"money_mouth_face\"],\n    tags: [\"face\", \"money\", \"mouth\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f911.png\"\n  },\n  {\n    emoji: \"\\u{1F917}\",\n    name: \"hugs\",\n    shortcodes: [\"hug\", \"hugging\", \"hugging_face\"],\n    tags: [\"face\", \"hug\", \"hugging\", \"open hands\", \"smiling face\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f917.png\"\n  },\n  {\n    emoji: \"\\u{1F92D}\",\n    name: \"hand_over_mouth\",\n    shortcodes: [\"face_with_hand_over_mouth\", \"hand_over_mouth\"],\n    tags: [\"whoops\"],\n    group: \"\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f92d.png\"\n  },\n  {\n    emoji: \"\\u{1FAE2}\",\n    name: \"face_with_open_eyes_and_hand_over_mouth\",\n    shortcodes: [\"face_with_open_eyes_hand_over_mouth\", \"gasp\"],\n    tags: [\"amazement\", \"awe\", \"disbelief\", \"embarrass\", \"scared\", \"surprise\"],\n    group: \"\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1FAE3}\",\n    name: \"face_with_peeking_eye\",\n    shortcodes: [\"face_with_peeking_eye\", \"peek\"],\n    tags: [\"captivated\", \"peep\", \"stare\"],\n    group: \"\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F92B}\",\n    name: \"shushing_face\",\n    shortcodes: [\"shush\", \"shushing_face\"],\n    tags: [\"quiet\", \"shush\"],\n    group: \"\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f92b.png\"\n  },\n  {\n    emoji: \"\\u{1F914}\",\n    name: \"thinking\",\n    shortcodes: [\"thinking\", \"thinking_face\", \"wtf\"],\n    tags: [\"face\", \"thinking\"],\n    group: \"\",\n    emoticons: [\":l\", \":L\"],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f914.png\"\n  },\n  {\n    emoji: \"\\u{1FAE1}\",\n    name: \"saluting_face\",\n    shortcodes: [\"salute\", \"saluting_face\"],\n    tags: [\"ok\", \"salute\", \"sunny\", \"troops\", \"yes\"],\n    group: \"\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F910}\",\n    name: \"zipper_mouth_face\",\n    shortcodes: [\"zipper_mouth\", \"zipper_mouth_face\"],\n    tags: [\"face\", \"mouth\", \"zip\", \"zipper\"],\n    group: \"\",\n    emoticons: [\":z\", \":Z\"],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f910.png\"\n  },\n  {\n    emoji: \"\\u{1F928}\",\n    name: \"raised_eyebrow\",\n    shortcodes: [\"face_with_raised_eyebrow\", \"raised_eyebrow\"],\n    tags: [\"distrust\", \"skeptic\"],\n    group: \"\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f928.png\"\n  },\n  {\n    emoji: \"\\u{1F610}\",\n    name: \"neutral_face\",\n    shortcodes: [\"neutral\", \"neutral_face\"],\n    tags: [\"deadpan\", \"face\", \"meh\", \"neutral\"],\n    group: \"\",\n    emoticons: [\":|\"],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f610.png\"\n  },\n  {\n    emoji: \"\\u{1F611}\",\n    name: \"expressionless\",\n    shortcodes: [\"expressionless\", \"expressionless_face\"],\n    tags: [\"expressionless\", \"face\", \"inexpressive\", \"meh\", \"unexpressive\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f611.png\"\n  },\n  {\n    emoji: \"\\u{1F636}\",\n    name: \"no_mouth\",\n    shortcodes: [\"no_mouth\"],\n    tags: [\"face\", \"mouth\", \"quiet\", \"silent\"],\n    group: \"\",\n    emoticons: [\":#\"],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f636.png\"\n  },\n  {\n    emoji: \"\\u{1FAE5}\",\n    name: \"dotted_line_face\",\n    shortcodes: [\"dotted_line_face\"],\n    tags: [\"depressed\", \"disappear\", \"hide\", \"introvert\", \"invisible\"],\n    group: \"\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F636}\\u200D\\u{1F32B}\",\n    name: \"face_in_clouds\",\n    shortcodes: [\"in_clouds\"],\n    tags: [\"absentminded\", \"face in the fog\", \"head in clouds\"],\n    group: \"\",\n    emoticons: [],\n    version: 13.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f636-200d-1f32b-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F60F}\",\n    name: \"smirk\",\n    shortcodes: [\"smirk\", \"smirking\", \"smirking_face\"],\n    tags: [\"face\", \"smirk\"],\n    group: \"\",\n    emoticons: [\":j\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f60f.png\"\n  },\n  {\n    emoji: \"\\u{1F612}\",\n    name: \"unamused\",\n    shortcodes: [\"unamused\", \"unamused_face\"],\n    tags: [\"face\", \"unamused\", \"unhappy\"],\n    group: \"\",\n    emoticons: [\":?\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f612.png\"\n  },\n  {\n    emoji: \"\\u{1F644}\",\n    name: \"roll_eyes\",\n    shortcodes: [\"rolling_eyes\"],\n    tags: [\"eyeroll\", \"eyes\", \"face\", \"rolling\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f644.png\"\n  },\n  {\n    emoji: \"\\u{1F62C}\",\n    name: \"grimacing\",\n    shortcodes: [\"grimacing\", \"grimacing_face\"],\n    tags: [\"face\", \"grimace\"],\n    group: \"\",\n    emoticons: [\"8D\"],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f62c.png\"\n  },\n  {\n    emoji: \"\\u{1F62E}\\u200D\\u{1F4A8}\",\n    name: \"face_exhaling\",\n    shortcodes: [\"exhale\", \"exhaling\"],\n    tags: [\"exhale\", \"gasp\", \"groan\", \"relief\", \"whisper\", \"whistle\"],\n    group: \"\",\n    emoticons: [],\n    version: 13.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f62e-200d-1f4a8.png\"\n  },\n  {\n    emoji: \"\\u{1F925}\",\n    name: \"lying_face\",\n    shortcodes: [\"lying\", \"lying_face\"],\n    tags: [\"face\", \"lie\", \"pinocchio\"],\n    group: \"\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f925.png\"\n  },\n  {\n    emoji: \"\\u{1FAE8}\",\n    name: \"shaking_face\",\n    shortcodes: [\"shaking\", \"shaking_face\"],\n    tags: [\"earthquake\", \"face\", \"shaking\", \"shock\", \"vibrate\"],\n    group: \"\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1F642}\\u200D\\u2194\",\n    name: \"head_shaking_horizontally\",\n    shortcodes: [\"head_shaking_horizontally\"],\n    tags: [\"no\", \"shake\"],\n    group: \"\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F642}\\u200D\\u2195\",\n    name: \"head_shaking_vertically\",\n    shortcodes: [\"head_shaking_vertically\"],\n    tags: [\"nod\", \"yes\"],\n    group: \"\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F60C}\",\n    name: \"relieved\",\n    shortcodes: [\"relieved\", \"relieved_face\"],\n    tags: [\"face\", \"relieved\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f60c.png\"\n  },\n  {\n    emoji: \"\\u{1F614}\",\n    name: \"pensive\",\n    shortcodes: [\"pensive\", \"pensive_face\"],\n    tags: [\"dejected\", \"face\", \"pensive\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f614.png\"\n  },\n  {\n    emoji: \"\\u{1F62A}\",\n    name: \"sleepy\",\n    shortcodes: [\"sleepy\", \"sleepy_face\"],\n    tags: [\"face\", \"good night\", \"sleep\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f62a.png\"\n  },\n  {\n    emoji: \"\\u{1F924}\",\n    name: \"drooling_face\",\n    shortcodes: [\"drooling\", \"drooling_face\"],\n    tags: [\"drooling\", \"face\"],\n    group: \"\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f924.png\"\n  },\n  {\n    emoji: \"\\u{1F634}\",\n    name: \"sleeping\",\n    shortcodes: [\"sleeping\", \"sleeping_face\"],\n    tags: [\"face\", \"good night\", \"sleep\", \"zzz\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f634.png\"\n  },\n  {\n    emoji: \"\\u{1F637}\",\n    name: \"mask\",\n    shortcodes: [\"mask\", \"medical_mask\"],\n    tags: [\"cold\", \"doctor\", \"face\", \"mask\", \"sick\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f637.png\"\n  },\n  {\n    emoji: \"\\u{1F912}\",\n    name: \"face_with_thermometer\",\n    shortcodes: [\"face_with_thermometer\"],\n    tags: [\"face\", \"ill\", \"sick\", \"thermometer\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f912.png\"\n  },\n  {\n    emoji: \"\\u{1F915}\",\n    name: \"face_with_head_bandage\",\n    shortcodes: [\"face_with_head_bandage\"],\n    tags: [\"bandage\", \"face\", \"hurt\", \"injury\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f915.png\"\n  },\n  {\n    emoji: \"\\u{1F922}\",\n    name: \"nauseated_face\",\n    shortcodes: [\"nauseated\", \"nauseated_face\"],\n    tags: [\"face\", \"nauseated\", \"vomit\"],\n    group: \"\",\n    emoticons: [\"%(\"],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f922.png\"\n  },\n  {\n    emoji: \"\\u{1F92E}\",\n    name: \"vomiting_face\",\n    shortcodes: [\"face_vomiting\", \"vomiting\"],\n    tags: [\"puke\", \"sick\", \"vomit\"],\n    group: \"\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f92e.png\"\n  },\n  {\n    emoji: \"\\u{1F927}\",\n    name: \"sneezing_face\",\n    shortcodes: [\"sneezing\", \"sneezing_face\"],\n    tags: [\"face\", \"gesundheit\", \"sneeze\"],\n    group: \"\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f927.png\"\n  },\n  {\n    emoji: \"\\u{1F975}\",\n    name: \"hot_face\",\n    shortcodes: [\"hot\", \"hot_face\"],\n    tags: [\"feverish\", \"heat stroke\", \"hot\", \"red-faced\", \"sweating\"],\n    group: \"\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f975.png\"\n  },\n  {\n    emoji: \"\\u{1F976}\",\n    name: \"cold_face\",\n    shortcodes: [\"cold\", \"cold_face\"],\n    tags: [\"blue-faced\", \"cold\", \"freezing\", \"frostbite\", \"icicles\"],\n    group: \"\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f976.png\"\n  },\n  {\n    emoji: \"\\u{1F974}\",\n    name: \"woozy_face\",\n    shortcodes: [\"woozy\", \"woozy_face\"],\n    tags: [\"dizzy\", \"intoxicated\", \"tipsy\", \"uneven eyes\", \"wavy mouth\"],\n    group: \"\",\n    emoticons: [\":&\"],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f974.png\"\n  },\n  {\n    emoji: \"\\u{1F635}\",\n    name: \"dizzy_face\",\n    shortcodes: [\"dizzy_face\", \"knocked_out\"],\n    tags: [\"crossed-out eyes\", \"dead\", \"face\", \"knocked out\"],\n    group: \"\",\n    emoticons: [\"xo\", \"XO\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f635.png\"\n  },\n  {\n    emoji: \"\\u{1F635}\\u200D\\u{1F4AB}\",\n    name: \"face_with_spiral_eyes\",\n    shortcodes: [\"dizzy_eyes\"],\n    tags: [\"dizzy\", \"hypnotized\", \"spiral\", \"trouble\", \"whoa\"],\n    group: \"\",\n    emoticons: [],\n    version: 13.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f635-200d-1f4ab.png\"\n  },\n  {\n    emoji: \"\\u{1F92F}\",\n    name: \"exploding_head\",\n    shortcodes: [\"exploding_head\"],\n    tags: [\"mind blown\", \"shocked\"],\n    group: \"\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f92f.png\"\n  },\n  {\n    emoji: \"\\u{1F920}\",\n    name: \"cowboy_hat_face\",\n    shortcodes: [\"cowboy\", \"cowboy_face\"],\n    tags: [\"cowboy\", \"cowgirl\", \"face\", \"hat\"],\n    group: \"\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f920.png\"\n  },\n  {\n    emoji: \"\\u{1F973}\",\n    name: \"partying_face\",\n    shortcodes: [\"hooray\", \"partying\", \"partying_face\"],\n    tags: [\"celebration\", \"hat\", \"horn\", \"party\"],\n    group: \"\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f973.png\"\n  },\n  {\n    emoji: \"\\u{1F978}\",\n    name: \"disguised_face\",\n    shortcodes: [\"disguised\", \"disguised_face\"],\n    tags: [\"disguise\", \"face\", \"glasses\", \"incognito\", \"nose\"],\n    group: \"\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f978.png\"\n  },\n  {\n    emoji: \"\\u{1F60E}\",\n    name: \"sunglasses\",\n    shortcodes: [\"smiling_face_with_sunglasses\", \"sunglasses_cool\", \"too_cool\"],\n    tags: [\"bright\", \"cool\", \"face\", \"sun\", \"sunglasses\"],\n    group: \"\",\n    emoticons: [\"8)\"],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f60e.png\"\n  },\n  {\n    emoji: \"\\u{1F913}\",\n    name: \"nerd_face\",\n    shortcodes: [\"nerd\", \"nerd_face\"],\n    tags: [\"face\", \"geek\", \"nerd\"],\n    group: \"\",\n    emoticons: [\":B\"],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f913.png\"\n  },\n  {\n    emoji: \"\\u{1F9D0}\",\n    name: \"monocle_face\",\n    shortcodes: [\"face_with_monocle\"],\n    tags: [\"face\", \"monocle\", \"stuffy\"],\n    group: \"\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d0.png\"\n  },\n  {\n    emoji: \"\\u{1F615}\",\n    name: \"confused\",\n    shortcodes: [\"confused\", \"confused_face\"],\n    tags: [\"confused\", \"face\", \"meh\"],\n    group: \"\",\n    emoticons: [\":/\"],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f615.png\"\n  },\n  {\n    emoji: \"\\u{1FAE4}\",\n    name: \"face_with_diagonal_mouth\",\n    shortcodes: [\"face_with_diagonal_mouth\"],\n    tags: [\"disappointed\", \"meh\", \"skeptical\", \"unsure\"],\n    group: \"\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F61F}\",\n    name: \"worried\",\n    shortcodes: [\"worried\", \"worried_face\"],\n    tags: [\"face\", \"worried\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f61f.png\"\n  },\n  {\n    emoji: \"\\u{1F641}\",\n    name: \"slightly_frowning_face\",\n    shortcodes: [\"slightly_frowning_face\"],\n    tags: [\"face\", \"frown\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f641.png\"\n  },\n  {\n    emoji: \"\\u2639\",\n    name: \"frowning_face\",\n    shortcodes: [\"white_frowning_face\"],\n    tags: [\"face\", \"frown\"],\n    group: \"\",\n    emoticons: [\":(\"],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2639-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F62E}\",\n    name: \"open_mouth\",\n    shortcodes: [\"face_with_open_mouth\", \"open_mouth\"],\n    tags: [\"face\", \"mouth\", \"open\", \"sympathy\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f62e.png\"\n  },\n  {\n    emoji: \"\\u{1F62F}\",\n    name: \"hushed\",\n    shortcodes: [\"hushed\", \"hushed_face\"],\n    tags: [\"face\", \"hushed\", \"stunned\", \"surprised\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f62f.png\"\n  },\n  {\n    emoji: \"\\u{1F632}\",\n    name: \"astonished\",\n    shortcodes: [\"astonished\", \"astonished_face\"],\n    tags: [\"astonished\", \"face\", \"shocked\", \"totally\"],\n    group: \"\",\n    emoticons: [\":o\", \":O\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f632.png\"\n  },\n  {\n    emoji: \"\\u{1F633}\",\n    name: \"flushed\",\n    shortcodes: [\"flushed\", \"flushed_face\"],\n    tags: [\"dazed\", \"face\", \"flushed\"],\n    group: \"\",\n    emoticons: [\":$\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f633.png\"\n  },\n  {\n    emoji: \"\\u{1F97A}\",\n    name: \"pleading_face\",\n    shortcodes: [\"pleading\", \"pleading_face\"],\n    tags: [\"begging\", \"mercy\", \"puppy eyes\"],\n    group: \"\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f97a.png\"\n  },\n  {\n    emoji: \"\\u{1F979}\",\n    name: \"face_holding_back_tears\",\n    shortcodes: [\"face_holding_back_tears\", \"watery_eyes\"],\n    tags: [\"angry\", \"cry\", \"proud\", \"resist\", \"sad\"],\n    group: \"\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F626}\",\n    name: \"frowning\",\n    shortcodes: [\"frowning\", \"frowning_face\"],\n    tags: [\"face\", \"frown\", \"mouth\", \"open\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f626.png\"\n  },\n  {\n    emoji: \"\\u{1F627}\",\n    name: \"anguished\",\n    shortcodes: [\"anguished\", \"anguished_face\"],\n    tags: [\"anguished\", \"face\"],\n    group: \"\",\n    emoticons: [\":s\", \":S\"],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f627.png\"\n  },\n  {\n    emoji: \"\\u{1F628}\",\n    name: \"fearful\",\n    shortcodes: [\"fearful\", \"fearful_face\"],\n    tags: [\"face\", \"fear\", \"fearful\", \"scared\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f628.png\"\n  },\n  {\n    emoji: \"\\u{1F630}\",\n    name: \"cold_sweat\",\n    shortcodes: [\"anxious\", \"anxious_face\", \"cold_sweat\"],\n    tags: [\"blue\", \"cold\", \"face\", \"rushed\", \"sweat\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f630.png\"\n  },\n  {\n    emoji: \"\\u{1F625}\",\n    name: \"disappointed_relieved\",\n    shortcodes: [\"disappointed_relieved\", \"sad_relieved_face\"],\n    tags: [\"disappointed\", \"face\", \"relieved\", \"whew\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f625.png\"\n  },\n  {\n    emoji: \"\\u{1F622}\",\n    name: \"cry\",\n    shortcodes: [\"cry\", \"crying_face\"],\n    tags: [\"cry\", \"face\", \"sad\", \"tear\"],\n    group: \"\",\n    emoticons: [\":'(\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f622.png\"\n  },\n  {\n    emoji: \"\\u{1F62D}\",\n    name: \"sob\",\n    shortcodes: [\"loudly_crying_face\", \"sob\"],\n    tags: [\"cry\", \"face\", \"sad\", \"sob\", \"tear\"],\n    group: \"\",\n    emoticons: [\":'o\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f62d.png\"\n  },\n  {\n    emoji: \"\\u{1F631}\",\n    name: \"scream\",\n    shortcodes: [\"scream\", \"screaming_in_fear\"],\n    tags: [\"face\", \"fear\", \"munch\", \"scared\", \"scream\"],\n    group: \"\",\n    emoticons: [\"Dx\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f631.png\"\n  },\n  {\n    emoji: \"\\u{1F616}\",\n    name: \"confounded\",\n    shortcodes: [\"confounded\", \"confounded_face\"],\n    tags: [\"confounded\", \"face\"],\n    group: \"\",\n    emoticons: [\"x(\", \"X(\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f616.png\"\n  },\n  {\n    emoji: \"\\u{1F623}\",\n    name: \"persevere\",\n    shortcodes: [\"persevere\", \"persevering_face\"],\n    tags: [\"face\", \"persevere\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f623.png\"\n  },\n  {\n    emoji: \"\\u{1F61E}\",\n    name: \"disappointed\",\n    shortcodes: [\"disappointed\", \"disappointed_face\"],\n    tags: [\"disappointed\", \"face\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f61e.png\"\n  },\n  {\n    emoji: \"\\u{1F613}\",\n    name: \"sweat\",\n    shortcodes: [\"downcast_face\", \"sweat\"],\n    tags: [\"cold\", \"face\", \"sweat\"],\n    group: \"\",\n    emoticons: [\":<\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f613.png\"\n  },\n  {\n    emoji: \"\\u{1F629}\",\n    name: \"weary\",\n    shortcodes: [\"weary\", \"weary_face\"],\n    tags: [\"face\", \"tired\", \"weary\"],\n    group: \"\",\n    emoticons: [\"D:\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f629.png\"\n  },\n  {\n    emoji: \"\\u{1F62B}\",\n    name: \"tired_face\",\n    shortcodes: [\"tired\", \"tired_face\"],\n    tags: [\"face\", \"tired\"],\n    group: \"\",\n    emoticons: [\":c\", \":C\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f62b.png\"\n  },\n  {\n    emoji: \"\\u{1F971}\",\n    name: \"yawning_face\",\n    shortcodes: [\"yawn\", \"yawning\", \"yawning_face\"],\n    tags: [\"bored\", \"tired\", \"yawn\"],\n    group: \"\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f971.png\"\n  },\n  {\n    emoji: \"\\u{1F624}\",\n    name: \"triumph\",\n    shortcodes: [\"nose_steam\", \"triumph\"],\n    tags: [\"face\", \"triumph\", \"won\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f624.png\"\n  },\n  {\n    emoji: \"\\u{1F621}\",\n    name: \"pout\",\n    shortcodes: [\"pout\", \"pouting_face\", \"rage\"],\n    tags: [\"angry\", \"enraged\", \"face\", \"mad\", \"pouting\", \"rage\", \"red\"],\n    group: \"\",\n    emoticons: [\">:/\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f621.png\"\n  },\n  {\n    emoji: \"\\u{1F620}\",\n    name: \"angry\",\n    shortcodes: [\"angry\", \"angry_face\"],\n    tags: [\"anger\", \"angry\", \"face\", \"mad\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f620.png\"\n  },\n  {\n    emoji: \"\\u{1F92C}\",\n    name: \"cursing_face\",\n    shortcodes: [\"censored\", \"face_with_symbols_on_mouth\"],\n    tags: [\"swearing\"],\n    group: \"\",\n    emoticons: [\":@\"],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f92c.png\"\n  },\n  {\n    emoji: \"\\u{1F608}\",\n    name: \"smiling_imp\",\n    shortcodes: [\"smiling_imp\"],\n    tags: [\"face\", \"fairy tale\", \"fantasy\", \"horns\", \"smile\"],\n    group: \"\",\n    emoticons: [\">:)\"],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f608.png\"\n  },\n  {\n    emoji: \"\\u{1F47F}\",\n    name: \"imp\",\n    shortcodes: [\"angry_imp\", \"imp\"],\n    tags: [\"demon\", \"devil\", \"face\", \"fantasy\", \"imp\"],\n    group: \"\",\n    emoticons: [\">:(\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f47f.png\"\n  },\n  {\n    emoji: \"\\u{1F480}\",\n    name: \"skull\",\n    shortcodes: [\"skull\"],\n    tags: [\"death\", \"face\", \"fairy tale\", \"monster\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f480.png\"\n  },\n  {\n    emoji: \"\\u2620\",\n    name: \"skull_and_crossbones\",\n    shortcodes: [\"skull_and_crossbones\"],\n    tags: [\"crossbones\", \"death\", \"face\", \"monster\", \"skull\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2620-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4A9}\",\n    name: \"hankey\",\n    shortcodes: [\"poop\", \"shit\"],\n    tags: [\"dung\", \"face\", \"monster\", \"poo\", \"poop\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4a9.png\"\n  },\n  {\n    emoji: \"\\u{1F921}\",\n    name: \"clown_face\",\n    shortcodes: [\"clown\", \"clown_face\"],\n    tags: [\"clown\", \"face\"],\n    group: \"\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f921.png\"\n  },\n  {\n    emoji: \"\\u{1F479}\",\n    name: \"japanese_ogre\",\n    shortcodes: [\"japanese_ogre\", \"ogre\"],\n    tags: [\"creature\", \"face\", \"fairy tale\", \"fantasy\", \"monster\"],\n    group: \"\",\n    emoticons: [\">0)\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f479.png\"\n  },\n  {\n    emoji: \"\\u{1F47A}\",\n    name: \"japanese_goblin\",\n    shortcodes: [\"goblin\", \"japanese_goblin\"],\n    tags: [\"creature\", \"face\", \"fairy tale\", \"fantasy\", \"monster\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f47a.png\"\n  },\n  {\n    emoji: \"\\u{1F47B}\",\n    name: \"ghost\",\n    shortcodes: [\"ghost\"],\n    tags: [\"creature\", \"face\", \"fairy tale\", \"fantasy\", \"monster\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f47b.png\"\n  },\n  {\n    emoji: \"\\u{1F47D}\",\n    name: \"alien\",\n    shortcodes: [\"alien\"],\n    tags: [\"creature\", \"extraterrestrial\", \"face\", \"fantasy\", \"ufo\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f47d.png\"\n  },\n  {\n    emoji: \"\\u{1F47E}\",\n    name: \"space_invader\",\n    shortcodes: [\"alien_monster\", \"space_invader\"],\n    tags: [\"alien\", \"creature\", \"extraterrestrial\", \"face\", \"monster\", \"ufo\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f47e.png\"\n  },\n  {\n    emoji: \"\\u{1F916}\",\n    name: \"robot\",\n    shortcodes: [\"robot\", \"robot_face\"],\n    tags: [\"face\", \"monster\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f916.png\"\n  },\n  {\n    emoji: \"\\u{1F63A}\",\n    name: \"smiley_cat\",\n    shortcodes: [\"grinning_cat\", \"smiley_cat\"],\n    tags: [\"cat\", \"face\", \"grinning\", \"mouth\", \"open\", \"smile\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f63a.png\"\n  },\n  {\n    emoji: \"\\u{1F638}\",\n    name: \"smile_cat\",\n    shortcodes: [\"grinning_cat_with_closed_eyes\", \"smile_cat\"],\n    tags: [\"cat\", \"eye\", \"face\", \"grin\", \"smile\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f638.png\"\n  },\n  {\n    emoji: \"\\u{1F639}\",\n    name: \"joy_cat\",\n    shortcodes: [\"joy_cat\", \"tears_of_joy_cat\"],\n    tags: [\"cat\", \"face\", \"joy\", \"tear\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f639.png\"\n  },\n  {\n    emoji: \"\\u{1F63B}\",\n    name: \"heart_eyes_cat\",\n    shortcodes: [\"heart_eyes_cat\", \"smiling_cat_with_heart_eyes\"],\n    tags: [\"cat\", \"eye\", \"face\", \"heart\", \"love\", \"smile\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f63b.png\"\n  },\n  {\n    emoji: \"\\u{1F63C}\",\n    name: \"smirk_cat\",\n    shortcodes: [\"smirk_cat\", \"wry_smile_cat\"],\n    tags: [\"cat\", \"face\", \"ironic\", \"smile\", \"wry\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f63c.png\"\n  },\n  {\n    emoji: \"\\u{1F63D}\",\n    name: \"kissing_cat\",\n    shortcodes: [\"kissing_cat\"],\n    tags: [\"cat\", \"eye\", \"face\", \"kiss\"],\n    group: \"\",\n    emoticons: [\":3\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f63d.png\"\n  },\n  {\n    emoji: \"\\u{1F640}\",\n    name: \"scream_cat\",\n    shortcodes: [\"scream_cat\", \"weary_cat\"],\n    tags: [\"cat\", \"face\", \"oh\", \"surprised\", \"weary\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f640.png\"\n  },\n  {\n    emoji: \"\\u{1F63F}\",\n    name: \"crying_cat_face\",\n    shortcodes: [\"crying_cat\"],\n    tags: [\"cat\", \"cry\", \"face\", \"sad\", \"tear\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f63f.png\"\n  },\n  {\n    emoji: \"\\u{1F63E}\",\n    name: \"pouting_cat\",\n    shortcodes: [\"pouting_cat\"],\n    tags: [\"cat\", \"face\", \"pouting\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f63e.png\"\n  },\n  {\n    emoji: \"\\u{1F648}\",\n    name: \"see_no_evil\",\n    shortcodes: [\"see_no_evil\"],\n    tags: [\"evil\", \"face\", \"forbidden\", \"monkey\", \"see\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f648.png\"\n  },\n  {\n    emoji: \"\\u{1F649}\",\n    name: \"hear_no_evil\",\n    shortcodes: [\"hear_no_evil\"],\n    tags: [\"evil\", \"face\", \"forbidden\", \"hear\", \"monkey\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f649.png\"\n  },\n  {\n    emoji: \"\\u{1F64A}\",\n    name: \"speak_no_evil\",\n    shortcodes: [\"speak_no_evil\"],\n    tags: [\"evil\", \"face\", \"forbidden\", \"monkey\", \"speak\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f64a.png\"\n  },\n  {\n    emoji: \"\\u{1F48C}\",\n    name: \"love_letter\",\n    shortcodes: [\"love_letter\"],\n    tags: [\"heart\", \"letter\", \"love\", \"mail\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f48c.png\"\n  },\n  {\n    emoji: \"\\u{1F498}\",\n    name: \"cupid\",\n    shortcodes: [\"cupid\", \"heart_with_arrow\"],\n    tags: [\"arrow\", \"cupid\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f498.png\"\n  },\n  {\n    emoji: \"\\u{1F49D}\",\n    name: \"gift_heart\",\n    shortcodes: [\"gift_heart\", \"heart_with_ribbon\"],\n    tags: [\"ribbon\", \"valentine\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f49d.png\"\n  },\n  {\n    emoji: \"\\u{1F496}\",\n    name: \"sparkling_heart\",\n    shortcodes: [\"sparkling_heart\"],\n    tags: [\"excited\", \"sparkle\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f496.png\"\n  },\n  {\n    emoji: \"\\u{1F497}\",\n    name: \"heartpulse\",\n    shortcodes: [\"growing_heart\", \"heartpulse\"],\n    tags: [\"excited\", \"growing\", \"nervous\", \"pulse\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f497.png\"\n  },\n  {\n    emoji: \"\\u{1F493}\",\n    name: \"heartbeat\",\n    shortcodes: [\"beating_heart\", \"heartbeat\"],\n    tags: [\"beating\", \"heartbeat\", \"pulsating\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f493.png\"\n  },\n  {\n    emoji: \"\\u{1F49E}\",\n    name: \"revolving_hearts\",\n    shortcodes: [\"revolving_hearts\"],\n    tags: [\"revolving\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f49e.png\"\n  },\n  {\n    emoji: \"\\u{1F495}\",\n    name: \"two_hearts\",\n    shortcodes: [\"two_hearts\"],\n    tags: [\"love\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f495.png\"\n  },\n  {\n    emoji: \"\\u{1F49F}\",\n    name: \"heart_decoration\",\n    shortcodes: [\"heart_decoration\"],\n    tags: [\"heart\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f49f.png\"\n  },\n  {\n    emoji: \"\\u2763\",\n    name: \"heavy_heart_exclamation\",\n    shortcodes: [\"heart_exclamation\"],\n    tags: [\"exclamation\", \"mark\", \"punctuation\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2763-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F494}\",\n    name: \"broken_heart\",\n    shortcodes: [\"broken_heart\"],\n    tags: [\"break\", \"broken\"],\n    group: \"\",\n    emoticons: [\"</3\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f494.png\"\n  },\n  {\n    emoji: \"\\u2764\\u200D\\u{1F525}\",\n    name: \"heart_on_fire\",\n    shortcodes: [\"heart_on_fire\"],\n    tags: [\"burn\", \"heart\", \"love\", \"lust\", \"sacred heart\"],\n    group: \"\",\n    emoticons: [],\n    version: 13.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2764-fe0f-200d-1f525.png\"\n  },\n  {\n    emoji: \"\\u2764\\u200D\\u{1FA79}\",\n    name: \"mending_heart\",\n    shortcodes: [\"mending_heart\"],\n    tags: [\"healthier\", \"improving\", \"mending\", \"recovering\", \"recuperating\", \"well\"],\n    group: \"\",\n    emoticons: [],\n    version: 13.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2764-fe0f-200d-1fa79.png\"\n  },\n  {\n    emoji: \"\\u2764\",\n    name: \"heart\",\n    shortcodes: [\"heart\", \"red_heart\"],\n    tags: [\"heart\"],\n    group: \"\",\n    emoticons: [\"<3\"],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2764-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1FA77}\",\n    name: \"pink_heart\",\n    shortcodes: [\"pink_heart\"],\n    tags: [\"cute\", \"heart\", \"like\", \"love\", \"pink\"],\n    group: \"\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1F9E1}\",\n    name: \"orange_heart\",\n    shortcodes: [\"orange_heart\"],\n    tags: [\"orange\"],\n    group: \"\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9e1.png\"\n  },\n  {\n    emoji: \"\\u{1F49B}\",\n    name: \"yellow_heart\",\n    shortcodes: [\"yellow_heart\"],\n    tags: [\"yellow\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f49b.png\"\n  },\n  {\n    emoji: \"\\u{1F49A}\",\n    name: \"green_heart\",\n    shortcodes: [\"green_heart\"],\n    tags: [\"green\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f49a.png\"\n  },\n  {\n    emoji: \"\\u{1F499}\",\n    name: \"blue_heart\",\n    shortcodes: [\"blue_heart\"],\n    tags: [\"blue\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f499.png\"\n  },\n  {\n    emoji: \"\\u{1FA75}\",\n    name: \"light_blue_heart\",\n    shortcodes: [\"light_blue_heart\"],\n    tags: [\"cyan\", \"heart\", \"light blue\", \"teal\"],\n    group: \"\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1F49C}\",\n    name: \"purple_heart\",\n    shortcodes: [\"purple_heart\"],\n    tags: [\"purple\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f49c.png\"\n  },\n  {\n    emoji: \"\\u{1F90E}\",\n    name: \"brown_heart\",\n    shortcodes: [\"brown_heart\"],\n    tags: [\"brown\", \"heart\"],\n    group: \"\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f90e.png\"\n  },\n  {\n    emoji: \"\\u{1F5A4}\",\n    name: \"black_heart\",\n    shortcodes: [\"black_heart\"],\n    tags: [\"black\", \"evil\", \"wicked\"],\n    group: \"\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5a4.png\"\n  },\n  {\n    emoji: \"\\u{1FA76}\",\n    name: \"grey_heart\",\n    shortcodes: [\"gray_heart\", \"grey_heart\"],\n    tags: [\"gray\", \"heart\", \"silver\", \"slate\"],\n    group: \"\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1F90D}\",\n    name: \"white_heart\",\n    shortcodes: [\"white_heart\"],\n    tags: [\"heart\", \"white\"],\n    group: \"\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f90d.png\"\n  },\n  {\n    emoji: \"\\u{1F48B}\",\n    name: \"kiss\",\n    shortcodes: [\"kiss\"],\n    tags: [\"kiss\", \"lips\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f48b.png\"\n  },\n  {\n    emoji: \"\\u{1F4AF}\",\n    name: \"100\",\n    shortcodes: [\"100\"],\n    tags: [\"100\", \"full\", \"hundred\", \"score\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4af.png\"\n  },\n  {\n    emoji: \"\\u{1F4A2}\",\n    name: \"anger\",\n    shortcodes: [\"anger\"],\n    tags: [\"angry\", \"comic\", \"mad\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4a2.png\"\n  },\n  {\n    emoji: \"\\u{1F4A5}\",\n    name: \"boom\",\n    shortcodes: [\"boom\", \"collision\"],\n    tags: [\"boom\", \"comic\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4a5.png\"\n  },\n  {\n    emoji: \"\\u{1F4AB}\",\n    name: \"dizzy\",\n    shortcodes: [\"dizzy\"],\n    tags: [\"comic\", \"star\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4ab.png\"\n  },\n  {\n    emoji: \"\\u{1F4A6}\",\n    name: \"sweat_drops\",\n    shortcodes: [\"sweat_drops\"],\n    tags: [\"comic\", \"splashing\", \"sweat\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4a6.png\"\n  },\n  {\n    emoji: \"\\u{1F4A8}\",\n    name: \"dash\",\n    shortcodes: [\"dash\", \"dashing_away\"],\n    tags: [\"comic\", \"dash\", \"running\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4a8.png\"\n  },\n  {\n    emoji: \"\\u{1F573}\",\n    name: \"hole\",\n    shortcodes: [\"hole\"],\n    tags: [\"hole\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f573-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4AC}\",\n    name: \"speech_balloon\",\n    shortcodes: [\"speech_balloon\"],\n    tags: [\"balloon\", \"bubble\", \"comic\", \"dialog\", \"speech\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4ac.png\"\n  },\n  {\n    emoji: \"\\u{1F441}\\u200D\\u{1F5E8}\\uFE0F\",\n    name: \"eye_speech_bubble\",\n    shortcodes: [\"eye_in_speech_bubble\"],\n    tags: [\"balloon\", \"bubble\", \"eye\", \"speech\", \"witness\"],\n    group: \"\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f441-fe0f-200d-1f5e8-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F5E8}\",\n    name: \"left_speech_bubble\",\n    shortcodes: [\"left_speech_bubble\"],\n    tags: [\"balloon\", \"bubble\", \"dialog\", \"speech\"],\n    group: \"\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5e8-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F5EF}\",\n    name: \"right_anger_bubble\",\n    shortcodes: [\"right_anger_bubble\"],\n    tags: [\"angry\", \"balloon\", \"bubble\", \"mad\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5ef-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4AD}\",\n    name: \"thought_balloon\",\n    shortcodes: [\"thought_balloon\"],\n    tags: [\"balloon\", \"bubble\", \"comic\", \"thought\"],\n    group: \"\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4ad.png\"\n  },\n  {\n    emoji: \"\\u{1F4A4}\",\n    name: \"zzz\",\n    shortcodes: [\"zzz\"],\n    tags: [\"comic\", \"good night\", \"sleep\", \"zzz\"],\n    group: \"\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4a4.png\"\n  },\n  {\n    emoji: \"\\u{1F44B}\",\n    name: \"wave\",\n    shortcodes: [\"wave\", \"waving_hand\"],\n    tags: [\"hand\", \"wave\", \"waving\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f44b.png\"\n  },\n  {\n    emoji: \"\\u{1F91A}\",\n    name: \"raised_back_of_hand\",\n    shortcodes: [\"raised_back_of_hand\"],\n    tags: [\"backhand\", \"raised\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f91a.png\"\n  },\n  {\n    emoji: \"\\u{1F590}\",\n    name: \"raised_hand_with_fingers_splayed\",\n    shortcodes: [\"raised_hand_with_fingers_splayed\"],\n    tags: [\"finger\", \"hand\", \"splayed\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f590-fe0f.png\"\n  },\n  {\n    emoji: \"\\u270B\",\n    name: \"hand\",\n    shortcodes: [\"high_five\", \"raised_hand\"],\n    tags: [\"hand\", \"high 5\", \"high five\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/270b.png\"\n  },\n  {\n    emoji: \"\\u{1F596}\",\n    name: \"vulcan_salute\",\n    shortcodes: [\"vulcan\"],\n    tags: [\"finger\", \"hand\", \"spock\", \"vulcan\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f596.png\"\n  },\n  {\n    emoji: \"\\u{1FAF1}\",\n    name: \"rightwards_hand\",\n    shortcodes: [\"rightwards_hand\"],\n    tags: [\"hand\", \"right\", \"rightward\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1FAF2}\",\n    name: \"leftwards_hand\",\n    shortcodes: [\"leftwards_hand\"],\n    tags: [\"hand\", \"left\", \"leftward\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1FAF3}\",\n    name: \"palm_down_hand\",\n    shortcodes: [\"palm_down\"],\n    tags: [\"dismiss\", \"drop\", \"shoo\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1FAF4}\",\n    name: \"palm_up_hand\",\n    shortcodes: [\"palm_up\"],\n    tags: [\"beckon\", \"catch\", \"come\", \"offer\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1FAF7}\",\n    name: \"leftwards_pushing_hand\",\n    shortcodes: [\"leftwards_pushing_hand\"],\n    tags: [\"high five\", \"leftward\", \"push\", \"refuse\", \"stop\", \"wait\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1FAF8}\",\n    name: \"rightwards_pushing_hand\",\n    shortcodes: [\"rightwards_pushing_hand\"],\n    tags: [\"high five\", \"push\", \"refuse\", \"rightward\", \"stop\", \"wait\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1F44C}\",\n    name: \"ok_hand\",\n    shortcodes: [\"ok_hand\"],\n    tags: [\"hand\", \"ok\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f44c.png\"\n  },\n  {\n    emoji: \"\\u{1F90C}\",\n    name: \"pinched_fingers\",\n    shortcodes: [\"pinch\", \"pinched_fingers\"],\n    tags: [\"fingers\", \"hand gesture\", \"interrogation\", \"pinched\", \"sarcastic\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f90c.png\"\n  },\n  {\n    emoji: \"\\u{1F90F}\",\n    name: \"pinching_hand\",\n    shortcodes: [\"pinching_hand\"],\n    tags: [\"small amount\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f90f.png\"\n  },\n  {\n    emoji: \"\\u270C\",\n    name: \"v\",\n    shortcodes: [\"v\", \"victory\"],\n    tags: [\"hand\", \"v\", \"victory\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/270c-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F91E}\",\n    name: \"crossed_fingers\",\n    shortcodes: [\"fingers_crossed\"],\n    tags: [\"cross\", \"finger\", \"hand\", \"luck\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f91e.png\"\n  },\n  {\n    emoji: \"\\u{1FAF0}\",\n    name: \"hand_with_index_finger_and_thumb_crossed\",\n    shortcodes: [\"hand_with_index_finger_and_thumb_crossed\"],\n    tags: [\"expensive\", \"heart\", \"love\", \"money\", \"snap\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F91F}\",\n    name: \"love_you_gesture\",\n    shortcodes: [\"love_you_gesture\"],\n    tags: [\"hand\", \"ily\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f91f.png\"\n  },\n  {\n    emoji: \"\\u{1F918}\",\n    name: \"metal\",\n    shortcodes: [\"metal\", \"sign_of_the_horns\"],\n    tags: [\"finger\", \"hand\", \"horns\", \"rock-on\"],\n    group: \"people & body\",\n    emoticons: [\"\\\\m/\", \"\\\\M/\"],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f918.png\"\n  },\n  {\n    emoji: \"\\u{1F919}\",\n    name: \"call_me_hand\",\n    shortcodes: [\"call_me_hand\"],\n    tags: [\"call\", \"hand\", \"hang loose\", \"shaka\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f919.png\"\n  },\n  {\n    emoji: \"\\u{1F448}\",\n    name: \"point_left\",\n    shortcodes: [\"point_left\"],\n    tags: [\"backhand\", \"finger\", \"hand\", \"index\", \"point\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f448.png\"\n  },\n  {\n    emoji: \"\\u{1F449}\",\n    name: \"point_right\",\n    shortcodes: [\"point_right\"],\n    tags: [\"backhand\", \"finger\", \"hand\", \"index\", \"point\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f449.png\"\n  },\n  {\n    emoji: \"\\u{1F446}\",\n    name: \"point_up_2\",\n    shortcodes: [\"point_up\"],\n    tags: [\"backhand\", \"finger\", \"hand\", \"point\", \"up\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f446.png\"\n  },\n  {\n    emoji: \"\\u{1F595}\",\n    name: \"fu\",\n    shortcodes: [\"middle_finger\"],\n    tags: [\"finger\", \"hand\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f595.png\"\n  },\n  {\n    emoji: \"\\u{1F447}\",\n    name: \"point_down\",\n    shortcodes: [\"point_down\"],\n    tags: [\"backhand\", \"down\", \"finger\", \"hand\", \"point\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f447.png\"\n  },\n  {\n    emoji: \"\\u261D\",\n    name: \"point_up\",\n    shortcodes: [\"point_up_2\"],\n    tags: [\"finger\", \"hand\", \"index\", \"point\", \"up\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/261d-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1FAF5}\",\n    name: \"index_pointing_at_the_viewer\",\n    shortcodes: [\"point_forward\"],\n    tags: [\"point\", \"you\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F44D}\",\n    name: \"+1\",\n    shortcodes: [\"+1\", \"thumbsup\", \"yes\"],\n    tags: [\"+1\", \"hand\", \"thumb\", \"up\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f44d.png\"\n  },\n  {\n    emoji: \"\\u{1F44E}\",\n    name: \"-1\",\n    shortcodes: [\"-1\", \"no\", \"thumbsdown\"],\n    tags: [\"-1\", \"down\", \"hand\", \"thumb\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f44e.png\"\n  },\n  {\n    emoji: \"\\u270A\",\n    name: \"fist\",\n    shortcodes: [\"fist\"],\n    tags: [\"clenched\", \"fist\", \"hand\", \"punch\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/270a.png\"\n  },\n  {\n    emoji: \"\\u{1F44A}\",\n    name: \"facepunch\",\n    shortcodes: [\"punch\"],\n    tags: [\"clenched\", \"fist\", \"hand\", \"punch\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f44a.png\"\n  },\n  {\n    emoji: \"\\u{1F91B}\",\n    name: \"fist_left\",\n    shortcodes: [\"left_facing_fist\"],\n    tags: [\"fist\", \"leftwards\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f91b.png\"\n  },\n  {\n    emoji: \"\\u{1F91C}\",\n    name: \"fist_right\",\n    shortcodes: [\"right_facing_fist\"],\n    tags: [\"fist\", \"rightwards\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f91c.png\"\n  },\n  {\n    emoji: \"\\u{1F44F}\",\n    name: \"clap\",\n    shortcodes: [\"clap\", \"clapping_hands\"],\n    tags: [\"clap\", \"hand\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f44f.png\"\n  },\n  {\n    emoji: \"\\u{1F64C}\",\n    name: \"raised_hands\",\n    shortcodes: [\"raised_hands\"],\n    tags: [\"celebration\", \"gesture\", \"hand\", \"hooray\", \"raised\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f64c.png\"\n  },\n  {\n    emoji: \"\\u{1FAF6}\",\n    name: \"heart_hands\",\n    shortcodes: [\"heart_hands\"],\n    tags: [\"love\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F450}\",\n    name: \"open_hands\",\n    shortcodes: [\"open_hands\"],\n    tags: [\"hand\", \"open\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f450.png\"\n  },\n  {\n    emoji: \"\\u{1F932}\",\n    name: \"palms_up_together\",\n    shortcodes: [\"palms_up_together\"],\n    tags: [\"prayer\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f932.png\"\n  },\n  {\n    emoji: \"\\u{1F91D}\",\n    name: \"handshake\",\n    shortcodes: [\"handshake\"],\n    tags: [\"agreement\", \"hand\", \"meeting\", \"shake\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f91d.png\"\n  },\n  {\n    emoji: \"\\u{1F64F}\",\n    name: \"pray\",\n    shortcodes: [\"folded_hands\", \"pray\"],\n    tags: [\"ask\", \"hand\", \"high 5\", \"high five\", \"please\", \"pray\", \"thanks\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f64f.png\"\n  },\n  {\n    emoji: \"\\u270D\",\n    name: \"writing_hand\",\n    shortcodes: [\"writing_hand\"],\n    tags: [\"hand\", \"write\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/270d-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F485}\",\n    name: \"nail_care\",\n    shortcodes: [\"nail_care\", \"nail_polish\"],\n    tags: [\"care\", \"cosmetics\", \"manicure\", \"nail\", \"polish\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f485.png\"\n  },\n  {\n    emoji: \"\\u{1F933}\",\n    name: \"selfie\",\n    shortcodes: [\"selfie\"],\n    tags: [\"camera\", \"phone\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f933.png\"\n  },\n  {\n    emoji: \"\\u{1F4AA}\",\n    name: \"muscle\",\n    shortcodes: [\"muscle\", \"right_bicep\"],\n    tags: [\"biceps\", \"comic\", \"flex\", \"muscle\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4aa.png\"\n  },\n  {\n    emoji: \"\\u{1F9BE}\",\n    name: \"mechanical_arm\",\n    shortcodes: [\"mechanical_arm\"],\n    tags: [\"accessibility\", \"prosthetic\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9be.png\"\n  },\n  {\n    emoji: \"\\u{1F9BF}\",\n    name: \"mechanical_leg\",\n    shortcodes: [\"mechanical_leg\"],\n    tags: [\"accessibility\", \"prosthetic\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9bf.png\"\n  },\n  {\n    emoji: \"\\u{1F9B5}\",\n    name: \"leg\",\n    shortcodes: [\"leg\"],\n    tags: [\"kick\", \"limb\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9b5.png\"\n  },\n  {\n    emoji: \"\\u{1F9B6}\",\n    name: \"foot\",\n    shortcodes: [\"foot\"],\n    tags: [\"kick\", \"stomp\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9b6.png\"\n  },\n  {\n    emoji: \"\\u{1F442}\",\n    name: \"ear\",\n    shortcodes: [\"ear\"],\n    tags: [\"body\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f442.png\"\n  },\n  {\n    emoji: \"\\u{1F9BB}\",\n    name: \"ear_with_hearing_aid\",\n    shortcodes: [\"ear_with_hearing_aid\", \"hearing_aid\"],\n    tags: [\"accessibility\", \"hard of hearing\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9bb.png\"\n  },\n  {\n    emoji: \"\\u{1F443}\",\n    name: \"nose\",\n    shortcodes: [\"nose\"],\n    tags: [\"body\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f443.png\"\n  },\n  {\n    emoji: \"\\u{1F9E0}\",\n    name: \"brain\",\n    shortcodes: [\"brain\"],\n    tags: [\"intelligent\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9e0.png\"\n  },\n  {\n    emoji: \"\\u{1FAC0}\",\n    name: \"anatomical_heart\",\n    shortcodes: [\"anatomical_heart\"],\n    tags: [\"anatomical\", \"cardiology\", \"heart\", \"organ\", \"pulse\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fac0.png\"\n  },\n  {\n    emoji: \"\\u{1FAC1}\",\n    name: \"lungs\",\n    shortcodes: [\"lungs\"],\n    tags: [\"breath\", \"exhalation\", \"inhalation\", \"organ\", \"respiration\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fac1.png\"\n  },\n  {\n    emoji: \"\\u{1F9B7}\",\n    name: \"tooth\",\n    shortcodes: [\"tooth\"],\n    tags: [\"dentist\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9b7.png\"\n  },\n  {\n    emoji: \"\\u{1F9B4}\",\n    name: \"bone\",\n    shortcodes: [\"bone\"],\n    tags: [\"skeleton\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9b4.png\"\n  },\n  {\n    emoji: \"\\u{1F440}\",\n    name: \"eyes\",\n    shortcodes: [\"eyes\"],\n    tags: [\"eye\", \"face\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f440.png\"\n  },\n  {\n    emoji: \"\\u{1F441}\",\n    name: \"eye\",\n    shortcodes: [\"eye\"],\n    tags: [\"body\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f441-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F445}\",\n    name: \"tongue\",\n    shortcodes: [\"tongue\"],\n    tags: [\"body\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f445.png\"\n  },\n  {\n    emoji: \"\\u{1F444}\",\n    name: \"lips\",\n    shortcodes: [\"lips\", \"mouth\"],\n    tags: [\"lips\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f444.png\"\n  },\n  {\n    emoji: \"\\u{1FAE6}\",\n    name: \"biting_lip\",\n    shortcodes: [\"biting_lip\"],\n    tags: [\"anxious\", \"fear\", \"flirting\", \"nervous\", \"uncomfortable\", \"worried\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F476}\",\n    name: \"baby\",\n    shortcodes: [\"baby\"],\n    tags: [\"young\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f476.png\"\n  },\n  {\n    emoji: \"\\u{1F9D2}\",\n    name: \"child\",\n    shortcodes: [\"child\"],\n    tags: [\"gender-neutral\", \"unspecified gender\", \"young\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d2.png\"\n  },\n  {\n    emoji: \"\\u{1F466}\",\n    name: \"boy\",\n    shortcodes: [\"boy\"],\n    tags: [\"young\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F467}\",\n    name: \"girl\",\n    shortcodes: [\"girl\"],\n    tags: [\"virgo\", \"young\", \"zodiac\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f467.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\",\n    name: \"adult\",\n    shortcodes: [\"adult\"],\n    tags: [\"adult\", \"gender-neutral\", \"unspecified gender\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1.png\"\n  },\n  {\n    emoji: \"\\u{1F471}\",\n    name: \"blond_haired_person\",\n    shortcodes: [\"blond_haired\"],\n    tags: [\"blond\", \"blond-haired person\", \"hair\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f471.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\",\n    name: \"man\",\n    shortcodes: [\"man\"],\n    tags: [\"adult\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468.png\"\n  },\n  {\n    emoji: \"\\u{1F9D4}\",\n    name: \"bearded_person\",\n    shortcodes: [\"person_bearded\"],\n    tags: [\"beard\", \"person\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d4.png\"\n  },\n  {\n    emoji: \"\\u{1F9D4}\\u200D\\u2642\",\n    name: \"man_beard\",\n    shortcodes: [\"man_bearded\"],\n    tags: [\"beard\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 13.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d4-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9D4}\\u200D\\u2640\",\n    name: \"woman_beard\",\n    shortcodes: [\"woman_bearded\"],\n    tags: [\"beard\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 13.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d4-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F9B0}\",\n    name: \"red_haired_man\",\n    shortcodes: [\"man_red_haired\"],\n    tags: [\"adult\", \"man\", \"red hair\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f9b0.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F9B1}\",\n    name: \"curly_haired_man\",\n    shortcodes: [\"man_curly_haired\"],\n    tags: [\"adult\", \"curly hair\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f9b1.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F9B3}\",\n    name: \"white_haired_man\",\n    shortcodes: [\"man_white_haired\"],\n    tags: [\"adult\", \"man\", \"white hair\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f9b3.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F9B2}\",\n    name: \"bald_man\",\n    shortcodes: [\"man_bald\"],\n    tags: [\"adult\", \"bald\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f9b2.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\",\n    name: \"woman\",\n    shortcodes: [\"woman\"],\n    tags: [\"adult\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F9B0}\",\n    name: \"red_haired_woman\",\n    shortcodes: [\"woman_red_haired\"],\n    tags: [\"adult\", \"red hair\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f9b0.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F9B0}\",\n    name: \"person_red_hair\",\n    shortcodes: [\"red_haired\"],\n    tags: [\"adult\", \"gender-neutral\", \"person\", \"red hair\", \"unspecified gender\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f9b0.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F9B1}\",\n    name: \"curly_haired_woman\",\n    shortcodes: [\"woman_curly_haired\"],\n    tags: [\"adult\", \"curly hair\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f9b1.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F9B1}\",\n    name: \"person_curly_hair\",\n    shortcodes: [\"curly_haired\"],\n    tags: [\"adult\", \"curly hair\", \"gender-neutral\", \"person\", \"unspecified gender\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f9b1.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F9B3}\",\n    name: \"white_haired_woman\",\n    shortcodes: [\"woman_white_haired\"],\n    tags: [\"adult\", \"white hair\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f9b3.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F9B3}\",\n    name: \"person_white_hair\",\n    shortcodes: [\"white_haired\"],\n    tags: [\"adult\", \"gender-neutral\", \"person\", \"unspecified gender\", \"white hair\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f9b3.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F9B2}\",\n    name: \"bald_woman\",\n    shortcodes: [\"woman_bald\"],\n    tags: [\"adult\", \"bald\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f9b2.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F9B2}\",\n    name: \"person_bald\",\n    shortcodes: [\"bald\"],\n    tags: [\"adult\", \"bald\", \"gender-neutral\", \"person\", \"unspecified gender\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f9b2.png\"\n  },\n  {\n    emoji: \"\\u{1F471}\\u200D\\u2640\",\n    name: \"blond_haired_woman\",\n    shortcodes: [\"woman_blond_haired\"],\n    tags: [\"blond-haired woman\", \"blonde\", \"hair\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f471-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F471}\\u200D\\u2642\",\n    name: \"blond_haired_man\",\n    shortcodes: [\"man_blond_haired\"],\n    tags: [\"blond\", \"blond-haired man\", \"hair\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f471-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9D3}\",\n    name: \"older_adult\",\n    shortcodes: [\"older_adult\"],\n    tags: [\"adult\", \"gender-neutral\", \"old\", \"unspecified gender\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d3.png\"\n  },\n  {\n    emoji: \"\\u{1F474}\",\n    name: \"older_man\",\n    shortcodes: [\"older_man\"],\n    tags: [\"adult\", \"man\", \"old\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f474.png\"\n  },\n  {\n    emoji: \"\\u{1F475}\",\n    name: \"older_woman\",\n    shortcodes: [\"older_woman\"],\n    tags: [\"adult\", \"old\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f475.png\"\n  },\n  {\n    emoji: \"\\u{1F64D}\",\n    name: \"frowning_person\",\n    shortcodes: [\"person_frowning\"],\n    tags: [\"frown\", \"gesture\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f64d.png\"\n  },\n  {\n    emoji: \"\\u{1F64D}\\u200D\\u2642\",\n    name: \"frowning_man\",\n    shortcodes: [\"man_frowning\"],\n    tags: [\"frowning\", \"gesture\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f64d-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F64D}\\u200D\\u2640\",\n    name: \"frowning_woman\",\n    shortcodes: [\"woman_frowning\"],\n    tags: [\"frowning\", \"gesture\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f64d-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F64E}\",\n    name: \"pouting_face\",\n    shortcodes: [\"person_pouting\", \"pouting\"],\n    tags: [\"gesture\", \"pouting\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f64e.png\"\n  },\n  {\n    emoji: \"\\u{1F64E}\\u200D\\u2642\",\n    name: \"pouting_man\",\n    shortcodes: [\"man_pouting\"],\n    tags: [\"gesture\", \"man\", \"pouting\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f64e-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F64E}\\u200D\\u2640\",\n    name: \"pouting_woman\",\n    shortcodes: [\"woman_pouting\"],\n    tags: [\"gesture\", \"pouting\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f64e-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F645}\",\n    name: \"no_good\",\n    shortcodes: [\"no_good\", \"person_gesturing_no\"],\n    tags: [\"forbidden\", \"gesture\", \"hand\", \"person gesturing no\", \"prohibited\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f645.png\"\n  },\n  {\n    emoji: \"\\u{1F645}\\u200D\\u2642\",\n    name: \"ng_man\",\n    shortcodes: [\"man_gesturing_no\"],\n    tags: [\"forbidden\", \"gesture\", \"hand\", \"man\", \"man gesturing no\", \"prohibited\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f645-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F645}\\u200D\\u2640\",\n    name: \"ng_woman\",\n    shortcodes: [\"woman_gesturing_no\"],\n    tags: [\"forbidden\", \"gesture\", \"hand\", \"prohibited\", \"woman\", \"woman gesturing no\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f645-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F646}\",\n    name: \"ok_person\",\n    shortcodes: [\"all_good\", \"person_gesturing_ok\"],\n    tags: [\"gesture\", \"hand\", \"ok\", \"person gesturing ok\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f646.png\"\n  },\n  {\n    emoji: \"\\u{1F646}\\u200D\\u2642\",\n    name: \"ok_man\",\n    shortcodes: [\"man_gesturing_ok\"],\n    tags: [\"gesture\", \"hand\", \"man\", \"man gesturing ok\", \"ok\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f646-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F646}\\u200D\\u2640\",\n    name: \"ok_woman\",\n    shortcodes: [\"woman_gesturing_ok\"],\n    tags: [\"gesture\", \"hand\", \"ok\", \"woman\", \"woman gesturing ok\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f646-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F481}\",\n    name: \"information_desk_person\",\n    shortcodes: [\"person_tipping_hand\"],\n    tags: [\"hand\", \"help\", \"information\", \"sassy\", \"tipping\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f481.png\"\n  },\n  {\n    emoji: \"\\u{1F481}\\u200D\\u2642\",\n    name: \"sassy_man\",\n    shortcodes: [\"man_tipping_hand\"],\n    tags: [\"man\", \"sassy\", \"tipping hand\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f481-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F481}\\u200D\\u2640\",\n    name: \"sassy_woman\",\n    shortcodes: [\"woman_tipping_hand\"],\n    tags: [\"sassy\", \"tipping hand\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f481-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F64B}\",\n    name: \"raising_hand\",\n    shortcodes: [\"person_raising_hand\"],\n    tags: [\"gesture\", \"hand\", \"happy\", \"raised\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f64b.png\"\n  },\n  {\n    emoji: \"\\u{1F64B}\\u200D\\u2642\",\n    name: \"raising_hand_man\",\n    shortcodes: [\"man_raising_hand\"],\n    tags: [\"gesture\", \"man\", \"raising hand\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f64b-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F64B}\\u200D\\u2640\",\n    name: \"raising_hand_woman\",\n    shortcodes: [\"woman_raising_hand\"],\n    tags: [\"gesture\", \"raising hand\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f64b-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9CF}\",\n    name: \"deaf_person\",\n    shortcodes: [\"deaf_person\"],\n    tags: [\"accessibility\", \"deaf\", \"ear\", \"hear\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9cf.png\"\n  },\n  {\n    emoji: \"\\u{1F9CF}\\u200D\\u2642\",\n    name: \"deaf_man\",\n    shortcodes: [\"deaf_man\"],\n    tags: [\"deaf\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9cf-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9CF}\\u200D\\u2640\",\n    name: \"deaf_woman\",\n    shortcodes: [\"deaf_woman\"],\n    tags: [\"deaf\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9cf-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F647}\",\n    name: \"bow\",\n    shortcodes: [\"bow\", \"person_bowing\"],\n    tags: [\"apology\", \"bow\", \"gesture\", \"sorry\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f647.png\"\n  },\n  {\n    emoji: \"\\u{1F647}\\u200D\\u2642\",\n    name: \"bowing_man\",\n    shortcodes: [\"man_bowing\"],\n    tags: [\"apology\", \"bowing\", \"favor\", \"gesture\", \"man\", \"sorry\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f647-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F647}\\u200D\\u2640\",\n    name: \"bowing_woman\",\n    shortcodes: [\"woman_bowing\"],\n    tags: [\"apology\", \"bowing\", \"favor\", \"gesture\", \"sorry\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f647-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F926}\",\n    name: \"facepalm\",\n    shortcodes: [\"facepalm\", \"person_facepalming\"],\n    tags: [\"disbelief\", \"exasperation\", \"face\", \"palm\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f926.png\"\n  },\n  {\n    emoji: \"\\u{1F926}\\u200D\\u2642\",\n    name: \"man_facepalming\",\n    shortcodes: [\"man_facepalming\"],\n    tags: [\"disbelief\", \"exasperation\", \"facepalm\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f926-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F926}\\u200D\\u2640\",\n    name: \"woman_facepalming\",\n    shortcodes: [\"woman_facepalming\"],\n    tags: [\"disbelief\", \"exasperation\", \"facepalm\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f926-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F937}\",\n    name: \"shrug\",\n    shortcodes: [\"person_shrugging\", \"shrug\"],\n    tags: [\"doubt\", \"ignorance\", \"indifference\", \"shrug\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f937.png\"\n  },\n  {\n    emoji: \"\\u{1F937}\\u200D\\u2642\",\n    name: \"man_shrugging\",\n    shortcodes: [\"man_shrugging\"],\n    tags: [\"doubt\", \"ignorance\", \"indifference\", \"man\", \"shrug\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f937-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F937}\\u200D\\u2640\",\n    name: \"woman_shrugging\",\n    shortcodes: [\"woman_shrugging\"],\n    tags: [\"doubt\", \"ignorance\", \"indifference\", \"shrug\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f937-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u2695\",\n    name: \"health_worker\",\n    shortcodes: [\"health_worker\"],\n    tags: [\"doctor\", \"healthcare\", \"nurse\", \"therapist\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-2695-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u2695\",\n    name: \"man_health_worker\",\n    shortcodes: [\"man_health_worker\"],\n    tags: [\"doctor\", \"healthcare\", \"man\", \"nurse\", \"therapist\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-2695-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u2695\",\n    name: \"woman_health_worker\",\n    shortcodes: [\"woman_health_worker\"],\n    tags: [\"doctor\", \"healthcare\", \"nurse\", \"therapist\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-2695-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F393}\",\n    name: \"student\",\n    shortcodes: [\"student\"],\n    tags: [\"graduate\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f393.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F393}\",\n    name: \"man_student\",\n    shortcodes: [\"man_student\"],\n    tags: [\"graduate\", \"man\", \"student\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f393.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F393}\",\n    name: \"woman_student\",\n    shortcodes: [\"woman_student\"],\n    tags: [\"graduate\", \"student\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f393.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F3EB}\",\n    name: \"teacher\",\n    shortcodes: [\"teacher\"],\n    tags: [\"instructor\", \"lecturer\", \"professor\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f3eb.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F3EB}\",\n    name: \"man_teacher\",\n    shortcodes: [\"man_teacher\"],\n    tags: [\"instructor\", \"lecturer\", \"man\", \"professor\", \"teacher\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f3eb.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F3EB}\",\n    name: \"woman_teacher\",\n    shortcodes: [\"woman_teacher\"],\n    tags: [\"instructor\", \"lecturer\", \"professor\", \"teacher\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f3eb.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u2696\",\n    name: \"judge\",\n    shortcodes: [\"judge\"],\n    tags: [\"justice\", \"law\", \"scales\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-2696-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u2696\",\n    name: \"man_judge\",\n    shortcodes: [\"man_judge\"],\n    tags: [\"judge\", \"justice\", \"law\", \"man\", \"scales\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-2696-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u2696\",\n    name: \"woman_judge\",\n    shortcodes: [\"woman_judge\"],\n    tags: [\"judge\", \"justice\", \"law\", \"scales\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-2696-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F33E}\",\n    name: \"farmer\",\n    shortcodes: [\"farmer\"],\n    tags: [\"gardener\", \"rancher\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f33e.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F33E}\",\n    name: \"man_farmer\",\n    shortcodes: [\"man_farmer\"],\n    tags: [\"farmer\", \"gardener\", \"man\", \"rancher\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f33e.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F33E}\",\n    name: \"woman_farmer\",\n    shortcodes: [\"woman_farmer\"],\n    tags: [\"farmer\", \"gardener\", \"rancher\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f33e.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F373}\",\n    name: \"cook\",\n    shortcodes: [\"cook\"],\n    tags: [\"chef\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f373.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F373}\",\n    name: \"man_cook\",\n    shortcodes: [\"man_cook\"],\n    tags: [\"chef\", \"cook\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f373.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F373}\",\n    name: \"woman_cook\",\n    shortcodes: [\"woman_cook\"],\n    tags: [\"chef\", \"cook\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f373.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F527}\",\n    name: \"mechanic\",\n    shortcodes: [\"mechanic\"],\n    tags: [\"electrician\", \"plumber\", \"tradesperson\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f527.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F527}\",\n    name: \"man_mechanic\",\n    shortcodes: [\"man_mechanic\"],\n    tags: [\"electrician\", \"man\", \"mechanic\", \"plumber\", \"tradesperson\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f527.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F527}\",\n    name: \"woman_mechanic\",\n    shortcodes: [\"woman_mechanic\"],\n    tags: [\"electrician\", \"mechanic\", \"plumber\", \"tradesperson\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f527.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F3ED}\",\n    name: \"factory_worker\",\n    shortcodes: [\"factory_worker\"],\n    tags: [\"assembly\", \"factory\", \"industrial\", \"worker\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f3ed.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F3ED}\",\n    name: \"man_factory_worker\",\n    shortcodes: [\"man_factory_worker\"],\n    tags: [\"assembly\", \"factory\", \"industrial\", \"man\", \"worker\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f3ed.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F3ED}\",\n    name: \"woman_factory_worker\",\n    shortcodes: [\"woman_factory_worker\"],\n    tags: [\"assembly\", \"factory\", \"industrial\", \"woman\", \"worker\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f3ed.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F4BC}\",\n    name: \"office_worker\",\n    shortcodes: [\"office_worker\"],\n    tags: [\"architect\", \"business\", \"manager\", \"white-collar\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f4bc.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F4BC}\",\n    name: \"man_office_worker\",\n    shortcodes: [\"man_office_worker\"],\n    tags: [\"architect\", \"business\", \"man\", \"manager\", \"white-collar\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f4bc.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F4BC}\",\n    name: \"woman_office_worker\",\n    shortcodes: [\"woman_office_worker\"],\n    tags: [\"architect\", \"business\", \"manager\", \"white-collar\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f4bc.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F52C}\",\n    name: \"scientist\",\n    shortcodes: [\"scientist\"],\n    tags: [\"biologist\", \"chemist\", \"engineer\", \"physicist\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f52c.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F52C}\",\n    name: \"man_scientist\",\n    shortcodes: [\"man_scientist\"],\n    tags: [\"biologist\", \"chemist\", \"engineer\", \"man\", \"physicist\", \"scientist\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f52c.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F52C}\",\n    name: \"woman_scientist\",\n    shortcodes: [\"woman_scientist\"],\n    tags: [\"biologist\", \"chemist\", \"engineer\", \"physicist\", \"scientist\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f52c.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F4BB}\",\n    name: \"technologist\",\n    shortcodes: [\"technologist\"],\n    tags: [\"coder\", \"developer\", \"inventor\", \"software\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f4bb.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F4BB}\",\n    name: \"man_technologist\",\n    shortcodes: [\"man_technologist\"],\n    tags: [\"coder\", \"developer\", \"inventor\", \"man\", \"software\", \"technologist\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f4bb.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F4BB}\",\n    name: \"woman_technologist\",\n    shortcodes: [\"woman_technologist\"],\n    tags: [\"coder\", \"developer\", \"inventor\", \"software\", \"technologist\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f4bb.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F3A4}\",\n    name: \"singer\",\n    shortcodes: [\"singer\"],\n    tags: [\"actor\", \"entertainer\", \"rock\", \"star\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f3a4.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F3A4}\",\n    name: \"man_singer\",\n    shortcodes: [\"man_singer\"],\n    tags: [\"actor\", \"entertainer\", \"man\", \"rock\", \"singer\", \"star\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f3a4.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F3A4}\",\n    name: \"woman_singer\",\n    shortcodes: [\"woman_singer\"],\n    tags: [\"actor\", \"entertainer\", \"rock\", \"singer\", \"star\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f3a4.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F3A8}\",\n    name: \"artist\",\n    shortcodes: [\"artist\"],\n    tags: [\"palette\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f3a8.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F3A8}\",\n    name: \"man_artist\",\n    shortcodes: [\"man_artist\"],\n    tags: [\"artist\", \"man\", \"palette\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f3a8.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F3A8}\",\n    name: \"woman_artist\",\n    shortcodes: [\"woman_artist\"],\n    tags: [\"artist\", \"palette\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f3a8.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u2708\",\n    name: \"pilot\",\n    shortcodes: [\"pilot\"],\n    tags: [\"plane\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-2708-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u2708\",\n    name: \"man_pilot\",\n    shortcodes: [\"man_pilot\"],\n    tags: [\"man\", \"pilot\", \"plane\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-2708-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u2708\",\n    name: \"woman_pilot\",\n    shortcodes: [\"woman_pilot\"],\n    tags: [\"pilot\", \"plane\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-2708-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F680}\",\n    name: \"astronaut\",\n    shortcodes: [\"astronaut\"],\n    tags: [\"rocket\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f680.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F680}\",\n    name: \"man_astronaut\",\n    shortcodes: [\"man_astronaut\"],\n    tags: [\"astronaut\", \"man\", \"rocket\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f680.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F680}\",\n    name: \"woman_astronaut\",\n    shortcodes: [\"woman_astronaut\"],\n    tags: [\"astronaut\", \"rocket\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f680.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F692}\",\n    name: \"firefighter\",\n    shortcodes: [\"firefighter\"],\n    tags: [\"fire\", \"firetruck\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f692.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F692}\",\n    name: \"man_firefighter\",\n    shortcodes: [\"man_firefighter\"],\n    tags: [\"firefighter\", \"firetruck\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f692.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F692}\",\n    name: \"woman_firefighter\",\n    shortcodes: [\"woman_firefighter\"],\n    tags: [\"firefighter\", \"firetruck\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f692.png\"\n  },\n  {\n    emoji: \"\\u{1F46E}\",\n    name: \"cop\",\n    shortcodes: [\"cop\", \"police_officer\"],\n    tags: [\"cop\", \"officer\", \"police\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f46e.png\"\n  },\n  {\n    emoji: \"\\u{1F46E}\\u200D\\u2642\",\n    name: \"policeman\",\n    shortcodes: [\"man_police_officer\"],\n    tags: [\"cop\", \"man\", \"officer\", \"police\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f46e-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F46E}\\u200D\\u2640\",\n    name: \"policewoman\",\n    shortcodes: [\"woman_police_officer\"],\n    tags: [\"cop\", \"officer\", \"police\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f46e-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F575}\",\n    name: \"detective\",\n    shortcodes: [\"detective\"],\n    tags: [\"sleuth\", \"spy\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f575-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F575}\\u200D\\u2642\\uFE0F\",\n    name: \"male_detective\",\n    shortcodes: [\"man_detective\"],\n    tags: [\"detective\", \"man\", \"sleuth\", \"spy\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f575-fe0f-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F575}\\u200D\\u2640\\uFE0F\",\n    name: \"female_detective\",\n    shortcodes: [\"woman_detective\"],\n    tags: [\"detective\", \"sleuth\", \"spy\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f575-fe0f-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F482}\",\n    name: \"guard\",\n    shortcodes: [\"guard\"],\n    tags: [\"guard\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f482.png\"\n  },\n  {\n    emoji: \"\\u{1F482}\\u200D\\u2642\",\n    name: \"guardsman\",\n    shortcodes: [\"man_guard\"],\n    tags: [\"guard\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f482-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F482}\\u200D\\u2640\",\n    name: \"guardswoman\",\n    shortcodes: [\"woman_guard\"],\n    tags: [\"guard\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f482-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F977}\",\n    name: \"ninja\",\n    shortcodes: [\"ninja\"],\n    tags: [\"fighter\", \"hidden\", \"stealth\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f977.png\"\n  },\n  {\n    emoji: \"\\u{1F477}\",\n    name: \"construction_worker\",\n    shortcodes: [\"construction_worker\"],\n    tags: [\"construction\", \"hat\", \"worker\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f477.png\"\n  },\n  {\n    emoji: \"\\u{1F477}\\u200D\\u2642\",\n    name: \"construction_worker_man\",\n    shortcodes: [\"man_construction_worker\"],\n    tags: [\"construction\", \"man\", \"worker\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f477-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F477}\\u200D\\u2640\",\n    name: \"construction_worker_woman\",\n    shortcodes: [\"woman_construction_worker\"],\n    tags: [\"construction\", \"woman\", \"worker\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f477-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1FAC5}\",\n    name: \"person_with_crown\",\n    shortcodes: [\"person_with_crown\", \"royalty\"],\n    tags: [\"monarch\", \"noble\", \"regal\", \"royalty\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F934}\",\n    name: \"prince\",\n    shortcodes: [\"prince\"],\n    tags: [\"prince\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f934.png\"\n  },\n  {\n    emoji: \"\\u{1F478}\",\n    name: \"princess\",\n    shortcodes: [\"princess\"],\n    tags: [\"fairy tale\", \"fantasy\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f478.png\"\n  },\n  {\n    emoji: \"\\u{1F473}\",\n    name: \"person_with_turban\",\n    shortcodes: [\"person_wearing_turban\"],\n    tags: [\"turban\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f473.png\"\n  },\n  {\n    emoji: \"\\u{1F473}\\u200D\\u2642\",\n    name: \"man_with_turban\",\n    shortcodes: [\"man_wearing_turban\"],\n    tags: [\"man\", \"turban\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f473-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F473}\\u200D\\u2640\",\n    name: \"woman_with_turban\",\n    shortcodes: [\"woman_wearing_turban\"],\n    tags: [\"turban\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f473-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F472}\",\n    name: \"man_with_gua_pi_mao\",\n    shortcodes: [\"person_with_skullcap\"],\n    tags: [\"cap\", \"gua pi mao\", \"hat\", \"person\", \"skullcap\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f472.png\"\n  },\n  {\n    emoji: \"\\u{1F9D5}\",\n    name: \"woman_with_headscarf\",\n    shortcodes: [\"woman_with_headscarf\"],\n    tags: [\"headscarf\", \"hijab\", \"mantilla\", \"tichel\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d5.png\"\n  },\n  {\n    emoji: \"\\u{1F935}\",\n    name: \"person_in_tuxedo\",\n    shortcodes: [\"person_in_tuxedo\"],\n    tags: [\"groom\", \"person\", \"tuxedo\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f935.png\"\n  },\n  {\n    emoji: \"\\u{1F935}\\u200D\\u2642\",\n    name: \"man_in_tuxedo\",\n    shortcodes: [\"man_in_tuxedo\"],\n    tags: [\"man\", \"tuxedo\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f935-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F935}\\u200D\\u2640\",\n    name: \"woman_in_tuxedo\",\n    shortcodes: [\"woman_in_tuxedo\"],\n    tags: [\"tuxedo\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f935-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F470}\",\n    name: \"person_with_veil\",\n    shortcodes: [\"person_with_veil\"],\n    tags: [\"bride\", \"person\", \"veil\", \"wedding\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f470.png\"\n  },\n  {\n    emoji: \"\\u{1F470}\\u200D\\u2642\",\n    name: \"man_with_veil\",\n    shortcodes: [\"man_with_veil\"],\n    tags: [\"man\", \"veil\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f470-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F470}\\u200D\\u2640\",\n    name: \"bride_with_veil\",\n    shortcodes: [\"woman_with_veil\"],\n    tags: [\"veil\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f470-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F930}\",\n    name: \"pregnant_woman\",\n    shortcodes: [\"pregnant_woman\"],\n    tags: [\"pregnant\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f930.png\"\n  },\n  {\n    emoji: \"\\u{1FAC3}\",\n    name: \"pregnant_man\",\n    shortcodes: [\"pregnant_man\"],\n    tags: [\"belly\", \"bloated\", \"full\", \"pregnant\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1FAC4}\",\n    name: \"pregnant_person\",\n    shortcodes: [\"pregnant_person\"],\n    tags: [\"belly\", \"bloated\", \"full\", \"pregnant\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F931}\",\n    name: \"breast_feeding\",\n    shortcodes: [\"breast_feeding\"],\n    tags: [\"baby\", \"breast\", \"nursing\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f931.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F37C}\",\n    name: \"woman_feeding_baby\",\n    shortcodes: [\"woman_feeding_baby\"],\n    tags: [\"baby\", \"feeding\", \"nursing\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f37c.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F37C}\",\n    name: \"man_feeding_baby\",\n    shortcodes: [\"man_feeding_baby\"],\n    tags: [\"baby\", \"feeding\", \"man\", \"nursing\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f37c.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F37C}\",\n    name: \"person_feeding_baby\",\n    shortcodes: [\"person_feeding_baby\"],\n    tags: [\"baby\", \"feeding\", \"nursing\", \"person\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f37c.png\"\n  },\n  {\n    emoji: \"\\u{1F47C}\",\n    name: \"angel\",\n    shortcodes: [\"angel\"],\n    tags: [\"angel\", \"baby\", \"face\", \"fairy tale\", \"fantasy\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f47c.png\"\n  },\n  {\n    emoji: \"\\u{1F385}\",\n    name: \"santa\",\n    shortcodes: [\"santa\"],\n    tags: [\"celebration\", \"christmas\", \"claus\", \"father\", \"santa\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f385.png\"\n  },\n  {\n    emoji: \"\\u{1F936}\",\n    name: \"mrs_claus\",\n    shortcodes: [\"mrs_claus\"],\n    tags: [\"celebration\", \"christmas\", \"claus\", \"mother\", \"mrs.\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f936.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F384}\",\n    name: \"mx_claus\",\n    shortcodes: [\"mx_claus\"],\n    tags: [\"christmas\", \"claus\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f384.png\"\n  },\n  {\n    emoji: \"\\u{1F9B8}\",\n    name: \"superhero\",\n    shortcodes: [\"superhero\"],\n    tags: [\"good\", \"hero\", \"heroine\", \"superpower\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9b8.png\"\n  },\n  {\n    emoji: \"\\u{1F9B8}\\u200D\\u2642\",\n    name: \"superhero_man\",\n    shortcodes: [\"man_superhero\"],\n    tags: [\"good\", \"hero\", \"man\", \"superpower\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9b8-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9B8}\\u200D\\u2640\",\n    name: \"superhero_woman\",\n    shortcodes: [\"woman_superhero\"],\n    tags: [\"good\", \"hero\", \"heroine\", \"superpower\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9b8-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9B9}\",\n    name: \"supervillain\",\n    shortcodes: [\"supervillain\"],\n    tags: [\"criminal\", \"evil\", \"superpower\", \"villain\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9b9.png\"\n  },\n  {\n    emoji: \"\\u{1F9B9}\\u200D\\u2642\",\n    name: \"supervillain_man\",\n    shortcodes: [\"man_supervillain\"],\n    tags: [\"criminal\", \"evil\", \"man\", \"superpower\", \"villain\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9b9-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9B9}\\u200D\\u2640\",\n    name: \"supervillain_woman\",\n    shortcodes: [\"woman_supervillain\"],\n    tags: [\"criminal\", \"evil\", \"superpower\", \"villain\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9b9-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9D9}\",\n    name: \"mage\",\n    shortcodes: [\"mage\"],\n    tags: [\"sorcerer\", \"sorceress\", \"witch\", \"wizard\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d9.png\"\n  },\n  {\n    emoji: \"\\u{1F9D9}\\u200D\\u2642\",\n    name: \"mage_man\",\n    shortcodes: [\"man_mage\"],\n    tags: [\"sorcerer\", \"wizard\"],\n    group: \"people & body\",\n    emoticons: [\":{>\"],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d9-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9D9}\\u200D\\u2640\",\n    name: \"mage_woman\",\n    shortcodes: [\"woman_mage\"],\n    tags: [\"sorceress\", \"witch\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d9-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9DA}\",\n    name: \"fairy\",\n    shortcodes: [\"fairy\"],\n    tags: [\"oberon\", \"puck\", \"titania\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9da.png\"\n  },\n  {\n    emoji: \"\\u{1F9DA}\\u200D\\u2642\",\n    name: \"fairy_man\",\n    shortcodes: [\"man_fairy\"],\n    tags: [\"oberon\", \"puck\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9da-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9DA}\\u200D\\u2640\",\n    name: \"fairy_woman\",\n    shortcodes: [\"woman_fairy\"],\n    tags: [\"titania\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9da-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9DB}\",\n    name: \"vampire\",\n    shortcodes: [\"vampire\"],\n    tags: [\"dracula\", \"undead\"],\n    group: \"people & body\",\n    emoticons: [\":E\"],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9db.png\"\n  },\n  {\n    emoji: \"\\u{1F9DB}\\u200D\\u2642\",\n    name: \"vampire_man\",\n    shortcodes: [\"man_vampire\"],\n    tags: [\"dracula\", \"undead\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9db-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9DB}\\u200D\\u2640\",\n    name: \"vampire_woman\",\n    shortcodes: [\"woman_vampire\"],\n    tags: [\"undead\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9db-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9DC}\",\n    name: \"merperson\",\n    shortcodes: [\"merperson\"],\n    tags: [\"mermaid\", \"merman\", \"merwoman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9dc.png\"\n  },\n  {\n    emoji: \"\\u{1F9DC}\\u200D\\u2642\",\n    name: \"merman\",\n    shortcodes: [\"merman\"],\n    tags: [\"triton\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9dc-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9DC}\\u200D\\u2640\",\n    name: \"mermaid\",\n    shortcodes: [\"mermaid\"],\n    tags: [\"merwoman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9dc-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9DD}\",\n    name: \"elf\",\n    shortcodes: [\"elf\"],\n    tags: [\"magical\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9dd.png\"\n  },\n  {\n    emoji: \"\\u{1F9DD}\\u200D\\u2642\",\n    name: \"elf_man\",\n    shortcodes: [\"man_elf\"],\n    tags: [\"magical\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9dd-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9DD}\\u200D\\u2640\",\n    name: \"elf_woman\",\n    shortcodes: [\"woman_elf\"],\n    tags: [\"magical\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9dd-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9DE}\",\n    name: \"genie\",\n    shortcodes: [\"genie\"],\n    tags: [\"djinn\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9de.png\"\n  },\n  {\n    emoji: \"\\u{1F9DE}\\u200D\\u2642\",\n    name: \"genie_man\",\n    shortcodes: [\"man_genie\"],\n    tags: [\"djinn\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9de-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9DE}\\u200D\\u2640\",\n    name: \"genie_woman\",\n    shortcodes: [\"woman_genie\"],\n    tags: [\"djinn\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9de-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9DF}\",\n    name: \"zombie\",\n    shortcodes: [\"zombie\"],\n    tags: [\"undead\", \"walking dead\"],\n    group: \"people & body\",\n    emoticons: [\"8#\"],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9df.png\"\n  },\n  {\n    emoji: \"\\u{1F9DF}\\u200D\\u2642\",\n    name: \"zombie_man\",\n    shortcodes: [\"man_zombie\"],\n    tags: [\"undead\", \"walking dead\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9df-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9DF}\\u200D\\u2640\",\n    name: \"zombie_woman\",\n    shortcodes: [\"woman_zombie\"],\n    tags: [\"undead\", \"walking dead\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9df-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9CC}\",\n    name: \"troll\",\n    shortcodes: [\"troll\"],\n    tags: [\"fairy tale\", \"fantasy\", \"monster\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F486}\",\n    name: \"massage\",\n    shortcodes: [\"massage\", \"person_getting_massage\"],\n    tags: [\"face\", \"massage\", \"salon\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f486.png\"\n  },\n  {\n    emoji: \"\\u{1F486}\\u200D\\u2642\",\n    name: \"massage_man\",\n    shortcodes: [\"man_getting_massage\"],\n    tags: [\"face\", \"man\", \"massage\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f486-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F486}\\u200D\\u2640\",\n    name: \"massage_woman\",\n    shortcodes: [\"woman_getting_massage\"],\n    tags: [\"face\", \"massage\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f486-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F487}\",\n    name: \"haircut\",\n    shortcodes: [\"haircut\", \"person_getting_haircut\"],\n    tags: [\"barber\", \"beauty\", \"haircut\", \"parlor\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f487.png\"\n  },\n  {\n    emoji: \"\\u{1F487}\\u200D\\u2642\",\n    name: \"haircut_man\",\n    shortcodes: [\"man_getting_haircut\"],\n    tags: [\"haircut\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f487-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F487}\\u200D\\u2640\",\n    name: \"haircut_woman\",\n    shortcodes: [\"woman_getting_haircut\"],\n    tags: [\"haircut\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f487-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6B6}\",\n    name: \"walking\",\n    shortcodes: [\"person_walking\", \"walking\"],\n    tags: [\"hike\", \"walk\", \"walking\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b6.png\"\n  },\n  {\n    emoji: \"\\u{1F6B6}\\u200D\\u2642\",\n    name: \"walking_man\",\n    shortcodes: [\"man_walking\"],\n    tags: [\"hike\", \"man\", \"walk\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b6-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6B6}\\u200D\\u2640\",\n    name: \"walking_woman\",\n    shortcodes: [\"woman_walking\"],\n    tags: [\"hike\", \"walk\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b6-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6B6}\\u200D\\u27A1\",\n    name: \"person_walking_right\",\n    shortcodes: [\"person_walking_right\"],\n    tags: [\"hike\", \"person walking\", \"walk\", \"walking\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F6B6}\\u200D\\u2640\\u200D\\u27A1\\uFE0F\",\n    name: \"woman_walking_right\",\n    shortcodes: [\"woman_walking_right\"],\n    tags: [\"hike\", \"walk\", \"woman\", \"woman walking\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F6B6}\\u200D\\u2642\\u200D\\u27A1\\uFE0F\",\n    name: \"man_walking_right\",\n    shortcodes: [\"man_walking_right\"],\n    tags: [\"hike\", \"man\", \"man walking\", \"walk\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F9CD}\",\n    name: \"standing_person\",\n    shortcodes: [\"person_standing\", \"standing\"],\n    tags: [\"stand\", \"standing\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9cd.png\"\n  },\n  {\n    emoji: \"\\u{1F9CD}\\u200D\\u2642\",\n    name: \"standing_man\",\n    shortcodes: [\"man_standing\"],\n    tags: [\"man\", \"standing\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9cd-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9CD}\\u200D\\u2640\",\n    name: \"standing_woman\",\n    shortcodes: [\"woman_standing\"],\n    tags: [\"standing\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9cd-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9CE}\",\n    name: \"kneeling_person\",\n    shortcodes: [\"kneeling\", \"person_kneeling\"],\n    tags: [\"kneel\", \"kneeling\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9ce.png\"\n  },\n  {\n    emoji: \"\\u{1F9CE}\\u200D\\u2642\",\n    name: \"kneeling_man\",\n    shortcodes: [\"man_kneeling\"],\n    tags: [\"kneeling\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9ce-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9CE}\\u200D\\u2640\",\n    name: \"kneeling_woman\",\n    shortcodes: [\"woman_kneeling\"],\n    tags: [\"kneeling\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9ce-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9CE}\\u200D\\u27A1\",\n    name: \"person_kneeling_right\",\n    shortcodes: [\"person_kneeling_right\"],\n    tags: [\"kneel\", \"kneeling\", \"person kneeling\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F9CE}\\u200D\\u2640\\u200D\\u27A1\\uFE0F\",\n    name: \"woman_kneeling_right\",\n    shortcodes: [\"woman_kneeling_right\"],\n    tags: [\"kneeling\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F9CE}\\u200D\\u2642\\u200D\\u27A1\\uFE0F\",\n    name: \"man_kneeling_right\",\n    shortcodes: [\"man_kneeling_right\"],\n    tags: [\"kneeling\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F9AF}\",\n    name: \"person_with_probing_cane\",\n    shortcodes: [\"person_with_probing_cane\", \"person_with_white_cane\"],\n    tags: [\"accessibility\", \"blind\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f9af.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F9AF}\\u200D\\u27A1\",\n    name: \"person_with_white_cane_right\",\n    shortcodes: [\"person_with_white_cane_right\"],\n    tags: [\"accessibility\", \"blind\", \"person with white cane\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F9AF}\",\n    name: \"man_with_probing_cane\",\n    shortcodes: [\"man_with_probing_cane\", \"man_with_white_cane\"],\n    tags: [\"accessibility\", \"blind\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f9af.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F9AF}\\u200D\\u27A1\",\n    name: \"man_with_white_cane_right\",\n    shortcodes: [\"man_with_white_cane_right\"],\n    tags: [\"accessibility\", \"blind\", \"man\", \"man with white cane\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F9AF}\",\n    name: \"woman_with_probing_cane\",\n    shortcodes: [\"woman_with_probing_cane\", \"woman_with_white_cane\"],\n    tags: [\"accessibility\", \"blind\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f9af.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F9AF}\\u200D\\u27A1\",\n    name: \"woman_with_white_cane_right\",\n    shortcodes: [\"woman_with_white_cane_right\"],\n    tags: [\"accessibility\", \"blind\", \"woman\", \"woman with white cane\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F9BC}\",\n    name: \"person_in_motorized_wheelchair\",\n    shortcodes: [\"person_in_motorized_wheelchair\"],\n    tags: [\"accessibility\", \"wheelchair\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f9bc.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F9BC}\\u200D\\u27A1\",\n    name: \"person_in_motorized_wheelchair_right\",\n    shortcodes: [\"person_in_motorized_wheelchair_right\"],\n    tags: [\"accessibility\", \"person in motorized wheelchair\", \"wheelchair\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F9BC}\",\n    name: \"man_in_motorized_wheelchair\",\n    shortcodes: [\"man_in_motorized_wheelchair\"],\n    tags: [\"accessibility\", \"man\", \"wheelchair\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f9bc.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F9BC}\\u200D\\u27A1\",\n    name: \"man_in_motorized_wheelchair_right\",\n    shortcodes: [\"man_in_motorized_wheelchair_right\"],\n    tags: [\"accessibility\", \"man\", \"man in motorized wheelchair\", \"wheelchair\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F9BC}\",\n    name: \"woman_in_motorized_wheelchair\",\n    shortcodes: [\"woman_in_motorized_wheelchair\"],\n    tags: [\"accessibility\", \"wheelchair\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f9bc.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F9BC}\\u200D\\u27A1\",\n    name: \"woman_in_motorized_wheelchair_right\",\n    shortcodes: [\"woman_in_motorized_wheelchair_right\"],\n    tags: [\"accessibility\", \"wheelchair\", \"woman\", \"woman in motorized wheelchair\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F9BD}\",\n    name: \"person_in_manual_wheelchair\",\n    shortcodes: [\"person_in_manual_wheelchair\"],\n    tags: [\"accessibility\", \"wheelchair\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12.1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f9bd.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F9BD}\\u200D\\u27A1\",\n    name: \"person_in_manual_wheelchair_right\",\n    shortcodes: [\"person_in_manual_wheelchair_right\"],\n    tags: [\"accessibility\", \"person in manual wheelchair\", \"wheelchair\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F9BD}\",\n    name: \"man_in_manual_wheelchair\",\n    shortcodes: [\"man_in_manual_wheelchair\"],\n    tags: [\"accessibility\", \"man\", \"wheelchair\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f9bd.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F9BD}\\u200D\\u27A1\",\n    name: \"man_in_manual_wheelchair_right\",\n    shortcodes: [\"man_in_manual_wheelchair_right\"],\n    tags: [\"accessibility\", \"man\", \"man in manual wheelchair\", \"wheelchair\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F9BD}\",\n    name: \"woman_in_manual_wheelchair\",\n    shortcodes: [\"woman_in_manual_wheelchair\"],\n    tags: [\"accessibility\", \"wheelchair\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f9bd.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F9BD}\\u200D\\u27A1\",\n    name: \"woman_in_manual_wheelchair_right\",\n    shortcodes: [\"woman_in_manual_wheelchair_right\"],\n    tags: [\"accessibility\", \"wheelchair\", \"woman\", \"woman in manual wheelchair\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F3C3}\",\n    name: \"runner\",\n    shortcodes: [\"person_running\", \"running\"],\n    tags: [\"marathon\", \"running\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3c3.png\"\n  },\n  {\n    emoji: \"\\u{1F3C3}\\u200D\\u2642\",\n    name: \"running_man\",\n    shortcodes: [\"man_running\"],\n    tags: [\"man\", \"marathon\", \"racing\", \"running\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3c3-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3C3}\\u200D\\u2640\",\n    name: \"running_woman\",\n    shortcodes: [\"woman_running\"],\n    tags: [\"marathon\", \"racing\", \"running\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3c3-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3C3}\\u200D\\u27A1\",\n    name: \"person_running_right\",\n    shortcodes: [\"person_running_right\"],\n    tags: [\"marathon\", \"person running\", \"running\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F3C3}\\u200D\\u2640\\u200D\\u27A1\\uFE0F\",\n    name: \"woman_running_right\",\n    shortcodes: [\"woman_running_right\"],\n    tags: [\"marathon\", \"racing\", \"running\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F3C3}\\u200D\\u2642\\u200D\\u27A1\\uFE0F\",\n    name: \"man_running_right\",\n    shortcodes: [\"man_running_right\"],\n    tags: [\"man\", \"marathon\", \"racing\", \"running\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F483}\",\n    name: \"dancer\",\n    shortcodes: [\"dancer\", \"woman_dancing\"],\n    tags: [\"dance\", \"dancing\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f483.png\"\n  },\n  {\n    emoji: \"\\u{1F57A}\",\n    name: \"man_dancing\",\n    shortcodes: [\"man_dancing\"],\n    tags: [\"dance\", \"dancing\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f57a.png\"\n  },\n  {\n    emoji: \"\\u{1F574}\",\n    name: \"business_suit_levitating\",\n    shortcodes: [\"levitate\", \"levitating\", \"person_in_suit_levitating\"],\n    tags: [\"business\", \"person\", \"suit\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f574-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F46F}\",\n    name: \"dancers\",\n    shortcodes: [\"dancers\", \"people_with_bunny_ears_partying\"],\n    tags: [\"bunny ear\", \"dancer\", \"partying\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f46f.png\"\n  },\n  {\n    emoji: \"\\u{1F46F}\\u200D\\u2642\",\n    name: \"dancing_men\",\n    shortcodes: [\"men_with_bunny_ears_partying\"],\n    tags: [\"bunny ear\", \"dancer\", \"men\", \"partying\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f46f-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F46F}\\u200D\\u2640\",\n    name: \"dancing_women\",\n    shortcodes: [\"women_with_bunny_ears_partying\"],\n    tags: [\"bunny ear\", \"dancer\", \"partying\", \"women\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f46f-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9D6}\",\n    name: \"sauna_person\",\n    shortcodes: [\"person_in_steamy_room\"],\n    tags: [\"sauna\", \"steam room\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d6.png\"\n  },\n  {\n    emoji: \"\\u{1F9D6}\\u200D\\u2642\",\n    name: \"sauna_man\",\n    shortcodes: [\"man_in_steamy_room\"],\n    tags: [\"sauna\", \"steam room\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d6-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9D6}\\u200D\\u2640\",\n    name: \"sauna_woman\",\n    shortcodes: [\"woman_in_steamy_room\"],\n    tags: [\"sauna\", \"steam room\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d6-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9D7}\",\n    name: \"climbing\",\n    shortcodes: [\"climbing\", \"person_climbing\"],\n    tags: [\"climber\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d7.png\"\n  },\n  {\n    emoji: \"\\u{1F9D7}\\u200D\\u2642\",\n    name: \"climbing_man\",\n    shortcodes: [\"man_climbing\"],\n    tags: [\"climber\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d7-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9D7}\\u200D\\u2640\",\n    name: \"climbing_woman\",\n    shortcodes: [\"woman_climbing\"],\n    tags: [\"climber\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d7-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F93A}\",\n    name: \"person_fencing\",\n    shortcodes: [\"fencer\", \"fencing\", \"person_fencing\"],\n    tags: [\"fencer\", \"fencing\", \"sword\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f93a.png\"\n  },\n  {\n    emoji: \"\\u{1F3C7}\",\n    name: \"horse_racing\",\n    shortcodes: [\"horse_racing\"],\n    tags: [\"horse\", \"jockey\", \"racehorse\", \"racing\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3c7.png\"\n  },\n  {\n    emoji: \"\\u26F7\",\n    name: \"skier\",\n    shortcodes: [\"person_skiing\", \"skier\", \"skiing\"],\n    tags: [\"ski\", \"snow\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26f7-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3C2}\",\n    name: \"snowboarder\",\n    shortcodes: [\"person_snowboarding\", \"snowboarder\", \"snowboarding\"],\n    tags: [\"ski\", \"snow\", \"snowboard\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3c2.png\"\n  },\n  {\n    emoji: \"\\u{1F3CC}\",\n    name: \"golfing\",\n    shortcodes: [\"golfer\", \"golfing\", \"person_golfing\"],\n    tags: [\"ball\", \"golf\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3cc-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3CC}\\u200D\\u2642\\uFE0F\",\n    name: \"golfing_man\",\n    shortcodes: [\"man_golfing\"],\n    tags: [\"golf\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3cc-fe0f-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3CC}\\u200D\\u2640\\uFE0F\",\n    name: \"golfing_woman\",\n    shortcodes: [\"woman_golfing\"],\n    tags: [\"golf\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3cc-fe0f-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3C4}\",\n    name: \"surfer\",\n    shortcodes: [\"person_surfing\", \"surfer\", \"surfing\"],\n    tags: [\"surfing\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3c4.png\"\n  },\n  {\n    emoji: \"\\u{1F3C4}\\u200D\\u2642\",\n    name: \"surfing_man\",\n    shortcodes: [\"man_surfing\"],\n    tags: [\"man\", \"surfing\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3c4-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3C4}\\u200D\\u2640\",\n    name: \"surfing_woman\",\n    shortcodes: [\"woman_surfing\"],\n    tags: [\"surfing\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3c4-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6A3}\",\n    name: \"rowboat\",\n    shortcodes: [\"person_rowing_boat\", \"rowboat\"],\n    tags: [\"boat\", \"rowboat\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6a3.png\"\n  },\n  {\n    emoji: \"\\u{1F6A3}\\u200D\\u2642\",\n    name: \"rowing_man\",\n    shortcodes: [\"man_rowing_boat\"],\n    tags: [\"boat\", \"man\", \"rowboat\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6a3-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6A3}\\u200D\\u2640\",\n    name: \"rowing_woman\",\n    shortcodes: [\"woman_rowing_boat\"],\n    tags: [\"boat\", \"rowboat\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6a3-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3CA}\",\n    name: \"swimmer\",\n    shortcodes: [\"person_swimming\", \"swimmer\", \"swimming\"],\n    tags: [\"swim\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3ca.png\"\n  },\n  {\n    emoji: \"\\u{1F3CA}\\u200D\\u2642\",\n    name: \"swimming_man\",\n    shortcodes: [\"man_swimming\"],\n    tags: [\"man\", \"swim\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3ca-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3CA}\\u200D\\u2640\",\n    name: \"swimming_woman\",\n    shortcodes: [\"woman_swimming\"],\n    tags: [\"swim\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3ca-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u26F9\",\n    name: \"bouncing_ball_person\",\n    shortcodes: [\"person_bouncing_ball\"],\n    tags: [\"ball\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26f9-fe0f.png\"\n  },\n  {\n    emoji: \"\\u26F9\\u200D\\u2642\\uFE0F\",\n    name: \"basketball_man\",\n    shortcodes: [\"man_bouncing_ball\"],\n    tags: [\"ball\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26f9-fe0f-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u26F9\\u200D\\u2640\\uFE0F\",\n    name: \"basketball_woman\",\n    shortcodes: [\"woman_bouncing_ball\"],\n    tags: [\"ball\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26f9-fe0f-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3CB}\",\n    name: \"weight_lifting\",\n    shortcodes: [\"person_lifting_weights\", \"weight_lifter\", \"weight_lifting\"],\n    tags: [\"lifter\", \"weight\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3cb-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3CB}\\u200D\\u2642\\uFE0F\",\n    name: \"weight_lifting_man\",\n    shortcodes: [\"man_lifting_weights\"],\n    tags: [\"man\", \"weight lifter\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3cb-fe0f-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3CB}\\u200D\\u2640\\uFE0F\",\n    name: \"weight_lifting_woman\",\n    shortcodes: [\"woman_lifting_weights\"],\n    tags: [\"weight lifter\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3cb-fe0f-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6B4}\",\n    name: \"bicyclist\",\n    shortcodes: [\"bicyclist\", \"biking\", \"person_biking\"],\n    tags: [\"bicycle\", \"biking\", \"cyclist\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b4.png\"\n  },\n  {\n    emoji: \"\\u{1F6B4}\\u200D\\u2642\",\n    name: \"biking_man\",\n    shortcodes: [\"man_biking\"],\n    tags: [\"bicycle\", \"biking\", \"cyclist\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b4-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6B4}\\u200D\\u2640\",\n    name: \"biking_woman\",\n    shortcodes: [\"woman_biking\"],\n    tags: [\"bicycle\", \"biking\", \"cyclist\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b4-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6B5}\",\n    name: \"mountain_bicyclist\",\n    shortcodes: [\"mountain_bicyclist\", \"mountain_biking\", \"person_mountain_biking\"],\n    tags: [\"bicycle\", \"bicyclist\", \"bike\", \"cyclist\", \"mountain\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b5.png\"\n  },\n  {\n    emoji: \"\\u{1F6B5}\\u200D\\u2642\",\n    name: \"mountain_biking_man\",\n    shortcodes: [\"man_mountain_biking\"],\n    tags: [\"bicycle\", \"bike\", \"cyclist\", \"man\", \"mountain\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b5-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6B5}\\u200D\\u2640\",\n    name: \"mountain_biking_woman\",\n    shortcodes: [\"woman_mountain_biking\"],\n    tags: [\"bicycle\", \"bike\", \"biking\", \"cyclist\", \"mountain\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b5-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F938}\",\n    name: \"cartwheeling\",\n    shortcodes: [\"cartwheeling\", \"person_cartwheel\"],\n    tags: [\"cartwheel\", \"gymnastics\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f938.png\"\n  },\n  {\n    emoji: \"\\u{1F938}\\u200D\\u2642\",\n    name: \"man_cartwheeling\",\n    shortcodes: [\"man_cartwheeling\"],\n    tags: [\"cartwheel\", \"gymnastics\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f938-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F938}\\u200D\\u2640\",\n    name: \"woman_cartwheeling\",\n    shortcodes: [\"woman_cartwheeling\"],\n    tags: [\"cartwheel\", \"gymnastics\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f938-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F93C}\",\n    name: \"wrestling\",\n    shortcodes: [\"people_wrestling\", \"wrestlers\", \"wrestling\"],\n    tags: [\"wrestle\", \"wrestler\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f93c.png\"\n  },\n  {\n    emoji: \"\\u{1F93C}\\u200D\\u2642\",\n    name: \"men_wrestling\",\n    shortcodes: [\"men_wrestling\"],\n    tags: [\"men\", \"wrestle\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f93c-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F93C}\\u200D\\u2640\",\n    name: \"women_wrestling\",\n    shortcodes: [\"women_wrestling\"],\n    tags: [\"women\", \"wrestle\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f93c-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F93D}\",\n    name: \"water_polo\",\n    shortcodes: [\"person_playing_water_polo\", \"water_polo\"],\n    tags: [\"polo\", \"water\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f93d.png\"\n  },\n  {\n    emoji: \"\\u{1F93D}\\u200D\\u2642\",\n    name: \"man_playing_water_polo\",\n    shortcodes: [\"man_playing_water_polo\"],\n    tags: [\"man\", \"water polo\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f93d-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F93D}\\u200D\\u2640\",\n    name: \"woman_playing_water_polo\",\n    shortcodes: [\"woman_playing_water_polo\"],\n    tags: [\"water polo\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f93d-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F93E}\",\n    name: \"handball_person\",\n    shortcodes: [\"handball\", \"person_playing_handball\"],\n    tags: [\"ball\", \"handball\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f93e.png\"\n  },\n  {\n    emoji: \"\\u{1F93E}\\u200D\\u2642\",\n    name: \"man_playing_handball\",\n    shortcodes: [\"man_playing_handball\"],\n    tags: [\"handball\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f93e-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F93E}\\u200D\\u2640\",\n    name: \"woman_playing_handball\",\n    shortcodes: [\"woman_playing_handball\"],\n    tags: [\"handball\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f93e-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F939}\",\n    name: \"juggling_person\",\n    shortcodes: [\"juggler\", \"juggling\", \"person_juggling\"],\n    tags: [\"balance\", \"juggle\", \"multitask\", \"skill\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f939.png\"\n  },\n  {\n    emoji: \"\\u{1F939}\\u200D\\u2642\",\n    name: \"man_juggling\",\n    shortcodes: [\"man_juggling\"],\n    tags: [\"juggling\", \"man\", \"multitask\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f939-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F939}\\u200D\\u2640\",\n    name: \"woman_juggling\",\n    shortcodes: [\"woman_juggling\"],\n    tags: [\"juggling\", \"multitask\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f939-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9D8}\",\n    name: \"lotus_position\",\n    shortcodes: [\"person_in_lotus_position\"],\n    tags: [\"meditation\", \"yoga\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d8.png\"\n  },\n  {\n    emoji: \"\\u{1F9D8}\\u200D\\u2642\",\n    name: \"lotus_position_man\",\n    shortcodes: [\"man_in_lotus_position\"],\n    tags: [\"meditation\", \"yoga\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d8-200d-2642-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9D8}\\u200D\\u2640\",\n    name: \"lotus_position_woman\",\n    shortcodes: [\"woman_in_lotus_position\"],\n    tags: [\"meditation\", \"yoga\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d8-200d-2640-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6C0}\",\n    name: \"bath\",\n    shortcodes: [\"bath\", \"person_taking_bath\"],\n    tags: [\"bath\", \"bathtub\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6c0.png\"\n  },\n  {\n    emoji: \"\\u{1F6CC}\",\n    name: \"sleeping_bed\",\n    shortcodes: [\"person_in_bed\", \"sleeping_accommodation\"],\n    tags: [\"good night\", \"hotel\", \"sleep\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6cc.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F91D}\\u200D\\u{1F9D1}\",\n    name: \"people_holding_hands\",\n    shortcodes: [\"people_holding_hands\"],\n    tags: [\"couple\", \"hand\", \"hold\", \"holding hands\", \"person\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9d1-200d-1f91d-200d-1f9d1.png\"\n  },\n  {\n    emoji: \"\\u{1F46D}\",\n    name: \"two_women_holding_hands\",\n    shortcodes: [\"two_women_holding_hands\"],\n    tags: [\"couple\", \"hand\", \"holding hands\", \"women\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f46d.png\"\n  },\n  {\n    emoji: \"\\u{1F46B}\",\n    name: \"couple\",\n    shortcodes: [\"couple\"],\n    tags: [\"couple\", \"hand\", \"hold\", \"holding hands\", \"man\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f46b.png\"\n  },\n  {\n    emoji: \"\\u{1F46C}\",\n    name: \"two_men_holding_hands\",\n    shortcodes: [\"two_men_holding_hands\"],\n    tags: [\"couple\", \"gemini\", \"holding hands\", \"man\", \"men\", \"twins\", \"zodiac\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f46c.png\"\n  },\n  {\n    emoji: \"\\u{1F48F}\",\n    name: \"couplekiss\",\n    shortcodes: [\"couple_kiss\", \"couplekiss\"],\n    tags: [\"couple\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f48f.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u2764\\u200D\\u{1F48B}\\u200D\\u{1F468}\",\n    name: \"couplekiss_man_woman\",\n    shortcodes: [\"kiss_mw\", \"kiss_wm\"],\n    tags: [\"couple\", \"kiss\", \"man\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-2764-fe0f-200d-1f48b-200d-1f468.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u2764\\u200D\\u{1F48B}\\u200D\\u{1F468}\",\n    name: \"couplekiss_man_man\",\n    shortcodes: [\"kiss_mm\"],\n    tags: [\"couple\", \"kiss\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u2764\\u200D\\u{1F48B}\\u200D\\u{1F469}\",\n    name: \"couplekiss_woman_woman\",\n    shortcodes: [\"kiss_ww\"],\n    tags: [\"couple\", \"kiss\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.png\"\n  },\n  {\n    emoji: \"\\u{1F491}\",\n    name: \"couple_with_heart\",\n    shortcodes: [\"couple_with_heart\"],\n    tags: [\"couple\", \"love\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f491.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u2764\\u200D\\u{1F468}\",\n    name: \"couple_with_heart_woman_man\",\n    shortcodes: [\"couple_with_heart_mw\", \"couple_with_heart_wm\"],\n    tags: [\"couple\", \"couple with heart\", \"love\", \"man\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-2764-fe0f-200d-1f468.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u2764\\u200D\\u{1F468}\",\n    name: \"couple_with_heart_man_man\",\n    shortcodes: [\"couple_with_heart_mm\"],\n    tags: [\"couple\", \"couple with heart\", \"love\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-2764-fe0f-200d-1f468.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u2764\\u200D\\u{1F469}\",\n    name: \"couple_with_heart_woman_woman\",\n    shortcodes: [\"couple_with_heart_ww\"],\n    tags: [\"couple\", \"couple with heart\", \"love\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-2764-fe0f-200d-1f469.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F469}\\u200D\\u{1F466}\",\n    name: \"family_man_woman_boy\",\n    shortcodes: [\"family_mwb\"],\n    tags: [\"boy\", \"family\", \"man\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f469-200d-1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F469}\\u200D\\u{1F467}\",\n    name: \"family_man_woman_girl\",\n    shortcodes: [\"family_mwg\"],\n    tags: [\"family\", \"girl\", \"man\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f469-200d-1f467.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F469}\\u200D\\u{1F467}\\u200D\\u{1F466}\",\n    name: \"family_man_woman_girl_boy\",\n    shortcodes: [\"family_mwgb\"],\n    tags: [\"boy\", \"family\", \"girl\", \"man\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f469-200d-1f467-200d-1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F469}\\u200D\\u{1F466}\\u200D\\u{1F466}\",\n    name: \"family_man_woman_boy_boy\",\n    shortcodes: [\"family_mwbb\"],\n    tags: [\"boy\", \"family\", \"man\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f469-200d-1f466-200d-1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F469}\\u200D\\u{1F467}\\u200D\\u{1F467}\",\n    name: \"family_man_woman_girl_girl\",\n    shortcodes: [\"family_mwgg\"],\n    tags: [\"family\", \"girl\", \"man\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f469-200d-1f467-200d-1f467.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F468}\\u200D\\u{1F466}\",\n    name: \"family_man_man_boy\",\n    shortcodes: [\"family_mmb\"],\n    tags: [\"boy\", \"family\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f468-200d-1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F468}\\u200D\\u{1F467}\",\n    name: \"family_man_man_girl\",\n    shortcodes: [\"family_mmg\"],\n    tags: [\"family\", \"girl\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f468-200d-1f467.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F468}\\u200D\\u{1F467}\\u200D\\u{1F466}\",\n    name: \"family_man_man_girl_boy\",\n    shortcodes: [\"family_mmgb\"],\n    tags: [\"boy\", \"family\", \"girl\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f468-200d-1f467-200d-1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F468}\\u200D\\u{1F466}\\u200D\\u{1F466}\",\n    name: \"family_man_man_boy_boy\",\n    shortcodes: [\"family_mmbb\"],\n    tags: [\"boy\", \"family\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f468-200d-1f466-200d-1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F468}\\u200D\\u{1F467}\\u200D\\u{1F467}\",\n    name: \"family_man_man_girl_girl\",\n    shortcodes: [\"family_mmgg\"],\n    tags: [\"family\", \"girl\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f468-200d-1f467-200d-1f467.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F469}\\u200D\\u{1F466}\",\n    name: \"family_woman_woman_boy\",\n    shortcodes: [\"family_wwb\"],\n    tags: [\"boy\", \"family\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f469-200d-1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F469}\\u200D\\u{1F467}\",\n    name: \"family_woman_woman_girl\",\n    shortcodes: [\"family_wwg\"],\n    tags: [\"family\", \"girl\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f469-200d-1f467.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F469}\\u200D\\u{1F467}\\u200D\\u{1F466}\",\n    name: \"family_woman_woman_girl_boy\",\n    shortcodes: [\"family_wwgb\"],\n    tags: [\"boy\", \"family\", \"girl\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f469-200d-1f467-200d-1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F469}\\u200D\\u{1F466}\\u200D\\u{1F466}\",\n    name: \"family_woman_woman_boy_boy\",\n    shortcodes: [\"family_wwbb\"],\n    tags: [\"boy\", \"family\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f469-200d-1f466-200d-1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F469}\\u200D\\u{1F467}\\u200D\\u{1F467}\",\n    name: \"family_woman_woman_girl_girl\",\n    shortcodes: [\"family_wwgg\"],\n    tags: [\"family\", \"girl\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f469-200d-1f467-200d-1f467.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F466}\",\n    name: \"family_man_boy\",\n    shortcodes: [\"family_mb\"],\n    tags: [\"boy\", \"family\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F466}\\u200D\\u{1F466}\",\n    name: \"family_man_boy_boy\",\n    shortcodes: [\"family_mbb\"],\n    tags: [\"boy\", \"family\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f466-200d-1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F467}\",\n    name: \"family_man_girl\",\n    shortcodes: [\"family_mg\"],\n    tags: [\"family\", \"girl\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f467.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F467}\\u200D\\u{1F466}\",\n    name: \"family_man_girl_boy\",\n    shortcodes: [\"family_mgb\"],\n    tags: [\"boy\", \"family\", \"girl\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f467-200d-1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F468}\\u200D\\u{1F467}\\u200D\\u{1F467}\",\n    name: \"family_man_girl_girl\",\n    shortcodes: [\"family_mgg\"],\n    tags: [\"family\", \"girl\", \"man\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f468-200d-1f467-200d-1f467.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F466}\",\n    name: \"family_woman_boy\",\n    shortcodes: [\"family_wb\"],\n    tags: [\"boy\", \"family\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F466}\\u200D\\u{1F466}\",\n    name: \"family_woman_boy_boy\",\n    shortcodes: [\"family_wbb\"],\n    tags: [\"boy\", \"family\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f466-200d-1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F467}\",\n    name: \"family_woman_girl\",\n    shortcodes: [\"family_wg\"],\n    tags: [\"family\", \"girl\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f467.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F467}\\u200D\\u{1F466}\",\n    name: \"family_woman_girl_boy\",\n    shortcodes: [\"family_wgb\"],\n    tags: [\"boy\", \"family\", \"girl\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f467-200d-1f466.png\"\n  },\n  {\n    emoji: \"\\u{1F469}\\u200D\\u{1F467}\\u200D\\u{1F467}\",\n    name: \"family_woman_girl_girl\",\n    shortcodes: [\"family_wgg\"],\n    tags: [\"family\", \"girl\", \"woman\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f469-200d-1f467-200d-1f467.png\"\n  },\n  {\n    emoji: \"\\u{1F5E3}\",\n    name: \"speaking_head\",\n    shortcodes: [\"speaking_head\"],\n    tags: [\"face\", \"head\", \"silhouette\", \"speak\", \"speaking\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5e3-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F464}\",\n    name: \"bust_in_silhouette\",\n    shortcodes: [\"bust_in_silhouette\"],\n    tags: [\"bust\", \"silhouette\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f464.png\"\n  },\n  {\n    emoji: \"\\u{1F465}\",\n    name: \"busts_in_silhouette\",\n    shortcodes: [\"busts_in_silhouette\"],\n    tags: [\"bust\", \"silhouette\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f465.png\"\n  },\n  {\n    emoji: \"\\u{1FAC2}\",\n    name: \"people_hugging\",\n    shortcodes: [\"people_hugging\"],\n    tags: [\"goodbye\", \"hello\", \"hug\", \"thanks\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fac2.png\"\n  },\n  {\n    emoji: \"\\u{1F46A}\",\n    name: \"family\",\n    shortcodes: [\"family\"],\n    tags: [\"family\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f46a.png\"\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F9D1}\\u200D\\u{1F9D2}\",\n    name: \"family_aac\",\n    shortcodes: [\"family_aac\"],\n    tags: [\"family: adult, adult, child\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F9D1}\\u200D\\u{1F9D2}\\u200D\\u{1F9D2}\",\n    name: \"family_aacc\",\n    shortcodes: [\"family_aacc\"],\n    tags: [\"family: adult, adult, child, child\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F9D2}\",\n    name: \"family_ac\",\n    shortcodes: [\"family_ac\"],\n    tags: [\"family: adult, child\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F9D1}\\u200D\\u{1F9D2}\\u200D\\u{1F9D2}\",\n    name: \"family_acc\",\n    shortcodes: [\"family_acc\"],\n    tags: [\"family: adult, child, child\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F463}\",\n    name: \"footprints\",\n    shortcodes: [\"footprints\"],\n    tags: [\"clothing\", \"footprint\", \"print\"],\n    group: \"people & body\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f463.png\"\n  },\n  {\n    emoji: \"\\u{1F3FB}\",\n    name: \"tone1\",\n    shortcodes: [\"tone1\", \"tone_light\"],\n    tags: [\"skin tone\", \"type 1\\u20132\"],\n    group: \"components\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3fb.png\"\n  },\n  {\n    emoji: \"\\u{1F3FC}\",\n    name: \"tone2\",\n    shortcodes: [\"tone2\", \"tone_medium_light\"],\n    tags: [\"skin tone\", \"type 3\"],\n    group: \"components\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3fc.png\"\n  },\n  {\n    emoji: \"\\u{1F3FD}\",\n    name: \"tone3\",\n    shortcodes: [\"tone3\", \"tone_medium\"],\n    tags: [\"skin tone\", \"type 4\"],\n    group: \"components\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3fd.png\"\n  },\n  {\n    emoji: \"\\u{1F3FE}\",\n    name: \"tone4\",\n    shortcodes: [\"tone4\", \"tone_medium_dark\"],\n    tags: [\"skin tone\", \"type 5\"],\n    group: \"components\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3fe.png\"\n  },\n  {\n    emoji: \"\\u{1F3FF}\",\n    name: \"tone5\",\n    shortcodes: [\"tone5\", \"tone_dark\"],\n    tags: [\"skin tone\", \"type 6\"],\n    group: \"components\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3ff.png\"\n  },\n  {\n    emoji: \"\\u{1F9B0}\",\n    name: \"red_hair\",\n    shortcodes: [\"red_hair\"],\n    tags: [\"ginger\", \"redhead\"],\n    group: \"components\",\n    emoticons: [],\n    version: 11\n  },\n  {\n    emoji: \"\\u{1F9B1}\",\n    name: \"curly_hair\",\n    shortcodes: [\"curly_hair\"],\n    tags: [\"afro\", \"curly\", \"ringlets\"],\n    group: \"components\",\n    emoticons: [],\n    version: 11\n  },\n  {\n    emoji: \"\\u{1F9B3}\",\n    name: \"white_hair\",\n    shortcodes: [\"white_hair\"],\n    tags: [\"gray\", \"hair\", \"old\", \"white\"],\n    group: \"components\",\n    emoticons: [],\n    version: 11\n  },\n  {\n    emoji: \"\\u{1F9B2}\",\n    name: \"no_hair\",\n    shortcodes: [\"no_hair\"],\n    tags: [\"chemotherapy\", \"hairless\", \"no hair\", \"shaven\"],\n    group: \"components\",\n    emoticons: [],\n    version: 11\n  },\n  {\n    emoji: \"\\u{1F435}\",\n    name: \"monkey_face\",\n    shortcodes: [\"monkey_face\"],\n    tags: [\"face\", \"monkey\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f435.png\"\n  },\n  {\n    emoji: \"\\u{1F412}\",\n    name: \"monkey\",\n    shortcodes: [\"monkey\"],\n    tags: [\"monkey\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f412.png\"\n  },\n  {\n    emoji: \"\\u{1F98D}\",\n    name: \"gorilla\",\n    shortcodes: [\"gorilla\"],\n    tags: [\"gorilla\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f98d.png\"\n  },\n  {\n    emoji: \"\\u{1F9A7}\",\n    name: \"orangutan\",\n    shortcodes: [\"orangutan\"],\n    tags: [\"ape\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9a7.png\"\n  },\n  {\n    emoji: \"\\u{1F436}\",\n    name: \"dog\",\n    shortcodes: [\"dog_face\"],\n    tags: [\"dog\", \"face\", \"pet\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f436.png\"\n  },\n  {\n    emoji: \"\\u{1F415}\",\n    name: \"dog2\",\n    shortcodes: [\"dog\"],\n    tags: [\"pet\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f415.png\"\n  },\n  {\n    emoji: \"\\u{1F9AE}\",\n    name: \"guide_dog\",\n    shortcodes: [\"guide_dog\"],\n    tags: [\"accessibility\", \"blind\", \"guide\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9ae.png\"\n  },\n  {\n    emoji: \"\\u{1F415}\\u200D\\u{1F9BA}\",\n    name: \"service_dog\",\n    shortcodes: [\"service_dog\"],\n    tags: [\"accessibility\", \"assistance\", \"dog\", \"service\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f415-200d-1f9ba.png\"\n  },\n  {\n    emoji: \"\\u{1F429}\",\n    name: \"poodle\",\n    shortcodes: [\"poodle\"],\n    tags: [\"dog\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f429.png\"\n  },\n  {\n    emoji: \"\\u{1F43A}\",\n    name: \"wolf\",\n    shortcodes: [\"wolf\", \"wolf_face\"],\n    tags: [\"face\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f43a.png\"\n  },\n  {\n    emoji: \"\\u{1F98A}\",\n    name: \"fox_face\",\n    shortcodes: [\"fox\", \"fox_face\"],\n    tags: [\"face\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f98a.png\"\n  },\n  {\n    emoji: \"\\u{1F99D}\",\n    name: \"raccoon\",\n    shortcodes: [\"raccoon\"],\n    tags: [\"curious\", \"sly\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f99d.png\"\n  },\n  {\n    emoji: \"\\u{1F431}\",\n    name: \"cat\",\n    shortcodes: [\"cat_face\"],\n    tags: [\"cat\", \"face\", \"pet\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f431.png\"\n  },\n  {\n    emoji: \"\\u{1F408}\",\n    name: \"cat2\",\n    shortcodes: [\"cat\"],\n    tags: [\"pet\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f408.png\"\n  },\n  {\n    emoji: \"\\u{1F408}\\u200D\\u2B1B\",\n    name: \"black_cat\",\n    shortcodes: [\"black_cat\"],\n    tags: [\"black\", \"cat\", \"unlucky\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f408-200d-2b1b.png\"\n  },\n  {\n    emoji: \"\\u{1F981}\",\n    name: \"lion\",\n    shortcodes: [\"lion\", \"lion_face\"],\n    tags: [\"face\", \"leo\", \"zodiac\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f981.png\"\n  },\n  {\n    emoji: \"\\u{1F42F}\",\n    name: \"tiger\",\n    shortcodes: [\"tiger_face\"],\n    tags: [\"face\", \"tiger\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f42f.png\"\n  },\n  {\n    emoji: \"\\u{1F405}\",\n    name: \"tiger2\",\n    shortcodes: [\"tiger\"],\n    tags: [\"tiger\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f405.png\"\n  },\n  {\n    emoji: \"\\u{1F406}\",\n    name: \"leopard\",\n    shortcodes: [\"leopard\"],\n    tags: [\"leopard\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f406.png\"\n  },\n  {\n    emoji: \"\\u{1F434}\",\n    name: \"horse\",\n    shortcodes: [\"horse_face\"],\n    tags: [\"face\", \"horse\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f434.png\"\n  },\n  {\n    emoji: \"\\u{1FACE}\",\n    name: \"moose\",\n    shortcodes: [\"moose\"],\n    tags: [\"animal\", \"antlers\", \"elk\", \"mammal\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1FACF}\",\n    name: \"donkey\",\n    shortcodes: [\"donkey\"],\n    tags: [\"animal\", \"ass\", \"burro\", \"mammal\", \"mule\", \"stubborn\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1F40E}\",\n    name: \"racehorse\",\n    shortcodes: [\"horse\", \"racehorse\"],\n    tags: [\"equestrian\", \"racehorse\", \"racing\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f40e.png\"\n  },\n  {\n    emoji: \"\\u{1F984}\",\n    name: \"unicorn\",\n    shortcodes: [\"unicorn\", \"unicorn_face\"],\n    tags: [\"face\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f984.png\"\n  },\n  {\n    emoji: \"\\u{1F993}\",\n    name: \"zebra\",\n    shortcodes: [\"zebra\"],\n    tags: [\"stripe\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f993.png\"\n  },\n  {\n    emoji: \"\\u{1F98C}\",\n    name: \"deer\",\n    shortcodes: [\"deer\"],\n    tags: [\"deer\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f98c.png\"\n  },\n  {\n    emoji: \"\\u{1F9AC}\",\n    name: \"bison\",\n    shortcodes: [\"bison\"],\n    tags: [\"buffalo\", \"herd\", \"wisent\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9ac.png\"\n  },\n  {\n    emoji: \"\\u{1F42E}\",\n    name: \"cow\",\n    shortcodes: [\"cow_face\"],\n    tags: [\"cow\", \"face\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f42e.png\"\n  },\n  {\n    emoji: \"\\u{1F402}\",\n    name: \"ox\",\n    shortcodes: [\"ox\"],\n    tags: [\"bull\", \"taurus\", \"zodiac\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f402.png\"\n  },\n  {\n    emoji: \"\\u{1F403}\",\n    name: \"water_buffalo\",\n    shortcodes: [\"water_buffalo\"],\n    tags: [\"buffalo\", \"water\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f403.png\"\n  },\n  {\n    emoji: \"\\u{1F404}\",\n    name: \"cow2\",\n    shortcodes: [\"cow\"],\n    tags: [\"cow\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f404.png\"\n  },\n  {\n    emoji: \"\\u{1F437}\",\n    name: \"pig\",\n    shortcodes: [\"pig_face\"],\n    tags: [\"face\", \"pig\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f437.png\"\n  },\n  {\n    emoji: \"\\u{1F416}\",\n    name: \"pig2\",\n    shortcodes: [\"pig\"],\n    tags: [\"sow\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f416.png\"\n  },\n  {\n    emoji: \"\\u{1F417}\",\n    name: \"boar\",\n    shortcodes: [\"boar\"],\n    tags: [\"pig\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f417.png\"\n  },\n  {\n    emoji: \"\\u{1F43D}\",\n    name: \"pig_nose\",\n    shortcodes: [\"pig_nose\"],\n    tags: [\"face\", \"nose\", \"pig\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f43d.png\"\n  },\n  {\n    emoji: \"\\u{1F40F}\",\n    name: \"ram\",\n    shortcodes: [\"ram\"],\n    tags: [\"aries\", \"male\", \"sheep\", \"zodiac\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f40f.png\"\n  },\n  {\n    emoji: \"\\u{1F411}\",\n    name: \"sheep\",\n    shortcodes: [\"ewe\", \"sheep\"],\n    tags: [\"female\", \"sheep\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f411.png\"\n  },\n  {\n    emoji: \"\\u{1F410}\",\n    name: \"goat\",\n    shortcodes: [\"goat\"],\n    tags: [\"capricorn\", \"zodiac\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f410.png\"\n  },\n  {\n    emoji: \"\\u{1F42A}\",\n    name: \"dromedary_camel\",\n    shortcodes: [\"dromedary_camel\"],\n    tags: [\"dromedary\", \"hump\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f42a.png\"\n  },\n  {\n    emoji: \"\\u{1F42B}\",\n    name: \"camel\",\n    shortcodes: [\"camel\"],\n    tags: [\"bactrian\", \"camel\", \"hump\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f42b.png\"\n  },\n  {\n    emoji: \"\\u{1F999}\",\n    name: \"llama\",\n    shortcodes: [\"llama\"],\n    tags: [\"alpaca\", \"guanaco\", \"vicu\\xF1a\", \"wool\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f999.png\"\n  },\n  {\n    emoji: \"\\u{1F992}\",\n    name: \"giraffe\",\n    shortcodes: [\"giraffe\"],\n    tags: [\"spots\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f992.png\"\n  },\n  {\n    emoji: \"\\u{1F418}\",\n    name: \"elephant\",\n    shortcodes: [\"elephant\"],\n    tags: [\"elephant\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f418.png\"\n  },\n  {\n    emoji: \"\\u{1F9A3}\",\n    name: \"mammoth\",\n    shortcodes: [\"mammoth\"],\n    tags: [\"extinction\", \"large\", \"tusk\", \"woolly\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9a3.png\"\n  },\n  {\n    emoji: \"\\u{1F98F}\",\n    name: \"rhinoceros\",\n    shortcodes: [\"rhino\", \"rhinoceros\"],\n    tags: [\"rhinoceros\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f98f.png\"\n  },\n  {\n    emoji: \"\\u{1F99B}\",\n    name: \"hippopotamus\",\n    shortcodes: [\"hippo\"],\n    tags: [\"hippo\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f99b.png\"\n  },\n  {\n    emoji: \"\\u{1F42D}\",\n    name: \"mouse\",\n    shortcodes: [\"mouse_face\"],\n    tags: [\"face\", \"mouse\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f42d.png\"\n  },\n  {\n    emoji: \"\\u{1F401}\",\n    name: \"mouse2\",\n    shortcodes: [\"mouse\"],\n    tags: [\"mouse\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f401.png\"\n  },\n  {\n    emoji: \"\\u{1F400}\",\n    name: \"rat\",\n    shortcodes: [\"rat\"],\n    tags: [\"rat\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f400.png\"\n  },\n  {\n    emoji: \"\\u{1F439}\",\n    name: \"hamster\",\n    shortcodes: [\"hamster\", \"hamster_face\"],\n    tags: [\"face\", \"pet\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f439.png\"\n  },\n  {\n    emoji: \"\\u{1F430}\",\n    name: \"rabbit\",\n    shortcodes: [\"rabbit_face\"],\n    tags: [\"bunny\", \"face\", \"pet\", \"rabbit\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f430.png\"\n  },\n  {\n    emoji: \"\\u{1F407}\",\n    name: \"rabbit2\",\n    shortcodes: [\"rabbit\"],\n    tags: [\"bunny\", \"pet\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f407.png\"\n  },\n  {\n    emoji: \"\\u{1F43F}\",\n    name: \"chipmunk\",\n    shortcodes: [\"chipmunk\"],\n    tags: [\"squirrel\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f43f-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9AB}\",\n    name: \"beaver\",\n    shortcodes: [\"beaver\"],\n    tags: [\"dam\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9ab.png\"\n  },\n  {\n    emoji: \"\\u{1F994}\",\n    name: \"hedgehog\",\n    shortcodes: [\"hedgehog\"],\n    tags: [\"spiny\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f994.png\"\n  },\n  {\n    emoji: \"\\u{1F987}\",\n    name: \"bat\",\n    shortcodes: [\"bat\"],\n    tags: [\"vampire\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f987.png\"\n  },\n  {\n    emoji: \"\\u{1F43B}\",\n    name: \"bear\",\n    shortcodes: [\"bear\", \"bear_face\"],\n    tags: [\"face\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f43b.png\"\n  },\n  {\n    emoji: \"\\u{1F43B}\\u200D\\u2744\",\n    name: \"polar_bear\",\n    shortcodes: [\"polar_bear\", \"polar_bear_face\"],\n    tags: [\"arctic\", \"bear\", \"white\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f43b-200d-2744-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F428}\",\n    name: \"koala\",\n    shortcodes: [\"koala\", \"koala_face\"],\n    tags: [\"face\", \"marsupial\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f428.png\"\n  },\n  {\n    emoji: \"\\u{1F43C}\",\n    name: \"panda_face\",\n    shortcodes: [\"panda\", \"panda_face\"],\n    tags: [\"face\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f43c.png\"\n  },\n  {\n    emoji: \"\\u{1F9A5}\",\n    name: \"sloth\",\n    shortcodes: [\"sloth\"],\n    tags: [\"lazy\", \"slow\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9a5.png\"\n  },\n  {\n    emoji: \"\\u{1F9A6}\",\n    name: \"otter\",\n    shortcodes: [\"otter\"],\n    tags: [\"fishing\", \"playful\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9a6.png\"\n  },\n  {\n    emoji: \"\\u{1F9A8}\",\n    name: \"skunk\",\n    shortcodes: [\"skunk\"],\n    tags: [\"stink\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9a8.png\"\n  },\n  {\n    emoji: \"\\u{1F998}\",\n    name: \"kangaroo\",\n    shortcodes: [\"kangaroo\"],\n    tags: [\"joey\", \"jump\", \"marsupial\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f998.png\"\n  },\n  {\n    emoji: \"\\u{1F9A1}\",\n    name: \"badger\",\n    shortcodes: [\"badger\"],\n    tags: [\"honey badger\", \"pester\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9a1.png\"\n  },\n  {\n    emoji: \"\\u{1F43E}\",\n    name: \"feet\",\n    shortcodes: [\"paw_prints\"],\n    tags: [\"feet\", \"paw\", \"print\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f43e.png\"\n  },\n  {\n    emoji: \"\\u{1F983}\",\n    name: \"turkey\",\n    shortcodes: [\"turkey\"],\n    tags: [\"bird\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f983.png\"\n  },\n  {\n    emoji: \"\\u{1F414}\",\n    name: \"chicken\",\n    shortcodes: [\"chicken\", \"chicken_face\"],\n    tags: [\"bird\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f414.png\"\n  },\n  {\n    emoji: \"\\u{1F413}\",\n    name: \"rooster\",\n    shortcodes: [\"rooster\"],\n    tags: [\"bird\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f413.png\"\n  },\n  {\n    emoji: \"\\u{1F423}\",\n    name: \"hatching_chick\",\n    shortcodes: [\"hatching_chick\"],\n    tags: [\"baby\", \"bird\", \"chick\", \"hatching\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f423.png\"\n  },\n  {\n    emoji: \"\\u{1F424}\",\n    name: \"baby_chick\",\n    shortcodes: [\"baby_chick\"],\n    tags: [\"baby\", \"bird\", \"chick\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f424.png\"\n  },\n  {\n    emoji: \"\\u{1F425}\",\n    name: \"hatched_chick\",\n    shortcodes: [\"hatched_chick\"],\n    tags: [\"baby\", \"bird\", \"chick\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f425.png\"\n  },\n  {\n    emoji: \"\\u{1F426}\",\n    name: \"bird\",\n    shortcodes: [\"bird\", \"bird_face\"],\n    tags: [\"bird\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f426.png\"\n  },\n  {\n    emoji: \"\\u{1F427}\",\n    name: \"penguin\",\n    shortcodes: [\"penguin\", \"penguin_face\"],\n    tags: [\"bird\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f427.png\"\n  },\n  {\n    emoji: \"\\u{1F54A}\",\n    name: \"dove\",\n    shortcodes: [\"dove\"],\n    tags: [\"bird\", \"fly\", \"peace\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f54a-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F985}\",\n    name: \"eagle\",\n    shortcodes: [\"eagle\"],\n    tags: [\"bird\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f985.png\"\n  },\n  {\n    emoji: \"\\u{1F986}\",\n    name: \"duck\",\n    shortcodes: [\"duck\"],\n    tags: [\"bird\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f986.png\"\n  },\n  {\n    emoji: \"\\u{1F9A2}\",\n    name: \"swan\",\n    shortcodes: [\"swan\"],\n    tags: [\"bird\", \"cygnet\", \"ugly duckling\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9a2.png\"\n  },\n  {\n    emoji: \"\\u{1F989}\",\n    name: \"owl\",\n    shortcodes: [\"owl\"],\n    tags: [\"bird\", \"wise\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f989.png\"\n  },\n  {\n    emoji: \"\\u{1F9A4}\",\n    name: \"dodo\",\n    shortcodes: [\"dodo\"],\n    tags: [\"extinction\", \"large\", \"mauritius\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9a4.png\"\n  },\n  {\n    emoji: \"\\u{1FAB6}\",\n    name: \"feather\",\n    shortcodes: [\"feather\"],\n    tags: [\"bird\", \"flight\", \"light\", \"plumage\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fab6.png\"\n  },\n  {\n    emoji: \"\\u{1F9A9}\",\n    name: \"flamingo\",\n    shortcodes: [\"flamingo\"],\n    tags: [\"flamboyant\", \"tropical\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9a9.png\"\n  },\n  {\n    emoji: \"\\u{1F99A}\",\n    name: \"peacock\",\n    shortcodes: [\"peacock\"],\n    tags: [\"bird\", \"ostentatious\", \"peahen\", \"proud\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f99a.png\"\n  },\n  {\n    emoji: \"\\u{1F99C}\",\n    name: \"parrot\",\n    shortcodes: [\"parrot\"],\n    tags: [\"bird\", \"pirate\", \"talk\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f99c.png\"\n  },\n  {\n    emoji: \"\\u{1FABD}\",\n    name: \"wing\",\n    shortcodes: [\"wing\"],\n    tags: [\"angelic\", \"aviation\", \"bird\", \"flying\", \"mythology\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1F426}\\u200D\\u2B1B\",\n    name: \"black_bird\",\n    shortcodes: [\"black_bird\"],\n    tags: [\"bird\", \"black\", \"crow\", \"raven\", \"rook\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1FABF}\",\n    name: \"goose\",\n    shortcodes: [\"goose\"],\n    tags: [\"bird\", \"fowl\", \"honk\", \"silly\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1F426}\\u200D\\u{1F525}\",\n    name: \"phoenix\",\n    shortcodes: [\"phoenix\"],\n    tags: [\"fantasy\", \"firebird\", \"rebirth\", \"reincarnation\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F438}\",\n    name: \"frog\",\n    shortcodes: [\"frog\", \"frog_face\"],\n    tags: [\"face\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f438.png\"\n  },\n  {\n    emoji: \"\\u{1F40A}\",\n    name: \"crocodile\",\n    shortcodes: [\"crocodile\"],\n    tags: [\"crocodile\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f40a.png\"\n  },\n  {\n    emoji: \"\\u{1F422}\",\n    name: \"turtle\",\n    shortcodes: [\"turtle\"],\n    tags: [\"terrapin\", \"tortoise\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f422.png\"\n  },\n  {\n    emoji: \"\\u{1F98E}\",\n    name: \"lizard\",\n    shortcodes: [\"lizard\"],\n    tags: [\"reptile\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f98e.png\"\n  },\n  {\n    emoji: \"\\u{1F40D}\",\n    name: \"snake\",\n    shortcodes: [\"snake\"],\n    tags: [\"bearer\", \"ophiuchus\", \"serpent\", \"zodiac\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f40d.png\"\n  },\n  {\n    emoji: \"\\u{1F432}\",\n    name: \"dragon_face\",\n    shortcodes: [\"dragon_face\"],\n    tags: [\"dragon\", \"face\", \"fairy tale\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f432.png\"\n  },\n  {\n    emoji: \"\\u{1F409}\",\n    name: \"dragon\",\n    shortcodes: [\"dragon\"],\n    tags: [\"fairy tale\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f409.png\"\n  },\n  {\n    emoji: \"\\u{1F995}\",\n    name: \"sauropod\",\n    shortcodes: [\"sauropod\"],\n    tags: [\"brachiosaurus\", \"brontosaurus\", \"diplodocus\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f995.png\"\n  },\n  {\n    emoji: \"\\u{1F996}\",\n    name: \"t-rex\",\n    shortcodes: [\"t-rex\", \"trex\"],\n    tags: [\"t-rex\", \"tyrannosaurus rex\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f996.png\"\n  },\n  {\n    emoji: \"\\u{1F433}\",\n    name: \"whale\",\n    shortcodes: [\"spouting_whale\"],\n    tags: [\"face\", \"spouting\", \"whale\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f433.png\"\n  },\n  {\n    emoji: \"\\u{1F40B}\",\n    name: \"whale2\",\n    shortcodes: [\"whale\"],\n    tags: [\"whale\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f40b.png\"\n  },\n  {\n    emoji: \"\\u{1F42C}\",\n    name: \"dolphin\",\n    shortcodes: [\"dolphin\"],\n    tags: [\"flipper\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f42c.png\"\n  },\n  {\n    emoji: \"\\u{1F9AD}\",\n    name: \"seal\",\n    shortcodes: [\"seal\"],\n    tags: [\"sea lion\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9ad.png\"\n  },\n  {\n    emoji: \"\\u{1F41F}\",\n    name: \"fish\",\n    shortcodes: [\"fish\"],\n    tags: [\"pisces\", \"zodiac\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f41f.png\"\n  },\n  {\n    emoji: \"\\u{1F420}\",\n    name: \"tropical_fish\",\n    shortcodes: [\"tropical_fish\"],\n    tags: [\"fish\", \"tropical\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f420.png\"\n  },\n  {\n    emoji: \"\\u{1F421}\",\n    name: \"blowfish\",\n    shortcodes: [\"blowfish\"],\n    tags: [\"fish\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f421.png\"\n  },\n  {\n    emoji: \"\\u{1F988}\",\n    name: \"shark\",\n    shortcodes: [\"shark\"],\n    tags: [\"fish\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f988.png\"\n  },\n  {\n    emoji: \"\\u{1F419}\",\n    name: \"octopus\",\n    shortcodes: [\"octopus\"],\n    tags: [\"octopus\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f419.png\"\n  },\n  {\n    emoji: \"\\u{1F41A}\",\n    name: \"shell\",\n    shortcodes: [\"shell\"],\n    tags: [\"shell\", \"spiral\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f41a.png\"\n  },\n  {\n    emoji: \"\\u{1FAB8}\",\n    name: \"coral\",\n    shortcodes: [\"coral\"],\n    tags: [\"ocean\", \"reef\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1FABC}\",\n    name: \"jellyfish\",\n    shortcodes: [\"jellyfish\"],\n    tags: [\"burn\", \"invertebrate\", \"jelly\", \"marine\", \"ouch\", \"stinger\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1F40C}\",\n    name: \"snail\",\n    shortcodes: [\"snail\"],\n    tags: [\"snail\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f40c.png\"\n  },\n  {\n    emoji: \"\\u{1F98B}\",\n    name: \"butterfly\",\n    shortcodes: [\"butterfly\"],\n    tags: [\"insect\", \"pretty\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f98b.png\"\n  },\n  {\n    emoji: \"\\u{1F41B}\",\n    name: \"bug\",\n    shortcodes: [\"bug\"],\n    tags: [\"insect\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f41b.png\"\n  },\n  {\n    emoji: \"\\u{1F41C}\",\n    name: \"ant\",\n    shortcodes: [\"ant\"],\n    tags: [\"insect\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f41c.png\"\n  },\n  {\n    emoji: \"\\u{1F41D}\",\n    name: \"bee\",\n    shortcodes: [\"bee\"],\n    tags: [\"bee\", \"insect\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f41d.png\"\n  },\n  {\n    emoji: \"\\u{1FAB2}\",\n    name: \"beetle\",\n    shortcodes: [\"beetle\"],\n    tags: [\"bug\", \"insect\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fab2.png\"\n  },\n  {\n    emoji: \"\\u{1F41E}\",\n    name: \"lady_beetle\",\n    shortcodes: [\"lady_beetle\"],\n    tags: [\"beetle\", \"insect\", \"ladybird\", \"ladybug\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f41e.png\"\n  },\n  {\n    emoji: \"\\u{1F997}\",\n    name: \"cricket\",\n    shortcodes: [\"cricket\"],\n    tags: [\"grasshopper\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f997.png\"\n  },\n  {\n    emoji: \"\\u{1FAB3}\",\n    name: \"cockroach\",\n    shortcodes: [\"cockroach\"],\n    tags: [\"insect\", \"pest\", \"roach\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fab3.png\"\n  },\n  {\n    emoji: \"\\u{1F577}\",\n    name: \"spider\",\n    shortcodes: [\"spider\"],\n    tags: [\"insect\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f577-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F578}\",\n    name: \"spider_web\",\n    shortcodes: [\"spider_web\"],\n    tags: [\"spider\", \"web\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f578-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F982}\",\n    name: \"scorpion\",\n    shortcodes: [\"scorpion\"],\n    tags: [\"scorpio\", \"zodiac\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f982.png\"\n  },\n  {\n    emoji: \"\\u{1F99F}\",\n    name: \"mosquito\",\n    shortcodes: [\"mosquito\"],\n    tags: [\"disease\", \"fever\", \"malaria\", \"pest\", \"virus\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f99f.png\"\n  },\n  {\n    emoji: \"\\u{1FAB0}\",\n    name: \"fly\",\n    shortcodes: [\"fly\"],\n    tags: [\"disease\", \"maggot\", \"pest\", \"rotting\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fab0.png\"\n  },\n  {\n    emoji: \"\\u{1FAB1}\",\n    name: \"worm\",\n    shortcodes: [\"worm\"],\n    tags: [\"annelid\", \"earthworm\", \"parasite\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fab1.png\"\n  },\n  {\n    emoji: \"\\u{1F9A0}\",\n    name: \"microbe\",\n    shortcodes: [\"microbe\"],\n    tags: [\"amoeba\", \"bacteria\", \"virus\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9a0.png\"\n  },\n  {\n    emoji: \"\\u{1F490}\",\n    name: \"bouquet\",\n    shortcodes: [\"bouquet\"],\n    tags: [\"flower\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f490.png\"\n  },\n  {\n    emoji: \"\\u{1F338}\",\n    name: \"cherry_blossom\",\n    shortcodes: [\"cherry_blossom\"],\n    tags: [\"blossom\", \"cherry\", \"flower\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f338.png\"\n  },\n  {\n    emoji: \"\\u{1F4AE}\",\n    name: \"white_flower\",\n    shortcodes: [\"white_flower\"],\n    tags: [\"flower\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4ae.png\"\n  },\n  {\n    emoji: \"\\u{1FAB7}\",\n    name: \"lotus\",\n    shortcodes: [\"lotus\"],\n    tags: [\"buddhism\", \"flower\", \"hinduism\", \"purity\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F3F5}\",\n    name: \"rosette\",\n    shortcodes: [\"rosette\"],\n    tags: [\"plant\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3f5-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F339}\",\n    name: \"rose\",\n    shortcodes: [\"rose\"],\n    tags: [\"flower\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f339.png\"\n  },\n  {\n    emoji: \"\\u{1F940}\",\n    name: \"wilted_flower\",\n    shortcodes: [\"wilted_flower\"],\n    tags: [\"flower\", \"wilted\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f940.png\"\n  },\n  {\n    emoji: \"\\u{1F33A}\",\n    name: \"hibiscus\",\n    shortcodes: [\"hibiscus\"],\n    tags: [\"flower\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f33a.png\"\n  },\n  {\n    emoji: \"\\u{1F33B}\",\n    name: \"sunflower\",\n    shortcodes: [\"sunflower\"],\n    tags: [\"flower\", \"sun\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f33b.png\"\n  },\n  {\n    emoji: \"\\u{1F33C}\",\n    name: \"blossom\",\n    shortcodes: [\"blossom\"],\n    tags: [\"flower\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f33c.png\"\n  },\n  {\n    emoji: \"\\u{1F337}\",\n    name: \"tulip\",\n    shortcodes: [\"tulip\"],\n    tags: [\"flower\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f337.png\"\n  },\n  {\n    emoji: \"\\u{1FABB}\",\n    name: \"hyacinth\",\n    shortcodes: [\"hyacinth\"],\n    tags: [\"bluebonnet\", \"flower\", \"lavender\", \"lupine\", \"snapdragon\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1F331}\",\n    name: \"seedling\",\n    shortcodes: [\"seedling\"],\n    tags: [\"young\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f331.png\"\n  },\n  {\n    emoji: \"\\u{1FAB4}\",\n    name: \"potted_plant\",\n    shortcodes: [\"potted_plant\"],\n    tags: [\"boring\", \"grow\", \"house\", \"nurturing\", \"plant\", \"useless\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fab4.png\"\n  },\n  {\n    emoji: \"\\u{1F332}\",\n    name: \"evergreen_tree\",\n    shortcodes: [\"evergreen_tree\"],\n    tags: [\"tree\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f332.png\"\n  },\n  {\n    emoji: \"\\u{1F333}\",\n    name: \"deciduous_tree\",\n    shortcodes: [\"deciduous_tree\"],\n    tags: [\"deciduous\", \"shedding\", \"tree\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f333.png\"\n  },\n  {\n    emoji: \"\\u{1F334}\",\n    name: \"palm_tree\",\n    shortcodes: [\"palm_tree\"],\n    tags: [\"palm\", \"tree\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f334.png\"\n  },\n  {\n    emoji: \"\\u{1F335}\",\n    name: \"cactus\",\n    shortcodes: [\"cactus\"],\n    tags: [\"plant\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f335.png\"\n  },\n  {\n    emoji: \"\\u{1F33E}\",\n    name: \"ear_of_rice\",\n    shortcodes: [\"ear_of_rice\", \"sheaf_of_rice\"],\n    tags: [\"ear\", \"grain\", \"rice\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f33e.png\"\n  },\n  {\n    emoji: \"\\u{1F33F}\",\n    name: \"herb\",\n    shortcodes: [\"herb\"],\n    tags: [\"leaf\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f33f.png\"\n  },\n  {\n    emoji: \"\\u2618\",\n    name: \"shamrock\",\n    shortcodes: [\"shamrock\"],\n    tags: [\"plant\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2618-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F340}\",\n    name: \"four_leaf_clover\",\n    shortcodes: [\"four_leaf_clover\"],\n    tags: [\"4\", \"clover\", \"four\", \"four-leaf clover\", \"leaf\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f340.png\"\n  },\n  {\n    emoji: \"\\u{1F341}\",\n    name: \"maple_leaf\",\n    shortcodes: [\"maple_leaf\"],\n    tags: [\"falling\", \"leaf\", \"maple\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f341.png\"\n  },\n  {\n    emoji: \"\\u{1F342}\",\n    name: \"fallen_leaf\",\n    shortcodes: [\"fallen_leaf\"],\n    tags: [\"falling\", \"leaf\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f342.png\"\n  },\n  {\n    emoji: \"\\u{1F343}\",\n    name: \"leaves\",\n    shortcodes: [\"leaves\"],\n    tags: [\"blow\", \"flutter\", \"leaf\", \"wind\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f343.png\"\n  },\n  {\n    emoji: \"\\u{1FAB9}\",\n    name: \"empty_nest\",\n    shortcodes: [\"empty_nest\", \"nest\"],\n    tags: [\"nesting\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1FABA}\",\n    name: \"nest_with_eggs\",\n    shortcodes: [\"nest_with_eggs\"],\n    tags: [\"nesting\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F344}\",\n    name: \"mushroom\",\n    shortcodes: [\"mushroom\"],\n    tags: [\"toadstool\"],\n    group: \"animals & nature\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f344.png\"\n  },\n  {\n    emoji: \"\\u{1F347}\",\n    name: \"grapes\",\n    shortcodes: [\"grapes\"],\n    tags: [\"fruit\", \"grape\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f347.png\"\n  },\n  {\n    emoji: \"\\u{1F348}\",\n    name: \"melon\",\n    shortcodes: [\"melon\"],\n    tags: [\"fruit\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f348.png\"\n  },\n  {\n    emoji: \"\\u{1F349}\",\n    name: \"watermelon\",\n    shortcodes: [\"watermelon\"],\n    tags: [\"fruit\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f349.png\"\n  },\n  {\n    emoji: \"\\u{1F34A}\",\n    name: \"mandarin\",\n    shortcodes: [\"orange\", \"tangerine\"],\n    tags: [\"fruit\", \"orange\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f34a.png\"\n  },\n  {\n    emoji: \"\\u{1F34B}\",\n    name: \"lemon\",\n    shortcodes: [\"lemon\"],\n    tags: [\"citrus\", \"fruit\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f34b.png\"\n  },\n  {\n    emoji: \"\\u{1F34B}\\u200D\\u{1F7E9}\",\n    name: \"lime\",\n    shortcodes: [\"lime\"],\n    tags: [\"citrus\", \"fruit\", \"tropical\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F34C}\",\n    name: \"banana\",\n    shortcodes: [\"banana\"],\n    tags: [\"fruit\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f34c.png\"\n  },\n  {\n    emoji: \"\\u{1F34D}\",\n    name: \"pineapple\",\n    shortcodes: [\"pineapple\"],\n    tags: [\"fruit\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f34d.png\"\n  },\n  {\n    emoji: \"\\u{1F96D}\",\n    name: \"mango\",\n    shortcodes: [\"mango\"],\n    tags: [\"fruit\", \"tropical\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f96d.png\"\n  },\n  {\n    emoji: \"\\u{1F34E}\",\n    name: \"apple\",\n    shortcodes: [\"apple\", \"red_apple\"],\n    tags: [\"apple\", \"fruit\", \"red\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f34e.png\"\n  },\n  {\n    emoji: \"\\u{1F34F}\",\n    name: \"green_apple\",\n    shortcodes: [\"green_apple\"],\n    tags: [\"apple\", \"fruit\", \"green\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f34f.png\"\n  },\n  {\n    emoji: \"\\u{1F350}\",\n    name: \"pear\",\n    shortcodes: [\"pear\"],\n    tags: [\"fruit\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f350.png\"\n  },\n  {\n    emoji: \"\\u{1F351}\",\n    name: \"peach\",\n    shortcodes: [\"peach\"],\n    tags: [\"fruit\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f351.png\"\n  },\n  {\n    emoji: \"\\u{1F352}\",\n    name: \"cherries\",\n    shortcodes: [\"cherries\"],\n    tags: [\"berries\", \"cherry\", \"fruit\", \"red\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f352.png\"\n  },\n  {\n    emoji: \"\\u{1F353}\",\n    name: \"strawberry\",\n    shortcodes: [\"strawberry\"],\n    tags: [\"berry\", \"fruit\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f353.png\"\n  },\n  {\n    emoji: \"\\u{1FAD0}\",\n    name: \"blueberries\",\n    shortcodes: [\"blueberries\"],\n    tags: [\"berry\", \"bilberry\", \"blue\", \"blueberry\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fad0.png\"\n  },\n  {\n    emoji: \"\\u{1F95D}\",\n    name: \"kiwi_fruit\",\n    shortcodes: [\"kiwi\"],\n    tags: [\"food\", \"fruit\", \"kiwi\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f95d.png\"\n  },\n  {\n    emoji: \"\\u{1F345}\",\n    name: \"tomato\",\n    shortcodes: [\"tomato\"],\n    tags: [\"fruit\", \"vegetable\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f345.png\"\n  },\n  {\n    emoji: \"\\u{1FAD2}\",\n    name: \"olive\",\n    shortcodes: [\"olive\"],\n    tags: [\"food\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fad2.png\"\n  },\n  {\n    emoji: \"\\u{1F965}\",\n    name: \"coconut\",\n    shortcodes: [\"coconut\"],\n    tags: [\"palm\", \"pi\\xF1a colada\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f965.png\"\n  },\n  {\n    emoji: \"\\u{1F951}\",\n    name: \"avocado\",\n    shortcodes: [\"avocado\"],\n    tags: [\"food\", \"fruit\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f951.png\"\n  },\n  {\n    emoji: \"\\u{1F346}\",\n    name: \"eggplant\",\n    shortcodes: [\"eggplant\"],\n    tags: [\"aubergine\", \"vegetable\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f346.png\"\n  },\n  {\n    emoji: \"\\u{1F954}\",\n    name: \"potato\",\n    shortcodes: [\"potato\"],\n    tags: [\"food\", \"vegetable\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f954.png\"\n  },\n  {\n    emoji: \"\\u{1F955}\",\n    name: \"carrot\",\n    shortcodes: [\"carrot\"],\n    tags: [\"food\", \"vegetable\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f955.png\"\n  },\n  {\n    emoji: \"\\u{1F33D}\",\n    name: \"corn\",\n    shortcodes: [\"corn\", \"ear_of_corn\"],\n    tags: [\"corn\", \"ear\", \"maize\", \"maze\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f33d.png\"\n  },\n  {\n    emoji: \"\\u{1F336}\",\n    name: \"hot_pepper\",\n    shortcodes: [\"hot_pepper\"],\n    tags: [\"hot\", \"pepper\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f336-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1FAD1}\",\n    name: \"bell_pepper\",\n    shortcodes: [\"bell_pepper\"],\n    tags: [\"capsicum\", \"pepper\", \"vegetable\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fad1.png\"\n  },\n  {\n    emoji: \"\\u{1F952}\",\n    name: \"cucumber\",\n    shortcodes: [\"cucumber\"],\n    tags: [\"food\", \"pickle\", \"vegetable\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f952.png\"\n  },\n  {\n    emoji: \"\\u{1F96C}\",\n    name: \"leafy_green\",\n    shortcodes: [\"leafy_green\"],\n    tags: [\"bok choy\", \"cabbage\", \"kale\", \"lettuce\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f96c.png\"\n  },\n  {\n    emoji: \"\\u{1F966}\",\n    name: \"broccoli\",\n    shortcodes: [\"broccoli\"],\n    tags: [\"wild cabbage\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f966.png\"\n  },\n  {\n    emoji: \"\\u{1F9C4}\",\n    name: \"garlic\",\n    shortcodes: [\"garlic\"],\n    tags: [\"flavoring\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9c4.png\"\n  },\n  {\n    emoji: \"\\u{1F9C5}\",\n    name: \"onion\",\n    shortcodes: [\"onion\"],\n    tags: [\"flavoring\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9c5.png\"\n  },\n  {\n    emoji: \"\\u{1F95C}\",\n    name: \"peanuts\",\n    shortcodes: [\"peanuts\"],\n    tags: [\"food\", \"nut\", \"peanut\", \"vegetable\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f95c.png\"\n  },\n  {\n    emoji: \"\\u{1FAD8}\",\n    name: \"beans\",\n    shortcodes: [\"beans\"],\n    tags: [\"food\", \"kidney\", \"legume\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F330}\",\n    name: \"chestnut\",\n    shortcodes: [\"chestnut\"],\n    tags: [\"plant\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f330.png\"\n  },\n  {\n    emoji: \"\\u{1FADA}\",\n    name: \"ginger_root\",\n    shortcodes: [\"ginger\"],\n    tags: [\"beer\", \"root\", \"spice\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1FADB}\",\n    name: \"pea_pod\",\n    shortcodes: [\"pea\"],\n    tags: [\"beans\", \"edamame\", \"legume\", \"pea\", \"pod\", \"vegetable\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1F344}\\u200D\\u{1F7EB}\",\n    name: \"brown_mushroom\",\n    shortcodes: [\"brown_mushroom\"],\n    tags: [\"food\", \"fungus\", \"nature\", \"vegetable\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u{1F35E}\",\n    name: \"bread\",\n    shortcodes: [\"bread\"],\n    tags: [\"loaf\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f35e.png\"\n  },\n  {\n    emoji: \"\\u{1F950}\",\n    name: \"croissant\",\n    shortcodes: [\"croissant\"],\n    tags: [\"bread\", \"breakfast\", \"food\", \"french\", \"roll\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f950.png\"\n  },\n  {\n    emoji: \"\\u{1F956}\",\n    name: \"baguette_bread\",\n    shortcodes: [\"baguette_bread\"],\n    tags: [\"baguette\", \"bread\", \"food\", \"french\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f956.png\"\n  },\n  {\n    emoji: \"\\u{1FAD3}\",\n    name: \"flatbread\",\n    shortcodes: [\"flatbread\"],\n    tags: [\"arepa\", \"lavash\", \"naan\", \"pita\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fad3.png\"\n  },\n  {\n    emoji: \"\\u{1F968}\",\n    name: \"pretzel\",\n    shortcodes: [\"pretzel\"],\n    tags: [\"twisted\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f968.png\"\n  },\n  {\n    emoji: \"\\u{1F96F}\",\n    name: \"bagel\",\n    shortcodes: [\"bagel\"],\n    tags: [\"bakery\", \"breakfast\", \"schmear\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f96f.png\"\n  },\n  {\n    emoji: \"\\u{1F95E}\",\n    name: \"pancakes\",\n    shortcodes: [\"pancakes\"],\n    tags: [\"breakfast\", \"cr\\xEApe\", \"food\", \"hotcake\", \"pancake\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f95e.png\"\n  },\n  {\n    emoji: \"\\u{1F9C7}\",\n    name: \"waffle\",\n    shortcodes: [\"waffle\"],\n    tags: [\"breakfast\", \"indecisive\", \"iron\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9c7.png\"\n  },\n  {\n    emoji: \"\\u{1F9C0}\",\n    name: \"cheese\",\n    shortcodes: [\"cheese\"],\n    tags: [\"cheese\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9c0.png\"\n  },\n  {\n    emoji: \"\\u{1F356}\",\n    name: \"meat_on_bone\",\n    shortcodes: [\"meat_on_bone\"],\n    tags: [\"bone\", \"meat\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f356.png\"\n  },\n  {\n    emoji: \"\\u{1F357}\",\n    name: \"poultry_leg\",\n    shortcodes: [\"poultry_leg\"],\n    tags: [\"bone\", \"chicken\", \"drumstick\", \"leg\", \"poultry\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f357.png\"\n  },\n  {\n    emoji: \"\\u{1F969}\",\n    name: \"cut_of_meat\",\n    shortcodes: [\"cut_of_meat\"],\n    tags: [\"chop\", \"lambchop\", \"porkchop\", \"steak\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f969.png\"\n  },\n  {\n    emoji: \"\\u{1F953}\",\n    name: \"bacon\",\n    shortcodes: [\"bacon\"],\n    tags: [\"breakfast\", \"food\", \"meat\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f953.png\"\n  },\n  {\n    emoji: \"\\u{1F354}\",\n    name: \"hamburger\",\n    shortcodes: [\"hamburger\"],\n    tags: [\"burger\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f354.png\"\n  },\n  {\n    emoji: \"\\u{1F35F}\",\n    name: \"fries\",\n    shortcodes: [\"french_fries\", \"fries\"],\n    tags: [\"french\", \"fries\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f35f.png\"\n  },\n  {\n    emoji: \"\\u{1F355}\",\n    name: \"pizza\",\n    shortcodes: [\"pizza\"],\n    tags: [\"cheese\", \"slice\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f355.png\"\n  },\n  {\n    emoji: \"\\u{1F32D}\",\n    name: \"hotdog\",\n    shortcodes: [\"hotdog\"],\n    tags: [\"frankfurter\", \"hotdog\", \"sausage\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f32d.png\"\n  },\n  {\n    emoji: \"\\u{1F96A}\",\n    name: \"sandwich\",\n    shortcodes: [\"sandwich\"],\n    tags: [\"bread\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f96a.png\"\n  },\n  {\n    emoji: \"\\u{1F32E}\",\n    name: \"taco\",\n    shortcodes: [\"taco\"],\n    tags: [\"mexican\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f32e.png\"\n  },\n  {\n    emoji: \"\\u{1F32F}\",\n    name: \"burrito\",\n    shortcodes: [\"burrito\"],\n    tags: [\"mexican\", \"wrap\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f32f.png\"\n  },\n  {\n    emoji: \"\\u{1FAD4}\",\n    name: \"tamale\",\n    shortcodes: [\"tamale\"],\n    tags: [\"mexican\", \"wrapped\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fad4.png\"\n  },\n  {\n    emoji: \"\\u{1F959}\",\n    name: \"stuffed_flatbread\",\n    shortcodes: [\"stuffed_flatbread\"],\n    tags: [\"falafel\", \"flatbread\", \"food\", \"gyro\", \"kebab\", \"stuffed\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f959.png\"\n  },\n  {\n    emoji: \"\\u{1F9C6}\",\n    name: \"falafel\",\n    shortcodes: [\"falafel\"],\n    tags: [\"chickpea\", \"meatball\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9c6.png\"\n  },\n  {\n    emoji: \"\\u{1F95A}\",\n    name: \"egg\",\n    shortcodes: [\"egg\"],\n    tags: [\"breakfast\", \"food\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f95a.png\"\n  },\n  {\n    emoji: \"\\u{1F373}\",\n    name: \"fried_egg\",\n    shortcodes: [\"cooking\", \"fried_egg\"],\n    tags: [\"breakfast\", \"egg\", \"frying\", \"pan\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f373.png\"\n  },\n  {\n    emoji: \"\\u{1F958}\",\n    name: \"shallow_pan_of_food\",\n    shortcodes: [\"shallow_pan_of_food\"],\n    tags: [\"casserole\", \"food\", \"paella\", \"pan\", \"shallow\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f958.png\"\n  },\n  {\n    emoji: \"\\u{1F372}\",\n    name: \"stew\",\n    shortcodes: [\"pot_of_food\", \"stew\"],\n    tags: [\"pot\", \"stew\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f372.png\"\n  },\n  {\n    emoji: \"\\u{1FAD5}\",\n    name: \"fondue\",\n    shortcodes: [\"fondue\"],\n    tags: [\"cheese\", \"chocolate\", \"melted\", \"pot\", \"swiss\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fad5.png\"\n  },\n  {\n    emoji: \"\\u{1F963}\",\n    name: \"bowl_with_spoon\",\n    shortcodes: [\"bowl_with_spoon\"],\n    tags: [\"breakfast\", \"cereal\", \"congee\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f963.png\"\n  },\n  {\n    emoji: \"\\u{1F957}\",\n    name: \"green_salad\",\n    shortcodes: [\"green_salad\", \"salad\"],\n    tags: [\"food\", \"green\", \"salad\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f957.png\"\n  },\n  {\n    emoji: \"\\u{1F37F}\",\n    name: \"popcorn\",\n    shortcodes: [\"popcorn\"],\n    tags: [\"popcorn\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f37f.png\"\n  },\n  {\n    emoji: \"\\u{1F9C8}\",\n    name: \"butter\",\n    shortcodes: [\"butter\"],\n    tags: [\"dairy\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9c8.png\"\n  },\n  {\n    emoji: \"\\u{1F9C2}\",\n    name: \"salt\",\n    shortcodes: [\"salt\"],\n    tags: [\"condiment\", \"shaker\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9c2.png\"\n  },\n  {\n    emoji: \"\\u{1F96B}\",\n    name: \"canned_food\",\n    shortcodes: [\"canned_food\"],\n    tags: [\"can\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f96b.png\"\n  },\n  {\n    emoji: \"\\u{1F371}\",\n    name: \"bento\",\n    shortcodes: [\"bento\", \"bento_box\"],\n    tags: [\"bento\", \"box\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f371.png\"\n  },\n  {\n    emoji: \"\\u{1F358}\",\n    name: \"rice_cracker\",\n    shortcodes: [\"rice_cracker\"],\n    tags: [\"cracker\", \"rice\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f358.png\"\n  },\n  {\n    emoji: \"\\u{1F359}\",\n    name: \"rice_ball\",\n    shortcodes: [\"rice_ball\"],\n    tags: [\"ball\", \"japanese\", \"rice\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f359.png\"\n  },\n  {\n    emoji: \"\\u{1F35A}\",\n    name: \"rice\",\n    shortcodes: [\"cooked_rice\", \"rice\"],\n    tags: [\"cooked\", \"rice\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f35a.png\"\n  },\n  {\n    emoji: \"\\u{1F35B}\",\n    name: \"curry\",\n    shortcodes: [\"curry\", \"curry_rice\"],\n    tags: [\"curry\", \"rice\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f35b.png\"\n  },\n  {\n    emoji: \"\\u{1F35C}\",\n    name: \"ramen\",\n    shortcodes: [\"ramen\", \"steaming_bowl\"],\n    tags: [\"bowl\", \"noodle\", \"ramen\", \"steaming\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f35c.png\"\n  },\n  {\n    emoji: \"\\u{1F35D}\",\n    name: \"spaghetti\",\n    shortcodes: [\"spaghetti\"],\n    tags: [\"pasta\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f35d.png\"\n  },\n  {\n    emoji: \"\\u{1F360}\",\n    name: \"sweet_potato\",\n    shortcodes: [\"sweet_potato\"],\n    tags: [\"potato\", \"roasted\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f360.png\"\n  },\n  {\n    emoji: \"\\u{1F362}\",\n    name: \"oden\",\n    shortcodes: [\"oden\"],\n    tags: [\"kebab\", \"seafood\", \"skewer\", \"stick\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f362.png\"\n  },\n  {\n    emoji: \"\\u{1F363}\",\n    name: \"sushi\",\n    shortcodes: [\"sushi\"],\n    tags: [\"sushi\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f363.png\"\n  },\n  {\n    emoji: \"\\u{1F364}\",\n    name: \"fried_shrimp\",\n    shortcodes: [\"fried_shrimp\"],\n    tags: [\"fried\", \"prawn\", \"shrimp\", \"tempura\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f364.png\"\n  },\n  {\n    emoji: \"\\u{1F365}\",\n    name: \"fish_cake\",\n    shortcodes: [\"fish_cake\"],\n    tags: [\"cake\", \"fish\", \"pastry\", \"swirl\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f365.png\"\n  },\n  {\n    emoji: \"\\u{1F96E}\",\n    name: \"moon_cake\",\n    shortcodes: [\"moon_cake\"],\n    tags: [\"autumn\", \"festival\", \"yu\\xE8b\\u01D0ng\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f96e.png\"\n  },\n  {\n    emoji: \"\\u{1F361}\",\n    name: \"dango\",\n    shortcodes: [\"dango\"],\n    tags: [\"dessert\", \"japanese\", \"skewer\", \"stick\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f361.png\"\n  },\n  {\n    emoji: \"\\u{1F95F}\",\n    name: \"dumpling\",\n    shortcodes: [\"dumpling\"],\n    tags: [\"empanada\", \"gy\\u014Dza\", \"jiaozi\", \"pierogi\", \"potsticker\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f95f.png\"\n  },\n  {\n    emoji: \"\\u{1F960}\",\n    name: \"fortune_cookie\",\n    shortcodes: [\"fortune_cookie\"],\n    tags: [\"prophecy\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f960.png\"\n  },\n  {\n    emoji: \"\\u{1F961}\",\n    name: \"takeout_box\",\n    shortcodes: [\"takeout_box\"],\n    tags: [\"oyster pail\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f961.png\"\n  },\n  {\n    emoji: \"\\u{1F980}\",\n    name: \"crab\",\n    shortcodes: [\"crab\"],\n    tags: [\"cancer\", \"zodiac\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f980.png\"\n  },\n  {\n    emoji: \"\\u{1F99E}\",\n    name: \"lobster\",\n    shortcodes: [\"lobster\"],\n    tags: [\"bisque\", \"claws\", \"seafood\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f99e.png\"\n  },\n  {\n    emoji: \"\\u{1F990}\",\n    name: \"shrimp\",\n    shortcodes: [\"shrimp\"],\n    tags: [\"food\", \"shellfish\", \"small\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f990.png\"\n  },\n  {\n    emoji: \"\\u{1F991}\",\n    name: \"squid\",\n    shortcodes: [\"squid\"],\n    tags: [\"food\", \"molusc\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f991.png\"\n  },\n  {\n    emoji: \"\\u{1F9AA}\",\n    name: \"oyster\",\n    shortcodes: [\"oyster\"],\n    tags: [\"diving\", \"pearl\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9aa.png\"\n  },\n  {\n    emoji: \"\\u{1F366}\",\n    name: \"icecream\",\n    shortcodes: [\"icecream\", \"soft_serve\"],\n    tags: [\"cream\", \"dessert\", \"ice\", \"icecream\", \"soft\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f366.png\"\n  },\n  {\n    emoji: \"\\u{1F367}\",\n    name: \"shaved_ice\",\n    shortcodes: [\"shaved_ice\"],\n    tags: [\"dessert\", \"ice\", \"shaved\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f367.png\"\n  },\n  {\n    emoji: \"\\u{1F368}\",\n    name: \"ice_cream\",\n    shortcodes: [\"ice_cream\"],\n    tags: [\"cream\", \"dessert\", \"ice\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f368.png\"\n  },\n  {\n    emoji: \"\\u{1F369}\",\n    name: \"doughnut\",\n    shortcodes: [\"doughnut\"],\n    tags: [\"breakfast\", \"dessert\", \"donut\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f369.png\"\n  },\n  {\n    emoji: \"\\u{1F36A}\",\n    name: \"cookie\",\n    shortcodes: [\"cookie\"],\n    tags: [\"dessert\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f36a.png\"\n  },\n  {\n    emoji: \"\\u{1F382}\",\n    name: \"birthday\",\n    shortcodes: [\"birthday\", \"birthday_cake\"],\n    tags: [\"birthday\", \"cake\", \"celebration\", \"dessert\", \"pastry\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f382.png\"\n  },\n  {\n    emoji: \"\\u{1F370}\",\n    name: \"cake\",\n    shortcodes: [\"cake\", \"shortcake\"],\n    tags: [\"cake\", \"dessert\", \"pastry\", \"slice\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f370.png\"\n  },\n  {\n    emoji: \"\\u{1F9C1}\",\n    name: \"cupcake\",\n    shortcodes: [\"cupcake\"],\n    tags: [\"bakery\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9c1.png\"\n  },\n  {\n    emoji: \"\\u{1F967}\",\n    name: \"pie\",\n    shortcodes: [\"pie\"],\n    tags: [\"filling\", \"pastry\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f967.png\"\n  },\n  {\n    emoji: \"\\u{1F36B}\",\n    name: \"chocolate_bar\",\n    shortcodes: [\"chocolate_bar\"],\n    tags: [\"bar\", \"chocolate\", \"dessert\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f36b.png\"\n  },\n  {\n    emoji: \"\\u{1F36C}\",\n    name: \"candy\",\n    shortcodes: [\"candy\"],\n    tags: [\"dessert\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f36c.png\"\n  },\n  {\n    emoji: \"\\u{1F36D}\",\n    name: \"lollipop\",\n    shortcodes: [\"lollipop\"],\n    tags: [\"candy\", \"dessert\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f36d.png\"\n  },\n  {\n    emoji: \"\\u{1F36E}\",\n    name: \"custard\",\n    shortcodes: [\"custard\"],\n    tags: [\"dessert\", \"pudding\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f36e.png\"\n  },\n  {\n    emoji: \"\\u{1F36F}\",\n    name: \"honey_pot\",\n    shortcodes: [\"honey_pot\"],\n    tags: [\"honey\", \"honeypot\", \"pot\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f36f.png\"\n  },\n  {\n    emoji: \"\\u{1F37C}\",\n    name: \"baby_bottle\",\n    shortcodes: [\"baby_bottle\"],\n    tags: [\"baby\", \"bottle\", \"drink\", \"milk\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f37c.png\"\n  },\n  {\n    emoji: \"\\u{1F95B}\",\n    name: \"milk_glass\",\n    shortcodes: [\"glass_of_milk\", \"milk\"],\n    tags: [\"drink\", \"glass\", \"milk\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f95b.png\"\n  },\n  {\n    emoji: \"\\u2615\",\n    name: \"coffee\",\n    shortcodes: [\"coffee\"],\n    tags: [\"beverage\", \"coffee\", \"drink\", \"hot\", \"steaming\", \"tea\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2615.png\"\n  },\n  {\n    emoji: \"\\u{1FAD6}\",\n    name: \"teapot\",\n    shortcodes: [\"teapot\"],\n    tags: [\"drink\", \"pot\", \"tea\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fad6.png\"\n  },\n  {\n    emoji: \"\\u{1F375}\",\n    name: \"tea\",\n    shortcodes: [\"tea\"],\n    tags: [\"beverage\", \"cup\", \"drink\", \"tea\", \"teacup\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f375.png\"\n  },\n  {\n    emoji: \"\\u{1F376}\",\n    name: \"sake\",\n    shortcodes: [\"sake\"],\n    tags: [\"bar\", \"beverage\", \"bottle\", \"cup\", \"drink\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f376.png\"\n  },\n  {\n    emoji: \"\\u{1F37E}\",\n    name: \"champagne\",\n    shortcodes: [\"champagne\"],\n    tags: [\"bar\", \"bottle\", \"cork\", \"drink\", \"popping\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f37e.png\"\n  },\n  {\n    emoji: \"\\u{1F377}\",\n    name: \"wine_glass\",\n    shortcodes: [\"wine_glass\"],\n    tags: [\"bar\", \"beverage\", \"drink\", \"glass\", \"wine\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f377.png\"\n  },\n  {\n    emoji: \"\\u{1F378}\",\n    name: \"cocktail\",\n    shortcodes: [\"cocktail\"],\n    tags: [\"bar\", \"cocktail\", \"drink\", \"glass\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f378.png\"\n  },\n  {\n    emoji: \"\\u{1F379}\",\n    name: \"tropical_drink\",\n    shortcodes: [\"tropical_drink\"],\n    tags: [\"bar\", \"drink\", \"tropical\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f379.png\"\n  },\n  {\n    emoji: \"\\u{1F37A}\",\n    name: \"beer\",\n    shortcodes: [\"beer\"],\n    tags: [\"bar\", \"beer\", \"drink\", \"mug\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f37a.png\"\n  },\n  {\n    emoji: \"\\u{1F37B}\",\n    name: \"beers\",\n    shortcodes: [\"beers\"],\n    tags: [\"bar\", \"beer\", \"clink\", \"drink\", \"mug\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f37b.png\"\n  },\n  {\n    emoji: \"\\u{1F942}\",\n    name: \"clinking_glasses\",\n    shortcodes: [\"clinking_glasses\"],\n    tags: [\"celebrate\", \"clink\", \"drink\", \"glass\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f942.png\"\n  },\n  {\n    emoji: \"\\u{1F943}\",\n    name: \"tumbler_glass\",\n    shortcodes: [\"tumbler_glass\", \"whisky\"],\n    tags: [\"glass\", \"liquor\", \"shot\", \"tumbler\", \"whisky\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f943.png\"\n  },\n  {\n    emoji: \"\\u{1FAD7}\",\n    name: \"pouring_liquid\",\n    shortcodes: [\"pour\", \"pouring_liquid\"],\n    tags: [\"drink\", \"empty\", \"glass\", \"spill\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F964}\",\n    name: \"cup_with_straw\",\n    shortcodes: [\"cup_with_straw\"],\n    tags: [\"juice\", \"soda\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f964.png\"\n  },\n  {\n    emoji: \"\\u{1F9CB}\",\n    name: \"bubble_tea\",\n    shortcodes: [\"boba_drink\", \"bubble_tea\"],\n    tags: [\"bubble\", \"milk\", \"pearl\", \"tea\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9cb.png\"\n  },\n  {\n    emoji: \"\\u{1F9C3}\",\n    name: \"beverage_box\",\n    shortcodes: [\"beverage_box\", \"juice_box\"],\n    tags: [\"beverage\", \"box\", \"juice\", \"straw\", \"sweet\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9c3.png\"\n  },\n  {\n    emoji: \"\\u{1F9C9}\",\n    name: \"mate\",\n    shortcodes: [\"mate\"],\n    tags: [\"drink\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9c9.png\"\n  },\n  {\n    emoji: \"\\u{1F9CA}\",\n    name: \"ice_cube\",\n    shortcodes: [\"ice\", \"ice_cube\"],\n    tags: [\"cold\", \"ice cube\", \"iceberg\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9ca.png\"\n  },\n  {\n    emoji: \"\\u{1F962}\",\n    name: \"chopsticks\",\n    shortcodes: [\"chopsticks\"],\n    tags: [\"hashi\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f962.png\"\n  },\n  {\n    emoji: \"\\u{1F37D}\",\n    name: \"plate_with_cutlery\",\n    shortcodes: [\"fork_knife_plate\"],\n    tags: [\"cooking\", \"fork\", \"knife\", \"plate\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f37d-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F374}\",\n    name: \"fork_and_knife\",\n    shortcodes: [\"fork_and_knife\"],\n    tags: [\"cooking\", \"cutlery\", \"fork\", \"knife\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f374.png\"\n  },\n  {\n    emoji: \"\\u{1F944}\",\n    name: \"spoon\",\n    shortcodes: [\"spoon\"],\n    tags: [\"tableware\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f944.png\"\n  },\n  {\n    emoji: \"\\u{1F52A}\",\n    name: \"hocho\",\n    shortcodes: [\"knife\"],\n    tags: [\"cooking\", \"hocho\", \"knife\", \"tool\", \"weapon\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f52a.png\"\n  },\n  {\n    emoji: \"\\u{1FAD9}\",\n    name: \"jar\",\n    shortcodes: [\"jar\"],\n    tags: [\"condiment\", \"container\", \"empty\", \"sauce\", \"store\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F3FA}\",\n    name: \"amphora\",\n    shortcodes: [\"amphora\"],\n    tags: [\"aquarius\", \"cooking\", \"drink\", \"jug\", \"zodiac\"],\n    group: \"food & drink\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3fa.png\"\n  },\n  {\n    emoji: \"\\u{1F30D}\",\n    name: \"earth_africa\",\n    shortcodes: [\"earth_africa\", \"earth_europe\"],\n    tags: [\"africa\", \"earth\", \"europe\", \"globe\", \"globe showing europe-africa\", \"world\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f30d.png\"\n  },\n  {\n    emoji: \"\\u{1F30E}\",\n    name: \"earth_americas\",\n    shortcodes: [\"earth_americas\"],\n    tags: [\"americas\", \"earth\", \"globe\", \"globe showing americas\", \"world\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f30e.png\"\n  },\n  {\n    emoji: \"\\u{1F30F}\",\n    name: \"earth_asia\",\n    shortcodes: [\"earth_asia\"],\n    tags: [\"asia\", \"australia\", \"earth\", \"globe\", \"globe showing asia-australia\", \"world\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f30f.png\"\n  },\n  {\n    emoji: \"\\u{1F310}\",\n    name: \"globe_with_meridians\",\n    shortcodes: [\"globe_with_meridians\"],\n    tags: [\"earth\", \"globe\", \"meridians\", \"world\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f310.png\"\n  },\n  {\n    emoji: \"\\u{1F5FA}\",\n    name: \"world_map\",\n    shortcodes: [\"world_map\"],\n    tags: [\"map\", \"world\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5fa-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F5FE}\",\n    name: \"japan\",\n    shortcodes: [\"japan_map\"],\n    tags: [\"japan\", \"map\", \"map of japan\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5fe.png\"\n  },\n  {\n    emoji: \"\\u{1F9ED}\",\n    name: \"compass\",\n    shortcodes: [\"compass\"],\n    tags: [\"magnetic\", \"navigation\", \"orienteering\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9ed.png\"\n  },\n  {\n    emoji: \"\\u{1F3D4}\",\n    name: \"mountain_snow\",\n    shortcodes: [\"mountain_snow\"],\n    tags: [\"cold\", \"mountain\", \"snow\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3d4-fe0f.png\"\n  },\n  {\n    emoji: \"\\u26F0\",\n    name: \"mountain\",\n    shortcodes: [\"mountain\"],\n    tags: [\"mountain\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26f0-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F30B}\",\n    name: \"volcano\",\n    shortcodes: [\"volcano\"],\n    tags: [\"eruption\", \"mountain\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f30b.png\"\n  },\n  {\n    emoji: \"\\u{1F5FB}\",\n    name: \"mount_fuji\",\n    shortcodes: [\"mount_fuji\"],\n    tags: [\"fuji\", \"mountain\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5fb.png\"\n  },\n  {\n    emoji: \"\\u{1F3D5}\",\n    name: \"camping\",\n    shortcodes: [\"camping\"],\n    tags: [\"camping\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3d5-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3D6}\",\n    name: \"beach_umbrella\",\n    shortcodes: [\"beach\", \"beach_with_umbrella\"],\n    tags: [\"beach\", \"umbrella\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3d6-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3DC}\",\n    name: \"desert\",\n    shortcodes: [\"desert\"],\n    tags: [\"desert\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3dc-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3DD}\",\n    name: \"desert_island\",\n    shortcodes: [\"desert_island\", \"island\"],\n    tags: [\"desert\", \"island\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3dd-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3DE}\",\n    name: \"national_park\",\n    shortcodes: [\"national_park\"],\n    tags: [\"park\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3de-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3DF}\",\n    name: \"stadium\",\n    shortcodes: [\"stadium\"],\n    tags: [\"stadium\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3df-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3DB}\",\n    name: \"classical_building\",\n    shortcodes: [\"classical_building\"],\n    tags: [\"classical\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3db-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3D7}\",\n    name: \"building_construction\",\n    shortcodes: [\"building_construction\", \"construction_site\"],\n    tags: [\"construction\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3d7-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9F1}\",\n    name: \"bricks\",\n    shortcodes: [\"bricks\"],\n    tags: [\"bricks\", \"clay\", \"mortar\", \"wall\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9f1.png\"\n  },\n  {\n    emoji: \"\\u{1FAA8}\",\n    name: \"rock\",\n    shortcodes: [\"rock\"],\n    tags: [\"boulder\", \"heavy\", \"solid\", \"stone\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1faa8.png\"\n  },\n  {\n    emoji: \"\\u{1FAB5}\",\n    name: \"wood\",\n    shortcodes: [\"wood\"],\n    tags: [\"log\", \"lumber\", \"timber\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fab5.png\"\n  },\n  {\n    emoji: \"\\u{1F6D6}\",\n    name: \"hut\",\n    shortcodes: [\"hut\"],\n    tags: [\"house\", \"roundhouse\", \"yurt\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6d6.png\"\n  },\n  {\n    emoji: \"\\u{1F3D8}\",\n    name: \"houses\",\n    shortcodes: [\"homes\", \"houses\"],\n    tags: [\"houses\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3d8-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3DA}\",\n    name: \"derelict_house\",\n    shortcodes: [\"derelict_house\", \"house_abandoned\"],\n    tags: [\"derelict\", \"house\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3da-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3E0}\",\n    name: \"house\",\n    shortcodes: [\"house\"],\n    tags: [\"home\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3e0.png\"\n  },\n  {\n    emoji: \"\\u{1F3E1}\",\n    name: \"house_with_garden\",\n    shortcodes: [\"house_with_garden\"],\n    tags: [\"garden\", \"home\", \"house\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3e1.png\"\n  },\n  {\n    emoji: \"\\u{1F3E2}\",\n    name: \"office\",\n    shortcodes: [\"office\"],\n    tags: [\"building\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3e2.png\"\n  },\n  {\n    emoji: \"\\u{1F3E3}\",\n    name: \"post_office\",\n    shortcodes: [\"post_office\"],\n    tags: [\"japanese\", \"japanese post office\", \"post\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3e3.png\"\n  },\n  {\n    emoji: \"\\u{1F3E4}\",\n    name: \"european_post_office\",\n    shortcodes: [\"european_post_office\"],\n    tags: [\"european\", \"post\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3e4.png\"\n  },\n  {\n    emoji: \"\\u{1F3E5}\",\n    name: \"hospital\",\n    shortcodes: [\"hospital\"],\n    tags: [\"doctor\", \"medicine\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3e5.png\"\n  },\n  {\n    emoji: \"\\u{1F3E6}\",\n    name: \"bank\",\n    shortcodes: [\"bank\"],\n    tags: [\"building\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3e6.png\"\n  },\n  {\n    emoji: \"\\u{1F3E8}\",\n    name: \"hotel\",\n    shortcodes: [\"hotel\"],\n    tags: [\"building\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3e8.png\"\n  },\n  {\n    emoji: \"\\u{1F3E9}\",\n    name: \"love_hotel\",\n    shortcodes: [\"love_hotel\"],\n    tags: [\"hotel\", \"love\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3e9.png\"\n  },\n  {\n    emoji: \"\\u{1F3EA}\",\n    name: \"convenience_store\",\n    shortcodes: [\"convenience_store\"],\n    tags: [\"convenience\", \"store\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3ea.png\"\n  },\n  {\n    emoji: \"\\u{1F3EB}\",\n    name: \"school\",\n    shortcodes: [\"school\"],\n    tags: [\"building\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3eb.png\"\n  },\n  {\n    emoji: \"\\u{1F3EC}\",\n    name: \"department_store\",\n    shortcodes: [\"department_store\"],\n    tags: [\"department\", \"store\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3ec.png\"\n  },\n  {\n    emoji: \"\\u{1F3ED}\",\n    name: \"factory\",\n    shortcodes: [\"factory\"],\n    tags: [\"building\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3ed.png\"\n  },\n  {\n    emoji: \"\\u{1F3EF}\",\n    name: \"japanese_castle\",\n    shortcodes: [\"japanese_castle\"],\n    tags: [\"castle\", \"japanese\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3ef.png\"\n  },\n  {\n    emoji: \"\\u{1F3F0}\",\n    name: \"european_castle\",\n    shortcodes: [\"castle\", \"european_castle\"],\n    tags: [\"european\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3f0.png\"\n  },\n  {\n    emoji: \"\\u{1F492}\",\n    name: \"wedding\",\n    shortcodes: [\"wedding\"],\n    tags: [\"chapel\", \"romance\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f492.png\"\n  },\n  {\n    emoji: \"\\u{1F5FC}\",\n    name: \"tokyo_tower\",\n    shortcodes: [\"tokyo_tower\"],\n    tags: [\"tokyo\", \"tower\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5fc.png\"\n  },\n  {\n    emoji: \"\\u{1F5FD}\",\n    name: \"statue_of_liberty\",\n    shortcodes: [\"statue_of_liberty\"],\n    tags: [\"liberty\", \"statue\", \"statue of liberty\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5fd.png\"\n  },\n  {\n    emoji: \"\\u26EA\",\n    name: \"church\",\n    shortcodes: [\"church\"],\n    tags: [\"christian\", \"cross\", \"religion\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26ea.png\"\n  },\n  {\n    emoji: \"\\u{1F54C}\",\n    name: \"mosque\",\n    shortcodes: [\"mosque\"],\n    tags: [\"islam\", \"muslim\", \"religion\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f54c.png\"\n  },\n  {\n    emoji: \"\\u{1F6D5}\",\n    name: \"hindu_temple\",\n    shortcodes: [\"hindu_temple\"],\n    tags: [\"hindu\", \"temple\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6d5.png\"\n  },\n  {\n    emoji: \"\\u{1F54D}\",\n    name: \"synagogue\",\n    shortcodes: [\"synagogue\"],\n    tags: [\"jew\", \"jewish\", \"religion\", \"temple\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f54d.png\"\n  },\n  {\n    emoji: \"\\u26E9\",\n    name: \"shinto_shrine\",\n    shortcodes: [\"shinto_shrine\"],\n    tags: [\"religion\", \"shinto\", \"shrine\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26e9-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F54B}\",\n    name: \"kaaba\",\n    shortcodes: [\"kaaba\"],\n    tags: [\"islam\", \"muslim\", \"religion\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f54b.png\"\n  },\n  {\n    emoji: \"\\u26F2\",\n    name: \"fountain\",\n    shortcodes: [\"fountain\"],\n    tags: [\"fountain\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26f2.png\"\n  },\n  {\n    emoji: \"\\u26FA\",\n    name: \"tent\",\n    shortcodes: [\"tent\"],\n    tags: [\"camping\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26fa.png\"\n  },\n  {\n    emoji: \"\\u{1F301}\",\n    name: \"foggy\",\n    shortcodes: [\"foggy\"],\n    tags: [\"fog\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f301.png\"\n  },\n  {\n    emoji: \"\\u{1F303}\",\n    name: \"night_with_stars\",\n    shortcodes: [\"night_with_stars\"],\n    tags: [\"night\", \"star\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f303.png\"\n  },\n  {\n    emoji: \"\\u{1F3D9}\",\n    name: \"cityscape\",\n    shortcodes: [\"cityscape\"],\n    tags: [\"city\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3d9-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F304}\",\n    name: \"sunrise_over_mountains\",\n    shortcodes: [\"sunrise_over_mountains\"],\n    tags: [\"morning\", \"mountain\", \"sun\", \"sunrise\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f304.png\"\n  },\n  {\n    emoji: \"\\u{1F305}\",\n    name: \"sunrise\",\n    shortcodes: [\"sunrise\"],\n    tags: [\"morning\", \"sun\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f305.png\"\n  },\n  {\n    emoji: \"\\u{1F306}\",\n    name: \"city_sunset\",\n    shortcodes: [\"city_dusk\"],\n    tags: [\"city\", \"dusk\", \"evening\", \"landscape\", \"sunset\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f306.png\"\n  },\n  {\n    emoji: \"\\u{1F307}\",\n    name: \"city_sunrise\",\n    shortcodes: [\"city_sunrise\", \"city_sunset\"],\n    tags: [\"dusk\", \"sun\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f307.png\"\n  },\n  {\n    emoji: \"\\u{1F309}\",\n    name: \"bridge_at_night\",\n    shortcodes: [\"bridge_at_night\"],\n    tags: [\"bridge\", \"night\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f309.png\"\n  },\n  {\n    emoji: \"\\u2668\",\n    name: \"hotsprings\",\n    shortcodes: [\"hotsprings\"],\n    tags: [\"hot\", \"hotsprings\", \"springs\", \"steaming\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2668-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3A0}\",\n    name: \"carousel_horse\",\n    shortcodes: [\"carousel_horse\"],\n    tags: [\"carousel\", \"horse\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3a0.png\"\n  },\n  {\n    emoji: \"\\u{1F6DD}\",\n    name: \"playground_slide\",\n    shortcodes: [\"playground_slide\", \"slide\"],\n    tags: [\"amusement park\", \"play\", \"theme park\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F3A1}\",\n    name: \"ferris_wheel\",\n    shortcodes: [\"ferris_wheel\"],\n    tags: [\"amusement park\", \"ferris\", \"theme park\", \"wheel\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3a1.png\"\n  },\n  {\n    emoji: \"\\u{1F3A2}\",\n    name: \"roller_coaster\",\n    shortcodes: [\"roller_coaster\"],\n    tags: [\"amusement park\", \"coaster\", \"roller\", \"theme park\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3a2.png\"\n  },\n  {\n    emoji: \"\\u{1F488}\",\n    name: \"barber\",\n    shortcodes: [\"barber\", \"barber_pole\"],\n    tags: [\"barber\", \"haircut\", \"pole\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f488.png\"\n  },\n  {\n    emoji: \"\\u{1F3AA}\",\n    name: \"circus_tent\",\n    shortcodes: [\"circus_tent\"],\n    tags: [\"circus\", \"tent\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3aa.png\"\n  },\n  {\n    emoji: \"\\u{1F682}\",\n    name: \"steam_locomotive\",\n    shortcodes: [\"steam_locomotive\"],\n    tags: [\"engine\", \"railway\", \"steam\", \"train\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f682.png\"\n  },\n  {\n    emoji: \"\\u{1F683}\",\n    name: \"railway_car\",\n    shortcodes: [\"railway_car\"],\n    tags: [\"car\", \"electric\", \"railway\", \"train\", \"tram\", \"trolleybus\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f683.png\"\n  },\n  {\n    emoji: \"\\u{1F684}\",\n    name: \"bullettrain_side\",\n    shortcodes: [\"bullettrain_side\"],\n    tags: [\"railway\", \"shinkansen\", \"speed\", \"train\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f684.png\"\n  },\n  {\n    emoji: \"\\u{1F685}\",\n    name: \"bullettrain_front\",\n    shortcodes: [\"bullettrain_front\"],\n    tags: [\"bullet\", \"railway\", \"shinkansen\", \"speed\", \"train\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f685.png\"\n  },\n  {\n    emoji: \"\\u{1F686}\",\n    name: \"train2\",\n    shortcodes: [\"train\"],\n    tags: [\"railway\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f686.png\"\n  },\n  {\n    emoji: \"\\u{1F687}\",\n    name: \"metro\",\n    shortcodes: [\"metro\"],\n    tags: [\"subway\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f687.png\"\n  },\n  {\n    emoji: \"\\u{1F688}\",\n    name: \"light_rail\",\n    shortcodes: [\"light_rail\"],\n    tags: [\"railway\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f688.png\"\n  },\n  {\n    emoji: \"\\u{1F689}\",\n    name: \"station\",\n    shortcodes: [\"station\"],\n    tags: [\"railway\", \"train\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f689.png\"\n  },\n  {\n    emoji: \"\\u{1F68A}\",\n    name: \"tram\",\n    shortcodes: [\"tram\"],\n    tags: [\"trolleybus\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f68a.png\"\n  },\n  {\n    emoji: \"\\u{1F69D}\",\n    name: \"monorail\",\n    shortcodes: [\"monorail\"],\n    tags: [\"vehicle\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f69d.png\"\n  },\n  {\n    emoji: \"\\u{1F69E}\",\n    name: \"mountain_railway\",\n    shortcodes: [\"mountain_railway\"],\n    tags: [\"car\", \"mountain\", \"railway\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f69e.png\"\n  },\n  {\n    emoji: \"\\u{1F68B}\",\n    name: \"train\",\n    shortcodes: [\"tram_car\"],\n    tags: [\"car\", \"tram\", \"trolleybus\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f68b.png\"\n  },\n  {\n    emoji: \"\\u{1F68C}\",\n    name: \"bus\",\n    shortcodes: [\"bus\"],\n    tags: [\"vehicle\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f68c.png\"\n  },\n  {\n    emoji: \"\\u{1F68D}\",\n    name: \"oncoming_bus\",\n    shortcodes: [\"oncoming_bus\"],\n    tags: [\"bus\", \"oncoming\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f68d.png\"\n  },\n  {\n    emoji: \"\\u{1F68E}\",\n    name: \"trolleybus\",\n    shortcodes: [\"trolleybus\"],\n    tags: [\"bus\", \"tram\", \"trolley\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f68e.png\"\n  },\n  {\n    emoji: \"\\u{1F690}\",\n    name: \"minibus\",\n    shortcodes: [\"minibus\"],\n    tags: [\"bus\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f690.png\"\n  },\n  {\n    emoji: \"\\u{1F691}\",\n    name: \"ambulance\",\n    shortcodes: [\"ambulance\"],\n    tags: [\"vehicle\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f691.png\"\n  },\n  {\n    emoji: \"\\u{1F692}\",\n    name: \"fire_engine\",\n    shortcodes: [\"fire_engine\"],\n    tags: [\"engine\", \"fire\", \"truck\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f692.png\"\n  },\n  {\n    emoji: \"\\u{1F693}\",\n    name: \"police_car\",\n    shortcodes: [\"police_car\"],\n    tags: [\"car\", \"patrol\", \"police\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f693.png\"\n  },\n  {\n    emoji: \"\\u{1F694}\",\n    name: \"oncoming_police_car\",\n    shortcodes: [\"oncoming_police_car\"],\n    tags: [\"car\", \"oncoming\", \"police\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f694.png\"\n  },\n  {\n    emoji: \"\\u{1F695}\",\n    name: \"taxi\",\n    shortcodes: [\"taxi\"],\n    tags: [\"vehicle\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f695.png\"\n  },\n  {\n    emoji: \"\\u{1F696}\",\n    name: \"oncoming_taxi\",\n    shortcodes: [\"oncoming_taxi\"],\n    tags: [\"oncoming\", \"taxi\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f696.png\"\n  },\n  {\n    emoji: \"\\u{1F697}\",\n    name: \"car\",\n    shortcodes: [\"car\", \"red_car\"],\n    tags: [\"car\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f697.png\"\n  },\n  {\n    emoji: \"\\u{1F698}\",\n    name: \"oncoming_automobile\",\n    shortcodes: [\"oncoming_automobile\"],\n    tags: [\"automobile\", \"car\", \"oncoming\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f698.png\"\n  },\n  {\n    emoji: \"\\u{1F699}\",\n    name: \"blue_car\",\n    shortcodes: [\"blue_car\", \"suv\"],\n    tags: [\"recreational\", \"sport utility\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f699.png\"\n  },\n  {\n    emoji: \"\\u{1F6FB}\",\n    name: \"pickup_truck\",\n    shortcodes: [\"pickup_truck\"],\n    tags: [\"pick-up\", \"pickup\", \"truck\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6fb.png\"\n  },\n  {\n    emoji: \"\\u{1F69A}\",\n    name: \"truck\",\n    shortcodes: [\"delivery_truck\", \"truck\"],\n    tags: [\"delivery\", \"truck\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f69a.png\"\n  },\n  {\n    emoji: \"\\u{1F69B}\",\n    name: \"articulated_lorry\",\n    shortcodes: [\"articulated_lorry\"],\n    tags: [\"lorry\", \"semi\", \"truck\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f69b.png\"\n  },\n  {\n    emoji: \"\\u{1F69C}\",\n    name: \"tractor\",\n    shortcodes: [\"tractor\"],\n    tags: [\"vehicle\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f69c.png\"\n  },\n  {\n    emoji: \"\\u{1F3CE}\",\n    name: \"racing_car\",\n    shortcodes: [\"racing_car\"],\n    tags: [\"car\", \"racing\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3ce-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3CD}\",\n    name: \"motorcycle\",\n    shortcodes: [\"motorcycle\"],\n    tags: [\"racing\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3cd-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6F5}\",\n    name: \"motor_scooter\",\n    shortcodes: [\"motor_scooter\"],\n    tags: [\"motor\", \"scooter\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6f5.png\"\n  },\n  {\n    emoji: \"\\u{1F9BD}\",\n    name: \"manual_wheelchair\",\n    shortcodes: [\"manual_wheelchair\"],\n    tags: [\"accessibility\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9bd.png\"\n  },\n  {\n    emoji: \"\\u{1F9BC}\",\n    name: \"motorized_wheelchair\",\n    shortcodes: [\"motorized_wheelchair\"],\n    tags: [\"accessibility\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9bc.png\"\n  },\n  {\n    emoji: \"\\u{1F6FA}\",\n    name: \"auto_rickshaw\",\n    shortcodes: [\"auto_rickshaw\"],\n    tags: [\"tuk tuk\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6fa.png\"\n  },\n  {\n    emoji: \"\\u{1F6B2}\",\n    name: \"bike\",\n    shortcodes: [\"bicycle\", \"bike\"],\n    tags: [\"bike\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b2.png\"\n  },\n  {\n    emoji: \"\\u{1F6F4}\",\n    name: \"kick_scooter\",\n    shortcodes: [\"scooter\"],\n    tags: [\"kick\", \"scooter\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6f4.png\"\n  },\n  {\n    emoji: \"\\u{1F6F9}\",\n    name: \"skateboard\",\n    shortcodes: [\"skateboard\"],\n    tags: [\"board\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6f9.png\"\n  },\n  {\n    emoji: \"\\u{1F6FC}\",\n    name: \"roller_skate\",\n    shortcodes: [\"roller_skate\"],\n    tags: [\"roller\", \"skate\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6fc.png\"\n  },\n  {\n    emoji: \"\\u{1F68F}\",\n    name: \"busstop\",\n    shortcodes: [\"busstop\"],\n    tags: [\"bus\", \"stop\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f68f.png\"\n  },\n  {\n    emoji: \"\\u{1F6E3}\",\n    name: \"motorway\",\n    shortcodes: [\"motorway\"],\n    tags: [\"highway\", \"road\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6e3-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6E4}\",\n    name: \"railway_track\",\n    shortcodes: [\"railway_track\"],\n    tags: [\"railway\", \"train\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6e4-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6E2}\",\n    name: \"oil_drum\",\n    shortcodes: [\"oil_drum\"],\n    tags: [\"drum\", \"oil\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6e2-fe0f.png\"\n  },\n  {\n    emoji: \"\\u26FD\",\n    name: \"fuelpump\",\n    shortcodes: [\"fuelpump\"],\n    tags: [\"diesel\", \"fuel\", \"fuelpump\", \"gas\", \"pump\", \"station\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26fd.png\"\n  },\n  {\n    emoji: \"\\u{1F6DE}\",\n    name: \"wheel\",\n    shortcodes: [\"wheel\"],\n    tags: [\"circle\", \"tire\", \"turn\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F6A8}\",\n    name: \"rotating_light\",\n    shortcodes: [\"rotating_light\"],\n    tags: [\"beacon\", \"car\", \"light\", \"police\", \"revolving\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6a8.png\"\n  },\n  {\n    emoji: \"\\u{1F6A5}\",\n    name: \"traffic_light\",\n    shortcodes: [\"traffic_light\"],\n    tags: [\"light\", \"signal\", \"traffic\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6a5.png\"\n  },\n  {\n    emoji: \"\\u{1F6A6}\",\n    name: \"vertical_traffic_light\",\n    shortcodes: [\"vertical_traffic_light\"],\n    tags: [\"light\", \"signal\", \"traffic\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6a6.png\"\n  },\n  {\n    emoji: \"\\u{1F6D1}\",\n    name: \"stop_sign\",\n    shortcodes: [\"octagonal_sign\", \"stop_sign\"],\n    tags: [\"octagonal\", \"sign\", \"stop\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6d1.png\"\n  },\n  {\n    emoji: \"\\u{1F6A7}\",\n    name: \"construction\",\n    shortcodes: [\"construction\"],\n    tags: [\"barrier\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6a7.png\"\n  },\n  {\n    emoji: \"\\u2693\",\n    name: \"anchor\",\n    shortcodes: [\"anchor\"],\n    tags: [\"ship\", \"tool\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2693.png\"\n  },\n  {\n    emoji: \"\\u{1F6DF}\",\n    name: \"ring_buoy\",\n    shortcodes: [\"lifebuoy\", \"ring_buoy\"],\n    tags: [\"float\", \"life preserver\", \"life saver\", \"rescue\", \"safety\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u26F5\",\n    name: \"boat\",\n    shortcodes: [\"sailboat\"],\n    tags: [\"boat\", \"resort\", \"sea\", \"yacht\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26f5.png\"\n  },\n  {\n    emoji: \"\\u{1F6F6}\",\n    name: \"canoe\",\n    shortcodes: [\"canoe\"],\n    tags: [\"boat\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6f6.png\"\n  },\n  {\n    emoji: \"\\u{1F6A4}\",\n    name: \"speedboat\",\n    shortcodes: [\"speedboat\"],\n    tags: [\"boat\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6a4.png\"\n  },\n  {\n    emoji: \"\\u{1F6F3}\",\n    name: \"passenger_ship\",\n    shortcodes: [\"cruise_ship\", \"passenger_ship\"],\n    tags: [\"passenger\", \"ship\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6f3-fe0f.png\"\n  },\n  {\n    emoji: \"\\u26F4\",\n    name: \"ferry\",\n    shortcodes: [\"ferry\"],\n    tags: [\"boat\", \"passenger\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26f4-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6E5}\",\n    name: \"motor_boat\",\n    shortcodes: [\"motorboat\"],\n    tags: [\"boat\", \"motorboat\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6e5-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6A2}\",\n    name: \"ship\",\n    shortcodes: [\"ship\"],\n    tags: [\"boat\", \"passenger\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6a2.png\"\n  },\n  {\n    emoji: \"\\u2708\",\n    name: \"airplane\",\n    shortcodes: [\"airplane\"],\n    tags: [\"aeroplane\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2708-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6E9}\",\n    name: \"small_airplane\",\n    shortcodes: [\"small_airplane\"],\n    tags: [\"aeroplane\", \"airplane\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6e9-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6EB}\",\n    name: \"flight_departure\",\n    shortcodes: [\"airplane_departure\"],\n    tags: [\"aeroplane\", \"airplane\", \"check-in\", \"departure\", \"departures\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6eb.png\"\n  },\n  {\n    emoji: \"\\u{1F6EC}\",\n    name: \"flight_arrival\",\n    shortcodes: [\"airplane_arriving\"],\n    tags: [\"aeroplane\", \"airplane\", \"arrivals\", \"arriving\", \"landing\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6ec.png\"\n  },\n  {\n    emoji: \"\\u{1FA82}\",\n    name: \"parachute\",\n    shortcodes: [\"parachute\"],\n    tags: [\"hang-glide\", \"parasail\", \"skydive\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa82.png\"\n  },\n  {\n    emoji: \"\\u{1F4BA}\",\n    name: \"seat\",\n    shortcodes: [\"seat\"],\n    tags: [\"chair\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4ba.png\"\n  },\n  {\n    emoji: \"\\u{1F681}\",\n    name: \"helicopter\",\n    shortcodes: [\"helicopter\"],\n    tags: [\"vehicle\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f681.png\"\n  },\n  {\n    emoji: \"\\u{1F69F}\",\n    name: \"suspension_railway\",\n    shortcodes: [\"suspension_railway\"],\n    tags: [\"railway\", \"suspension\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f69f.png\"\n  },\n  {\n    emoji: \"\\u{1F6A0}\",\n    name: \"mountain_cableway\",\n    shortcodes: [\"mountain_cableway\"],\n    tags: [\"cable\", \"gondola\", \"mountain\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6a0.png\"\n  },\n  {\n    emoji: \"\\u{1F6A1}\",\n    name: \"aerial_tramway\",\n    shortcodes: [\"aerial_tramway\"],\n    tags: [\"aerial\", \"cable\", \"car\", \"gondola\", \"tramway\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6a1.png\"\n  },\n  {\n    emoji: \"\\u{1F6F0}\",\n    name: \"artificial_satellite\",\n    shortcodes: [\"satellite\"],\n    tags: [\"space\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6f0-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F680}\",\n    name: \"rocket\",\n    shortcodes: [\"rocket\"],\n    tags: [\"space\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f680.png\"\n  },\n  {\n    emoji: \"\\u{1F6F8}\",\n    name: \"flying_saucer\",\n    shortcodes: [\"flying_saucer\"],\n    tags: [\"ufo\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6f8.png\"\n  },\n  {\n    emoji: \"\\u{1F6CE}\",\n    name: \"bellhop_bell\",\n    shortcodes: [\"bellhop\"],\n    tags: [\"bell\", \"bellhop\", \"hotel\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6ce-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9F3}\",\n    name: \"luggage\",\n    shortcodes: [\"luggage\"],\n    tags: [\"packing\", \"travel\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9f3.png\"\n  },\n  {\n    emoji: \"\\u231B\",\n    name: \"hourglass\",\n    shortcodes: [\"hourglass\"],\n    tags: [\"sand\", \"timer\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/231b.png\"\n  },\n  {\n    emoji: \"\\u23F3\",\n    name: \"hourglass_flowing_sand\",\n    shortcodes: [\"hourglass_flowing_sand\"],\n    tags: [\"hourglass\", \"sand\", \"timer\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/23f3.png\"\n  },\n  {\n    emoji: \"\\u231A\",\n    name: \"watch\",\n    shortcodes: [\"watch\"],\n    tags: [\"clock\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/231a.png\"\n  },\n  {\n    emoji: \"\\u23F0\",\n    name: \"alarm_clock\",\n    shortcodes: [\"alarm_clock\"],\n    tags: [\"alarm\", \"clock\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/23f0.png\"\n  },\n  {\n    emoji: \"\\u23F1\",\n    name: \"stopwatch\",\n    shortcodes: [\"stopwatch\"],\n    tags: [\"clock\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/23f1-fe0f.png\"\n  },\n  {\n    emoji: \"\\u23F2\",\n    name: \"timer_clock\",\n    shortcodes: [\"timer_clock\"],\n    tags: [\"clock\", \"timer\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/23f2-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F570}\",\n    name: \"mantelpiece_clock\",\n    shortcodes: [\"clock\"],\n    tags: [\"clock\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f570-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F55B}\",\n    name: \"clock12\",\n    shortcodes: [\"clock12\"],\n    tags: [\"00\", \"12\", \"12:00\", \"clock\", \"o\\u2019clock\", \"twelve\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f55b.png\"\n  },\n  {\n    emoji: \"\\u{1F567}\",\n    name: \"clock1230\",\n    shortcodes: [\"clock1230\"],\n    tags: [\"12\", \"12:30\", \"clock\", \"thirty\", \"twelve\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f567.png\"\n  },\n  {\n    emoji: \"\\u{1F550}\",\n    name: \"clock1\",\n    shortcodes: [\"clock1\"],\n    tags: [\"00\", \"1\", \"1:00\", \"clock\", \"one\", \"o\\u2019clock\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f550.png\"\n  },\n  {\n    emoji: \"\\u{1F55C}\",\n    name: \"clock130\",\n    shortcodes: [\"clock130\"],\n    tags: [\"1\", \"1:30\", \"clock\", \"one\", \"thirty\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f55c.png\"\n  },\n  {\n    emoji: \"\\u{1F551}\",\n    name: \"clock2\",\n    shortcodes: [\"clock2\"],\n    tags: [\"00\", \"2\", \"2:00\", \"clock\", \"o\\u2019clock\", \"two\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f551.png\"\n  },\n  {\n    emoji: \"\\u{1F55D}\",\n    name: \"clock230\",\n    shortcodes: [\"clock230\"],\n    tags: [\"2\", \"2:30\", \"clock\", \"thirty\", \"two\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f55d.png\"\n  },\n  {\n    emoji: \"\\u{1F552}\",\n    name: \"clock3\",\n    shortcodes: [\"clock3\"],\n    tags: [\"00\", \"3\", \"3:00\", \"clock\", \"o\\u2019clock\", \"three\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f552.png\"\n  },\n  {\n    emoji: \"\\u{1F55E}\",\n    name: \"clock330\",\n    shortcodes: [\"clock330\"],\n    tags: [\"3\", \"3:30\", \"clock\", \"thirty\", \"three\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f55e.png\"\n  },\n  {\n    emoji: \"\\u{1F553}\",\n    name: \"clock4\",\n    shortcodes: [\"clock4\"],\n    tags: [\"00\", \"4\", \"4:00\", \"clock\", \"four\", \"o\\u2019clock\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f553.png\"\n  },\n  {\n    emoji: \"\\u{1F55F}\",\n    name: \"clock430\",\n    shortcodes: [\"clock430\"],\n    tags: [\"4\", \"4:30\", \"clock\", \"four\", \"thirty\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f55f.png\"\n  },\n  {\n    emoji: \"\\u{1F554}\",\n    name: \"clock5\",\n    shortcodes: [\"clock5\"],\n    tags: [\"00\", \"5\", \"5:00\", \"clock\", \"five\", \"o\\u2019clock\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f554.png\"\n  },\n  {\n    emoji: \"\\u{1F560}\",\n    name: \"clock530\",\n    shortcodes: [\"clock530\"],\n    tags: [\"5\", \"5:30\", \"clock\", \"five\", \"thirty\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f560.png\"\n  },\n  {\n    emoji: \"\\u{1F555}\",\n    name: \"clock6\",\n    shortcodes: [\"clock6\"],\n    tags: [\"00\", \"6\", \"6:00\", \"clock\", \"o\\u2019clock\", \"six\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f555.png\"\n  },\n  {\n    emoji: \"\\u{1F561}\",\n    name: \"clock630\",\n    shortcodes: [\"clock630\"],\n    tags: [\"6\", \"6:30\", \"clock\", \"six\", \"thirty\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f561.png\"\n  },\n  {\n    emoji: \"\\u{1F556}\",\n    name: \"clock7\",\n    shortcodes: [\"clock7\"],\n    tags: [\"00\", \"7\", \"7:00\", \"clock\", \"o\\u2019clock\", \"seven\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f556.png\"\n  },\n  {\n    emoji: \"\\u{1F562}\",\n    name: \"clock730\",\n    shortcodes: [\"clock730\"],\n    tags: [\"7\", \"7:30\", \"clock\", \"seven\", \"thirty\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f562.png\"\n  },\n  {\n    emoji: \"\\u{1F557}\",\n    name: \"clock8\",\n    shortcodes: [\"clock8\"],\n    tags: [\"00\", \"8\", \"8:00\", \"clock\", \"eight\", \"o\\u2019clock\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f557.png\"\n  },\n  {\n    emoji: \"\\u{1F563}\",\n    name: \"clock830\",\n    shortcodes: [\"clock830\"],\n    tags: [\"8\", \"8:30\", \"clock\", \"eight\", \"thirty\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f563.png\"\n  },\n  {\n    emoji: \"\\u{1F558}\",\n    name: \"clock9\",\n    shortcodes: [\"clock9\"],\n    tags: [\"00\", \"9\", \"9:00\", \"clock\", \"nine\", \"o\\u2019clock\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f558.png\"\n  },\n  {\n    emoji: \"\\u{1F564}\",\n    name: \"clock930\",\n    shortcodes: [\"clock930\"],\n    tags: [\"9\", \"9:30\", \"clock\", \"nine\", \"thirty\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f564.png\"\n  },\n  {\n    emoji: \"\\u{1F559}\",\n    name: \"clock10\",\n    shortcodes: [\"clock10\"],\n    tags: [\"00\", \"10\", \"10:00\", \"clock\", \"o\\u2019clock\", \"ten\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f559.png\"\n  },\n  {\n    emoji: \"\\u{1F565}\",\n    name: \"clock1030\",\n    shortcodes: [\"clock1030\"],\n    tags: [\"10\", \"10:30\", \"clock\", \"ten\", \"thirty\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f565.png\"\n  },\n  {\n    emoji: \"\\u{1F55A}\",\n    name: \"clock11\",\n    shortcodes: [\"clock11\"],\n    tags: [\"00\", \"11\", \"11:00\", \"clock\", \"eleven\", \"o\\u2019clock\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f55a.png\"\n  },\n  {\n    emoji: \"\\u{1F566}\",\n    name: \"clock1130\",\n    shortcodes: [\"clock1130\"],\n    tags: [\"11\", \"11:30\", \"clock\", \"eleven\", \"thirty\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f566.png\"\n  },\n  {\n    emoji: \"\\u{1F311}\",\n    name: \"new_moon\",\n    shortcodes: [\"new_moon\"],\n    tags: [\"dark\", \"moon\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f311.png\"\n  },\n  {\n    emoji: \"\\u{1F312}\",\n    name: \"waxing_crescent_moon\",\n    shortcodes: [\"waxing_crescent_moon\"],\n    tags: [\"crescent\", \"moon\", \"waxing\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f312.png\"\n  },\n  {\n    emoji: \"\\u{1F313}\",\n    name: \"first_quarter_moon\",\n    shortcodes: [\"first_quarter_moon\"],\n    tags: [\"moon\", \"quarter\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f313.png\"\n  },\n  {\n    emoji: \"\\u{1F314}\",\n    name: \"moon\",\n    shortcodes: [\"waxing_gibbous_moon\"],\n    tags: [\"gibbous\", \"moon\", \"waxing\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f314.png\"\n  },\n  {\n    emoji: \"\\u{1F315}\",\n    name: \"full_moon\",\n    shortcodes: [\"full_moon\"],\n    tags: [\"full\", \"moon\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f315.png\"\n  },\n  {\n    emoji: \"\\u{1F316}\",\n    name: \"waning_gibbous_moon\",\n    shortcodes: [\"waning_gibbous_moon\"],\n    tags: [\"gibbous\", \"moon\", \"waning\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f316.png\"\n  },\n  {\n    emoji: \"\\u{1F317}\",\n    name: \"last_quarter_moon\",\n    shortcodes: [\"last_quarter_moon\"],\n    tags: [\"moon\", \"quarter\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f317.png\"\n  },\n  {\n    emoji: \"\\u{1F318}\",\n    name: \"waning_crescent_moon\",\n    shortcodes: [\"waning_crescent_moon\"],\n    tags: [\"crescent\", \"moon\", \"waning\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f318.png\"\n  },\n  {\n    emoji: \"\\u{1F319}\",\n    name: \"crescent_moon\",\n    shortcodes: [\"crescent_moon\"],\n    tags: [\"crescent\", \"moon\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f319.png\"\n  },\n  {\n    emoji: \"\\u{1F31A}\",\n    name: \"new_moon_with_face\",\n    shortcodes: [\"new_moon_with_face\"],\n    tags: [\"face\", \"moon\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f31a.png\"\n  },\n  {\n    emoji: \"\\u{1F31B}\",\n    name: \"first_quarter_moon_with_face\",\n    shortcodes: [\"first_quarter_moon_with_face\"],\n    tags: [\"face\", \"moon\", \"quarter\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f31b.png\"\n  },\n  {\n    emoji: \"\\u{1F31C}\",\n    name: \"last_quarter_moon_with_face\",\n    shortcodes: [\"last_quarter_moon_with_face\"],\n    tags: [\"face\", \"moon\", \"quarter\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f31c.png\"\n  },\n  {\n    emoji: \"\\u{1F321}\",\n    name: \"thermometer\",\n    shortcodes: [\"thermometer\"],\n    tags: [\"weather\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f321-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2600\",\n    name: \"sunny\",\n    shortcodes: [\"sun\"],\n    tags: [\"bright\", \"rays\", \"sunny\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2600-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F31D}\",\n    name: \"full_moon_with_face\",\n    shortcodes: [\"full_moon_with_face\"],\n    tags: [\"bright\", \"face\", \"full\", \"moon\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f31d.png\"\n  },\n  {\n    emoji: \"\\u{1F31E}\",\n    name: \"sun_with_face\",\n    shortcodes: [\"sun_with_face\"],\n    tags: [\"bright\", \"face\", \"sun\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f31e.png\"\n  },\n  {\n    emoji: \"\\u{1FA90}\",\n    name: \"ringed_planet\",\n    shortcodes: [\"ringed_planet\", \"saturn\"],\n    tags: [\"saturn\", \"saturnine\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa90.png\"\n  },\n  {\n    emoji: \"\\u2B50\",\n    name: \"star\",\n    shortcodes: [\"star\"],\n    tags: [\"star\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2b50.png\"\n  },\n  {\n    emoji: \"\\u{1F31F}\",\n    name: \"star2\",\n    shortcodes: [\"glowing_star\", \"star2\"],\n    tags: [\"glittery\", \"glow\", \"shining\", \"sparkle\", \"star\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f31f.png\"\n  },\n  {\n    emoji: \"\\u{1F320}\",\n    name: \"stars\",\n    shortcodes: [\"shooting_star\", \"stars\"],\n    tags: [\"falling\", \"shooting\", \"star\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f320.png\"\n  },\n  {\n    emoji: \"\\u{1F30C}\",\n    name: \"milky_way\",\n    shortcodes: [\"milky_way\"],\n    tags: [\"space\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f30c.png\"\n  },\n  {\n    emoji: \"\\u2601\",\n    name: \"cloud\",\n    shortcodes: [\"cloud\"],\n    tags: [\"weather\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2601-fe0f.png\"\n  },\n  {\n    emoji: \"\\u26C5\",\n    name: \"partly_sunny\",\n    shortcodes: [\"partly_sunny\", \"sun_behind_cloud\"],\n    tags: [\"cloud\", \"sun\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26c5.png\"\n  },\n  {\n    emoji: \"\\u26C8\",\n    name: \"cloud_with_lightning_and_rain\",\n    shortcodes: [\"stormy\", \"thunder_cloud_and_rain\"],\n    tags: [\"cloud\", \"rain\", \"thunder\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26c8-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F324}\",\n    name: \"sun_behind_small_cloud\",\n    shortcodes: [\"sun_behind_small_cloud\", \"sunny\"],\n    tags: [\"cloud\", \"sun\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f324-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F325}\",\n    name: \"sun_behind_large_cloud\",\n    shortcodes: [\"cloudy\", \"sun_behind_large_cloud\"],\n    tags: [\"cloud\", \"sun\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f325-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F326}\",\n    name: \"sun_behind_rain_cloud\",\n    shortcodes: [\"sun_and_rain\", \"sun_behind_rain_cloud\"],\n    tags: [\"cloud\", \"rain\", \"sun\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f326-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F327}\",\n    name: \"cloud_with_rain\",\n    shortcodes: [\"cloud_with_rain\", \"rainy\"],\n    tags: [\"cloud\", \"rain\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f327-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F328}\",\n    name: \"cloud_with_snow\",\n    shortcodes: [\"cloud_with_snow\", \"snowy\"],\n    tags: [\"cloud\", \"cold\", \"snow\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f328-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F329}\",\n    name: \"cloud_with_lightning\",\n    shortcodes: [\"cloud_with_lightning\", \"lightning\"],\n    tags: [\"cloud\", \"lightning\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f329-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F32A}\",\n    name: \"tornado\",\n    shortcodes: [\"tornado\"],\n    tags: [\"cloud\", \"whirlwind\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f32a-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F32B}\",\n    name: \"fog\",\n    shortcodes: [\"fog\"],\n    tags: [\"cloud\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f32b-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F32C}\",\n    name: \"wind_face\",\n    shortcodes: [\"wind_blowing_face\"],\n    tags: [\"blow\", \"cloud\", \"face\", \"wind\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f32c-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F300}\",\n    name: \"cyclone\",\n    shortcodes: [\"cyclone\"],\n    tags: [\"dizzy\", \"hurricane\", \"twister\", \"typhoon\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f300.png\"\n  },\n  {\n    emoji: \"\\u{1F308}\",\n    name: \"rainbow\",\n    shortcodes: [\"rainbow\"],\n    tags: [\"rain\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f308.png\"\n  },\n  {\n    emoji: \"\\u{1F302}\",\n    name: \"closed_umbrella\",\n    shortcodes: [\"closed_umbrella\"],\n    tags: [\"clothing\", \"rain\", \"umbrella\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f302.png\"\n  },\n  {\n    emoji: \"\\u2602\",\n    name: \"open_umbrella\",\n    shortcodes: [\"umbrella\"],\n    tags: [\"clothing\", \"rain\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2602-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2614\",\n    name: \"umbrella\",\n    shortcodes: [\"umbrella_with_rain\"],\n    tags: [\"clothing\", \"drop\", \"rain\", \"umbrella\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2614.png\"\n  },\n  {\n    emoji: \"\\u26F1\",\n    name: \"parasol_on_ground\",\n    shortcodes: [\"beach_umbrella\", \"umbrella_on_ground\"],\n    tags: [\"rain\", \"sun\", \"umbrella\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26f1-fe0f.png\"\n  },\n  {\n    emoji: \"\\u26A1\",\n    name: \"zap\",\n    shortcodes: [\"high_voltage\", \"zap\"],\n    tags: [\"danger\", \"electric\", \"lightning\", \"voltage\", \"zap\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26a1.png\"\n  },\n  {\n    emoji: \"\\u2744\",\n    name: \"snowflake\",\n    shortcodes: [\"snowflake\"],\n    tags: [\"cold\", \"snow\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2744-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2603\",\n    name: \"snowman_with_snow\",\n    shortcodes: [\"snowman2\"],\n    tags: [\"cold\", \"snow\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2603-fe0f.png\"\n  },\n  {\n    emoji: \"\\u26C4\",\n    name: \"snowman\",\n    shortcodes: [\"snowman\"],\n    tags: [\"cold\", \"snow\", \"snowman\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26c4.png\"\n  },\n  {\n    emoji: \"\\u2604\",\n    name: \"comet\",\n    shortcodes: [\"comet\"],\n    tags: [\"space\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2604-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F525}\",\n    name: \"fire\",\n    shortcodes: [\"fire\"],\n    tags: [\"flame\", \"tool\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f525.png\"\n  },\n  {\n    emoji: \"\\u{1F4A7}\",\n    name: \"droplet\",\n    shortcodes: [\"droplet\"],\n    tags: [\"cold\", \"comic\", \"drop\", \"sweat\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4a7.png\"\n  },\n  {\n    emoji: \"\\u{1F30A}\",\n    name: \"ocean\",\n    shortcodes: [\"ocean\", \"water_wave\"],\n    tags: [\"ocean\", \"water\", \"wave\"],\n    group: \"travel & places\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f30a.png\"\n  },\n  {\n    emoji: \"\\u{1F383}\",\n    name: \"jack_o_lantern\",\n    shortcodes: [\"jack_o_lantern\"],\n    tags: [\"celebration\", \"halloween\", \"jack\", \"lantern\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f383.png\"\n  },\n  {\n    emoji: \"\\u{1F384}\",\n    name: \"christmas_tree\",\n    shortcodes: [\"christmas_tree\"],\n    tags: [\"celebration\", \"christmas\", \"tree\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f384.png\"\n  },\n  {\n    emoji: \"\\u{1F386}\",\n    name: \"fireworks\",\n    shortcodes: [\"fireworks\"],\n    tags: [\"celebration\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f386.png\"\n  },\n  {\n    emoji: \"\\u{1F387}\",\n    name: \"sparkler\",\n    shortcodes: [\"sparkler\"],\n    tags: [\"celebration\", \"fireworks\", \"sparkle\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f387.png\"\n  },\n  {\n    emoji: \"\\u{1F9E8}\",\n    name: \"firecracker\",\n    shortcodes: [\"firecracker\"],\n    tags: [\"dynamite\", \"explosive\", \"fireworks\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9e8.png\"\n  },\n  {\n    emoji: \"\\u2728\",\n    name: \"sparkles\",\n    shortcodes: [\"sparkles\"],\n    tags: [\"*\", \"sparkle\", \"star\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2728.png\"\n  },\n  {\n    emoji: \"\\u{1F388}\",\n    name: \"balloon\",\n    shortcodes: [\"balloon\"],\n    tags: [\"celebration\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f388.png\"\n  },\n  {\n    emoji: \"\\u{1F389}\",\n    name: \"tada\",\n    shortcodes: [\"party\", \"party_popper\", \"tada\"],\n    tags: [\"celebration\", \"party\", \"popper\", \"tada\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f389.png\"\n  },\n  {\n    emoji: \"\\u{1F38A}\",\n    name: \"confetti_ball\",\n    shortcodes: [\"confetti_ball\"],\n    tags: [\"ball\", \"celebration\", \"confetti\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f38a.png\"\n  },\n  {\n    emoji: \"\\u{1F38B}\",\n    name: \"tanabata_tree\",\n    shortcodes: [\"tanabata_tree\"],\n    tags: [\"banner\", \"celebration\", \"japanese\", \"tree\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f38b.png\"\n  },\n  {\n    emoji: \"\\u{1F38D}\",\n    name: \"bamboo\",\n    shortcodes: [\"bamboo\"],\n    tags: [\"bamboo\", \"celebration\", \"japanese\", \"pine\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f38d.png\"\n  },\n  {\n    emoji: \"\\u{1F38E}\",\n    name: \"dolls\",\n    shortcodes: [\"dolls\"],\n    tags: [\"celebration\", \"doll\", \"festival\", \"japanese\", \"japanese dolls\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f38e.png\"\n  },\n  {\n    emoji: \"\\u{1F38F}\",\n    name: \"flags\",\n    shortcodes: [\"carp_streamer\", \"flags\"],\n    tags: [\"carp\", \"celebration\", \"streamer\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f38f.png\"\n  },\n  {\n    emoji: \"\\u{1F390}\",\n    name: \"wind_chime\",\n    shortcodes: [\"wind_chime\"],\n    tags: [\"bell\", \"celebration\", \"chime\", \"wind\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f390.png\"\n  },\n  {\n    emoji: \"\\u{1F391}\",\n    name: \"rice_scene\",\n    shortcodes: [\"moon_ceremony\", \"rice_scene\"],\n    tags: [\"celebration\", \"ceremony\", \"moon\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f391.png\"\n  },\n  {\n    emoji: \"\\u{1F9E7}\",\n    name: \"red_envelope\",\n    shortcodes: [\"red_envelope\"],\n    tags: [\"gift\", \"good luck\", \"h\\xF3ngb\\u0101o\", \"lai see\", \"money\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9e7.png\"\n  },\n  {\n    emoji: \"\\u{1F380}\",\n    name: \"ribbon\",\n    shortcodes: [\"ribbon\"],\n    tags: [\"celebration\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f380.png\"\n  },\n  {\n    emoji: \"\\u{1F381}\",\n    name: \"gift\",\n    shortcodes: [\"gift\"],\n    tags: [\"box\", \"celebration\", \"gift\", \"present\", \"wrapped\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f381.png\"\n  },\n  {\n    emoji: \"\\u{1F397}\",\n    name: \"reminder_ribbon\",\n    shortcodes: [\"reminder_ribbon\"],\n    tags: [\"celebration\", \"reminder\", \"ribbon\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f397-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F39F}\",\n    name: \"tickets\",\n    shortcodes: [\"admission_tickets\", \"tickets\"],\n    tags: [\"admission\", \"ticket\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f39f-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3AB}\",\n    name: \"ticket\",\n    shortcodes: [\"ticket\"],\n    tags: [\"admission\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3ab.png\"\n  },\n  {\n    emoji: \"\\u{1F396}\",\n    name: \"medal_military\",\n    shortcodes: [\"military_medal\"],\n    tags: [\"celebration\", \"medal\", \"military\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f396-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3C6}\",\n    name: \"trophy\",\n    shortcodes: [\"trophy\"],\n    tags: [\"prize\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3c6.png\"\n  },\n  {\n    emoji: \"\\u{1F3C5}\",\n    name: \"medal_sports\",\n    shortcodes: [\"sports_medal\"],\n    tags: [\"medal\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3c5.png\"\n  },\n  {\n    emoji: \"\\u{1F947}\",\n    name: \"1st_place_medal\",\n    shortcodes: [\"1st\", \"first_place_medal\"],\n    tags: [\"first\", \"gold\", \"medal\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f947.png\"\n  },\n  {\n    emoji: \"\\u{1F948}\",\n    name: \"2nd_place_medal\",\n    shortcodes: [\"2nd\", \"second_place_medal\"],\n    tags: [\"medal\", \"second\", \"silver\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f948.png\"\n  },\n  {\n    emoji: \"\\u{1F949}\",\n    name: \"3rd_place_medal\",\n    shortcodes: [\"3rd\", \"third_place_medal\"],\n    tags: [\"bronze\", \"medal\", \"third\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f949.png\"\n  },\n  {\n    emoji: \"\\u26BD\",\n    name: \"soccer\",\n    shortcodes: [\"soccer\"],\n    tags: [\"ball\", \"football\", \"soccer\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26bd.png\"\n  },\n  {\n    emoji: \"\\u26BE\",\n    name: \"baseball\",\n    shortcodes: [\"baseball\"],\n    tags: [\"ball\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26be.png\"\n  },\n  {\n    emoji: \"\\u{1F94E}\",\n    name: \"softball\",\n    shortcodes: [\"softball\"],\n    tags: [\"ball\", \"glove\", \"underarm\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f94e.png\"\n  },\n  {\n    emoji: \"\\u{1F3C0}\",\n    name: \"basketball\",\n    shortcodes: [\"basketball\"],\n    tags: [\"ball\", \"hoop\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3c0.png\"\n  },\n  {\n    emoji: \"\\u{1F3D0}\",\n    name: \"volleyball\",\n    shortcodes: [\"volleyball\"],\n    tags: [\"ball\", \"game\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3d0.png\"\n  },\n  {\n    emoji: \"\\u{1F3C8}\",\n    name: \"football\",\n    shortcodes: [\"football\"],\n    tags: [\"american\", \"ball\", \"football\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3c8.png\"\n  },\n  {\n    emoji: \"\\u{1F3C9}\",\n    name: \"rugby_football\",\n    shortcodes: [\"rugby_football\"],\n    tags: [\"ball\", \"football\", \"rugby\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3c9.png\"\n  },\n  {\n    emoji: \"\\u{1F3BE}\",\n    name: \"tennis\",\n    shortcodes: [\"tennis\"],\n    tags: [\"ball\", \"racquet\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3be.png\"\n  },\n  {\n    emoji: \"\\u{1F94F}\",\n    name: \"flying_disc\",\n    shortcodes: [\"flying_disc\"],\n    tags: [\"ultimate\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f94f.png\"\n  },\n  {\n    emoji: \"\\u{1F3B3}\",\n    name: \"bowling\",\n    shortcodes: [\"bowling\"],\n    tags: [\"ball\", \"game\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3b3.png\"\n  },\n  {\n    emoji: \"\\u{1F3CF}\",\n    name: \"cricket_game\",\n    shortcodes: [\"cricket_game\"],\n    tags: [\"ball\", \"bat\", \"game\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3cf.png\"\n  },\n  {\n    emoji: \"\\u{1F3D1}\",\n    name: \"field_hockey\",\n    shortcodes: [\"field_hockey\"],\n    tags: [\"ball\", \"field\", \"game\", \"hockey\", \"stick\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3d1.png\"\n  },\n  {\n    emoji: \"\\u{1F3D2}\",\n    name: \"ice_hockey\",\n    shortcodes: [\"hockey\"],\n    tags: [\"game\", \"hockey\", \"ice\", \"puck\", \"stick\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3d2.png\"\n  },\n  {\n    emoji: \"\\u{1F94D}\",\n    name: \"lacrosse\",\n    shortcodes: [\"lacrosse\"],\n    tags: [\"ball\", \"goal\", \"stick\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f94d.png\"\n  },\n  {\n    emoji: \"\\u{1F3D3}\",\n    name: \"ping_pong\",\n    shortcodes: [\"ping_pong\"],\n    tags: [\"ball\", \"bat\", \"game\", \"paddle\", \"table tennis\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3d3.png\"\n  },\n  {\n    emoji: \"\\u{1F3F8}\",\n    name: \"badminton\",\n    shortcodes: [\"badminton\"],\n    tags: [\"birdie\", \"game\", \"racquet\", \"shuttlecock\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3f8.png\"\n  },\n  {\n    emoji: \"\\u{1F94A}\",\n    name: \"boxing_glove\",\n    shortcodes: [\"boxing_glove\"],\n    tags: [\"boxing\", \"glove\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f94a.png\"\n  },\n  {\n    emoji: \"\\u{1F94B}\",\n    name: \"martial_arts_uniform\",\n    shortcodes: [\"martial_arts_uniform\"],\n    tags: [\"judo\", \"karate\", \"martial arts\", \"taekwondo\", \"uniform\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f94b.png\"\n  },\n  {\n    emoji: \"\\u{1F945}\",\n    name: \"goal_net\",\n    shortcodes: [\"goal_net\"],\n    tags: [\"goal\", \"net\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f945.png\"\n  },\n  {\n    emoji: \"\\u26F3\",\n    name: \"golf\",\n    shortcodes: [\"golf\"],\n    tags: [\"golf\", \"hole\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26f3.png\"\n  },\n  {\n    emoji: \"\\u26F8\",\n    name: \"ice_skate\",\n    shortcodes: [\"ice_skate\"],\n    tags: [\"ice\", \"skate\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26f8-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3A3}\",\n    name: \"fishing_pole_and_fish\",\n    shortcodes: [\"fishing_pole\", \"fishing_pole_and_fish\"],\n    tags: [\"fish\", \"pole\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3a3.png\"\n  },\n  {\n    emoji: \"\\u{1F93F}\",\n    name: \"diving_mask\",\n    shortcodes: [\"diving_mask\"],\n    tags: [\"diving\", \"scuba\", \"snorkeling\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f93f.png\"\n  },\n  {\n    emoji: \"\\u{1F3BD}\",\n    name: \"running_shirt_with_sash\",\n    shortcodes: [\"running_shirt\", \"running_shirt_with_sash\"],\n    tags: [\"athletics\", \"running\", \"sash\", \"shirt\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3bd.png\"\n  },\n  {\n    emoji: \"\\u{1F3BF}\",\n    name: \"ski\",\n    shortcodes: [\"ski\"],\n    tags: [\"ski\", \"snow\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3bf.png\"\n  },\n  {\n    emoji: \"\\u{1F6F7}\",\n    name: \"sled\",\n    shortcodes: [\"sled\"],\n    tags: [\"sledge\", \"sleigh\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6f7.png\"\n  },\n  {\n    emoji: \"\\u{1F94C}\",\n    name: \"curling_stone\",\n    shortcodes: [\"curling_stone\"],\n    tags: [\"game\", \"rock\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f94c.png\"\n  },\n  {\n    emoji: \"\\u{1F3AF}\",\n    name: \"dart\",\n    shortcodes: [\"bullseye\", \"dart\", \"direct_hit\"],\n    tags: [\"dart\", \"direct hit\", \"game\", \"hit\", \"target\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3af.png\"\n  },\n  {\n    emoji: \"\\u{1FA80}\",\n    name: \"yo_yo\",\n    shortcodes: [\"yo_yo\"],\n    tags: [\"fluctuate\", \"toy\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa80.png\"\n  },\n  {\n    emoji: \"\\u{1FA81}\",\n    name: \"kite\",\n    shortcodes: [\"kite\"],\n    tags: [\"fly\", \"soar\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa81.png\"\n  },\n  {\n    emoji: \"\\u{1F52B}\",\n    name: \"gun\",\n    shortcodes: [\"gun\", \"pistol\"],\n    tags: [\"gun\", \"handgun\", \"pistol\", \"revolver\", \"tool\", \"water\", \"weapon\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f52b.png\"\n  },\n  {\n    emoji: \"\\u{1F3B1}\",\n    name: \"8ball\",\n    shortcodes: [\"8ball\", \"billiards\"],\n    tags: [\"8\", \"ball\", \"billiard\", \"eight\", \"game\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3b1.png\"\n  },\n  {\n    emoji: \"\\u{1F52E}\",\n    name: \"crystal_ball\",\n    shortcodes: [\"crystal_ball\"],\n    tags: [\"ball\", \"crystal\", \"fairy tale\", \"fantasy\", \"fortune\", \"tool\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f52e.png\"\n  },\n  {\n    emoji: \"\\u{1FA84}\",\n    name: \"magic_wand\",\n    shortcodes: [\"magic_wand\"],\n    tags: [\"magic\", \"witch\", \"wizard\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa84.png\"\n  },\n  {\n    emoji: \"\\u{1F3AE}\",\n    name: \"video_game\",\n    shortcodes: [\"controller\", \"video_game\"],\n    tags: [\"controller\", \"game\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3ae.png\"\n  },\n  {\n    emoji: \"\\u{1F579}\",\n    name: \"joystick\",\n    shortcodes: [\"joystick\"],\n    tags: [\"game\", \"video game\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f579-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3B0}\",\n    name: \"slot_machine\",\n    shortcodes: [\"slot_machine\"],\n    tags: [\"game\", \"slot\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3b0.png\"\n  },\n  {\n    emoji: \"\\u{1F3B2}\",\n    name: \"game_die\",\n    shortcodes: [\"game_die\"],\n    tags: [\"dice\", \"die\", \"game\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3b2.png\"\n  },\n  {\n    emoji: \"\\u{1F9E9}\",\n    name: \"jigsaw\",\n    shortcodes: [\"jigsaw\", \"puzzle_piece\"],\n    tags: [\"clue\", \"interlocking\", \"jigsaw\", \"piece\", \"puzzle\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9e9.png\"\n  },\n  {\n    emoji: \"\\u{1F9F8}\",\n    name: \"teddy_bear\",\n    shortcodes: [\"teddy_bear\"],\n    tags: [\"plaything\", \"plush\", \"stuffed\", \"toy\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9f8.png\"\n  },\n  {\n    emoji: \"\\u{1FA85}\",\n    name: \"pinata\",\n    shortcodes: [\"pinata\"],\n    tags: [\"celebration\", \"party\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa85.png\"\n  },\n  {\n    emoji: \"\\u{1FAA9}\",\n    name: \"mirror_ball\",\n    shortcodes: [\"disco\", \"disco_ball\", \"mirror_ball\"],\n    tags: [\"dance\", \"disco\", \"glitter\", \"party\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1FA86}\",\n    name: \"nesting_dolls\",\n    shortcodes: [\"nesting_dolls\"],\n    tags: [\"doll\", \"nesting\", \"russia\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa86.png\"\n  },\n  {\n    emoji: \"\\u2660\",\n    name: \"spades\",\n    shortcodes: [\"spades\"],\n    tags: [\"card\", \"game\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2660-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2665\",\n    name: \"hearts\",\n    shortcodes: [\"hearts\"],\n    tags: [\"card\", \"game\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2665-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2666\",\n    name: \"diamonds\",\n    shortcodes: [\"diamonds\"],\n    tags: [\"card\", \"game\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2666-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2663\",\n    name: \"clubs\",\n    shortcodes: [\"clubs\"],\n    tags: [\"card\", \"game\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2663-fe0f.png\"\n  },\n  {\n    emoji: \"\\u265F\",\n    name: \"chess_pawn\",\n    shortcodes: [\"chess_pawn\"],\n    tags: [\"chess\", \"dupe\", \"expendable\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/265f-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F0CF}\",\n    name: \"black_joker\",\n    shortcodes: [\"black_joker\"],\n    tags: [\"card\", \"game\", \"wildcard\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f0cf.png\"\n  },\n  {\n    emoji: \"\\u{1F004}\",\n    name: \"mahjong\",\n    shortcodes: [\"mahjong\"],\n    tags: [\"game\", \"mahjong\", \"red\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f004.png\"\n  },\n  {\n    emoji: \"\\u{1F3B4}\",\n    name: \"flower_playing_cards\",\n    shortcodes: [\"flower_playing_cards\"],\n    tags: [\"card\", \"flower\", \"game\", \"japanese\", \"playing\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3b4.png\"\n  },\n  {\n    emoji: \"\\u{1F3AD}\",\n    name: \"performing_arts\",\n    shortcodes: [\"performing_arts\"],\n    tags: [\"art\", \"mask\", \"performing\", \"theater\", \"theatre\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3ad.png\"\n  },\n  {\n    emoji: \"\\u{1F5BC}\",\n    name: \"framed_picture\",\n    shortcodes: [\"frame_with_picture\", \"framed_picture\"],\n    tags: [\"art\", \"frame\", \"museum\", \"painting\", \"picture\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5bc-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3A8}\",\n    name: \"art\",\n    shortcodes: [\"art\", \"palette\"],\n    tags: [\"art\", \"museum\", \"painting\", \"palette\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3a8.png\"\n  },\n  {\n    emoji: \"\\u{1F9F5}\",\n    name: \"thread\",\n    shortcodes: [\"thread\"],\n    tags: [\"needle\", \"sewing\", \"spool\", \"string\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9f5.png\"\n  },\n  {\n    emoji: \"\\u{1FAA1}\",\n    name: \"sewing_needle\",\n    shortcodes: [\"sewing_needle\"],\n    tags: [\"embroidery\", \"needle\", \"sewing\", \"stitches\", \"sutures\", \"tailoring\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1faa1.png\"\n  },\n  {\n    emoji: \"\\u{1F9F6}\",\n    name: \"yarn\",\n    shortcodes: [\"yarn\"],\n    tags: [\"ball\", \"crochet\", \"knit\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9f6.png\"\n  },\n  {\n    emoji: \"\\u{1FAA2}\",\n    name: \"knot\",\n    shortcodes: [\"knot\"],\n    tags: [\"rope\", \"tangled\", \"tie\", \"twine\", \"twist\"],\n    group: \"activities\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1faa2.png\"\n  },\n  {\n    emoji: \"\\u{1F453}\",\n    name: \"eyeglasses\",\n    shortcodes: [\"eyeglasses\", \"glasses\"],\n    tags: [\"clothing\", \"eye\", \"eyeglasses\", \"eyewear\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f453.png\"\n  },\n  {\n    emoji: \"\\u{1F576}\",\n    name: \"dark_sunglasses\",\n    shortcodes: [\"sunglasses\"],\n    tags: [\"dark\", \"eye\", \"eyewear\", \"glasses\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f576-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F97D}\",\n    name: \"goggles\",\n    shortcodes: [\"goggles\"],\n    tags: [\"eye protection\", \"swimming\", \"welding\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f97d.png\"\n  },\n  {\n    emoji: \"\\u{1F97C}\",\n    name: \"lab_coat\",\n    shortcodes: [\"lab_coat\"],\n    tags: [\"doctor\", \"experiment\", \"scientist\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f97c.png\"\n  },\n  {\n    emoji: \"\\u{1F9BA}\",\n    name: \"safety_vest\",\n    shortcodes: [\"safety_vest\"],\n    tags: [\"emergency\", \"safety\", \"vest\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9ba.png\"\n  },\n  {\n    emoji: \"\\u{1F454}\",\n    name: \"necktie\",\n    shortcodes: [\"necktie\"],\n    tags: [\"clothing\", \"tie\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f454.png\"\n  },\n  {\n    emoji: \"\\u{1F455}\",\n    name: \"shirt\",\n    shortcodes: [\"shirt\"],\n    tags: [\"clothing\", \"shirt\", \"tshirt\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f455.png\"\n  },\n  {\n    emoji: \"\\u{1F456}\",\n    name: \"jeans\",\n    shortcodes: [\"jeans\"],\n    tags: [\"clothing\", \"pants\", \"trousers\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f456.png\"\n  },\n  {\n    emoji: \"\\u{1F9E3}\",\n    name: \"scarf\",\n    shortcodes: [\"scarf\"],\n    tags: [\"neck\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9e3.png\"\n  },\n  {\n    emoji: \"\\u{1F9E4}\",\n    name: \"gloves\",\n    shortcodes: [\"gloves\"],\n    tags: [\"hand\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9e4.png\"\n  },\n  {\n    emoji: \"\\u{1F9E5}\",\n    name: \"coat\",\n    shortcodes: [\"coat\"],\n    tags: [\"jacket\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9e5.png\"\n  },\n  {\n    emoji: \"\\u{1F9E6}\",\n    name: \"socks\",\n    shortcodes: [\"socks\"],\n    tags: [\"stocking\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9e6.png\"\n  },\n  {\n    emoji: \"\\u{1F457}\",\n    name: \"dress\",\n    shortcodes: [\"dress\"],\n    tags: [\"clothing\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f457.png\"\n  },\n  {\n    emoji: \"\\u{1F458}\",\n    name: \"kimono\",\n    shortcodes: [\"kimono\"],\n    tags: [\"clothing\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f458.png\"\n  },\n  {\n    emoji: \"\\u{1F97B}\",\n    name: \"sari\",\n    shortcodes: [\"sari\"],\n    tags: [\"clothing\", \"dress\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f97b.png\"\n  },\n  {\n    emoji: \"\\u{1FA71}\",\n    name: \"one_piece_swimsuit\",\n    shortcodes: [\"one_piece_swimsuit\"],\n    tags: [\"bathing suit\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa71.png\"\n  },\n  {\n    emoji: \"\\u{1FA72}\",\n    name: \"swim_brief\",\n    shortcodes: [\"briefs\"],\n    tags: [\"bathing suit\", \"one-piece\", \"swimsuit\", \"underwear\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa72.png\"\n  },\n  {\n    emoji: \"\\u{1FA73}\",\n    name: \"shorts\",\n    shortcodes: [\"shorts\"],\n    tags: [\"bathing suit\", \"pants\", \"underwear\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa73.png\"\n  },\n  {\n    emoji: \"\\u{1F459}\",\n    name: \"bikini\",\n    shortcodes: [\"bikini\"],\n    tags: [\"clothing\", \"swim\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f459.png\"\n  },\n  {\n    emoji: \"\\u{1F45A}\",\n    name: \"womans_clothes\",\n    shortcodes: [\"womans_clothes\"],\n    tags: [\"clothing\", \"woman\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f45a.png\"\n  },\n  {\n    emoji: \"\\u{1FAAD}\",\n    name: \"folding_hand_fan\",\n    shortcodes: [\"folding_fan\"],\n    tags: [\"cooling\", \"dance\", \"fan\", \"flutter\", \"hot\", \"shy\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1F45B}\",\n    name: \"purse\",\n    shortcodes: [\"purse\"],\n    tags: [\"clothing\", \"coin\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f45b.png\"\n  },\n  {\n    emoji: \"\\u{1F45C}\",\n    name: \"handbag\",\n    shortcodes: [\"handbag\"],\n    tags: [\"bag\", \"clothing\", \"purse\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f45c.png\"\n  },\n  {\n    emoji: \"\\u{1F45D}\",\n    name: \"pouch\",\n    shortcodes: [\"clutch_bag\", \"pouch\"],\n    tags: [\"bag\", \"clothing\", \"pouch\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f45d.png\"\n  },\n  {\n    emoji: \"\\u{1F6CD}\",\n    name: \"shopping\",\n    shortcodes: [\"shopping_bags\"],\n    tags: [\"bag\", \"hotel\", \"shopping\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6cd-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F392}\",\n    name: \"school_satchel\",\n    shortcodes: [\"backpack\", \"school_satchel\"],\n    tags: [\"bag\", \"rucksack\", \"satchel\", \"school\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f392.png\"\n  },\n  {\n    emoji: \"\\u{1FA74}\",\n    name: \"thong_sandal\",\n    shortcodes: [\"thong_sandal\"],\n    tags: [\"beach sandals\", \"sandals\", \"thong sandals\", \"thongs\", \"z\\u014Dri\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa74.png\"\n  },\n  {\n    emoji: \"\\u{1F45E}\",\n    name: \"mans_shoe\",\n    shortcodes: [\"mans_shoe\"],\n    tags: [\"clothing\", \"man\", \"shoe\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f45e.png\"\n  },\n  {\n    emoji: \"\\u{1F45F}\",\n    name: \"athletic_shoe\",\n    shortcodes: [\"athletic_shoe\", \"sneaker\"],\n    tags: [\"athletic\", \"clothing\", \"shoe\", \"sneaker\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f45f.png\"\n  },\n  {\n    emoji: \"\\u{1F97E}\",\n    name: \"hiking_boot\",\n    shortcodes: [\"hiking_boot\"],\n    tags: [\"backpacking\", \"boot\", \"camping\", \"hiking\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f97e.png\"\n  },\n  {\n    emoji: \"\\u{1F97F}\",\n    name: \"flat_shoe\",\n    shortcodes: [\"flat_shoe\", \"womans_flat_shoe\"],\n    tags: [\"ballet flat\", \"slip-on\", \"slipper\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f97f.png\"\n  },\n  {\n    emoji: \"\\u{1F460}\",\n    name: \"high_heel\",\n    shortcodes: [\"high_heel\"],\n    tags: [\"clothing\", \"heel\", \"shoe\", \"woman\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f460.png\"\n  },\n  {\n    emoji: \"\\u{1F461}\",\n    name: \"sandal\",\n    shortcodes: [\"sandal\"],\n    tags: [\"clothing\", \"sandal\", \"shoe\", \"woman\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f461.png\"\n  },\n  {\n    emoji: \"\\u{1FA70}\",\n    name: \"ballet_shoes\",\n    shortcodes: [\"ballet_shoes\"],\n    tags: [\"ballet\", \"dance\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa70.png\"\n  },\n  {\n    emoji: \"\\u{1F462}\",\n    name: \"boot\",\n    shortcodes: [\"boot\"],\n    tags: [\"boot\", \"clothing\", \"shoe\", \"woman\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f462.png\"\n  },\n  {\n    emoji: \"\\u{1FAAE}\",\n    name: \"hair_pick\",\n    shortcodes: [\"hair_pick\"],\n    tags: [\"afro\", \"comb\", \"hair\", \"pick\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1F451}\",\n    name: \"crown\",\n    shortcodes: [\"crown\"],\n    tags: [\"clothing\", \"king\", \"queen\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f451.png\"\n  },\n  {\n    emoji: \"\\u{1F452}\",\n    name: \"womans_hat\",\n    shortcodes: [\"womans_hat\"],\n    tags: [\"clothing\", \"hat\", \"woman\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f452.png\"\n  },\n  {\n    emoji: \"\\u{1F3A9}\",\n    name: \"tophat\",\n    shortcodes: [\"top_hat\", \"tophat\"],\n    tags: [\"clothing\", \"hat\", \"top\", \"tophat\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3a9.png\"\n  },\n  {\n    emoji: \"\\u{1F393}\",\n    name: \"mortar_board\",\n    shortcodes: [\"graduation_cap\", \"mortar_board\"],\n    tags: [\"cap\", \"celebration\", \"clothing\", \"graduation\", \"hat\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f393.png\"\n  },\n  {\n    emoji: \"\\u{1F9E2}\",\n    name: \"billed_cap\",\n    shortcodes: [\"billed_cap\"],\n    tags: [\"baseball cap\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9e2.png\"\n  },\n  {\n    emoji: \"\\u{1FA96}\",\n    name: \"military_helmet\",\n    shortcodes: [\"military_helmet\"],\n    tags: [\"army\", \"helmet\", \"military\", \"soldier\", \"warrior\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa96.png\"\n  },\n  {\n    emoji: \"\\u26D1\",\n    name: \"rescue_worker_helmet\",\n    shortcodes: [\"helmet_with_cross\", \"rescue_worker_helmet\"],\n    tags: [\"aid\", \"cross\", \"face\", \"hat\", \"helmet\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26d1-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4FF}\",\n    name: \"prayer_beads\",\n    shortcodes: [\"prayer_beads\"],\n    tags: [\"beads\", \"clothing\", \"necklace\", \"prayer\", \"religion\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4ff.png\"\n  },\n  {\n    emoji: \"\\u{1F484}\",\n    name: \"lipstick\",\n    shortcodes: [\"lipstick\"],\n    tags: [\"cosmetics\", \"makeup\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f484.png\"\n  },\n  {\n    emoji: \"\\u{1F48D}\",\n    name: \"ring\",\n    shortcodes: [\"ring\"],\n    tags: [\"diamond\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f48d.png\"\n  },\n  {\n    emoji: \"\\u{1F48E}\",\n    name: \"gem\",\n    shortcodes: [\"gem\"],\n    tags: [\"diamond\", \"gem\", \"jewel\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f48e.png\"\n  },\n  {\n    emoji: \"\\u{1F507}\",\n    name: \"mute\",\n    shortcodes: [\"mute\", \"no_sound\"],\n    tags: [\"mute\", \"quiet\", \"silent\", \"speaker\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f507.png\"\n  },\n  {\n    emoji: \"\\u{1F508}\",\n    name: \"speaker\",\n    shortcodes: [\"low_volume\", \"quiet_sound\", \"speaker\"],\n    tags: [\"soft\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f508.png\"\n  },\n  {\n    emoji: \"\\u{1F509}\",\n    name: \"sound\",\n    shortcodes: [\"medium_volumne\", \"sound\"],\n    tags: [\"medium\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f509.png\"\n  },\n  {\n    emoji: \"\\u{1F50A}\",\n    name: \"loud_sound\",\n    shortcodes: [\"high_volume\", \"loud_sound\"],\n    tags: [\"loud\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f50a.png\"\n  },\n  {\n    emoji: \"\\u{1F4E2}\",\n    name: \"loudspeaker\",\n    shortcodes: [\"loudspeaker\"],\n    tags: [\"loud\", \"public address\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4e2.png\"\n  },\n  {\n    emoji: \"\\u{1F4E3}\",\n    name: \"mega\",\n    shortcodes: [\"mega\", \"megaphone\"],\n    tags: [\"cheering\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4e3.png\"\n  },\n  {\n    emoji: \"\\u{1F4EF}\",\n    name: \"postal_horn\",\n    shortcodes: [\"postal_horn\"],\n    tags: [\"horn\", \"post\", \"postal\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4ef.png\"\n  },\n  {\n    emoji: \"\\u{1F514}\",\n    name: \"bell\",\n    shortcodes: [\"bell\"],\n    tags: [\"bell\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f514.png\"\n  },\n  {\n    emoji: \"\\u{1F515}\",\n    name: \"no_bell\",\n    shortcodes: [\"no_bell\"],\n    tags: [\"bell\", \"forbidden\", \"mute\", \"quiet\", \"silent\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f515.png\"\n  },\n  {\n    emoji: \"\\u{1F3BC}\",\n    name: \"musical_score\",\n    shortcodes: [\"musical_score\"],\n    tags: [\"music\", \"score\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3bc.png\"\n  },\n  {\n    emoji: \"\\u{1F3B5}\",\n    name: \"musical_note\",\n    shortcodes: [\"musical_note\"],\n    tags: [\"music\", \"note\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3b5.png\"\n  },\n  {\n    emoji: \"\\u{1F3B6}\",\n    name: \"notes\",\n    shortcodes: [\"musical_notes\", \"notes\"],\n    tags: [\"music\", \"note\", \"notes\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3b6.png\"\n  },\n  {\n    emoji: \"\\u{1F399}\",\n    name: \"studio_microphone\",\n    shortcodes: [\"studio_microphone\"],\n    tags: [\"mic\", \"microphone\", \"music\", \"studio\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f399-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F39A}\",\n    name: \"level_slider\",\n    shortcodes: [\"level_slider\"],\n    tags: [\"level\", \"music\", \"slider\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f39a-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F39B}\",\n    name: \"control_knobs\",\n    shortcodes: [\"control_knobs\"],\n    tags: [\"control\", \"knobs\", \"music\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f39b-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3A4}\",\n    name: \"microphone\",\n    shortcodes: [\"microphone\"],\n    tags: [\"karaoke\", \"mic\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3a4.png\"\n  },\n  {\n    emoji: \"\\u{1F3A7}\",\n    name: \"headphones\",\n    shortcodes: [\"headphones\"],\n    tags: [\"earbud\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3a7.png\"\n  },\n  {\n    emoji: \"\\u{1F4FB}\",\n    name: \"radio\",\n    shortcodes: [\"radio\"],\n    tags: [\"video\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4fb.png\"\n  },\n  {\n    emoji: \"\\u{1F3B7}\",\n    name: \"saxophone\",\n    shortcodes: [\"saxophone\"],\n    tags: [\"instrument\", \"music\", \"sax\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3b7.png\"\n  },\n  {\n    emoji: \"\\u{1FA97}\",\n    name: \"accordion\",\n    shortcodes: [\"accordion\"],\n    tags: [\"concertina\", \"squeeze box\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa97.png\"\n  },\n  {\n    emoji: \"\\u{1F3B8}\",\n    name: \"guitar\",\n    shortcodes: [\"guitar\"],\n    tags: [\"instrument\", \"music\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3b8.png\"\n  },\n  {\n    emoji: \"\\u{1F3B9}\",\n    name: \"musical_keyboard\",\n    shortcodes: [\"musical_keyboard\"],\n    tags: [\"instrument\", \"keyboard\", \"music\", \"piano\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3b9.png\"\n  },\n  {\n    emoji: \"\\u{1F3BA}\",\n    name: \"trumpet\",\n    shortcodes: [\"trumpet\"],\n    tags: [\"instrument\", \"music\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3ba.png\"\n  },\n  {\n    emoji: \"\\u{1F3BB}\",\n    name: \"violin\",\n    shortcodes: [\"violin\"],\n    tags: [\"instrument\", \"music\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3bb.png\"\n  },\n  {\n    emoji: \"\\u{1FA95}\",\n    name: \"banjo\",\n    shortcodes: [\"banjo\"],\n    tags: [\"music\", \"stringed\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa95.png\"\n  },\n  {\n    emoji: \"\\u{1F941}\",\n    name: \"drum\",\n    shortcodes: [\"drum\"],\n    tags: [\"drumsticks\", \"music\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f941.png\"\n  },\n  {\n    emoji: \"\\u{1FA98}\",\n    name: \"long_drum\",\n    shortcodes: [\"long_drum\"],\n    tags: [\"beat\", \"conga\", \"drum\", \"rhythm\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa98.png\"\n  },\n  {\n    emoji: \"\\u{1FA87}\",\n    name: \"maracas\",\n    shortcodes: [\"maracas\"],\n    tags: [\"instrument\", \"music\", \"percussion\", \"rattle\", \"shake\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1FA88}\",\n    name: \"flute\",\n    shortcodes: [\"flute\"],\n    tags: [\"fife\", \"music\", \"pipe\", \"recorder\", \"woodwind\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1F4F1}\",\n    name: \"iphone\",\n    shortcodes: [\"android\", \"iphone\", \"mobile_phone\"],\n    tags: [\"cell\", \"mobile\", \"phone\", \"telephone\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4f1.png\"\n  },\n  {\n    emoji: \"\\u{1F4F2}\",\n    name: \"calling\",\n    shortcodes: [\"calling\", \"mobile_phone_arrow\"],\n    tags: [\"arrow\", \"cell\", \"mobile\", \"phone\", \"receive\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4f2.png\"\n  },\n  {\n    emoji: \"\\u260E\",\n    name: \"phone\",\n    shortcodes: [\"telephone\"],\n    tags: [\"phone\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/260e-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4DE}\",\n    name: \"telephone_receiver\",\n    shortcodes: [\"telephone_receiver\"],\n    tags: [\"phone\", \"receiver\", \"telephone\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4de.png\"\n  },\n  {\n    emoji: \"\\u{1F4DF}\",\n    name: \"pager\",\n    shortcodes: [\"pager\"],\n    tags: [\"pager\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4df.png\"\n  },\n  {\n    emoji: \"\\u{1F4E0}\",\n    name: \"fax\",\n    shortcodes: [\"fax\", \"fax_machine\"],\n    tags: [\"fax\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4e0.png\"\n  },\n  {\n    emoji: \"\\u{1F50B}\",\n    name: \"battery\",\n    shortcodes: [\"battery\"],\n    tags: [\"battery\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f50b.png\"\n  },\n  {\n    emoji: \"\\u{1FAAB}\",\n    name: \"low_battery\",\n    shortcodes: [\"low_battery\"],\n    tags: [\"electronic\", \"low energy\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F50C}\",\n    name: \"electric_plug\",\n    shortcodes: [\"electric_plug\"],\n    tags: [\"electric\", \"electricity\", \"plug\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f50c.png\"\n  },\n  {\n    emoji: \"\\u{1F4BB}\",\n    name: \"computer\",\n    shortcodes: [\"laptop\"],\n    tags: [\"computer\", \"pc\", \"personal\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4bb.png\"\n  },\n  {\n    emoji: \"\\u{1F5A5}\",\n    name: \"desktop_computer\",\n    shortcodes: [\"computer\", \"desktop_computer\"],\n    tags: [\"computer\", \"desktop\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5a5-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F5A8}\",\n    name: \"printer\",\n    shortcodes: [\"printer\"],\n    tags: [\"computer\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5a8-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2328\",\n    name: \"keyboard\",\n    shortcodes: [\"keyboard\"],\n    tags: [\"computer\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2328-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F5B1}\",\n    name: \"computer_mouse\",\n    shortcodes: [\"computer_mouse\"],\n    tags: [\"computer\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5b1-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F5B2}\",\n    name: \"trackball\",\n    shortcodes: [\"trackball\"],\n    tags: [\"computer\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5b2-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4BD}\",\n    name: \"minidisc\",\n    shortcodes: [\"computer_disk\", \"minidisc\"],\n    tags: [\"computer\", \"disk\", \"minidisk\", \"optical\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4bd.png\"\n  },\n  {\n    emoji: \"\\u{1F4BE}\",\n    name: \"floppy_disk\",\n    shortcodes: [\"floppy_disk\"],\n    tags: [\"computer\", \"disk\", \"floppy\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4be.png\"\n  },\n  {\n    emoji: \"\\u{1F4BF}\",\n    name: \"cd\",\n    shortcodes: [\"cd\", \"optical_disk\"],\n    tags: [\"cd\", \"computer\", \"disk\", \"optical\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4bf.png\"\n  },\n  {\n    emoji: \"\\u{1F4C0}\",\n    name: \"dvd\",\n    shortcodes: [\"dvd\"],\n    tags: [\"blu-ray\", \"computer\", \"disk\", \"optical\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4c0.png\"\n  },\n  {\n    emoji: \"\\u{1F9EE}\",\n    name: \"abacus\",\n    shortcodes: [\"abacus\"],\n    tags: [\"calculation\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9ee.png\"\n  },\n  {\n    emoji: \"\\u{1F3A5}\",\n    name: \"movie_camera\",\n    shortcodes: [\"movie_camera\"],\n    tags: [\"camera\", \"cinema\", \"movie\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3a5.png\"\n  },\n  {\n    emoji: \"\\u{1F39E}\",\n    name: \"film_strip\",\n    shortcodes: [\"film_frames\"],\n    tags: [\"cinema\", \"film\", \"frames\", \"movie\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f39e-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4FD}\",\n    name: \"film_projector\",\n    shortcodes: [\"film_projector\"],\n    tags: [\"cinema\", \"film\", \"movie\", \"projector\", \"video\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4fd-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3AC}\",\n    name: \"clapper\",\n    shortcodes: [\"clapper\"],\n    tags: [\"clapper\", \"movie\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3ac.png\"\n  },\n  {\n    emoji: \"\\u{1F4FA}\",\n    name: \"tv\",\n    shortcodes: [\"tv\"],\n    tags: [\"tv\", \"video\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4fa.png\"\n  },\n  {\n    emoji: \"\\u{1F4F7}\",\n    name: \"camera\",\n    shortcodes: [\"camera\"],\n    tags: [\"video\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4f7.png\"\n  },\n  {\n    emoji: \"\\u{1F4F8}\",\n    name: \"camera_flash\",\n    shortcodes: [\"camera_with_flash\"],\n    tags: [\"camera\", \"flash\", \"video\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4f8.png\"\n  },\n  {\n    emoji: \"\\u{1F4F9}\",\n    name: \"video_camera\",\n    shortcodes: [\"video_camera\"],\n    tags: [\"camera\", \"video\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4f9.png\"\n  },\n  {\n    emoji: \"\\u{1F4FC}\",\n    name: \"vhs\",\n    shortcodes: [\"vhs\", \"videocassette\"],\n    tags: [\"tape\", \"vhs\", \"video\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4fc.png\"\n  },\n  {\n    emoji: \"\\u{1F50D}\",\n    name: \"mag\",\n    shortcodes: [\"mag\"],\n    tags: [\"glass\", \"magnifying\", \"search\", \"tool\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f50d.png\"\n  },\n  {\n    emoji: \"\\u{1F50E}\",\n    name: \"mag_right\",\n    shortcodes: [\"mag_right\"],\n    tags: [\"glass\", \"magnifying\", \"search\", \"tool\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f50e.png\"\n  },\n  {\n    emoji: \"\\u{1F56F}\",\n    name: \"candle\",\n    shortcodes: [\"candle\"],\n    tags: [\"light\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f56f-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4A1}\",\n    name: \"bulb\",\n    shortcodes: [\"bulb\", \"light_bulb\"],\n    tags: [\"bulb\", \"comic\", \"electric\", \"idea\", \"light\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4a1.png\"\n  },\n  {\n    emoji: \"\\u{1F526}\",\n    name: \"flashlight\",\n    shortcodes: [\"flashlight\"],\n    tags: [\"electric\", \"light\", \"tool\", \"torch\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f526.png\"\n  },\n  {\n    emoji: \"\\u{1F3EE}\",\n    name: \"izakaya_lantern\",\n    shortcodes: [\"izakaya_lantern\", \"red_paper_lantern\"],\n    tags: [\"bar\", \"lantern\", \"light\", \"red\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3ee.png\"\n  },\n  {\n    emoji: \"\\u{1FA94}\",\n    name: \"diya_lamp\",\n    shortcodes: [\"diya_lamp\"],\n    tags: [\"diya\", \"lamp\", \"oil\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa94.png\"\n  },\n  {\n    emoji: \"\\u{1F4D4}\",\n    name: \"notebook_with_decorative_cover\",\n    shortcodes: [\"notebook_with_decorative_cover\"],\n    tags: [\"book\", \"cover\", \"decorated\", \"notebook\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4d4.png\"\n  },\n  {\n    emoji: \"\\u{1F4D5}\",\n    name: \"closed_book\",\n    shortcodes: [\"closed_book\"],\n    tags: [\"book\", \"closed\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4d5.png\"\n  },\n  {\n    emoji: \"\\u{1F4D6}\",\n    name: \"book\",\n    shortcodes: [\"book\", \"open_book\"],\n    tags: [\"book\", \"open\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4d6.png\"\n  },\n  {\n    emoji: \"\\u{1F4D7}\",\n    name: \"green_book\",\n    shortcodes: [\"green_book\"],\n    tags: [\"book\", \"green\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4d7.png\"\n  },\n  {\n    emoji: \"\\u{1F4D8}\",\n    name: \"blue_book\",\n    shortcodes: [\"blue_book\"],\n    tags: [\"blue\", \"book\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4d8.png\"\n  },\n  {\n    emoji: \"\\u{1F4D9}\",\n    name: \"orange_book\",\n    shortcodes: [\"orange_book\"],\n    tags: [\"book\", \"orange\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4d9.png\"\n  },\n  {\n    emoji: \"\\u{1F4DA}\",\n    name: \"books\",\n    shortcodes: [\"books\"],\n    tags: [\"book\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4da.png\"\n  },\n  {\n    emoji: \"\\u{1F4D3}\",\n    name: \"notebook\",\n    shortcodes: [\"notebook\"],\n    tags: [\"notebook\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4d3.png\"\n  },\n  {\n    emoji: \"\\u{1F4D2}\",\n    name: \"ledger\",\n    shortcodes: [\"ledger\"],\n    tags: [\"notebook\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4d2.png\"\n  },\n  {\n    emoji: \"\\u{1F4C3}\",\n    name: \"page_with_curl\",\n    shortcodes: [\"page_with_curl\"],\n    tags: [\"curl\", \"document\", \"page\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4c3.png\"\n  },\n  {\n    emoji: \"\\u{1F4DC}\",\n    name: \"scroll\",\n    shortcodes: [\"scroll\"],\n    tags: [\"paper\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4dc.png\"\n  },\n  {\n    emoji: \"\\u{1F4C4}\",\n    name: \"page_facing_up\",\n    shortcodes: [\"page_facing_up\"],\n    tags: [\"document\", \"page\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4c4.png\"\n  },\n  {\n    emoji: \"\\u{1F4F0}\",\n    name: \"newspaper\",\n    shortcodes: [\"newspaper\"],\n    tags: [\"news\", \"paper\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4f0.png\"\n  },\n  {\n    emoji: \"\\u{1F5DE}\",\n    name: \"newspaper_roll\",\n    shortcodes: [\"rolled_up_newspaper\"],\n    tags: [\"news\", \"newspaper\", \"paper\", \"rolled\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5de-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4D1}\",\n    name: \"bookmark_tabs\",\n    shortcodes: [\"bookmark_tabs\"],\n    tags: [\"bookmark\", \"mark\", \"marker\", \"tabs\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4d1.png\"\n  },\n  {\n    emoji: \"\\u{1F516}\",\n    name: \"bookmark\",\n    shortcodes: [\"bookmark\"],\n    tags: [\"mark\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f516.png\"\n  },\n  {\n    emoji: \"\\u{1F3F7}\",\n    name: \"label\",\n    shortcodes: [\"label\"],\n    tags: [\"label\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3f7-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4B0}\",\n    name: \"moneybag\",\n    shortcodes: [\"moneybag\"],\n    tags: [\"bag\", \"dollar\", \"money\", \"moneybag\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4b0.png\"\n  },\n  {\n    emoji: \"\\u{1FA99}\",\n    name: \"coin\",\n    shortcodes: [\"coin\"],\n    tags: [\"gold\", \"metal\", \"money\", \"silver\", \"treasure\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa99.png\"\n  },\n  {\n    emoji: \"\\u{1F4B4}\",\n    name: \"yen\",\n    shortcodes: [\"yen\"],\n    tags: [\"banknote\", \"bill\", \"currency\", \"money\", \"note\", \"yen\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4b4.png\"\n  },\n  {\n    emoji: \"\\u{1F4B5}\",\n    name: \"dollar\",\n    shortcodes: [\"dollar\"],\n    tags: [\"banknote\", \"bill\", \"currency\", \"dollar\", \"money\", \"note\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4b5.png\"\n  },\n  {\n    emoji: \"\\u{1F4B6}\",\n    name: \"euro\",\n    shortcodes: [\"euro\"],\n    tags: [\"banknote\", \"bill\", \"currency\", \"euro\", \"money\", \"note\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4b6.png\"\n  },\n  {\n    emoji: \"\\u{1F4B7}\",\n    name: \"pound\",\n    shortcodes: [\"pound\"],\n    tags: [\"banknote\", \"bill\", \"currency\", \"money\", \"note\", \"pound\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4b7.png\"\n  },\n  {\n    emoji: \"\\u{1F4B8}\",\n    name: \"money_with_wings\",\n    shortcodes: [\"money_with_wings\"],\n    tags: [\"banknote\", \"bill\", \"fly\", \"money\", \"wings\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4b8.png\"\n  },\n  {\n    emoji: \"\\u{1F4B3}\",\n    name: \"credit_card\",\n    shortcodes: [\"credit_card\"],\n    tags: [\"card\", \"credit\", \"money\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4b3.png\"\n  },\n  {\n    emoji: \"\\u{1F9FE}\",\n    name: \"receipt\",\n    shortcodes: [\"receipt\"],\n    tags: [\"accounting\", \"bookkeeping\", \"evidence\", \"proof\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9fe.png\"\n  },\n  {\n    emoji: \"\\u{1F4B9}\",\n    name: \"chart\",\n    shortcodes: [\"chart\"],\n    tags: [\"chart\", \"graph\", \"growth\", \"money\", \"yen\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4b9.png\"\n  },\n  {\n    emoji: \"\\u2709\",\n    name: \"envelope\",\n    shortcodes: [\"envelope\"],\n    tags: [\"email\", \"letter\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2709-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4E7}\",\n    name: \"e-mail\",\n    shortcodes: [\"e-mail\", \"email\"],\n    tags: [\"email\", \"letter\", \"mail\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4e7.png\"\n  },\n  {\n    emoji: \"\\u{1F4E8}\",\n    name: \"incoming_envelope\",\n    shortcodes: [\"incoming_envelope\"],\n    tags: [\"e-mail\", \"email\", \"envelope\", \"incoming\", \"letter\", \"receive\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4e8.png\"\n  },\n  {\n    emoji: \"\\u{1F4E9}\",\n    name: \"envelope_with_arrow\",\n    shortcodes: [\"envelope_with_arrow\"],\n    tags: [\"arrow\", \"e-mail\", \"email\", \"envelope\", \"outgoing\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4e9.png\"\n  },\n  {\n    emoji: \"\\u{1F4E4}\",\n    name: \"outbox_tray\",\n    shortcodes: [\"outbox_tray\"],\n    tags: [\"box\", \"letter\", \"mail\", \"outbox\", \"sent\", \"tray\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4e4.png\"\n  },\n  {\n    emoji: \"\\u{1F4E5}\",\n    name: \"inbox_tray\",\n    shortcodes: [\"inbox_tray\"],\n    tags: [\"box\", \"inbox\", \"letter\", \"mail\", \"receive\", \"tray\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4e5.png\"\n  },\n  {\n    emoji: \"\\u{1F4E6}\",\n    name: \"package\",\n    shortcodes: [\"package\"],\n    tags: [\"box\", \"parcel\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4e6.png\"\n  },\n  {\n    emoji: \"\\u{1F4EB}\",\n    name: \"mailbox\",\n    shortcodes: [\"mailbox\"],\n    tags: [\"closed\", \"mail\", \"mailbox\", \"postbox\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4eb.png\"\n  },\n  {\n    emoji: \"\\u{1F4EA}\",\n    name: \"mailbox_closed\",\n    shortcodes: [\"mailbox_closed\"],\n    tags: [\"closed\", \"lowered\", \"mail\", \"mailbox\", \"postbox\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4ea.png\"\n  },\n  {\n    emoji: \"\\u{1F4EC}\",\n    name: \"mailbox_with_mail\",\n    shortcodes: [\"mailbox_with_mail\"],\n    tags: [\"mail\", \"mailbox\", \"open\", \"postbox\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4ec.png\"\n  },\n  {\n    emoji: \"\\u{1F4ED}\",\n    name: \"mailbox_with_no_mail\",\n    shortcodes: [\"mailbox_with_no_mail\"],\n    tags: [\"lowered\", \"mail\", \"mailbox\", \"open\", \"postbox\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4ed.png\"\n  },\n  {\n    emoji: \"\\u{1F4EE}\",\n    name: \"postbox\",\n    shortcodes: [\"postbox\"],\n    tags: [\"mail\", \"mailbox\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4ee.png\"\n  },\n  {\n    emoji: \"\\u{1F5F3}\",\n    name: \"ballot_box\",\n    shortcodes: [\"ballot_box\"],\n    tags: [\"ballot\", \"box\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5f3-fe0f.png\"\n  },\n  {\n    emoji: \"\\u270F\",\n    name: \"pencil2\",\n    shortcodes: [\"pencil\"],\n    tags: [\"pencil\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/270f-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2712\",\n    name: \"black_nib\",\n    shortcodes: [\"black_nib\"],\n    tags: [\"nib\", \"pen\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2712-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F58B}\",\n    name: \"fountain_pen\",\n    shortcodes: [\"fountain_pen\"],\n    tags: [\"fountain\", \"pen\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f58b-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F58A}\",\n    name: \"pen\",\n    shortcodes: [\"pen\"],\n    tags: [\"ballpoint\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f58a-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F58C}\",\n    name: \"paintbrush\",\n    shortcodes: [\"paintbrush\"],\n    tags: [\"painting\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f58c-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F58D}\",\n    name: \"crayon\",\n    shortcodes: [\"crayon\"],\n    tags: [\"crayon\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f58d-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4DD}\",\n    name: \"memo\",\n    shortcodes: [\"memo\"],\n    tags: [\"pencil\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4dd.png\"\n  },\n  {\n    emoji: \"\\u{1F4BC}\",\n    name: \"briefcase\",\n    shortcodes: [\"briefcase\"],\n    tags: [\"briefcase\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4bc.png\"\n  },\n  {\n    emoji: \"\\u{1F4C1}\",\n    name: \"file_folder\",\n    shortcodes: [\"file_folder\"],\n    tags: [\"file\", \"folder\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4c1.png\"\n  },\n  {\n    emoji: \"\\u{1F4C2}\",\n    name: \"open_file_folder\",\n    shortcodes: [\"open_file_folder\"],\n    tags: [\"file\", \"folder\", \"open\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4c2.png\"\n  },\n  {\n    emoji: \"\\u{1F5C2}\",\n    name: \"card_index_dividers\",\n    shortcodes: [\"card_index_dividers\"],\n    tags: [\"card\", \"dividers\", \"index\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5c2-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4C5}\",\n    name: \"date\",\n    shortcodes: [\"date\"],\n    tags: [\"date\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4c5.png\"\n  },\n  {\n    emoji: \"\\u{1F4C6}\",\n    name: \"calendar\",\n    shortcodes: [\"calendar\"],\n    tags: [\"calendar\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4c6.png\"\n  },\n  {\n    emoji: \"\\u{1F5D2}\",\n    name: \"spiral_notepad\",\n    shortcodes: [\"notepad_spiral\"],\n    tags: [\"note\", \"pad\", \"spiral\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5d2-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F5D3}\",\n    name: \"spiral_calendar\",\n    shortcodes: [\"calendar_spiral\"],\n    tags: [\"calendar\", \"pad\", \"spiral\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5d3-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4C7}\",\n    name: \"card_index\",\n    shortcodes: [\"card_index\"],\n    tags: [\"card\", \"index\", \"rolodex\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4c7.png\"\n  },\n  {\n    emoji: \"\\u{1F4C8}\",\n    name: \"chart_with_upwards_trend\",\n    shortcodes: [\"chart_increasing\", \"chart_with_upwards_trend\"],\n    tags: [\"chart\", \"graph\", \"growth\", \"trend\", \"upward\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4c8.png\"\n  },\n  {\n    emoji: \"\\u{1F4C9}\",\n    name: \"chart_with_downwards_trend\",\n    shortcodes: [\"chart_decreasing\", \"chart_with_downwards_trend\"],\n    tags: [\"chart\", \"down\", \"graph\", \"trend\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4c9.png\"\n  },\n  {\n    emoji: \"\\u{1F4CA}\",\n    name: \"bar_chart\",\n    shortcodes: [\"bar_chart\"],\n    tags: [\"bar\", \"chart\", \"graph\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4ca.png\"\n  },\n  {\n    emoji: \"\\u{1F4CB}\",\n    name: \"clipboard\",\n    shortcodes: [\"clipboard\"],\n    tags: [\"clipboard\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4cb.png\"\n  },\n  {\n    emoji: \"\\u{1F4CC}\",\n    name: \"pushpin\",\n    shortcodes: [\"pushpin\"],\n    tags: [\"pin\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4cc.png\"\n  },\n  {\n    emoji: \"\\u{1F4CD}\",\n    name: \"round_pushpin\",\n    shortcodes: [\"round_pushpin\"],\n    tags: [\"pin\", \"pushpin\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4cd.png\"\n  },\n  {\n    emoji: \"\\u{1F4CE}\",\n    name: \"paperclip\",\n    shortcodes: [\"paperclip\"],\n    tags: [\"paperclip\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4ce.png\"\n  },\n  {\n    emoji: \"\\u{1F587}\",\n    name: \"paperclips\",\n    shortcodes: [\"paperclips\"],\n    tags: [\"link\", \"paperclip\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f587-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4CF}\",\n    name: \"straight_ruler\",\n    shortcodes: [\"straight_ruler\"],\n    tags: [\"ruler\", \"straight edge\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4cf.png\"\n  },\n  {\n    emoji: \"\\u{1F4D0}\",\n    name: \"triangular_ruler\",\n    shortcodes: [\"triangular_ruler\"],\n    tags: [\"ruler\", \"set\", \"triangle\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4d0.png\"\n  },\n  {\n    emoji: \"\\u2702\",\n    name: \"scissors\",\n    shortcodes: [\"scissors\"],\n    tags: [\"cutting\", \"tool\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2702-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F5C3}\",\n    name: \"card_file_box\",\n    shortcodes: [\"card_file_box\"],\n    tags: [\"box\", \"card\", \"file\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5c3-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F5C4}\",\n    name: \"file_cabinet\",\n    shortcodes: [\"file_cabinet\"],\n    tags: [\"cabinet\", \"file\", \"filing\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5c4-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F5D1}\",\n    name: \"wastebasket\",\n    shortcodes: [\"trashcan\", \"wastebasket\"],\n    tags: [\"wastebasket\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5d1-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F512}\",\n    name: \"lock\",\n    shortcodes: [\"lock\", \"locked\"],\n    tags: [\"closed\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f512.png\"\n  },\n  {\n    emoji: \"\\u{1F513}\",\n    name: \"unlock\",\n    shortcodes: [\"unlock\", \"unlocked\"],\n    tags: [\"lock\", \"open\", \"unlock\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f513.png\"\n  },\n  {\n    emoji: \"\\u{1F50F}\",\n    name: \"lock_with_ink_pen\",\n    shortcodes: [\"lock_with_ink_pen\", \"locked_with_pen\"],\n    tags: [\"ink\", \"lock\", \"nib\", \"pen\", \"privacy\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f50f.png\"\n  },\n  {\n    emoji: \"\\u{1F510}\",\n    name: \"closed_lock_with_key\",\n    shortcodes: [\"closed_lock_with_key\", \"locked_with_key\"],\n    tags: [\"closed\", \"key\", \"lock\", \"secure\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f510.png\"\n  },\n  {\n    emoji: \"\\u{1F511}\",\n    name: \"key\",\n    shortcodes: [\"key\"],\n    tags: [\"lock\", \"password\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f511.png\"\n  },\n  {\n    emoji: \"\\u{1F5DD}\",\n    name: \"old_key\",\n    shortcodes: [\"old_key\"],\n    tags: [\"clue\", \"key\", \"lock\", \"old\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5dd-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F528}\",\n    name: \"hammer\",\n    shortcodes: [\"hammer\"],\n    tags: [\"tool\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f528.png\"\n  },\n  {\n    emoji: \"\\u{1FA93}\",\n    name: \"axe\",\n    shortcodes: [\"axe\"],\n    tags: [\"chop\", \"hatchet\", \"split\", \"wood\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa93.png\"\n  },\n  {\n    emoji: \"\\u26CF\",\n    name: \"pick\",\n    shortcodes: [\"pick\"],\n    tags: [\"mining\", \"tool\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26cf-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2692\",\n    name: \"hammer_and_pick\",\n    shortcodes: [\"hammer_and_pick\"],\n    tags: [\"hammer\", \"pick\", \"tool\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2692-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6E0}\",\n    name: \"hammer_and_wrench\",\n    shortcodes: [\"hammer_and_wrench\"],\n    tags: [\"hammer\", \"spanner\", \"tool\", \"wrench\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6e0-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F5E1}\",\n    name: \"dagger\",\n    shortcodes: [\"dagger\"],\n    tags: [\"knife\", \"weapon\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5e1-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2694\",\n    name: \"crossed_swords\",\n    shortcodes: [\"crossed_swords\"],\n    tags: [\"crossed\", \"swords\", \"weapon\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2694-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4A3}\",\n    name: \"bomb\",\n    shortcodes: [\"bomb\"],\n    tags: [\"comic\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4a3.png\"\n  },\n  {\n    emoji: \"\\u{1FA83}\",\n    name: \"boomerang\",\n    shortcodes: [\"boomerang\"],\n    tags: [\"rebound\", \"repercussion\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa83.png\"\n  },\n  {\n    emoji: \"\\u{1F3F9}\",\n    name: \"bow_and_arrow\",\n    shortcodes: [\"bow_and_arrow\"],\n    tags: [\"archer\", \"arrow\", \"bow\", \"sagittarius\", \"zodiac\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3f9.png\"\n  },\n  {\n    emoji: \"\\u{1F6E1}\",\n    name: \"shield\",\n    shortcodes: [\"shield\"],\n    tags: [\"weapon\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6e1-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1FA9A}\",\n    name: \"carpentry_saw\",\n    shortcodes: [\"carpentry_saw\"],\n    tags: [\"carpenter\", \"lumber\", \"saw\", \"tool\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa9a.png\"\n  },\n  {\n    emoji: \"\\u{1F527}\",\n    name: \"wrench\",\n    shortcodes: [\"wrench\"],\n    tags: [\"spanner\", \"tool\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f527.png\"\n  },\n  {\n    emoji: \"\\u{1FA9B}\",\n    name: \"screwdriver\",\n    shortcodes: [\"screwdriver\"],\n    tags: [\"screw\", \"tool\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa9b.png\"\n  },\n  {\n    emoji: \"\\u{1F529}\",\n    name: \"nut_and_bolt\",\n    shortcodes: [\"nut_and_bolt\"],\n    tags: [\"bolt\", \"nut\", \"tool\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f529.png\"\n  },\n  {\n    emoji: \"\\u2699\",\n    name: \"gear\",\n    shortcodes: [\"gear\"],\n    tags: [\"cog\", \"cogwheel\", \"tool\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2699-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F5DC}\",\n    name: \"clamp\",\n    shortcodes: [\"clamp\", \"compression\"],\n    tags: [\"compress\", \"tool\", \"vice\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5dc-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2696\",\n    name: \"balance_scale\",\n    shortcodes: [\"scales\"],\n    tags: [\"balance\", \"justice\", \"libra\", \"scale\", \"zodiac\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2696-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9AF}\",\n    name: \"probing_cane\",\n    shortcodes: [\"probing_cane\", \"white_cane\"],\n    tags: [\"accessibility\", \"blind\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9af.png\"\n  },\n  {\n    emoji: \"\\u{1F517}\",\n    name: \"link\",\n    shortcodes: [\"link\"],\n    tags: [\"link\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f517.png\"\n  },\n  {\n    emoji: \"\\u26D3\\u200D\\u{1F4A5}\",\n    name: \"broken_chain\",\n    shortcodes: [\"broken_chain\"],\n    tags: [\"break\", \"breaking\", \"chain\", \"cuffs\", \"freedom\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 15.1\n  },\n  {\n    emoji: \"\\u26D3\",\n    name: \"chains\",\n    shortcodes: [\"chains\"],\n    tags: [\"chain\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26d3-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1FA9D}\",\n    name: \"hook\",\n    shortcodes: [\"hook\"],\n    tags: [\"catch\", \"crook\", \"curve\", \"ensnare\", \"selling point\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa9d.png\"\n  },\n  {\n    emoji: \"\\u{1F9F0}\",\n    name: \"toolbox\",\n    shortcodes: [\"toolbox\"],\n    tags: [\"chest\", \"mechanic\", \"tool\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9f0.png\"\n  },\n  {\n    emoji: \"\\u{1F9F2}\",\n    name: \"magnet\",\n    shortcodes: [\"magnet\"],\n    tags: [\"attraction\", \"horseshoe\", \"magnetic\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9f2.png\"\n  },\n  {\n    emoji: \"\\u{1FA9C}\",\n    name: \"ladder\",\n    shortcodes: [\"ladder\"],\n    tags: [\"climb\", \"rung\", \"step\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa9c.png\"\n  },\n  {\n    emoji: \"\\u2697\",\n    name: \"alembic\",\n    shortcodes: [\"alembic\"],\n    tags: [\"chemistry\", \"tool\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2697-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9EA}\",\n    name: \"test_tube\",\n    shortcodes: [\"test_tube\"],\n    tags: [\"chemist\", \"chemistry\", \"experiment\", \"lab\", \"science\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9ea.png\"\n  },\n  {\n    emoji: \"\\u{1F9EB}\",\n    name: \"petri_dish\",\n    shortcodes: [\"petri_dish\"],\n    tags: [\"bacteria\", \"biologist\", \"biology\", \"culture\", \"lab\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9eb.png\"\n  },\n  {\n    emoji: \"\\u{1F9EC}\",\n    name: \"dna\",\n    shortcodes: [\"dna\", \"double_helix\"],\n    tags: [\"biologist\", \"evolution\", \"gene\", \"genetics\", \"life\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9ec.png\"\n  },\n  {\n    emoji: \"\\u{1F52C}\",\n    name: \"microscope\",\n    shortcodes: [\"microscope\"],\n    tags: [\"science\", \"tool\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f52c.png\"\n  },\n  {\n    emoji: \"\\u{1F52D}\",\n    name: \"telescope\",\n    shortcodes: [\"telescope\"],\n    tags: [\"science\", \"tool\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f52d.png\"\n  },\n  {\n    emoji: \"\\u{1F4E1}\",\n    name: \"satellite\",\n    shortcodes: [\"satellite_antenna\"],\n    tags: [\"antenna\", \"dish\", \"satellite\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4e1.png\"\n  },\n  {\n    emoji: \"\\u{1F489}\",\n    name: \"syringe\",\n    shortcodes: [\"syringe\"],\n    tags: [\"medicine\", \"needle\", \"shot\", \"sick\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f489.png\"\n  },\n  {\n    emoji: \"\\u{1FA78}\",\n    name: \"drop_of_blood\",\n    shortcodes: [\"drop_of_blood\"],\n    tags: [\"bleed\", \"blood donation\", \"injury\", \"medicine\", \"menstruation\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa78.png\"\n  },\n  {\n    emoji: \"\\u{1F48A}\",\n    name: \"pill\",\n    shortcodes: [\"pill\"],\n    tags: [\"doctor\", \"medicine\", \"sick\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f48a.png\"\n  },\n  {\n    emoji: \"\\u{1FA79}\",\n    name: \"adhesive_bandage\",\n    shortcodes: [\"adhesive_bandage\", \"bandaid\"],\n    tags: [\"bandage\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa79.png\"\n  },\n  {\n    emoji: \"\\u{1FA7C}\",\n    name: \"crutch\",\n    shortcodes: [\"crutch\"],\n    tags: [\"cane\", \"disability\", \"hurt\", \"mobility aid\", \"stick\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1FA7A}\",\n    name: \"stethoscope\",\n    shortcodes: [\"stethoscope\"],\n    tags: [\"doctor\", \"heart\", \"medicine\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa7a.png\"\n  },\n  {\n    emoji: \"\\u{1FA7B}\",\n    name: \"x_ray\",\n    shortcodes: [\"x-ray\", \"xray\"],\n    tags: [\"bones\", \"doctor\", \"medical\", \"skeleton\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F6AA}\",\n    name: \"door\",\n    shortcodes: [\"door\"],\n    tags: [\"door\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6aa.png\"\n  },\n  {\n    emoji: \"\\u{1F6D7}\",\n    name: \"elevator\",\n    shortcodes: [\"elevator\"],\n    tags: [\"accessibility\", \"hoist\", \"lift\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6d7.png\"\n  },\n  {\n    emoji: \"\\u{1FA9E}\",\n    name: \"mirror\",\n    shortcodes: [\"mirror\"],\n    tags: [\"reflection\", \"reflector\", \"speculum\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa9e.png\"\n  },\n  {\n    emoji: \"\\u{1FA9F}\",\n    name: \"window\",\n    shortcodes: [\"window\"],\n    tags: [\"frame\", \"fresh air\", \"opening\", \"transparent\", \"view\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa9f.png\"\n  },\n  {\n    emoji: \"\\u{1F6CF}\",\n    name: \"bed\",\n    shortcodes: [\"bed\"],\n    tags: [\"hotel\", \"sleep\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6cf-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6CB}\",\n    name: \"couch_and_lamp\",\n    shortcodes: [\"couch_and_lamp\"],\n    tags: [\"couch\", \"hotel\", \"lamp\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6cb-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1FA91}\",\n    name: \"chair\",\n    shortcodes: [\"chair\"],\n    tags: [\"seat\", \"sit\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa91.png\"\n  },\n  {\n    emoji: \"\\u{1F6BD}\",\n    name: \"toilet\",\n    shortcodes: [\"toilet\"],\n    tags: [\"toilet\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6bd.png\"\n  },\n  {\n    emoji: \"\\u{1FAA0}\",\n    name: \"plunger\",\n    shortcodes: [\"plunger\"],\n    tags: [\"force cup\", \"plumber\", \"suction\", \"toilet\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1faa0.png\"\n  },\n  {\n    emoji: \"\\u{1F6BF}\",\n    name: \"shower\",\n    shortcodes: [\"shower\"],\n    tags: [\"water\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6bf.png\"\n  },\n  {\n    emoji: \"\\u{1F6C1}\",\n    name: \"bathtub\",\n    shortcodes: [\"bathtub\"],\n    tags: [\"bath\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6c1.png\"\n  },\n  {\n    emoji: \"\\u{1FAA4}\",\n    name: \"mouse_trap\",\n    shortcodes: [\"mouse_trap\"],\n    tags: [\"bait\", \"mousetrap\", \"snare\", \"trap\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1faa4.png\"\n  },\n  {\n    emoji: \"\\u{1FA92}\",\n    name: \"razor\",\n    shortcodes: [\"razor\"],\n    tags: [\"sharp\", \"shave\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1fa92.png\"\n  },\n  {\n    emoji: \"\\u{1F9F4}\",\n    name: \"lotion_bottle\",\n    shortcodes: [\"lotion_bottle\"],\n    tags: [\"lotion\", \"moisturizer\", \"shampoo\", \"sunscreen\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9f4.png\"\n  },\n  {\n    emoji: \"\\u{1F9F7}\",\n    name: \"safety_pin\",\n    shortcodes: [\"safety_pin\"],\n    tags: [\"diaper\", \"punk rock\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9f7.png\"\n  },\n  {\n    emoji: \"\\u{1F9F9}\",\n    name: \"broom\",\n    shortcodes: [\"broom\"],\n    tags: [\"cleaning\", \"sweeping\", \"witch\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9f9.png\"\n  },\n  {\n    emoji: \"\\u{1F9FA}\",\n    name: \"basket\",\n    shortcodes: [\"basket\"],\n    tags: [\"farming\", \"laundry\", \"picnic\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9fa.png\"\n  },\n  {\n    emoji: \"\\u{1F9FB}\",\n    name: \"roll_of_paper\",\n    shortcodes: [\"roll_of_paper\", \"toilet_paper\"],\n    tags: [\"paper towels\", \"toilet paper\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9fb.png\"\n  },\n  {\n    emoji: \"\\u{1FAA3}\",\n    name: \"bucket\",\n    shortcodes: [\"bucket\"],\n    tags: [\"cask\", \"pail\", \"vat\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1faa3.png\"\n  },\n  {\n    emoji: \"\\u{1F9FC}\",\n    name: \"soap\",\n    shortcodes: [\"soap\"],\n    tags: [\"bar\", \"bathing\", \"cleaning\", \"lather\", \"soapdish\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9fc.png\"\n  },\n  {\n    emoji: \"\\u{1FAE7}\",\n    name: \"bubbles\",\n    shortcodes: [\"bubbles\"],\n    tags: [\"burp\", \"clean\", \"soap\", \"underwater\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1FAA5}\",\n    name: \"toothbrush\",\n    shortcodes: [\"toothbrush\"],\n    tags: [\"bathroom\", \"brush\", \"clean\", \"dental\", \"hygiene\", \"teeth\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1faa5.png\"\n  },\n  {\n    emoji: \"\\u{1F9FD}\",\n    name: \"sponge\",\n    shortcodes: [\"sponge\"],\n    tags: [\"absorbing\", \"cleaning\", \"porous\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9fd.png\"\n  },\n  {\n    emoji: \"\\u{1F9EF}\",\n    name: \"fire_extinguisher\",\n    shortcodes: [\"fire_extinguisher\"],\n    tags: [\"extinguish\", \"fire\", \"quench\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9ef.png\"\n  },\n  {\n    emoji: \"\\u{1F6D2}\",\n    name: \"shopping_cart\",\n    shortcodes: [\"shopping_cart\"],\n    tags: [\"cart\", \"shopping\", \"trolley\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 3,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6d2.png\"\n  },\n  {\n    emoji: \"\\u{1F6AC}\",\n    name: \"smoking\",\n    shortcodes: [\"cigarette\", \"smoking\"],\n    tags: [\"smoking\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6ac.png\"\n  },\n  {\n    emoji: \"\\u26B0\",\n    name: \"coffin\",\n    shortcodes: [\"coffin\"],\n    tags: [\"death\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26b0-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1FAA6}\",\n    name: \"headstone\",\n    shortcodes: [\"headstone\"],\n    tags: [\"cemetery\", \"grave\", \"graveyard\", \"tombstone\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1faa6.png\"\n  },\n  {\n    emoji: \"\\u26B1\",\n    name: \"funeral_urn\",\n    shortcodes: [\"funeral_urn\"],\n    tags: [\"ashes\", \"death\", \"funeral\", \"urn\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26b1-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F9FF}\",\n    name: \"nazar_amulet\",\n    shortcodes: [\"nazar_amulet\"],\n    tags: [\"bead\", \"charm\", \"evil-eye\", \"nazar\", \"talisman\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f9ff.png\"\n  },\n  {\n    emoji: \"\\u{1FAAC}\",\n    name: \"hamsa\",\n    shortcodes: [\"hamsa\"],\n    tags: [\"amulet\", \"fatima\", \"hand\", \"mary\", \"miriam\", \"protection\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F5FF}\",\n    name: \"moyai\",\n    shortcodes: [\"moai\", \"moyai\"],\n    tags: [\"face\", \"moyai\", \"statue\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f5ff.png\"\n  },\n  {\n    emoji: \"\\u{1FAA7}\",\n    name: \"placard\",\n    shortcodes: [\"placard\"],\n    tags: [\"demonstration\", \"picket\", \"protest\", \"sign\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1faa7.png\"\n  },\n  {\n    emoji: \"\\u{1FAAA}\",\n    name: \"identification_card\",\n    shortcodes: [\"id_card\"],\n    tags: [\"credentials\", \"id\", \"license\", \"security\"],\n    group: \"objects\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u{1F3E7}\",\n    name: \"atm\",\n    shortcodes: [\"atm\"],\n    tags: [\"atm\", \"atm sign\", \"automated\", \"bank\", \"teller\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3e7.png\"\n  },\n  {\n    emoji: \"\\u{1F6AE}\",\n    name: \"put_litter_in_its_place\",\n    shortcodes: [\"litter_bin\", \"put_litter_in_its_place\"],\n    tags: [\"litter\", \"litter bin\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6ae.png\"\n  },\n  {\n    emoji: \"\\u{1F6B0}\",\n    name: \"potable_water\",\n    shortcodes: [\"potable_water\"],\n    tags: [\"drinking\", \"potable\", \"water\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b0.png\"\n  },\n  {\n    emoji: \"\\u267F\",\n    name: \"wheelchair\",\n    shortcodes: [\"handicapped\", \"wheelchair\"],\n    tags: [\"access\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/267f.png\"\n  },\n  {\n    emoji: \"\\u{1F6B9}\",\n    name: \"mens\",\n    shortcodes: [\"mens\"],\n    tags: [\"bathroom\", \"lavatory\", \"man\", \"restroom\", \"toilet\", \"wc\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b9.png\"\n  },\n  {\n    emoji: \"\\u{1F6BA}\",\n    name: \"womens\",\n    shortcodes: [\"womens\"],\n    tags: [\"bathroom\", \"lavatory\", \"restroom\", \"toilet\", \"wc\", \"woman\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6ba.png\"\n  },\n  {\n    emoji: \"\\u{1F6BB}\",\n    name: \"restroom\",\n    shortcodes: [\"bathroom\", \"restroom\"],\n    tags: [\"bathroom\", \"lavatory\", \"toilet\", \"wc\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6bb.png\"\n  },\n  {\n    emoji: \"\\u{1F6BC}\",\n    name: \"baby_symbol\",\n    shortcodes: [\"baby_symbol\"],\n    tags: [\"baby\", \"changing\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6bc.png\"\n  },\n  {\n    emoji: \"\\u{1F6BE}\",\n    name: \"wc\",\n    shortcodes: [\"water_closet\", \"wc\"],\n    tags: [\"bathroom\", \"closet\", \"lavatory\", \"restroom\", \"toilet\", \"water\", \"wc\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6be.png\"\n  },\n  {\n    emoji: \"\\u{1F6C2}\",\n    name: \"passport_control\",\n    shortcodes: [\"passport_control\"],\n    tags: [\"control\", \"passport\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6c2.png\"\n  },\n  {\n    emoji: \"\\u{1F6C3}\",\n    name: \"customs\",\n    shortcodes: [\"customs\"],\n    tags: [\"customs\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6c3.png\"\n  },\n  {\n    emoji: \"\\u{1F6C4}\",\n    name: \"baggage_claim\",\n    shortcodes: [\"baggage_claim\"],\n    tags: [\"baggage\", \"claim\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6c4.png\"\n  },\n  {\n    emoji: \"\\u{1F6C5}\",\n    name: \"left_luggage\",\n    shortcodes: [\"left_luggage\"],\n    tags: [\"baggage\", \"locker\", \"luggage\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6c5.png\"\n  },\n  {\n    emoji: \"\\u26A0\",\n    name: \"warning\",\n    shortcodes: [\"warning\"],\n    tags: [\"warning\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26a0-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F6B8}\",\n    name: \"children_crossing\",\n    shortcodes: [\"children_crossing\"],\n    tags: [\"child\", \"crossing\", \"pedestrian\", \"traffic\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b8.png\"\n  },\n  {\n    emoji: \"\\u26D4\",\n    name: \"no_entry\",\n    shortcodes: [\"no_entry\"],\n    tags: [\"entry\", \"forbidden\", \"no\", \"not\", \"prohibited\", \"traffic\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26d4.png\"\n  },\n  {\n    emoji: \"\\u{1F6AB}\",\n    name: \"no_entry_sign\",\n    shortcodes: [\"no_entry_sign\"],\n    tags: [\"entry\", \"forbidden\", \"no\", \"not\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6ab.png\"\n  },\n  {\n    emoji: \"\\u{1F6B3}\",\n    name: \"no_bicycles\",\n    shortcodes: [\"no_bicycles\"],\n    tags: [\"bicycle\", \"bike\", \"forbidden\", \"no\", \"prohibited\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b3.png\"\n  },\n  {\n    emoji: \"\\u{1F6AD}\",\n    name: \"no_smoking\",\n    shortcodes: [\"no_smoking\"],\n    tags: [\"forbidden\", \"no\", \"not\", \"prohibited\", \"smoking\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6ad.png\"\n  },\n  {\n    emoji: \"\\u{1F6AF}\",\n    name: \"do_not_litter\",\n    shortcodes: [\"do_not_litter\", \"no_littering\"],\n    tags: [\"forbidden\", \"litter\", \"no\", \"not\", \"prohibited\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6af.png\"\n  },\n  {\n    emoji: \"\\u{1F6B1}\",\n    name: \"non-potable_water\",\n    shortcodes: [\"non-potable_water\"],\n    tags: [\"non-drinking\", \"non-potable\", \"water\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b1.png\"\n  },\n  {\n    emoji: \"\\u{1F6B7}\",\n    name: \"no_pedestrians\",\n    shortcodes: [\"no_pedestrians\"],\n    tags: [\"forbidden\", \"no\", \"not\", \"pedestrian\", \"prohibited\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6b7.png\"\n  },\n  {\n    emoji: \"\\u{1F4F5}\",\n    name: \"no_mobile_phones\",\n    shortcodes: [\"no_mobile_phones\"],\n    tags: [\"cell\", \"forbidden\", \"mobile\", \"no\", \"phone\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4f5.png\"\n  },\n  {\n    emoji: \"\\u{1F51E}\",\n    name: \"underage\",\n    shortcodes: [\"no_one_under_18\", \"underage\"],\n    tags: [\"18\", \"age restriction\", \"eighteen\", \"prohibited\", \"underage\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f51e.png\"\n  },\n  {\n    emoji: \"\\u2622\",\n    name: \"radioactive\",\n    shortcodes: [\"radioactive\"],\n    tags: [\"sign\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2622-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2623\",\n    name: \"biohazard\",\n    shortcodes: [\"biohazard\"],\n    tags: [\"sign\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2623-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2B06\",\n    name: \"arrow_up\",\n    shortcodes: [\"arrow_up\"],\n    tags: [\"arrow\", \"cardinal\", \"direction\", \"north\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2b06-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2197\",\n    name: \"arrow_upper_right\",\n    shortcodes: [\"arrow_upper_right\"],\n    tags: [\"arrow\", \"direction\", \"intercardinal\", \"northeast\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2197-fe0f.png\"\n  },\n  {\n    emoji: \"\\u27A1\",\n    name: \"arrow_right\",\n    shortcodes: [\"arrow_right\"],\n    tags: [\"arrow\", \"cardinal\", \"direction\", \"east\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/27a1-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2198\",\n    name: \"arrow_lower_right\",\n    shortcodes: [\"arrow_lower_right\"],\n    tags: [\"arrow\", \"direction\", \"intercardinal\", \"southeast\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2198-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2B07\",\n    name: \"arrow_down\",\n    shortcodes: [\"arrow_down\"],\n    tags: [\"arrow\", \"cardinal\", \"direction\", \"down\", \"south\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2b07-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2199\",\n    name: \"arrow_lower_left\",\n    shortcodes: [\"arrow_lower_left\"],\n    tags: [\"arrow\", \"direction\", \"intercardinal\", \"southwest\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2199-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2B05\",\n    name: \"arrow_left\",\n    shortcodes: [\"arrow_left\"],\n    tags: [\"arrow\", \"cardinal\", \"direction\", \"west\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2b05-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2196\",\n    name: \"arrow_upper_left\",\n    shortcodes: [\"arrow_upper_left\"],\n    tags: [\"arrow\", \"direction\", \"intercardinal\", \"northwest\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2196-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2195\",\n    name: \"arrow_up_down\",\n    shortcodes: [\"arrow_up_down\"],\n    tags: [\"arrow\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2195-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2194\",\n    name: \"left_right_arrow\",\n    shortcodes: [\"left_right_arrow\"],\n    tags: [\"arrow\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2194-fe0f.png\"\n  },\n  {\n    emoji: \"\\u21A9\",\n    name: \"leftwards_arrow_with_hook\",\n    shortcodes: [\"arrow_left_hook\", \"leftwards_arrow_with_hook\"],\n    tags: [\"arrow\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/21a9-fe0f.png\"\n  },\n  {\n    emoji: \"\\u21AA\",\n    name: \"arrow_right_hook\",\n    shortcodes: [\"arrow_right_hook\", \"rightwards_arrow_with_hook\"],\n    tags: [\"arrow\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/21aa-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2934\",\n    name: \"arrow_heading_up\",\n    shortcodes: [\"arrow_heading_up\"],\n    tags: [\"arrow\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2934-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2935\",\n    name: \"arrow_heading_down\",\n    shortcodes: [\"arrow_heading_down\"],\n    tags: [\"arrow\", \"down\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2935-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F503}\",\n    name: \"arrows_clockwise\",\n    shortcodes: [\"arrows_clockwise\", \"clockwise\"],\n    tags: [\"arrow\", \"clockwise\", \"reload\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f503.png\"\n  },\n  {\n    emoji: \"\\u{1F504}\",\n    name: \"arrows_counterclockwise\",\n    shortcodes: [\"arrows_counterclockwise\", \"counterclockwise\"],\n    tags: [\"anticlockwise\", \"arrow\", \"counterclockwise\", \"withershins\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f504.png\"\n  },\n  {\n    emoji: \"\\u{1F519}\",\n    name: \"back\",\n    shortcodes: [\"back\"],\n    tags: [\"arrow\", \"back\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f519.png\"\n  },\n  {\n    emoji: \"\\u{1F51A}\",\n    name: \"end\",\n    shortcodes: [\"end\"],\n    tags: [\"arrow\", \"end\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f51a.png\"\n  },\n  {\n    emoji: \"\\u{1F51B}\",\n    name: \"on\",\n    shortcodes: [\"on\"],\n    tags: [\"arrow\", \"mark\", \"on\", \"on!\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f51b.png\"\n  },\n  {\n    emoji: \"\\u{1F51C}\",\n    name: \"soon\",\n    shortcodes: [\"soon\"],\n    tags: [\"arrow\", \"soon\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f51c.png\"\n  },\n  {\n    emoji: \"\\u{1F51D}\",\n    name: \"top\",\n    shortcodes: [\"top\"],\n    tags: [\"arrow\", \"top\", \"up\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f51d.png\"\n  },\n  {\n    emoji: \"\\u{1F6D0}\",\n    name: \"place_of_worship\",\n    shortcodes: [\"place_of_worship\"],\n    tags: [\"religion\", \"worship\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6d0.png\"\n  },\n  {\n    emoji: \"\\u269B\",\n    name: \"atom_symbol\",\n    shortcodes: [\"atom\", \"atom_symbol\"],\n    tags: [\"atheist\", \"atom\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/269b-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F549}\",\n    name: \"om\",\n    shortcodes: [\"om\"],\n    tags: [\"hindu\", \"religion\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f549-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2721\",\n    name: \"star_of_david\",\n    shortcodes: [\"star_of_david\"],\n    tags: [\"david\", \"jew\", \"jewish\", \"religion\", \"star\", \"star of david\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2721-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2638\",\n    name: \"wheel_of_dharma\",\n    shortcodes: [\"wheel_of_dharma\"],\n    tags: [\"buddhist\", \"dharma\", \"religion\", \"wheel\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2638-fe0f.png\"\n  },\n  {\n    emoji: \"\\u262F\",\n    name: \"yin_yang\",\n    shortcodes: [\"yin_yang\"],\n    tags: [\"religion\", \"tao\", \"taoist\", \"yang\", \"yin\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/262f-fe0f.png\"\n  },\n  {\n    emoji: \"\\u271D\",\n    name: \"latin_cross\",\n    shortcodes: [\"latin_cross\"],\n    tags: [\"christian\", \"cross\", \"religion\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/271d-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2626\",\n    name: \"orthodox_cross\",\n    shortcodes: [\"orthodox_cross\"],\n    tags: [\"christian\", \"cross\", \"religion\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2626-fe0f.png\"\n  },\n  {\n    emoji: \"\\u262A\",\n    name: \"star_and_crescent\",\n    shortcodes: [\"star_and_crescent\"],\n    tags: [\"islam\", \"muslim\", \"religion\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/262a-fe0f.png\"\n  },\n  {\n    emoji: \"\\u262E\",\n    name: \"peace_symbol\",\n    shortcodes: [\"peace\", \"peace_symbol\"],\n    tags: [\"peace\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/262e-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F54E}\",\n    name: \"menorah\",\n    shortcodes: [\"menorah\"],\n    tags: [\"candelabrum\", \"candlestick\", \"religion\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f54e.png\"\n  },\n  {\n    emoji: \"\\u{1F52F}\",\n    name: \"six_pointed_star\",\n    shortcodes: [\"six_pointed_star\"],\n    tags: [\"fortune\", \"star\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f52f.png\"\n  },\n  {\n    emoji: \"\\u{1FAAF}\",\n    name: \"khanda\",\n    shortcodes: [\"khanda\"],\n    tags: [\"religion\", \"sikh\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u2648\",\n    name: \"aries\",\n    shortcodes: [\"aries\"],\n    tags: [\"aries\", \"ram\", \"zodiac\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2648.png\"\n  },\n  {\n    emoji: \"\\u2649\",\n    name: \"taurus\",\n    shortcodes: [\"taurus\"],\n    tags: [\"bull\", \"ox\", \"taurus\", \"zodiac\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2649.png\"\n  },\n  {\n    emoji: \"\\u264A\",\n    name: \"gemini\",\n    shortcodes: [\"gemini\"],\n    tags: [\"gemini\", \"twins\", \"zodiac\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/264a.png\"\n  },\n  {\n    emoji: \"\\u264B\",\n    name: \"cancer\",\n    shortcodes: [\"cancer\"],\n    tags: [\"cancer\", \"crab\", \"zodiac\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/264b.png\"\n  },\n  {\n    emoji: \"\\u264C\",\n    name: \"leo\",\n    shortcodes: [\"leo\"],\n    tags: [\"leo\", \"lion\", \"zodiac\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/264c.png\"\n  },\n  {\n    emoji: \"\\u264D\",\n    name: \"virgo\",\n    shortcodes: [\"virgo\"],\n    tags: [\"virgo\", \"zodiac\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/264d.png\"\n  },\n  {\n    emoji: \"\\u264E\",\n    name: \"libra\",\n    shortcodes: [\"libra\"],\n    tags: [\"balance\", \"justice\", \"libra\", \"scales\", \"zodiac\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/264e.png\"\n  },\n  {\n    emoji: \"\\u264F\",\n    name: \"scorpius\",\n    shortcodes: [\"scorpius\"],\n    tags: [\"scorpio\", \"scorpion\", \"scorpius\", \"zodiac\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/264f.png\"\n  },\n  {\n    emoji: \"\\u2650\",\n    name: \"sagittarius\",\n    shortcodes: [\"sagittarius\"],\n    tags: [\"archer\", \"sagittarius\", \"zodiac\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2650.png\"\n  },\n  {\n    emoji: \"\\u2651\",\n    name: \"capricorn\",\n    shortcodes: [\"capricorn\"],\n    tags: [\"capricorn\", \"goat\", \"zodiac\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2651.png\"\n  },\n  {\n    emoji: \"\\u2652\",\n    name: \"aquarius\",\n    shortcodes: [\"aquarius\"],\n    tags: [\"aquarius\", \"bearer\", \"water\", \"zodiac\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2652.png\"\n  },\n  {\n    emoji: \"\\u2653\",\n    name: \"pisces\",\n    shortcodes: [\"pisces\"],\n    tags: [\"fish\", \"pisces\", \"zodiac\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2653.png\"\n  },\n  {\n    emoji: \"\\u26CE\",\n    name: \"ophiuchus\",\n    shortcodes: [\"ophiuchus\"],\n    tags: [\"bearer\", \"ophiuchus\", \"serpent\", \"snake\", \"zodiac\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26ce.png\"\n  },\n  {\n    emoji: \"\\u{1F500}\",\n    name: \"twisted_rightwards_arrows\",\n    shortcodes: [\"shuffle\", \"twisted_rightwards_arrows\"],\n    tags: [\"arrow\", \"crossed\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f500.png\"\n  },\n  {\n    emoji: \"\\u{1F501}\",\n    name: \"repeat\",\n    shortcodes: [\"repeat\"],\n    tags: [\"arrow\", \"clockwise\", \"repeat\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f501.png\"\n  },\n  {\n    emoji: \"\\u{1F502}\",\n    name: \"repeat_one\",\n    shortcodes: [\"repeat_one\"],\n    tags: [\"arrow\", \"clockwise\", \"once\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f502.png\"\n  },\n  {\n    emoji: \"\\u25B6\",\n    name: \"arrow_forward\",\n    shortcodes: [\"arrow_forward\", \"play\"],\n    tags: [\"arrow\", \"play\", \"right\", \"triangle\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/25b6-fe0f.png\"\n  },\n  {\n    emoji: \"\\u23E9\",\n    name: \"fast_forward\",\n    shortcodes: [\"fast_forward\"],\n    tags: [\"arrow\", \"double\", \"fast\", \"forward\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/23e9.png\"\n  },\n  {\n    emoji: \"\\u23ED\",\n    name: \"next_track_button\",\n    shortcodes: [\"next_track\"],\n    tags: [\"arrow\", \"next scene\", \"next track\", \"triangle\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/23ed-fe0f.png\"\n  },\n  {\n    emoji: \"\\u23EF\",\n    name: \"play_or_pause_button\",\n    shortcodes: [\"play_pause\"],\n    tags: [\"arrow\", \"pause\", \"play\", \"right\", \"triangle\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/23ef-fe0f.png\"\n  },\n  {\n    emoji: \"\\u25C0\",\n    name: \"arrow_backward\",\n    shortcodes: [\"arrow_backward\", \"reverse\"],\n    tags: [\"arrow\", \"left\", \"reverse\", \"triangle\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/25c0-fe0f.png\"\n  },\n  {\n    emoji: \"\\u23EA\",\n    name: \"rewind\",\n    shortcodes: [\"fast_reverse\", \"rewind\"],\n    tags: [\"arrow\", \"double\", \"rewind\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/23ea.png\"\n  },\n  {\n    emoji: \"\\u23EE\",\n    name: \"previous_track_button\",\n    shortcodes: [\"previous_track\"],\n    tags: [\"arrow\", \"previous scene\", \"previous track\", \"triangle\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/23ee-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F53C}\",\n    name: \"arrow_up_small\",\n    shortcodes: [\"arrow_up_small\", \"up\"],\n    tags: [\"arrow\", \"button\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f53c.png\"\n  },\n  {\n    emoji: \"\\u23EB\",\n    name: \"arrow_double_up\",\n    shortcodes: [\"arrow_double_up\", \"fast_up\"],\n    tags: [\"arrow\", \"double\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/23eb.png\"\n  },\n  {\n    emoji: \"\\u{1F53D}\",\n    name: \"arrow_down_small\",\n    shortcodes: [\"arrow_down_small\", \"down\"],\n    tags: [\"arrow\", \"button\", \"down\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f53d.png\"\n  },\n  {\n    emoji: \"\\u23EC\",\n    name: \"arrow_double_down\",\n    shortcodes: [\"arrow_double_down\", \"fast_down\"],\n    tags: [\"arrow\", \"double\", \"down\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/23ec.png\"\n  },\n  {\n    emoji: \"\\u23F8\",\n    name: \"pause_button\",\n    shortcodes: [\"pause\"],\n    tags: [\"bar\", \"double\", \"pause\", \"vertical\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/23f8-fe0f.png\"\n  },\n  {\n    emoji: \"\\u23F9\",\n    name: \"stop_button\",\n    shortcodes: [\"stop\"],\n    tags: [\"square\", \"stop\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/23f9-fe0f.png\"\n  },\n  {\n    emoji: \"\\u23FA\",\n    name: \"record_button\",\n    shortcodes: [\"record\"],\n    tags: [\"circle\", \"record\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/23fa-fe0f.png\"\n  },\n  {\n    emoji: \"\\u23CF\",\n    name: \"eject_button\",\n    shortcodes: [\"eject\"],\n    tags: [\"eject\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/23cf-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3A6}\",\n    name: \"cinema\",\n    shortcodes: [\"cinema\"],\n    tags: [\"camera\", \"film\", \"movie\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3a6.png\"\n  },\n  {\n    emoji: \"\\u{1F505}\",\n    name: \"low_brightness\",\n    shortcodes: [\"dim_button\", \"low_brightness\"],\n    tags: [\"brightness\", \"dim\", \"low\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f505.png\"\n  },\n  {\n    emoji: \"\\u{1F506}\",\n    name: \"high_brightness\",\n    shortcodes: [\"bright_button\", \"high_brightness\"],\n    tags: [\"bright\", \"brightness\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f506.png\"\n  },\n  {\n    emoji: \"\\u{1F4F6}\",\n    name: \"signal_strength\",\n    shortcodes: [\"antenna_bars\", \"signal_strength\"],\n    tags: [\"antenna\", \"bar\", \"cell\", \"mobile\", \"phone\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4f6.png\"\n  },\n  {\n    emoji: \"\\u{1F6DC}\",\n    name: \"wireless\",\n    shortcodes: [\"wireless\"],\n    tags: [\"computer\", \"internet\", \"network\", \"wi-fi\", \"wifi\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 15\n  },\n  {\n    emoji: \"\\u{1F4F3}\",\n    name: \"vibration_mode\",\n    shortcodes: [\"vibration_mode\"],\n    tags: [\"cell\", \"mobile\", \"mode\", \"phone\", \"telephone\", \"vibration\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4f3.png\"\n  },\n  {\n    emoji: \"\\u{1F4F4}\",\n    name: \"mobile_phone_off\",\n    shortcodes: [\"mobile_phone_off\"],\n    tags: [\"cell\", \"mobile\", \"off\", \"phone\", \"telephone\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4f4.png\"\n  },\n  {\n    emoji: \"\\u2640\",\n    name: \"female_sign\",\n    shortcodes: [\"female\", \"female_sign\"],\n    tags: [\"woman\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 4\n  },\n  {\n    emoji: \"\\u2642\",\n    name: \"male_sign\",\n    shortcodes: [\"male\", \"male_sign\"],\n    tags: [\"man\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 4\n  },\n  {\n    emoji: \"\\u26A7\",\n    name: \"transgender_symbol\",\n    shortcodes: [\"transgender_symbol\"],\n    tags: [\"transgender\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26a7-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2716\",\n    name: \"heavy_multiplication_x\",\n    shortcodes: [\"multiplication\", \"multiply\"],\n    tags: [\"cancel\", \"multiplication\", \"sign\", \"x\", \"\\xD7\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2716-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2795\",\n    name: \"heavy_plus_sign\",\n    shortcodes: [\"plus\"],\n    tags: [\"+\", \"math\", \"sign\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2795.png\"\n  },\n  {\n    emoji: \"\\u2796\",\n    name: \"heavy_minus_sign\",\n    shortcodes: [\"minus\"],\n    tags: [\"-\", \"math\", \"sign\", \"\\u2212\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2796.png\"\n  },\n  {\n    emoji: \"\\u2797\",\n    name: \"heavy_division_sign\",\n    shortcodes: [\"divide\", \"division\"],\n    tags: [\"division\", \"math\", \"sign\", \"\\xF7\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2797.png\"\n  },\n  {\n    emoji: \"\\u{1F7F0}\",\n    name: \"heavy_equals_sign\",\n    shortcodes: [\"heavy_equals_sign\"],\n    tags: [\"equality\", \"math\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 14\n  },\n  {\n    emoji: \"\\u267E\",\n    name: \"infinity\",\n    shortcodes: [\"infinity\"],\n    tags: [\"forever\", \"unbounded\", \"universal\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/267e-fe0f.png\"\n  },\n  {\n    emoji: \"\\u203C\",\n    name: \"bangbang\",\n    shortcodes: [\"bangbang\", \"double_exclamation\"],\n    tags: [\"!\", \"!!\", \"bangbang\", \"exclamation\", \"mark\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/203c-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2049\",\n    name: \"interrobang\",\n    shortcodes: [\"exclamation_question\", \"interrobang\"],\n    tags: [\"!\", \"!?\", \"?\", \"exclamation\", \"interrobang\", \"mark\", \"punctuation\", \"question\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2049-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2753\",\n    name: \"question\",\n    shortcodes: [\"question\"],\n    tags: [\"?\", \"mark\", \"punctuation\", \"question\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2753.png\"\n  },\n  {\n    emoji: \"\\u2754\",\n    name: \"grey_question\",\n    shortcodes: [\"white_question\"],\n    tags: [\"?\", \"mark\", \"outlined\", \"punctuation\", \"question\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2754.png\"\n  },\n  {\n    emoji: \"\\u2755\",\n    name: \"grey_exclamation\",\n    shortcodes: [\"white_exclamation\"],\n    tags: [\"!\", \"exclamation\", \"mark\", \"outlined\", \"punctuation\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2755.png\"\n  },\n  {\n    emoji: \"\\u2757\",\n    name: \"exclamation\",\n    shortcodes: [\"exclamation\"],\n    tags: [\"!\", \"exclamation\", \"mark\", \"punctuation\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2757.png\"\n  },\n  {\n    emoji: \"\\u3030\",\n    name: \"wavy_dash\",\n    shortcodes: [\"wavy_dash\"],\n    tags: [\"dash\", \"punctuation\", \"wavy\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/3030-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F4B1}\",\n    name: \"currency_exchange\",\n    shortcodes: [\"currency_exchange\"],\n    tags: [\"bank\", \"currency\", \"exchange\", \"money\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4b1.png\"\n  },\n  {\n    emoji: \"\\u{1F4B2}\",\n    name: \"heavy_dollar_sign\",\n    shortcodes: [\"heavy_dollar_sign\"],\n    tags: [\"currency\", \"dollar\", \"money\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4b2.png\"\n  },\n  {\n    emoji: \"\\u2695\",\n    name: \"medical_symbol\",\n    shortcodes: [\"medical\", \"medical_symbol\"],\n    tags: [\"aesculapius\", \"medicine\", \"staff\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 4\n  },\n  {\n    emoji: \"\\u267B\",\n    name: \"recycle\",\n    shortcodes: [\"recycle\", \"recycling_symbol\"],\n    tags: [\"recycle\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/267b-fe0f.png\"\n  },\n  {\n    emoji: \"\\u269C\",\n    name: \"fleur_de_lis\",\n    shortcodes: [\"fleur-de-lis\"],\n    tags: [\"fleur-de-lis\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/269c-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F531}\",\n    name: \"trident\",\n    shortcodes: [\"trident\"],\n    tags: [\"anchor\", \"emblem\", \"ship\", \"tool\", \"trident\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f531.png\"\n  },\n  {\n    emoji: \"\\u{1F4DB}\",\n    name: \"name_badge\",\n    shortcodes: [\"name_badge\"],\n    tags: [\"badge\", \"name\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4db.png\"\n  },\n  {\n    emoji: \"\\u{1F530}\",\n    name: \"beginner\",\n    shortcodes: [\"beginner\"],\n    tags: [\"beginner\", \"chevron\", \"japanese\", \"japanese symbol for beginner\", \"leaf\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f530.png\"\n  },\n  {\n    emoji: \"\\u2B55\",\n    name: \"o\",\n    shortcodes: [\"hollow_red_circle\", \"red_o\"],\n    tags: [\"circle\", \"large\", \"o\", \"red\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2b55.png\"\n  },\n  {\n    emoji: \"\\u2705\",\n    name: \"white_check_mark\",\n    shortcodes: [\"check_mark_button\", \"white_check_mark\"],\n    tags: [\"button\", \"check\", \"mark\", \"\\u2713\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2705.png\"\n  },\n  {\n    emoji: \"\\u2611\",\n    name: \"ballot_box_with_check\",\n    shortcodes: [\"ballot_box_with_check\"],\n    tags: [\"box\", \"check\", \"\\u2713\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2611-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2714\",\n    name: \"heavy_check_mark\",\n    shortcodes: [\"check_mark\", \"heavy_check_mark\"],\n    tags: [\"check\", \"mark\", \"\\u2713\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2714-fe0f.png\"\n  },\n  {\n    emoji: \"\\u274C\",\n    name: \"x\",\n    shortcodes: [\"cross_mark\", \"x\"],\n    tags: [\"cancel\", \"cross\", \"mark\", \"multiplication\", \"multiply\", \"x\", \"\\xD7\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/274c.png\"\n  },\n  {\n    emoji: \"\\u274E\",\n    name: \"negative_squared_cross_mark\",\n    shortcodes: [\"cross_mark_button\", \"negative_squared_cross_mark\"],\n    tags: [\"mark\", \"square\", \"x\", \"\\xD7\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/274e.png\"\n  },\n  {\n    emoji: \"\\u27B0\",\n    name: \"curly_loop\",\n    shortcodes: [\"curly_loop\"],\n    tags: [\"curl\", \"loop\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/27b0.png\"\n  },\n  {\n    emoji: \"\\u27BF\",\n    name: \"loop\",\n    shortcodes: [\"double_curly_loop\", \"loop\"],\n    tags: [\"curl\", \"double\", \"loop\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/27bf.png\"\n  },\n  {\n    emoji: \"\\u303D\",\n    name: \"part_alternation_mark\",\n    shortcodes: [\"part_alternation_mark\"],\n    tags: [\"mark\", \"part\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/303d-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2733\",\n    name: \"eight_spoked_asterisk\",\n    shortcodes: [\"eight_spoked_asterisk\"],\n    tags: [\"*\", \"asterisk\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2733-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2734\",\n    name: \"eight_pointed_black_star\",\n    shortcodes: [\"eight_pointed_black_star\"],\n    tags: [\"*\", \"star\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2734-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2747\",\n    name: \"sparkle\",\n    shortcodes: [\"sparkle\"],\n    tags: [\"*\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2747-fe0f.png\"\n  },\n  {\n    emoji: \"\\xA9\",\n    name: \"copyright\",\n    shortcodes: [\"copyright\"],\n    tags: [\"c\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/00a9-fe0f.png\"\n  },\n  {\n    emoji: \"\\xAE\",\n    name: \"registered\",\n    shortcodes: [\"registered\"],\n    tags: [\"r\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/00ae-fe0f.png\"\n  },\n  {\n    emoji: \"\\u2122\",\n    name: \"tm\",\n    shortcodes: [\"tm\", \"trade_mark\"],\n    tags: [\"mark\", \"tm\", \"trademark\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2122-fe0f.png\"\n  },\n  {\n    emoji: \"#\\u20E3\",\n    name: \"hash\",\n    shortcodes: [\"hash\", \"number_sign\"],\n    tags: [\"keycap\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/0023-fe0f-20e3.png\"\n  },\n  {\n    emoji: \"*\\u20E3\",\n    name: \"asterisk\",\n    shortcodes: [\"asterisk\"],\n    tags: [\"keycap\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/002a-fe0f-20e3.png\"\n  },\n  {\n    emoji: \"0\\u20E3\",\n    name: \"zero\",\n    shortcodes: [\"zero\"],\n    tags: [\"keycap\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/0030-fe0f-20e3.png\"\n  },\n  {\n    emoji: \"1\\u20E3\",\n    name: \"one\",\n    shortcodes: [\"one\"],\n    tags: [\"keycap\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/0031-fe0f-20e3.png\"\n  },\n  {\n    emoji: \"2\\u20E3\",\n    name: \"two\",\n    shortcodes: [\"two\"],\n    tags: [\"keycap\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/0032-fe0f-20e3.png\"\n  },\n  {\n    emoji: \"3\\u20E3\",\n    name: \"three\",\n    shortcodes: [\"three\"],\n    tags: [\"keycap\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/0033-fe0f-20e3.png\"\n  },\n  {\n    emoji: \"4\\u20E3\",\n    name: \"four\",\n    shortcodes: [\"four\"],\n    tags: [\"keycap\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/0034-fe0f-20e3.png\"\n  },\n  {\n    emoji: \"5\\u20E3\",\n    name: \"five\",\n    shortcodes: [\"five\"],\n    tags: [\"keycap\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/0035-fe0f-20e3.png\"\n  },\n  {\n    emoji: \"6\\u20E3\",\n    name: \"six\",\n    shortcodes: [\"six\"],\n    tags: [\"keycap\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/0036-fe0f-20e3.png\"\n  },\n  {\n    emoji: \"7\\u20E3\",\n    name: \"seven\",\n    shortcodes: [\"seven\"],\n    tags: [\"keycap\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/0037-fe0f-20e3.png\"\n  },\n  {\n    emoji: \"8\\u20E3\",\n    name: \"eight\",\n    shortcodes: [\"eight\"],\n    tags: [\"keycap\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/0038-fe0f-20e3.png\"\n  },\n  {\n    emoji: \"9\\u20E3\",\n    name: \"nine\",\n    shortcodes: [\"nine\"],\n    tags: [\"keycap\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/0039-fe0f-20e3.png\"\n  },\n  {\n    emoji: \"\\u{1F51F}\",\n    name: \"keycap_ten\",\n    shortcodes: [\"ten\"],\n    tags: [\"keycap\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f51f.png\"\n  },\n  {\n    emoji: \"\\u{1F520}\",\n    name: \"capital_abcd\",\n    shortcodes: [\"capital_abcd\"],\n    tags: [\"abcd\", \"input\", \"latin\", \"letters\", \"uppercase\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f520.png\"\n  },\n  {\n    emoji: \"\\u{1F521}\",\n    name: \"abcd\",\n    shortcodes: [\"abcd\"],\n    tags: [\"abcd\", \"input\", \"latin\", \"letters\", \"lowercase\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f521.png\"\n  },\n  {\n    emoji: \"\\u{1F522}\",\n    name: \"1234\",\n    shortcodes: [\"1234\"],\n    tags: [\"1234\", \"input\", \"numbers\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f522.png\"\n  },\n  {\n    emoji: \"\\u{1F523}\",\n    name: \"symbols\",\n    shortcodes: [\"symbols\"],\n    tags: [\"input\", \"\\u3012\\u266A&%\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f523.png\"\n  },\n  {\n    emoji: \"\\u{1F524}\",\n    name: \"abc\",\n    shortcodes: [\"abc\"],\n    tags: [\"abc\", \"alphabet\", \"input\", \"latin\", \"letters\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f524.png\"\n  },\n  {\n    emoji: \"\\u{1F170}\",\n    name: \"a\",\n    shortcodes: [\"a\", \"a_blood\"],\n    tags: [\"a\", \"a button (blood type)\", \"blood type\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f170-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F18E}\",\n    name: \"ab\",\n    shortcodes: [\"ab\", \"ab_blood\"],\n    tags: [\"ab\", \"ab button (blood type)\", \"blood type\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f18e.png\"\n  },\n  {\n    emoji: \"\\u{1F171}\",\n    name: \"b\",\n    shortcodes: [\"b\", \"b_blood\"],\n    tags: [\"b\", \"b button (blood type)\", \"blood type\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f171-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F191}\",\n    name: \"cl\",\n    shortcodes: [\"cl\"],\n    tags: [\"cl\", \"cl button\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f191.png\"\n  },\n  {\n    emoji: \"\\u{1F192}\",\n    name: \"cool\",\n    shortcodes: [\"cool\"],\n    tags: [\"cool\", \"cool button\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f192.png\"\n  },\n  {\n    emoji: \"\\u{1F193}\",\n    name: \"free\",\n    shortcodes: [\"free\"],\n    tags: [\"free\", \"free button\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f193.png\"\n  },\n  {\n    emoji: \"\\u2139\",\n    name: \"information_source\",\n    shortcodes: [\"info\", \"information_source\"],\n    tags: [\"i\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2139-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F194}\",\n    name: \"id\",\n    shortcodes: [\"id\"],\n    tags: [\"id\", \"id button\", \"identity\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f194.png\"\n  },\n  {\n    emoji: \"\\u24C2\",\n    name: \"m\",\n    shortcodes: [\"m\"],\n    tags: [\"circle\", \"circled m\", \"m\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/24c2-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F195}\",\n    name: \"new\",\n    shortcodes: [\"new\"],\n    tags: [\"new\", \"new button\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f195.png\"\n  },\n  {\n    emoji: \"\\u{1F196}\",\n    name: \"ng\",\n    shortcodes: [\"ng\"],\n    tags: [\"ng\", \"ng button\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f196.png\"\n  },\n  {\n    emoji: \"\\u{1F17E}\",\n    name: \"o2\",\n    shortcodes: [\"o\", \"o_blood\"],\n    tags: [\"blood type\", \"o\", \"o button (blood type)\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f17e-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F197}\",\n    name: \"ok\",\n    shortcodes: [\"ok\"],\n    tags: [\"ok\", \"ok button\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f197.png\"\n  },\n  {\n    emoji: \"\\u{1F17F}\",\n    name: \"parking\",\n    shortcodes: [\"parking\"],\n    tags: [\"p\", \"p button\", \"parking\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f17f-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F198}\",\n    name: \"sos\",\n    shortcodes: [\"sos\"],\n    tags: [\"help\", \"sos\", \"sos button\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f198.png\"\n  },\n  {\n    emoji: \"\\u{1F199}\",\n    name: \"up\",\n    shortcodes: [\"up2\"],\n    tags: [\"mark\", \"up\", \"up!\", \"up! button\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f199.png\"\n  },\n  {\n    emoji: \"\\u{1F19A}\",\n    name: \"vs\",\n    shortcodes: [\"vs\"],\n    tags: [\"versus\", \"vs\", \"vs button\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f19a.png\"\n  },\n  {\n    emoji: \"\\u{1F201}\",\n    name: \"koko\",\n    shortcodes: [\"ja_here\", \"koko\"],\n    tags: [\"japanese\", \"japanese \\u201Chere\\u201D button\", \"katakana\", \"\\u201Chere\\u201D\", \"\\u30B3\\u30B3\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f201.png\"\n  },\n  {\n    emoji: \"\\u{1F202}\",\n    name: \"sa\",\n    shortcodes: [\"ja_service_charge\"],\n    tags: [\"japanese\", \"japanese \\u201Cservice charge\\u201D button\", \"katakana\", \"\\u201Cservice charge\\u201D\", \"\\u30B5\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f202-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F237}\",\n    name: \"u6708\",\n    shortcodes: [\"ja_monthly_amount\"],\n    tags: [\"ideograph\", \"japanese\", \"japanese \\u201Cmonthly amount\\u201D button\", \"\\u201Cmonthly amount\\u201D\", \"\\u6708\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f237-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F236}\",\n    name: \"u6709\",\n    shortcodes: [\"ja_not_free_of_carge\"],\n    tags: [\"ideograph\", \"japanese\", \"japanese \\u201Cnot free of charge\\u201D button\", \"\\u201Cnot free of charge\\u201D\", \"\\u6709\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f236.png\"\n  },\n  {\n    emoji: \"\\u{1F22F}\",\n    name: \"u6307\",\n    shortcodes: [\"ja_reserved\"],\n    tags: [\"ideograph\", \"japanese\", \"japanese \\u201Creserved\\u201D button\", \"\\u201Creserved\\u201D\", \"\\u6307\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f22f.png\"\n  },\n  {\n    emoji: \"\\u{1F250}\",\n    name: \"ideograph_advantage\",\n    shortcodes: [\"ideograph_advantage\", \"ja_bargain\"],\n    tags: [\"ideograph\", \"japanese\", \"japanese \\u201Cbargain\\u201D button\", \"\\u201Cbargain\\u201D\", \"\\u5F97\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f250.png\"\n  },\n  {\n    emoji: \"\\u{1F239}\",\n    name: \"u5272\",\n    shortcodes: [\"ja_discount\"],\n    tags: [\"ideograph\", \"japanese\", \"japanese \\u201Cdiscount\\u201D button\", \"\\u201Cdiscount\\u201D\", \"\\u5272\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f239.png\"\n  },\n  {\n    emoji: \"\\u{1F21A}\",\n    name: \"u7121\",\n    shortcodes: [\"ja_free_of_charge\"],\n    tags: [\"ideograph\", \"japanese\", \"japanese \\u201Cfree of charge\\u201D button\", \"\\u201Cfree of charge\\u201D\", \"\\u7121\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f21a.png\"\n  },\n  {\n    emoji: \"\\u{1F232}\",\n    name: \"u7981\",\n    shortcodes: [\"ja_prohibited\"],\n    tags: [\"ideograph\", \"japanese\", \"japanese \\u201Cprohibited\\u201D button\", \"\\u201Cprohibited\\u201D\", \"\\u7981\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f232.png\"\n  },\n  {\n    emoji: \"\\u{1F251}\",\n    name: \"accept\",\n    shortcodes: [\"accept\", \"ja_acceptable\"],\n    tags: [\"ideograph\", \"japanese\", \"japanese \\u201Cacceptable\\u201D button\", \"\\u201Cacceptable\\u201D\", \"\\u53EF\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f251.png\"\n  },\n  {\n    emoji: \"\\u{1F238}\",\n    name: \"u7533\",\n    shortcodes: [\"ja_application\"],\n    tags: [\"ideograph\", \"japanese\", \"japanese \\u201Capplication\\u201D button\", \"\\u201Capplication\\u201D\", \"\\u7533\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f238.png\"\n  },\n  {\n    emoji: \"\\u{1F234}\",\n    name: \"u5408\",\n    shortcodes: [\"ja_passing_grade\"],\n    tags: [\"ideograph\", \"japanese\", \"japanese \\u201Cpassing grade\\u201D button\", \"\\u201Cpassing grade\\u201D\", \"\\u5408\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f234.png\"\n  },\n  {\n    emoji: \"\\u{1F233}\",\n    name: \"u7a7a\",\n    shortcodes: [\"ja_vacancy\"],\n    tags: [\"ideograph\", \"japanese\", \"japanese \\u201Cvacancy\\u201D button\", \"\\u201Cvacancy\\u201D\", \"\\u7A7A\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f233.png\"\n  },\n  {\n    emoji: \"\\u3297\",\n    name: \"congratulations\",\n    shortcodes: [\"congratulations\", \"ja_congratulations\"],\n    tags: [\"ideograph\", \"japanese\", \"japanese \\u201Ccongratulations\\u201D button\", \"\\u201Ccongratulations\\u201D\", \"\\u795D\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/3297-fe0f.png\"\n  },\n  {\n    emoji: \"\\u3299\",\n    name: \"secret\",\n    shortcodes: [\"ja_secret\", \"secret\"],\n    tags: [\"ideograph\", \"japanese\", \"japanese \\u201Csecret\\u201D button\", \"\\u201Csecret\\u201D\", \"\\u79D8\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/3299-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F23A}\",\n    name: \"u55b6\",\n    shortcodes: [\"ja_open_for_business\"],\n    tags: [\"ideograph\", \"japanese\", \"japanese \\u201Copen for business\\u201D button\", \"\\u201Copen for business\\u201D\", \"\\u55B6\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f23a.png\"\n  },\n  {\n    emoji: \"\\u{1F235}\",\n    name: \"u6e80\",\n    shortcodes: [\"ja_no_vacancy\"],\n    tags: [\"ideograph\", \"japanese\", \"japanese \\u201Cno vacancy\\u201D button\", \"\\u201Cno vacancy\\u201D\", \"\\u6E80\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f235.png\"\n  },\n  {\n    emoji: \"\\u{1F534}\",\n    name: \"red_circle\",\n    shortcodes: [\"red_circle\"],\n    tags: [\"circle\", \"geometric\", \"red\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f534.png\"\n  },\n  {\n    emoji: \"\\u{1F7E0}\",\n    name: \"orange_circle\",\n    shortcodes: [\"orange_circle\"],\n    tags: [\"circle\", \"orange\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f7e0.png\"\n  },\n  {\n    emoji: \"\\u{1F7E1}\",\n    name: \"yellow_circle\",\n    shortcodes: [\"yellow_circle\"],\n    tags: [\"circle\", \"yellow\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f7e1.png\"\n  },\n  {\n    emoji: \"\\u{1F7E2}\",\n    name: \"green_circle\",\n    shortcodes: [\"green_circle\"],\n    tags: [\"circle\", \"green\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f7e2.png\"\n  },\n  {\n    emoji: \"\\u{1F535}\",\n    name: \"large_blue_circle\",\n    shortcodes: [\"blue_circle\"],\n    tags: [\"blue\", \"circle\", \"geometric\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f535.png\"\n  },\n  {\n    emoji: \"\\u{1F7E3}\",\n    name: \"purple_circle\",\n    shortcodes: [\"purple_circle\"],\n    tags: [\"circle\", \"purple\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f7e3.png\"\n  },\n  {\n    emoji: \"\\u{1F7E4}\",\n    name: \"brown_circle\",\n    shortcodes: [\"brown_circle\"],\n    tags: [\"brown\", \"circle\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f7e4.png\"\n  },\n  {\n    emoji: \"\\u26AB\",\n    name: \"black_circle\",\n    shortcodes: [\"black_circle\"],\n    tags: [\"circle\", \"geometric\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26ab.png\"\n  },\n  {\n    emoji: \"\\u26AA\",\n    name: \"white_circle\",\n    shortcodes: [\"white_circle\"],\n    tags: [\"circle\", \"geometric\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/26aa.png\"\n  },\n  {\n    emoji: \"\\u{1F7E5}\",\n    name: \"red_square\",\n    shortcodes: [\"red_square\"],\n    tags: [\"red\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f7e5.png\"\n  },\n  {\n    emoji: \"\\u{1F7E7}\",\n    name: \"orange_square\",\n    shortcodes: [\"orange_square\"],\n    tags: [\"orange\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f7e7.png\"\n  },\n  {\n    emoji: \"\\u{1F7E8}\",\n    name: \"yellow_square\",\n    shortcodes: [\"yellow_square\"],\n    tags: [\"square\", \"yellow\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f7e8.png\"\n  },\n  {\n    emoji: \"\\u{1F7E9}\",\n    name: \"green_square\",\n    shortcodes: [\"green_square\"],\n    tags: [\"green\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f7e9.png\"\n  },\n  {\n    emoji: \"\\u{1F7E6}\",\n    name: \"blue_square\",\n    shortcodes: [\"blue_square\"],\n    tags: [\"blue\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f7e6.png\"\n  },\n  {\n    emoji: \"\\u{1F7EA}\",\n    name: \"purple_square\",\n    shortcodes: [\"purple_square\"],\n    tags: [\"purple\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f7ea.png\"\n  },\n  {\n    emoji: \"\\u{1F7EB}\",\n    name: \"brown_square\",\n    shortcodes: [\"brown_square\"],\n    tags: [\"brown\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 12,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f7eb.png\"\n  },\n  {\n    emoji: \"\\u2B1B\",\n    name: \"black_large_square\",\n    shortcodes: [\"black_large_square\"],\n    tags: [\"geometric\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2b1b.png\"\n  },\n  {\n    emoji: \"\\u2B1C\",\n    name: \"white_large_square\",\n    shortcodes: [\"white_large_square\"],\n    tags: [\"geometric\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/2b1c.png\"\n  },\n  {\n    emoji: \"\\u25FC\",\n    name: \"black_medium_square\",\n    shortcodes: [\"black_medium_square\"],\n    tags: [\"geometric\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/25fc-fe0f.png\"\n  },\n  {\n    emoji: \"\\u25FB\",\n    name: \"white_medium_square\",\n    shortcodes: [\"white_medium_square\"],\n    tags: [\"geometric\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/25fb-fe0f.png\"\n  },\n  {\n    emoji: \"\\u25FE\",\n    name: \"black_medium_small_square\",\n    shortcodes: [\"black_medium_small_square\"],\n    tags: [\"geometric\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/25fe.png\"\n  },\n  {\n    emoji: \"\\u25FD\",\n    name: \"white_medium_small_square\",\n    shortcodes: [\"white_medium_small_square\"],\n    tags: [\"geometric\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/25fd.png\"\n  },\n  {\n    emoji: \"\\u25AA\",\n    name: \"black_small_square\",\n    shortcodes: [\"black_small_square\"],\n    tags: [\"geometric\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/25aa-fe0f.png\"\n  },\n  {\n    emoji: \"\\u25AB\",\n    name: \"white_small_square\",\n    shortcodes: [\"white_small_square\"],\n    tags: [\"geometric\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/25ab-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F536}\",\n    name: \"large_orange_diamond\",\n    shortcodes: [\"large_orange_diamond\"],\n    tags: [\"diamond\", \"geometric\", \"orange\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f536.png\"\n  },\n  {\n    emoji: \"\\u{1F537}\",\n    name: \"large_blue_diamond\",\n    shortcodes: [\"large_blue_diamond\"],\n    tags: [\"blue\", \"diamond\", \"geometric\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f537.png\"\n  },\n  {\n    emoji: \"\\u{1F538}\",\n    name: \"small_orange_diamond\",\n    shortcodes: [\"small_orange_diamond\"],\n    tags: [\"diamond\", \"geometric\", \"orange\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f538.png\"\n  },\n  {\n    emoji: \"\\u{1F539}\",\n    name: \"small_blue_diamond\",\n    shortcodes: [\"small_blue_diamond\"],\n    tags: [\"blue\", \"diamond\", \"geometric\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f539.png\"\n  },\n  {\n    emoji: \"\\u{1F53A}\",\n    name: \"small_red_triangle\",\n    shortcodes: [\"small_red_triangle\"],\n    tags: [\"geometric\", \"red\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f53a.png\"\n  },\n  {\n    emoji: \"\\u{1F53B}\",\n    name: \"small_red_triangle_down\",\n    shortcodes: [\"small_red_triangle_down\"],\n    tags: [\"down\", \"geometric\", \"red\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f53b.png\"\n  },\n  {\n    emoji: \"\\u{1F4A0}\",\n    name: \"diamond_shape_with_a_dot_inside\",\n    shortcodes: [\"diamond_shape_with_a_dot_inside\", \"diamond_with_a_dot\"],\n    tags: [\"comic\", \"diamond\", \"geometric\", \"inside\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f4a0.png\"\n  },\n  {\n    emoji: \"\\u{1F518}\",\n    name: \"radio_button\",\n    shortcodes: [\"radio_button\"],\n    tags: [\"button\", \"geometric\", \"radio\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f518.png\"\n  },\n  {\n    emoji: \"\\u{1F533}\",\n    name: \"white_square_button\",\n    shortcodes: [\"white_square_button\"],\n    tags: [\"button\", \"geometric\", \"outlined\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f533.png\"\n  },\n  {\n    emoji: \"\\u{1F532}\",\n    name: \"black_square_button\",\n    shortcodes: [\"black_square_button\"],\n    tags: [\"button\", \"geometric\", \"square\"],\n    group: \"symbols\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f532.png\"\n  },\n  {\n    emoji: \"\\u{1F3C1}\",\n    name: \"checkered_flag\",\n    shortcodes: [\"checkered_flag\"],\n    tags: [\"checkered\", \"chequered\", \"racing\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3c1.png\"\n  },\n  {\n    emoji: \"\\u{1F6A9}\",\n    name: \"triangular_flag_on_post\",\n    shortcodes: [\"triangular_flag\", \"triangular_flag_on_post\"],\n    tags: [\"post\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f6a9.png\"\n  },\n  {\n    emoji: \"\\u{1F38C}\",\n    name: \"crossed_flags\",\n    shortcodes: [\"crossed_flags\"],\n    tags: [\"celebration\", \"cross\", \"crossed\", \"japanese\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f38c.png\"\n  },\n  {\n    emoji: \"\\u{1F3F4}\",\n    name: \"black_flag\",\n    shortcodes: [\"black_flag\"],\n    tags: [\"waving\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 1,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3f4.png\"\n  },\n  {\n    emoji: \"\\u{1F3F3}\",\n    name: \"white_flag\",\n    shortcodes: [\"white_flag\"],\n    tags: [\"waving\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 0.7,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3f3-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3F3}\\u200D\\u{1F308}\",\n    name: \"rainbow_flag\",\n    shortcodes: [\"rainbow_flag\"],\n    tags: [\"pride\", \"rainbow\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3f3-fe0f-200d-1f308.png\"\n  },\n  {\n    emoji: \"\\u{1F3F3}\\u200D\\u26A7\\uFE0F\",\n    name: \"transgender_flag\",\n    shortcodes: [\"transgender_flag\"],\n    tags: [\"flag\", \"light blue\", \"pink\", \"transgender\", \"white\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 13,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3f3-fe0f-200d-26a7-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F3F4}\\u200D\\u2620\",\n    name: \"pirate_flag\",\n    shortcodes: [\"jolly_roger\", \"pirate_flag\"],\n    tags: [\"jolly roger\", \"pirate\", \"plunder\", \"treasure\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 11,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3f4-200d-2620-fe0f.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1E8}\",\n    name: \"ascension_island\",\n    shortcodes: [\"ascension_island\", \"flag_ac\"],\n    tags: [\"AC\", \"flag\", \"flag: ascension island\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1e8.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1E9}\",\n    name: \"andorra\",\n    shortcodes: [\"andorra\", \"flag_ad\"],\n    tags: [\"AD\", \"flag\", \"flag: andorra\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1e9.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1EA}\",\n    name: \"united_arab_emirates\",\n    shortcodes: [\"flag_ae\", \"united_arab_emirates\"],\n    tags: [\"AE\", \"flag\", \"flag: united arab emirates\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1ea.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1EB}\",\n    name: \"afghanistan\",\n    shortcodes: [\"afghanistan\", \"flag_af\"],\n    tags: [\"AF\", \"flag\", \"flag: afghanistan\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1eb.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1EC}\",\n    name: \"antigua_barbuda\",\n    shortcodes: [\"antigua_barbuda\", \"flag_ag\"],\n    tags: [\"AG\", \"flag\", \"flag: antigua & barbuda\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1ec.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1EE}\",\n    name: \"anguilla\",\n    shortcodes: [\"anguilla\", \"flag_ai\"],\n    tags: [\"AI\", \"flag\", \"flag: anguilla\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1ee.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1F1}\",\n    name: \"albania\",\n    shortcodes: [\"albania\", \"flag_al\"],\n    tags: [\"AL\", \"flag\", \"flag: albania\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1f1.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1F2}\",\n    name: \"armenia\",\n    shortcodes: [\"armenia\", \"flag_am\"],\n    tags: [\"AM\", \"flag\", \"flag: armenia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1F4}\",\n    name: \"angola\",\n    shortcodes: [\"angola\", \"flag_ao\"],\n    tags: [\"AO\", \"flag\", \"flag: angola\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1f4.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1F6}\",\n    name: \"antarctica\",\n    shortcodes: [\"antarctica\", \"flag_aq\"],\n    tags: [\"AQ\", \"flag\", \"flag: antarctica\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1f6.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1F7}\",\n    name: \"argentina\",\n    shortcodes: [\"argentina\", \"flag_ar\"],\n    tags: [\"AR\", \"flag\", \"flag: argentina\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1f7.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1F8}\",\n    name: \"american_samoa\",\n    shortcodes: [\"american_samoa\", \"flag_as\"],\n    tags: [\"AS\", \"flag\", \"flag: american samoa\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1f8.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1F9}\",\n    name: \"austria\",\n    shortcodes: [\"austria\", \"flag_at\"],\n    tags: [\"AT\", \"flag\", \"flag: austria\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1f9.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1FA}\",\n    name: \"australia\",\n    shortcodes: [\"australia\", \"flag_au\"],\n    tags: [\"AU\", \"flag\", \"flag: australia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1fa.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1FC}\",\n    name: \"aruba\",\n    shortcodes: [\"aruba\", \"flag_aw\"],\n    tags: [\"AW\", \"flag\", \"flag: aruba\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1fc.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1FD}\",\n    name: \"aland_islands\",\n    shortcodes: [\"aland_islands\", \"flag_ax\"],\n    tags: [\"AX\", \"flag\", \"flag: \\xE5land islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1fd.png\"\n  },\n  {\n    emoji: \"\\u{1F1E6}\\u{1F1FF}\",\n    name: \"azerbaijan\",\n    shortcodes: [\"azerbaijan\", \"flag_az\"],\n    tags: [\"AZ\", \"flag\", \"flag: azerbaijan\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e6-1f1ff.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1E6}\",\n    name: \"bosnia_herzegovina\",\n    shortcodes: [\"bosnia_herzegovina\", \"flag_ba\"],\n    tags: [\"BA\", \"flag\", \"flag: bosnia & herzegovina\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1e6.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1E7}\",\n    name: \"barbados\",\n    shortcodes: [\"barbados\", \"flag_bb\"],\n    tags: [\"BB\", \"flag\", \"flag: barbados\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1e7.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1E9}\",\n    name: \"bangladesh\",\n    shortcodes: [\"bangladesh\", \"flag_bd\"],\n    tags: [\"BD\", \"flag\", \"flag: bangladesh\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1e9.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1EA}\",\n    name: \"belgium\",\n    shortcodes: [\"belgium\", \"flag_be\"],\n    tags: [\"BE\", \"flag\", \"flag: belgium\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1ea.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1EB}\",\n    name: \"burkina_faso\",\n    shortcodes: [\"burkina_faso\", \"flag_bf\"],\n    tags: [\"BF\", \"flag\", \"flag: burkina faso\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1eb.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1EC}\",\n    name: \"bulgaria\",\n    shortcodes: [\"bulgaria\", \"flag_bg\"],\n    tags: [\"BG\", \"flag\", \"flag: bulgaria\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1ec.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1ED}\",\n    name: \"bahrain\",\n    shortcodes: [\"bahrain\", \"flag_bh\"],\n    tags: [\"BH\", \"flag\", \"flag: bahrain\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1ed.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1EE}\",\n    name: \"burundi\",\n    shortcodes: [\"burundi\", \"flag_bi\"],\n    tags: [\"BI\", \"flag\", \"flag: burundi\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1ee.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1EF}\",\n    name: \"benin\",\n    shortcodes: [\"benin\", \"flag_bj\"],\n    tags: [\"BJ\", \"flag\", \"flag: benin\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1ef.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1F1}\",\n    name: \"st_barthelemy\",\n    shortcodes: [\"flag_bl\", \"st_barthelemy\"],\n    tags: [\"BL\", \"flag\", \"flag: st. barth\\xE9lemy\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1f1.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1F2}\",\n    name: \"bermuda\",\n    shortcodes: [\"bermuda\", \"flag_bm\"],\n    tags: [\"BM\", \"flag\", \"flag: bermuda\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1F3}\",\n    name: \"brunei\",\n    shortcodes: [\"brunei\", \"flag_bn\"],\n    tags: [\"BN\", \"flag\", \"flag: brunei\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1f3.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1F4}\",\n    name: \"bolivia\",\n    shortcodes: [\"bolivia\", \"flag_bo\"],\n    tags: [\"BO\", \"flag\", \"flag: bolivia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1f4.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1F6}\",\n    name: \"caribbean_netherlands\",\n    shortcodes: [\"caribbean_netherlands\", \"flag_bq\"],\n    tags: [\"BQ\", \"flag\", \"flag: caribbean netherlands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1f6.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1F7}\",\n    name: \"brazil\",\n    shortcodes: [\"brazil\", \"flag_br\"],\n    tags: [\"BR\", \"flag\", \"flag: brazil\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1f7.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1F8}\",\n    name: \"bahamas\",\n    shortcodes: [\"bahamas\", \"flag_bs\"],\n    tags: [\"BS\", \"flag\", \"flag: bahamas\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1f8.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1F9}\",\n    name: \"bhutan\",\n    shortcodes: [\"bhutan\", \"flag_bt\"],\n    tags: [\"BT\", \"flag\", \"flag: bhutan\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1f9.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1FB}\",\n    name: \"bouvet_island\",\n    shortcodes: [\"bouvet_island\", \"flag_bv\"],\n    tags: [\"BV\", \"flag\", \"flag: bouvet island\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1fb.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1FC}\",\n    name: \"botswana\",\n    shortcodes: [\"botswana\", \"flag_bw\"],\n    tags: [\"BW\", \"flag\", \"flag: botswana\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1fc.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1FE}\",\n    name: \"belarus\",\n    shortcodes: [\"belarus\", \"flag_by\"],\n    tags: [\"BY\", \"flag\", \"flag: belarus\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1fe.png\"\n  },\n  {\n    emoji: \"\\u{1F1E7}\\u{1F1FF}\",\n    name: \"belize\",\n    shortcodes: [\"belize\", \"flag_bz\"],\n    tags: [\"BZ\", \"flag\", \"flag: belize\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e7-1f1ff.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1E6}\",\n    name: \"canada\",\n    shortcodes: [\"canada\", \"flag_ca\"],\n    tags: [\"CA\", \"flag\", \"flag: canada\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1e6.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1E8}\",\n    name: \"cocos_islands\",\n    shortcodes: [\"cocos_islands\", \"flag_cc\"],\n    tags: [\"CC\", \"flag\", \"flag: cocos (keeling) islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1e8.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1E9}\",\n    name: \"congo_kinshasa\",\n    shortcodes: [\"congo_kinshasa\", \"flag_cd\"],\n    tags: [\"CD\", \"flag\", \"flag: congo - kinshasa\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1e9.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1EB}\",\n    name: \"central_african_republic\",\n    shortcodes: [\"central_african_republic\", \"flag_cf\"],\n    tags: [\"CF\", \"flag\", \"flag: central african republic\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1eb.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1EC}\",\n    name: \"congo_brazzaville\",\n    shortcodes: [\"congo_brazzaville\", \"flag_cg\"],\n    tags: [\"CG\", \"flag\", \"flag: congo - brazzaville\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1ec.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1ED}\",\n    name: \"switzerland\",\n    shortcodes: [\"flag_ch\", \"switzerland\"],\n    tags: [\"CH\", \"flag\", \"flag: switzerland\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1ed.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1EE}\",\n    name: \"cote_divoire\",\n    shortcodes: [\"cote_divoire\", \"flag_ci\"],\n    tags: [\"CI\", \"flag\", \"flag: c\\xF4te d\\u2019ivoire\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1ee.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1F0}\",\n    name: \"cook_islands\",\n    shortcodes: [\"cook_islands\", \"flag_ck\"],\n    tags: [\"CK\", \"flag\", \"flag: cook islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1f0.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1F1}\",\n    name: \"chile\",\n    shortcodes: [\"chile\", \"flag_cl\"],\n    tags: [\"CL\", \"flag\", \"flag: chile\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1f1.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1F2}\",\n    name: \"cameroon\",\n    shortcodes: [\"cameroon\", \"flag_cm\"],\n    tags: [\"CM\", \"flag\", \"flag: cameroon\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1F3}\",\n    name: \"cn\",\n    shortcodes: [\"china\", \"flag_cn\"],\n    tags: [\"CN\", \"flag\", \"flag: china\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1f3.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1F4}\",\n    name: \"colombia\",\n    shortcodes: [\"colombia\", \"flag_co\"],\n    tags: [\"CO\", \"flag\", \"flag: colombia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1f4.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1F5}\",\n    name: \"clipperton_island\",\n    shortcodes: [\"clipperton_island\", \"flag_cp\"],\n    tags: [\"CP\", \"flag\", \"flag: clipperton island\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1f5.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1F7}\",\n    name: \"costa_rica\",\n    shortcodes: [\"costa_rica\", \"flag_cr\"],\n    tags: [\"CR\", \"flag\", \"flag: costa rica\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1f7.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1FA}\",\n    name: \"cuba\",\n    shortcodes: [\"cuba\", \"flag_cu\"],\n    tags: [\"CU\", \"flag\", \"flag: cuba\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1fa.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1FB}\",\n    name: \"cape_verde\",\n    shortcodes: [\"cape_verde\", \"flag_cv\"],\n    tags: [\"CV\", \"flag\", \"flag: cape verde\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1fb.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1FC}\",\n    name: \"curacao\",\n    shortcodes: [\"curacao\", \"flag_cw\"],\n    tags: [\"CW\", \"flag\", \"flag: cura\\xE7ao\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1fc.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1FD}\",\n    name: \"christmas_island\",\n    shortcodes: [\"christmas_island\", \"flag_cx\"],\n    tags: [\"CX\", \"flag\", \"flag: christmas island\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1fd.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1FE}\",\n    name: \"cyprus\",\n    shortcodes: [\"cyprus\", \"flag_cy\"],\n    tags: [\"CY\", \"flag\", \"flag: cyprus\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1fe.png\"\n  },\n  {\n    emoji: \"\\u{1F1E8}\\u{1F1FF}\",\n    name: \"czech_republic\",\n    shortcodes: [\"czech_republic\", \"czechia\", \"flag_cz\"],\n    tags: [\"CZ\", \"flag\", \"flag: czechia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e8-1f1ff.png\"\n  },\n  {\n    emoji: \"\\u{1F1E9}\\u{1F1EA}\",\n    name: \"de\",\n    shortcodes: [\"flag_de\", \"germany\"],\n    tags: [\"DE\", \"flag\", \"flag: germany\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e9-1f1ea.png\"\n  },\n  {\n    emoji: \"\\u{1F1E9}\\u{1F1EC}\",\n    name: \"diego_garcia\",\n    shortcodes: [\"diego_garcia\", \"flag_dg\"],\n    tags: [\"DG\", \"flag\", \"flag: diego garcia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e9-1f1ec.png\"\n  },\n  {\n    emoji: \"\\u{1F1E9}\\u{1F1EF}\",\n    name: \"djibouti\",\n    shortcodes: [\"djibouti\", \"flag_dj\"],\n    tags: [\"DJ\", \"flag\", \"flag: djibouti\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e9-1f1ef.png\"\n  },\n  {\n    emoji: \"\\u{1F1E9}\\u{1F1F0}\",\n    name: \"denmark\",\n    shortcodes: [\"denmark\", \"flag_dk\"],\n    tags: [\"DK\", \"flag\", \"flag: denmark\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e9-1f1f0.png\"\n  },\n  {\n    emoji: \"\\u{1F1E9}\\u{1F1F2}\",\n    name: \"dominica\",\n    shortcodes: [\"dominica\", \"flag_dm\"],\n    tags: [\"DM\", \"flag\", \"flag: dominica\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e9-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1E9}\\u{1F1F4}\",\n    name: \"dominican_republic\",\n    shortcodes: [\"dominican_republic\", \"flag_do\"],\n    tags: [\"DO\", \"flag\", \"flag: dominican republic\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e9-1f1f4.png\"\n  },\n  {\n    emoji: \"\\u{1F1E9}\\u{1F1FF}\",\n    name: \"algeria\",\n    shortcodes: [\"algeria\", \"flag_dz\"],\n    tags: [\"DZ\", \"flag\", \"flag: algeria\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1e9-1f1ff.png\"\n  },\n  {\n    emoji: \"\\u{1F1EA}\\u{1F1E6}\",\n    name: \"ceuta_melilla\",\n    shortcodes: [\"ceuta_melilla\", \"flag_ea\"],\n    tags: [\"EA\", \"flag\", \"flag: ceuta & melilla\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ea-1f1e6.png\"\n  },\n  {\n    emoji: \"\\u{1F1EA}\\u{1F1E8}\",\n    name: \"ecuador\",\n    shortcodes: [\"ecuador\", \"flag_ec\"],\n    tags: [\"EC\", \"flag\", \"flag: ecuador\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ea-1f1e8.png\"\n  },\n  {\n    emoji: \"\\u{1F1EA}\\u{1F1EA}\",\n    name: \"estonia\",\n    shortcodes: [\"estonia\", \"flag_ee\"],\n    tags: [\"EE\", \"flag\", \"flag: estonia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ea-1f1ea.png\"\n  },\n  {\n    emoji: \"\\u{1F1EA}\\u{1F1EC}\",\n    name: \"egypt\",\n    shortcodes: [\"egypt\", \"flag_eg\"],\n    tags: [\"EG\", \"flag\", \"flag: egypt\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ea-1f1ec.png\"\n  },\n  {\n    emoji: \"\\u{1F1EA}\\u{1F1ED}\",\n    name: \"western_sahara\",\n    shortcodes: [\"flag_eh\", \"western_sahara\"],\n    tags: [\"EH\", \"flag\", \"flag: western sahara\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ea-1f1ed.png\"\n  },\n  {\n    emoji: \"\\u{1F1EA}\\u{1F1F7}\",\n    name: \"eritrea\",\n    shortcodes: [\"eritrea\", \"flag_er\"],\n    tags: [\"ER\", \"flag\", \"flag: eritrea\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ea-1f1f7.png\"\n  },\n  {\n    emoji: \"\\u{1F1EA}\\u{1F1F8}\",\n    name: \"es\",\n    shortcodes: [\"flag_es\", \"spain\"],\n    tags: [\"ES\", \"flag\", \"flag: spain\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ea-1f1f8.png\"\n  },\n  {\n    emoji: \"\\u{1F1EA}\\u{1F1F9}\",\n    name: \"ethiopia\",\n    shortcodes: [\"ethiopia\", \"flag_et\"],\n    tags: [\"ET\", \"flag\", \"flag: ethiopia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ea-1f1f9.png\"\n  },\n  {\n    emoji: \"\\u{1F1EA}\\u{1F1FA}\",\n    name: \"eu\",\n    shortcodes: [\"european_union\", \"flag_eu\"],\n    tags: [\"EU\", \"flag\", \"flag: european union\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ea-1f1fa.png\"\n  },\n  {\n    emoji: \"\\u{1F1EB}\\u{1F1EE}\",\n    name: \"finland\",\n    shortcodes: [\"finland\", \"flag_fi\"],\n    tags: [\"FI\", \"flag\", \"flag: finland\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1eb-1f1ee.png\"\n  },\n  {\n    emoji: \"\\u{1F1EB}\\u{1F1EF}\",\n    name: \"fiji\",\n    shortcodes: [\"fiji\", \"flag_fj\"],\n    tags: [\"FJ\", \"flag\", \"flag: fiji\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1eb-1f1ef.png\"\n  },\n  {\n    emoji: \"\\u{1F1EB}\\u{1F1F0}\",\n    name: \"falkland_islands\",\n    shortcodes: [\"falkland_islands\", \"flag_fk\"],\n    tags: [\"FK\", \"flag\", \"flag: falkland islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1eb-1f1f0.png\"\n  },\n  {\n    emoji: \"\\u{1F1EB}\\u{1F1F2}\",\n    name: \"micronesia\",\n    shortcodes: [\"flag_fm\", \"micronesia\"],\n    tags: [\"FM\", \"flag\", \"flag: micronesia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1eb-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1EB}\\u{1F1F4}\",\n    name: \"faroe_islands\",\n    shortcodes: [\"faroe_islands\", \"flag_fo\"],\n    tags: [\"FO\", \"flag\", \"flag: faroe islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1eb-1f1f4.png\"\n  },\n  {\n    emoji: \"\\u{1F1EB}\\u{1F1F7}\",\n    name: \"fr\",\n    shortcodes: [\"flag_fr\", \"france\"],\n    tags: [\"FR\", \"flag\", \"flag: france\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1eb-1f1f7.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1E6}\",\n    name: \"gabon\",\n    shortcodes: [\"flag_ga\", \"gabon\"],\n    tags: [\"GA\", \"flag\", \"flag: gabon\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1e6.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1E7}\",\n    name: \"gb\",\n    shortcodes: [\"flag_gb\", \"uk\", \"united_kingdom\"],\n    tags: [\"GB\", \"flag\", \"flag: united kingdom\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1e7.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1E9}\",\n    name: \"grenada\",\n    shortcodes: [\"flag_gd\", \"grenada\"],\n    tags: [\"GD\", \"flag\", \"flag: grenada\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1e9.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1EA}\",\n    name: \"georgia\",\n    shortcodes: [\"flag_ge\", \"georgia\"],\n    tags: [\"GE\", \"flag\", \"flag: georgia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1ea.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1EB}\",\n    name: \"french_guiana\",\n    shortcodes: [\"flag_gf\", \"french_guiana\"],\n    tags: [\"GF\", \"flag\", \"flag: french guiana\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1eb.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1EC}\",\n    name: \"guernsey\",\n    shortcodes: [\"flag_gg\", \"guernsey\"],\n    tags: [\"GG\", \"flag\", \"flag: guernsey\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1ec.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1ED}\",\n    name: \"ghana\",\n    shortcodes: [\"flag_gh\", \"ghana\"],\n    tags: [\"GH\", \"flag\", \"flag: ghana\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1ed.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1EE}\",\n    name: \"gibraltar\",\n    shortcodes: [\"flag_gi\", \"gibraltar\"],\n    tags: [\"GI\", \"flag\", \"flag: gibraltar\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1ee.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1F1}\",\n    name: \"greenland\",\n    shortcodes: [\"flag_gl\", \"greenland\"],\n    tags: [\"GL\", \"flag\", \"flag: greenland\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1f1.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1F2}\",\n    name: \"gambia\",\n    shortcodes: [\"flag_gm\", \"gambia\"],\n    tags: [\"GM\", \"flag\", \"flag: gambia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1F3}\",\n    name: \"guinea\",\n    shortcodes: [\"flag_gn\", \"guinea\"],\n    tags: [\"GN\", \"flag\", \"flag: guinea\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1f3.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1F5}\",\n    name: \"guadeloupe\",\n    shortcodes: [\"flag_gp\", \"guadeloupe\"],\n    tags: [\"GP\", \"flag\", \"flag: guadeloupe\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1f5.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1F6}\",\n    name: \"equatorial_guinea\",\n    shortcodes: [\"equatorial_guinea\", \"flag_gq\"],\n    tags: [\"GQ\", \"flag\", \"flag: equatorial guinea\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1f6.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1F7}\",\n    name: \"greece\",\n    shortcodes: [\"flag_gr\", \"greece\"],\n    tags: [\"GR\", \"flag\", \"flag: greece\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1f7.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1F8}\",\n    name: \"south_georgia_south_sandwich_islands\",\n    shortcodes: [\"flag_gs\", \"south_georgia_south_sandwich_islands\"],\n    tags: [\"GS\", \"flag\", \"flag: south georgia & south sandwich islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1f8.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1F9}\",\n    name: \"guatemala\",\n    shortcodes: [\"flag_gt\", \"guatemala\"],\n    tags: [\"GT\", \"flag\", \"flag: guatemala\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1f9.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1FA}\",\n    name: \"guam\",\n    shortcodes: [\"flag_gu\", \"guam\"],\n    tags: [\"GU\", \"flag\", \"flag: guam\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1fa.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1FC}\",\n    name: \"guinea_bissau\",\n    shortcodes: [\"flag_gw\", \"guinea_bissau\"],\n    tags: [\"GW\", \"flag\", \"flag: guinea-bissau\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1fc.png\"\n  },\n  {\n    emoji: \"\\u{1F1EC}\\u{1F1FE}\",\n    name: \"guyana\",\n    shortcodes: [\"flag_gy\", \"guyana\"],\n    tags: [\"GY\", \"flag\", \"flag: guyana\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ec-1f1fe.png\"\n  },\n  {\n    emoji: \"\\u{1F1ED}\\u{1F1F0}\",\n    name: \"hong_kong\",\n    shortcodes: [\"flag_hk\", \"hong_kong\"],\n    tags: [\"HK\", \"flag\", \"flag: hong kong sar china\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ed-1f1f0.png\"\n  },\n  {\n    emoji: \"\\u{1F1ED}\\u{1F1F2}\",\n    name: \"heard_mcdonald_islands\",\n    shortcodes: [\"flag_hm\", \"heard_mcdonald_islands\"],\n    tags: [\"HM\", \"flag\", \"flag: heard & mcdonald islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ed-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1ED}\\u{1F1F3}\",\n    name: \"honduras\",\n    shortcodes: [\"flag_hn\", \"honduras\"],\n    tags: [\"HN\", \"flag\", \"flag: honduras\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ed-1f1f3.png\"\n  },\n  {\n    emoji: \"\\u{1F1ED}\\u{1F1F7}\",\n    name: \"croatia\",\n    shortcodes: [\"croatia\", \"flag_hr\"],\n    tags: [\"HR\", \"flag\", \"flag: croatia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ed-1f1f7.png\"\n  },\n  {\n    emoji: \"\\u{1F1ED}\\u{1F1F9}\",\n    name: \"haiti\",\n    shortcodes: [\"flag_ht\", \"haiti\"],\n    tags: [\"HT\", \"flag\", \"flag: haiti\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ed-1f1f9.png\"\n  },\n  {\n    emoji: \"\\u{1F1ED}\\u{1F1FA}\",\n    name: \"hungary\",\n    shortcodes: [\"flag_hu\", \"hungary\"],\n    tags: [\"HU\", \"flag\", \"flag: hungary\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ed-1f1fa.png\"\n  },\n  {\n    emoji: \"\\u{1F1EE}\\u{1F1E8}\",\n    name: \"canary_islands\",\n    shortcodes: [\"canary_islands\", \"flag_ic\"],\n    tags: [\"IC\", \"flag\", \"flag: canary islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ee-1f1e8.png\"\n  },\n  {\n    emoji: \"\\u{1F1EE}\\u{1F1E9}\",\n    name: \"indonesia\",\n    shortcodes: [\"flag_id\", \"indonesia\"],\n    tags: [\"ID\", \"flag\", \"flag: indonesia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ee-1f1e9.png\"\n  },\n  {\n    emoji: \"\\u{1F1EE}\\u{1F1EA}\",\n    name: \"ireland\",\n    shortcodes: [\"flag_ie\", \"ireland\"],\n    tags: [\"IE\", \"flag\", \"flag: ireland\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ee-1f1ea.png\"\n  },\n  {\n    emoji: \"\\u{1F1EE}\\u{1F1F1}\",\n    name: \"israel\",\n    shortcodes: [\"flag_il\", \"israel\"],\n    tags: [\"IL\", \"flag\", \"flag: israel\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ee-1f1f1.png\"\n  },\n  {\n    emoji: \"\\u{1F1EE}\\u{1F1F2}\",\n    name: \"isle_of_man\",\n    shortcodes: [\"flag_im\", \"isle_of_man\"],\n    tags: [\"IM\", \"flag\", \"flag: isle of man\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ee-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1EE}\\u{1F1F3}\",\n    name: \"india\",\n    shortcodes: [\"flag_in\", \"india\"],\n    tags: [\"IN\", \"flag\", \"flag: india\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ee-1f1f3.png\"\n  },\n  {\n    emoji: \"\\u{1F1EE}\\u{1F1F4}\",\n    name: \"british_indian_ocean_territory\",\n    shortcodes: [\"british_indian_ocean_territory\", \"flag_io\"],\n    tags: [\"IO\", \"flag\", \"flag: british indian ocean territory\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ee-1f1f4.png\"\n  },\n  {\n    emoji: \"\\u{1F1EE}\\u{1F1F6}\",\n    name: \"iraq\",\n    shortcodes: [\"flag_iq\", \"iraq\"],\n    tags: [\"IQ\", \"flag\", \"flag: iraq\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ee-1f1f6.png\"\n  },\n  {\n    emoji: \"\\u{1F1EE}\\u{1F1F7}\",\n    name: \"iran\",\n    shortcodes: [\"flag_ir\", \"iran\"],\n    tags: [\"IR\", \"flag\", \"flag: iran\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ee-1f1f7.png\"\n  },\n  {\n    emoji: \"\\u{1F1EE}\\u{1F1F8}\",\n    name: \"iceland\",\n    shortcodes: [\"flag_is\", \"iceland\"],\n    tags: [\"IS\", \"flag\", \"flag: iceland\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ee-1f1f8.png\"\n  },\n  {\n    emoji: \"\\u{1F1EE}\\u{1F1F9}\",\n    name: \"it\",\n    shortcodes: [\"flag_it\", \"italy\"],\n    tags: [\"IT\", \"flag\", \"flag: italy\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ee-1f1f9.png\"\n  },\n  {\n    emoji: \"\\u{1F1EF}\\u{1F1EA}\",\n    name: \"jersey\",\n    shortcodes: [\"flag_je\", \"jersey\"],\n    tags: [\"JE\", \"flag\", \"flag: jersey\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ef-1f1ea.png\"\n  },\n  {\n    emoji: \"\\u{1F1EF}\\u{1F1F2}\",\n    name: \"jamaica\",\n    shortcodes: [\"flag_jm\", \"jamaica\"],\n    tags: [\"JM\", \"flag\", \"flag: jamaica\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ef-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1EF}\\u{1F1F4}\",\n    name: \"jordan\",\n    shortcodes: [\"flag_jo\", \"jordan\"],\n    tags: [\"JO\", \"flag\", \"flag: jordan\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ef-1f1f4.png\"\n  },\n  {\n    emoji: \"\\u{1F1EF}\\u{1F1F5}\",\n    name: \"jp\",\n    shortcodes: [\"flag_jp\", \"japan\"],\n    tags: [\"JP\", \"flag\", \"flag: japan\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ef-1f1f5.png\"\n  },\n  {\n    emoji: \"\\u{1F1F0}\\u{1F1EA}\",\n    name: \"kenya\",\n    shortcodes: [\"flag_ke\", \"kenya\"],\n    tags: [\"KE\", \"flag\", \"flag: kenya\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f0-1f1ea.png\"\n  },\n  {\n    emoji: \"\\u{1F1F0}\\u{1F1EC}\",\n    name: \"kyrgyzstan\",\n    shortcodes: [\"flag_kg\", \"kyrgyzstan\"],\n    tags: [\"KG\", \"flag\", \"flag: kyrgyzstan\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f0-1f1ec.png\"\n  },\n  {\n    emoji: \"\\u{1F1F0}\\u{1F1ED}\",\n    name: \"cambodia\",\n    shortcodes: [\"cambodia\", \"flag_kh\"],\n    tags: [\"KH\", \"flag\", \"flag: cambodia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f0-1f1ed.png\"\n  },\n  {\n    emoji: \"\\u{1F1F0}\\u{1F1EE}\",\n    name: \"kiribati\",\n    shortcodes: [\"flag_ki\", \"kiribati\"],\n    tags: [\"KI\", \"flag\", \"flag: kiribati\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f0-1f1ee.png\"\n  },\n  {\n    emoji: \"\\u{1F1F0}\\u{1F1F2}\",\n    name: \"comoros\",\n    shortcodes: [\"comoros\", \"flag_km\"],\n    tags: [\"KM\", \"flag\", \"flag: comoros\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f0-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1F0}\\u{1F1F3}\",\n    name: \"st_kitts_nevis\",\n    shortcodes: [\"flag_kn\", \"st_kitts_nevis\"],\n    tags: [\"KN\", \"flag\", \"flag: st. kitts & nevis\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f0-1f1f3.png\"\n  },\n  {\n    emoji: \"\\u{1F1F0}\\u{1F1F5}\",\n    name: \"north_korea\",\n    shortcodes: [\"flag_kp\", \"north_korea\"],\n    tags: [\"KP\", \"flag\", \"flag: north korea\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f0-1f1f5.png\"\n  },\n  {\n    emoji: \"\\u{1F1F0}\\u{1F1F7}\",\n    name: \"kr\",\n    shortcodes: [\"flag_kr\", \"south_korea\"],\n    tags: [\"KR\", \"flag\", \"flag: south korea\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f0-1f1f7.png\"\n  },\n  {\n    emoji: \"\\u{1F1F0}\\u{1F1FC}\",\n    name: \"kuwait\",\n    shortcodes: [\"flag_kw\", \"kuwait\"],\n    tags: [\"KW\", \"flag\", \"flag: kuwait\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f0-1f1fc.png\"\n  },\n  {\n    emoji: \"\\u{1F1F0}\\u{1F1FE}\",\n    name: \"cayman_islands\",\n    shortcodes: [\"cayman_islands\", \"flag_ky\"],\n    tags: [\"KY\", \"flag\", \"flag: cayman islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f0-1f1fe.png\"\n  },\n  {\n    emoji: \"\\u{1F1F0}\\u{1F1FF}\",\n    name: \"kazakhstan\",\n    shortcodes: [\"flag_kz\", \"kazakhstan\"],\n    tags: [\"KZ\", \"flag\", \"flag: kazakhstan\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f0-1f1ff.png\"\n  },\n  {\n    emoji: \"\\u{1F1F1}\\u{1F1E6}\",\n    name: \"laos\",\n    shortcodes: [\"flag_la\", \"laos\"],\n    tags: [\"LA\", \"flag\", \"flag: laos\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f1-1f1e6.png\"\n  },\n  {\n    emoji: \"\\u{1F1F1}\\u{1F1E7}\",\n    name: \"lebanon\",\n    shortcodes: [\"flag_lb\", \"lebanon\"],\n    tags: [\"LB\", \"flag\", \"flag: lebanon\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f1-1f1e7.png\"\n  },\n  {\n    emoji: \"\\u{1F1F1}\\u{1F1E8}\",\n    name: \"st_lucia\",\n    shortcodes: [\"flag_lc\", \"st_lucia\"],\n    tags: [\"LC\", \"flag\", \"flag: st. lucia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f1-1f1e8.png\"\n  },\n  {\n    emoji: \"\\u{1F1F1}\\u{1F1EE}\",\n    name: \"liechtenstein\",\n    shortcodes: [\"flag_li\", \"liechtenstein\"],\n    tags: [\"LI\", \"flag\", \"flag: liechtenstein\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f1-1f1ee.png\"\n  },\n  {\n    emoji: \"\\u{1F1F1}\\u{1F1F0}\",\n    name: \"sri_lanka\",\n    shortcodes: [\"flag_lk\", \"sri_lanka\"],\n    tags: [\"LK\", \"flag\", \"flag: sri lanka\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f1-1f1f0.png\"\n  },\n  {\n    emoji: \"\\u{1F1F1}\\u{1F1F7}\",\n    name: \"liberia\",\n    shortcodes: [\"flag_lr\", \"liberia\"],\n    tags: [\"LR\", \"flag\", \"flag: liberia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f1-1f1f7.png\"\n  },\n  {\n    emoji: \"\\u{1F1F1}\\u{1F1F8}\",\n    name: \"lesotho\",\n    shortcodes: [\"flag_ls\", \"lesotho\"],\n    tags: [\"LS\", \"flag\", \"flag: lesotho\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f1-1f1f8.png\"\n  },\n  {\n    emoji: \"\\u{1F1F1}\\u{1F1F9}\",\n    name: \"lithuania\",\n    shortcodes: [\"flag_lt\", \"lithuania\"],\n    tags: [\"LT\", \"flag\", \"flag: lithuania\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f1-1f1f9.png\"\n  },\n  {\n    emoji: \"\\u{1F1F1}\\u{1F1FA}\",\n    name: \"luxembourg\",\n    shortcodes: [\"flag_lu\", \"luxembourg\"],\n    tags: [\"LU\", \"flag\", \"flag: luxembourg\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f1-1f1fa.png\"\n  },\n  {\n    emoji: \"\\u{1F1F1}\\u{1F1FB}\",\n    name: \"latvia\",\n    shortcodes: [\"flag_lv\", \"latvia\"],\n    tags: [\"LV\", \"flag\", \"flag: latvia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f1-1f1fb.png\"\n  },\n  {\n    emoji: \"\\u{1F1F1}\\u{1F1FE}\",\n    name: \"libya\",\n    shortcodes: [\"flag_ly\", \"libya\"],\n    tags: [\"LY\", \"flag\", \"flag: libya\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f1-1f1fe.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1E6}\",\n    name: \"morocco\",\n    shortcodes: [\"flag_ma\", \"morocco\"],\n    tags: [\"MA\", \"flag\", \"flag: morocco\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1e6.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1E8}\",\n    name: \"monaco\",\n    shortcodes: [\"flag_mc\", \"monaco\"],\n    tags: [\"MC\", \"flag\", \"flag: monaco\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1e8.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1E9}\",\n    name: \"moldova\",\n    shortcodes: [\"flag_md\", \"moldova\"],\n    tags: [\"MD\", \"flag\", \"flag: moldova\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1e9.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1EA}\",\n    name: \"montenegro\",\n    shortcodes: [\"flag_me\", \"montenegro\"],\n    tags: [\"ME\", \"flag\", \"flag: montenegro\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1ea.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1EB}\",\n    name: \"st_martin\",\n    shortcodes: [\"flag_mf\", \"st_martin\"],\n    tags: [\"MF\", \"flag\", \"flag: st. martin\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1eb.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1EC}\",\n    name: \"madagascar\",\n    shortcodes: [\"flag_mg\", \"madagascar\"],\n    tags: [\"MG\", \"flag\", \"flag: madagascar\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1ec.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1ED}\",\n    name: \"marshall_islands\",\n    shortcodes: [\"flag_mh\", \"marshall_islands\"],\n    tags: [\"MH\", \"flag\", \"flag: marshall islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1ed.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1F0}\",\n    name: \"macedonia\",\n    shortcodes: [\"flag_mk\", \"macedonia\"],\n    tags: [\"MK\", \"flag\", \"flag: north macedonia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1f0.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1F1}\",\n    name: \"mali\",\n    shortcodes: [\"flag_ml\", \"mali\"],\n    tags: [\"ML\", \"flag\", \"flag: mali\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1f1.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1F2}\",\n    name: \"myanmar\",\n    shortcodes: [\"burma\", \"flag_mm\", \"myanmar\"],\n    tags: [\"MM\", \"flag\", \"flag: myanmar (burma)\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1F3}\",\n    name: \"mongolia\",\n    shortcodes: [\"flag_mn\", \"mongolia\"],\n    tags: [\"MN\", \"flag\", \"flag: mongolia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1f3.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1F4}\",\n    name: \"macau\",\n    shortcodes: [\"flag_mo\", \"macao\", \"macau\"],\n    tags: [\"MO\", \"flag\", \"flag: macao sar china\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1f4.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1F5}\",\n    name: \"northern_mariana_islands\",\n    shortcodes: [\"flag_mp\", \"northern_mariana_islands\"],\n    tags: [\"MP\", \"flag\", \"flag: northern mariana islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1f5.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1F6}\",\n    name: \"martinique\",\n    shortcodes: [\"flag_mq\", \"martinique\"],\n    tags: [\"MQ\", \"flag\", \"flag: martinique\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1f6.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1F7}\",\n    name: \"mauritania\",\n    shortcodes: [\"flag_mr\", \"mauritania\"],\n    tags: [\"MR\", \"flag\", \"flag: mauritania\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1f7.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1F8}\",\n    name: \"montserrat\",\n    shortcodes: [\"flag_ms\", \"montserrat\"],\n    tags: [\"MS\", \"flag\", \"flag: montserrat\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1f8.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1F9}\",\n    name: \"malta\",\n    shortcodes: [\"flag_mt\", \"malta\"],\n    tags: [\"MT\", \"flag\", \"flag: malta\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1f9.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1FA}\",\n    name: \"mauritius\",\n    shortcodes: [\"flag_mu\", \"mauritius\"],\n    tags: [\"MU\", \"flag\", \"flag: mauritius\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1fa.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1FB}\",\n    name: \"maldives\",\n    shortcodes: [\"flag_mv\", \"maldives\"],\n    tags: [\"MV\", \"flag\", \"flag: maldives\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1fb.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1FC}\",\n    name: \"malawi\",\n    shortcodes: [\"flag_mw\", \"malawi\"],\n    tags: [\"MW\", \"flag\", \"flag: malawi\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1fc.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1FD}\",\n    name: \"mexico\",\n    shortcodes: [\"flag_mx\", \"mexico\"],\n    tags: [\"MX\", \"flag\", \"flag: mexico\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1fd.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1FE}\",\n    name: \"malaysia\",\n    shortcodes: [\"flag_my\", \"malaysia\"],\n    tags: [\"MY\", \"flag\", \"flag: malaysia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1fe.png\"\n  },\n  {\n    emoji: \"\\u{1F1F2}\\u{1F1FF}\",\n    name: \"mozambique\",\n    shortcodes: [\"flag_mz\", \"mozambique\"],\n    tags: [\"MZ\", \"flag\", \"flag: mozambique\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f2-1f1ff.png\"\n  },\n  {\n    emoji: \"\\u{1F1F3}\\u{1F1E6}\",\n    name: \"namibia\",\n    shortcodes: [\"flag_na\", \"namibia\"],\n    tags: [\"NA\", \"flag\", \"flag: namibia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f3-1f1e6.png\"\n  },\n  {\n    emoji: \"\\u{1F1F3}\\u{1F1E8}\",\n    name: \"new_caledonia\",\n    shortcodes: [\"flag_nc\", \"new_caledonia\"],\n    tags: [\"NC\", \"flag\", \"flag: new caledonia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f3-1f1e8.png\"\n  },\n  {\n    emoji: \"\\u{1F1F3}\\u{1F1EA}\",\n    name: \"niger\",\n    shortcodes: [\"flag_ne\", \"niger\"],\n    tags: [\"NE\", \"flag\", \"flag: niger\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f3-1f1ea.png\"\n  },\n  {\n    emoji: \"\\u{1F1F3}\\u{1F1EB}\",\n    name: \"norfolk_island\",\n    shortcodes: [\"flag_nf\", \"norfolk_island\"],\n    tags: [\"NF\", \"flag\", \"flag: norfolk island\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f3-1f1eb.png\"\n  },\n  {\n    emoji: \"\\u{1F1F3}\\u{1F1EC}\",\n    name: \"nigeria\",\n    shortcodes: [\"flag_ng\", \"nigeria\"],\n    tags: [\"NG\", \"flag\", \"flag: nigeria\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f3-1f1ec.png\"\n  },\n  {\n    emoji: \"\\u{1F1F3}\\u{1F1EE}\",\n    name: \"nicaragua\",\n    shortcodes: [\"flag_ni\", \"nicaragua\"],\n    tags: [\"NI\", \"flag\", \"flag: nicaragua\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f3-1f1ee.png\"\n  },\n  {\n    emoji: \"\\u{1F1F3}\\u{1F1F1}\",\n    name: \"netherlands\",\n    shortcodes: [\"flag_nl\", \"netherlands\"],\n    tags: [\"NL\", \"flag\", \"flag: netherlands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f3-1f1f1.png\"\n  },\n  {\n    emoji: \"\\u{1F1F3}\\u{1F1F4}\",\n    name: \"norway\",\n    shortcodes: [\"flag_no\", \"norway\"],\n    tags: [\"NO\", \"flag\", \"flag: norway\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f3-1f1f4.png\"\n  },\n  {\n    emoji: \"\\u{1F1F3}\\u{1F1F5}\",\n    name: \"nepal\",\n    shortcodes: [\"flag_np\", \"nepal\"],\n    tags: [\"NP\", \"flag\", \"flag: nepal\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f3-1f1f5.png\"\n  },\n  {\n    emoji: \"\\u{1F1F3}\\u{1F1F7}\",\n    name: \"nauru\",\n    shortcodes: [\"flag_nr\", \"nauru\"],\n    tags: [\"NR\", \"flag\", \"flag: nauru\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f3-1f1f7.png\"\n  },\n  {\n    emoji: \"\\u{1F1F3}\\u{1F1FA}\",\n    name: \"niue\",\n    shortcodes: [\"flag_nu\", \"niue\"],\n    tags: [\"NU\", \"flag\", \"flag: niue\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f3-1f1fa.png\"\n  },\n  {\n    emoji: \"\\u{1F1F3}\\u{1F1FF}\",\n    name: \"new_zealand\",\n    shortcodes: [\"flag_nz\", \"new_zealand\"],\n    tags: [\"NZ\", \"flag\", \"flag: new zealand\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f3-1f1ff.png\"\n  },\n  {\n    emoji: \"\\u{1F1F4}\\u{1F1F2}\",\n    name: \"oman\",\n    shortcodes: [\"flag_om\", \"oman\"],\n    tags: [\"OM\", \"flag\", \"flag: oman\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f4-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1F5}\\u{1F1E6}\",\n    name: \"panama\",\n    shortcodes: [\"flag_pa\", \"panama\"],\n    tags: [\"PA\", \"flag\", \"flag: panama\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f5-1f1e6.png\"\n  },\n  {\n    emoji: \"\\u{1F1F5}\\u{1F1EA}\",\n    name: \"peru\",\n    shortcodes: [\"flag_pe\", \"peru\"],\n    tags: [\"PE\", \"flag\", \"flag: peru\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f5-1f1ea.png\"\n  },\n  {\n    emoji: \"\\u{1F1F5}\\u{1F1EB}\",\n    name: \"french_polynesia\",\n    shortcodes: [\"flag_pf\", \"french_polynesia\"],\n    tags: [\"PF\", \"flag\", \"flag: french polynesia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f5-1f1eb.png\"\n  },\n  {\n    emoji: \"\\u{1F1F5}\\u{1F1EC}\",\n    name: \"papua_new_guinea\",\n    shortcodes: [\"flag_pg\", \"papua_new_guinea\"],\n    tags: [\"PG\", \"flag\", \"flag: papua new guinea\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f5-1f1ec.png\"\n  },\n  {\n    emoji: \"\\u{1F1F5}\\u{1F1ED}\",\n    name: \"philippines\",\n    shortcodes: [\"flag_ph\", \"philippines\"],\n    tags: [\"PH\", \"flag\", \"flag: philippines\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f5-1f1ed.png\"\n  },\n  {\n    emoji: \"\\u{1F1F5}\\u{1F1F0}\",\n    name: \"pakistan\",\n    shortcodes: [\"flag_pk\", \"pakistan\"],\n    tags: [\"PK\", \"flag\", \"flag: pakistan\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f5-1f1f0.png\"\n  },\n  {\n    emoji: \"\\u{1F1F5}\\u{1F1F1}\",\n    name: \"poland\",\n    shortcodes: [\"flag_pl\", \"poland\"],\n    tags: [\"PL\", \"flag\", \"flag: poland\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f5-1f1f1.png\"\n  },\n  {\n    emoji: \"\\u{1F1F5}\\u{1F1F2}\",\n    name: \"st_pierre_miquelon\",\n    shortcodes: [\"flag_pm\", \"st_pierre_miquelon\"],\n    tags: [\"PM\", \"flag\", \"flag: st. pierre & miquelon\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f5-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1F5}\\u{1F1F3}\",\n    name: \"pitcairn_islands\",\n    shortcodes: [\"flag_pn\", \"pitcairn_islands\"],\n    tags: [\"PN\", \"flag\", \"flag: pitcairn islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f5-1f1f3.png\"\n  },\n  {\n    emoji: \"\\u{1F1F5}\\u{1F1F7}\",\n    name: \"puerto_rico\",\n    shortcodes: [\"flag_pr\", \"puerto_rico\"],\n    tags: [\"PR\", \"flag\", \"flag: puerto rico\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f5-1f1f7.png\"\n  },\n  {\n    emoji: \"\\u{1F1F5}\\u{1F1F8}\",\n    name: \"palestinian_territories\",\n    shortcodes: [\"flag_ps\", \"palestinian_territories\"],\n    tags: [\"PS\", \"flag\", \"flag: palestinian territories\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f5-1f1f8.png\"\n  },\n  {\n    emoji: \"\\u{1F1F5}\\u{1F1F9}\",\n    name: \"portugal\",\n    shortcodes: [\"flag_pt\", \"portugal\"],\n    tags: [\"PT\", \"flag\", \"flag: portugal\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f5-1f1f9.png\"\n  },\n  {\n    emoji: \"\\u{1F1F5}\\u{1F1FC}\",\n    name: \"palau\",\n    shortcodes: [\"flag_pw\", \"palau\"],\n    tags: [\"PW\", \"flag\", \"flag: palau\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f5-1f1fc.png\"\n  },\n  {\n    emoji: \"\\u{1F1F5}\\u{1F1FE}\",\n    name: \"paraguay\",\n    shortcodes: [\"flag_py\", \"paraguay\"],\n    tags: [\"PY\", \"flag\", \"flag: paraguay\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f5-1f1fe.png\"\n  },\n  {\n    emoji: \"\\u{1F1F6}\\u{1F1E6}\",\n    name: \"qatar\",\n    shortcodes: [\"flag_qa\", \"qatar\"],\n    tags: [\"QA\", \"flag\", \"flag: qatar\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f6-1f1e6.png\"\n  },\n  {\n    emoji: \"\\u{1F1F7}\\u{1F1EA}\",\n    name: \"reunion\",\n    shortcodes: [\"flag_re\", \"reunion\"],\n    tags: [\"RE\", \"flag\", \"flag: r\\xE9union\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f7-1f1ea.png\"\n  },\n  {\n    emoji: \"\\u{1F1F7}\\u{1F1F4}\",\n    name: \"romania\",\n    shortcodes: [\"flag_ro\", \"romania\"],\n    tags: [\"RO\", \"flag\", \"flag: romania\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f7-1f1f4.png\"\n  },\n  {\n    emoji: \"\\u{1F1F7}\\u{1F1F8}\",\n    name: \"serbia\",\n    shortcodes: [\"flag_rs\", \"serbia\"],\n    tags: [\"RS\", \"flag\", \"flag: serbia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f7-1f1f8.png\"\n  },\n  {\n    emoji: \"\\u{1F1F7}\\u{1F1FA}\",\n    name: \"ru\",\n    shortcodes: [\"flag_ru\", \"russia\"],\n    tags: [\"RU\", \"flag\", \"flag: russia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f7-1f1fa.png\"\n  },\n  {\n    emoji: \"\\u{1F1F7}\\u{1F1FC}\",\n    name: \"rwanda\",\n    shortcodes: [\"flag_rw\", \"rwanda\"],\n    tags: [\"RW\", \"flag\", \"flag: rwanda\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f7-1f1fc.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1E6}\",\n    name: \"saudi_arabia\",\n    shortcodes: [\"flag_sa\", \"saudi_arabia\"],\n    tags: [\"SA\", \"flag\", \"flag: saudi arabia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1e6.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1E7}\",\n    name: \"solomon_islands\",\n    shortcodes: [\"flag_sb\", \"solomon_islands\"],\n    tags: [\"SB\", \"flag\", \"flag: solomon islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1e7.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1E8}\",\n    name: \"seychelles\",\n    shortcodes: [\"flag_sc\", \"seychelles\"],\n    tags: [\"SC\", \"flag\", \"flag: seychelles\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1e8.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1E9}\",\n    name: \"sudan\",\n    shortcodes: [\"flag_sd\", \"sudan\"],\n    tags: [\"SD\", \"flag\", \"flag: sudan\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1e9.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1EA}\",\n    name: \"sweden\",\n    shortcodes: [\"flag_se\", \"sweden\"],\n    tags: [\"SE\", \"flag\", \"flag: sweden\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1ea.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1EC}\",\n    name: \"singapore\",\n    shortcodes: [\"flag_sg\", \"singapore\"],\n    tags: [\"SG\", \"flag\", \"flag: singapore\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1ec.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1ED}\",\n    name: \"st_helena\",\n    shortcodes: [\"flag_sh\", \"st_helena\"],\n    tags: [\"SH\", \"flag\", \"flag: st. helena\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1ed.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1EE}\",\n    name: \"slovenia\",\n    shortcodes: [\"flag_si\", \"slovenia\"],\n    tags: [\"SI\", \"flag\", \"flag: slovenia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1ee.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1EF}\",\n    name: \"svalbard_jan_mayen\",\n    shortcodes: [\"flag_sj\", \"svalbard_jan_mayen\"],\n    tags: [\"SJ\", \"flag\", \"flag: svalbard & jan mayen\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1ef.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1F0}\",\n    name: \"slovakia\",\n    shortcodes: [\"flag_sk\", \"slovakia\"],\n    tags: [\"SK\", \"flag\", \"flag: slovakia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1f0.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1F1}\",\n    name: \"sierra_leone\",\n    shortcodes: [\"flag_sl\", \"sierra_leone\"],\n    tags: [\"SL\", \"flag\", \"flag: sierra leone\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1f1.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1F2}\",\n    name: \"san_marino\",\n    shortcodes: [\"flag_sm\", \"san_marino\"],\n    tags: [\"SM\", \"flag\", \"flag: san marino\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1F3}\",\n    name: \"senegal\",\n    shortcodes: [\"flag_sn\", \"senegal\"],\n    tags: [\"SN\", \"flag\", \"flag: senegal\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1f3.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1F4}\",\n    name: \"somalia\",\n    shortcodes: [\"flag_so\", \"somalia\"],\n    tags: [\"SO\", \"flag\", \"flag: somalia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1f4.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1F7}\",\n    name: \"suriname\",\n    shortcodes: [\"flag_sr\", \"suriname\"],\n    tags: [\"SR\", \"flag\", \"flag: suriname\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1f7.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1F8}\",\n    name: \"south_sudan\",\n    shortcodes: [\"flag_ss\", \"south_sudan\"],\n    tags: [\"SS\", \"flag\", \"flag: south sudan\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1f8.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1F9}\",\n    name: \"sao_tome_principe\",\n    shortcodes: [\"flag_st\", \"sao_tome_principe\"],\n    tags: [\"ST\", \"flag\", \"flag: s\\xE3o tom\\xE9 & pr\\xEDncipe\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1f9.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1FB}\",\n    name: \"el_salvador\",\n    shortcodes: [\"el_salvador\", \"flag_sv\"],\n    tags: [\"SV\", \"flag\", \"flag: el salvador\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1fb.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1FD}\",\n    name: \"sint_maarten\",\n    shortcodes: [\"flag_sx\", \"sint_maarten\"],\n    tags: [\"SX\", \"flag\", \"flag: sint maarten\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1fd.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1FE}\",\n    name: \"syria\",\n    shortcodes: [\"flag_sy\", \"syria\"],\n    tags: [\"SY\", \"flag\", \"flag: syria\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1fe.png\"\n  },\n  {\n    emoji: \"\\u{1F1F8}\\u{1F1FF}\",\n    name: \"swaziland\",\n    shortcodes: [\"eswatini\", \"flag_sz\", \"swaziland\"],\n    tags: [\"SZ\", \"flag\", \"flag: eswatini\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f8-1f1ff.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1E6}\",\n    name: \"tristan_da_cunha\",\n    shortcodes: [\"flag_ta\", \"tristan_da_cunha\"],\n    tags: [\"TA\", \"flag\", \"flag: tristan da cunha\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1e6.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1E8}\",\n    name: \"turks_caicos_islands\",\n    shortcodes: [\"flag_tc\", \"turks_caicos_islands\"],\n    tags: [\"TC\", \"flag\", \"flag: turks & caicos islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1e8.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1E9}\",\n    name: \"chad\",\n    shortcodes: [\"chad\", \"flag_td\"],\n    tags: [\"TD\", \"flag\", \"flag: chad\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1e9.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1EB}\",\n    name: \"french_southern_territories\",\n    shortcodes: [\"flag_tf\", \"french_southern_territories\"],\n    tags: [\"TF\", \"flag\", \"flag: french southern territories\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1eb.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1EC}\",\n    name: \"togo\",\n    shortcodes: [\"flag_tg\", \"togo\"],\n    tags: [\"TG\", \"flag\", \"flag: togo\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1ec.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1ED}\",\n    name: \"thailand\",\n    shortcodes: [\"flag_th\", \"thailand\"],\n    tags: [\"TH\", \"flag\", \"flag: thailand\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1ed.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1EF}\",\n    name: \"tajikistan\",\n    shortcodes: [\"flag_tj\", \"tajikistan\"],\n    tags: [\"TJ\", \"flag\", \"flag: tajikistan\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1ef.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1F0}\",\n    name: \"tokelau\",\n    shortcodes: [\"flag_tk\", \"tokelau\"],\n    tags: [\"TK\", \"flag\", \"flag: tokelau\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1f0.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1F1}\",\n    name: \"timor_leste\",\n    shortcodes: [\"flag_tl\", \"timor_leste\"],\n    tags: [\"TL\", \"flag\", \"flag: timor-leste\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1f1.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1F2}\",\n    name: \"turkmenistan\",\n    shortcodes: [\"flag_tm\", \"turkmenistan\"],\n    tags: [\"TM\", \"flag\", \"flag: turkmenistan\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1F3}\",\n    name: \"tunisia\",\n    shortcodes: [\"flag_tn\", \"tunisia\"],\n    tags: [\"TN\", \"flag\", \"flag: tunisia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1f3.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1F4}\",\n    name: \"tonga\",\n    shortcodes: [\"flag_to\", \"tonga\"],\n    tags: [\"TO\", \"flag\", \"flag: tonga\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1f4.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1F7}\",\n    name: \"tr\",\n    shortcodes: [\"flag_tr\", \"turkey_tr\"],\n    tags: [\"TR\", \"flag\", \"flag: t\\xFCrkiye\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1f7.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1F9}\",\n    name: \"trinidad_tobago\",\n    shortcodes: [\"flag_tt\", \"trinidad_tobago\"],\n    tags: [\"TT\", \"flag\", \"flag: trinidad & tobago\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1f9.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1FB}\",\n    name: \"tuvalu\",\n    shortcodes: [\"flag_tv\", \"tuvalu\"],\n    tags: [\"TV\", \"flag\", \"flag: tuvalu\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1fb.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1FC}\",\n    name: \"taiwan\",\n    shortcodes: [\"flag_tw\", \"taiwan\"],\n    tags: [\"TW\", \"flag\", \"flag: taiwan\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1fc.png\"\n  },\n  {\n    emoji: \"\\u{1F1F9}\\u{1F1FF}\",\n    name: \"tanzania\",\n    shortcodes: [\"flag_tz\", \"tanzania\"],\n    tags: [\"TZ\", \"flag\", \"flag: tanzania\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1f9-1f1ff.png\"\n  },\n  {\n    emoji: \"\\u{1F1FA}\\u{1F1E6}\",\n    name: \"ukraine\",\n    shortcodes: [\"flag_ua\", \"ukraine\"],\n    tags: [\"UA\", \"flag\", \"flag: ukraine\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fa-1f1e6.png\"\n  },\n  {\n    emoji: \"\\u{1F1FA}\\u{1F1EC}\",\n    name: \"uganda\",\n    shortcodes: [\"flag_ug\", \"uganda\"],\n    tags: [\"UG\", \"flag\", \"flag: uganda\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fa-1f1ec.png\"\n  },\n  {\n    emoji: \"\\u{1F1FA}\\u{1F1F2}\",\n    name: \"us_outlying_islands\",\n    shortcodes: [\"flag_um\", \"us_outlying_islands\"],\n    tags: [\"UM\", \"flag\", \"flag: u.s. outlying islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fa-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1FA}\\u{1F1F3}\",\n    name: \"united_nations\",\n    shortcodes: [\"flag_un\", \"un\", \"united_nations\"],\n    tags: [\"UN\", \"flag\", \"flag: united nations\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 4,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fa-1f1f3.png\"\n  },\n  {\n    emoji: \"\\u{1F1FA}\\u{1F1F8}\",\n    name: \"us\",\n    shortcodes: [\"flag_us\", \"united_states\", \"usa\"],\n    tags: [\"US\", \"flag\", \"flag: united states\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 0.6,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fa-1f1f8.png\"\n  },\n  {\n    emoji: \"\\u{1F1FA}\\u{1F1FE}\",\n    name: \"uruguay\",\n    shortcodes: [\"flag_uy\", \"uruguay\"],\n    tags: [\"UY\", \"flag\", \"flag: uruguay\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fa-1f1fe.png\"\n  },\n  {\n    emoji: \"\\u{1F1FA}\\u{1F1FF}\",\n    name: \"uzbekistan\",\n    shortcodes: [\"flag_uz\", \"uzbekistan\"],\n    tags: [\"UZ\", \"flag\", \"flag: uzbekistan\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fa-1f1ff.png\"\n  },\n  {\n    emoji: \"\\u{1F1FB}\\u{1F1E6}\",\n    name: \"vatican_city\",\n    shortcodes: [\"flag_va\", \"vatican_city\"],\n    tags: [\"VA\", \"flag\", \"flag: vatican city\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fb-1f1e6.png\"\n  },\n  {\n    emoji: \"\\u{1F1FB}\\u{1F1E8}\",\n    name: \"st_vincent_grenadines\",\n    shortcodes: [\"flag_vc\", \"st_vincent_grenadines\"],\n    tags: [\"VC\", \"flag\", \"flag: st. vincent & grenadines\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fb-1f1e8.png\"\n  },\n  {\n    emoji: \"\\u{1F1FB}\\u{1F1EA}\",\n    name: \"venezuela\",\n    shortcodes: [\"flag_ve\", \"venezuela\"],\n    tags: [\"VE\", \"flag\", \"flag: venezuela\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fb-1f1ea.png\"\n  },\n  {\n    emoji: \"\\u{1F1FB}\\u{1F1EC}\",\n    name: \"british_virgin_islands\",\n    shortcodes: [\"british_virgin_islands\", \"flag_vg\"],\n    tags: [\"VG\", \"flag\", \"flag: british virgin islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fb-1f1ec.png\"\n  },\n  {\n    emoji: \"\\u{1F1FB}\\u{1F1EE}\",\n    name: \"us_virgin_islands\",\n    shortcodes: [\"flag_vi\", \"us_virgin_islands\"],\n    tags: [\"VI\", \"flag\", \"flag: u.s. virgin islands\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fb-1f1ee.png\"\n  },\n  {\n    emoji: \"\\u{1F1FB}\\u{1F1F3}\",\n    name: \"vietnam\",\n    shortcodes: [\"flag_vn\", \"vietnam\"],\n    tags: [\"VN\", \"flag\", \"flag: vietnam\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fb-1f1f3.png\"\n  },\n  {\n    emoji: \"\\u{1F1FB}\\u{1F1FA}\",\n    name: \"vanuatu\",\n    shortcodes: [\"flag_vu\", \"vanuatu\"],\n    tags: [\"VU\", \"flag\", \"flag: vanuatu\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fb-1f1fa.png\"\n  },\n  {\n    emoji: \"\\u{1F1FC}\\u{1F1EB}\",\n    name: \"wallis_futuna\",\n    shortcodes: [\"flag_wf\", \"wallis_futuna\"],\n    tags: [\"WF\", \"flag\", \"flag: wallis & futuna\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fc-1f1eb.png\"\n  },\n  {\n    emoji: \"\\u{1F1FC}\\u{1F1F8}\",\n    name: \"samoa\",\n    shortcodes: [\"flag_ws\", \"samoa\"],\n    tags: [\"WS\", \"flag\", \"flag: samoa\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fc-1f1f8.png\"\n  },\n  {\n    emoji: \"\\u{1F1FD}\\u{1F1F0}\",\n    name: \"kosovo\",\n    shortcodes: [\"flag_xk\", \"kosovo\"],\n    tags: [\"XK\", \"flag\", \"flag: kosovo\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fd-1f1f0.png\"\n  },\n  {\n    emoji: \"\\u{1F1FE}\\u{1F1EA}\",\n    name: \"yemen\",\n    shortcodes: [\"flag_ye\", \"yemen\"],\n    tags: [\"YE\", \"flag\", \"flag: yemen\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fe-1f1ea.png\"\n  },\n  {\n    emoji: \"\\u{1F1FE}\\u{1F1F9}\",\n    name: \"mayotte\",\n    shortcodes: [\"flag_yt\", \"mayotte\"],\n    tags: [\"YT\", \"flag\", \"flag: mayotte\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1fe-1f1f9.png\"\n  },\n  {\n    emoji: \"\\u{1F1FF}\\u{1F1E6}\",\n    name: \"south_africa\",\n    shortcodes: [\"flag_za\", \"south_africa\"],\n    tags: [\"ZA\", \"flag\", \"flag: south africa\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ff-1f1e6.png\"\n  },\n  {\n    emoji: \"\\u{1F1FF}\\u{1F1F2}\",\n    name: \"zambia\",\n    shortcodes: [\"flag_zm\", \"zambia\"],\n    tags: [\"ZM\", \"flag\", \"flag: zambia\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ff-1f1f2.png\"\n  },\n  {\n    emoji: \"\\u{1F1FF}\\u{1F1FC}\",\n    name: \"zimbabwe\",\n    shortcodes: [\"flag_zw\", \"zimbabwe\"],\n    tags: [\"ZW\", \"flag\", \"flag: zimbabwe\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 2,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f1ff-1f1fc.png\"\n  },\n  {\n    emoji: \"\\u{1F3F4}\\u{E0067}\\u{E0062}\\u{E0065}\\u{E006E}\\u{E0067}\\u{E007F}\",\n    name: \"england\",\n    shortcodes: [\"england\", \"flag_gbeng\"],\n    tags: [\"flag\", \"flag: england\", \"gbeng\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.png\"\n  },\n  {\n    emoji: \"\\u{1F3F4}\\u{E0067}\\u{E0062}\\u{E0073}\\u{E0063}\\u{E0074}\\u{E007F}\",\n    name: \"scotland\",\n    shortcodes: [\"flag_gbsct\", \"scotland\"],\n    tags: [\"flag\", \"flag: scotland\", \"gbsct\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.png\"\n  },\n  {\n    emoji: \"\\u{1F3F4}\\u{E0067}\\u{E0062}\\u{E0077}\\u{E006C}\\u{E0073}\\u{E007F}\",\n    name: \"wales\",\n    shortcodes: [\"flag_gbwls\", \"wales\"],\n    tags: [\"flag\", \"flag: wales\", \"gbwls\"],\n    group: \"flags\",\n    emoticons: [],\n    version: 5,\n    fallbackImage: \"https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.png\"\n  }\n];\nvar gitHubCustomEmojis = [\n  {\n    name: \"atom\",\n    shortcodes: [\"atom\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/atom.png\"\n  },\n  {\n    name: \"basecamp\",\n    shortcodes: [\"basecamp\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/basecamp.png\"\n  },\n  {\n    name: \"basecampy\",\n    shortcodes: [\"basecampy\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/basecampy.png\"\n  },\n  {\n    name: \"bowtie\",\n    shortcodes: [\"bowtie\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/bowtie.png\"\n  },\n  {\n    name: \"electron\",\n    shortcodes: [\"electron\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/electron.png\"\n  },\n  {\n    name: \"feelsgood\",\n    shortcodes: [\"feelsgood\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/feelsgood.png\"\n  },\n  {\n    name: \"finnadie\",\n    shortcodes: [\"finnadie\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/finnadie.png\"\n  },\n  {\n    name: \"goberserk\",\n    shortcodes: [\"goberserk\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/goberserk.png\"\n  },\n  {\n    name: \"godmode\",\n    shortcodes: [\"godmode\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/godmode.png\"\n  },\n  {\n    name: \"hurtrealbad\",\n    shortcodes: [\"hurtrealbad\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/hurtrealbad.png\"\n  },\n  {\n    name: \"neckbeard\",\n    shortcodes: [\"neckbeard\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/neckbeard.png\"\n  },\n  {\n    name: \"octocat\",\n    shortcodes: [\"octocat\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/octocat.png\"\n  },\n  {\n    name: \"rage1\",\n    shortcodes: [\"rage1\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/rage1.png\"\n  },\n  {\n    name: \"rage2\",\n    shortcodes: [\"rage2\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/rage2.png\"\n  },\n  {\n    name: \"rage3\",\n    shortcodes: [\"rage3\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/rage3.png\"\n  },\n  {\n    name: \"rage4\",\n    shortcodes: [\"rage4\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/rage4.png\"\n  },\n  {\n    name: \"shipit\",\n    shortcodes: [\"shipit\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/shipit.png\"\n  },\n  {\n    name: \"suspect\",\n    shortcodes: [\"suspect\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/suspect.png\"\n  },\n  {\n    name: \"trollface\",\n    shortcodes: [\"trollface\"],\n    tags: [],\n    group: \"GitHub\",\n    fallbackImage: \"https://github.githubassets.com/images/icons/emoji/trollface.png\"\n  }\n];\nvar gitHubEmojis = [...emojis, ...gitHubCustomEmojis];\n\n// src/helpers/removeVariationSelector.ts\nfunction removeVariationSelector(value) {\n  return value.replace(\"\\uFE0E\", \"\").replace(\"\\uFE0F\", \"\");\n}\n\n// src/helpers/emojiToShortcode.ts\nfunction emojiToShortcode(emoji, emojis2) {\n  var _a;\n  return (_a = emojis2.find((item) => item.emoji === removeVariationSelector(emoji))) == null ? void 0 : _a.shortcodes[0];\n}\n\n// src/helpers/removeDuplicates.ts\nfunction removeDuplicates(array, by = JSON.stringify) {\n  const seen = {};\n  return array.filter((item) => {\n    const key = by(item);\n    return Object.prototype.hasOwnProperty.call(seen, key) ? false : seen[key] = true;\n  });\n}\n\n// src/helpers/shortcodeToEmoji.ts\nfunction shortcodeToEmoji(shortcode, emojis2) {\n  return emojis2.find((item) => shortcode === item.name || item.shortcodes.includes(shortcode));\n}\n\n// src/emoji.ts\nvar EmojiSuggestionPluginKey = new PluginKey(\"emojiSuggestion\");\nvar inputRegex = /:([a-zA-Z0-9_+-]+):$/;\nvar pasteRegex = /(^|\\s):([a-zA-Z0-9_+-]+):/g;\nvar Emoji = Node.create({\n  name: \"emoji\",\n  inline: true,\n  group: \"inline\",\n  selectable: false,\n  addOptions() {\n    return {\n      HTMLAttributes: {},\n      emojis,\n      enableEmoticons: false,\n      forceFallbackImages: false,\n      suggestion: {\n        char: \":\",\n        pluginKey: EmojiSuggestionPluginKey,\n        command: ({ editor, range, props }) => {\n          var _a;\n          const nodeAfter = editor.view.state.selection.$to.nodeAfter;\n          const overrideSpace = (_a = nodeAfter == null ? void 0 : nodeAfter.text) == null ? void 0 : _a.startsWith(\" \");\n          if (overrideSpace) {\n            range.to += 1;\n          }\n          editor.chain().focus().insertContentAt(range, [\n            {\n              type: this.name,\n              attrs: props\n            },\n            {\n              type: \"text\",\n              text: \" \"\n            }\n          ]).command(({ tr, state }) => {\n            tr.setStoredMarks(state.doc.resolve(state.selection.to - 2).marks());\n            return true;\n          }).run();\n        },\n        allow: ({ state, range }) => {\n          const $from = state.doc.resolve(range.from);\n          const type = state.schema.nodes[this.name];\n          const allow = !!$from.parent.type.contentMatch.matchType(type);\n          return allow;\n        }\n      }\n    };\n  },\n  addStorage() {\n    const { emojis: emojis2 } = this.options;\n    const supportMap = removeDuplicates(emojis2.map((item) => item.version)).filter((version) => typeof version === \"number\").reduce((versions, version) => {\n      const emoji = emojis2.find((item) => item.version === version && item.emoji);\n      return {\n        ...versions,\n        [version]: emoji ? isEmojiSupported(emoji.emoji) : false\n      };\n    }, {});\n    return {\n      emojis: this.options.emojis,\n      isSupported: (emojiItem) => {\n        return emojiItem.version ? supportMap[emojiItem.version] : false;\n      }\n    };\n  },\n  addAttributes() {\n    return {\n      name: {\n        default: null,\n        parseHTML: (element) => element.dataset.name,\n        renderHTML: (attributes) => ({\n          \"data-name\": attributes.name\n        })\n      }\n    };\n  },\n  parseHTML() {\n    return [\n      {\n        tag: `span[data-type=\"${this.name}\"]`\n      }\n    ];\n  },\n  renderHTML({ HTMLAttributes, node }) {\n    const emojiItem = shortcodeToEmoji(node.attrs.name, this.options.emojis);\n    const attributes = mergeAttributes(HTMLAttributes, this.options.HTMLAttributes, { \"data-type\": this.name });\n    if (!emojiItem) {\n      return [\"span\", attributes, `:${node.attrs.name}:`];\n    }\n    const isSupported = this.storage.isSupported(emojiItem);\n    const hasEmoji = !!(emojiItem == null ? void 0 : emojiItem.emoji);\n    const hasFallbackImage = !!(emojiItem == null ? void 0 : emojiItem.fallbackImage);\n    const renderFallbackImage = this.options.forceFallbackImages && !hasEmoji || this.options.forceFallbackImages && hasFallbackImage || this.options.forceFallbackImages && !isSupported && hasFallbackImage || (!isSupported || !hasEmoji) && hasFallbackImage;\n    return [\n      \"span\",\n      attributes,\n      renderFallbackImage ? [\n        \"img\",\n        {\n          src: emojiItem.fallbackImage,\n          draggable: \"false\",\n          loading: \"lazy\",\n          align: \"absmiddle\",\n          alt: `${emojiItem.name} emoji`\n        }\n      ] : emojiItem.emoji || `:${emojiItem.shortcodes[0]}:`\n    ];\n  },\n  renderText({ node }) {\n    const emojiItem = shortcodeToEmoji(node.attrs.name, this.options.emojis);\n    return (emojiItem == null ? void 0 : emojiItem.emoji) || `:${node.attrs.name}:`;\n  },\n  addCommands() {\n    return {\n      setEmoji: (shortcode) => ({ chain }) => {\n        const emojiItem = shortcodeToEmoji(shortcode, this.options.emojis);\n        if (!emojiItem) {\n          return false;\n        }\n        chain().insertContent({\n          type: this.name,\n          attrs: {\n            name: emojiItem.name\n          }\n        }).command(({ tr, state }) => {\n          tr.setStoredMarks(state.doc.resolve(state.selection.to - 1).marks());\n          return true;\n        }).run();\n        return true;\n      }\n    };\n  },\n  addInputRules() {\n    const inputRules = [];\n    inputRules.push(\n      new InputRule({\n        find: inputRegex,\n        handler: ({ range, match, chain }) => {\n          const name = match[1];\n          if (!shortcodeToEmoji(name, this.options.emojis)) {\n            return;\n          }\n          chain().insertContentAt(range, {\n            type: this.name,\n            attrs: {\n              name\n            }\n          }).command(({ tr, state }) => {\n            tr.setStoredMarks(state.doc.resolve(state.selection.to - 1).marks());\n            return true;\n          }).run();\n        }\n      })\n    );\n    if (this.options.enableEmoticons) {\n      const emoticons = this.options.emojis.map((item) => item.emoticons).flat().filter((item) => item);\n      const emoticonRegex = new RegExp(`(?:^|\\\\s)(${emoticons.map((item) => escapeForRegEx(item)).join(\"|\")}) $`);\n      inputRules.push(\n        nodeInputRule({\n          find: emoticonRegex,\n          type: this.type,\n          getAttributes: (match) => {\n            const emoji = this.options.emojis.find((item) => {\n              var _a;\n              return (_a = item.emoticons) == null ? void 0 : _a.includes(match[1]);\n            });\n            if (!emoji) {\n              return;\n            }\n            return {\n              name: emoji.name\n            };\n          }\n        })\n      );\n    }\n    return inputRules;\n  },\n  addPasteRules() {\n    return [\n      new PasteRule({\n        find: pasteRegex,\n        handler: ({ range, match, chain }) => {\n          const prefix = match[1] || \"\";\n          const name = match[2];\n          if (!shortcodeToEmoji(name, this.options.emojis)) {\n            return;\n          }\n          const shortcodeFrom = range.from + prefix.length;\n          const shortcodeTo = range.to;\n          chain().insertContentAt(\n            { from: shortcodeFrom, to: shortcodeTo },\n            {\n              type: this.name,\n              attrs: {\n                name\n              }\n            },\n            {\n              updateSelection: false\n            }\n          ).command(({ tr, state }) => {\n            tr.setStoredMarks(state.doc.resolve(state.selection.to - 1).marks());\n            return true;\n          }).run();\n        }\n      })\n    ];\n  },\n  addProseMirrorPlugins() {\n    return [\n      Suggestion({\n        editor: this.editor,\n        ...this.options.suggestion\n      }),\n      new Plugin({\n        key: new PluginKey(\"emoji\"),\n        props: {\n          // double click to select emoji doesn’t work by default\n          // that’s why we simulate this behavior\n          handleDoubleClickOn: (view, pos, node) => {\n            if (node.type !== this.type) {\n              return false;\n            }\n            const from = pos;\n            const to = from + node.nodeSize;\n            this.editor.commands.setTextSelection({\n              from,\n              to\n            });\n            return true;\n          }\n        },\n        // replace text emojis with emoji node on any change\n        appendTransaction: (transactions, oldState, newState) => {\n          if (this.editor.view.composing) {\n            return;\n          }\n          const docChanges = transactions.some((transaction) => transaction.docChanged) && !oldState.doc.eq(newState.doc);\n          if (!docChanges) {\n            return;\n          }\n          const { tr } = newState;\n          const transform = combineTransactionSteps(oldState.doc, transactions);\n          const changes = getChangedRanges(transform);\n          changes.forEach(({ newRange }) => {\n            if (newState.doc.resolve(newRange.from).parent.type.spec.code) {\n              return;\n            }\n            const textNodes = findChildrenInRange(newState.doc, newRange, (node) => node.type.isText);\n            textNodes.forEach(({ node, pos }) => {\n              if (!node.text) {\n                return;\n              }\n              const matches = [...node.text.matchAll(emojiRegex())];\n              matches.forEach((match) => {\n                if (match.index === void 0) {\n                  return;\n                }\n                const emoji = match[0];\n                const name = emojiToShortcode(emoji, this.options.emojis);\n                if (!name) {\n                  return;\n                }\n                const from = tr.mapping.map(pos + match.index);\n                if (newState.doc.resolve(from).parent.type.spec.code) {\n                  return;\n                }\n                const to = from + emoji.length;\n                const emojiNode = this.type.create({\n                  name\n                });\n                tr.replaceRangeWith(from, to, emojiNode);\n                tr.setStoredMarks(newState.doc.resolve(from).marks());\n              });\n            });\n          });\n          if (!tr.steps.length) {\n            return;\n          }\n          return tr;\n        }\n      })\n    ];\n  }\n});\n\n// src/index.ts\nvar index_default = Emoji;\nexport {\n  Emoji,\n  EmojiSuggestionPluginKey,\n  index_default as default,\n  emojiToShortcode,\n  emojis,\n  gitHubCustomEmojis,\n  gitHubEmojis,\n  inputRegex,\n  pasteRegex,\n  shortcodeToEmoji\n};\n//# sourceMappingURL=index.js.map","import validate from './validate.js';\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  //\n  // Note to future-self: No, you can't remove the `toLowerCase()` call.\n  // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351\n  return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n  var uuid = unsafeStringify(arr, offset);\n  // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n  return uuid;\n}\nexport default stringify;","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\n\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n  // lazy load so that environments that need to polyfill have a chance to do so\n  if (!getRandomValues) {\n    // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n    if (!getRandomValues) {\n      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n    }\n  }\n  return getRandomValues(rnds8);\n}","var randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n  randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n  if (native.randomUUID && !buf && !options) {\n    return native.randomUUID();\n  }\n  options = options || {};\n  var rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    offset = offset || 0;\n    for (var i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n    return buf;\n  }\n  return unsafeStringify(rnds);\n}\nexport default v4;","// src/tableOfContents.ts\nimport { Extension } from \"@tiptap/core\";\nimport { v4 as uuidv42 } from \"uuid\";\n\n// src/plugin.ts\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { v4 as uuidv4 } from \"uuid\";\nvar TableOfContentsPlugin = ({\n  getId,\n  anchorTypes = [\"heading\"]\n}) => {\n  return new Plugin({\n    key: new PluginKey(\"tableOfContent\"),\n    appendTransaction(transactions, _oldState, newState) {\n      const tr = newState.tr;\n      let modified = false;\n      if (transactions.some((transaction) => transaction.docChanged)) {\n        const existingIds = [];\n        newState.doc.descendants((node, pos) => {\n          const nodeId = node.attrs[\"data-toc-id\"];\n          if (!anchorTypes.includes(node.type.name) || node.textContent.length === 0) {\n            return;\n          }\n          if (nodeId === null || nodeId === void 0 || existingIds.includes(nodeId)) {\n            let id = \"\";\n            if (getId) {\n              id = getId(node.textContent);\n            } else {\n              id = uuidv4();\n            }\n            tr.setNodeMarkup(pos, void 0, {\n              ...node.attrs,\n              \"data-toc-id\": id,\n              id\n            });\n            modified = true;\n          }\n          existingIds.push(nodeId);\n        });\n      }\n      return modified ? tr : null;\n    }\n  });\n};\n\n// src/utils.ts\nvar getLastHeadingOnLevel = (headings, level) => {\n  let heading = headings.filter((currentHeading) => currentHeading.level === level).pop();\n  if (level === 0) {\n    return void 0;\n  }\n  if (!heading) {\n    heading = getLastHeadingOnLevel(headings, level - 1);\n  }\n  return heading;\n};\nvar getHeadlineLevel = (headline, previousItems) => {\n  let level = 1;\n  const previousHeadline = previousItems.at(-1);\n  const highestHeadlineAbove = [...previousItems].reverse().find((h) => h.originalLevel <= headline.node.attrs.level);\n  const highestLevelAbove = (highestHeadlineAbove == null ? void 0 : highestHeadlineAbove.level) || 1;\n  if (headline.node.attrs.level > ((previousHeadline == null ? void 0 : previousHeadline.originalLevel) || 1)) {\n    level = ((previousHeadline == null ? void 0 : previousHeadline.level) || 1) + 1;\n  } else if (headline.node.attrs.level < ((previousHeadline == null ? void 0 : previousHeadline.originalLevel) || 1)) {\n    level = highestLevelAbove;\n  } else {\n    level = (previousHeadline == null ? void 0 : previousHeadline.level) || 1;\n  }\n  return level;\n};\nvar getLinearIndexes = (_headline, previousHeadlines) => {\n  const previousHeadline = previousHeadlines.at(-1);\n  if (!previousHeadline) {\n    return 1;\n  }\n  return ((previousHeadline == null ? void 0 : previousHeadline.itemIndex) || 1) + 1;\n};\nvar getHierarchicalIndexes = (headline, previousHeadlines, currentLevel) => {\n  var _a, _b;\n  const level = currentLevel || headline.node.attrs.level || 1;\n  let itemIndex = 1;\n  const previousHeadlinesOnLevelOrBelow = previousHeadlines.filter((h) => h.level <= level);\n  if (((_a = previousHeadlinesOnLevelOrBelow.at(-1)) == null ? void 0 : _a.level) === level) {\n    itemIndex = (((_b = previousHeadlinesOnLevelOrBelow.at(-1)) == null ? void 0 : _b.itemIndex) || 1) + 1;\n  } else {\n    itemIndex = 1;\n  }\n  return itemIndex;\n};\nfunction debounce(func, wait) {\n  let timeout = null;\n  return (...args) => {\n    if (timeout) {\n      clearTimeout(timeout);\n    }\n    timeout = setTimeout(() => {\n      func(...args);\n    }, wait);\n  };\n}\n\n// src/tableOfContents.ts\nvar addTocActiveStatesAndGetItems = (content, options) => {\n  const { editor } = options;\n  const headlines = [];\n  const scrolledOverIds = [];\n  let activeId = null;\n  if (editor.isDestroyed) {\n    return content;\n  }\n  editor.state.doc.descendants((node, pos) => {\n    var _a;\n    const isValidType = (_a = options.anchorTypes) == null ? void 0 : _a.includes(node.type.name);\n    if (!isValidType) {\n      return;\n    }\n    headlines.push({ node, pos });\n  });\n  headlines.forEach((headline) => {\n    const domElement = editor.view.domAtPos(headline.pos + 1).node;\n    const scrolledOver = options.storage.scrollPosition >= domElement.offsetTop;\n    if (scrolledOver) {\n      activeId = headline.node.attrs[\"data-toc-id\"];\n      scrolledOverIds.push(headline.node.attrs[\"data-toc-id\"]);\n    }\n  });\n  content = content.map((heading) => ({\n    ...heading,\n    isActive: heading.id === activeId,\n    isScrolledOver: scrolledOverIds.includes(heading.id)\n  }));\n  if (options.onUpdate) {\n    const isInitialCreation = options.storage.content.length === 0;\n    options.onUpdate(content, isInitialCreation);\n  }\n  return content;\n};\nvar setTocData = (options) => {\n  const { editor, onUpdate } = options;\n  if (editor.isDestroyed) {\n    return;\n  }\n  const headlines = [];\n  let anchors = [];\n  const anchorEls = [];\n  editor.state.doc.descendants((node, pos) => {\n    var _a;\n    const isValidType = (_a = options.anchorTypes) == null ? void 0 : _a.includes(node.type.name);\n    if (!isValidType) {\n      return;\n    }\n    headlines.push({ node, pos });\n  });\n  headlines.forEach((headline, i) => {\n    if (headline.node.textContent.length === 0) {\n      return;\n    }\n    const domElement = editor.view.domAtPos(headline.pos + 1).node;\n    const scrolledOver = options.storage.scrollPosition >= domElement.offsetTop;\n    anchorEls.push(domElement);\n    const originalLevel = headline.node.attrs.level;\n    const prevHeadline = headlines[i - 1];\n    const level = options.getLevelFn(headline, anchors);\n    const itemIndex = options.getIndexFn(headline, anchors, level);\n    if (!prevHeadline) {\n      anchors = [\n        ...anchors,\n        {\n          itemIndex,\n          id: headline.node.attrs[\"data-toc-id\"],\n          originalLevel,\n          level,\n          textContent: headline.node.textContent,\n          pos: headline.pos,\n          editor,\n          isActive: false,\n          isScrolledOver: scrolledOver,\n          node: headline.node,\n          dom: domElement\n        }\n      ];\n      return;\n    }\n    anchors = [\n      ...anchors,\n      {\n        itemIndex,\n        id: headline.node.attrs[\"data-toc-id\"],\n        originalLevel,\n        level,\n        textContent: headline.node.textContent,\n        pos: headline.pos,\n        editor,\n        isActive: false,\n        isScrolledOver: false,\n        node: headline.node,\n        dom: domElement\n      }\n    ];\n  });\n  anchors = addTocActiveStatesAndGetItems(anchors, options);\n  if (onUpdate) {\n    const isInitialCreation = options.storage.content.length === 0;\n    onUpdate(anchors, isInitialCreation);\n  }\n  options.storage.anchors = anchorEls;\n  options.storage.content = anchors;\n  editor.state.tr.setMeta(\"toc\", anchors);\n  editor.view.dispatch(editor.state.tr);\n};\nvar TableOfContents = Extension.create({\n  name: \"tableOfContents\",\n  addStorage() {\n    return {\n      content: [],\n      anchors: [],\n      scrollHandler: () => null,\n      scrollPosition: 0\n    };\n  },\n  addGlobalAttributes() {\n    return [\n      {\n        types: this.options.anchorTypes || [\"headline\"],\n        attributes: {\n          id: {\n            default: null,\n            renderHTML: (attributes) => {\n              return {\n                id: attributes.id\n              };\n            },\n            parseHTML: (element) => {\n              return element.id || null;\n            }\n          },\n          \"data-toc-id\": {\n            default: null,\n            renderHTML: (attributes) => {\n              return {\n                \"data-toc-id\": attributes[\"data-toc-id\"]\n              };\n            },\n            parseHTML: (element) => {\n              return element.dataset.tocId || null;\n            }\n          }\n        }\n      }\n    ];\n  },\n  addOptions() {\n    const defaultScrollParent = typeof window !== \"undefined\" ? () => window : void 0;\n    return {\n      // eslint-disable-next-line\n      onUpdate: () => {\n      },\n      // eslint-disable-next-line\n      getId: (_textContent) => uuidv42(),\n      scrollParent: defaultScrollParent,\n      anchorTypes: [\"heading\"]\n    };\n  },\n  addCommands() {\n    return {\n      updateTableOfContents: () => ({ dispatch }) => {\n        var _a;\n        if (dispatch) {\n          setTocData({\n            editor: this.editor,\n            storage: this.storage,\n            onUpdate: (_a = this.options.onUpdate) == null ? void 0 : _a.bind(this),\n            getIndexFn: this.options.getIndex || getLinearIndexes,\n            getLevelFn: this.options.getLevel || getHeadlineLevel,\n            anchorTypes: this.options.anchorTypes\n          });\n        }\n        return true;\n      }\n    };\n  },\n  onTransaction({ transaction }) {\n    var _a;\n    if (transaction.docChanged && !transaction.getMeta(\"toc\")) {\n      setTocData({\n        editor: this.editor,\n        storage: this.storage,\n        onUpdate: (_a = this.options.onUpdate) == null ? void 0 : _a.bind(this),\n        getIndexFn: this.options.getIndex || getLinearIndexes,\n        getLevelFn: this.options.getLevel || getHeadlineLevel,\n        anchorTypes: this.options.anchorTypes\n      });\n    }\n  },\n  onCreate() {\n    var _a;\n    const { tr } = this.editor.state;\n    const existingIds = [];\n    if (this.options.scrollParent && typeof this.options.scrollParent !== \"function\") {\n      console.warn(\n        \"[Tiptap Table of Contents Deprecation Notice]: The 'scrollParent' option must now be provided as a callback function that returns the 'scrollParent' element. The ability to pass this option directly will be deprecated in future releases.\"\n      );\n    }\n    this.editor.state.doc.descendants((node, pos) => {\n      var _a2;\n      const nodeId = node.attrs[\"data-toc-id\"];\n      const isValidType = (_a2 = this.options.anchorTypes) == null ? void 0 : _a2.includes(node.type.name);\n      if (!isValidType || node.textContent.length === 0) {\n        return;\n      }\n      if (nodeId === null || nodeId === void 0 || existingIds.includes(nodeId)) {\n        let id = \"\";\n        if (this.options.getId) {\n          id = this.options.getId(node.textContent);\n        } else {\n          id = uuidv42();\n        }\n        tr.setNodeMarkup(pos, void 0, {\n          ...node.attrs,\n          \"data-toc-id\": id,\n          id\n        });\n      }\n      existingIds.push(nodeId);\n    });\n    this.editor.view.dispatch(tr);\n    setTocData({\n      editor: this.editor,\n      storage: this.storage,\n      onUpdate: (_a = this.options.onUpdate) == null ? void 0 : _a.bind(this),\n      getIndexFn: this.options.getIndex || getLinearIndexes,\n      getLevelFn: this.options.getLevel || getHeadlineLevel,\n      anchorTypes: this.options.anchorTypes\n    });\n    this.storage.scrollHandler = () => {\n      var _a2;\n      if (!this.options.scrollParent) {\n        return;\n      }\n      const scrollParent2 = typeof this.options.scrollParent === \"function\" ? this.options.scrollParent() : this.options.scrollParent;\n      const scrollPosition = scrollParent2 instanceof HTMLElement ? scrollParent2.scrollTop : scrollParent2.scrollY;\n      this.storage.scrollPosition = scrollPosition || 0;\n      const updatedItems = addTocActiveStatesAndGetItems(this.storage.content, {\n        editor: this.editor,\n        anchorTypes: this.options.anchorTypes,\n        storage: this.storage,\n        onUpdate: (_a2 = this.options.onUpdate) == null ? void 0 : _a2.bind(this)\n      });\n      this.storage.content = updatedItems;\n    };\n    if (!this.options.scrollParent) {\n      return;\n    }\n    const scrollParent = typeof this.options.scrollParent === \"function\" ? this.options.scrollParent() : this.options.scrollParent;\n    if (scrollParent) {\n      scrollParent.addEventListener(\"scroll\", this.storage.scrollHandler);\n    }\n  },\n  onDestroy() {\n    if (!this.options.scrollParent) {\n      return;\n    }\n    const scrollParent = typeof this.options.scrollParent === \"function\" ? this.options.scrollParent() : this.options.scrollParent;\n    if (scrollParent) {\n      scrollParent.removeEventListener(\"scroll\", this.storage.scrollHandler);\n    }\n  },\n  addProseMirrorPlugins() {\n    return [TableOfContentsPlugin({ getId: this.options.getId, anchorTypes: this.options.anchorTypes })];\n  }\n});\n\n// src/index.ts\nvar index_default = TableOfContents;\nexport {\n  TableOfContents,\n  TableOfContentsPlugin,\n  debounce,\n  index_default as default,\n  getHeadlineLevel,\n  getHierarchicalIndexes,\n  getLastHeadingOnLevel,\n  getLinearIndexes\n};\n//# sourceMappingURL=index.js.map","import OrderedMap from 'orderedmap';\n\nfunction findDiffStart(a, b, pos) {\n    for (let i = 0;; i++) {\n        if (i == a.childCount || i == b.childCount)\n            return a.childCount == b.childCount ? null : pos;\n        let childA = a.child(i), childB = b.child(i);\n        if (childA == childB) {\n            pos += childA.nodeSize;\n            continue;\n        }\n        if (!childA.sameMarkup(childB))\n            return pos;\n        if (childA.isText && childA.text != childB.text) {\n            for (let j = 0; childA.text[j] == childB.text[j]; j++)\n                pos++;\n            return pos;\n        }\n        if (childA.content.size || childB.content.size) {\n            let inner = findDiffStart(childA.content, childB.content, pos + 1);\n            if (inner != null)\n                return inner;\n        }\n        pos += childA.nodeSize;\n    }\n}\nfunction findDiffEnd(a, b, posA, posB) {\n    for (let iA = a.childCount, iB = b.childCount;;) {\n        if (iA == 0 || iB == 0)\n            return iA == iB ? null : { a: posA, b: posB };\n        let childA = a.child(--iA), childB = b.child(--iB), size = childA.nodeSize;\n        if (childA == childB) {\n            posA -= size;\n            posB -= size;\n            continue;\n        }\n        if (!childA.sameMarkup(childB))\n            return { a: posA, b: posB };\n        if (childA.isText && childA.text != childB.text) {\n            let same = 0, minSize = Math.min(childA.text.length, childB.text.length);\n            while (same < minSize && childA.text[childA.text.length - same - 1] == childB.text[childB.text.length - same - 1]) {\n                same++;\n                posA--;\n                posB--;\n            }\n            return { a: posA, b: posB };\n        }\n        if (childA.content.size || childB.content.size) {\n            let inner = findDiffEnd(childA.content, childB.content, posA - 1, posB - 1);\n            if (inner)\n                return inner;\n        }\n        posA -= size;\n        posB -= size;\n    }\n}\n\n/**\nA fragment represents a node's collection of child nodes.\n\nLike nodes, fragments are persistent data structures, and you\nshould not mutate them or their content. Rather, you create new\ninstances whenever needed. The API tries to make this easy.\n*/\nclass Fragment {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The child nodes in this fragment.\n    */\n    content, size) {\n        this.content = content;\n        this.size = size || 0;\n        if (size == null)\n            for (let i = 0; i < content.length; i++)\n                this.size += content[i].nodeSize;\n    }\n    /**\n    Invoke a callback for all descendant nodes between the given two\n    positions (relative to start of this fragment). Doesn't descend\n    into a node when the callback returns `false`.\n    */\n    nodesBetween(from, to, f, nodeStart = 0, parent) {\n        for (let i = 0, pos = 0; pos < to; i++) {\n            let child = this.content[i], end = pos + child.nodeSize;\n            if (end > from && f(child, nodeStart + pos, parent || null, i) !== false && child.content.size) {\n                let start = pos + 1;\n                child.nodesBetween(Math.max(0, from - start), Math.min(child.content.size, to - start), f, nodeStart + start);\n            }\n            pos = end;\n        }\n    }\n    /**\n    Call the given callback for every descendant node. `pos` will be\n    relative to the start of the fragment. The callback may return\n    `false` to prevent traversal of a given node's children.\n    */\n    descendants(f) {\n        this.nodesBetween(0, this.size, f);\n    }\n    /**\n    Extract the text between `from` and `to`. See the same method on\n    [`Node`](https://prosemirror.net/docs/ref/#model.Node.textBetween).\n    */\n    textBetween(from, to, blockSeparator, leafText) {\n        let text = \"\", first = true;\n        this.nodesBetween(from, to, (node, pos) => {\n            let nodeText = node.isText ? node.text.slice(Math.max(from, pos) - pos, to - pos)\n                : !node.isLeaf ? \"\"\n                    : leafText ? (typeof leafText === \"function\" ? leafText(node) : leafText)\n                        : node.type.spec.leafText ? node.type.spec.leafText(node)\n                            : \"\";\n            if (node.isBlock && (node.isLeaf && nodeText || node.isTextblock) && blockSeparator) {\n                if (first)\n                    first = false;\n                else\n                    text += blockSeparator;\n            }\n            text += nodeText;\n        }, 0);\n        return text;\n    }\n    /**\n    Create a new fragment containing the combined content of this\n    fragment and the other.\n    */\n    append(other) {\n        if (!other.size)\n            return this;\n        if (!this.size)\n            return other;\n        let last = this.lastChild, first = other.firstChild, content = this.content.slice(), i = 0;\n        if (last.isText && last.sameMarkup(first)) {\n            content[content.length - 1] = last.withText(last.text + first.text);\n            i = 1;\n        }\n        for (; i < other.content.length; i++)\n            content.push(other.content[i]);\n        return new Fragment(content, this.size + other.size);\n    }\n    /**\n    Cut out the sub-fragment between the two given positions.\n    */\n    cut(from, to = this.size) {\n        if (from == 0 && to == this.size)\n            return this;\n        let result = [], size = 0;\n        if (to > from)\n            for (let i = 0, pos = 0; pos < to; i++) {\n                let child = this.content[i], end = pos + child.nodeSize;\n                if (end > from) {\n                    if (pos < from || end > to) {\n                        if (child.isText)\n                            child = child.cut(Math.max(0, from - pos), Math.min(child.text.length, to - pos));\n                        else\n                            child = child.cut(Math.max(0, from - pos - 1), Math.min(child.content.size, to - pos - 1));\n                    }\n                    result.push(child);\n                    size += child.nodeSize;\n                }\n                pos = end;\n            }\n        return new Fragment(result, size);\n    }\n    /**\n    @internal\n    */\n    cutByIndex(from, to) {\n        if (from == to)\n            return Fragment.empty;\n        if (from == 0 && to == this.content.length)\n            return this;\n        return new Fragment(this.content.slice(from, to));\n    }\n    /**\n    Create a new fragment in which the node at the given index is\n    replaced by the given node.\n    */\n    replaceChild(index, node) {\n        let current = this.content[index];\n        if (current == node)\n            return this;\n        let copy = this.content.slice();\n        let size = this.size + node.nodeSize - current.nodeSize;\n        copy[index] = node;\n        return new Fragment(copy, size);\n    }\n    /**\n    Create a new fragment by prepending the given node to this\n    fragment.\n    */\n    addToStart(node) {\n        return new Fragment([node].concat(this.content), this.size + node.nodeSize);\n    }\n    /**\n    Create a new fragment by appending the given node to this\n    fragment.\n    */\n    addToEnd(node) {\n        return new Fragment(this.content.concat(node), this.size + node.nodeSize);\n    }\n    /**\n    Compare this fragment to another one.\n    */\n    eq(other) {\n        if (this.content.length != other.content.length)\n            return false;\n        for (let i = 0; i < this.content.length; i++)\n            if (!this.content[i].eq(other.content[i]))\n                return false;\n        return true;\n    }\n    /**\n    The first child of the fragment, or `null` if it is empty.\n    */\n    get firstChild() { return this.content.length ? this.content[0] : null; }\n    /**\n    The last child of the fragment, or `null` if it is empty.\n    */\n    get lastChild() { return this.content.length ? this.content[this.content.length - 1] : null; }\n    /**\n    The number of child nodes in this fragment.\n    */\n    get childCount() { return this.content.length; }\n    /**\n    Get the child node at the given index. Raise an error when the\n    index is out of range.\n    */\n    child(index) {\n        let found = this.content[index];\n        if (!found)\n            throw new RangeError(\"Index \" + index + \" out of range for \" + this);\n        return found;\n    }\n    /**\n    Get the child node at the given index, if it exists.\n    */\n    maybeChild(index) {\n        return this.content[index] || null;\n    }\n    /**\n    Call `f` for every child node, passing the node, its offset\n    into this parent node, and its index.\n    */\n    forEach(f) {\n        for (let i = 0, p = 0; i < this.content.length; i++) {\n            let child = this.content[i];\n            f(child, p, i);\n            p += child.nodeSize;\n        }\n    }\n    /**\n    Find the first position at which this fragment and another\n    fragment differ, or `null` if they are the same.\n    */\n    findDiffStart(other, pos = 0) {\n        return findDiffStart(this, other, pos);\n    }\n    /**\n    Find the first position, searching from the end, at which this\n    fragment and the given fragment differ, or `null` if they are\n    the same. Since this position will not be the same in both\n    nodes, an object with two separate positions is returned.\n    */\n    findDiffEnd(other, pos = this.size, otherPos = other.size) {\n        return findDiffEnd(this, other, pos, otherPos);\n    }\n    /**\n    Find the index and inner offset corresponding to a given relative\n    position in this fragment. The result object will be reused\n    (overwritten) the next time the function is called. @internal\n    */\n    findIndex(pos) {\n        if (pos == 0)\n            return retIndex(0, pos);\n        if (pos == this.size)\n            return retIndex(this.content.length, pos);\n        if (pos > this.size || pos < 0)\n            throw new RangeError(`Position ${pos} outside of fragment (${this})`);\n        for (let i = 0, curPos = 0;; i++) {\n            let cur = this.child(i), end = curPos + cur.nodeSize;\n            if (end >= pos) {\n                if (end == pos)\n                    return retIndex(i + 1, end);\n                return retIndex(i, curPos);\n            }\n            curPos = end;\n        }\n    }\n    /**\n    Return a debugging string that describes this fragment.\n    */\n    toString() { return \"<\" + this.toStringInner() + \">\"; }\n    /**\n    @internal\n    */\n    toStringInner() { return this.content.join(\", \"); }\n    /**\n    Create a JSON-serializeable representation of this fragment.\n    */\n    toJSON() {\n        return this.content.length ? this.content.map(n => n.toJSON()) : null;\n    }\n    /**\n    Deserialize a fragment from its JSON representation.\n    */\n    static fromJSON(schema, value) {\n        if (!value)\n            return Fragment.empty;\n        if (!Array.isArray(value))\n            throw new RangeError(\"Invalid input for Fragment.fromJSON\");\n        return new Fragment(value.map(schema.nodeFromJSON));\n    }\n    /**\n    Build a fragment from an array of nodes. Ensures that adjacent\n    text nodes with the same marks are joined together.\n    */\n    static fromArray(array) {\n        if (!array.length)\n            return Fragment.empty;\n        let joined, size = 0;\n        for (let i = 0; i < array.length; i++) {\n            let node = array[i];\n            size += node.nodeSize;\n            if (i && node.isText && array[i - 1].sameMarkup(node)) {\n                if (!joined)\n                    joined = array.slice(0, i);\n                joined[joined.length - 1] = node\n                    .withText(joined[joined.length - 1].text + node.text);\n            }\n            else if (joined) {\n                joined.push(node);\n            }\n        }\n        return new Fragment(joined || array, size);\n    }\n    /**\n    Create a fragment from something that can be interpreted as a\n    set of nodes. For `null`, it returns the empty fragment. For a\n    fragment, the fragment itself. For a node or array of nodes, a\n    fragment containing those nodes.\n    */\n    static from(nodes) {\n        if (!nodes)\n            return Fragment.empty;\n        if (nodes instanceof Fragment)\n            return nodes;\n        if (Array.isArray(nodes))\n            return this.fromArray(nodes);\n        if (nodes.attrs)\n            return new Fragment([nodes], nodes.nodeSize);\n        throw new RangeError(\"Can not convert \" + nodes + \" to a Fragment\" +\n            (nodes.nodesBetween ? \" (looks like multiple versions of prosemirror-model were loaded)\" : \"\"));\n    }\n}\n/**\nAn empty fragment. Intended to be reused whenever a node doesn't\ncontain anything (rather than allocating a new empty fragment for\neach leaf node).\n*/\nFragment.empty = new Fragment([], 0);\nconst found = { index: 0, offset: 0 };\nfunction retIndex(index, offset) {\n    found.index = index;\n    found.offset = offset;\n    return found;\n}\n\nfunction compareDeep(a, b) {\n    if (a === b)\n        return true;\n    if (!(a && typeof a == \"object\") ||\n        !(b && typeof b == \"object\"))\n        return false;\n    let array = Array.isArray(a);\n    if (Array.isArray(b) != array)\n        return false;\n    if (array) {\n        if (a.length != b.length)\n            return false;\n        for (let i = 0; i < a.length; i++)\n            if (!compareDeep(a[i], b[i]))\n                return false;\n    }\n    else {\n        for (let p in a)\n            if (!(p in b) || !compareDeep(a[p], b[p]))\n                return false;\n        for (let p in b)\n            if (!(p in a))\n                return false;\n    }\n    return true;\n}\n\n/**\nA mark is a piece of information that can be attached to a node,\nsuch as it being emphasized, in code font, or a link. It has a\ntype and optionally a set of attributes that provide further\ninformation (such as the target of the link). Marks are created\nthrough a `Schema`, which controls which types exist and which\nattributes they have.\n*/\nclass Mark {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The type of this mark.\n    */\n    type, \n    /**\n    The attributes associated with this mark.\n    */\n    attrs) {\n        this.type = type;\n        this.attrs = attrs;\n    }\n    /**\n    Given a set of marks, create a new set which contains this one as\n    well, in the right position. If this mark is already in the set,\n    the set itself is returned. If any marks that are set to be\n    [exclusive](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) with this mark are present,\n    those are replaced by this one.\n    */\n    addToSet(set) {\n        let copy, placed = false;\n        for (let i = 0; i < set.length; i++) {\n            let other = set[i];\n            if (this.eq(other))\n                return set;\n            if (this.type.excludes(other.type)) {\n                if (!copy)\n                    copy = set.slice(0, i);\n            }\n            else if (other.type.excludes(this.type)) {\n                return set;\n            }\n            else {\n                if (!placed && other.type.rank > this.type.rank) {\n                    if (!copy)\n                        copy = set.slice(0, i);\n                    copy.push(this);\n                    placed = true;\n                }\n                if (copy)\n                    copy.push(other);\n            }\n        }\n        if (!copy)\n            copy = set.slice();\n        if (!placed)\n            copy.push(this);\n        return copy;\n    }\n    /**\n    Remove this mark from the given set, returning a new set. If this\n    mark is not in the set, the set itself is returned.\n    */\n    removeFromSet(set) {\n        for (let i = 0; i < set.length; i++)\n            if (this.eq(set[i]))\n                return set.slice(0, i).concat(set.slice(i + 1));\n        return set;\n    }\n    /**\n    Test whether this mark is in the given set of marks.\n    */\n    isInSet(set) {\n        for (let i = 0; i < set.length; i++)\n            if (this.eq(set[i]))\n                return true;\n        return false;\n    }\n    /**\n    Test whether this mark has the same type and attributes as\n    another mark.\n    */\n    eq(other) {\n        return this == other ||\n            (this.type == other.type && compareDeep(this.attrs, other.attrs));\n    }\n    /**\n    Convert this mark to a JSON-serializeable representation.\n    */\n    toJSON() {\n        let obj = { type: this.type.name };\n        for (let _ in this.attrs) {\n            obj.attrs = this.attrs;\n            break;\n        }\n        return obj;\n    }\n    /**\n    Deserialize a mark from JSON.\n    */\n    static fromJSON(schema, json) {\n        if (!json)\n            throw new RangeError(\"Invalid input for Mark.fromJSON\");\n        let type = schema.marks[json.type];\n        if (!type)\n            throw new RangeError(`There is no mark type ${json.type} in this schema`);\n        let mark = type.create(json.attrs);\n        type.checkAttrs(mark.attrs);\n        return mark;\n    }\n    /**\n    Test whether two sets of marks are identical.\n    */\n    static sameSet(a, b) {\n        if (a == b)\n            return true;\n        if (a.length != b.length)\n            return false;\n        for (let i = 0; i < a.length; i++)\n            if (!a[i].eq(b[i]))\n                return false;\n        return true;\n    }\n    /**\n    Create a properly sorted mark set from null, a single mark, or an\n    unsorted array of marks.\n    */\n    static setFrom(marks) {\n        if (!marks || Array.isArray(marks) && marks.length == 0)\n            return Mark.none;\n        if (marks instanceof Mark)\n            return [marks];\n        let copy = marks.slice();\n        copy.sort((a, b) => a.type.rank - b.type.rank);\n        return copy;\n    }\n}\n/**\nThe empty set of marks.\n*/\nMark.none = [];\n\n/**\nError type raised by [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) when\ngiven an invalid replacement.\n*/\nclass ReplaceError extends Error {\n}\n/*\nReplaceError = function(this: any, message: string) {\n  let err = Error.call(this, message)\n  ;(err as any).__proto__ = ReplaceError.prototype\n  return err\n} as any\n\nReplaceError.prototype = Object.create(Error.prototype)\nReplaceError.prototype.constructor = ReplaceError\nReplaceError.prototype.name = \"ReplaceError\"\n*/\n/**\nA slice represents a piece cut out of a larger document. It\nstores not only a fragment, but also the depth up to which nodes on\nboth side are ‘open’ (cut through).\n*/\nclass Slice {\n    /**\n    Create a slice. When specifying a non-zero open depth, you must\n    make sure that there are nodes of at least that depth at the\n    appropriate side of the fragment—i.e. if the fragment is an\n    empty paragraph node, `openStart` and `openEnd` can't be greater\n    than 1.\n    \n    It is not necessary for the content of open nodes to conform to\n    the schema's content constraints, though it should be a valid\n    start/end/middle for such a node, depending on which sides are\n    open.\n    */\n    constructor(\n    /**\n    The slice's content.\n    */\n    content, \n    /**\n    The open depth at the start of the fragment.\n    */\n    openStart, \n    /**\n    The open depth at the end.\n    */\n    openEnd) {\n        this.content = content;\n        this.openStart = openStart;\n        this.openEnd = openEnd;\n    }\n    /**\n    The size this slice would add when inserted into a document.\n    */\n    get size() {\n        return this.content.size - this.openStart - this.openEnd;\n    }\n    /**\n    @internal\n    */\n    insertAt(pos, fragment) {\n        let content = insertInto(this.content, pos + this.openStart, fragment);\n        return content && new Slice(content, this.openStart, this.openEnd);\n    }\n    /**\n    @internal\n    */\n    removeBetween(from, to) {\n        return new Slice(removeRange(this.content, from + this.openStart, to + this.openStart), this.openStart, this.openEnd);\n    }\n    /**\n    Tests whether this slice is equal to another slice.\n    */\n    eq(other) {\n        return this.content.eq(other.content) && this.openStart == other.openStart && this.openEnd == other.openEnd;\n    }\n    /**\n    @internal\n    */\n    toString() {\n        return this.content + \"(\" + this.openStart + \",\" + this.openEnd + \")\";\n    }\n    /**\n    Convert a slice to a JSON-serializable representation.\n    */\n    toJSON() {\n        if (!this.content.size)\n            return null;\n        let json = { content: this.content.toJSON() };\n        if (this.openStart > 0)\n            json.openStart = this.openStart;\n        if (this.openEnd > 0)\n            json.openEnd = this.openEnd;\n        return json;\n    }\n    /**\n    Deserialize a slice from its JSON representation.\n    */\n    static fromJSON(schema, json) {\n        if (!json)\n            return Slice.empty;\n        let openStart = json.openStart || 0, openEnd = json.openEnd || 0;\n        if (typeof openStart != \"number\" || typeof openEnd != \"number\")\n            throw new RangeError(\"Invalid input for Slice.fromJSON\");\n        return new Slice(Fragment.fromJSON(schema, json.content), openStart, openEnd);\n    }\n    /**\n    Create a slice from a fragment by taking the maximum possible\n    open value on both side of the fragment.\n    */\n    static maxOpen(fragment, openIsolating = true) {\n        let openStart = 0, openEnd = 0;\n        for (let n = fragment.firstChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.firstChild)\n            openStart++;\n        for (let n = fragment.lastChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.lastChild)\n            openEnd++;\n        return new Slice(fragment, openStart, openEnd);\n    }\n}\n/**\nThe empty slice.\n*/\nSlice.empty = new Slice(Fragment.empty, 0, 0);\nfunction removeRange(content, from, to) {\n    let { index, offset } = content.findIndex(from), child = content.maybeChild(index);\n    let { index: indexTo, offset: offsetTo } = content.findIndex(to);\n    if (offset == from || child.isText) {\n        if (offsetTo != to && !content.child(indexTo).isText)\n            throw new RangeError(\"Removing non-flat range\");\n        return content.cut(0, from).append(content.cut(to));\n    }\n    if (index != indexTo)\n        throw new RangeError(\"Removing non-flat range\");\n    return content.replaceChild(index, child.copy(removeRange(child.content, from - offset - 1, to - offset - 1)));\n}\nfunction insertInto(content, dist, insert, parent) {\n    let { index, offset } = content.findIndex(dist), child = content.maybeChild(index);\n    if (offset == dist || child.isText) {\n        if (parent && !parent.canReplace(index, index, insert))\n            return null;\n        return content.cut(0, dist).append(insert).append(content.cut(dist));\n    }\n    let inner = insertInto(child.content, dist - offset - 1, insert, child);\n    return inner && content.replaceChild(index, child.copy(inner));\n}\nfunction replace($from, $to, slice) {\n    if (slice.openStart > $from.depth)\n        throw new ReplaceError(\"Inserted content deeper than insertion position\");\n    if ($from.depth - slice.openStart != $to.depth - slice.openEnd)\n        throw new ReplaceError(\"Inconsistent open depths\");\n    return replaceOuter($from, $to, slice, 0);\n}\nfunction replaceOuter($from, $to, slice, depth) {\n    let index = $from.index(depth), node = $from.node(depth);\n    if (index == $to.index(depth) && depth < $from.depth - slice.openStart) {\n        let inner = replaceOuter($from, $to, slice, depth + 1);\n        return node.copy(node.content.replaceChild(index, inner));\n    }\n    else if (!slice.content.size) {\n        return close(node, replaceTwoWay($from, $to, depth));\n    }\n    else if (!slice.openStart && !slice.openEnd && $from.depth == depth && $to.depth == depth) { // Simple, flat case\n        let parent = $from.parent, content = parent.content;\n        return close(parent, content.cut(0, $from.parentOffset).append(slice.content).append(content.cut($to.parentOffset)));\n    }\n    else {\n        let { start, end } = prepareSliceForReplace(slice, $from);\n        return close(node, replaceThreeWay($from, start, end, $to, depth));\n    }\n}\nfunction checkJoin(main, sub) {\n    if (!sub.type.compatibleContent(main.type))\n        throw new ReplaceError(\"Cannot join \" + sub.type.name + \" onto \" + main.type.name);\n}\nfunction joinable($before, $after, depth) {\n    let node = $before.node(depth);\n    checkJoin(node, $after.node(depth));\n    return node;\n}\nfunction addNode(child, target) {\n    let last = target.length - 1;\n    if (last >= 0 && child.isText && child.sameMarkup(target[last]))\n        target[last] = child.withText(target[last].text + child.text);\n    else\n        target.push(child);\n}\nfunction addRange($start, $end, depth, target) {\n    let node = ($end || $start).node(depth);\n    let startIndex = 0, endIndex = $end ? $end.index(depth) : node.childCount;\n    if ($start) {\n        startIndex = $start.index(depth);\n        if ($start.depth > depth) {\n            startIndex++;\n        }\n        else if ($start.textOffset) {\n            addNode($start.nodeAfter, target);\n            startIndex++;\n        }\n    }\n    for (let i = startIndex; i < endIndex; i++)\n        addNode(node.child(i), target);\n    if ($end && $end.depth == depth && $end.textOffset)\n        addNode($end.nodeBefore, target);\n}\nfunction close(node, content) {\n    node.type.checkContent(content);\n    return node.copy(content);\n}\nfunction replaceThreeWay($from, $start, $end, $to, depth) {\n    let openStart = $from.depth > depth && joinable($from, $start, depth + 1);\n    let openEnd = $to.depth > depth && joinable($end, $to, depth + 1);\n    let content = [];\n    addRange(null, $from, depth, content);\n    if (openStart && openEnd && $start.index(depth) == $end.index(depth)) {\n        checkJoin(openStart, openEnd);\n        addNode(close(openStart, replaceThreeWay($from, $start, $end, $to, depth + 1)), content);\n    }\n    else {\n        if (openStart)\n            addNode(close(openStart, replaceTwoWay($from, $start, depth + 1)), content);\n        addRange($start, $end, depth, content);\n        if (openEnd)\n            addNode(close(openEnd, replaceTwoWay($end, $to, depth + 1)), content);\n    }\n    addRange($to, null, depth, content);\n    return new Fragment(content);\n}\nfunction replaceTwoWay($from, $to, depth) {\n    let content = [];\n    addRange(null, $from, depth, content);\n    if ($from.depth > depth) {\n        let type = joinable($from, $to, depth + 1);\n        addNode(close(type, replaceTwoWay($from, $to, depth + 1)), content);\n    }\n    addRange($to, null, depth, content);\n    return new Fragment(content);\n}\nfunction prepareSliceForReplace(slice, $along) {\n    let extra = $along.depth - slice.openStart, parent = $along.node(extra);\n    let node = parent.copy(slice.content);\n    for (let i = extra - 1; i >= 0; i--)\n        node = $along.node(i).copy(Fragment.from(node));\n    return { start: node.resolveNoCache(slice.openStart + extra),\n        end: node.resolveNoCache(node.content.size - slice.openEnd - extra) };\n}\n\n/**\nYou can [_resolve_](https://prosemirror.net/docs/ref/#model.Node.resolve) a position to get more\ninformation about it. Objects of this class represent such a\nresolved position, providing various pieces of context\ninformation, and some helper methods.\n\nThroughout this interface, methods that take an optional `depth`\nparameter will interpret undefined as `this.depth` and negative\nnumbers as `this.depth + value`.\n*/\nclass ResolvedPos {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The position that was resolved.\n    */\n    pos, \n    /**\n    @internal\n    */\n    path, \n    /**\n    The offset this position has into its parent node.\n    */\n    parentOffset) {\n        this.pos = pos;\n        this.path = path;\n        this.parentOffset = parentOffset;\n        this.depth = path.length / 3 - 1;\n    }\n    /**\n    @internal\n    */\n    resolveDepth(val) {\n        if (val == null)\n            return this.depth;\n        if (val < 0)\n            return this.depth + val;\n        return val;\n    }\n    /**\n    The parent node that the position points into. Note that even if\n    a position points into a text node, that node is not considered\n    the parent—text nodes are ‘flat’ in this model, and have no content.\n    */\n    get parent() { return this.node(this.depth); }\n    /**\n    The root node in which the position was resolved.\n    */\n    get doc() { return this.node(0); }\n    /**\n    The ancestor node at the given level. `p.node(p.depth)` is the\n    same as `p.parent`.\n    */\n    node(depth) { return this.path[this.resolveDepth(depth) * 3]; }\n    /**\n    The index into the ancestor at the given level. If this points\n    at the 3rd node in the 2nd paragraph on the top level, for\n    example, `p.index(0)` is 1 and `p.index(1)` is 2.\n    */\n    index(depth) { return this.path[this.resolveDepth(depth) * 3 + 1]; }\n    /**\n    The index pointing after this position into the ancestor at the\n    given level.\n    */\n    indexAfter(depth) {\n        depth = this.resolveDepth(depth);\n        return this.index(depth) + (depth == this.depth && !this.textOffset ? 0 : 1);\n    }\n    /**\n    The (absolute) position at the start of the node at the given\n    level.\n    */\n    start(depth) {\n        depth = this.resolveDepth(depth);\n        return depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n    }\n    /**\n    The (absolute) position at the end of the node at the given\n    level.\n    */\n    end(depth) {\n        depth = this.resolveDepth(depth);\n        return this.start(depth) + this.node(depth).content.size;\n    }\n    /**\n    The (absolute) position directly before the wrapping node at the\n    given level, or, when `depth` is `this.depth + 1`, the original\n    position.\n    */\n    before(depth) {\n        depth = this.resolveDepth(depth);\n        if (!depth)\n            throw new RangeError(\"There is no position before the top-level node\");\n        return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1];\n    }\n    /**\n    The (absolute) position directly after the wrapping node at the\n    given level, or the original position when `depth` is `this.depth + 1`.\n    */\n    after(depth) {\n        depth = this.resolveDepth(depth);\n        if (!depth)\n            throw new RangeError(\"There is no position after the top-level node\");\n        return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1] + this.path[depth * 3].nodeSize;\n    }\n    /**\n    When this position points into a text node, this returns the\n    distance between the position and the start of the text node.\n    Will be zero for positions that point between nodes.\n    */\n    get textOffset() { return this.pos - this.path[this.path.length - 1]; }\n    /**\n    Get the node directly after the position, if any. If the position\n    points into a text node, only the part of that node after the\n    position is returned.\n    */\n    get nodeAfter() {\n        let parent = this.parent, index = this.index(this.depth);\n        if (index == parent.childCount)\n            return null;\n        let dOff = this.pos - this.path[this.path.length - 1], child = parent.child(index);\n        return dOff ? parent.child(index).cut(dOff) : child;\n    }\n    /**\n    Get the node directly before the position, if any. If the\n    position points into a text node, only the part of that node\n    before the position is returned.\n    */\n    get nodeBefore() {\n        let index = this.index(this.depth);\n        let dOff = this.pos - this.path[this.path.length - 1];\n        if (dOff)\n            return this.parent.child(index).cut(0, dOff);\n        return index == 0 ? null : this.parent.child(index - 1);\n    }\n    /**\n    Get the position at the given index in the parent node at the\n    given depth (which defaults to `this.depth`).\n    */\n    posAtIndex(index, depth) {\n        depth = this.resolveDepth(depth);\n        let node = this.path[depth * 3], pos = depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n        for (let i = 0; i < index; i++)\n            pos += node.child(i).nodeSize;\n        return pos;\n    }\n    /**\n    Get the marks at this position, factoring in the surrounding\n    marks' [`inclusive`](https://prosemirror.net/docs/ref/#model.MarkSpec.inclusive) property. If the\n    position is at the start of a non-empty node, the marks of the\n    node after it (if any) are returned.\n    */\n    marks() {\n        let parent = this.parent, index = this.index();\n        // In an empty parent, return the empty array\n        if (parent.content.size == 0)\n            return Mark.none;\n        // When inside a text node, just return the text node's marks\n        if (this.textOffset)\n            return parent.child(index).marks;\n        let main = parent.maybeChild(index - 1), other = parent.maybeChild(index);\n        // If the `after` flag is true of there is no node before, make\n        // the node after this position the main reference.\n        if (!main) {\n            let tmp = main;\n            main = other;\n            other = tmp;\n        }\n        // Use all marks in the main node, except those that have\n        // `inclusive` set to false and are not present in the other node.\n        let marks = main.marks;\n        for (var i = 0; i < marks.length; i++)\n            if (marks[i].type.spec.inclusive === false && (!other || !marks[i].isInSet(other.marks)))\n                marks = marks[i--].removeFromSet(marks);\n        return marks;\n    }\n    /**\n    Get the marks after the current position, if any, except those\n    that are non-inclusive and not present at position `$end`. This\n    is mostly useful for getting the set of marks to preserve after a\n    deletion. Will return `null` if this position is at the end of\n    its parent node or its parent node isn't a textblock (in which\n    case no marks should be preserved).\n    */\n    marksAcross($end) {\n        let after = this.parent.maybeChild(this.index());\n        if (!after || !after.isInline)\n            return null;\n        let marks = after.marks, next = $end.parent.maybeChild($end.index());\n        for (var i = 0; i < marks.length; i++)\n            if (marks[i].type.spec.inclusive === false && (!next || !marks[i].isInSet(next.marks)))\n                marks = marks[i--].removeFromSet(marks);\n        return marks;\n    }\n    /**\n    The depth up to which this position and the given (non-resolved)\n    position share the same parent nodes.\n    */\n    sharedDepth(pos) {\n        for (let depth = this.depth; depth > 0; depth--)\n            if (this.start(depth) <= pos && this.end(depth) >= pos)\n                return depth;\n        return 0;\n    }\n    /**\n    Returns a range based on the place where this position and the\n    given position diverge around block content. If both point into\n    the same textblock, for example, a range around that textblock\n    will be returned. If they point into different blocks, the range\n    around those blocks in their shared ancestor is returned. You can\n    pass in an optional predicate that will be called with a parent\n    node to see if a range into that parent is acceptable.\n    */\n    blockRange(other = this, pred) {\n        if (other.pos < this.pos)\n            return other.blockRange(this);\n        for (let d = this.depth - (this.parent.inlineContent || this.pos == other.pos ? 1 : 0); d >= 0; d--)\n            if (other.pos <= this.end(d) && (!pred || pred(this.node(d))))\n                return new NodeRange(this, other, d);\n        return null;\n    }\n    /**\n    Query whether the given position shares the same parent node.\n    */\n    sameParent(other) {\n        return this.pos - this.parentOffset == other.pos - other.parentOffset;\n    }\n    /**\n    Return the greater of this and the given position.\n    */\n    max(other) {\n        return other.pos > this.pos ? other : this;\n    }\n    /**\n    Return the smaller of this and the given position.\n    */\n    min(other) {\n        return other.pos < this.pos ? other : this;\n    }\n    /**\n    @internal\n    */\n    toString() {\n        let str = \"\";\n        for (let i = 1; i <= this.depth; i++)\n            str += (str ? \"/\" : \"\") + this.node(i).type.name + \"_\" + this.index(i - 1);\n        return str + \":\" + this.parentOffset;\n    }\n    /**\n    @internal\n    */\n    static resolve(doc, pos) {\n        if (!(pos >= 0 && pos <= doc.content.size))\n            throw new RangeError(\"Position \" + pos + \" out of range\");\n        let path = [];\n        let start = 0, parentOffset = pos;\n        for (let node = doc;;) {\n            let { index, offset } = node.content.findIndex(parentOffset);\n            let rem = parentOffset - offset;\n            path.push(node, index, start + offset);\n            if (!rem)\n                break;\n            node = node.child(index);\n            if (node.isText)\n                break;\n            parentOffset = rem - 1;\n            start += offset + 1;\n        }\n        return new ResolvedPos(pos, path, parentOffset);\n    }\n    /**\n    @internal\n    */\n    static resolveCached(doc, pos) {\n        let cache = resolveCache.get(doc);\n        if (cache) {\n            for (let i = 0; i < cache.elts.length; i++) {\n                let elt = cache.elts[i];\n                if (elt.pos == pos)\n                    return elt;\n            }\n        }\n        else {\n            resolveCache.set(doc, cache = new ResolveCache);\n        }\n        let result = cache.elts[cache.i] = ResolvedPos.resolve(doc, pos);\n        cache.i = (cache.i + 1) % resolveCacheSize;\n        return result;\n    }\n}\nclass ResolveCache {\n    constructor() {\n        this.elts = [];\n        this.i = 0;\n    }\n}\nconst resolveCacheSize = 12, resolveCache = new WeakMap();\n/**\nRepresents a flat range of content, i.e. one that starts and\nends in the same node.\n*/\nclass NodeRange {\n    /**\n    Construct a node range. `$from` and `$to` should point into the\n    same node until at least the given `depth`, since a node range\n    denotes an adjacent set of nodes in a single parent node.\n    */\n    constructor(\n    /**\n    A resolved position along the start of the content. May have a\n    `depth` greater than this object's `depth` property, since\n    these are the positions that were used to compute the range,\n    not re-resolved positions directly at its boundaries.\n    */\n    $from, \n    /**\n    A position along the end of the content. See\n    caveat for [`$from`](https://prosemirror.net/docs/ref/#model.NodeRange.$from).\n    */\n    $to, \n    /**\n    The depth of the node that this range points into.\n    */\n    depth) {\n        this.$from = $from;\n        this.$to = $to;\n        this.depth = depth;\n    }\n    /**\n    The position at the start of the range.\n    */\n    get start() { return this.$from.before(this.depth + 1); }\n    /**\n    The position at the end of the range.\n    */\n    get end() { return this.$to.after(this.depth + 1); }\n    /**\n    The parent node that the range points into.\n    */\n    get parent() { return this.$from.node(this.depth); }\n    /**\n    The start index of the range in the parent node.\n    */\n    get startIndex() { return this.$from.index(this.depth); }\n    /**\n    The end index of the range in the parent node.\n    */\n    get endIndex() { return this.$to.indexAfter(this.depth); }\n}\n\nconst emptyAttrs = Object.create(null);\n/**\nThis class represents a node in the tree that makes up a\nProseMirror document. So a document is an instance of `Node`, with\nchildren that are also instances of `Node`.\n\nNodes are persistent data structures. Instead of changing them, you\ncreate new ones with the content you want. Old ones keep pointing\nat the old document shape. This is made cheaper by sharing\nstructure between the old and new data as much as possible, which a\ntree shape like this (without back pointers) makes easy.\n\n**Do not** directly mutate the properties of a `Node` object. See\n[the guide](https://prosemirror.net/docs/guide/#doc) for more information.\n*/\nclass Node {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The type of node that this is.\n    */\n    type, \n    /**\n    An object mapping attribute names to values. The kind of\n    attributes allowed and required are\n    [determined](https://prosemirror.net/docs/ref/#model.NodeSpec.attrs) by the node type.\n    */\n    attrs, \n    // A fragment holding the node's children.\n    content, \n    /**\n    The marks (things like whether it is emphasized or part of a\n    link) applied to this node.\n    */\n    marks = Mark.none) {\n        this.type = type;\n        this.attrs = attrs;\n        this.marks = marks;\n        this.content = content || Fragment.empty;\n    }\n    /**\n    The array of this node's child nodes.\n    */\n    get children() { return this.content.content; }\n    /**\n    The size of this node, as defined by the integer-based [indexing\n    scheme](https://prosemirror.net/docs/guide/#doc.indexing). For text nodes, this is the\n    amount of characters. For other leaf nodes, it is one. For\n    non-leaf nodes, it is the size of the content plus two (the\n    start and end token).\n    */\n    get nodeSize() { return this.isLeaf ? 1 : 2 + this.content.size; }\n    /**\n    The number of children that the node has.\n    */\n    get childCount() { return this.content.childCount; }\n    /**\n    Get the child node at the given index. Raises an error when the\n    index is out of range.\n    */\n    child(index) { return this.content.child(index); }\n    /**\n    Get the child node at the given index, if it exists.\n    */\n    maybeChild(index) { return this.content.maybeChild(index); }\n    /**\n    Call `f` for every child node, passing the node, its offset\n    into this parent node, and its index.\n    */\n    forEach(f) { this.content.forEach(f); }\n    /**\n    Invoke a callback for all descendant nodes recursively between\n    the given two positions that are relative to start of this\n    node's content. The callback is invoked with the node, its\n    position relative to the original node (method receiver),\n    its parent node, and its child index. When the callback returns\n    false for a given node, that node's children will not be\n    recursed over. The last parameter can be used to specify a\n    starting position to count from.\n    */\n    nodesBetween(from, to, f, startPos = 0) {\n        this.content.nodesBetween(from, to, f, startPos, this);\n    }\n    /**\n    Call the given callback for every descendant node. Doesn't\n    descend into a node when the callback returns `false`.\n    */\n    descendants(f) {\n        this.nodesBetween(0, this.content.size, f);\n    }\n    /**\n    Concatenates all the text nodes found in this fragment and its\n    children.\n    */\n    get textContent() {\n        return (this.isLeaf && this.type.spec.leafText)\n            ? this.type.spec.leafText(this)\n            : this.textBetween(0, this.content.size, \"\");\n    }\n    /**\n    Get all text between positions `from` and `to`. When\n    `blockSeparator` is given, it will be inserted to separate text\n    from different block nodes. If `leafText` is given, it'll be\n    inserted for every non-text leaf node encountered, otherwise\n    [`leafText`](https://prosemirror.net/docs/ref/#model.NodeSpec.leafText) will be used.\n    */\n    textBetween(from, to, blockSeparator, leafText) {\n        return this.content.textBetween(from, to, blockSeparator, leafText);\n    }\n    /**\n    Returns this node's first child, or `null` if there are no\n    children.\n    */\n    get firstChild() { return this.content.firstChild; }\n    /**\n    Returns this node's last child, or `null` if there are no\n    children.\n    */\n    get lastChild() { return this.content.lastChild; }\n    /**\n    Test whether two nodes represent the same piece of document.\n    */\n    eq(other) {\n        return this == other || (this.sameMarkup(other) && this.content.eq(other.content));\n    }\n    /**\n    Compare the markup (type, attributes, and marks) of this node to\n    those of another. Returns `true` if both have the same markup.\n    */\n    sameMarkup(other) {\n        return this.hasMarkup(other.type, other.attrs, other.marks);\n    }\n    /**\n    Check whether this node's markup correspond to the given type,\n    attributes, and marks.\n    */\n    hasMarkup(type, attrs, marks) {\n        return this.type == type &&\n            compareDeep(this.attrs, attrs || type.defaultAttrs || emptyAttrs) &&\n            Mark.sameSet(this.marks, marks || Mark.none);\n    }\n    /**\n    Create a new node with the same markup as this node, containing\n    the given content (or empty, if no content is given).\n    */\n    copy(content = null) {\n        if (content == this.content)\n            return this;\n        return new Node(this.type, this.attrs, content, this.marks);\n    }\n    /**\n    Create a copy of this node, with the given set of marks instead\n    of the node's own marks.\n    */\n    mark(marks) {\n        return marks == this.marks ? this : new Node(this.type, this.attrs, this.content, marks);\n    }\n    /**\n    Create a copy of this node with only the content between the\n    given positions. If `to` is not given, it defaults to the end of\n    the node.\n    */\n    cut(from, to = this.content.size) {\n        if (from == 0 && to == this.content.size)\n            return this;\n        return this.copy(this.content.cut(from, to));\n    }\n    /**\n    Cut out the part of the document between the given positions, and\n    return it as a `Slice` object.\n    */\n    slice(from, to = this.content.size, includeParents = false) {\n        if (from == to)\n            return Slice.empty;\n        let $from = this.resolve(from), $to = this.resolve(to);\n        let depth = includeParents ? 0 : $from.sharedDepth(to);\n        let start = $from.start(depth), node = $from.node(depth);\n        let content = node.content.cut($from.pos - start, $to.pos - start);\n        return new Slice(content, $from.depth - depth, $to.depth - depth);\n    }\n    /**\n    Replace the part of the document between the given positions with\n    the given slice. The slice must 'fit', meaning its open sides\n    must be able to connect to the surrounding content, and its\n    content nodes must be valid children for the node they are placed\n    into. If any of this is violated, an error of type\n    [`ReplaceError`](https://prosemirror.net/docs/ref/#model.ReplaceError) is thrown.\n    */\n    replace(from, to, slice) {\n        return replace(this.resolve(from), this.resolve(to), slice);\n    }\n    /**\n    Find the node directly after the given position.\n    */\n    nodeAt(pos) {\n        for (let node = this;;) {\n            let { index, offset } = node.content.findIndex(pos);\n            node = node.maybeChild(index);\n            if (!node)\n                return null;\n            if (offset == pos || node.isText)\n                return node;\n            pos -= offset + 1;\n        }\n    }\n    /**\n    Find the (direct) child node after the given offset, if any,\n    and return it along with its index and offset relative to this\n    node.\n    */\n    childAfter(pos) {\n        let { index, offset } = this.content.findIndex(pos);\n        return { node: this.content.maybeChild(index), index, offset };\n    }\n    /**\n    Find the (direct) child node before the given offset, if any,\n    and return it along with its index and offset relative to this\n    node.\n    */\n    childBefore(pos) {\n        if (pos == 0)\n            return { node: null, index: 0, offset: 0 };\n        let { index, offset } = this.content.findIndex(pos);\n        if (offset < pos)\n            return { node: this.content.child(index), index, offset };\n        let node = this.content.child(index - 1);\n        return { node, index: index - 1, offset: offset - node.nodeSize };\n    }\n    /**\n    Resolve the given position in the document, returning an\n    [object](https://prosemirror.net/docs/ref/#model.ResolvedPos) with information about its context.\n    */\n    resolve(pos) { return ResolvedPos.resolveCached(this, pos); }\n    /**\n    @internal\n    */\n    resolveNoCache(pos) { return ResolvedPos.resolve(this, pos); }\n    /**\n    Test whether a given mark or mark type occurs in this document\n    between the two given positions.\n    */\n    rangeHasMark(from, to, type) {\n        let found = false;\n        if (to > from)\n            this.nodesBetween(from, to, node => {\n                if (type.isInSet(node.marks))\n                    found = true;\n                return !found;\n            });\n        return found;\n    }\n    /**\n    True when this is a block (non-inline node)\n    */\n    get isBlock() { return this.type.isBlock; }\n    /**\n    True when this is a textblock node, a block node with inline\n    content.\n    */\n    get isTextblock() { return this.type.isTextblock; }\n    /**\n    True when this node allows inline content.\n    */\n    get inlineContent() { return this.type.inlineContent; }\n    /**\n    True when this is an inline node (a text node or a node that can\n    appear among text).\n    */\n    get isInline() { return this.type.isInline; }\n    /**\n    True when this is a text node.\n    */\n    get isText() { return this.type.isText; }\n    /**\n    True when this is a leaf node.\n    */\n    get isLeaf() { return this.type.isLeaf; }\n    /**\n    True when this is an atom, i.e. when it does not have directly\n    editable content. This is usually the same as `isLeaf`, but can\n    be configured with the [`atom` property](https://prosemirror.net/docs/ref/#model.NodeSpec.atom)\n    on a node's spec (typically used when the node is displayed as\n    an uneditable [node view](https://prosemirror.net/docs/ref/#view.NodeView)).\n    */\n    get isAtom() { return this.type.isAtom; }\n    /**\n    Return a string representation of this node for debugging\n    purposes.\n    */\n    toString() {\n        if (this.type.spec.toDebugString)\n            return this.type.spec.toDebugString(this);\n        let name = this.type.name;\n        if (this.content.size)\n            name += \"(\" + this.content.toStringInner() + \")\";\n        return wrapMarks(this.marks, name);\n    }\n    /**\n    Get the content match in this node at the given index.\n    */\n    contentMatchAt(index) {\n        let match = this.type.contentMatch.matchFragment(this.content, 0, index);\n        if (!match)\n            throw new Error(\"Called contentMatchAt on a node with invalid content\");\n        return match;\n    }\n    /**\n    Test whether replacing the range between `from` and `to` (by\n    child index) with the given replacement fragment (which defaults\n    to the empty fragment) would leave the node's content valid. You\n    can optionally pass `start` and `end` indices into the\n    replacement fragment.\n    */\n    canReplace(from, to, replacement = Fragment.empty, start = 0, end = replacement.childCount) {\n        let one = this.contentMatchAt(from).matchFragment(replacement, start, end);\n        let two = one && one.matchFragment(this.content, to);\n        if (!two || !two.validEnd)\n            return false;\n        for (let i = start; i < end; i++)\n            if (!this.type.allowsMarks(replacement.child(i).marks))\n                return false;\n        return true;\n    }\n    /**\n    Test whether replacing the range `from` to `to` (by index) with\n    a node of the given type would leave the node's content valid.\n    */\n    canReplaceWith(from, to, type, marks) {\n        if (marks && !this.type.allowsMarks(marks))\n            return false;\n        let start = this.contentMatchAt(from).matchType(type);\n        let end = start && start.matchFragment(this.content, to);\n        return end ? end.validEnd : false;\n    }\n    /**\n    Test whether the given node's content could be appended to this\n    node. If that node is empty, this will only return true if there\n    is at least one node type that can appear in both nodes (to avoid\n    merging completely incompatible nodes).\n    */\n    canAppend(other) {\n        if (other.content.size)\n            return this.canReplace(this.childCount, this.childCount, other.content);\n        else\n            return this.type.compatibleContent(other.type);\n    }\n    /**\n    Check whether this node and its descendants conform to the\n    schema, and raise an exception when they do not.\n    */\n    check() {\n        this.type.checkContent(this.content);\n        this.type.checkAttrs(this.attrs);\n        let copy = Mark.none;\n        for (let i = 0; i < this.marks.length; i++) {\n            let mark = this.marks[i];\n            mark.type.checkAttrs(mark.attrs);\n            copy = mark.addToSet(copy);\n        }\n        if (!Mark.sameSet(copy, this.marks))\n            throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(m => m.type.name)}`);\n        this.content.forEach(node => node.check());\n    }\n    /**\n    Return a JSON-serializeable representation of this node.\n    */\n    toJSON() {\n        let obj = { type: this.type.name };\n        for (let _ in this.attrs) {\n            obj.attrs = this.attrs;\n            break;\n        }\n        if (this.content.size)\n            obj.content = this.content.toJSON();\n        if (this.marks.length)\n            obj.marks = this.marks.map(n => n.toJSON());\n        return obj;\n    }\n    /**\n    Deserialize a node from its JSON representation.\n    */\n    static fromJSON(schema, json) {\n        if (!json)\n            throw new RangeError(\"Invalid input for Node.fromJSON\");\n        let marks = undefined;\n        if (json.marks) {\n            if (!Array.isArray(json.marks))\n                throw new RangeError(\"Invalid mark data for Node.fromJSON\");\n            marks = json.marks.map(schema.markFromJSON);\n        }\n        if (json.type == \"text\") {\n            if (typeof json.text != \"string\")\n                throw new RangeError(\"Invalid text node in JSON\");\n            return schema.text(json.text, marks);\n        }\n        let content = Fragment.fromJSON(schema, json.content);\n        let node = schema.nodeType(json.type).create(json.attrs, content, marks);\n        node.type.checkAttrs(node.attrs);\n        return node;\n    }\n}\nNode.prototype.text = undefined;\nclass TextNode extends Node {\n    /**\n    @internal\n    */\n    constructor(type, attrs, content, marks) {\n        super(type, attrs, null, marks);\n        if (!content)\n            throw new RangeError(\"Empty text nodes are not allowed\");\n        this.text = content;\n    }\n    toString() {\n        if (this.type.spec.toDebugString)\n            return this.type.spec.toDebugString(this);\n        return wrapMarks(this.marks, JSON.stringify(this.text));\n    }\n    get textContent() { return this.text; }\n    textBetween(from, to) { return this.text.slice(from, to); }\n    get nodeSize() { return this.text.length; }\n    mark(marks) {\n        return marks == this.marks ? this : new TextNode(this.type, this.attrs, this.text, marks);\n    }\n    withText(text) {\n        if (text == this.text)\n            return this;\n        return new TextNode(this.type, this.attrs, text, this.marks);\n    }\n    cut(from = 0, to = this.text.length) {\n        if (from == 0 && to == this.text.length)\n            return this;\n        return this.withText(this.text.slice(from, to));\n    }\n    eq(other) {\n        return this.sameMarkup(other) && this.text == other.text;\n    }\n    toJSON() {\n        let base = super.toJSON();\n        base.text = this.text;\n        return base;\n    }\n}\nfunction wrapMarks(marks, str) {\n    for (let i = marks.length - 1; i >= 0; i--)\n        str = marks[i].type.name + \"(\" + str + \")\";\n    return str;\n}\n\n/**\nInstances of this class represent a match state of a node type's\n[content expression](https://prosemirror.net/docs/ref/#model.NodeSpec.content), and can be used to\nfind out whether further content matches here, and whether a given\nposition is a valid end of the node.\n*/\nclass ContentMatch {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    True when this match state represents a valid end of the node.\n    */\n    validEnd) {\n        this.validEnd = validEnd;\n        /**\n        @internal\n        */\n        this.next = [];\n        /**\n        @internal\n        */\n        this.wrapCache = [];\n    }\n    /**\n    @internal\n    */\n    static parse(string, nodeTypes) {\n        let stream = new TokenStream(string, nodeTypes);\n        if (stream.next == null)\n            return ContentMatch.empty;\n        let expr = parseExpr(stream);\n        if (stream.next)\n            stream.err(\"Unexpected trailing text\");\n        let match = dfa(nfa(expr));\n        checkForDeadEnds(match, stream);\n        return match;\n    }\n    /**\n    Match a node type, returning a match after that node if\n    successful.\n    */\n    matchType(type) {\n        for (let i = 0; i < this.next.length; i++)\n            if (this.next[i].type == type)\n                return this.next[i].next;\n        return null;\n    }\n    /**\n    Try to match a fragment. Returns the resulting match when\n    successful.\n    */\n    matchFragment(frag, start = 0, end = frag.childCount) {\n        let cur = this;\n        for (let i = start; cur && i < end; i++)\n            cur = cur.matchType(frag.child(i).type);\n        return cur;\n    }\n    /**\n    @internal\n    */\n    get inlineContent() {\n        return this.next.length != 0 && this.next[0].type.isInline;\n    }\n    /**\n    Get the first matching node type at this match position that can\n    be generated.\n    */\n    get defaultType() {\n        for (let i = 0; i < this.next.length; i++) {\n            let { type } = this.next[i];\n            if (!(type.isText || type.hasRequiredAttrs()))\n                return type;\n        }\n        return null;\n    }\n    /**\n    @internal\n    */\n    compatible(other) {\n        for (let i = 0; i < this.next.length; i++)\n            for (let j = 0; j < other.next.length; j++)\n                if (this.next[i].type == other.next[j].type)\n                    return true;\n        return false;\n    }\n    /**\n    Try to match the given fragment, and if that fails, see if it can\n    be made to match by inserting nodes in front of it. When\n    successful, return a fragment of inserted nodes (which may be\n    empty if nothing had to be inserted). When `toEnd` is true, only\n    return a fragment if the resulting match goes to the end of the\n    content expression.\n    */\n    fillBefore(after, toEnd = false, startIndex = 0) {\n        let seen = [this];\n        function search(match, types) {\n            let finished = match.matchFragment(after, startIndex);\n            if (finished && (!toEnd || finished.validEnd))\n                return Fragment.from(types.map(tp => tp.createAndFill()));\n            for (let i = 0; i < match.next.length; i++) {\n                let { type, next } = match.next[i];\n                if (!(type.isText || type.hasRequiredAttrs()) && seen.indexOf(next) == -1) {\n                    seen.push(next);\n                    let found = search(next, types.concat(type));\n                    if (found)\n                        return found;\n                }\n            }\n            return null;\n        }\n        return search(this, []);\n    }\n    /**\n    Find a set of wrapping node types that would allow a node of the\n    given type to appear at this position. The result may be empty\n    (when it fits directly) and will be null when no such wrapping\n    exists.\n    */\n    findWrapping(target) {\n        for (let i = 0; i < this.wrapCache.length; i += 2)\n            if (this.wrapCache[i] == target)\n                return this.wrapCache[i + 1];\n        let computed = this.computeWrapping(target);\n        this.wrapCache.push(target, computed);\n        return computed;\n    }\n    /**\n    @internal\n    */\n    computeWrapping(target) {\n        let seen = Object.create(null), active = [{ match: this, type: null, via: null }];\n        while (active.length) {\n            let current = active.shift(), match = current.match;\n            if (match.matchType(target)) {\n                let result = [];\n                for (let obj = current; obj.type; obj = obj.via)\n                    result.push(obj.type);\n                return result.reverse();\n            }\n            for (let i = 0; i < match.next.length; i++) {\n                let { type, next } = match.next[i];\n                if (!type.isLeaf && !type.hasRequiredAttrs() && !(type.name in seen) && (!current.type || next.validEnd)) {\n                    active.push({ match: type.contentMatch, type, via: current });\n                    seen[type.name] = true;\n                }\n            }\n        }\n        return null;\n    }\n    /**\n    The number of outgoing edges this node has in the finite\n    automaton that describes the content expression.\n    */\n    get edgeCount() {\n        return this.next.length;\n    }\n    /**\n    Get the _n_​th outgoing edge from this node in the finite\n    automaton that describes the content expression.\n    */\n    edge(n) {\n        if (n >= this.next.length)\n            throw new RangeError(`There's no ${n}th edge in this content match`);\n        return this.next[n];\n    }\n    /**\n    @internal\n    */\n    toString() {\n        let seen = [];\n        function scan(m) {\n            seen.push(m);\n            for (let i = 0; i < m.next.length; i++)\n                if (seen.indexOf(m.next[i].next) == -1)\n                    scan(m.next[i].next);\n        }\n        scan(this);\n        return seen.map((m, i) => {\n            let out = i + (m.validEnd ? \"*\" : \" \") + \" \";\n            for (let i = 0; i < m.next.length; i++)\n                out += (i ? \", \" : \"\") + m.next[i].type.name + \"->\" + seen.indexOf(m.next[i].next);\n            return out;\n        }).join(\"\\n\");\n    }\n}\n/**\n@internal\n*/\nContentMatch.empty = new ContentMatch(true);\nclass TokenStream {\n    constructor(string, nodeTypes) {\n        this.string = string;\n        this.nodeTypes = nodeTypes;\n        this.inline = null;\n        this.pos = 0;\n        this.tokens = string.split(/\\s*(?=\\b|\\W|$)/);\n        if (this.tokens[this.tokens.length - 1] == \"\")\n            this.tokens.pop();\n        if (this.tokens[0] == \"\")\n            this.tokens.shift();\n    }\n    get next() { return this.tokens[this.pos]; }\n    eat(tok) { return this.next == tok && (this.pos++ || true); }\n    err(str) { throw new SyntaxError(str + \" (in content expression '\" + this.string + \"')\"); }\n}\nfunction parseExpr(stream) {\n    let exprs = [];\n    do {\n        exprs.push(parseExprSeq(stream));\n    } while (stream.eat(\"|\"));\n    return exprs.length == 1 ? exprs[0] : { type: \"choice\", exprs };\n}\nfunction parseExprSeq(stream) {\n    let exprs = [];\n    do {\n        exprs.push(parseExprSubscript(stream));\n    } while (stream.next && stream.next != \")\" && stream.next != \"|\");\n    return exprs.length == 1 ? exprs[0] : { type: \"seq\", exprs };\n}\nfunction parseExprSubscript(stream) {\n    let expr = parseExprAtom(stream);\n    for (;;) {\n        if (stream.eat(\"+\"))\n            expr = { type: \"plus\", expr };\n        else if (stream.eat(\"*\"))\n            expr = { type: \"star\", expr };\n        else if (stream.eat(\"?\"))\n            expr = { type: \"opt\", expr };\n        else if (stream.eat(\"{\"))\n            expr = parseExprRange(stream, expr);\n        else\n            break;\n    }\n    return expr;\n}\nfunction parseNum(stream) {\n    if (/\\D/.test(stream.next))\n        stream.err(\"Expected number, got '\" + stream.next + \"'\");\n    let result = Number(stream.next);\n    stream.pos++;\n    return result;\n}\nfunction parseExprRange(stream, expr) {\n    let min = parseNum(stream), max = min;\n    if (stream.eat(\",\")) {\n        if (stream.next != \"}\")\n            max = parseNum(stream);\n        else\n            max = -1;\n    }\n    if (!stream.eat(\"}\"))\n        stream.err(\"Unclosed braced range\");\n    return { type: \"range\", min, max, expr };\n}\nfunction resolveName(stream, name) {\n    let types = stream.nodeTypes, type = types[name];\n    if (type)\n        return [type];\n    let result = [];\n    for (let typeName in types) {\n        let type = types[typeName];\n        if (type.isInGroup(name))\n            result.push(type);\n    }\n    if (result.length == 0)\n        stream.err(\"No node type or group '\" + name + \"' found\");\n    return result;\n}\nfunction parseExprAtom(stream) {\n    if (stream.eat(\"(\")) {\n        let expr = parseExpr(stream);\n        if (!stream.eat(\")\"))\n            stream.err(\"Missing closing paren\");\n        return expr;\n    }\n    else if (!/\\W/.test(stream.next)) {\n        let exprs = resolveName(stream, stream.next).map(type => {\n            if (stream.inline == null)\n                stream.inline = type.isInline;\n            else if (stream.inline != type.isInline)\n                stream.err(\"Mixing inline and block content\");\n            return { type: \"name\", value: type };\n        });\n        stream.pos++;\n        return exprs.length == 1 ? exprs[0] : { type: \"choice\", exprs };\n    }\n    else {\n        stream.err(\"Unexpected token '\" + stream.next + \"'\");\n    }\n}\n// Construct an NFA from an expression as returned by the parser. The\n// NFA is represented as an array of states, which are themselves\n// arrays of edges, which are `{term, to}` objects. The first state is\n// the entry state and the last node is the success state.\n//\n// Note that unlike typical NFAs, the edge ordering in this one is\n// significant, in that it is used to contruct filler content when\n// necessary.\nfunction nfa(expr) {\n    let nfa = [[]];\n    connect(compile(expr, 0), node());\n    return nfa;\n    function node() { return nfa.push([]) - 1; }\n    function edge(from, to, term) {\n        let edge = { term, to };\n        nfa[from].push(edge);\n        return edge;\n    }\n    function connect(edges, to) {\n        edges.forEach(edge => edge.to = to);\n    }\n    function compile(expr, from) {\n        if (expr.type == \"choice\") {\n            return expr.exprs.reduce((out, expr) => out.concat(compile(expr, from)), []);\n        }\n        else if (expr.type == \"seq\") {\n            for (let i = 0;; i++) {\n                let next = compile(expr.exprs[i], from);\n                if (i == expr.exprs.length - 1)\n                    return next;\n                connect(next, from = node());\n            }\n        }\n        else if (expr.type == \"star\") {\n            let loop = node();\n            edge(from, loop);\n            connect(compile(expr.expr, loop), loop);\n            return [edge(loop)];\n        }\n        else if (expr.type == \"plus\") {\n            let loop = node();\n            connect(compile(expr.expr, from), loop);\n            connect(compile(expr.expr, loop), loop);\n            return [edge(loop)];\n        }\n        else if (expr.type == \"opt\") {\n            return [edge(from)].concat(compile(expr.expr, from));\n        }\n        else if (expr.type == \"range\") {\n            let cur = from;\n            for (let i = 0; i < expr.min; i++) {\n                let next = node();\n                connect(compile(expr.expr, cur), next);\n                cur = next;\n            }\n            if (expr.max == -1) {\n                connect(compile(expr.expr, cur), cur);\n            }\n            else {\n                for (let i = expr.min; i < expr.max; i++) {\n                    let next = node();\n                    edge(cur, next);\n                    connect(compile(expr.expr, cur), next);\n                    cur = next;\n                }\n            }\n            return [edge(cur)];\n        }\n        else if (expr.type == \"name\") {\n            return [edge(from, undefined, expr.value)];\n        }\n        else {\n            throw new Error(\"Unknown expr type\");\n        }\n    }\n}\nfunction cmp(a, b) { return b - a; }\n// Get the set of nodes reachable by null edges from `node`. Omit\n// nodes with only a single null-out-edge, since they may lead to\n// needless duplicated nodes.\nfunction nullFrom(nfa, node) {\n    let result = [];\n    scan(node);\n    return result.sort(cmp);\n    function scan(node) {\n        let edges = nfa[node];\n        if (edges.length == 1 && !edges[0].term)\n            return scan(edges[0].to);\n        result.push(node);\n        for (let i = 0; i < edges.length; i++) {\n            let { term, to } = edges[i];\n            if (!term && result.indexOf(to) == -1)\n                scan(to);\n        }\n    }\n}\n// Compiles an NFA as produced by `nfa` into a DFA, modeled as a set\n// of state objects (`ContentMatch` instances) with transitions\n// between them.\nfunction dfa(nfa) {\n    let labeled = Object.create(null);\n    return explore(nullFrom(nfa, 0));\n    function explore(states) {\n        let out = [];\n        states.forEach(node => {\n            nfa[node].forEach(({ term, to }) => {\n                if (!term)\n                    return;\n                let set;\n                for (let i = 0; i < out.length; i++)\n                    if (out[i][0] == term)\n                        set = out[i][1];\n                nullFrom(nfa, to).forEach(node => {\n                    if (!set)\n                        out.push([term, set = []]);\n                    if (set.indexOf(node) == -1)\n                        set.push(node);\n                });\n            });\n        });\n        let state = labeled[states.join(\",\")] = new ContentMatch(states.indexOf(nfa.length - 1) > -1);\n        for (let i = 0; i < out.length; i++) {\n            let states = out[i][1].sort(cmp);\n            state.next.push({ type: out[i][0], next: labeled[states.join(\",\")] || explore(states) });\n        }\n        return state;\n    }\n}\nfunction checkForDeadEnds(match, stream) {\n    for (let i = 0, work = [match]; i < work.length; i++) {\n        let state = work[i], dead = !state.validEnd, nodes = [];\n        for (let j = 0; j < state.next.length; j++) {\n            let { type, next } = state.next[j];\n            nodes.push(type.name);\n            if (dead && !(type.isText || type.hasRequiredAttrs()))\n                dead = false;\n            if (work.indexOf(next) == -1)\n                work.push(next);\n        }\n        if (dead)\n            stream.err(\"Only non-generatable nodes (\" + nodes.join(\", \") + \") in a required position (see https://prosemirror.net/docs/guide/#generatable)\");\n    }\n}\n\n// For node types where all attrs have a default value (or which don't\n// have any attributes), build up a single reusable default attribute\n// object, and use it for all nodes that don't specify specific\n// attributes.\nfunction defaultAttrs(attrs) {\n    let defaults = Object.create(null);\n    for (let attrName in attrs) {\n        let attr = attrs[attrName];\n        if (!attr.hasDefault)\n            return null;\n        defaults[attrName] = attr.default;\n    }\n    return defaults;\n}\nfunction computeAttrs(attrs, value) {\n    let built = Object.create(null);\n    for (let name in attrs) {\n        let given = value && value[name];\n        if (given === undefined) {\n            let attr = attrs[name];\n            if (attr.hasDefault)\n                given = attr.default;\n            else\n                throw new RangeError(\"No value supplied for attribute \" + name);\n        }\n        built[name] = given;\n    }\n    return built;\n}\nfunction checkAttrs(attrs, values, type, name) {\n    for (let name in values)\n        if (!(name in attrs))\n            throw new RangeError(`Unsupported attribute ${name} for ${type} of type ${name}`);\n    for (let name in attrs) {\n        let attr = attrs[name];\n        if (attr.validate)\n            attr.validate(values[name]);\n    }\n}\nfunction initAttrs(typeName, attrs) {\n    let result = Object.create(null);\n    if (attrs)\n        for (let name in attrs)\n            result[name] = new Attribute(typeName, name, attrs[name]);\n    return result;\n}\n/**\nNode types are objects allocated once per `Schema` and used to\n[tag](https://prosemirror.net/docs/ref/#model.Node.type) `Node` instances. They contain information\nabout the node type, such as its name and what kind of node it\nrepresents.\n*/\nclass NodeType {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The name the node type has in this schema.\n    */\n    name, \n    /**\n    A link back to the `Schema` the node type belongs to.\n    */\n    schema, \n    /**\n    The spec that this type is based on\n    */\n    spec) {\n        this.name = name;\n        this.schema = schema;\n        this.spec = spec;\n        /**\n        The set of marks allowed in this node. `null` means all marks\n        are allowed.\n        */\n        this.markSet = null;\n        this.groups = spec.group ? spec.group.split(\" \") : [];\n        this.attrs = initAttrs(name, spec.attrs);\n        this.defaultAttrs = defaultAttrs(this.attrs);\n        this.contentMatch = null;\n        this.inlineContent = null;\n        this.isBlock = !(spec.inline || name == \"text\");\n        this.isText = name == \"text\";\n    }\n    /**\n    True if this is an inline type.\n    */\n    get isInline() { return !this.isBlock; }\n    /**\n    True if this is a textblock type, a block that contains inline\n    content.\n    */\n    get isTextblock() { return this.isBlock && this.inlineContent; }\n    /**\n    True for node types that allow no content.\n    */\n    get isLeaf() { return this.contentMatch == ContentMatch.empty; }\n    /**\n    True when this node is an atom, i.e. when it does not have\n    directly editable content.\n    */\n    get isAtom() { return this.isLeaf || !!this.spec.atom; }\n    /**\n    Return true when this node type is part of the given\n    [group](https://prosemirror.net/docs/ref/#model.NodeSpec.group).\n    */\n    isInGroup(group) {\n        return this.groups.indexOf(group) > -1;\n    }\n    /**\n    The node type's [whitespace](https://prosemirror.net/docs/ref/#model.NodeSpec.whitespace) option.\n    */\n    get whitespace() {\n        return this.spec.whitespace || (this.spec.code ? \"pre\" : \"normal\");\n    }\n    /**\n    Tells you whether this node type has any required attributes.\n    */\n    hasRequiredAttrs() {\n        for (let n in this.attrs)\n            if (this.attrs[n].isRequired)\n                return true;\n        return false;\n    }\n    /**\n    Indicates whether this node allows some of the same content as\n    the given node type.\n    */\n    compatibleContent(other) {\n        return this == other || this.contentMatch.compatible(other.contentMatch);\n    }\n    /**\n    @internal\n    */\n    computeAttrs(attrs) {\n        if (!attrs && this.defaultAttrs)\n            return this.defaultAttrs;\n        else\n            return computeAttrs(this.attrs, attrs);\n    }\n    /**\n    Create a `Node` of this type. The given attributes are\n    checked and defaulted (you can pass `null` to use the type's\n    defaults entirely, if no required attributes exist). `content`\n    may be a `Fragment`, a node, an array of nodes, or\n    `null`. Similarly `marks` may be `null` to default to the empty\n    set of marks.\n    */\n    create(attrs = null, content, marks) {\n        if (this.isText)\n            throw new Error(\"NodeType.create can't construct text nodes\");\n        return new Node(this, this.computeAttrs(attrs), Fragment.from(content), Mark.setFrom(marks));\n    }\n    /**\n    Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but check the given content\n    against the node type's content restrictions, and throw an error\n    if it doesn't match.\n    */\n    createChecked(attrs = null, content, marks) {\n        content = Fragment.from(content);\n        this.checkContent(content);\n        return new Node(this, this.computeAttrs(attrs), content, Mark.setFrom(marks));\n    }\n    /**\n    Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but see if it is\n    necessary to add nodes to the start or end of the given fragment\n    to make it fit the node. If no fitting wrapping can be found,\n    return null. Note that, due to the fact that required nodes can\n    always be created, this will always succeed if you pass null or\n    `Fragment.empty` as content.\n    */\n    createAndFill(attrs = null, content, marks) {\n        attrs = this.computeAttrs(attrs);\n        content = Fragment.from(content);\n        if (content.size) {\n            let before = this.contentMatch.fillBefore(content);\n            if (!before)\n                return null;\n            content = before.append(content);\n        }\n        let matched = this.contentMatch.matchFragment(content);\n        let after = matched && matched.fillBefore(Fragment.empty, true);\n        if (!after)\n            return null;\n        return new Node(this, attrs, content.append(after), Mark.setFrom(marks));\n    }\n    /**\n    Returns true if the given fragment is valid content for this node\n    type.\n    */\n    validContent(content) {\n        let result = this.contentMatch.matchFragment(content);\n        if (!result || !result.validEnd)\n            return false;\n        for (let i = 0; i < content.childCount; i++)\n            if (!this.allowsMarks(content.child(i).marks))\n                return false;\n        return true;\n    }\n    /**\n    Throws a RangeError if the given fragment is not valid content for this\n    node type.\n    @internal\n    */\n    checkContent(content) {\n        if (!this.validContent(content))\n            throw new RangeError(`Invalid content for node ${this.name}: ${content.toString().slice(0, 50)}`);\n    }\n    /**\n    @internal\n    */\n    checkAttrs(attrs) {\n        checkAttrs(this.attrs, attrs, \"node\", this.name);\n    }\n    /**\n    Check whether the given mark type is allowed in this node.\n    */\n    allowsMarkType(markType) {\n        return this.markSet == null || this.markSet.indexOf(markType) > -1;\n    }\n    /**\n    Test whether the given set of marks are allowed in this node.\n    */\n    allowsMarks(marks) {\n        if (this.markSet == null)\n            return true;\n        for (let i = 0; i < marks.length; i++)\n            if (!this.allowsMarkType(marks[i].type))\n                return false;\n        return true;\n    }\n    /**\n    Removes the marks that are not allowed in this node from the given set.\n    */\n    allowedMarks(marks) {\n        if (this.markSet == null)\n            return marks;\n        let copy;\n        for (let i = 0; i < marks.length; i++) {\n            if (!this.allowsMarkType(marks[i].type)) {\n                if (!copy)\n                    copy = marks.slice(0, i);\n            }\n            else if (copy) {\n                copy.push(marks[i]);\n            }\n        }\n        return !copy ? marks : copy.length ? copy : Mark.none;\n    }\n    /**\n    @internal\n    */\n    static compile(nodes, schema) {\n        let result = Object.create(null);\n        nodes.forEach((name, spec) => result[name] = new NodeType(name, schema, spec));\n        let topType = schema.spec.topNode || \"doc\";\n        if (!result[topType])\n            throw new RangeError(\"Schema is missing its top node type ('\" + topType + \"')\");\n        if (!result.text)\n            throw new RangeError(\"Every schema needs a 'text' type\");\n        for (let _ in result.text.attrs)\n            throw new RangeError(\"The text node type should not have attributes\");\n        return result;\n    }\n}\nfunction validateType(typeName, attrName, type) {\n    let types = type.split(\"|\");\n    return (value) => {\n        let name = value === null ? \"null\" : typeof value;\n        if (types.indexOf(name) < 0)\n            throw new RangeError(`Expected value of type ${types} for attribute ${attrName} on type ${typeName}, got ${name}`);\n    };\n}\n// Attribute descriptors\nclass Attribute {\n    constructor(typeName, attrName, options) {\n        this.hasDefault = Object.prototype.hasOwnProperty.call(options, \"default\");\n        this.default = options.default;\n        this.validate = typeof options.validate == \"string\" ? validateType(typeName, attrName, options.validate) : options.validate;\n    }\n    get isRequired() {\n        return !this.hasDefault;\n    }\n}\n// Marks\n/**\nLike nodes, marks (which are associated with nodes to signify\nthings like emphasis or being part of a link) are\n[tagged](https://prosemirror.net/docs/ref/#model.Mark.type) with type objects, which are\ninstantiated once per `Schema`.\n*/\nclass MarkType {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The name of the mark type.\n    */\n    name, \n    /**\n    @internal\n    */\n    rank, \n    /**\n    The schema that this mark type instance is part of.\n    */\n    schema, \n    /**\n    The spec on which the type is based.\n    */\n    spec) {\n        this.name = name;\n        this.rank = rank;\n        this.schema = schema;\n        this.spec = spec;\n        this.attrs = initAttrs(name, spec.attrs);\n        this.excluded = null;\n        let defaults = defaultAttrs(this.attrs);\n        this.instance = defaults ? new Mark(this, defaults) : null;\n    }\n    /**\n    Create a mark of this type. `attrs` may be `null` or an object\n    containing only some of the mark's attributes. The others, if\n    they have defaults, will be added.\n    */\n    create(attrs = null) {\n        if (!attrs && this.instance)\n            return this.instance;\n        return new Mark(this, computeAttrs(this.attrs, attrs));\n    }\n    /**\n    @internal\n    */\n    static compile(marks, schema) {\n        let result = Object.create(null), rank = 0;\n        marks.forEach((name, spec) => result[name] = new MarkType(name, rank++, schema, spec));\n        return result;\n    }\n    /**\n    When there is a mark of this type in the given set, a new set\n    without it is returned. Otherwise, the input set is returned.\n    */\n    removeFromSet(set) {\n        for (var i = 0; i < set.length; i++)\n            if (set[i].type == this) {\n                set = set.slice(0, i).concat(set.slice(i + 1));\n                i--;\n            }\n        return set;\n    }\n    /**\n    Tests whether there is a mark of this type in the given set.\n    */\n    isInSet(set) {\n        for (let i = 0; i < set.length; i++)\n            if (set[i].type == this)\n                return set[i];\n    }\n    /**\n    @internal\n    */\n    checkAttrs(attrs) {\n        checkAttrs(this.attrs, attrs, \"mark\", this.name);\n    }\n    /**\n    Queries whether a given mark type is\n    [excluded](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) by this one.\n    */\n    excludes(other) {\n        return this.excluded.indexOf(other) > -1;\n    }\n}\n/**\nA document schema. Holds [node](https://prosemirror.net/docs/ref/#model.NodeType) and [mark\ntype](https://prosemirror.net/docs/ref/#model.MarkType) objects for the nodes and marks that may\noccur in conforming documents, and provides functionality for\ncreating and deserializing such documents.\n\nWhen given, the type parameters provide the names of the nodes and\nmarks in this schema.\n*/\nclass Schema {\n    /**\n    Construct a schema from a schema [specification](https://prosemirror.net/docs/ref/#model.SchemaSpec).\n    */\n    constructor(spec) {\n        /**\n        The [linebreak\n        replacement](https://prosemirror.net/docs/ref/#model.NodeSpec.linebreakReplacement) node defined\n        in this schema, if any.\n        */\n        this.linebreakReplacement = null;\n        /**\n        An object for storing whatever values modules may want to\n        compute and cache per schema. (If you want to store something\n        in it, try to use property names unlikely to clash.)\n        */\n        this.cached = Object.create(null);\n        let instanceSpec = this.spec = {};\n        for (let prop in spec)\n            instanceSpec[prop] = spec[prop];\n        instanceSpec.nodes = OrderedMap.from(spec.nodes),\n            instanceSpec.marks = OrderedMap.from(spec.marks || {}),\n            this.nodes = NodeType.compile(this.spec.nodes, this);\n        this.marks = MarkType.compile(this.spec.marks, this);\n        let contentExprCache = Object.create(null);\n        for (let prop in this.nodes) {\n            if (prop in this.marks)\n                throw new RangeError(prop + \" can not be both a node and a mark\");\n            let type = this.nodes[prop], contentExpr = type.spec.content || \"\", markExpr = type.spec.marks;\n            type.contentMatch = contentExprCache[contentExpr] ||\n                (contentExprCache[contentExpr] = ContentMatch.parse(contentExpr, this.nodes));\n            type.inlineContent = type.contentMatch.inlineContent;\n            if (type.spec.linebreakReplacement) {\n                if (this.linebreakReplacement)\n                    throw new RangeError(\"Multiple linebreak nodes defined\");\n                if (!type.isInline || !type.isLeaf)\n                    throw new RangeError(\"Linebreak replacement nodes must be inline leaf nodes\");\n                this.linebreakReplacement = type;\n            }\n            type.markSet = markExpr == \"_\" ? null :\n                markExpr ? gatherMarks(this, markExpr.split(\" \")) :\n                    markExpr == \"\" || !type.inlineContent ? [] : null;\n        }\n        for (let prop in this.marks) {\n            let type = this.marks[prop], excl = type.spec.excludes;\n            type.excluded = excl == null ? [type] : excl == \"\" ? [] : gatherMarks(this, excl.split(\" \"));\n        }\n        this.nodeFromJSON = json => Node.fromJSON(this, json);\n        this.markFromJSON = json => Mark.fromJSON(this, json);\n        this.topNodeType = this.nodes[this.spec.topNode || \"doc\"];\n        this.cached.wrappings = Object.create(null);\n    }\n    /**\n    Create a node in this schema. The `type` may be a string or a\n    `NodeType` instance. Attributes will be extended with defaults,\n    `content` may be a `Fragment`, `null`, a `Node`, or an array of\n    nodes.\n    */\n    node(type, attrs = null, content, marks) {\n        if (typeof type == \"string\")\n            type = this.nodeType(type);\n        else if (!(type instanceof NodeType))\n            throw new RangeError(\"Invalid node type: \" + type);\n        else if (type.schema != this)\n            throw new RangeError(\"Node type from different schema used (\" + type.name + \")\");\n        return type.createChecked(attrs, content, marks);\n    }\n    /**\n    Create a text node in the schema. Empty text nodes are not\n    allowed.\n    */\n    text(text, marks) {\n        let type = this.nodes.text;\n        return new TextNode(type, type.defaultAttrs, text, Mark.setFrom(marks));\n    }\n    /**\n    Create a mark with the given type and attributes.\n    */\n    mark(type, attrs) {\n        if (typeof type == \"string\")\n            type = this.marks[type];\n        return type.create(attrs);\n    }\n    /**\n    @internal\n    */\n    nodeType(name) {\n        let found = this.nodes[name];\n        if (!found)\n            throw new RangeError(\"Unknown node type: \" + name);\n        return found;\n    }\n}\nfunction gatherMarks(schema, marks) {\n    let found = [];\n    for (let i = 0; i < marks.length; i++) {\n        let name = marks[i], mark = schema.marks[name], ok = mark;\n        if (mark) {\n            found.push(mark);\n        }\n        else {\n            for (let prop in schema.marks) {\n                let mark = schema.marks[prop];\n                if (name == \"_\" || (mark.spec.group && mark.spec.group.split(\" \").indexOf(name) > -1))\n                    found.push(ok = mark);\n            }\n        }\n        if (!ok)\n            throw new SyntaxError(\"Unknown mark type: '\" + marks[i] + \"'\");\n    }\n    return found;\n}\n\nfunction isTagRule(rule) { return rule.tag != null; }\nfunction isStyleRule(rule) { return rule.style != null; }\n/**\nA DOM parser represents a strategy for parsing DOM content into a\nProseMirror document conforming to a given schema. Its behavior is\ndefined by an array of [rules](https://prosemirror.net/docs/ref/#model.ParseRule).\n*/\nclass DOMParser {\n    /**\n    Create a parser that targets the given schema, using the given\n    parsing rules.\n    */\n    constructor(\n    /**\n    The schema into which the parser parses.\n    */\n    schema, \n    /**\n    The set of [parse rules](https://prosemirror.net/docs/ref/#model.ParseRule) that the parser\n    uses, in order of precedence.\n    */\n    rules) {\n        this.schema = schema;\n        this.rules = rules;\n        /**\n        @internal\n        */\n        this.tags = [];\n        /**\n        @internal\n        */\n        this.styles = [];\n        let matchedStyles = this.matchedStyles = [];\n        rules.forEach(rule => {\n            if (isTagRule(rule)) {\n                this.tags.push(rule);\n            }\n            else if (isStyleRule(rule)) {\n                let prop = /[^=]*/.exec(rule.style)[0];\n                if (matchedStyles.indexOf(prop) < 0)\n                    matchedStyles.push(prop);\n                this.styles.push(rule);\n            }\n        });\n        // Only normalize list elements when lists in the schema can't directly contain themselves\n        this.normalizeLists = !this.tags.some(r => {\n            if (!/^(ul|ol)\\b/.test(r.tag) || !r.node)\n                return false;\n            let node = schema.nodes[r.node];\n            return node.contentMatch.matchType(node);\n        });\n    }\n    /**\n    Parse a document from the content of a DOM node.\n    */\n    parse(dom, options = {}) {\n        let context = new ParseContext(this, options, false);\n        context.addAll(dom, Mark.none, options.from, options.to);\n        return context.finish();\n    }\n    /**\n    Parses the content of the given DOM node, like\n    [`parse`](https://prosemirror.net/docs/ref/#model.DOMParser.parse), and takes the same set of\n    options. But unlike that method, which produces a whole node,\n    this one returns a slice that is open at the sides, meaning that\n    the schema constraints aren't applied to the start of nodes to\n    the left of the input and the end of nodes at the end.\n    */\n    parseSlice(dom, options = {}) {\n        let context = new ParseContext(this, options, true);\n        context.addAll(dom, Mark.none, options.from, options.to);\n        return Slice.maxOpen(context.finish());\n    }\n    /**\n    @internal\n    */\n    matchTag(dom, context, after) {\n        for (let i = after ? this.tags.indexOf(after) + 1 : 0; i < this.tags.length; i++) {\n            let rule = this.tags[i];\n            if (matches(dom, rule.tag) &&\n                (rule.namespace === undefined || dom.namespaceURI == rule.namespace) &&\n                (!rule.context || context.matchesContext(rule.context))) {\n                if (rule.getAttrs) {\n                    let result = rule.getAttrs(dom);\n                    if (result === false)\n                        continue;\n                    rule.attrs = result || undefined;\n                }\n                return rule;\n            }\n        }\n    }\n    /**\n    @internal\n    */\n    matchStyle(prop, value, context, after) {\n        for (let i = after ? this.styles.indexOf(after) + 1 : 0; i < this.styles.length; i++) {\n            let rule = this.styles[i], style = rule.style;\n            if (style.indexOf(prop) != 0 ||\n                rule.context && !context.matchesContext(rule.context) ||\n                // Test that the style string either precisely matches the prop,\n                // or has an '=' sign after the prop, followed by the given\n                // value.\n                style.length > prop.length &&\n                    (style.charCodeAt(prop.length) != 61 || style.slice(prop.length + 1) != value))\n                continue;\n            if (rule.getAttrs) {\n                let result = rule.getAttrs(value);\n                if (result === false)\n                    continue;\n                rule.attrs = result || undefined;\n            }\n            return rule;\n        }\n    }\n    /**\n    @internal\n    */\n    static schemaRules(schema) {\n        let result = [];\n        function insert(rule) {\n            let priority = rule.priority == null ? 50 : rule.priority, i = 0;\n            for (; i < result.length; i++) {\n                let next = result[i], nextPriority = next.priority == null ? 50 : next.priority;\n                if (nextPriority < priority)\n                    break;\n            }\n            result.splice(i, 0, rule);\n        }\n        for (let name in schema.marks) {\n            let rules = schema.marks[name].spec.parseDOM;\n            if (rules)\n                rules.forEach(rule => {\n                    insert(rule = copy(rule));\n                    if (!(rule.mark || rule.ignore || rule.clearMark))\n                        rule.mark = name;\n                });\n        }\n        for (let name in schema.nodes) {\n            let rules = schema.nodes[name].spec.parseDOM;\n            if (rules)\n                rules.forEach(rule => {\n                    insert(rule = copy(rule));\n                    if (!(rule.node || rule.ignore || rule.mark))\n                        rule.node = name;\n                });\n        }\n        return result;\n    }\n    /**\n    Construct a DOM parser using the parsing rules listed in a\n    schema's [node specs](https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM), reordered by\n    [priority](https://prosemirror.net/docs/ref/#model.GenericParseRule.priority).\n    */\n    static fromSchema(schema) {\n        return schema.cached.domParser ||\n            (schema.cached.domParser = new DOMParser(schema, DOMParser.schemaRules(schema)));\n    }\n}\nconst blockTags = {\n    address: true, article: true, aside: true, blockquote: true, canvas: true,\n    dd: true, div: true, dl: true, fieldset: true, figcaption: true, figure: true,\n    footer: true, form: true, h1: true, h2: true, h3: true, h4: true, h5: true,\n    h6: true, header: true, hgroup: true, hr: true, li: true, noscript: true, ol: true,\n    output: true, p: true, pre: true, section: true, table: true, tfoot: true, ul: true\n};\nconst ignoreTags = {\n    head: true, noscript: true, object: true, script: true, style: true, title: true\n};\nconst listTags = { ol: true, ul: true };\n// Using a bitfield for node context options\nconst OPT_PRESERVE_WS = 1, OPT_PRESERVE_WS_FULL = 2, OPT_OPEN_LEFT = 4;\nfunction wsOptionsFor(type, preserveWhitespace, base) {\n    if (preserveWhitespace != null)\n        return (preserveWhitespace ? OPT_PRESERVE_WS : 0) |\n            (preserveWhitespace === \"full\" ? OPT_PRESERVE_WS_FULL : 0);\n    return type && type.whitespace == \"pre\" ? OPT_PRESERVE_WS | OPT_PRESERVE_WS_FULL : base & ~OPT_OPEN_LEFT;\n}\nclass NodeContext {\n    constructor(type, attrs, marks, solid, match, options) {\n        this.type = type;\n        this.attrs = attrs;\n        this.marks = marks;\n        this.solid = solid;\n        this.options = options;\n        this.content = [];\n        // Marks applied to the node's children\n        this.activeMarks = Mark.none;\n        this.match = match || (options & OPT_OPEN_LEFT ? null : type.contentMatch);\n    }\n    findWrapping(node) {\n        if (!this.match) {\n            if (!this.type)\n                return [];\n            let fill = this.type.contentMatch.fillBefore(Fragment.from(node));\n            if (fill) {\n                this.match = this.type.contentMatch.matchFragment(fill);\n            }\n            else {\n                let start = this.type.contentMatch, wrap;\n                if (wrap = start.findWrapping(node.type)) {\n                    this.match = start;\n                    return wrap;\n                }\n                else {\n                    return null;\n                }\n            }\n        }\n        return this.match.findWrapping(node.type);\n    }\n    finish(openEnd) {\n        if (!(this.options & OPT_PRESERVE_WS)) { // Strip trailing whitespace\n            let last = this.content[this.content.length - 1], m;\n            if (last && last.isText && (m = /[ \\t\\r\\n\\u000c]+$/.exec(last.text))) {\n                let text = last;\n                if (last.text.length == m[0].length)\n                    this.content.pop();\n                else\n                    this.content[this.content.length - 1] = text.withText(text.text.slice(0, text.text.length - m[0].length));\n            }\n        }\n        let content = Fragment.from(this.content);\n        if (!openEnd && this.match)\n            content = content.append(this.match.fillBefore(Fragment.empty, true));\n        return this.type ? this.type.create(this.attrs, content, this.marks) : content;\n    }\n    inlineContext(node) {\n        if (this.type)\n            return this.type.inlineContent;\n        if (this.content.length)\n            return this.content[0].isInline;\n        return node.parentNode && !blockTags.hasOwnProperty(node.parentNode.nodeName.toLowerCase());\n    }\n}\nclass ParseContext {\n    constructor(\n    // The parser we are using.\n    parser, \n    // The options passed to this parse.\n    options, isOpen) {\n        this.parser = parser;\n        this.options = options;\n        this.isOpen = isOpen;\n        this.open = 0;\n        this.localPreserveWS = false;\n        let topNode = options.topNode, topContext;\n        let topOptions = wsOptionsFor(null, options.preserveWhitespace, 0) | (isOpen ? OPT_OPEN_LEFT : 0);\n        if (topNode)\n            topContext = new NodeContext(topNode.type, topNode.attrs, Mark.none, true, options.topMatch || topNode.type.contentMatch, topOptions);\n        else if (isOpen)\n            topContext = new NodeContext(null, null, Mark.none, true, null, topOptions);\n        else\n            topContext = new NodeContext(parser.schema.topNodeType, null, Mark.none, true, null, topOptions);\n        this.nodes = [topContext];\n        this.find = options.findPositions;\n        this.needsBlock = false;\n    }\n    get top() {\n        return this.nodes[this.open];\n    }\n    // Add a DOM node to the content. Text is inserted as text node,\n    // otherwise, the node is passed to `addElement` or, if it has a\n    // `style` attribute, `addElementWithStyles`.\n    addDOM(dom, marks) {\n        if (dom.nodeType == 3)\n            this.addTextNode(dom, marks);\n        else if (dom.nodeType == 1)\n            this.addElement(dom, marks);\n    }\n    addTextNode(dom, marks) {\n        let value = dom.nodeValue;\n        let top = this.top, preserveWS = (top.options & OPT_PRESERVE_WS_FULL) ? \"full\"\n            : this.localPreserveWS || (top.options & OPT_PRESERVE_WS) > 0;\n        if (preserveWS === \"full\" ||\n            top.inlineContext(dom) ||\n            /[^ \\t\\r\\n\\u000c]/.test(value)) {\n            if (!preserveWS) {\n                value = value.replace(/[ \\t\\r\\n\\u000c]+/g, \" \");\n                // If this starts with whitespace, and there is no node before it, or\n                // a hard break, or a text node that ends with whitespace, strip the\n                // leading space.\n                if (/^[ \\t\\r\\n\\u000c]/.test(value) && this.open == this.nodes.length - 1) {\n                    let nodeBefore = top.content[top.content.length - 1];\n                    let domNodeBefore = dom.previousSibling;\n                    if (!nodeBefore ||\n                        (domNodeBefore && domNodeBefore.nodeName == 'BR') ||\n                        (nodeBefore.isText && /[ \\t\\r\\n\\u000c]$/.test(nodeBefore.text)))\n                        value = value.slice(1);\n                }\n            }\n            else if (preserveWS !== \"full\") {\n                value = value.replace(/\\r?\\n|\\r/g, \" \");\n            }\n            else {\n                value = value.replace(/\\r\\n?/g, \"\\n\");\n            }\n            if (value)\n                this.insertNode(this.parser.schema.text(value), marks, !/\\S/.test(value));\n            this.findInText(dom);\n        }\n        else {\n            this.findInside(dom);\n        }\n    }\n    // Try to find a handler for the given tag and use that to parse. If\n    // none is found, the element's content nodes are added directly.\n    addElement(dom, marks, matchAfter) {\n        let outerWS = this.localPreserveWS, top = this.top;\n        if (dom.tagName == \"PRE\" || /pre/.test(dom.style && dom.style.whiteSpace))\n            this.localPreserveWS = true;\n        let name = dom.nodeName.toLowerCase(), ruleID;\n        if (listTags.hasOwnProperty(name) && this.parser.normalizeLists)\n            normalizeList(dom);\n        let rule = (this.options.ruleFromNode && this.options.ruleFromNode(dom)) ||\n            (ruleID = this.parser.matchTag(dom, this, matchAfter));\n        out: if (rule ? rule.ignore : ignoreTags.hasOwnProperty(name)) {\n            this.findInside(dom);\n            this.ignoreFallback(dom, marks);\n        }\n        else if (!rule || rule.skip || rule.closeParent) {\n            if (rule && rule.closeParent)\n                this.open = Math.max(0, this.open - 1);\n            else if (rule && rule.skip.nodeType)\n                dom = rule.skip;\n            let sync, oldNeedsBlock = this.needsBlock;\n            if (blockTags.hasOwnProperty(name)) {\n                if (top.content.length && top.content[0].isInline && this.open) {\n                    this.open--;\n                    top = this.top;\n                }\n                sync = true;\n                if (!top.type)\n                    this.needsBlock = true;\n            }\n            else if (!dom.firstChild) {\n                this.leafFallback(dom, marks);\n                break out;\n            }\n            let innerMarks = rule && rule.skip ? marks : this.readStyles(dom, marks);\n            if (innerMarks)\n                this.addAll(dom, innerMarks);\n            if (sync)\n                this.sync(top);\n            this.needsBlock = oldNeedsBlock;\n        }\n        else {\n            let innerMarks = this.readStyles(dom, marks);\n            if (innerMarks)\n                this.addElementByRule(dom, rule, innerMarks, rule.consuming === false ? ruleID : undefined);\n        }\n        this.localPreserveWS = outerWS;\n    }\n    // Called for leaf DOM nodes that would otherwise be ignored\n    leafFallback(dom, marks) {\n        if (dom.nodeName == \"BR\" && this.top.type && this.top.type.inlineContent)\n            this.addTextNode(dom.ownerDocument.createTextNode(\"\\n\"), marks);\n    }\n    // Called for ignored nodes\n    ignoreFallback(dom, marks) {\n        // Ignored BR nodes should at least create an inline context\n        if (dom.nodeName == \"BR\" && (!this.top.type || !this.top.type.inlineContent))\n            this.findPlace(this.parser.schema.text(\"-\"), marks, true);\n    }\n    // Run any style parser associated with the node's styles. Either\n    // return an updated array of marks, or null to indicate some of the\n    // styles had a rule with `ignore` set.\n    readStyles(dom, marks) {\n        let styles = dom.style;\n        // Because many properties will only show up in 'normalized' form\n        // in `style.item` (i.e. text-decoration becomes\n        // text-decoration-line, text-decoration-color, etc), we directly\n        // query the styles mentioned in our rules instead of iterating\n        // over the items.\n        if (styles && styles.length)\n            for (let i = 0; i < this.parser.matchedStyles.length; i++) {\n                let name = this.parser.matchedStyles[i], value = styles.getPropertyValue(name);\n                if (value)\n                    for (let after = undefined;;) {\n                        let rule = this.parser.matchStyle(name, value, this, after);\n                        if (!rule)\n                            break;\n                        if (rule.ignore)\n                            return null;\n                        if (rule.clearMark)\n                            marks = marks.filter(m => !rule.clearMark(m));\n                        else\n                            marks = marks.concat(this.parser.schema.marks[rule.mark].create(rule.attrs));\n                        if (rule.consuming === false)\n                            after = rule;\n                        else\n                            break;\n                    }\n            }\n        return marks;\n    }\n    // Look up a handler for the given node. If none are found, return\n    // false. Otherwise, apply it, use its return value to drive the way\n    // the node's content is wrapped, and return true.\n    addElementByRule(dom, rule, marks, continueAfter) {\n        let sync, nodeType;\n        if (rule.node) {\n            nodeType = this.parser.schema.nodes[rule.node];\n            if (!nodeType.isLeaf) {\n                let inner = this.enter(nodeType, rule.attrs || null, marks, rule.preserveWhitespace);\n                if (inner) {\n                    sync = true;\n                    marks = inner;\n                }\n            }\n            else if (!this.insertNode(nodeType.create(rule.attrs), marks, dom.nodeName == \"BR\")) {\n                this.leafFallback(dom, marks);\n            }\n        }\n        else {\n            let markType = this.parser.schema.marks[rule.mark];\n            marks = marks.concat(markType.create(rule.attrs));\n        }\n        let startIn = this.top;\n        if (nodeType && nodeType.isLeaf) {\n            this.findInside(dom);\n        }\n        else if (continueAfter) {\n            this.addElement(dom, marks, continueAfter);\n        }\n        else if (rule.getContent) {\n            this.findInside(dom);\n            rule.getContent(dom, this.parser.schema).forEach(node => this.insertNode(node, marks, false));\n        }\n        else {\n            let contentDOM = dom;\n            if (typeof rule.contentElement == \"string\")\n                contentDOM = dom.querySelector(rule.contentElement);\n            else if (typeof rule.contentElement == \"function\")\n                contentDOM = rule.contentElement(dom);\n            else if (rule.contentElement)\n                contentDOM = rule.contentElement;\n            this.findAround(dom, contentDOM, true);\n            this.addAll(contentDOM, marks);\n            this.findAround(dom, contentDOM, false);\n        }\n        if (sync && this.sync(startIn))\n            this.open--;\n    }\n    // Add all child nodes between `startIndex` and `endIndex` (or the\n    // whole node, if not given). If `sync` is passed, use it to\n    // synchronize after every block element.\n    addAll(parent, marks, startIndex, endIndex) {\n        let index = startIndex || 0;\n        for (let dom = startIndex ? parent.childNodes[startIndex] : parent.firstChild, end = endIndex == null ? null : parent.childNodes[endIndex]; dom != end; dom = dom.nextSibling, ++index) {\n            this.findAtPoint(parent, index);\n            this.addDOM(dom, marks);\n        }\n        this.findAtPoint(parent, index);\n    }\n    // Try to find a way to fit the given node type into the current\n    // context. May add intermediate wrappers and/or leave non-solid\n    // nodes that we're in.\n    findPlace(node, marks, cautious) {\n        let route, sync;\n        for (let depth = this.open, penalty = 0; depth >= 0; depth--) {\n            let cx = this.nodes[depth];\n            let found = cx.findWrapping(node);\n            if (found && (!route || route.length > found.length + penalty)) {\n                route = found;\n                sync = cx;\n                if (!found.length)\n                    break;\n            }\n            if (cx.solid) {\n                if (cautious)\n                    break;\n                penalty += 2;\n            }\n        }\n        if (!route)\n            return null;\n        this.sync(sync);\n        for (let i = 0; i < route.length; i++)\n            marks = this.enterInner(route[i], null, marks, false);\n        return marks;\n    }\n    // Try to insert the given node, adjusting the context when needed.\n    insertNode(node, marks, cautious) {\n        if (node.isInline && this.needsBlock && !this.top.type) {\n            let block = this.textblockFromContext();\n            if (block)\n                marks = this.enterInner(block, null, marks);\n        }\n        let innerMarks = this.findPlace(node, marks, cautious);\n        if (innerMarks) {\n            this.closeExtra();\n            let top = this.top;\n            if (top.match)\n                top.match = top.match.matchType(node.type);\n            let nodeMarks = Mark.none;\n            for (let m of innerMarks.concat(node.marks))\n                if (top.type ? top.type.allowsMarkType(m.type) : markMayApply(m.type, node.type))\n                    nodeMarks = m.addToSet(nodeMarks);\n            top.content.push(node.mark(nodeMarks));\n            return true;\n        }\n        return false;\n    }\n    // Try to start a node of the given type, adjusting the context when\n    // necessary.\n    enter(type, attrs, marks, preserveWS) {\n        let innerMarks = this.findPlace(type.create(attrs), marks, false);\n        if (innerMarks)\n            innerMarks = this.enterInner(type, attrs, marks, true, preserveWS);\n        return innerMarks;\n    }\n    // Open a node of the given type\n    enterInner(type, attrs, marks, solid = false, preserveWS) {\n        this.closeExtra();\n        let top = this.top;\n        top.match = top.match && top.match.matchType(type);\n        let options = wsOptionsFor(type, preserveWS, top.options);\n        if ((top.options & OPT_OPEN_LEFT) && top.content.length == 0)\n            options |= OPT_OPEN_LEFT;\n        let applyMarks = Mark.none;\n        marks = marks.filter(m => {\n            if (top.type ? top.type.allowsMarkType(m.type) : markMayApply(m.type, type)) {\n                applyMarks = m.addToSet(applyMarks);\n                return false;\n            }\n            return true;\n        });\n        this.nodes.push(new NodeContext(type, attrs, applyMarks, solid, null, options));\n        this.open++;\n        return marks;\n    }\n    // Make sure all nodes above this.open are finished and added to\n    // their parents\n    closeExtra(openEnd = false) {\n        let i = this.nodes.length - 1;\n        if (i > this.open) {\n            for (; i > this.open; i--)\n                this.nodes[i - 1].content.push(this.nodes[i].finish(openEnd));\n            this.nodes.length = this.open + 1;\n        }\n    }\n    finish() {\n        this.open = 0;\n        this.closeExtra(this.isOpen);\n        return this.nodes[0].finish(!!(this.isOpen || this.options.topOpen));\n    }\n    sync(to) {\n        for (let i = this.open; i >= 0; i--) {\n            if (this.nodes[i] == to) {\n                this.open = i;\n                return true;\n            }\n            else if (this.localPreserveWS) {\n                this.nodes[i].options |= OPT_PRESERVE_WS;\n            }\n        }\n        return false;\n    }\n    get currentPos() {\n        this.closeExtra();\n        let pos = 0;\n        for (let i = this.open; i >= 0; i--) {\n            let content = this.nodes[i].content;\n            for (let j = content.length - 1; j >= 0; j--)\n                pos += content[j].nodeSize;\n            if (i)\n                pos++;\n        }\n        return pos;\n    }\n    findAtPoint(parent, offset) {\n        if (this.find)\n            for (let i = 0; i < this.find.length; i++) {\n                if (this.find[i].node == parent && this.find[i].offset == offset)\n                    this.find[i].pos = this.currentPos;\n            }\n    }\n    findInside(parent) {\n        if (this.find)\n            for (let i = 0; i < this.find.length; i++) {\n                if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node))\n                    this.find[i].pos = this.currentPos;\n            }\n    }\n    findAround(parent, content, before) {\n        if (parent != content && this.find)\n            for (let i = 0; i < this.find.length; i++) {\n                if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) {\n                    let pos = content.compareDocumentPosition(this.find[i].node);\n                    if (pos & (before ? 2 : 4))\n                        this.find[i].pos = this.currentPos;\n                }\n            }\n    }\n    findInText(textNode) {\n        if (this.find)\n            for (let i = 0; i < this.find.length; i++) {\n                if (this.find[i].node == textNode)\n                    this.find[i].pos = this.currentPos - (textNode.nodeValue.length - this.find[i].offset);\n            }\n    }\n    // Determines whether the given context string matches this context.\n    matchesContext(context) {\n        if (context.indexOf(\"|\") > -1)\n            return context.split(/\\s*\\|\\s*/).some(this.matchesContext, this);\n        let parts = context.split(\"/\");\n        let option = this.options.context;\n        let useRoot = !this.isOpen && (!option || option.parent.type == this.nodes[0].type);\n        let minDepth = -(option ? option.depth + 1 : 0) + (useRoot ? 0 : 1);\n        let match = (i, depth) => {\n            for (; i >= 0; i--) {\n                let part = parts[i];\n                if (part == \"\") {\n                    if (i == parts.length - 1 || i == 0)\n                        continue;\n                    for (; depth >= minDepth; depth--)\n                        if (match(i - 1, depth))\n                            return true;\n                    return false;\n                }\n                else {\n                    let next = depth > 0 || (depth == 0 && useRoot) ? this.nodes[depth].type\n                        : option && depth >= minDepth ? option.node(depth - minDepth).type\n                            : null;\n                    if (!next || (next.name != part && !next.isInGroup(part)))\n                        return false;\n                    depth--;\n                }\n            }\n            return true;\n        };\n        return match(parts.length - 1, this.open);\n    }\n    textblockFromContext() {\n        let $context = this.options.context;\n        if ($context)\n            for (let d = $context.depth; d >= 0; d--) {\n                let deflt = $context.node(d).contentMatchAt($context.indexAfter(d)).defaultType;\n                if (deflt && deflt.isTextblock && deflt.defaultAttrs)\n                    return deflt;\n            }\n        for (let name in this.parser.schema.nodes) {\n            let type = this.parser.schema.nodes[name];\n            if (type.isTextblock && type.defaultAttrs)\n                return type;\n        }\n    }\n}\n// Kludge to work around directly nested list nodes produced by some\n// tools and allowed by browsers to mean that the nested list is\n// actually part of the list item above it.\nfunction normalizeList(dom) {\n    for (let child = dom.firstChild, prevItem = null; child; child = child.nextSibling) {\n        let name = child.nodeType == 1 ? child.nodeName.toLowerCase() : null;\n        if (name && listTags.hasOwnProperty(name) && prevItem) {\n            prevItem.appendChild(child);\n            child = prevItem;\n        }\n        else if (name == \"li\") {\n            prevItem = child;\n        }\n        else if (name) {\n            prevItem = null;\n        }\n    }\n}\n// Apply a CSS selector.\nfunction matches(dom, selector) {\n    return (dom.matches || dom.msMatchesSelector || dom.webkitMatchesSelector || dom.mozMatchesSelector).call(dom, selector);\n}\nfunction copy(obj) {\n    let copy = {};\n    for (let prop in obj)\n        copy[prop] = obj[prop];\n    return copy;\n}\n// Used when finding a mark at the top level of a fragment parse.\n// Checks whether it would be reasonable to apply a given mark type to\n// a given node, by looking at the way the mark occurs in the schema.\nfunction markMayApply(markType, nodeType) {\n    let nodes = nodeType.schema.nodes;\n    for (let name in nodes) {\n        let parent = nodes[name];\n        if (!parent.allowsMarkType(markType))\n            continue;\n        let seen = [], scan = (match) => {\n            seen.push(match);\n            for (let i = 0; i < match.edgeCount; i++) {\n                let { type, next } = match.edge(i);\n                if (type == nodeType)\n                    return true;\n                if (seen.indexOf(next) < 0 && scan(next))\n                    return true;\n            }\n        };\n        if (scan(parent.contentMatch))\n            return true;\n    }\n}\n\n/**\nA DOM serializer knows how to convert ProseMirror nodes and\nmarks of various types to DOM nodes.\n*/\nclass DOMSerializer {\n    /**\n    Create a serializer. `nodes` should map node names to functions\n    that take a node and return a description of the corresponding\n    DOM. `marks` does the same for mark names, but also gets an\n    argument that tells it whether the mark's content is block or\n    inline content (for typical use, it'll always be inline). A mark\n    serializer may be `null` to indicate that marks of that type\n    should not be serialized.\n    */\n    constructor(\n    /**\n    The node serialization functions.\n    */\n    nodes, \n    /**\n    The mark serialization functions.\n    */\n    marks) {\n        this.nodes = nodes;\n        this.marks = marks;\n    }\n    /**\n    Serialize the content of this fragment to a DOM fragment. When\n    not in the browser, the `document` option, containing a DOM\n    document, should be passed so that the serializer can create\n    nodes.\n    */\n    serializeFragment(fragment, options = {}, target) {\n        if (!target)\n            target = doc(options).createDocumentFragment();\n        let top = target, active = [];\n        fragment.forEach(node => {\n            if (active.length || node.marks.length) {\n                let keep = 0, rendered = 0;\n                while (keep < active.length && rendered < node.marks.length) {\n                    let next = node.marks[rendered];\n                    if (!this.marks[next.type.name]) {\n                        rendered++;\n                        continue;\n                    }\n                    if (!next.eq(active[keep][0]) || next.type.spec.spanning === false)\n                        break;\n                    keep++;\n                    rendered++;\n                }\n                while (keep < active.length)\n                    top = active.pop()[1];\n                while (rendered < node.marks.length) {\n                    let add = node.marks[rendered++];\n                    let markDOM = this.serializeMark(add, node.isInline, options);\n                    if (markDOM) {\n                        active.push([add, top]);\n                        top.appendChild(markDOM.dom);\n                        top = markDOM.contentDOM || markDOM.dom;\n                    }\n                }\n            }\n            top.appendChild(this.serializeNodeInner(node, options));\n        });\n        return target;\n    }\n    /**\n    @internal\n    */\n    serializeNodeInner(node, options) {\n        let { dom, contentDOM } = renderSpec(doc(options), this.nodes[node.type.name](node), null, node.attrs);\n        if (contentDOM) {\n            if (node.isLeaf)\n                throw new RangeError(\"Content hole not allowed in a leaf node spec\");\n            this.serializeFragment(node.content, options, contentDOM);\n        }\n        return dom;\n    }\n    /**\n    Serialize this node to a DOM node. This can be useful when you\n    need to serialize a part of a document, as opposed to the whole\n    document. To serialize a whole document, use\n    [`serializeFragment`](https://prosemirror.net/docs/ref/#model.DOMSerializer.serializeFragment) on\n    its [content](https://prosemirror.net/docs/ref/#model.Node.content).\n    */\n    serializeNode(node, options = {}) {\n        let dom = this.serializeNodeInner(node, options);\n        for (let i = node.marks.length - 1; i >= 0; i--) {\n            let wrap = this.serializeMark(node.marks[i], node.isInline, options);\n            if (wrap) {\n                (wrap.contentDOM || wrap.dom).appendChild(dom);\n                dom = wrap.dom;\n            }\n        }\n        return dom;\n    }\n    /**\n    @internal\n    */\n    serializeMark(mark, inline, options = {}) {\n        let toDOM = this.marks[mark.type.name];\n        return toDOM && renderSpec(doc(options), toDOM(mark, inline), null, mark.attrs);\n    }\n    static renderSpec(doc, structure, xmlNS = null, blockArraysIn) {\n        return renderSpec(doc, structure, xmlNS, blockArraysIn);\n    }\n    /**\n    Build a serializer using the [`toDOM`](https://prosemirror.net/docs/ref/#model.NodeSpec.toDOM)\n    properties in a schema's node and mark specs.\n    */\n    static fromSchema(schema) {\n        return schema.cached.domSerializer ||\n            (schema.cached.domSerializer = new DOMSerializer(this.nodesFromSchema(schema), this.marksFromSchema(schema)));\n    }\n    /**\n    Gather the serializers in a schema's node specs into an object.\n    This can be useful as a base to build a custom serializer from.\n    */\n    static nodesFromSchema(schema) {\n        let result = gatherToDOM(schema.nodes);\n        if (!result.text)\n            result.text = node => node.text;\n        return result;\n    }\n    /**\n    Gather the serializers in a schema's mark specs into an object.\n    */\n    static marksFromSchema(schema) {\n        return gatherToDOM(schema.marks);\n    }\n}\nfunction gatherToDOM(obj) {\n    let result = {};\n    for (let name in obj) {\n        let toDOM = obj[name].spec.toDOM;\n        if (toDOM)\n            result[name] = toDOM;\n    }\n    return result;\n}\nfunction doc(options) {\n    return options.document || window.document;\n}\nconst suspiciousAttributeCache = new WeakMap();\nfunction suspiciousAttributes(attrs) {\n    let value = suspiciousAttributeCache.get(attrs);\n    if (value === undefined)\n        suspiciousAttributeCache.set(attrs, value = suspiciousAttributesInner(attrs));\n    return value;\n}\nfunction suspiciousAttributesInner(attrs) {\n    let result = null;\n    function scan(value) {\n        if (value && typeof value == \"object\") {\n            if (Array.isArray(value)) {\n                if (typeof value[0] == \"string\") {\n                    if (!result)\n                        result = [];\n                    result.push(value);\n                }\n                else {\n                    for (let i = 0; i < value.length; i++)\n                        scan(value[i]);\n                }\n            }\n            else {\n                for (let prop in value)\n                    scan(value[prop]);\n            }\n        }\n    }\n    scan(attrs);\n    return result;\n}\nfunction renderSpec(doc, structure, xmlNS, blockArraysIn) {\n    if (typeof structure == \"string\")\n        return { dom: doc.createTextNode(structure) };\n    if (structure.nodeType != null)\n        return { dom: structure };\n    if (structure.dom && structure.dom.nodeType != null)\n        return structure;\n    let tagName = structure[0], suspicious;\n    if (typeof tagName != \"string\")\n        throw new RangeError(\"Invalid array passed to renderSpec\");\n    if (blockArraysIn && (suspicious = suspiciousAttributes(blockArraysIn)) &&\n        suspicious.indexOf(structure) > -1)\n        throw new RangeError(\"Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.\");\n    let space = tagName.indexOf(\" \");\n    if (space > 0) {\n        xmlNS = tagName.slice(0, space);\n        tagName = tagName.slice(space + 1);\n    }\n    let contentDOM;\n    let dom = (xmlNS ? doc.createElementNS(xmlNS, tagName) : doc.createElement(tagName));\n    let attrs = structure[1], start = 1;\n    if (attrs && typeof attrs == \"object\" && attrs.nodeType == null && !Array.isArray(attrs)) {\n        start = 2;\n        for (let name in attrs)\n            if (attrs[name] != null) {\n                let space = name.indexOf(\" \");\n                if (space > 0)\n                    dom.setAttributeNS(name.slice(0, space), name.slice(space + 1), attrs[name]);\n                else if (name == \"style\" && dom.style)\n                    dom.style.cssText = attrs[name];\n                else\n                    dom.setAttribute(name, attrs[name]);\n            }\n    }\n    for (let i = start; i < structure.length; i++) {\n        let child = structure[i];\n        if (child === 0) {\n            if (i < structure.length - 1 || i > start)\n                throw new RangeError(\"Content hole must be the only child of its parent node\");\n            return { dom, contentDOM: dom };\n        }\n        else {\n            let { dom: inner, contentDOM: innerContent } = renderSpec(doc, child, xmlNS, blockArraysIn);\n            dom.appendChild(inner);\n            if (innerContent) {\n                if (contentDOM)\n                    throw new RangeError(\"Multiple content holes\");\n                contentDOM = innerContent;\n            }\n        }\n    }\n    return { dom, contentDOM };\n}\n\nexport { ContentMatch, DOMParser, DOMSerializer, Fragment, Mark, MarkType, Node, NodeRange, NodeType, ReplaceError, ResolvedPos, Schema, Slice };\n","import { ReplaceError, Slice, Fragment, MarkType, Mark } from 'prosemirror-model';\n\n// Recovery values encode a range index and an offset. They are\n// represented as numbers, because tons of them will be created when\n// mapping, for example, a large number of decorations. The number's\n// lower 16 bits provide the index, the remaining bits the offset.\n//\n// Note: We intentionally don't use bit shift operators to en- and\n// decode these, since those clip to 32 bits, which we might in rare\n// cases want to overflow. A 64-bit float can represent 48-bit\n// integers precisely.\nconst lower16 = 0xffff;\nconst factor16 = Math.pow(2, 16);\nfunction makeRecover(index, offset) { return index + offset * factor16; }\nfunction recoverIndex(value) { return value & lower16; }\nfunction recoverOffset(value) { return (value - (value & lower16)) / factor16; }\nconst DEL_BEFORE = 1, DEL_AFTER = 2, DEL_ACROSS = 4, DEL_SIDE = 8;\n/**\nAn object representing a mapped position with extra\ninformation.\n*/\nclass MapResult {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The mapped version of the position.\n    */\n    pos, \n    /**\n    @internal\n    */\n    delInfo, \n    /**\n    @internal\n    */\n    recover) {\n        this.pos = pos;\n        this.delInfo = delInfo;\n        this.recover = recover;\n    }\n    /**\n    Tells you whether the position was deleted, that is, whether the\n    step removed the token on the side queried (via the `assoc`)\n    argument from the document.\n    */\n    get deleted() { return (this.delInfo & DEL_SIDE) > 0; }\n    /**\n    Tells you whether the token before the mapped position was deleted.\n    */\n    get deletedBefore() { return (this.delInfo & (DEL_BEFORE | DEL_ACROSS)) > 0; }\n    /**\n    True when the token after the mapped position was deleted.\n    */\n    get deletedAfter() { return (this.delInfo & (DEL_AFTER | DEL_ACROSS)) > 0; }\n    /**\n    Tells whether any of the steps mapped through deletes across the\n    position (including both the token before and after the\n    position).\n    */\n    get deletedAcross() { return (this.delInfo & DEL_ACROSS) > 0; }\n}\n/**\nA map describing the deletions and insertions made by a step, which\ncan be used to find the correspondence between positions in the\npre-step version of a document and the same position in the\npost-step version.\n*/\nclass StepMap {\n    /**\n    Create a position map. The modifications to the document are\n    represented as an array of numbers, in which each group of three\n    represents a modified chunk as `[start, oldSize, newSize]`.\n    */\n    constructor(\n    /**\n    @internal\n    */\n    ranges, \n    /**\n    @internal\n    */\n    inverted = false) {\n        this.ranges = ranges;\n        this.inverted = inverted;\n        if (!ranges.length && StepMap.empty)\n            return StepMap.empty;\n    }\n    /**\n    @internal\n    */\n    recover(value) {\n        let diff = 0, index = recoverIndex(value);\n        if (!this.inverted)\n            for (let i = 0; i < index; i++)\n                diff += this.ranges[i * 3 + 2] - this.ranges[i * 3 + 1];\n        return this.ranges[index * 3] + diff + recoverOffset(value);\n    }\n    mapResult(pos, assoc = 1) { return this._map(pos, assoc, false); }\n    map(pos, assoc = 1) { return this._map(pos, assoc, true); }\n    /**\n    @internal\n    */\n    _map(pos, assoc, simple) {\n        let diff = 0, oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n        for (let i = 0; i < this.ranges.length; i += 3) {\n            let start = this.ranges[i] - (this.inverted ? diff : 0);\n            if (start > pos)\n                break;\n            let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex], end = start + oldSize;\n            if (pos <= end) {\n                let side = !oldSize ? assoc : pos == start ? -1 : pos == end ? 1 : assoc;\n                let result = start + diff + (side < 0 ? 0 : newSize);\n                if (simple)\n                    return result;\n                let recover = pos == (assoc < 0 ? start : end) ? null : makeRecover(i / 3, pos - start);\n                let del = pos == start ? DEL_AFTER : pos == end ? DEL_BEFORE : DEL_ACROSS;\n                if (assoc < 0 ? pos != start : pos != end)\n                    del |= DEL_SIDE;\n                return new MapResult(result, del, recover);\n            }\n            diff += newSize - oldSize;\n        }\n        return simple ? pos + diff : new MapResult(pos + diff, 0, null);\n    }\n    /**\n    @internal\n    */\n    touches(pos, recover) {\n        let diff = 0, index = recoverIndex(recover);\n        let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n        for (let i = 0; i < this.ranges.length; i += 3) {\n            let start = this.ranges[i] - (this.inverted ? diff : 0);\n            if (start > pos)\n                break;\n            let oldSize = this.ranges[i + oldIndex], end = start + oldSize;\n            if (pos <= end && i == index * 3)\n                return true;\n            diff += this.ranges[i + newIndex] - oldSize;\n        }\n        return false;\n    }\n    /**\n    Calls the given function on each of the changed ranges included in\n    this map.\n    */\n    forEach(f) {\n        let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n        for (let i = 0, diff = 0; i < this.ranges.length; i += 3) {\n            let start = this.ranges[i], oldStart = start - (this.inverted ? diff : 0), newStart = start + (this.inverted ? 0 : diff);\n            let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex];\n            f(oldStart, oldStart + oldSize, newStart, newStart + newSize);\n            diff += newSize - oldSize;\n        }\n    }\n    /**\n    Create an inverted version of this map. The result can be used to\n    map positions in the post-step document to the pre-step document.\n    */\n    invert() {\n        return new StepMap(this.ranges, !this.inverted);\n    }\n    /**\n    @internal\n    */\n    toString() {\n        return (this.inverted ? \"-\" : \"\") + JSON.stringify(this.ranges);\n    }\n    /**\n    Create a map that moves all positions by offset `n` (which may be\n    negative). This can be useful when applying steps meant for a\n    sub-document to a larger document, or vice-versa.\n    */\n    static offset(n) {\n        return n == 0 ? StepMap.empty : new StepMap(n < 0 ? [0, -n, 0] : [0, 0, n]);\n    }\n}\n/**\nA StepMap that contains no changed ranges.\n*/\nStepMap.empty = new StepMap([]);\n/**\nA mapping represents a pipeline of zero or more [step\nmaps](https://prosemirror.net/docs/ref/#transform.StepMap). It has special provisions for losslessly\nhandling mapping positions through a series of steps in which some\nsteps are inverted versions of earlier steps. (This comes up when\n‘[rebasing](https://prosemirror.net/docs/guide/#transform.rebasing)’ steps for\ncollaboration or history management.)\n*/\nclass Mapping {\n    /**\n    Create a new mapping with the given position maps.\n    */\n    constructor(maps, \n    /**\n    @internal\n    */\n    mirror, \n    /**\n    The starting position in the `maps` array, used when `map` or\n    `mapResult` is called.\n    */\n    from = 0, \n    /**\n    The end position in the `maps` array.\n    */\n    to = maps ? maps.length : 0) {\n        this.mirror = mirror;\n        this.from = from;\n        this.to = to;\n        this._maps = maps || [];\n        this.ownData = !(maps || mirror);\n    }\n    /**\n    The step maps in this mapping.\n    */\n    get maps() { return this._maps; }\n    /**\n    Create a mapping that maps only through a part of this one.\n    */\n    slice(from = 0, to = this.maps.length) {\n        return new Mapping(this._maps, this.mirror, from, to);\n    }\n    /**\n    Add a step map to the end of this mapping. If `mirrors` is\n    given, it should be the index of the step map that is the mirror\n    image of this one.\n    */\n    appendMap(map, mirrors) {\n        if (!this.ownData) {\n            this._maps = this._maps.slice();\n            this.mirror = this.mirror && this.mirror.slice();\n            this.ownData = true;\n        }\n        this.to = this._maps.push(map);\n        if (mirrors != null)\n            this.setMirror(this._maps.length - 1, mirrors);\n    }\n    /**\n    Add all the step maps in a given mapping to this one (preserving\n    mirroring information).\n    */\n    appendMapping(mapping) {\n        for (let i = 0, startSize = this._maps.length; i < mapping._maps.length; i++) {\n            let mirr = mapping.getMirror(i);\n            this.appendMap(mapping._maps[i], mirr != null && mirr < i ? startSize + mirr : undefined);\n        }\n    }\n    /**\n    Finds the offset of the step map that mirrors the map at the\n    given offset, in this mapping (as per the second argument to\n    `appendMap`).\n    */\n    getMirror(n) {\n        if (this.mirror)\n            for (let i = 0; i < this.mirror.length; i++)\n                if (this.mirror[i] == n)\n                    return this.mirror[i + (i % 2 ? -1 : 1)];\n    }\n    /**\n    @internal\n    */\n    setMirror(n, m) {\n        if (!this.mirror)\n            this.mirror = [];\n        this.mirror.push(n, m);\n    }\n    /**\n    Append the inverse of the given mapping to this one.\n    */\n    appendMappingInverted(mapping) {\n        for (let i = mapping.maps.length - 1, totalSize = this._maps.length + mapping._maps.length; i >= 0; i--) {\n            let mirr = mapping.getMirror(i);\n            this.appendMap(mapping._maps[i].invert(), mirr != null && mirr > i ? totalSize - mirr - 1 : undefined);\n        }\n    }\n    /**\n    Create an inverted version of this mapping.\n    */\n    invert() {\n        let inverse = new Mapping;\n        inverse.appendMappingInverted(this);\n        return inverse;\n    }\n    /**\n    Map a position through this mapping.\n    */\n    map(pos, assoc = 1) {\n        if (this.mirror)\n            return this._map(pos, assoc, true);\n        for (let i = this.from; i < this.to; i++)\n            pos = this._maps[i].map(pos, assoc);\n        return pos;\n    }\n    /**\n    Map a position through this mapping, returning a mapping\n    result.\n    */\n    mapResult(pos, assoc = 1) { return this._map(pos, assoc, false); }\n    /**\n    @internal\n    */\n    _map(pos, assoc, simple) {\n        let delInfo = 0;\n        for (let i = this.from; i < this.to; i++) {\n            let map = this._maps[i], result = map.mapResult(pos, assoc);\n            if (result.recover != null) {\n                let corr = this.getMirror(i);\n                if (corr != null && corr > i && corr < this.to) {\n                    i = corr;\n                    pos = this._maps[corr].recover(result.recover);\n                    continue;\n                }\n            }\n            delInfo |= result.delInfo;\n            pos = result.pos;\n        }\n        return simple ? pos : new MapResult(pos, delInfo, null);\n    }\n}\n\nconst stepsByID = Object.create(null);\n/**\nA step object represents an atomic change. It generally applies\nonly to the document it was created for, since the positions\nstored in it will only make sense for that document.\n\nNew steps are defined by creating classes that extend `Step`,\noverriding the `apply`, `invert`, `map`, `getMap` and `fromJSON`\nmethods, and registering your class with a unique\nJSON-serialization identifier using\n[`Step.jsonID`](https://prosemirror.net/docs/ref/#transform.Step^jsonID).\n*/\nclass Step {\n    /**\n    Get the step map that represents the changes made by this step,\n    and which can be used to transform between positions in the old\n    and the new document.\n    */\n    getMap() { return StepMap.empty; }\n    /**\n    Try to merge this step with another one, to be applied directly\n    after it. Returns the merged step when possible, null if the\n    steps can't be merged.\n    */\n    merge(other) { return null; }\n    /**\n    Deserialize a step from its JSON representation. Will call\n    through to the step class' own implementation of this method.\n    */\n    static fromJSON(schema, json) {\n        if (!json || !json.stepType)\n            throw new RangeError(\"Invalid input for Step.fromJSON\");\n        let type = stepsByID[json.stepType];\n        if (!type)\n            throw new RangeError(`No step type ${json.stepType} defined`);\n        return type.fromJSON(schema, json);\n    }\n    /**\n    To be able to serialize steps to JSON, each step needs a string\n    ID to attach to its JSON representation. Use this method to\n    register an ID for your step classes. Try to pick something\n    that's unlikely to clash with steps from other modules.\n    */\n    static jsonID(id, stepClass) {\n        if (id in stepsByID)\n            throw new RangeError(\"Duplicate use of step JSON ID \" + id);\n        stepsByID[id] = stepClass;\n        stepClass.prototype.jsonID = id;\n        return stepClass;\n    }\n}\n/**\nThe result of [applying](https://prosemirror.net/docs/ref/#transform.Step.apply) a step. Contains either a\nnew document or a failure value.\n*/\nclass StepResult {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The transformed document, if successful.\n    */\n    doc, \n    /**\n    The failure message, if unsuccessful.\n    */\n    failed) {\n        this.doc = doc;\n        this.failed = failed;\n    }\n    /**\n    Create a successful step result.\n    */\n    static ok(doc) { return new StepResult(doc, null); }\n    /**\n    Create a failed step result.\n    */\n    static fail(message) { return new StepResult(null, message); }\n    /**\n    Call [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) with the given\n    arguments. Create a successful result if it succeeds, and a\n    failed one if it throws a `ReplaceError`.\n    */\n    static fromReplace(doc, from, to, slice) {\n        try {\n            return StepResult.ok(doc.replace(from, to, slice));\n        }\n        catch (e) {\n            if (e instanceof ReplaceError)\n                return StepResult.fail(e.message);\n            throw e;\n        }\n    }\n}\n\nfunction mapFragment(fragment, f, parent) {\n    let mapped = [];\n    for (let i = 0; i < fragment.childCount; i++) {\n        let child = fragment.child(i);\n        if (child.content.size)\n            child = child.copy(mapFragment(child.content, f, child));\n        if (child.isInline)\n            child = f(child, parent, i);\n        mapped.push(child);\n    }\n    return Fragment.fromArray(mapped);\n}\n/**\nAdd a mark to all inline content between two positions.\n*/\nclass AddMarkStep extends Step {\n    /**\n    Create a mark step.\n    */\n    constructor(\n    /**\n    The start of the marked range.\n    */\n    from, \n    /**\n    The end of the marked range.\n    */\n    to, \n    /**\n    The mark to add.\n    */\n    mark) {\n        super();\n        this.from = from;\n        this.to = to;\n        this.mark = mark;\n    }\n    apply(doc) {\n        let oldSlice = doc.slice(this.from, this.to), $from = doc.resolve(this.from);\n        let parent = $from.node($from.sharedDepth(this.to));\n        let slice = new Slice(mapFragment(oldSlice.content, (node, parent) => {\n            if (!node.isAtom || !parent.type.allowsMarkType(this.mark.type))\n                return node;\n            return node.mark(this.mark.addToSet(node.marks));\n        }, parent), oldSlice.openStart, oldSlice.openEnd);\n        return StepResult.fromReplace(doc, this.from, this.to, slice);\n    }\n    invert() {\n        return new RemoveMarkStep(this.from, this.to, this.mark);\n    }\n    map(mapping) {\n        let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n        if (from.deleted && to.deleted || from.pos >= to.pos)\n            return null;\n        return new AddMarkStep(from.pos, to.pos, this.mark);\n    }\n    merge(other) {\n        if (other instanceof AddMarkStep &&\n            other.mark.eq(this.mark) &&\n            this.from <= other.to && this.to >= other.from)\n            return new AddMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);\n        return null;\n    }\n    toJSON() {\n        return { stepType: \"addMark\", mark: this.mark.toJSON(),\n            from: this.from, to: this.to };\n    }\n    /**\n    @internal\n    */\n    static fromJSON(schema, json) {\n        if (typeof json.from != \"number\" || typeof json.to != \"number\")\n            throw new RangeError(\"Invalid input for AddMarkStep.fromJSON\");\n        return new AddMarkStep(json.from, json.to, schema.markFromJSON(json.mark));\n    }\n}\nStep.jsonID(\"addMark\", AddMarkStep);\n/**\nRemove a mark from all inline content between two positions.\n*/\nclass RemoveMarkStep extends Step {\n    /**\n    Create a mark-removing step.\n    */\n    constructor(\n    /**\n    The start of the unmarked range.\n    */\n    from, \n    /**\n    The end of the unmarked range.\n    */\n    to, \n    /**\n    The mark to remove.\n    */\n    mark) {\n        super();\n        this.from = from;\n        this.to = to;\n        this.mark = mark;\n    }\n    apply(doc) {\n        let oldSlice = doc.slice(this.from, this.to);\n        let slice = new Slice(mapFragment(oldSlice.content, node => {\n            return node.mark(this.mark.removeFromSet(node.marks));\n        }, doc), oldSlice.openStart, oldSlice.openEnd);\n        return StepResult.fromReplace(doc, this.from, this.to, slice);\n    }\n    invert() {\n        return new AddMarkStep(this.from, this.to, this.mark);\n    }\n    map(mapping) {\n        let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n        if (from.deleted && to.deleted || from.pos >= to.pos)\n            return null;\n        return new RemoveMarkStep(from.pos, to.pos, this.mark);\n    }\n    merge(other) {\n        if (other instanceof RemoveMarkStep &&\n            other.mark.eq(this.mark) &&\n            this.from <= other.to && this.to >= other.from)\n            return new RemoveMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);\n        return null;\n    }\n    toJSON() {\n        return { stepType: \"removeMark\", mark: this.mark.toJSON(),\n            from: this.from, to: this.to };\n    }\n    /**\n    @internal\n    */\n    static fromJSON(schema, json) {\n        if (typeof json.from != \"number\" || typeof json.to != \"number\")\n            throw new RangeError(\"Invalid input for RemoveMarkStep.fromJSON\");\n        return new RemoveMarkStep(json.from, json.to, schema.markFromJSON(json.mark));\n    }\n}\nStep.jsonID(\"removeMark\", RemoveMarkStep);\n/**\nAdd a mark to a specific node.\n*/\nclass AddNodeMarkStep extends Step {\n    /**\n    Create a node mark step.\n    */\n    constructor(\n    /**\n    The position of the target node.\n    */\n    pos, \n    /**\n    The mark to add.\n    */\n    mark) {\n        super();\n        this.pos = pos;\n        this.mark = mark;\n    }\n    apply(doc) {\n        let node = doc.nodeAt(this.pos);\n        if (!node)\n            return StepResult.fail(\"No node at mark step's position\");\n        let updated = node.type.create(node.attrs, null, this.mark.addToSet(node.marks));\n        return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n    }\n    invert(doc) {\n        let node = doc.nodeAt(this.pos);\n        if (node) {\n            let newSet = this.mark.addToSet(node.marks);\n            if (newSet.length == node.marks.length) {\n                for (let i = 0; i < node.marks.length; i++)\n                    if (!node.marks[i].isInSet(newSet))\n                        return new AddNodeMarkStep(this.pos, node.marks[i]);\n                return new AddNodeMarkStep(this.pos, this.mark);\n            }\n        }\n        return new RemoveNodeMarkStep(this.pos, this.mark);\n    }\n    map(mapping) {\n        let pos = mapping.mapResult(this.pos, 1);\n        return pos.deletedAfter ? null : new AddNodeMarkStep(pos.pos, this.mark);\n    }\n    toJSON() {\n        return { stepType: \"addNodeMark\", pos: this.pos, mark: this.mark.toJSON() };\n    }\n    /**\n    @internal\n    */\n    static fromJSON(schema, json) {\n        if (typeof json.pos != \"number\")\n            throw new RangeError(\"Invalid input for AddNodeMarkStep.fromJSON\");\n        return new AddNodeMarkStep(json.pos, schema.markFromJSON(json.mark));\n    }\n}\nStep.jsonID(\"addNodeMark\", AddNodeMarkStep);\n/**\nRemove a mark from a specific node.\n*/\nclass RemoveNodeMarkStep extends Step {\n    /**\n    Create a mark-removing step.\n    */\n    constructor(\n    /**\n    The position of the target node.\n    */\n    pos, \n    /**\n    The mark to remove.\n    */\n    mark) {\n        super();\n        this.pos = pos;\n        this.mark = mark;\n    }\n    apply(doc) {\n        let node = doc.nodeAt(this.pos);\n        if (!node)\n            return StepResult.fail(\"No node at mark step's position\");\n        let updated = node.type.create(node.attrs, null, this.mark.removeFromSet(node.marks));\n        return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n    }\n    invert(doc) {\n        let node = doc.nodeAt(this.pos);\n        if (!node || !this.mark.isInSet(node.marks))\n            return this;\n        return new AddNodeMarkStep(this.pos, this.mark);\n    }\n    map(mapping) {\n        let pos = mapping.mapResult(this.pos, 1);\n        return pos.deletedAfter ? null : new RemoveNodeMarkStep(pos.pos, this.mark);\n    }\n    toJSON() {\n        return { stepType: \"removeNodeMark\", pos: this.pos, mark: this.mark.toJSON() };\n    }\n    /**\n    @internal\n    */\n    static fromJSON(schema, json) {\n        if (typeof json.pos != \"number\")\n            throw new RangeError(\"Invalid input for RemoveNodeMarkStep.fromJSON\");\n        return new RemoveNodeMarkStep(json.pos, schema.markFromJSON(json.mark));\n    }\n}\nStep.jsonID(\"removeNodeMark\", RemoveNodeMarkStep);\n\n/**\nReplace a part of the document with a slice of new content.\n*/\nclass ReplaceStep extends Step {\n    /**\n    The given `slice` should fit the 'gap' between `from` and\n    `to`—the depths must line up, and the surrounding nodes must be\n    able to be joined with the open sides of the slice. When\n    `structure` is true, the step will fail if the content between\n    from and to is not just a sequence of closing and then opening\n    tokens (this is to guard against rebased replace steps\n    overwriting something they weren't supposed to).\n    */\n    constructor(\n    /**\n    The start position of the replaced range.\n    */\n    from, \n    /**\n    The end position of the replaced range.\n    */\n    to, \n    /**\n    The slice to insert.\n    */\n    slice, \n    /**\n    @internal\n    */\n    structure = false) {\n        super();\n        this.from = from;\n        this.to = to;\n        this.slice = slice;\n        this.structure = structure;\n    }\n    apply(doc) {\n        if (this.structure && contentBetween(doc, this.from, this.to))\n            return StepResult.fail(\"Structure replace would overwrite content\");\n        return StepResult.fromReplace(doc, this.from, this.to, this.slice);\n    }\n    getMap() {\n        return new StepMap([this.from, this.to - this.from, this.slice.size]);\n    }\n    invert(doc) {\n        return new ReplaceStep(this.from, this.from + this.slice.size, doc.slice(this.from, this.to));\n    }\n    map(mapping) {\n        let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n        if (from.deletedAcross && to.deletedAcross)\n            return null;\n        return new ReplaceStep(from.pos, Math.max(from.pos, to.pos), this.slice, this.structure);\n    }\n    merge(other) {\n        if (!(other instanceof ReplaceStep) || other.structure || this.structure)\n            return null;\n        if (this.from + this.slice.size == other.from && !this.slice.openEnd && !other.slice.openStart) {\n            let slice = this.slice.size + other.slice.size == 0 ? Slice.empty\n                : new Slice(this.slice.content.append(other.slice.content), this.slice.openStart, other.slice.openEnd);\n            return new ReplaceStep(this.from, this.to + (other.to - other.from), slice, this.structure);\n        }\n        else if (other.to == this.from && !this.slice.openStart && !other.slice.openEnd) {\n            let slice = this.slice.size + other.slice.size == 0 ? Slice.empty\n                : new Slice(other.slice.content.append(this.slice.content), other.slice.openStart, this.slice.openEnd);\n            return new ReplaceStep(other.from, this.to, slice, this.structure);\n        }\n        else {\n            return null;\n        }\n    }\n    toJSON() {\n        let json = { stepType: \"replace\", from: this.from, to: this.to };\n        if (this.slice.size)\n            json.slice = this.slice.toJSON();\n        if (this.structure)\n            json.structure = true;\n        return json;\n    }\n    /**\n    @internal\n    */\n    static fromJSON(schema, json) {\n        if (typeof json.from != \"number\" || typeof json.to != \"number\")\n            throw new RangeError(\"Invalid input for ReplaceStep.fromJSON\");\n        return new ReplaceStep(json.from, json.to, Slice.fromJSON(schema, json.slice), !!json.structure);\n    }\n}\nStep.jsonID(\"replace\", ReplaceStep);\n/**\nReplace a part of the document with a slice of content, but\npreserve a range of the replaced content by moving it into the\nslice.\n*/\nclass ReplaceAroundStep extends Step {\n    /**\n    Create a replace-around step with the given range and gap.\n    `insert` should be the point in the slice into which the content\n    of the gap should be moved. `structure` has the same meaning as\n    it has in the [`ReplaceStep`](https://prosemirror.net/docs/ref/#transform.ReplaceStep) class.\n    */\n    constructor(\n    /**\n    The start position of the replaced range.\n    */\n    from, \n    /**\n    The end position of the replaced range.\n    */\n    to, \n    /**\n    The start of preserved range.\n    */\n    gapFrom, \n    /**\n    The end of preserved range.\n    */\n    gapTo, \n    /**\n    The slice to insert.\n    */\n    slice, \n    /**\n    The position in the slice where the preserved range should be\n    inserted.\n    */\n    insert, \n    /**\n    @internal\n    */\n    structure = false) {\n        super();\n        this.from = from;\n        this.to = to;\n        this.gapFrom = gapFrom;\n        this.gapTo = gapTo;\n        this.slice = slice;\n        this.insert = insert;\n        this.structure = structure;\n    }\n    apply(doc) {\n        if (this.structure && (contentBetween(doc, this.from, this.gapFrom) ||\n            contentBetween(doc, this.gapTo, this.to)))\n            return StepResult.fail(\"Structure gap-replace would overwrite content\");\n        let gap = doc.slice(this.gapFrom, this.gapTo);\n        if (gap.openStart || gap.openEnd)\n            return StepResult.fail(\"Gap is not a flat range\");\n        let inserted = this.slice.insertAt(this.insert, gap.content);\n        if (!inserted)\n            return StepResult.fail(\"Content does not fit in gap\");\n        return StepResult.fromReplace(doc, this.from, this.to, inserted);\n    }\n    getMap() {\n        return new StepMap([this.from, this.gapFrom - this.from, this.insert,\n            this.gapTo, this.to - this.gapTo, this.slice.size - this.insert]);\n    }\n    invert(doc) {\n        let gap = this.gapTo - this.gapFrom;\n        return new ReplaceAroundStep(this.from, this.from + this.slice.size + gap, this.from + this.insert, this.from + this.insert + gap, doc.slice(this.from, this.to).removeBetween(this.gapFrom - this.from, this.gapTo - this.from), this.gapFrom - this.from, this.structure);\n    }\n    map(mapping) {\n        let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n        let gapFrom = this.from == this.gapFrom ? from.pos : mapping.map(this.gapFrom, -1);\n        let gapTo = this.to == this.gapTo ? to.pos : mapping.map(this.gapTo, 1);\n        if ((from.deletedAcross && to.deletedAcross) || gapFrom < from.pos || gapTo > to.pos)\n            return null;\n        return new ReplaceAroundStep(from.pos, to.pos, gapFrom, gapTo, this.slice, this.insert, this.structure);\n    }\n    toJSON() {\n        let json = { stepType: \"replaceAround\", from: this.from, to: this.to,\n            gapFrom: this.gapFrom, gapTo: this.gapTo, insert: this.insert };\n        if (this.slice.size)\n            json.slice = this.slice.toJSON();\n        if (this.structure)\n            json.structure = true;\n        return json;\n    }\n    /**\n    @internal\n    */\n    static fromJSON(schema, json) {\n        if (typeof json.from != \"number\" || typeof json.to != \"number\" ||\n            typeof json.gapFrom != \"number\" || typeof json.gapTo != \"number\" || typeof json.insert != \"number\")\n            throw new RangeError(\"Invalid input for ReplaceAroundStep.fromJSON\");\n        return new ReplaceAroundStep(json.from, json.to, json.gapFrom, json.gapTo, Slice.fromJSON(schema, json.slice), json.insert, !!json.structure);\n    }\n}\nStep.jsonID(\"replaceAround\", ReplaceAroundStep);\nfunction contentBetween(doc, from, to) {\n    let $from = doc.resolve(from), dist = to - from, depth = $from.depth;\n    while (dist > 0 && depth > 0 && $from.indexAfter(depth) == $from.node(depth).childCount) {\n        depth--;\n        dist--;\n    }\n    if (dist > 0) {\n        let next = $from.node(depth).maybeChild($from.indexAfter(depth));\n        while (dist > 0) {\n            if (!next || next.isLeaf)\n                return true;\n            next = next.firstChild;\n            dist--;\n        }\n    }\n    return false;\n}\n\nfunction addMark(tr, from, to, mark) {\n    let removed = [], added = [];\n    let removing, adding;\n    tr.doc.nodesBetween(from, to, (node, pos, parent) => {\n        if (!node.isInline)\n            return;\n        let marks = node.marks;\n        if (!mark.isInSet(marks) && parent.type.allowsMarkType(mark.type)) {\n            let start = Math.max(pos, from), end = Math.min(pos + node.nodeSize, to);\n            let newSet = mark.addToSet(marks);\n            for (let i = 0; i < marks.length; i++) {\n                if (!marks[i].isInSet(newSet)) {\n                    if (removing && removing.to == start && removing.mark.eq(marks[i]))\n                        removing.to = end;\n                    else\n                        removed.push(removing = new RemoveMarkStep(start, end, marks[i]));\n                }\n            }\n            if (adding && adding.to == start)\n                adding.to = end;\n            else\n                added.push(adding = new AddMarkStep(start, end, mark));\n        }\n    });\n    removed.forEach(s => tr.step(s));\n    added.forEach(s => tr.step(s));\n}\nfunction removeMark(tr, from, to, mark) {\n    let matched = [], step = 0;\n    tr.doc.nodesBetween(from, to, (node, pos) => {\n        if (!node.isInline)\n            return;\n        step++;\n        let toRemove = null;\n        if (mark instanceof MarkType) {\n            let set = node.marks, found;\n            while (found = mark.isInSet(set)) {\n                (toRemove || (toRemove = [])).push(found);\n                set = found.removeFromSet(set);\n            }\n        }\n        else if (mark) {\n            if (mark.isInSet(node.marks))\n                toRemove = [mark];\n        }\n        else {\n            toRemove = node.marks;\n        }\n        if (toRemove && toRemove.length) {\n            let end = Math.min(pos + node.nodeSize, to);\n            for (let i = 0; i < toRemove.length; i++) {\n                let style = toRemove[i], found;\n                for (let j = 0; j < matched.length; j++) {\n                    let m = matched[j];\n                    if (m.step == step - 1 && style.eq(matched[j].style))\n                        found = m;\n                }\n                if (found) {\n                    found.to = end;\n                    found.step = step;\n                }\n                else {\n                    matched.push({ style, from: Math.max(pos, from), to: end, step });\n                }\n            }\n        }\n    });\n    matched.forEach(m => tr.step(new RemoveMarkStep(m.from, m.to, m.style)));\n}\nfunction clearIncompatible(tr, pos, parentType, match = parentType.contentMatch, clearNewlines = true) {\n    let node = tr.doc.nodeAt(pos);\n    let replSteps = [], cur = pos + 1;\n    for (let i = 0; i < node.childCount; i++) {\n        let child = node.child(i), end = cur + child.nodeSize;\n        let allowed = match.matchType(child.type);\n        if (!allowed) {\n            replSteps.push(new ReplaceStep(cur, end, Slice.empty));\n        }\n        else {\n            match = allowed;\n            for (let j = 0; j < child.marks.length; j++)\n                if (!parentType.allowsMarkType(child.marks[j].type))\n                    tr.step(new RemoveMarkStep(cur, end, child.marks[j]));\n            if (clearNewlines && child.isText && parentType.whitespace != \"pre\") {\n                let m, newline = /\\r?\\n|\\r/g, slice;\n                while (m = newline.exec(child.text)) {\n                    if (!slice)\n                        slice = new Slice(Fragment.from(parentType.schema.text(\" \", parentType.allowedMarks(child.marks))), 0, 0);\n                    replSteps.push(new ReplaceStep(cur + m.index, cur + m.index + m[0].length, slice));\n                }\n            }\n        }\n        cur = end;\n    }\n    if (!match.validEnd) {\n        let fill = match.fillBefore(Fragment.empty, true);\n        tr.replace(cur, cur, new Slice(fill, 0, 0));\n    }\n    for (let i = replSteps.length - 1; i >= 0; i--)\n        tr.step(replSteps[i]);\n}\n\nfunction canCut(node, start, end) {\n    return (start == 0 || node.canReplace(start, node.childCount)) &&\n        (end == node.childCount || node.canReplace(0, end));\n}\n/**\nTry to find a target depth to which the content in the given range\ncan be lifted. Will not go across\n[isolating](https://prosemirror.net/docs/ref/#model.NodeSpec.isolating) parent nodes.\n*/\nfunction liftTarget(range) {\n    let parent = range.parent;\n    let content = parent.content.cutByIndex(range.startIndex, range.endIndex);\n    for (let depth = range.depth;; --depth) {\n        let node = range.$from.node(depth);\n        let index = range.$from.index(depth), endIndex = range.$to.indexAfter(depth);\n        if (depth < range.depth && node.canReplace(index, endIndex, content))\n            return depth;\n        if (depth == 0 || node.type.spec.isolating || !canCut(node, index, endIndex))\n            break;\n    }\n    return null;\n}\nfunction lift(tr, range, target) {\n    let { $from, $to, depth } = range;\n    let gapStart = $from.before(depth + 1), gapEnd = $to.after(depth + 1);\n    let start = gapStart, end = gapEnd;\n    let before = Fragment.empty, openStart = 0;\n    for (let d = depth, splitting = false; d > target; d--)\n        if (splitting || $from.index(d) > 0) {\n            splitting = true;\n            before = Fragment.from($from.node(d).copy(before));\n            openStart++;\n        }\n        else {\n            start--;\n        }\n    let after = Fragment.empty, openEnd = 0;\n    for (let d = depth, splitting = false; d > target; d--)\n        if (splitting || $to.after(d + 1) < $to.end(d)) {\n            splitting = true;\n            after = Fragment.from($to.node(d).copy(after));\n            openEnd++;\n        }\n        else {\n            end++;\n        }\n    tr.step(new ReplaceAroundStep(start, end, gapStart, gapEnd, new Slice(before.append(after), openStart, openEnd), before.size - openStart, true));\n}\n/**\nTry to find a valid way to wrap the content in the given range in a\nnode of the given type. May introduce extra nodes around and inside\nthe wrapper node, if necessary. Returns null if no valid wrapping\ncould be found. When `innerRange` is given, that range's content is\nused as the content to fit into the wrapping, instead of the\ncontent of `range`.\n*/\nfunction findWrapping(range, nodeType, attrs = null, innerRange = range) {\n    let around = findWrappingOutside(range, nodeType);\n    let inner = around && findWrappingInside(innerRange, nodeType);\n    if (!inner)\n        return null;\n    return around.map(withAttrs)\n        .concat({ type: nodeType, attrs }).concat(inner.map(withAttrs));\n}\nfunction withAttrs(type) { return { type, attrs: null }; }\nfunction findWrappingOutside(range, type) {\n    let { parent, startIndex, endIndex } = range;\n    let around = parent.contentMatchAt(startIndex).findWrapping(type);\n    if (!around)\n        return null;\n    let outer = around.length ? around[0] : type;\n    return parent.canReplaceWith(startIndex, endIndex, outer) ? around : null;\n}\nfunction findWrappingInside(range, type) {\n    let { parent, startIndex, endIndex } = range;\n    let inner = parent.child(startIndex);\n    let inside = type.contentMatch.findWrapping(inner.type);\n    if (!inside)\n        return null;\n    let lastType = inside.length ? inside[inside.length - 1] : type;\n    let innerMatch = lastType.contentMatch;\n    for (let i = startIndex; innerMatch && i < endIndex; i++)\n        innerMatch = innerMatch.matchType(parent.child(i).type);\n    if (!innerMatch || !innerMatch.validEnd)\n        return null;\n    return inside;\n}\nfunction wrap(tr, range, wrappers) {\n    let content = Fragment.empty;\n    for (let i = wrappers.length - 1; i >= 0; i--) {\n        if (content.size) {\n            let match = wrappers[i].type.contentMatch.matchFragment(content);\n            if (!match || !match.validEnd)\n                throw new RangeError(\"Wrapper type given to Transform.wrap does not form valid content of its parent wrapper\");\n        }\n        content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));\n    }\n    let start = range.start, end = range.end;\n    tr.step(new ReplaceAroundStep(start, end, start, end, new Slice(content, 0, 0), wrappers.length, true));\n}\nfunction setBlockType(tr, from, to, type, attrs) {\n    if (!type.isTextblock)\n        throw new RangeError(\"Type given to setBlockType should be a textblock\");\n    let mapFrom = tr.steps.length;\n    tr.doc.nodesBetween(from, to, (node, pos) => {\n        let attrsHere = typeof attrs == \"function\" ? attrs(node) : attrs;\n        if (node.isTextblock && !node.hasMarkup(type, attrsHere) &&\n            canChangeType(tr.doc, tr.mapping.slice(mapFrom).map(pos), type)) {\n            let convertNewlines = null;\n            if (type.schema.linebreakReplacement) {\n                let pre = type.whitespace == \"pre\", supportLinebreak = !!type.contentMatch.matchType(type.schema.linebreakReplacement);\n                if (pre && !supportLinebreak)\n                    convertNewlines = false;\n                else if (!pre && supportLinebreak)\n                    convertNewlines = true;\n            }\n            // Ensure all markup that isn't allowed in the new node type is cleared\n            if (convertNewlines === false)\n                replaceLinebreaks(tr, node, pos, mapFrom);\n            clearIncompatible(tr, tr.mapping.slice(mapFrom).map(pos, 1), type, undefined, convertNewlines === null);\n            let mapping = tr.mapping.slice(mapFrom);\n            let startM = mapping.map(pos, 1), endM = mapping.map(pos + node.nodeSize, 1);\n            tr.step(new ReplaceAroundStep(startM, endM, startM + 1, endM - 1, new Slice(Fragment.from(type.create(attrsHere, null, node.marks)), 0, 0), 1, true));\n            if (convertNewlines === true)\n                replaceNewlines(tr, node, pos, mapFrom);\n            return false;\n        }\n    });\n}\nfunction replaceNewlines(tr, node, pos, mapFrom) {\n    node.forEach((child, offset) => {\n        if (child.isText) {\n            let m, newline = /\\r?\\n|\\r/g;\n            while (m = newline.exec(child.text)) {\n                let start = tr.mapping.slice(mapFrom).map(pos + 1 + offset + m.index);\n                tr.replaceWith(start, start + 1, node.type.schema.linebreakReplacement.create());\n            }\n        }\n    });\n}\nfunction replaceLinebreaks(tr, node, pos, mapFrom) {\n    node.forEach((child, offset) => {\n        if (child.type == child.type.schema.linebreakReplacement) {\n            let start = tr.mapping.slice(mapFrom).map(pos + 1 + offset);\n            tr.replaceWith(start, start + 1, node.type.schema.text(\"\\n\"));\n        }\n    });\n}\nfunction canChangeType(doc, pos, type) {\n    let $pos = doc.resolve(pos), index = $pos.index();\n    return $pos.parent.canReplaceWith(index, index + 1, type);\n}\n/**\nChange the type, attributes, and/or marks of the node at `pos`.\nWhen `type` isn't given, the existing node type is preserved,\n*/\nfunction setNodeMarkup(tr, pos, type, attrs, marks) {\n    let node = tr.doc.nodeAt(pos);\n    if (!node)\n        throw new RangeError(\"No node at given position\");\n    if (!type)\n        type = node.type;\n    let newNode = type.create(attrs, null, marks || node.marks);\n    if (node.isLeaf)\n        return tr.replaceWith(pos, pos + node.nodeSize, newNode);\n    if (!type.validContent(node.content))\n        throw new RangeError(\"Invalid content for node type \" + type.name);\n    tr.step(new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1, pos + node.nodeSize - 1, new Slice(Fragment.from(newNode), 0, 0), 1, true));\n}\n/**\nCheck whether splitting at the given position is allowed.\n*/\nfunction canSplit(doc, pos, depth = 1, typesAfter) {\n    let $pos = doc.resolve(pos), base = $pos.depth - depth;\n    let innerType = (typesAfter && typesAfter[typesAfter.length - 1]) || $pos.parent;\n    if (base < 0 || $pos.parent.type.spec.isolating ||\n        !$pos.parent.canReplace($pos.index(), $pos.parent.childCount) ||\n        !innerType.type.validContent($pos.parent.content.cutByIndex($pos.index(), $pos.parent.childCount)))\n        return false;\n    for (let d = $pos.depth - 1, i = depth - 2; d > base; d--, i--) {\n        let node = $pos.node(d), index = $pos.index(d);\n        if (node.type.spec.isolating)\n            return false;\n        let rest = node.content.cutByIndex(index, node.childCount);\n        let overrideChild = typesAfter && typesAfter[i + 1];\n        if (overrideChild)\n            rest = rest.replaceChild(0, overrideChild.type.create(overrideChild.attrs));\n        let after = (typesAfter && typesAfter[i]) || node;\n        if (!node.canReplace(index + 1, node.childCount) || !after.type.validContent(rest))\n            return false;\n    }\n    let index = $pos.indexAfter(base);\n    let baseType = typesAfter && typesAfter[0];\n    return $pos.node(base).canReplaceWith(index, index, baseType ? baseType.type : $pos.node(base + 1).type);\n}\nfunction split(tr, pos, depth = 1, typesAfter) {\n    let $pos = tr.doc.resolve(pos), before = Fragment.empty, after = Fragment.empty;\n    for (let d = $pos.depth, e = $pos.depth - depth, i = depth - 1; d > e; d--, i--) {\n        before = Fragment.from($pos.node(d).copy(before));\n        let typeAfter = typesAfter && typesAfter[i];\n        after = Fragment.from(typeAfter ? typeAfter.type.create(typeAfter.attrs, after) : $pos.node(d).copy(after));\n    }\n    tr.step(new ReplaceStep(pos, pos, new Slice(before.append(after), depth, depth), true));\n}\n/**\nTest whether the blocks before and after a given position can be\njoined.\n*/\nfunction canJoin(doc, pos) {\n    let $pos = doc.resolve(pos), index = $pos.index();\n    return joinable($pos.nodeBefore, $pos.nodeAfter) &&\n        $pos.parent.canReplace(index, index + 1);\n}\nfunction canAppendWithSubstitutedLinebreaks(a, b) {\n    if (!b.content.size)\n        a.type.compatibleContent(b.type);\n    let match = a.contentMatchAt(a.childCount);\n    let { linebreakReplacement } = a.type.schema;\n    for (let i = 0; i < b.childCount; i++) {\n        let child = b.child(i);\n        let type = child.type == linebreakReplacement ? a.type.schema.nodes.text : child.type;\n        match = match.matchType(type);\n        if (!match)\n            return false;\n        if (!a.type.allowsMarks(child.marks))\n            return false;\n    }\n    return match.validEnd;\n}\nfunction joinable(a, b) {\n    return !!(a && b && !a.isLeaf && canAppendWithSubstitutedLinebreaks(a, b));\n}\n/**\nFind an ancestor of the given position that can be joined to the\nblock before (or after if `dir` is positive). Returns the joinable\npoint, if any.\n*/\nfunction joinPoint(doc, pos, dir = -1) {\n    let $pos = doc.resolve(pos);\n    for (let d = $pos.depth;; d--) {\n        let before, after, index = $pos.index(d);\n        if (d == $pos.depth) {\n            before = $pos.nodeBefore;\n            after = $pos.nodeAfter;\n        }\n        else if (dir > 0) {\n            before = $pos.node(d + 1);\n            index++;\n            after = $pos.node(d).maybeChild(index);\n        }\n        else {\n            before = $pos.node(d).maybeChild(index - 1);\n            after = $pos.node(d + 1);\n        }\n        if (before && !before.isTextblock && joinable(before, after) &&\n            $pos.node(d).canReplace(index, index + 1))\n            return pos;\n        if (d == 0)\n            break;\n        pos = dir < 0 ? $pos.before(d) : $pos.after(d);\n    }\n}\nfunction join(tr, pos, depth) {\n    let convertNewlines = null;\n    let { linebreakReplacement } = tr.doc.type.schema;\n    let $before = tr.doc.resolve(pos - depth), beforeType = $before.node().type;\n    if (linebreakReplacement && beforeType.inlineContent) {\n        let pre = beforeType.whitespace == \"pre\";\n        let supportLinebreak = !!beforeType.contentMatch.matchType(linebreakReplacement);\n        if (pre && !supportLinebreak)\n            convertNewlines = false;\n        else if (!pre && supportLinebreak)\n            convertNewlines = true;\n    }\n    let mapFrom = tr.steps.length;\n    if (convertNewlines === false) {\n        let $after = tr.doc.resolve(pos + depth);\n        replaceLinebreaks(tr, $after.node(), $after.before(), mapFrom);\n    }\n    if (beforeType.inlineContent)\n        clearIncompatible(tr, pos + depth - 1, beforeType, $before.node().contentMatchAt($before.index()), convertNewlines == null);\n    let mapping = tr.mapping.slice(mapFrom), start = mapping.map(pos - depth);\n    tr.step(new ReplaceStep(start, mapping.map(pos + depth, -1), Slice.empty, true));\n    if (convertNewlines === true) {\n        let $full = tr.doc.resolve(start);\n        replaceNewlines(tr, $full.node(), $full.before(), tr.steps.length);\n    }\n    return tr;\n}\n/**\nTry to find a point where a node of the given type can be inserted\nnear `pos`, by searching up the node hierarchy when `pos` itself\nisn't a valid place but is at the start or end of a node. Return\nnull if no position was found.\n*/\nfunction insertPoint(doc, pos, nodeType) {\n    let $pos = doc.resolve(pos);\n    if ($pos.parent.canReplaceWith($pos.index(), $pos.index(), nodeType))\n        return pos;\n    if ($pos.parentOffset == 0)\n        for (let d = $pos.depth - 1; d >= 0; d--) {\n            let index = $pos.index(d);\n            if ($pos.node(d).canReplaceWith(index, index, nodeType))\n                return $pos.before(d + 1);\n            if (index > 0)\n                return null;\n        }\n    if ($pos.parentOffset == $pos.parent.content.size)\n        for (let d = $pos.depth - 1; d >= 0; d--) {\n            let index = $pos.indexAfter(d);\n            if ($pos.node(d).canReplaceWith(index, index, nodeType))\n                return $pos.after(d + 1);\n            if (index < $pos.node(d).childCount)\n                return null;\n        }\n    return null;\n}\n/**\nFinds a position at or around the given position where the given\nslice can be inserted. Will look at parent nodes' nearest boundary\nand try there, even if the original position wasn't directly at the\nstart or end of that node. Returns null when no position was found.\n*/\nfunction dropPoint(doc, pos, slice) {\n    let $pos = doc.resolve(pos);\n    if (!slice.content.size)\n        return pos;\n    let content = slice.content;\n    for (let i = 0; i < slice.openStart; i++)\n        content = content.firstChild.content;\n    for (let pass = 1; pass <= (slice.openStart == 0 && slice.size ? 2 : 1); pass++) {\n        for (let d = $pos.depth; d >= 0; d--) {\n            let bias = d == $pos.depth ? 0 : $pos.pos <= ($pos.start(d + 1) + $pos.end(d + 1)) / 2 ? -1 : 1;\n            let insertPos = $pos.index(d) + (bias > 0 ? 1 : 0);\n            let parent = $pos.node(d), fits = false;\n            if (pass == 1) {\n                fits = parent.canReplace(insertPos, insertPos, content);\n            }\n            else {\n                let wrapping = parent.contentMatchAt(insertPos).findWrapping(content.firstChild.type);\n                fits = wrapping && parent.canReplaceWith(insertPos, insertPos, wrapping[0]);\n            }\n            if (fits)\n                return bias == 0 ? $pos.pos : bias < 0 ? $pos.before(d + 1) : $pos.after(d + 1);\n        }\n    }\n    return null;\n}\n\n/**\n‘Fit’ a slice into a given position in the document, producing a\n[step](https://prosemirror.net/docs/ref/#transform.Step) that inserts it. Will return null if\nthere's no meaningful way to insert the slice here, or inserting it\nwould be a no-op (an empty slice over an empty range).\n*/\nfunction replaceStep(doc, from, to = from, slice = Slice.empty) {\n    if (from == to && !slice.size)\n        return null;\n    let $from = doc.resolve(from), $to = doc.resolve(to);\n    // Optimization -- avoid work if it's obvious that it's not needed.\n    if (fitsTrivially($from, $to, slice))\n        return new ReplaceStep(from, to, slice);\n    return new Fitter($from, $to, slice).fit();\n}\nfunction fitsTrivially($from, $to, slice) {\n    return !slice.openStart && !slice.openEnd && $from.start() == $to.start() &&\n        $from.parent.canReplace($from.index(), $to.index(), slice.content);\n}\n// Algorithm for 'placing' the elements of a slice into a gap:\n//\n// We consider the content of each node that is open to the left to be\n// independently placeable. I.e. in <p(\"foo\"), p(\"bar\")>, when the\n// paragraph on the left is open, \"foo\" can be placed (somewhere on\n// the left side of the replacement gap) independently from p(\"bar\").\n//\n// This class tracks the state of the placement progress in the\n// following properties:\n//\n//  - `frontier` holds a stack of `{type, match}` objects that\n//    represent the open side of the replacement. It starts at\n//    `$from`, then moves forward as content is placed, and is finally\n//    reconciled with `$to`.\n//\n//  - `unplaced` is a slice that represents the content that hasn't\n//    been placed yet.\n//\n//  - `placed` is a fragment of placed content. Its open-start value\n//    is implicit in `$from`, and its open-end value in `frontier`.\nclass Fitter {\n    constructor($from, $to, unplaced) {\n        this.$from = $from;\n        this.$to = $to;\n        this.unplaced = unplaced;\n        this.frontier = [];\n        this.placed = Fragment.empty;\n        for (let i = 0; i <= $from.depth; i++) {\n            let node = $from.node(i);\n            this.frontier.push({\n                type: node.type,\n                match: node.contentMatchAt($from.indexAfter(i))\n            });\n        }\n        for (let i = $from.depth; i > 0; i--)\n            this.placed = Fragment.from($from.node(i).copy(this.placed));\n    }\n    get depth() { return this.frontier.length - 1; }\n    fit() {\n        // As long as there's unplaced content, try to place some of it.\n        // If that fails, either increase the open score of the unplaced\n        // slice, or drop nodes from it, and then try again.\n        while (this.unplaced.size) {\n            let fit = this.findFittable();\n            if (fit)\n                this.placeNodes(fit);\n            else\n                this.openMore() || this.dropNode();\n        }\n        // When there's inline content directly after the frontier _and_\n        // directly after `this.$to`, we must generate a `ReplaceAround`\n        // step that pulls that content into the node after the frontier.\n        // That means the fitting must be done to the end of the textblock\n        // node after `this.$to`, not `this.$to` itself.\n        let moveInline = this.mustMoveInline(), placedSize = this.placed.size - this.depth - this.$from.depth;\n        let $from = this.$from, $to = this.close(moveInline < 0 ? this.$to : $from.doc.resolve(moveInline));\n        if (!$to)\n            return null;\n        // If closing to `$to` succeeded, create a step\n        let content = this.placed, openStart = $from.depth, openEnd = $to.depth;\n        while (openStart && openEnd && content.childCount == 1) { // Normalize by dropping open parent nodes\n            content = content.firstChild.content;\n            openStart--;\n            openEnd--;\n        }\n        let slice = new Slice(content, openStart, openEnd);\n        if (moveInline > -1)\n            return new ReplaceAroundStep($from.pos, moveInline, this.$to.pos, this.$to.end(), slice, placedSize);\n        if (slice.size || $from.pos != this.$to.pos) // Don't generate no-op steps\n            return new ReplaceStep($from.pos, $to.pos, slice);\n        return null;\n    }\n    // Find a position on the start spine of `this.unplaced` that has\n    // content that can be moved somewhere on the frontier. Returns two\n    // depths, one for the slice and one for the frontier.\n    findFittable() {\n        let startDepth = this.unplaced.openStart;\n        for (let cur = this.unplaced.content, d = 0, openEnd = this.unplaced.openEnd; d < startDepth; d++) {\n            let node = cur.firstChild;\n            if (cur.childCount > 1)\n                openEnd = 0;\n            if (node.type.spec.isolating && openEnd <= d) {\n                startDepth = d;\n                break;\n            }\n            cur = node.content;\n        }\n        // Only try wrapping nodes (pass 2) after finding a place without\n        // wrapping failed.\n        for (let pass = 1; pass <= 2; pass++) {\n            for (let sliceDepth = pass == 1 ? startDepth : this.unplaced.openStart; sliceDepth >= 0; sliceDepth--) {\n                let fragment, parent = null;\n                if (sliceDepth) {\n                    parent = contentAt(this.unplaced.content, sliceDepth - 1).firstChild;\n                    fragment = parent.content;\n                }\n                else {\n                    fragment = this.unplaced.content;\n                }\n                let first = fragment.firstChild;\n                for (let frontierDepth = this.depth; frontierDepth >= 0; frontierDepth--) {\n                    let { type, match } = this.frontier[frontierDepth], wrap, inject = null;\n                    // In pass 1, if the next node matches, or there is no next\n                    // node but the parents look compatible, we've found a\n                    // place.\n                    if (pass == 1 && (first ? match.matchType(first.type) || (inject = match.fillBefore(Fragment.from(first), false))\n                        : parent && type.compatibleContent(parent.type)))\n                        return { sliceDepth, frontierDepth, parent, inject };\n                    // In pass 2, look for a set of wrapping nodes that make\n                    // `first` fit here.\n                    else if (pass == 2 && first && (wrap = match.findWrapping(first.type)))\n                        return { sliceDepth, frontierDepth, parent, wrap };\n                    // Don't continue looking further up if the parent node\n                    // would fit here.\n                    if (parent && match.matchType(parent.type))\n                        break;\n                }\n            }\n        }\n    }\n    openMore() {\n        let { content, openStart, openEnd } = this.unplaced;\n        let inner = contentAt(content, openStart);\n        if (!inner.childCount || inner.firstChild.isLeaf)\n            return false;\n        this.unplaced = new Slice(content, openStart + 1, Math.max(openEnd, inner.size + openStart >= content.size - openEnd ? openStart + 1 : 0));\n        return true;\n    }\n    dropNode() {\n        let { content, openStart, openEnd } = this.unplaced;\n        let inner = contentAt(content, openStart);\n        if (inner.childCount <= 1 && openStart > 0) {\n            let openAtEnd = content.size - openStart <= openStart + inner.size;\n            this.unplaced = new Slice(dropFromFragment(content, openStart - 1, 1), openStart - 1, openAtEnd ? openStart - 1 : openEnd);\n        }\n        else {\n            this.unplaced = new Slice(dropFromFragment(content, openStart, 1), openStart, openEnd);\n        }\n    }\n    // Move content from the unplaced slice at `sliceDepth` to the\n    // frontier node at `frontierDepth`. Close that frontier node when\n    // applicable.\n    placeNodes({ sliceDepth, frontierDepth, parent, inject, wrap }) {\n        while (this.depth > frontierDepth)\n            this.closeFrontierNode();\n        if (wrap)\n            for (let i = 0; i < wrap.length; i++)\n                this.openFrontierNode(wrap[i]);\n        let slice = this.unplaced, fragment = parent ? parent.content : slice.content;\n        let openStart = slice.openStart - sliceDepth;\n        let taken = 0, add = [];\n        let { match, type } = this.frontier[frontierDepth];\n        if (inject) {\n            for (let i = 0; i < inject.childCount; i++)\n                add.push(inject.child(i));\n            match = match.matchFragment(inject);\n        }\n        // Computes the amount of (end) open nodes at the end of the\n        // fragment. When 0, the parent is open, but no more. When\n        // negative, nothing is open.\n        let openEndCount = (fragment.size + sliceDepth) - (slice.content.size - slice.openEnd);\n        // Scan over the fragment, fitting as many child nodes as\n        // possible.\n        while (taken < fragment.childCount) {\n            let next = fragment.child(taken), matches = match.matchType(next.type);\n            if (!matches)\n                break;\n            taken++;\n            if (taken > 1 || openStart == 0 || next.content.size) { // Drop empty open nodes\n                match = matches;\n                add.push(closeNodeStart(next.mark(type.allowedMarks(next.marks)), taken == 1 ? openStart : 0, taken == fragment.childCount ? openEndCount : -1));\n            }\n        }\n        let toEnd = taken == fragment.childCount;\n        if (!toEnd)\n            openEndCount = -1;\n        this.placed = addToFragment(this.placed, frontierDepth, Fragment.from(add));\n        this.frontier[frontierDepth].match = match;\n        // If the parent types match, and the entire node was moved, and\n        // it's not open, close this frontier node right away.\n        if (toEnd && openEndCount < 0 && parent && parent.type == this.frontier[this.depth].type && this.frontier.length > 1)\n            this.closeFrontierNode();\n        // Add new frontier nodes for any open nodes at the end.\n        for (let i = 0, cur = fragment; i < openEndCount; i++) {\n            let node = cur.lastChild;\n            this.frontier.push({ type: node.type, match: node.contentMatchAt(node.childCount) });\n            cur = node.content;\n        }\n        // Update `this.unplaced`. Drop the entire node from which we\n        // placed it we got to its end, otherwise just drop the placed\n        // nodes.\n        this.unplaced = !toEnd ? new Slice(dropFromFragment(slice.content, sliceDepth, taken), slice.openStart, slice.openEnd)\n            : sliceDepth == 0 ? Slice.empty\n                : new Slice(dropFromFragment(slice.content, sliceDepth - 1, 1), sliceDepth - 1, openEndCount < 0 ? slice.openEnd : sliceDepth - 1);\n    }\n    mustMoveInline() {\n        if (!this.$to.parent.isTextblock)\n            return -1;\n        let top = this.frontier[this.depth], level;\n        if (!top.type.isTextblock || !contentAfterFits(this.$to, this.$to.depth, top.type, top.match, false) ||\n            (this.$to.depth == this.depth && (level = this.findCloseLevel(this.$to)) && level.depth == this.depth))\n            return -1;\n        let { depth } = this.$to, after = this.$to.after(depth);\n        while (depth > 1 && after == this.$to.end(--depth))\n            ++after;\n        return after;\n    }\n    findCloseLevel($to) {\n        scan: for (let i = Math.min(this.depth, $to.depth); i >= 0; i--) {\n            let { match, type } = this.frontier[i];\n            let dropInner = i < $to.depth && $to.end(i + 1) == $to.pos + ($to.depth - (i + 1));\n            let fit = contentAfterFits($to, i, type, match, dropInner);\n            if (!fit)\n                continue;\n            for (let d = i - 1; d >= 0; d--) {\n                let { match, type } = this.frontier[d];\n                let matches = contentAfterFits($to, d, type, match, true);\n                if (!matches || matches.childCount)\n                    continue scan;\n            }\n            return { depth: i, fit, move: dropInner ? $to.doc.resolve($to.after(i + 1)) : $to };\n        }\n    }\n    close($to) {\n        let close = this.findCloseLevel($to);\n        if (!close)\n            return null;\n        while (this.depth > close.depth)\n            this.closeFrontierNode();\n        if (close.fit.childCount)\n            this.placed = addToFragment(this.placed, close.depth, close.fit);\n        $to = close.move;\n        for (let d = close.depth + 1; d <= $to.depth; d++) {\n            let node = $to.node(d), add = node.type.contentMatch.fillBefore(node.content, true, $to.index(d));\n            this.openFrontierNode(node.type, node.attrs, add);\n        }\n        return $to;\n    }\n    openFrontierNode(type, attrs = null, content) {\n        let top = this.frontier[this.depth];\n        top.match = top.match.matchType(type);\n        this.placed = addToFragment(this.placed, this.depth, Fragment.from(type.create(attrs, content)));\n        this.frontier.push({ type, match: type.contentMatch });\n    }\n    closeFrontierNode() {\n        let open = this.frontier.pop();\n        let add = open.match.fillBefore(Fragment.empty, true);\n        if (add.childCount)\n            this.placed = addToFragment(this.placed, this.frontier.length, add);\n    }\n}\nfunction dropFromFragment(fragment, depth, count) {\n    if (depth == 0)\n        return fragment.cutByIndex(count, fragment.childCount);\n    return fragment.replaceChild(0, fragment.firstChild.copy(dropFromFragment(fragment.firstChild.content, depth - 1, count)));\n}\nfunction addToFragment(fragment, depth, content) {\n    if (depth == 0)\n        return fragment.append(content);\n    return fragment.replaceChild(fragment.childCount - 1, fragment.lastChild.copy(addToFragment(fragment.lastChild.content, depth - 1, content)));\n}\nfunction contentAt(fragment, depth) {\n    for (let i = 0; i < depth; i++)\n        fragment = fragment.firstChild.content;\n    return fragment;\n}\nfunction closeNodeStart(node, openStart, openEnd) {\n    if (openStart <= 0)\n        return node;\n    let frag = node.content;\n    if (openStart > 1)\n        frag = frag.replaceChild(0, closeNodeStart(frag.firstChild, openStart - 1, frag.childCount == 1 ? openEnd - 1 : 0));\n    if (openStart > 0) {\n        frag = node.type.contentMatch.fillBefore(frag).append(frag);\n        if (openEnd <= 0)\n            frag = frag.append(node.type.contentMatch.matchFragment(frag).fillBefore(Fragment.empty, true));\n    }\n    return node.copy(frag);\n}\nfunction contentAfterFits($to, depth, type, match, open) {\n    let node = $to.node(depth), index = open ? $to.indexAfter(depth) : $to.index(depth);\n    if (index == node.childCount && !type.compatibleContent(node.type))\n        return null;\n    let fit = match.fillBefore(node.content, true, index);\n    return fit && !invalidMarks(type, node.content, index) ? fit : null;\n}\nfunction invalidMarks(type, fragment, start) {\n    for (let i = start; i < fragment.childCount; i++)\n        if (!type.allowsMarks(fragment.child(i).marks))\n            return true;\n    return false;\n}\nfunction definesContent(type) {\n    return type.spec.defining || type.spec.definingForContent;\n}\nfunction replaceRange(tr, from, to, slice) {\n    if (!slice.size)\n        return tr.deleteRange(from, to);\n    let $from = tr.doc.resolve(from), $to = tr.doc.resolve(to);\n    if (fitsTrivially($from, $to, slice))\n        return tr.step(new ReplaceStep(from, to, slice));\n    let targetDepths = coveredDepths($from, tr.doc.resolve(to));\n    // Can't replace the whole document, so remove 0 if it's present\n    if (targetDepths[targetDepths.length - 1] == 0)\n        targetDepths.pop();\n    // Negative numbers represent not expansion over the whole node at\n    // that depth, but replacing from $from.before(-D) to $to.pos.\n    let preferredTarget = -($from.depth + 1);\n    targetDepths.unshift(preferredTarget);\n    // This loop picks a preferred target depth, if one of the covering\n    // depths is not outside of a defining node, and adds negative\n    // depths for any depth that has $from at its start and does not\n    // cross a defining node.\n    for (let d = $from.depth, pos = $from.pos - 1; d > 0; d--, pos--) {\n        let spec = $from.node(d).type.spec;\n        if (spec.defining || spec.definingAsContext || spec.isolating)\n            break;\n        if (targetDepths.indexOf(d) > -1)\n            preferredTarget = d;\n        else if ($from.before(d) == pos)\n            targetDepths.splice(1, 0, -d);\n    }\n    // Try to fit each possible depth of the slice into each possible\n    // target depth, starting with the preferred depths.\n    let preferredTargetIndex = targetDepths.indexOf(preferredTarget);\n    let leftNodes = [], preferredDepth = slice.openStart;\n    for (let content = slice.content, i = 0;; i++) {\n        let node = content.firstChild;\n        leftNodes.push(node);\n        if (i == slice.openStart)\n            break;\n        content = node.content;\n    }\n    // Back up preferredDepth to cover defining textblocks directly\n    // above it, possibly skipping a non-defining textblock.\n    for (let d = preferredDepth - 1; d >= 0; d--) {\n        let leftNode = leftNodes[d], def = definesContent(leftNode.type);\n        if (def && !leftNode.sameMarkup($from.node(Math.abs(preferredTarget) - 1)))\n            preferredDepth = d;\n        else if (def || !leftNode.type.isTextblock)\n            break;\n    }\n    for (let j = slice.openStart; j >= 0; j--) {\n        let openDepth = (j + preferredDepth + 1) % (slice.openStart + 1);\n        let insert = leftNodes[openDepth];\n        if (!insert)\n            continue;\n        for (let i = 0; i < targetDepths.length; i++) {\n            // Loop over possible expansion levels, starting with the\n            // preferred one\n            let targetDepth = targetDepths[(i + preferredTargetIndex) % targetDepths.length], expand = true;\n            if (targetDepth < 0) {\n                expand = false;\n                targetDepth = -targetDepth;\n            }\n            let parent = $from.node(targetDepth - 1), index = $from.index(targetDepth - 1);\n            if (parent.canReplaceWith(index, index, insert.type, insert.marks))\n                return tr.replace($from.before(targetDepth), expand ? $to.after(targetDepth) : to, new Slice(closeFragment(slice.content, 0, slice.openStart, openDepth), openDepth, slice.openEnd));\n        }\n    }\n    let startSteps = tr.steps.length;\n    for (let i = targetDepths.length - 1; i >= 0; i--) {\n        tr.replace(from, to, slice);\n        if (tr.steps.length > startSteps)\n            break;\n        let depth = targetDepths[i];\n        if (depth < 0)\n            continue;\n        from = $from.before(depth);\n        to = $to.after(depth);\n    }\n}\nfunction closeFragment(fragment, depth, oldOpen, newOpen, parent) {\n    if (depth < oldOpen) {\n        let first = fragment.firstChild;\n        fragment = fragment.replaceChild(0, first.copy(closeFragment(first.content, depth + 1, oldOpen, newOpen, first)));\n    }\n    if (depth > newOpen) {\n        let match = parent.contentMatchAt(0);\n        let start = match.fillBefore(fragment).append(fragment);\n        fragment = start.append(match.matchFragment(start).fillBefore(Fragment.empty, true));\n    }\n    return fragment;\n}\nfunction replaceRangeWith(tr, from, to, node) {\n    if (!node.isInline && from == to && tr.doc.resolve(from).parent.content.size) {\n        let point = insertPoint(tr.doc, from, node.type);\n        if (point != null)\n            from = to = point;\n    }\n    tr.replaceRange(from, to, new Slice(Fragment.from(node), 0, 0));\n}\nfunction deleteRange(tr, from, to) {\n    let $from = tr.doc.resolve(from), $to = tr.doc.resolve(to);\n    let covered = coveredDepths($from, $to);\n    for (let i = 0; i < covered.length; i++) {\n        let depth = covered[i], last = i == covered.length - 1;\n        if ((last && depth == 0) || $from.node(depth).type.contentMatch.validEnd)\n            return tr.delete($from.start(depth), $to.end(depth));\n        if (depth > 0 && (last || $from.node(depth - 1).canReplace($from.index(depth - 1), $to.indexAfter(depth - 1))))\n            return tr.delete($from.before(depth), $to.after(depth));\n    }\n    for (let d = 1; d <= $from.depth && d <= $to.depth; d++) {\n        if (from - $from.start(d) == $from.depth - d && to > $from.end(d) && $to.end(d) - to != $to.depth - d &&\n            $from.start(d - 1) == $to.start(d - 1) && $from.node(d - 1).canReplace($from.index(d - 1), $to.index(d - 1)))\n            return tr.delete($from.before(d), to);\n    }\n    tr.delete(from, to);\n}\n// Returns an array of all depths for which $from - $to spans the\n// whole content of the nodes at that depth.\nfunction coveredDepths($from, $to) {\n    let result = [], minDepth = Math.min($from.depth, $to.depth);\n    for (let d = minDepth; d >= 0; d--) {\n        let start = $from.start(d);\n        if (start < $from.pos - ($from.depth - d) ||\n            $to.end(d) > $to.pos + ($to.depth - d) ||\n            $from.node(d).type.spec.isolating ||\n            $to.node(d).type.spec.isolating)\n            break;\n        if (start == $to.start(d) ||\n            (d == $from.depth && d == $to.depth && $from.parent.inlineContent && $to.parent.inlineContent &&\n                d && $to.start(d - 1) == start - 1))\n            result.push(d);\n    }\n    return result;\n}\n\n/**\nUpdate an attribute in a specific node.\n*/\nclass AttrStep extends Step {\n    /**\n    Construct an attribute step.\n    */\n    constructor(\n    /**\n    The position of the target node.\n    */\n    pos, \n    /**\n    The attribute to set.\n    */\n    attr, \n    // The attribute's new value.\n    value) {\n        super();\n        this.pos = pos;\n        this.attr = attr;\n        this.value = value;\n    }\n    apply(doc) {\n        let node = doc.nodeAt(this.pos);\n        if (!node)\n            return StepResult.fail(\"No node at attribute step's position\");\n        let attrs = Object.create(null);\n        for (let name in node.attrs)\n            attrs[name] = node.attrs[name];\n        attrs[this.attr] = this.value;\n        let updated = node.type.create(attrs, null, node.marks);\n        return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n    }\n    getMap() {\n        return StepMap.empty;\n    }\n    invert(doc) {\n        return new AttrStep(this.pos, this.attr, doc.nodeAt(this.pos).attrs[this.attr]);\n    }\n    map(mapping) {\n        let pos = mapping.mapResult(this.pos, 1);\n        return pos.deletedAfter ? null : new AttrStep(pos.pos, this.attr, this.value);\n    }\n    toJSON() {\n        return { stepType: \"attr\", pos: this.pos, attr: this.attr, value: this.value };\n    }\n    static fromJSON(schema, json) {\n        if (typeof json.pos != \"number\" || typeof json.attr != \"string\")\n            throw new RangeError(\"Invalid input for AttrStep.fromJSON\");\n        return new AttrStep(json.pos, json.attr, json.value);\n    }\n}\nStep.jsonID(\"attr\", AttrStep);\n/**\nUpdate an attribute in the doc node.\n*/\nclass DocAttrStep extends Step {\n    /**\n    Construct an attribute step.\n    */\n    constructor(\n    /**\n    The attribute to set.\n    */\n    attr, \n    // The attribute's new value.\n    value) {\n        super();\n        this.attr = attr;\n        this.value = value;\n    }\n    apply(doc) {\n        let attrs = Object.create(null);\n        for (let name in doc.attrs)\n            attrs[name] = doc.attrs[name];\n        attrs[this.attr] = this.value;\n        let updated = doc.type.create(attrs, doc.content, doc.marks);\n        return StepResult.ok(updated);\n    }\n    getMap() {\n        return StepMap.empty;\n    }\n    invert(doc) {\n        return new DocAttrStep(this.attr, doc.attrs[this.attr]);\n    }\n    map(mapping) {\n        return this;\n    }\n    toJSON() {\n        return { stepType: \"docAttr\", attr: this.attr, value: this.value };\n    }\n    static fromJSON(schema, json) {\n        if (typeof json.attr != \"string\")\n            throw new RangeError(\"Invalid input for DocAttrStep.fromJSON\");\n        return new DocAttrStep(json.attr, json.value);\n    }\n}\nStep.jsonID(\"docAttr\", DocAttrStep);\n\n/**\n@internal\n*/\nlet TransformError = class extends Error {\n};\nTransformError = function TransformError(message) {\n    let err = Error.call(this, message);\n    err.__proto__ = TransformError.prototype;\n    return err;\n};\nTransformError.prototype = Object.create(Error.prototype);\nTransformError.prototype.constructor = TransformError;\nTransformError.prototype.name = \"TransformError\";\n/**\nAbstraction to build up and track an array of\n[steps](https://prosemirror.net/docs/ref/#transform.Step) representing a document transformation.\n\nMost transforming methods return the `Transform` object itself, so\nthat they can be chained.\n*/\nclass Transform {\n    /**\n    Create a transform that starts with the given document.\n    */\n    constructor(\n    /**\n    The current document (the result of applying the steps in the\n    transform).\n    */\n    doc) {\n        this.doc = doc;\n        /**\n        The steps in this transform.\n        */\n        this.steps = [];\n        /**\n        The documents before each of the steps.\n        */\n        this.docs = [];\n        /**\n        A mapping with the maps for each of the steps in this transform.\n        */\n        this.mapping = new Mapping;\n    }\n    /**\n    The starting document.\n    */\n    get before() { return this.docs.length ? this.docs[0] : this.doc; }\n    /**\n    Apply a new step in this transform, saving the result. Throws an\n    error when the step fails.\n    */\n    step(step) {\n        let result = this.maybeStep(step);\n        if (result.failed)\n            throw new TransformError(result.failed);\n        return this;\n    }\n    /**\n    Try to apply a step in this transformation, ignoring it if it\n    fails. Returns the step result.\n    */\n    maybeStep(step) {\n        let result = step.apply(this.doc);\n        if (!result.failed)\n            this.addStep(step, result.doc);\n        return result;\n    }\n    /**\n    True when the document has been changed (when there are any\n    steps).\n    */\n    get docChanged() {\n        return this.steps.length > 0;\n    }\n    /**\n    @internal\n    */\n    addStep(step, doc) {\n        this.docs.push(this.doc);\n        this.steps.push(step);\n        this.mapping.appendMap(step.getMap());\n        this.doc = doc;\n    }\n    /**\n    Replace the part of the document between `from` and `to` with the\n    given `slice`.\n    */\n    replace(from, to = from, slice = Slice.empty) {\n        let step = replaceStep(this.doc, from, to, slice);\n        if (step)\n            this.step(step);\n        return this;\n    }\n    /**\n    Replace the given range with the given content, which may be a\n    fragment, node, or array of nodes.\n    */\n    replaceWith(from, to, content) {\n        return this.replace(from, to, new Slice(Fragment.from(content), 0, 0));\n    }\n    /**\n    Delete the content between the given positions.\n    */\n    delete(from, to) {\n        return this.replace(from, to, Slice.empty);\n    }\n    /**\n    Insert the given content at the given position.\n    */\n    insert(pos, content) {\n        return this.replaceWith(pos, pos, content);\n    }\n    /**\n    Replace a range of the document with a given slice, using\n    `from`, `to`, and the slice's\n    [`openStart`](https://prosemirror.net/docs/ref/#model.Slice.openStart) property as hints, rather\n    than fixed start and end points. This method may grow the\n    replaced area or close open nodes in the slice in order to get a\n    fit that is more in line with WYSIWYG expectations, by dropping\n    fully covered parent nodes of the replaced region when they are\n    marked [non-defining as\n    context](https://prosemirror.net/docs/ref/#model.NodeSpec.definingAsContext), or including an\n    open parent node from the slice that _is_ marked as [defining\n    its content](https://prosemirror.net/docs/ref/#model.NodeSpec.definingForContent).\n    \n    This is the method, for example, to handle paste. The similar\n    [`replace`](https://prosemirror.net/docs/ref/#transform.Transform.replace) method is a more\n    primitive tool which will _not_ move the start and end of its given\n    range, and is useful in situations where you need more precise\n    control over what happens.\n    */\n    replaceRange(from, to, slice) {\n        replaceRange(this, from, to, slice);\n        return this;\n    }\n    /**\n    Replace the given range with a node, but use `from` and `to` as\n    hints, rather than precise positions. When from and to are the same\n    and are at the start or end of a parent node in which the given\n    node doesn't fit, this method may _move_ them out towards a parent\n    that does allow the given node to be placed. When the given range\n    completely covers a parent node, this method may completely replace\n    that parent node.\n    */\n    replaceRangeWith(from, to, node) {\n        replaceRangeWith(this, from, to, node);\n        return this;\n    }\n    /**\n    Delete the given range, expanding it to cover fully covered\n    parent nodes until a valid replace is found.\n    */\n    deleteRange(from, to) {\n        deleteRange(this, from, to);\n        return this;\n    }\n    /**\n    Split the content in the given range off from its parent, if there\n    is sibling content before or after it, and move it up the tree to\n    the depth specified by `target`. You'll probably want to use\n    [`liftTarget`](https://prosemirror.net/docs/ref/#transform.liftTarget) to compute `target`, to make\n    sure the lift is valid.\n    */\n    lift(range, target) {\n        lift(this, range, target);\n        return this;\n    }\n    /**\n    Join the blocks around the given position. If depth is 2, their\n    last and first siblings are also joined, and so on.\n    */\n    join(pos, depth = 1) {\n        join(this, pos, depth);\n        return this;\n    }\n    /**\n    Wrap the given [range](https://prosemirror.net/docs/ref/#model.NodeRange) in the given set of wrappers.\n    The wrappers are assumed to be valid in this position, and should\n    probably be computed with [`findWrapping`](https://prosemirror.net/docs/ref/#transform.findWrapping).\n    */\n    wrap(range, wrappers) {\n        wrap(this, range, wrappers);\n        return this;\n    }\n    /**\n    Set the type of all textblocks (partly) between `from` and `to` to\n    the given node type with the given attributes.\n    */\n    setBlockType(from, to = from, type, attrs = null) {\n        setBlockType(this, from, to, type, attrs);\n        return this;\n    }\n    /**\n    Change the type, attributes, and/or marks of the node at `pos`.\n    When `type` isn't given, the existing node type is preserved,\n    */\n    setNodeMarkup(pos, type, attrs = null, marks) {\n        setNodeMarkup(this, pos, type, attrs, marks);\n        return this;\n    }\n    /**\n    Set a single attribute on a given node to a new value.\n    The `pos` addresses the document content. Use `setDocAttribute`\n    to set attributes on the document itself.\n    */\n    setNodeAttribute(pos, attr, value) {\n        this.step(new AttrStep(pos, attr, value));\n        return this;\n    }\n    /**\n    Set a single attribute on the document to a new value.\n    */\n    setDocAttribute(attr, value) {\n        this.step(new DocAttrStep(attr, value));\n        return this;\n    }\n    /**\n    Add a mark to the node at position `pos`.\n    */\n    addNodeMark(pos, mark) {\n        this.step(new AddNodeMarkStep(pos, mark));\n        return this;\n    }\n    /**\n    Remove a mark (or all marks of the given type) from the node at\n    position `pos`.\n    */\n    removeNodeMark(pos, mark) {\n        let node = this.doc.nodeAt(pos);\n        if (!node)\n            throw new RangeError(\"No node at position \" + pos);\n        if (mark instanceof Mark) {\n            if (mark.isInSet(node.marks))\n                this.step(new RemoveNodeMarkStep(pos, mark));\n        }\n        else {\n            let set = node.marks, found, steps = [];\n            while (found = mark.isInSet(set)) {\n                steps.push(new RemoveNodeMarkStep(pos, found));\n                set = found.removeFromSet(set);\n            }\n            for (let i = steps.length - 1; i >= 0; i--)\n                this.step(steps[i]);\n        }\n        return this;\n    }\n    /**\n    Split the node at the given position, and optionally, if `depth` is\n    greater than one, any number of nodes above that. By default, the\n    parts split off will inherit the node type of the original node.\n    This can be changed by passing an array of types and attributes to\n    use after the split (with the outermost nodes coming first).\n    */\n    split(pos, depth = 1, typesAfter) {\n        split(this, pos, depth, typesAfter);\n        return this;\n    }\n    /**\n    Add the given mark to the inline content between `from` and `to`.\n    */\n    addMark(from, to, mark) {\n        addMark(this, from, to, mark);\n        return this;\n    }\n    /**\n    Remove marks from inline nodes between `from` and `to`. When\n    `mark` is a single mark, remove precisely that mark. When it is\n    a mark type, remove all marks of that type. When it is null,\n    remove all marks of any type.\n    */\n    removeMark(from, to, mark) {\n        removeMark(this, from, to, mark);\n        return this;\n    }\n    /**\n    Removes all marks and nodes from the content of the node at\n    `pos` that don't match the given new parent node type. Accepts\n    an optional starting [content match](https://prosemirror.net/docs/ref/#model.ContentMatch) as\n    third argument.\n    */\n    clearIncompatible(pos, parentType, match) {\n        clearIncompatible(this, pos, parentType, match);\n        return this;\n    }\n}\n\nexport { AddMarkStep, AddNodeMarkStep, AttrStep, DocAttrStep, MapResult, Mapping, RemoveMarkStep, RemoveNodeMarkStep, ReplaceAroundStep, ReplaceStep, Step, StepMap, StepResult, Transform, TransformError, canJoin, canSplit, dropPoint, findWrapping, insertPoint, joinPoint, liftTarget, replaceStep };\n","import { Slice, Fragment, Mark, Node } from 'prosemirror-model';\nimport { ReplaceStep, ReplaceAroundStep, Transform } from 'prosemirror-transform';\n\nconst classesById = Object.create(null);\n/**\nSuperclass for editor selections. Every selection type should\nextend this. Should not be instantiated directly.\n*/\nclass Selection {\n    /**\n    Initialize a selection with the head and anchor and ranges. If no\n    ranges are given, constructs a single range across `$anchor` and\n    `$head`.\n    */\n    constructor(\n    /**\n    The resolved anchor of the selection (the side that stays in\n    place when the selection is modified).\n    */\n    $anchor, \n    /**\n    The resolved head of the selection (the side that moves when\n    the selection is modified).\n    */\n    $head, ranges) {\n        this.$anchor = $anchor;\n        this.$head = $head;\n        this.ranges = ranges || [new SelectionRange($anchor.min($head), $anchor.max($head))];\n    }\n    /**\n    The selection's anchor, as an unresolved position.\n    */\n    get anchor() { return this.$anchor.pos; }\n    /**\n    The selection's head.\n    */\n    get head() { return this.$head.pos; }\n    /**\n    The lower bound of the selection's main range.\n    */\n    get from() { return this.$from.pos; }\n    /**\n    The upper bound of the selection's main range.\n    */\n    get to() { return this.$to.pos; }\n    /**\n    The resolved lower  bound of the selection's main range.\n    */\n    get $from() {\n        return this.ranges[0].$from;\n    }\n    /**\n    The resolved upper bound of the selection's main range.\n    */\n    get $to() {\n        return this.ranges[0].$to;\n    }\n    /**\n    Indicates whether the selection contains any content.\n    */\n    get empty() {\n        let ranges = this.ranges;\n        for (let i = 0; i < ranges.length; i++)\n            if (ranges[i].$from.pos != ranges[i].$to.pos)\n                return false;\n        return true;\n    }\n    /**\n    Get the content of this selection as a slice.\n    */\n    content() {\n        return this.$from.doc.slice(this.from, this.to, true);\n    }\n    /**\n    Replace the selection with a slice or, if no slice is given,\n    delete the selection. Will append to the given transaction.\n    */\n    replace(tr, content = Slice.empty) {\n        // Put the new selection at the position after the inserted\n        // content. When that ended in an inline node, search backwards,\n        // to get the position after that node. If not, search forward.\n        let lastNode = content.content.lastChild, lastParent = null;\n        for (let i = 0; i < content.openEnd; i++) {\n            lastParent = lastNode;\n            lastNode = lastNode.lastChild;\n        }\n        let mapFrom = tr.steps.length, ranges = this.ranges;\n        for (let i = 0; i < ranges.length; i++) {\n            let { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n            tr.replaceRange(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content);\n            if (i == 0)\n                selectionToInsertionEnd(tr, mapFrom, (lastNode ? lastNode.isInline : lastParent && lastParent.isTextblock) ? -1 : 1);\n        }\n    }\n    /**\n    Replace the selection with the given node, appending the changes\n    to the given transaction.\n    */\n    replaceWith(tr, node) {\n        let mapFrom = tr.steps.length, ranges = this.ranges;\n        for (let i = 0; i < ranges.length; i++) {\n            let { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n            let from = mapping.map($from.pos), to = mapping.map($to.pos);\n            if (i) {\n                tr.deleteRange(from, to);\n            }\n            else {\n                tr.replaceRangeWith(from, to, node);\n                selectionToInsertionEnd(tr, mapFrom, node.isInline ? -1 : 1);\n            }\n        }\n    }\n    /**\n    Find a valid cursor or leaf node selection starting at the given\n    position and searching back if `dir` is negative, and forward if\n    positive. When `textOnly` is true, only consider cursor\n    selections. Will return null when no valid selection position is\n    found.\n    */\n    static findFrom($pos, dir, textOnly = false) {\n        let inner = $pos.parent.inlineContent ? new TextSelection($pos)\n            : findSelectionIn($pos.node(0), $pos.parent, $pos.pos, $pos.index(), dir, textOnly);\n        if (inner)\n            return inner;\n        for (let depth = $pos.depth - 1; depth >= 0; depth--) {\n            let found = dir < 0\n                ? findSelectionIn($pos.node(0), $pos.node(depth), $pos.before(depth + 1), $pos.index(depth), dir, textOnly)\n                : findSelectionIn($pos.node(0), $pos.node(depth), $pos.after(depth + 1), $pos.index(depth) + 1, dir, textOnly);\n            if (found)\n                return found;\n        }\n        return null;\n    }\n    /**\n    Find a valid cursor or leaf node selection near the given\n    position. Searches forward first by default, but if `bias` is\n    negative, it will search backwards first.\n    */\n    static near($pos, bias = 1) {\n        return this.findFrom($pos, bias) || this.findFrom($pos, -bias) || new AllSelection($pos.node(0));\n    }\n    /**\n    Find the cursor or leaf node selection closest to the start of\n    the given document. Will return an\n    [`AllSelection`](https://prosemirror.net/docs/ref/#state.AllSelection) if no valid position\n    exists.\n    */\n    static atStart(doc) {\n        return findSelectionIn(doc, doc, 0, 0, 1) || new AllSelection(doc);\n    }\n    /**\n    Find the cursor or leaf node selection closest to the end of the\n    given document.\n    */\n    static atEnd(doc) {\n        return findSelectionIn(doc, doc, doc.content.size, doc.childCount, -1) || new AllSelection(doc);\n    }\n    /**\n    Deserialize the JSON representation of a selection. Must be\n    implemented for custom classes (as a static class method).\n    */\n    static fromJSON(doc, json) {\n        if (!json || !json.type)\n            throw new RangeError(\"Invalid input for Selection.fromJSON\");\n        let cls = classesById[json.type];\n        if (!cls)\n            throw new RangeError(`No selection type ${json.type} defined`);\n        return cls.fromJSON(doc, json);\n    }\n    /**\n    To be able to deserialize selections from JSON, custom selection\n    classes must register themselves with an ID string, so that they\n    can be disambiguated. Try to pick something that's unlikely to\n    clash with classes from other modules.\n    */\n    static jsonID(id, selectionClass) {\n        if (id in classesById)\n            throw new RangeError(\"Duplicate use of selection JSON ID \" + id);\n        classesById[id] = selectionClass;\n        selectionClass.prototype.jsonID = id;\n        return selectionClass;\n    }\n    /**\n    Get a [bookmark](https://prosemirror.net/docs/ref/#state.SelectionBookmark) for this selection,\n    which is a value that can be mapped without having access to a\n    current document, and later resolved to a real selection for a\n    given document again. (This is used mostly by the history to\n    track and restore old selections.) The default implementation of\n    this method just converts the selection to a text selection and\n    returns the bookmark for that.\n    */\n    getBookmark() {\n        return TextSelection.between(this.$anchor, this.$head).getBookmark();\n    }\n}\nSelection.prototype.visible = true;\n/**\nRepresents a selected range in a document.\n*/\nclass SelectionRange {\n    /**\n    Create a range.\n    */\n    constructor(\n    /**\n    The lower bound of the range.\n    */\n    $from, \n    /**\n    The upper bound of the range.\n    */\n    $to) {\n        this.$from = $from;\n        this.$to = $to;\n    }\n}\nlet warnedAboutTextSelection = false;\nfunction checkTextSelection($pos) {\n    if (!warnedAboutTextSelection && !$pos.parent.inlineContent) {\n        warnedAboutTextSelection = true;\n        console[\"warn\"](\"TextSelection endpoint not pointing into a node with inline content (\" + $pos.parent.type.name + \")\");\n    }\n}\n/**\nA text selection represents a classical editor selection, with a\nhead (the moving side) and anchor (immobile side), both of which\npoint into textblock nodes. It can be empty (a regular cursor\nposition).\n*/\nclass TextSelection extends Selection {\n    /**\n    Construct a text selection between the given points.\n    */\n    constructor($anchor, $head = $anchor) {\n        checkTextSelection($anchor);\n        checkTextSelection($head);\n        super($anchor, $head);\n    }\n    /**\n    Returns a resolved position if this is a cursor selection (an\n    empty text selection), and null otherwise.\n    */\n    get $cursor() { return this.$anchor.pos == this.$head.pos ? this.$head : null; }\n    map(doc, mapping) {\n        let $head = doc.resolve(mapping.map(this.head));\n        if (!$head.parent.inlineContent)\n            return Selection.near($head);\n        let $anchor = doc.resolve(mapping.map(this.anchor));\n        return new TextSelection($anchor.parent.inlineContent ? $anchor : $head, $head);\n    }\n    replace(tr, content = Slice.empty) {\n        super.replace(tr, content);\n        if (content == Slice.empty) {\n            let marks = this.$from.marksAcross(this.$to);\n            if (marks)\n                tr.ensureMarks(marks);\n        }\n    }\n    eq(other) {\n        return other instanceof TextSelection && other.anchor == this.anchor && other.head == this.head;\n    }\n    getBookmark() {\n        return new TextBookmark(this.anchor, this.head);\n    }\n    toJSON() {\n        return { type: \"text\", anchor: this.anchor, head: this.head };\n    }\n    /**\n    @internal\n    */\n    static fromJSON(doc, json) {\n        if (typeof json.anchor != \"number\" || typeof json.head != \"number\")\n            throw new RangeError(\"Invalid input for TextSelection.fromJSON\");\n        return new TextSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n    }\n    /**\n    Create a text selection from non-resolved positions.\n    */\n    static create(doc, anchor, head = anchor) {\n        let $anchor = doc.resolve(anchor);\n        return new this($anchor, head == anchor ? $anchor : doc.resolve(head));\n    }\n    /**\n    Return a text selection that spans the given positions or, if\n    they aren't text positions, find a text selection near them.\n    `bias` determines whether the method searches forward (default)\n    or backwards (negative number) first. Will fall back to calling\n    [`Selection.near`](https://prosemirror.net/docs/ref/#state.Selection^near) when the document\n    doesn't contain a valid text position.\n    */\n    static between($anchor, $head, bias) {\n        let dPos = $anchor.pos - $head.pos;\n        if (!bias || dPos)\n            bias = dPos >= 0 ? 1 : -1;\n        if (!$head.parent.inlineContent) {\n            let found = Selection.findFrom($head, bias, true) || Selection.findFrom($head, -bias, true);\n            if (found)\n                $head = found.$head;\n            else\n                return Selection.near($head, bias);\n        }\n        if (!$anchor.parent.inlineContent) {\n            if (dPos == 0) {\n                $anchor = $head;\n            }\n            else {\n                $anchor = (Selection.findFrom($anchor, -bias, true) || Selection.findFrom($anchor, bias, true)).$anchor;\n                if (($anchor.pos < $head.pos) != (dPos < 0))\n                    $anchor = $head;\n            }\n        }\n        return new TextSelection($anchor, $head);\n    }\n}\nSelection.jsonID(\"text\", TextSelection);\nclass TextBookmark {\n    constructor(anchor, head) {\n        this.anchor = anchor;\n        this.head = head;\n    }\n    map(mapping) {\n        return new TextBookmark(mapping.map(this.anchor), mapping.map(this.head));\n    }\n    resolve(doc) {\n        return TextSelection.between(doc.resolve(this.anchor), doc.resolve(this.head));\n    }\n}\n/**\nA node selection is a selection that points at a single node. All\nnodes marked [selectable](https://prosemirror.net/docs/ref/#model.NodeSpec.selectable) can be the\ntarget of a node selection. In such a selection, `from` and `to`\npoint directly before and after the selected node, `anchor` equals\n`from`, and `head` equals `to`..\n*/\nclass NodeSelection extends Selection {\n    /**\n    Create a node selection. Does not verify the validity of its\n    argument.\n    */\n    constructor($pos) {\n        let node = $pos.nodeAfter;\n        let $end = $pos.node(0).resolve($pos.pos + node.nodeSize);\n        super($pos, $end);\n        this.node = node;\n    }\n    map(doc, mapping) {\n        let { deleted, pos } = mapping.mapResult(this.anchor);\n        let $pos = doc.resolve(pos);\n        if (deleted)\n            return Selection.near($pos);\n        return new NodeSelection($pos);\n    }\n    content() {\n        return new Slice(Fragment.from(this.node), 0, 0);\n    }\n    eq(other) {\n        return other instanceof NodeSelection && other.anchor == this.anchor;\n    }\n    toJSON() {\n        return { type: \"node\", anchor: this.anchor };\n    }\n    getBookmark() { return new NodeBookmark(this.anchor); }\n    /**\n    @internal\n    */\n    static fromJSON(doc, json) {\n        if (typeof json.anchor != \"number\")\n            throw new RangeError(\"Invalid input for NodeSelection.fromJSON\");\n        return new NodeSelection(doc.resolve(json.anchor));\n    }\n    /**\n    Create a node selection from non-resolved positions.\n    */\n    static create(doc, from) {\n        return new NodeSelection(doc.resolve(from));\n    }\n    /**\n    Determines whether the given node may be selected as a node\n    selection.\n    */\n    static isSelectable(node) {\n        return !node.isText && node.type.spec.selectable !== false;\n    }\n}\nNodeSelection.prototype.visible = false;\nSelection.jsonID(\"node\", NodeSelection);\nclass NodeBookmark {\n    constructor(anchor) {\n        this.anchor = anchor;\n    }\n    map(mapping) {\n        let { deleted, pos } = mapping.mapResult(this.anchor);\n        return deleted ? new TextBookmark(pos, pos) : new NodeBookmark(pos);\n    }\n    resolve(doc) {\n        let $pos = doc.resolve(this.anchor), node = $pos.nodeAfter;\n        if (node && NodeSelection.isSelectable(node))\n            return new NodeSelection($pos);\n        return Selection.near($pos);\n    }\n}\n/**\nA selection type that represents selecting the whole document\n(which can not necessarily be expressed with a text selection, when\nthere are for example leaf block nodes at the start or end of the\ndocument).\n*/\nclass AllSelection extends Selection {\n    /**\n    Create an all-selection over the given document.\n    */\n    constructor(doc) {\n        super(doc.resolve(0), doc.resolve(doc.content.size));\n    }\n    replace(tr, content = Slice.empty) {\n        if (content == Slice.empty) {\n            tr.delete(0, tr.doc.content.size);\n            let sel = Selection.atStart(tr.doc);\n            if (!sel.eq(tr.selection))\n                tr.setSelection(sel);\n        }\n        else {\n            super.replace(tr, content);\n        }\n    }\n    toJSON() { return { type: \"all\" }; }\n    /**\n    @internal\n    */\n    static fromJSON(doc) { return new AllSelection(doc); }\n    map(doc) { return new AllSelection(doc); }\n    eq(other) { return other instanceof AllSelection; }\n    getBookmark() { return AllBookmark; }\n}\nSelection.jsonID(\"all\", AllSelection);\nconst AllBookmark = {\n    map() { return this; },\n    resolve(doc) { return new AllSelection(doc); }\n};\n// FIXME we'll need some awareness of text direction when scanning for selections\n// Try to find a selection inside the given node. `pos` points at the\n// position where the search starts. When `text` is true, only return\n// text selections.\nfunction findSelectionIn(doc, node, pos, index, dir, text = false) {\n    if (node.inlineContent)\n        return TextSelection.create(doc, pos);\n    for (let i = index - (dir > 0 ? 0 : 1); dir > 0 ? i < node.childCount : i >= 0; i += dir) {\n        let child = node.child(i);\n        if (!child.isAtom) {\n            let inner = findSelectionIn(doc, child, pos + dir, dir < 0 ? child.childCount : 0, dir, text);\n            if (inner)\n                return inner;\n        }\n        else if (!text && NodeSelection.isSelectable(child)) {\n            return NodeSelection.create(doc, pos - (dir < 0 ? child.nodeSize : 0));\n        }\n        pos += child.nodeSize * dir;\n    }\n    return null;\n}\nfunction selectionToInsertionEnd(tr, startLen, bias) {\n    let last = tr.steps.length - 1;\n    if (last < startLen)\n        return;\n    let step = tr.steps[last];\n    if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep))\n        return;\n    let map = tr.mapping.maps[last], end;\n    map.forEach((_from, _to, _newFrom, newTo) => { if (end == null)\n        end = newTo; });\n    tr.setSelection(Selection.near(tr.doc.resolve(end), bias));\n}\n\nconst UPDATED_SEL = 1, UPDATED_MARKS = 2, UPDATED_SCROLL = 4;\n/**\nAn editor state transaction, which can be applied to a state to\ncreate an updated state. Use\n[`EditorState.tr`](https://prosemirror.net/docs/ref/#state.EditorState.tr) to create an instance.\n\nTransactions track changes to the document (they are a subclass of\n[`Transform`](https://prosemirror.net/docs/ref/#transform.Transform)), but also other state changes,\nlike selection updates and adjustments of the set of [stored\nmarks](https://prosemirror.net/docs/ref/#state.EditorState.storedMarks). In addition, you can store\nmetadata properties in a transaction, which are extra pieces of\ninformation that client code or plugins can use to describe what a\ntransaction represents, so that they can update their [own\nstate](https://prosemirror.net/docs/ref/#state.StateField) accordingly.\n\nThe [editor view](https://prosemirror.net/docs/ref/#view.EditorView) uses a few metadata\nproperties: it will attach a property `\"pointer\"` with the value\n`true` to selection transactions directly caused by mouse or touch\ninput, a `\"composition\"` property holding an ID identifying the\ncomposition that caused it to transactions caused by composed DOM\ninput, and a `\"uiEvent\"` property of that may be `\"paste\"`,\n`\"cut\"`, or `\"drop\"`.\n*/\nclass Transaction extends Transform {\n    /**\n    @internal\n    */\n    constructor(state) {\n        super(state.doc);\n        // The step count for which the current selection is valid.\n        this.curSelectionFor = 0;\n        // Bitfield to track which aspects of the state were updated by\n        // this transaction.\n        this.updated = 0;\n        // Object used to store metadata properties for the transaction.\n        this.meta = Object.create(null);\n        this.time = Date.now();\n        this.curSelection = state.selection;\n        this.storedMarks = state.storedMarks;\n    }\n    /**\n    The transaction's current selection. This defaults to the editor\n    selection [mapped](https://prosemirror.net/docs/ref/#state.Selection.map) through the steps in the\n    transaction, but can be overwritten with\n    [`setSelection`](https://prosemirror.net/docs/ref/#state.Transaction.setSelection).\n    */\n    get selection() {\n        if (this.curSelectionFor < this.steps.length) {\n            this.curSelection = this.curSelection.map(this.doc, this.mapping.slice(this.curSelectionFor));\n            this.curSelectionFor = this.steps.length;\n        }\n        return this.curSelection;\n    }\n    /**\n    Update the transaction's current selection. Will determine the\n    selection that the editor gets when the transaction is applied.\n    */\n    setSelection(selection) {\n        if (selection.$from.doc != this.doc)\n            throw new RangeError(\"Selection passed to setSelection must point at the current document\");\n        this.curSelection = selection;\n        this.curSelectionFor = this.steps.length;\n        this.updated = (this.updated | UPDATED_SEL) & ~UPDATED_MARKS;\n        this.storedMarks = null;\n        return this;\n    }\n    /**\n    Whether the selection was explicitly updated by this transaction.\n    */\n    get selectionSet() {\n        return (this.updated & UPDATED_SEL) > 0;\n    }\n    /**\n    Set the current stored marks.\n    */\n    setStoredMarks(marks) {\n        this.storedMarks = marks;\n        this.updated |= UPDATED_MARKS;\n        return this;\n    }\n    /**\n    Make sure the current stored marks or, if that is null, the marks\n    at the selection, match the given set of marks. Does nothing if\n    this is already the case.\n    */\n    ensureMarks(marks) {\n        if (!Mark.sameSet(this.storedMarks || this.selection.$from.marks(), marks))\n            this.setStoredMarks(marks);\n        return this;\n    }\n    /**\n    Add a mark to the set of stored marks.\n    */\n    addStoredMark(mark) {\n        return this.ensureMarks(mark.addToSet(this.storedMarks || this.selection.$head.marks()));\n    }\n    /**\n    Remove a mark or mark type from the set of stored marks.\n    */\n    removeStoredMark(mark) {\n        return this.ensureMarks(mark.removeFromSet(this.storedMarks || this.selection.$head.marks()));\n    }\n    /**\n    Whether the stored marks were explicitly set for this transaction.\n    */\n    get storedMarksSet() {\n        return (this.updated & UPDATED_MARKS) > 0;\n    }\n    /**\n    @internal\n    */\n    addStep(step, doc) {\n        super.addStep(step, doc);\n        this.updated = this.updated & ~UPDATED_MARKS;\n        this.storedMarks = null;\n    }\n    /**\n    Update the timestamp for the transaction.\n    */\n    setTime(time) {\n        this.time = time;\n        return this;\n    }\n    /**\n    Replace the current selection with the given slice.\n    */\n    replaceSelection(slice) {\n        this.selection.replace(this, slice);\n        return this;\n    }\n    /**\n    Replace the selection with the given node. When `inheritMarks` is\n    true and the content is inline, it inherits the marks from the\n    place where it is inserted.\n    */\n    replaceSelectionWith(node, inheritMarks = true) {\n        let selection = this.selection;\n        if (inheritMarks)\n            node = node.mark(this.storedMarks || (selection.empty ? selection.$from.marks() : (selection.$from.marksAcross(selection.$to) || Mark.none)));\n        selection.replaceWith(this, node);\n        return this;\n    }\n    /**\n    Delete the selection.\n    */\n    deleteSelection() {\n        this.selection.replace(this);\n        return this;\n    }\n    /**\n    Replace the given range, or the selection if no range is given,\n    with a text node containing the given string.\n    */\n    insertText(text, from, to) {\n        let schema = this.doc.type.schema;\n        if (from == null) {\n            if (!text)\n                return this.deleteSelection();\n            return this.replaceSelectionWith(schema.text(text), true);\n        }\n        else {\n            if (to == null)\n                to = from;\n            to = to == null ? from : to;\n            if (!text)\n                return this.deleteRange(from, to);\n            let marks = this.storedMarks;\n            if (!marks) {\n                let $from = this.doc.resolve(from);\n                marks = to == from ? $from.marks() : $from.marksAcross(this.doc.resolve(to));\n            }\n            this.replaceRangeWith(from, to, schema.text(text, marks));\n            if (!this.selection.empty)\n                this.setSelection(Selection.near(this.selection.$to));\n            return this;\n        }\n    }\n    /**\n    Store a metadata property in this transaction, keyed either by\n    name or by plugin.\n    */\n    setMeta(key, value) {\n        this.meta[typeof key == \"string\" ? key : key.key] = value;\n        return this;\n    }\n    /**\n    Retrieve a metadata property for a given name or plugin.\n    */\n    getMeta(key) {\n        return this.meta[typeof key == \"string\" ? key : key.key];\n    }\n    /**\n    Returns true if this transaction doesn't contain any metadata,\n    and can thus safely be extended.\n    */\n    get isGeneric() {\n        for (let _ in this.meta)\n            return false;\n        return true;\n    }\n    /**\n    Indicate that the editor should scroll the selection into view\n    when updated to the state produced by this transaction.\n    */\n    scrollIntoView() {\n        this.updated |= UPDATED_SCROLL;\n        return this;\n    }\n    /**\n    True when this transaction has had `scrollIntoView` called on it.\n    */\n    get scrolledIntoView() {\n        return (this.updated & UPDATED_SCROLL) > 0;\n    }\n}\n\nfunction bind(f, self) {\n    return !self || !f ? f : f.bind(self);\n}\nclass FieldDesc {\n    constructor(name, desc, self) {\n        this.name = name;\n        this.init = bind(desc.init, self);\n        this.apply = bind(desc.apply, self);\n    }\n}\nconst baseFields = [\n    new FieldDesc(\"doc\", {\n        init(config) { return config.doc || config.schema.topNodeType.createAndFill(); },\n        apply(tr) { return tr.doc; }\n    }),\n    new FieldDesc(\"selection\", {\n        init(config, instance) { return config.selection || Selection.atStart(instance.doc); },\n        apply(tr) { return tr.selection; }\n    }),\n    new FieldDesc(\"storedMarks\", {\n        init(config) { return config.storedMarks || null; },\n        apply(tr, _marks, _old, state) { return state.selection.$cursor ? tr.storedMarks : null; }\n    }),\n    new FieldDesc(\"scrollToSelection\", {\n        init() { return 0; },\n        apply(tr, prev) { return tr.scrolledIntoView ? prev + 1 : prev; }\n    })\n];\n// Object wrapping the part of a state object that stays the same\n// across transactions. Stored in the state's `config` property.\nclass Configuration {\n    constructor(schema, plugins) {\n        this.schema = schema;\n        this.plugins = [];\n        this.pluginsByKey = Object.create(null);\n        this.fields = baseFields.slice();\n        if (plugins)\n            plugins.forEach(plugin => {\n                if (this.pluginsByKey[plugin.key])\n                    throw new RangeError(\"Adding different instances of a keyed plugin (\" + plugin.key + \")\");\n                this.plugins.push(plugin);\n                this.pluginsByKey[plugin.key] = plugin;\n                if (plugin.spec.state)\n                    this.fields.push(new FieldDesc(plugin.key, plugin.spec.state, plugin));\n            });\n    }\n}\n/**\nThe state of a ProseMirror editor is represented by an object of\nthis type. A state is a persistent data structure—it isn't\nupdated, but rather a new state value is computed from an old one\nusing the [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) method.\n\nA state holds a number of built-in fields, and plugins can\n[define](https://prosemirror.net/docs/ref/#state.PluginSpec.state) additional fields.\n*/\nclass EditorState {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    config) {\n        this.config = config;\n    }\n    /**\n    The schema of the state's document.\n    */\n    get schema() {\n        return this.config.schema;\n    }\n    /**\n    The plugins that are active in this state.\n    */\n    get plugins() {\n        return this.config.plugins;\n    }\n    /**\n    Apply the given transaction to produce a new state.\n    */\n    apply(tr) {\n        return this.applyTransaction(tr).state;\n    }\n    /**\n    @internal\n    */\n    filterTransaction(tr, ignore = -1) {\n        for (let i = 0; i < this.config.plugins.length; i++)\n            if (i != ignore) {\n                let plugin = this.config.plugins[i];\n                if (plugin.spec.filterTransaction && !plugin.spec.filterTransaction.call(plugin, tr, this))\n                    return false;\n            }\n        return true;\n    }\n    /**\n    Verbose variant of [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) that\n    returns the precise transactions that were applied (which might\n    be influenced by the [transaction\n    hooks](https://prosemirror.net/docs/ref/#state.PluginSpec.filterTransaction) of\n    plugins) along with the new state.\n    */\n    applyTransaction(rootTr) {\n        if (!this.filterTransaction(rootTr))\n            return { state: this, transactions: [] };\n        let trs = [rootTr], newState = this.applyInner(rootTr), seen = null;\n        // This loop repeatedly gives plugins a chance to respond to\n        // transactions as new transactions are added, making sure to only\n        // pass the transactions the plugin did not see before.\n        for (;;) {\n            let haveNew = false;\n            for (let i = 0; i < this.config.plugins.length; i++) {\n                let plugin = this.config.plugins[i];\n                if (plugin.spec.appendTransaction) {\n                    let n = seen ? seen[i].n : 0, oldState = seen ? seen[i].state : this;\n                    let tr = n < trs.length &&\n                        plugin.spec.appendTransaction.call(plugin, n ? trs.slice(n) : trs, oldState, newState);\n                    if (tr && newState.filterTransaction(tr, i)) {\n                        tr.setMeta(\"appendedTransaction\", rootTr);\n                        if (!seen) {\n                            seen = [];\n                            for (let j = 0; j < this.config.plugins.length; j++)\n                                seen.push(j < i ? { state: newState, n: trs.length } : { state: this, n: 0 });\n                        }\n                        trs.push(tr);\n                        newState = newState.applyInner(tr);\n                        haveNew = true;\n                    }\n                    if (seen)\n                        seen[i] = { state: newState, n: trs.length };\n                }\n            }\n            if (!haveNew)\n                return { state: newState, transactions: trs };\n        }\n    }\n    /**\n    @internal\n    */\n    applyInner(tr) {\n        if (!tr.before.eq(this.doc))\n            throw new RangeError(\"Applying a mismatched transaction\");\n        let newInstance = new EditorState(this.config), fields = this.config.fields;\n        for (let i = 0; i < fields.length; i++) {\n            let field = fields[i];\n            newInstance[field.name] = field.apply(tr, this[field.name], this, newInstance);\n        }\n        return newInstance;\n    }\n    /**\n    Start a [transaction](https://prosemirror.net/docs/ref/#state.Transaction) from this state.\n    */\n    get tr() { return new Transaction(this); }\n    /**\n    Create a new state.\n    */\n    static create(config) {\n        let $config = new Configuration(config.doc ? config.doc.type.schema : config.schema, config.plugins);\n        let instance = new EditorState($config);\n        for (let i = 0; i < $config.fields.length; i++)\n            instance[$config.fields[i].name] = $config.fields[i].init(config, instance);\n        return instance;\n    }\n    /**\n    Create a new state based on this one, but with an adjusted set\n    of active plugins. State fields that exist in both sets of\n    plugins are kept unchanged. Those that no longer exist are\n    dropped, and those that are new are initialized using their\n    [`init`](https://prosemirror.net/docs/ref/#state.StateField.init) method, passing in the new\n    configuration object..\n    */\n    reconfigure(config) {\n        let $config = new Configuration(this.schema, config.plugins);\n        let fields = $config.fields, instance = new EditorState($config);\n        for (let i = 0; i < fields.length; i++) {\n            let name = fields[i].name;\n            instance[name] = this.hasOwnProperty(name) ? this[name] : fields[i].init(config, instance);\n        }\n        return instance;\n    }\n    /**\n    Serialize this state to JSON. If you want to serialize the state\n    of plugins, pass an object mapping property names to use in the\n    resulting JSON object to plugin objects. The argument may also be\n    a string or number, in which case it is ignored, to support the\n    way `JSON.stringify` calls `toString` methods.\n    */\n    toJSON(pluginFields) {\n        let result = { doc: this.doc.toJSON(), selection: this.selection.toJSON() };\n        if (this.storedMarks)\n            result.storedMarks = this.storedMarks.map(m => m.toJSON());\n        if (pluginFields && typeof pluginFields == 'object')\n            for (let prop in pluginFields) {\n                if (prop == \"doc\" || prop == \"selection\")\n                    throw new RangeError(\"The JSON fields `doc` and `selection` are reserved\");\n                let plugin = pluginFields[prop], state = plugin.spec.state;\n                if (state && state.toJSON)\n                    result[prop] = state.toJSON.call(plugin, this[plugin.key]);\n            }\n        return result;\n    }\n    /**\n    Deserialize a JSON representation of a state. `config` should\n    have at least a `schema` field, and should contain array of\n    plugins to initialize the state with. `pluginFields` can be used\n    to deserialize the state of plugins, by associating plugin\n    instances with the property names they use in the JSON object.\n    */\n    static fromJSON(config, json, pluginFields) {\n        if (!json)\n            throw new RangeError(\"Invalid input for EditorState.fromJSON\");\n        if (!config.schema)\n            throw new RangeError(\"Required config field 'schema' missing\");\n        let $config = new Configuration(config.schema, config.plugins);\n        let instance = new EditorState($config);\n        $config.fields.forEach(field => {\n            if (field.name == \"doc\") {\n                instance.doc = Node.fromJSON(config.schema, json.doc);\n            }\n            else if (field.name == \"selection\") {\n                instance.selection = Selection.fromJSON(instance.doc, json.selection);\n            }\n            else if (field.name == \"storedMarks\") {\n                if (json.storedMarks)\n                    instance.storedMarks = json.storedMarks.map(config.schema.markFromJSON);\n            }\n            else {\n                if (pluginFields)\n                    for (let prop in pluginFields) {\n                        let plugin = pluginFields[prop], state = plugin.spec.state;\n                        if (plugin.key == field.name && state && state.fromJSON &&\n                            Object.prototype.hasOwnProperty.call(json, prop)) {\n                            instance[field.name] = state.fromJSON.call(plugin, config, json[prop], instance);\n                            return;\n                        }\n                    }\n                instance[field.name] = field.init(config, instance);\n            }\n        });\n        return instance;\n    }\n}\n\nfunction bindProps(obj, self, target) {\n    for (let prop in obj) {\n        let val = obj[prop];\n        if (val instanceof Function)\n            val = val.bind(self);\n        else if (prop == \"handleDOMEvents\")\n            val = bindProps(val, self, {});\n        target[prop] = val;\n    }\n    return target;\n}\n/**\nPlugins bundle functionality that can be added to an editor.\nThey are part of the [editor state](https://prosemirror.net/docs/ref/#state.EditorState) and\nmay influence that state and the view that contains it.\n*/\nclass Plugin {\n    /**\n    Create a plugin.\n    */\n    constructor(\n    /**\n    The plugin's [spec object](https://prosemirror.net/docs/ref/#state.PluginSpec).\n    */\n    spec) {\n        this.spec = spec;\n        /**\n        The [props](https://prosemirror.net/docs/ref/#view.EditorProps) exported by this plugin.\n        */\n        this.props = {};\n        if (spec.props)\n            bindProps(spec.props, this, this.props);\n        this.key = spec.key ? spec.key.key : createKey(\"plugin\");\n    }\n    /**\n    Extract the plugin's state field from an editor state.\n    */\n    getState(state) { return state[this.key]; }\n}\nconst keys = Object.create(null);\nfunction createKey(name) {\n    if (name in keys)\n        return name + \"$\" + ++keys[name];\n    keys[name] = 0;\n    return name + \"$\";\n}\n/**\nA key is used to [tag](https://prosemirror.net/docs/ref/#state.PluginSpec.key) plugins in a way\nthat makes it possible to find them, given an editor state.\nAssigning a key does mean only one plugin of that type can be\nactive in a state.\n*/\nclass PluginKey {\n    /**\n    Create a plugin key.\n    */\n    constructor(name = \"key\") { this.key = createKey(name); }\n    /**\n    Get the active plugin with this key, if any, from an editor\n    state.\n    */\n    get(state) { return state.config.pluginsByKey[this.key]; }\n    /**\n    Get the plugin's state from an editor state.\n    */\n    getState(state) { return state[this.key]; }\n}\n\nexport { AllSelection, EditorState, NodeSelection, Plugin, PluginKey, Selection, SelectionRange, TextSelection, Transaction };\n","import { TextSelection, NodeSelection, AllSelection, Selection } from 'prosemirror-state';\nimport { DOMSerializer, Fragment, Mark, Slice, DOMParser } from 'prosemirror-model';\nimport { dropPoint } from 'prosemirror-transform';\n\nconst domIndex = function (node) {\n    for (var index = 0;; index++) {\n        node = node.previousSibling;\n        if (!node)\n            return index;\n    }\n};\nconst parentNode = function (node) {\n    let parent = node.assignedSlot || node.parentNode;\n    return parent && parent.nodeType == 11 ? parent.host : parent;\n};\nlet reusedRange = null;\n// Note that this will always return the same range, because DOM range\n// objects are every expensive, and keep slowing down subsequent DOM\n// updates, for some reason.\nconst textRange = function (node, from, to) {\n    let range = reusedRange || (reusedRange = document.createRange());\n    range.setEnd(node, to == null ? node.nodeValue.length : to);\n    range.setStart(node, from || 0);\n    return range;\n};\nconst clearReusedRange = function () {\n    reusedRange = null;\n};\n// Scans forward and backward through DOM positions equivalent to the\n// given one to see if the two are in the same place (i.e. after a\n// text node vs at the end of that text node)\nconst isEquivalentPosition = function (node, off, targetNode, targetOff) {\n    return targetNode && (scanFor(node, off, targetNode, targetOff, -1) ||\n        scanFor(node, off, targetNode, targetOff, 1));\n};\nconst atomElements = /^(img|br|input|textarea|hr)$/i;\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n    var _a;\n    for (;;) {\n        if (node == targetNode && off == targetOff)\n            return true;\n        if (off == (dir < 0 ? 0 : nodeSize(node))) {\n            let parent = node.parentNode;\n            if (!parent || parent.nodeType != 1 || hasBlockDesc(node) || atomElements.test(node.nodeName) ||\n                node.contentEditable == \"false\")\n                return false;\n            off = domIndex(node) + (dir < 0 ? 0 : 1);\n            node = parent;\n        }\n        else if (node.nodeType == 1) {\n            let child = node.childNodes[off + (dir < 0 ? -1 : 0)];\n            if (child.nodeType == 1 && child.contentEditable == \"false\") {\n                if ((_a = child.pmViewDesc) === null || _a === void 0 ? void 0 : _a.ignoreForSelection)\n                    off += dir;\n                else\n                    return false;\n            }\n            else {\n                node = child;\n                off = dir < 0 ? nodeSize(node) : 0;\n            }\n        }\n        else {\n            return false;\n        }\n    }\n}\nfunction nodeSize(node) {\n    return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction textNodeBefore$1(node, offset) {\n    for (;;) {\n        if (node.nodeType == 3 && offset)\n            return node;\n        if (node.nodeType == 1 && offset > 0) {\n            if (node.contentEditable == \"false\")\n                return null;\n            node = node.childNodes[offset - 1];\n            offset = nodeSize(node);\n        }\n        else if (node.parentNode && !hasBlockDesc(node)) {\n            offset = domIndex(node);\n            node = node.parentNode;\n        }\n        else {\n            return null;\n        }\n    }\n}\nfunction textNodeAfter$1(node, offset) {\n    for (;;) {\n        if (node.nodeType == 3 && offset < node.nodeValue.length)\n            return node;\n        if (node.nodeType == 1 && offset < node.childNodes.length) {\n            if (node.contentEditable == \"false\")\n                return null;\n            node = node.childNodes[offset];\n            offset = 0;\n        }\n        else if (node.parentNode && !hasBlockDesc(node)) {\n            offset = domIndex(node) + 1;\n            node = node.parentNode;\n        }\n        else {\n            return null;\n        }\n    }\n}\nfunction isOnEdge(node, offset, parent) {\n    for (let atStart = offset == 0, atEnd = offset == nodeSize(node); atStart || atEnd;) {\n        if (node == parent)\n            return true;\n        let index = domIndex(node);\n        node = node.parentNode;\n        if (!node)\n            return false;\n        atStart = atStart && index == 0;\n        atEnd = atEnd && index == nodeSize(node);\n    }\n}\nfunction hasBlockDesc(dom) {\n    let desc;\n    for (let cur = dom; cur; cur = cur.parentNode)\n        if (desc = cur.pmViewDesc)\n            break;\n    return desc && desc.node && desc.node.isBlock && (desc.dom == dom || desc.contentDOM == dom);\n}\n// Work around Chrome issue https://bugs.chromium.org/p/chromium/issues/detail?id=447523\n// (isCollapsed inappropriately returns true in shadow dom)\nconst selectionCollapsed = function (domSel) {\n    return domSel.focusNode && isEquivalentPosition(domSel.focusNode, domSel.focusOffset, domSel.anchorNode, domSel.anchorOffset);\n};\nfunction keyEvent(keyCode, key) {\n    let event = document.createEvent(\"Event\");\n    event.initEvent(\"keydown\", true, true);\n    event.keyCode = keyCode;\n    event.key = event.code = key;\n    return event;\n}\nfunction deepActiveElement(doc) {\n    let elt = doc.activeElement;\n    while (elt && elt.shadowRoot)\n        elt = elt.shadowRoot.activeElement;\n    return elt;\n}\nfunction caretFromPoint(doc, x, y) {\n    if (doc.caretPositionFromPoint) {\n        try { // Firefox throws for this call in hard-to-predict circumstances (#994)\n            let pos = doc.caretPositionFromPoint(x, y);\n            // Clip the offset, because Chrome will return a text offset\n            // into <input> nodes, which can't be treated as a regular DOM\n            // offset\n            if (pos)\n                return { node: pos.offsetNode, offset: Math.min(nodeSize(pos.offsetNode), pos.offset) };\n        }\n        catch (_) { }\n    }\n    if (doc.caretRangeFromPoint) {\n        let range = doc.caretRangeFromPoint(x, y);\n        if (range)\n            return { node: range.startContainer, offset: Math.min(nodeSize(range.startContainer), range.startOffset) };\n    }\n}\n\nconst nav = typeof navigator != \"undefined\" ? navigator : null;\nconst doc = typeof document != \"undefined\" ? document : null;\nconst agent = (nav && nav.userAgent) || \"\";\nconst ie_edge = /Edge\\/(\\d+)/.exec(agent);\nconst ie_upto10 = /MSIE \\d/.exec(agent);\nconst ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(agent);\nconst ie = !!(ie_upto10 || ie_11up || ie_edge);\nconst ie_version = ie_upto10 ? document.documentMode : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0;\nconst gecko = !ie && /gecko\\/(\\d+)/i.test(agent);\ngecko && +(/Firefox\\/(\\d+)/.exec(agent) || [0, 0])[1];\nconst _chrome = !ie && /Chrome\\/(\\d+)/.exec(agent);\nconst chrome = !!_chrome;\nconst chrome_version = _chrome ? +_chrome[1] : 0;\nconst safari = !ie && !!nav && /Apple Computer/.test(nav.vendor);\n// Is true for both iOS and iPadOS for convenience\nconst ios = safari && (/Mobile\\/\\w+/.test(agent) || !!nav && nav.maxTouchPoints > 2);\nconst mac = ios || (nav ? /Mac/.test(nav.platform) : false);\nconst windows = nav ? /Win/.test(nav.platform) : false;\nconst android = /Android \\d/.test(agent);\nconst webkit = !!doc && \"webkitFontSmoothing\" in doc.documentElement.style;\nconst webkit_version = webkit ? +(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0;\n\nfunction windowRect(doc) {\n    let vp = doc.defaultView && doc.defaultView.visualViewport;\n    if (vp)\n        return {\n            left: 0, right: vp.width,\n            top: 0, bottom: vp.height\n        };\n    return { left: 0, right: doc.documentElement.clientWidth,\n        top: 0, bottom: doc.documentElement.clientHeight };\n}\nfunction getSide(value, side) {\n    return typeof value == \"number\" ? value : value[side];\n}\nfunction clientRect(node) {\n    let rect = node.getBoundingClientRect();\n    // Adjust for elements with style \"transform: scale()\"\n    let scaleX = (rect.width / node.offsetWidth) || 1;\n    let scaleY = (rect.height / node.offsetHeight) || 1;\n    // Make sure scrollbar width isn't included in the rectangle\n    return { left: rect.left, right: rect.left + node.clientWidth * scaleX,\n        top: rect.top, bottom: rect.top + node.clientHeight * scaleY };\n}\nfunction scrollRectIntoView(view, rect, startDOM) {\n    let scrollThreshold = view.someProp(\"scrollThreshold\") || 0, scrollMargin = view.someProp(\"scrollMargin\") || 5;\n    let doc = view.dom.ownerDocument;\n    for (let parent = startDOM || view.dom;;) {\n        if (!parent)\n            break;\n        if (parent.nodeType != 1) {\n            parent = parentNode(parent);\n            continue;\n        }\n        let elt = parent;\n        let atTop = elt == doc.body;\n        let bounding = atTop ? windowRect(doc) : clientRect(elt);\n        let moveX = 0, moveY = 0;\n        if (rect.top < bounding.top + getSide(scrollThreshold, \"top\"))\n            moveY = -(bounding.top - rect.top + getSide(scrollMargin, \"top\"));\n        else if (rect.bottom > bounding.bottom - getSide(scrollThreshold, \"bottom\"))\n            moveY = rect.bottom - rect.top > bounding.bottom - bounding.top\n                ? rect.top + getSide(scrollMargin, \"top\") - bounding.top\n                : rect.bottom - bounding.bottom + getSide(scrollMargin, \"bottom\");\n        if (rect.left < bounding.left + getSide(scrollThreshold, \"left\"))\n            moveX = -(bounding.left - rect.left + getSide(scrollMargin, \"left\"));\n        else if (rect.right > bounding.right - getSide(scrollThreshold, \"right\"))\n            moveX = rect.right - bounding.right + getSide(scrollMargin, \"right\");\n        if (moveX || moveY) {\n            if (atTop) {\n                doc.defaultView.scrollBy(moveX, moveY);\n            }\n            else {\n                let startX = elt.scrollLeft, startY = elt.scrollTop;\n                if (moveY)\n                    elt.scrollTop += moveY;\n                if (moveX)\n                    elt.scrollLeft += moveX;\n                let dX = elt.scrollLeft - startX, dY = elt.scrollTop - startY;\n                rect = { left: rect.left - dX, top: rect.top - dY, right: rect.right - dX, bottom: rect.bottom - dY };\n            }\n        }\n        let pos = atTop ? \"fixed\" : getComputedStyle(parent).position;\n        if (/^(fixed|sticky)$/.test(pos))\n            break;\n        parent = pos == \"absolute\" ? parent.offsetParent : parentNode(parent);\n    }\n}\n// Store the scroll position of the editor's parent nodes, along with\n// the top position of an element near the top of the editor, which\n// will be used to make sure the visible viewport remains stable even\n// when the size of the content above changes.\nfunction storeScrollPos(view) {\n    let rect = view.dom.getBoundingClientRect(), startY = Math.max(0, rect.top);\n    let refDOM, refTop;\n    for (let x = (rect.left + rect.right) / 2, y = startY + 1; y < Math.min(innerHeight, rect.bottom); y += 5) {\n        let dom = view.root.elementFromPoint(x, y);\n        if (!dom || dom == view.dom || !view.dom.contains(dom))\n            continue;\n        let localRect = dom.getBoundingClientRect();\n        if (localRect.top >= startY - 20) {\n            refDOM = dom;\n            refTop = localRect.top;\n            break;\n        }\n    }\n    return { refDOM: refDOM, refTop: refTop, stack: scrollStack(view.dom) };\n}\nfunction scrollStack(dom) {\n    let stack = [], doc = dom.ownerDocument;\n    for (let cur = dom; cur; cur = parentNode(cur)) {\n        stack.push({ dom: cur, top: cur.scrollTop, left: cur.scrollLeft });\n        if (dom == doc)\n            break;\n    }\n    return stack;\n}\n// Reset the scroll position of the editor's parent nodes to that what\n// it was before, when storeScrollPos was called.\nfunction resetScrollPos({ refDOM, refTop, stack }) {\n    let newRefTop = refDOM ? refDOM.getBoundingClientRect().top : 0;\n    restoreScrollStack(stack, newRefTop == 0 ? 0 : newRefTop - refTop);\n}\nfunction restoreScrollStack(stack, dTop) {\n    for (let i = 0; i < stack.length; i++) {\n        let { dom, top, left } = stack[i];\n        if (dom.scrollTop != top + dTop)\n            dom.scrollTop = top + dTop;\n        if (dom.scrollLeft != left)\n            dom.scrollLeft = left;\n    }\n}\nlet preventScrollSupported = null;\n// Feature-detects support for .focus({preventScroll: true}), and uses\n// a fallback kludge when not supported.\nfunction focusPreventScroll(dom) {\n    if (dom.setActive)\n        return dom.setActive(); // in IE\n    if (preventScrollSupported)\n        return dom.focus(preventScrollSupported);\n    let stored = scrollStack(dom);\n    dom.focus(preventScrollSupported == null ? {\n        get preventScroll() {\n            preventScrollSupported = { preventScroll: true };\n            return true;\n        }\n    } : undefined);\n    if (!preventScrollSupported) {\n        preventScrollSupported = false;\n        restoreScrollStack(stored, 0);\n    }\n}\nfunction findOffsetInNode(node, coords) {\n    let closest, dxClosest = 2e8, coordsClosest, offset = 0;\n    let rowBot = coords.top, rowTop = coords.top;\n    let firstBelow, coordsBelow;\n    for (let child = node.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) {\n        let rects;\n        if (child.nodeType == 1)\n            rects = child.getClientRects();\n        else if (child.nodeType == 3)\n            rects = textRange(child).getClientRects();\n        else\n            continue;\n        for (let i = 0; i < rects.length; i++) {\n            let rect = rects[i];\n            if (rect.top <= rowBot && rect.bottom >= rowTop) {\n                rowBot = Math.max(rect.bottom, rowBot);\n                rowTop = Math.min(rect.top, rowTop);\n                let dx = rect.left > coords.left ? rect.left - coords.left\n                    : rect.right < coords.left ? coords.left - rect.right : 0;\n                if (dx < dxClosest) {\n                    closest = child;\n                    dxClosest = dx;\n                    coordsClosest = dx && closest.nodeType == 3 ? {\n                        left: rect.right < coords.left ? rect.right : rect.left,\n                        top: coords.top\n                    } : coords;\n                    if (child.nodeType == 1 && dx)\n                        offset = childIndex + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0);\n                    continue;\n                }\n            }\n            else if (rect.top > coords.top && !firstBelow && rect.left <= coords.left && rect.right >= coords.left) {\n                firstBelow = child;\n                coordsBelow = { left: Math.max(rect.left, Math.min(rect.right, coords.left)), top: rect.top };\n            }\n            if (!closest && (coords.left >= rect.right && coords.top >= rect.top ||\n                coords.left >= rect.left && coords.top >= rect.bottom))\n                offset = childIndex + 1;\n        }\n    }\n    if (!closest && firstBelow) {\n        closest = firstBelow;\n        coordsClosest = coordsBelow;\n        dxClosest = 0;\n    }\n    if (closest && closest.nodeType == 3)\n        return findOffsetInText(closest, coordsClosest);\n    if (!closest || (dxClosest && closest.nodeType == 1))\n        return { node, offset };\n    return findOffsetInNode(closest, coordsClosest);\n}\nfunction findOffsetInText(node, coords) {\n    let len = node.nodeValue.length;\n    let range = document.createRange();\n    for (let i = 0; i < len; i++) {\n        range.setEnd(node, i + 1);\n        range.setStart(node, i);\n        let rect = singleRect(range, 1);\n        if (rect.top == rect.bottom)\n            continue;\n        if (inRect(coords, rect))\n            return { node, offset: i + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0) };\n    }\n    return { node, offset: 0 };\n}\nfunction inRect(coords, rect) {\n    return coords.left >= rect.left - 1 && coords.left <= rect.right + 1 &&\n        coords.top >= rect.top - 1 && coords.top <= rect.bottom + 1;\n}\nfunction targetKludge(dom, coords) {\n    let parent = dom.parentNode;\n    if (parent && /^li$/i.test(parent.nodeName) && coords.left < dom.getBoundingClientRect().left)\n        return parent;\n    return dom;\n}\nfunction posFromElement(view, elt, coords) {\n    let { node, offset } = findOffsetInNode(elt, coords), bias = -1;\n    if (node.nodeType == 1 && !node.firstChild) {\n        let rect = node.getBoundingClientRect();\n        bias = rect.left != rect.right && coords.left > (rect.left + rect.right) / 2 ? 1 : -1;\n    }\n    return view.docView.posFromDOM(node, offset, bias);\n}\nfunction posFromCaret(view, node, offset, coords) {\n    // Browser (in caretPosition/RangeFromPoint) will agressively\n    // normalize towards nearby inline nodes. Since we are interested in\n    // positions between block nodes too, we first walk up the hierarchy\n    // of nodes to see if there are block nodes that the coordinates\n    // fall outside of. If so, we take the position before/after that\n    // block. If not, we call `posFromDOM` on the raw node/offset.\n    let outsideBlock = -1;\n    for (let cur = node, sawBlock = false;;) {\n        if (cur == view.dom)\n            break;\n        let desc = view.docView.nearestDesc(cur, true), rect;\n        if (!desc)\n            return null;\n        if (desc.dom.nodeType == 1 && (desc.node.isBlock && desc.parent || !desc.contentDOM) &&\n            // Ignore elements with zero-size bounding rectangles\n            ((rect = desc.dom.getBoundingClientRect()).width || rect.height)) {\n            if (desc.node.isBlock && desc.parent && !/^T(R|BODY|HEAD|FOOT)$/.test(desc.dom.nodeName)) {\n                // Only apply the horizontal test to the innermost block. Vertical for any parent.\n                if (!sawBlock && rect.left > coords.left || rect.top > coords.top)\n                    outsideBlock = desc.posBefore;\n                else if (!sawBlock && rect.right < coords.left || rect.bottom < coords.top)\n                    outsideBlock = desc.posAfter;\n                sawBlock = true;\n            }\n            if (!desc.contentDOM && outsideBlock < 0 && !desc.node.isText) {\n                // If we are inside a leaf, return the side of the leaf closer to the coords\n                let before = desc.node.isBlock ? coords.top < (rect.top + rect.bottom) / 2\n                    : coords.left < (rect.left + rect.right) / 2;\n                return before ? desc.posBefore : desc.posAfter;\n            }\n        }\n        cur = desc.dom.parentNode;\n    }\n    return outsideBlock > -1 ? outsideBlock : view.docView.posFromDOM(node, offset, -1);\n}\nfunction elementFromPoint(element, coords, box) {\n    let len = element.childNodes.length;\n    if (len && box.top < box.bottom) {\n        for (let startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i = startI;;) {\n            let child = element.childNodes[i];\n            if (child.nodeType == 1) {\n                let rects = child.getClientRects();\n                for (let j = 0; j < rects.length; j++) {\n                    let rect = rects[j];\n                    if (inRect(coords, rect))\n                        return elementFromPoint(child, coords, rect);\n                }\n            }\n            if ((i = (i + 1) % len) == startI)\n                break;\n        }\n    }\n    return element;\n}\n// Given an x,y position on the editor, get the position in the document.\nfunction posAtCoords(view, coords) {\n    let doc = view.dom.ownerDocument, node, offset = 0;\n    let caret = caretFromPoint(doc, coords.left, coords.top);\n    if (caret)\n        ({ node, offset } = caret);\n    let elt = (view.root.elementFromPoint ? view.root : doc)\n        .elementFromPoint(coords.left, coords.top);\n    let pos;\n    if (!elt || !view.dom.contains(elt.nodeType != 1 ? elt.parentNode : elt)) {\n        let box = view.dom.getBoundingClientRect();\n        if (!inRect(coords, box))\n            return null;\n        elt = elementFromPoint(view.dom, coords, box);\n        if (!elt)\n            return null;\n    }\n    // Safari's caretRangeFromPoint returns nonsense when on a draggable element\n    if (safari) {\n        for (let p = elt; node && p; p = parentNode(p))\n            if (p.draggable)\n                node = undefined;\n    }\n    elt = targetKludge(elt, coords);\n    if (node) {\n        if (gecko && node.nodeType == 1) {\n            // Firefox will sometimes return offsets into <input> nodes, which\n            // have no actual children, from caretPositionFromPoint (#953)\n            offset = Math.min(offset, node.childNodes.length);\n            // It'll also move the returned position before image nodes,\n            // even if those are behind it.\n            if (offset < node.childNodes.length) {\n                let next = node.childNodes[offset], box;\n                if (next.nodeName == \"IMG\" && (box = next.getBoundingClientRect()).right <= coords.left &&\n                    box.bottom > coords.top)\n                    offset++;\n            }\n        }\n        let prev;\n        // When clicking above the right side of an uneditable node, Chrome will report a cursor position after that node.\n        if (webkit && offset && node.nodeType == 1 && (prev = node.childNodes[offset - 1]).nodeType == 1 &&\n            prev.contentEditable == \"false\" && prev.getBoundingClientRect().top >= coords.top)\n            offset--;\n        // Suspiciously specific kludge to work around caret*FromPoint\n        // never returning a position at the end of the document\n        if (node == view.dom && offset == node.childNodes.length - 1 && node.lastChild.nodeType == 1 &&\n            coords.top > node.lastChild.getBoundingClientRect().bottom)\n            pos = view.state.doc.content.size;\n        // Ignore positions directly after a BR, since caret*FromPoint\n        // 'round up' positions that would be more accurately placed\n        // before the BR node.\n        else if (offset == 0 || node.nodeType != 1 || node.childNodes[offset - 1].nodeName != \"BR\")\n            pos = posFromCaret(view, node, offset, coords);\n    }\n    if (pos == null)\n        pos = posFromElement(view, elt, coords);\n    let desc = view.docView.nearestDesc(elt, true);\n    return { pos, inside: desc ? desc.posAtStart - desc.border : -1 };\n}\nfunction nonZero(rect) {\n    return rect.top < rect.bottom || rect.left < rect.right;\n}\nfunction singleRect(target, bias) {\n    let rects = target.getClientRects();\n    if (rects.length) {\n        let first = rects[bias < 0 ? 0 : rects.length - 1];\n        if (nonZero(first))\n            return first;\n    }\n    return Array.prototype.find.call(rects, nonZero) || target.getBoundingClientRect();\n}\nconst BIDI = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n// Given a position in the document model, get a bounding box of the\n// character at that position, relative to the window.\nfunction coordsAtPos(view, pos, side) {\n    let { node, offset, atom } = view.docView.domFromPos(pos, side < 0 ? -1 : 1);\n    let supportEmptyRange = webkit || gecko;\n    if (node.nodeType == 3) {\n        // These browsers support querying empty text ranges. Prefer that in\n        // bidi context or when at the end of a node.\n        if (supportEmptyRange && (BIDI.test(node.nodeValue) || (side < 0 ? !offset : offset == node.nodeValue.length))) {\n            let rect = singleRect(textRange(node, offset, offset), side);\n            // Firefox returns bad results (the position before the space)\n            // when querying a position directly after line-broken\n            // whitespace. Detect this situation and and kludge around it\n            if (gecko && offset && /\\s/.test(node.nodeValue[offset - 1]) && offset < node.nodeValue.length) {\n                let rectBefore = singleRect(textRange(node, offset - 1, offset - 1), -1);\n                if (rectBefore.top == rect.top) {\n                    let rectAfter = singleRect(textRange(node, offset, offset + 1), -1);\n                    if (rectAfter.top != rect.top)\n                        return flattenV(rectAfter, rectAfter.left < rectBefore.left);\n                }\n            }\n            return rect;\n        }\n        else {\n            let from = offset, to = offset, takeSide = side < 0 ? 1 : -1;\n            if (side < 0 && !offset) {\n                to++;\n                takeSide = -1;\n            }\n            else if (side >= 0 && offset == node.nodeValue.length) {\n                from--;\n                takeSide = 1;\n            }\n            else if (side < 0) {\n                from--;\n            }\n            else {\n                to++;\n            }\n            return flattenV(singleRect(textRange(node, from, to), takeSide), takeSide < 0);\n        }\n    }\n    let $dom = view.state.doc.resolve(pos - (atom || 0));\n    // Return a horizontal line in block context\n    if (!$dom.parent.inlineContent) {\n        if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {\n            let before = node.childNodes[offset - 1];\n            if (before.nodeType == 1)\n                return flattenH(before.getBoundingClientRect(), false);\n        }\n        if (atom == null && offset < nodeSize(node)) {\n            let after = node.childNodes[offset];\n            if (after.nodeType == 1)\n                return flattenH(after.getBoundingClientRect(), true);\n        }\n        return flattenH(node.getBoundingClientRect(), side >= 0);\n    }\n    // Inline, not in text node (this is not Bidi-safe)\n    if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {\n        let before = node.childNodes[offset - 1];\n        let target = before.nodeType == 3 ? textRange(before, nodeSize(before) - (supportEmptyRange ? 0 : 1))\n            // BR nodes tend to only return the rectangle before them.\n            // Only use them if they are the last element in their parent\n            : before.nodeType == 1 && (before.nodeName != \"BR\" || !before.nextSibling) ? before : null;\n        if (target)\n            return flattenV(singleRect(target, 1), false);\n    }\n    if (atom == null && offset < nodeSize(node)) {\n        let after = node.childNodes[offset];\n        while (after.pmViewDesc && after.pmViewDesc.ignoreForCoords)\n            after = after.nextSibling;\n        let target = !after ? null : after.nodeType == 3 ? textRange(after, 0, (supportEmptyRange ? 0 : 1))\n            : after.nodeType == 1 ? after : null;\n        if (target)\n            return flattenV(singleRect(target, -1), true);\n    }\n    // All else failed, just try to get a rectangle for the target node\n    return flattenV(singleRect(node.nodeType == 3 ? textRange(node) : node, -side), side >= 0);\n}\nfunction flattenV(rect, left) {\n    if (rect.width == 0)\n        return rect;\n    let x = left ? rect.left : rect.right;\n    return { top: rect.top, bottom: rect.bottom, left: x, right: x };\n}\nfunction flattenH(rect, top) {\n    if (rect.height == 0)\n        return rect;\n    let y = top ? rect.top : rect.bottom;\n    return { top: y, bottom: y, left: rect.left, right: rect.right };\n}\nfunction withFlushedState(view, state, f) {\n    let viewState = view.state, active = view.root.activeElement;\n    if (viewState != state)\n        view.updateState(state);\n    if (active != view.dom)\n        view.focus();\n    try {\n        return f();\n    }\n    finally {\n        if (viewState != state)\n            view.updateState(viewState);\n        if (active != view.dom && active)\n            active.focus();\n    }\n}\n// Whether vertical position motion in a given direction\n// from a position would leave a text block.\nfunction endOfTextblockVertical(view, state, dir) {\n    let sel = state.selection;\n    let $pos = dir == \"up\" ? sel.$from : sel.$to;\n    return withFlushedState(view, state, () => {\n        let { node: dom } = view.docView.domFromPos($pos.pos, dir == \"up\" ? -1 : 1);\n        for (;;) {\n            let nearest = view.docView.nearestDesc(dom, true);\n            if (!nearest)\n                break;\n            if (nearest.node.isBlock) {\n                dom = nearest.contentDOM || nearest.dom;\n                break;\n            }\n            dom = nearest.dom.parentNode;\n        }\n        let coords = coordsAtPos(view, $pos.pos, 1);\n        for (let child = dom.firstChild; child; child = child.nextSibling) {\n            let boxes;\n            if (child.nodeType == 1)\n                boxes = child.getClientRects();\n            else if (child.nodeType == 3)\n                boxes = textRange(child, 0, child.nodeValue.length).getClientRects();\n            else\n                continue;\n            for (let i = 0; i < boxes.length; i++) {\n                let box = boxes[i];\n                if (box.bottom > box.top + 1 &&\n                    (dir == \"up\" ? coords.top - box.top > (box.bottom - coords.top) * 2\n                        : box.bottom - coords.bottom > (coords.bottom - box.top) * 2))\n                    return false;\n            }\n        }\n        return true;\n    });\n}\nconst maybeRTL = /[\\u0590-\\u08ac]/;\nfunction endOfTextblockHorizontal(view, state, dir) {\n    let { $head } = state.selection;\n    if (!$head.parent.isTextblock)\n        return false;\n    let offset = $head.parentOffset, atStart = !offset, atEnd = offset == $head.parent.content.size;\n    let sel = view.domSelection();\n    if (!sel)\n        return $head.pos == $head.start() || $head.pos == $head.end();\n    // If the textblock is all LTR, or the browser doesn't support\n    // Selection.modify (Edge), fall back to a primitive approach\n    if (!maybeRTL.test($head.parent.textContent) || !sel.modify)\n        return dir == \"left\" || dir == \"backward\" ? atStart : atEnd;\n    return withFlushedState(view, state, () => {\n        // This is a huge hack, but appears to be the best we can\n        // currently do: use `Selection.modify` to move the selection by\n        // one character, and see if that moves the cursor out of the\n        // textblock (or doesn't move it at all, when at the start/end of\n        // the document).\n        let { focusNode: oldNode, focusOffset: oldOff, anchorNode, anchorOffset } = view.domSelectionRange();\n        let oldBidiLevel = sel.caretBidiLevel // Only for Firefox\n        ;\n        sel.modify(\"move\", dir, \"character\");\n        let parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom;\n        let { focusNode: newNode, focusOffset: newOff } = view.domSelectionRange();\n        let result = newNode && !parentDOM.contains(newNode.nodeType == 1 ? newNode : newNode.parentNode) ||\n            (oldNode == newNode && oldOff == newOff);\n        // Restore the previous selection\n        try {\n            sel.collapse(anchorNode, anchorOffset);\n            if (oldNode && (oldNode != anchorNode || oldOff != anchorOffset) && sel.extend)\n                sel.extend(oldNode, oldOff);\n        }\n        catch (_) { }\n        if (oldBidiLevel != null)\n            sel.caretBidiLevel = oldBidiLevel;\n        return result;\n    });\n}\nlet cachedState = null;\nlet cachedDir = null;\nlet cachedResult = false;\nfunction endOfTextblock(view, state, dir) {\n    if (cachedState == state && cachedDir == dir)\n        return cachedResult;\n    cachedState = state;\n    cachedDir = dir;\n    return cachedResult = dir == \"up\" || dir == \"down\"\n        ? endOfTextblockVertical(view, state, dir)\n        : endOfTextblockHorizontal(view, state, dir);\n}\n\n// View descriptions are data structures that describe the DOM that is\n// used to represent the editor's content. They are used for:\n//\n// - Incremental redrawing when the document changes\n//\n// - Figuring out what part of the document a given DOM position\n//   corresponds to\n//\n// - Wiring in custom implementations of the editing interface for a\n//   given node\n//\n// They form a doubly-linked mutable tree, starting at `view.docView`.\nconst NOT_DIRTY = 0, CHILD_DIRTY = 1, CONTENT_DIRTY = 2, NODE_DIRTY = 3;\n// Superclass for the various kinds of descriptions. Defines their\n// basic structure and shared methods.\nclass ViewDesc {\n    constructor(parent, children, dom, \n    // This is the node that holds the child views. It may be null for\n    // descs that don't have children.\n    contentDOM) {\n        this.parent = parent;\n        this.children = children;\n        this.dom = dom;\n        this.contentDOM = contentDOM;\n        this.dirty = NOT_DIRTY;\n        // An expando property on the DOM node provides a link back to its\n        // description.\n        dom.pmViewDesc = this;\n    }\n    // Used to check whether a given description corresponds to a\n    // widget/mark/node.\n    matchesWidget(widget) { return false; }\n    matchesMark(mark) { return false; }\n    matchesNode(node, outerDeco, innerDeco) { return false; }\n    matchesHack(nodeName) { return false; }\n    // When parsing in-editor content (in domchange.js), we allow\n    // descriptions to determine the parse rules that should be used to\n    // parse them.\n    parseRule() { return null; }\n    // Used by the editor's event handler to ignore events that come\n    // from certain descs.\n    stopEvent(event) { return false; }\n    // The size of the content represented by this desc.\n    get size() {\n        let size = 0;\n        for (let i = 0; i < this.children.length; i++)\n            size += this.children[i].size;\n        return size;\n    }\n    // For block nodes, this represents the space taken up by their\n    // start/end tokens.\n    get border() { return 0; }\n    destroy() {\n        this.parent = undefined;\n        if (this.dom.pmViewDesc == this)\n            this.dom.pmViewDesc = undefined;\n        for (let i = 0; i < this.children.length; i++)\n            this.children[i].destroy();\n    }\n    posBeforeChild(child) {\n        for (let i = 0, pos = this.posAtStart;; i++) {\n            let cur = this.children[i];\n            if (cur == child)\n                return pos;\n            pos += cur.size;\n        }\n    }\n    get posBefore() {\n        return this.parent.posBeforeChild(this);\n    }\n    get posAtStart() {\n        return this.parent ? this.parent.posBeforeChild(this) + this.border : 0;\n    }\n    get posAfter() {\n        return this.posBefore + this.size;\n    }\n    get posAtEnd() {\n        return this.posAtStart + this.size - 2 * this.border;\n    }\n    localPosFromDOM(dom, offset, bias) {\n        // If the DOM position is in the content, use the child desc after\n        // it to figure out a position.\n        if (this.contentDOM && this.contentDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode)) {\n            if (bias < 0) {\n                let domBefore, desc;\n                if (dom == this.contentDOM) {\n                    domBefore = dom.childNodes[offset - 1];\n                }\n                else {\n                    while (dom.parentNode != this.contentDOM)\n                        dom = dom.parentNode;\n                    domBefore = dom.previousSibling;\n                }\n                while (domBefore && !((desc = domBefore.pmViewDesc) && desc.parent == this))\n                    domBefore = domBefore.previousSibling;\n                return domBefore ? this.posBeforeChild(desc) + desc.size : this.posAtStart;\n            }\n            else {\n                let domAfter, desc;\n                if (dom == this.contentDOM) {\n                    domAfter = dom.childNodes[offset];\n                }\n                else {\n                    while (dom.parentNode != this.contentDOM)\n                        dom = dom.parentNode;\n                    domAfter = dom.nextSibling;\n                }\n                while (domAfter && !((desc = domAfter.pmViewDesc) && desc.parent == this))\n                    domAfter = domAfter.nextSibling;\n                return domAfter ? this.posBeforeChild(desc) : this.posAtEnd;\n            }\n        }\n        // Otherwise, use various heuristics, falling back on the bias\n        // parameter, to determine whether to return the position at the\n        // start or at the end of this view desc.\n        let atEnd;\n        if (dom == this.dom && this.contentDOM) {\n            atEnd = offset > domIndex(this.contentDOM);\n        }\n        else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) {\n            atEnd = dom.compareDocumentPosition(this.contentDOM) & 2;\n        }\n        else if (this.dom.firstChild) {\n            if (offset == 0)\n                for (let search = dom;; search = search.parentNode) {\n                    if (search == this.dom) {\n                        atEnd = false;\n                        break;\n                    }\n                    if (search.previousSibling)\n                        break;\n                }\n            if (atEnd == null && offset == dom.childNodes.length)\n                for (let search = dom;; search = search.parentNode) {\n                    if (search == this.dom) {\n                        atEnd = true;\n                        break;\n                    }\n                    if (search.nextSibling)\n                        break;\n                }\n        }\n        return (atEnd == null ? bias > 0 : atEnd) ? this.posAtEnd : this.posAtStart;\n    }\n    nearestDesc(dom, onlyNodes = false) {\n        for (let first = true, cur = dom; cur; cur = cur.parentNode) {\n            let desc = this.getDesc(cur), nodeDOM;\n            if (desc && (!onlyNodes || desc.node)) {\n                // If dom is outside of this desc's nodeDOM, don't count it.\n                if (first && (nodeDOM = desc.nodeDOM) &&\n                    !(nodeDOM.nodeType == 1 ? nodeDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode) : nodeDOM == dom))\n                    first = false;\n                else\n                    return desc;\n            }\n        }\n    }\n    getDesc(dom) {\n        let desc = dom.pmViewDesc;\n        for (let cur = desc; cur; cur = cur.parent)\n            if (cur == this)\n                return desc;\n    }\n    posFromDOM(dom, offset, bias) {\n        for (let scan = dom; scan; scan = scan.parentNode) {\n            let desc = this.getDesc(scan);\n            if (desc)\n                return desc.localPosFromDOM(dom, offset, bias);\n        }\n        return -1;\n    }\n    // Find the desc for the node after the given pos, if any. (When a\n    // parent node overrode rendering, there might not be one.)\n    descAt(pos) {\n        for (let i = 0, offset = 0; i < this.children.length; i++) {\n            let child = this.children[i], end = offset + child.size;\n            if (offset == pos && end != offset) {\n                while (!child.border && child.children.length) {\n                    for (let i = 0; i < child.children.length; i++) {\n                        let inner = child.children[i];\n                        if (inner.size) {\n                            child = inner;\n                            break;\n                        }\n                    }\n                }\n                return child;\n            }\n            if (pos < end)\n                return child.descAt(pos - offset - child.border);\n            offset = end;\n        }\n    }\n    domFromPos(pos, side) {\n        if (!this.contentDOM)\n            return { node: this.dom, offset: 0, atom: pos + 1 };\n        // First find the position in the child array\n        let i = 0, offset = 0;\n        for (let curPos = 0; i < this.children.length; i++) {\n            let child = this.children[i], end = curPos + child.size;\n            if (end > pos || child instanceof TrailingHackViewDesc) {\n                offset = pos - curPos;\n                break;\n            }\n            curPos = end;\n        }\n        // If this points into the middle of a child, call through\n        if (offset)\n            return this.children[i].domFromPos(offset - this.children[i].border, side);\n        // Go back if there were any zero-length widgets with side >= 0 before this point\n        for (let prev; i && !(prev = this.children[i - 1]).size && prev instanceof WidgetViewDesc && prev.side >= 0; i--) { }\n        // Scan towards the first useable node\n        if (side <= 0) {\n            let prev, enter = true;\n            for (;; i--, enter = false) {\n                prev = i ? this.children[i - 1] : null;\n                if (!prev || prev.dom.parentNode == this.contentDOM)\n                    break;\n            }\n            if (prev && side && enter && !prev.border && !prev.domAtom)\n                return prev.domFromPos(prev.size, side);\n            return { node: this.contentDOM, offset: prev ? domIndex(prev.dom) + 1 : 0 };\n        }\n        else {\n            let next, enter = true;\n            for (;; i++, enter = false) {\n                next = i < this.children.length ? this.children[i] : null;\n                if (!next || next.dom.parentNode == this.contentDOM)\n                    break;\n            }\n            if (next && enter && !next.border && !next.domAtom)\n                return next.domFromPos(0, side);\n            return { node: this.contentDOM, offset: next ? domIndex(next.dom) : this.contentDOM.childNodes.length };\n        }\n    }\n    // Used to find a DOM range in a single parent for a given changed\n    // range.\n    parseRange(from, to, base = 0) {\n        if (this.children.length == 0)\n            return { node: this.contentDOM, from, to, fromOffset: 0, toOffset: this.contentDOM.childNodes.length };\n        let fromOffset = -1, toOffset = -1;\n        for (let offset = base, i = 0;; i++) {\n            let child = this.children[i], end = offset + child.size;\n            if (fromOffset == -1 && from <= end) {\n                let childBase = offset + child.border;\n                // FIXME maybe descend mark views to parse a narrower range?\n                if (from >= childBase && to <= end - child.border && child.node &&\n                    child.contentDOM && this.contentDOM.contains(child.contentDOM))\n                    return child.parseRange(from, to, childBase);\n                from = offset;\n                for (let j = i; j > 0; j--) {\n                    let prev = this.children[j - 1];\n                    if (prev.size && prev.dom.parentNode == this.contentDOM && !prev.emptyChildAt(1)) {\n                        fromOffset = domIndex(prev.dom) + 1;\n                        break;\n                    }\n                    from -= prev.size;\n                }\n                if (fromOffset == -1)\n                    fromOffset = 0;\n            }\n            if (fromOffset > -1 && (end > to || i == this.children.length - 1)) {\n                to = end;\n                for (let j = i + 1; j < this.children.length; j++) {\n                    let next = this.children[j];\n                    if (next.size && next.dom.parentNode == this.contentDOM && !next.emptyChildAt(-1)) {\n                        toOffset = domIndex(next.dom);\n                        break;\n                    }\n                    to += next.size;\n                }\n                if (toOffset == -1)\n                    toOffset = this.contentDOM.childNodes.length;\n                break;\n            }\n            offset = end;\n        }\n        return { node: this.contentDOM, from, to, fromOffset, toOffset };\n    }\n    emptyChildAt(side) {\n        if (this.border || !this.contentDOM || !this.children.length)\n            return false;\n        let child = this.children[side < 0 ? 0 : this.children.length - 1];\n        return child.size == 0 || child.emptyChildAt(side);\n    }\n    domAfterPos(pos) {\n        let { node, offset } = this.domFromPos(pos, 0);\n        if (node.nodeType != 1 || offset == node.childNodes.length)\n            throw new RangeError(\"No node after pos \" + pos);\n        return node.childNodes[offset];\n    }\n    // View descs are responsible for setting any selection that falls\n    // entirely inside of them, so that custom implementations can do\n    // custom things with the selection. Note that this falls apart when\n    // a selection starts in such a node and ends in another, in which\n    // case we just use whatever domFromPos produces as a best effort.\n    setSelection(anchor, head, view, force = false) {\n        // If the selection falls entirely in a child, give it to that child\n        let from = Math.min(anchor, head), to = Math.max(anchor, head);\n        for (let i = 0, offset = 0; i < this.children.length; i++) {\n            let child = this.children[i], end = offset + child.size;\n            if (from > offset && to < end)\n                return child.setSelection(anchor - offset - child.border, head - offset - child.border, view, force);\n            offset = end;\n        }\n        let anchorDOM = this.domFromPos(anchor, anchor ? -1 : 1);\n        let headDOM = head == anchor ? anchorDOM : this.domFromPos(head, head ? -1 : 1);\n        let domSel = view.root.getSelection();\n        let selRange = view.domSelectionRange();\n        let brKludge = false;\n        // On Firefox, using Selection.collapse to put the cursor after a\n        // BR node for some reason doesn't always work (#1073). On Safari,\n        // the cursor sometimes inexplicable visually lags behind its\n        // reported position in such situations (#1092).\n        if ((gecko || safari) && anchor == head) {\n            let { node, offset } = anchorDOM;\n            if (node.nodeType == 3) {\n                brKludge = !!(offset && node.nodeValue[offset - 1] == \"\\n\");\n                // Issue #1128\n                if (brKludge && offset == node.nodeValue.length) {\n                    for (let scan = node, after; scan; scan = scan.parentNode) {\n                        if (after = scan.nextSibling) {\n                            if (after.nodeName == \"BR\")\n                                anchorDOM = headDOM = { node: after.parentNode, offset: domIndex(after) + 1 };\n                            break;\n                        }\n                        let desc = scan.pmViewDesc;\n                        if (desc && desc.node && desc.node.isBlock)\n                            break;\n                    }\n                }\n            }\n            else {\n                let prev = node.childNodes[offset - 1];\n                brKludge = prev && (prev.nodeName == \"BR\" || prev.contentEditable == \"false\");\n            }\n        }\n        // Firefox can act strangely when the selection is in front of an\n        // uneditable node. See #1163 and https://bugzilla.mozilla.org/show_bug.cgi?id=1709536\n        if (gecko && selRange.focusNode && selRange.focusNode != headDOM.node && selRange.focusNode.nodeType == 1) {\n            let after = selRange.focusNode.childNodes[selRange.focusOffset];\n            if (after && after.contentEditable == \"false\")\n                force = true;\n        }\n        if (!(force || brKludge && safari) &&\n            isEquivalentPosition(anchorDOM.node, anchorDOM.offset, selRange.anchorNode, selRange.anchorOffset) &&\n            isEquivalentPosition(headDOM.node, headDOM.offset, selRange.focusNode, selRange.focusOffset))\n            return;\n        // Selection.extend can be used to create an 'inverted' selection\n        // (one where the focus is before the anchor), but not all\n        // browsers support it yet.\n        let domSelExtended = false;\n        if ((domSel.extend || anchor == head) && !(brKludge && gecko)) {\n            domSel.collapse(anchorDOM.node, anchorDOM.offset);\n            try {\n                if (anchor != head)\n                    domSel.extend(headDOM.node, headDOM.offset);\n                domSelExtended = true;\n            }\n            catch (_) {\n                // In some cases with Chrome the selection is empty after calling\n                // collapse, even when it should be valid. This appears to be a bug, but\n                // it is difficult to isolate. If this happens fallback to the old path\n                // without using extend.\n                // Similarly, this could crash on Safari if the editor is hidden, and\n                // there was no selection.\n            }\n        }\n        if (!domSelExtended) {\n            if (anchor > head) {\n                let tmp = anchorDOM;\n                anchorDOM = headDOM;\n                headDOM = tmp;\n            }\n            let range = document.createRange();\n            range.setEnd(headDOM.node, headDOM.offset);\n            range.setStart(anchorDOM.node, anchorDOM.offset);\n            domSel.removeAllRanges();\n            domSel.addRange(range);\n        }\n    }\n    ignoreMutation(mutation) {\n        return !this.contentDOM && mutation.type != \"selection\";\n    }\n    get contentLost() {\n        return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM);\n    }\n    // Remove a subtree of the element tree that has been touched\n    // by a DOM change, so that the next update will redraw it.\n    markDirty(from, to) {\n        for (let offset = 0, i = 0; i < this.children.length; i++) {\n            let child = this.children[i], end = offset + child.size;\n            if (offset == end ? from <= end && to >= offset : from < end && to > offset) {\n                let startInside = offset + child.border, endInside = end - child.border;\n                if (from >= startInside && to <= endInside) {\n                    this.dirty = from == offset || to == end ? CONTENT_DIRTY : CHILD_DIRTY;\n                    if (from == startInside && to == endInside &&\n                        (child.contentLost || child.dom.parentNode != this.contentDOM))\n                        child.dirty = NODE_DIRTY;\n                    else\n                        child.markDirty(from - startInside, to - startInside);\n                    return;\n                }\n                else {\n                    child.dirty = child.dom == child.contentDOM && child.dom.parentNode == this.contentDOM && !child.children.length\n                        ? CONTENT_DIRTY : NODE_DIRTY;\n                }\n            }\n            offset = end;\n        }\n        this.dirty = CONTENT_DIRTY;\n    }\n    markParentsDirty() {\n        let level = 1;\n        for (let node = this.parent; node; node = node.parent, level++) {\n            let dirty = level == 1 ? CONTENT_DIRTY : CHILD_DIRTY;\n            if (node.dirty < dirty)\n                node.dirty = dirty;\n        }\n    }\n    get domAtom() { return false; }\n    get ignoreForCoords() { return false; }\n    get ignoreForSelection() { return false; }\n    isText(text) { return false; }\n}\n// A widget desc represents a widget decoration, which is a DOM node\n// drawn between the document nodes.\nclass WidgetViewDesc extends ViewDesc {\n    constructor(parent, widget, view, pos) {\n        let self, dom = widget.type.toDOM;\n        if (typeof dom == \"function\")\n            dom = dom(view, () => {\n                if (!self)\n                    return pos;\n                if (self.parent)\n                    return self.parent.posBeforeChild(self);\n            });\n        if (!widget.type.spec.raw) {\n            if (dom.nodeType != 1) {\n                let wrap = document.createElement(\"span\");\n                wrap.appendChild(dom);\n                dom = wrap;\n            }\n            dom.contentEditable = \"false\";\n            dom.classList.add(\"ProseMirror-widget\");\n        }\n        super(parent, [], dom, null);\n        this.widget = widget;\n        this.widget = widget;\n        self = this;\n    }\n    matchesWidget(widget) {\n        return this.dirty == NOT_DIRTY && widget.type.eq(this.widget.type);\n    }\n    parseRule() { return { ignore: true }; }\n    stopEvent(event) {\n        let stop = this.widget.spec.stopEvent;\n        return stop ? stop(event) : false;\n    }\n    ignoreMutation(mutation) {\n        return mutation.type != \"selection\" || this.widget.spec.ignoreSelection;\n    }\n    destroy() {\n        this.widget.type.destroy(this.dom);\n        super.destroy();\n    }\n    get domAtom() { return true; }\n    get ignoreForSelection() { return !!this.widget.type.spec.relaxedSide; }\n    get side() { return this.widget.type.side; }\n}\nclass CompositionViewDesc extends ViewDesc {\n    constructor(parent, dom, textDOM, text) {\n        super(parent, [], dom, null);\n        this.textDOM = textDOM;\n        this.text = text;\n    }\n    get size() { return this.text.length; }\n    localPosFromDOM(dom, offset) {\n        if (dom != this.textDOM)\n            return this.posAtStart + (offset ? this.size : 0);\n        return this.posAtStart + offset;\n    }\n    domFromPos(pos) {\n        return { node: this.textDOM, offset: pos };\n    }\n    ignoreMutation(mut) {\n        return mut.type === 'characterData' && mut.target.nodeValue == mut.oldValue;\n    }\n}\n// A mark desc represents a mark. May have multiple children,\n// depending on how the mark is split. Note that marks are drawn using\n// a fixed nesting order, for simplicity and predictability, so in\n// some cases they will be split more often than would appear\n// necessary.\nclass MarkViewDesc extends ViewDesc {\n    constructor(parent, mark, dom, contentDOM, spec) {\n        super(parent, [], dom, contentDOM);\n        this.mark = mark;\n        this.spec = spec;\n    }\n    static create(parent, mark, inline, view) {\n        let custom = view.nodeViews[mark.type.name];\n        let spec = custom && custom(mark, view, inline);\n        if (!spec || !spec.dom)\n            spec = DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline), null, mark.attrs);\n        return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom, spec);\n    }\n    parseRule() {\n        if ((this.dirty & NODE_DIRTY) || this.mark.type.spec.reparseInView)\n            return null;\n        return { mark: this.mark.type.name, attrs: this.mark.attrs, contentElement: this.contentDOM };\n    }\n    matchesMark(mark) { return this.dirty != NODE_DIRTY && this.mark.eq(mark); }\n    markDirty(from, to) {\n        super.markDirty(from, to);\n        // Move dirty info to nearest node view\n        if (this.dirty != NOT_DIRTY) {\n            let parent = this.parent;\n            while (!parent.node)\n                parent = parent.parent;\n            if (parent.dirty < this.dirty)\n                parent.dirty = this.dirty;\n            this.dirty = NOT_DIRTY;\n        }\n    }\n    slice(from, to, view) {\n        let copy = MarkViewDesc.create(this.parent, this.mark, true, view);\n        let nodes = this.children, size = this.size;\n        if (to < size)\n            nodes = replaceNodes(nodes, to, size, view);\n        if (from > 0)\n            nodes = replaceNodes(nodes, 0, from, view);\n        for (let i = 0; i < nodes.length; i++)\n            nodes[i].parent = copy;\n        copy.children = nodes;\n        return copy;\n    }\n    ignoreMutation(mutation) {\n        return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : super.ignoreMutation(mutation);\n    }\n    destroy() {\n        if (this.spec.destroy)\n            this.spec.destroy();\n        super.destroy();\n    }\n}\n// Node view descs are the main, most common type of view desc, and\n// correspond to an actual node in the document. Unlike mark descs,\n// they populate their child array themselves.\nclass NodeViewDesc extends ViewDesc {\n    constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos) {\n        super(parent, [], dom, contentDOM);\n        this.node = node;\n        this.outerDeco = outerDeco;\n        this.innerDeco = innerDeco;\n        this.nodeDOM = nodeDOM;\n    }\n    // By default, a node is rendered using the `toDOM` method from the\n    // node type spec. But client code can use the `nodeViews` spec to\n    // supply a custom node view, which can influence various aspects of\n    // the way the node works.\n    //\n    // (Using subclassing for this was intentionally decided against,\n    // since it'd require exposing a whole slew of finicky\n    // implementation details to the user code that they probably will\n    // never need.)\n    static create(parent, node, outerDeco, innerDeco, view, pos) {\n        let custom = view.nodeViews[node.type.name], descObj;\n        let spec = custom && custom(node, view, () => {\n            // (This is a function that allows the custom view to find its\n            // own position)\n            if (!descObj)\n                return pos;\n            if (descObj.parent)\n                return descObj.parent.posBeforeChild(descObj);\n        }, outerDeco, innerDeco);\n        let dom = spec && spec.dom, contentDOM = spec && spec.contentDOM;\n        if (node.isText) {\n            if (!dom)\n                dom = document.createTextNode(node.text);\n            else if (dom.nodeType != 3)\n                throw new RangeError(\"Text must be rendered as a DOM text node\");\n        }\n        else if (!dom) {\n            let spec = DOMSerializer.renderSpec(document, node.type.spec.toDOM(node), null, node.attrs);\n            ({ dom, contentDOM } = spec);\n        }\n        if (!contentDOM && !node.isText && dom.nodeName != \"BR\") { // Chrome gets confused by <br contenteditable=false>\n            if (!dom.hasAttribute(\"contenteditable\"))\n                dom.contentEditable = \"false\";\n            if (node.type.spec.draggable)\n                dom.draggable = true;\n        }\n        let nodeDOM = dom;\n        dom = applyOuterDeco(dom, outerDeco, node);\n        if (spec)\n            return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec, view, pos + 1);\n        else if (node.isText)\n            return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM, view);\n        else\n            return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, view, pos + 1);\n    }\n    parseRule() {\n        // Experimental kludge to allow opt-in re-parsing of nodes\n        if (this.node.type.spec.reparseInView)\n            return null;\n        // FIXME the assumption that this can always return the current\n        // attrs means that if the user somehow manages to change the\n        // attrs in the dom, that won't be picked up. Not entirely sure\n        // whether this is a problem\n        let rule = { node: this.node.type.name, attrs: this.node.attrs };\n        if (this.node.type.whitespace == \"pre\")\n            rule.preserveWhitespace = \"full\";\n        if (!this.contentDOM) {\n            rule.getContent = () => this.node.content;\n        }\n        else if (!this.contentLost) {\n            rule.contentElement = this.contentDOM;\n        }\n        else {\n            // Chrome likes to randomly recreate parent nodes when\n            // backspacing things. When that happens, this tries to find the\n            // new parent.\n            for (let i = this.children.length - 1; i >= 0; i--) {\n                let child = this.children[i];\n                if (this.dom.contains(child.dom.parentNode)) {\n                    rule.contentElement = child.dom.parentNode;\n                    break;\n                }\n            }\n            if (!rule.contentElement)\n                rule.getContent = () => Fragment.empty;\n        }\n        return rule;\n    }\n    matchesNode(node, outerDeco, innerDeco) {\n        return this.dirty == NOT_DIRTY && node.eq(this.node) &&\n            sameOuterDeco(outerDeco, this.outerDeco) && innerDeco.eq(this.innerDeco);\n    }\n    get size() { return this.node.nodeSize; }\n    get border() { return this.node.isLeaf ? 0 : 1; }\n    // Syncs `this.children` to match `this.node.content` and the local\n    // decorations, possibly introducing nesting for marks. Then, in a\n    // separate step, syncs the DOM inside `this.contentDOM` to\n    // `this.children`.\n    updateChildren(view, pos) {\n        let inline = this.node.inlineContent, off = pos;\n        let composition = view.composing ? this.localCompositionInfo(view, pos) : null;\n        let localComposition = composition && composition.pos > -1 ? composition : null;\n        let compositionInChild = composition && composition.pos < 0;\n        let updater = new ViewTreeUpdater(this, localComposition && localComposition.node, view);\n        iterDeco(this.node, this.innerDeco, (widget, i, insideNode) => {\n            if (widget.spec.marks)\n                updater.syncToMarks(widget.spec.marks, inline, view);\n            else if (widget.type.side >= 0 && !insideNode)\n                updater.syncToMarks(i == this.node.childCount ? Mark.none : this.node.child(i).marks, inline, view);\n            // If the next node is a desc matching this widget, reuse it,\n            // otherwise insert the widget as a new view desc.\n            updater.placeWidget(widget, view, off);\n        }, (child, outerDeco, innerDeco, i) => {\n            // Make sure the wrapping mark descs match the node's marks.\n            updater.syncToMarks(child.marks, inline, view);\n            // Try several strategies for drawing this node\n            let compIndex;\n            if (updater.findNodeMatch(child, outerDeco, innerDeco, i)) ;\n            else if (compositionInChild && view.state.selection.from > off &&\n                view.state.selection.to < off + child.nodeSize &&\n                (compIndex = updater.findIndexWithChild(composition.node)) > -1 &&\n                updater.updateNodeAt(child, outerDeco, innerDeco, compIndex, view)) ;\n            else if (updater.updateNextNode(child, outerDeco, innerDeco, view, i, off)) ;\n            else {\n                // Add it as a new view\n                updater.addNode(child, outerDeco, innerDeco, view, off);\n            }\n            off += child.nodeSize;\n        });\n        // Drop all remaining descs after the current position.\n        updater.syncToMarks([], inline, view);\n        if (this.node.isTextblock)\n            updater.addTextblockHacks();\n        updater.destroyRest();\n        // Sync the DOM if anything changed\n        if (updater.changed || this.dirty == CONTENT_DIRTY) {\n            // May have to protect focused DOM from being changed if a composition is active\n            if (localComposition)\n                this.protectLocalComposition(view, localComposition);\n            renderDescs(this.contentDOM, this.children, view);\n            if (ios)\n                iosHacks(this.dom);\n        }\n    }\n    localCompositionInfo(view, pos) {\n        // Only do something if both the selection and a focused text node\n        // are inside of this node\n        let { from, to } = view.state.selection;\n        if (!(view.state.selection instanceof TextSelection) || from < pos || to > pos + this.node.content.size)\n            return null;\n        let textNode = view.input.compositionNode;\n        if (!textNode || !this.dom.contains(textNode.parentNode))\n            return null;\n        if (this.node.inlineContent) {\n            // Find the text in the focused node in the node, stop if it's not\n            // there (may have been modified through other means, in which\n            // case it should overwritten)\n            let text = textNode.nodeValue;\n            let textPos = findTextInFragment(this.node.content, text, from - pos, to - pos);\n            return textPos < 0 ? null : { node: textNode, pos: textPos, text };\n        }\n        else {\n            return { node: textNode, pos: -1, text: \"\" };\n        }\n    }\n    protectLocalComposition(view, { node, pos, text }) {\n        // The node is already part of a local view desc, leave it there\n        if (this.getDesc(node))\n            return;\n        // Create a composition view for the orphaned nodes\n        let topNode = node;\n        for (;; topNode = topNode.parentNode) {\n            if (topNode.parentNode == this.contentDOM)\n                break;\n            while (topNode.previousSibling)\n                topNode.parentNode.removeChild(topNode.previousSibling);\n            while (topNode.nextSibling)\n                topNode.parentNode.removeChild(topNode.nextSibling);\n            if (topNode.pmViewDesc)\n                topNode.pmViewDesc = undefined;\n        }\n        let desc = new CompositionViewDesc(this, topNode, node, text);\n        view.input.compositionNodes.push(desc);\n        // Patch up this.children to contain the composition view\n        this.children = replaceNodes(this.children, pos, pos + text.length, view, desc);\n    }\n    // If this desc must be updated to match the given node decoration,\n    // do so and return true.\n    update(node, outerDeco, innerDeco, view) {\n        if (this.dirty == NODE_DIRTY ||\n            !node.sameMarkup(this.node))\n            return false;\n        this.updateInner(node, outerDeco, innerDeco, view);\n        return true;\n    }\n    updateInner(node, outerDeco, innerDeco, view) {\n        this.updateOuterDeco(outerDeco);\n        this.node = node;\n        this.innerDeco = innerDeco;\n        if (this.contentDOM)\n            this.updateChildren(view, this.posAtStart);\n        this.dirty = NOT_DIRTY;\n    }\n    updateOuterDeco(outerDeco) {\n        if (sameOuterDeco(outerDeco, this.outerDeco))\n            return;\n        let needsWrap = this.nodeDOM.nodeType != 1;\n        let oldDOM = this.dom;\n        this.dom = patchOuterDeco(this.dom, this.nodeDOM, computeOuterDeco(this.outerDeco, this.node, needsWrap), computeOuterDeco(outerDeco, this.node, needsWrap));\n        if (this.dom != oldDOM) {\n            oldDOM.pmViewDesc = undefined;\n            this.dom.pmViewDesc = this;\n        }\n        this.outerDeco = outerDeco;\n    }\n    // Mark this node as being the selected node.\n    selectNode() {\n        if (this.nodeDOM.nodeType == 1)\n            this.nodeDOM.classList.add(\"ProseMirror-selectednode\");\n        if (this.contentDOM || !this.node.type.spec.draggable)\n            this.dom.draggable = true;\n    }\n    // Remove selected node marking from this node.\n    deselectNode() {\n        if (this.nodeDOM.nodeType == 1) {\n            this.nodeDOM.classList.remove(\"ProseMirror-selectednode\");\n            if (this.contentDOM || !this.node.type.spec.draggable)\n                this.dom.removeAttribute(\"draggable\");\n        }\n    }\n    get domAtom() { return this.node.isAtom; }\n}\n// Create a view desc for the top-level document node, to be exported\n// and used by the view class.\nfunction docViewDesc(doc, outerDeco, innerDeco, dom, view) {\n    applyOuterDeco(dom, outerDeco, doc);\n    let docView = new NodeViewDesc(undefined, doc, outerDeco, innerDeco, dom, dom, dom, view, 0);\n    if (docView.contentDOM)\n        docView.updateChildren(view, 0);\n    return docView;\n}\nclass TextViewDesc extends NodeViewDesc {\n    constructor(parent, node, outerDeco, innerDeco, dom, nodeDOM, view) {\n        super(parent, node, outerDeco, innerDeco, dom, null, nodeDOM, view, 0);\n    }\n    parseRule() {\n        let skip = this.nodeDOM.parentNode;\n        while (skip && skip != this.dom && !skip.pmIsDeco)\n            skip = skip.parentNode;\n        return { skip: (skip || true) };\n    }\n    update(node, outerDeco, innerDeco, view) {\n        if (this.dirty == NODE_DIRTY || (this.dirty != NOT_DIRTY && !this.inParent()) ||\n            !node.sameMarkup(this.node))\n            return false;\n        this.updateOuterDeco(outerDeco);\n        if ((this.dirty != NOT_DIRTY || node.text != this.node.text) && node.text != this.nodeDOM.nodeValue) {\n            this.nodeDOM.nodeValue = node.text;\n            if (view.trackWrites == this.nodeDOM)\n                view.trackWrites = null;\n        }\n        this.node = node;\n        this.dirty = NOT_DIRTY;\n        return true;\n    }\n    inParent() {\n        let parentDOM = this.parent.contentDOM;\n        for (let n = this.nodeDOM; n; n = n.parentNode)\n            if (n == parentDOM)\n                return true;\n        return false;\n    }\n    domFromPos(pos) {\n        return { node: this.nodeDOM, offset: pos };\n    }\n    localPosFromDOM(dom, offset, bias) {\n        if (dom == this.nodeDOM)\n            return this.posAtStart + Math.min(offset, this.node.text.length);\n        return super.localPosFromDOM(dom, offset, bias);\n    }\n    ignoreMutation(mutation) {\n        return mutation.type != \"characterData\" && mutation.type != \"selection\";\n    }\n    slice(from, to, view) {\n        let node = this.node.cut(from, to), dom = document.createTextNode(node.text);\n        return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom, view);\n    }\n    markDirty(from, to) {\n        super.markDirty(from, to);\n        if (this.dom != this.nodeDOM && (from == 0 || to == this.nodeDOM.nodeValue.length))\n            this.dirty = NODE_DIRTY;\n    }\n    get domAtom() { return false; }\n    isText(text) { return this.node.text == text; }\n}\n// A dummy desc used to tag trailing BR or IMG nodes created to work\n// around contentEditable terribleness.\nclass TrailingHackViewDesc extends ViewDesc {\n    parseRule() { return { ignore: true }; }\n    matchesHack(nodeName) { return this.dirty == NOT_DIRTY && this.dom.nodeName == nodeName; }\n    get domAtom() { return true; }\n    get ignoreForCoords() { return this.dom.nodeName == \"IMG\"; }\n}\n// A separate subclass is used for customized node views, so that the\n// extra checks only have to be made for nodes that are actually\n// customized.\nclass CustomNodeViewDesc extends NodeViewDesc {\n    constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec, view, pos) {\n        super(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos);\n        this.spec = spec;\n    }\n    // A custom `update` method gets to decide whether the update goes\n    // through. If it does, and there's a `contentDOM` node, our logic\n    // updates the children.\n    update(node, outerDeco, innerDeco, view) {\n        if (this.dirty == NODE_DIRTY)\n            return false;\n        if (this.spec.update && (this.node.type == node.type || this.spec.multiType)) {\n            let result = this.spec.update(node, outerDeco, innerDeco);\n            if (result)\n                this.updateInner(node, outerDeco, innerDeco, view);\n            return result;\n        }\n        else if (!this.contentDOM && !node.isLeaf) {\n            return false;\n        }\n        else {\n            return super.update(node, outerDeco, innerDeco, view);\n        }\n    }\n    selectNode() {\n        this.spec.selectNode ? this.spec.selectNode() : super.selectNode();\n    }\n    deselectNode() {\n        this.spec.deselectNode ? this.spec.deselectNode() : super.deselectNode();\n    }\n    setSelection(anchor, head, view, force) {\n        this.spec.setSelection ? this.spec.setSelection(anchor, head, view.root)\n            : super.setSelection(anchor, head, view, force);\n    }\n    destroy() {\n        if (this.spec.destroy)\n            this.spec.destroy();\n        super.destroy();\n    }\n    stopEvent(event) {\n        return this.spec.stopEvent ? this.spec.stopEvent(event) : false;\n    }\n    ignoreMutation(mutation) {\n        return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : super.ignoreMutation(mutation);\n    }\n}\n// Sync the content of the given DOM node with the nodes associated\n// with the given array of view descs, recursing into mark descs\n// because this should sync the subtree for a whole node at a time.\nfunction renderDescs(parentDOM, descs, view) {\n    let dom = parentDOM.firstChild, written = false;\n    for (let i = 0; i < descs.length; i++) {\n        let desc = descs[i], childDOM = desc.dom;\n        if (childDOM.parentNode == parentDOM) {\n            while (childDOM != dom) {\n                dom = rm(dom);\n                written = true;\n            }\n            dom = dom.nextSibling;\n        }\n        else {\n            written = true;\n            parentDOM.insertBefore(childDOM, dom);\n        }\n        if (desc instanceof MarkViewDesc) {\n            let pos = dom ? dom.previousSibling : parentDOM.lastChild;\n            renderDescs(desc.contentDOM, desc.children, view);\n            dom = pos ? pos.nextSibling : parentDOM.firstChild;\n        }\n    }\n    while (dom) {\n        dom = rm(dom);\n        written = true;\n    }\n    if (written && view.trackWrites == parentDOM)\n        view.trackWrites = null;\n}\nconst OuterDecoLevel = function (nodeName) {\n    if (nodeName)\n        this.nodeName = nodeName;\n};\nOuterDecoLevel.prototype = Object.create(null);\nconst noDeco = [new OuterDecoLevel];\nfunction computeOuterDeco(outerDeco, node, needsWrap) {\n    if (outerDeco.length == 0)\n        return noDeco;\n    let top = needsWrap ? noDeco[0] : new OuterDecoLevel, result = [top];\n    for (let i = 0; i < outerDeco.length; i++) {\n        let attrs = outerDeco[i].type.attrs;\n        if (!attrs)\n            continue;\n        if (attrs.nodeName)\n            result.push(top = new OuterDecoLevel(attrs.nodeName));\n        for (let name in attrs) {\n            let val = attrs[name];\n            if (val == null)\n                continue;\n            if (needsWrap && result.length == 1)\n                result.push(top = new OuterDecoLevel(node.isInline ? \"span\" : \"div\"));\n            if (name == \"class\")\n                top.class = (top.class ? top.class + \" \" : \"\") + val;\n            else if (name == \"style\")\n                top.style = (top.style ? top.style + \";\" : \"\") + val;\n            else if (name != \"nodeName\")\n                top[name] = val;\n        }\n    }\n    return result;\n}\nfunction patchOuterDeco(outerDOM, nodeDOM, prevComputed, curComputed) {\n    // Shortcut for trivial case\n    if (prevComputed == noDeco && curComputed == noDeco)\n        return nodeDOM;\n    let curDOM = nodeDOM;\n    for (let i = 0; i < curComputed.length; i++) {\n        let deco = curComputed[i], prev = prevComputed[i];\n        if (i) {\n            let parent;\n            if (prev && prev.nodeName == deco.nodeName && curDOM != outerDOM &&\n                (parent = curDOM.parentNode) && parent.nodeName.toLowerCase() == deco.nodeName) {\n                curDOM = parent;\n            }\n            else {\n                parent = document.createElement(deco.nodeName);\n                parent.pmIsDeco = true;\n                parent.appendChild(curDOM);\n                prev = noDeco[0];\n                curDOM = parent;\n            }\n        }\n        patchAttributes(curDOM, prev || noDeco[0], deco);\n    }\n    return curDOM;\n}\nfunction patchAttributes(dom, prev, cur) {\n    for (let name in prev)\n        if (name != \"class\" && name != \"style\" && name != \"nodeName\" && !(name in cur))\n            dom.removeAttribute(name);\n    for (let name in cur)\n        if (name != \"class\" && name != \"style\" && name != \"nodeName\" && cur[name] != prev[name])\n            dom.setAttribute(name, cur[name]);\n    if (prev.class != cur.class) {\n        let prevList = prev.class ? prev.class.split(\" \").filter(Boolean) : [];\n        let curList = cur.class ? cur.class.split(\" \").filter(Boolean) : [];\n        for (let i = 0; i < prevList.length; i++)\n            if (curList.indexOf(prevList[i]) == -1)\n                dom.classList.remove(prevList[i]);\n        for (let i = 0; i < curList.length; i++)\n            if (prevList.indexOf(curList[i]) == -1)\n                dom.classList.add(curList[i]);\n        if (dom.classList.length == 0)\n            dom.removeAttribute(\"class\");\n    }\n    if (prev.style != cur.style) {\n        if (prev.style) {\n            let prop = /\\s*([\\w\\-\\xa1-\\uffff]+)\\s*:(?:\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|\\(.*?\\)|[^;])*/g, m;\n            while (m = prop.exec(prev.style))\n                dom.style.removeProperty(m[1]);\n        }\n        if (cur.style)\n            dom.style.cssText += cur.style;\n    }\n}\nfunction applyOuterDeco(dom, deco, node) {\n    return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, dom.nodeType != 1));\n}\nfunction sameOuterDeco(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (!a[i].type.eq(b[i].type))\n            return false;\n    return true;\n}\n// Remove a DOM node and return its next sibling.\nfunction rm(dom) {\n    let next = dom.nextSibling;\n    dom.parentNode.removeChild(dom);\n    return next;\n}\n// Helper class for incrementally updating a tree of mark descs and\n// the widget and node descs inside of them.\nclass ViewTreeUpdater {\n    constructor(top, lock, view) {\n        this.lock = lock;\n        this.view = view;\n        // Index into `this.top`'s child array, represents the current\n        // update position.\n        this.index = 0;\n        // When entering a mark, the current top and index are pushed\n        // onto this.\n        this.stack = [];\n        // Tracks whether anything was changed\n        this.changed = false;\n        this.top = top;\n        this.preMatch = preMatch(top.node.content, top);\n    }\n    // Destroy and remove the children between the given indices in\n    // `this.top`.\n    destroyBetween(start, end) {\n        if (start == end)\n            return;\n        for (let i = start; i < end; i++)\n            this.top.children[i].destroy();\n        this.top.children.splice(start, end - start);\n        this.changed = true;\n    }\n    // Destroy all remaining children in `this.top`.\n    destroyRest() {\n        this.destroyBetween(this.index, this.top.children.length);\n    }\n    // Sync the current stack of mark descs with the given array of\n    // marks, reusing existing mark descs when possible.\n    syncToMarks(marks, inline, view) {\n        let keep = 0, depth = this.stack.length >> 1;\n        let maxKeep = Math.min(depth, marks.length);\n        while (keep < maxKeep &&\n            (keep == depth - 1 ? this.top : this.stack[(keep + 1) << 1])\n                .matchesMark(marks[keep]) && marks[keep].type.spec.spanning !== false)\n            keep++;\n        while (keep < depth) {\n            this.destroyRest();\n            this.top.dirty = NOT_DIRTY;\n            this.index = this.stack.pop();\n            this.top = this.stack.pop();\n            depth--;\n        }\n        while (depth < marks.length) {\n            this.stack.push(this.top, this.index + 1);\n            let found = -1;\n            for (let i = this.index; i < Math.min(this.index + 3, this.top.children.length); i++) {\n                let next = this.top.children[i];\n                if (next.matchesMark(marks[depth]) && !this.isLocked(next.dom)) {\n                    found = i;\n                    break;\n                }\n            }\n            if (found > -1) {\n                if (found > this.index) {\n                    this.changed = true;\n                    this.destroyBetween(this.index, found);\n                }\n                this.top = this.top.children[this.index];\n            }\n            else {\n                let markDesc = MarkViewDesc.create(this.top, marks[depth], inline, view);\n                this.top.children.splice(this.index, 0, markDesc);\n                this.top = markDesc;\n                this.changed = true;\n            }\n            this.index = 0;\n            depth++;\n        }\n    }\n    // Try to find a node desc matching the given data. Skip over it and\n    // return true when successful.\n    findNodeMatch(node, outerDeco, innerDeco, index) {\n        let found = -1, targetDesc;\n        if (index >= this.preMatch.index &&\n            (targetDesc = this.preMatch.matches[index - this.preMatch.index]).parent == this.top &&\n            targetDesc.matchesNode(node, outerDeco, innerDeco)) {\n            found = this.top.children.indexOf(targetDesc, this.index);\n        }\n        else {\n            for (let i = this.index, e = Math.min(this.top.children.length, i + 5); i < e; i++) {\n                let child = this.top.children[i];\n                if (child.matchesNode(node, outerDeco, innerDeco) && !this.preMatch.matched.has(child)) {\n                    found = i;\n                    break;\n                }\n            }\n        }\n        if (found < 0)\n            return false;\n        this.destroyBetween(this.index, found);\n        this.index++;\n        return true;\n    }\n    updateNodeAt(node, outerDeco, innerDeco, index, view) {\n        let child = this.top.children[index];\n        if (child.dirty == NODE_DIRTY && child.dom == child.contentDOM)\n            child.dirty = CONTENT_DIRTY;\n        if (!child.update(node, outerDeco, innerDeco, view))\n            return false;\n        this.destroyBetween(this.index, index);\n        this.index++;\n        return true;\n    }\n    findIndexWithChild(domNode) {\n        for (;;) {\n            let parent = domNode.parentNode;\n            if (!parent)\n                return -1;\n            if (parent == this.top.contentDOM) {\n                let desc = domNode.pmViewDesc;\n                if (desc)\n                    for (let i = this.index; i < this.top.children.length; i++) {\n                        if (this.top.children[i] == desc)\n                            return i;\n                    }\n                return -1;\n            }\n            domNode = parent;\n        }\n    }\n    // Try to update the next node, if any, to the given data. Checks\n    // pre-matches to avoid overwriting nodes that could still be used.\n    updateNextNode(node, outerDeco, innerDeco, view, index, pos) {\n        for (let i = this.index; i < this.top.children.length; i++) {\n            let next = this.top.children[i];\n            if (next instanceof NodeViewDesc) {\n                let preMatch = this.preMatch.matched.get(next);\n                if (preMatch != null && preMatch != index)\n                    return false;\n                let nextDOM = next.dom, updated;\n                // Can't update if nextDOM is or contains this.lock, except if\n                // it's a text node whose content already matches the new text\n                // and whose decorations match the new ones.\n                let locked = this.isLocked(nextDOM) &&\n                    !(node.isText && next.node && next.node.isText && next.nodeDOM.nodeValue == node.text &&\n                        next.dirty != NODE_DIRTY && sameOuterDeco(outerDeco, next.outerDeco));\n                if (!locked && next.update(node, outerDeco, innerDeco, view)) {\n                    this.destroyBetween(this.index, i);\n                    if (next.dom != nextDOM)\n                        this.changed = true;\n                    this.index++;\n                    return true;\n                }\n                else if (!locked && (updated = this.recreateWrapper(next, node, outerDeco, innerDeco, view, pos))) {\n                    this.destroyBetween(this.index, i);\n                    this.top.children[this.index] = updated;\n                    if (updated.contentDOM) {\n                        updated.dirty = CONTENT_DIRTY;\n                        updated.updateChildren(view, pos + 1);\n                        updated.dirty = NOT_DIRTY;\n                    }\n                    this.changed = true;\n                    this.index++;\n                    return true;\n                }\n                break;\n            }\n        }\n        return false;\n    }\n    // When a node with content is replaced by a different node with\n    // identical content, move over its children.\n    recreateWrapper(next, node, outerDeco, innerDeco, view, pos) {\n        if (next.dirty || node.isAtom || !next.children.length ||\n            !next.node.content.eq(node.content) ||\n            !sameOuterDeco(outerDeco, next.outerDeco) || !innerDeco.eq(next.innerDeco))\n            return null;\n        let wrapper = NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos);\n        if (wrapper.contentDOM) {\n            wrapper.children = next.children;\n            next.children = [];\n            for (let ch of wrapper.children)\n                ch.parent = wrapper;\n        }\n        next.destroy();\n        return wrapper;\n    }\n    // Insert the node as a newly created node desc.\n    addNode(node, outerDeco, innerDeco, view, pos) {\n        let desc = NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos);\n        if (desc.contentDOM)\n            desc.updateChildren(view, pos + 1);\n        this.top.children.splice(this.index++, 0, desc);\n        this.changed = true;\n    }\n    placeWidget(widget, view, pos) {\n        let next = this.index < this.top.children.length ? this.top.children[this.index] : null;\n        if (next && next.matchesWidget(widget) &&\n            (widget == next.widget || !next.widget.type.toDOM.parentNode)) {\n            this.index++;\n        }\n        else {\n            let desc = new WidgetViewDesc(this.top, widget, view, pos);\n            this.top.children.splice(this.index++, 0, desc);\n            this.changed = true;\n        }\n    }\n    // Make sure a textblock looks and behaves correctly in\n    // contentEditable.\n    addTextblockHacks() {\n        let lastChild = this.top.children[this.index - 1], parent = this.top;\n        while (lastChild instanceof MarkViewDesc) {\n            parent = lastChild;\n            lastChild = parent.children[parent.children.length - 1];\n        }\n        if (!lastChild || // Empty textblock\n            !(lastChild instanceof TextViewDesc) ||\n            /\\n$/.test(lastChild.node.text) ||\n            (this.view.requiresGeckoHackNode && /\\s$/.test(lastChild.node.text))) {\n            // Avoid bugs in Safari's cursor drawing (#1165) and Chrome's mouse selection (#1152)\n            if ((safari || chrome) && lastChild && lastChild.dom.contentEditable == \"false\")\n                this.addHackNode(\"IMG\", parent);\n            this.addHackNode(\"BR\", this.top);\n        }\n    }\n    addHackNode(nodeName, parent) {\n        if (parent == this.top && this.index < parent.children.length && parent.children[this.index].matchesHack(nodeName)) {\n            this.index++;\n        }\n        else {\n            let dom = document.createElement(nodeName);\n            if (nodeName == \"IMG\") {\n                dom.className = \"ProseMirror-separator\";\n                dom.alt = \"\";\n            }\n            if (nodeName == \"BR\")\n                dom.className = \"ProseMirror-trailingBreak\";\n            let hack = new TrailingHackViewDesc(this.top, [], dom, null);\n            if (parent != this.top)\n                parent.children.push(hack);\n            else\n                parent.children.splice(this.index++, 0, hack);\n            this.changed = true;\n        }\n    }\n    isLocked(node) {\n        return this.lock && (node == this.lock || node.nodeType == 1 && node.contains(this.lock.parentNode));\n    }\n}\n// Iterate from the end of the fragment and array of descs to find\n// directly matching ones, in order to avoid overeagerly reusing those\n// for other nodes. Returns the fragment index of the first node that\n// is part of the sequence of matched nodes at the end of the\n// fragment.\nfunction preMatch(frag, parentDesc) {\n    let curDesc = parentDesc, descI = curDesc.children.length;\n    let fI = frag.childCount, matched = new Map, matches = [];\n    outer: while (fI > 0) {\n        let desc;\n        for (;;) {\n            if (descI) {\n                let next = curDesc.children[descI - 1];\n                if (next instanceof MarkViewDesc) {\n                    curDesc = next;\n                    descI = next.children.length;\n                }\n                else {\n                    desc = next;\n                    descI--;\n                    break;\n                }\n            }\n            else if (curDesc == parentDesc) {\n                break outer;\n            }\n            else {\n                // FIXME\n                descI = curDesc.parent.children.indexOf(curDesc);\n                curDesc = curDesc.parent;\n            }\n        }\n        let node = desc.node;\n        if (!node)\n            continue;\n        if (node != frag.child(fI - 1))\n            break;\n        --fI;\n        matched.set(desc, fI);\n        matches.push(desc);\n    }\n    return { index: fI, matched, matches: matches.reverse() };\n}\nfunction compareSide(a, b) {\n    return a.type.side - b.type.side;\n}\n// This function abstracts iterating over the nodes and decorations in\n// a fragment. Calls `onNode` for each node, with its local and child\n// decorations. Splits text nodes when there is a decoration starting\n// or ending inside of them. Calls `onWidget` for each widget.\nfunction iterDeco(parent, deco, onWidget, onNode) {\n    let locals = deco.locals(parent), offset = 0;\n    // Simple, cheap variant for when there are no local decorations\n    if (locals.length == 0) {\n        for (let i = 0; i < parent.childCount; i++) {\n            let child = parent.child(i);\n            onNode(child, locals, deco.forChild(offset, child), i);\n            offset += child.nodeSize;\n        }\n        return;\n    }\n    let decoIndex = 0, active = [], restNode = null;\n    for (let parentIndex = 0;;) {\n        let widget, widgets;\n        while (decoIndex < locals.length && locals[decoIndex].to == offset) {\n            let next = locals[decoIndex++];\n            if (next.widget) {\n                if (!widget)\n                    widget = next;\n                else\n                    (widgets || (widgets = [widget])).push(next);\n            }\n        }\n        if (widget) {\n            if (widgets) {\n                widgets.sort(compareSide);\n                for (let i = 0; i < widgets.length; i++)\n                    onWidget(widgets[i], parentIndex, !!restNode);\n            }\n            else {\n                onWidget(widget, parentIndex, !!restNode);\n            }\n        }\n        let child, index;\n        if (restNode) {\n            index = -1;\n            child = restNode;\n            restNode = null;\n        }\n        else if (parentIndex < parent.childCount) {\n            index = parentIndex;\n            child = parent.child(parentIndex++);\n        }\n        else {\n            break;\n        }\n        for (let i = 0; i < active.length; i++)\n            if (active[i].to <= offset)\n                active.splice(i--, 1);\n        while (decoIndex < locals.length && locals[decoIndex].from <= offset && locals[decoIndex].to > offset)\n            active.push(locals[decoIndex++]);\n        let end = offset + child.nodeSize;\n        if (child.isText) {\n            let cutAt = end;\n            if (decoIndex < locals.length && locals[decoIndex].from < cutAt)\n                cutAt = locals[decoIndex].from;\n            for (let i = 0; i < active.length; i++)\n                if (active[i].to < cutAt)\n                    cutAt = active[i].to;\n            if (cutAt < end) {\n                restNode = child.cut(cutAt - offset);\n                child = child.cut(0, cutAt - offset);\n                end = cutAt;\n                index = -1;\n            }\n        }\n        else {\n            while (decoIndex < locals.length && locals[decoIndex].to < end)\n                decoIndex++;\n        }\n        let outerDeco = child.isInline && !child.isLeaf ? active.filter(d => !d.inline) : active.slice();\n        onNode(child, outerDeco, deco.forChild(offset, child), index);\n        offset = end;\n    }\n}\n// List markers in Mobile Safari will mysteriously disappear\n// sometimes. This works around that.\nfunction iosHacks(dom) {\n    if (dom.nodeName == \"UL\" || dom.nodeName == \"OL\") {\n        let oldCSS = dom.style.cssText;\n        dom.style.cssText = oldCSS + \"; list-style: square !important\";\n        window.getComputedStyle(dom).listStyle;\n        dom.style.cssText = oldCSS;\n    }\n}\n// Find a piece of text in an inline fragment, overlapping from-to\nfunction findTextInFragment(frag, text, from, to) {\n    for (let i = 0, pos = 0; i < frag.childCount && pos <= to;) {\n        let child = frag.child(i++), childStart = pos;\n        pos += child.nodeSize;\n        if (!child.isText)\n            continue;\n        let str = child.text;\n        while (i < frag.childCount) {\n            let next = frag.child(i++);\n            pos += next.nodeSize;\n            if (!next.isText)\n                break;\n            str += next.text;\n        }\n        if (pos >= from) {\n            if (pos >= to && str.slice(to - text.length - childStart, to - childStart) == text)\n                return to - text.length;\n            let found = childStart < to ? str.lastIndexOf(text, to - childStart - 1) : -1;\n            if (found >= 0 && found + text.length + childStart >= from)\n                return childStart + found;\n            if (from == to && str.length >= (to + text.length) - childStart &&\n                str.slice(to - childStart, to - childStart + text.length) == text)\n                return to;\n        }\n    }\n    return -1;\n}\n// Replace range from-to in an array of view descs with replacement\n// (may be null to just delete). This goes very much against the grain\n// of the rest of this code, which tends to create nodes with the\n// right shape in one go, rather than messing with them after\n// creation, but is necessary in the composition hack.\nfunction replaceNodes(nodes, from, to, view, replacement) {\n    let result = [];\n    for (let i = 0, off = 0; i < nodes.length; i++) {\n        let child = nodes[i], start = off, end = off += child.size;\n        if (start >= to || end <= from) {\n            result.push(child);\n        }\n        else {\n            if (start < from)\n                result.push(child.slice(0, from - start, view));\n            if (replacement) {\n                result.push(replacement);\n                replacement = undefined;\n            }\n            if (end > to)\n                result.push(child.slice(to - start, child.size, view));\n        }\n    }\n    return result;\n}\n\nfunction selectionFromDOM(view, origin = null) {\n    let domSel = view.domSelectionRange(), doc = view.state.doc;\n    if (!domSel.focusNode)\n        return null;\n    let nearestDesc = view.docView.nearestDesc(domSel.focusNode), inWidget = nearestDesc && nearestDesc.size == 0;\n    let head = view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset, 1);\n    if (head < 0)\n        return null;\n    let $head = doc.resolve(head), anchor, selection;\n    if (selectionCollapsed(domSel)) {\n        anchor = head;\n        while (nearestDesc && !nearestDesc.node)\n            nearestDesc = nearestDesc.parent;\n        let nearestDescNode = nearestDesc.node;\n        if (nearestDesc && nearestDescNode.isAtom && NodeSelection.isSelectable(nearestDescNode) && nearestDesc.parent\n            && !(nearestDescNode.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) {\n            let pos = nearestDesc.posBefore;\n            selection = new NodeSelection(head == pos ? $head : doc.resolve(pos));\n        }\n    }\n    else {\n        if (domSel instanceof view.dom.ownerDocument.defaultView.Selection && domSel.rangeCount > 1) {\n            let min = head, max = head;\n            for (let i = 0; i < domSel.rangeCount; i++) {\n                let range = domSel.getRangeAt(i);\n                min = Math.min(min, view.docView.posFromDOM(range.startContainer, range.startOffset, 1));\n                max = Math.max(max, view.docView.posFromDOM(range.endContainer, range.endOffset, -1));\n            }\n            if (min < 0)\n                return null;\n            [anchor, head] = max == view.state.selection.anchor ? [max, min] : [min, max];\n            $head = doc.resolve(head);\n        }\n        else {\n            anchor = view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset, 1);\n        }\n        if (anchor < 0)\n            return null;\n    }\n    let $anchor = doc.resolve(anchor);\n    if (!selection) {\n        let bias = origin == \"pointer\" || (view.state.selection.head < $head.pos && !inWidget) ? 1 : -1;\n        selection = selectionBetween(view, $anchor, $head, bias);\n    }\n    return selection;\n}\nfunction editorOwnsSelection(view) {\n    return view.editable ? view.hasFocus() :\n        hasSelection(view) && document.activeElement && document.activeElement.contains(view.dom);\n}\nfunction selectionToDOM(view, force = false) {\n    let sel = view.state.selection;\n    syncNodeSelection(view, sel);\n    if (!editorOwnsSelection(view))\n        return;\n    // The delayed drag selection causes issues with Cell Selections\n    // in Safari. And the drag selection delay is to workarond issues\n    // which only present in Chrome.\n    if (!force && view.input.mouseDown && view.input.mouseDown.allowDefault && chrome) {\n        let domSel = view.domSelectionRange(), curSel = view.domObserver.currentSelection;\n        if (domSel.anchorNode && curSel.anchorNode &&\n            isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset)) {\n            view.input.mouseDown.delayedSelectionSync = true;\n            view.domObserver.setCurSelection();\n            return;\n        }\n    }\n    view.domObserver.disconnectSelection();\n    if (view.cursorWrapper) {\n        selectCursorWrapper(view);\n    }\n    else {\n        let { anchor, head } = sel, resetEditableFrom, resetEditableTo;\n        if (brokenSelectBetweenUneditable && !(sel instanceof TextSelection)) {\n            if (!sel.$from.parent.inlineContent)\n                resetEditableFrom = temporarilyEditableNear(view, sel.from);\n            if (!sel.empty && !sel.$from.parent.inlineContent)\n                resetEditableTo = temporarilyEditableNear(view, sel.to);\n        }\n        view.docView.setSelection(anchor, head, view, force);\n        if (brokenSelectBetweenUneditable) {\n            if (resetEditableFrom)\n                resetEditable(resetEditableFrom);\n            if (resetEditableTo)\n                resetEditable(resetEditableTo);\n        }\n        if (sel.visible) {\n            view.dom.classList.remove(\"ProseMirror-hideselection\");\n        }\n        else {\n            view.dom.classList.add(\"ProseMirror-hideselection\");\n            if (\"onselectionchange\" in document)\n                removeClassOnSelectionChange(view);\n        }\n    }\n    view.domObserver.setCurSelection();\n    view.domObserver.connectSelection();\n}\n// Kludge to work around Webkit not allowing a selection to start/end\n// between non-editable block nodes. We briefly make something\n// editable, set the selection, then set it uneditable again.\nconst brokenSelectBetweenUneditable = safari || chrome && chrome_version < 63;\nfunction temporarilyEditableNear(view, pos) {\n    let { node, offset } = view.docView.domFromPos(pos, 0);\n    let after = offset < node.childNodes.length ? node.childNodes[offset] : null;\n    let before = offset ? node.childNodes[offset - 1] : null;\n    if (safari && after && after.contentEditable == \"false\")\n        return setEditable(after);\n    if ((!after || after.contentEditable == \"false\") &&\n        (!before || before.contentEditable == \"false\")) {\n        if (after)\n            return setEditable(after);\n        else if (before)\n            return setEditable(before);\n    }\n}\nfunction setEditable(element) {\n    element.contentEditable = \"true\";\n    if (safari && element.draggable) {\n        element.draggable = false;\n        element.wasDraggable = true;\n    }\n    return element;\n}\nfunction resetEditable(element) {\n    element.contentEditable = \"false\";\n    if (element.wasDraggable) {\n        element.draggable = true;\n        element.wasDraggable = null;\n    }\n}\nfunction removeClassOnSelectionChange(view) {\n    let doc = view.dom.ownerDocument;\n    doc.removeEventListener(\"selectionchange\", view.input.hideSelectionGuard);\n    let domSel = view.domSelectionRange();\n    let node = domSel.anchorNode, offset = domSel.anchorOffset;\n    doc.addEventListener(\"selectionchange\", view.input.hideSelectionGuard = () => {\n        if (domSel.anchorNode != node || domSel.anchorOffset != offset) {\n            doc.removeEventListener(\"selectionchange\", view.input.hideSelectionGuard);\n            setTimeout(() => {\n                if (!editorOwnsSelection(view) || view.state.selection.visible)\n                    view.dom.classList.remove(\"ProseMirror-hideselection\");\n            }, 20);\n        }\n    });\n}\nfunction selectCursorWrapper(view) {\n    let domSel = view.domSelection();\n    if (!domSel)\n        return;\n    let node = view.cursorWrapper.dom, img = node.nodeName == \"IMG\";\n    if (img)\n        domSel.collapse(node.parentNode, domIndex(node) + 1);\n    else\n        domSel.collapse(node, 0);\n    // Kludge to kill 'control selection' in IE11 when selecting an\n    // invisible cursor wrapper, since that would result in those weird\n    // resize handles and a selection that considers the absolutely\n    // positioned wrapper, rather than the root editable node, the\n    // focused element.\n    if (!img && !view.state.selection.visible && ie && ie_version <= 11) {\n        node.disabled = true;\n        node.disabled = false;\n    }\n}\nfunction syncNodeSelection(view, sel) {\n    if (sel instanceof NodeSelection) {\n        let desc = view.docView.descAt(sel.from);\n        if (desc != view.lastSelectedViewDesc) {\n            clearNodeSelection(view);\n            if (desc)\n                desc.selectNode();\n            view.lastSelectedViewDesc = desc;\n        }\n    }\n    else {\n        clearNodeSelection(view);\n    }\n}\n// Clear all DOM statefulness of the last node selection.\nfunction clearNodeSelection(view) {\n    if (view.lastSelectedViewDesc) {\n        if (view.lastSelectedViewDesc.parent)\n            view.lastSelectedViewDesc.deselectNode();\n        view.lastSelectedViewDesc = undefined;\n    }\n}\nfunction selectionBetween(view, $anchor, $head, bias) {\n    return view.someProp(\"createSelectionBetween\", f => f(view, $anchor, $head))\n        || TextSelection.between($anchor, $head, bias);\n}\nfunction hasFocusAndSelection(view) {\n    if (view.editable && !view.hasFocus())\n        return false;\n    return hasSelection(view);\n}\nfunction hasSelection(view) {\n    let sel = view.domSelectionRange();\n    if (!sel.anchorNode)\n        return false;\n    try {\n        // Firefox will raise 'permission denied' errors when accessing\n        // properties of `sel.anchorNode` when it's in a generated CSS\n        // element.\n        return view.dom.contains(sel.anchorNode.nodeType == 3 ? sel.anchorNode.parentNode : sel.anchorNode) &&\n            (view.editable || view.dom.contains(sel.focusNode.nodeType == 3 ? sel.focusNode.parentNode : sel.focusNode));\n    }\n    catch (_) {\n        return false;\n    }\n}\nfunction anchorInRightPlace(view) {\n    let anchorDOM = view.docView.domFromPos(view.state.selection.anchor, 0);\n    let domSel = view.domSelectionRange();\n    return isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset);\n}\n\nfunction moveSelectionBlock(state, dir) {\n    let { $anchor, $head } = state.selection;\n    let $side = dir > 0 ? $anchor.max($head) : $anchor.min($head);\n    let $start = !$side.parent.inlineContent ? $side : $side.depth ? state.doc.resolve(dir > 0 ? $side.after() : $side.before()) : null;\n    return $start && Selection.findFrom($start, dir);\n}\nfunction apply(view, sel) {\n    view.dispatch(view.state.tr.setSelection(sel).scrollIntoView());\n    return true;\n}\nfunction selectHorizontally(view, dir, mods) {\n    let sel = view.state.selection;\n    if (sel instanceof TextSelection) {\n        if (mods.indexOf(\"s\") > -1) {\n            let { $head } = sel, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter;\n            if (!node || node.isText || !node.isLeaf)\n                return false;\n            let $newHead = view.state.doc.resolve($head.pos + node.nodeSize * (dir < 0 ? -1 : 1));\n            return apply(view, new TextSelection(sel.$anchor, $newHead));\n        }\n        else if (!sel.empty) {\n            return false;\n        }\n        else if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\")) {\n            let next = moveSelectionBlock(view.state, dir);\n            if (next && (next instanceof NodeSelection))\n                return apply(view, next);\n            return false;\n        }\n        else if (!(mac && mods.indexOf(\"m\") > -1)) {\n            let $head = sel.$head, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter, desc;\n            if (!node || node.isText)\n                return false;\n            let nodePos = dir < 0 ? $head.pos - node.nodeSize : $head.pos;\n            if (!(node.isAtom || (desc = view.docView.descAt(nodePos)) && !desc.contentDOM))\n                return false;\n            if (NodeSelection.isSelectable(node)) {\n                return apply(view, new NodeSelection(dir < 0 ? view.state.doc.resolve($head.pos - node.nodeSize) : $head));\n            }\n            else if (webkit) {\n                // Chrome and Safari will introduce extra pointless cursor\n                // positions around inline uneditable nodes, so we have to\n                // take over and move the cursor past them (#937)\n                return apply(view, new TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + node.nodeSize)));\n            }\n            else {\n                return false;\n            }\n        }\n    }\n    else if (sel instanceof NodeSelection && sel.node.isInline) {\n        return apply(view, new TextSelection(dir > 0 ? sel.$to : sel.$from));\n    }\n    else {\n        let next = moveSelectionBlock(view.state, dir);\n        if (next)\n            return apply(view, next);\n        return false;\n    }\n}\nfunction nodeLen(node) {\n    return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction isIgnorable(dom, dir) {\n    let desc = dom.pmViewDesc;\n    return desc && desc.size == 0 && (dir < 0 || dom.nextSibling || dom.nodeName != \"BR\");\n}\nfunction skipIgnoredNodes(view, dir) {\n    return dir < 0 ? skipIgnoredNodesBefore(view) : skipIgnoredNodesAfter(view);\n}\n// Make sure the cursor isn't directly after one or more ignored\n// nodes, which will confuse the browser's cursor motion logic.\nfunction skipIgnoredNodesBefore(view) {\n    let sel = view.domSelectionRange();\n    let node = sel.focusNode, offset = sel.focusOffset;\n    if (!node)\n        return;\n    let moveNode, moveOffset, force = false;\n    // Gecko will do odd things when the selection is directly in front\n    // of a non-editable node, so in that case, move it into the next\n    // node if possible. Issue prosemirror/prosemirror#832.\n    if (gecko && node.nodeType == 1 && offset < nodeLen(node) && isIgnorable(node.childNodes[offset], -1))\n        force = true;\n    for (;;) {\n        if (offset > 0) {\n            if (node.nodeType != 1) {\n                break;\n            }\n            else {\n                let before = node.childNodes[offset - 1];\n                if (isIgnorable(before, -1)) {\n                    moveNode = node;\n                    moveOffset = --offset;\n                }\n                else if (before.nodeType == 3) {\n                    node = before;\n                    offset = node.nodeValue.length;\n                }\n                else\n                    break;\n            }\n        }\n        else if (isBlockNode(node)) {\n            break;\n        }\n        else {\n            let prev = node.previousSibling;\n            while (prev && isIgnorable(prev, -1)) {\n                moveNode = node.parentNode;\n                moveOffset = domIndex(prev);\n                prev = prev.previousSibling;\n            }\n            if (!prev) {\n                node = node.parentNode;\n                if (node == view.dom)\n                    break;\n                offset = 0;\n            }\n            else {\n                node = prev;\n                offset = nodeLen(node);\n            }\n        }\n    }\n    if (force)\n        setSelFocus(view, node, offset);\n    else if (moveNode)\n        setSelFocus(view, moveNode, moveOffset);\n}\n// Make sure the cursor isn't directly before one or more ignored\n// nodes.\nfunction skipIgnoredNodesAfter(view) {\n    let sel = view.domSelectionRange();\n    let node = sel.focusNode, offset = sel.focusOffset;\n    if (!node)\n        return;\n    let len = nodeLen(node);\n    let moveNode, moveOffset;\n    for (;;) {\n        if (offset < len) {\n            if (node.nodeType != 1)\n                break;\n            let after = node.childNodes[offset];\n            if (isIgnorable(after, 1)) {\n                moveNode = node;\n                moveOffset = ++offset;\n            }\n            else\n                break;\n        }\n        else if (isBlockNode(node)) {\n            break;\n        }\n        else {\n            let next = node.nextSibling;\n            while (next && isIgnorable(next, 1)) {\n                moveNode = next.parentNode;\n                moveOffset = domIndex(next) + 1;\n                next = next.nextSibling;\n            }\n            if (!next) {\n                node = node.parentNode;\n                if (node == view.dom)\n                    break;\n                offset = len = 0;\n            }\n            else {\n                node = next;\n                offset = 0;\n                len = nodeLen(node);\n            }\n        }\n    }\n    if (moveNode)\n        setSelFocus(view, moveNode, moveOffset);\n}\nfunction isBlockNode(dom) {\n    let desc = dom.pmViewDesc;\n    return desc && desc.node && desc.node.isBlock;\n}\nfunction textNodeAfter(node, offset) {\n    while (node && offset == node.childNodes.length && !hasBlockDesc(node)) {\n        offset = domIndex(node) + 1;\n        node = node.parentNode;\n    }\n    while (node && offset < node.childNodes.length) {\n        let next = node.childNodes[offset];\n        if (next.nodeType == 3)\n            return next;\n        if (next.nodeType == 1 && next.contentEditable == \"false\")\n            break;\n        node = next;\n        offset = 0;\n    }\n}\nfunction textNodeBefore(node, offset) {\n    while (node && !offset && !hasBlockDesc(node)) {\n        offset = domIndex(node);\n        node = node.parentNode;\n    }\n    while (node && offset) {\n        let next = node.childNodes[offset - 1];\n        if (next.nodeType == 3)\n            return next;\n        if (next.nodeType == 1 && next.contentEditable == \"false\")\n            break;\n        node = next;\n        offset = node.childNodes.length;\n    }\n}\nfunction setSelFocus(view, node, offset) {\n    if (node.nodeType != 3) {\n        let before, after;\n        if (after = textNodeAfter(node, offset)) {\n            node = after;\n            offset = 0;\n        }\n        else if (before = textNodeBefore(node, offset)) {\n            node = before;\n            offset = before.nodeValue.length;\n        }\n    }\n    let sel = view.domSelection();\n    if (!sel)\n        return;\n    if (selectionCollapsed(sel)) {\n        let range = document.createRange();\n        range.setEnd(node, offset);\n        range.setStart(node, offset);\n        sel.removeAllRanges();\n        sel.addRange(range);\n    }\n    else if (sel.extend) {\n        sel.extend(node, offset);\n    }\n    view.domObserver.setCurSelection();\n    let { state } = view;\n    // If no state update ends up happening, reset the selection.\n    setTimeout(() => {\n        if (view.state == state)\n            selectionToDOM(view);\n    }, 50);\n}\nfunction findDirection(view, pos) {\n    let $pos = view.state.doc.resolve(pos);\n    if (!(chrome || windows) && $pos.parent.inlineContent) {\n        let coords = view.coordsAtPos(pos);\n        if (pos > $pos.start()) {\n            let before = view.coordsAtPos(pos - 1);\n            let mid = (before.top + before.bottom) / 2;\n            if (mid > coords.top && mid < coords.bottom && Math.abs(before.left - coords.left) > 1)\n                return before.left < coords.left ? \"ltr\" : \"rtl\";\n        }\n        if (pos < $pos.end()) {\n            let after = view.coordsAtPos(pos + 1);\n            let mid = (after.top + after.bottom) / 2;\n            if (mid > coords.top && mid < coords.bottom && Math.abs(after.left - coords.left) > 1)\n                return after.left > coords.left ? \"ltr\" : \"rtl\";\n        }\n    }\n    let computed = getComputedStyle(view.dom).direction;\n    return computed == \"rtl\" ? \"rtl\" : \"ltr\";\n}\n// Check whether vertical selection motion would involve node\n// selections. If so, apply it (if not, the result is left to the\n// browser)\nfunction selectVertically(view, dir, mods) {\n    let sel = view.state.selection;\n    if (sel instanceof TextSelection && !sel.empty || mods.indexOf(\"s\") > -1)\n        return false;\n    if (mac && mods.indexOf(\"m\") > -1)\n        return false;\n    let { $from, $to } = sel;\n    if (!$from.parent.inlineContent || view.endOfTextblock(dir < 0 ? \"up\" : \"down\")) {\n        let next = moveSelectionBlock(view.state, dir);\n        if (next && (next instanceof NodeSelection))\n            return apply(view, next);\n    }\n    if (!$from.parent.inlineContent) {\n        let side = dir < 0 ? $from : $to;\n        let beyond = sel instanceof AllSelection ? Selection.near(side, dir) : Selection.findFrom(side, dir);\n        return beyond ? apply(view, beyond) : false;\n    }\n    return false;\n}\nfunction stopNativeHorizontalDelete(view, dir) {\n    if (!(view.state.selection instanceof TextSelection))\n        return true;\n    let { $head, $anchor, empty } = view.state.selection;\n    if (!$head.sameParent($anchor))\n        return true;\n    if (!empty)\n        return false;\n    if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\"))\n        return true;\n    let nextNode = !$head.textOffset && (dir < 0 ? $head.nodeBefore : $head.nodeAfter);\n    if (nextNode && !nextNode.isText) {\n        let tr = view.state.tr;\n        if (dir < 0)\n            tr.delete($head.pos - nextNode.nodeSize, $head.pos);\n        else\n            tr.delete($head.pos, $head.pos + nextNode.nodeSize);\n        view.dispatch(tr);\n        return true;\n    }\n    return false;\n}\nfunction switchEditable(view, node, state) {\n    view.domObserver.stop();\n    node.contentEditable = state;\n    view.domObserver.start();\n}\n// Issue #867 / #1090 / https://bugs.chromium.org/p/chromium/issues/detail?id=903821\n// In which Safari (and at some point in the past, Chrome) does really\n// wrong things when the down arrow is pressed when the cursor is\n// directly at the start of a textblock and has an uneditable node\n// after it\nfunction safariDownArrowBug(view) {\n    if (!safari || view.state.selection.$head.parentOffset > 0)\n        return false;\n    let { focusNode, focusOffset } = view.domSelectionRange();\n    if (focusNode && focusNode.nodeType == 1 && focusOffset == 0 &&\n        focusNode.firstChild && focusNode.firstChild.contentEditable == \"false\") {\n        let child = focusNode.firstChild;\n        switchEditable(view, child, \"true\");\n        setTimeout(() => switchEditable(view, child, \"false\"), 20);\n    }\n    return false;\n}\n// A backdrop key mapping used to make sure we always suppress keys\n// that have a dangerous default effect, even if the commands they are\n// bound to return false, and to make sure that cursor-motion keys\n// find a cursor (as opposed to a node selection) when pressed. For\n// cursor-motion keys, the code in the handlers also takes care of\n// block selections.\nfunction getMods(event) {\n    let result = \"\";\n    if (event.ctrlKey)\n        result += \"c\";\n    if (event.metaKey)\n        result += \"m\";\n    if (event.altKey)\n        result += \"a\";\n    if (event.shiftKey)\n        result += \"s\";\n    return result;\n}\nfunction captureKeyDown(view, event) {\n    let code = event.keyCode, mods = getMods(event);\n    if (code == 8 || (mac && code == 72 && mods == \"c\")) { // Backspace, Ctrl-h on Mac\n        return stopNativeHorizontalDelete(view, -1) || skipIgnoredNodes(view, -1);\n    }\n    else if ((code == 46 && !event.shiftKey) || (mac && code == 68 && mods == \"c\")) { // Delete, Ctrl-d on Mac\n        return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodes(view, 1);\n    }\n    else if (code == 13 || code == 27) { // Enter, Esc\n        return true;\n    }\n    else if (code == 37 || (mac && code == 66 && mods == \"c\")) { // Left arrow, Ctrl-b on Mac\n        let dir = code == 37 ? (findDirection(view, view.state.selection.from) == \"ltr\" ? -1 : 1) : -1;\n        return selectHorizontally(view, dir, mods) || skipIgnoredNodes(view, dir);\n    }\n    else if (code == 39 || (mac && code == 70 && mods == \"c\")) { // Right arrow, Ctrl-f on Mac\n        let dir = code == 39 ? (findDirection(view, view.state.selection.from) == \"ltr\" ? 1 : -1) : 1;\n        return selectHorizontally(view, dir, mods) || skipIgnoredNodes(view, dir);\n    }\n    else if (code == 38 || (mac && code == 80 && mods == \"c\")) { // Up arrow, Ctrl-p on Mac\n        return selectVertically(view, -1, mods) || skipIgnoredNodes(view, -1);\n    }\n    else if (code == 40 || (mac && code == 78 && mods == \"c\")) { // Down arrow, Ctrl-n on Mac\n        return safariDownArrowBug(view) || selectVertically(view, 1, mods) || skipIgnoredNodes(view, 1);\n    }\n    else if (mods == (mac ? \"m\" : \"c\") &&\n        (code == 66 || code == 73 || code == 89 || code == 90)) { // Mod-[biyz]\n        return true;\n    }\n    return false;\n}\n\nfunction serializeForClipboard(view, slice) {\n    view.someProp(\"transformCopied\", f => { slice = f(slice, view); });\n    let context = [], { content, openStart, openEnd } = slice;\n    while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild.childCount == 1) {\n        openStart--;\n        openEnd--;\n        let node = content.firstChild;\n        context.push(node.type.name, node.attrs != node.type.defaultAttrs ? node.attrs : null);\n        content = node.content;\n    }\n    let serializer = view.someProp(\"clipboardSerializer\") || DOMSerializer.fromSchema(view.state.schema);\n    let doc = detachedDoc(), wrap = doc.createElement(\"div\");\n    wrap.appendChild(serializer.serializeFragment(content, { document: doc }));\n    let firstChild = wrap.firstChild, needsWrap, wrappers = 0;\n    while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {\n        for (let i = needsWrap.length - 1; i >= 0; i--) {\n            let wrapper = doc.createElement(needsWrap[i]);\n            while (wrap.firstChild)\n                wrapper.appendChild(wrap.firstChild);\n            wrap.appendChild(wrapper);\n            wrappers++;\n        }\n        firstChild = wrap.firstChild;\n    }\n    if (firstChild && firstChild.nodeType == 1)\n        firstChild.setAttribute(\"data-pm-slice\", `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : \"\"} ${JSON.stringify(context)}`);\n    let text = view.someProp(\"clipboardTextSerializer\", f => f(slice, view)) ||\n        slice.content.textBetween(0, slice.content.size, \"\\n\\n\");\n    return { dom: wrap, text, slice };\n}\n// Read a slice of content from the clipboard (or drop data).\nfunction parseFromClipboard(view, text, html, plainText, $context) {\n    let inCode = $context.parent.type.spec.code;\n    let dom, slice;\n    if (!html && !text)\n        return null;\n    let asText = !!text && (plainText || inCode || !html);\n    if (asText) {\n        view.someProp(\"transformPastedText\", f => { text = f(text, inCode || plainText, view); });\n        if (inCode) {\n            slice = new Slice(Fragment.from(view.state.schema.text(text.replace(/\\r\\n?/g, \"\\n\"))), 0, 0);\n            view.someProp(\"transformPasted\", f => { slice = f(slice, view, true); });\n            return slice;\n        }\n        let parsed = view.someProp(\"clipboardTextParser\", f => f(text, $context, plainText, view));\n        if (parsed) {\n            slice = parsed;\n        }\n        else {\n            let marks = $context.marks();\n            let { schema } = view.state, serializer = DOMSerializer.fromSchema(schema);\n            dom = document.createElement(\"div\");\n            text.split(/(?:\\r\\n?|\\n)+/).forEach(block => {\n                let p = dom.appendChild(document.createElement(\"p\"));\n                if (block)\n                    p.appendChild(serializer.serializeNode(schema.text(block, marks)));\n            });\n        }\n    }\n    else {\n        view.someProp(\"transformPastedHTML\", f => { html = f(html, view); });\n        dom = readHTML(html);\n        if (webkit)\n            restoreReplacedSpaces(dom);\n    }\n    let contextNode = dom && dom.querySelector(\"[data-pm-slice]\");\n    let sliceData = contextNode && /^(\\d+) (\\d+)(?: -(\\d+))? (.*)/.exec(contextNode.getAttribute(\"data-pm-slice\") || \"\");\n    if (sliceData && sliceData[3])\n        for (let i = +sliceData[3]; i > 0; i--) {\n            let child = dom.firstChild;\n            while (child && child.nodeType != 1)\n                child = child.nextSibling;\n            if (!child)\n                break;\n            dom = child;\n        }\n    if (!slice) {\n        let parser = view.someProp(\"clipboardParser\") || view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema);\n        slice = parser.parseSlice(dom, {\n            preserveWhitespace: !!(asText || sliceData),\n            context: $context,\n            ruleFromNode(dom) {\n                if (dom.nodeName == \"BR\" && !dom.nextSibling &&\n                    dom.parentNode && !inlineParents.test(dom.parentNode.nodeName))\n                    return { ignore: true };\n                return null;\n            }\n        });\n    }\n    if (sliceData) {\n        slice = addContext(closeSlice(slice, +sliceData[1], +sliceData[2]), sliceData[4]);\n    }\n    else { // HTML wasn't created by ProseMirror. Make sure top-level siblings are coherent\n        slice = Slice.maxOpen(normalizeSiblings(slice.content, $context), true);\n        if (slice.openStart || slice.openEnd) {\n            let openStart = 0, openEnd = 0;\n            for (let node = slice.content.firstChild; openStart < slice.openStart && !node.type.spec.isolating; openStart++, node = node.firstChild) { }\n            for (let node = slice.content.lastChild; openEnd < slice.openEnd && !node.type.spec.isolating; openEnd++, node = node.lastChild) { }\n            slice = closeSlice(slice, openStart, openEnd);\n        }\n    }\n    view.someProp(\"transformPasted\", f => { slice = f(slice, view, asText); });\n    return slice;\n}\nconst inlineParents = /^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i;\n// Takes a slice parsed with parseSlice, which means there hasn't been\n// any content-expression checking done on the top nodes, tries to\n// find a parent node in the current context that might fit the nodes,\n// and if successful, rebuilds the slice so that it fits into that parent.\n//\n// This addresses the problem that Transform.replace expects a\n// coherent slice, and will fail to place a set of siblings that don't\n// fit anywhere in the schema.\nfunction normalizeSiblings(fragment, $context) {\n    if (fragment.childCount < 2)\n        return fragment;\n    for (let d = $context.depth; d >= 0; d--) {\n        let parent = $context.node(d);\n        let match = parent.contentMatchAt($context.index(d));\n        let lastWrap, result = [];\n        fragment.forEach(node => {\n            if (!result)\n                return;\n            let wrap = match.findWrapping(node.type), inLast;\n            if (!wrap)\n                return result = null;\n            if (inLast = result.length && lastWrap.length && addToSibling(wrap, lastWrap, node, result[result.length - 1], 0)) {\n                result[result.length - 1] = inLast;\n            }\n            else {\n                if (result.length)\n                    result[result.length - 1] = closeRight(result[result.length - 1], lastWrap.length);\n                let wrapped = withWrappers(node, wrap);\n                result.push(wrapped);\n                match = match.matchType(wrapped.type);\n                lastWrap = wrap;\n            }\n        });\n        if (result)\n            return Fragment.from(result);\n    }\n    return fragment;\n}\nfunction withWrappers(node, wrap, from = 0) {\n    for (let i = wrap.length - 1; i >= from; i--)\n        node = wrap[i].create(null, Fragment.from(node));\n    return node;\n}\n// Used to group adjacent nodes wrapped in similar parents by\n// normalizeSiblings into the same parent node\nfunction addToSibling(wrap, lastWrap, node, sibling, depth) {\n    if (depth < wrap.length && depth < lastWrap.length && wrap[depth] == lastWrap[depth]) {\n        let inner = addToSibling(wrap, lastWrap, node, sibling.lastChild, depth + 1);\n        if (inner)\n            return sibling.copy(sibling.content.replaceChild(sibling.childCount - 1, inner));\n        let match = sibling.contentMatchAt(sibling.childCount);\n        if (match.matchType(depth == wrap.length - 1 ? node.type : wrap[depth + 1]))\n            return sibling.copy(sibling.content.append(Fragment.from(withWrappers(node, wrap, depth + 1))));\n    }\n}\nfunction closeRight(node, depth) {\n    if (depth == 0)\n        return node;\n    let fragment = node.content.replaceChild(node.childCount - 1, closeRight(node.lastChild, depth - 1));\n    let fill = node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true);\n    return node.copy(fragment.append(fill));\n}\nfunction closeRange(fragment, side, from, to, depth, openEnd) {\n    let node = side < 0 ? fragment.firstChild : fragment.lastChild, inner = node.content;\n    if (fragment.childCount > 1)\n        openEnd = 0;\n    if (depth < to - 1)\n        inner = closeRange(inner, side, from, to, depth + 1, openEnd);\n    if (depth >= from)\n        inner = side < 0 ? node.contentMatchAt(0).fillBefore(inner, openEnd <= depth).append(inner)\n            : inner.append(node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true));\n    return fragment.replaceChild(side < 0 ? 0 : fragment.childCount - 1, node.copy(inner));\n}\nfunction closeSlice(slice, openStart, openEnd) {\n    if (openStart < slice.openStart)\n        slice = new Slice(closeRange(slice.content, -1, openStart, slice.openStart, 0, slice.openEnd), openStart, slice.openEnd);\n    if (openEnd < slice.openEnd)\n        slice = new Slice(closeRange(slice.content, 1, openEnd, slice.openEnd, 0, 0), slice.openStart, openEnd);\n    return slice;\n}\n// Trick from jQuery -- some elements must be wrapped in other\n// elements for innerHTML to work. I.e. if you do `div.innerHTML =\n// \"<td>..</td>\"` the table cells are ignored.\nconst wrapMap = {\n    thead: [\"table\"],\n    tbody: [\"table\"],\n    tfoot: [\"table\"],\n    caption: [\"table\"],\n    colgroup: [\"table\"],\n    col: [\"table\", \"colgroup\"],\n    tr: [\"table\", \"tbody\"],\n    td: [\"table\", \"tbody\", \"tr\"],\n    th: [\"table\", \"tbody\", \"tr\"]\n};\nlet _detachedDoc = null;\nfunction detachedDoc() {\n    return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument(\"title\"));\n}\nlet _policy = null;\nfunction maybeWrapTrusted(html) {\n    let trustedTypes = window.trustedTypes;\n    if (!trustedTypes)\n        return html;\n    // With the require-trusted-types-for CSP, Chrome will block\n    // innerHTML, even on a detached document. This wraps the string in\n    // a way that makes the browser allow us to use its parser again.\n    if (!_policy)\n        _policy = trustedTypes.defaultPolicy || trustedTypes.createPolicy(\"ProseMirrorClipboard\", { createHTML: (s) => s });\n    return _policy.createHTML(html);\n}\nfunction readHTML(html) {\n    let metas = /^(\\s*<meta [^>]*>)*/.exec(html);\n    if (metas)\n        html = html.slice(metas[0].length);\n    let elt = detachedDoc().createElement(\"div\");\n    let firstTag = /<([a-z][^>\\s]+)/i.exec(html), wrap;\n    if (wrap = firstTag && wrapMap[firstTag[1].toLowerCase()])\n        html = wrap.map(n => \"<\" + n + \">\").join(\"\") + html + wrap.map(n => \"</\" + n + \">\").reverse().join(\"\");\n    elt.innerHTML = maybeWrapTrusted(html);\n    if (wrap)\n        for (let i = 0; i < wrap.length; i++)\n            elt = elt.querySelector(wrap[i]) || elt;\n    return elt;\n}\n// Webkit browsers do some hard-to-predict replacement of regular\n// spaces with non-breaking spaces when putting content on the\n// clipboard. This tries to convert such non-breaking spaces (which\n// will be wrapped in a plain span on Chrome, a span with class\n// Apple-converted-space on Safari) back to regular spaces.\nfunction restoreReplacedSpaces(dom) {\n    let nodes = dom.querySelectorAll(chrome ? \"span:not([class]):not([style])\" : \"span.Apple-converted-space\");\n    for (let i = 0; i < nodes.length; i++) {\n        let node = nodes[i];\n        if (node.childNodes.length == 1 && node.textContent == \"\\u00a0\" && node.parentNode)\n            node.parentNode.replaceChild(dom.ownerDocument.createTextNode(\" \"), node);\n    }\n}\nfunction addContext(slice, context) {\n    if (!slice.size)\n        return slice;\n    let schema = slice.content.firstChild.type.schema, array;\n    try {\n        array = JSON.parse(context);\n    }\n    catch (e) {\n        return slice;\n    }\n    let { content, openStart, openEnd } = slice;\n    for (let i = array.length - 2; i >= 0; i -= 2) {\n        let type = schema.nodes[array[i]];\n        if (!type || type.hasRequiredAttrs())\n            break;\n        content = Fragment.from(type.create(array[i + 1], content));\n        openStart++;\n        openEnd++;\n    }\n    return new Slice(content, openStart, openEnd);\n}\n\n// A collection of DOM events that occur within the editor, and callback functions\n// to invoke when the event fires.\nconst handlers = {};\nconst editHandlers = {};\nconst passiveHandlers = { touchstart: true, touchmove: true };\nclass InputState {\n    constructor() {\n        this.shiftKey = false;\n        this.mouseDown = null;\n        this.lastKeyCode = null;\n        this.lastKeyCodeTime = 0;\n        this.lastClick = { time: 0, x: 0, y: 0, type: \"\", button: 0 };\n        this.lastSelectionOrigin = null;\n        this.lastSelectionTime = 0;\n        this.lastIOSEnter = 0;\n        this.lastIOSEnterFallbackTimeout = -1;\n        this.lastFocus = 0;\n        this.lastTouch = 0;\n        this.lastChromeDelete = 0;\n        this.composing = false;\n        this.compositionNode = null;\n        this.composingTimeout = -1;\n        this.compositionNodes = [];\n        this.compositionEndedAt = -2e8;\n        this.compositionID = 1;\n        // Set to a composition ID when there are pending changes at compositionend\n        this.compositionPendingChanges = 0;\n        this.domChangeCount = 0;\n        this.eventHandlers = Object.create(null);\n        this.hideSelectionGuard = null;\n    }\n}\nfunction initInput(view) {\n    for (let event in handlers) {\n        let handler = handlers[event];\n        view.dom.addEventListener(event, view.input.eventHandlers[event] = (event) => {\n            if (eventBelongsToView(view, event) && !runCustomHandler(view, event) &&\n                (view.editable || !(event.type in editHandlers)))\n                handler(view, event);\n        }, passiveHandlers[event] ? { passive: true } : undefined);\n    }\n    // On Safari, for reasons beyond my understanding, adding an input\n    // event handler makes an issue where the composition vanishes when\n    // you press enter go away.\n    if (safari)\n        view.dom.addEventListener(\"input\", () => null);\n    ensureListeners(view);\n}\nfunction setSelectionOrigin(view, origin) {\n    view.input.lastSelectionOrigin = origin;\n    view.input.lastSelectionTime = Date.now();\n}\nfunction destroyInput(view) {\n    view.domObserver.stop();\n    for (let type in view.input.eventHandlers)\n        view.dom.removeEventListener(type, view.input.eventHandlers[type]);\n    clearTimeout(view.input.composingTimeout);\n    clearTimeout(view.input.lastIOSEnterFallbackTimeout);\n}\nfunction ensureListeners(view) {\n    view.someProp(\"handleDOMEvents\", currentHandlers => {\n        for (let type in currentHandlers)\n            if (!view.input.eventHandlers[type])\n                view.dom.addEventListener(type, view.input.eventHandlers[type] = event => runCustomHandler(view, event));\n    });\n}\nfunction runCustomHandler(view, event) {\n    return view.someProp(\"handleDOMEvents\", handlers => {\n        let handler = handlers[event.type];\n        return handler ? handler(view, event) || event.defaultPrevented : false;\n    });\n}\nfunction eventBelongsToView(view, event) {\n    if (!event.bubbles)\n        return true;\n    if (event.defaultPrevented)\n        return false;\n    for (let node = event.target; node != view.dom; node = node.parentNode)\n        if (!node || node.nodeType == 11 ||\n            (node.pmViewDesc && node.pmViewDesc.stopEvent(event)))\n            return false;\n    return true;\n}\nfunction dispatchEvent(view, event) {\n    if (!runCustomHandler(view, event) && handlers[event.type] &&\n        (view.editable || !(event.type in editHandlers)))\n        handlers[event.type](view, event);\n}\neditHandlers.keydown = (view, _event) => {\n    let event = _event;\n    view.input.shiftKey = event.keyCode == 16 || event.shiftKey;\n    if (inOrNearComposition(view, event))\n        return;\n    view.input.lastKeyCode = event.keyCode;\n    view.input.lastKeyCodeTime = Date.now();\n    // Suppress enter key events on Chrome Android, because those tend\n    // to be part of a confused sequence of composition events fired,\n    // and handling them eagerly tends to corrupt the input.\n    if (android && chrome && event.keyCode == 13)\n        return;\n    if (event.keyCode != 229)\n        view.domObserver.forceFlush();\n    // On iOS, if we preventDefault enter key presses, the virtual\n    // keyboard gets confused. So the hack here is to set a flag that\n    // makes the DOM change code recognize that what just happens should\n    // be replaced by whatever the Enter key handlers do.\n    if (ios && event.keyCode == 13 && !event.ctrlKey && !event.altKey && !event.metaKey) {\n        let now = Date.now();\n        view.input.lastIOSEnter = now;\n        view.input.lastIOSEnterFallbackTimeout = setTimeout(() => {\n            if (view.input.lastIOSEnter == now) {\n                view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")));\n                view.input.lastIOSEnter = 0;\n            }\n        }, 200);\n    }\n    else if (view.someProp(\"handleKeyDown\", f => f(view, event)) || captureKeyDown(view, event)) {\n        event.preventDefault();\n    }\n    else {\n        setSelectionOrigin(view, \"key\");\n    }\n};\neditHandlers.keyup = (view, event) => {\n    if (event.keyCode == 16)\n        view.input.shiftKey = false;\n};\neditHandlers.keypress = (view, _event) => {\n    let event = _event;\n    if (inOrNearComposition(view, event) || !event.charCode ||\n        event.ctrlKey && !event.altKey || mac && event.metaKey)\n        return;\n    if (view.someProp(\"handleKeyPress\", f => f(view, event))) {\n        event.preventDefault();\n        return;\n    }\n    let sel = view.state.selection;\n    if (!(sel instanceof TextSelection) || !sel.$from.sameParent(sel.$to)) {\n        let text = String.fromCharCode(event.charCode);\n        let deflt = () => view.state.tr.insertText(text).scrollIntoView();\n        if (!/[\\r\\n]/.test(text) && !view.someProp(\"handleTextInput\", f => f(view, sel.$from.pos, sel.$to.pos, text, deflt)))\n            view.dispatch(deflt());\n        event.preventDefault();\n    }\n};\nfunction eventCoords(event) { return { left: event.clientX, top: event.clientY }; }\nfunction isNear(event, click) {\n    let dx = click.x - event.clientX, dy = click.y - event.clientY;\n    return dx * dx + dy * dy < 100;\n}\nfunction runHandlerOnContext(view, propName, pos, inside, event) {\n    if (inside == -1)\n        return false;\n    let $pos = view.state.doc.resolve(inside);\n    for (let i = $pos.depth + 1; i > 0; i--) {\n        if (view.someProp(propName, f => i > $pos.depth ? f(view, pos, $pos.nodeAfter, $pos.before(i), event, true)\n            : f(view, pos, $pos.node(i), $pos.before(i), event, false)))\n            return true;\n    }\n    return false;\n}\nfunction updateSelection(view, selection, origin) {\n    if (!view.focused)\n        view.focus();\n    if (view.state.selection.eq(selection))\n        return;\n    let tr = view.state.tr.setSelection(selection);\n    if (origin == \"pointer\")\n        tr.setMeta(\"pointer\", true);\n    view.dispatch(tr);\n}\nfunction selectClickedLeaf(view, inside) {\n    if (inside == -1)\n        return false;\n    let $pos = view.state.doc.resolve(inside), node = $pos.nodeAfter;\n    if (node && node.isAtom && NodeSelection.isSelectable(node)) {\n        updateSelection(view, new NodeSelection($pos), \"pointer\");\n        return true;\n    }\n    return false;\n}\nfunction selectClickedNode(view, inside) {\n    if (inside == -1)\n        return false;\n    let sel = view.state.selection, selectedNode, selectAt;\n    if (sel instanceof NodeSelection)\n        selectedNode = sel.node;\n    let $pos = view.state.doc.resolve(inside);\n    for (let i = $pos.depth + 1; i > 0; i--) {\n        let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n        if (NodeSelection.isSelectable(node)) {\n            if (selectedNode && sel.$from.depth > 0 &&\n                i >= sel.$from.depth && $pos.before(sel.$from.depth + 1) == sel.$from.pos)\n                selectAt = $pos.before(sel.$from.depth);\n            else\n                selectAt = $pos.before(i);\n            break;\n        }\n    }\n    if (selectAt != null) {\n        updateSelection(view, NodeSelection.create(view.state.doc, selectAt), \"pointer\");\n        return true;\n    }\n    else {\n        return false;\n    }\n}\nfunction handleSingleClick(view, pos, inside, event, selectNode) {\n    return runHandlerOnContext(view, \"handleClickOn\", pos, inside, event) ||\n        view.someProp(\"handleClick\", f => f(view, pos, event)) ||\n        (selectNode ? selectClickedNode(view, inside) : selectClickedLeaf(view, inside));\n}\nfunction handleDoubleClick(view, pos, inside, event) {\n    return runHandlerOnContext(view, \"handleDoubleClickOn\", pos, inside, event) ||\n        view.someProp(\"handleDoubleClick\", f => f(view, pos, event));\n}\nfunction handleTripleClick(view, pos, inside, event) {\n    return runHandlerOnContext(view, \"handleTripleClickOn\", pos, inside, event) ||\n        view.someProp(\"handleTripleClick\", f => f(view, pos, event)) ||\n        defaultTripleClick(view, inside, event);\n}\nfunction defaultTripleClick(view, inside, event) {\n    if (event.button != 0)\n        return false;\n    let doc = view.state.doc;\n    if (inside == -1) {\n        if (doc.inlineContent) {\n            updateSelection(view, TextSelection.create(doc, 0, doc.content.size), \"pointer\");\n            return true;\n        }\n        return false;\n    }\n    let $pos = doc.resolve(inside);\n    for (let i = $pos.depth + 1; i > 0; i--) {\n        let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n        let nodePos = $pos.before(i);\n        if (node.inlineContent)\n            updateSelection(view, TextSelection.create(doc, nodePos + 1, nodePos + 1 + node.content.size), \"pointer\");\n        else if (NodeSelection.isSelectable(node))\n            updateSelection(view, NodeSelection.create(doc, nodePos), \"pointer\");\n        else\n            continue;\n        return true;\n    }\n}\nfunction forceDOMFlush(view) {\n    return endComposition(view);\n}\nconst selectNodeModifier = mac ? \"metaKey\" : \"ctrlKey\";\nhandlers.mousedown = (view, _event) => {\n    let event = _event;\n    view.input.shiftKey = event.shiftKey;\n    let flushed = forceDOMFlush(view);\n    let now = Date.now(), type = \"singleClick\";\n    if (now - view.input.lastClick.time < 500 && isNear(event, view.input.lastClick) && !event[selectNodeModifier] &&\n        view.input.lastClick.button == event.button) {\n        if (view.input.lastClick.type == \"singleClick\")\n            type = \"doubleClick\";\n        else if (view.input.lastClick.type == \"doubleClick\")\n            type = \"tripleClick\";\n    }\n    view.input.lastClick = { time: now, x: event.clientX, y: event.clientY, type, button: event.button };\n    let pos = view.posAtCoords(eventCoords(event));\n    if (!pos)\n        return;\n    if (type == \"singleClick\") {\n        if (view.input.mouseDown)\n            view.input.mouseDown.done();\n        view.input.mouseDown = new MouseDown(view, pos, event, !!flushed);\n    }\n    else if ((type == \"doubleClick\" ? handleDoubleClick : handleTripleClick)(view, pos.pos, pos.inside, event)) {\n        event.preventDefault();\n    }\n    else {\n        setSelectionOrigin(view, \"pointer\");\n    }\n};\nclass MouseDown {\n    constructor(view, pos, event, flushed) {\n        this.view = view;\n        this.pos = pos;\n        this.event = event;\n        this.flushed = flushed;\n        this.delayedSelectionSync = false;\n        this.mightDrag = null;\n        this.startDoc = view.state.doc;\n        this.selectNode = !!event[selectNodeModifier];\n        this.allowDefault = event.shiftKey;\n        let targetNode, targetPos;\n        if (pos.inside > -1) {\n            targetNode = view.state.doc.nodeAt(pos.inside);\n            targetPos = pos.inside;\n        }\n        else {\n            let $pos = view.state.doc.resolve(pos.pos);\n            targetNode = $pos.parent;\n            targetPos = $pos.depth ? $pos.before() : 0;\n        }\n        const target = flushed ? null : event.target;\n        const targetDesc = target ? view.docView.nearestDesc(target, true) : null;\n        this.target = targetDesc && targetDesc.dom.nodeType == 1 ? targetDesc.dom : null;\n        let { selection } = view.state;\n        if (event.button == 0 &&\n            targetNode.type.spec.draggable && targetNode.type.spec.selectable !== false ||\n            selection instanceof NodeSelection && selection.from <= targetPos && selection.to > targetPos)\n            this.mightDrag = {\n                node: targetNode,\n                pos: targetPos,\n                addAttr: !!(this.target && !this.target.draggable),\n                setUneditable: !!(this.target && gecko && !this.target.hasAttribute(\"contentEditable\"))\n            };\n        if (this.target && this.mightDrag && (this.mightDrag.addAttr || this.mightDrag.setUneditable)) {\n            this.view.domObserver.stop();\n            if (this.mightDrag.addAttr)\n                this.target.draggable = true;\n            if (this.mightDrag.setUneditable)\n                setTimeout(() => {\n                    if (this.view.input.mouseDown == this)\n                        this.target.setAttribute(\"contentEditable\", \"false\");\n                }, 20);\n            this.view.domObserver.start();\n        }\n        view.root.addEventListener(\"mouseup\", this.up = this.up.bind(this));\n        view.root.addEventListener(\"mousemove\", this.move = this.move.bind(this));\n        setSelectionOrigin(view, \"pointer\");\n    }\n    done() {\n        this.view.root.removeEventListener(\"mouseup\", this.up);\n        this.view.root.removeEventListener(\"mousemove\", this.move);\n        if (this.mightDrag && this.target) {\n            this.view.domObserver.stop();\n            if (this.mightDrag.addAttr)\n                this.target.removeAttribute(\"draggable\");\n            if (this.mightDrag.setUneditable)\n                this.target.removeAttribute(\"contentEditable\");\n            this.view.domObserver.start();\n        }\n        if (this.delayedSelectionSync)\n            setTimeout(() => selectionToDOM(this.view));\n        this.view.input.mouseDown = null;\n    }\n    up(event) {\n        this.done();\n        if (!this.view.dom.contains(event.target))\n            return;\n        let pos = this.pos;\n        if (this.view.state.doc != this.startDoc)\n            pos = this.view.posAtCoords(eventCoords(event));\n        this.updateAllowDefault(event);\n        if (this.allowDefault || !pos) {\n            setSelectionOrigin(this.view, \"pointer\");\n        }\n        else if (handleSingleClick(this.view, pos.pos, pos.inside, event, this.selectNode)) {\n            event.preventDefault();\n        }\n        else if (event.button == 0 &&\n            (this.flushed ||\n                // Safari ignores clicks on draggable elements\n                (safari && this.mightDrag && !this.mightDrag.node.isAtom) ||\n                // Chrome will sometimes treat a node selection as a\n                // cursor, but still report that the node is selected\n                // when asked through getSelection. You'll then get a\n                // situation where clicking at the point where that\n                // (hidden) cursor is doesn't change the selection, and\n                // thus doesn't get a reaction from ProseMirror. This\n                // works around that.\n                (chrome && !this.view.state.selection.visible &&\n                    Math.min(Math.abs(pos.pos - this.view.state.selection.from), Math.abs(pos.pos - this.view.state.selection.to)) <= 2))) {\n            updateSelection(this.view, Selection.near(this.view.state.doc.resolve(pos.pos)), \"pointer\");\n            event.preventDefault();\n        }\n        else {\n            setSelectionOrigin(this.view, \"pointer\");\n        }\n    }\n    move(event) {\n        this.updateAllowDefault(event);\n        setSelectionOrigin(this.view, \"pointer\");\n        if (event.buttons == 0)\n            this.done();\n    }\n    updateAllowDefault(event) {\n        if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 ||\n            Math.abs(this.event.y - event.clientY) > 4))\n            this.allowDefault = true;\n    }\n}\nhandlers.touchstart = view => {\n    view.input.lastTouch = Date.now();\n    forceDOMFlush(view);\n    setSelectionOrigin(view, \"pointer\");\n};\nhandlers.touchmove = view => {\n    view.input.lastTouch = Date.now();\n    setSelectionOrigin(view, \"pointer\");\n};\nhandlers.contextmenu = view => forceDOMFlush(view);\nfunction inOrNearComposition(view, event) {\n    if (view.composing)\n        return true;\n    // See https://www.stum.de/2016/06/24/handling-ime-events-in-javascript/.\n    // On Japanese input method editors (IMEs), the Enter key is used to confirm character\n    // selection. On Safari, when Enter is pressed, compositionend and keydown events are\n    // emitted. The keydown event triggers newline insertion, which we don't want.\n    // This method returns true if the keydown event should be ignored.\n    // We only ignore it once, as pressing Enter a second time *should* insert a newline.\n    // Furthermore, the keydown event timestamp must be close to the compositionEndedAt timestamp.\n    // This guards against the case where compositionend is triggered without the keyboard\n    // (e.g. character confirmation may be done with the mouse), and keydown is triggered\n    // afterwards- we wouldn't want to ignore the keydown event in this case.\n    if (safari && Math.abs(event.timeStamp - view.input.compositionEndedAt) < 500) {\n        view.input.compositionEndedAt = -2e8;\n        return true;\n    }\n    return false;\n}\n// Drop active composition after 5 seconds of inactivity on Android\nconst timeoutComposition = android ? 5000 : -1;\neditHandlers.compositionstart = editHandlers.compositionupdate = view => {\n    if (!view.composing) {\n        view.domObserver.flush();\n        let { state } = view, $pos = state.selection.$to;\n        if (state.selection instanceof TextSelection &&\n            (state.storedMarks ||\n                (!$pos.textOffset && $pos.parentOffset && $pos.nodeBefore.marks.some(m => m.type.spec.inclusive === false)))) {\n            // Need to wrap the cursor in mark nodes different from the ones in the DOM context\n            view.markCursor = view.state.storedMarks || $pos.marks();\n            endComposition(view, true);\n            view.markCursor = null;\n        }\n        else {\n            endComposition(view, !state.selection.empty);\n            // In firefox, if the cursor is after but outside a marked node,\n            // the inserted text won't inherit the marks. So this moves it\n            // inside if necessary.\n            if (gecko && state.selection.empty && $pos.parentOffset && !$pos.textOffset && $pos.nodeBefore.marks.length) {\n                let sel = view.domSelectionRange();\n                for (let node = sel.focusNode, offset = sel.focusOffset; node && node.nodeType == 1 && offset != 0;) {\n                    let before = offset < 0 ? node.lastChild : node.childNodes[offset - 1];\n                    if (!before)\n                        break;\n                    if (before.nodeType == 3) {\n                        let sel = view.domSelection();\n                        if (sel)\n                            sel.collapse(before, before.nodeValue.length);\n                        break;\n                    }\n                    else {\n                        node = before;\n                        offset = -1;\n                    }\n                }\n            }\n        }\n        view.input.composing = true;\n    }\n    scheduleComposeEnd(view, timeoutComposition);\n};\neditHandlers.compositionend = (view, event) => {\n    if (view.composing) {\n        view.input.composing = false;\n        view.input.compositionEndedAt = event.timeStamp;\n        view.input.compositionPendingChanges = view.domObserver.pendingRecords().length ? view.input.compositionID : 0;\n        view.input.compositionNode = null;\n        if (view.input.compositionPendingChanges)\n            Promise.resolve().then(() => view.domObserver.flush());\n        view.input.compositionID++;\n        scheduleComposeEnd(view, 20);\n    }\n};\nfunction scheduleComposeEnd(view, delay) {\n    clearTimeout(view.input.composingTimeout);\n    if (delay > -1)\n        view.input.composingTimeout = setTimeout(() => endComposition(view), delay);\n}\nfunction clearComposition(view) {\n    if (view.composing) {\n        view.input.composing = false;\n        view.input.compositionEndedAt = timestampFromCustomEvent();\n    }\n    while (view.input.compositionNodes.length > 0)\n        view.input.compositionNodes.pop().markParentsDirty();\n}\nfunction findCompositionNode(view) {\n    let sel = view.domSelectionRange();\n    if (!sel.focusNode)\n        return null;\n    let textBefore = textNodeBefore$1(sel.focusNode, sel.focusOffset);\n    let textAfter = textNodeAfter$1(sel.focusNode, sel.focusOffset);\n    if (textBefore && textAfter && textBefore != textAfter) {\n        let descAfter = textAfter.pmViewDesc, lastChanged = view.domObserver.lastChangedTextNode;\n        if (textBefore == lastChanged || textAfter == lastChanged)\n            return lastChanged;\n        if (!descAfter || !descAfter.isText(textAfter.nodeValue)) {\n            return textAfter;\n        }\n        else if (view.input.compositionNode == textAfter) {\n            let descBefore = textBefore.pmViewDesc;\n            if (!(!descBefore || !descBefore.isText(textBefore.nodeValue)))\n                return textAfter;\n        }\n    }\n    return textBefore || textAfter;\n}\nfunction timestampFromCustomEvent() {\n    let event = document.createEvent(\"Event\");\n    event.initEvent(\"event\", true, true);\n    return event.timeStamp;\n}\n/**\n@internal\n*/\nfunction endComposition(view, restarting = false) {\n    if (android && view.domObserver.flushingSoon >= 0)\n        return;\n    view.domObserver.forceFlush();\n    clearComposition(view);\n    if (restarting || view.docView && view.docView.dirty) {\n        let sel = selectionFromDOM(view), cur = view.state.selection;\n        if (sel && !sel.eq(cur))\n            view.dispatch(view.state.tr.setSelection(sel));\n        else if ((view.markCursor || restarting) && !cur.$from.node(cur.$from.sharedDepth(cur.to)).inlineContent)\n            view.dispatch(view.state.tr.deleteSelection());\n        else\n            view.updateState(view.state);\n        return true;\n    }\n    return false;\n}\nfunction captureCopy(view, dom) {\n    // The extra wrapper is somehow necessary on IE/Edge to prevent the\n    // content from being mangled when it is put onto the clipboard\n    if (!view.dom.parentNode)\n        return;\n    let wrap = view.dom.parentNode.appendChild(document.createElement(\"div\"));\n    wrap.appendChild(dom);\n    wrap.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n    let sel = getSelection(), range = document.createRange();\n    range.selectNodeContents(dom);\n    // Done because IE will fire a selectionchange moving the selection\n    // to its start when removeAllRanges is called and the editor still\n    // has focus (which will mess up the editor's selection state).\n    view.dom.blur();\n    sel.removeAllRanges();\n    sel.addRange(range);\n    setTimeout(() => {\n        if (wrap.parentNode)\n            wrap.parentNode.removeChild(wrap);\n        view.focus();\n    }, 50);\n}\n// This is very crude, but unfortunately both these browsers _pretend_\n// that they have a clipboard API—all the objects and methods are\n// there, they just don't work, and they are hard to test.\nconst brokenClipboardAPI = (ie && ie_version < 15) ||\n    (ios && webkit_version < 604);\nhandlers.copy = editHandlers.cut = (view, _event) => {\n    let event = _event;\n    let sel = view.state.selection, cut = event.type == \"cut\";\n    if (sel.empty)\n        return;\n    // IE and Edge's clipboard interface is completely broken\n    let data = brokenClipboardAPI ? null : event.clipboardData;\n    let slice = sel.content(), { dom, text } = serializeForClipboard(view, slice);\n    if (data) {\n        event.preventDefault();\n        data.clearData();\n        data.setData(\"text/html\", dom.innerHTML);\n        data.setData(\"text/plain\", text);\n    }\n    else {\n        captureCopy(view, dom);\n    }\n    if (cut)\n        view.dispatch(view.state.tr.deleteSelection().scrollIntoView().setMeta(\"uiEvent\", \"cut\"));\n};\nfunction sliceSingleNode(slice) {\n    return slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1 ? slice.content.firstChild : null;\n}\nfunction capturePaste(view, event) {\n    if (!view.dom.parentNode)\n        return;\n    let plainText = view.input.shiftKey || view.state.selection.$from.parent.type.spec.code;\n    let target = view.dom.parentNode.appendChild(document.createElement(plainText ? \"textarea\" : \"div\"));\n    if (!plainText)\n        target.contentEditable = \"true\";\n    target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n    target.focus();\n    let plain = view.input.shiftKey && view.input.lastKeyCode != 45;\n    setTimeout(() => {\n        view.focus();\n        if (target.parentNode)\n            target.parentNode.removeChild(target);\n        if (plainText)\n            doPaste(view, target.value, null, plain, event);\n        else\n            doPaste(view, target.textContent, target.innerHTML, plain, event);\n    }, 50);\n}\nfunction doPaste(view, text, html, preferPlain, event) {\n    let slice = parseFromClipboard(view, text, html, preferPlain, view.state.selection.$from);\n    if (view.someProp(\"handlePaste\", f => f(view, event, slice || Slice.empty)))\n        return true;\n    if (!slice)\n        return false;\n    let singleNode = sliceSingleNode(slice);\n    let tr = singleNode\n        ? view.state.tr.replaceSelectionWith(singleNode, preferPlain)\n        : view.state.tr.replaceSelection(slice);\n    view.dispatch(tr.scrollIntoView().setMeta(\"paste\", true).setMeta(\"uiEvent\", \"paste\"));\n    return true;\n}\nfunction getText(clipboardData) {\n    let text = clipboardData.getData(\"text/plain\") || clipboardData.getData(\"Text\");\n    if (text)\n        return text;\n    let uris = clipboardData.getData(\"text/uri-list\");\n    return uris ? uris.replace(/\\r?\\n/g, \" \") : \"\";\n}\neditHandlers.paste = (view, _event) => {\n    let event = _event;\n    // Handling paste from JavaScript during composition is very poorly\n    // handled by browsers, so as a dodgy but preferable kludge, we just\n    // let the browser do its native thing there, except on Android,\n    // where the editor is almost always composing.\n    if (view.composing && !android)\n        return;\n    let data = brokenClipboardAPI ? null : event.clipboardData;\n    let plain = view.input.shiftKey && view.input.lastKeyCode != 45;\n    if (data && doPaste(view, getText(data), data.getData(\"text/html\"), plain, event))\n        event.preventDefault();\n    else\n        capturePaste(view, event);\n};\nclass Dragging {\n    constructor(slice, move, node) {\n        this.slice = slice;\n        this.move = move;\n        this.node = node;\n    }\n}\nconst dragCopyModifier = mac ? \"altKey\" : \"ctrlKey\";\nfunction dragMoves(view, event) {\n    let moves = view.someProp(\"dragCopies\", test => !test(event));\n    return moves != null ? moves : !event[dragCopyModifier];\n}\nhandlers.dragstart = (view, _event) => {\n    let event = _event;\n    let mouseDown = view.input.mouseDown;\n    if (mouseDown)\n        mouseDown.done();\n    if (!event.dataTransfer)\n        return;\n    let sel = view.state.selection;\n    let pos = sel.empty ? null : view.posAtCoords(eventCoords(event));\n    let node;\n    if (pos && pos.pos >= sel.from && pos.pos <= (sel instanceof NodeSelection ? sel.to - 1 : sel.to)) ;\n    else if (mouseDown && mouseDown.mightDrag) {\n        node = NodeSelection.create(view.state.doc, mouseDown.mightDrag.pos);\n    }\n    else if (event.target && event.target.nodeType == 1) {\n        let desc = view.docView.nearestDesc(event.target, true);\n        if (desc && desc.node.type.spec.draggable && desc != view.docView)\n            node = NodeSelection.create(view.state.doc, desc.posBefore);\n    }\n    let draggedSlice = (node || view.state.selection).content();\n    let { dom, text, slice } = serializeForClipboard(view, draggedSlice);\n    // Pre-120 Chrome versions clear files when calling `clearData` (#1472)\n    if (!event.dataTransfer.files.length || !chrome || chrome_version > 120)\n        event.dataTransfer.clearData();\n    event.dataTransfer.setData(brokenClipboardAPI ? \"Text\" : \"text/html\", dom.innerHTML);\n    // See https://github.com/ProseMirror/prosemirror/issues/1156\n    event.dataTransfer.effectAllowed = \"copyMove\";\n    if (!brokenClipboardAPI)\n        event.dataTransfer.setData(\"text/plain\", text);\n    view.dragging = new Dragging(slice, dragMoves(view, event), node);\n};\nhandlers.dragend = view => {\n    let dragging = view.dragging;\n    window.setTimeout(() => {\n        if (view.dragging == dragging)\n            view.dragging = null;\n    }, 50);\n};\neditHandlers.dragover = editHandlers.dragenter = (_, e) => e.preventDefault();\neditHandlers.drop = (view, _event) => {\n    let event = _event;\n    let dragging = view.dragging;\n    view.dragging = null;\n    if (!event.dataTransfer)\n        return;\n    let eventPos = view.posAtCoords(eventCoords(event));\n    if (!eventPos)\n        return;\n    let $mouse = view.state.doc.resolve(eventPos.pos);\n    let slice = dragging && dragging.slice;\n    if (slice) {\n        view.someProp(\"transformPasted\", f => { slice = f(slice, view, false); });\n    }\n    else {\n        slice = parseFromClipboard(view, getText(event.dataTransfer), brokenClipboardAPI ? null : event.dataTransfer.getData(\"text/html\"), false, $mouse);\n    }\n    let move = !!(dragging && dragMoves(view, event));\n    if (view.someProp(\"handleDrop\", f => f(view, event, slice || Slice.empty, move))) {\n        event.preventDefault();\n        return;\n    }\n    if (!slice)\n        return;\n    event.preventDefault();\n    let insertPos = slice ? dropPoint(view.state.doc, $mouse.pos, slice) : $mouse.pos;\n    if (insertPos == null)\n        insertPos = $mouse.pos;\n    let tr = view.state.tr;\n    if (move) {\n        let { node } = dragging;\n        if (node)\n            node.replace(tr);\n        else\n            tr.deleteSelection();\n    }\n    let pos = tr.mapping.map(insertPos);\n    let isNode = slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1;\n    let beforeInsert = tr.doc;\n    if (isNode)\n        tr.replaceRangeWith(pos, pos, slice.content.firstChild);\n    else\n        tr.replaceRange(pos, pos, slice);\n    if (tr.doc.eq(beforeInsert))\n        return;\n    let $pos = tr.doc.resolve(pos);\n    if (isNode && NodeSelection.isSelectable(slice.content.firstChild) &&\n        $pos.nodeAfter && $pos.nodeAfter.sameMarkup(slice.content.firstChild)) {\n        tr.setSelection(new NodeSelection($pos));\n    }\n    else {\n        let end = tr.mapping.map(insertPos);\n        tr.mapping.maps[tr.mapping.maps.length - 1].forEach((_from, _to, _newFrom, newTo) => end = newTo);\n        tr.setSelection(selectionBetween(view, $pos, tr.doc.resolve(end)));\n    }\n    view.focus();\n    view.dispatch(tr.setMeta(\"uiEvent\", \"drop\"));\n};\nhandlers.focus = view => {\n    view.input.lastFocus = Date.now();\n    if (!view.focused) {\n        view.domObserver.stop();\n        view.dom.classList.add(\"ProseMirror-focused\");\n        view.domObserver.start();\n        view.focused = true;\n        setTimeout(() => {\n            if (view.docView && view.hasFocus() && !view.domObserver.currentSelection.eq(view.domSelectionRange()))\n                selectionToDOM(view);\n        }, 20);\n    }\n};\nhandlers.blur = (view, _event) => {\n    let event = _event;\n    if (view.focused) {\n        view.domObserver.stop();\n        view.dom.classList.remove(\"ProseMirror-focused\");\n        view.domObserver.start();\n        if (event.relatedTarget && view.dom.contains(event.relatedTarget))\n            view.domObserver.currentSelection.clear();\n        view.focused = false;\n    }\n};\nhandlers.beforeinput = (view, _event) => {\n    let event = _event;\n    // We should probably do more with beforeinput events, but support\n    // is so spotty that I'm still waiting to see where they are going.\n    // Very specific hack to deal with backspace sometimes failing on\n    // Chrome Android when after an uneditable node.\n    if (chrome && android && event.inputType == \"deleteContentBackward\") {\n        view.domObserver.flushSoon();\n        let { domChangeCount } = view.input;\n        setTimeout(() => {\n            if (view.input.domChangeCount != domChangeCount)\n                return; // Event already had some effect\n            // This bug tends to close the virtual keyboard, so we refocus\n            view.dom.blur();\n            view.focus();\n            if (view.someProp(\"handleKeyDown\", f => f(view, keyEvent(8, \"Backspace\"))))\n                return;\n            let { $cursor } = view.state.selection;\n            // Crude approximation of backspace behavior when no command handled it\n            if ($cursor && $cursor.pos > 0)\n                view.dispatch(view.state.tr.delete($cursor.pos - 1, $cursor.pos).scrollIntoView());\n        }, 50);\n    }\n};\n// Make sure all handlers get registered\nfor (let prop in editHandlers)\n    handlers[prop] = editHandlers[prop];\n\nfunction compareObjs(a, b) {\n    if (a == b)\n        return true;\n    for (let p in a)\n        if (a[p] !== b[p])\n            return false;\n    for (let p in b)\n        if (!(p in a))\n            return false;\n    return true;\n}\nclass WidgetType {\n    constructor(toDOM, spec) {\n        this.toDOM = toDOM;\n        this.spec = spec || noSpec;\n        this.side = this.spec.side || 0;\n    }\n    map(mapping, span, offset, oldOffset) {\n        let { pos, deleted } = mapping.mapResult(span.from + oldOffset, this.side < 0 ? -1 : 1);\n        return deleted ? null : new Decoration(pos - offset, pos - offset, this);\n    }\n    valid() { return true; }\n    eq(other) {\n        return this == other ||\n            (other instanceof WidgetType &&\n                (this.spec.key && this.spec.key == other.spec.key ||\n                    this.toDOM == other.toDOM && compareObjs(this.spec, other.spec)));\n    }\n    destroy(node) {\n        if (this.spec.destroy)\n            this.spec.destroy(node);\n    }\n}\nclass InlineType {\n    constructor(attrs, spec) {\n        this.attrs = attrs;\n        this.spec = spec || noSpec;\n    }\n    map(mapping, span, offset, oldOffset) {\n        let from = mapping.map(span.from + oldOffset, this.spec.inclusiveStart ? -1 : 1) - offset;\n        let to = mapping.map(span.to + oldOffset, this.spec.inclusiveEnd ? 1 : -1) - offset;\n        return from >= to ? null : new Decoration(from, to, this);\n    }\n    valid(_, span) { return span.from < span.to; }\n    eq(other) {\n        return this == other ||\n            (other instanceof InlineType && compareObjs(this.attrs, other.attrs) &&\n                compareObjs(this.spec, other.spec));\n    }\n    static is(span) { return span.type instanceof InlineType; }\n    destroy() { }\n}\nclass NodeType {\n    constructor(attrs, spec) {\n        this.attrs = attrs;\n        this.spec = spec || noSpec;\n    }\n    map(mapping, span, offset, oldOffset) {\n        let from = mapping.mapResult(span.from + oldOffset, 1);\n        if (from.deleted)\n            return null;\n        let to = mapping.mapResult(span.to + oldOffset, -1);\n        if (to.deleted || to.pos <= from.pos)\n            return null;\n        return new Decoration(from.pos - offset, to.pos - offset, this);\n    }\n    valid(node, span) {\n        let { index, offset } = node.content.findIndex(span.from), child;\n        return offset == span.from && !(child = node.child(index)).isText && offset + child.nodeSize == span.to;\n    }\n    eq(other) {\n        return this == other ||\n            (other instanceof NodeType && compareObjs(this.attrs, other.attrs) &&\n                compareObjs(this.spec, other.spec));\n    }\n    destroy() { }\n}\n/**\nDecoration objects can be provided to the view through the\n[`decorations` prop](https://prosemirror.net/docs/ref/#view.EditorProps.decorations). They come in\nseveral variants—see the static members of this class for details.\n*/\nclass Decoration {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The start position of the decoration.\n    */\n    from, \n    /**\n    The end position. Will be the same as `from` for [widget\n    decorations](https://prosemirror.net/docs/ref/#view.Decoration^widget).\n    */\n    to, \n    /**\n    @internal\n    */\n    type) {\n        this.from = from;\n        this.to = to;\n        this.type = type;\n    }\n    /**\n    @internal\n    */\n    copy(from, to) {\n        return new Decoration(from, to, this.type);\n    }\n    /**\n    @internal\n    */\n    eq(other, offset = 0) {\n        return this.type.eq(other.type) && this.from + offset == other.from && this.to + offset == other.to;\n    }\n    /**\n    @internal\n    */\n    map(mapping, offset, oldOffset) {\n        return this.type.map(mapping, this, offset, oldOffset);\n    }\n    /**\n    Creates a widget decoration, which is a DOM node that's shown in\n    the document at the given position. It is recommended that you\n    delay rendering the widget by passing a function that will be\n    called when the widget is actually drawn in a view, but you can\n    also directly pass a DOM node. `getPos` can be used to find the\n    widget's current document position.\n    */\n    static widget(pos, toDOM, spec) {\n        return new Decoration(pos, pos, new WidgetType(toDOM, spec));\n    }\n    /**\n    Creates an inline decoration, which adds the given attributes to\n    each inline node between `from` and `to`.\n    */\n    static inline(from, to, attrs, spec) {\n        return new Decoration(from, to, new InlineType(attrs, spec));\n    }\n    /**\n    Creates a node decoration. `from` and `to` should point precisely\n    before and after a node in the document. That node, and only that\n    node, will receive the given attributes.\n    */\n    static node(from, to, attrs, spec) {\n        return new Decoration(from, to, new NodeType(attrs, spec));\n    }\n    /**\n    The spec provided when creating this decoration. Can be useful\n    if you've stored extra information in that object.\n    */\n    get spec() { return this.type.spec; }\n    /**\n    @internal\n    */\n    get inline() { return this.type instanceof InlineType; }\n    /**\n    @internal\n    */\n    get widget() { return this.type instanceof WidgetType; }\n}\nconst none = [], noSpec = {};\n/**\nA collection of [decorations](https://prosemirror.net/docs/ref/#view.Decoration), organized in such\na way that the drawing algorithm can efficiently use and compare\nthem. This is a persistent data structure—it is not modified,\nupdates create a new value.\n*/\nclass DecorationSet {\n    /**\n    @internal\n    */\n    constructor(local, children) {\n        this.local = local.length ? local : none;\n        this.children = children.length ? children : none;\n    }\n    /**\n    Create a set of decorations, using the structure of the given\n    document. This will consume (modify) the `decorations` array, so\n    you must make a copy if you want need to preserve that.\n    */\n    static create(doc, decorations) {\n        return decorations.length ? buildTree(decorations, doc, 0, noSpec) : empty;\n    }\n    /**\n    Find all decorations in this set which touch the given range\n    (including decorations that start or end directly at the\n    boundaries) and match the given predicate on their spec. When\n    `start` and `end` are omitted, all decorations in the set are\n    considered. When `predicate` isn't given, all decorations are\n    assumed to match.\n    */\n    find(start, end, predicate) {\n        let result = [];\n        this.findInner(start == null ? 0 : start, end == null ? 1e9 : end, result, 0, predicate);\n        return result;\n    }\n    findInner(start, end, result, offset, predicate) {\n        for (let i = 0; i < this.local.length; i++) {\n            let span = this.local[i];\n            if (span.from <= end && span.to >= start && (!predicate || predicate(span.spec)))\n                result.push(span.copy(span.from + offset, span.to + offset));\n        }\n        for (let i = 0; i < this.children.length; i += 3) {\n            if (this.children[i] < end && this.children[i + 1] > start) {\n                let childOff = this.children[i] + 1;\n                this.children[i + 2].findInner(start - childOff, end - childOff, result, offset + childOff, predicate);\n            }\n        }\n    }\n    /**\n    Map the set of decorations in response to a change in the\n    document.\n    */\n    map(mapping, doc, options) {\n        if (this == empty || mapping.maps.length == 0)\n            return this;\n        return this.mapInner(mapping, doc, 0, 0, options || noSpec);\n    }\n    /**\n    @internal\n    */\n    mapInner(mapping, node, offset, oldOffset, options) {\n        let newLocal;\n        for (let i = 0; i < this.local.length; i++) {\n            let mapped = this.local[i].map(mapping, offset, oldOffset);\n            if (mapped && mapped.type.valid(node, mapped))\n                (newLocal || (newLocal = [])).push(mapped);\n            else if (options.onRemove)\n                options.onRemove(this.local[i].spec);\n        }\n        if (this.children.length)\n            return mapChildren(this.children, newLocal || [], mapping, node, offset, oldOffset, options);\n        else\n            return newLocal ? new DecorationSet(newLocal.sort(byPos), none) : empty;\n    }\n    /**\n    Add the given array of decorations to the ones in the set,\n    producing a new set. Consumes the `decorations` array. Needs\n    access to the current document to create the appropriate tree\n    structure.\n    */\n    add(doc, decorations) {\n        if (!decorations.length)\n            return this;\n        if (this == empty)\n            return DecorationSet.create(doc, decorations);\n        return this.addInner(doc, decorations, 0);\n    }\n    addInner(doc, decorations, offset) {\n        let children, childIndex = 0;\n        doc.forEach((childNode, childOffset) => {\n            let baseOffset = childOffset + offset, found;\n            if (!(found = takeSpansForNode(decorations, childNode, baseOffset)))\n                return;\n            if (!children)\n                children = this.children.slice();\n            while (childIndex < children.length && children[childIndex] < childOffset)\n                childIndex += 3;\n            if (children[childIndex] == childOffset)\n                children[childIndex + 2] = children[childIndex + 2].addInner(childNode, found, baseOffset + 1);\n            else\n                children.splice(childIndex, 0, childOffset, childOffset + childNode.nodeSize, buildTree(found, childNode, baseOffset + 1, noSpec));\n            childIndex += 3;\n        });\n        let local = moveSpans(childIndex ? withoutNulls(decorations) : decorations, -offset);\n        for (let i = 0; i < local.length; i++)\n            if (!local[i].type.valid(doc, local[i]))\n                local.splice(i--, 1);\n        return new DecorationSet(local.length ? this.local.concat(local).sort(byPos) : this.local, children || this.children);\n    }\n    /**\n    Create a new set that contains the decorations in this set, minus\n    the ones in the given array.\n    */\n    remove(decorations) {\n        if (decorations.length == 0 || this == empty)\n            return this;\n        return this.removeInner(decorations, 0);\n    }\n    removeInner(decorations, offset) {\n        let children = this.children, local = this.local;\n        for (let i = 0; i < children.length; i += 3) {\n            let found;\n            let from = children[i] + offset, to = children[i + 1] + offset;\n            for (let j = 0, span; j < decorations.length; j++)\n                if (span = decorations[j]) {\n                    if (span.from > from && span.to < to) {\n                        decorations[j] = null;\n                        (found || (found = [])).push(span);\n                    }\n                }\n            if (!found)\n                continue;\n            if (children == this.children)\n                children = this.children.slice();\n            let removed = children[i + 2].removeInner(found, from + 1);\n            if (removed != empty) {\n                children[i + 2] = removed;\n            }\n            else {\n                children.splice(i, 3);\n                i -= 3;\n            }\n        }\n        if (local.length)\n            for (let i = 0, span; i < decorations.length; i++)\n                if (span = decorations[i]) {\n                    for (let j = 0; j < local.length; j++)\n                        if (local[j].eq(span, offset)) {\n                            if (local == this.local)\n                                local = this.local.slice();\n                            local.splice(j--, 1);\n                        }\n                }\n        if (children == this.children && local == this.local)\n            return this;\n        return local.length || children.length ? new DecorationSet(local, children) : empty;\n    }\n    forChild(offset, node) {\n        if (this == empty)\n            return this;\n        if (node.isLeaf)\n            return DecorationSet.empty;\n        let child, local;\n        for (let i = 0; i < this.children.length; i += 3)\n            if (this.children[i] >= offset) {\n                if (this.children[i] == offset)\n                    child = this.children[i + 2];\n                break;\n            }\n        let start = offset + 1, end = start + node.content.size;\n        for (let i = 0; i < this.local.length; i++) {\n            let dec = this.local[i];\n            if (dec.from < end && dec.to > start && (dec.type instanceof InlineType)) {\n                let from = Math.max(start, dec.from) - start, to = Math.min(end, dec.to) - start;\n                if (from < to)\n                    (local || (local = [])).push(dec.copy(from, to));\n            }\n        }\n        if (local) {\n            let localSet = new DecorationSet(local.sort(byPos), none);\n            return child ? new DecorationGroup([localSet, child]) : localSet;\n        }\n        return child || empty;\n    }\n    /**\n    @internal\n    */\n    eq(other) {\n        if (this == other)\n            return true;\n        if (!(other instanceof DecorationSet) ||\n            this.local.length != other.local.length ||\n            this.children.length != other.children.length)\n            return false;\n        for (let i = 0; i < this.local.length; i++)\n            if (!this.local[i].eq(other.local[i]))\n                return false;\n        for (let i = 0; i < this.children.length; i += 3)\n            if (this.children[i] != other.children[i] ||\n                this.children[i + 1] != other.children[i + 1] ||\n                !this.children[i + 2].eq(other.children[i + 2]))\n                return false;\n        return true;\n    }\n    /**\n    @internal\n    */\n    locals(node) {\n        return removeOverlap(this.localsInner(node));\n    }\n    /**\n    @internal\n    */\n    localsInner(node) {\n        if (this == empty)\n            return none;\n        if (node.inlineContent || !this.local.some(InlineType.is))\n            return this.local;\n        let result = [];\n        for (let i = 0; i < this.local.length; i++) {\n            if (!(this.local[i].type instanceof InlineType))\n                result.push(this.local[i]);\n        }\n        return result;\n    }\n    forEachSet(f) { f(this); }\n}\n/**\nThe empty set of decorations.\n*/\nDecorationSet.empty = new DecorationSet([], []);\n/**\n@internal\n*/\nDecorationSet.removeOverlap = removeOverlap;\nconst empty = DecorationSet.empty;\n// An abstraction that allows the code dealing with decorations to\n// treat multiple DecorationSet objects as if it were a single object\n// with (a subset of) the same interface.\nclass DecorationGroup {\n    constructor(members) {\n        this.members = members;\n    }\n    map(mapping, doc) {\n        const mappedDecos = this.members.map(member => member.map(mapping, doc, noSpec));\n        return DecorationGroup.from(mappedDecos);\n    }\n    forChild(offset, child) {\n        if (child.isLeaf)\n            return DecorationSet.empty;\n        let found = [];\n        for (let i = 0; i < this.members.length; i++) {\n            let result = this.members[i].forChild(offset, child);\n            if (result == empty)\n                continue;\n            if (result instanceof DecorationGroup)\n                found = found.concat(result.members);\n            else\n                found.push(result);\n        }\n        return DecorationGroup.from(found);\n    }\n    eq(other) {\n        if (!(other instanceof DecorationGroup) ||\n            other.members.length != this.members.length)\n            return false;\n        for (let i = 0; i < this.members.length; i++)\n            if (!this.members[i].eq(other.members[i]))\n                return false;\n        return true;\n    }\n    locals(node) {\n        let result, sorted = true;\n        for (let i = 0; i < this.members.length; i++) {\n            let locals = this.members[i].localsInner(node);\n            if (!locals.length)\n                continue;\n            if (!result) {\n                result = locals;\n            }\n            else {\n                if (sorted) {\n                    result = result.slice();\n                    sorted = false;\n                }\n                for (let j = 0; j < locals.length; j++)\n                    result.push(locals[j]);\n            }\n        }\n        return result ? removeOverlap(sorted ? result : result.sort(byPos)) : none;\n    }\n    // Create a group for the given array of decoration sets, or return\n    // a single set when possible.\n    static from(members) {\n        switch (members.length) {\n            case 0: return empty;\n            case 1: return members[0];\n            default: return new DecorationGroup(members.every(m => m instanceof DecorationSet) ? members :\n                members.reduce((r, m) => r.concat(m instanceof DecorationSet ? m : m.members), []));\n        }\n    }\n    forEachSet(f) {\n        for (let i = 0; i < this.members.length; i++)\n            this.members[i].forEachSet(f);\n    }\n}\nfunction mapChildren(oldChildren, newLocal, mapping, node, offset, oldOffset, options) {\n    let children = oldChildren.slice();\n    // Mark the children that are directly touched by changes, and\n    // move those that are after the changes.\n    for (let i = 0, baseOffset = oldOffset; i < mapping.maps.length; i++) {\n        let moved = 0;\n        mapping.maps[i].forEach((oldStart, oldEnd, newStart, newEnd) => {\n            let dSize = (newEnd - newStart) - (oldEnd - oldStart);\n            for (let i = 0; i < children.length; i += 3) {\n                let end = children[i + 1];\n                if (end < 0 || oldStart > end + baseOffset - moved)\n                    continue;\n                let start = children[i] + baseOffset - moved;\n                if (oldEnd >= start) {\n                    children[i + 1] = oldStart <= start ? -2 : -1;\n                }\n                else if (oldStart >= baseOffset && dSize) {\n                    children[i] += dSize;\n                    children[i + 1] += dSize;\n                }\n            }\n            moved += dSize;\n        });\n        baseOffset = mapping.maps[i].map(baseOffset, -1);\n    }\n    // Find the child nodes that still correspond to a single node,\n    // recursively call mapInner on them and update their positions.\n    let mustRebuild = false;\n    for (let i = 0; i < children.length; i += 3)\n        if (children[i + 1] < 0) { // Touched nodes\n            if (children[i + 1] == -2) {\n                mustRebuild = true;\n                children[i + 1] = -1;\n                continue;\n            }\n            let from = mapping.map(oldChildren[i] + oldOffset), fromLocal = from - offset;\n            if (fromLocal < 0 || fromLocal >= node.content.size) {\n                mustRebuild = true;\n                continue;\n            }\n            // Must read oldChildren because children was tagged with -1\n            let to = mapping.map(oldChildren[i + 1] + oldOffset, -1), toLocal = to - offset;\n            let { index, offset: childOffset } = node.content.findIndex(fromLocal);\n            let childNode = node.maybeChild(index);\n            if (childNode && childOffset == fromLocal && childOffset + childNode.nodeSize == toLocal) {\n                let mapped = children[i + 2]\n                    .mapInner(mapping, childNode, from + 1, oldChildren[i] + oldOffset + 1, options);\n                if (mapped != empty) {\n                    children[i] = fromLocal;\n                    children[i + 1] = toLocal;\n                    children[i + 2] = mapped;\n                }\n                else {\n                    children[i + 1] = -2;\n                    mustRebuild = true;\n                }\n            }\n            else {\n                mustRebuild = true;\n            }\n        }\n    // Remaining children must be collected and rebuilt into the appropriate structure\n    if (mustRebuild) {\n        let decorations = mapAndGatherRemainingDecorations(children, oldChildren, newLocal, mapping, offset, oldOffset, options);\n        let built = buildTree(decorations, node, 0, options);\n        newLocal = built.local;\n        for (let i = 0; i < children.length; i += 3)\n            if (children[i + 1] < 0) {\n                children.splice(i, 3);\n                i -= 3;\n            }\n        for (let i = 0, j = 0; i < built.children.length; i += 3) {\n            let from = built.children[i];\n            while (j < children.length && children[j] < from)\n                j += 3;\n            children.splice(j, 0, built.children[i], built.children[i + 1], built.children[i + 2]);\n        }\n    }\n    return new DecorationSet(newLocal.sort(byPos), children);\n}\nfunction moveSpans(spans, offset) {\n    if (!offset || !spans.length)\n        return spans;\n    let result = [];\n    for (let i = 0; i < spans.length; i++) {\n        let span = spans[i];\n        result.push(new Decoration(span.from + offset, span.to + offset, span.type));\n    }\n    return result;\n}\nfunction mapAndGatherRemainingDecorations(children, oldChildren, decorations, mapping, offset, oldOffset, options) {\n    // Gather all decorations from the remaining marked children\n    function gather(set, oldOffset) {\n        for (let i = 0; i < set.local.length; i++) {\n            let mapped = set.local[i].map(mapping, offset, oldOffset);\n            if (mapped)\n                decorations.push(mapped);\n            else if (options.onRemove)\n                options.onRemove(set.local[i].spec);\n        }\n        for (let i = 0; i < set.children.length; i += 3)\n            gather(set.children[i + 2], set.children[i] + oldOffset + 1);\n    }\n    for (let i = 0; i < children.length; i += 3)\n        if (children[i + 1] == -1)\n            gather(children[i + 2], oldChildren[i] + oldOffset + 1);\n    return decorations;\n}\nfunction takeSpansForNode(spans, node, offset) {\n    if (node.isLeaf)\n        return null;\n    let end = offset + node.nodeSize, found = null;\n    for (let i = 0, span; i < spans.length; i++) {\n        if ((span = spans[i]) && span.from > offset && span.to < end) {\n            (found || (found = [])).push(span);\n            spans[i] = null;\n        }\n    }\n    return found;\n}\nfunction withoutNulls(array) {\n    let result = [];\n    for (let i = 0; i < array.length; i++)\n        if (array[i] != null)\n            result.push(array[i]);\n    return result;\n}\n// Build up a tree that corresponds to a set of decorations. `offset`\n// is a base offset that should be subtracted from the `from` and `to`\n// positions in the spans (so that we don't have to allocate new spans\n// for recursive calls).\nfunction buildTree(spans, node, offset, options) {\n    let children = [], hasNulls = false;\n    node.forEach((childNode, localStart) => {\n        let found = takeSpansForNode(spans, childNode, localStart + offset);\n        if (found) {\n            hasNulls = true;\n            let subtree = buildTree(found, childNode, offset + localStart + 1, options);\n            if (subtree != empty)\n                children.push(localStart, localStart + childNode.nodeSize, subtree);\n        }\n    });\n    let locals = moveSpans(hasNulls ? withoutNulls(spans) : spans, -offset).sort(byPos);\n    for (let i = 0; i < locals.length; i++)\n        if (!locals[i].type.valid(node, locals[i])) {\n            if (options.onRemove)\n                options.onRemove(locals[i].spec);\n            locals.splice(i--, 1);\n        }\n    return locals.length || children.length ? new DecorationSet(locals, children) : empty;\n}\n// Used to sort decorations so that ones with a low start position\n// come first, and within a set with the same start position, those\n// with an smaller end position come first.\nfunction byPos(a, b) {\n    return a.from - b.from || a.to - b.to;\n}\n// Scan a sorted array of decorations for partially overlapping spans,\n// and split those so that only fully overlapping spans are left (to\n// make subsequent rendering easier). Will return the input array if\n// no partially overlapping spans are found (the common case).\nfunction removeOverlap(spans) {\n    let working = spans;\n    for (let i = 0; i < working.length - 1; i++) {\n        let span = working[i];\n        if (span.from != span.to)\n            for (let j = i + 1; j < working.length; j++) {\n                let next = working[j];\n                if (next.from == span.from) {\n                    if (next.to != span.to) {\n                        if (working == spans)\n                            working = spans.slice();\n                        // Followed by a partially overlapping larger span. Split that\n                        // span.\n                        working[j] = next.copy(next.from, span.to);\n                        insertAhead(working, j + 1, next.copy(span.to, next.to));\n                    }\n                    continue;\n                }\n                else {\n                    if (next.from < span.to) {\n                        if (working == spans)\n                            working = spans.slice();\n                        // The end of this one overlaps with a subsequent span. Split\n                        // this one.\n                        working[i] = span.copy(span.from, next.from);\n                        insertAhead(working, j, span.copy(next.from, span.to));\n                    }\n                    break;\n                }\n            }\n    }\n    return working;\n}\nfunction insertAhead(array, i, deco) {\n    while (i < array.length && byPos(deco, array[i]) > 0)\n        i++;\n    array.splice(i, 0, deco);\n}\n// Get the decorations associated with the current props of a view.\nfunction viewDecorations(view) {\n    let found = [];\n    view.someProp(\"decorations\", f => {\n        let result = f(view.state);\n        if (result && result != empty)\n            found.push(result);\n    });\n    if (view.cursorWrapper)\n        found.push(DecorationSet.create(view.state.doc, [view.cursorWrapper.deco]));\n    return DecorationGroup.from(found);\n}\n\nconst observeOptions = {\n    childList: true,\n    characterData: true,\n    characterDataOldValue: true,\n    attributes: true,\n    attributeOldValue: true,\n    subtree: true\n};\n// IE11 has very broken mutation observers, so we also listen to DOMCharacterDataModified\nconst useCharData = ie && ie_version <= 11;\nclass SelectionState {\n    constructor() {\n        this.anchorNode = null;\n        this.anchorOffset = 0;\n        this.focusNode = null;\n        this.focusOffset = 0;\n    }\n    set(sel) {\n        this.anchorNode = sel.anchorNode;\n        this.anchorOffset = sel.anchorOffset;\n        this.focusNode = sel.focusNode;\n        this.focusOffset = sel.focusOffset;\n    }\n    clear() {\n        this.anchorNode = this.focusNode = null;\n    }\n    eq(sel) {\n        return sel.anchorNode == this.anchorNode && sel.anchorOffset == this.anchorOffset &&\n            sel.focusNode == this.focusNode && sel.focusOffset == this.focusOffset;\n    }\n}\nclass DOMObserver {\n    constructor(view, handleDOMChange) {\n        this.view = view;\n        this.handleDOMChange = handleDOMChange;\n        this.queue = [];\n        this.flushingSoon = -1;\n        this.observer = null;\n        this.currentSelection = new SelectionState;\n        this.onCharData = null;\n        this.suppressingSelectionUpdates = false;\n        this.lastChangedTextNode = null;\n        this.observer = window.MutationObserver &&\n            new window.MutationObserver(mutations => {\n                for (let i = 0; i < mutations.length; i++)\n                    this.queue.push(mutations[i]);\n                // IE11 will sometimes (on backspacing out a single character\n                // text node after a BR node) call the observer callback\n                // before actually updating the DOM, which will cause\n                // ProseMirror to miss the change (see #930)\n                if (ie && ie_version <= 11 && mutations.some(m => m.type == \"childList\" && m.removedNodes.length ||\n                    m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length))\n                    this.flushSoon();\n                else\n                    this.flush();\n            });\n        if (useCharData) {\n            this.onCharData = e => {\n                this.queue.push({ target: e.target, type: \"characterData\", oldValue: e.prevValue });\n                this.flushSoon();\n            };\n        }\n        this.onSelectionChange = this.onSelectionChange.bind(this);\n    }\n    flushSoon() {\n        if (this.flushingSoon < 0)\n            this.flushingSoon = window.setTimeout(() => { this.flushingSoon = -1; this.flush(); }, 20);\n    }\n    forceFlush() {\n        if (this.flushingSoon > -1) {\n            window.clearTimeout(this.flushingSoon);\n            this.flushingSoon = -1;\n            this.flush();\n        }\n    }\n    start() {\n        if (this.observer) {\n            this.observer.takeRecords();\n            this.observer.observe(this.view.dom, observeOptions);\n        }\n        if (this.onCharData)\n            this.view.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData);\n        this.connectSelection();\n    }\n    stop() {\n        if (this.observer) {\n            let take = this.observer.takeRecords();\n            if (take.length) {\n                for (let i = 0; i < take.length; i++)\n                    this.queue.push(take[i]);\n                window.setTimeout(() => this.flush(), 20);\n            }\n            this.observer.disconnect();\n        }\n        if (this.onCharData)\n            this.view.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData);\n        this.disconnectSelection();\n    }\n    connectSelection() {\n        this.view.dom.ownerDocument.addEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n    disconnectSelection() {\n        this.view.dom.ownerDocument.removeEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n    suppressSelectionUpdates() {\n        this.suppressingSelectionUpdates = true;\n        setTimeout(() => this.suppressingSelectionUpdates = false, 50);\n    }\n    onSelectionChange() {\n        if (!hasFocusAndSelection(this.view))\n            return;\n        if (this.suppressingSelectionUpdates)\n            return selectionToDOM(this.view);\n        // Deletions on IE11 fire their events in the wrong order, giving\n        // us a selection change event before the DOM changes are\n        // reported.\n        if (ie && ie_version <= 11 && !this.view.state.selection.empty) {\n            let sel = this.view.domSelectionRange();\n            // Selection.isCollapsed isn't reliable on IE\n            if (sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset))\n                return this.flushSoon();\n        }\n        this.flush();\n    }\n    setCurSelection() {\n        this.currentSelection.set(this.view.domSelectionRange());\n    }\n    ignoreSelectionChange(sel) {\n        if (!sel.focusNode)\n            return true;\n        let ancestors = new Set, container;\n        for (let scan = sel.focusNode; scan; scan = parentNode(scan))\n            ancestors.add(scan);\n        for (let scan = sel.anchorNode; scan; scan = parentNode(scan))\n            if (ancestors.has(scan)) {\n                container = scan;\n                break;\n            }\n        let desc = container && this.view.docView.nearestDesc(container);\n        if (desc && desc.ignoreMutation({\n            type: \"selection\",\n            target: container.nodeType == 3 ? container.parentNode : container\n        })) {\n            this.setCurSelection();\n            return true;\n        }\n    }\n    pendingRecords() {\n        if (this.observer)\n            for (let mut of this.observer.takeRecords())\n                this.queue.push(mut);\n        return this.queue;\n    }\n    flush() {\n        let { view } = this;\n        if (!view.docView || this.flushingSoon > -1)\n            return;\n        let mutations = this.pendingRecords();\n        if (mutations.length)\n            this.queue = [];\n        let sel = view.domSelectionRange();\n        let newSel = !this.suppressingSelectionUpdates && !this.currentSelection.eq(sel) && hasFocusAndSelection(view) && !this.ignoreSelectionChange(sel);\n        let from = -1, to = -1, typeOver = false, added = [];\n        if (view.editable) {\n            for (let i = 0; i < mutations.length; i++) {\n                let result = this.registerMutation(mutations[i], added);\n                if (result) {\n                    from = from < 0 ? result.from : Math.min(result.from, from);\n                    to = to < 0 ? result.to : Math.max(result.to, to);\n                    if (result.typeOver)\n                        typeOver = true;\n                }\n            }\n        }\n        if (gecko && added.length) {\n            let brs = added.filter(n => n.nodeName == \"BR\");\n            if (brs.length == 2) {\n                let [a, b] = brs;\n                if (a.parentNode && a.parentNode.parentNode == b.parentNode)\n                    b.remove();\n                else\n                    a.remove();\n            }\n            else {\n                let { focusNode } = this.currentSelection;\n                for (let br of brs) {\n                    let parent = br.parentNode;\n                    if (parent && parent.nodeName == \"LI\" && (!focusNode || blockParent(view, focusNode) != parent))\n                        br.remove();\n                }\n            }\n        }\n        let readSel = null;\n        // If it looks like the browser has reset the selection to the\n        // start of the document after focus, restore the selection from\n        // the state\n        if (from < 0 && newSel && view.input.lastFocus > Date.now() - 200 &&\n            Math.max(view.input.lastTouch, view.input.lastClick.time) < Date.now() - 300 &&\n            selectionCollapsed(sel) && (readSel = selectionFromDOM(view)) &&\n            readSel.eq(Selection.near(view.state.doc.resolve(0), 1))) {\n            view.input.lastFocus = 0;\n            selectionToDOM(view);\n            this.currentSelection.set(sel);\n            view.scrollToSelection();\n        }\n        else if (from > -1 || newSel) {\n            if (from > -1) {\n                view.docView.markDirty(from, to);\n                checkCSS(view);\n            }\n            this.handleDOMChange(from, to, typeOver, added);\n            if (view.docView && view.docView.dirty)\n                view.updateState(view.state);\n            else if (!this.currentSelection.eq(sel))\n                selectionToDOM(view);\n            this.currentSelection.set(sel);\n        }\n    }\n    registerMutation(mut, added) {\n        // Ignore mutations inside nodes that were already noted as inserted\n        if (added.indexOf(mut.target) > -1)\n            return null;\n        let desc = this.view.docView.nearestDesc(mut.target);\n        if (mut.type == \"attributes\" &&\n            (desc == this.view.docView || mut.attributeName == \"contenteditable\" ||\n                // Firefox sometimes fires spurious events for null/empty styles\n                (mut.attributeName == \"style\" && !mut.oldValue && !mut.target.getAttribute(\"style\"))))\n            return null;\n        if (!desc || desc.ignoreMutation(mut))\n            return null;\n        if (mut.type == \"childList\") {\n            for (let i = 0; i < mut.addedNodes.length; i++) {\n                let node = mut.addedNodes[i];\n                added.push(node);\n                if (node.nodeType == 3)\n                    this.lastChangedTextNode = node;\n            }\n            if (desc.contentDOM && desc.contentDOM != desc.dom && !desc.contentDOM.contains(mut.target))\n                return { from: desc.posBefore, to: desc.posAfter };\n            let prev = mut.previousSibling, next = mut.nextSibling;\n            if (ie && ie_version <= 11 && mut.addedNodes.length) {\n                // IE11 gives us incorrect next/prev siblings for some\n                // insertions, so if there are added nodes, recompute those\n                for (let i = 0; i < mut.addedNodes.length; i++) {\n                    let { previousSibling, nextSibling } = mut.addedNodes[i];\n                    if (!previousSibling || Array.prototype.indexOf.call(mut.addedNodes, previousSibling) < 0)\n                        prev = previousSibling;\n                    if (!nextSibling || Array.prototype.indexOf.call(mut.addedNodes, nextSibling) < 0)\n                        next = nextSibling;\n                }\n            }\n            let fromOffset = prev && prev.parentNode == mut.target\n                ? domIndex(prev) + 1 : 0;\n            let from = desc.localPosFromDOM(mut.target, fromOffset, -1);\n            let toOffset = next && next.parentNode == mut.target\n                ? domIndex(next) : mut.target.childNodes.length;\n            let to = desc.localPosFromDOM(mut.target, toOffset, 1);\n            return { from, to };\n        }\n        else if (mut.type == \"attributes\") {\n            return { from: desc.posAtStart - desc.border, to: desc.posAtEnd + desc.border };\n        }\n        else { // \"characterData\"\n            this.lastChangedTextNode = mut.target;\n            return {\n                from: desc.posAtStart,\n                to: desc.posAtEnd,\n                // An event was generated for a text change that didn't change\n                // any text. Mark the dom change to fall back to assuming the\n                // selection was typed over with an identical value if it can't\n                // find another change.\n                typeOver: mut.target.nodeValue == mut.oldValue\n            };\n        }\n    }\n}\nlet cssChecked = new WeakMap();\nlet cssCheckWarned = false;\nfunction checkCSS(view) {\n    if (cssChecked.has(view))\n        return;\n    cssChecked.set(view, null);\n    if (['normal', 'nowrap', 'pre-line'].indexOf(getComputedStyle(view.dom).whiteSpace) !== -1) {\n        view.requiresGeckoHackNode = gecko;\n        if (cssCheckWarned)\n            return;\n        console[\"warn\"](\"ProseMirror expects the CSS white-space property to be set, preferably to 'pre-wrap'. It is recommended to load style/prosemirror.css from the prosemirror-view package.\");\n        cssCheckWarned = true;\n    }\n}\nfunction rangeToSelectionRange(view, range) {\n    let anchorNode = range.startContainer, anchorOffset = range.startOffset;\n    let focusNode = range.endContainer, focusOffset = range.endOffset;\n    let currentAnchor = view.domAtPos(view.state.selection.anchor);\n    // Since such a range doesn't distinguish between anchor and head,\n    // use a heuristic that flips it around if its end matches the\n    // current anchor.\n    if (isEquivalentPosition(currentAnchor.node, currentAnchor.offset, focusNode, focusOffset))\n        [anchorNode, anchorOffset, focusNode, focusOffset] = [focusNode, focusOffset, anchorNode, anchorOffset];\n    return { anchorNode, anchorOffset, focusNode, focusOffset };\n}\n// Used to work around a Safari Selection/shadow DOM bug\n// Based on https://github.com/codemirror/dev/issues/414 fix\nfunction safariShadowSelectionRange(view, selection) {\n    if (selection.getComposedRanges) {\n        let range = selection.getComposedRanges(view.root)[0];\n        if (range)\n            return rangeToSelectionRange(view, range);\n    }\n    let found;\n    function read(event) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        found = event.getTargetRanges()[0];\n    }\n    // Because Safari (at least in 2018-2022) doesn't provide regular\n    // access to the selection inside a shadowRoot, we have to perform a\n    // ridiculous hack to get at it—using `execCommand` to trigger a\n    // `beforeInput` event so that we can read the target range from the\n    // event.\n    view.dom.addEventListener(\"beforeinput\", read, true);\n    document.execCommand(\"indent\");\n    view.dom.removeEventListener(\"beforeinput\", read, true);\n    return found ? rangeToSelectionRange(view, found) : null;\n}\nfunction blockParent(view, node) {\n    for (let p = node.parentNode; p && p != view.dom; p = p.parentNode) {\n        let desc = view.docView.nearestDesc(p, true);\n        if (desc && desc.node.isBlock)\n            return p;\n    }\n    return null;\n}\n\n// Note that all referencing and parsing is done with the\n// start-of-operation selection and document, since that's the one\n// that the DOM represents. If any changes came in in the meantime,\n// the modification is mapped over those before it is applied, in\n// readDOMChange.\nfunction parseBetween(view, from_, to_) {\n    let { node: parent, fromOffset, toOffset, from, to } = view.docView.parseRange(from_, to_);\n    let domSel = view.domSelectionRange();\n    let find;\n    let anchor = domSel.anchorNode;\n    if (anchor && view.dom.contains(anchor.nodeType == 1 ? anchor : anchor.parentNode)) {\n        find = [{ node: anchor, offset: domSel.anchorOffset }];\n        if (!selectionCollapsed(domSel))\n            find.push({ node: domSel.focusNode, offset: domSel.focusOffset });\n    }\n    // Work around issue in Chrome where backspacing sometimes replaces\n    // the deleted content with a random BR node (issues #799, #831)\n    if (chrome && view.input.lastKeyCode === 8) {\n        for (let off = toOffset; off > fromOffset; off--) {\n            let node = parent.childNodes[off - 1], desc = node.pmViewDesc;\n            if (node.nodeName == \"BR\" && !desc) {\n                toOffset = off;\n                break;\n            }\n            if (!desc || desc.size)\n                break;\n        }\n    }\n    let startDoc = view.state.doc;\n    let parser = view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema);\n    let $from = startDoc.resolve(from);\n    let sel = null, doc = parser.parse(parent, {\n        topNode: $from.parent,\n        topMatch: $from.parent.contentMatchAt($from.index()),\n        topOpen: true,\n        from: fromOffset,\n        to: toOffset,\n        preserveWhitespace: $from.parent.type.whitespace == \"pre\" ? \"full\" : true,\n        findPositions: find,\n        ruleFromNode,\n        context: $from\n    });\n    if (find && find[0].pos != null) {\n        let anchor = find[0].pos, head = find[1] && find[1].pos;\n        if (head == null)\n            head = anchor;\n        sel = { anchor: anchor + from, head: head + from };\n    }\n    return { doc, sel, from, to };\n}\nfunction ruleFromNode(dom) {\n    let desc = dom.pmViewDesc;\n    if (desc) {\n        return desc.parseRule();\n    }\n    else if (dom.nodeName == \"BR\" && dom.parentNode) {\n        // Safari replaces the list item or table cell with a BR\n        // directly in the list node (?!) if you delete the last\n        // character in a list item or table cell (#708, #862)\n        if (safari && /^(ul|ol)$/i.test(dom.parentNode.nodeName)) {\n            let skip = document.createElement(\"div\");\n            skip.appendChild(document.createElement(\"li\"));\n            return { skip };\n        }\n        else if (dom.parentNode.lastChild == dom || safari && /^(tr|table)$/i.test(dom.parentNode.nodeName)) {\n            return { ignore: true };\n        }\n    }\n    else if (dom.nodeName == \"IMG\" && dom.getAttribute(\"mark-placeholder\")) {\n        return { ignore: true };\n    }\n    return null;\n}\nconst isInline = /^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|img|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i;\nfunction readDOMChange(view, from, to, typeOver, addedNodes) {\n    let compositionID = view.input.compositionPendingChanges || (view.composing ? view.input.compositionID : 0);\n    view.input.compositionPendingChanges = 0;\n    if (from < 0) {\n        let origin = view.input.lastSelectionTime > Date.now() - 50 ? view.input.lastSelectionOrigin : null;\n        let newSel = selectionFromDOM(view, origin);\n        if (newSel && !view.state.selection.eq(newSel)) {\n            if (chrome && android &&\n                view.input.lastKeyCode === 13 && Date.now() - 100 < view.input.lastKeyCodeTime &&\n                view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\"))))\n                return;\n            let tr = view.state.tr.setSelection(newSel);\n            if (origin == \"pointer\")\n                tr.setMeta(\"pointer\", true);\n            else if (origin == \"key\")\n                tr.scrollIntoView();\n            if (compositionID)\n                tr.setMeta(\"composition\", compositionID);\n            view.dispatch(tr);\n        }\n        return;\n    }\n    let $before = view.state.doc.resolve(from);\n    let shared = $before.sharedDepth(to);\n    from = $before.before(shared + 1);\n    to = view.state.doc.resolve(to).after(shared + 1);\n    let sel = view.state.selection;\n    let parse = parseBetween(view, from, to);\n    let doc = view.state.doc, compare = doc.slice(parse.from, parse.to);\n    let preferredPos, preferredSide;\n    // Prefer anchoring to end when Backspace is pressed\n    if (view.input.lastKeyCode === 8 && Date.now() - 100 < view.input.lastKeyCodeTime) {\n        preferredPos = view.state.selection.to;\n        preferredSide = \"end\";\n    }\n    else {\n        preferredPos = view.state.selection.from;\n        preferredSide = \"start\";\n    }\n    view.input.lastKeyCode = null;\n    let change = findDiff(compare.content, parse.doc.content, parse.from, preferredPos, preferredSide);\n    if (change)\n        view.input.domChangeCount++;\n    if ((ios && view.input.lastIOSEnter > Date.now() - 225 || android) &&\n        addedNodes.some(n => n.nodeType == 1 && !isInline.test(n.nodeName)) &&\n        (!change || change.endA >= change.endB) &&\n        view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")))) {\n        view.input.lastIOSEnter = 0;\n        return;\n    }\n    if (!change) {\n        if (typeOver && sel instanceof TextSelection && !sel.empty && sel.$head.sameParent(sel.$anchor) &&\n            !view.composing && !(parse.sel && parse.sel.anchor != parse.sel.head)) {\n            change = { start: sel.from, endA: sel.to, endB: sel.to };\n        }\n        else {\n            if (parse.sel) {\n                let sel = resolveSelection(view, view.state.doc, parse.sel);\n                if (sel && !sel.eq(view.state.selection)) {\n                    let tr = view.state.tr.setSelection(sel);\n                    if (compositionID)\n                        tr.setMeta(\"composition\", compositionID);\n                    view.dispatch(tr);\n                }\n            }\n            return;\n        }\n    }\n    // Handle the case where overwriting a selection by typing matches\n    // the start or end of the selected content, creating a change\n    // that's smaller than what was actually overwritten.\n    if (view.state.selection.from < view.state.selection.to &&\n        change.start == change.endB &&\n        view.state.selection instanceof TextSelection) {\n        if (change.start > view.state.selection.from && change.start <= view.state.selection.from + 2 &&\n            view.state.selection.from >= parse.from) {\n            change.start = view.state.selection.from;\n        }\n        else if (change.endA < view.state.selection.to && change.endA >= view.state.selection.to - 2 &&\n            view.state.selection.to <= parse.to) {\n            change.endB += (view.state.selection.to - change.endA);\n            change.endA = view.state.selection.to;\n        }\n    }\n    // IE11 will insert a non-breaking space _ahead_ of the space after\n    // the cursor space when adding a space before another space. When\n    // that happened, adjust the change to cover the space instead.\n    if (ie && ie_version <= 11 && change.endB == change.start + 1 &&\n        change.endA == change.start && change.start > parse.from &&\n        parse.doc.textBetween(change.start - parse.from - 1, change.start - parse.from + 1) == \" \\u00a0\") {\n        change.start--;\n        change.endA--;\n        change.endB--;\n    }\n    let $from = parse.doc.resolveNoCache(change.start - parse.from);\n    let $to = parse.doc.resolveNoCache(change.endB - parse.from);\n    let $fromA = doc.resolve(change.start);\n    let inlineChange = $from.sameParent($to) && $from.parent.inlineContent && $fromA.end() >= change.endA;\n    let nextSel;\n    // If this looks like the effect of pressing Enter (or was recorded\n    // as being an iOS enter press), just dispatch an Enter key instead.\n    if (((ios && view.input.lastIOSEnter > Date.now() - 225 &&\n        (!inlineChange || addedNodes.some(n => n.nodeName == \"DIV\" || n.nodeName == \"P\"))) ||\n        (!inlineChange && $from.pos < parse.doc.content.size &&\n            (!$from.sameParent($to) || !$from.parent.inlineContent) &&\n            !/\\S/.test(parse.doc.textBetween($from.pos, $to.pos, \"\", \"\")) &&\n            (nextSel = Selection.findFrom(parse.doc.resolve($from.pos + 1), 1, true)) &&\n            nextSel.head > $from.pos)) &&\n        view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")))) {\n        view.input.lastIOSEnter = 0;\n        return;\n    }\n    // Same for backspace\n    if (view.state.selection.anchor > change.start &&\n        looksLikeBackspace(doc, change.start, change.endA, $from, $to) &&\n        view.someProp(\"handleKeyDown\", f => f(view, keyEvent(8, \"Backspace\")))) {\n        if (android && chrome)\n            view.domObserver.suppressSelectionUpdates(); // #820\n        return;\n    }\n    // Chrome will occasionally, during composition, delete the\n    // entire composition and then immediately insert it again. This is\n    // used to detect that situation.\n    if (chrome && change.endB == change.start)\n        view.input.lastChromeDelete = Date.now();\n    // This tries to detect Android virtual keyboard\n    // enter-and-pick-suggestion action. That sometimes (see issue\n    // #1059) first fires a DOM mutation, before moving the selection to\n    // the newly created block. And then, because ProseMirror cleans up\n    // the DOM selection, it gives up moving the selection entirely,\n    // leaving the cursor in the wrong place. When that happens, we drop\n    // the new paragraph from the initial change, and fire a simulated\n    // enter key afterwards.\n    if (android && !inlineChange && $from.start() != $to.start() && $to.parentOffset == 0 && $from.depth == $to.depth &&\n        parse.sel && parse.sel.anchor == parse.sel.head && parse.sel.head == change.endA) {\n        change.endB -= 2;\n        $to = parse.doc.resolveNoCache(change.endB - parse.from);\n        setTimeout(() => {\n            view.someProp(\"handleKeyDown\", function (f) { return f(view, keyEvent(13, \"Enter\")); });\n        }, 20);\n    }\n    let chFrom = change.start, chTo = change.endA;\n    let mkTr = (base) => {\n        let tr = base || view.state.tr.replace(chFrom, chTo, parse.doc.slice(change.start - parse.from, change.endB - parse.from));\n        if (parse.sel) {\n            let sel = resolveSelection(view, tr.doc, parse.sel);\n            // Chrome will sometimes, during composition, report the\n            // selection in the wrong place. If it looks like that is\n            // happening, don't update the selection.\n            // Edge just doesn't move the cursor forward when you start typing\n            // in an empty block or between br nodes.\n            if (sel && !(chrome && view.composing && sel.empty &&\n                (change.start != change.endB || view.input.lastChromeDelete < Date.now() - 100) &&\n                (sel.head == chFrom || sel.head == tr.mapping.map(chTo) - 1) ||\n                ie && sel.empty && sel.head == chFrom))\n                tr.setSelection(sel);\n        }\n        if (compositionID)\n            tr.setMeta(\"composition\", compositionID);\n        return tr.scrollIntoView();\n    };\n    let markChange;\n    if (inlineChange) {\n        if ($from.pos == $to.pos) { // Deletion\n            // IE11 sometimes weirdly moves the DOM selection around after\n            // backspacing out the first element in a textblock\n            if (ie && ie_version <= 11 && $from.parentOffset == 0) {\n                view.domObserver.suppressSelectionUpdates();\n                setTimeout(() => selectionToDOM(view), 20);\n            }\n            let tr = mkTr(view.state.tr.delete(chFrom, chTo));\n            let marks = doc.resolve(change.start).marksAcross(doc.resolve(change.endA));\n            if (marks)\n                tr.ensureMarks(marks);\n            view.dispatch(tr);\n        }\n        else if ( // Adding or removing a mark\n        change.endA == change.endB &&\n            (markChange = isMarkChange($from.parent.content.cut($from.parentOffset, $to.parentOffset), $fromA.parent.content.cut($fromA.parentOffset, change.endA - $fromA.start())))) {\n            let tr = mkTr(view.state.tr);\n            if (markChange.type == \"add\")\n                tr.addMark(chFrom, chTo, markChange.mark);\n            else\n                tr.removeMark(chFrom, chTo, markChange.mark);\n            view.dispatch(tr);\n        }\n        else if ($from.parent.child($from.index()).isText && $from.index() == $to.index() - ($to.textOffset ? 0 : 1)) {\n            // Both positions in the same text node -- simply insert text\n            let text = $from.parent.textBetween($from.parentOffset, $to.parentOffset);\n            let deflt = () => mkTr(view.state.tr.insertText(text, chFrom, chTo));\n            if (!view.someProp(\"handleTextInput\", f => f(view, chFrom, chTo, text, deflt)))\n                view.dispatch(deflt());\n        }\n    }\n    else {\n        view.dispatch(mkTr());\n    }\n}\nfunction resolveSelection(view, doc, parsedSel) {\n    if (Math.max(parsedSel.anchor, parsedSel.head) > doc.content.size)\n        return null;\n    return selectionBetween(view, doc.resolve(parsedSel.anchor), doc.resolve(parsedSel.head));\n}\n// Given two same-length, non-empty fragments of inline content,\n// determine whether the first could be created from the second by\n// removing or adding a single mark type.\nfunction isMarkChange(cur, prev) {\n    let curMarks = cur.firstChild.marks, prevMarks = prev.firstChild.marks;\n    let added = curMarks, removed = prevMarks, type, mark, update;\n    for (let i = 0; i < prevMarks.length; i++)\n        added = prevMarks[i].removeFromSet(added);\n    for (let i = 0; i < curMarks.length; i++)\n        removed = curMarks[i].removeFromSet(removed);\n    if (added.length == 1 && removed.length == 0) {\n        mark = added[0];\n        type = \"add\";\n        update = (node) => node.mark(mark.addToSet(node.marks));\n    }\n    else if (added.length == 0 && removed.length == 1) {\n        mark = removed[0];\n        type = \"remove\";\n        update = (node) => node.mark(mark.removeFromSet(node.marks));\n    }\n    else {\n        return null;\n    }\n    let updated = [];\n    for (let i = 0; i < prev.childCount; i++)\n        updated.push(update(prev.child(i)));\n    if (Fragment.from(updated).eq(cur))\n        return { mark, type };\n}\nfunction looksLikeBackspace(old, start, end, $newStart, $newEnd) {\n    if ( // The content must have shrunk\n    end - start <= $newEnd.pos - $newStart.pos ||\n        // newEnd must point directly at or after the end of the block that newStart points into\n        skipClosingAndOpening($newStart, true, false) < $newEnd.pos)\n        return false;\n    let $start = old.resolve(start);\n    // Handle the case where, rather than joining blocks, the change just removed an entire block\n    if (!$newStart.parent.isTextblock) {\n        let after = $start.nodeAfter;\n        return after != null && end == start + after.nodeSize;\n    }\n    // Start must be at the end of a block\n    if ($start.parentOffset < $start.parent.content.size || !$start.parent.isTextblock)\n        return false;\n    let $next = old.resolve(skipClosingAndOpening($start, true, true));\n    // The next textblock must start before end and end near it\n    if (!$next.parent.isTextblock || $next.pos > end ||\n        skipClosingAndOpening($next, true, false) < end)\n        return false;\n    // The fragments after the join point must match\n    return $newStart.parent.content.cut($newStart.parentOffset).eq($next.parent.content);\n}\nfunction skipClosingAndOpening($pos, fromEnd, mayOpen) {\n    let depth = $pos.depth, end = fromEnd ? $pos.end() : $pos.pos;\n    while (depth > 0 && (fromEnd || $pos.indexAfter(depth) == $pos.node(depth).childCount)) {\n        depth--;\n        end++;\n        fromEnd = false;\n    }\n    if (mayOpen) {\n        let next = $pos.node(depth).maybeChild($pos.indexAfter(depth));\n        while (next && !next.isLeaf) {\n            next = next.firstChild;\n            end++;\n        }\n    }\n    return end;\n}\nfunction findDiff(a, b, pos, preferredPos, preferredSide) {\n    let start = a.findDiffStart(b, pos);\n    if (start == null)\n        return null;\n    let { a: endA, b: endB } = a.findDiffEnd(b, pos + a.size, pos + b.size);\n    if (preferredSide == \"end\") {\n        let adjust = Math.max(0, start - Math.min(endA, endB));\n        preferredPos -= endA + adjust - start;\n    }\n    if (endA < start && a.size < b.size) {\n        let move = preferredPos <= start && preferredPos >= endA ? start - preferredPos : 0;\n        start -= move;\n        if (start && start < b.size && isSurrogatePair(b.textBetween(start - 1, start + 1)))\n            start += move ? 1 : -1;\n        endB = start + (endB - endA);\n        endA = start;\n    }\n    else if (endB < start) {\n        let move = preferredPos <= start && preferredPos >= endB ? start - preferredPos : 0;\n        start -= move;\n        if (start && start < a.size && isSurrogatePair(a.textBetween(start - 1, start + 1)))\n            start += move ? 1 : -1;\n        endA = start + (endA - endB);\n        endB = start;\n    }\n    return { start, endA, endB };\n}\nfunction isSurrogatePair(str) {\n    if (str.length != 2)\n        return false;\n    let a = str.charCodeAt(0), b = str.charCodeAt(1);\n    return a >= 0xDC00 && a <= 0xDFFF && b >= 0xD800 && b <= 0xDBFF;\n}\n\n/**\n@internal\n*/\nconst __parseFromClipboard = parseFromClipboard;\n/**\n@internal\n*/\nconst __endComposition = endComposition;\n/**\nAn editor view manages the DOM structure that represents an\neditable document. Its state and behavior are determined by its\n[props](https://prosemirror.net/docs/ref/#view.DirectEditorProps).\n*/\nclass EditorView {\n    /**\n    Create a view. `place` may be a DOM node that the editor should\n    be appended to, a function that will place it into the document,\n    or an object whose `mount` property holds the node to use as the\n    document container. If it is `null`, the editor will not be\n    added to the document.\n    */\n    constructor(place, props) {\n        this._root = null;\n        /**\n        @internal\n        */\n        this.focused = false;\n        /**\n        Kludge used to work around a Chrome bug @internal\n        */\n        this.trackWrites = null;\n        this.mounted = false;\n        /**\n        @internal\n        */\n        this.markCursor = null;\n        /**\n        @internal\n        */\n        this.cursorWrapper = null;\n        /**\n        @internal\n        */\n        this.lastSelectedViewDesc = undefined;\n        /**\n        @internal\n        */\n        this.input = new InputState;\n        this.prevDirectPlugins = [];\n        this.pluginViews = [];\n        /**\n        Holds `true` when a hack node is needed in Firefox to prevent the\n        [space is eaten issue](https://github.com/ProseMirror/prosemirror/issues/651)\n        @internal\n        */\n        this.requiresGeckoHackNode = false;\n        /**\n        When editor content is being dragged, this object contains\n        information about the dragged slice and whether it is being\n        copied or moved. At any other time, it is null.\n        */\n        this.dragging = null;\n        this._props = props;\n        this.state = props.state;\n        this.directPlugins = props.plugins || [];\n        this.directPlugins.forEach(checkStateComponent);\n        this.dispatch = this.dispatch.bind(this);\n        this.dom = (place && place.mount) || document.createElement(\"div\");\n        if (place) {\n            if (place.appendChild)\n                place.appendChild(this.dom);\n            else if (typeof place == \"function\")\n                place(this.dom);\n            else if (place.mount)\n                this.mounted = true;\n        }\n        this.editable = getEditable(this);\n        updateCursorWrapper(this);\n        this.nodeViews = buildNodeViews(this);\n        this.docView = docViewDesc(this.state.doc, computeDocDeco(this), viewDecorations(this), this.dom, this);\n        this.domObserver = new DOMObserver(this, (from, to, typeOver, added) => readDOMChange(this, from, to, typeOver, added));\n        this.domObserver.start();\n        initInput(this);\n        this.updatePluginViews();\n    }\n    /**\n    Holds `true` when a\n    [composition](https://w3c.github.io/uievents/#events-compositionevents)\n    is active.\n    */\n    get composing() { return this.input.composing; }\n    /**\n    The view's current [props](https://prosemirror.net/docs/ref/#view.EditorProps).\n    */\n    get props() {\n        if (this._props.state != this.state) {\n            let prev = this._props;\n            this._props = {};\n            for (let name in prev)\n                this._props[name] = prev[name];\n            this._props.state = this.state;\n        }\n        return this._props;\n    }\n    /**\n    Update the view's props. Will immediately cause an update to\n    the DOM.\n    */\n    update(props) {\n        if (props.handleDOMEvents != this._props.handleDOMEvents)\n            ensureListeners(this);\n        let prevProps = this._props;\n        this._props = props;\n        if (props.plugins) {\n            props.plugins.forEach(checkStateComponent);\n            this.directPlugins = props.plugins;\n        }\n        this.updateStateInner(props.state, prevProps);\n    }\n    /**\n    Update the view by updating existing props object with the object\n    given as argument. Equivalent to `view.update(Object.assign({},\n    view.props, props))`.\n    */\n    setProps(props) {\n        let updated = {};\n        for (let name in this._props)\n            updated[name] = this._props[name];\n        updated.state = this.state;\n        for (let name in props)\n            updated[name] = props[name];\n        this.update(updated);\n    }\n    /**\n    Update the editor's `state` prop, without touching any of the\n    other props.\n    */\n    updateState(state) {\n        this.updateStateInner(state, this._props);\n    }\n    updateStateInner(state, prevProps) {\n        var _a;\n        let prev = this.state, redraw = false, updateSel = false;\n        // When stored marks are added, stop composition, so that they can\n        // be displayed.\n        if (state.storedMarks && this.composing) {\n            clearComposition(this);\n            updateSel = true;\n        }\n        this.state = state;\n        let pluginsChanged = prev.plugins != state.plugins || this._props.plugins != prevProps.plugins;\n        if (pluginsChanged || this._props.plugins != prevProps.plugins || this._props.nodeViews != prevProps.nodeViews) {\n            let nodeViews = buildNodeViews(this);\n            if (changedNodeViews(nodeViews, this.nodeViews)) {\n                this.nodeViews = nodeViews;\n                redraw = true;\n            }\n        }\n        if (pluginsChanged || prevProps.handleDOMEvents != this._props.handleDOMEvents) {\n            ensureListeners(this);\n        }\n        this.editable = getEditable(this);\n        updateCursorWrapper(this);\n        let innerDeco = viewDecorations(this), outerDeco = computeDocDeco(this);\n        let scroll = prev.plugins != state.plugins && !prev.doc.eq(state.doc) ? \"reset\"\n            : state.scrollToSelection > prev.scrollToSelection ? \"to selection\" : \"preserve\";\n        let updateDoc = redraw || !this.docView.matchesNode(state.doc, outerDeco, innerDeco);\n        if (updateDoc || !state.selection.eq(prev.selection))\n            updateSel = true;\n        let oldScrollPos = scroll == \"preserve\" && updateSel && this.dom.style.overflowAnchor == null && storeScrollPos(this);\n        if (updateSel) {\n            this.domObserver.stop();\n            // Work around an issue in Chrome, IE, and Edge where changing\n            // the DOM around an active selection puts it into a broken\n            // state where the thing the user sees differs from the\n            // selection reported by the Selection object (#710, #973,\n            // #1011, #1013, #1035).\n            let forceSelUpdate = updateDoc && (ie || chrome) && !this.composing &&\n                !prev.selection.empty && !state.selection.empty && selectionContextChanged(prev.selection, state.selection);\n            if (updateDoc) {\n                // If the node that the selection points into is written to,\n                // Chrome sometimes starts misreporting the selection, so this\n                // tracks that and forces a selection reset when our update\n                // did write to the node.\n                let chromeKludge = chrome ? (this.trackWrites = this.domSelectionRange().focusNode) : null;\n                if (this.composing)\n                    this.input.compositionNode = findCompositionNode(this);\n                if (redraw || !this.docView.update(state.doc, outerDeco, innerDeco, this)) {\n                    this.docView.updateOuterDeco(outerDeco);\n                    this.docView.destroy();\n                    this.docView = docViewDesc(state.doc, outerDeco, innerDeco, this.dom, this);\n                }\n                if (chromeKludge && !this.trackWrites)\n                    forceSelUpdate = true;\n            }\n            // Work around for an issue where an update arriving right between\n            // a DOM selection change and the \"selectionchange\" event for it\n            // can cause a spurious DOM selection update, disrupting mouse\n            // drag selection.\n            if (forceSelUpdate ||\n                !(this.input.mouseDown && this.domObserver.currentSelection.eq(this.domSelectionRange()) &&\n                    anchorInRightPlace(this))) {\n                selectionToDOM(this, forceSelUpdate);\n            }\n            else {\n                syncNodeSelection(this, state.selection);\n                this.domObserver.setCurSelection();\n            }\n            this.domObserver.start();\n        }\n        this.updatePluginViews(prev);\n        if (((_a = this.dragging) === null || _a === void 0 ? void 0 : _a.node) && !prev.doc.eq(state.doc))\n            this.updateDraggedNode(this.dragging, prev);\n        if (scroll == \"reset\") {\n            this.dom.scrollTop = 0;\n        }\n        else if (scroll == \"to selection\") {\n            this.scrollToSelection();\n        }\n        else if (oldScrollPos) {\n            resetScrollPos(oldScrollPos);\n        }\n    }\n    /**\n    @internal\n    */\n    scrollToSelection() {\n        let startDOM = this.domSelectionRange().focusNode;\n        if (!startDOM || !this.dom.contains(startDOM.nodeType == 1 ? startDOM : startDOM.parentNode)) ;\n        else if (this.someProp(\"handleScrollToSelection\", f => f(this))) ;\n        else if (this.state.selection instanceof NodeSelection) {\n            let target = this.docView.domAfterPos(this.state.selection.from);\n            if (target.nodeType == 1)\n                scrollRectIntoView(this, target.getBoundingClientRect(), startDOM);\n        }\n        else {\n            scrollRectIntoView(this, this.coordsAtPos(this.state.selection.head, 1), startDOM);\n        }\n    }\n    destroyPluginViews() {\n        let view;\n        while (view = this.pluginViews.pop())\n            if (view.destroy)\n                view.destroy();\n    }\n    updatePluginViews(prevState) {\n        if (!prevState || prevState.plugins != this.state.plugins || this.directPlugins != this.prevDirectPlugins) {\n            this.prevDirectPlugins = this.directPlugins;\n            this.destroyPluginViews();\n            for (let i = 0; i < this.directPlugins.length; i++) {\n                let plugin = this.directPlugins[i];\n                if (plugin.spec.view)\n                    this.pluginViews.push(plugin.spec.view(this));\n            }\n            for (let i = 0; i < this.state.plugins.length; i++) {\n                let plugin = this.state.plugins[i];\n                if (plugin.spec.view)\n                    this.pluginViews.push(plugin.spec.view(this));\n            }\n        }\n        else {\n            for (let i = 0; i < this.pluginViews.length; i++) {\n                let pluginView = this.pluginViews[i];\n                if (pluginView.update)\n                    pluginView.update(this, prevState);\n            }\n        }\n    }\n    updateDraggedNode(dragging, prev) {\n        let sel = dragging.node, found = -1;\n        if (this.state.doc.nodeAt(sel.from) == sel.node) {\n            found = sel.from;\n        }\n        else {\n            let movedPos = sel.from + (this.state.doc.content.size - prev.doc.content.size);\n            let moved = movedPos > 0 && this.state.doc.nodeAt(movedPos);\n            if (moved == sel.node)\n                found = movedPos;\n        }\n        this.dragging = new Dragging(dragging.slice, dragging.move, found < 0 ? undefined : NodeSelection.create(this.state.doc, found));\n    }\n    someProp(propName, f) {\n        let prop = this._props && this._props[propName], value;\n        if (prop != null && (value = f ? f(prop) : prop))\n            return value;\n        for (let i = 0; i < this.directPlugins.length; i++) {\n            let prop = this.directPlugins[i].props[propName];\n            if (prop != null && (value = f ? f(prop) : prop))\n                return value;\n        }\n        let plugins = this.state.plugins;\n        if (plugins)\n            for (let i = 0; i < plugins.length; i++) {\n                let prop = plugins[i].props[propName];\n                if (prop != null && (value = f ? f(prop) : prop))\n                    return value;\n            }\n    }\n    /**\n    Query whether the view has focus.\n    */\n    hasFocus() {\n        // Work around IE not handling focus correctly if resize handles are shown.\n        // If the cursor is inside an element with resize handles, activeElement\n        // will be that element instead of this.dom.\n        if (ie) {\n            // If activeElement is within this.dom, and there are no other elements\n            // setting `contenteditable` to false in between, treat it as focused.\n            let node = this.root.activeElement;\n            if (node == this.dom)\n                return true;\n            if (!node || !this.dom.contains(node))\n                return false;\n            while (node && this.dom != node && this.dom.contains(node)) {\n                if (node.contentEditable == 'false')\n                    return false;\n                node = node.parentElement;\n            }\n            return true;\n        }\n        return this.root.activeElement == this.dom;\n    }\n    /**\n    Focus the editor.\n    */\n    focus() {\n        this.domObserver.stop();\n        if (this.editable)\n            focusPreventScroll(this.dom);\n        selectionToDOM(this);\n        this.domObserver.start();\n    }\n    /**\n    Get the document root in which the editor exists. This will\n    usually be the top-level `document`, but might be a [shadow\n    DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Shadow_DOM)\n    root if the editor is inside one.\n    */\n    get root() {\n        let cached = this._root;\n        if (cached == null)\n            for (let search = this.dom.parentNode; search; search = search.parentNode) {\n                if (search.nodeType == 9 || (search.nodeType == 11 && search.host)) {\n                    if (!search.getSelection)\n                        Object.getPrototypeOf(search).getSelection = () => search.ownerDocument.getSelection();\n                    return this._root = search;\n                }\n            }\n        return cached || document;\n    }\n    /**\n    When an existing editor view is moved to a new document or\n    shadow tree, call this to make it recompute its root.\n    */\n    updateRoot() {\n        this._root = null;\n    }\n    /**\n    Given a pair of viewport coordinates, return the document\n    position that corresponds to them. May return null if the given\n    coordinates aren't inside of the editor. When an object is\n    returned, its `pos` property is the position nearest to the\n    coordinates, and its `inside` property holds the position of the\n    inner node that the position falls inside of, or -1 if it is at\n    the top level, not in any node.\n    */\n    posAtCoords(coords) {\n        return posAtCoords(this, coords);\n    }\n    /**\n    Returns the viewport rectangle at a given document position.\n    `left` and `right` will be the same number, as this returns a\n    flat cursor-ish rectangle. If the position is between two things\n    that aren't directly adjacent, `side` determines which element\n    is used. When < 0, the element before the position is used,\n    otherwise the element after.\n    */\n    coordsAtPos(pos, side = 1) {\n        return coordsAtPos(this, pos, side);\n    }\n    /**\n    Find the DOM position that corresponds to the given document\n    position. When `side` is negative, find the position as close as\n    possible to the content before the position. When positive,\n    prefer positions close to the content after the position. When\n    zero, prefer as shallow a position as possible.\n    \n    Note that you should **not** mutate the editor's internal DOM,\n    only inspect it (and even that is usually not necessary).\n    */\n    domAtPos(pos, side = 0) {\n        return this.docView.domFromPos(pos, side);\n    }\n    /**\n    Find the DOM node that represents the document node after the\n    given position. May return `null` when the position doesn't point\n    in front of a node or if the node is inside an opaque node view.\n    \n    This is intended to be able to call things like\n    `getBoundingClientRect` on that DOM node. Do **not** mutate the\n    editor DOM directly, or add styling this way, since that will be\n    immediately overriden by the editor as it redraws the node.\n    */\n    nodeDOM(pos) {\n        let desc = this.docView.descAt(pos);\n        return desc ? desc.nodeDOM : null;\n    }\n    /**\n    Find the document position that corresponds to a given DOM\n    position. (Whenever possible, it is preferable to inspect the\n    document structure directly, rather than poking around in the\n    DOM, but sometimes—for example when interpreting an event\n    target—you don't have a choice.)\n    \n    The `bias` parameter can be used to influence which side of a DOM\n    node to use when the position is inside a leaf node.\n    */\n    posAtDOM(node, offset, bias = -1) {\n        let pos = this.docView.posFromDOM(node, offset, bias);\n        if (pos == null)\n            throw new RangeError(\"DOM position not inside the editor\");\n        return pos;\n    }\n    /**\n    Find out whether the selection is at the end of a textblock when\n    moving in a given direction. When, for example, given `\"left\"`,\n    it will return true if moving left from the current cursor\n    position would leave that position's parent textblock. Will apply\n    to the view's current state by default, but it is possible to\n    pass a different state.\n    */\n    endOfTextblock(dir, state) {\n        return endOfTextblock(this, state || this.state, dir);\n    }\n    /**\n    Run the editor's paste logic with the given HTML string. The\n    `event`, if given, will be passed to the\n    [`handlePaste`](https://prosemirror.net/docs/ref/#view.EditorProps.handlePaste) hook.\n    */\n    pasteHTML(html, event) {\n        return doPaste(this, \"\", html, false, event || new ClipboardEvent(\"paste\"));\n    }\n    /**\n    Run the editor's paste logic with the given plain-text input.\n    */\n    pasteText(text, event) {\n        return doPaste(this, text, null, true, event || new ClipboardEvent(\"paste\"));\n    }\n    /**\n    Serialize the given slice as it would be if it was copied from\n    this editor. Returns a DOM element that contains a\n    representation of the slice as its children, a textual\n    representation, and the transformed slice (which can be\n    different from the given input due to hooks like\n    [`transformCopied`](https://prosemirror.net/docs/ref/#view.EditorProps.transformCopied)).\n    */\n    serializeForClipboard(slice) {\n        return serializeForClipboard(this, slice);\n    }\n    /**\n    Removes the editor from the DOM and destroys all [node\n    views](https://prosemirror.net/docs/ref/#view.NodeView).\n    */\n    destroy() {\n        if (!this.docView)\n            return;\n        destroyInput(this);\n        this.destroyPluginViews();\n        if (this.mounted) {\n            this.docView.update(this.state.doc, [], viewDecorations(this), this);\n            this.dom.textContent = \"\";\n        }\n        else if (this.dom.parentNode) {\n            this.dom.parentNode.removeChild(this.dom);\n        }\n        this.docView.destroy();\n        this.docView = null;\n        clearReusedRange();\n    }\n    /**\n    This is true when the view has been\n    [destroyed](https://prosemirror.net/docs/ref/#view.EditorView.destroy) (and thus should not be\n    used anymore).\n    */\n    get isDestroyed() {\n        return this.docView == null;\n    }\n    /**\n    Used for testing.\n    */\n    dispatchEvent(event) {\n        return dispatchEvent(this, event);\n    }\n    /**\n    @internal\n    */\n    domSelectionRange() {\n        let sel = this.domSelection();\n        if (!sel)\n            return { focusNode: null, focusOffset: 0, anchorNode: null, anchorOffset: 0 };\n        return safari && this.root.nodeType === 11 &&\n            deepActiveElement(this.dom.ownerDocument) == this.dom && safariShadowSelectionRange(this, sel) || sel;\n    }\n    /**\n    @internal\n    */\n    domSelection() {\n        return this.root.getSelection();\n    }\n}\nEditorView.prototype.dispatch = function (tr) {\n    let dispatchTransaction = this._props.dispatchTransaction;\n    if (dispatchTransaction)\n        dispatchTransaction.call(this, tr);\n    else\n        this.updateState(this.state.apply(tr));\n};\nfunction computeDocDeco(view) {\n    let attrs = Object.create(null);\n    attrs.class = \"ProseMirror\";\n    attrs.contenteditable = String(view.editable);\n    view.someProp(\"attributes\", value => {\n        if (typeof value == \"function\")\n            value = value(view.state);\n        if (value)\n            for (let attr in value) {\n                if (attr == \"class\")\n                    attrs.class += \" \" + value[attr];\n                else if (attr == \"style\")\n                    attrs.style = (attrs.style ? attrs.style + \";\" : \"\") + value[attr];\n                else if (!attrs[attr] && attr != \"contenteditable\" && attr != \"nodeName\")\n                    attrs[attr] = String(value[attr]);\n            }\n    });\n    if (!attrs.translate)\n        attrs.translate = \"no\";\n    return [Decoration.node(0, view.state.doc.content.size, attrs)];\n}\nfunction updateCursorWrapper(view) {\n    if (view.markCursor) {\n        let dom = document.createElement(\"img\");\n        dom.className = \"ProseMirror-separator\";\n        dom.setAttribute(\"mark-placeholder\", \"true\");\n        dom.setAttribute(\"alt\", \"\");\n        view.cursorWrapper = { dom, deco: Decoration.widget(view.state.selection.from, dom, { raw: true, marks: view.markCursor }) };\n    }\n    else {\n        view.cursorWrapper = null;\n    }\n}\nfunction getEditable(view) {\n    return !view.someProp(\"editable\", value => value(view.state) === false);\n}\nfunction selectionContextChanged(sel1, sel2) {\n    let depth = Math.min(sel1.$anchor.sharedDepth(sel1.head), sel2.$anchor.sharedDepth(sel2.head));\n    return sel1.$anchor.start(depth) != sel2.$anchor.start(depth);\n}\nfunction buildNodeViews(view) {\n    let result = Object.create(null);\n    function add(obj) {\n        for (let prop in obj)\n            if (!Object.prototype.hasOwnProperty.call(result, prop))\n                result[prop] = obj[prop];\n    }\n    view.someProp(\"nodeViews\", add);\n    view.someProp(\"markViews\", add);\n    return result;\n}\nfunction changedNodeViews(a, b) {\n    let nA = 0, nB = 0;\n    for (let prop in a) {\n        if (a[prop] != b[prop])\n            return true;\n        nA++;\n    }\n    for (let _ in b)\n        nB++;\n    return nA != nB;\n}\nfunction checkStateComponent(plugin) {\n    if (plugin.spec.state || plugin.spec.filterTransaction || plugin.spec.appendTransaction)\n        throw new RangeError(\"Plugins passed directly to the view must not have a state component\");\n}\n\nexport { Decoration, DecorationSet, EditorView, __endComposition, __parseFromClipboard };\n","export var base = {\n  8: \"Backspace\",\n  9: \"Tab\",\n  10: \"Enter\",\n  12: \"NumLock\",\n  13: \"Enter\",\n  16: \"Shift\",\n  17: \"Control\",\n  18: \"Alt\",\n  20: \"CapsLock\",\n  27: \"Escape\",\n  32: \" \",\n  33: \"PageUp\",\n  34: \"PageDown\",\n  35: \"End\",\n  36: \"Home\",\n  37: \"ArrowLeft\",\n  38: \"ArrowUp\",\n  39: \"ArrowRight\",\n  40: \"ArrowDown\",\n  44: \"PrintScreen\",\n  45: \"Insert\",\n  46: \"Delete\",\n  59: \";\",\n  61: \"=\",\n  91: \"Meta\",\n  92: \"Meta\",\n  106: \"*\",\n  107: \"+\",\n  108: \",\",\n  109: \"-\",\n  110: \".\",\n  111: \"/\",\n  144: \"NumLock\",\n  145: \"ScrollLock\",\n  160: \"Shift\",\n  161: \"Shift\",\n  162: \"Control\",\n  163: \"Control\",\n  164: \"Alt\",\n  165: \"Alt\",\n  173: \"-\",\n  186: \";\",\n  187: \"=\",\n  188: \",\",\n  189: \"-\",\n  190: \".\",\n  191: \"/\",\n  192: \"`\",\n  219: \"[\",\n  220: \"\\\\\",\n  221: \"]\",\n  222: \"'\"\n}\n\nexport var shift = {\n  48: \")\",\n  49: \"!\",\n  50: \"@\",\n  51: \"#\",\n  52: \"$\",\n  53: \"%\",\n  54: \"^\",\n  55: \"&\",\n  56: \"*\",\n  57: \"(\",\n  59: \":\",\n  61: \"+\",\n  173: \"_\",\n  186: \":\",\n  187: \"+\",\n  188: \"<\",\n  189: \"_\",\n  190: \">\",\n  191: \"?\",\n  192: \"~\",\n  219: \"{\",\n  220: \"|\",\n  221: \"}\",\n  222: \"\\\"\"\n}\n\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform)\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent)\n\n// Fill in the digit keys\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i)\n\n// The function keys\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i\n\n// And the alphabetic keys\nfor (var i = 65; i <= 90; i++) {\n  base[i] = String.fromCharCode(i + 32)\n  shift[i] = String.fromCharCode(i)\n}\n\n// For each code that doesn't have a shift-equivalent, copy the base name\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code]\n\nexport function keyName(event) {\n  // On macOS, keys held with Shift and Cmd don't reflect the effect of Shift in `.key`.\n  // On IE, shift effect is never included in `.key`.\n  var ignoreKey = mac && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey ||\n      ie && event.shiftKey && event.key && event.key.length == 1 ||\n      event.key == \"Unidentified\"\n  var name = (!ignoreKey && event.key) ||\n    (event.shiftKey ? shift : base)[event.keyCode] ||\n    event.key || \"Unidentified\"\n  // Edge sometimes produces wrong names (Issue #3)\n  if (name == \"Esc\") name = \"Escape\"\n  if (name == \"Del\") name = \"Delete\"\n  // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n  if (name == \"Left\") name = \"ArrowLeft\"\n  if (name == \"Up\") name = \"ArrowUp\"\n  if (name == \"Right\") name = \"ArrowRight\"\n  if (name == \"Down\") name = \"ArrowDown\"\n  return name\n}\n","import { keyName, base } from 'w3c-keyname';\nimport { Plugin } from 'prosemirror-state';\n\nconst mac = typeof navigator != \"undefined\" && /Mac|iP(hone|[oa]d)/.test(navigator.platform);\nconst windows = typeof navigator != \"undefined\" && /Win/.test(navigator.platform);\nfunction normalizeKeyName(name) {\n    let parts = name.split(/-(?!$)/), result = parts[parts.length - 1];\n    if (result == \"Space\")\n        result = \" \";\n    let alt, ctrl, shift, meta;\n    for (let i = 0; i < parts.length - 1; i++) {\n        let mod = parts[i];\n        if (/^(cmd|meta|m)$/i.test(mod))\n            meta = true;\n        else if (/^a(lt)?$/i.test(mod))\n            alt = true;\n        else if (/^(c|ctrl|control)$/i.test(mod))\n            ctrl = true;\n        else if (/^s(hift)?$/i.test(mod))\n            shift = true;\n        else if (/^mod$/i.test(mod)) {\n            if (mac)\n                meta = true;\n            else\n                ctrl = true;\n        }\n        else\n            throw new Error(\"Unrecognized modifier name: \" + mod);\n    }\n    if (alt)\n        result = \"Alt-\" + result;\n    if (ctrl)\n        result = \"Ctrl-\" + result;\n    if (meta)\n        result = \"Meta-\" + result;\n    if (shift)\n        result = \"Shift-\" + result;\n    return result;\n}\nfunction normalize(map) {\n    let copy = Object.create(null);\n    for (let prop in map)\n        copy[normalizeKeyName(prop)] = map[prop];\n    return copy;\n}\nfunction modifiers(name, event, shift = true) {\n    if (event.altKey)\n        name = \"Alt-\" + name;\n    if (event.ctrlKey)\n        name = \"Ctrl-\" + name;\n    if (event.metaKey)\n        name = \"Meta-\" + name;\n    if (shift && event.shiftKey)\n        name = \"Shift-\" + name;\n    return name;\n}\n/**\nCreate a keymap plugin for the given set of bindings.\n\nBindings should map key names to [command](https://prosemirror.net/docs/ref/#commands)-style\nfunctions, which will be called with `(EditorState, dispatch,\nEditorView)` arguments, and should return true when they've handled\nthe key. Note that the view argument isn't part of the command\nprotocol, but can be used as an escape hatch if a binding needs to\ndirectly interact with the UI.\n\nKey names may be strings like `\"Shift-Ctrl-Enter\"`—a key\nidentifier prefixed with zero or more modifiers. Key identifiers\nare based on the strings that can appear in\n[`KeyEvent.key`](https:developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key).\nUse lowercase letters to refer to letter keys (or uppercase letters\nif you want shift to be held). You may use `\"Space\"` as an alias\nfor the `\" \"` name.\n\nModifiers can be given in any order. `Shift-` (or `s-`), `Alt-` (or\n`a-`), `Ctrl-` (or `c-` or `Control-`) and `Cmd-` (or `m-` or\n`Meta-`) are recognized. For characters that are created by holding\nshift, the `Shift-` prefix is implied, and should not be added\nexplicitly.\n\nYou can use `Mod-` as a shorthand for `Cmd-` on Mac and `Ctrl-` on\nother platforms.\n\nYou can add multiple keymap plugins to an editor. The order in\nwhich they appear determines their precedence (the ones early in\nthe array get to dispatch first).\n*/\nfunction keymap(bindings) {\n    return new Plugin({ props: { handleKeyDown: keydownHandler(bindings) } });\n}\n/**\nGiven a set of bindings (using the same format as\n[`keymap`](https://prosemirror.net/docs/ref/#keymap.keymap)), return a [keydown\nhandler](https://prosemirror.net/docs/ref/#view.EditorProps.handleKeyDown) that handles them.\n*/\nfunction keydownHandler(bindings) {\n    let map = normalize(bindings);\n    return function (view, event) {\n        let name = keyName(event), baseName, direct = map[modifiers(name, event)];\n        if (direct && direct(view.state, view.dispatch, view))\n            return true;\n        // A character key\n        if (name.length == 1 && name != \" \") {\n            if (event.shiftKey) {\n                // In case the name was already modified by shift, try looking\n                // it up without its shift modifier\n                let noShift = map[modifiers(name, event, false)];\n                if (noShift && noShift(view.state, view.dispatch, view))\n                    return true;\n            }\n            if ((event.altKey || event.metaKey || event.ctrlKey) &&\n                // Ctrl-Alt may be used for AltGr on Windows\n                !(windows && event.ctrlKey && event.altKey) &&\n                (baseName = base[event.keyCode]) && baseName != name) {\n                // Try falling back to the keyCode when there's a modifier\n                // active or the character produced isn't ASCII, and our table\n                // produces a different name from the the keyCode. See #668,\n                // #1060, #1529.\n                let fromCode = map[modifiers(baseName, event)];\n                if (fromCode && fromCode(view.state, view.dispatch, view))\n                    return true;\n            }\n        }\n        return false;\n    };\n}\n\nexport { keydownHandler, keymap };\n","// src/index.ts\nimport { Plugin as Plugin2 } from \"prosemirror-state\";\n\n// src/cellselection.ts\nimport { Fragment, Slice } from \"prosemirror-model\";\nimport {\n  NodeSelection as NodeSelection2,\n  Selection,\n  SelectionRange,\n  TextSelection\n} from \"prosemirror-state\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\n\n// src/tablemap.ts\nvar readFromCache;\nvar addToCache;\nif (typeof WeakMap != \"undefined\") {\n  let cache = /* @__PURE__ */ new WeakMap();\n  readFromCache = (key) => cache.get(key);\n  addToCache = (key, value) => {\n    cache.set(key, value);\n    return value;\n  };\n} else {\n  const cache = [];\n  const cacheSize = 10;\n  let cachePos = 0;\n  readFromCache = (key) => {\n    for (let i = 0; i < cache.length; i += 2)\n      if (cache[i] == key) return cache[i + 1];\n  };\n  addToCache = (key, value) => {\n    if (cachePos == cacheSize) cachePos = 0;\n    cache[cachePos++] = key;\n    return cache[cachePos++] = value;\n  };\n}\nvar TableMap = class {\n  constructor(width, height, map, problems) {\n    this.width = width;\n    this.height = height;\n    this.map = map;\n    this.problems = problems;\n  }\n  // Find the dimensions of the cell at the given position.\n  findCell(pos) {\n    for (let i = 0; i < this.map.length; i++) {\n      const curPos = this.map[i];\n      if (curPos != pos) continue;\n      const left = i % this.width;\n      const top = i / this.width | 0;\n      let right = left + 1;\n      let bottom = top + 1;\n      for (let j = 1; right < this.width && this.map[i + j] == curPos; j++) {\n        right++;\n      }\n      for (let j = 1; bottom < this.height && this.map[i + this.width * j] == curPos; j++) {\n        bottom++;\n      }\n      return { left, top, right, bottom };\n    }\n    throw new RangeError(`No cell with offset ${pos} found`);\n  }\n  // Find the left side of the cell at the given position.\n  colCount(pos) {\n    for (let i = 0; i < this.map.length; i++) {\n      if (this.map[i] == pos) {\n        return i % this.width;\n      }\n    }\n    throw new RangeError(`No cell with offset ${pos} found`);\n  }\n  // Find the next cell in the given direction, starting from the cell\n  // at `pos`, if any.\n  nextCell(pos, axis, dir) {\n    const { left, right, top, bottom } = this.findCell(pos);\n    if (axis == \"horiz\") {\n      if (dir < 0 ? left == 0 : right == this.width) return null;\n      return this.map[top * this.width + (dir < 0 ? left - 1 : right)];\n    } else {\n      if (dir < 0 ? top == 0 : bottom == this.height) return null;\n      return this.map[left + this.width * (dir < 0 ? top - 1 : bottom)];\n    }\n  }\n  // Get the rectangle spanning the two given cells.\n  rectBetween(a, b) {\n    const {\n      left: leftA,\n      right: rightA,\n      top: topA,\n      bottom: bottomA\n    } = this.findCell(a);\n    const {\n      left: leftB,\n      right: rightB,\n      top: topB,\n      bottom: bottomB\n    } = this.findCell(b);\n    return {\n      left: Math.min(leftA, leftB),\n      top: Math.min(topA, topB),\n      right: Math.max(rightA, rightB),\n      bottom: Math.max(bottomA, bottomB)\n    };\n  }\n  // Return the position of all cells that have the top left corner in\n  // the given rectangle.\n  cellsInRect(rect) {\n    const result = [];\n    const seen = {};\n    for (let row = rect.top; row < rect.bottom; row++) {\n      for (let col = rect.left; col < rect.right; col++) {\n        const index = row * this.width + col;\n        const pos = this.map[index];\n        if (seen[pos]) continue;\n        seen[pos] = true;\n        if (col == rect.left && col && this.map[index - 1] == pos || row == rect.top && row && this.map[index - this.width] == pos) {\n          continue;\n        }\n        result.push(pos);\n      }\n    }\n    return result;\n  }\n  // Return the position at which the cell at the given row and column\n  // starts, or would start, if a cell started there.\n  positionAt(row, col, table) {\n    for (let i = 0, rowStart = 0; ; i++) {\n      const rowEnd = rowStart + table.child(i).nodeSize;\n      if (i == row) {\n        let index = col + row * this.width;\n        const rowEndIndex = (row + 1) * this.width;\n        while (index < rowEndIndex && this.map[index] < rowStart) index++;\n        return index == rowEndIndex ? rowEnd - 1 : this.map[index];\n      }\n      rowStart = rowEnd;\n    }\n  }\n  // Find the table map for the given table node.\n  static get(table) {\n    return readFromCache(table) || addToCache(table, computeMap(table));\n  }\n};\nfunction computeMap(table) {\n  if (table.type.spec.tableRole != \"table\")\n    throw new RangeError(\"Not a table node: \" + table.type.name);\n  const width = findWidth(table), height = table.childCount;\n  const map = [];\n  let mapPos = 0;\n  let problems = null;\n  const colWidths = [];\n  for (let i = 0, e = width * height; i < e; i++) map[i] = 0;\n  for (let row = 0, pos = 0; row < height; row++) {\n    const rowNode = table.child(row);\n    pos++;\n    for (let i = 0; ; i++) {\n      while (mapPos < map.length && map[mapPos] != 0) mapPos++;\n      if (i == rowNode.childCount) break;\n      const cellNode = rowNode.child(i);\n      const { colspan, rowspan, colwidth } = cellNode.attrs;\n      for (let h = 0; h < rowspan; h++) {\n        if (h + row >= height) {\n          (problems || (problems = [])).push({\n            type: \"overlong_rowspan\",\n            pos,\n            n: rowspan - h\n          });\n          break;\n        }\n        const start = mapPos + h * width;\n        for (let w = 0; w < colspan; w++) {\n          if (map[start + w] == 0) map[start + w] = pos;\n          else\n            (problems || (problems = [])).push({\n              type: \"collision\",\n              row,\n              pos,\n              n: colspan - w\n            });\n          const colW = colwidth && colwidth[w];\n          if (colW) {\n            const widthIndex = (start + w) % width * 2, prev = colWidths[widthIndex];\n            if (prev == null || prev != colW && colWidths[widthIndex + 1] == 1) {\n              colWidths[widthIndex] = colW;\n              colWidths[widthIndex + 1] = 1;\n            } else if (prev == colW) {\n              colWidths[widthIndex + 1]++;\n            }\n          }\n        }\n      }\n      mapPos += colspan;\n      pos += cellNode.nodeSize;\n    }\n    const expectedPos = (row + 1) * width;\n    let missing = 0;\n    while (mapPos < expectedPos) if (map[mapPos++] == 0) missing++;\n    if (missing)\n      (problems || (problems = [])).push({ type: \"missing\", row, n: missing });\n    pos++;\n  }\n  if (width === 0 || height === 0)\n    (problems || (problems = [])).push({ type: \"zero_sized\" });\n  const tableMap = new TableMap(width, height, map, problems);\n  let badWidths = false;\n  for (let i = 0; !badWidths && i < colWidths.length; i += 2)\n    if (colWidths[i] != null && colWidths[i + 1] < height) badWidths = true;\n  if (badWidths) findBadColWidths(tableMap, colWidths, table);\n  return tableMap;\n}\nfunction findWidth(table) {\n  let width = -1;\n  let hasRowSpan = false;\n  for (let row = 0; row < table.childCount; row++) {\n    const rowNode = table.child(row);\n    let rowWidth = 0;\n    if (hasRowSpan)\n      for (let j = 0; j < row; j++) {\n        const prevRow = table.child(j);\n        for (let i = 0; i < prevRow.childCount; i++) {\n          const cell = prevRow.child(i);\n          if (j + cell.attrs.rowspan > row) rowWidth += cell.attrs.colspan;\n        }\n      }\n    for (let i = 0; i < rowNode.childCount; i++) {\n      const cell = rowNode.child(i);\n      rowWidth += cell.attrs.colspan;\n      if (cell.attrs.rowspan > 1) hasRowSpan = true;\n    }\n    if (width == -1) width = rowWidth;\n    else if (width != rowWidth) width = Math.max(width, rowWidth);\n  }\n  return width;\n}\nfunction findBadColWidths(map, colWidths, table) {\n  if (!map.problems) map.problems = [];\n  const seen = {};\n  for (let i = 0; i < map.map.length; i++) {\n    const pos = map.map[i];\n    if (seen[pos]) continue;\n    seen[pos] = true;\n    const node = table.nodeAt(pos);\n    if (!node) {\n      throw new RangeError(`No cell with offset ${pos} found`);\n    }\n    let updated = null;\n    const attrs = node.attrs;\n    for (let j = 0; j < attrs.colspan; j++) {\n      const col = (i + j) % map.width;\n      const colWidth = colWidths[col * 2];\n      if (colWidth != null && (!attrs.colwidth || attrs.colwidth[j] != colWidth))\n        (updated || (updated = freshColWidth(attrs)))[j] = colWidth;\n    }\n    if (updated)\n      map.problems.unshift({\n        type: \"colwidth mismatch\",\n        pos,\n        colwidth: updated\n      });\n  }\n}\nfunction freshColWidth(attrs) {\n  if (attrs.colwidth) return attrs.colwidth.slice();\n  const result = [];\n  for (let i = 0; i < attrs.colspan; i++) result.push(0);\n  return result;\n}\n\n// src/util.ts\nimport { PluginKey } from \"prosemirror-state\";\n\n// src/schema.ts\nfunction getCellAttrs(dom, extraAttrs) {\n  if (typeof dom === \"string\") {\n    return {};\n  }\n  const widthAttr = dom.getAttribute(\"data-colwidth\");\n  const widths = widthAttr && /^\\d+(,\\d+)*$/.test(widthAttr) ? widthAttr.split(\",\").map((s) => Number(s)) : null;\n  const colspan = Number(dom.getAttribute(\"colspan\") || 1);\n  const result = {\n    colspan,\n    rowspan: Number(dom.getAttribute(\"rowspan\") || 1),\n    colwidth: widths && widths.length == colspan ? widths : null\n  };\n  for (const prop in extraAttrs) {\n    const getter = extraAttrs[prop].getFromDOM;\n    const value = getter && getter(dom);\n    if (value != null) {\n      result[prop] = value;\n    }\n  }\n  return result;\n}\nfunction setCellAttrs(node, extraAttrs) {\n  const attrs = {};\n  if (node.attrs.colspan != 1) attrs.colspan = node.attrs.colspan;\n  if (node.attrs.rowspan != 1) attrs.rowspan = node.attrs.rowspan;\n  if (node.attrs.colwidth)\n    attrs[\"data-colwidth\"] = node.attrs.colwidth.join(\",\");\n  for (const prop in extraAttrs) {\n    const setter = extraAttrs[prop].setDOMAttr;\n    if (setter) setter(node.attrs[prop], attrs);\n  }\n  return attrs;\n}\nfunction validateColwidth(value) {\n  if (value === null) {\n    return;\n  }\n  if (!Array.isArray(value)) {\n    throw new TypeError(\"colwidth must be null or an array\");\n  }\n  for (const item of value) {\n    if (typeof item !== \"number\") {\n      throw new TypeError(\"colwidth must be null or an array of numbers\");\n    }\n  }\n}\nfunction tableNodes(options) {\n  const extraAttrs = options.cellAttributes || {};\n  const cellAttrs = {\n    colspan: { default: 1, validate: \"number\" },\n    rowspan: { default: 1, validate: \"number\" },\n    colwidth: { default: null, validate: validateColwidth }\n  };\n  for (const prop in extraAttrs)\n    cellAttrs[prop] = {\n      default: extraAttrs[prop].default,\n      validate: extraAttrs[prop].validate\n    };\n  return {\n    table: {\n      content: \"table_row+\",\n      tableRole: \"table\",\n      isolating: true,\n      group: options.tableGroup,\n      parseDOM: [{ tag: \"table\" }],\n      toDOM() {\n        return [\"table\", [\"tbody\", 0]];\n      }\n    },\n    table_row: {\n      content: \"(table_cell | table_header)*\",\n      tableRole: \"row\",\n      parseDOM: [{ tag: \"tr\" }],\n      toDOM() {\n        return [\"tr\", 0];\n      }\n    },\n    table_cell: {\n      content: options.cellContent,\n      attrs: cellAttrs,\n      tableRole: \"cell\",\n      isolating: true,\n      parseDOM: [\n        { tag: \"td\", getAttrs: (dom) => getCellAttrs(dom, extraAttrs) }\n      ],\n      toDOM(node) {\n        return [\"td\", setCellAttrs(node, extraAttrs), 0];\n      }\n    },\n    table_header: {\n      content: options.cellContent,\n      attrs: cellAttrs,\n      tableRole: \"header_cell\",\n      isolating: true,\n      parseDOM: [\n        { tag: \"th\", getAttrs: (dom) => getCellAttrs(dom, extraAttrs) }\n      ],\n      toDOM(node) {\n        return [\"th\", setCellAttrs(node, extraAttrs), 0];\n      }\n    }\n  };\n}\nfunction tableNodeTypes(schema) {\n  let result = schema.cached.tableNodeTypes;\n  if (!result) {\n    result = schema.cached.tableNodeTypes = {};\n    for (const name in schema.nodes) {\n      const type = schema.nodes[name], role = type.spec.tableRole;\n      if (role) result[role] = type;\n    }\n  }\n  return result;\n}\n\n// src/util.ts\nvar tableEditingKey = new PluginKey(\"selectingCells\");\nfunction cellAround($pos) {\n  for (let d = $pos.depth - 1; d > 0; d--)\n    if ($pos.node(d).type.spec.tableRole == \"row\")\n      return $pos.node(0).resolve($pos.before(d + 1));\n  return null;\n}\nfunction cellWrapping($pos) {\n  for (let d = $pos.depth; d > 0; d--) {\n    const role = $pos.node(d).type.spec.tableRole;\n    if (role === \"cell\" || role === \"header_cell\") return $pos.node(d);\n  }\n  return null;\n}\nfunction isInTable(state) {\n  const $head = state.selection.$head;\n  for (let d = $head.depth; d > 0; d--)\n    if ($head.node(d).type.spec.tableRole == \"row\") return true;\n  return false;\n}\nfunction selectionCell(state) {\n  const sel = state.selection;\n  if (\"$anchorCell\" in sel && sel.$anchorCell) {\n    return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell;\n  } else if (\"node\" in sel && sel.node && sel.node.type.spec.tableRole == \"cell\") {\n    return sel.$anchor;\n  }\n  const $cell = cellAround(sel.$head) || cellNear(sel.$head);\n  if ($cell) {\n    return $cell;\n  }\n  throw new RangeError(`No cell found around position ${sel.head}`);\n}\nfunction cellNear($pos) {\n  for (let after = $pos.nodeAfter, pos = $pos.pos; after; after = after.firstChild, pos++) {\n    const role = after.type.spec.tableRole;\n    if (role == \"cell\" || role == \"header_cell\") return $pos.doc.resolve(pos);\n  }\n  for (let before = $pos.nodeBefore, pos = $pos.pos; before; before = before.lastChild, pos--) {\n    const role = before.type.spec.tableRole;\n    if (role == \"cell\" || role == \"header_cell\")\n      return $pos.doc.resolve(pos - before.nodeSize);\n  }\n}\nfunction pointsAtCell($pos) {\n  return $pos.parent.type.spec.tableRole == \"row\" && !!$pos.nodeAfter;\n}\nfunction moveCellForward($pos) {\n  return $pos.node(0).resolve($pos.pos + $pos.nodeAfter.nodeSize);\n}\nfunction inSameTable($cellA, $cellB) {\n  return $cellA.depth == $cellB.depth && $cellA.pos >= $cellB.start(-1) && $cellA.pos <= $cellB.end(-1);\n}\nfunction findCell($pos) {\n  return TableMap.get($pos.node(-1)).findCell($pos.pos - $pos.start(-1));\n}\nfunction colCount($pos) {\n  return TableMap.get($pos.node(-1)).colCount($pos.pos - $pos.start(-1));\n}\nfunction nextCell($pos, axis, dir) {\n  const table = $pos.node(-1);\n  const map = TableMap.get(table);\n  const tableStart = $pos.start(-1);\n  const moved = map.nextCell($pos.pos - tableStart, axis, dir);\n  return moved == null ? null : $pos.node(0).resolve(tableStart + moved);\n}\nfunction removeColSpan(attrs, pos, n = 1) {\n  const result = { ...attrs, colspan: attrs.colspan - n };\n  if (result.colwidth) {\n    result.colwidth = result.colwidth.slice();\n    result.colwidth.splice(pos, n);\n    if (!result.colwidth.some((w) => w > 0)) result.colwidth = null;\n  }\n  return result;\n}\nfunction addColSpan(attrs, pos, n = 1) {\n  const result = { ...attrs, colspan: attrs.colspan + n };\n  if (result.colwidth) {\n    result.colwidth = result.colwidth.slice();\n    for (let i = 0; i < n; i++) result.colwidth.splice(pos, 0, 0);\n  }\n  return result;\n}\nfunction columnIsHeader(map, table, col) {\n  const headerCell = tableNodeTypes(table.type.schema).header_cell;\n  for (let row = 0; row < map.height; row++)\n    if (table.nodeAt(map.map[col + row * map.width]).type != headerCell)\n      return false;\n  return true;\n}\n\n// src/cellselection.ts\nvar CellSelection = class _CellSelection extends Selection {\n  // A table selection is identified by its anchor and head cells. The\n  // positions given to this constructor should point _before_ two\n  // cells in the same table. They may be the same, to select a single\n  // cell.\n  constructor($anchorCell, $headCell = $anchorCell) {\n    const table = $anchorCell.node(-1);\n    const map = TableMap.get(table);\n    const tableStart = $anchorCell.start(-1);\n    const rect = map.rectBetween(\n      $anchorCell.pos - tableStart,\n      $headCell.pos - tableStart\n    );\n    const doc = $anchorCell.node(0);\n    const cells = map.cellsInRect(rect).filter((p) => p != $headCell.pos - tableStart);\n    cells.unshift($headCell.pos - tableStart);\n    const ranges = cells.map((pos) => {\n      const cell = table.nodeAt(pos);\n      if (!cell) {\n        throw RangeError(`No cell with offset ${pos} found`);\n      }\n      const from = tableStart + pos + 1;\n      return new SelectionRange(\n        doc.resolve(from),\n        doc.resolve(from + cell.content.size)\n      );\n    });\n    super(ranges[0].$from, ranges[0].$to, ranges);\n    this.$anchorCell = $anchorCell;\n    this.$headCell = $headCell;\n  }\n  map(doc, mapping) {\n    const $anchorCell = doc.resolve(mapping.map(this.$anchorCell.pos));\n    const $headCell = doc.resolve(mapping.map(this.$headCell.pos));\n    if (pointsAtCell($anchorCell) && pointsAtCell($headCell) && inSameTable($anchorCell, $headCell)) {\n      const tableChanged = this.$anchorCell.node(-1) != $anchorCell.node(-1);\n      if (tableChanged && this.isRowSelection())\n        return _CellSelection.rowSelection($anchorCell, $headCell);\n      else if (tableChanged && this.isColSelection())\n        return _CellSelection.colSelection($anchorCell, $headCell);\n      else return new _CellSelection($anchorCell, $headCell);\n    }\n    return TextSelection.between($anchorCell, $headCell);\n  }\n  // Returns a rectangular slice of table rows containing the selected\n  // cells.\n  content() {\n    const table = this.$anchorCell.node(-1);\n    const map = TableMap.get(table);\n    const tableStart = this.$anchorCell.start(-1);\n    const rect = map.rectBetween(\n      this.$anchorCell.pos - tableStart,\n      this.$headCell.pos - tableStart\n    );\n    const seen = {};\n    const rows = [];\n    for (let row = rect.top; row < rect.bottom; row++) {\n      const rowContent = [];\n      for (let index = row * map.width + rect.left, col = rect.left; col < rect.right; col++, index++) {\n        const pos = map.map[index];\n        if (seen[pos]) continue;\n        seen[pos] = true;\n        const cellRect = map.findCell(pos);\n        let cell = table.nodeAt(pos);\n        if (!cell) {\n          throw RangeError(`No cell with offset ${pos} found`);\n        }\n        const extraLeft = rect.left - cellRect.left;\n        const extraRight = cellRect.right - rect.right;\n        if (extraLeft > 0 || extraRight > 0) {\n          let attrs = cell.attrs;\n          if (extraLeft > 0) {\n            attrs = removeColSpan(attrs, 0, extraLeft);\n          }\n          if (extraRight > 0) {\n            attrs = removeColSpan(\n              attrs,\n              attrs.colspan - extraRight,\n              extraRight\n            );\n          }\n          if (cellRect.left < rect.left) {\n            cell = cell.type.createAndFill(attrs);\n            if (!cell) {\n              throw RangeError(\n                `Could not create cell with attrs ${JSON.stringify(attrs)}`\n              );\n            }\n          } else {\n            cell = cell.type.create(attrs, cell.content);\n          }\n        }\n        if (cellRect.top < rect.top || cellRect.bottom > rect.bottom) {\n          const attrs = {\n            ...cell.attrs,\n            rowspan: Math.min(cellRect.bottom, rect.bottom) - Math.max(cellRect.top, rect.top)\n          };\n          if (cellRect.top < rect.top) {\n            cell = cell.type.createAndFill(attrs);\n          } else {\n            cell = cell.type.create(attrs, cell.content);\n          }\n        }\n        rowContent.push(cell);\n      }\n      rows.push(table.child(row).copy(Fragment.from(rowContent)));\n    }\n    const fragment = this.isColSelection() && this.isRowSelection() ? table : rows;\n    return new Slice(Fragment.from(fragment), 1, 1);\n  }\n  replace(tr, content = Slice.empty) {\n    const mapFrom = tr.steps.length, ranges = this.ranges;\n    for (let i = 0; i < ranges.length; i++) {\n      const { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n      tr.replace(\n        mapping.map($from.pos),\n        mapping.map($to.pos),\n        i ? Slice.empty : content\n      );\n    }\n    const sel = Selection.findFrom(\n      tr.doc.resolve(tr.mapping.slice(mapFrom).map(this.to)),\n      -1\n    );\n    if (sel) tr.setSelection(sel);\n  }\n  replaceWith(tr, node) {\n    this.replace(tr, new Slice(Fragment.from(node), 0, 0));\n  }\n  forEachCell(f) {\n    const table = this.$anchorCell.node(-1);\n    const map = TableMap.get(table);\n    const tableStart = this.$anchorCell.start(-1);\n    const cells = map.cellsInRect(\n      map.rectBetween(\n        this.$anchorCell.pos - tableStart,\n        this.$headCell.pos - tableStart\n      )\n    );\n    for (let i = 0; i < cells.length; i++) {\n      f(table.nodeAt(cells[i]), tableStart + cells[i]);\n    }\n  }\n  // True if this selection goes all the way from the top to the\n  // bottom of the table.\n  isColSelection() {\n    const anchorTop = this.$anchorCell.index(-1);\n    const headTop = this.$headCell.index(-1);\n    if (Math.min(anchorTop, headTop) > 0) return false;\n    const anchorBottom = anchorTop + this.$anchorCell.nodeAfter.attrs.rowspan;\n    const headBottom = headTop + this.$headCell.nodeAfter.attrs.rowspan;\n    return Math.max(anchorBottom, headBottom) == this.$headCell.node(-1).childCount;\n  }\n  // Returns the smallest column selection that covers the given anchor\n  // and head cell.\n  static colSelection($anchorCell, $headCell = $anchorCell) {\n    const table = $anchorCell.node(-1);\n    const map = TableMap.get(table);\n    const tableStart = $anchorCell.start(-1);\n    const anchorRect = map.findCell($anchorCell.pos - tableStart);\n    const headRect = map.findCell($headCell.pos - tableStart);\n    const doc = $anchorCell.node(0);\n    if (anchorRect.top <= headRect.top) {\n      if (anchorRect.top > 0)\n        $anchorCell = doc.resolve(tableStart + map.map[anchorRect.left]);\n      if (headRect.bottom < map.height)\n        $headCell = doc.resolve(\n          tableStart + map.map[map.width * (map.height - 1) + headRect.right - 1]\n        );\n    } else {\n      if (headRect.top > 0)\n        $headCell = doc.resolve(tableStart + map.map[headRect.left]);\n      if (anchorRect.bottom < map.height)\n        $anchorCell = doc.resolve(\n          tableStart + map.map[map.width * (map.height - 1) + anchorRect.right - 1]\n        );\n    }\n    return new _CellSelection($anchorCell, $headCell);\n  }\n  // True if this selection goes all the way from the left to the\n  // right of the table.\n  isRowSelection() {\n    const table = this.$anchorCell.node(-1);\n    const map = TableMap.get(table);\n    const tableStart = this.$anchorCell.start(-1);\n    const anchorLeft = map.colCount(this.$anchorCell.pos - tableStart);\n    const headLeft = map.colCount(this.$headCell.pos - tableStart);\n    if (Math.min(anchorLeft, headLeft) > 0) return false;\n    const anchorRight = anchorLeft + this.$anchorCell.nodeAfter.attrs.colspan;\n    const headRight = headLeft + this.$headCell.nodeAfter.attrs.colspan;\n    return Math.max(anchorRight, headRight) == map.width;\n  }\n  eq(other) {\n    return other instanceof _CellSelection && other.$anchorCell.pos == this.$anchorCell.pos && other.$headCell.pos == this.$headCell.pos;\n  }\n  // Returns the smallest row selection that covers the given anchor\n  // and head cell.\n  static rowSelection($anchorCell, $headCell = $anchorCell) {\n    const table = $anchorCell.node(-1);\n    const map = TableMap.get(table);\n    const tableStart = $anchorCell.start(-1);\n    const anchorRect = map.findCell($anchorCell.pos - tableStart);\n    const headRect = map.findCell($headCell.pos - tableStart);\n    const doc = $anchorCell.node(0);\n    if (anchorRect.left <= headRect.left) {\n      if (anchorRect.left > 0)\n        $anchorCell = doc.resolve(\n          tableStart + map.map[anchorRect.top * map.width]\n        );\n      if (headRect.right < map.width)\n        $headCell = doc.resolve(\n          tableStart + map.map[map.width * (headRect.top + 1) - 1]\n        );\n    } else {\n      if (headRect.left > 0)\n        $headCell = doc.resolve(tableStart + map.map[headRect.top * map.width]);\n      if (anchorRect.right < map.width)\n        $anchorCell = doc.resolve(\n          tableStart + map.map[map.width * (anchorRect.top + 1) - 1]\n        );\n    }\n    return new _CellSelection($anchorCell, $headCell);\n  }\n  toJSON() {\n    return {\n      type: \"cell\",\n      anchor: this.$anchorCell.pos,\n      head: this.$headCell.pos\n    };\n  }\n  static fromJSON(doc, json) {\n    return new _CellSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n  }\n  static create(doc, anchorCell, headCell = anchorCell) {\n    return new _CellSelection(doc.resolve(anchorCell), doc.resolve(headCell));\n  }\n  getBookmark() {\n    return new CellBookmark(this.$anchorCell.pos, this.$headCell.pos);\n  }\n};\nCellSelection.prototype.visible = false;\nSelection.jsonID(\"cell\", CellSelection);\nvar CellBookmark = class _CellBookmark {\n  constructor(anchor, head) {\n    this.anchor = anchor;\n    this.head = head;\n  }\n  map(mapping) {\n    return new _CellBookmark(mapping.map(this.anchor), mapping.map(this.head));\n  }\n  resolve(doc) {\n    const $anchorCell = doc.resolve(this.anchor), $headCell = doc.resolve(this.head);\n    if ($anchorCell.parent.type.spec.tableRole == \"row\" && $headCell.parent.type.spec.tableRole == \"row\" && $anchorCell.index() < $anchorCell.parent.childCount && $headCell.index() < $headCell.parent.childCount && inSameTable($anchorCell, $headCell))\n      return new CellSelection($anchorCell, $headCell);\n    else return Selection.near($headCell, 1);\n  }\n};\nfunction drawCellSelection(state) {\n  if (!(state.selection instanceof CellSelection)) return null;\n  const cells = [];\n  state.selection.forEachCell((node, pos) => {\n    cells.push(\n      Decoration.node(pos, pos + node.nodeSize, { class: \"selectedCell\" })\n    );\n  });\n  return DecorationSet.create(state.doc, cells);\n}\nfunction isCellBoundarySelection({ $from, $to }) {\n  if ($from.pos == $to.pos || $from.pos < $to.pos - 6) return false;\n  let afterFrom = $from.pos;\n  let beforeTo = $to.pos;\n  let depth = $from.depth;\n  for (; depth >= 0; depth--, afterFrom++)\n    if ($from.after(depth + 1) < $from.end(depth)) break;\n  for (let d = $to.depth; d >= 0; d--, beforeTo--)\n    if ($to.before(d + 1) > $to.start(d)) break;\n  return afterFrom == beforeTo && /row|table/.test($from.node(depth).type.spec.tableRole);\n}\nfunction isTextSelectionAcrossCells({ $from, $to }) {\n  let fromCellBoundaryNode;\n  let toCellBoundaryNode;\n  for (let i = $from.depth; i > 0; i--) {\n    const node = $from.node(i);\n    if (node.type.spec.tableRole === \"cell\" || node.type.spec.tableRole === \"header_cell\") {\n      fromCellBoundaryNode = node;\n      break;\n    }\n  }\n  for (let i = $to.depth; i > 0; i--) {\n    const node = $to.node(i);\n    if (node.type.spec.tableRole === \"cell\" || node.type.spec.tableRole === \"header_cell\") {\n      toCellBoundaryNode = node;\n      break;\n    }\n  }\n  return fromCellBoundaryNode !== toCellBoundaryNode && $to.parentOffset === 0;\n}\nfunction normalizeSelection(state, tr, allowTableNodeSelection) {\n  const sel = (tr || state).selection;\n  const doc = (tr || state).doc;\n  let normalize;\n  let role;\n  if (sel instanceof NodeSelection2 && (role = sel.node.type.spec.tableRole)) {\n    if (role == \"cell\" || role == \"header_cell\") {\n      normalize = CellSelection.create(doc, sel.from);\n    } else if (role == \"row\") {\n      const $cell = doc.resolve(sel.from + 1);\n      normalize = CellSelection.rowSelection($cell, $cell);\n    } else if (!allowTableNodeSelection) {\n      const map = TableMap.get(sel.node);\n      const start = sel.from + 1;\n      const lastCell = start + map.map[map.width * map.height - 1];\n      normalize = CellSelection.create(doc, start + 1, lastCell);\n    }\n  } else if (sel instanceof TextSelection && isCellBoundarySelection(sel)) {\n    normalize = TextSelection.create(doc, sel.from);\n  } else if (sel instanceof TextSelection && isTextSelectionAcrossCells(sel)) {\n    normalize = TextSelection.create(doc, sel.$from.start(), sel.$from.end());\n  }\n  if (normalize) (tr || (tr = state.tr)).setSelection(normalize);\n  return tr;\n}\n\n// src/fixtables.ts\nimport { PluginKey as PluginKey2 } from \"prosemirror-state\";\nvar fixTablesKey = new PluginKey2(\"fix-tables\");\nfunction changedDescendants(old, cur, offset, f) {\n  const oldSize = old.childCount, curSize = cur.childCount;\n  outer: for (let i = 0, j = 0; i < curSize; i++) {\n    const child = cur.child(i);\n    for (let scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) {\n      if (old.child(scan) == child) {\n        j = scan + 1;\n        offset += child.nodeSize;\n        continue outer;\n      }\n    }\n    f(child, offset);\n    if (j < oldSize && old.child(j).sameMarkup(child))\n      changedDescendants(old.child(j), child, offset + 1, f);\n    else child.nodesBetween(0, child.content.size, f, offset + 1);\n    offset += child.nodeSize;\n  }\n}\nfunction fixTables(state, oldState) {\n  let tr;\n  const check = (node, pos) => {\n    if (node.type.spec.tableRole == \"table\")\n      tr = fixTable(state, node, pos, tr);\n  };\n  if (!oldState) state.doc.descendants(check);\n  else if (oldState.doc != state.doc)\n    changedDescendants(oldState.doc, state.doc, 0, check);\n  return tr;\n}\nfunction fixTable(state, table, tablePos, tr) {\n  const map = TableMap.get(table);\n  if (!map.problems) return tr;\n  if (!tr) tr = state.tr;\n  const mustAdd = [];\n  for (let i = 0; i < map.height; i++) mustAdd.push(0);\n  for (let i = 0; i < map.problems.length; i++) {\n    const prob = map.problems[i];\n    if (prob.type == \"collision\") {\n      const cell = table.nodeAt(prob.pos);\n      if (!cell) continue;\n      const attrs = cell.attrs;\n      for (let j = 0; j < attrs.rowspan; j++) mustAdd[prob.row + j] += prob.n;\n      tr.setNodeMarkup(\n        tr.mapping.map(tablePos + 1 + prob.pos),\n        null,\n        removeColSpan(attrs, attrs.colspan - prob.n, prob.n)\n      );\n    } else if (prob.type == \"missing\") {\n      mustAdd[prob.row] += prob.n;\n    } else if (prob.type == \"overlong_rowspan\") {\n      const cell = table.nodeAt(prob.pos);\n      if (!cell) continue;\n      tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n        ...cell.attrs,\n        rowspan: cell.attrs.rowspan - prob.n\n      });\n    } else if (prob.type == \"colwidth mismatch\") {\n      const cell = table.nodeAt(prob.pos);\n      if (!cell) continue;\n      tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n        ...cell.attrs,\n        colwidth: prob.colwidth\n      });\n    } else if (prob.type == \"zero_sized\") {\n      const pos = tr.mapping.map(tablePos);\n      tr.delete(pos, pos + table.nodeSize);\n    }\n  }\n  let first, last;\n  for (let i = 0; i < mustAdd.length; i++)\n    if (mustAdd[i]) {\n      if (first == null) first = i;\n      last = i;\n    }\n  for (let i = 0, pos = tablePos + 1; i < map.height; i++) {\n    const row = table.child(i);\n    const end = pos + row.nodeSize;\n    const add = mustAdd[i];\n    if (add > 0) {\n      let role = \"cell\";\n      if (row.firstChild) {\n        role = row.firstChild.type.spec.tableRole;\n      }\n      const nodes = [];\n      for (let j = 0; j < add; j++) {\n        const node = tableNodeTypes(state.schema)[role].createAndFill();\n        if (node) nodes.push(node);\n      }\n      const side = (i == 0 || first == i - 1) && last == i ? pos + 1 : end - 1;\n      tr.insert(tr.mapping.map(side), nodes);\n    }\n    pos = end;\n  }\n  return tr.setMeta(fixTablesKey, { fixTables: true });\n}\n\n// src/input.ts\nimport { keydownHandler } from \"prosemirror-keymap\";\nimport { Fragment as Fragment4 } from \"prosemirror-model\";\nimport {\n  Selection as Selection2,\n  TextSelection as TextSelection3\n} from \"prosemirror-state\";\n\n// src/commands.ts\nimport {\n  Fragment as Fragment2,\n  Slice as Slice2\n} from \"prosemirror-model\";\nimport {\n  TextSelection as TextSelection2\n} from \"prosemirror-state\";\n\n// src/utils/convert.ts\nfunction convertTableNodeToArrayOfRows(tableNode) {\n  const map = TableMap.get(tableNode);\n  const rows = [];\n  const rowCount = map.height;\n  const colCount2 = map.width;\n  for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n    const row = [];\n    for (let colIndex = 0; colIndex < colCount2; colIndex++) {\n      const cellIndex = rowIndex * colCount2 + colIndex;\n      const cellPos = map.map[cellIndex];\n      if (rowIndex > 0) {\n        const topCellIndex = cellIndex - colCount2;\n        const topCellPos = map.map[topCellIndex];\n        if (cellPos === topCellPos) {\n          row.push(null);\n          continue;\n        }\n      }\n      if (colIndex > 0) {\n        const leftCellIndex = cellIndex - 1;\n        const leftCellPos = map.map[leftCellIndex];\n        if (cellPos === leftCellPos) {\n          row.push(null);\n          continue;\n        }\n      }\n      row.push(tableNode.nodeAt(cellPos));\n    }\n    rows.push(row);\n  }\n  return rows;\n}\nfunction convertArrayOfRowsToTableNode(tableNode, arrayOfNodes) {\n  const newRows = [];\n  const map = TableMap.get(tableNode);\n  const rowCount = map.height;\n  const colCount2 = map.width;\n  for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n    const oldRow = tableNode.child(rowIndex);\n    const newCells = [];\n    for (let colIndex = 0; colIndex < colCount2; colIndex++) {\n      const cell = arrayOfNodes[rowIndex][colIndex];\n      if (!cell) {\n        continue;\n      }\n      const cellPos = map.map[rowIndex * map.width + colIndex];\n      const oldCell = tableNode.nodeAt(cellPos);\n      if (!oldCell) {\n        continue;\n      }\n      const newCell = oldCell.type.createChecked(\n        cell.attrs,\n        cell.content,\n        cell.marks\n      );\n      newCells.push(newCell);\n    }\n    const newRow = oldRow.type.createChecked(\n      oldRow.attrs,\n      newCells,\n      oldRow.marks\n    );\n    newRows.push(newRow);\n  }\n  const newTable = tableNode.type.createChecked(\n    tableNode.attrs,\n    newRows,\n    tableNode.marks\n  );\n  return newTable;\n}\n\n// src/utils/query.ts\nfunction isCellSelection(value) {\n  return value instanceof CellSelection;\n}\nfunction findTable($pos) {\n  return findParentNode((node) => node.type.spec.tableRole === \"table\", $pos);\n}\nfunction findCellRange(selection, anchorHit, headHit) {\n  var _a, _b;\n  if (anchorHit == null && headHit == null && isCellSelection(selection)) {\n    return [selection.$anchorCell, selection.$headCell];\n  }\n  const anchor = (_a = anchorHit != null ? anchorHit : headHit) != null ? _a : selection.anchor;\n  const head = (_b = headHit != null ? headHit : anchorHit) != null ? _b : selection.head;\n  const doc = selection.$head.doc;\n  const $anchorCell = findCellPos(doc, anchor);\n  const $headCell = findCellPos(doc, head);\n  if ($anchorCell && $headCell && inSameTable($anchorCell, $headCell)) {\n    return [$anchorCell, $headCell];\n  }\n  return null;\n}\nfunction findCellPos(doc, pos) {\n  const $pos = doc.resolve(pos);\n  return cellAround($pos) || cellNear($pos);\n}\nfunction findParentNode(predicate, $pos) {\n  for (let depth = $pos.depth; depth >= 0; depth -= 1) {\n    const node = $pos.node(depth);\n    if (predicate(node)) {\n      const pos = depth === 0 ? 0 : $pos.before(depth);\n      const start = $pos.start(depth);\n      return { node, pos, start, depth };\n    }\n  }\n  return null;\n}\n\n// src/utils/get-cells.ts\nfunction getCellsInColumn(columnIndex, selection) {\n  const table = findTable(selection.$from);\n  if (!table) {\n    return;\n  }\n  const map = TableMap.get(table.node);\n  if (columnIndex < 0 || columnIndex > map.width - 1) {\n    return;\n  }\n  const cells = map.cellsInRect({\n    left: columnIndex,\n    right: columnIndex + 1,\n    top: 0,\n    bottom: map.height\n  });\n  return cells.map((nodePos) => {\n    const node = table.node.nodeAt(nodePos);\n    const pos = nodePos + table.start;\n    return { pos, start: pos + 1, node, depth: table.depth + 2 };\n  });\n}\nfunction getCellsInRow(rowIndex, selection) {\n  const table = findTable(selection.$from);\n  if (!table) {\n    return;\n  }\n  const map = TableMap.get(table.node);\n  if (rowIndex < 0 || rowIndex > map.height - 1) {\n    return;\n  }\n  const cells = map.cellsInRect({\n    left: 0,\n    right: map.width,\n    top: rowIndex,\n    bottom: rowIndex + 1\n  });\n  return cells.map((nodePos) => {\n    const node = table.node.nodeAt(nodePos);\n    const pos = nodePos + table.start;\n    return { pos, start: pos + 1, node, depth: table.depth + 2 };\n  });\n}\n\n// src/utils/selection-range.ts\nfunction getSelectionRangeInColumn(tr, startColIndex, endColIndex = startColIndex) {\n  let startIndex = startColIndex;\n  let endIndex = endColIndex;\n  for (let i = startColIndex; i >= 0; i--) {\n    const cells = getCellsInColumn(i, tr.selection);\n    if (cells) {\n      cells.forEach((cell) => {\n        const maybeEndIndex = cell.node.attrs.colspan + i - 1;\n        if (maybeEndIndex >= startIndex) {\n          startIndex = i;\n        }\n        if (maybeEndIndex > endIndex) {\n          endIndex = maybeEndIndex;\n        }\n      });\n    }\n  }\n  for (let i = startColIndex; i <= endIndex; i++) {\n    const cells = getCellsInColumn(i, tr.selection);\n    if (cells) {\n      cells.forEach((cell) => {\n        const maybeEndIndex = cell.node.attrs.colspan + i - 1;\n        if (cell.node.attrs.colspan > 1 && maybeEndIndex > endIndex) {\n          endIndex = maybeEndIndex;\n        }\n      });\n    }\n  }\n  const indexes = [];\n  for (let i = startIndex; i <= endIndex; i++) {\n    const maybeCells = getCellsInColumn(i, tr.selection);\n    if (maybeCells && maybeCells.length > 0) {\n      indexes.push(i);\n    }\n  }\n  startIndex = indexes[0];\n  endIndex = indexes[indexes.length - 1];\n  const firstSelectedColumnCells = getCellsInColumn(startIndex, tr.selection);\n  const firstRowCells = getCellsInRow(0, tr.selection);\n  if (!firstSelectedColumnCells || !firstRowCells) {\n    return;\n  }\n  const $anchor = tr.doc.resolve(\n    firstSelectedColumnCells[firstSelectedColumnCells.length - 1].pos\n  );\n  let headCell;\n  for (let i = endIndex; i >= startIndex; i--) {\n    const columnCells = getCellsInColumn(i, tr.selection);\n    if (columnCells && columnCells.length > 0) {\n      for (let j = firstRowCells.length - 1; j >= 0; j--) {\n        if (firstRowCells[j].pos === columnCells[0].pos) {\n          headCell = columnCells[0];\n          break;\n        }\n      }\n      if (headCell) {\n        break;\n      }\n    }\n  }\n  if (!headCell) {\n    return;\n  }\n  const $head = tr.doc.resolve(headCell.pos);\n  return { $anchor, $head, indexes };\n}\nfunction getSelectionRangeInRow(tr, startRowIndex, endRowIndex = startRowIndex) {\n  let startIndex = startRowIndex;\n  let endIndex = endRowIndex;\n  for (let i = startRowIndex; i >= 0; i--) {\n    const cells = getCellsInRow(i, tr.selection);\n    if (cells) {\n      cells.forEach((cell) => {\n        const maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n        if (maybeEndIndex >= startIndex) {\n          startIndex = i;\n        }\n        if (maybeEndIndex > endIndex) {\n          endIndex = maybeEndIndex;\n        }\n      });\n    }\n  }\n  for (let i = startRowIndex; i <= endIndex; i++) {\n    const cells = getCellsInRow(i, tr.selection);\n    if (cells) {\n      cells.forEach((cell) => {\n        const maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n        if (cell.node.attrs.rowspan > 1 && maybeEndIndex > endIndex) {\n          endIndex = maybeEndIndex;\n        }\n      });\n    }\n  }\n  const indexes = [];\n  for (let i = startIndex; i <= endIndex; i++) {\n    const maybeCells = getCellsInRow(i, tr.selection);\n    if (maybeCells && maybeCells.length > 0) {\n      indexes.push(i);\n    }\n  }\n  startIndex = indexes[0];\n  endIndex = indexes[indexes.length - 1];\n  const firstSelectedRowCells = getCellsInRow(startIndex, tr.selection);\n  const firstColumnCells = getCellsInColumn(0, tr.selection);\n  if (!firstSelectedRowCells || !firstColumnCells) {\n    return;\n  }\n  const $anchor = tr.doc.resolve(\n    firstSelectedRowCells[firstSelectedRowCells.length - 1].pos\n  );\n  let headCell;\n  for (let i = endIndex; i >= startIndex; i--) {\n    const rowCells = getCellsInRow(i, tr.selection);\n    if (rowCells && rowCells.length > 0) {\n      for (let j = firstColumnCells.length - 1; j >= 0; j--) {\n        if (firstColumnCells[j].pos === rowCells[0].pos) {\n          headCell = rowCells[0];\n          break;\n        }\n      }\n      if (headCell) {\n        break;\n      }\n    }\n  }\n  if (!headCell) {\n    return;\n  }\n  const $head = tr.doc.resolve(headCell.pos);\n  return { $anchor, $head, indexes };\n}\n\n// src/utils/move-row-in-array-of-rows.ts\nfunction moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, directionOverride) {\n  const direction = indexesOrigin[0] > indexesTarget[0] ? -1 : 1;\n  const rowsExtracted = rows.splice(indexesOrigin[0], indexesOrigin.length);\n  const positionOffset = rowsExtracted.length % 2 === 0 ? 1 : 0;\n  let target;\n  if (directionOverride === -1 && direction === 1) {\n    target = indexesTarget[0] - 1;\n  } else if (directionOverride === 1 && direction === -1) {\n    target = indexesTarget[indexesTarget.length - 1] - positionOffset + 1;\n  } else {\n    target = direction === -1 ? indexesTarget[0] : indexesTarget[indexesTarget.length - 1] - positionOffset;\n  }\n  rows.splice(target, 0, ...rowsExtracted);\n  return rows;\n}\n\n// src/utils/transpose.ts\nfunction transpose(array) {\n  return array[0].map((_, i) => {\n    return array.map((column) => column[i]);\n  });\n}\n\n// src/utils/move-column.ts\nfunction moveColumn(moveColParams) {\n  var _a, _b;\n  const { tr, originIndex, targetIndex, select, pos } = moveColParams;\n  const $pos = tr.doc.resolve(pos);\n  const table = findTable($pos);\n  if (!table) return false;\n  const indexesOriginColumn = (_a = getSelectionRangeInColumn(\n    tr,\n    originIndex\n  )) == null ? void 0 : _a.indexes;\n  const indexesTargetColumn = (_b = getSelectionRangeInColumn(\n    tr,\n    targetIndex\n  )) == null ? void 0 : _b.indexes;\n  if (!indexesOriginColumn || !indexesTargetColumn) return false;\n  if (indexesOriginColumn.includes(targetIndex)) return false;\n  const newTable = moveTableColumn(\n    table.node,\n    indexesOriginColumn,\n    indexesTargetColumn,\n    0\n  );\n  tr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n  if (!select) return true;\n  const map = TableMap.get(newTable);\n  const start = table.start;\n  const index = targetIndex;\n  const lastCell = map.positionAt(map.height - 1, index, newTable);\n  const $lastCell = tr.doc.resolve(start + lastCell);\n  const firstCell = map.positionAt(0, index, newTable);\n  const $firstCell = tr.doc.resolve(start + firstCell);\n  tr.setSelection(CellSelection.colSelection($lastCell, $firstCell));\n  return true;\n}\nfunction moveTableColumn(table, indexesOrigin, indexesTarget, direction) {\n  let rows = transpose(convertTableNodeToArrayOfRows(table));\n  rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n  rows = transpose(rows);\n  return convertArrayOfRowsToTableNode(table, rows);\n}\n\n// src/utils/move-row.ts\nfunction moveRow(moveRowParams) {\n  var _a, _b;\n  const { tr, originIndex, targetIndex, select, pos } = moveRowParams;\n  const $pos = tr.doc.resolve(pos);\n  const table = findTable($pos);\n  if (!table) return false;\n  const indexesOriginRow = (_a = getSelectionRangeInRow(tr, originIndex)) == null ? void 0 : _a.indexes;\n  const indexesTargetRow = (_b = getSelectionRangeInRow(tr, targetIndex)) == null ? void 0 : _b.indexes;\n  if (!indexesOriginRow || !indexesTargetRow) return false;\n  if (indexesOriginRow.includes(targetIndex)) return false;\n  const newTable = moveTableRow(\n    table.node,\n    indexesOriginRow,\n    indexesTargetRow,\n    0\n  );\n  tr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n  if (!select) return true;\n  const map = TableMap.get(newTable);\n  const start = table.start;\n  const index = targetIndex;\n  const lastCell = map.positionAt(index, map.width - 1, newTable);\n  const $lastCell = tr.doc.resolve(start + lastCell);\n  const firstCell = map.positionAt(index, 0, newTable);\n  const $firstCell = tr.doc.resolve(start + firstCell);\n  tr.setSelection(CellSelection.rowSelection($lastCell, $firstCell));\n  return true;\n}\nfunction moveTableRow(table, indexesOrigin, indexesTarget, direction) {\n  let rows = convertTableNodeToArrayOfRows(table);\n  rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n  return convertArrayOfRowsToTableNode(table, rows);\n}\n\n// src/commands.ts\nfunction selectedRect(state) {\n  const sel = state.selection;\n  const $pos = selectionCell(state);\n  const table = $pos.node(-1);\n  const tableStart = $pos.start(-1);\n  const map = TableMap.get(table);\n  const rect = sel instanceof CellSelection ? map.rectBetween(\n    sel.$anchorCell.pos - tableStart,\n    sel.$headCell.pos - tableStart\n  ) : map.findCell($pos.pos - tableStart);\n  return { ...rect, tableStart, map, table };\n}\nfunction addColumn(tr, { map, tableStart, table }, col) {\n  let refColumn = col > 0 ? -1 : 0;\n  if (columnIsHeader(map, table, col + refColumn)) {\n    refColumn = col == 0 || col == map.width ? null : 0;\n  }\n  for (let row = 0; row < map.height; row++) {\n    const index = row * map.width + col;\n    if (col > 0 && col < map.width && map.map[index - 1] == map.map[index]) {\n      const pos = map.map[index];\n      const cell = table.nodeAt(pos);\n      tr.setNodeMarkup(\n        tr.mapping.map(tableStart + pos),\n        null,\n        addColSpan(cell.attrs, col - map.colCount(pos))\n      );\n      row += cell.attrs.rowspan - 1;\n    } else {\n      const type = refColumn == null ? tableNodeTypes(table.type.schema).cell : table.nodeAt(map.map[index + refColumn]).type;\n      const pos = map.positionAt(row, col, table);\n      tr.insert(tr.mapping.map(tableStart + pos), type.createAndFill());\n    }\n  }\n  return tr;\n}\nfunction addColumnBefore(state, dispatch) {\n  if (!isInTable(state)) return false;\n  if (dispatch) {\n    const rect = selectedRect(state);\n    dispatch(addColumn(state.tr, rect, rect.left));\n  }\n  return true;\n}\nfunction addColumnAfter(state, dispatch) {\n  if (!isInTable(state)) return false;\n  if (dispatch) {\n    const rect = selectedRect(state);\n    dispatch(addColumn(state.tr, rect, rect.right));\n  }\n  return true;\n}\nfunction removeColumn(tr, { map, table, tableStart }, col) {\n  const mapStart = tr.mapping.maps.length;\n  for (let row = 0; row < map.height; ) {\n    const index = row * map.width + col;\n    const pos = map.map[index];\n    const cell = table.nodeAt(pos);\n    const attrs = cell.attrs;\n    if (col > 0 && map.map[index - 1] == pos || col < map.width - 1 && map.map[index + 1] == pos) {\n      tr.setNodeMarkup(\n        tr.mapping.slice(mapStart).map(tableStart + pos),\n        null,\n        removeColSpan(attrs, col - map.colCount(pos))\n      );\n    } else {\n      const start = tr.mapping.slice(mapStart).map(tableStart + pos);\n      tr.delete(start, start + cell.nodeSize);\n    }\n    row += attrs.rowspan;\n  }\n}\nfunction deleteColumn(state, dispatch) {\n  if (!isInTable(state)) return false;\n  if (dispatch) {\n    const rect = selectedRect(state);\n    const tr = state.tr;\n    if (rect.left == 0 && rect.right == rect.map.width) return false;\n    for (let i = rect.right - 1; ; i--) {\n      removeColumn(tr, rect, i);\n      if (i == rect.left) break;\n      const table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n      if (!table) {\n        throw RangeError(\"No table found\");\n      }\n      rect.table = table;\n      rect.map = TableMap.get(table);\n    }\n    dispatch(tr);\n  }\n  return true;\n}\nfunction rowIsHeader(map, table, row) {\n  var _a;\n  const headerCell = tableNodeTypes(table.type.schema).header_cell;\n  for (let col = 0; col < map.width; col++)\n    if (((_a = table.nodeAt(map.map[col + row * map.width])) == null ? void 0 : _a.type) != headerCell)\n      return false;\n  return true;\n}\nfunction addRow(tr, { map, tableStart, table }, row) {\n  var _a;\n  let rowPos = tableStart;\n  for (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize;\n  const cells = [];\n  let refRow = row > 0 ? -1 : 0;\n  if (rowIsHeader(map, table, row + refRow))\n    refRow = row == 0 || row == map.height ? null : 0;\n  for (let col = 0, index = map.width * row; col < map.width; col++, index++) {\n    if (row > 0 && row < map.height && map.map[index] == map.map[index - map.width]) {\n      const pos = map.map[index];\n      const attrs = table.nodeAt(pos).attrs;\n      tr.setNodeMarkup(tableStart + pos, null, {\n        ...attrs,\n        rowspan: attrs.rowspan + 1\n      });\n      col += attrs.colspan - 1;\n    } else {\n      const type = refRow == null ? tableNodeTypes(table.type.schema).cell : (_a = table.nodeAt(map.map[index + refRow * map.width])) == null ? void 0 : _a.type;\n      const node = type == null ? void 0 : type.createAndFill();\n      if (node) cells.push(node);\n    }\n  }\n  tr.insert(rowPos, tableNodeTypes(table.type.schema).row.create(null, cells));\n  return tr;\n}\nfunction addRowBefore(state, dispatch) {\n  if (!isInTable(state)) return false;\n  if (dispatch) {\n    const rect = selectedRect(state);\n    dispatch(addRow(state.tr, rect, rect.top));\n  }\n  return true;\n}\nfunction addRowAfter(state, dispatch) {\n  if (!isInTable(state)) return false;\n  if (dispatch) {\n    const rect = selectedRect(state);\n    dispatch(addRow(state.tr, rect, rect.bottom));\n  }\n  return true;\n}\nfunction removeRow(tr, { map, table, tableStart }, row) {\n  let rowPos = 0;\n  for (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize;\n  const nextRow = rowPos + table.child(row).nodeSize;\n  const mapFrom = tr.mapping.maps.length;\n  tr.delete(rowPos + tableStart, nextRow + tableStart);\n  const seen = /* @__PURE__ */ new Set();\n  for (let col = 0, index = row * map.width; col < map.width; col++, index++) {\n    const pos = map.map[index];\n    if (seen.has(pos)) continue;\n    seen.add(pos);\n    if (row > 0 && pos == map.map[index - map.width]) {\n      const attrs = table.nodeAt(pos).attrs;\n      tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + tableStart), null, {\n        ...attrs,\n        rowspan: attrs.rowspan - 1\n      });\n      col += attrs.colspan - 1;\n    } else if (row < map.height && pos == map.map[index + map.width]) {\n      const cell = table.nodeAt(pos);\n      const attrs = cell.attrs;\n      const copy = cell.type.create(\n        { ...attrs, rowspan: cell.attrs.rowspan - 1 },\n        cell.content\n      );\n      const newPos = map.positionAt(row + 1, col, table);\n      tr.insert(tr.mapping.slice(mapFrom).map(tableStart + newPos), copy);\n      col += attrs.colspan - 1;\n    }\n  }\n}\nfunction deleteRow(state, dispatch) {\n  if (!isInTable(state)) return false;\n  if (dispatch) {\n    const rect = selectedRect(state), tr = state.tr;\n    if (rect.top == 0 && rect.bottom == rect.map.height) return false;\n    for (let i = rect.bottom - 1; ; i--) {\n      removeRow(tr, rect, i);\n      if (i == rect.top) break;\n      const table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n      if (!table) {\n        throw RangeError(\"No table found\");\n      }\n      rect.table = table;\n      rect.map = TableMap.get(rect.table);\n    }\n    dispatch(tr);\n  }\n  return true;\n}\nfunction isEmpty(cell) {\n  const c = cell.content;\n  return c.childCount == 1 && c.child(0).isTextblock && c.child(0).childCount == 0;\n}\nfunction cellsOverlapRectangle({ width, height, map }, rect) {\n  let indexTop = rect.top * width + rect.left, indexLeft = indexTop;\n  let indexBottom = (rect.bottom - 1) * width + rect.left, indexRight = indexTop + (rect.right - rect.left - 1);\n  for (let i = rect.top; i < rect.bottom; i++) {\n    if (rect.left > 0 && map[indexLeft] == map[indexLeft - 1] || rect.right < width && map[indexRight] == map[indexRight + 1])\n      return true;\n    indexLeft += width;\n    indexRight += width;\n  }\n  for (let i = rect.left; i < rect.right; i++) {\n    if (rect.top > 0 && map[indexTop] == map[indexTop - width] || rect.bottom < height && map[indexBottom] == map[indexBottom + width])\n      return true;\n    indexTop++;\n    indexBottom++;\n  }\n  return false;\n}\nfunction mergeCells(state, dispatch) {\n  const sel = state.selection;\n  if (!(sel instanceof CellSelection) || sel.$anchorCell.pos == sel.$headCell.pos)\n    return false;\n  const rect = selectedRect(state), { map } = rect;\n  if (cellsOverlapRectangle(map, rect)) return false;\n  if (dispatch) {\n    const tr = state.tr;\n    const seen = {};\n    let content = Fragment2.empty;\n    let mergedPos;\n    let mergedCell;\n    for (let row = rect.top; row < rect.bottom; row++) {\n      for (let col = rect.left; col < rect.right; col++) {\n        const cellPos = map.map[row * map.width + col];\n        const cell = rect.table.nodeAt(cellPos);\n        if (seen[cellPos] || !cell) continue;\n        seen[cellPos] = true;\n        if (mergedPos == null) {\n          mergedPos = cellPos;\n          mergedCell = cell;\n        } else {\n          if (!isEmpty(cell)) content = content.append(cell.content);\n          const mapped = tr.mapping.map(cellPos + rect.tableStart);\n          tr.delete(mapped, mapped + cell.nodeSize);\n        }\n      }\n    }\n    if (mergedPos == null || mergedCell == null) {\n      return true;\n    }\n    tr.setNodeMarkup(mergedPos + rect.tableStart, null, {\n      ...addColSpan(\n        mergedCell.attrs,\n        mergedCell.attrs.colspan,\n        rect.right - rect.left - mergedCell.attrs.colspan\n      ),\n      rowspan: rect.bottom - rect.top\n    });\n    if (content.size) {\n      const end = mergedPos + 1 + mergedCell.content.size;\n      const start = isEmpty(mergedCell) ? mergedPos + 1 : end;\n      tr.replaceWith(start + rect.tableStart, end + rect.tableStart, content);\n    }\n    tr.setSelection(\n      new CellSelection(tr.doc.resolve(mergedPos + rect.tableStart))\n    );\n    dispatch(tr);\n  }\n  return true;\n}\nfunction splitCell(state, dispatch) {\n  const nodeTypes = tableNodeTypes(state.schema);\n  return splitCellWithType(({ node }) => {\n    return nodeTypes[node.type.spec.tableRole];\n  })(state, dispatch);\n}\nfunction splitCellWithType(getCellType) {\n  return (state, dispatch) => {\n    var _a;\n    const sel = state.selection;\n    let cellNode;\n    let cellPos;\n    if (!(sel instanceof CellSelection)) {\n      cellNode = cellWrapping(sel.$from);\n      if (!cellNode) return false;\n      cellPos = (_a = cellAround(sel.$from)) == null ? void 0 : _a.pos;\n    } else {\n      if (sel.$anchorCell.pos != sel.$headCell.pos) return false;\n      cellNode = sel.$anchorCell.nodeAfter;\n      cellPos = sel.$anchorCell.pos;\n    }\n    if (cellNode == null || cellPos == null) {\n      return false;\n    }\n    if (cellNode.attrs.colspan == 1 && cellNode.attrs.rowspan == 1) {\n      return false;\n    }\n    if (dispatch) {\n      let baseAttrs = cellNode.attrs;\n      const attrs = [];\n      const colwidth = baseAttrs.colwidth;\n      if (baseAttrs.rowspan > 1) baseAttrs = { ...baseAttrs, rowspan: 1 };\n      if (baseAttrs.colspan > 1) baseAttrs = { ...baseAttrs, colspan: 1 };\n      const rect = selectedRect(state), tr = state.tr;\n      for (let i = 0; i < rect.right - rect.left; i++)\n        attrs.push(\n          colwidth ? {\n            ...baseAttrs,\n            colwidth: colwidth && colwidth[i] ? [colwidth[i]] : null\n          } : baseAttrs\n        );\n      let lastCell;\n      for (let row = rect.top; row < rect.bottom; row++) {\n        let pos = rect.map.positionAt(row, rect.left, rect.table);\n        if (row == rect.top) pos += cellNode.nodeSize;\n        for (let col = rect.left, i = 0; col < rect.right; col++, i++) {\n          if (col == rect.left && row == rect.top) continue;\n          tr.insert(\n            lastCell = tr.mapping.map(pos + rect.tableStart, 1),\n            getCellType({ node: cellNode, row, col }).createAndFill(attrs[i])\n          );\n        }\n      }\n      tr.setNodeMarkup(\n        cellPos,\n        getCellType({ node: cellNode, row: rect.top, col: rect.left }),\n        attrs[0]\n      );\n      if (sel instanceof CellSelection)\n        tr.setSelection(\n          new CellSelection(\n            tr.doc.resolve(sel.$anchorCell.pos),\n            lastCell ? tr.doc.resolve(lastCell) : void 0\n          )\n        );\n      dispatch(tr);\n    }\n    return true;\n  };\n}\nfunction setCellAttr(name, value) {\n  return function(state, dispatch) {\n    if (!isInTable(state)) return false;\n    const $cell = selectionCell(state);\n    if ($cell.nodeAfter.attrs[name] === value) return false;\n    if (dispatch) {\n      const tr = state.tr;\n      if (state.selection instanceof CellSelection)\n        state.selection.forEachCell((node, pos) => {\n          if (node.attrs[name] !== value)\n            tr.setNodeMarkup(pos, null, {\n              ...node.attrs,\n              [name]: value\n            });\n        });\n      else\n        tr.setNodeMarkup($cell.pos, null, {\n          ...$cell.nodeAfter.attrs,\n          [name]: value\n        });\n      dispatch(tr);\n    }\n    return true;\n  };\n}\nfunction deprecated_toggleHeader(type) {\n  return function(state, dispatch) {\n    if (!isInTable(state)) return false;\n    if (dispatch) {\n      const types = tableNodeTypes(state.schema);\n      const rect = selectedRect(state), tr = state.tr;\n      const cells = rect.map.cellsInRect(\n        type == \"column\" ? {\n          left: rect.left,\n          top: 0,\n          right: rect.right,\n          bottom: rect.map.height\n        } : type == \"row\" ? {\n          left: 0,\n          top: rect.top,\n          right: rect.map.width,\n          bottom: rect.bottom\n        } : rect\n      );\n      const nodes = cells.map((pos) => rect.table.nodeAt(pos));\n      for (let i = 0; i < cells.length; i++)\n        if (nodes[i].type == types.header_cell)\n          tr.setNodeMarkup(\n            rect.tableStart + cells[i],\n            types.cell,\n            nodes[i].attrs\n          );\n      if (tr.steps.length == 0)\n        for (let i = 0; i < cells.length; i++)\n          tr.setNodeMarkup(\n            rect.tableStart + cells[i],\n            types.header_cell,\n            nodes[i].attrs\n          );\n      dispatch(tr);\n    }\n    return true;\n  };\n}\nfunction isHeaderEnabledByType(type, rect, types) {\n  const cellPositions = rect.map.cellsInRect({\n    left: 0,\n    top: 0,\n    right: type == \"row\" ? rect.map.width : 1,\n    bottom: type == \"column\" ? rect.map.height : 1\n  });\n  for (let i = 0; i < cellPositions.length; i++) {\n    const cell = rect.table.nodeAt(cellPositions[i]);\n    if (cell && cell.type !== types.header_cell) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction toggleHeader(type, options) {\n  options = options || { useDeprecatedLogic: false };\n  if (options.useDeprecatedLogic) return deprecated_toggleHeader(type);\n  return function(state, dispatch) {\n    if (!isInTable(state)) return false;\n    if (dispatch) {\n      const types = tableNodeTypes(state.schema);\n      const rect = selectedRect(state), tr = state.tr;\n      const isHeaderRowEnabled = isHeaderEnabledByType(\"row\", rect, types);\n      const isHeaderColumnEnabled = isHeaderEnabledByType(\n        \"column\",\n        rect,\n        types\n      );\n      const isHeaderEnabled = type === \"column\" ? isHeaderRowEnabled : type === \"row\" ? isHeaderColumnEnabled : false;\n      const selectionStartsAt = isHeaderEnabled ? 1 : 0;\n      const cellsRect = type == \"column\" ? {\n        left: 0,\n        top: selectionStartsAt,\n        right: 1,\n        bottom: rect.map.height\n      } : type == \"row\" ? {\n        left: selectionStartsAt,\n        top: 0,\n        right: rect.map.width,\n        bottom: 1\n      } : rect;\n      const newType = type == \"column\" ? isHeaderColumnEnabled ? types.cell : types.header_cell : type == \"row\" ? isHeaderRowEnabled ? types.cell : types.header_cell : types.cell;\n      rect.map.cellsInRect(cellsRect).forEach((relativeCellPos) => {\n        const cellPos = relativeCellPos + rect.tableStart;\n        const cell = tr.doc.nodeAt(cellPos);\n        if (cell) {\n          tr.setNodeMarkup(cellPos, newType, cell.attrs);\n        }\n      });\n      dispatch(tr);\n    }\n    return true;\n  };\n}\nvar toggleHeaderRow = toggleHeader(\"row\", {\n  useDeprecatedLogic: true\n});\nvar toggleHeaderColumn = toggleHeader(\"column\", {\n  useDeprecatedLogic: true\n});\nvar toggleHeaderCell = toggleHeader(\"cell\", {\n  useDeprecatedLogic: true\n});\nfunction findNextCell($cell, dir) {\n  if (dir < 0) {\n    const before = $cell.nodeBefore;\n    if (before) return $cell.pos - before.nodeSize;\n    for (let row = $cell.index(-1) - 1, rowEnd = $cell.before(); row >= 0; row--) {\n      const rowNode = $cell.node(-1).child(row);\n      const lastChild = rowNode.lastChild;\n      if (lastChild) {\n        return rowEnd - 1 - lastChild.nodeSize;\n      }\n      rowEnd -= rowNode.nodeSize;\n    }\n  } else {\n    if ($cell.index() < $cell.parent.childCount - 1) {\n      return $cell.pos + $cell.nodeAfter.nodeSize;\n    }\n    const table = $cell.node(-1);\n    for (let row = $cell.indexAfter(-1), rowStart = $cell.after(); row < table.childCount; row++) {\n      const rowNode = table.child(row);\n      if (rowNode.childCount) return rowStart + 1;\n      rowStart += rowNode.nodeSize;\n    }\n  }\n  return null;\n}\nfunction goToNextCell(direction) {\n  return function(state, dispatch) {\n    if (!isInTable(state)) return false;\n    const cell = findNextCell(selectionCell(state), direction);\n    if (cell == null) return false;\n    if (dispatch) {\n      const $cell = state.doc.resolve(cell);\n      dispatch(\n        state.tr.setSelection(TextSelection2.between($cell, moveCellForward($cell))).scrollIntoView()\n      );\n    }\n    return true;\n  };\n}\nfunction deleteTable(state, dispatch) {\n  const $pos = state.selection.$anchor;\n  for (let d = $pos.depth; d > 0; d--) {\n    const node = $pos.node(d);\n    if (node.type.spec.tableRole == \"table\") {\n      if (dispatch)\n        dispatch(\n          state.tr.delete($pos.before(d), $pos.after(d)).scrollIntoView()\n        );\n      return true;\n    }\n  }\n  return false;\n}\nfunction deleteCellSelection(state, dispatch) {\n  const sel = state.selection;\n  if (!(sel instanceof CellSelection)) return false;\n  if (dispatch) {\n    const tr = state.tr;\n    const baseContent = tableNodeTypes(state.schema).cell.createAndFill().content;\n    sel.forEachCell((cell, pos) => {\n      if (!cell.content.eq(baseContent))\n        tr.replace(\n          tr.mapping.map(pos + 1),\n          tr.mapping.map(pos + cell.nodeSize - 1),\n          new Slice2(baseContent, 0, 0)\n        );\n    });\n    if (tr.docChanged) dispatch(tr);\n  }\n  return true;\n}\nfunction moveTableRow2(options) {\n  return (state, dispatch) => {\n    const {\n      from: originIndex,\n      to: targetIndex,\n      select = true,\n      pos = state.selection.from\n    } = options;\n    const tr = state.tr;\n    if (moveRow({ tr, originIndex, targetIndex, select, pos })) {\n      dispatch == null ? void 0 : dispatch(tr);\n      return true;\n    }\n    return false;\n  };\n}\nfunction moveTableColumn2(options) {\n  return (state, dispatch) => {\n    const {\n      from: originIndex,\n      to: targetIndex,\n      select = true,\n      pos = state.selection.from\n    } = options;\n    const tr = state.tr;\n    if (moveColumn({ tr, originIndex, targetIndex, select, pos })) {\n      dispatch == null ? void 0 : dispatch(tr);\n      return true;\n    }\n    return false;\n  };\n}\n\n// src/copypaste.ts\nimport { Fragment as Fragment3, Slice as Slice3 } from \"prosemirror-model\";\nimport { Transform } from \"prosemirror-transform\";\nfunction pastedCells(slice) {\n  if (!slice.size) return null;\n  let { content, openStart, openEnd } = slice;\n  while (content.childCount == 1 && (openStart > 0 && openEnd > 0 || content.child(0).type.spec.tableRole == \"table\")) {\n    openStart--;\n    openEnd--;\n    content = content.child(0).content;\n  }\n  const first = content.child(0);\n  const role = first.type.spec.tableRole;\n  const schema = first.type.schema, rows = [];\n  if (role == \"row\") {\n    for (let i = 0; i < content.childCount; i++) {\n      let cells = content.child(i).content;\n      const left = i ? 0 : Math.max(0, openStart - 1);\n      const right = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1);\n      if (left || right)\n        cells = fitSlice(\n          tableNodeTypes(schema).row,\n          new Slice3(cells, left, right)\n        ).content;\n      rows.push(cells);\n    }\n  } else if (role == \"cell\" || role == \"header_cell\") {\n    rows.push(\n      openStart || openEnd ? fitSlice(\n        tableNodeTypes(schema).row,\n        new Slice3(content, openStart, openEnd)\n      ).content : content\n    );\n  } else {\n    return null;\n  }\n  return ensureRectangular(schema, rows);\n}\nfunction ensureRectangular(schema, rows) {\n  const widths = [];\n  for (let i = 0; i < rows.length; i++) {\n    const row = rows[i];\n    for (let j = row.childCount - 1; j >= 0; j--) {\n      const { rowspan, colspan } = row.child(j).attrs;\n      for (let r = i; r < i + rowspan; r++)\n        widths[r] = (widths[r] || 0) + colspan;\n    }\n  }\n  let width = 0;\n  for (let r = 0; r < widths.length; r++) width = Math.max(width, widths[r]);\n  for (let r = 0; r < widths.length; r++) {\n    if (r >= rows.length) rows.push(Fragment3.empty);\n    if (widths[r] < width) {\n      const empty = tableNodeTypes(schema).cell.createAndFill();\n      const cells = [];\n      for (let i = widths[r]; i < width; i++) {\n        cells.push(empty);\n      }\n      rows[r] = rows[r].append(Fragment3.from(cells));\n    }\n  }\n  return { height: rows.length, width, rows };\n}\nfunction fitSlice(nodeType, slice) {\n  const node = nodeType.createAndFill();\n  const tr = new Transform(node).replace(0, node.content.size, slice);\n  return tr.doc;\n}\nfunction clipCells({ width, height, rows }, newWidth, newHeight) {\n  if (width != newWidth) {\n    const added = [];\n    const newRows = [];\n    for (let row = 0; row < rows.length; row++) {\n      const frag = rows[row], cells = [];\n      for (let col = added[row] || 0, i = 0; col < newWidth; i++) {\n        let cell = frag.child(i % frag.childCount);\n        if (col + cell.attrs.colspan > newWidth)\n          cell = cell.type.createChecked(\n            removeColSpan(\n              cell.attrs,\n              cell.attrs.colspan,\n              col + cell.attrs.colspan - newWidth\n            ),\n            cell.content\n          );\n        cells.push(cell);\n        col += cell.attrs.colspan;\n        for (let j = 1; j < cell.attrs.rowspan; j++)\n          added[row + j] = (added[row + j] || 0) + cell.attrs.colspan;\n      }\n      newRows.push(Fragment3.from(cells));\n    }\n    rows = newRows;\n    width = newWidth;\n  }\n  if (height != newHeight) {\n    const newRows = [];\n    for (let row = 0, i = 0; row < newHeight; row++, i++) {\n      const cells = [], source = rows[i % height];\n      for (let j = 0; j < source.childCount; j++) {\n        let cell = source.child(j);\n        if (row + cell.attrs.rowspan > newHeight)\n          cell = cell.type.create(\n            {\n              ...cell.attrs,\n              rowspan: Math.max(1, newHeight - cell.attrs.rowspan)\n            },\n            cell.content\n          );\n        cells.push(cell);\n      }\n      newRows.push(Fragment3.from(cells));\n    }\n    rows = newRows;\n    height = newHeight;\n  }\n  return { width, height, rows };\n}\nfunction growTable(tr, map, table, start, width, height, mapFrom) {\n  const schema = tr.doc.type.schema;\n  const types = tableNodeTypes(schema);\n  let empty;\n  let emptyHead;\n  if (width > map.width) {\n    for (let row = 0, rowEnd = 0; row < map.height; row++) {\n      const rowNode = table.child(row);\n      rowEnd += rowNode.nodeSize;\n      const cells = [];\n      let add;\n      if (rowNode.lastChild == null || rowNode.lastChild.type == types.cell)\n        add = empty || (empty = types.cell.createAndFill());\n      else add = emptyHead || (emptyHead = types.header_cell.createAndFill());\n      for (let i = map.width; i < width; i++) cells.push(add);\n      tr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start), cells);\n    }\n  }\n  if (height > map.height) {\n    const cells = [];\n    for (let i = 0, start2 = (map.height - 1) * map.width; i < Math.max(map.width, width); i++) {\n      const header = i >= map.width ? false : table.nodeAt(map.map[start2 + i]).type == types.header_cell;\n      cells.push(\n        header ? emptyHead || (emptyHead = types.header_cell.createAndFill()) : empty || (empty = types.cell.createAndFill())\n      );\n    }\n    const emptyRow = types.row.create(null, Fragment3.from(cells)), rows = [];\n    for (let i = map.height; i < height; i++) rows.push(emptyRow);\n    tr.insert(tr.mapping.slice(mapFrom).map(start + table.nodeSize - 2), rows);\n  }\n  return !!(empty || emptyHead);\n}\nfunction isolateHorizontal(tr, map, table, start, left, right, top, mapFrom) {\n  if (top == 0 || top == map.height) return false;\n  let found = false;\n  for (let col = left; col < right; col++) {\n    const index = top * map.width + col, pos = map.map[index];\n    if (map.map[index - map.width] == pos) {\n      found = true;\n      const cell = table.nodeAt(pos);\n      const { top: cellTop, left: cellLeft } = map.findCell(pos);\n      tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + start), null, {\n        ...cell.attrs,\n        rowspan: top - cellTop\n      });\n      tr.insert(\n        tr.mapping.slice(mapFrom).map(map.positionAt(top, cellLeft, table)),\n        cell.type.createAndFill({\n          ...cell.attrs,\n          rowspan: cellTop + cell.attrs.rowspan - top\n        })\n      );\n      col += cell.attrs.colspan - 1;\n    }\n  }\n  return found;\n}\nfunction isolateVertical(tr, map, table, start, top, bottom, left, mapFrom) {\n  if (left == 0 || left == map.width) return false;\n  let found = false;\n  for (let row = top; row < bottom; row++) {\n    const index = row * map.width + left, pos = map.map[index];\n    if (map.map[index - 1] == pos) {\n      found = true;\n      const cell = table.nodeAt(pos);\n      const cellLeft = map.colCount(pos);\n      const updatePos = tr.mapping.slice(mapFrom).map(pos + start);\n      tr.setNodeMarkup(\n        updatePos,\n        null,\n        removeColSpan(\n          cell.attrs,\n          left - cellLeft,\n          cell.attrs.colspan - (left - cellLeft)\n        )\n      );\n      tr.insert(\n        updatePos + cell.nodeSize,\n        cell.type.createAndFill(\n          removeColSpan(cell.attrs, 0, left - cellLeft)\n        )\n      );\n      row += cell.attrs.rowspan - 1;\n    }\n  }\n  return found;\n}\nfunction insertCells(state, dispatch, tableStart, rect, cells) {\n  let table = tableStart ? state.doc.nodeAt(tableStart - 1) : state.doc;\n  if (!table) {\n    throw new Error(\"No table found\");\n  }\n  let map = TableMap.get(table);\n  const { top, left } = rect;\n  const right = left + cells.width, bottom = top + cells.height;\n  const tr = state.tr;\n  let mapFrom = 0;\n  function recomp() {\n    table = tableStart ? tr.doc.nodeAt(tableStart - 1) : tr.doc;\n    if (!table) {\n      throw new Error(\"No table found\");\n    }\n    map = TableMap.get(table);\n    mapFrom = tr.mapping.maps.length;\n  }\n  if (growTable(tr, map, table, tableStart, right, bottom, mapFrom)) recomp();\n  if (isolateHorizontal(tr, map, table, tableStart, left, right, top, mapFrom))\n    recomp();\n  if (isolateHorizontal(tr, map, table, tableStart, left, right, bottom, mapFrom))\n    recomp();\n  if (isolateVertical(tr, map, table, tableStart, top, bottom, left, mapFrom))\n    recomp();\n  if (isolateVertical(tr, map, table, tableStart, top, bottom, right, mapFrom))\n    recomp();\n  for (let row = top; row < bottom; row++) {\n    const from = map.positionAt(row, left, table), to = map.positionAt(row, right, table);\n    tr.replace(\n      tr.mapping.slice(mapFrom).map(from + tableStart),\n      tr.mapping.slice(mapFrom).map(to + tableStart),\n      new Slice3(cells.rows[row - top], 0, 0)\n    );\n  }\n  recomp();\n  tr.setSelection(\n    new CellSelection(\n      tr.doc.resolve(tableStart + map.positionAt(top, left, table)),\n      tr.doc.resolve(tableStart + map.positionAt(bottom - 1, right - 1, table))\n    )\n  );\n  dispatch(tr);\n}\n\n// src/input.ts\nvar handleKeyDown = keydownHandler({\n  ArrowLeft: arrow(\"horiz\", -1),\n  ArrowRight: arrow(\"horiz\", 1),\n  ArrowUp: arrow(\"vert\", -1),\n  ArrowDown: arrow(\"vert\", 1),\n  \"Shift-ArrowLeft\": shiftArrow(\"horiz\", -1),\n  \"Shift-ArrowRight\": shiftArrow(\"horiz\", 1),\n  \"Shift-ArrowUp\": shiftArrow(\"vert\", -1),\n  \"Shift-ArrowDown\": shiftArrow(\"vert\", 1),\n  Backspace: deleteCellSelection,\n  \"Mod-Backspace\": deleteCellSelection,\n  Delete: deleteCellSelection,\n  \"Mod-Delete\": deleteCellSelection\n});\nfunction maybeSetSelection(state, dispatch, selection) {\n  if (selection.eq(state.selection)) return false;\n  if (dispatch) dispatch(state.tr.setSelection(selection).scrollIntoView());\n  return true;\n}\nfunction arrow(axis, dir) {\n  return (state, dispatch, view) => {\n    if (!view) return false;\n    const sel = state.selection;\n    if (sel instanceof CellSelection) {\n      return maybeSetSelection(\n        state,\n        dispatch,\n        Selection2.near(sel.$headCell, dir)\n      );\n    }\n    if (axis != \"horiz\" && !sel.empty) return false;\n    const end = atEndOfCell(view, axis, dir);\n    if (end == null) return false;\n    if (axis == \"horiz\") {\n      return maybeSetSelection(\n        state,\n        dispatch,\n        Selection2.near(state.doc.resolve(sel.head + dir), dir)\n      );\n    } else {\n      const $cell = state.doc.resolve(end);\n      const $next = nextCell($cell, axis, dir);\n      let newSel;\n      if ($next) newSel = Selection2.near($next, 1);\n      else if (dir < 0)\n        newSel = Selection2.near(state.doc.resolve($cell.before(-1)), -1);\n      else newSel = Selection2.near(state.doc.resolve($cell.after(-1)), 1);\n      return maybeSetSelection(state, dispatch, newSel);\n    }\n  };\n}\nfunction shiftArrow(axis, dir) {\n  return (state, dispatch, view) => {\n    if (!view) return false;\n    const sel = state.selection;\n    let cellSel;\n    if (sel instanceof CellSelection) {\n      cellSel = sel;\n    } else {\n      const end = atEndOfCell(view, axis, dir);\n      if (end == null) return false;\n      cellSel = new CellSelection(state.doc.resolve(end));\n    }\n    const $head = nextCell(cellSel.$headCell, axis, dir);\n    if (!$head) return false;\n    return maybeSetSelection(\n      state,\n      dispatch,\n      new CellSelection(cellSel.$anchorCell, $head)\n    );\n  };\n}\nfunction handleTripleClick(view, pos) {\n  const doc = view.state.doc, $cell = cellAround(doc.resolve(pos));\n  if (!$cell) return false;\n  view.dispatch(view.state.tr.setSelection(new CellSelection($cell)));\n  return true;\n}\nfunction handlePaste(view, _, slice) {\n  if (!isInTable(view.state)) return false;\n  let cells = pastedCells(slice);\n  const sel = view.state.selection;\n  if (sel instanceof CellSelection) {\n    if (!cells)\n      cells = {\n        width: 1,\n        height: 1,\n        rows: [\n          Fragment4.from(\n            fitSlice(tableNodeTypes(view.state.schema).cell, slice)\n          )\n        ]\n      };\n    const table = sel.$anchorCell.node(-1);\n    const start = sel.$anchorCell.start(-1);\n    const rect = TableMap.get(table).rectBetween(\n      sel.$anchorCell.pos - start,\n      sel.$headCell.pos - start\n    );\n    cells = clipCells(cells, rect.right - rect.left, rect.bottom - rect.top);\n    insertCells(view.state, view.dispatch, start, rect, cells);\n    return true;\n  } else if (cells) {\n    const $cell = selectionCell(view.state);\n    const start = $cell.start(-1);\n    insertCells(\n      view.state,\n      view.dispatch,\n      start,\n      TableMap.get($cell.node(-1)).findCell($cell.pos - start),\n      cells\n    );\n    return true;\n  } else {\n    return false;\n  }\n}\nfunction handleMouseDown(view, startEvent) {\n  var _a;\n  if (startEvent.ctrlKey || startEvent.metaKey) return;\n  const startDOMCell = domInCell(view, startEvent.target);\n  let $anchor;\n  if (startEvent.shiftKey && view.state.selection instanceof CellSelection) {\n    setCellSelection(view.state.selection.$anchorCell, startEvent);\n    startEvent.preventDefault();\n  } else if (startEvent.shiftKey && startDOMCell && ($anchor = cellAround(view.state.selection.$anchor)) != null && ((_a = cellUnderMouse(view, startEvent)) == null ? void 0 : _a.pos) != $anchor.pos) {\n    setCellSelection($anchor, startEvent);\n    startEvent.preventDefault();\n  } else if (!startDOMCell) {\n    return;\n  }\n  function setCellSelection($anchor2, event) {\n    let $head = cellUnderMouse(view, event);\n    const starting = tableEditingKey.getState(view.state) == null;\n    if (!$head || !inSameTable($anchor2, $head)) {\n      if (starting) $head = $anchor2;\n      else return;\n    }\n    const selection = new CellSelection($anchor2, $head);\n    if (starting || !view.state.selection.eq(selection)) {\n      const tr = view.state.tr.setSelection(selection);\n      if (starting) tr.setMeta(tableEditingKey, $anchor2.pos);\n      view.dispatch(tr);\n    }\n  }\n  function stop() {\n    view.root.removeEventListener(\"mouseup\", stop);\n    view.root.removeEventListener(\"dragstart\", stop);\n    view.root.removeEventListener(\"mousemove\", move);\n    if (tableEditingKey.getState(view.state) != null)\n      view.dispatch(view.state.tr.setMeta(tableEditingKey, -1));\n  }\n  function move(_event) {\n    const event = _event;\n    const anchor = tableEditingKey.getState(view.state);\n    let $anchor2;\n    if (anchor != null) {\n      $anchor2 = view.state.doc.resolve(anchor);\n    } else if (domInCell(view, event.target) != startDOMCell) {\n      $anchor2 = cellUnderMouse(view, startEvent);\n      if (!$anchor2) return stop();\n    }\n    if ($anchor2) setCellSelection($anchor2, event);\n  }\n  view.root.addEventListener(\"mouseup\", stop);\n  view.root.addEventListener(\"dragstart\", stop);\n  view.root.addEventListener(\"mousemove\", move);\n}\nfunction atEndOfCell(view, axis, dir) {\n  if (!(view.state.selection instanceof TextSelection3)) return null;\n  const { $head } = view.state.selection;\n  for (let d = $head.depth - 1; d >= 0; d--) {\n    const parent = $head.node(d), index = dir < 0 ? $head.index(d) : $head.indexAfter(d);\n    if (index != (dir < 0 ? 0 : parent.childCount)) return null;\n    if (parent.type.spec.tableRole == \"cell\" || parent.type.spec.tableRole == \"header_cell\") {\n      const cellPos = $head.before(d);\n      const dirStr = axis == \"vert\" ? dir > 0 ? \"down\" : \"up\" : dir > 0 ? \"right\" : \"left\";\n      return view.endOfTextblock(dirStr) ? cellPos : null;\n    }\n  }\n  return null;\n}\nfunction domInCell(view, dom) {\n  for (; dom && dom != view.dom; dom = dom.parentNode) {\n    if (dom.nodeName == \"TD\" || dom.nodeName == \"TH\") {\n      return dom;\n    }\n  }\n  return null;\n}\nfunction cellUnderMouse(view, event) {\n  const mousePos = view.posAtCoords({\n    left: event.clientX,\n    top: event.clientY\n  });\n  if (!mousePos) return null;\n  return mousePos ? cellAround(view.state.doc.resolve(mousePos.pos)) : null;\n}\n\n// src/columnresizing.ts\nimport { Plugin, PluginKey as PluginKey3 } from \"prosemirror-state\";\nimport {\n  Decoration as Decoration2,\n  DecorationSet as DecorationSet2\n} from \"prosemirror-view\";\n\n// src/tableview.ts\nvar TableView = class {\n  constructor(node, defaultCellMinWidth) {\n    this.node = node;\n    this.defaultCellMinWidth = defaultCellMinWidth;\n    this.dom = document.createElement(\"div\");\n    this.dom.className = \"tableWrapper\";\n    this.table = this.dom.appendChild(document.createElement(\"table\"));\n    this.table.style.setProperty(\n      \"--default-cell-min-width\",\n      `${defaultCellMinWidth}px`\n    );\n    this.colgroup = this.table.appendChild(document.createElement(\"colgroup\"));\n    updateColumnsOnResize(node, this.colgroup, this.table, defaultCellMinWidth);\n    this.contentDOM = this.table.appendChild(document.createElement(\"tbody\"));\n  }\n  update(node) {\n    if (node.type != this.node.type) return false;\n    this.node = node;\n    updateColumnsOnResize(\n      node,\n      this.colgroup,\n      this.table,\n      this.defaultCellMinWidth\n    );\n    return true;\n  }\n  ignoreMutation(record) {\n    return record.type == \"attributes\" && (record.target == this.table || this.colgroup.contains(record.target));\n  }\n};\nfunction updateColumnsOnResize(node, colgroup, table, defaultCellMinWidth, overrideCol, overrideValue) {\n  var _a;\n  let totalWidth = 0;\n  let fixedWidth = true;\n  let nextDOM = colgroup.firstChild;\n  const row = node.firstChild;\n  if (!row) return;\n  for (let i = 0, col = 0; i < row.childCount; i++) {\n    const { colspan, colwidth } = row.child(i).attrs;\n    for (let j = 0; j < colspan; j++, col++) {\n      const hasWidth = overrideCol == col ? overrideValue : colwidth && colwidth[j];\n      const cssWidth = hasWidth ? hasWidth + \"px\" : \"\";\n      totalWidth += hasWidth || defaultCellMinWidth;\n      if (!hasWidth) fixedWidth = false;\n      if (!nextDOM) {\n        const col2 = document.createElement(\"col\");\n        col2.style.width = cssWidth;\n        colgroup.appendChild(col2);\n      } else {\n        if (nextDOM.style.width != cssWidth) {\n          nextDOM.style.width = cssWidth;\n        }\n        nextDOM = nextDOM.nextSibling;\n      }\n    }\n  }\n  while (nextDOM) {\n    const after = nextDOM.nextSibling;\n    (_a = nextDOM.parentNode) == null ? void 0 : _a.removeChild(nextDOM);\n    nextDOM = after;\n  }\n  if (fixedWidth) {\n    table.style.width = totalWidth + \"px\";\n    table.style.minWidth = \"\";\n  } else {\n    table.style.width = \"\";\n    table.style.minWidth = totalWidth + \"px\";\n  }\n}\n\n// src/columnresizing.ts\nvar columnResizingPluginKey = new PluginKey3(\n  \"tableColumnResizing\"\n);\nfunction columnResizing({\n  handleWidth = 5,\n  cellMinWidth = 25,\n  defaultCellMinWidth = 100,\n  View = TableView,\n  lastColumnResizable = true\n} = {}) {\n  const plugin = new Plugin({\n    key: columnResizingPluginKey,\n    state: {\n      init(_, state) {\n        var _a, _b;\n        const nodeViews = (_b = (_a = plugin.spec) == null ? void 0 : _a.props) == null ? void 0 : _b.nodeViews;\n        const tableName = tableNodeTypes(state.schema).table.name;\n        if (View && nodeViews) {\n          nodeViews[tableName] = (node, view) => {\n            return new View(node, defaultCellMinWidth, view);\n          };\n        }\n        return new ResizeState(-1, false);\n      },\n      apply(tr, prev) {\n        return prev.apply(tr);\n      }\n    },\n    props: {\n      attributes: (state) => {\n        const pluginState = columnResizingPluginKey.getState(state);\n        return pluginState && pluginState.activeHandle > -1 ? { class: \"resize-cursor\" } : {};\n      },\n      handleDOMEvents: {\n        mousemove: (view, event) => {\n          handleMouseMove(view, event, handleWidth, lastColumnResizable);\n        },\n        mouseleave: (view) => {\n          handleMouseLeave(view);\n        },\n        mousedown: (view, event) => {\n          handleMouseDown2(view, event, cellMinWidth, defaultCellMinWidth);\n        }\n      },\n      decorations: (state) => {\n        const pluginState = columnResizingPluginKey.getState(state);\n        if (pluginState && pluginState.activeHandle > -1) {\n          return handleDecorations(state, pluginState.activeHandle);\n        }\n      },\n      nodeViews: {}\n    }\n  });\n  return plugin;\n}\nvar ResizeState = class _ResizeState {\n  constructor(activeHandle, dragging) {\n    this.activeHandle = activeHandle;\n    this.dragging = dragging;\n  }\n  apply(tr) {\n    const state = this;\n    const action = tr.getMeta(columnResizingPluginKey);\n    if (action && action.setHandle != null)\n      return new _ResizeState(action.setHandle, false);\n    if (action && action.setDragging !== void 0)\n      return new _ResizeState(state.activeHandle, action.setDragging);\n    if (state.activeHandle > -1 && tr.docChanged) {\n      let handle = tr.mapping.map(state.activeHandle, -1);\n      if (!pointsAtCell(tr.doc.resolve(handle))) {\n        handle = -1;\n      }\n      return new _ResizeState(handle, state.dragging);\n    }\n    return state;\n  }\n};\nfunction handleMouseMove(view, event, handleWidth, lastColumnResizable) {\n  if (!view.editable) return;\n  const pluginState = columnResizingPluginKey.getState(view.state);\n  if (!pluginState) return;\n  if (!pluginState.dragging) {\n    const target = domCellAround(event.target);\n    let cell = -1;\n    if (target) {\n      const { left, right } = target.getBoundingClientRect();\n      if (event.clientX - left <= handleWidth)\n        cell = edgeCell(view, event, \"left\", handleWidth);\n      else if (right - event.clientX <= handleWidth)\n        cell = edgeCell(view, event, \"right\", handleWidth);\n    }\n    if (cell != pluginState.activeHandle) {\n      if (!lastColumnResizable && cell !== -1) {\n        const $cell = view.state.doc.resolve(cell);\n        const table = $cell.node(-1);\n        const map = TableMap.get(table);\n        const tableStart = $cell.start(-1);\n        const col = map.colCount($cell.pos - tableStart) + $cell.nodeAfter.attrs.colspan - 1;\n        if (col == map.width - 1) {\n          return;\n        }\n      }\n      updateHandle(view, cell);\n    }\n  }\n}\nfunction handleMouseLeave(view) {\n  if (!view.editable) return;\n  const pluginState = columnResizingPluginKey.getState(view.state);\n  if (pluginState && pluginState.activeHandle > -1 && !pluginState.dragging)\n    updateHandle(view, -1);\n}\nfunction handleMouseDown2(view, event, cellMinWidth, defaultCellMinWidth) {\n  var _a;\n  if (!view.editable) return false;\n  const win = (_a = view.dom.ownerDocument.defaultView) != null ? _a : window;\n  const pluginState = columnResizingPluginKey.getState(view.state);\n  if (!pluginState || pluginState.activeHandle == -1 || pluginState.dragging)\n    return false;\n  const cell = view.state.doc.nodeAt(pluginState.activeHandle);\n  const width = currentColWidth(view, pluginState.activeHandle, cell.attrs);\n  view.dispatch(\n    view.state.tr.setMeta(columnResizingPluginKey, {\n      setDragging: { startX: event.clientX, startWidth: width }\n    })\n  );\n  function finish(event2) {\n    win.removeEventListener(\"mouseup\", finish);\n    win.removeEventListener(\"mousemove\", move);\n    const pluginState2 = columnResizingPluginKey.getState(view.state);\n    if (pluginState2 == null ? void 0 : pluginState2.dragging) {\n      updateColumnWidth(\n        view,\n        pluginState2.activeHandle,\n        draggedWidth(pluginState2.dragging, event2, cellMinWidth)\n      );\n      view.dispatch(\n        view.state.tr.setMeta(columnResizingPluginKey, { setDragging: null })\n      );\n    }\n  }\n  function move(event2) {\n    if (!event2.which) return finish(event2);\n    const pluginState2 = columnResizingPluginKey.getState(view.state);\n    if (!pluginState2) return;\n    if (pluginState2.dragging) {\n      const dragged = draggedWidth(pluginState2.dragging, event2, cellMinWidth);\n      displayColumnWidth(\n        view,\n        pluginState2.activeHandle,\n        dragged,\n        defaultCellMinWidth\n      );\n    }\n  }\n  displayColumnWidth(\n    view,\n    pluginState.activeHandle,\n    width,\n    defaultCellMinWidth\n  );\n  win.addEventListener(\"mouseup\", finish);\n  win.addEventListener(\"mousemove\", move);\n  event.preventDefault();\n  return true;\n}\nfunction currentColWidth(view, cellPos, { colspan, colwidth }) {\n  const width = colwidth && colwidth[colwidth.length - 1];\n  if (width) return width;\n  const dom = view.domAtPos(cellPos);\n  const node = dom.node.childNodes[dom.offset];\n  let domWidth = node.offsetWidth, parts = colspan;\n  if (colwidth) {\n    for (let i = 0; i < colspan; i++)\n      if (colwidth[i]) {\n        domWidth -= colwidth[i];\n        parts--;\n      }\n  }\n  return domWidth / parts;\n}\nfunction domCellAround(target) {\n  while (target && target.nodeName != \"TD\" && target.nodeName != \"TH\")\n    target = target.classList && target.classList.contains(\"ProseMirror\") ? null : target.parentNode;\n  return target;\n}\nfunction edgeCell(view, event, side, handleWidth) {\n  const offset = side == \"right\" ? -handleWidth : handleWidth;\n  const found = view.posAtCoords({\n    left: event.clientX + offset,\n    top: event.clientY\n  });\n  if (!found) return -1;\n  const { pos } = found;\n  const $cell = cellAround(view.state.doc.resolve(pos));\n  if (!$cell) return -1;\n  if (side == \"right\") return $cell.pos;\n  const map = TableMap.get($cell.node(-1)), start = $cell.start(-1);\n  const index = map.map.indexOf($cell.pos - start);\n  return index % map.width == 0 ? -1 : start + map.map[index - 1];\n}\nfunction draggedWidth(dragging, event, resizeMinWidth) {\n  const offset = event.clientX - dragging.startX;\n  return Math.max(resizeMinWidth, dragging.startWidth + offset);\n}\nfunction updateHandle(view, value) {\n  view.dispatch(\n    view.state.tr.setMeta(columnResizingPluginKey, { setHandle: value })\n  );\n}\nfunction updateColumnWidth(view, cell, width) {\n  const $cell = view.state.doc.resolve(cell);\n  const table = $cell.node(-1), map = TableMap.get(table), start = $cell.start(-1);\n  const col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n  const tr = view.state.tr;\n  for (let row = 0; row < map.height; row++) {\n    const mapIndex = row * map.width + col;\n    if (row && map.map[mapIndex] == map.map[mapIndex - map.width]) continue;\n    const pos = map.map[mapIndex];\n    const attrs = table.nodeAt(pos).attrs;\n    const index = attrs.colspan == 1 ? 0 : col - map.colCount(pos);\n    if (attrs.colwidth && attrs.colwidth[index] == width) continue;\n    const colwidth = attrs.colwidth ? attrs.colwidth.slice() : zeroes(attrs.colspan);\n    colwidth[index] = width;\n    tr.setNodeMarkup(start + pos, null, { ...attrs, colwidth });\n  }\n  if (tr.docChanged) view.dispatch(tr);\n}\nfunction displayColumnWidth(view, cell, width, defaultCellMinWidth) {\n  const $cell = view.state.doc.resolve(cell);\n  const table = $cell.node(-1), start = $cell.start(-1);\n  const col = TableMap.get(table).colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n  let dom = view.domAtPos($cell.start(-1)).node;\n  while (dom && dom.nodeName != \"TABLE\") {\n    dom = dom.parentNode;\n  }\n  if (!dom) return;\n  updateColumnsOnResize(\n    table,\n    dom.firstChild,\n    dom,\n    defaultCellMinWidth,\n    col,\n    width\n  );\n}\nfunction zeroes(n) {\n  return Array(n).fill(0);\n}\nfunction handleDecorations(state, cell) {\n  var _a;\n  const decorations = [];\n  const $cell = state.doc.resolve(cell);\n  const table = $cell.node(-1);\n  if (!table) {\n    return DecorationSet2.empty;\n  }\n  const map = TableMap.get(table);\n  const start = $cell.start(-1);\n  const col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n  for (let row = 0; row < map.height; row++) {\n    const index = col + row * map.width;\n    if ((col == map.width - 1 || map.map[index] != map.map[index + 1]) && (row == 0 || map.map[index] != map.map[index - map.width])) {\n      const cellPos = map.map[index];\n      const pos = start + cellPos + table.nodeAt(cellPos).nodeSize - 1;\n      const dom = document.createElement(\"div\");\n      dom.className = \"column-resize-handle\";\n      if ((_a = columnResizingPluginKey.getState(state)) == null ? void 0 : _a.dragging) {\n        decorations.push(\n          Decoration2.node(\n            start + cellPos,\n            start + cellPos + table.nodeAt(cellPos).nodeSize,\n            {\n              class: \"column-resize-dragging\"\n            }\n          )\n        );\n      }\n      decorations.push(Decoration2.widget(pos, dom));\n    }\n  }\n  return DecorationSet2.create(state.doc, decorations);\n}\n\n// src/index.ts\nfunction tableEditing({\n  allowTableNodeSelection = false\n} = {}) {\n  return new Plugin2({\n    key: tableEditingKey,\n    // This piece of state is used to remember when a mouse-drag\n    // cell-selection is happening, so that it can continue even as\n    // transactions (which might move its anchor cell) come in.\n    state: {\n      init() {\n        return null;\n      },\n      apply(tr, cur) {\n        const set = tr.getMeta(tableEditingKey);\n        if (set != null) return set == -1 ? null : set;\n        if (cur == null || !tr.docChanged) return cur;\n        const { deleted, pos } = tr.mapping.mapResult(cur);\n        return deleted ? null : pos;\n      }\n    },\n    props: {\n      decorations: drawCellSelection,\n      handleDOMEvents: {\n        mousedown: handleMouseDown\n      },\n      createSelectionBetween(view) {\n        return tableEditingKey.getState(view.state) != null ? view.state.selection : null;\n      },\n      handleTripleClick,\n      handleKeyDown,\n      handlePaste\n    },\n    appendTransaction(_, oldState, state) {\n      return normalizeSelection(\n        state,\n        fixTables(state, oldState),\n        allowTableNodeSelection\n      );\n    }\n  });\n}\nexport {\n  CellBookmark,\n  CellSelection,\n  ResizeState,\n  TableMap,\n  TableView,\n  clipCells as __clipCells,\n  insertCells as __insertCells,\n  pastedCells as __pastedCells,\n  addColSpan,\n  addColumn,\n  addColumnAfter,\n  addColumnBefore,\n  addRow,\n  addRowAfter,\n  addRowBefore,\n  cellAround,\n  cellNear,\n  colCount,\n  columnIsHeader,\n  columnResizing,\n  columnResizingPluginKey,\n  deleteCellSelection,\n  deleteColumn,\n  deleteRow,\n  deleteTable,\n  findCell,\n  findCellPos,\n  findCellRange,\n  findTable,\n  fixTables,\n  fixTablesKey,\n  goToNextCell,\n  handlePaste,\n  inSameTable,\n  isInTable,\n  mergeCells,\n  moveCellForward,\n  moveTableColumn2 as moveTableColumn,\n  moveTableRow2 as moveTableRow,\n  nextCell,\n  pointsAtCell,\n  removeColSpan,\n  removeColumn,\n  removeRow,\n  rowIsHeader,\n  selectedRect,\n  selectionCell,\n  setCellAttr,\n  splitCell,\n  splitCellWithType,\n  tableEditing,\n  tableEditingKey,\n  tableNodeTypes,\n  tableNodes,\n  toggleHeader,\n  toggleHeaderCell,\n  toggleHeaderColumn,\n  toggleHeaderRow,\n  updateColumnsOnResize\n};\n","// src/cell/table-cell.ts\nimport { mergeAttributes, Node } from \"@tiptap/core\";\nvar TableCell = Node.create({\n  name: \"tableCell\",\n  addOptions() {\n    return {\n      HTMLAttributes: {}\n    };\n  },\n  content: \"block+\",\n  addAttributes() {\n    return {\n      colspan: {\n        default: 1\n      },\n      rowspan: {\n        default: 1\n      },\n      colwidth: {\n        default: null,\n        parseHTML: (element) => {\n          const colwidth = element.getAttribute(\"colwidth\");\n          const value = colwidth ? colwidth.split(\",\").map((width) => parseInt(width, 10)) : null;\n          return value;\n        }\n      }\n    };\n  },\n  tableRole: \"cell\",\n  isolating: true,\n  parseHTML() {\n    return [{ tag: \"td\" }];\n  },\n  renderHTML({ HTMLAttributes }) {\n    return [\"td\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n  }\n});\n\n// src/header/table-header.ts\nimport { mergeAttributes as mergeAttributes2, Node as Node2 } from \"@tiptap/core\";\nvar TableHeader = Node2.create({\n  name: \"tableHeader\",\n  addOptions() {\n    return {\n      HTMLAttributes: {}\n    };\n  },\n  content: \"block+\",\n  addAttributes() {\n    return {\n      colspan: {\n        default: 1\n      },\n      rowspan: {\n        default: 1\n      },\n      colwidth: {\n        default: null,\n        parseHTML: (element) => {\n          const colwidth = element.getAttribute(\"colwidth\");\n          const value = colwidth ? colwidth.split(\",\").map((width) => parseInt(width, 10)) : null;\n          return value;\n        }\n      }\n    };\n  },\n  tableRole: \"header_cell\",\n  isolating: true,\n  parseHTML() {\n    return [{ tag: \"th\" }];\n  },\n  renderHTML({ HTMLAttributes }) {\n    return [\"th\", mergeAttributes2(this.options.HTMLAttributes, HTMLAttributes), 0];\n  }\n});\n\n// src/kit/index.ts\nimport { Extension } from \"@tiptap/core\";\n\n// src/row/table-row.ts\nimport { mergeAttributes as mergeAttributes3, Node as Node3 } from \"@tiptap/core\";\nvar TableRow = Node3.create({\n  name: \"tableRow\",\n  addOptions() {\n    return {\n      HTMLAttributes: {}\n    };\n  },\n  content: \"(tableCell | tableHeader)*\",\n  tableRole: \"row\",\n  parseHTML() {\n    return [{ tag: \"tr\" }];\n  },\n  renderHTML({ HTMLAttributes }) {\n    return [\"tr\", mergeAttributes3(this.options.HTMLAttributes, HTMLAttributes), 0];\n  }\n});\n\n// src/table/table.ts\nimport { callOrReturn, getExtensionField, mergeAttributes as mergeAttributes4, Node as Node4 } from \"@tiptap/core\";\nimport { TextSelection } from \"@tiptap/pm/state\";\nimport {\n  addColumnAfter,\n  addColumnBefore,\n  addRowAfter,\n  addRowBefore,\n  CellSelection as CellSelection2,\n  columnResizing,\n  deleteColumn,\n  deleteRow,\n  deleteTable,\n  fixTables,\n  goToNextCell,\n  mergeCells,\n  setCellAttr,\n  splitCell,\n  tableEditing,\n  toggleHeader,\n  toggleHeaderCell\n} from \"@tiptap/pm/tables\";\n\n// src/table/utilities/colStyle.ts\nfunction getColStyleDeclaration(minWidth, width) {\n  if (width) {\n    return [\"width\", `${Math.max(width, minWidth)}px`];\n  }\n  return [\"min-width\", `${minWidth}px`];\n}\n\n// src/table/TableView.ts\nfunction updateColumns(node, colgroup, table, cellMinWidth, overrideCol, overrideValue) {\n  var _a;\n  let totalWidth = 0;\n  let fixedWidth = true;\n  let nextDOM = colgroup.firstChild;\n  const row = node.firstChild;\n  if (row !== null) {\n    for (let i = 0, col = 0; i < row.childCount; i += 1) {\n      const { colspan, colwidth } = row.child(i).attrs;\n      for (let j = 0; j < colspan; j += 1, col += 1) {\n        const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];\n        const cssWidth = hasWidth ? `${hasWidth}px` : \"\";\n        totalWidth += hasWidth || cellMinWidth;\n        if (!hasWidth) {\n          fixedWidth = false;\n        }\n        if (!nextDOM) {\n          const colElement = document.createElement(\"col\");\n          const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth);\n          colElement.style.setProperty(propertyKey, propertyValue);\n          colgroup.appendChild(colElement);\n        } else {\n          if (nextDOM.style.width !== cssWidth) {\n            const [propertyKey, propertyValue] = getColStyleDeclaration(cellMinWidth, hasWidth);\n            nextDOM.style.setProperty(propertyKey, propertyValue);\n          }\n          nextDOM = nextDOM.nextSibling;\n        }\n      }\n    }\n  }\n  while (nextDOM) {\n    const after = nextDOM.nextSibling;\n    (_a = nextDOM.parentNode) == null ? void 0 : _a.removeChild(nextDOM);\n    nextDOM = after;\n  }\n  if (fixedWidth) {\n    table.style.width = `${totalWidth}px`;\n    table.style.minWidth = \"\";\n  } else {\n    table.style.width = \"\";\n    table.style.minWidth = `${totalWidth}px`;\n  }\n}\nvar TableView = class {\n  constructor(node, cellMinWidth) {\n    this.node = node;\n    this.cellMinWidth = cellMinWidth;\n    this.dom = document.createElement(\"div\");\n    this.dom.className = \"tableWrapper\";\n    this.table = this.dom.appendChild(document.createElement(\"table\"));\n    this.colgroup = this.table.appendChild(document.createElement(\"colgroup\"));\n    updateColumns(node, this.colgroup, this.table, cellMinWidth);\n    this.contentDOM = this.table.appendChild(document.createElement(\"tbody\"));\n  }\n  update(node) {\n    if (node.type !== this.node.type) {\n      return false;\n    }\n    this.node = node;\n    updateColumns(node, this.colgroup, this.table, this.cellMinWidth);\n    return true;\n  }\n  ignoreMutation(mutation) {\n    return mutation.type === \"attributes\" && (mutation.target === this.table || this.colgroup.contains(mutation.target));\n  }\n};\n\n// src/table/utilities/createColGroup.ts\nfunction createColGroup(node, cellMinWidth, overrideCol, overrideValue) {\n  let totalWidth = 0;\n  let fixedWidth = true;\n  const cols = [];\n  const row = node.firstChild;\n  if (!row) {\n    return {};\n  }\n  for (let i = 0, col = 0; i < row.childCount; i += 1) {\n    const { colspan, colwidth } = row.child(i).attrs;\n    for (let j = 0; j < colspan; j += 1, col += 1) {\n      const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];\n      totalWidth += hasWidth || cellMinWidth;\n      if (!hasWidth) {\n        fixedWidth = false;\n      }\n      const [property, value] = getColStyleDeclaration(cellMinWidth, hasWidth);\n      cols.push([\"col\", { style: `${property}: ${value}` }]);\n    }\n  }\n  const tableWidth = fixedWidth ? `${totalWidth}px` : \"\";\n  const tableMinWidth = fixedWidth ? \"\" : `${totalWidth}px`;\n  const colgroup = [\"colgroup\", {}, ...cols];\n  return { colgroup, tableWidth, tableMinWidth };\n}\n\n// src/table/utilities/createCell.ts\nfunction createCell(cellType, cellContent) {\n  if (cellContent) {\n    return cellType.createChecked(null, cellContent);\n  }\n  return cellType.createAndFill();\n}\n\n// src/table/utilities/getTableNodeTypes.ts\nfunction getTableNodeTypes(schema) {\n  if (schema.cached.tableNodeTypes) {\n    return schema.cached.tableNodeTypes;\n  }\n  const roles = {};\n  Object.keys(schema.nodes).forEach((type) => {\n    const nodeType = schema.nodes[type];\n    if (nodeType.spec.tableRole) {\n      roles[nodeType.spec.tableRole] = nodeType;\n    }\n  });\n  schema.cached.tableNodeTypes = roles;\n  return roles;\n}\n\n// src/table/utilities/createTable.ts\nfunction createTable(schema, rowsCount, colsCount, withHeaderRow, cellContent) {\n  const types = getTableNodeTypes(schema);\n  const headerCells = [];\n  const cells = [];\n  for (let index = 0; index < colsCount; index += 1) {\n    const cell = createCell(types.cell, cellContent);\n    if (cell) {\n      cells.push(cell);\n    }\n    if (withHeaderRow) {\n      const headerCell = createCell(types.header_cell, cellContent);\n      if (headerCell) {\n        headerCells.push(headerCell);\n      }\n    }\n  }\n  const rows = [];\n  for (let index = 0; index < rowsCount; index += 1) {\n    rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells));\n  }\n  return types.table.createChecked(null, rows);\n}\n\n// src/table/utilities/deleteTableWhenAllCellsSelected.ts\nimport { findParentNodeClosestToPos } from \"@tiptap/core\";\n\n// src/table/utilities/isCellSelection.ts\nimport { CellSelection } from \"@tiptap/pm/tables\";\nfunction isCellSelection(value) {\n  return value instanceof CellSelection;\n}\n\n// src/table/utilities/deleteTableWhenAllCellsSelected.ts\nvar deleteTableWhenAllCellsSelected = ({ editor }) => {\n  const { selection } = editor.state;\n  if (!isCellSelection(selection)) {\n    return false;\n  }\n  let cellCount = 0;\n  const table = findParentNodeClosestToPos(selection.ranges[0].$from, (node) => {\n    return node.type.name === \"table\";\n  });\n  table == null ? void 0 : table.node.descendants((node) => {\n    if (node.type.name === \"table\") {\n      return false;\n    }\n    if ([\"tableCell\", \"tableHeader\"].includes(node.type.name)) {\n      cellCount += 1;\n    }\n  });\n  const allCellsSelected = cellCount === selection.ranges.length;\n  if (!allCellsSelected) {\n    return false;\n  }\n  editor.commands.deleteTable();\n  return true;\n};\n\n// src/table/table.ts\nvar Table = Node4.create({\n  name: \"table\",\n  // @ts-ignore\n  addOptions() {\n    return {\n      HTMLAttributes: {},\n      resizable: false,\n      handleWidth: 5,\n      cellMinWidth: 25,\n      // TODO: fix\n      View: TableView,\n      lastColumnResizable: true,\n      allowTableNodeSelection: false\n    };\n  },\n  content: \"tableRow+\",\n  tableRole: \"table\",\n  isolating: true,\n  group: \"block\",\n  parseHTML() {\n    return [{ tag: \"table\" }];\n  },\n  renderHTML({ node, HTMLAttributes }) {\n    const { colgroup, tableWidth, tableMinWidth } = createColGroup(node, this.options.cellMinWidth);\n    const table = [\n      \"table\",\n      mergeAttributes4(this.options.HTMLAttributes, HTMLAttributes, {\n        style: tableWidth ? `width: ${tableWidth}` : `min-width: ${tableMinWidth}`\n      }),\n      colgroup,\n      [\"tbody\", 0]\n    ];\n    return table;\n  },\n  addCommands() {\n    return {\n      insertTable: ({ rows = 3, cols = 3, withHeaderRow = true } = {}) => ({ tr, dispatch, editor }) => {\n        const node = createTable(editor.schema, rows, cols, withHeaderRow);\n        if (dispatch) {\n          const offset = tr.selection.from + 1;\n          tr.replaceSelectionWith(node).scrollIntoView().setSelection(TextSelection.near(tr.doc.resolve(offset)));\n        }\n        return true;\n      },\n      addColumnBefore: () => ({ state, dispatch }) => {\n        return addColumnBefore(state, dispatch);\n      },\n      addColumnAfter: () => ({ state, dispatch }) => {\n        return addColumnAfter(state, dispatch);\n      },\n      deleteColumn: () => ({ state, dispatch }) => {\n        return deleteColumn(state, dispatch);\n      },\n      addRowBefore: () => ({ state, dispatch }) => {\n        return addRowBefore(state, dispatch);\n      },\n      addRowAfter: () => ({ state, dispatch }) => {\n        return addRowAfter(state, dispatch);\n      },\n      deleteRow: () => ({ state, dispatch }) => {\n        return deleteRow(state, dispatch);\n      },\n      deleteTable: () => ({ state, dispatch }) => {\n        return deleteTable(state, dispatch);\n      },\n      mergeCells: () => ({ state, dispatch }) => {\n        return mergeCells(state, dispatch);\n      },\n      splitCell: () => ({ state, dispatch }) => {\n        return splitCell(state, dispatch);\n      },\n      toggleHeaderColumn: () => ({ state, dispatch }) => {\n        return toggleHeader(\"column\")(state, dispatch);\n      },\n      toggleHeaderRow: () => ({ state, dispatch }) => {\n        return toggleHeader(\"row\")(state, dispatch);\n      },\n      toggleHeaderCell: () => ({ state, dispatch }) => {\n        return toggleHeaderCell(state, dispatch);\n      },\n      mergeOrSplit: () => ({ state, dispatch }) => {\n        if (mergeCells(state, dispatch)) {\n          return true;\n        }\n        return splitCell(state, dispatch);\n      },\n      setCellAttribute: (name, value) => ({ state, dispatch }) => {\n        return setCellAttr(name, value)(state, dispatch);\n      },\n      goToNextCell: () => ({ state, dispatch }) => {\n        return goToNextCell(1)(state, dispatch);\n      },\n      goToPreviousCell: () => ({ state, dispatch }) => {\n        return goToNextCell(-1)(state, dispatch);\n      },\n      fixTables: () => ({ state, dispatch }) => {\n        if (dispatch) {\n          fixTables(state);\n        }\n        return true;\n      },\n      setCellSelection: (position) => ({ tr, dispatch }) => {\n        if (dispatch) {\n          const selection = CellSelection2.create(tr.doc, position.anchorCell, position.headCell);\n          tr.setSelection(selection);\n        }\n        return true;\n      }\n    };\n  },\n  addKeyboardShortcuts() {\n    return {\n      Tab: () => {\n        if (this.editor.commands.goToNextCell()) {\n          return true;\n        }\n        if (!this.editor.can().addRowAfter()) {\n          return false;\n        }\n        return this.editor.chain().addRowAfter().goToNextCell().run();\n      },\n      \"Shift-Tab\": () => this.editor.commands.goToPreviousCell(),\n      Backspace: deleteTableWhenAllCellsSelected,\n      \"Mod-Backspace\": deleteTableWhenAllCellsSelected,\n      Delete: deleteTableWhenAllCellsSelected,\n      \"Mod-Delete\": deleteTableWhenAllCellsSelected\n    };\n  },\n  addProseMirrorPlugins() {\n    const isResizable = this.options.resizable && this.editor.isEditable;\n    return [\n      ...isResizable ? [\n        columnResizing({\n          handleWidth: this.options.handleWidth,\n          cellMinWidth: this.options.cellMinWidth,\n          defaultCellMinWidth: this.options.cellMinWidth,\n          View: this.options.View,\n          lastColumnResizable: this.options.lastColumnResizable\n        })\n      ] : [],\n      tableEditing({\n        allowTableNodeSelection: this.options.allowTableNodeSelection\n      })\n    ];\n  },\n  extendNodeSchema(extension) {\n    const context = {\n      name: extension.name,\n      options: extension.options,\n      storage: extension.storage\n    };\n    return {\n      tableRole: callOrReturn(getExtensionField(extension, \"tableRole\", context))\n    };\n  }\n});\n\n// src/kit/index.ts\nvar TableKit = Extension.create({\n  name: \"tableKit\",\n  addExtensions() {\n    const extensions = [];\n    if (this.options.table !== false) {\n      extensions.push(Table.configure(this.options.table));\n    }\n    if (this.options.tableCell !== false) {\n      extensions.push(TableCell.configure(this.options.tableCell));\n    }\n    if (this.options.tableHeader !== false) {\n      extensions.push(TableHeader.configure(this.options.tableHeader));\n    }\n    if (this.options.tableRow !== false) {\n      extensions.push(TableRow.configure(this.options.tableRow));\n    }\n    return extensions;\n  }\n});\nexport {\n  Table,\n  TableCell,\n  TableHeader,\n  TableKit,\n  TableRow,\n  TableView,\n  createColGroup,\n  createTable,\n  updateColumns\n};\n//# sourceMappingURL=index.js.map","// THIS FILE IS AUTOMATICALLY GENERATED DO NOT EDIT DIRECTLY\n// See update-tlds.js for encoding/decoding format\n// https://data.iana.org/TLD/tlds-alpha-by-domain.txt\nconst encodedTlds = 'aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2';\n// Internationalized domain names containing non-ASCII\nconst encodedUtlds = 'ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2';\n\n/**\n * Finite State Machine generation utilities\n */\n\n/**\n * @template T\n * @typedef {{ [group: string]: T[] }} Collections\n */\n\n/**\n * @typedef {{ [group: string]: true }} Flags\n */\n\n// Keys in scanner Collections instances\nconst numeric = 'numeric';\nconst ascii = 'ascii';\nconst alpha = 'alpha';\nconst asciinumeric = 'asciinumeric';\nconst alphanumeric = 'alphanumeric';\nconst domain = 'domain';\nconst emoji = 'emoji';\nconst scheme = 'scheme';\nconst slashscheme = 'slashscheme';\nconst whitespace = 'whitespace';\n\n/**\n * @template T\n * @param {string} name\n * @param {Collections<T>} groups to register in\n * @returns {T[]} Current list of tokens in the given collection\n */\nfunction registerGroup(name, groups) {\n  if (!(name in groups)) {\n    groups[name] = [];\n  }\n  return groups[name];\n}\n\n/**\n * @template T\n * @param {T} t token to add\n * @param {Collections<T>} groups\n * @param {Flags} flags\n */\nfunction addToGroups(t, flags, groups) {\n  if (flags[numeric]) {\n    flags[asciinumeric] = true;\n    flags[alphanumeric] = true;\n  }\n  if (flags[ascii]) {\n    flags[asciinumeric] = true;\n    flags[alpha] = true;\n  }\n  if (flags[asciinumeric]) {\n    flags[alphanumeric] = true;\n  }\n  if (flags[alpha]) {\n    flags[alphanumeric] = true;\n  }\n  if (flags[alphanumeric]) {\n    flags[domain] = true;\n  }\n  if (flags[emoji]) {\n    flags[domain] = true;\n  }\n  for (const k in flags) {\n    const group = registerGroup(k, groups);\n    if (group.indexOf(t) < 0) {\n      group.push(t);\n    }\n  }\n}\n\n/**\n * @template T\n * @param {T} t token to check\n * @param {Collections<T>} groups\n * @returns {Flags} group flags that contain this token\n */\nfunction flagsForToken(t, groups) {\n  const result = {};\n  for (const c in groups) {\n    if (groups[c].indexOf(t) >= 0) {\n      result[c] = true;\n    }\n  }\n  return result;\n}\n\n/**\n * @template T\n * @typedef {null | T } Transition\n */\n\n/**\n * Define a basic state machine state. j is the list of character transitions,\n * jr is the list of regex-match transitions, jd is the default state to\n * transition to t is the accepting token type, if any. If this is the terminal\n * state, then it does not emit a token.\n *\n * The template type T represents the type of the token this state accepts. This\n * should be a string (such as of the token exports in `text.js`) or a\n * MultiToken subclass (from `multi.js`)\n *\n * @template T\n * @param {T} [token] Token that this state emits\n */\nfunction State(token = null) {\n  // this.n = null; // DEBUG: State name\n  /** @type {{ [input: string]: State<T> }} j */\n  this.j = {}; // IMPLEMENTATION 1\n  // this.j = []; // IMPLEMENTATION 2\n  /** @type {[RegExp, State<T>][]} jr */\n  this.jr = [];\n  /** @type {?State<T>} jd */\n  this.jd = null;\n  /** @type {?T} t */\n  this.t = token;\n}\n\n/**\n * Scanner token groups\n * @type Collections<string>\n */\nState.groups = {};\nState.prototype = {\n  accepts() {\n    return !!this.t;\n  },\n  /**\n   * Follow an existing transition from the given input to the next state.\n   * Does not mutate.\n   * @param {string} input character or token type to transition on\n   * @returns {?State<T>} the next state, if any\n   */\n  go(input) {\n    const state = this;\n    const nextState = state.j[input];\n    if (nextState) {\n      return nextState;\n    }\n    for (let i = 0; i < state.jr.length; i++) {\n      const regex = state.jr[i][0];\n      const nextState = state.jr[i][1]; // note: might be empty to prevent default jump\n      if (nextState && regex.test(input)) {\n        return nextState;\n      }\n    }\n    // Nowhere left to jump! Return default, if any\n    return state.jd;\n  },\n  /**\n   * Whether the state has a transition for the given input. Set the second\n   * argument to true to only look for an exact match (and not a default or\n   * regular-expression-based transition)\n   * @param {string} input\n   * @param {boolean} exactOnly\n   */\n  has(input, exactOnly = false) {\n    return exactOnly ? input in this.j : !!this.go(input);\n  },\n  /**\n   * Short for \"transition all\"; create a transition from the array of items\n   * in the given list to the same final resulting state.\n   * @param {string | string[]} inputs Group of inputs to transition on\n   * @param {Transition<T> | State<T>} [next] Transition options\n   * @param {Flags} [flags] Collections flags to add token to\n   * @param {Collections<T>} [groups] Master list of token groups\n   */\n  ta(inputs, next, flags, groups) {\n    for (let i = 0; i < inputs.length; i++) {\n      this.tt(inputs[i], next, flags, groups);\n    }\n  },\n  /**\n   * Short for \"take regexp transition\"; defines a transition for this state\n   * when it encounters a token which matches the given regular expression\n   * @param {RegExp} regexp Regular expression transition (populate first)\n   * @param {T | State<T>} [next] Transition options\n   * @param {Flags} [flags] Collections flags to add token to\n   * @param {Collections<T>} [groups] Master list of token groups\n   * @returns {State<T>} taken after the given input\n   */\n  tr(regexp, next, flags, groups) {\n    groups = groups || State.groups;\n    let nextState;\n    if (next && next.j) {\n      nextState = next;\n    } else {\n      // Token with maybe token groups\n      nextState = new State(next);\n      if (flags && groups) {\n        addToGroups(next, flags, groups);\n      }\n    }\n    this.jr.push([regexp, nextState]);\n    return nextState;\n  },\n  /**\n   * Short for \"take transitions\", will take as many sequential transitions as\n   * the length of the given input and returns the\n   * resulting final state.\n   * @param {string | string[]} input\n   * @param {T | State<T>} [next] Transition options\n   * @param {Flags} [flags] Collections flags to add token to\n   * @param {Collections<T>} [groups] Master list of token groups\n   * @returns {State<T>} taken after the given input\n   */\n  ts(input, next, flags, groups) {\n    let state = this;\n    const len = input.length;\n    if (!len) {\n      return state;\n    }\n    for (let i = 0; i < len - 1; i++) {\n      state = state.tt(input[i]);\n    }\n    return state.tt(input[len - 1], next, flags, groups);\n  },\n  /**\n   * Short for \"take transition\", this is a method for building/working with\n   * state machines.\n   *\n   * If a state already exists for the given input, returns it.\n   *\n   * If a token is specified, that state will emit that token when reached by\n   * the linkify engine.\n   *\n   * If no state exists, it will be initialized with some default transitions\n   * that resemble existing default transitions.\n   *\n   * If a state is given for the second argument, that state will be\n   * transitioned to on the given input regardless of what that input\n   * previously did.\n   *\n   * Specify a token group flags to define groups that this token belongs to.\n   * The token will be added to corresponding entires in the given groups\n   * object.\n   *\n   * @param {string} input character, token type to transition on\n   * @param {T | State<T>} [next] Transition options\n   * @param {Flags} [flags] Collections flags to add token to\n   * @param {Collections<T>} [groups] Master list of groups\n   * @returns {State<T>} taken after the given input\n   */\n  tt(input, next, flags, groups) {\n    groups = groups || State.groups;\n    const state = this;\n\n    // Check if existing state given, just a basic transition\n    if (next && next.j) {\n      state.j[input] = next;\n      return next;\n    }\n    const t = next;\n\n    // Take the transition with the usual default mechanisms and use that as\n    // a template for creating the next state\n    let nextState,\n      templateState = state.go(input);\n    if (templateState) {\n      nextState = new State();\n      Object.assign(nextState.j, templateState.j);\n      nextState.jr.push.apply(nextState.jr, templateState.jr);\n      nextState.jd = templateState.jd;\n      nextState.t = templateState.t;\n    } else {\n      nextState = new State();\n    }\n    if (t) {\n      // Ensure newly token is in the same groups as the old token\n      if (groups) {\n        if (nextState.t && typeof nextState.t === 'string') {\n          const allFlags = Object.assign(flagsForToken(nextState.t, groups), flags);\n          addToGroups(t, allFlags, groups);\n        } else if (flags) {\n          addToGroups(t, flags, groups);\n        }\n      }\n      nextState.t = t; // overwrite anything that was previously there\n    }\n    state.j[input] = nextState;\n    return nextState;\n  }\n};\n\n// Helper functions to improve minification (not exported outside linkifyjs module)\n\n/**\n * @template T\n * @param {State<T>} state\n * @param {string | string[]} input\n * @param {Flags} [flags]\n * @param {Collections<T>} [groups]\n */\nconst ta = (state, input, next, flags, groups) => state.ta(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State<T>} state\n * @param {RegExp} regexp\n * @param {T | State<T>} [next]\n * @param {Flags} [flags]\n * @param {Collections<T>} [groups]\n */\nconst tr = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups);\n\n/**\n * @template T\n * @param {State<T>} state\n * @param {string | string[]} input\n * @param {T | State<T>} [next]\n * @param {Flags} [flags]\n * @param {Collections<T>} [groups]\n */\nconst ts = (state, input, next, flags, groups) => state.ts(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State<T>} state\n * @param {string} input\n * @param {T | State<T>} [next]\n * @param {Collections<T>} [groups]\n * @param {Flags} [flags]\n */\nconst tt = (state, input, next, flags, groups) => state.tt(input, next, flags, groups);\n\n/******************************************************************************\nText Tokens\nIdentifiers for token outputs from the regexp scanner\n******************************************************************************/\n\n// A valid web domain token\nconst WORD = 'WORD'; // only contains a-z\nconst UWORD = 'UWORD'; // contains letters other than a-z, used for IDN\nconst ASCIINUMERICAL = 'ASCIINUMERICAL'; // contains a-z, 0-9\nconst ALPHANUMERICAL = 'ALPHANUMERICAL'; // contains numbers and letters other than a-z, used for IDN\n\n// Special case of word\nconst LOCALHOST = 'LOCALHOST';\n\n// Valid top-level domain, special case of WORD (see tlds.js)\nconst TLD = 'TLD';\n\n// Valid IDN TLD, special case of UWORD (see tlds.js)\nconst UTLD = 'UTLD';\n\n// The scheme portion of a web URI protocol. Supported types include: `mailto`,\n// `file`, and user-defined custom protocols. Limited to schemes that contain\n// only letters\nconst SCHEME = 'SCHEME';\n\n// Similar to SCHEME, except makes distinction for schemes that must always be\n// followed by `://`, not just `:`. Supported types include `http`, `https`,\n// `ftp`, `ftps`\nconst SLASH_SCHEME = 'SLASH_SCHEME';\n\n// Any sequence of digits 0-9\nconst NUM = 'NUM';\n\n// Any number of consecutive whitespace characters that are not newline\nconst WS = 'WS';\n\n// New line (unix style)\nconst NL = 'NL'; // \\n\n\n// Opening/closing bracket classes\n// TODO: Rename OPEN -> LEFT and CLOSE -> RIGHT in v5 to fit with Unicode names\n// Also rename angle brackes to LESSTHAN and GREATER THAN\nconst OPENBRACE = 'OPENBRACE'; // {\nconst CLOSEBRACE = 'CLOSEBRACE'; // }\nconst OPENBRACKET = 'OPENBRACKET'; // [\nconst CLOSEBRACKET = 'CLOSEBRACKET'; // ]\nconst OPENPAREN = 'OPENPAREN'; // (\nconst CLOSEPAREN = 'CLOSEPAREN'; // )\nconst OPENANGLEBRACKET = 'OPENANGLEBRACKET'; // <\nconst CLOSEANGLEBRACKET = 'CLOSEANGLEBRACKET'; // >\nconst FULLWIDTHLEFTPAREN = 'FULLWIDTHLEFTPAREN'; // （\nconst FULLWIDTHRIGHTPAREN = 'FULLWIDTHRIGHTPAREN'; // ）\nconst LEFTCORNERBRACKET = 'LEFTCORNERBRACKET'; // 「\nconst RIGHTCORNERBRACKET = 'RIGHTCORNERBRACKET'; // 」\nconst LEFTWHITECORNERBRACKET = 'LEFTWHITECORNERBRACKET'; // 『\nconst RIGHTWHITECORNERBRACKET = 'RIGHTWHITECORNERBRACKET'; // 』\nconst FULLWIDTHLESSTHAN = 'FULLWIDTHLESSTHAN'; // ＜\nconst FULLWIDTHGREATERTHAN = 'FULLWIDTHGREATERTHAN'; // ＞\n\n// Various symbols\nconst AMPERSAND = 'AMPERSAND'; // &\nconst APOSTROPHE = 'APOSTROPHE'; // '\nconst ASTERISK = 'ASTERISK'; // *\nconst AT = 'AT'; // @\nconst BACKSLASH = 'BACKSLASH'; // \\\nconst BACKTICK = 'BACKTICK'; // `\nconst CARET = 'CARET'; // ^\nconst COLON = 'COLON'; // :\nconst COMMA = 'COMMA'; // ,\nconst DOLLAR = 'DOLLAR'; // $\nconst DOT = 'DOT'; // .\nconst EQUALS = 'EQUALS'; // =\nconst EXCLAMATION = 'EXCLAMATION'; // !\nconst HYPHEN = 'HYPHEN'; // -\nconst PERCENT = 'PERCENT'; // %\nconst PIPE = 'PIPE'; // |\nconst PLUS = 'PLUS'; // +\nconst POUND = 'POUND'; // #\nconst QUERY = 'QUERY'; // ?\nconst QUOTE = 'QUOTE'; // \"\nconst FULLWIDTHMIDDLEDOT = 'FULLWIDTHMIDDLEDOT'; // ・\n\nconst SEMI = 'SEMI'; // ;\nconst SLASH = 'SLASH'; // /\nconst TILDE = 'TILDE'; // ~\nconst UNDERSCORE = 'UNDERSCORE'; // _\n\n// Emoji symbol\nconst EMOJI$1 = 'EMOJI';\n\n// Default token - anything that is not one of the above\nconst SYM = 'SYM';\n\nvar tk = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tALPHANUMERICAL: ALPHANUMERICAL,\n\tAMPERSAND: AMPERSAND,\n\tAPOSTROPHE: APOSTROPHE,\n\tASCIINUMERICAL: ASCIINUMERICAL,\n\tASTERISK: ASTERISK,\n\tAT: AT,\n\tBACKSLASH: BACKSLASH,\n\tBACKTICK: BACKTICK,\n\tCARET: CARET,\n\tCLOSEANGLEBRACKET: CLOSEANGLEBRACKET,\n\tCLOSEBRACE: CLOSEBRACE,\n\tCLOSEBRACKET: CLOSEBRACKET,\n\tCLOSEPAREN: CLOSEPAREN,\n\tCOLON: COLON,\n\tCOMMA: COMMA,\n\tDOLLAR: DOLLAR,\n\tDOT: DOT,\n\tEMOJI: EMOJI$1,\n\tEQUALS: EQUALS,\n\tEXCLAMATION: EXCLAMATION,\n\tFULLWIDTHGREATERTHAN: FULLWIDTHGREATERTHAN,\n\tFULLWIDTHLEFTPAREN: FULLWIDTHLEFTPAREN,\n\tFULLWIDTHLESSTHAN: FULLWIDTHLESSTHAN,\n\tFULLWIDTHMIDDLEDOT: FULLWIDTHMIDDLEDOT,\n\tFULLWIDTHRIGHTPAREN: FULLWIDTHRIGHTPAREN,\n\tHYPHEN: HYPHEN,\n\tLEFTCORNERBRACKET: LEFTCORNERBRACKET,\n\tLEFTWHITECORNERBRACKET: LEFTWHITECORNERBRACKET,\n\tLOCALHOST: LOCALHOST,\n\tNL: NL,\n\tNUM: NUM,\n\tOPENANGLEBRACKET: OPENANGLEBRACKET,\n\tOPENBRACE: OPENBRACE,\n\tOPENBRACKET: OPENBRACKET,\n\tOPENPAREN: OPENPAREN,\n\tPERCENT: PERCENT,\n\tPIPE: PIPE,\n\tPLUS: PLUS,\n\tPOUND: POUND,\n\tQUERY: QUERY,\n\tQUOTE: QUOTE,\n\tRIGHTCORNERBRACKET: RIGHTCORNERBRACKET,\n\tRIGHTWHITECORNERBRACKET: RIGHTWHITECORNERBRACKET,\n\tSCHEME: SCHEME,\n\tSEMI: SEMI,\n\tSLASH: SLASH,\n\tSLASH_SCHEME: SLASH_SCHEME,\n\tSYM: SYM,\n\tTILDE: TILDE,\n\tTLD: TLD,\n\tUNDERSCORE: UNDERSCORE,\n\tUTLD: UTLD,\n\tUWORD: UWORD,\n\tWORD: WORD,\n\tWS: WS\n});\n\n// Note that these two Unicode ones expand into a really big one with Babel\nconst ASCII_LETTER = /[a-z]/;\nconst LETTER = /\\p{L}/u; // Any Unicode character with letter data type\nconst EMOJI = /\\p{Emoji}/u; // Any Unicode emoji character\nconst EMOJI_VARIATION$1 = /\\ufe0f/;\nconst DIGIT = /\\d/;\nconst SPACE = /\\s/;\n\nvar regexp = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tASCII_LETTER: ASCII_LETTER,\n\tDIGIT: DIGIT,\n\tEMOJI: EMOJI,\n\tEMOJI_VARIATION: EMOJI_VARIATION$1,\n\tLETTER: LETTER,\n\tSPACE: SPACE\n});\n\n/**\n\tThe scanner provides an interface that takes a string of text as input, and\n\toutputs an array of tokens instances that can be used for easy URL parsing.\n*/\n\nconst CR = '\\r'; // carriage-return character\nconst LF = '\\n'; // line-feed character\nconst EMOJI_VARIATION = '\\ufe0f'; // Variation selector, follows heart and others\nconst EMOJI_JOINER = '\\u200d'; // zero-width joiner\nconst OBJECT_REPLACEMENT = '\\ufffc'; // whitespace placeholder that sometimes appears in rich text editors\n\nlet tlds = null,\n  utlds = null; // don't change so only have to be computed once\n\n/**\n * Scanner output token:\n * - `t` is the token name (e.g., 'NUM', 'EMOJI', 'TLD')\n * - `v` is the value of the token (e.g., '123', '❤️', 'com')\n * - `s` is the start index of the token in the original string\n * - `e` is the end index of the token in the original string\n * @typedef {{t: string, v: string, s: number, e: number}} Token\n */\n\n/**\n * @template T\n * @typedef {{ [collection: string]: T[] }} Collections\n */\n\n/**\n * Initialize the scanner character-based state machine for the given start\n * state\n * @param {[string, boolean][]} customSchemes List of custom schemes, where each\n * item is a length-2 tuple with the first element set to the string scheme, and\n * the second element set to `true` if the `://` after the scheme is optional\n */\nfunction init$2(customSchemes = []) {\n  // Frequently used states (name argument removed during minification)\n  /** @type Collections<string> */\n  const groups = {}; // of tokens\n  State.groups = groups;\n  /** @type State<string> */\n  const Start = new State();\n  if (tlds == null) {\n    tlds = decodeTlds(encodedTlds);\n  }\n  if (utlds == null) {\n    utlds = decodeTlds(encodedUtlds);\n  }\n\n  // States for special URL symbols that accept immediately after start\n  tt(Start, \"'\", APOSTROPHE);\n  tt(Start, '{', OPENBRACE);\n  tt(Start, '}', CLOSEBRACE);\n  tt(Start, '[', OPENBRACKET);\n  tt(Start, ']', CLOSEBRACKET);\n  tt(Start, '(', OPENPAREN);\n  tt(Start, ')', CLOSEPAREN);\n  tt(Start, '<', OPENANGLEBRACKET);\n  tt(Start, '>', CLOSEANGLEBRACKET);\n  tt(Start, '（', FULLWIDTHLEFTPAREN);\n  tt(Start, '）', FULLWIDTHRIGHTPAREN);\n  tt(Start, '「', LEFTCORNERBRACKET);\n  tt(Start, '」', RIGHTCORNERBRACKET);\n  tt(Start, '『', LEFTWHITECORNERBRACKET);\n  tt(Start, '』', RIGHTWHITECORNERBRACKET);\n  tt(Start, '＜', FULLWIDTHLESSTHAN);\n  tt(Start, '＞', FULLWIDTHGREATERTHAN);\n  tt(Start, '&', AMPERSAND);\n  tt(Start, '*', ASTERISK);\n  tt(Start, '@', AT);\n  tt(Start, '`', BACKTICK);\n  tt(Start, '^', CARET);\n  tt(Start, ':', COLON);\n  tt(Start, ',', COMMA);\n  tt(Start, '$', DOLLAR);\n  tt(Start, '.', DOT);\n  tt(Start, '=', EQUALS);\n  tt(Start, '!', EXCLAMATION);\n  tt(Start, '-', HYPHEN);\n  tt(Start, '%', PERCENT);\n  tt(Start, '|', PIPE);\n  tt(Start, '+', PLUS);\n  tt(Start, '#', POUND);\n  tt(Start, '?', QUERY);\n  tt(Start, '\"', QUOTE);\n  tt(Start, '/', SLASH);\n  tt(Start, ';', SEMI);\n  tt(Start, '~', TILDE);\n  tt(Start, '_', UNDERSCORE);\n  tt(Start, '\\\\', BACKSLASH);\n  tt(Start, '・', FULLWIDTHMIDDLEDOT);\n  const Num = tr(Start, DIGIT, NUM, {\n    [numeric]: true\n  });\n  tr(Num, DIGIT, Num);\n  const Asciinumeric = tr(Num, ASCII_LETTER, ASCIINUMERICAL, {\n    [asciinumeric]: true\n  });\n  const Alphanumeric = tr(Num, LETTER, ALPHANUMERICAL, {\n    [alphanumeric]: true\n  });\n\n  // State which emits a word token\n  const Word = tr(Start, ASCII_LETTER, WORD, {\n    [ascii]: true\n  });\n  tr(Word, DIGIT, Asciinumeric);\n  tr(Word, ASCII_LETTER, Word);\n  tr(Asciinumeric, DIGIT, Asciinumeric);\n  tr(Asciinumeric, ASCII_LETTER, Asciinumeric);\n\n  // Same as previous, but specific to non-fsm.ascii alphabet words\n  const UWord = tr(Start, LETTER, UWORD, {\n    [alpha]: true\n  });\n  tr(UWord, ASCII_LETTER); // Non-accepting\n  tr(UWord, DIGIT, Alphanumeric);\n  tr(UWord, LETTER, UWord);\n  tr(Alphanumeric, DIGIT, Alphanumeric);\n  tr(Alphanumeric, ASCII_LETTER); // Non-accepting\n  tr(Alphanumeric, LETTER, Alphanumeric); // Non-accepting\n\n  // Whitespace jumps\n  // Tokens of only non-newline whitespace are arbitrarily long\n  // If any whitespace except newline, more whitespace!\n  const Nl = tt(Start, LF, NL, {\n    [whitespace]: true\n  });\n  const Cr = tt(Start, CR, WS, {\n    [whitespace]: true\n  });\n  const Ws = tr(Start, SPACE, WS, {\n    [whitespace]: true\n  });\n  tt(Start, OBJECT_REPLACEMENT, Ws);\n  tt(Cr, LF, Nl); // \\r\\n\n  tt(Cr, OBJECT_REPLACEMENT, Ws);\n  tr(Cr, SPACE, Ws);\n  tt(Ws, CR); // non-accepting state to avoid mixing whitespaces\n  tt(Ws, LF); // non-accepting state to avoid mixing whitespaces\n  tr(Ws, SPACE, Ws);\n  tt(Ws, OBJECT_REPLACEMENT, Ws);\n\n  // Emoji tokens. They are not grouped by the scanner except in cases where a\n  // zero-width joiner is present\n  const Emoji = tr(Start, EMOJI, EMOJI$1, {\n    [emoji]: true\n  });\n  tt(Emoji, '#'); // no transition, emoji regex seems to match #\n  tr(Emoji, EMOJI, Emoji);\n  tt(Emoji, EMOJI_VARIATION, Emoji);\n  // tt(Start, EMOJI_VARIATION, Emoji); // This one is sketchy\n\n  const EmojiJoiner = tt(Emoji, EMOJI_JOINER);\n  tt(EmojiJoiner, '#');\n  tr(EmojiJoiner, EMOJI, Emoji);\n  // tt(EmojiJoiner, EMOJI_VARIATION, Emoji); // also sketchy\n\n  // Generates states for top-level domains\n  // Note that this is most accurate when tlds are in alphabetical order\n  const wordjr = [[ASCII_LETTER, Word], [DIGIT, Asciinumeric]];\n  const uwordjr = [[ASCII_LETTER, null], [LETTER, UWord], [DIGIT, Alphanumeric]];\n  for (let i = 0; i < tlds.length; i++) {\n    fastts(Start, tlds[i], TLD, WORD, wordjr);\n  }\n  for (let i = 0; i < utlds.length; i++) {\n    fastts(Start, utlds[i], UTLD, UWORD, uwordjr);\n  }\n  addToGroups(TLD, {\n    tld: true,\n    ascii: true\n  }, groups);\n  addToGroups(UTLD, {\n    utld: true,\n    alpha: true\n  }, groups);\n\n  // Collect the states generated by different protocols. NOTE: If any new TLDs\n  // get added that are also protocols, set the token to be the same as the\n  // protocol to ensure parsing works as expected.\n  fastts(Start, 'file', SCHEME, WORD, wordjr);\n  fastts(Start, 'mailto', SCHEME, WORD, wordjr);\n  fastts(Start, 'http', SLASH_SCHEME, WORD, wordjr);\n  fastts(Start, 'https', SLASH_SCHEME, WORD, wordjr);\n  fastts(Start, 'ftp', SLASH_SCHEME, WORD, wordjr);\n  fastts(Start, 'ftps', SLASH_SCHEME, WORD, wordjr);\n  addToGroups(SCHEME, {\n    scheme: true,\n    ascii: true\n  }, groups);\n  addToGroups(SLASH_SCHEME, {\n    slashscheme: true,\n    ascii: true\n  }, groups);\n\n  // Register custom schemes. Assumes each scheme is asciinumeric with hyphens\n  customSchemes = customSchemes.sort((a, b) => a[0] > b[0] ? 1 : -1);\n  for (let i = 0; i < customSchemes.length; i++) {\n    const sch = customSchemes[i][0];\n    const optionalSlashSlash = customSchemes[i][1];\n    const flags = optionalSlashSlash ? {\n      [scheme]: true\n    } : {\n      [slashscheme]: true\n    };\n    if (sch.indexOf('-') >= 0) {\n      flags[domain] = true;\n    } else if (!ASCII_LETTER.test(sch)) {\n      flags[numeric] = true; // numbers only\n    } else if (DIGIT.test(sch)) {\n      flags[asciinumeric] = true;\n    } else {\n      flags[ascii] = true;\n    }\n    ts(Start, sch, sch, flags);\n  }\n\n  // Localhost token\n  ts(Start, 'localhost', LOCALHOST, {\n    ascii: true\n  });\n\n  // Set default transition for start state (some symbol)\n  Start.jd = new State(SYM);\n  return {\n    start: Start,\n    tokens: Object.assign({\n      groups\n    }, tk)\n  };\n}\n\n/**\n\tGiven a string, returns an array of TOKEN instances representing the\n\tcomposition of that string.\n\n\t@method run\n\t@param {State<string>} start scanner starting state\n\t@param {string} str input string to scan\n\t@return {Token[]} list of tokens, each with a type and value\n*/\nfunction run$1(start, str) {\n  // State machine is not case sensitive, so input is tokenized in lowercased\n  // form (still returns regular case). Uses selective `toLowerCase` because\n  // lowercasing the entire string causes the length and character position to\n  // vary in some non-English strings with V8-based runtimes.\n  const iterable = stringToArray(str.replace(/[A-Z]/g, c => c.toLowerCase()));\n  const charCount = iterable.length; // <= len if there are emojis, etc\n  const tokens = []; // return value\n\n  // cursor through the string itself, accounting for characters that have\n  // width with length 2 such as emojis\n  let cursor = 0;\n\n  // Cursor through the array-representation of the string\n  let charCursor = 0;\n\n  // Tokenize the string\n  while (charCursor < charCount) {\n    let state = start;\n    let nextState = null;\n    let tokenLength = 0;\n    let latestAccepting = null;\n    let sinceAccepts = -1;\n    let charsSinceAccepts = -1;\n    while (charCursor < charCount && (nextState = state.go(iterable[charCursor]))) {\n      state = nextState;\n\n      // Keep track of the latest accepting state\n      if (state.accepts()) {\n        sinceAccepts = 0;\n        charsSinceAccepts = 0;\n        latestAccepting = state;\n      } else if (sinceAccepts >= 0) {\n        sinceAccepts += iterable[charCursor].length;\n        charsSinceAccepts++;\n      }\n      tokenLength += iterable[charCursor].length;\n      cursor += iterable[charCursor].length;\n      charCursor++;\n    }\n\n    // Roll back to the latest accepting state\n    cursor -= sinceAccepts;\n    charCursor -= charsSinceAccepts;\n    tokenLength -= sinceAccepts;\n\n    // No more jumps, just make a new token from the last accepting one\n    tokens.push({\n      t: latestAccepting.t,\n      // token type/name\n      v: str.slice(cursor - tokenLength, cursor),\n      // string value\n      s: cursor - tokenLength,\n      // start index\n      e: cursor // end index (excluding)\n    });\n  }\n  return tokens;\n}\n\n/**\n * Convert a String to an Array of characters, taking into account that some\n * characters like emojis take up two string indexes.\n *\n * Adapted from core-js (MIT license)\n * https://github.com/zloirock/core-js/blob/2d69cf5f99ab3ea3463c395df81e5a15b68f49d9/packages/core-js/internals/string-multibyte.js\n *\n * @function stringToArray\n * @param {string} str\n * @returns {string[]}\n */\nfunction stringToArray(str) {\n  const result = [];\n  const len = str.length;\n  let index = 0;\n  while (index < len) {\n    let first = str.charCodeAt(index);\n    let second;\n    let char = first < 0xd800 || first > 0xdbff || index + 1 === len || (second = str.charCodeAt(index + 1)) < 0xdc00 || second > 0xdfff ? str[index] // single character\n    : str.slice(index, index + 2); // two-index characters\n    result.push(char);\n    index += char.length;\n  }\n  return result;\n}\n\n/**\n * Fast version of ts function for when transition defaults are well known\n * @param {State<string>} state\n * @param {string} input\n * @param {string} t\n * @param {string} defaultt\n * @param {[RegExp, State<string>][]} jr\n * @returns {State<string>}\n */\nfunction fastts(state, input, t, defaultt, jr) {\n  let next;\n  const len = input.length;\n  for (let i = 0; i < len - 1; i++) {\n    const char = input[i];\n    if (state.j[char]) {\n      next = state.j[char];\n    } else {\n      next = new State(defaultt);\n      next.jr = jr.slice();\n      state.j[char] = next;\n    }\n    state = next;\n  }\n  next = new State(t);\n  next.jr = jr.slice();\n  state.j[input[len - 1]] = next;\n  return next;\n}\n\n/**\n * Converts a string of Top-Level Domain names encoded in update-tlds.js back\n * into a list of strings.\n * @param {str} encoded encoded TLDs string\n * @returns {str[]} original TLDs list\n */\nfunction decodeTlds(encoded) {\n  const words = [];\n  const stack = [];\n  let i = 0;\n  let digits = '0123456789';\n  while (i < encoded.length) {\n    let popDigitCount = 0;\n    while (digits.indexOf(encoded[i + popDigitCount]) >= 0) {\n      popDigitCount++; // encountered some digits, have to pop to go one level up trie\n    }\n    if (popDigitCount > 0) {\n      words.push(stack.join('')); // whatever preceded the pop digits must be a word\n      for (let popCount = parseInt(encoded.substring(i, i + popDigitCount), 10); popCount > 0; popCount--) {\n        stack.pop();\n      }\n      i += popDigitCount;\n    } else {\n      stack.push(encoded[i]); // drop down a level into the trie\n      i++;\n    }\n  }\n  return words;\n}\n\n/**\n * An object where each key is a valid DOM Event Name such as `click` or `focus`\n * and each value is an event handler function.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/Element#events\n * @typedef {?{ [event: string]: Function }} EventListeners\n */\n\n/**\n * All formatted properties required to render a link, including `tagName`,\n * `attributes`, `content` and `eventListeners`.\n * @typedef {{ tagName: any, attributes: {[attr: string]: any}, content: string,\n * eventListeners: EventListeners }} IntermediateRepresentation\n */\n\n/**\n * Specify either an object described by the template type `O` or a function.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `O`\n * @template O\n * @typedef {O | ((value: string, type: string, token: MultiToken) => O)} OptObj\n */\n\n/**\n * Specify either a function described by template type `F` or an object.\n *\n * Each key in the object should be a link type (`'url'`, `'hashtag`', etc.). Each\n * value should be a function with template type `F` that is called when the\n * corresponding link type is encountered.\n * @template F\n * @typedef {F | { [type: string]: F}} OptFn\n */\n\n/**\n * Specify either a value with template type `V`, a function that returns `V` or\n * an object where each value resolves to `V`.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `V`\n *\n * For the object, each key should be a link type (`'url'`, `'hashtag`', etc.).\n * Each value should either have type `V` or a function that returns V. This\n * function similarly takes a string value and a token.\n *\n * Example valid types for `Opt<string>`:\n *\n * ```js\n * 'hello'\n * (value, type, token) => 'world'\n * { url: 'hello', email: (value, token) => 'world'}\n * ```\n * @template V\n * @typedef {V | ((value: string, type: string, token: MultiToken) => V) | { [type: string]: V | ((value: string, token: MultiToken) => V) }} Opt\n */\n\n/**\n * See available options: https://linkify.js.org/docs/options.html\n * @typedef {{\n * \tdefaultProtocol?: string,\n *  events?: OptObj<EventListeners>,\n * \tformat?: Opt<string>,\n * \tformatHref?: Opt<string>,\n * \tnl2br?: boolean,\n * \ttagName?: Opt<any>,\n * \ttarget?: Opt<string>,\n * \trel?: Opt<string>,\n * \tvalidate?: Opt<boolean>,\n * \ttruncate?: Opt<number>,\n * \tclassName?: Opt<string>,\n * \tattributes?: OptObj<({ [attr: string]: any })>,\n *  ignoreTags?: string[],\n * \trender?: OptFn<((ir: IntermediateRepresentation) => any)>\n * }} Opts\n */\n\n/**\n * @type Required<Opts>\n */\nconst defaults = {\n  defaultProtocol: 'http',\n  events: null,\n  format: noop,\n  formatHref: noop,\n  nl2br: false,\n  tagName: 'a',\n  target: null,\n  rel: null,\n  validate: true,\n  truncate: Infinity,\n  className: null,\n  attributes: null,\n  ignoreTags: [],\n  render: null\n};\n\n/**\n * Utility class for linkify interfaces to apply specified\n * {@link Opts formatting and rendering options}.\n *\n * @param {Opts | Options} [opts] Option value overrides.\n * @param {(ir: IntermediateRepresentation) => any} [defaultRender] (For\n *   internal use) default render function that determines how to generate an\n *   HTML element based on a link token's derived tagName, attributes and HTML.\n *   Similar to render option\n */\nfunction Options(opts, defaultRender = null) {\n  let o = Object.assign({}, defaults);\n  if (opts) {\n    o = Object.assign(o, opts instanceof Options ? opts.o : opts);\n  }\n\n  // Ensure all ignored tags are uppercase\n  const ignoredTags = o.ignoreTags;\n  const uppercaseIgnoredTags = [];\n  for (let i = 0; i < ignoredTags.length; i++) {\n    uppercaseIgnoredTags.push(ignoredTags[i].toUpperCase());\n  }\n  /** @protected */\n  this.o = o;\n  if (defaultRender) {\n    this.defaultRender = defaultRender;\n  }\n  this.ignoreTags = uppercaseIgnoredTags;\n}\nOptions.prototype = {\n  o: defaults,\n  /**\n   * @type string[]\n   */\n  ignoreTags: [],\n  /**\n   * @param {IntermediateRepresentation} ir\n   * @returns {any}\n   */\n  defaultRender(ir) {\n    return ir;\n  },\n  /**\n   * Returns true or false based on whether a token should be displayed as a\n   * link based on the user options.\n   * @param {MultiToken} token\n   * @returns {boolean}\n   */\n  check(token) {\n    return this.get('validate', token.toString(), token);\n  },\n  // Private methods\n\n  /**\n   * Resolve an option's value based on the value of the option and the given\n   * params. If operator and token are specified and the target option is\n   * callable, automatically calls the function with the given argument.\n   * @template {keyof Opts} K\n   * @param {K} key Name of option to use\n   * @param {string} [operator] will be passed to the target option if it's a\n   * function. If not specified, RAW function value gets returned\n   * @param {MultiToken} [token] The token from linkify.tokenize\n   * @returns {Opts[K] | any}\n   */\n  get(key, operator, token) {\n    const isCallable = operator != null;\n    let option = this.o[key];\n    if (!option) {\n      return option;\n    }\n    if (typeof option === 'object') {\n      option = token.t in option ? option[token.t] : defaults[key];\n      if (typeof option === 'function' && isCallable) {\n        option = option(operator, token);\n      }\n    } else if (typeof option === 'function' && isCallable) {\n      option = option(operator, token.t, token);\n    }\n    return option;\n  },\n  /**\n   * @template {keyof Opts} L\n   * @param {L} key Name of options object to use\n   * @param {string} [operator]\n   * @param {MultiToken} [token]\n   * @returns {Opts[L] | any}\n   */\n  getObj(key, operator, token) {\n    let obj = this.o[key];\n    if (typeof obj === 'function' && operator != null) {\n      obj = obj(operator, token.t, token);\n    }\n    return obj;\n  },\n  /**\n   * Convert the given token to a rendered element that may be added to the\n   * calling-interface's DOM\n   * @param {MultiToken} token Token to render to an HTML element\n   * @returns {any} Render result; e.g., HTML string, DOM element, React\n   *   Component, etc.\n   */\n  render(token) {\n    const ir = token.render(this); // intermediate representation\n    const renderFn = this.get('render', null, token) || this.defaultRender;\n    return renderFn(ir, token.t, token);\n  }\n};\nfunction noop(val) {\n  return val;\n}\n\nvar options = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tOptions: Options,\n\tdefaults: defaults\n});\n\n/******************************************************************************\n\tMulti-Tokens\n\tTokens composed of arrays of TextTokens\n******************************************************************************/\n\n/**\n * @param {string} value\n * @param {Token[]} tokens\n */\nfunction MultiToken(value, tokens) {\n  this.t = 'token';\n  this.v = value;\n  this.tk = tokens;\n}\n\n/**\n * Abstract class used for manufacturing tokens of text tokens. That is rather\n * than the value for a token being a small string of text, it's value an array\n * of text tokens.\n *\n * Used for grouping together URLs, emails, hashtags, and other potential\n * creations.\n * @class MultiToken\n * @property {string} t\n * @property {string} v\n * @property {Token[]} tk\n * @abstract\n */\nMultiToken.prototype = {\n  isLink: false,\n  /**\n   * Return the string this token represents.\n   * @return {string}\n   */\n  toString() {\n    return this.v;\n  },\n  /**\n   * What should the value for this token be in the `href` HTML attribute?\n   * Returns the `.toString` value by default.\n   * @param {string} [scheme]\n   * @return {string}\n   */\n  toHref(scheme) {\n    return this.toString();\n  },\n  /**\n   * @param {Options} options Formatting options\n   * @returns {string}\n   */\n  toFormattedString(options) {\n    const val = this.toString();\n    const truncate = options.get('truncate', val, this);\n    const formatted = options.get('format', val, this);\n    return truncate && formatted.length > truncate ? formatted.substring(0, truncate) + '…' : formatted;\n  },\n  /**\n   *\n   * @param {Options} options\n   * @returns {string}\n   */\n  toFormattedHref(options) {\n    return options.get('formatHref', this.toHref(options.get('defaultProtocol')), this);\n  },\n  /**\n   * The start index of this token in the original input string\n   * @returns {number}\n   */\n  startIndex() {\n    return this.tk[0].s;\n  },\n  /**\n   * The end index of this token in the original input string (up to this\n   * index but not including it)\n   * @returns {number}\n   */\n  endIndex() {\n    return this.tk[this.tk.length - 1].e;\n  },\n  /**\n  \tReturns an object  of relevant values for this token, which includes keys\n  \t* type - Kind of token ('url', 'email', etc.)\n  \t* value - Original text\n  \t* href - The value that should be added to the anchor tag's href\n  \t\tattribute\n  \t\t@method toObject\n  \t@param {string} [protocol] `'http'` by default\n  */\n  toObject(protocol = defaults.defaultProtocol) {\n    return {\n      type: this.t,\n      value: this.toString(),\n      isLink: this.isLink,\n      href: this.toHref(protocol),\n      start: this.startIndex(),\n      end: this.endIndex()\n    };\n  },\n  /**\n   *\n   * @param {Options} options Formatting option\n   */\n  toFormattedObject(options) {\n    return {\n      type: this.t,\n      value: this.toFormattedString(options),\n      isLink: this.isLink,\n      href: this.toFormattedHref(options),\n      start: this.startIndex(),\n      end: this.endIndex()\n    };\n  },\n  /**\n   * Whether this token should be rendered as a link according to the given options\n   * @param {Options} options\n   * @returns {boolean}\n   */\n  validate(options) {\n    return options.get('validate', this.toString(), this);\n  },\n  /**\n   * Return an object that represents how this link should be rendered.\n   * @param {Options} options Formattinng options\n   */\n  render(options) {\n    const token = this;\n    const href = this.toHref(options.get('defaultProtocol'));\n    const formattedHref = options.get('formatHref', href, this);\n    const tagName = options.get('tagName', href, token);\n    const content = this.toFormattedString(options);\n    const attributes = {};\n    const className = options.get('className', href, token);\n    const target = options.get('target', href, token);\n    const rel = options.get('rel', href, token);\n    const attrs = options.getObj('attributes', href, token);\n    const eventListeners = options.getObj('events', href, token);\n    attributes.href = formattedHref;\n    if (className) {\n      attributes.class = className;\n    }\n    if (target) {\n      attributes.target = target;\n    }\n    if (rel) {\n      attributes.rel = rel;\n    }\n    if (attrs) {\n      Object.assign(attributes, attrs);\n    }\n    return {\n      tagName,\n      attributes,\n      content,\n      eventListeners\n    };\n  }\n};\n\n/**\n * Create a new token that can be emitted by the parser state machine\n * @param {string} type readable type of the token\n * @param {object} props properties to assign or override, including isLink = true or false\n * @returns {new (value: string, tokens: Token[]) => MultiToken} new token class\n */\nfunction createTokenClass(type, props) {\n  class Token extends MultiToken {\n    constructor(value, tokens) {\n      super(value, tokens);\n      this.t = type;\n    }\n  }\n  for (const p in props) {\n    Token.prototype[p] = props[p];\n  }\n  Token.t = type;\n  return Token;\n}\n\n/**\n\tRepresents a list of tokens making up a valid email address\n*/\nconst Email = createTokenClass('email', {\n  isLink: true,\n  toHref() {\n    return 'mailto:' + this.toString();\n  }\n});\n\n/**\n\tRepresents some plain text\n*/\nconst Text = createTokenClass('text');\n\n/**\n\tMulti-linebreak token - represents a line break\n\t@class Nl\n*/\nconst Nl = createTokenClass('nl');\n\n/**\n\tRepresents a list of text tokens making up a valid URL\n\t@class Url\n*/\nconst Url = createTokenClass('url', {\n  isLink: true,\n  /**\n  \tLowercases relevant parts of the domain and adds the protocol if\n  \trequired. Note that this will not escape unsafe HTML characters in the\n  \tURL.\n  \t\t@param {string} [scheme] default scheme (e.g., 'https')\n  \t@return {string} the full href\n  */\n  toHref(scheme = defaults.defaultProtocol) {\n    // Check if already has a prefix scheme\n    return this.hasProtocol() ? this.v : `${scheme}://${this.v}`;\n  },\n  /**\n   * Check whether this URL token has a protocol\n   * @return {boolean}\n   */\n  hasProtocol() {\n    const tokens = this.tk;\n    return tokens.length >= 2 && tokens[0].t !== LOCALHOST && tokens[1].t === COLON;\n  }\n});\n\nvar multi = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBase: MultiToken,\n\tEmail: Email,\n\tMultiToken: MultiToken,\n\tNl: Nl,\n\tText: Text,\n\tUrl: Url,\n\tcreateTokenClass: createTokenClass\n});\n\n/**\n\tNot exactly parser, more like the second-stage scanner (although we can\n\ttheoretically hotswap the code here with a real parser in the future... but\n\tfor a little URL-finding utility abstract syntax trees may be a little\n\toverkill).\n\n\tURL format: http://en.wikipedia.org/wiki/URI_scheme\n\tEmail format: http://en.wikipedia.org/wiki/EmailAddress (links to RFC in\n\treference)\n\n\t@module linkify\n\t@submodule parser\n\t@main run\n*/\n\nconst makeState = arg => new State(arg);\n\n/**\n * Generate the parser multi token-based state machine\n * @param {{ groups: Collections<string> }} tokens\n */\nfunction init$1({\n  groups\n}) {\n  // Types of characters the URL can definitely end in\n  const qsAccepting = groups.domain.concat([AMPERSAND, ASTERISK, AT, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, NUM, PERCENT, PIPE, PLUS, POUND, SLASH, SYM, TILDE, UNDERSCORE]);\n\n  // Types of tokens that can follow a URL and be part of the query string\n  // but cannot be the very last characters\n  // Characters that cannot appear in the URL at all should be excluded\n  const qsNonAccepting = [APOSTROPHE, COLON, COMMA, DOT, EXCLAMATION, PERCENT, QUERY, QUOTE, SEMI, OPENANGLEBRACKET, CLOSEANGLEBRACKET, OPENBRACE, CLOSEBRACE, CLOSEBRACKET, OPENBRACKET, OPENPAREN, CLOSEPAREN, FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN, LEFTCORNERBRACKET, RIGHTCORNERBRACKET, LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET, FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN];\n\n  // For addresses without the mailto prefix\n  // Tokens allowed in the localpart of the email\n  const localpartAccepting = [AMPERSAND, APOSTROPHE, ASTERISK, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, OPENBRACE, CLOSEBRACE, PERCENT, PIPE, PLUS, POUND, QUERY, SLASH, SYM, TILDE, UNDERSCORE];\n\n  // The universal starting state.\n  /**\n   * @type State<Token>\n   */\n  const Start = makeState();\n  const Localpart = tt(Start, TILDE); // Local part of the email address\n  ta(Localpart, localpartAccepting, Localpart);\n  ta(Localpart, groups.domain, Localpart);\n  const Domain = makeState(),\n    Scheme = makeState(),\n    SlashScheme = makeState();\n  ta(Start, groups.domain, Domain); // parsed string ends with a potential domain name (A)\n  ta(Start, groups.scheme, Scheme); // e.g., 'mailto'\n  ta(Start, groups.slashscheme, SlashScheme); // e.g., 'http'\n\n  ta(Domain, localpartAccepting, Localpart);\n  ta(Domain, groups.domain, Domain);\n  const LocalpartAt = tt(Domain, AT); // Local part of the email address plus @\n\n  tt(Localpart, AT, LocalpartAt); // close to an email address now\n\n  // Local part of an email address can be e.g. 'http' or 'mailto'\n  tt(Scheme, AT, LocalpartAt);\n  tt(SlashScheme, AT, LocalpartAt);\n  const LocalpartDot = tt(Localpart, DOT); // Local part of the email address plus '.' (localpart cannot end in .)\n  ta(LocalpartDot, localpartAccepting, Localpart);\n  ta(LocalpartDot, groups.domain, Localpart);\n  const EmailDomain = makeState();\n  ta(LocalpartAt, groups.domain, EmailDomain); // parsed string starts with local email info + @ with a potential domain name\n  ta(EmailDomain, groups.domain, EmailDomain);\n  const EmailDomainDot = tt(EmailDomain, DOT); // domain followed by DOT\n  ta(EmailDomainDot, groups.domain, EmailDomain);\n  const Email$1 = makeState(Email); // Possible email address (could have more tlds)\n  ta(EmailDomainDot, groups.tld, Email$1);\n  ta(EmailDomainDot, groups.utld, Email$1);\n  tt(LocalpartAt, LOCALHOST, Email$1);\n\n  // Hyphen can jump back to a domain name\n  const EmailDomainHyphen = tt(EmailDomain, HYPHEN); // parsed string starts with local email info + @ with a potential domain name\n  tt(EmailDomainHyphen, HYPHEN, EmailDomainHyphen);\n  ta(EmailDomainHyphen, groups.domain, EmailDomain);\n  ta(Email$1, groups.domain, EmailDomain);\n  tt(Email$1, DOT, EmailDomainDot);\n  tt(Email$1, HYPHEN, EmailDomainHyphen);\n\n  // Final possible email states\n  const EmailColon = tt(Email$1, COLON); // URL followed by colon (potential port number here)\n  /*const EmailColonPort = */\n  ta(EmailColon, groups.numeric, Email); // URL followed by colon and port number\n\n  // Account for dots and hyphens. Hyphens are usually parts of domain names\n  // (but not TLDs)\n  const DomainHyphen = tt(Domain, HYPHEN); // domain followed by hyphen\n  const DomainDot = tt(Domain, DOT); // domain followed by DOT\n  tt(DomainHyphen, HYPHEN, DomainHyphen);\n  ta(DomainHyphen, groups.domain, Domain);\n  ta(DomainDot, localpartAccepting, Localpart);\n  ta(DomainDot, groups.domain, Domain);\n  const DomainDotTld = makeState(Url); // Simplest possible URL with no query string\n  ta(DomainDot, groups.tld, DomainDotTld);\n  ta(DomainDot, groups.utld, DomainDotTld);\n  ta(DomainDotTld, groups.domain, Domain);\n  ta(DomainDotTld, localpartAccepting, Localpart);\n  tt(DomainDotTld, DOT, DomainDot);\n  tt(DomainDotTld, HYPHEN, DomainHyphen);\n  tt(DomainDotTld, AT, LocalpartAt);\n  const DomainDotTldColon = tt(DomainDotTld, COLON); // URL followed by colon (potential port number here)\n  const DomainDotTldColonPort = makeState(Url); // TLD followed by a port number\n  ta(DomainDotTldColon, groups.numeric, DomainDotTldColonPort);\n\n  // Long URL with optional port and maybe query string\n  const Url$1 = makeState(Url);\n\n  // URL with extra symbols at the end, followed by an opening bracket\n  const UrlNonaccept = makeState(); // URL followed by some symbols (will not be part of the final URL)\n\n  // Query strings\n  ta(Url$1, qsAccepting, Url$1);\n  ta(Url$1, qsNonAccepting, UrlNonaccept);\n  ta(UrlNonaccept, qsAccepting, Url$1);\n  ta(UrlNonaccept, qsNonAccepting, UrlNonaccept);\n\n  // Become real URLs after `SLASH` or `COLON NUM SLASH`\n  // Here works with or without scheme:// prefix\n  tt(DomainDotTld, SLASH, Url$1);\n  tt(DomainDotTldColonPort, SLASH, Url$1);\n\n  // Note that domains that begin with schemes are treated slighly differently\n  const SchemeColon = tt(Scheme, COLON); // e.g., 'mailto:'\n  const SlashSchemeColon = tt(SlashScheme, COLON); // e.g., 'http:'\n  const SlashSchemeColonSlash = tt(SlashSchemeColon, SLASH); // e.g., 'http:/'\n\n  const UriPrefix = tt(SlashSchemeColonSlash, SLASH); // e.g., 'http://'\n\n  // Scheme states can transition to domain states\n  ta(Scheme, groups.domain, Domain);\n  tt(Scheme, DOT, DomainDot);\n  tt(Scheme, HYPHEN, DomainHyphen);\n  ta(SlashScheme, groups.domain, Domain);\n  tt(SlashScheme, DOT, DomainDot);\n  tt(SlashScheme, HYPHEN, DomainHyphen);\n\n  // Force URL with scheme prefix followed by anything sane\n  ta(SchemeColon, groups.domain, Url$1);\n  tt(SchemeColon, SLASH, Url$1);\n  tt(SchemeColon, QUERY, Url$1);\n  ta(UriPrefix, groups.domain, Url$1);\n  ta(UriPrefix, qsAccepting, Url$1);\n  tt(UriPrefix, SLASH, Url$1);\n  const bracketPairs = [[OPENBRACE, CLOSEBRACE],\n  // {}\n  [OPENBRACKET, CLOSEBRACKET],\n  // []\n  [OPENPAREN, CLOSEPAREN],\n  // ()\n  [OPENANGLEBRACKET, CLOSEANGLEBRACKET],\n  // <>\n  [FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN],\n  // （）\n  [LEFTCORNERBRACKET, RIGHTCORNERBRACKET],\n  // 「」\n  [LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET],\n  // 『』\n  [FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN] // ＜＞\n  ];\n  for (let i = 0; i < bracketPairs.length; i++) {\n    const [OPEN, CLOSE] = bracketPairs[i];\n    const UrlOpen = tt(Url$1, OPEN); // URL followed by open bracket\n\n    // Continue not accepting for open brackets\n    tt(UrlNonaccept, OPEN, UrlOpen);\n\n    // Closing bracket component. This character WILL be included in the URL\n    tt(UrlOpen, CLOSE, Url$1);\n\n    // URL that beings with an opening bracket, followed by a symbols.\n    // Note that the final state can still be `UrlOpen` (if the URL has a\n    // single opening bracket for some reason).\n    const UrlOpenQ = makeState(Url);\n    ta(UrlOpen, qsAccepting, UrlOpenQ);\n    const UrlOpenSyms = makeState(); // UrlOpen followed by some symbols it cannot end it\n    ta(UrlOpen, qsNonAccepting);\n\n    // URL that begins with an opening bracket, followed by some symbols\n    ta(UrlOpenQ, qsAccepting, UrlOpenQ);\n    ta(UrlOpenQ, qsNonAccepting, UrlOpenSyms);\n    ta(UrlOpenSyms, qsAccepting, UrlOpenQ);\n    ta(UrlOpenSyms, qsNonAccepting, UrlOpenSyms);\n\n    // Close brace/bracket to become regular URL\n    tt(UrlOpenQ, CLOSE, Url$1);\n    tt(UrlOpenSyms, CLOSE, Url$1);\n  }\n  tt(Start, LOCALHOST, DomainDotTld); // localhost is a valid URL state\n  tt(Start, NL, Nl); // single new line\n\n  return {\n    start: Start,\n    tokens: tk\n  };\n}\n\n/**\n * Run the parser state machine on a list of scanned string-based tokens to\n * create a list of multi tokens, each of which represents a URL, email address,\n * plain text, etc.\n *\n * @param {State<MultiToken>} start parser start state\n * @param {string} input the original input used to generate the given tokens\n * @param {Token[]} tokens list of scanned tokens\n * @returns {MultiToken[]}\n */\nfunction run(start, input, tokens) {\n  let len = tokens.length;\n  let cursor = 0;\n  let multis = [];\n  let textTokens = [];\n  while (cursor < len) {\n    let state = start;\n    let secondState = null;\n    let nextState = null;\n    let multiLength = 0;\n    let latestAccepting = null;\n    let sinceAccepts = -1;\n    while (cursor < len && !(secondState = state.go(tokens[cursor].t))) {\n      // Starting tokens with nowhere to jump to.\n      // Consider these to be just plain text\n      textTokens.push(tokens[cursor++]);\n    }\n    while (cursor < len && (nextState = secondState || state.go(tokens[cursor].t))) {\n      // Get the next state\n      secondState = null;\n      state = nextState;\n\n      // Keep track of the latest accepting state\n      if (state.accepts()) {\n        sinceAccepts = 0;\n        latestAccepting = state;\n      } else if (sinceAccepts >= 0) {\n        sinceAccepts++;\n      }\n      cursor++;\n      multiLength++;\n    }\n    if (sinceAccepts < 0) {\n      // No accepting state was found, part of a regular text token add\n      // the first text token to the text tokens array and try again from\n      // the next\n      cursor -= multiLength;\n      if (cursor < len) {\n        textTokens.push(tokens[cursor]);\n        cursor++;\n      }\n    } else {\n      // Accepting state!\n      // First close off the textTokens (if available)\n      if (textTokens.length > 0) {\n        multis.push(initMultiToken(Text, input, textTokens));\n        textTokens = [];\n      }\n\n      // Roll back to the latest accepting state\n      cursor -= sinceAccepts;\n      multiLength -= sinceAccepts;\n\n      // Create a new multitoken\n      const Multi = latestAccepting.t;\n      const subtokens = tokens.slice(cursor - multiLength, cursor);\n      multis.push(initMultiToken(Multi, input, subtokens));\n    }\n  }\n\n  // Finally close off the textTokens (if available)\n  if (textTokens.length > 0) {\n    multis.push(initMultiToken(Text, input, textTokens));\n  }\n  return multis;\n}\n\n/**\n * Utility function for instantiating a new multitoken with all the relevant\n * fields during parsing.\n * @param {new (value: string, tokens: Token[]) => MultiToken} Multi class to instantiate\n * @param {string} input original input string\n * @param {Token[]} tokens consecutive tokens scanned from input string\n * @returns {MultiToken}\n */\nfunction initMultiToken(Multi, input, tokens) {\n  const startIdx = tokens[0].s;\n  const endIdx = tokens[tokens.length - 1].e;\n  const value = input.slice(startIdx, endIdx);\n  return new Multi(value, tokens);\n}\n\nconst warn = typeof console !== 'undefined' && console && console.warn || (() => {});\nconst warnAdvice = 'until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.';\n\n// Side-effect initialization state\nconst INIT = {\n  scanner: null,\n  parser: null,\n  tokenQueue: [],\n  pluginQueue: [],\n  customSchemes: [],\n  initialized: false\n};\n\n/**\n * @typedef {{\n * \tstart: State<string>,\n * \ttokens: { groups: Collections<string> } & typeof tk\n * }} ScannerInit\n */\n\n/**\n * @typedef {{\n * \tstart: State<MultiToken>,\n * \ttokens: typeof multi\n * }} ParserInit\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit }) => void} TokenPlugin\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit, parser: ParserInit }) => void} Plugin\n */\n\n/**\n * De-register all plugins and reset the internal state-machine. Used for\n * testing; not required in practice.\n * @private\n */\nfunction reset() {\n  State.groups = {};\n  INIT.scanner = null;\n  INIT.parser = null;\n  INIT.tokenQueue = [];\n  INIT.pluginQueue = [];\n  INIT.customSchemes = [];\n  INIT.initialized = false;\n  return INIT;\n}\n\n/**\n * Register a token plugin to allow the scanner to recognize additional token\n * types before the parser state machine is constructed from the results.\n * @param {string} name of plugin to register\n * @param {TokenPlugin} plugin function that accepts the scanner state machine\n * and available scanner tokens and collections and extends the state machine to\n * recognize additional tokens or groups.\n */\nfunction registerTokenPlugin(name, plugin) {\n  if (typeof plugin !== 'function') {\n    throw new Error(`linkifyjs: Invalid token plugin ${plugin} (expects function)`);\n  }\n  for (let i = 0; i < INIT.tokenQueue.length; i++) {\n    if (name === INIT.tokenQueue[i][0]) {\n      warn(`linkifyjs: token plugin \"${name}\" already registered - will be overwritten`);\n      INIT.tokenQueue[i] = [name, plugin];\n      return;\n    }\n  }\n  INIT.tokenQueue.push([name, plugin]);\n  if (INIT.initialized) {\n    warn(`linkifyjs: already initialized - will not register token plugin \"${name}\" ${warnAdvice}`);\n  }\n}\n\n/**\n * Register a linkify plugin\n * @param {string} name of plugin to register\n * @param {Plugin} plugin function that accepts the parser state machine and\n * extends the parser to recognize additional link types\n */\nfunction registerPlugin(name, plugin) {\n  if (typeof plugin !== 'function') {\n    throw new Error(`linkifyjs: Invalid plugin ${plugin} (expects function)`);\n  }\n  for (let i = 0; i < INIT.pluginQueue.length; i++) {\n    if (name === INIT.pluginQueue[i][0]) {\n      warn(`linkifyjs: plugin \"${name}\" already registered - will be overwritten`);\n      INIT.pluginQueue[i] = [name, plugin];\n      return;\n    }\n  }\n  INIT.pluginQueue.push([name, plugin]);\n  if (INIT.initialized) {\n    warn(`linkifyjs: already initialized - will not register plugin \"${name}\" ${warnAdvice}`);\n  }\n}\n\n/**\n * Detect URLs with the following additional protocol. Anything with format\n * \"protocol://...\" will be considered a link. If `optionalSlashSlash` is set to\n * `true`, anything with format \"protocol:...\" will be considered a link.\n * @param {string} scheme\n * @param {boolean} [optionalSlashSlash]\n */\nfunction registerCustomProtocol(scheme, optionalSlashSlash = false) {\n  if (INIT.initialized) {\n    warn(`linkifyjs: already initialized - will not register custom scheme \"${scheme}\" ${warnAdvice}`);\n  }\n  if (!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(scheme)) {\n    throw new Error(`linkifyjs: incorrect scheme format.\n1. Must only contain digits, lowercase ASCII letters or \"-\"\n2. Cannot start or end with \"-\"\n3. \"-\" cannot repeat`);\n  }\n  INIT.customSchemes.push([scheme, optionalSlashSlash]);\n}\n\n/**\n * Initialize the linkify state machine. Called automatically the first time\n * linkify is called on a string, but may be called manually as well.\n */\nfunction init() {\n  // Initialize scanner state machine and plugins\n  INIT.scanner = init$2(INIT.customSchemes);\n  for (let i = 0; i < INIT.tokenQueue.length; i++) {\n    INIT.tokenQueue[i][1]({\n      scanner: INIT.scanner\n    });\n  }\n\n  // Initialize parser state machine and plugins\n  INIT.parser = init$1(INIT.scanner.tokens);\n  for (let i = 0; i < INIT.pluginQueue.length; i++) {\n    INIT.pluginQueue[i][1]({\n      scanner: INIT.scanner,\n      parser: INIT.parser\n    });\n  }\n  INIT.initialized = true;\n  return INIT;\n}\n\n/**\n * Parse a string into tokens that represent linkable and non-linkable sub-components\n * @param {string} str\n * @return {MultiToken[]} tokens\n */\nfunction tokenize(str) {\n  if (!INIT.initialized) {\n    init();\n  }\n  return run(INIT.parser.start, str, run$1(INIT.scanner.start, str));\n}\ntokenize.scan = run$1; // for testing\n\n/**\n * Find a list of linkable items in the given string.\n * @param {string} str string to find links in\n * @param {string | Opts} [type] either formatting options or specific type of\n * links to find, e.g., 'url' or 'email'\n * @param {Opts} [opts] formatting options for final output. Cannot be specified\n * if opts already provided in `type` argument\n */\nfunction find(str, type = null, opts = null) {\n  if (type && typeof type === 'object') {\n    if (opts) {\n      throw Error(`linkifyjs: Invalid link type ${type}; must be a string`);\n    }\n    opts = type;\n    type = null;\n  }\n  const options = new Options(opts);\n  const tokens = tokenize(str);\n  const filtered = [];\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i];\n    if (token.isLink && (!type || token.t === type) && options.check(token)) {\n      filtered.push(token.toFormattedObject(options));\n    }\n  }\n  return filtered;\n}\n\n/**\n * Is the given string valid linkable text of some sort. Note that this does not\n * trim the text for you.\n *\n * Optionally pass in a second `type` param, which is the type of link to test\n * for.\n *\n * For example,\n *\n *     linkify.test(str, 'email');\n *\n * Returns `true` if str is a valid email.\n * @param {string} str string to test for links\n * @param {string} [type] optional specific link type to look for\n * @returns boolean true/false\n */\nfunction test(str, type = null) {\n  const tokens = tokenize(str);\n  return tokens.length === 1 && tokens[0].isLink && (!type || tokens[0].t === type);\n}\n\nexport { MultiToken, Options, State, createTokenClass, find, init, multi, options, regexp, registerCustomProtocol, registerPlugin, registerTokenPlugin, reset, stringToArray, test, multi as text, tokenize };\n","// src/link.ts\nimport { Mark, markPasteRule, mergeAttributes } from \"@tiptap/core\";\nimport { find as find2, registerCustomProtocol, reset } from \"linkifyjs\";\n\n// src/helpers/autolink.ts\nimport { combineTransactionSteps, findChildrenInRange, getChangedRanges, getMarksBetween } from \"@tiptap/core\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { tokenize } from \"linkifyjs\";\n\n// src/helpers/whitespace.ts\nvar UNICODE_WHITESPACE_PATTERN = \"[\\0- \\xA0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]\";\nvar UNICODE_WHITESPACE_REGEX = new RegExp(UNICODE_WHITESPACE_PATTERN);\nvar UNICODE_WHITESPACE_REGEX_END = new RegExp(`${UNICODE_WHITESPACE_PATTERN}$`);\nvar UNICODE_WHITESPACE_REGEX_GLOBAL = new RegExp(UNICODE_WHITESPACE_PATTERN, \"g\");\n\n// src/helpers/autolink.ts\nfunction isValidLinkStructure(tokens) {\n  if (tokens.length === 1) {\n    return tokens[0].isLink;\n  }\n  if (tokens.length === 3 && tokens[1].isLink) {\n    return [\"()\", \"[]\"].includes(tokens[0].value + tokens[2].value);\n  }\n  return false;\n}\nfunction autolink(options) {\n  return new Plugin({\n    key: new PluginKey(\"autolink\"),\n    appendTransaction: (transactions, oldState, newState) => {\n      const docChanges = transactions.some((transaction) => transaction.docChanged) && !oldState.doc.eq(newState.doc);\n      const preventAutolink = transactions.some((transaction) => transaction.getMeta(\"preventAutolink\"));\n      if (!docChanges || preventAutolink) {\n        return;\n      }\n      const { tr } = newState;\n      const transform = combineTransactionSteps(oldState.doc, [...transactions]);\n      const changes = getChangedRanges(transform);\n      changes.forEach(({ newRange }) => {\n        const nodesInChangedRanges = findChildrenInRange(newState.doc, newRange, (node) => node.isTextblock);\n        let textBlock;\n        let textBeforeWhitespace;\n        if (nodesInChangedRanges.length > 1) {\n          textBlock = nodesInChangedRanges[0];\n          textBeforeWhitespace = newState.doc.textBetween(\n            textBlock.pos,\n            textBlock.pos + textBlock.node.nodeSize,\n            void 0,\n            \" \"\n          );\n        } else if (nodesInChangedRanges.length) {\n          const endText = newState.doc.textBetween(newRange.from, newRange.to, \" \", \" \");\n          if (!UNICODE_WHITESPACE_REGEX_END.test(endText)) {\n            return;\n          }\n          textBlock = nodesInChangedRanges[0];\n          textBeforeWhitespace = newState.doc.textBetween(textBlock.pos, newRange.to, void 0, \" \");\n        }\n        if (textBlock && textBeforeWhitespace) {\n          const wordsBeforeWhitespace = textBeforeWhitespace.split(UNICODE_WHITESPACE_REGEX).filter(Boolean);\n          if (wordsBeforeWhitespace.length <= 0) {\n            return false;\n          }\n          const lastWordBeforeSpace = wordsBeforeWhitespace[wordsBeforeWhitespace.length - 1];\n          const lastWordAndBlockOffset = textBlock.pos + textBeforeWhitespace.lastIndexOf(lastWordBeforeSpace);\n          if (!lastWordBeforeSpace) {\n            return false;\n          }\n          const linksBeforeSpace = tokenize(lastWordBeforeSpace).map((t) => t.toObject(options.defaultProtocol));\n          if (!isValidLinkStructure(linksBeforeSpace)) {\n            return false;\n          }\n          linksBeforeSpace.filter((link) => link.isLink).map((link) => ({\n            ...link,\n            from: lastWordAndBlockOffset + link.start + 1,\n            to: lastWordAndBlockOffset + link.end + 1\n          })).filter((link) => {\n            if (!newState.schema.marks.code) {\n              return true;\n            }\n            return !newState.doc.rangeHasMark(link.from, link.to, newState.schema.marks.code);\n          }).filter((link) => options.validate(link.value)).filter((link) => options.shouldAutoLink(link.value)).forEach((link) => {\n            if (getMarksBetween(link.from, link.to, newState.doc).some((item) => item.mark.type === options.type)) {\n              return;\n            }\n            tr.addMark(\n              link.from,\n              link.to,\n              options.type.create({\n                href: link.href\n              })\n            );\n          });\n        }\n      });\n      if (!tr.steps.length) {\n        return;\n      }\n      return tr;\n    }\n  });\n}\n\n// src/helpers/clickHandler.ts\nimport { getAttributes } from \"@tiptap/core\";\nimport { Plugin as Plugin2, PluginKey as PluginKey2 } from \"@tiptap/pm/state\";\nfunction clickHandler(options) {\n  return new Plugin2({\n    key: new PluginKey2(\"handleClickLink\"),\n    props: {\n      handleClick: (view, pos, event) => {\n        var _a, _b;\n        if (event.button !== 0) {\n          return false;\n        }\n        if (!view.editable) {\n          return false;\n        }\n        let link = null;\n        if (event.target instanceof HTMLAnchorElement) {\n          link = event.target;\n        } else {\n          let a = event.target;\n          const els = [];\n          while (a.nodeName !== \"DIV\") {\n            els.push(a);\n            a = a.parentNode;\n          }\n          link = els.find((value) => value.nodeName === \"A\");\n        }\n        if (!link) {\n          return false;\n        }\n        const attrs = getAttributes(view.state, options.type.name);\n        const href = (_a = link == null ? void 0 : link.href) != null ? _a : attrs.href;\n        const target = (_b = link == null ? void 0 : link.target) != null ? _b : attrs.target;\n        if (options.enableClickSelection) {\n          options.editor.commands.extendMarkRange(options.type.name);\n        }\n        if (link && href) {\n          window.open(href, target);\n          return true;\n        }\n        return false;\n      }\n    }\n  });\n}\n\n// src/helpers/pasteHandler.ts\nimport { Plugin as Plugin3, PluginKey as PluginKey3 } from \"@tiptap/pm/state\";\nimport { find } from \"linkifyjs\";\nfunction pasteHandler(options) {\n  return new Plugin3({\n    key: new PluginKey3(\"handlePasteLink\"),\n    props: {\n      handlePaste: (view, event, slice) => {\n        const { state } = view;\n        const { selection } = state;\n        const { empty } = selection;\n        if (empty) {\n          return false;\n        }\n        let textContent = \"\";\n        slice.content.forEach((node) => {\n          textContent += node.textContent;\n        });\n        const link = find(textContent, { defaultProtocol: options.defaultProtocol }).find(\n          (item) => item.isLink && item.value === textContent\n        );\n        if (!textContent || !link) {\n          return false;\n        }\n        return options.editor.commands.setMark(options.type, {\n          href: link.href\n        });\n      }\n    }\n  });\n}\n\n// src/link.ts\nvar pasteRegex = /https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z]{2,}\\b(?:[-a-zA-Z0-9@:%._+~#=?!&/]*)(?:[-a-zA-Z0-9@:%._+~#=?!&/]*)/gi;\nfunction isAllowedUri(uri, protocols) {\n  const allowedProtocols = [\"http\", \"https\", \"ftp\", \"ftps\", \"mailto\", \"tel\", \"callto\", \"sms\", \"cid\", \"xmpp\"];\n  if (protocols) {\n    protocols.forEach((protocol) => {\n      const nextProtocol = typeof protocol === \"string\" ? protocol : protocol.scheme;\n      if (nextProtocol) {\n        allowedProtocols.push(nextProtocol);\n      }\n    });\n  }\n  return !uri || uri.replace(UNICODE_WHITESPACE_REGEX_GLOBAL, \"\").match(\n    new RegExp(\n      // eslint-disable-next-line no-useless-escape\n      `^(?:(?:${allowedProtocols.join(\"|\")}):|[^a-z]|[a-z0-9+.-]+(?:[^a-z+.-:]|$))`,\n      \"i\"\n    )\n  );\n}\nvar Link = Mark.create({\n  name: \"link\",\n  priority: 1e3,\n  keepOnSplit: false,\n  exitable: true,\n  onCreate() {\n    if (this.options.validate && !this.options.shouldAutoLink) {\n      this.options.shouldAutoLink = this.options.validate;\n      console.warn(\"The `validate` option is deprecated. Rename to the `shouldAutoLink` option instead.\");\n    }\n    this.options.protocols.forEach((protocol) => {\n      if (typeof protocol === \"string\") {\n        registerCustomProtocol(protocol);\n        return;\n      }\n      registerCustomProtocol(protocol.scheme, protocol.optionalSlashes);\n    });\n  },\n  onDestroy() {\n    reset();\n  },\n  inclusive() {\n    return this.options.autolink;\n  },\n  addOptions() {\n    return {\n      openOnClick: true,\n      enableClickSelection: false,\n      linkOnPaste: true,\n      autolink: true,\n      protocols: [],\n      defaultProtocol: \"http\",\n      HTMLAttributes: {\n        target: \"_blank\",\n        rel: \"noopener noreferrer nofollow\",\n        class: null\n      },\n      isAllowedUri: (url, ctx) => !!isAllowedUri(url, ctx.protocols),\n      validate: (url) => !!url,\n      shouldAutoLink: (url) => !!url\n    };\n  },\n  addAttributes() {\n    return {\n      href: {\n        default: null,\n        parseHTML(element) {\n          return element.getAttribute(\"href\");\n        }\n      },\n      target: {\n        default: this.options.HTMLAttributes.target\n      },\n      rel: {\n        default: this.options.HTMLAttributes.rel\n      },\n      class: {\n        default: this.options.HTMLAttributes.class\n      }\n    };\n  },\n  parseHTML() {\n    return [\n      {\n        tag: \"a[href]\",\n        getAttrs: (dom) => {\n          const href = dom.getAttribute(\"href\");\n          if (!href || !this.options.isAllowedUri(href, {\n            defaultValidate: (url) => !!isAllowedUri(url, this.options.protocols),\n            protocols: this.options.protocols,\n            defaultProtocol: this.options.defaultProtocol\n          })) {\n            return false;\n          }\n          return null;\n        }\n      }\n    ];\n  },\n  renderHTML({ HTMLAttributes }) {\n    if (!this.options.isAllowedUri(HTMLAttributes.href, {\n      defaultValidate: (href) => !!isAllowedUri(href, this.options.protocols),\n      protocols: this.options.protocols,\n      defaultProtocol: this.options.defaultProtocol\n    })) {\n      return [\"a\", mergeAttributes(this.options.HTMLAttributes, { ...HTMLAttributes, href: \"\" }), 0];\n    }\n    return [\"a\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n  },\n  addCommands() {\n    return {\n      setLink: (attributes) => ({ chain }) => {\n        const { href } = attributes;\n        if (!this.options.isAllowedUri(href, {\n          defaultValidate: (url) => !!isAllowedUri(url, this.options.protocols),\n          protocols: this.options.protocols,\n          defaultProtocol: this.options.defaultProtocol\n        })) {\n          return false;\n        }\n        return chain().setMark(this.name, attributes).setMeta(\"preventAutolink\", true).run();\n      },\n      toggleLink: (attributes) => ({ chain }) => {\n        const { href } = attributes || {};\n        if (href && !this.options.isAllowedUri(href, {\n          defaultValidate: (url) => !!isAllowedUri(url, this.options.protocols),\n          protocols: this.options.protocols,\n          defaultProtocol: this.options.defaultProtocol\n        })) {\n          return false;\n        }\n        return chain().toggleMark(this.name, attributes, { extendEmptyMarkRange: true }).setMeta(\"preventAutolink\", true).run();\n      },\n      unsetLink: () => ({ chain }) => {\n        return chain().unsetMark(this.name, { extendEmptyMarkRange: true }).setMeta(\"preventAutolink\", true).run();\n      }\n    };\n  },\n  addPasteRules() {\n    return [\n      markPasteRule({\n        find: (text) => {\n          const foundLinks = [];\n          if (text) {\n            const { protocols, defaultProtocol } = this.options;\n            const links = find2(text).filter(\n              (item) => item.isLink && this.options.isAllowedUri(item.value, {\n                defaultValidate: (href) => !!isAllowedUri(href, protocols),\n                protocols,\n                defaultProtocol\n              })\n            );\n            if (links.length) {\n              links.forEach(\n                (link) => foundLinks.push({\n                  text: link.value,\n                  data: {\n                    href: link.href\n                  },\n                  index: link.start\n                })\n              );\n            }\n          }\n          return foundLinks;\n        },\n        type: this.type,\n        getAttributes: (match) => {\n          var _a;\n          return {\n            href: (_a = match.data) == null ? void 0 : _a.href\n          };\n        }\n      })\n    ];\n  },\n  addProseMirrorPlugins() {\n    const plugins = [];\n    const { protocols, defaultProtocol } = this.options;\n    if (this.options.autolink) {\n      plugins.push(\n        autolink({\n          type: this.type,\n          defaultProtocol: this.options.defaultProtocol,\n          validate: (url) => this.options.isAllowedUri(url, {\n            defaultValidate: (href) => !!isAllowedUri(href, protocols),\n            protocols,\n            defaultProtocol\n          }),\n          shouldAutoLink: this.options.shouldAutoLink\n        })\n      );\n    }\n    if (this.options.openOnClick === true) {\n      plugins.push(\n        clickHandler({\n          type: this.type,\n          editor: this.editor,\n          enableClickSelection: this.options.enableClickSelection\n        })\n      );\n    }\n    if (this.options.linkOnPaste) {\n      plugins.push(\n        pasteHandler({\n          editor: this.editor,\n          defaultProtocol: this.options.defaultProtocol,\n          type: this.type\n        })\n      );\n    }\n    return plugins;\n  }\n});\n\n// src/index.ts\nvar index_default = Link;\nexport {\n  Link,\n  index_default as default,\n  isAllowedUri,\n  pasteRegex\n};\n//# sourceMappingURL=index.js.map","import Link from '@tiptap/extension-link'\nimport { mergeAttributes } from '@tiptap/core'\n\n/**\n * Enhanced Link extension that supports both external URLs and internal page references\n */\nexport const LinkEnhanced = Link.extend({\n  addAttributes() {\n    return {\n      ...this.parent?.(),\n      // Internal page attributes\n      isInternal: {\n        default: false,\n        parseHTML: element => element.getAttribute('data-internal') === 'true',\n        renderHTML: attributes => {\n          if (!attributes.isInternal) {\n            return {}\n          }\n          return {\n            'data-internal': 'true',\n          }\n        },\n      },\n      pageId: {\n        default: null,\n        parseHTML: element => element.getAttribute('data-page-id'),\n        renderHTML: attributes => {\n          if (!attributes.pageId) {\n            return {}\n          }\n          return {\n            'data-page-id': attributes.pageId,\n          }\n        },\n      },\n      pageName: {\n        default: null,\n        parseHTML: element => element.getAttribute('data-page-name'),\n        renderHTML: attributes => {\n          if (!attributes.pageName) {\n            return {}\n          }\n          return {\n            'data-page-name': attributes.pageName,\n          }\n        },\n      },\n    }\n  },\n\n  addOptions() {\n    return {\n      ...this.parent?.(),\n      // Enable opening links with click\n      openOnClick: true,\n      // Allow links to have custom classes\n      HTMLAttributes: {\n        class: 'tiptap-link',\n      },\n    }\n  },\n\n  renderHTML({ HTMLAttributes }) {\n    const attrs = mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)\n\n    // For internal links, remove the href but keep the data attributes\n    if (attrs['data-internal'] === 'true') {\n      // Keep the href for accessibility but add a visual indicator\n      attrs.class = `${attrs.class || ''} tiptap-link-internal`.trim()\n    }\n\n    return ['a', attrs, 0]\n  },\n})\n\nexport default LinkEnhanced\n","// src/horizontal-rule.ts\nimport { canInsertNode, isNodeSelection, mergeAttributes, Node, nodeInputRule } from \"@tiptap/core\";\nimport { NodeSelection, TextSelection } from \"@tiptap/pm/state\";\nvar HorizontalRule = Node.create({\n  name: \"horizontalRule\",\n  addOptions() {\n    return {\n      HTMLAttributes: {}\n    };\n  },\n  group: \"block\",\n  parseHTML() {\n    return [{ tag: \"hr\" }];\n  },\n  renderHTML({ HTMLAttributes }) {\n    return [\"hr\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)];\n  },\n  addCommands() {\n    return {\n      setHorizontalRule: () => ({ chain, state }) => {\n        if (!canInsertNode(state, state.schema.nodes[this.name])) {\n          return false;\n        }\n        const { selection } = state;\n        const { $to: $originTo } = selection;\n        const currentChain = chain();\n        if (isNodeSelection(selection)) {\n          currentChain.insertContentAt($originTo.pos, {\n            type: this.name\n          });\n        } else {\n          currentChain.insertContent({ type: this.name });\n        }\n        return currentChain.command(({ tr, dispatch }) => {\n          var _a;\n          if (dispatch) {\n            const { $to } = tr.selection;\n            const posAfter = $to.end();\n            if ($to.nodeAfter) {\n              if ($to.nodeAfter.isTextblock) {\n                tr.setSelection(TextSelection.create(tr.doc, $to.pos + 1));\n              } else if ($to.nodeAfter.isBlock) {\n                tr.setSelection(NodeSelection.create(tr.doc, $to.pos));\n              } else {\n                tr.setSelection(TextSelection.create(tr.doc, $to.pos));\n              }\n            } else {\n              const node = (_a = $to.parent.type.contentMatch.defaultType) == null ? void 0 : _a.create();\n              if (node) {\n                tr.insert(posAfter, node);\n                tr.setSelection(TextSelection.create(tr.doc, posAfter + 1));\n              }\n            }\n            tr.scrollIntoView();\n          }\n          return true;\n        }).run();\n      }\n    };\n  },\n  addInputRules() {\n    return [\n      nodeInputRule({\n        find: /^(?:---|—-|___\\s|\\*\\*\\*\\s)$/,\n        type: this.type\n      })\n    ];\n  }\n});\n\n// src/index.ts\nvar index_default = HorizontalRule;\nexport {\n  HorizontalRule,\n  index_default as default\n};\n//# sourceMappingURL=index.js.map","import { mergeAttributes } from \"@tiptap/react\"\nimport TiptapHorizontalRule from \"@tiptap/extension-horizontal-rule\"\n\nexport const HorizontalRule = TiptapHorizontalRule.extend({\n  renderHTML() {\n    return [\n      \"div\",\n      mergeAttributes(this.options.HTMLAttributes, { \"data-type\": this.name }),\n      [\"hr\"],\n    ]\n  },\n})\n\nexport default HorizontalRule\n","import { Extension } from \"@tiptap/core\"\n\nexport interface UiState {\n  aiGenerationIsSelection: boolean\n  aiGenerationIsLoading: boolean\n  aiGenerationActive: boolean\n  aiGenerationHasMessage: boolean\n  commentInputVisible: boolean\n  lockDragHandle: boolean\n  isDragging: boolean\n}\n\ndeclare module \"@tiptap/core\" {\n  interface Commands<ReturnType> {\n    uiState: {\n      aiGenerationSetIsSelection: (value: boolean) => ReturnType\n      aiGenerationSetIsLoading: (value: boolean) => ReturnType\n      aiGenerationShow: () => ReturnType\n      aiGenerationHide: () => ReturnType\n      aiGenerationHasMessage: (value: boolean) => ReturnType\n\n      commentInputShow: () => ReturnType\n      commentInputHide: () => ReturnType\n\n      setLockDragHandle: (value: boolean) => ReturnType\n\n      resetUiState: () => ReturnType\n      setIsDragging: (value: boolean) => ReturnType\n    }\n  }\n\n  interface Storage {\n    uiState: UiState\n  }\n}\n\nexport const defaultUiState: UiState = {\n  aiGenerationIsSelection: false,\n  aiGenerationIsLoading: false,\n  aiGenerationActive: false,\n  aiGenerationHasMessage: false,\n  commentInputVisible: false,\n  lockDragHandle: false,\n  isDragging: false,\n} as const\n\nexport const UiState = Extension.create<UiState>({\n  name: \"uiState\",\n\n  addStorage() {\n    return {\n      uiState: { ...defaultUiState },\n    }\n  },\n\n  addCommands() {\n    const createBooleanSetter =\n      (key: keyof UiState) => (value: boolean) => () => {\n        this.storage[key] = value\n        return true\n      }\n\n    const createToggle = (key: keyof UiState, value: boolean) => () => () => {\n      this.storage[key] = value\n      return true\n    }\n\n    return {\n      // AI Generation commands\n      aiGenerationSetIsSelection: createBooleanSetter(\n        \"aiGenerationIsSelection\"\n      ),\n      aiGenerationSetIsLoading: createBooleanSetter(\"aiGenerationIsLoading\"),\n      aiGenerationHasMessage: createBooleanSetter(\"aiGenerationHasMessage\"),\n      aiGenerationShow: createToggle(\"aiGenerationActive\", true),\n      aiGenerationHide: createToggle(\"aiGenerationActive\", false),\n\n      // Comment input commands\n      commentInputShow: createToggle(\"commentInputVisible\", true),\n      commentInputHide: createToggle(\"commentInputVisible\", false),\n\n      // Drag handle commands\n      setLockDragHandle: createBooleanSetter(\"lockDragHandle\"),\n      setIsDragging: createBooleanSetter(\"isDragging\"),\n\n      // Reset command\n      resetUiState: () => () => {\n        Object.assign(this.storage, { ...defaultUiState })\n        return true\n      },\n    }\n  },\n\n  onCreate() {\n    this.storage = { ...defaultUiState }\n  },\n})\n","// src/image.ts\nimport { mergeAttributes, Node, nodeInputRule } from \"@tiptap/core\";\nvar inputRegex = /(?:^|\\s)(!\\[(.+|:?)]\\((\\S+)(?:(?:\\s+)[\"'](\\S+)[\"'])?\\))$/;\nvar Image = Node.create({\n  name: \"image\",\n  addOptions() {\n    return {\n      inline: false,\n      allowBase64: false,\n      HTMLAttributes: {}\n    };\n  },\n  inline() {\n    return this.options.inline;\n  },\n  group() {\n    return this.options.inline ? \"inline\" : \"block\";\n  },\n  draggable: true,\n  addAttributes() {\n    return {\n      src: {\n        default: null\n      },\n      alt: {\n        default: null\n      },\n      title: {\n        default: null\n      },\n      width: {\n        default: null\n      },\n      height: {\n        default: null\n      }\n    };\n  },\n  parseHTML() {\n    return [\n      {\n        tag: this.options.allowBase64 ? \"img[src]\" : 'img[src]:not([src^=\"data:\"])'\n      }\n    ];\n  },\n  renderHTML({ HTMLAttributes }) {\n    return [\"img\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)];\n  },\n  addCommands() {\n    return {\n      setImage: (options) => ({ commands }) => {\n        return commands.insertContent({\n          type: this.name,\n          attrs: options\n        });\n      }\n    };\n  },\n  addInputRules() {\n    return [\n      nodeInputRule({\n        find: inputRegex,\n        type: this.type,\n        getAttributes: (match) => {\n          const [, , alt, src, title] = match;\n          return { src, alt, title };\n        }\n      })\n    ];\n  }\n});\n\n// src/index.ts\nvar index_default = Image;\nexport {\n  Image,\n  index_default as default,\n  inputRegex\n};\n//# sourceMappingURL=index.js.map","import type { Node as TiptapNode } from \"@tiptap/pm/model\"\nimport { NodeSelection, Selection, TextSelection } from \"@tiptap/pm/state\"\nimport type { Editor } from \"@tiptap/react\"\n\nexport const MAX_FILE_SIZE = 1024 * 1024 * 1024 // 1GB\n\nexport const MAC_SYMBOLS: Record<string, string> = {\n  mod: \"⌘\",\n  command: \"⌘\",\n  meta: \"⌘\",\n  ctrl: \"⌃\",\n  control: \"⌃\",\n  alt: \"⌥\",\n  option: \"⌥\",\n  shift: \"⇧\",\n  backspace: \"Del\",\n  delete: \"⌦\",\n  enter: \"⏎\",\n  escape: \"⎋\",\n  capslock: \"⇪\",\n} as const\n\nexport function cn(\n  ...classes: (string | boolean | undefined | null)[]\n): string {\n  return classes.filter(Boolean).join(\" \")\n}\n\n/**\n * Determines if the current platform is macOS\n * @returns boolean indicating if the current platform is Mac\n */\nexport function isMac(): boolean {\n  return (\n    typeof navigator !== \"undefined\" &&\n    navigator.platform.toLowerCase().includes(\"mac\")\n  )\n}\n\n/**\n * Formats a shortcut key based on the platform (Mac or non-Mac)\n * @param key - The key to format (e.g., \"ctrl\", \"alt\", \"shift\")\n * @param isMac - Boolean indicating if the platform is Mac\n * @param capitalize - Whether to capitalize the key (default: true)\n * @returns Formatted shortcut key symbol\n */\nexport const formatShortcutKey = (\n  key: string,\n  isMac: boolean,\n  capitalize: boolean = true\n) => {\n  if (isMac) {\n    const lowerKey = key.toLowerCase()\n    return MAC_SYMBOLS[lowerKey] || (capitalize ? key.toUpperCase() : key)\n  }\n\n  return capitalize ? key.charAt(0).toUpperCase() + key.slice(1) : key\n}\n\n/**\n * Parses a shortcut key string into an array of formatted key symbols\n * @param shortcutKeys - The string of shortcut keys (e.g., \"ctrl-alt-shift\")\n * @param delimiter - The delimiter used to split the keys (default: \"-\")\n * @param capitalize - Whether to capitalize the keys (default: true)\n * @returns Array of formatted shortcut key symbols\n */\nexport const parseShortcutKeys = (props: {\n  shortcutKeys: string | undefined\n  delimiter?: string\n  capitalize?: boolean\n}) => {\n  const { shortcutKeys, delimiter = \"+\", capitalize = true } = props\n\n  if (!shortcutKeys) return []\n\n  return shortcutKeys\n    .split(delimiter)\n    .map((key) => key.trim())\n    .map((key) => formatShortcutKey(key, isMac(), capitalize))\n}\n\n/**\n * Checks if a mark exists in the editor schema\n * @param markName - The name of the mark to check\n * @param editor - The editor instance\n * @returns boolean indicating if the mark exists in the schema\n */\nexport const isMarkInSchema = (\n  markName: string,\n  editor: Editor | null\n): boolean => {\n  if (!editor?.schema) return false\n  return editor.schema.spec.marks.get(markName) !== undefined\n}\n\n/**\n * Checks if a node exists in the editor schema\n * @param nodeName - The name of the node to check\n * @param editor - The editor instance\n * @returns boolean indicating if the node exists in the schema\n */\nexport const isNodeInSchema = (\n  nodeName: string,\n  editor: Editor | null\n): boolean => {\n  if (!editor?.schema) return false\n  return editor.schema.spec.nodes.get(nodeName) !== undefined\n}\n\n/**\n * Moves the focus to the next node in the editor\n * @param editor - The editor instance\n * @returns boolean indicating if the focus was moved\n */\nexport function focusNextNode(editor: Editor) {\n  const { state, view } = editor\n  const { doc, selection } = state\n\n  const nextSel = Selection.findFrom(selection.$to, 1, true)\n  if (nextSel) {\n    view.dispatch(state.tr.setSelection(nextSel).scrollIntoView())\n    return true\n  }\n\n  const paragraphType = state.schema.nodes.paragraph\n  if (!paragraphType) {\n    console.warn(\"No paragraph node type found in schema.\")\n    return false\n  }\n\n  const end = doc.content.size\n  const para = paragraphType.create()\n  let tr = state.tr.insert(end, para)\n\n  // Place the selection inside the new paragraph\n  const $inside = tr.doc.resolve(end + 1)\n  tr = tr.setSelection(TextSelection.near($inside)).scrollIntoView()\n  view.dispatch(tr)\n  return true\n}\n\n/**\n * Checks if a value is a valid number (not null, undefined, or NaN)\n * @param value - The value to check\n * @returns boolean indicating if the value is a valid number\n */\nexport function isValidPosition(pos: number | null | undefined): pos is number {\n  return typeof pos === \"number\" && pos >= 0\n}\n\n/**\n * Checks if one or more extensions are registered in the Tiptap editor.\n * @param editor - The Tiptap editor instance\n * @param extensionNames - A single extension name or an array of names to check\n * @returns True if at least one of the extensions is available, false otherwise\n */\nexport function isExtensionAvailable(\n  editor: Editor | null,\n  extensionNames: string | string[]\n): boolean {\n  if (!editor) return false\n\n  const names = Array.isArray(extensionNames)\n    ? extensionNames\n    : [extensionNames]\n\n  const found = names.some((name) =>\n    editor.extensionManager.extensions.some((ext) => ext.name === name)\n  )\n\n  return found\n}\n\n/**\n * Finds a node at the specified position with error handling\n * @param editor The Tiptap editor instance\n * @param position The position in the document to find the node\n * @returns The node at the specified position, or null if not found\n */\nexport function findNodeAtPosition(editor: Editor, position: number) {\n  try {\n    const node = editor.state.doc.nodeAt(position)\n    if (!node) {\n      console.warn(`No node found at position ${position}`)\n      return null\n    }\n    return node\n  } catch (error) {\n    console.error(`Error getting node at position ${position}:`, error)\n    return null\n  }\n}\n\n/**\n * Finds the position and instance of a node in the document\n * @param props Object containing editor, node (optional), and nodePos (optional)\n * @param props.editor The Tiptap editor instance\n * @param props.node The node to find (optional if nodePos is provided)\n * @param props.nodePos The position of the node to find (optional if node is provided)\n * @returns An object with the position and node, or null if not found\n */\nexport function findNodePosition(props: {\n  editor: Editor | null\n  node?: TiptapNode | null\n  nodePos?: number | null\n}): { pos: number; node: TiptapNode } | null {\n  const { editor, node, nodePos } = props\n\n  if (!editor || !editor.state?.doc) return null\n\n  // Zero is valid position\n  const hasValidNode = node !== undefined && node !== null\n  const hasValidPos = isValidPosition(nodePos)\n\n  if (!hasValidNode && !hasValidPos) {\n    return null\n  }\n\n  // First search for the node in the document if we have a node\n  if (hasValidNode) {\n    let foundPos = -1\n    let foundNode: TiptapNode | null = null\n\n    editor.state.doc.descendants((currentNode, pos) => {\n      // TODO: Needed?\n      // if (currentNode.type && currentNode.type.name === node!.type.name) {\n      if (currentNode === node) {\n        foundPos = pos\n        foundNode = currentNode\n        return false\n      }\n      return true\n    })\n\n    if (foundPos !== -1 && foundNode !== null) {\n      return { pos: foundPos, node: foundNode }\n    }\n  }\n\n  // If we have a valid position, use findNodeAtPosition\n  if (hasValidPos && nodePos !== null && nodePos !== undefined) {\n    const nodeAtPos = findNodeAtPosition(editor, nodePos)\n    if (nodeAtPos) {\n      return { pos: nodePos, node: nodeAtPos }\n    }\n  }\n\n  return null\n}\n\n/**\n * Checks if the current selection in the editor is a node selection of specified types\n * @param editor The Tiptap editor instance\n * @param types An array of node type names to check against\n * @returns boolean indicating if the selected node matches any of the specified types\n */\nexport function isNodeTypeSelected(\n  editor: Editor | null,\n  types: string[] = []\n): boolean {\n  if (!editor || !editor.state.selection) return false\n\n  const { state } = editor\n  const { selection } = state\n\n  if (selection.empty) return false\n\n  if (selection instanceof NodeSelection) {\n    const node = selection.node\n    return node ? types.includes(node.type.name) : false\n  }\n\n  return false\n}\n\n/**\n * Handles image upload with progress tracking and abort capability\n * @param file The file to upload\n * @param onProgress Optional callback for tracking upload progress\n * @param abortSignal Optional AbortSignal for cancelling the upload\n * @returns Promise resolving to the URL of the uploaded image\n */\nexport const handleImageUpload = async (\n  file: File,\n  onProgress?: (event: { progress: number }) => void,\n  abortSignal?: AbortSignal\n): Promise<string> => {\n  // Validate file\n  if (!file) {\n    throw new Error(\"No file provided\")\n  }\n\n  if (file.size > MAX_FILE_SIZE) {\n    throw new Error(\n      `File size exceeds maximum allowed (${MAX_FILE_SIZE / (1024 * 1024)}MB)`\n    )\n  }\n\n  // For demo/testing: Simulate upload progress. In production, replace the following code\n  // with your own upload implementation.\n  for (let progress = 0; progress <= 100; progress += 10) {\n    if (abortSignal?.aborted) {\n      throw new Error(\"Upload cancelled\")\n    }\n    await new Promise((resolve) => setTimeout(resolve, 500))\n    onProgress?.({ progress })\n  }\n\n  return \"/images/tiptap-ui-placeholder-image.jpg\"\n}\n\ntype ProtocolOptions = {\n  /**\n   * The protocol scheme to be registered.\n   * @default '''\n   * @example 'ftp'\n   * @example 'git'\n   */\n  scheme: string\n\n  /**\n   * If enabled, it allows optional slashes after the protocol.\n   * @default false\n   * @example true\n   */\n  optionalSlashes?: boolean\n}\n\ntype ProtocolConfig = Array<ProtocolOptions | string>\n\nconst ATTR_WHITESPACE =\n  // eslint-disable-next-line no-control-regex\n  /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g\n\nexport function isAllowedUri(\n  uri: string | undefined,\n  protocols?: ProtocolConfig\n) {\n  const allowedProtocols: string[] = [\n    \"http\",\n    \"https\",\n    \"ftp\",\n    \"ftps\",\n    \"mailto\",\n    \"tel\",\n    \"callto\",\n    \"sms\",\n    \"cid\",\n    \"xmpp\",\n  ]\n\n  if (protocols) {\n    protocols.forEach((protocol) => {\n      const nextProtocol =\n        typeof protocol === \"string\" ? protocol : protocol.scheme\n\n      if (nextProtocol) {\n        allowedProtocols.push(nextProtocol)\n      }\n    })\n  }\n\n  return (\n    !uri ||\n    uri.replace(ATTR_WHITESPACE, \"\").match(\n      new RegExp(\n        // eslint-disable-next-line no-useless-escape\n        `^(?:(?:${allowedProtocols.join(\"|\")}):|[^a-z]|[a-z0-9+.\\-]+(?:[^a-z+.\\-:]|$))`,\n        \"i\"\n      )\n    )\n  )\n}\n\nexport function sanitizeUrl(\n  inputUrl: string,\n  baseUrl: string,\n  protocols?: ProtocolConfig\n): string {\n  try {\n    const url = new URL(inputUrl, baseUrl)\n\n    if (isAllowedUri(url.href, protocols)) {\n      return url.href\n    }\n  } catch {\n    // If URL creation fails, it's considered invalid\n  }\n  return \"#\"\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n    function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n    var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n    var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n    var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n    var _, done = false;\r\n    for (var i = decorators.length - 1; i >= 0; i--) {\r\n        var context = {};\r\n        for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n        for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n        context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n        var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n        if (kind === \"accessor\") {\r\n            if (result === void 0) continue;\r\n            if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n            if (_ = accept(result.get)) descriptor.get = _;\r\n            if (_ = accept(result.set)) descriptor.set = _;\r\n            if (_ = accept(result.init)) initializers.unshift(_);\r\n        }\r\n        else if (_ = accept(result)) {\r\n            if (kind === \"field\") initializers.unshift(_);\r\n            else descriptor[key] = _;\r\n        }\r\n    }\r\n    if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n    done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n    var useValue = arguments.length > 2;\r\n    for (var i = 0; i < initializers.length; i++) {\r\n        value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n    }\r\n    return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n    return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n    if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n    return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n    return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n    function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n    ownKeys = Object.getOwnPropertyNames || function (o) {\r\n        var ar = [];\r\n        for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n        return ar;\r\n    };\r\n    return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n    if (value !== null && value !== void 0) {\r\n        if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n        var dispose, inner;\r\n        if (async) {\r\n            if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n            dispose = value[Symbol.asyncDispose];\r\n        }\r\n        if (dispose === void 0) {\r\n            if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n            dispose = value[Symbol.dispose];\r\n            if (async) inner = dispose;\r\n        }\r\n        if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n        if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n        env.stack.push({ value: value, dispose: dispose, async: async });\r\n    }\r\n    else if (async) {\r\n        env.stack.push({ async: true });\r\n    }\r\n    return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n    function fail(e) {\r\n        env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n        env.hasError = true;\r\n    }\r\n    var r, s = 0;\r\n    function next() {\r\n        while (r = env.stack.pop()) {\r\n            try {\r\n                if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n                if (r.dispose) {\r\n                    var result = r.dispose.call(r.value);\r\n                    if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n                }\r\n                else s |= 1;\r\n            }\r\n            catch (e) {\r\n                fail(e);\r\n            }\r\n        }\r\n        if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n        if (env.hasError) throw env.error;\r\n    }\r\n    return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n    if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n        return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n            return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n        });\r\n    }\r\n    return path;\r\n}\r\n\r\nexport default {\r\n    __extends: __extends,\r\n    __assign: __assign,\r\n    __rest: __rest,\r\n    __decorate: __decorate,\r\n    __param: __param,\r\n    __esDecorate: __esDecorate,\r\n    __runInitializers: __runInitializers,\r\n    __propKey: __propKey,\r\n    __setFunctionName: __setFunctionName,\r\n    __metadata: __metadata,\r\n    __awaiter: __awaiter,\r\n    __generator: __generator,\r\n    __createBinding: __createBinding,\r\n    __exportStar: __exportStar,\r\n    __values: __values,\r\n    __read: __read,\r\n    __spread: __spread,\r\n    __spreadArrays: __spreadArrays,\r\n    __spreadArray: __spreadArray,\r\n    __await: __await,\r\n    __asyncGenerator: __asyncGenerator,\r\n    __asyncDelegator: __asyncDelegator,\r\n    __asyncValues: __asyncValues,\r\n    __makeTemplateObject: __makeTemplateObject,\r\n    __importStar: __importStar,\r\n    __importDefault: __importDefault,\r\n    __classPrivateFieldGet: __classPrivateFieldGet,\r\n    __classPrivateFieldSet: __classPrivateFieldSet,\r\n    __classPrivateFieldIn: __classPrivateFieldIn,\r\n    __addDisposableResource: __addDisposableResource,\r\n    __disposeResources: __disposeResources,\r\n    __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"@/lib/tiptap-utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n  return (\n    <input type={type} className={cn(\"tiptap-input\", className)} {...props} />\n  )\n}\n\nfunction InputGroup({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<\"div\">) {\n  return (\n    <div className={cn(\"tiptap-input-group\", className)} {...props}>\n      {children}\n    </div>\n  )\n}\n\nexport { Input, InputGroup }\n","'use client';\n\nimport type { Editor, NodeViewProps } from '@tiptap/react';\nimport { NodeViewWrapper, NodeViewContent } from '@tiptap/react';\nimport { NodeSelection } from '@tiptap/pm/state';\nimport { useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport { cn } from '@/lib/tiptap-utils';\nimport { Button } from '@/components/tiptap-ui-primitive/button';\nimport { Input } from '@/components/tiptap-ui-primitive/input';\n\nexport interface ResizeParams {\n  handleUsed: 'left' | 'right';\n  initialWidth: number;\n  initialClientX: number;\n}\n\nexport interface ResizableImageProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  src: string;\n  alt?: string;\n  caption?: string;\n  editor?: Editor;\n  minWidth?: number;\n  maxWidth?: number;\n  align?: 'left' | 'center' | 'right';\n  initialWidth?: number;\n  onImageResize?: (width?: number) => void;\n  onCaptionChange?: (caption: string) => void;\n  selected?: boolean;\n  isZoomed?: boolean;\n  onZoomToggle?: () => void;\n}\n\nconst ImageIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeWidth=\"1\"\n    className={className}\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n    <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n    <polyline points=\"21 15 16 10 5 21\" />\n  </svg>\n);\n\nconst UploadIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeWidth=\"2\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n    className={className}\n  >\n    <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n    <polyline points=\"17 8 12 3 7 8\" />\n    <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n  </svg>\n);\n\ntype TabType = 'upload' | 'embed';\n\ninterface ImageNodeEmptyStateProps {\n  onImageChange?: (src: string) => void;\n  isOpen?: boolean;\n  onToggleOpen?: (isOpen: boolean) => void;\n}\n\nexport const ImageNodeEmptyState: React.FC<ImageNodeEmptyStateProps> = ({\n  onImageChange,\n  isOpen: isOpenProp,\n  onToggleOpen,\n}) => {\n  const [isOpen, setIsOpen] = useState(isOpenProp || false);\n  const [activeTab, setActiveTab] = useState<TabType>('upload');\n\n  const handleToggleOpen = (newValue: boolean) => {\n    setIsOpen(newValue);\n    onToggleOpen?.(newValue);\n  };\n\n  useEffect(() => {\n    setIsOpen(isOpenProp || false);\n  }, [isOpenProp]);\n\n  const [urlInput, setUrlInput] = useState('');\n  const [isDragging, setIsDragging] = useState(false);\n  const fileInputRef = useRef<HTMLInputElement>(null);\n\n  const compressImage = (\n    file: File,\n    maxSizeKB: number = 2048,\n  ): Promise<string> => {\n    return new Promise((resolve, reject) => {\n      const reader = new FileReader();\n      reader.onload = (e) => {\n        const img = new Image();\n        img.onload = () => {\n          const canvas = document.createElement('canvas');\n          let width = img.width;\n          let height = img.height;\n\n          // Calculate new dimensions to keep aspect ratio\n          const maxDimension = 1920; // Max width or height\n          if (width > height && width > maxDimension) {\n            height = (height * maxDimension) / width;\n            width = maxDimension;\n          } else if (height > maxDimension) {\n            width = (width * maxDimension) / height;\n            height = maxDimension;\n          }\n\n          canvas.width = width;\n          canvas.height = height;\n\n          const ctx = canvas.getContext('2d');\n          if (!ctx) {\n            reject(new Error('Could not get canvas context'));\n            return;\n          }\n\n          ctx.drawImage(img, 0, 0, width, height);\n\n          // Start with quality 0.8 and reduce if needed\n          let quality = 0.8;\n          const attemptCompression = () => {\n            canvas.toBlob(\n              (blob) => {\n                if (!blob) {\n                  reject(new Error('Could not compress image'));\n                  return;\n                }\n\n                // If still too large and quality can be reduced, try again\n                if (blob.size > maxSizeKB * 1024 && quality > 0.3) {\n                  quality -= 0.1;\n                  attemptCompression();\n                  return;\n                }\n\n                // Convert to data URL\n                const compressedReader = new FileReader();\n                compressedReader.onload = () => {\n                  resolve(compressedReader.result as string);\n                };\n                compressedReader.onerror = reject;\n                compressedReader.readAsDataURL(blob);\n              },\n              'image/jpeg',\n              quality,\n            );\n          };\n\n          attemptCompression();\n        };\n        img.onerror = () => reject(new Error('Could not load image'));\n        img.src = e.target?.result as string;\n      };\n      reader.onerror = reject;\n      reader.readAsDataURL(file);\n    });\n  };\n\n  const handleFileUpload = async (e: React.ChangeEvent<HTMLInputElement>) => {\n    const file = e.target.files?.[0];\n    if (file) {\n      if (file.size > 1024 * 1024 * 1024) {\n        alert('File size exceeds 1GB limit');\n        return;\n      }\n\n      // Compress images larger than 2MB to prevent rendering issues\n      if (file.size > 2 * 1024 * 1024) {\n        try {\n          const compressedDataUrl = await compressImage(file, 2048);\n          onImageChange?.(compressedDataUrl);\n        } catch (error) {\n          console.error('Image compression failed:', error);\n          alert('Failed to process image. Please try a smaller file.');\n        }\n      } else {\n        // For smaller files, use as-is\n        const reader = new FileReader();\n        reader.onload = (event) => {\n          const result = event.target?.result as string;\n          onImageChange?.(result);\n        };\n        reader.readAsDataURL(file);\n      }\n    }\n  };\n\n  const handleDragOver = (e: React.DragEvent) => {\n    e.preventDefault();\n    setIsDragging(true);\n  };\n\n  const handleDragLeave = (e: React.DragEvent) => {\n    e.preventDefault();\n    setIsDragging(false);\n  };\n\n  const handleDrop = async (e: React.DragEvent) => {\n    e.preventDefault();\n    setIsDragging(false);\n    const file = e.dataTransfer.files?.[0];\n    if (file && file.type.startsWith('image/')) {\n      if (file.size > 1024 * 1024 * 1024) {\n        alert('File size exceeds 1GB limit');\n        return;\n      }\n\n      // Compress images larger than 2MB to prevent rendering issues\n      if (file.size > 2 * 1024 * 1024) {\n        try {\n          const compressedDataUrl = await compressImage(file, 2048);\n          onImageChange?.(compressedDataUrl);\n        } catch (error) {\n          console.error('Image compression failed:', error);\n          alert('Failed to process image. Please try a smaller file.');\n        }\n      } else {\n        // For smaller files, use as-is\n        const reader = new FileReader();\n        reader.onload = (event) => {\n          const result = event.target?.result as string;\n          onImageChange?.(result);\n        };\n        reader.readAsDataURL(file);\n      }\n    }\n  };\n\n  const handleUrlSubmit = () => {\n    if (urlInput) {\n      onImageChange?.(urlInput);\n      setUrlInput('');\n    }\n  };\n\n  return (\n    <div className=\"my-1 w-full\">\n      {/* Empty State Header */}\n      <button\n        onMouseDown={(e) => {\n          e.preventDefault();\n          e.stopPropagation();\n        }}\n        onClick={(e) => {\n          e.preventDefault();\n          e.stopPropagation();\n          handleToggleOpen(!isOpen);\n        }}\n        className=\"w-full flex items-center gap-3 rounded-lg px-4 py-3 transition-colors cursor-pointer\"\n        style={{\n          backgroundColor: '#242425',\n          color: 'rgba(255, 255, 255, 0.7)',\n        }}\n      >\n        <ImageIcon className=\"h-5 w-5\" />\n        <span className=\"text-sm\">Add an image</span>\n      </button>\n\n      {isOpen && (\n        <div\n          className=\"mt-2 mx-auto max-w-2xl rounded-lg shadow-sm\"\n          style={{\n            backgroundColor: '#161617',\n            border: '1px solid rgba(255, 255, 255, 0.1)',\n            borderRadius: '8px',\n          }}\n        >\n          {/* Tabs */}\n          <div\n            className=\"flex items-center gap-1 px-4 pt-4\"\n            style={{\n              borderBottom: '1px solid rgba(255, 255, 255, 0.1)',\n            }}\n          >\n            <button\n              onClick={(e) => {\n                e.stopPropagation();\n                setActiveTab('upload');\n              }}\n              className={cn(\n                'relative px-3 py-2 text-sm font-medium transition-colors rounded-t-md',\n              )}\n              style={{\n                color:\n                  activeTab === 'upload' ? 'white' : 'rgba(255, 255, 255, 0.7)',\n              }}\n            >\n              Upload\n              {activeTab === 'upload' && (\n                <div\n                  className=\"absolute bottom-0 left-0 right-0\"\n                  style={{\n                    backgroundColor: 'white',\n                    height: '3px',\n                    borderRadius: '2px',\n                  }}\n                />\n              )}\n            </button>\n            <button\n              onClick={(e) => {\n                e.stopPropagation();\n                setActiveTab('embed');\n              }}\n              className={cn(\n                'relative px-3 py-2 text-sm font-medium transition-colors rounded-t-md',\n              )}\n              style={{\n                color:\n                  activeTab === 'embed' ? 'white' : 'rgba(255, 255, 255, 0.7)',\n              }}\n            >\n              Embed link\n              {activeTab === 'embed' && (\n                <div\n                  className=\"absolute bottom-0 left-0 right-0\"\n                  style={{\n                    backgroundColor: 'white',\n                    height: '3px',\n                    borderRadius: '2px',\n                  }}\n                />\n              )}\n            </button>\n          </div>\n\n          {/* Tab Content */}\n          <div className=\"p-6\">\n            {activeTab === 'upload' && (\n              <div className=\"flex flex-col gap-3\">\n                <input\n                  ref={fileInputRef}\n                  type=\"file\"\n                  accept=\"image/*\"\n                  className=\"hidden\"\n                  onChange={handleFileUpload}\n                />\n                <button\n                  onClick={() => fileInputRef.current?.click()}\n                  onDragOver={handleDragOver}\n                  onDragLeave={handleDragLeave}\n                  onDrop={handleDrop}\n                  className={cn(\n                    'flex flex-col items-center justify-center gap-3 w-full rounded-lg border-2 border-dashed px-6 py-12 transition-colors',\n                  )}\n                  style={{\n                    borderColor: isDragging\n                      ? '#007AFF'\n                      : 'rgba(255, 255, 255, 0.7)',\n                    backgroundColor: '#242425',\n                  }}\n                >\n                  <UploadIcon className=\"h-8 w-8 text-[rgba(255,255,255,0.7)]\" />\n                  <div className=\"text-center\">\n                    <p\n                      className=\"text-sm font-medium\"\n                      style={{ color: 'rgba(255, 255, 255, 0.7)' }}\n                    >\n                      Drag and drop or select a file to upload\n                    </p>\n                  </div>\n                </button>\n                <p\n                  className=\"text-xs text-center\"\n                  style={{ color: 'rgba(255, 255, 255, 0.7)' }}\n                >\n                  The maximum size per file is{' '}\n                  <span style={{ color: 'var(--tnkr-primary)' }}>1gb</span>\n                </p>\n              </div>\n            )}\n\n            {activeTab === 'embed' && (\n              <div className=\"flex flex-col gap-3\">\n                <Input\n                  placeholder=\"Paste image link...\"\n                  value={urlInput}\n                  onChange={(e) => setUrlInput(e.target.value)}\n                  onKeyDown={(e) => e.key === 'Enter' && handleUrlSubmit()}\n                  className=\"h-10\"\n                  style={{\n                    backgroundColor: 'rgba(255, 255, 255, 0.05)',\n                    border: '1px solid rgba(255, 255, 255, 0.1)',\n                    color: 'white',\n                  }}\n                />\n                <button\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    handleUrlSubmit();\n                  }}\n                  className=\"w-full h-10 rounded-md text-sm font-medium transition-colors\"\n                  style={{\n                    backgroundColor: 'var(--tnkr-primary)',\n                    color: 'white',\n                  }}\n                >\n                  Embed image\n                </button>\n              </div>\n            )}\n          </div>\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport function ImageNodeView(props: NodeViewProps) {\n  const { editor, node, updateAttributes, selected, getPos } = props;\n\n  // Use signedUrl if available, otherwise fallback to src\n  const imageUrl = node.attrs.signedUrl || node.attrs.src;\n  const caption = node.attrs.caption || '';\n  const isOpen = node.attrs.isOpen || false;\n  const href = node.attrs.href || null;\n\n  const [isZoomed, setIsZoomed] = useState(false);\n\n  const handleImageChange = (src: string) => {\n    updateAttributes({ src });\n  };\n\n  const handleCaptionChange = (caption: string) => {\n    updateAttributes({ caption });\n  };\n\n  const handleToggleOpen = (isOpen: boolean) => {\n    updateAttributes({ isOpen });\n  };\n\n  const handleImageClick = (e: React.MouseEvent) => {\n    // Handle external link in view mode\n    if (href && !editor?.isEditable) {\n      e.preventDefault();\n      window.open(href, '_blank', 'noopener,noreferrer');\n      return;\n    }\n\n    // Toggle zoom in view mode when no href\n    if (!editor?.isEditable && !href) {\n      e.preventDefault();\n      e.stopPropagation();\n      setIsZoomed(!isZoomed);\n      return;\n    }\n\n    // Select the entire node when clicked in edit mode\n    if (editor?.isEditable) {\n      const pos = getPos();\n      if (typeof pos === 'number') {\n        const { state } = editor;\n        const nodeSelection = NodeSelection.create(state.doc, pos);\n        editor.view.dispatch(state.tr.setSelection(nodeSelection));\n      }\n    }\n  };\n\n  // Handle ESC key to exit zoom\n  useEffect(() => {\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if (e.key === 'Escape' && isZoomed) {\n        setIsZoomed(false);\n      }\n    };\n\n    if (isZoomed) {\n      window.addEventListener('keydown', handleKeyDown);\n      return () => window.removeEventListener('keydown', handleKeyDown);\n    }\n  }, [isZoomed]);\n\n  if (!imageUrl) {\n    return (\n      <NodeViewWrapper contentEditable={false}>\n        <ImageNodeEmptyState\n          onImageChange={handleImageChange}\n          isOpen={isOpen}\n          onToggleOpen={handleToggleOpen}\n        />\n      </NodeViewWrapper>\n    );\n  }\n\n  return (\n    <NodeViewWrapper\n      as=\"div\"\n      onClick={handleImageClick}\n      style={{\n        cursor: (!editor?.isEditable && !href) || (href && !editor?.isEditable) ? 'pointer' : 'default',\n      }}\n    >\n      <ResizableImage\n        src={imageUrl}\n        alt={node.attrs.alt || ''}\n        caption={caption}\n        editor={editor}\n        align={node.attrs['data-align']}\n        initialWidth={node.attrs.width}\n        onImageResize={(width) => updateAttributes({ width })}\n        onCaptionChange={handleCaptionChange}\n        selected={selected}\n        isZoomed={isZoomed}\n        onZoomToggle={() => setIsZoomed(!isZoomed)}\n      />\n    </NodeViewWrapper>\n  );\n}\n\nexport const ResizableImage: React.FC<ResizableImageProps> = ({\n  src,\n  alt = '',\n  caption = '',\n  editor,\n  minWidth = 96,\n  maxWidth = 800,\n  align = 'left',\n  initialWidth,\n  onImageResize,\n  onCaptionChange,\n  selected = false,\n  isZoomed = false,\n  onZoomToggle,\n}) => {\n  const [resizeParams, setResizeParams] = useState<ResizeParams | undefined>(\n    undefined,\n  );\n  const [width, setWidth] = useState<number | undefined>(initialWidth);\n  const [showHandles, setShowHandles] = useState<boolean>(false);\n\n  const wrapperRef = useRef<HTMLDivElement>(null);\n  const leftResizeHandleRef = useRef<HTMLDivElement>(null);\n  const rightResizeHandleRef = useRef<HTMLDivElement>(null);\n  const imageRef = useRef<HTMLImageElement>(null);\n\n  const windowMouseMoveHandler = React.useCallback(\n    (event: MouseEvent): void => {\n      if (!resizeParams || !editor) {\n        return;\n      }\n\n      let newWidth: number;\n\n      if (align === 'center') {\n        if (resizeParams.handleUsed === 'left') {\n          newWidth =\n            resizeParams.initialWidth +\n            (resizeParams.initialClientX - event.clientX) * 2;\n        } else {\n          newWidth =\n            resizeParams.initialWidth +\n            (event.clientX - resizeParams.initialClientX) * 2;\n        }\n      } else {\n        if (resizeParams.handleUsed === 'left') {\n          newWidth =\n            resizeParams.initialWidth +\n            resizeParams.initialClientX -\n            event.clientX;\n        } else {\n          newWidth =\n            resizeParams.initialWidth +\n            event.clientX -\n            resizeParams.initialClientX;\n        }\n      }\n\n      const effectiveMinWidth = minWidth;\n      const effectiveMaxWidth =\n        editor.view.dom?.firstElementChild?.clientWidth || maxWidth;\n\n      const newCalculatedWidth = Math.min(\n        Math.max(newWidth, effectiveMinWidth),\n        effectiveMaxWidth,\n      );\n\n      setWidth(newCalculatedWidth);\n      if (wrapperRef.current) {\n        wrapperRef.current.style.width = `${newCalculatedWidth}px`;\n      }\n    },\n    [editor, align, maxWidth, minWidth, resizeParams],\n  );\n\n  const windowMouseUpHandler = React.useCallback(\n    (event: MouseEvent): void => {\n      if (!editor) {\n        return;\n      }\n\n      if (\n        (!event.target ||\n          !wrapperRef.current?.contains(event.target as Node) ||\n          !editor.isEditable) &&\n        showHandles\n      ) {\n        setShowHandles(false);\n      }\n\n      if (!resizeParams) {\n        return;\n      }\n\n      setResizeParams(undefined);\n\n      if (onImageResize) {\n        onImageResize(width);\n      }\n    },\n    [editor, showHandles, resizeParams, onImageResize, width],\n  );\n\n  const leftResizeHandleMouseDownHandler = (\n    event: React.MouseEvent<HTMLDivElement>,\n  ): void => {\n    event.preventDefault();\n\n    setResizeParams({\n      handleUsed: 'left',\n      initialWidth: wrapperRef.current?.clientWidth || Number.MAX_VALUE,\n      initialClientX: event.clientX,\n    });\n  };\n\n  const rightResizeHandleMouseDownHandler = (\n    event: React.MouseEvent<HTMLDivElement>,\n  ): void => {\n    event.preventDefault();\n\n    setResizeParams({\n      handleUsed: 'right',\n      initialWidth: wrapperRef.current?.clientWidth || Number.MAX_VALUE,\n      initialClientX: event.clientX,\n    });\n  };\n\n  const wrapperMouseEnterHandler = (): void => {\n    if (editor && editor.isEditable) {\n      setShowHandles(true);\n    }\n  };\n\n  const wrapperMouseLeaveHandler = (\n    event: React.MouseEvent<HTMLDivElement>,\n  ): void => {\n    if (\n      event.relatedTarget === leftResizeHandleRef.current ||\n      event.relatedTarget === rightResizeHandleRef.current\n    ) {\n      return;\n    }\n\n    if (resizeParams) {\n      return;\n    }\n\n    if (editor && editor.isEditable) {\n      setShowHandles(false);\n    }\n  };\n\n  useEffect(() => {\n    window.addEventListener('mousemove', windowMouseMoveHandler);\n    window.addEventListener('mouseup', windowMouseUpHandler);\n\n    return () => {\n      window.removeEventListener('mousemove', windowMouseMoveHandler);\n      window.removeEventListener('mouseup', windowMouseUpHandler);\n    };\n  }, [windowMouseMoveHandler, windowMouseUpHandler]);\n\n  // Reset showHandles when editor becomes read-only\n  useEffect(() => {\n    if (editor && !editor.isEditable) {\n      setShowHandles(false);\n    }\n  }, [editor, editor?.isEditable]);\n\n  // Don't show selection in read-only mode\n  const showSelection = selected && editor && editor.isEditable;\n\n  return (\n    <>\n      <NodeViewWrapper\n        as=\"div\"\n        onMouseEnter={wrapperMouseEnterHandler}\n        onMouseLeave={wrapperMouseLeaveHandler}\n        data-align={align}\n        data-width={width}\n        className={`tiptap-image ${showSelection ? 'selected' : ''}`}\n      >\n        <div\n          className=\"my-2 w-full\"\n          style={{\n            pointerEvents: editor && editor.isEditable ? 'auto' : 'none',\n          }}\n        >\n          <div\n            ref={wrapperRef}\n            className=\"tiptap-image-container\"\n            style={{\n              width: width ? `${width}px` : 'fit-content',\n            }}\n          >\n            <div className=\"tiptap-image-content\">\n              <img\n                ref={imageRef}\n                src={src}\n                alt={alt}\n                className=\"tiptap-image-img\"\n                contentEditable={false}\n                draggable={false}\n              />\n\n              {showHandles && editor && editor.isEditable && (\n                <>\n                  <div\n                    ref={leftResizeHandleRef}\n                    className=\"tiptap-image-handle tiptap-image-handle-left\"\n                    onMouseDown={leftResizeHandleMouseDownHandler}\n                  />\n                  <div\n                    ref={rightResizeHandleRef}\n                    className=\"tiptap-image-handle tiptap-image-handle-right\"\n                    onMouseDown={rightResizeHandleMouseDownHandler}\n                  />\n                </>\n              )}\n            </div>\n\n            {/* Caption - Only show in edit mode or when there's a caption in view mode */}\n            {(editor?.isEditable || caption) && (\n              <div className=\"mt-2\" style={{ textAlign: align }}>\n                <Input\n                  placeholder=\"Add a caption...\"\n                  value={caption}\n                  onChange={(e) => onCaptionChange?.(e.target.value)}\n                  onKeyDown={(e) => {\n                    // Prevent Backspace/Delete from propagating to editor and deleting the image\n                    if (e.key === 'Backspace' || e.key === 'Delete') {\n                      e.stopPropagation();\n                    }\n                  }}\n                  disabled={!editor?.isEditable}\n                  className=\"border-0 bg-transparent px-0 text-sm placeholder:opacity-50\"\n                  style={{\n                    color: 'rgba(255, 255, 255, 0.7)',\n                    textAlign: align,\n                  }}\n                />\n              </div>\n            )}\n          </div>\n               <NodeViewContent as=\"div\" style={{ display: 'none', pointerEvents: 'none' }} />\n        </div>\n      </NodeViewWrapper>\n\n      {/* Zoom Overlay */}\n      {isZoomed && (\n        <div\n          onClick={onZoomToggle}\n          style={{\n            position: 'fixed',\n            top: 0,\n            left: 0,\n            right: 0,\n            bottom: 0,\n            backgroundColor: 'rgba(0, 0, 0, 0.9)',\n            backdropFilter: 'blur(4px)',\n            display: 'flex',\n            alignItems: 'center',\n            justifyContent: 'center',\n            zIndex: 9999,\n            cursor: 'zoom-out',\n            padding: '40px',\n          }}\n        >\n          <img\n            src={src}\n            alt={alt}\n            style={{\n              maxWidth: '95vw',\n              maxHeight: '95vh',\n              objectFit: 'contain',\n              borderRadius: '8px',\n              boxShadow: '0 10px 50px rgba(0, 0, 0, 0.5)',\n            }}\n          />\n        </div>\n      )}\n    </>\n  );\n};\n","import { ReactNodeViewRenderer } from '@tiptap/react';\nimport type { ImageOptions } from '@tiptap/extension-image';\nimport { Image as TiptapImage } from '@tiptap/extension-image';\nimport { ImageNodeView } from './image-node-view';\n\nexport const Image = TiptapImage.extend<ImageOptions>({\n\n  group: 'block',\n\n  content: 'paragraph?',\n\n  isolating: true,\n\n\n  addAttributes() {\n    return {\n      ...this.parent?.(),\n      'data-align': {\n        default: null,\n      },\n      signedUrl: {\n        default: null,\n        parseHTML: (element) => element.getAttribute('data-signed-url'),\n        renderHTML: (attributes) => {\n          if (!attributes.signedUrl) {\n            return {};\n          }\n          return {\n            'data-signed-url': attributes.signedUrl,\n          };\n        },\n      },\n      caption: {\n        default: null,\n        parseHTML: (element) => element.getAttribute('data-caption'),\n        renderHTML: (attributes) => {\n          if (!attributes.caption) {\n            return {};\n          }\n          return {\n            'data-caption': attributes.caption,\n          };\n        },\n      },\n      href: {\n        default: null,\n        parseHTML: (element) => element.getAttribute('data-href'),\n        renderHTML: (attributes) => {\n          if (!attributes.href) {\n            return {};\n          }\n          return {\n            'data-href': attributes.href,\n          };\n        },\n      },\n      isOpen: {\n        default: false,\n        parseHTML: (element) => element.getAttribute('data-is-open') === 'true',\n        renderHTML: (attributes) => {\n          if (!attributes.isOpen) {\n            return {};\n          }\n          return {\n            'data-is-open': attributes.isOpen.toString(),\n          };\n        },\n      },\n    };\n  },\n\n  addNodeView() {\n    return ReactNodeViewRenderer(ImageNodeView);\n  },\n\n  addKeyboardShortcuts() {\n    return {\n      Backspace: ({ editor }) => {\n        const { state } = editor;\n        const { selection } = state;\n        const { $from } = selection;\n\n        // Check if we're inside an image node\n        const imageNode = $from.node($from.depth - 1);\n        if (imageNode && imageNode.type.name === 'image') {\n          // Check if we're at the start of the caption paragraph\n          const parentPos = $from.before($from.depth);\n          const start = $from.start($from.depth);\n\n          // If cursor is at the start of the caption paragraph, prevent deletion\n          if ($from.pos === start) {\n            return true; // Prevent default backspace behavior\n          }\n        }\n        return false; // Allow default behavior\n      },\n      Delete: ({ editor }) => {\n        const { state } = editor;\n        const { selection } = state;\n        const { $from } = selection;\n\n        // Check if we're inside an image node\n        const imageNode = $from.node($from.depth - 1);\n        if (imageNode && imageNode.type.name === 'image') {\n          // Check if we're at the end of the caption paragraph\n          const end = $from.end($from.depth);\n\n          // If cursor is at the end of the caption paragraph, prevent deletion\n          if ($from.pos === end - 1) {\n            return true; // Prevent default delete behavior\n          }\n        }\n        return false; // Allow default behavior\n      },\n    };\n  },\n});\n\nexport default Image;\n","\"use client\"\n\nimport * as React from \"react\"\nimport {\n  useFloating,\n  autoUpdate,\n  offset,\n  flip,\n  shift,\n  useHover,\n  useFocus,\n  useDismiss,\n  useRole,\n  useInteractions,\n  useMergeRefs,\n  FloatingPortal,\n  type Placement,\n  type UseFloatingReturn,\n  type ReferenceType,\n  FloatingDelayGroup,\n} from \"@floating-ui/react\"\n\ninterface TooltipProviderProps {\n  children: React.ReactNode\n  initialOpen?: boolean\n  placement?: Placement\n  open?: boolean\n  onOpenChange?: (open: boolean) => void\n  delay?: number\n  closeDelay?: number\n  timeout?: number\n  useDelayGroup?: boolean\n}\n\ninterface TooltipTriggerProps\n  extends Omit<React.HTMLProps<HTMLElement>, \"ref\"> {\n  asChild?: boolean\n  children: React.ReactNode\n}\n\ninterface TooltipContentProps\n  extends Omit<React.HTMLProps<HTMLDivElement>, \"ref\"> {\n  children?: React.ReactNode\n  portal?: boolean\n  portalProps?: Omit<React.ComponentProps<typeof FloatingPortal>, \"children\">\n}\n\ninterface TooltipContextValue extends UseFloatingReturn<ReferenceType> {\n  open: boolean\n  setOpen: (open: boolean) => void\n  getReferenceProps: (\n    userProps?: React.HTMLProps<HTMLElement>\n  ) => Record<string, unknown>\n  getFloatingProps: (\n    userProps?: React.HTMLProps<HTMLDivElement>\n  ) => Record<string, unknown>\n}\n\nfunction useTooltip({\n  initialOpen = false,\n  placement = \"top\",\n  open: controlledOpen,\n  onOpenChange: setControlledOpen,\n  delay = 600,\n  closeDelay = 0,\n}: Omit<TooltipProviderProps, \"children\"> = {}) {\n  const [uncontrolledOpen, setUncontrolledOpen] =\n    React.useState<boolean>(initialOpen)\n\n  const open = controlledOpen ?? uncontrolledOpen\n  const setOpen = setControlledOpen ?? setUncontrolledOpen\n\n  const data = useFloating({\n    placement,\n    open,\n    onOpenChange: setOpen,\n    whileElementsMounted: autoUpdate,\n    middleware: [\n      offset(4),\n      flip({\n        crossAxis: placement.includes(\"-\"),\n        fallbackAxisSideDirection: \"start\",\n        padding: 4,\n      }),\n      shift({ padding: 4 }),\n    ],\n  })\n\n  const context = data.context\n\n  const hover = useHover(context, {\n    mouseOnly: true,\n    move: false,\n    restMs: delay,\n    enabled: controlledOpen == null,\n    delay: {\n      close: closeDelay,\n    },\n  })\n  const focus = useFocus(context, {\n    enabled: controlledOpen == null,\n  })\n  const dismiss = useDismiss(context)\n  const role = useRole(context, { role: \"tooltip\" })\n\n  const interactions = useInteractions([hover, focus, dismiss, role])\n\n  return React.useMemo(\n    () => ({\n      open,\n      setOpen,\n      ...interactions,\n      ...data,\n    }),\n    [open, setOpen, interactions, data]\n  )\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null)\n\nfunction useTooltipContext() {\n  const context = React.useContext(TooltipContext)\n\n  if (context == null) {\n    throw new Error(\"Tooltip components must be wrapped in <TooltipProvider />\")\n  }\n\n  return context\n}\n\nexport function Tooltip({ children, ...props }: TooltipProviderProps) {\n  const tooltip = useTooltip(props)\n\n  if (!props.useDelayGroup) {\n    return (\n      <TooltipContext.Provider value={tooltip}>\n        {children}\n      </TooltipContext.Provider>\n    )\n  }\n\n  return (\n    <FloatingDelayGroup\n      delay={{ open: props.delay ?? 0, close: props.closeDelay ?? 0 }}\n      timeoutMs={props.timeout}\n    >\n      <TooltipContext.Provider value={tooltip}>\n        {children}\n      </TooltipContext.Provider>\n    </FloatingDelayGroup>\n  )\n}\n\nexport const TooltipTrigger = React.forwardRef<\n  HTMLElement,\n  TooltipTriggerProps\n>(function TooltipTrigger({ children, asChild = false, ...props }, propRef) {\n  const context = useTooltipContext()\n  const childrenRef = React.isValidElement(children)\n    ? parseInt(React.version, 10) >= 19\n      ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        (children as { props: { ref?: React.Ref<any> } }).props.ref\n      : // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        (children as any).ref\n    : undefined\n  const ref = useMergeRefs([context.refs.setReference, propRef, childrenRef])\n\n  if (asChild && React.isValidElement(children)) {\n    const dataAttributes = {\n      \"data-tooltip-state\": context.open ? \"open\" : \"closed\",\n    }\n\n    return React.cloneElement(\n      children,\n      context.getReferenceProps({\n        ref,\n        ...props,\n        ...(typeof children.props === \"object\" ? children.props : {}),\n        ...dataAttributes,\n      })\n    )\n  }\n\n  return (\n    <button\n      ref={ref}\n      data-tooltip-state={context.open ? \"open\" : \"closed\"}\n      {...context.getReferenceProps(props)}\n    >\n      {children}\n    </button>\n  )\n})\n\nexport const TooltipContent = React.forwardRef<\n  HTMLDivElement,\n  TooltipContentProps\n>(function TooltipContent(\n  { style, children, portal = true, portalProps = {}, ...props },\n  propRef\n) {\n  const context = useTooltipContext()\n  const ref = useMergeRefs([context.refs.setFloating, propRef])\n\n  if (!context.open) return null\n\n  const content = (\n    <div\n      ref={ref}\n      style={{\n        ...context.floatingStyles,\n        ...style,\n      }}\n      {...context.getFloatingProps(props)}\n      className=\"tiptap-tooltip\"\n    >\n      {children}\n    </div>\n  )\n\n  if (portal) {\n    return <FloatingPortal {...portalProps}>{content}</FloatingPortal>\n  }\n\n  return content\n})\n\nTooltip.displayName = \"Tooltip\"\nTooltipTrigger.displayName = \"TooltipTrigger\"\nTooltipContent.displayName = \"TooltipContent\"\n","import * as React from \"react\"\n\n// --- Tiptap UI Primitive ---\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from \"@/components/tiptap-ui-primitive/tooltip\"\n\n// --- Lib ---\nimport { cn, parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n\nexport interface ButtonProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  className?: string\n  showTooltip?: boolean\n  tooltip?: React.ReactNode\n  shortcutKeys?: string\n}\n\nexport const ShortcutDisplay: React.FC<{ shortcuts: string[] }> = ({\n  shortcuts,\n}) => {\n  if (shortcuts.length === 0) return null\n\n  return (\n    <div>\n      {shortcuts.map((key, index) => (\n        <React.Fragment key={index}>\n          {index > 0 && <kbd>+</kbd>}\n          <kbd>{key}</kbd>\n        </React.Fragment>\n      ))}\n    </div>\n  )\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  (\n    {\n      className,\n      children,\n      tooltip,\n      showTooltip = true,\n      shortcutKeys,\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    const shortcuts = React.useMemo(\n      () => parseShortcutKeys({ shortcutKeys }),\n      [shortcutKeys]\n    )\n\n    if (!tooltip || !showTooltip) {\n      return (\n        <button\n          className={cn(\"tiptap-button\", className)}\n          ref={ref}\n          aria-label={ariaLabel}\n          {...props}\n        >\n          {children}\n        </button>\n      )\n    }\n\n    return (\n      <Tooltip delay={200}>\n        <TooltipTrigger\n          className={cn(\"tiptap-button\", className)}\n          ref={ref}\n          aria-label={ariaLabel}\n          {...props}\n        >\n          {children}\n        </TooltipTrigger>\n        <TooltipContent>\n          {tooltip}\n          <ShortcutDisplay shortcuts={shortcuts} />\n        </TooltipContent>\n      </Tooltip>\n    )\n  }\n)\n\nButton.displayName = \"Button\"\n\nexport const ButtonGroup = React.forwardRef<\n  HTMLDivElement,\n  React.ComponentProps<\"div\"> & {\n    orientation?: \"horizontal\" | \"vertical\"\n  }\n>(({ className, children, orientation = \"vertical\", ...props }, ref) => {\n  return (\n    <div\n      ref={ref}\n      className={cn(\"tiptap-button-group\", className)}\n      data-orientation={orientation}\n      role=\"group\"\n      {...props}\n    >\n      {children}\n    </div>\n  )\n})\nButtonGroup.displayName = \"ButtonGroup\"\n\nexport default Button\n","import * as React from \"react\"\n\nexport const CloseIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M18.7071 6.70711C19.0976 6.31658 19.0976 5.68342 18.7071 5.29289C18.3166 4.90237 17.6834 4.90237 17.2929 5.29289L12 10.5858L6.70711 5.29289C6.31658 4.90237 5.68342 4.90237 5.29289 5.29289C4.90237 5.68342 4.90237 6.31658 5.29289 6.70711L10.5858 12L5.29289 17.2929C4.90237 17.6834 4.90237 18.3166 5.29289 18.7071C5.68342 19.0976 6.31658 19.0976 6.70711 18.7071L12 13.4142L17.2929 18.7071C17.6834 19.0976 18.3166 19.0976 18.7071 18.7071C19.0976 18.3166 19.0976 17.6834 18.7071 17.2929L13.4142 12L18.7071 6.70711Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nCloseIcon.displayName = \"CloseIcon\"\n","import * as React from 'react';\nimport type { NodeViewProps } from '@tiptap/react';\nimport { NodeViewWrapper, NodeViewContent } from '@tiptap/react';\nimport { Button } from '@/components/tiptap-ui-primitive/button';\nimport { CloseIcon } from '@/components/tiptap-icons/close-icon';\nimport { focusNextNode, isValidPosition, cn } from '@/lib/tiptap-utils';\nimport { Input } from '@/components/tiptap-ui-primitive/input';\n\nexport interface FileItem {\n  /**\n   * Unique identifier for the file item\n   */\n  id: string;\n  /**\n   * The actual File object being uploaded\n   */\n  file: File;\n  /**\n   * Current upload progress as a percentage (0-100)\n   */\n  progress: number;\n  /**\n   * Current status of the file upload process\n   * @default \"uploading\"\n   */\n  status: 'uploading' | 'success' | 'error';\n\n  /**\n   * URL to the uploaded file, available after successful upload\n   * @optional\n   */\n  url?: string;\n  /**\n   * Signed URL to the uploaded file, available after successful upload\n   * @optional\n   */\n  signedUrl?: string;\n  /**\n   * Controller that can be used to abort the upload process\n   * @optional\n   */\n  abortController?: AbortController;\n}\n\nexport interface UploadOptions {\n  /**\n   * Maximum allowed file size in bytes\n   */\n  maxSize: number;\n  /**\n   * Maximum number of files that can be uploaded\n   */\n  limit: number;\n  /**\n   * String specifying acceptable file types (MIME types or extensions)\n   * @example \".jpg,.png,image/jpeg\" or \"image/*\"\n   */\n  accept: string;\n  /**\n   * Function that handles the actual file upload process\n   * @param {File} file - The file to be uploaded\n   * @param {Function} onProgress - Callback function to report upload progress\n   * @param {AbortSignal} signal - Signal that can be used to abort the upload\n   * @returns {Promise<string | { src: string; signedUrl?: string }>} Promise resolving to the URL of the uploaded file or object with url and signedUrl\n   */\n  upload: (\n    file: File,\n    onProgress: (event: { progress: number }) => void,\n    signal: AbortSignal,\n  ) => Promise<string | { src: string; signedUrl?: string }>;\n  /**\n   * Callback triggered when a file is uploaded successfully\n   * @param {string} url - URL of the successfully uploaded file\n   * @optional\n   */\n  onSuccess?: (url: string) => void;\n  /**\n   * Callback triggered when an error occurs during upload\n   * @param {Error} error - The error that occurred\n   * @optional\n   */\n  onError?: (error: Error) => void;\n}\n\n/**\n * Custom hook for managing multiple file uploads with progress tracking and cancellation\n */\nfunction useFileUpload(options: UploadOptions) {\n  const [fileItems, setFileItems] = React.useState<FileItem[]>([]);\n\n  const uploadFile = async (\n    file: File,\n  ): Promise<{ url: string; signedUrl?: string } | null> => {\n    if (file.size > options.maxSize) {\n      const error = new Error(\n        `File size exceeds maximum allowed (${\n          options.maxSize / 1024 / 1024\n        }MB)`,\n      );\n      options.onError?.(error);\n      return null;\n    }\n\n    const abortController = new AbortController();\n    const fileId = crypto.randomUUID();\n\n    const newFileItem: FileItem = {\n      id: fileId,\n      file,\n      progress: 0,\n      status: 'uploading',\n      abortController,\n    };\n\n    setFileItems((prev) => [...prev, newFileItem]);\n\n    try {\n      if (!options.upload) {\n        throw new Error('Upload function is not defined');\n      }\n\n      const result = await options.upload(\n        file,\n        (event: { progress: number }) => {\n          setFileItems((prev) =>\n            prev.map((item) =>\n              item.id === fileId ? { ...item, progress: event.progress } : item,\n            ),\n          );\n        },\n        abortController.signal,\n      );\n\n      if (!result) throw new Error('Upload failed: No result returned');\n\n      // Handle both string and object response formats\n      const url = typeof result === 'string' ? result : result.src;\n      const signedUrl =\n        typeof result === 'object' ? result.signedUrl : undefined;\n\n      if (!url) throw new Error('Upload failed: No URL returned');\n\n      if (!abortController.signal.aborted) {\n        setFileItems((prev) =>\n          prev.map((item) =>\n            item.id === fileId\n              ? { ...item, status: 'success', url, signedUrl, progress: 100 }\n              : item,\n          ),\n        );\n        options.onSuccess?.(url);\n        return { url, signedUrl };\n      }\n\n      return null;\n    } catch (error) {\n      if (!abortController.signal.aborted) {\n        setFileItems((prev) =>\n          prev.map((item) =>\n            item.id === fileId\n              ? { ...item, status: 'error', progress: 0 }\n              : item,\n          ),\n        );\n        options.onError?.(\n          error instanceof Error ? error : new Error('Upload failed'),\n        );\n      }\n      return null;\n    }\n  };\n\n  const uploadFiles = async (\n    files: File[],\n  ): Promise<Array<{ url: string; signedUrl?: string }>> => {\n    if (!files || files.length === 0) {\n      options.onError?.(new Error('No files to upload'));\n      return [];\n    }\n\n    if (options.limit && files.length > options.limit) {\n      options.onError?.(\n        new Error(\n          `Maximum ${options.limit} file${\n            options.limit === 1 ? '' : 's'\n          } allowed`,\n        ),\n      );\n      return [];\n    }\n\n    // Upload all files concurrently\n    const uploadPromises = files.map((file) => uploadFile(file));\n    const results = await Promise.all(uploadPromises);\n\n    // Filter out null results (failed uploads)\n    return results.filter(\n      (result): result is { url: string; signedUrl?: string } =>\n        result !== null,\n    );\n  };\n\n  const removeFileItem = (fileId: string) => {\n    setFileItems((prev) => {\n      const fileToRemove = prev.find((item) => item.id === fileId);\n      if (fileToRemove?.abortController) {\n        fileToRemove.abortController.abort();\n      }\n      if (fileToRemove?.url) {\n        URL.revokeObjectURL(fileToRemove.url);\n      }\n      return prev.filter((item) => item.id !== fileId);\n    });\n  };\n\n  const clearAllFiles = () => {\n    fileItems.forEach((item) => {\n      if (item.abortController) {\n        item.abortController.abort();\n      }\n      if (item.url) {\n        URL.revokeObjectURL(item.url);\n      }\n    });\n    setFileItems([]);\n  };\n\n  return {\n    fileItems,\n    uploadFiles,\n    removeFileItem,\n    clearAllFiles,\n  };\n}\n\nconst ImageIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeWidth=\"1\"\n    className={className}\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n    <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n    <polyline points=\"21 15 16 10 5 21\" />\n  </svg>\n);\n\nconst UploadIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeWidth=\"2\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n    className={className}\n  >\n    <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n    <polyline points=\"17 8 12 3 7 8\" />\n    <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n  </svg>\n);\n\nconst CloudUploadIcon: React.FC = () => (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    className=\"tiptap-image-upload-icon\"\n    fill=\"currentColor\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M11.1953 4.41771C10.3478 4.08499 9.43578 3.94949 8.5282 4.02147C7.62062 4.09345 6.74133 4.37102 5.95691 4.83316C5.1725 5.2953 4.50354 5.92989 4.00071 6.68886C3.49788 7.44783 3.17436 8.31128 3.05465 9.2138C2.93495 10.1163 3.0222 11.0343 3.3098 11.8981C3.5974 12.7619 4.07781 13.5489 4.71463 14.1995C5.10094 14.5942 5.09414 15.2274 4.69945 15.6137C4.30476 16 3.67163 15.9932 3.28532 15.5985C2.43622 14.731 1.79568 13.6816 1.41221 12.5299C1.02875 11.3781 0.91241 10.1542 1.07201 8.95084C1.23162 7.74748 1.66298 6.59621 2.33343 5.58425C3.00387 4.57229 3.89581 3.72617 4.9417 3.10998C5.98758 2.4938 7.15998 2.1237 8.37008 2.02773C9.58018 1.93176 10.7963 2.11243 11.9262 2.55605C13.0561 2.99968 14.0703 3.69462 14.8919 4.58825C15.5423 5.29573 16.0585 6.11304 16.4177 7.00002H17.4999C18.6799 6.99991 19.8288 7.37933 20.7766 8.08222C21.7245 8.78515 22.4212 9.7743 22.7637 10.9036C23.1062 12.0328 23.0765 13.2423 22.6788 14.3534C22.2812 15.4644 21.5367 16.4181 20.5554 17.0736C20.0962 17.3803 19.4752 17.2567 19.1684 16.7975C18.8617 16.3382 18.9853 15.7172 19.4445 15.4105C20.069 14.9934 20.5427 14.3865 20.7958 13.6794C21.0488 12.9724 21.0678 12.2027 20.8498 11.4841C20.6318 10.7655 20.1885 10.136 19.5853 9.6887C18.9821 9.24138 18.251 8.99993 17.5001 9.00002H15.71C15.2679 9.00002 14.8783 8.70973 14.7518 8.28611C14.4913 7.41374 14.0357 6.61208 13.4195 5.94186C12.8034 5.27164 12.0427 4.75043 11.1953 4.41771Z\"\n      fill=\"currentColor\"\n    />\n    <path\n      d=\"M11 14.4142V21C11 21.5523 11.4477 22 12 22C12.5523 22 13 21.5523 13 21V14.4142L15.2929 16.7071C15.6834 17.0976 16.3166 17.0976 16.7071 16.7071C17.0976 16.3166 17.0976 15.6834 16.7071 15.2929L12.7078 11.2936C12.7054 11.2912 12.703 11.2888 12.7005 11.2864C12.5208 11.1099 12.2746 11.0008 12.003 11L12 11L11.997 11C11.8625 11.0004 11.7343 11.0273 11.6172 11.0759C11.502 11.1236 11.3938 11.1937 11.2995 11.2864C11.297 11.2888 11.2946 11.2912 11.2922 11.2936L7.29289 15.2929C6.90237 15.6834 6.90237 16.3166 7.29289 16.7071C7.68342 17.0976 8.31658 17.0976 8.70711 16.7071L11 14.4142Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n);\n\ntype TabType = 'upload' | 'embed';\n\ninterface ImageUploadPreviewProps {\n  /**\n   * The file item to preview\n   */\n  fileItem: FileItem;\n  /**\n   * Callback to remove this file from upload queue\n   */\n  onRemove: () => void;\n}\n\n/**\n * Component that displays a preview of an uploading file with progress\n */\nconst ImageUploadPreview: React.FC<ImageUploadPreviewProps> = ({\n  fileItem,\n  onRemove,\n}) => {\n  const formatFileSize = (bytes: number) => {\n    if (bytes === 0) return '0 Bytes';\n    const k = 1024;\n    const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n    const i = Math.floor(Math.log(bytes) / Math.log(k));\n    return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;\n  };\n\n  return (\n    <div className=\"tiptap-image-upload-preview\">\n      {fileItem.status === 'uploading' && (\n        <div\n          className=\"tiptap-image-upload-progress\"\n          style={{ width: `${fileItem.progress}%` }}\n        />\n      )}\n\n      <div className=\"tiptap-image-upload-preview-content\">\n        <div className=\"tiptap-image-upload-file-info\">\n          <div className=\"tiptap-image-upload-file-icon\">\n            <CloudUploadIcon />\n          </div>\n          <div className=\"tiptap-image-upload-details\">\n            <span className=\"tiptap-image-upload-text\">\n              {fileItem.file.name}\n            </span>\n            <span className=\"tiptap-image-upload-subtext\">\n              {formatFileSize(fileItem.file.size)}\n            </span>\n          </div>\n        </div>\n        <div className=\"tiptap-image-upload-actions\">\n          {fileItem.status === 'uploading' && (\n            <span className=\"tiptap-image-upload-progress-text\">\n              {fileItem.progress}%\n            </span>\n          )}\n          <Button\n            type=\"button\"\n            data-style=\"ghost\"\n            onClick={(e) => {\n              e.stopPropagation();\n              onRemove();\n            }}\n          >\n            <CloseIcon className=\"tiptap-button-icon\" />\n          </Button>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport const ImageUploadNode: React.FC<NodeViewProps> = (props) => {\n  const { accept, limit, maxSize } = props.node.attrs;\n  const inputRef = React.useRef<HTMLInputElement>(null);\n  const extension = props.extension;\n  const editor = props.editor;\n  const [isOpen, setIsOpen] = React.useState(false);\n  const [activeTab, setActiveTab] = React.useState<TabType>('upload');\n  const [urlInput, setUrlInput] = React.useState('');\n  const [isDragging, setIsDragging] = React.useState(false);\n\n  const uploadOptions: UploadOptions = {\n    maxSize,\n    limit,\n    accept,\n    upload: extension.options.upload,\n    onSuccess: extension.options.onSuccess,\n    onError: extension.options.onError,\n  };\n\n  const { fileItems, uploadFiles, removeFileItem, clearAllFiles } =\n    useFileUpload(uploadOptions);\n\n  const handleUpload = async (files: File[]) => {\n    const results = await uploadFiles(files);\n\n    if (results.length > 0) {\n      const pos = props.getPos();\n\n      if (isValidPosition(pos)) {\n        const imageNodes = results.map((result, index) => {\n          const filename =\n            files[index]?.name.replace(/\\.[^/.]+$/, '') || 'unknown';\n          return {\n            type: extension.options.type,\n            attrs: {\n              ...extension.options,\n              src: result.url,\n              signedUrl: result.signedUrl,\n              alt: filename,\n              title: filename,\n            },\n          };\n        });\n\n        props.editor\n          .chain()\n          .focus()\n          .deleteRange({ from: pos, to: pos + props.node.nodeSize })\n          .insertContentAt(pos, imageNodes)\n          .run();\n\n        focusNextNode(props.editor);\n      }\n    }\n  };\n\n  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const files = e.target.files;\n    if (!files || files.length === 0) {\n      extension.options.onError?.(new Error('No file selected'));\n      return;\n    }\n    handleUpload(Array.from(files));\n  };\n\n  const handleDragOver = (e: React.DragEvent) => {\n    e.preventDefault();\n    setIsDragging(true);\n  };\n\n  const handleDragLeave = (e: React.DragEvent) => {\n    e.preventDefault();\n    setIsDragging(false);\n  };\n\n  const handleDrop = (e: React.DragEvent) => {\n    e.preventDefault();\n    setIsDragging(false);\n    const files = Array.from(e.dataTransfer.files);\n    if (files.length > 0) {\n      handleUpload(files);\n    }\n  };\n\n  const handleUrlSubmit = () => {\n    if (urlInput) {\n      const pos = props.getPos();\n\n      if (isValidPosition(pos)) {\n        const imageNode = {\n          type: extension.options.type,\n          attrs: {\n            src: urlInput,\n            alt: 'Image',\n            title: 'Image',\n          },\n        };\n\n        props.editor\n          .chain()\n          .focus()\n          .deleteRange({ from: pos, to: pos + props.node.nodeSize })\n          .insertContentAt(pos, imageNode)\n          .run();\n\n        focusNextNode(props.editor);\n      }\n\n      setUrlInput('');\n      setIsOpen(false);\n    }\n  };\n\n  const handleClick = () => {\n    if (fileItems.length === 0 && !isOpen) {\n      setIsOpen(true);\n    }\n  };\n\n  const hasFiles = fileItems.length > 0;\n\n  return (\n    <NodeViewWrapper\n      className=\"tiptap-image-upload\"\n      tabIndex={0}\n      contentEditable={false}\n    >\n      {!hasFiles && (\n        <div className=\"my-1 w-full\">\n          <button\n            onMouseDown={(e) => {\n              e.preventDefault();\n              e.stopPropagation();\n            }}\n            onClick={(e) => {\n              e.preventDefault();\n              e.stopPropagation();\n              editor?.isEditable && setIsOpen(!isOpen);\n            }}\n            className=\"w-full flex items-center gap-3 rounded-lg px-4 py-3 transition-colors cursor-pointer\"\n            style={{\n              backgroundColor: '#242425',\n              color: 'rgba(255, 255, 255, 0.7)',\n            }}\n          >\n            <ImageIcon className=\"h-5 w-5\" />\n            <span className=\"text-sm\">Add an image</span>\n          </button>\n\n          {isOpen && (\n            <div\n              className=\"mt-2 mx-auto max-w-2xl rounded-lg shadow-sm\"\n              style={{\n                backgroundColor: '#161617',\n                border: '1px solid rgba(255, 255, 255, 0.1)',\n                borderRadius: '8px',\n              }}\n            >\n              {/* Tabs */}\n              <div\n                className=\"flex items-center gap-1 px-4 pt-4\"\n                style={{\n                  borderBottom: '1px solid rgba(255, 255, 255, 0.1)',\n                }}\n              >\n                <button\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    setActiveTab('upload');\n                  }}\n                  className={cn(\n                    'relative px-3 py-2 text-sm font-medium transition-colors rounded-t-md',\n                  )}\n                  style={{\n                    color:\n                      activeTab === 'upload'\n                        ? 'white'\n                        : 'rgba(255, 255, 255, 0.7)',\n                  }}\n                >\n                  Upload\n                  {activeTab === 'upload' && (\n                    <div\n                      className=\"absolute bottom-0 left-0 right-0\"\n                      style={{\n                        backgroundColor: 'white',\n                        height: '3px',\n                        borderRadius: '2px',\n                      }}\n                    />\n                  )}\n                </button>\n                <button\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    setActiveTab('embed');\n                  }}\n                  className={cn(\n                    'relative px-3 py-2 text-sm font-medium transition-colors rounded-t-md',\n                  )}\n                  style={{\n                    color:\n                      activeTab === 'embed'\n                        ? 'white'\n                        : 'rgba(255, 255, 255, 0.7)',\n                  }}\n                >\n                  Embed link\n                  {activeTab === 'embed' && (\n                    <div\n                      className=\"absolute bottom-0 left-0 right-0\"\n                      style={{\n                        backgroundColor: 'white',\n                        height: '3px',\n                        borderRadius: '2px',\n                      }}\n                    />\n                  )}\n                </button>\n              </div>\n\n              {/* Tab Content */}\n              <div className=\"p-6\">\n                {activeTab === 'upload' && (\n                  <div className=\"flex flex-col gap-3\">\n                    <input\n                      ref={inputRef}\n                      type=\"file\"\n                      accept={accept}\n                      multiple={limit > 1}\n                      className=\"hidden\"\n                      onChange={handleChange}\n                    />\n                    <button\n                      onClick={() => inputRef.current?.click()}\n                      onDragOver={handleDragOver}\n                      onDragLeave={handleDragLeave}\n                      onDrop={handleDrop}\n                      className={cn(\n                        'flex flex-col items-center justify-center gap-3 w-full rounded-lg border-2 border-dashed px-6 py-12 transition-colors',\n                      )}\n                      style={{\n                        borderColor: isDragging\n                          ? '#007AFF'\n                          : 'rgba(255, 255, 255, 0.7)',\n                        backgroundColor: '#242425',\n                      }}\n                    >\n                      <UploadIcon className=\"h-8 w-8 text-[rgba(255,255,255,0.7)]\" />\n                      <div className=\"text-center\">\n                        <p\n                          className=\"text-sm font-medium\"\n                          style={{ color: 'rgba(255, 255, 255, 0.7)' }}\n                        >\n                          Drag and drop or select a file to upload\n                        </p>\n                      </div>\n                    </button>\n                    <p\n                      className=\"text-xs text-center\"\n                      style={{\n                        color: 'rgba(255, 255, 255, 0.7)',\n                        userSelect: 'none',\n                        WebkitUserSelect: 'none',\n                        MozUserSelect: 'none',\n                        msUserSelect: 'none',\n                        cursor: 'default',\n                      }}\n                    >\n                      The maximum size per file is{' '}\n                      <span style={{ color: 'var(--tnkr-primary)' }}>1gb</span>\n                    </p>\n                  </div>\n                )}\n\n                {activeTab === 'embed' && (\n                  <div className=\"flex flex-col gap-3\">\n                    <Input\n                      placeholder=\"Paste image link...\"\n                      value={urlInput}\n                      onChange={(e) => setUrlInput(e.target.value)}\n                      onKeyDown={(e) => e.key === 'Enter' && handleUrlSubmit()}\n                      className=\"h-10\"\n                      style={{\n                        backgroundColor: 'rgba(255, 255, 255, 0.05)',\n                        border: '1px solid rgba(255, 255, 255, 0.1)',\n                        color: 'white',\n                      }}\n                    />\n                    <button\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        handleUrlSubmit();\n                      }}\n                      className=\"w-full h-10 rounded-md text-sm font-medium transition-colors\"\n                      style={{\n                        backgroundColor: 'var(--tnkr-primary)',\n                        color: 'white',\n                      }}\n                    >\n                      Embed image\n                    </button>\n                  </div>\n                )}\n              </div>\n            </div>\n          )}\n        </div>\n      )}\n\n      {hasFiles && (\n        <div className=\"tiptap-image-upload-previews\">\n          {fileItems.length > 1 && (\n            <div className=\"tiptap-image-upload-header\">\n              <span>Uploading {fileItems.length} files</span>\n              <Button\n                type=\"button\"\n                data-style=\"ghost\"\n                onClick={(e) => {\n                  e.stopPropagation();\n                  clearAllFiles();\n                }}\n              >\n                Clear All\n              </Button>\n            </div>\n          )}\n          {fileItems.map((fileItem) => (\n            <ImageUploadPreview\n              key={fileItem.id}\n              fileItem={fileItem}\n              onRemove={() => removeFileItem(fileItem.id)}\n            />\n          ))}\n        </div>\n      )}\n      {/* Hidden content required for non-atom node structure */}\n      <NodeViewContent\n        as=\"div\"\n        style={{ display: 'none', pointerEvents: 'none' }}\n      />\n    </NodeViewWrapper>\n  );\n};\n","import { mergeAttributes, Node } from \"@tiptap/react\"\nimport { ReactNodeViewRenderer } from \"@tiptap/react\"\nimport { ImageUploadNode as ImageUploadNodeComponent } from \"@/components/tiptap-node/image-upload-node/image-upload-node\"\nimport type { NodeType } from \"@tiptap/pm/model\"\n\nexport type UploadFunction = (\n  file: File,\n  onProgress?: (event: { progress: number }) => void,\n  abortSignal?: AbortSignal\n) => Promise<string | { src: string; signedUrl?: string }>\n\nexport interface ImageUploadNodeOptions {\n  /**\n   * The type of the node.\n   * @default 'image'\n   */\n  type?: string | NodeType | undefined\n  /**\n   * Acceptable file types for upload.\n   * @default 'image/*'\n   */\n  accept?: string\n  /**\n   * Maximum number of files that can be uploaded.\n   * @default 1\n   */\n  limit?: number\n  /**\n   * Maximum file size in bytes (0 for unlimited).\n   * @default 0\n   */\n  maxSize?: number\n  /**\n   * Function to handle the upload process.\n   */\n  upload?: UploadFunction\n  /**\n   * Callback for upload errors.\n   */\n  onError?: (error: Error) => void\n  /**\n   * Callback for successful uploads.\n   */\n  onSuccess?: (url: string) => void\n  /**\n   * HTML attributes to add to the image element.\n   * @default {}\n   * @example { class: 'foo' }\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  HTMLAttributes: Record<string, any>\n}\n\ndeclare module \"@tiptap/react\" {\n  interface Commands<ReturnType> {\n    imageUpload: {\n      setImageUploadNode: (options?: ImageUploadNodeOptions) => ReturnType\n    }\n  }\n}\n\n/**\n * A Tiptap node extension that creates an image upload component.\n * @see registry/tiptap-node/image-upload-node/image-upload-node\n */\nexport const ImageUploadNode = Node.create<ImageUploadNodeOptions>({\n  name: \"imageUpload\",\n\n  group: \"block\",\n\n  content: 'paragraph?',\n\n  isolating: true,\n\n  addOptions() {\n    return {\n      type: \"image\",\n      accept: \"image/*\",\n      limit: 1,\n      maxSize: 0,\n      upload: undefined,\n      onError: undefined,\n      onSuccess: undefined,\n      HTMLAttributes: {},\n    }\n  },\n\n  addAttributes() {\n    return {\n      accept: {\n        default: this.options.accept,\n      },\n      limit: {\n        default: this.options.limit,\n      },\n      maxSize: {\n        default: this.options.maxSize,\n      },\n    }\n  },\n\n  parseHTML() {\n    return [{ tag: 'div[data-type=\"image-upload\"]' }]\n  },\n\n  renderHTML({ HTMLAttributes }) {\n    return [\n      \"div\",\n      mergeAttributes({ \"data-type\": \"image-upload\" }, HTMLAttributes),\n    ]\n  },\n\n  addNodeView() {\n    return ReactNodeViewRenderer(ImageUploadNodeComponent)\n  },\n\n  addCommands() {\n    return {\n      setImageUploadNode:\n        (options) =>\n        ({ commands }) => {\n          return commands.insertContent({\n            type: this.name,\n            attrs: options,\n            content: [\n              {\n                type: 'paragraph',\n              },\n            ],\n          })\n        },\n    }\n  },\n\n  /**\n   * Adds Enter key handler to trigger the upload component when it's selected.\n   */\n  addKeyboardShortcuts() {\n    return {\n      Enter: ({ editor }) => {\n        const { selection } = editor.state\n        const { nodeAfter } = selection.$from\n\n        if (\n          nodeAfter &&\n          nodeAfter.type.name === \"imageUpload\" &&\n          editor.isActive(\"imageUpload\")\n        ) {\n          const nodeEl = editor.view.nodeDOM(selection.$from.pos)\n          if (nodeEl && nodeEl instanceof HTMLElement) {\n            // Since NodeViewWrapper is wrapped with a div, we need to click the first child\n            const firstChild = nodeEl.firstChild\n            if (firstChild && firstChild instanceof HTMLElement) {\n              firstChild.click()\n              return true\n            }\n          }\n        }\n        return false\n      },\n    }\n  },\n})\n\nexport default ImageUploadNode\n","\"use client\"\n\nimport type { NodeViewProps } from \"@tiptap/react\"\nimport { NodeViewWrapper, NodeViewContent } from \"@tiptap/react\"\nimport { NodeSelection } from \"@tiptap/pm/state\"\nimport { useRef, useState, useEffect } from \"react\"\nimport * as React from \"react\"\nimport { cn } from \"@/lib/tiptap-utils\"\nimport { Input } from \"@/components/tiptap-ui-primitive/input\"\n\nconst VideoIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeWidth=\"1.2\"\n    className={className}\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <rect x=\"2\" y=\"6\" width=\"20\" height=\"12\" rx=\"2\" />\n    <path d=\"M2 12h20\" />\n    <circle cx=\"8\" cy=\"9\" r=\"1\" />\n  </svg>\n)\n\nconst UploadIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeWidth=\"2\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n    className={className}\n  >\n    <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n    <polyline points=\"17 8 12 3 7 8\" />\n    <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n  </svg>\n)\n\ntype TabType = \"upload\" | \"embed\"\n\ninterface VideoNodeProps {\n  src?: string\n  caption?: string\n  onDelete?: () => void\n  onCaptionChange?: (caption: string) => void\n  onVideoChange?: (src: string) => void\n  isOpen?: boolean\n  onToggleOpen?: (isOpen: boolean) => void\n  isEditable?: boolean\n}\n\nexport const VideoNodeComponent: React.FC<VideoNodeProps> = ({\n  src,\n  caption = \"\",\n  onCaptionChange,\n  onVideoChange,\n  isOpen: isOpenProp,\n  onToggleOpen,\n  isEditable = true,\n}) => {\n  const [isOpen, setIsOpen] = useState(isOpenProp || false)\n  const [activeTab, setActiveTab] = useState<TabType>(\"upload\")\n\n  const handleToggleOpen = (newValue: boolean) => {\n    setIsOpen(newValue)\n    onToggleOpen?.(newValue)\n  }\n\n  useEffect(() => {\n    setIsOpen(isOpenProp || false)\n  }, [isOpenProp])\n\n  const [urlInput, setUrlInput] = useState(\"\")\n  const [isDragging, setIsDragging] = useState(false)\n  const fileInputRef = useRef<HTMLInputElement>(null)\n  const videoRef = useRef<HTMLVideoElement>(null)\n\n  const handleFileUpload = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const file = e.target.files?.[0]\n    if (file) {\n      if (file.size > 5 * 1024 * 1024) {\n        alert(\"File size exceeds 5MB limit\")\n        return\n      }\n      const reader = new FileReader()\n      reader.onload = (event) => {\n        const result = event.target?.result as string\n        onVideoChange?.(result)\n      }\n      reader.readAsDataURL(file)\n    }\n  }\n\n  const handleDragOver = (e: React.DragEvent) => {\n    e.preventDefault()\n    setIsDragging(true)\n  }\n\n  const handleDragLeave = (e: React.DragEvent) => {\n    e.preventDefault()\n    setIsDragging(false)\n  }\n\n  const handleDrop = (e: React.DragEvent) => {\n    e.preventDefault()\n    setIsDragging(false)\n    const file = e.dataTransfer.files?.[0]\n    if (file && file.type.startsWith(\"video/\")) {\n      if (file.size > 5 * 1024 * 1024) {\n        alert(\"File size exceeds 5MB limit\")\n        return\n      }\n      const reader = new FileReader()\n      reader.onload = (event) => {\n        const result = event.target?.result as string\n        onVideoChange?.(result)\n      }\n      reader.readAsDataURL(file)\n    }\n  }\n\n  const handleUrlSubmit = () => {\n    if (urlInput) {\n      onVideoChange?.(urlInput)\n      setUrlInput(\"\")\n    }\n  }\n\n  const getEmbedUrl = (url: string) => {\n    // YouTube\n    const youtubeMatch = url.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([^&\\s]+)/)\n    if (youtubeMatch) {\n      return `https://www.youtube-nocookie.com/embed/${youtubeMatch[1]}?rel=0`\n    }\n\n    // Vimeo\n    const vimeoMatch = url.match(/vimeo\\.com\\/(\\d+)/)\n    if (vimeoMatch) {\n      return `https://player.vimeo.com/video/${vimeoMatch[1]}`\n    }\n\n    // Loom\n    const loomMatch = url.match(/loom\\.com\\/share\\/([^?]+)/)\n    if (loomMatch) {\n      return `https://www.loom.com/embed/${loomMatch[1]}`\n    }\n\n    return url\n  }\n\n  const isEmbedUrl = (url: string) => {\n    return (\n      url.includes(\"youtube.com\") ||\n      url.includes(\"youtu.be\") ||\n      url.includes(\"vimeo.com\") ||\n      url.includes(\"loom.com\")\n    )\n  }\n\n  if (!src) {\n    return (\n      <div className=\"my-1 w-full\">\n        {/* Empty State Header */}\n        <button\n          onMouseDown={(e) => {\n            e.preventDefault()\n            e.stopPropagation()\n          }}\n          onClick={(e) => {\n            e.preventDefault()\n            e.stopPropagation()\n            handleToggleOpen(!isOpen)\n          }}\n          className=\"w-full flex items-center gap-3 rounded-lg px-4 py-3 transition-colors cursor-pointer\"\n          style={{\n            backgroundColor: \"#242425\",\n            color: \"rgba(255, 255, 255, 0.7)\",\n          }}\n        >\n          <VideoIcon className=\"h-5 w-5\" />\n          <span className=\"text-sm\">Add a video</span>\n        </button>\n\n        {isOpen && (\n          <div\n            className=\"mt-2 mx-auto max-w-2xl rounded-lg shadow-sm\"\n            style={{\n              backgroundColor: \"#161617\",\n              border: \"1px solid rgba(255, 255, 255, 0.1)\",\n              borderRadius: \"8px\",\n            }}\n          >\n            {/* Tabs */}\n            <div\n              className=\"flex items-center gap-1 px-4 pt-4\"\n              style={{\n                borderBottom: \"1px solid rgba(255, 255, 255, 0.1)\",\n              }}\n            >\n              <button\n                onClick={(e) => {\n                  e.stopPropagation()\n                  setActiveTab(\"upload\")\n                }}\n                className={cn(\n                  \"relative px-3 py-2 text-sm font-medium transition-colors rounded-t-md\"\n                )}\n                style={{\n                  color:\n                    activeTab === \"upload\"\n                      ? \"white\"\n                      : \"rgba(255, 255, 255, 0.7)\",\n                }}\n              >\n                Upload\n                {activeTab === \"upload\" && (\n                  <div\n                    className=\"absolute bottom-0 left-0 right-0\"\n                    style={{\n                      backgroundColor: \"white\",\n                      height: \"3px\",\n                      borderRadius: \"2px\",\n                    }}\n                  />\n                )}\n              </button>\n              <button\n                onClick={(e) => {\n                  e.stopPropagation()\n                  setActiveTab(\"embed\")\n                }}\n                className={cn(\n                  \"relative px-3 py-2 text-sm font-medium transition-colors rounded-t-md\"\n                )}\n                style={{\n                  color:\n                    activeTab === \"embed\"\n                      ? \"white\"\n                      : \"rgba(255, 255, 255, 0.7)\",\n                }}\n              >\n                Embed link\n                {activeTab === \"embed\" && (\n                  <div\n                    className=\"absolute bottom-0 left-0 right-0\"\n                    style={{\n                      backgroundColor: \"white\",\n                      height: \"3px\",\n                      borderRadius: \"2px\",\n                    }}\n                  />\n                )}\n              </button>\n            </div>\n\n            {/* Tab Content */}\n            <div className=\"p-6\">\n              {activeTab === \"upload\" && (\n                <div className=\"flex flex-col gap-3\">\n                  <input\n                    ref={fileInputRef}\n                    type=\"file\"\n                    accept=\"video/*\"\n                    className=\"hidden\"\n                    onChange={handleFileUpload}\n                  />\n                  <button\n                    onClick={() => fileInputRef.current?.click()}\n                    onDragOver={handleDragOver}\n                    onDragLeave={handleDragLeave}\n                    onDrop={handleDrop}\n                    className={cn(\n                      \"flex flex-col items-center justify-center gap-3 w-full rounded-lg border-2 border-dashed px-6 py-12 transition-colors\"\n                    )}\n                    style={{\n                      borderColor: isDragging\n                        ? \"#007AFF\"\n                        : \"rgba(255, 255, 255, 0.7)\",\n                      backgroundColor: \"#242425\",\n                    }}\n                  >\n                    <UploadIcon\n                      className=\"h-8 w-8 text-[rgba(255,255,255,0.7)]\"\n                    />\n                    <div className=\"text-center\">\n                      <p\n                        className=\"text-sm font-medium\"\n                        style={{ color: \"rgba(255, 255, 255, 0.7)\" }}\n                      >\n                        Drag and drop or select a file to upload\n                      </p>\n                    </div>\n                  </button>\n                  <p className=\"text-xs text-center\" style={{ color: \"rgba(255, 255, 255, 0.7)\" }}>\n                    The maximum size per file is <span style={{ color: 'var(--tnkr-primary)' }}>5mb</span>\n                  </p>\n                </div>\n              )}\n\n              {activeTab === \"embed\" && (\n                <div className=\"flex flex-col gap-3\">\n                  <Input\n                    placeholder=\"Paste YouTube, Vimeo, or Loom link...\"\n                    value={urlInput}\n                    onChange={(e) => setUrlInput(e.target.value)}\n                    onKeyDown={(e) => e.key === \"Enter\" && handleUrlSubmit()}\n                    className=\"h-10\"\n                    style={{\n                      backgroundColor: \"rgba(255, 255, 255, 0.05)\",\n                      border: \"1px solid rgba(255, 255, 255, 0.1)\",\n                      color: \"white\",\n                    }}\n                  />\n                  <button\n                    onClick={(e) => {\n                      e.stopPropagation()\n                      handleUrlSubmit()\n                    }}\n                    className=\"w-full h-10 rounded-md text-sm font-medium transition-colors\"\n                    style={{\n                      backgroundColor: \"var(--tnkr-primary)\",\n                      color: \"white\",\n                    }}\n                  >\n                    Embed video\n                  </button>\n                  <p className=\"text-xs text-center\" style={{ color: \"rgba(255, 255, 255, 0.5)\" }}>\n                    Works with YouTube, Vimeo and more\n                  </p>\n                </div>\n              )}\n            </div>\n          </div>\n        )}\n      </div>\n    )\n  }\n\n  const embedUrl = isEmbedUrl(src) ? getEmbedUrl(src) : src\n\n  return (\n    <div className=\"my-2 w-full\">\n      <div className=\"relative overflow-hidden rounded-lg bg-black\">\n        {isEmbedUrl(src) ? (\n          <div className=\"relative aspect-video w-full\">\n            <iframe\n              src={embedUrl}\n              title=\"Embedded video\"\n              className=\"h-full w-full\"\n              allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n              allowFullScreen\n              sandbox=\"allow-same-origin allow-scripts allow-popups allow-forms\"\n            />\n          </div>\n        ) : (\n          <video\n            ref={videoRef}\n            src={embedUrl}\n            controls\n            className=\"h-auto w-full\"\n            preload=\"metadata\"\n          >\n            <track kind=\"captions\" />\n          </video>\n        )}\n      </div>\n      {/* Caption - Only show in edit mode or when there's a caption in view mode */}\n      {(isEditable || caption) && (\n        <div className=\"mt-2 px-2\">\n          <Input\n            placeholder=\"Add a caption...\"\n            value={caption}\n            onChange={(e) => onCaptionChange?.(e.target.value)}\n            disabled={!isEditable}\n            className=\"border-0 bg-transparent px-0 text-sm placeholder:opacity-50\"\n            style={{\n              color: \"rgba(255, 255, 255, 0.7)\",\n            }}\n          />\n        </div>\n      )}\n    </div>\n  )\n}\n\nexport function VideoNodeView(props: NodeViewProps) {\n  const { node, updateAttributes, editor, getPos } = props\n\n  const videoUrl = node.attrs.src\n  const caption = node.attrs.caption || \"\"\n  const isOpen = node.attrs.isOpen || false\n\n  const handleVideoChange = (src: string) => {\n    updateAttributes({ src })\n  }\n\n  const handleCaptionChange = (caption: string) => {\n    updateAttributes({ caption })\n  }\n\n  const handleToggleOpen = (isOpen: boolean) => {\n    updateAttributes({ isOpen })\n  }\n\n  // Handler to select the entire node when clicked\n  const handleNodeClick = () => {\n    if (editor?.isEditable) {\n      const pos = getPos()\n      if (typeof pos === 'number') {\n        const { state } = editor\n        const nodeSelection = NodeSelection.create(state.doc, pos)\n        editor.view.dispatch(state.tr.setSelection(nodeSelection))\n      }\n    }\n  }\n\n  return (\n    <NodeViewWrapper contentEditable={false} onClick={handleNodeClick}>\n      <VideoNodeComponent\n        src={videoUrl}\n        caption={caption}\n        isOpen={isOpen}\n        onVideoChange={handleVideoChange}\n        onCaptionChange={handleCaptionChange}\n        onToggleOpen={handleToggleOpen}\n        isEditable={editor?.isEditable}\n      />\n      {/* Hidden content required for non-atom node structure */}\n      <NodeViewContent as=\"div\" style={{ display: 'none', pointerEvents: 'none' }} />\n    </NodeViewWrapper>\n  )\n}\n","import { Node, mergeAttributes } from \"@tiptap/core\"\nimport { ReactNodeViewRenderer } from \"@tiptap/react\"\nimport { VideoNodeView } from \"./video-node-view\"\n\nexport interface VideoOptions {\n  inline: boolean\n  allowBase64: boolean\n  HTMLAttributes: Record<string, any>\n}\n\ndeclare module \"@tiptap/core\" {\n  interface Commands<ReturnType> {\n    video: {\n      setVideo: (options?: { src?: string; caption?: string }) => ReturnType\n    }\n  }\n}\n\nexport const Video = Node.create<VideoOptions>({\n  name: \"video\",\n\n  addOptions() {\n    return {\n      inline: false,\n      allowBase64: false,\n      HTMLAttributes: {},\n    }\n  },\n\n  inline() {\n    return this.options.inline\n  },\n\n  group() {\n    return this.options.inline ? \"inline\" : \"block\"\n  },\n\n\n  content: 'paragraph?',\n\n  isolating: true,\n\n\n  addAttributes() {\n    return {\n      src: {\n        default: null,\n        parseHTML: (element) => element.getAttribute(\"src\"),\n        renderHTML: (attributes) => {\n          if (!attributes.src) {\n            return {}\n          }\n          return {\n            src: attributes.src,\n          }\n        },\n      },\n      alt: {\n        default: null,\n      },\n      title: {\n        default: null,\n      },\n      caption: {\n        default: null,\n        parseHTML: (element) => element.getAttribute(\"data-caption\"),\n        renderHTML: (attributes) => {\n          if (!attributes.caption) {\n            return {}\n          }\n          return {\n            \"data-caption\": attributes.caption,\n          }\n        },\n      },\n      isOpen: {\n        default: false,\n        parseHTML: (element) => element.getAttribute(\"data-is-open\") === \"true\",\n        renderHTML: (attributes) => {\n          if (!attributes.isOpen) {\n            return {}\n          }\n          return {\n            \"data-is-open\": attributes.isOpen.toString(),\n          }\n        },\n      },\n    }\n  },\n\n  parseHTML() {\n    return [\n      {\n        tag: this.options.allowBase64\n          ? \"video[src]\"\n          : 'video[src]:not([src^=\"data:\"])',\n      },\n    ]\n  },\n\n  renderHTML({ HTMLAttributes }) {\n    return [\n      \"video\",\n      mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\n      [\"source\", HTMLAttributes],\n    ]\n  },\n\n  addNodeView() {\n    return ReactNodeViewRenderer(VideoNodeView)\n  },\n\n  addCommands() {\n    return {\n      setVideo:\n        (options?: { src?: string; caption?: string }) =>\n        ({ commands }: { commands: any }) => {\n          return commands.insertContent({\n            type: this.name,\n            attrs: options,\n          })\n        },\n    }\n  },\n})\n\nexport default Video\n","import * as React from 'react';\nimport type { NodeViewProps } from '@tiptap/react';\nimport { NodeViewWrapper, NodeViewContent } from '@tiptap/react';\nimport { Button } from '@/components/tiptap-ui-primitive/button';\nimport { CloseIcon } from '@/components/tiptap-icons/close-icon';\nimport { focusNextNode, isValidPosition, cn } from '@/lib/tiptap-utils';\nimport { Input } from '@/components/tiptap-ui-primitive/input';\n\nexport interface FileItem {\n  id: string;\n  file: File;\n  progress: number;\n  status: 'uploading' | 'success' | 'error';\n  url?: string;\n  signedUrl?: string;\n  abortController?: AbortController;\n}\n\nexport interface UploadOptions {\n  maxSize: number;\n  limit: number;\n  accept: string;\n  upload: (\n    file: File,\n    onProgress: (event: { progress: number }) => void,\n    signal: AbortSignal,\n  ) => Promise<string | { src: string; signedUrl?: string }>;\n  onSuccess?: (url: string) => void;\n  onError?: (error: Error) => void;\n}\n\nfunction useFileUpload(options: UploadOptions) {\n  const [fileItems, setFileItems] = React.useState<FileItem[]>([]);\n\n  const uploadFile = async (\n    file: File,\n  ): Promise<{ url: string; signedUrl?: string } | null> => {\n    if (file.size > options.maxSize) {\n      const error = new Error(\n        `File size exceeds maximum allowed (${\n          options.maxSize / 1024 / 1024\n        }MB)`,\n      );\n      options.onError?.(error);\n      return null;\n    }\n\n    const abortController = new AbortController();\n    const fileId = crypto.randomUUID();\n\n    const newFileItem: FileItem = {\n      id: fileId,\n      file,\n      progress: 0,\n      status: 'uploading',\n      abortController,\n    };\n\n    setFileItems((prev) => [...prev, newFileItem]);\n\n    try {\n      if (!options.upload) {\n        throw new Error('Upload function is not defined');\n      }\n\n      const result = await options.upload(\n        file,\n        (event: { progress: number }) => {\n          setFileItems((prev) =>\n            prev.map((item) =>\n              item.id === fileId ? { ...item, progress: event.progress } : item,\n            ),\n          );\n        },\n        abortController.signal,\n      );\n\n      if (!result) throw new Error('Upload failed: No result returned');\n\n      const url = typeof result === 'string' ? result : result.src;\n      const signedUrl =\n        typeof result === 'object' ? result.signedUrl : undefined;\n\n      if (!url) throw new Error('Upload failed: No URL returned');\n\n      if (!abortController.signal.aborted) {\n        setFileItems((prev) =>\n          prev.map((item) =>\n            item.id === fileId\n              ? { ...item, status: 'success', url, signedUrl, progress: 100 }\n              : item,\n          ),\n        );\n        options.onSuccess?.(url);\n        return { url, signedUrl };\n      }\n\n      return null;\n    } catch (error) {\n      if (!abortController.signal.aborted) {\n        setFileItems((prev) =>\n          prev.map((item) =>\n            item.id === fileId\n              ? { ...item, status: 'error', progress: 0 }\n              : item,\n          ),\n        );\n        options.onError?.(\n          error instanceof Error ? error : new Error('Upload failed'),\n        );\n      }\n      return null;\n    }\n  };\n\n  const uploadFiles = async (\n    files: File[],\n  ): Promise<Array<{ url: string; signedUrl?: string }>> => {\n    if (!files || files.length === 0) {\n      options.onError?.(new Error('No files to upload'));\n      return [];\n    }\n\n    if (options.limit && files.length > options.limit) {\n      options.onError?.(\n        new Error(\n          `Maximum ${options.limit} file${\n            options.limit === 1 ? '' : 's'\n          } allowed`,\n        ),\n      );\n      return [];\n    }\n\n    const uploadPromises = files.map((file) => uploadFile(file));\n    const results = await Promise.all(uploadPromises);\n\n    return results.filter(\n      (result): result is { url: string; signedUrl?: string } =>\n        result !== null,\n    );\n  };\n\n  const removeFileItem = (fileId: string) => {\n    setFileItems((prev) => {\n      const fileToRemove = prev.find((item) => item.id === fileId);\n      if (fileToRemove?.abortController) {\n        fileToRemove.abortController.abort();\n      }\n      if (fileToRemove?.url) {\n        URL.revokeObjectURL(fileToRemove.url);\n      }\n      return prev.filter((item) => item.id !== fileId);\n    });\n  };\n\n  const clearAllFiles = () => {\n    fileItems.forEach((item) => {\n      if (item.abortController) {\n        item.abortController.abort();\n      }\n      if (item.url) {\n        URL.revokeObjectURL(item.url);\n      }\n    });\n    setFileItems([]);\n  };\n\n  return {\n    fileItems,\n    uploadFiles,\n    removeFileItem,\n    clearAllFiles,\n  };\n}\n\nconst VideoIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeWidth=\"1.2\"\n    className={className}\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <rect x=\"2\" y=\"6\" width=\"20\" height=\"12\" rx=\"2\" />\n    <path d=\"M2 12h20\" />\n    <circle cx=\"8\" cy=\"9\" r=\"1\" />\n  </svg>\n);\n\nconst UploadIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeWidth=\"2\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n    className={className}\n  >\n    <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n    <polyline points=\"17 8 12 3 7 8\" />\n    <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n  </svg>\n);\n\nconst CloudUploadIcon: React.FC = () => (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    className=\"tiptap-image-upload-icon\"\n    fill=\"currentColor\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M11.1953 4.41771C10.3478 4.08499 9.43578 3.94949 8.5282 4.02147C7.62062 4.09345 6.74133 4.37102 5.95691 4.83316C5.1725 5.2953 4.50354 5.92989 4.00071 6.68886C3.49788 7.44783 3.17436 8.31128 3.05465 9.2138C2.93495 10.1163 3.0222 11.0343 3.3098 11.8981C3.5974 12.7619 4.07781 13.5489 4.71463 14.1995C5.10094 14.5942 5.09414 15.2274 4.69945 15.6137C4.30476 16 3.67163 15.9932 3.28532 15.5985C2.43622 14.731 1.79568 13.6816 1.41221 12.5299C1.02875 11.3781 0.91241 10.1542 1.07201 8.95084C1.23162 7.74748 1.66298 6.59621 2.33343 5.58425C3.00387 4.57229 3.89581 3.72617 4.9417 3.10998C5.98758 2.4938 7.15998 2.1237 8.37008 2.02773C9.58018 1.93176 10.7963 2.11243 11.9262 2.55605C13.0561 2.99968 14.0703 3.69462 14.8919 4.58825C15.5423 5.29573 16.0585 6.11304 16.4177 7.00002H17.4999C18.6799 6.99991 19.8288 7.37933 20.7766 8.08222C21.7245 8.78515 22.4212 9.7743 22.7637 10.9036C23.1062 12.0328 23.0765 13.2423 22.6788 14.3534C22.2812 15.4644 21.5367 16.4181 20.5554 17.0736C20.0962 17.3803 19.4752 17.2567 19.1684 16.7975C18.8617 16.3382 18.9853 15.7172 19.4445 15.4105C20.069 14.9934 20.5427 14.3865 20.7958 13.6794C21.0488 12.9724 21.0678 12.2027 20.8498 11.4841C20.6318 10.7655 20.1885 10.136 19.5853 9.6887C18.9821 9.24138 18.251 8.99993 17.5001 9.00002H15.71C15.2679 9.00002 14.8783 8.70973 14.7518 8.28611C14.4913 7.41374 14.0357 6.61208 13.4195 5.94186C12.8034 5.27164 12.0427 4.75043 11.1953 4.41771Z\"\n      fill=\"currentColor\"\n    />\n    <path\n      d=\"M11 14.4142V21C11 21.5523 11.4477 22 12 22C12.5523 22 13 21.5523 13 21V14.4142L15.2929 16.7071C15.6834 17.0976 16.3166 17.0976 16.7071 16.7071C17.0976 16.3166 17.0976 15.6834 16.7071 15.2929L12.7078 11.2936C12.7054 11.2912 12.703 11.2888 12.7005 11.2864C12.5208 11.1099 12.2746 11.0008 12.003 11L12 11L11.997 11C11.8625 11.0004 11.7343 11.0273 11.6172 11.0759C11.502 11.1236 11.3938 11.1937 11.2995 11.2864C11.297 11.2888 11.2946 11.2912 11.2922 11.2936L7.29289 15.2929C6.90237 15.6834 6.90237 16.3166 7.29289 16.7071C7.68342 17.0976 8.31658 17.0976 8.70711 16.7071L11 14.4142Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n);\n\ntype TabType = 'upload' | 'embed';\n\ninterface VideoUploadPreviewProps {\n  fileItem: FileItem;\n  onRemove: () => void;\n}\n\nconst VideoUploadPreview: React.FC<VideoUploadPreviewProps> = ({\n  fileItem,\n  onRemove,\n}) => {\n  const formatFileSize = (bytes: number) => {\n    if (bytes === 0) return '0 Bytes';\n    const k = 1024;\n    const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n    const i = Math.floor(Math.log(bytes) / Math.log(k));\n    return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;\n  };\n\n  return (\n    <div className=\"tiptap-image-upload-preview\">\n      {fileItem.status === 'uploading' && (\n        <div\n          className=\"tiptap-image-upload-progress\"\n          style={{ width: `${fileItem.progress}%` }}\n        />\n      )}\n\n      <div className=\"tiptap-image-upload-preview-content\">\n        <div className=\"tiptap-image-upload-file-info\">\n          <div className=\"tiptap-image-upload-file-icon\">\n            <CloudUploadIcon />\n          </div>\n          <div className=\"tiptap-image-upload-details\">\n            <span className=\"tiptap-image-upload-text\">\n              {fileItem.file.name}\n            </span>\n            <span className=\"tiptap-image-upload-subtext\">\n              {formatFileSize(fileItem.file.size)}\n            </span>\n          </div>\n        </div>\n        <div className=\"tiptap-image-upload-actions\">\n          {fileItem.status === 'uploading' && (\n            <span className=\"tiptap-image-upload-progress-text\">\n              {fileItem.progress}%\n            </span>\n          )}\n          <Button\n            type=\"button\"\n            data-style=\"ghost\"\n            onClick={(e) => {\n              e.stopPropagation();\n              onRemove();\n            }}\n          >\n            <CloseIcon className=\"tiptap-button-icon\" />\n          </Button>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport const VideoUploadNode: React.FC<NodeViewProps> = (props) => {\n  const { accept, limit, maxSize } = props.node.attrs;\n  const inputRef = React.useRef<HTMLInputElement>(null);\n  const extension = props.extension;\n  const editor = props.editor;\n  const [isOpen, setIsOpen] = React.useState(false);\n  const [activeTab, setActiveTab] = React.useState<TabType>('upload');\n  const [urlInput, setUrlInput] = React.useState('');\n  const [isDragging, setIsDragging] = React.useState(false);\n\n  const uploadOptions: UploadOptions = {\n    maxSize,\n    limit,\n    accept,\n    upload: extension.options.upload,\n    onSuccess: extension.options.onSuccess,\n    onError: extension.options.onError,\n  };\n\n  const { fileItems, uploadFiles, removeFileItem, clearAllFiles } =\n    useFileUpload(uploadOptions);\n\n  const handleUpload = async (files: File[]) => {\n    const results = await uploadFiles(files);\n\n    if (results.length > 0) {\n      const pos = props.getPos();\n\n      if (isValidPosition(pos)) {\n        const videoNodes = results.map((result, index) => {\n          const filename =\n            files[index]?.name.replace(/\\.[^/.]+$/, '') || 'unknown';\n          return {\n            type: extension.options.type,\n            attrs: {\n              src: result.url,\n              alt: filename,\n              title: filename,\n            },\n          };\n        });\n\n        props.editor\n          .chain()\n          .focus()\n          .deleteRange({ from: pos, to: pos + props.node.nodeSize })\n          .insertContentAt(pos, videoNodes)\n          .run();\n\n        focusNextNode(props.editor);\n      }\n    }\n  };\n\n  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const files = e.target.files;\n    if (!files || files.length === 0) {\n      extension.options.onError?.(new Error('No file selected'));\n      return;\n    }\n    handleUpload(Array.from(files));\n  };\n\n  const handleDragOver = (e: React.DragEvent) => {\n    e.preventDefault();\n    setIsDragging(true);\n  };\n\n  const handleDragLeave = (e: React.DragEvent) => {\n    e.preventDefault();\n    setIsDragging(false);\n  };\n\n  const handleDrop = (e: React.DragEvent) => {\n    e.preventDefault();\n    setIsDragging(false);\n    const files = Array.from(e.dataTransfer.files);\n    if (files.length > 0) {\n      handleUpload(files);\n    }\n  };\n\n  const handleUrlSubmit = () => {\n    if (urlInput) {\n      const pos = props.getPos();\n\n      if (isValidPosition(pos)) {\n        const videoNode = {\n          type: extension.options.type,\n          attrs: {\n            src: urlInput,\n            alt: 'Video',\n            title: 'Video',\n          },\n        };\n\n        props.editor\n          .chain()\n          .focus()\n          .deleteRange({ from: pos, to: pos + props.node.nodeSize })\n          .insertContentAt(pos, videoNode)\n          .run();\n\n        focusNextNode(props.editor);\n      }\n\n      setUrlInput('');\n      setIsOpen(false);\n    }\n  };\n\n  const handleClick = () => {\n    if (fileItems.length === 0 && !isOpen) {\n      setIsOpen(true);\n    }\n  };\n\n  const hasFiles = fileItems.length > 0;\n\n  return (\n    <NodeViewWrapper\n      contentEditable={false}\n      className=\"tiptap-image-upload\"\n      tabIndex={0}\n    >\n      {!hasFiles && (\n        <div className=\"my-1 w-full\">\n          <button\n            onMouseDown={(e) => {\n              e.preventDefault();\n              e.stopPropagation();\n            }}\n            onClick={(e) => {\n              e.preventDefault();\n              e.stopPropagation();\n              editor?.isEditable && setIsOpen(!isOpen);\n            }}\n            className=\"w-full flex items-center gap-3 rounded-lg px-4 py-3 transition-colors cursor-pointer\"\n            style={{\n              backgroundColor: '#242425',\n              color: 'rgba(255, 255, 255, 0.7)',\n            }}\n          >\n            <VideoIcon className=\"h-5 w-5\" />\n            <span className=\"text-sm\">Add a video</span>\n          </button>\n\n          {isOpen && (\n            <div\n              className=\"mt-2 mx-auto max-w-2xl rounded-lg shadow-sm\"\n              style={{\n                backgroundColor: '#161617',\n                border: '1px solid rgba(255, 255, 255, 0.1)',\n                borderRadius: '8px',\n              }}\n            >\n              {/* Tabs */}\n              <div\n                className=\"flex items-center gap-1 px-4 pt-4\"\n                style={{\n                  borderBottom: '1px solid rgba(255, 255, 255, 0.1)',\n                }}\n              >\n                <button\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    setActiveTab('upload');\n                  }}\n                  className={cn(\n                    'relative px-3 py-2 text-sm font-medium transition-colors rounded-t-md',\n                  )}\n                  style={{\n                    color:\n                      activeTab === 'upload'\n                        ? 'white'\n                        : 'rgba(255, 255, 255, 0.7)',\n                  }}\n                >\n                  Upload\n                  {activeTab === 'upload' && (\n                    <div\n                      className=\"absolute bottom-0 left-0 right-0\"\n                      style={{\n                        backgroundColor: 'white',\n                        height: '3px',\n                        borderRadius: '2px',\n                      }}\n                    />\n                  )}\n                </button>\n                <button\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    setActiveTab('embed');\n                  }}\n                  className={cn(\n                    'relative px-3 py-2 text-sm font-medium transition-colors rounded-t-md',\n                  )}\n                  style={{\n                    color:\n                      activeTab === 'embed'\n                        ? 'white'\n                        : 'rgba(255, 255, 255, 0.7)',\n                  }}\n                >\n                  Embed link\n                  {activeTab === 'embed' && (\n                    <div\n                      className=\"absolute bottom-0 left-0 right-0\"\n                      style={{\n                        backgroundColor: 'white',\n                        height: '3px',\n                        borderRadius: '2px',\n                      }}\n                    />\n                  )}\n                </button>\n              </div>\n\n              {/* Tab Content */}\n              <div className=\"p-6\">\n                {activeTab === 'upload' && (\n                  <div className=\"flex flex-col gap-3\">\n                    <input\n                      ref={inputRef}\n                      type=\"file\"\n                      accept={accept}\n                      multiple={limit > 1}\n                      className=\"hidden\"\n                      onChange={handleChange}\n                    />\n                    <button\n                      onClick={() => inputRef.current?.click()}\n                      onDragOver={handleDragOver}\n                      onDragLeave={handleDragLeave}\n                      onDrop={handleDrop}\n                      className={cn(\n                        'flex flex-col items-center justify-center gap-3 w-full rounded-lg border-2 border-dashed px-6 py-12 transition-colors',\n                      )}\n                      style={{\n                        borderColor: isDragging\n                          ? '#007AFF'\n                          : 'rgba(255, 255, 255, 0.7)',\n                        backgroundColor: '#242425',\n                      }}\n                    >\n                      <UploadIcon className=\"h-8 w-8 text-[rgba(255,255,255,0.7)]\" />\n                      <div className=\"text-center\">\n                        <p\n                          className=\"text-sm font-medium\"\n                          style={{ color: 'rgba(255, 255, 255, 0.7)' }}\n                        >\n                          Drag and drop or select a file to upload\n                        </p>\n                      </div>\n                    </button>\n                    <p\n                      className=\"text-xs text-center\"\n                      style={{\n                        color: 'rgba(255, 255, 255, 0.7)',\n                        userSelect: 'none',\n                        WebkitUserSelect: 'none',\n                        MozUserSelect: 'none',\n                        msUserSelect: 'none',\n                        cursor: 'default',\n                      }}\n                      onMouseDown={(e) => e.preventDefault()}\n                    >\n                      The maximum size per file is{' '}\n                      <span style={{ color: 'var(--tnkr-primary)' }}>1gb</span>\n                    </p>\n                  </div>\n                )}\n\n                {activeTab === 'embed' && (\n                  <div className=\"flex flex-col gap-3\">\n                    <Input\n                      placeholder=\"Paste YouTube, Vimeo, or Loom link...\"\n                      value={urlInput}\n                      onChange={(e) => setUrlInput(e.target.value)}\n                      onKeyDown={(e) => e.key === 'Enter' && handleUrlSubmit()}\n                      className=\"h-10\"\n                      style={{\n                        backgroundColor: 'rgba(255, 255, 255, 0.05)',\n                        border: '1px solid rgba(255, 255, 255, 0.1)',\n                        color: 'white',\n                      }}\n                    />\n                    <button\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        handleUrlSubmit();\n                      }}\n                      className=\"w-full h-10 rounded-md text-sm font-medium transition-colors\"\n                      style={{\n                        backgroundColor: 'var(--tnkr-primary)',\n                        color: 'white',\n                      }}\n                    >\n                      Embed video\n                    </button>\n                    <p\n                      className=\"text-xs text-center\"\n                      style={{ color: 'rgba(255, 255, 255, 0.5)' }}\n                    >\n                      Works with YouTube, Vimeo and more\n                    </p>\n                  </div>\n                )}\n              </div>\n            </div>\n          )}\n        </div>\n      )}\n\n      {hasFiles && (\n        <div className=\"tiptap-image-upload-previews\">\n          {fileItems.length > 1 && (\n            <div className=\"tiptap-image-upload-header\">\n              <span>Uploading {fileItems.length} files</span>\n              <Button\n                type=\"button\"\n                data-style=\"ghost\"\n                onClick={(e) => {\n                  e.stopPropagation();\n                  clearAllFiles();\n                }}\n              >\n                Clear All\n              </Button>\n            </div>\n          )}\n          {fileItems.map((fileItem) => (\n            <VideoUploadPreview\n              key={fileItem.id}\n              fileItem={fileItem}\n              onRemove={() => removeFileItem(fileItem.id)}\n            />\n          ))}\n        </div>\n      )}\n      {/* Hidden content required for non-atom node structure */}\n      <NodeViewContent\n        as=\"div\"\n        style={{ display: 'none', pointerEvents: 'none' }}\n      />\n    </NodeViewWrapper>\n  );\n};\n","import { mergeAttributes, Node } from \"@tiptap/react\"\nimport { ReactNodeViewRenderer } from \"@tiptap/react\"\nimport { VideoUploadNode as VideoUploadNodeComponent } from \"@/components/tiptap-node/video-upload-node/video-upload-node\"\nimport type { NodeType } from \"@tiptap/pm/model\"\n\nexport type UploadFunction = (\n  file: File,\n  onProgress?: (event: { progress: number }) => void,\n  abortSignal?: AbortSignal\n) => Promise<string | { src: string; signedUrl?: string }>\n\nexport interface VideoUploadNodeOptions {\n  /**\n   * The type of the node.\n   * @default 'video'\n   */\n  type?: string | NodeType | undefined\n  /**\n   * Acceptable file types for upload.\n   * @default 'video/*'\n   */\n  accept?: string\n  /**\n   * Maximum number of files that can be uploaded.\n   * @default 1\n   */\n  limit?: number\n  /**\n   * Maximum file size in bytes (0 for unlimited).\n   * @default 0\n   */\n  maxSize?: number\n  /**\n   * Function to handle the upload process.\n   */\n  upload?: UploadFunction\n  /**\n   * Callback for upload errors.\n   */\n  onError?: (error: Error) => void\n  /**\n   * Callback for successful uploads.\n   */\n  onSuccess?: (url: string) => void\n  /**\n   * HTML attributes to add to the video element.\n   * @default {}\n   */\n  HTMLAttributes: Record<string, any>\n}\n\ndeclare module \"@tiptap/react\" {\n  interface Commands<ReturnType> {\n    videoUpload: {\n      setVideoUploadNode: (options?: VideoUploadNodeOptions) => ReturnType\n    }\n  }\n}\n\n/**\n * A Tiptap node extension that creates a video upload component.\n */\nexport const VideoUploadNode = Node.create<VideoUploadNodeOptions>({\n  name: \"videoUpload\",\n\n  group: \"block\",\n\n  content: 'paragraph?',\n\n  isolating: true,\n\n  addOptions() {\n    return {\n      type: \"video\",\n      accept: \"video/*\",\n      limit: 1,\n      maxSize: 0,\n      upload: undefined,\n      onError: undefined,\n      onSuccess: undefined,\n      HTMLAttributes: {},\n    }\n  },\n\n  addAttributes() {\n    return {\n      accept: {\n        default: this.options.accept,\n      },\n      limit: {\n        default: this.options.limit,\n      },\n      maxSize: {\n        default: this.options.maxSize,\n      },\n    }\n  },\n\n  parseHTML() {\n    return [{ tag: 'div[data-type=\"video-upload\"]' }]\n  },\n\n  renderHTML({ HTMLAttributes }) {\n    return [\n      \"div\",\n      mergeAttributes({ \"data-type\": \"video-upload\" }, HTMLAttributes),\n    ]\n  },\n\n  addNodeView() {\n    return ReactNodeViewRenderer(VideoUploadNodeComponent)\n  },\n\n  addCommands() {\n    return {\n      setVideoUploadNode:\n        (options) =>\n        ({ commands }) => {\n          return commands.insertContent({\n            type: this.name,\n            attrs: options,\n            content: [\n              {\n                type: 'paragraph',\n              },\n            ],\n          })\n        },\n    }\n  },\n\n  addKeyboardShortcuts() {\n    return {\n      Enter: ({ editor }) => {\n        const { selection } = editor.state\n        const { nodeAfter } = selection.$from\n\n        if (\n          nodeAfter &&\n          nodeAfter.type.name === \"videoUpload\" &&\n          editor.isActive(\"videoUpload\")\n        ) {\n          const nodeEl = editor.view.nodeDOM(selection.$from.pos)\n          if (nodeEl && nodeEl instanceof HTMLElement) {\n            const firstChild = nodeEl.firstChild\n            if (firstChild && firstChild instanceof HTMLElement) {\n              firstChild.click()\n              return true\n            }\n          }\n        }\n        return false\n      },\n    }\n  },\n})\n\nexport default VideoUploadNode\n","\"use client\"\n\nimport type { Editor, NodeViewProps } from \"@tiptap/react\"\nimport { NodeViewWrapper, NodeViewContent } from \"@tiptap/react\"\nimport { useEffect, useRef, useState, useCallback } from \"react\"\nimport * as React from \"react\"\nimport { cn } from \"@/lib/tiptap-utils\"\nimport { Input } from \"@/components/tiptap-ui-primitive/input\"\n\nexport interface ResizeParams {\n  handleUsed: \"left\" | \"right\"\n  initialWidth: number\n  initialClientX: number\n}\n\nexport interface ResizableAnnotationProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  src: string\n  alt?: string\n  caption?: string\n  annotationName?: string\n  editor?: Editor\n  minWidth?: number\n  maxWidth?: number\n  align?: \"left\" | \"center\" | \"right\"\n  initialWidth?: number\n  onImageResize?: (width?: number) => void\n  onCaptionChange?: (caption: string) => void\n  selected?: boolean\n}\n\nexport interface Annotation {\n  id: string\n  name: string\n  description?: string\n  finalSnapshot?: string\n  snapshotUrl?: string\n  flattenedImageUrl?: string\n  createdAt?: number\n  updatedAt?: number\n}\n\nconst AnnotationIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeWidth=\"1\"\n    className={className}\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"M12 2L2 7L12 12L22 7L12 2Z\" />\n    <path d=\"M2 17L12 22L22 17\" />\n    <path d=\"M2 12L12 17L22 12\" />\n  </svg>\n)\n\nconst AddFilledIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <svg\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 32 32\"\n    className={className}\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path fill=\"currentColor\" d=\"M16 2C8.3 2 2 8.3 2 16s6.3 14 14 14 14-6.3 14-14S23.7 2 16 2zm7 15h-6v6h-2v-6H9v-2h6V9h2v6h6v2z\"/>\n  </svg>\n)\n\ninterface AnnotationNodeEmptyStateProps {\n  onAnnotationSelect?: (annotation: Annotation) => void\n  isOpen?: boolean\n  onToggleOpen?: (isOpen: boolean) => void\n  productId?: string\n  organizationId?: string\n}\n\nconst AnnotationNodeEmptyState: React.FC<AnnotationNodeEmptyStateProps> = ({\n  onAnnotationSelect,\n  isOpen: isOpenProp,\n  onToggleOpen,\n  productId,\n  organizationId,\n}) => {\n  const [isOpen, setIsOpen] = useState(isOpenProp || false)\n  const [annotations, setAnnotations] = useState<Annotation[]>([])\n  const [filteredAnnotations, setFilteredAnnotations] = useState<Annotation[]>([])\n  const [searchQuery, setSearchQuery] = useState(\"\")\n  const [loading, setLoading] = useState(false)\n  const [error, setError] = useState<string | null>(null)\n\n  const handleToggleOpen = (newValue: boolean) => {\n    setIsOpen(newValue)\n    onToggleOpen?.(newValue)\n  }\n\n  useEffect(() => {\n    setIsOpen(isOpenProp || false)\n  }, [isOpenProp])\n\n  // Fetch annotations when modal opens\n  useEffect(() => {\n    if (isOpen && productId && organizationId) {\n      const fetchAnnotations = async () => {\n        setLoading(true)\n        setError(null)\n        try {\n          const response = await fetch(\n            `/api/pointers?productId=${productId}&organizationId=${organizationId}`\n          )\n          if (!response.ok) {\n            throw new Error('Failed to fetch annotations')\n          }\n          const data = await response.json()\n          setAnnotations(data.pointers || [])\n          setFilteredAnnotations(data.pointers || [])\n        } catch (err) {\n          console.error('Error fetching annotations:', err)\n          setError('Failed to load annotations')\n        } finally {\n          setLoading(false)\n        }\n      }\n      fetchAnnotations()\n    }\n  }, [isOpen, productId, organizationId])\n\n  // Filter annotations based on search query\n  useEffect(() => {\n    if (!searchQuery.trim()) {\n      setFilteredAnnotations(annotations)\n    } else {\n      const query = searchQuery.toLowerCase()\n      const filtered = annotations.filter(\n        (annotation) =>\n          annotation.name.toLowerCase().includes(query) ||\n          (annotation.description?.toLowerCase().includes(query) ?? false)\n      )\n      setFilteredAnnotations(filtered)\n    }\n  }, [searchQuery, annotations])\n\n  const handleAnnotationClick = (annotation: Annotation) => {\n    onAnnotationSelect?.(annotation)\n    handleToggleOpen(false)\n    setSearchQuery(\"\")\n  }\n\n  const handleNewAnnotation = () => {\n    if (productId) {\n      window.location.href = `/overview/editor/hardware-docs/products/${productId}`\n    }\n  }\n\n  return (\n    <div className=\"my-1 w-full\">\n      {/* Empty State Header */}\n      <button\n        onMouseDown={(e) => {\n          e.preventDefault()\n          e.stopPropagation()\n        }}\n        onClick={(e) => {\n          e.preventDefault()\n          e.stopPropagation()\n          handleToggleOpen(!isOpen)\n        }}\n        className=\"w-full flex items-center gap-3 rounded-lg px-4 py-3 transition-colors cursor-pointer\"\n        style={{\n          backgroundColor: '#242425',\n          color: 'rgba(255, 255, 255, 0.7)',\n        }}\n      >\n        <AnnotationIcon className=\"h-5 w-5\" />\n        <span className=\"text-sm\">Add an annotation</span>\n      </button>\n\n      {isOpen && (\n        <div\n          className=\"mt-4 overflow-hidden ml-auto\"\n          style={{\n            backgroundColor: '#161617',\n            border: '1px solid rgba(255, 255, 255, 0.08)',\n            borderRadius: '8px',\n            width: '60%',\n          }}\n        >\n          {/* Show message if no productId */}\n          {!productId || !organizationId ? (\n            <div className=\"p-8 text-center\">\n              <p className=\"text-sm mb-2\" style={{ color: 'rgba(255, 255, 255, 0.7)' }}>\n                Annotations are not available\n              </p>\n              <p className=\"text-xs\" style={{ color: 'rgba(255, 255, 255, 0.5)' }}>\n                This feature requires a hardware product to be associated with this document.\n              </p>\n            </div>\n          ) : (\n            <>\n              {/* Header with Title and New Annotation Button */}\n              <div\n                className=\"px-6 py-4 flex items-center justify-between\"\n                style={{\n                  borderBottom: '1px solid #242425',\n                }}\n              >\n                <h3 className=\"text-base font-normal text-white/50\">\n                  Annotations\n                </h3>\n                <button\n                  onClick={handleNewAnnotation}\n                  className=\"px-3 py-1.5 text-xs font-normal transition-colors flex items-center gap-1.5 flex-shrink-0\"\n                  style={{\n                    border: '1px solid #313133',\n                    borderRadius: '8px',\n                    color: 'var(--tnkr-primary)',\n                  }}\n                  onMouseEnter={(e) => {\n                    e.currentTarget.style.borderColor = 'var(--tnkr-primary)'\n                    e.currentTarget.style.color = 'var(--tnkr-primary)'\n                  }}\n                  onMouseLeave={(e) => {\n                    e.currentTarget.style.borderColor = '#313133'\n                    e.currentTarget.style.color = 'var(--tnkr-primary)'\n                  }}\n                >\n                  <AddFilledIcon className=\"h-4 w-4 flex-shrink-0\" />\n                  <span className=\"whitespace-nowrap\">New Annotation</span>\n                </button>\n              </div>\n\n              {/* Search Bar */}\n              <div className=\"px-6 py-4\">\n                <Input\n                  placeholder=\"Search for an annotation\"\n                  value={searchQuery}\n                  onChange={(e) => setSearchQuery(e.target.value)}\n                  className=\"w-full h-10 text-sm text-white/50\"\n                  style={{\n                    backgroundColor: 'transparent',\n                    border: '1px solid #313133',\n                    borderRadius: '8px',\n                    paddingLeft: '12px',\n                  }}\n                />\n              </div>\n\n          {/* Annotations List */}\n          <div\n            className=\"max-h-[500px] overflow-y-auto px-6 pb-6\"\n          >\n            {loading && (\n              <div className=\"py-12 text-center text-sm\" style={{ color: 'rgba(255, 255, 255, 0.5)' }}>\n                Loading annotations...\n              </div>\n            )}\n\n            {error && (\n              <div className=\"py-12 text-center text-sm\" style={{ color: 'var(--tnkr-primary)' }}>\n                {error}\n              </div>\n            )}\n\n            {!loading && !error && filteredAnnotations.length === 0 && (\n              <div className=\"py-12 text-center\">\n                {searchQuery ? (\n                  <>\n                    <p className=\"text-sm mb-2\" style={{ color: 'rgba(255, 255, 255, 0.7)' }}>\n                      No annotations found\n                    </p>\n                    <p className=\"text-xs\" style={{ color: 'rgba(255, 255, 255, 0.5)' }}>\n                      Try a different search term\n                    </p>\n                  </>\n                ) : (\n                  <>\n                    <p className=\"text-sm mb-3\" style={{ color: 'rgba(255, 255, 255, 0.7)' }}>\n                      No annotations yet\n                    </p>\n                    <p className=\"text-xs mb-6\" style={{ color: 'rgba(255, 255, 255, 0.5)' }}>\n                      Annotations you create in the hardware editor will appear here.\n                    </p>\n                    <button\n                      onClick={handleNewAnnotation}\n                      className=\"px-4 py-2 text-sm font-normal transition-colors flex items-center gap-2 mx-auto\"\n                      style={{\n                        border: '1px solid #313133',\n                        borderRadius: '8px',\n                        color: 'var(--tnkr-primary)',\n                      }}\n                      onMouseEnter={(e) => {\n                        e.currentTarget.style.borderColor = 'var(--tnkr-primary)'\n                        e.currentTarget.style.color = 'var(--tnkr-primary)'\n                      }}\n                      onMouseLeave={(e) => {\n                        e.currentTarget.style.borderColor = '#313133'\n                        e.currentTarget.style.color = 'var(--tnkr-primary)'\n                      }}\n                    >\n                      <AddFilledIcon className=\"h-4 w-4 flex-shrink-0\" />\n                      <span>New Annotation</span>\n                    </button>\n                  </>\n                )}\n              </div>\n            )}\n\n            {!loading && !error && filteredAnnotations.length > 0 && (\n              <div className=\"space-y-2\">\n                {filteredAnnotations.map((annotation) => (\n                  <button\n                    key={annotation.id}\n                    onClick={() => handleAnnotationClick(annotation)}\n                    className=\"w-full flex items-center gap-3 p-3 rounded transition-colors cursor-pointer text-left\"\n                    style={{\n                      backgroundColor: 'transparent',\n                      border: 'none',\n                    }}\n                    onMouseEnter={(e) => {\n                      e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.03)'\n                    }}\n                    onMouseLeave={(e) => {\n                      e.currentTarget.style.backgroundColor = 'transparent'\n                    }}\n                  >\n                    {/* Thumbnail */}\n                    {(annotation.finalSnapshot || annotation.flattenedImageUrl || annotation.snapshotUrl) && (\n                      <div\n                        className=\"flex-shrink-0 overflow-hidden\"\n                        style={{\n                          width: '62px',\n                          height: '62px',\n                          backgroundColor: 'rgba(255, 255, 255, 0.05)',\n                          border: '2px solid #313133',\n                          borderRadius: '8px',\n                        }}\n                      >\n                        <img\n                          src={annotation.finalSnapshot || annotation.flattenedImageUrl || annotation.snapshotUrl}\n                          alt={annotation.name}\n                          className=\"w-full h-full object-cover\"\n                        />\n                      </div>\n                    )}\n\n                    {/* Info */}\n                    <div className=\"flex-1 min-w-0\">\n                      <h4 className=\"text-base font-normal mb-1 text-white/50\">\n                        {annotation.name}\n                      </h4>\n                      {annotation.description && (\n                        <p className=\"text-sm line-clamp-2 text-white/50\">\n                          {annotation.description}\n                        </p>\n                      )}\n                    </div>\n                  </button>\n                ))}\n              </div>\n            )}\n          </div>\n            </>\n          )}\n        </div>\n      )}\n    </div>\n  )\n}\n\nexport function AnnotationNodeView(props: NodeViewProps) {\n  const { editor, node, updateAttributes, selected } = props\n\n  const annotationId = node.attrs.annotationId\n  const finalSnapshot = node.attrs.finalSnapshot\n  const annotationName = node.attrs.annotationName || \"\"\n  const caption = node.attrs.caption || \"\"\n  const isOpen = node.attrs.isOpen || false\n\n  const handleAnnotationSelect = (annotation: Annotation) => {\n    updateAttributes({\n      annotationId: annotation.id,\n      finalSnapshot: annotation.finalSnapshot || annotation.flattenedImageUrl || annotation.snapshotUrl,\n      annotationName: annotation.name,\n    })\n  }\n\n  const handleCaptionChange = (caption: string) => {\n    updateAttributes({ caption })\n  }\n\n  const handleToggleOpen = (isOpen: boolean) => {\n    updateAttributes({ isOpen })\n  }\n\n  // Get productId and organizationId from editor DOM attributes\n  const editorElement = editor?.view?.dom as HTMLElement\n  const productId = editorElement?.getAttribute('data-product-id') || undefined\n  const organizationId = editorElement?.getAttribute('data-organization-id') || undefined\n\n  // Only show empty state in edit mode, similar to image node\n  if (!finalSnapshot) {\n    // In view mode (not editable), don't render anything if no annotation is selected\n    if (!editor?.isEditable) {\n      return null\n    }\n\n    // In edit mode, show the annotation selector\n    return (\n      <NodeViewWrapper contentEditable={false}>\n        <AnnotationNodeEmptyState\n          onAnnotationSelect={handleAnnotationSelect}\n          isOpen={isOpen}\n          onToggleOpen={handleToggleOpen}\n          productId={productId}\n          organizationId={organizationId}\n        />\n      </NodeViewWrapper>\n    )\n  }\n\n  return (\n    <ResizableAnnotation\n      src={finalSnapshot}\n      alt={annotationName}\n      caption={caption}\n      annotationName={annotationName}\n      editor={editor}\n      align={node.attrs[\"data-align\"]}\n      initialWidth={node.attrs.width}\n      onImageResize={(width) => updateAttributes({ width })}\n      onCaptionChange={handleCaptionChange}\n      selected={selected}\n    />\n  )\n}\n\nexport const ResizableAnnotation: React.FC<ResizableAnnotationProps> = ({\n  src,\n  alt = \"\",\n  caption = \"\",\n  annotationName = \"\",\n  editor,\n  minWidth = 96,\n  maxWidth = 800,\n  align = \"left\",\n  initialWidth,\n  onImageResize,\n  onCaptionChange,\n  selected = false,\n}) => {\n  const [resizeParams, setResizeParams] = useState<ResizeParams | undefined>(\n    undefined\n  )\n  const [width, setWidth] = useState<number | undefined>(initialWidth)\n  const [showHandles, setShowHandles] = useState<boolean>(false)\n\n  const wrapperRef = useRef<HTMLDivElement>(null)\n  const leftResizeHandleRef = useRef<HTMLDivElement>(null)\n  const rightResizeHandleRef = useRef<HTMLDivElement>(null)\n  const imageRef = useRef<HTMLImageElement>(null)\n\n  const windowMouseMoveHandler = React.useCallback(\n    (event: MouseEvent): void => {\n      if (!resizeParams || !editor) {\n        return\n      }\n\n      let newWidth: number\n\n      if (align === \"center\") {\n        if (resizeParams.handleUsed === \"left\") {\n          newWidth =\n            resizeParams.initialWidth +\n            (resizeParams.initialClientX - event.clientX) * 2\n        } else {\n          newWidth =\n            resizeParams.initialWidth +\n            (event.clientX - resizeParams.initialClientX) * 2\n        }\n      } else {\n        if (resizeParams.handleUsed === \"left\") {\n          newWidth =\n            resizeParams.initialWidth +\n            resizeParams.initialClientX -\n            event.clientX\n        } else {\n          newWidth =\n            resizeParams.initialWidth +\n            event.clientX -\n            resizeParams.initialClientX\n        }\n      }\n\n      const effectiveMinWidth = minWidth\n      const effectiveMaxWidth =\n        editor.view.dom?.firstElementChild?.clientWidth || maxWidth\n\n      const newCalculatedWidth = Math.min(\n        Math.max(newWidth, effectiveMinWidth),\n        effectiveMaxWidth\n      )\n\n      setWidth(newCalculatedWidth)\n      if (wrapperRef.current) {\n        wrapperRef.current.style.width = `${newCalculatedWidth}px`\n      }\n    },\n    [editor, align, maxWidth, minWidth, resizeParams]\n  )\n\n  const windowMouseUpHandler = React.useCallback(\n    (event: MouseEvent): void => {\n      if (!editor) {\n        return\n      }\n\n      if (\n        (!event.target ||\n          !wrapperRef.current?.contains(event.target as Node) ||\n          !editor.isEditable) &&\n        showHandles\n      ) {\n        setShowHandles(false)\n      }\n\n      if (!resizeParams) {\n        return\n      }\n\n      setResizeParams(undefined)\n\n      if (onImageResize) {\n        onImageResize(width)\n      }\n    },\n    [editor, showHandles, resizeParams, onImageResize, width]\n  )\n\n  const leftResizeHandleMouseDownHandler = (\n    event: React.MouseEvent<HTMLDivElement>\n  ): void => {\n    event.preventDefault()\n\n    setResizeParams({\n      handleUsed: \"left\",\n      initialWidth: wrapperRef.current?.clientWidth || Number.MAX_VALUE,\n      initialClientX: event.clientX,\n    })\n  }\n\n  const rightResizeHandleMouseDownHandler = (\n    event: React.MouseEvent<HTMLDivElement>\n  ): void => {\n    event.preventDefault()\n\n    setResizeParams({\n      handleUsed: \"right\",\n      initialWidth: wrapperRef.current?.clientWidth || Number.MAX_VALUE,\n      initialClientX: event.clientX,\n    })\n  }\n\n  const wrapperMouseEnterHandler = (): void => {\n    if (editor && editor.isEditable) {\n      setShowHandles(true)\n    }\n  }\n\n  const wrapperMouseLeaveHandler = (\n    event: React.MouseEvent<HTMLDivElement>\n  ): void => {\n    if (\n      event.relatedTarget === leftResizeHandleRef.current ||\n      event.relatedTarget === rightResizeHandleRef.current\n    ) {\n      return\n    }\n\n    if (resizeParams) {\n      return\n    }\n\n    if (editor && editor.isEditable) {\n      setShowHandles(false)\n    }\n  }\n\n  useEffect(() => {\n    window.addEventListener(\"mousemove\", windowMouseMoveHandler)\n    window.addEventListener(\"mouseup\", windowMouseUpHandler)\n\n    return () => {\n      window.removeEventListener(\"mousemove\", windowMouseMoveHandler)\n      window.removeEventListener(\"mouseup\", windowMouseUpHandler)\n    }\n  }, [windowMouseMoveHandler, windowMouseUpHandler])\n\n  // Reset showHandles when editor becomes read-only\n  useEffect(() => {\n    if (editor && !editor.isEditable) {\n      setShowHandles(false)\n    }\n  }, [editor, editor?.isEditable])\n\n  // Don't show selection in read-only mode\n  const showSelection = selected && editor && editor.isEditable\n\n  return (\n    <NodeViewWrapper\n      as=\"div\"\n      onMouseEnter={wrapperMouseEnterHandler}\n      onMouseLeave={wrapperMouseLeaveHandler}\n      data-align={align}\n      data-width={width}\n      className={`tiptap-image ${showSelection ? 'selected' : ''}`}\n      contentEditable={false}\n      data-drag-handle=\"\"\n    >\n      <div\n        className=\"my-2 w-full\"\n        style={{\n          pointerEvents: editor && editor.isEditable ? 'auto' : 'none',\n        }}\n      >\n        <div\n          ref={wrapperRef}\n          className=\"tiptap-image-container\"\n          style={{\n            width: width ? `${width}px` : \"fit-content\",\n          }}\n        >\n          <div className=\"tiptap-image-content\">\n            <img\n              ref={imageRef}\n              src={src}\n              alt={alt}\n              className=\"tiptap-image-img\"\n              contentEditable={false}\n              draggable={false}\n            />\n\n            {showHandles && editor && editor.isEditable && (\n              <>\n                <div\n                  ref={leftResizeHandleRef}\n                  className=\"tiptap-image-handle tiptap-image-handle-left\"\n                  onMouseDown={leftResizeHandleMouseDownHandler}\n                />\n                <div\n                  ref={rightResizeHandleRef}\n                  className=\"tiptap-image-handle tiptap-image-handle-right\"\n                  onMouseDown={rightResizeHandleMouseDownHandler}\n                />\n              </>\n            )}\n          </div>\n        </div>\n\n        {/* Caption - Only show in edit mode or when there's a caption in view mode */}\n        {(editor?.isEditable || caption) && (\n          <div className=\"mt-2 px-2\">\n            <Input\n              placeholder=\"Add a caption...\"\n              value={caption}\n              onChange={(e) => onCaptionChange?.(e.target.value)}\n              disabled={!editor?.isEditable}\n              className=\"border-0 bg-transparent px-0 text-sm placeholder:opacity-50\"\n              style={{\n                color: 'rgba(255, 255, 255, 0.7)',\n              }}\n            />\n          </div>\n        )}\n      </div>\n      {/* Hidden content required for non-atom node structure */}\n      <NodeViewContent as=\"div\" style={{ display: 'none', pointerEvents: 'none' }} />\n    </NodeViewWrapper>\n  )\n}\n","import { Node } from \"@tiptap/core\"\nimport { ReactNodeViewRenderer } from \"@tiptap/react\"\nimport { AnnotationNodeView } from \"./annotation-node-view\"\n\nexport interface AnnotationOptions {\n  HTMLAttributes: Record<string, any>\n}\n\ndeclare module \"@tiptap/core\" {\n  interface Commands<ReturnType> {\n    annotation: {\n      setAnnotation: (options: {\n        annotationId?: string\n        finalSnapshot?: string\n        annotationName?: string\n        caption?: string\n      }) => ReturnType\n    }\n  }\n}\n\nexport const Annotation = Node.create<AnnotationOptions>({\n  name: \"annotation\",\n  group: \"block\",\n\n  content: 'paragraph?',\n\n  isolating: true,\n\n  addOptions() {\n    return {\n      HTMLAttributes: {},\n    }\n  },\n\n  addAttributes() {\n    return {\n      annotationId: {\n        default: null,\n        parseHTML: element => element.getAttribute('data-annotation-id'),\n        renderHTML: attributes => {\n          if (!attributes.annotationId) {\n            return {}\n          }\n          return {\n            'data-annotation-id': attributes.annotationId,\n          }\n        },\n      },\n      finalSnapshot: {\n        default: null,\n        parseHTML: element => element.getAttribute('data-final-snapshot'),\n        renderHTML: attributes => {\n          if (!attributes.finalSnapshot) {\n            return {}\n          }\n          return {\n            'data-final-snapshot': attributes.finalSnapshot,\n          }\n        },\n      },\n      annotationName: {\n        default: null,\n        parseHTML: element => element.getAttribute('data-annotation-name'),\n        renderHTML: attributes => {\n          if (!attributes.annotationName) {\n            return {}\n          }\n          return {\n            'data-annotation-name': attributes.annotationName,\n          }\n        },\n      },\n      caption: {\n        default: null,\n        parseHTML: element => element.getAttribute('data-caption'),\n        renderHTML: attributes => {\n          if (!attributes.caption) {\n            return {}\n          }\n          return {\n            'data-caption': attributes.caption,\n          }\n        },\n      },\n      width: {\n        default: null,\n        parseHTML: element => element.getAttribute('data-width'),\n        renderHTML: attributes => {\n          if (!attributes.width) {\n            return {}\n          }\n          return {\n            'data-width': attributes.width,\n          }\n        },\n      },\n      \"data-align\": {\n        default: null,\n      },\n      isOpen: {\n        default: false,\n        parseHTML: element => element.getAttribute('data-is-open') === 'true',\n        renderHTML: attributes => {\n          if (!attributes.isOpen) {\n            return {}\n          }\n          return {\n            'data-is-open': attributes.isOpen.toString(),\n          }\n        },\n      },\n    }\n  },\n\n  parseHTML() {\n    return [\n      {\n        tag: 'div[data-type=\"annotation\"]',\n      },\n    ]\n  },\n\n  renderHTML({ HTMLAttributes }) {\n    return ['div', { 'data-type': 'annotation', ...HTMLAttributes }]\n  },\n\n  addCommands() {\n    return {\n      setAnnotation:\n        (options) =>\n        ({ commands }) => {\n          return commands.insertContent({\n            type: this.name,\n            attrs: options,\n            content: [\n              {\n                type: 'paragraph',\n              },\n            ],\n          })\n        },\n    }\n  },\n\n  addNodeView() {\n    return ReactNodeViewRenderer(AnnotationNodeView)\n  },\n})\n\nexport default Annotation\n","// Utility functions used by shadcn components\nimport { twMerge } from 'tailwind-merge';\n\ntype ClassValue = string | number | boolean | undefined | null | { [key: string]: boolean } | ClassValue[];\n\n// Simple clsx replacement\nfunction clsx(...inputs: ClassValue[]): string {\n  return inputs\n    .flatMap((input) => {\n      if (typeof input === 'string') return input;\n      if (typeof input === 'number') return String(input);\n      if (typeof input === 'boolean') return input ? '' : undefined;\n      if (input === null || input === undefined) return undefined;\n      if (typeof input === 'object') {\n        return Object.entries(input)\n          .filter(([, value]) => Boolean(value))\n          .map(([key]) => key);\n      }\n      return undefined;\n    })\n    .filter(Boolean)\n    .join(' ');\n}\n\nexport function cn(...inputs: ClassValue[]) {\n    return twMerge(clsx(...inputs));\n}\n","import React from 'react'\nimport { NodeViewWrapper, NodeViewProps } from '@tiptap/react'\nimport { Icon } from '@iconify/react'\nimport { cn } from '../../../lib/utils'\n\nexport const UtilityCardNodeView: React.FC<NodeViewProps> = ({\n  node,\n  extension,\n}) => {\n  const { onUtilityCardClick, showUtilityCard = true, className: optionClassName, title = 'Add a hardware project', icon = 'mage:box-3d-plus', description = 'Upload your step file to get started' } = extension.options\n  const { className: nodeClassName } = node.attrs\n\n  if (!showUtilityCard) {\n    return <NodeViewWrapper />\n  }\n\n  return (\n    <NodeViewWrapper>\n      <div className=\"flex justify-start my-2\">\n        <div\n          className={cn(\n            'rounded-3xl border border-[#313133] max-w-sm transition-transform duration-300 hover:scale-[1.02] cursor-pointer',\n            optionClassName,\n            nodeClassName,\n          )}\n          onClick={onUtilityCardClick}\n        >\n          <div className='px-8 py-4 relative flex flex-col items-center h-full'>\n            <div className='flex items-center justify-center py-2'>\n              <div\n                className='cursor-pointer w-12 h-12 rounded-full flex items-center justify-center mb-3 transition-colors hover:opacity-80'\n                style={{ backgroundColor: 'var(--tnkr-primary)' }}\n              >\n                <Icon icon={icon} width={24} height={24} className=\"text-white\" />\n              </div>\n            </div>\n            <div className='flex flex-col items-center gap-1'>\n              <span className='text-white text-base'>\n                {title}\n              </span>\n              <span className='text-white/60 mb-2 text-sm'>\n                {description}\n              </span>\n            </div>\n          </div>\n        </div>\n      </div>\n    </NodeViewWrapper>\n  )\n}","import { Node, mergeAttributes } from '@tiptap/core'\nimport { ReactNodeViewRenderer } from '@tiptap/react'\nimport { UtilityCardNodeView } from './utility-card-node-view'\n\nexport interface UtilityCardOptions {\n  onUtilityCardClick?: () => void;\n  showUtilityCard?: boolean;\n  position?: 'top' | 'bottom' | 'inline';\n  className?: string;\n}\n\ndeclare module '@tiptap/core' {\n  interface Commands<ReturnType> {\n    utilityCard: {\n      /**\n       * Insert a utility card\n       */\n      insertUtilityCard: () => ReturnType\n    }\n  }\n}\n\nexport const UtilityCard = Node.create<UtilityCardOptions>({\n  name: 'utilityCard',\n\n  addOptions() {\n    return {\n      onUtilityCardClick: undefined,\n      showUtilityCard: true,\n      position: 'inline',\n      className: '',\n    }\n  },\n\n  group: 'block',\n\n  atom: true,\n\n  parseHTML() {\n    return [\n      {\n        tag: 'div[data-type=\"utility-card\"]',\n      },\n    ]\n  },\n\n  renderHTML({ HTMLAttributes }) {\n    return ['div', mergeAttributes(HTMLAttributes, { 'data-type': 'utility-card' })]\n  },\n\n  addNodeView() {\n    return ReactNodeViewRenderer(UtilityCardNodeView)\n  },\n\n  addCommands() {\n    return {\n      insertUtilityCard:\n        () =>\n        ({ commands }) => {\n          return commands.insertContent({\n            type: this.name,\n          })\n        },\n    }\n  },\n\n  addKeyboardShortcuts() {\n    return {\n      'Mod-Shift-u': () => this.editor.commands.insertUtilityCard(),\n    }\n  },\n})","import * as React from \"react\"\n\nexport const PlusIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M13 5C13 4.44772 12.5523 4 12 4C11.4477 4 11 4.44772 11 5V11H5C4.44772 11 4 11.4477 4 12C4 12.5523 4.44772 13 5 13H11V19C11 19.5523 11.4477 20 12 20C12.5523 20 13 19.5523 13 19V13H19C19.5523 13 20 12.5523 20 12C20 11.4477 19.5523 11 19 11H13V5Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nPlusIcon.displayName = \"PlusIcon\"\n","import * as React from \"react\"\n\nexport const XIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M18.7071 6.70711C19.0976 6.31658 19.0976 5.68342 18.7071 5.29289C18.3166 4.90237 17.6834 4.90237 17.2929 5.29289L12 10.5858L6.70711 5.29289C6.31658 4.90237 5.68342 4.90237 5.29289 5.29289C4.90237 5.68342 4.90237 6.31658 5.29289 6.70711L10.5858 12L5.29289 17.2929C4.90237 17.6834 4.90237 18.3166 5.29289 18.7071C5.68342 19.0976 6.31658 19.0976 6.70711 18.7071L12 13.4142L17.2929 18.7071C17.6834 19.0976 18.3166 19.0976 18.7071 18.7071C19.0976 18.3166 19.0976 17.6834 18.7071 17.2929L13.4142 12L18.7071 6.70711Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nXIcon.displayName = \"XIcon\"\n","import React, { createContext, useContext, ReactNode } from 'react';\nimport { ProductDataState } from '@/hooks/useProductData';\n\ninterface ProductDataContextType {\n  productData: ProductDataState | null;\n}\n\nconst ProductDataContext = createContext<ProductDataContextType>({\n  productData: null,\n});\n\nexport const useProductDataContext = () => {\n  return useContext(ProductDataContext);\n};\n\ninterface ProductDataProviderProps {\n  children: ReactNode;\n  productData: ProductDataState | null;\n}\n\nexport const ProductDataProvider: React.FC<ProductDataProviderProps> = ({\n  children,\n  productData,\n}) => {\n  return (\n    <ProductDataContext.Provider value={{ productData }}>\n      {children}\n    </ProductDataContext.Provider>\n  );\n};","import { NodeViewWrapper, NodeViewContent, NodeViewProps } from '@tiptap/react';\nimport React, {\n  useState,\n  useCallback,\n  useMemo,\n  lazy,\n  Suspense,\n  useRef,\n  useEffect,\n} from 'react';\nimport { PlusIcon } from '../../tiptap-icons/plus-icon';\nimport { XIcon } from '../../tiptap-icons/x-icon';\nimport { TabData } from './tabs-node-extension';\nimport { useProductDataContext } from '@/contexts/ProductDataContext';\n\n// Lazy load TnkrEditor to avoid circular dependencies\nconst TnkrEditor = lazy(() =>\n  import('../../../TnkrEditor').then((module) => ({\n    default: module.TnkrEditor,\n  })),\n);\n\nexport function TabsNodeView({\n  node,\n  updateAttributes,\n  editor,\n}: NodeViewProps) {\n  const tabs: TabData[] = node.attrs.tabs || [];\n  const activeTabId: string = node.attrs.activeTab || tabs[0]?.id;\n  const [editingTabId, setEditingTabId] = useState<string | null>(null);\n  const [localTabTitle, setLocalTabTitle] = useState<string>('');\n  const editingInputRef = useRef<HTMLInputElement | null>(null);\n  const previousEditingTabId = useRef<string | null>(null);\n  const hasSelectedText = useRef<boolean>(false);\n\n  // Check if editor is in readonly mode\n  const isEditable = editor.isEditable;\n\n  // Get productId and organizationId from parent editor\n  const editorAttrs = (editor as any)?.options?.editorProps?.attributes || {};\n  const productId = editorAttrs['data-product-id'] || null;\n  const organizationId = editorAttrs['data-organization-id'] || null;\n\n  // Get productData from context to pass to nested editor\n  const { productData } = useProductDataContext();\n\n  const activeTab = useMemo(\n    () => tabs.find((tab) => tab.id === activeTabId),\n    [tabs, activeTabId],\n  );\n\n  // Only focus when we first start editing a tab (editingTabId changes from null to a value)\n  useEffect(() => {\n    if (\n      editingTabId &&\n      editingTabId !== previousEditingTabId.current &&\n      editingInputRef.current\n    ) {\n      hasSelectedText.current = false; // Reset selection flag for new editing session\n      editingInputRef.current.focus();\n      previousEditingTabId.current = editingTabId;\n    } else if (!editingTabId) {\n      previousEditingTabId.current = null;\n      hasSelectedText.current = false;\n    }\n  }, [editingTabId]);\n\n  const handleTabClick = useCallback(\n    (e: React.MouseEvent, tabId: string) => {\n      e.preventDefault();\n      e.stopPropagation();\n      if (editingTabId === tabId) return;\n      updateAttributes({ activeTab: tabId });\n    },\n    [editingTabId, updateAttributes],\n  );\n\n  const handleTabDoubleClick = useCallback(\n    (e: React.MouseEvent, tabId: string) => {\n      e.preventDefault();\n      e.stopPropagation();\n      if (!isEditable) return;\n      const tab = tabs.find((t) => t.id === tabId);\n      if (tab) {\n        setLocalTabTitle(tab.title);\n        setEditingTabId(tabId);\n      }\n    },\n    [isEditable, tabs],\n  );\n\n  const handleAddTab = useCallback(() => {\n    const newTabId = `tab-${Date.now()}`;\n    const newTab: TabData = {\n      id: newTabId,\n      title: `Tab ${tabs.length + 1}`,\n      content: {\n        type: 'doc',\n        content: [\n          {\n            type: 'paragraph',\n            content: [],\n          },\n        ],\n      },\n    };\n\n    const updatedTabs = [...tabs, newTab];\n    updateAttributes({\n      tabs: updatedTabs,\n      activeTab: newTabId,\n    });\n  }, [tabs, updateAttributes]);\n\n  const handleRemoveTab = useCallback(\n    (tabId: string, e: React.MouseEvent) => {\n      e.stopPropagation();\n\n      if (tabs.length <= 1) return;\n\n      const updatedTabs = tabs.filter((tab) => tab.id !== tabId);\n      let newActiveTab = activeTabId;\n\n      if (activeTabId === tabId) {\n        const currentIndex = tabs.findIndex((tab) => tab.id === tabId);\n        const newIndex = currentIndex > 0 ? currentIndex - 1 : 0;\n        newActiveTab = updatedTabs[newIndex]?.id || updatedTabs[0]?.id;\n      }\n\n      updateAttributes({\n        tabs: updatedTabs,\n        activeTab: newActiveTab,\n      });\n    },\n    [tabs, activeTabId, updateAttributes],\n  );\n\n  const handleTabTitleChange = useCallback((newTitle: string) => {\n    setLocalTabTitle(newTitle);\n  }, []);\n\n  const handleTabTitleKeyDown = useCallback(\n    (e: React.KeyboardEvent, tabId: string) => {\n      if (e.key === 'Enter' || e.key === 'Escape') {\n        e.preventDefault();\n        // Save the changes on Enter\n        if (e.key === 'Enter' && localTabTitle.trim()) {\n          const updatedTabs = tabs.map((tab) =>\n            tab.id === tabId ? { ...tab, title: localTabTitle } : tab,\n          );\n          updateAttributes({ tabs: updatedTabs });\n        }\n        setEditingTabId(null);\n      }\n    },\n    [localTabTitle, tabs, updateAttributes],\n  );\n\n  const handleTabTitleBlur = useCallback(\n    (tabId: string) => {\n      // Save the changes on blur\n      if (localTabTitle.trim()) {\n        const updatedTabs = tabs.map((tab) =>\n          tab.id === tabId ? { ...tab, title: localTabTitle } : tab,\n        );\n        updateAttributes({ tabs: updatedTabs });\n      }\n      setEditingTabId(null);\n    },\n    [localTabTitle, tabs, updateAttributes],\n  );\n\n  const handleTabContentChange = useCallback(\n    (tabId: string, newContent: any) => {\n      // Only update if content actually changed\n      const tab = tabs.find((t) => t.id === tabId);\n      if (tab && JSON.stringify(tab.content) !== JSON.stringify(newContent)) {\n        const updatedTabs = tabs.map((t) =>\n          t.id === tabId ? { ...t, content: newContent } : t,\n        );\n        updateAttributes({ tabs: updatedTabs });\n      }\n    },\n    [tabs, updateAttributes],\n  );\n\n  return (\n    <NodeViewWrapper\n      style={{ position: 'relative',zIndex: 20, PointerEvents: 'auto' }}\n      contentEditable={false}\n    >\n      {/* Tab Headers */}\n      <div className=\"tiptap-tabs\">\n        <div className=\"tiptap-tabs-header\">\n          <div className=\"tiptap-tabs-nav-container\">\n            <div className=\"tiptap-tabs-nav\">\n              {tabs.map((tab) => (\n                <div\n                  key={tab.id}\n                  className={`tiptap-tab ${\n                    tab.id === activeTabId ? 'tiptap-tab-active' : ''\n                  } ${editingTabId === tab.id ? 'tiptap-tab-editing' : ''}`}\n                  onClick={(e) => handleTabClick(e, tab.id)}\n                  onDoubleClick={(e) => handleTabDoubleClick(e, tab.id)}\n                >\n                  {editingTabId === tab.id ? (\n                    <input\n                      ref={editingInputRef}\n                      type=\"text\"\n                      value={localTabTitle}\n                      onChange={(e) => handleTabTitleChange(e.target.value)}\n                      onKeyDown={(e) => handleTabTitleKeyDown(e, tab.id)}\n                      onBlur={() => handleTabTitleBlur(tab.id)}\n                      className=\"tiptap-tab-title\"\n                      autoFocus\n                      onFocus={(e) => {\n                        e.stopPropagation();\n                        // Only select all text once at the start of editing, not on every focus\n                        if (!hasSelectedText.current) {\n                          e.currentTarget.select();\n                          hasSelectedText.current = true;\n                        }\n                      }}\n                      onClick={(e) => e.stopPropagation()}\n                    />\n                  ) : (\n                    <span className=\"tiptap-tab-title\">{tab.title}</span>\n                  )}\n                  {isEditable && tabs.length > 1 && (\n                    <button\n                      className=\"tiptap-tab-close\"\n                      onClick={(e) => handleRemoveTab(tab.id, e)}\n                    >\n                      <XIcon className=\"tiptap-tab-close-icon\" />\n                    </button>\n                  )}\n                </div>\n              ))}\n            </div>\n\n            {/* Add Tab Button - Fixed at the end */}\n            {isEditable && (\n              <button className=\"tiptap-tab-add\" onClick={handleAddTab}>\n                <PlusIcon className=\"tiptap-tab-add-icon\" />\n              </button>\n            )}\n          </div>\n        </div>\n\n        {/* Tab Content */}\n        <div className=\"tiptap-tabs-content\" contentEditable={false}>\n          <div className=\"tiptap-tab-content\">\n            <div\n              className=\"tiptap-tab-content-wrapper\"\n              style={{ userSelect: 'text' }}\n              onMouseDown={(e) => {\n                // e.preventDefault();\n                e.stopPropagation();\n                // Prevent focus on wrapper clicks - only allow clicks directly on editor content or interactive elements\n                // const target = e.target as HTMLElement;\n\n                // // Don't prevent clicks on popup menus, floating elements, or interactive elements\n                // if (\n                //   target.closest('.table-cell-menu-popup') ||\n                //   target.closest('[class*=\"SearchablePopup\"]') ||\n                //   target.closest('[role=\"dialog\"]') ||\n                //   target.closest('[role=\"menu\"]') ||\n                //   target.closest('.tippy-box') ||\n                //   target.closest('[data-tippy-root]') ||\n                //   target.closest('button') ||\n                //   target.closest('input') ||\n                //   target.closest('[contenteditable=\"true\"]')\n                // ) {\n                //   return;\n                // }\n\n                // const isEditorContent = target.closest('.ProseMirror');\n\n                // if (!isEditorContent) {\n                //   e.preventDefault();\n                //   e.stopPropagation();\n                // }\n              }}\n              onClick={(e) => {\n                // e.preventDefault();\n                e.stopPropagation();\n                // Prevent focus on wrapper clicks\n                // const target = e.target as HTMLElement;\n\n                // // Don't prevent clicks on popup menus, floating elements, or interactive elements\n                // if (\n                //   target.closest('.table-cell-menu-popup') ||\n                //   target.closest('[class*=\"SearchablePopup\"]') ||\n                //   target.closest('[role=\"dialog\"]') ||\n                //   target.closest('[role=\"menu\"]') ||\n                //   target.closest('.tippy-box') ||\n                //   target.closest('[data-tippy-root]') ||\n                //   target.closest('button') ||\n                //   target.closest('input') ||\n                //   target.closest('[contenteditable=\"true\"]')\n                // ) {\n                //   return;\n                // }\n\n                // const isEditorContent = target.closest('.ProseMirror');\n\n                // if (!isEditorContent) {\n                //   e.preventDefault();\n                //   e.stopPropagation();\n                // }\n              }}\n            >\n              {activeTab && (\n                <Suspense\n                  fallback={\n                    <div style={{ padding: '20px', color: '#adb5bd' }}>\n                      Loading editor...\n                    </div>\n                  }\n                >\n                  <div contentEditable={false} style={{ width: '100%' }}>\n                    <TnkrEditor\n                      key={activeTab.id} // Force remount when switching tabs - ensures each tab has its own editor instance\n                      content={activeTab.content}\n                      onChange={(content) =>\n                        handleTabContentChange(activeTab.id, content)\n                      }\n                      placeholder={`Start writing in ${activeTab.title}...`}\n                      className=\"tnkr-editor-in-tab\"\n                      pageId={`tab-editor-${activeTab.id}`} // Unique page ID for each tab\n                      // Disable nested tabs extension\n                      disabledExtensions={['tabs']}\n                      // Ensure all UI features are enabled\n                      showDragHandle={true}\n                      // Pass through productId, organizationId, and productData from parent editor\n                      productId={productId}\n                      organizationId={organizationId}\n                      minHeight={5}\n                      productData={productData || undefined}\n                      // Pass tab title as context for BOM type detection\n                      tabContext={activeTab.title}\n                      // Pass readonly state from parent editor (inverse of isEditable)\n                      readOnly={!isEditable}\n                      // Prevent automatic focus and selection on mount\n                      autoFocus={false}\n                    />\n                  </div>\n                </Suspense>\n              )}\n            </div>\n          </div>\n        </div>\n      </div>\n      {/* Hidden content required for non-atom node structure */}\n      <NodeViewContent\n        as=\"div\"\n        style={{ display: 'none', pointerEvents: 'none' }}\n      />\n    </NodeViewWrapper>\n  );\n}\n","import { Node } from '@tiptap/core'\nimport { ReactNodeViewRenderer } from '@tiptap/react'\nimport { TabsNodeView } from './tabs-node-view'\n\nexport interface TabData {\n  id: string\n  title: string\n  content: any\n}\n\nexport interface TabsOptions {\n  HTMLAttributes: Record<string, any>\n}\n\ndeclare module '@tiptap/core' {\n  interface Commands<ReturnType> {\n    tabs: {\n      insertTabs: () => ReturnType\n      addTab: (title?: string) => ReturnType\n      removeTab: (tabId: string) => ReturnType\n      setActiveTab: (tabId: string) => ReturnType\n    }\n  }\n}\n\nexport const TabsNode = Node.create<TabsOptions>({\n  name: 'tabs',\n\n  group: 'block',\n\n  content: 'paragraph?',\n\n  isolating: true,\n\n  atom: true,\n\n  defining: true,\n\n  addOptions() {\n    return {\n      HTMLAttributes: {},\n    }\n  },\n\n  addAttributes() {\n    return {\n      tabs: {\n        default: [\n          {\n            id: 'tab-1',\n            title: 'Tab 1',\n            content: {\n              type: 'doc',\n              content: [\n                {\n                  type: 'paragraph',\n                  content: [\n                    {\n                      type: 'text',\n                      text: 'Content for Tab 1'\n                    }\n                  ]\n                }\n              ]\n            }\n          },\n          {\n            id: 'tab-2',\n            title: 'Tab 2',\n            content: {\n              type: 'doc',\n              content: [\n                {\n                  type: 'paragraph',\n                  content: [\n                    {\n                      type: 'text',\n                      text: 'Content for Tab 2'\n                    }\n                  ]\n                }\n              ]\n            }\n          }\n        ] as TabData[],\n        parseHTML: element => {\n          const tabsData = element.getAttribute('data-tabs')\n          return tabsData ? JSON.parse(tabsData) : []\n        },\n        renderHTML: attributes => ({\n          'data-tabs': JSON.stringify(attributes.tabs),\n        }),\n      },\n      activeTab: {\n        default: 'tab-1',\n        parseHTML: element => element.getAttribute('data-active-tab') || 'tab-1',\n        renderHTML: attributes => ({\n          'data-active-tab': attributes.activeTab,\n        }),\n      },\n    }\n  },\n\n  parseHTML() {\n    return [\n      {\n        tag: 'div[data-type=\"tabs\"]',\n      },\n    ]\n  },\n\n  renderHTML({ HTMLAttributes }) {\n    return ['div', { 'data-type': 'tabs', ...HTMLAttributes }]\n  },\n\n  addNodeView() {\n    return ReactNodeViewRenderer(TabsNodeView)\n  },\n\n  addCommands() {\n    return {\n      insertTabs:\n        () =>\n        ({ commands }) => {\n          return commands.insertContent({\n            type: this.name,\n            attrs: {\n              tabs: [\n                {\n                  id: 'tab-1',\n                  title: 'Tab 1',\n                  content: {\n                    type: 'doc',\n                    content: [\n                      {\n                        type: 'paragraph',\n                        content: [\n                          {\n                            type: 'text',\n                            text: 'Content for Tab 1'\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                },\n                {\n                  id: 'tab-2',\n                  title: 'Tab 2',\n                  content: {\n                    type: 'doc',\n                    content: [\n                      {\n                        type: 'paragraph',\n                        content: [\n                          {\n                            type: 'text',\n                            text: 'Content for Tab 2'\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                }\n              ],\n              activeTab: 'tab-1'\n            },\n            content: [\n              {\n                type: 'paragraph',\n              },\n            ],\n          })\n        },\n\n      addTab:\n        (title = 'New Tab') =>\n        ({ tr, dispatch }) => {\n          if (!dispatch) return false\n\n          const selection = tr.selection\n          const node = selection.$from.node()\n\n          if (node.type.name === this.name) {\n            const tabs = [...(node.attrs.tabs || [])]\n            const newTabId = `tab-${Date.now()}`\n            tabs.push({\n              id: newTabId,\n              title,\n              content: {\n                type: 'doc',\n                content: [\n                  {\n                    type: 'paragraph',\n                    content: [\n                      {\n                        type: 'text',\n                        text: `Content for ${title}`\n                      }\n                    ]\n                  }\n                ]\n              }\n            })\n\n            tr.setNodeMarkup(selection.$from.before(), null, {\n              ...node.attrs,\n              tabs,\n              activeTab: newTabId,\n            })\n\n            dispatch(tr)\n            return true\n          }\n\n          return false\n        },\n\n      removeTab:\n        (tabId: string) =>\n        ({ tr, dispatch }) => {\n          if (!dispatch) return false\n\n          const selection = tr.selection\n          const node = selection.$from.node()\n\n          if (node.type.name === this.name) {\n            const tabs = (node.attrs.tabs || []).filter((tab: TabData) => tab.id !== tabId)\n\n            if (tabs.length === 0) {\n              return false\n            }\n\n            let activeTab = node.attrs.activeTab\n            if (activeTab === tabId) {\n              activeTab = tabs[0].id\n            }\n\n            tr.setNodeMarkup(selection.$from.before(), null, {\n              ...node.attrs,\n              tabs,\n              activeTab,\n            })\n\n            dispatch(tr)\n            return true\n          }\n\n          return false\n        },\n\n      setActiveTab:\n        (tabId: string) =>\n        ({ tr, dispatch }) => {\n          if (!dispatch) return false\n\n          const selection = tr.selection\n          const node = selection.$from.node()\n\n          if (node.type.name === this.name) {\n            tr.setNodeMarkup(selection.$from.before(), null, {\n              ...node.attrs,\n              activeTab: tabId,\n            })\n\n            dispatch(tr)\n            return true\n          }\n\n          return false\n        },\n    }\n  },\n})\n\nexport default TabsNode","// Part utility functions for TnkrModelView component\n\nimport { Part, BaseAssembly, AnimationDirection } from './types';\n\n// Utility function to collect all shapeIds from a part and its children\nexport function collectShapeIds(part: Part): string[] {\n  const shapeIds: string[] = [];\n\n  // If the part is a shape, return its ID in array form\n  if (part.type === 'shape') {\n    return [part.id];\n  }\n\n  // Add current part's shapeIds if they exist\n  if (part.shapeIds) {\n    shapeIds.push(...part.shapeIds);\n  }\n\n  // Recursively collect from children\n  if (part.children) {\n    part.children.forEach((child) => {\n      shapeIds.push(...collectShapeIds(child));\n    });\n  }\n\n  return shapeIds;\n}\n\n// Utility function to get step-specific parts (parts tagged with current step ID)\nexport function getStepSpecificParts(allParts: Part[], stepId: string): Part[] {\n  return allParts.filter((part) => part.tag === stepId);\n}\n\n/**\n * V2: Expand group parts to their children (recursively)\n * This version handles step groups specially - keeping them intact but expanding their children\n */\nexport function expandGroupsToChildren(parts: Part[]): Part[] {\n  const expandedParts: Part[] = [];\n\n  const expandPart = (part: Part, inheritedTag?: string) => {\n    const currentTag = part.tag || inheritedTag;\n\n    // ✅ SPECIAL: Don't expand step groups, but expand their children\n    // Step groups are identified by isStep=true AND having children (processed step references)\n    if (part.metadata?.isStep && part.children && part.children.length > 0) {\n      // Expand children to get individual transforms\n      const expandedChildren: Part[] = [];\n\n      part.children?.forEach((child) => {\n        // Recursively expand each child\n        if ((child.metadata?.isGroup || child.type === 'group') && child.children && child.children.length > 0) {\n          // Expand nested groups\n          child.children.forEach((grandchild) => expandPart(grandchild, currentTag));\n        } else {\n          // Add individual part with inherited tag\n          expandedChildren.push({\n            ...child,\n            tag: child.tag || currentTag\n          });\n        }\n      });\n\n      // ✅ Keep the step group INTACT with expanded children\n      expandedParts.push({\n        ...part,\n        children: expandedChildren,\n        tag: currentTag\n      });\n      return;\n    }\n\n    // Handle regular groups (expand completely)\n    const shouldExpand =\n      (part.metadata?.isGroup || part.type === 'group') &&\n      !part.metadata?.isStep &&  // Don't expand step groups\n      part.children && part.children.length > 0;\n\n    if (shouldExpand) {\n      // Recursively expand children, passing down the group's tag\n      part.children?.forEach((child) => expandPart(child, currentTag));\n    } else if (\n      (part.metadata?.isStep || part.type === 'step') &&\n      part.metadata?.stepParts &&\n      part.metadata.stepParts.length > 0\n    ) {\n      // Handle legacy assembly instruction steps - expand to their stepParts\n      part.metadata.stepParts.forEach((stepPart: Part) =>\n        expandPart(stepPart, currentTag),\n      );\n    } else {\n      // Add the individual part (not a group/step or no children) with the inherited tag\n      const expandedPart = {\n        ...part,\n        tag: part.tag || inheritedTag, // Use existing tag or inherit from parent group/step\n      };\n\n      expandedParts.push(expandedPart);\n    }\n  };\n\n  // Process each part\n  parts.forEach((part) => expandPart(part));\n\n  return expandedParts;\n}\n\n// Utility function to sync step parts with latest data from referenced steps\nexport function syncStepPartsWithLatestData(\n  stepParts: Part[], \n  allSteps: any[], \n  animationDirections?: Record<string, AnimationDirection>\n): Part[] {\n  const updatedParts: Part[] = [];\n  const processedStepIds = new Set<string>(); // Track processed steps to avoid infinite recursion\n  console.log('Syncing step parts:', stepParts);\n\n  // Recursive function to process parts and their nested steps\n  const processPart = (part: Part, depth: number = 0): void => {\n    // Prevent infinite recursion by limiting depth and tracking processed steps\n    if (depth > 10) {\n      console.warn('Maximum recursion depth reached while syncing step parts');\n      return;\n    }\n\n    // Check if this part is a reference to another step\n    if (part.type === 'step' || part.metadata?.isStep) {\n      const stepId = part.metadata?.stepId || part.id;\n\n      // Skip if we've already processed this step (avoid circular references)\n      if (processedStepIds.has(stepId)) {\n        console.log(`Skipping already processed step: ${stepId}`);\n        return;\n      }\n\n      processedStepIds.add(stepId);\n\n      // Find the referenced step by the part's metadata.stepId or part.id\n      const referencedStep = allSteps.find((step) => step.id === stepId);\n\n      if (referencedStep?.parts && referencedStep.parts.length > 0) {\n        console.log(`Found referenced step ${stepId} with ${referencedStep.parts.length} parts`);\n\n        // Get the animation direction for the step reference (not individual children)\n        const stepGroupDirection = animationDirections?.[part.id] || part.metadata?.animationDirection;\n\n        // Recursively process the referenced step's parts to resolve nested step references\n        const syncedChildren = syncStepPartsWithLatestData(\n          referencedStep.parts,\n          allSteps,\n          animationDirections\n        );\n\n        // Create a group wrapper for the step reference\n        const stepGroupPart: Part = {\n          ...part,\n          type: 'group',  // Treat as group for animation\n          children: syncedChildren,\n          metadata: {\n            ...part.metadata,\n            isGroup: true,\n            // isStep is already preserved from ...part.metadata\n            stepId: stepId,\n            stepName: referencedStep.title || part.name,\n            animationDirection: stepGroupDirection\n          }\n        };\n        updatedParts.push(stepGroupPart);\n      } else {\n        console.log(`Referenced step ${stepId} not found or has no parts`);\n      }\n    } else {\n      // Override with animationDirection from MongoDB if provided\n      const cleanedPart = {\n        ...part,\n        metadata: {\n          ...part.metadata,\n          // Use MongoDB animationDirections as single source of truth\n          animationDirection: animationDirections?.[part.id] || undefined\n        }\n      };\n      updatedParts.push(cleanedPart);\n    }\n  };\n\n  // Process each part in the initial stepParts array\n  stepParts.forEach((part) => processPart(part, 0));\n\n  console.log(`Synced ${stepParts.length} parts into ${updatedParts.length} parts`);\n  return updatedParts;\n}\n// Helper function to check if a group contains transforms (directly or indirectly)\nfunction hasTransforms(assembly: BaseAssembly): boolean {\n  if (assembly.type === 'transform') {\n    return true;\n  }\n\n  if (assembly.children) {\n    return assembly.children.some((child) => hasTransforms(child));\n  }\n\n  return false;\n}\n\n// Utility function to convert Assembly data to Part format\nexport function convertAssemblyToPart(assembly: BaseAssembly): Part | null {\n  // Filter out shape types - we only want groups and transforms in the tree\n  if (assembly.type === 'shape') {\n    return null;\n  }\n\n  // For groups, only show them if they contain transforms\n  if (assembly.type === 'group' && !hasTransforms(assembly)) {\n    return null;\n  }\n\n  // For transforms, they are leaf nodes (don't show their children)\n  let children: Part[] | undefined = undefined;\n\n  if (assembly.type === 'transform') {\n    // Transforms are leaf nodes - don't show any children\n    children = undefined;\n  } else if (assembly.children) {\n    // For assemblies and groups that contain transforms, process children\n    children = assembly.children\n      .map(convertAssemblyToPart)\n      .filter((child): child is Part => child !== null);\n\n    // If no valid children after filtering, set to undefined\n    if (children.length === 0) {\n      children = undefined;\n    }\n  }\n\n  return {\n    id: assembly.id,\n    name: assembly.name,\n    position: { x: 0, y: 0, z: 0 }, // Default position\n    type: assembly.type,\n    shapeIds: assembly.shapeIds,\n    def: assembly.def,\n    children: children,\n    metadata: {\n      assemblyType: assembly.type,\n      isGroup: assembly.type === 'group',\n      isInternalGroup: assembly.type === 'transform',\n    },\n    visible: true,\n    isolated: false,\n  };\n}\n\n// Part management utilities\n\n// Find a part by ID (recursively searches through children)\nexport function findPartById(partId: string, parts: Part[]): Part | null {\n  for (const part of parts) {\n    if (part.id === partId) {\n      return part;\n    }\n    if (part.children) {\n      const found = findPartById(partId, part.children);\n      if (found) return found;\n    }\n  }\n  return null;\n}\n\n// Delete a group and return updated parts list\nexport function deleteGroup(groupId: string, parts: Part[]): Part[] {\n  const updatedParts: Part[] = [];\n  \n  for (const part of parts) {\n    if (part.id === groupId && part.metadata?.isGroup) {\n      // If this is the group to delete, add its children to the parent level\n      if (part.children) {\n        updatedParts.push(...part.children);\n      }\n    } else if (part.children) {\n      // Recursively process children\n      updatedParts.push({\n        ...part,\n        children: deleteGroup(groupId, part.children),\n      });\n    } else {\n      updatedParts.push(part);\n    }\n  }\n  \n  return updatedParts;\n}\n\n// Move a part to a different group (or to root if targetGroupId is null)\nexport function movePart(\n  partId: string,\n  targetGroupId: string | null,\n  parts: Part[]\n): Part[] {\n  // First, find and remove the part from its current location\n  let movedPart: Part | null = null;\n  \n  const removePart = (partsList: Part[]): Part[] => {\n    const result: Part[] = [];\n    for (const part of partsList) {\n      if (part.id === partId) {\n        movedPart = part;\n        // Don't add this part to result (removing it)\n      } else if (part.children) {\n        result.push({\n          ...part,\n          children: removePart(part.children),\n        });\n      } else {\n        result.push(part);\n      }\n    }\n    return result;\n  };\n  \n  let updatedParts = removePart(parts);\n  \n  if (!movedPart) {\n    console.warn(`Part with ID ${partId} not found`);\n    return parts;\n  }\n  \n  // Now add the part to its new location\n  if (targetGroupId === null) {\n    // Add to root level\n    updatedParts.push(movedPart);\n  } else {\n    // Add to specific group\n    const addToGroup = (partsList: Part[]): Part[] => {\n      return partsList.map(part => {\n        if (part.id === targetGroupId && part.metadata?.isGroup) {\n          return {\n            ...part,\n            children: [...(part.children || []), movedPart!],\n          };\n        } else if (part.children) {\n          return {\n            ...part,\n            children: addToGroup(part.children),\n          };\n        }\n        return part;\n      });\n    };\n    \n    updatedParts = addToGroup(updatedParts);\n  }\n  \n  return updatedParts;\n}\n\n// Get all available groups (for move operations)\nexport function getAvailableGroups(parts: Part[]): Array<{ id: string; name: string }> {\n  const groups: Array<{ id: string; name: string }> = [];\n  \n  const collectGroups = (partsList: Part[]) => {\n    for (const part of partsList) {\n      if (part.metadata?.isGroup) {\n        groups.push({ id: part.id, name: part.name });\n      }\n      if (part.children) {\n        collectGroups(part.children);\n      }\n    }\n  };\n  \n  collectGroups(parts);\n  return groups;\n}\n\n// Create a new group with specified parts\nexport function createGroup(name: string, partIds: string[], parts: Part[]): Part[] {\n  const groupId = `group_${Date.now()}`;\n  const partsToGroup: Part[] = [];\n  \n  // Collect parts to group and remove them from their current locations\n  const removeParts = (partsList: Part[]): Part[] => {\n    const result: Part[] = [];\n    for (const part of partsList) {\n      if (partIds.includes(part.id)) {\n        partsToGroup.push(part);\n        // Don't add this part to result (removing it)\n      } else if (part.children) {\n        result.push({\n          ...part,\n          children: removeParts(part.children),\n        });\n      } else {\n        result.push(part);\n      }\n    }\n    return result;\n  };\n  \n  const updatedParts = removeParts(parts);\n  \n  // Create the new group\n  const newGroup: Part = {\n    id: groupId,\n    name: name,\n    position: { x: 0, y: 0, z: 0 },\n    type: 'group',\n    children: partsToGroup,\n    metadata: {\n      isGroup: true,\n      groupId: groupId,\n    },\n    visible: true,\n  };\n  \n  // Add the new group to root level\n  updatedParts.push(newGroup);\n  \n  return updatedParts;\n}\n\n// Rename a group\nexport function renameGroup(groupId: string, newName: string, parts: Part[]): Part[] {\n  return parts.map(part => {\n    if (part.id === groupId && part.metadata?.isGroup) {\n      return {\n        ...part,\n        name: newName,\n      };\n    } else if (part.children) {\n      return {\n        ...part,\n        children: renameGroup(groupId, newName, part.children),\n      };\n    }\n    return part;\n  });\n}","import { useCallback, useRef, useState, useEffect, useMemo } from 'react';\nimport {\n  ControlFunctions,\n  PartOperations,\n  ClickedPart,\n  Part,\n} from './types';\nimport { collectShapeIds } from './partUtils';\n\n// Additional types needed for internal use\ntype ContextMenuState = {\n  visible: boolean;\n  x: number;\n  y: number;\n  partId?: string;\n  isOpen?: boolean;\n  shapeName?: string;\n  transformId?: string;\n};\n\ntype SelectedTool = 'select' | 'explode' | 'highlight';\n\ntype CameraState = {\n  zoom: number;\n  angle: number;\n  position?: any;\n  orientation?: any;\n  fieldOfView?: string;\n};\n\n// ========================================\n// CORE STATE MANAGEMENT (Single Sources of Truth)\n// ========================================\n\ntype PartState = {\n  highlighted: Set<string>; // All highlighted shapeIds\n  hidden: Set<string>; // All hidden shapeIds\n  isolated: Set<string>; // All isolated shapeIds (usually empty or contains all visible shapes)\n};\n\ntype IsolationSettings = {\n  transparencyLevel: number; // 0-100 percentage\n  hideTransparent: boolean; // Toggle between transparency and hide\n  isolatedPartName?: string; // Name of the isolated part (for UI display)\n  assemblyStepParts?: Part[]; // Parts belonging to current assembly step (for context-aware isolation)\n};\n\ntype RootMatrix = [\n  [number, number, number],\n  [number, number, number],\n  [number, number, number],\n];\n// ========================================\n// SIMPLIFIED PART OPERATIONS INTERFACE\n// ========================================\n\nexport function useModelViewCore(parts: Part[] = []) {\n  // ========================================\n  // CORE STATE\n  // ========================================\n\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  const [scriptsLoaded, setScriptsLoaded] = useState(false);\n  const [isLoaded, setIsLoaded] = useState(false);\n  const [containerDimensions, setContainerDimensions] = useState({\n    width: 800,\n    height: 600,\n  });\n  const [selectedTools, setSelectedTools] = useState<SelectedTool[]>([]);\n  const [clickedPart, setClickedPart] = useState<ClickedPart>();\n\n  // ========================================\n  // PARTS CONTEXT INTEGRATION\n  // ========================================\n  const partsRef = useRef(parts);\n\n  // Update parts ref when parts change\n  useEffect(() => {\n    partsRef.current = parts;\n  }, [parts]);\n\n  // ========================================\n  // SIMPLE EXPLOSION SYSTEM\n  // ========================================\n\n  // Let's also check if parts are available from other sources\n\n  // Context menu state\n  const [contextMenu, setContextMenu] = useState<ContextMenuState>({\n    visible: false,\n    x: 0,\n    y: 0,\n    partId: '',\n    isOpen: false,\n  });\n\n  // ========================================\n  // SIMPLE EXPLOSION STATE\n  // ========================================\n  const [explosionFactor, setExplosionFactor] = useState(0);\n  const originalTransformsRef = useRef<Map<string, string>>(new Map());\n\n  // ========================================\n  // SINGLE SOURCES OF TRUTH FOR PART STATES\n  // ========================================\n\n  const [partState, setPartState] = useState<PartState>({\n    highlighted: new Set<string>(),\n    hidden: new Set<string>(),\n    isolated: new Set<string>(),\n  });\n\n  // Track which transform IDs were operated on from parts tree (for UI feedback)\n  const [partsTreeOperations, setPartsTreeOperations] = useState({\n    highlighted: new Set<string>(),\n    hidden: new Set<string>(),\n    isolated: new Set<string>(),\n  });\n\n  // Isolation settings for transparency and assembly context\n  const [isolationSettings, setIsolationSettings] = useState<IsolationSettings>({\n    transparencyLevel: 70, // Default 70% transparency\n    hideTransparent: false, // Default to transparency mode\n    isolatedPartName: undefined,\n    assemblyStepParts: undefined,\n  });\n\n  // Track currently visible shapes for assembly mode context\n  const [currentlyVisibleShapes, setCurrentlyVisibleShapes] = useState<Set<string>>(new Set());\n\n  // ========================================\n  // CORE DOM MANIPULATION HELPERS\n  // ========================================\n\n  const findShapeElement = useCallback(\n    (shapeId: string): HTMLElement | null => {\n      if (!containerRef.current) return null;\n      return containerRef.current.querySelector(\n        `Shape[id=\"${CSS.escape(shapeId)}\"]`,\n      ) as HTMLElement;\n    },\n    [],\n  );\n\n  const getAllShapeElements = useCallback((): HTMLElement[] => {\n    if (!containerRef.current) return [];\n    return Array.from(\n      containerRef.current.querySelectorAll('Shape'),\n    ) as HTMLElement[];\n  }, []);\n\n  // ========================================\n  // CORE HIGHLIGHT OPERATIONS\n  // ========================================\n\n  const highlightShapes = useCallback(\n    (shapeIds: string[], color: string = '0.7 0.6 0') => {\n      shapeIds.forEach((shapeId) => {\n        const shapeElement = findShapeElement(shapeId);\n        if (!shapeElement) {\n          console.warn(`Shape element with ID ${shapeId} not found`);\n          return;\n        }\n\n        // Find material within the shape\n        const material = shapeElement.querySelector('Material') as HTMLElement;\n        if (material) {\n          // Check if material has shininess=\".9\" to determine which attribute to use\n          const diffuseColor = material.getAttribute('diffuseColor');\n          const useEmissive = diffuseColor === '0.8,0.8,0.8';\n          const attributeName = useEmissive ? 'emissiveColor' : 'diffuseColor';\n\n          // Store original color if not already stored\n          if (!material.hasAttribute('data-original-color')) {\n            const originalColor =\n              material.getAttribute(attributeName) || '0 0 0';\n            material.setAttribute('data-original-color', originalColor);\n            material.setAttribute('data-color-attribute', attributeName);\n          }\n          // Apply highlight\n          material.setAttribute(attributeName, color);\n        }\n      });\n\n      // Update state\n      setPartState((prev) => ({\n        ...prev,\n        highlighted: new Set([...prev.highlighted, ...shapeIds]),\n      }));\n    },\n    [findShapeElement],\n  );\n\n  const removeHighlightShapes = useCallback(\n    (shapeIds: string[]) => {\n      shapeIds.forEach((shapeId) => {\n        const shapeElement = findShapeElement(shapeId);\n        if (!shapeElement) return;\n\n        const material = shapeElement.querySelector('Material') as HTMLElement;\n        if (material && material.hasAttribute('data-original-color')) {\n          const originalColor =\n            material.getAttribute('data-original-color') || '0 0 0';\n          const attributeName =\n            material.getAttribute('data-color-attribute') || 'diffuseColor';\n          material.setAttribute(attributeName, originalColor);\n          material.removeAttribute('data-original-color');\n          material.removeAttribute('data-color-attribute');\n        }\n      });\n\n      // Update state\n      setPartState((prev) => ({\n        ...prev,\n        highlighted: new Set(\n          Array.from(prev.highlighted).filter((id) => !shapeIds.includes(id)),\n        ),\n      }));\n    },\n    [findShapeElement],\n  );\n\n  // ========================================\n  // CORE HIDE/SHOW OPERATIONS\n  // ========================================\n\n  const hideShapes = useCallback(\n    (shapeIds: string[]) => {\n      shapeIds.forEach((shapeId) => {\n        const shapeElement = findShapeElement(shapeId);\n        if (shapeElement) {\n          shapeElement.setAttribute('render', 'false');\n        }\n      });\n\n      // Update state\n      setPartState((prev) => ({\n        ...prev,\n        hidden: new Set([...prev.hidden, ...shapeIds]),\n      }));\n    },\n    [findShapeElement],\n  );\n\n  const showShapes = useCallback(\n    (shapeIds: string[]) => {\n      shapeIds.forEach((shapeId) => {\n        const shapeElement = findShapeElement(shapeId);\n        if (shapeElement) {\n          shapeElement.setAttribute('render', 'true');\n        }\n      });\n\n      // Update state\n      setPartState((prev) => ({\n        ...prev,\n        hidden: new Set(\n          Array.from(prev.hidden).filter((id) => !shapeIds.includes(id)),\n        ),\n      }));\n    },\n    [findShapeElement],\n  );\n\n  // ========================================\n  // CORE ISOLATE OPERATIONS\n  // ========================================\n\n  /**\n   * Helper function to log the current center of rotation\n   */\n  // const logCurrentCenter = useCallback((context: string) => {\n  //   if (!containerRef.current) return null;\n  //\n  //   const viewpoint = containerRef.current.querySelector('Viewpoint');\n  //   if (!viewpoint) {\n  //     console.log(`📍 ${context}: No viewpoint found`);\n  //     return null;\n  //   }\n  //\n  //   const centerOfRotation = viewpoint.getAttribute('centerOfRotation') || '0 0 0';\n  //   console.log(`📍 ${context}: Center of rotation is: ${centerOfRotation}`);\n  //\n  //   const [x, y, z] = centerOfRotation.split(' ').map(Number);\n  //   return { x, y, z };\n  // }, []);\n\n  /**\n   * Save the original center of rotation to localStorage\n   * Called once when the model first loads\n   */\n  const saveOriginalCenter = useCallback(() => {\n    if (!containerRef.current) return;\n    \n    const viewpoint = containerRef.current.querySelector('Viewpoint');\n    if (!viewpoint) return;\n    \n    const centerOfRotation = viewpoint.getAttribute('centerOfRotation') || '0 0 0';\n    \n    // Create a unique key for this model (we need org+product context)\n    // For now, use a generic key - ideally we'd have orgId/productId context here\n    const storageKey = 'originalCenterOfRotation';\n    \n    try {\n      localStorage.setItem(storageKey, centerOfRotation);\n      console.log(`💾 Saved original center to localStorage: ${centerOfRotation}`);\n    } catch (error) {\n      console.warn('Failed to save original center to localStorage:', error);\n    }\n  }, []);\n\n  /**\n   * Restore the original center of rotation from localStorage\n   * Called when showing all parts to return to the original view\n   */\n  const restoreOriginalCenter = useCallback(() => {\n    if (!containerRef.current) return false;\n    \n    const viewpoint = containerRef.current.querySelector('Viewpoint');\n    if (!viewpoint) return false;\n    \n    const storageKey = 'originalCenterOfRotation';\n    \n    try {\n      const originalCenter = localStorage.getItem(storageKey);\n      if (originalCenter) {\n        viewpoint.setAttribute('centerOfRotation', originalCenter);\n        console.log(`🔄 Restored original center from localStorage: ${originalCenter}`);\n        return true;\n      } else {\n        console.log('📭 No original center found in localStorage');\n        return false;\n      }\n    } catch (error) {\n      console.warn('Failed to restore original center from localStorage:', error);\n      return false;\n    }\n  }, []);\n\n  /**\n   * Core recentering function that works with shape IDs\n   * Calculates center based on Transform positions containing the specified shapes\n   */\n  const recenterToShapeIds = useCallback(\n    (shapeIds: string[], logPrefix: string = '🎯') => {\n      if (!containerRef.current || !shapeIds || shapeIds.length === 0) {\n        console.log(`${logPrefix} ❌ Recentering failed: No container or shape IDs`);\n        return null;\n      }\n\n      console.log(`${logPrefix} Recentering for ${shapeIds.length} shape IDs`);\n\n      const targetShapeIds = new Set(shapeIds);\n\n      // ========================================\n      // Transform-based positioning (primary approach)\n      // ========================================\n      // NOTE: If orphan shape handling is needed, see ORPHAN_SHAPE_HANDLING.md\n      // for the complete mixed approach implementation.\n      \n      const upperTransforms = containerRef.current.querySelectorAll('Transform[translation]');\n      const lowerTransforms = containerRef.current.querySelectorAll('transform[translation]');\n      const allTransforms = [...upperTransforms, ...lowerTransforms];\n      if (!allTransforms || allTransforms.length === 0) {\n        console.log(`${logPrefix} ❌ No transforms found`);\n        return null;\n      }\n\n      let totalX = 0, totalY = 0, totalZ = 0, count = 0;\n\n      Array.from(allTransforms).forEach(transform => {\n        // Check if this transform contains any shapes from our target set\n        const shapesInTransform = transform.querySelectorAll('Shape');\n        const hasTargetShapes = Array.from(shapesInTransform).some((shape: Element) => {\n          const shapeId = shape.getAttribute('id');\n          return shapeId && targetShapeIds.has(shapeId);\n        });\n\n        if (hasTargetShapes) {\n          const translation = transform.getAttribute('translation');\n          if (translation) {\n            const [x, y, z] = translation.split(' ').map(Number);\n            if (!isNaN(x) && !isNaN(y) && !isNaN(z)) {\n              totalX += x;\n              totalY += y;\n              totalZ += z;\n              count++;\n            }\n          }\n        }\n      });\n\n      if (count === 0) {\n        console.log(`${logPrefix} ❌ No valid transforms found for target shapes`);\n        return null;\n      }\n\n      const center = {\n        x: totalX / count,\n        y: totalY / count,\n        z: totalZ / count\n      };\n\n      console.log(`${logPrefix} Calculated center from ${count} transforms:`, center);\n\n      // Apply the center to the viewpoint\n      const viewpoint = containerRef.current.querySelector('Viewpoint');\n      if (viewpoint) {\n        const centerString = `${center.x} ${center.y} ${center.z}`;\n        viewpoint.setAttribute('centerOfRotation', centerString);\n        console.log(`${logPrefix} Set centerOfRotation to: ${centerString}`);\n      } else {\n        console.log(`${logPrefix} ⚠️ No viewpoint found to update center of rotation`);\n      }\n\n      return center;\n    },\n    [],\n  );\n\n  // ========================================\n  // TRANSPARENCY FUNCTIONS\n  // ========================================\n\n  const setShapeTransparency = useCallback(\n    (shapeId: string, transparency: number) => {\n      const shapeElement = findShapeElement(shapeId);\n      if (!shapeElement) return;\n\n      const material = shapeElement.querySelector('Material') as HTMLElement;\n      if (material) {\n        // Store original attributes if not already stored\n        if (!material.hasAttribute('data-original-transparency')) {\n          const originalTransparency = material.getAttribute('transparency') || '0';\n          const originalDiffuseColor = material.getAttribute('diffuseColor') || '0.8 0.8 0.8';\n          const originalEmissiveColor = material.getAttribute('emissiveColor') || '0 0 0';\n\n          material.setAttribute('data-original-transparency', originalTransparency);\n          material.setAttribute('data-original-diffuse-color', originalDiffuseColor);\n          material.setAttribute('data-original-emissive-color', originalEmissiveColor);\n        }\n\n        // Apply transparency (0 = opaque, 1 = fully transparent)\n        material.setAttribute('transparency', transparency.toString());\n\n        // Apply OnShape-like color blending for black background\n        if (transparency > 0) {\n          const originalDiffuseColor = material.getAttribute('data-original-diffuse-color') || '0.8 0.8 0.8';\n          const diffuseValues = originalDiffuseColor.split(' ').map(Number);\n\n          // Darken the diffuse color and reduce saturation (blend toward dark gray)\n          const blendFactor = transparency * 0.7; // How much to blend (0.7 max for subtle effect)\n          const targetGray = 0.2; // Dark gray target for black background\n\n          const blendedDiffuse = diffuseValues.map(value =>\n            value * (1 - blendFactor) + targetGray * blendFactor\n          );\n\n          material.setAttribute('diffuseColor', blendedDiffuse.join(' '));\n\n          // Add slight emissive glow to maintain visibility against black background\n          const emissiveIntensity = transparency * 0.1; // Subtle glow\n          material.setAttribute('emissiveColor', `${emissiveIntensity} ${emissiveIntensity} ${emissiveIntensity}`);\n        } else {\n          // Reset to original colors when fully opaque\n          const originalDiffuseColor = material.getAttribute('data-original-diffuse-color') || '0.8 0.8 0.8';\n          const originalEmissiveColor = material.getAttribute('data-original-emissive-color') || '0 0 0';\n          material.setAttribute('diffuseColor', originalDiffuseColor);\n          material.setAttribute('emissiveColor', originalEmissiveColor);\n        }\n      }\n    },\n    [findShapeElement],\n  );\n\n  const resetShapeTransparency = useCallback(\n    (shapeId: string) => {\n      const shapeElement = findShapeElement(shapeId);\n      if (!shapeElement) return;\n\n      const material = shapeElement.querySelector('Material') as HTMLElement;\n      if (material) {\n        // Reset transparency\n        if (material.hasAttribute('data-original-transparency')) {\n          const originalTransparency = material.getAttribute('data-original-transparency') || '0';\n          material.setAttribute('transparency', originalTransparency);\n          material.removeAttribute('data-original-transparency');\n        }\n\n        // Reset diffuse color\n        if (material.hasAttribute('data-original-diffuse-color')) {\n          const originalDiffuseColor = material.getAttribute('data-original-diffuse-color') || '0.8 0.8 0.8';\n          material.setAttribute('diffuseColor', originalDiffuseColor);\n          material.removeAttribute('data-original-diffuse-color');\n        }\n\n        // Reset emissive color\n        if (material.hasAttribute('data-original-emissive-color')) {\n          const originalEmissiveColor = material.getAttribute('data-original-emissive-color') || '0 0 0';\n          material.setAttribute('emissiveColor', originalEmissiveColor);\n          material.removeAttribute('data-original-emissive-color');\n        }\n      }\n    },\n    [findShapeElement],\n  );\n\n  const isolateShapes = useCallback(\n    (shapeIds: string[], partName?: string, forceHide: boolean = false, assemblyStepParts?: Part[]) => {\n      // Log center BEFORE isolation\n      // logCurrentCenter('BEFORE Isolation');\n\n      // console.log('🎯 isolateShapes called - assemblyStepParts:', assemblyStepParts?.length, 'forceHide:', forceHide, 'shapeIds:', shapeIds);\n\n      const allShapes = getAllShapeElements();\n      const targetShapeIds = new Set(shapeIds);\n\n      // Get current isolation settings\n      const { transparencyLevel, hideTransparent } = isolationSettings;\n\n      // Capture current hidden state to preserve user's manual hide actions\n      const currentHidden = partState.hidden;\n\n      // Assembly mode: when stepParts are provided, only work within step context\n      if (assemblyStepParts && assemblyStepParts.length > 0) {\n        // Get all shape IDs that belong to the current step\n        const stepShapeIds = new Set<string>();\n        assemblyStepParts.forEach(part => {\n          const partShapeIds = collectShapeIds(part);\n          partShapeIds.forEach(id => stepShapeIds.add(id));\n        });\n\n        // Track currently visible shapes for future isolations\n        setCurrentlyVisibleShapes(stepShapeIds);\n\n        allShapes.forEach((shape) => {\n          const shapeId = shape.getAttribute('id');\n          if (shapeId) {\n            if (stepShapeIds.has(shapeId)) {\n              // This shape is part of the current step\n              if (targetShapeIds.has(shapeId)) {\n                // Isolated shape within step - fully visible and opaque (unless it was manually hidden)\n                if (currentHidden.has(shapeId)) {\n                  // Keep manually hidden parts hidden\n                  shape.setAttribute('render', 'false');\n                } else {\n                  shape.setAttribute('render', 'true');\n                  resetShapeTransparency(shapeId);\n                }\n              } else {\n                // Non-isolated shape within step - check if manually hidden first\n                if (currentHidden.has(shapeId)) {\n                  // Keep manually hidden parts hidden\n                  shape.setAttribute('render', 'false');\n                } else if (hideTransparent) {\n                  // Apply isolation hide setting\n                  shape.setAttribute('render', 'false');\n                } else {\n                  // Apply transparency\n                  shape.setAttribute('render', 'true');\n                  const transparencyValue = transparencyLevel / 100;\n                  setShapeTransparency(shapeId, transparencyValue);\n                }\n              }\n            } else {\n              // This shape is NOT part of the current step - always hide it\n              shape.setAttribute('render', 'false');\n            }\n          }\n        });\n\n        // Assembly mode recentering logic - recenter to ALL step parts for better context\n        const stepShapeIdsArray = Array.from(stepShapeIds);\n        if (stepShapeIdsArray.length > 0) {\n          recenterToShapeIds(stepShapeIdsArray, '🎯 Assembly Step');\n        }\n      } else {\n        // Normal isolation mode (not in assembly step)\n        allShapes.forEach((shape) => {\n          const shapeId = shape.getAttribute('id');\n          if (shapeId) {\n            if (targetShapeIds.has(shapeId)) {\n              // Isolated shapes remain fully visible and opaque (unless manually hidden)\n              if (currentHidden.has(shapeId)) {\n                // Keep manually hidden parts hidden\n                shape.setAttribute('render', 'false');\n              } else {\n                shape.setAttribute('render', 'true');\n                resetShapeTransparency(shapeId);\n              }\n            } else {\n              // Check if manually hidden first\n              if (currentHidden.has(shapeId)) {\n                // Keep manually hidden parts hidden\n                shape.setAttribute('render', 'false');\n              } else if (forceHide || hideTransparent) {\n                // Hide completely if forceHide is true (for assembly) or checkbox is checked\n                shape.setAttribute('render', 'false');\n              } else {\n                // Make transparent based on slider value\n                shape.setAttribute('render', 'true');\n                // Convert percentage to 0-1 range (inverted so 100% = fully transparent)\n                const transparencyValue = transparencyLevel / 100;\n                setShapeTransparency(shapeId, transparencyValue);\n              }\n            }\n          }\n        });\n\n        // Normal mode recentering logic\n        // Only recenter when hiding parts completely (forceHide or hideTransparent)\n        // In transparency mode, keep the robot's default center of rotation\n        if (forceHide || hideTransparent) {\n          // Auto-recenter to isolated shapes for better rotation experience\n          recenterToShapeIds(shapeIds, '🎯 Explorer');\n        }\n      }\n\n      // Update state - preserve manually hidden shapes\n      setPartState((prev) => ({\n        ...prev,\n        isolated: new Set(shapeIds),\n        // Keep all hidden shapes that were manually hidden and are NOT being isolated\n        hidden: new Set(\n          Array.from(prev.hidden).filter((id) => !shapeIds.includes(id)),\n        ),\n      }));\n\n      // Update isolation settings with part name and assembly context\n      setIsolationSettings((prev) => ({\n        ...prev,\n        isolatedPartName: partName,\n        assemblyStepParts: assemblyStepParts,\n      }));\n\n      // Log center AFTER isolation\n      // logCurrentCenter('AFTER Isolation');\n    },\n    [getAllShapeElements, recenterToShapeIds, isolationSettings, setShapeTransparency, resetShapeTransparency, partState],\n  );\n\n  // ========================================\n  // RESET EXPLOSION\n  // ========================================\n\n  const resetExplosion = useCallback(() => {\n    if (!containerRef.current || originalTransformsRef.current.size === 0) {\n      console.warn(\n        'Cannot reset explosion: container or original transforms not available',\n      );\n      return;\n    }\n\n    const transforms = containerRef.current.querySelectorAll('Transform');\n\n    transforms.forEach((transform) => {\n      const id = transform.getAttribute('id');\n      if (!id) return;\n\n      const originalTranslation = originalTransformsRef.current.get(id);\n      if (originalTranslation) {\n        transform.setAttribute('translation', originalTranslation);\n      }\n    });\n\n    setExplosionFactor(0);\n  }, []);\n\n  // ========================================\n  // SHOW ALL PARTS (Master Reset)\n  // ========================================\n\n  const showAllParts = useCallback((currentStepParts?: Part[] | null) => {\n    // Log center BEFORE showing all parts\n    // logCurrentCenter('BEFORE Show All Parts');\n\n    // console.log('🔍 showAllParts called - currentStepParts:', currentStepParts?.length, 'isolationSettings.assemblyStepParts:', isolationSettings.assemblyStepParts?.length);\n\n    const allShapes = getAllShapeElements();\n\n    // Capture current hidden state to preserve user's manual hide actions\n    const currentHidden = partState.hidden;\n    // console.log('🔍 showAllParts - currentHidden size:', currentHidden.size, 'hidden shapes:', Array.from(currentHidden));\n\n    // Check if we're currently in a step with parts (based on current navigation context)\n    if (currentStepParts && currentStepParts.length > 0) {\n      // Assembly mode: only show step parts, hide everything else\n      const stepShapeIds = new Set<string>();\n      currentStepParts.forEach(part => {\n        const partShapeIds = collectShapeIds(part);\n        partShapeIds.forEach(id => stepShapeIds.add(id));\n      });\n\n      allShapes.forEach((shape) => {\n        const shapeId = shape.getAttribute('id');\n        if (shapeId) {\n          if (stepShapeIds.has(shapeId)) {\n            // This shape is part of the current step\n            // Check if it was manually hidden before showing\n            if (currentHidden.has(shapeId)) {\n              // Keep manually hidden parts hidden\n              shape.setAttribute('render', 'false');\n            } else {\n              // Show and reset only if not manually hidden\n              shape.setAttribute('render', 'true');\n\n              // Remove all highlights and reset transparency\n              const material = shape.querySelector('Material') as HTMLElement;\n              if (material) {\n                // Reset highlight\n                if (material.hasAttribute('data-original-color')) {\n                  const originalColor =\n                    material.getAttribute('data-original-color') || '0 0 0';\n                  const attributeName =\n                    material.getAttribute('data-color-attribute') || 'diffuseColor';\n                  material.setAttribute(attributeName, originalColor);\n                  material.removeAttribute('data-original-color');\n                  material.removeAttribute('data-color-attribute');\n                }\n\n                // Reset transparency and color attributes (enhanced transparency reset)\n                if (material.hasAttribute('data-original-transparency')) {\n                  const originalTransparency =\n                    material.getAttribute('data-original-transparency') || '0';\n                  material.setAttribute('transparency', originalTransparency);\n                  material.removeAttribute('data-original-transparency');\n                }\n\n                // Reset diffuse color from transparency effect\n                if (material.hasAttribute('data-original-diffuse-color')) {\n                  const originalDiffuseColor = material.getAttribute('data-original-diffuse-color') || '0.8 0.8 0.8';\n                  material.setAttribute('diffuseColor', originalDiffuseColor);\n                  material.removeAttribute('data-original-diffuse-color');\n                }\n\n                // Reset emissive color from transparency effect\n                if (material.hasAttribute('data-original-emissive-color')) {\n                  const originalEmissiveColor = material.getAttribute('data-original-emissive-color') || '0 0 0';\n                  material.setAttribute('emissiveColor', originalEmissiveColor);\n                  material.removeAttribute('data-original-emissive-color');\n                }\n              }\n            }\n          } else {\n            // This shape is NOT part of the current step - hide it\n            shape.setAttribute('render', 'false');\n          }\n        }\n      });\n    } else {\n      // Normal mode (explorer): show all shapes except manually hidden ones\n      allShapes.forEach((shape) => {\n        const shapeId = shape.getAttribute('id');\n        if (shapeId) {\n          // Check if this shape was manually hidden\n          if (currentHidden.has(shapeId)) {\n            // Keep manually hidden parts hidden\n            shape.setAttribute('render', 'false');\n          } else {\n            // Show and reset all other shapes\n            shape.setAttribute('render', 'true');\n\n            // Remove all highlights and reset transparency\n            const material = shape.querySelector('Material') as HTMLElement;\n            if (material) {\n              // Reset highlight\n              if (material.hasAttribute('data-original-color')) {\n                const originalColor =\n                  material.getAttribute('data-original-color') || '0 0 0';\n                const attributeName =\n                  material.getAttribute('data-color-attribute') || 'diffuseColor';\n                material.setAttribute(attributeName, originalColor);\n                material.removeAttribute('data-original-color');\n                material.removeAttribute('data-color-attribute');\n              }\n\n              // Reset transparency and color attributes (enhanced transparency reset)\n              if (material.hasAttribute('data-original-transparency')) {\n                const originalTransparency =\n                  material.getAttribute('data-original-transparency') || '0';\n                material.setAttribute('transparency', originalTransparency);\n                material.removeAttribute('data-original-transparency');\n              }\n\n              // Reset diffuse color from transparency effect\n              if (material.hasAttribute('data-original-diffuse-color')) {\n                const originalDiffuseColor = material.getAttribute('data-original-diffuse-color') || '0.8 0.8 0.8';\n                material.setAttribute('diffuseColor', originalDiffuseColor);\n                material.removeAttribute('data-original-diffuse-color');\n              }\n\n              // Reset emissive color from transparency effect\n              if (material.hasAttribute('data-original-emissive-color')) {\n                const originalEmissiveColor = material.getAttribute('data-original-emissive-color') || '0 0 0';\n                material.setAttribute('emissiveColor', originalEmissiveColor);\n                material.removeAttribute('data-original-emissive-color');\n              }\n            }\n          }\n        }\n      });\n    }\n\n    // Reset states - preserve hidden parts in BOTH assembly and explorer modes\n    setPartState((prev) => ({\n      highlighted: new Set(),\n      hidden: prev.hidden, // Preserve manually hidden parts in all modes\n      isolated: new Set(),\n    }));\n\n    setPartsTreeOperations((prev) => ({\n      highlighted: new Set(),\n      hidden: prev.hidden, // Preserve manually hidden parts in all modes\n      isolated: new Set(),\n    }));\n\n    resetExplosion();\n\n    // Clear isolation context\n    // Only clear assemblyStepParts if we're exiting the step completely (not just exiting isolation)\n    if (!currentStepParts || currentStepParts.length === 0) {\n      setIsolationSettings((prev) => ({\n        ...prev,\n        isolatedPartName: undefined,\n        assemblyStepParts: undefined,\n      }));\n      setCurrentlyVisibleShapes(new Set());\n    } else {\n      setIsolationSettings((prev) => ({\n        ...prev,\n        isolatedPartName: undefined,\n        // Keep assemblyStepParts so future isolations work correctly\n      }));\n    }\n\n    // Restore original center (if not in step context)\n    if (!currentStepParts || currentStepParts.length === 0) {\n      // Restore the original center of rotation for the best default view\n      restoreOriginalCenter();\n    }\n\n    // logCurrentCenter('AFTER Show All Parts');\n  }, [getAllShapeElements, resetExplosion, restoreOriginalCenter]);\n\n  // ========================================\n  // EXIT ISOLATION (Preserve Hidden State)\n  // ========================================\n\n  const exitIsolation = useCallback((currentStepParts?: Part[] | null) => {\n    const allShapes = getAllShapeElements();\n    const currentHidden = partState.hidden;\n\n    // console.log('🔍 exitIsolation called - currentStepParts:', currentStepParts?.length, 'currentHidden:', currentHidden.size);\n\n    // Check if we're currently in a step with parts\n    if (currentStepParts && currentStepParts.length > 0) {\n      // Assembly mode: show step parts (except manually hidden), hide everything else\n      const stepShapeIds = new Set<string>();\n      currentStepParts.forEach(part => {\n        const partShapeIds = collectShapeIds(part);\n        partShapeIds.forEach(id => stepShapeIds.add(id));\n      });\n\n      allShapes.forEach((shape) => {\n        const shapeId = shape.getAttribute('id');\n        if (shapeId) {\n          if (stepShapeIds.has(shapeId)) {\n            // This shape is part of the current step\n            if (currentHidden.has(shapeId)) {\n              // Keep manually hidden parts hidden\n              shape.setAttribute('render', 'false');\n            } else {\n              // Show and reset transparency/highlights\n              shape.setAttribute('render', 'true');\n\n              const material = shape.querySelector('Material') as HTMLElement;\n              if (material) {\n                // Reset highlight\n                if (material.hasAttribute('data-original-color')) {\n                  const originalColor = material.getAttribute('data-original-color') || '0 0 0';\n                  const attributeName = material.getAttribute('data-color-attribute') || 'diffuseColor';\n                  material.setAttribute(attributeName, originalColor);\n                  material.removeAttribute('data-original-color');\n                  material.removeAttribute('data-color-attribute');\n                }\n\n                // Reset transparency\n                if (material.hasAttribute('data-original-transparency')) {\n                  const originalTransparency = material.getAttribute('data-original-transparency') || '0';\n                  material.setAttribute('transparency', originalTransparency);\n                  material.removeAttribute('data-original-transparency');\n                }\n\n                // Reset diffuse color\n                if (material.hasAttribute('data-original-diffuse-color')) {\n                  const originalDiffuseColor = material.getAttribute('data-original-diffuse-color') || '0.8 0.8 0.8';\n                  material.setAttribute('diffuseColor', originalDiffuseColor);\n                  material.removeAttribute('data-original-diffuse-color');\n                }\n\n                // Reset emissive color\n                if (material.hasAttribute('data-original-emissive-color')) {\n                  const originalEmissiveColor = material.getAttribute('data-original-emissive-color') || '0 0 0';\n                  material.setAttribute('emissiveColor', originalEmissiveColor);\n                  material.removeAttribute('data-original-emissive-color');\n                }\n              }\n            }\n          } else {\n            // This shape is NOT part of the current step - hide it\n            shape.setAttribute('render', 'false');\n          }\n        }\n      });\n    } else {\n      // Normal mode: show all shapes (except manually hidden) and reset\n      allShapes.forEach((shape) => {\n        const shapeId = shape.getAttribute('id');\n        if (shapeId) {\n          if (currentHidden.has(shapeId)) {\n            // Keep manually hidden parts hidden\n            shape.setAttribute('render', 'false');\n          } else {\n            // Show and reset\n            shape.setAttribute('render', 'true');\n\n            const material = shape.querySelector('Material') as HTMLElement;\n            if (material) {\n              // Reset highlight\n              if (material.hasAttribute('data-original-color')) {\n                const originalColor = material.getAttribute('data-original-color') || '0 0 0';\n                const attributeName = material.getAttribute('data-color-attribute') || 'diffuseColor';\n                material.setAttribute(attributeName, originalColor);\n                material.removeAttribute('data-original-color');\n                material.removeAttribute('data-color-attribute');\n              }\n\n              // Reset transparency\n              if (material.hasAttribute('data-original-transparency')) {\n                const originalTransparency = material.getAttribute('data-original-transparency') || '0';\n                material.setAttribute('transparency', originalTransparency);\n                material.removeAttribute('data-original-transparency');\n              }\n\n              // Reset diffuse color\n              if (material.hasAttribute('data-original-diffuse-color')) {\n                const originalDiffuseColor = material.getAttribute('data-original-diffuse-color') || '0.8 0.8 0.8';\n                material.setAttribute('diffuseColor', originalDiffuseColor);\n                material.removeAttribute('data-original-diffuse-color');\n              }\n\n              // Reset emissive color\n              if (material.hasAttribute('data-original-emissive-color')) {\n                const originalEmissiveColor = material.getAttribute('data-original-emissive-color') || '0 0 0';\n                material.setAttribute('emissiveColor', originalEmissiveColor);\n                material.removeAttribute('data-original-emissive-color');\n              }\n            }\n          }\n        }\n      });\n    }\n\n    // Clear isolation state (but preserve hidden state)\n    setPartState((prev) => ({\n      ...prev,\n      highlighted: new Set(),\n      isolated: new Set(),\n      // Keep hidden state intact - this is the key difference from showAllParts\n    }));\n\n    setPartsTreeOperations((prev) => ({\n      ...prev,\n      highlighted: new Set(),\n      isolated: new Set(),\n      // Keep hidden state intact\n    }));\n\n    // Clear isolation settings\n    setIsolationSettings({\n      transparencyLevel: 70,\n      hideTransparent: false,\n      isolatedPartName: undefined,\n      assemblyStepParts: currentStepParts && currentStepParts.length > 0 ? currentStepParts : undefined,\n    });\n\n    resetExplosion();\n\n    // Handle center of rotation\n    if (currentStepParts && currentStepParts.length > 0) {\n      const stepShapeIds: string[] = [];\n      currentStepParts.forEach(part => {\n        const partShapeIds = collectShapeIds(part);\n        stepShapeIds.push(...partShapeIds);\n      });\n      if (stepShapeIds.length > 0) {\n        recenterToShapeIds(stepShapeIds, '🎯 Exit Isolation (Assembly)');\n      }\n    } else {\n      const restored = restoreOriginalCenter();\n      if (!restored) {\n        const allShapeIds = Array.from(allShapes)\n          .map(shape => shape.getAttribute('id'))\n          .filter(Boolean) as string[];\n        if (allShapeIds.length > 0) {\n          recenterToShapeIds(allShapeIds, '🎯 Exit Isolation (Explorer)');\n        }\n      }\n    }\n  }, [getAllShapeElements, partState.hidden, resetExplosion, recenterToShapeIds, restoreOriginalCenter, collectShapeIds]);\n\n  // ========================================\n  // ISOLATION UPDATE FUNCTIONS\n  // ========================================\n\n  const updateIsolationTransparency = useCallback(\n    (transparencyLevel: number) => {\n      const allShapes = getAllShapeElements();\n      const isolatedIds = Array.from(partState.isolated);\n      const currentHidden = partState.hidden;\n\n      if (isolatedIds.length === 0) return;\n\n      // Check if we're in assembly mode\n      const { assemblyStepParts, hideTransparent } = isolationSettings;\n\n      // If hide mode is enabled, ignore transparency updates\n      if (hideTransparent) return;\n\n      if (assemblyStepParts && assemblyStepParts.length > 0) {\n        // Assembly mode: Update transparency within step context\n        const stepShapeIds = new Set<string>();\n        assemblyStepParts.forEach(part => {\n          const partShapeIds = collectShapeIds(part);\n          partShapeIds.forEach(id => stepShapeIds.add(id));\n        });\n\n        allShapes.forEach((shape) => {\n          const shapeId = shape.getAttribute('id');\n          if (shapeId && stepShapeIds.has(shapeId) && !isolatedIds.includes(shapeId) && !currentHidden.has(shapeId)) {\n            // Non-isolated shapes within step - update transparency\n            shape.setAttribute('render', 'true');\n            setShapeTransparency(shapeId, transparencyLevel / 100);\n          }\n        });\n      } else {\n        // Normal mode: Update transparency for all non-isolated shapes\n        allShapes.forEach((shape) => {\n          const shapeId = shape.getAttribute('id');\n          if (shapeId && !isolatedIds.includes(shapeId) && !currentHidden.has(shapeId)) {\n            shape.setAttribute('render', 'true');\n            setShapeTransparency(shapeId, transparencyLevel / 100);\n          }\n        });\n      }\n\n      // Update settings\n      setIsolationSettings((prev) => ({\n        ...prev,\n        transparencyLevel,\n      }));\n    },\n    [getAllShapeElements, partState.isolated, partState.hidden, isolationSettings, setShapeTransparency],\n  );\n\n  const updateIsolationHideTransparent = useCallback(\n    (hideTransparent: boolean) => {\n      const allShapes = getAllShapeElements();\n      const isolatedIds = Array.from(partState.isolated);\n      const currentHidden = partState.hidden;\n\n      if (isolatedIds.length === 0) return;\n\n      const { assemblyStepParts, transparencyLevel } = isolationSettings;\n\n      if (assemblyStepParts && assemblyStepParts.length > 0) {\n        // Assembly mode: Toggle within step context\n        const stepShapeIds = new Set<string>();\n        assemblyStepParts.forEach(part => {\n          const partShapeIds = collectShapeIds(part);\n          partShapeIds.forEach(id => stepShapeIds.add(id));\n        });\n\n        allShapes.forEach((shape) => {\n          const shapeId = shape.getAttribute('id');\n          if (shapeId && stepShapeIds.has(shapeId) && !isolatedIds.includes(shapeId) && !currentHidden.has(shapeId)) {\n            if (hideTransparent) {\n              // Hide non-isolated parts\n              shape.setAttribute('render', 'false');\n            } else {\n              // Show with transparency\n              shape.setAttribute('render', 'true');\n              setShapeTransparency(shapeId, transparencyLevel / 100);\n            }\n          }\n        });\n      } else {\n        // Normal mode: Toggle for all non-isolated shapes\n        allShapes.forEach((shape) => {\n          const shapeId = shape.getAttribute('id');\n          if (shapeId && !isolatedIds.includes(shapeId) && !currentHidden.has(shapeId)) {\n            if (hideTransparent) {\n              // Hide non-isolated parts\n              shape.setAttribute('render', 'false');\n            } else {\n              // Show with transparency\n              shape.setAttribute('render', 'true');\n              setShapeTransparency(shapeId, transparencyLevel / 100);\n            }\n          }\n        });\n      }\n\n      // Update settings\n      setIsolationSettings((prev) => ({\n        ...prev,\n        hideTransparent,\n      }));\n\n      // Recenter if switching to hide mode\n      if (hideTransparent) {\n        recenterToShapeIds(isolatedIds, '🎯 Hide Mode');\n      } else {\n        // Restore original center when switching to transparency mode\n        restoreOriginalCenter();\n      }\n    },\n    [getAllShapeElements, partState.isolated, partState.hidden, isolationSettings, setShapeTransparency, recenterToShapeIds, restoreOriginalCenter],\n  );\n\n  // ========================================\n  // STATE QUERY FUNCTIONS\n  // ========================================\n\n  const isShapeHighlighted = useCallback(\n    (shapeId: string): boolean => {\n      return partState.highlighted.has(shapeId);\n    },\n    [partState.highlighted],\n  );\n\n  const isShapeHidden = useCallback(\n    (shapeId: string): boolean => {\n      return partState.hidden.has(shapeId);\n    },\n    [partState.hidden],\n  );\n\n  const areShapesIsolated = useCallback(\n    (shapeIds: string[]): boolean => {\n      // Check if these are the currently isolated shapes\n      if (partState.isolated.size === 0) return false;\n      return (\n        shapeIds.every((id) => partState.isolated.has(id)) &&\n        shapeIds.length === partState.isolated.size\n      );\n    },\n    [partState.isolated],\n  );\n\n  // ========================================\n  // EXPLOSION AND ANIMATION FUNCTIONS\n  // ========================================\n\n  const storeOriginalTransforms = useCallback(() => {\n    if (!containerRef.current) return;\n\n    const transforms = containerRef.current.querySelectorAll('Transform');\n    const originalTransforms = new Map<string, string>();\n\n    transforms.forEach((transform) => {\n      const id = transform.getAttribute('id');\n      const translation = transform.getAttribute('translation') || '0 0 0';\n      if (id) {\n        originalTransforms.set(id, translation);\n      }\n    });\n\n    originalTransformsRef.current = originalTransforms;\n  }, []);\n\n  // ========================================\n  // UNIFIED EXPLOSION AND ANIMATION SYSTEM\n  // ========================================\n\n  const calculateExplodedPosition = useCallback(\n    (\n      originalPos: string,\n      centerPoint: number[] = [0, 0, 0],\n      factor: number = 1,\n      level: number = 0,\n      partId?: string,\n    ): string => {\n      // Configuration constants\n      const config = {\n        baseDistance: 2.0,\n        levelMultiplier: 20,\n      };\n\n      if (factor === 0) {\n        return originalPos;\n      }\n\n      // Parse original position\n      const pos = originalPos.split(' ').map(Number);\n\n      // Calculate vector from center to position\n      const deltaX = pos[0] - centerPoint[0];\n      const deltaY = pos[1] - centerPoint[1];\n      const deltaZ = pos[2] - centerPoint[2];\n\n      const distanceFromCenter = Math.sqrt(\n        deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ,\n      );\n\n      let direction: [number, number, number];\n\n      // Generate pseudo-random but consistent direction based on partId\n      if (partId) {\n        // Create a better hash from the partId for more distinct randomness\n        let hash = 0;\n        for (let i = 0; i < partId.length; i++) {\n          const char = partId.charCodeAt(i);\n          hash = (hash << 5) - hash + char;\n          hash = hash & hash; // Convert to 32-bit integer\n        }\n        hash = Math.abs(hash);\n\n        // Use golden ratio for better distribution\n        const goldenRatio = 1.618033988749895;\n        const hash2 = (hash * goldenRatio) % 1000;\n        const hash3 = (hash * goldenRatio * goldenRatio) % 1000;\n        const hash4 = (hash * 7919) % 1000; // Large prime for better distribution\n\n        // Generate spherical coordinates for truly random 3D directions\n        // Phi: angle from positive Y-axis (0 to PI)\n        const phi = (hash2 / 1000) * Math.PI;\n\n        // Theta: angle around Y-axis (0 to 2*PI)\n        const theta = (hash3 / 1000) * 2 * Math.PI;\n\n        // Convert spherical to Cartesian coordinates\n        direction = [\n          Math.sin(phi) * Math.cos(theta), // X\n          Math.cos(phi), // Y\n          Math.sin(phi) * Math.sin(theta), // Z\n        ];\n\n        // Add variation based on string length and first character\n        const lengthVariation = (partId.length % 7) * 0.1;\n        const firstCharVariation = (partId.charCodeAt(0) % 13) * 0.05;\n\n        direction[0] +=\n          lengthVariation * Math.cos(firstCharVariation * Math.PI);\n        direction[1] +=\n          lengthVariation * Math.sin(firstCharVariation * Math.PI);\n        direction[2] +=\n          lengthVariation * Math.cos(firstCharVariation * Math.PI * 2);\n\n        // Add some bias based on original position to prevent complete randomness\n        if (distanceFromCenter > 0.001) {\n          // Mix random direction with natural direction (10% natural, 90% random)\n          const naturalWeight = 0.1;\n          const randomWeight = 0.9;\n\n          const naturalDirection = [\n            deltaX / distanceFromCenter,\n            deltaY / distanceFromCenter,\n            deltaZ / distanceFromCenter,\n          ];\n\n          direction = [\n            naturalDirection[0] * naturalWeight + direction[0] * randomWeight,\n            naturalDirection[1] * naturalWeight + direction[1] * randomWeight,\n            naturalDirection[2] * naturalWeight + direction[2] * randomWeight,\n          ];\n        }\n\n        // Special handling for certain hash values to ensure variety\n        const directionType = hash4 % 20; // More options for better distribution\n\n        switch (directionType) {\n          case 0: // Pure up\n            direction = [0, 1, 0];\n            break;\n          case 1: // Pure down\n            direction = [0, -1, 0];\n            break;\n          case 2: // Pure right\n            direction = [1, 0, 0];\n            break;\n          case 3: // Pure left\n            direction = [-1, 0, 0];\n            break;\n          case 4: // Pure forward\n            direction = [0, 0, 1];\n            break;\n          case 5: // Pure backward\n            direction = [0, 0, -1];\n            break;\n          case 6: // Diagonal up-right\n            direction = [0.707, 0.707, 0];\n            break;\n          case 7: // Diagonal down-left\n            direction = [-0.707, -0.707, 0];\n            break;\n          case 8: // Diagonal up-forward\n            direction = [0, 0.707, 0.707];\n            break;\n          case 9: // Diagonal down-backward\n            direction = [0, -0.707, -0.707];\n            break;\n          // Cases 10-19 use the calculated random direction\n        }\n      } else {\n        // Fallback: radial explosion from center\n        if (distanceFromCenter < 0.001) {\n          direction = [1, 0, 0]; // Default to right\n        } else {\n          direction = [\n            deltaX / distanceFromCenter,\n            deltaY / distanceFromCenter,\n            deltaZ / distanceFromCenter,\n          ];\n        }\n      }\n\n      // Normalize the direction vector\n      const magnitude = Math.sqrt(\n        direction[0] * direction[0] +\n          direction[1] * direction[1] +\n          direction[2] * direction[2],\n      );\n      if (magnitude > 0) {\n        direction = [\n          direction[0] / magnitude,\n          direction[1] / magnitude,\n          direction[2] / magnitude,\n        ];\n      }\n\n      // Calculate explosion distance\n      const explosionDistance =\n        config.baseDistance * (1 + level * config.levelMultiplier) * factor;\n\n      // Calculate exploded position\n      const exploded = [\n        pos[0] + direction[0] * explosionDistance,\n        pos[1] + direction[1] * explosionDistance,\n        pos[2] + direction[2] * explosionDistance,\n      ];\n\n      return exploded.join(' ');\n    },\n    [],\n  );\n\n  const updateExplosion = useCallback(\n    (factor: number, specificTransforms?: Part[]) => {\n      if (!containerRef.current || originalTransformsRef.current.size === 0) {\n        console.warn(\n          'Cannot update explosion: container or original transforms not available',\n        );\n        return;\n      }\n\n      // Get transforms from DOM - either specific ones or all\n      let transforms: NodeListOf<Element> | Element[];\n\n      if (specificTransforms && specificTransforms.length > 0) {\n        // Recursive function to collect transform elements from parts and their children\n        const getTransformElements = (part: Part) => {\n          const results = [];\n\n          // Check if the part is a group\n          if (part.type === 'group' || part.metadata?.isGroup) {\n            // Process children if they exist\n            if (part.children && part.children.length > 0) {\n              part.children.forEach((child) => {\n                // Recursively get transform elements from children\n                results.push(...getTransformElements(child));\n              });\n            }\n          } else {\n            // Handle single transform case\n            const transformElement = containerRef.current?.querySelector(\n              `Transform[id=\"${CSS.escape(part.id)}\"]`,\n            );\n            if (!transformElement) {\n              console.warn(\n                `Transform element not found for part ID: ${part.id}`,\n              );\n            }\n            if (transformElement) {\n              results.push(transformElement);\n            }\n          }\n\n          return results;\n        };\n\n        // Get specific transform elements by their IDs\n        transforms = specificTransforms\n          .flatMap((part) => getTransformElements(part))\n          .filter(Boolean) as Element[];\n      } else {\n        // Use all transforms (existing behavior)\n        transforms = containerRef.current.querySelectorAll('Transform');\n      }\n\n      // Extract transform parts information from parts tree\n      const transformParts = (() => {\n        const transformParts: Array<{\n          id: string;\n          isGrouped: boolean;\n          groupId: string | null;\n        }> = [];\n\n        const traverseParts = (\n          partsList: Part[],\n          topLevelGroupId: string | null = null,\n        ) => {\n          partsList.forEach((part: Part) => {\n            // Determine the groupId for this part\n            let currentGroupId = topLevelGroupId;\n\n            // If this part is a group and we haven't set a top-level group yet,\n            // this becomes the top-level group for this branch\n            if (\n              (part.type === 'group' || part.metadata?.isGroup) &&\n              part.id &&\n              topLevelGroupId === null\n            ) {\n              currentGroupId = part.id;\n            }\n\n            // If this is a transform, add it to our collection\n            if (part.type === 'transform' && part.id) {\n              transformParts.push({\n                id: part.id,\n                isGrouped: currentGroupId !== null,\n                groupId: currentGroupId,\n              });\n            }\n\n            // Traverse children, passing down the top-level group ID\n            if (part.children) {\n              traverseParts(part.children, currentGroupId);\n            }\n          });\n        };\n        if (\n          partsRef.current[0] &&\n          partsRef.current[0].children &&\n          containerRef.current &&\n          !specificTransforms\n        ) {\n          traverseParts(partsRef.current[0].children);\n        } else if (specificTransforms) {\n          traverseParts(specificTransforms);\n        }\n\n        return transformParts;\n      })();\n\n      // Calculate center point of all transforms\n      const positions: number[][] = [];\n      transforms.forEach((transform) => {\n        const id = transform.getAttribute('id');\n        if (!id) return;\n        const originalTranslation = originalTransformsRef.current.get(id);\n        if (originalTranslation) {\n          const pos = originalTranslation.split(' ').map(Number);\n          positions.push(pos);\n        }\n      });\n\n      // Calculate bounding box center instead of average position\n      let centerPoint = [0, 0, 0];\n      if (positions.length > 0) {\n        const minX = Math.min(...positions.map((p) => p[0]));\n        const maxX = Math.max(...positions.map((p) => p[0]));\n        const minY = Math.min(...positions.map((p) => p[1]));\n        const maxY = Math.max(...positions.map((p) => p[1]));\n        const minZ = Math.min(...positions.map((p) => p[2]));\n        const maxZ = Math.max(...positions.map((p) => p[2]));\n\n        centerPoint = [(minX + maxX) / 2, (minY + maxY) / 2, (minZ + maxZ) / 2];\n      }\n\n      // Step 1: Group transforms by groupId\n      const groupMap = new Map<string, Set<string>>();\n      transformParts.forEach((partInfo) => {\n        if (partInfo.isGrouped && partInfo.groupId) {\n          if (!groupMap.has(partInfo.groupId)) {\n            groupMap.set(partInfo.groupId, new Set<string>());\n          }\n          groupMap.get(partInfo.groupId)!.add(partInfo.id);\n        }\n      });\n\n      // Step 2: Compute offset for each group\n      const groupOffsets = new Map<string, [number, number, number]>();\n\n      groupMap.forEach((transformIds, groupId) => {\n        // Compute group center\n        let sumX = 0,\n          sumY = 0,\n          sumZ = 0;\n        let count = 0;\n\n        transformIds.forEach((id) => {\n          const originalTranslation = originalTransformsRef.current.get(id);\n          if (originalTranslation) {\n            const pos = originalTranslation.split(' ').map(Number);\n            sumX += pos[0];\n            sumY += pos[1];\n            sumZ += pos[2];\n            count++;\n          }\n        });\n\n        if (count > 0) {\n          const groupCenter = [sumX / count, sumY / count, sumZ / count];\n          const groupCenterStr = groupCenter.join(' ');\n\n          // Calculate exploded position for the group center\n          const explodedCenterStr = calculateExplodedPosition(\n            groupCenterStr,\n            centerPoint,\n            factor,\n            3,\n            groupId, // Use groupId for consistent direction\n          );\n          const explodedCenter = explodedCenterStr.split(' ').map(Number);\n\n          // Compute offset for the entire group\n          const offset: [number, number, number] = [\n            explodedCenter[0] - groupCenter[0],\n            explodedCenter[1] - groupCenter[1],\n            explodedCenter[2] - groupCenter[2],\n          ];\n          groupOffsets.set(groupId, offset);\n        }\n      });\n\n      // Step 3: Apply the same offset to all transforms in each group\n      transforms.forEach((transform) => {\n        const id = transform.getAttribute('id');\n        if (!id) return;\n        const partInfo = transformParts.find((p) => p.id === id);\n        if (!partInfo) return;\n        const originalTranslation = originalTransformsRef.current.get(id);\n        if (!originalTranslation) return;\n\n        let targetPosition: string;\n\n        if (\n          partInfo.isGrouped &&\n          partInfo.groupId &&\n          groupOffsets.has(partInfo.groupId)\n        ) {\n          // Apply the group offset to maintain relative positions\n          const offset = groupOffsets.get(partInfo.groupId)!;\n          const [x, y, z] = originalTranslation.split(' ').map(Number);\n          targetPosition = [x + offset[0], y + offset[1], z + offset[2]].join(\n            ' ',\n          );\n        } else {\n          // Individual explosion for non-grouped transforms\n          targetPosition = calculateExplodedPosition(\n            originalTranslation,\n            centerPoint,\n            factor,\n            3,\n            id,\n          );\n        }\n\n        transform.setAttribute('translation', targetPosition);\n      });\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [calculateExplodedPosition],\n  );\n\n  // Simple explosion change handler\n  const handleExplosionChange = useCallback(\n    (factor: number, specificTransforms?: Part[]) => {\n      // Store original transforms if not already stored\n      if (originalTransformsRef.current.size === 0) {\n        storeOriginalTransforms();\n\n        // Wait a bit for the storage to complete, then apply explosion\n        setTimeout(() => {\n          updateExplosion(factor, specificTransforms);\n        }, 100);\n      } else {\n        updateExplosion(factor, specificTransforms);\n      }\n    },\n    [storeOriginalTransforms, updateExplosion],\n  );\n\n  // ========================================\n  // LINEAR DIRECTIONAL ANIMATION SYSTEM\n  // ========================================\n\n  const calculateDirectionalExplodedPosition = useCallback(\n    (\n      originalTranslation: string,\n      direction: string,\n      factor: number,\n      baseDistance: number = 50,\n    ): string => {\n      const pos = originalTranslation.split(' ').map(Number);\n      const x3dElement = containerRef.current?.querySelector('x3d');\n      let dirVector = [0, 0, 0];\n\n      if (!x3dElement || typeof (window as any).x3dom === 'undefined') {\n        // Fallback to world coordinates\n        const movements: Record<string, number[]> = {\n          top: [0, baseDistance, 0],\n          bottom: [0, -baseDistance, 0],\n          left: [-baseDistance, 0, 0],\n          right: [baseDistance, 0, 0],\n          front: [0, 0, baseDistance],\n          back: [0, 0, -baseDistance],\n          'top-left': [-baseDistance, baseDistance, 0],\n          'top-right': [baseDistance, baseDistance, 0],\n          'bottom-left': [-baseDistance, -baseDistance, 0],\n          'bottom-right': [baseDistance, -baseDistance, 0],\n        };\n        dirVector = movements[direction] || [0, 0, 0];\n      } else {\n        try {\n          const runtime = (x3dElement as any).runtime;\n          if (!runtime) {\n            // Fallback if runtime not available\n            const movements: Record<string, number[]> = {\n              top: [0, baseDistance, 0],\n              bottom: [0, -baseDistance, 0],\n              left: [-baseDistance, 0, 0],\n              right: [baseDistance, 0, 0],\n              front: [0, 0, baseDistance],\n              back: [0, 0, -baseDistance],\n              'top-left': [-baseDistance, baseDistance, 0],\n              'top-right': [baseDistance, baseDistance, 0],\n              'bottom-left': [-baseDistance, -baseDistance, 0],\n              'bottom-right': [baseDistance, -baseDistance, 0],\n            };\n            dirVector = movements[direction] || [0, 0, 0];\n          } else {\n            // Get the current view matrix from X3DOM runtime\n            const viewMatrix = runtime.viewMatrix();\n            const invMatrix = viewMatrix.inverse();\n\n            // Extract rotation matrix from inverse view matrix\n            const rotMatrix = [\n              [invMatrix._00, invMatrix._01, invMatrix._02],\n              [invMatrix._10, invMatrix._11, invMatrix._12],\n              [invMatrix._20, invMatrix._21, invMatrix._22],\n            ];\n\n            // Define movement in camera space based on direction\n            let localMovement = [0, 0, 0];\n            switch (direction) {\n              case 'top':\n                localMovement = [0, baseDistance, 0];\n                break;\n              case 'bottom':\n                localMovement = [0, -baseDistance, 0];\n                break;\n              case 'left':\n                localMovement = [-baseDistance, 0, 0];\n                break;\n              case 'right':\n                localMovement = [baseDistance, 0, 0];\n                break;\n              case 'front':\n                localMovement = [0, 0, -baseDistance];\n                break;\n              case 'back':\n                localMovement = [0, 0, baseDistance];\n                break;\n              case 'top-left':\n                localMovement = [-baseDistance, baseDistance, 0];\n                break;\n              case 'top-right':\n                localMovement = [baseDistance, baseDistance, 0];\n                break;\n              case 'bottom-left':\n                localMovement = [-baseDistance, -baseDistance, 0];\n                break;\n              case 'bottom-right':\n                localMovement = [baseDistance, -baseDistance, 0];\n                break;\n            }\n\n            // Transform camera-space movement to world coordinates\n            const [lx, ly, lz] = localMovement;\n            const worldX =\n              rotMatrix[0][0] * lx +\n              rotMatrix[0][1] * ly +\n              rotMatrix[0][2] * lz;\n            const worldY =\n              rotMatrix[1][0] * lx +\n              rotMatrix[1][1] * ly +\n              rotMatrix[1][2] * lz;\n            const worldZ =\n              rotMatrix[2][0] * lx +\n              rotMatrix[2][1] * ly +\n              rotMatrix[2][2] * lz;\n\n            dirVector = [worldX, worldY, worldZ];\n          }\n        } catch (error) {\n          // Fallback on error\n          const movements: Record<string, number[]> = {\n            top: [0, baseDistance, 0],\n            bottom: [0, -baseDistance, 0],\n            left: [-baseDistance, 0, 0],\n            right: [baseDistance, 0, 0],\n            front: [0, 0, baseDistance],\n            back: [0, 0, -baseDistance],\n            'top-left': [-baseDistance, baseDistance, 0],\n            'top-right': [baseDistance, baseDistance, 0],\n            'bottom-left': [-baseDistance, -baseDistance, 0],\n            'bottom-right': [baseDistance, -baseDistance, 0],\n          };\n          dirVector = movements[direction] || [0, 0, 0];\n        }\n      }\n\n      // Apply the direction vector with the given factor\n      const exploded = [\n        pos[0] + dirVector[0] * factor,\n        pos[1] + dirVector[1] * factor,\n        pos[2] + dirVector[2] * factor,\n      ];\n\n      return exploded.join(' ');\n    },\n    [containerRef],\n  );\n\n  const updateDirectionalExplosion = useCallback(\n    (factor: number, partsWithDirections: Part[]) => {\n      if (!containerRef.current || originalTransformsRef.current.size === 0) {\n        console.warn(\n          'Cannot update directional explosion: container or original transforms not available',\n        );\n        return;\n      }\n\n      // Only log on first call (factor = 1) to avoid spam\n      if (factor === 1) {\n        console.log('🎯 Directional Explosion Started:', {\n          partsCount: partsWithDirections.length,\n          partsWithDirections: partsWithDirections.map((part) => ({\n            id: part.id,\n            name: part.name,\n            type: part.type,\n            direction: part.metadata?.animationDirection,\n          })),\n        });\n      }\n\n      // Process parts directly - handle groups and transforms\n      const processedTransforms = new Set<string>(); // Track which transforms we've already animated\n\n      partsWithDirections.forEach((part) => {\n        const direction = part.metadata?.animationDirection;\n\n\n        // Handle groups with all their children moving as a unit\n        if ((part.type === 'group' || part.metadata?.isGroup) && part.children) {\n\n          // Calculate ONE offset for the entire group\n          let groupOffset: [number, number, number] = [0, 0, 0];\n\n          if (direction) {\n            // Group has a direction - calculate directional offset\n            const tempPos = calculateDirectionalExplodedPosition(\n              '0 0 0',\n              direction,\n              factor,\n            );\n            groupOffset = tempPos.split(' ').map(Number) as [number, number, number];\n\n            console.log(`📦 Group ${part.id} (${part.name}) calculated offset: [${groupOffset.join(', ')}] for direction: ${direction}`);\n\n            if (factor === 1) {\n              console.log(`📦 Group ${part.id} (${part.name}) moving ${direction} as a unit with offset [${groupOffset.join(', ')}]`);\n            }\n          } else {\n            // Group without direction - use random explosion but same for all parts\n            const tempPos = calculateExplodedPosition(\n              '0 0 0',\n              [0, 0, 0],\n              factor,\n              3,\n              part.id, // Use group ID for consistent direction\n            );\n            groupOffset = tempPos.split(' ').map(Number) as [number, number, number];\n\n            if (factor === 1) {\n              console.log(`🎲 Group ${part.id} (${part.name}) exploding randomly as a unit`);\n            }\n          }\n\n          // Apply THE SAME offset to ALL transforms in the group\n          const applyGroupOffset = (children: Part[], depth: number = 0) => {\n            // console.log(`${'  '.repeat(depth)}Applying offset to ${children.length} children`);\n\n            children.forEach((child) => {\n              // console.log(`${'  '.repeat(depth)}Child: ${child.name} (${child.id}), type: ${child.type}`);\n\n              if (child.type === 'transform' && child.id) {\n                const transformElement = containerRef.current?.querySelector(\n                  `Transform[id=\"${CSS.escape(child.id)}\"]`,\n                );\n                const originalTranslation = originalTransformsRef.current.get(child.id);\n\n                if (transformElement && originalTranslation) {\n                  const pos = originalTranslation.split(' ').map(Number);\n                  // Apply the group offset to maintain relative positions\n                  const targetPosition = [\n                    pos[0] + groupOffset[0],\n                    pos[1] + groupOffset[1],\n                    pos[2] + groupOffset[2],\n                  ].join(' ');\n\n                  // console.log(`${'  '.repeat(depth)}✅ Applying offset [${groupOffset.join(', ')}] to transform ${child.name}: ${originalTranslation} -> ${targetPosition}`);\n\n                  transformElement.setAttribute('translation', targetPosition);\n                  processedTransforms.add(child.id); // Mark as processed\n                } else {\n                  console.log(`${'  '.repeat(depth)}❌ Could not find element or translation for ${child.id}`);\n                }\n              }\n\n              // Recursively process nested children\n              if (child.children) {\n                applyGroupOffset(child.children, depth + 1);\n              }\n            });\n          };\n\n          applyGroupOffset(part.children, 0);\n\n        } else if (part.type === 'transform' && part.id && !processedTransforms.has(part.id)) {\n          // Handle individual transforms (not part of a group we already processed)\n          const transformElement = containerRef.current?.querySelector(\n            `Transform[id=\"${CSS.escape(part.id)}\"]`,\n          );\n          const originalTranslation = originalTransformsRef.current.get(part.id);\n\n          if (transformElement && originalTranslation) {\n            let targetPosition: string;\n\n            if (direction) {\n              // Individual transform with direction\n              targetPosition = calculateDirectionalExplodedPosition(\n                originalTranslation,\n                direction,\n                factor,\n              );\n              if (factor === 1) {\n                console.log(`📍 Transform ${part.name} moving ${direction}`);\n              }\n            } else {\n              // Individual transform without direction - use random explosion\n              targetPosition = calculateExplodedPosition(\n                originalTranslation,\n                [0, 0, 0],\n                factor,\n                3,\n                part.id,\n              );\n              if (factor === 1) {\n                console.log(`🎲 Transform ${part.name} using random explosion`);\n              }\n            }\n\n            transformElement.setAttribute('translation', targetPosition);\n            processedTransforms.add(part.id);\n          }\n        }\n      });\n    },\n    [calculateDirectionalExplodedPosition, calculateExplodedPosition],\n  );\n\n  // ========================================\n  // TRANSPARENCY FUNCTIONS\n  // ========================================\n\n  // Helper function to find transform element\n  const findTransformElement = useCallback(\n    (transformId: string): HTMLElement | null => {\n      if (!containerRef.current) return null;\n      return containerRef.current.querySelector(\n        `Transform[id=\"${CSS.escape(transformId)}\"]`,\n      ) as HTMLElement;\n    },\n    [],\n  );\n\n  // Helper function to get all shapes under a transform\n  const getShapesInTransform = useCallback(\n    (transformId: string): HTMLElement[] => {\n      const transformElement = findTransformElement(transformId);\n      if (!transformElement) return [];\n\n      return Array.from(\n        transformElement.querySelectorAll('Shape'),\n      ) as HTMLElement[];\n    },\n    [findTransformElement],\n  );\n\n  // Set transparency for all shapes in a transform\n  const setTransformTransparency = useCallback(\n    (transformId: string, transparency: number) => {\n      const shapes = getShapesInTransform(transformId);\n\n      shapes.forEach((shape) => {\n        const material = shape.querySelector('Material') as HTMLElement;\n        if (material) {\n          // Store original transparency if not already stored\n          if (!material.hasAttribute('data-original-transparency')) {\n            const originalTransparency =\n              material.getAttribute('transparency') || '0';\n            material.setAttribute(\n              'data-original-transparency',\n              originalTransparency,\n            );\n          }\n\n          // Apply transparency (0 = opaque, 1 = fully transparent)\n          material.setAttribute('transparency', transparency.toString());\n        }\n      });\n    },\n    [getShapesInTransform],\n  );\n\n  // getShapeTransparency helper (kept for compatibility)\n  const getShapeTransparency = useCallback(\n    (shapeId: string): number => {\n      const shapeElement = findShapeElement(shapeId);\n      if (!shapeElement) return 0;\n\n      const material = shapeElement.querySelector('Material') as HTMLElement;\n      if (material) {\n        const transparency = material.getAttribute('transparency');\n        return transparency ? parseFloat(transparency) : 0;\n      }\n      return 0;\n    },\n    [findShapeElement],\n  );\n\n  // ========================================\n  // CAMERA CONTROL FUNCTIONS\n  // ========================================\n\n  // Helper function to convert matrix to axis-angle representation\n  const matrixToAxisAngle = (rootMatrix: RootMatrix) => {\n    const trace = rootMatrix[0][0] + rootMatrix[1][1] + rootMatrix[2][2];\n    const angle = Math.acos(Math.max(-1, Math.min(1, (trace - 1) / 2)));\n\n    if (Math.abs(angle) < 0.001) {\n      return { x: 0, y: 1, z: 0, angle: 0 };\n    }\n\n    if (Math.abs(angle - Math.PI) < 0.001) {\n      const x = Math.sqrt(Math.max(0, (rootMatrix[0][0] + 1) / 2));\n      const y = Math.sqrt(Math.max(0, (rootMatrix[1][1] + 1) / 2));\n      const z = Math.sqrt(Math.max(0, (rootMatrix[2][2] + 1) / 2));\n      return { x, y, z, angle: Math.PI };\n    }\n\n    const factor = 1 / (2 * Math.sin(angle));\n    const x = factor * (rootMatrix[2][1] - rootMatrix[1][2]);\n    const y = factor * (rootMatrix[0][2] - rootMatrix[2][0]);\n    const z = factor * (rootMatrix[1][0] - rootMatrix[0][1]);\n\n    return { x, y, z, angle };\n  };\n\n  const getCameraSettings = useCallback((): CameraState | null => {\n    if (!containerRef.current || typeof (window as any).x3dom === 'undefined') {\n      return null;\n    }\n\n    const x3d = containerRef.current.querySelector('x3d');\n    if (!x3d) return null;\n\n    try {\n      const runtime = (x3d as any).runtime;\n      if (!runtime) return null;\n\n      const viewMatrix = runtime.viewMatrix();\n      const invMatrix = viewMatrix.inverse();\n\n      const position = {\n        x: invMatrix._03,\n        y: invMatrix._13,\n        z: invMatrix._23,\n      };\n\n      const rotMatrix: RootMatrix = [\n        [invMatrix._00, invMatrix._01, invMatrix._02],\n        [invMatrix._10, invMatrix._11, invMatrix._12],\n        [invMatrix._20, invMatrix._21, invMatrix._22],\n      ];\n\n      const orientation = matrixToAxisAngle(rotMatrix);\n\n      const distance = Math.sqrt(\n        position.x * position.x +\n          position.y * position.y +\n          position.z * position.z,\n      );\n\n      // Calculate camera angle for display (in degrees)\n      const m11 = rotMatrix[0][0]; // _00\n      const m21 = rotMatrix[1][0]; // _10\n      const m31 = rotMatrix[2][0]; // _20\n      const m32 = rotMatrix[2][1]; // _21\n      const m33 = rotMatrix[2][2]; // _22\n\n      // Calculate Euler angles (YXZ rotation order, in radians)\n      const rotationY = Math.atan2(-m31, Math.sqrt(m11 * m11 + m21 * m21));\n      const rotationX = Math.atan2(m32, m33);\n      const rotationZ = Math.atan2(m21, m11);\n\n      // Convert to degrees and take the most significant rotation\n      const angleX = Math.abs((rotationX * 180) / Math.PI);\n      const angleY = Math.abs((rotationY * 180) / Math.PI);\n      const angleZ = Math.abs((rotationZ * 180) / Math.PI);\n\n      // Use the largest angle as the primary camera angle\n      let angle = Math.max(angleX, angleY, angleZ);\n\n      // Ensure angle is within 0-360 degrees\n      if (angle > 360) angle = angle % 360;\n\n      const viewpoint = x3d.querySelector('viewpoint') || {\n        getAttribute: () => '0.785398',\n      };\n      return {\n        position,\n        orientation,\n        zoom: Number((100000 / distance).toFixed(2)), // Inverted: zoom out decreases percentage, zoom in increases percentage\n        fieldOfView: viewpoint.getAttribute('fieldOfView') || undefined,\n        angle: Math.round(angle), // Store the angle in degrees for display\n      };\n    } catch (error) {\n      console.error('Error getting camera settings:', error);\n      const viewpoint = x3d.querySelector('viewpoint');\n      if (!viewpoint) return null;\n\n      const posStr = viewpoint.getAttribute('position') || '0 5 15';\n      const oriStr = viewpoint.getAttribute('orientation') || '0 1 0 0';\n      const pos = posStr.split(' ').map(Number);\n      const ori = oriStr.split(' ').map(Number);\n\n      const fallbackDistance = Math.sqrt(\n        pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2],\n      );\n      return {\n        position: { x: pos[0], y: pos[1], z: pos[2] },\n        orientation: { x: ori[0], y: ori[1], z: ori[2], angle: ori[3] },\n        zoom: Number((1000 / fallbackDistance).toFixed(2)), // Inverted for consistency\n        fieldOfView: viewpoint.getAttribute('fieldOfView') || '0.785398',\n        angle: 0, // Default angle for fallback\n      };\n    }\n  }, []);\n  const setCameraSettings = useCallback(\n    (settings: {\n      position: { x: number; y: number; z: number };\n      orientation: { x: number; y: number; z: number; angle: number };\n      fieldOfView?: string;\n    }) => {\n      if (\n        !containerRef.current ||\n        typeof (window as any).x3dom === 'undefined'\n      ) {\n        return;\n      }\n\n      const x3d = containerRef.current.querySelector('x3d');\n      if (!x3d) return;\n\n      try {\n        const viewpoint =\n          x3d.querySelector('viewpoint') || document.createElement('viewpoint');\n        if (!x3d.querySelector('viewpoint')) {\n          x3d.querySelector('scene')?.appendChild(viewpoint);\n        }\n\n        viewpoint.setAttribute(\n          'position',\n          `${settings.position.x} ${settings.position.y} ${settings.position.z}`,\n        );\n        viewpoint.setAttribute(\n          'orientation',\n          `${settings.orientation.x} ${settings.orientation.y} ${settings.orientation.z} ${settings.orientation.angle}`,\n        );\n        if (settings.fieldOfView) {\n          viewpoint.setAttribute('fieldOfView', settings.fieldOfView);\n        }\n\n        const runtime = (x3d as any).runtime;\n        if (runtime) {\n          runtime.resetView();\n          runtime.triggerRedraw();\n        }\n      } catch (error) {\n        console.error('Error setting camera state:', error);\n      }\n    },\n    [],\n  );\n\n  // ========================================\n  // UNIFIED CONTEXT MENU HANDLERS (SYNC SHAPE AND PARTS TREE STATE)\n  // ========================================\n\n  const handleContextMenuHighlight = useCallback(\n    (shapeId: string, transformId?: string) => {\n      highlightShapes([shapeId]);\n\n      // Also sync with parts tree operations if transformId is available\n      if (transformId) {\n        setPartsTreeOperations((prev) => ({\n          ...prev,\n          highlighted: new Set([...prev.highlighted, transformId]),\n        }));\n      }\n    },\n    [highlightShapes],\n  );\n\n  const handleContextMenuRemoveHighlight = useCallback(\n    (shapeId: string, transformId?: string) => {\n      removeHighlightShapes([shapeId]);\n\n      // Also sync with parts tree operations if transformId is available\n      if (transformId) {\n        setPartsTreeOperations((prev) => ({\n          ...prev,\n          highlighted: new Set(\n            Array.from(prev.highlighted).filter((id) => id !== transformId),\n          ),\n        }));\n      }\n    },\n    [removeHighlightShapes],\n  );\n\n  const handleContextMenuHide = useCallback(\n    (shapeId: string, transformId?: string) => {\n      hideShapes([shapeId]);\n\n      // Also sync with parts tree operations if transformId is available\n      if (transformId) {\n        setPartsTreeOperations((prev) => ({\n          ...prev,\n          hidden: new Set([...prev.hidden, transformId]),\n        }));\n      }\n    },\n    [hideShapes],\n  );\n\n  const handleContextMenuShow = useCallback(\n    (shapeId: string, transformId?: string) => {\n      showShapes([shapeId]);\n\n      // Also sync with parts tree operations if transformId is available\n      if (transformId) {\n        setPartsTreeOperations((prev) => ({\n          ...prev,\n          hidden: new Set(\n            Array.from(prev.hidden).filter((id) => id !== transformId),\n          ),\n        }));\n      }\n    },\n    [showShapes],\n  );\n\n  const handleContextMenuIsolate = useCallback(\n    (shapeId: string, transformId?: string, partName?: string) => {\n      // Use assembly step parts from isolation settings if we're in a step\n      const assemblyStepParts = isolationSettings.assemblyStepParts;\n\n      // console.log('🔍 handleContextMenuIsolate - assemblyStepParts:', assemblyStepParts?.length, 'currentlyVisibleShapes:', currentlyVisibleShapes.size, 'shapeId:', shapeId);\n\n      isolateShapes([shapeId], partName, false, assemblyStepParts);\n\n      // Also sync with parts tree operations if transformId is available\n      if (transformId) {\n        setPartsTreeOperations((prev) => ({\n          ...prev,\n          isolated: new Set([transformId]), // Only one item can be isolated at a time\n        }));\n      }\n    },\n    [isolateShapes, isolationSettings.assemblyStepParts, currentlyVisibleShapes],\n  );\n\n  // ========================================\n  // PARTS TREE BATCH OPERATIONS\n  // ========================================\n\n  const highlightShapesFromPartsTree = useCallback(\n    (transformId: string, shapeIds: string[], color: string = '0.7 0.6 0') => {\n      highlightShapes(shapeIds, color);\n      setPartsTreeOperations((prev) => ({\n        ...prev,\n        highlighted: new Set([...prev.highlighted, transformId]),\n      }));\n    },\n    [highlightShapes],\n  );\n\n  const removeHighlightShapesFromPartsTree = useCallback(\n    (transformId: string, shapeIds: string[]) => {\n      removeHighlightShapes(shapeIds);\n      setPartsTreeOperations((prev) => ({\n        ...prev,\n        highlighted: new Set(\n          Array.from(prev.highlighted).filter((id) => id !== transformId),\n        ),\n      }));\n    },\n    [removeHighlightShapes],\n  );\n\n  const hideShapesFromPartsTree = useCallback(\n    (transformId: string, shapeIds: string[]) => {\n      hideShapes(shapeIds);\n      setPartsTreeOperations((prev) => ({\n        ...prev,\n        hidden: new Set([...prev.hidden, transformId]),\n      }));\n    },\n    [hideShapes],\n  );\n\n  const showShapesFromPartsTree = useCallback(\n    (transformId: string, shapeIds: string[]) => {\n      showShapes(shapeIds);\n      setPartsTreeOperations((prev) => ({\n        ...prev,\n        hidden: new Set(\n          Array.from(prev.hidden).filter((id) => id !== transformId),\n        ),\n      }));\n    },\n    [showShapes],\n  );\n\n  const isolateShapesFromPartsTree = useCallback(\n    (transformId: string, shapeIds: string[], partName?: string, assemblyStepParts?: Part[]) => {\n      // Determine if we're in assembly mode by checking if there are currently visible shapes\n      // If currentlyVisibleShapes is populated, we're in a step and should use assembly mode\n      const inAssemblyMode = currentlyVisibleShapes.size > 0;\n\n      let stepPartsToUse: Part[] | undefined = assemblyStepParts;\n\n      if (!stepPartsToUse && inAssemblyMode) {\n        // We're in assembly mode but don't have explicit assemblyStepParts\n        // Use the assemblyStepParts from isolation settings if available\n        stepPartsToUse = isolationSettings.assemblyStepParts;\n      }\n\n      // console.log('🔍 isolateShapesFromPartsTree - inAssemblyMode:', inAssemblyMode, 'currentlyVisibleShapes:', currentlyVisibleShapes.size, 'stepPartsToUse:', stepPartsToUse?.length, 'shapeIds:', shapeIds);\n      isolateShapes(shapeIds, partName, false, stepPartsToUse);\n      setPartsTreeOperations((prev) => ({\n        ...prev,\n        isolated: new Set([transformId]), // Only one item can be isolated at a time\n      }));\n    },\n    [isolateShapes, isolationSettings.assemblyStepParts, currentlyVisibleShapes],\n  );\n\n  // ========================================\n  // LEGACY COMPATIBILITY FUNCTIONS\n  // ========================================\n\n  // For compatibility with existing parts tree and context menu\n  const isPartHighlighted = useCallback(\n    (partId: string): boolean => {\n      return partsTreeOperations.highlighted.has(partId);\n    },\n    [partsTreeOperations.highlighted],\n  );\n\n  const isPartHidden = useCallback(\n    (partId: string): boolean => {\n      return partsTreeOperations.hidden.has(partId);\n    },\n    [partsTreeOperations.hidden],\n  );\n\n  const isPartIsolated = useCallback(\n    (partId: string): boolean => {\n      return partsTreeOperations.isolated.has(partId);\n    },\n    [partsTreeOperations.isolated],\n  );\n\n  // ========================================\n  // SHAPE CLICK HANDLER\n  // ========================================\n\n  const handleShapeClick = useCallback(\n    (shape: Element, event: MouseEvent): void => {\n      // Find the nearest shape element first\n      const nearestShape = shape.closest('Shape');\n      const shapeId = nearestShape?.getAttribute('id') || '';\n\n      // Find the nearest transform element to get the transformId\n      const nearestTransform = shape.closest('Transform');\n      const transformId = nearestTransform?.getAttribute('id') || '';\n\n      // Get shape name from DEF attribute or use shapeId as fallback\n      const shapeName = nearestShape?.getAttribute('DEF') || shapeId;\n\n      // Get transform name or use transformId as fallback\n      const transformName = transformId || shapeId;\n\n      if (!shapeId || !transformId) {\n        return;\n      }\n\n      // Handle context menu (right click)\n      if (event.button === 2) {\n        const containerRect = containerRef.current?.getBoundingClientRect();\n        const x = (event.layerX || 0) + (containerRect?.left || 0);\n        const y = (event.layerY || 0) + (containerRect?.top || 0);\n\n        setContextMenu({\n          visible: true,\n          x,\n          y,\n          partId: shapeId,\n          isOpen: true,\n          shapeName: shapeName,\n          transformId: transformId,\n        });\n      } else if (event.button === 1) {\n        setClickedPart({\n          partName: transformName, // Use transform name for display\n          shapeId: shapeId, // Keep the actual clicked shape\n          transformId: transformId, // Add transform ID for operations\n        });\n\n        // Close context menu on left click\n        setContextMenu((prev) => ({ ...prev, isOpen: false }));\n      } else if (event.button === 0) {\n        // Close context menu on left click\n        setContextMenu((prev) => ({ ...prev, isOpen: false }));\n      }\n    },\n    [setClickedPart],\n  );\n\n  const addShapeClickHandlers = useCallback((): void => {\n    if (!containerRef.current) return;\n\n    const shapes = containerRef.current.querySelectorAll('Shape');\n    shapes.forEach((shape) => {\n      const shapeId = shape.getAttribute('id');\n      if (shapeId) {\n        shape.addEventListener('click', (event) =>\n          handleShapeClick(shape, event as MouseEvent),\n        );\n        shape.addEventListener('contextmenu', (event) => {\n          event.preventDefault();\n          handleShapeClick(shape, event as MouseEvent);\n        });\n      }\n    });\n  }, [handleShapeClick]);\n\n  // ========================================\n  // Update container dimensions when container size changes\n  // ========================================\n\n  useEffect(() => {\n    if (!containerRef.current) return;\n\n    const updateDimensions = () => {\n      if (containerRef.current) {\n        const rect = containerRef.current.getBoundingClientRect();\n        setContainerDimensions({\n          width: rect.width,\n          height: rect.height,\n        });\n      }\n    };\n\n    // Smart update for dimensions - immediate for expansions, debounced for small changes\n    let lastDimensions = { width: 0, height: 0 };\n    let debouncedUpdate: ReturnType<typeof setTimeout> | null = null;\n\n    const smartUpdateDimensions = () => {\n      if (!containerRef.current) return;\n\n      const rect = containerRef.current.getBoundingClientRect();\n      const newDimensions = { width: rect.width, height: rect.height };\n\n      const widthDiff = Math.abs(newDimensions.width - lastDimensions.width);\n      const heightDiff = Math.abs(newDimensions.height - lastDimensions.height);\n\n      // Clear any pending update\n      if (debouncedUpdate) {\n        clearTimeout(debouncedUpdate);\n        debouncedUpdate = null;\n      }\n\n      // Immediate update for significant changes (expansions)\n      if (\n        widthDiff > 30 ||\n        heightDiff > 30 ||\n        (newDimensions.width > lastDimensions.width && widthDiff > 10) ||\n        (newDimensions.height > lastDimensions.height && heightDiff > 10)\n      ) {\n        setContainerDimensions(newDimensions);\n        lastDimensions = newDimensions;\n      } else {\n        // Debounce small changes\n        debouncedUpdate = setTimeout(() => {\n          setContainerDimensions(newDimensions);\n          lastDimensions = newDimensions;\n          debouncedUpdate = null;\n        }, 32);\n      }\n    };\n\n    // Initial measurement (immediate)\n    updateDimensions();\n\n    // Set up ResizeObserver with smart updates\n    const resizeObserver = new ResizeObserver(smartUpdateDimensions);\n    resizeObserver.observe(containerRef.current);\n\n    return () => resizeObserver.disconnect();\n  }, [isLoaded]);\n\n  // ========================================\n  // INITIALIZATION\n  // ========================================\n\n  const initializeModel = useCallback(\n    async (htmlString: string) => {\n      if (!htmlString || !containerRef.current || !scriptsLoaded) return;\n\n      if (containerRef.current.innerHTML) {\n        containerRef.current.innerHTML = '';\n      }\n\n      // Inject NavigationInfo to invert zoom\n      // Inject the modified X3DOM HTML string\n      containerRef.current.innerHTML = htmlString.replace(\n        /<scene>/i,\n        `<scene><NavigationInfo reverseScroll=\"true\" speed=\"5\"></NavigationInfo>`,\n      );\n\n      if (typeof (window as any).x3dom !== 'undefined') {\n        (window as any).x3dom.reload();\n        // Shape click handlers and transform storage will be handled by useEffect after partOperations is ready\n      }\n\n      // Simplified initialization - just load the model\n      setIsLoaded(true);\n      return [];\n    },\n    [scriptsLoaded],\n  );\n\n  // Load external dependencies\n  useEffect(() => {\n    const loadDependencies = async () => {\n      if (\n        document.querySelector('link[href*=\"x3dom.css\"]') &&\n        document.querySelector('script[src*=\"x3dom.js\"]') &&\n        document.querySelector('script[src*=\"jquery\"]')\n      ) {\n        setScriptsLoaded(true);\n        return;\n      }\n\n      if (!document.querySelector('link[href*=\"x3dom.css\"]')) {\n        const cssLink = document.createElement('link');\n        cssLink.rel = 'stylesheet';\n        cssLink.type = 'text/css';\n        cssLink.href =\n          'https://cdn.jsdelivr.net/gh/x3dom/x3dom-stable@1.8.3/dist/x3dom.css';\n        document.head.appendChild(cssLink);\n      }\n\n      const loadScript = (src: string): Promise<void> => {\n        return new Promise((resolve, reject) => {\n          if (document.querySelector(`script[src=\"${src}\"]`)) {\n            resolve();\n            return;\n          }\n\n          const script = document.createElement('script');\n          script.type = 'text/javascript';\n          script.src = src;\n          script.onload = () => resolve();\n          script.onerror = () =>\n            reject(new Error(`Failed to load script: ${src}`));\n          document.head.appendChild(script);\n        });\n      };\n\n      try {\n        await loadScript(\n          'https://cdn.jsdelivr.net/gh/x3dom/x3dom-stable@1.8.3/dist/x3dom.js',\n        );\n        await loadScript('https://code.jquery.com/jquery-2.1.0.min.js');\n        setScriptsLoaded(true);\n      } catch (error) {\n        console.error('Error loading external dependencies:', error);\n        setScriptsLoaded(true);\n      }\n    };\n\n    void loadDependencies();\n  }, []);\n\n  // ========================================\n  // PART OPERATIONS INTERFACE\n  // ========================================\n\n  const partOperations: PartOperations = useMemo(\n    () => ({\n      // Required methods for PartOperations interface\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      deleteGroup: (groupId: string) => {\n        console.warn('deleteGroup not implemented in modelViewCore');\n      },\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      movePart: (partId: string, targetGroupId: string | null) => {\n        console.warn('movePart not implemented in modelViewCore');\n      },\n      getAvailableGroups: () => {\n        console.warn('getAvailableGroups not implemented in modelViewCore');\n        return [];\n      },\n      findPartById: (partId: string) => {\n        const part = partsRef.current.find((p) => p.id === partId);\n        return part || null;\n      },\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      createGroup: (name: string, partIds: string[]) => {\n        console.warn('createGroup not implemented in modelViewCore');\n      },\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      renameGroup: (groupId: string, newName: string) => {\n        console.warn('renameGroup not implemented in modelViewCore');\n      },\n\n      // Core operations\n      highlightShapes,\n      removeHighlightShapes,\n      hideShapes,\n      showShapes,\n      isolateShapes,\n      showAllParts,\n      addShapeClickHandlers,\n\n      // Recentering operations\n      recenterToShapeIds,\n\n      // State queries\n      isShapeHighlighted,\n      isShapeHidden,\n      areShapesIsolated,\n\n      // Batch operations for parts tree\n      highlightShapesFromPartsTree,\n      removeHighlightShapesFromPartsTree,\n      hideShapesFromPartsTree,\n      showShapesFromPartsTree,\n      isolateShapesFromPartsTree,\n    }),\n    [\n      highlightShapes,\n      removeHighlightShapes,\n      hideShapes,\n      showShapes,\n      isolateShapes,\n      showAllParts,\n      addShapeClickHandlers,\n      recenterToShapeIds,\n      isShapeHighlighted,\n      isShapeHidden,\n      areShapesIsolated,\n      highlightShapesFromPartsTree,\n      removeHighlightShapesFromPartsTree,\n      hideShapesFromPartsTree,\n      showShapesFromPartsTree,\n      isolateShapesFromPartsTree,\n    ],\n  );\n\n  // ========================================\n  // POST-INITIALIZATION EFFECTS\n  // ========================================\n\n  // Handle shape click handlers and transform storage after model is loaded\n  useEffect(() => {\n    if (isLoaded && partOperations && storeOriginalTransforms) {\n      const timer = setTimeout(() => {\n        if (partOperations.addShapeClickHandlers) {\n          partOperations.addShapeClickHandlers();\n        }\n\n        storeOriginalTransforms();\n        \n        // Save the original center for recentering operations\n        saveOriginalCenter();\n      }, 500);\n\n      return () => clearTimeout(timer);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isLoaded, storeOriginalTransforms, saveOriginalCenter]);\n\n  // ========================================\n  // CONTROL FUNCTIONS IMPLEMENTATION\n  // ========================================\n\n  const controlFunctions: ControlFunctions = useMemo(\n    () => ({\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      runFunction: (functionName: string, ...args: any[]) => {\n        console.warn(`runFunction ${functionName} not implemented in modelViewCore`);\n      },\n\n      toggleElement: (id: string, show?: boolean) => {\n        const element = containerRef.current?.querySelector(\n          `#${CSS.escape(id)}`,\n        );\n        if (element) {\n          if (show !== undefined) {\n            element.setAttribute('render', show ? 'true' : 'false');\n          } else {\n            const currentRender = element.getAttribute('render');\n            const isVisible = currentRender !== 'false';\n            element.setAttribute('render', isVisible ? 'false' : 'true');\n          }\n        }\n      },\n\n      getElementById: (id: string) => {\n        return (\n          containerRef.current?.querySelector(`#${CSS.escape(id)}`) || null\n        );\n      },\n\n      getElementsByClassName: (className: string) => {\n        return (\n          (containerRef.current?.querySelectorAll(\n            `.${CSS.escape(className)}`,\n          ) as NodeListOf<Element>) || document.querySelectorAll('.nonexistent')\n        );\n      },\n\n      updateElementAttribute: (\n        id: string,\n        attribute: string,\n        value: string,\n      ) => {\n        const element = containerRef.current?.querySelector(\n          `#${CSS.escape(id)}`,\n        );\n        if (element) {\n          element.setAttribute(attribute, value);\n        }\n      },\n\n      updateElementContent: (id: string, content: string) => {\n        const element = containerRef.current?.querySelector(\n          `#${CSS.escape(id)}`,\n        );\n        if (element) {\n          element.innerHTML = content;\n        }\n      },\n\n      addEventListenerToElement: (\n        id: string,\n        event: string,\n        handler: EventListener,\n      ) => {\n        const element = containerRef.current?.querySelector(\n          `#${CSS.escape(id)}`,\n        );\n        if (element) {\n          element.addEventListener(event, handler);\n          // Return cleanup function\n          return () => {\n            element.removeEventListener(event, handler);\n          };\n        }\n        return undefined;\n      },\n\n      container: containerRef.current,\n\n      getPartsList: () => {\n        // Return empty array for now - can be enhanced later if needed\n        return [];\n      },\n\n      partOperations,\n    }),\n    [partOperations],\n  );\n\n  // ========================================\n  // RETURN VALUES\n  // ========================================\n\n  return useMemo(\n    () => ({\n      // Core refs and state\n      containerRef,\n      scriptsLoaded,\n      isLoaded,\n      containerDimensions,\n      selectedTools,\n      setSelectedTools,\n\n      // Context menu\n      contextMenu,\n      setContextMenu,\n\n      // Control functions interface\n      controlFunctions,\n\n      // Part operations interface\n      partOperations,\n\n      // Shape click handler\n      handleShapeClick,\n\n      // Initialization\n      initializeModel,\n\n      // Legacy compatibility functions\n      isPartHighlighted,\n      isPartHidden,\n      isPartIsolated,\n\n      // Master reset\n      handleShowAllParts: showAllParts,\n      exitIsolation,\n\n      // Simple explosion functionality\n      explosionFactor,\n      handleExplosionChange,\n      resetExplosion,\n      updateExplosion,\n      updateDirectionalExplosion,\n      storeOriginalTransforms,\n\n      // Transparency functions\n      setShapeTransparency,\n      setTransformTransparency,\n      getShapeTransparency,\n      resetShapeTransparency,\n\n      // Isolation settings and update functions\n      isolationSettings,\n      setIsolationSettings,\n      updateIsolationTransparency,\n      updateIsolationHideTransparent,\n\n      // Camera functions\n      getCameraSettings,\n      setCameraSettings,\n      clickedPart,\n\n      // Unified context menu handlers (sync shape and parts tree state)\n      handleContextMenuHighlight,\n      handleContextMenuRemoveHighlight,\n      handleContextMenuHide,\n      handleContextMenuShow,\n      handleContextMenuIsolate,\n\n      // Parts tree operations state (for UI sync)\n      partsTreeOperations,\n    }),\n    [\n      scriptsLoaded,\n      isLoaded,\n      containerDimensions,\n      selectedTools,\n      contextMenu,\n      controlFunctions,\n      partOperations,\n      handleShapeClick,\n      initializeModel,\n      isPartHighlighted,\n      isPartHidden,\n      isPartIsolated,\n      showAllParts,\n      explosionFactor,\n      handleExplosionChange,\n      resetExplosion,\n      updateExplosion,\n      updateDirectionalExplosion,\n      storeOriginalTransforms,\n      setShapeTransparency,\n      setTransformTransparency,\n      getShapeTransparency,\n      resetShapeTransparency,\n      isolationSettings,\n      updateIsolationTransparency,\n      updateIsolationHideTransparent,\n      getCameraSettings,\n      setCameraSettings,\n      clickedPart,\n      handleContextMenuHighlight,\n      handleContextMenuRemoveHighlight,\n      handleContextMenuHide,\n      handleContextMenuShow,\n      handleContextMenuIsolate,\n      partsTreeOperations,\n    ],\n  );\n}","import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\n\nconst buttonVariants = cva(\n  \"inline-flex items-center justify-center gap-2 py-3 whitespace-nowrap rounded-lg text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n  {\n    variants: {\n      variant: {\n        default:\n          'text-white cursor-pointer shadow-xs',\n        destructive:\n          'bg-[#161617] border border-[#313133] text-white/70 cursor-pointer shadow-xs',\n        outline:\n          'border cursor-pointer bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\n        secondary:\n          'bg-secondary cursor-pointer text-secondary-foreground shadow-xs hover:bg-secondary/80',\n        ghost:\n          'hover:bg-accent cursor-pointer hover:text-accent-foreground dark:hover:bg-accent/50',\n        link: 'text-primary underline-offset-4 hover:underline',\n      },\n      size: {\n        default: 'h-9 px-4 py-3 has-[>svg]:px-3',\n        sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',\n        lg: 'h-10 rounded-lg px-6 has-[>svg]:px-4',\n        icon: 'size-9 p-0',\n      },\n      fullWidth: {\n        true: 'w-full',\n      },\n      loading: {\n        true: '',\n      },\n      loadingPosition: {\n        start: '',\n        center: '',\n        end: '',\n      },\n    },\n    compoundVariants: [\n      {\n        loading: true,\n        loadingPosition: 'center',\n        class: 'text-transparent',\n      },\n      {\n        loading: true,\n        loadingPosition: 'start',\n        class: 'relative',\n      },\n      {\n        loading: true,\n        loadingPosition: 'end',\n        class: 'relative',\n      },\n    ],\n    defaultVariants: {\n      variant: 'default',\n      size: 'default',\n      fullWidth: false,\n      loading: false,\n      loadingPosition: 'center',\n    },\n  },\n);\n\ninterface ButtonProps\n  extends React.ComponentProps<'button'>,\n    VariantProps<typeof buttonVariants> {\n  asChild?: boolean;\n  startIcon?: React.ReactNode;\n  endIcon?: React.ReactNode;\n  loading?: boolean;\n  loadingIndicator?: React.ReactNode;\n  fullWidth?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  (\n    {\n      className,\n      variant,\n      size,\n      asChild = false,\n      startIcon,\n      endIcon,\n      loading = false,\n      loadingIndicator,\n      loadingPosition = 'center',\n      fullWidth = false,\n      disabled = false,\n      children,\n      ...props\n    },\n    ref,\n  ) => {\n    const Comp = asChild ? Slot : 'button';\n    const isIconOnly = size === 'icon' && !children && (startIcon || endIcon);\n\n    // Default loading indicator (a simple spinner)\n    const defaultLoadingIndicator = (\n      <svg\n        className='animate-spin size-4 text-current'\n        xmlns='http://www.w3.org/2000/svg'\n        fill='none'\n        viewBox='0 0 24 24'\n      >\n        <circle\n          className='opacity-25'\n          cx='12'\n          cy='12'\n          r='10'\n          stroke='currentColor'\n          strokeWidth='4'\n        />\n        <path\n          className='opacity-75'\n          fill='currentColor'\n          d='M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z'\n        />\n      </svg>\n    );\n\n    const effectiveLoadingIndicator =\n      loadingIndicator || defaultLoadingIndicator;\n\n    const content = (\n      <>\n        {startIcon && !isIconOnly && (\n          <span\n            className={cn(\n              'flex items-center',\n              loading && loadingPosition === 'start' && 'opacity-0',\n              size === 'sm' && 'mr-1',\n            )}\n          >\n            {startIcon}\n          </span>\n        )}\n\n        {loading && loadingPosition === 'start' && (\n          <span\n            className={cn(\n              'absolute left-3 flex items-center',\n              size === 'sm' && 'left-2',\n              size === 'lg' && 'left-4',\n            )}\n          >\n            {effectiveLoadingIndicator}\n          </span>\n        )}\n\n        {children}\n\n        {loading && loadingPosition === 'center' && (\n          <span className='absolute flex items-center'>\n            {effectiveLoadingIndicator}\n          </span>\n        )}\n\n        {endIcon && !isIconOnly && (\n          <span\n            className={cn(\n              'ml-2 flex items-center',\n              loading && loadingPosition === 'end' && 'opacity-0',\n              size === 'sm' && 'ml-1',\n            )}\n          >\n            {endIcon}\n          </span>\n        )}\n\n        {loading && loadingPosition === 'end' && (\n          <span\n            className={cn(\n              'absolute right-3 flex items-center',\n              size === 'sm' && 'right-2',\n              size === 'lg' && 'right-4',\n            )}\n          >\n            {effectiveLoadingIndicator}\n          </span>\n        )}\n\n        {isIconOnly && (startIcon || endIcon)}\n      </>\n    );\n\n    // Apply primary color background for default variant\n    const defaultStyle = variant === 'default' ? {\n      backgroundColor: 'var(--tnkr-primary)',\n      ...(props.style || {}),\n    } : props.style;\n\n    return (\n      <Comp\n        data-slot='button'\n        className={cn(\n          buttonVariants({\n            variant,\n            size,\n            fullWidth,\n            loading,\n            loadingPosition,\n            className,\n          }),\n          isIconOnly && 'justify-center',\n          variant === 'default' && 'hover:opacity-90 transition-opacity',\n        )}\n        disabled={disabled || loading}\n        ref={ref}\n        {...props}\n        style={defaultStyle}\n      >\n        {asChild ? children : content}\n      </Comp>\n    );\n  },\n);\n\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","\nimport React from 'react';\nimport { Button } from '@/app/components/ui/Button';\nimport { Eye, EyeOff } from 'lucide-react';\nimport { Icon } from '@iconify/react';\n\nexport interface ContextMenuState {\n  visible: boolean;\n  x: number;\n  y: number;\n  partId?: string;\n  isOpen?: boolean;\n  shapeName?: string;\n  transformId?: string;\n}\n\ninterface PartContextMenuProps {\n  contextMenu: ContextMenuState;\n  onClose: () => void;\n  onHighlight: (shapeId: string, transformId?: string) => void;\n  onRemoveHighlight: (shapeId: string, transformId?: string) => void;\n  onHide: (shapeId: string, transformId?: string) => void;\n  onShow: (shapeId: string, transformId?: string) => void;\n  onIsolate: (shapeId: string, transformId?: string, partName?: string) => void;\n  onShowAllParts?: () => void;\n  isHighlighted?: boolean;\n  isHidden?: boolean;\n  isIsolated?: boolean;\n  menuId?: string;\n}\n\nexport const PartContextMenu: React.FC<PartContextMenuProps> = ({\n  contextMenu,\n  onClose,\n  onHighlight,\n  onRemoveHighlight,\n  onHide,\n  onShow,\n  onIsolate,\n  onShowAllParts,\n  isHighlighted = false,\n  isHidden = false,\n  isIsolated = false,\n  menuId = 'tnkr-part-context-menu',\n}) => {\n  // Add click-outside to close functionality\n  React.useEffect(() => {\n    if (!contextMenu.visible) return;\n\n    const handleClickOutside = (event: MouseEvent) => {\n      const target = event.target as HTMLElement;\n      const menu = document.getElementById(menuId);\n      \n      // Check if click is inside the menu\n      if (menu && !menu.contains(target)) {\n        onClose();\n      }\n    };\n\n    // Add event listener to document\n    document.addEventListener('mousedown', handleClickOutside);\n    \n    // Cleanup\n    return () => {\n      document.removeEventListener('mousedown', handleClickOutside);\n    };\n  }, [contextMenu.visible, onClose, menuId]);\n\n  if (!contextMenu.visible || !contextMenu.partId) {\n    return null;\n  }\n\n  const handleHighlightClick = () => {\n    if (isHighlighted) {\n      onRemoveHighlight(contextMenu.partId!, contextMenu.transformId);\n    } else {\n      onHighlight(contextMenu.partId!, contextMenu.transformId);\n    }\n    onClose();\n  };\n\n  const handleHideClick = () => {\n    if (isHidden) {\n      onShow(contextMenu.partId!, contextMenu.transformId);\n    } else {\n      onHide(contextMenu.partId!, contextMenu.transformId);\n    }\n    onClose();\n  };\n\n  const handleIsolateClick = () => {\n    if (isIsolated && onShowAllParts) {\n      onShowAllParts(); // Exit isolation mode\n    } else {\n      onIsolate(contextMenu.partId!, contextMenu.transformId, contextMenu.shapeName);\n    }\n    onClose();\n  };\n\n  return (\n    <div\n      id={menuId}\n      className='fixed z-[9999] bg-[#1e1e1e] border border-[#444] rounded-lg shadow-lg px-2 py-2 min-w-[180px] max-w-[300px] w-auto'\n      style={{\n        top: contextMenu.y,\n        left: contextMenu.x,\n        userSelect: 'none',\n        WebkitUserSelect: 'none',\n        MozUserSelect: 'none',\n        msUserSelect: 'none',\n      }}\n      onClick={(e) => e.stopPropagation()}\n      onContextMenu={(e) => e.preventDefault()}\n    >\n      {/* Shape Name Header */}\n      {contextMenu.shapeName && (\n        <>\n          <div className='px-2 py-2 border-b border-[#444]'>\n            <div className='text-white text-sm font-medium truncate max-w-[250px]' title={contextMenu.shapeName}>\n              {contextMenu.shapeName}\n            </div>\n            <div className='text-gray-400 text-xs truncate max-w-[250px]' title={contextMenu.partId}>\n              ID: {contextMenu.partId}\n            </div>\n          </div>\n        </>\n      )}\n      \n      <div className='space-y-1'>\n        {/* Hide/Show */}\n        <Button\n          variant='ghost'\n          className={`w-full justify-start text-white hover:text-white`}\n          style={{\n            backgroundColor: isHidden ? 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)' : undefined,\n          }}\n          onMouseEnter={(e) => {\n            e.currentTarget.style.backgroundColor = 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)';\n          }}\n          onMouseLeave={(e) => {\n            e.currentTarget.style.backgroundColor = isHidden ? 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)' : '';\n          }}\n          onClick={handleHideClick}\n        >\n          {isHidden ? (\n            <Eye size={16} className='mr-2' />\n          ) : (\n            <EyeOff size={16} className='mr-2' />\n          )}\n          {isHidden ? 'Show' : 'Hide'}\n        </Button>\n\n        {/* Highlight */}\n        <Button\n          variant='ghost'\n          className={`w-full justify-start text-white hover:text-white`}\n          style={{\n            backgroundColor: isHighlighted ? 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)' : undefined,\n          }}\n          onMouseEnter={(e) => {\n            e.currentTarget.style.backgroundColor = 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)';\n          }}\n          onMouseLeave={(e) => {\n            e.currentTarget.style.backgroundColor = isHighlighted ? 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)' : '';\n          }}\n          onClick={handleHighlightClick}\n        >\n          <Icon\n            icon='iconoir:sun-light'\n            className='mr-2'\n            style={{ width: '18px', height: '18px' }}\n          />\n          {isHighlighted ? 'Remove Highlight' : 'Highlight'}\n        </Button>\n\n        {/* Isolate */}\n        <Button\n          variant='ghost'\n          className={`w-full justify-start text-white hover:text-white`}\n          style={{\n            backgroundColor: isIsolated ? 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)' : undefined,\n          }}\n          onMouseEnter={(e) => {\n            e.currentTarget.style.backgroundColor = 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)';\n          }}\n          onMouseLeave={(e) => {\n            e.currentTarget.style.backgroundColor = isIsolated ? 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)' : '';\n          }}\n          onClick={handleIsolateClick}\n        >\n          <Icon\n            icon='mage:box-3d-upload'\n            className='mr-2'\n            style={{ width: '18px', height: '18px' }}\n          />\n          {isIsolated ? 'Exit Isolation' : 'Isolate'}\n        </Button>\n\n        {/* Show All Parts */}\n        {onShowAllParts && (\n          <>\n            <div className='my-1 border-t border-[#444]' />\n            <Button\n              variant='ghost'\n              className='w-full justify-start text-gray-300 hover:text-white'\n              onMouseEnter={(e) => {\n                e.currentTarget.style.backgroundColor = 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)';\n              }}\n              onMouseLeave={(e) => {\n                e.currentTarget.style.backgroundColor = '';\n              }}\n              onClick={() => {\n                onShowAllParts();\n                onClose();\n              }}\n            >\n              <Icon\n                icon='material-symbols:visibility'\n                className='mr-2'\n                style={{ width: '18px', height: '18px' }}\n              />\n              Show All Parts\n            </Button>\n          </>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default PartContextMenu;","import React, { useState, useCallback } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Icon } from '@iconify/react';\nimport { cn } from '@/lib/utils';\nimport { Part } from '../../../../../src/components/TnkrModelView/types'\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { PartContextMenu, ContextMenuState } from '../../../../../src/components/TnkrModelView/PartContextMenu';\nimport { collectShapeIds } from '../../../../../src/components/TnkrModelView/partUtils';\nimport { useExplorerModelViewCoreContext } from '../explorer-card-node-view';\n\ninterface PartsTreeProps {\n  parts: Part[]\n  className?: string\n  // Context menu state props (optional for backward compatibility)\n  contextMenu?: ContextMenuState\n  onContextMenuClose?: () => void\n  onPartContextMenuTrigger?: (contextMenu: ContextMenuState) => void\n}\n\ninterface TreeNodeProps {\n  node: Part;\n  level?: number;\n  searchTerm?: string;\n  onPartContextMenu?: (event: React.MouseEvent, part: Part) => void;\n}\n\nconst TreeNode = React.memo<TreeNodeProps>(({\n  node,\n  level = 0,\n  searchTerm = '',\n  onPartContextMenu\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const { isPartHighlighted, isPartHidden, isPartIsolated } = useExplorerModelViewCoreContext();\n\n  const hasChildren = node.children && node.children.length > 0;\n  const isFolder = hasChildren;\n  const isHighlighted = isPartHighlighted(node.id);\n  const isHidden = isPartHidden(node.id);\n  const isIsolated = isPartIsolated(node.id);\n\n  const handleToggleExpanded = useCallback((e: React.MouseEvent) => {\n    e.stopPropagation();\n    setIsExpanded(!isExpanded);\n  }, [isExpanded]);\n\n  const handleNodeClick = useCallback((e: React.MouseEvent) => {\n    e.stopPropagation();\n\n    // Trigger context menu on part select (left click)\n    if (onPartContextMenu) {\n      onPartContextMenu(e, node);\n    }\n  }, [node, onPartContextMenu]);\n\n  const handleContextMenu = useCallback((e: React.MouseEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n    if (onPartContextMenu) {\n      // Allow context menu on both folders and parts\n      onPartContextMenu(e, node);\n    }\n  }, [node, onPartContextMenu]);\n\n  const getIcon = () => {\n    if (isFolder) {\n      return <Icon icon=\"solar:folder-linear\" className=\"w-4 h-4 text-[#FFFFFF]/50\" />;\n    }\n    return <Icon icon=\"mdi:cube-outline\" className=\"w-4 h-4 text-blue-400\" />;\n  };\n\n  // Check if node matches search term\n  const matchesSearch = !searchTerm ||\n    node.name.toLowerCase().includes(searchTerm.toLowerCase()) ||\n    (node.children && node.children.some(child =>\n      child.name.toLowerCase().includes(searchTerm.toLowerCase())\n    ));\n\n  if (!matchesSearch) return null;\n\n  return (\n    <>\n      <div\n        className={cn(\n          'flex items-center py-2 px-2 group transition-colors cursor-pointer relative z-0 select-none rounded-lg',\n          isIsolated && 'bg-blue-500/20 border border-blue-500/50',\n          isHidden && 'opacity-40'\n        )}\n        style={{\n          paddingLeft: `${level * 16}px`,\n          ...(isHighlighted ? {\n            backgroundColor: 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)',\n            border: '1px solid color-mix(in srgb, var(--tnkr-primary) 50%, transparent)',\n          } : {}),\n        }}\n        onClick={handleNodeClick}\n        onContextMenu={handleContextMenu}\n      >\n        {/* Type icon */}\n        <span className=\"mr-2 flex-shrink-0\">{getIcon()}</span>\n\n        {/* Node name */}\n        <span className={cn(\n          'flex-1 truncate text-[14px] text-[#FFFFFF] group-hover:font-bold transition-all',\n          isHighlighted && 'font-semibold'\n        )}>\n          {node.name}\n        </span>\n\n\n        {/* Expand/Collapse button */}\n        {hasChildren && (\n          <button\n            className=\"p-1 hover:bg-[#313133] rounded-sm transition-colors flex-shrink-0\"\n            onClick={handleToggleExpanded}\n          >\n            {isExpanded ? (\n              <ChevronDown size={12} className=\"text-white/70\" />\n            ) : (\n              <ChevronRight size={12} className=\"text-white/70\" />\n            )}\n          </button>\n        )}\n      </div>\n\n      {/* Children */}\n      {hasChildren && isExpanded && (\n        <>\n          {node.children?.map((child, index) => (\n            <div key={child.id || `${node.id}-child-${index}`} className={index > 0 ? \"mt-1.5\" : \"\"}>\n              <TreeNode\n                node={child}\n                level={level + 1}\n                searchTerm={searchTerm}\n                onPartContextMenu={onPartContextMenu}\n              />\n            </div>\n          ))}\n        </>\n      )}\n    </>\n  );\n});\n\nconst PartsTree: React.FC<PartsTreeProps> = ({\n  parts,\n  className,\n  contextMenu: externalContextMenu,\n  onContextMenuClose: externalOnContextMenuClose,\n  onPartContextMenuTrigger\n}) => {\n  // Use the context to get all operations and state\n  const {\n    handleShowAllParts,\n    isPartHighlighted,\n    isPartHidden,\n    isPartIsolated,\n    partOperations\n  } = useExplorerModelViewCoreContext();\n  const [searchTerm, setSearchTerm] = useState('');\n  const [internalContextMenu, setInternalContextMenu] = useState<ContextMenuState>({\n    visible: false,\n    x: 0,\n    y: 0,\n  });\n\n  // Use external context menu if provided, otherwise use internal\n  const contextMenu = externalContextMenu || internalContextMenu;\n\n  const handlePartContextMenu = useCallback((event: React.MouseEvent, part: Part) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n\n    // Ensure the context menu stays within viewport bounds\n    const menuWidth = 200; // approximate width of context menu\n    const menuHeight = 200; // approximate height of context menu\n\n    let x = event.clientX;\n    let y = event.clientY;\n\n    // Adjust if menu would go off right edge\n    if (x + menuWidth > window.innerWidth) {\n      x = window.innerWidth - menuWidth - 10;\n    }\n\n    // Adjust if menu would go off bottom edge\n    if (y + menuHeight > window.innerHeight) {\n      y = window.innerHeight - menuHeight - 10;\n    }\n\n    const newContextMenu = {\n      visible: true,\n      x: Math.max(10, x), // ensure minimum 10px from left edge\n      y: Math.max(10, y), // ensure minimum 10px from top edge\n      partId: part.id,\n      shapeName: part.name,\n    };\n\n\n    // Use external callback if provided, otherwise update internal state\n    if (onPartContextMenuTrigger) {\n      onPartContextMenuTrigger(newContextMenu);\n    } else {\n      setInternalContextMenu(newContextMenu);\n    }\n  }, [onPartContextMenuTrigger]);\n\n  const handleContextMenuClose = useCallback(() => {\n    if (externalOnContextMenuClose) {\n      externalOnContextMenuClose();\n    } else {\n      setInternalContextMenu(prev => ({ ...prev, visible: false }));\n    }\n  }, [externalOnContextMenuClose]);\n\n  // Helper function to find part by ID in the tree\n  const findPartById = useCallback((partId: string, partsList: Part[]): Part | null => {\n    for (const part of partsList) {\n      if (part.id === partId) {\n        return part;\n      }\n      if (part.children) {\n        const found = findPartById(partId, part.children);\n        if (found) return found;\n      }\n    }\n    return null;\n  }, []);\n\n  // Create handlers that use the partOperations from context\n  const handlePartHighlight = useCallback((partId: string) => {\n    const part = findPartById(partId, parts);\n    if (part) {\n      const shapeIds = collectShapeIds(part);\n      if (shapeIds.length > 0) {\n        const isCurrentlyHighlighted = isPartHighlighted(partId);\n        if (isCurrentlyHighlighted) {\n          partOperations.removeHighlightShapesFromPartsTree(partId, shapeIds);\n        } else {\n          partOperations.highlightShapesFromPartsTree(partId, shapeIds);\n        }\n      }\n    }\n  }, [partOperations, isPartHighlighted, findPartById, parts]);\n\n  const handlePartRemoveHighlight = useCallback((partId: string) => {\n    const part = findPartById(partId, parts);\n    if (part) {\n      const shapeIds = collectShapeIds(part);\n      if (shapeIds.length > 0) {\n        partOperations.removeHighlightShapesFromPartsTree(partId, shapeIds);\n      }\n    }\n  }, [partOperations, findPartById, parts]);\n\n  const handlePartHide = useCallback((partId: string) => {\n    const part = findPartById(partId, parts);\n    if (part) {\n      const shapeIds = collectShapeIds(part);\n      if (shapeIds.length > 0) {\n        const isCurrentlyHidden = isPartHidden(partId);\n        if (isCurrentlyHidden) {\n          partOperations.showShapesFromPartsTree(partId, shapeIds);\n        } else {\n          partOperations.hideShapesFromPartsTree(partId, shapeIds);\n        }\n      }\n    }\n  }, [partOperations, isPartHidden, findPartById, parts]);\n\n  const handlePartShow = useCallback((partId: string) => {\n    const part = findPartById(partId, parts);\n    if (part) {\n      const shapeIds = collectShapeIds(part);\n      if (shapeIds.length > 0) {\n        partOperations.showShapesFromPartsTree(partId, shapeIds);\n      }\n    }\n  }, [partOperations, findPartById, parts]);\n\n  const handlePartIsolate = useCallback((partId: string) => {\n    const part = findPartById(partId, parts);\n    if (part) {\n      const shapeIds = collectShapeIds(part);\n      if (shapeIds.length > 0) {\n        const isCurrentlyIsolated = isPartIsolated(partId);\n        if (isCurrentlyIsolated) {\n          handleShowAllParts();\n        } else {\n          partOperations.isolateShapesFromPartsTree(partId, shapeIds, part.name);\n        }\n      }\n    }\n  }, [partOperations, isPartIsolated, handleShowAllParts, findPartById, parts]);\n\n  if (!parts || parts.length === 0) {\n    return (\n      <div className={cn(\"p-4 text-center text-white/50\", className)}>\n        <Icon icon=\"mdi:cube-outline\" className=\"w-8 h-8 mx-auto mb-2 opacity-40\" />\n        <p className=\"text-sm\">No parts available</p>\n      </div>\n    );\n  }\n\n  // Show only children of root node (not the root itself)\n  const childrenToShow = parts.length === 1 && parts[0].children ? parts[0].children : parts;\n\n  return (\n    <div className={cn(\"h-full z-0 relative overflow-hidden\", className)}>\n      {/* Parts Tree */}\n      <div className=\"overflow-y-auto h-full p-3\">\n        {childrenToShow.map((part, index) => (\n          <div key={part.id || `part-${index}`} className={index > 0 ? \"mt-1.5\" : \"\"}>\n            <TreeNode\n              node={part}\n              searchTerm={searchTerm}\n              onPartContextMenu={handlePartContextMenu}\n            />\n          </div>\n        ))}\n      </div>\n\n      {/* Context Menu - Render as Portal */}\n      {contextMenu.visible && typeof document !== 'undefined' &&\n        ReactDOM.createPortal(\n          <PartContextMenu\n            contextMenu={contextMenu}\n            onClose={handleContextMenuClose}\n            onHighlight={handlePartHighlight}\n            onRemoveHighlight={handlePartRemoveHighlight}\n            onHide={handlePartHide}\n            onShow={handlePartShow}\n            onIsolate={handlePartIsolate}\n            onShowAllParts={handleShowAllParts}\n            menuId=\"parts-tree-context-menu\"\n            isHighlighted={\n              contextMenu.partId ? isPartHighlighted(contextMenu.partId) : false\n            }\n            isHidden={\n              contextMenu.partId ? isPartHidden(contextMenu.partId) : false\n            }\n            isIsolated={\n              contextMenu.partId ? isPartIsolated(contextMenu.partId) : false\n            }\n          />,\n          document.body\n        )\n      }\n    </div>\n  );\n};\n\nexport default PartsTree;","'use client';\n\nimport React from 'react';\n\ninterface IsolationCustomRangeProps {\n  min?: number;\n  max?: number;\n  step?: number;\n  value: number;\n  onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n  className?: string;\n  fillColor?: string;\n  trackColor?: string;\n  disabled?: boolean;\n  trackHeight?: string;\n}\n\nconst IsolationCustomRange: React.FC<IsolationCustomRangeProps> = ({\n  min = 0,\n  max = 100,\n  step,\n  value,\n  onChange,\n  className,\n  fillColor = 'var(--tnkr-primary)',\n  trackColor = '#313133',\n  disabled = false,\n  trackHeight = '2px', // Default to 2px for a thinner track\n}) => {\n  // Calculate percentage for gradient\n  const percentage = ((value - min) / (max - min)) * 100;\n\n  // Build className string\n  const baseClasses = 'w-full rounded-lg appearance-none cursor-pointer focus:outline-none focus:ring-0 range-input';\n  const disabledClasses = disabled ? 'opacity-50 cursor-not-allowed' : '';\n  const combinedClasses = `${baseClasses} ${disabledClasses} ${className || ''}`.trim();\n\n  return (\n    <>\n      <style>{`\n        .range-input::-webkit-slider-thumb {\n          -webkit-appearance: none;\n          appearance: none;\n          width: 14px;\n          height: 14px;\n          border-radius: 50%;\n          background: white;\n          border: 1px solid #e0e0e0;\n          cursor: pointer;\n          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n          margin-top: -3px;\n        }\n\n        .range-input::-moz-range-thumb {\n          width: 14px;\n          height: 14px;\n          border-radius: 50%;\n          background: white;\n          border: 1px solid #e0e0e0;\n          cursor: pointer;\n          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n        }\n\n        .range-input::-moz-range-track {\n          height: 2px;\n          border-radius: 4px;\n        }\n\n        .range-input:disabled::-webkit-slider-thumb {\n          cursor: not-allowed;\n        }\n\n        .range-input:disabled::-moz-range-thumb {\n          cursor: not-allowed;\n        }\n      `}</style>\n      <div className={`relative w-full flex items-center ${className || ''}`}>\n        <input\n          type='range'\n          min={min}\n          max={max}\n          step={step}\n          value={value}\n          onChange={onChange}\n          disabled={disabled}\n          className={combinedClasses}\n          style={{\n            height: trackHeight,\n            background: `linear-gradient(to right, ${fillColor} 0%, ${fillColor} ${percentage}%, ${trackColor} ${percentage}%, ${trackColor} 100%)`,\n          }}\n        />\n      </div>\n    </>\n  );\n};\n\nexport { IsolationCustomRange };\n","'use client';\n\nimport React from 'react';\nimport { X } from 'lucide-react';\nimport { IsolationCustomRange } from '../ui/IsolationCustomRange';\n\ninterface IsolationTransparencyModalProps {\n  isOpen: boolean;\n  onClose: () => void;\n  transparencyValue: number;\n  onTransparencyChange: (value: number) => void;\n  hideTransparent: boolean;\n  onHideTransparentChange: (checked: boolean) => void;\n  isolatedPartName?: string;\n}\n\nconst IsolationTransparencyModal: React.FC<IsolationTransparencyModalProps> = ({\n  isOpen,\n  onClose,\n  transparencyValue,\n  onTransparencyChange,\n  hideTransparent,\n  onHideTransparentChange,\n  isolatedPartName,\n}) => {\n  if (!isOpen) return null;\n\n  const handleSliderChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const value = parseFloat(e.target.value);\n    onTransparencyChange(value);\n  };\n\n  return (\n    <div className='absolute top-4 left-4 z-[9999] bg-[#232326] border border-[#313133] rounded-lg shadow-lg p-4 w-72'>\n      <div className='flex items-center justify-between mb-4'>\n        <h3 className='text-white text-sm font-medium'>Isolate</h3>\n        <button\n          onClick={onClose}\n          className='text-gray-400 hover:text-white transition-colors'\n          aria-label='Close isolation mode'\n        >\n          <X size={16} />\n        </button>\n      </div>\n\n      {isolatedPartName && (\n        <div className='mb-4'>\n          <p className='text-gray-400 text-xs mb-1'>Isolated Part</p>\n          <p className='text-white text-sm font-medium truncate'>{isolatedPartName}</p>\n        </div>\n      )}\n\n      <div className='mb-4'>\n        <label className='text-white text-sm mb-2 block'>\n          Transparency: {Math.round(transparencyValue)}%\n        </label>\n        <IsolationCustomRange\n          min={0}\n          max={100}\n          step={1}\n          value={transparencyValue}\n          onChange={handleSliderChange}\n          className='w-full'\n          fillColor={'var(--tnkr-primary)'}\n          trackColor='#313133'\n        />\n      </div>\n\n      <div className='flex items-center'>\n        <input\n          type='checkbox'\n          id='hide-transparent'\n          checked={hideTransparent}\n          onChange={(e) => onHideTransparentChange(e.target.checked)}\n          className='mr-2 w-4 h-4 bg-[#313133] border-gray-600 rounded focus:ring-2'\n          style={{\n            color: 'var(--tnkr-primary)',\n            accentColor: 'var(--tnkr-primary)',\n          }}\n        />\n        <label htmlFor='hide-transparent' className='text-white text-sm'>\n          Hide transparent parts\n        </label>\n      </div>\n    </div>\n  );\n};\n\nexport default IsolationTransparencyModal;\n","import React, { useEffect, useState, useRef, useCallback } from \"react\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@/app/components/ui/Button\";\nimport {\n  collectShapeIds,\n  getStepSpecificParts,\n  expandGroupsToChildren,\n  syncStepPartsWithLatestData,\n} from \"./partUtils\";\nimport { Part, ControlFunctions, Phase } from \"./types\";\nimport { useModelViewCore } from \"./modelViewCore\";\nimport PartContextMenu from \"./PartContextMenu\";\nimport IsolationTransparencyModal from \"./IsolationTransparencyModal\";\n\n// ========================================\n// UNIFIED RECENTERING UTILITIES\n// ========================================\n\n// NOTE: recenterToShapeIds function removed - now using core implementation from ModelViewCore.ts context\n\n/**\n * Assembly step recentering wrapper\n * Converts Part objects to shape IDs and calls core recentering function from context\n */\nconst recenterForAssemblyStep = (\n  recenterToShapeIds: (shapeIds: string[], logPrefix?: string) => { x: number; y: number; z: number } | null,\n  stepParts: Part[]\n): { x: number; y: number; z: number } | null => {\n  if (!stepParts || stepParts.length === 0) {\n    console.log('🎯 ❌ Assembly recentering failed: No step parts');\n    return null;\n  }\n\n  console.log(`🎯 Assembly recentering for step with ${stepParts.length} parts`);\n\n  // Extract all shape IDs from the step parts\n  const allShapeIds: string[] = [];\n  stepParts.forEach(part => {\n    const shapeIds = collectShapeIds(part);\n    allShapeIds.push(...shapeIds);\n  });\n\n  return recenterToShapeIds(allShapeIds, '🎯 Assembly');\n};\n\ninterface TnkrEditorModelViewCoreProps {\n  htmlString: string;\n  className?: string;\n  style?: React.CSSProperties;\n  onElementsReady?: (functions: ControlFunctions) => void;\n  // Parts prop that will be passed from parent\n  parts: Part[];\n  // Animation and phase props that will be passed from parent\n  phases?: Phase[];\n  selectedPhaseId?: string | null;\n  selectedStepId?: string | null;\n  selectStep?: (phaseId: string, stepId: string) => void;\n  isAnimating?: boolean;\n  isPreparingAnimation?: boolean;\n  setIsAnimating?: (animating: boolean) => void;\n  setIsPreparingAnimation?: (preparing: boolean) => void;\n  // Navigation handlers from parent (single source of truth)\n  handleNext?: () => void;\n  handlePrevious?: () => void;\n  // Camera settings callback\n  onCameraSettingsReady?: (setCameraFn: (settings: any) => void) => void;\n  // Optional shared model view core state\n  sharedModelViewCore?: any;\n}\n\nconst TnkrEditorModelViewCore: React.FC<TnkrEditorModelViewCoreProps> = ({\n  htmlString,\n  className,\n  style,\n  onElementsReady,\n  // Accept all dependencies as props instead of using hooks\n  parts,\n  phases = [],\n  selectedPhaseId,\n  selectedStepId,\n  selectStep,\n  isAnimating = false,\n  isPreparingAnimation = false,\n  setIsAnimating,\n  setIsPreparingAnimation,\n  // Navigation handlers from parent\n  handleNext: parentHandleNext,\n  handlePrevious: parentHandlePrevious,\n  onCameraSettingsReady,\n  // Optional shared model view core state\n  sharedModelViewCore,\n}) => {\n  // Use shared model view core state if provided, otherwise create local hook\n  const localModelViewCore = useModelViewCore(parts);\n  const modelViewCore = sharedModelViewCore || localModelViewCore;\n\n  const {\n    containerRef,\n    scriptsLoaded,\n    initializeModel,\n    controlFunctions,\n    partOperations,\n    handleShowAllParts,\n    exitIsolation,\n    updateExplosion,\n    updateDirectionalExplosion,\n    setCameraSettings,\n    contextMenu,\n    setContextMenu,\n    handleContextMenuHighlight,\n    handleContextMenuRemoveHighlight,\n    handleContextMenuHide,\n    handleContextMenuShow,\n    handleContextMenuIsolate,\n    isPartHighlighted,\n    isPartHidden,\n    isPartIsolated,\n    isolationSettings,\n    updateIsolationTransparency,\n    updateIsolationHideTransparent,\n  } = modelViewCore;\n\n  // Pass camera settings function to parent when available\n  useEffect(() => {\n    if (setCameraSettings && onCameraSettingsReady) {\n      onCameraSettingsReady(setCameraSettings);\n    }\n  }, [setCameraSettings, onCameraSettingsReady]);\n\n  const [lastStepId, setLastStepId] = useState<string | null>(null);\n  const [lastStepPartsCount, setLastStepPartsCount] = useState<number>(0);\n  const isAnimatingRef = useRef(false);\n  const isPreparingRef = useRef(false);\n  const lastInitializedHtmlRef = useRef<string | null>(null);\n\n  // Get current step data\n  const getCurrentStepData = useCallback(() => {\n    if (!selectedPhaseId || !selectedStepId) return null;\n\n    const selectedPhase = phases.find((phase) => phase.id === selectedPhaseId);\n    if (!selectedPhase) return null;\n\n    // First try to find the step in the current phase\n    let selectedStep = selectedPhase.steps.find(\n      (step) => step.id === selectedStepId\n    );\n\n    // If not found in current phase, search across all phases (for cross-phase step references)\n    if (!selectedStep) {\n      for (const phase of phases) {\n        selectedStep = phase.steps.find((step) => step.id === selectedStepId);\n        if (selectedStep) {\n          break;\n        }\n      }\n    }\n\n    if (!selectedStep) return null;\n\n    const currentStepIndex = selectedPhase.steps.findIndex(\n      (step) => step.id === selectedStepId\n    );\n\n    return {\n      steps: selectedPhase.steps,\n      currentStepIndex,\n      selectedStep,\n      selectedPhase,\n    };\n  }, [phases, selectedPhaseId, selectedStepId]);\n\n  // Create a flat list of all steps across all phases for navigation\n  const getAllSteps = useCallback(() => {\n    const allSteps: Array<{\n      phaseId: string;\n      stepId: string;\n      phaseIndex: number;\n      stepIndex: number;\n    }> = [];\n    phases.forEach((phase, phaseIndex) => {\n      phase.steps.forEach((step, stepIndex) => {\n        allSteps.push({\n          phaseId: phase.id,\n          stepId: step.id,\n          phaseIndex,\n          stepIndex,\n        });\n      });\n    });\n    return allSteps;\n  }, [phases]);\n\n  // Use parent navigation handlers if provided, otherwise create local ones as fallback\n  const handlePrevious = useCallback(() => {\n    if (parentHandlePrevious) {\n      // Check animation state before calling parent handler\n      if (isAnimatingRef.current || isPreparingRef.current) return;\n      parentHandlePrevious();\n    } else {\n      // Fallback to local implementation for backward compatibility\n      if (!selectStep || !selectedPhaseId || !selectedStepId) return;\n      if (isAnimatingRef.current || isPreparingRef.current) return;\n\n      const allSteps = getAllSteps();\n      const currentIndex = allSteps.findIndex(\n        (s) => s.phaseId === selectedPhaseId && s.stepId === selectedStepId\n      );\n\n      if (currentIndex > 0) {\n        const prevStep = allSteps[currentIndex - 1];\n        selectStep(prevStep.phaseId, prevStep.stepId);\n      }\n    }\n  }, [\n    parentHandlePrevious,\n    selectStep,\n    selectedPhaseId,\n    selectedStepId,\n    getAllSteps,\n  ]);\n\n  const handleNext = useCallback(() => {\n    if (parentHandleNext) {\n      // Check animation state before calling parent handler\n      if (isAnimatingRef.current || isPreparingRef.current) return;\n      parentHandleNext();\n    } else {\n      // Fallback to local implementation for backward compatibility\n      if (!selectStep || !selectedPhaseId || !selectedStepId) return;\n      if (isAnimatingRef.current || isPreparingRef.current) return;\n\n      const allSteps = getAllSteps();\n      const currentIndex = allSteps.findIndex(\n        (s) => s.phaseId === selectedPhaseId && s.stepId === selectedStepId\n      );\n\n      if (currentIndex >= 0 && currentIndex < allSteps.length - 1) {\n        const nextStep = allSteps[currentIndex + 1];\n        selectStep(nextStep.phaseId, nextStep.stepId);\n      }\n    }\n  }, [\n    parentHandleNext,\n    selectStep,\n    selectedPhaseId,\n    selectedStepId,\n    getAllSteps,\n  ]);\n\n  // Keep refs in sync with state\n  useEffect(() => {\n    isAnimatingRef.current = isAnimating;\n  }, [isAnimating]);\n\n  useEffect(() => {\n    isPreparingRef.current = isPreparingAnimation;\n  }, [isPreparingAnimation]);\n\n  // Sequential animation function - animate parts one by one based on order\n  const performSequentialAnimation = useCallback(\n    async (orderedParts: Part[], hasDirectionalParts: boolean) => {\n      const partDuration = 700; // Fixed duration per part (500ms each)\n      const overlap = 0; // 30% overlap between parts for smoother flow\n\n      for (let i = 0; i < orderedParts.length; i++) {\n        // if (playAnimationControlRef.current.shouldStop) return;\n\n        const part = orderedParts[i];\n        const delay = i * partDuration * (1 - overlap);\n\n        // Start this part's animation after the delay\n        setTimeout(() => {\n          // if (playAnimationControlRef.current.shouldStop) return;\n\n          // console.log(`🎬 Animating part ${i + 1}/${orderedParts.length}:`, part.name);\n\n          const startTime = Date.now();\n          const startFactor = 1;\n          const endFactor = 0;\n\n          const animatePart = () => {\n            // if (playAnimationControlRef.current.shouldStop) return;\n\n            const elapsed = Date.now() - startTime;\n            const progress = Math.min(elapsed / partDuration, 1);\n            const easeOut = 1 - Math.pow(1 - progress, 3);\n            const currentFactor = startFactor + (endFactor - startFactor) * easeOut;\n\n            // Animate this single part\n            if (hasDirectionalParts && updateDirectionalExplosion) {\n              updateDirectionalExplosion(currentFactor, [part]);\n            } else if (updateExplosion) {\n              updateExplosion(currentFactor, [part]);\n            }\n\n            if (progress < 1) {\n              requestAnimationFrame(animatePart);\n            }\n          };\n\n          requestAnimationFrame(animatePart);\n        }, delay);\n       }\n\n\n\n      // Wait for all animations to complete\n      const totalAnimationTime = (orderedParts.length - 1) * partDuration * (1 - overlap) + partDuration;\n      await new Promise((resolve) => setTimeout(resolve, totalAnimationTime + 200));\n\n      // console.log('✅ Sequential animation completed');\n    },\n    [updateExplosion, updateDirectionalExplosion],\n  );\n\n\n  // ========================================\n  // NEW: Updated function to use partOperations.isolateShapes\n  // ========================================\n  const isolateMultipleStepParts = useCallback(\n    async (parts: any[]) => {\n      if (!partOperations) {\n        console.warn(\"❌ partOperations not available\");\n        return;\n      }\n\n      // Collect all shape IDs from the parts\n      const allShapeIds: string[] = [];\n      parts.forEach((part) => {\n        const shapeIds = collectShapeIds(part);\n        allShapeIds.push(...shapeIds);\n      });\n\n      if (allShapeIds.length > 0 && partOperations.isolateShapes) {\n        // Pass parts as assemblyStepParts context for step-aware isolation\n        // forceHide=true ensures non-step parts are hidden (no transparency in assembly mode)\n        partOperations.isolateShapes(allShapeIds, undefined, true, parts);\n      } else {\n        console.warn(\n          \"⚠️ No shape IDs found for parts:\",\n          parts.map((p) => p.name)\n        );\n      }\n    },\n    [partOperations]\n  );\n\n  // Check if we should show navigation arrows\n  const allSteps = getAllSteps();\n  const currentStepGlobalIndex = allSteps.findIndex(\n    (s) => s.phaseId === selectedPhaseId && s.stepId === selectedStepId\n  );\n  const showPrevious = currentStepGlobalIndex > 0;\n  const showNext =\n    currentStepGlobalIndex >= 0 && currentStepGlobalIndex < allSteps.length - 1;\n  const showNavigation =\n    selectedPhaseId && selectedStepId && allSteps.length > 1;\n\n  // Initialize model only when htmlString changes and scripts are loaded\n  useEffect(() => {\n    if (!htmlString || !scriptsLoaded || !initializeModel) return;\n\n    // Prevent re-initialization of the same HTML content\n    if (lastInitializedHtmlRef.current === htmlString) return;\n\n    initializeModel(htmlString);\n    lastInitializedHtmlRef.current = htmlString;\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [htmlString, scriptsLoaded]);\n\n  // Notify parent component when the model is loaded and ready\n  useEffect(() => {\n    if (!scriptsLoaded || !onElementsReady || !controlFunctions) return;\n\n    onElementsReady(controlFunctions as any);\n  }, [scriptsLoaded, onElementsReady, controlFunctions]);\n\n  // ========================================\n  // UPDATED: Handle step changes using new partOperations\n  // ========================================\n  useEffect(() => {\n    if (\n      !partOperations ||\n      !updateExplosion ||\n      !handleShowAllParts ||\n      !setCameraSettings\n    ) {\n      return;\n    }\n\n    // If we're leaving a step (selectedStepId becomes null or changes)\n    if (lastStepId && (!selectedStepId || selectedStepId !== lastStepId)) {\n      if (setIsPreparingAnimation) setIsPreparingAnimation(false);\n      if (setIsAnimating) setIsAnimating(false);\n\n      // Only show all parts if going back to phase view (no step selected)\n      // Don't show all parts when moving between steps (causes flash)\n      if (!selectedStepId) {\n        handleShowAllParts();\n      }\n\n      setLastStepId(null);\n      return;\n    }\n\n    // If we're entering a new step OR parts were added to current step\n    const isNewStep = selectedStepId && selectedStepId !== lastStepId;\n    const isPartsUpdated =\n      selectedStepId === lastStepId &&\n      selectedStepId &&\n      getCurrentStepData()?.selectedStep?.parts?.length !== lastStepPartsCount;\n\n    if (selectedStepId && (isNewStep || isPartsUpdated)) {\n      // Get step data inline to avoid dependency issues\n      let stepData = null;\n      if (selectedPhaseId && selectedStepId) {\n        const selectedPhase = phases.find(\n          (phase) => phase.id === selectedPhaseId\n        );\n\n        if (selectedPhase) {\n          // First try to find the step in the current phase\n          let selectedStep = selectedPhase.steps.find(\n            (step) => step.id === selectedStepId\n          );\n\n          // If not found in current phase, search across all phases (for cross-phase step references)\n          if (!selectedStep) {\n            for (const phase of phases) {\n              selectedStep = phase.steps.find(\n                (step) => step.id === selectedStepId\n              );\n              if (selectedStep) {\n                console.log(\n                  `📍 Found step ${selectedStepId} in different phase: ${phase.id}`\n                );\n                break;\n              }\n            }\n          }\n\n          if (selectedStep) {\n            const currentStepIndex = selectedPhase.steps.findIndex(\n              (step) => step.id === selectedStepId\n            );\n            stepData = {\n              steps: selectedPhase.steps,\n              currentStepIndex,\n              selectedStep,\n              selectedPhase,\n            };\n\n            // Apply camera settings if available for this step\n            if (selectedStep.cameraState && setCameraSettings) {\n              console.log(\n                \"📷 Applying camera settings for step:\",\n                selectedStep.title,\n                selectedStep.cameraState\n              );\n              const cameraStateToApply = selectedStep.cameraState;\n              setCameraSettings(cameraStateToApply);\n              console.log(\"setting camera state\");\n              let attempts = 0;\n              const maxAttempts = 60; // 3 seconds (60 * 50ms)\n\n              const waitForInitialization = () => {\n                const x3dElement = containerRef.current?.querySelector(\"x3d\");\n                const runtime = x3dElement && (x3dElement as any).runtime;\n\n                if (runtime && runtime.viewMatrix) {\n                  console.log(\"run time present\");\n                  // Runtime is ready for camera operations\n                  setCameraSettings(cameraStateToApply);\n                  console.log(\"camera state set\");\n                } else if (attempts < maxAttempts) {\n                  attempts++;\n                  // Poll every 50ms up to 3 seconds max\n                  setTimeout(waitForInitialization, 50);\n                } else {\n                  // Fallback: apply anyway after timeout\n                  console.warn(\n                    \"⚠️ X3D runtime not ready after 3 seconds, applying camera state anyway\"\n                  );\n                  setCameraSettings(cameraStateToApply);\n                }\n              };\n\n              waitForInitialization();\n            }\n          }\n        }\n      }\n\n      if (!stepData) {\n        setLastStepId(selectedStepId);\n        setLastStepPartsCount(0);\n        return;\n      }\n\n      if (\n        !stepData.selectedStep.parts ||\n        stepData.selectedStep.parts.length === 0\n      ) {\n        handleShowAllParts();\n        setLastStepId(selectedStepId);\n        setLastStepPartsCount(0);\n        return;\n      }\n\n      if (isAnimatingRef.current || isPreparingRef.current) {\n        return;\n      }\n\n      const animateStepParts = async () => {\n        // Start preparation phase - show loading state\n        if (setIsPreparingAnimation) setIsPreparingAnimation(true);\n        setLastStepId(selectedStepId); // Set immediately to prevent re-runs\n        setLastStepPartsCount(stepData.selectedStep.parts?.length || 0);\n\n        try {\n          // Give UI time to show loading state\n          await new Promise((resolve) => setTimeout(resolve, 100));\n          \n          // Recenter the model for optimal rotation around step parts\n          console.log('🎯 Starting recentering for automatic step transition...');\n          const autoTransitionStepParts = expandGroupsToChildren(\n            syncStepPartsWithLatestData(\n              stepData.selectedStep.parts || [], \n              phases.flatMap((phase) => phase.steps || []),\n              stepData.selectedStep.animationDirections\n            )\n          );\n          if (partOperations?.recenterToShapeIds) {\n            recenterForAssemblyStep(partOperations.recenterToShapeIds, autoTransitionStepParts);\n          }\n          \n          // Additional preparation time for recentering and complex calculations\n          await new Promise((resolve) => setTimeout(resolve, 400));\n          // Transition from preparation to animation\n          if (setIsPreparingAnimation) setIsPreparingAnimation(false);\n          if (setIsAnimating) setIsAnimating(true);\n\n          // Get all parts for the step and sync with latest data from referenced steps\n          const rawStepParts = stepData.selectedStep.parts || [];\n          // Pass ALL steps from ALL phases for complete recursive syncing\n          const allStepsFromAllPhases = phases.flatMap(\n            (phase) => phase.steps || []\n          );\n          const allStepParts = syncStepPartsWithLatestData(\n            rawStepParts,\n            allStepsFromAllPhases,\n            stepData.selectedStep.animationDirections\n          );\n\n          // Expand groups to individual transforms for animation processing\n          const expandedAllStepParts = expandGroupsToChildren(allStepParts);\n\n          // Separate step-specific parts (tagged with current step ID) from inherited parts\n          // Note: getStepSpecificParts and getInheritedParts also expand groups internally\n          const stepSpecificParts = getStepSpecificParts(\n            allStepParts,\n            selectedStepId\n          );\n\n          // Step 1: Show all parts first (both step-specific and inherited)\n          if (expandedAllStepParts.length > 0) {\n            // Show all parts that should be visible in this step\n            await isolateMultipleStepParts(expandedAllStepParts);\n          }\n\n          // Step 2: Immediately move parts to their exploded/start positions\n          // Check if any parts have directional animation metadata\n          const hasDirectionalParts = stepSpecificParts.some(\n            (part) => part.metadata?.animationDirection\n          );\n\n          console.log(\"🔄 Step Animation Debug:\", {\n            stepSpecificParts: stepSpecificParts.map((part) => ({\n              id: part.id,\n              name: part.name,\n              animationDirection: part.metadata?.animationDirection,\n            })),\n            hasDirectionalParts,\n            totalParts: stepSpecificParts.length,\n          });\n\n          if (hasDirectionalParts && updateDirectionalExplosion) {\n            console.log(\"✅ Moving parts to directional start positions\");\n            // Move parts to their exploded positions instantly (factor = 1)\n            updateDirectionalExplosion(1, stepSpecificParts);\n          } else {\n            console.log(\"⚠️ Using default explosion positions\");\n            // Use default explosion for parts without specified directions\n            updateExplosion(3, stepSpecificParts);\n          }\n\n          // Step 3: Wait 1.5 seconds with parts in their start positions\n          console.log(\n            \"⏳ Parts in start position. Waiting 1.5 seconds before animating...\"\n          );\n          await new Promise((resolve) => setTimeout(resolve, 1500));\n          console.log(\"🎬 Starting animation now!\");\n\n          // Step 4: Execute sequential animation (always use this as default)\n          console.log('🎬 EXECUTING SEQUENTIAL ANIMATION');\n          await performSequentialAnimation(stepSpecificParts, hasDirectionalParts);\n\n        } catch (error) {\n          console.error(\"❌ Error in step animation:\", error);\n        } finally {\n          if (setIsPreparingAnimation) setIsPreparingAnimation(false);\n          if (setIsAnimating) setIsAnimating(false);\n        }\n      };\n\n      // Start animation sequence\n      animateStepParts();\n    }\n  }, [\n    selectedStepId,\n    lastStepId,\n    lastStepPartsCount,\n    selectedPhaseId,\n    phases,\n    partOperations, // UPDATED: Use partOperations instead of isolatePart\n    updateExplosion,\n    updateDirectionalExplosion,\n    handleShowAllParts,\n    performSequentialAnimation,\n    isolateMultipleStepParts,\n    setIsAnimating,\n    setIsPreparingAnimation,\n    getCurrentStepData,\n    setCameraSettings,\n    controlFunctions,\n    scriptsLoaded, // Add scriptsLoaded to ensure model is ready before applying camera states\n  ]);\n\n  return (\n    <div className={`w-full h-full relative ${className || \"\"}`} style={style}>\n      {/* Loading Indicator */}\n      {!scriptsLoaded && (\n        <div className=\"absolute inset-0 flex items-center justify-center bg-[#0A0A0A] z-20\">\n          <div className=\"flex flex-col items-center space-y-4\">\n            <div className=\"animate-spin rounded-full h-12 w-12 border-2 border-white border-t-transparent\"></div>\n            <p className=\"text-white/70 text-sm\">Loading 3D model...</p>\n          </div>\n        </div>\n      )}\n\n      {/* Animation Preparation Loading */}\n      {isPreparingAnimation && (\n        <>\n          {/* Dark Background to Hide Model */}\n          <div className=\"absolute inset-0 bg-[#0A0A0A] z-30\"></div>\n\n          {/* Loading Content */}\n          <div className=\"absolute inset-0 flex items-center justify-center z-31\">\n            <div className=\"flex flex-col items-center space-y-4\">\n              <div\n                className=\"animate-spin rounded-full h-10 w-10 border-2 border-t-transparent\"\n                style={{ borderColor: 'var(--tnkr-primary)', borderTopColor: 'transparent' }}\n              ></div>\n              <p className=\"text-white/90 text-sm font-medium\">\n                Preparing animation...\n              </p>\n              <p className=\"text-white/60 text-xs\">\n                Calculating part positions\n              </p>\n            </div>\n          </div>\n        </>\n      )}\n\n      {/* Isolation Transparency Modal */}\n      <IsolationTransparencyModal\n        isOpen={!!isolationSettings.isolatedPartName}\n        onClose={() => {\n          // Use exitIsolation to preserve hidden parts (matching dashboard behavior)\n          const stepParts = isolationSettings.assemblyStepParts;\n          exitIsolation(stepParts);\n        }}\n        transparencyValue={isolationSettings.transparencyLevel}\n        onTransparencyChange={updateIsolationTransparency}\n        hideTransparent={isolationSettings.hideTransparent}\n        onHideTransparentChange={updateIsolationHideTransparent}\n        isolatedPartName={isolationSettings.isolatedPartName}\n      />\n\n      {/* Navigation Arrows - only show when a phase is selected and has multiple steps */}\n      {showNavigation && (\n        <>\n          <div className=\"absolute left-4 top-1/2 transform -translate-y-1/2 z-10\">\n            <Button\n              variant=\"ghost\"\n              size=\"sm\"\n              onClick={handlePrevious}\n              disabled={!showPrevious || isAnimating || isPreparingAnimation}\n              className=\"flex w-10 h-10 items-center cursor-pointer bg-[#242425] text-white border border-gray-600 rounded-full disabled:opacity-30 focus:ring-0 focus-visible:ring-0\"\n              onMouseEnter={(e) => {\n                e.currentTarget.style.borderColor = 'var(--tnkr-primary)';\n              }}\n              onMouseLeave={(e) => {\n                e.currentTarget.style.borderColor = '#4b5563';\n              }}\n            >\n              <Icon icon=\"bitcoin-icons:arrow-left-outline\" className=\"\" />\n            </Button>\n          </div>\n\n          <div className=\"absolute right-4 top-1/2 transform -translate-y-1/2 z-10\">\n            <Button\n              variant=\"ghost\"\n              size=\"sm\"\n              onClick={handleNext}\n              disabled={!showNext || isAnimating || isPreparingAnimation}\n              className=\"w-10 h-10 cursor-pointer bg-[#242425] text-white border border-gray-600 rounded-full disabled:opacity-30 focus:ring-0 focus-visible:ring-0\"\n              onMouseEnter={(e) => {\n                e.currentTarget.style.borderColor = 'var(--tnkr-primary)';\n              }}\n              onMouseLeave={(e) => {\n                e.currentTarget.style.borderColor = '#4b5563';\n              }}\n            >\n              <Icon icon=\"bitcoin-icons:arrow-right-outline\" className=\"\" />\n            </Button>\n          </div>\n        </>\n      )}\n      {/* X3DOM Container */}\n      <div ref={containerRef} className=\"w-full h-full\" />\n\n      {/* Context Menu */}\n      <PartContextMenu\n        contextMenu={contextMenu}\n        onClose={() =>\n          setContextMenu((prev: any) => ({ ...prev, visible: false, isOpen: false }))\n        }\n        onHighlight={handleContextMenuHighlight}\n        onRemoveHighlight={handleContextMenuRemoveHighlight}\n        onHide={handleContextMenuHide}\n        onShow={handleContextMenuShow}\n        onIsolate={handleContextMenuIsolate}\n        onShowAllParts={handleShowAllParts}\n        isHighlighted={\n          contextMenu.transformId\n            ? isPartHighlighted(contextMenu.transformId)\n            : false\n        }\n        isHidden={\n          contextMenu.transformId\n            ? isPartHidden(contextMenu.transformId)\n            : false\n        }\n        isIsolated={\n          contextMenu.transformId\n            ? isPartIsolated(contextMenu.transformId)\n            : false\n        }\n      />\n    </div>\n  );\n};\n\nexport default TnkrEditorModelViewCore;\n","\nimport React, {\n  createContext,\n  useContext,\n  useState,\n  useCallback,\n  useMemo,\n  useRef,\n} from 'react';\n\ninterface AnimationContextType {\n  isAnimating: boolean;\n  isPreparingAnimation: boolean;\n  animationSpeed: number;\n  currentAnimationStep: number | null;\n  animationDirection: 'forward' | 'backward';\n\n  // Methods\n  setIsAnimating: (value: boolean) => void;\n  setIsPreparingAnimation: (value: boolean) => void;\n  setAnimationSpeed: (speed: number) => void;\n  setCurrentAnimationStep: (step: number | null) => void;\n  setAnimationDirection: (direction: 'forward' | 'backward') => void;\n  startAnimation: () => void;\n  stopAnimation: () => void;\n  resetAnimation: () => void;\n}\n\nconst AnimationContext = createContext<AnimationContextType>(\n  {} as AnimationContextType,\n);\n\ninterface AnimationProviderProps {\n  children: React.ReactNode;\n}\n\nexport const AnimationProvider: React.FC<AnimationProviderProps> = ({\n  children,\n}) => {\n  const [isAnimating, setIsAnimatingState] = useState(false);\n  const [isPreparingAnimation, setIsPreparingAnimationState] = useState(false);\n  const [animationSpeed, setAnimationSpeedState] = useState(1);\n  const [currentAnimationStep, setCurrentAnimationStepState] = useState<\n    number | null\n  >(null);\n  const [animationDirection, setAnimationDirectionState] = useState<\n    'forward' | 'backward'\n  >('forward');\n\n  // Refs to prevent race conditions (similar to ModelViewCore pattern)\n  const isAnimatingRef = useRef(false);\n  const isPreparingRef = useRef(false);\n\n  const setIsAnimating = useCallback((value: boolean) => {\n    setIsAnimatingState(value);\n    isAnimatingRef.current = value;\n  }, []);\n\n  const setIsPreparingAnimation = useCallback((value: boolean) => {\n    setIsPreparingAnimationState(value);\n    isPreparingRef.current = value;\n  }, []);\n\n  const setAnimationSpeed = useCallback((speed: number) => {\n    setAnimationSpeedState(Math.max(0.1, Math.min(3, speed))); // Clamp between 0.1 and 3\n  }, []);\n\n  const setCurrentAnimationStep = useCallback((step: number | null) => {\n    setCurrentAnimationStepState(step);\n  }, []);\n\n  const setAnimationDirection = useCallback(\n    (direction: 'forward' | 'backward') => {\n      setAnimationDirectionState(direction);\n    },\n    [],\n  );\n\n  const startAnimation = useCallback(() => {\n    if (isAnimatingRef.current || isPreparingRef.current) return;\n    setIsAnimating(true);\n  }, [setIsAnimating]);\n\n  const stopAnimation = useCallback(() => {\n    setIsAnimating(false);\n    setIsPreparingAnimation(false);\n  }, [setIsAnimating, setIsPreparingAnimation]);\n\n  const resetAnimation = useCallback(() => {\n    setIsAnimating(false);\n    setIsPreparingAnimation(false);\n    setCurrentAnimationStepState(null);\n    setAnimationDirectionState('forward');\n  }, [setIsAnimating, setIsPreparingAnimation]);\n\n  const contextValue = useMemo(\n    () => ({\n      isAnimating,\n      isPreparingAnimation,\n      animationSpeed,\n      currentAnimationStep,\n      animationDirection,\n      setIsAnimating,\n      setIsPreparingAnimation,\n      setAnimationSpeed,\n      setCurrentAnimationStep,\n      setAnimationDirection,\n      startAnimation,\n      stopAnimation,\n      resetAnimation,\n    }),\n    [\n      isAnimating,\n      isPreparingAnimation,\n      animationSpeed,\n      currentAnimationStep,\n      animationDirection,\n      setIsAnimating,\n      setIsPreparingAnimation,\n      setAnimationSpeed,\n      setCurrentAnimationStep,\n      setAnimationDirection,\n      startAnimation,\n      stopAnimation,\n      resetAnimation,\n    ],\n  );\n\n  return (\n    <AnimationContext.Provider value={contextValue}>\n      {children}\n    </AnimationContext.Provider>\n  );\n};\n\nexport const useAnimation = () => {\n  const context = useContext(AnimationContext);\n  if (!context) {\n    throw new Error('useAnimation must be used within an AnimationProvider');\n  }\n  return context;\n};","\nimport React, { createContext, useContext, useState, useCallback, useRef } from 'react';\nimport { Part, ClickedPart, ControlFunctions, PartOperations, ModelViewCoreContextType } from './types';\nimport { deleteGroup, movePart, getAvailableGroups, findPartById, createGroup, renameGroup } from './partUtils';\n\nconst ModelViewCoreContext = createContext<ModelViewCoreContextType | null>(null);\n\ninterface ModelViewCoreProviderProps {\n  children: React.ReactNode;\n  parts: Part[];\n  onPartsChange?: (parts: Part[]) => void;\n}\n\nexport const ModelViewCoreProvider: React.FC<ModelViewCoreProviderProps> = ({ children, parts, onPartsChange }) => {\n  const [controlFunctions] = useState<ControlFunctions | null>(null);\n  const [clickedPart, setClickedPart] = useState<ClickedPart | null>(null);\n  const controlFunctionsRef = useRef<ControlFunctions | null>(null);\n\n  // Part operations that modify the parts list\n  const partOperations: PartOperations = {\n    deleteGroup: (groupId: string) => {\n      const updatedParts = deleteGroup(groupId, parts);\n      onPartsChange?.(updatedParts);\n    },\n    movePart: (partId: string, targetGroupId: string | null) => {\n      const updatedParts = movePart(partId, targetGroupId, parts);\n      onPartsChange?.(updatedParts);\n    },\n    getAvailableGroups: () => {\n      return getAvailableGroups(parts);\n    },\n    findPartById: (partId: string) => {\n      return findPartById(partId, parts);\n    },\n    createGroup: (name: string, partIds: string[]) => {\n      const updatedParts = createGroup(name, partIds, parts);\n      onPartsChange?.(updatedParts);\n    },\n    renameGroup: (groupId: string, newName: string) => {\n      const updatedParts = renameGroup(groupId, newName, parts);\n      onPartsChange?.(updatedParts);\n    },\n  };\n\n  // Set control functions when model is ready\n  // const registerControlFunctions = useCallback((functions: ControlFunctions) => {\n  //   setControlFunctions(functions);\n  //   controlFunctionsRef.current = functions;\n  // }, []);\n\n  // Handle explosion change\n  const handleExplosionChange = useCallback((value: number, specificTransforms?: Part[]) => {\n    if (controlFunctionsRef.current?.handleExplosionChange) {\n      controlFunctionsRef.current.handleExplosionChange(value, specificTransforms);\n    }\n  }, []);\n\n  // Handle show all parts\n  const handleShowAllParts = useCallback(() => {\n    if (controlFunctionsRef.current?.handleShowAllParts) {\n      controlFunctionsRef.current.handleShowAllParts();\n    }\n  }, []);\n\n  // Set transform transparency\n  const setTransformTransparency = useCallback((transformId: string, transparency: number) => {\n    if (controlFunctionsRef.current?.setTransformTransparency) {\n      controlFunctionsRef.current.setTransformTransparency(transformId, transparency);\n    }\n  }, []);\n\n  // Get camera settings\n  const getCameraSettings = useCallback(() => {\n    if (controlFunctionsRef.current?.getCameraSettings) {\n      return controlFunctionsRef.current.getCameraSettings();\n    }\n    return null;\n  }, []);\n\n  // Set camera settings\n  const setCameraSettings = useCallback((settings: { zoom?: number; angle?: number }) => {\n    if (controlFunctionsRef.current?.setCameraSettings) {\n      controlFunctionsRef.current.setCameraSettings(settings);\n    }\n  }, []);\n\n  // Highlight transform\n  const highlightTransform = useCallback((transformId: string) => {\n    if (controlFunctionsRef.current?.highlightTransform) {\n      controlFunctionsRef.current.highlightTransform(transformId);\n    }\n  }, []);\n\n  // Clear highlight\n  const clearHighlight = useCallback(() => {\n    if (controlFunctionsRef.current?.clearHighlight) {\n      controlFunctionsRef.current.clearHighlight();\n    }\n  }, []);\n\n  const value: ModelViewCoreContextType = {\n    controlFunctions,\n    partOperations,\n    clickedPart,\n    setClickedPart,\n    handleExplosionChange,\n    handleShowAllParts,\n    setTransformTransparency,\n    getCameraSettings,\n    setCameraSettings,\n    highlightTransform,\n    clearHighlight,\n  };\n\n  return <ModelViewCoreContext.Provider value={value}>{children}</ModelViewCoreContext.Provider>;\n};\n\nexport const useModelViewCoreContext = () => {\n  const context = useContext(ModelViewCoreContext);\n  if (!context) {\n    throw new Error('useModelViewCoreContext must be used within ModelViewCoreProvider');\n  }\n  return context;\n};\n\n// Export a hook to register control functions from the model core\nexport const useRegisterControlFunctions = () => {\n  const context = useContext(ModelViewCoreContext);\n  if (!context) {\n    throw new Error('useRegisterControlFunctions must be used within ModelViewCoreProvider');\n  }\n  return (context as any).registerControlFunctions;\n};\n","interface S3Config {\n  region: string;\n  accessKeyId: string;\n  secretAccessKey: string;\n}\n\ninterface S3UtilsOptions {\n  s3Url?: string;\n  bucket?: string;\n  key?: string;\n}\n\n/**\n * S3 Content Extraction Utility\n * Extracts content from S3 using AWS SDK v3\n */\nexport class S3Utils {\n  private s3Client: any = null;\n  private config: S3Config;\n\n  constructor(config: S3Config) {\n    this.config = config;\n  }\n\n\n  /**\n   * Parse S3 URL to extract bucket and key\n   */\n  private parseS3Url(s3Url: string): { bucket: string; key: string } {\n    const s3UrlPattern = /^s3:\\/\\/([^\\/]+)\\/(.+)$/;\n    const match = s3Url.match(s3UrlPattern);\n    \n    if (!match) {\n      throw new Error('Invalid S3 URL format. Expected: s3://bucket/key');\n    }\n\n    return {\n      bucket: match[1],\n      key: match[2]\n    };\n  }\n\n  /**\n   * Extract content from S3\n   */\n\n  /**\n   * Get content type based on file extension\n   */\n}\n\n\n/**\n * Helper function to extract content from S3 URL via CloudFront with API fallback\n * Now includes Zustand caching to avoid redundant fetches\n */\nexport async function extractS3Content(s3Url: string): Promise<string> {\n  // Import Zustand store dynamically to avoid circular dependencies\n  const { useProductDataStore } = await import('@/core/stores/useProductDataStore');\n  const store = useProductDataStore.getState();\n\n  // ===== CHECK CACHE FIRST =====\n  const cached = store.getS3Content(s3Url);\n  if (cached && typeof cached.content === 'string') {\n    console.log('✅ S3 content cache hit for', s3Url);\n    return cached.content;\n  }\n\n  try {\n    // Convert S3 URL to CloudFront URL\n    const { convertS3UrlToCloudFront, isCloudFrontConfigured } = await import('./cloudfront');\n\n    let response: Response;\n\n    if (isCloudFrontConfigured()) {\n      // Primary: Fetch from CloudFront\n      const cloudFrontUrl = convertS3UrlToCloudFront(s3Url);\n      console.log('📡 Fetching content from CloudFront:', cloudFrontUrl);\n\n      response = await fetch(cloudFrontUrl, {\n        method: 'GET',\n        headers: { 'Accept': 'application/json,text/html,application/xhtml+xml,application/xml' }\n      });\n\n      if (!response.ok) {\n        console.warn(`CloudFront fetch failed: ${response.status}, falling back to API`);\n        throw new Error(`CloudFront fetch failed: ${response.status}`);\n      }\n    } else {\n      // Fallback: Use original API method\n      console.warn('CloudFront not configured, using API fallback');\n      response = await fetch('/api/fetch-s3-content', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ s3Url })\n      });\n\n      if (!response.ok) {\n        throw new Error(`Failed to fetch S3 content via API: ${response.status}`);\n      }\n    }\n\n    const content = await response.text();\n\n    // Determine file type from S3 URL\n    const fileExtension = s3Url.split('.').pop()?.toLowerCase();\n    const isTextFile = ['x3d', 'html', 'xml', 'txt', 'css', 'js'].includes(fileExtension || '');\n\n    let processedContent: string;\n    if (typeof content === 'string') {\n      processedContent = content;\n    } else if (typeof content === 'object' && content !== null) {\n      // Only stringify JSON-like content, not text files\n      if (isTextFile) {\n        console.warn(`Expected string content for ${fileExtension} file, got object:`, content);\n        processedContent = String(content);\n      } else {\n        processedContent = JSON.stringify(content);\n      }\n    } else {\n      processedContent = String(content);\n    }\n\n    // ===== CACHE THE FETCHED CONTENT =====\n    store.setS3Content(s3Url, processedContent);\n\n    return processedContent;\n  } catch (error) {\n    console.error('S3 content fetch error:', error);\n\n    // Try API fallback for any error\n    try {\n      console.log('🔄 Attempting API fallback after CloudFront failure');\n      const response = await fetch('/api/fetch-s3-content', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ s3Url })\n      });\n\n      if (!response.ok) {\n        throw new Error(`API fallback also failed: ${response.status} ${response.statusText}`);\n      }\n\n      const data = await response.json();\n      const content = data.content || data;\n\n      // Determine file type from S3 URL\n      const fileExtension = s3Url.split('.').pop()?.toLowerCase();\n      const isTextFile = ['x3d', 'html', 'xml', 'txt', 'css', 'js'].includes(fileExtension || '');\n\n      let processedContent: string;\n      if (typeof content === 'string') {\n        processedContent = content;\n      } else if (typeof content === 'object' && content !== null) {\n        if (isTextFile) {\n          processedContent = String(content);\n        } else {\n          processedContent = JSON.stringify(content);\n        }\n      } else {\n        processedContent = String(content);\n      }\n\n      // ===== CACHE THE FALLBACK CONTENT =====\n      store.setS3Content(s3Url, processedContent);\n\n      return processedContent;\n    } catch (fallbackError) {\n      console.error('Both CloudFront and API fallback failed:', fallbackError);\n      throw error; // Throw original error\n    }\n  }\n}\n\n/**\n * Helper function to extract content with bucket and key\n */\n\n\n/**\n * Extract and process phases with S3 step data\n */\nexport async function extractPhasesWithS3Data(phases: any[], s3BaseUrl?: string): Promise<any[]> {\n  if (!phases || phases.length === 0) {\n    return phases;\n  }\n\n  try {\n    // In browser environment, fetch S3 data through API proxy\n      // Parse S3 URL to get bucket for step data\n      const s3UrlPattern = /^s3:\\/\\/([^\\/]+)\\//;\n      const bucketMatch = s3BaseUrl?.match(s3UrlPattern);\n      const bucket = bucketMatch ? bucketMatch[1] : null;\n\n      if (!bucket) {\n        console.warn('No S3 bucket found for phase extraction');\n        return phases;\n      }\n\n      // Process phases with API proxy for S3 content\n      const processedPhases = await Promise.all(\n        phases.map(async (phase: any) => {\n          const stepsWithParts = await Promise.all(\n            (phase.steps || []).map(async (step: any) => {\n              // If step has S3 data, load parts through API proxy\n              if (step.hasS3Data && step.s3Key) {\n                try {\n                  const s3Url = `s3://${bucket}/${step.s3Key}`;\n                  const response = await fetch('/api/fetch-s3-content', {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application/json' },\n                    body: JSON.stringify({ s3Url }),\n                  });\n                  \n                  if (response.ok) {\n                    const data = await response.json();\n                    const stepData = data.content || data;\n                    const stepPartsData = JSON.parse(stepData);\n                    return {\n                      ...step,\n                      parts: stepPartsData.parts || [],\n                    };\n                  }\n                } catch (stepError) {\n                  console.warn(`Failed to load S3 data for step ${step.id}:`, stepError);\n                }\n              }\n              return step;\n            })\n          );\n\n          return { ...phase, steps: stepsWithParts };\n        })\n      );\n\n      return processedPhases;\n\n  } catch (phasesError) {\n    console.warn('Failed to process phases with S3 data:', phasesError);\n    return phases;\n  }\n}\n\n/**\n * Fetch product data from the TNKR API\n */\nexport async function fetchProductData(organizationId: string, productId: string): Promise<import('@/core/hooks/useProductData').ProductMetadata> {\n  console.log('📋 Fetching product data from API:', `${organizationId}/${productId}`);\n\n  const response = await fetch(\n    `/api/get_product_by_org_id_and_product_id?orgId=${organizationId}&productId=${productId}`,\n    {\n      method: 'GET',\n      headers: { 'Content-Type': 'application/json' },\n    },\n  );\n\n  if (!response.ok) throw new Error(`Failed to fetch product: ${response.status}`);\n\n  const productData = await response.json();\n\n  return productData;\n}\n\n/**\n * Fetch organization customization settings from the TNKR API\n */\nexport async function fetchOrgCustomization(organizationId: string): Promise<import('@/core/hooks/useProductData').OrgCustomization | null> {\n  console.log('🎨 Fetching organization customization:', organizationId);\n\n  try {\n    const response = await fetch(\n      `/api/customization?organisation_id=${organizationId}`,\n      {\n        method: 'GET',\n        headers: { 'Content-Type': 'application/json' },\n      },\n    );\n\n    if (!response.ok) {\n      console.warn(`Failed to fetch org customization: ${response.status}`);\n      return null;\n    }\n\n    const customization = await response.json();\n    return customization;\n  } catch (error) {\n    console.warn('Failed to fetch organization customization:', error);\n    return null;\n  }\n}\n\n/**\n * Fetch phases data from the consuming app's API\n */\nexport async function fetchPhasesData(organizationId: string, productId: string): Promise<import('@/app/components/TnkrModelView/types').Phase[]> {\n  try {\n    const response = await fetch(\n      `/api/phases?productId=${productId}&organizationId=${organizationId}`\n    );\n\n    if (response.ok) {\n      const result = await response.json();\n      return result.phases || [];\n    }\n  } catch (error) {\n    console.warn('Failed to fetch phases from API:', error);\n  }\n  return [];\n}\n\n/**\n * Fetch pointer annotations (2D annotations) from the consuming app's API\n */\nexport async function fetchPointers(organizationId: string, productId: string): Promise<import('@/core/hooks/useProductData').PointerAnnotation[]> {\n  try {\n    console.log('🎯 Fetching pointer annotations:', `${organizationId}/${productId}`);\n    const response = await fetch(\n      `/api/pointers?productId=${productId}&organizationId=${organizationId}`\n    );\n\n    if (response.ok) {\n      const result = await response.json();\n      return result.pointers || [];\n    }\n  } catch (error) {\n    console.warn('Failed to fetch pointers from API:', error);\n  }\n  return [];\n}\n\n/**\n * Fetch single product data for utility card display\n */\nexport async function fetchSingleProductData(organizationId: string, productId: string): Promise<any> {\n  try {\n    const response = await fetch(`/api/organizations/${organizationId}/products/${productId}`, {\n      method: 'GET',\n      headers: {\n        'Content-Type': 'application/json',\n        'X_API_KEY': 'tnkr-staging-1758-01-08-24'\n      }\n    });\n\n    if (!response.ok) {\n      throw new Error(`Failed to fetch product: ${response.status}`);\n    }\n\n    const data = await response.json();\n    return data;\n  } catch (error) {\n    console.error('Error fetching single product data:', error);\n    throw error;\n  }\n}\n\n/**\n * Fetch and process parts data from S3 via CloudFront with API fallback\n * Now includes Zustand caching to avoid redundant fetches\n */\nexport async function fetchPartsFromS3(s3Url: string): Promise<any[]> {\n  // Import Zustand store dynamically to avoid circular dependencies\n  const { useProductDataStore } = await import('@/core/stores/useProductDataStore');\n  const store = useProductDataStore.getState();\n\n  // ===== CHECK CACHE FIRST =====\n  const cached = store.getS3Content(s3Url);\n  if (cached && Array.isArray(cached.content)) {\n    console.log('✅ Parts tree cache hit');\n    return cached.content;\n  }\n\n  try {\n    console.log('🔧 Fetching Parts tree content from CloudFront:', s3Url);\n\n    // Convert S3 URL to CloudFront URL for data files\n    const { convertS3UrlToCloudFront, isCloudFrontConfigured } = await import('./cloudfront');\n\n    let response: Response;\n\n    if (isCloudFrontConfigured()) {\n      // Primary: Fetch from CloudFront\n      const cloudFrontUrl = convertS3UrlToCloudFront(s3Url);\n      console.log('📡 Fetching from CloudFront:', cloudFrontUrl);\n\n      response = await fetch(cloudFrontUrl, {\n        method: 'GET',\n        headers: { 'Accept': 'application/json' }\n      });\n\n      if (!response.ok) {\n        console.warn(`CloudFront fetch failed: ${response.status}, falling back to API`);\n        throw new Error(`CloudFront fetch failed: ${response.status}`);\n      }\n    } else {\n      // Fallback: Use original API method\n      console.warn('CloudFront not configured, using API fallback');\n      response = await fetch('/api/fetch-s3-content', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ s3Url })\n      });\n\n      if (!response.ok) {\n        throw new Error(`Failed to fetch S3 content via API: ${response.status}`);\n      }\n    }\n\n    const content = await response.text();\n    let parsedData;\n\n    try {\n      parsedData = JSON.parse(content);\n    } catch (parseError) {\n      console.error('Failed to parse parts tree data as JSON:', parseError);\n      return [];\n    }\n\n    // Handle the parsed data\n    if (parsedData) {\n      // If it's not an array, wrap it in an array\n      const partsArray = Array.isArray(parsedData) ? parsedData : [parsedData];\n\n      const processedParts = partsArray.map((part: any) => ({\n        id: part.id,\n        name: part.name,\n        type: part.type,\n        shapeIds: part.shapeIds,\n        position: part.position || { x: 0, y: 0, z: 0 },\n        visible: part.visible !== false,\n        isolated: part.isolated || false,\n        children: part.children || [],\n      }));\n\n      // ===== CACHE THE PROCESSED PARTS =====\n      store.setS3Content(s3Url, processedParts);\n\n      return processedParts;\n    }\n    return [];\n  } catch (error) {\n    console.error('S3 parts fetch error:', error);\n\n    // Try API fallback for any error\n    try {\n      console.log('🔄 Attempting API fallback after CloudFront failure');\n      const response = await fetch('/api/fetch-s3-content', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ s3Url })\n      });\n\n      if (!response.ok) {\n        throw new Error(`API fallback also failed: ${response.status} ${response.statusText}`);\n      }\n\n      const content = await response.text();\n      const parsedData = JSON.parse(content);\n\n      if (parsedData) {\n        const partsArray = Array.isArray(parsedData) ? parsedData : [parsedData];\n        const processedParts = partsArray.map((part: any) => ({\n          id: part.id,\n          name: part.name,\n          type: part.type,\n          shapeIds: part.shapeIds,\n          position: part.position || { x: 0, y: 0, z: 0 },\n          visible: part.visible !== false,\n          isolated: part.isolated || false,\n          children: part.children || [],\n        }));\n\n        // ===== CACHE THE FALLBACK PARTS =====\n        store.setS3Content(s3Url, processedParts);\n\n        return processedParts;\n      }\n      return [];\n    } catch (fallbackError) {\n      console.error('Both CloudFront and API fallback failed:', fallbackError);\n      return [];\n    }\n  }\n}\n\n/**\n * Fetch X3D/HTML content from S3 via CloudFront with API fallback\n *\n * Note: X3D files are NOT cached due to their large size (33MB+) which exceeds\n * localStorage quota. Browser will handle HTTP caching instead.\n */\nexport async function fetchX3DContent(s3Url: string): Promise<string> {\n  try {\n    console.log('🌐 Fetching X3D content from CloudFront:', s3Url);\n\n    // Convert S3 URL to CloudFront URL\n    const { convertS3UrlToCloudFront, isCloudFrontConfigured } = await import('./cloudfront');\n\n    let response: Response;\n\n    if (isCloudFrontConfigured()) {\n      // Primary: Fetch from CloudFront\n      const cloudFrontUrl = convertS3UrlToCloudFront(s3Url);\n      console.log('📡 Fetching X3D from CloudFront:', cloudFrontUrl);\n\n      response = await fetch(cloudFrontUrl, {\n        method: 'GET',\n        headers: { 'Accept': 'text/html,application/xhtml+xml,application/xml' }\n      });\n\n      if (!response.ok) {\n        console.warn(`CloudFront X3D fetch failed: ${response.status}, falling back to API`);\n        throw new Error(`CloudFront fetch failed: ${response.status}`);\n      }\n    } else {\n      // Fallback: Use original API method\n      console.warn('CloudFront not configured, using API fallback for X3D');\n      response = await fetch('/api/fetch-s3-content', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ s3Url })\n      });\n\n      if (!response.ok) {\n        throw new Error(`Failed to fetch X3D content via API: ${response.status}`);\n      }\n    }\n\n    const content = await response.text();\n\n    // X3D content should always be a string (raw HTML/XML)\n    let processedContent: string;\n    if (typeof content === 'string') {\n      processedContent = content;\n    } else {\n      // If for some reason it's an object, this is unexpected for X3D\n      console.warn('X3D content received as object, expected string:', content);\n      processedContent = String(content);\n    }\n\n    console.log('✅ X3D content fetched successfully, size:', processedContent.length, 'chars');\n    // Note: Not caching due to large file size (exceeds localStorage quota)\n    return processedContent;\n  } catch (error) {\n    console.error('💥 X3D fetch error:', error);\n\n    // Try API fallback for any error\n    try {\n      console.log('🔄 Attempting API fallback for X3D after CloudFront failure');\n      const response = await fetch('/api/fetch-s3-content', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ s3Url })\n      });\n\n      if (!response.ok) {\n        throw new Error(`API fallback also failed: ${response.status} ${response.statusText}`);\n      }\n\n      const content = await response.text();\n      console.log('✅ X3D content fetched via API fallback, size:', content.length, 'chars');\n      // Note: Not caching due to large file size (exceeds localStorage quota)\n      return content;\n    } catch (fallbackError) {\n      console.error('Both CloudFront and API fallback failed for X3D:', fallbackError);\n      throw error; // Throw original error\n    }\n  }\n}\n\n/**\n * Extract and process parts from parts_tree S3 data\n * @deprecated Use fetchPartsFromS3 instead\n */\nexport async function extractPartsFromS3Tree(s3Url: string): Promise<any[]> {\n  try {\n    let partsTreeData: string;\n    \n    // If we're in a browser environment, use the API proxy\n      const response = await fetch('/api/fetch-s3-content', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ s3Url }),\n      });\n      \n      if (!response.ok) {\n        throw new Error(`Failed to fetch S3 content: ${response.status}`);\n      }\n      \n      const data = await response.json();\n      partsTreeData = data.content || data;\n\n    // Parse the content as JSON\n    const parsedData = JSON.parse(partsTreeData);\n\n    if (parsedData && Array.isArray([parsedData])) {\n      const convertedParts = [parsedData].map((part: any) => ({\n        id: part.id, // Direct transform ID\n        name: part.name, // Display name (can be renamed)\n        type: part.type,\n        shapeIds: part.shapeIds,\n        position: part.position || { x: 0, y: 0, z: 0 },\n        visible: part.visible !== false,\n        isolated: part.isolated || false,\n        children: part.children || [], // Support hierarchical structure\n      }));\n      \n      return convertedParts;\n    }\n    \n    return [];\n  } catch (error) {\n    console.error('Failed to extract parts from S3 tree:', error);\n    throw error;\n  }\n}","/**\n * Color utility functions for theme management\n * Handles color manipulation, scale generation, and conversions\n */\n\n/**\n * Converts hex color to RGB values\n * @param hex - Hex color string (e.g., \"#AA423A\" or \"AA423A\")\n * @returns RGB object { r, g, b } with values 0-255\n */\nexport function hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n  // Remove # if present\n  const cleanHex = hex.replace(/^#/, '');\n\n  // Validate hex format\n  if (!/^[0-9A-Fa-f]{6}$/.test(cleanHex)) {\n    console.warn(`Invalid hex color: ${hex}`);\n    return null;\n  }\n\n  const r = parseInt(cleanHex.substring(0, 2), 16);\n  const g = parseInt(cleanHex.substring(2, 4), 16);\n  const b = parseInt(cleanHex.substring(4, 6), 16);\n\n  return { r, g, b };\n}\n\n/**\n * Converts RGB to hex color\n * @param r - Red value (0-255)\n * @param g - Green value (0-255)\n * @param b - Blue value (0-255)\n * @returns Hex color string with # prefix\n */\nexport function rgbToHex(r: number, g: number, b: number): string {\n  const toHex = (n: number) => {\n    const hex = Math.round(Math.max(0, Math.min(255, n))).toString(16);\n    return hex.length === 1 ? '0' + hex : hex;\n  };\n\n  return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\n/**\n * Converts RGB to HSL\n * @param r - Red value (0-255)\n * @param g - Green value (0-255)\n * @param b - Blue value (0-255)\n * @returns HSL object { h, s, l } where h is 0-360, s and l are 0-100\n */\nexport function rgbToHsl(r: number, g: number, b: number): { h: number; s: number; l: number } {\n  r /= 255;\n  g /= 255;\n  b /= 255;\n\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  let h = 0;\n  let s = 0;\n  const l = (max + min) / 2;\n\n  if (max !== min) {\n    const d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n    switch (max) {\n      case r:\n        h = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n        break;\n      case g:\n        h = ((b - r) / d + 2) / 6;\n        break;\n      case b:\n        h = ((r - g) / d + 4) / 6;\n        break;\n    }\n  }\n\n  return {\n    h: Math.round(h * 360),\n    s: Math.round(s * 100),\n    l: Math.round(l * 100),\n  };\n}\n\n/**\n * Converts HSL to RGB\n * @param h - Hue (0-360)\n * @param s - Saturation (0-100)\n * @param l - Lightness (0-100)\n * @returns RGB object { r, g, b } with values 0-255\n */\nexport function hslToRgb(h: number, s: number, l: number): { r: number; g: number; b: number } {\n  h /= 360;\n  s /= 100;\n  l /= 100;\n\n  let r, g, b;\n\n  if (s === 0) {\n    r = g = b = l;\n  } else {\n    const hue2rgb = (p: number, q: number, t: number) => {\n      if (t < 0) t += 1;\n      if (t > 1) t -= 1;\n      if (t < 1/6) return p + (q - p) * 6 * t;\n      if (t < 1/2) return q;\n      if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n      return p;\n    };\n\n    const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n    const p = 2 * l - q;\n\n    r = hue2rgb(p, q, h + 1/3);\n    g = hue2rgb(p, q, h);\n    b = hue2rgb(p, q, h - 1/3);\n  }\n\n  return {\n    r: Math.round(r * 255),\n    g: Math.round(g * 255),\n    b: Math.round(b * 255),\n  };\n}\n\n/**\n * Lightens a color by adjusting its lightness in HSL\n * @param hex - Hex color string\n * @param amount - Amount to lighten (0-100), positive values lighten\n * @returns Hex color string\n */\nexport function adjustLightness(hex: string, amount: number): string {\n  const rgb = hexToRgb(hex);\n  if (!rgb) return hex;\n\n  const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);\n  hsl.l = Math.max(0, Math.min(100, hsl.l + amount));\n\n  const newRgb = hslToRgb(hsl.h, hsl.s, hsl.l);\n  return rgbToHex(newRgb.r, newRgb.g, newRgb.b);\n}\n\n/**\n * Generates a complete color scale from a base color (50-950)\n * Similar to Tailwind's color scale approach\n * @param baseHex - Base hex color (will be used as the 500 value)\n * @returns Object with color scale from 50 to 950\n */\nexport function generateColorScale(baseHex: string): Record<string, string> {\n  const rgb = hexToRgb(baseHex);\n  if (!rgb) {\n    console.warn(`Invalid base color: ${baseHex}, using fallback`);\n    return generateDefaultScale();\n  }\n\n  const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);\n\n  // Define lightness adjustments for each scale\n  // 500 is the base color, we adjust from there\n  const scales: Record<string, number> = {\n    '50': 95,   // Very light\n    '100': 90,  // Light\n    '200': 80,  // Lighter\n    '300': 70,  // Light\n    '400': 60,  // Medium-light\n    '500': hsl.l,  // Base color (unchanged)\n    '600': Math.max(hsl.l - 10, 20),  // Darker\n    '700': Math.max(hsl.l - 20, 15),  // Dark\n    '800': Math.max(hsl.l - 30, 10),  // Very dark\n    '900': Math.max(hsl.l - 40, 5),   // Darkest\n    '950': Math.max(hsl.l - 45, 3),   // Extra dark\n  };\n\n  const colorScale: Record<string, string> = {};\n\n  Object.entries(scales).forEach(([key, lightness]) => {\n    // Adjust saturation for very light colors to prevent washout\n    let saturation = hsl.s;\n    if (lightness > 80) {\n      saturation = Math.max(hsl.s - 20, 20);\n    }\n\n    const scaleRgb = hslToRgb(hsl.h, saturation, lightness);\n    colorScale[key] = rgbToHex(scaleRgb.r, scaleRgb.g, scaleRgb.b);\n  });\n\n  return colorScale;\n}\n\n/**\n * Generates default color scale (fallback to #AA423A)\n */\nfunction generateDefaultScale(): Record<string, string> {\n  return {\n    '50': '#FDF2F1',\n    '100': '#FAE5E3',\n    '200': '#F4CCC8',\n    '300': '#EEB3AD',\n    '400': '#D48177',\n    '500': '#AA423A',\n    '600': '#993B34',\n    '700': '#88342E',\n    '800': '#662723',\n    '900': '#441A17',\n    '950': '#220D0C',\n  };\n}\n\n/**\n * Converts hex color to rgba CSS string\n * @param hex - Hex color string\n * @param alpha - Alpha value (0-1)\n * @returns CSS rgba string\n */\nexport function hexToRgba(hex: string, alpha: number = 1): string {\n  const rgb = hexToRgb(hex);\n  if (!rgb) return `rgba(170, 66, 58, ${alpha})`; // Fallback\n\n  return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;\n}\n\n/**\n * Formats RGB values to CSS rgba string\n * @param r - Red (0-255)\n * @param g - Green (0-255)\n * @param b - Blue (0-255)\n * @param a - Alpha (0-1)\n * @returns CSS rgba string\n */\nexport function toRgbaString(r: number, g: number, b: number, a: number = 1): string {\n  return `rgba(${r}, ${g}, ${b}, ${a})`;\n}\n","\"use client\"\n\nimport React, { createContext, useContext, useEffect, useMemo, useState } from 'react';\nimport { useProductDataContext } from './ProductDataContext';\nimport { generateColorScale, hexToRgba } from '../lib/utils/color-utils';\n\n/**\n * Theme context type definition\n */\ninterface ThemeContextType {\n  primaryColor: string;\n  tintColor: string | null;\n  colorScale: Record<string, string>;\n  getPrimaryRgba: (alpha: number) => string;\n  getTintRgba: (alpha: number) => string;\n  updateThemeColors: (primaryColor: string, tintColor?: string) => void;\n}\n\n/**\n * Organization customization data stored in localStorage\n */\ninterface OrgCustomization {\n  primary_color: string;\n  tint_color?: string;\n  organisation_id?: string;\n  timestamp?: number;\n}\n\n/**\n * Default theme values (fallback to #AA423A)\n */\nconst DEFAULT_PRIMARY_COLOR = '#AA423A';\nconst DEFAULT_TINT_COLOR = '#AA423A';\nconst THEME_STORAGE_KEY = 'tnkr-org-theme';\n\n/**\n * Theme Context\n */\nconst ThemeContext = createContext<ThemeContextType | null>(null);\n\n/**\n * Load theme colors from localStorage\n */\nconst loadThemeFromStorage = (): OrgCustomization | null => {\n  if (typeof window === 'undefined') return null;\n\n  try {\n    const stored = localStorage.getItem(THEME_STORAGE_KEY);\n    if (stored) {\n      return JSON.parse(stored);\n    }\n  } catch (error) {\n    console.error('Failed to load theme from localStorage:', error);\n  }\n  return null;\n};\n\n/**\n * Save theme colors to localStorage\n */\nconst saveThemeToStorage = (data: OrgCustomization): void => {\n  if (typeof window === 'undefined') return;\n\n  try {\n    localStorage.setItem(THEME_STORAGE_KEY, JSON.stringify({\n      ...data,\n      timestamp: Date.now(),\n    }));\n  } catch (error) {\n    console.error('Failed to save theme to localStorage:', error);\n  }\n};\n\n/**\n * ThemeProvider Component\n *\n * This component:\n * 1. Loads organization customization from localStorage immediately (for persistence)\n * 2. Reads organization customization from ProductDataContext (when available)\n * 3. Syncs ProductDataContext to localStorage for future page loads\n * 4. Generates color scale from primary_color\n * 5. Injects CSS variables into the document for use across the app\n * 6. Provides theme values via context\n *\n * @example\n * ```tsx\n * <ThemeProvider>\n *   <App />\n * </ThemeProvider>\n * ```\n */\nexport const ThemeProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n  const productDataContext = useProductDataContext();\n\n  // Load from localStorage immediately (before ProductDataContext is ready)\n  const [storedTheme, setStoredTheme] = useState<OrgCustomization | null>(() => {\n    return loadThemeFromStorage();\n  });\n\n  // Get colors from ProductDataContext (when available) or localStorage or defaults\n  const primaryColor = useMemo(() => {\n    // Priority: ProductDataContext > localStorage > default\n    if (productDataContext?.productData?.orgCustomization?.primary_color) {\n      return productDataContext.productData.orgCustomization.primary_color;\n    }\n    if (storedTheme?.primary_color) {\n      return storedTheme.primary_color;\n    }\n    return DEFAULT_PRIMARY_COLOR;\n  }, [productDataContext?.productData?.orgCustomization?.primary_color, storedTheme?.primary_color]);\n\n  const tintColor = useMemo(() => {\n    // Priority: ProductDataContext > localStorage > default\n    if (productDataContext?.productData?.orgCustomization?.tint_color) {\n      return productDataContext.productData.orgCustomization.tint_color;\n    }\n    if (storedTheme?.tint_color) {\n      return storedTheme.tint_color;\n    }\n    return DEFAULT_TINT_COLOR;\n  }, [productDataContext?.productData?.orgCustomization?.tint_color, storedTheme?.tint_color]);\n\n  // Sync ProductDataContext to localStorage when it changes\n  useEffect(() => {\n    const orgCustomization = productDataContext?.productData?.orgCustomization;\n    if (orgCustomization?.primary_color) {\n      const newTheme: OrgCustomization = {\n        primary_color: orgCustomization.primary_color,\n        tint_color: orgCustomization.tint_color,\n      };\n\n      // Only update if different from stored\n      const stored = loadThemeFromStorage();\n      if (!stored || stored.primary_color !== newTheme.primary_color || stored.tint_color !== newTheme.tint_color) {\n        saveThemeToStorage(newTheme);\n        setStoredTheme(newTheme);\n        console.log('🔄 Theme synced to localStorage:', newTheme);\n      }\n    }\n  }, [productDataContext?.productData?.orgCustomization]);\n\n  // Generate color scale from primary color\n  const colorScale = useMemo(() => {\n    return generateColorScale(primaryColor);\n  }, [primaryColor]);\n\n  // Helper functions\n  const getPrimaryRgba = (alpha: number) => hexToRgba(primaryColor, alpha);\n  const getTintRgba = (alpha: number) => hexToRgba(tintColor || primaryColor, alpha);\n\n  // Function to manually update theme colors (useful for dynamic updates)\n  const updateThemeColors = (newPrimaryColor: string, newTintColor?: string) => {\n    const newTheme: OrgCustomization = {\n      primary_color: newPrimaryColor,\n      tint_color: newTintColor,\n    };\n    saveThemeToStorage(newTheme);\n    setStoredTheme(newTheme);\n    console.log('🎨 Theme manually updated:', newTheme);\n  };\n\n  // Inject CSS variables into document\n  useEffect(() => {\n    const root = document.documentElement;\n\n    // Set primary color and its scale\n    root.style.setProperty('--tnkr-primary', primaryColor);\n    root.style.setProperty('--tnkr-primary-50', colorScale['50']);\n    root.style.setProperty('--tnkr-primary-100', colorScale['100']);\n    root.style.setProperty('--tnkr-primary-200', colorScale['200']);\n    root.style.setProperty('--tnkr-primary-300', colorScale['300']);\n    root.style.setProperty('--tnkr-primary-400', colorScale['400']);\n    root.style.setProperty('--tnkr-primary-500', colorScale['500']);\n    root.style.setProperty('--tnkr-primary-600', colorScale['600']);\n    root.style.setProperty('--tnkr-primary-700', colorScale['700']);\n    root.style.setProperty('--tnkr-primary-800', colorScale['800']);\n    root.style.setProperty('--tnkr-primary-900', colorScale['900']);\n    root.style.setProperty('--tnkr-primary-950', colorScale['950']);\n\n    // Set tint color\n    if (tintColor) {\n      root.style.setProperty('--tnkr-tint', tintColor);\n    }\n\n    // Update existing brand color variables to use the new primary color\n    // This maintains backwards compatibility with existing styles\n    root.style.setProperty('--tt-brand-color-50', colorScale['50']);\n    root.style.setProperty('--tt-brand-color-100', colorScale['100']);\n    root.style.setProperty('--tt-brand-color-200', colorScale['200']);\n    root.style.setProperty('--tt-brand-color-300', colorScale['300']);\n    root.style.setProperty('--tt-brand-color-400', colorScale['400']);\n    root.style.setProperty('--tt-brand-color-500', colorScale['500']);\n    root.style.setProperty('--tt-brand-color-600', colorScale['600']);\n    root.style.setProperty('--tt-brand-color-700', colorScale['700']);\n    root.style.setProperty('--tt-brand-color-800', colorScale['800']);\n    root.style.setProperty('--tt-brand-color-900', colorScale['900']);\n    root.style.setProperty('--tt-brand-color-950', colorScale['950']);\n\n    // Update cursor and selection colors\n    root.style.setProperty('--tt-cursor-color', colorScale['500']);\n    root.style.setProperty('--tt-selection-color', getPrimaryRgba(0.2));\n\n    // Update dark mode cursor color\n    const darkModeStyles = document.querySelector('.dark');\n    if (darkModeStyles) {\n      (darkModeStyles as HTMLElement).style.setProperty('--tt-cursor-color', colorScale['400']);\n      (darkModeStyles as HTMLElement).style.setProperty('--tt-selection-color', getPrimaryRgba(0.3));\n    }\n\n  }, [primaryColor, tintColor, colorScale, getPrimaryRgba]);\n\n  const value: ThemeContextType = {\n    primaryColor,\n    tintColor,\n    colorScale,\n    getPrimaryRgba,\n    getTintRgba,\n    updateThemeColors,\n  };\n\n  return (\n    <ThemeContext.Provider value={value}>\n      {children}\n    </ThemeContext.Provider>\n  );\n};\n\n/**\n * useTheme Hook\n *\n * Provides access to theme values and helpers\n *\n * @example\n * ```tsx\n * const { primaryColor, colorScale, getPrimaryRgba } = useTheme();\n *\n * // Use in inline styles\n * <div style={{ backgroundColor: primaryColor }} />\n *\n * // Use with opacity\n * <div style={{ backgroundColor: getPrimaryRgba(0.2) }} />\n *\n * // Use from color scale\n * <div style={{ color: colorScale['600'] }} />\n * ```\n */\nexport const useTheme = (): ThemeContextType => {\n  const context = useContext(ThemeContext);\n\n  if (!context) {\n    console.warn('useTheme must be used within ThemeProvider, using default values');\n    // Return default values if used outside provider\n    return {\n      primaryColor: DEFAULT_PRIMARY_COLOR,\n      tintColor: DEFAULT_TINT_COLOR,\n      colorScale: generateColorScale(DEFAULT_PRIMARY_COLOR),\n      getPrimaryRgba: (alpha: number) => hexToRgba(DEFAULT_PRIMARY_COLOR, alpha),\n      getTintRgba: (alpha: number) => hexToRgba(DEFAULT_TINT_COLOR, alpha),\n      updateThemeColors: () => console.warn('updateThemeColors called outside ThemeProvider'),\n    };\n  }\n\n  return context;\n};\n\n/**\n * Initialize theme from organization customization\n *\n * Call this function early in your application (e.g., in init files, CustomPage)\n * to store the organization theme colors in localStorage before components render.\n *\n * @example\n * ```tsx\n * // In your init file or CustomPage\n * useEffect(() => {\n *   const orgData = await fetchOrgCustomization();\n *   if (orgData?.primary_color) {\n *     initializeTheme(orgData.primary_color, orgData.tint_color);\n *   }\n * }, []);\n * ```\n */\nexport const initializeTheme = (primaryColor: string, tintColor?: string, organisationId?: string): void => {\n  const themeData: OrgCustomization = {\n    primary_color: primaryColor,\n    tint_color: tintColor,\n    organisation_id: organisationId,\n  };\n\n  saveThemeToStorage(themeData);\n\n  // Immediately inject CSS variables for instant visual feedback\n  if (typeof window !== 'undefined') {\n    const root = document.documentElement;\n    const colorScale = generateColorScale(primaryColor);\n\n    root.style.setProperty('--tnkr-primary', primaryColor);\n    Object.keys(colorScale).forEach(shade => {\n      root.style.setProperty(`--tnkr-primary-${shade}`, colorScale[shade]);\n      root.style.setProperty(`--tt-brand-color-${shade}`, colorScale[shade]);\n    });\n\n    if (tintColor) {\n      root.style.setProperty('--tnkr-tint', tintColor);\n    }\n  }\n};\n\n/**\n * Get current theme from localStorage\n *\n * Useful for checking if theme is already initialized before making API calls\n *\n * @example\n * ```tsx\n * const currentTheme = getStoredTheme();\n * if (!currentTheme) {\n *   // Fetch from API and initialize\n * }\n * ```\n */\nexport const getStoredTheme = (): OrgCustomization | null => {\n  return loadThemeFromStorage();\n};\n\n/**\n * Clear theme from localStorage\n *\n * Useful for logout or switching organizations\n */\nexport const clearTheme = (): void => {\n  if (typeof window !== 'undefined') {\n    localStorage.removeItem(THEME_STORAGE_KEY);\n    console.log('🎨 Theme cleared from localStorage');\n  }\n};\n\n/**\n * Fetch fresh theme from API and update immediately\n *\n * Call this on app entry (e.g., central docs) to ensure the latest color is loaded\n * even if localStorage has stale data.\n *\n * @param fetchOrgCustomization - Function to fetch org customization from API\n * @param organizationId - Organization ID to fetch data for\n *\n * @example\n * ```tsx\n * // At app entry point\n * useEffect(() => {\n *   refreshThemeFromAPI(fetchOrgCustomization, organizationId);\n * }, [organizationId]);\n * ```\n */\nexport const refreshThemeFromAPI = async (\n  fetchOrgCustomization: (orgId: string) => Promise<any>,\n  organizationId: string\n): Promise<void> => {\n  try {\n    console.log('🔄 Fetching fresh theme from API...');\n    const orgData = await fetchOrgCustomization(organizationId);\n\n    if (orgData?.primary_color) {\n      initializeTheme(\n        orgData.primary_color,\n        orgData.tint_color,\n        organizationId\n      );\n      console.log('✅ Theme refreshed from API:', orgData.primary_color);\n    }\n  } catch (error) {\n    console.error('❌ Failed to refresh theme from API:', error);\n  }\n};\n","const createStoreImpl = (createState) => {\n  let state;\n  const listeners = /* @__PURE__ */ new Set();\n  const setState = (partial, replace) => {\n    const nextState = typeof partial === \"function\" ? partial(state) : partial;\n    if (!Object.is(nextState, state)) {\n      const previousState = state;\n      state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n      listeners.forEach((listener) => listener(state, previousState));\n    }\n  };\n  const getState = () => state;\n  const getInitialState = () => initialState;\n  const subscribe = (listener) => {\n    listeners.add(listener);\n    return () => listeners.delete(listener);\n  };\n  const api = { setState, getState, getInitialState, subscribe };\n  const initialState = state = createState(setState, getState, api);\n  return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n  const slice = React.useSyncExternalStore(\n    api.subscribe,\n    React.useCallback(() => selector(api.getState()), [api, selector]),\n    React.useCallback(() => selector(api.getInitialState()), [api, selector])\n  );\n  React.useDebugValue(slice);\n  return slice;\n}\nconst createImpl = (createState) => {\n  const api = createStore(createState);\n  const useBoundStore = (selector) => useStore(api, selector);\n  Object.assign(useBoundStore, api);\n  return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n  api.dispatch = (action) => {\n    set((state) => reducer(state, action), false, action);\n    return action;\n  };\n  api.dispatchFromDevtools = true;\n  return { dispatch: (...args) => api.dispatch(...args), ...initial };\n};\nconst redux = reduxImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n  const api = trackedConnections.get(name);\n  if (!api) return {};\n  return Object.fromEntries(\n    Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n  );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n  if (store === void 0) {\n    return {\n      type: \"untracked\",\n      connection: extensionConnector.connect(options)\n    };\n  }\n  const existingConnection = trackedConnections.get(options.name);\n  if (existingConnection) {\n    return { type: \"tracked\", store, ...existingConnection };\n  }\n  const newConnection = {\n    connection: extensionConnector.connect(options),\n    stores: {}\n  };\n  trackedConnections.set(options.name, newConnection);\n  return { type: \"tracked\", store, ...newConnection };\n};\nconst removeStoreFromTrackedConnections = (name, store) => {\n  if (store === void 0) return;\n  const connectionInfo = trackedConnections.get(name);\n  if (!connectionInfo) return;\n  delete connectionInfo.stores[store];\n  if (Object.keys(connectionInfo.stores).length === 0) {\n    trackedConnections.delete(name);\n  }\n};\nconst findCallerName = (stack) => {\n  var _a, _b;\n  if (!stack) return void 0;\n  const traceLines = stack.split(\"\\n\");\n  const apiSetStateLineIndex = traceLines.findIndex(\n    (traceLine) => traceLine.includes(\"api.setState\")\n  );\n  if (apiSetStateLineIndex < 0) return void 0;\n  const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || \"\";\n  return (_b = /.+ (.+) .+/.exec(callerLine)) == null ? void 0 : _b[1];\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n  const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n  let extensionConnector;\n  try {\n    extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n  } catch (e) {\n  }\n  if (!extensionConnector) {\n    return fn(set, get, api);\n  }\n  const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n  let isRecording = true;\n  api.setState = ((state, replace, nameOrAction) => {\n    const r = set(state, replace);\n    if (!isRecording) return r;\n    const action = nameOrAction === void 0 ? {\n      type: anonymousActionType || findCallerName(new Error().stack) || \"anonymous\"\n    } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n    if (store === void 0) {\n      connection == null ? void 0 : connection.send(action, get());\n      return r;\n    }\n    connection == null ? void 0 : connection.send(\n      {\n        ...action,\n        type: `${store}/${action.type}`\n      },\n      {\n        ...getTrackedConnectionState(options.name),\n        [store]: api.getState()\n      }\n    );\n    return r;\n  });\n  api.devtools = {\n    cleanup: () => {\n      if (connection && typeof connection.unsubscribe === \"function\") {\n        connection.unsubscribe();\n      }\n      removeStoreFromTrackedConnections(options.name, store);\n    }\n  };\n  const setStateFromDevtools = (...a) => {\n    const originalIsRecording = isRecording;\n    isRecording = false;\n    set(...a);\n    isRecording = originalIsRecording;\n  };\n  const initialState = fn(api.setState, get, api);\n  if (connectionInformation.type === \"untracked\") {\n    connection == null ? void 0 : connection.init(initialState);\n  } else {\n    connectionInformation.stores[connectionInformation.store] = api;\n    connection == null ? void 0 : connection.init(\n      Object.fromEntries(\n        Object.entries(connectionInformation.stores).map(([key, store2]) => [\n          key,\n          key === connectionInformation.store ? initialState : store2.getState()\n        ])\n      )\n    );\n  }\n  if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n    let didWarnAboutReservedActionType = false;\n    const originalDispatch = api.dispatch;\n    api.dispatch = (...args) => {\n      if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && args[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n        console.warn(\n          '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n        );\n        didWarnAboutReservedActionType = true;\n      }\n      originalDispatch(...args);\n    };\n  }\n  connection.subscribe((message) => {\n    var _a;\n    switch (message.type) {\n      case \"ACTION\":\n        if (typeof message.payload !== \"string\") {\n          console.error(\n            \"[zustand devtools middleware] Unsupported action format\"\n          );\n          return;\n        }\n        return parseJsonThen(\n          message.payload,\n          (action) => {\n            if (action.type === \"__setState\") {\n              if (store === void 0) {\n                setStateFromDevtools(action.state);\n                return;\n              }\n              if (Object.keys(action.state).length !== 1) {\n                console.error(\n                  `\n                    [zustand devtools middleware] Unsupported __setState action format.\n                    When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n                    and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n                    `\n                );\n              }\n              const stateFromDevtools = action.state[store];\n              if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n                return;\n              }\n              if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n                setStateFromDevtools(stateFromDevtools);\n              }\n              return;\n            }\n            if (!api.dispatchFromDevtools) return;\n            if (typeof api.dispatch !== \"function\") return;\n            api.dispatch(action);\n          }\n        );\n      case \"DISPATCH\":\n        switch (message.payload.type) {\n          case \"RESET\":\n            setStateFromDevtools(initialState);\n            if (store === void 0) {\n              return connection == null ? void 0 : connection.init(api.getState());\n            }\n            return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n          case \"COMMIT\":\n            if (store === void 0) {\n              connection == null ? void 0 : connection.init(api.getState());\n              return;\n            }\n            return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n          case \"ROLLBACK\":\n            return parseJsonThen(message.state, (state) => {\n              if (store === void 0) {\n                setStateFromDevtools(state);\n                connection == null ? void 0 : connection.init(api.getState());\n                return;\n              }\n              setStateFromDevtools(state[store]);\n              connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n            });\n          case \"JUMP_TO_STATE\":\n          case \"JUMP_TO_ACTION\":\n            return parseJsonThen(message.state, (state) => {\n              if (store === void 0) {\n                setStateFromDevtools(state);\n                return;\n              }\n              if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n                setStateFromDevtools(state[store]);\n              }\n            });\n          case \"IMPORT_STATE\": {\n            const { nextLiftedState } = message.payload;\n            const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n            if (!lastComputedState) return;\n            if (store === void 0) {\n              setStateFromDevtools(lastComputedState);\n            } else {\n              setStateFromDevtools(lastComputedState[store]);\n            }\n            connection == null ? void 0 : connection.send(\n              null,\n              // FIXME no-any\n              nextLiftedState\n            );\n            return;\n          }\n          case \"PAUSE_RECORDING\":\n            return isRecording = !isRecording;\n        }\n        return;\n    }\n  });\n  return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, fn) => {\n  let parsed;\n  try {\n    parsed = JSON.parse(stringified);\n  } catch (e) {\n    console.error(\n      \"[zustand devtools middleware] Could not parse the received json\",\n      e\n    );\n  }\n  if (parsed !== void 0) fn(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n  const origSubscribe = api.subscribe;\n  api.subscribe = ((selector, optListener, options) => {\n    let listener = selector;\n    if (optListener) {\n      const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n      let currentSlice = selector(api.getState());\n      listener = (state) => {\n        const nextSlice = selector(state);\n        if (!equalityFn(currentSlice, nextSlice)) {\n          const previousSlice = currentSlice;\n          optListener(currentSlice = nextSlice, previousSlice);\n        }\n      };\n      if (options == null ? void 0 : options.fireImmediately) {\n        optListener(currentSlice, currentSlice);\n      }\n    }\n    return origSubscribe(listener);\n  });\n  const initialState = fn(set, get, api);\n  return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nfunction combine(initialState, create) {\n  return (...args) => Object.assign({}, initialState, create(...args));\n}\n\nfunction createJSONStorage(getStorage, options) {\n  let storage;\n  try {\n    storage = getStorage();\n  } catch (e) {\n    return;\n  }\n  const persistStorage = {\n    getItem: (name) => {\n      var _a;\n      const parse = (str2) => {\n        if (str2 === null) {\n          return null;\n        }\n        return JSON.parse(str2, options == null ? void 0 : options.reviver);\n      };\n      const str = (_a = storage.getItem(name)) != null ? _a : null;\n      if (str instanceof Promise) {\n        return str.then(parse);\n      }\n      return parse(str);\n    },\n    setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),\n    removeItem: (name) => storage.removeItem(name)\n  };\n  return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n  try {\n    const result = fn(input);\n    if (result instanceof Promise) {\n      return result;\n    }\n    return {\n      then(onFulfilled) {\n        return toThenable(onFulfilled)(result);\n      },\n      catch(_onRejected) {\n        return this;\n      }\n    };\n  } catch (e) {\n    return {\n      then(_onFulfilled) {\n        return this;\n      },\n      catch(onRejected) {\n        return toThenable(onRejected)(e);\n      }\n    };\n  }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n  let options = {\n    storage: createJSONStorage(() => localStorage),\n    partialize: (state) => state,\n    version: 0,\n    merge: (persistedState, currentState) => ({\n      ...currentState,\n      ...persistedState\n    }),\n    ...baseOptions\n  };\n  let hasHydrated = false;\n  const hydrationListeners = /* @__PURE__ */ new Set();\n  const finishHydrationListeners = /* @__PURE__ */ new Set();\n  let storage = options.storage;\n  if (!storage) {\n    return config(\n      (...args) => {\n        console.warn(\n          `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n        );\n        set(...args);\n      },\n      get,\n      api\n    );\n  }\n  const setItem = () => {\n    const state = options.partialize({ ...get() });\n    return storage.setItem(options.name, {\n      state,\n      version: options.version\n    });\n  };\n  const savedSetState = api.setState;\n  api.setState = (state, replace) => {\n    savedSetState(state, replace);\n    return setItem();\n  };\n  const configResult = config(\n    (...args) => {\n      set(...args);\n      return setItem();\n    },\n    get,\n    api\n  );\n  api.getInitialState = () => configResult;\n  let stateFromStorage;\n  const hydrate = () => {\n    var _a, _b;\n    if (!storage) return;\n    hasHydrated = false;\n    hydrationListeners.forEach((cb) => {\n      var _a2;\n      return cb((_a2 = get()) != null ? _a2 : configResult);\n    });\n    const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n    return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n      if (deserializedStorageValue) {\n        if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n          if (options.migrate) {\n            const migration = options.migrate(\n              deserializedStorageValue.state,\n              deserializedStorageValue.version\n            );\n            if (migration instanceof Promise) {\n              return migration.then((result) => [true, result]);\n            }\n            return [true, migration];\n          }\n          console.error(\n            `State loaded from storage couldn't be migrated since no migrate function was provided`\n          );\n        } else {\n          return [false, deserializedStorageValue.state];\n        }\n      }\n      return [false, void 0];\n    }).then((migrationResult) => {\n      var _a2;\n      const [migrated, migratedState] = migrationResult;\n      stateFromStorage = options.merge(\n        migratedState,\n        (_a2 = get()) != null ? _a2 : configResult\n      );\n      set(stateFromStorage, true);\n      if (migrated) {\n        return setItem();\n      }\n    }).then(() => {\n      postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n      stateFromStorage = get();\n      hasHydrated = true;\n      finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n    }).catch((e) => {\n      postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n    });\n  };\n  api.persist = {\n    setOptions: (newOptions) => {\n      options = {\n        ...options,\n        ...newOptions\n      };\n      if (newOptions.storage) {\n        storage = newOptions.storage;\n      }\n    },\n    clearStorage: () => {\n      storage == null ? void 0 : storage.removeItem(options.name);\n    },\n    getOptions: () => options,\n    rehydrate: () => hydrate(),\n    hasHydrated: () => hasHydrated,\n    onHydrate: (cb) => {\n      hydrationListeners.add(cb);\n      return () => {\n        hydrationListeners.delete(cb);\n      };\n    },\n    onFinishHydration: (cb) => {\n      finishHydrationListeners.add(cb);\n      return () => {\n        finishHydrationListeners.delete(cb);\n      };\n    }\n  };\n  if (!options.skipHydration) {\n    hydrate();\n  }\n  return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector };\n","import { create } from 'zustand';\nimport { persist, devtools } from 'zustand/middleware';\nimport { Part, Phase } from '@/app/components/TnkrModelView/types';\nimport { OrgCustomization, PointerAnnotation, ProductMetadata } from '../hooks/useProductData';\n\n/**\n * Cached product data structure\n */\nexport interface CachedProductData {\n  productData: ProductMetadata; // Raw product metadata from API\n  orgCustomization: OrgCustomization | null;\n  phases: Phase[];\n  pointers: PointerAnnotation[];\n  timestamp: number;\n}\n\n/**\n * Cached S3 content structure\n */\nexport interface CachedS3Content {\n  content: string | any[];\n  timestamp: number;\n}\n\n/**\n * Product data store interface\n */\ninterface ProductDataStore {\n  // ===== Product Data Cache =====\n  productDataCache: Record<string, CachedProductData>;\n\n  // ===== S3 Content Cache =====\n  s3ContentCache: Record<string, CachedS3Content>;\n\n  // ===== Cache Expiration Times (in milliseconds) =====\n  productDataTTL: number; // Default: 10 minutes\n  s3ContentTTL: number;    // Default: 30 minutes\n\n  // ===== Product Data Actions =====\n  /**\n   * Get cached product data by productId\n   * Returns null if cache miss or expired\n   */\n  getProductData: (productId: string) => CachedProductData | null;\n\n  /**\n   * Set product data cache for a productId\n   */\n  setProductData: (productId: string, data: Omit<CachedProductData, 'timestamp'>) => void;\n\n  /**\n   * Clear product data cache for a specific productId\n   */\n  clearProductCache: (productId: string) => void;\n\n  // ===== S3 Content Actions =====\n  /**\n   * Get cached S3 content by s3Url\n   * Returns null if cache miss or expired\n   */\n  getS3Content: (s3Url: string) => CachedS3Content | null;\n\n  /**\n   * Set S3 content cache for an s3Url\n   */\n  setS3Content: (s3Url: string, content: string | any[]) => void;\n\n  /**\n   * Clear S3 content cache for a specific s3Url\n   */\n  clearS3Cache: (s3Url: string) => void;\n\n  // ===== Global Actions =====\n  /**\n   * Clear all caches (both product and S3)\n   */\n  clearAllCaches: () => void;\n\n  /**\n   * Get cache statistics\n   */\n  getCacheStats: () => {\n    productDataCount: number;\n    s3ContentCount: number;\n    totalSizeEstimate: string;\n  };\n}\n\n/**\n * Zustand store for caching product data and S3 content\n *\n * Features:\n * - Caches API data by productId to avoid redundant API calls\n * - Caches S3/CloudFront content by s3Url to avoid redundant 33MB+ fetches\n * - Persists to localStorage for cross-reload persistence\n * - Automatic cache expiration based on TTL\n * - Manual cache invalidation support\n * - Redux DevTools integration for debugging\n *\n * Usage:\n * ```typescript\n * const store = useProductDataStore();\n *\n * // Check cache before fetching\n * const cached = store.getProductData(productId);\n * if (cached) {\n *   // Use cached data\n * } else {\n *   // Fetch from API and cache\n *   const data = await fetchProductData(orgId, productId);\n *   store.setProductData(productId, { productData: data, ... });\n * }\n * ```\n *\n * Debugging:\n * - Install Redux DevTools browser extension\n * - Open DevTools and go to Redux tab\n * - Select \"TNKR Product Cache\" to inspect state and actions\n */\nexport const useProductDataStore = create<ProductDataStore>()(\n  devtools(\n    persist(\n      (set, get) => ({\n      // ===== Initial State =====\n      productDataCache: {},\n      s3ContentCache: {},\n      productDataTTL: 10 * 60 * 1000, // 10 minutes\n      s3ContentTTL: 30 * 60 * 1000,   // 30 minutes\n\n      // ===== Product Data Actions =====\n      getProductData: (productId: string) => {\n        const cache = get().productDataCache[productId];\n        if (!cache) return null;\n\n        // Check if cache is expired\n        const age = Date.now() - cache.timestamp;\n        if (age > get().productDataTTL) {\n          console.log(`🗑️ Product data cache expired for ${productId} (age: ${Math.round(age / 1000)}s)`);\n          return null;\n        }\n\n        console.log(`✅ Product data cache hit for ${productId} (age: ${Math.round(age / 1000)}s)`);\n        return cache;\n      },\n\n      setProductData: (productId: string, data: Omit<CachedProductData, 'timestamp'>) => {\n        console.log(`💾 Caching product data for ${productId}`);\n        set(\n          (state) => ({\n            productDataCache: {\n              ...state.productDataCache,\n              [productId]: {\n                ...data,\n                timestamp: Date.now(),\n              },\n            },\n          }),\n          false,\n          `setProductData/${productId}`\n        );\n      },\n\n      clearProductCache: (productId: string) => {\n        console.log(`🗑️ Clearing product data cache for ${productId}`);\n        set(\n          (state) => {\n            const newCache = { ...state.productDataCache };\n            delete newCache[productId];\n            return { productDataCache: newCache };\n          },\n          false,\n          `clearProductCache/${productId}`\n        );\n      },\n\n      // ===== S3 Content Actions =====\n      getS3Content: (s3Url: string) => {\n        const cache = get().s3ContentCache[s3Url];\n        if (!cache) return null;\n\n        // Check if cache is expired\n        const age = Date.now() - cache.timestamp;\n        if (age > get().s3ContentTTL) {\n          console.log(`🗑️ S3 content cache expired for ${s3Url} (age: ${Math.round(age / 1000)}s)`);\n          return null;\n        }\n\n        console.log(`✅ S3 content cache hit for ${s3Url} (age: ${Math.round(age / 1000)}s)`);\n        return cache;\n      },\n\n      setS3Content: (s3Url: string, content: string | any[]) => {\n        // Calculate content size\n        const contentSize = typeof content === 'string'\n          ? content.length\n          : JSON.stringify(content).length;\n\n        const sizeInMB = contentSize / 1024 / 1024;\n        const sizeEstimate = sizeInMB >= 1\n          ? `${sizeInMB.toFixed(2)}MB`\n          : `${(contentSize / 1024).toFixed(2)}KB`;\n\n        // ===== SKIP CACHING FOR LARGE FILES =====\n        // localStorage has a ~5-10MB limit, so skip files larger than 2MB to be safe\n        const MAX_CACHE_SIZE_MB = 2;\n        if (sizeInMB > MAX_CACHE_SIZE_MB) {\n          console.warn(`⚠️ Skipping cache for ${s3Url} - too large (${sizeEstimate}, max: ${MAX_CACHE_SIZE_MB}MB)`);\n          console.log(`ℹ️ Large files like X3D are handled by browser HTTP cache instead`);\n          return; // Don't cache\n        }\n\n        console.log(`💾 Caching S3 content for ${s3Url} (size: ${sizeEstimate})`);\n\n        const fileName = s3Url.split('/').pop() || 'unknown';\n        set(\n          (state) => ({\n            s3ContentCache: {\n              ...state.s3ContentCache,\n              [s3Url]: {\n                content,\n                timestamp: Date.now(),\n              },\n            },\n          }),\n          false,\n          `setS3Content/${fileName}`\n        );\n      },\n\n      clearS3Cache: (s3Url: string) => {\n        console.log(`🗑️ Clearing S3 content cache for ${s3Url}`);\n        const fileName = s3Url.split('/').pop() || 'unknown';\n        set(\n          (state) => {\n            const newCache = { ...state.s3ContentCache };\n            delete newCache[s3Url];\n            return { s3ContentCache: newCache };\n          },\n          false,\n          `clearS3Cache/${fileName}`\n        );\n      },\n\n      // ===== Global Actions =====\n      clearAllCaches: () => {\n        console.log(`🗑️ Clearing all caches`);\n        set(\n          {\n            productDataCache: {},\n            s3ContentCache: {},\n          },\n          false,\n          'clearAllCaches'\n        );\n      },\n\n      getCacheStats: () => {\n        const state = get();\n        const productDataCount = Object.keys(state.productDataCache).length;\n        const s3ContentCount = Object.keys(state.s3ContentCache).length;\n\n        // Estimate total cache size\n        let totalSize = 0;\n        Object.values(state.s3ContentCache).forEach((cache) => {\n          if (typeof cache.content === 'string') {\n            totalSize += cache.content.length;\n          } else {\n            totalSize += JSON.stringify(cache.content).length;\n          }\n        });\n\n        const totalSizeEstimate = `${(totalSize / 1024 / 1024).toFixed(2)}MB`;\n\n        return {\n          productDataCount,\n          s3ContentCount,\n          totalSizeEstimate,\n        };\n      },\n      }),\n      {\n        name: 'tnkr-product-cache', // localStorage key\n        // Only persist the cache data, not the TTL settings\n        partialize: (state) => ({\n          productDataCache: state.productDataCache,\n          s3ContentCache: state.s3ContentCache,\n        }),\n      }\n    ),\n    {\n      name: 'TNKR Product Cache', // DevTools name\n      enabled: typeof window !== 'undefined', // Only enable in browser\n    }\n  )\n);\n\n/**\n * Hook to access cache statistics\n * Useful for debugging and monitoring cache performance\n */\nexport function useCacheStats() {\n  return useProductDataStore((state) => state.getCacheStats());\n}\n\n/**\n * Hook to manually clear all caches\n * Useful for debugging or forcing fresh data\n */\nexport function useClearCache() {\n  return useProductDataStore((state) => state.clearAllCaches);\n}\n","/**\n * CloudFront URL conversion utilities for S3 assets\n */\n\nconst CLOUDFRONT_DOMAIN = process.env.NEXT_PUBLIC_CLOUDFRONT_DOMAIN;\n\n/**\n * Converts S3 URL to CloudFront URL for any asset type (X3D, JSON, etc.)\n */\nexport function convertS3UrlToCloudFront(s3Url: string): string {\n  if (!CLOUDFRONT_DOMAIN) {\n    console.warn('NEXT_PUBLIC_CLOUDFRONT_DOMAIN not configured, falling back to direct S3');\n    return s3Url;\n  }\n\n  const s3UrlPattern = /^s3:\\/\\/([^\\/]+)\\/(.+)$/;\n  const match = s3Url.match(s3UrlPattern);\n\n  if (!match) {\n    throw new Error(`Invalid S3 URL format: ${s3Url}`);\n  }\n\n  const [, , key] = match;\n  return `https://${CLOUDFRONT_DOMAIN}/${key}`;\n}\n\n/**\n * Legacy alias for X3D model files (for backward compatibility)\n */\nexport const convertS3UrlToCloudFrontModels = convertS3UrlToCloudFront;\n\n/**\n * Legacy alias for data files (for backward compatibility)\n */\nexport const convertS3UrlToCloudFrontData = convertS3UrlToCloudFront;\n\n/**\n * Checks if CloudFront is properly configured\n */\nexport function isCloudFrontConfigured(): boolean {\n  return !!CLOUDFRONT_DOMAIN;\n}\n","/**\n * TnkrX3DStore - IndexedDB storage for X3D model content\n * Provides fast local caching for large X3D files that never change\n */\n\nimport { convertS3UrlToCloudFront } from '../utils/cloudfront';\n\ninterface CachedX3D {\n  productId: string;\n  content: string;\n  s3Url: string;\n  timestamp: number;\n  size: number;\n  version?: string; // For future versioning support\n}\n\ninterface StorageStats {\n  used: number;\n  available: number;\n  itemCount: number;\n}\n\nexport class TnkrX3DStore {\n  private dbName = 'tnkr-x3d-cache';\n  private version = 1;\n  private storeName = 'x3d-content';\n  private db: IDBDatabase | null = null;\n\n  // Configurable cache limits\n  private maxCacheSize = 500 * 1024 * 1024; // 500MB total cache size limit\n  private maxCacheAge = 30 * 24 * 60 * 60 * 1000; // 30 days max age for cached items\n  private maxItemCount = 100; // Maximum number of cached items\n  private cleanupCheckInterval = 24 * 60 * 60 * 1000; // Check for expired items daily\n  private lastCleanupKey = 'tnkr-x3d-last-cleanup';\n\n  /**\n   * Get X3D content for a product. Checks IndexedDB first, falls back to network.\n   */\n  async getX3DContent(productId: string, s3Url: string): Promise<string> {\n    try {\n      // Check IndexedDB first\n      const cached = await this.getFromIndexedDB(productId);\n      if (cached && cached.s3Url === s3Url) {\n        console.log(`✅ X3D loaded from IndexedDB: ${productId} (${this.formatSize(cached.size)})`);\n        return cached.content;\n      }\n\n      // Fetch from network (CloudFront)\n      console.log(`🌐 Fetching X3D from network: ${productId}`);\n      const content = await this.fetchFromNetwork(s3Url);\n\n      // Store in IndexedDB for next time\n      await this.storeInIndexedDB(productId, s3Url, content);\n      console.log(`💾 X3D cached to IndexedDB: ${productId} (${this.formatSize(content.length)})`);\n\n      return content;\n    } catch (error) {\n      console.error('TnkrX3DStore error:', error);\n\n      // Try fallback to direct API fetch if CloudFront fails\n      try {\n        console.log(`🔄 Falling back to direct API fetch: ${productId}`);\n        return await this.fetchFromAPI(s3Url);\n      } catch (fallbackError) {\n        console.error('Fallback API fetch also failed:', fallbackError);\n        throw error; // Throw original error\n      }\n    }\n  }\n\n  /**\n   * Fetch X3D content from CloudFront\n   */\n  private async fetchFromNetwork(s3Url: string): Promise<string> {\n    const cloudFrontUrl = convertS3UrlToCloudFront(s3Url);\n\n    const response = await fetch(cloudFrontUrl, {\n      method: 'GET',\n      headers: {\n        'Accept': 'application/xml, text/xml, */*'\n      }\n    });\n\n    if (!response.ok) {\n      throw new Error(`Failed to load X3D from CloudFront: ${response.status} ${response.statusText}`);\n    }\n\n    return response.text();\n  }\n\n  /**\n   * Fallback: Fetch X3D content through the API (original method)\n   */\n  private async fetchFromAPI(s3Url: string): Promise<string> {\n    const response = await fetch('/api/fetch-s3-content', {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ s3Url })\n    });\n\n    if (!response.ok) {\n      throw new Error(`Failed to load X3D from API: ${response.status} ${response.statusText}`);\n    }\n\n    return response.text();\n  }\n\n  /**\n   * Store X3D content in IndexedDB\n   */\n  private async storeInIndexedDB(productId: string, s3Url: string, content: string): Promise<void> {\n    try {\n      // Check if we should run cleanup for expired items\n      await this.checkAndCleanExpiredItems();\n\n      // Check storage quota before storing\n      await this.ensureStorageSpace(content.length);\n\n      const db = await this.getDB();\n      const transaction = db.transaction([this.storeName], 'readwrite');\n      const store = transaction.objectStore(this.storeName);\n\n      const item: CachedX3D = {\n        productId,\n        content,\n        s3Url,\n        timestamp: Date.now(),\n        size: content.length\n      };\n\n      await new Promise<void>((resolve, reject) => {\n        const request = store.put(item);\n        request.onsuccess = () => resolve();\n        request.onerror = () => reject(request.error);\n      });\n\n    } catch (error) {\n      console.warn('Failed to store X3D in IndexedDB:', error);\n      // Don't throw - caching failure shouldn't break functionality\n    }\n  }\n\n  /**\n   * Get X3D content from IndexedDB\n   */\n  private async getFromIndexedDB(productId: string): Promise<CachedX3D | null> {\n    try {\n      const db = await this.getDB();\n      const transaction = db.transaction([this.storeName], 'readonly');\n      const store = transaction.objectStore(this.storeName);\n\n      return new Promise<CachedX3D | null>((resolve, reject) => {\n        const request = store.get(productId);\n        request.onsuccess = () => resolve(request.result || null);\n        request.onerror = () => reject(request.error);\n      });\n    } catch (error) {\n      console.warn('Failed to read from IndexedDB:', error);\n      return null;\n    }\n  }\n\n  /**\n   * Get or create IndexedDB database\n   */\n  private async getDB(): Promise<IDBDatabase> {\n    if (this.db) return this.db;\n\n    return new Promise((resolve, reject) => {\n      const request = indexedDB.open(this.dbName, this.version);\n\n      request.onerror = () => reject(request.error);\n      request.onsuccess = () => {\n        this.db = request.result;\n        resolve(this.db);\n      };\n\n      request.onupgradeneeded = (event) => {\n        const db = (event.target as IDBOpenDBRequest).result;\n\n        if (!db.objectStoreNames.contains(this.storeName)) {\n          const store = db.createObjectStore(this.storeName, { keyPath: 'productId' });\n          store.createIndex('timestamp', 'timestamp', { unique: false });\n          store.createIndex('size', 'size', { unique: false });\n        }\n      };\n    });\n  }\n\n  /**\n   * Ensure we have enough storage space, cleanup old items if needed\n   */\n  private async ensureStorageSpace(requiredSize: number): Promise<void> {\n    try {\n      // First check our own cache limits\n      const stats = await this.getStorageStats();\n\n      // Check if adding this item would exceed our max cache size\n      if (stats.used + requiredSize > this.maxCacheSize) {\n        console.log(`📏 Cache size limit approaching (${this.formatSize(stats.used)} + ${this.formatSize(requiredSize)} > ${this.formatSize(this.maxCacheSize)}), running cleanup...`);\n        await this.cleanupOldItems();\n      }\n\n      // Also check browser storage limits\n      if ('storage' in navigator && 'estimate' in navigator.storage) {\n        const estimate = await navigator.storage.estimate();\n        const available = (estimate.quota || 0) - (estimate.usage || 0);\n\n        // If we don't have enough browser storage space, cleanup old items\n        if (available < requiredSize * 1.2) { // 20% buffer\n          console.log(`🌐 Browser storage limit approaching, running cleanup...`);\n          await this.cleanupOldItems();\n        }\n      }\n    } catch (error) {\n      console.warn('Storage space check failed:', error);\n    }\n  }\n\n  /**\n   * Check if expired items cleanup should run (once per day)\n   */\n  private async checkAndCleanExpiredItems(): Promise<void> {\n    const now = Date.now();\n\n    // Check localStorage for last cleanup time\n    const lastCleanup = parseInt(localStorage.getItem(this.lastCleanupKey) || '0', 10);\n\n    // Only run if it's been more than 24 hours since last cleanup\n    if (now - lastCleanup < this.cleanupCheckInterval) {\n      return;\n    }\n\n    // Update last cleanup time\n    localStorage.setItem(this.lastCleanupKey, now.toString());\n\n    // Run cleanup for expired items only\n    await this.cleanupExpiredItems();\n  }\n\n  /**\n   * Clean up only expired items (runs daily)\n   */\n  private async cleanupExpiredItems(): Promise<void> {\n    try {\n      const now = Date.now();\n      const cutoffTime = now - this.maxCacheAge;\n\n      const db = await this.getDB();\n      const transaction = db.transaction([this.storeName], 'readwrite');\n      const store = transaction.objectStore(this.storeName);\n\n      // Get all cached items\n      const items = await new Promise<CachedX3D[]>((resolve, reject) => {\n        const request = store.getAll();\n        request.onsuccess = () => resolve(request.result);\n        request.onerror = () => reject(request.error);\n      });\n\n      if (items.length === 0) return;\n\n      const itemsToDelete: string[] = [];\n\n      // Only check for expired items (age > 30 days)\n      for (const item of items) {\n        if (item.timestamp < cutoffTime) {\n          itemsToDelete.push(item.productId);\n          console.log(`🗓️ Removing expired cache: ${item.productId} (aged ${this.formatAge(now - item.timestamp)})`);\n        }\n      }\n\n      // Delete expired items\n      if (itemsToDelete.length > 0) {\n        for (const productId of itemsToDelete) {\n          await new Promise<void>((resolve, reject) => {\n            const request = store.delete(productId);\n            request.onsuccess = () => resolve();\n            request.onerror = () => reject(request.error);\n          });\n        }\n\n        console.log(`🧹 Daily cleanup complete: removed ${itemsToDelete.length} expired items`);\n      }\n    } catch (error) {\n      console.warn('Daily cleanup failed:', error);\n    }\n  }\n\n  /**\n   * Clean up old cached items (LRU eviction for storage space and count limits)\n   * Called only when we need space for new items\n   */\n  private async cleanupOldItems(): Promise<void> {\n    try {\n      const db = await this.getDB();\n      const transaction = db.transaction([this.storeName], 'readwrite');\n      const store = transaction.objectStore(this.storeName);\n      const index = store.index('timestamp');\n\n      // Get all items sorted by timestamp (oldest first)\n      const items = await new Promise<CachedX3D[]>((resolve, reject) => {\n        const request = index.getAll();\n        request.onsuccess = () => resolve(request.result);\n        request.onerror = () => reject(request.error);\n      });\n\n      if (items.length === 0) return;\n\n      const itemsToDelete: string[] = [];\n      let totalSize = 0;\n\n      // Calculate current total size\n      for (const item of items) {\n        totalSize += item.size;\n      }\n\n      // Remove items if we exceed count limit (keep newest)\n      if (items.length > this.maxItemCount) {\n        const excessCount = items.length - this.maxItemCount;\n        for (let i = 0; i < excessCount; i++) {\n          itemsToDelete.push(items[i].productId);\n          totalSize -= items[i].size;\n          console.log(`📊 Removing excess cache (count limit): ${items[i].productId}`);\n        }\n      }\n\n      // Remove oldest items if we exceed size limit\n      let currentIndex = itemsToDelete.length; // Start after count-removed items\n      while (totalSize > this.maxCacheSize * 0.9 && currentIndex < items.length) { // Keep 10% buffer\n        const item = items[currentIndex];\n        itemsToDelete.push(item.productId);\n        totalSize -= item.size;\n        console.log(`💾 Removing cache (size limit): ${item.productId} (${this.formatSize(item.size)})`);\n        currentIndex++;\n      }\n\n      // If still no space made, remove oldest 25% as fallback\n      if (itemsToDelete.length === 0 && items.length > 4) {\n        const removeCount = Math.ceil(items.length * 0.25);\n        for (let i = 0; i < removeCount; i++) {\n          itemsToDelete.push(items[i].productId);\n          console.log(`🔄 Removing old cache (LRU): ${items[i].productId}`);\n        }\n      }\n\n      // Delete identified items\n      if (itemsToDelete.length > 0) {\n        for (const productId of itemsToDelete) {\n          await new Promise<void>((resolve, reject) => {\n            const deleteRequest = store.delete(productId);\n            deleteRequest.onsuccess = () => resolve();\n            deleteRequest.onerror = () => reject(deleteRequest.error);\n          });\n        }\n\n        console.log(`🧹 Storage cleanup complete: removed ${itemsToDelete.length} items to make space`);\n      }\n    } catch (error) {\n      console.warn('Storage cleanup failed:', error);\n    }\n  }\n\n  /**\n   * Clear cache for specific product\n   */\n  async clearProductCache(productId: string): Promise<void> {\n    try {\n      const db = await this.getDB();\n      const transaction = db.transaction([this.storeName], 'readwrite');\n      const store = transaction.objectStore(this.storeName);\n\n      await new Promise<void>((resolve, reject) => {\n        const request = store.delete(productId);\n        request.onsuccess = () => resolve();\n        request.onerror = () => reject(request.error);\n      });\n\n      console.log(`🗑️ Cleared X3D cache for product: ${productId}`);\n    } catch (error) {\n      console.warn('Failed to clear product cache:', error);\n    }\n  }\n\n  /**\n   * Get storage usage statistics\n   */\n  async getStorageStats(): Promise<StorageStats> {\n    try {\n      const db = await this.getDB();\n      const transaction = db.transaction([this.storeName], 'readonly');\n      const store = transaction.objectStore(this.storeName);\n\n      const items = await new Promise<CachedX3D[]>((resolve, reject) => {\n        const request = store.getAll();\n        request.onsuccess = () => resolve(request.result);\n        request.onerror = () => reject(request.error);\n      });\n\n      const used = items.reduce((total, item) => total + item.size, 0);\n      let available = 0;\n\n      if ('storage' in navigator && 'estimate' in navigator.storage) {\n        const estimate = await navigator.storage.estimate();\n        available = (estimate.quota || 0) - (estimate.usage || 0);\n      }\n\n      return {\n        used,\n        available,\n        itemCount: items.length\n      };\n    } catch (error) {\n      console.warn('Failed to get storage stats:', error);\n      return { used: 0, available: 0, itemCount: 0 };\n    }\n  }\n\n  /**\n   * Clear all cached X3D content\n   */\n  async clearAllCache(): Promise<void> {\n    try {\n      const db = await this.getDB();\n      const transaction = db.transaction([this.storeName], 'readwrite');\n      const store = transaction.objectStore(this.storeName);\n\n      await new Promise<void>((resolve, reject) => {\n        const request = store.clear();\n        request.onsuccess = () => resolve();\n        request.onerror = () => reject(request.error);\n      });\n\n      console.log('🧹 Cleared all X3D cache');\n    } catch (error) {\n      console.warn('Failed to clear all cache:', error);\n    }\n  }\n\n  /**\n   * Format file size for logging\n   */\n  private formatSize(bytes: number): string {\n    if (bytes === 0) return '0 B';\n    const k = 1024;\n    const sizes = ['B', 'KB', 'MB', 'GB'];\n    const i = Math.floor(Math.log(bytes) / Math.log(k));\n    return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n  }\n\n  /**\n   * Format age duration for logging\n   */\n  private formatAge(milliseconds: number): string {\n    const seconds = Math.floor(milliseconds / 1000);\n    const minutes = Math.floor(seconds / 60);\n    const hours = Math.floor(minutes / 60);\n    const days = Math.floor(hours / 24);\n\n    if (days > 0) return `${days} day${days > 1 ? 's' : ''}`;\n    if (hours > 0) return `${hours} hour${hours > 1 ? 's' : ''}`;\n    if (minutes > 0) return `${minutes} minute${minutes > 1 ? 's' : ''}`;\n    return `${seconds} second${seconds > 1 ? 's' : ''}`;\n  }\n}\n\n// Export a singleton instance\nexport const tnkrX3DStore = new TnkrX3DStore();\n","import { useState, useEffect, useCallback } from 'react';\nimport { Part, Phase } from '@/app/components/TnkrModelView/types';\nimport { fetchProductData, fetchX3DContent, fetchPartsFromS3, fetchPhasesData, fetchOrgCustomization, fetchPointers } from '@/utils/s3Utils';\nimport { initializeTheme } from '@/core/contexts/ThemeContext';\nimport { useProductDataStore } from '../stores/useProductDataStore';\nimport { tnkrX3DStore } from '@/services/TnkrX3DStore';\n\nexport interface OrgCustomization {\n  title?: string;\n  theme?: 'system' | 'light' | 'dark';\n  primary_color?: string;\n  tint_color?: string;\n  dark_logo_url?: string | null;\n  light_logo_url?: string | null;\n  external_links_target?: string;\n  privacy_policy_url?: string;\n  localise_ui_lang?: string;\n  search_bar_style?: string;\n  show_pagination?: boolean;\n  allow_feedback?: boolean;\n}\n\n/**\n * S3 file reference structure\n */\nexport interface S3FileReference {\n  s3_url: string;\n  [key: string]: any; // Allow for additional metadata\n}\n\n/**\n * Product files structure from API\n */\nexport interface ProductFiles {\n  x3d?: S3FileReference;\n  parts_tree?: S3FileReference;\n  step_file?: S3FileReference;\n  [key: string]: any; // Allow for additional file types\n}\n\n/**\n * Product metadata from API\n * This is the raw response from fetchProductData()\n */\nexport interface ProductMetadata {\n  // Product name (various possible fields)\n  name?: string;\n  productName?: string;\n  title?: string;\n  product_name?: string;\n  product?: {\n    name?: string;\n    [key: string]: any;\n  };\n\n  // S3 file references\n  files?: ProductFiles;\n\n  // Optional embedded data (might be in API response)\n  parts?: Part[];\n  phases?: Phase[];\n\n  // Allow for additional fields from API\n  [key: string]: any;\n}\n\nexport interface PointerAnnotation {\n  id: string;\n  name: string;\n  description?: string;\n  style: any;\n  annotations: any;\n  timestamp: number;\n  createdAt?: number;\n  updatedAt?: number;\n  isNew?: boolean;\n  snapshotUrl?: string;\n  productId?: string;\n  organizationId?: string;\n}\n\nexport interface ProductDataState {\n  productName: string;\n  htmlContent: string | null;\n  partsTree: Part[];\n  phases: Phase[];\n  pointers: PointerAnnotation[];\n  orgCustomization: OrgCustomization | null;\n  files?: ProductFiles;\n  isLoading: boolean;\n  isLoadingContent: boolean;\n  error: string | null;\n  refetch: () => Promise<void>;\n}\n\nexport function useProductData(organizationId: string | null, productId: string | null): ProductDataState {\n  const [productName, setProductName] = useState<string>('');\n  const [htmlContent, setHtmlContent] = useState<string | null>(null);\n  const [partsTree, setPartsTree] = useState<Part[]>([]);\n  const [phases, setPhases] = useState<Phase[]>([]);\n  const [pointers, setPointers] = useState<PointerAnnotation[]>([]);\n  const [orgCustomization, setOrgCustomization] = useState<OrgCustomization | null>(null);\n  const [files, setFiles] = useState<ProductFiles | undefined>(undefined);\n  const [isLoading, setIsLoading] = useState(false);\n  const [isLoadingContent, setIsLoadingContent] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n\n  // Get Zustand store actions\n  const { getProductData, setProductData } = useProductDataStore();\n\n  const fetchAllData = useCallback(async () => {\n    if (!organizationId || !productId) {\n      setIsLoading(false);\n      return;\n    }\n\n    try {\n      setIsLoading(true);\n      setError(null);\n\n      // ===== CHECK ZUSTAND CACHE FIRST =====\n      const cachedData = getProductData(productId);\n      let productData: ProductMetadata | null = null; // Declare outside to use later\n\n      if (cachedData) {\n        console.log('✅ Using cached product data for', productId);\n\n        // Populate state from cache immediately\n        setOrgCustomization(cachedData.orgCustomization);\n        setPhases(cachedData.phases);\n        setPointers(cachedData.pointers);\n\n        // Extract product name from cached product data\n        const productData = cachedData.productData;\n        if (productData) {\n          const name = productData.name ||\n                       productData.productName ||\n                       productData.title ||\n                       productData.product_name ||\n                       productData.product?.name;\n          if (name) {\n            setProductName(name);\n          }\n          if (productData.files) {\n            setFiles(productData.files);\n          }\n        }\n\n        // Initialize theme from cached org customization\n        if (cachedData.orgCustomization?.primary_color) {\n          initializeTheme(\n            cachedData.orgCustomization.primary_color,\n            cachedData.orgCustomization.tint_color,\n            organizationId\n          );\n          console.log('🎨 Theme initialized from cache');\n        }\n\n        // S3 content (parts tree, X3D) will be handled below with their own cache\n        setIsLoading(false);\n      } else {\n        console.log('⚠️ Cache miss - fetching fresh product data for', productId);\n      }\n\n      // ===== FETCH FROM API IF CACHE MISS =====\n      if (!cachedData) {\n        // Fetch organization customization\n        let customizationData: OrgCustomization | null = null;\n        if (organizationId) {\n          customizationData = await fetchOrgCustomization(organizationId);\n          setOrgCustomization(customizationData);\n\n          // Initialize theme immediately when org data is fetched\n          if (customizationData?.primary_color) {\n            initializeTheme(\n              customizationData.primary_color,\n              customizationData.tint_color,\n              organizationId\n            );\n            console.log('🎨 Theme auto-refreshed from API in useProductData');\n          }\n        }\n\n        // Fetch product data\n        productData = await fetchProductData(organizationId, productId);\n\n        // Fetch phases\n        let fetchedPhases: Phase[] = [];\n        if (productData?.phases) {\n          fetchedPhases = productData.phases;\n        } else {\n          try {\n            const phasesData = await fetchPhasesData(organizationId, productId);\n            if (phasesData) {\n              fetchedPhases = phasesData;\n            }\n          } catch (error) {\n            console.warn('Failed to fetch phases:', error);\n          }\n        }\n        setPhases(fetchedPhases);\n\n        // Fetch pointer annotations\n        let fetchedPointers: PointerAnnotation[] = [];\n        try {\n          const pointersData = await fetchPointers(organizationId, productId);\n          if (pointersData) {\n            fetchedPointers = pointersData;\n          }\n        } catch (error) {\n          console.warn('Failed to fetch pointers:', error);\n        }\n        setPointers(fetchedPointers);\n\n        // ===== CACHE THE FETCHED API DATA =====\n        setProductData(productId, {\n          productData,\n          orgCustomization: customizationData,\n          phases: fetchedPhases,\n          pointers: fetchedPointers,\n        });\n        console.log('💾 Cached product data for', productId);\n\n        // Extract product name\n        if (productData) {\n          const name = productData.name ||\n                       productData.productName ||\n                       productData.title ||\n                       productData.product_name ||\n                       productData.product?.name;\n\n          if (name) {\n            setProductName(name);\n          }\n\n          // Store files data\n          if (productData.files) {\n            setFiles(productData.files);\n          }\n        }\n      }\n\n      // ===== FETCH S3 CONTENT (WITH ITS OWN CACHE) =====\n      // Get productData from cache or from the fetch above\n      const currentProductData = cachedData?.productData || productData;\n\n      // Set loading state for S3 content\n      setIsLoadingContent(true);\n\n      // Fetch parts tree from S3 (will check its own cache in next phase)\n      let fetchedParts: Part[] = [];\n      if (currentProductData?.files?.parts_tree?.s3_url) {\n        try {\n          const partsFromS3 = await fetchPartsFromS3(currentProductData.files.parts_tree.s3_url);\n          if (partsFromS3.length > 0) {\n            fetchedParts = partsFromS3;\n          }\n        } catch (error) {\n          console.warn('Failed to fetch parts tree from S3, falling back to product parts');\n        }\n      }\n\n      // Fallback to product.parts if no S3 parts tree\n      if (fetchedParts.length === 0 && currentProductData?.parts) {\n        fetchedParts = currentProductData.parts;\n      }\n      setPartsTree(fetchedParts);\n\n      // Fetch X3D content using IndexedDB-backed cache (checks IndexedDB first, then S3)\n      if (currentProductData?.files?.x3d?.s3_url && productId) {\n        try {\n          const x3dContent = await tnkrX3DStore.getX3DContent(productId, currentProductData.files.x3d.s3_url);\n          setHtmlContent(x3dContent);\n          console.log('✅ X3D content loaded successfully');\n        } catch (error) {\n          console.error('Failed to fetch X3D content:', error);\n          setHtmlContent('<div>3D Model content could not be loaded</div>');\n        }\n      } else {\n        setHtmlContent('<div>No X3D file URL found in product data</div>');\n      }\n\n      // Content loading complete\n      setIsLoadingContent(false);\n\n    } catch (error) {\n      console.error('Error fetching product data:', error);\n      setError('Failed to load product data');\n      setIsLoadingContent(false);\n    } finally {\n      setIsLoading(false);\n    }\n  }, [organizationId, productId, getProductData, setProductData]);\n\n  useEffect(() => {\n    fetchAllData();\n  }, [fetchAllData]);\n\n  return {\n    productName,\n    htmlContent,\n    partsTree,\n    phases,\n    pointers,\n    orgCustomization,\n    files,\n    isLoading,\n    isLoadingContent,\n    error,\n    refetch: fetchAllData,\n  };\n}","\"use client\"\n\nimport type React from \"react\"\nimport { Icon } from '@iconify/react';\nimport { cn } from '@/lib/utils';\n\ninterface LayeredCardProps {\n  title: string\n  children: React.ReactNode\n  onEdit?: () => void\n  onDelete?: () => void\n  onNext?: () => void\n  onPrev?: () => void\n  showNext?: boolean\n  showPrev?: boolean\n}\n\nexport function LayeredCard({\n  title,\n  children,\n  onEdit,\n  onDelete,\n  onNext,\n  onPrev,\n  showNext = false,\n  showPrev = false,\n}: LayeredCardProps) {\n  return (\n    <div className=\"relative w-full h-full rounded-[24px] bg-[#161617] border border-[#414143] shadow-lg p-3 flex flex-col\">\n      {/* Action buttons - Only show if at least one action is available */}\n      {(onEdit || onDelete) && (\n        <div className=\"absolute right-2 top-2 flex items-center gap-0 rounded-lg bg-[#242425]/50 backdrop-blur-sm overflow-hidden z-20\" style={{ pointerEvents: \"auto\" }}>\n          {onEdit && (\n            <button\n              onClick={onEdit}\n              className=\"h-10 w-10 cursor-pointer text-white/70 hover:bg-[#313133] hover:text-white flex items-center justify-center transition-colors z-10\"\n              style={{ pointerEvents: \"auto\" }}\n              type=\"button\"\n            >\n              <Icon icon=\"bitcoin-icons:edit-outline\" className=\"h-4 w-4\" />\n              <span className=\"sr-only\">Edit</span>\n            </button>\n          )}\n          {onEdit && onDelete && <div className=\"h-6 w-px bg-[#414143]\" />}\n          {onDelete && (\n            <button\n              onClick={onDelete}\n              className=\"h-10 w-10 cursor-pointer text-white/70 hover:bg-[#313133] hover:text-white flex items-center justify-center transition-colors z-10\"\n              style={{ pointerEvents: \"auto\" }}\n              type=\"button\"\n            >\n              <Icon icon=\"weui:delete-outlined\" className=\"h-4 w-4\" />\n              <span className=\"sr-only\">Delete</span>\n            </button>\n          )}\n        </div>\n      )}\n\n      {/* <h4 className=\"mb-2 text-base font-bold text-white\">{title}</h4> */}\n\n      {/* Scrollable content */}\n      <div className=\"flex-1 text-white/90 overflow-y-auto text-sm mt-4\">{children}</div>\n\n      {/* Navigation buttons */}\n      <div className=\"absolute bottom-2 right-2 flex items-center gap-2\">\n        {showPrev && onPrev && (\n          <button\n            onClick={onPrev}\n            className=\"h-10 w-10 text-white/70 hover:bg-[#313133] hover:text-white flex items-center justify-center rounded-lg transition-colors\"\n          >\n            <Icon icon=\"grommet-icons:link-previous\" className=\"h-5 w-5\" />\n            <span className=\"sr-only\">Previous</span>\n          </button>\n        )}\n        {showNext && onNext && (\n          <button\n            onClick={onNext}\n            className=\"h-10 w-10 flex items-center justify-center rounded-lg transition-colors\"\n            style={{ color: 'var(--tnkr-primary)' }}\n            onMouseEnter={(e) => e.currentTarget.style.backgroundColor = 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)'}\n            onMouseLeave={(e) => e.currentTarget.style.backgroundColor = 'transparent'}\n          >\n            <Icon icon=\"grommet-icons:link-next\" className=\"h-5 w-5\" />\n            <span className=\"sr-only\">Next</span>\n          </button>\n        )}\n      </div>\n    </div>\n  )\n}","\"use client\"\n\nimport type React from \"react\"\nimport { useState } from \"react\"\nimport { LayeredCard } from \"./LayeredCard\"\n\ninterface CardData {\n  id: string\n  title: string\n  content: React.ReactNode\n  onEdit?: () => void\n  onDelete?: () => void\n  createdAt?: string\n  updatedAt?: string\n}\n\ninterface LayeredCardCarouselProps {\n  cards: CardData[]\n  layers?: number\n  onEdit?: (cardId: string) => void\n  onDelete?: (cardId: string) => void\n}\n\nexport function LayeredCardCarousel({\n  cards,\n  layers = 4,\n  onEdit,\n  onDelete\n}: LayeredCardCarouselProps) {\n  const [index, setIndex] = useState(0)\n\n  const handleNext = () => {\n    setIndex((prev) => (prev + 1) % cards.length)\n  }\n\n  const handlePrev = () => {\n    setIndex((prev) => (prev - 1 + cards.length) % cards.length)\n  }\n\n  const showPrev = index > 0\n  const showNext = index < cards.length - 1\n\n  if (cards.length === 0) {\n    return null\n  }\n\n  return (\n    <div className=\"relative w-[280px] h-[421px]\">\n      {Array.from({ length: Math.min(layers, cards.length) }).map((_, i) => {\n        const offset = i * 12\n        const widthReduction = i * 4\n        const isFront = i === 0\n        const cardIndex = (index + i) % cards.length\n        const card = cards[cardIndex]\n\n        return (\n          <div\n            key={`${card.id}-${i}-${card.updatedAt || card.createdAt}`}\n            className=\"absolute\"\n            style={{\n              bottom: `${offset}px`,\n              width: `${100 - widthReduction}%`,\n              left: `${widthReduction / 2}%`,\n              height: \"100%\",\n              zIndex: layers - i,\n            }}\n          >\n            {isFront ? (\n              <LayeredCard\n                key={`card-${card.id}-${card.updatedAt || card.createdAt}`}\n                title={card.title}\n                onEdit={onEdit ? () => onEdit(card.id) : undefined}\n                onDelete={onDelete ? () => onDelete(card.id) : undefined}\n                onNext={showNext ? handleNext : undefined}\n                onPrev={showPrev ? handlePrev : undefined}\n                showNext={showNext}\n                showPrev={showPrev}\n              >\n                {card.content}\n              </LayeredCard>\n            ) : (\n              <div className=\"h-full rounded-[24px] bg-[#161617] border border-[#414143] shadow-md\" />\n            )}\n          </div>\n        )\n      })}\n    </div>\n  )\n}","import React from 'react';\nimport { Icon } from '@iconify/react';\nimport { cn } from '@/lib/utils';\n\ninterface CalloutProps {\n  type?: 'info' | 'warning' | 'danger' | 'success';\n  children: React.ReactNode;\n  className?: string;\n}\n\nconst calloutConfig = {\n  info: {\n    bg: 'bg-[#161617]',\n    icon: 'quill:info',\n    textColor: 'text-white/70',\n    borderColor: 'border-[#414143]'\n  },\n  warning: {\n    bg: 'bg-yellow-900/20',\n    icon: 'mdi:warning',\n    textColor: 'text-yellow-200',\n    borderColor: 'border-yellow-600/30'\n  },\n  danger: {\n    bg: 'bg-red-900/20',\n    icon: 'mdi:alert-circle',\n    textColor: 'text-red-200',\n    borderColor: 'border-red-600/30'\n  },\n  success: {\n    bg: 'bg-green-900/20',\n    icon: 'mdi:check-circle',\n    textColor: 'text-green-200',\n    borderColor: 'border-green-600/30'\n  }\n};\n\nexport const Callout: React.FC<CalloutProps> = ({\n  type = 'info',\n  children,\n  className\n}) => {\n  const config = calloutConfig[type];\n\n  return (\n    <div\n      className={cn(\n        'flex gap-3 p-4 rounded-[12px] border',\n        config.bg,\n        config.borderColor,\n        config.textColor,\n        className\n      )}\n    >\n      <Icon\n        icon={config.icon}\n        className={cn('w-5 h-5 flex-shrink-0 mt-0.5', config.textColor)}\n      />\n      <div className=\"flex-1 text-sm leading-relaxed\">\n        {children}\n      </div>\n    </div>\n  );\n};","\"use client\"\n\nimport React from 'react';\n\ninterface ToggleSwitchProps {\n  checked: boolean;\n  onChange: (checked: boolean) => void;\n  disabled?: boolean;\n}\n\nexport const ToggleSwitch: React.FC<ToggleSwitchProps> = ({\n  checked,\n  onChange,\n  disabled = false\n}) => {\n  return (\n    <button\n      type=\"button\"\n      role=\"switch\"\n      aria-checked={checked}\n      disabled={disabled}\n      onClick={() => onChange(!checked)}\n      className={`\n        relative inline-flex h-6 w-11 items-center rounded-full\n        transition-colors duration-200 focus:outline-none\n        ${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}\n      `}\n      style={{\n        backgroundColor: checked ? 'var(--tnkr-primary)' : '#313133',\n      }}\n    >\n      <span\n        className={`\n          inline-block h-4 w-4 transform rounded-full bg-white\n          transition-transform duration-200\n          ${checked ? 'translate-x-6' : 'translate-x-1'}\n        `}\n      />\n    </button>\n  );\n};\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { Icon } from '@iconify/react';\nimport { TnkrEditor } from '../../TnkrEditor';\nimport { getBasicExtensions, type UploadFunction } from '../../extensions';\nimport { Callout } from '@/core/components/ui/Callout';\nimport { ToggleSwitch } from '@/core/components/ui/ToggleSwitch';\n\n// Utility function to format file size\nconst formatFileSize = (bytes: number): string => {\n  if (bytes === 0) return '0 Bytes';\n  const k = 1024;\n  const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\n  return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];\n};\n\n// Types for different side menu modes\nexport type SideMenuMode = 'explorer' | 'bom' | 'custom' | 'cad-design';\n\nexport interface FlashCard {\n  id: string;\n  title: string;\n  content: string;\n  createdAt: string;\n  updatedAt: string;\n}\n\nexport interface ExplorerSideMenuData {\n  mode: 'explorer';\n  flashCards: FlashCard[];\n  editingCard?: FlashCard | null;\n  organizationId?: string;\n  productId?: string;\n  onUploadMedia?: UploadFunction;\n}\n\nexport interface BomSideMenuData {\n  mode: 'bom';\n  children: React.ReactNode; // BOM passes its own content as children\n  title?: string;\n  onClose?: () => void; // Allow BOM to handle its own close logic if needed\n}\n\nexport interface CustomSideMenuData {\n  mode: 'custom';\n  children: React.ReactNode;\n  title?: string;\n}\n\nexport interface CadSettings {\n  allowModelDownloads: boolean;\n  onshapeLink: string | null;\n  paymentLink: string | null;\n  collectPaymentForStepFile: boolean;\n}\n\nexport interface CadDesignSideMenuData {\n  mode: 'cad-design';\n  cadSettings: CadSettings;\n  stepFileUrl?: string | null;\n  stepFileSize?: number | null;\n}\n\nexport type SideMenuData = ExplorerSideMenuData | BomSideMenuData | CustomSideMenuData | CadDesignSideMenuData;\n\nexport interface UnifiedSideMenuProps {\n  isOpen: boolean;\n  data: SideMenuData | null;\n  onClose: () => void;\n  onSave?: (data: any) => void;\n  width?: number | string;\n  closeOnOverlayClick?: boolean;\n}\n\nexport const UnifiedSideMenu: React.FC<UnifiedSideMenuProps> = ({\n  isOpen,\n  data,\n  onClose,\n  onSave,\n  width = 480,\n  closeOnOverlayClick = true,\n}) => {\n  // Explorer-specific state\n  const [editorContent, setEditorContent] = useState<any>(null);\n  const [noteTitle, setNoteTitle] = useState<string>('');\n  const [isSaving, setIsSaving] = useState(false);\n  const [saveSuccess, setSaveSuccess] = useState(false);\n  const [editorReady, setEditorReady] = useState(false);\n\n  // CAD design-specific state\n  const [cadAllowDownloads, setCadAllowDownloads] = useState(false);\n  const [cadOnshapeLink, setCadOnshapeLink] = useState('');\n  const [cadPaymentLink, setCadPaymentLink] = useState('');\n  const [cadCollectPayment, setCadCollectPayment] = useState(false);\n\n  // Initialize explorer data when opening\n  useEffect(() => {\n    if (data?.mode === 'explorer' && isOpen) {\n      setEditorReady(false);\n\n      if (data.editingCard) {\n        // Editing existing card\n        setNoteTitle(data.editingCard.title);\n        try {\n          const parsedContent = JSON.parse(data.editingCard.content);\n          setEditorContent(parsedContent);\n          // Wait a tick to ensure state is set before rendering editor\n          setTimeout(() => setEditorReady(true), 0);\n        } catch (error) {\n          console.error('[UnifiedSideMenu] Failed to parse card content:', error);\n          // If parsing fails, try to use the content as-is\n          setEditorContent(data.editingCard.content);\n          setTimeout(() => setEditorReady(true), 0);\n        }\n      } else {\n        // Creating new card\n        setNoteTitle(`Note ${data.flashCards.length + 1}`);\n        setEditorContent(null);\n        setEditorReady(true);\n      }\n    } else if (!isOpen) {\n      // Reset state when closing\n      setNoteTitle('');\n      setEditorContent(null);\n      setSaveSuccess(false);\n      setIsSaving(false);\n      setEditorReady(false);\n    }\n  }, [data, isOpen]);\n\n  // Initialize CAD design data when opening\n  useEffect(() => {\n    if (data?.mode === 'cad-design' && isOpen) {\n      setCadAllowDownloads(data.cadSettings.allowModelDownloads);\n      setCadOnshapeLink(data.cadSettings.onshapeLink || '');\n      setCadPaymentLink(data.cadSettings.paymentLink || '');\n      setCadCollectPayment(data.cadSettings.collectPaymentForStepFile);\n    } else if (!isOpen) {\n      // Reset CAD state when closing\n      setCadAllowDownloads(false);\n      setCadOnshapeLink('');\n      setCadPaymentLink('');\n      setCadCollectPayment(false);\n    }\n  }, [data, isOpen]);\n\n  // Handle escape key\n  useEffect(() => {\n    const handleEscape = (event: KeyboardEvent) => {\n      if (event.key === 'Escape' && isOpen) {\n        onClose();\n      }\n    };\n\n    if (isOpen) {\n      document.addEventListener('keydown', handleEscape);\n      document.body.style.overflow = 'hidden';\n    } else {\n      document.body.style.overflow = 'unset';\n    }\n\n    return () => {\n      document.removeEventListener('keydown', handleEscape);\n      document.body.style.overflow = 'unset';\n    };\n  }, [isOpen, onClose]);\n\n  // Handle overlay click\n  const handleOverlayClick = useCallback((event: React.MouseEvent) => {\n    if (closeOnOverlayClick && event.target === event.currentTarget) {\n      onClose();\n    }\n  }, [closeOnOverlayClick, onClose]);\n\n  // Handle sidebar click to prevent event bubbling\n  const handleSidebarClick = useCallback((event: React.MouseEvent) => {\n    event.stopPropagation();\n  }, []);\n\n  // Explorer-specific save handler\n  const handleSaveExplorerCard = async () => {\n    if (data?.mode !== 'explorer' || !onSave) return;\n\n    // Check if content is empty\n    let isEmpty = false;\n    if (!editorContent) {\n      isEmpty = true;\n    } else {\n      isEmpty = !editorContent.content || editorContent.content.length === 0 ||\n               (editorContent.content.length === 1 && editorContent.content[0].type === 'paragraph' && !editorContent.content[0].content);\n    }\n\n    if (isEmpty || !noteTitle.trim()) return;\n\n    setIsSaving(true);\n    setSaveSuccess(false);\n\n    try {\n      const cardData = {\n        title: noteTitle,\n        content: JSON.stringify(editorContent),\n        editingCard: data.editingCard,\n      };\n\n      // Call the save handler passed from parent\n      await onSave(cardData);\n\n      setSaveSuccess(true);\n\n      // Close after a brief success indication\n      setTimeout(() => {\n        onClose();\n        setEditorContent(null);\n        setNoteTitle('');\n        setSaveSuccess(false);\n        setIsSaving(false);\n      }, 1000);\n    } catch (error) {\n      setIsSaving(false);\n      console.error('Error saving flash card:', error);\n    }\n  };\n\n  // CAD design-specific save handler\n  const handleSaveCadSettings = async () => {\n    if (data?.mode !== 'cad-design' || !onSave) return;\n\n    setIsSaving(true);\n    setSaveSuccess(false);\n\n    try {\n      const cadSettingsData = {\n        cadSettings: {\n          allowModelDownloads: cadAllowDownloads,\n          onshapeLink: cadOnshapeLink || null,\n          paymentLink: cadPaymentLink || null,\n          collectPaymentForStepFile: cadCollectPayment,\n        },\n      };\n\n      await onSave(cadSettingsData);\n\n      setSaveSuccess(true);\n\n      // Close after a brief success indication\n      setTimeout(() => {\n        onClose();\n        setSaveSuccess(false);\n        setIsSaving(false);\n      }, 1000);\n    } catch (error) {\n      setIsSaving(false);\n      console.error('Error saving CAD settings:', error);\n    }\n  };\n\n  const sidebarWidth = typeof width === 'number' ? `${width}px` : width;\n\n  // Don't render if not open\n  if (!isOpen || !data) return null;\n\n  return (\n    <>\n      {/* Overlay */}\n      <div\n        className=\"fixed inset-0 bg-black/50 z-[9998] transition-opacity duration-300\"\n        onClick={handleOverlayClick}\n        style={{\n          opacity: isOpen ? 1 : 0,\n          visibility: isOpen ? 'visible' : 'hidden',\n        }}\n      />\n\n      {/* Sidebar */}\n      <div\n        className=\"fixed right-0 top-0 h-full bg-[#0D0D0D] border-l border-[#313133] z-[9999] transition-transform duration-300\"\n        style={{\n          width: sidebarWidth,\n          transform: isOpen ? 'translateX(0)' : 'translateX(100%)',\n        }}\n        onClick={handleSidebarClick}\n      >\n        {/* Render content based on mode */}\n        {data.mode === 'explorer' && (\n          <div className=\"h-full flex flex-col\">\n            {/* Header */}\n            <div className=\"px-6 py-4 border-b border-[#313133] select-none\">\n              <div className=\"flex items-center gap-3\">\n                <button\n                  onClick={onClose}\n                  className=\"text-white/60 hover:text-white transition-colors\"\n                >\n                  <Icon icon=\"si:chevron-right-line\" className=\"w-6 h-6\" style={{ transform: 'rotate(180deg)' }} />\n                </button>\n                <input\n                  type=\"text\"\n                  value={noteTitle}\n                  onChange={(e) => setNoteTitle(e.target.value)}\n                  placeholder=\"Add Notes\"\n                  className=\"flex-1 bg-transparent text-white text-[16px] font-medium outline-none placeholder:text-white/40\"\n                />\n              </div>\n            </div>\n\n            {/* Body */}\n            <div className=\"flex-1 flex flex-col overflow-hidden\" style={{ minHeight: 0 }}>\n              {/* Info Callout */}\n              {!data.editingCard && (\n                <div className=\"p-6 pb-0 select-none\">\n                  <Callout type=\"info\">\n                    Notes are flashcards that carry key short but useful information about your robot.\n                    This may include specifications, features, maintenance tips, and troubleshooting\n                    advice to help you operate it effectively.\n                  </Callout>\n                </div>\n              )}\n\n              {/* Mini TnkrEditor - Independent instance */}\n              <div className=\"flex-1 overflow-y-auto pl-4\">\n                {editorReady ? (\n                  <TnkrEditor\n                    key={`unified-editor-${data.editingCard?.id || 'new'}-${data.editingCard?.updatedAt || 'fresh'}`}\n                    content={editorContent || { type: 'doc', content: [{ type: 'paragraph', content: [] }] }}\n                    onChange={(content) => {\n                      setEditorContent(content);\n                    }}\n                    customExtensionSet={(() => {\n                      const baseExtensions = getBasicExtensions();\n                      return {\n                        ...baseExtensions,\n                        nodes: baseExtensions.nodes.filter(ext => {\n                          const unwantedExtensions = ['bom-node', 'table', 'explorer-card-node', 'tabs'];\n                          return !unwantedExtensions.includes(ext.name);\n                        })\n                      };\n                    })()}\n                    onUploadMedia={data.onUploadMedia}\n                    pageId={`unified-flash-card-${data.editingCard?.id || 'new'}`}\n                    pageTitle={noteTitle || 'Flash Card Note'}\n                    showDragHandle={false}\n                    placeholder=\"Write your note here...\"\n                  />\n                ) : (\n                  <div className=\"flex items-center justify-center h-full\">\n                    <div className=\"w-6 h-6 border-2 border-white/20 rounded-full animate-spin\" style={{ borderTopColor: 'var(--tnkr-primary)' }} />\n                  </div>\n                )}\n              </div>\n\n              {/* Footer with Save Button */}\n              <div className=\"p-6 flex justify-end\">\n                <button\n                  onClick={handleSaveExplorerCard}\n                  disabled={!noteTitle.trim() || isSaving}\n                  className={`px-6 py-2.5 rounded-lg text-white text-sm font-medium transition-all duration-200 flex items-center gap-2 ${\n                    saveSuccess\n                      ? 'bg-green-600 hover:bg-green-700'\n                      : isSaving\n                      ? 'bg-gray-600'\n                      : ''\n                  } disabled:cursor-not-allowed disabled:opacity-50`}\n                  style={!saveSuccess && !isSaving ? { backgroundColor: 'var(--tnkr-primary)' } : undefined}\n                  onMouseEnter={(e) => !saveSuccess && !isSaving && (e.currentTarget.style.backgroundColor = 'color-mix(in srgb, var(--tnkr-primary) 85%, black)')}\n                  onMouseLeave={(e) => !saveSuccess && !isSaving && (e.currentTarget.style.backgroundColor = 'var(--tnkr-primary)')}\n                >\n                  {saveSuccess ? (\n                    <>\n                      <Icon icon=\"hugeicons:tick-02\" width=\"16\" height=\"16\" />\n                      Saved!\n                    </>\n                  ) : isSaving ? (\n                    <>\n                      <div className=\"w-4 h-4 border-2 border-white/30 border-t-white rounded-full animate-spin\" />\n                      Saving...\n                    </>\n                  ) : (\n                    data.editingCard ? 'Update Note' : 'Save Note'\n                  )}\n                </button>\n              </div>\n            </div>\n          </div>\n        )}\n\n        {/* BOM mode - render children directly */}\n        {data.mode === 'bom' && (\n          <div className=\"h-full flex flex-col\">\n            {/* No header - BOM passes its own custom header with back button */}\n            <div className=\"flex-1 overflow-auto\">\n              {data.children}\n            </div>\n          </div>\n        )}\n\n        {/* Custom mode - render custom content */}\n        {data.mode === 'custom' && (\n          <div className=\"h-full flex flex-col\">\n            {data.title && (\n              <div className=\"px-6 py-4 border-b border-[#313133]\">\n                <h2 className=\"text-white text-lg font-medium\">{data.title}</h2>\n              </div>\n            )}\n            <div className=\"flex-1 overflow-auto\">\n              {data.children}\n            </div>\n          </div>\n        )}\n\n        {/* CAD Design mode - setup and configuration */}\n        {data.mode === 'cad-design' && (\n          <div className=\"h-full flex flex-col\">\n            {/* Header */}\n            <div className=\"px-6 py-4 border-b border-[#313133] select-none\">\n              <div className=\"flex items-center gap-3\">\n                <button\n                  onClick={onClose}\n                  className=\"text-white/60 hover:text-white transition-colors\"\n                >\n                  <Icon icon=\"si:chevron-right-line\" className=\"w-6 h-6\" style={{ transform: 'rotate(180deg)' }} />\n                </button>\n                <h2 className=\"text-white text-[16px] font-medium\">CAD Design Setup</h2>\n              </div>\n            </div>\n\n            {/* Body */}\n            <div className=\"flex-1 overflow-y-auto px-6 py-6\" style={{ minHeight: 0 }}>\n              <div className=\"space-y-6\">\n                {/* Allow Model Downloads */}\n                <div className=\"flex flex-col items-start justify-between gap-4\">\n                  <div className=\"flex-1\">\n                    <div className=\"flex items-center gap-2 mb-1\">\n                      <Icon icon=\"bytesize:download\" className=\"w-4 h-4 text-white/70\" />\n                      <h3 className=\"text-white/70 text-sm font-medium\">Allow model downloads</h3>\n                    </div>\n                  </div>\n                  <ToggleSwitch\n                    checked={cadAllowDownloads}\n                    onChange={setCadAllowDownloads}\n                  />\n                </div>\n\n                {/* STEP File Display */}\n                {data.stepFileUrl && (\n                  <div>\n                    <div className=\"flex items-center gap-2 mb-2\">\n                      <Icon icon=\"mage:box-3d-download\" className=\"w-4 h-4 text-white/70\" />\n                      <h3 className=\"text-white text-sm font-medium\">Step File</h3>\n                    </div>\n                    <div className=\"bg-[#313133] rounded-lg p-4\">\n                      <div className=\"flex items-center gap-3\">\n                        <div className=\"w-10 h-10 rounded-lg flex items-center justify-center flex-shrink-0\" style={{ backgroundColor: 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)' }}>\n                          <Icon icon=\"mage:box-3d-download\" className=\"w-5 h-5\" style={{ color: 'var(--tnkr-primary)' }} />\n                        </div>\n                        <div className=\"flex-1 min-w-0\">\n                          <p className=\"text-white text-sm font-medium truncate\">\n                            {data.stepFileUrl.split('/').pop()?.split('?')[0] || 'STEP File'}\n                          </p>\n                          <p className=\"text-white/60 text-xs\">\n                            {data.stepFileSize ? formatFileSize(data.stepFileSize) : 'Size unknown'}\n                          </p>\n                        </div>\n                      </div>\n                    </div>\n                  </div>\n                )}\n\n                {/* Onshape Link */}\n                <div>\n                  <div className=\"flex items-center gap-2 mb-2\">\n                    <Icon icon=\"arcticons:onshape\" className=\"w-4 h-4 text-white/70\" />\n                    <h3 className=\"text-white/70 text-sm font-medium\">Onshape link</h3>\n                  </div>\n                  <input\n                    type=\"url\"\n                    value={cadOnshapeLink}\n                    onChange={(e) => setCadOnshapeLink(e.target.value)}\n                    placeholder=\"paste a link to an Onshape document\"\n                    className=\"w-full bg-transparent border border-[#313133] rounded-lg px-3 py-2 text-white text-sm outline-none transition-colors placeholder:text-white/40\"\n                    onFocus={(e) => e.currentTarget.style.borderColor = 'var(--tnkr-primary)'}\n                    onBlur={(e) => e.currentTarget.style.borderColor = '#313133'}\n                  />\n                </div>\n\n                {/* Collect Payment for STEP File */}\n                <div className=\"flex flex-col items-start justify-between gap-4\">\n                  <div className=\"flex-1\">\n                    <div className=\"flex items-center gap-2 mb-1\">\n                      <Icon icon=\"fluent:payment-20-regular\" className=\"w-4 h-4 text-white/70\" />\n                      <h3 className=\"text-white/70 text-sm font-medium\">Collect payment for STEP file</h3>\n                    </div>\n                  </div>\n                  <ToggleSwitch\n                    checked={cadCollectPayment}\n                    onChange={setCadCollectPayment}\n                  />\n                </div>\n\n                {/* Payment Link */}\n                {cadCollectPayment && (\n                  <div>\n                    <div className=\"flex items-center gap-2 mb-2\">\n                      <Icon icon=\"uil:link\" className=\"w-4 h-4 text-white/70\" />\n                      <h3 className=\"text-white/70 text-sm font-medium\">Payment link</h3>\n                    </div>\n                    <input\n                      type=\"url\"\n                      value={cadPaymentLink}\n                      onChange={(e) => setCadPaymentLink(e.target.value)}\n                      placeholder=\"paste a product purchase link\"\n                      className=\"w-full bg-transparent border border-[#313133] rounded-lg px-3 py-2 text-white/70 text-sm outline-none transition-colors placeholder:text-white/40\"\n                      onFocus={(e) => e.currentTarget.style.borderColor = 'var(--tnkr-primary)'}\n                      onBlur={(e) => e.currentTarget.style.borderColor = '#313133'}\n                    />\n                  </div>\n                )}\n              </div>\n            </div>\n\n            {/* Footer with Save Button */}\n            <div className=\"p-6 flex justify-end\">\n              <button\n                onClick={handleSaveCadSettings}\n                disabled={isSaving}\n                className={`px-6 py-2.5 rounded-lg text-white text-sm font-medium transition-all duration-200 flex items-center gap-2 ${\n                  saveSuccess\n                    ? 'bg-green-600 hover:bg-green-700'\n                    : isSaving\n                    ? 'bg-gray-600'\n                    : ''\n                } disabled:cursor-not-allowed disabled:opacity-50`}\n                style={!saveSuccess && !isSaving ? { backgroundColor: 'var(--tnkr-primary)' } : undefined}\n                onMouseEnter={(e) => !saveSuccess && !isSaving && (e.currentTarget.style.backgroundColor = 'color-mix(in srgb, var(--tnkr-primary) 85%, black)')}\n                onMouseLeave={(e) => !saveSuccess && !isSaving && (e.currentTarget.style.backgroundColor = 'var(--tnkr-primary)')}\n              >\n                {saveSuccess ? (\n                  <>\n                    <Icon icon=\"hugeicons:tick-02\" width=\"16\" height=\"16\" />\n                    Saved!\n                  </>\n                ) : isSaving ? (\n                  <>\n                    <div className=\"w-4 h-4 border-2 border-white/30 border-t-white rounded-full animate-spin\" />\n                    Saving...\n                  </>\n                ) : (\n                  'Save'\n                )}\n              </button>\n            </div>\n          </div>\n        )}\n      </div>\n    </>\n  );\n};","import React, { createContext, useContext, useState, useCallback, useMemo } from 'react';\nimport { UnifiedSideMenu, type SideMenuData } from './UnifiedSideMenu';\nimport type { UploadFunction } from '@/core/extensions';\n\nexport interface UnifiedSideMenuContextType {\n  isOpen: boolean;\n  data: SideMenuData | null;\n  openSideMenu: (data: SideMenuData) => void;\n  closeSideMenu: () => void;\n  updateSideMenuData: (data: SideMenuData) => void;\n  // For nodes to register their save handlers\n  registerSaveHandler: (nodeId: string, handler: (data: any) => void) => void;\n  unregisterSaveHandler: (nodeId: string) => void;\n  // For BOM nodes to register their close handlers\n  registerBomCloseHandler: (nodeId: string, handler: () => void) => void;\n  unregisterBomCloseHandler: (nodeId: string) => void;\n}\n\nconst UnifiedSideMenuContext = createContext<UnifiedSideMenuContextType | undefined>(undefined);\n\nexport interface UnifiedSideMenuProviderProps {\n  children: React.ReactNode;\n  uploadFunction?: UploadFunction;\n}\n\nexport const UnifiedSideMenuProvider: React.FC<UnifiedSideMenuProviderProps> = ({\n  children,\n  uploadFunction,\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [data, setData] = useState<SideMenuData | null>(null);\n  const [saveHandlers, setSaveHandlers] = useState<Map<string, (data: any) => void>>(new Map());\n  const [bomCloseHandlers, setBomCloseHandlers] = useState<Map<string, () => void>>(new Map());\n  const [activeNodeId, setActiveNodeId] = useState<string | null>(null);\n  const [activeBomNodeId, setActiveBomNodeId] = useState<string | null>(null);\n\n  const openSideMenu = useCallback((menuData: SideMenuData) => {\n    // Add upload function if mode is explorer\n    if (menuData.mode === 'explorer' && uploadFunction) {\n      menuData.onUploadMedia = uploadFunction;\n    }\n    setData(menuData);\n    setIsOpen(true);\n  }, [uploadFunction]);\n\n  const closeSideMenu = useCallback(() => {\n    // If it's a BOM node, call its close handler first\n    if (data?.mode === 'bom' && activeBomNodeId && bomCloseHandlers.has(activeBomNodeId)) {\n      const handler = bomCloseHandlers.get(activeBomNodeId);\n      handler?.();\n    }\n\n    setIsOpen(false);\n    // Clear data after animation completes\n    setTimeout(() => {\n      setData(null);\n      setActiveNodeId(null);\n      setActiveBomNodeId(null);\n    }, 300);\n  }, [data, activeBomNodeId, bomCloseHandlers]);\n\n  const updateSideMenuData = useCallback((menuData: SideMenuData) => {\n    // Add upload function if mode is explorer\n    if (menuData.mode === 'explorer' && uploadFunction) {\n      menuData.onUploadMedia = uploadFunction;\n    }\n    setData(menuData);\n  }, [uploadFunction]);\n\n  const registerSaveHandler = useCallback((nodeId: string, handler: (data: any) => void) => {\n    setSaveHandlers(prev => {\n      const newMap = new Map(prev);\n      newMap.set(nodeId, handler);\n      return newMap;\n    });\n    setActiveNodeId(nodeId);\n  }, []);\n\n  const unregisterSaveHandler = useCallback((nodeId: string) => {\n    setSaveHandlers(prev => {\n      const newMap = new Map(prev);\n      newMap.delete(nodeId);\n      return newMap;\n    });\n    if (activeNodeId === nodeId) {\n      setActiveNodeId(null);\n    }\n  }, [activeNodeId]);\n\n  const registerBomCloseHandler = useCallback((nodeId: string, handler: () => void) => {\n    setBomCloseHandlers(prev => {\n      const newMap = new Map(prev);\n      newMap.set(nodeId, handler);\n      return newMap;\n    });\n    setActiveBomNodeId(nodeId);\n  }, []);\n\n  const unregisterBomCloseHandler = useCallback((nodeId: string) => {\n    setBomCloseHandlers(prev => {\n      const newMap = new Map(prev);\n      newMap.delete(nodeId);\n      return newMap;\n    });\n    if (activeBomNodeId === nodeId) {\n      setActiveBomNodeId(null);\n    }\n  }, [activeBomNodeId]);\n\n  const handleSave = useCallback((saveData: any) => {\n\n    let handlerNodeId = activeNodeId;\n\n    // Determine correct handler based on save data type\n    // This fixes the issue where multiple handlers from the same node (e.g., flash cards AND CAD settings)\n    // would overwrite each other's activeNodeId\n    if (saveData.cadSettings) {\n      // This is CAD settings data - find the CAD handler\n      handlerNodeId = Array.from(saveHandlers.keys()).find(key => key.includes('-cad-')) || activeNodeId;\n    } else if (saveData.title && saveData.content) {\n      // This is flash card data - find the flash card handler (not CAD)\n      handlerNodeId = Array.from(saveHandlers.keys()).find(key => key.startsWith('explorer-') && !key.includes('-cad-')) || activeNodeId;\n      console.log('[UnifiedSideMenuContext] Detected flash card save, using handlerNodeId:', handlerNodeId);\n    }\n\n    if (handlerNodeId && saveHandlers.has(handlerNodeId)) {\n      const handler = saveHandlers.get(handlerNodeId);\n      console.log('[UnifiedSideMenuContext] Calling handler for:', handlerNodeId);\n      handler?.(saveData);\n    } else {\n      console.warn('[UnifiedSideMenuContext] No handler found for handlerNodeId:', handlerNodeId, 'Available handlers:', Array.from(saveHandlers.keys()));\n    }\n  }, [activeNodeId, saveHandlers]);\n\n  const contextValue = useMemo(() => ({\n    isOpen,\n    data,\n    openSideMenu,\n    closeSideMenu,\n    updateSideMenuData,\n    registerSaveHandler,\n    unregisterSaveHandler,\n    registerBomCloseHandler,\n    unregisterBomCloseHandler,\n  }), [isOpen, data, openSideMenu, closeSideMenu, updateSideMenuData, registerSaveHandler, unregisterSaveHandler, registerBomCloseHandler, unregisterBomCloseHandler]);\n\n  return (\n    <UnifiedSideMenuContext.Provider value={contextValue}>\n      {children}\n      <UnifiedSideMenu\n        isOpen={isOpen}\n        data={data}\n        onClose={closeSideMenu}\n        onSave={handleSave}\n      />\n    </UnifiedSideMenuContext.Provider>\n  );\n};\n\nexport const useUnifiedSideMenu = (): UnifiedSideMenuContextType => {\n  const context = useContext(UnifiedSideMenuContext);\n  if (!context) {\n    throw new Error('useUnifiedSideMenu must be used within a UnifiedSideMenuProvider');\n  }\n  return context;\n};","import React, { useState, useEffect, useRef, useCallback, useMemo, createContext, useContext } from \"react\";\nimport { NodeViewWrapper, NodeViewContent, NodeViewProps } from \"@tiptap/react\";\nimport { Part } from \"../../../../src/components/TnkrModelView/types\";\nimport { useModelViewCore } from \"../../../../src/components/TnkrModelView/modelViewCore\";\nimport PartsTree from \"./_components/PartsTree\";\nimport { Icon } from \"@iconify/react\";\nimport { TnkrEditorModelViewCore } from \"@/app/components/TnkrModelView\";\nimport { useProductDataContext } from \"@/contexts/ProductDataContext\";\nimport { useProductData } from \"@/hooks/useProductData\";\nimport { LayeredCardCarousel } from \"@/core/components/ui/LayeredCardCarousel\";\nimport { useUnifiedSideMenu, type ExplorerSideMenuData } from '@/core/components/unified-side-menu';\nimport { TnkrEditor } from '@/core/TnkrEditor';\nimport { getBasicExtensions } from '@/core/extensions';\nimport { Tooltip, TooltipTrigger, TooltipContent } from '@/core/components/tiptap-ui-primitive/tooltip';\n\n// Utility function to convert JSON content to proper format for TnkrEditor\nconst jsonToHtml = (jsonContent: string) => {\n  try {\n    const parsed = JSON.parse(jsonContent);\n    // Return the parsed JSON object for TnkrEditor to handle\n    return parsed;\n  } catch {\n    return jsonContent; // If it's already HTML or invalid JSON\n  }\n};\n\n// Create ModelViewCore Context for the Explorer Card\ninterface ExplorerModelViewCoreContextType {\n  handleShowAllParts: () => void;\n  isPartHighlighted: (partId: string) => boolean;\n  isPartHidden: (partId: string) => boolean;\n  isPartIsolated: (partId: string) => boolean;\n  partOperations: {\n    highlightShapesFromPartsTree: (partId: string, shapeIds: string[]) => void;\n    removeHighlightShapesFromPartsTree: (partId: string, shapeIds: string[]) => void;\n    hideShapesFromPartsTree: (partId: string, shapeIds: string[]) => void;\n    showShapesFromPartsTree: (partId: string, shapeIds: string[]) => void;\n    isolateShapesFromPartsTree: (partId: string, shapeIds: string[], partName?: string) => void;\n  };\n  // Expose the full modelViewCore state for TnkrEditorModelViewCore\n  fullModelViewCoreState: any;\n}\n\nconst ExplorerModelViewCoreContext = createContext<ExplorerModelViewCoreContextType | null>(null);\n\ninterface ExplorerModelViewCoreProviderProps {\n  children: React.ReactNode;\n  partsTree: Part[];\n}\n\nconst ExplorerModelViewCoreProvider: React.FC<ExplorerModelViewCoreProviderProps> = ({ children, partsTree }) => {\n  // Use the modelViewCore hook to get all operations\n  const modelViewCoreState = useModelViewCore(partsTree);\n\n  const contextValue: ExplorerModelViewCoreContextType = {\n    handleShowAllParts: modelViewCoreState.handleShowAllParts,\n    isPartHighlighted: modelViewCoreState.isPartHighlighted,\n    isPartHidden: modelViewCoreState.isPartHidden,\n    isPartIsolated: modelViewCoreState.isPartIsolated,\n    partOperations: {\n      highlightShapesFromPartsTree: (modelViewCoreState.partOperations as any)?.highlightShapesFromPartsTree || (() => {}),\n      removeHighlightShapesFromPartsTree: (modelViewCoreState.partOperations as any)?.removeHighlightShapesFromPartsTree || (() => {}),\n      hideShapesFromPartsTree: (modelViewCoreState.partOperations as any)?.hideShapesFromPartsTree || (() => {}),\n      showShapesFromPartsTree: (modelViewCoreState.partOperations as any)?.showShapesFromPartsTree || (() => {}),\n      isolateShapesFromPartsTree: (modelViewCoreState.partOperations as any)?.isolateShapesFromPartsTree || (() => {}),\n    },\n    // Expose the full state\n    fullModelViewCoreState: modelViewCoreState\n  };\n\n  return (\n    <ExplorerModelViewCoreContext.Provider value={contextValue}>\n      {children}\n    </ExplorerModelViewCoreContext.Provider>\n  );\n};\n\nexport const useExplorerModelViewCoreContext = () => {\n  const context = useContext(ExplorerModelViewCoreContext);\n  if (!context) {\n    throw new Error('useExplorerModelViewCoreContext must be used within ExplorerModelViewCoreProvider');\n  }\n  return context;\n};\n\n// Component that receives the ModelViewCore state as props\ninterface ExplorerCardContentProps {\n  htmlContent: string | null;\n  partsTree: Part[];\n  productName: string;\n  containerRef: React.RefObject<HTMLDivElement>;\n  flashCards: FlashCard[];\n  onEditCard: (cardId: string) => void;\n  onDeleteCard: (cardId: string) => void;\n  onCreateCard: () => void;\n  isReadOnly: boolean;\n  showPartsTree: boolean;\n  cadSettings: any;\n  stepFileUrl: string | null;\n  handleOpenCadDesignSetup: () => void;\n  handleDownloadStepFile: (e: React.MouseEvent) => void;\n  handleOpenOnshape: (e: React.MouseEvent) => void;\n}\n\nconst ExplorerCardContent = React.memo<ExplorerCardContentProps>(({\n  htmlContent,\n  partsTree,\n  productName,\n  containerRef,\n  flashCards,\n  onEditCard,\n  onDeleteCard,\n  onCreateCard,\n  isReadOnly,\n  showPartsTree,\n  cadSettings,\n  stepFileUrl,\n  handleOpenCadDesignSetup,\n  handleDownloadStepFile,\n  handleOpenOnshape,\n}) => {\n  // Use the context instead of direct hook\n  const {\n    handleShowAllParts: handleShowAllPartsFromContext,\n    isPartHighlighted: isPartHighlightedFromContext,\n    isPartHidden: isPartHiddenFromContext,\n    isPartIsolated: isPartIsolatedFromContext,\n    partOperations,\n    fullModelViewCoreState\n  } = useExplorerModelViewCoreContext();\n\n  // Create context menu state locally since it's UI-specific\n  const [contextMenuFromContext, setContextMenuFromContext] = useState<any>({\n    visible: false,\n    position: { x: 0, y: 0 },\n    transformId: null,\n  });\n\n  // Set up X3D styles before model loads\n  useEffect(() => {\n    let rafId: number | null = null;\n    let attempts = 0;\n    const MAX_ATTEMPTS = 60; // Max 60 frames (~1 second at 60fps)\n\n    // Wait for container to have dimensions (especially important in edit mode with max-w-[90%])\n    const setupStyles = () => {\n      if (containerRef.current) {\n        const containerHeight = containerRef.current.clientHeight;\n\n        // Skip if container hasn't been sized yet, but limit attempts to prevent infinite loop\n        if (containerHeight === 0 && attempts < MAX_ATTEMPTS) {\n          attempts++;\n          rafId = requestAnimationFrame(setupStyles);\n          return;\n        }\n\n        // If we still have no height after max attempts, bail out\n        if (containerHeight === 0) {\n          console.warn('Explorer card container failed to size after max attempts');\n          return;\n        }\n\n        // Check if style already exists to update it instead of remove/recreate\n        let existingStyle = document.getElementById(\"explorer-card-x3d-style\");\n        if (existingStyle) {\n          existingStyle.textContent = `\n            x3d, X3D {\n              height: ${containerHeight}px !important;\n            }\n          `;\n        } else {\n          const style = document.createElement(\"style\");\n          style.id = \"explorer-card-x3d-style\";\n          style.textContent = `\n            x3d, X3D {\n              height: ${containerHeight}px !important;\n            }\n          `;\n          document.head.appendChild(style);\n        }\n      }\n    };\n\n    // Use requestAnimationFrame to ensure layout has been calculated\n    rafId = requestAnimationFrame(setupStyles);\n\n    return () => {\n      // Cancel any pending RAF to prevent memory leaks\n      if (rafId !== null) {\n        cancelAnimationFrame(rafId);\n      }\n\n      // Cleanup function to remove styles when component unmounts\n      const existingStyle = document.getElementById(\"explorer-card-x3d-style\");\n      if (existingStyle) {\n        existingStyle.remove();\n      }\n    };\n  }, [htmlContent]);\n\n  const handleElementsReady = (functions: any) => {\n    // Hide HUDs immediately without delay to prevent flash\n    functions.toggleElement(\"HUDs_Div\", false);\n\n    // Hide axes\n    const axesEl = document.getElementById(\"swAxes\");\n    if (axesEl) {\n      axesEl.setAttribute(\"whichChoice\", \"-1\");\n    }\n\n    // Update x3d height attribute if needed\n    if (containerRef.current) {\n      const containerHeight = containerRef.current.clientHeight;\n      functions.updateElementAttribute(\"x3d\", \"height\", `${containerHeight}`);\n    }\n  };\n\n  // Memoize carousel key to avoid expensive .map().join() on every render\n  const carouselKey = useMemo(() => {\n    return `carousel-${flashCards.length}-${flashCards.map(c => c.updatedAt || c.createdAt).join('-')}`;\n  }, [flashCards]);\n\n  // Memoize flash card objects to avoid recreating on every render\n  const memoizedCarouselCards = useMemo(() => {\n    return flashCards.map((card) => ({\n      id: card.id,\n      title: card.title,\n      content: (\n        <div className=\"w-full h-full overflow-y-auto\">\n          <TnkrEditor\n            key={`card-editor-${card.id}-${card.updatedAt || card.createdAt}`}\n            content={jsonToHtml(card.content)}\n            readOnly={true}\n            customExtensionSet={(() => {\n              const baseExtensions = getBasicExtensions();\n              return {\n                ...baseExtensions,\n                nodes: baseExtensions.nodes.filter(ext => {\n                  const unwantedExtensions = ['bom-node', 'table', 'explorer-card-node', 'tabs'];\n                  return !unwantedExtensions.includes(ext.name);\n                }),\n              };\n            })()}\n            className=\"border-none bg-transparent min-h-0\"\n            placeholder=\"\"\n            minHeight={0}\n          />\n        </div>\n      )\n    }));\n  }, [flashCards]);\n\n    return (\n     <div\n       ref={containerRef}\n       className=\"w-full relative h-full overflow-hidden z-20\"\n       style={{\n         backgroundColor: \"transparent\"\n         // Removed pointerEvents: \"none\" to allow drag handle to work\n       }}\n     >\n      {/* 3D Model Viewer - Full Background */}\n      <div className=\"w-full h-full min-h-[400px]\" style={{ pointerEvents: \"auto\" }}>\n        {htmlContent ? (\n          <TnkrEditorModelViewCore\n            htmlString={htmlContent}\n            parts={partsTree}\n            onElementsReady={handleElementsReady}\n            sharedModelViewCore={fullModelViewCoreState}\n          />\n        ) : (\n          <div className=\"relative w-full h-full flex items-center justify-center\">\n            <div className=\"text-center sppace-y-4\">\n              <Icon\n                icon=\"mdi:cube-outline\"\n                className=\"w-12 h-12 text-white/40 mx-auto\"\n              />\n              <p className=\"text-white/60 text-[14px]\">\n                No 3D model available\n              </p>\n            </div>\n          </div>\n        )}\n      </div>\n\n      {/* Product Name Header Overlay */}\n      {productName && (\n        <div className=\"absolute top-4 left-4 z-10 pointer-events-auto\">\n          <div className=\"rounded-[12px] bg-[#242425]/50 py-2 px-4\">\n            <span className=\"text-white/70 text-[14px]\">\n              {productName}\n            </span>\n          </div>\n        </div>\n      )}\n\n      {/* Parts Tree Overlay - Positioned on Left Center */}\n      {partsTree.length > 0 && showPartsTree && (\n        <div\n          className=\"absolute left-4  top-1/2 transform -translate-y-1/2   pointer-events-none\"\n          style={{ maxHeight: \"300px\" }}\n        >\n          <div\n            className=\"w-[220px] p-1  bg-[#161617] border border-[#414143] rounded-[24px] shadow-xl overflow-y-auto overflow-x-hidden pointer-events-auto\"\n            style={{\n              maxHeight: \"inherit\",\n\n            }}\n          >\n            <PartsTree\n              parts={partsTree}\n              contextMenu={contextMenuFromContext}\n              onContextMenuClose={() =>\n                setContextMenuFromContext((prev: any) => ({ ...prev, visible: false }))\n              }\n              onPartContextMenuTrigger={setContextMenuFromContext}\n            />\n          </div>\n        </div>\n      )}\n\n      {/* Flash Cards Overlay - Positioned on Right Center */}\n      {flashCards.length > 0 && (\n        <div\n          className=\"absolute right-4 top-1/2 transform -translate-y-1/2 z-30 pointer-events-auto\"\n          \n        >\n          <LayeredCardCarousel\n            key={carouselKey}\n            cards={memoizedCarouselCards}\n            onEdit={!isReadOnly ? onEditCard : undefined}\n            onDelete={!isReadOnly ? onDeleteCard : undefined}\n          />\n        </div>\n      )}\n\n      {/* CAD Design Button - Bottom Left - Only show in edit mode */}\n      {!isReadOnly && (\n        <div className=\"absolute bottom-4 left-4 z-10 pointer-events-auto\" data-drag-handle-ignore=\"true\">\n          <button\n            onClick={(e) => {\n              e.stopPropagation();\n              handleOpenCadDesignSetup();\n            }}\n            className=\"flex items-center py-4 px-3 gap-2 bg-transparent cursor-pointer border border-[#313133] rounded-[1rem] hover:scale-105 transition-all duration-200 group min-w-0 whitespace-nowrap select-none\"\n            onMouseEnter={(e) => {\n              e.currentTarget.style.borderColor = 'var(--tnkr-primary)';\n            }}\n            onMouseLeave={(e) => {\n              e.currentTarget.style.borderColor = '#313133';\n            }}\n          >\n            {/* Icon */}\n            <div className=\"flex-shrink-0\">\n              <Icon\n                icon=\"mage:box-3d-notification\"\n                className=\"w-4 h-4 text-white/70\"\n              />\n            </div>\n\n            {/* Text Content */}\n            <div className=\"flex flex-col gap-0.5 text-left\">\n              <span className=\"text-[12px] font-medium text-white/70 leading-tight\">\n                CAD designs\n              </span>\n            </div>\n          </button>\n        </div>\n      )}\n\n      {/* Notes Button - Bottom Right - Only show in edit mode */}\n      {!isReadOnly && (\n        <div className=\"absolute bottom-4 right-4 z-10 pointer-events-auto\" data-drag-handle-ignore=\"true\">\n          <button\n            onClick={(e) => {\n              e.stopPropagation();\n              onCreateCard();\n            }}\n            className=\"flex items-center py-3 px-3 gap-2 bg-transparent cursor-pointer border border-[#313133] rounded-[1rem] hover:scale-105 transition-all duration-200 group min-w-0 whitespace-nowrap select-none\"\n            onMouseEnter={(e) => {\n              e.currentTarget.style.borderColor = 'var(--tnkr-primary)';\n            }}\n            onMouseLeave={(e) => {\n              e.currentTarget.style.borderColor = '#313133';\n            }}\n          >\n            {/* Icon */}\n            <div className=\"flex-shrink-0\">\n              <Icon\n                icon=\"hugeicons:note\"\n                className=\"w-4 h-4\"\n                style={{ color: 'var(--tnkr-primary)' }}\n              />\n            </div>\n\n            {/* Text Content */}\n            <div className=\"flex flex-col gap-0.5 text-left\">\n              <span className=\"text-[12px] font-medium text-white leading-tight\">\n                Add notes\n              </span>\n              <span className=\"text-[10px] text-white/60 leading-tight\">\n                Flash cards about your robot.\n              </span>\n            </div>\n          </button>\n        </div>\n      )}\n\n      {/* CAD Design Icons - Top Right */}\n      {(cadSettings?.allowModelDownloads || cadSettings?.onshapeLink) && (\n        <div className=\"absolute top-4 right-4 z-[300] flex items-center gap-0 rounded-lg bg-[#242425]/50 backdrop-blur-sm overflow-hidden\" style={{ pointerEvents: \"auto\" }}>\n          {cadSettings.allowModelDownloads && stepFileUrl && (\n            <Tooltip delay={200}>\n              <TooltipTrigger asChild>\n                <button\n                  onClick={handleDownloadStepFile}\n                  className=\"h-10 w-10 cursor-pointer text-white/70 hover:bg-[#313133] hover:text-white flex items-center justify-center transition-colors z-10\"\n                  style={{ pointerEvents: \"auto\" }}\n                  type=\"button\"\n                  aria-label=\"Download STEP file\"\n                >\n                  <Icon icon=\"ph:cloud-arrow-down\" className=\"h-4 w-4\" />\n                </button>\n              </TooltipTrigger>\n              <TooltipContent>\n                <Icon icon=\"ph:cloud-arrow-down\" className=\"h-4 w-4 inline mr-1.5\" />\n                Download Step File\n              </TooltipContent>\n            </Tooltip>\n          )}\n          {cadSettings.allowModelDownloads && stepFileUrl && cadSettings.onshapeLink && (\n            <div className=\"h-6 w-px bg-[#414143]\" />\n          )}\n          {cadSettings.onshapeLink && (\n            <Tooltip delay={200}>\n              <TooltipTrigger asChild>\n                <button\n                  onClick={handleOpenOnshape}\n                  className=\"h-10 w-10 cursor-pointer text-white/70 hover:bg-[#313133] hover:text-white flex items-center justify-center transition-colors z-10\"\n                  style={{ pointerEvents: \"auto\" }}\n                  type=\"button\"\n                  aria-label=\"Open in Onshape\"\n                >\n                  <Icon icon=\"arcticons:onshape\" className=\"h-4 w-4\" />\n                </button>\n              </TooltipTrigger>\n              <TooltipContent>\n                <Icon icon=\"arcticons:onshape\" className=\"h-4 w-4 inline mr-1.5\" />\n                Open in Onshape\n              </TooltipContent>\n            </Tooltip>\n          )}\n        </div>\n      )}\n    </div>\n  );\n});\n\ninterface FlashCard {\n  id: string;\n  title: string;\n  content: string;\n  createdAt: string;\n  updatedAt: string;\n}\n\nexport const ExplorerCardNodeView: React.FC<NodeViewProps> = ({\n  node,\n  editor,\n  updateAttributes,\n}) => {\n  const readEditorAttrs = () =>\n    (editor as any)?.options?.editorProps?.attributes || {};\n  const editorAttrs = readEditorAttrs();\n\n  // Check if editor is in read-only mode\n  const isReadOnly = !editor.isEditable;\n\n  // Get the upload function from the parent editor's extension options\n\n  const [organizationId, setOrganizationId] = useState<string | null>(\n    node.attrs.organizationId || editorAttrs[\"data-organization-id\"] || null\n  );\n  const [productId, setProductId] = useState<string | null>(\n    node.attrs.productId || editorAttrs[\"data-product-id\"] || null\n  );\n  const containerRef = React.useRef<HTMLDivElement>(null);\n\n  const [flashCards, setFlashCards] = useState<FlashCard[]>([]);\n  const [isActive, setIsActive] = useState<boolean>(false);\n\n\n  const editorRef = useRef<any>(null);\n\n  // Use unified side menu (with safety check for provider availability)\n  let openSideMenu: ((data: any) => void) | undefined;\n  let registerSaveHandler: ((nodeId: string, handler: (data: any) => void) => void) | undefined;\n  let unregisterSaveHandler: ((nodeId: string) => void) | undefined;\n\n  try {\n    const sideMenuContext = useUnifiedSideMenu();\n    openSideMenu = sideMenuContext.openSideMenu;\n    registerSaveHandler = sideMenuContext.registerSaveHandler;\n    unregisterSaveHandler = sideMenuContext.unregisterSaveHandler;\n  } catch (error) {\n    // Provider not available - side menu features will be disabled\n    console.warn('[ExplorerCardNodeView] UnifiedSideMenuProvider not available. Side menu features disabled.');\n  }\n\n  // Get product data from context, or fetch it ourselves if not available\n  const { productData: contextProductData } = useProductDataContext();\n  const localProductData = useProductData(organizationId, productId);\n\n  // Use context data if available, otherwise use local data\n  const productData = contextProductData || localProductData;\n\n  // Use centralized data or fallback to empty states\n  const htmlContent = productData?.htmlContent || null;\n  const partsTree = productData?.partsTree || [];\n  const productName = productData?.productName || \"\";\n  const isLoading = productData?.isLoading || false;\n  const isLoadingContent = productData?.isLoadingContent || false;\n  const error = productData?.error || null;\n\n\n  // Flash card management functions\n  const handleCreateFlashCard = () => {\n    if (!openSideMenu) {\n      console.warn('[ExplorerNode] Cannot create flash card - side menu not available');\n      return;\n    }\n    console.log('[ExplorerNode] handleCreateFlashCard called, current flashCards:', flashCards);\n    const sideMenuData: ExplorerSideMenuData = {\n      mode: 'explorer',\n      flashCards,\n      editingCard: null,\n      organizationId: organizationId || undefined,\n      productId: productId || undefined,\n    };\n    console.log('[ExplorerNode] Opening side menu with sideMenuData:', sideMenuData);\n    openSideMenu(sideMenuData);\n  };\n\n  const handleEditFlashCard = (cardId: string) => {\n    if (!openSideMenu) {\n      console.warn('[ExplorerNode] Cannot edit flash card - side menu not available');\n      return;\n    }\n    const card = flashCards.find(c => c.id === cardId);\n    console.log('[ExplorerNode] Edit card clicked:', cardId, 'Found card:', card);\n    if (card) {\n      const sideMenuData: ExplorerSideMenuData = {\n        mode: 'explorer',\n        flashCards,\n        editingCard: card,\n        organizationId: organizationId || undefined,\n        productId: productId || undefined,\n      };\n      console.log('[ExplorerNode] Opening side menu with data:', sideMenuData);\n      openSideMenu(sideMenuData);\n    }\n  };\n\n  const handleDeleteFlashCard = (cardId: string) => {\n    const newCards = flashCards.filter(c => c.id !== cardId);\n    setFlashCards(newCards);\n    updateAttributes?.({ flashCards: newCards });\n\n    // updateAttributes should automatically mark the document as dirty\n    // This ensures the main document save will include the updated flash cards\n  };\n\n  // Save handler for unified side menu - FIXED VERSION\n  const handleSaveFlashCard = useCallback(async (cardData: any) => {\n    console.log('[ExplorerNode] Save called with data:', cardData);\n    console.log('[ExplorerNode] Current node.attrs.flashCards:', node.attrs.flashCards);\n    const { title, content, editingCard: existingCard } = cardData;\n\n    try {\n      if (existingCard) {\n        // Update existing card\n        console.log('[ExplorerNode] Updating existing card:', existingCard.id);\n        const updatedCards = (node.attrs.flashCards || []).map((card: FlashCard) =>\n          card.id === existingCard.id\n            ? { ...card, title, content, updatedAt: new Date().toISOString() }\n            : card\n        );\n        updateAttributes?.({ flashCards: updatedCards });\n        console.log('[ExplorerNode] Updated cards:', updatedCards);\n      } else {\n        // Create new card\n        console.log('[ExplorerNode] Creating new card');\n        const newCard: FlashCard = {\n          id: `card-${Date.now()}`,\n          title,\n          content,\n          createdAt: new Date().toISOString(),\n          updatedAt: new Date().toISOString()\n        };\n\n        const updatedCards = [...(node.attrs.flashCards || []), newCard];\n        updateAttributes?.({ flashCards: updatedCards });\n        console.log('[ExplorerNode] Created new card:', newCard);\n      }\n    } catch (error) {\n      console.error('Error saving flash card:', error);\n      throw error; // Re-throw to let unified side menu handle the error\n    }\n  }, [node.attrs.flashCards, updateAttributes]); // Use node.attrs for fresh data, let useEffect sync state\n\n  // CAD design handlers\n  const cadSettings = node.attrs.cadSettings || {\n    allowModelDownloads: false,\n    onshapeLink: null,\n    paymentLink: null,\n    collectPaymentForStepFile: false\n  };\n\n  const stepFileUrl = productData?.files?.stepfile?.s3_url || null;\n  const stepFileSize = productData?.files?.stepfile?.size || null;\n\n  const handleOpenCadDesignSetup = useCallback(() => {\n    if (!openSideMenu) return;\n    const sideMenuData: any = {\n      mode: 'cad-design',\n      cadSettings: cadSettings,\n      stepFileUrl: stepFileUrl,\n      stepFileSize: stepFileSize\n    };\n    openSideMenu(sideMenuData);\n  }, [openSideMenu, cadSettings, stepFileUrl, stepFileSize]);\n\n  const handleSaveCadSettings = useCallback(async (cadData: any) => {\n    console.log('[ExplorerNode] CAD save called with data:', cadData);\n    const { cadSettings: newCadSettings } = cadData;\n    console.log('[ExplorerNode] Updating CAD settings to:', newCadSettings);\n    console.log('[ExplorerNode] Current node.attrs.cadSettings BEFORE update:', node.attrs.cadSettings);\n\n    // Use updateAttributes to update the node\n    updateAttributes?.({ cadSettings: newCadSettings });\n\n    // Force editor to recognize the change and trigger onChange\n    // This ensures the document is marked as modified and persistence is triggered\n    editor.commands.focus();\n\n    console.log('[ExplorerNode] CAD settings updated and editor notified');\n    // Note: node.attrs.cadSettings will update on next render, not immediately\n    setTimeout(() => {\n      console.log('[ExplorerNode] node.attrs.cadSettings AFTER update:', node.attrs.cadSettings);\n    }, 100);\n  }, [updateAttributes, editor, node.attrs.cadSettings]);\n\n  const handleDownloadStepFile = useCallback(async (e: React.MouseEvent) => {\n    e.stopPropagation();\n    if (!stepFileUrl) return;\n\n    // Check payment requirement\n    if (cadSettings?.collectPaymentForStepFile && cadSettings?.paymentLink) {\n      window.open(cadSettings.paymentLink, '_blank', 'noopener,noreferrer');\n      return;\n    }\n\n    try {\n\n      // Call API to generate pre-signed URL (2-hour expiry)\n      const response = await fetch('/api/generate-download-url', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({\n          s3Url: stepFileUrl,\n          organizationId,\n          productId\n        })\n      });\n\n      if (!response.ok) {\n        const errorData = await response.json();\n        throw new Error(errorData.error || `Failed to generate download URL: ${response.status}`);\n      }\n\n      const { downloadUrl, filename } = await response.json();\n\n      // Trigger browser download using signed URL\n      const link = document.createElement('a');\n      link.href = downloadUrl;\n      link.download = filename;\n      // Don't use target='_blank' - it tries to open in new tab instead of downloading\n      document.body.appendChild(link);\n      link.click();\n      document.body.removeChild(link);\n\n      console.log('[ExplorerNode] STEP file download initiated:', filename);\n    } catch (error) {\n      console.error('[ExplorerNode] Error downloading STEP file:', error);\n      alert('Failed to download STEP file. Please try again.');\n    }\n  }, [stepFileUrl, cadSettings, organizationId, productId]);\n\n  const handleOpenOnshape = useCallback((e: React.MouseEvent) => {\n    e.stopPropagation();\n    if (cadSettings?.onshapeLink) {\n      window.open(cadSettings.onshapeLink, '_blank', 'noopener,noreferrer');\n    }\n  }, [cadSettings]);\n\n  // Register save handler with unified side menu\n  useEffect(() => {\n    if (!registerSaveHandler || !unregisterSaveHandler) {\n      return;\n    }\n    const nodeId = `explorer-${node.attrs.id || 'default'}`;\n    registerSaveHandler(nodeId, handleSaveFlashCard);\n\n    return () => {\n      unregisterSaveHandler(nodeId);\n    };\n  }, [registerSaveHandler, unregisterSaveHandler, handleSaveFlashCard, node.attrs.id]);\n\n  // Register CAD save handler\n  useEffect(() => {\n    if (!registerSaveHandler || !unregisterSaveHandler) {\n      return;\n    }\n    const nodeId = `explorer-cad-${node.attrs.id || 'default'}`;\n    registerSaveHandler(nodeId, handleSaveCadSettings);\n\n    return () => {\n      unregisterSaveHandler(nodeId);\n    };\n  }, [registerSaveHandler, unregisterSaveHandler, handleSaveCadSettings, node.attrs.id]);\n\n  // Listen for custom event to add notes from drag context menu\n  useEffect(() => {\n    const handleAddNoteEvent = (event: CustomEvent) => {\n      const { nodeId } = event.detail;\n      if (nodeId === node.attrs.id) {\n        handleCreateFlashCard();\n      }\n    };\n\n    window.addEventListener('explorer-add-note' as any, handleAddNoteEvent);\n\n    return () => {\n      window.removeEventListener('explorer-add-note' as any, handleAddNoteEvent);\n    };\n  }, [node.attrs.id, handleCreateFlashCard]);\n\n  // sync with editor level state change\n  useEffect(() => {\n    const onOptionsChanged = (payload: any) => {\n      const latest = readEditorAttrs();\n\n      // Apply editor-level defaults ONLY when this node does NOT have per-node overrides\n      if (\n        !node.attrs.productId &&\n        node.attrs.productId !== latest[\"data-product-id\"]\n      ) {\n        setProductId(latest[\"data-product-id\"]);\n        updateAttributes?.({ productId: latest[\"data-product-id\"] });\n      }\n      if (\n        !node.attrs.organizationId &&\n        editorAttrs[\"data-organization-id\"] !== latest[\"data-organization-id\"]\n      ) {\n        setOrganizationId(latest[\"data-organization-id\"]);\n        updateAttributes?.({ organizationId: latest[\"data-organization-id\"] });\n      }\n    };\n\n    (editor as any)?.on?.(\"tnkr:optionsChanged\", onOptionsChanged);\n\n    return () => {\n      (editor as any)?.off?.(\"tnkr:optionsChanged\", onOptionsChanged);\n    };\n  }, [editor]);\n\n    // CRITICAL: Sync flash cards from node attributes\n  // This ensures flashCards state is properly initialized after reload\n  useEffect(() => {\n    if (node.attrs.flashCards && Array.isArray(node.attrs.flashCards)) {\n      setFlashCards(node.attrs.flashCards);\n    }\n  }, [node.attrs.flashCards]);\n\n\n \n\n\n  if (!organizationId || !productId) {\n    return (\n      <NodeViewWrapper data-drag-handle>\n        <div\n          className=\"relative w-full  max-w-[90%] rounded-[32px] overflow-hidden border border-[#313133] flex items-center justify-center text-white/60 select-none\"\n          style={{ height: \"calc(100vh - 12rem)\" }}\n        >\n          <div className=\"text-center space-y-4\">\n            <Icon\n              icon=\"mdi:cube-outline\"\n              className=\"w-12 h-12 text-white/40 mx-auto\"\n            />\n            <div>\n              <p className=\"text-white/80 font-medium text-[14px]\">\n                3D Explorer requires Product ID and Organization ID\n              </p>\n              <p className=\"text-white/50 text-[14px]\">\n                These should be provided from the editor configuration.\n              </p>\n            </div>\n          </div>\n        </div>\n      </NodeViewWrapper>\n    );\n  }\n\n  // Handle click to activate the explorer card\n  const handleCardClick = () => {\n    if (!isActive) {\n      setIsActive(true);\n    }\n  };\n\n  // Handle mouse leave to deactivate\n  const handleMouseLeave = () => {\n    setIsActive(false);\n  };\n\n  return (\n    <NodeViewWrapper data-drag-handle>\n      <div\n        ref={containerRef}\n        onClick={handleCardClick}\n        onMouseLeave={handleMouseLeave}\n        className={`relative w-full ${isReadOnly ? '' : 'max-w-[90%]'} rounded-[32px] select-none mt-4`}\n        style={{\n          height: \"calc(100vh - 12rem)\",\n          overflow: \"hidden\",\n          border: `2px solid ${isActive ? 'var(--tnkr-primary)' : '#313133'}`,\n          transition: 'border-color 0.2s ease'\n        }}\n      >\n          {(isLoading || isLoadingContent) ? (\n            <div className=\"absolute inset-0 flex items-center justify-center\">\n              <div className=\"text-center space-y-4\">\n                <div\n                  className=\"w-8 h-8 border-4 border-white/20 rounded-full animate-spin mx-auto\"\n                  style={{ borderTopColor: 'var(--tnkr-primary)' }}\n                />\n                <p className=\"text-white/60 text-[14px]\">Loading 3D model...</p>\n              </div>\n            </div>\n          ) : error ? (\n            <div className=\"absolute inset-0 flex items-center justify-center\">\n              <div className=\"text-center space-y-4\">\n                <Icon\n                  icon=\"mdi:alert-circle-outline\"\n                  className=\"w-12 h-12 text-red-400 mx-auto\"\n                />\n                <div>\n                  <p className=\"text-red-400 font-medium text-[14px]\">\n                    Error loading 3D model\n                  </p>\n                  <p className=\"text-white/50 text-[14px]\">{error}</p>\n                </div>\n              </div>\n            </div>\n          ) : (\n            <ExplorerModelViewCoreProvider partsTree={partsTree}>\n              <div className=\"w-full h-full relative\">\n                {/* Inactive overlay - blocks interactions until card is clicked */}\n                {!isActive && (\n                  <div\n                    className=\"absolute inset-0 z-50 cursor-pointer\"\n                    onClick={handleCardClick}\n                  />\n                )}\n                <div\n                  className=\"w-full h-full\"\n                  style={{ pointerEvents: isActive ? 'auto' : 'none' }}\n                >\n                  <ExplorerCardContent\n                    htmlContent={htmlContent}\n                    partsTree={partsTree}\n                    productName={productName}\n                    containerRef={containerRef}\n                    flashCards={flashCards}\n                    onEditCard={handleEditFlashCard}\n                    onDeleteCard={handleDeleteFlashCard}\n                    onCreateCard={handleCreateFlashCard}\n                  isReadOnly={isReadOnly}\n                  showPartsTree={node.attrs.showPartsTree ?? true}\n                  cadSettings={cadSettings}\n                  stepFileUrl={stepFileUrl}\n                  handleOpenCadDesignSetup={handleOpenCadDesignSetup}\n                  handleDownloadStepFile={handleDownloadStepFile}\n                  handleOpenOnshape={handleOpenOnshape}\n                />\n                </div>\n              </div>\n            </ExplorerModelViewCoreProvider>\n          )}\n        </div>\n      {/* Hidden content required for non-atom node structure */}\n      <NodeViewContent as=\"div\" style={{ display: 'none', pointerEvents: 'none' }} />\n    </NodeViewWrapper>\n  );\n};\n","import { Node, mergeAttributes } from '@tiptap/core'\nimport { ReactNodeViewRenderer } from '@tiptap/react'\nimport { ExplorerCardNodeView } from './explorer-card-node-view'\n\ndeclare module '@tiptap/core' {\n  interface Commands<ReturnType> {\n    explorerCard: {\n      /**\n       * Insert an explorer card with ModelView\n       */\n      insertExplorerCard: () => ReturnType\n    }\n  }\n}\n\nexport const ExplorerCard = Node.create({\n  name: 'explorerCard',\n\n  group: 'block',\n\n  content: 'paragraph?',\n\n  isolating: true,\n\n  addAttributes() {\n    return {\n      id: {\n        default: null,\n        parseHTML: element => element.getAttribute('data-id'),\n        renderHTML: attributes => {\n          if (!attributes.id) {\n            return {}\n          }\n          return { 'data-id': attributes.id }\n        }\n      },\n      productId: {\n        default: null,\n        parseHTML: element => element.getAttribute('data-product-id'),\n        renderHTML: attributes => {\n          if (!attributes.productId) {\n            return {}\n          }\n          return { 'data-product-id': attributes.productId }\n        }\n      },\n      organizationId: {\n        default: null,\n        parseHTML: element => element.getAttribute('data-organization-id'),\n        renderHTML: attributes => {\n          if (!attributes.organizationId) {\n            return {}\n          }\n          return { 'data-organization-id': attributes.organizationId }\n        }\n      },\n      flashCards: {\n        default: [],\n        parseHTML: element => {\n          const flashCardsAttr = element.getAttribute('data-flash-cards');\n          if (flashCardsAttr) {\n            try {\n              return JSON.parse(flashCardsAttr);\n            } catch {\n              return [];\n            }\n          }\n          return [];\n        },\n        renderHTML: attributes => {\n          if (!attributes.flashCards || attributes.flashCards.length === 0) {\n            return {}\n          }\n          return { 'data-flash-cards': JSON.stringify(attributes.flashCards) }\n        }\n      },\n      showPartsTree: {\n        default: true,\n        parseHTML: element => {\n          const showPartsTreeAttr = element.getAttribute('data-show-parts-tree');\n          return showPartsTreeAttr === 'false' ? false : true;\n        },\n        renderHTML: attributes => {\n          return { 'data-show-parts-tree': attributes.showPartsTree ? 'true' : 'false' }\n        }\n      },\n      cadSettings: {\n        default: {\n          allowModelDownloads: false,\n          onshapeLink: null,\n          paymentLink: null,\n          collectPaymentForStepFile: false\n        },\n        parseHTML: element => {\n          const cadSettingsAttr = element.getAttribute('data-cad-settings');\n          if (cadSettingsAttr) {\n            try {\n              return JSON.parse(cadSettingsAttr);\n            } catch {\n              return { allowModelDownloads: false, onshapeLink: null, paymentLink: null, collectPaymentForStepFile: false };\n            }\n          }\n          return { allowModelDownloads: false, onshapeLink: null, paymentLink: null, collectPaymentForStepFile: false };\n        },\n        renderHTML: attributes => {\n          if (!attributes.cadSettings) return {}\n          return { 'data-cad-settings': JSON.stringify(attributes.cadSettings) }\n        }\n      }\n    }\n  },\n\n  parseHTML() {\n    return [{ tag: 'div[data-type=\"explorer-card\"]' }]\n  },\n\n  renderHTML({ HTMLAttributes }) {\n    return ['div', mergeAttributes(HTMLAttributes, { 'data-type': 'explorer-card' })]\n  },\n\n  addNodeView() {\n    return ReactNodeViewRenderer(ExplorerCardNodeView)\n  },\n\n  addCommands() {\n    return {\n      insertExplorerCard: () => ({ commands, editor }) => {\n        // Get organizationId and productId from editor attributes\n        const editorAttrs = (editor as any)?.options?.editorProps?.attributes || {};\n        const organizationId = editorAttrs[\"data-organization-id\"] || null;\n        const productId = editorAttrs[\"data-product-id\"] || null;\n\n        return commands.insertContent({\n          type: this.name,\n          attrs: {\n            id: `explorer-${Date.now()}`,\n            flashCards: [],\n            organizationId,\n            productId\n          },\n          content: [\n            {\n              type: 'paragraph',\n            },\n          ],\n        })\n      },\n    }\n  },\n\n  addKeyboardShortcuts() {\n    return {\n      'Mod-Shift-e': () => this.editor.commands.insertExplorerCard(),\n    }\n  },\n})","import * as React from \"react\";\nimport { Editor } from \"@tiptap/core\";\n\ninterface TableCellMenuProps {\n  tableRef: React.RefObject<HTMLTableElement>;\n  editor: Editor;\n  activeCell: { row: number; col: number } | null;\n  onInsertRow: (index: number, position: \"above\" | \"below\") => void;\n  onInsertColumn: (index: number, position: \"left\" | \"right\") => void;\n  onDeleteRow: (index: number) => void;\n  onDeleteColumn: (index: number) => void;\n  onClearRow: (index: number) => void;\n  onClearColumn: (index: number) => void;\n  onClearCell: (row: number, col: number) => void;\n  onDuplicateRow: (index: number) => void;\n  onDuplicateColumn: (index: number) => void;\n  onMenuStateChange?: (isOpen: boolean) => void;\n}\n\n/**\n * TableCellMenu component - Simplified version\n *\n * Menu icons are now rendered directly inside cells in bom-node-view.tsx\n * This component is kept for potential future menu popup functionality\n */\nexport function TableCellMenu({\n  tableRef,\n  editor,\n  activeCell,\n  onInsertRow,\n  onInsertColumn,\n  onDeleteRow,\n  onDeleteColumn,\n  onClearRow,\n  onClearColumn,\n  onClearCell,\n  onDuplicateRow,\n  onDuplicateColumn,\n  onMenuStateChange,\n}: TableCellMenuProps) {\n  // Icons are now rendered inside cells, so this component just returns null\n  // Menu popup functionality can be added here in the future if needed\n  return null;\n}","import * as React from \"react\";\nimport { Plus } from \"lucide-react\";\n\ninterface TablePlusButtonsProps {\n  tableRef: React.RefObject<HTMLTableElement>;\n  containerRef: React.RefObject<HTMLDivElement>;\n  onAddRow: () => void;\n  onAddColumn: () => void;\n  disabled?: boolean;\n}\n\nexport function TablePlusButtons({\n  tableRef,\n  containerRef,\n  onAddRow,\n  onAddColumn,\n  disabled = false,\n}: TablePlusButtonsProps) {\n  const [showRowButton, setShowRowButton] = React.useState(false);\n  const [showColumnButton, setShowColumnButton] = React.useState(false);\n\n  const handleAddRowClick = () => {\n    onAddRow();\n    // Hide the button immediately after adding\n    setShowRowButton(false);\n  };\n\n  const handleAddColumnClick = () => {\n    onAddColumn();\n    // Hide the button immediately after adding\n    setShowColumnButton(false);\n  };\n\n  React.useEffect(() => {\n    if (!tableRef.current || !containerRef.current) return;\n\n    const table = tableRef.current;\n    const container = containerRef.current;\n    const HOVER_ZONE = 30; // Distance from edge to show button\n\n    const handleMouseMove = (e: MouseEvent) => {\n      if (disabled) {\n        setShowRowButton(false);\n        setShowColumnButton(false);\n        return;\n      }\n\n      // Check if mouse is over any context menu elements\n      const target = e.target as HTMLElement;\n      if (target.closest('.table-cell-menu-popup') || target.closest('.table-cell-menu-icon')) {\n        setShowRowButton(false);\n        setShowColumnButton(false);\n        return;\n      }\n\n      const tableRect = table.getBoundingClientRect();\n      const containerRect = container.getBoundingClientRect();\n\n      // For the row button, use table's actual bottom\n      const nearBottom = e.clientY > tableRect.bottom &&\n                         e.clientY < tableRect.bottom + HOVER_ZONE &&\n                         e.clientX >= containerRect.left &&\n                         e.clientX <= containerRect.right;\n\n      // For the column button, use container's visible right edge instead of table's right\n      // This ensures the button appears at the edge of the visible area\n      const visibleRight = Math.min(tableRect.right, containerRect.right);\n      const nearRight = e.clientX > visibleRight &&\n                       e.clientX < visibleRight + HOVER_ZONE &&\n                       e.clientY >= tableRect.top &&\n                       e.clientY <= tableRect.bottom;\n\n      setShowRowButton(nearBottom);\n      setShowColumnButton(nearRight);\n    };\n\n    const handleMouseLeave = (e: MouseEvent) => {\n      const tableRect = table.getBoundingClientRect();\n      const containerRect = container.getBoundingClientRect();\n      const visibleRight = Math.min(tableRect.right, containerRect.right);\n\n      // Check if mouse really left the hover zones\n      if (e.clientX < containerRect.left - HOVER_ZONE ||\n          e.clientX > visibleRight + HOVER_ZONE ||\n          e.clientY < tableRect.top - HOVER_ZONE ||\n          e.clientY > tableRect.bottom + HOVER_ZONE) {\n        setShowRowButton(false);\n        setShowColumnButton(false);\n      }\n    };\n\n    // Listen to document for wider hover detection\n    document.addEventListener(\"mousemove\", handleMouseMove);\n    document.addEventListener(\"mouseleave\", handleMouseLeave);\n\n    return () => {\n      document.removeEventListener(\"mousemove\", handleMouseMove);\n      document.removeEventListener(\"mouseleave\", handleMouseLeave);\n    };\n  }, [tableRef, containerRef]);\n\n  if (!tableRef.current || !containerRef.current) return null;\n\n  const tableRect = tableRef.current.getBoundingClientRect();\n  const containerRect = containerRef.current.getBoundingClientRect();\n\n  // Calculate visible dimensions\n  const visibleWidth = Math.min(tableRect.width, containerRect.width);\n  const visibleRight = Math.min(tableRect.right, containerRect.right);\n\n  return (\n    <>\n      {/* Bottom Plus Button (Add Row) */}\n      {showRowButton && (\n        <button\n          onClick={handleAddRowClick}\n          style={{\n            position: \"fixed\",\n            left: `${containerRect.left}px`,\n            top: `${tableRect.bottom + 2}px`,\n            width: `${visibleWidth}px`,\n            height: \"24px\",\n            backgroundColor: \"transparent\",\n            border: \"none\",\n            borderRadius: \"4px\",\n            cursor: \"pointer\",\n            display: \"flex\",\n            alignItems: \"center\",\n            justifyContent: \"center\",\n            zIndex: 10,\n            opacity: 0.8,\n            transition: \"opacity 0.2s\",\n            marginTop: \"4px\",\n          }}\n          onMouseEnter={(e) => {\n            e.currentTarget.style.backgroundColor = \"#242425\";\n            e.currentTarget.style.opacity = \"1\";\n          }}\n          onMouseLeave={(e) => {\n            e.currentTarget.style.backgroundColor = \"transparent\";\n            e.currentTarget.style.opacity = \"0.8\";\n          }}\n        >\n          <Plus size={16} color=\"white\" />\n        </button>\n      )}\n\n      {/* Right Plus Button (Add Column) */}\n      {showColumnButton && (\n        <button\n          onClick={handleAddColumnClick}\n          style={{\n            position: \"fixed\",\n            left: `${visibleRight + 2}px`,\n            top: `${tableRect.top}px`,\n            width: \"24px\",\n            height: `${tableRect.height}px`,\n            backgroundColor: \"transparent\",\n            border: \"none\",\n            borderRadius: \"4px\",\n            cursor: \"pointer\",\n            display: \"flex\",\n            alignItems: \"center\",\n            justifyContent: \"center\",\n            zIndex: 10,\n            opacity: 0.8,\n            transition: \"opacity 0.2s\",\n            marginLeft: \"4px\",\n          }}\n          onMouseEnter={(e) => {\n            e.currentTarget.style.backgroundColor = \"#242425\";\n            e.currentTarget.style.opacity = \"1\";\n          }}\n          onMouseLeave={(e) => {\n            e.currentTarget.style.backgroundColor = \"transparent\";\n            e.currentTarget.style.opacity = \"0.8\";\n          }}\n        >\n          <Plus size={16} color=\"white\" />\n        </button>\n      )}\n    </>\n  );\n}","import { useCallback, useMemo } from 'react'\nimport type { Editor } from '@tiptap/react'\n\nexport interface UseTableReturn {\n  // Row operations\n  addRowAbove: () => void\n  addRowBelow: () => void\n  deleteRow: () => void\n  clearRowContent: () => void\n\n  // Column operations\n  addColumnLeft: () => void\n  addColumnRight: () => void\n  deleteColumn: () => void\n  clearColumnContent: () => void\n\n  // Table operations\n  deleteTable: () => void\n\n  // Table state\n  isInTable: boolean\n  canAddRowAbove: boolean\n  canAddRowBelow: boolean\n  canAddColumnLeft: boolean\n  canAddColumnRight: boolean\n  canDeleteRow: boolean\n  canDeleteColumn: boolean\n}\n\nexport const useTable = (editor: Editor | null): UseTableReturn => {\n  // Check if we're currently in a table\n  const isInTable = useMemo(() => {\n    if (!editor) return false\n\n    // Check for direct table\n    if (editor.isActive('table')) return true\n\n    // Check if we're inside a BOM node's table or other custom nodes containing tables\n    const { selection } = editor.state\n    const { $from } = selection\n\n    // Walk up the document tree to check for tables or nodes containing tables\n    for (let depth = $from.depth; depth >= 0; depth--) {\n      const node = $from.node(depth)\n\n      // Check if we're directly in a table\n      if (node.type.name === 'table') return true\n\n      // Check if we're in a BOM node that contains a table\n      if (node.type.name === 'bomNode') {\n        // BOM nodes should always contain a table as their first child\n        const firstChild = node.content.firstChild\n        return firstChild?.type.name === 'table'\n      }\n    }\n\n    return false\n  }, [editor])\n\n  // Row operations\n  const addRowAbove = useCallback(() => {\n    if (!editor || !isInTable) return\n    editor.chain().focus().addRowBefore().run()\n  }, [editor, isInTable])\n\n  const addRowBelow = useCallback(() => {\n    if (!editor || !isInTable) return\n    editor.chain().focus().addRowAfter().run()\n  }, [editor, isInTable])\n\n  const deleteRow = useCallback(() => {\n    if (!editor || !isInTable) return\n    editor.chain().focus().deleteRow().run()\n  }, [editor, isInTable])\n\n  const clearRowContent = useCallback(() => {\n    if (!editor || !isInTable) return\n\n    // Get current selection\n    const { selection } = editor.state\n    const { $from } = selection\n\n    // Find the table row\n    for (let depth = $from.depth; depth >= 0; depth--) {\n      const node = $from.node(depth)\n      if (node.type.name === 'tableRow') {\n        const rowStart = $from.before(depth)\n\n        // Clear content of all cells in the row\n        node.forEach((cellNode, offset) => {\n          if (cellNode.type.name === 'tableCell' || cellNode.type.name === 'tableHeader') {\n            const cellStart = rowStart + offset + 1\n            const cellEnd = cellStart + cellNode.content.size\n            editor.chain()\n              .focus()\n              .setTextSelection({ from: cellStart, to: cellEnd })\n              .deleteSelection()\n              .run()\n          }\n        })\n        break\n      }\n    }\n  }, [editor, isInTable])\n\n  // Column operations\n  const addColumnLeft = useCallback(() => {\n    if (!editor) return\n    // For BOM nodes, we bypass the isInTable check since it might not work correctly\n    const { selection } = editor.state\n    const { $from } = selection\n\n    // Check if we're in a BOM node\n    let inBomNode = false\n    for (let depth = $from.depth; depth >= 0; depth--) {\n      if ($from.node(depth).type.name === 'bomNode') {\n        inBomNode = true\n        break\n      }\n    }\n\n    if (!inBomNode && !isInTable) return\n    editor.chain().focus().addColumnBefore().run()\n  }, [editor, isInTable])\n\n  const addColumnRight = useCallback(() => {\n    if (!editor) return\n    // For BOM nodes, we bypass the isInTable check since it might not work correctly\n    const { selection } = editor.state\n    const { $from } = selection\n\n    // Check if we're in a BOM node\n    let inBomNode = false\n    for (let depth = $from.depth; depth >= 0; depth--) {\n      if ($from.node(depth).type.name === 'bomNode') {\n        inBomNode = true\n        break\n      }\n    }\n\n    if (!inBomNode && !isInTable) return\n    editor.chain().focus().addColumnAfter().run()\n  }, [editor, isInTable])\n\n  const deleteColumn = useCallback(() => {\n    if (!editor || !isInTable) return\n    editor.chain().focus().deleteColumn().run()\n  }, [editor, isInTable])\n\n  const clearColumnContent = useCallback(() => {\n    if (!editor || !isInTable) return\n\n    // Get current selection\n    const { selection } = editor.state\n    const { $from } = selection\n\n    let currentCol = 0\n    let found = false\n\n    // Find current column index\n    for (let depth = $from.depth; depth >= 0; depth--) {\n      const node = $from.node(depth)\n      if (node.type.name === 'tableRow') {\n        node.forEach((cellNode, offset) => {\n          if (found) return\n          const cellStart = $from.before(depth) + offset + 1\n          if ($from.pos >= cellStart && $from.pos <= cellStart + cellNode.content.size) {\n            found = true\n            return\n          }\n          currentCol++\n        })\n        break\n      }\n    }\n\n    if (!found) return\n\n    // Find the table and clear all cells in the current column\n    for (let depth = $from.depth; depth >= 0; depth--) {\n      const node = $from.node(depth)\n      if (node.type.name === 'table') {\n        node.forEach((rowNode, rowOffset) => {\n          if (rowNode.type.name === 'tableRow') {\n            let colIndex = 0\n            rowNode.forEach((cellNode, cellOffset) => {\n              if (colIndex === currentCol && (cellNode.type.name === 'tableCell' || cellNode.type.name === 'tableHeader')) {\n                const cellStart = $from.before(depth) + rowOffset + cellOffset + 2\n                const cellEnd = cellStart + cellNode.content.size\n                editor.chain()\n                  .focus()\n                  .setTextSelection({ from: cellStart, to: cellEnd })\n                  .deleteSelection()\n                  .run()\n              }\n              colIndex++\n            })\n          }\n        })\n        break\n      }\n    }\n  }, [editor, isInTable])\n\n  // Table operations\n  const deleteTable = useCallback(() => {\n    if (!editor || !isInTable) return\n    editor.chain().focus().deleteTable().run()\n  }, [editor, isInTable])\n\n  // Capability checks\n  const canAddRowAbove = useMemo(() => {\n    if (!editor || !isInTable) return false\n    return editor.can().addRowBefore()\n  }, [editor, isInTable])\n\n  const canAddRowBelow = useMemo(() => {\n    if (!editor || !isInTable) return false\n    return editor.can().addRowAfter()\n  }, [editor, isInTable])\n\n  const canAddColumnLeft = useMemo(() => {\n    if (!editor || !isInTable) return false\n    return editor.can().addColumnBefore()\n  }, [editor, isInTable])\n\n  const canAddColumnRight = useMemo(() => {\n    if (!editor || !isInTable) return false\n    return editor.can().addColumnAfter()\n  }, [editor, isInTable])\n\n  const canDeleteRow = useMemo(() => {\n    if (!editor || !isInTable) return false\n    return editor.can().deleteRow()\n  }, [editor, isInTable])\n\n  const canDeleteColumn = useMemo(() => {\n    if (!editor || !isInTable) return false\n    return editor.can().deleteColumn()\n  }, [editor, isInTable])\n\n  return {\n    // Row operations\n    addRowAbove,\n    addRowBelow,\n    deleteRow,\n    clearRowContent,\n\n    // Column operations\n    addColumnLeft,\n    addColumnRight,\n    deleteColumn,\n    clearColumnContent,\n\n    // Table operations\n    deleteTable,\n\n    // Table state\n    isInTable,\n    canAddRowAbove,\n    canAddRowBelow,\n    canAddColumnLeft,\n    canAddColumnRight,\n    canDeleteRow,\n    canDeleteColumn,\n  }\n}","export type ColumnInputType = 'text' | 'number' | 'quantity' | 'link' | 'stl-download' | 'region'\n\nexport interface ColumnConfig {\n  type: ColumnInputType\n  unit?: string\n  placeholder?: string\n  validation?: (value: string) => boolean\n}\n\n// Smart column configuration system\nexport const COLUMN_CONFIGS: Record<string, ColumnConfig> = {\n  // Text fields\n  'PartName': {\n    type: 'text',\n    placeholder: 'Enter part name'\n  },\n  'Notes': {\n    type: 'text',\n    placeholder: 'Add notes'\n  },\n  'Supports': {\n    type: 'text',\n    placeholder: 'Yes/No'\n  },\n  'Infill Type': {\n    type: 'text',\n    placeholder: 'e.g., 20%, 50%'\n  },\n\n  // Region selector\n  'Region': {\n    type: 'region',\n    placeholder: 'Add a region'\n  },\n  'Sourcing Region': {\n    type: 'region',\n    placeholder: 'Add a region'\n  },\n  'Manufacturing Region': {\n    type: 'region',\n    placeholder: 'Add a region'\n  },\n\n  // Numeric fields\n  'Mass': {\n    type: 'number',\n    unit: 'kg',\n    placeholder: '0.0'\n  },\n\n  // Quantity fields (with increment/decrement)\n  'Quantity': {\n    type: 'quantity',\n    placeholder: '1'\n  },\n\n  // Link fields\n  'Sourcing Link': {\n    type: 'link',\n    placeholder: 'https://example.com',\n    validation: (value: string) => {\n      if (!value) return true // Empty is valid\n      try {\n        new URL(value)\n        return true\n      } catch {\n        return false\n      }\n    }\n  },\n  'Data Sheet URL': {\n    type: 'link',\n    placeholder: 'https://example.com/datasheet.pdf',\n    validation: (value: string) => {\n      if (!value) return true\n      try {\n        new URL(value)\n        return true\n      } catch {\n        return false\n      }\n    }\n  },\n  'Product Link': {\n    type: 'link',\n    placeholder: 'https://product-catalog.com/item',\n    validation: (value: string) => {\n      if (!value) return true\n      try {\n        new URL(value)\n        return true\n      } catch {\n        return false\n      }\n    }\n  },\n  'Manufacturer Website': {\n    type: 'link',\n    placeholder: 'https://manufacturer.com',\n    validation: (value: string) => {\n      if (!value) return true\n      try {\n        new URL(value)\n        return true\n      } catch {\n        return false\n      }\n    }\n  },\n  'Documentation Link': {\n    type: 'link',\n    placeholder: 'https://docs.example.com/guide',\n    validation: (value: string) => {\n      if (!value) return true\n      try {\n        new URL(value)\n        return true\n      } catch {\n        return false\n      }\n    }\n  },\n  'Assembly Instructions': {\n    type: 'link',\n    placeholder: 'https://manual.example.com/assembly',\n    validation: (value: string) => {\n      if (!value) return true\n      try {\n        new URL(value)\n        return true\n      } catch {\n        return false\n      }\n    }\n  },\n\n  // STL file download fields\n  'STL File Download Link': {\n    type: 'stl-download',\n    placeholder: 'https://example.com/file.stl',\n    validation: (value: string) => {\n      if (!value) return true\n      try {\n        new URL(value)\n        return true\n      } catch {\n        return false\n      }\n    }\n  },\n  'STL Download': {\n    type: 'stl-download',\n    placeholder: 'https://files.printables.com/model.stl',\n    validation: (value: string) => {\n      if (!value) return true\n      try {\n        new URL(value)\n        return true\n      } catch {\n        return false\n      }\n    }\n  },\n  '3D Model File': {\n    type: 'stl-download',\n    placeholder: 'https://thingiverse.com/download.stl',\n    validation: (value: string) => {\n      if (!value) return true\n      try {\n        new URL(value)\n        return true\n      } catch {\n        return false\n      }\n    }\n  },\n  'Print File': {\n    type: 'stl-download',\n    placeholder: 'https://repo.com/parts/bracket.stl',\n    validation: (value: string) => {\n      if (!value) return true\n      try {\n        new URL(value)\n        return true\n      } catch {\n        return false\n      }\n    }\n  },\n  'CAD File Download': {\n    type: 'stl-download',\n    placeholder: 'https://assets.example.com/cad-files/part.stl',\n    validation: (value: string) => {\n      if (!value) return true\n      try {\n        new URL(value)\n        return true\n      } catch {\n        return false\n      }\n    }\n  },\n}\n\n// Get column config with fallback to text\nexport function getColumnConfig(columnName: string): ColumnConfig {\n  // First try exact match\n  if (COLUMN_CONFIGS[columnName]) {\n    return COLUMN_CONFIGS[columnName]\n  }\n\n  // Check for partial matches (case-insensitive)\n  const lowerColumnName = columnName.toLowerCase()\n  for (const [key, config] of Object.entries(COLUMN_CONFIGS)) {\n    if (key.toLowerCase() === lowerColumnName) {\n      return config\n    }\n  }\n\n  // Default to text input for unknown columns\n  return {\n    type: 'text',\n    placeholder: 'Enter value'\n  }\n}\n\n// Check if a value looks like a URL\nexport function isLikelyUrl(value: string): boolean {\n  if (!value) return false\n  const urlPatterns = [\n    /^https?:\\/\\//i,\n    /^www\\./i,\n    /\\.(com|org|net|io|dev|edu|gov)/i,\n    /^[a-z]+:\\/\\//i\n  ]\n  return urlPatterns.some(pattern => pattern.test(value))\n}\n\n// Check if a value looks like a number\nexport function isLikelyNumber(value: string): boolean {\n  if (!value) return false\n  return !isNaN(parseFloat(value)) && isFinite(Number(value))\n}\n\n// Detect column type from content\nexport function detectColumnType(columnName: string, sampleValues: string[]): ColumnInputType {\n  // First check if we have a configured type\n  const config = getColumnConfig(columnName)\n  if (config.type !== 'text') {\n    return config.type\n  }\n\n  // Otherwise try to detect from sample values\n  const nonEmptyValues = sampleValues.filter(v => v && v.trim())\n  if (nonEmptyValues.length === 0) {\n    return 'text'\n  }\n\n  // Check if all values are numbers\n  if (nonEmptyValues.every(isLikelyNumber)) {\n    // Special case for quantity-like columns\n    if (columnName.toLowerCase().includes('quantity') ||\n        columnName.toLowerCase().includes('count') ||\n        columnName.toLowerCase().includes('amount')) {\n      return 'quantity'\n    }\n    return 'number'\n  }\n\n  // Check if all values are URLs\n  if (nonEmptyValues.every(isLikelyUrl)) {\n    // Special case for STL files\n    if (columnName.toLowerCase().includes('stl') &&\n        columnName.toLowerCase().includes('download')) {\n      return 'stl-download'\n    }\n    return 'link'\n  }\n\n  return 'text'\n}","export interface Region {\n  id: string;\n  name: string;\n  flag: string; // Unicode flag emoji\n  code: string; // ISO country code\n  continent: string;\n}\n\nexport const REGIONS_DATA: Region[] = [\n  // North America\n  { id: \"us\", name: \"United States\", flag: \"🇺🇸\", code: \"US\", continent: \"North America\" },\n  { id: \"ca\", name: \"Canada\", flag: \"🇨🇦\", code: \"CA\", continent: \"North America\" },\n  { id: \"mx\", name: \"Mexico\", flag: \"🇲🇽\", code: \"MX\", continent: \"North America\" },\n\n  // Europe\n  { id: \"de\", name: \"Germany\", flag: \"🇩🇪\", code: \"DE\", continent: \"Europe\" },\n  { id: \"fr\", name: \"France\", flag: \"🇫🇷\", code: \"FR\", continent: \"Europe\" },\n  { id: \"gb\", name: \"United Kingdom\", flag: \"🇬🇧\", code: \"GB\", continent: \"Europe\" },\n  { id: \"it\", name: \"Italy\", flag: \"🇮🇹\", code: \"IT\", continent: \"Europe\" },\n  { id: \"es\", name: \"Spain\", flag: \"🇪🇸\", code: \"ES\", continent: \"Europe\" },\n  { id: \"nl\", name: \"Netherlands\", flag: \"🇳🇱\", code: \"NL\", continent: \"Europe\" },\n  { id: \"se\", name: \"Sweden\", flag: \"🇸🇪\", code: \"SE\", continent: \"Europe\" },\n  { id: \"no\", name: \"Norway\", flag: \"🇳🇴\", code: \"NO\", continent: \"Europe\" },\n  { id: \"dk\", name: \"Denmark\", flag: \"🇩🇰\", code: \"DK\", continent: \"Europe\" },\n  { id: \"fi\", name: \"Finland\", flag: \"🇫🇮\", code: \"FI\", continent: \"Europe\" },\n  { id: \"ch\", name: \"Switzerland\", flag: \"🇨🇭\", code: \"CH\", continent: \"Europe\" },\n  { id: \"at\", name: \"Austria\", flag: \"🇦🇹\", code: \"AT\", continent: \"Europe\" },\n  { id: \"be\", name: \"Belgium\", flag: \"🇧🇪\", code: \"BE\", continent: \"Europe\" },\n  { id: \"pl\", name: \"Poland\", flag: \"🇵🇱\", code: \"PL\", continent: \"Europe\" },\n  { id: \"cz\", name: \"Czech Republic\", flag: \"🇨🇿\", code: \"CZ\", continent: \"Europe\" },\n\n  // Asia Pacific\n  { id: \"cn\", name: \"China\", flag: \"🇨🇳\", code: \"CN\", continent: \"Asia\" },\n  { id: \"jp\", name: \"Japan\", flag: \"🇯🇵\", code: \"JP\", continent: \"Asia\" },\n  { id: \"kr\", name: \"South Korea\", flag: \"🇰🇷\", code: \"KR\", continent: \"Asia\" },\n  { id: \"in\", name: \"India\", flag: \"🇮🇳\", code: \"IN\", continent: \"Asia\" },\n  { id: \"sg\", name: \"Singapore\", flag: \"🇸🇬\", code: \"SG\", continent: \"Asia\" },\n  { id: \"au\", name: \"Australia\", flag: \"🇦🇺\", code: \"AU\", continent: \"Oceania\" },\n  { id: \"nz\", name: \"New Zealand\", flag: \"🇳🇿\", code: \"NZ\", continent: \"Oceania\" },\n  { id: \"th\", name: \"Thailand\", flag: \"🇹🇭\", code: \"TH\", continent: \"Asia\" },\n  { id: \"my\", name: \"Malaysia\", flag: \"🇲🇾\", code: \"MY\", continent: \"Asia\" },\n  { id: \"ph\", name: \"Philippines\", flag: \"🇵🇭\", code: \"PH\", continent: \"Asia\" },\n  { id: \"vn\", name: \"Vietnam\", flag: \"🇻🇳\", code: \"VN\", continent: \"Asia\" },\n  { id: \"id\", name: \"Indonesia\", flag: \"🇮🇩\", code: \"ID\", continent: \"Asia\" },\n\n  // Middle East & Africa\n  { id: \"ae\", name: \"United Arab Emirates\", flag: \"🇦🇪\", code: \"AE\", continent: \"Asia\" },\n  { id: \"sa\", name: \"Saudi Arabia\", flag: \"🇸🇦\", code: \"SA\", continent: \"Asia\" },\n  { id: \"il\", name: \"Israel\", flag: \"🇮🇱\", code: \"IL\", continent: \"Asia\" },\n  { id: \"za\", name: \"South Africa\", flag: \"🇿🇦\", code: \"ZA\", continent: \"Africa\" },\n  { id: \"eg\", name: \"Egypt\", flag: \"🇪🇬\", code: \"EG\", continent: \"Africa\" },\n  { id: \"ng\", name: \"Nigeria\", flag: \"🇳🇬\", code: \"NG\", continent: \"Africa\" },\n\n  // South America\n  { id: \"br\", name: \"Brazil\", flag: \"🇧🇷\", code: \"BR\", continent: \"South America\" },\n  { id: \"ar\", name: \"Argentina\", flag: \"🇦🇷\", code: \"AR\", continent: \"South America\" },\n  { id: \"cl\", name: \"Chile\", flag: \"🇨🇱\", code: \"CL\", continent: \"South America\" },\n  { id: \"co\", name: \"Colombia\", flag: \"🇨🇴\", code: \"CO\", continent: \"South America\" },\n  { id: \"pe\", name: \"Peru\", flag: \"🇵🇪\", code: \"PE\", continent: \"South America\" },\n];\n\n// Main continental regions with representative country flags\nexport const MAIN_REGIONS = [\n  {\n    id: \"europe\",\n    name: \"Europe\",\n    flags: [\"🇬🇧\", \"🇩🇪\", \"🇫🇷\", \"🇮🇹\", \"🇪🇸\"],\n    code: \"EU\"\n  },\n  {\n    id: \"north-america\",\n    name: \"North America\",\n    flags: [\"🇺🇸\", \"🇨🇦\", \"🇲🇽\"],\n    code: \"NA\"\n  },\n  {\n    id: \"asia\",\n    name: \"Asia\",\n    flags: [\"🇨🇳\", \"🇯🇵\", \"🇰🇷\", \"🇮🇳\", \"🇸🇬\"],\n    code: \"AS\"\n  },\n  {\n    id: \"africa\",\n    name: \"Africa\",\n    flags: [\"🇿🇦\", \"🇪🇬\", \"🇳🇬\"],\n    code: \"AF\"\n  },\n  {\n    id: \"south-america\",\n    name: \"South America\",\n    flags: [\"🇧🇷\", \"🇦🇷\", \"🇨🇱\", \"🇨🇴\"],\n    code: \"SA\"\n  },\n  {\n    id: \"australia-nz\",\n    name: \"Australia & NZ\",\n    flags: [\"🇦🇺\", \"🇳🇿\"],\n    code: \"OC\"\n  },\n];\n\n// Group regions by continent for tree structure\nexport const getRegionsByContinent = () => {\n  const grouped = REGIONS_DATA.reduce((acc, region) => {\n    if (!acc[region.continent]) {\n      acc[region.continent] = [];\n    }\n    acc[region.continent].push(region);\n    return acc;\n  }, {} as Record<string, Region[]>);\n\n  return Object.entries(grouped).map(([continent, regions]) => ({\n    id: continent.toLowerCase().replace(/\\s+/g, '-'),\n    name: continent,\n    children: regions.map(region => ({\n      ...region,\n      title: region.name // For compatibility with SearchablePopupMenu\n    }))\n  }));\n};\n\n// Get simplified main regions list\nexport const getMainRegionsList = () => {\n  return MAIN_REGIONS.map(region => ({\n    ...region,\n    title: region.name // For compatibility with SearchablePopupMenu\n  }));\n};\n\n// Get flat list of regions\nexport const getFlatRegionsList = () => {\n  return REGIONS_DATA.map(region => ({\n    ...region,\n    title: region.name // For compatibility with SearchablePopupMenu\n  }));\n};","\"use client\"\n\nimport * as React from \"react\"\nimport { createPortal } from \"react-dom\"\nimport type { ColumnConfig } from \"./bom-column-config\"\nimport { useSearchablePopup, SearchablePopupMenu } from \"@/components/tiptap-ui/searchablePopup\"\nimport { getMainRegionsList } from \"./regions-data\"\n\n\ninterface BaseInputProps {\n  value: string\n  onChange: (value: string) => void\n  config: ColumnConfig\n  columnName: string\n  onBlur?: () => void\n}\n\n// Updated base input classes - no background, inherits from parent\nconst baseInputClasses =\n  \"w-full px-3 py-2 bg-transparent border border-[#313133] rounded-lg text-white text-sm placeholder:text-white/50 focus:outline-none transition-colors duration-200\"\n\n// Compact input classes for quantity and numeric inputs\nconst compactInputClasses =\n  \"w-[78px] px-3 py-2 bg-transparent border border-[#313133] rounded-lg text-white text-sm placeholder:text-white/50 focus:outline-none transition-colors duration-200\"\n\n// Numeric input classes (wider for units)\nconst numericInputClasses =\n  \"w-[96px] px-3 py-2 bg-transparent border border-[#313133] rounded-lg text-white text-sm placeholder:text-white/50 focus:outline-none transition-colors duration-200\"\n\n// Add a CSS class for focus states using CSS variables\nconst bomInputFocusStyles = `\n  .bom-input:focus {\n    border-color: var(--tnkr-primary) !important;\n  }\n`\n\n// Text Input Component\nexport const TextInput: React.FC<BaseInputProps> = ({ value, onChange, config, columnName, onBlur }) => {\n  // Use textarea for notes fields\n  if (columnName.toLowerCase().includes('notes') || columnName.toLowerCase().includes('note')) {\n    return (\n      <>\n        <style>{bomInputFocusStyles}</style>\n        <textarea\n          value={value}\n          onChange={(e) => onChange(e.target.value)}\n          onBlur={onBlur}\n          onClick={(e) => e.stopPropagation()}\n          placeholder={config.placeholder}\n          rows={3}\n          className={baseInputClasses + \" resize-none bom-input\"}\n        />\n      </>\n    )\n  }\n\n  return (\n    <>\n      <style>{bomInputFocusStyles}</style>\n      <input\n        type=\"text\"\n        value={value}\n        onChange={(e) => onChange(e.target.value)}\n        onBlur={onBlur}\n      onClick={(e) => e.stopPropagation()}\n      placeholder={config.placeholder}\n      className={baseInputClasses + \" bom-input\"}\n    />\n    </>\n  )\n}\n\n// Number Input Component with formatting\nexport const NumberInput: React.FC<BaseInputProps> = ({ value, onChange, config, columnName, onBlur }) => {\n  const [displayValue, setDisplayValue] = React.useState(value);\n\n  // Format number with 2 decimal places\n  const formatNumber = (val: string) => {\n    if (!val || val === '') return '';\n    const num = parseFloat(val);\n    if (isNaN(num)) return val;\n    return num.toFixed(2);\n  };\n\n  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const rawValue = e.target.value;\n    setDisplayValue(rawValue);\n    onChange(rawValue);\n  };\n\n  const handleBlur = () => {\n    const formatted = formatNumber(displayValue);\n    setDisplayValue(formatted);\n    onChange(formatted);\n    onBlur?.(); // Call parent's onBlur if provided\n  };\n\n  React.useEffect(() => {\n    setDisplayValue(value);\n  }, [value]);\n\n  return (\n    <div className=\"relative inline-block\" onClick={(e) => e.stopPropagation()}>\n      <style>{bomInputFocusStyles}</style>\n      <input\n        type=\"number\"\n        step=\"0.01\"\n        value={displayValue}\n        onChange={handleChange}\n        onBlur={handleBlur}\n        onClick={(e) => e.stopPropagation()}\n        placeholder={config.placeholder}\n        className={`${numericInputClasses} bom-input ${config.unit ? \"pr-8\" : \"\"}`}\n      />\n      {config.unit && (\n        <span className=\"absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 text-xs pointer-events-none\">\n          {config.unit}\n        </span>\n      )}\n    </div>\n  )\n}\n\n// Fixed Quantity Input matching exact UI design\nexport const QuantityInput: React.FC<BaseInputProps> = ({ value, onChange, config, columnName, onBlur }) => {\n  const numValue = Number.parseInt(value) || 0\n\n  const increment = (e: React.MouseEvent) => {\n    e.preventDefault()\n    e.stopPropagation()\n    onChange(String(numValue + 1))\n  }\n\n  const decrement = (e: React.MouseEvent) => {\n    e.preventDefault()\n    e.stopPropagation()\n    onChange(String(Math.max(0, numValue - 1)))\n  }\n\n  const handleInputClick = (e: React.MouseEvent) => {\n    e.stopPropagation()\n  }\n\n  const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    e.stopPropagation()\n    onChange(e.target.value)\n  }\n\n  return (\n    <div className=\"flex items-center justify-between border border-[#313133] rounded-lg py-2 px-3 w-[78px]\"\n         onClick={(e) => e.stopPropagation()}>\n      <button\n        type=\"button\"\n        onClick={decrement}\n        className=\"text-gray-400 hover:text-white transition-colors text-sm font-light\"\n        aria-label=\"Decrease\"\n      >\n        −\n      </button>\n      <input\n        type=\"number\"\n        value={value}\n        onChange={handleInputChange}\n        onBlur={onBlur}\n        onClick={handleInputClick}\n        placeholder={config.placeholder || \"0\"}\n        className=\"w-8 bg-transparent text-white text-sm text-center focus:outline-none [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\"\n      />\n      <button\n        type=\"button\"\n        onClick={increment}\n        className=\"text-gray-400 hover:text-white transition-colors text-sm font-light\"\n        aria-label=\"Increase\"\n      >\n        +\n      </button>\n    </div>\n  )\n}\n\n// Link Input Component\nexport const LinkInput: React.FC<BaseInputProps> = ({ value, onChange, config, columnName, onBlur }) => {\n  const [isValid, setIsValid] = React.useState(true)\n\n  const handleChange = (newValue: string) => {\n    onChange(newValue)\n    if (config.validation) {\n      setIsValid(config.validation(newValue))\n    }\n  }\n\n  return (\n    <div onClick={(e) => e.stopPropagation()}>\n      <style>{bomInputFocusStyles}</style>\n      <input\n        type=\"url\"\n        value={value}\n        onChange={(e) => handleChange(e.target.value)}\n        onBlur={onBlur}\n        onClick={(e) => e.stopPropagation()}\n        placeholder={config.placeholder}\n        className={`${baseInputClasses} bom-input`}\n        style={!isValid ? { borderColor: 'var(--tnkr-primary)' } : undefined}\n      />\n      {!isValid && <div className=\"text-xs mt-1\" style={{ color: 'var(--tnkr-primary)' }}>Please enter a valid URL</div>}\n    </div>\n  )\n}\n\n// Custom SearchablePopupMenu component for regions with flag display\nconst RegionsSearchablePopup: React.FC<{\n  isOpen: boolean;\n  onClose: () => void;\n  position: { x: number; y: number };\n  items: any[];\n  onSelect: (item: any) => void;\n}> = ({ isOpen, onClose, position, items, onSelect }) => {\n  const [searchTerm, setSearchTerm] = React.useState('');\n  const popupRef = React.useRef<HTMLDivElement>(null);\n\n  const filteredItems = React.useMemo(() => {\n    if (!searchTerm) return items;\n    return items.filter(item =>\n      item.name.toLowerCase().includes(searchTerm.toLowerCase())\n    );\n  }, [items, searchTerm]);\n\n  React.useEffect(() => {\n    if (!isOpen) return;\n\n    const handleClickOutside = (event: MouseEvent) => {\n      if (popupRef.current && !popupRef.current.contains(event.target as Node)) {\n        onClose();\n      }\n    };\n\n    const handleEscape = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        onClose();\n      }\n    };\n\n    document.addEventListener('mousedown', handleClickOutside);\n    document.addEventListener('keydown', handleEscape);\n\n    return () => {\n      document.removeEventListener('mousedown', handleClickOutside);\n      document.removeEventListener('keydown', handleEscape);\n    };\n  }, [isOpen, onClose]);\n\n  if (!isOpen) return null;\n\n  return (\n    <div\n      ref={popupRef}\n      className=\"fixed w-64 max-h-[324px] bg-[#161617] border border-[#313133] rounded-lg shadow-lg z-[10000] text-sm\"\n      style={{\n        top: position.y,\n        left: position.x,\n      }}\n    >\n      <div className=\"py-2 px-1 space-y-2\">\n        <div className=\"flex items-center justify-between px-2 py-1\">\n          <p className=\"text-white/70 font-medium text-sm\">Select Region</p>\n          <button onClick={onClose} className=\"text-white/70 hover:text-white\">\n            <iconify-icon icon=\"mingcute:close-line\" width=\"14\" height=\"14\" />\n          </button>\n        </div>\n\n        <div className=\"px-2\">\n          <input\n            type=\"text\"\n            value={searchTerm}\n            onChange={(e) => setSearchTerm(e.target.value)}\n            placeholder=\"Search regions...\"\n            className=\"w-full px-2 py-1 bg-transparent border border-[#313133] rounded text-white text-xs placeholder:text-white/50 focus:outline-none focus:border-[#DB783E]\"\n          />\n        </div>\n\n        <div className=\"max-h-[250px] overflow-y-auto\">\n          {filteredItems.map((region) => (\n            <div\n              key={region.id}\n              onClick={() => onSelect(region)}\n              className=\"flex items-center justify-between p-2 hover:bg-[#242425] rounded cursor-pointer text-white text-sm\"\n            >\n              <span>{region.name}</span>\n              <div className=\"flex items-center gap-1\">\n                {region.flags?.map((flag: string, index: number) => (\n                  <span key={index} className=\"text-base\">{flag}</span>\n                ))}\n              </div>\n            </div>\n          ))}\n        </div>\n      </div>\n    </div>\n  );\n};\n\n// Region Input Component with SearchablePopupMenu\nexport const RegionInput: React.FC<BaseInputProps> = ({ value, onChange, config, columnName, onBlur }) => {\n  const [isPopupOpen, setIsPopupOpen] = React.useState(false);\n  const [popupPosition, setPopupPosition] = React.useState({ x: 0, y: 0 });\n  const triggerRef = React.useRef<HTMLDivElement>(null);\n\n  const regionsData = React.useMemo(() => {\n    return getMainRegionsList();\n  }, []);\n\n  const handleInputClick = React.useCallback((e: React.MouseEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    if (triggerRef.current) {\n      const rect = triggerRef.current.getBoundingClientRect();\n      setPopupPosition({\n        x: rect.left,\n        y: rect.bottom + 5\n      });\n    }\n    setIsPopupOpen(true);\n  }, []);\n\n  const handleRegionSelect = (region: any) => {\n    onChange(region.name); // Only store region name, no flags\n    setIsPopupOpen(false);\n    onBlur?.(); // Call parent's onBlur when selection is made\n  };\n\n  const closePopup = () => {\n    setIsPopupOpen(false);\n    onBlur?.(); // Call parent's onBlur when popup closes\n  };\n\n  return (\n    <div className=\"relative\" onClick={(e) => e.stopPropagation()}>\n      <div\n        ref={triggerRef}\n        onClick={handleInputClick}\n        className=\"w-[150px] px-3 py-2 bg-transparent border border-[#313133] rounded-lg text-[#DB783E] text-sm placeholder:text-white/50 focus:border-[#DB783E] hover:border-[#DB783E] transition-colors duration-200 cursor-pointer flex items-center gap-2\"\n      >\n        {value ? (\n          <div className=\"flex items-center gap-2 flex-1\">\n            <span className=\"flex-1 truncate\">{value}</span>\n          </div>\n        ) : (\n          <div className=\"flex items-center gap-2 text-white/50\">\n            <iconify-icon\n              icon=\"material-symbols-light:add-location-alt-outline-rounded\"\n              width=\"16\"\n              height=\"16\"\n            />\n            <span className=\"truncate\">{config.placeholder}</span>\n          </div>\n        )}\n      </div>\n\n      {isPopupOpen && regionsData && Array.isArray(regionsData) && regionsData.length > 0 && typeof document !== 'undefined' &&\n        createPortal(\n          <RegionsSearchablePopup\n            isOpen={isPopupOpen}\n            onClose={closePopup}\n            position={popupPosition}\n            items={regionsData}\n            onSelect={handleRegionSelect}\n          />,\n          document.body\n        )\n      }\n    </div>\n  )\n}\n\n// STL Download Component - Fixed to match UI\nexport const STLDownloadInput: React.FC<BaseInputProps> = ({ value, onChange, config, columnName, onBlur }) => {\n  const [isValid, setIsValid] = React.useState(true)\n\n  const handleChange = (newValue: string) => {\n    onChange(newValue)\n    if (config.validation) {\n      setIsValid(config.validation(newValue))\n    }\n  }\n\n  const handleDownload = (e: React.MouseEvent) => {\n    e.preventDefault()\n    e.stopPropagation()\n    if (value && isValid) {\n      const link = document.createElement(\"a\")\n      link.href = value\n      link.download = value.split(\"/\").pop() || \"file.stl\"\n      document.body.appendChild(link)\n      link.click()\n      document.body.removeChild(link)\n    }\n  }\n\n  return (\n    <div onClick={(e) => e.stopPropagation()}>\n      {value && isValid ? (\n        <button\n          type=\"button\"\n          onClick={handleDownload}\n          className=\"w-full px-4 py-2.5 bg-transparent hover:bg-[#1a1a1a] border border-[#313133] rounded-lg text-white/90 text-sm font-medium transition-colors flex items-center justify-center gap-2\"\n        >\n          <iconify-icon\n            icon=\"solar:download-linear\"\n            width=\"16\"\n            height=\"16\"\n          />\n          Generate Download Link\n        </button>\n      ) : (\n        <>\n          <style>{bomInputFocusStyles}</style>\n          <input\n            type=\"url\"\n            value={value}\n            onChange={(e) => handleChange(e.target.value)}\n            onBlur={onBlur}\n            onClick={(e) => e.stopPropagation()}\n            placeholder={config.placeholder || \"Enter STL file URL\"}\n            className={`${baseInputClasses} bom-input`}\n            style={!isValid ? { borderColor: 'var(--tnkr-primary)' } : undefined}\n          />\n        </>\n      )}\n      {!isValid && value && <div className=\"text-xs mt-1\" style={{ color: 'var(--tnkr-primary)' }}>Please enter a valid URL</div>}\n    </div>\n  )\n}\n\n// Smart Input Renderer\nexport const SmartInput: React.FC<BaseInputProps> = (props) => {\n  switch (props.config.type) {\n    case \"number\":\n      return <NumberInput {...props} />\n    case \"quantity\":\n      return <QuantityInput {...props} />\n    case \"link\":\n      return <LinkInput {...props} />\n    case \"stl-download\":\n      return <STLDownloadInput {...props} />\n    case \"region\":\n      return <RegionInput {...props} />\n    case \"text\":\n    default:\n      return <TextInput {...props} />\n  }\n}","import React, { useCallback, useState, useEffect } from 'react';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { cn } from '@/core/lib/utils';\nimport { Icon } from '@iconify/react';\n\n// Type definitions from your existing types\ninterface Part {\n  id: string;\n  name: string;\n  children?: Part[];\n  type?: string;\n  metadata?: {\n    isAssemblyInstructions?: boolean;\n    isPhase?: boolean;\n    isStep?: boolean;\n    isGroup?: boolean;\n    stepParts?: Part[];\n  };\n  customIcon?: React.ReactNode;\n}\n\ninterface TreeNodeProps {\n  node: Part;\n  onSelect: (part: Part) => void;\n  searchTerm: string;\n  level?: number;\n  selectionMode?: boolean;\n  selectedItems?: Part[];\n  isTreeMode?: boolean;\n  enableParentSelection?: boolean;\n  expandedIds?: Set<string>;\n  onToggleExpanded?: (nodeId: string) => void;\n  disabled?: boolean;\n  keyPrefix?: string;\n}\n\n// Utility function to get filtered children\nconst getFilteredChildren = (part: Part): Part[] => {\n  if (!part.children || part.children.length === 0) {\n    return [];\n  }\n  return part.children;\n};\n\nconst TreeNode: React.FC<TreeNodeProps> = ({\n  node,\n  onSelect,\n  searchTerm,\n  level = 0,\n  selectionMode = false,\n  selectedItems = [],\n  isTreeMode = false,\n  enableParentSelection = false,\n  expandedIds,\n  onToggleExpanded,\n  disabled = false,\n  keyPrefix = '',\n}) => {\n  const filteredChildren = getFilteredChildren(node);\n  const hasChildren = filteredChildren.length > 0;\n\n  const [internalExpanded, setInternalExpanded] = useState(() => {\n    return !!searchTerm && hasChildren;\n  });\n\n  const isExpanded = expandedIds ? expandedIds.has(node.id) : internalExpanded;\n  const isSelected =\n    selectionMode && selectedItems.some((item) => item.id === node.id);\n\n  const hasSelectedChildren =\n    hasChildren &&\n    selectedItems.some((selectedItem) =>\n      filteredChildren.some((child) => child.id === selectedItem.id),\n    );\n\n  const isNodeDisabled =\n    disabled ||\n    (() => {\n      if (node.metadata?.isAssemblyInstructions) {\n        return true;\n      }\n      if (node.metadata?.isPhase) {\n        return !node.children || node.children.length === 0;\n      }\n      if (node.metadata?.isStep) {\n        return (\n          !node.metadata?.stepParts || node.metadata.stepParts.length === 0\n        );\n      }\n      return false;\n    })();\n\n  const handleToggleExpanded = useCallback(() => {\n    if (onToggleExpanded) {\n      onToggleExpanded(node.id);\n    } else {\n      setInternalExpanded(!internalExpanded);\n    }\n  }, [onToggleExpanded, node.id, internalExpanded]);\n\n  useEffect(() => {\n    if (searchTerm && hasChildren && !expandedIds) {\n      setInternalExpanded(true);\n    }\n  }, [searchTerm, hasChildren, expandedIds]);\n\n  const getTypeIcon = useCallback(() => {\n    if (node.metadata?.isAssemblyInstructions) {\n      return <Icon icon='mage:box-3d-check' className='h-4 w-4' />;\n    }\n\n    if (node.metadata?.isPhase || node.metadata?.isStep) {\n      return null;\n    }\n\n    if (node.metadata?.isGroup) return null;\n\n    if (node.customIcon) return node.customIcon;\n\n    return null;\n  }, [\n    node.metadata?.isAssemblyInstructions,\n    node.metadata?.isPhase,\n    node.metadata?.isStep,\n    node.metadata?.isGroup,\n    node.customIcon,\n  ]);\n\n  const getTextColor = useCallback(() => {\n    if (isSelected || (isTreeMode && isSelected)) return 'text-white';\n\n    if (\n      node.metadata?.isAssemblyInstructions ||\n      node.metadata?.isPhase ||\n      node.metadata?.isStep\n    ) {\n      return 'text-white';\n    }\n\n    if (node.metadata?.isGroup) return 'text-white';\n    return 'text-white';\n  }, [\n    isSelected,\n    isTreeMode,\n    node.metadata?.isAssemblyInstructions,\n    node.metadata?.isPhase,\n    node.metadata?.isStep,\n    node.metadata?.isGroup,\n  ]);\n\n  const searchRecursively = (searchNode: any, term: string): boolean => {\n    if (searchNode.name.toLowerCase().includes(term.toLowerCase())) {\n      return true;\n    }\n\n    if (!searchNode.children || searchNode.children.length === 0) {\n      return false;\n    }\n\n    return searchNode.children.some((child: any) =>\n      searchRecursively(child, term),\n    );\n  };\n\n  const matchesSearch = !searchTerm || searchRecursively(node, searchTerm);\n\n  if (!matchesSearch) return null;\n\n  return (\n    <div>\n      <div\n        className={cn(\n          'flex items-center py-1.5 border-none px-2 group transition-colors border-l-2',\n          isNodeDisabled\n            ? node.metadata?.isAssemblyInstructions\n              ? 'cursor-not-allowed'\n              : 'cursor-not-allowed opacity-50'\n            : 'cursor-pointer',\n          isSelected\n            ? 'text-white'\n            : hasSelectedChildren\n              ? ''\n              : !isNodeDisabled &&\n                'hover:bg-[#232326] border-transparent',\n        )}\n        style={{\n          paddingLeft: `${level * 16 + 8}px`,\n          ...(isSelected\n            ? {\n                backgroundColor: 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)',\n                borderLeftColor: 'var(--tnkr-primary)',\n              }\n            : hasSelectedChildren\n              ? {\n                  backgroundColor: 'color-mix(in srgb, var(--tnkr-primary) 10%, transparent)',\n                  borderLeftColor: 'var(--tnkr-primary)',\n                }\n              : { borderLeftColor: 'transparent' }),\n        }}\n        onClick={(e) => {\n          e.stopPropagation();\n          if (!isNodeDisabled) {\n            onSelect(node);\n          }\n        }}\n      >\n        <span className='mr-2 text-xs'>{getTypeIcon()}</span>\n\n        <span\n          className={cn(\n            'flex-1 truncate text-sm transition-colors',\n            getTextColor(),\n            (node.type === 'assembly' ||\n              node.metadata?.isGroup) &&\n              'font-semibold',\n          )}\n        >\n          {node.name}\n        </span>\n\n        <div className='flex items-center ml-2'>\n          {hasChildren ? (\n            <button\n              className='p-1 hover:bg-[#313133] rounded-sm transition-colors'\n              onClick={(e) => {\n                e.stopPropagation();\n                handleToggleExpanded();\n              }}\n            >\n              {isExpanded ? (\n                <ChevronDown\n                  size={12}\n                  className={cn(\n                    node.metadata?.isAssemblyInstructions\n                      ? 'text-white'\n                      : 'text-white/70',\n                  )}\n                />\n              ) : (\n                <ChevronRight\n                  size={12}\n                  className={cn(\n                    node.metadata?.isAssemblyInstructions\n                      ? 'text-white'\n                      : 'text-white/70',\n                  )}\n                />\n              )}\n            </button>\n          ) : null}\n        </div>\n      </div>\n      {hasChildren && isExpanded && (\n        <div>\n          {filteredChildren.map((child, index) => (\n            <TreeNode\n              key={`${keyPrefix}-${child.id}-${index}`}\n              node={child}\n              onSelect={onSelect}\n              searchTerm={searchTerm}\n              level={level + 1}\n              selectionMode={selectionMode}\n              selectedItems={selectedItems}\n              isTreeMode={isTreeMode}\n              keyPrefix={`${keyPrefix}-${index}`}\n              enableParentSelection={enableParentSelection}\n              expandedIds={expandedIds}\n              onToggleExpanded={onToggleExpanded}\n              disabled={disabled}\n            />\n          ))}\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport default TreeNode;","import React, { useEffect, useRef, useState } from 'react';\nimport { Input } from '@/components/tiptap-ui-primitive/input';\nimport { Button } from '@/components/tiptap-ui-primitive/button';\nimport { Search, X } from 'lucide-react';\nimport TreeNode from './TreeNode';\nimport { Icon } from '@iconify/react';\n\ninterface SelectableItemProps {\n  item: any;\n  onSelect: (item: any) => void;\n  isSelected?: boolean;\n}\n\nconst SelectableItem: React.FC<SelectableItemProps> = ({\n  item,\n  onSelect,\n  isSelected = false,\n}) => {\n  const handleClick = (e: React.MouseEvent) => {\n    e.stopPropagation();\n    onSelect(item);\n  };\n\n  return (\n    <div\n      className='flex items-center justify-between p-2 hover:bg-[#242425] rounded cursor-pointer text-white text-sm'\n      onClick={handleClick}\n      style={{\n        userSelect: 'none',\n        WebkitUserSelect: 'none',\n        MozUserSelect: 'none',\n        msUserSelect: 'none',\n      }}\n    >\n      <span className=\"text-sm\">{item.name || item.title}</span>\n      <Icon\n        icon=\"mingcute:right-line\"\n        width=\"14\"\n        height=\"14\"\n        className=\"text-gray-400\"\n      />\n    </div>\n  );\n};\n\ninterface SearchablePopupMenuProps {\n  isOpen: boolean;\n  onClose: () => void;\n  position: { x: number; y: number };\n  items: any[];\n  onSelect: (item: any) => void;\n  title: string;\n  searchPlaceholder?: string;\n  isTreeMode?: boolean;\n  selectedItems?: any[];\n  showRadioButtons?: boolean;\n  enableParentSelection?: boolean;\n  bottomButton?: {\n    text: string;\n    onClick: () => void;\n    variant?: 'default' | 'outline';\n  };\n  zIndex?: number; // Allow custom z-index\n  containerRef?: React.RefObject<HTMLElement>; // Reference to container for scoped positioning\n}\n\nconst SearchablePopupMenu: React.FC<SearchablePopupMenuProps> = ({\n  isOpen,\n  onClose,\n  position,\n  items,\n  onSelect,\n  title,\n  searchPlaceholder = 'Search...',\n  isTreeMode = false,\n  selectedItems = [],\n  showRadioButtons = false,\n  enableParentSelection = false,\n  bottomButton,\n  zIndex = 10000,\n  containerRef,\n}) => {\n  const [searchTerm, setSearchTerm] = useState('');\n  const [filteredItems, setFilteredItems] = useState(items);\n  const [isSearchExpanded, setIsSearchExpanded] = useState(false);\n  const popupRef = useRef<HTMLDivElement>(null);\n\n  // Calculate dynamic height based on content\n  const calculateContentHeight = () => {\n    const itemHeight = 40;\n    const minHeight = 300;\n    const maxHeight = 600;\n\n    let itemCount = 0;\n    if (isTreeMode) {\n      itemCount = items.length * 2;\n    } else {\n      itemCount = filteredItems.length;\n    }\n\n    const calculatedHeight = Math.max(\n      minHeight,\n      Math.min(maxHeight, itemCount * itemHeight),\n    );\n\n    const bottomButtonHeight = bottomButton ? 80 : 0;\n    const minContentHeight = 150;\n\n    const contentHeight = bottomButton\n      ? Math.max(minContentHeight, calculatedHeight - bottomButtonHeight)\n      : calculatedHeight;\n\n    return {\n      contentHeight,\n      totalHeight: contentHeight + bottomButtonHeight,\n    };\n  };\n\n  // Position the popup near the cursor but ensure it stays within viewport\n  const getPopupPosition = () => {\n    if (!popupRef.current) return position;\n\n    const popup = popupRef.current;\n    const rect = popup.getBoundingClientRect();\n    const viewportWidth = window.innerWidth;\n    const viewportHeight = window.innerHeight;\n\n    let { x, y } = position;\n\n    // Adjust horizontal position if popup would go off screen\n    if (x + rect.width > viewportWidth) {\n      x = viewportWidth - rect.width - 20;\n    }\n    if (x < 20) {\n      x = 20;\n    }\n\n    // Adjust vertical position if popup would go off screen\n    if (y + rect.height > viewportHeight) {\n      y = viewportHeight - rect.height - 20;\n    }\n    if (y < 20) {\n      y = 20;\n    }\n\n    return { x, y };\n  };\n\n  useEffect(() => {\n    if (!isTreeMode) {\n      const filtered = items.filter((item) =>\n        (item.name || item.title)\n          .toLowerCase()\n          .includes(searchTerm.toLowerCase()),\n      );\n      setFilteredItems(filtered);\n    }\n  }, [searchTerm, items, isTreeMode]);\n\n  useEffect(() => {\n    if (!isOpen) return;\n\n    const handleClickOutside = (event: MouseEvent) => {\n      if (popupRef.current && !popupRef.current.contains(event.target as Node)) {\n        onClose();\n      }\n    };\n\n    const handleEscape = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        onClose();\n      }\n    };\n\n    document.addEventListener('mousedown', handleClickOutside);\n    document.addEventListener('keydown', handleEscape);\n\n    return () => {\n      document.removeEventListener('mousedown', handleClickOutside);\n      document.removeEventListener('keydown', handleEscape);\n    };\n  }, [isOpen, onClose]);\n\n  if (!isOpen) return null;\n\n  const { contentHeight } = calculateContentHeight();\n  const finalPosition = getPopupPosition();\n\n  return (\n    <div\n      ref={popupRef}\n      className='SearchablePopupMenu fixed w-64 max-h-[324px] bg-[#161617] border border-[#313133] rounded-lg shadow-lg text-sm'\n      style={{\n        top: finalPosition.y,\n        left: finalPosition.x,\n        zIndex: zIndex,\n        userSelect: 'none',\n        WebkitUserSelect: 'none',\n        MozUserSelect: 'none',\n        msUserSelect: 'none',\n      }}\n    >\n      <div\n        className='py-2 px-1 space-y-2'\n        onClick={(e) => e.stopPropagation()}\n        onMouseDown={(e) => e.stopPropagation()}\n      >\n        {/* Header with inline search functionality */}\n        <div className='flex items-center cursor-pointer px-2 justify-between h-6 text-sm'>\n          {!isSearchExpanded ? (\n            <div\n              className={\n                isTreeMode\n                  ? 'w-full justify-between flex px-1'\n                  : 'w-full flex justify-between'\n              }\n            >\n              <p className='text-white/70 font-medium text-sm'>{title}</p>\n              <button\n                onClick={() => setIsSearchExpanded(true)}\n                className='text-white/70 hover:text-white p-0.5 cursor-pointer'\n              >\n                <Search size={12} />\n              </button>\n            </div>\n          ) : (\n            <div className='relative flex-1 w-full px-0'>\n              <Input\n                type='text'\n                placeholder={searchPlaceholder}\n                value={searchTerm}\n                onChange={(e) => setSearchTerm(e.target.value)}\n                className='pr-8'\n                autoFocus\n              />\n              <button\n                onClick={() => {\n                  setIsSearchExpanded(false);\n                  setSearchTerm('');\n                }}\n                className='absolute right-2 top-1/2 transform -translate-y-1/2 text-white/70 hover:text-white'\n              >\n                <X size={12} />\n              </button>\n            </div>\n          )}\n        </div>\n\n        <div className='relative flex-1 overflow-hidden'>\n          <div\n            className='overflow-y-auto h-full max-h-[280px]'\n          >\n            {isTreeMode ? (\n              <div className={bottomButton ? 'pb-20' : ''}>\n                {items.map((node, index) => (\n                  <div key={`${node.id}-${index}`}>\n                    {node.metadata?.isAssemblyInstructions && (\n                      <div className='mt-3' />\n                    )}\n                    <TreeNode\n                      node={{\n                        ...node,\n                        customIcon: (\n                          <Icon icon='ph:tree-view-thin' className='h-5 w-5' />\n                        ),\n                      }}\n                      onSelect={onSelect}\n                      searchTerm={searchTerm}\n                      selectionMode={selectedItems.length > 0}\n                      selectedItems={selectedItems}\n                      isTreeMode={isTreeMode}\n                      enableParentSelection={enableParentSelection}\n                      keyPrefix={`root-${index}`}\n                    />\n                  </div>\n                ))}\n              </div>\n            ) : showRadioButtons ? (\n              <div className={bottomButton ? 'pb-20' : ''}>\n                {filteredItems.map((item, index) => (\n                  <SelectableItem\n                    key={`${item.id}-${index}`}\n                    item={item}\n                    onSelect={onSelect}\n                    isSelected={selectedItems.some(\n                      (selected) => selected.id === item.id,\n                    )}\n                  />\n                ))}\n              </div>\n            ) : (\n              <div className={bottomButton ? 'pb-20' : ''}>\n                {filteredItems.map((item, index) => (\n                  <div\n                    key={`${item.id}-${index}`}\n                    className='flex items-center justify-between p-3 hover:bg-[#242425] rounded cursor-pointer text-white'\n                    onClick={(e) => {\n                      e.stopPropagation();\n                      onSelect(item);\n                    }}\n                  >\n                    <span>{item.name || item.title}</span>\n                    <div className='w-4 h-4 border rounded'></div>\n                  </div>\n                ))}\n              </div>\n            )}\n          </div>\n\n          {/* Sticky Bottom Button */}\n          {bottomButton && (\n            <div className='absolute bg-[#161617] bottom-0 left-0 right-0 px-2 pt-4 pb-2'>\n              <Button\n                onClick={(e) => {\n                  e.stopPropagation();\n                  bottomButton.onClick();\n                }}\n                className='w-full'\n              >\n                {bottomButton.text}\n              </Button>\n            </div>\n          )}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default SearchablePopupMenu;","import { useState, useCallback, useRef, useEffect } from 'react';\n\ninterface UseSearchablePopupProps {\n  onSelect?: (item: any) => void;\n  items?: any[];\n}\n\ninterface PopupState {\n  isOpen: boolean;\n  position: { x: number; y: number };\n  items: any[];\n}\n\nexport const useSearchablePopup = ({ onSelect, items = [] }: UseSearchablePopupProps = {}) => {\n  const [popupState, setPopupState] = useState<PopupState>({\n    isOpen: false,\n    position: { x: 0, y: 0 },\n    items: [],\n  });\n\n  const lastMousePosition = useRef({ x: 0, y: 0 });\n\n  // Track mouse position globally\n  useEffect(() => {\n    const handleMouseMove = (event: MouseEvent) => {\n      lastMousePosition.current = { x: event.clientX, y: event.clientY };\n    };\n\n    document.addEventListener('mousemove', handleMouseMove);\n    return () => {\n      document.removeEventListener('mousemove', handleMouseMove);\n    };\n  }, []);\n\n  // Open popup at current cursor position\n  const openPopup = useCallback((customItems?: any[], customPosition?: { x: number; y: number }) => {\n    const position = customPosition || lastMousePosition.current;\n    const popupItems = customItems || items;\n\n    setPopupState({\n      isOpen: true,\n      position,\n      items: popupItems,\n    });\n  }, [items]);\n\n  // Open popup at specific position (e.g., from a click event)\n  const openPopupAtEvent = useCallback((event: React.MouseEvent | MouseEvent, customItems?: any[]) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    const position = { x: event.clientX, y: event.clientY };\n    const popupItems = customItems || items;\n\n    setPopupState({\n      isOpen: true,\n      position,\n      items: popupItems,\n    });\n  }, [items]);\n\n  // Close popup\n  const closePopup = useCallback(() => {\n    setPopupState(prev => ({ ...prev, isOpen: false }));\n  }, []);\n\n  // Handle item selection\n  const handleSelect = useCallback((item: any) => {\n    onSelect?.(item);\n    closePopup();\n  }, [onSelect, closePopup]);\n\n  return {\n    isOpen: popupState.isOpen,\n    position: popupState.position,\n    items: popupState.items,\n    openPopup,\n    openPopupAtEvent,\n    closePopup,\n    handleSelect,\n  };\n};","import * as React from 'react';\nimport {\n  type NodeViewProps,\n  NodeViewWrapper,\n  NodeViewContent,\n} from '@tiptap/react';\nimport { TableCellMenu } from '@/components/tiptap-ui/table-controls/table-cell-menu';\nimport { TablePlusButtons } from '@/components/tiptap-ui/table-controls/table-plus-buttons';\nimport { useUnifiedSideMenu } from '@/core/components/unified-side-menu';\nimport { XIcon } from '@/components/tiptap-icons/x-icon';\nimport { useTable } from '@/hooks/use-table';\nimport {\n  getColumnConfig,\n  detectColumnType,\n  type ColumnInputType,\n  type ColumnConfig,\n} from './bom-column-config';\nimport { SmartInput } from './bom-input-components';\nimport {\n  SearchablePopupMenu,\n  useSearchablePopup,\n} from '@/components/tiptap-ui/searchablePopup';\nimport { type Part, type PartsTreeNode } from '@/lib/utils/bom-parts-fetcher';\nimport { Part as TnkrPart } from '../../../../src/components/TnkrModelView/types';\nimport { useProductDataContext } from '@/contexts/ProductDataContext';\nimport { getBomTypeConfig, type BomType } from './config/bom-types-config';\n\nexport interface BomNodeViewProps extends NodeViewProps {\n  // Additional props can be added here\n}\n\nexport const BomNodeView: React.FC<BomNodeViewProps> = ({\n  editor,\n  node,\n  getPos,\n  HTMLAttributes,\n}) => {\n  // ============================================================================\n  // HOOKS & STATE\n  // ============================================================================\n  // Try to use UnifiedSideMenu if available (may not be in preview mode)\n  let openSideMenu: ((data: any) => void) | undefined;\n  let closeSideMenu: (() => void) | undefined;\n  let sidebarIsOpen = false;\n\n  try {\n    const sideMenuContext = useUnifiedSideMenu();\n    openSideMenu = sideMenuContext.openSideMenu;\n    closeSideMenu = sideMenuContext.closeSideMenu;\n    sidebarIsOpen = sideMenuContext.isOpen;\n  } catch (error) {\n    console.warn(\n      '[BomNodeView] UnifiedSideMenuProvider not available. Side menu features disabled.',\n    );\n  }\n\n  // Execution guard to prevent double-clicks on table operations\n  const isExecutingRef = React.useRef(false);\n\n  const [tableContent, setTableContent] = React.useState<any>(null);\n  const [clickedCell, setClickedCell] = React.useState<{\n    rowIndex: number;\n    colIndex: number;\n  } | null>(null);\n  // Get product data from context instead of fetching (only when IDs are available)\n  const { productData } = useProductDataContext();\n\n  // Helper function to convert TnkrPart tree structure to PartsTreeNode for BOM selection\n  const convertTnkrPartsToTreeNodes = (parts: TnkrPart[]): PartsTreeNode[] => {\n    const convertNode = (node: TnkrPart): PartsTreeNode => {\n      return {\n        id: node.id,\n        name: node.name,\n        category: node.type,\n        children: node.children ? node.children.map(convertNode) : undefined,\n      };\n    };\n\n    // If there's a single root node with children, start from its children\n    if (parts.length === 1 && parts[0].children) {\n      return parts[0].children.map(convertNode);\n    } else {\n      return parts.map(convertNode);\n    }\n  };\n\n  const [tableWidth, setTableWidth] = React.useState<number | null>(null);\n  const [isResizing, setIsResizing] = React.useState(false);\n  const [columnWidths, setColumnWidths] = React.useState<number[]>([]);\n  const [resizingColumn, setResizingColumn] = React.useState<number | null>(\n    null,\n  );\n  const containerRef = React.useRef<HTMLDivElement>(null);\n  const tableRef = React.useRef<HTMLTableElement>(null);\n\n  // Table controls state\n  const [activeCell, setActiveCell] = React.useState<{\n    row: number;\n    col: number;\n  } | null>(null);\n  const [isContextMenuOpen, setIsContextMenuOpen] = React.useState(false);\n\n  // Cell menu popup state\n  const [cellMenuOpen, setCellMenuOpen] = React.useState<\n    'top' | 'left' | 'right' | null\n  >(null);\n  const [cellMenuPosition, setCellMenuPosition] = React.useState({\n    x: 0,\n    y: 0,\n  });\n\n  // Get BOM attributes from node\n  const bomType = (node.attrs.type || 'regular-parts') as BomType;\n  const productId = node.attrs.productId;\n  const organizationId = node.attrs.organizationId;\n\n  // Determine if this is a bare BOM (blank type means no part selection features)\n  const isBareTable = bomType === 'blank';\n\n  // Use centralized data or fallback to empty arrays\n  // Only use productData if both IDs are present AND not a bare table\n  const hasRequiredIds = !isBareTable && productId && organizationId;\n  const tnkrPartsTree =\n    hasRequiredIds && productData?.partsTree ? productData.partsTree : [];\n  const partsTree: PartsTreeNode[] =\n    tnkrPartsTree.length > 0 ? convertTnkrPartsToTreeNodes(tnkrPartsTree) : [];\n  const partsData: Part[] = []; // Keep empty for now - we're using tree mode\n  const isLoadingParts = (hasRequiredIds && productData?.isLoading) || false;\n  const partsError = (hasRequiredIds && productData?.error) || null;\n\n  // Check if editor is in editable mode\n  const isEditable = editor.isEditable;\n\n  // Note: useTable hook may not work properly within BOM node context\n  // We'll use direct editor commands when needed\n  const tableHook = useTable(editor);\n\n  // Note: Parts data now comes from centralized ProductDataContext\n  // No API fetching needed here\n\n  // Use parts tree if available, otherwise use flat list\n  const useTreeMode = partsTree.length > 0;\n  const availableParts = useTreeMode ? partsTree : partsData;\n\n  // Searchable popup hook\n  const {\n    isOpen: popupIsOpen,\n    position: popupPosition,\n    items: popupItems,\n    openPopupAtEvent,\n    closePopup,\n    handleSelect: handlePopupSelect,\n  } = useSearchablePopup({\n    items: availableParts,\n    onSelect: (item) => {\n      if (clickedCell && editor) {\n        // Update the underlying Tiptap table structure to trigger onChange\n        const pos = getPos();\n        if (pos !== undefined) {\n          const tableNode = editor.state.doc.nodeAt(pos);\n          if (tableNode && tableNode.content) {\n            const table = tableNode.content.firstChild;\n            if (table && table.type.name === 'table') {\n              const targetRow = table.content.child(clickedCell.rowIndex);\n              if (targetRow && targetRow.type.name === 'tableRow') {\n                const targetCell = targetRow.content.child(\n                  clickedCell.colIndex,\n                );\n                if (targetCell) {\n                  // Calculate exact position\n                  let cellPos = pos + 2; // Start of table\n\n                  // Add size of all rows before target row\n                  for (let i = 0; i < clickedCell.rowIndex; i++) {\n                    const prevRow = table.content.child(i);\n                    if (prevRow) cellPos += prevRow.nodeSize;\n                  }\n\n                  // Add size of all cells before target cell\n                  for (let i = 0; i < clickedCell.colIndex; i++) {\n                    const prevCell = targetRow.content.child(i);\n                    if (prevCell) cellPos += prevCell.nodeSize;\n                  }\n\n                  const cellStart = cellPos + 1;\n                  const cellEnd = cellPos + targetCell.nodeSize - 1;\n\n                  // This will trigger the editor's onChange\n                  editor\n                    .chain()\n                    .focus()\n                    .deleteRange({ from: cellStart, to: cellEnd })\n                    .insertContentAt(cellStart, item.name)\n                    .run();\n                }\n              }\n            }\n          }\n        }\n        setClickedCell(null);\n      }\n    },\n  });\n\n  // ============================================================================\n  // EVENT HANDLERS\n  // ============================================================================\n  const handleTableClick = React.useCallback(\n    (event: React.MouseEvent, rowIndex: number, colIndex: number) => {\n      // Only allow part selection in editable mode\n      if (!isEditable) return;\n\n      // Prevent the BOM node from being selected\n      event.stopPropagation();\n      event.preventDefault();\n\n      // Open searchable popup menu at click position\n      setClickedCell({ rowIndex, colIndex });\n      openPopupAtEvent(event, availableParts);\n    },\n    [openPopupAtEvent, availableParts, isEditable],\n  );\n\n  const handleCellClick = React.useCallback(\n    (event: React.MouseEvent, rowIndex: number, colIndex: number) => {\n      // Always stop propagation to prevent BOM node selection\n      event.stopPropagation();\n\n      if (!isEditable) return;\n      setActiveCell({ row: rowIndex, col: colIndex });\n\n      // Programmatically focus the contentEditable element inside the clicked cell\n      const target = event.currentTarget as HTMLElement;\n      const contentEditableElement = target.querySelector(\n        '[contentEditable=\"true\"]',\n      ) as HTMLElement;\n\n      if (contentEditableElement) {\n        // Use setTimeout to ensure the focus happens after the click event completes\n        setTimeout(() => {\n          // Check if user has selected text - if so, preserve it\n          const currentSelection = window.getSelection();\n          if (currentSelection && !currentSelection.isCollapsed) {\n            // User has highlighted text, don't clear it\n            contentEditableElement.focus();\n            return;\n          }\n\n          contentEditableElement.focus();\n\n          // Place cursor at the end of the content\n          const range = document.createRange();\n          const selection = window.getSelection();\n\n          if (contentEditableElement.childNodes.length > 0) {\n            const lastNode =\n              contentEditableElement.childNodes[\n                contentEditableElement.childNodes.length - 1\n              ];\n            const textLength = lastNode.textContent?.length || 0;\n            range.setStart(lastNode, textLength);\n            range.collapse(true);\n          } else {\n            range.selectNodeContents(contentEditableElement);\n            range.collapse(false);\n          }\n\n          selection?.removeAllRanges();\n          selection?.addRange(range);\n        }, 0);\n      }\n    },\n    [isEditable],\n  );\n\n  // Handle cell menu icon click\n  const handleCellMenuIconClick = React.useCallback(\n    (event: React.MouseEvent, position: 'top' | 'left' | 'right') => {\n      event.stopPropagation();\n      event.preventDefault();\n\n      if (!activeCell || !tableRef.current) return;\n\n      const { row: rowIndex, col: colIndex } = activeCell;\n      const table = tableRef.current;\n      const rows = table.querySelectorAll('tr');\n      const targetRow = rows[rowIndex];\n      if (!targetRow) return;\n\n      const targetCell = targetRow.children[colIndex] as HTMLElement;\n      if (!targetCell) return;\n\n      const cellRect = targetCell.getBoundingClientRect();\n\n      // Menu dimensions (approximate)\n      const menuWidth = 150;\n      const menuHeight = 200; // Max height for 4 items\n\n      // Viewport dimensions\n      const viewportWidth = window.innerWidth;\n      const viewportHeight = window.innerHeight;\n\n      let x = 0, y = 0;\n\n      if (position === 'top') {\n        // Default: center horizontally above cell\n        x = cellRect.left + cellRect.width / 2 - menuWidth / 2;\n        y = cellRect.top - 5;\n\n        // Check right edge overflow\n        if (x + menuWidth > viewportWidth - 10) {\n          x = viewportWidth - menuWidth - 10;\n        }\n        // Check left edge overflow\n        if (x < 10) {\n          x = 10;\n        }\n      } else if (position === 'left') {\n        // Default: left of cell\n        x = cellRect.left - menuWidth - 5;\n        y = cellRect.top + cellRect.height / 2 - 20;\n\n        // Check if menu would overflow left edge\n        if (x < 10) {\n          // Flip to right side\n          x = cellRect.right + 5;\n        }\n\n        // Check if flipped position overflows right edge\n        if (x + menuWidth > viewportWidth - 10) {\n          x = viewportWidth - menuWidth - 10;\n        }\n      } else if (position === 'right') {\n        // Default: right of cell\n        x = cellRect.right + 5;\n        y = cellRect.top + cellRect.height / 2 - 20;\n\n        // Check if menu would overflow right edge\n        if (x + menuWidth > viewportWidth - 10) {\n          // Flip to left side\n          x = cellRect.left - menuWidth - 5;\n        }\n\n        // Check if flipped position overflows left edge\n        if (x < 10) {\n          x = 10;\n        }\n      }\n\n      // Vertical overflow check for all positions\n      if (y + menuHeight > viewportHeight - 10) {\n        y = viewportHeight - menuHeight - 10;\n      }\n      if (y < 10) {\n        y = 10;\n      }\n\n      // Toggle: if clicking the same icon, close the menu\n      if (cellMenuOpen === position) {\n        setCellMenuOpen(null);\n        setIsContextMenuOpen(false);\n        return;\n      }\n\n      setCellMenuPosition({ x, y });\n      setCellMenuOpen(position);\n      setIsContextMenuOpen(true);\n    },\n    [activeCell],\n  );\n\n  // Track if user is actively interacting with an input\n  const [isTyping, setIsTyping] = React.useState(false);\n  const typingTimeoutRef = React.useRef<NodeJS.Timeout | null>(null);\n\n  const handleCellMouseLeave = React.useCallback(() => {\n    // Blur any focused input when mouse leaves the cell (only if not actively typing)\n    if (!isTyping && document.activeElement instanceof HTMLElement) {\n      document.activeElement.blur();\n    }\n  }, [isTyping]);\n\n  // Add global mouseup/touchend listeners to clear focus when interaction ends\n  React.useEffect(() => {\n    const handleInteractionEnd = () => {\n      // For trackpad users, blur immediately when interaction ends\n      setTimeout(() => {\n        if (\n          document.activeElement instanceof HTMLElement &&\n          document.activeElement.tagName === 'INPUT'\n        ) {\n          const isInBomTable = document.activeElement.closest('.bom-table');\n          // Blur if it's in the BOM table and user isn't actively typing\n          if (isInBomTable && !isTyping) {\n            document.activeElement.blur();\n          }\n        }\n      }, 100);\n    };\n\n    document.addEventListener('mouseup', handleInteractionEnd);\n    document.addEventListener('touchend', handleInteractionEnd);\n\n    return () => {\n      document.removeEventListener('mouseup', handleInteractionEnd);\n      document.removeEventListener('touchend', handleInteractionEnd);\n    };\n  }, [isTyping]);\n\n  // Detect when user is actively typing\n  React.useEffect(() => {\n    const handleKeyDown = () => {\n      setIsTyping(true);\n      if (typingTimeoutRef.current) {\n        clearTimeout(typingTimeoutRef.current);\n      }\n      typingTimeoutRef.current = setTimeout(() => {\n        setIsTyping(false);\n      }, 1000);\n    };\n\n    document.addEventListener('keydown', handleKeyDown);\n    return () => {\n      document.removeEventListener('keydown', handleKeyDown);\n      if (typingTimeoutRef.current) {\n        clearTimeout(typingTimeoutRef.current);\n      }\n    };\n  }, []);\n\n  // Add click outside detection\n  React.useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (!tableRef.current || !activeCell) return;\n\n      const target = event.target as Node;\n      // Check if click is outside the table and not on menu elements\n      if (\n        !tableRef.current.contains(target) &&\n        !target.parentElement?.closest('.table-cell-menu-icon') &&\n        !target.parentElement?.closest('.table-cell-menu-popup')\n      ) {\n        setActiveCell(null);\n      }\n    };\n\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, [activeCell]);\n\n  // Close cell menu popup when clicking outside\n  React.useEffect(() => {\n    if (!cellMenuOpen) return;\n\n    const handleClickOutside = (event: MouseEvent) => {\n      const target = event.target as HTMLElement;\n      if (\n        !target.closest('.bom-cell-menu-popup') &&\n        !target.closest('.bom-cell-menu-icon')\n      ) {\n        setCellMenuOpen(null);\n        setIsContextMenuOpen(false);\n      }\n    };\n\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, [cellMenuOpen]);\n\n  // Close cell menu when active cell changes\n  React.useEffect(() => {\n    setCellMenuOpen(null);\n  }, [activeCell]);\n\n  // Prevent scroll on page when cell menu is open\n  React.useEffect(() => {\n    if (cellMenuOpen && containerRef.current) {\n      // Find the scrollable parent container\n      const findScrollableParent = (element: HTMLElement): HTMLElement => {\n        let parent = element.parentElement;\n        while (parent) {\n          const { overflow, overflowY, overflowX } = window.getComputedStyle(parent);\n          if (\n            overflow === 'auto' ||\n            overflow === 'scroll' ||\n            overflowY === 'auto' ||\n            overflowY === 'scroll' ||\n            overflowX === 'auto' ||\n            overflowX === 'scroll'\n          ) {\n            return parent;\n          }\n          parent = parent.parentElement;\n        }\n        return document.body;\n      };\n\n      const scrollableParent = findScrollableParent(containerRef.current);\n      const originalOverflow = scrollableParent.style.overflow;\n\n      // Prevent scrolling on the scrollable parent\n      scrollableParent.style.overflow = 'hidden';\n\n      // Also prevent body scroll as a backup\n      const originalBodyOverflow = document.body.style.overflow;\n      document.body.style.overflow = 'hidden';\n\n      // Restore on cleanup\n      return () => {\n        scrollableParent.style.overflow = originalOverflow;\n        document.body.style.overflow = originalBodyOverflow;\n      };\n    }\n  }, [cellMenuOpen]);\n\n  // Check distance between menus and BOM container, hide if 15px away\n  React.useEffect(() => {\n    if (!containerRef.current) return;\n    if (!activeCell && !popupIsOpen) return; // Only run when menus are open\n\n    let animationFrameId: number;\n\n    const checkMenuDistance = () => {\n      if (!containerRef.current) return;\n\n      const bomRect = containerRef.current.getBoundingClientRect();\n\n      // Check table cell menu icons and popup\n      if (activeCell) {\n        const menuIcons = document.querySelectorAll('.table-cell-menu-icon');\n        const menuPopup = document.querySelector('.table-cell-menu-popup');\n\n        let shouldClose = false;\n\n        // Check menu icons\n        menuIcons.forEach((icon) => {\n          const iconRect = icon.getBoundingClientRect();\n\n          // Distance from top of icon to bottom of BOM\n          const distanceFromBottom = iconRect.top - bomRect.bottom;\n          // Distance from bottom of icon to top of BOM\n          const distanceFromTop = bomRect.top - iconRect.bottom;\n\n          if (distanceFromBottom >= 2 || distanceFromTop >= 2) {\n            shouldClose = true;\n          }\n        });\n\n        // Check menu popup\n        if (menuPopup) {\n          const popupRect = menuPopup.getBoundingClientRect();\n\n          const distanceFromBottom = popupRect.top - bomRect.bottom;\n          const distanceFromTop = bomRect.top - popupRect.bottom;\n\n          if (distanceFromBottom >= 2 || distanceFromTop >= 2) {\n            shouldClose = true;\n          }\n        }\n\n        if (shouldClose) {\n          setActiveCell(null);\n        }\n      }\n\n      // Check searchable popup\n      if (popupIsOpen) {\n        const popup = document.querySelector('.searchable-popup');\n        if (popup) {\n          const popupRect = popup.getBoundingClientRect();\n\n          const distanceFromBottom = popupRect.top - bomRect.bottom;\n          const distanceFromTop = bomRect.top - popupRect.bottom;\n\n          if (distanceFromBottom >= 15 || distanceFromTop >= 15) {\n            closePopup();\n          }\n        }\n      }\n\n      animationFrameId = requestAnimationFrame(checkMenuDistance);\n    };\n\n    animationFrameId = requestAnimationFrame(checkMenuDistance);\n\n    return () => {\n      if (animationFrameId) {\n        cancelAnimationFrame(animationFrameId);\n      }\n    };\n  }, [activeCell, popupIsOpen, closePopup]);\n\n  const handleButtonClick = React.useCallback(\n    (\n      event: React.MouseEvent,\n      rowIndex: number,\n      colIndex: number,\n      content: string,\n    ) => {\n      // Prevent opening sidebar if it's already open\n      if (sidebarIsOpen) return;\n\n      // ============================================================================\n      // EXTRACT TABLE DATA\n      // ============================================================================\n      if (!node || !node.content || node.content.size === 0) return;\n\n      const tableNode = node.content.firstChild;\n      if (!tableNode || tableNode.type.name !== 'table') return;\n\n      const currentTableData: any[] = [];\n      tableNode.content.forEach((rowNode: any, rIndex: number) => {\n        const cells: any[] = [];\n        rowNode.content.forEach((cellNode: any, cIndex: number) => {\n          // In the first row, all cells should be treated as headers regardless of their type\n          // This handles the case where addColumnAfter creates regular cells instead of headers\n          const isHeader =\n            rowIndex === 0 || cellNode.type.name === 'tableHeader';\n          let textContent = '';\n\n          // Extract current text content from the editor\n          if (cellNode.content && cellNode.content.size > 0) {\n            cellNode.content.forEach((paragraphNode: any) => {\n              if (paragraphNode.content && paragraphNode.content.size > 0) {\n                paragraphNode.content.forEach((textNode: any) => {\n                  if (textNode.text) {\n                    textContent += textNode.text;\n                  }\n                });\n              }\n            });\n          }\n\n          cells.push({\n            isHeader,\n            content: textContent,\n            rowIndex: rIndex,\n            colIndex: cIndex,\n          });\n        });\n        currentTableData.push(cells);\n      });\n\n      // Get headers (first row) and current row data\n      const headers = currentTableData[0] || [];\n      const currentRow = currentTableData[rowIndex] || [];\n\n      // ============================================================================\n      // BOM ROW EDITOR COMPONENT\n      // ============================================================================\n      const BomRowEditor = () => {\n        const [isLoading, setIsLoading] = React.useState(true);\n        const [isSaving, setIsSaving] = React.useState(false);\n        const [formData, setFormData] = React.useState<Record<string, string>>(\n          {},\n        );\n        const [editingHeader, setEditingHeader] = React.useState<string | null>(\n          null,\n        );\n        const [editedHeaderName, setEditedHeaderName] =\n          React.useState<string>('');\n        // Remove newPropertyName state - we'll add properties directly\n\n        // Initialize form data when component mounts\n        React.useEffect(() => {\n          const data: Record<string, string> = {};\n          headers.forEach((header: any, index: number) => {\n            // Use the header content, or if empty, use a placeholder\n            const headerName = header.content || `Column ${index + 1}`;\n            data[headerName] = currentRow[index]?.content || '';\n          });\n          setFormData(data);\n\n          // Simulate loading time to let table structure stabilize\n          const timer = setTimeout(() => {\n            setIsLoading(false);\n          }, 300);\n\n          return () => clearTimeout(timer);\n        }, []);\n\n        // ------------------------------------------------------------------------\n        // FORM HANDLERS\n        // ------------------------------------------------------------------------\n        const handleInputChange = (headerName: string, value: string) => {\n          setFormData((prev) => ({ ...prev, [headerName]: value }));\n        };\n\n        const handleHeaderDoubleClick = (headerName: string) => {\n          setEditingHeader(headerName);\n          setEditedHeaderName(headerName);\n        };\n\n        const handleHeaderNameChange = (\n          e: React.ChangeEvent<HTMLInputElement>,\n        ) => {\n          setEditedHeaderName(e.target.value);\n        };\n\n        const handleHeaderNameBlur = () => {\n          if (\n            editingHeader &&\n            editedHeaderName.trim() &&\n            editedHeaderName !== editingHeader\n          ) {\n            // Rename the key in formData\n            const newFormData = { ...formData };\n            const value = newFormData[editingHeader];\n            delete newFormData[editingHeader];\n            newFormData[editedHeaderName.trim()] = value;\n            setFormData(newFormData);\n          }\n          setEditingHeader(null);\n          setEditedHeaderName('');\n        };\n\n        const handleHeaderNameKeyDown = (\n          e: React.KeyboardEvent<HTMLInputElement>,\n        ) => {\n          if (e.key === 'Enter') {\n            e.currentTarget.blur();\n          } else if (e.key === 'Escape') {\n            setEditingHeader(null);\n            setEditedHeaderName('');\n          }\n        };\n\n        const addNewProperty = (e: React.MouseEvent) => {\n          e.stopPropagation();\n          const newPropertyName = 'New Property';\n          // Check if this name already exists, if so add a number\n          let finalName = newPropertyName;\n          let counter = 1;\n          while (formData.hasOwnProperty(finalName)) {\n            finalName = `${newPropertyName} ${counter}`;\n            counter++;\n          }\n\n          setFormData((prev) => ({ ...prev, [finalName]: '' }));\n        };\n\n        // ------------------------------------------------------------------------\n        // SAVE LOGIC\n        // ------------------------------------------------------------------------\n        const performSave = React.useCallback(\n          (isManualSave: boolean = false) => {\n            if (!editor || isLoading || isSaving) return;\n\n            setIsSaving(true);\n\n            try {\n              const pos = getPos();\n              if (pos === undefined) return;\n\n              const originalHeaders = headers.map((h: any) => h.content);\n              const newHeaders = Object.keys(formData);\n              const newColumns = newHeaders.filter(\n                (header) => !originalHeaders.includes(header),\n              );\n\n              // Get the current table structure\n              const tableNode = editor.state.doc.nodeAt(pos);\n              if (!tableNode || !tableNode.content) return;\n\n              const table = tableNode.content.firstChild;\n              if (!table || table.type.name !== 'table') return;\n\n              // ------------------------------------------------------------------------\n              // ADD NEW COLUMNS FIRST\n              // ------------------------------------------------------------------------\n              if (newColumns.length > 0) {\n                // Position cursor in the HEADER row first to ensure proper column addition\n                const headerRow = table.content.child(0);\n                if (headerRow && headerRow.content.childCount > 0) {\n                  // Position at the last cell of the header row\n                  let headerPos = pos + 2; // Start of table\n                  const lastHeaderCellIndex = headerRow.content.childCount - 1;\n\n                  // Navigate to the last header cell\n                  for (let i = 0; i < lastHeaderCellIndex; i++) {\n                    const cell = headerRow.content.child(i);\n                    if (cell) headerPos += cell.nodeSize;\n                  }\n\n                  try {\n                    // Position inside the last header cell content\n                    const lastHeaderCell =\n                      headerRow.content.child(lastHeaderCellIndex);\n                    if (lastHeaderCell) {\n                      const cellContentPos = headerPos + 2; // +1 for cell wrapper, +1 for paragraph\n\n                      // Set focus within the BOM node's table before adding columns\n                      editor\n                        .chain()\n                        .focus()\n                        .setTextSelection(cellContentPos)\n                        .run();\n\n                      // Add columns one by one\n                      // We need to manually ensure header cells are created properly\n                      newColumns.forEach((columnName, index) => {\n                        `Adding column: ${columnName}`;\n\n                        // Use the editor's table commands directly\n                        // This bypasses the isInTable check in useTable hook\n                        const added = editor\n                          .chain()\n                          .focus()\n                          .addColumnAfter()\n                          .run();\n\n                        if (!added) {\n                          console.warn(\n                            `Failed to add column ${\n                              index + 1\n                            } for ${columnName}`,\n                          );\n                        }\n                      });\n\n                      // After adding columns, we need to convert the new cells in the first row to headers\n                      // Use queueMicrotask instead of setTimeout to avoid React flushSync errors\n                      queueMicrotask(() => {\n                        const updatedDoc = editor.state.doc;\n                        const updatedNode = updatedDoc.nodeAt(pos);\n                        if (!updatedNode || !updatedNode.content) return;\n\n                        const updatedTable = updatedNode.content.firstChild;\n                        if (!updatedTable || updatedTable.type.name !== 'table')\n                          return;\n\n                        const updatedHeaderRow = updatedTable.content.child(0);\n                        if (!updatedHeaderRow) return;\n\n                        // Convert any regular cells in the header row to tableHeader cells\n                        // IMPORTANT: Consolidate all replacements into a SINGLE transaction\n                        const tr = editor.state.tr;\n                        const headerType = editor.schema.nodes.tableHeader;\n                        const paragraphType = editor.schema.nodes.paragraph;\n\n                        if (!headerType || !paragraphType) return;\n\n                        let cellPos = pos + 2; // Start of first row\n                        const replacements: {\n                          from: number;\n                          to: number;\n                          headerCell: any;\n                        }[] = [];\n\n                        // First pass: collect all replacements with correct positions\n                        updatedHeaderRow.content.forEach((cell) => {\n                          if (cell.type.name === 'tableCell') {\n                            // Get the text content from the cell\n                            let cellText = '';\n                            cell.content.forEach((paragraph) => {\n                              if (paragraph.content) {\n                                paragraph.content.forEach((textNode) => {\n                                  if (textNode.text) cellText += textNode.text;\n                                });\n                              }\n                            });\n\n                            // Create a new header cell with the same content\n                            const paragraph = paragraphType.create(\n                              {},\n                              cellText ? editor.schema.text(cellText) : [],\n                            );\n                            const headerCell = headerType.create({}, paragraph);\n\n                            replacements.push({\n                              from: cellPos,\n                              to: cellPos + cell.nodeSize,\n                              headerCell,\n                            });\n                          }\n                          cellPos += cell.nodeSize;\n                        });\n\n                        // Second pass: apply all replacements in reverse order\n                        for (let i = replacements.length - 1; i >= 0; i--) {\n                          const { from, to, headerCell } = replacements[i];\n                          tr.replaceWith(from, to, headerCell);\n                        }\n\n                        // Dispatch only once with all changes\n                        if (replacements.length > 0) {\n                          editor.view.dispatch(tr);\n                        }\n                      });\n                    }\n                  } catch (error) {\n                    console.warn(\n                      'Could not set text selection for adding columns:',\n                      error,\n                    );\n                    // Fallback: try to add columns directly with editor commands\n                    newColumns.forEach(() => {\n                      editor.chain().focus().addColumnAfter().run();\n                    });\n                  }\n                }\n              }\n\n              // ------------------------------------------------------------------------\n              // UPDATE CELL CONTENT AFTER STRUCTURE CHANGES\n              // ------------------------------------------------------------------------\n              setTimeout(() => {\n                // Re-fetch the table after columns are added\n                const updatedTableNode = editor.state.doc.nodeAt(pos);\n                if (!updatedTableNode || !updatedTableNode.content) return;\n\n                const updatedTable = updatedTableNode.content.firstChild;\n                if (!updatedTable || updatedTable.type.name !== 'table') return;\n\n                // Update existing cells sequentially to avoid position conflicts\n                const updateExistingCell = (cellIndex: number) => {\n                  if (cellIndex >= originalHeaders.length) {\n                    // All existing cells updated, now handle new columns if any\n                    if (newColumns.length > 0) {\n                      // Start updating new columns after existing cells are done\n                      setTimeout(() => {\n                        updateColumn(0);\n                      }, 50);\n                    } else {\n                      // No new columns, complete save\n                      setIsSaving(false);\n                      if (isManualSave) {\n                        setTimeout(() => {\n                          closeSideMenu?.();\n                        }, 800);\n                      }\n                    }\n                    return;\n                  }\n\n                  const headerName = originalHeaders[cellIndex];\n                  const newValue = formData[headerName] || '';\n                  const currentValue = currentRow[cellIndex]?.content || '';\n\n                  if (newValue !== currentValue) {\n                    // Re-fetch table structure for accurate positioning\n                    const currentTableNode = editor.state.doc.nodeAt(pos);\n                    if (!currentTableNode || !currentTableNode.content) return;\n\n                    const currentTable = currentTableNode.content.firstChild;\n                    if (!currentTable || currentTable.type.name !== 'table')\n                      return;\n\n                    const targetRow = currentTable.content.child(rowIndex);\n                    if (targetRow && targetRow.type.name === 'tableRow') {\n                      const targetCell = targetRow.content.child(cellIndex);\n                      if (targetCell) {\n                        // Calculate exact position with fresh table structure\n                        let cellPos = pos + 2; // Start of table\n\n                        // Add size of all rows before target row\n                        for (let i = 0; i < rowIndex; i++) {\n                          const prevRow = currentTable.content.child(i);\n                          if (prevRow) cellPos += prevRow.nodeSize;\n                        }\n\n                        // Add size of all cells before target cell\n                        for (let i = 0; i < cellIndex; i++) {\n                          const prevCell = targetRow.content.child(i);\n                          if (prevCell) cellPos += prevCell.nodeSize;\n                        }\n\n                        const cellStart = cellPos + 1;\n                        const cellEnd = cellPos + targetCell.nodeSize - 1;\n\n                        editor\n                          .chain()\n                          .focus()\n                          .deleteRange({ from: cellStart, to: cellEnd })\n                          .insertContentAt(cellStart, newValue)\n                          .run();\n                      }\n                    }\n\n                    // Continue with next cell after a delay\n                    setTimeout(() => {\n                      updateExistingCell(cellIndex + 1);\n                    }, 50);\n                  } else {\n                    // No change needed, continue immediately\n                    updateExistingCell(cellIndex + 1);\n                  }\n                };\n\n                // Define the updateColumn function for new columns (used by updateExistingCell)\n                const updateColumn = (columnIndex: number) => {\n                  if (columnIndex >= newColumns.length) {\n                    // All columns updated, complete save\n                    setIsSaving(false);\n                    if (isManualSave) {\n                      setTimeout(() => {\n                        closeSideMenu?.();\n                      }, 800);\n                    }\n                    return;\n                  }\n\n                  const newColumnName = newColumns[columnIndex];\n                  const headerColIndex = originalHeaders.length + columnIndex;\n                  const newValue = formData[newColumnName] || '';\n\n                  // Re-fetch table structure for accurate positioning after previous updates\n                  const currentTableNode = editor.state.doc.nodeAt(pos);\n                  if (!currentTableNode || !currentTableNode.content) return;\n\n                  const currentTable = currentTableNode.content.firstChild;\n                  if (!currentTable || currentTable.type.name !== 'table')\n                    return;\n\n                  // Update header cell using fresh table structure\n                  const currentHeaderRow = currentTable.content.child(0);\n                  if (\n                    currentHeaderRow &&\n                    currentHeaderRow.type.name === 'tableRow'\n                  ) {\n                    // Check if the column exists before trying to access it\n                    if (headerColIndex >= currentHeaderRow.content.childCount) {\n                      console.warn(\n                        `Header column ${headerColIndex} doesn't exist yet, skipping update`,\n                      );\n                      // Continue with next column after a delay\n                      setTimeout(() => {\n                        updateColumn(columnIndex + 1);\n                      }, 200);\n                      return;\n                    }\n\n                    const headerCell =\n                      currentHeaderRow.content.child(headerColIndex);\n                    if (headerCell) {\n                      let headerCellPos = pos + 2;\n\n                      // Calculate position using exact column index with fresh structure\n                      for (let i = 0; i < headerColIndex; i++) {\n                        const prevCell = currentHeaderRow.content.child(i);\n                        if (prevCell) headerCellPos += prevCell.nodeSize;\n                      }\n\n                      const cellStart = headerCellPos + 1;\n                      const cellEnd = headerCellPos + headerCell.nodeSize - 1;\n\n                      // Ensure we have a column name to insert\n                      const columnNameToInsert =\n                        newColumnName || `Column ${headerColIndex + 1}`;\n\n                      editor\n                        .chain()\n                        .focus()\n                        .deleteRange({ from: cellStart, to: cellEnd })\n                        .insertContentAt(cellStart, columnNameToInsert)\n                        .run();\n                    }\n                  }\n\n                  // Wait a bit, then update data cell with fresh structure\n                  setTimeout(() => {\n                    // Re-fetch table again for data cell update\n                    const dataTableNode = editor.state.doc.nodeAt(pos);\n                    if (!dataTableNode || !dataTableNode.content) return;\n\n                    const dataTable = dataTableNode.content.firstChild;\n                    if (!dataTable || dataTable.type.name !== 'table') return;\n\n                    // Update data cell using fresh table structure\n                    const dataRow = dataTable.content.child(rowIndex);\n                    if (dataRow && dataRow.type.name === 'tableRow') {\n                      // Check if the column exists in the data row before trying to access it\n                      if (headerColIndex >= dataRow.content.childCount) {\n                        console.warn(\n                          `Data column ${headerColIndex} doesn't exist yet, skipping update`,\n                        );\n                        // Continue with next column after a delay\n                        setTimeout(() => {\n                          updateColumn(columnIndex + 1);\n                        }, 200);\n                        return;\n                      }\n\n                      const dataCell = dataRow.content.child(headerColIndex);\n                      if (dataCell) {\n                        let dataCellPos = pos + 2;\n\n                        // Skip to target row\n                        for (let i = 0; i < rowIndex; i++) {\n                          const prevRow = dataTable.content.child(i);\n                          if (prevRow) dataCellPos += prevRow.nodeSize;\n                        }\n\n                        // Calculate position using exact column index with fresh structure\n                        for (let i = 0; i < headerColIndex; i++) {\n                          const prevCell = dataRow.content.child(i);\n                          if (prevCell) dataCellPos += prevCell.nodeSize;\n                        }\n\n                        const cellStart = dataCellPos + 1;\n                        const cellEnd = dataCellPos + dataCell.nodeSize - 1;\n\n                        editor\n                          .chain()\n                          .focus()\n                          .deleteRange({ from: cellStart, to: cellEnd })\n                          .insertContentAt(cellStart, newValue)\n                          .run();\n                      }\n                    }\n\n                    // Continue with next column after a delay\n                    setTimeout(() => {\n                      updateColumn(columnIndex + 1);\n                    }, 50);\n                  }, 50);\n                };\n\n                // Start with updating existing cells first\n                updateExistingCell(0);\n              }, 500);\n            } catch (error) {\n              console.error('Error saving changes:', error);\n              // Make sure to reset state on error\n              setIsSaving(false);\n              // Only close on manual save error\n              if (isManualSave) {\n                closeSideMenu?.();\n              }\n            }\n          },\n          [\n            editor,\n            isLoading,\n            isSaving,\n            formData,\n            headers,\n            rowIndex,\n            getPos,\n            closeSideMenu,\n          ],\n        );\n\n        // Save on blur handler\n        const handleBlur = React.useCallback(() => {\n          if (isLoading || isSaving) return;\n          performSave(false); // Pass false to indicate blur save (won't close side menu)\n        }, [isLoading, isSaving, performSave]);\n\n        // ------------------------------------------------------------------------\n        // CANCEL HANDLER\n        // ------------------------------------------------------------------------\n        const cancelChanges = () => {\n          closeSideMenu?.();\n        };\n\n        // ------------------------------------------------------------------------\n        // RENDER LOADING STATE\n        // ------------------------------------------------------------------------\n        if (isLoading) {\n          return (\n            <div\n              style={{\n                padding: '1rem',\n                color: 'white',\n                maxHeight: '80vh',\n                overflowY: 'auto',\n                display: 'flex',\n                flexDirection: 'column',\n                alignItems: 'center',\n                justifyContent: 'center',\n                minHeight: '200px',\n              }}\n              onClick={(e) => e.stopPropagation()}\n            >\n              <div\n                style={{\n                  width: '20px',\n                  height: '20px',\n                  border: '2px solid #374151',\n                  borderTop: '2px solid #3b82f6',\n                  borderRadius: '50%',\n                  marginBottom: '1rem',\n                }}\n                className=\"loading-spinner\"\n              />\n              <p style={{ margin: 0, color: '#9ca3af', fontSize: '0.9rem' }}>\n                Loading row data...\n              </p>\n            </div>\n          );\n        }\n\n        // ------------------------------------------------------------------------\n        // RENDER MAIN FORM\n        // ------------------------------------------------------------------------\n        // RENDER MAIN FORM\n        return (\n          <div\n            style={{\n              display: 'flex',\n              flexDirection: 'column',\n              height: '100%',\n              minHeight: 0,\n            }}\n          >\n            {/* Scrollable content area */}\n            <div\n              style={{\n                flex: '1 1 auto',\n                overflowY: 'auto',\n                padding: '1.5rem',\n                minHeight: 0,\n              }}\n            >\n              <div className=\"space-y-6\">\n                {Object.entries(formData).map(([headerName, value]) => {\n                  const config = getColumnConfig(headerName);\n                  const isEditing = editingHeader === headerName;\n                  return (\n                    <div key={headerName}>\n                      {isEditing ? (\n                        <input\n                          type=\"text\"\n                          value={editedHeaderName}\n                          onChange={handleHeaderNameChange}\n                          onBlur={handleHeaderNameBlur}\n                          onKeyDown={handleHeaderNameKeyDown}\n                          autoFocus\n                          className=\"block mb-3 text-sm font-medium text-white/90 bg-transparent rounded px-2 py-1 focus:outline-none\"\n                          style={{ width: '100%', border: 'none' }}\n                        />\n                      ) : (\n                        <label\n                          className=\"block mb-3 text-sm font-medium text-white/90 capitalize cursor-pointer hover:text-white\"\n                          onDoubleClick={() =>\n                            handleHeaderDoubleClick(headerName)\n                          }\n                          title=\"Double-click to edit header name\"\n                        >\n                          {headerName}\n                        </label>\n                      )}\n                      <SmartInput\n                        value={value}\n                        onChange={(newValue) =>\n                          handleInputChange(headerName, newValue)\n                        }\n                        onBlur={handleBlur}\n                        config={config}\n                        columnName={headerName}\n                      />\n                    </div>\n                  );\n                })}\n              </div>\n            </div>\n\n            {/* Fixed bottom section */}\n            <div\n              style={{\n                flexShrink: 0,\n                display: 'flex',\n                alignItems: 'center',\n                justifyContent: 'space-between',\n                gap: '1rem',\n                padding: '1rem 1.5rem',\n                backgroundColor: '#0D0D0D',\n              }}\n            >\n              <button\n                onClick={(e) => addNewProperty(e)}\n                className=\"flex items-center gap-2 text-white/70 hover:text-white/90 text-sm font-medium transition-colors duration-200\"\n              >\n                <iconify-icon\n                  icon=\"hugeicons:property-add\"\n                  width=\"18\"\n                  height=\"18\"\n                />\n                New Property\n              </button>\n            </div>\n          </div>\n        );\n      };\n\n      // ============================================================================\n      // SIDEBAR HEADER & CONTENT CREATION\n      // ============================================================================\n      // Get the PartName from the current row for the header (use currentRow instead of formData)\n      const partNameValue = currentRow[0]?.content || '';\n\n      // Create custom header content with back arrow and part name\n      const customHeaderContent = (\n        <div className=\"w-full border-b border-[#313133]\">\n          <div className=\"flex items-center gap-3 px-6 py-4\">\n            <button\n              onClick={() => closeSideMenu?.()}\n              className=\"p-1 rounded hover:bg-[#1a1a1a] transition-colors\"\n              title=\"Back\"\n            >\n              <svg width={20} height={20} viewBox=\"0 0 24 24\" fill=\"white\">\n                <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" />\n              </svg>\n            </button>\n            <h3 className=\"text-white text-base font-medium\">\n              {partNameValue || 'Part Details'}\n            </h3>\n          </div>\n        </div>\n      );\n\n      // Open the sidebar with unified side menu (if available)\n      if (!openSideMenu) {\n        console.warn(\n          '[BomNodeView] Cannot open side menu - UnifiedSideMenuProvider not available',\n        );\n        return;\n      }\n\n      openSideMenu({\n        mode: 'bom',\n        children: (\n          <>\n            {customHeaderContent}\n            <BomRowEditor />\n          </>\n        ),\n        onClose: () => closeSideMenu?.(),\n      });\n    },\n    [\n      openSideMenu,\n      node,\n      editor,\n      getPos,\n      tableHook,\n      closeSideMenu,\n      sidebarIsOpen,\n    ],\n  );\n\n  // ============================================================================\n  // TABLE MANIPULATION HANDLERS\n  // ============================================================================\n  const handleAddRow = () => {\n    if (!editor || typeof getPos !== 'function') return;\n\n    const pos = getPos();\n    if (typeof pos !== 'number') return;\n\n    // Find the table node within this BOM node\n    const tableNode = node.content.firstChild;\n    if (!tableNode || tableNode.type.name !== 'table') {\n      console.warn('No table found in BOM node');\n      return;\n    }\n\n    let success = false;\n\n    // Strategy 1: Position at the end of the last row\n    if (tableNode.content.childCount > 0) {\n      const lastRow = tableNode.content.child(tableNode.content.childCount - 1);\n      if (lastRow && lastRow.type.name === 'tableRow') {\n        let lastRowPos = pos + 2; // Start of table\n\n        // Navigate to the last row\n        for (let i = 0; i < tableNode.content.childCount - 1; i++) {\n          const row = tableNode.content.child(i);\n          if (row) lastRowPos += row.nodeSize;\n        }\n\n        // Position at the end of the last row\n        const endOfLastRow = lastRowPos + lastRow.nodeSize - 1;\n        success = editor\n          .chain()\n          .focus()\n          .setTextSelection(endOfLastRow)\n          .addRowAfter()\n          .run();\n      }\n    }\n\n    // Strategy 2: If first strategy failed, try positioning at end of table\n    if (!success) {\n      const endOfTable = pos + tableNode.nodeSize - 1;\n      success = editor\n        .chain()\n        .focus()\n        .setTextSelection(endOfTable)\n        .addRowAfter()\n        .run();\n    }\n\n    // Strategy 3: If still failed, try using table commands directly\n    if (!success && editor.can().addRowAfter()) {\n      success = editor.chain().focus().addRowAfter().run();\n    }\n  };\n\n  const handleAddColumn = () => {\n    if (!editor || typeof getPos !== 'function') return;\n\n    const pos = getPos();\n    if (typeof pos !== 'number') return;\n\n    // Find the table node within this BOM node\n    const tableNode = node.content.firstChild;\n    if (!tableNode || tableNode.type.name !== 'table') {\n      console.warn('No table found in BOM node');\n      return;\n    }\n\n    // Get the first row to determine positioning\n    const firstRow = tableNode.content.firstChild;\n    if (!firstRow || firstRow.type.name !== 'tableRow') {\n      console.warn('No first row found in table');\n      return;\n    }\n\n    // Try multiple strategies to add column\n    let success = false;\n\n    // Strategy 1: Position in the last cell of first row\n    if (firstRow.content.childCount > 0) {\n      let cellPos = pos + 2; // Start of table content\n\n      // Navigate to the last cell in the first row\n      for (let i = 0; i < firstRow.content.childCount - 1; i++) {\n        const cell = firstRow.content.child(i);\n        if (cell) cellPos += cell.nodeSize;\n      }\n\n      // Position inside the last cell\n      const lastCell = firstRow.content.child(firstRow.content.childCount - 1);\n      if (lastCell) {\n        const insideCell = cellPos + 1; // Inside the cell content\n        success = editor\n          .chain()\n          .focus()\n          .setTextSelection(insideCell)\n          .addColumnAfter()\n          .run();\n      }\n    }\n\n    // Strategy 2: If first strategy failed, try positioning at end of table\n    if (!success) {\n      const endOfTable = pos + tableNode.nodeSize - 1;\n      success = editor\n        .chain()\n        .focus()\n        .setTextSelection(endOfTable)\n        .addColumnAfter()\n        .run();\n    }\n\n    // Strategy 3: If still failed, try using table commands directly\n    if (!success && editor.can().addColumnAfter()) {\n      success = editor.chain().focus().addColumnAfter().run();\n    }\n\n    if (success) {\n      // Don't set any styles here - let CSS handle it completely\n      // We'll only track the width for resize functionality after the column renders\n    } else {\n      console.warn('Failed to add column using all strategies');\n    }\n  };\n\n  const handleInsertRow = (index: number, position: 'above' | 'below') => {\n    if (!editor || typeof getPos !== 'function') return;\n\n    const pos = getPos();\n    if (typeof pos !== 'number') return;\n\n    const tableNode = node.content.firstChild;\n    if (!tableNode) return;\n\n    // Calculate the position within the specific row\n    let targetPos = pos + 2; // Start of table\n\n    // Navigate to the target row\n    for (let i = 0; i < index; i++) {\n      const row = tableNode.content.child(i);\n      if (row) targetPos += row.nodeSize;\n    }\n\n    // Get into the first cell of the target row\n    const targetRow = tableNode.content.child(index);\n    if (targetRow && targetRow.content.childCount > 0) {\n      targetPos += 1; // Move into the row's first cell\n\n      const success =\n        position === 'above'\n          ? editor\n              .chain()\n              .focus()\n              .setTextSelection(targetPos)\n              .addRowBefore()\n              .run()\n          : editor\n              .chain()\n              .focus()\n              .setTextSelection(targetPos)\n              .addRowAfter()\n              .run();\n\n      if (success) {\n        // Special handling for header row - consolidate into single transaction\n        if (index === 0 && position === 'above') {\n          // Convert new row to headers and old headers to regular cells in one transaction\n          queueMicrotask(() => {\n            const updatedDoc = editor.state.doc;\n            const updatedNode = updatedDoc.nodeAt(pos);\n            if (!updatedNode || !updatedNode.content) return;\n\n            const updatedTable = updatedNode.content.firstChild;\n            if (!updatedTable) return;\n\n            const newHeaderRow = updatedTable.content.child(0);\n            const oldHeaderRow = updatedTable.content.child(1);\n\n            if (!newHeaderRow || !oldHeaderRow) return;\n\n            // Create SINGLE transaction for both operations\n            const tr = editor.state.tr;\n            const cellType = editor.schema.nodes.tableCell;\n            const headerType = editor.schema.nodes.tableHeader;\n            const paragraphType = editor.schema.nodes.paragraph;\n\n            if (!cellType || !headerType || !paragraphType) return;\n\n            const allReplacements: {\n              from: number;\n              to: number;\n              newCell: any;\n            }[] = [];\n\n            // Collect new row cell-to-header conversions (these come first in reverse order)\n            let newRowPosition = pos + 2;\n            newHeaderRow.content.forEach((cell: any) => {\n              if (cell.type.name === 'tableCell') {\n                const paragraph = paragraphType.create({}, []);\n                const headerCell = headerType.create({}, paragraph);\n                allReplacements.push({\n                  from: newRowPosition,\n                  to: newRowPosition + cell.nodeSize,\n                  newCell: headerCell,\n                });\n              }\n              newRowPosition += cell.nodeSize;\n            });\n\n            // Collect old row header-to-cell conversions\n            let oldRowPosition = pos + 2 + newHeaderRow.nodeSize;\n            oldHeaderRow.content.forEach((cell: any) => {\n              if (cell.type.name === 'tableHeader') {\n                let cellText = '';\n                cell.content.forEach((paragraph: any) => {\n                  if (paragraph.content) {\n                    paragraph.content.forEach((textNode: any) => {\n                      if (textNode.text) cellText += textNode.text;\n                    });\n                  }\n                });\n\n                const paragraph = paragraphType.create(\n                  {},\n                  cellText ? editor.schema.text(cellText) : [],\n                );\n                const regularCell = cellType.create({}, paragraph);\n\n                allReplacements.push({\n                  from: oldRowPosition,\n                  to: oldRowPosition + cell.nodeSize,\n                  newCell: regularCell,\n                });\n              }\n              oldRowPosition += cell.nodeSize;\n            });\n\n            // Apply all replacements in reverse order\n            for (let i = allReplacements.length - 1; i >= 0; i--) {\n              const { from, to, newCell } = allReplacements[i];\n              tr.replaceWith(from, to, newCell);\n            }\n\n            // Single dispatch with all changes (both header conversion operations)\n            if (allReplacements.length > 0) {\n              editor.view.dispatch(tr);\n            }\n          });\n        }\n      } else {\n        console.warn(`Failed to insert row ${position} row ${index}`);\n      }\n    }\n  };\n\n  const handleInsertColumn = (index: number, position: 'left' | 'right') => {\n    if (!editor || typeof getPos !== 'function') return;\n\n    const pos = getPos();\n    if (typeof pos !== 'number') return;\n\n    const tableNode = node.content.firstChild;\n    if (!tableNode || !tableNode.content.firstChild) return;\n\n    const firstRow = tableNode.content.firstChild;\n\n    // Calculate the position of the target cell in the first row\n    let cellPos = pos + 2; // Start of first row\n\n    if (position === 'left') {\n      // For insert left, position at the beginning of the target cell\n      for (let i = 0; i < index; i++) {\n        const cell = firstRow.content.child(i);\n        if (cell) cellPos += cell.nodeSize;\n      }\n\n      // Position inside the target cell and add column before\n      editor\n        .chain()\n        .focus()\n        .setTextSelection(cellPos + 1)\n        .addColumnBefore()\n        .run();\n    } else {\n      // For insert right, position at the end of the target cell\n      for (let i = 0; i < index; i++) {\n        const cell = firstRow.content.child(i);\n        if (cell) cellPos += cell.nodeSize;\n      }\n\n      // Get the target cell and position inside it\n      const targetCell = firstRow.content.child(index);\n      if (targetCell) {\n        // Position near the end of the target cell's content\n        editor\n          .chain()\n          .focus()\n          .setTextSelection(cellPos + targetCell.nodeSize - 2)\n          .addColumnAfter()\n          .run();\n      }\n    }\n\n    // Ensure the header row has header cells for new columns\n    // Use queueMicrotask instead of setTimeout to avoid React flushSync errors\n    queueMicrotask(() => {\n      const updatedDoc = editor.state.doc;\n      const updatedNode = updatedDoc.nodeAt(pos);\n      if (!updatedNode || !updatedNode.content) return;\n\n      const updatedTable = updatedNode.content.firstChild;\n      if (!updatedTable) return;\n\n      const headerRow = updatedTable.content.child(0);\n      if (!headerRow) return;\n\n      // Find and convert any regular cells in the header row to header cells\n      // IMPORTANT: Consolidate all replacements into a SINGLE transaction\n      const tr = editor.state.tr;\n      const headerType = editor.schema.nodes.tableHeader;\n      const paragraphType = editor.schema.nodes.paragraph;\n\n      if (!headerType || !paragraphType) return;\n\n      let cellPosition = pos + 2;\n      const replacements: { from: number; to: number; headerCell: any }[] = [];\n\n      // First pass: collect all the replacements with correct positions\n      headerRow.content.forEach((cell) => {\n        if (cell.type.name === 'tableCell') {\n          // Extract existing text content from the cell\n          let cellText = '';\n          cell.content.forEach((paragraph) => {\n            if (paragraph.content) {\n              paragraph.content.forEach((textNode) => {\n                if (textNode.text) cellText += textNode.text;\n              });\n            }\n          });\n\n          // Create header cell with preserved content\n          const paragraph = paragraphType.create(\n            {},\n            cellText ? editor.schema.text(cellText) : [],\n          );\n          const headerCell = headerType.create({}, paragraph);\n          replacements.push({\n            from: cellPosition,\n            to: cellPosition + cell.nodeSize,\n            headerCell,\n          });\n        }\n        cellPosition += cell.nodeSize;\n      });\n\n      // Second pass: apply all replacements in reverse order to maintain position validity\n      // Reverse order ensures that later positions don't get invalidated by earlier replacements\n      for (let i = replacements.length - 1; i >= 0; i--) {\n        const { from, to, headerCell } = replacements[i];\n        tr.replaceWith(from, to, headerCell);\n      }\n\n      // Dispatch only once with all changes\n      if (replacements.length > 0) {\n        editor.view.dispatch(tr);\n      }\n    });\n  };\n\n  const handleDeleteRow = (index: number) => {\n    if (!editor || typeof getPos !== 'function') return;\n\n    const pos = getPos();\n    if (typeof pos !== 'number') return;\n\n    const tableNode = node.content.firstChild;\n    if (!tableNode) return;\n\n    if (tableNode.content.childCount <= 2) {\n      console.warn('Cannot delete row - need at least header + 1 row');\n      return; // Keep at least header + 1 row\n    }\n\n    // Navigate to the target row\n    let rowPos = pos + 2; // Start of table\n    for (let i = 0; i < index; i++) {\n      const row = tableNode.content.child(i);\n      if (row) rowPos += row.nodeSize;\n    }\n\n    // Get into the first cell of the target row\n    const targetRow = tableNode.content.child(index);\n    if (targetRow && targetRow.content.childCount > 0) {\n      rowPos += 1; // Move into the first cell\n\n      const success = editor\n        .chain()\n        .focus()\n        .setTextSelection(rowPos)\n        .deleteRow()\n        .run();\n\n      if (success) {\n        // Clear active cell since the row is deleted\n        if (activeCell && activeCell.row === index) {\n          setActiveCell(null);\n        } else if (activeCell && activeCell.row > index) {\n          // Adjust active cell row if it's after the deleted row\n          setActiveCell({ row: activeCell.row - 1, col: activeCell.col });\n        }\n      } else {\n        console.warn(`Failed to delete row ${index}`);\n      }\n    }\n  };\n\n  const handleDeleteColumn = (index: number) => {\n    if (!editor || typeof getPos !== 'function') return;\n\n    const pos = getPos();\n    if (typeof pos !== 'number') return;\n\n    const tableNode = node.content.firstChild;\n    if (!tableNode || !tableNode.content.firstChild) return;\n\n    const firstRow = tableNode.content.firstChild;\n    if (firstRow.content.childCount <= 1) {\n      console.warn('Cannot delete last column');\n      return; // Keep at least 1 column\n    }\n\n    // Position cursor in the target column of the first row\n    let cellPos = pos + 2; // Start of first row\n\n    // Navigate to the exact cell in the first row\n    for (let i = 0; i < index; i++) {\n      const cell = firstRow.content.child(i);\n      if (cell) cellPos += cell.nodeSize;\n    }\n\n    // Position inside the target cell\n    const targetCell = firstRow.content.child(index);\n    if (targetCell) {\n      cellPos += 1; // Move inside the cell\n\n      const success = editor\n        .chain()\n        .focus()\n        .setTextSelection(cellPos)\n        .deleteColumn()\n        .run();\n\n      if (success) {\n        // Clear active cell since the column is deleted\n        if (activeCell && activeCell.col === index) {\n          setActiveCell(null);\n        } else if (activeCell && activeCell.col > index) {\n          // Adjust active cell column if it's after the deleted column\n          setActiveCell({ row: activeCell.row, col: activeCell.col - 1 });\n        }\n      } else {\n        console.warn(`Failed to delete column ${index}`);\n      }\n    }\n  };\n\n  const handleClearRow = (index: number) => {\n    // Execution guard to prevent double-clicks\n    if (isExecutingRef.current) return;\n    isExecutingRef.current = true;\n\n    try {\n      if (!editor || typeof getPos !== 'function') return;\n\n      const pos = getPos();\n      if (typeof pos !== 'number') return;\n\n      // Clear all cells in the row (except headers) using single transaction\n      const tableNode = node.content.firstChild;\n      if (tableNode && index > 0) {\n        // Don't clear header row\n        const targetRow = tableNode.content.child(index);\n        if (targetRow) {\n          let cellPos = pos + 1;\n          for (let i = 0; i < index; i++) {\n            const row = tableNode.content.child(i);\n            if (row) cellPos += row.nodeSize;\n          }\n          cellPos += 1; // Enter the row\n\n          // Create single transaction and collect all deletions\n          const tr = editor.state.tr;\n          const deletions: { from: number; to: number }[] = [];\n\n          targetRow.content.forEach((cell) => {\n            const cellStart = cellPos + 1; // Inside the cell\n            const cellEnd = cellPos + cell.nodeSize - 1; // Before closing tag\n            deletions.push({ from: cellStart, to: cellEnd });\n            cellPos += cell.nodeSize;\n          });\n\n          // Apply all deletions in reverse order\n          for (let i = deletions.length - 1; i >= 0; i--) {\n            const { from, to } = deletions[i];\n            tr.deleteRange(from, to);\n          }\n\n          // Single dispatch\n          if (deletions.length > 0) {\n            editor.view.dispatch(tr);\n          }\n        }\n      }\n    } finally {\n      isExecutingRef.current = false;\n    }\n  };\n\n  const handleDuplicateRow = (index: number) => {\n    // Execution guard to prevent double-clicks\n    if (isExecutingRef.current) return;\n    isExecutingRef.current = true;\n\n    if (!editor || typeof getPos !== 'function') {\n      isExecutingRef.current = false;\n      return;\n    }\n\n    const pos = getPos();\n    if (typeof pos !== 'number') {\n      isExecutingRef.current = false;\n      return;\n    }\n\n    const tableNode = node.content.firstChild;\n    if (!tableNode || index >= tableNode.content.childCount) {\n      isExecutingRef.current = false;\n      return;\n    }\n\n    const sourceRow = tableNode.content.child(index);\n    if (!sourceRow) {\n      isExecutingRef.current = false;\n      return;\n    }\n\n    // Position cursor in the source row\n    let rowPos = pos + 2;\n    for (let i = 0; i < index; i++) {\n      const row = tableNode.content.child(i);\n      if (row) rowPos += row.nodeSize;\n    }\n\n    // Move into first cell of the row\n    rowPos += 1;\n\n    // Add row after the current one\n    const success = editor\n      .chain()\n      .focus()\n      .setTextSelection(rowPos)\n      .addRowAfter()\n      .run();\n\n    if (!success) {\n      console.warn('Failed to add row for duplication');\n      isExecutingRef.current = false;\n      return;\n    }\n\n    // Copy content from source row to new row using single transaction\n    queueMicrotask(() => {\n      try {\n        const updatedTableNode = editor.state.doc.nodeAt(pos);\n        if (!updatedTableNode || !updatedTableNode.content) return;\n\n        const updatedTable = updatedTableNode.content.firstChild;\n        if (!updatedTable) return;\n\n        const newRowIndex = index + 1;\n        if (newRowIndex >= updatedTable.content.childCount) {\n          console.warn('New row index out of bounds');\n          return;\n        }\n\n        const newRow = updatedTable.content.child(newRowIndex);\n        if (!newRow) return;\n\n        // Create single transaction\n        const tr = editor.state.tr;\n        const replacements: { from: number; to: number; content: string }[] =\n          [];\n\n        // Collect all cell replacements\n        const cellCount = Math.min(\n          sourceRow.content.childCount,\n          newRow.content.childCount,\n        );\n        for (let cellIndex = 0; cellIndex < cellCount; cellIndex++) {\n          const sourceCell = sourceRow.content.child(cellIndex);\n          if (!sourceCell) continue;\n\n          let cellContent = '';\n          if (sourceCell.content && sourceCell.content.size > 0) {\n            sourceCell.content.forEach((paragraph: any) => {\n              if (paragraph.content && paragraph.content.size > 0) {\n                paragraph.content.forEach((textNode: any) => {\n                  if (textNode.text) cellContent += textNode.text;\n                });\n              }\n            });\n          }\n\n          if (cellContent) {\n            // Calculate position for the new cell\n            let newCellPos = pos + 2;\n            for (let i = 0; i < newRowIndex; i++) {\n              const r = updatedTable.content.child(i);\n              if (r) newCellPos += r.nodeSize;\n            }\n            for (let i = 0; i < cellIndex; i++) {\n              const c = newRow.content.child(i);\n              if (c) newCellPos += c.nodeSize;\n            }\n\n            const targetCell = newRow.content.child(cellIndex);\n            if (targetCell) {\n              const cellStart = newCellPos + 1;\n              const cellEnd = newCellPos + targetCell.nodeSize - 1;\n              replacements.push({\n                from: cellStart,\n                to: cellEnd,\n                content: cellContent,\n              });\n            }\n          }\n        }\n\n        // Apply all replacements in reverse order in single transaction\n        for (let i = replacements.length - 1; i >= 0; i--) {\n          const { from, to, content } = replacements[i];\n          tr.deleteRange(from, to);\n          tr.insertText(content, from);\n        }\n\n        // Single dispatch\n        if (replacements.length > 0) {\n          editor.view.dispatch(tr);\n        }\n      } finally {\n        isExecutingRef.current = false;\n      }\n    });\n  };\n\n  const handleDuplicateColumn = (index: number) => {\n    // Execution guard to prevent double-clicks\n    if (isExecutingRef.current) return;\n    isExecutingRef.current = true;\n\n    if (!editor || typeof getPos !== 'function') {\n      isExecutingRef.current = false;\n      return;\n    }\n\n    const pos = getPos();\n    if (typeof pos !== 'number') {\n      isExecutingRef.current = false;\n      return;\n    }\n\n    const tableNode = node.content.firstChild;\n    if (!tableNode) {\n      isExecutingRef.current = false;\n      return;\n    }\n\n    const firstRow = tableNode.content.firstChild;\n    if (!firstRow || index >= firstRow.content.childCount) {\n      console.warn('Column index out of bounds');\n      isExecutingRef.current = false;\n      return;\n    }\n\n    // Position cursor in the target column of first row\n    let cellPos = pos + 2;\n    for (let i = 0; i < index; i++) {\n      const cell = firstRow.content.child(i);\n      if (cell) cellPos += cell.nodeSize;\n    }\n\n    const targetCell = firstRow.content.child(index);\n    if (!targetCell) {\n      isExecutingRef.current = false;\n      return;\n    }\n\n    // Move inside the cell\n    cellPos += 1;\n\n    // Add column after the current one\n    const success = editor\n      .chain()\n      .focus()\n      .setTextSelection(cellPos)\n      .addColumnAfter()\n      .run();\n\n    if (!success) {\n      console.warn('Failed to add column for duplication');\n      isExecutingRef.current = false;\n      return;\n    }\n\n    // Copy content from source column to new column using single transaction\n    queueMicrotask(() => {\n      try {\n        const updatedTableNode = editor.state.doc.nodeAt(pos);\n        if (!updatedTableNode || !updatedTableNode.content) return;\n\n        const updatedTable = updatedTableNode.content.firstChild;\n        if (!updatedTable) return;\n\n        const newColIndex = index + 1;\n\n        // Create single transaction for all operations\n        const tr = editor.state.tr;\n        const cellReplacements: {\n          from: number;\n          to: number;\n          content: string;\n        }[] = [];\n\n        // Collect all cell content replacements\n        const rowCount = Math.min(\n          tableNode.content.childCount,\n          updatedTable.content.childCount,\n        );\n        for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n          const sourceRow = tableNode.content.child(rowIndex);\n          const targetRow = updatedTable.content.child(rowIndex);\n\n          if (!sourceRow || !targetRow) continue;\n          if (index >= sourceRow.content.childCount) continue;\n          if (newColIndex >= targetRow.content.childCount) continue;\n\n          const sourceCell = sourceRow.content.child(index);\n          if (!sourceCell) continue;\n\n          let cellContent = '';\n          if (sourceCell.content && sourceCell.content.size > 0) {\n            sourceCell.content.forEach((paragraph: any) => {\n              if (paragraph.content && paragraph.content.size > 0) {\n                paragraph.content.forEach((textNode: any) => {\n                  if (textNode.text) cellContent += textNode.text;\n                });\n              }\n            });\n          }\n\n          if (cellContent) {\n            // Calculate position for the new cell\n            let newCellPos = pos + 2;\n            for (let i = 0; i < rowIndex; i++) {\n              const r = updatedTable.content.child(i);\n              if (r) newCellPos += r.nodeSize;\n            }\n            for (let i = 0; i < newColIndex; i++) {\n              const c = targetRow.content.child(i);\n              if (c) newCellPos += c.nodeSize;\n            }\n\n            const targetCell = targetRow.content.child(newColIndex);\n            if (targetCell) {\n              const cellStart = newCellPos + 1;\n              const cellEnd = newCellPos + targetCell.nodeSize - 1;\n              cellReplacements.push({\n                from: cellStart,\n                to: cellEnd,\n                content: cellContent,\n              });\n            }\n          }\n        }\n\n        // Apply all cell content replacements in reverse order\n        for (let i = cellReplacements.length - 1; i >= 0; i--) {\n          const { from, to, content } = cellReplacements[i];\n          tr.deleteRange(from, to);\n          tr.insertText(content, from);\n        }\n\n        // Ensure header cells in first row - add to same transaction\n        const headerRow = updatedTable.content.child(0);\n        if (headerRow) {\n          const headerType = editor.schema.nodes.tableHeader;\n          const paragraphType = editor.schema.nodes.paragraph;\n\n          if (headerType && paragraphType) {\n            let cellPosition = pos + 2;\n            const headerReplacements: {\n              from: number;\n              to: number;\n              headerCell: any;\n            }[] = [];\n\n            // Collect header cell replacements\n            headerRow.content.forEach((cell) => {\n              if (cell.type.name === 'tableCell') {\n                let cellText = '';\n                cell.content.forEach((paragraph) => {\n                  if (paragraph.content) {\n                    paragraph.content.forEach((textNode) => {\n                      if (textNode.text) cellText += textNode.text;\n                    });\n                  }\n                });\n\n                const paragraph = paragraphType.create(\n                  {},\n                  cellText ? editor.schema.text(cellText) : [],\n                );\n                const headerCell = headerType.create({}, paragraph);\n\n                headerReplacements.push({\n                  from: cellPosition,\n                  to: cellPosition + cell.nodeSize,\n                  headerCell,\n                });\n              }\n              cellPosition += cell.nodeSize;\n            });\n\n            // Apply header replacements in reverse order\n            for (let i = headerReplacements.length - 1; i >= 0; i--) {\n              const { from, to, headerCell } = headerReplacements[i];\n              tr.replaceWith(from, to, headerCell);\n            }\n          }\n        }\n\n        // Single dispatch with all changes (cell content + header conversion)\n        if (cellReplacements.length > 0 || tr.steps.length > 0) {\n          editor.view.dispatch(tr);\n        }\n      } finally {\n        isExecutingRef.current = false;\n      }\n    });\n  };\n\n  const handleClearCell = (rowIndex: number, colIndex: number) => {\n    if (!editor || typeof getPos !== 'function') return;\n\n    const pos = getPos();\n    if (typeof pos !== 'number') return;\n\n    const tableNode = node.content.firstChild;\n    if (!tableNode) return;\n\n    const targetRow = tableNode.content.child(rowIndex);\n    if (!targetRow) return;\n\n    const targetCell = targetRow.content.child(colIndex);\n    if (!targetCell) return;\n\n    // Calculate cell position\n    let cellPos = pos + 2;\n    for (let i = 0; i < rowIndex; i++) {\n      const row = tableNode.content.child(i);\n      if (row) cellPos += row.nodeSize;\n    }\n    for (let i = 0; i < colIndex; i++) {\n      const cell = targetRow.content.child(i);\n      if (cell) cellPos += cell.nodeSize;\n    }\n\n    // Check if this is a header cell\n    const isHeaderCell = targetCell.type.name === 'tableHeader';\n\n    if (isHeaderCell) {\n      // For header cells, replace with empty header cell to preserve structure\n      const tr = editor.state.tr;\n      const headerType = editor.schema.nodes.tableHeader;\n      const paragraphType = editor.schema.nodes.paragraph;\n\n      if (headerType && paragraphType) {\n        const emptyParagraph = paragraphType.create({}, []);\n        const emptyHeaderCell = headerType.create({}, emptyParagraph);\n        tr.replaceWith(cellPos, cellPos + targetCell.nodeSize, emptyHeaderCell);\n        editor.view.dispatch(tr);\n      }\n    } else {\n      // For regular cells, just clear content\n      const cellStart = cellPos + 1;\n      const cellEnd = cellPos + targetCell.nodeSize - 1;\n\n      editor\n        .chain()\n        .focus()\n        .deleteRange({ from: cellStart, to: cellEnd })\n        .insertContentAt(cellStart, '')\n        .run();\n    }\n  };\n\n  const handleClearColumn = (index: number) => {\n    // Execution guard to prevent double-clicks\n    if (isExecutingRef.current) return;\n    isExecutingRef.current = true;\n\n    try {\n      if (!editor || typeof getPos !== 'function') return;\n\n      const pos = getPos();\n      if (typeof pos !== 'number') return;\n\n      // Clear all cells in the column (except headers) using single transaction\n      const tableNode = node.content.firstChild;\n      if (tableNode) {\n        // Create single transaction and collect all deletions\n        const tr = editor.state.tr;\n        const deletions: { from: number; to: number }[] = [];\n\n        tableNode.content.forEach((row: any, rowIndex: number) => {\n          if (rowIndex > 0) {\n            // Don't clear header row\n            const targetCell = row.content.child(index);\n            if (targetCell) {\n              let cellPos = pos + 1;\n              for (let i = 0; i < rowIndex; i++) {\n                const r = tableNode.content.child(i);\n                if (r) cellPos += r.nodeSize;\n              }\n              cellPos += 1; // Enter the row\n              for (let i = 0; i < index; i++) {\n                const c = row.content.child(i);\n                if (c) cellPos += c.nodeSize;\n              }\n\n              const cellStart = cellPos + 1; // Inside the cell\n              const cellEnd = cellPos + targetCell.nodeSize - 1; // Before closing tag\n              deletions.push({ from: cellStart, to: cellEnd });\n            }\n          }\n        });\n\n        // Apply all deletions in reverse order\n        for (let i = deletions.length - 1; i >= 0; i--) {\n          const { from, to } = deletions[i];\n          tr.deleteRange(from, to);\n        }\n\n        // Single dispatch\n        if (deletions.length > 0) {\n          editor.view.dispatch(tr);\n        }\n      }\n    } finally {\n      isExecutingRef.current = false;\n    }\n  };\n\n  // ============================================================================\n  // RESIZE HANDLERS\n  // ============================================================================\n  const handleMouseDown = React.useCallback(\n    (e: React.MouseEvent) => {\n      e.preventDefault();\n      setIsResizing(true);\n\n      const startX = e.clientX;\n      const startWidth = containerRef.current?.offsetWidth || 0;\n      const wrapperElement = containerRef.current?.parentElement as HTMLElement;\n\n      const handleMouseMove = (e: MouseEvent) => {\n        const deltaX = e.clientX - startX;\n        const newWidth = Math.max(300, startWidth + deltaX); // Min width 300px\n\n        // Directly update DOM for immediate visual feedback\n        if (wrapperElement) {\n          wrapperElement.style.width = `${newWidth}px`;\n        }\n      };\n\n      const handleMouseUp = () => {\n        setIsResizing(false);\n        document.removeEventListener('mousemove', handleMouseMove);\n        document.removeEventListener('mouseup', handleMouseUp);\n\n        // Get final width from DOM and update state\n        const finalWidth = wrapperElement?.offsetWidth || startWidth;\n        setTableWidth(finalWidth);\n\n        // Save the width to node attrs\n        if (editor && getPos) {\n          const pos = getPos();\n          if (typeof pos === 'number') {\n            // Use a transaction to ensure the update is saved\n            const tr = editor.state.tr;\n            tr.setNodeMarkup(pos, undefined, {\n              ...node.attrs,\n              width: finalWidth,\n            });\n            editor.view.dispatch(tr);\n          }\n        }\n      };\n\n      document.addEventListener('mousemove', handleMouseMove);\n      document.addEventListener('mouseup', handleMouseUp);\n    },\n    [editor, getPos],\n  );\n\n  // Use refs to avoid recreating the callback\n  const columnWidthsRef = React.useRef(columnWidths);\n  const editorRef = React.useRef(editor);\n  const getPosRef = React.useRef(getPos);\n\n  React.useEffect(() => {\n    columnWidthsRef.current = columnWidths;\n    editorRef.current = editor;\n    getPosRef.current = getPos;\n  }, [columnWidths, editor, getPos]);\n\n  // Column resize handler with direct DOM manipulation for performance\n  const handleColumnMouseDown = React.useCallback(\n    (e: React.MouseEvent, columnIndex: number) => {\n      e.preventDefault();\n      e.stopPropagation();\n      setResizingColumn(columnIndex);\n\n      // Set cursor and prevent selection during resize\n      document.body.style.cursor = 'ew-resize';\n      document.body.style.userSelect = 'none';\n\n      const startX = e.clientX;\n      let startWidths = [...columnWidthsRef.current];\n\n      // Initialize column widths if not set\n      if (startWidths.length === 0 && tableRef.current) {\n        const cells = tableRef.current.querySelectorAll('th');\n        cells.forEach((cell) => {\n          startWidths.push(cell.getBoundingClientRect().width);\n        });\n        setColumnWidths(startWidths);\n      }\n\n      // Handle left border of first column (columnIndex === -1)\n      const isLeftBorderResize = columnIndex === -1;\n      const targetColumnIndex = isLeftBorderResize ? 0 : columnIndex;\n\n      // Get the col element for direct manipulation\n      const getColElement = () => {\n        if (!tableRef.current) return null;\n        const colgroup = tableRef.current.querySelector('colgroup');\n        if (!colgroup) return null;\n        return colgroup.children[targetColumnIndex] as HTMLElement;\n      };\n\n      const colElement = getColElement();\n      const initialWidth = startWidths[targetColumnIndex] || 100;\n\n      // Use requestAnimationFrame for smoother resize\n      let rafId: number | null = null;\n      let isResizing = true;\n\n      const handleMouseMove = (e: MouseEvent) => {\n        // Check if mouse button is released (buttons === 0 means no buttons pressed)\n        if (e.buttons === 0) {\n          handleMouseUp();\n          return;\n        }\n\n        if (!isResizing || rafId) return; // Skip if already scheduled or not resizing\n\n        rafId = requestAnimationFrame(() => {\n          if (!isResizing) return; // Double-check we're still resizing\n\n          const deltaX = e.clientX - startX;\n          // Reverse delta for left border resize (dragging left decreases width, dragging right increases)\n          const effectiveDelta = isLeftBorderResize ? -deltaX : deltaX;\n          const newWidth = Math.max(30, initialWidth + effectiveDelta); // Min width 30px\n\n          // Directly update col element for immediate visual feedback\n          if (colElement) {\n            colElement.style.width = `${newWidth}px`;\n          }\n\n          rafId = null;\n        });\n      };\n\n      const handleMouseUp = () => {\n        isResizing = false; // Stop resizing immediately\n        setResizingColumn(null);\n\n        // Cancel any pending animation frame\n        if (rafId) {\n          cancelAnimationFrame(rafId);\n          rafId = null;\n        }\n\n        // Restore cursor and selection\n        document.body.style.cursor = '';\n        document.body.style.userSelect = '';\n\n        // IMPORTANT: Remove event listeners immediately\n        document.removeEventListener('mousemove', handleMouseMove);\n        document.removeEventListener('mouseup', handleMouseUp);\n\n        // Blur any focused elements to clear focus state\n        if (document.activeElement instanceof HTMLElement) {\n          document.activeElement.blur();\n        }\n\n        // Calculate final widths from col elements and update state\n        if (tableRef.current) {\n          const colgroup = tableRef.current.querySelector('colgroup');\n          const finalWidths: number[] = [];\n          if (colgroup) {\n            Array.from(colgroup.children).forEach((col) => {\n              const colElement = col as HTMLElement;\n              // Get width from style or compute from actual width\n              const width = colElement.style.width\n                ? parseInt(colElement.style.width)\n                : colElement.getBoundingClientRect().width;\n              finalWidths.push(width);\n            });\n          }\n          setColumnWidths(finalWidths);\n\n          // Save column widths to node attrs using refs\n          const currentEditor = editorRef.current;\n          const currentGetPos = getPosRef.current;\n          if (currentEditor && currentGetPos) {\n            const pos = currentGetPos();\n            if (typeof pos === 'number') {\n              // Use a transaction to ensure the update is saved\n              const tr = currentEditor.state.tr;\n              tr.setNodeMarkup(pos, undefined, {\n                ...node.attrs,\n                columnWidths: finalWidths,\n              });\n              currentEditor.view.dispatch(tr);\n            }\n          }\n        }\n      };\n\n      document.addEventListener('mousemove', handleMouseMove);\n      document.addEventListener('mouseup', handleMouseUp);\n    },\n    [], // Empty deps - we use refs for all dependencies\n  );\n\n  // Initialize table width and column widths from node attrs\n  React.useEffect(() => {\n    if (node.attrs.width) {\n      setTableWidth(node.attrs.width);\n    }\n    if (node.attrs.columnWidths && node.attrs.columnWidths.length > 0) {\n      setColumnWidths(node.attrs.columnWidths);\n    }\n  }, [node.attrs.width, node.attrs.columnWidths]);\n\n  // No need to apply widths to individual cells - colgroup handles this automatically\n\n  // Initialize column widths on table creation\n  React.useEffect(() => {\n    if (!tableContent || !tableRef.current) return;\n\n    const actualColumns = tableRef.current.querySelectorAll('th').length;\n    const trackedColumns = columnWidths.length;\n\n    // Only update if column count changed\n    if (actualColumns !== trackedColumns) {\n      const newWidths: number[] = [];\n\n      // If no column widths saved, initialize each column to 150px\n      if (!node.attrs.columnWidths || node.attrs.columnWidths.length === 0) {\n        for (let i = 0; i < actualColumns; i++) {\n          newWidths.push(150);\n        }\n      } else {\n        // Otherwise, use existing widths and add 150px for new columns\n        const cells = tableRef.current.querySelectorAll('th');\n        cells.forEach((cell, index) => {\n          const width = node.attrs.columnWidths?.[index] || 150;\n          newWidths.push(width);\n        });\n      }\n\n      if (newWidths.length > 0) {\n        setColumnWidths(newWidths);\n        // Persist to node attrs\n        // Use queueMicrotask to avoid React flushSync errors when dispatching from useEffect\n        queueMicrotask(() => {\n          const pos = getPos();\n          if (typeof pos === 'number') {\n            const tr = editor.state.tr;\n            tr.setNodeMarkup(pos, undefined, {\n              ...node.attrs,\n              columnWidths: newWidths,\n            });\n            editor.view.dispatch(tr);\n          }\n        });\n      }\n    }\n  }, [tableContent]);\n\n  // ============================================================================\n  // TABLE CONTENT INITIALIZATION EFFECT\n  // ============================================================================\n  React.useEffect(() => {\n    // Extract from table structure\n    if (node && node.content && node.content.size > 0) {\n      const tableNode = node.content.firstChild;\n      if (tableNode && tableNode.type.name === 'table') {\n        const rows: any[] = [];\n\n        tableNode.content.forEach((rowNode: any, rowIndex: number) => {\n          const cells: any[] = [];\n          rowNode.content.forEach((cellNode: any, cellIndex: number) => {\n            // All cells in the first row are headers, regardless of their actual node type\n            // This ensures we correctly identify headers even if they were added as regular cells\n            const isHeader = rowIndex === 0;\n            let textContent = '';\n\n            // Extract text content from paragraphs\n            if (cellNode.content && cellNode.content.size > 0) {\n              cellNode.content.forEach((paragraphNode: any) => {\n                if (paragraphNode.content && paragraphNode.content.size > 0) {\n                  paragraphNode.content.forEach((textNode: any) => {\n                    if (textNode.text) {\n                      textContent += textNode.text;\n                    }\n                  });\n                }\n              });\n            }\n\n            cells.push({\n              isHeader,\n              content: textContent,\n              rowIndex,\n              colIndex: cellIndex,\n            });\n          });\n          rows.push(cells);\n        });\n\n        setTableContent(rows);\n      }\n    }\n  }, [node.content]);\n\n  // ============================================================================\n  // RENDER COMPONENT\n  // ============================================================================\n  return (\n    <NodeViewWrapper\n      style={{\n        position: 'relative',\n        minHeight: '100px', // Ensure the wrapper maintains space in document flow\n        margin: '1rem 0',\n        ...HTMLAttributes?.style,\n      }}\n      contentEditable={false}\n      {...HTMLAttributes}\n      onMouseDown={(e: React.MouseEvent) => {\n        // Prevent node selection when clicking anywhere in the BOM\n        e.stopPropagation();\n      }}\n      onClick={(e: React.MouseEvent) => {\n        // Prevent node selection on click\n        e.stopPropagation();\n      }}\n    >\n      <div\n        className={`relative w-full h-full max-w-[100%]`}\n        onMouseDown={(e) => e.stopPropagation()}\n        onMouseUp={(e) => e.stopPropagation()}\n        onClick={(e) => e.stopPropagation()}\n        style={{ userSelect: 'text' }}\n      >\n        <div\n          className={`bom-table-wrapper ${\n            isResizing || resizingColumn !== null ? 'resizing' : ''\n          }`}\n        >\n          <div ref={containerRef} className=\"bom-table-container\">\n            {tableContent ? (\n              // Render custom table with interactions\n              <table\n                className=\"bom-table\"\n                contentEditable={false}\n                ref={tableRef}\n                data-has-custom-widths={\n                  node.attrs.columnWidths && node.attrs.columnWidths.length > 0\n                    ? 'true'\n                    : undefined\n                }\n              >\n                <colgroup>\n                  {tableContent[0]?.map((_: any, colIndex: number) => (\n                    <col\n                      key={colIndex}\n                      style={{\n                        width: columnWidths[colIndex]\n                          ? `${columnWidths[colIndex]}px`\n                          : undefined,\n                      }}\n                    />\n                  ))}\n                </colgroup>\n                <tbody>\n                  {tableContent.map((row: any[], rowIndex: number) => (\n                    <tr key={rowIndex}>\n                      {row.map((cell: any, colIndex: number) => {\n                        const CellTag = cell.isHeader ? 'th' : 'td';\n                        return (\n                          <CellTag\n                            key={colIndex}\n                            onClick={(e) =>\n                              handleCellClick(e, rowIndex, colIndex)\n                            }\n                            onMouseLeave={handleCellMouseLeave}\n                            style={{\n                              position: 'relative',\n                              border:\n                                activeCell?.row === rowIndex &&\n                                activeCell?.col === colIndex\n                                  ? '2px solid var(--tnkr-primary)'\n                                  : undefined,\n                              cursor: 'pointer',\n                              overflow: (rowIndex === 0 || colIndex === 0 || (activeCell?.row === rowIndex && activeCell?.col === colIndex)) ? 'visible' : undefined,\n                            }}\n                          >\n                            {cell.isHeader ? (\n                              <>\n                                <span\n                                  className=\"bom-cell-content\"\n                                  contentEditable={isEditable}\n                                  suppressContentEditableWarning={true}\n                                  onBlur={(e) => {\n                                    // Only update if in edit mode\n                                    if (!isEditable) return;\n\n                                    // Update the underlying table data when header is edited\n                                    const newValue =\n                                      e.currentTarget.textContent || '';\n                                    if (newValue !== cell.content && editor) {\n                                      // Find and update the header cell in the table\n                                      const pos = getPos();\n                                      if (pos !== undefined) {\n                                        const tableNode =\n                                          editor.state.doc.nodeAt(pos);\n                                        if (tableNode && tableNode.content) {\n                                          const table =\n                                            tableNode.content.firstChild;\n                                          if (\n                                            table &&\n                                            table.type.name === 'table'\n                                          ) {\n                                            // Get the first row (header row)\n                                            const headerRow =\n                                              table.content.child(0);\n                                            if (\n                                              headerRow &&\n                                              headerRow.type.name === 'tableRow'\n                                            ) {\n                                              // Calculate position of the specific header cell\n                                              let cellPos = pos + 2; // +1 for bom wrapper, +1 for table start\n\n                                              // Add size of all cells before the target column\n                                              for (\n                                                let i = 0;\n                                                i < colIndex;\n                                                i++\n                                              ) {\n                                                const prevCell =\n                                                  headerRow.content.child(i);\n                                                if (prevCell) {\n                                                  cellPos += prevCell.nodeSize;\n                                                }\n                                              }\n\n                                              // Get the target cell\n                                              const targetCell =\n                                                headerRow.content.child(\n                                                  colIndex,\n                                                );\n                                              if (targetCell) {\n                                                const cellStart = cellPos + 1; // Move inside the cell\n                                                const cellEnd =\n                                                  cellPos +\n                                                  targetCell.nodeSize -\n                                                  1; // End of cell content\n\n                                                editor\n                                                  .chain()\n                                                  .focus()\n                                                  .deleteRange({\n                                                    from: cellStart,\n                                                    to: cellEnd,\n                                                  })\n                                                  .insertContentAt(\n                                                    cellStart,\n                                                    newValue,\n                                                  )\n                                                  .run();\n                                              }\n                                            }\n                                          }\n                                        }\n                                      }\n                                    }\n                                  }}\n                                  style={{\n                                    cursor: isEditable ? 'text' : 'default',\n                                    outline: 'none',\n                                    border: 'none',\n                                  }}\n                                >\n                                  {cell.content}\n                                </span>\n\n                                {/* Left resize handle for first column */}\n                                {isEditable && colIndex === 0 && (\n                                  <div\n                                    className=\"bom-column-resize-handle\"\n                                    onMouseDown={(e) =>\n                                      handleColumnMouseDown(e, -1)\n                                    }\n                                    style={{\n                                      position: 'absolute',\n                                      top: 0,\n                                      left: -3,\n                                      width: '6px',\n                                      height: '9999px',\n                                      cursor: 'col-resize',\n                                      backgroundColor:\n                                        resizingColumn === -1\n                                          ? 'rgba(170, 66, 58, 0.5)'\n                                          : 'transparent',\n                                      zIndex: 20,\n                                    }}\n                                    onMouseEnter={(e) => {\n                                      e.currentTarget.style.backgroundColor =\n                                        'rgba(170, 66, 58, 0.3)';\n                                    }}\n                                    onMouseLeave={(e) => {\n                                      if (resizingColumn !== -1) {\n                                        e.currentTarget.style.backgroundColor =\n                                          'transparent';\n                                      }\n                                    }}\n                                  />\n                                )}\n\n                                {/* Right resize handle for all columns */}\n                                {isEditable && (\n                                  <div\n                                    className=\"bom-column-resize-handle\"\n                                    onMouseDown={(e) =>\n                                      handleColumnMouseDown(e, colIndex)\n                                    }\n                                    style={{\n                                      position: 'absolute',\n                                      top: 0,\n                                      right: -3,\n                                      width: '6px',\n                                      height: '9999px',\n                                      cursor: 'col-resize',\n                                      backgroundColor:\n                                        resizingColumn === colIndex\n                                          ? 'rgba(170, 66, 58, 0.5)'\n                                          : 'transparent',\n                                      zIndex: 20,\n                                    }}\n                                    onMouseEnter={(e) => {\n                                      e.currentTarget.style.backgroundColor =\n                                        'rgba(170, 66, 58, 0.3)';\n                                    }}\n                                    onMouseLeave={(e) => {\n                                      if (resizingColumn !== colIndex) {\n                                        e.currentTarget.style.backgroundColor =\n                                          'transparent';\n                                      }\n                                    }}\n                                  />\n                                )}\n                              </>\n                            ) : (\n                              (() => {\n                                // Get the header name for this column to determine its type\n                                const headerName =\n                                  tableContent[0]?.[colIndex]?.content || '';\n                                const config = getColumnConfig(headerName);\n                                const isLinkType =\n                                  config.type === 'link' ||\n                                  config.type === 'stl-download';\n                                const isUrlContent =\n                                  cell.content &&\n                                  (cell.content.startsWith('http') ||\n                                    cell.content.includes('www.'));\n                                const shouldShowAsLink =\n                                  isLinkType || isUrlContent;\n\n                                return (\n                                  <div\n                                    className=\"bom-cell-content\"\n                                    style={{\n                                      cursor: isLinkType ? 'text' : 'pointer',\n                                      position: 'relative',\n                                      width: '100%',\n                                    }}\n                                  >\n                                    {isLinkType ? (\n                                      // Link-type columns - now editable with link preview\n                                      <div\n                                        style={{\n                                          display: 'flex',\n                                          alignItems: 'center',\n                                          gap: '6px',\n                                          width: '100%',\n                                        }}\n                                      >\n                                        <span\n                                          className=\"bom-cell-content\"\n                                          contentEditable={isEditable}\n                                          suppressContentEditableWarning={true}\n                                          onBlur={(e) => {\n                                            if (!isEditable) return;\n\n                                            const newValue =\n                                              e.currentTarget.textContent || '';\n                                            if (\n                                              newValue !== cell.content &&\n                                              editor\n                                            ) {\n                                              const pos = getPos();\n                                              if (pos !== undefined) {\n                                                const tableNode =\n                                                  editor.state.doc.nodeAt(pos);\n                                                if (\n                                                  tableNode &&\n                                                  tableNode.content\n                                                ) {\n                                                  const table =\n                                                    tableNode.content\n                                                      .firstChild;\n                                                  if (\n                                                    table &&\n                                                    table.type.name === 'table'\n                                                  ) {\n                                                    const targetRow =\n                                                      table.content.child(\n                                                        rowIndex,\n                                                      );\n                                                    if (\n                                                      targetRow &&\n                                                      targetRow.type.name ===\n                                                        'tableRow'\n                                                    ) {\n                                                      const targetCell =\n                                                        targetRow.content.child(\n                                                          colIndex,\n                                                        );\n                                                      if (targetCell) {\n                                                        let cellPos = pos + 2;\n                                                        for (\n                                                          let i = 0;\n                                                          i < rowIndex;\n                                                          i++\n                                                        ) {\n                                                          const prevRow =\n                                                            table.content.child(\n                                                              i,\n                                                            );\n                                                          if (prevRow)\n                                                            cellPos +=\n                                                              prevRow.nodeSize;\n                                                        }\n                                                        for (\n                                                          let i = 0;\n                                                          i < colIndex;\n                                                          i++\n                                                        ) {\n                                                          const prevCell =\n                                                            targetRow.content.child(\n                                                              i,\n                                                            );\n                                                          if (prevCell)\n                                                            cellPos +=\n                                                              prevCell.nodeSize;\n                                                        }\n                                                        const cellStart =\n                                                          cellPos + 1;\n                                                        const cellEnd =\n                                                          cellPos +\n                                                          targetCell.nodeSize -\n                                                          1;\n\n                                                        editor\n                                                          .chain()\n                                                          .focus()\n                                                          .deleteRange({\n                                                            from: cellStart,\n                                                            to: cellEnd,\n                                                          })\n                                                          .insertContentAt(\n                                                            cellStart,\n                                                            newValue,\n                                                          )\n                                                          .run();\n                                                      }\n                                                    }\n                                                  }\n                                                }\n                                              }\n                                            }\n                                          }}\n                                          style={{\n                                            cursor: isEditable\n                                              ? 'text'\n                                              : 'default',\n                                            outline: 'none',\n                                            border: 'none',\n                                            flex: 1,\n                                            color: cell.content\n                                              ? 'var(--tnkr-primary)'\n                                              : 'inherit',\n                                            textDecoration: cell.content\n                                              ? 'underline'\n                                              : 'none',\n                                            textUnderlineOffset: '2px',\n                                            minHeight: '24px',\n                                          }}\n                                        >\n                                          {cell.content ||\n                                            (isEditable ? '' : '')}\n                                        </span>\n                                        {cell.content && (\n                                          <a\n                                            href={cell.content}\n                                            target=\"_blank\"\n                                            rel=\"noopener noreferrer\"\n                                            onClick={(e) => e.stopPropagation()}\n                                            style={{\n                                              display: 'flex',\n                                              alignItems: 'center',\n                                              color: 'var(--tnkr-primary)',\n                                              flexShrink: 0,\n                                            }}\n                                            title=\"Open link in new tab\"\n                                          >\n                                            <iconify-icon\n                                              icon=\"ei:external-link\"\n                                              width=\"14\"\n                                              height=\"14\"\n                                            />\n                                          </a>\n                                        )}\n                                      </div>\n                                    ) : shouldShowAsLink ? (\n                                      // Non-link-type cells that contain URLs - also make editable\n                                      <div\n                                        style={{\n                                          display: 'flex',\n                                          alignItems: 'center',\n                                          gap: '6px',\n                                          width: '100%',\n                                        }}\n                                      >\n                                        <span\n                                          className=\"bom-cell-content\"\n                                          contentEditable={isEditable}\n                                          suppressContentEditableWarning={true}\n                                          onBlur={(e) => {\n                                            if (!isEditable) return;\n\n                                            const newValue =\n                                              e.currentTarget.textContent || '';\n                                            if (\n                                              newValue !== cell.content &&\n                                              editor\n                                            ) {\n                                              const pos = getPos();\n                                              if (pos !== undefined) {\n                                                const tableNode =\n                                                  editor.state.doc.nodeAt(pos);\n                                                if (\n                                                  tableNode &&\n                                                  tableNode.content\n                                                ) {\n                                                  const table =\n                                                    tableNode.content\n                                                      .firstChild;\n                                                  if (\n                                                    table &&\n                                                    table.type.name === 'table'\n                                                  ) {\n                                                    const targetRow =\n                                                      table.content.child(\n                                                        rowIndex,\n                                                      );\n                                                    if (\n                                                      targetRow &&\n                                                      targetRow.type.name ===\n                                                        'tableRow'\n                                                    ) {\n                                                      const targetCell =\n                                                        targetRow.content.child(\n                                                          colIndex,\n                                                        );\n                                                      if (targetCell) {\n                                                        let cellPos = pos + 2;\n                                                        for (\n                                                          let i = 0;\n                                                          i < rowIndex;\n                                                          i++\n                                                        ) {\n                                                          const prevRow =\n                                                            table.content.child(\n                                                              i,\n                                                            );\n                                                          if (prevRow)\n                                                            cellPos +=\n                                                              prevRow.nodeSize;\n                                                        }\n                                                        for (\n                                                          let i = 0;\n                                                          i < colIndex;\n                                                          i++\n                                                        ) {\n                                                          const prevCell =\n                                                            targetRow.content.child(\n                                                              i,\n                                                            );\n                                                          if (prevCell)\n                                                            cellPos +=\n                                                              prevCell.nodeSize;\n                                                        }\n                                                        const cellStart =\n                                                          cellPos + 1;\n                                                        const cellEnd =\n                                                          cellPos +\n                                                          targetCell.nodeSize -\n                                                          1;\n\n                                                        editor\n                                                          .chain()\n                                                          .focus()\n                                                          .deleteRange({\n                                                            from: cellStart,\n                                                            to: cellEnd,\n                                                          })\n                                                          .insertContentAt(\n                                                            cellStart,\n                                                            newValue,\n                                                          )\n                                                          .run();\n                                                      }\n                                                    }\n                                                  }\n                                                }\n                                              }\n                                            }\n                                          }}\n                                          style={{\n                                            cursor: isEditable\n                                              ? 'text'\n                                              : 'default',\n                                            outline: 'none',\n                                            border: 'none',\n                                            flex: 1,\n                                            color: 'var(--tnkr-primary)',\n                                            textDecoration: 'underline',\n                                            textUnderlineOffset: '2px',\n                                            minHeight: '24px',\n                                          }}\n                                        >\n                                          {cell.content || ''}\n                                        </span>\n                                        <a\n                                          href={cell.content}\n                                          target=\"_blank\"\n                                          rel=\"noopener noreferrer\"\n                                          onClick={(e) => e.stopPropagation()}\n                                          style={{\n                                            display: 'flex',\n                                            alignItems: 'center',\n                                            color: 'var(--tnkr-primary)',\n                                            flexShrink: 0,\n                                          }}\n                                          title=\"Open link in new tab\"\n                                        >\n                                          <iconify-icon\n                                            icon=\"ei:external-link\"\n                                            width=\"14\"\n                                            height=\"14\"\n                                          />\n                                        </a>\n                                      </div>\n                                    ) : (\n                                      // Regular non-link cells\n                                      (() => {\n                                        const isPartNameColumn =\n                                          headerName\n                                            .toLowerCase()\n                                            .includes('partname') ||\n                                          headerName\n                                            .toLowerCase()\n                                            .includes('part name') ||\n                                          headerName.toLowerCase() === 'part' ||\n                                          colIndex === 0;\n\n                                        // Part name column should not be editable (it uses the popup selector)\n                                        // Only show the selector UI if NOT a bare table and we have required IDs\n                                        // For bare BOMs (blank type), make the first column editable like others\n                                        const showPartSelector =\n                                          !isBareTable &&\n                                          productId &&\n                                          organizationId;\n\n                                        if (\n                                          isPartNameColumn &&\n                                          showPartSelector\n                                        ) {\n                                          return (\n                                            <span\n                                              onClick={(e) => {\n                                                handleTableClick(\n                                                  e,\n                                                  rowIndex,\n                                                  colIndex,\n                                                );\n                                              }}\n                                              style={{\n                                                cursor: isEditable\n                                                  ? 'pointer'\n                                                  : 'default',\n                                                display: 'flex',\n                                                alignItems: 'center',\n                                                gap: '6px',\n                                                minHeight: '24px',\n                                                width: '100%',\n                                                color: 'rgba(255, 255, 255, 0.7)',\n                                                whiteSpace: 'normal',\n                                                wordWrap: 'break-word',\n                                              }}\n                                            >\n                                              <span style={{ flex: 1, color: 'rgba(255, 255, 255, 0.7)', whiteSpace: 'normal', wordWrap: 'break-word' }}>\n                                                {cell.content ||\n                                                  (isEditable ? (\n                                                    <span\n                                                      style={{\n                                                        opacity: 0.5,\n                                                        fontStyle: 'italic',\n                                                      }}\n                                                    >\n                                                      Click to select part\n                                                    </span>\n                                                  ) : (\n                                                    ''\n                                                  ))}\n                                              </span>\n                                            </span>\n                                          );\n                                        }\n\n                                        // All other columns are editable in edit mode\n                                        return (\n                                          <span\n                                            className=\"bom-cell-content\"\n                                            contentEditable={isEditable}\n                                            suppressContentEditableWarning={\n                                              true\n                                            }\n                                            onBlur={(e) => {\n                                              if (!isEditable) return;\n\n                                              const newValue =\n                                                e.currentTarget.textContent ||\n                                                '';\n                                              if (\n                                                newValue !== cell.content &&\n                                                editor\n                                              ) {\n                                                const pos = getPos();\n                                                if (pos !== undefined) {\n                                                  const tableNode =\n                                                    editor.state.doc.nodeAt(\n                                                      pos,\n                                                    );\n                                                  if (\n                                                    tableNode &&\n                                                    tableNode.content\n                                                  ) {\n                                                    const table =\n                                                      tableNode.content\n                                                        .firstChild;\n                                                    if (\n                                                      table &&\n                                                      table.type.name ===\n                                                        'table'\n                                                    ) {\n                                                      const targetRow =\n                                                        table.content.child(\n                                                          rowIndex,\n                                                        );\n                                                      if (\n                                                        targetRow &&\n                                                        targetRow.type.name ===\n                                                          'tableRow'\n                                                      ) {\n                                                        const targetCell =\n                                                          targetRow.content.child(\n                                                            colIndex,\n                                                          );\n                                                        if (targetCell) {\n                                                          // Calculate exact position\n                                                          let cellPos = pos + 2;\n\n                                                          // Add size of all rows before target row\n                                                          for (\n                                                            let i = 0;\n                                                            i < rowIndex;\n                                                            i++\n                                                          ) {\n                                                            const prevRow =\n                                                              table.content.child(\n                                                                i,\n                                                              );\n                                                            if (prevRow)\n                                                              cellPos +=\n                                                                prevRow.nodeSize;\n                                                          }\n\n                                                          // Add size of all cells before target cell\n                                                          for (\n                                                            let i = 0;\n                                                            i < colIndex;\n                                                            i++\n                                                          ) {\n                                                            const prevCell =\n                                                              targetRow.content.child(\n                                                                i,\n                                                              );\n                                                            if (prevCell)\n                                                              cellPos +=\n                                                                prevCell.nodeSize;\n                                                          }\n\n                                                          const cellStart =\n                                                            cellPos + 1;\n                                                          const cellEnd =\n                                                            cellPos +\n                                                            targetCell.nodeSize -\n                                                            1;\n\n                                                          editor\n                                                            .chain()\n                                                            .focus()\n                                                            .deleteRange({\n                                                              from: cellStart,\n                                                              to: cellEnd,\n                                                            })\n                                                            .insertContentAt(\n                                                              cellStart,\n                                                              newValue,\n                                                            )\n                                                            .run();\n                                                        }\n                                                      }\n                                                    }\n                                                  }\n                                                }\n                                              }\n                                            }}\n                                            style={{\n                                              cursor: isEditable\n                                                ? 'text'\n                                                : 'default',\n                                              outline: 'none',\n                                              border: 'none',\n                                              display: 'block',\n                                              width: '100%',\n                                              minHeight: '24px',\n                                            }}\n                                          >\n                                            {cell.content || ''}\n                                          </span>\n                                        );\n                                      })()\n                                    )}\n                                  </div>\n                                );\n                              })()\n                            )}\n                            {!cell.isHeader &&\n                              isEditable &&\n                              (() => {\n                                // Only show open button for part tree column (first column)\n                                const headerName =\n                                  tableContent[0]?.[colIndex]?.content || '';\n                                const isPartTreeColumn =\n                                  headerName\n                                    .toLowerCase()\n                                    .includes('partname') ||\n                                  headerName\n                                    .toLowerCase()\n                                    .includes('part name') ||\n                                  headerName.toLowerCase() === 'part' ||\n                                  colIndex === 0;\n\n                                // Only show button if NOT a bare table and we have productId and organizationId\n                                const showButton =\n                                  !isBareTable && productId && organizationId;\n\n                                if (!isPartTreeColumn || !showButton)\n                                  return null;\n\n                                return (\n                                  <button\n                                    className=\"bom-cell-button\"\n                                    onClick={(e) => {\n                                      e.preventDefault();\n                                      e.stopPropagation();\n                                      handleButtonClick(\n                                        e,\n                                        rowIndex,\n                                        colIndex,\n                                        cell.content,\n                                      );\n                                    }}\n                                  >\n                                    <span\n                                      style={{\n                                        display: 'flex',\n                                        alignItems: 'center',\n                                        gap: '4px',\n                                      }}\n                                    >\n                                      <iconify-icon\n                                        icon=\"mynaui:door-open-solid\"\n                                        width=\"10\"\n                                        height=\"10\"\n                                        style={{ color: 'currentColor' }}\n                                      />\n                                      open\n                                    </span>\n                                  </button>\n                                );\n                              })()}\n\n                            {/* Cell Menu Icons - Only show if this cell is active */}\n                            {isEditable &&\n                              activeCell?.row === rowIndex &&\n                              activeCell?.col === colIndex && (\n                                <>\n                                  {/* Top menu icon - only for header row */}\n                                  {rowIndex === 0 && (\n                                    <div\n                                      className=\"bom-cell-menu-icon\"\n                                      data-position=\"top\"\n                                      onClick={(e) =>\n                                        handleCellMenuIconClick(e, 'top')\n                                      }\n                                      onMouseEnter={(e) => {\n                                        const icon = e.currentTarget;\n                                        const iconElement =\n                                          icon.querySelector('iconify-icon');\n                                        icon.style.width = '20px';\n                                        icon.style.height = '20px';\n                                        icon.style.top = '-10px';\n                                        icon.style.backgroundColor =\n                                          'var(--tnkr-primary)';\n                                        icon.style.borderRadius = '4px';\n                                        if (iconElement)\n                                          (\n                                            iconElement as HTMLElement\n                                          ).style.opacity = '1';\n                                      }}\n                                      onMouseLeave={(e) => {\n                                        const icon = e.currentTarget;\n                                        const iconElement =\n                                          icon.querySelector('iconify-icon');\n                                        icon.style.width = '20px';\n                                        icon.style.height = '4px';\n                                        icon.style.top = '-2px';\n                                        icon.style.backgroundColor =\n                                          'rgba(255, 255, 255, 0.15)';\n                                        icon.style.borderRadius = '2px';\n                                        if (iconElement)\n                                          (\n                                            iconElement as HTMLElement\n                                          ).style.opacity = '0';\n                                      }}\n                                      style={{\n                                        position: 'absolute',\n                                        left: '50%',\n                                        top: '-2px',\n                                        transform: 'translateX(-50%)',\n                                        width: '20px',\n                                        height: '4px',\n                                        backgroundColor:\n                                          'rgba(255, 255, 255, 0.15)',\n                                        borderRadius: '2px',\n                                        cursor: 'pointer',\n                                        zIndex: 30,\n                                        transition: 'all 0.15s ease-in-out',\n                                        display: 'flex',\n                                        alignItems: 'center',\n                                        justifyContent: 'center',\n                                      }}\n                                    >\n                                      <iconify-icon\n                                        icon=\"lucide:more-horizontal\"\n                                        width=\"14\"\n                                        height=\"14\"\n                                        style={{\n                                          color: 'white',\n                                          opacity: 0,\n                                          transition:\n                                            'opacity 0.15s ease-in-out',\n                                        }}\n                                      />\n                                    </div>\n                                  )}\n\n                                  {/* Left menu icon - only for first column */}\n                                  {colIndex === 0 && (\n                                    <div\n                                      className=\"bom-cell-menu-icon\"\n                                      data-position=\"left\"\n                                      onClick={(e) =>\n                                        handleCellMenuIconClick(e, 'left')\n                                      }\n                                      onMouseEnter={(e) => {\n                                        const icon = e.currentTarget;\n                                        const iconElement =\n                                          icon.querySelector('iconify-icon');\n                                        icon.style.width = '20px';\n                                        icon.style.left = '-10px';\n                                        icon.style.backgroundColor =\n                                          'var(--tnkr-primary)';\n                                        icon.style.borderRadius = '4px';\n                                        if (iconElement)\n                                          (\n                                            iconElement as HTMLElement\n                                          ).style.opacity = '1';\n                                      }}\n                                      onMouseLeave={(e) => {\n                                        const icon = e.currentTarget;\n                                        const iconElement =\n                                          icon.querySelector('iconify-icon');\n                                        icon.style.width = '4px';\n                                        icon.style.left = '-2px';\n                                        icon.style.backgroundColor =\n                                          'rgba(255, 255, 255, 0.15)';\n                                        icon.style.borderRadius = '2px';\n                                        if (iconElement)\n                                          (\n                                            iconElement as HTMLElement\n                                          ).style.opacity = '0';\n                                      }}\n                                      style={{\n                                        position: 'absolute',\n                                        left: '-2px',\n                                        top: '50%',\n                                        transform: 'translateY(-50%)',\n                                        width: '4px',\n                                        height: '20px',\n                                        backgroundColor:\n                                          'rgba(255, 255, 255, 0.15)',\n                                        borderRadius: '2px',\n                                        cursor: 'pointer',\n                                        zIndex: 30,\n                                        transition: 'all 0.15s ease-in-out',\n                                        display: 'flex',\n                                        alignItems: 'center',\n                                        justifyContent: 'center',\n                                      }}\n                                    >\n                                      <iconify-icon\n                                        icon=\"lucide:more-vertical\"\n                                        width=\"14\"\n                                        height=\"14\"\n                                        style={{\n                                          color: 'white',\n                                          opacity: 0,\n                                          transition:\n                                            'opacity 0.15s ease-in-out',\n                                        }}\n                                      />\n                                    </div>\n                                  )}\n\n                                  {/* Right menu icon - all cells */}\n                                  <div\n                                    className=\"bom-cell-menu-icon\"\n                                    data-position=\"right\"\n                                    onClick={(e) =>\n                                      handleCellMenuIconClick(e, 'right')\n                                    }\n                                    onMouseEnter={(e) => {\n                                      const icon = e.currentTarget;\n                                      const iconElement =\n                                        icon.querySelector('iconify-icon');\n                                      icon.style.width = '20px';\n                                      icon.style.right = '-10px';\n                                      icon.style.backgroundColor =\n                                        'var(--tnkr-primary)';\n                                      icon.style.borderRadius = '4px';\n                                      if (iconElement)\n                                        (\n                                          iconElement as HTMLElement\n                                        ).style.opacity = '1';\n                                    }}\n                                    onMouseLeave={(e) => {\n                                      const icon = e.currentTarget;\n                                      const iconElement =\n                                        icon.querySelector('iconify-icon');\n                                      icon.style.width = '4px';\n                                      icon.style.right = '-2px';\n                                      icon.style.backgroundColor =\n                                        'rgba(255, 255, 255, 0.15)';\n                                      icon.style.borderRadius = '2px';\n                                      if (iconElement)\n                                        (\n                                          iconElement as HTMLElement\n                                        ).style.opacity = '0';\n                                    }}\n                                    style={{\n                                      position: 'absolute',\n                                      right: '-2px',\n                                      top: '50%',\n                                      transform: 'translateY(-50%)',\n                                      width: '4px',\n                                      height: '20px',\n                                      backgroundColor:\n                                        'rgba(255, 255, 255, 0.15)',\n                                      borderRadius: '2px',\n                                      cursor: 'pointer',\n                                      zIndex: 30,\n                                      transition: 'all 0.15s ease-in-out',\n                                      display: 'flex',\n                                      alignItems: 'center',\n                                      justifyContent: 'center',\n                                    }}\n                                  >\n                                    <iconify-icon\n                                      icon=\"lucide:more-vertical\"\n                                      width=\"14\"\n                                      height=\"14\"\n                                      style={{\n                                        color: 'white',\n                                        opacity: 0,\n                                        transition: 'opacity 0.15s ease-in-out',\n                                      }}\n                                    />\n                                  </div>\n                                </>\n                              )}\n                          </CellTag>\n                        );\n                      })}\n                    </tr>\n                  ))}\n                </tbody>\n              </table>\n            ) : (\n              // Always use NodeViewContent to preserve the document structure\n              <NodeViewContent className=\"bom-table\" />\n            )}\n          </div>\n        </div>\n      </div>\n\n      {/* Table Controls - Cell menu and plus buttons */}\n      {isEditable && tableContent && (\n        <>\n          <TableCellMenu\n            tableRef={tableRef}\n            editor={editor}\n            activeCell={activeCell}\n            onInsertRow={handleInsertRow}\n            onInsertColumn={handleInsertColumn}\n            onDeleteRow={handleDeleteRow}\n            onDeleteColumn={handleDeleteColumn}\n            onClearRow={handleClearRow}\n            onClearColumn={handleClearColumn}\n            onClearCell={handleClearCell}\n            onDuplicateRow={handleDuplicateRow}\n            onDuplicateColumn={handleDuplicateColumn}\n            onMenuStateChange={setIsContextMenuOpen}\n          />\n\n          {/* Cell Menu Popup */}\n          {cellMenuOpen &&\n            activeCell &&\n            tableRef.current &&\n            (() => {\n              const { row: rowIndex, col: colIndex } = activeCell;\n              const table = tableRef.current;\n              const rows = table?.querySelectorAll('tr');\n              const totalRows = rows?.length || 0;\n              const totalCols = rows && rows[0] ? rows[0].children.length : 0;\n\n              const menuItems: Array<{\n                label: string;\n                icon: string;\n                action: () => void;\n              }> = [];\n\n              if (cellMenuOpen === 'left' && colIndex === 0) {\n                // Row operations\n                menuItems.push({\n                  label: 'Insert above',\n                  icon: 'hugeicons:insert-row-up',\n                  action: () => {\n                    handleInsertRow(rowIndex, 'above');\n                    setCellMenuOpen(null);\n                  },\n                });\n                menuItems.push({\n                  label: 'Insert below',\n                  icon: 'hugeicons:insert-row-down',\n                  action: () => {\n                    handleInsertRow(rowIndex, 'below');\n                    setCellMenuOpen(null);\n                  },\n                });\n                menuItems.push({\n                  label: 'Duplicate',\n                  icon: 'ion:duplicate-outline',\n                  action: () => {\n                    handleDuplicateRow(rowIndex);\n                    setCellMenuOpen(null);\n                  },\n                });\n                if (totalRows > 2) {\n                  menuItems.push({\n                    label: 'Delete',\n                    icon: 'weui:delete-outlined',\n                    action: () => {\n                      handleDeleteRow(rowIndex);\n                      setCellMenuOpen(null);\n                    },\n                  });\n                }\n              } else if (cellMenuOpen === 'top' && rowIndex === 0) {\n                // Column operations\n                menuItems.push({\n                  label: 'Insert left',\n                  icon: 'hugeicons:insert-column-left',\n                  action: () => {\n                    handleInsertColumn(colIndex, 'left');\n                    setCellMenuOpen(null);\n                  },\n                });\n                menuItems.push({\n                  label: 'Insert right',\n                  icon: 'hugeicons:insert-column-right',\n                  action: () => {\n                    handleInsertColumn(colIndex, 'right');\n                    setCellMenuOpen(null);\n                  },\n                });\n                menuItems.push({\n                  label: 'Duplicate',\n                  icon: 'ion:duplicate-outline',\n                  action: () => {\n                    handleDuplicateColumn(colIndex);\n                    setCellMenuOpen(null);\n                  },\n                });\n                if (totalCols > 1) {\n                  menuItems.push({\n                    label: 'Delete',\n                    icon: 'weui:delete-outlined',\n                    action: () => {\n                      handleDeleteColumn(colIndex);\n                      setCellMenuOpen(null);\n                    },\n                  });\n                }\n              } else if (cellMenuOpen === 'right') {\n                // Cell operation\n                menuItems.push({\n                  label: 'Clear content',\n                  icon: 'f7:clear',\n                  action: () => {\n                    handleClearCell(rowIndex, colIndex);\n                    setCellMenuOpen(null);\n                  },\n                });\n              }\n\n              return (\n                <div\n                  className=\"bom-cell-menu-popup\"\n                  style={{\n                    position: 'fixed',\n                    left: cellMenuPosition.x,\n                    top: cellMenuPosition.y,\n                    backgroundColor: '#1a1a1a',\n                    border: '1px solid #313133',\n                    borderRadius: '8px',\n                    padding: '4px',\n                    minWidth: '150px',\n                    zIndex: 10001,\n                    boxShadow: '0 4px 6px rgba(0, 0, 0, 0.3)',\n                  }}\n                >\n                  {menuItems.map((item, index) => (\n                    <button\n                      key={index}\n                      onClick={item.action}\n                      style={{\n                        display: 'flex',\n                        alignItems: 'center',\n                        gap: '8px',\n                        width: '100%',\n                        padding: '8px 12px',\n                        textAlign: 'left',\n                        backgroundColor: 'transparent',\n                        border: 'none',\n                        color: '#e5e5e5',\n                        fontSize: '13px',\n                        cursor: 'pointer',\n                        borderRadius: '4px',\n                        transition: 'background-color 0.2s',\n                      }}\n                      onMouseEnter={(e) => {\n                        e.currentTarget.style.backgroundColor = '#2a2a2a';\n                      }}\n                      onMouseLeave={(e) => {\n                        e.currentTarget.style.backgroundColor = 'transparent';\n                      }}\n                    >\n                      <iconify-icon\n                        icon={item.icon}\n                        width=\"14\"\n                        height=\"14\"\n                        style={{ color: 'currentColor', flexShrink: 0 }}\n                      />\n                      {item.label}\n                    </button>\n                  ))}\n                </div>\n              );\n            })()}\n\n          <TablePlusButtons\n            tableRef={tableRef}\n            containerRef={containerRef}\n            onAddRow={handleAddRow}\n            onAddColumn={handleAddColumn}\n            disabled={isContextMenuOpen}\n          />\n        </>\n      )}\n\n      {/* Remove table-wide resize handle since we're using overflow scroll */}\n\n      {/* Searchable Popup Menu */}\n\n      {popupIsOpen && (\n        <SearchablePopupMenu\n          isOpen={popupIsOpen}\n          onClose={closePopup}\n          isTreeMode={partsTree.length > 0}\n          enableParentSelection={partsTree.length > 0}\n          position={popupPosition}\n          items={popupItems}\n          onSelect={handlePopupSelect}\n          title=\"Select Part\"\n          searchPlaceholder=\"Search parts...\"\n          zIndex={200}\n          containerRef={containerRef}\n        />\n      )}\n    </NodeViewWrapper>\n  );\n};\n","export type BomType = '3d-printed-parts' | 'regular-parts' | 'default' | 'blank';\n\nexport interface BomColumnProperty {\n  key: string;\n  label: string;\n  type: 'text' | 'number' | 'url' | 'select' | 'boolean' | 'region';\n  width?: number;\n  required?: boolean;\n  options?: string[];\n  placeholder?: string;\n}\n\nexport interface BomTypeConfig {\n  type: BomType;\n  title: string;\n  properties: BomColumnProperty[];\n}\n\nconst threeDPrintedPartsConfig: BomTypeConfig = {\n  type: '3d-printed-parts',\n  title: '3D Printed Parts BOM',\n  properties: [\n    { key: 'partName', label: 'Part Name', type: 'text', required: true },\n    { key: 'quantity', label: 'Quantity', type: 'number', required: true },\n    { key: 'mass', label: 'Mass (kg)', type: 'number' },\n    { key: 'stlDownload', label: 'STL Download', type: 'url' },\n    { key: 'supports', label: 'Supports', type: 'boolean' },\n    { key: 'infillType', label: 'Infill Type', type: 'text', placeholder: 'e.g., 20%' },\n    { key: 'documentationLink', label: 'Documentation Link', type: 'url' },\n  ]\n};\n\nconst regularPartsConfig: BomTypeConfig = {\n  type: 'regular-parts',\n  title: 'Regular Parts BOM',\n  properties: [\n    { key: 'partName', label: 'Part Name', type: 'text', required: true },\n    { key: 'quantity', label: 'Quantity', type: 'number', required: true },\n    { key: 'mass', label: 'Mass (kg)', type: 'number' },\n    { key: 'notes', label: 'Notes', type: 'text' },\n    { key: 'sourcingRegion', label: 'Sourcing Region', type: 'region' },\n    { key: 'sourcingLink', label: 'Sourcing Link', type: 'url' },\n    { key: 'dataSheetUrl', label: 'Data Sheet URL', type: 'url' },\n    { key: 'manufacturerWebsite', label: 'Manufacturer Website', type: 'url' },\n    { key: 'productLink', label: 'Product Link', type: 'url' },\n  ]\n};\n\nconst defaultConfig: BomTypeConfig = {\n  type: 'default',\n  title: 'Bill of Materials',\n  properties: [\n    { key: 'partName', label: 'Part Name', type: 'text', required: true },\n    { key: 'quantity', label: 'Quantity', type: 'number', required: true },\n    { key: 'mass', label: 'Mass (kg)', type: 'number' },\n    { key: 'region', label: 'Region', type: 'region' },\n    { key: 'productLink', label: 'Product Link', type: 'url' },\n    { key: 'modelFile', label: '3D Model File', type: 'url' },\n    { key: 'assemblyInstructions', label: 'Assembly Instructions', type: 'url' },\n    { key: 'notes', label: 'Notes', type: 'text' },\n  ]\n};\n\nconst blankConfig: BomTypeConfig = {\n  type: 'blank',\n  title: 'Blank BOM',\n  properties: []\n};\n\nconst bomTypeConfigs: Record<BomType, BomTypeConfig> = {\n  '3d-printed-parts': threeDPrintedPartsConfig,\n  'regular-parts': regularPartsConfig,\n  'default': defaultConfig,\n  'blank': blankConfig,\n};\n\nexport function getBomTypeConfig(type: BomType = 'regular-parts'): BomTypeConfig {\n  return bomTypeConfigs[type] || bomTypeConfigs['regular-parts'];\n}\n\nexport function getBomTypeProperties(type: BomType = 'regular-parts'): BomColumnProperty[] {\n  const config = getBomTypeConfig(type);\n  return config.properties;\n}\n\nexport function getBomTypeHeaders(type: BomType = 'regular-parts'): string[] {\n  const properties = getBomTypeProperties(type);\n  return properties.map(prop => prop.label);\n}","import { Node, mergeAttributes } from '@tiptap/core'\nimport { ReactNodeViewRenderer } from '@tiptap/react'\nimport { BomNodeView } from './bom-node-view'\nimport { getBomTypeHeaders, type BomType } from './config/bom-types-config'\n\nexport interface BomNodeOptions {\n  HTMLAttributes: Record<string, any>\n  productId?: string\n  organizationId?: string\n}\n\ndeclare module '@tiptap/core' {\n  interface Commands<ReturnType> {\n    bomNode: {\n      /**\n       * Insert a BOM table\n       */\n      insertBomTable: (type?: BomType) => ReturnType\n    }\n  }\n}\n\nexport const BomNode = Node.create<BomNodeOptions>({\n  name: 'bomNode',\n\n  addOptions() {\n    return {\n      HTMLAttributes: {},\n      productId: undefined,\n      organizationId: undefined,\n    }\n  },\n\n  group: 'block',\n\n  content: 'table',\n\n  isolating: true,\n\n  addAttributes() {\n    return {\n      id: {\n        default: null,\n        parseHTML: (element) => element.getAttribute('data-bom-id'),\n        renderHTML: (attributes) => {\n          if (!attributes.id) {\n            return {}\n          }\n          return {\n            'data-bom-id': attributes.id,\n          }\n        },\n      },\n      title: {\n        default: 'Bill of Materials',\n        parseHTML: (element) => element.getAttribute('data-bom-title'),\n        renderHTML: (attributes) => {\n          if (!attributes.title) {\n            return {}\n          }\n          return {\n            'data-bom-title': attributes.title,\n          }\n        },\n      },\n      type: {\n        default: 'regular-parts',\n        parseHTML: (element) => element.getAttribute('data-bom-type') || 'regular-parts',\n        renderHTML: (attributes) => {\n          if (!attributes.type) {\n            return {}\n          }\n          return {\n            'data-bom-type': attributes.type,\n          }\n        },\n      },\n      productId: {\n        default: null,\n        parseHTML: (element) => element.getAttribute('data-product-id'),\n        renderHTML: (attributes) => {\n          if (!attributes.productId) {\n            return {}\n          }\n          return {\n            'data-product-id': attributes.productId,\n          }\n        },\n      },\n      organizationId: {\n        default: null,\n        parseHTML: (element) => element.getAttribute('data-organization-id'),\n        renderHTML: (attributes) => {\n          if (!attributes.organizationId) {\n            return {}\n          }\n          return {\n            'data-organization-id': attributes.organizationId,\n          }\n        },\n      },\n      width: {\n        default: null,\n        parseHTML: (element) => {\n          const width = element.getAttribute('data-width')\n          return width ? parseInt(width, 10) : null\n        },\n        renderHTML: (attributes) => {\n          if (!attributes.width) {\n            return {}\n          }\n          return {\n            'data-width': attributes.width,\n          }\n        },\n      },\n      columnWidths: {\n        default: [],\n        parseHTML: (element) => {\n          const widths = element.getAttribute('data-column-widths')\n          return widths ? JSON.parse(widths) : []\n        },\n        renderHTML: (attributes) => {\n          if (!attributes.columnWidths || attributes.columnWidths.length === 0) {\n            return {}\n          }\n          return {\n            'data-column-widths': JSON.stringify(attributes.columnWidths),\n          }\n        },\n      },\n    }\n  },\n\n  parseHTML() {\n    return [\n      {\n        tag: 'div[data-type=\"bom-node\"]',\n        priority: 51,\n      },\n    ]\n  },\n\n  renderHTML({ HTMLAttributes }) {\n    return [\n      'div',\n      mergeAttributes(\n        this.options.HTMLAttributes,\n        HTMLAttributes,\n        {\n          'data-type': 'bom-node',\n          class: 'bom-node',\n        }\n      ),\n      0,\n    ]\n  },\n\n  addCommands() {\n    return {\n      insertBomTable:\n        (type: BomType = 'regular-parts') =>\n        ({ commands }) => {\n          // Check if productId and organizationId are missing\n          const hasIds = this.options.productId && this.options.organizationId;\n\n          // Use 'blank' type if IDs are missing, otherwise use provided type\n          const effectiveType = hasIds ? type : 'blank';\n\n          // Get headers from config\n          const headers = getBomTypeHeaders(effectiveType);\n\n          // For blank type, create 3 empty header columns\n          const headerColumns = headers.length > 0\n            ? headers.map((header: string) => ({ text: header }))\n            : [{ text: '' }, { text: '' }, { text: '' }];\n\n          // Create header row\n          const headerRow = {\n            type: 'tableRow',\n            content: headerColumns.map((col: { text: string }) => ({\n              type: 'tableHeader',\n              content: [{\n                type: 'paragraph',\n                content: col.text ? [{ type: 'text', text: col.text }] : []\n              }],\n            })),\n          }\n\n          // Create a single empty data row\n          const createEmptyRow = () => ({\n            type: 'tableRow',\n            content: headerColumns.map(() => ({\n              type: 'tableCell',\n              content: [{\n                type: 'paragraph',\n                content: []\n              }],\n            })),\n          })\n\n          return commands.insertContent({\n            type: this.name,\n            attrs: {\n              id: `bom-${Date.now()}`,\n              title: 'Bill of Materials',\n              type: effectiveType,\n              productId: this.options.productId || undefined,\n              organizationId: this.options.organizationId || undefined,\n            },\n            content: [\n              {\n                type: 'table',\n                content: [\n                  headerRow,\n                  createEmptyRow(),\n                  createEmptyRow(),\n                  createEmptyRow(),\n                ],\n              },\n            ],\n          })\n        },\n    }\n  },\n\n  addNodeView() {\n    return ReactNodeViewRenderer(BomNodeView)\n  },\n})","\"use client\"\n\nimport type { NodeViewProps } from \"@tiptap/react\"\nimport { NodeViewContent, NodeViewWrapper } from \"@tiptap/react\"\nimport * as React from \"react\"\nimport { Icon } from \"@iconify/react\"\nimport { cn } from \"@/lib/tiptap-utils\"\n\nexport type CalloutType = \"info\" | \"note\" | \"tip\" | \"warning\" | \"danger\"\n\ninterface CalloutConfig {\n  bg: string\n  border: string\n  icon: string\n  iconColor: string\n}\n\nconst calloutConfig: Record<CalloutType, CalloutConfig> = {\n  danger: {\n    bg: \"color-mix(in srgb, var(--tnkr-primary) 15%, transparent)\",\n    border: \"var(--tnkr-primary)\",\n    icon: \"mynaui:danger-octagon\",\n    iconColor: \"var(--tnkr-primary)\",\n  },\n  warning: {\n    bg: \"rgba(219, 120, 62, 0.15)\",\n    border: \"#DB783E\",\n    icon: \"circum:warning\",\n    iconColor: \"#DB783E\",\n  },\n  note: {\n    bg: \"rgba(58, 95, 170, 0.15)\",\n    border: \"#3A5FAA\",\n    icon: \"proicons:note\",\n    iconColor: \"#3A5FAA\",\n  },\n  tip: {\n    bg: \"#101B14\",\n    border: \"#00B453\",\n    icon: \"carbon:idea\",\n    iconColor: \"#00B453\",\n  },\n  info: {\n    bg: \"#161617\",\n    border: \"#313133\",\n    icon: \"quill:info\",\n    iconColor: \"#313133\",\n  },\n}\n\nexport function CalloutNodeView(props: NodeViewProps) {\n  const { node, updateAttributes } = props\n  const type = (node.attrs.type as CalloutType) || \"info\"\n  const config = calloutConfig[type]\n\n  return (\n    <NodeViewWrapper className=\"callout-node\">\n      <div\n        className={cn(\n          \"flex gap-3 p-4 rounded-lg border my-2\",\n        )}\n        style={{\n          backgroundColor: config.bg,\n          borderColor: config.border,\n          borderWidth: \"1px\",\n          color: \"rgba(255, 255, 255, 0.9)\",\n        }}\n      >\n        <div className=\"flex-shrink-0 pt-0.5\">\n          <Icon\n            icon={config.icon}\n            className=\"w-5 h-5\"\n            style={{ color: config.iconColor }}\n          />\n        </div>\n        <NodeViewContent\n          className=\"flex-1 text-sm leading-relaxed\"\n          style={{ color: \"rgba(255, 255, 255, 0.9)\" }}\n        />\n      </div>\n    </NodeViewWrapper>\n  )\n}\n","import { Node, mergeAttributes } from \"@tiptap/core\"\nimport { ReactNodeViewRenderer } from \"@tiptap/react\"\nimport { CalloutNodeView } from \"./callout-node-view\"\n\nexport type CalloutType = \"info\" | \"note\" | \"tip\" | \"warning\" | \"danger\"\n\nexport interface CalloutOptions {\n  HTMLAttributes: Record<string, any>\n}\n\ndeclare module \"@tiptap/core\" {\n  interface Commands<ReturnType> {\n    callout: {\n      /**\n       * Set a callout node\n       */\n      setCallout: (options?: { type?: CalloutType }) => ReturnType\n      /**\n       * Toggle a callout node\n       */\n      toggleCallout: (options?: { type?: CalloutType }) => ReturnType\n    }\n  }\n}\n\nexport const Callout = Node.create<CalloutOptions>({\n  name: \"callout\",\n\n  group: \"block\",\n\n  content: \"block+\",\n\n  defining: true,\n\n  addOptions() {\n    return {\n      HTMLAttributes: {},\n    }\n  },\n\n  addAttributes() {\n    return {\n      type: {\n        default: \"info\",\n        parseHTML: (element) => element.getAttribute(\"data-type\") || \"info\",\n        renderHTML: (attributes) => {\n          return {\n            \"data-type\": attributes.type,\n          }\n        },\n      },\n    }\n  },\n\n  parseHTML() {\n    return [\n      {\n        tag: 'div[data-type=\"callout\"]',\n      },\n    ]\n  },\n\n  renderHTML({ HTMLAttributes }) {\n    return [\n      \"div\",\n      mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n        \"data-type\": \"callout\",\n      }),\n      0,\n    ]\n  },\n\n  addNodeView() {\n    return ReactNodeViewRenderer(CalloutNodeView)\n  },\n\n  addCommands() {\n    return {\n      setCallout:\n        (options) =>\n        ({ commands }) => {\n          return commands.wrapIn(this.name, options)\n        },\n      toggleCallout:\n        (options) =>\n        ({ commands }) => {\n          return commands.toggleWrap(this.name, options)\n        },\n    }\n  },\n})\n\nexport default Callout\n","// src/code-block.ts\nimport { mergeAttributes, Node, textblockTypeInputRule } from \"@tiptap/core\";\nimport { Plugin, PluginKey, Selection, TextSelection } from \"@tiptap/pm/state\";\nvar backtickInputRegex = /^```([a-z]+)?[\\s\\n]$/;\nvar tildeInputRegex = /^~~~([a-z]+)?[\\s\\n]$/;\nvar CodeBlock = Node.create({\n  name: \"codeBlock\",\n  addOptions() {\n    return {\n      languageClassPrefix: \"language-\",\n      exitOnTripleEnter: true,\n      exitOnArrowDown: true,\n      defaultLanguage: null,\n      enableTabIndentation: false,\n      tabSize: 4,\n      HTMLAttributes: {}\n    };\n  },\n  content: \"text*\",\n  marks: \"\",\n  group: \"block\",\n  code: true,\n  defining: true,\n  addAttributes() {\n    return {\n      language: {\n        default: this.options.defaultLanguage,\n        parseHTML: (element) => {\n          var _a;\n          const { languageClassPrefix } = this.options;\n          const classNames = [...((_a = element.firstElementChild) == null ? void 0 : _a.classList) || []];\n          const languages = classNames.filter((className) => className.startsWith(languageClassPrefix)).map((className) => className.replace(languageClassPrefix, \"\"));\n          const language = languages[0];\n          if (!language) {\n            return null;\n          }\n          return language;\n        },\n        rendered: false\n      }\n    };\n  },\n  parseHTML() {\n    return [\n      {\n        tag: \"pre\",\n        preserveWhitespace: \"full\"\n      }\n    ];\n  },\n  renderHTML({ node, HTMLAttributes }) {\n    return [\n      \"pre\",\n      mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\n      [\n        \"code\",\n        {\n          class: node.attrs.language ? this.options.languageClassPrefix + node.attrs.language : null\n        },\n        0\n      ]\n    ];\n  },\n  addCommands() {\n    return {\n      setCodeBlock: (attributes) => ({ commands }) => {\n        return commands.setNode(this.name, attributes);\n      },\n      toggleCodeBlock: (attributes) => ({ commands }) => {\n        return commands.toggleNode(this.name, \"paragraph\", attributes);\n      }\n    };\n  },\n  addKeyboardShortcuts() {\n    return {\n      \"Mod-Alt-c\": () => this.editor.commands.toggleCodeBlock(),\n      // remove code block when at start of document or code block is empty\n      Backspace: () => {\n        const { empty, $anchor } = this.editor.state.selection;\n        const isAtStart = $anchor.pos === 1;\n        if (!empty || $anchor.parent.type.name !== this.name) {\n          return false;\n        }\n        if (isAtStart || !$anchor.parent.textContent.length) {\n          return this.editor.commands.clearNodes();\n        }\n        return false;\n      },\n      // handle tab indentation\n      Tab: ({ editor }) => {\n        if (!this.options.enableTabIndentation) {\n          return false;\n        }\n        const { state } = editor;\n        const { selection } = state;\n        const { $from, empty } = selection;\n        if ($from.parent.type !== this.type) {\n          return false;\n        }\n        const indent = \" \".repeat(this.options.tabSize);\n        if (empty) {\n          return editor.commands.insertContent(indent);\n        }\n        return editor.commands.command(({ tr }) => {\n          const { from, to } = selection;\n          const text = state.doc.textBetween(from, to, \"\\n\", \"\\n\");\n          const lines = text.split(\"\\n\");\n          const indentedText = lines.map((line) => indent + line).join(\"\\n\");\n          tr.replaceWith(from, to, state.schema.text(indentedText));\n          return true;\n        });\n      },\n      // handle shift+tab reverse indentation\n      \"Shift-Tab\": ({ editor }) => {\n        if (!this.options.enableTabIndentation) {\n          return false;\n        }\n        const { state } = editor;\n        const { selection } = state;\n        const { $from, empty } = selection;\n        if ($from.parent.type !== this.type) {\n          return false;\n        }\n        if (empty) {\n          return editor.commands.command(({ tr }) => {\n            var _a;\n            const { pos } = $from;\n            const codeBlockStart = $from.start();\n            const codeBlockEnd = $from.end();\n            const allText = state.doc.textBetween(codeBlockStart, codeBlockEnd, \"\\n\", \"\\n\");\n            const lines = allText.split(\"\\n\");\n            let currentLineIndex = 0;\n            let charCount = 0;\n            const relativeCursorPos = pos - codeBlockStart;\n            for (let i = 0; i < lines.length; i += 1) {\n              if (charCount + lines[i].length >= relativeCursorPos) {\n                currentLineIndex = i;\n                break;\n              }\n              charCount += lines[i].length + 1;\n            }\n            const currentLine = lines[currentLineIndex];\n            const leadingSpaces = ((_a = currentLine.match(/^ */)) == null ? void 0 : _a[0]) || \"\";\n            const spacesToRemove = Math.min(leadingSpaces.length, this.options.tabSize);\n            if (spacesToRemove === 0) {\n              return true;\n            }\n            let lineStartPos = codeBlockStart;\n            for (let i = 0; i < currentLineIndex; i += 1) {\n              lineStartPos += lines[i].length + 1;\n            }\n            tr.delete(lineStartPos, lineStartPos + spacesToRemove);\n            const cursorPosInLine = pos - lineStartPos;\n            if (cursorPosInLine <= spacesToRemove) {\n              tr.setSelection(TextSelection.create(tr.doc, lineStartPos));\n            }\n            return true;\n          });\n        }\n        return editor.commands.command(({ tr }) => {\n          const { from, to } = selection;\n          const text = state.doc.textBetween(from, to, \"\\n\", \"\\n\");\n          const lines = text.split(\"\\n\");\n          const reverseIndentText = lines.map((line) => {\n            var _a;\n            const leadingSpaces = ((_a = line.match(/^ */)) == null ? void 0 : _a[0]) || \"\";\n            const spacesToRemove = Math.min(leadingSpaces.length, this.options.tabSize);\n            return line.slice(spacesToRemove);\n          }).join(\"\\n\");\n          tr.replaceWith(from, to, state.schema.text(reverseIndentText));\n          return true;\n        });\n      },\n      // exit node on triple enter\n      Enter: ({ editor }) => {\n        if (!this.options.exitOnTripleEnter) {\n          return false;\n        }\n        const { state } = editor;\n        const { selection } = state;\n        const { $from, empty } = selection;\n        if (!empty || $from.parent.type !== this.type) {\n          return false;\n        }\n        const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2;\n        const endsWithDoubleNewline = $from.parent.textContent.endsWith(\"\\n\\n\");\n        if (!isAtEnd || !endsWithDoubleNewline) {\n          return false;\n        }\n        return editor.chain().command(({ tr }) => {\n          tr.delete($from.pos - 2, $from.pos);\n          return true;\n        }).exitCode().run();\n      },\n      // exit node on arrow down\n      ArrowDown: ({ editor }) => {\n        if (!this.options.exitOnArrowDown) {\n          return false;\n        }\n        const { state } = editor;\n        const { selection, doc } = state;\n        const { $from, empty } = selection;\n        if (!empty || $from.parent.type !== this.type) {\n          return false;\n        }\n        const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2;\n        if (!isAtEnd) {\n          return false;\n        }\n        const after = $from.after();\n        if (after === void 0) {\n          return false;\n        }\n        const nodeAfter = doc.nodeAt(after);\n        if (nodeAfter) {\n          return editor.commands.command(({ tr }) => {\n            tr.setSelection(Selection.near(doc.resolve(after)));\n            return true;\n          });\n        }\n        return editor.commands.exitCode();\n      }\n    };\n  },\n  addInputRules() {\n    return [\n      textblockTypeInputRule({\n        find: backtickInputRegex,\n        type: this.type,\n        getAttributes: (match) => ({\n          language: match[1]\n        })\n      }),\n      textblockTypeInputRule({\n        find: tildeInputRegex,\n        type: this.type,\n        getAttributes: (match) => ({\n          language: match[1]\n        })\n      })\n    ];\n  },\n  addProseMirrorPlugins() {\n    return [\n      // this plugin creates a code block for pasted content from VS Code\n      // we can also detect the copied code language\n      new Plugin({\n        key: new PluginKey(\"codeBlockVSCodeHandler\"),\n        props: {\n          handlePaste: (view, event) => {\n            if (!event.clipboardData) {\n              return false;\n            }\n            if (this.editor.isActive(this.type.name)) {\n              return false;\n            }\n            const text = event.clipboardData.getData(\"text/plain\");\n            const vscode = event.clipboardData.getData(\"vscode-editor-data\");\n            const vscodeData = vscode ? JSON.parse(vscode) : void 0;\n            const language = vscodeData == null ? void 0 : vscodeData.mode;\n            if (!text || !language) {\n              return false;\n            }\n            const { tr, schema } = view.state;\n            const textNode = schema.text(text.replace(/\\r\\n?/g, \"\\n\"));\n            tr.replaceSelectionWith(this.type.create({ language }, textNode));\n            if (tr.selection.$from.parent.type !== this.type) {\n              tr.setSelection(TextSelection.near(tr.doc.resolve(Math.max(0, tr.selection.from - 2))));\n            }\n            tr.setMeta(\"paste\", true);\n            view.dispatch(tr);\n            return true;\n          }\n        }\n      })\n    ];\n  }\n});\n\n// src/index.ts\nvar index_default = CodeBlock;\nexport {\n  CodeBlock,\n  backtickInputRegex,\n  index_default as default,\n  tildeInputRegex\n};\n//# sourceMappingURL=index.js.map","/* eslint-disable no-multi-assign */\n\nfunction deepFreeze(obj) {\n  if (obj instanceof Map) {\n    obj.clear =\n      obj.delete =\n      obj.set =\n        function () {\n          throw new Error('map is read-only');\n        };\n  } else if (obj instanceof Set) {\n    obj.add =\n      obj.clear =\n      obj.delete =\n        function () {\n          throw new Error('set is read-only');\n        };\n  }\n\n  // Freeze self\n  Object.freeze(obj);\n\n  Object.getOwnPropertyNames(obj).forEach((name) => {\n    const prop = obj[name];\n    const type = typeof prop;\n\n    // Freeze prop if it is an object or function and also not already frozen\n    if ((type === 'object' || type === 'function') && !Object.isFrozen(prop)) {\n      deepFreeze(prop);\n    }\n  });\n\n  return obj;\n}\n\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\n/** @implements CallbackResponse */\n\nclass Response {\n  /**\n   * @param {CompiledMode} mode\n   */\n  constructor(mode) {\n    // eslint-disable-next-line no-undefined\n    if (mode.data === undefined) mode.data = {};\n\n    this.data = mode.data;\n    this.isMatchIgnored = false;\n  }\n\n  ignoreMatch() {\n    this.isMatchIgnored = true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n  return value\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#x27;');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record<string,any>[]} objects\n * @returns {T} a single new object\n */\nfunction inherit$1(original, ...objects) {\n  /** @type Record<string,any> */\n  const result = Object.create(null);\n\n  for (const key in original) {\n    result[key] = original[key];\n  }\n  objects.forEach(function(obj) {\n    for (const key in obj) {\n      result[key] = obj[key];\n    }\n  });\n  return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '</span>';\n\n/**\n * Determines if a node needs to be wrapped in <span>\n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n  // rarely we can have a sublanguage where language is undefined\n  // TODO: track down why\n  return !!node.scope;\n};\n\n/**\n *\n * @param {string} name\n * @param {{prefix:string}} options\n */\nconst scopeToCSSClass = (name, { prefix }) => {\n  // sub-language\n  if (name.startsWith(\"language:\")) {\n    return name.replace(\"language:\", \"language-\");\n  }\n  // tiered scope: comment.line\n  if (name.includes(\".\")) {\n    const pieces = name.split(\".\");\n    return [\n      `${prefix}${pieces.shift()}`,\n      ...(pieces.map((x, i) => `${x}${\"_\".repeat(i + 1)}`))\n    ].join(\" \");\n  }\n  // simple scope\n  return `${prefix}${name}`;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n  /**\n   * Creates a new HTMLRenderer\n   *\n   * @param {Tree} parseTree - the parse tree (must support `walk` API)\n   * @param {{classPrefix: string}} options\n   */\n  constructor(parseTree, options) {\n    this.buffer = \"\";\n    this.classPrefix = options.classPrefix;\n    parseTree.walk(this);\n  }\n\n  /**\n   * Adds texts to the output stream\n   *\n   * @param {string} text */\n  addText(text) {\n    this.buffer += escapeHTML(text);\n  }\n\n  /**\n   * Adds a node open to the output stream (if needed)\n   *\n   * @param {Node} node */\n  openNode(node) {\n    if (!emitsWrappingTags(node)) return;\n\n    const className = scopeToCSSClass(node.scope,\n      { prefix: this.classPrefix });\n    this.span(className);\n  }\n\n  /**\n   * Adds a node close to the output stream (if needed)\n   *\n   * @param {Node} node */\n  closeNode(node) {\n    if (!emitsWrappingTags(node)) return;\n\n    this.buffer += SPAN_CLOSE;\n  }\n\n  /**\n   * returns the accumulated buffer\n  */\n  value() {\n    return this.buffer;\n  }\n\n  // helpers\n\n  /**\n   * Builds a span element\n   *\n   * @param {string} className */\n  span(className) {\n    this.buffer += `<span class=\"${className}\">`;\n  }\n}\n\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/**  */\n\n/** @returns {DataNode} */\nconst newNode = (opts = {}) => {\n  /** @type DataNode */\n  const result = { children: [] };\n  Object.assign(result, opts);\n  return result;\n};\n\nclass TokenTree {\n  constructor() {\n    /** @type DataNode */\n    this.rootNode = newNode();\n    this.stack = [this.rootNode];\n  }\n\n  get top() {\n    return this.stack[this.stack.length - 1];\n  }\n\n  get root() { return this.rootNode; }\n\n  /** @param {Node} node */\n  add(node) {\n    this.top.children.push(node);\n  }\n\n  /** @param {string} scope */\n  openNode(scope) {\n    /** @type Node */\n    const node = newNode({ scope });\n    this.add(node);\n    this.stack.push(node);\n  }\n\n  closeNode() {\n    if (this.stack.length > 1) {\n      return this.stack.pop();\n    }\n    // eslint-disable-next-line no-undefined\n    return undefined;\n  }\n\n  closeAllNodes() {\n    while (this.closeNode());\n  }\n\n  toJSON() {\n    return JSON.stringify(this.rootNode, null, 4);\n  }\n\n  /**\n   * @typedef { import(\"./html_renderer\").Renderer } Renderer\n   * @param {Renderer} builder\n   */\n  walk(builder) {\n    // this does not\n    return this.constructor._walk(builder, this.rootNode);\n    // this works\n    // return TokenTree._walk(builder, this.rootNode);\n  }\n\n  /**\n   * @param {Renderer} builder\n   * @param {Node} node\n   */\n  static _walk(builder, node) {\n    if (typeof node === \"string\") {\n      builder.addText(node);\n    } else if (node.children) {\n      builder.openNode(node);\n      node.children.forEach((child) => this._walk(builder, child));\n      builder.closeNode(node);\n    }\n    return builder;\n  }\n\n  /**\n   * @param {Node} node\n   */\n  static _collapse(node) {\n    if (typeof node === \"string\") return;\n    if (!node.children) return;\n\n    if (node.children.every(el => typeof el === \"string\")) {\n      // node.text = node.children.join(\"\");\n      // delete node.children;\n      node.children = [node.children.join(\"\")];\n    } else {\n      node.children.forEach((child) => {\n        TokenTree._collapse(child);\n      });\n    }\n  }\n}\n\n/**\n  Currently this is all private API, but this is the minimal API necessary\n  that an Emitter must implement to fully support the parser.\n\n  Minimal interface:\n\n  - addText(text)\n  - __addSublanguage(emitter, subLanguageName)\n  - startScope(scope)\n  - endScope()\n  - finalize()\n  - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n  /**\n   * @param {*} options\n   */\n  constructor(options) {\n    super();\n    this.options = options;\n  }\n\n  /**\n   * @param {string} text\n   */\n  addText(text) {\n    if (text === \"\") { return; }\n\n    this.add(text);\n  }\n\n  /** @param {string} scope */\n  startScope(scope) {\n    this.openNode(scope);\n  }\n\n  endScope() {\n    this.closeNode();\n  }\n\n  /**\n   * @param {Emitter & {root: DataNode}} emitter\n   * @param {string} name\n   */\n  __addSublanguage(emitter, name) {\n    /** @type DataNode */\n    const node = emitter.root;\n    if (name) node.scope = `language:${name}`;\n\n    this.add(node);\n  }\n\n  toHTML() {\n    const renderer = new HTMLRenderer(this, this.options);\n    return renderer.value();\n  }\n\n  finalize() {\n    this.closeAllNodes();\n    return true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction anyNumberOfTimes(re) {\n  return concat('(?:', re, ')*');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n  return concat('(?:', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/**\n * @param { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n  const opts = args[args.length - 1];\n\n  if (typeof opts === 'object' && opts.constructor === Object) {\n    args.splice(args.length - 1, 1);\n    return opts;\n  } else {\n    return {};\n  }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n  /** @type { object & {capture?: boolean} }  */\n  const opts = stripOptionsFromArgs(args);\n  const joined = '('\n    + (opts.capture ? \"\" : \"?:\")\n    + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\n/**\n * @param {RegExp | string} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n  return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n  const match = re && re.exec(lexeme);\n  return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid\n// an incorrect parse, it additionally matches the following:\n// - [...] elements, where the meaning of parentheses and escapes change\n// - other escape sequences, so we do not misparse escape sequences as\n//   interesting elements\n// - non-matching or lookahead parentheses, which do not capture. These\n//   follow the '(' with a '?'.\nconst BACKREF_RE = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n\n// **INTERNAL** Not intended for outside usage\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {{joinWith: string}} opts\n * @returns {string}\n */\nfunction _rewriteBackreferences(regexps, { joinWith }) {\n  let numCaptures = 0;\n\n  return regexps.map((regex) => {\n    numCaptures += 1;\n    const offset = numCaptures;\n    let re = source(regex);\n    let out = '';\n\n    while (re.length > 0) {\n      const match = BACKREF_RE.exec(re);\n      if (!match) {\n        out += re;\n        break;\n      }\n      out += re.substring(0, match.index);\n      re = re.substring(match.index + match[0].length);\n      if (match[0][0] === '\\\\' && match[1]) {\n        // Adjust the backreference.\n        out += '\\\\' + String(Number(match[1]) + offset);\n      } else {\n        out += match[0];\n        if (match[0] === '(') {\n          numCaptures++;\n        }\n      }\n    }\n    return out;\n  }).map(re => `(${re})`).join(joinWith);\n}\n\n/** @typedef {import('highlight.js').Mode} Mode */\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial<Mode> & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n  const beginShebang = /^#![ ]*\\//;\n  if (opts.binary) {\n    opts.begin = concat(\n      beginShebang,\n      /.*\\b/,\n      opts.binary,\n      /\\b.*/);\n  }\n  return inherit$1({\n    scope: 'meta',\n    begin: beginShebang,\n    end: /$/,\n    relevance: 0,\n    /** @type {ModeCallback} */\n    \"on:begin\": (m, resp) => {\n      if (m.index !== 0) resp.ignoreMatch();\n    }\n  }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n  begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n  scope: 'string',\n  begin: '\\'',\n  end: '\\'',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n  scope: 'string',\n  begin: '\"',\n  end: '\"',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n  begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial<Mode>}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n  const mode = inherit$1(\n    {\n      scope: 'comment',\n      begin,\n      end,\n      contains: []\n    },\n    modeOptions\n  );\n  mode.contains.push({\n    scope: 'doctag',\n    // hack to avoid the space from being included. the space is necessary to\n    // match here to prevent the plain text rule below from gobbling up doctags\n    begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\n    end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\n    excludeBegin: true,\n    relevance: 0\n  });\n  const ENGLISH_WORD = either(\n    // list of common 1 and 2 letter words in English\n    \"I\",\n    \"a\",\n    \"is\",\n    \"so\",\n    \"us\",\n    \"to\",\n    \"at\",\n    \"if\",\n    \"in\",\n    \"it\",\n    \"on\",\n    // note: this is not an exhaustive list of contractions, just popular ones\n    /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\n    /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\n    /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\n  );\n  // looking like plain text, more likely to be a comment\n  mode.contains.push(\n    {\n      // TODO: how to include \", (, ) without breaking grammars that use these for\n      // comment delimiters?\n      // begin: /[ ]+([()\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\":]?([.][ ]|[ ]|\\))){3}/\n      // ---\n\n      // this tries to find sequences of 3 english words in a row (without any\n      // \"programming\" type syntax) this gives us a strong signal that we've\n      // TRULY found a comment - vs perhaps scanning with the wrong language.\n      // It's possible to find something that LOOKS like the start of the\n      // comment - but then if there is no readable text - good chance it is a\n      // false match and not a comment.\n      //\n      // for a visual example please see:\n      // https://github.com/highlightjs/highlight.js/issues/2827\n\n      begin: concat(\n        /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\n        '(',\n        ENGLISH_WORD,\n        /[.]?[:]?([.][ ]|[ ])/,\n        '){3}') // look for 3 words in a row\n    }\n  );\n  return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n  scope: 'number',\n  begin: NUMBER_RE,\n  relevance: 0\n};\nconst C_NUMBER_MODE = {\n  scope: 'number',\n  begin: C_NUMBER_RE,\n  relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n  scope: 'number',\n  begin: BINARY_NUMBER_RE,\n  relevance: 0\n};\nconst REGEXP_MODE = {\n  scope: \"regexp\",\n  begin: /\\/(?=[^/\\n]*\\/)/,\n  end: /\\/[gimuy]*/,\n  contains: [\n    BACKSLASH_ESCAPE,\n    {\n      begin: /\\[/,\n      end: /\\]/,\n      relevance: 0,\n      contains: [BACKSLASH_ESCAPE]\n    }\n  ]\n};\nconst TITLE_MODE = {\n  scope: 'title',\n  begin: IDENT_RE,\n  relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n  scope: 'title',\n  begin: UNDERSCORE_IDENT_RE,\n  relevance: 0\n};\nconst METHOD_GUARD = {\n  // excludes method names from keyword processing\n  begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n  relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial<Mode>} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n  return Object.assign(mode,\n    {\n      /** @type {ModeCallback} */\n      'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n      /** @type {ModeCallback} */\n      'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n    });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  APOS_STRING_MODE: APOS_STRING_MODE,\n  BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n  BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n  BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n  COMMENT: COMMENT,\n  C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n  C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n  C_NUMBER_MODE: C_NUMBER_MODE,\n  C_NUMBER_RE: C_NUMBER_RE,\n  END_SAME_AS_BEGIN: END_SAME_AS_BEGIN,\n  HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n  IDENT_RE: IDENT_RE,\n  MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n  METHOD_GUARD: METHOD_GUARD,\n  NUMBER_MODE: NUMBER_MODE,\n  NUMBER_RE: NUMBER_RE,\n  PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n  QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n  REGEXP_MODE: REGEXP_MODE,\n  RE_STARTERS_RE: RE_STARTERS_RE,\n  SHEBANG: SHEBANG,\n  TITLE_MODE: TITLE_MODE,\n  UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n  UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE\n});\n\n/**\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\n@typedef {import('highlight.js').CompilerExt} CompilerExt\n*/\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`.  The extension then just moves `match` into\n// `begin` when it runs.  Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfHasPrecedingDot(match, response) {\n  const before = match.input[match.index - 1];\n  if (before === \".\") {\n    response.ignoreMatch();\n  }\n}\n\n/**\n *\n * @type {CompilerExt}\n */\nfunction scopeClassName(mode, _parent) {\n  // eslint-disable-next-line no-undefined\n  if (mode.className !== undefined) {\n    mode.scope = mode.className;\n    delete mode.className;\n  }\n}\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n  if (!parent) return;\n  if (!mode.beginKeywords) return;\n\n  // for languages with keywords that include non-word characters checking for\n  // a word boundary is not sufficient, so instead we check for a word boundary\n  // or whitespace - this does no harm in any case since our keyword engine\n  // doesn't allow spaces in keywords anyways and we still check for the boundary\n  // first\n  mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n  mode.__beforeBegin = skipIfHasPrecedingDot;\n  mode.keywords = mode.keywords || mode.beginKeywords;\n  delete mode.beginKeywords;\n\n  // prevents double relevance, the keywords themselves provide\n  // relevance, the mode doesn't need to double it\n  // eslint-disable-next-line no-undefined\n  if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n  if (!Array.isArray(mode.illegal)) return;\n\n  mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n  if (!mode.match) return;\n  if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n  mode.begin = mode.match;\n  delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n  // eslint-disable-next-line no-undefined\n  if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// allow beforeMatch to act as a \"qualifier\" for the match\n// the full match begin must be [beforeMatch][begin]\nconst beforeMatchExt = (mode, parent) => {\n  if (!mode.beforeMatch) return;\n  // starts conflicts with endsParent which we need to make sure the child\n  // rule is not matched multiple times\n  if (mode.starts) throw new Error(\"beforeMatch cannot be used with starts\");\n\n  const originalMode = Object.assign({}, mode);\n  Object.keys(mode).forEach((key) => { delete mode[key]; });\n\n  mode.keywords = originalMode.keywords;\n  mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\n  mode.starts = {\n    relevance: 0,\n    contains: [\n      Object.assign(originalMode, { endsParent: true })\n    ]\n  };\n  mode.relevance = 0;\n\n  delete originalMode.beforeMatch;\n};\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n  'of',\n  'and',\n  'for',\n  'in',\n  'not',\n  'or',\n  'if',\n  'then',\n  'parent', // common variable name\n  'list', // common variable name\n  'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_SCOPE = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record<string,string|string[]> | Array<string>} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\n  /** @type {import(\"highlight.js/private\").KeywordDict} */\n  const compiledKeywords = Object.create(null);\n\n  // input can be a string of keywords, an array of keywords, or a object with\n  // named keys representing scopeName (which can then point to a string or array)\n  if (typeof rawKeywords === 'string') {\n    compileList(scopeName, rawKeywords.split(\" \"));\n  } else if (Array.isArray(rawKeywords)) {\n    compileList(scopeName, rawKeywords);\n  } else {\n    Object.keys(rawKeywords).forEach(function(scopeName) {\n      // collapse all our objects back into the parent object\n      Object.assign(\n        compiledKeywords,\n        compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\n      );\n    });\n  }\n  return compiledKeywords;\n\n  // ---\n\n  /**\n   * Compiles an individual list of keywords\n   *\n   * Ex: \"for if when while|5\"\n   *\n   * @param {string} scopeName\n   * @param {Array<string>} keywordList\n   */\n  function compileList(scopeName, keywordList) {\n    if (caseInsensitive) {\n      keywordList = keywordList.map(x => x.toLowerCase());\n    }\n    keywordList.forEach(function(keyword) {\n      const pair = keyword.split('|');\n      compiledKeywords[pair[0]] = [scopeName, scoreForKeyword(pair[0], pair[1])];\n    });\n  }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n  // manual scores always win over common keywords\n  // so you can force a score of 1 if you really insist\n  if (providedScore) {\n    return Number(providedScore);\n  }\n\n  return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n  return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record<string, boolean>}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n  console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n  console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n  if (seenDeprecations[`${version}/${message}`]) return;\n\n  console.log(`Deprecated as of ${version}. ${message}`);\n  seenDeprecations[`${version}/${message}`] = true;\n};\n\n/* eslint-disable no-throw-literal */\n\n/**\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n*/\n\nconst MultiClassError = new Error();\n\n/**\n * Renumbers labeled scope names to account for additional inner match\n * groups that otherwise would break everything.\n *\n * Lets say we 3 match scopes:\n *\n *   { 1 => ..., 2 => ..., 3 => ... }\n *\n * So what we need is a clean match like this:\n *\n *   (a)(b)(c) => [ \"a\", \"b\", \"c\" ]\n *\n * But this falls apart with inner match groups:\n *\n * (a)(((b)))(c) => [\"a\", \"b\", \"b\", \"b\", \"c\" ]\n *\n * Our scopes are now \"out of alignment\" and we're repeating `b` 3 times.\n * What needs to happen is the numbers are remapped:\n *\n *   { 1 => ..., 2 => ..., 5 => ... }\n *\n * We also need to know that the ONLY groups that should be output\n * are 1, 2, and 5.  This function handles this behavior.\n *\n * @param {CompiledMode} mode\n * @param {Array<RegExp | string>} regexes\n * @param {{key: \"beginScope\"|\"endScope\"}} opts\n */\nfunction remapScopeNames(mode, regexes, { key }) {\n  let offset = 0;\n  const scopeNames = mode[key];\n  /** @type Record<number,boolean> */\n  const emit = {};\n  /** @type Record<number,string> */\n  const positions = {};\n\n  for (let i = 1; i <= regexes.length; i++) {\n    positions[i + offset] = scopeNames[i];\n    emit[i + offset] = true;\n    offset += countMatchGroups(regexes[i - 1]);\n  }\n  // we use _emit to keep track of which match groups are \"top-level\" to avoid double\n  // output from inside match groups\n  mode[key] = positions;\n  mode[key]._emit = emit;\n  mode[key]._multi = true;\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction beginMultiClass(mode) {\n  if (!Array.isArray(mode.begin)) return;\n\n  if (mode.skip || mode.excludeBegin || mode.returnBegin) {\n    error(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\");\n    throw MultiClassError;\n  }\n\n  if (typeof mode.beginScope !== \"object\" || mode.beginScope === null) {\n    error(\"beginScope must be object\");\n    throw MultiClassError;\n  }\n\n  remapScopeNames(mode, mode.begin, { key: \"beginScope\" });\n  mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \"\" });\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction endMultiClass(mode) {\n  if (!Array.isArray(mode.end)) return;\n\n  if (mode.skip || mode.excludeEnd || mode.returnEnd) {\n    error(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\");\n    throw MultiClassError;\n  }\n\n  if (typeof mode.endScope !== \"object\" || mode.endScope === null) {\n    error(\"endScope must be object\");\n    throw MultiClassError;\n  }\n\n  remapScopeNames(mode, mode.end, { key: \"endScope\" });\n  mode.end = _rewriteBackreferences(mode.end, { joinWith: \"\" });\n}\n\n/**\n * this exists only to allow `scope: {}` to be used beside `match:`\n * Otherwise `beginScope` would necessary and that would look weird\n\n  {\n    match: [ /def/, /\\w+/ ]\n    scope: { 1: \"keyword\" , 2: \"title\" }\n  }\n\n * @param {CompiledMode} mode\n */\nfunction scopeSugar(mode) {\n  if (mode.scope && typeof mode.scope === \"object\" && mode.scope !== null) {\n    mode.beginScope = mode.scope;\n    delete mode.scope;\n  }\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction MultiClass(mode) {\n  scopeSugar(mode);\n\n  if (typeof mode.beginScope === \"string\") {\n    mode.beginScope = { _wrap: mode.beginScope };\n  }\n  if (typeof mode.endScope === \"string\") {\n    mode.endScope = { _wrap: mode.endScope };\n  }\n\n  beginMultiClass(mode);\n  endMultiClass(mode);\n}\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\n*/\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language) {\n  /**\n   * Builds a regex with the case sensitivity of the current language\n   *\n   * @param {RegExp | string} value\n   * @param {boolean} [global]\n   */\n  function langRe(value, global) {\n    return new RegExp(\n      source(value),\n      'm'\n      + (language.case_insensitive ? 'i' : '')\n      + (language.unicodeRegex ? 'u' : '')\n      + (global ? 'g' : '')\n    );\n  }\n\n  /**\n    Stores multiple regular expressions and allows you to quickly search for\n    them all in a string simultaneously - returning the first match.  It does\n    this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n    and joined by `|` - using match groups to track position.  When a match is\n    found checking which position in the array has content allows us to figure\n    out which of the original regexes / match groups triggered the match.\n\n    The match object itself (the result of `Regex.exec`) is returned but also\n    enhanced by merging in any meta-data that was registered with the regex.\n    This is how we keep track of which mode matched, and what type of rule\n    (`illegal`, `begin`, end, etc).\n  */\n  class MultiRegex {\n    constructor() {\n      this.matchIndexes = {};\n      // @ts-ignore\n      this.regexes = [];\n      this.matchAt = 1;\n      this.position = 0;\n    }\n\n    // @ts-ignore\n    addRule(re, opts) {\n      opts.position = this.position++;\n      // @ts-ignore\n      this.matchIndexes[this.matchAt] = opts;\n      this.regexes.push([opts, re]);\n      this.matchAt += countMatchGroups(re) + 1;\n    }\n\n    compile() {\n      if (this.regexes.length === 0) {\n        // avoids the need to check length every time exec is called\n        // @ts-ignore\n        this.exec = () => null;\n      }\n      const terminators = this.regexes.map(el => el[1]);\n      this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: '|' }), true);\n      this.lastIndex = 0;\n    }\n\n    /** @param {string} s */\n    exec(s) {\n      this.matcherRe.lastIndex = this.lastIndex;\n      const match = this.matcherRe.exec(s);\n      if (!match) { return null; }\n\n      // eslint-disable-next-line no-undefined\n      const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n      // @ts-ignore\n      const matchData = this.matchIndexes[i];\n      // trim off any earlier non-relevant match groups (ie, the other regex\n      // match groups that make up the multi-matcher)\n      match.splice(0, i);\n\n      return Object.assign(match, matchData);\n    }\n  }\n\n  /*\n    Created to solve the key deficiently with MultiRegex - there is no way to\n    test for multiple matches at a single location.  Why would we need to do\n    that?  In the future a more dynamic engine will allow certain matches to be\n    ignored.  An example: if we matched say the 3rd regex in a large group but\n    decided to ignore it - we'd need to started testing again at the 4th\n    regex... but MultiRegex itself gives us no real way to do that.\n\n    So what this class creates MultiRegexs on the fly for whatever search\n    position they are needed.\n\n    NOTE: These additional MultiRegex objects are created dynamically.  For most\n    grammars most of the time we will never actually need anything more than the\n    first MultiRegex - so this shouldn't have too much overhead.\n\n    Say this is our search group, and we match regex3, but wish to ignore it.\n\n      regex1 | regex2 | regex3 | regex4 | regex5    ' ie, startAt = 0\n\n    What we need is a new MultiRegex that only includes the remaining\n    possibilities:\n\n      regex4 | regex5                               ' ie, startAt = 3\n\n    This class wraps all that complexity up in a simple API... `startAt` decides\n    where in the array of expressions to start doing the matching. It\n    auto-increments, so if a match is found at position 2, then startAt will be\n    set to 3.  If the end is reached startAt will return to 0.\n\n    MOST of the time the parser will be setting startAt manually to 0.\n  */\n  class ResumableMultiRegex {\n    constructor() {\n      // @ts-ignore\n      this.rules = [];\n      // @ts-ignore\n      this.multiRegexes = [];\n      this.count = 0;\n\n      this.lastIndex = 0;\n      this.regexIndex = 0;\n    }\n\n    // @ts-ignore\n    getMatcher(index) {\n      if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n      const matcher = new MultiRegex();\n      this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n      matcher.compile();\n      this.multiRegexes[index] = matcher;\n      return matcher;\n    }\n\n    resumingScanAtSamePosition() {\n      return this.regexIndex !== 0;\n    }\n\n    considerAll() {\n      this.regexIndex = 0;\n    }\n\n    // @ts-ignore\n    addRule(re, opts) {\n      this.rules.push([re, opts]);\n      if (opts.type === \"begin\") this.count++;\n    }\n\n    /** @param {string} s */\n    exec(s) {\n      const m = this.getMatcher(this.regexIndex);\n      m.lastIndex = this.lastIndex;\n      let result = m.exec(s);\n\n      // The following is because we have no easy way to say \"resume scanning at the\n      // existing position but also skip the current rule ONLY\". What happens is\n      // all prior rules are also skipped which can result in matching the wrong\n      // thing. Example of matching \"booger\":\n\n      // our matcher is [string, \"booger\", number]\n      //\n      // ....booger....\n\n      // if \"booger\" is ignored then we'd really need a regex to scan from the\n      // SAME position for only: [string, number] but ignoring \"booger\" (if it\n      // was the first match), a simple resume would scan ahead who knows how\n      // far looking only for \"number\", ignoring potential string matches (or\n      // future \"booger\" matches that might be valid.)\n\n      // So what we do: We execute two matchers, one resuming at the same\n      // position, but the second full matcher starting at the position after:\n\n      //     /--- resume first regex match here (for [number])\n      //     |/---- full match here for [string, \"booger\", number]\n      //     vv\n      // ....booger....\n\n      // Which ever results in a match first is then used. So this 3-4 step\n      // process essentially allows us to say \"match at this position, excluding\n      // a prior rule that was ignored\".\n      //\n      // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n      // 2. Resume matching for [number]\n      // 3. Match at index + 1 for [string, \"booger\", number]\n      // 4. If #2 and #3 result in matches, which came first?\n      if (this.resumingScanAtSamePosition()) {\n        if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n          const m2 = this.getMatcher(0);\n          m2.lastIndex = this.lastIndex + 1;\n          result = m2.exec(s);\n        }\n      }\n\n      if (result) {\n        this.regexIndex += result.position + 1;\n        if (this.regexIndex === this.count) {\n          // wrap-around to considering all matches again\n          this.considerAll();\n        }\n      }\n\n      return result;\n    }\n  }\n\n  /**\n   * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n   * the content and find matches.\n   *\n   * @param {CompiledMode} mode\n   * @returns {ResumableMultiRegex}\n   */\n  function buildModeRegex(mode) {\n    const mm = new ResumableMultiRegex();\n\n    mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n    if (mode.terminatorEnd) {\n      mm.addRule(mode.terminatorEnd, { type: \"end\" });\n    }\n    if (mode.illegal) {\n      mm.addRule(mode.illegal, { type: \"illegal\" });\n    }\n\n    return mm;\n  }\n\n  /** skip vs abort vs ignore\n   *\n   * @skip   - The mode is still entered and exited normally (and contains rules apply),\n   *           but all content is held and added to the parent buffer rather than being\n   *           output when the mode ends.  Mostly used with `sublanguage` to build up\n   *           a single large buffer than can be parsed by sublanguage.\n   *\n   *             - The mode begin ands ends normally.\n   *             - Content matched is added to the parent mode buffer.\n   *             - The parser cursor is moved forward normally.\n   *\n   * @abort  - A hack placeholder until we have ignore.  Aborts the mode (as if it\n   *           never matched) but DOES NOT continue to match subsequent `contains`\n   *           modes.  Abort is bad/suboptimal because it can result in modes\n   *           farther down not getting applied because an earlier rule eats the\n   *           content but then aborts.\n   *\n   *             - The mode does not begin.\n   *             - Content matched by `begin` is added to the mode buffer.\n   *             - The parser cursor is moved forward accordingly.\n   *\n   * @ignore - Ignores the mode (as if it never matched) and continues to match any\n   *           subsequent `contains` modes.  Ignore isn't technically possible with\n   *           the current parser implementation.\n   *\n   *             - The mode does not begin.\n   *             - Content matched by `begin` is ignored.\n   *             - The parser cursor is not moved forward.\n   */\n\n  /**\n   * Compiles an individual mode\n   *\n   * This can raise an error if the mode contains certain detectable known logic\n   * issues.\n   * @param {Mode} mode\n   * @param {CompiledMode | null} [parent]\n   * @returns {CompiledMode | never}\n   */\n  function compileMode(mode, parent) {\n    const cmode = /** @type CompiledMode */ (mode);\n    if (mode.isCompiled) return cmode;\n\n    [\n      scopeClassName,\n      // do this early so compiler extensions generally don't have to worry about\n      // the distinction between match/begin\n      compileMatch,\n      MultiClass,\n      beforeMatchExt\n    ].forEach(ext => ext(mode, parent));\n\n    language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n    // __beforeBegin is considered private API, internal use only\n    mode.__beforeBegin = null;\n\n    [\n      beginKeywords,\n      // do this later so compiler extensions that come earlier have access to the\n      // raw array if they wanted to perhaps manipulate it, etc.\n      compileIllegal,\n      // default to 1 relevance if not specified\n      compileRelevance\n    ].forEach(ext => ext(mode, parent));\n\n    mode.isCompiled = true;\n\n    let keywordPattern = null;\n    if (typeof mode.keywords === \"object\" && mode.keywords.$pattern) {\n      // we need a copy because keywords might be compiled multiple times\n      // so we can't go deleting $pattern from the original on the first\n      // pass\n      mode.keywords = Object.assign({}, mode.keywords);\n      keywordPattern = mode.keywords.$pattern;\n      delete mode.keywords.$pattern;\n    }\n    keywordPattern = keywordPattern || /\\w+/;\n\n    if (mode.keywords) {\n      mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n    }\n\n    cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n    if (parent) {\n      if (!mode.begin) mode.begin = /\\B|\\b/;\n      cmode.beginRe = langRe(cmode.begin);\n      if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n      if (mode.end) cmode.endRe = langRe(cmode.end);\n      cmode.terminatorEnd = source(cmode.end) || '';\n      if (mode.endsWithParent && parent.terminatorEnd) {\n        cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n      }\n    }\n    if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n    if (!mode.contains) mode.contains = [];\n\n    mode.contains = [].concat(...mode.contains.map(function(c) {\n      return expandOrCloneMode(c === 'self' ? mode : c);\n    }));\n    mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n    if (mode.starts) {\n      compileMode(mode.starts, parent);\n    }\n\n    cmode.matcher = buildModeRegex(cmode);\n    return cmode;\n  }\n\n  if (!language.compilerExtensions) language.compilerExtensions = [];\n\n  // self is not valid at the top-level\n  if (language.contains && language.contains.includes('self')) {\n    throw new Error(\"ERR: contains `self` is not supported at the top-level of a language.  See documentation.\");\n  }\n\n  // we need a null object, which inherit will guarantee\n  language.classNameAliases = inherit$1(language.classNameAliases || {});\n\n  return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n  if (!mode) return false;\n\n  return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n  if (mode.variants && !mode.cachedVariants) {\n    mode.cachedVariants = mode.variants.map(function(variant) {\n      return inherit$1(mode, { variants: null }, variant);\n    });\n  }\n\n  // EXPAND\n  // if we have variants then essentially \"replace\" the mode with the variants\n  // this happens in compileMode, where this function is called from\n  if (mode.cachedVariants) {\n    return mode.cachedVariants;\n  }\n\n  // CLONE\n  // if we have dependencies on parents then we need a unique\n  // instance of ourselves, so we can be reused with many\n  // different parents without issue\n  if (dependencyOnParent(mode)) {\n    return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\n  }\n\n  if (Object.isFrozen(mode)) {\n    return inherit$1(mode);\n  }\n\n  // no special dependency issues, just return ourselves\n  return mode;\n}\n\nvar version = \"11.11.1\";\n\nclass HTMLInjectionError extends Error {\n  constructor(reason, html) {\n    super(reason);\n    this.name = \"HTMLInjectionError\";\n    this.html = html;\n  }\n}\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').CompiledScope} CompiledScope\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSApi} HLJSApi\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').PluginEvent} PluginEvent\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\n@typedef {import('highlight.js').LanguageFn} LanguageFn\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\n@typedef {import('highlight.js/private').MatchType} MatchType\n@typedef {import('highlight.js/private').KeywordData} KeywordData\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\n@typedef {import('highlight.js').HighlightResult} HighlightResult\n*/\n\n\nconst escape = escapeHTML;\nconst inherit = inherit$1;\nconst NO_MATCH = Symbol(\"nomatch\");\nconst MAX_KEYWORD_HITS = 7;\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n  // Global internal variables used within the highlight.js library.\n  /** @type {Record<string, Language>} */\n  const languages = Object.create(null);\n  /** @type {Record<string, string>} */\n  const aliases = Object.create(null);\n  /** @type {HLJSPlugin[]} */\n  const plugins = [];\n\n  // safe/production mode - swallows more errors, tries to keep running\n  // even if a single syntax or parse hits a fatal error\n  let SAFE_MODE = true;\n  const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n  /** @type {Language} */\n  const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n  // Global options used when within external APIs. This is modified when\n  // calling the `hljs.configure` function.\n  /** @type HLJSOptions */\n  let options = {\n    ignoreUnescapedHTML: false,\n    throwUnescapedHTML: false,\n    noHighlightRe: /^(no-?highlight)$/i,\n    languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n    classPrefix: 'hljs-',\n    cssSelector: 'pre code',\n    languages: null,\n    // beta configuration options, subject to change, welcome to discuss\n    // https://github.com/highlightjs/highlight.js/issues/1086\n    __emitter: TokenTreeEmitter\n  };\n\n  /* Utility functions */\n\n  /**\n   * Tests a language name to see if highlighting should be skipped\n   * @param {string} languageName\n   */\n  function shouldNotHighlight(languageName) {\n    return options.noHighlightRe.test(languageName);\n  }\n\n  /**\n   * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n   */\n  function blockLanguage(block) {\n    let classes = block.className + ' ';\n\n    classes += block.parentNode ? block.parentNode.className : '';\n\n    // language-* takes precedence over non-prefixed class names.\n    const match = options.languageDetectRe.exec(classes);\n    if (match) {\n      const language = getLanguage(match[1]);\n      if (!language) {\n        warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n        warn(\"Falling back to no-highlight mode for this block.\", block);\n      }\n      return language ? match[1] : 'no-highlight';\n    }\n\n    return classes\n      .split(/\\s+/)\n      .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n  }\n\n  /**\n   * Core highlighting function.\n   *\n   * OLD API\n   * highlight(lang, code, ignoreIllegals, continuation)\n   *\n   * NEW API\n   * highlight(code, {lang, ignoreIllegals})\n   *\n   * @param {string} codeOrLanguageName - the language to use for highlighting\n   * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n   * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n   *\n   * @returns {HighlightResult} Result - an object that represents the result\n   * @property {string} language - the language name\n   * @property {number} relevance - the relevance score\n   * @property {string} value - the highlighted HTML code\n   * @property {string} code - the original raw code\n   * @property {CompiledMode} top - top of the current mode stack\n   * @property {boolean} illegal - indicates whether any illegal matches were found\n  */\n  function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\n    let code = \"\";\n    let languageName = \"\";\n    if (typeof optionsOrCode === \"object\") {\n      code = codeOrLanguageName;\n      ignoreIllegals = optionsOrCode.ignoreIllegals;\n      languageName = optionsOrCode.language;\n    } else {\n      // old API\n      deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n      deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n      languageName = codeOrLanguageName;\n      code = optionsOrCode;\n    }\n\n    // https://github.com/highlightjs/highlight.js/issues/3149\n    // eslint-disable-next-line no-undefined\n    if (ignoreIllegals === undefined) { ignoreIllegals = true; }\n\n    /** @type {BeforeHighlightContext} */\n    const context = {\n      code,\n      language: languageName\n    };\n    // the plugin can change the desired language or the code to be highlighted\n    // just be changing the object it was passed\n    fire(\"before:highlight\", context);\n\n    // a before plugin can usurp the result completely by providing it's own\n    // in which case we don't even need to call highlight\n    const result = context.result\n      ? context.result\n      : _highlight(context.language, context.code, ignoreIllegals);\n\n    result.code = context.code;\n    // the plugin can change anything in result to suite it\n    fire(\"after:highlight\", result);\n\n    return result;\n  }\n\n  /**\n   * private highlight that's used internally and does not fire callbacks\n   *\n   * @param {string} languageName - the language to use for highlighting\n   * @param {string} codeToHighlight - the code to highlight\n   * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n   * @param {CompiledMode?} [continuation] - current continuation mode, if any\n   * @returns {HighlightResult} - result of the highlight operation\n  */\n  function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n    const keywordHits = Object.create(null);\n\n    /**\n     * Return keyword data if a match is a keyword\n     * @param {CompiledMode} mode - current mode\n     * @param {string} matchText - the textual match\n     * @returns {KeywordData | false}\n     */\n    function keywordData(mode, matchText) {\n      return mode.keywords[matchText];\n    }\n\n    function processKeywords() {\n      if (!top.keywords) {\n        emitter.addText(modeBuffer);\n        return;\n      }\n\n      let lastIndex = 0;\n      top.keywordPatternRe.lastIndex = 0;\n      let match = top.keywordPatternRe.exec(modeBuffer);\n      let buf = \"\";\n\n      while (match) {\n        buf += modeBuffer.substring(lastIndex, match.index);\n        const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\n        const data = keywordData(top, word);\n        if (data) {\n          const [kind, keywordRelevance] = data;\n          emitter.addText(buf);\n          buf = \"\";\n\n          keywordHits[word] = (keywordHits[word] || 0) + 1;\n          if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\n          if (kind.startsWith(\"_\")) {\n            // _ implied for relevance only, do not highlight\n            // by applying a class name\n            buf += match[0];\n          } else {\n            const cssClass = language.classNameAliases[kind] || kind;\n            emitKeyword(match[0], cssClass);\n          }\n        } else {\n          buf += match[0];\n        }\n        lastIndex = top.keywordPatternRe.lastIndex;\n        match = top.keywordPatternRe.exec(modeBuffer);\n      }\n      buf += modeBuffer.substring(lastIndex);\n      emitter.addText(buf);\n    }\n\n    function processSubLanguage() {\n      if (modeBuffer === \"\") return;\n      /** @type HighlightResult */\n      let result = null;\n\n      if (typeof top.subLanguage === 'string') {\n        if (!languages[top.subLanguage]) {\n          emitter.addText(modeBuffer);\n          return;\n        }\n        result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n        continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\n      } else {\n        result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n      }\n\n      // Counting embedded language score towards the host language may be disabled\n      // with zeroing the containing mode relevance. Use case in point is Markdown that\n      // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n      // score.\n      if (top.relevance > 0) {\n        relevance += result.relevance;\n      }\n      emitter.__addSublanguage(result._emitter, result.language);\n    }\n\n    function processBuffer() {\n      if (top.subLanguage != null) {\n        processSubLanguage();\n      } else {\n        processKeywords();\n      }\n      modeBuffer = '';\n    }\n\n    /**\n     * @param {string} text\n     * @param {string} scope\n     */\n    function emitKeyword(keyword, scope) {\n      if (keyword === \"\") return;\n\n      emitter.startScope(scope);\n      emitter.addText(keyword);\n      emitter.endScope();\n    }\n\n    /**\n     * @param {CompiledScope} scope\n     * @param {RegExpMatchArray} match\n     */\n    function emitMultiClass(scope, match) {\n      let i = 1;\n      const max = match.length - 1;\n      while (i <= max) {\n        if (!scope._emit[i]) { i++; continue; }\n        const klass = language.classNameAliases[scope[i]] || scope[i];\n        const text = match[i];\n        if (klass) {\n          emitKeyword(text, klass);\n        } else {\n          modeBuffer = text;\n          processKeywords();\n          modeBuffer = \"\";\n        }\n        i++;\n      }\n    }\n\n    /**\n     * @param {CompiledMode} mode - new mode to start\n     * @param {RegExpMatchArray} match\n     */\n    function startNewMode(mode, match) {\n      if (mode.scope && typeof mode.scope === \"string\") {\n        emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\n      }\n      if (mode.beginScope) {\n        // beginScope just wraps the begin match itself in a scope\n        if (mode.beginScope._wrap) {\n          emitKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\n          modeBuffer = \"\";\n        } else if (mode.beginScope._multi) {\n          // at this point modeBuffer should just be the match\n          emitMultiClass(mode.beginScope, match);\n          modeBuffer = \"\";\n        }\n      }\n\n      top = Object.create(mode, { parent: { value: top } });\n      return top;\n    }\n\n    /**\n     * @param {CompiledMode } mode - the mode to potentially end\n     * @param {RegExpMatchArray} match - the latest match\n     * @param {string} matchPlusRemainder - match plus remainder of content\n     * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n     */\n    function endOfMode(mode, match, matchPlusRemainder) {\n      let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n      if (matched) {\n        if (mode[\"on:end\"]) {\n          const resp = new Response(mode);\n          mode[\"on:end\"](match, resp);\n          if (resp.isMatchIgnored) matched = false;\n        }\n\n        if (matched) {\n          while (mode.endsParent && mode.parent) {\n            mode = mode.parent;\n          }\n          return mode;\n        }\n      }\n      // even if on:end fires an `ignore` it's still possible\n      // that we might trigger the end node because of a parent mode\n      if (mode.endsWithParent) {\n        return endOfMode(mode.parent, match, matchPlusRemainder);\n      }\n    }\n\n    /**\n     * Handle matching but then ignoring a sequence of text\n     *\n     * @param {string} lexeme - string containing full match text\n     */\n    function doIgnore(lexeme) {\n      if (top.matcher.regexIndex === 0) {\n        // no more regexes to potentially match here, so we move the cursor forward one\n        // space\n        modeBuffer += lexeme[0];\n        return 1;\n      } else {\n        // no need to move the cursor, we still have additional regexes to try and\n        // match at this very spot\n        resumeScanAtSamePosition = true;\n        return 0;\n      }\n    }\n\n    /**\n     * Handle the start of a new potential mode match\n     *\n     * @param {EnhancedMatch} match - the current match\n     * @returns {number} how far to advance the parse cursor\n     */\n    function doBeginMatch(match) {\n      const lexeme = match[0];\n      const newMode = match.rule;\n\n      const resp = new Response(newMode);\n      // first internal before callbacks, then the public ones\n      const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n      for (const cb of beforeCallbacks) {\n        if (!cb) continue;\n        cb(match, resp);\n        if (resp.isMatchIgnored) return doIgnore(lexeme);\n      }\n\n      if (newMode.skip) {\n        modeBuffer += lexeme;\n      } else {\n        if (newMode.excludeBegin) {\n          modeBuffer += lexeme;\n        }\n        processBuffer();\n        if (!newMode.returnBegin && !newMode.excludeBegin) {\n          modeBuffer = lexeme;\n        }\n      }\n      startNewMode(newMode, match);\n      return newMode.returnBegin ? 0 : lexeme.length;\n    }\n\n    /**\n     * Handle the potential end of mode\n     *\n     * @param {RegExpMatchArray} match - the current match\n     */\n    function doEndMatch(match) {\n      const lexeme = match[0];\n      const matchPlusRemainder = codeToHighlight.substring(match.index);\n\n      const endMode = endOfMode(top, match, matchPlusRemainder);\n      if (!endMode) { return NO_MATCH; }\n\n      const origin = top;\n      if (top.endScope && top.endScope._wrap) {\n        processBuffer();\n        emitKeyword(lexeme, top.endScope._wrap);\n      } else if (top.endScope && top.endScope._multi) {\n        processBuffer();\n        emitMultiClass(top.endScope, match);\n      } else if (origin.skip) {\n        modeBuffer += lexeme;\n      } else {\n        if (!(origin.returnEnd || origin.excludeEnd)) {\n          modeBuffer += lexeme;\n        }\n        processBuffer();\n        if (origin.excludeEnd) {\n          modeBuffer = lexeme;\n        }\n      }\n      do {\n        if (top.scope) {\n          emitter.closeNode();\n        }\n        if (!top.skip && !top.subLanguage) {\n          relevance += top.relevance;\n        }\n        top = top.parent;\n      } while (top !== endMode.parent);\n      if (endMode.starts) {\n        startNewMode(endMode.starts, match);\n      }\n      return origin.returnEnd ? 0 : lexeme.length;\n    }\n\n    function processContinuations() {\n      const list = [];\n      for (let current = top; current !== language; current = current.parent) {\n        if (current.scope) {\n          list.unshift(current.scope);\n        }\n      }\n      list.forEach(item => emitter.openNode(item));\n    }\n\n    /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n    let lastMatch = {};\n\n    /**\n     *  Process an individual match\n     *\n     * @param {string} textBeforeMatch - text preceding the match (since the last match)\n     * @param {EnhancedMatch} [match] - the match itself\n     */\n    function processLexeme(textBeforeMatch, match) {\n      const lexeme = match && match[0];\n\n      // add non-matched text to the current mode buffer\n      modeBuffer += textBeforeMatch;\n\n      if (lexeme == null) {\n        processBuffer();\n        return 0;\n      }\n\n      // we've found a 0 width match and we're stuck, so we need to advance\n      // this happens when we have badly behaved rules that have optional matchers to the degree that\n      // sometimes they can end up matching nothing at all\n      // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n      if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n        // spit the \"skipped\" character that our regex choked on back into the output sequence\n        modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n        if (!SAFE_MODE) {\n          /** @type {AnnotatedError} */\n          const err = new Error(`0 width match regex (${languageName})`);\n          err.languageName = languageName;\n          err.badRule = lastMatch.rule;\n          throw err;\n        }\n        return 1;\n      }\n      lastMatch = match;\n\n      if (match.type === \"begin\") {\n        return doBeginMatch(match);\n      } else if (match.type === \"illegal\" && !ignoreIllegals) {\n        // illegal match, we do not continue processing\n        /** @type {AnnotatedError} */\n        const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.scope || '<unnamed>') + '\"');\n        err.mode = top;\n        throw err;\n      } else if (match.type === \"end\") {\n        const processed = doEndMatch(match);\n        if (processed !== NO_MATCH) {\n          return processed;\n        }\n      }\n\n      // edge case for when illegal matches $ (end of line) which is technically\n      // a 0 width match but not a begin/end match so it's not caught by the\n      // first handler (when ignoreIllegals is true)\n      if (match.type === \"illegal\" && lexeme === \"\") {\n        // advance so we aren't stuck in an infinite loop\n        modeBuffer += \"\\n\";\n        return 1;\n      }\n\n      // infinite loops are BAD, this is a last ditch catch all. if we have a\n      // decent number of iterations yet our index (cursor position in our\n      // parsing) still 3x behind our index then something is very wrong\n      // so we bail\n      if (iterations > 100000 && iterations > match.index * 3) {\n        const err = new Error('potential infinite loop, way more iterations than matches');\n        throw err;\n      }\n\n      /*\n      Why might be find ourselves here?  An potential end match that was\n      triggered but could not be completed.  IE, `doEndMatch` returned NO_MATCH.\n      (this could be because a callback requests the match be ignored, etc)\n\n      This causes no real harm other than stopping a few times too many.\n      */\n\n      modeBuffer += lexeme;\n      return lexeme.length;\n    }\n\n    const language = getLanguage(languageName);\n    if (!language) {\n      error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n      throw new Error('Unknown language: \"' + languageName + '\"');\n    }\n\n    const md = compileLanguage(language);\n    let result = '';\n    /** @type {CompiledMode} */\n    let top = continuation || md;\n    /** @type Record<string,CompiledMode> */\n    const continuations = {}; // keep continuations for sub-languages\n    const emitter = new options.__emitter(options);\n    processContinuations();\n    let modeBuffer = '';\n    let relevance = 0;\n    let index = 0;\n    let iterations = 0;\n    let resumeScanAtSamePosition = false;\n\n    try {\n      if (!language.__emitTokens) {\n        top.matcher.considerAll();\n\n        for (;;) {\n          iterations++;\n          if (resumeScanAtSamePosition) {\n            // only regexes not matched previously will now be\n            // considered for a potential match\n            resumeScanAtSamePosition = false;\n          } else {\n            top.matcher.considerAll();\n          }\n          top.matcher.lastIndex = index;\n\n          const match = top.matcher.exec(codeToHighlight);\n          // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n          if (!match) break;\n\n          const beforeMatch = codeToHighlight.substring(index, match.index);\n          const processedCount = processLexeme(beforeMatch, match);\n          index = match.index + processedCount;\n        }\n        processLexeme(codeToHighlight.substring(index));\n      } else {\n        language.__emitTokens(codeToHighlight, emitter);\n      }\n\n      emitter.finalize();\n      result = emitter.toHTML();\n\n      return {\n        language: languageName,\n        value: result,\n        relevance,\n        illegal: false,\n        _emitter: emitter,\n        _top: top\n      };\n    } catch (err) {\n      if (err.message && err.message.includes('Illegal')) {\n        return {\n          language: languageName,\n          value: escape(codeToHighlight),\n          illegal: true,\n          relevance: 0,\n          _illegalBy: {\n            message: err.message,\n            index,\n            context: codeToHighlight.slice(index - 100, index + 100),\n            mode: err.mode,\n            resultSoFar: result\n          },\n          _emitter: emitter\n        };\n      } else if (SAFE_MODE) {\n        return {\n          language: languageName,\n          value: escape(codeToHighlight),\n          illegal: false,\n          relevance: 0,\n          errorRaised: err,\n          _emitter: emitter,\n          _top: top\n        };\n      } else {\n        throw err;\n      }\n    }\n  }\n\n  /**\n   * returns a valid highlight result, without actually doing any actual work,\n   * auto highlight starts with this and it's possible for small snippets that\n   * auto-detection may not find a better match\n   * @param {string} code\n   * @returns {HighlightResult}\n   */\n  function justTextHighlightResult(code) {\n    const result = {\n      value: escape(code),\n      illegal: false,\n      relevance: 0,\n      _top: PLAINTEXT_LANGUAGE,\n      _emitter: new options.__emitter(options)\n    };\n    result._emitter.addText(code);\n    return result;\n  }\n\n  /**\n  Highlighting with language detection. Accepts a string with the code to\n  highlight. Returns an object with the following properties:\n\n  - language (detected language)\n  - relevance (int)\n  - value (an HTML string with highlighting markup)\n  - secondBest (object with the same structure for second-best heuristically\n    detected language, may be absent)\n\n    @param {string} code\n    @param {Array<string>} [languageSubset]\n    @returns {AutoHighlightResult}\n  */\n  function highlightAuto(code, languageSubset) {\n    languageSubset = languageSubset || options.languages || Object.keys(languages);\n    const plaintext = justTextHighlightResult(code);\n\n    const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n      _highlight(name, code, false)\n    );\n    results.unshift(plaintext); // plaintext is always an option\n\n    const sorted = results.sort((a, b) => {\n      // sort base on relevance\n      if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n      // always award the tie to the base language\n      // ie if C++ and Arduino are tied, it's more likely to be C++\n      if (a.language && b.language) {\n        if (getLanguage(a.language).supersetOf === b.language) {\n          return 1;\n        } else if (getLanguage(b.language).supersetOf === a.language) {\n          return -1;\n        }\n      }\n\n      // otherwise say they are equal, which has the effect of sorting on\n      // relevance while preserving the original ordering - which is how ties\n      // have historically been settled, ie the language that comes first always\n      // wins in the case of a tie\n      return 0;\n    });\n\n    const [best, secondBest] = sorted;\n\n    /** @type {AutoHighlightResult} */\n    const result = best;\n    result.secondBest = secondBest;\n\n    return result;\n  }\n\n  /**\n   * Builds new class name for block given the language name\n   *\n   * @param {HTMLElement} element\n   * @param {string} [currentLang]\n   * @param {string} [resultLang]\n   */\n  function updateClassName(element, currentLang, resultLang) {\n    const language = (currentLang && aliases[currentLang]) || resultLang;\n\n    element.classList.add(\"hljs\");\n    element.classList.add(`language-${language}`);\n  }\n\n  /**\n   * Applies highlighting to a DOM node containing code.\n   *\n   * @param {HighlightedHTMLElement} element - the HTML element to highlight\n  */\n  function highlightElement(element) {\n    /** @type HTMLElement */\n    let node = null;\n    const language = blockLanguage(element);\n\n    if (shouldNotHighlight(language)) return;\n\n    fire(\"before:highlightElement\",\n      { el: element, language });\n\n    if (element.dataset.highlighted) {\n      console.log(\"Element previously highlighted. To highlight again, first unset `dataset.highlighted`.\", element);\n      return;\n    }\n\n    // we should be all text, no child nodes (unescaped HTML) - this is possibly\n    // an HTML injection attack - it's likely too late if this is already in\n    // production (the code has likely already done its damage by the time\n    // we're seeing it)... but we yell loudly about this so that hopefully it's\n    // more likely to be caught in development before making it to production\n    if (element.children.length > 0) {\n      if (!options.ignoreUnescapedHTML) {\n        console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\");\n        console.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\");\n        console.warn(\"The element with unescaped HTML:\");\n        console.warn(element);\n      }\n      if (options.throwUnescapedHTML) {\n        const err = new HTMLInjectionError(\n          \"One of your code blocks includes unescaped HTML.\",\n          element.innerHTML\n        );\n        throw err;\n      }\n    }\n\n    node = element;\n    const text = node.textContent;\n    const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n    element.innerHTML = result.value;\n    element.dataset.highlighted = \"yes\";\n    updateClassName(element, language, result.language);\n    element.result = {\n      language: result.language,\n      // TODO: remove with version 11.0\n      re: result.relevance,\n      relevance: result.relevance\n    };\n    if (result.secondBest) {\n      element.secondBest = {\n        language: result.secondBest.language,\n        relevance: result.secondBest.relevance\n      };\n    }\n\n    fire(\"after:highlightElement\", { el: element, result, text });\n  }\n\n  /**\n   * Updates highlight.js global options with the passed options\n   *\n   * @param {Partial<HLJSOptions>} userOptions\n   */\n  function configure(userOptions) {\n    options = inherit(options, userOptions);\n  }\n\n  // TODO: remove v12, deprecated\n  const initHighlighting = () => {\n    highlightAll();\n    deprecated(\"10.6.0\", \"initHighlighting() deprecated.  Use highlightAll() now.\");\n  };\n\n  // TODO: remove v12, deprecated\n  function initHighlightingOnLoad() {\n    highlightAll();\n    deprecated(\"10.6.0\", \"initHighlightingOnLoad() deprecated.  Use highlightAll() now.\");\n  }\n\n  let wantsHighlight = false;\n\n  /**\n   * auto-highlights all pre>code elements on the page\n   */\n  function highlightAll() {\n    function boot() {\n      // if a highlight was requested before DOM was loaded, do now\n      highlightAll();\n    }\n\n    // if we are called too early in the loading process\n    if (document.readyState === \"loading\") {\n      // make sure the event listener is only added once\n      if (!wantsHighlight) {\n        window.addEventListener('DOMContentLoaded', boot, false);\n      }\n      wantsHighlight = true;\n      return;\n    }\n\n    const blocks = document.querySelectorAll(options.cssSelector);\n    blocks.forEach(highlightElement);\n  }\n\n  /**\n   * Register a language grammar module\n   *\n   * @param {string} languageName\n   * @param {LanguageFn} languageDefinition\n   */\n  function registerLanguage(languageName, languageDefinition) {\n    let lang = null;\n    try {\n      lang = languageDefinition(hljs);\n    } catch (error$1) {\n      error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n      // hard or soft error\n      if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n      // languages that have serious errors are replaced with essentially a\n      // \"plaintext\" stand-in so that the code blocks will still get normal\n      // css classes applied to them - and one bad language won't break the\n      // entire highlighter\n      lang = PLAINTEXT_LANGUAGE;\n    }\n    // give it a temporary name if it doesn't have one in the meta-data\n    if (!lang.name) lang.name = languageName;\n    languages[languageName] = lang;\n    lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n    if (lang.aliases) {\n      registerAliases(lang.aliases, { languageName });\n    }\n  }\n\n  /**\n   * Remove a language grammar module\n   *\n   * @param {string} languageName\n   */\n  function unregisterLanguage(languageName) {\n    delete languages[languageName];\n    for (const alias of Object.keys(aliases)) {\n      if (aliases[alias] === languageName) {\n        delete aliases[alias];\n      }\n    }\n  }\n\n  /**\n   * @returns {string[]} List of language internal names\n   */\n  function listLanguages() {\n    return Object.keys(languages);\n  }\n\n  /**\n   * @param {string} name - name of the language to retrieve\n   * @returns {Language | undefined}\n   */\n  function getLanguage(name) {\n    name = (name || '').toLowerCase();\n    return languages[name] || languages[aliases[name]];\n  }\n\n  /**\n   *\n   * @param {string|string[]} aliasList - single alias or list of aliases\n   * @param {{languageName: string}} opts\n   */\n  function registerAliases(aliasList, { languageName }) {\n    if (typeof aliasList === 'string') {\n      aliasList = [aliasList];\n    }\n    aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n  }\n\n  /**\n   * Determines if a given language has auto-detection enabled\n   * @param {string} name - name of the language\n   */\n  function autoDetection(name) {\n    const lang = getLanguage(name);\n    return lang && !lang.disableAutodetect;\n  }\n\n  /**\n   * Upgrades the old highlightBlock plugins to the new\n   * highlightElement API\n   * @param {HLJSPlugin} plugin\n   */\n  function upgradePluginAPI(plugin) {\n    // TODO: remove with v12\n    if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n      plugin[\"before:highlightElement\"] = (data) => {\n        plugin[\"before:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n    if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n      plugin[\"after:highlightElement\"] = (data) => {\n        plugin[\"after:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n  }\n\n  /**\n   * @param {HLJSPlugin} plugin\n   */\n  function addPlugin(plugin) {\n    upgradePluginAPI(plugin);\n    plugins.push(plugin);\n  }\n\n  /**\n   * @param {HLJSPlugin} plugin\n   */\n  function removePlugin(plugin) {\n    const index = plugins.indexOf(plugin);\n    if (index !== -1) {\n      plugins.splice(index, 1);\n    }\n  }\n\n  /**\n   *\n   * @param {PluginEvent} event\n   * @param {any} args\n   */\n  function fire(event, args) {\n    const cb = event;\n    plugins.forEach(function(plugin) {\n      if (plugin[cb]) {\n        plugin[cb](args);\n      }\n    });\n  }\n\n  /**\n   * DEPRECATED\n   * @param {HighlightedHTMLElement} el\n   */\n  function deprecateHighlightBlock(el) {\n    deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n    deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n    return highlightElement(el);\n  }\n\n  /* Interface definition */\n  Object.assign(hljs, {\n    highlight,\n    highlightAuto,\n    highlightAll,\n    highlightElement,\n    // TODO: Remove with v12 API\n    highlightBlock: deprecateHighlightBlock,\n    configure,\n    initHighlighting,\n    initHighlightingOnLoad,\n    registerLanguage,\n    unregisterLanguage,\n    listLanguages,\n    getLanguage,\n    registerAliases,\n    autoDetection,\n    inherit,\n    addPlugin,\n    removePlugin\n  });\n\n  hljs.debugMode = function() { SAFE_MODE = false; };\n  hljs.safeMode = function() { SAFE_MODE = true; };\n  hljs.versionString = version;\n\n  hljs.regex = {\n    concat: concat,\n    lookahead: lookahead,\n    either: either,\n    optional: optional,\n    anyNumberOfTimes: anyNumberOfTimes\n  };\n\n  for (const key in MODES) {\n    // @ts-ignore\n    if (typeof MODES[key] === \"object\") {\n      // @ts-ignore\n      deepFreeze(MODES[key]);\n    }\n  }\n\n  // merge all the modes/regexes into our main object\n  Object.assign(hljs, MODES);\n\n  return hljs;\n};\n\n// Other names for the variable may break build script\nconst highlight = HLJS({});\n\n// returns a new instance of the highlighter to be used for extensions\n// check https://github.com/wooorm/lowlight/issues/47\nhighlight.newInstance = () => HLJS({});\n\nmodule.exports = highlight;\nhighlight.HighlightJS = highlight;\nhighlight.default = highlight;\n","// https://nodejs.org/api/packages.html#packages_writing_dual_packages_while_avoiding_or_minimizing_hazards\nimport HighlightJS from '../lib/core.js';\nexport { HighlightJS };\nexport default HighlightJS;\n","// src/code-block-lowlight.ts\nimport CodeBlock from \"@tiptap/extension-code-block\";\n\n// src/lowlight-plugin.ts\nimport { findChildren } from \"@tiptap/core\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { Decoration, DecorationSet } from \"@tiptap/pm/view\";\nimport highlight from \"highlight.js/lib/core\";\nfunction parseNodes(nodes, className = []) {\n  return nodes.map((node) => {\n    const classes = [...className, ...node.properties ? node.properties.className : []];\n    if (node.children) {\n      return parseNodes(node.children, classes);\n    }\n    return {\n      text: node.value,\n      classes\n    };\n  }).flat();\n}\nfunction getHighlightNodes(result) {\n  return result.value || result.children || [];\n}\nfunction registered(aliasOrLanguage) {\n  return Boolean(highlight.getLanguage(aliasOrLanguage));\n}\nfunction getDecorations({\n  doc,\n  name,\n  lowlight,\n  defaultLanguage\n}) {\n  const decorations = [];\n  findChildren(doc, (node) => node.type.name === name).forEach((block) => {\n    var _a;\n    let from = block.pos + 1;\n    const language = block.node.attrs.language || defaultLanguage;\n    const languages = lowlight.listLanguages();\n    const nodes = language && (languages.includes(language) || registered(language) || ((_a = lowlight.registered) == null ? void 0 : _a.call(lowlight, language))) ? getHighlightNodes(lowlight.highlight(language, block.node.textContent)) : getHighlightNodes(lowlight.highlightAuto(block.node.textContent));\n    parseNodes(nodes).forEach((node) => {\n      const to = from + node.text.length;\n      if (node.classes.length) {\n        const decoration = Decoration.inline(from, to, {\n          class: node.classes.join(\" \")\n        });\n        decorations.push(decoration);\n      }\n      from = to;\n    });\n  });\n  return DecorationSet.create(doc, decorations);\n}\nfunction isFunction(param) {\n  return typeof param === \"function\";\n}\nfunction LowlightPlugin({\n  name,\n  lowlight,\n  defaultLanguage\n}) {\n  if (![\"highlight\", \"highlightAuto\", \"listLanguages\"].every((api) => isFunction(lowlight[api]))) {\n    throw Error(\"You should provide an instance of lowlight to use the code-block-lowlight extension\");\n  }\n  const lowlightPlugin = new Plugin({\n    key: new PluginKey(\"lowlight\"),\n    state: {\n      init: (_, { doc }) => getDecorations({\n        doc,\n        name,\n        lowlight,\n        defaultLanguage\n      }),\n      apply: (transaction, decorationSet, oldState, newState) => {\n        const oldNodeName = oldState.selection.$head.parent.type.name;\n        const newNodeName = newState.selection.$head.parent.type.name;\n        const oldNodes = findChildren(oldState.doc, (node) => node.type.name === name);\n        const newNodes = findChildren(newState.doc, (node) => node.type.name === name);\n        if (transaction.docChanged && // Apply decorations if:\n        // selection includes named node,\n        ([oldNodeName, newNodeName].includes(name) || // OR transaction adds/removes named node,\n        newNodes.length !== oldNodes.length || // OR transaction has changes that completely encapsulte a node\n        // (for example, a transaction that affects the entire document).\n        // Such transactions can happen during collab syncing via y-prosemirror, for example.\n        transaction.steps.some((step) => {\n          return (\n            // @ts-ignore\n            step.from !== void 0 && // @ts-ignore\n            step.to !== void 0 && oldNodes.some((node) => {\n              return (\n                // @ts-ignore\n                node.pos >= step.from && // @ts-ignore\n                node.pos + node.node.nodeSize <= step.to\n              );\n            })\n          );\n        }))) {\n          return getDecorations({\n            doc: transaction.doc,\n            name,\n            lowlight,\n            defaultLanguage\n          });\n        }\n        return decorationSet.map(transaction.mapping, transaction.doc);\n      }\n    },\n    props: {\n      decorations(state) {\n        return lowlightPlugin.getState(state);\n      }\n    }\n  });\n  return lowlightPlugin;\n}\n\n// src/code-block-lowlight.ts\nvar CodeBlockLowlight = CodeBlock.extend({\n  addOptions() {\n    var _a;\n    return {\n      ...(_a = this.parent) == null ? void 0 : _a.call(this),\n      lowlight: {},\n      languageClassPrefix: \"language-\",\n      exitOnTripleEnter: true,\n      exitOnArrowDown: true,\n      defaultLanguage: null,\n      enableTabIndentation: false,\n      tabSize: 4,\n      HTMLAttributes: {}\n    };\n  },\n  addProseMirrorPlugins() {\n    var _a;\n    return [\n      ...((_a = this.parent) == null ? void 0 : _a.call(this)) || [],\n      LowlightPlugin({\n        name: this.name,\n        lowlight: this.options.lowlight,\n        defaultLanguage: this.options.defaultLanguage\n      })\n    ];\n  }\n});\n\n// src/index.ts\nvar index_default = CodeBlockLowlight;\nexport {\n  CodeBlockLowlight,\n  index_default as default\n};\n//# sourceMappingURL=index.js.map","\"use client\"\n\nimport type { NodeViewProps } from \"@tiptap/react\"\nimport { NodeViewContent, NodeViewWrapper } from \"@tiptap/react\"\nimport * as React from \"react\"\nimport { Check, ChevronDown, ChevronUp, Copy } from \"lucide-react\"\nimport { cn } from \"@/lib/tiptap-utils\"\nimport { SUPPORTED_LANGUAGES } from \"./code-block-extension\"\n\nexport function CodeBlockNodeView(props: NodeViewProps) {\n  const { node, updateAttributes, extension, editor } = props\n  const [copied, setCopied] = React.useState(false)\n  const [isCollapsed, setIsCollapsed] = React.useState(false)\n  const [isDropdownOpen, setIsDropdownOpen] = React.useState(false)\n  const dropdownRef = React.useRef<HTMLDivElement>(null)\n\n  const language = (node.attrs.language as string) || \"JavaScript\"\n  const isEditable = editor.isEditable\n\n  const handleCopy = React.useCallback(async () => {\n    const code = node.textContent\n    await navigator.clipboard.writeText(code)\n    setCopied(true)\n    setTimeout(() => setCopied(false), 2000)\n  }, [node.textContent])\n\n  const handleLanguageChange = React.useCallback(\n    (newLanguage: string) => {\n      updateAttributes({ language: newLanguage })\n      setIsDropdownOpen(false)\n    },\n    [updateAttributes]\n  )\n\n  // Close dropdown when clicking outside\n  React.useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        dropdownRef.current &&\n        !dropdownRef.current.contains(event.target as Node)\n      ) {\n        setIsDropdownOpen(false)\n      }\n    }\n\n    if (isDropdownOpen) {\n      document.addEventListener(\"mousedown\", handleClickOutside)\n      return () => {\n        document.removeEventListener(\"mousedown\", handleClickOutside)\n      }\n    }\n  }, [isDropdownOpen])\n\n  return (\n    <NodeViewWrapper className=\"code-block-node-wrapper\">\n      <div\n        className={cn(\n          \"relative my-4\"\n        )}\n        style={{\n          backgroundColor: \"transparent\",\n          border: \"1px solid #313133\",\n          borderRadius: \"16px\",\n          overflow: \"visible\"\n        }}\n      >\n        {/* Language Dropdown */}\n        <div className={cn(\"px-4 pt-3\", isCollapsed ? \"pb-8\" : \"pb-2\")} style={{ position: \"relative\", zIndex: 1 }}>\n          <div className=\"relative\" ref={dropdownRef}>\n            <button\n              onClick={() => isEditable && setIsDropdownOpen(!isDropdownOpen)}\n              contentEditable={false}\n              className=\"h-auto px-2 py-1 text-xs text-foreground flex items-center gap-1.5 border-none rounded-lg\"\n              type=\"button\"\n              style={{\n                backgroundColor: \"rgba(36, 36, 37, 0.5)\",\n                borderRadius: \"8px\",\n                cursor: isEditable ? \"pointer\" : \"default\",\n                opacity: isEditable ? 1 : 0.7\n              }}\n              disabled={!isEditable}\n            >\n              {language}\n              {isEditable && <ChevronDown className=\"h-3 w-3\" />}\n            </button>\n\n            {isEditable && isDropdownOpen && (\n              <div\n                contentEditable={false}\n                className=\"absolute top-full left-0 mt-2 bg-black border border-border rounded-md shadow-lg max-h-60 overflow-y-auto\"\n                style={{ zIndex: 9999, maxWidth: \"120px\" }}\n              >\n                {SUPPORTED_LANGUAGES.map((lang) => (\n                  <button\n                    key={lang}\n                    onClick={() => handleLanguageChange(lang)}\n                    className={cn(\n                      \"w-full text-left px-3 py-2 text-sm hover:bg-white/10 cursor-pointer bg-transparent border-none\",\n                      lang === language\n                        ? \"text-foreground bg-white/5\"\n                        : \"text-muted-foreground hover:text-foreground\"\n                    )}\n                    type=\"button\"\n                  >\n                    {lang}\n                  </button>\n                ))}\n              </div>\n            )}\n          </div>\n        </div>\n\n        {/* Action Buttons - Grouped */}\n        <div\n          className=\"absolute right-2 top-2 flex items-center gap-0 rounded-lg overflow-hidden\"\n          contentEditable={false}\n          style={{\n            backgroundColor: \"rgba(36, 36, 37, 0.5)\",\n            backdropFilter: \"blur(4px)\",\n            pointerEvents: \"auto\",\n            zIndex: 10\n          }}\n        >\n          <button\n            onClick={() => setIsCollapsed(!isCollapsed)}\n            className=\"h-10 w-10 cursor-pointer text-white/70 hover:text-white flex items-center justify-center transition-colors\"\n            type=\"button\"\n            contentEditable={false}\n            style={{\n              backgroundColor: \"transparent\",\n              pointerEvents: \"auto\"\n            }}\n            onMouseEnter={(e) => e.currentTarget.style.backgroundColor = \"#313133\"}\n            onMouseLeave={(e) => e.currentTarget.style.backgroundColor = \"transparent\"}\n          >\n            {isCollapsed ? (\n              <ChevronDown className=\"h-4 w-4\" />\n            ) : (\n              <ChevronUp className=\"h-4 w-4\" />\n            )}\n            <span className=\"sr-only\">\n              {isCollapsed ? \"Expand\" : \"Collapse\"}\n            </span>\n          </button>\n          <div className=\"h-6 w-px\" style={{ backgroundColor: \"#414143\" }} />\n          <button\n            onClick={handleCopy}\n            className=\"h-10 w-10 cursor-pointer text-white/70 hover:text-white flex items-center justify-center transition-colors\"\n            type=\"button\"\n            contentEditable={false}\n            style={{\n              backgroundColor: \"transparent\",\n              pointerEvents: \"auto\"\n            }}\n            onMouseEnter={(e) => e.currentTarget.style.backgroundColor = \"#313133\"}\n            onMouseLeave={(e) => e.currentTarget.style.backgroundColor = \"transparent\"}\n          >\n            {copied ? (\n              <Check className=\"h-4 w-4\" />\n            ) : (\n              <Copy className=\"h-4 w-4\" />\n            )}\n            <span className=\"sr-only\">\n              {copied ? \"Copied\" : \"Copy code\"}\n            </span>\n          </button>\n        </div>\n\n        {/* Inner wrapper for rounded corners on content */}\n        <div style={{ borderRadius: \"0 0 16px 16px\", overflow: \"hidden\" }}>\n          {/* Code Content */}\n          {!isCollapsed && (\n            <div\n              className=\"px-4 pb-3 overflow-x-auto\"\n              style={{ backgroundColor: \"transparent\" }}\n            >\n              <pre\n                className=\"font-mono text-sm text-foreground m-0\"\n                style={{ backgroundColor: \"transparent\" }}\n              >\n                <code\n                  className={cn(\n                    \"block outline-none\",\n                    extension.options.languageClassPrefix + language\n                  )}\n                  style={{ backgroundColor: \"transparent\" }}\n                >\n                  <NodeViewContent />\n                </code>\n              </pre>\n            </div>\n          )}\n        </div>\n      </div>\n    </NodeViewWrapper>\n  )\n}\n","import { mergeAttributes, textblockTypeInputRule } from \"@tiptap/core\"\nimport { ReactNodeViewRenderer } from \"@tiptap/react\"\nimport CodeBlockLowlight from \"@tiptap/extension-code-block-lowlight\"\nimport { CodeBlockNodeView } from \"./code-block-view\"\nimport { common, createLowlight } from \"lowlight\"\n\nexport const SUPPORTED_LANGUAGES = [\n  \"JavaScript\",\n  \"TypeScript\",\n  \"Python\",\n  \"Java\",\n  \"C++\",\n  \"Go\",\n  \"Rust\",\n  \"Ruby\",\n  \"PHP\",\n  \"Swift\",\n  \"Bash\",\n  \"SQL\",\n  \"HTML\",\n  \"CSS\",\n  \"JSON\",\n  \"YAML\",\n  \"Markdown\",\n] as const\n\nexport type CodeBlockLanguage = typeof SUPPORTED_LANGUAGES[number]\n\n// Create lowlight instance\nconst lowlight = createLowlight(common)\n\nexport const CodeBlock = CodeBlockLowlight.extend({\n  addNodeView() {\n    return ReactNodeViewRenderer(CodeBlockNodeView)\n  },\n}).configure({\n  lowlight,\n  defaultLanguage: \"javascript\",\n})\n\nexport default CodeBlock\n","\"use client\"\n\nimport type { NodeViewProps } from \"@tiptap/react\"\nimport { NodeViewContent, NodeViewWrapper } from \"@tiptap/react\"\nimport * as React from \"react\"\nimport { useState, useEffect, useRef } from \"react\"\nimport { ChevronRight } from \"lucide-react\"\nimport { cn } from \"@/lib/tiptap-utils\"\nimport { TextSelection } from \"@tiptap/pm/state\"\n\nexport function ToggleListNodeView(props: NodeViewProps) {\n  const { node, updateAttributes, editor, getPos } = props\n  const isEditable = editor?.isEditable ?? true\n\n  const [isOpen, setIsOpen] = useState(node.attrs.isOpen || false)\n  const [summary, setSummary] = useState(node.attrs.summary || \"\")\n  const summaryInputRef = useRef<HTMLInputElement>(null)\n\n  // Sync with node attributes\n  useEffect(() => {\n    setIsOpen(node.attrs.isOpen)\n  }, [node.attrs.isOpen])\n\n  useEffect(() => {\n    setSummary(node.attrs.summary)\n  }, [node.attrs.summary])\n\n  // Auto-focus summary input when toggle is created (empty summary)\n  // This needs to run when the summary becomes empty (new toggle created)\n  useEffect(() => {\n    if (isEditable && summary === \"\" && summaryInputRef.current) {\n      // Small delay to ensure the node is fully mounted\n      const timer = setTimeout(() => {\n        summaryInputRef.current?.focus()\n      }, 50)\n\n      return () => clearTimeout(timer)\n    }\n  }, [summary, isEditable])\n\n  const handleToggle = (e: React.MouseEvent) => {\n    e.preventDefault()\n    e.stopPropagation()\n\n    const newIsOpen = !isOpen\n    setIsOpen(newIsOpen)\n\n    // Only update attributes in edit mode (to persist the change)\n    // In view mode, just toggle the local state\n    if (isEditable) {\n      updateAttributes({ isOpen: newIsOpen })\n    }\n  }\n\n  const handleSummaryChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    if (!isEditable) return\n\n    const newSummary = e.target.value\n    setSummary(newSummary)\n    updateAttributes({ summary: newSummary })\n  }\n\n  const handleSummaryKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === \"Enter\") {\n      e.preventDefault()\n\n      if (!isEditable || typeof getPos !== 'function') return\n\n      // Get the actual position of this toggle list node\n      const currentPos = getPos()\n      if (currentPos === undefined) return\n\n      // Calculate position after this node (currentPos + node.nodeSize)\n      const posAfterToggle = currentPos + node.nodeSize\n\n      editor\n        .chain()\n        .command(({ tr, state, dispatch }) => {\n          if (dispatch) {\n            const newToggle = state.schema.nodes.toggleList.create(\n              { summary: \"\", isOpen: false },\n              state.schema.nodes.paragraph.create()\n            )\n            tr.insert(posAfterToggle, newToggle)\n\n            // Set selection inside the new toggle's paragraph\n            // posAfterToggle + 1 (into toggleList) + 1 (into paragraph)\n            const newPos = posAfterToggle + 2\n            tr.setSelection(TextSelection.near(tr.doc.resolve(newPos)))\n          }\n          return true\n        })\n        .run()\n    }\n  }\n\n  return (\n    <NodeViewWrapper className=\"toggle-list-node my-2\">\n      <div>\n        {/* Toggle Header */}\n        <div\n          className={cn(\n            \"flex items-center gap-2 py-1 transition-colors cursor-pointer\"\n          )}\n          onClick={(e) => handleToggle(e)}\n          style={{\n            cursor: \"pointer\",\n          }}\n        >\n          {/* Chevron Icon */}\n          <ChevronRight\n            className={cn(\n              \"flex-shrink-0 w-4 h-4 transition-transform duration-200\",\n              isOpen && \"rotate-90\"\n            )}\n            style={{ color: \"rgba(255, 255, 255, 0.6)\" }}\n          />\n\n          {/* Summary Text */}\n          <input\n            ref={summaryInputRef}\n            type=\"text\"\n            value={summary}\n            onChange={handleSummaryChange}\n            onKeyDown={handleSummaryKeyDown}\n            onClick={(e) => {\n              // Prevent toggle when clicking on input\n              e.stopPropagation()\n            }}\n            disabled={!isEditable}\n            placeholder=\"Toggle\"\n            className=\"flex-1 bg-transparent border-0 outline-none text-sm font-medium placeholder:opacity-50\"\n            style={{\n              color: \"rgba(255, 255, 255, 0.9)\",\n              cursor: isEditable ? \"text\" : \"default\",\n            }}\n          />\n        </div>\n\n        {/* Collapsible Content */}\n        {isOpen && (\n          <div className=\"pl-6 pt-1\">\n            <NodeViewContent\n              className=\"toggle-list-content text-sm\"\n              style={{\n                color: \"rgba(255, 255, 255, 0.9)\",\n              }}\n            />\n          </div>\n        )}\n      </div>\n    </NodeViewWrapper>\n  )\n}\n","import { Node, mergeAttributes } from \"@tiptap/core\"\nimport { ReactNodeViewRenderer } from \"@tiptap/react\"\nimport { ToggleListNodeView } from \"./toggle-list-node-view\"\nimport { TextSelection } from \"@tiptap/pm/state\"\n\nexport interface ToggleListOptions {\n  HTMLAttributes: Record<string, any>\n}\n\ndeclare module \"@tiptap/core\" {\n  interface Commands<ReturnType> {\n    toggleListNode: {\n      /**\n       * Set a toggle list node\n       */\n      setToggleListNode: (options?: { summary?: string; isOpen?: boolean }) => ReturnType\n      /**\n       * Toggle a toggle list node\n       */\n      toggleToggleListNode: () => ReturnType\n    }\n  }\n}\n\nexport const ToggleList = Node.create<ToggleListOptions>({\n  name: \"toggleList\",\n\n  group: \"block\",\n\n  content: \"block+\",\n\n  defining: true,\n\n  addOptions() {\n    return {\n      HTMLAttributes: {},\n    }\n  },\n\n  addAttributes() {\n    return {\n      summary: {\n        default: \"\",\n        parseHTML: (element) => element.getAttribute(\"data-summary\") || \"\",\n        renderHTML: (attributes) => {\n          return {\n            \"data-summary\": attributes.summary,\n          }\n        },\n      },\n      isOpen: {\n        default: false,\n        parseHTML: (element) => element.getAttribute(\"data-is-open\") === \"true\",\n        renderHTML: (attributes) => {\n          return {\n            \"data-is-open\": attributes.isOpen ? \"true\" : \"false\",\n          }\n        },\n      },\n    }\n  },\n\n  parseHTML() {\n    return [\n      {\n        tag: 'div[data-type=\"toggle-list\"]',\n      },\n    ]\n  },\n\n  renderHTML({ HTMLAttributes }) {\n    return [\n      \"div\",\n      mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n        \"data-type\": \"toggle-list\",\n      }),\n      0,\n    ]\n  },\n\n  addNodeView() {\n    return ReactNodeViewRenderer(ToggleListNodeView)\n  },\n\n  addCommands() {\n    return {\n      setToggleListNode:\n        (options?: { summary?: string; isOpen?: boolean }) =>\n        ({ commands }) => {\n          return commands.insertContent({\n            type: this.name,\n            attrs: {\n              summary: options?.summary || \"\",\n              isOpen: options?.isOpen !== undefined ? options.isOpen : false,\n            },\n            content: [\n              {\n                type: \"paragraph\",\n              },\n            ],\n          })\n        },\n      toggleToggleListNode:\n        () =>\n        ({ commands }) => {\n          return commands.toggleWrap(this.name)\n        },\n    }\n  },\n\n  addKeyboardShortcuts() {\n    return {\n      Enter: ({ editor }) => {\n        const { state } = editor\n        const { selection } = state\n        const { $from, empty } = selection\n\n        if (!empty) {\n          return false\n        }\n\n        // Check if we're in a toggle list\n        const toggleList = $from.node($from.depth - 1)\n        if (toggleList?.type.name !== this.name) {\n          return false\n        }\n\n        // Check if cursor is at the end of an empty paragraph\n        const paragraph = $from.node($from.depth)\n        if (paragraph?.type.name === \"paragraph\" && paragraph.content.size === 0) {\n          // Exit toggle list if we're in an empty paragraph\n          return editor.commands.lift(paragraph.type.name)\n        }\n\n        // Check if we're at the end of the last child\n        const parentPos = $from.before($from.depth)\n        const parent = state.doc.nodeAt(parentPos)\n\n        if (parent) {\n          const isAtEnd = $from.parentOffset === $from.parent.content.size\n\n          if (isAtEnd) {\n            // Create a new toggle list after this one\n            const pos = $from.after($from.depth - 1)\n\n            return editor.commands.command(({ tr, dispatch }) => {\n              if (dispatch) {\n                const newToggle = this.type.create(\n                  { summary: \"\", isOpen: false },\n                  state.schema.nodes.paragraph.create()\n                )\n                tr.insert(pos, newToggle)\n                // Move cursor to the new toggle list\n                tr.setSelection(TextSelection.near(tr.doc.resolve(pos + 2)))\n              }\n              return true\n            })\n          }\n        }\n\n        return false\n      },\n      \"Mod-Enter\": ({ editor }) => {\n        // Shift focus to summary input on Mod-Enter\n        return false\n      },\n    }\n  },\n})\n\nexport default ToggleList\n","import type { Editor } from \"@tiptap/react\"\nimport { useEditorState } from \"@tiptap/react\"\nimport {\n  defaultUiState,\n  type UiState,\n} from \"@/components/tiptap-extension/ui-state-extension\"\n\nexport function useUiEditorState(editor: Editor | null): UiState {\n  return (\n    useEditorState({\n      editor,\n      selector: ({ editor }) => {\n        if (!editor) return defaultUiState\n\n        const state = editor.storage.uiState\n        if (!state) {\n          console.warn(\n            \"Editor storage uiState is not initialized. Ensure you have the uiState extension added to your editor.\"\n          )\n          return defaultUiState\n        }\n\n        return { ...defaultUiState, ...state }\n      },\n    }) ?? defaultUiState\n  )\n}\n\nexport default useUiEditorState\n","'use client';\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { NodeViewWrapper, NodeViewContent, NodeViewProps } from '@tiptap/react';\nimport { NodeSelection } from '@tiptap/pm/state';\nimport { Icon } from '@iconify/react';\nimport { cn } from '../../../lib/utils';\nimport { useUiEditorState } from '@/hooks/use-ui-editor-state';\nimport type { CardData } from './card-node-extension';\n\nexport const CardNodeView: React.FC<NodeViewProps> = ({\n  node,\n  updateAttributes,\n  editor,\n  getPos,\n}) => {\n  const {\n    cards = [\n      {\n        icon: 'mdi:cube-outline',\n        title: 'Card Title',\n        description: 'Add a description for your card',\n        linkUrl: null,\n        ctaText: null,\n      },\n    ],\n    gridColumns = 1,\n    selectedCardIndex = 0,\n  } = node.attrs;\n\n  const [editingCardIndex, setEditingCardIndex] = useState<number | null>(null);\n  const [editingField, setEditingField] = useState<\n    'title' | 'description' | null\n  >(null);\n  const [hoveredCardIndex, setHoveredCardIndex] = useState<number | null>(null);\n  const [localTitles, setLocalTitles] = useState<{ [key: number]: string }>({});\n  const [localDescriptions, setLocalDescriptions] = useState<{\n    [key: number]: string;\n  }>({});\n\n  const cardRefs = useRef<{\n    [key: number]: {\n      title: HTMLDivElement | null;\n      description: HTMLDivElement | null;\n    };\n  }>({});\n\n  const isEditable = editor?.isEditable ?? true;\n\n  // Get drag state to prevent event interference during drag operations\n  const { isDragging } = useUiEditorState(editor);\n\n  // Get onNavigateToPage callback from editor (same approach as drag-context-menu)\n  const onNavigateToPage = (editor as any)?.tnkrOnNavigateToPage;\n\n  // Sync local state with node attributes when not editing\n  useEffect(() => {\n    if (editingCardIndex === null) {\n      const newTitles: { [key: number]: string } = {};\n      const newDescriptions: { [key: number]: string } = {};\n      cards.forEach((card: CardData, index: number) => {\n        newTitles[index] = card.title;\n        newDescriptions[index] = card.description;\n      });\n      setLocalTitles(newTitles);\n      setLocalDescriptions(newDescriptions);\n    }\n  }, [cards, editingCardIndex]);\n\n  // Reset editing state when editor editability changes\n  useEffect(() => {\n    setEditingCardIndex(null);\n    setEditingField(null);\n  }, [isEditable]);\n\n  const handleTitleBlur = (cardIndex: number) => {\n    if (editingCardIndex === cardIndex && editingField === 'title') {\n      setEditingCardIndex(null);\n      setEditingField(null);\n      const newTitle = cardRefs.current[cardIndex]?.title?.textContent || '';\n      if (newTitle !== cards[cardIndex].title) {\n        const updatedCards = [...cards];\n        updatedCards[cardIndex] = {\n          ...updatedCards[cardIndex],\n          title: newTitle,\n        };\n        updateAttributes({ cards: updatedCards });\n      }\n    }\n  };\n\n  const handleDescriptionBlur = (cardIndex: number) => {\n    if (editingCardIndex === cardIndex && editingField === 'description') {\n      setEditingCardIndex(null);\n      setEditingField(null);\n      const newDescription =\n        cardRefs.current[cardIndex]?.description?.textContent || '';\n      if (newDescription !== cards[cardIndex].description) {\n        const updatedCards = [...cards];\n        updatedCards[cardIndex] = {\n          ...updatedCards[cardIndex],\n          description: newDescription,\n        };\n        updateAttributes({ cards: updatedCards });\n      }\n    }\n  };\n\n  const handleCardClick = (e: React.MouseEvent, card: CardData) => {\n    // e.preventDefault()\n    // e.stopPropagation()\n    // Only handle link if not actively editing text and no CTA\n    // Allow navigation in both edit and view modes when not editing fields\n    if (!isEditable && editingCardIndex === null) {\n      // Priority: Internal page link first, then external URL\n      if (card.linkPage) {\n        if (onNavigateToPage) {\n          onNavigateToPage(card.linkPage.id);\n        }\n      } else if (card.linkUrl) {\n        window.open(card.linkUrl, '_blank', 'noopener,noreferrer');\n      }\n    }\n  };\n\n  const handleCtaClick = (e: React.MouseEvent, card: CardData) => {\n    // e.stopPropagation()\n    // Allow CTA clicks in both edit and view modes\n    // Priority: Internal page link first, then external URL\n    if (card.linkPage) {\n      if (onNavigateToPage) {\n        onNavigateToPage(card.linkPage.id);\n      }\n    } else if (card.linkUrl) {\n      window.open(card.linkUrl, '_blank', 'noopener,noreferrer');\n    }\n  };\n\n  const handleCardHover = (cardIndex: number) => {\n    setHoveredCardIndex(cardIndex);\n  };\n\n  const handleCardLeave = () => {\n    setHoveredCardIndex(null);\n  };\n\n  const handleCardSelect = (cardIndex: number, e: React.MouseEvent) => {\n    // Don't interfere with drag operations\n    if (isDragging) return;\n\n    // e.stopPropagation()\n    // e.preventDefault()\n    if (isEditable && editingCardIndex === null) {\n      // Only prevent text selection if not clicking on contentEditable elements\n      const target = e.target as HTMLElement;\n      if (!target.getAttribute('contenteditable')) {\n        e.preventDefault();\n      }\n\n      // // Add haptic feedback for card selection\n      // if ('vibrate' in navigator) {\n      //   navigator.vibrate(10) // Short 10ms vibration\n      // }\n\n      updateAttributes({ selectedCardIndex: cardIndex });\n    }\n  };\n\n  // Use CSS variable for dynamic theming\n  const primaryColor = 'var(--tnkr-primary)';\n\n  // Handler to select the entire node when clicked\n  const handleNodeClick = (e: React.MouseEvent) => {\n    // Don't interfere with text editing\n    if (editingCardIndex !== null) return;\n\n    const pos = getPos();\n    if (typeof pos === 'number' && editor) {\n      const { state } = editor;\n      const $pos = state.doc.resolve(pos);\n      const nodeSelection = NodeSelection.create(state.doc, pos);\n      editor.view.dispatch(state.tr.setSelection(nodeSelection));\n    }\n  };\n\n  return (\n    <NodeViewWrapper\n      contentEditable={false}\n      style={{ position: \"relative\", overflow: \"visible\" }}\n      onClick={handleNodeClick}\n    >\n      <div className=\"my-4\">\n        <div\n          className={cn(\n            'grid gap-4',\n            gridColumns === 1 && 'grid-cols-1',\n            gridColumns === 2 && 'grid-cols-2',\n            gridColumns === 3 && 'grid-cols-3',\n          )}\n        >\n          {cards.map((card: CardData, cardIndex: number) => {\n            const isSelected = selectedCardIndex === cardIndex;\n            const isHovered = hoveredCardIndex === cardIndex;\n            const isEditing = editingCardIndex === cardIndex;\n\n            return (\n              <div\n                key={cardIndex}\n                className={cn(\n                  'rounded-2xl border-2 p-8 transition-all duration-200',\n                  // Show pointer cursor when card has a link and no CTA (both edit and view modes)\n                  (card.linkUrl || card.linkPage) &&\n                    !card.ctaText &&\n                    'cursor-pointer',\n                  !isEditable && 'bg-[#0a0a0a]',\n                  // Add active state feedback for clickable cards\n                  (card.linkUrl || card.linkPage) &&\n                    !card.ctaText &&\n                    'active:scale-[0.98]',\n                )}\n                style={{\n                  borderColor:\n                    (isSelected && isEditable) || isHovered\n                      ? primaryColor\n                      : '#313133',\n                }}\n                onClick={(e) => {\n                  // Don't interfere with drag operations\n                  if (!isDragging) {\n                    handleCardSelect(cardIndex, e);\n                    handleCardClick(e, card);\n                  }\n                }}\n                onMouseEnter={() => handleCardHover(cardIndex)}\n                onMouseLeave={handleCardLeave}\n              >\n                {/* Icon */}\n                <div className=\"mb-6\">\n                  <Icon\n                    icon={card.icon}\n                    className=\"w-8 h-8\"\n                    style={{ color: primaryColor }}\n                  />\n                </div>\n\n                {/* Title - Editable */}\n                <div\n                  ref={(el) => {\n                    if (!cardRefs.current[cardIndex]) {\n                      cardRefs.current[cardIndex] = {\n                        title: null,\n                        description: null,\n                      };\n                    }\n                    cardRefs.current[cardIndex].title = el;\n                    // Update content only when not editing\n                    if (el && editingCardIndex !== cardIndex) {\n                      const currentTitle = localTitles[cardIndex] ?? card.title;\n                      if (el.textContent !== currentTitle) {\n                        el.textContent = currentTitle;\n                      }\n                    }\n                  }}\n                  contentEditable={isEditable}\n                  suppressContentEditableWarning\n                  onFocus={() => {\n                    setEditingCardIndex(cardIndex);\n                    setEditingField('title');\n                  }}\n                  onBlur={() => handleTitleBlur(cardIndex)}\n                  onInput={(e) => {\n                    const newTitle = e.currentTarget.textContent || '';\n                    setLocalTitles((prev) => ({\n                      ...prev,\n                      [cardIndex]: newTitle,\n                    }));\n                  }}\n                  onMouseDown={(e) => {\n                    if (!isEditable || isDragging) return;\n\n                    // Only allow text selection when actively editing this specific field\n                    if (\n                      editingCardIndex === cardIndex &&\n                      editingField === 'title'\n                    ) {\n                      // Allow default behavior for text selection\n                      // e.stopPropagation()\n                    } else {\n                      // Prevent text selection and card selection when clicking to focus\n                      // e.preventDefault()\n                      // e.stopPropagation()\n                    }\n                  }}\n                  onClick={(e) => {\n                    // Prevent propagation to card click handler\n                    if (isEditable && !isDragging) {\n                      // e.stopPropagation()\n                    }\n                  }}\n                  className=\"text-xl font-semibold text-white mb-3 outline-none\"\n                  style={{\n                    minHeight: '1.5rem',\n                    userSelect: isEditable ? 'text' : 'none',\n                  }}\n                />\n\n                {/* Description - Editable */}\n                <div\n                  ref={(el) => {\n                    if (!cardRefs.current[cardIndex]) {\n                      cardRefs.current[cardIndex] = {\n                        title: null,\n                        description: null,\n                      };\n                    }\n                    cardRefs.current[cardIndex].description = el;\n                    // Update content only when not editing\n                    if (el && editingCardIndex !== cardIndex) {\n                      const currentDescription =\n                        localDescriptions[cardIndex] ?? card.description;\n                      if (el.textContent !== currentDescription) {\n                        el.textContent = currentDescription;\n                      }\n                    }\n                  }}\n                  contentEditable={isEditable}\n                  suppressContentEditableWarning\n                  onFocus={(e) => {\n                    setEditingCardIndex(cardIndex);\n                    setEditingField('description');\n                    // Auto-select text when focusing on the field for the first time\n                    if (editingCardIndex !== cardIndex) {\n                      // Use setTimeout to ensure state update and selection happen after render\n                      setTimeout(() => {\n                        const element = e.currentTarget;\n                        const range = document.createRange();\n                        const selection = window.getSelection();\n                        if (element && selection) {\n                          range.selectNodeContents(element);\n                          selection.removeAllRanges();\n                          selection.addRange(range);\n                        }\n                      }, 0);\n                    }\n                  }}\n                  onBlur={() => handleDescriptionBlur(cardIndex)}\n                  onInput={(e) => {\n                    const newDescription = e.currentTarget.textContent || '';\n                    setLocalDescriptions((prev) => ({\n                      ...prev,\n                      [cardIndex]: newDescription,\n                    }));\n                  }}\n                  onMouseDown={(e) => {\n                    if (!isEditable || isDragging) return;\n\n                    // Only allow text selection when actively editing this specific field\n                    if (\n                      editingCardIndex === cardIndex &&\n                      editingField === 'description'\n                    ) {\n                      // Allow default behavior for text selection\n                      // e.stopPropagation()\n                    } else {\n                      // Prevent text selection and card selection when clicking to focus\n                      // e.preventDefault()\n                      // e.stopPropagation()\n                    }\n                  }}\n                  onClick={(e) => {\n                    // Prevent propagation to card click handler\n                    if (isEditable && !isDragging) {\n                      // e.stopPropagation()\n                    }\n                  }}\n                  className=\"text-[#9ca3af] text-sm mb-6 leading-relaxed outline-none\"\n                  style={{\n                    minHeight: '2.5rem',\n                    whiteSpace: 'pre-wrap',\n                    userSelect: isEditable ? 'text' : 'none',\n                  }}\n                />\n\n                {/* CTA - Only show if ctaText is set */}\n                {card.ctaText && (\n                  <div\n                    className={cn(\n                      'flex items-center gap-2 text-base font-semibold group',\n                      card.linkUrl && 'cursor-pointer',\n                    )}\n                    style={{ color: primaryColor }}\n                    onClick={(e) => handleCtaClick(e, card)}\n                  >\n                    <span>{card.ctaText}</span>\n                    <span className=\"transition-transform duration-200 group-hover:translate-x-1\">\n                      ›\n                    </span>\n                  </div>\n                )}\n              </div>\n            );\n          })}\n        </div>\n        {/* Hidden content required for non-atom node structure */}\n        <NodeViewContent as=\"div\" style={{ display: 'none', pointerEvents: 'none' }} />\n      </div>\n    </NodeViewWrapper>\n  );\n};\n","import { Node, mergeAttributes } from '@tiptap/core';\nimport { ReactNodeViewRenderer } from '@tiptap/react';\nimport { CardNodeView } from './card-node-view';\n\nexport interface CardNodeOptions {\n  HTMLAttributes: Record<string, any>;\n  pages?: Array<{ id: string; name: string; category?: string }>;\n  onNavigateToPage?: (pageId: string) => void;\n}\n\nexport interface PageData {\n  id: string;\n  name: string;\n  category?: string;\n}\n\nexport interface CardData {\n  icon: string;\n  title: string;\n  description: string;\n  linkUrl: string | null;\n  linkPage: PageData | null;\n  ctaText: string | null;\n}\n\ndeclare module '@tiptap/core' {\n  interface Commands<ReturnType> {\n    cardNode: {\n      /**\n       * Insert a card node\n       */\n      insertCardNode: () => ReturnType;\n      /**\n       * Update card node attributes\n       */\n      updateCardAttributes: (attributes: {\n        cards?: CardData[];\n        gridColumns?: number;\n        selectedCardIndex?: number;\n      }) => ReturnType;\n    };\n  }\n}\n\nexport const CardNode = Node.create<CardNodeOptions>({\n  name: 'cardNode',\n\n  group: 'block',\n\n  content: 'paragraph?',\n\n  isolating: true,\n\n  addOptions() {\n    return {\n      HTMLAttributes: {},\n      pages: [],\n      onNavigateToPage: undefined,\n    };\n  },\n\n  addAttributes() {\n    return {\n      cards: {\n        default: [\n          {\n            icon: 'mdi:cube-outline',\n            title: 'Card Title',\n            description: 'Add a description for your card',\n            linkUrl: null,\n            linkPage: null,\n            ctaText: null,\n          },\n        ],\n        parseHTML: (element) => {\n          const cardsData = element.getAttribute('data-cards');\n          return cardsData\n            ? JSON.parse(cardsData)\n            : [\n                {\n                  icon: 'mdi:cube-outline',\n                  title: 'Card Title',\n                  description: 'Add a description for your card',\n                  linkUrl: null,\n                  linkPage: null,\n                  ctaText: null,\n                },\n              ];\n        },\n        renderHTML: (attributes) => {\n          return {\n            'data-cards': JSON.stringify(attributes.cards),\n          };\n        },\n      },\n      gridColumns: {\n        default: 1,\n        parseHTML: (element) => {\n          const cols = element.getAttribute('data-grid-columns');\n          return cols ? parseInt(cols, 10) : 1;\n        },\n        renderHTML: (attributes) => {\n          return {\n            'data-grid-columns': attributes.gridColumns.toString(),\n          };\n        },\n      },\n      selectedCardIndex: {\n        default: 0,\n        parseHTML: (element) => {\n          const index = element.getAttribute('data-selected-card-index');\n          return index ? parseInt(index, 10) : 0;\n        },\n        renderHTML: (attributes) => {\n          return {\n            'data-selected-card-index': attributes.selectedCardIndex.toString(),\n          };\n        },\n      },\n      pages: {\n        default: [],\n        parseHTML: (element) => {\n          const pagesData = element.getAttribute('data-pages');\n          return pagesData ? JSON.parse(pagesData) : [];\n        },\n        renderHTML: (attributes) => {\n          return {\n            'data-pages': JSON.stringify(attributes.pages),\n          };\n        },\n      },\n    };\n  },\n\n  parseHTML() {\n    return [\n      {\n        tag: 'div[data-type=\"card-node\"]',\n      },\n    ];\n  },\n\n  renderHTML({ HTMLAttributes }) {\n    return [\n      'div',\n      mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n        'data-type': 'card-node',\n      }),\n      0,\n    ];\n  },\n\n  addNodeView() {\n    return ReactNodeViewRenderer(CardNodeView);\n  },\n\n  addCommands() {\n    return {\n      insertCardNode:\n        () =>\n        ({ commands }) => {\n          return commands.insertContent({\n            type: this.name,\n            attrs: {\n              cards: [\n                {\n                  icon: 'mdi:cube-outline',\n                  title: 'Card Title',\n                  description: 'Add a description for your card',\n                  linkUrl: null,\n                  linkPage: null,\n                  ctaText: null,\n                },\n              ],\n              gridColumns: 1,\n              selectedCardIndex: 0,\n              pages: this.options.pages || [],\n            },\n            content: [\n              {\n                type: 'paragraph',\n              },\n            ],\n          });\n        },\n      updateCardAttributes:\n        (attributes) =>\n        ({ commands }) => {\n          return commands.updateAttributes(this.name, attributes);\n        },\n    };\n  },\n});\n\nexport default CardNode;\n","import { Node, mergeAttributes } from '@tiptap/core'\n\nexport interface ColumnListOptions {\n  HTMLAttributes: Record<string, any>\n}\n\nexport const ColumnList = Node.create<ColumnListOptions>({\n  name: 'columnList',\n\n  group: 'block',\n\n  content: 'column{2,5}', // 2-5 columns max\n\n  defining: true,\n\n  isolating: true,\n\n  addOptions() {\n    return {\n      HTMLAttributes: {},\n    }\n  },\n\n  parseHTML() {\n    return [\n      {\n        tag: 'div[data-column-list]',\n      },\n    ]\n  },\n\n  renderHTML({ HTMLAttributes }) {\n    return [\n      'div',\n      mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n        'data-column-list': '',\n        class: 'column-list',\n      }),\n      0,\n    ]\n  },\n})\n\nexport default ColumnList\n","import { Node, mergeAttributes } from '@tiptap/core'\n\nexport interface ColumnOptions {\n  HTMLAttributes: Record<string, any>\n}\n\nexport const Column = Node.create<ColumnOptions>({\n  name: 'column',\n\n  content: 'block+', // Any block content\n\n  isolating: true, // Important for proper selection\n\n  addOptions() {\n    return {\n      HTMLAttributes: {},\n    }\n  },\n\n  addAttributes() {\n    return {\n      width: {\n        default: null,\n        parseHTML: element => element.getAttribute('data-width'),\n        renderHTML: attributes => {\n          if (!attributes.width) {\n            return {}\n          }\n          return {\n            'data-width': attributes.width,\n            style: `width: ${attributes.width}`,\n          }\n        },\n      },\n    }\n  },\n\n  parseHTML() {\n    return [\n      {\n        tag: 'div[data-column]',\n      },\n    ]\n  },\n\n  renderHTML({ HTMLAttributes }) {\n    return [\n      'div',\n      mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n        'data-column': '',\n        class: 'column',\n      }),\n      0,\n    ]\n  },\n})\n\nexport default Column\n","import { Extension } from '@tiptap/core'\nimport { ColumnList } from './column-list-extension'\nimport { Column } from './column-extension'\n\ndeclare module '@tiptap/core' {\n  interface Commands<ReturnType> {\n    columns: {\n      /**\n       * Insert a column layout with the specified number of columns\n       */\n      insertColumns: (options?: { columns?: number }) => ReturnType\n    }\n  }\n}\n\nexport const ColumnsExtension = Extension.create({\n  name: 'columns',\n\n  addExtensions() {\n    return [ColumnList, Column]\n  },\n\n  addCommands() {\n    return {\n      insertColumns:\n        (options = {}) =>\n        ({ commands, state }) => {\n          const columnCount = Math.min(Math.max(options.columns || 2, 2), 5) // 2-5 columns\n\n          // Create columns with a paragraph in each\n          const columns = []\n          for (let i = 0; i < columnCount; i++) {\n            columns.push({\n              type: 'column',\n              content: [\n                {\n                  type: 'paragraph',\n                },\n              ],\n            })\n          }\n\n          return commands.insertContent({\n            type: 'columnList',\n            content: columns,\n          })\n        },\n    }\n  },\n})\n\nexport default ColumnsExtension\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\n\nexport {\n  __spreadValues,\n  __spreadProps,\n  __objRest\n};\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\n\nexport {\n  __spreadValues,\n  __spreadProps,\n  __objRest\n};\n","\"use client\";\nimport {\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/utils/misc.ts\nfunction noop(..._) {\n}\nfunction shallowEqual(a, b) {\n  if (a === b) return true;\n  if (!a) return false;\n  if (!b) return false;\n  if (typeof a !== \"object\") return false;\n  if (typeof b !== \"object\") return false;\n  const aKeys = Object.keys(a);\n  const bKeys = Object.keys(b);\n  const { length } = aKeys;\n  if (bKeys.length !== length) return false;\n  for (const key of aKeys) {\n    if (a[key] !== b[key]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction applyState(argument, currentValue) {\n  if (isUpdater(argument)) {\n    const value = isLazyValue(currentValue) ? currentValue() : currentValue;\n    return argument(value);\n  }\n  return argument;\n}\nfunction isUpdater(argument) {\n  return typeof argument === \"function\";\n}\nfunction isLazyValue(value) {\n  return typeof value === \"function\";\n}\nfunction isObject(arg) {\n  return typeof arg === \"object\" && arg != null;\n}\nfunction isEmpty(arg) {\n  if (Array.isArray(arg)) return !arg.length;\n  if (isObject(arg)) return !Object.keys(arg).length;\n  if (arg == null) return true;\n  if (arg === \"\") return true;\n  return false;\n}\nfunction isInteger(arg) {\n  if (typeof arg === \"number\") {\n    return Math.floor(arg) === arg;\n  }\n  return String(Math.floor(Number(arg))) === arg;\n}\nfunction hasOwnProperty(object, prop) {\n  if (typeof Object.hasOwn === \"function\") {\n    return Object.hasOwn(object, prop);\n  }\n  return Object.prototype.hasOwnProperty.call(object, prop);\n}\nfunction chain(...fns) {\n  return (...args) => {\n    for (const fn of fns) {\n      if (typeof fn === \"function\") {\n        fn(...args);\n      }\n    }\n  };\n}\nfunction cx(...args) {\n  return args.filter(Boolean).join(\" \") || void 0;\n}\nfunction normalizeString(str) {\n  return str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n}\nfunction omit(object, keys) {\n  const result = __spreadValues({}, object);\n  for (const key of keys) {\n    if (hasOwnProperty(result, key)) {\n      delete result[key];\n    }\n  }\n  return result;\n}\nfunction pick(object, paths) {\n  const result = {};\n  for (const key of paths) {\n    if (hasOwnProperty(object, key)) {\n      result[key] = object[key];\n    }\n  }\n  return result;\n}\nfunction identity(value) {\n  return value;\n}\nfunction beforePaint(cb = noop) {\n  const raf = requestAnimationFrame(cb);\n  return () => cancelAnimationFrame(raf);\n}\nfunction afterPaint(cb = noop) {\n  let raf = requestAnimationFrame(() => {\n    raf = requestAnimationFrame(cb);\n  });\n  return () => cancelAnimationFrame(raf);\n}\nfunction invariant(condition, message) {\n  if (condition) return;\n  if (typeof message !== \"string\") throw new Error(\"Invariant failed\");\n  throw new Error(message);\n}\nfunction getKeys(obj) {\n  return Object.keys(obj);\n}\nfunction isFalsyBooleanCallback(booleanOrCallback, ...args) {\n  const result = typeof booleanOrCallback === \"function\" ? booleanOrCallback(...args) : booleanOrCallback;\n  if (result == null) return false;\n  return !result;\n}\nfunction disabledFromProps(props) {\n  return props.disabled || props[\"aria-disabled\"] === true || props[\"aria-disabled\"] === \"true\";\n}\nfunction removeUndefinedValues(obj) {\n  const result = {};\n  for (const key in obj) {\n    if (obj[key] !== void 0) {\n      result[key] = obj[key];\n    }\n  }\n  return result;\n}\nfunction defaultValue(...values) {\n  for (const value of values) {\n    if (value !== void 0) return value;\n  }\n  return void 0;\n}\n\nexport {\n  noop,\n  shallowEqual,\n  applyState,\n  isObject,\n  isEmpty,\n  isInteger,\n  hasOwnProperty,\n  chain,\n  cx,\n  normalizeString,\n  omit,\n  pick,\n  identity,\n  beforePaint,\n  afterPaint,\n  invariant,\n  getKeys,\n  isFalsyBooleanCallback,\n  disabledFromProps,\n  removeUndefinedValues,\n  defaultValue\n};\n","\"use client\";\nimport {\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/utils/misc.ts\nimport { hasOwnProperty } from \"@ariakit/core/utils/misc\";\nimport { isValidElement } from \"react\";\nfunction setRef(ref, value) {\n  if (typeof ref === \"function\") {\n    ref(value);\n  } else if (ref) {\n    ref.current = value;\n  }\n}\nfunction isValidElementWithRef(element) {\n  if (!element) return false;\n  if (!isValidElement(element)) return false;\n  if (\"ref\" in element.props) return true;\n  if (\"ref\" in element) return true;\n  return false;\n}\nfunction getRefProperty(element) {\n  if (!isValidElementWithRef(element)) return null;\n  const props = __spreadValues({}, element.props);\n  return props.ref || element.ref;\n}\nfunction mergeProps(base, overrides) {\n  const props = __spreadValues({}, base);\n  for (const key in overrides) {\n    if (!hasOwnProperty(overrides, key)) continue;\n    if (key === \"className\") {\n      const prop = \"className\";\n      props[prop] = base[prop] ? `${base[prop]} ${overrides[prop]}` : overrides[prop];\n      continue;\n    }\n    if (key === \"style\") {\n      const prop = \"style\";\n      props[prop] = base[prop] ? __spreadValues(__spreadValues({}, base[prop]), overrides[prop]) : overrides[prop];\n      continue;\n    }\n    const overrideValue = overrides[key];\n    if (typeof overrideValue === \"function\" && key.startsWith(\"on\")) {\n      const baseValue = base[key];\n      if (typeof baseValue === \"function\") {\n        props[key] = (...args) => {\n          overrideValue(...args);\n          baseValue(...args);\n        };\n        continue;\n      }\n    }\n    props[key] = overrideValue;\n  }\n  return props;\n}\n\nexport {\n  setRef,\n  isValidElementWithRef,\n  getRefProperty,\n  mergeProps\n};\n","\"use client\";\n\n// src/utils/dom.ts\nvar canUseDOM = checkIsBrowser();\nfunction checkIsBrowser() {\n  var _a;\n  return typeof window !== \"undefined\" && !!((_a = window.document) == null ? void 0 : _a.createElement);\n}\nfunction getDocument(node) {\n  if (!node) return document;\n  if (\"self\" in node) return node.document;\n  return node.ownerDocument || document;\n}\nfunction getWindow(node) {\n  if (!node) return self;\n  if (\"self\" in node) return node.self;\n  return getDocument(node).defaultView || window;\n}\nfunction getActiveElement(node, activeDescendant = false) {\n  const { activeElement } = getDocument(node);\n  if (!(activeElement == null ? void 0 : activeElement.nodeName)) {\n    return null;\n  }\n  if (isFrame(activeElement) && activeElement.contentDocument) {\n    return getActiveElement(\n      activeElement.contentDocument.body,\n      activeDescendant\n    );\n  }\n  if (activeDescendant) {\n    const id = activeElement.getAttribute(\"aria-activedescendant\");\n    if (id) {\n      const element = getDocument(activeElement).getElementById(id);\n      if (element) {\n        return element;\n      }\n    }\n  }\n  return activeElement;\n}\nfunction contains(parent, child) {\n  return parent === child || parent.contains(child);\n}\nfunction isFrame(element) {\n  return element.tagName === \"IFRAME\";\n}\nfunction isButton(element) {\n  const tagName = element.tagName.toLowerCase();\n  if (tagName === \"button\") return true;\n  if (tagName === \"input\" && element.type) {\n    return buttonInputTypes.indexOf(element.type) !== -1;\n  }\n  return false;\n}\nvar buttonInputTypes = [\n  \"button\",\n  \"color\",\n  \"file\",\n  \"image\",\n  \"reset\",\n  \"submit\"\n];\nfunction isVisible(element) {\n  if (typeof element.checkVisibility === \"function\") {\n    return element.checkVisibility();\n  }\n  const htmlElement = element;\n  return htmlElement.offsetWidth > 0 || htmlElement.offsetHeight > 0 || element.getClientRects().length > 0;\n}\nfunction isTextField(element) {\n  try {\n    const isTextInput = element instanceof HTMLInputElement && element.selectionStart !== null;\n    const isTextArea = element.tagName === \"TEXTAREA\";\n    return isTextInput || isTextArea || false;\n  } catch (error) {\n    return false;\n  }\n}\nfunction isTextbox(element) {\n  return element.isContentEditable || isTextField(element);\n}\nfunction getTextboxValue(element) {\n  if (isTextField(element)) {\n    return element.value;\n  }\n  if (element.isContentEditable) {\n    const range = getDocument(element).createRange();\n    range.selectNodeContents(element);\n    return range.toString();\n  }\n  return \"\";\n}\nfunction getTextboxSelection(element) {\n  let start = 0;\n  let end = 0;\n  if (isTextField(element)) {\n    start = element.selectionStart || 0;\n    end = element.selectionEnd || 0;\n  } else if (element.isContentEditable) {\n    const selection = getDocument(element).getSelection();\n    if ((selection == null ? void 0 : selection.rangeCount) && selection.anchorNode && contains(element, selection.anchorNode) && selection.focusNode && contains(element, selection.focusNode)) {\n      const range = selection.getRangeAt(0);\n      const nextRange = range.cloneRange();\n      nextRange.selectNodeContents(element);\n      nextRange.setEnd(range.startContainer, range.startOffset);\n      start = nextRange.toString().length;\n      nextRange.setEnd(range.endContainer, range.endOffset);\n      end = nextRange.toString().length;\n    }\n  }\n  return { start, end };\n}\nfunction getPopupRole(element, fallback) {\n  const allowedPopupRoles = [\"dialog\", \"menu\", \"listbox\", \"tree\", \"grid\"];\n  const role = element == null ? void 0 : element.getAttribute(\"role\");\n  if (role && allowedPopupRoles.indexOf(role) !== -1) {\n    return role;\n  }\n  return fallback;\n}\nfunction getPopupItemRole(element, fallback) {\n  var _a;\n  const itemRoleByPopupRole = {\n    menu: \"menuitem\",\n    listbox: \"option\",\n    tree: \"treeitem\"\n  };\n  const popupRole = getPopupRole(element);\n  if (!popupRole) return fallback;\n  const key = popupRole;\n  return (_a = itemRoleByPopupRole[key]) != null ? _a : fallback;\n}\nfunction scrollIntoViewIfNeeded(element, arg) {\n  if (isPartiallyHidden(element) && \"scrollIntoView\" in element) {\n    element.scrollIntoView(arg);\n  }\n}\nfunction getScrollingElement(element) {\n  if (!element) return null;\n  const isScrollableOverflow = (overflow) => {\n    if (overflow === \"auto\") return true;\n    if (overflow === \"scroll\") return true;\n    return false;\n  };\n  if (element.clientHeight && element.scrollHeight > element.clientHeight) {\n    const { overflowY } = getComputedStyle(element);\n    if (isScrollableOverflow(overflowY)) return element;\n  } else if (element.clientWidth && element.scrollWidth > element.clientWidth) {\n    const { overflowX } = getComputedStyle(element);\n    if (isScrollableOverflow(overflowX)) return element;\n  }\n  return getScrollingElement(element.parentElement) || document.scrollingElement || document.body;\n}\nfunction isPartiallyHidden(element) {\n  const elementRect = element.getBoundingClientRect();\n  const scroller = getScrollingElement(element);\n  if (!scroller) return false;\n  const scrollerRect = scroller.getBoundingClientRect();\n  const isHTML = scroller.tagName === \"HTML\";\n  const scrollerTop = isHTML ? scrollerRect.top + scroller.scrollTop : scrollerRect.top;\n  const scrollerBottom = isHTML ? scroller.clientHeight : scrollerRect.bottom;\n  const scrollerLeft = isHTML ? scrollerRect.left + scroller.scrollLeft : scrollerRect.left;\n  const scrollerRight = isHTML ? scroller.clientWidth : scrollerRect.right;\n  const top = elementRect.top < scrollerTop;\n  const left = elementRect.left < scrollerLeft;\n  const bottom = elementRect.bottom > scrollerBottom;\n  const right = elementRect.right > scrollerRight;\n  return top || left || bottom || right;\n}\nfunction setSelectionRange(element, ...args) {\n  if (/text|search|password|tel|url/i.test(element.type)) {\n    element.setSelectionRange(...args);\n  }\n}\nfunction sortBasedOnDOMPosition(items, getElement) {\n  const pairs = items.map((item, index) => [index, item]);\n  let isOrderDifferent = false;\n  pairs.sort(([indexA, a], [indexB, b]) => {\n    const elementA = getElement(a);\n    const elementB = getElement(b);\n    if (elementA === elementB) return 0;\n    if (!elementA || !elementB) return 0;\n    if (isElementPreceding(elementA, elementB)) {\n      if (indexA > indexB) {\n        isOrderDifferent = true;\n      }\n      return -1;\n    }\n    if (indexA < indexB) {\n      isOrderDifferent = true;\n    }\n    return 1;\n  });\n  if (isOrderDifferent) {\n    return pairs.map(([_, item]) => item);\n  }\n  return items;\n}\nfunction isElementPreceding(a, b) {\n  return Boolean(\n    b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING\n  );\n}\n\nexport {\n  canUseDOM,\n  getDocument,\n  getWindow,\n  getActiveElement,\n  contains,\n  isFrame,\n  isButton,\n  isVisible,\n  isTextField,\n  isTextbox,\n  getTextboxValue,\n  getTextboxSelection,\n  getPopupRole,\n  getPopupItemRole,\n  scrollIntoViewIfNeeded,\n  getScrollingElement,\n  isPartiallyHidden,\n  setSelectionRange,\n  sortBasedOnDOMPosition\n};\n","\"use client\";\nimport {\n  canUseDOM\n} from \"./DTR5TSDJ.js\";\n\n// src/utils/platform.ts\nfunction isTouchDevice() {\n  return canUseDOM && !!navigator.maxTouchPoints;\n}\nfunction isApple() {\n  if (!canUseDOM) return false;\n  return /mac|iphone|ipad|ipod/i.test(navigator.platform);\n}\nfunction isSafari() {\n  return canUseDOM && isApple() && /apple/i.test(navigator.vendor);\n}\nfunction isFirefox() {\n  return canUseDOM && /firefox\\//i.test(navigator.userAgent);\n}\nfunction isMac() {\n  return canUseDOM && navigator.platform.startsWith(\"Mac\") && !isTouchDevice();\n}\n\nexport {\n  isTouchDevice,\n  isApple,\n  isSafari,\n  isFirefox,\n  isMac\n};\n","\"use client\";\nimport {\n  isApple\n} from \"../__chunks/QAGXQEUG.js\";\nimport {\n  contains\n} from \"../__chunks/DTR5TSDJ.js\";\nimport {\n  __spreadProps,\n  __spreadValues\n} from \"../__chunks/3YLGPPWQ.js\";\n\n// src/utils/events.ts\nfunction isPortalEvent(event) {\n  return Boolean(\n    event.currentTarget && !contains(event.currentTarget, event.target)\n  );\n}\nfunction isSelfTarget(event) {\n  return event.target === event.currentTarget;\n}\nfunction isOpeningInNewTab(event) {\n  const element = event.currentTarget;\n  if (!element) return false;\n  const isAppleDevice = isApple();\n  if (isAppleDevice && !event.metaKey) return false;\n  if (!isAppleDevice && !event.ctrlKey) return false;\n  const tagName = element.tagName.toLowerCase();\n  if (tagName === \"a\") return true;\n  if (tagName === \"button\" && element.type === \"submit\") return true;\n  if (tagName === \"input\" && element.type === \"submit\") return true;\n  return false;\n}\nfunction isDownloading(event) {\n  const element = event.currentTarget;\n  if (!element) return false;\n  const tagName = element.tagName.toLowerCase();\n  if (!event.altKey) return false;\n  if (tagName === \"a\") return true;\n  if (tagName === \"button\" && element.type === \"submit\") return true;\n  if (tagName === \"input\" && element.type === \"submit\") return true;\n  return false;\n}\nfunction fireEvent(element, type, eventInit) {\n  const event = new Event(type, eventInit);\n  return element.dispatchEvent(event);\n}\nfunction fireBlurEvent(element, eventInit) {\n  const event = new FocusEvent(\"blur\", eventInit);\n  const defaultAllowed = element.dispatchEvent(event);\n  const bubbleInit = __spreadProps(__spreadValues({}, eventInit), { bubbles: true });\n  element.dispatchEvent(new FocusEvent(\"focusout\", bubbleInit));\n  return defaultAllowed;\n}\nfunction fireFocusEvent(element, eventInit) {\n  const event = new FocusEvent(\"focus\", eventInit);\n  const defaultAllowed = element.dispatchEvent(event);\n  const bubbleInit = __spreadProps(__spreadValues({}, eventInit), { bubbles: true });\n  element.dispatchEvent(new FocusEvent(\"focusin\", bubbleInit));\n  return defaultAllowed;\n}\nfunction fireKeyboardEvent(element, type, eventInit) {\n  const event = new KeyboardEvent(type, eventInit);\n  return element.dispatchEvent(event);\n}\nfunction fireClickEvent(element, eventInit) {\n  const event = new MouseEvent(\"click\", eventInit);\n  return element.dispatchEvent(event);\n}\nfunction isFocusEventOutside(event, container) {\n  const containerElement = container || event.currentTarget;\n  const relatedTarget = event.relatedTarget;\n  return !relatedTarget || !contains(containerElement, relatedTarget);\n}\nfunction getInputType(event) {\n  const nativeEvent = \"nativeEvent\" in event ? event.nativeEvent : event;\n  if (!nativeEvent) return;\n  if (!(\"inputType\" in nativeEvent)) return;\n  if (typeof nativeEvent.inputType !== \"string\") return;\n  return nativeEvent.inputType;\n}\nfunction queueBeforeEvent(element, type, callback, timeout) {\n  const createTimer = (callback2) => {\n    if (timeout) {\n      const timerId2 = setTimeout(callback2, timeout);\n      return () => clearTimeout(timerId2);\n    }\n    const timerId = requestAnimationFrame(callback2);\n    return () => cancelAnimationFrame(timerId);\n  };\n  const cancelTimer = createTimer(() => {\n    element.removeEventListener(type, callSync, true);\n    callback();\n  });\n  const callSync = () => {\n    cancelTimer();\n    callback();\n  };\n  element.addEventListener(type, callSync, { once: true, capture: true });\n  return cancelTimer;\n}\nfunction addGlobalEventListener(type, listener, options, scope = window) {\n  const children = [];\n  try {\n    scope.document.addEventListener(type, listener, options);\n    for (const frame of Array.from(scope.frames)) {\n      children.push(addGlobalEventListener(type, listener, options, frame));\n    }\n  } catch (e) {\n  }\n  const removeEventListener = () => {\n    try {\n      scope.document.removeEventListener(type, listener, options);\n    } catch (e) {\n    }\n    for (const remove of children) {\n      remove();\n    }\n  };\n  return removeEventListener;\n}\nexport {\n  addGlobalEventListener,\n  fireBlurEvent,\n  fireClickEvent,\n  fireEvent,\n  fireFocusEvent,\n  fireKeyboardEvent,\n  getInputType,\n  isDownloading,\n  isFocusEventOutside,\n  isOpeningInNewTab,\n  isPortalEvent,\n  isSelfTarget,\n  queueBeforeEvent\n};\n","\"use client\";\nimport {\n  setRef\n} from \"./SK3NAZA3.js\";\nimport {\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/utils/hooks.ts\nimport { canUseDOM } from \"@ariakit/core/utils/dom\";\nimport { addGlobalEventListener } from \"@ariakit/core/utils/events\";\nimport * as React from \"react\";\nimport {\n  useCallback,\n  useEffect,\n  useLayoutEffect,\n  useMemo,\n  useReducer,\n  useRef,\n  useState\n} from \"react\";\nvar _React = __spreadValues({}, React);\nvar useReactId = _React.useId;\nvar useReactDeferredValue = _React.useDeferredValue;\nvar useReactInsertionEffect = _React.useInsertionEffect;\nvar useSafeLayoutEffect = canUseDOM ? useLayoutEffect : useEffect;\nfunction useInitialValue(value) {\n  const [initialValue] = useState(value);\n  return initialValue;\n}\nfunction useLazyValue(init) {\n  const ref = useRef();\n  if (ref.current === void 0) {\n    ref.current = init();\n  }\n  return ref.current;\n}\nfunction useLiveRef(value) {\n  const ref = useRef(value);\n  useSafeLayoutEffect(() => {\n    ref.current = value;\n  });\n  return ref;\n}\nfunction usePreviousValue(value) {\n  const [previousValue, setPreviousValue] = useState(value);\n  if (value !== previousValue) {\n    setPreviousValue(value);\n  }\n  return previousValue;\n}\nfunction useEvent(callback) {\n  const ref = useRef(() => {\n    throw new Error(\"Cannot call an event handler while rendering.\");\n  });\n  if (useReactInsertionEffect) {\n    useReactInsertionEffect(() => {\n      ref.current = callback;\n    });\n  } else {\n    ref.current = callback;\n  }\n  return useCallback((...args) => {\n    var _a;\n    return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args);\n  }, []);\n}\nfunction useTransactionState(callback) {\n  const [state, setState] = useState(null);\n  useSafeLayoutEffect(() => {\n    if (state == null) return;\n    if (!callback) return;\n    let prevState = null;\n    callback((prev) => {\n      prevState = prev;\n      return state;\n    });\n    return () => {\n      callback(prevState);\n    };\n  }, [state, callback]);\n  return [state, setState];\n}\nfunction useMergeRefs(...refs) {\n  return useMemo(() => {\n    if (!refs.some(Boolean)) return;\n    return (value) => {\n      for (const ref of refs) {\n        setRef(ref, value);\n      }\n    };\n  }, refs);\n}\nfunction useId(defaultId) {\n  if (useReactId) {\n    const reactId = useReactId();\n    if (defaultId) return defaultId;\n    return reactId;\n  }\n  const [id, setId] = useState(defaultId);\n  useSafeLayoutEffect(() => {\n    if (defaultId || id) return;\n    const random = Math.random().toString(36).slice(2, 8);\n    setId(`id-${random}`);\n  }, [defaultId, id]);\n  return defaultId || id;\n}\nfunction useDeferredValue(value) {\n  if (useReactDeferredValue) {\n    return useReactDeferredValue(value);\n  }\n  const [deferredValue, setDeferredValue] = useState(value);\n  useEffect(() => {\n    const raf = requestAnimationFrame(() => setDeferredValue(value));\n    return () => cancelAnimationFrame(raf);\n  }, [value]);\n  return deferredValue;\n}\nfunction useTagName(refOrElement, type) {\n  const stringOrUndefined = (type2) => {\n    if (typeof type2 !== \"string\") return;\n    return type2;\n  };\n  const [tagName, setTagName] = useState(() => stringOrUndefined(type));\n  useSafeLayoutEffect(() => {\n    const element = refOrElement && \"current\" in refOrElement ? refOrElement.current : refOrElement;\n    setTagName((element == null ? void 0 : element.tagName.toLowerCase()) || stringOrUndefined(type));\n  }, [refOrElement, type]);\n  return tagName;\n}\nfunction useAttribute(refOrElement, attributeName, defaultValue) {\n  const initialValue = useInitialValue(defaultValue);\n  const [attribute, setAttribute] = useState(initialValue);\n  useEffect(() => {\n    const element = refOrElement && \"current\" in refOrElement ? refOrElement.current : refOrElement;\n    if (!element) return;\n    const callback = () => {\n      const value = element.getAttribute(attributeName);\n      setAttribute(value == null ? initialValue : value);\n    };\n    const observer = new MutationObserver(callback);\n    observer.observe(element, { attributeFilter: [attributeName] });\n    callback();\n    return () => observer.disconnect();\n  }, [refOrElement, attributeName, initialValue]);\n  return attribute;\n}\nfunction useUpdateEffect(effect, deps) {\n  const mounted = useRef(false);\n  useEffect(() => {\n    if (mounted.current) {\n      return effect();\n    }\n    mounted.current = true;\n  }, deps);\n  useEffect(\n    () => () => {\n      mounted.current = false;\n    },\n    []\n  );\n}\nfunction useUpdateLayoutEffect(effect, deps) {\n  const mounted = useRef(false);\n  useSafeLayoutEffect(() => {\n    if (mounted.current) {\n      return effect();\n    }\n    mounted.current = true;\n  }, deps);\n  useSafeLayoutEffect(\n    () => () => {\n      mounted.current = false;\n    },\n    []\n  );\n}\nfunction useForceUpdate() {\n  return useReducer(() => [], []);\n}\nfunction useBooleanEvent(booleanOrCallback) {\n  return useEvent(\n    typeof booleanOrCallback === \"function\" ? booleanOrCallback : () => booleanOrCallback\n  );\n}\nfunction useWrapElement(props, callback, deps = []) {\n  const wrapElement = useCallback(\n    (element) => {\n      if (props.wrapElement) {\n        element = props.wrapElement(element);\n      }\n      return callback(element);\n    },\n    [...deps, props.wrapElement]\n  );\n  return __spreadProps(__spreadValues({}, props), { wrapElement });\n}\nfunction usePortalRef(portalProp = false, portalRefProp) {\n  const [portalNode, setPortalNode] = useState(null);\n  const portalRef = useMergeRefs(setPortalNode, portalRefProp);\n  const domReady = !portalProp || portalNode;\n  return { portalRef, portalNode, domReady };\n}\nfunction useMetadataProps(props, key, value) {\n  const parent = props.onLoadedMetadataCapture;\n  const onLoadedMetadataCapture = useMemo(() => {\n    return Object.assign(() => {\n    }, __spreadProps(__spreadValues({}, parent), { [key]: value }));\n  }, [parent, key, value]);\n  return [parent == null ? void 0 : parent[key], { onLoadedMetadataCapture }];\n}\nvar hasInstalledGlobalEventListeners = false;\nfunction useIsMouseMoving() {\n  useEffect(() => {\n    if (hasInstalledGlobalEventListeners) return;\n    addGlobalEventListener(\"mousemove\", setMouseMoving, true);\n    addGlobalEventListener(\"mousedown\", resetMouseMoving, true);\n    addGlobalEventListener(\"mouseup\", resetMouseMoving, true);\n    addGlobalEventListener(\"keydown\", resetMouseMoving, true);\n    addGlobalEventListener(\"scroll\", resetMouseMoving, true);\n    hasInstalledGlobalEventListeners = true;\n  }, []);\n  const isMouseMoving = useEvent(() => mouseMoving);\n  return isMouseMoving;\n}\nvar mouseMoving = false;\nvar previousScreenX = 0;\nvar previousScreenY = 0;\nfunction hasMouseMovement(event) {\n  const movementX = event.movementX || event.screenX - previousScreenX;\n  const movementY = event.movementY || event.screenY - previousScreenY;\n  previousScreenX = event.screenX;\n  previousScreenY = event.screenY;\n  return movementX || movementY || process.env.NODE_ENV === \"test\";\n}\nfunction setMouseMoving(event) {\n  if (!hasMouseMovement(event)) return;\n  mouseMoving = true;\n}\nfunction resetMouseMoving() {\n  mouseMoving = false;\n}\n\nexport {\n  useSafeLayoutEffect,\n  useInitialValue,\n  useLazyValue,\n  useLiveRef,\n  usePreviousValue,\n  useEvent,\n  useTransactionState,\n  useMergeRefs,\n  useId,\n  useDeferredValue,\n  useTagName,\n  useAttribute,\n  useUpdateEffect,\n  useUpdateLayoutEffect,\n  useForceUpdate,\n  useBooleanEvent,\n  useWrapElement,\n  usePortalRef,\n  useMetadataProps,\n  useIsMouseMoving\n};\n","\"use client\";\nimport {\n  useMergeRefs\n} from \"./5GGHRIN3.js\";\nimport {\n  getRefProperty,\n  mergeProps\n} from \"./SK3NAZA3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/utils/system.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction forwardRef2(render) {\n  const Role = React.forwardRef((props, ref) => render(__spreadProps(__spreadValues({}, props), { ref })));\n  Role.displayName = render.displayName || render.name;\n  return Role;\n}\nfunction memo2(Component, propsAreEqual) {\n  return React.memo(Component, propsAreEqual);\n}\nfunction createElement(Type, props) {\n  const _a = props, { wrapElement, render } = _a, rest = __objRest(_a, [\"wrapElement\", \"render\"]);\n  const mergedRef = useMergeRefs(props.ref, getRefProperty(render));\n  let element;\n  if (React.isValidElement(render)) {\n    const renderProps = __spreadProps(__spreadValues({}, render.props), { ref: mergedRef });\n    element = React.cloneElement(render, mergeProps(rest, renderProps));\n  } else if (render) {\n    element = render(rest);\n  } else {\n    element = /* @__PURE__ */ jsx(Type, __spreadValues({}, rest));\n  }\n  if (wrapElement) {\n    return wrapElement(element);\n  }\n  return element;\n}\nfunction createHook(useProps) {\n  const useRole = (props = {}) => {\n    return useProps(props);\n  };\n  useRole.displayName = useProps.name;\n  return useRole;\n}\nfunction createStoreContext(providers = [], scopedProviders = []) {\n  const context = React.createContext(void 0);\n  const scopedContext = React.createContext(void 0);\n  const useContext2 = () => React.useContext(context);\n  const useScopedContext = (onlyScoped = false) => {\n    const scoped = React.useContext(scopedContext);\n    const store = useContext2();\n    if (onlyScoped) return scoped;\n    return scoped || store;\n  };\n  const useProviderContext = () => {\n    const scoped = React.useContext(scopedContext);\n    const store = useContext2();\n    if (scoped && scoped === store) return;\n    return store;\n  };\n  const ContextProvider = (props) => {\n    return providers.reduceRight(\n      (children, Provider) => /* @__PURE__ */ jsx(Provider, __spreadProps(__spreadValues({}, props), { children })),\n      /* @__PURE__ */ jsx(context.Provider, __spreadValues({}, props))\n    );\n  };\n  const ScopedContextProvider = (props) => {\n    return /* @__PURE__ */ jsx(ContextProvider, __spreadProps(__spreadValues({}, props), { children: scopedProviders.reduceRight(\n      (children, Provider) => /* @__PURE__ */ jsx(Provider, __spreadProps(__spreadValues({}, props), { children })),\n      /* @__PURE__ */ jsx(scopedContext.Provider, __spreadValues({}, props))\n    ) }));\n  };\n  return {\n    context,\n    scopedContext,\n    useContext: useContext2,\n    useScopedContext,\n    useProviderContext,\n    ContextProvider,\n    ScopedContextProvider\n  };\n}\n\nexport {\n  forwardRef2 as forwardRef,\n  memo2 as memo,\n  createElement,\n  createHook,\n  createStoreContext\n};\n","\"use client\";\nimport {\n  createStoreContext\n} from \"./VOQWLFSQ.js\";\n\n// src/collection/collection-context.tsx\nvar ctx = createStoreContext();\nvar useCollectionContext = ctx.useContext;\nvar useCollectionScopedContext = ctx.useScopedContext;\nvar useCollectionProviderContext = ctx.useProviderContext;\nvar CollectionContextProvider = ctx.ContextProvider;\nvar CollectionScopedContextProvider = ctx.ScopedContextProvider;\n\nexport {\n  useCollectionContext,\n  useCollectionScopedContext,\n  useCollectionProviderContext,\n  CollectionContextProvider,\n  CollectionScopedContextProvider\n};\n","\"use client\";\nimport {\n  CollectionContextProvider,\n  CollectionScopedContextProvider\n} from \"./5CPL3B7G.js\";\nimport {\n  createStoreContext\n} from \"./VOQWLFSQ.js\";\n\n// src/composite/composite-context.tsx\nimport { createContext } from \"react\";\nvar ctx = createStoreContext(\n  [CollectionContextProvider],\n  [CollectionScopedContextProvider]\n);\nvar useCompositeContext = ctx.useContext;\nvar useCompositeScopedContext = ctx.useScopedContext;\nvar useCompositeProviderContext = ctx.useProviderContext;\nvar CompositeContextProvider = ctx.ContextProvider;\nvar CompositeScopedContextProvider = ctx.ScopedContextProvider;\nvar CompositeItemContext = createContext(\n  void 0\n);\nvar CompositeRowContext = createContext(\n  void 0\n);\n\nexport {\n  useCompositeContext,\n  useCompositeScopedContext,\n  useCompositeProviderContext,\n  CompositeContextProvider,\n  CompositeScopedContextProvider,\n  CompositeItemContext,\n  CompositeRowContext\n};\n","\"use client\";\n\n// src/composite/utils.ts\nimport { getDocument, isTextField } from \"@ariakit/core/utils/dom\";\nvar NULL_ITEM = { id: null };\nfunction flipItems(items, activeId, shouldInsertNullItem = false) {\n  const index = items.findIndex((item) => item.id === activeId);\n  return [\n    ...items.slice(index + 1),\n    ...shouldInsertNullItem ? [NULL_ITEM] : [],\n    ...items.slice(0, index)\n  ];\n}\nfunction findFirstEnabledItem(items, excludeId) {\n  return items.find((item) => {\n    if (excludeId) {\n      return !item.disabled && item.id !== excludeId;\n    }\n    return !item.disabled;\n  });\n}\nfunction getEnabledItem(store, id) {\n  if (!id) return null;\n  return store.item(id) || null;\n}\nfunction groupItemsByRows(items) {\n  const rows = [];\n  for (const item of items) {\n    const row = rows.find((currentRow) => {\n      var _a;\n      return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId;\n    });\n    if (row) {\n      row.push(item);\n    } else {\n      rows.push([item]);\n    }\n  }\n  return rows;\n}\nfunction selectTextField(element, collapseToEnd = false) {\n  if (isTextField(element)) {\n    element.setSelectionRange(\n      collapseToEnd ? element.value.length : 0,\n      element.value.length\n    );\n  } else if (element.isContentEditable) {\n    const selection = getDocument(element).getSelection();\n    selection == null ? void 0 : selection.selectAllChildren(element);\n    if (collapseToEnd) {\n      selection == null ? void 0 : selection.collapseToEnd();\n    }\n  }\n}\nvar FOCUS_SILENTLY = Symbol(\"FOCUS_SILENTLY\");\nfunction focusSilently(element) {\n  element[FOCUS_SILENTLY] = true;\n  element.focus({ preventScroll: true });\n}\nfunction silentlyFocused(element) {\n  const isSilentlyFocused = element[FOCUS_SILENTLY];\n  delete element[FOCUS_SILENTLY];\n  return isSilentlyFocused;\n}\nfunction isItem(store, element, exclude) {\n  if (!element) return false;\n  if (element === exclude) return false;\n  const item = store.item(element.id);\n  if (!item) return false;\n  if (exclude && item.element === exclude) return false;\n  return true;\n}\n\nexport {\n  flipItems,\n  findFirstEnabledItem,\n  getEnabledItem,\n  groupItemsByRows,\n  selectTextField,\n  focusSilently,\n  silentlyFocused,\n  isItem\n};\n","\"use client\";\nimport {\n  useCollectionContext\n} from \"./5CPL3B7G.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useId,\n  useMergeRefs\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/collection/collection-item.tsx\nimport { identity, removeUndefinedValues } from \"@ariakit/core/utils/misc\";\nimport { useEffect, useRef } from \"react\";\nvar TagName = \"div\";\nvar useCollectionItem = createHook(\n  function useCollectionItem2(_a) {\n    var _b = _a, {\n      store,\n      shouldRegisterItem = true,\n      getItem = identity,\n      element: element\n    } = _b, props = __objRest(_b, [\n      \"store\",\n      \"shouldRegisterItem\",\n      \"getItem\",\n      // @ts-expect-error This prop may come from a collection renderer.\n      \"element\"\n    ]);\n    const context = useCollectionContext();\n    store = store || context;\n    const id = useId(props.id);\n    const ref = useRef(element);\n    useEffect(() => {\n      const element2 = ref.current;\n      if (!id) return;\n      if (!element2) return;\n      if (!shouldRegisterItem) return;\n      const item = getItem({ id, element: element2 });\n      return store == null ? void 0 : store.renderItem(item);\n    }, [id, shouldRegisterItem, getItem, store]);\n    props = __spreadProps(__spreadValues({}, props), {\n      ref: useMergeRefs(ref, props.ref)\n    });\n    return removeUndefinedValues(props);\n  }\n);\nvar CollectionItem = forwardRef(function CollectionItem2(props) {\n  const htmlProps = useCollectionItem(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useCollectionItem,\n  CollectionItem\n};\n","\"use client\";\n\n// src/focusable/focusable-context.tsx\nimport { createContext } from \"react\";\nvar FocusableContext = createContext(true);\n\nexport {\n  FocusableContext\n};\n","\"use client\";\nimport {\n  contains,\n  getActiveElement,\n  isFrame,\n  isVisible\n} from \"../__chunks/DTR5TSDJ.js\";\nimport {\n  __spreadValues\n} from \"../__chunks/3YLGPPWQ.js\";\n\n// src/utils/focus.ts\nvar selector = \"input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])\";\nfunction hasNegativeTabIndex(element) {\n  const tabIndex = Number.parseInt(element.getAttribute(\"tabindex\") || \"0\", 10);\n  return tabIndex < 0;\n}\nfunction isFocusable(element) {\n  if (!element.matches(selector)) return false;\n  if (!isVisible(element)) return false;\n  if (element.closest(\"[inert]\")) return false;\n  return true;\n}\nfunction isTabbable(element) {\n  if (!isFocusable(element)) return false;\n  if (hasNegativeTabIndex(element)) return false;\n  if (!(\"form\" in element)) return true;\n  if (!element.form) return true;\n  if (element.checked) return true;\n  if (element.type !== \"radio\") return true;\n  const radioGroup = element.form.elements.namedItem(element.name);\n  if (!radioGroup) return true;\n  if (!(\"length\" in radioGroup)) return true;\n  const activeElement = getActiveElement(element);\n  if (!activeElement) return true;\n  if (activeElement === element) return true;\n  if (!(\"form\" in activeElement)) return true;\n  if (activeElement.form !== element.form) return true;\n  if (activeElement.name !== element.name) return true;\n  return false;\n}\nfunction getAllFocusableIn(container, includeContainer) {\n  const elements = Array.from(\n    container.querySelectorAll(selector)\n  );\n  if (includeContainer) {\n    elements.unshift(container);\n  }\n  const focusableElements = elements.filter(isFocusable);\n  focusableElements.forEach((element, i) => {\n    if (isFrame(element) && element.contentDocument) {\n      const frameBody = element.contentDocument.body;\n      focusableElements.splice(i, 1, ...getAllFocusableIn(frameBody));\n    }\n  });\n  return focusableElements;\n}\nfunction getAllFocusable(includeBody) {\n  return getAllFocusableIn(document.body, includeBody);\n}\nfunction getFirstFocusableIn(container, includeContainer) {\n  const [first] = getAllFocusableIn(container, includeContainer);\n  return first || null;\n}\nfunction getFirstFocusable(includeBody) {\n  return getFirstFocusableIn(document.body, includeBody);\n}\nfunction getAllTabbableIn(container, includeContainer, fallbackToFocusable) {\n  const elements = Array.from(\n    container.querySelectorAll(selector)\n  );\n  const tabbableElements = elements.filter(isTabbable);\n  if (includeContainer && isTabbable(container)) {\n    tabbableElements.unshift(container);\n  }\n  tabbableElements.forEach((element, i) => {\n    if (isFrame(element) && element.contentDocument) {\n      const frameBody = element.contentDocument.body;\n      const allFrameTabbable = getAllTabbableIn(\n        frameBody,\n        false,\n        fallbackToFocusable\n      );\n      tabbableElements.splice(i, 1, ...allFrameTabbable);\n    }\n  });\n  if (!tabbableElements.length && fallbackToFocusable) {\n    return elements;\n  }\n  return tabbableElements;\n}\nfunction getAllTabbable(fallbackToFocusable) {\n  return getAllTabbableIn(document.body, false, fallbackToFocusable);\n}\nfunction getFirstTabbableIn(container, includeContainer, fallbackToFocusable) {\n  const [first] = getAllTabbableIn(\n    container,\n    includeContainer,\n    fallbackToFocusable\n  );\n  return first || null;\n}\nfunction getFirstTabbable(fallbackToFocusable) {\n  return getFirstTabbableIn(document.body, false, fallbackToFocusable);\n}\nfunction getLastTabbableIn(container, includeContainer, fallbackToFocusable) {\n  const allTabbable = getAllTabbableIn(\n    container,\n    includeContainer,\n    fallbackToFocusable\n  );\n  return allTabbable[allTabbable.length - 1] || null;\n}\nfunction getLastTabbable(fallbackToFocusable) {\n  return getLastTabbableIn(document.body, false, fallbackToFocusable);\n}\nfunction getNextTabbableIn(container, includeContainer, fallbackToFirst, fallbackToFocusable) {\n  const activeElement = getActiveElement(container);\n  const allFocusable = getAllFocusableIn(container, includeContainer);\n  const activeIndex = allFocusable.indexOf(activeElement);\n  const nextFocusableElements = allFocusable.slice(activeIndex + 1);\n  return nextFocusableElements.find(isTabbable) || (fallbackToFirst ? allFocusable.find(isTabbable) : null) || (fallbackToFocusable ? nextFocusableElements[0] : null) || null;\n}\nfunction getNextTabbable(fallbackToFirst, fallbackToFocusable) {\n  return getNextTabbableIn(\n    document.body,\n    false,\n    fallbackToFirst,\n    fallbackToFocusable\n  );\n}\nfunction getPreviousTabbableIn(container, includeContainer, fallbackToLast, fallbackToFocusable) {\n  const activeElement = getActiveElement(container);\n  const allFocusable = getAllFocusableIn(container, includeContainer).reverse();\n  const activeIndex = allFocusable.indexOf(activeElement);\n  const previousFocusableElements = allFocusable.slice(activeIndex + 1);\n  return previousFocusableElements.find(isTabbable) || (fallbackToLast ? allFocusable.find(isTabbable) : null) || (fallbackToFocusable ? previousFocusableElements[0] : null) || null;\n}\nfunction getPreviousTabbable(fallbackToFirst, fallbackToFocusable) {\n  return getPreviousTabbableIn(\n    document.body,\n    false,\n    fallbackToFirst,\n    fallbackToFocusable\n  );\n}\nfunction getClosestFocusable(element) {\n  while (element && !isFocusable(element)) {\n    element = element.closest(selector);\n  }\n  return element || null;\n}\nfunction hasFocus(element) {\n  const activeElement = getActiveElement(element);\n  if (!activeElement) return false;\n  if (activeElement === element) return true;\n  const activeDescendant = activeElement.getAttribute(\"aria-activedescendant\");\n  if (!activeDescendant) return false;\n  return activeDescendant === element.id;\n}\nfunction hasFocusWithin(element) {\n  const activeElement = getActiveElement(element);\n  if (!activeElement) return false;\n  if (contains(element, activeElement)) return true;\n  const activeDescendant = activeElement.getAttribute(\"aria-activedescendant\");\n  if (!activeDescendant) return false;\n  if (!(\"id\" in element)) return false;\n  if (activeDescendant === element.id) return true;\n  return !!element.querySelector(`#${CSS.escape(activeDescendant)}`);\n}\nfunction focusIfNeeded(element) {\n  if (!hasFocusWithin(element) && isFocusable(element)) {\n    element.focus();\n  }\n}\nfunction disableFocus(element) {\n  var _a;\n  const currentTabindex = (_a = element.getAttribute(\"tabindex\")) != null ? _a : \"\";\n  element.setAttribute(\"data-tabindex\", currentTabindex);\n  element.setAttribute(\"tabindex\", \"-1\");\n}\nfunction disableFocusIn(container, includeContainer) {\n  const tabbableElements = getAllTabbableIn(container, includeContainer);\n  for (const element of tabbableElements) {\n    disableFocus(element);\n  }\n}\nfunction restoreFocusIn(container) {\n  const elements = container.querySelectorAll(\"[data-tabindex]\");\n  const restoreTabIndex = (element) => {\n    const tabindex = element.getAttribute(\"data-tabindex\");\n    element.removeAttribute(\"data-tabindex\");\n    if (tabindex) {\n      element.setAttribute(\"tabindex\", tabindex);\n    } else {\n      element.removeAttribute(\"tabindex\");\n    }\n  };\n  if (container.hasAttribute(\"data-tabindex\")) {\n    restoreTabIndex(container);\n  }\n  for (const element of elements) {\n    restoreTabIndex(element);\n  }\n}\nfunction focusIntoView(element, options) {\n  if (!(\"scrollIntoView\" in element)) {\n    element.focus();\n  } else {\n    element.focus({ preventScroll: true });\n    element.scrollIntoView(__spreadValues({ block: \"nearest\", inline: \"nearest\" }, options));\n  }\n}\nexport {\n  disableFocus,\n  disableFocusIn,\n  focusIfNeeded,\n  focusIntoView,\n  getAllFocusable,\n  getAllFocusableIn,\n  getAllTabbable,\n  getAllTabbableIn,\n  getClosestFocusable,\n  getFirstFocusable,\n  getFirstFocusableIn,\n  getFirstTabbable,\n  getFirstTabbableIn,\n  getLastTabbable,\n  getLastTabbableIn,\n  getNextTabbable,\n  getNextTabbableIn,\n  getPreviousTabbable,\n  getPreviousTabbableIn,\n  hasFocus,\n  hasFocusWithin,\n  isFocusable,\n  isTabbable,\n  restoreFocusIn\n};\n","\"use client\";\nimport {\n  FocusableContext\n} from \"./SWN3JYXT.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useEvent,\n  useMergeRefs,\n  useTagName\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/focusable/focusable.tsx\nimport { isButton } from \"@ariakit/core/utils/dom\";\nimport {\n  addGlobalEventListener,\n  isFocusEventOutside,\n  isPortalEvent,\n  isSelfTarget,\n  queueBeforeEvent\n} from \"@ariakit/core/utils/events\";\nimport {\n  focusIfNeeded,\n  getClosestFocusable,\n  hasFocus,\n  isFocusable\n} from \"@ariakit/core/utils/focus\";\nimport {\n  disabledFromProps,\n  removeUndefinedValues\n} from \"@ariakit/core/utils/misc\";\nimport { isSafari } from \"@ariakit/core/utils/platform\";\nimport { useContext, useEffect, useMemo, useRef, useState } from \"react\";\nvar TagName = \"div\";\nvar isSafariBrowser = isSafari();\nvar alwaysFocusVisibleInputTypes = [\n  \"text\",\n  \"search\",\n  \"url\",\n  \"tel\",\n  \"email\",\n  \"password\",\n  \"number\",\n  \"date\",\n  \"month\",\n  \"week\",\n  \"time\",\n  \"datetime\",\n  \"datetime-local\"\n];\nvar safariFocusAncestorSymbol = Symbol(\"safariFocusAncestor\");\nfunction isSafariFocusAncestor(element) {\n  if (!element) return false;\n  return !!element[safariFocusAncestorSymbol];\n}\nfunction markSafariFocusAncestor(element, value) {\n  if (!element) return;\n  element[safariFocusAncestorSymbol] = value;\n}\nfunction isAlwaysFocusVisible(element) {\n  const { tagName, readOnly, type } = element;\n  if (tagName === \"TEXTAREA\" && !readOnly) return true;\n  if (tagName === \"SELECT\" && !readOnly) return true;\n  if (tagName === \"INPUT\" && !readOnly) {\n    return alwaysFocusVisibleInputTypes.includes(type);\n  }\n  if (element.isContentEditable) return true;\n  const role = element.getAttribute(\"role\");\n  if (role === \"combobox\" && element.dataset.name) {\n    return true;\n  }\n  return false;\n}\nfunction getLabels(element) {\n  if (\"labels\" in element) {\n    return element.labels;\n  }\n  return null;\n}\nfunction isNativeCheckboxOrRadio(element) {\n  const tagName = element.tagName.toLowerCase();\n  if (tagName === \"input\" && element.type) {\n    return element.type === \"radio\" || element.type === \"checkbox\";\n  }\n  return false;\n}\nfunction isNativeTabbable(tagName) {\n  if (!tagName) return true;\n  return tagName === \"button\" || tagName === \"summary\" || tagName === \"input\" || tagName === \"select\" || tagName === \"textarea\" || tagName === \"a\";\n}\nfunction supportsDisabledAttribute(tagName) {\n  if (!tagName) return true;\n  return tagName === \"button\" || tagName === \"input\" || tagName === \"select\" || tagName === \"textarea\";\n}\nfunction getTabIndex(focusable, trulyDisabled, nativeTabbable, supportsDisabled, tabIndexProp) {\n  if (!focusable) {\n    return tabIndexProp;\n  }\n  if (trulyDisabled) {\n    if (nativeTabbable && !supportsDisabled) {\n      return -1;\n    }\n    return;\n  }\n  if (nativeTabbable) {\n    return tabIndexProp;\n  }\n  return tabIndexProp || 0;\n}\nfunction useDisableEvent(onEvent, disabled) {\n  return useEvent((event) => {\n    onEvent == null ? void 0 : onEvent(event);\n    if (event.defaultPrevented) return;\n    if (disabled) {\n      event.stopPropagation();\n      event.preventDefault();\n    }\n  });\n}\nvar hasInstalledGlobalEventListeners = false;\nvar isKeyboardModality = true;\nfunction onGlobalMouseDown(event) {\n  const target = event.target;\n  if (target && \"hasAttribute\" in target) {\n    if (!target.hasAttribute(\"data-focus-visible\")) {\n      isKeyboardModality = false;\n    }\n  }\n}\nfunction onGlobalKeyDown(event) {\n  if (event.metaKey) return;\n  if (event.ctrlKey) return;\n  if (event.altKey) return;\n  isKeyboardModality = true;\n}\nvar useFocusable = createHook(\n  function useFocusable2(_a) {\n    var _b = _a, {\n      focusable = true,\n      accessibleWhenDisabled,\n      autoFocus,\n      onFocusVisible\n    } = _b, props = __objRest(_b, [\n      \"focusable\",\n      \"accessibleWhenDisabled\",\n      \"autoFocus\",\n      \"onFocusVisible\"\n    ]);\n    const ref = useRef(null);\n    useEffect(() => {\n      if (!focusable) return;\n      if (hasInstalledGlobalEventListeners) return;\n      addGlobalEventListener(\"mousedown\", onGlobalMouseDown, true);\n      addGlobalEventListener(\"keydown\", onGlobalKeyDown, true);\n      hasInstalledGlobalEventListeners = true;\n    }, [focusable]);\n    if (isSafariBrowser) {\n      useEffect(() => {\n        if (!focusable) return;\n        const element = ref.current;\n        if (!element) return;\n        if (!isNativeCheckboxOrRadio(element)) return;\n        const labels = getLabels(element);\n        if (!labels) return;\n        const onMouseUp = () => queueMicrotask(() => element.focus());\n        for (const label of labels) {\n          label.addEventListener(\"mouseup\", onMouseUp);\n        }\n        return () => {\n          for (const label of labels) {\n            label.removeEventListener(\"mouseup\", onMouseUp);\n          }\n        };\n      }, [focusable]);\n    }\n    const disabled = focusable && disabledFromProps(props);\n    const trulyDisabled = !!disabled && !accessibleWhenDisabled;\n    const [focusVisible, setFocusVisible] = useState(false);\n    useEffect(() => {\n      if (!focusable) return;\n      if (trulyDisabled && focusVisible) {\n        setFocusVisible(false);\n      }\n    }, [focusable, trulyDisabled, focusVisible]);\n    useEffect(() => {\n      if (!focusable) return;\n      if (!focusVisible) return;\n      const element = ref.current;\n      if (!element) return;\n      if (typeof IntersectionObserver === \"undefined\") return;\n      const observer = new IntersectionObserver(() => {\n        if (!isFocusable(element)) {\n          setFocusVisible(false);\n        }\n      });\n      observer.observe(element);\n      return () => observer.disconnect();\n    }, [focusable, focusVisible]);\n    const onKeyPressCapture = useDisableEvent(\n      props.onKeyPressCapture,\n      disabled\n    );\n    const onMouseDownCapture = useDisableEvent(\n      props.onMouseDownCapture,\n      disabled\n    );\n    const onClickCapture = useDisableEvent(props.onClickCapture, disabled);\n    const onMouseDownProp = props.onMouseDown;\n    const onMouseDown = useEvent((event) => {\n      onMouseDownProp == null ? void 0 : onMouseDownProp(event);\n      if (event.defaultPrevented) return;\n      if (!focusable) return;\n      const element = event.currentTarget;\n      if (!isSafariBrowser) return;\n      if (isPortalEvent(event)) return;\n      if (!isButton(element) && !isNativeCheckboxOrRadio(element)) return;\n      let receivedFocus = false;\n      const onFocus = () => {\n        receivedFocus = true;\n      };\n      const options = { capture: true, once: true };\n      element.addEventListener(\"focusin\", onFocus, options);\n      const focusableContainer = getClosestFocusable(element.parentElement);\n      markSafariFocusAncestor(focusableContainer, true);\n      queueBeforeEvent(element, \"mouseup\", () => {\n        element.removeEventListener(\"focusin\", onFocus, true);\n        markSafariFocusAncestor(focusableContainer, false);\n        if (receivedFocus) return;\n        focusIfNeeded(element);\n      });\n    });\n    const handleFocusVisible = (event, currentTarget) => {\n      if (currentTarget) {\n        event.currentTarget = currentTarget;\n      }\n      if (!focusable) return;\n      const element = event.currentTarget;\n      if (!element) return;\n      if (!hasFocus(element)) return;\n      onFocusVisible == null ? void 0 : onFocusVisible(event);\n      if (event.defaultPrevented) return;\n      element.dataset.focusVisible = \"true\";\n      setFocusVisible(true);\n    };\n    const onKeyDownCaptureProp = props.onKeyDownCapture;\n    const onKeyDownCapture = useEvent((event) => {\n      onKeyDownCaptureProp == null ? void 0 : onKeyDownCaptureProp(event);\n      if (event.defaultPrevented) return;\n      if (!focusable) return;\n      if (focusVisible) return;\n      if (event.metaKey) return;\n      if (event.altKey) return;\n      if (event.ctrlKey) return;\n      if (!isSelfTarget(event)) return;\n      const element = event.currentTarget;\n      const applyFocusVisible = () => handleFocusVisible(event, element);\n      queueBeforeEvent(element, \"focusout\", applyFocusVisible);\n    });\n    const onFocusCaptureProp = props.onFocusCapture;\n    const onFocusCapture = useEvent((event) => {\n      onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event);\n      if (event.defaultPrevented) return;\n      if (!focusable) return;\n      if (!isSelfTarget(event)) {\n        setFocusVisible(false);\n        return;\n      }\n      const element = event.currentTarget;\n      const applyFocusVisible = () => handleFocusVisible(event, element);\n      if (isKeyboardModality || isAlwaysFocusVisible(event.target)) {\n        queueBeforeEvent(event.target, \"focusout\", applyFocusVisible);\n      } else {\n        setFocusVisible(false);\n      }\n    });\n    const onBlurProp = props.onBlur;\n    const onBlur = useEvent((event) => {\n      onBlurProp == null ? void 0 : onBlurProp(event);\n      if (!focusable) return;\n      if (!isFocusEventOutside(event)) return;\n      event.currentTarget.removeAttribute(\"data-focus-visible\");\n      setFocusVisible(false);\n    });\n    const autoFocusOnShow = useContext(FocusableContext);\n    const autoFocusRef = useEvent((element) => {\n      if (!focusable) return;\n      if (!autoFocus) return;\n      if (!element) return;\n      if (!autoFocusOnShow) return;\n      queueMicrotask(() => {\n        if (hasFocus(element)) return;\n        if (!isFocusable(element)) return;\n        element.focus();\n      });\n    });\n    const tagName = useTagName(ref);\n    const nativeTabbable = focusable && isNativeTabbable(tagName);\n    const supportsDisabled = focusable && supportsDisabledAttribute(tagName);\n    const styleProp = props.style;\n    const style = useMemo(() => {\n      if (trulyDisabled) {\n        return __spreadValues({ pointerEvents: \"none\" }, styleProp);\n      }\n      return styleProp;\n    }, [trulyDisabled, styleProp]);\n    props = __spreadProps(__spreadValues({\n      \"data-focus-visible\": focusable && focusVisible || void 0,\n      \"data-autofocus\": autoFocus || void 0,\n      \"aria-disabled\": disabled || void 0\n    }, props), {\n      ref: useMergeRefs(ref, autoFocusRef, props.ref),\n      style,\n      tabIndex: getTabIndex(\n        focusable,\n        trulyDisabled,\n        nativeTabbable,\n        supportsDisabled,\n        props.tabIndex\n      ),\n      disabled: supportsDisabled && trulyDisabled ? true : void 0,\n      // TODO: Test Focusable contentEditable.\n      contentEditable: disabled ? void 0 : props.contentEditable,\n      onKeyPressCapture,\n      onClickCapture,\n      onMouseDownCapture,\n      onMouseDown,\n      onKeyDownCapture,\n      onFocusCapture,\n      onBlur\n    });\n    return removeUndefinedValues(props);\n  }\n);\nvar Focusable = forwardRef(function Focusable2(props) {\n  const htmlProps = useFocusable(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  isSafariFocusAncestor,\n  useFocusable,\n  Focusable\n};\n","\"use client\";\nimport {\n  useFocusable\n} from \"./OE2EFRVA.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useEvent,\n  useMergeRefs,\n  useMetadataProps\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/command/command.tsx\nimport { isButton, isTextField } from \"@ariakit/core/utils/dom\";\nimport {\n  fireClickEvent,\n  isSelfTarget,\n  queueBeforeEvent\n} from \"@ariakit/core/utils/events\";\nimport { disabledFromProps } from \"@ariakit/core/utils/misc\";\nimport { isFirefox } from \"@ariakit/core/utils/platform\";\nimport { useEffect, useRef, useState } from \"react\";\nvar TagName = \"button\";\nfunction isNativeClick(event) {\n  if (!event.isTrusted) return false;\n  const element = event.currentTarget;\n  if (event.key === \"Enter\") {\n    return isButton(element) || element.tagName === \"SUMMARY\" || element.tagName === \"A\";\n  }\n  if (event.key === \" \") {\n    return isButton(element) || element.tagName === \"SUMMARY\" || element.tagName === \"INPUT\" || element.tagName === \"SELECT\";\n  }\n  return false;\n}\nvar symbol = Symbol(\"command\");\nvar useCommand = createHook(\n  function useCommand2(_a) {\n    var _b = _a, { clickOnEnter = true, clickOnSpace = true } = _b, props = __objRest(_b, [\"clickOnEnter\", \"clickOnSpace\"]);\n    const ref = useRef(null);\n    const [isNativeButton, setIsNativeButton] = useState(false);\n    useEffect(() => {\n      if (!ref.current) return;\n      setIsNativeButton(isButton(ref.current));\n    }, []);\n    const [active, setActive] = useState(false);\n    const activeRef = useRef(false);\n    const disabled = disabledFromProps(props);\n    const [isDuplicate, metadataProps] = useMetadataProps(props, symbol, true);\n    const onKeyDownProp = props.onKeyDown;\n    const onKeyDown = useEvent((event) => {\n      onKeyDownProp == null ? void 0 : onKeyDownProp(event);\n      const element = event.currentTarget;\n      if (event.defaultPrevented) return;\n      if (isDuplicate) return;\n      if (disabled) return;\n      if (!isSelfTarget(event)) return;\n      if (isTextField(element)) return;\n      if (element.isContentEditable) return;\n      const isEnter = clickOnEnter && event.key === \"Enter\";\n      const isSpace = clickOnSpace && event.key === \" \";\n      const shouldPreventEnter = event.key === \"Enter\" && !clickOnEnter;\n      const shouldPreventSpace = event.key === \" \" && !clickOnSpace;\n      if (shouldPreventEnter || shouldPreventSpace) {\n        event.preventDefault();\n        return;\n      }\n      if (isEnter || isSpace) {\n        const nativeClick = isNativeClick(event);\n        if (isEnter) {\n          if (!nativeClick) {\n            event.preventDefault();\n            const _a2 = event, { view } = _a2, eventInit = __objRest(_a2, [\"view\"]);\n            const click = () => fireClickEvent(element, eventInit);\n            if (isFirefox()) {\n              queueBeforeEvent(element, \"keyup\", click);\n            } else {\n              queueMicrotask(click);\n            }\n          }\n        } else if (isSpace) {\n          activeRef.current = true;\n          if (!nativeClick) {\n            event.preventDefault();\n            setActive(true);\n          }\n        }\n      }\n    });\n    const onKeyUpProp = props.onKeyUp;\n    const onKeyUp = useEvent((event) => {\n      onKeyUpProp == null ? void 0 : onKeyUpProp(event);\n      if (event.defaultPrevented) return;\n      if (isDuplicate) return;\n      if (disabled) return;\n      if (event.metaKey) return;\n      const isSpace = clickOnSpace && event.key === \" \";\n      if (activeRef.current && isSpace) {\n        activeRef.current = false;\n        if (!isNativeClick(event)) {\n          event.preventDefault();\n          setActive(false);\n          const element = event.currentTarget;\n          const _a2 = event, { view } = _a2, eventInit = __objRest(_a2, [\"view\"]);\n          queueMicrotask(() => fireClickEvent(element, eventInit));\n        }\n      }\n    });\n    props = __spreadProps(__spreadValues(__spreadValues({\n      \"data-active\": active || void 0,\n      type: isNativeButton ? \"button\" : void 0\n    }, metadataProps), props), {\n      ref: useMergeRefs(ref, props.ref),\n      onKeyDown,\n      onKeyUp\n    });\n    props = useFocusable(props);\n    return props;\n  }\n);\nvar Command = forwardRef(function Command2(props) {\n  const htmlProps = useCommand(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useCommand,\n  Command\n};\n","\"use client\";\nimport {\n  applyState,\n  chain,\n  getKeys,\n  hasOwnProperty,\n  invariant,\n  noop,\n  omit,\n  pick\n} from \"./PBFD2E7P.js\";\nimport {\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/utils/store.ts\nfunction getInternal(store, key) {\n  const internals = store.__unstableInternals;\n  invariant(internals, \"Invalid store\");\n  return internals[key];\n}\nfunction createStore(initialState, ...stores) {\n  let state = initialState;\n  let prevStateBatch = state;\n  let lastUpdate = Symbol();\n  let destroy = noop;\n  const instances = /* @__PURE__ */ new Set();\n  const updatedKeys = /* @__PURE__ */ new Set();\n  const setups = /* @__PURE__ */ new Set();\n  const listeners = /* @__PURE__ */ new Set();\n  const batchListeners = /* @__PURE__ */ new Set();\n  const disposables = /* @__PURE__ */ new WeakMap();\n  const listenerKeys = /* @__PURE__ */ new WeakMap();\n  const storeSetup = (callback) => {\n    setups.add(callback);\n    return () => setups.delete(callback);\n  };\n  const storeInit = () => {\n    const initialized = instances.size;\n    const instance = Symbol();\n    instances.add(instance);\n    const maybeDestroy = () => {\n      instances.delete(instance);\n      if (instances.size) return;\n      destroy();\n    };\n    if (initialized) return maybeDestroy;\n    const desyncs = getKeys(state).map(\n      (key) => chain(\n        ...stores.map((store) => {\n          var _a;\n          const storeState = (_a = store == null ? void 0 : store.getState) == null ? void 0 : _a.call(store);\n          if (!storeState) return;\n          if (!hasOwnProperty(storeState, key)) return;\n          return sync(store, [key], (state2) => {\n            setState(\n              key,\n              state2[key],\n              // @ts-expect-error - Not public API. This is just to prevent\n              // infinite loops.\n              true\n            );\n          });\n        })\n      )\n    );\n    const teardowns = [];\n    for (const setup2 of setups) {\n      teardowns.push(setup2());\n    }\n    const cleanups = stores.map(init);\n    destroy = chain(...desyncs, ...teardowns, ...cleanups);\n    return maybeDestroy;\n  };\n  const sub = (keys, listener, set = listeners) => {\n    set.add(listener);\n    listenerKeys.set(listener, keys);\n    return () => {\n      var _a;\n      (_a = disposables.get(listener)) == null ? void 0 : _a();\n      disposables.delete(listener);\n      listenerKeys.delete(listener);\n      set.delete(listener);\n    };\n  };\n  const storeSubscribe = (keys, listener) => sub(keys, listener);\n  const storeSync = (keys, listener) => {\n    disposables.set(listener, listener(state, state));\n    return sub(keys, listener);\n  };\n  const storeBatch = (keys, listener) => {\n    disposables.set(listener, listener(state, prevStateBatch));\n    return sub(keys, listener, batchListeners);\n  };\n  const storePick = (keys) => createStore(pick(state, keys), finalStore);\n  const storeOmit = (keys) => createStore(omit(state, keys), finalStore);\n  const getState = () => state;\n  const setState = (key, value, fromStores = false) => {\n    var _a;\n    if (!hasOwnProperty(state, key)) return;\n    const nextValue = applyState(value, state[key]);\n    if (nextValue === state[key]) return;\n    if (!fromStores) {\n      for (const store of stores) {\n        (_a = store == null ? void 0 : store.setState) == null ? void 0 : _a.call(store, key, nextValue);\n      }\n    }\n    const prevState = state;\n    state = __spreadProps(__spreadValues({}, state), { [key]: nextValue });\n    const thisUpdate = Symbol();\n    lastUpdate = thisUpdate;\n    updatedKeys.add(key);\n    const run = (listener, prev, uKeys) => {\n      var _a2;\n      const keys = listenerKeys.get(listener);\n      const updated = (k) => uKeys ? uKeys.has(k) : k === key;\n      if (!keys || keys.some(updated)) {\n        (_a2 = disposables.get(listener)) == null ? void 0 : _a2();\n        disposables.set(listener, listener(state, prev));\n      }\n    };\n    for (const listener of listeners) {\n      run(listener, prevState);\n    }\n    queueMicrotask(() => {\n      if (lastUpdate !== thisUpdate) return;\n      const snapshot = state;\n      for (const listener of batchListeners) {\n        run(listener, prevStateBatch, updatedKeys);\n      }\n      prevStateBatch = snapshot;\n      updatedKeys.clear();\n    });\n  };\n  const finalStore = {\n    getState,\n    setState,\n    __unstableInternals: {\n      setup: storeSetup,\n      init: storeInit,\n      subscribe: storeSubscribe,\n      sync: storeSync,\n      batch: storeBatch,\n      pick: storePick,\n      omit: storeOmit\n    }\n  };\n  return finalStore;\n}\nfunction setup(store, ...args) {\n  if (!store) return;\n  return getInternal(store, \"setup\")(...args);\n}\nfunction init(store, ...args) {\n  if (!store) return;\n  return getInternal(store, \"init\")(...args);\n}\nfunction subscribe(store, ...args) {\n  if (!store) return;\n  return getInternal(store, \"subscribe\")(...args);\n}\nfunction sync(store, ...args) {\n  if (!store) return;\n  return getInternal(store, \"sync\")(...args);\n}\nfunction batch(store, ...args) {\n  if (!store) return;\n  return getInternal(store, \"batch\")(...args);\n}\nfunction omit2(store, ...args) {\n  if (!store) return;\n  return getInternal(store, \"omit\")(...args);\n}\nfunction pick2(store, ...args) {\n  if (!store) return;\n  return getInternal(store, \"pick\")(...args);\n}\nfunction mergeStore(...stores) {\n  const initialState = stores.reduce((state, store2) => {\n    var _a;\n    const nextState = (_a = store2 == null ? void 0 : store2.getState) == null ? void 0 : _a.call(store2);\n    if (!nextState) return state;\n    return Object.assign(state, nextState);\n  }, {});\n  const store = createStore(initialState, ...stores);\n  return Object.assign({}, ...stores, store);\n}\nfunction throwOnConflictingProps(props, store) {\n  if (process.env.NODE_ENV === \"production\") return;\n  if (!store) return;\n  const defaultKeys = Object.entries(props).filter(([key, value]) => key.startsWith(\"default\") && value !== void 0).map(([key]) => {\n    var _a;\n    const stateKey = key.replace(\"default\", \"\");\n    return `${((_a = stateKey[0]) == null ? void 0 : _a.toLowerCase()) || \"\"}${stateKey.slice(1)}`;\n  });\n  if (!defaultKeys.length) return;\n  const storeState = store.getState();\n  const conflictingProps = defaultKeys.filter(\n    (key) => hasOwnProperty(storeState, key)\n  );\n  if (!conflictingProps.length) return;\n  throw new Error(\n    `Passing a store prop in conjunction with a default state is not supported.\n\nconst store = useSelectStore();\n<SelectProvider store={store} defaultValue=\"Apple\" />\n                ^             ^\n\nInstead, pass the default state to the topmost store:\n\nconst store = useSelectStore({ defaultValue: \"Apple\" });\n<SelectProvider store={store} />\n\nSee https://github.com/ariakit/ariakit/pull/2745 for more details.\n\nIf there's a particular need for this, please submit a feature request at https://github.com/ariakit/ariakit\n`\n  );\n}\n\nexport {\n  createStore,\n  setup,\n  init,\n  subscribe,\n  sync,\n  batch,\n  omit2 as omit,\n  pick2 as pick,\n  mergeStore,\n  throwOnConflictingProps\n};\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n  useState = React.useState,\n  useEffect = React.useEffect,\n  useLayoutEffect = React.useLayoutEffect,\n  useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n  var value = getSnapshot(),\n    _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n    inst = _useState[0].inst,\n    forceUpdate = _useState[1];\n  useLayoutEffect(\n    function () {\n      inst.value = value;\n      inst.getSnapshot = getSnapshot;\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n    },\n    [subscribe, value, getSnapshot]\n  );\n  useEffect(\n    function () {\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      return subscribe(function () {\n        checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      });\n    },\n    [subscribe]\n  );\n  useDebugValue(value);\n  return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n  return getSnapshot();\n}\nvar shim =\n  \"undefined\" === typeof window ||\n  \"undefined\" === typeof window.document ||\n  \"undefined\" === typeof window.document.createElement\n    ? useSyncExternalStore$1\n    : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n  void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n  (function () {\n    function is(x, y) {\n      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n    }\n    function useSyncExternalStore$2(subscribe, getSnapshot) {\n      didWarnOld18Alpha ||\n        void 0 === React.startTransition ||\n        ((didWarnOld18Alpha = !0),\n        console.error(\n          \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n        ));\n      var value = getSnapshot();\n      if (!didWarnUncachedGetSnapshot) {\n        var cachedValue = getSnapshot();\n        objectIs(value, cachedValue) ||\n          (console.error(\n            \"The result of getSnapshot should be cached to avoid an infinite loop\"\n          ),\n          (didWarnUncachedGetSnapshot = !0));\n      }\n      cachedValue = useState({\n        inst: { value: value, getSnapshot: getSnapshot }\n      });\n      var inst = cachedValue[0].inst,\n        forceUpdate = cachedValue[1];\n      useLayoutEffect(\n        function () {\n          inst.value = value;\n          inst.getSnapshot = getSnapshot;\n          checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n        },\n        [subscribe, value, getSnapshot]\n      );\n      useEffect(\n        function () {\n          checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n          return subscribe(function () {\n            checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n          });\n        },\n        [subscribe]\n      );\n      useDebugValue(value);\n      return value;\n    }\n    function checkIfSnapshotChanged(inst) {\n      var latestGetSnapshot = inst.getSnapshot;\n      inst = inst.value;\n      try {\n        var nextValue = latestGetSnapshot();\n        return !objectIs(inst, nextValue);\n      } catch (error) {\n        return !0;\n      }\n    }\n    function useSyncExternalStore$1(subscribe, getSnapshot) {\n      return getSnapshot();\n    }\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n    var React = require(\"react\"),\n      objectIs = \"function\" === typeof Object.is ? Object.is : is,\n      useState = React.useState,\n      useEffect = React.useEffect,\n      useLayoutEffect = React.useLayoutEffect,\n      useDebugValue = React.useDebugValue,\n      didWarnOld18Alpha = !1,\n      didWarnUncachedGetSnapshot = !1,\n      shim =\n        \"undefined\" === typeof window ||\n        \"undefined\" === typeof window.document ||\n        \"undefined\" === typeof window.document.createElement\n          ? useSyncExternalStore$1\n          : useSyncExternalStore$2;\n    exports.useSyncExternalStore =\n      void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n  })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","\"use client\";\nimport {\n  useEvent,\n  useLiveRef,\n  useSafeLayoutEffect\n} from \"./5GGHRIN3.js\";\nimport {\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/utils/store.tsx\nimport { hasOwnProperty, identity } from \"@ariakit/core/utils/misc\";\nimport { batch, init, subscribe, sync } from \"@ariakit/core/utils/store\";\nimport * as React from \"react\";\nimport useSyncExternalStoreExports from \"use-sync-external-store/shim/index.js\";\nvar { useSyncExternalStore } = useSyncExternalStoreExports;\nvar noopSubscribe = () => () => {\n};\nfunction useStoreState(store, keyOrSelector = identity) {\n  const storeSubscribe = React.useCallback(\n    (callback) => {\n      if (!store) return noopSubscribe();\n      return subscribe(store, null, callback);\n    },\n    [store]\n  );\n  const getSnapshot = () => {\n    const key = typeof keyOrSelector === \"string\" ? keyOrSelector : null;\n    const selector = typeof keyOrSelector === \"function\" ? keyOrSelector : null;\n    const state = store == null ? void 0 : store.getState();\n    if (selector) return selector(state);\n    if (!state) return;\n    if (!key) return;\n    if (!hasOwnProperty(state, key)) return;\n    return state[key];\n  };\n  return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot);\n}\nfunction useStoreStateObject(store, object) {\n  const objRef = React.useRef(\n    {}\n  );\n  const storeSubscribe = React.useCallback(\n    (callback) => {\n      if (!store) return noopSubscribe();\n      return subscribe(store, null, callback);\n    },\n    [store]\n  );\n  const getSnapshot = () => {\n    const state = store == null ? void 0 : store.getState();\n    let updated = false;\n    const obj = objRef.current;\n    for (const prop in object) {\n      const keyOrSelector = object[prop];\n      if (typeof keyOrSelector === \"function\") {\n        const value = keyOrSelector(state);\n        if (value !== obj[prop]) {\n          obj[prop] = value;\n          updated = true;\n        }\n      }\n      if (typeof keyOrSelector === \"string\") {\n        if (!state) continue;\n        if (!hasOwnProperty(state, keyOrSelector)) continue;\n        const value = state[keyOrSelector];\n        if (value !== obj[prop]) {\n          obj[prop] = value;\n          updated = true;\n        }\n      }\n    }\n    if (updated) {\n      objRef.current = __spreadValues({}, obj);\n    }\n    return objRef.current;\n  };\n  return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot);\n}\nfunction useStoreProps(store, props, key, setKey) {\n  const value = hasOwnProperty(props, key) ? props[key] : void 0;\n  const setValue = setKey ? props[setKey] : void 0;\n  const propsRef = useLiveRef({ value, setValue });\n  useSafeLayoutEffect(() => {\n    return sync(store, [key], (state, prev) => {\n      const { value: value2, setValue: setValue2 } = propsRef.current;\n      if (!setValue2) return;\n      if (state[key] === prev[key]) return;\n      if (state[key] === value2) return;\n      setValue2(state[key]);\n    });\n  }, [store, key]);\n  useSafeLayoutEffect(() => {\n    if (value === void 0) return;\n    store.setState(key, value);\n    return batch(store, [key], () => {\n      if (value === void 0) return;\n      store.setState(key, value);\n    });\n  });\n}\nfunction useStore(createStore, props) {\n  const [store, setStore] = React.useState(() => createStore(props));\n  useSafeLayoutEffect(() => init(store), [store]);\n  const useState2 = React.useCallback(\n    (keyOrSelector) => useStoreState(store, keyOrSelector),\n    [store]\n  );\n  const memoizedStore = React.useMemo(\n    () => __spreadProps(__spreadValues({}, store), { useState: useState2 }),\n    [store, useState2]\n  );\n  const updateStore = useEvent(() => {\n    setStore((store2) => createStore(__spreadValues(__spreadValues({}, props), store2.getState())));\n  });\n  return [memoizedStore, updateStore];\n}\n\nexport {\n  useStoreState,\n  useStoreStateObject,\n  useStoreProps,\n  useStore\n};\n","\"use client\";\nimport {\n  focusSilently,\n  getEnabledItem,\n  isItem,\n  selectTextField\n} from \"./5VQZOHHZ.js\";\nimport {\n  useCollectionItem\n} from \"./Y62RTBST.js\";\nimport {\n  CompositeItemContext,\n  CompositeRowContext,\n  useCompositeContext\n} from \"./APTFW6PT.js\";\nimport {\n  useCommand\n} from \"./2W3RN7C5.js\";\nimport {\n  useStoreStateObject\n} from \"./RTNCFSKZ.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef,\n  memo\n} from \"./VOQWLFSQ.js\";\nimport {\n  useBooleanEvent,\n  useEvent,\n  useId,\n  useMergeRefs,\n  useWrapElement\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/composite/composite-item.tsx\nimport {\n  getScrollingElement,\n  getTextboxSelection,\n  getTextboxValue,\n  isButton,\n  isTextbox,\n  isTextField\n} from \"@ariakit/core/utils/dom\";\nimport { isPortalEvent, isSelfTarget } from \"@ariakit/core/utils/events\";\nimport {\n  disabledFromProps,\n  removeUndefinedValues\n} from \"@ariakit/core/utils/misc\";\nimport { isSafari } from \"@ariakit/core/utils/platform\";\nimport { useCallback, useContext, useMemo, useRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TagName = \"button\";\nfunction isEditableElement(element) {\n  if (isTextbox(element)) return true;\n  return element.tagName === \"INPUT\" && !isButton(element);\n}\nfunction getNextPageOffset(scrollingElement, pageUp = false) {\n  const height = scrollingElement.clientHeight;\n  const { top } = scrollingElement.getBoundingClientRect();\n  const pageSize = Math.max(height * 0.875, height - 40) * 1.5;\n  const pageOffset = pageUp ? height - pageSize + top : pageSize + top;\n  if (scrollingElement.tagName === \"HTML\") {\n    return pageOffset + scrollingElement.scrollTop;\n  }\n  return pageOffset;\n}\nfunction getItemOffset(itemElement, pageUp = false) {\n  const { top } = itemElement.getBoundingClientRect();\n  if (pageUp) {\n    return top + itemElement.clientHeight;\n  }\n  return top;\n}\nfunction findNextPageItemId(element, store, next, pageUp = false) {\n  var _a;\n  if (!store) return;\n  if (!next) return;\n  const { renderedItems } = store.getState();\n  const scrollingElement = getScrollingElement(element);\n  if (!scrollingElement) return;\n  const nextPageOffset = getNextPageOffset(scrollingElement, pageUp);\n  let id;\n  let prevDifference;\n  for (let i = 0; i < renderedItems.length; i += 1) {\n    const previousId = id;\n    id = next(i);\n    if (!id) break;\n    if (id === previousId) continue;\n    const itemElement = (_a = getEnabledItem(store, id)) == null ? void 0 : _a.element;\n    if (!itemElement) continue;\n    const itemOffset = getItemOffset(itemElement, pageUp);\n    const difference = itemOffset - nextPageOffset;\n    const absDifference = Math.abs(difference);\n    if (pageUp && difference <= 0 || !pageUp && difference >= 0) {\n      if (prevDifference !== void 0 && prevDifference < absDifference) {\n        id = previousId;\n      }\n      break;\n    }\n    prevDifference = absDifference;\n  }\n  return id;\n}\nfunction targetIsAnotherItem(event, store) {\n  if (isSelfTarget(event)) return false;\n  return isItem(store, event.target);\n}\nvar useCompositeItem = createHook(\n  function useCompositeItem2(_a) {\n    var _b = _a, {\n      store,\n      rowId: rowIdProp,\n      preventScrollOnKeyDown = false,\n      moveOnKeyPress = true,\n      tabbable = false,\n      getItem: getItemProp,\n      \"aria-setsize\": ariaSetSizeProp,\n      \"aria-posinset\": ariaPosInSetProp\n    } = _b, props = __objRest(_b, [\n      \"store\",\n      \"rowId\",\n      \"preventScrollOnKeyDown\",\n      \"moveOnKeyPress\",\n      \"tabbable\",\n      \"getItem\",\n      \"aria-setsize\",\n      \"aria-posinset\"\n    ]);\n    const context = useCompositeContext();\n    store = store || context;\n    const id = useId(props.id);\n    const ref = useRef(null);\n    const row = useContext(CompositeRowContext);\n    const disabled = disabledFromProps(props);\n    const trulyDisabled = disabled && !props.accessibleWhenDisabled;\n    const {\n      rowId,\n      baseElement,\n      isActiveItem,\n      ariaSetSize,\n      ariaPosInSet,\n      isTabbable\n    } = useStoreStateObject(store, {\n      rowId(state) {\n        if (rowIdProp) return rowIdProp;\n        if (!state) return;\n        if (!(row == null ? void 0 : row.baseElement)) return;\n        if (row.baseElement !== state.baseElement) return;\n        return row.id;\n      },\n      baseElement(state) {\n        return (state == null ? void 0 : state.baseElement) || void 0;\n      },\n      isActiveItem(state) {\n        return !!state && state.activeId === id;\n      },\n      ariaSetSize(state) {\n        if (ariaSetSizeProp != null) return ariaSetSizeProp;\n        if (!state) return;\n        if (!(row == null ? void 0 : row.ariaSetSize)) return;\n        if (row.baseElement !== state.baseElement) return;\n        return row.ariaSetSize;\n      },\n      ariaPosInSet(state) {\n        if (ariaPosInSetProp != null) return ariaPosInSetProp;\n        if (!state) return;\n        if (!(row == null ? void 0 : row.ariaPosInSet)) return;\n        if (row.baseElement !== state.baseElement) return;\n        const itemsInRow = state.renderedItems.filter(\n          (item) => item.rowId === rowId\n        );\n        return row.ariaPosInSet + itemsInRow.findIndex((item) => item.id === id);\n      },\n      isTabbable(state) {\n        if (!(state == null ? void 0 : state.renderedItems.length)) return true;\n        if (state.virtualFocus) return false;\n        if (tabbable) return true;\n        if (state.activeId === null) return false;\n        const item = store == null ? void 0 : store.item(state.activeId);\n        if (item == null ? void 0 : item.disabled) return true;\n        if (!(item == null ? void 0 : item.element)) return true;\n        return state.activeId === id;\n      }\n    });\n    const getItem = useCallback(\n      (item) => {\n        var _a2;\n        const nextItem = __spreadProps(__spreadValues({}, item), {\n          id: id || item.id,\n          rowId,\n          disabled: !!trulyDisabled,\n          children: (_a2 = item.element) == null ? void 0 : _a2.textContent\n        });\n        if (getItemProp) {\n          return getItemProp(nextItem);\n        }\n        return nextItem;\n      },\n      [id, rowId, trulyDisabled, getItemProp]\n    );\n    const onFocusProp = props.onFocus;\n    const hasFocusedComposite = useRef(false);\n    const onFocus = useEvent((event) => {\n      onFocusProp == null ? void 0 : onFocusProp(event);\n      if (event.defaultPrevented) return;\n      if (isPortalEvent(event)) return;\n      if (!id) return;\n      if (!store) return;\n      if (targetIsAnotherItem(event, store)) return;\n      const { virtualFocus, baseElement: baseElement2 } = store.getState();\n      store.setActiveId(id);\n      if (isTextbox(event.currentTarget)) {\n        selectTextField(event.currentTarget);\n      }\n      if (!virtualFocus) return;\n      if (!isSelfTarget(event)) return;\n      if (isEditableElement(event.currentTarget)) return;\n      if (!(baseElement2 == null ? void 0 : baseElement2.isConnected)) return;\n      if (isSafari() && event.currentTarget.hasAttribute(\"data-autofocus\")) {\n        event.currentTarget.scrollIntoView({\n          block: \"nearest\",\n          inline: \"nearest\"\n        });\n      }\n      hasFocusedComposite.current = true;\n      const fromComposite = event.relatedTarget === baseElement2 || isItem(store, event.relatedTarget);\n      if (fromComposite) {\n        focusSilently(baseElement2);\n      } else {\n        baseElement2.focus();\n      }\n    });\n    const onBlurCaptureProp = props.onBlurCapture;\n    const onBlurCapture = useEvent((event) => {\n      onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event);\n      if (event.defaultPrevented) return;\n      const state = store == null ? void 0 : store.getState();\n      if ((state == null ? void 0 : state.virtualFocus) && hasFocusedComposite.current) {\n        hasFocusedComposite.current = false;\n        event.preventDefault();\n        event.stopPropagation();\n      }\n    });\n    const onKeyDownProp = props.onKeyDown;\n    const preventScrollOnKeyDownProp = useBooleanEvent(preventScrollOnKeyDown);\n    const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress);\n    const onKeyDown = useEvent((event) => {\n      onKeyDownProp == null ? void 0 : onKeyDownProp(event);\n      if (event.defaultPrevented) return;\n      if (!isSelfTarget(event)) return;\n      if (!store) return;\n      const { currentTarget } = event;\n      const state = store.getState();\n      const item = store.item(id);\n      const isGrid = !!(item == null ? void 0 : item.rowId);\n      const isVertical = state.orientation !== \"horizontal\";\n      const isHorizontal = state.orientation !== \"vertical\";\n      const canHomeEnd = () => {\n        if (isGrid) return true;\n        if (isHorizontal) return true;\n        if (!state.baseElement) return true;\n        if (!isTextField(state.baseElement)) return true;\n        return false;\n      };\n      const keyMap = {\n        ArrowUp: (isGrid || isVertical) && store.up,\n        ArrowRight: (isGrid || isHorizontal) && store.next,\n        ArrowDown: (isGrid || isVertical) && store.down,\n        ArrowLeft: (isGrid || isHorizontal) && store.previous,\n        Home: () => {\n          if (!canHomeEnd()) return;\n          if (!isGrid || event.ctrlKey) {\n            return store == null ? void 0 : store.first();\n          }\n          return store == null ? void 0 : store.previous(-1);\n        },\n        End: () => {\n          if (!canHomeEnd()) return;\n          if (!isGrid || event.ctrlKey) {\n            return store == null ? void 0 : store.last();\n          }\n          return store == null ? void 0 : store.next(-1);\n        },\n        PageUp: () => {\n          return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.up, true);\n        },\n        PageDown: () => {\n          return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.down);\n        }\n      };\n      const action = keyMap[event.key];\n      if (action) {\n        if (isTextbox(currentTarget)) {\n          const selection = getTextboxSelection(currentTarget);\n          const isLeft = isHorizontal && event.key === \"ArrowLeft\";\n          const isRight = isHorizontal && event.key === \"ArrowRight\";\n          const isUp = isVertical && event.key === \"ArrowUp\";\n          const isDown = isVertical && event.key === \"ArrowDown\";\n          if (isRight || isDown) {\n            const { length: valueLength } = getTextboxValue(currentTarget);\n            if (selection.end !== valueLength) return;\n          } else if ((isLeft || isUp) && selection.start !== 0) return;\n        }\n        const nextId = action();\n        if (preventScrollOnKeyDownProp(event) || nextId !== void 0) {\n          if (!moveOnKeyPressProp(event)) return;\n          event.preventDefault();\n          store.move(nextId);\n        }\n      }\n    });\n    const providerValue = useMemo(\n      () => ({ id, baseElement }),\n      [id, baseElement]\n    );\n    props = useWrapElement(\n      props,\n      (element) => /* @__PURE__ */ jsx(CompositeItemContext.Provider, { value: providerValue, children: element }),\n      [providerValue]\n    );\n    props = __spreadProps(__spreadValues({\n      id,\n      \"data-active-item\": isActiveItem || void 0\n    }, props), {\n      ref: useMergeRefs(ref, props.ref),\n      tabIndex: isTabbable ? props.tabIndex : -1,\n      onFocus,\n      onBlurCapture,\n      onKeyDown\n    });\n    props = useCommand(props);\n    props = useCollectionItem(__spreadProps(__spreadValues({\n      store\n    }, props), {\n      getItem,\n      shouldRegisterItem: id ? props.shouldRegisterItem : false\n    }));\n    return removeUndefinedValues(__spreadProps(__spreadValues({}, props), {\n      \"aria-setsize\": ariaSetSize,\n      \"aria-posinset\": ariaPosInSet\n    }));\n  }\n);\nvar CompositeItem = memo(\n  forwardRef(function CompositeItem2(props) {\n    const htmlProps = useCompositeItem(props);\n    return createElement(TagName, htmlProps);\n  })\n);\n\nexport {\n  useCompositeItem,\n  CompositeItem\n};\n","\"use client\";\n\n// src/utils/array.ts\nfunction toArray(arg) {\n  if (Array.isArray(arg)) {\n    return arg;\n  }\n  return typeof arg !== \"undefined\" ? [arg] : [];\n}\nfunction addItemToArray(array, item, index = -1) {\n  if (!(index in array)) {\n    return [...array, item];\n  }\n  return [...array.slice(0, index), item, ...array.slice(index)];\n}\nfunction flatten2DArray(array) {\n  const flattened = [];\n  for (const row of array) {\n    flattened.push(...row);\n  }\n  return flattened;\n}\nfunction reverseArray(array) {\n  return array.slice().reverse();\n}\n\nexport {\n  toArray,\n  addItemToArray,\n  flatten2DArray,\n  reverseArray\n};\n","\"use client\";\nimport {\n  findFirstEnabledItem,\n  getEnabledItem,\n  groupItemsByRows,\n  isItem,\n  silentlyFocused\n} from \"./5VQZOHHZ.js\";\nimport {\n  CompositeContextProvider,\n  useCompositeProviderContext\n} from \"./APTFW6PT.js\";\nimport {\n  useFocusable\n} from \"./OE2EFRVA.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useBooleanEvent,\n  useEvent,\n  useMergeRefs,\n  useSafeLayoutEffect,\n  useTransactionState,\n  useWrapElement\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/composite/composite.tsx\nimport { flatten2DArray, reverseArray } from \"@ariakit/core/utils/array\";\nimport { getActiveElement, isTextField } from \"@ariakit/core/utils/dom\";\nimport {\n  fireBlurEvent,\n  fireKeyboardEvent,\n  isSelfTarget\n} from \"@ariakit/core/utils/events\";\nimport { focusIntoView, hasFocus } from \"@ariakit/core/utils/focus\";\nimport { invariant } from \"@ariakit/core/utils/misc\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TagName = \"div\";\nfunction isGrid(items) {\n  return items.some((item) => !!item.rowId);\n}\nfunction isPrintableKey(event) {\n  const target = event.target;\n  if (target && !isTextField(target)) return false;\n  return event.key.length === 1 && !event.ctrlKey && !event.metaKey;\n}\nfunction isModifierKey(event) {\n  return event.key === \"Shift\" || event.key === \"Control\" || event.key === \"Alt\" || event.key === \"Meta\";\n}\nfunction useKeyboardEventProxy(store, onKeyboardEvent, previousElementRef) {\n  return useEvent((event) => {\n    var _a;\n    onKeyboardEvent == null ? void 0 : onKeyboardEvent(event);\n    if (event.defaultPrevented) return;\n    if (event.isPropagationStopped()) return;\n    if (!isSelfTarget(event)) return;\n    if (isModifierKey(event)) return;\n    if (isPrintableKey(event)) return;\n    const state = store.getState();\n    const activeElement = (_a = getEnabledItem(store, state.activeId)) == null ? void 0 : _a.element;\n    if (!activeElement) return;\n    const _b = event, { view } = _b, eventInit = __objRest(_b, [\"view\"]);\n    const previousElement = previousElementRef == null ? void 0 : previousElementRef.current;\n    if (activeElement !== previousElement) {\n      activeElement.focus();\n    }\n    if (!fireKeyboardEvent(activeElement, event.type, eventInit)) {\n      event.preventDefault();\n    }\n    if (event.currentTarget.contains(activeElement)) {\n      event.stopPropagation();\n    }\n  });\n}\nfunction findFirstEnabledItemInTheLastRow(items) {\n  return findFirstEnabledItem(\n    flatten2DArray(reverseArray(groupItemsByRows(items)))\n  );\n}\nfunction useScheduleFocus(store) {\n  const [scheduled, setScheduled] = useState(false);\n  const schedule = useCallback(() => setScheduled(true), []);\n  const activeItem = store.useState(\n    (state) => getEnabledItem(store, state.activeId)\n  );\n  useEffect(() => {\n    const activeElement = activeItem == null ? void 0 : activeItem.element;\n    if (!scheduled) return;\n    if (!activeElement) return;\n    setScheduled(false);\n    activeElement.focus({ preventScroll: true });\n  }, [activeItem, scheduled]);\n  return schedule;\n}\nvar useComposite = createHook(\n  function useComposite2(_a) {\n    var _b = _a, {\n      store,\n      composite = true,\n      focusOnMove = composite,\n      moveOnKeyPress = true\n    } = _b, props = __objRest(_b, [\n      \"store\",\n      \"composite\",\n      \"focusOnMove\",\n      \"moveOnKeyPress\"\n    ]);\n    const context = useCompositeProviderContext();\n    store = store || context;\n    invariant(\n      store,\n      process.env.NODE_ENV !== \"production\" && \"Composite must receive a `store` prop or be wrapped in a CompositeProvider component.\"\n    );\n    const ref = useRef(null);\n    const previousElementRef = useRef(null);\n    const scheduleFocus = useScheduleFocus(store);\n    const moves = store.useState(\"moves\");\n    const [, setBaseElement] = useTransactionState(\n      composite ? store.setBaseElement : null\n    );\n    useEffect(() => {\n      var _a2;\n      if (!store) return;\n      if (!moves) return;\n      if (!composite) return;\n      if (!focusOnMove) return;\n      const { activeId: activeId2 } = store.getState();\n      const itemElement = (_a2 = getEnabledItem(store, activeId2)) == null ? void 0 : _a2.element;\n      if (!itemElement) return;\n      focusIntoView(itemElement);\n    }, [store, moves, composite, focusOnMove]);\n    useSafeLayoutEffect(() => {\n      if (!store) return;\n      if (!moves) return;\n      if (!composite) return;\n      const { baseElement, activeId: activeId2 } = store.getState();\n      const isSelfAcive = activeId2 === null;\n      if (!isSelfAcive) return;\n      if (!baseElement) return;\n      const previousElement = previousElementRef.current;\n      previousElementRef.current = null;\n      if (previousElement) {\n        fireBlurEvent(previousElement, { relatedTarget: baseElement });\n      }\n      if (!hasFocus(baseElement)) {\n        baseElement.focus();\n      }\n    }, [store, moves, composite]);\n    const activeId = store.useState(\"activeId\");\n    const virtualFocus = store.useState(\"virtualFocus\");\n    useSafeLayoutEffect(() => {\n      var _a2;\n      if (!store) return;\n      if (!composite) return;\n      if (!virtualFocus) return;\n      const previousElement = previousElementRef.current;\n      previousElementRef.current = null;\n      if (!previousElement) return;\n      const activeElement = (_a2 = getEnabledItem(store, activeId)) == null ? void 0 : _a2.element;\n      const relatedTarget = activeElement || getActiveElement(previousElement);\n      if (relatedTarget === previousElement) return;\n      fireBlurEvent(previousElement, { relatedTarget });\n    }, [store, activeId, virtualFocus, composite]);\n    const onKeyDownCapture = useKeyboardEventProxy(\n      store,\n      props.onKeyDownCapture,\n      previousElementRef\n    );\n    const onKeyUpCapture = useKeyboardEventProxy(\n      store,\n      props.onKeyUpCapture,\n      previousElementRef\n    );\n    const onFocusCaptureProp = props.onFocusCapture;\n    const onFocusCapture = useEvent((event) => {\n      onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event);\n      if (event.defaultPrevented) return;\n      if (!store) return;\n      const { virtualFocus: virtualFocus2 } = store.getState();\n      if (!virtualFocus2) return;\n      const previousActiveElement = event.relatedTarget;\n      const isSilentlyFocused = silentlyFocused(event.currentTarget);\n      if (isSelfTarget(event) && isSilentlyFocused) {\n        event.stopPropagation();\n        previousElementRef.current = previousActiveElement;\n      }\n    });\n    const onFocusProp = props.onFocus;\n    const onFocus = useEvent((event) => {\n      onFocusProp == null ? void 0 : onFocusProp(event);\n      if (event.defaultPrevented) return;\n      if (!composite) return;\n      if (!store) return;\n      const { relatedTarget } = event;\n      const { virtualFocus: virtualFocus2 } = store.getState();\n      if (virtualFocus2) {\n        if (isSelfTarget(event) && !isItem(store, relatedTarget)) {\n          queueMicrotask(scheduleFocus);\n        }\n      } else if (isSelfTarget(event)) {\n        store.setActiveId(null);\n      }\n    });\n    const onBlurCaptureProp = props.onBlurCapture;\n    const onBlurCapture = useEvent((event) => {\n      var _a2;\n      onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event);\n      if (event.defaultPrevented) return;\n      if (!store) return;\n      const { virtualFocus: virtualFocus2, activeId: activeId2 } = store.getState();\n      if (!virtualFocus2) return;\n      const activeElement = (_a2 = getEnabledItem(store, activeId2)) == null ? void 0 : _a2.element;\n      const nextActiveElement = event.relatedTarget;\n      const nextActiveElementIsItem = isItem(store, nextActiveElement);\n      const previousElement = previousElementRef.current;\n      previousElementRef.current = null;\n      if (isSelfTarget(event) && nextActiveElementIsItem) {\n        if (nextActiveElement === activeElement) {\n          if (previousElement && previousElement !== nextActiveElement) {\n            fireBlurEvent(previousElement, event);\n          }\n        } else if (activeElement) {\n          fireBlurEvent(activeElement, event);\n        } else if (previousElement) {\n          fireBlurEvent(previousElement, event);\n        }\n        event.stopPropagation();\n      } else {\n        const targetIsItem = isItem(store, event.target);\n        if (!targetIsItem && activeElement) {\n          fireBlurEvent(activeElement, event);\n        }\n      }\n    });\n    const onKeyDownProp = props.onKeyDown;\n    const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress);\n    const onKeyDown = useEvent((event) => {\n      var _a2;\n      onKeyDownProp == null ? void 0 : onKeyDownProp(event);\n      if (event.nativeEvent.isComposing) return;\n      if (event.defaultPrevented) return;\n      if (!store) return;\n      if (!isSelfTarget(event)) return;\n      const { orientation, renderedItems, activeId: activeId2 } = store.getState();\n      const activeItem = getEnabledItem(store, activeId2);\n      if ((_a2 = activeItem == null ? void 0 : activeItem.element) == null ? void 0 : _a2.isConnected) return;\n      const isVertical = orientation !== \"horizontal\";\n      const isHorizontal = orientation !== \"vertical\";\n      const grid = isGrid(renderedItems);\n      const isHorizontalKey = event.key === \"ArrowLeft\" || event.key === \"ArrowRight\" || event.key === \"Home\" || event.key === \"End\";\n      if (isHorizontalKey && isTextField(event.currentTarget)) return;\n      const up = () => {\n        if (grid) {\n          const item = findFirstEnabledItemInTheLastRow(renderedItems);\n          return item == null ? void 0 : item.id;\n        }\n        return store == null ? void 0 : store.last();\n      };\n      const keyMap = {\n        ArrowUp: (grid || isVertical) && up,\n        ArrowRight: (grid || isHorizontal) && store.first,\n        ArrowDown: (grid || isVertical) && store.first,\n        ArrowLeft: (grid || isHorizontal) && store.last,\n        Home: store.first,\n        End: store.last,\n        PageUp: store.first,\n        PageDown: store.last\n      };\n      const action = keyMap[event.key];\n      if (action) {\n        const id = action();\n        if (id !== void 0) {\n          if (!moveOnKeyPressProp(event)) return;\n          event.preventDefault();\n          store.move(id);\n        }\n      }\n    });\n    props = useWrapElement(\n      props,\n      (element) => /* @__PURE__ */ jsx(CompositeContextProvider, { value: store, children: element }),\n      [store]\n    );\n    const activeDescendant = store.useState((state) => {\n      var _a2;\n      if (!store) return;\n      if (!composite) return;\n      if (!state.virtualFocus) return;\n      return (_a2 = getEnabledItem(store, state.activeId)) == null ? void 0 : _a2.id;\n    });\n    props = __spreadProps(__spreadValues({\n      \"aria-activedescendant\": activeDescendant\n    }, props), {\n      ref: useMergeRefs(ref, setBaseElement, props.ref),\n      onKeyDownCapture,\n      onKeyUpCapture,\n      onFocusCapture,\n      onFocus,\n      onBlurCapture,\n      onKeyDown\n    });\n    const focusable = store.useState(\n      (state) => composite && (state.virtualFocus || state.activeId === null)\n    );\n    props = useFocusable(__spreadValues({ focusable }, props));\n    return props;\n  }\n);\nvar Composite = forwardRef(function Composite2(props) {\n  const htmlProps = useComposite(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useComposite,\n  Composite\n};\n","\"use client\";\nimport {\n  createStoreContext\n} from \"./VOQWLFSQ.js\";\n\n// src/disclosure/disclosure-context.tsx\nvar ctx = createStoreContext();\nvar useDisclosureContext = ctx.useContext;\nvar useDisclosureScopedContext = ctx.useScopedContext;\nvar useDisclosureProviderContext = ctx.useProviderContext;\nvar DisclosureContextProvider = ctx.ContextProvider;\nvar DisclosureScopedContextProvider = ctx.ScopedContextProvider;\n\nexport {\n  useDisclosureContext,\n  useDisclosureScopedContext,\n  useDisclosureProviderContext,\n  DisclosureContextProvider,\n  DisclosureScopedContextProvider\n};\n","\"use client\";\nimport {\n  DisclosureContextProvider,\n  DisclosureScopedContextProvider\n} from \"./ABN76PSX.js\";\nimport {\n  createStoreContext\n} from \"./VOQWLFSQ.js\";\n\n// src/dialog/dialog-context.tsx\nimport { createContext } from \"react\";\nvar ctx = createStoreContext(\n  [DisclosureContextProvider],\n  [DisclosureScopedContextProvider]\n);\nvar useDialogContext = ctx.useContext;\nvar useDialogScopedContext = ctx.useScopedContext;\nvar useDialogProviderContext = ctx.useProviderContext;\nvar DialogContextProvider = ctx.ContextProvider;\nvar DialogScopedContextProvider = ctx.ScopedContextProvider;\nvar DialogHeadingContext = createContext(void 0);\nvar DialogDescriptionContext = createContext(void 0);\n\nexport {\n  useDialogContext,\n  useDialogScopedContext,\n  useDialogProviderContext,\n  DialogContextProvider,\n  DialogScopedContextProvider,\n  DialogHeadingContext,\n  DialogDescriptionContext\n};\n","\"use client\";\nimport {\n  DialogScopedContextProvider\n} from \"./T2AZQXQU.js\";\nimport {\n  useDisclosureProviderContext\n} from \"./ABN76PSX.js\";\nimport {\n  useStoreState\n} from \"./RTNCFSKZ.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useId,\n  useMergeRefs,\n  useSafeLayoutEffect,\n  useWrapElement\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/disclosure/disclosure-content.tsx\nimport { invariant, removeUndefinedValues } from \"@ariakit/core/utils/misc\";\nimport { useMemo, useRef, useState } from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TagName = \"div\";\nfunction afterTimeout(timeoutMs, cb) {\n  const timeoutId = setTimeout(cb, timeoutMs);\n  return () => clearTimeout(timeoutId);\n}\nfunction afterPaint(cb) {\n  let raf = requestAnimationFrame(() => {\n    raf = requestAnimationFrame(cb);\n  });\n  return () => cancelAnimationFrame(raf);\n}\nfunction parseCSSTime(...times) {\n  return times.join(\", \").split(\", \").reduce((longestTime, currentTimeString) => {\n    const multiplier = currentTimeString.endsWith(\"ms\") ? 1 : 1e3;\n    const currentTime = Number.parseFloat(currentTimeString || \"0s\") * multiplier;\n    if (currentTime > longestTime) return currentTime;\n    return longestTime;\n  }, 0);\n}\nfunction isHidden(mounted, hidden, alwaysVisible) {\n  return !alwaysVisible && hidden !== false && (!mounted || !!hidden);\n}\nvar useDisclosureContent = createHook(function useDisclosureContent2(_a) {\n  var _b = _a, { store, alwaysVisible } = _b, props = __objRest(_b, [\"store\", \"alwaysVisible\"]);\n  const context = useDisclosureProviderContext();\n  store = store || context;\n  invariant(\n    store,\n    process.env.NODE_ENV !== \"production\" && \"DisclosureContent must receive a `store` prop or be wrapped in a DisclosureProvider component.\"\n  );\n  const ref = useRef(null);\n  const id = useId(props.id);\n  const [transition, setTransition] = useState(null);\n  const open = store.useState(\"open\");\n  const mounted = store.useState(\"mounted\");\n  const animated = store.useState(\"animated\");\n  const contentElement = store.useState(\"contentElement\");\n  const otherElement = useStoreState(store.disclosure, \"contentElement\");\n  useSafeLayoutEffect(() => {\n    if (!ref.current) return;\n    store == null ? void 0 : store.setContentElement(ref.current);\n  }, [store]);\n  useSafeLayoutEffect(() => {\n    let previousAnimated;\n    store == null ? void 0 : store.setState(\"animated\", (animated2) => {\n      previousAnimated = animated2;\n      return true;\n    });\n    return () => {\n      if (previousAnimated === void 0) return;\n      store == null ? void 0 : store.setState(\"animated\", previousAnimated);\n    };\n  }, [store]);\n  useSafeLayoutEffect(() => {\n    if (!animated) return;\n    if (!(contentElement == null ? void 0 : contentElement.isConnected)) {\n      setTransition(null);\n      return;\n    }\n    return afterPaint(() => {\n      setTransition(open ? \"enter\" : mounted ? \"leave\" : null);\n    });\n  }, [animated, contentElement, open, mounted]);\n  useSafeLayoutEffect(() => {\n    if (!store) return;\n    if (!animated) return;\n    if (!transition) return;\n    if (!contentElement) return;\n    const stopAnimation = () => store == null ? void 0 : store.setState(\"animating\", false);\n    const stopAnimationSync = () => flushSync(stopAnimation);\n    if (transition === \"leave\" && open) return;\n    if (transition === \"enter\" && !open) return;\n    if (typeof animated === \"number\") {\n      const timeout2 = animated;\n      return afterTimeout(timeout2, stopAnimationSync);\n    }\n    const {\n      transitionDuration,\n      animationDuration,\n      transitionDelay,\n      animationDelay\n    } = getComputedStyle(contentElement);\n    const {\n      transitionDuration: transitionDuration2 = \"0\",\n      animationDuration: animationDuration2 = \"0\",\n      transitionDelay: transitionDelay2 = \"0\",\n      animationDelay: animationDelay2 = \"0\"\n    } = otherElement ? getComputedStyle(otherElement) : {};\n    const delay = parseCSSTime(\n      transitionDelay,\n      animationDelay,\n      transitionDelay2,\n      animationDelay2\n    );\n    const duration = parseCSSTime(\n      transitionDuration,\n      animationDuration,\n      transitionDuration2,\n      animationDuration2\n    );\n    const timeout = delay + duration;\n    if (!timeout) {\n      if (transition === \"enter\") {\n        store.setState(\"animated\", false);\n      }\n      stopAnimation();\n      return;\n    }\n    const frameRate = 1e3 / 60;\n    const maxTimeout = Math.max(timeout - frameRate, 0);\n    return afterTimeout(maxTimeout, stopAnimationSync);\n  }, [store, animated, contentElement, otherElement, open, transition]);\n  props = useWrapElement(\n    props,\n    (element) => /* @__PURE__ */ jsx(DialogScopedContextProvider, { value: store, children: element }),\n    [store]\n  );\n  const hidden = isHidden(mounted, props.hidden, alwaysVisible);\n  const styleProp = props.style;\n  const style = useMemo(() => {\n    if (hidden) {\n      return __spreadProps(__spreadValues({}, styleProp), { display: \"none\" });\n    }\n    return styleProp;\n  }, [hidden, styleProp]);\n  props = __spreadProps(__spreadValues({\n    id,\n    \"data-open\": open || void 0,\n    \"data-enter\": transition === \"enter\" || void 0,\n    \"data-leave\": transition === \"leave\" || void 0,\n    hidden\n  }, props), {\n    ref: useMergeRefs(id ? store.setContentElement : null, ref, props.ref),\n    style\n  });\n  return removeUndefinedValues(props);\n});\nvar DisclosureContentImpl = forwardRef(function DisclosureContentImpl2(props) {\n  const htmlProps = useDisclosureContent(props);\n  return createElement(TagName, htmlProps);\n});\nvar DisclosureContent = forwardRef(function DisclosureContent2(_a) {\n  var _b = _a, {\n    unmountOnHide\n  } = _b, props = __objRest(_b, [\n    \"unmountOnHide\"\n  ]);\n  const context = useDisclosureProviderContext();\n  const store = props.store || context;\n  const mounted = useStoreState(\n    store,\n    (state) => !unmountOnHide || (state == null ? void 0 : state.mounted)\n  );\n  if (mounted === false) return null;\n  return /* @__PURE__ */ jsx(DisclosureContentImpl, __spreadValues({}, props));\n});\n\nexport {\n  isHidden,\n  useDisclosureContent,\n  DisclosureContent\n};\n","\"use client\";\nimport {\n  createStore,\n  mergeStore,\n  omit,\n  setup,\n  subscribe,\n  sync,\n  throwOnConflictingProps\n} from \"./BCALMBPZ.js\";\nimport {\n  defaultValue\n} from \"./PBFD2E7P.js\";\nimport {\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/disclosure/disclosure-store.ts\nfunction createDisclosureStore(props = {}) {\n  const store = mergeStore(\n    props.store,\n    omit(props.disclosure, [\"contentElement\", \"disclosureElement\"])\n  );\n  throwOnConflictingProps(props, store);\n  const syncState = store == null ? void 0 : store.getState();\n  const open = defaultValue(\n    props.open,\n    syncState == null ? void 0 : syncState.open,\n    props.defaultOpen,\n    false\n  );\n  const animated = defaultValue(props.animated, syncState == null ? void 0 : syncState.animated, false);\n  const initialState = {\n    open,\n    animated,\n    animating: !!animated && open,\n    mounted: open,\n    contentElement: defaultValue(syncState == null ? void 0 : syncState.contentElement, null),\n    disclosureElement: defaultValue(syncState == null ? void 0 : syncState.disclosureElement, null)\n  };\n  const disclosure = createStore(initialState, store);\n  setup(\n    disclosure,\n    () => sync(disclosure, [\"animated\", \"animating\"], (state) => {\n      if (state.animated) return;\n      disclosure.setState(\"animating\", false);\n    })\n  );\n  setup(\n    disclosure,\n    () => subscribe(disclosure, [\"open\"], () => {\n      if (!disclosure.getState().animated) return;\n      disclosure.setState(\"animating\", true);\n    })\n  );\n  setup(\n    disclosure,\n    () => sync(disclosure, [\"open\", \"animating\"], (state) => {\n      disclosure.setState(\"mounted\", state.open || state.animating);\n    })\n  );\n  return __spreadProps(__spreadValues({}, disclosure), {\n    disclosure: props.disclosure,\n    setOpen: (value) => disclosure.setState(\"open\", value),\n    show: () => disclosure.setState(\"open\", true),\n    hide: () => disclosure.setState(\"open\", false),\n    toggle: () => disclosure.setState(\"open\", (open2) => !open2),\n    stopAnimation: () => disclosure.setState(\"animating\", false),\n    setContentElement: (value) => disclosure.setState(\"contentElement\", value),\n    setDisclosureElement: (value) => disclosure.setState(\"disclosureElement\", value)\n  });\n}\n\nexport {\n  createDisclosureStore\n};\n","\"use client\";\nimport {\n  useStore,\n  useStoreProps\n} from \"./RTNCFSKZ.js\";\nimport {\n  useUpdateEffect\n} from \"./5GGHRIN3.js\";\n\n// src/disclosure/disclosure-store.ts\nimport * as Core from \"@ariakit/core/disclosure/disclosure-store\";\nfunction useDisclosureStoreProps(store, update, props) {\n  useUpdateEffect(update, [props.store, props.disclosure]);\n  useStoreProps(store, props, \"open\", \"setOpen\");\n  useStoreProps(store, props, \"mounted\", \"setMounted\");\n  useStoreProps(store, props, \"animated\");\n  return Object.assign(store, { disclosure: props.disclosure });\n}\nfunction useDisclosureStore(props = {}) {\n  const [store, update] = useStore(Core.createDisclosureStore, props);\n  return useDisclosureStoreProps(store, update, props);\n}\n\nexport {\n  useDisclosureStoreProps,\n  useDisclosureStore\n};\n","\"use client\";\nimport {\n  DialogContextProvider,\n  DialogScopedContextProvider\n} from \"./T2AZQXQU.js\";\nimport {\n  createStoreContext\n} from \"./VOQWLFSQ.js\";\n\n// src/popover/popover-context.tsx\nvar ctx = createStoreContext(\n  [DialogContextProvider],\n  [DialogScopedContextProvider]\n);\nvar usePopoverContext = ctx.useContext;\nvar usePopoverScopedContext = ctx.useScopedContext;\nvar usePopoverProviderContext = ctx.useProviderContext;\nvar PopoverContextProvider = ctx.ContextProvider;\nvar PopoverScopedContextProvider = ctx.ScopedContextProvider;\n\nexport {\n  usePopoverContext,\n  usePopoverScopedContext,\n  usePopoverProviderContext,\n  PopoverContextProvider,\n  PopoverScopedContextProvider\n};\n","\"use client\";\nimport {\n  getDocument,\n  sortBasedOnDOMPosition\n} from \"./DTR5TSDJ.js\";\nimport {\n  batch,\n  createStore,\n  init,\n  setup,\n  throwOnConflictingProps\n} from \"./BCALMBPZ.js\";\nimport {\n  chain,\n  defaultValue\n} from \"./PBFD2E7P.js\";\nimport {\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/collection/collection-store.ts\nfunction getCommonParent(items) {\n  var _a;\n  const firstItem = items.find((item) => !!item.element);\n  const lastItem = [...items].reverse().find((item) => !!item.element);\n  let parentElement = (_a = firstItem == null ? void 0 : firstItem.element) == null ? void 0 : _a.parentElement;\n  while (parentElement && (lastItem == null ? void 0 : lastItem.element)) {\n    const parent = parentElement;\n    if (lastItem && parent.contains(lastItem.element)) {\n      return parentElement;\n    }\n    parentElement = parentElement.parentElement;\n  }\n  return getDocument(parentElement).body;\n}\nfunction getPrivateStore(store) {\n  return store == null ? void 0 : store.__unstablePrivateStore;\n}\nfunction createCollectionStore(props = {}) {\n  var _a;\n  throwOnConflictingProps(props, props.store);\n  const syncState = (_a = props.store) == null ? void 0 : _a.getState();\n  const items = defaultValue(\n    props.items,\n    syncState == null ? void 0 : syncState.items,\n    props.defaultItems,\n    []\n  );\n  const itemsMap = new Map(items.map((item) => [item.id, item]));\n  const initialState = {\n    items,\n    renderedItems: defaultValue(syncState == null ? void 0 : syncState.renderedItems, [])\n  };\n  const syncPrivateStore = getPrivateStore(props.store);\n  const privateStore = createStore(\n    { items, renderedItems: initialState.renderedItems },\n    syncPrivateStore\n  );\n  const collection = createStore(initialState, props.store);\n  const sortItems = (renderedItems) => {\n    const sortedItems = sortBasedOnDOMPosition(renderedItems, (i) => i.element);\n    privateStore.setState(\"renderedItems\", sortedItems);\n    collection.setState(\"renderedItems\", sortedItems);\n  };\n  setup(collection, () => init(privateStore));\n  setup(privateStore, () => {\n    return batch(privateStore, [\"items\"], (state) => {\n      collection.setState(\"items\", state.items);\n    });\n  });\n  setup(privateStore, () => {\n    return batch(privateStore, [\"renderedItems\"], (state) => {\n      let firstRun = true;\n      let raf = requestAnimationFrame(() => {\n        const { renderedItems } = collection.getState();\n        if (state.renderedItems === renderedItems) return;\n        sortItems(state.renderedItems);\n      });\n      if (typeof IntersectionObserver !== \"function\") {\n        return () => cancelAnimationFrame(raf);\n      }\n      const ioCallback = () => {\n        if (firstRun) {\n          firstRun = false;\n          return;\n        }\n        cancelAnimationFrame(raf);\n        raf = requestAnimationFrame(() => sortItems(state.renderedItems));\n      };\n      const root = getCommonParent(state.renderedItems);\n      const observer = new IntersectionObserver(ioCallback, { root });\n      for (const item of state.renderedItems) {\n        if (!item.element) continue;\n        observer.observe(item.element);\n      }\n      return () => {\n        cancelAnimationFrame(raf);\n        observer.disconnect();\n      };\n    });\n  });\n  const mergeItem = (item, setItems, canDeleteFromMap = false) => {\n    let prevItem;\n    setItems((items2) => {\n      const index = items2.findIndex(({ id }) => id === item.id);\n      const nextItems = items2.slice();\n      if (index !== -1) {\n        prevItem = items2[index];\n        const nextItem = __spreadValues(__spreadValues({}, prevItem), item);\n        nextItems[index] = nextItem;\n        itemsMap.set(item.id, nextItem);\n      } else {\n        nextItems.push(item);\n        itemsMap.set(item.id, item);\n      }\n      return nextItems;\n    });\n    const unmergeItem = () => {\n      setItems((items2) => {\n        if (!prevItem) {\n          if (canDeleteFromMap) {\n            itemsMap.delete(item.id);\n          }\n          return items2.filter(({ id }) => id !== item.id);\n        }\n        const index = items2.findIndex(({ id }) => id === item.id);\n        if (index === -1) return items2;\n        const nextItems = items2.slice();\n        nextItems[index] = prevItem;\n        itemsMap.set(item.id, prevItem);\n        return nextItems;\n      });\n    };\n    return unmergeItem;\n  };\n  const registerItem = (item) => mergeItem(\n    item,\n    (getItems) => privateStore.setState(\"items\", getItems),\n    true\n  );\n  return __spreadProps(__spreadValues({}, collection), {\n    registerItem,\n    renderItem: (item) => chain(\n      registerItem(item),\n      mergeItem(\n        item,\n        (getItems) => privateStore.setState(\"renderedItems\", getItems)\n      )\n    ),\n    item: (id) => {\n      if (!id) return null;\n      let item = itemsMap.get(id);\n      if (!item) {\n        const { items: items2 } = privateStore.getState();\n        item = items2.find((item2) => item2.id === id);\n        if (item) {\n          itemsMap.set(id, item);\n        }\n      }\n      return item || null;\n    },\n    // @ts-expect-error Internal\n    __unstablePrivateStore: privateStore\n  });\n}\n\nexport {\n  createCollectionStore\n};\n","\"use client\";\nimport {\n  useStore,\n  useStoreProps\n} from \"./RTNCFSKZ.js\";\nimport {\n  useUpdateEffect\n} from \"./5GGHRIN3.js\";\n\n// src/collection/collection-store.ts\nimport * as Core from \"@ariakit/core/collection/collection-store\";\nfunction useCollectionStoreProps(store, update, props) {\n  useUpdateEffect(update, [props.store]);\n  useStoreProps(store, props, \"items\", \"setItems\");\n  return store;\n}\nfunction useCollectionStore(props = {}) {\n  const [store, update] = useStore(Core.createCollectionStore, props);\n  return useCollectionStoreProps(store, update, props);\n}\n\nexport {\n  useCollectionStoreProps,\n  useCollectionStore\n};\n","\"use client\";\nimport {\n  flatten2DArray,\n  reverseArray\n} from \"./7PRQYBBV.js\";\nimport {\n  createCollectionStore\n} from \"./EO4GVUA4.js\";\nimport {\n  createStore,\n  setup,\n  sync\n} from \"./BCALMBPZ.js\";\nimport {\n  defaultValue\n} from \"./PBFD2E7P.js\";\nimport {\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/composite/composite-store.ts\nvar NULL_ITEM = { id: null };\nfunction findFirstEnabledItem(items, excludeId) {\n  return items.find((item) => {\n    if (excludeId) {\n      return !item.disabled && item.id !== excludeId;\n    }\n    return !item.disabled;\n  });\n}\nfunction getEnabledItems(items, excludeId) {\n  return items.filter((item) => {\n    if (excludeId) {\n      return !item.disabled && item.id !== excludeId;\n    }\n    return !item.disabled;\n  });\n}\nfunction getItemsInRow(items, rowId) {\n  return items.filter((item) => item.rowId === rowId);\n}\nfunction flipItems(items, activeId, shouldInsertNullItem = false) {\n  const index = items.findIndex((item) => item.id === activeId);\n  return [\n    ...items.slice(index + 1),\n    ...shouldInsertNullItem ? [NULL_ITEM] : [],\n    ...items.slice(0, index)\n  ];\n}\nfunction groupItemsByRows(items) {\n  const rows = [];\n  for (const item of items) {\n    const row = rows.find((currentRow) => {\n      var _a;\n      return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId;\n    });\n    if (row) {\n      row.push(item);\n    } else {\n      rows.push([item]);\n    }\n  }\n  return rows;\n}\nfunction getMaxRowLength(array) {\n  let maxLength = 0;\n  for (const { length } of array) {\n    if (length > maxLength) {\n      maxLength = length;\n    }\n  }\n  return maxLength;\n}\nfunction createEmptyItem(rowId) {\n  return {\n    id: \"__EMPTY_ITEM__\",\n    disabled: true,\n    rowId\n  };\n}\nfunction normalizeRows(rows, activeId, focusShift) {\n  const maxLength = getMaxRowLength(rows);\n  for (const row of rows) {\n    for (let i = 0; i < maxLength; i += 1) {\n      const item = row[i];\n      if (!item || focusShift && item.disabled) {\n        const isFirst = i === 0;\n        const previousItem = isFirst && focusShift ? findFirstEnabledItem(row) : row[i - 1];\n        row[i] = previousItem && activeId !== previousItem.id && focusShift ? previousItem : createEmptyItem(previousItem == null ? void 0 : previousItem.rowId);\n      }\n    }\n  }\n  return rows;\n}\nfunction verticalizeItems(items) {\n  const rows = groupItemsByRows(items);\n  const maxLength = getMaxRowLength(rows);\n  const verticalized = [];\n  for (let i = 0; i < maxLength; i += 1) {\n    for (const row of rows) {\n      const item = row[i];\n      if (item) {\n        verticalized.push(__spreadProps(__spreadValues({}, item), {\n          // If there's no rowId, it means that it's not a grid composite, but\n          // a single row instead. So, instead of verticalizing it, that is,\n          // assigning a different rowId based on the column index, we keep it\n          // undefined so they will be part of the same row. This is useful\n          // when using up/down on one-dimensional composites.\n          rowId: item.rowId ? `${i}` : void 0\n        }));\n      }\n    }\n  }\n  return verticalized;\n}\nfunction createCompositeStore(props = {}) {\n  var _a;\n  const syncState = (_a = props.store) == null ? void 0 : _a.getState();\n  const collection = createCollectionStore(props);\n  const activeId = defaultValue(\n    props.activeId,\n    syncState == null ? void 0 : syncState.activeId,\n    props.defaultActiveId\n  );\n  const initialState = __spreadProps(__spreadValues({}, collection.getState()), {\n    id: defaultValue(\n      props.id,\n      syncState == null ? void 0 : syncState.id,\n      `id-${Math.random().toString(36).slice(2, 8)}`\n    ),\n    activeId,\n    baseElement: defaultValue(syncState == null ? void 0 : syncState.baseElement, null),\n    includesBaseElement: defaultValue(\n      props.includesBaseElement,\n      syncState == null ? void 0 : syncState.includesBaseElement,\n      activeId === null\n    ),\n    moves: defaultValue(syncState == null ? void 0 : syncState.moves, 0),\n    orientation: defaultValue(\n      props.orientation,\n      syncState == null ? void 0 : syncState.orientation,\n      \"both\"\n    ),\n    rtl: defaultValue(props.rtl, syncState == null ? void 0 : syncState.rtl, false),\n    virtualFocus: defaultValue(\n      props.virtualFocus,\n      syncState == null ? void 0 : syncState.virtualFocus,\n      false\n    ),\n    focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, false),\n    focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, false),\n    focusShift: defaultValue(props.focusShift, syncState == null ? void 0 : syncState.focusShift, false)\n  });\n  const composite = createStore(initialState, collection, props.store);\n  setup(\n    composite,\n    () => sync(composite, [\"renderedItems\", \"activeId\"], (state) => {\n      composite.setState(\"activeId\", (activeId2) => {\n        var _a2;\n        if (activeId2 !== void 0) return activeId2;\n        return (_a2 = findFirstEnabledItem(state.renderedItems)) == null ? void 0 : _a2.id;\n      });\n    })\n  );\n  const getNextId = (direction = \"next\", options = {}) => {\n    var _a2, _b;\n    const defaultState = composite.getState();\n    const {\n      skip = 0,\n      activeId: activeId2 = defaultState.activeId,\n      focusShift = defaultState.focusShift,\n      focusLoop = defaultState.focusLoop,\n      focusWrap = defaultState.focusWrap,\n      includesBaseElement = defaultState.includesBaseElement,\n      renderedItems = defaultState.renderedItems,\n      rtl = defaultState.rtl\n    } = options;\n    const isVerticalDirection = direction === \"up\" || direction === \"down\";\n    const isNextDirection = direction === \"next\" || direction === \"down\";\n    const canReverse = isNextDirection ? rtl && !isVerticalDirection : !rtl || isVerticalDirection;\n    const canShift = focusShift && !skip;\n    let items = !isVerticalDirection ? renderedItems : flatten2DArray(\n      normalizeRows(groupItemsByRows(renderedItems), activeId2, canShift)\n    );\n    items = canReverse ? reverseArray(items) : items;\n    items = isVerticalDirection ? verticalizeItems(items) : items;\n    if (activeId2 == null) {\n      return (_a2 = findFirstEnabledItem(items)) == null ? void 0 : _a2.id;\n    }\n    const activeItem = items.find((item) => item.id === activeId2);\n    if (!activeItem) {\n      return (_b = findFirstEnabledItem(items)) == null ? void 0 : _b.id;\n    }\n    const isGrid = items.some((item) => item.rowId);\n    const activeIndex = items.indexOf(activeItem);\n    const nextItems = items.slice(activeIndex + 1);\n    const nextItemsInRow = getItemsInRow(nextItems, activeItem.rowId);\n    if (skip) {\n      const nextEnabledItemsInRow = getEnabledItems(nextItemsInRow, activeId2);\n      const nextItem2 = nextEnabledItemsInRow.slice(skip)[0] || // If we can't find an item, just return the last one.\n      nextEnabledItemsInRow[nextEnabledItemsInRow.length - 1];\n      return nextItem2 == null ? void 0 : nextItem2.id;\n    }\n    const canLoop = focusLoop && (isVerticalDirection ? focusLoop !== \"horizontal\" : focusLoop !== \"vertical\");\n    const canWrap = isGrid && focusWrap && (isVerticalDirection ? focusWrap !== \"horizontal\" : focusWrap !== \"vertical\");\n    const hasNullItem = isNextDirection ? (!isGrid || isVerticalDirection) && canLoop && includesBaseElement : isVerticalDirection ? includesBaseElement : false;\n    if (canLoop) {\n      const loopItems = canWrap && !hasNullItem ? items : getItemsInRow(items, activeItem.rowId);\n      const sortedItems = flipItems(loopItems, activeId2, hasNullItem);\n      const nextItem2 = findFirstEnabledItem(sortedItems, activeId2);\n      return nextItem2 == null ? void 0 : nextItem2.id;\n    }\n    if (canWrap) {\n      const nextItem2 = findFirstEnabledItem(\n        // We can use nextItems, which contains all the next items, including\n        // items from other rows, to wrap between rows. However, if there is a\n        // null item (the composite container), we'll only use the next items in\n        // the row. So moving next from the last item will focus on the\n        // composite container. On grid composites, horizontal navigation never\n        // focuses on the composite container, only vertical.\n        hasNullItem ? nextItemsInRow : nextItems,\n        activeId2\n      );\n      const nextId = hasNullItem ? (nextItem2 == null ? void 0 : nextItem2.id) || null : nextItem2 == null ? void 0 : nextItem2.id;\n      return nextId;\n    }\n    const nextItem = findFirstEnabledItem(nextItemsInRow, activeId2);\n    if (!nextItem && hasNullItem) {\n      return null;\n    }\n    return nextItem == null ? void 0 : nextItem.id;\n  };\n  return __spreadProps(__spreadValues(__spreadValues({}, collection), composite), {\n    setBaseElement: (element) => composite.setState(\"baseElement\", element),\n    setActiveId: (id) => composite.setState(\"activeId\", id),\n    move: (id) => {\n      if (id === void 0) return;\n      composite.setState(\"activeId\", id);\n      composite.setState(\"moves\", (moves) => moves + 1);\n    },\n    first: () => {\n      var _a2;\n      return (_a2 = findFirstEnabledItem(composite.getState().renderedItems)) == null ? void 0 : _a2.id;\n    },\n    last: () => {\n      var _a2;\n      return (_a2 = findFirstEnabledItem(reverseArray(composite.getState().renderedItems))) == null ? void 0 : _a2.id;\n    },\n    next: (options) => {\n      if (options !== void 0 && typeof options === \"number\") {\n        options = { skip: options };\n      }\n      return getNextId(\"next\", options);\n    },\n    previous: (options) => {\n      if (options !== void 0 && typeof options === \"number\") {\n        options = { skip: options };\n      }\n      return getNextId(\"previous\", options);\n    },\n    down: (options) => {\n      if (options !== void 0 && typeof options === \"number\") {\n        options = { skip: options };\n      }\n      return getNextId(\"down\", options);\n    },\n    up: (options) => {\n      if (options !== void 0 && typeof options === \"number\") {\n        options = { skip: options };\n      }\n      return getNextId(\"up\", options);\n    }\n  });\n}\n\nexport {\n  createCompositeStore\n};\n","\"use client\";\nimport {\n  useCollectionStoreProps\n} from \"./AMMIPFT4.js\";\nimport {\n  useStore,\n  useStoreProps\n} from \"./RTNCFSKZ.js\";\nimport {\n  useId\n} from \"./5GGHRIN3.js\";\nimport {\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/composite/composite-store.ts\nimport * as Core from \"@ariakit/core/composite/composite-store\";\nfunction useCompositeStoreOptions(props) {\n  const id = useId(props.id);\n  return __spreadValues({ id }, props);\n}\nfunction useCompositeStoreProps(store, update, props) {\n  store = useCollectionStoreProps(store, update, props);\n  useStoreProps(store, props, \"activeId\", \"setActiveId\");\n  useStoreProps(store, props, \"includesBaseElement\");\n  useStoreProps(store, props, \"virtualFocus\");\n  useStoreProps(store, props, \"orientation\");\n  useStoreProps(store, props, \"rtl\");\n  useStoreProps(store, props, \"focusLoop\");\n  useStoreProps(store, props, \"focusWrap\");\n  useStoreProps(store, props, \"focusShift\");\n  return store;\n}\nfunction useCompositeStore(props = {}) {\n  props = useCompositeStoreOptions(props);\n  const [store, update] = useStore(Core.createCompositeStore, props);\n  return useCompositeStoreProps(store, update, props);\n}\n\nexport {\n  useCompositeStoreOptions,\n  useCompositeStoreProps,\n  useCompositeStore\n};\n","\"use client\";\nimport {\n  PopoverContextProvider,\n  PopoverScopedContextProvider\n} from \"./Y67KZUMI.js\";\nimport {\n  CompositeContextProvider,\n  CompositeScopedContextProvider\n} from \"./APTFW6PT.js\";\nimport {\n  createStoreContext\n} from \"./VOQWLFSQ.js\";\n\n// src/combobox/combobox-context.tsx\nimport { createContext } from \"react\";\nvar ComboboxListRoleContext = createContext(\n  void 0\n);\nvar ctx = createStoreContext(\n  [PopoverContextProvider, CompositeContextProvider],\n  [PopoverScopedContextProvider, CompositeScopedContextProvider]\n);\nvar useComboboxContext = ctx.useContext;\nvar useComboboxScopedContext = ctx.useScopedContext;\nvar useComboboxProviderContext = ctx.useProviderContext;\nvar ComboboxContextProvider = ctx.ContextProvider;\nvar ComboboxScopedContextProvider = ctx.ScopedContextProvider;\nvar ComboboxItemValueContext = createContext(\n  void 0\n);\nvar ComboboxItemCheckedContext = createContext(false);\n\nexport {\n  ComboboxListRoleContext,\n  useComboboxContext,\n  useComboboxScopedContext,\n  useComboboxProviderContext,\n  ComboboxContextProvider,\n  ComboboxScopedContextProvider,\n  ComboboxItemValueContext,\n  ComboboxItemCheckedContext\n};\n","\"use client\";\nimport {\n  PopoverContextProvider,\n  PopoverScopedContextProvider\n} from \"./Y67KZUMI.js\";\nimport {\n  createStoreContext\n} from \"./VOQWLFSQ.js\";\n\n// src/hovercard/hovercard-context.tsx\nvar ctx = createStoreContext(\n  [PopoverContextProvider],\n  [PopoverScopedContextProvider]\n);\nvar useHovercardContext = ctx.useContext;\nvar useHovercardScopedContext = ctx.useScopedContext;\nvar useHovercardProviderContext = ctx.useProviderContext;\nvar HovercardContextProvider = ctx.ContextProvider;\nvar HovercardScopedContextProvider = ctx.ScopedContextProvider;\n\nexport {\n  useHovercardContext,\n  useHovercardScopedContext,\n  useHovercardProviderContext,\n  HovercardContextProvider,\n  HovercardScopedContextProvider\n};\n","\"use client\";\n\n// src/hovercard/utils/polygon.ts\nfunction getEventPoint(event) {\n  return [event.clientX, event.clientY];\n}\nfunction isPointInPolygon(point, polygon) {\n  const [x, y] = point;\n  let inside = false;\n  const length = polygon.length;\n  for (let l = length, i = 0, j = l - 1; i < l; j = i++) {\n    const [xi, yi] = polygon[i];\n    const [xj, yj] = polygon[j];\n    const [, vy] = polygon[j === 0 ? l - 1 : j - 1] || [0, 0];\n    const where = (yi - yj) * (x - xi) - (xi - xj) * (y - yi);\n    if (yj < yi) {\n      if (y >= yj && y < yi) {\n        if (where === 0) return true;\n        if (where > 0) {\n          if (y === yj) {\n            if (y > vy) {\n              inside = !inside;\n            }\n          } else {\n            inside = !inside;\n          }\n        }\n      }\n    } else if (yi < yj) {\n      if (y > yi && y <= yj) {\n        if (where === 0) return true;\n        if (where < 0) {\n          if (y === yj) {\n            if (y < vy) {\n              inside = !inside;\n            }\n          } else {\n            inside = !inside;\n          }\n        }\n      }\n    } else if (y === yi && (x >= xj && x <= xi || x >= xi && x <= xj)) {\n      return true;\n    }\n  }\n  return inside;\n}\nfunction getEnterPointPlacement(enterPoint, rect) {\n  const { top, right, bottom, left } = rect;\n  const [x, y] = enterPoint;\n  const placementX = x < left ? \"left\" : x > right ? \"right\" : null;\n  const placementY = y < top ? \"top\" : y > bottom ? \"bottom\" : null;\n  return [placementX, placementY];\n}\nfunction getElementPolygon(element, enterPoint) {\n  const rect = element.getBoundingClientRect();\n  const { top, right, bottom, left } = rect;\n  const [x, y] = getEnterPointPlacement(enterPoint, rect);\n  const polygon = [enterPoint];\n  if (x) {\n    if (y !== \"top\") {\n      polygon.push([x === \"left\" ? left : right, top]);\n    }\n    polygon.push([x === \"left\" ? right : left, top]);\n    polygon.push([x === \"left\" ? right : left, bottom]);\n    if (y !== \"bottom\") {\n      polygon.push([x === \"left\" ? left : right, bottom]);\n    }\n  } else if (y === \"top\") {\n    polygon.push([left, top]);\n    polygon.push([left, bottom]);\n    polygon.push([right, bottom]);\n    polygon.push([right, top]);\n  } else {\n    polygon.push([left, bottom]);\n    polygon.push([left, top]);\n    polygon.push([right, top]);\n    polygon.push([right, bottom]);\n  }\n  return polygon;\n}\n\nexport {\n  getEventPoint,\n  isPointInPolygon,\n  getElementPolygon\n};\n","\"use client\";\n\n// src/portal/portal-context.tsx\nimport { createContext } from \"react\";\nvar PortalContext = createContext(null);\n\nexport {\n  PortalContext\n};\n","\"use client\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/visually-hidden/visually-hidden.tsx\nvar TagName = \"span\";\nvar useVisuallyHidden = createHook(\n  function useVisuallyHidden2(props) {\n    props = __spreadProps(__spreadValues({}, props), {\n      style: __spreadValues({\n        border: 0,\n        clip: \"rect(0 0 0 0)\",\n        height: \"1px\",\n        margin: \"-1px\",\n        overflow: \"hidden\",\n        padding: 0,\n        position: \"absolute\",\n        whiteSpace: \"nowrap\",\n        width: \"1px\"\n      }, props.style)\n    });\n    return props;\n  }\n);\nvar VisuallyHidden = forwardRef(function VisuallyHidden2(props) {\n  const htmlProps = useVisuallyHidden(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useVisuallyHidden,\n  VisuallyHidden\n};\n","\"use client\";\nimport {\n  useVisuallyHidden\n} from \"./DXGKYUAD.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/focus-trap/focus-trap.tsx\nvar TagName = \"span\";\nvar useFocusTrap = createHook(\n  function useFocusTrap2(props) {\n    props = __spreadProps(__spreadValues({\n      \"data-focus-trap\": \"\",\n      tabIndex: 0,\n      \"aria-hidden\": true\n    }, props), {\n      style: __spreadValues({\n        // Prevents unintended scroll jumps.\n        position: \"fixed\",\n        top: 0,\n        left: 0\n      }, props.style)\n    });\n    props = useVisuallyHidden(props);\n    return props;\n  }\n);\nvar FocusTrap = forwardRef(function FocusTrap2(props) {\n  const htmlProps = useFocusTrap(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useFocusTrap,\n  FocusTrap\n};\n","\"use client\";\nimport {\n  PortalContext\n} from \"./AOQQTIBO.js\";\nimport {\n  FocusTrap\n} from \"./S2F2XXEH.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useMergeRefs,\n  useSafeLayoutEffect,\n  useWrapElement\n} from \"./5GGHRIN3.js\";\nimport {\n  setRef\n} from \"./SK3NAZA3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/portal/portal.tsx\nimport { getDocument } from \"@ariakit/core/utils/dom\";\nimport { isFocusEventOutside } from \"@ariakit/core/utils/events\";\nimport {\n  disableFocusIn,\n  getNextTabbable,\n  getPreviousTabbable,\n  restoreFocusIn\n} from \"@ariakit/core/utils/focus\";\nimport { useContext, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar TagName = \"div\";\nfunction getRootElement(element) {\n  return getDocument(element).body;\n}\nfunction getPortalElement(element, portalElement) {\n  if (!portalElement) {\n    return getDocument(element).createElement(\"div\");\n  }\n  if (typeof portalElement === \"function\") {\n    return portalElement(element);\n  }\n  return portalElement;\n}\nfunction getRandomId(prefix = \"id\") {\n  return `${prefix ? `${prefix}-` : \"\"}${Math.random().toString(36).slice(2, 8)}`;\n}\nfunction queueFocus(element) {\n  queueMicrotask(() => {\n    element == null ? void 0 : element.focus();\n  });\n}\nvar usePortal = createHook(function usePortal2(_a) {\n  var _b = _a, {\n    preserveTabOrder,\n    preserveTabOrderAnchor,\n    portalElement,\n    portalRef,\n    portal = true\n  } = _b, props = __objRest(_b, [\n    \"preserveTabOrder\",\n    \"preserveTabOrderAnchor\",\n    \"portalElement\",\n    \"portalRef\",\n    \"portal\"\n  ]);\n  const ref = useRef(null);\n  const refProp = useMergeRefs(ref, props.ref);\n  const context = useContext(PortalContext);\n  const [portalNode, setPortalNode] = useState(null);\n  const [anchorPortalNode, setAnchorPortalNode] = useState(\n    null\n  );\n  const outerBeforeRef = useRef(null);\n  const innerBeforeRef = useRef(null);\n  const innerAfterRef = useRef(null);\n  const outerAfterRef = useRef(null);\n  useSafeLayoutEffect(() => {\n    const element = ref.current;\n    if (!element || !portal) {\n      setPortalNode(null);\n      return;\n    }\n    const portalEl = getPortalElement(element, portalElement);\n    if (!portalEl) {\n      setPortalNode(null);\n      return;\n    }\n    const isPortalInDocument = portalEl.isConnected;\n    if (!isPortalInDocument) {\n      const rootElement = context || getRootElement(element);\n      rootElement.appendChild(portalEl);\n    }\n    if (!portalEl.id) {\n      portalEl.id = element.id ? `portal/${element.id}` : getRandomId();\n    }\n    setPortalNode(portalEl);\n    setRef(portalRef, portalEl);\n    if (isPortalInDocument) return;\n    return () => {\n      portalEl.remove();\n      setRef(portalRef, null);\n    };\n  }, [portal, portalElement, context, portalRef]);\n  useSafeLayoutEffect(() => {\n    if (!portal) return;\n    if (!preserveTabOrder) return;\n    if (!preserveTabOrderAnchor) return;\n    const doc = getDocument(preserveTabOrderAnchor);\n    const element = doc.createElement(\"span\");\n    element.style.position = \"fixed\";\n    preserveTabOrderAnchor.insertAdjacentElement(\"afterend\", element);\n    setAnchorPortalNode(element);\n    return () => {\n      element.remove();\n      setAnchorPortalNode(null);\n    };\n  }, [portal, preserveTabOrder, preserveTabOrderAnchor]);\n  useEffect(() => {\n    if (!portalNode) return;\n    if (!preserveTabOrder) return;\n    let raf = 0;\n    const onFocus = (event) => {\n      if (!isFocusEventOutside(event)) return;\n      const focusing = event.type === \"focusin\";\n      cancelAnimationFrame(raf);\n      if (focusing) {\n        return restoreFocusIn(portalNode);\n      }\n      raf = requestAnimationFrame(() => {\n        disableFocusIn(portalNode, true);\n      });\n    };\n    portalNode.addEventListener(\"focusin\", onFocus, true);\n    portalNode.addEventListener(\"focusout\", onFocus, true);\n    return () => {\n      cancelAnimationFrame(raf);\n      portalNode.removeEventListener(\"focusin\", onFocus, true);\n      portalNode.removeEventListener(\"focusout\", onFocus, true);\n    };\n  }, [portalNode, preserveTabOrder]);\n  props = useWrapElement(\n    props,\n    (element) => {\n      element = // While the portal node is not in the DOM, we need to pass the\n      // current context to the portal context, otherwise it's going to\n      // reset to the body element on nested portals.\n      /* @__PURE__ */ jsx(PortalContext.Provider, { value: portalNode || context, children: element });\n      if (!portal) return element;\n      if (!portalNode) {\n        return /* @__PURE__ */ jsx(\n          \"span\",\n          {\n            ref: refProp,\n            id: props.id,\n            style: { position: \"fixed\" },\n            hidden: true\n          }\n        );\n      }\n      element = /* @__PURE__ */ jsxs(Fragment, { children: [\n        preserveTabOrder && portalNode && /* @__PURE__ */ jsx(\n          FocusTrap,\n          {\n            ref: innerBeforeRef,\n            \"data-focus-trap\": props.id,\n            className: \"__focus-trap-inner-before\",\n            onFocus: (event) => {\n              if (isFocusEventOutside(event, portalNode)) {\n                queueFocus(getNextTabbable());\n              } else {\n                queueFocus(outerBeforeRef.current);\n              }\n            }\n          }\n        ),\n        element,\n        preserveTabOrder && portalNode && /* @__PURE__ */ jsx(\n          FocusTrap,\n          {\n            ref: innerAfterRef,\n            \"data-focus-trap\": props.id,\n            className: \"__focus-trap-inner-after\",\n            onFocus: (event) => {\n              if (isFocusEventOutside(event, portalNode)) {\n                queueFocus(getPreviousTabbable());\n              } else {\n                queueFocus(outerAfterRef.current);\n              }\n            }\n          }\n        )\n      ] });\n      if (portalNode) {\n        element = createPortal(element, portalNode);\n      }\n      let preserveTabOrderElement = /* @__PURE__ */ jsxs(Fragment, { children: [\n        preserveTabOrder && portalNode && /* @__PURE__ */ jsx(\n          FocusTrap,\n          {\n            ref: outerBeforeRef,\n            \"data-focus-trap\": props.id,\n            className: \"__focus-trap-outer-before\",\n            onFocus: (event) => {\n              const fromOuter = event.relatedTarget === outerAfterRef.current;\n              if (!fromOuter && isFocusEventOutside(event, portalNode)) {\n                queueFocus(innerBeforeRef.current);\n              } else {\n                queueFocus(getPreviousTabbable());\n              }\n            }\n          }\n        ),\n        preserveTabOrder && // We're using position: fixed here so that the browser doesn't\n        // add margin to the element when setting gap on a parent element.\n        /* @__PURE__ */ jsx(\"span\", { \"aria-owns\": portalNode == null ? void 0 : portalNode.id, style: { position: \"fixed\" } }),\n        preserveTabOrder && portalNode && /* @__PURE__ */ jsx(\n          FocusTrap,\n          {\n            ref: outerAfterRef,\n            \"data-focus-trap\": props.id,\n            className: \"__focus-trap-outer-after\",\n            onFocus: (event) => {\n              if (isFocusEventOutside(event, portalNode)) {\n                queueFocus(innerAfterRef.current);\n              } else {\n                const nextTabbable = getNextTabbable();\n                if (nextTabbable === innerBeforeRef.current) {\n                  requestAnimationFrame(() => {\n                    var _a2;\n                    return (_a2 = getNextTabbable()) == null ? void 0 : _a2.focus();\n                  });\n                  return;\n                }\n                queueFocus(nextTabbable);\n              }\n            }\n          }\n        )\n      ] });\n      if (anchorPortalNode && preserveTabOrder) {\n        preserveTabOrderElement = createPortal(\n          preserveTabOrderElement,\n          anchorPortalNode\n        );\n      }\n      return /* @__PURE__ */ jsxs(Fragment, { children: [\n        preserveTabOrderElement,\n        element\n      ] });\n    },\n    [portalNode, context, portal, props.id, preserveTabOrder, anchorPortalNode]\n  );\n  props = __spreadProps(__spreadValues({}, props), {\n    ref: refProp\n  });\n  return props;\n});\nvar Portal = forwardRef(function Portal2(props) {\n  const htmlProps = usePortal(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  usePortal,\n  Portal\n};\n","\"use client\";\n\n// src/heading/heading-context.tsx\nimport { createContext } from \"react\";\nvar HeadingContext = createContext(0);\n\nexport {\n  HeadingContext\n};\n","\"use client\";\nimport {\n  HeadingContext\n} from \"./CZ4GFWYL.js\";\n\n// src/heading/heading-level.tsx\nimport { useContext } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction HeadingLevel({ level, children }) {\n  const contextLevel = useContext(HeadingContext);\n  const nextLevel = Math.max(\n    Math.min(level || contextLevel + 1, 6),\n    1\n  );\n  return /* @__PURE__ */ jsx(HeadingContext.Provider, { value: nextLevel, children });\n}\n\nexport {\n  HeadingLevel\n};\n","\"use client\";\nimport {\n  FocusableContext\n} from \"./SWN3JYXT.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useWrapElement\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest\n} from \"./3YLGPPWQ.js\";\n\n// src/focusable/focusable-container.tsx\nimport { jsx } from \"react/jsx-runtime\";\nvar TagName = \"div\";\nvar useFocusableContainer = createHook(function useFocusableContainer2(_a) {\n  var _b = _a, { autoFocusOnShow = true } = _b, props = __objRest(_b, [\"autoFocusOnShow\"]);\n  props = useWrapElement(\n    props,\n    (element) => /* @__PURE__ */ jsx(FocusableContext.Provider, { value: autoFocusOnShow, children: element }),\n    [autoFocusOnShow]\n  );\n  return props;\n});\nvar FocusableContainer = forwardRef(function FocusableContainer2(props) {\n  const htmlProps = useFocusableContainer(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useFocusableContainer,\n  FocusableContainer\n};\n","\"use client\";\n\n// src/dialog/utils/prepend-hidden-dismiss.ts\nimport { getDocument } from \"@ariakit/core/utils/dom\";\nfunction prependHiddenDismiss(container, onClick) {\n  const document = getDocument(container);\n  const button = document.createElement(\"button\");\n  button.type = \"button\";\n  button.tabIndex = -1;\n  button.textContent = \"Dismiss popup\";\n  Object.assign(button.style, {\n    border: \"0px\",\n    clip: \"rect(0 0 0 0)\",\n    height: \"1px\",\n    margin: \"-1px\",\n    overflow: \"hidden\",\n    padding: \"0px\",\n    position: \"absolute\",\n    whiteSpace: \"nowrap\",\n    width: \"1px\"\n  });\n  button.addEventListener(\"click\", onClick);\n  container.prepend(button);\n  const removeHiddenDismiss = () => {\n    button.removeEventListener(\"click\", onClick);\n    button.remove();\n  };\n  return removeHiddenDismiss;\n}\n\nexport {\n  prependHiddenDismiss\n};\n","\"use client\";\n\n// src/dialog/utils/use-previous-mouse-down-ref.ts\nimport { addGlobalEventListener } from \"@ariakit/core/utils/events\";\nimport { useEffect, useRef } from \"react\";\nfunction usePreviousMouseDownRef(enabled) {\n  const previousMouseDownRef = useRef();\n  useEffect(() => {\n    if (!enabled) {\n      previousMouseDownRef.current = null;\n      return;\n    }\n    const onMouseDown = (event) => {\n      previousMouseDownRef.current = event.target;\n    };\n    return addGlobalEventListener(\"mousedown\", onMouseDown, true);\n  }, [enabled]);\n  return previousMouseDownRef;\n}\n\nexport {\n  usePreviousMouseDownRef\n};\n","\"use client\";\n\n// src/dialog/utils/orchestrate.ts\nvar cleanups = /* @__PURE__ */ new WeakMap();\nfunction orchestrate(element, key, setup) {\n  if (!cleanups.has(element)) {\n    cleanups.set(element, /* @__PURE__ */ new Map());\n  }\n  const elementCleanups = cleanups.get(element);\n  const prevCleanup = elementCleanups.get(key);\n  if (!prevCleanup) {\n    elementCleanups.set(key, setup());\n    return () => {\n      var _a;\n      (_a = elementCleanups.get(key)) == null ? void 0 : _a();\n      elementCleanups.delete(key);\n    };\n  }\n  const cleanup = setup();\n  const nextCleanup = () => {\n    cleanup();\n    prevCleanup();\n    elementCleanups.delete(key);\n  };\n  elementCleanups.set(key, nextCleanup);\n  return () => {\n    const isCurrent = elementCleanups.get(key) === nextCleanup;\n    if (!isCurrent) return;\n    cleanup();\n    elementCleanups.set(key, prevCleanup);\n  };\n}\nfunction setAttribute(element, attr, value) {\n  const setup = () => {\n    const previousValue = element.getAttribute(attr);\n    element.setAttribute(attr, value);\n    return () => {\n      if (previousValue == null) {\n        element.removeAttribute(attr);\n      } else {\n        element.setAttribute(attr, previousValue);\n      }\n    };\n  };\n  return orchestrate(element, attr, setup);\n}\nfunction setProperty(element, property, value) {\n  const setup = () => {\n    const exists = property in element;\n    const previousValue = element[property];\n    element[property] = value;\n    return () => {\n      if (!exists) {\n        delete element[property];\n      } else {\n        element[property] = previousValue;\n      }\n    };\n  };\n  return orchestrate(element, property, setup);\n}\nfunction assignStyle(element, style) {\n  if (!element) return () => {\n  };\n  const setup = () => {\n    const prevStyle = element.style.cssText;\n    Object.assign(element.style, style);\n    return () => {\n      element.style.cssText = prevStyle;\n    };\n  };\n  return orchestrate(element, \"style\", setup);\n}\nfunction setCSSProperty(element, property, value) {\n  if (!element) return () => {\n  };\n  const setup = () => {\n    const previousValue = element.style.getPropertyValue(property);\n    element.style.setProperty(property, value);\n    return () => {\n      if (previousValue) {\n        element.style.setProperty(property, previousValue);\n      } else {\n        element.style.removeProperty(property);\n      }\n    };\n  };\n  return orchestrate(element, property, setup);\n}\n\nexport {\n  orchestrate,\n  setAttribute,\n  setProperty,\n  assignStyle,\n  setCSSProperty\n};\n","\"use client\";\nimport {\n  setProperty\n} from \"./K2ZF5NU7.js\";\n\n// src/dialog/utils/walk-tree-outside.ts\nimport { contains, getDocument } from \"@ariakit/core/utils/dom\";\nimport { chain } from \"@ariakit/core/utils/misc\";\nvar ignoreTags = [\"SCRIPT\", \"STYLE\"];\nfunction getSnapshotPropertyName(id) {\n  return `__ariakit-dialog-snapshot-${id}`;\n}\nfunction inSnapshot(id, element) {\n  const doc = getDocument(element);\n  const propertyName = getSnapshotPropertyName(id);\n  if (!doc.body[propertyName]) return true;\n  do {\n    if (element === doc.body) return false;\n    if (element[propertyName]) return true;\n    if (!element.parentElement) return false;\n    element = element.parentElement;\n  } while (true);\n}\nfunction isValidElement(id, element, ignoredElements) {\n  if (ignoreTags.includes(element.tagName)) return false;\n  if (!inSnapshot(id, element)) return false;\n  return !ignoredElements.some(\n    (enabledElement) => enabledElement && contains(element, enabledElement)\n  );\n}\nfunction walkTreeOutside(id, elements, callback, ancestorCallback) {\n  for (let element of elements) {\n    if (!(element == null ? void 0 : element.isConnected)) continue;\n    const hasAncestorAlready = elements.some((maybeAncestor) => {\n      if (!maybeAncestor) return false;\n      if (maybeAncestor === element) return false;\n      return maybeAncestor.contains(element);\n    });\n    const doc = getDocument(element);\n    const originalElement = element;\n    while (element.parentElement && element !== doc.body) {\n      ancestorCallback == null ? void 0 : ancestorCallback(element.parentElement, originalElement);\n      if (!hasAncestorAlready) {\n        for (const child of element.parentElement.children) {\n          if (isValidElement(id, child, elements)) {\n            callback(child, originalElement);\n          }\n        }\n      }\n      element = element.parentElement;\n    }\n  }\n}\nfunction createWalkTreeSnapshot(id, elements) {\n  const { body } = getDocument(elements[0]);\n  const cleanups = [];\n  const markElement = (element) => {\n    cleanups.push(setProperty(element, getSnapshotPropertyName(id), true));\n  };\n  walkTreeOutside(id, elements, markElement);\n  return chain(setProperty(body, getSnapshotPropertyName(id), true), () => {\n    for (const cleanup of cleanups) {\n      cleanup();\n    }\n  });\n}\n\nexport {\n  isValidElement,\n  walkTreeOutside,\n  createWalkTreeSnapshot\n};\n","\"use client\";\n\n// src/dialog/utils/is-backdrop.ts\nfunction isBackdrop(element, ...ids) {\n  if (!element) return false;\n  const backdrop = element.getAttribute(\"data-backdrop\");\n  if (backdrop == null) return false;\n  if (backdrop === \"\") return true;\n  if (backdrop === \"true\") return true;\n  if (!ids.length) return true;\n  return ids.some((id) => backdrop === id);\n}\n\nexport {\n  isBackdrop\n};\n","\"use client\";\nimport {\n  walkTreeOutside\n} from \"./AOUGVQZ3.js\";\nimport {\n  setProperty\n} from \"./K2ZF5NU7.js\";\nimport {\n  isBackdrop\n} from \"./63XF7ACK.js\";\n\n// src/dialog/utils/mark-tree-outside.ts\nimport { chain } from \"@ariakit/core/utils/misc\";\nfunction getPropertyName(id = \"\", ancestor = false) {\n  return `__ariakit-dialog-${ancestor ? \"ancestor\" : \"outside\"}${id ? `-${id}` : \"\"}`;\n}\nfunction markElement(element, id = \"\") {\n  return chain(\n    setProperty(element, getPropertyName(), true),\n    setProperty(element, getPropertyName(id), true)\n  );\n}\nfunction markAncestor(element, id = \"\") {\n  return chain(\n    setProperty(element, getPropertyName(\"\", true), true),\n    setProperty(element, getPropertyName(id, true), true)\n  );\n}\nfunction isElementMarked(element, id) {\n  const ancestorProperty = getPropertyName(id, true);\n  if (element[ancestorProperty]) return true;\n  const elementProperty = getPropertyName(id);\n  do {\n    if (element[elementProperty]) return true;\n    if (!element.parentElement) return false;\n    element = element.parentElement;\n  } while (true);\n}\nfunction markTreeOutside(id, elements) {\n  const cleanups = [];\n  const ids = elements.map((el) => el == null ? void 0 : el.id);\n  walkTreeOutside(\n    id,\n    elements,\n    (element) => {\n      if (isBackdrop(element, ...ids)) return;\n      cleanups.unshift(markElement(element, id));\n    },\n    (ancestor, element) => {\n      const isAnotherDialogAncestor = element.hasAttribute(\"data-dialog\") && element.id !== id;\n      if (isAnotherDialogAncestor) return;\n      cleanups.unshift(markAncestor(ancestor, id));\n    }\n  );\n  const restoreAccessibilityTree = () => {\n    for (const cleanup of cleanups) {\n      cleanup();\n    }\n  };\n  return restoreAccessibilityTree;\n}\n\nexport {\n  markElement,\n  markAncestor,\n  isElementMarked,\n  markTreeOutside\n};\n","\"use client\";\nimport {\n  usePreviousMouseDownRef\n} from \"./HLTQOHKZ.js\";\nimport {\n  isElementMarked\n} from \"./3NDVDEB4.js\";\nimport {\n  isSafariFocusAncestor\n} from \"./OE2EFRVA.js\";\nimport {\n  useStoreState\n} from \"./RTNCFSKZ.js\";\nimport {\n  useEvent,\n  useSafeLayoutEffect\n} from \"./5GGHRIN3.js\";\nimport {\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/dialog/utils/use-hide-on-interact-outside.ts\nimport { contains, getDocument, isVisible } from \"@ariakit/core/utils/dom\";\nimport { addGlobalEventListener } from \"@ariakit/core/utils/events\";\nimport { useEffect, useRef } from \"react\";\nfunction isInDocument(target) {\n  if (target.tagName === \"HTML\") return true;\n  return contains(getDocument(target).body, target);\n}\nfunction isDisclosure(disclosure, target) {\n  if (!disclosure) return false;\n  if (contains(disclosure, target)) return true;\n  const activeId = target.getAttribute(\"aria-activedescendant\");\n  if (activeId) {\n    const activeElement = getDocument(disclosure).getElementById(activeId);\n    if (activeElement) {\n      return contains(disclosure, activeElement);\n    }\n  }\n  return false;\n}\nfunction isMouseEventOnDialog(event, dialog) {\n  if (!(\"clientY\" in event)) return false;\n  const rect = dialog.getBoundingClientRect();\n  if (rect.width === 0 || rect.height === 0) return false;\n  return rect.top <= event.clientY && event.clientY <= rect.top + rect.height && rect.left <= event.clientX && event.clientX <= rect.left + rect.width;\n}\nfunction useEventOutside({\n  store,\n  type,\n  listener,\n  capture,\n  domReady\n}) {\n  const callListener = useEvent(listener);\n  const open = useStoreState(store, \"open\");\n  const focusedRef = useRef(false);\n  useSafeLayoutEffect(() => {\n    if (!open) return;\n    if (!domReady) return;\n    const { contentElement } = store.getState();\n    if (!contentElement) return;\n    const onFocus = () => {\n      focusedRef.current = true;\n    };\n    contentElement.addEventListener(\"focusin\", onFocus, true);\n    return () => contentElement.removeEventListener(\"focusin\", onFocus, true);\n  }, [store, open, domReady]);\n  useEffect(() => {\n    if (!open) return;\n    const onEvent = (event) => {\n      const { contentElement, disclosureElement } = store.getState();\n      const target = event.target;\n      if (!contentElement) return;\n      if (!target) return;\n      if (!isInDocument(target)) return;\n      if (contains(contentElement, target)) return;\n      if (isDisclosure(disclosureElement, target)) return;\n      if (target.hasAttribute(\"data-focus-trap\")) return;\n      if (isMouseEventOnDialog(event, contentElement)) return;\n      const focused = focusedRef.current;\n      if (focused && !isElementMarked(target, contentElement.id)) return;\n      if (isSafariFocusAncestor(target)) return;\n      callListener(event);\n    };\n    return addGlobalEventListener(type, onEvent, capture);\n  }, [open, capture]);\n}\nfunction shouldHideOnInteractOutside(hideOnInteractOutside, event) {\n  if (typeof hideOnInteractOutside === \"function\") {\n    return hideOnInteractOutside(event);\n  }\n  return !!hideOnInteractOutside;\n}\nfunction useHideOnInteractOutside(store, hideOnInteractOutside, domReady) {\n  const open = useStoreState(store, \"open\");\n  const previousMouseDownRef = usePreviousMouseDownRef(open);\n  const props = { store, domReady, capture: true };\n  useEventOutside(__spreadProps(__spreadValues({}, props), {\n    type: \"click\",\n    listener: (event) => {\n      const { contentElement } = store.getState();\n      const previousMouseDown = previousMouseDownRef.current;\n      if (!previousMouseDown) return;\n      if (!isVisible(previousMouseDown)) return;\n      if (!isElementMarked(previousMouseDown, contentElement == null ? void 0 : contentElement.id)) return;\n      if (!shouldHideOnInteractOutside(hideOnInteractOutside, event)) return;\n      store.hide();\n    }\n  }));\n  useEventOutside(__spreadProps(__spreadValues({}, props), {\n    type: \"focusin\",\n    listener: (event) => {\n      const { contentElement } = store.getState();\n      if (!contentElement) return;\n      if (event.target === getDocument(contentElement)) return;\n      if (!shouldHideOnInteractOutside(hideOnInteractOutside, event)) return;\n      store.hide();\n    }\n  }));\n  useEventOutside(__spreadProps(__spreadValues({}, props), {\n    type: \"contextmenu\",\n    listener: (event) => {\n      if (!shouldHideOnInteractOutside(hideOnInteractOutside, event)) return;\n      store.hide();\n    }\n  }));\n}\n\nexport {\n  useHideOnInteractOutside\n};\n","\"use client\";\nimport {\n  useSafeLayoutEffect\n} from \"./5GGHRIN3.js\";\n\n// src/dialog/utils/use-nested-dialogs.tsx\nimport { chain } from \"@ariakit/core/utils/misc\";\nimport { sync } from \"@ariakit/core/utils/store\";\nimport {\n  createContext,\n  useCallback,\n  useContext,\n  useMemo,\n  useState\n} from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NestedDialogsContext = createContext({});\nfunction useNestedDialogs(store) {\n  const context = useContext(NestedDialogsContext);\n  const [dialogs, setDialogs] = useState([]);\n  const add = useCallback(\n    (dialog) => {\n      var _a;\n      setDialogs((dialogs2) => [...dialogs2, dialog]);\n      return chain((_a = context.add) == null ? void 0 : _a.call(context, dialog), () => {\n        setDialogs((dialogs2) => dialogs2.filter((d) => d !== dialog));\n      });\n    },\n    [context]\n  );\n  useSafeLayoutEffect(() => {\n    return sync(store, [\"open\", \"contentElement\"], (state) => {\n      var _a;\n      if (!state.open) return;\n      if (!state.contentElement) return;\n      return (_a = context.add) == null ? void 0 : _a.call(context, store);\n    });\n  }, [store, context]);\n  const providerValue = useMemo(() => ({ store, add }), [store, add]);\n  const wrapElement = useCallback(\n    (element) => /* @__PURE__ */ jsx(NestedDialogsContext.Provider, { value: providerValue, children: element }),\n    [providerValue]\n  );\n  return { wrapElement, nestedDialogs: dialogs };\n}\n\nexport {\n  useNestedDialogs\n};\n","\"use client\";\nimport {\n  useForceUpdate\n} from \"./5GGHRIN3.js\";\n\n// src/dialog/utils/use-root-dialog.ts\nimport { getDocument } from \"@ariakit/core/utils/dom\";\nimport { useCallback, useEffect } from \"react\";\nimport { flushSync } from \"react-dom\";\nfunction useRootDialog({\n  attribute,\n  contentId,\n  contentElement,\n  enabled\n}) {\n  const [updated, retry] = useForceUpdate();\n  const isRootDialog = useCallback(() => {\n    if (!enabled) return false;\n    if (!contentElement) return false;\n    const { body } = getDocument(contentElement);\n    const id = body.getAttribute(attribute);\n    return !id || id === contentId;\n  }, [updated, enabled, contentElement, attribute, contentId]);\n  useEffect(() => {\n    if (!enabled) return;\n    if (!contentId) return;\n    if (!contentElement) return;\n    const { body } = getDocument(contentElement);\n    if (isRootDialog()) {\n      body.setAttribute(attribute, contentId);\n      return () => body.removeAttribute(attribute);\n    }\n    const observer = new MutationObserver(() => flushSync(retry));\n    observer.observe(body, { attributeFilter: [attribute] });\n    return () => observer.disconnect();\n  }, [updated, enabled, contentId, contentElement, isRootDialog, attribute]);\n  return isRootDialog;\n}\n\nexport {\n  useRootDialog\n};\n","\"use client\";\nimport {\n  useRootDialog\n} from \"./W6WVJJEY.js\";\nimport {\n  assignStyle,\n  setCSSProperty\n} from \"./K2ZF5NU7.js\";\n\n// src/dialog/utils/use-prevent-body-scroll.ts\nimport { getDocument, getWindow } from \"@ariakit/core/utils/dom\";\nimport { chain } from \"@ariakit/core/utils/misc\";\nimport { isApple, isMac } from \"@ariakit/core/utils/platform\";\nimport { useEffect } from \"react\";\nfunction getPaddingProperty(documentElement) {\n  const documentLeft = documentElement.getBoundingClientRect().left;\n  const scrollbarX = Math.round(documentLeft) + documentElement.scrollLeft;\n  return scrollbarX ? \"paddingLeft\" : \"paddingRight\";\n}\nfunction usePreventBodyScroll(contentElement, contentId, enabled) {\n  const isRootDialog = useRootDialog({\n    attribute: \"data-dialog-prevent-body-scroll\",\n    contentElement,\n    contentId,\n    enabled\n  });\n  useEffect(() => {\n    if (!isRootDialog()) return;\n    if (!contentElement) return;\n    const doc = getDocument(contentElement);\n    const win = getWindow(contentElement);\n    const { documentElement, body } = doc;\n    const cssScrollbarWidth = documentElement.style.getPropertyValue(\"--scrollbar-width\");\n    const scrollbarWidth = cssScrollbarWidth ? Number.parseInt(cssScrollbarWidth) : win.innerWidth - documentElement.clientWidth;\n    const setScrollbarWidthProperty = () => setCSSProperty(\n      documentElement,\n      \"--scrollbar-width\",\n      `${scrollbarWidth}px`\n    );\n    const paddingProperty = getPaddingProperty(documentElement);\n    const setStyle = () => assignStyle(body, {\n      overflow: \"hidden\",\n      [paddingProperty]: `${scrollbarWidth}px`\n    });\n    const setIOSStyle = () => {\n      var _a, _b;\n      const { scrollX, scrollY, visualViewport } = win;\n      const offsetLeft = (_a = visualViewport == null ? void 0 : visualViewport.offsetLeft) != null ? _a : 0;\n      const offsetTop = (_b = visualViewport == null ? void 0 : visualViewport.offsetTop) != null ? _b : 0;\n      const restoreStyle = assignStyle(body, {\n        position: \"fixed\",\n        overflow: \"hidden\",\n        top: `${-(scrollY - Math.floor(offsetTop))}px`,\n        left: `${-(scrollX - Math.floor(offsetLeft))}px`,\n        right: \"0\",\n        [paddingProperty]: `${scrollbarWidth}px`\n      });\n      return () => {\n        restoreStyle();\n        if (process.env.NODE_ENV !== \"test\") {\n          win.scrollTo({ left: scrollX, top: scrollY, behavior: \"instant\" });\n        }\n      };\n    };\n    const isIOS = isApple() && !isMac();\n    return chain(\n      setScrollbarWidthProperty(),\n      isIOS ? setIOSStyle() : setStyle()\n    );\n  }, [isRootDialog, contentElement]);\n}\n\nexport {\n  usePreventBodyScroll\n};\n","\"use client\";\n\n// src/dialog/utils/is-focus-trap.ts\nfunction isFocusTrap(element, ...ids) {\n  if (!element) return false;\n  const attr = element.getAttribute(\"data-focus-trap\");\n  if (attr == null) return false;\n  if (!ids.length) return true;\n  if (attr === \"\") return false;\n  return ids.some((id) => attr === id);\n}\n\nexport {\n  isFocusTrap\n};\n","\"use client\";\n\n// src/dialog/utils/supports-inert.ts\nfunction supportsInert() {\n  return \"inert\" in HTMLElement.prototype;\n}\n\nexport {\n  supportsInert\n};\n","\"use client\";\nimport {\n  walkTreeOutside\n} from \"./AOUGVQZ3.js\";\nimport {\n  setAttribute\n} from \"./K2ZF5NU7.js\";\nimport {\n  isBackdrop\n} from \"./63XF7ACK.js\";\n\n// src/dialog/utils/disable-accessibility-tree-outside.ts\nfunction hideElementFromAccessibilityTree(element) {\n  return setAttribute(element, \"aria-hidden\", \"true\");\n}\nfunction disableAccessibilityTreeOutside(id, elements) {\n  const cleanups = [];\n  const ids = elements.map((el) => el == null ? void 0 : el.id);\n  walkTreeOutside(id, elements, (element) => {\n    if (isBackdrop(element, ...ids)) return;\n    cleanups.unshift(hideElementFromAccessibilityTree(element));\n  });\n  const restoreAccessibilityTree = () => {\n    for (const cleanup of cleanups) {\n      cleanup();\n    }\n  };\n  return restoreAccessibilityTree;\n}\n\nexport {\n  hideElementFromAccessibilityTree,\n  disableAccessibilityTreeOutside\n};\n","\"use client\";\nimport {\n  isFocusTrap\n} from \"./IGR4SXG2.js\";\nimport {\n  supportsInert\n} from \"./677M2CI3.js\";\nimport {\n  hideElementFromAccessibilityTree\n} from \"./S7U6BLGA.js\";\nimport {\n  walkTreeOutside\n} from \"./AOUGVQZ3.js\";\nimport {\n  assignStyle,\n  orchestrate,\n  setAttribute,\n  setProperty\n} from \"./K2ZF5NU7.js\";\nimport {\n  isBackdrop\n} from \"./63XF7ACK.js\";\n\n// src/dialog/utils/disable-tree.ts\nimport { contains } from \"@ariakit/core/utils/dom\";\nimport { getAllTabbableIn } from \"@ariakit/core/utils/focus\";\nimport { chain, noop } from \"@ariakit/core/utils/misc\";\nfunction disableTree(element, ignoredElements) {\n  if (!(\"style\" in element)) return noop;\n  if (supportsInert()) {\n    return setProperty(element, \"inert\", true);\n  }\n  const tabbableElements = getAllTabbableIn(element, true);\n  const enableElements = tabbableElements.map((element2) => {\n    if (ignoredElements == null ? void 0 : ignoredElements.some((el) => el && contains(el, element2))) return noop;\n    const restoreFocusMethod = orchestrate(element2, \"focus\", () => {\n      element2.focus = noop;\n      return () => {\n        delete element2.focus;\n      };\n    });\n    return chain(setAttribute(element2, \"tabindex\", \"-1\"), restoreFocusMethod);\n  });\n  return chain(\n    ...enableElements,\n    hideElementFromAccessibilityTree(element),\n    assignStyle(element, {\n      pointerEvents: \"none\",\n      userSelect: \"none\",\n      cursor: \"default\"\n    })\n  );\n}\nfunction disableTreeOutside(id, elements) {\n  const cleanups = [];\n  const ids = elements.map((el) => el == null ? void 0 : el.id);\n  walkTreeOutside(\n    id,\n    elements,\n    (element) => {\n      if (isBackdrop(element, ...ids)) return;\n      if (isFocusTrap(element, ...ids)) return;\n      cleanups.unshift(disableTree(element, elements));\n    },\n    (element) => {\n      if (!element.hasAttribute(\"role\")) return;\n      if (elements.some((el) => el && contains(el, element))) return;\n      cleanups.unshift(setAttribute(element, \"role\", \"none\"));\n    }\n  );\n  const restoreTreeOutside = () => {\n    for (const cleanup of cleanups) {\n      cleanup();\n    }\n  };\n  return restoreTreeOutside;\n}\n\nexport {\n  disableTree,\n  disableTreeOutside\n};\n","\"use client\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\n\n// src/role/role.tsx\nvar TagName = \"div\";\nvar elements = [\n  \"a\",\n  \"button\",\n  \"details\",\n  \"dialog\",\n  \"div\",\n  \"form\",\n  \"h1\",\n  \"h2\",\n  \"h3\",\n  \"h4\",\n  \"h5\",\n  \"h6\",\n  \"header\",\n  \"img\",\n  \"input\",\n  \"label\",\n  \"li\",\n  \"nav\",\n  \"ol\",\n  \"p\",\n  \"section\",\n  \"select\",\n  \"span\",\n  \"summary\",\n  \"textarea\",\n  \"ul\",\n  \"svg\"\n];\nvar useRole = createHook(\n  function useRole2(props) {\n    return props;\n  }\n);\nvar Role = forwardRef(\n  // @ts-expect-error\n  function Role2(props) {\n    return createElement(TagName, props);\n  }\n);\nObject.assign(\n  Role,\n  elements.reduce((acc, element) => {\n    acc[element] = forwardRef(function Role3(props) {\n      return createElement(element, props);\n    });\n    return acc;\n  }, {})\n);\n\nexport {\n  useRole,\n  Role\n};\n","\"use client\";\nimport {\n  markAncestor\n} from \"./3NDVDEB4.js\";\nimport {\n  useDisclosureContent\n} from \"./K4R5DNTX.js\";\nimport {\n  useDisclosureStore\n} from \"./T22PY7TE.js\";\nimport {\n  Role\n} from \"./QJ4LGO2N.js\";\nimport {\n  useStoreState\n} from \"./RTNCFSKZ.js\";\nimport {\n  useSafeLayoutEffect\n} from \"./5GGHRIN3.js\";\nimport {\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/dialog/dialog-backdrop.tsx\nimport { isValidElement, useEffect, useRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction DialogBackdrop({\n  store,\n  backdrop,\n  alwaysVisible,\n  hidden\n}) {\n  const ref = useRef(null);\n  const disclosure = useDisclosureStore({ disclosure: store });\n  const contentElement = useStoreState(store, \"contentElement\");\n  useEffect(() => {\n    const backdrop2 = ref.current;\n    const dialog = contentElement;\n    if (!backdrop2) return;\n    if (!dialog) return;\n    backdrop2.style.zIndex = getComputedStyle(dialog).zIndex;\n  }, [contentElement]);\n  useSafeLayoutEffect(() => {\n    const id = contentElement == null ? void 0 : contentElement.id;\n    if (!id) return;\n    const backdrop2 = ref.current;\n    if (!backdrop2) return;\n    return markAncestor(backdrop2, id);\n  }, [contentElement]);\n  const props = useDisclosureContent({\n    ref,\n    store: disclosure,\n    role: \"presentation\",\n    \"data-backdrop\": (contentElement == null ? void 0 : contentElement.id) || \"\",\n    alwaysVisible,\n    hidden: hidden != null ? hidden : void 0,\n    style: {\n      position: \"fixed\",\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    }\n  });\n  if (!backdrop) return null;\n  if (isValidElement(backdrop)) {\n    return /* @__PURE__ */ jsx(Role, __spreadProps(__spreadValues({}, props), { render: backdrop }));\n  }\n  const Component = typeof backdrop !== \"boolean\" ? backdrop : \"div\";\n  return /* @__PURE__ */ jsx(Role, __spreadProps(__spreadValues({}, props), { render: /* @__PURE__ */ jsx(Component, {}) }));\n}\n\nexport {\n  DialogBackdrop\n};\n","\"use client\";\nimport {\n  createDisclosureStore\n} from \"./RCQ5P4YE.js\";\n\n// src/dialog/dialog-store.ts\nfunction createDialogStore(props = {}) {\n  return createDisclosureStore(props);\n}\n\nexport {\n  createDialogStore\n};\n","\"use client\";\nimport {\n  useDisclosureStoreProps\n} from \"./T22PY7TE.js\";\nimport {\n  useStore\n} from \"./RTNCFSKZ.js\";\n\n// src/dialog/dialog-store.ts\nimport * as Core from \"@ariakit/core/dialog/dialog-store\";\nfunction useDialogStoreProps(store, update, props) {\n  return useDisclosureStoreProps(store, update, props);\n}\nfunction useDialogStore(props = {}) {\n  const [store, update] = useStore(Core.createDialogStore, props);\n  return useDialogStoreProps(store, update, props);\n}\n\nexport {\n  useDialogStoreProps,\n  useDialogStore\n};\n","\"use client\";\nimport {\n  usePortal\n} from \"./M5DFOEFU.js\";\nimport {\n  HeadingLevel\n} from \"./5M6RIVE2.js\";\nimport {\n  useFocusableContainer\n} from \"./LC6GJMGV.js\";\nimport {\n  prependHiddenDismiss\n} from \"./6GXEOXGT.js\";\nimport {\n  useHideOnInteractOutside\n} from \"./JZEJYXOQ.js\";\nimport {\n  useNestedDialogs\n} from \"./PVECYOSC.js\";\nimport {\n  usePreventBodyScroll\n} from \"./SOMPWLIQ.js\";\nimport {\n  disableTree,\n  disableTreeOutside\n} from \"./Z5GCVBAY.js\";\nimport {\n  supportsInert\n} from \"./677M2CI3.js\";\nimport {\n  DialogBackdrop\n} from \"./FVE2C5B3.js\";\nimport {\n  isElementMarked,\n  markTreeOutside\n} from \"./3NDVDEB4.js\";\nimport {\n  createWalkTreeSnapshot\n} from \"./AOUGVQZ3.js\";\nimport {\n  isHidden,\n  useDisclosureContent\n} from \"./K4R5DNTX.js\";\nimport {\n  useDialogStore\n} from \"./Y2U4BRIM.js\";\nimport {\n  DialogDescriptionContext,\n  DialogHeadingContext,\n  DialogScopedContextProvider,\n  useDialogProviderContext\n} from \"./T2AZQXQU.js\";\nimport {\n  useFocusable\n} from \"./OE2EFRVA.js\";\nimport {\n  useStoreState\n} from \"./RTNCFSKZ.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useBooleanEvent,\n  useEvent,\n  useId,\n  useMergeRefs,\n  usePortalRef,\n  useSafeLayoutEffect,\n  useWrapElement\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/dialog/dialog.tsx\nimport {\n  contains,\n  getActiveElement,\n  getDocument,\n  getWindow,\n  isButton\n} from \"@ariakit/core/utils/dom\";\nimport {\n  addGlobalEventListener,\n  queueBeforeEvent\n} from \"@ariakit/core/utils/events\";\nimport {\n  focusIfNeeded,\n  getFirstTabbableIn,\n  isFocusable\n} from \"@ariakit/core/utils/focus\";\nimport { chain } from \"@ariakit/core/utils/misc\";\nimport { isSafari } from \"@ariakit/core/utils/platform\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar TagName = \"div\";\nvar isSafariBrowser = isSafari();\nfunction isAlreadyFocusingAnotherElement(dialog) {\n  const activeElement = getActiveElement();\n  if (!activeElement) return false;\n  if (dialog && contains(dialog, activeElement)) return false;\n  if (isFocusable(activeElement)) return true;\n  return false;\n}\nfunction getElementFromProp(prop, focusable = false) {\n  if (!prop) return null;\n  const element = \"current\" in prop ? prop.current : prop;\n  if (!element) return null;\n  if (focusable) return isFocusable(element) ? element : null;\n  return element;\n}\nvar useDialog = createHook(function useDialog2(_a) {\n  var _b = _a, {\n    store: storeProp,\n    open: openProp,\n    onClose,\n    focusable = true,\n    modal = true,\n    portal = !!modal,\n    backdrop = !!modal,\n    hideOnEscape = true,\n    hideOnInteractOutside = true,\n    getPersistentElements,\n    preventBodyScroll = !!modal,\n    autoFocusOnShow = true,\n    autoFocusOnHide = true,\n    initialFocus,\n    finalFocus,\n    unmountOnHide,\n    unstable_treeSnapshotKey\n  } = _b, props = __objRest(_b, [\n    \"store\",\n    \"open\",\n    \"onClose\",\n    \"focusable\",\n    \"modal\",\n    \"portal\",\n    \"backdrop\",\n    \"hideOnEscape\",\n    \"hideOnInteractOutside\",\n    \"getPersistentElements\",\n    \"preventBodyScroll\",\n    \"autoFocusOnShow\",\n    \"autoFocusOnHide\",\n    \"initialFocus\",\n    \"finalFocus\",\n    \"unmountOnHide\",\n    \"unstable_treeSnapshotKey\"\n  ]);\n  const context = useDialogProviderContext();\n  const ref = useRef(null);\n  const store = useDialogStore({\n    store: storeProp || context,\n    open: openProp,\n    setOpen(open2) {\n      if (open2) return;\n      const dialog = ref.current;\n      if (!dialog) return;\n      const event = new Event(\"close\", { bubbles: false, cancelable: true });\n      if (onClose) {\n        dialog.addEventListener(\"close\", onClose, { once: true });\n      }\n      dialog.dispatchEvent(event);\n      if (!event.defaultPrevented) return;\n      store.setOpen(true);\n    }\n  });\n  const { portalRef, domReady } = usePortalRef(portal, props.portalRef);\n  const preserveTabOrderProp = props.preserveTabOrder;\n  const preserveTabOrder = useStoreState(\n    store,\n    (state) => preserveTabOrderProp && !modal && state.mounted\n  );\n  const id = useId(props.id);\n  const open = useStoreState(store, \"open\");\n  const mounted = useStoreState(store, \"mounted\");\n  const contentElement = useStoreState(store, \"contentElement\");\n  const hidden = isHidden(mounted, props.hidden, props.alwaysVisible);\n  usePreventBodyScroll(contentElement, id, preventBodyScroll && !hidden);\n  useHideOnInteractOutside(store, hideOnInteractOutside, domReady);\n  const { wrapElement, nestedDialogs } = useNestedDialogs(store);\n  props = useWrapElement(props, wrapElement, [wrapElement]);\n  useSafeLayoutEffect(() => {\n    if (!open) return;\n    const dialog = ref.current;\n    const activeElement = getActiveElement(dialog, true);\n    if (!activeElement) return;\n    if (activeElement.tagName === \"BODY\") return;\n    if (dialog && contains(dialog, activeElement)) return;\n    store.setDisclosureElement(activeElement);\n  }, [store, open]);\n  if (isSafariBrowser) {\n    useEffect(() => {\n      if (!mounted) return;\n      const { disclosureElement } = store.getState();\n      if (!disclosureElement) return;\n      if (!isButton(disclosureElement)) return;\n      const onMouseDown = () => {\n        let receivedFocus = false;\n        const onFocus = () => {\n          receivedFocus = true;\n        };\n        const options = { capture: true, once: true };\n        disclosureElement.addEventListener(\"focusin\", onFocus, options);\n        queueBeforeEvent(disclosureElement, \"mouseup\", () => {\n          disclosureElement.removeEventListener(\"focusin\", onFocus, true);\n          if (receivedFocus) return;\n          focusIfNeeded(disclosureElement);\n        });\n      };\n      disclosureElement.addEventListener(\"mousedown\", onMouseDown);\n      return () => {\n        disclosureElement.removeEventListener(\"mousedown\", onMouseDown);\n      };\n    }, [store, mounted]);\n  }\n  useEffect(() => {\n    if (!mounted) return;\n    if (!domReady) return;\n    const dialog = ref.current;\n    if (!dialog) return;\n    const win = getWindow(dialog);\n    const viewport = win.visualViewport || win;\n    const setViewportHeight = () => {\n      var _a2, _b2;\n      const height = (_b2 = (_a2 = win.visualViewport) == null ? void 0 : _a2.height) != null ? _b2 : win.innerHeight;\n      dialog.style.setProperty(\"--dialog-viewport-height\", `${height}px`);\n    };\n    setViewportHeight();\n    viewport.addEventListener(\"resize\", setViewportHeight);\n    return () => {\n      viewport.removeEventListener(\"resize\", setViewportHeight);\n    };\n  }, [mounted, domReady]);\n  useEffect(() => {\n    if (!modal) return;\n    if (!mounted) return;\n    if (!domReady) return;\n    const dialog = ref.current;\n    if (!dialog) return;\n    const existingDismiss = dialog.querySelector(\"[data-dialog-dismiss]\");\n    if (existingDismiss) return;\n    return prependHiddenDismiss(dialog, store.hide);\n  }, [store, modal, mounted, domReady]);\n  useSafeLayoutEffect(() => {\n    if (!supportsInert()) return;\n    if (open) return;\n    if (!mounted) return;\n    if (!domReady) return;\n    const dialog = ref.current;\n    if (!dialog) return;\n    return disableTree(dialog);\n  }, [open, mounted, domReady]);\n  const canTakeTreeSnapshot = open && domReady;\n  useSafeLayoutEffect(() => {\n    if (!id) return;\n    if (!canTakeTreeSnapshot) return;\n    const dialog = ref.current;\n    return createWalkTreeSnapshot(id, [dialog]);\n  }, [id, canTakeTreeSnapshot, unstable_treeSnapshotKey]);\n  const getPersistentElementsProp = useEvent(getPersistentElements);\n  useSafeLayoutEffect(() => {\n    if (!id) return;\n    if (!canTakeTreeSnapshot) return;\n    const { disclosureElement } = store.getState();\n    const dialog = ref.current;\n    const persistentElements = getPersistentElementsProp() || [];\n    const allElements = [\n      dialog,\n      ...persistentElements,\n      ...nestedDialogs.map((dialog2) => dialog2.getState().contentElement)\n    ];\n    if (modal) {\n      return chain(\n        markTreeOutside(id, allElements),\n        disableTreeOutside(id, allElements)\n      );\n    }\n    return markTreeOutside(id, [disclosureElement, ...allElements]);\n  }, [\n    id,\n    store,\n    canTakeTreeSnapshot,\n    getPersistentElementsProp,\n    nestedDialogs,\n    modal,\n    unstable_treeSnapshotKey\n  ]);\n  const mayAutoFocusOnShow = !!autoFocusOnShow;\n  const autoFocusOnShowProp = useBooleanEvent(autoFocusOnShow);\n  const [autoFocusEnabled, setAutoFocusEnabled] = useState(false);\n  useEffect(() => {\n    if (!open) return;\n    if (!mayAutoFocusOnShow) return;\n    if (!domReady) return;\n    if (!(contentElement == null ? void 0 : contentElement.isConnected)) return;\n    const element = getElementFromProp(initialFocus, true) || // If no initial focus is specified, we try to focus the first element\n    // with the autofocus attribute. If it's an Ariakit component, the\n    // Focusable component will consume the autoFocus prop and add the\n    // data-autofocus attribute to the element instead.\n    contentElement.querySelector(\n      \"[data-autofocus=true],[autofocus]\"\n    ) || // We have to fallback to the first focusable element otherwise portaled\n    // dialogs with preserveTabOrder set to true will not receive focus\n    // properly because the elements aren't tabbable until the dialog receives\n    // focus.\n    getFirstTabbableIn(contentElement, true, portal && preserveTabOrder) || // Finally, we fallback to the dialog element itself.\n    contentElement;\n    const isElementFocusable = isFocusable(element);\n    if (!autoFocusOnShowProp(isElementFocusable ? element : null)) return;\n    setAutoFocusEnabled(true);\n    queueMicrotask(() => {\n      element.focus();\n      if (!isSafariBrowser) return;\n      if (!isElementFocusable) return;\n      element.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n    });\n  }, [\n    open,\n    mayAutoFocusOnShow,\n    domReady,\n    contentElement,\n    initialFocus,\n    portal,\n    preserveTabOrder,\n    autoFocusOnShowProp\n  ]);\n  const mayAutoFocusOnHide = !!autoFocusOnHide;\n  const autoFocusOnHideProp = useBooleanEvent(autoFocusOnHide);\n  const [hasOpened, setHasOpened] = useState(false);\n  useEffect(() => {\n    if (!open) return;\n    setHasOpened(true);\n    return () => setHasOpened(false);\n  }, [open]);\n  const focusOnHide = useCallback(\n    (dialog, retry = true) => {\n      const { disclosureElement } = store.getState();\n      if (isAlreadyFocusingAnotherElement(dialog)) return;\n      let element = getElementFromProp(finalFocus) || disclosureElement;\n      if (element == null ? void 0 : element.id) {\n        const doc = getDocument(element);\n        const selector = `[aria-activedescendant=\"${element.id}\"]`;\n        const composite = doc.querySelector(selector);\n        if (composite) {\n          element = composite;\n        }\n      }\n      if (element && !isFocusable(element)) {\n        const maybeParentDialog = element.closest(\"[data-dialog]\");\n        if (maybeParentDialog == null ? void 0 : maybeParentDialog.id) {\n          const doc = getDocument(maybeParentDialog);\n          const selector = `[aria-controls~=\"${maybeParentDialog.id}\"]`;\n          const control = doc.querySelector(selector);\n          if (control) {\n            element = control;\n          }\n        }\n      }\n      const isElementFocusable = element && isFocusable(element);\n      if (!isElementFocusable && retry) {\n        requestAnimationFrame(() => focusOnHide(dialog, false));\n        return;\n      }\n      if (!autoFocusOnHideProp(isElementFocusable ? element : null)) return;\n      if (!isElementFocusable) return;\n      element == null ? void 0 : element.focus({ preventScroll: true });\n    },\n    [store, finalFocus, autoFocusOnHideProp]\n  );\n  const focusedOnHideRef = useRef(false);\n  useSafeLayoutEffect(() => {\n    if (open) return;\n    if (!hasOpened) return;\n    if (!mayAutoFocusOnHide) return;\n    const dialog = ref.current;\n    focusedOnHideRef.current = true;\n    focusOnHide(dialog);\n  }, [open, hasOpened, domReady, mayAutoFocusOnHide, focusOnHide]);\n  useEffect(() => {\n    if (!hasOpened) return;\n    if (!mayAutoFocusOnHide) return;\n    const dialog = ref.current;\n    return () => {\n      if (focusedOnHideRef.current) {\n        focusedOnHideRef.current = false;\n        return;\n      }\n      focusOnHide(dialog);\n    };\n  }, [hasOpened, mayAutoFocusOnHide, focusOnHide]);\n  const hideOnEscapeProp = useBooleanEvent(hideOnEscape);\n  useEffect(() => {\n    if (!domReady) return;\n    if (!mounted) return;\n    const onKeyDown = (event) => {\n      if (event.key !== \"Escape\") return;\n      if (event.defaultPrevented) return;\n      const dialog = ref.current;\n      if (!dialog) return;\n      if (isElementMarked(dialog)) return;\n      const target = event.target;\n      if (!target) return;\n      const { disclosureElement } = store.getState();\n      const isValidTarget = () => {\n        if (target.tagName === \"BODY\") return true;\n        if (contains(dialog, target)) return true;\n        if (!disclosureElement) return true;\n        if (contains(disclosureElement, target)) return true;\n        return false;\n      };\n      if (!isValidTarget()) return;\n      if (!hideOnEscapeProp(event)) return;\n      store.hide();\n    };\n    return addGlobalEventListener(\"keydown\", onKeyDown, true);\n  }, [store, domReady, mounted, hideOnEscapeProp]);\n  props = useWrapElement(\n    props,\n    (element) => /* @__PURE__ */ jsx(HeadingLevel, { level: modal ? 1 : void 0, children: element }),\n    [modal]\n  );\n  const hiddenProp = props.hidden;\n  const alwaysVisible = props.alwaysVisible;\n  props = useWrapElement(\n    props,\n    (element) => {\n      if (!backdrop) return element;\n      return /* @__PURE__ */ jsxs(Fragment, { children: [\n        /* @__PURE__ */ jsx(\n          DialogBackdrop,\n          {\n            store,\n            backdrop,\n            hidden: hiddenProp,\n            alwaysVisible\n          }\n        ),\n        element\n      ] });\n    },\n    [store, backdrop, hiddenProp, alwaysVisible]\n  );\n  const [headingId, setHeadingId] = useState();\n  const [descriptionId, setDescriptionId] = useState();\n  props = useWrapElement(\n    props,\n    (element) => /* @__PURE__ */ jsx(DialogScopedContextProvider, { value: store, children: /* @__PURE__ */ jsx(DialogHeadingContext.Provider, { value: setHeadingId, children: /* @__PURE__ */ jsx(DialogDescriptionContext.Provider, { value: setDescriptionId, children: element }) }) }),\n    [store]\n  );\n  props = __spreadProps(__spreadValues({\n    id,\n    \"data-dialog\": \"\",\n    role: \"dialog\",\n    tabIndex: focusable ? -1 : void 0,\n    \"aria-labelledby\": headingId,\n    \"aria-describedby\": descriptionId\n  }, props), {\n    ref: useMergeRefs(ref, props.ref)\n  });\n  props = useFocusableContainer(__spreadProps(__spreadValues({}, props), {\n    autoFocusOnShow: autoFocusEnabled\n  }));\n  props = useDisclosureContent(__spreadValues({ store }, props));\n  props = useFocusable(__spreadProps(__spreadValues({}, props), { focusable }));\n  props = usePortal(__spreadProps(__spreadValues({ portal }, props), { portalRef, preserveTabOrder }));\n  return props;\n});\nfunction createDialogComponent(Component, useProviderContext = useDialogProviderContext) {\n  return forwardRef(function DialogComponent(props) {\n    const context = useProviderContext();\n    const store = props.store || context;\n    const mounted = useStoreState(\n      store,\n      (state) => !props.unmountOnHide || (state == null ? void 0 : state.mounted) || !!props.open\n    );\n    if (!mounted) return null;\n    return /* @__PURE__ */ jsx(Component, __spreadValues({}, props));\n  });\n}\nvar Dialog = createDialogComponent(\n  forwardRef(function Dialog2(props) {\n    const htmlProps = useDialog(props);\n    return createElement(TagName, htmlProps);\n  }),\n  useDialogProviderContext\n);\n\nexport {\n  useDialog,\n  createDialogComponent,\n  Dialog\n};\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n  return yAxisSides.has(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rlPlacement : lrPlacement;\n      return isStart ? lrPlacement : rlPlacement;\n    case 'left':\n    case 'right':\n      return isStart ? tbPlacement : btPlacement;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n          if (!ignoreCrossAxisOverflow ||\n          // We leave the current main axis only if every placement on that axis\n          // overflows the main axis.\n          overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n            // Try next placement and re-run the lifecycle.\n            return {\n              data: {\n                index: nextIndex,\n                overflows: overflowsData\n              },\n              reset: {\n                placement: nextPlacement\n              }\n            };\n          }\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = originSides.has(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = originSides.has(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      var _state$middlewareData, _state$middlewareData2;\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n  return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n  return topLayerSelectors.some(selector => {\n    try {\n      return element.matches(selector);\n    } catch (_e) {\n      return false;\n    }\n  });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n  const webkit = isWebKit();\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n  return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n  return lastTraversableNodeNames.has(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle$1(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle$1(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle$1(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  const windowScrollbarX = getWindowScrollBarX(html);\n  // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n  // visual width of the <html> but this is not considered in the size\n  // of `html.clientWidth`.\n  if (windowScrollbarX <= 0) {\n    const doc = html.ownerDocument;\n    const body = doc.body;\n    const bodyStyles = getComputedStyle(body);\n    const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n    const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n    if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n      width -= clippingStableScrollbarWidth;\n    }\n  } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n    // If the <body> scrollbar is on the left, the width needs to be extended\n    // by the scrollbar amount so there isn't extra space on the right.\n    width += windowScrollbarX;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle$1(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n\n  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n  // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n  function setLeftRTLScrollbarOffset() {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      setLeftRTLScrollbarOffset();\n    }\n  }\n  if (isFixed && !isOffsetParentAnElement && documentElement) {\n    setLeftRTLScrollbarOffset();\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const elementRectForRootMargin = element.getBoundingClientRect();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = elementRectForRootMargin;\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        // It's possible that even though the ratio is reported as 1, the\n        // element is not actually fully within the IntersectionObserver's root\n        // area anymore. This can happen under performance constraints. This may\n        // be a bug in the browser's IntersectionObserver implementation. To\n        // work around this, we compare the element's bounding rect now with\n        // what it was at the time we created the IntersectionObserver. If they\n        // are not equal then the element moved, so we refresh.\n        refresh();\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (_e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","\"use client\";\nimport {\n  createDialogComponent,\n  useDialog\n} from \"./CAGBPNDP.js\";\nimport {\n  PopoverScopedContextProvider,\n  usePopoverProviderContext\n} from \"./Y67KZUMI.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useEvent,\n  usePortalRef,\n  useSafeLayoutEffect,\n  useWrapElement\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/popover/popover.tsx\nimport { invariant } from \"@ariakit/core/utils/misc\";\nimport {\n  arrow,\n  autoUpdate,\n  computePosition,\n  flip,\n  limitShift,\n  offset,\n  shift,\n  size\n} from \"@floating-ui/dom\";\nimport { useRef, useState } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TagName = \"div\";\nfunction createDOMRect(x = 0, y = 0, width = 0, height = 0) {\n  if (typeof DOMRect === \"function\") {\n    return new DOMRect(x, y, width, height);\n  }\n  const rect = {\n    x,\n    y,\n    width,\n    height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x\n  };\n  return __spreadProps(__spreadValues({}, rect), { toJSON: () => rect });\n}\nfunction getDOMRect(anchorRect) {\n  if (!anchorRect) return createDOMRect();\n  const { x, y, width, height } = anchorRect;\n  return createDOMRect(x, y, width, height);\n}\nfunction getAnchorElement(anchorElement, getAnchorRect) {\n  const contextElement = anchorElement || void 0;\n  return {\n    contextElement,\n    getBoundingClientRect: () => {\n      const anchor = anchorElement;\n      const anchorRect = getAnchorRect == null ? void 0 : getAnchorRect(anchor);\n      if (anchorRect || !anchor) {\n        return getDOMRect(anchorRect);\n      }\n      return anchor.getBoundingClientRect();\n    }\n  };\n}\nfunction isValidPlacement(flip2) {\n  return /^(?:top|bottom|left|right)(?:-(?:start|end))?$/.test(flip2);\n}\nfunction roundByDPR(value) {\n  const dpr = window.devicePixelRatio || 1;\n  return Math.round(value * dpr) / dpr;\n}\nfunction getOffsetMiddleware(arrowElement, props) {\n  return offset(({ placement }) => {\n    var _a;\n    const arrowOffset = ((arrowElement == null ? void 0 : arrowElement.clientHeight) || 0) / 2;\n    const finalGutter = typeof props.gutter === \"number\" ? props.gutter + arrowOffset : (_a = props.gutter) != null ? _a : arrowOffset;\n    const hasAlignment = !!placement.split(\"-\")[1];\n    return {\n      crossAxis: !hasAlignment ? props.shift : void 0,\n      mainAxis: finalGutter,\n      alignmentAxis: props.shift\n    };\n  });\n}\nfunction getFlipMiddleware(props) {\n  if (props.flip === false) return;\n  const fallbackPlacements = typeof props.flip === \"string\" ? props.flip.split(\" \") : void 0;\n  invariant(\n    !fallbackPlacements || fallbackPlacements.every(isValidPlacement),\n    process.env.NODE_ENV !== \"production\" && \"`flip` expects a spaced-delimited list of placements\"\n  );\n  return flip({\n    padding: props.overflowPadding,\n    fallbackPlacements\n  });\n}\nfunction getShiftMiddleware(props) {\n  if (!props.slide && !props.overlap) return;\n  return shift({\n    mainAxis: props.slide,\n    crossAxis: props.overlap,\n    padding: props.overflowPadding,\n    limiter: limitShift()\n  });\n}\nfunction getSizeMiddleware(props) {\n  return size({\n    padding: props.overflowPadding,\n    apply({ elements, availableWidth, availableHeight, rects }) {\n      const wrapper = elements.floating;\n      const referenceWidth = Math.round(rects.reference.width);\n      availableWidth = Math.floor(availableWidth);\n      availableHeight = Math.floor(availableHeight);\n      wrapper.style.setProperty(\n        \"--popover-anchor-width\",\n        `${referenceWidth}px`\n      );\n      wrapper.style.setProperty(\n        \"--popover-available-width\",\n        `${availableWidth}px`\n      );\n      wrapper.style.setProperty(\n        \"--popover-available-height\",\n        `${availableHeight}px`\n      );\n      if (props.sameWidth) {\n        wrapper.style.width = `${referenceWidth}px`;\n      }\n      if (props.fitViewport) {\n        wrapper.style.maxWidth = `${availableWidth}px`;\n        wrapper.style.maxHeight = `${availableHeight}px`;\n      }\n    }\n  });\n}\nfunction getArrowMiddleware(arrowElement, props) {\n  if (!arrowElement) return;\n  return arrow({\n    element: arrowElement,\n    padding: props.arrowPadding\n  });\n}\nvar usePopover = createHook(\n  function usePopover2(_a) {\n    var _b = _a, {\n      store,\n      modal = false,\n      portal = !!modal,\n      preserveTabOrder = true,\n      autoFocusOnShow = true,\n      wrapperProps,\n      fixed = false,\n      flip: flip2 = true,\n      shift: shift2 = 0,\n      slide = true,\n      overlap = false,\n      sameWidth = false,\n      fitViewport = false,\n      gutter,\n      arrowPadding = 4,\n      overflowPadding = 8,\n      getAnchorRect,\n      updatePosition\n    } = _b, props = __objRest(_b, [\n      \"store\",\n      \"modal\",\n      \"portal\",\n      \"preserveTabOrder\",\n      \"autoFocusOnShow\",\n      \"wrapperProps\",\n      \"fixed\",\n      \"flip\",\n      \"shift\",\n      \"slide\",\n      \"overlap\",\n      \"sameWidth\",\n      \"fitViewport\",\n      \"gutter\",\n      \"arrowPadding\",\n      \"overflowPadding\",\n      \"getAnchorRect\",\n      \"updatePosition\"\n    ]);\n    const context = usePopoverProviderContext();\n    store = store || context;\n    invariant(\n      store,\n      process.env.NODE_ENV !== \"production\" && \"Popover must receive a `store` prop or be wrapped in a PopoverProvider component.\"\n    );\n    const arrowElement = store.useState(\"arrowElement\");\n    const anchorElement = store.useState(\"anchorElement\");\n    const disclosureElement = store.useState(\"disclosureElement\");\n    const popoverElement = store.useState(\"popoverElement\");\n    const contentElement = store.useState(\"contentElement\");\n    const placement = store.useState(\"placement\");\n    const mounted = store.useState(\"mounted\");\n    const rendered = store.useState(\"rendered\");\n    const defaultArrowElementRef = useRef(null);\n    const [positioned, setPositioned] = useState(false);\n    const { portalRef, domReady } = usePortalRef(portal, props.portalRef);\n    const getAnchorRectProp = useEvent(getAnchorRect);\n    const updatePositionProp = useEvent(updatePosition);\n    const hasCustomUpdatePosition = !!updatePosition;\n    useSafeLayoutEffect(() => {\n      if (!(popoverElement == null ? void 0 : popoverElement.isConnected)) return;\n      popoverElement.style.setProperty(\n        \"--popover-overflow-padding\",\n        `${overflowPadding}px`\n      );\n      const anchor = getAnchorElement(anchorElement, getAnchorRectProp);\n      const updatePosition2 = async () => {\n        if (!mounted) return;\n        if (!arrowElement) {\n          defaultArrowElementRef.current = defaultArrowElementRef.current || document.createElement(\"div\");\n        }\n        const arrow2 = arrowElement || defaultArrowElementRef.current;\n        const middleware = [\n          getOffsetMiddleware(arrow2, { gutter, shift: shift2 }),\n          getFlipMiddleware({ flip: flip2, overflowPadding }),\n          getShiftMiddleware({ slide, shift: shift2, overlap, overflowPadding }),\n          getArrowMiddleware(arrow2, { arrowPadding }),\n          getSizeMiddleware({\n            sameWidth,\n            fitViewport,\n            overflowPadding\n          })\n        ];\n        const pos = await computePosition(anchor, popoverElement, {\n          placement,\n          strategy: fixed ? \"fixed\" : \"absolute\",\n          middleware\n        });\n        store == null ? void 0 : store.setState(\"currentPlacement\", pos.placement);\n        setPositioned(true);\n        const x = roundByDPR(pos.x);\n        const y = roundByDPR(pos.y);\n        Object.assign(popoverElement.style, {\n          top: \"0\",\n          left: \"0\",\n          transform: `translate3d(${x}px,${y}px,0)`\n        });\n        if (arrow2 && pos.middlewareData.arrow) {\n          const { x: arrowX, y: arrowY } = pos.middlewareData.arrow;\n          const side = pos.placement.split(\"-\")[0];\n          const centerX = arrow2.clientWidth / 2;\n          const centerY = arrow2.clientHeight / 2;\n          const originX = arrowX != null ? arrowX + centerX : -centerX;\n          const originY = arrowY != null ? arrowY + centerY : -centerY;\n          popoverElement.style.setProperty(\n            \"--popover-transform-origin\",\n            {\n              top: `${originX}px calc(100% + ${centerY}px)`,\n              bottom: `${originX}px ${-centerY}px`,\n              left: `calc(100% + ${centerX}px) ${originY}px`,\n              right: `${-centerX}px ${originY}px`\n            }[side]\n          );\n          Object.assign(arrow2.style, {\n            left: arrowX != null ? `${arrowX}px` : \"\",\n            top: arrowY != null ? `${arrowY}px` : \"\",\n            [side]: \"100%\"\n          });\n        }\n      };\n      const update = async () => {\n        if (hasCustomUpdatePosition) {\n          await updatePositionProp({ updatePosition: updatePosition2 });\n          setPositioned(true);\n        } else {\n          await updatePosition2();\n        }\n      };\n      const cancelAutoUpdate = autoUpdate(anchor, popoverElement, update, {\n        // JSDOM doesn't support ResizeObserver\n        elementResize: typeof ResizeObserver === \"function\"\n      });\n      return () => {\n        setPositioned(false);\n        cancelAutoUpdate();\n      };\n    }, [\n      store,\n      rendered,\n      popoverElement,\n      arrowElement,\n      anchorElement,\n      popoverElement,\n      placement,\n      mounted,\n      domReady,\n      fixed,\n      flip2,\n      shift2,\n      slide,\n      overlap,\n      sameWidth,\n      fitViewport,\n      gutter,\n      arrowPadding,\n      overflowPadding,\n      getAnchorRectProp,\n      hasCustomUpdatePosition,\n      updatePositionProp\n    ]);\n    useSafeLayoutEffect(() => {\n      if (!mounted) return;\n      if (!domReady) return;\n      if (!(popoverElement == null ? void 0 : popoverElement.isConnected)) return;\n      if (!(contentElement == null ? void 0 : contentElement.isConnected)) return;\n      const applyZIndex = () => {\n        popoverElement.style.zIndex = getComputedStyle(contentElement).zIndex;\n      };\n      applyZIndex();\n      let raf = requestAnimationFrame(() => {\n        raf = requestAnimationFrame(applyZIndex);\n      });\n      return () => cancelAnimationFrame(raf);\n    }, [mounted, domReady, popoverElement, contentElement]);\n    const position = fixed ? \"fixed\" : \"absolute\";\n    props = useWrapElement(\n      props,\n      (element) => /* @__PURE__ */ jsx(\n        \"div\",\n        __spreadProps(__spreadValues({}, wrapperProps), {\n          style: __spreadValues({\n            // https://floating-ui.com/docs/computeposition#initial-layout\n            position,\n            top: 0,\n            left: 0,\n            width: \"max-content\"\n          }, wrapperProps == null ? void 0 : wrapperProps.style),\n          ref: store == null ? void 0 : store.setPopoverElement,\n          children: element\n        })\n      ),\n      [store, position, wrapperProps]\n    );\n    props = useWrapElement(\n      props,\n      (element) => /* @__PURE__ */ jsx(PopoverScopedContextProvider, { value: store, children: element }),\n      [store]\n    );\n    props = __spreadProps(__spreadValues({\n      // data-placing is not part of the public API. We're setting this here so\n      // we can wait for the popover to be positioned before other components\n      // move focus into it. For example, this attribute is observed by the\n      // Combobox component with the autoSelect behavior.\n      \"data-placing\": !positioned || void 0\n    }, props), {\n      style: __spreadValues({\n        position: \"relative\"\n      }, props.style)\n    });\n    props = useDialog(__spreadProps(__spreadValues({\n      store,\n      modal,\n      portal,\n      preserveTabOrder,\n      preserveTabOrderAnchor: disclosureElement || anchorElement,\n      autoFocusOnShow: positioned && autoFocusOnShow\n    }, props), {\n      portalRef\n    }));\n    return props;\n  }\n);\nvar Popover = createDialogComponent(\n  forwardRef(function Popover2(props) {\n    const htmlProps = usePopover(props);\n    return createElement(TagName, htmlProps);\n  }),\n  usePopoverProviderContext\n);\n\nexport {\n  usePopover,\n  Popover\n};\n","\"use client\";\nimport {\n  getElementPolygon,\n  getEventPoint,\n  isPointInPolygon\n} from \"./X7QOZUD3.js\";\nimport {\n  HovercardScopedContextProvider,\n  useHovercardProviderContext\n} from \"./7Z7JH52O.js\";\nimport {\n  usePopover\n} from \"./C6DAL6ZN.js\";\nimport {\n  createDialogComponent\n} from \"./CAGBPNDP.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useBooleanEvent,\n  useEvent,\n  useIsMouseMoving,\n  useLiveRef,\n  useMergeRefs,\n  usePortalRef,\n  useSafeLayoutEffect,\n  useWrapElement\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/hovercard/hovercard.tsx\nimport { contains } from \"@ariakit/core/utils/dom\";\nimport { addGlobalEventListener } from \"@ariakit/core/utils/events\";\nimport { hasFocusWithin } from \"@ariakit/core/utils/focus\";\nimport {\n  chain,\n  invariant,\n  isFalsyBooleanCallback\n} from \"@ariakit/core/utils/misc\";\nimport { sync } from \"@ariakit/core/utils/store\";\nimport {\n  createContext,\n  useCallback,\n  useContext,\n  useEffect,\n  useRef,\n  useState\n} from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TagName = \"div\";\nfunction isMovingOnHovercard(target, card, anchor, nested) {\n  if (hasFocusWithin(card)) return true;\n  if (!target) return false;\n  if (contains(card, target)) return true;\n  if (anchor && contains(anchor, target)) return true;\n  if (nested == null ? void 0 : nested.some((card2) => isMovingOnHovercard(target, card2, anchor))) {\n    return true;\n  }\n  return false;\n}\nfunction useAutoFocusOnHide(_a) {\n  var _b = _a, {\n    store\n  } = _b, props = __objRest(_b, [\n    \"store\"\n  ]);\n  const [autoFocusOnHide, setAutoFocusOnHide] = useState(false);\n  const mounted = store.useState(\"mounted\");\n  useEffect(() => {\n    if (!mounted) {\n      setAutoFocusOnHide(false);\n    }\n  }, [mounted]);\n  const onFocusProp = props.onFocus;\n  const onFocus = useEvent((event) => {\n    onFocusProp == null ? void 0 : onFocusProp(event);\n    if (event.defaultPrevented) return;\n    setAutoFocusOnHide(true);\n  });\n  const finalFocusRef = useRef(null);\n  useEffect(() => {\n    return sync(store, [\"anchorElement\"], (state) => {\n      finalFocusRef.current = state.anchorElement;\n    });\n  }, []);\n  props = __spreadProps(__spreadValues({\n    autoFocusOnHide,\n    finalFocus: finalFocusRef\n  }, props), {\n    onFocus\n  });\n  return props;\n}\nvar NestedHovercardContext = createContext(null);\nvar useHovercard = createHook(\n  function useHovercard2(_a) {\n    var _b = _a, {\n      store,\n      modal = false,\n      portal = !!modal,\n      hideOnEscape = true,\n      hideOnHoverOutside = true,\n      disablePointerEventsOnApproach = !!hideOnHoverOutside\n    } = _b, props = __objRest(_b, [\n      \"store\",\n      \"modal\",\n      \"portal\",\n      \"hideOnEscape\",\n      \"hideOnHoverOutside\",\n      \"disablePointerEventsOnApproach\"\n    ]);\n    const context = useHovercardProviderContext();\n    store = store || context;\n    invariant(\n      store,\n      process.env.NODE_ENV !== \"production\" && \"Hovercard must receive a `store` prop or be wrapped in a HovercardProvider component.\"\n    );\n    const ref = useRef(null);\n    const [nestedHovercards, setNestedHovercards] = useState([]);\n    const hideTimeoutRef = useRef(0);\n    const enterPointRef = useRef(null);\n    const { portalRef, domReady } = usePortalRef(portal, props.portalRef);\n    const isMouseMoving = useIsMouseMoving();\n    const mayHideOnHoverOutside = !!hideOnHoverOutside;\n    const hideOnHoverOutsideProp = useBooleanEvent(hideOnHoverOutside);\n    const mayDisablePointerEvents = !!disablePointerEventsOnApproach;\n    const disablePointerEventsProp = useBooleanEvent(\n      disablePointerEventsOnApproach\n    );\n    const open = store.useState(\"open\");\n    const mounted = store.useState(\"mounted\");\n    useEffect(() => {\n      if (!domReady) return;\n      if (!mounted) return;\n      if (!mayHideOnHoverOutside && !mayDisablePointerEvents) return;\n      const element = ref.current;\n      if (!element) return;\n      const onMouseMove = (event) => {\n        if (!store) return;\n        if (!isMouseMoving()) return;\n        const { anchorElement, hideTimeout, timeout } = store.getState();\n        const enterPoint = enterPointRef.current;\n        const [target] = event.composedPath();\n        const anchor = anchorElement;\n        if (isMovingOnHovercard(target, element, anchor, nestedHovercards)) {\n          enterPointRef.current = target && anchor && contains(anchor, target) ? getEventPoint(event) : null;\n          window.clearTimeout(hideTimeoutRef.current);\n          hideTimeoutRef.current = 0;\n          return;\n        }\n        if (hideTimeoutRef.current) return;\n        if (enterPoint) {\n          const currentPoint = getEventPoint(event);\n          const polygon = getElementPolygon(element, enterPoint);\n          if (isPointInPolygon(currentPoint, polygon)) {\n            enterPointRef.current = currentPoint;\n            if (!disablePointerEventsProp(event)) return;\n            event.preventDefault();\n            event.stopPropagation();\n            return;\n          }\n        }\n        if (!hideOnHoverOutsideProp(event)) return;\n        hideTimeoutRef.current = window.setTimeout(() => {\n          hideTimeoutRef.current = 0;\n          store == null ? void 0 : store.hide();\n        }, hideTimeout != null ? hideTimeout : timeout);\n      };\n      return chain(\n        addGlobalEventListener(\"mousemove\", onMouseMove, true),\n        () => clearTimeout(hideTimeoutRef.current)\n      );\n    }, [\n      store,\n      isMouseMoving,\n      domReady,\n      mounted,\n      mayHideOnHoverOutside,\n      mayDisablePointerEvents,\n      nestedHovercards,\n      disablePointerEventsProp,\n      hideOnHoverOutsideProp\n    ]);\n    useEffect(() => {\n      if (!domReady) return;\n      if (!mounted) return;\n      if (!mayDisablePointerEvents) return;\n      const disableEvent = (event) => {\n        const element = ref.current;\n        if (!element) return;\n        const enterPoint = enterPointRef.current;\n        if (!enterPoint) return;\n        const polygon = getElementPolygon(element, enterPoint);\n        if (isPointInPolygon(getEventPoint(event), polygon)) {\n          if (!disablePointerEventsProp(event)) return;\n          event.preventDefault();\n          event.stopPropagation();\n        }\n      };\n      return chain(\n        // Note: we may need to add pointer events here in the future.\n        addGlobalEventListener(\"mouseenter\", disableEvent, true),\n        addGlobalEventListener(\"mouseover\", disableEvent, true),\n        addGlobalEventListener(\"mouseout\", disableEvent, true),\n        addGlobalEventListener(\"mouseleave\", disableEvent, true)\n      );\n    }, [domReady, mounted, mayDisablePointerEvents, disablePointerEventsProp]);\n    useEffect(() => {\n      if (!domReady) return;\n      if (open) return;\n      store == null ? void 0 : store.setAutoFocusOnShow(false);\n    }, [store, domReady, open]);\n    const openRef = useLiveRef(open);\n    useEffect(() => {\n      if (!domReady) return;\n      return () => {\n        if (!openRef.current) {\n          store == null ? void 0 : store.setAutoFocusOnShow(false);\n        }\n      };\n    }, [store, domReady]);\n    const registerOnParent = useContext(NestedHovercardContext);\n    useSafeLayoutEffect(() => {\n      if (modal) return;\n      if (!portal) return;\n      if (!mounted) return;\n      if (!domReady) return;\n      const element = ref.current;\n      if (!element) return;\n      return registerOnParent == null ? void 0 : registerOnParent(element);\n    }, [modal, portal, mounted, domReady]);\n    const registerNestedHovercard = useCallback(\n      (element) => {\n        setNestedHovercards((prevElements) => [...prevElements, element]);\n        const parentUnregister = registerOnParent == null ? void 0 : registerOnParent(element);\n        return () => {\n          setNestedHovercards(\n            (prevElements) => prevElements.filter((item) => item !== element)\n          );\n          parentUnregister == null ? void 0 : parentUnregister();\n        };\n      },\n      [registerOnParent]\n    );\n    props = useWrapElement(\n      props,\n      (element) => /* @__PURE__ */ jsx(HovercardScopedContextProvider, { value: store, children: /* @__PURE__ */ jsx(NestedHovercardContext.Provider, { value: registerNestedHovercard, children: element }) }),\n      [store, registerNestedHovercard]\n    );\n    props = __spreadProps(__spreadValues({}, props), {\n      ref: useMergeRefs(ref, props.ref)\n    });\n    props = useAutoFocusOnHide(__spreadValues({ store }, props));\n    const autoFocusOnShow = store.useState(\n      (state) => modal || state.autoFocusOnShow\n    );\n    props = usePopover(__spreadProps(__spreadValues({\n      store,\n      modal,\n      portal,\n      autoFocusOnShow\n    }, props), {\n      portalRef,\n      hideOnEscape(event) {\n        if (isFalsyBooleanCallback(hideOnEscape, event)) return false;\n        requestAnimationFrame(() => {\n          requestAnimationFrame(() => {\n            store == null ? void 0 : store.hide();\n          });\n        });\n        return true;\n      }\n    }));\n    return props;\n  }\n);\nvar Hovercard = createDialogComponent(\n  forwardRef(function Hovercard2(props) {\n    const htmlProps = useHovercard(props);\n    return createElement(TagName, htmlProps);\n  }),\n  useHovercardProviderContext\n);\n\nexport {\n  useHovercard,\n  Hovercard\n};\n","\"use client\";\nimport {\n  useHovercardProviderContext\n} from \"./7Z7JH52O.js\";\nimport {\n  useFocusable\n} from \"./OE2EFRVA.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useBooleanEvent,\n  useEvent,\n  useIsMouseMoving,\n  useMergeRefs\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/hovercard/hovercard-anchor.tsx\nimport { addGlobalEventListener } from \"@ariakit/core/utils/events\";\nimport { disabledFromProps, invariant } from \"@ariakit/core/utils/misc\";\nimport { useCallback, useEffect, useRef } from \"react\";\nvar TagName = \"a\";\nvar useHovercardAnchor = createHook(\n  function useHovercardAnchor2(_a) {\n    var _b = _a, { store, showOnHover = true } = _b, props = __objRest(_b, [\"store\", \"showOnHover\"]);\n    const context = useHovercardProviderContext();\n    store = store || context;\n    invariant(\n      store,\n      process.env.NODE_ENV !== \"production\" && \"HovercardAnchor must receive a `store` prop or be wrapped in a HovercardProvider component.\"\n    );\n    const disabled = disabledFromProps(props);\n    const showTimeoutRef = useRef(0);\n    useEffect(() => () => window.clearTimeout(showTimeoutRef.current), []);\n    useEffect(() => {\n      const onMouseLeave = (event) => {\n        if (!store) return;\n        const { anchorElement } = store.getState();\n        if (!anchorElement) return;\n        if (event.target !== anchorElement) return;\n        window.clearTimeout(showTimeoutRef.current);\n        showTimeoutRef.current = 0;\n      };\n      return addGlobalEventListener(\"mouseleave\", onMouseLeave, true);\n    }, [store]);\n    const onMouseMoveProp = props.onMouseMove;\n    const showOnHoverProp = useBooleanEvent(showOnHover);\n    const isMouseMoving = useIsMouseMoving();\n    const onMouseMove = useEvent((event) => {\n      onMouseMoveProp == null ? void 0 : onMouseMoveProp(event);\n      if (disabled) return;\n      if (!store) return;\n      if (event.defaultPrevented) return;\n      if (showTimeoutRef.current) return;\n      if (!isMouseMoving()) return;\n      if (!showOnHoverProp(event)) return;\n      const element = event.currentTarget;\n      store.setAnchorElement(element);\n      store.setDisclosureElement(element);\n      const { showTimeout, timeout } = store.getState();\n      const showHovercard = () => {\n        showTimeoutRef.current = 0;\n        if (!isMouseMoving()) return;\n        store == null ? void 0 : store.setAnchorElement(element);\n        store == null ? void 0 : store.show();\n        queueMicrotask(() => {\n          store == null ? void 0 : store.setDisclosureElement(element);\n        });\n      };\n      const timeoutMs = showTimeout != null ? showTimeout : timeout;\n      if (timeoutMs === 0) {\n        showHovercard();\n      } else {\n        showTimeoutRef.current = window.setTimeout(showHovercard, timeoutMs);\n      }\n    });\n    const onClickProp = props.onClick;\n    const onClick = useEvent((event) => {\n      onClickProp == null ? void 0 : onClickProp(event);\n      if (!store) return;\n      window.clearTimeout(showTimeoutRef.current);\n      showTimeoutRef.current = 0;\n    });\n    const ref = useCallback(\n      (element) => {\n        if (!store) return;\n        const { anchorElement } = store.getState();\n        if (anchorElement == null ? void 0 : anchorElement.isConnected) return;\n        store.setAnchorElement(element);\n      },\n      [store]\n    );\n    props = __spreadProps(__spreadValues({}, props), {\n      ref: useMergeRefs(ref, props.ref),\n      onMouseMove,\n      onClick\n    });\n    props = useFocusable(props);\n    return props;\n  }\n);\nvar HovercardAnchor = forwardRef(function HovercardAnchor2(props) {\n  const htmlProps = useHovercardAnchor(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useHovercardAnchor,\n  HovercardAnchor\n};\n","\"use client\";\nimport {\n  createDialogStore\n} from \"./FZZ2AVHF.js\";\nimport {\n  createStore,\n  mergeStore,\n  omit,\n  throwOnConflictingProps\n} from \"./BCALMBPZ.js\";\nimport {\n  defaultValue\n} from \"./PBFD2E7P.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/popover/popover-store.ts\nfunction createPopoverStore(_a = {}) {\n  var _b = _a, {\n    popover: otherPopover\n  } = _b, props = __objRest(_b, [\n    \"popover\"\n  ]);\n  const store = mergeStore(\n    props.store,\n    omit(otherPopover, [\n      \"arrowElement\",\n      \"anchorElement\",\n      \"contentElement\",\n      \"popoverElement\",\n      \"disclosureElement\"\n    ])\n  );\n  throwOnConflictingProps(props, store);\n  const syncState = store == null ? void 0 : store.getState();\n  const dialog = createDialogStore(__spreadProps(__spreadValues({}, props), { store }));\n  const placement = defaultValue(\n    props.placement,\n    syncState == null ? void 0 : syncState.placement,\n    \"bottom\"\n  );\n  const initialState = __spreadProps(__spreadValues({}, dialog.getState()), {\n    placement,\n    currentPlacement: placement,\n    anchorElement: defaultValue(syncState == null ? void 0 : syncState.anchorElement, null),\n    popoverElement: defaultValue(syncState == null ? void 0 : syncState.popoverElement, null),\n    arrowElement: defaultValue(syncState == null ? void 0 : syncState.arrowElement, null),\n    rendered: Symbol(\"rendered\")\n  });\n  const popover = createStore(initialState, dialog, store);\n  return __spreadProps(__spreadValues(__spreadValues({}, dialog), popover), {\n    setAnchorElement: (element) => popover.setState(\"anchorElement\", element),\n    setPopoverElement: (element) => popover.setState(\"popoverElement\", element),\n    setArrowElement: (element) => popover.setState(\"arrowElement\", element),\n    render: () => popover.setState(\"rendered\", Symbol(\"rendered\"))\n  });\n}\n\nexport {\n  createPopoverStore\n};\n","\"use client\";\nimport {\n  useDialogStoreProps\n} from \"./Y2U4BRIM.js\";\nimport {\n  useStore,\n  useStoreProps\n} from \"./RTNCFSKZ.js\";\nimport {\n  useUpdateEffect\n} from \"./5GGHRIN3.js\";\n\n// src/popover/popover-store.ts\nimport * as Core from \"@ariakit/core/popover/popover-store\";\nfunction usePopoverStoreProps(store, update, props) {\n  useUpdateEffect(update, [props.popover]);\n  useStoreProps(store, props, \"placement\");\n  return useDialogStoreProps(store, update, props);\n}\nfunction usePopoverStore(props = {}) {\n  const [store, update] = useStore(Core.createPopoverStore, props);\n  return usePopoverStoreProps(store, update, props);\n}\n\nexport {\n  usePopoverStoreProps,\n  usePopoverStore\n};\n","\"use client\";\nimport {\n  createPopoverStore\n} from \"./ME2CUF3F.js\";\nimport {\n  createStore\n} from \"./BCALMBPZ.js\";\nimport {\n  defaultValue\n} from \"./PBFD2E7P.js\";\nimport {\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/hovercard/hovercard-store.ts\nfunction createHovercardStore(props = {}) {\n  var _a;\n  const syncState = (_a = props.store) == null ? void 0 : _a.getState();\n  const popover = createPopoverStore(__spreadProps(__spreadValues({}, props), {\n    placement: defaultValue(\n      props.placement,\n      syncState == null ? void 0 : syncState.placement,\n      \"bottom\"\n    )\n  }));\n  const timeout = defaultValue(props.timeout, syncState == null ? void 0 : syncState.timeout, 500);\n  const initialState = __spreadProps(__spreadValues({}, popover.getState()), {\n    timeout,\n    showTimeout: defaultValue(props.showTimeout, syncState == null ? void 0 : syncState.showTimeout),\n    hideTimeout: defaultValue(props.hideTimeout, syncState == null ? void 0 : syncState.hideTimeout),\n    autoFocusOnShow: defaultValue(syncState == null ? void 0 : syncState.autoFocusOnShow, false)\n  });\n  const hovercard = createStore(initialState, popover, props.store);\n  return __spreadProps(__spreadValues(__spreadValues({}, popover), hovercard), {\n    setAutoFocusOnShow: (value) => hovercard.setState(\"autoFocusOnShow\", value)\n  });\n}\n\nexport {\n  createHovercardStore\n};\n","\"use client\";\nimport {\n  usePopoverStoreProps\n} from \"./RUY5BUJG.js\";\nimport {\n  useStore,\n  useStoreProps\n} from \"./RTNCFSKZ.js\";\n\n// src/hovercard/hovercard-store.ts\nimport * as Core from \"@ariakit/core/hovercard/hovercard-store\";\nfunction useHovercardStoreProps(store, update, props) {\n  useStoreProps(store, props, \"timeout\");\n  useStoreProps(store, props, \"showTimeout\");\n  useStoreProps(store, props, \"hideTimeout\");\n  return usePopoverStoreProps(store, update, props);\n}\nfunction useHovercardStore(props = {}) {\n  const [store, update] = useStore(Core.createHovercardStore, props);\n  return useHovercardStoreProps(store, update, props);\n}\n\nexport {\n  useHovercardStoreProps,\n  useHovercardStore\n};\n","\"use client\";\nimport {\n  CompositeContextProvider,\n  CompositeScopedContextProvider\n} from \"./APTFW6PT.js\";\nimport {\n  createStoreContext\n} from \"./VOQWLFSQ.js\";\n\n// src/menubar/menubar-context.tsx\nimport { createContext } from \"react\";\nvar menubar = createStoreContext(\n  [CompositeContextProvider],\n  [CompositeScopedContextProvider]\n);\nvar useMenubarContext = menubar.useContext;\nvar useMenubarScopedContext = menubar.useScopedContext;\nvar useMenubarProviderContext = menubar.useProviderContext;\nvar MenubarContextProvider = menubar.ContextProvider;\nvar MenubarScopedContextProvider = menubar.ScopedContextProvider;\nvar MenuItemCheckedContext = createContext(\n  void 0\n);\n\nexport {\n  useMenubarContext,\n  useMenubarScopedContext,\n  useMenubarProviderContext,\n  MenubarContextProvider,\n  MenubarScopedContextProvider,\n  MenuItemCheckedContext\n};\n","\"use client\";\nimport {\n  usePopoverProviderContext\n} from \"./Y67KZUMI.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useMergeRefs\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/popover/popover-anchor.tsx\nvar TagName = \"div\";\nvar usePopoverAnchor = createHook(\n  function usePopoverAnchor2(_a) {\n    var _b = _a, { store } = _b, props = __objRest(_b, [\"store\"]);\n    const context = usePopoverProviderContext();\n    store = store || context;\n    props = __spreadProps(__spreadValues({}, props), {\n      ref: useMergeRefs(store == null ? void 0 : store.setAnchorElement, props.ref)\n    });\n    return props;\n  }\n);\nvar PopoverAnchor = forwardRef(function PopoverAnchor2(props) {\n  const htmlProps = usePopoverAnchor(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  usePopoverAnchor,\n  PopoverAnchor\n};\n","\"use client\";\nimport {\n  useCommand\n} from \"./2W3RN7C5.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useMergeRefs,\n  useTagName\n} from \"./5GGHRIN3.js\";\nimport {\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/button/button.tsx\nimport { isButton } from \"@ariakit/core/utils/dom\";\nimport { useEffect, useRef, useState } from \"react\";\nvar TagName = \"button\";\nvar useButton = createHook(\n  function useButton2(props) {\n    const ref = useRef(null);\n    const tagName = useTagName(ref, TagName);\n    const [isNativeButton, setIsNativeButton] = useState(\n      () => !!tagName && isButton({ tagName, type: props.type })\n    );\n    useEffect(() => {\n      if (!ref.current) return;\n      setIsNativeButton(isButton(ref.current));\n    }, []);\n    props = __spreadProps(__spreadValues({\n      role: !isNativeButton && tagName !== \"a\" ? \"button\" : void 0\n    }, props), {\n      ref: useMergeRefs(ref, props.ref)\n    });\n    props = useCommand(props);\n    return props;\n  }\n);\nvar Button = forwardRef(function Button2(props) {\n  const htmlProps = useButton(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useButton,\n  Button\n};\n","\"use client\";\nimport {\n  useDisclosureProviderContext\n} from \"./ABN76PSX.js\";\nimport {\n  useButton\n} from \"./XCKGTAUF.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useBooleanEvent,\n  useEvent,\n  useMergeRefs,\n  useMetadataProps\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/disclosure/disclosure.tsx\nimport { invariant } from \"@ariakit/core/utils/misc\";\nimport { useEffect, useRef, useState } from \"react\";\nvar TagName = \"button\";\nvar symbol = Symbol(\"disclosure\");\nvar useDisclosure = createHook(\n  function useDisclosure2(_a) {\n    var _b = _a, { store, toggleOnClick = true } = _b, props = __objRest(_b, [\"store\", \"toggleOnClick\"]);\n    const context = useDisclosureProviderContext();\n    store = store || context;\n    invariant(\n      store,\n      process.env.NODE_ENV !== \"production\" && \"Disclosure must receive a `store` prop or be wrapped in a DisclosureProvider component.\"\n    );\n    const ref = useRef(null);\n    const [expanded, setExpanded] = useState(false);\n    const disclosureElement = store.useState(\"disclosureElement\");\n    const open = store.useState(\"open\");\n    useEffect(() => {\n      let isCurrentDisclosure = disclosureElement === ref.current;\n      if (!(disclosureElement == null ? void 0 : disclosureElement.isConnected)) {\n        store == null ? void 0 : store.setDisclosureElement(ref.current);\n        isCurrentDisclosure = true;\n      }\n      setExpanded(open && isCurrentDisclosure);\n    }, [disclosureElement, store, open]);\n    const onClickProp = props.onClick;\n    const toggleOnClickProp = useBooleanEvent(toggleOnClick);\n    const [isDuplicate, metadataProps] = useMetadataProps(props, symbol, true);\n    const onClick = useEvent((event) => {\n      onClickProp == null ? void 0 : onClickProp(event);\n      if (event.defaultPrevented) return;\n      if (isDuplicate) return;\n      if (!toggleOnClickProp(event)) return;\n      store == null ? void 0 : store.setDisclosureElement(event.currentTarget);\n      store == null ? void 0 : store.toggle();\n    });\n    const contentElement = store.useState(\"contentElement\");\n    props = __spreadProps(__spreadValues(__spreadValues({\n      \"aria-expanded\": expanded,\n      \"aria-controls\": contentElement == null ? void 0 : contentElement.id\n    }, metadataProps), props), {\n      ref: useMergeRefs(ref, props.ref),\n      onClick\n    });\n    props = useButton(props);\n    return props;\n  }\n);\nvar Disclosure = forwardRef(function Disclosure2(props) {\n  const htmlProps = useDisclosure(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useDisclosure,\n  Disclosure\n};\n","\"use client\";\nimport {\n  useDisclosure\n} from \"./NMGNQVTG.js\";\nimport {\n  useDialogProviderContext\n} from \"./T2AZQXQU.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  __objRest,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/dialog/dialog-disclosure.tsx\nimport { getPopupRole } from \"@ariakit/core/utils/dom\";\nimport { invariant } from \"@ariakit/core/utils/misc\";\nvar TagName = \"button\";\nvar useDialogDisclosure = createHook(\n  function useDialogDisclosure2(_a) {\n    var _b = _a, { store } = _b, props = __objRest(_b, [\"store\"]);\n    const context = useDialogProviderContext();\n    store = store || context;\n    invariant(\n      store,\n      process.env.NODE_ENV !== \"production\" && \"DialogDisclosure must receive a `store` prop or be wrapped in a DialogProvider component.\"\n    );\n    const contentElement = store.useState(\"contentElement\");\n    props = __spreadValues({\n      \"aria-haspopup\": getPopupRole(contentElement, \"dialog\")\n    }, props);\n    props = useDisclosure(__spreadValues({ store }, props));\n    return props;\n  }\n);\nvar DialogDisclosure = forwardRef(function DialogDisclosure2(props) {\n  const htmlProps = useDialogDisclosure(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useDialogDisclosure,\n  DialogDisclosure\n};\n","\"use client\";\nimport {\n  usePopoverAnchor\n} from \"./HMCFFQCB.js\";\nimport {\n  useDialogDisclosure\n} from \"./ZTXFEM5L.js\";\nimport {\n  PopoverScopedContextProvider,\n  usePopoverProviderContext\n} from \"./Y67KZUMI.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useEvent,\n  useWrapElement\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/popover/popover-disclosure.tsx\nimport { invariant } from \"@ariakit/core/utils/misc\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TagName = \"button\";\nvar usePopoverDisclosure = createHook(function usePopoverDisclosure2(_a) {\n  var _b = _a, { store } = _b, props = __objRest(_b, [\"store\"]);\n  const context = usePopoverProviderContext();\n  store = store || context;\n  invariant(\n    store,\n    process.env.NODE_ENV !== \"production\" && \"PopoverDisclosure must receive a `store` prop or be wrapped in a PopoverProvider component.\"\n  );\n  const onClickProp = props.onClick;\n  const onClick = useEvent((event) => {\n    store == null ? void 0 : store.setAnchorElement(event.currentTarget);\n    onClickProp == null ? void 0 : onClickProp(event);\n  });\n  props = useWrapElement(\n    props,\n    (element) => /* @__PURE__ */ jsx(PopoverScopedContextProvider, { value: store, children: element }),\n    [store]\n  );\n  props = __spreadProps(__spreadValues({}, props), {\n    onClick\n  });\n  props = usePopoverAnchor(__spreadValues({ store }, props));\n  props = useDialogDisclosure(__spreadValues({ store }, props));\n  return props;\n});\nvar PopoverDisclosure = forwardRef(function PopoverDisclosure2(props) {\n  const htmlProps = usePopoverDisclosure(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  usePopoverDisclosure,\n  PopoverDisclosure\n};\n","\"use client\";\nimport {\n  usePopoverContext\n} from \"./Y67KZUMI.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/popover/popover-disclosure-arrow.tsx\nimport { invariant, removeUndefinedValues } from \"@ariakit/core/utils/misc\";\nimport { useMemo } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TagName = \"span\";\nvar pointsMap = {\n  top: \"4,10 8,6 12,10\",\n  right: \"6,4 10,8 6,12\",\n  bottom: \"4,6 8,10 12,6\",\n  left: \"10,4 6,8 10,12\"\n};\nvar usePopoverDisclosureArrow = createHook(function usePopoverDisclosureArrow2(_a) {\n  var _b = _a, { store, placement } = _b, props = __objRest(_b, [\"store\", \"placement\"]);\n  const context = usePopoverContext();\n  store = store || context;\n  invariant(\n    store,\n    process.env.NODE_ENV !== \"production\" && \"PopoverDisclosureArrow must be wrapped in a PopoverDisclosure component.\"\n  );\n  const position = store.useState((state) => placement || state.placement);\n  const dir = position.split(\"-\")[0];\n  const points = pointsMap[dir];\n  const children = useMemo(\n    () => /* @__PURE__ */ jsx(\n      \"svg\",\n      {\n        display: \"block\",\n        fill: \"none\",\n        stroke: \"currentColor\",\n        strokeLinecap: \"round\",\n        strokeLinejoin: \"round\",\n        strokeWidth: 1.5,\n        viewBox: \"0 0 16 16\",\n        height: \"1em\",\n        width: \"1em\",\n        children: /* @__PURE__ */ jsx(\"polyline\", { points })\n      }\n    ),\n    [points]\n  );\n  props = __spreadProps(__spreadValues({\n    children,\n    \"aria-hidden\": true\n  }, props), {\n    style: __spreadValues({\n      width: \"1em\",\n      height: \"1em\",\n      pointerEvents: \"none\"\n    }, props.style)\n  });\n  return removeUndefinedValues(props);\n});\nvar PopoverDisclosureArrow = forwardRef(\n  function PopoverDisclosureArrow2(props) {\n    const htmlProps = usePopoverDisclosureArrow(props);\n    return createElement(TagName, htmlProps);\n  }\n);\n\nexport {\n  usePopoverDisclosureArrow,\n  PopoverDisclosureArrow\n};\n","\"use client\";\nimport {\n  CompositeContextProvider,\n  CompositeScopedContextProvider\n} from \"./APTFW6PT.js\";\nimport {\n  createStoreContext\n} from \"./VOQWLFSQ.js\";\n\n// src/radio/radio-context.tsx\nvar ctx = createStoreContext(\n  [CompositeContextProvider],\n  [CompositeScopedContextProvider]\n);\nvar useRadioContext = ctx.useContext;\nvar useRadioScopedContext = ctx.useScopedContext;\nvar useRadioProviderContext = ctx.useProviderContext;\nvar RadioContextProvider = ctx.ContextProvider;\nvar RadioScopedContextProvider = ctx.ScopedContextProvider;\n\nexport {\n  useRadioContext,\n  useRadioScopedContext,\n  useRadioProviderContext,\n  RadioContextProvider,\n  RadioScopedContextProvider\n};\n","\"use client\";\nimport {\n  useRadioContext\n} from \"./BGBYET7R.js\";\nimport {\n  useCompositeItem\n} from \"./SBSPVDDI.js\";\nimport {\n  useStoreState\n} from \"./RTNCFSKZ.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef,\n  memo\n} from \"./VOQWLFSQ.js\";\nimport {\n  useEvent,\n  useForceUpdate,\n  useId,\n  useMergeRefs,\n  useTagName\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/radio/radio.tsx\nimport {\n  disabledFromProps,\n  removeUndefinedValues\n} from \"@ariakit/core/utils/misc\";\nimport { useEffect, useRef } from \"react\";\nvar TagName = \"input\";\nfunction getIsChecked(value, storeValue) {\n  if (storeValue === void 0) return;\n  if (value != null && storeValue != null) {\n    return storeValue === value;\n  }\n  return !!storeValue;\n}\nfunction isNativeRadio(tagName, type) {\n  return tagName === \"input\" && (!type || type === \"radio\");\n}\nvar useRadio = createHook(function useRadio2(_a) {\n  var _b = _a, {\n    store,\n    name,\n    value,\n    checked\n  } = _b, props = __objRest(_b, [\n    \"store\",\n    \"name\",\n    \"value\",\n    \"checked\"\n  ]);\n  const context = useRadioContext();\n  store = store || context;\n  const id = useId(props.id);\n  const ref = useRef(null);\n  const isChecked = useStoreState(\n    store,\n    (state) => checked != null ? checked : getIsChecked(value, state == null ? void 0 : state.value)\n  );\n  useEffect(() => {\n    if (!id) return;\n    if (!isChecked) return;\n    const isActiveItem = (store == null ? void 0 : store.getState().activeId) === id;\n    if (isActiveItem) return;\n    store == null ? void 0 : store.setActiveId(id);\n  }, [store, isChecked, id]);\n  const onChangeProp = props.onChange;\n  const tagName = useTagName(ref, TagName);\n  const nativeRadio = isNativeRadio(tagName, props.type);\n  const disabled = disabledFromProps(props);\n  const [propertyUpdated, schedulePropertyUpdate] = useForceUpdate();\n  useEffect(() => {\n    const element = ref.current;\n    if (!element) return;\n    if (nativeRadio) return;\n    if (isChecked !== void 0) {\n      element.checked = isChecked;\n    }\n    if (name !== void 0) {\n      element.name = name;\n    }\n    if (value !== void 0) {\n      element.value = `${value}`;\n    }\n  }, [propertyUpdated, nativeRadio, isChecked, name, value]);\n  const onChange = useEvent((event) => {\n    if (disabled) {\n      event.preventDefault();\n      event.stopPropagation();\n      return;\n    }\n    if ((store == null ? void 0 : store.getState().value) === value) return;\n    if (!nativeRadio) {\n      event.currentTarget.checked = true;\n      schedulePropertyUpdate();\n    }\n    onChangeProp == null ? void 0 : onChangeProp(event);\n    if (event.defaultPrevented) return;\n    store == null ? void 0 : store.setValue(value);\n  });\n  const onClickProp = props.onClick;\n  const onClick = useEvent((event) => {\n    onClickProp == null ? void 0 : onClickProp(event);\n    if (event.defaultPrevented) return;\n    if (nativeRadio) return;\n    onChange(event);\n  });\n  const onFocusProp = props.onFocus;\n  const onFocus = useEvent((event) => {\n    onFocusProp == null ? void 0 : onFocusProp(event);\n    if (event.defaultPrevented) return;\n    if (!nativeRadio) return;\n    if (!store) return;\n    const { moves, activeId } = store.getState();\n    if (!moves) return;\n    if (id && activeId !== id) return;\n    onChange(event);\n  });\n  props = __spreadProps(__spreadValues({\n    id,\n    role: !nativeRadio ? \"radio\" : void 0,\n    type: nativeRadio ? \"radio\" : void 0,\n    \"aria-checked\": isChecked\n  }, props), {\n    ref: useMergeRefs(ref, props.ref),\n    onChange,\n    onClick,\n    onFocus\n  });\n  props = useCompositeItem(__spreadValues({\n    store,\n    clickOnEnter: !nativeRadio\n  }, props));\n  return removeUndefinedValues(__spreadValues({\n    name: nativeRadio ? name : void 0,\n    value: nativeRadio ? value : void 0,\n    checked: isChecked\n  }, props));\n});\nvar Radio = memo(\n  forwardRef(function Radio2(props) {\n    const htmlProps = useRadio(props);\n    return createElement(TagName, htmlProps);\n  })\n);\n\nexport {\n  useRadio,\n  Radio\n};\n","\"use client\";\nimport {\n  flipItems\n} from \"./5VQZOHHZ.js\";\nimport {\n  useCompositeContext\n} from \"./APTFW6PT.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useEvent\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/composite/composite-typeahead.tsx\nimport {\n  getDocument,\n  isTextField,\n  sortBasedOnDOMPosition\n} from \"@ariakit/core/utils/dom\";\nimport { isSelfTarget } from \"@ariakit/core/utils/events\";\nimport {\n  invariant,\n  normalizeString,\n  removeUndefinedValues\n} from \"@ariakit/core/utils/misc\";\nimport { useRef } from \"react\";\nvar TagName = \"div\";\nvar chars = \"\";\nfunction clearChars() {\n  chars = \"\";\n}\nfunction isValidTypeaheadEvent(event) {\n  const target = event.target;\n  if (target && isTextField(target)) return false;\n  if (event.key === \" \" && chars.length) return true;\n  return event.key.length === 1 && !event.ctrlKey && !event.altKey && !event.metaKey && /^[\\p{Letter}\\p{Number}]$/u.test(event.key);\n}\nfunction isSelfTargetOrItem(event, items) {\n  if (isSelfTarget(event)) return true;\n  const target = event.target;\n  if (!target) return false;\n  const isItem = items.some((item) => item.element === target);\n  return isItem;\n}\nfunction getEnabledItems(items) {\n  return items.filter((item) => !item.disabled);\n}\nfunction itemTextStartsWith(item, text) {\n  var _a;\n  const itemText = ((_a = item.element) == null ? void 0 : _a.textContent) || item.children || // The composite item object itself doesn't include a value property, but\n  // other components like Select do. Since CompositeTypeahead is a generic\n  // component that can be used with those as well, we also consider the value\n  // property as a fallback for the typeahead text content.\n  \"value\" in item && item.value;\n  if (!itemText) return false;\n  return normalizeString(itemText).trim().toLowerCase().startsWith(text.toLowerCase());\n}\nfunction getSameInitialItems(items, char, activeId) {\n  if (!activeId) return items;\n  const activeItem = items.find((item) => item.id === activeId);\n  if (!activeItem) return items;\n  if (!itemTextStartsWith(activeItem, char)) return items;\n  if (chars !== char && itemTextStartsWith(activeItem, chars)) return items;\n  chars = char;\n  return flipItems(\n    items.filter((item) => itemTextStartsWith(item, chars)),\n    activeId\n  ).filter((item) => item.id !== activeId);\n}\nvar useCompositeTypeahead = createHook(function useCompositeTypeahead2(_a) {\n  var _b = _a, { store, typeahead = true } = _b, props = __objRest(_b, [\"store\", \"typeahead\"]);\n  const context = useCompositeContext();\n  store = store || context;\n  invariant(\n    store,\n    process.env.NODE_ENV !== \"production\" && \"CompositeTypeahead must be a Composite component\"\n  );\n  const onKeyDownCaptureProp = props.onKeyDownCapture;\n  const cleanupTimeoutRef = useRef(0);\n  const onKeyDownCapture = useEvent((event) => {\n    onKeyDownCaptureProp == null ? void 0 : onKeyDownCaptureProp(event);\n    if (event.defaultPrevented) return;\n    if (!typeahead) return;\n    if (!store) return;\n    if (!isValidTypeaheadEvent(event)) {\n      return clearChars();\n    }\n    const { renderedItems, items, activeId, id } = store.getState();\n    let enabledItems = getEnabledItems(\n      items.length > renderedItems.length ? items : renderedItems\n    );\n    const document = getDocument(event.currentTarget);\n    const selector = `[data-offscreen-id=\"${id}\"]`;\n    const offscreenItems = document.querySelectorAll(selector);\n    for (const element of offscreenItems) {\n      const disabled = element.ariaDisabled === \"true\" || \"disabled\" in element && !!element.disabled;\n      enabledItems.push({ id: element.id, element, disabled });\n    }\n    if (offscreenItems.length) {\n      enabledItems = sortBasedOnDOMPosition(enabledItems, (i) => i.element);\n    }\n    if (!isSelfTargetOrItem(event, enabledItems)) return clearChars();\n    event.preventDefault();\n    window.clearTimeout(cleanupTimeoutRef.current);\n    cleanupTimeoutRef.current = window.setTimeout(() => {\n      chars = \"\";\n    }, 500);\n    const char = event.key.toLowerCase();\n    chars += char;\n    enabledItems = getSameInitialItems(enabledItems, char, activeId);\n    const item = enabledItems.find((item2) => itemTextStartsWith(item2, chars));\n    if (item) {\n      store.move(item.id);\n    } else {\n      clearChars();\n    }\n  });\n  props = __spreadProps(__spreadValues({}, props), {\n    onKeyDownCapture\n  });\n  return removeUndefinedValues(props);\n});\nvar CompositeTypeahead = forwardRef(function CompositeTypeahead2(props) {\n  const htmlProps = useCompositeTypeahead(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useCompositeTypeahead,\n  CompositeTypeahead\n};\n","\"use client\";\n\n// src/group/group-label-context.tsx\nimport { createContext } from \"react\";\nvar GroupLabelContext = createContext(void 0);\n\nexport {\n  GroupLabelContext\n};\n","\"use client\";\nimport {\n  GroupLabelContext\n} from \"./7HVFURXT.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useWrapElement\n} from \"./5GGHRIN3.js\";\nimport {\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/group/group.tsx\nimport { removeUndefinedValues } from \"@ariakit/core/utils/misc\";\nimport { useState } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TagName = \"div\";\nvar useGroup = createHook(\n  function useGroup2(props) {\n    const [labelId, setLabelId] = useState();\n    props = useWrapElement(\n      props,\n      (element) => /* @__PURE__ */ jsx(GroupLabelContext.Provider, { value: setLabelId, children: element }),\n      []\n    );\n    props = __spreadValues({\n      role: \"group\",\n      \"aria-labelledby\": labelId\n    }, props);\n    return removeUndefinedValues(props);\n  }\n);\nvar Group = forwardRef(function Group2(props) {\n  const htmlProps = useGroup(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useGroup,\n  Group\n};\n","\"use client\";\nimport {\n  useGroup\n} from \"./WXI7YN3P.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  __objRest\n} from \"./3YLGPPWQ.js\";\n\n// src/composite/composite-group.tsx\nvar TagName = \"div\";\nvar useCompositeGroup = createHook(\n  function useCompositeGroup2(_a) {\n    var _b = _a, { store } = _b, props = __objRest(_b, [\"store\"]);\n    props = useGroup(props);\n    return props;\n  }\n);\nvar CompositeGroup = forwardRef(function CompositeGroup2(props) {\n  const htmlProps = useCompositeGroup(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useCompositeGroup,\n  CompositeGroup\n};\n","\"use client\";\nimport {\n  useCompositeContext\n} from \"./APTFW6PT.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef,\n  memo\n} from \"./VOQWLFSQ.js\";\nimport {\n  useBooleanEvent,\n  useEvent,\n  useIsMouseMoving,\n  useMergeRefs\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/composite/composite-hover.tsx\nimport { contains } from \"@ariakit/core/utils/dom\";\nimport { hasFocus, hasFocusWithin } from \"@ariakit/core/utils/focus\";\nimport {\n  hasOwnProperty,\n  invariant,\n  removeUndefinedValues\n} from \"@ariakit/core/utils/misc\";\nimport { useCallback } from \"react\";\nvar TagName = \"div\";\nfunction getMouseDestination(event) {\n  const relatedTarget = event.relatedTarget;\n  if ((relatedTarget == null ? void 0 : relatedTarget.nodeType) === Node.ELEMENT_NODE) {\n    return relatedTarget;\n  }\n  return null;\n}\nfunction hoveringInside(event) {\n  const nextElement = getMouseDestination(event);\n  if (!nextElement) return false;\n  return contains(event.currentTarget, nextElement);\n}\nvar symbol = Symbol(\"composite-hover\");\nfunction movingToAnotherItem(event) {\n  let dest = getMouseDestination(event);\n  if (!dest) return false;\n  do {\n    if (hasOwnProperty(dest, symbol) && dest[symbol]) return true;\n    dest = dest.parentElement;\n  } while (dest);\n  return false;\n}\nvar useCompositeHover = createHook(\n  function useCompositeHover2(_a) {\n    var _b = _a, {\n      store,\n      focusOnHover = true,\n      blurOnHoverEnd = !!focusOnHover\n    } = _b, props = __objRest(_b, [\n      \"store\",\n      \"focusOnHover\",\n      \"blurOnHoverEnd\"\n    ]);\n    const context = useCompositeContext();\n    store = store || context;\n    invariant(\n      store,\n      process.env.NODE_ENV !== \"production\" && \"CompositeHover must be wrapped in a Composite component.\"\n    );\n    const isMouseMoving = useIsMouseMoving();\n    const onMouseMoveProp = props.onMouseMove;\n    const focusOnHoverProp = useBooleanEvent(focusOnHover);\n    const onMouseMove = useEvent((event) => {\n      onMouseMoveProp == null ? void 0 : onMouseMoveProp(event);\n      if (event.defaultPrevented) return;\n      if (!isMouseMoving()) return;\n      if (!focusOnHoverProp(event)) return;\n      if (!hasFocusWithin(event.currentTarget)) {\n        const baseElement = store == null ? void 0 : store.getState().baseElement;\n        if (baseElement && !hasFocus(baseElement)) {\n          baseElement.focus();\n        }\n      }\n      store == null ? void 0 : store.setActiveId(event.currentTarget.id);\n    });\n    const onMouseLeaveProp = props.onMouseLeave;\n    const blurOnHoverEndProp = useBooleanEvent(blurOnHoverEnd);\n    const onMouseLeave = useEvent((event) => {\n      var _a2;\n      onMouseLeaveProp == null ? void 0 : onMouseLeaveProp(event);\n      if (event.defaultPrevented) return;\n      if (!isMouseMoving()) return;\n      if (hoveringInside(event)) return;\n      if (movingToAnotherItem(event)) return;\n      if (!focusOnHoverProp(event)) return;\n      if (!blurOnHoverEndProp(event)) return;\n      store == null ? void 0 : store.setActiveId(null);\n      (_a2 = store == null ? void 0 : store.getState().baseElement) == null ? void 0 : _a2.focus();\n    });\n    const ref = useCallback((element) => {\n      if (!element) return;\n      element[symbol] = true;\n    }, []);\n    props = __spreadProps(__spreadValues({}, props), {\n      ref: useMergeRefs(ref, props.ref),\n      onMouseMove,\n      onMouseLeave\n    });\n    return removeUndefinedValues(props);\n  }\n);\nvar CompositeHover = memo(\n  forwardRef(function CompositeHover2(props) {\n    const htmlProps = useCompositeHover(props);\n    return createElement(TagName, htmlProps);\n  })\n);\n\nexport {\n  useCompositeHover,\n  CompositeHover\n};\n","\"use client\";\n\n// src/checkbox/checkbox-checked-context.tsx\nimport { createContext } from \"react\";\nvar CheckboxCheckedContext = createContext(false);\n\nexport {\n  CheckboxCheckedContext\n};\n","\"use client\";\nimport {\n  CheckboxCheckedContext\n} from \"./EYKMH5G5.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/checkbox/checkbox-check.tsx\nimport { removeUndefinedValues } from \"@ariakit/core/utils/misc\";\nimport { useContext } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TagName = \"span\";\nvar checkmark = /* @__PURE__ */ jsx(\n  \"svg\",\n  {\n    display: \"block\",\n    fill: \"none\",\n    stroke: \"currentColor\",\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\",\n    strokeWidth: 1.5,\n    viewBox: \"0 0 16 16\",\n    height: \"1em\",\n    width: \"1em\",\n    children: /* @__PURE__ */ jsx(\"polyline\", { points: \"4,8 7,12 12,4\" })\n  }\n);\nfunction getChildren(props) {\n  if (props.checked) {\n    return props.children || checkmark;\n  }\n  if (typeof props.children === \"function\") {\n    return props.children;\n  }\n  return null;\n}\nvar useCheckboxCheck = createHook(\n  function useCheckboxCheck2(_a) {\n    var _b = _a, { store, checked } = _b, props = __objRest(_b, [\"store\", \"checked\"]);\n    const context = useContext(CheckboxCheckedContext);\n    checked = checked != null ? checked : context;\n    const children = getChildren({ checked, children: props.children });\n    props = __spreadProps(__spreadValues({\n      \"aria-hidden\": true\n    }, props), {\n      children,\n      style: __spreadValues({\n        width: \"1em\",\n        height: \"1em\",\n        pointerEvents: \"none\"\n      }, props.style)\n    });\n    return removeUndefinedValues(props);\n  }\n);\nvar CheckboxCheck = forwardRef(function CheckboxCheck2(props) {\n  const htmlProps = useCheckboxCheck(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useCheckboxCheck,\n  CheckboxCheck\n};\n","\"use client\";\nimport {\n  MenubarContextProvider,\n  MenubarScopedContextProvider,\n  useMenubarContext,\n  useMenubarProviderContext,\n  useMenubarScopedContext\n} from \"./JUCYQ5OS.js\";\nimport {\n  HovercardContextProvider,\n  HovercardScopedContextProvider\n} from \"./7Z7JH52O.js\";\nimport {\n  CompositeContextProvider,\n  CompositeScopedContextProvider\n} from \"./APTFW6PT.js\";\nimport {\n  createStoreContext\n} from \"./VOQWLFSQ.js\";\n\n// src/menu/menu-context.tsx\nimport { createContext } from \"react\";\nvar menu = createStoreContext(\n  [CompositeContextProvider, HovercardContextProvider],\n  [CompositeScopedContextProvider, HovercardScopedContextProvider]\n);\nvar useMenuContext = menu.useContext;\nvar useMenuScopedContext = menu.useScopedContext;\nvar useMenuProviderContext = menu.useProviderContext;\nvar MenuContextProvider = menu.ContextProvider;\nvar MenuScopedContextProvider = menu.ScopedContextProvider;\nvar useMenuBarContext = useMenubarContext;\nvar useMenuBarScopedContext = useMenubarScopedContext;\nvar useMenuBarProviderContext = useMenubarProviderContext;\nvar MenuBarContextProvider = MenubarContextProvider;\nvar MenuBarScopedContextProvider = MenubarScopedContextProvider;\nvar MenuItemCheckedContext = createContext(\n  void 0\n);\n\nexport {\n  useMenuContext,\n  useMenuScopedContext,\n  useMenuProviderContext,\n  MenuContextProvider,\n  MenuScopedContextProvider,\n  useMenuBarContext,\n  useMenuBarScopedContext,\n  useMenuBarProviderContext,\n  MenuBarContextProvider,\n  MenuBarScopedContextProvider,\n  MenuItemCheckedContext\n};\n","\"use client\";\nimport {\n  MenuScopedContextProvider,\n  useMenuProviderContext\n} from \"./4QTMCR75.js\";\nimport {\n  useCompositeTypeahead\n} from \"./OYOFZOGB.js\";\nimport {\n  isHidden\n} from \"./K4R5DNTX.js\";\nimport {\n  useComposite\n} from \"./NSTBQJLB.js\";\nimport {\n  useStoreState\n} from \"./RTNCFSKZ.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useEvent,\n  useId,\n  useMergeRefs,\n  useWrapElement\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/menu/menu-list.tsx\nimport { invariant } from \"@ariakit/core/utils/misc\";\nimport { useEffect, useState } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TagName = \"div\";\nfunction useAriaLabelledBy(_a) {\n  var _b = _a, { store } = _b, props = __objRest(_b, [\"store\"]);\n  const [id, setId] = useState(void 0);\n  const label = props[\"aria-label\"];\n  const disclosureElement = useStoreState(store, \"disclosureElement\");\n  const contentElement = useStoreState(store, \"contentElement\");\n  useEffect(() => {\n    const disclosure = disclosureElement;\n    if (!disclosure) return;\n    const menu = contentElement;\n    if (!menu) return;\n    const menuLabel = label || menu.hasAttribute(\"aria-label\");\n    if (menuLabel) {\n      setId(void 0);\n    } else if (disclosure.id) {\n      setId(disclosure.id);\n    }\n  }, [label, disclosureElement, contentElement]);\n  return id;\n}\nvar useMenuList = createHook(\n  function useMenuList2(_a) {\n    var _b = _a, { store, alwaysVisible, composite } = _b, props = __objRest(_b, [\"store\", \"alwaysVisible\", \"composite\"]);\n    const context = useMenuProviderContext();\n    store = store || context;\n    invariant(\n      store,\n      process.env.NODE_ENV !== \"production\" && \"MenuList must receive a `store` prop or be wrapped in a MenuProvider component.\"\n    );\n    const parentMenu = store.parent;\n    const parentMenubar = store.menubar;\n    const hasParentMenu = !!parentMenu;\n    const id = useId(props.id);\n    const onKeyDownProp = props.onKeyDown;\n    const dir = store.useState(\n      (state) => state.placement.split(\"-\")[0]\n    );\n    const orientation = store.useState(\n      (state) => state.orientation === \"both\" ? void 0 : state.orientation\n    );\n    const isHorizontal = orientation !== \"vertical\";\n    const isMenubarHorizontal = useStoreState(\n      parentMenubar,\n      (state) => !!state && state.orientation !== \"vertical\"\n    );\n    const onKeyDown = useEvent((event) => {\n      onKeyDownProp == null ? void 0 : onKeyDownProp(event);\n      if (event.defaultPrevented) return;\n      if (hasParentMenu || parentMenubar && !isHorizontal) {\n        const hideMap = {\n          ArrowRight: () => dir === \"left\" && !isHorizontal,\n          ArrowLeft: () => dir === \"right\" && !isHorizontal,\n          ArrowUp: () => dir === \"bottom\" && isHorizontal,\n          ArrowDown: () => dir === \"top\" && isHorizontal\n        };\n        const action = hideMap[event.key];\n        if (action == null ? void 0 : action()) {\n          event.stopPropagation();\n          event.preventDefault();\n          return store == null ? void 0 : store.hide();\n        }\n      }\n      if (parentMenubar) {\n        const keyMap = {\n          ArrowRight: () => {\n            if (!isMenubarHorizontal) return;\n            return parentMenubar.next();\n          },\n          ArrowLeft: () => {\n            if (!isMenubarHorizontal) return;\n            return parentMenubar.previous();\n          },\n          ArrowDown: () => {\n            if (isMenubarHorizontal) return;\n            return parentMenubar.next();\n          },\n          ArrowUp: () => {\n            if (isMenubarHorizontal) return;\n            return parentMenubar.previous();\n          }\n        };\n        const action = keyMap[event.key];\n        const id2 = action == null ? void 0 : action();\n        if (id2 !== void 0) {\n          event.stopPropagation();\n          event.preventDefault();\n          parentMenubar.move(id2);\n        }\n      }\n    });\n    props = useWrapElement(\n      props,\n      (element) => /* @__PURE__ */ jsx(MenuScopedContextProvider, { value: store, children: element }),\n      [store]\n    );\n    const ariaLabelledBy = useAriaLabelledBy(__spreadValues({ store }, props));\n    const mounted = store.useState(\"mounted\");\n    const hidden = isHidden(mounted, props.hidden, alwaysVisible);\n    const style = hidden ? __spreadProps(__spreadValues({}, props.style), { display: \"none\" }) : props.style;\n    props = __spreadProps(__spreadValues({\n      id,\n      \"aria-labelledby\": ariaLabelledBy,\n      hidden\n    }, props), {\n      ref: useMergeRefs(id ? store.setContentElement : null, props.ref),\n      style,\n      onKeyDown\n    });\n    const hasCombobox = !!store.combobox;\n    composite = composite != null ? composite : !hasCombobox;\n    if (composite) {\n      props = __spreadValues({\n        role: \"menu\",\n        \"aria-orientation\": orientation\n      }, props);\n    }\n    props = useComposite(__spreadValues({ store, composite }, props));\n    props = useCompositeTypeahead(__spreadValues({ store, typeahead: !hasCombobox }, props));\n    return props;\n  }\n);\nvar MenuList = forwardRef(function MenuList2(props) {\n  const htmlProps = useMenuList(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useMenuList,\n  MenuList\n};\n","\"use client\";\nimport {\n  useMenuList\n} from \"../__chunks/W5BTY3ZG.js\";\nimport {\n  useHovercard\n} from \"../__chunks/IUFFNNPK.js\";\nimport \"../__chunks/X7QOZUD3.js\";\nimport {\n  useMenuProviderContext\n} from \"../__chunks/4QTMCR75.js\";\nimport \"../__chunks/JUCYQ5OS.js\";\nimport \"../__chunks/7Z7JH52O.js\";\nimport \"../__chunks/OYOFZOGB.js\";\nimport \"../__chunks/C6DAL6ZN.js\";\nimport {\n  createDialogComponent\n} from \"../__chunks/CAGBPNDP.js\";\nimport \"../__chunks/M5DFOEFU.js\";\nimport \"../__chunks/AOQQTIBO.js\";\nimport \"../__chunks/5M6RIVE2.js\";\nimport \"../__chunks/S2F2XXEH.js\";\nimport \"../__chunks/DXGKYUAD.js\";\nimport \"../__chunks/LC6GJMGV.js\";\nimport \"../__chunks/6GXEOXGT.js\";\nimport \"../__chunks/JZEJYXOQ.js\";\nimport \"../__chunks/HLTQOHKZ.js\";\nimport \"../__chunks/PVECYOSC.js\";\nimport \"../__chunks/SOMPWLIQ.js\";\nimport \"../__chunks/W6WVJJEY.js\";\nimport \"../__chunks/CZ4GFWYL.js\";\nimport \"../__chunks/Z5GCVBAY.js\";\nimport \"../__chunks/IGR4SXG2.js\";\nimport \"../__chunks/677M2CI3.js\";\nimport \"../__chunks/S7U6BLGA.js\";\nimport \"../__chunks/FVE2C5B3.js\";\nimport \"../__chunks/3NDVDEB4.js\";\nimport \"../__chunks/AOUGVQZ3.js\";\nimport \"../__chunks/K2ZF5NU7.js\";\nimport \"../__chunks/63XF7ACK.js\";\nimport \"../__chunks/K4R5DNTX.js\";\nimport \"../__chunks/Y2U4BRIM.js\";\nimport \"../__chunks/T22PY7TE.js\";\nimport \"../__chunks/NSTBQJLB.js\";\nimport \"../__chunks/5VQZOHHZ.js\";\nimport \"../__chunks/QJ4LGO2N.js\";\nimport \"../__chunks/Y67KZUMI.js\";\nimport \"../__chunks/T2AZQXQU.js\";\nimport \"../__chunks/ABN76PSX.js\";\nimport \"../__chunks/APTFW6PT.js\";\nimport \"../__chunks/OE2EFRVA.js\";\nimport \"../__chunks/SWN3JYXT.js\";\nimport {\n  useStoreState\n} from \"../__chunks/RTNCFSKZ.js\";\nimport \"../__chunks/5CPL3B7G.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"../__chunks/VOQWLFSQ.js\";\nimport {\n  useMergeRefs\n} from \"../__chunks/5GGHRIN3.js\";\nimport \"../__chunks/SK3NAZA3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"../__chunks/3YLGPPWQ.js\";\n\n// src/menu/menu.tsx\nimport { fireEvent } from \"@ariakit/core/utils/events\";\nimport { hasFocusWithin } from \"@ariakit/core/utils/focus\";\nimport { invariant, isFalsyBooleanCallback } from \"@ariakit/core/utils/misc\";\nimport { createRef, useEffect, useMemo, useRef, useState } from \"react\";\nvar TagName = \"div\";\nvar useMenu = createHook(function useMenu2(_a) {\n  var _b = _a, {\n    store,\n    modal: modalProp = false,\n    portal = !!modalProp,\n    hideOnEscape = true,\n    autoFocusOnShow = true,\n    hideOnHoverOutside,\n    alwaysVisible\n  } = _b, props = __objRest(_b, [\n    \"store\",\n    \"modal\",\n    \"portal\",\n    \"hideOnEscape\",\n    \"autoFocusOnShow\",\n    \"hideOnHoverOutside\",\n    \"alwaysVisible\"\n  ]);\n  const context = useMenuProviderContext();\n  store = store || context;\n  invariant(\n    store,\n    process.env.NODE_ENV !== \"production\" && \"Menu must receive a `store` prop or be wrapped in a MenuProvider component.\"\n  );\n  const ref = useRef(null);\n  const parentMenu = store.parent;\n  const parentMenubar = store.menubar;\n  const hasParentMenu = !!parentMenu;\n  const parentIsMenubar = !!parentMenubar && !hasParentMenu;\n  props = __spreadProps(__spreadValues({}, props), {\n    ref: useMergeRefs(ref, props.ref)\n  });\n  const _a2 = useMenuList(__spreadValues({\n    store,\n    alwaysVisible\n  }, props)), { \"aria-labelledby\": ariaLabelledBy } = _a2, menuListProps = __objRest(_a2, [\"aria-labelledby\"]);\n  props = menuListProps;\n  const [initialFocusRef, setInitialFocusRef] = useState();\n  const autoFocusOnShowState = store.useState(\"autoFocusOnShow\");\n  const initialFocus = store.useState(\"initialFocus\");\n  const baseElement = store.useState(\"baseElement\");\n  const items = store.useState(\"renderedItems\");\n  useEffect(() => {\n    let cleaning = false;\n    setInitialFocusRef((prevInitialFocusRef) => {\n      var _a3, _b2, _c;\n      if (cleaning) return;\n      if (!autoFocusOnShowState) return;\n      if ((_a3 = prevInitialFocusRef == null ? void 0 : prevInitialFocusRef.current) == null ? void 0 : _a3.isConnected) return prevInitialFocusRef;\n      const ref2 = createRef();\n      switch (initialFocus) {\n        // TODO: Refactor\n        case \"first\":\n          ref2.current = ((_b2 = items.find((item) => !item.disabled && item.element)) == null ? void 0 : _b2.element) || null;\n          break;\n        case \"last\":\n          ref2.current = ((_c = [...items].reverse().find((item) => !item.disabled && item.element)) == null ? void 0 : _c.element) || null;\n          break;\n        default:\n          ref2.current = baseElement;\n      }\n      return ref2;\n    });\n    return () => {\n      cleaning = true;\n    };\n  }, [store, autoFocusOnShowState, initialFocus, items, baseElement]);\n  const modal = hasParentMenu ? false : modalProp;\n  const mayAutoFocusOnShow = !!autoFocusOnShow;\n  const canAutoFocusOnShow = !!initialFocusRef || !!props.initialFocus || !!modal;\n  const contentElement = useStoreState(\n    store.combobox || store,\n    \"contentElement\"\n  );\n  const parentContentElement = useStoreState(\n    (parentMenu == null ? void 0 : parentMenu.combobox) || parentMenu,\n    \"contentElement\"\n  );\n  const preserveTabOrderAnchor = useMemo(() => {\n    if (!parentContentElement) return;\n    if (!contentElement) return;\n    const role = contentElement.getAttribute(\"role\");\n    const parentRole = parentContentElement.getAttribute(\"role\");\n    const parentIsMenuOrMenubar = parentRole === \"menu\" || parentRole === \"menubar\";\n    if (parentIsMenuOrMenubar && role === \"menu\") return;\n    return parentContentElement;\n  }, [contentElement, parentContentElement]);\n  if (preserveTabOrderAnchor !== void 0) {\n    props = __spreadValues({\n      preserveTabOrderAnchor\n    }, props);\n  }\n  props = useHovercard(__spreadProps(__spreadValues({\n    store,\n    alwaysVisible,\n    initialFocus: initialFocusRef,\n    autoFocusOnShow: mayAutoFocusOnShow ? canAutoFocusOnShow && autoFocusOnShow : autoFocusOnShowState || !!modal\n  }, props), {\n    hideOnEscape(event) {\n      if (isFalsyBooleanCallback(hideOnEscape, event)) return false;\n      store == null ? void 0 : store.hideAll();\n      return true;\n    },\n    hideOnHoverOutside(event) {\n      const disclosureElement = store == null ? void 0 : store.getState().disclosureElement;\n      const getHideOnHoverOutside = () => {\n        if (typeof hideOnHoverOutside === \"function\") {\n          return hideOnHoverOutside(event);\n        }\n        if (hideOnHoverOutside != null) return hideOnHoverOutside;\n        if (hasParentMenu) return true;\n        if (!parentIsMenubar) return false;\n        if (!disclosureElement) return true;\n        if (hasFocusWithin(disclosureElement)) return false;\n        return true;\n      };\n      if (!getHideOnHoverOutside()) return false;\n      if (event.defaultPrevented) return true;\n      if (!hasParentMenu) return true;\n      if (!disclosureElement) return true;\n      fireEvent(disclosureElement, \"mouseout\", event);\n      if (!hasFocusWithin(disclosureElement)) return true;\n      requestAnimationFrame(() => {\n        if (hasFocusWithin(disclosureElement)) return;\n        store == null ? void 0 : store.hide();\n      });\n      return false;\n    },\n    modal,\n    portal,\n    backdrop: hasParentMenu ? false : props.backdrop\n  }));\n  props = __spreadValues({\n    \"aria-labelledby\": ariaLabelledBy\n  }, props);\n  return props;\n});\nvar Menu = createDialogComponent(\n  forwardRef(function Menu2(props) {\n    const htmlProps = useMenu(props);\n    return createElement(TagName, htmlProps);\n  }),\n  useMenuProviderContext\n);\nexport {\n  Menu,\n  useMenu\n};\n","\"use client\";\nimport {\n  MenuContextProvider,\n  useMenuProviderContext\n} from \"../__chunks/4QTMCR75.js\";\nimport \"../__chunks/JUCYQ5OS.js\";\nimport {\n  useHovercardAnchor\n} from \"../__chunks/TRDK6LYC.js\";\nimport \"../__chunks/7Z7JH52O.js\";\nimport {\n  useCompositeTypeahead\n} from \"../__chunks/OYOFZOGB.js\";\nimport {\n  usePopoverDisclosure\n} from \"../__chunks/4I4MLMKD.js\";\nimport \"../__chunks/HMCFFQCB.js\";\nimport \"../__chunks/ZTXFEM5L.js\";\nimport \"../__chunks/NMGNQVTG.js\";\nimport \"../__chunks/5VQZOHHZ.js\";\nimport {\n  Role\n} from \"../__chunks/QJ4LGO2N.js\";\nimport \"../__chunks/Y67KZUMI.js\";\nimport \"../__chunks/T2AZQXQU.js\";\nimport \"../__chunks/ABN76PSX.js\";\nimport \"../__chunks/APTFW6PT.js\";\nimport \"../__chunks/XCKGTAUF.js\";\nimport \"../__chunks/2W3RN7C5.js\";\nimport \"../__chunks/OE2EFRVA.js\";\nimport \"../__chunks/SWN3JYXT.js\";\nimport {\n  useStoreState\n} from \"../__chunks/RTNCFSKZ.js\";\nimport \"../__chunks/5CPL3B7G.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"../__chunks/VOQWLFSQ.js\";\nimport {\n  useEvent,\n  useId,\n  useMergeRefs,\n  useWrapElement\n} from \"../__chunks/5GGHRIN3.js\";\nimport \"../__chunks/SK3NAZA3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"../__chunks/3YLGPPWQ.js\";\n\n// src/menu/menu-button.tsx\nimport { getPopupItemRole, getPopupRole } from \"@ariakit/core/utils/dom\";\nimport { disabledFromProps, invariant } from \"@ariakit/core/utils/misc\";\nimport { useRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TagName = \"button\";\nfunction getInitialFocus(event, dir) {\n  const keyMap = {\n    ArrowDown: dir === \"bottom\" || dir === \"top\" ? \"first\" : false,\n    ArrowUp: dir === \"bottom\" || dir === \"top\" ? \"last\" : false,\n    ArrowRight: dir === \"right\" ? \"first\" : false,\n    ArrowLeft: dir === \"left\" ? \"first\" : false\n  };\n  return keyMap[event.key];\n}\nfunction hasActiveItem(items, excludeElement) {\n  return !!(items == null ? void 0 : items.some((item) => {\n    if (!item.element) return false;\n    if (item.element === excludeElement) return false;\n    return item.element.getAttribute(\"aria-expanded\") === \"true\";\n  }));\n}\nvar useMenuButton = createHook(\n  function useMenuButton2(_a) {\n    var _b = _a, {\n      store,\n      focusable,\n      accessibleWhenDisabled,\n      showOnHover\n    } = _b, props = __objRest(_b, [\n      \"store\",\n      \"focusable\",\n      \"accessibleWhenDisabled\",\n      \"showOnHover\"\n    ]);\n    const context = useMenuProviderContext();\n    store = store || context;\n    invariant(\n      store,\n      process.env.NODE_ENV !== \"production\" && \"MenuButton must receive a `store` prop or be wrapped in a MenuProvider component.\"\n    );\n    const ref = useRef(null);\n    const parentMenu = store.parent;\n    const parentMenubar = store.menubar;\n    const hasParentMenu = !!parentMenu;\n    const parentIsMenubar = !!parentMenubar && !hasParentMenu;\n    const disabled = disabledFromProps(props);\n    const showMenu = () => {\n      const trigger = ref.current;\n      if (!trigger) return;\n      store == null ? void 0 : store.setDisclosureElement(trigger);\n      store == null ? void 0 : store.setAnchorElement(trigger);\n      store == null ? void 0 : store.show();\n    };\n    const onFocusProp = props.onFocus;\n    const onFocus = useEvent((event) => {\n      onFocusProp == null ? void 0 : onFocusProp(event);\n      if (disabled) return;\n      if (event.defaultPrevented) return;\n      store == null ? void 0 : store.setAutoFocusOnShow(false);\n      store == null ? void 0 : store.setActiveId(null);\n      if (!parentMenubar) return;\n      if (!parentIsMenubar) return;\n      const { items } = parentMenubar.getState();\n      if (hasActiveItem(items, event.currentTarget)) {\n        showMenu();\n      }\n    });\n    const dir = useStoreState(\n      store,\n      (state) => state.placement.split(\"-\")[0]\n    );\n    const onKeyDownProp = props.onKeyDown;\n    const onKeyDown = useEvent((event) => {\n      onKeyDownProp == null ? void 0 : onKeyDownProp(event);\n      if (disabled) return;\n      if (event.defaultPrevented) return;\n      const initialFocus = getInitialFocus(event, dir);\n      if (initialFocus) {\n        event.preventDefault();\n        showMenu();\n        store == null ? void 0 : store.setAutoFocusOnShow(true);\n        store == null ? void 0 : store.setInitialFocus(initialFocus);\n      }\n    });\n    const onClickProp = props.onClick;\n    const onClick = useEvent((event) => {\n      onClickProp == null ? void 0 : onClickProp(event);\n      if (event.defaultPrevented) return;\n      if (!store) return;\n      const isKeyboardClick = !event.detail;\n      const { open } = store.getState();\n      if (!open || isKeyboardClick) {\n        if (!hasParentMenu || isKeyboardClick) {\n          store.setAutoFocusOnShow(true);\n        }\n        store.setInitialFocus(isKeyboardClick ? \"first\" : \"container\");\n      }\n      if (hasParentMenu) {\n        showMenu();\n      }\n    });\n    props = useWrapElement(\n      props,\n      (element) => /* @__PURE__ */ jsx(MenuContextProvider, { value: store, children: element }),\n      [store]\n    );\n    if (hasParentMenu) {\n      props = __spreadProps(__spreadValues({}, props), {\n        render: /* @__PURE__ */ jsx(Role.div, { render: props.render })\n      });\n    }\n    const id = useId(props.id);\n    const parentContentElement = useStoreState(\n      (parentMenu == null ? void 0 : parentMenu.combobox) || parentMenu,\n      \"contentElement\"\n    );\n    const role = hasParentMenu || parentIsMenubar ? getPopupItemRole(parentContentElement, \"menuitem\") : void 0;\n    const contentElement = store.useState(\"contentElement\");\n    props = __spreadProps(__spreadValues({\n      id,\n      role,\n      \"aria-haspopup\": getPopupRole(contentElement, \"menu\")\n    }, props), {\n      ref: useMergeRefs(ref, props.ref),\n      onFocus,\n      onKeyDown,\n      onClick\n    });\n    props = useHovercardAnchor(__spreadProps(__spreadValues({\n      store,\n      focusable,\n      accessibleWhenDisabled\n    }, props), {\n      showOnHover: (event) => {\n        const getShowOnHover = () => {\n          if (typeof showOnHover === \"function\") return showOnHover(event);\n          if (showOnHover != null) return showOnHover;\n          if (hasParentMenu) return true;\n          if (!parentMenubar) return false;\n          const { items } = parentMenubar.getState();\n          return parentIsMenubar && hasActiveItem(items);\n        };\n        const canShowOnHover = getShowOnHover();\n        if (!canShowOnHover) return false;\n        const parent = parentIsMenubar ? parentMenubar : parentMenu;\n        if (!parent) return true;\n        parent.setActiveId(event.currentTarget.id);\n        return true;\n      }\n    }));\n    props = usePopoverDisclosure(__spreadValues({\n      store,\n      toggleOnClick: !hasParentMenu,\n      focusable,\n      accessibleWhenDisabled\n    }, props));\n    props = useCompositeTypeahead(__spreadValues({\n      store,\n      typeahead: parentIsMenubar\n    }, props));\n    return props;\n  }\n);\nvar MenuButton = forwardRef(function MenuButton2(props) {\n  const htmlProps = useMenuButton(props);\n  return createElement(TagName, htmlProps);\n});\nexport {\n  MenuButton,\n  useMenuButton\n};\n","\"use client\";\nimport {\n  usePopoverDisclosureArrow\n} from \"../__chunks/A5NH37Z4.js\";\nimport {\n  useMenuContext\n} from \"../__chunks/4QTMCR75.js\";\nimport \"../__chunks/JUCYQ5OS.js\";\nimport \"../__chunks/7Z7JH52O.js\";\nimport \"../__chunks/Y67KZUMI.js\";\nimport \"../__chunks/T2AZQXQU.js\";\nimport \"../__chunks/ABN76PSX.js\";\nimport \"../__chunks/APTFW6PT.js\";\nimport \"../__chunks/5CPL3B7G.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"../__chunks/VOQWLFSQ.js\";\nimport \"../__chunks/5GGHRIN3.js\";\nimport \"../__chunks/SK3NAZA3.js\";\nimport {\n  __objRest,\n  __spreadValues\n} from \"../__chunks/3YLGPPWQ.js\";\n\n// src/menu/menu-button-arrow.tsx\nvar TagName = \"span\";\nvar useMenuButtonArrow = createHook(\n  function useMenuButtonArrow2(_a) {\n    var _b = _a, { store } = _b, props = __objRest(_b, [\"store\"]);\n    const context = useMenuContext();\n    store = store || context;\n    props = usePopoverDisclosureArrow(__spreadValues({ store }, props));\n    return props;\n  }\n);\nvar MenuButtonArrow = forwardRef(function MenuButtonArrow2(props) {\n  const htmlProps = useMenuButtonArrow(props);\n  return createElement(TagName, htmlProps);\n});\nexport {\n  MenuButtonArrow,\n  useMenuButtonArrow\n};\n","\"use client\";\nimport {\n  useCompositeGroup\n} from \"../__chunks/T4WMOWCD.js\";\nimport \"../__chunks/WXI7YN3P.js\";\nimport \"../__chunks/7HVFURXT.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"../__chunks/VOQWLFSQ.js\";\nimport \"../__chunks/5GGHRIN3.js\";\nimport \"../__chunks/SK3NAZA3.js\";\nimport \"../__chunks/3YLGPPWQ.js\";\n\n// src/menu/menu-group.tsx\nvar TagName = \"div\";\nvar useMenuGroup = createHook(\n  function useMenuGroup2(props) {\n    props = useCompositeGroup(props);\n    return props;\n  }\n);\nvar MenuGroup = forwardRef(function MenuGroup2(props) {\n  const htmlProps = useMenuGroup(props);\n  return createElement(TagName, htmlProps);\n});\nexport {\n  MenuGroup,\n  useMenuGroup\n};\n","\"use client\";\nimport {\n  useMenuScopedContext\n} from \"./4QTMCR75.js\";\nimport {\n  useMenubarScopedContext\n} from \"./JUCYQ5OS.js\";\nimport {\n  useCompositeHover\n} from \"./IABE5EV2.js\";\nimport {\n  useCompositeItem\n} from \"./SBSPVDDI.js\";\nimport {\n  useStoreState\n} from \"./RTNCFSKZ.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef,\n  memo\n} from \"./VOQWLFSQ.js\";\nimport {\n  useBooleanEvent,\n  useEvent\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/menu/menu-item.tsx\nimport { getDocument, getPopupItemRole } from \"@ariakit/core/utils/dom\";\nimport { isDownloading, isOpeningInNewTab } from \"@ariakit/core/utils/events\";\nimport { hasFocusWithin } from \"@ariakit/core/utils/focus\";\nimport { invariant } from \"@ariakit/core/utils/misc\";\nvar TagName = \"div\";\nfunction menuHasFocus(baseElement, items, currentTarget) {\n  var _a;\n  if (!baseElement) return false;\n  if (hasFocusWithin(baseElement)) return true;\n  const expandedItem = items == null ? void 0 : items.find((item) => {\n    var _a2;\n    if (item.element === currentTarget) return false;\n    return ((_a2 = item.element) == null ? void 0 : _a2.getAttribute(\"aria-expanded\")) === \"true\";\n  });\n  const expandedMenuId = (_a = expandedItem == null ? void 0 : expandedItem.element) == null ? void 0 : _a.getAttribute(\"aria-controls\");\n  if (!expandedMenuId) return false;\n  const doc = getDocument(baseElement);\n  const expandedMenu = doc.getElementById(expandedMenuId);\n  if (!expandedMenu) return false;\n  if (hasFocusWithin(expandedMenu)) return true;\n  return !!expandedMenu.querySelector(\"[role=menuitem][aria-expanded=true]\");\n}\nvar useMenuItem = createHook(\n  function useMenuItem2(_a) {\n    var _b = _a, {\n      store,\n      hideOnClick = true,\n      preventScrollOnKeyDown = true,\n      focusOnHover,\n      blurOnHoverEnd\n    } = _b, props = __objRest(_b, [\n      \"store\",\n      \"hideOnClick\",\n      \"preventScrollOnKeyDown\",\n      \"focusOnHover\",\n      \"blurOnHoverEnd\"\n    ]);\n    const menuContext = useMenuScopedContext(true);\n    const menubarContext = useMenubarScopedContext();\n    store = store || menuContext || menubarContext;\n    invariant(\n      store,\n      process.env.NODE_ENV !== \"production\" && \"MenuItem must be wrapped in a MenuList, Menu or Menubar component\"\n    );\n    const onClickProp = props.onClick;\n    const hideOnClickProp = useBooleanEvent(hideOnClick);\n    const hideMenu = \"hideAll\" in store ? store.hideAll : void 0;\n    const isWithinMenu = !!hideMenu;\n    const onClick = useEvent((event) => {\n      onClickProp == null ? void 0 : onClickProp(event);\n      if (event.defaultPrevented) return;\n      if (isDownloading(event)) return;\n      if (isOpeningInNewTab(event)) return;\n      if (!hideMenu) return;\n      const popupType = event.currentTarget.getAttribute(\"aria-haspopup\");\n      if (popupType === \"menu\") return;\n      if (!hideOnClickProp(event)) return;\n      hideMenu();\n    });\n    const contentElement = useStoreState(\n      store,\n      (state) => \"contentElement\" in state ? state.contentElement : null\n    );\n    const role = getPopupItemRole(contentElement, \"menuitem\");\n    props = __spreadProps(__spreadValues({\n      role\n    }, props), {\n      onClick\n    });\n    props = useCompositeItem(__spreadValues({\n      store,\n      preventScrollOnKeyDown\n    }, props));\n    props = useCompositeHover(__spreadProps(__spreadValues({\n      store\n    }, props), {\n      focusOnHover(event) {\n        const getFocusOnHover = () => {\n          if (typeof focusOnHover === \"function\") return focusOnHover(event);\n          if (focusOnHover != null) return focusOnHover;\n          return true;\n        };\n        if (!store) return false;\n        if (!getFocusOnHover()) return false;\n        const { baseElement, items } = store.getState();\n        if (isWithinMenu) {\n          if (event.currentTarget.hasAttribute(\"aria-expanded\")) {\n            event.currentTarget.focus();\n          }\n          return true;\n        }\n        if (menuHasFocus(baseElement, items, event.currentTarget)) {\n          event.currentTarget.focus();\n          return true;\n        }\n        return false;\n      },\n      blurOnHoverEnd(event) {\n        if (typeof blurOnHoverEnd === \"function\") return blurOnHoverEnd(event);\n        if (blurOnHoverEnd != null) return blurOnHoverEnd;\n        return isWithinMenu;\n      }\n    }));\n    return props;\n  }\n);\nvar MenuItem = memo(\n  forwardRef(function MenuItem2(props) {\n    const htmlProps = useMenuItem(props);\n    return createElement(TagName, htmlProps);\n  })\n);\n\nexport {\n  useMenuItem,\n  MenuItem\n};\n","\"use client\";\nimport {\n  MenuItemCheckedContext\n} from \"../__chunks/4QTMCR75.js\";\nimport \"../__chunks/JUCYQ5OS.js\";\nimport \"../__chunks/7Z7JH52O.js\";\nimport \"../__chunks/Y67KZUMI.js\";\nimport \"../__chunks/T2AZQXQU.js\";\nimport \"../__chunks/ABN76PSX.js\";\nimport \"../__chunks/APTFW6PT.js\";\nimport {\n  useCheckboxCheck\n} from \"../__chunks/X5OJP2NB.js\";\nimport \"../__chunks/EYKMH5G5.js\";\nimport \"../__chunks/5CPL3B7G.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"../__chunks/VOQWLFSQ.js\";\nimport \"../__chunks/5GGHRIN3.js\";\nimport \"../__chunks/SK3NAZA3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"../__chunks/3YLGPPWQ.js\";\n\n// src/menu/menu-item-check.tsx\nimport { useContext } from \"react\";\nvar TagName = \"span\";\nvar useMenuItemCheck = createHook(\n  function useMenuItemCheck2(_a) {\n    var _b = _a, { store, checked } = _b, props = __objRest(_b, [\"store\", \"checked\"]);\n    const context = useContext(MenuItemCheckedContext);\n    checked = checked != null ? checked : context;\n    props = useCheckboxCheck(__spreadProps(__spreadValues({}, props), { checked }));\n    return props;\n  }\n);\nvar MenuItemCheck = forwardRef(function MenuItemCheck2(props) {\n  const htmlProps = useMenuItemCheck(props);\n  return createElement(TagName, htmlProps);\n});\nexport {\n  MenuItemCheck,\n  useMenuItemCheck\n};\n","\"use client\";\nimport {\n  useMenuItem\n} from \"../__chunks/BSJHR6LI.js\";\nimport {\n  MenuItemCheckedContext,\n  useMenuScopedContext\n} from \"../__chunks/4QTMCR75.js\";\nimport \"../__chunks/JUCYQ5OS.js\";\nimport \"../__chunks/7Z7JH52O.js\";\nimport {\n  useRadio\n} from \"../__chunks/SQZLCNLX.js\";\nimport \"../__chunks/BGBYET7R.js\";\nimport \"../__chunks/IABE5EV2.js\";\nimport \"../__chunks/SBSPVDDI.js\";\nimport \"../__chunks/5VQZOHHZ.js\";\nimport \"../__chunks/Y62RTBST.js\";\nimport \"../__chunks/Y67KZUMI.js\";\nimport \"../__chunks/T2AZQXQU.js\";\nimport \"../__chunks/ABN76PSX.js\";\nimport \"../__chunks/APTFW6PT.js\";\nimport \"../__chunks/2W3RN7C5.js\";\nimport \"../__chunks/OE2EFRVA.js\";\nimport \"../__chunks/SWN3JYXT.js\";\nimport \"../__chunks/RTNCFSKZ.js\";\nimport \"../__chunks/5CPL3B7G.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef,\n  memo\n} from \"../__chunks/VOQWLFSQ.js\";\nimport {\n  useInitialValue,\n  useWrapElement\n} from \"../__chunks/5GGHRIN3.js\";\nimport \"../__chunks/SK3NAZA3.js\";\nimport {\n  __objRest,\n  __spreadValues\n} from \"../__chunks/3YLGPPWQ.js\";\n\n// src/menu/menu-item-radio.tsx\nimport { invariant } from \"@ariakit/core/utils/misc\";\nimport { useEffect } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TagName = \"div\";\nfunction getValue(prevValue, value, checked) {\n  if (checked === void 0) return prevValue;\n  if (checked) return value;\n  return prevValue;\n}\nvar useMenuItemRadio = createHook(\n  function useMenuItemRadio2(_a) {\n    var _b = _a, {\n      store,\n      name,\n      value,\n      checked,\n      onChange: onChangeProp,\n      hideOnClick = false\n    } = _b, props = __objRest(_b, [\n      \"store\",\n      \"name\",\n      \"value\",\n      \"checked\",\n      \"onChange\",\n      \"hideOnClick\"\n    ]);\n    const context = useMenuScopedContext();\n    store = store || context;\n    invariant(\n      store,\n      process.env.NODE_ENV !== \"production\" && \"MenuItemRadio must be wrapped in a MenuList or Menu component\"\n    );\n    const defaultChecked = useInitialValue(props.defaultChecked);\n    useEffect(() => {\n      store == null ? void 0 : store.setValue(name, (prevValue = false) => {\n        return getValue(prevValue, value, defaultChecked);\n      });\n    }, [store, name, value, defaultChecked]);\n    useEffect(() => {\n      if (checked === void 0) return;\n      store == null ? void 0 : store.setValue(name, (prevValue) => {\n        return getValue(prevValue, value, checked);\n      });\n    }, [store, name, value, checked]);\n    const isChecked = store.useState((state) => state.values[name] === value);\n    props = useWrapElement(\n      props,\n      (element) => /* @__PURE__ */ jsx(MenuItemCheckedContext.Provider, { value: !!isChecked, children: element }),\n      [isChecked]\n    );\n    props = __spreadValues({\n      role: \"menuitemradio\"\n    }, props);\n    props = useRadio(__spreadValues({\n      name,\n      value,\n      checked: isChecked,\n      onChange(event) {\n        onChangeProp == null ? void 0 : onChangeProp(event);\n        if (event.defaultPrevented) return;\n        const element = event.currentTarget;\n        store == null ? void 0 : store.setValue(name, (prevValue) => {\n          return getValue(prevValue, value, checked != null ? checked : element.checked);\n        });\n      }\n    }, props));\n    props = useMenuItem(__spreadValues({ store, hideOnClick }, props));\n    return props;\n  }\n);\nvar MenuItemRadio = memo(\n  forwardRef(function MenuItemRadio2(props) {\n    const htmlProps = useMenuItemRadio(props);\n    return createElement(TagName, htmlProps);\n  })\n);\nexport {\n  MenuItemRadio,\n  useMenuItemRadio\n};\n","\"use client\";\nimport {\n  createHovercardStore\n} from \"../__chunks/JTLIIJ4U.js\";\nimport \"../__chunks/ME2CUF3F.js\";\nimport {\n  createCompositeStore\n} from \"../__chunks/2CHYBBFH.js\";\nimport \"../__chunks/7PRQYBBV.js\";\nimport \"../__chunks/FZZ2AVHF.js\";\nimport \"../__chunks/RCQ5P4YE.js\";\nimport \"../__chunks/EO4GVUA4.js\";\nimport \"../__chunks/DTR5TSDJ.js\";\nimport {\n  createStore,\n  mergeStore,\n  omit,\n  pick,\n  setup,\n  sync,\n  throwOnConflictingProps\n} from \"../__chunks/BCALMBPZ.js\";\nimport {\n  applyState,\n  defaultValue\n} from \"../__chunks/PBFD2E7P.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"../__chunks/3YLGPPWQ.js\";\n\n// src/menu/menu-store.ts\nfunction createMenuStore(_a = {}) {\n  var _b = _a, {\n    combobox,\n    parent,\n    menubar\n  } = _b, props = __objRest(_b, [\n    \"combobox\",\n    \"parent\",\n    \"menubar\"\n  ]);\n  const parentIsMenubar = !!menubar && !parent;\n  const store = mergeStore(\n    props.store,\n    pick(parent, [\"values\"]),\n    omit(combobox, [\n      \"arrowElement\",\n      \"anchorElement\",\n      \"contentElement\",\n      \"popoverElement\",\n      \"disclosureElement\"\n    ])\n  );\n  throwOnConflictingProps(props, store);\n  const syncState = store.getState();\n  const composite = createCompositeStore(__spreadProps(__spreadValues({}, props), {\n    store,\n    orientation: defaultValue(\n      props.orientation,\n      syncState.orientation,\n      \"vertical\"\n    )\n  }));\n  const hovercard = createHovercardStore(__spreadProps(__spreadValues({}, props), {\n    store,\n    placement: defaultValue(\n      props.placement,\n      syncState.placement,\n      \"bottom-start\"\n    ),\n    timeout: defaultValue(\n      props.timeout,\n      syncState.timeout,\n      parentIsMenubar ? 0 : 150\n    ),\n    hideTimeout: defaultValue(props.hideTimeout, syncState.hideTimeout, 0)\n  }));\n  const initialState = __spreadProps(__spreadValues(__spreadValues({}, composite.getState()), hovercard.getState()), {\n    initialFocus: defaultValue(syncState.initialFocus, \"container\"),\n    values: defaultValue(\n      props.values,\n      syncState.values,\n      props.defaultValues,\n      {}\n    )\n  });\n  const menu = createStore(initialState, composite, hovercard, store);\n  setup(\n    menu,\n    () => sync(menu, [\"mounted\"], (state) => {\n      if (state.mounted) return;\n      menu.setState(\"activeId\", null);\n    })\n  );\n  setup(\n    menu,\n    () => sync(parent, [\"orientation\"], (state) => {\n      menu.setState(\n        \"placement\",\n        state.orientation === \"vertical\" ? \"right-start\" : \"bottom-start\"\n      );\n    })\n  );\n  return __spreadProps(__spreadValues(__spreadValues(__spreadValues({}, composite), hovercard), menu), {\n    combobox,\n    parent,\n    menubar,\n    hideAll: () => {\n      hovercard.hide();\n      parent == null ? void 0 : parent.hideAll();\n    },\n    setInitialFocus: (value) => menu.setState(\"initialFocus\", value),\n    setValues: (values) => menu.setState(\"values\", values),\n    setValue: (name, value) => {\n      if (name === \"__proto__\") return;\n      if (name === \"constructor\") return;\n      if (Array.isArray(name)) return;\n      menu.setState(\"values\", (values) => {\n        const prevValue = values[name];\n        const nextValue = applyState(value, prevValue);\n        if (nextValue === prevValue) return values;\n        return __spreadProps(__spreadValues({}, values), {\n          [name]: nextValue !== void 0 && nextValue\n        });\n      });\n    }\n  });\n}\nexport {\n  createMenuStore\n};\n","\"use client\";\nimport {\n  useMenuContext\n} from \"./4QTMCR75.js\";\nimport {\n  useMenubarContext\n} from \"./JUCYQ5OS.js\";\nimport {\n  useHovercardStoreProps\n} from \"./GVVKDT6A.js\";\nimport {\n  useCompositeStoreProps\n} from \"./B7UTNDHN.js\";\nimport {\n  useComboboxProviderContext\n} from \"./OLVWQA7U.js\";\nimport {\n  useStore,\n  useStoreProps\n} from \"./RTNCFSKZ.js\";\nimport {\n  useUpdateEffect\n} from \"./5GGHRIN3.js\";\nimport {\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/menu/menu-store.ts\nimport * as Core from \"@ariakit/core/menu/menu-store\";\nfunction useMenuStoreProps(store, update, props) {\n  useUpdateEffect(update, [props.combobox, props.parent, props.menubar]);\n  useStoreProps(store, props, \"values\", \"setValues\");\n  return Object.assign(\n    useHovercardStoreProps(\n      useCompositeStoreProps(store, update, props),\n      update,\n      props\n    ),\n    {\n      combobox: props.combobox,\n      parent: props.parent,\n      menubar: props.menubar\n    }\n  );\n}\nfunction useMenuStore(props = {}) {\n  const parent = useMenuContext();\n  const menubar = useMenubarContext();\n  const combobox = useComboboxProviderContext();\n  props = __spreadProps(__spreadValues({}, props), {\n    parent: props.parent !== void 0 ? props.parent : parent,\n    menubar: props.menubar !== void 0 ? props.menubar : menubar,\n    combobox: props.combobox !== void 0 ? props.combobox : combobox\n  });\n  const [store, update] = useStore(Core.createMenuStore, props);\n  return useMenuStoreProps(store, update, props);\n}\n\nexport {\n  useMenuStoreProps,\n  useMenuStore\n};\n","\"use client\";\nimport {\n  useMenuStore\n} from \"../__chunks/BV5PFOXH.js\";\nimport {\n  MenuContextProvider\n} from \"../__chunks/4QTMCR75.js\";\nimport \"../__chunks/JUCYQ5OS.js\";\nimport \"../__chunks/GVVKDT6A.js\";\nimport \"../__chunks/7Z7JH52O.js\";\nimport \"../__chunks/RUY5BUJG.js\";\nimport \"../__chunks/B7UTNDHN.js\";\nimport \"../__chunks/Y2U4BRIM.js\";\nimport \"../__chunks/T22PY7TE.js\";\nimport \"../__chunks/AMMIPFT4.js\";\nimport \"../__chunks/OLVWQA7U.js\";\nimport \"../__chunks/Y67KZUMI.js\";\nimport \"../__chunks/T2AZQXQU.js\";\nimport \"../__chunks/ABN76PSX.js\";\nimport \"../__chunks/APTFW6PT.js\";\nimport \"../__chunks/RTNCFSKZ.js\";\nimport \"../__chunks/5CPL3B7G.js\";\nimport \"../__chunks/VOQWLFSQ.js\";\nimport \"../__chunks/5GGHRIN3.js\";\nimport \"../__chunks/SK3NAZA3.js\";\nimport \"../__chunks/3YLGPPWQ.js\";\n\n// src/menu/menu-provider.tsx\nimport { jsx } from \"react/jsx-runtime\";\nfunction MenuProvider(props = {}) {\n  const store = useMenuStore(props);\n  return /* @__PURE__ */ jsx(MenuContextProvider, { value: store, children: props.children });\n}\nexport {\n  MenuProvider\n};\n","\"use client\";\nimport {\n  useComposite\n} from \"../__chunks/NSTBQJLB.js\";\nimport {\n  usePopoverAnchor\n} from \"../__chunks/HMCFFQCB.js\";\nimport \"../__chunks/5VQZOHHZ.js\";\nimport {\n  useComboboxProviderContext\n} from \"../__chunks/OLVWQA7U.js\";\nimport \"../__chunks/Y67KZUMI.js\";\nimport \"../__chunks/T2AZQXQU.js\";\nimport \"../__chunks/ABN76PSX.js\";\nimport \"../__chunks/APTFW6PT.js\";\nimport \"../__chunks/OE2EFRVA.js\";\nimport \"../__chunks/SWN3JYXT.js\";\nimport \"../__chunks/5CPL3B7G.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"../__chunks/VOQWLFSQ.js\";\nimport {\n  useBooleanEvent,\n  useEvent,\n  useForceUpdate,\n  useId,\n  useMergeRefs,\n  useSafeLayoutEffect,\n  useUpdateEffect,\n  useUpdateLayoutEffect\n} from \"../__chunks/5GGHRIN3.js\";\nimport \"../__chunks/SK3NAZA3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"../__chunks/3YLGPPWQ.js\";\n\n// src/combobox/combobox.tsx\nimport {\n  getPopupRole,\n  getScrollingElement,\n  getTextboxSelection,\n  setSelectionRange\n} from \"@ariakit/core/utils/dom\";\nimport {\n  isFocusEventOutside,\n  queueBeforeEvent\n} from \"@ariakit/core/utils/events\";\nimport { hasFocus } from \"@ariakit/core/utils/focus\";\nimport {\n  invariant,\n  isFalsyBooleanCallback,\n  noop,\n  normalizeString\n} from \"@ariakit/core/utils/misc\";\nimport { sync } from \"@ariakit/core/utils/store\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nvar TagName = \"input\";\nfunction isFirstItemAutoSelected(items, activeValue, autoSelect) {\n  if (!autoSelect) return false;\n  const firstItem = items.find((item) => !item.disabled && item.value);\n  return (firstItem == null ? void 0 : firstItem.value) === activeValue;\n}\nfunction hasCompletionString(value, activeValue) {\n  if (!activeValue) return false;\n  if (value == null) return false;\n  value = normalizeString(value);\n  return activeValue.length > value.length && activeValue.toLowerCase().indexOf(value.toLowerCase()) === 0;\n}\nfunction isInputEvent(event) {\n  return event.type === \"input\";\n}\nfunction isAriaAutoCompleteValue(value) {\n  return value === \"inline\" || value === \"list\" || value === \"both\" || value === \"none\";\n}\nfunction getDefaultAutoSelectId(items) {\n  const item = items.find((item2) => {\n    var _a;\n    if (item2.disabled) return false;\n    return ((_a = item2.element) == null ? void 0 : _a.getAttribute(\"role\")) !== \"tab\";\n  });\n  return item == null ? void 0 : item.id;\n}\nvar useCombobox = createHook(\n  function useCombobox2(_a) {\n    var _b = _a, {\n      store,\n      focusable = true,\n      autoSelect: autoSelectProp = false,\n      getAutoSelectId,\n      setValueOnChange,\n      showMinLength = 0,\n      showOnChange,\n      showOnMouseDown,\n      showOnClick = showOnMouseDown,\n      showOnKeyDown,\n      showOnKeyPress = showOnKeyDown,\n      blurActiveItemOnClick,\n      setValueOnClick = true,\n      moveOnKeyPress = true,\n      autoComplete = \"list\"\n    } = _b, props = __objRest(_b, [\n      \"store\",\n      \"focusable\",\n      \"autoSelect\",\n      \"getAutoSelectId\",\n      \"setValueOnChange\",\n      \"showMinLength\",\n      \"showOnChange\",\n      \"showOnMouseDown\",\n      \"showOnClick\",\n      \"showOnKeyDown\",\n      \"showOnKeyPress\",\n      \"blurActiveItemOnClick\",\n      \"setValueOnClick\",\n      \"moveOnKeyPress\",\n      \"autoComplete\"\n    ]);\n    const context = useComboboxProviderContext();\n    store = store || context;\n    invariant(\n      store,\n      process.env.NODE_ENV !== \"production\" && \"Combobox must receive a `store` prop or be wrapped in a ComboboxProvider component.\"\n    );\n    const ref = useRef(null);\n    const [valueUpdated, forceValueUpdate] = useForceUpdate();\n    const canAutoSelectRef = useRef(false);\n    const composingRef = useRef(false);\n    const autoSelect = store.useState(\n      (state) => state.virtualFocus && autoSelectProp\n    );\n    const inline = autoComplete === \"inline\" || autoComplete === \"both\";\n    const [canInline, setCanInline] = useState(inline);\n    useUpdateLayoutEffect(() => {\n      if (!inline) return;\n      setCanInline(true);\n    }, [inline]);\n    const storeValue = store.useState(\"value\");\n    const prevSelectedValueRef = useRef();\n    useEffect(() => {\n      return sync(store, [\"selectedValue\", \"activeId\"], (_, prev) => {\n        prevSelectedValueRef.current = prev.selectedValue;\n      });\n    }, []);\n    const inlineActiveValue = store.useState((state) => {\n      var _a2;\n      if (!inline) return;\n      if (!canInline) return;\n      if (state.activeValue && Array.isArray(state.selectedValue)) {\n        if (state.selectedValue.includes(state.activeValue)) return;\n        if ((_a2 = prevSelectedValueRef.current) == null ? void 0 : _a2.includes(state.activeValue)) return;\n      }\n      return state.activeValue;\n    });\n    const items = store.useState(\"renderedItems\");\n    const open = store.useState(\"open\");\n    const contentElement = store.useState(\"contentElement\");\n    const value = useMemo(() => {\n      if (!inline) return storeValue;\n      if (!canInline) return storeValue;\n      const firstItemAutoSelected = isFirstItemAutoSelected(\n        items,\n        inlineActiveValue,\n        autoSelect\n      );\n      if (firstItemAutoSelected) {\n        if (hasCompletionString(storeValue, inlineActiveValue)) {\n          const slice = (inlineActiveValue == null ? void 0 : inlineActiveValue.slice(storeValue.length)) || \"\";\n          return storeValue + slice;\n        }\n        return storeValue;\n      }\n      return inlineActiveValue || storeValue;\n    }, [inline, canInline, items, inlineActiveValue, autoSelect, storeValue]);\n    useEffect(() => {\n      const element = ref.current;\n      if (!element) return;\n      const onCompositeItemMove = () => setCanInline(true);\n      element.addEventListener(\"combobox-item-move\", onCompositeItemMove);\n      return () => {\n        element.removeEventListener(\"combobox-item-move\", onCompositeItemMove);\n      };\n    }, []);\n    useEffect(() => {\n      if (!inline) return;\n      if (!canInline) return;\n      if (!inlineActiveValue) return;\n      const firstItemAutoSelected = isFirstItemAutoSelected(\n        items,\n        inlineActiveValue,\n        autoSelect\n      );\n      if (!firstItemAutoSelected) return;\n      if (!hasCompletionString(storeValue, inlineActiveValue)) return;\n      let cleanup = noop;\n      queueMicrotask(() => {\n        const element = ref.current;\n        if (!element) return;\n        const { start: prevStart, end: prevEnd } = getTextboxSelection(element);\n        const nextStart = storeValue.length;\n        const nextEnd = inlineActiveValue.length;\n        setSelectionRange(element, nextStart, nextEnd);\n        cleanup = () => {\n          if (!hasFocus(element)) return;\n          const { start, end } = getTextboxSelection(element);\n          if (start !== nextStart) return;\n          if (end !== nextEnd) return;\n          setSelectionRange(element, prevStart, prevEnd);\n        };\n      });\n      return () => cleanup();\n    }, [\n      valueUpdated,\n      inline,\n      canInline,\n      inlineActiveValue,\n      items,\n      autoSelect,\n      storeValue\n    ]);\n    const scrollingElementRef = useRef(null);\n    const getAutoSelectIdProp = useEvent(getAutoSelectId);\n    const autoSelectIdRef = useRef(null);\n    useEffect(() => {\n      if (!open) return;\n      if (!contentElement) return;\n      const scrollingElement = getScrollingElement(contentElement);\n      if (!scrollingElement) return;\n      scrollingElementRef.current = scrollingElement;\n      const onUserScroll = () => {\n        canAutoSelectRef.current = false;\n      };\n      const onScroll = () => {\n        if (!store) return;\n        if (!canAutoSelectRef.current) return;\n        const { activeId } = store.getState();\n        if (activeId === null) return;\n        if (activeId === autoSelectIdRef.current) return;\n        canAutoSelectRef.current = false;\n      };\n      const options = { passive: true, capture: true };\n      scrollingElement.addEventListener(\"wheel\", onUserScroll, options);\n      scrollingElement.addEventListener(\"touchmove\", onUserScroll, options);\n      scrollingElement.addEventListener(\"scroll\", onScroll, options);\n      return () => {\n        scrollingElement.removeEventListener(\"wheel\", onUserScroll, true);\n        scrollingElement.removeEventListener(\"touchmove\", onUserScroll, true);\n        scrollingElement.removeEventListener(\"scroll\", onScroll, true);\n      };\n    }, [open, contentElement, store]);\n    useSafeLayoutEffect(() => {\n      if (!storeValue) return;\n      if (composingRef.current) return;\n      canAutoSelectRef.current = true;\n    }, [storeValue]);\n    useSafeLayoutEffect(() => {\n      if (autoSelect !== \"always\" && open) return;\n      canAutoSelectRef.current = open;\n    }, [autoSelect, open]);\n    const resetValueOnSelect = store.useState(\"resetValueOnSelect\");\n    useUpdateEffect(() => {\n      var _a2, _b2;\n      const canAutoSelect = canAutoSelectRef.current;\n      if (!store) return;\n      if (!open) return;\n      if (!canAutoSelect && !resetValueOnSelect) return;\n      const { baseElement, contentElement: contentElement2, activeId } = store.getState();\n      if (baseElement && !hasFocus(baseElement)) return;\n      if (contentElement2 == null ? void 0 : contentElement2.hasAttribute(\"data-placing\")) {\n        const observer = new MutationObserver(forceValueUpdate);\n        observer.observe(contentElement2, { attributeFilter: [\"data-placing\"] });\n        return () => observer.disconnect();\n      }\n      if (autoSelect && canAutoSelect) {\n        const userAutoSelectId = getAutoSelectIdProp(items);\n        const autoSelectId = userAutoSelectId !== void 0 ? userAutoSelectId : (_a2 = getDefaultAutoSelectId(items)) != null ? _a2 : store.first();\n        autoSelectIdRef.current = autoSelectId;\n        store.move(autoSelectId != null ? autoSelectId : null);\n      } else {\n        const element = (_b2 = store.item(activeId || store.first())) == null ? void 0 : _b2.element;\n        if (element && \"scrollIntoView\" in element) {\n          element.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n        }\n      }\n      return;\n    }, [\n      store,\n      open,\n      valueUpdated,\n      storeValue,\n      autoSelect,\n      resetValueOnSelect,\n      getAutoSelectIdProp,\n      items\n    ]);\n    useEffect(() => {\n      if (!inline) return;\n      const combobox = ref.current;\n      if (!combobox) return;\n      const elements = [combobox, contentElement].filter(\n        (value2) => !!value2\n      );\n      const onBlur2 = (event) => {\n        if (elements.every((el) => isFocusEventOutside(event, el))) {\n          store == null ? void 0 : store.setValue(value);\n        }\n      };\n      for (const element of elements) {\n        element.addEventListener(\"focusout\", onBlur2);\n      }\n      return () => {\n        for (const element of elements) {\n          element.removeEventListener(\"focusout\", onBlur2);\n        }\n      };\n    }, [inline, contentElement, store, value]);\n    const canShow = (event) => {\n      const currentTarget = event.currentTarget;\n      return currentTarget.value.length >= showMinLength;\n    };\n    const onChangeProp = props.onChange;\n    const showOnChangeProp = useBooleanEvent(showOnChange != null ? showOnChange : canShow);\n    const setValueOnChangeProp = useBooleanEvent(\n      // If the combobox is combined with tags, the value will be set by the tag\n      // input component.\n      setValueOnChange != null ? setValueOnChange : !store.tag\n    );\n    const onChange = useEvent((event) => {\n      onChangeProp == null ? void 0 : onChangeProp(event);\n      if (event.defaultPrevented) return;\n      if (!store) return;\n      const currentTarget = event.currentTarget;\n      const { value: value2, selectionStart, selectionEnd } = currentTarget;\n      const nativeEvent = event.nativeEvent;\n      canAutoSelectRef.current = true;\n      if (isInputEvent(nativeEvent)) {\n        if (nativeEvent.isComposing) {\n          canAutoSelectRef.current = false;\n          composingRef.current = true;\n        }\n        if (inline) {\n          const textInserted = nativeEvent.inputType === \"insertText\" || nativeEvent.inputType === \"insertCompositionText\";\n          const caretAtEnd = selectionStart === value2.length;\n          setCanInline(textInserted && caretAtEnd);\n        }\n      }\n      if (setValueOnChangeProp(event)) {\n        const isSameValue = value2 === store.getState().value;\n        store.setValue(value2);\n        queueMicrotask(() => {\n          setSelectionRange(currentTarget, selectionStart, selectionEnd);\n        });\n        if (inline && autoSelect && isSameValue) {\n          forceValueUpdate();\n        }\n      }\n      if (showOnChangeProp(event)) {\n        store.show();\n      }\n      if (!autoSelect || !canAutoSelectRef.current) {\n        store.setActiveId(null);\n      }\n    });\n    const onCompositionEndProp = props.onCompositionEnd;\n    const onCompositionEnd = useEvent((event) => {\n      canAutoSelectRef.current = true;\n      composingRef.current = false;\n      onCompositionEndProp == null ? void 0 : onCompositionEndProp(event);\n      if (event.defaultPrevented) return;\n      if (!autoSelect) return;\n      forceValueUpdate();\n    });\n    const onMouseDownProp = props.onMouseDown;\n    const blurActiveItemOnClickProp = useBooleanEvent(\n      blurActiveItemOnClick != null ? blurActiveItemOnClick : () => !!(store == null ? void 0 : store.getState().includesBaseElement)\n    );\n    const setValueOnClickProp = useBooleanEvent(setValueOnClick);\n    const showOnClickProp = useBooleanEvent(showOnClick != null ? showOnClick : canShow);\n    const onMouseDown = useEvent((event) => {\n      onMouseDownProp == null ? void 0 : onMouseDownProp(event);\n      if (event.defaultPrevented) return;\n      if (event.button) return;\n      if (event.ctrlKey) return;\n      if (!store) return;\n      if (blurActiveItemOnClickProp(event)) {\n        store.setActiveId(null);\n      }\n      if (setValueOnClickProp(event)) {\n        store.setValue(value);\n      }\n      if (showOnClickProp(event)) {\n        queueBeforeEvent(event.currentTarget, \"mouseup\", store.show);\n      }\n    });\n    const onKeyDownProp = props.onKeyDown;\n    const showOnKeyPressProp = useBooleanEvent(showOnKeyPress != null ? showOnKeyPress : canShow);\n    const onKeyDown = useEvent((event) => {\n      onKeyDownProp == null ? void 0 : onKeyDownProp(event);\n      if (!event.repeat) {\n        canAutoSelectRef.current = false;\n      }\n      if (event.defaultPrevented) return;\n      if (event.ctrlKey) return;\n      if (event.altKey) return;\n      if (event.shiftKey) return;\n      if (event.metaKey) return;\n      if (!store) return;\n      const { open: open2 } = store.getState();\n      if (open2) return;\n      if (event.key === \"ArrowUp\" || event.key === \"ArrowDown\") {\n        if (showOnKeyPressProp(event)) {\n          event.preventDefault();\n          store.show();\n        }\n      }\n    });\n    const onBlurProp = props.onBlur;\n    const onBlur = useEvent((event) => {\n      canAutoSelectRef.current = false;\n      onBlurProp == null ? void 0 : onBlurProp(event);\n      if (event.defaultPrevented) return;\n    });\n    const id = useId(props.id);\n    const ariaAutoComplete = isAriaAutoCompleteValue(autoComplete) ? autoComplete : void 0;\n    const isActiveItem = store.useState((state) => state.activeId === null);\n    props = __spreadProps(__spreadValues({\n      id,\n      role: \"combobox\",\n      \"aria-autocomplete\": ariaAutoComplete,\n      \"aria-haspopup\": getPopupRole(contentElement, \"listbox\"),\n      \"aria-expanded\": open,\n      \"aria-controls\": contentElement == null ? void 0 : contentElement.id,\n      \"data-active-item\": isActiveItem || void 0,\n      value\n    }, props), {\n      ref: useMergeRefs(ref, props.ref),\n      onChange,\n      onCompositionEnd,\n      onMouseDown,\n      onKeyDown,\n      onBlur\n    });\n    props = useComposite(__spreadProps(__spreadValues({\n      store,\n      focusable\n    }, props), {\n      // Enable inline autocomplete when the user moves from the combobox input\n      // to an item.\n      moveOnKeyPress: (event) => {\n        if (isFalsyBooleanCallback(moveOnKeyPress, event)) return false;\n        if (inline) setCanInline(true);\n        return true;\n      }\n    }));\n    props = usePopoverAnchor(__spreadValues({ store }, props));\n    return __spreadValues({ autoComplete: \"off\" }, props);\n  }\n);\nvar Combobox = forwardRef(function Combobox2(props) {\n  const htmlProps = useCombobox(props);\n  return createElement(TagName, htmlProps);\n});\nexport {\n  Combobox,\n  useCombobox\n};\n","\"use client\";\nimport {\n  useCompositeHover\n} from \"./IABE5EV2.js\";\nimport {\n  useCompositeItem\n} from \"./SBSPVDDI.js\";\nimport {\n  ComboboxItemCheckedContext,\n  ComboboxItemValueContext,\n  ComboboxListRoleContext,\n  useComboboxScopedContext\n} from \"./OLVWQA7U.js\";\nimport {\n  useStoreStateObject\n} from \"./RTNCFSKZ.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef,\n  memo\n} from \"./VOQWLFSQ.js\";\nimport {\n  useBooleanEvent,\n  useEvent,\n  useWrapElement\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/combobox/combobox-item.tsx\nimport { isTextField } from \"@ariakit/core/utils/dom\";\nimport { isDownloading, isOpeningInNewTab } from \"@ariakit/core/utils/events\";\nimport { hasFocus } from \"@ariakit/core/utils/focus\";\nimport { invariant } from \"@ariakit/core/utils/misc\";\nimport { useCallback, useContext } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TagName = \"div\";\nfunction isSelected(storeValue, itemValue) {\n  if (itemValue == null) return;\n  if (storeValue == null) return false;\n  if (Array.isArray(storeValue)) {\n    return storeValue.includes(itemValue);\n  }\n  return storeValue === itemValue;\n}\nfunction getItemRole(popupRole) {\n  var _a;\n  const itemRoleByPopupRole = {\n    menu: \"menuitem\",\n    listbox: \"option\",\n    tree: \"treeitem\"\n  };\n  const key = popupRole;\n  return (_a = itemRoleByPopupRole[key]) != null ? _a : \"option\";\n}\nvar useComboboxItem = createHook(\n  function useComboboxItem2(_a) {\n    var _b = _a, {\n      store,\n      value,\n      hideOnClick,\n      setValueOnClick,\n      selectValueOnClick = true,\n      resetValueOnSelect,\n      focusOnHover = false,\n      moveOnKeyPress = true,\n      getItem: getItemProp\n    } = _b, props = __objRest(_b, [\n      \"store\",\n      \"value\",\n      \"hideOnClick\",\n      \"setValueOnClick\",\n      \"selectValueOnClick\",\n      \"resetValueOnSelect\",\n      \"focusOnHover\",\n      \"moveOnKeyPress\",\n      \"getItem\"\n    ]);\n    var _a2;\n    const context = useComboboxScopedContext();\n    store = store || context;\n    invariant(\n      store,\n      process.env.NODE_ENV !== \"production\" && \"ComboboxItem must be wrapped in a ComboboxList or ComboboxPopover component.\"\n    );\n    const { resetValueOnSelectState, multiSelectable, selected } = useStoreStateObject(store, {\n      resetValueOnSelectState: \"resetValueOnSelect\",\n      multiSelectable(state) {\n        return Array.isArray(state.selectedValue);\n      },\n      selected(state) {\n        return isSelected(state.selectedValue, value);\n      }\n    });\n    const getItem = useCallback(\n      (item) => {\n        const nextItem = __spreadProps(__spreadValues({}, item), { value });\n        if (getItemProp) {\n          return getItemProp(nextItem);\n        }\n        return nextItem;\n      },\n      [value, getItemProp]\n    );\n    setValueOnClick = setValueOnClick != null ? setValueOnClick : !multiSelectable;\n    hideOnClick = hideOnClick != null ? hideOnClick : value != null && !multiSelectable;\n    const onClickProp = props.onClick;\n    const setValueOnClickProp = useBooleanEvent(setValueOnClick);\n    const selectValueOnClickProp = useBooleanEvent(selectValueOnClick);\n    const resetValueOnSelectProp = useBooleanEvent(\n      (_a2 = resetValueOnSelect != null ? resetValueOnSelect : resetValueOnSelectState) != null ? _a2 : multiSelectable\n    );\n    const hideOnClickProp = useBooleanEvent(hideOnClick);\n    const onClick = useEvent((event) => {\n      onClickProp == null ? void 0 : onClickProp(event);\n      if (event.defaultPrevented) return;\n      if (isDownloading(event)) return;\n      if (isOpeningInNewTab(event)) return;\n      if (value != null) {\n        if (selectValueOnClickProp(event)) {\n          if (resetValueOnSelectProp(event)) {\n            store == null ? void 0 : store.resetValue();\n          }\n          store == null ? void 0 : store.setSelectedValue((prevValue) => {\n            if (!Array.isArray(prevValue)) return value;\n            if (prevValue.includes(value)) {\n              return prevValue.filter((v) => v !== value);\n            }\n            return [...prevValue, value];\n          });\n        }\n        if (setValueOnClickProp(event)) {\n          store == null ? void 0 : store.setValue(value);\n        }\n      }\n      if (hideOnClickProp(event)) {\n        store == null ? void 0 : store.hide();\n      }\n    });\n    const onKeyDownProp = props.onKeyDown;\n    const onKeyDown = useEvent((event) => {\n      onKeyDownProp == null ? void 0 : onKeyDownProp(event);\n      if (event.defaultPrevented) return;\n      const baseElement = store == null ? void 0 : store.getState().baseElement;\n      if (!baseElement) return;\n      if (hasFocus(baseElement)) return;\n      const printable = event.key.length === 1;\n      if (printable || event.key === \"Backspace\" || event.key === \"Delete\") {\n        queueMicrotask(() => baseElement.focus());\n        if (isTextField(baseElement)) {\n          store == null ? void 0 : store.setValue(baseElement.value);\n        }\n      }\n    });\n    if (multiSelectable && selected != null) {\n      props = __spreadValues({\n        \"aria-selected\": selected\n      }, props);\n    }\n    props = useWrapElement(\n      props,\n      (element) => /* @__PURE__ */ jsx(ComboboxItemValueContext.Provider, { value, children: /* @__PURE__ */ jsx(ComboboxItemCheckedContext.Provider, { value: selected != null ? selected : false, children: element }) }),\n      [value, selected]\n    );\n    const popupRole = useContext(ComboboxListRoleContext);\n    props = __spreadProps(__spreadValues({\n      role: getItemRole(popupRole),\n      children: value\n    }, props), {\n      onClick,\n      onKeyDown\n    });\n    const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress);\n    props = useCompositeItem(__spreadProps(__spreadValues({\n      store\n    }, props), {\n      getItem,\n      // Dispatch a custom event on the combobox input when moving to an item\n      // with the keyboard so the Combobox component can enable inline\n      // autocompletion.\n      moveOnKeyPress: (event) => {\n        if (!moveOnKeyPressProp(event)) return false;\n        const moveEvent = new Event(\"combobox-item-move\");\n        const baseElement = store == null ? void 0 : store.getState().baseElement;\n        baseElement == null ? void 0 : baseElement.dispatchEvent(moveEvent);\n        return true;\n      }\n    }));\n    props = useCompositeHover(__spreadValues({ store, focusOnHover }, props));\n    return props;\n  }\n);\nvar ComboboxItem = memo(\n  forwardRef(function ComboboxItem2(props) {\n    const htmlProps = useComboboxItem(props);\n    return createElement(TagName, htmlProps);\n  })\n);\n\nexport {\n  useComboboxItem,\n  ComboboxItem\n};\n","\"use client\";\nimport {\n  isHidden\n} from \"./K4R5DNTX.js\";\nimport {\n  ComboboxListRoleContext,\n  ComboboxScopedContextProvider,\n  useComboboxContext,\n  useComboboxScopedContext\n} from \"./OLVWQA7U.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"./VOQWLFSQ.js\";\nimport {\n  useAttribute,\n  useId,\n  useMergeRefs,\n  useSafeLayoutEffect,\n  useWrapElement\n} from \"./5GGHRIN3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/combobox/combobox-list.tsx\nimport { invariant, removeUndefinedValues } from \"@ariakit/core/utils/misc\";\nimport { useRef, useState } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TagName = \"div\";\nvar useComboboxList = createHook(\n  function useComboboxList2(_a) {\n    var _b = _a, { store, alwaysVisible } = _b, props = __objRest(_b, [\"store\", \"alwaysVisible\"]);\n    const scopedContext = useComboboxScopedContext(true);\n    const context = useComboboxContext();\n    store = store || context;\n    const scopedContextSameStore = !!store && store === scopedContext;\n    invariant(\n      store,\n      process.env.NODE_ENV !== \"production\" && \"ComboboxList must receive a `store` prop or be wrapped in a ComboboxProvider component.\"\n    );\n    const ref = useRef(null);\n    const id = useId(props.id);\n    const mounted = store.useState(\"mounted\");\n    const hidden = isHidden(mounted, props.hidden, alwaysVisible);\n    const style = hidden ? __spreadProps(__spreadValues({}, props.style), { display: \"none\" }) : props.style;\n    const multiSelectable = store.useState(\n      (state) => Array.isArray(state.selectedValue)\n    );\n    const role = useAttribute(ref, \"role\", props.role);\n    const isCompositeRole = role === \"listbox\" || role === \"tree\" || role === \"grid\";\n    const ariaMultiSelectable = isCompositeRole ? multiSelectable || void 0 : void 0;\n    const [hasListboxInside, setHasListboxInside] = useState(false);\n    const contentElement = store.useState(\"contentElement\");\n    useSafeLayoutEffect(() => {\n      if (!mounted) return;\n      const element = ref.current;\n      if (!element) return;\n      if (contentElement !== element) return;\n      const callback = () => {\n        setHasListboxInside(!!element.querySelector(\"[role='listbox']\"));\n      };\n      const observer = new MutationObserver(callback);\n      observer.observe(element, {\n        subtree: true,\n        childList: true,\n        attributeFilter: [\"role\"]\n      });\n      callback();\n      return () => observer.disconnect();\n    }, [mounted, contentElement]);\n    if (!hasListboxInside) {\n      props = __spreadValues({\n        role: \"listbox\",\n        \"aria-multiselectable\": ariaMultiSelectable\n      }, props);\n    }\n    props = useWrapElement(\n      props,\n      (element) => /* @__PURE__ */ jsx(ComboboxScopedContextProvider, { value: store, children: /* @__PURE__ */ jsx(ComboboxListRoleContext.Provider, { value: role, children: element }) }),\n      [store, role]\n    );\n    const setContentElement = id && (!scopedContext || !scopedContextSameStore) ? store.setContentElement : null;\n    props = __spreadProps(__spreadValues({\n      id,\n      hidden\n    }, props), {\n      ref: useMergeRefs(setContentElement, ref, props.ref),\n      style\n    });\n    return removeUndefinedValues(props);\n  }\n);\nvar ComboboxList = forwardRef(function ComboboxList2(props) {\n  const htmlProps = useComboboxList(props);\n  return createElement(TagName, htmlProps);\n});\n\nexport {\n  useComboboxList,\n  ComboboxList\n};\n","\"use client\";\nimport {\n  usePopover\n} from \"../__chunks/C6DAL6ZN.js\";\nimport {\n  createDialogComponent\n} from \"../__chunks/CAGBPNDP.js\";\nimport \"../__chunks/M5DFOEFU.js\";\nimport \"../__chunks/AOQQTIBO.js\";\nimport \"../__chunks/5M6RIVE2.js\";\nimport \"../__chunks/S2F2XXEH.js\";\nimport \"../__chunks/DXGKYUAD.js\";\nimport \"../__chunks/LC6GJMGV.js\";\nimport \"../__chunks/6GXEOXGT.js\";\nimport \"../__chunks/JZEJYXOQ.js\";\nimport \"../__chunks/HLTQOHKZ.js\";\nimport \"../__chunks/PVECYOSC.js\";\nimport \"../__chunks/SOMPWLIQ.js\";\nimport \"../__chunks/W6WVJJEY.js\";\nimport \"../__chunks/CZ4GFWYL.js\";\nimport \"../__chunks/Z5GCVBAY.js\";\nimport \"../__chunks/IGR4SXG2.js\";\nimport \"../__chunks/677M2CI3.js\";\nimport \"../__chunks/S7U6BLGA.js\";\nimport \"../__chunks/FVE2C5B3.js\";\nimport \"../__chunks/3NDVDEB4.js\";\nimport \"../__chunks/AOUGVQZ3.js\";\nimport \"../__chunks/K2ZF5NU7.js\";\nimport \"../__chunks/63XF7ACK.js\";\nimport {\n  useComboboxList\n} from \"../__chunks/MNJRSAAC.js\";\nimport \"../__chunks/K4R5DNTX.js\";\nimport \"../__chunks/Y2U4BRIM.js\";\nimport \"../__chunks/T22PY7TE.js\";\nimport \"../__chunks/QJ4LGO2N.js\";\nimport {\n  useComboboxProviderContext\n} from \"../__chunks/OLVWQA7U.js\";\nimport \"../__chunks/Y67KZUMI.js\";\nimport \"../__chunks/T2AZQXQU.js\";\nimport \"../__chunks/ABN76PSX.js\";\nimport \"../__chunks/APTFW6PT.js\";\nimport \"../__chunks/OE2EFRVA.js\";\nimport \"../__chunks/SWN3JYXT.js\";\nimport {\n  useStoreState\n} from \"../__chunks/RTNCFSKZ.js\";\nimport \"../__chunks/5CPL3B7G.js\";\nimport {\n  createElement,\n  createHook,\n  forwardRef\n} from \"../__chunks/VOQWLFSQ.js\";\nimport \"../__chunks/5GGHRIN3.js\";\nimport \"../__chunks/SK3NAZA3.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"../__chunks/3YLGPPWQ.js\";\n\n// src/combobox/combobox-popover.tsx\nimport { getDocument } from \"@ariakit/core/utils/dom\";\nimport { invariant, isFalsyBooleanCallback } from \"@ariakit/core/utils/misc\";\nimport { useRef } from \"react\";\nvar TagName = \"div\";\nfunction isController(target, ...ids) {\n  if (!target) return false;\n  if (\"id\" in target) {\n    const selector = ids.filter(Boolean).map((id) => `[aria-controls~=\"${id}\"]`).join(\", \");\n    if (!selector) return false;\n    return target.matches(selector);\n  }\n  return false;\n}\nvar useComboboxPopover = createHook(\n  function useComboboxPopover2(_a) {\n    var _b = _a, {\n      store,\n      modal,\n      tabIndex,\n      alwaysVisible,\n      autoFocusOnHide = true,\n      hideOnInteractOutside = true\n    } = _b, props = __objRest(_b, [\n      \"store\",\n      \"modal\",\n      \"tabIndex\",\n      \"alwaysVisible\",\n      \"autoFocusOnHide\",\n      \"hideOnInteractOutside\"\n    ]);\n    const context = useComboboxProviderContext();\n    store = store || context;\n    invariant(\n      store,\n      process.env.NODE_ENV !== \"production\" && \"ComboboxPopover must receive a `store` prop or be wrapped in a ComboboxProvider component.\"\n    );\n    const baseElement = store.useState(\"baseElement\");\n    const hiddenByClickOutsideRef = useRef(false);\n    const treeSnapshotKey = useStoreState(\n      store.tag,\n      (state) => state == null ? void 0 : state.renderedItems.length\n    );\n    props = useComboboxList(__spreadValues({ store, alwaysVisible }, props));\n    props = usePopover(__spreadProps(__spreadValues({\n      store,\n      modal,\n      alwaysVisible,\n      backdrop: false,\n      autoFocusOnShow: false,\n      finalFocus: baseElement,\n      preserveTabOrderAnchor: null,\n      unstable_treeSnapshotKey: treeSnapshotKey\n    }, props), {\n      // When the combobox popover is modal, we make sure to include the\n      // combobox input and all the combobox controls (cancel, disclosure) in\n      // the list of persistent elements so they make part of the modal context,\n      // allowing users to tab through them.\n      getPersistentElements() {\n        var _a2;\n        const elements = ((_a2 = props.getPersistentElements) == null ? void 0 : _a2.call(props)) || [];\n        if (!modal) return elements;\n        if (!store) return elements;\n        const { contentElement, baseElement: baseElement2 } = store.getState();\n        if (!baseElement2) return elements;\n        const doc = getDocument(baseElement2);\n        const selectors = [];\n        if (contentElement == null ? void 0 : contentElement.id) {\n          selectors.push(`[aria-controls~=\"${contentElement.id}\"]`);\n        }\n        if (baseElement2 == null ? void 0 : baseElement2.id) {\n          selectors.push(`[aria-controls~=\"${baseElement2.id}\"]`);\n        }\n        if (!selectors.length) return [...elements, baseElement2];\n        const selector = selectors.join(\",\");\n        const controlElements = doc.querySelectorAll(selector);\n        return [...elements, ...controlElements];\n      },\n      // The combobox popover should focus on the combobox input when it hides,\n      // unless the event was triggered by a click outside the popover, in which\n      // case the input shouldn't be re-focused.\n      autoFocusOnHide(element) {\n        if (isFalsyBooleanCallback(autoFocusOnHide, element)) return false;\n        if (hiddenByClickOutsideRef.current) {\n          hiddenByClickOutsideRef.current = false;\n          return false;\n        }\n        return true;\n      },\n      // Make sure we don't hide the popover when the user interacts with the\n      // combobox cancel or the combobox disclosure buttons. They will have the\n      // aria-controls attribute pointing to either the combobox input or the\n      // combobox popover elements.\n      hideOnInteractOutside(event) {\n        var _a2, _b2;\n        const state = store == null ? void 0 : store.getState();\n        const contentId = (_a2 = state == null ? void 0 : state.contentElement) == null ? void 0 : _a2.id;\n        const baseId = (_b2 = state == null ? void 0 : state.baseElement) == null ? void 0 : _b2.id;\n        if (isController(event.target, contentId, baseId)) return false;\n        const result = typeof hideOnInteractOutside === \"function\" ? hideOnInteractOutside(event) : hideOnInteractOutside;\n        if (result) {\n          hiddenByClickOutsideRef.current = event.type === \"click\";\n        }\n        return result;\n      }\n    }));\n    return props;\n  }\n);\nvar ComboboxPopover = createDialogComponent(\n  forwardRef(function ComboboxPopover2(props) {\n    const htmlProps = useComboboxPopover(props);\n    return createElement(TagName, htmlProps);\n  }),\n  useComboboxProviderContext\n);\nexport {\n  ComboboxPopover,\n  useComboboxPopover\n};\n","\"use client\";\nimport {\n  CompositeContextProvider,\n  CompositeScopedContextProvider\n} from \"./APTFW6PT.js\";\nimport {\n  createStoreContext\n} from \"./VOQWLFSQ.js\";\n\n// src/tag/tag-context.tsx\nimport { createContext } from \"react\";\nvar TagValueContext = createContext(null);\nvar TagRemoveIdContext = createContext(\n  null\n);\nvar ctx = createStoreContext(\n  [CompositeContextProvider],\n  [CompositeScopedContextProvider]\n);\nvar useTagContext = ctx.useContext;\nvar useTagScopedContext = ctx.useScopedContext;\nvar useTagProviderContext = ctx.useProviderContext;\nvar TagContextProvider = ctx.ContextProvider;\nvar TagScopedContextProvider = ctx.ScopedContextProvider;\n\nexport {\n  TagValueContext,\n  TagRemoveIdContext,\n  useTagContext,\n  useTagScopedContext,\n  useTagProviderContext,\n  TagContextProvider,\n  TagScopedContextProvider\n};\n","\"use client\";\nimport {\n  isSafari,\n  isTouchDevice\n} from \"../__chunks/QAGXQEUG.js\";\nimport {\n  createPopoverStore\n} from \"../__chunks/ME2CUF3F.js\";\nimport {\n  createCompositeStore\n} from \"../__chunks/2CHYBBFH.js\";\nimport \"../__chunks/7PRQYBBV.js\";\nimport \"../__chunks/FZZ2AVHF.js\";\nimport \"../__chunks/RCQ5P4YE.js\";\nimport \"../__chunks/EO4GVUA4.js\";\nimport \"../__chunks/DTR5TSDJ.js\";\nimport {\n  batch,\n  createStore,\n  mergeStore,\n  pick,\n  setup,\n  sync,\n  throwOnConflictingProps\n} from \"../__chunks/BCALMBPZ.js\";\nimport {\n  chain,\n  defaultValue\n} from \"../__chunks/PBFD2E7P.js\";\nimport {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"../__chunks/3YLGPPWQ.js\";\n\n// src/combobox/combobox-store.ts\nvar isTouchSafari = isSafari() && isTouchDevice();\nfunction createComboboxStore(_a = {}) {\n  var _b = _a, {\n    tag\n  } = _b, props = __objRest(_b, [\n    \"tag\"\n  ]);\n  const store = mergeStore(props.store, pick(tag, [\"value\", \"rtl\"]));\n  throwOnConflictingProps(props, store);\n  const tagState = tag == null ? void 0 : tag.getState();\n  const syncState = store == null ? void 0 : store.getState();\n  const activeId = defaultValue(\n    props.activeId,\n    syncState == null ? void 0 : syncState.activeId,\n    props.defaultActiveId,\n    null\n  );\n  const composite = createCompositeStore(__spreadProps(__spreadValues({}, props), {\n    activeId,\n    includesBaseElement: defaultValue(\n      props.includesBaseElement,\n      syncState == null ? void 0 : syncState.includesBaseElement,\n      true\n    ),\n    orientation: defaultValue(\n      props.orientation,\n      syncState == null ? void 0 : syncState.orientation,\n      \"vertical\"\n    ),\n    focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, true),\n    focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, true),\n    virtualFocus: defaultValue(\n      props.virtualFocus,\n      syncState == null ? void 0 : syncState.virtualFocus,\n      true\n    )\n  }));\n  const popover = createPopoverStore(__spreadProps(__spreadValues({}, props), {\n    placement: defaultValue(\n      props.placement,\n      syncState == null ? void 0 : syncState.placement,\n      \"bottom-start\"\n    )\n  }));\n  const value = defaultValue(\n    props.value,\n    syncState == null ? void 0 : syncState.value,\n    props.defaultValue,\n    \"\"\n  );\n  const selectedValue = defaultValue(\n    props.selectedValue,\n    syncState == null ? void 0 : syncState.selectedValue,\n    tagState == null ? void 0 : tagState.values,\n    props.defaultSelectedValue,\n    \"\"\n  );\n  const multiSelectable = Array.isArray(selectedValue);\n  const initialState = __spreadProps(__spreadValues(__spreadValues({}, composite.getState()), popover.getState()), {\n    value,\n    selectedValue,\n    resetValueOnSelect: defaultValue(\n      props.resetValueOnSelect,\n      syncState == null ? void 0 : syncState.resetValueOnSelect,\n      multiSelectable\n    ),\n    resetValueOnHide: defaultValue(\n      props.resetValueOnHide,\n      syncState == null ? void 0 : syncState.resetValueOnHide,\n      multiSelectable && !tag\n    ),\n    activeValue: syncState == null ? void 0 : syncState.activeValue\n  });\n  const combobox = createStore(initialState, composite, popover, store);\n  if (isTouchSafari) {\n    setup(\n      combobox,\n      () => sync(combobox, [\"virtualFocus\"], () => {\n        combobox.setState(\"virtualFocus\", false);\n      })\n    );\n  }\n  setup(combobox, () => {\n    if (!tag) return;\n    return chain(\n      sync(combobox, [\"selectedValue\"], (state) => {\n        if (!Array.isArray(state.selectedValue)) return;\n        tag.setValues(state.selectedValue);\n      }),\n      sync(tag, [\"values\"], (state) => {\n        combobox.setState(\"selectedValue\", state.values);\n      })\n    );\n  });\n  setup(\n    combobox,\n    () => sync(combobox, [\"resetValueOnHide\", \"mounted\"], (state) => {\n      if (!state.resetValueOnHide) return;\n      if (state.mounted) return;\n      combobox.setState(\"value\", value);\n    })\n  );\n  setup(\n    combobox,\n    () => sync(combobox, [\"open\"], (state) => {\n      if (state.open) return;\n      combobox.setState(\"activeId\", activeId);\n      combobox.setState(\"moves\", 0);\n    })\n  );\n  setup(\n    combobox,\n    () => sync(combobox, [\"moves\", \"activeId\"], (state, prevState) => {\n      if (state.moves === prevState.moves) {\n        combobox.setState(\"activeValue\", void 0);\n      }\n    })\n  );\n  setup(\n    combobox,\n    () => batch(combobox, [\"moves\", \"renderedItems\"], (state, prev) => {\n      if (state.moves === prev.moves) return;\n      const { activeId: activeId2 } = combobox.getState();\n      const activeItem = composite.item(activeId2);\n      combobox.setState(\"activeValue\", activeItem == null ? void 0 : activeItem.value);\n    })\n  );\n  return __spreadProps(__spreadValues(__spreadValues(__spreadValues({}, popover), composite), combobox), {\n    tag,\n    setValue: (value2) => combobox.setState(\"value\", value2),\n    resetValue: () => combobox.setState(\"value\", initialState.value),\n    setSelectedValue: (selectedValue2) => combobox.setState(\"selectedValue\", selectedValue2)\n  });\n}\nexport {\n  createComboboxStore\n};\n","\"use client\";\nimport {\n  useTagContext\n} from \"./VJQU3YUE.js\";\nimport {\n  usePopoverStoreProps\n} from \"./RUY5BUJG.js\";\nimport {\n  useCompositeStoreOptions,\n  useCompositeStoreProps\n} from \"./B7UTNDHN.js\";\nimport {\n  useStore,\n  useStoreProps\n} from \"./RTNCFSKZ.js\";\nimport {\n  useUpdateEffect\n} from \"./5GGHRIN3.js\";\nimport {\n  __spreadProps,\n  __spreadValues\n} from \"./3YLGPPWQ.js\";\n\n// src/combobox/combobox-store.ts\nimport * as Core from \"@ariakit/core/combobox/combobox-store\";\nfunction useComboboxStoreOptions(props) {\n  const tag = useTagContext();\n  props = __spreadProps(__spreadValues({}, props), {\n    tag: props.tag !== void 0 ? props.tag : tag\n  });\n  return useCompositeStoreOptions(props);\n}\nfunction useComboboxStoreProps(store, update, props) {\n  useUpdateEffect(update, [props.tag]);\n  useStoreProps(store, props, \"value\", \"setValue\");\n  useStoreProps(store, props, \"selectedValue\", \"setSelectedValue\");\n  useStoreProps(store, props, \"resetValueOnHide\");\n  useStoreProps(store, props, \"resetValueOnSelect\");\n  return Object.assign(\n    useCompositeStoreProps(\n      usePopoverStoreProps(store, update, props),\n      update,\n      props\n    ),\n    { tag: props.tag }\n  );\n}\nfunction useComboboxStore(props = {}) {\n  props = useComboboxStoreOptions(props);\n  const [store, update] = useStore(Core.createComboboxStore, props);\n  return useComboboxStoreProps(store, update, props);\n}\n\nexport {\n  useComboboxStoreOptions,\n  useComboboxStoreProps,\n  useComboboxStore\n};\n","\"use client\";\nimport {\n  useComboboxStore\n} from \"../__chunks/HI6DYBVE.js\";\nimport \"../__chunks/VJQU3YUE.js\";\nimport \"../__chunks/RUY5BUJG.js\";\nimport \"../__chunks/B7UTNDHN.js\";\nimport \"../__chunks/Y2U4BRIM.js\";\nimport \"../__chunks/T22PY7TE.js\";\nimport \"../__chunks/AMMIPFT4.js\";\nimport {\n  ComboboxContextProvider\n} from \"../__chunks/OLVWQA7U.js\";\nimport \"../__chunks/Y67KZUMI.js\";\nimport \"../__chunks/T2AZQXQU.js\";\nimport \"../__chunks/ABN76PSX.js\";\nimport \"../__chunks/APTFW6PT.js\";\nimport \"../__chunks/RTNCFSKZ.js\";\nimport \"../__chunks/5CPL3B7G.js\";\nimport \"../__chunks/VOQWLFSQ.js\";\nimport \"../__chunks/5GGHRIN3.js\";\nimport \"../__chunks/SK3NAZA3.js\";\nimport \"../__chunks/3YLGPPWQ.js\";\n\n// src/combobox/combobox-provider.tsx\nimport { jsx } from \"react/jsx-runtime\";\nfunction ComboboxProvider(props = {}) {\n  const store = useComboboxStore(props);\n  return /* @__PURE__ */ jsx(ComboboxContextProvider, { value: store, children: props.children });\n}\nexport {\n  ComboboxProvider\n};\n","\"use client\"\n\nimport { useEffect, useLayoutEffect } from \"react\"\n\n/**\n * Custom hook that uses either `useLayoutEffect` or `useEffect` based on the environment (client-side or server-side).\n * @param {Function} effect - The effect function to be executed.\n * @param {Array<any>} [dependencies] - An array of dependencies for the effect (optional).\n */\nexport const useIsomorphicLayoutEffect =\n  typeof window !== \"undefined\" ? useLayoutEffect : useEffect\n","import type { RefObject } from \"react\"\nimport { useEffect, useRef } from \"react\"\nimport { useIsomorphicLayoutEffect } from \"@/hooks/use-isomorphic-layout-effect\"\n\n// MediaQueryList Event based useEventListener interface\nfunction useEventListener<K extends keyof MediaQueryListEventMap>(\n  eventName: K,\n  handler: (event: MediaQueryListEventMap[K]) => void,\n  element: RefObject<MediaQueryList>,\n  options?: boolean | AddEventListenerOptions\n): void\n\n// Window Event based useEventListener interface\nfunction useEventListener<K extends keyof WindowEventMap>(\n  eventName: K,\n  handler: (event: WindowEventMap[K]) => void,\n  element?: undefined,\n  options?: boolean | AddEventListenerOptions\n): void\n\n// Element Event based useEventListener interface\nfunction useEventListener<\n  K extends keyof HTMLElementEventMap & keyof SVGElementEventMap,\n  T extends Element = K extends keyof HTMLElementEventMap\n    ? HTMLDivElement\n    : SVGElement,\n>(\n  eventName: K,\n  handler:\n    | ((event: HTMLElementEventMap[K]) => void)\n    | ((event: SVGElementEventMap[K]) => void),\n  element: RefObject<T>,\n  options?: boolean | AddEventListenerOptions\n): void\n\n// Document Event based useEventListener interface\nfunction useEventListener<K extends keyof DocumentEventMap>(\n  eventName: K,\n  handler: (event: DocumentEventMap[K]) => void,\n  element: RefObject<Document>,\n  options?: boolean | AddEventListenerOptions\n): void\n\n/**\n * Custom hook that attaches event listeners to DOM elements, the window, or media query lists.\n * @template KW - The type of event for window events.\n * @template KH - The type of event for HTML or SVG element events.\n * @template KM - The type of event for media query list events.\n * @template T - The type of the DOM element (default is `HTMLElement`).\n * @param {KW | KH | KM} eventName - The name of the event to listen for.\n * @param {(event: WindowEventMap[KW] | HTMLElementEventMap[KH] | SVGElementEventMap[KH] | MediaQueryListEventMap[KM] | Event) => void} handler - The event handler function.\n * @param {RefObject<T>} [element] - The DOM element or media query list to attach the event listener to (optional).\n * @param {boolean | AddEventListenerOptions} [options] - An options object that specifies characteristics about the event listener (optional).\n */\nfunction useEventListener<\n  KW extends keyof WindowEventMap,\n  KH extends keyof HTMLElementEventMap & keyof SVGElementEventMap,\n  KM extends keyof MediaQueryListEventMap,\n  T extends HTMLElement | SVGAElement | MediaQueryList = HTMLElement,\n>(\n  eventName: KW | KH | KM,\n  handler: (\n    event:\n      | WindowEventMap[KW]\n      | HTMLElementEventMap[KH]\n      | SVGElementEventMap[KH]\n      | MediaQueryListEventMap[KM]\n      | Event\n  ) => void,\n  element?: RefObject<T>,\n  options?: boolean | AddEventListenerOptions\n) {\n  // Create a ref that stores handler\n  const savedHandler = useRef(handler)\n\n  useIsomorphicLayoutEffect(() => {\n    savedHandler.current = handler\n  }, [handler])\n\n  useEffect(() => {\n    // Define the listening target\n    const targetElement: T | Window = element?.current ?? window\n\n    if (!(targetElement && targetElement.addEventListener)) return\n\n    // Create event listener that calls handler function stored in ref\n    const listener: typeof handler = (event) => {\n      savedHandler.current(event)\n    }\n\n    targetElement.addEventListener(eventName, listener, options)\n\n    // Remove event listener on cleanup\n    return () => {\n      targetElement.removeEventListener(eventName, listener, options)\n    }\n  }, [eventName, element, options])\n}\n\nexport { useEventListener }\n\n/** Supported event types. */\ntype EventType =\n  | \"mousedown\"\n  | \"mouseup\"\n  | \"touchstart\"\n  | \"touchend\"\n  | \"focusin\"\n  | \"focusout\"\n\n/**\n * Custom hook that handles clicks outside a specified element.\n * @template T - The type of the element's reference.\n * @param {RefObject<T> | RefObject<T>[]} ref - The React ref object(s) representing the element(s) to watch for outside clicks.\n * @param {(event: MouseEvent | TouchEvent | FocusEvent) => void} handler - The callback function to be executed when a click outside the element occurs.\n * @param {EventType} [eventType] - The mouse event type to listen for (optional, default is 'mousedown').\n * @param {?AddEventListenerOptions} [eventListenerOptions] - The options object to be passed to the `addEventListener` method (optional).\n * @returns {void}\n */\nexport function useOnClickOutside<T extends HTMLElement | null = HTMLElement>(\n  ref: RefObject<T> | RefObject<T>[],\n  handler: (event: MouseEvent | TouchEvent | FocusEvent) => void,\n  eventType: EventType = \"mousedown\",\n  eventListenerOptions: AddEventListenerOptions = {}\n): void {\n  useEventListener(\n    eventType,\n    (event) => {\n      const target = event.target as Node\n\n      // Do nothing if the target is not connected element with document\n      if (!target || !target.isConnected) {\n        return\n      }\n\n      const isOutside = Array.isArray(ref)\n        ? ref\n            .filter((r) => Boolean(r.current))\n            .every((r) => r.current && !r.current.contains(target))\n        : ref.current && !ref.current.contains(target)\n\n      if (isOutside) {\n        handler(event)\n      }\n    },\n    undefined,\n    eventListenerOptions\n  )\n}\n","import * as React from \"react\"\n\n// basically Exclude<React.ClassAttributes<T>[\"ref\"], string>\ntype UserRef<T> =\n  | ((instance: T | null) => void)\n  | React.RefObject<T | null>\n  | null\n  | undefined\n\nconst updateRef = <T>(ref: NonNullable<UserRef<T>>, value: T | null) => {\n  if (typeof ref === \"function\") {\n    ref(value)\n  } else if (ref && typeof ref === \"object\" && \"current\" in ref) {\n    // Safe assignment without MutableRefObject\n    ;(ref as { current: T | null }).current = value\n  }\n}\n\nexport const useComposedRef = <T extends HTMLElement>(\n  libRef: React.RefObject<T | null>,\n  userRef: UserRef<T>\n) => {\n  const prevUserRef = React.useRef<UserRef<T>>(null)\n\n  return React.useCallback(\n    (instance: T | null) => {\n      if (libRef && \"current\" in libRef) {\n        ;(libRef as { current: T | null }).current = instance\n      }\n\n      if (prevUserRef.current) {\n        updateRef(prevUserRef.current, null)\n      }\n\n      prevUserRef.current = userRef\n\n      if (userRef) {\n        updateRef(userRef, instance)\n      }\n    },\n    [libRef, userRef]\n  )\n}\n\nexport default useComposedRef\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as Ariakit from \"@ariakit/react\"\nimport { cn } from \"@/lib/tiptap-utils\"\n\nexport function ComboboxProvider({ ...props }: Ariakit.ComboboxProviderProps) {\n  return (\n    <Ariakit.ComboboxProvider\n      includesBaseElement={false}\n      resetValueOnHide\n      {...props}\n    />\n  )\n}\n\nexport const ComboboxList = React.forwardRef<\n  React.ComponentRef<typeof Ariakit.ComboboxList>,\n  React.ComponentProps<typeof Ariakit.ComboboxList>\n>(({ className, ...props }, ref) => {\n  return (\n    <Ariakit.ComboboxList\n      ref={ref}\n      className={cn(\"tiptap-combobox-list\", className)}\n      {...props}\n    />\n  )\n})\nComboboxList.displayName = \"ComboboxList\"\n\nexport const ComboboxPopover = React.forwardRef<\n  React.ComponentRef<typeof Ariakit.ComboboxPopover>,\n  React.ComponentProps<typeof Ariakit.ComboboxPopover>\n>(({ className, ...props }, ref) => {\n  return (\n    <Ariakit.ComboboxPopover\n      ref={ref}\n      className={cn(\"tiptap-combobox-popover\", className)}\n      {...props}\n    />\n  )\n})\nComboboxPopover.displayName = \"ComboboxPopover\"\n\nexport const Combobox = React.forwardRef<\n  React.ComponentRef<typeof Ariakit.Combobox>,\n  React.ComponentProps<typeof Ariakit.Combobox>\n>(({ className, ...props }, ref) => {\n  return (\n    <Ariakit.Combobox\n      ref={ref}\n      autoSelect\n      {...props}\n      className={cn(\"tiptap-combobox\", className)}\n    />\n  )\n})\nCombobox.displayName = \"Combobox\"\n\nexport const ComboboxItem = React.forwardRef<\n  React.ComponentRef<typeof Ariakit.ComboboxItem>,\n  React.ComponentProps<typeof Ariakit.ComboboxItem>\n>(({ className, ...props }, ref) => {\n  return (\n    <Ariakit.ComboboxItem\n      ref={ref}\n      className={cn(\"tiptap-combobox-item\", className)}\n      {...props}\n    />\n  )\n})\nComboboxItem.displayName = \"ComboboxItem\"\n","import * as React from \"react\"\nimport { cn } from \"@/lib/tiptap-utils\"\n\nexport interface BaseProps extends React.HTMLAttributes<HTMLElement> {\n  as?: \"label\" | \"div\"\n  onMouseDown?: React.MouseEventHandler<HTMLElement>\n}\n\nexport type LabelProps<T extends \"label\" | \"div\"> = T extends \"label\"\n  ? BaseProps & { htmlFor?: string }\n  : BaseProps\n\nexport const Label = React.forwardRef<\n  HTMLElement,\n  LabelProps<\"label\"> | LabelProps<\"div\">\n>(({ as = \"div\", ...props }, ref) => {\n  const renderProps = { ...props }\n\n  if (as === \"label\") {\n    renderProps.onMouseDown = (event: React.MouseEvent<HTMLElement>) => {\n      // only prevent text selection if clicking inside the label itself\n      const target = event.target as HTMLElement\n      if (target.closest(\"button, input, select, textarea\")) return\n      props.onMouseDown?.(event)\n      // prevent text selection when double clicking label\n      if (!event.defaultPrevented && event.detail > 1) event.preventDefault()\n    }\n  }\n\n  return React.createElement(as, {\n    ...renderProps,\n    ref,\n    className: cn(\"tiptap-label\", props.className),\n  })\n})\n\nLabel.displayName = \"Label\"\n\nexport default Label\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as Ariakit from \"@ariakit/react\"\n\n// -- Hooks --\nimport { useOnClickOutside } from \"@/hooks/use-on-click-outside\"\nimport { useComposedRef } from \"@/hooks/use-composed-ref\"\n\n// -- Utils --\nimport { cn } from \"@/lib/tiptap-utils\"\n\n// -- UI Primitives --\nimport {\n  ComboboxItem,\n  ComboboxProvider,\n} from \"@/components/tiptap-ui-primitive/combobox\"\nimport { Label } from \"@/components/tiptap-ui-primitive/label\"\n\n// -- Local imports --\nimport type {\n  MenuProps,\n  MenuContentProps,\n  MenuItemProps,\n} from \"@/components/tiptap-ui-primitive/menu\"\nimport {\n  SearchableContext,\n  MenuContext,\n  useSearchableContext,\n  useMenuContext,\n} from \"@/components/tiptap-ui-primitive/menu\"\nimport {\n  useMenuPlacement,\n  useMenuItemClick,\n} from \"@/components/tiptap-ui-primitive/menu\"\n\n// -- Styles --\n\nexport function Menu({\n  children,\n  trigger,\n  value,\n  onOpenChange,\n  onValueChange,\n  onValuesChange,\n  ...props\n}: MenuProps) {\n  const isRootMenu = !Ariakit.useMenuContext()\n  const [open, setOpen] = React.useState(false)\n  const searchable = !!onValuesChange || isRootMenu\n\n  const handleOpenChange = React.useCallback(\n    (v: boolean) => {\n      if (props.open === undefined) {\n        setOpen(v)\n      }\n      onOpenChange?.(v)\n    },\n    [props.open, onOpenChange]\n  )\n\n  const menuContextValue = React.useMemo(\n    () => ({\n      isRootMenu,\n      open: props.open ?? open,\n    }),\n    [isRootMenu, props.open, open]\n  )\n\n  const menuProvider = (\n    <Ariakit.MenuProvider\n      open={open}\n      setOpen={handleOpenChange}\n      setValues={onValuesChange}\n      showTimeout={100}\n      {...props}\n    >\n      {trigger}\n      <MenuContext.Provider value={menuContextValue}>\n        <SearchableContext.Provider value={searchable}>\n          {children}\n        </SearchableContext.Provider>\n      </MenuContext.Provider>\n    </Ariakit.MenuProvider>\n  )\n\n  if (searchable) {\n    return (\n      <ComboboxProvider value={value} setValue={onValueChange}>\n        {menuProvider}\n      </ComboboxProvider>\n    )\n  }\n\n  return menuProvider\n}\n\nexport function MenuContent({\n  children,\n  className,\n  ref,\n  onClickOutside,\n  ...props\n}: MenuContentProps) {\n  const menuRef = React.useRef<HTMLDivElement | null>(null)\n  const { open } = useMenuContext()\n  const side = useMenuPlacement()\n\n  useOnClickOutside(menuRef, onClickOutside || (() => {}))\n\n  return (\n    <Ariakit.Menu\n      ref={useComposedRef(menuRef, ref)}\n      className={cn(\"tiptap-menu-content\", className)}\n      data-side={side}\n      data-state={open ? \"open\" : \"closed\"}\n      gutter={4}\n      flip\n      unmountOnHide\n      {...props}\n    >\n      {children}\n    </Ariakit.Menu>\n  )\n}\n\nexport const MenuButton = React.forwardRef<\n  HTMLButtonElement,\n  React.ComponentPropsWithoutRef<typeof Ariakit.MenuButton>\n>(({ className, ...props }, ref) => (\n  <Ariakit.MenuButton\n    ref={ref}\n    {...props}\n    className={cn(\"tiptap-menu-button\", className)}\n  />\n))\n\nexport const MenuButtonArrow = React.forwardRef<\n  React.ComponentRef<typeof Ariakit.MenuButtonArrow>,\n  React.ComponentPropsWithoutRef<typeof Ariakit.MenuButtonArrow>\n>(({ className, ...props }, ref) => (\n  <Ariakit.MenuButtonArrow\n    ref={ref}\n    {...props}\n    className={cn(\"tiptap-menu-button-arrow\", className)}\n  />\n))\n\nexport const MenuGroup = React.forwardRef<\n  React.ComponentRef<typeof Ariakit.MenuGroup>,\n  React.ComponentPropsWithoutRef<typeof Ariakit.MenuGroup>\n>(({ className, ...props }, ref) => (\n  <Ariakit.MenuGroup\n    ref={ref}\n    {...props}\n    className={cn(\"tiptap-menu-group\", className)}\n  />\n))\n\nexport const MenuGroupLabel = React.forwardRef<\n  React.ComponentRef<typeof Ariakit.MenuGroupLabel>,\n  React.ComponentPropsWithoutRef<typeof Ariakit.MenuGroupLabel>\n>((props, ref) => <Label ref={ref} {...props} />)\n\nexport const MenuItemCheck = React.forwardRef<\n  React.ComponentRef<typeof Ariakit.MenuItemCheck>,\n  React.ComponentPropsWithoutRef<typeof Ariakit.MenuItemCheck>\n>(({ className, ...props }, ref) => (\n  <Ariakit.MenuItemCheck\n    ref={ref}\n    {...props}\n    className={cn(\"tiptap-menu-item-check\", className)}\n  />\n))\n\nexport const MenuItemRadio = React.forwardRef<\n  React.ComponentRef<typeof Ariakit.MenuItemRadio>,\n  React.ComponentPropsWithoutRef<typeof Ariakit.MenuItemRadio>\n>(({ className, ...props }, ref) => (\n  <Ariakit.MenuItemRadio\n    ref={ref}\n    {...props}\n    className={cn(\"tiptap-menu-item-radio\", className)}\n  />\n))\n\nexport const MenuItem = function MenuItem({\n  name,\n  value,\n  preventClose,\n  className,\n  ...props\n}: MenuItemProps) {\n  const menu = Ariakit.useMenuContext()\n  const searchable = useSearchableContext()\n\n  const hideOnClick = useMenuItemClick(menu, preventClose)\n\n  const itemProps: MenuItemProps = {\n    blurOnHoverEnd: false,\n    focusOnHover: true,\n    className: cn(\"tiptap-menu-item\", className),\n    ...props,\n  }\n\n  if (!searchable) {\n    if (name && value) {\n      return (\n        <MenuItemRadio\n          {...itemProps}\n          hideOnClick={true}\n          name={name}\n          value={value}\n        />\n      )\n    }\n\n    return <Ariakit.MenuItem {...itemProps} />\n  }\n\n  return <ComboboxItem {...itemProps} hideOnClick={hideOnClick} />\n}\n","import * as React from \"react\"\nimport type { MenuContextValue } from \"./menu-types\"\n\nexport const SearchableContext = React.createContext<boolean>(false)\n\nexport const MenuContext = React.createContext<MenuContextValue>({\n  isRootMenu: false,\n  open: false,\n})\n\nexport const useSearchableContext = (): boolean => {\n  return React.useContext(SearchableContext)\n}\n\nexport const useMenuContext = (): MenuContextValue => {\n  return React.useContext(MenuContext)\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as Ariakit from \"@ariakit/react\"\nimport type {\n  ContextMenuAnchor,\n  UseContextMenuReturn,\n  UseMenuStoreReturn,\n} from \"./menu-types\"\n\nexport function useComboboxValueState(): readonly [\n  string,\n  (value: string) => void,\n] {\n  const store = Ariakit.useComboboxContext()\n  const searchValue = Ariakit.useStoreState(store, \"value\") ?? \"\"\n\n  if (!store) {\n    throw new Error(\n      \"useComboboxValueState must be used within ComboboxProvider\"\n    )\n  }\n\n  return [searchValue, store.setValue] as const\n}\n\nexport function useMenuPlacement(): string {\n  const store = Ariakit.useMenuStore()\n  const currentPlacement = Ariakit.useStoreState(\n    store,\n    (state) => state.currentPlacement?.split(\"-\")[0] || \"bottom\"\n  )\n  return currentPlacement\n}\n\nexport function useContextMenu(\n  anchorRect: ContextMenuAnchor\n): UseContextMenuReturn {\n  const menu = Ariakit.useMenuStore()\n\n  React.useEffect(() => {\n    if (anchorRect) {\n      menu.render()\n    }\n  }, [anchorRect, menu])\n\n  const getAnchorRect = React.useCallback(() => anchorRect, [anchorRect])\n\n  const show = React.useCallback(() => {\n    menu.show()\n    menu.setAutoFocusOnShow(true)\n  }, [menu])\n\n  return React.useMemo(\n    () => ({\n      store: menu,\n      getAnchorRect,\n      show,\n    }),\n    [menu, getAnchorRect, show]\n  )\n}\n\nexport function useFloatingMenuStore(): UseMenuStoreReturn {\n  const menu = Ariakit.useMenuStore()\n\n  const show = React.useCallback(\n    (anchorElement: HTMLElement) => {\n      menu.setAnchorElement(anchorElement)\n      menu.show()\n      menu.setAutoFocusOnShow(true)\n    },\n    [menu]\n  )\n\n  return React.useMemo(\n    () => ({\n      store: menu,\n      show,\n    }),\n    [menu, show]\n  )\n}\n\nexport function useMenuItemClick(\n  menu?: Ariakit.MenuStore,\n  preventClose?: boolean\n) {\n  return React.useCallback(\n    (event: React.MouseEvent<HTMLElement, MouseEvent>) => {\n      const expandable = event.currentTarget.hasAttribute(\"aria-expanded\")\n\n      if (expandable || preventClose) {\n        return false\n      }\n\n      menu?.hideAll()\n      return false\n    },\n    [menu, preventClose]\n  )\n}\n","import * as React from 'react';\nimport type { Editor } from '@tiptap/react';\nimport type { Node as TiptapNode } from '@tiptap/pm/model';\nimport {\n  MenuGroup,\n  MenuItem,\n  MenuGroupLabel,\n} from '@/components/tiptap-ui-primitive/menu';\nimport { Button } from '@/components/tiptap-ui-primitive/button';\nimport { Icon } from '@iconify/react';\n\nconst ColumnsIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon\n    icon=\"material-symbols-light:view-column-outline\"\n    className={className}\n  />\n);\n\ninterface ColumnNodeMenuProps {\n  editor: Editor;\n  node: TiptapNode | null;\n  nodePos: number;\n}\n\nexport const ColumnNodeMenu: React.FC<ColumnNodeMenuProps> = ({\n  editor,\n  node,\n  nodePos,\n}) => {\n  // Only show for columnList nodes\n  if (!node || node.type.name !== 'columnList') {\n    return null;\n  }\n\n  const currentColumnCount = node.childCount;\n\n  const handleChangeColumns = React.useCallback(\n    (newCount: number) => {\n      if (!editor || nodePos < 0) return;\n\n      const tr = editor.state.tr;\n      const currentNode = tr.doc.nodeAt(nodePos);\n\n      if (!currentNode || currentNode.type.name !== 'columnList') return;\n\n      const currentColumns = currentNode.childCount;\n\n      if (newCount === currentColumns) return;\n\n      if (newCount > currentColumns) {\n        // Add columns\n        const columnsToAdd = newCount - currentColumns;\n        for (let i = 0; i < columnsToAdd; i++) {\n          const newColumn = editor.state.schema.nodes.column.create(\n            null,\n            editor.state.schema.nodes.paragraph.create(),\n          );\n          tr.insert(nodePos + currentNode.nodeSize - 1, newColumn);\n        }\n      } else {\n        // Remove columns from the end\n        const columnsToRemove = currentColumns - newCount;\n        let pos = nodePos + 1;\n\n        // Skip to the last columns\n        for (let i = 0; i < newCount; i++) {\n          const child = currentNode.child(i);\n          pos += child.nodeSize;\n        }\n\n        // Remove the excess columns\n        for (let i = 0; i < columnsToRemove; i++) {\n          const child = currentNode.child(newCount + i);\n          tr.delete(pos, pos + child.nodeSize);\n        }\n      }\n\n      editor.view.dispatch(tr);\n      editor.commands.focus();\n    },\n    [editor, nodePos],\n  );\n\n  return (\n    <MenuGroup>\n      <MenuGroupLabel>Columns</MenuGroupLabel>\n      {[2, 3, 4, 5].map((count) => (\n        <MenuItem\n          key={count}\n          render={\n            <Button\n              data-style=\"ghost\"\n              data-active-state={currentColumnCount === count ? \"on\" : \"off\"}\n            />\n          }\n          onClick={() => handleChangeColumns(count)}\n        >\n          <ColumnsIcon className=\"tiptap-button-icon\" />\n          <span className=\"tiptap-button-text\">{count} Columns</span>\n        </MenuItem>\n      ))}\n    </MenuGroup>\n  );\n};\n","import type { TnkrExtensionSet } from './types';\n\n// --- Tiptap Core Extensions ---\nimport { StarterKit } from \"@tiptap/starter-kit\";\nimport { Mention } from \"@tiptap/extension-mention\";\nimport { TaskList, TaskItem } from \"@tiptap/extension-list\";\nimport { Color, TextStyle } from \"@tiptap/extension-text-style\";\nimport { Placeholder } from \"@tiptap/extension-placeholder\";\nimport { Typography } from \"@tiptap/extension-typography\";\nimport { Highlight } from \"@tiptap/extension-highlight\";\nimport { Superscript } from \"@tiptap/extension-superscript\";\nimport { Subscript } from \"@tiptap/extension-subscript\";\nimport { TextAlign } from \"@tiptap/extension-text-align\";\nimport { Mathematics } from \"@tiptap/extension-mathematics\";\nimport { UniqueID } from \"@tiptap/extension-unique-id\";\nimport { Emoji, gitHubEmojis } from \"@tiptap/extension-emoji\";\nimport { TableOfContents, getHierarchicalIndexes } from \"@tiptap/extension-table-of-contents\";\nimport { Table, TableRow, TableCell, TableHeader } from '@tiptap/extension-table'\n// --- Custom Extensions ---\nimport { LinkEnhanced } from \"./link-extension-enhanced\";\nimport { HorizontalRule } from \"../components/tiptap-node/horizontal-rule-node/horizontal-rule-node-extension\";\nimport { UiState } from \"../components/tiptap-extension/ui-state-extension\";\nimport { Image as CustomImage } from \"../components/tiptap-node/image-node/image-node-extension\";\nimport { ImageUploadNode } from \"../components/tiptap-node/image-upload-node/image-upload-node-extension\";\nimport { Video } from \"../components/tiptap-node/video-node/video-node-extension\";\nimport { VideoUploadNode } from \"../components/tiptap-node/video-upload-node/video-upload-node-extension\";\nimport { Annotation } from \"../components/tiptap-node/annotation-node/annotation-node-extension\";\nimport { UtilityCard } from \"../components/tiptap-node/utility-card-node/utility-card-node-extension\";\nimport { TabsNode } from \"../components/tiptap-node/tabs-node/tabs-node-extension\";\nimport { ExplorerCard } from \"../components/tiptap-node/explorer-card-node/explorer-card-node-extension\";\nimport { BomNode } from \"../components/tiptap-node/bom-node/bom-node-extension\";\nimport { Callout } from \"../components/tiptap-node/callout-node/callout-node-extension\";\nimport { CodeBlock } from \"../components/tiptap-node/code-block-node\";\nimport { ToggleList } from \"../components/tiptap-node/toggle-list-node\";\nimport { CardNode } from \"../components/tiptap-node/card-node/card-node-extension\";\nimport { ColumnsExtension } from \"../components/tiptap-node/columns-node\";\n\n// Default constants\nconst MAX_FILE_SIZE = 1024 * 1024 * 1024; // 1GB\n\n// Image compression helper to prevent rendering issues with large files\nconst compressImage = (file: File, maxSizeKB: number = 2048): Promise<string> => {\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onload = (e) => {\n      const img = new Image();\n      img.onload = () => {\n        const canvas = document.createElement('canvas');\n        let width = img.width;\n        let height = img.height;\n\n        // Calculate new dimensions to keep aspect ratio\n        const maxDimension = 1920; // Max width or height\n        if (width > height && width > maxDimension) {\n          height = (height * maxDimension) / width;\n          width = maxDimension;\n        } else if (height > maxDimension) {\n          width = (width * maxDimension) / height;\n          height = maxDimension;\n        }\n\n        canvas.width = width;\n        canvas.height = height;\n\n        const ctx = canvas.getContext('2d');\n        if (!ctx) {\n          reject(new Error('Could not get canvas context'));\n          return;\n        }\n\n        ctx.drawImage(img, 0, 0, width, height);\n\n        // Start with quality 0.8 and reduce if needed\n        let quality = 0.8;\n        const attemptCompression = () => {\n          canvas.toBlob(\n            (blob) => {\n              if (!blob) {\n                reject(new Error('Could not compress image'));\n                return;\n              }\n\n              // If still too large and quality can be reduced, try again\n              if (blob.size > maxSizeKB * 1024 && quality > 0.3) {\n                quality -= 0.1;\n                attemptCompression();\n                return;\n              }\n\n              // Convert to data URL\n              const compressedReader = new FileReader();\n              compressedReader.onload = () => {\n                resolve(compressedReader.result as string);\n              };\n              compressedReader.onerror = reject;\n              compressedReader.readAsDataURL(blob);\n            },\n            'image/jpeg',\n            quality\n          );\n        };\n\n        attemptCompression();\n      };\n      img.onerror = () => reject(new Error('Could not load image'));\n      img.src = e.target?.result as string;\n    };\n    reader.onerror = reject;\n    reader.readAsDataURL(file);\n  });\n};\n\n// Default image upload handler\nconst defaultImageUpload = async (\n  file: File,\n  onProgress?: (event: { progress: number }) => void,\n  abortSignal?: AbortSignal\n): Promise<{ src: string }> => {\n  return new Promise(async (resolve, reject) => {\n    if (onProgress) {\n      onProgress({ progress: 0 });\n    }\n\n    try {\n      // Compress images larger than 2MB to prevent rendering issues\n      if (file.size > 2 * 1024 * 1024) {\n        if (onProgress) {\n          onProgress({ progress: 50 });\n        }\n        const compressedDataUrl = await compressImage(file, 2048);\n        if (onProgress) {\n          onProgress({ progress: 100 });\n        }\n        resolve({ src: compressedDataUrl });\n      } else {\n        // For smaller files, use as-is\n        const reader = new FileReader();\n\n        reader.onload = () => {\n          if (onProgress) {\n            onProgress({ progress: 100 });\n          }\n          resolve({ src: reader.result as string });\n        };\n\n        reader.onerror = reject;\n\n        if (abortSignal) {\n          abortSignal.addEventListener(\"abort\", () => {\n            reader.abort();\n            reject(new Error(\"Upload aborted\"));\n          });\n        }\n\n        reader.readAsDataURL(file);\n      }\n    } catch (error) {\n      reject(error);\n    }\n  });\n};\n\n/**\n * Get basic extensions for simple editing (text, headings, images, dividers)\n */\nexport function getBasicExtensions(): TnkrExtensionSet {\n  return {\n    core: [\n      {\n        name: 'StarterKit',\n        extension: StarterKit,\n        options: {\n          // Disable advanced features, keep basic text editing\n          horizontalRule: false, // We'll add our custom one\n          codeBlock: false, // Using custom CodeBlock instead\n          blockquote: true, // Enable blockquotes\n          bulletList: true,\n          orderedList: true,\n          listItem: true,\n          dropcursor: { width: 2 },\n        },\n      },\n      {\n        name: 'UniqueID',\n        extension: UniqueID,\n        options: {\n          types: ['paragraph', 'heading'],\n        },\n      },\n      {\n        name: 'UiState',\n        extension: UiState,\n      },\n    ],\n    formatting: [\n      {\n        name: 'Highlight',\n        extension: Highlight,\n        options: { multicolor: true },\n      },\n      {\n        name: 'Color',\n        extension: Color,\n      },\n    ],\n    nodes: [\n      {\n        name: 'CodeBlock',\n        extension: CodeBlock,\n      },\n    \n      {\n        name: 'HorizontalRule',\n        extension: HorizontalRule,\n      },\n      {\n        name: 'CustomImage',\n        extension: CustomImage,\n      },\n      {\n        name: 'ImageUploadNode',\n        extension: ImageUploadNode,\n        options: {\n          accept: \"image/*\",\n          maxSize: 1024 * 1024 * 1024, // 1GB\n          limit: 3,\n          upload: async (file: File) => {\n            // Default upload handler - can be overridden\n            const reader = new FileReader();\n            return new Promise((resolve) => {\n              reader.onload = () => resolve({ src: reader.result as string });\n              reader.readAsDataURL(file);\n            });\n          },\n          onError: (error: Error) => console.error(\"Upload failed:\", error),\n        },\n      },\n      {\n        name: 'Video',\n        extension: Video,\n      },\n      {\n        name: 'VideoUploadNode',\n        extension: VideoUploadNode,\n        options: {\n          accept: \"video/*\",\n          maxSize: 1024 * 1024 * 1024, // 1GB\n          limit: 1,\n          upload: async (file: File) => {\n            const reader = new FileReader();\n            return new Promise((resolve) => {\n              reader.onload = () => resolve({ src: reader.result as string });\n              reader.readAsDataURL(file);\n            });\n          },\n          onError: (error: Error) => console.error(\"Upload failed:\", error),\n        },\n      },\n      {\n        name: 'Annotation',\n        extension: Annotation,\n      },\n      {\n        name: 'Callout',\n        extension: Callout,\n      },\n      {\n        name: 'ToggleList',\n        extension: ToggleList,\n      },\n    ],\n    marks: [\n      {\n        name: 'TextStyle',\n        extension: TextStyle,\n      },\n    ],\n    ui: [\n      {\n        name: 'Placeholder',\n        extension: Placeholder,\n        options: {\n          placeholder: \"Write a description...\",\n          emptyNodeClass: \"is-empty\",\n        },\n      },\n    ],\n    utility: [],\n    collaboration: [],\n    ai: [],\n  };\n}\n\n/**\n * Get basic extensions WITHOUT image support (for external apps)\n */\nexport function getBasicExtensionsNoImages(): TnkrExtensionSet {\n  return {\n    core: [\n      {\n        name: 'StarterKit',\n        extension: StarterKit,\n        options: {\n          // Disable advanced features, keep basic text editing\n          horizontalRule: false, // We'll add our custom one\n          codeBlock: false,\n          blockquote: false,\n          bulletList: true,\n          orderedList: true,\n          listItem: true,\n          dropcursor: { width: 2 },\n        },\n      },\n      {\n        name: 'UniqueID',\n        extension: UniqueID,\n        options: {\n          types: ['paragraph', 'heading'],\n        },\n      },\n      {\n        name: 'UiState',\n        extension: UiState,\n      },\n    ],\n    formatting: [\n      {\n        name: 'Highlight',\n        extension: Highlight,\n        options: { multicolor: true },\n      },\n      {\n        name: 'Color',\n        extension: Color,\n      },\n    ],\n    nodes: [\n      {\n        name: 'HorizontalRule',\n        extension: HorizontalRule,\n      },\n      // NOTE: No image extensions included\n    ],\n    marks: [\n      {\n        name: 'TextStyle',\n        extension: TextStyle,\n      },\n    ],\n    ui: [\n      {\n        name: 'Placeholder',\n        extension: Placeholder,\n        options: {\n          placeholder: \"Write a description...\",\n          emptyNodeClass: \"is-empty\",\n        },\n      },\n    ],\n    utility: [],\n    collaboration: [],\n    ai: [],\n  };\n}\n\nexport function getDefaultExtensions(): TnkrExtensionSet {\n  return {\n    core: [\n      {\n        name: 'StarterKit',\n        extension: StarterKit,\n        options: {\n          horizontalRule: false,\n          codeBlock: false, // Using custom CodeBlock instead\n          link: false, // Using custom LinkEnhanced instead\n          dropcursor: {\n            width: 2,\n          },\n        },\n      },\n      {\n        name: 'LinkEnhanced',\n        extension: LinkEnhanced,\n        options: {\n          openOnClick: false,\n          HTMLAttributes: {\n            class: 'tiptap-link',\n          },\n        },\n      },\n      {\n        name: 'UniqueID',\n        extension: UniqueID,\n        options: {\n          types: [\n            'paragraph',\n            'bulletList',\n            'orderedList',\n            'taskList',\n            'heading',\n            'blockquote',\n            'codeBlock',\n          ],\n        },\n      },\n      {\n        name: 'UiState',\n        extension: UiState,\n      },\n      {\n        name: 'Table',\n        extension: Table.configure({\n          resizable: false,\n          allowTableNodeSelection: true,\n          HTMLAttributes: {\n            class: 'tiptap-table',\n          },\n          // Ensure default table structure\n          cellMinWidth: 100,\n        }),\n      },\n      {\n        name: 'TableRow',\n        extension: TableRow,\n      },\n      {\n        name: 'TableCell',\n        extension: TableCell,\n      },\n      {\n        name: 'TableHeader',\n        extension: TableHeader,\n      }\n      \n    ],\n    formatting: [\n      {\n        name: 'TextAlign',\n        extension: TextAlign,\n        options: { types: [\"heading\", \"paragraph\"] },\n      },\n      {\n        name: 'Color',\n        extension: Color,\n      },\n      {\n        name: 'TextStyle',\n        extension: TextStyle,\n      },\n      {\n        name: 'Highlight',\n        extension: Highlight,\n        options: { multicolor: true },\n      },\n      {\n        name: 'Superscript',\n        extension: Superscript,\n      },\n      {\n        name: 'Subscript',\n        extension: Subscript,\n      },\n      {\n        name: 'Typography',\n        extension: Typography,\n      },\n    ],\n    nodes: [\n      {\n        name: 'CodeBlock',\n        extension: CodeBlock,\n      },\n     \n      {\n        name: 'HorizontalRule',\n        extension: HorizontalRule,\n      },\n      {\n        name: 'TaskList',\n        extension: TaskList,\n      },\n      {\n        name: 'TaskItem',\n        extension: TaskItem,\n        options: { nested: true },\n      },\n      {\n        name: 'CustomImage',\n        extension: CustomImage,\n      },\n      {\n        name: 'ImageUploadNode',\n        extension: ImageUploadNode,\n        options: {\n          accept: \"image/*\",\n          maxSize: MAX_FILE_SIZE,\n          limit: 3,\n          upload: async (file: File) => {\n            const result = await defaultImageUpload(file);\n            return typeof result === \"string\" ? result : result.src;\n          },\n          onError: (error: Error) => console.error(\"Upload failed:\", error),\n        },\n      },\n      {\n        name: 'Video',\n        extension: Video,\n      },\n      {\n        name: 'VideoUploadNode',\n        extension: VideoUploadNode,\n        options: {\n          accept: \"video/*\",\n          maxSize: MAX_FILE_SIZE,\n          limit: 1,\n          upload: async (file: File) => {\n            const result = await defaultImageUpload(file);\n            return typeof result === \"string\" ? result : result.src;\n          },\n          onError: (error: Error) => console.error(\"Upload failed:\", error),\n        },\n      },\n      {\n        name: 'Annotation',\n        extension: Annotation,\n      },\n      {\n        name: 'Mathematics',\n        extension: Mathematics,\n      },\n      {\n        name: 'UtilityCard',\n        extension: UtilityCard,\n        options: {\n          onUtilityCardClick: undefined,\n          showUtilityCard: false, // Disabled by default\n          position: 'inline',\n          className: '',\n        },\n      },\n      {\n        name: 'TabsNode',\n        extension: TabsNode,\n      },\n      {\n        name: 'Callout',\n        extension: Callout,\n      },\n      {\n        name: 'ExplorerCard',\n        extension: ExplorerCard,\n        options: {\n          className: '',\n        },\n      },\n      {\n        name: 'BomNode',\n        extension: BomNode,\n      },\n      {\n        name: 'ToggleList',\n        extension: ToggleList,\n      },\n      {\n        name: 'CardNode',\n        extension: CardNode,\n      },\n      {\n        name: 'ColumnsExtension',\n        extension: ColumnsExtension,\n      },\n    ],\n    marks: [\n      {\n        name: 'Emoji',\n        extension: Emoji,\n        options: {\n          emojis: gitHubEmojis.filter(\n            (emoji) => !emoji.name.includes(\"regional\")\n          ),\n          forceFallbackImages: true,\n        },\n      },\n    ],\n    ui: [\n      {\n        name: 'Placeholder',\n        extension: Placeholder,\n        options: {\n          placeholder: \"Start writing...\",\n          emptyNodeClass: \"is-empty with-slash\",\n        },\n      },\n      {\n        name: 'Mention',\n        extension: Mention,\n      },\n    ],\n    utility: [\n      {\n        name: 'TableOfContents',\n        extension: TableOfContents,\n        options: {\n          getIndex: getHierarchicalIndexes,\n          onUpdate: (content: any) => {\n            // No-op function for default configuration\n            // Applications can override this in their extension options\n          },\n        },\n      },\n    ],\n    ai: [\n      // AI extensions will be added here when ready\n    ],\n  };\n}\n\n\n/**\n * Get header-only extensions for title editing (only heading levels allowed)\n */\nexport function getHeaderOnlyExtensions(): TnkrExtensionSet {\n  return {\n    core: [\n      {\n        name: 'StarterKit',\n        extension: StarterKit,\n        options: {\n          // Disable all except basic text and headings\n          horizontalRule: false,\n          codeBlock: false,\n          blockquote: false,\n          bulletList: false,\n          orderedList: false,\n          listItem: false,\n          dropcursor: { width: 2 },\n        },\n      },\n      {\n        name: 'UniqueID',\n        extension: UniqueID,\n        options: {\n          types: ['heading'],\n        },\n      },\n      {\n        name: 'UiState',\n        extension: UiState,\n      },\n    ],\n    formatting: [\n      {\n        name: 'Highlight',\n        extension: Highlight,\n        options: { multicolor: true },\n      },\n      {\n        name: 'Color',\n        extension: Color,\n      },\n    ],\n    nodes: [\n      // No additional nodes for header-only mode\n    ],\n    marks: [\n      {\n        name: 'TextStyle',\n        extension: TextStyle,\n      },\n    ],\n    ui: [\n      {\n        name: 'Placeholder',\n        extension: Placeholder,\n        options: {\n          placeholder: \"Add a title...\",\n          emptyNodeClass: \"is-empty\",\n        },\n      },\n    ],\n    utility: [],\n    collaboration: [],\n    ai: [],\n  };\n}\n","import type { Extension } from '@tiptap/core';\nimport type { TnkrExtensionConfig, TnkrExtensionSet, ExtensionManagerOptions } from './types';\nimport { getDefaultExtensions } from './default-extensions';\n\nexport class ExtensionManager {\n  private options: ExtensionManagerOptions;\n  private extensionSet: TnkrExtensionSet;\n\n  constructor(options: ExtensionManagerOptions = {}, customExtensionSet?: TnkrExtensionSet) {\n    this.options = options;\n    this.extensionSet = customExtensionSet || getDefaultExtensions();\n  }\n\n  /**\n   * Get the final array of configured extensions ready for Tiptap\n   */\n  getConfiguredExtensions(): Extension[] {\n    const extensions: Extension[] = [];\n    \n    // Process all extension categories\n    Object.entries(this.extensionSet).forEach(([category, extensionConfigs]) => {\n      if (!extensionConfigs) return;\n\n      // Skip collaboration extensions if not enabled\n      if (category === 'collaboration' && !this.options.enableCollaboration) {\n        return;\n      }\n\n      // Skip AI extensions if not enabled  \n      if (category === 'ai' && !this.options.enableAI) {\n        return;\n      }\n\n      extensionConfigs.forEach((config: TnkrExtensionConfig) => {\n      \n\n        // Skip disabled extensions\n        if (config.enabled === false) return;\n        if (this.options.disabledExtensions?.includes(config.name)) return;\n\n        // Merge default options with user-provided options\n        const mergedOptions = {\n          ...config.options,\n          ...this.options.extensionOptions?.[config.name],\n        };\n\n      \n\n        // Configure the extension with merged options\n        const extension = this.configureExtension(config.extension, mergedOptions);\n        if (extension) {\n          extensions.push(extension);\n        }\n      });\n    });\n\n    // Add custom extensions\n    if (this.options.customExtensions) {\n      this.options.customExtensions.forEach(config => {\n        if (config.enabled !== false && !this.options.disabledExtensions?.includes(config.name)) {\n          const extension = this.configureExtension(config.extension, config.options);\n          if (extension) {\n            extensions.push(extension);\n          }\n        }\n      });\n    }\n\n    return extensions;\n  }\n\n  /**\n   * Configure an extension with options\n   */\n  private configureExtension(extension: any, options?: Record<string, any>): Extension | null {\n    try {\n      if (options && typeof extension.configure === 'function') {\n        return extension.configure(options);\n      }\n      return extension;\n    } catch (error) {\n      console.error('Failed to configure extension:', extension.name, error);\n      return null;\n    }\n  }\n\n  /**\n   * Update extension options dynamically\n   */\n  updateOptions(newOptions: Partial<ExtensionManagerOptions>): void {\n    this.options = { ...this.options, ...newOptions };\n  }\n\n  /**\n   * Enable/disable specific extensions\n   */\n  toggleExtension(extensionName: string, enabled: boolean): void {\n    if (!this.options.disabledExtensions) {\n      this.options.disabledExtensions = [];\n    }\n\n    if (enabled) {\n      this.options.disabledExtensions = this.options.disabledExtensions.filter(\n        name => name !== extensionName\n      );\n    } else {\n      if (!this.options.disabledExtensions.includes(extensionName)) {\n        this.options.disabledExtensions.push(extensionName);\n      }\n    }\n  }\n\n  /**\n   * Get list of available extensions by category\n   */\n  getAvailableExtensions(): TnkrExtensionSet {\n    return this.extensionSet;\n  }\n\n  /**\n   * Check if an extension is enabled\n   */\n  isExtensionEnabled(extensionName: string): boolean {\n    return !this.options.disabledExtensions?.includes(extensionName);\n  }\n}","/**\n * Common Math expressions.\n *\n * @module math\n */\n\nexport const floor = Math.floor\nexport const ceil = Math.ceil\nexport const abs = Math.abs\nexport const imul = Math.imul\nexport const round = Math.round\nexport const log10 = Math.log10\nexport const log2 = Math.log2\nexport const log = Math.log\nexport const sqrt = Math.sqrt\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The sum of a and b\n */\nexport const add = (a, b) => a + b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The smaller element of a and b\n */\nexport const min = (a, b) => a < b ? a : b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The bigger element of a and b\n */\nexport const max = (a, b) => a > b ? a : b\n\nexport const isNaN = Number.isNaN\n\nexport const pow = Math.pow\n/**\n * Base 10 exponential function. Returns the value of 10 raised to the power of pow.\n *\n * @param {number} exp\n * @return {number}\n */\nexport const exp10 = exp => Math.pow(10, exp)\n\nexport const sign = Math.sign\n\n/**\n * @param {number} n\n * @return {boolean} Wether n is negative. This function also differentiates between -0 and +0\n */\nexport const isNegativeZero = n => n !== 0 ? n < 0 : 1 / n < 0\n","/* eslint-env browser */\n\n/**\n * Binary data constants.\n *\n * @module binary\n */\n\n/**\n * n-th bit activated.\n *\n * @type {number}\n */\nexport const BIT1 = 1\nexport const BIT2 = 2\nexport const BIT3 = 4\nexport const BIT4 = 8\nexport const BIT5 = 16\nexport const BIT6 = 32\nexport const BIT7 = 64\nexport const BIT8 = 128\nexport const BIT9 = 256\nexport const BIT10 = 512\nexport const BIT11 = 1024\nexport const BIT12 = 2048\nexport const BIT13 = 4096\nexport const BIT14 = 8192\nexport const BIT15 = 16384\nexport const BIT16 = 32768\nexport const BIT17 = 65536\nexport const BIT18 = 1 << 17\nexport const BIT19 = 1 << 18\nexport const BIT20 = 1 << 19\nexport const BIT21 = 1 << 20\nexport const BIT22 = 1 << 21\nexport const BIT23 = 1 << 22\nexport const BIT24 = 1 << 23\nexport const BIT25 = 1 << 24\nexport const BIT26 = 1 << 25\nexport const BIT27 = 1 << 26\nexport const BIT28 = 1 << 27\nexport const BIT29 = 1 << 28\nexport const BIT30 = 1 << 29\nexport const BIT31 = 1 << 30\nexport const BIT32 = 1 << 31\n\n/**\n * First n bits activated.\n *\n * @type {number}\n */\nexport const BITS0 = 0\nexport const BITS1 = 1\nexport const BITS2 = 3\nexport const BITS3 = 7\nexport const BITS4 = 15\nexport const BITS5 = 31\nexport const BITS6 = 63\nexport const BITS7 = 127\nexport const BITS8 = 255\nexport const BITS9 = 511\nexport const BITS10 = 1023\nexport const BITS11 = 2047\nexport const BITS12 = 4095\nexport const BITS13 = 8191\nexport const BITS14 = 16383\nexport const BITS15 = 32767\nexport const BITS16 = 65535\nexport const BITS17 = BIT18 - 1\nexport const BITS18 = BIT19 - 1\nexport const BITS19 = BIT20 - 1\nexport const BITS20 = BIT21 - 1\nexport const BITS21 = BIT22 - 1\nexport const BITS22 = BIT23 - 1\nexport const BITS23 = BIT24 - 1\nexport const BITS24 = BIT25 - 1\nexport const BITS25 = BIT26 - 1\nexport const BITS26 = BIT27 - 1\nexport const BITS27 = BIT28 - 1\nexport const BITS28 = BIT29 - 1\nexport const BITS29 = BIT30 - 1\nexport const BITS30 = BIT31 - 1\n/**\n * @type {number}\n */\nexport const BITS31 = 0x7FFFFFFF\n/**\n * @type {number}\n */\nexport const BITS32 = 0xFFFFFFFF\n","/**\n * Utility helpers for working with numbers.\n *\n * @module number\n */\n\nimport * as math from './math.js'\nimport * as binary from './binary.js'\n\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER\nexport const MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER\n\nexport const LOWEST_INT32 = 1 << 31\nexport const HIGHEST_INT32 = binary.BITS31\nexport const HIGHEST_UINT32 = binary.BITS32\n\n/* c8 ignore next */\nexport const isInteger = Number.isInteger || (num => typeof num === 'number' && isFinite(num) && math.floor(num) === num)\nexport const isNaN = Number.isNaN\nexport const parseInt = Number.parseInt\n\n/**\n * Count the number of \"1\" bits in an unsigned 32bit number.\n *\n * Super fun bitcount algorithm by Brian Kernighan.\n *\n * @param {number} n\n */\nexport const countBits = n => {\n  n &= binary.BITS32\n  let count = 0\n  while (n) {\n    n &= (n - 1)\n    count++\n  }\n  return count\n}\n","/**\n * Utility module to work with sets.\n *\n * @module set\n */\n\nexport const create = () => new Set()\n\n/**\n * @template T\n * @param {Set<T>} set\n * @return {Array<T>}\n */\nexport const toArray = set => Array.from(set)\n\n/**\n * @template T\n * @param {Set<T>} set\n * @return {T|undefined}\n */\nexport const first = set => set.values().next().value\n\n/**\n * @template T\n * @param {Iterable<T>} entries\n * @return {Set<T>}\n */\nexport const from = entries => new Set(entries)\n","/**\n * Utility module to work with Arrays.\n *\n * @module array\n */\n\nimport * as set from './set.js'\n\n/**\n * Return the last element of an array. The element must exist\n *\n * @template L\n * @param {ArrayLike<L>} arr\n * @return {L}\n */\nexport const last = arr => arr[arr.length - 1]\n\n/**\n * @template C\n * @return {Array<C>}\n */\nexport const create = () => /** @type {Array<C>} */ ([])\n\n/**\n * @template D\n * @param {Array<D>} a\n * @return {Array<D>}\n */\nexport const copy = a => /** @type {Array<D>} */ (a.slice())\n\n/**\n * Append elements from src to dest\n *\n * @template M\n * @param {Array<M>} dest\n * @param {Array<M>} src\n */\nexport const appendTo = (dest, src) => {\n  for (let i = 0; i < src.length; i++) {\n    dest.push(src[i])\n  }\n}\n\n/**\n * Transforms something array-like to an actual Array.\n *\n * @function\n * @template T\n * @param {ArrayLike<T>|Iterable<T>} arraylike\n * @return {T}\n */\nexport const from = Array.from\n\n/**\n * True iff condition holds on every element in the Array.\n *\n * @function\n * @template {ArrayLike<any>} ARR\n *\n * @param {ARR} arr\n * @param {ARR extends ArrayLike<infer S> ? ((value:S, index:number, arr:ARR) => boolean) : any} f\n * @return {boolean}\n */\nexport const every = (arr, f) => {\n  for (let i = 0; i < arr.length; i++) {\n    if (!f(arr[i], i, arr)) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * True iff condition holds on some element in the Array.\n *\n * @function\n * @template {ArrayLike<any>} ARR\n *\n * @param {ARR} arr\n * @param {ARR extends ArrayLike<infer S> ? ((value:S, index:number, arr:ARR) => boolean) : never} f\n * @return {boolean}\n */\nexport const some = (arr, f) => {\n  for (let i = 0; i < arr.length; i++) {\n    if (f(arr[i], i, arr)) {\n      return true\n    }\n  }\n  return false\n}\n\n/**\n * @template ELEM\n *\n * @param {ArrayLike<ELEM>} a\n * @param {ArrayLike<ELEM>} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a.length === b.length && every(a, (item, index) => item === b[index])\n\n/**\n * @template ELEM\n * @param {Array<Array<ELEM>>} arr\n * @return {Array<ELEM>}\n */\nexport const flatten = arr => fold(arr, /** @type {Array<ELEM>} */ ([]), (acc, val) => acc.concat(val))\n\n/**\n * @template T\n * @param {number} len\n * @param {function(number, Array<T>):T} f\n * @return {Array<T>}\n */\nexport const unfold = (len, f) => {\n  const array = new Array(len)\n  for (let i = 0; i < len; i++) {\n    array[i] = f(i, array)\n  }\n  return array\n}\n\n/**\n * @template T\n * @template RESULT\n * @param {Array<T>} arr\n * @param {RESULT} seed\n * @param {function(RESULT, T, number):RESULT} folder\n */\nexport const fold = (arr, seed, folder) => arr.reduce(folder, seed)\n\nexport const isArray = Array.isArray\n\n/**\n * @template T\n * @param {Array<T>} arr\n * @return {Array<T>}\n */\nexport const unique = arr => from(set.from(arr))\n\n/**\n * @template T\n * @template M\n * @param {ArrayLike<T>} arr\n * @param {function(T):M} mapper\n * @return {Array<T>}\n */\nexport const uniqueBy = (arr, mapper) => {\n  /**\n   * @type {Set<M>}\n   */\n  const happened = set.create()\n  /**\n   * @type {Array<T>}\n   */\n  const result = []\n  for (let i = 0; i < arr.length; i++) {\n    const el = arr[i]\n    const mapped = mapper(el)\n    if (!happened.has(mapped)) {\n      happened.add(mapped)\n      result.push(el)\n    }\n  }\n  return result\n}\n\n/**\n * @template {ArrayLike<any>} ARR\n * @template {function(ARR extends ArrayLike<infer T> ? T : never, number, ARR):any} MAPPER\n * @param {ARR} arr\n * @param {MAPPER} mapper\n * @return {Array<MAPPER extends function(...any): infer M ? M : never>}\n */\nexport const map = (arr, mapper) => {\n  /**\n   * @type {Array<any>}\n   */\n  const res = Array(arr.length)\n  for (let i = 0; i < arr.length; i++) {\n    res[i] = mapper(/** @type {any} */ (arr[i]), i, /** @type {any} */ (arr))\n  }\n  return /** @type {any} */ (res)\n}\n\n/**\n * This function bubble-sorts a single item to the correct position. The sort happens in-place and\n * might be useful to ensure that a single item is at the correct position in an otherwise sorted\n * array.\n *\n * @example\n *  const arr = [3, 2, 5]\n *  arr.sort((a, b) => a - b)\n *  arr // => [2, 3, 5]\n *  arr.splice(1, 0, 7)\n *  array.bubbleSortItem(arr, 1, (a, b) => a - b)\n *  arr // => [2, 3, 5, 7]\n *\n * @template T\n * @param {Array<T>} arr\n * @param {number} i\n * @param {(a:T,b:T) => number} compareFn\n */\nexport const bubblesortItem = (arr, i, compareFn) => {\n  const n = arr[i]\n  let j = i\n  // try to sort to the right\n  while (j + 1 < arr.length && compareFn(n, arr[j + 1]) > 0) {\n    arr[j] = arr[j + 1]\n    arr[++j] = n\n  }\n  if (i === j && j > 0) { // no change yet\n    // sort to the left\n    while (j > 0 && compareFn(arr[j - 1], n) > 0) {\n      arr[j] = arr[j - 1]\n      arr[--j] = n\n    }\n  }\n  return j\n}\n","import * as array from './array.js'\n\n/**\n * Utility module to work with strings.\n *\n * @module string\n */\n\nexport const fromCharCode = String.fromCharCode\nexport const fromCodePoint = String.fromCodePoint\n\n/**\n * The largest utf16 character.\n * Corresponds to Uint8Array([255, 255]) or charcodeof(2x2^8)\n */\nexport const MAX_UTF16_CHARACTER = fromCharCode(65535)\n\n/**\n * @param {string} s\n * @return {string}\n */\nconst toLowerCase = s => s.toLowerCase()\n\nconst trimLeftRegex = /^\\s*/g\n\n/**\n * @param {string} s\n * @return {string}\n */\nexport const trimLeft = s => s.replace(trimLeftRegex, '')\n\nconst fromCamelCaseRegex = /([A-Z])/g\n\n/**\n * @param {string} s\n * @param {string} separator\n * @return {string}\n */\nexport const fromCamelCase = (s, separator) => trimLeft(s.replace(fromCamelCaseRegex, match => `${separator}${toLowerCase(match)}`))\n\n/**\n * Compute the utf8ByteLength\n * @param {string} str\n * @return {number}\n */\nexport const utf8ByteLength = str => unescape(encodeURIComponent(str)).length\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Polyfill = str => {\n  const encodedString = unescape(encodeURIComponent(str))\n  const len = encodedString.length\n  const buf = new Uint8Array(len)\n  for (let i = 0; i < len; i++) {\n    buf[i] = /** @type {number} */ (encodedString.codePointAt(i))\n  }\n  return buf\n}\n\n/* c8 ignore next */\nexport const utf8TextEncoder = /** @type {TextEncoder} */ (typeof TextEncoder !== 'undefined' ? new TextEncoder() : null)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Native = str => utf8TextEncoder.encode(str)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\n/* c8 ignore next */\nexport const encodeUtf8 = utf8TextEncoder ? _encodeUtf8Native : _encodeUtf8Polyfill\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Polyfill = buf => {\n  let remainingLen = buf.length\n  let encodedString = ''\n  let bufPos = 0\n  while (remainingLen > 0) {\n    const nextLen = remainingLen < 10000 ? remainingLen : 10000\n    const bytes = buf.subarray(bufPos, bufPos + nextLen)\n    bufPos += nextLen\n    // Starting with ES5.1 we can supply a generic array-like object as arguments\n    encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n    remainingLen -= nextLen\n  }\n  return decodeURIComponent(escape(encodedString))\n}\n\n/* c8 ignore next */\nexport let utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8', { fatal: true, ignoreBOM: true })\n\n/* c8 ignore start */\nif (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) {\n  // Safari doesn't handle BOM correctly.\n  // This fixes a bug in Safari 13.0.5 where it produces a BOM the first time it is called.\n  // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the first call and\n  // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the second call\n  // Another issue is that from then on no BOM chars are recognized anymore\n  /* c8 ignore next */\n  utf8TextDecoder = null\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Native = buf => /** @type {TextDecoder} */ (utf8TextDecoder).decode(buf)\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\n/* c8 ignore next */\nexport const decodeUtf8 = utf8TextDecoder ? _decodeUtf8Native : _decodeUtf8Polyfill\n\n/**\n * @param {string} str The initial string\n * @param {number} index Starting position\n * @param {number} remove Number of characters to remove\n * @param {string} insert New content to insert\n */\nexport const splice = (str, index, remove, insert = '') => str.slice(0, index) + insert + str.slice(index + remove)\n\n/**\n * @param {string} source\n * @param {number} n\n */\nexport const repeat = (source, n) => array.unfold(n, () => source).join('')\n\n/**\n * Escape HTML characters &,<,>,',\" to their respective HTML entities &amp;,&lt;,&gt;,&#39;,&quot;\n *\n * @param {string} str\n */\nexport const escapeHTML = str =>\n  str.replace(/[&<>'\"]/g, r => /** @type {string} */ ({\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    \"'\": '&#39;',\n    '\"': '&quot;'\n  }[r]))\n\n/**\n * Reverse of `escapeHTML`\n *\n * @param {string} str\n */\nexport const unescapeHTML = str =>\n  str.replace(/&amp;|&lt;|&gt;|&#39;|&quot;/g, r => /** @type {string} */ ({\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&#39;': \"'\",\n    '&quot;': '\"'\n  }[r]))\n","/**\n * Efficient schema-less binary encoding with support for variable length encoding.\n *\n * Use [lib0/encoding] with [lib0/decoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module encoding\n */\n\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as binary from './binary.js'\nimport * as string from './string.js'\nimport * as array from './array.js'\n\n/**\n * A BinaryEncoder handles the encoding to an Uint8Array.\n */\nexport class Encoder {\n  constructor () {\n    this.cpos = 0\n    this.cbuf = new Uint8Array(100)\n    /**\n     * @type {Array<Uint8Array>}\n     */\n    this.bufs = []\n  }\n}\n\n/**\n * @function\n * @return {Encoder}\n */\nexport const createEncoder = () => new Encoder()\n\n/**\n * @param {function(Encoder):void} f\n */\nexport const encode = (f) => {\n  const encoder = createEncoder()\n  f(encoder)\n  return toUint8Array(encoder)\n}\n\n/**\n * The current length of the encoded data.\n *\n * @function\n * @param {Encoder} encoder\n * @return {number}\n */\nexport const length = encoder => {\n  let len = encoder.cpos\n  for (let i = 0; i < encoder.bufs.length; i++) {\n    len += encoder.bufs[i].length\n  }\n  return len\n}\n\n/**\n * Check whether encoder is empty.\n *\n * @function\n * @param {Encoder} encoder\n * @return {boolean}\n */\nexport const hasContent = encoder => encoder.cpos > 0 || encoder.bufs.length > 0\n\n/**\n * Transform to Uint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @return {Uint8Array} The created ArrayBuffer.\n */\nexport const toUint8Array = encoder => {\n  const uint8arr = new Uint8Array(length(encoder))\n  let curPos = 0\n  for (let i = 0; i < encoder.bufs.length; i++) {\n    const d = encoder.bufs[i]\n    uint8arr.set(d, curPos)\n    curPos += d.length\n  }\n  uint8arr.set(new Uint8Array(encoder.cbuf.buffer, 0, encoder.cpos), curPos)\n  return uint8arr\n}\n\n/**\n * Verify that it is possible to write `len` bytes wtihout checking. If\n * necessary, a new Buffer with the required length is attached.\n *\n * @param {Encoder} encoder\n * @param {number} len\n */\nexport const verifyLen = (encoder, len) => {\n  const bufferLen = encoder.cbuf.length\n  if (bufferLen - encoder.cpos < len) {\n    encoder.bufs.push(new Uint8Array(encoder.cbuf.buffer, 0, encoder.cpos))\n    encoder.cbuf = new Uint8Array(math.max(bufferLen, len) * 2)\n    encoder.cpos = 0\n  }\n}\n\n/**\n * Write one byte to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The byte that is to be encoded.\n */\nexport const write = (encoder, num) => {\n  const bufferLen = encoder.cbuf.length\n  if (encoder.cpos === bufferLen) {\n    encoder.bufs.push(encoder.cbuf)\n    encoder.cbuf = new Uint8Array(bufferLen * 2)\n    encoder.cpos = 0\n  }\n  encoder.cbuf[encoder.cpos++] = num\n}\n\n/**\n * Write one byte at a specific position.\n * Position must already be written (i.e. encoder.length > pos)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos Position to which to write data\n * @param {number} num Unsigned 8-bit integer\n */\nexport const set = (encoder, pos, num) => {\n  let buffer = null\n  // iterate all buffers and adjust position\n  for (let i = 0; i < encoder.bufs.length && buffer === null; i++) {\n    const b = encoder.bufs[i]\n    if (pos < b.length) {\n      buffer = b // found buffer\n    } else {\n      pos -= b.length\n    }\n  }\n  if (buffer === null) {\n    // use current buffer\n    buffer = encoder.cbuf\n  }\n  buffer[pos] = num\n}\n\n/**\n * Write one byte as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint8 = write\n\n/**\n * Write one byte as an unsigned Integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint8 = set\n\n/**\n * Write two bytes as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint16 = (encoder, num) => {\n  write(encoder, num & binary.BITS8)\n  write(encoder, (num >>> 8) & binary.BITS8)\n}\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint16 = (encoder, pos, num) => {\n  set(encoder, pos, num & binary.BITS8)\n  set(encoder, pos + 1, (num >>> 8) & binary.BITS8)\n}\n\n/**\n * Write two bytes as an unsigned integer\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32 = (encoder, num) => {\n  for (let i = 0; i < 4; i++) {\n    write(encoder, num & binary.BITS8)\n    num >>>= 8\n  }\n}\n\n/**\n * Write two bytes as an unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32BigEndian = (encoder, num) => {\n  for (let i = 3; i >= 0; i--) {\n    write(encoder, (num >>> (8 * i)) & binary.BITS8)\n  }\n}\n\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint32 = (encoder, pos, num) => {\n  for (let i = 0; i < 4; i++) {\n    set(encoder, pos + i, num & binary.BITS8)\n    num >>>= 8\n  }\n}\n\n/**\n * Write a variable length unsigned integer. Max encodable integer is 2^53.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarUint = (encoder, num) => {\n  while (num > binary.BITS7) {\n    write(encoder, binary.BIT8 | (binary.BITS7 & num))\n    num = math.floor(num / 128) // shift >>> 7\n  }\n  write(encoder, binary.BITS7 & num)\n}\n\n/**\n * Write a variable length integer.\n *\n * We use the 7th bit instead for signaling that this is a negative number.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarInt = (encoder, num) => {\n  const isNegative = math.isNegativeZero(num)\n  if (isNegative) {\n    num = -num\n  }\n  //             |- whether to continue reading         |- whether is negative     |- number\n  write(encoder, (num > binary.BITS6 ? binary.BIT8 : 0) | (isNegative ? binary.BIT7 : 0) | (binary.BITS6 & num))\n  num = math.floor(num / 64) // shift >>> 6\n  // We don't need to consider the case of num === 0 so we can use a different\n  // pattern here than above.\n  while (num > 0) {\n    write(encoder, (num > binary.BITS7 ? binary.BIT8 : 0) | (binary.BITS7 & num))\n    num = math.floor(num / 128) // shift >>> 7\n  }\n}\n\n/**\n * A cache to store strings temporarily\n */\nconst _strBuffer = new Uint8Array(30000)\nconst _maxStrBSize = _strBuffer.length / 3\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringNative = (encoder, str) => {\n  if (str.length < _maxStrBSize) {\n    // We can encode the string into the existing buffer\n    /* c8 ignore next */\n    const written = string.utf8TextEncoder.encodeInto(str, _strBuffer).written || 0\n    writeVarUint(encoder, written)\n    for (let i = 0; i < written; i++) {\n      write(encoder, _strBuffer[i])\n    }\n  } else {\n    writeVarUint8Array(encoder, string.encodeUtf8(str))\n  }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringPolyfill = (encoder, str) => {\n  const encodedString = unescape(encodeURIComponent(str))\n  const len = encodedString.length\n  writeVarUint(encoder, len)\n  for (let i = 0; i < len; i++) {\n    write(encoder, /** @type {number} */ (encodedString.codePointAt(i)))\n  }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\n/* c8 ignore next */\nexport const writeVarString = (string.utf8TextEncoder && /** @type {any} */ (string.utf8TextEncoder).encodeInto) ? _writeVarStringNative : _writeVarStringPolyfill\n\n/**\n * Write a string terminated by a special byte sequence. This is not very performant and is\n * generally discouraged. However, the resulting byte arrays are lexiographically ordered which\n * makes this a nice feature for databases.\n *\n * The string will be encoded using utf8 and then terminated and escaped using writeTerminatingUint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const writeTerminatedString = (encoder, str) =>\n  writeTerminatedUint8Array(encoder, string.encodeUtf8(str))\n\n/**\n * Write a terminating Uint8Array. Note that this is not performant and is generally\n * discouraged. There are few situations when this is needed.\n *\n * We use 0x0 as a terminating character. 0x1 serves as an escape character for 0x0 and 0x1.\n *\n * Example: [0,1,2] is encoded to [1,0,1,1,2,0]. 0x0, and 0x1 needed to be escaped using 0x1. Then\n * the result is terminated using the 0x0 character.\n *\n * This is basically how many systems implement null terminated strings. However, we use an escape\n * character 0x1 to avoid issues and potenial attacks on our database (if this is used as a key\n * encoder for NoSql databases).\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} buf The string that is to be encoded.\n */\nexport const writeTerminatedUint8Array = (encoder, buf) => {\n  for (let i = 0; i < buf.length; i++) {\n    const b = buf[i]\n    if (b === 0 || b === 1) {\n      write(encoder, 1)\n    }\n    write(encoder, buf[i])\n  }\n  write(encoder, 0)\n}\n\n/**\n * Write the content of another Encoder.\n *\n * @TODO: can be improved!\n *        - Note: Should consider that when appending a lot of small Encoders, we should rather clone than referencing the old structure.\n *                Encoders start with a rather big initial buffer.\n *\n * @function\n * @param {Encoder} encoder The enUint8Arr\n * @param {Encoder} append The BinaryEncoder to be written.\n */\nexport const writeBinaryEncoder = (encoder, append) => writeUint8Array(encoder, toUint8Array(append))\n\n/**\n * Append fixed-length Uint8Array to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeUint8Array = (encoder, uint8Array) => {\n  const bufferLen = encoder.cbuf.length\n  const cpos = encoder.cpos\n  const leftCopyLen = math.min(bufferLen - cpos, uint8Array.length)\n  const rightCopyLen = uint8Array.length - leftCopyLen\n  encoder.cbuf.set(uint8Array.subarray(0, leftCopyLen), cpos)\n  encoder.cpos += leftCopyLen\n  if (rightCopyLen > 0) {\n    // Still something to write, write right half..\n    // Append new buffer\n    encoder.bufs.push(encoder.cbuf)\n    // must have at least size of remaining buffer\n    encoder.cbuf = new Uint8Array(math.max(bufferLen * 2, rightCopyLen))\n    // copy array\n    encoder.cbuf.set(uint8Array.subarray(leftCopyLen))\n    encoder.cpos = rightCopyLen\n  }\n}\n\n/**\n * Append an Uint8Array to Encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeVarUint8Array = (encoder, uint8Array) => {\n  writeVarUint(encoder, uint8Array.byteLength)\n  writeUint8Array(encoder, uint8Array)\n}\n\n/**\n * Create an DataView of the next `len` bytes. Use it to write data after\n * calling this function.\n *\n * ```js\n * // write float32 using DataView\n * const dv = writeOnDataView(encoder, 4)\n * dv.setFloat32(0, 1.1)\n * // read float32 using DataView\n * const dv = readFromDataView(encoder, 4)\n * dv.getFloat32(0) // => 1.100000023841858 (leaving it to the reader to find out why this is the correct result)\n * ```\n *\n * @param {Encoder} encoder\n * @param {number} len\n * @return {DataView}\n */\nexport const writeOnDataView = (encoder, len) => {\n  verifyLen(encoder, len)\n  const dview = new DataView(encoder.cbuf.buffer, encoder.cpos, len)\n  encoder.cpos += len\n  return dview\n}\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat32 = (encoder, num) => writeOnDataView(encoder, 4).setFloat32(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat64 = (encoder, num) => writeOnDataView(encoder, 8).setFloat64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigInt64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigInt64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigUint64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigUint64(0, num, false)\n\nconst floatTestBed = new DataView(new ArrayBuffer(4))\n/**\n * Check if a number can be encoded as a 32 bit float.\n *\n * @param {number} num\n * @return {boolean}\n */\nconst isFloat32 = num => {\n  floatTestBed.setFloat32(0, num)\n  return floatTestBed.getFloat32(0) === num\n}\n\n/**\n * Encode data with efficient binary format.\n *\n * Differences to JSON:\n * • Transforms data to a binary format (not to a string)\n * • Encodes undefined, NaN, and ArrayBuffer (these can't be represented in JSON)\n * • Numbers are efficiently encoded either as a variable length integer, as a\n *   32 bit float, as a 64 bit float, or as a 64 bit bigint.\n *\n * Encoding table:\n *\n * | Data Type           | Prefix   | Encoding Method    | Comment |\n * | ------------------- | -------- | ------------------ | ------- |\n * | undefined           | 127      |                    | Functions, symbol, and everything that cannot be identified is encoded as undefined |\n * | null                | 126      |                    | |\n * | integer             | 125      | writeVarInt        | Only encodes 32 bit signed integers |\n * | float32             | 124      | writeFloat32       | |\n * | float64             | 123      | writeFloat64       | |\n * | bigint              | 122      | writeBigInt64      | |\n * | boolean (false)     | 121      |                    | True and false are different data types so we save the following byte |\n * | boolean (true)      | 120      |                    | - 0b01111000 so the last bit determines whether true or false |\n * | string              | 119      | writeVarString     | |\n * | object<string,any>  | 118      | custom             | Writes {length} then {length} key-value pairs |\n * | array<any>          | 117      | custom             | Writes {length} then {length} json values |\n * | Uint8Array          | 116      | writeVarUint8Array | We use Uint8Array for any kind of binary data |\n *\n * Reasons for the decreasing prefix:\n * We need the first bit for extendability (later we may want to encode the\n * prefix with writeVarUint). The remaining 7 bits are divided as follows:\n * [0-30]   the beginning of the data range is used for custom purposes\n *          (defined by the function that uses this library)\n * [31-127] the end of the data range is used for data encoding by\n *          lib0/encoding.js\n *\n * @param {Encoder} encoder\n * @param {undefined|null|number|bigint|boolean|string|Object<string,any>|Array<any>|Uint8Array} data\n */\nexport const writeAny = (encoder, data) => {\n  switch (typeof data) {\n    case 'string':\n      // TYPE 119: STRING\n      write(encoder, 119)\n      writeVarString(encoder, data)\n      break\n    case 'number':\n      if (number.isInteger(data) && math.abs(data) <= binary.BITS31) {\n        // TYPE 125: INTEGER\n        write(encoder, 125)\n        writeVarInt(encoder, data)\n      } else if (isFloat32(data)) {\n        // TYPE 124: FLOAT32\n        write(encoder, 124)\n        writeFloat32(encoder, data)\n      } else {\n        // TYPE 123: FLOAT64\n        write(encoder, 123)\n        writeFloat64(encoder, data)\n      }\n      break\n    case 'bigint':\n      // TYPE 122: BigInt\n      write(encoder, 122)\n      writeBigInt64(encoder, data)\n      break\n    case 'object':\n      if (data === null) {\n        // TYPE 126: null\n        write(encoder, 126)\n      } else if (array.isArray(data)) {\n        // TYPE 117: Array\n        write(encoder, 117)\n        writeVarUint(encoder, data.length)\n        for (let i = 0; i < data.length; i++) {\n          writeAny(encoder, data[i])\n        }\n      } else if (data instanceof Uint8Array) {\n        // TYPE 116: ArrayBuffer\n        write(encoder, 116)\n        writeVarUint8Array(encoder, data)\n      } else {\n        // TYPE 118: Object\n        write(encoder, 118)\n        const keys = Object.keys(data)\n        writeVarUint(encoder, keys.length)\n        for (let i = 0; i < keys.length; i++) {\n          const key = keys[i]\n          writeVarString(encoder, key)\n          writeAny(encoder, data[key])\n        }\n      }\n      break\n    case 'boolean':\n      // TYPE 120/121: boolean (true/false)\n      write(encoder, data ? 120 : 121)\n      break\n    default:\n      // TYPE 127: undefined\n      write(encoder, 127)\n  }\n}\n\n/**\n * Now come a few stateful encoder that have their own classes.\n */\n\n/**\n * Basic Run Length Encoder - a basic compression implementation.\n *\n * Encodes [1,1,1,7] to [1,3,7,1] (3 times 1, 1 time 7). This encoder might do more harm than good if there are a lot of values that are not repeated.\n *\n * It was originally used for image compression. Cool .. article http://csbruce.com/cbm/transactor/pdfs/trans_v7_i06.pdf\n *\n * @note T must not be null!\n *\n * @template T\n */\nexport class RleEncoder extends Encoder {\n  /**\n   * @param {function(Encoder, T):void} writer\n   */\n  constructor (writer) {\n    super()\n    /**\n     * The writer\n     */\n    this.w = writer\n    /**\n     * Current state\n     * @type {T|null}\n     */\n    this.s = null\n    this.count = 0\n  }\n\n  /**\n   * @param {T} v\n   */\n  write (v) {\n    if (this.s === v) {\n      this.count++\n    } else {\n      if (this.count > 0) {\n        // flush counter, unless this is the first value (count = 0)\n        writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n      }\n      this.count = 1\n      // write first value\n      this.w(this, v)\n      this.s = v\n    }\n  }\n}\n\n/**\n * Basic diff decoder using variable length encoding.\n *\n * Encodes the values [3, 1100, 1101, 1050, 0] to [3, 1097, 1, -51, -1050] using writeVarInt.\n */\nexport class IntDiffEncoder extends Encoder {\n  /**\n   * @param {number} start\n   */\n  constructor (start) {\n    super()\n    /**\n     * Current state\n     * @type {number}\n     */\n    this.s = start\n  }\n\n  /**\n   * @param {number} v\n   */\n  write (v) {\n    writeVarInt(this, v - this.s)\n    this.s = v\n  }\n}\n\n/**\n * A combination of IntDiffEncoder and RleEncoder.\n *\n * Basically first writes the IntDiffEncoder and then counts duplicate diffs using RleEncoding.\n *\n * Encodes the values [1,1,1,2,3,4,5,6] as [1,1,0,2,1,5] (RLE([1,0,0,1,1,1,1,1]) ⇒ RleIntDiff[1,1,0,2,1,5])\n */\nexport class RleIntDiffEncoder extends Encoder {\n  /**\n   * @param {number} start\n   */\n  constructor (start) {\n    super()\n    /**\n     * Current state\n     * @type {number}\n     */\n    this.s = start\n    this.count = 0\n  }\n\n  /**\n   * @param {number} v\n   */\n  write (v) {\n    if (this.s === v && this.count > 0) {\n      this.count++\n    } else {\n      if (this.count > 0) {\n        // flush counter, unless this is the first value (count = 0)\n        writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n      }\n      this.count = 1\n      // write first value\n      writeVarInt(this, v - this.s)\n      this.s = v\n    }\n  }\n}\n\n/**\n * @param {UintOptRleEncoder} encoder\n */\nconst flushUintOptRleEncoder = encoder => {\n  if (encoder.count > 0) {\n    // flush counter, unless this is the first value (count = 0)\n    // case 1: just a single value. set sign to positive\n    // case 2: write several values. set sign to negative to indicate that there is a length coming\n    writeVarInt(encoder.encoder, encoder.count === 1 ? encoder.s : -encoder.s)\n    if (encoder.count > 1) {\n      writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n    }\n  }\n}\n\n/**\n * Optimized Rle encoder that does not suffer from the mentioned problem of the basic Rle encoder.\n *\n * Internally uses VarInt encoder to write unsigned integers. If the input occurs multiple times, we write\n * write it as a negative number. The UintOptRleDecoder then understands that it needs to read a count.\n *\n * Encodes [1,2,3,3,3] as [1,2,-3,3] (once 1, once 2, three times 3)\n */\nexport class UintOptRleEncoder {\n  constructor () {\n    this.encoder = new Encoder()\n    /**\n     * @type {number}\n     */\n    this.s = 0\n    this.count = 0\n  }\n\n  /**\n   * @param {number} v\n   */\n  write (v) {\n    if (this.s === v) {\n      this.count++\n    } else {\n      flushUintOptRleEncoder(this)\n      this.count = 1\n      this.s = v\n    }\n  }\n\n  /**\n   * Flush the encoded state and transform this to a Uint8Array.\n   *\n   * Note that this should only be called once.\n   */\n  toUint8Array () {\n    flushUintOptRleEncoder(this)\n    return toUint8Array(this.encoder)\n  }\n}\n\n/**\n * Increasing Uint Optimized RLE Encoder\n *\n * The RLE encoder counts the number of same occurences of the same value.\n * The IncUintOptRle encoder counts if the value increases.\n * I.e. 7, 8, 9, 10 will be encoded as [-7, 4]. 1, 3, 5 will be encoded\n * as [1, 3, 5].\n */\nexport class IncUintOptRleEncoder {\n  constructor () {\n    this.encoder = new Encoder()\n    /**\n     * @type {number}\n     */\n    this.s = 0\n    this.count = 0\n  }\n\n  /**\n   * @param {number} v\n   */\n  write (v) {\n    if (this.s + this.count === v) {\n      this.count++\n    } else {\n      flushUintOptRleEncoder(this)\n      this.count = 1\n      this.s = v\n    }\n  }\n\n  /**\n   * Flush the encoded state and transform this to a Uint8Array.\n   *\n   * Note that this should only be called once.\n   */\n  toUint8Array () {\n    flushUintOptRleEncoder(this)\n    return toUint8Array(this.encoder)\n  }\n}\n\n/**\n * @param {IntDiffOptRleEncoder} encoder\n */\nconst flushIntDiffOptRleEncoder = encoder => {\n  if (encoder.count > 0) {\n    //          31 bit making up the diff | wether to write the counter\n    // const encodedDiff = encoder.diff << 1 | (encoder.count === 1 ? 0 : 1)\n    const encodedDiff = encoder.diff * 2 + (encoder.count === 1 ? 0 : 1)\n    // flush counter, unless this is the first value (count = 0)\n    // case 1: just a single value. set first bit to positive\n    // case 2: write several values. set first bit to negative to indicate that there is a length coming\n    writeVarInt(encoder.encoder, encodedDiff)\n    if (encoder.count > 1) {\n      writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n    }\n  }\n}\n\n/**\n * A combination of the IntDiffEncoder and the UintOptRleEncoder.\n *\n * The count approach is similar to the UintDiffOptRleEncoder, but instead of using the negative bitflag, it encodes\n * in the LSB whether a count is to be read. Therefore this Encoder only supports 31 bit integers!\n *\n * Encodes [1, 2, 3, 2] as [3, 1, 6, -1] (more specifically [(1 << 1) | 1, (3 << 0) | 0, -1])\n *\n * Internally uses variable length encoding. Contrary to normal UintVar encoding, the first byte contains:\n * * 1 bit that denotes whether the next value is a count (LSB)\n * * 1 bit that denotes whether this value is negative (MSB - 1)\n * * 1 bit that denotes whether to continue reading the variable length integer (MSB)\n *\n * Therefore, only five bits remain to encode diff ranges.\n *\n * Use this Encoder only when appropriate. In most cases, this is probably a bad idea.\n */\nexport class IntDiffOptRleEncoder {\n  constructor () {\n    this.encoder = new Encoder()\n    /**\n     * @type {number}\n     */\n    this.s = 0\n    this.count = 0\n    this.diff = 0\n  }\n\n  /**\n   * @param {number} v\n   */\n  write (v) {\n    if (this.diff === v - this.s) {\n      this.s = v\n      this.count++\n    } else {\n      flushIntDiffOptRleEncoder(this)\n      this.count = 1\n      this.diff = v - this.s\n      this.s = v\n    }\n  }\n\n  /**\n   * Flush the encoded state and transform this to a Uint8Array.\n   *\n   * Note that this should only be called once.\n   */\n  toUint8Array () {\n    flushIntDiffOptRleEncoder(this)\n    return toUint8Array(this.encoder)\n  }\n}\n\n/**\n * Optimized String Encoder.\n *\n * Encoding many small strings in a simple Encoder is not very efficient. The function call to decode a string takes some time and creates references that must be eventually deleted.\n * In practice, when decoding several million small strings, the GC will kick in more and more often to collect orphaned string objects (or maybe there is another reason?).\n *\n * This string encoder solves the above problem. All strings are concatenated and written as a single string using a single encoding call.\n *\n * The lengths are encoded using a UintOptRleEncoder.\n */\nexport class StringEncoder {\n  constructor () {\n    /**\n     * @type {Array<string>}\n     */\n    this.sarr = []\n    this.s = ''\n    this.lensE = new UintOptRleEncoder()\n  }\n\n  /**\n   * @param {string} string\n   */\n  write (string) {\n    this.s += string\n    if (this.s.length > 19) {\n      this.sarr.push(this.s)\n      this.s = ''\n    }\n    this.lensE.write(string.length)\n  }\n\n  toUint8Array () {\n    const encoder = new Encoder()\n    this.sarr.push(this.s)\n    this.s = ''\n    writeVarString(encoder, this.sarr.join(''))\n    writeUint8Array(encoder, this.lensE.toUint8Array())\n    return toUint8Array(encoder)\n  }\n}\n","/**\n * Error helpers.\n *\n * @module error\n */\n\n/**\n * @param {string} s\n * @return {Error}\n */\n/* c8 ignore next */\nexport const create = s => new Error(s)\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const methodUnimplemented = () => {\n  throw create('Method unimplemented')\n}\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const unexpectedCase = () => {\n  throw create('Unexpected case')\n}\n","/**\n * Utility module to work with key-value stores.\n *\n * @module map\n */\n\n/**\n * Creates a new Map instance.\n *\n * @function\n * @return {Map<any, any>}\n *\n * @function\n */\nexport const create = () => new Map()\n\n/**\n * Copy a Map object into a fresh Map object.\n *\n * @function\n * @template K,V\n * @param {Map<K,V>} m\n * @return {Map<K,V>}\n */\nexport const copy = m => {\n  const r = create()\n  m.forEach((v, k) => { r.set(k, v) })\n  return r\n}\n\n/**\n * Get map property. Create T if property is undefined and set T on map.\n *\n * ```js\n * const listeners = map.setIfUndefined(events, 'eventName', set.create)\n * listeners.add(listener)\n * ```\n *\n * @function\n * @template {Map<any, any>} MAP\n * @template {MAP extends Map<any,infer V> ? function():V : unknown} CF\n * @param {MAP} map\n * @param {MAP extends Map<infer K,any> ? K : unknown} key\n * @param {CF} createT\n * @return {ReturnType<CF>}\n */\nexport const setIfUndefined = (map, key, createT) => {\n  let set = map.get(key)\n  if (set === undefined) {\n    map.set(key, set = createT())\n  }\n  return set\n}\n\n/**\n * Creates an Array and populates it with the content of all key-value pairs using the `f(value, key)` function.\n *\n * @function\n * @template K\n * @template V\n * @template R\n * @param {Map<K,V>} m\n * @param {function(V,K):R} f\n * @return {Array<R>}\n */\nexport const map = (m, f) => {\n  const res = []\n  for (const [key, value] of m) {\n    res.push(f(value, key))\n  }\n  return res\n}\n\n/**\n * Tests whether any key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @todo should rename to some - similarly to Array.some\n *\n * @function\n * @template K\n * @template V\n * @param {Map<K,V>} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const any = (m, f) => {\n  for (const [key, value] of m) {\n    if (f(value, key)) {\n      return true\n    }\n  }\n  return false\n}\n\n/**\n * Tests whether all key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @function\n * @template K\n * @template V\n * @param {Map<K,V>} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const all = (m, f) => {\n  for (const [key, value] of m) {\n    if (!f(value, key)) {\n      return false\n    }\n  }\n  return true\n}\n","/**\n * Utility functions for working with EcmaScript objects.\n *\n * @module object\n */\n\n/**\n * @return {Object<string,any>} obj\n */\nexport const create = () => Object.create(null)\n\n/**\n * Object.assign\n */\nexport const assign = Object.assign\n\n/**\n * @param {Object<string,any>} obj\n */\nexport const keys = Object.keys\n\n/**\n * @template V\n * @param {{[key:string]: V}} obj\n * @return {Array<V>}\n */\nexport const values = Object.values\n\n/**\n * @template V\n * @param {{[k:string]:V}} obj\n * @param {function(V,string):any} f\n */\nexport const forEach = (obj, f) => {\n  for (const key in obj) {\n    f(obj[key], key)\n  }\n}\n\n/**\n * @todo implement mapToArray & map\n *\n * @template R\n * @param {Object<string,any>} obj\n * @param {function(any,string):R} f\n * @return {Array<R>}\n */\nexport const map = (obj, f) => {\n  const results = []\n  for (const key in obj) {\n    results.push(f(obj[key], key))\n  }\n  return results\n}\n\n/**\n * @deprecated use object.size instead\n * @param {Object<string,any>} obj\n * @return {number}\n */\nexport const length = obj => keys(obj).length\n\n/**\n * @param {Object<string,any>} obj\n * @return {number}\n */\nexport const size = obj => keys(obj).length\n\n/**\n * @template {{ [key:string|number|symbol]: any }} T\n * @param {T} obj\n * @param {(v:T[keyof T],k:keyof T)=>boolean} f\n * @return {boolean}\n */\nexport const some = (obj, f) => {\n  for (const key in obj) {\n    if (f(obj[key], key)) {\n      return true\n    }\n  }\n  return false\n}\n\n/**\n * @param {Object|null|undefined} obj\n */\nexport const isEmpty = obj => {\n  // eslint-disable-next-line no-unreachable-loop\n  for (const _k in obj) {\n    return false\n  }\n  return true\n}\n\n/**\n * @template {{ [key:string|number|symbol]: any }} T\n * @param {T} obj\n * @param {(v:T[keyof T],k:keyof T)=>boolean} f\n * @return {boolean}\n */\nexport const every = (obj, f) => {\n  for (const key in obj) {\n    if (!f(obj[key], key)) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * Calls `Object.prototype.hasOwnProperty`.\n *\n * @param {any} obj\n * @param {string|number|symbol} key\n * @return {boolean}\n */\nexport const hasProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key)\n\n/**\n * @param {Object<string,any>} a\n * @param {Object<string,any>} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a === b || (size(a) === size(b) && every(a, (val, key) => (val !== undefined || hasProperty(b, key)) && b[key] === val))\n\n/**\n * Make an object immutable. This hurts performance and is usually not needed if you perform good\n * coding practices.\n */\nexport const freeze = Object.freeze\n\n/**\n * Make an object and all its children immutable.\n * This *really* hurts performance and is usually not needed if you perform good coding practices.\n *\n * @template {any} T\n * @param {T} o\n * @return {Readonly<T>}\n */\nexport const deepFreeze = (o) => {\n  for (const key in o) {\n    const c = o[key]\n    if (typeof c === 'object' || typeof c === 'function') {\n      deepFreeze(o[key])\n    }\n  }\n  return freeze(o)\n}\n\n/**\n * Get object property. Create T if property is undefined and set T on object.\n *\n * @function\n * @template {object} KV\n * @template {keyof KV} [K=keyof KV]\n * @param {KV} o\n * @param {K} key\n * @param {() => KV[K]} createT\n * @return {KV[K]}\n */\nexport const setIfUndefined = (o, key, createT) => hasProperty(o, key) ? o[key] : (o[key] = createT())\n","/**\n * Common functions and function call helpers.\n *\n * @module function\n */\n\nimport * as array from './array.js'\nimport * as object from './object.js'\nimport * as traits from './traits.js'\n\n/**\n * Calls all functions in `fs` with args. Only throws after all functions were called.\n *\n * @param {Array<function>} fs\n * @param {Array<any>} args\n */\nexport const callAll = (fs, args, i = 0) => {\n  try {\n    for (; i < fs.length; i++) {\n      fs[i](...args)\n    }\n  } finally {\n    if (i < fs.length) {\n      callAll(fs, args, i + 1)\n    }\n  }\n}\n\nexport const nop = () => {}\n\n/**\n * @template T\n * @param {function():T} f\n * @return {T}\n */\nexport const apply = f => f()\n\n/**\n * @template A\n *\n * @param {A} a\n * @return {A}\n */\nexport const id = a => a\n\n/**\n * @template T\n *\n * @param {T} a\n * @param {T} b\n * @return {boolean}\n */\nexport const equalityStrict = (a, b) => a === b\n\n/**\n * @template T\n *\n * @param {Array<T>|object} a\n * @param {Array<T>|object} b\n * @return {boolean}\n */\nexport const equalityFlat = (a, b) => a === b || (a != null && b != null && a.constructor === b.constructor && ((array.isArray(a) && array.equalFlat(a, /** @type {Array<T>} */ (b))) || (typeof a === 'object' && object.equalFlat(a, b))))\n\n/* c8 ignore start */\n\n/**\n * @param {any} a\n * @param {any} b\n * @return {boolean}\n */\nexport const equalityDeep = (a, b) => {\n  if (a === b) {\n    return true\n  }\n  if (a == null || b == null || a.constructor !== b.constructor) {\n    return false\n  }\n  if (a[traits.EqualityTraitSymbol] != null) {\n    return a[traits.EqualityTraitSymbol](b)\n  }\n  switch (a.constructor) {\n    case ArrayBuffer:\n      a = new Uint8Array(a)\n      b = new Uint8Array(b)\n    // eslint-disable-next-line no-fallthrough\n    case Uint8Array: {\n      if (a.byteLength !== b.byteLength) {\n        return false\n      }\n      for (let i = 0; i < a.length; i++) {\n        if (a[i] !== b[i]) {\n          return false\n        }\n      }\n      break\n    }\n    case Set: {\n      if (a.size !== b.size) {\n        return false\n      }\n      for (const value of a) {\n        if (!b.has(value)) {\n          return false\n        }\n      }\n      break\n    }\n    case Map: {\n      if (a.size !== b.size) {\n        return false\n      }\n      for (const key of a.keys()) {\n        if (!b.has(key) || !equalityDeep(a.get(key), b.get(key))) {\n          return false\n        }\n      }\n      break\n    }\n    case Object:\n      if (object.length(a) !== object.length(b)) {\n        return false\n      }\n      for (const key in a) {\n        if (!object.hasProperty(a, key) || !equalityDeep(a[key], b[key])) {\n          return false\n        }\n      }\n      break\n    case Array:\n      if (a.length !== b.length) {\n        return false\n      }\n      for (let i = 0; i < a.length; i++) {\n        if (!equalityDeep(a[i], b[i])) {\n          return false\n        }\n      }\n      break\n    default:\n      return false\n  }\n  return true\n}\n\n/**\n * @template V\n * @template {V} OPTS\n *\n * @param {V} value\n * @param {Array<OPTS>} options\n */\n// @ts-ignore\nexport const isOneOf = (value, options) => options.includes(value)\n/* c8 ignore stop */\n\nexport const isArray = array.isArray\n\n/**\n * @param {any} s\n * @return {s is String}\n */\nexport const isString = (s) => s && s.constructor === String\n\n/**\n * @param {any} n\n * @return {n is Number}\n */\nexport const isNumber = n => n != null && n.constructor === Number\n\n/**\n * @template {abstract new (...args: any) => any} TYPE\n * @param {any} n\n * @param {TYPE} T\n * @return {n is InstanceType<TYPE>}\n */\nexport const is = (n, T) => n && n.constructor === T\n\n/**\n * @template {abstract new (...args: any) => any} TYPE\n * @param {TYPE} T\n */\nexport const isTemplate = (T) =>\n  /**\n   * @param {any} n\n   * @return {n is InstanceType<TYPE>}\n   **/\n  n => n && n.constructor === T\n","/**\n * Mutual exclude for JavaScript.\n *\n * @module mutex\n */\n\n/**\n * @callback mutex\n * @param {function():void} cb Only executed when this mutex is not in the current stack\n * @param {function():void} [elseCb] Executed when this mutex is in the current stack\n */\n\n/**\n * Creates a mutual exclude function with the following property:\n *\n * ```js\n * const mutex = createMutex()\n * mutex(() => {\n *   // This function is immediately executed\n *   mutex(() => {\n *     // This function is not executed, as the mutex is already active.\n *   })\n * })\n * ```\n *\n * @return {mutex} A mutual exclude function\n * @public\n */\nexport const createMutex = () => {\n  let token = true\n  return (f, g) => {\n    if (token) {\n      token = false\n      try {\n        f()\n      } finally {\n        token = true\n      }\n    } else if (g !== undefined) {\n      g()\n    }\n  }\n}\n","/**\n * Efficient diffs.\n *\n * @module diff\n */\n\nimport { equalityStrict } from './function.js'\n\n/**\n * A SimpleDiff describes a change on a String.\n *\n * ```js\n * console.log(a) // the old value\n * console.log(b) // the updated value\n * // Apply changes of diff (pseudocode)\n * a.remove(diff.index, diff.remove) // Remove `diff.remove` characters\n * a.insert(diff.index, diff.insert) // Insert `diff.insert`\n * a === b // values match\n * ```\n *\n * @template {string} T\n * @typedef {Object} SimpleDiff\n * @property {Number} index The index where changes were applied\n * @property {Number} remove The number of characters to delete starting\n *                                  at `index`.\n * @property {T} insert The new text to insert at `index` after applying\n */\n\nconst highSurrogateRegex = /[\\uD800-\\uDBFF]/\nconst lowSurrogateRegex = /[\\uDC00-\\uDFFF]/\n\n/**\n * Create a diff between two strings. This diff implementation is highly\n * efficient, but not very sophisticated.\n *\n * @function\n *\n * @param {string} a The old version of the string\n * @param {string} b The updated version of the string\n * @return {SimpleDiff<string>} The diff description.\n */\nexport const simpleDiffString = (a, b) => {\n  let left = 0 // number of same characters counting from left\n  let right = 0 // number of same characters counting from right\n  while (left < a.length && left < b.length && a[left] === b[left]) {\n    left++\n  }\n  // If the last same character is a high surrogate, we need to rollback to the previous character\n  if (left > 0 && highSurrogateRegex.test(a[left - 1])) left--\n  while (right + left < a.length && right + left < b.length && a[a.length - right - 1] === b[b.length - right - 1]) {\n    right++\n  }\n  // If the last same character is a low surrogate, we need to rollback to the previous character\n  if (right > 0 && lowSurrogateRegex.test(a[a.length - right])) right--\n  return {\n    index: left,\n    remove: a.length - left - right,\n    insert: b.slice(left, b.length - right)\n  }\n}\n\n/**\n * @todo Remove in favor of simpleDiffString\n * @deprecated\n */\nexport const simpleDiff = simpleDiffString\n\n/**\n * Create a diff between two arrays. This diff implementation is highly\n * efficient, but not very sophisticated.\n *\n * Note: This is basically the same function as above. Another function was created so that the runtime\n * can better optimize these function calls.\n *\n * @function\n * @template T\n *\n * @param {Array<T>} a The old version of the array\n * @param {Array<T>} b The updated version of the array\n * @param {function(T, T):boolean} [compare]\n * @return {SimpleDiff<Array<T>>} The diff description.\n */\nexport const simpleDiffArray = (a, b, compare = equalityStrict) => {\n  let left = 0 // number of same characters counting from left\n  let right = 0 // number of same characters counting from right\n  while (left < a.length && left < b.length && compare(a[left], b[left])) {\n    left++\n  }\n  while (right + left < a.length && right + left < b.length && compare(a[a.length - right - 1], b[b.length - right - 1])) {\n    right++\n  }\n  return {\n    index: left,\n    remove: a.length - left - right,\n    insert: b.slice(left, b.length - right)\n  }\n}\n\n/**\n * Diff text and try to diff at the current cursor position.\n *\n * @param {string} a\n * @param {string} b\n * @param {number} cursor This should refer to the current left cursor-range position\n */\nexport const simpleDiffStringWithCursor = (a, b, cursor) => {\n  let left = 0 // number of same characters counting from left\n  let right = 0 // number of same characters counting from right\n  // Iterate left to the right until we find a changed character\n  // First iteration considers the current cursor position\n  while (\n    left < a.length &&\n    left < b.length &&\n    a[left] === b[left] &&\n    left < cursor\n  ) {\n    left++\n  }\n  // If the last same character is a high surrogate, we need to rollback to the previous character\n  if (left > 0 && highSurrogateRegex.test(a[left - 1])) left--\n  // Iterate right to the left until we find a changed character\n  while (\n    right + left < a.length &&\n    right + left < b.length &&\n    a[a.length - right - 1] === b[b.length - right - 1]\n  ) {\n    right++\n  }\n  // If the last same character is a low surrogate, we need to rollback to the previous character\n  if (right > 0 && lowSurrogateRegex.test(a[a.length - right])) right--\n  // Try to iterate left further to the right without caring about the current cursor position\n  while (\n    right + left < a.length &&\n    right + left < b.length &&\n    a[left] === b[left]\n  ) {\n    left++\n  }\n  if (left > 0 && highSurrogateRegex.test(a[left - 1])) left--\n  return {\n    index: left,\n    remove: a.length - left - right,\n    insert: b.slice(left, b.length - right)\n  }\n}\n","/* eslint-env browser */\n\nexport const subtle = crypto.subtle\nexport const getRandomValues = crypto.getRandomValues.bind(crypto)\n","/**\n * Isomorphic module for true random numbers / buffers / uuids.\n *\n * Attention: falls back to Math.random if the browser does not support crypto.\n *\n * @module random\n */\n\nimport * as math from './math.js'\nimport * as binary from './binary.js'\nimport { getRandomValues } from 'lib0/webcrypto'\n\nexport const rand = Math.random\n\nexport const uint32 = () => getRandomValues(new Uint32Array(1))[0]\n\nexport const uint53 = () => {\n  const arr = getRandomValues(new Uint32Array(8))\n  return (arr[0] & binary.BITS21) * (binary.BITS32 + 1) + (arr[1] >>> 0)\n}\n\n/**\n * @template T\n * @param {Array<T>} arr\n * @return {T}\n */\nexport const oneOf = arr => arr[math.floor(rand() * arr.length)]\n\n// @ts-ignore\nconst uuidv4Template = [1e7] + -1e3 + -4e3 + -8e3 + -1e11\n\n/**\n * @return {string}\n */\nexport const uuidv4 = () => uuidv4Template.replace(/[018]/g, /** @param {number} c */ c =>\n  (c ^ uint32() & 15 >> c / 4).toString(16)\n)\n","/**\n * Often used conditions.\n *\n * @module conditions\n */\n\n/**\n * @template T\n * @param {T|null|undefined} v\n * @return {T|null}\n */\n/* c8 ignore next */\nexport const undefinedToNull = v => v === undefined ? null : v\n","/* eslint-env browser */\n\n/**\n * Isomorphic variable storage.\n *\n * Uses LocalStorage in the browser and falls back to in-memory storage.\n *\n * @module storage\n */\n\n/* c8 ignore start */\nclass VarStoragePolyfill {\n  constructor () {\n    this.map = new Map()\n  }\n\n  /**\n   * @param {string} key\n   * @param {any} newValue\n   */\n  setItem (key, newValue) {\n    this.map.set(key, newValue)\n  }\n\n  /**\n   * @param {string} key\n   */\n  getItem (key) {\n    return this.map.get(key)\n  }\n}\n/* c8 ignore stop */\n\n/**\n * @type {any}\n */\nlet _localStorage = new VarStoragePolyfill()\nlet usePolyfill = true\n\n/* c8 ignore start */\ntry {\n  // if the same-origin rule is violated, accessing localStorage might thrown an error\n  if (typeof localStorage !== 'undefined' && localStorage) {\n    _localStorage = localStorage\n    usePolyfill = false\n  }\n} catch (e) { }\n/* c8 ignore stop */\n\n/**\n * This is basically localStorage in browser, or a polyfill in nodejs\n */\n/* c8 ignore next */\nexport const varStorage = _localStorage\n\n/**\n * A polyfill for `addEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const onChange = eventHandler => usePolyfill || addEventListener('storage', /** @type {any} */ (eventHandler))\n\n/**\n * A polyfill for `removeEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const offChange = eventHandler => usePolyfill || removeEventListener('storage', /** @type {any} */ (eventHandler))\n","/**\n * Isomorphic module to work access the environment (query params, env variables).\n *\n * @module environment\n */\n\nimport * as map from './map.js'\nimport * as string from './string.js'\nimport * as conditions from './conditions.js'\nimport * as storage from './storage.js'\nimport * as f from './function.js'\n\n/* c8 ignore next 2 */\n// @ts-ignore\nexport const isNode = typeof process !== 'undefined' && process.release && /node|io\\.js/.test(process.release.name) && Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n\n/* c8 ignore next */\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && !isNode\n/* c8 ignore next 3 */\nexport const isMac = typeof navigator !== 'undefined'\n  ? /Mac/.test(navigator.platform)\n  : false\n\n/**\n * @type {Map<string,string>}\n */\nlet params\nconst args = []\n\n/* c8 ignore start */\nconst computeParams = () => {\n  if (params === undefined) {\n    if (isNode) {\n      params = map.create()\n      const pargs = process.argv\n      let currParamName = null\n      for (let i = 0; i < pargs.length; i++) {\n        const parg = pargs[i]\n        if (parg[0] === '-') {\n          if (currParamName !== null) {\n            params.set(currParamName, '')\n          }\n          currParamName = parg\n        } else {\n          if (currParamName !== null) {\n            params.set(currParamName, parg)\n            currParamName = null\n          } else {\n            args.push(parg)\n          }\n        }\n      }\n      if (currParamName !== null) {\n        params.set(currParamName, '')\n      }\n      // in ReactNative for example this would not be true (unless connected to the Remote Debugger)\n    } else if (typeof location === 'object') {\n      params = map.create(); // eslint-disable-next-line no-undef\n      (location.search || '?').slice(1).split('&').forEach((kv) => {\n        if (kv.length !== 0) {\n          const [key, value] = kv.split('=')\n          params.set(`--${string.fromCamelCase(key, '-')}`, value)\n          params.set(`-${string.fromCamelCase(key, '-')}`, value)\n        }\n      })\n    } else {\n      params = map.create()\n    }\n  }\n  return params\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next */\nexport const hasParam = (name) => computeParams().has(name)\n\n/**\n * @param {string} name\n * @param {string} defaultVal\n * @return {string}\n */\n/* c8 ignore next 2 */\nexport const getParam = (name, defaultVal) =>\n  computeParams().get(name) || defaultVal\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 4 */\nexport const getVariable = (name) =>\n  isNode\n    ? conditions.undefinedToNull(process.env[name.toUpperCase().replaceAll('-', '_')])\n    : conditions.undefinedToNull(storage.varStorage.getItem(name))\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 2 */\nexport const getConf = (name) =>\n  computeParams().get('--' + name) || getVariable(name)\n\n/**\n * @param {string} name\n * @return {string}\n */\n/* c8 ignore next 5 */\nexport const ensureConf = (name) => {\n  const c = getConf(name)\n  if (c == null) throw new Error(`Expected configuration \"${name.toUpperCase().replaceAll('-', '_')}\"`)\n  return c\n}\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next 2 */\nexport const hasConf = (name) =>\n  hasParam('--' + name) || getVariable(name) !== null\n\n/* c8 ignore next */\nexport const production = hasConf('production')\n\n/* c8 ignore next 2 */\nconst forceColor = isNode &&\n  f.isOneOf(process.env.FORCE_COLOR, ['true', '1', '2'])\n\n/* c8 ignore start */\n/**\n * Color is enabled by default if the terminal supports it.\n *\n * Explicitly enable color using `--color` parameter\n * Disable color using `--no-color` parameter or using `NO_COLOR=1` environment variable.\n * `FORCE_COLOR=1` enables color and takes precedence over all.\n */\nexport const supportsColor = forceColor || (\n  !hasParam('--no-colors') && // @todo deprecate --no-colors\n  !hasConf('no-color') &&\n  (!isNode || process.stdout.isTTY) && (\n    !isNode ||\n    hasParam('--color') ||\n    getVariable('COLORTERM') !== null ||\n    (getVariable('TERM') || '').includes('color')\n  )\n)\n/* c8 ignore stop */\n","/* eslint-env browser */\n\n/**\n * Utility module to work with the DOM.\n *\n * @module dom\n */\n\nimport * as pair from './pair.js'\nimport * as map from './map.js'\n\n/* c8 ignore start */\n/**\n * @type {Document}\n */\nexport const doc = /** @type {Document} */ (typeof document !== 'undefined' ? document : {})\n\n/**\n * @param {string} name\n * @return {HTMLElement}\n */\nexport const createElement = name => doc.createElement(name)\n\n/**\n * @return {DocumentFragment}\n */\nexport const createDocumentFragment = () => doc.createDocumentFragment()\n\n/**\n * @param {string} text\n * @return {Text}\n */\nexport const createTextNode = text => doc.createTextNode(text)\n\nexport const domParser = /** @type {DOMParser} */ (typeof DOMParser !== 'undefined' ? new DOMParser() : null)\n\n/**\n * @param {HTMLElement} el\n * @param {string} name\n * @param {Object} opts\n */\nexport const emitCustomEvent = (el, name, opts) => el.dispatchEvent(new CustomEvent(name, opts))\n\n/**\n * @param {Element} el\n * @param {Array<pair.Pair<string,string|boolean>>} attrs Array of key-value pairs\n * @return {Element}\n */\nexport const setAttributes = (el, attrs) => {\n  pair.forEach(attrs, (key, value) => {\n    if (value === false) {\n      el.removeAttribute(key)\n    } else if (value === true) {\n      el.setAttribute(key, '')\n    } else {\n      // @ts-ignore\n      el.setAttribute(key, value)\n    }\n  })\n  return el\n}\n\n/**\n * @param {Element} el\n * @param {Map<string, string>} attrs Array of key-value pairs\n * @return {Element}\n */\nexport const setAttributesMap = (el, attrs) => {\n  attrs.forEach((value, key) => { el.setAttribute(key, value) })\n  return el\n}\n\n/**\n * @param {Array<Node>|HTMLCollection} children\n * @return {DocumentFragment}\n */\nexport const fragment = children => {\n  const fragment = createDocumentFragment()\n  for (let i = 0; i < children.length; i++) {\n    appendChild(fragment, children[i])\n  }\n  return fragment\n}\n\n/**\n * @param {Element} parent\n * @param {Array<Node>} nodes\n * @return {Element}\n */\nexport const append = (parent, nodes) => {\n  appendChild(parent, fragment(nodes))\n  return parent\n}\n\n/**\n * @param {HTMLElement} el\n */\nexport const remove = el => el.remove()\n\n/**\n * @param {EventTarget} el\n * @param {string} name\n * @param {EventListener} f\n */\nexport const addEventListener = (el, name, f) => el.addEventListener(name, f)\n\n/**\n * @param {EventTarget} el\n * @param {string} name\n * @param {EventListener} f\n */\nexport const removeEventListener = (el, name, f) => el.removeEventListener(name, f)\n\n/**\n * @param {Node} node\n * @param {Array<pair.Pair<string,EventListener>>} listeners\n * @return {Node}\n */\nexport const addEventListeners = (node, listeners) => {\n  pair.forEach(listeners, (name, f) => addEventListener(node, name, f))\n  return node\n}\n\n/**\n * @param {Node} node\n * @param {Array<pair.Pair<string,EventListener>>} listeners\n * @return {Node}\n */\nexport const removeEventListeners = (node, listeners) => {\n  pair.forEach(listeners, (name, f) => removeEventListener(node, name, f))\n  return node\n}\n\n/**\n * @param {string} name\n * @param {Array<pair.Pair<string,string>|pair.Pair<string,boolean>>} attrs Array of key-value pairs\n * @param {Array<Node>} children\n * @return {Element}\n */\nexport const element = (name, attrs = [], children = []) =>\n  append(setAttributes(createElement(name), attrs), children)\n\n/**\n * @param {number} width\n * @param {number} height\n */\nexport const canvas = (width, height) => {\n  const c = /** @type {HTMLCanvasElement} */ (createElement('canvas'))\n  c.height = height\n  c.width = width\n  return c\n}\n\n/**\n * @param {string} t\n * @return {Text}\n */\nexport const text = createTextNode\n\n/**\n * @param {pair.Pair<string,string>} pair\n */\nexport const pairToStyleString = pair => `${pair.left}:${pair.right};`\n\n/**\n * @param {Array<pair.Pair<string,string>>} pairs\n * @return {string}\n */\nexport const pairsToStyleString = pairs => pairs.map(pairToStyleString).join('')\n\n/**\n * @param {Map<string,string>} m\n * @return {string}\n */\nexport const mapToStyleString = m => map.map(m, (value, key) => `${key}:${value};`).join('')\n\n/**\n * @todo should always query on a dom element\n *\n * @param {HTMLElement|ShadowRoot} el\n * @param {string} query\n * @return {HTMLElement | null}\n */\nexport const querySelector = (el, query) => el.querySelector(query)\n\n/**\n * @param {HTMLElement|ShadowRoot} el\n * @param {string} query\n * @return {NodeListOf<HTMLElement>}\n */\nexport const querySelectorAll = (el, query) => el.querySelectorAll(query)\n\n/**\n * @param {string} id\n * @return {HTMLElement}\n */\nexport const getElementById = id => /** @type {HTMLElement} */ (doc.getElementById(id))\n\n/**\n * @param {string} html\n * @return {HTMLElement}\n */\nconst _parse = html => domParser.parseFromString(`<html><body>${html}</body></html>`, 'text/html').body\n\n/**\n * @param {string} html\n * @return {DocumentFragment}\n */\nexport const parseFragment = html => fragment(/** @type {any} */ (_parse(html).childNodes))\n\n/**\n * @param {string} html\n * @return {HTMLElement}\n */\nexport const parseElement = html => /** @type HTMLElement */ (_parse(html).firstElementChild)\n\n/**\n * @param {HTMLElement} oldEl\n * @param {HTMLElement|DocumentFragment} newEl\n */\nexport const replaceWith = (oldEl, newEl) => oldEl.replaceWith(newEl)\n\n/**\n * @param {HTMLElement} parent\n * @param {HTMLElement} el\n * @param {Node|null} ref\n * @return {HTMLElement}\n */\nexport const insertBefore = (parent, el, ref) => parent.insertBefore(el, ref)\n\n/**\n * @param {Node} parent\n * @param {Node} child\n * @return {Node}\n */\nexport const appendChild = (parent, child) => parent.appendChild(child)\n\nexport const ELEMENT_NODE = doc.ELEMENT_NODE\nexport const TEXT_NODE = doc.TEXT_NODE\nexport const CDATA_SECTION_NODE = doc.CDATA_SECTION_NODE\nexport const COMMENT_NODE = doc.COMMENT_NODE\nexport const DOCUMENT_NODE = doc.DOCUMENT_NODE\nexport const DOCUMENT_TYPE_NODE = doc.DOCUMENT_TYPE_NODE\nexport const DOCUMENT_FRAGMENT_NODE = doc.DOCUMENT_FRAGMENT_NODE\n\n/**\n * @param {any} node\n * @param {number} type\n */\nexport const checkNodeType = (node, type) => node.nodeType === type\n\n/**\n * @param {Node} parent\n * @param {HTMLElement} child\n */\nexport const isParentOf = (parent, child) => {\n  let p = child.parentNode\n  while (p && p !== parent) {\n    p = p.parentNode\n  }\n  return p === parent\n}\n/* c8 ignore stop */\n","/* global requestIdleCallback, requestAnimationFrame, cancelIdleCallback, cancelAnimationFrame */\n\nimport * as time from './time.js'\n\n/**\n * Utility module to work with EcmaScript's event loop.\n *\n * @module eventloop\n */\n\n/**\n * @type {Array<function>}\n */\nlet queue = []\n\nconst _runQueue = () => {\n  for (let i = 0; i < queue.length; i++) {\n    queue[i]()\n  }\n  queue = []\n}\n\n/**\n * @param {function():void} f\n */\nexport const enqueue = f => {\n  queue.push(f)\n  if (queue.length === 1) {\n    setTimeout(_runQueue, 0)\n  }\n}\n\n/**\n * @typedef {Object} TimeoutObject\n * @property {function} TimeoutObject.destroy\n */\n\n/**\n * @param {function(number):void} clearFunction\n */\nconst createTimeoutClass = clearFunction => class TT {\n  /**\n   * @param {number} timeoutId\n   */\n  constructor (timeoutId) {\n    this._ = timeoutId\n  }\n\n  destroy () {\n    clearFunction(this._)\n  }\n}\n\nconst Timeout = createTimeoutClass(clearTimeout)\n\n/**\n * @param {number} timeout\n * @param {function} callback\n * @return {TimeoutObject}\n */\nexport const timeout = (timeout, callback) => new Timeout(setTimeout(callback, timeout))\n\nconst Interval = createTimeoutClass(clearInterval)\n\n/**\n * @param {number} timeout\n * @param {function} callback\n * @return {TimeoutObject}\n */\nexport const interval = (timeout, callback) => new Interval(setInterval(callback, timeout))\n\n/* c8 ignore next */\nexport const Animation = createTimeoutClass(arg => typeof requestAnimationFrame !== 'undefined' && cancelAnimationFrame(arg))\n\n/**\n * @param {function(number):void} cb\n * @return {TimeoutObject}\n */\n/* c8 ignore next */\nexport const animationFrame = cb => typeof requestAnimationFrame === 'undefined' ? timeout(0, cb) : new Animation(requestAnimationFrame(cb))\n\n/* c8 ignore next */\n// @ts-ignore\nconst Idle = createTimeoutClass(arg => typeof cancelIdleCallback !== 'undefined' && cancelIdleCallback(arg))\n\n/**\n * Note: this is experimental and is probably only useful in browsers.\n *\n * @param {function} cb\n * @return {TimeoutObject}\n */\n/* c8 ignore next 2 */\n// @ts-ignore\nexport const idleCallback = cb => typeof requestIdleCallback !== 'undefined' ? new Idle(requestIdleCallback(cb)) : timeout(1000, cb)\n\n/**\n * @param {number} timeout Timeout of the debounce action\n * @param {number} triggerAfter Optional. Trigger callback after a certain amount of time\n *                              without waiting for debounce.\n */\nexport const createDebouncer = (timeout, triggerAfter = -1) => {\n  let timer = -1\n  /**\n   * @type {number?}\n    */\n  let lastCall = null\n  /**\n   * @param {((...args: any)=>void)?} cb function to trigger after debounce. If null, it will reset the\n   *                         debounce.\n   */\n  return cb => {\n    clearTimeout(timer)\n    if (cb) {\n      if (triggerAfter >= 0) {\n        const now = time.getUnixTime()\n        if (lastCall === null) lastCall = now\n        if (now - lastCall > triggerAfter) {\n          lastCall = null\n          timer = /** @type {any} */ (setTimeout(cb, 0))\n          return\n        }\n      }\n      timer = /** @type {any} */ (setTimeout(() => { lastCall = null; cb() }, timeout))\n    } else {\n      lastCall = null\n    }\n  }\n}\n","/**\n * @module sha256\n * Spec: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\n * Resources:\n * - https://web.archive.org/web/20150315061807/http://csrc.nist.gov/groups/STM/cavp/documents/shs/sha256-384-512.pdf\n */\n\nimport * as binary from '../binary.js'\n\n/**\n * @param {number} w - a 32bit uint\n * @param {number} shift\n */\nconst rotr = (w, shift) => (w >>> shift) | (w << (32 - shift))\n\n/**\n * Helper for SHA-224 & SHA-256. See 4.1.2.\n * @param {number} x\n */\nconst sum0to256 = x => rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22)\n\n/**\n * Helper for SHA-224 & SHA-256. See 4.1.2.\n * @param {number} x\n */\nconst sum1to256 = x => rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25)\n\n/**\n * Helper for SHA-224 & SHA-256. See 4.1.2.\n * @param {number} x\n */\nconst sigma0to256 = x => rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3\n\n/**\n * Helper for SHA-224 & SHA-256. See 4.1.2.\n * @param {number} x\n */\nconst sigma1to256 = x => rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10\n\n// @todo don't init these variables globally\n\n/**\n * See 4.2.2: Constant for sha256 & sha224\n * These words represent the first thirty-two bits of the fractional parts of\n * the cube roots of the first sixty-four prime numbers. In hex, these constant words are (from left to\n * right)\n */\nconst K = new Uint32Array([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n])\n\n/**\n * See 5.3.3. Initial hash value.\n *\n * These words were obtained by taking the first thirty-two bits of the fractional parts of the\n * square roots of the first eight prime numbers.\n *\n * @todo shouldn't be a global variable\n */\nconst HINIT = new Uint32Array([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n])\n\n// time to beat: (large value < 4.35s)\n\nclass Hasher {\n  constructor () {\n    const buf = new ArrayBuffer(64 + 64 * 4)\n    // Init working variables using a single arraybuffer\n    this._H = new Uint32Array(buf, 0, 8)\n    this._H.set(HINIT)\n    // \"Message schedule\" - a working variable\n    this._W = new Uint32Array(buf, 64, 64)\n  }\n\n  _updateHash () {\n    const H = this._H\n    const W = this._W\n    for (let t = 16; t < 64; t++) {\n      W[t] = sigma1to256(W[t - 2]) + W[t - 7] + sigma0to256(W[t - 15]) + W[t - 16]\n    }\n    let a = H[0]\n    let b = H[1]\n    let c = H[2]\n    let d = H[3]\n    let e = H[4]\n    let f = H[5]\n    let g = H[6]\n    let h = H[7]\n    for (let tt = 0, T1, T2; tt < 64; tt++) {\n      T1 = (h + sum1to256(e) + ((e & f) ^ (~e & g)) + K[tt] + W[tt]) >>> 0\n      T2 = (sum0to256(a) + ((a & b) ^ (a & c) ^ (b & c))) >>> 0\n      h = g\n      g = f\n      f = e\n      e = (d + T1) >>> 0\n      d = c\n      c = b\n      b = a\n      a = (T1 + T2) >>> 0\n    }\n    H[0] += a\n    H[1] += b\n    H[2] += c\n    H[3] += d\n    H[4] += e\n    H[5] += f\n    H[6] += g\n    H[7] += h\n  }\n\n  /**\n   * Returns a 32-byte hash.\n   *\n   * @param {Uint8Array} data\n   */\n  digest (data) {\n    let i = 0\n    for (; i + 56 <= data.length;) {\n      // write data in big endianess\n      let j = 0\n      for (; j < 16 && i + 3 < data.length; j++) {\n        this._W[j] = data[i++] << 24 | data[i++] << 16 | data[i++] << 8 | data[i++]\n      }\n      if (i % 64 !== 0) { // there is still room to write partial content and the ending bit.\n        this._W.fill(0, j, 16)\n        while (i < data.length) {\n          this._W[j] |= data[i] << ((3 - (i % 4)) * 8)\n          i++\n        }\n        this._W[j] |= binary.BIT8 << ((3 - (i % 4)) * 8)\n      }\n      this._updateHash()\n    }\n    // same check as earlier - the ending bit has been written\n    const isPaddedWith1 = i % 64 !== 0\n    this._W.fill(0, 0, 16)\n    let j = 0\n    for (; i < data.length; j++) {\n      for (let ci = 3; ci >= 0 && i < data.length; ci--) {\n        this._W[j] |= data[i++] << (ci * 8)\n      }\n    }\n    // Write padding of the message. See 5.1.2.\n    if (!isPaddedWith1) {\n      this._W[j - (i % 4 === 0 ? 0 : 1)] |= binary.BIT8 << ((3 - (i % 4)) * 8)\n    }\n    // write length of message (size in bits) as 64 bit uint\n    // @todo test that this works correctly\n    this._W[14] = data.byteLength / binary.BIT30 // same as data.byteLength >>> 30 - but works on floats\n    this._W[15] = data.byteLength * 8\n    this._updateHash()\n    // correct H endianness to use big endiannes and return a Uint8Array\n    const dv = new Uint8Array(32)\n    for (let i = 0; i < this._H.length; i++) {\n      for (let ci = 0; ci < 4; ci++) {\n        dv[i * 4 + ci] = this._H[i] >>> (3 - ci) * 8\n      }\n    }\n    return dv\n  }\n}\n\n/**\n * Returns a 32-byte hash.\n *\n * @param {Uint8Array} data\n */\nexport const digest = data => new Hasher().digest(data)\n","/**\n * Utility functions to work with buffers (Uint8Array).\n *\n * @module buffer\n */\n\nimport * as string from './string.js'\nimport * as env from './environment.js'\nimport * as array from './array.js'\nimport * as math from './math.js'\nimport * as encoding from './encoding.js'\nimport * as decoding from './decoding.js'\n\n/**\n * @param {number} len\n */\nexport const createUint8ArrayFromLen = len => new Uint8Array(len)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n * @param {number} byteOffset\n * @param {number} length\n */\nexport const createUint8ArrayViewFromArrayBuffer = (buffer, byteOffset, length) => new Uint8Array(buffer, byteOffset, length)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n */\nexport const createUint8ArrayFromArrayBuffer = buffer => new Uint8Array(buffer)\n\n/* c8 ignore start */\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Browser = bytes => {\n  let s = ''\n  for (let i = 0; i < bytes.byteLength; i++) {\n    s += string.fromCharCode(bytes[i])\n  }\n  // eslint-disable-next-line no-undef\n  return btoa(s)\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Node = bytes => Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString('base64')\n\n/* c8 ignore start */\n/**\n * @param {string} s\n * @return {Uint8Array}\n */\nconst fromBase64Browser = s => {\n  // eslint-disable-next-line no-undef\n  const a = atob(s)\n  const bytes = createUint8ArrayFromLen(a.length)\n  for (let i = 0; i < a.length; i++) {\n    bytes[i] = a.charCodeAt(i)\n  }\n  return bytes\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} s\n */\nconst fromBase64Node = s => {\n  const buf = Buffer.from(s, 'base64')\n  return createUint8ArrayViewFromArrayBuffer(buf.buffer, buf.byteOffset, buf.byteLength)\n}\n\n/* c8 ignore next */\nexport const toBase64 = env.isBrowser ? toBase64Browser : toBase64Node\n\n/* c8 ignore next */\nexport const fromBase64 = env.isBrowser ? fromBase64Browser : fromBase64Node\n\n/**\n * Implements base64url - see https://datatracker.ietf.org/doc/html/rfc4648#section-5\n * @param {Uint8Array} buf\n */\nexport const toBase64UrlEncoded = buf => toBase64(buf).replaceAll('+', '-').replaceAll('/', '_').replaceAll('=', '')\n\n/**\n * @param {string} base64\n */\nexport const fromBase64UrlEncoded = base64 => fromBase64(base64.replaceAll('-', '+').replaceAll('_', '/'))\n\n/**\n * Base64 is always a more efficient choice. This exists for utility purposes only.\n *\n * @param {Uint8Array} buf\n */\nexport const toHexString = buf => array.map(buf, b => b.toString(16).padStart(2, '0')).join('')\n\n/**\n * Note: This function expects that the hex doesn't start with 0x..\n *\n * @param {string} hex\n */\nexport const fromHexString = hex => {\n  const hlen = hex.length\n  const buf = new Uint8Array(math.ceil(hlen / 2))\n  for (let i = 0; i < hlen; i += 2) {\n    buf[buf.length - i / 2 - 1] = Number.parseInt(hex.slice(hlen - i - 2, hlen - i), 16)\n  }\n  return buf\n}\n\n/**\n * Copy the content of an Uint8Array view to a new ArrayBuffer.\n *\n * @param {Uint8Array} uint8Array\n * @return {Uint8Array}\n */\nexport const copyUint8Array = uint8Array => {\n  const newBuf = createUint8ArrayFromLen(uint8Array.byteLength)\n  newBuf.set(uint8Array)\n  return newBuf\n}\n\n/**\n * Encode anything as a UInt8Array. It's a pun on typescripts's `any` type.\n * See encoding.writeAny for more information.\n *\n * @param {any} data\n * @return {Uint8Array}\n */\nexport const encodeAny = data =>\n  encoding.encode(encoder => encoding.writeAny(encoder, data))\n\n/**\n * Decode an any-encoded value.\n *\n * @param {Uint8Array} buf\n * @return {any}\n */\nexport const decodeAny = buf => decoding.readAny(decoding.createDecoder(buf))\n\n/**\n * Shift Byte Array {N} bits to the left. Does not expand byte array.\n *\n * @param {Uint8Array} bs\n * @param {number} N should be in the range of [0-7]\n */\nexport const shiftNBitsLeft = (bs, N) => {\n  if (N === 0) return bs\n  bs = new Uint8Array(bs)\n  bs[0] <<= N\n  for (let i = 1; i < bs.length; i++) {\n    bs[i - 1] |= bs[i] >>> (8 - N)\n    bs[i] <<= N\n  }\n  return bs\n}\n","import * as Y from 'yjs';\nimport { Item, ContentType, Text, XmlElement, UndoManager } from 'yjs';\nimport { DecorationSet, Decoration } from 'prosemirror-view';\nimport { PluginKey, Plugin, TextSelection, AllSelection, NodeSelection } from 'prosemirror-state';\nimport 'y-protocols/awareness';\nimport { createMutex } from 'lib0/mutex';\nimport * as PModel from 'prosemirror-model';\nimport { Fragment, Node } from 'prosemirror-model';\nimport * as math from 'lib0/math';\nimport * as object from 'lib0/object';\nimport * as set from 'lib0/set';\nimport { simpleDiff } from 'lib0/diff';\nimport * as error from 'lib0/error';\nimport * as random from 'lib0/random';\nimport * as environment from 'lib0/environment';\nimport * as dom from 'lib0/dom';\nimport * as eventloop from 'lib0/eventloop';\nimport * as map from 'lib0/map';\nimport * as sha256 from 'lib0/hash/sha256';\nimport * as buf from 'lib0/buffer';\n\n/**\n * The unique prosemirror plugin key for syncPlugin\n *\n * @public\n */\nconst ySyncPluginKey = new PluginKey('y-sync');\n\n/**\n * The unique prosemirror plugin key for undoPlugin\n *\n * @public\n */\nconst yUndoPluginKey = new PluginKey('y-undo');\n\n/**\n * The unique prosemirror plugin key for cursorPlugin\n *\n * @public\n */\nconst yCursorPluginKey = new PluginKey('yjs-cursor');\n\n/**\n * Custom function to transform sha256 hash to N byte\n *\n * @param {Uint8Array} digest\n */\nconst _convolute = digest => {\n  const N = 6;\n  for (let i = N; i < digest.length; i++) {\n    digest[i % N] = digest[i % N] ^ digest[i];\n  }\n  return digest.slice(0, N)\n};\n\n/**\n * @param {any} json\n */\nconst hashOfJSON = (json) => buf.toBase64(_convolute(sha256.digest(buf.encodeAny(json))));\n\n/**\n * @module bindings/prosemirror\n */\n\n/**\n * @typedef {Object} BindingMetadata\n * @property {ProsemirrorMapping} BindingMetadata.mapping\n * @property {Map<import('prosemirror-model').MarkType, boolean>} BindingMetadata.isOMark - is overlapping mark\n */\n\n/**\n * @return BindingMetadata\n */\nconst createEmptyMeta = () => ({\n  mapping: new Map(),\n  isOMark: new Map()\n});\n\n/**\n * @param {Y.Item} item\n * @param {Y.Snapshot} [snapshot]\n */\nconst isVisible = (item, snapshot) =>\n  snapshot === undefined\n    ? !item.deleted\n    : (snapshot.sv.has(item.id.client) && /** @type {number} */\n      (snapshot.sv.get(item.id.client)) > item.id.clock &&\n      !Y.isDeleted(snapshot.ds, item.id));\n\n/**\n * Either a node if type is YXmlElement or an Array of text nodes if YXmlText\n * @typedef {Map<Y.AbstractType<any>, PModel.Node | Array<PModel.Node>>} ProsemirrorMapping\n */\n\n/**\n * @typedef {Object} ColorDef\n * @property {string} ColorDef.light\n * @property {string} ColorDef.dark\n */\n\n/**\n * @typedef {Object} YSyncOpts\n * @property {Array<ColorDef>} [YSyncOpts.colors]\n * @property {Map<string,ColorDef>} [YSyncOpts.colorMapping]\n * @property {Y.PermanentUserData|null} [YSyncOpts.permanentUserData]\n * @property {ProsemirrorMapping} [YSyncOpts.mapping]\n * @property {function} [YSyncOpts.onFirstRender] Fired when the content from Yjs is initially rendered to ProseMirror\n */\n\n/**\n * @type {Array<ColorDef>}\n */\nconst defaultColors = [{ light: '#ecd44433', dark: '#ecd444' }];\n\n/**\n * @param {Map<string,ColorDef>} colorMapping\n * @param {Array<ColorDef>} colors\n * @param {string} user\n * @return {ColorDef}\n */\nconst getUserColor = (colorMapping, colors, user) => {\n  // @todo do not hit the same color twice if possible\n  if (!colorMapping.has(user)) {\n    if (colorMapping.size < colors.length) {\n      const usedColors = set.create();\n      colorMapping.forEach((color) => usedColors.add(color));\n      colors = colors.filter((color) => !usedColors.has(color));\n    }\n    colorMapping.set(user, random.oneOf(colors));\n  }\n  return /** @type {ColorDef} */ (colorMapping.get(user))\n};\n\n/**\n * This plugin listens to changes in prosemirror view and keeps yXmlState and view in sync.\n *\n * This plugin also keeps references to the type and the shared document so other plugins can access it.\n * @param {Y.XmlFragment} yXmlFragment\n * @param {YSyncOpts} opts\n * @return {any} Returns a prosemirror plugin that binds to this type\n */\nconst ySyncPlugin = (yXmlFragment, {\n  colors = defaultColors,\n  colorMapping = new Map(),\n  permanentUserData = null,\n  onFirstRender = () => {},\n  mapping\n} = {}) => {\n  let initialContentChanged = false;\n  const binding = new ProsemirrorBinding(yXmlFragment, mapping);\n  const plugin = new Plugin({\n    props: {\n      editable: (state) => {\n        const syncState = ySyncPluginKey.getState(state);\n        return syncState.snapshot == null && syncState.prevSnapshot == null\n      }\n    },\n    key: ySyncPluginKey,\n    state: {\n      /**\n       * @returns {any}\n       */\n      init: (_initargs, _state) => {\n        return {\n          type: yXmlFragment,\n          doc: yXmlFragment.doc,\n          binding,\n          snapshot: null,\n          prevSnapshot: null,\n          isChangeOrigin: false,\n          isUndoRedoOperation: false,\n          addToHistory: true,\n          colors,\n          colorMapping,\n          permanentUserData\n        }\n      },\n      apply: (tr, pluginState) => {\n        const change = tr.getMeta(ySyncPluginKey);\n        if (change !== undefined) {\n          pluginState = Object.assign({}, pluginState);\n          for (const key in change) {\n            pluginState[key] = change[key];\n          }\n        }\n        pluginState.addToHistory = tr.getMeta('addToHistory') !== false;\n        // always set isChangeOrigin. If undefined, this is not change origin.\n        pluginState.isChangeOrigin = change !== undefined &&\n          !!change.isChangeOrigin;\n        pluginState.isUndoRedoOperation = change !== undefined && !!change.isChangeOrigin && !!change.isUndoRedoOperation;\n        if (binding.prosemirrorView !== null) {\n          if (\n            change !== undefined &&\n            (change.snapshot != null || change.prevSnapshot != null)\n          ) {\n            // snapshot changed, rerender next\n            eventloop.timeout(0, () => {\n              if (binding.prosemirrorView == null) {\n                return\n              }\n              if (change.restore == null) {\n                binding._renderSnapshot(\n                  change.snapshot,\n                  change.prevSnapshot,\n                  pluginState\n                );\n              } else {\n                binding._renderSnapshot(\n                  change.snapshot,\n                  change.snapshot,\n                  pluginState\n                );\n                // reset to current prosemirror state\n                delete pluginState.restore;\n                delete pluginState.snapshot;\n                delete pluginState.prevSnapshot;\n                binding.mux(() => {\n                  binding._prosemirrorChanged(\n                    binding.prosemirrorView.state.doc\n                  );\n                });\n              }\n            });\n          }\n        }\n        return pluginState\n      }\n    },\n    view: (view) => {\n      binding.initView(view);\n      if (mapping == null) {\n        // force rerender to update the bindings mapping\n        binding._forceRerender();\n      }\n      onFirstRender();\n      return {\n        update: () => {\n          const pluginState = plugin.getState(view.state);\n          if (\n            pluginState.snapshot == null && pluginState.prevSnapshot == null\n          ) {\n            if (\n              // If the content doesn't change initially, we don't render anything to Yjs\n              // If the content was cleared by a user action, we want to catch the change and\n              // represent it in Yjs\n              initialContentChanged ||\n              view.state.doc.content.findDiffStart(\n                view.state.doc.type.createAndFill().content\n              ) !== null\n            ) {\n              initialContentChanged = true;\n              if (\n                pluginState.addToHistory === false &&\n                !pluginState.isChangeOrigin\n              ) {\n                const yUndoPluginState = yUndoPluginKey.getState(view.state);\n                /**\n                 * @type {Y.UndoManager}\n                 */\n                const um = yUndoPluginState && yUndoPluginState.undoManager;\n                if (um) {\n                  um.stopCapturing();\n                }\n              }\n              binding.mux(() => {\n                /** @type {Y.Doc} */ (pluginState.doc).transact((tr) => {\n                  tr.meta.set('addToHistory', pluginState.addToHistory);\n                  binding._prosemirrorChanged(view.state.doc);\n                }, ySyncPluginKey);\n              });\n            }\n          }\n        },\n        destroy: () => {\n          binding.destroy();\n        }\n      }\n    }\n  });\n  return plugin\n};\n\n/**\n * @param {import('prosemirror-state').Transaction} tr\n * @param {ReturnType<typeof getRelativeSelection>} relSel\n * @param {ProsemirrorBinding} binding\n */\nconst restoreRelativeSelection = (tr, relSel, binding) => {\n  if (relSel !== null && relSel.anchor !== null && relSel.head !== null) {\n    if (relSel.type === 'all') {\n      tr.setSelection(new AllSelection(tr.doc));\n    } else if (relSel.type === 'node') {\n      const anchor = relativePositionToAbsolutePosition(\n        binding.doc,\n        binding.type,\n        relSel.anchor,\n        binding.mapping\n      );\n      tr.setSelection(NodeSelection.create(tr.doc, anchor));\n    } else {\n      const anchor = relativePositionToAbsolutePosition(\n        binding.doc,\n        binding.type,\n        relSel.anchor,\n        binding.mapping\n      );\n      const head = relativePositionToAbsolutePosition(\n        binding.doc,\n        binding.type,\n        relSel.head,\n        binding.mapping\n      );\n      if (anchor !== null && head !== null) {\n        tr.setSelection(TextSelection.between(tr.doc.resolve(anchor), tr.doc.resolve(head)));\n      }\n    }\n  }\n};\n\n/**\n * @param {ProsemirrorBinding} pmbinding\n * @param {import('prosemirror-state').EditorState} state\n */\nconst getRelativeSelection = (pmbinding, state) => ({\n  type: /** @type {any} */ (state.selection).jsonID,\n  anchor: absolutePositionToRelativePosition(\n    state.selection.anchor,\n    pmbinding.type,\n    pmbinding.mapping\n  ),\n  head: absolutePositionToRelativePosition(\n    state.selection.head,\n    pmbinding.type,\n    pmbinding.mapping\n  )\n});\n\n/**\n * Binding for prosemirror.\n *\n * @protected\n */\nclass ProsemirrorBinding {\n  /**\n   * @param {Y.XmlFragment} yXmlFragment The bind source\n   * @param {ProsemirrorMapping} mapping\n   */\n  constructor (yXmlFragment, mapping = new Map()) {\n    this.type = yXmlFragment;\n    /**\n     * this will be set once the view is created\n     * @type {any}\n     */\n    this.prosemirrorView = null;\n    this.mux = createMutex();\n    this.mapping = mapping;\n    /**\n     * Is overlapping mark - i.e. mark does not exclude itself.\n     *\n     * @type {Map<import('prosemirror-model').MarkType, boolean>}\n     */\n    this.isOMark = new Map();\n    this._observeFunction = this._typeChanged.bind(this);\n    /**\n     * @type {Y.Doc}\n     */\n    // @ts-ignore\n    this.doc = yXmlFragment.doc;\n    /**\n     * current selection as relative positions in the Yjs model\n     */\n    this.beforeTransactionSelection = null;\n    this.beforeAllTransactions = () => {\n      if (this.beforeTransactionSelection === null && this.prosemirrorView != null) {\n        this.beforeTransactionSelection = getRelativeSelection(\n          this,\n          this.prosemirrorView.state\n        );\n      }\n    };\n    this.afterAllTransactions = () => {\n      this.beforeTransactionSelection = null;\n    };\n    this._domSelectionInView = null;\n  }\n\n  /**\n   * Create a transaction for changing the prosemirror state.\n   *\n   * @returns\n   */\n  get _tr () {\n    return this.prosemirrorView.state.tr.setMeta('addToHistory', false)\n  }\n\n  _isLocalCursorInView () {\n    if (!this.prosemirrorView.hasFocus()) return false\n    if (environment.isBrowser && this._domSelectionInView === null) {\n      // Calculate the domSelectionInView and clear by next tick after all events are finished\n      eventloop.timeout(0, () => {\n        this._domSelectionInView = null;\n      });\n      this._domSelectionInView = this._isDomSelectionInView();\n    }\n    return this._domSelectionInView\n  }\n\n  _isDomSelectionInView () {\n    const selection = this.prosemirrorView._root.getSelection();\n\n    if (selection == null || selection.anchorNode == null) return false\n\n    const range = this.prosemirrorView._root.createRange();\n    range.setStart(selection.anchorNode, selection.anchorOffset);\n    range.setEnd(selection.focusNode, selection.focusOffset);\n\n    // This is a workaround for an edgecase where getBoundingClientRect will\n    // return zero values if the selection is collapsed at the start of a newline\n    // see reference here: https://stackoverflow.com/a/59780954\n    const rects = range.getClientRects();\n    if (rects.length === 0) {\n      // probably buggy newline behavior, explicitly select the node contents\n      if (range.startContainer && range.collapsed) {\n        range.selectNodeContents(range.startContainer);\n      }\n    }\n\n    const bounding = range.getBoundingClientRect();\n    const documentElement = dom.doc.documentElement;\n\n    return bounding.bottom >= 0 && bounding.right >= 0 &&\n      bounding.left <=\n        (window.innerWidth || documentElement.clientWidth || 0) &&\n      bounding.top <= (window.innerHeight || documentElement.clientHeight || 0)\n  }\n\n  /**\n   * @param {Y.Snapshot} snapshot\n   * @param {Y.Snapshot} prevSnapshot\n   */\n  renderSnapshot (snapshot, prevSnapshot) {\n    if (!prevSnapshot) {\n      prevSnapshot = Y.createSnapshot(Y.createDeleteSet(), new Map());\n    }\n    this.prosemirrorView.dispatch(\n      this._tr.setMeta(ySyncPluginKey, { snapshot, prevSnapshot })\n    );\n  }\n\n  unrenderSnapshot () {\n    this.mapping.clear();\n    this.mux(() => {\n      const fragmentContent = this.type.toArray().map((t) =>\n        createNodeFromYElement(\n          /** @type {Y.XmlElement} */ (t),\n          this.prosemirrorView.state.schema,\n          this\n        )\n      ).filter((n) => n !== null);\n      // @ts-ignore\n      const tr = this._tr.replace(\n        0,\n        this.prosemirrorView.state.doc.content.size,\n        new PModel.Slice(PModel.Fragment.from(fragmentContent), 0, 0)\n      );\n      tr.setMeta(ySyncPluginKey, { snapshot: null, prevSnapshot: null });\n      this.prosemirrorView.dispatch(tr);\n    });\n  }\n\n  _forceRerender () {\n    this.mapping.clear();\n    this.mux(() => {\n      // If this is a forced rerender, this might neither happen as a pm change nor within a Yjs\n      // transaction. Then the \"before selection\" doesn't exist. In this case, we need to create a\n      // relative position before replacing content. Fixes #126\n      const sel = this.beforeTransactionSelection !== null ? null : this.prosemirrorView.state.selection;\n      const fragmentContent = this.type.toArray().map((t) =>\n        createNodeFromYElement(\n          /** @type {Y.XmlElement} */ (t),\n          this.prosemirrorView.state.schema,\n          this\n        )\n      ).filter((n) => n !== null);\n      // @ts-ignore\n      const tr = this._tr.replace(\n        0,\n        this.prosemirrorView.state.doc.content.size,\n        new PModel.Slice(PModel.Fragment.from(fragmentContent), 0, 0)\n      );\n      if (sel) {\n        /**\n         * If the Prosemirror document we just created from this.type is\n         * smaller than the previous document, the selection might be\n         * out of bound, which would make Prosemirror throw an error.\n         */\n        const clampedAnchor = math.min(math.max(sel.anchor, 0), tr.doc.content.size);\n        const clampedHead = math.min(math.max(sel.head, 0), tr.doc.content.size);\n\n        tr.setSelection(TextSelection.create(tr.doc, clampedAnchor, clampedHead));\n      }\n      this.prosemirrorView.dispatch(\n        tr.setMeta(ySyncPluginKey, { isChangeOrigin: true, binding: this })\n      );\n    });\n  }\n\n  /**\n   * @param {Y.Snapshot|Uint8Array} snapshot\n   * @param {Y.Snapshot|Uint8Array} prevSnapshot\n   * @param {Object} pluginState\n   */\n  _renderSnapshot (snapshot, prevSnapshot, pluginState) {\n    /**\n     * The document that contains the full history of this document.\n     * @type {Y.Doc}\n     */\n    let historyDoc = this.doc;\n    let historyType = this.type;\n    if (!snapshot) {\n      snapshot = Y.snapshot(this.doc);\n    }\n    if (snapshot instanceof Uint8Array || prevSnapshot instanceof Uint8Array) {\n      if (!(snapshot instanceof Uint8Array) || !(prevSnapshot instanceof Uint8Array)) {\n        // expected both snapshots to be v2 updates\n        error.unexpectedCase();\n      }\n      historyDoc = new Y.Doc({ gc: false });\n      Y.applyUpdateV2(historyDoc, prevSnapshot);\n      prevSnapshot = Y.snapshot(historyDoc);\n      Y.applyUpdateV2(historyDoc, snapshot);\n      snapshot = Y.snapshot(historyDoc);\n      if (historyType._item === null) {\n        /**\n         * If is a root type, we need to find the root key in the initial document\n         * and use it to get the history type.\n         */\n        const rootKey = Array.from(this.doc.share.keys()).find(\n          (key) => this.doc.share.get(key) === this.type\n        );\n        historyType = historyDoc.getXmlFragment(rootKey);\n      } else {\n        /**\n         * If it is a sub type, we use the item id to find the history type.\n         */\n        const historyStructs =\n          historyDoc.store.clients.get(historyType._item.id.client) ?? [];\n        const itemIndex = Y.findIndexSS(\n          historyStructs,\n          historyType._item.id.clock\n        );\n        const item = /** @type {Y.Item} */ (historyStructs[itemIndex]);\n        const content = /** @type {Y.ContentType} */ (item.content);\n        historyType = /** @type {Y.XmlFragment} */ (content.type);\n      }\n    }\n    // clear mapping because we are going to rerender\n    this.mapping.clear();\n    this.mux(() => {\n      historyDoc.transact((transaction) => {\n        // before rendering, we are going to sanitize ops and split deleted ops\n        // if they were deleted by seperate users.\n        /**\n         * @type {Y.PermanentUserData}\n         */\n        const pud = pluginState.permanentUserData;\n        if (pud) {\n          pud.dss.forEach((ds) => {\n            Y.iterateDeletedStructs(transaction, ds, (_item) => {});\n          });\n        }\n        /**\n         * @param {'removed'|'added'} type\n         * @param {Y.ID} id\n         */\n        const computeYChange = (type, id) => {\n          const user = type === 'added'\n            ? pud.getUserByClientId(id.client)\n            : pud.getUserByDeletedId(id);\n          return {\n            user,\n            type,\n            color: getUserColor(\n              pluginState.colorMapping,\n              pluginState.colors,\n              user\n            )\n          }\n        };\n        // Create document fragment and render\n        const fragmentContent = Y.typeListToArraySnapshot(\n          historyType,\n          new Y.Snapshot(prevSnapshot.ds, snapshot.sv)\n        ).map((t) => {\n          if (\n            !t._item.deleted || isVisible(t._item, snapshot) ||\n            isVisible(t._item, prevSnapshot)\n          ) {\n            return createNodeFromYElement(\n              t,\n              this.prosemirrorView.state.schema,\n              { mapping: new Map(), isOMark: new Map() },\n              snapshot,\n              prevSnapshot,\n              computeYChange\n            )\n          } else {\n            // No need to render elements that are not visible by either snapshot.\n            // If a client adds and deletes content in the same snapshot the element is not visible by either snapshot.\n            return null\n          }\n        }).filter((n) => n !== null);\n        // @ts-ignore\n        const tr = this._tr.replace(\n          0,\n          this.prosemirrorView.state.doc.content.size,\n          new PModel.Slice(PModel.Fragment.from(fragmentContent), 0, 0)\n        );\n        this.prosemirrorView.dispatch(\n          tr.setMeta(ySyncPluginKey, { isChangeOrigin: true })\n        );\n      }, ySyncPluginKey);\n    });\n  }\n\n  /**\n   * @param {Array<Y.YEvent<any>>} events\n   * @param {Y.Transaction} transaction\n   */\n  _typeChanged (events, transaction) {\n    if (this.prosemirrorView == null) return\n    const syncState = ySyncPluginKey.getState(this.prosemirrorView.state);\n    if (\n      events.length === 0 || syncState.snapshot != null ||\n      syncState.prevSnapshot != null\n    ) {\n      // drop out if snapshot is active\n      this.renderSnapshot(syncState.snapshot, syncState.prevSnapshot);\n      return\n    }\n    this.mux(() => {\n      /**\n       * @param {any} _\n       * @param {Y.AbstractType<any>} type\n       */\n      const delType = (_, type) => this.mapping.delete(type);\n      Y.iterateDeletedStructs(\n        transaction,\n        transaction.deleteSet,\n        (struct) => {\n          if (struct.constructor === Y.Item) {\n            const type = /** @type {Y.ContentType} */ (/** @type {Y.Item} */ (struct).content).type;\n            type && this.mapping.delete(type);\n          }\n        }\n      );\n      transaction.changed.forEach(delType);\n      transaction.changedParentTypes.forEach(delType);\n      const fragmentContent = this.type.toArray().map((t) =>\n        createNodeIfNotExists(\n          /** @type {Y.XmlElement | Y.XmlHook} */ (t),\n          this.prosemirrorView.state.schema,\n          this\n        )\n      ).filter((n) => n !== null);\n      // @ts-ignore\n      let tr = this._tr.replace(\n        0,\n        this.prosemirrorView.state.doc.content.size,\n        new PModel.Slice(PModel.Fragment.from(fragmentContent), 0, 0)\n      );\n      restoreRelativeSelection(tr, this.beforeTransactionSelection, this);\n      tr = tr.setMeta(ySyncPluginKey, { isChangeOrigin: true, isUndoRedoOperation: transaction.origin instanceof Y.UndoManager });\n      if (\n        this.beforeTransactionSelection !== null && this._isLocalCursorInView()\n      ) {\n        tr.scrollIntoView();\n      }\n      this.prosemirrorView.dispatch(tr);\n    });\n  }\n\n  /**\n   * @param {import('prosemirror-model').Node} doc\n   */\n  _prosemirrorChanged (doc) {\n    this.doc.transact(() => {\n      updateYFragment(this.doc, this.type, doc, this);\n      this.beforeTransactionSelection = getRelativeSelection(\n        this,\n        this.prosemirrorView.state\n      );\n    }, ySyncPluginKey);\n  }\n\n  /**\n   * View is ready to listen to changes. Register observers.\n   * @param {any} prosemirrorView\n   */\n  initView (prosemirrorView) {\n    if (this.prosemirrorView != null) this.destroy();\n    this.prosemirrorView = prosemirrorView;\n    this.doc.on('beforeAllTransactions', this.beforeAllTransactions);\n    this.doc.on('afterAllTransactions', this.afterAllTransactions);\n    this.type.observeDeep(this._observeFunction);\n  }\n\n  destroy () {\n    if (this.prosemirrorView == null) return\n    this.prosemirrorView = null;\n    this.type.unobserveDeep(this._observeFunction);\n    this.doc.off('beforeAllTransactions', this.beforeAllTransactions);\n    this.doc.off('afterAllTransactions', this.afterAllTransactions);\n  }\n}\n\n/**\n * @private\n * @param {Y.XmlElement | Y.XmlHook} el\n * @param {PModel.Schema} schema\n * @param {BindingMetadata} meta\n * @param {Y.Snapshot} [snapshot]\n * @param {Y.Snapshot} [prevSnapshot]\n * @param {function('removed' | 'added', Y.ID):any} [computeYChange]\n * @return {PModel.Node | null}\n */\nconst createNodeIfNotExists = (\n  el,\n  schema,\n  meta,\n  snapshot,\n  prevSnapshot,\n  computeYChange\n) => {\n  const node = /** @type {PModel.Node} */ (meta.mapping.get(el));\n  if (node === undefined) {\n    if (el instanceof Y.XmlElement) {\n      return createNodeFromYElement(\n        el,\n        schema,\n        meta,\n        snapshot,\n        prevSnapshot,\n        computeYChange\n      )\n    } else {\n      throw error.methodUnimplemented() // we are currently not handling hooks\n    }\n  }\n  return node\n};\n\n/**\n * @private\n * @param {Y.XmlElement} el\n * @param {any} schema\n * @param {BindingMetadata} meta\n * @param {Y.Snapshot} [snapshot]\n * @param {Y.Snapshot} [prevSnapshot]\n * @param {function('removed' | 'added', Y.ID):any} [computeYChange]\n * @return {PModel.Node | null} Returns node if node could be created. Otherwise it deletes the yjs type and returns null\n */\nconst createNodeFromYElement = (\n  el,\n  schema,\n  meta,\n  snapshot,\n  prevSnapshot,\n  computeYChange\n) => {\n  const children = [];\n  /**\n   * @param {Y.XmlElement | Y.XmlText} type\n   */\n  const createChildren = (type) => {\n    if (type instanceof Y.XmlElement) {\n      const n = createNodeIfNotExists(\n        type,\n        schema,\n        meta,\n        snapshot,\n        prevSnapshot,\n        computeYChange\n      );\n      if (n !== null) {\n        children.push(n);\n      }\n    } else {\n      // If the next ytext exists and was created by us, move the content to the current ytext.\n      // This is a fix for #160 -- duplication of characters when two Y.Text exist next to each\n      // other.\n      const nextytext = /** @type {Y.ContentType} */ (type._item.right?.content)?.type;\n      if (nextytext instanceof Y.Text && !nextytext._item.deleted && nextytext._item.id.client === nextytext.doc.clientID) {\n        type.applyDelta([\n          { retain: type.length },\n          ...nextytext.toDelta()\n        ]);\n        nextytext.doc.transact(tr => {\n          nextytext._item.delete(tr);\n        });\n      }\n      // now create the prosemirror text nodes\n      const ns = createTextNodesFromYText(\n        type,\n        schema,\n        meta,\n        snapshot,\n        prevSnapshot,\n        computeYChange\n      );\n      if (ns !== null) {\n        ns.forEach((textchild) => {\n          if (textchild !== null) {\n            children.push(textchild);\n          }\n        });\n      }\n    }\n  };\n  if (snapshot === undefined || prevSnapshot === undefined) {\n    el.toArray().forEach(createChildren);\n  } else {\n    Y.typeListToArraySnapshot(el, new Y.Snapshot(prevSnapshot.ds, snapshot.sv))\n      .forEach(createChildren);\n  }\n  try {\n    const attrs = el.getAttributes(snapshot);\n    if (snapshot !== undefined) {\n      if (!isVisible(/** @type {Y.Item} */ (el._item), snapshot)) {\n        attrs.ychange = computeYChange\n          ? computeYChange('removed', /** @type {Y.Item} */ (el._item).id)\n          : { type: 'removed' };\n      } else if (!isVisible(/** @type {Y.Item} */ (el._item), prevSnapshot)) {\n        attrs.ychange = computeYChange\n          ? computeYChange('added', /** @type {Y.Item} */ (el._item).id)\n          : { type: 'added' };\n      }\n    }\n    const node = schema.node(el.nodeName, attrs, children);\n    meta.mapping.set(el, node);\n    return node\n  } catch (e) {\n    // an error occured while creating the node. This is probably a result of a concurrent action.\n    /** @type {Y.Doc} */ (el.doc).transact((transaction) => {\n      /** @type {Y.Item} */ (el._item).delete(transaction);\n    }, ySyncPluginKey);\n    meta.mapping.delete(el);\n    return null\n  }\n};\n\n/**\n * @private\n * @param {Y.XmlText} text\n * @param {import('prosemirror-model').Schema} schema\n * @param {BindingMetadata} _meta\n * @param {Y.Snapshot} [snapshot]\n * @param {Y.Snapshot} [prevSnapshot]\n * @param {function('removed' | 'added', Y.ID):any} [computeYChange]\n * @return {Array<PModel.Node>|null}\n */\nconst createTextNodesFromYText = (\n  text,\n  schema,\n  _meta,\n  snapshot,\n  prevSnapshot,\n  computeYChange\n) => {\n  const nodes = [];\n  const deltas = text.toDelta(snapshot, prevSnapshot, computeYChange);\n  try {\n    for (let i = 0; i < deltas.length; i++) {\n      const delta = deltas[i];\n      nodes.push(schema.text(delta.insert, attributesToMarks(delta.attributes, schema)));\n    }\n  } catch (e) {\n    // an error occured while creating the node. This is probably a result of a concurrent action.\n    /** @type {Y.Doc} */ (text.doc).transact((transaction) => {\n      /** @type {Y.Item} */ (text._item).delete(transaction);\n    }, ySyncPluginKey);\n    return null\n  }\n  // @ts-ignore\n  return nodes\n};\n\n/**\n * @private\n * @param {Array<any>} nodes prosemirror node\n * @param {BindingMetadata} meta\n * @return {Y.XmlText}\n */\nconst createTypeFromTextNodes = (nodes, meta) => {\n  const type = new Y.XmlText();\n  const delta = nodes.map((node) => ({\n    // @ts-ignore\n    insert: node.text,\n    attributes: marksToAttributes(node.marks, meta)\n  }));\n  type.applyDelta(delta);\n  meta.mapping.set(type, nodes);\n  return type\n};\n\n/**\n * @private\n * @param {any} node prosemirror node\n * @param {BindingMetadata} meta\n * @return {Y.XmlElement}\n */\nconst createTypeFromElementNode = (node, meta) => {\n  const type = new Y.XmlElement(node.type.name);\n  for (const key in node.attrs) {\n    const val = node.attrs[key];\n    if (val !== null && key !== 'ychange') {\n      type.setAttribute(key, val);\n    }\n  }\n  type.insert(\n    0,\n    normalizePNodeContent(node).map((n) =>\n      createTypeFromTextOrElementNode(n, meta)\n    )\n  );\n  meta.mapping.set(type, node);\n  return type\n};\n\n/**\n * @private\n * @param {PModel.Node|Array<PModel.Node>} node prosemirror text node\n * @param {BindingMetadata} meta\n * @return {Y.XmlElement|Y.XmlText}\n */\nconst createTypeFromTextOrElementNode = (node, meta) =>\n  node instanceof Array\n    ? createTypeFromTextNodes(node, meta)\n    : createTypeFromElementNode(node, meta);\n\n/**\n * @param {any} val\n */\nconst isObject = (val) => typeof val === 'object' && val !== null;\n\n/**\n * @param {any} pattrs\n * @param {any} yattrs\n */\nconst equalAttrs = (pattrs, yattrs) => {\n  const keys = Object.keys(pattrs).filter((key) => pattrs[key] !== null);\n  let eq =\n    keys.length ===\n      Object.keys(yattrs).filter((key) => yattrs[key] !== null).length;\n  for (let i = 0; i < keys.length && eq; i++) {\n    const key = keys[i];\n    const l = pattrs[key];\n    const r = yattrs[key];\n    eq = key === 'ychange' || l === r ||\n      (isObject(l) && isObject(r) && equalAttrs(l, r));\n  }\n  return eq\n};\n\n/**\n * @typedef {Array<Array<PModel.Node>|PModel.Node>} NormalizedPNodeContent\n */\n\n/**\n * @param {any} pnode\n * @return {NormalizedPNodeContent}\n */\nconst normalizePNodeContent = (pnode) => {\n  const c = pnode.content.content;\n  const res = [];\n  for (let i = 0; i < c.length; i++) {\n    const n = c[i];\n    if (n.isText) {\n      const textNodes = [];\n      for (let tnode = c[i]; i < c.length && tnode.isText; tnode = c[++i]) {\n        textNodes.push(tnode);\n      }\n      i--;\n      res.push(textNodes);\n    } else {\n      res.push(n);\n    }\n  }\n  return res\n};\n\n/**\n * @param {Y.XmlText} ytext\n * @param {Array<any>} ptexts\n */\nconst equalYTextPText = (ytext, ptexts) => {\n  const delta = ytext.toDelta();\n  return delta.length === ptexts.length &&\n    delta.every(/** @type {(d:any,i:number) => boolean} */ (d, i) =>\n      d.insert === /** @type {any} */ (ptexts[i]).text &&\n      object.keys(d.attributes || {}).length === ptexts[i].marks.length &&\n      object.every(d.attributes, (attr, yattrname) => {\n        const markname = yattr2markname(yattrname);\n        const pmarks = ptexts[i].marks;\n        return equalAttrs(attr, pmarks.find(/** @param {any} mark */ mark => mark.type.name === markname)?.attrs)\n      })\n    )\n};\n\n/**\n * @param {Y.XmlElement|Y.XmlText|Y.XmlHook} ytype\n * @param {any|Array<any>} pnode\n */\nconst equalYTypePNode = (ytype, pnode) => {\n  if (\n    ytype instanceof Y.XmlElement && !(pnode instanceof Array) &&\n    matchNodeName(ytype, pnode)\n  ) {\n    const normalizedContent = normalizePNodeContent(pnode);\n    return ytype._length === normalizedContent.length &&\n      equalAttrs(ytype.getAttributes(), pnode.attrs) &&\n      ytype.toArray().every((ychild, i) =>\n        equalYTypePNode(ychild, normalizedContent[i])\n      )\n  }\n  return ytype instanceof Y.XmlText && pnode instanceof Array &&\n    equalYTextPText(ytype, pnode)\n};\n\n/**\n * @param {PModel.Node | Array<PModel.Node> | undefined} mapped\n * @param {PModel.Node | Array<PModel.Node>} pcontent\n */\nconst mappedIdentity = (mapped, pcontent) =>\n  mapped === pcontent ||\n  (mapped instanceof Array && pcontent instanceof Array &&\n    mapped.length === pcontent.length && mapped.every((a, i) =>\n    pcontent[i] === a\n  ));\n\n/**\n * @param {Y.XmlElement} ytype\n * @param {PModel.Node} pnode\n * @param {BindingMetadata} meta\n * @return {{ foundMappedChild: boolean, equalityFactor: number }}\n */\nconst computeChildEqualityFactor = (ytype, pnode, meta) => {\n  const yChildren = ytype.toArray();\n  const pChildren = normalizePNodeContent(pnode);\n  const pChildCnt = pChildren.length;\n  const yChildCnt = yChildren.length;\n  const minCnt = math.min(yChildCnt, pChildCnt);\n  let left = 0;\n  let right = 0;\n  let foundMappedChild = false;\n  for (; left < minCnt; left++) {\n    const leftY = yChildren[left];\n    const leftP = pChildren[left];\n    if (mappedIdentity(meta.mapping.get(leftY), leftP)) {\n      foundMappedChild = true; // definite (good) match!\n    } else if (!equalYTypePNode(leftY, leftP)) {\n      break\n    }\n  }\n  for (; left + right < minCnt; right++) {\n    const rightY = yChildren[yChildCnt - right - 1];\n    const rightP = pChildren[pChildCnt - right - 1];\n    if (mappedIdentity(meta.mapping.get(rightY), rightP)) {\n      foundMappedChild = true;\n    } else if (!equalYTypePNode(rightY, rightP)) {\n      break\n    }\n  }\n  return {\n    equalityFactor: left + right,\n    foundMappedChild\n  }\n};\n\n/**\n * @param {Y.Text} ytext\n */\nconst ytextTrans = (ytext) => {\n  let str = '';\n  /**\n   * @type {Y.Item|null}\n   */\n  let n = ytext._start;\n  const nAttrs = {};\n  while (n !== null) {\n    if (!n.deleted) {\n      if (n.countable && n.content instanceof Y.ContentString) {\n        str += n.content.str;\n      } else if (n.content instanceof Y.ContentFormat) {\n        nAttrs[n.content.key] = null;\n      }\n    }\n    n = n.right;\n  }\n  return {\n    str,\n    nAttrs\n  }\n};\n\n/**\n * @todo test this more\n *\n * @param {Y.Text} ytext\n * @param {Array<any>} ptexts\n * @param {BindingMetadata} meta\n */\nconst updateYText = (ytext, ptexts, meta) => {\n  meta.mapping.set(ytext, ptexts);\n  const { nAttrs, str } = ytextTrans(ytext);\n  const content = ptexts.map((p) => ({\n    insert: /** @type {any} */ (p).text,\n    attributes: Object.assign({}, nAttrs, marksToAttributes(p.marks, meta))\n  }));\n  const { insert, remove, index } = simpleDiff(\n    str,\n    content.map((c) => c.insert).join('')\n  );\n  ytext.delete(index, remove);\n  ytext.insert(index, insert);\n  ytext.applyDelta(\n    content.map((c) => ({ retain: c.insert.length, attributes: c.attributes }))\n  );\n};\n\nconst hashedMarkNameRegex = /(.*)(--[a-zA-Z0-9+/=]{8})$/;\n/**\n * @param {string} attrName\n */\nconst yattr2markname = attrName => hashedMarkNameRegex.exec(attrName)?.[1] ?? attrName;\n\n/**\n * @todo move this to markstoattributes\n *\n * @param {Object<string, any>} attrs\n * @param {import('prosemirror-model').Schema} schema\n */\nconst attributesToMarks = (attrs, schema) => {\n  /**\n   * @type {Array<import('prosemirror-model').Mark>}\n   */\n  const marks = [];\n  for (const markName in attrs) {\n    // remove hashes if necessary\n    marks.push(schema.mark(yattr2markname(markName), attrs[markName]));\n  }\n  return marks\n};\n\n/**\n * @param {Array<import('prosemirror-model').Mark>} marks\n * @param {BindingMetadata} meta\n */\nconst marksToAttributes = (marks, meta) => {\n  const pattrs = {};\n  marks.forEach((mark) => {\n    if (mark.type.name !== 'ychange') {\n      const isOverlapping = map.setIfUndefined(meta.isOMark, mark.type, () => !mark.type.excludes(mark.type));\n      pattrs[isOverlapping ? `${mark.type.name}--${hashOfJSON(mark.toJSON())}` : mark.type.name] = mark.attrs;\n    }\n  });\n  return pattrs\n};\n\n/**\n * Update a yDom node by syncing the current content of the prosemirror node.\n *\n * This is a y-prosemirror internal feature that you can use at your own risk.\n *\n * @private\n * @unstable\n *\n * @param {{transact: Function}} y\n * @param {Y.XmlFragment} yDomFragment\n * @param {any} pNode\n * @param {BindingMetadata} meta\n */\nconst updateYFragment = (y, yDomFragment, pNode, meta) => {\n  if (\n    yDomFragment instanceof Y.XmlElement &&\n    yDomFragment.nodeName !== pNode.type.name\n  ) {\n    throw new Error('node name mismatch!')\n  }\n  meta.mapping.set(yDomFragment, pNode);\n  // update attributes\n  if (yDomFragment instanceof Y.XmlElement) {\n    const yDomAttrs = yDomFragment.getAttributes();\n    const pAttrs = pNode.attrs;\n    for (const key in pAttrs) {\n      if (pAttrs[key] !== null) {\n        if (yDomAttrs[key] !== pAttrs[key] && key !== 'ychange') {\n          yDomFragment.setAttribute(key, pAttrs[key]);\n        }\n      } else {\n        yDomFragment.removeAttribute(key);\n      }\n    }\n    // remove all keys that are no longer in pAttrs\n    for (const key in yDomAttrs) {\n      if (pAttrs[key] === undefined) {\n        yDomFragment.removeAttribute(key);\n      }\n    }\n  }\n  // update children\n  const pChildren = normalizePNodeContent(pNode);\n  const pChildCnt = pChildren.length;\n  const yChildren = yDomFragment.toArray();\n  const yChildCnt = yChildren.length;\n  const minCnt = math.min(pChildCnt, yChildCnt);\n  let left = 0;\n  let right = 0;\n  // find number of matching elements from left\n  for (; left < minCnt; left++) {\n    const leftY = yChildren[left];\n    const leftP = pChildren[left];\n    if (!mappedIdentity(meta.mapping.get(leftY), leftP)) {\n      if (equalYTypePNode(leftY, leftP)) {\n        // update mapping\n        meta.mapping.set(leftY, leftP);\n      } else {\n        break\n      }\n    }\n  }\n  // find number of matching elements from right\n  for (; right + left + 1 < minCnt; right++) {\n    const rightY = yChildren[yChildCnt - right - 1];\n    const rightP = pChildren[pChildCnt - right - 1];\n    if (!mappedIdentity(meta.mapping.get(rightY), rightP)) {\n      if (equalYTypePNode(rightY, rightP)) {\n        // update mapping\n        meta.mapping.set(rightY, rightP);\n      } else {\n        break\n      }\n    }\n  }\n  y.transact(() => {\n    // try to compare and update\n    while (yChildCnt - left - right > 0 && pChildCnt - left - right > 0) {\n      const leftY = yChildren[left];\n      const leftP = pChildren[left];\n      const rightY = yChildren[yChildCnt - right - 1];\n      const rightP = pChildren[pChildCnt - right - 1];\n      if (leftY instanceof Y.XmlText && leftP instanceof Array) {\n        if (!equalYTextPText(leftY, leftP)) {\n          updateYText(leftY, leftP, meta);\n        }\n        left += 1;\n      } else {\n        let updateLeft = leftY instanceof Y.XmlElement &&\n          matchNodeName(leftY, leftP);\n        let updateRight = rightY instanceof Y.XmlElement &&\n          matchNodeName(rightY, rightP);\n        if (updateLeft && updateRight) {\n          // decide which which element to update\n          const equalityLeft = computeChildEqualityFactor(\n            /** @type {Y.XmlElement} */ (leftY),\n            /** @type {PModel.Node} */ (leftP),\n            meta\n          );\n          const equalityRight = computeChildEqualityFactor(\n            /** @type {Y.XmlElement} */ (rightY),\n            /** @type {PModel.Node} */ (rightP),\n            meta\n          );\n          if (\n            equalityLeft.foundMappedChild && !equalityRight.foundMappedChild\n          ) {\n            updateRight = false;\n          } else if (\n            !equalityLeft.foundMappedChild && equalityRight.foundMappedChild\n          ) {\n            updateLeft = false;\n          } else if (\n            equalityLeft.equalityFactor < equalityRight.equalityFactor\n          ) {\n            updateLeft = false;\n          } else {\n            updateRight = false;\n          }\n        }\n        if (updateLeft) {\n          updateYFragment(\n            y,\n            /** @type {Y.XmlFragment} */ (leftY),\n            /** @type {PModel.Node} */ (leftP),\n            meta\n          );\n          left += 1;\n        } else if (updateRight) {\n          updateYFragment(\n            y,\n            /** @type {Y.XmlFragment} */ (rightY),\n            /** @type {PModel.Node} */ (rightP),\n            meta\n          );\n          right += 1;\n        } else {\n          meta.mapping.delete(yDomFragment.get(left));\n          yDomFragment.delete(left, 1);\n          yDomFragment.insert(left, [\n            createTypeFromTextOrElementNode(leftP, meta)\n          ]);\n          left += 1;\n        }\n      }\n    }\n    const yDelLen = yChildCnt - left - right;\n    if (\n      yChildCnt === 1 && pChildCnt === 0 && yChildren[0] instanceof Y.XmlText\n    ) {\n      meta.mapping.delete(yChildren[0]);\n      // Edge case handling https://github.com/yjs/y-prosemirror/issues/108\n      // Only delete the content of the Y.Text to retain remote changes on the same Y.Text object\n      yChildren[0].delete(0, yChildren[0].length);\n    } else if (yDelLen > 0) {\n      yDomFragment.slice(left, left + yDelLen).forEach(type => meta.mapping.delete(type));\n      yDomFragment.delete(left, yDelLen);\n    }\n    if (left + right < pChildCnt) {\n      const ins = [];\n      for (let i = left; i < pChildCnt - right; i++) {\n        ins.push(createTypeFromTextOrElementNode(pChildren[i], meta));\n      }\n      yDomFragment.insert(left, ins);\n    }\n  }, ySyncPluginKey);\n};\n\n/**\n * @function\n * @param {Y.XmlElement} yElement\n * @param {any} pNode Prosemirror Node\n */\nconst matchNodeName = (yElement, pNode) =>\n  !(pNode instanceof Array) && yElement.nodeName === pNode.type.name;\n\n/**\n * Either a node if type is YXmlElement or an Array of text nodes if YXmlText\n * @typedef {Map<Y.AbstractType, Node | Array<Node>>} ProsemirrorMapping\n */\n\n/**\n * Is null if no timeout is in progress.\n * Is defined if a timeout is in progress.\n * Maps from view\n * @type {Map<EditorView, Map<any, any>>|null}\n */\nlet viewsToUpdate = null;\n\nconst updateMetas = () => {\n  const ups = /** @type {Map<EditorView, Map<any, any>>} */ (viewsToUpdate);\n  viewsToUpdate = null;\n  ups.forEach((metas, view) => {\n    const tr = view.state.tr;\n    const syncState = ySyncPluginKey.getState(view.state);\n    if (syncState && syncState.binding && !syncState.binding.isDestroyed) {\n      metas.forEach((val, key) => {\n        tr.setMeta(key, val);\n      });\n      view.dispatch(tr);\n    }\n  });\n};\n\nconst setMeta = (view, key, value) => {\n  if (!viewsToUpdate) {\n    viewsToUpdate = new Map();\n    eventloop.timeout(0, updateMetas);\n  }\n  map.setIfUndefined(viewsToUpdate, view, map.create).set(key, value);\n};\n\n/**\n * Transforms a Prosemirror based absolute position to a Yjs Cursor (relative position in the Yjs model).\n *\n * @param {number} pos\n * @param {Y.XmlFragment} type\n * @param {ProsemirrorMapping} mapping\n * @return {any} relative position\n */\nconst absolutePositionToRelativePosition = (pos, type, mapping) => {\n  if (pos === 0) {\n    return Y.createRelativePositionFromTypeIndex(type, 0, -1)\n  }\n  /**\n   * @type {any}\n   */\n  let n = type._first === null ? null : /** @type {Y.ContentType} */ (type._first.content).type;\n  while (n !== null && type !== n) {\n    if (n instanceof Y.XmlText) {\n      if (n._length >= pos) {\n        return Y.createRelativePositionFromTypeIndex(n, pos, -1)\n      } else {\n        pos -= n._length;\n      }\n      if (n._item !== null && n._item.next !== null) {\n        n = /** @type {Y.ContentType} */ (n._item.next.content).type;\n      } else {\n        do {\n          n = n._item === null ? null : n._item.parent;\n          pos--;\n        } while (n !== type && n !== null && n._item !== null && n._item.next === null)\n        if (n !== null && n !== type) {\n          // @ts-gnore we know that n.next !== null because of above loop conditition\n          n = n._item === null ? null : /** @type {Y.ContentType} */ (/** @type Y.Item */ (n._item.next).content).type;\n        }\n      }\n    } else {\n      const pNodeSize = /** @type {any} */ (mapping.get(n) || { nodeSize: 0 }).nodeSize;\n      if (n._first !== null && pos < pNodeSize) {\n        n = /** @type {Y.ContentType} */ (n._first.content).type;\n        pos--;\n      } else {\n        if (pos === 1 && n._length === 0 && pNodeSize > 1) {\n          // edge case, should end in this paragraph\n          return new Y.RelativePosition(n._item === null ? null : n._item.id, n._item === null ? Y.findRootTypeKey(n) : null, null)\n        }\n        pos -= pNodeSize;\n        if (n._item !== null && n._item.next !== null) {\n          n = /** @type {Y.ContentType} */ (n._item.next.content).type;\n        } else {\n          if (pos === 0) {\n            // set to end of n.parent\n            n = n._item === null ? n : n._item.parent;\n            return new Y.RelativePosition(n._item === null ? null : n._item.id, n._item === null ? Y.findRootTypeKey(n) : null, null)\n          }\n          do {\n            n = /** @type {Y.Item} */ (n._item).parent;\n            pos--;\n          } while (n !== type && /** @type {Y.Item} */ (n._item).next === null)\n          // if n is null at this point, we have an unexpected case\n          if (n !== type) {\n            // We know that n._item.next is defined because of above loop condition\n            n = /** @type {Y.ContentType} */ (/** @type {Y.Item} */ (/** @type {Y.Item} */ (n._item).next).content).type;\n          }\n        }\n      }\n    }\n    if (n === null) {\n      throw error.unexpectedCase()\n    }\n    if (pos === 0 && n.constructor !== Y.XmlText && n !== type) { // TODO: set to <= 0\n      return createRelativePosition(n._item.parent, n._item)\n    }\n  }\n  return Y.createRelativePositionFromTypeIndex(type, type._length, -1)\n};\n\nconst createRelativePosition = (type, item) => {\n  let typeid = null;\n  let tname = null;\n  if (type._item === null) {\n    tname = Y.findRootTypeKey(type);\n  } else {\n    typeid = Y.createID(type._item.id.client, type._item.id.clock);\n  }\n  return new Y.RelativePosition(typeid, tname, item.id)\n};\n\n/**\n * @param {Y.Doc} y\n * @param {Y.XmlFragment} documentType Top level type that is bound to pView\n * @param {any} relPos Encoded Yjs based relative position\n * @param {ProsemirrorMapping} mapping\n * @return {null|number}\n */\nconst relativePositionToAbsolutePosition = (y, documentType, relPos, mapping) => {\n  const decodedPos = Y.createAbsolutePositionFromRelativePosition(relPos, y);\n  if (decodedPos === null || (decodedPos.type !== documentType && !Y.isParentOf(documentType, decodedPos.type._item))) {\n    return null\n  }\n  let type = decodedPos.type;\n  let pos = 0;\n  if (type.constructor === Y.XmlText) {\n    pos = decodedPos.index;\n  } else if (type._item === null || !type._item.deleted) {\n    let n = type._first;\n    let i = 0;\n    while (i < type._length && i < decodedPos.index && n !== null) {\n      if (!n.deleted) {\n        const t = /** @type {Y.ContentType} */ (n.content).type;\n        i++;\n        if (t instanceof Y.XmlText) {\n          pos += t._length;\n        } else {\n          pos += /** @type {any} */ (mapping.get(t)).nodeSize;\n        }\n      }\n      n = /** @type {Y.Item} */ (n.right);\n    }\n    pos += 1; // increase because we go out of n\n  }\n  while (type !== documentType && type._item !== null) {\n    // @ts-ignore\n    const parent = type._item.parent;\n    // @ts-ignore\n    if (parent._item === null || !parent._item.deleted) {\n      pos += 1; // the start tag\n      let n = /** @type {Y.AbstractType} */ (parent)._first;\n      // now iterate until we found type\n      while (n !== null) {\n        const contentType = /** @type {Y.ContentType} */ (n.content).type;\n        if (contentType === type) {\n          break\n        }\n        if (!n.deleted) {\n          if (contentType instanceof Y.XmlText) {\n            pos += contentType._length;\n          } else {\n            pos += /** @type {any} */ (mapping.get(contentType)).nodeSize;\n          }\n        }\n        n = n.right;\n      }\n    }\n    type = /** @type {Y.AbstractType} */ (parent);\n  }\n  return pos - 1 // we don't count the most outer tag, because it is a fragment\n};\n\n/**\n * Utility function for converting an Y.Fragment to a ProseMirror fragment.\n *\n * @param {Y.XmlFragment} yXmlFragment\n * @param {Schema} schema\n */\nconst yXmlFragmentToProseMirrorFragment = (yXmlFragment, schema) => {\n  const fragmentContent = yXmlFragment.toArray().map((t) =>\n    createNodeFromYElement(\n      /** @type {Y.XmlElement} */ (t),\n      schema,\n      createEmptyMeta()\n    )\n  ).filter((n) => n !== null);\n  return Fragment.fromArray(fragmentContent)\n};\n\n/**\n * Utility function for converting an Y.Fragment to a ProseMirror node.\n *\n * @param {Y.XmlFragment} yXmlFragment\n * @param {Schema} schema\n */\nconst yXmlFragmentToProseMirrorRootNode = (yXmlFragment, schema) =>\n  schema.topNodeType.create(null, yXmlFragmentToProseMirrorFragment(yXmlFragment, schema));\n\n/**\n * The initial ProseMirror content should be supplied by Yjs. This function transforms a Y.Fragment\n * to a ProseMirror Doc node and creates a mapping that is used by the sync plugin.\n *\n * @param {Y.XmlFragment} yXmlFragment\n * @param {Schema} schema\n *\n * @todo deprecate mapping property\n */\nconst initProseMirrorDoc = (yXmlFragment, schema) => {\n  const meta = createEmptyMeta();\n  const fragmentContent = yXmlFragment.toArray().map((t) =>\n    createNodeFromYElement(\n      /** @type {Y.XmlElement} */ (t),\n      schema,\n      meta\n    )\n  ).filter((n) => n !== null);\n  const doc = schema.topNodeType.create(null, Fragment.fromArray(fragmentContent));\n  return { doc, meta, mapping: meta.mapping }\n};\n\n/**\n * Utility method to convert a Prosemirror Doc Node into a Y.Doc.\n *\n * This can be used when importing existing content to Y.Doc for the first time,\n * note that this should not be used to rehydrate a Y.Doc from a database once\n * collaboration has begun as all history will be lost\n *\n * @param {Node} doc\n * @param {string} xmlFragment\n * @return {Y.Doc}\n */\nfunction prosemirrorToYDoc (doc, xmlFragment = 'prosemirror') {\n  const ydoc = new Y.Doc();\n  const type = /** @type {Y.XmlFragment} */ (ydoc.get(xmlFragment, Y.XmlFragment));\n  if (!type.doc) {\n    return ydoc\n  }\n\n  prosemirrorToYXmlFragment(doc, type);\n  return type.doc\n}\n\n/**\n * Utility method to update an empty Y.XmlFragment with content from a Prosemirror Doc Node.\n *\n * This can be used when importing existing content to Y.Doc for the first time,\n * note that this should not be used to rehydrate a Y.Doc from a database once\n * collaboration has begun as all history will be lost\n *\n * Note: The Y.XmlFragment does not need to be part of a Y.Doc document at the time that this\n * method is called, but it must be added before any other operations are performed on it.\n *\n * @param {Node} doc prosemirror document.\n * @param {Y.XmlFragment} [xmlFragment] If supplied, an xml fragment to be\n *   populated from the prosemirror state; otherwise a new XmlFragment will be created.\n * @return {Y.XmlFragment}\n */\nfunction prosemirrorToYXmlFragment (doc, xmlFragment) {\n  const type = xmlFragment || new Y.XmlFragment();\n  const ydoc = type.doc ? type.doc : { transact: (transaction) => transaction(undefined) };\n  updateYFragment(ydoc, type, doc, { mapping: new Map(), isOMark: new Map() });\n  return type\n}\n\n/**\n * Utility method to convert Prosemirror compatible JSON into a Y.Doc.\n *\n * This can be used when importing existing content to Y.Doc for the first time,\n * note that this should not be used to rehydrate a Y.Doc from a database once\n * collaboration has begun as all history will be lost\n *\n * @param {Schema} schema\n * @param {any} state\n * @param {string} xmlFragment\n * @return {Y.Doc}\n */\nfunction prosemirrorJSONToYDoc (schema, state, xmlFragment = 'prosemirror') {\n  const doc = Node.fromJSON(schema, state);\n  return prosemirrorToYDoc(doc, xmlFragment)\n}\n\n/**\n * Utility method to convert Prosemirror compatible JSON to a Y.XmlFragment\n *\n * This can be used when importing existing content to Y.Doc for the first time,\n * note that this should not be used to rehydrate a Y.Doc from a database once\n * collaboration has begun as all history will be lost\n *\n * @param {Schema} schema\n * @param {any} state\n * @param {Y.XmlFragment} [xmlFragment] If supplied, an xml fragment to be\n *   populated from the prosemirror state; otherwise a new XmlFragment will be created.\n * @return {Y.XmlFragment}\n */\nfunction prosemirrorJSONToYXmlFragment (schema, state, xmlFragment) {\n  const doc = Node.fromJSON(schema, state);\n  return prosemirrorToYXmlFragment(doc, xmlFragment)\n}\n\n/**\n * @deprecated Use `yXmlFragmentToProseMirrorRootNode` instead\n *\n * Utility method to convert a Y.Doc to a Prosemirror Doc node.\n *\n * @param {Schema} schema\n * @param {Y.Doc} ydoc\n * @return {Node}\n */\nfunction yDocToProsemirror (schema, ydoc) {\n  const state = yDocToProsemirrorJSON(ydoc);\n  return Node.fromJSON(schema, state)\n}\n\n/**\n *\n * @deprecated Use `yXmlFragmentToProseMirrorRootNode` instead\n *\n * Utility method to convert a Y.XmlFragment to a Prosemirror Doc node.\n *\n * @param {Schema} schema\n * @param {Y.XmlFragment} xmlFragment\n * @return {Node}\n */\nfunction yXmlFragmentToProsemirror (schema, xmlFragment) {\n  const state = yXmlFragmentToProsemirrorJSON(xmlFragment);\n  return Node.fromJSON(schema, state)\n}\n\n/**\n *\n * @deprecated Use `yXmlFragmentToProseMirrorRootNode` instead\n *\n * Utility method to convert a Y.Doc to Prosemirror compatible JSON.\n *\n * @param {Y.Doc} ydoc\n * @param {string} xmlFragment\n * @return {Record<string, any>}\n */\nfunction yDocToProsemirrorJSON (\n  ydoc,\n  xmlFragment = 'prosemirror'\n) {\n  return yXmlFragmentToProsemirrorJSON(ydoc.getXmlFragment(xmlFragment))\n}\n\n/**\n * @deprecated Use `yXmlFragmentToProseMirrorRootNode` instead\n *\n * Utility method to convert a Y.Doc to Prosemirror compatible JSON.\n *\n * @param {Y.XmlFragment} xmlFragment The fragment, which must be part of a Y.Doc.\n * @return {Record<string, any>}\n */\nfunction yXmlFragmentToProsemirrorJSON (xmlFragment) {\n  const items = xmlFragment.toArray();\n\n  /**\n   * @param {Y.AbstractType} item\n   */\n  const serialize = item => {\n    /**\n     * @type {Object} NodeObject\n     * @property {string} NodeObject.type\n     * @property {Record<string, string>=} NodeObject.attrs\n     * @property {Array<NodeObject>=} NodeObject.content\n     */\n    let response;\n\n    // TODO: Must be a better way to detect text nodes than this\n    if (item instanceof Y.XmlText) {\n      const delta = item.toDelta();\n      response = delta.map(/** @param {any} d */ (d) => {\n        const text = {\n          type: 'text',\n          text: d.insert\n        };\n        if (d.attributes) {\n          text.marks = Object.keys(d.attributes).map((type_) => {\n            const attrs = d.attributes[type_];\n            const type = yattr2markname(type_);\n            const mark = {\n              type\n            };\n            if (Object.keys(attrs)) {\n              mark.attrs = attrs;\n            }\n            return mark\n          });\n        }\n        return text\n      });\n    } else if (item instanceof Y.XmlElement) {\n      response = {\n        type: item.nodeName\n      };\n\n      const attrs = item.getAttributes();\n      if (Object.keys(attrs).length) {\n        response.attrs = attrs;\n      }\n\n      const children = item.toArray();\n      if (children.length) {\n        response.content = children.map(serialize).flat();\n      }\n    } else {\n      // expected either Y.XmlElement or Y.XmlText\n      error.unexpectedCase();\n    }\n\n    return response\n  };\n\n  return {\n    type: 'doc',\n    content: items.map(serialize)\n  }\n}\n\n/**\n * Default awareness state filter\n *\n * @param {number} currentClientId current client id\n * @param {number} userClientId user client id\n * @param {any} _user user data\n * @return {boolean}\n */\nconst defaultAwarenessStateFilter = (currentClientId, userClientId, _user) => currentClientId !== userClientId;\n\n/**\n * Default generator for a cursor element\n *\n * @param {any} user user data\n * @return {HTMLElement}\n */\nconst defaultCursorBuilder = (user) => {\n  const cursor = document.createElement('span');\n  cursor.classList.add('ProseMirror-yjs-cursor');\n  cursor.setAttribute('style', `border-color: ${user.color}`);\n  const userDiv = document.createElement('div');\n  userDiv.setAttribute('style', `background-color: ${user.color}`);\n  userDiv.insertBefore(document.createTextNode(user.name), null);\n  const nonbreakingSpace1 = document.createTextNode('\\u2060');\n  const nonbreakingSpace2 = document.createTextNode('\\u2060');\n  cursor.insertBefore(nonbreakingSpace1, null);\n  cursor.insertBefore(userDiv, null);\n  cursor.insertBefore(nonbreakingSpace2, null);\n  return cursor\n};\n\n/**\n * Default generator for the selection attributes\n *\n * @param {any} user user data\n * @return {import('prosemirror-view').DecorationAttrs}\n */\nconst defaultSelectionBuilder = (user) => {\n  return {\n    style: `background-color: ${user.color}70`,\n    class: 'ProseMirror-yjs-selection'\n  }\n};\n\nconst rxValidColor = /^#[0-9a-fA-F]{6}$/;\n\n/**\n * @param {any} state\n * @param {Awareness} awareness\n * @param {function(number, number, any):boolean} awarenessFilter\n * @param {(user: { name: string, color: string }, clientId: number) => Element} createCursor\n * @param {(user: { name: string, color: string }, clientId: number) => import('prosemirror-view').DecorationAttrs} createSelection\n * @return {any} DecorationSet\n */\nconst createDecorations = (\n  state,\n  awareness,\n  awarenessFilter,\n  createCursor,\n  createSelection\n) => {\n  const ystate = ySyncPluginKey.getState(state);\n  const y = ystate.doc;\n  const decorations = [];\n  if (\n    ystate.snapshot != null || ystate.prevSnapshot != null ||\n    ystate.binding.mapping.size === 0\n  ) {\n    // do not render cursors while snapshot is active\n    return DecorationSet.create(state.doc, [])\n  }\n  awareness.getStates().forEach((aw, clientId) => {\n    if (!awarenessFilter(y.clientID, clientId, aw)) {\n      return\n    }\n\n    if (aw.cursor != null) {\n      const user = aw.user || {};\n      if (user.color == null) {\n        user.color = '#ffa500';\n      } else if (!rxValidColor.test(user.color)) {\n        // We only support 6-digit RGB colors in y-prosemirror\n        console.warn('A user uses an unsupported color format', user);\n      }\n      if (user.name == null) {\n        user.name = `User: ${clientId}`;\n      }\n      let anchor = relativePositionToAbsolutePosition(\n        y,\n        ystate.type,\n        Y.createRelativePositionFromJSON(aw.cursor.anchor),\n        ystate.binding.mapping\n      );\n      let head = relativePositionToAbsolutePosition(\n        y,\n        ystate.type,\n        Y.createRelativePositionFromJSON(aw.cursor.head),\n        ystate.binding.mapping\n      );\n      if (anchor !== null && head !== null) {\n        const maxsize = math.max(state.doc.content.size - 1, 0);\n        anchor = math.min(anchor, maxsize);\n        head = math.min(head, maxsize);\n        decorations.push(\n          Decoration.widget(head, () => createCursor(user, clientId), {\n            key: clientId + '',\n            side: 10\n          })\n        );\n        const from = math.min(anchor, head);\n        const to = math.max(anchor, head);\n        decorations.push(\n          Decoration.inline(from, to, createSelection(user, clientId), {\n            inclusiveEnd: true,\n            inclusiveStart: false\n          })\n        );\n      }\n    }\n  });\n  return DecorationSet.create(state.doc, decorations)\n};\n\n/**\n * A prosemirror plugin that listens to awareness information on Yjs.\n * This requires that a `prosemirrorPlugin` is also bound to the prosemirror.\n *\n * @public\n * @param {Awareness} awareness\n * @param {object} opts\n * @param {function(any, any, any):boolean} [opts.awarenessStateFilter]\n * @param {(user: any, clientId: number) => HTMLElement} [opts.cursorBuilder]\n * @param {(user: any, clientId: number) => import('prosemirror-view').DecorationAttrs} [opts.selectionBuilder]\n * @param {function(any):any} [opts.getSelection]\n * @param {string} [cursorStateField] By default all editor bindings use the awareness 'cursor' field to propagate cursor information.\n * @return {any}\n */\nconst yCursorPlugin = (\n  awareness,\n  {\n    awarenessStateFilter = defaultAwarenessStateFilter,\n    cursorBuilder = defaultCursorBuilder,\n    selectionBuilder = defaultSelectionBuilder,\n    getSelection = (state) => state.selection\n  } = {},\n  cursorStateField = 'cursor'\n) =>\n  new Plugin({\n    key: yCursorPluginKey,\n    state: {\n      init (_, state) {\n        return createDecorations(\n          state,\n          awareness,\n          awarenessStateFilter,\n          cursorBuilder,\n          selectionBuilder\n        )\n      },\n      apply (tr, prevState, _oldState, newState) {\n        const ystate = ySyncPluginKey.getState(newState);\n        const yCursorState = tr.getMeta(yCursorPluginKey);\n        if (\n          (ystate && ystate.isChangeOrigin) ||\n          (yCursorState && yCursorState.awarenessUpdated)\n        ) {\n          return createDecorations(\n            newState,\n            awareness,\n            awarenessStateFilter,\n            cursorBuilder,\n            selectionBuilder\n          )\n        }\n        return prevState.map(tr.mapping, tr.doc)\n      }\n    },\n    props: {\n      decorations: (state) => {\n        return yCursorPluginKey.getState(state)\n      }\n    },\n    view: (view) => {\n      const awarenessListener = () => {\n        // @ts-ignore\n        if (view.docView) {\n          setMeta(view, yCursorPluginKey, { awarenessUpdated: true });\n        }\n      };\n      const updateCursorInfo = () => {\n        const ystate = ySyncPluginKey.getState(view.state);\n        // @note We make implicit checks when checking for the cursor property\n        const current = awareness.getLocalState() || {};\n        if (view.hasFocus()) {\n          const selection = getSelection(view.state);\n          /**\n           * @type {Y.RelativePosition}\n           */\n          const anchor = absolutePositionToRelativePosition(\n            selection.anchor,\n            ystate.type,\n            ystate.binding.mapping\n          );\n          /**\n           * @type {Y.RelativePosition}\n           */\n          const head = absolutePositionToRelativePosition(\n            selection.head,\n            ystate.type,\n            ystate.binding.mapping\n          );\n          if (\n            current.cursor == null ||\n            !Y.compareRelativePositions(\n              Y.createRelativePositionFromJSON(current.cursor.anchor),\n              anchor\n            ) ||\n            !Y.compareRelativePositions(\n              Y.createRelativePositionFromJSON(current.cursor.head),\n              head\n            )\n          ) {\n            awareness.setLocalStateField(cursorStateField, {\n              anchor,\n              head\n            });\n          }\n        } else if (\n          current.cursor != null &&\n          relativePositionToAbsolutePosition(\n            ystate.doc,\n            ystate.type,\n            Y.createRelativePositionFromJSON(current.cursor.anchor),\n            ystate.binding.mapping\n          ) !== null\n        ) {\n          // delete cursor information if current cursor information is owned by this editor binding\n          awareness.setLocalStateField(cursorStateField, null);\n        }\n      };\n      awareness.on('change', awarenessListener);\n      view.dom.addEventListener('focusin', updateCursorInfo);\n      view.dom.addEventListener('focusout', updateCursorInfo);\n      return {\n        update: updateCursorInfo,\n        destroy: () => {\n          view.dom.removeEventListener('focusin', updateCursorInfo);\n          view.dom.removeEventListener('focusout', updateCursorInfo);\n          awareness.off('change', awarenessListener);\n          awareness.setLocalStateField(cursorStateField, null);\n        }\n      }\n    }\n  });\n\nconst undo = state => {\n  const undoManager = yUndoPluginKey.getState(state).undoManager;\n  if (undoManager != null) {\n    undoManager.undo();\n    return true\n  }\n};\n\nconst redo = state => {\n  const undoManager = yUndoPluginKey.getState(state).undoManager;\n  if (undoManager != null) {\n    undoManager.redo();\n    return true\n  }\n};\n\nconst defaultProtectedNodes = new Set(['paragraph']);\n\nconst defaultDeleteFilter = (item, protectedNodes) => !(item instanceof Item) ||\n!(item.content instanceof ContentType) ||\n!(item.content.type instanceof Text ||\n  (item.content.type instanceof XmlElement && protectedNodes.has(item.content.type.nodeName))) ||\nitem.content.type._length === 0;\n\nconst yUndoPlugin = ({ protectedNodes = defaultProtectedNodes, trackedOrigins = [], undoManager = null } = {}) => new Plugin({\n  key: yUndoPluginKey,\n  state: {\n    init: (initargs, state) => {\n      // TODO: check if plugin order matches and fix\n      const ystate = ySyncPluginKey.getState(state);\n      const _undoManager = undoManager || new UndoManager(ystate.type, {\n        trackedOrigins: new Set([ySyncPluginKey].concat(trackedOrigins)),\n        deleteFilter: (item) => defaultDeleteFilter(item, protectedNodes),\n        captureTransaction: tr => tr.meta.get('addToHistory') !== false\n      });\n      return {\n        undoManager: _undoManager,\n        prevSel: null,\n        hasUndoOps: _undoManager.undoStack.length > 0,\n        hasRedoOps: _undoManager.redoStack.length > 0\n      }\n    },\n    /**\n     * @returns {any}\n     */\n    apply: (tr, val, oldState, state) => {\n      const binding = ySyncPluginKey.getState(state).binding;\n      const undoManager = val.undoManager;\n      const hasUndoOps = undoManager.undoStack.length > 0;\n      const hasRedoOps = undoManager.redoStack.length > 0;\n      if (binding) {\n        return {\n          undoManager,\n          prevSel: getRelativeSelection(binding, oldState),\n          hasUndoOps,\n          hasRedoOps\n        }\n      } else {\n        if (hasUndoOps !== val.hasUndoOps || hasRedoOps !== val.hasRedoOps) {\n          return Object.assign({}, val, {\n            hasUndoOps: undoManager.undoStack.length > 0,\n            hasRedoOps: undoManager.redoStack.length > 0\n          })\n        } else { // nothing changed\n          return val\n        }\n      }\n    }\n  },\n  view: view => {\n    const ystate = ySyncPluginKey.getState(view.state);\n    const undoManager = yUndoPluginKey.getState(view.state).undoManager;\n    undoManager.on('stack-item-added', ({ stackItem }) => {\n      const binding = ystate.binding;\n      if (binding) {\n        stackItem.meta.set(binding, yUndoPluginKey.getState(view.state).prevSel);\n      }\n    });\n    undoManager.on('stack-item-popped', ({ stackItem }) => {\n      const binding = ystate.binding;\n      if (binding) {\n        binding.beforeTransactionSelection = stackItem.meta.get(binding) || binding.beforeTransactionSelection;\n      }\n    });\n    return {\n      destroy: () => {\n        undoManager.destroy();\n      }\n    }\n  }\n});\n\nexport { ProsemirrorBinding, absolutePositionToRelativePosition, createDecorations, defaultAwarenessStateFilter, defaultCursorBuilder, defaultDeleteFilter, defaultProtectedNodes, defaultSelectionBuilder, getRelativeSelection, initProseMirrorDoc, isVisible, prosemirrorJSONToYDoc, prosemirrorJSONToYXmlFragment, prosemirrorToYDoc, prosemirrorToYXmlFragment, redo, relativePositionToAbsolutePosition, setMeta, undo, updateYFragment, yCursorPlugin, yCursorPluginKey, yDocToProsemirror, yDocToProsemirrorJSON, ySyncPlugin, ySyncPluginKey, yUndoPlugin, yUndoPluginKey, yXmlFragmentToProseMirrorFragment, yXmlFragmentToProseMirrorRootNode, yXmlFragmentToProsemirror, yXmlFragmentToProsemirrorJSON };\n//# sourceMappingURL=y-tiptap.js.map\n","// src/collaboration.ts\nimport { Extension } from \"@tiptap/core\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { redo, undo, ySyncPlugin, yUndoPlugin, yUndoPluginKey, yXmlFragmentToProsemirrorJSON } from \"@tiptap/y-tiptap\";\nvar Collaboration = Extension.create({\n  name: \"collaboration\",\n  priority: 1e3,\n  addOptions() {\n    return {\n      document: null,\n      field: \"default\",\n      fragment: null,\n      provider: null\n    };\n  },\n  addStorage() {\n    return {\n      isDisabled: false\n    };\n  },\n  onCreate() {\n    if (this.editor.extensionManager.extensions.find((extension) => extension.name === \"undoRedo\")) {\n      console.warn(\n        '[tiptap warn]: \"@tiptap/extension-collaboration\" comes with its own history support and is not compatible with \"@tiptap/extension-undo-redo\".'\n      );\n    }\n  },\n  addCommands() {\n    return {\n      undo: () => ({ tr, state, dispatch }) => {\n        tr.setMeta(\"preventDispatch\", true);\n        const undoManager = yUndoPluginKey.getState(state).undoManager;\n        if (undoManager.undoStack.length === 0) {\n          return false;\n        }\n        if (!dispatch) {\n          return true;\n        }\n        return undo(state);\n      },\n      redo: () => ({ tr, state, dispatch }) => {\n        tr.setMeta(\"preventDispatch\", true);\n        const undoManager = yUndoPluginKey.getState(state).undoManager;\n        if (undoManager.redoStack.length === 0) {\n          return false;\n        }\n        if (!dispatch) {\n          return true;\n        }\n        return redo(state);\n      }\n    };\n  },\n  addKeyboardShortcuts() {\n    return {\n      \"Mod-z\": () => this.editor.commands.undo(),\n      \"Mod-y\": () => this.editor.commands.redo(),\n      \"Shift-Mod-z\": () => this.editor.commands.redo()\n    };\n  },\n  addProseMirrorPlugins() {\n    var _a;\n    const fragment = this.options.fragment ? this.options.fragment : this.options.document.getXmlFragment(this.options.field);\n    const yUndoPluginInstance = yUndoPlugin(this.options.yUndoOptions);\n    const originalUndoPluginView = yUndoPluginInstance.spec.view;\n    yUndoPluginInstance.spec.view = (view) => {\n      const { undoManager } = yUndoPluginKey.getState(view.state);\n      if (undoManager.restore) {\n        undoManager.restore();\n        undoManager.restore = () => {\n        };\n      }\n      const viewRet = originalUndoPluginView ? originalUndoPluginView(view) : void 0;\n      return {\n        destroy: () => {\n          const hasUndoManSelf = undoManager.trackedOrigins.has(undoManager);\n          const observers = undoManager._observers;\n          undoManager.restore = () => {\n            if (hasUndoManSelf) {\n              undoManager.trackedOrigins.add(undoManager);\n            }\n            undoManager.doc.on(\"afterTransaction\", undoManager.afterTransactionHandler);\n            undoManager._observers = observers;\n          };\n          if (viewRet == null ? void 0 : viewRet.destroy) {\n            viewRet.destroy();\n          }\n        }\n      };\n    };\n    const ySyncPluginOptions = {\n      ...this.options.ySyncOptions,\n      onFirstRender: this.options.onFirstRender\n    };\n    const ySyncPluginInstance = ySyncPlugin(fragment, ySyncPluginOptions);\n    if (this.editor.options.enableContentCheck) {\n      (_a = fragment.doc) == null ? void 0 : _a.on(\"beforeTransaction\", () => {\n        try {\n          const jsonContent = yXmlFragmentToProsemirrorJSON(fragment);\n          if (jsonContent.content.length === 0) {\n            return;\n          }\n          this.editor.schema.nodeFromJSON(jsonContent).check();\n        } catch (error) {\n          this.editor.emit(\"contentError\", {\n            error,\n            editor: this.editor,\n            disableCollaboration: () => {\n              var _a2;\n              (_a2 = fragment.doc) == null ? void 0 : _a2.destroy();\n              this.storage.isDisabled = true;\n            }\n          });\n          return false;\n        }\n      });\n    }\n    return [\n      ySyncPluginInstance,\n      yUndoPluginInstance,\n      // Only add the filterInvalidContent plugin if content checking is enabled\n      this.editor.options.enableContentCheck && new Plugin({\n        key: new PluginKey(\"filterInvalidContent\"),\n        filterTransaction: () => {\n          var _a2;\n          if (this.storage.isDisabled !== false) {\n            (_a2 = fragment.doc) == null ? void 0 : _a2.destroy();\n            return true;\n          }\n          return true;\n        }\n      })\n    ].filter(Boolean);\n  }\n});\n\n// src/helpers/isChangeOrigin.ts\nimport { ySyncPluginKey } from \"@tiptap/y-tiptap\";\nfunction isChangeOrigin(transaction) {\n  return !!transaction.getMeta(ySyncPluginKey);\n}\n\n// src/index.ts\nvar index_default = Collaboration;\nexport {\n  Collaboration,\n  index_default as default,\n  isChangeOrigin\n};\n//# sourceMappingURL=index.js.map","\"use client\"\n\nimport * as React from \"react\"\nimport type { UseDismissProps, UseFloatingOptions } from \"@floating-ui/react\"\nimport {\n  useDismiss,\n  useFloating,\n  useInteractions,\n  useTransitionStyles,\n} from \"@floating-ui/react\"\n\ninterface FloatingElementReturn {\n  /**\n   * Whether the floating element is currently mounted in the DOM.\n   */\n  isMounted: boolean\n  /**\n   * Ref function to attach to the floating element DOM node.\n   */\n  ref: (node: HTMLElement | null) => void\n  /**\n   * Combined styles for positioning, transitions, and z-index.\n   */\n  style: React.CSSProperties\n  /**\n   * Function to manually trigger position updates of the floating element.\n   */\n  update: () => void\n  /**\n   * Returns props that should be spread onto the floating element.\n   */\n  getFloatingProps: (\n    userProps?: React.HTMLProps<HTMLElement>\n  ) => Record<string, unknown>\n  /**\n   * Returns props that should be spread onto the reference element.\n   */\n  getReferenceProps: (\n    userProps?: React.HTMLProps<Element>\n  ) => Record<string, unknown>\n}\n\n/**\n * Custom hook for creating and managing floating elements relative to a reference position\n *\n * @param show - Boolean controlling visibility of the floating element\n * @param referencePos - DOMRect representing the position to anchor the floating element to\n * @param zIndex - Z-index value for the floating element\n * @param options - Additional options to pass to the underlying useFloating hook\n * @returns Object containing properties and methods to control the floating element\n */\nexport function useFloatingElement(\n  show: boolean,\n  referencePos: DOMRect | null,\n  zIndex: number,\n  options?: Partial<UseFloatingOptions & { dismissOptions?: UseDismissProps }>\n): FloatingElementReturn {\n  const { dismissOptions, ...floatingOptions } = options || {}\n\n  const { refs, update, context, floatingStyles } = useFloating({\n    open: show,\n    ...floatingOptions,\n  })\n\n  const { isMounted, styles } = useTransitionStyles(context)\n\n  const dismiss = useDismiss(context, dismissOptions)\n\n  const { getReferenceProps, getFloatingProps } = useInteractions([dismiss])\n\n  React.useEffect(() => {\n    update()\n  }, [referencePos, update])\n\n  React.useEffect(() => {\n    if (referencePos === null) {\n      return\n    }\n\n    refs.setReference({\n      getBoundingClientRect: () => referencePos,\n    })\n  }, [referencePos, refs])\n\n  return React.useMemo(\n    () => ({\n      isMounted,\n      ref: refs.setFloating,\n      style: {\n        ...styles,\n        ...floatingStyles,\n        zIndex,\n      },\n      update,\n      getFloatingProps,\n      getReferenceProps,\n    }),\n    [\n      floatingStyles,\n      isMounted,\n      refs.setFloating,\n      styles,\n      update,\n      zIndex,\n      getFloatingProps,\n      getReferenceProps,\n    ]\n  )\n}\n","import * as React from \"react\"\nimport type { Editor } from \"@tiptap/react\"\n\ntype Orientation = \"horizontal\" | \"vertical\" | \"both\"\n\ninterface MenuNavigationOptions<T> {\n  /**\n   * The Tiptap editor instance, if using with a Tiptap editor.\n   */\n  editor?: Editor | null\n  /**\n   * Reference to the container element for handling keyboard events.\n   */\n  containerRef?: React.RefObject<HTMLElement | null>\n  /**\n   * Search query that affects the selected item.\n   */\n  query?: string\n  /**\n   * Array of items to navigate through.\n   */\n  items: T[]\n  /**\n   * Callback fired when an item is selected.\n   */\n  onSelect?: (item: T) => void\n  /**\n   * Callback fired when the menu should close.\n   */\n  onClose?: () => void\n  /**\n   * The navigation orientation of the menu.\n   * @default \"vertical\"\n   */\n  orientation?: Orientation\n  /**\n   * Whether to automatically select the first item when the menu opens.\n   * @default true\n   */\n  autoSelectFirstItem?: boolean\n}\n\n/**\n * Hook that implements keyboard navigation for dropdown menus and command palettes.\n *\n * Handles arrow keys, tab, home/end, enter for selection, and escape to close.\n * Works with both Tiptap editors and regular DOM elements.\n *\n * @param options - Configuration options for the menu navigation\n * @returns Object containing the selected index and a setter function\n */\nexport function useMenuNavigation<T>({\n  editor,\n  containerRef,\n  query,\n  items,\n  onSelect,\n  onClose,\n  orientation = \"vertical\",\n  autoSelectFirstItem = true,\n}: MenuNavigationOptions<T>) {\n  const [selectedIndex, setSelectedIndex] = React.useState<number>(\n    autoSelectFirstItem ? 0 : -1\n  )\n\n  React.useEffect(() => {\n    const handleKeyboardNavigation = (event: KeyboardEvent) => {\n      if (!items.length) return false\n\n      const moveNext = () =>\n        setSelectedIndex((currentIndex) => {\n          if (currentIndex === -1) return 0\n          return (currentIndex + 1) % items.length\n        })\n\n      const movePrev = () =>\n        setSelectedIndex((currentIndex) => {\n          if (currentIndex === -1) return items.length - 1\n          return (currentIndex - 1 + items.length) % items.length\n        })\n\n      switch (event.key) {\n        case \"ArrowUp\": {\n          if (orientation === \"horizontal\") return false\n          event.preventDefault()\n          movePrev()\n          return true\n        }\n\n        case \"ArrowDown\": {\n          if (orientation === \"horizontal\") return false\n          event.preventDefault()\n          moveNext()\n          return true\n        }\n\n        case \"ArrowLeft\": {\n          if (orientation === \"vertical\") return false\n          event.preventDefault()\n          movePrev()\n          return true\n        }\n\n        case \"ArrowRight\": {\n          if (orientation === \"vertical\") return false\n          event.preventDefault()\n          moveNext()\n          return true\n        }\n\n        case \"Tab\": {\n          event.preventDefault()\n          if (event.shiftKey) {\n            movePrev()\n          } else {\n            moveNext()\n          }\n          return true\n        }\n\n        case \"Home\": {\n          event.preventDefault()\n          setSelectedIndex(0)\n          return true\n        }\n\n        case \"End\": {\n          event.preventDefault()\n          setSelectedIndex(items.length - 1)\n          return true\n        }\n\n        case \"Enter\": {\n          if (event.isComposing) return false\n          event.preventDefault()\n          if (selectedIndex !== -1 && items[selectedIndex]) {\n            onSelect?.(items[selectedIndex])\n          }\n          return true\n        }\n\n        case \"Escape\": {\n          event.preventDefault()\n          onClose?.()\n          return true\n        }\n\n        default:\n          return false\n      }\n    }\n\n    let targetElement: HTMLElement | null = null\n\n    if (editor) {\n      targetElement = editor.view.dom\n    } else if (containerRef?.current) {\n      targetElement = containerRef.current\n    }\n\n    if (targetElement) {\n      targetElement.addEventListener(\"keydown\", handleKeyboardNavigation, true)\n\n      return () => {\n        targetElement?.removeEventListener(\n          \"keydown\",\n          handleKeyboardNavigation,\n          true\n        )\n      }\n    }\n\n    return undefined\n  }, [\n    editor,\n    containerRef,\n    items,\n    selectedIndex,\n    onSelect,\n    onClose,\n    orientation,\n  ])\n\n  React.useEffect(() => {\n    if (query) {\n      setSelectedIndex(autoSelectFirstItem ? 0 : -1)\n    }\n  }, [query, autoSelectFirstItem])\n\n  return {\n    selectedIndex: items.length ? selectedIndex : undefined,\n    setSelectedIndex,\n  }\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport type { Editor } from \"@tiptap/react\"\nimport { useCurrentEditor, useEditorState } from \"@tiptap/react\"\n\n/**\n * Hook that provides access to a Tiptap editor instance.\n *\n * Accepts an optional editor instance directly, or falls back to retrieving\n * the editor from the Tiptap context if available. This allows components\n * to work both when given an editor directly and when used within a Tiptap\n * editor context.\n *\n * @param providedEditor - Optional editor instance to use instead of the context editor\n * @returns The provided editor or the editor from context, whichever is available\n */\nexport function useTiptapEditor(providedEditor?: Editor | null): {\n  editor: Editor | null\n  editorState?: Editor[\"state\"]\n  canCommand?: Editor[\"can\"]\n} {\n  const { editor: coreEditor } = useCurrentEditor()\n  const mainEditor = React.useMemo(\n    () => providedEditor || coreEditor,\n    [providedEditor, coreEditor]\n  )\n\n  const editorState = useEditorState({\n    editor: mainEditor,\n    selector(context) {\n      if (!context.editor) {\n        return {\n          editor: null,\n          editorState: undefined,\n          canCommand: undefined,\n        }\n      }\n\n      return {\n        editor: context.editor,\n        editorState: context.editor.state,\n        canCommand: context.editor.can,\n      }\n    },\n  })\n\n  return editorState || { editor: null }\n}\n","import type { Node } from \"@tiptap/pm/model\"\nimport type { SuggestionItem } from \"./suggestion-menu-types\"\n\n/**\n * Calculates the start position of a suggestion command in the text.\n *\n * @param cursorPosition Current cursor position\n * @param previousNode Node before the cursor\n * @param triggerChar Character that triggers the suggestion\n * @returns The position where the command starts\n */\nexport function calculateStartPosition(\n  cursorPosition: number,\n  previousNode: Node | null,\n  triggerChar?: string\n): number {\n  if (!previousNode?.text || !triggerChar) {\n    return cursorPosition\n  }\n\n  const commandText = previousNode.text\n  const triggerCharIndex = commandText.lastIndexOf(triggerChar)\n\n  if (triggerCharIndex === -1) {\n    return cursorPosition\n  }\n\n  const textLength = commandText.substring(triggerCharIndex).length\n\n  return cursorPosition - textLength\n}\n\n/**\n * Filters and sorts suggestion items based on a search query.\n *\n * @param items List of suggestion items to filter\n * @param query Search query string\n * @returns Filtered and sorted list of suggestions\n */\nexport function filterSuggestionItems(items: SuggestionItem[], query: string) {\n  const normalizedQuery = query.trim().toLowerCase()\n\n  if (!normalizedQuery) {\n    return items\n  }\n\n  return items\n    .filter((item) => {\n      if (item.title.toLowerCase().includes(normalizedQuery)) {\n        return true\n      }\n\n      if (item.subtext?.toLowerCase().includes(normalizedQuery)) {\n        return true\n      }\n\n      if (\n        item.keywords?.some((keyword) =>\n          keyword.toLowerCase().includes(normalizedQuery)\n        )\n      ) {\n        return true\n      }\n\n      return false\n    })\n    .sort((a, b) => {\n      // Prioritize exact matches and \"starts with\" matches\n      const aTitle = a.title.toLowerCase()\n      const bTitle = b.title.toLowerCase()\n\n      if (aTitle === normalizedQuery && bTitle !== normalizedQuery) return -1\n      if (bTitle === normalizedQuery && aTitle !== normalizedQuery) return 1\n      if (\n        aTitle.startsWith(normalizedQuery) &&\n        !bTitle.startsWith(normalizedQuery)\n      )\n        return -1\n      if (\n        bTitle.startsWith(normalizedQuery) &&\n        !aTitle.startsWith(normalizedQuery)\n      )\n        return 1\n\n      return 0\n    })\n}\n","import * as React from \"react\"\nimport { flip, offset, shift, size } from \"@floating-ui/react\"\nimport { PluginKey } from \"@tiptap/pm/state\"\n\n// --- Hooks ---\nimport { useFloatingElement } from \"@/hooks/use-floating-element\"\nimport { useMenuNavigation } from \"@/hooks/use-menu-navigation\"\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap Editor ---\nimport type { Range } from \"@tiptap/react\"\n\n// --- Tiptap UI ---\nimport { Suggestion } from \"@tiptap/suggestion\"\n\n// --- UI Primitives ---\nimport {\n  SuggestionPluginKey,\n  type SuggestionKeyDownProps,\n  type SuggestionProps,\n} from \"@tiptap/suggestion\"\n\nimport { calculateStartPosition } from \"./suggestion-menu-utils\"\nimport type {\n  SuggestionItem,\n  SuggestionMenuProps,\n} from \"./suggestion-menu-types\"\n\n/**\n * A component that renders a suggestion menu for Tiptap editors.\n * Displays a floating menu when a trigger character is typed.\n */\nexport const SuggestionMenu = ({\n  editor: providedEditor,\n  floatingOptions,\n  selector = \"tiptap-suggestion-menu\",\n  children,\n  maxHeight = 384,\n  pluginKey = SuggestionPluginKey,\n  ...internalSuggestionProps\n}: SuggestionMenuProps) => {\n  const { editor } = useTiptapEditor(providedEditor)\n\n  const [show, setShow] = React.useState<boolean>(false)\n  const [internalClientRect, setInternalClientRect] =\n    React.useState<DOMRect | null>(null)\n  const [internalCommand, setInternalCommand] = React.useState<\n    ((item: SuggestionItem) => void) | null\n  >(null)\n  const [internalItems, setInternalItems] = React.useState<SuggestionItem[]>([])\n  const [internalQuery, setInternalQuery] = React.useState<string>(\"\")\n  const [, setInternalRange] = React.useState<Range | null>(null)\n\n  const { ref, style, getFloatingProps, isMounted } = useFloatingElement(\n    show,\n    internalClientRect,\n    1000,\n    {\n      placement: \"bottom-start\",\n      middleware: [\n        offset(10),\n        flip({\n          mainAxis: true,\n          crossAxis: false,\n        }),\n        shift(),\n        size({\n          apply({ availableHeight, elements }) {\n            if (elements.floating) {\n              const maxHeightValue = maxHeight\n                ? Math.min(maxHeight, availableHeight)\n                : availableHeight\n\n              elements.floating.style.setProperty(\n                \"--suggestion-menu-max-height\",\n                `${maxHeightValue}px`\n              )\n            }\n          },\n        }),\n      ],\n      onOpenChange(open) {\n        if (!open) {\n          setShow(false)\n        }\n      },\n      ...floatingOptions,\n    }\n  )\n\n  const internalSuggestionPropsRef = React.useRef(internalSuggestionProps)\n\n  React.useEffect(() => {\n    internalSuggestionPropsRef.current = internalSuggestionProps\n  }, [internalSuggestionProps])\n\n  const closePopup = React.useCallback(() => {\n    setShow(false)\n  }, [])\n\n  React.useEffect(() => {\n    if (!editor || editor.isDestroyed) {\n      return\n    }\n\n    const existingPlugin = editor.state.plugins.find(\n      (plugin) => plugin.spec.key === pluginKey\n    )\n    if (existingPlugin) {\n      editor.unregisterPlugin(pluginKey)\n    }\n\n    const suggestion = Suggestion({\n      pluginKey:\n        pluginKey instanceof PluginKey ? pluginKey : new PluginKey(pluginKey),\n      editor,\n\n      command({ editor, range, props }) {\n        if (!range) {\n          return\n        }\n\n        const { view, state } = editor\n        const { selection } = state\n\n        const isMention = editor.extensionManager.extensions.some(\n          (extension) => {\n            const name = extension.name\n            return (\n              name === \"mention\" &&\n              extension.options?.suggestion?.char ===\n                internalSuggestionPropsRef.current.char\n            )\n          }\n        )\n\n        if (!isMention) {\n          const cursorPosition = selection.$from.pos\n          const previousNode = selection.$head?.nodeBefore\n\n          const startPosition = previousNode\n            ? calculateStartPosition(\n                cursorPosition,\n                previousNode,\n                internalSuggestionPropsRef.current.char\n              )\n            : selection.$from.start()\n\n          const transaction = state.tr.deleteRange(\n            startPosition,\n            cursorPosition\n          )\n          view.dispatch(transaction)\n        }\n\n        const nodeAfter = view.state.selection.$to.nodeAfter\n        const overrideSpace = nodeAfter?.text?.startsWith(\" \")\n\n        const rangeToUse = { ...range }\n\n        if (overrideSpace) {\n          rangeToUse.to += 1\n        }\n\n        props.onSelect({ editor, range: rangeToUse, context: props.context })\n      },\n\n      render: () => {\n        return {\n          onStart: (props: SuggestionProps<SuggestionItem>) => {\n            setInternalCommand(() => props.command)\n            setInternalItems(props.items)\n            setInternalQuery(props.query)\n            setInternalRange(props.range)\n            setInternalClientRect(props.clientRect?.() ?? null)\n            setShow(true)\n          },\n\n          onUpdate: (props: SuggestionProps<SuggestionItem>) => {\n            setInternalCommand(() => props.command)\n            setInternalItems(props.items)\n            setInternalQuery(props.query)\n            setInternalRange(props.range)\n            setInternalClientRect(props.clientRect?.() ?? null)\n          },\n\n          onKeyDown: (props: SuggestionKeyDownProps) => {\n            if (props.event.key === \"Escape\") {\n              closePopup()\n              return true\n            }\n            return false\n          },\n\n          onExit: () => {\n            setInternalCommand(null)\n            setInternalItems([])\n            setInternalQuery(\"\")\n            setInternalRange(null)\n            setInternalClientRect(null)\n            setShow(false)\n          },\n        }\n      },\n      ...internalSuggestionPropsRef.current,\n    })\n\n    editor.registerPlugin(suggestion)\n\n    return () => {\n      if (!editor.isDestroyed) {\n        editor.unregisterPlugin(pluginKey)\n      }\n    }\n  }, [editor, pluginKey, closePopup])\n\n  const onSelect = React.useCallback(\n    (item: SuggestionItem) => {\n      closePopup()\n\n      if (internalCommand) {\n        internalCommand(item)\n      }\n    },\n    [closePopup, internalCommand]\n  )\n\n  const { selectedIndex } = useMenuNavigation({\n    editor: editor,\n    query: internalQuery,\n    items: internalItems,\n    onSelect,\n  })\n\n  if (!isMounted || !show || !editor) {\n    return null\n  }\n\n  return (\n    <div\n      ref={ref}\n      style={style}\n      {...getFloatingProps()}\n      data-selector={selector}\n      className=\"tiptap-suggestion-menu\"\n      role=\"listbox\"\n      aria-label=\"Suggestions\"\n    >\n      {children({\n        items: internalItems,\n        selectedIndex,\n        onSelect,\n      })}\n    </div>\n  )\n}\n","import { NodeSelection, type Selection } from \"@tiptap/pm/state\"\nimport type { JSONContent, Editor } from \"@tiptap/react\"\nimport { isTextSelection, isNodeSelection, posToDOMRect } from \"@tiptap/react\"\n\n// TipTap Collaboration\nexport const TIPTAP_COLLAB_DOC_PREFIX =\n  process.env.TIPTAP_COLLAB_DOC_PREFIX || \"\"\nexport const TIPTAP_COLLAB_APP_ID =\n  process.env.TIPTAP_COLLAB_APP_ID || \"\"\nexport const TIPTAP_COLLAB_TOKEN =\n  process.env.TIPTAP_COLLAB_TOKEN || \"\"\n\n// TipTap AI\nexport const TIPTAP_AI_APP_ID = process.env.TIPTAP_AI_APP_ID || \"\"\nexport const TIPTAP_AI_TOKEN = process.env.TIPTAP_AI_TOKEN || \"\"\n\nexport const USE_JWT_TOKEN_API_ENDPOINT =\n  process.env.USE_JWT_TOKEN_API_ENDPOINT || \"\"\n\nconst NODE_TYPE_LABELS: Record<string, string> = {\n  paragraph: \"text\",\n  codeBlock: \"Codeblock\",\n}\nexport type OverflowPosition = \"none\" | \"top\" | \"bottom\" | \"both\"\n\n/**\n * Utility function to get URL parameters\n */\nexport const getUrlParam = (param: string): string | null => {\n  if (typeof window === \"undefined\") return null\n  const params = new URLSearchParams(window.location.search)\n  return params.get(param)\n}\n\n/**\n * Returns a display name for the current node in the editor\n * @param editor The Tiptap editor instance\n * @returns The display name of the current node\n */\nexport const getNodeDisplayName = (editor: Editor | null): string => {\n  if (!editor) return \"Node\"\n\n  const { selection } = editor.state\n\n  if (selection instanceof NodeSelection) {\n    const nodeType = selection.node.type.name\n    return NODE_TYPE_LABELS[nodeType] || nodeType.toLowerCase()\n  }\n\n  const { $anchor } = selection\n  const nodeType = $anchor.parent.type.name\n  return NODE_TYPE_LABELS[nodeType] || nodeType.toLowerCase()\n}\n\n/**\n * Removes empty paragraph nodes from content\n */\nexport const removeEmptyParagraphs = (content: JSONContent) => ({\n  ...content,\n  content: content.content?.filter(\n    (node) =>\n      node.type !== \"paragraph\" ||\n      node.content?.some((child) => child.text?.trim() || child.type !== \"text\")\n  ),\n})\n\n/**\n * Determines how a target element overflows relative to a container element\n */\nexport function getElementOverflowPosition(\n  targetElement: Element,\n  containerElement: HTMLElement\n): OverflowPosition {\n  const targetBounds = targetElement.getBoundingClientRect()\n  const containerBounds = containerElement.getBoundingClientRect()\n\n  const isOverflowingTop = targetBounds.top < containerBounds.top\n  const isOverflowingBottom = targetBounds.bottom > containerBounds.bottom\n\n  if (isOverflowingTop && isOverflowingBottom) return \"both\"\n  if (isOverflowingTop) return \"top\"\n  if (isOverflowingBottom) return \"bottom\"\n  return \"none\"\n}\n\n/**\n * Checks if the current selection is valid for a given editor\n */\nexport const isSelectionValid = (\n  editor: Editor | null,\n  selection?: Selection,\n  excludedNodeTypes: string[] = [\"imageUpload\", \"horizontalRule\"]\n): boolean => {\n  if (!editor) return false\n  if (!selection) selection = editor.state.selection\n\n  const { state } = editor\n  const { doc } = state\n  const { empty, from, to } = selection\n\n  const isEmptyTextBlock =\n    !doc.textBetween(from, to).length && isTextSelection(selection)\n  const isCodeBlock =\n    selection.$from.parent.type.spec.code ||\n    (isNodeSelection(selection) && selection.node.type.spec.code)\n  const isExcludedNode =\n    isNodeSelection(selection) &&\n    excludedNodeTypes.includes(selection.node.type.name)\n\n  return !empty && !isEmptyTextBlock && !isCodeBlock && !isExcludedNode\n}\n\n/**\n * Checks if the current text selection is valid for editing\n * - Not empty\n * - Not a code block\n * - Not a node selection\n */\nexport const isTextSelectionValid = (editor: Editor | null): boolean => {\n  if (!editor) return false\n  const { state } = editor\n  const { selection } = state\n  const isValid =\n    isTextSelection(selection) &&\n    !selection.empty &&\n    !selection.$from.parent.type.spec.code &&\n    !isNodeSelection(selection)\n\n  return isValid\n}\n\n/**\n * Gets the bounding rect of the current selection in the editor.\n */\nexport const getSelectionBoundingRect = (editor: Editor): DOMRect | null => {\n  const { state } = editor.view\n  const { selection } = state\n  const { ranges } = selection\n\n  const from = Math.min(...ranges.map((range) => range.$from.pos))\n  const to = Math.max(...ranges.map((range) => range.$to.pos))\n\n  if (isNodeSelection(selection)) {\n    const node = editor.view.nodeDOM(from) as HTMLElement\n    if (node) {\n      return node.getBoundingClientRect()\n    }\n  }\n\n  return posToDOMRect(editor.view, from, to)\n}\n\n/**\n * Generates a deterministic avatar URL from a user name\n */\nexport const getAvatar = (name: string) => {\n  let hash = 0\n  for (let i = 0; i < name.length; i++) {\n    hash = name.charCodeAt(i) + ((hash << 5) - hash)\n    hash = hash & hash\n  }\n\n  const randomFraction = (Math.abs(hash) % 1000000) / 1000000\n  const id = 1 + Math.floor(randomFraction * 20)\n  const idString = id.toString().padStart(2, \"0\")\n  return `/avatars/memoji_${idString}.png`\n}\n\n/**\n * Fetch collaboration JWT token from the API\n */\nexport const fetchCollabToken = async () => {\n  if (USE_JWT_TOKEN_API_ENDPOINT) {\n    try {\n      // Example API endpoint that returns a JWT token.\n      // TODO: implement this API endpoint in your app\n      const response = await fetch(`/api/collaboration`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n      })\n\n      if (!response.ok) {\n        throw new Error(`Failed to fetch token: ${response.status}`)\n      }\n\n      const data = await response.json()\n      return data.token\n    } catch (error) {\n      console.error(\"Failed to fetch collaboration token:\", error)\n      return null\n    }\n  }\n\n  // TODO: as a developer, use the example JWT token provided in the Tiptap\n  // Cloud dashboard for local development only. In production, implement an API\n  // endpoint that generates a new JWT token in the server. Then, call that API\n  // endpoint from this function.\n  // When you've implemented the API endpoint, remove the code below.\n  if (!TIPTAP_COLLAB_TOKEN) {\n    alert(`Set up your environment variables to connect to Tiptap Cloud:\n- TIPTAP_COLLAB_DOC_PREFIX - Prefix for identifying collaborative documents\n- TIPTAP_COLLAB_APP_ID - Your Document Server App ID\n- TIPTAP_COLLAB_TOKEN - JWT token for accessing Collaboration services (do not use in production)\n- TIPTAP_AI_APP_ID - Your AI App ID\n- TIPTAP_AI_TOKEN - JWT token for accessing AI services (do not use in production)\nFollow this guide: https://tiptap.dev/docs/ui-components/templates/notion-like-editor`)\n  } else {\n    console.warn(\n      \"You are using the example JWT token provided in the Tiptap Cloud dashboard. This is only for local development and should not be used in production. In production, implement an API endpoint that generates a new JWT token in the server, and call that API endpoint from the fetchCollabToken function. More info in the docs: https://tiptap.dev/docs/ui-components/templates/notion-like-editor\"\n    )\n  }\n\n  // A hardcoded token for demonstration purposes.\n  // TODO: remove this in production and use the API endpoint instead\n  return TIPTAP_COLLAB_TOKEN\n}\n\n/**\n * Fetch AI JWT token from the API\n */\nexport const fetchAiToken = async () => {\n  if (USE_JWT_TOKEN_API_ENDPOINT) {\n    try {\n      // Example API endpoint that returns a JWT token.\n      // TODO: implement this API endpoint in your app\n      const response = await fetch(`/api/ai`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n      })\n\n      if (!response.ok) {\n        throw new Error(`Failed to fetch token: ${response.status}`)\n      }\n\n      const data = await response.json()\n      return data.token\n    } catch (error) {\n      console.error(\"Failed to fetch AI token:\", error)\n      return null\n    }\n  }\n\n  // TODO: as a developer, use the example JWT token provided in the Tiptap\n  // Cloud dashboard for local development only. In production, implement an API\n  // endpoint that generates a new JWT token in the server. Then, call that API\n  // endpoint from this function.\n  // When you've implemented the API endpoint, remove the code below.\n  if (!TIPTAP_AI_TOKEN) {\n    alert(`Set up your environment variables to connect to Tiptap Cloud:\n- TIPTAP_COLLAB_DOC_PREFIX - Prefix for identifying collaborative documents\n- TIPTAP_COLLAB_APP_ID - Your Document Server App ID\n- TIPTAP_COLLAB_TOKEN - JWT token for accessing Collaboration services (do not use in production)\n- TIPTAP_AI_APP_ID - Your AI App ID\n- TIPTAP_AI_TOKEN - JWT token for accessing AI services (do not use in production)\nFollow this guide: https://tiptap.dev/docs/ui-components/templates/notion-like-editor`)\n  } else {\n    console.warn(\n      \"You are using the example JWT token provided in the Tiptap Cloud dashboard. This is only for local development and should not be used in production. In production, implement an API endpoint that generates a new JWT token in the server, and call that API endpoint from the fetchAiToken function. More info in the docs: https://tiptap.dev/docs/ui-components/templates/notion-like-editor\"\n    )\n  }\n\n  // A hardcoded token for demonstration purposes.\n  // TODO: remove this in production and use the API endpoint instead\n  return TIPTAP_AI_TOKEN\n}\n","import * as React from \"react\"\nimport { cn } from \"@/lib/tiptap-utils\"\n\nconst Card = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n  ({ className, ...props }, ref) => {\n    return <div ref={ref} className={cn(\"tiptap-card\", className)} {...props} />\n  }\n)\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n  HTMLDivElement,\n  React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n  return (\n    <div ref={ref} className={cn(\"tiptap-card-header\", className)} {...props} />\n  )\n})\nCardHeader.displayName = \"CardHeader\"\n\nconst CardBody = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n  ({ className, ...props }, ref) => {\n    return (\n      <div ref={ref} className={cn(\"tiptap-card-body\", className)} {...props} />\n    )\n  }\n)\nCardBody.displayName = \"CardBody\"\n\nconst CardItemGroup = React.forwardRef<\n  HTMLDivElement,\n  React.ComponentProps<\"div\"> & {\n    orientation?: \"horizontal\" | \"vertical\"\n  }\n>(({ className, orientation = \"vertical\", ...props }, ref) => {\n  return (\n    <div\n      ref={ref}\n      data-orientation={orientation}\n      className={cn(\"tiptap-card-item-group\", className)}\n      {...props}\n    />\n  )\n})\nCardItemGroup.displayName = \"CardItemGroup\"\n\nconst CardGroupLabel = React.forwardRef<\n  HTMLDivElement,\n  React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n  return (\n    <div\n      ref={ref}\n      className={cn(\"tiptap-card-group-label\", className)}\n      {...props}\n    />\n  )\n})\nCardGroupLabel.displayName = \"CardGroupLabel\"\n\nconst CardFooter = React.forwardRef<\n  HTMLDivElement,\n  React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n  return (\n    <div ref={ref} className={cn(\"tiptap-card-footer\", className)} {...props} />\n  )\n})\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardBody, CardItemGroup, CardGroupLabel }\n","import type { EmojiItem } from \"@tiptap/extension-emoji\"\n\nconst MAX_SUGGESTIONS = 100\nconst SORT_EMOJIS = <T extends EmojiItem>(a: T, b: T) =>\n  a.name.localeCompare(b.name)\n\nexport const searchEmojiData = <T extends EmojiItem>(\n  query: string,\n  emojiData: T\n): boolean => {\n  const lowercaseQuery = query.toLowerCase().trim()\n\n  return (\n    emojiData.name.toLowerCase().includes(lowercaseQuery) ||\n    emojiData.shortcodes.some((shortName) =>\n      shortName.toLowerCase().includes(lowercaseQuery)\n    ) ||\n    emojiData.tags.some((tag) => tag.toLowerCase().includes(lowercaseQuery))\n  )\n}\n\nexport const getFilteredEmojis = <T extends EmojiItem>(props: {\n  query: string\n  emojis: T[]\n}) => {\n  const { query, emojis } = props\n  const trimmedQuery = query.trim()\n\n  const filteredEmojis = !trimmedQuery\n    ? emojis.slice(0, MAX_SUGGESTIONS)\n    : emojis\n        .filter((emoji) => searchEmojiData(trimmedQuery, emoji))\n        .slice(0, MAX_SUGGESTIONS)\n\n  return filteredEmojis.sort(SORT_EMOJIS)\n}\n","import * as React from \"react\"\nimport type { EmojiItem } from \"@tiptap/extension-emoji\"\n\n// --- Hooks ---\nimport { useMenuNavigation } from \"@/hooks/use-menu-navigation\"\n\n// --- Lib ---\nimport { getElementOverflowPosition } from \"@/lib/tiptap-collab-utils\"\n\n// --- UI Primitives ---\nimport { Button, ButtonGroup } from \"@/components/tiptap-ui-primitive/button\"\nimport { Input } from \"@/components/tiptap-ui-primitive/input\"\nimport { Card, CardBody, CardHeader } from \"@/components/tiptap-ui-primitive/card\"\n\nimport { getFilteredEmojis } from \"./emoji-menu-utils\"\n\n// --- Styles ---\n\nexport interface EmojiMenuItemProps<T extends EmojiItem> {\n  emoji: T\n  index: number\n  isSelected: boolean\n  onSelect: (emoji: T) => void\n  selector: string\n}\n\nexport const EmojiMenuItem = <T extends EmojiItem>(\n  props: EmojiMenuItemProps<T>\n) => {\n  const { emoji, isSelected, onSelect, selector } = props\n  const itemRef = React.useRef<HTMLButtonElement>(null)\n\n  React.useEffect(() => {\n    const menuElement = document.querySelector(selector) as HTMLElement\n    if (!itemRef.current || !isSelected || !menuElement) return\n\n    const overflow = getElementOverflowPosition(itemRef.current, menuElement)\n    if (overflow === \"top\") {\n      itemRef.current.scrollIntoView(true)\n    } else if (overflow === \"bottom\") {\n      itemRef.current.scrollIntoView(false)\n    }\n  }, [isSelected, selector])\n\n  if (!emoji) return null\n\n  return (\n    <Button\n      ref={itemRef}\n      data-style=\"ghost\"\n      data-active-state={isSelected ? \"on\" : \"off\"}\n      onClick={() => onSelect(emoji)}\n    >\n      {emoji.fallbackImage ? (\n        <img\n          className=\"tiptap-button-emoji\"\n          src={emoji.fallbackImage}\n          alt={emoji.name}\n        />\n      ) : (\n        <span className=\"tiptap-button-emoji\">{emoji.emoji}</span>\n      )}\n      <span className=\"tiptap-button-text\">:{emoji.name}:</span>\n    </Button>\n  )\n}\n\nexport interface EmojiMenuProps<T extends EmojiItem> {\n  emojis: T[]\n  onSelect: (emoji: T) => void\n  onClose?: () => void\n  showSearch?: boolean\n  selector?: string\n}\n\nexport const EmojiMenu = <T extends EmojiItem>(props: EmojiMenuProps<T>) => {\n  const {\n    emojis,\n    onSelect,\n    onClose,\n    showSearch = false,\n    selector = \".emoji-menu-list\",\n  } = props\n\n  const containerRef = React.useRef<HTMLDivElement>(null)\n  const searchRef = React.useRef<HTMLInputElement>(null)\n\n  const [searchQuery, setSearchQuery] = React.useState(\"\")\n\n  const filteredEmojis = React.useMemo(() => {\n    const filtered = getFilteredEmojis({ query: searchQuery, emojis })\n    return filtered\n  }, [emojis, searchQuery])\n\n  const { selectedIndex } = useMenuNavigation({\n    containerRef,\n    query: searchQuery,\n    items: filteredEmojis,\n    onSelect,\n    onClose,\n  })\n\n  const renderedItems = React.useMemo(() => {\n    return filteredEmojis.map((emoji, index) => (\n      <EmojiMenuItem\n        key={emoji.name}\n        emoji={emoji}\n        index={index}\n        isSelected={index === selectedIndex}\n        onSelect={() => onSelect(emoji)}\n        selector={selector}\n      />\n    ))\n  }, [filteredEmojis, selectedIndex, onSelect, selector])\n\n  return (\n    <Card ref={containerRef}>\n      {showSearch && (\n        <CardHeader>\n          <Input\n            ref={searchRef}\n            type=\"text\"\n            placeholder=\"Add a emoji reaction...\"\n            value={searchQuery}\n            autoFocus\n            onChange={(e) => setSearchQuery(e.target.value)}\n            className=\"emoji-menu-search-input\"\n          />\n        </CardHeader>\n      )}\n\n      {renderedItems.length && (\n        <CardBody className=\"emoji-menu-list\">\n          <ButtonGroup>{renderedItems}</ButtonGroup>\n        </CardBody>\n      )}\n    </Card>\n  )\n}\n","import * as React from \"react\"\nimport type { Editor, Range } from \"@tiptap/react\"\nimport type { EmojiItem } from \"@tiptap/extension-emoji\"\n\n// --- Tiptap UI ---\nimport type {\n  SuggestionItem,\n  SuggestionMenuProps,\n  SuggestionMenuRenderProps,\n} from \"@/components/tiptap-ui-utils/suggestion-menu\"\nimport { SuggestionMenu } from \"@/components/tiptap-ui-utils/suggestion-menu\"\nimport {\n  EmojiMenuItem,\n  getFilteredEmojis,\n} from \"@/components/tiptap-ui/emoji-menu\"\nimport { Card, CardBody } from \"@/components/tiptap-ui-primitive/card\"\nimport { ButtonGroup } from \"@/components/tiptap-ui-primitive/button\"\n\nexport type EmojiDropdownMenuProps = Omit<\n  SuggestionMenuProps,\n  \"items\" | \"children\"\n>\n\nexport const EmojiDropdownMenu = (props: EmojiDropdownMenuProps) => {\n  return (\n    <SuggestionMenu\n      char=\":\"\n      pluginKey=\"emojiDropdownMenu\"\n      decorationClass=\"tiptap-emoji-decoration\"\n      selector=\"tiptap-emoji-dropdown-menu\"\n      items={getSuggestionItems}\n      {...props}\n    >\n      {(props) => <EmojiList {...props} />}\n    </SuggestionMenu>\n  )\n}\n\nconst getSuggestionItems = async (props: { query: string; editor: Editor }) => {\n  const emojis: EmojiItem[] = props.editor.extensionStorage.emoji.emojis || []\n  const filteredEmojis = getFilteredEmojis({ query: props.query, emojis })\n\n  return filteredEmojis.map(\n    (emoji): SuggestionItem => ({\n      title: emoji.name,\n      subtext: emoji.shortcodes.join(\", \"),\n      context: emoji,\n      onSelect: (props: {\n        editor: Editor\n        range: Range\n        context?: EmojiItem\n      }) => {\n        if (!props.editor || !props.range || !props.context) return\n        props.editor.chain().focus().setEmoji(props.context.name).run()\n      },\n    })\n  )\n}\n\nconst EmojiList = ({\n  items,\n  selectedIndex,\n  onSelect,\n}: SuggestionMenuRenderProps<EmojiItem>) => {\n  const renderedItems = React.useMemo(() => {\n    const rendered: React.ReactElement[] = []\n\n    items.forEach((item, index) => {\n      if (!item.context) return\n\n      rendered.push(\n        <EmojiMenuItem\n          key={item.title}\n          emoji={item.context}\n          index={index}\n          isSelected={index === selectedIndex}\n          onSelect={() => onSelect(item)}\n          selector=\"[data-selector='tiptap-emoji-dropdown-menu']\"\n        />\n      )\n    })\n\n    return rendered\n  }, [items, selectedIndex, onSelect])\n\n  if (!renderedItems.length) {\n    return null\n  }\n\n  return (\n    <Card\n      style={{\n        maxHeight: \"var(--suggestion-menu-max-height)\",\n      }}\n    >\n      <CardBody>\n        <ButtonGroup>{renderedItems}</ButtonGroup>\n      </CardBody>\n    </Card>\n  )\n}\n","import * as React from \"react\"\n\ntype ImageLoadingStatus = \"idle\" | \"loading\" | \"loaded\" | \"error\"\ntype Size = \"default\" | \"sm\" | \"lg\" | \"xl\"\n\ninterface AvatarContextValue {\n  imageLoadingStatus: ImageLoadingStatus\n  onImageLoadingStatusChange: (status: ImageLoadingStatus) => void\n  size: Size\n}\n\ninterface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {\n  size?: Size\n  userColor?: string\n}\n\ninterface AvatarImageProps\n  extends Omit<\n    React.ImgHTMLAttributes<HTMLImageElement>,\n    \"onLoadingStatusChange\"\n  > {\n  onLoadingStatusChange?: (status: ImageLoadingStatus) => void\n}\n\ninterface AvatarFallbackProps extends React.HTMLAttributes<HTMLSpanElement> {\n  delayMs?: number\n}\n\ninterface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n  maxVisible?: number\n  children: React.ReactNode\n}\n\nconst AvatarContext = React.createContext<AvatarContextValue | undefined>(\n  undefined\n)\n\nconst useAvatarContext = () => {\n  const context = React.useContext(AvatarContext)\n  if (!context) {\n    throw new Error(\"Avatar components must be used within an Avatar.Root\")\n  }\n  return context\n}\n\nconst useImageLoadingStatus = (\n  src?: string,\n  referrerPolicy?: React.HTMLAttributeReferrerPolicy\n): ImageLoadingStatus => {\n  const [loadingStatus, setLoadingStatus] =\n    React.useState<ImageLoadingStatus>(\"idle\")\n\n  React.useLayoutEffect(() => {\n    if (!src) {\n      setLoadingStatus(\"error\")\n      return\n    }\n\n    let isMounted = true\n    const image = new window.Image()\n\n    const updateStatus = (status: ImageLoadingStatus) => () => {\n      if (!isMounted) return\n      setLoadingStatus(status)\n    }\n\n    setLoadingStatus(\"loading\")\n    image.onload = updateStatus(\"loaded\")\n    image.onerror = updateStatus(\"error\")\n    image.src = src\n    if (referrerPolicy) image.referrerPolicy = referrerPolicy\n\n    return () => {\n      isMounted = false\n    }\n  }, [src, referrerPolicy])\n\n  return loadingStatus\n}\n\nexport const Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(\n  (\n    { children, className = \"\", size = \"default\", userColor, ...props },\n    ref\n  ) => {\n    const [imageLoadingStatus, setImageLoadingStatus] =\n      React.useState<ImageLoadingStatus>(\"idle\")\n\n    // Memoize the callback to prevent unnecessary re-renders\n    const onImageLoadingStatusChange = React.useCallback(\n      (status: ImageLoadingStatus) => {\n        setImageLoadingStatus(status)\n      },\n      []\n    )\n\n    const contextValue = React.useMemo(\n      () => ({\n        imageLoadingStatus,\n        onImageLoadingStatusChange,\n        size,\n      }),\n      [imageLoadingStatus, onImageLoadingStatusChange, size]\n    )\n\n    const style = userColor\n      ? ({ \"--dynamic-user-color\": userColor } as React.CSSProperties)\n      : undefined\n\n    return (\n      <AvatarContext.Provider value={contextValue}>\n        <span\n          {...props}\n          ref={ref}\n          className={`tiptap-avatar ${className}`}\n          style={style}\n          data-size={size}\n        >\n          <span className=\"tiptap-avatar-item\">{children}</span>\n        </span>\n      </AvatarContext.Provider>\n    )\n  }\n)\n\nAvatar.displayName = \"Avatar\"\n\nexport const AvatarImage = React.forwardRef<HTMLImageElement, AvatarImageProps>(\n  ({ onLoadingStatusChange, src, className = \"\", ...props }, ref) => {\n    const { onImageLoadingStatusChange } = useAvatarContext()\n    const imageLoadingStatus = useImageLoadingStatus(src, props.referrerPolicy)\n\n    React.useLayoutEffect(() => {\n      if (imageLoadingStatus !== \"idle\") {\n        onLoadingStatusChange?.(imageLoadingStatus)\n        onImageLoadingStatusChange(imageLoadingStatus)\n      }\n    }, [imageLoadingStatus, onLoadingStatusChange, onImageLoadingStatusChange])\n\n    if (imageLoadingStatus !== \"loaded\") return null\n\n    return (\n      <img\n        {...props}\n        ref={ref}\n        src={src}\n        className={`tiptap-avatar-image ${className}`}\n      />\n    )\n  }\n)\n\nAvatarImage.displayName = \"AvatarImage\"\n\nexport const AvatarFallback = React.forwardRef<\n  HTMLSpanElement,\n  AvatarFallbackProps\n>(({ delayMs, className = \"\", children, ...props }, ref) => {\n  const context = useAvatarContext()\n  const [canRender, setCanRender] = React.useState(delayMs === undefined)\n\n  React.useEffect(() => {\n    if (delayMs !== undefined) {\n      const timerId = window.setTimeout(() => setCanRender(true), delayMs)\n      return () => window.clearTimeout(timerId)\n    }\n  }, [delayMs])\n\n  if (!canRender || context.imageLoadingStatus === \"loaded\") return null\n\n  return (\n    <>\n      <span className={`tiptap-avatar-bg ${className}`} />\n      <span\n        {...props}\n        ref={ref}\n        className={`tiptap-avatar-fallback ${className}`}\n      >\n        {children}\n      </span>\n    </>\n  )\n})\n\nAvatarFallback.displayName = \"AvatarFallback\"\n\nexport const AvatarGroup: React.FC<AvatarGroupProps> = ({\n  maxVisible,\n  children,\n  className = \"\",\n  ...props\n}) => {\n  const childrenArray = React.Children.toArray(children)\n  const visibleAvatars = maxVisible\n    ? childrenArray.slice(0, maxVisible)\n    : childrenArray\n  const remainingCount = childrenArray.length - visibleAvatars.length\n\n  let avatarProps: AvatarProps = {}\n\n  React.Children.forEach(children, (child) => {\n    if (\n      React.isValidElement(child) &&\n      child.type &&\n      typeof child.type !== \"string\" &&\n      (child.type as { displayName?: string }).displayName === \"Avatar\"\n    ) {\n      avatarProps = { ...avatarProps, ...(child.props as AvatarProps) }\n      return\n    }\n  })\n\n  return (\n    <div\n      {...props}\n      className={`tiptap-avatar-group ${className}`}\n      data-max-user-visible={maxVisible}\n    >\n      {visibleAvatars}\n      {remainingCount > 0 && (\n        <Avatar {...avatarProps}>\n          <AvatarFallback>+{remainingCount}</AvatarFallback>\n        </Avatar>\n      )}\n    </div>\n  )\n}\n\nAvatarGroup.displayName = \"AvatarGroup\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport type { Editor, Range } from \"@tiptap/react\"\n\n// --- Lib ---\nimport { getElementOverflowPosition } from \"@/lib/tiptap-collab-utils\"\n\n// --- Tiptap UI ---\nimport type {\n  SuggestionItem,\n  SuggestionMenuProps,\n  SuggestionMenuRenderProps,\n} from \"@/components/tiptap-ui-utils/suggestion-menu\"\nimport { SuggestionMenu } from \"@/components/tiptap-ui-utils/suggestion-menu\"\n\n// --- UI Primitives ---\nimport {\n  Avatar,\n  AvatarImage,\n  AvatarFallback,\n} from \"@/components/tiptap-ui-primitive/avatar\"\nimport { Button, ButtonGroup } from \"@/components/tiptap-ui-primitive/button\"\nimport { Card, CardBody } from \"@/components/tiptap-ui-primitive/card\"\n\ninterface User {\n  id: number\n  name: string\n  position: string\n  avatarUrl: string\n}\n\ntype MentionDropdownMenuProps = Omit<SuggestionMenuProps, \"items\" | \"children\">\n\ninterface MentionItemProps {\n  item: SuggestionItem<User>\n  isSelected: boolean\n  onSelect: () => void\n}\n\nconst fetchUsers = async (query: string): Promise<User[]> => {\n  const employeeData = [\n    [\"Emily Johnson\", \"Marketing Manager\"],\n    [\"Michael Thompson\", \"Sales Manager\"],\n    [\"Sophia Lee\", \"Product Designer\"],\n    [\"William Davis\", \"IT Project Manager\"],\n    [\"Olivia Wilson\", \"HR Specialist\"],\n    [\"Daniel Taylor\", \"Financial Controller\"],\n    [\"Isabella Anderson\", \"Graphic Designer\"],\n    [\"Jacob Martinez\", \"Sales Representative\"],\n    [\"Ava Hernandez\", \"Marketing Assistant\"],\n    [\"Alexander Diaz\", \"IT Support\"],\n    [\"Emma Ramirez\", \"HR Specialist\"],\n    [\"Ethan Flores\", \"Product Manager\"],\n    [\"Mia Morales\", \"Graphic Designer\"],\n    [\"Noah Reyes\", \"Sales Manager\"],\n    [\"Isabella Castillo\", \"Marketing Manager\"],\n    [\"Liam Gutierrez\", \"IT Project Manager\"],\n    [\"Avery Jimenez\", \"HR Specialist\"],\n    [\"Lucas Vargas\", \"Product Designer\"],\n    [\"Chloe Rojas\", \"Graphic Designer\"],\n    [\"Kai Zhang\", \"Sales Representative\"],\n  ] as const\n\n  const userData = {\n    users: employeeData.map(([name, position], index) => {\n      const id = index + 1\n      const avatarNumber = id < 10 ? `0${id}` : `${id}`\n\n      return {\n        id,\n        name,\n        position,\n        avatarUrl: `/avatars/memoji_${avatarNumber}.png`,\n      }\n    }),\n  }\n\n  if (!query) return userData.users\n\n  return userData.users.filter(\n    (user) =>\n      user.name.toLowerCase().includes(query.toLowerCase()) ||\n      user.position.toLowerCase().includes(query.toLowerCase())\n  )\n}\n\nexport const MentionDropdownMenu = (props: MentionDropdownMenuProps) => {\n  const handleItemSelect = (props: {\n    editor: Editor\n    range: Range\n    context?: User\n  }) => {\n    if (!props.editor || !props.range || !props.context) return\n\n    props.editor\n      .chain()\n      .focus()\n      .insertContentAt(props.range, [\n        {\n          type: \"mention\",\n          attrs: {\n            id: props.context.id.toString(),\n            label: props.context.name,\n          },\n        },\n        {\n          type: \"text\",\n          text: \" \",\n        },\n      ])\n      .run()\n  }\n\n  const getSuggestionItems = async (props: { query: string }) => {\n    const users = await fetchUsers(props.query)\n\n    return users.map((user) => ({\n      title: user.name,\n      subtext: user.name,\n      context: user,\n      onSelect: handleItemSelect,\n    }))\n  }\n\n  return (\n    <SuggestionMenu\n      char=\"@\"\n      pluginKey=\"mentionDropdownMenu\"\n      decorationClass=\"tiptap-mention-decoration\"\n      selector=\"tiptap-mention-dropdown-menu\"\n      items={getSuggestionItems}\n      {...props}\n    >\n      {(props) => <MentionList {...props} />}\n    </SuggestionMenu>\n  )\n}\n\nconst MentionItem = ({ item, isSelected, onSelect }: MentionItemProps) => {\n  const itemRef = React.useRef<HTMLButtonElement>(null)\n\n  React.useEffect(() => {\n    const menuElement = document.querySelector(\n      '[data-selector=\"tiptap-mention-dropdown-menu\"]'\n    ) as HTMLElement\n    if (!itemRef.current || !isSelected || !menuElement) return\n\n    const overflow = getElementOverflowPosition(itemRef.current, menuElement)\n    if (overflow === \"top\") {\n      itemRef.current.scrollIntoView(true)\n    } else if (overflow === \"bottom\") {\n      itemRef.current.scrollIntoView(false)\n    }\n  }, [isSelected])\n\n  return (\n    <Button\n      ref={itemRef}\n      data-style=\"ghost\"\n      data-active-state={isSelected ? \"on\" : \"off\"}\n      onClick={onSelect}\n      data-user-id={item.context?.id}\n    >\n      <Avatar>\n        <AvatarImage src={item.context?.avatarUrl} alt={item.title} />\n        <AvatarFallback>{item.title[0]?.toUpperCase()}</AvatarFallback>\n      </Avatar>\n\n      <span className=\"tiptap-button-text\">{item.title}</span>\n    </Button>\n  )\n}\n\nconst MentionList = ({\n  items,\n  selectedIndex,\n  onSelect,\n}: SuggestionMenuRenderProps<User>) => {\n  const renderedItems = React.useMemo(() => {\n    const rendered: React.ReactElement[] = []\n\n    items.forEach((item, index) => {\n      rendered.push(\n        <MentionItem\n          key={item.context?.id || item.title}\n          item={item}\n          isSelected={index === selectedIndex}\n          onSelect={() => onSelect(item)}\n        />\n      )\n    })\n\n    return rendered\n  }, [items, selectedIndex, onSelect])\n\n  if (!renderedItems.length) {\n    return null\n  }\n\n  return (\n    <Card\n      style={{\n        maxHeight: \"var(--suggestion-menu-max-height)\",\n      }}\n    >\n      <CardBody>\n        <ButtonGroup>{renderedItems}</ButtonGroup>\n      </CardBody>\n    </Card>\n  )\n}\n","import * as React from \"react\"\n\nexport const CodeBlockIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M6.70711 2.29289C7.09763 2.68342 7.09763 3.31658 6.70711 3.70711L4.41421 6L6.70711 8.29289C7.09763 8.68342 7.09763 9.31658 6.70711 9.70711C6.31658 10.0976 5.68342 10.0976 5.29289 9.70711L2.29289 6.70711C1.90237 6.31658 1.90237 5.68342 2.29289 5.29289L5.29289 2.29289C5.68342 1.90237 6.31658 1.90237 6.70711 2.29289Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M10.2929 2.29289C10.6834 1.90237 11.3166 1.90237 11.7071 2.29289L14.7071 5.29289C15.0976 5.68342 15.0976 6.31658 14.7071 6.70711L11.7071 9.70711C11.3166 10.0976 10.6834 10.0976 10.2929 9.70711C9.90237 9.31658 9.90237 8.68342 10.2929 8.29289L12.5858 6L10.2929 3.70711C9.90237 3.31658 9.90237 2.68342 10.2929 2.29289Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M17 4C17 3.44772 17.4477 3 18 3H19C20.6569 3 22 4.34315 22 6V18C22 19.6569 20.6569 21 19 21H5C3.34315 21 2 19.6569 2 18V12C2 11.4477 2.44772 11 3 11C3.55228 11 4 11.4477 4 12V18C4 18.5523 4.44772 19 5 19H19C19.5523 19 20 18.5523 20 18V6C20 5.44772 19.5523 5 19 5H18C17.4477 5 17 4.55228 17 4Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nCodeBlockIcon.displayName = \"CodeBlockIcon\"\n","import * as React from \"react\"\n\nexport const ImageIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M5 4C4.44772 4 4 4.44772 4 5V19C4 19.5523 4.44772 20 5 20H5.58579L14.379 11.2068C14.9416 10.6444 15.7045 10.3284 16.5 10.3284C17.2955 10.3284 18.0584 10.6444 18.621 11.2068L20 12.5858V5C20 4.44772 19.5523 4 19 4H5ZM22 14.998V5C22 3.34315 20.6569 2 19 2H5C3.34315 2 2 3.34315 2 5V19C2 20.6569 3.34315 22 5 22H5.99781C5.99927 22 6.00073 22 6.00219 22H19C20.6569 22 22 20.6569 22 19V15.002C22 15.0007 22 14.9994 22 14.998ZM20 15.4142L17.207 12.6212C17.0195 12.4338 16.7651 12.3284 16.5 12.3284C16.2349 12.3284 15.9806 12.4337 15.7931 12.6211L8.41422 20H19C19.5523 20 20 19.5523 20 19V15.4142ZM9 8C8.44772 8 8 8.44772 8 9C8 9.55228 8.44772 10 9 10C9.55228 10 10 9.55228 10 9C10 8.44772 9.55228 8 9 8ZM6 9C6 7.34315 7.34315 6 9 6C10.6569 6 12 7.34315 12 9C12 10.6569 10.6569 12 9 12C7.34315 12 6 10.6569 6 9Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nImageIcon.displayName = \"ImageIcon\"\n","import { Icon } from \"@iconify/react\"\n\nexport const VideoIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"basil:video-outline\" className={className} />\n)\n","import * as React from \"react\"\n\nexport const ListIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M7 6C7 5.44772 7.44772 5 8 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H8C7.44772 7 7 6.55228 7 6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M7 12C7 11.4477 7.44772 11 8 11H21C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13H8C7.44772 13 7 12.5523 7 12Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M7 18C7 17.4477 7.44772 17 8 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H8C7.44772 19 7 18.5523 7 18Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M2 6C2 5.44772 2.44772 5 3 5H3.01C3.56228 5 4.01 5.44772 4.01 6C4.01 6.55228 3.56228 7 3.01 7H3C2.44772 7 2 6.55228 2 6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M2 12C2 11.4477 2.44772 11 3 11H3.01C3.56228 11 4.01 11.4477 4.01 12C4.01 12.5523 3.56228 13 3.01 13H3C2.44772 13 2 12.5523 2 12Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M2 18C2 17.4477 2.44772 17 3 17H3.01C3.56228 17 4.01 17.4477 4.01 18C4.01 18.5523 3.56228 19 3.01 19H3C2.44772 19 2 18.5523 2 18Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nListIcon.displayName = \"ListIcon\"\n","import * as React from \"react\"\n\nexport const ListOrderedIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M9 6C9 5.44772 9.44772 5 10 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H10C9.44772 7 9 6.55228 9 6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M9 12C9 11.4477 9.44772 11 10 11H21C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13H10C9.44772 13 9 12.5523 9 12Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M9 18C9 17.4477 9.44772 17 10 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H10C9.44772 19 9 18.5523 9 18Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M3 6C3 5.44772 3.44772 5 4 5H5C5.55228 5 6 5.44772 6 6V10C6 10.5523 5.55228 11 5 11C4.44772 11 4 10.5523 4 10V7C3.44772 7 3 6.55228 3 6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M3 10C3 9.44772 3.44772 9 4 9H6C6.55228 9 7 9.44772 7 10C7 10.5523 6.55228 11 6 11H4C3.44772 11 3 10.5523 3 10Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M5.82219 13.0431C6.54543 13.4047 6.99997 14.1319 6.99997 15C6.99997 15.5763 6.71806 16.0426 6.48747 16.35C6.31395 16.5814 6.1052 16.8044 5.91309 17H5.99997C6.55226 17 6.99997 17.4477 6.99997 18C6.99997 18.5523 6.55226 19 5.99997 19H3.99997C3.44769 19 2.99997 18.5523 2.99997 18C2.99997 17.4237 3.28189 16.9575 3.51247 16.65C3.74323 16.3424 4.03626 16.0494 4.26965 15.8161C4.27745 15.8083 4.2852 15.8006 4.29287 15.7929C4.55594 15.5298 4.75095 15.3321 4.88748 15.15C4.96287 15.0495 4.99021 14.9922 4.99911 14.9714C4.99535 14.9112 4.9803 14.882 4.9739 14.8715C4.96613 14.8588 4.95382 14.845 4.92776 14.8319C4.87723 14.8067 4.71156 14.7623 4.44719 14.8944C3.95321 15.1414 3.35254 14.9412 3.10555 14.4472C2.85856 13.9533 3.05878 13.3526 3.55276 13.1056C4.28839 12.7378 5.12272 12.6934 5.82219 13.0431Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nListOrderedIcon.displayName = \"ListOrderedIcon\"\n","import * as React from \"react\"\n\nexport const ListTodoIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M2 6C2 4.89543 2.89543 4 4 4H8C9.10457 4 10 4.89543 10 6V10C10 11.1046 9.10457 12 8 12H4C2.89543 12 2 11.1046 2 10V6ZM8 6H4V10H8V6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M9.70711 14.2929C10.0976 14.6834 10.0976 15.3166 9.70711 15.7071L5.70711 19.7071C5.31658 20.0976 4.68342 20.0976 4.29289 19.7071L2.29289 17.7071C1.90237 17.3166 1.90237 16.6834 2.29289 16.2929C2.68342 15.9024 3.31658 15.9024 3.70711 16.2929L5 17.5858L8.29289 14.2929C8.68342 13.9024 9.31658 13.9024 9.70711 14.2929Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M12 6C12 5.44772 12.4477 5 13 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H13C12.4477 7 12 6.55228 12 6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M12 12C12 11.4477 12.4477 11 13 11H21C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13H13C12.4477 13 12 12.5523 12 12Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M12 18C12 17.4477 12.4477 17 13 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H13C12.4477 19 12 18.5523 12 18Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nListTodoIcon.displayName = \"ListTodoIcon\"\n","import * as React from \"react\"\n\nexport const AiSparklesIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M6.94924 1.68544C6.81364 1.27624 6.43108 1 6 1C5.56892 1 5.18636 1.27624 5.05076 1.68544L4.3711 3.73642C4.2717 4.03638 4.03638 4.2717 3.73642 4.3711L1.68544 5.05076C1.27624 5.18636 1 5.56892 1 6C1 6.43108 1.27624 6.81364 1.68544 6.94924L3.73642 7.6289C4.03638 7.7283 4.2717 7.96362 4.3711 8.26358L5.05076 10.3146C5.18636 10.7238 5.56892 11 6 11C6.43108 11 6.81364 10.7238 6.94924 10.3146L7.6289 8.26358C7.7283 7.96362 7.96362 7.7283 8.26358 7.6289L10.3146 6.94924C10.7238 6.81364 11 6.43108 11 6C11 5.56892 10.7238 5.18636 10.3146 5.05076L8.26358 4.3711C7.96362 4.2717 7.7283 4.03638 7.6289 3.73642L6.94924 1.68544ZM4.95595 6C5.38537 5.74447 5.74447 5.38537 6 4.95595C6.25554 5.38537 6.61463 5.74447 7.04405 6C6.61463 6.25554 6.25554 6.61463 6 7.04405C5.74447 6.61463 5.38537 6.25554 4.95595 6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M14.9492 5.68544C14.8136 5.27624 14.4311 5 14 5C13.5689 5 13.1864 5.27624 13.0508 5.68544L11.3755 10.7408C11.2761 11.0408 11.0408 11.2761 10.7408 11.3755L5.68544 13.0508C5.27624 13.1864 5 13.5689 5 14C5 14.4311 5.27624 14.8136 5.68544 14.9492L10.7408 16.6245C11.0408 16.7239 11.2761 16.9592 11.3755 17.2592L13.0508 22.3146C13.1864 22.7238 13.5689 23 14 23C14.4311 23 14.8136 22.7238 14.9492 22.3146L16.6245 17.2592C16.7239 16.9592 16.9592 16.7239 17.2592 16.6245L22.3146 14.9492C22.7238 14.8136 23 14.4311 23 14C23 13.5689 22.7238 13.1864 22.3146 13.0508L17.2592 11.3755C16.9592 11.2761 16.7239 11.0408 16.6245 10.7408L14.9492 5.68544ZM13.274 11.3699L14 9.17903L14.726 11.3699C15.0242 12.2698 15.7302 12.9758 16.6301 13.274L18.821 14L16.6301 14.726C15.7302 15.0242 15.0242 15.7302 14.726 16.6301L14 18.821L13.274 16.6301C12.9758 15.7302 12.2698 15.0242 11.3699 14.726L9.17903 14L11.3699 13.274C12.2698 12.9758 12.9758 12.2698 13.274 11.3699Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nAiSparklesIcon.displayName = \"AiSparklesIcon\"\n","import * as React from \"react\"\n\nexport const MinusIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M4 12C4 11.4477 4.44772 11 5 11H19C19.5523 11 20 11.4477 20 12C20 12.5523 19.5523 13 19 13H5C4.44772 13 4 12.5523 4 12Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nMinusIcon.displayName = \"MinusIcon\"\n","import * as React from \"react\"\n\nexport const SmilePlusIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M7.67909 4.05505C9.27254 3.18292 11.0926 2.81337 12.9 2.995C13.4495 3.05022 13.9398 2.64952 13.995 2.1C14.0502 1.55048 13.6495 1.06024 13.1 1.00502C10.8909 0.783033 8.66641 1.2347 6.71886 2.30064C4.7713 3.36659 3.19189 4.99691 2.18824 6.97729C1.1846 8.95767 0.803706 11.1954 1.09564 13.3963C1.38758 15.5972 2.33867 17.6583 3.8239 19.3085C5.30912 20.9588 7.25894 22.121 9.41704 22.6423C11.5751 23.1637 13.8405 23.0198 15.9153 22.2296C17.9901 21.4394 19.7772 20.0398 21.0417 18.2149C22.3062 16.39 22.9889 14.2252 23 12.005L23 12V11C23 10.4477 22.5523 10 22 10C21.4477 10 21 10.4477 21 11V11.9976C20.9904 13.8132 20.4319 15.5834 19.3978 17.0758C18.3632 18.5689 16.901 19.714 15.2034 20.3605C13.5059 21.0071 11.6524 21.1248 9.8867 20.6982C8.12098 20.2717 6.52567 19.3208 5.31048 17.9706C4.0953 16.6204 3.31713 14.9341 3.07828 13.1333C2.83942 11.3326 3.15106 9.50171 3.97222 7.8814C4.79339 6.26109 6.08564 4.92719 7.67909 4.05505ZM7.4 13.2C7.84043 12.8697 8.46468 12.9576 8.79686 13.3958L8.8015 13.4018C8.80745 13.4093 8.81876 13.4234 8.83531 13.4431C8.86846 13.4826 8.92219 13.5442 8.99542 13.6206C9.14272 13.7743 9.36407 13.9828 9.65067 14.1913C10.2277 14.6109 11.0255 15 12 15C12.9745 15 13.7723 14.6109 14.3493 14.1913C14.6359 13.9828 14.8573 13.7743 15.0046 13.6206C15.0778 13.5442 15.1315 13.4826 15.1647 13.4431C15.1812 13.4234 15.1925 13.4093 15.1985 13.4018L15.2031 13.3958C15.5353 12.9576 16.1596 12.8697 16.6 13.2C17.0418 13.5314 17.1314 14.1582 16.8 14.6L16 14C16.8 14.6 16.7998 14.6003 16.7995 14.6006L16.799 14.6013L16.7978 14.6029L16.7951 14.6065L16.7879 14.6159L16.7666 14.6432C16.7493 14.6649 16.726 14.6938 16.6966 14.7288C16.638 14.7987 16.555 14.8933 16.4485 15.0044C16.2365 15.2257 15.9266 15.5172 15.5257 15.8087C14.7277 16.3891 13.5255 17 12 17C10.4745 17 9.27227 16.3891 8.47433 15.8087C8.07343 15.5172 7.76352 15.2257 7.55145 15.0044C7.445 14.8933 7.362 14.7987 7.30336 14.7288C7.274 14.6938 7.25065 14.6649 7.23341 14.6432L7.21211 14.6159L7.2049 14.6065L7.20216 14.6029L7.20101 14.6013L7.20048 14.6006C7.20024 14.6003 7.2 14.6 8 14L7.2 14.6C6.86863 14.1582 6.95817 13.5314 7.4 13.2ZM8 9C8 8.44772 8.44772 8 9 8H9.01C9.56229 8 10.01 8.44772 10.01 9C10.01 9.55229 9.56229 10 9.01 10H9C8.44772 10 8 9.55229 8 9ZM15 8C14.4477 8 14 8.44772 14 9C14 9.55229 14.4477 10 15 10H15.01C15.5623 10 16.01 9.55229 16.01 9C16.01 8.44772 15.5623 8 15.01 8H15ZM15 5C15 4.44772 15.4477 4 16 4H18V2C18 1.44772 18.4477 1 19 1C19.5523 1 20 1.44772 20 2V4H22C22.5523 4 23 4.44772 23 5C23 5.55228 22.5523 6 22 6H20V8C20 8.55228 19.5523 9 19 9C18.4477 9 18 8.55228 18 8V6H16C15.4477 6 15 5.55228 15 5Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nSmilePlusIcon.displayName = \"SmilePlusIcon\"\n","import * as React from \"react\"\n\nexport const TabsIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M3 8h4v2H3V8zM9 8h4v2H9V8zM15 8h6v2h-6V8z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M2 6h20a1 1 0 011 1v10a1 1 0 01-1 1H2a1 1 0 01-1-1V7a1 1 0 011-1zm1 2v8h18V8H3z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nTabsIcon.displayName = \"TabsIcon\"","import * as React from \"react\"\n\nexport const ExplorerIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </svg>\n    )\n  }\n)\n\nExplorerIcon.displayName = \"ExplorerIcon\"","import * as React from \"react\"\n\nexport const GridIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M3 3H10V10H3V3Z\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n        <path\n          d=\"M14 3H21V10H14V3Z\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n        <path\n          d=\"M14 14H21V21H14V14Z\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n        <path\n          d=\"M3 14H10V21H3V14Z\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </svg>\n    )\n  }\n)\n\nGridIcon.displayName = \"GridIcon\"","import * as React from \"react\"\n\nexport const ToggleListIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        {/* Chevron pointing right */}\n        <path d=\"M9 6l6 6-6 6\" />\n        {/* Horizontal lines representing list items */}\n        <line x1=\"16\" y1=\"8\" x2=\"21\" y2=\"8\" />\n        <line x1=\"16\" y1=\"12\" x2=\"21\" y2=\"12\" />\n        <line x1=\"16\" y1=\"16\" x2=\"21\" y2=\"16\" />\n      </svg>\n    )\n  }\n)\n\nToggleListIcon.displayName = \"ToggleListIcon\"\n","import { Icon } from \"@iconify/react\"\n\nexport const InfoCalloutIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"quill:info\" className={className} />\n)\n\nexport const NoteCalloutIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"proicons:note\" className={className} />\n)\n\nexport const TipCalloutIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"carbon:idea\" className={className} />\n)\n\nexport const WarningCalloutIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"circum:warning\" className={className} />\n)\n\nexport const DangerCalloutIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"mynaui:danger-octagon\" className={className} />\n)\n","import type { Attrs, Node } from \"@tiptap/pm/model\"\nimport { findNodePosition, isValidPosition } from \"./tiptap-utils\"\nimport type { Editor } from \"@tiptap/react\"\nimport { NodeSelection, TextSelection } from \"@tiptap/pm/state\"\n\n/**\n * Splits an array into chunks of specified size\n */\nexport function chunkArray<T>(array: Array<T>, size: number): Array<Array<T>> {\n  return Array.from({ length: Math.ceil(array.length / size) }, (_, index) =>\n    array.slice(index * size, index * size + size)\n  )\n}\n\n/**\n * Helper function to check if there's content above the current position\n */\nexport function hasContentAbove(editor: Editor | null): {\n  hasContent: boolean\n  content: string\n} {\n  if (!editor) return { hasContent: false, content: \"\" }\n\n  const { state } = editor\n  const { $from } = state.selection\n\n  for (let i = $from.index(0) - 1; i >= 0; i--) {\n    const node = state.doc.child(i)\n    const content = node.textContent.trim()\n\n    if (content) {\n      return { hasContent: true, content }\n    }\n  }\n\n  return { hasContent: false, content: \"\" }\n}\n\n/**\n * Gets the active attributes of a specific mark in the current editor selection.\n *\n * @param editor - The Tiptap editor instance.\n * @param markName - The name of the mark to look for (e.g., \"highlight\", \"link\").\n * @returns The attributes of the active mark, or `null` if the mark is not active.\n */\nexport function getActiveMarkAttrs(\n  editor: Editor | null,\n  markName: string\n): Attrs | null {\n  if (!editor) return null\n\n  const { state } = editor\n  const { from, to, empty, $from } = state.selection\n\n  if (empty) {\n    const mark = $from.marks().find((m) => m.type.name === markName)\n    return mark?.attrs ?? null\n  }\n\n  const seen = new Set<string>()\n  let foundAttrs: Attrs | null = null\n\n  state.doc.nodesBetween(from, to, (node) => {\n    if (!node.isText) return\n\n    for (const mark of node.marks) {\n      if (mark.type.name === markName && !seen.has(mark.type.name)) {\n        seen.add(mark.type.name)\n        foundAttrs = mark.attrs\n      }\n    }\n  })\n\n  return foundAttrs\n}\n\n/**\n * Finds the position of a node in the editor selection\n * @param params Object containing editor, node (optional), and nodePos (optional)\n * @returns The position of the node in the selection or null if not found\n */\nexport function findSelectionPosition(params: {\n  editor: Editor\n  node?: Node | null\n  nodePos?: number | null\n}): number | null {\n  const { editor, node, nodePos } = params\n\n  if (isValidPosition(nodePos)) return nodePos\n\n  if (node) {\n    const found = findNodePosition({ editor, node })\n    if (found) return found.pos\n  }\n\n  const { selection } = editor.state\n  if (!selection.empty) return null\n\n  const resolvedPos = selection.$anchor\n  const nodeDepth = 1\n  const selectedNode = resolvedPos.node(nodeDepth)\n\n  return selectedNode ? resolvedPos.before(nodeDepth) : null\n}\n\n/**\n * Gets the currently selected DOM element in the editor\n * @param editor The Tiptap editor instance\n * @returns The selected DOM element or null if no selection is present\n */\nexport function getSelectedDOMElement(editor: Editor): HTMLElement | null {\n  const { state, view } = editor\n  const { selection } = state\n\n  if (selection instanceof NodeSelection) {\n    return view.nodeDOM(selection.from) as HTMLElement | null\n  }\n\n  if (selection instanceof TextSelection) {\n    const $anchor = selection.$anchor\n\n    // Ensure the depth is sufficient to avoid errors\n    if ($anchor.depth >= 1) {\n      const dom = view.nodeDOM($anchor.before(1))\n      if (dom instanceof HTMLElement) {\n        return dom\n      }\n    }\n  }\n\n  return null\n}\n\n/**\n * Gets the closest block node from the current selection in the editor\n * @param editor The Tiptap editor instance\n * @returns An object containing the closest block node, its position, and depth, or null if not found\n */\nexport function getClosestBlockNode(editor: Editor | null) {\n  if (!editor) return null\n  const { selection } = editor.state\n  const { $from } = selection\n\n  let depth = $from.depth\n  while (depth > 0) {\n    const node = $from.node(depth)\n    if (node.type.isBlock) {\n      const pos = $from.before(depth)\n      return { node, pos, depth }\n    }\n    depth--\n  }\n  return null\n}\n\n/**\n * Gets the anchor node and its position in the editor.\n * @param editor The Tiptap editor instance\n * @param allowEmptySelection If true, still returns the node at the cursor position even if selection is empty\n * @returns An object containing the anchor node and its position, or null if not found\n */\nexport function getAnchorNodeAndPos(\n  editor: Editor | null,\n  allowEmptySelection: boolean = true\n): { node: Node; pos: number } | null {\n  if (!editor) return null\n\n  const { state } = editor\n  const { selection } = state\n\n  if (selection instanceof NodeSelection) {\n    const node = selection.node\n    const pos = selection.from\n\n    if (node && isValidPosition(pos)) {\n      return { node, pos }\n    }\n  }\n\n  if (selection.empty && !allowEmptySelection) return null\n\n  const $anchor = selection.$anchor\n  const depth = 1 // explicitly use depth 1\n  const node = $anchor.node(depth)\n  const pos = $anchor.before(depth)\n\n  return { node, pos }\n}\n\n/**\n * Checks if the current selection in the editor contains any text.\n *\n * @param editor - The Tiptap editor instance.\n * @returns `true` if the selection contains text, `false` otherwise.\n */\nexport function selectionHasText(editor: Editor | null): boolean {\n  if (!editor) return false\n\n  const { state } = editor\n  const { selection, doc } = state\n\n  if (selection.empty) return false\n\n  const text = doc.textBetween(selection.from, selection.to, \"\\n\", \"\\0\")\n  return text.trim().length > 0\n}\n\n/**\n * Retrieves a specific extension by name from the Tiptap editor.\n * @param editor - The Tiptap editor instance\n * @param extensionName - The name of the extension to retrieve\n * @returns The extension instance if found, otherwise null\n */\nexport function getEditorExtension(\n  editor: Editor | null,\n  extensionName: string\n) {\n  if (!editor) return null\n\n  const extension = editor.extensionManager.extensions.find(\n    (ext) => ext.name === extensionName\n  )\n\n  if (!extension) {\n    console.warn(\n      `Extension \"${extensionName}\" not found in the editor schema. Ensure it is included in the editor configuration.`\n    )\n    return null\n  }\n\n  return extension\n}\n","import * as React from \"react\"\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n  variant?: \"ghost\" | \"white\" | \"gray\" | \"green\" | \"default\"\n  size?: \"default\" | \"small\"\n  appearance?: \"default\" | \"subdued\" | \"emphasized\"\n  trimText?: boolean\n}\n\nexport const Badge = React.forwardRef<HTMLDivElement, BadgeProps>(\n  (\n    {\n      variant,\n      size = \"default\",\n      appearance = \"default\",\n      trimText = false,\n      className,\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    return (\n      <div\n        ref={ref}\n        className={`tiptap-badge ${className || \"\"}`}\n        data-style={variant}\n        data-size={size}\n        data-appearance={appearance}\n        data-text-trim={trimText ? \"on\" : \"off\"}\n        {...props}\n      >\n        {children}\n      </div>\n    )\n  }\n)\n\nBadge.displayName = \"Badge\"\n\nexport default Badge\n","\"use client\"\n\nimport * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type { UseEmojiTriggerConfig } from \"@/components/tiptap-ui/emoji-trigger-button\"\nimport {\n  EMOJI_TRIGGER_SHORTCUT_KEY,\n  useEmojiTrigger,\n} from \"@/components/tiptap-ui/emoji-trigger-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface EmojiTriggerButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseEmojiTriggerConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function EmojiTriggerShortcutBadge({\n  shortcutKeys = EMOJI_TRIGGER_SHORTCUT_KEY,\n}: {\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for adding emoji trigger in a Tiptap editor.\n *\n * For custom button implementations, use the `useEmojiTrigger` hook instead.\n */\nexport const EmojiTriggerButton = React.forwardRef<\n  HTMLButtonElement,\n  EmojiTriggerButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      node,\n      nodePos,\n      text,\n      trigger = \":\",\n      hideWhenUnavailable = false,\n      onTriggerApplied,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      canAddTrigger,\n      handleAddTrigger,\n      label,\n      shortcutKeys,\n      Icon,\n    } = useEmojiTrigger({\n      editor,\n      node,\n      nodePos,\n      trigger,\n      hideWhenUnavailable,\n      onTriggerApplied,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleAddTrigger()\n      },\n      [handleAddTrigger, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        role=\"button\"\n        tabIndex={-1}\n        disabled={!canAddTrigger}\n        data-disabled={!canAddTrigger}\n        aria-label={label}\n        tooltip=\"Add emoji\"\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <EmojiTriggerShortcutBadge shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nEmojiTriggerButton.displayName = \"EmojiTriggerButton\"\n","\"use client\"\n\nimport * as React from \"react\"\n\nexport function useIsMobile(breakpoint = 768) {\n  const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\n\n  React.useEffect(() => {\n    const mql = window.matchMedia(`(max-width: ${breakpoint - 1}px)`)\n    const onChange = () => {\n      setIsMobile(window.innerWidth < breakpoint)\n    }\n    mql.addEventListener(\"change\", onChange)\n    setIsMobile(window.innerWidth < breakpoint)\n    return () => mql.removeEventListener(\"change\", onChange)\n  }, [breakpoint])\n\n  return !!isMobile\n}\n","import * as React from \"react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport { type Editor } from \"@tiptap/react\"\nimport type { Node } from \"@tiptap/pm/model\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Lib ---\nimport {\n  findNodePosition,\n  isNodeTypeSelected,\n  isValidPosition,\n} from \"@/lib/tiptap-utils\"\n\n// --- Icons ---\nimport { SmilePlusIcon } from \"@/components/tiptap-icons/smile-plus-icon\"\n\nexport const EMOJI_TRIGGER_SHORTCUT_KEY = \"mod+shift+e\"\n\n/**\n * Configuration for the emoji trigger functionality\n */\nexport interface UseEmojiTriggerConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Optional node to insert trigger after.\n   */\n  node?: Node | null\n  /**\n   * Optional position of the node to insert trigger after.\n   */\n  nodePos?: number | null\n  /**\n   * The trigger text to insert.\n   * @default \":\"\n   */\n  trigger?: string\n  /**\n   * Whether the button should hide when trigger insertion is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a successful trigger insertion.\n   */\n  onTriggerApplied?: (trigger: string) => void\n}\n\n/**\n * Checks if emoji trigger can be added in the current editor state\n */\nexport function canAddEmojiTrigger(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (isNodeTypeSelected(editor, [\"image\"])) return false\n\n  return true\n}\n\n/**\n * Inserts a trigger in a block node at a specified position or after the current selection\n */\nfunction insertTriggerInBlockNode(\n  editor: Editor,\n  trigger: string,\n  node?: Node | null,\n  nodePos?: number | null\n): boolean {\n  if ((node !== undefined && node !== null) || isValidPosition(nodePos)) {\n    const foundPos = findNodePosition({\n      editor,\n      node: node || undefined,\n      nodePos: nodePos || undefined,\n    })\n\n    if (!foundPos) {\n      return false\n    }\n\n    const isEmpty =\n      foundPos.node.type.name === \"paragraph\" &&\n      foundPos.node.content.size === 0\n    const posAndNodeSize = foundPos.pos + foundPos.node.nodeSize\n\n    return editor\n      .chain()\n      .insertContentAt(isEmpty ? foundPos.pos : posAndNodeSize, {\n        type: \"paragraph\",\n        content: [{ type: \"text\", text: trigger }],\n      })\n      .focus(isEmpty ? foundPos.pos + 2 : posAndNodeSize + trigger.length + 1)\n      .run()\n  }\n\n  const { $from } = editor.state.selection\n\n  return editor\n    .chain()\n    .insertContentAt($from.after(), {\n      type: \"paragraph\",\n      content: [{ type: \"text\", text: trigger }],\n    })\n    .focus()\n    .run()\n}\n\n/**\n * Inserts a trigger in a text node at the current selection\n */\nfunction insertTriggerInTextNode(\n  editor: Editor,\n  trigger: string,\n  node?: Node | null,\n  nodePos?: number | null\n): boolean {\n  if ((node !== undefined && node !== null) || isValidPosition(nodePos)) {\n    const foundPos = findNodePosition({\n      editor,\n      node: node || undefined,\n      nodePos: nodePos || undefined,\n    })\n\n    if (!foundPos) {\n      return false\n    }\n\n    const isEmpty =\n      foundPos.node.type.name === \"paragraph\" &&\n      foundPos.node.content.size === 0\n    const posAndNodeSize = foundPos.pos + foundPos.node.nodeSize\n\n    editor.view.dispatch(\n      editor.view.state.tr\n        .scrollIntoView()\n        .insertText(\n          trigger,\n          isEmpty ? foundPos.pos : posAndNodeSize,\n          isEmpty ? foundPos.pos : posAndNodeSize\n        )\n    )\n\n    editor.commands.focus(\n      isEmpty ? foundPos.pos + 2 : posAndNodeSize + trigger.length + 1\n    )\n\n    return true\n  }\n\n  const { $from } = editor.state.selection\n  const currentNode = $from.node()\n  const hasContentBefore =\n    $from.parentOffset > 0 &&\n    currentNode.textContent[$from.parentOffset - 1] !== \" \"\n\n  return editor\n    .chain()\n    .insertContent({\n      type: \"text\",\n      text: hasContentBefore ? ` ${trigger}` : trigger,\n    })\n    .focus()\n    .run()\n}\n\n/**\n * Adds an emoji trigger at the current selection or specified node position\n */\nexport function addEmojiTrigger(\n  editor: Editor | null,\n  trigger: string = \":\",\n  node?: Node | null,\n  nodePos?: number | null\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!canAddEmojiTrigger(editor)) return false\n\n  try {\n    const { $from } = editor.state.selection\n    const currentNode = $from.node()\n    const isBlockNode = currentNode.isBlock && !currentNode.isTextblock\n\n    if (isBlockNode) {\n      return insertTriggerInBlockNode(editor, trigger, node, nodePos)\n    }\n\n    return insertTriggerInTextNode(editor, trigger, node, nodePos)\n  } catch {\n    return false\n  }\n}\n\n/**\n * Determines if the emoji trigger button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canAddEmojiTrigger(editor)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides emoji trigger functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage - no params needed\n * function MySimpleEmojiTriggerButton() {\n *   const { isVisible, handleAddTrigger } = useEmojiTrigger()\n *\n *   if (!isVisible) return null\n *\n *   return <button onClick={handleAddTrigger}>Add Emoji</button>\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedEmojiTriggerButton() {\n *   const { isVisible, handleAddTrigger, label } = useEmojiTrigger({\n *     editor: myEditor,\n *     trigger: \"::\",\n *     hideWhenUnavailable: true,\n *     onTriggerApplied: (trigger) => console.log('Trigger added:', trigger)\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleAddTrigger}\n *       aria-label={label}\n *     >\n *       Add Emoji Trigger\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useEmojiTrigger(config?: UseEmojiTriggerConfig) {\n  const {\n    editor: providedEditor,\n    node,\n    nodePos,\n    trigger = \":\",\n    hideWhenUnavailable = false,\n    onTriggerApplied,\n  } = config || {}\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canAddTrigger = canAddEmojiTrigger(editor)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowButton({ editor, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable])\n\n  const handleAddTrigger = React.useCallback(() => {\n    if (!editor) return false\n\n    const success = addEmojiTrigger(editor, trigger, node, nodePos)\n    if (success) {\n      onTriggerApplied?.(trigger)\n    }\n    return success\n  }, [editor, trigger, node, nodePos, onTriggerApplied])\n\n  useHotkeys(\n    EMOJI_TRIGGER_SHORTCUT_KEY,\n    (event) => {\n      event.preventDefault()\n      handleAddTrigger()\n    },\n    {\n      enabled: isVisible && canAddTrigger,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    handleAddTrigger,\n    canAddTrigger,\n    label: \"Add emoji\",\n    shortcutKeys: EMOJI_TRIGGER_SHORTCUT_KEY,\n    trigger,\n    Icon: SmilePlusIcon,\n  }\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport type { Editor } from \"@tiptap/react\"\n\n// --- Icons ---\nimport { CodeBlockIcon } from \"@/components/tiptap-icons/code-block-icon\"\nimport { HeadingOneIcon } from \"@/components/tiptap-icons/heading-one-icon\"\nimport { HeadingTwoIcon } from \"@/components/tiptap-icons/heading-two-icon\"\nimport { HeadingThreeIcon } from \"@/components/tiptap-icons/heading-three-icon\"\nimport { ImageIcon } from \"@/components/tiptap-icons/image-icon\"\nimport { VideoIcon } from \"@/components/tiptap-icons/video-icon\"\nimport { ListIcon } from \"@/components/tiptap-icons/list-icon\"\nimport { ListOrderedIcon } from \"@/components/tiptap-icons/list-ordered-icon\"\nimport { BlockquoteIcon } from \"@/components/tiptap-icons/blockquote-icon\"\nimport { ListTodoIcon } from \"@/components/tiptap-icons/list-todo-icon\"\nimport { AiSparklesIcon } from \"@/components/tiptap-icons/ai-sparkles-icon\"\nimport { MinusIcon } from \"@/components/tiptap-icons/minus-icon\"\nimport { TypeIcon } from \"@/components/tiptap-icons/type-icon\"\nimport { AtSignIcon } from \"@/components/tiptap-icons/at-sign-icon\"\nimport { SmilePlusIcon } from \"@/components/tiptap-icons/smile-plus-icon\"\nimport { TabsIcon } from \"@/components/tiptap-icons/tabs-icon\"\nimport { ExplorerIcon } from \"@/components/tiptap-icons/explorer-icon\"\nimport { GridIcon } from \"@/components/tiptap-icons/grid-icon\"\nimport { ToggleListIcon } from \"@/components/tiptap-icons/toggle-list-icon\"\nimport {\n  InfoCalloutIcon,\n  NoteCalloutIcon,\n  TipCalloutIcon,\n  WarningCalloutIcon,\n  DangerCalloutIcon,\n} from \"@/components/tiptap-icons/callout-icons\"\nimport { Icon } from \"@iconify/react\"\n\n// Card Icon component\nconst CardIcon: React.ComponentType<{ className?: string }> = ({ className }) => (\n  React.createElement(Icon, { icon: \"mdi:card-outline\", className })\n)\n\n// New Icon components for updated slash menu\nconst TextLineIcon: React.ComponentType<{ className?: string }> = ({ className }) => (\n  React.createElement(Icon, { icon: \"majesticons:text-line\", className })\n)\n\nconst Heading1Icon: React.ComponentType<{ className?: string }> = ({ className }) => (\n  React.createElement(Icon, { icon: \"material-symbols-light:format-h1\", className })\n)\n\nconst Heading2Icon: React.ComponentType<{ className?: string }> = ({ className }) => (\n  React.createElement(Icon, { icon: \"material-symbols-light:format-h2-rounded\", className })\n)\n\nconst Heading3Icon: React.ComponentType<{ className?: string }> = ({ className }) => (\n  React.createElement(Icon, { icon: \"material-symbols-light:format-h3\", className })\n)\n\nconst TextQuoteIcon: React.ComponentType<{ className?: string }> = ({ className }) => (\n  React.createElement(Icon, { icon: \"lucide:text-quote\", className })\n)\n\n// --- Lib ---\nimport {\n  isExtensionAvailable,\n  isNodeInSchema,\n} from \"@/lib/tiptap-utils\"\nimport {\n  findSelectionPosition,\n  hasContentAbove,\n} from \"@/lib/tiptap-advanced-utils\"\n\n// --- Tiptap UI ---\nimport type { SuggestionItem } from \"@/components/tiptap-ui-utils/suggestion-menu\"\nimport { addEmojiTrigger } from \"@/components/tiptap-ui/emoji-trigger-button\"\nimport { addMentionTrigger } from \"@/components/tiptap-ui/mention-trigger-button\"\n\nexport interface SlashMenuConfig {\n  enabledItems?: SlashMenuItemType[]\n  customItems?: SuggestionItem[]\n  itemGroups?: {\n    [key in SlashMenuItemType]?: string\n  }\n  showGroups?: boolean\n}\n\nconst texts = {\n  // AI\n  continue_writing: {\n    title: \"Continue Writing\",\n    subtext: \"Continue writing from the current position\",\n    aliases: [\"continue\", \"write\", \"continue writing\", \"ai\"],\n    badge: AiSparklesIcon,\n    group: \"AI\",\n  },\n  ai_ask_button: {\n    title: \"Ask AI\",\n    subtext: \"Ask AI to generate content\",\n    aliases: [\"ai\", \"ask\", \"generate\"],\n    badge: AiSparklesIcon,\n    group: \"AI\",\n  },\n\n  // Basic Blocks\n  text: {\n    title: \"Text\",\n    subtext: \"just start with writing plain text\",\n    aliases: [\"p\", \"paragraph\", \"text\"],\n    badge: TextLineIcon,\n    group: \"Basic Blocks\",\n  },\n  heading_1: {\n    title: \"Heading 1\",\n    subtext: \"big section heading\",\n    aliases: [\"h\", \"heading1\", \"h1\"],\n    badge: Heading1Icon,\n    group: \"Basic Blocks\",\n  },\n  heading_2: {\n    title: \"Heading 2\",\n    subtext: \"medium section heading\",\n    aliases: [\"h2\", \"heading2\", \"subheading\"],\n    badge: Heading2Icon,\n    group: \"Basic Blocks\",\n  },\n  heading_3: {\n    title: \"Heading 3\",\n    subtext: \"small section heading\",\n    aliases: [\"h3\", \"heading3\", \"subheading\"],\n    badge: Heading3Icon,\n    group: \"Basic Blocks\",\n  },\n  bullet_list: {\n    title: \"Bullet List\",\n    subtext: \"List with unordered items\",\n    aliases: [\"ul\", \"li\", \"list\", \"bulletlist\", \"bullet list\"],\n    badge: ListIcon,\n    group: \"Tables & Lists\",\n  },\n  ordered_list: {\n    title: \"Numbered List\",\n    subtext: \"List with ordered items\",\n    aliases: [\"ol\", \"li\", \"list\", \"numberedlist\", \"numbered list\"],\n    badge: ListOrderedIcon,\n    group: \"Tables & Lists\",\n  },\n  task_list: {\n    title: \"To-do list\",\n    subtext: \"List with tasks\",\n    aliases: [\"tasklist\", \"task list\", \"todo\", \"checklist\"],\n    badge: ListTodoIcon,\n    group: \"Tables & Lists\",\n  },\n  toggle_list: {\n    title: \"Toggle List\",\n    subtext: \"Collapsible content section\",\n    aliases: [\"toggle\", \"collapse\", \"accordion\", \"details\", \"dropdown\"],\n    badge: ToggleListIcon,\n    group: \"Tables & Lists\",\n  },\n  quote: {\n    title: \"Quote\",\n    subtext: \"create a block quote\",\n    aliases: [\"quote\", \"blockquote\"],\n    badge: TextQuoteIcon,\n    group: \"Basic Blocks\",\n  },\n  code_block: {\n    title: \"Code Block\",\n    subtext: \"Code block with syntax highlighting\",\n    aliases: [\"code\", \"pre\"],\n    badge: CodeBlockIcon,\n    group: \"Basic Blocks\",\n  },\n\n  // Insert\n  // mention: {\n  //   title: \"Mention\",\n  //   subtext: \"Mention a user or item\",\n  //   aliases: [\"mention\", \"user\", \"item\", \"tag\"],\n  //   badge: AtSignIcon,\n  //   group: \"Insert\",\n  // },\n  emoji: {\n    title: \"Emoji\",\n    subtext: \"Insert an emoji\",\n    aliases: [\"emoji\", \"emoticon\", \"smiley\"],\n    badge: SmilePlusIcon,\n    group: \"Insert\",\n  },\n  divider: {\n    title: \"Separator\",\n    subtext: \"Horizontal line to separate content\",\n    aliases: [\"hr\", \"horizontalRule\", \"line\", \"separator\"],\n    badge: MinusIcon,\n    group: \"Insert\",\n  },\n\n  // Upload\n  image: {\n    title: \"Image\",\n    subtext: \"Resizable image with caption\",\n    aliases: [\n      \"image\",\n      \"imageUpload\",\n      \"upload\",\n      \"img\",\n      \"picture\",\n      \"media\",\n      \"url\",\n    ],\n    badge: ImageIcon,\n    group: \"Upload\",\n  },\n  video: {\n    title: \"Video\",\n    subtext: \"Upload or embed videos\",\n    aliases: [\n      \"video\",\n      \"videoUpload\",\n      \"upload\",\n      \"vid\",\n      \"youtube\",\n      \"vimeo\",\n      \"loom\",\n      \"media\",\n    ],\n    badge: VideoIcon,\n    group: \"Upload\",\n  },\n  annotation: {\n    title: \"Annotation\",\n    subtext: \"Hardware annotation from 3D model\",\n    aliases: [\n      \"annotation\",\n      \"pointer\",\n      \"hardware\",\n      \"3d\",\n      \"model\",\n    ],\n    badge: ExplorerIcon,\n    group: \"Insert\",\n  },\n\n  //Table & Lists\n  table: {\n    title: \"Table\",\n    subtext: \"Basic data table\",\n    aliases: [\"t\", \"table\"],\n    badge: GridIcon,\n    group: \"Tables & Lists\",\n  },\n  bom_table: {\n    title: \"BOM Table\",\n    subtext: \"Bill of Materials table with sidebar\",\n    aliases: [\"bom\", \"bill\", \"materials\", \"parts\"],\n    badge: GridIcon,\n    group: \"Tables & Lists\",\n  },\n\n  // Tabs\n  tabs: {\n    title: \"Tabs\",\n    subtext: \"Create tabbed content sections\",\n    aliases: [\"tabs\", \"tab\", \"tabbed\", \"sections\"],\n    badge: TabsIcon,\n    group: \"Tabs\",\n  },\n\n  // Explorer\n  explorer: {\n    title: \"3D Model Explorer\",\n    subtext: \"Interactive 3D model viewer card\",\n    aliases: [\"explorer\", \"3d\", \"model\", \"viewer\", \"card\"],\n    badge: ExplorerIcon,\n    group: \"Insert\",\n  },\n\n  // Callouts\n  callout_info: {\n    title: \"Info Callout\",\n    subtext: \"Informational callout block\",\n    aliases: [\"callout\", \"info\", \"information\"],\n    badge: InfoCalloutIcon,\n    group: \"Insert\",\n  },\n  callout_note: {\n    title: \"Note Callout\",\n    subtext: \"Note callout block\",\n    aliases: [\"callout\", \"note\"],\n    badge: NoteCalloutIcon,\n    group: \"Insert\",\n  },\n  callout_tip: {\n    title: \"Tip Callout\",\n    subtext: \"Tip callout block\",\n    aliases: [\"callout\", \"tip\", \"idea\"],\n    badge: TipCalloutIcon,\n    group: \"Insert\",\n  },\n  callout_warning: {\n    title: \"Warning Callout\",\n    subtext: \"Warning callout block\",\n    aliases: [\"callout\", \"warning\"],\n    badge: WarningCalloutIcon,\n    group: \"Insert\",\n  },\n  callout_danger: {\n    title: \"Danger Callout\",\n    subtext: \"Danger callout block\",\n    aliases: [\"callout\", \"danger\", \"error\"],\n    badge: DangerCalloutIcon,\n    group: \"Insert\",\n  },\n\n  // Card\n  card: {\n    title: \"Card\",\n    subtext: \"Interactive card with icon, title, and link\",\n    aliases: [\"card\", \"link\", \"cta\", \"button\"],\n    badge: CardIcon,\n    group: \"Insert\",\n  },\n\n  // Columns - 2 columns\n  columns_2: {\n    title: \"2 Columns\",\n    subtext: \"Create 2 side-by-side columns\",\n    aliases: [\"columns\", \"column\", \"2 columns\", \"two columns\", \"layout\", \"grid\"],\n    badge: GridIcon,\n    group: \"Insert\",\n  },\n\n  // Columns - 3 columns\n  columns_3: {\n    title: \"3 Columns\",\n    subtext: \"Create 3 side-by-side columns\",\n    aliases: [\"3 columns\", \"three columns\", \"triple\"],\n    badge: GridIcon,\n    group: \"Insert\",\n  },\n\n  // Columns - 4 columns\n  columns_4: {\n    title: \"4 Columns\",\n    subtext: \"Create 4 side-by-side columns\",\n    aliases: [\"4 columns\", \"four columns\", \"quad\"],\n    badge: GridIcon,\n    group: \"Insert\",\n  },\n\n  // Columns - 5 columns\n  columns_5: {\n    title: \"5 Columns\",\n    subtext: \"Create 5 side-by-side columns\",\n    aliases: [\"5 columns\", \"five columns\"],\n    badge: GridIcon,\n    group: \"Insert\",\n  },\n}\n\nexport type SlashMenuItemType = keyof typeof texts\n\nconst getItemImplementations = () => {\n  return {\n    // AI\n    continue_writing: {\n      check: (editor: Editor) => {\n        const { hasContent } = hasContentAbove(editor)\n        const extensionsReady = isExtensionAvailable(editor, [\n          \"ai\",\n          \"aiAdvanced\",\n        ])\n        return extensionsReady && hasContent\n      },\n      action: ({ editor }: { editor: Editor }) => {\n        const editorChain = editor.chain().focus()\n\n        const nodeSelectionPosition = findSelectionPosition({ editor })\n\n        if (nodeSelectionPosition !== null) {\n          editorChain.setNodeSelection(nodeSelectionPosition)\n        }\n\n        editorChain.run()\n\n        editor.chain().focus().aiGenerationShow().run()\n\n        requestAnimationFrame(() => {\n          const { hasContent, content } = hasContentAbove(editor)\n\n          const snippet =\n            content.length > 500 ? `...${content.slice(-500)}` : content\n\n          let aiPrompt: string;\n          if (hasContent) {\n            aiPrompt = `Context: ${snippet}\\n\\nContinue writing from where the text above ends. Write ONLY ONE SENTENCE. DONT REPEAT THE TEXT.`;\n          } else {\n            aiPrompt = \"Start writing a new paragraph. Write ONLY ONE SENTENCE.\";\n          }\n\n          (editor as any)\n            .chain()\n            .focus()\n            .aiTextPrompt({\n              stream: true,\n              format: \"rich-text\",\n              text: aiPrompt,\n            })\n            .run()\n        })\n      },\n    },\n    ai_ask_button: {\n      check: (editor: Editor) =>\n        isExtensionAvailable(editor, [\"ai\", \"aiAdvanced\"]),\n      action: ({ editor }: { editor: Editor }) => {\n        const editorChain = editor.chain().focus()\n\n        const nodeSelectionPosition = findSelectionPosition({ editor })\n\n        if (nodeSelectionPosition !== null) {\n          editorChain.setNodeSelection(nodeSelectionPosition)\n        }\n\n        editorChain.run()\n\n        editor.chain().focus().aiGenerationShow().run()\n      },\n    },\n\n    // Basic Blocks\n    text: {\n      check: (editor: Editor) => isNodeInSchema(\"paragraph\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().setParagraph().run()\n      },\n    },\n    heading_1: {\n      check: (editor: Editor) => isNodeInSchema(\"heading\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().toggleHeading({ level: 1 }).run()\n      },\n    },\n    heading_2: {\n      check: (editor: Editor) => isNodeInSchema(\"heading\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().toggleHeading({ level: 2 }).run()\n      },\n    },\n    heading_3: {\n      check: (editor: Editor) => isNodeInSchema(\"heading\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().toggleHeading({ level: 3 }).run()\n      },\n    },\n    bullet_list: {\n      check: (editor: Editor) => isNodeInSchema(\"bulletList\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().toggleBulletList().run()\n      },\n    },\n    ordered_list: {\n      check: (editor: Editor) => isNodeInSchema(\"orderedList\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().toggleOrderedList().run()\n      },\n    },\n    task_list: {\n      check: (editor: Editor) => isNodeInSchema(\"taskList\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().toggleTaskList().run()\n      },\n    },\n    toggle_list: {\n      check: (editor: Editor) => isNodeInSchema(\"toggleList\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().setToggleListNode().run()\n      },\n    },\n    quote: {\n      check: (editor: Editor) => isNodeInSchema(\"blockquote\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().toggleBlockquote().run()\n      },\n    },\n    code_block: {\n      check: (editor: Editor) => isNodeInSchema(\"codeBlock\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().toggleNode(\"codeBlock\", \"paragraph\").run()\n      },\n    },\n\n    // Insert\n    // mention: {\n    //   check: (editor: Editor) =>\n    //     isExtensionAvailable(editor, [\"mention\", \"mentionAdvanced\"]),\n    //   action: ({ editor }: { editor: Editor }) => addMentionTrigger(editor),\n    // },\n    emoji: {\n      check: (editor: Editor) =>\n        isExtensionAvailable(editor, [\"emoji\", \"emojiPicker\"]),\n      action: ({ editor }: { editor: Editor }) => addEmojiTrigger(editor),\n    },\n    divider: {\n      check: (editor: Editor) => isNodeInSchema(\"horizontalRule\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().setHorizontalRule().run()\n      },\n    },\n\n    // Upload\n    image: {\n      check: (editor: Editor) => isNodeInSchema(\"imageUpload\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor\n          .chain()\n          .focus()\n          .setImageUploadNode()\n          .run()\n      },\n    },\n    video: {\n      check: (editor: Editor) => isNodeInSchema(\"videoUpload\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor\n          .chain()\n          .focus()\n          .setVideoUploadNode()\n          .run()\n      },\n    },\n    annotation: {\n      check: (editor: Editor) => isNodeInSchema(\"annotation\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor\n          .chain()\n          .focus()\n          .setAnnotation({})\n          .run()\n      },\n    },\n\n    //Tables\n\n    table: {\n      check: (editor: Editor) => isNodeInSchema(\"bomNode\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        // Insert a blank BOM table (without product/organization IDs, it will render as bare table)\n        editor.chain().focus().insertBomTable('blank').run()\n      },\n    },\n\n    bom_table: {\n      check: (editor: Editor) => isNodeInSchema(\"bomNode\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        // Detect BOM type from tab context\n        let bomType: '3d-printed-parts' | 'regular-parts' = 'regular-parts';\n\n        // Get tab context from editor attributes\n        const editorAttrs = (editor as any)?.options?.editorProps?.attributes || {};\n        const tabContext = editorAttrs[\"data-tab-context\"] || \"\";\n\n        if (tabContext) {\n          const tabTitle = tabContext.toLowerCase();\n          // Check if tab title contains \"3d print\" variations\n          if (\n            tabTitle.includes('3d print') ||\n            tabTitle.includes('3d-print') ||\n            tabTitle.includes('3dprint') ||\n            tabTitle.includes('printed part')\n          ) {\n            bomType = '3d-printed-parts';\n          }\n        }\n\n        editor.chain().focus().insertBomTable(bomType).run()\n      },\n    },\n\n    // Tabs\n    tabs: {\n      check: (editor: Editor) => isNodeInSchema(\"tabs\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().insertTabs().run()\n      },\n    },\n\n    // Explorer\n    explorer: {\n      check: (editor: Editor) => isNodeInSchema(\"explorerCard\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().insertExplorerCard().run()\n      },\n    },\n\n    // Callouts\n    callout_info: {\n      check: (editor: Editor) => isNodeInSchema(\"callout\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().setCallout({ type: \"info\" }).run()\n      },\n    },\n    callout_note: {\n      check: (editor: Editor) => isNodeInSchema(\"callout\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().setCallout({ type: \"note\" }).run()\n      },\n    },\n    callout_tip: {\n      check: (editor: Editor) => isNodeInSchema(\"callout\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().setCallout({ type: \"tip\" }).run()\n      },\n    },\n    callout_warning: {\n      check: (editor: Editor) => isNodeInSchema(\"callout\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().setCallout({ type: \"warning\" }).run()\n      },\n    },\n    callout_danger: {\n      check: (editor: Editor) => isNodeInSchema(\"callout\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().setCallout({ type: \"danger\" }).run()\n      },\n    },\n\n    // Card\n    card: {\n      check: (editor: Editor) => isNodeInSchema(\"cardNode\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().insertCardNode().run()\n      },\n    },\n\n    // Columns - 2\n    columns_2: {\n      check: (editor: Editor) => isNodeInSchema(\"columnList\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().insertColumns({ columns: 2 }).run()\n      },\n    },\n\n    // Columns - 3\n    columns_3: {\n      check: (editor: Editor) => isNodeInSchema(\"columnList\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().insertColumns({ columns: 3 }).run()\n      },\n    },\n\n    // Columns - 4\n    columns_4: {\n      check: (editor: Editor) => isNodeInSchema(\"columnList\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().insertColumns({ columns: 4 }).run()\n      },\n    },\n\n    // Columns - 5\n    columns_5: {\n      check: (editor: Editor) => isNodeInSchema(\"columnList\", editor),\n      action: ({ editor }: { editor: Editor }) => {\n        editor.chain().focus().insertColumns({ columns: 5 }).run()\n      },\n    },\n  }\n}\n\nfunction organizeItemsByGroups(\n  items: SuggestionItem[],\n  showGroups: boolean\n): SuggestionItem[] {\n  if (!showGroups) {\n    return items.map((item) => ({ ...item, group: \"\" }))\n  }\n\n  const groups: { [groupLabel: string]: SuggestionItem[] } = {}\n\n  // Group items\n  items.forEach((item) => {\n    const groupLabel = item.group || \"\"\n    if (!groups[groupLabel]) {\n      groups[groupLabel] = []\n    }\n    groups[groupLabel].push(item)\n  })\n\n  // Flatten groups in order (this maintains the visual order for keyboard navigation)\n  const organizedItems: SuggestionItem[] = []\n  Object.entries(groups).forEach(([, groupItems]) => {\n    organizedItems.push(...groupItems)\n  })\n\n  return organizedItems\n}\n\n/**\n * Custom hook for slash dropdown menu functionality\n */\nexport function useSlashDropdownMenu(config?: SlashMenuConfig) {\n  const getSlashMenuItems = React.useCallback(\n    (editor: Editor) => {\n      const items: SuggestionItem[] = []\n\n      const enabledItems =\n        config?.enabledItems || (Object.keys(texts) as SlashMenuItemType[])\n      const showGroups = config?.showGroups !== false\n\n      const itemImplementations = getItemImplementations()\n\n      enabledItems.forEach((itemType) => {\n        const itemImpl = itemImplementations[itemType]\n        const itemText = texts[itemType]\n\n        if (itemImpl && itemText && itemImpl.check(editor)) {\n          const item: SuggestionItem = {\n            onSelect: ({ editor }) => itemImpl.action({ editor }),\n            ...itemText,\n          }\n\n          if (config?.itemGroups?.[itemType]) {\n            item.group = config.itemGroups[itemType]\n          } else if (!showGroups) {\n            item.group = \"\"\n          }\n\n          items.push(item)\n        }\n      })\n\n      if (config?.customItems) {\n        items.push(...config.customItems)\n      }\n\n      // Reorganize items by groups to ensure keyboard navigation works correctly\n      return organizeItemsByGroups(items, showGroups)\n    },\n    [config]\n  )\n\n  return {\n    getSlashMenuItems,\n    config,\n  }\n}\n","import * as React from \"react\"\nimport { cn } from \"@/lib/tiptap-utils\"\n\nexport type Orientation = \"horizontal\" | \"vertical\"\n\nexport interface SeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\n  orientation?: Orientation\n  decorative?: boolean\n}\n\nexport const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n  ({ decorative, orientation = \"vertical\", className, ...divProps }, ref) => {\n    const ariaOrientation = orientation === \"vertical\" ? orientation : undefined\n    const semanticProps = decorative\n      ? { role: \"none\" }\n      : { \"aria-orientation\": ariaOrientation, role: \"separator\" }\n\n    return (\n      <div\n        className={cn(\"tiptap-separator\", className)}\n        data-orientation={orientation}\n        {...semanticProps}\n        {...divProps}\n        ref={ref}\n      />\n    )\n  }\n)\n\nSeparator.displayName = \"Separator\"\n","import * as React from \"react\"\n\n// --- Lib ---\nimport { getElementOverflowPosition } from \"@/lib/tiptap-collab-utils\"\n\n// --- Tiptap UI ---\nimport type {\n  SuggestionMenuProps,\n  SuggestionItem,\n  SuggestionMenuRenderProps,\n} from \"@/components/tiptap-ui-utils/suggestion-menu\"\nimport { filterSuggestionItems } from \"@/components/tiptap-ui-utils/suggestion-menu\"\nimport { SuggestionMenu } from \"@/components/tiptap-ui-utils/suggestion-menu\"\n\n// --- Hooks ---\nimport type { SlashMenuConfig } from \"@/components/tiptap-ui/slash-dropdown-menu/use-slash-dropdown-menu\"\nimport { useSlashDropdownMenu } from \"@/components/tiptap-ui/slash-dropdown-menu/use-slash-dropdown-menu\"\n\n// --- UI Primitives ---\nimport { Button, ButtonGroup } from \"@/components/tiptap-ui-primitive/button\"\nimport { Separator } from \"@/components/tiptap-ui-primitive/separator\"\nimport {\n  Card,\n  CardBody,\n  CardGroupLabel,\n  CardItemGroup,\n} from \"@/components/tiptap-ui-primitive/card\"\n\n\ntype SlashDropdownMenuProps = Omit<\n  SuggestionMenuProps,\n  \"items\" | \"children\"\n> & {\n  config?: SlashMenuConfig\n}\n\nexport const SlashDropdownMenu = (props: SlashDropdownMenuProps) => {\n  const { config, ...restProps } = props\n  const { getSlashMenuItems } = useSlashDropdownMenu(config)\n\n  return (\n    <SuggestionMenu\n      char=\"/\"\n      pluginKey=\"slashDropdownMenu\"\n      decorationClass=\"tiptap-slash-decoration\"\n      decorationContent=\"Type to filter...\"\n      selector=\"tiptap-slash-dropdown-menu\"\n      items={({ query, editor }) =>\n        filterSuggestionItems(getSlashMenuItems(editor), query)\n      }\n      {...restProps}\n    >\n      {(props) => <List {...props} config={config} />}\n    </SuggestionMenu>\n  )\n}\n\nconst Item = (props: {\n  item: SuggestionItem\n  isSelected: boolean\n  onSelect: () => void\n}) => {\n  const { item, isSelected, onSelect } = props\n  const itemRef = React.useRef<HTMLButtonElement>(null)\n\n  React.useEffect(() => {\n    const selector = document.querySelector(\n      '[data-selector=\"tiptap-slash-dropdown-menu\"]'\n    ) as HTMLElement\n    if (!itemRef.current || !isSelected || !selector) return\n\n    const overflow = getElementOverflowPosition(itemRef.current, selector)\n\n    if (overflow === \"top\") {\n      itemRef.current.scrollIntoView(true)\n    } else if (overflow === \"bottom\") {\n      itemRef.current.scrollIntoView(false)\n    }\n  }, [isSelected])\n\n  const BadgeIcon = item.badge\n\n  return (\n    <div style={{ marginBottom: '1rem' }}>\n      <Button\n        ref={itemRef}\n        data-style=\"ghost\"\n        data-active-state=\"off\"\n        onClick={onSelect}\n        onMouseDown={(e) => {\n          // Prevent editor from losing focus when clicking menu items\n          e.preventDefault()\n        }}\n        style={{\n          borderRadius: '0',\n          padding: '0.75rem 0',\n          width: '100%',\n          gap: '0.75rem',\n          fontWeight: isSelected ? 'bold' : 'normal',\n          color: isSelected ? 'rgba(255, 255, 255, 0.95)' : 'rgba(255, 255, 255, 0.7)',\n          backgroundColor: 'transparent',\n          transition: 'color 0.15s ease, font-weight 0.15s ease'\n        }}\n        onMouseEnter={(e) => {\n          e.currentTarget.style.color = 'rgba(255, 255, 255, 0.95)'\n          e.currentTarget.style.fontWeight = 'bold'\n        }}\n        onMouseLeave={(e) => {\n          e.currentTarget.style.color = isSelected ? 'rgba(255, 255, 255, 0.95)' : 'rgba(255, 255, 255, 0.7)'\n          e.currentTarget.style.fontWeight = isSelected ? 'bold' : 'normal'\n        }}\n      >\n        {BadgeIcon && (\n          <div\n            style={{\n              borderRadius: '8px',\n              backgroundColor: '#242425',\n              padding: '0.5rem',\n              display: 'flex',\n              alignItems: 'center',\n              justifyContent: 'center',\n              flexShrink: 0\n            }}\n          >\n            <BadgeIcon className=\"tiptap-button-icon\" />\n          </div>\n        )}\n        <div className=\"tiptap-button-text\" style={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-start', gap: '0.02rem', flex: 1 }}>\n          <span style={{ fontSize: '12px', fontFamily: '\"Inter\", sans-serif' }}>{item.title}</span>\n          {item.subtext && <span style={{ fontSize: '10px', opacity: 0.6, fontFamily: '\"Inter\", sans-serif' }}>{item.subtext}</span>}\n        </div>\n      </Button>\n    </div>\n  )\n}\n\nconst List = ({\n  items,\n  selectedIndex,\n  onSelect,\n  config,\n}: SuggestionMenuRenderProps & { config?: SlashMenuConfig }) => {\n  const renderedItems = React.useMemo(() => {\n    const rendered: React.ReactElement[] = []\n    const showGroups = config?.showGroups !== false\n\n    if (!showGroups) {\n      items.forEach((item, index) => {\n        rendered.push(\n          <Item\n            key={`item-${index}-${item.title}`}\n            item={item}\n            isSelected={index === selectedIndex}\n            onSelect={() => onSelect(item)}\n          />\n        )\n      })\n      return rendered\n    }\n\n    const groups: {\n      [groupLabel: string]: { items: SuggestionItem[]; indices: number[] }\n    } = {}\n\n    items.forEach((item, index) => {\n      const groupLabel = item.group || \"\"\n      if (!groups[groupLabel]) {\n        groups[groupLabel] = { items: [], indices: [] }\n      }\n      groups[groupLabel].items.push(item)\n      groups[groupLabel].indices.push(index)\n    })\n\n    Object.entries(groups).forEach(([groupLabel, groupData], groupIndex) => {\n      if (groupIndex > 0) {\n        rendered.push(\n          <Separator key={`separator-${groupIndex}`} orientation=\"horizontal\" />\n        )\n      }\n\n      const groupItems = groupData.items.map((item, itemIndex) => {\n        const originalIndex = groupData.indices[itemIndex]\n        return (\n          <Item\n            key={`item-${originalIndex}-${item.title}`}\n            item={item}\n            isSelected={originalIndex === selectedIndex}\n            onSelect={() => onSelect(item)}\n          />\n        )\n      })\n\n      if (groupLabel) {\n        rendered.push(\n          <CardItemGroup key={`group-${groupIndex}-${groupLabel}`}>\n            <CardGroupLabel style={{ marginBottom: '1rem', fontFamily: '\"Inter\", sans-serif' }}>{groupLabel}</CardGroupLabel>\n            <ButtonGroup>{groupItems}</ButtonGroup>\n          </CardItemGroup>\n        )\n      } else {\n        rendered.push(...groupItems)\n      }\n    })\n\n    return rendered\n  }, [items, selectedIndex, onSelect, config?.showGroups])\n\n  if (!renderedItems.length) {\n    return null\n  }\n\n  return (\n    <Card\n      className=\"tiptap-slash-card\"\n      style={{\n        maxHeight: \"var(--suggestion-menu-max-height)\",\n        padding: '1rem 0.25rem 1rem 1rem',\n      }}\n    >\n      <CardBody className=\"tiptap-slash-card-body\">{renderedItems}</CardBody>\n    </Card>\n  )\n}\n","import * as React from \"react\"\nimport { isNodeSelection, type Editor } from \"@tiptap/react\"\nimport { NodeSelection, type Transaction } from \"@tiptap/pm/state\"\n\nexport const HIDE_FLOATING_META = \"hideFloatingToolbar\"\n\n/**\n * Centralizes all logic about when the floating toolbar should be hidden/shown.\n *\n * - Listens for transactions that carry HIDE_FLOATING_META\n * - Clears the hide flag on common “user intent” events\n * - Handles the “re-click on the same selected node” case\n * - Exposes `shouldShow` so UI can just render based on it\n * - Exposes helpers to set selections with the meta flag\n */\nexport function useFloatingToolbarVisibility(params: {\n  editor: Editor | null\n  isSelectionValid: (\n    editor: Editor,\n    selection: Editor[\"state\"][\"selection\"]\n  ) => boolean\n  extraHideWhen?: boolean // e.g. aiGenerationActive || commentInputVisible\n}) {\n  const { editor, isSelectionValid, extraHideWhen = false } = params\n  const [shouldShow, setShouldShow] = React.useState(false)\n  const hideRef = React.useRef(false)\n\n  // --- TX listener: turn on hide when our meta is present\n  React.useEffect(() => {\n    if (!editor) return\n\n    const onTx = ({ transaction }: { transaction: Transaction }) => {\n      if (transaction.getMeta(HIDE_FLOATING_META)) {\n        hideRef.current = true\n      }\n    }\n\n    editor.on(\"transaction\", onTx)\n\n    return () => {\n      editor.off(\"transaction\", onTx)\n    }\n  }, [editor])\n\n  // --- Re-click same selected node should immediately allow floating\n  React.useEffect(() => {\n    if (!editor) return\n    const dom = editor.view.dom\n\n    const onPointerDown = (e: PointerEvent) => {\n      const sel = editor.state.selection\n      if (!(sel instanceof NodeSelection)) return\n      const nodeDom = editor.view.nodeDOM(sel.from) as HTMLElement | null\n      if (!nodeDom) return\n      if (nodeDom.contains(e.target as Node)) {\n        hideRef.current = false\n        // selection won't change, recompute now\n        const valid = isSelectionValid(editor, sel)\n        setShouldShow(valid && !extraHideWhen && editor.isEditable)\n      }\n    }\n\n    dom.addEventListener(\"pointerdown\", onPointerDown, { capture: true })\n    return () =>\n      dom.removeEventListener(\"pointerdown\", onPointerDown, {\n        capture: true,\n      })\n  }, [editor, extraHideWhen, isSelectionValid])\n\n  // --- Selection-driven visibility\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      const { selection } = editor.state\n      const valid = isSelectionValid(editor, selection)\n\n\n\n      if (!editor.isEditable || extraHideWhen || (isNodeSelection(selection) && hideRef.current)) {\n        setShouldShow(false)\n        return\n      }\n\n      setShouldShow(valid)\n\n      // Clear hide flag when we successfully show toolbar with valid selection\n\n    }\n\n    handleSelectionUpdate()\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, extraHideWhen, isSelectionValid])\n\n  // --- Focus events to reset hide state\n\n\n  return { shouldShow }\n}\n\n/**\n * Programmatically select a node and hide floating for that selection\n * @param editor\n * @param pos\n */\nexport const selectNodeAndHideFloating = (editor: Editor, pos: number) => {\n  if (!editor) return\n  // Guard against invalid positions\n  if (pos < 0 || pos >= editor.state.doc.content.size) return\n\n  const { state, view } = editor\n  view.dispatch(\n    state.tr\n      .setSelection(NodeSelection.create(state.doc, pos))\n      .setMeta(HIDE_FLOATING_META, true)\n  )\n}\n\n/**\n * Mark “hide floating” on the next relevant transaction (no selection change needed)\n * @param editor\n */\nexport const markHideFloatingOnNext = (editor: Editor) => {\n  if (!editor) return\n  editor.view.dispatch(editor.state.tr.setMeta(HIDE_FLOATING_META, true))\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nexport type SpacerOrientation = \"horizontal\" | \"vertical\"\n\nexport interface SpacerProps extends React.HTMLAttributes<HTMLDivElement> {\n  orientation?: SpacerOrientation\n  size?: string | number\n}\n\nexport function Spacer({\n  orientation = \"horizontal\",\n  size,\n  style = {},\n  ...props\n}: SpacerProps) {\n  const computedStyle = {\n    ...style,\n    ...(orientation === \"horizontal\" && !size && { flex: 1 }),\n    ...(size && {\n      width: orientation === \"vertical\" ? \"1px\" : size,\n      height: orientation === \"horizontal\" ? \"1px\" : size,\n    }),\n  }\n\n  return <div {...props} style={computedStyle} />\n}\n","import * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type { UseImageDownloadConfig } from \"@/components/tiptap-ui/image-download-button\"\nimport {\n  IMAGE_DOWNLOAD_SHORTCUT_KEY,\n  useImageDownload,\n} from \"@/components/tiptap-ui/image-download-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface ImageDownloadButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseImageDownloadConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function ImageDownloadShortcutBadge({\n  shortcutKeys = IMAGE_DOWNLOAD_SHORTCUT_KEY,\n}: {\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for downloading images from a Tiptap editor.\n * Only appears when an image is selected in the editor.\n *\n * For custom button implementations, use the `useImageDownload` hook instead.\n */\nexport const ImageDownloadButton = React.forwardRef<\n  HTMLButtonElement,\n  ImageDownloadButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      text,\n      hideWhenUnavailable = false,\n      onDownloaded,\n      resolveFileUrl,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      canDownload,\n      handleDownload,\n      label,\n      shortcutKeys,\n      Icon,\n    } = useImageDownload({\n      editor,\n      hideWhenUnavailable,\n      onDownloaded,\n      resolveFileUrl,\n    })\n\n    const handleClick = React.useCallback(\n      async (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        await handleDownload()\n      },\n      [handleDownload, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        data-active-state=\"off\"\n        role=\"button\"\n        tabIndex={-1}\n        disabled={!canDownload}\n        data-disabled={!canDownload}\n        aria-label={label}\n        tooltip={label}\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <ImageDownloadShortcutBadge shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nImageDownloadButton.displayName = \"ImageDownloadButton\"\n","import * as React from \"react\"\n\nexport const ArrowDownToLineIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M12 2C12.5523 2 13 2.44772 13 3V14.5858L17.2929 10.2929C17.6834 9.90237 18.3166 9.90237 18.7071 10.2929C19.0976 10.6834 19.0976 11.3166 18.7071 11.7071L12.7071 17.7071C12.3166 18.0976 11.6834 18.0976 11.2929 17.7071L5.29289 11.7071C4.90237 11.3166 4.90237 10.6834 5.29289 10.2929C5.68342 9.90237 6.31658 9.90237 6.70711 10.2929L11 14.5858V3C11 2.44772 11.4477 2 12 2Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M5 20C4.44772 20 4 20.4477 4 21C4 21.5523 4.44772 22 5 22H19C19.5523 22 20 21.5523 20 21C20 20.4477 19.5523 20 19 20H5Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nArrowDownToLineIcon.displayName = \"ArrowDownToLineIcon\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport { type Editor } from \"@tiptap/react\"\nimport { NodeSelection } from \"@tiptap/pm/state\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Lib ---\nimport {\n  isExtensionAvailable,\n  isNodeTypeSelected,\n  sanitizeUrl,\n} from \"@/lib/tiptap-utils\"\n\n// --- Icons ---\nimport { ArrowDownToLineIcon } from \"@/components/tiptap-icons/arrow-down-to-line-icon\"\n\nexport const IMAGE_DOWNLOAD_SHORTCUT_KEY = \"mod+shift+d\"\n\n/**\n * Extracts file extension from URL or content type\n */\nfunction getFileExtension(url: string, contentType?: string): string {\n  const urlMatch = url.match(/\\.([a-zA-Z0-9]+)(?:\\?|#|$)/)\n  if (urlMatch && urlMatch[1]) {\n    return `.${urlMatch[1].toLowerCase()}`\n  }\n\n  if (contentType) {\n    const mimeMap: Record<string, string> = {\n      \"image/jpeg\": \".jpg\",\n      \"image/jpg\": \".jpg\",\n      \"image/png\": \".png\",\n      \"image/gif\": \".gif\",\n      \"image/webp\": \".webp\",\n      \"image/svg+xml\": \".svg\",\n      \"image/bmp\": \".bmp\",\n    }\n    return mimeMap[contentType.toLowerCase()] || \".jpg\"\n  }\n\n  return \".jpg\"\n}\n\n/**\n * Configuration for the image download functionality\n */\nexport interface UseImageDownloadConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether the button should hide when download is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a successful image download.\n   */\n  onDownloaded?: (filename?: string) => void\n  /**\n   * Optional function to resolve file URLs before downloading.\n   * Useful for handling relative paths or custom URL schemes.\n   */\n  resolveFileUrl?: (url: string) => Promise<string>\n  /**\n   * Download behavior: 'download' forces download, 'open' opens in new tab, 'auto' tries download with fallback\n   * @default 'auto'\n   */\n  downloadMethod?: \"download\" | \"open\" | \"auto\"\n}\n\n/**\n * Checks if image can be downloaded in the current editor state\n */\nexport function canDownloadImage(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!isExtensionAvailable(editor, [\"image\"])) return false\n\n  return isNodeTypeSelected(editor, [\"image\"])\n}\n\n/**\n * Gets the currently selected image data\n */\nexport function getSelectedImageData(editor: Editor | null): {\n  src?: string\n  alt?: string\n  title?: string\n} | null {\n  if (!editor || !canDownloadImage(editor)) return null\n\n  const { selection } = editor.state\n\n  if (selection instanceof NodeSelection) {\n    const node = selection.node\n\n    if (node.type.name === \"image\") {\n      return {\n        src: node.attrs.src,\n        alt: node.attrs.alt,\n        title: node.attrs.title,\n      }\n    }\n  }\n\n  return null\n}\n\n/**\n * Attempts to download image via fetch (handles CORS)\n */\nasync function tryFetchDownload(\n  url: string,\n  filename: string\n): Promise<boolean> {\n  try {\n    const response = await fetch(url)\n    if (!response.ok) return false\n\n    const blob = await response.blob()\n    const blobUrl = URL.createObjectURL(blob)\n\n    const hasExtension = /\\.[a-zA-Z0-9]+$/.test(filename)\n    const finalFilename = hasExtension\n      ? filename\n      : filename +\n        getFileExtension(url, response.headers.get(\"content-type\") || undefined)\n\n    const link = document.createElement(\"a\")\n    link.href = blobUrl\n    link.download = finalFilename\n    link.style.display = \"none\"\n\n    document.body.appendChild(link)\n    link.click()\n    link.remove()\n    URL.revokeObjectURL(blobUrl)\n    return true\n  } catch (error) {\n    console.warn(\"Fetch download failed:\", error)\n    return false\n  }\n}\n\n/**\n * Downloads image via direct link (for same-origin or data URLs)\n */\nfunction tryDirectDownload(url: string, filename: string): boolean {\n  try {\n    const hasExtension = /\\.[a-zA-Z0-9]+$/.test(filename)\n    const finalFilename = hasExtension\n      ? filename\n      : filename + getFileExtension(url)\n\n    const link = document.createElement(\"a\")\n    link.href = url\n    link.download = finalFilename\n    link.style.display = \"none\"\n\n    document.body.appendChild(link)\n    link.click()\n    document.body.removeChild(link)\n\n    return true\n  } catch (error) {\n    console.warn(\"Direct download failed:\", error)\n    return false\n  }\n}\n\n/**\n * Opens image in new tab\n */\nfunction openInNewTab(url: string): boolean {\n  try {\n    window.open(url, \"_blank\")\n    return true\n  } catch (error) {\n    console.error(\"Failed to open image:\", error)\n    return false\n  }\n}\n\n/**\n * Downloads the currently selected image\n */\nexport async function downloadSelectedImage(\n  editor: Editor | null,\n  filename?: string,\n  resolveFileUrl?: (url: string) => Promise<string>,\n  downloadMethod: \"download\" | \"open\" | \"auto\" = \"auto\"\n): Promise<boolean> {\n  if (!editor || !canDownloadImage(editor)) return false\n\n  const imageData = getSelectedImageData(editor)\n  if (!imageData?.src) return false\n\n  try {\n    let resolvedUrl = imageData.src\n    if (resolveFileUrl) {\n      resolvedUrl = await resolveFileUrl(imageData.src)\n    }\n\n    const baseUrl = window.location.href\n    const sanitizedUrl = sanitizeUrl(resolvedUrl, baseUrl)\n\n    if (sanitizedUrl === \"#\") {\n      console.error(\"Invalid or unsafe URL after sanitization\")\n      return false\n    }\n\n    const generatedFilename =\n      filename || imageData.alt || imageData.title || `image-${Date.now()}`\n\n    switch (downloadMethod) {\n      case \"open\":\n        return openInNewTab(sanitizedUrl)\n\n      case \"download\":\n        if (\n          sanitizedUrl.startsWith(window.location.origin) ||\n          sanitizedUrl.startsWith(\"data:\")\n        ) {\n          return tryDirectDownload(sanitizedUrl, generatedFilename)\n        } else {\n          const success = await tryFetchDownload(\n            sanitizedUrl,\n            generatedFilename\n          )\n          return success || openInNewTab(sanitizedUrl)\n        }\n\n      case \"auto\":\n      default:\n        if (\n          sanitizedUrl.startsWith(\"data:\") ||\n          sanitizedUrl.startsWith(window.location.origin)\n        ) {\n          return tryDirectDownload(sanitizedUrl, generatedFilename)\n        } else {\n          const fetchSuccess = await tryFetchDownload(\n            sanitizedUrl,\n            generatedFilename\n          )\n          if (fetchSuccess) return true\n\n          return openInNewTab(sanitizedUrl)\n        }\n    }\n  } catch (error) {\n    console.error(\"Failed to download image:\", error)\n\n    try {\n      const baseUrl = window.location.href\n      const sanitizedUrl = sanitizeUrl(imageData.src, baseUrl)\n      if (sanitizedUrl !== \"#\") {\n        return openInNewTab(sanitizedUrl)\n      }\n    } catch {\n      // Silent fail\n    }\n\n    return false\n  }\n}\n\n/**\n * Determines if the download button should be shown\n */\nexport function shouldShowDownloadButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n  if (!isExtensionAvailable(editor, [\"image\", \"imageUpload\"])) return false\n\n  if (hideWhenUnavailable) {\n    return canDownloadImage(editor)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides image download functionality for Tiptap editor\n */\nexport function useImageDownload(config?: UseImageDownloadConfig) {\n  const {\n    editor: providedEditor,\n    hideWhenUnavailable = false,\n    onDownloaded,\n    resolveFileUrl,\n    downloadMethod = \"auto\",\n  } = config || {}\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canDownload = canDownloadImage(editor)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowDownloadButton({ editor, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable])\n\n  const handleDownload = React.useCallback(async () => {\n    if (!editor) return false\n\n    const imageData = getSelectedImageData(editor)\n    const filename = imageData?.alt || imageData?.title\n\n    const success = await downloadSelectedImage(\n      editor,\n      filename,\n      resolveFileUrl,\n      downloadMethod\n    )\n    if (success) {\n      onDownloaded?.(filename)\n    }\n    return success\n  }, [editor, onDownloaded, resolveFileUrl, downloadMethod])\n\n  useHotkeys(\n    IMAGE_DOWNLOAD_SHORTCUT_KEY,\n    (event) => {\n      event.preventDefault()\n      handleDownload()\n    },\n    {\n      enabled: isVisible && canDownload,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    canDownload,\n    handleDownload,\n    label: \"Download image\",\n    shortcutKeys: IMAGE_DOWNLOAD_SHORTCUT_KEY,\n    Icon: ArrowDownToLineIcon,\n  }\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type { UseDuplicateConfig } from \"@/components/tiptap-ui/duplicate-button\"\nimport {\n  DUPLICATE_SHORTCUT_KEY,\n  useDuplicate,\n} from \"@/components/tiptap-ui/duplicate-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface DuplicateButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseDuplicateConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function DuplicateShortcutBadge({\n  shortcutKeys = DUPLICATE_SHORTCUT_KEY,\n}: {\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for duplicating a node in a Tiptap editor.\n *\n * For custom button implementations, use the `useDuplicate` hook instead.\n */\nexport const DuplicateButton = React.forwardRef<\n  HTMLButtonElement,\n  DuplicateButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      text,\n      hideWhenUnavailable = false,\n      onDuplicated,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const { isVisible, handleDuplicate, label, shortcutKeys, Icon } =\n      useDuplicate({\n        editor,\n        hideWhenUnavailable,\n        onDuplicated,\n      })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleDuplicate()\n      },\n      [handleDuplicate, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        role=\"button\"\n        tabIndex={-1}\n        aria-label={label}\n        tooltip=\"Duplicate\"\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <DuplicateShortcutBadge shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nDuplicateButton.displayName = \"DuplicateButton\"\n","import * as React from \"react\"\n\nexport const CopyIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M10 9C9.44772 9 9 9.44772 9 10V20C9 20.5523 9.44772 21 10 21H20C20.5523 21 21 20.5523 21 20V10C21 9.44772 20.5523 9 20 9H10ZM7 10C7 8.34315 8.34315 7 10 7H20C21.6569 7 23 8.34315 23 10V20C23 21.6569 21.6569 23 20 23H10C8.34315 23 7 21.6569 7 20V10Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M4 3C3.45228 3 3 3.45228 3 4V14C3 14.5477 3.45228 15 4 15C4.55228 15 5 15.4477 5 16C5 16.5523 4.55228 17 4 17C2.34772 17 1 15.6523 1 14V4C1 2.34772 2.34772 1 4 1H14C15.6523 1 17 2.34772 17 4C17 4.55228 16.5523 5 16 5C15.4477 5 15 4.55228 15 4C15 3.45228 14.5477 3 14 3H4Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nCopyIcon.displayName = \"CopyIcon\"\n","import * as React from \"react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport { type Editor } from \"@tiptap/react\"\nimport { NodeSelection } from \"@tiptap/pm/state\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Icons ---\nimport { CopyIcon } from \"@/components/tiptap-icons/copy-icon\"\n\nexport const DUPLICATE_SHORTCUT_KEY = \"mod+d\"\n\n/**\n * Configuration for the duplicate functionality\n */\nexport interface UseDuplicateConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether the button should hide when duplication is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a successful duplication.\n   */\n  onDuplicated?: () => void\n}\n\n/**\n * Checks if a node can be duplicated in the current editor state\n */\nexport function canDuplicateNode(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n\n  try {\n    const { state } = editor\n    const { selection } = state\n\n    if (selection instanceof NodeSelection) {\n      return !!selection.node\n    }\n\n    const $anchor = selection.$anchor.node(1)\n\n    return !!$anchor\n  } catch {\n    return false\n  }\n}\n\n/**\n * Duplicates a node in the editor\n */\nexport function duplicateNode(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n\n  try {\n    const { state } = editor\n    const { selection } = state\n    const chain = editor.chain().focus()\n\n    if (selection instanceof NodeSelection) {\n      const selectedNode = selection.node\n      const insertPos = selection.to\n\n      chain.insertContentAt(insertPos, selectedNode.toJSON()).run()\n      return true\n    }\n\n    // Handle text selection or cursor position\n    // Find the appropriate parent node to duplicate\n    const $anchor = selection.$anchor\n\n    for (let depth = 1; depth <= $anchor.depth; depth++) {\n      const node = $anchor.node(depth)\n\n      // Skip document and other non-duplicatable nodes\n      if (node.type.name === \"doc\" || !node.type.spec.group) {\n        continue\n      }\n\n      const nodeStart = $anchor.start(depth)\n      const insertPos = Math.min(\n        nodeStart + node.nodeSize,\n        state.doc.content.size\n      )\n\n      chain.insertContentAt(insertPos, node.toJSON()).run()\n      return true\n    }\n\n    return false\n  } catch {\n    return false\n  }\n}\n\n/**\n * Determines if the duplicate button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canDuplicateNode(editor)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides duplicate functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage - no params needed\n * function MySimpleDuplicateButton() {\n *   const { isVisible, handleDuplicate } = useDuplicate()\n *\n *   if (!isVisible) return null\n *\n *   return <button onClick={handleDuplicate}>Duplicate</button>\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedDuplicateButton() {\n *   const { isVisible, handleDuplicate, label } = useDuplicate({\n *     editor: myEditor,\n *     hideWhenUnavailable: true,\n *     onDuplicated: () => console.log('Node duplicated!')\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleDuplicate}\n *       aria-label={label}\n *     >\n *       Duplicate Node\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useDuplicate(config?: UseDuplicateConfig) {\n  const {\n    editor: providedEditor,\n    hideWhenUnavailable = false,\n    onDuplicated,\n  } = config || {}\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canDuplicate = canDuplicateNode(editor)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowButton({ editor, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable])\n\n  const handleDuplicate = React.useCallback(() => {\n    if (!editor) return false\n\n    const success = duplicateNode(editor)\n    if (success) {\n      onDuplicated?.()\n    }\n    return success\n  }, [editor, onDuplicated])\n\n  useHotkeys(\n    DUPLICATE_SHORTCUT_KEY,\n    (event) => {\n      event.preventDefault() // prevent browser default bookmarking\n      handleDuplicate()\n    },\n    {\n      enabled: isVisible && canDuplicate,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    handleDuplicate,\n    canDuplicate,\n    label: \"Duplicate node\",\n    shortcutKeys: DUPLICATE_SHORTCUT_KEY,\n    Icon: CopyIcon,\n  }\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type { UseCopyToClipboardConfig } from \"@/components/tiptap-ui/copy-to-clipboard-button\"\nimport {\n  COPY_TO_CLIPBOARD_SHORTCUT_KEY,\n  useCopyToClipboard,\n} from \"@/components/tiptap-ui/copy-to-clipboard-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface CopyToClipboardButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseCopyToClipboardConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function CopyToClipboardShortcutBadge({\n  shortcutKeys = COPY_TO_CLIPBOARD_SHORTCUT_KEY,\n}: {\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for copying content to clipboard in a Tiptap editor.\n *\n * For custom button implementations, use the `useCopyToClipboard` hook instead.\n */\nexport const CopyToClipboardButton = React.forwardRef<\n  HTMLButtonElement,\n  CopyToClipboardButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      text,\n      copyWithFormatting = true,\n      hideWhenUnavailable = false,\n      onCopied,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const { isVisible, handleCopyToClipboard, label, shortcutKeys, Icon } =\n      useCopyToClipboard({\n        editor,\n        copyWithFormatting,\n        hideWhenUnavailable,\n        onCopied,\n      })\n\n    const handleClick = React.useCallback(\n      async (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        await handleCopyToClipboard()\n      },\n      [handleCopyToClipboard, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        role=\"button\"\n        tabIndex={-1}\n        aria-label={label}\n        tooltip=\"Copy to clipboard\"\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <CopyToClipboardShortcutBadge shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nCopyToClipboardButton.displayName = \"CopyToClipboardButton\"\n","import * as React from \"react\"\n\nexport const ClipboardIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M15 1C16.1046 1 17 1.89543 17 3H18C18.7956 3 19.5585 3.3163 20.1211 3.87891C20.6837 4.44151 21 5.20435 21 6V20C21 20.7957 20.6837 21.5585 20.1211 22.1211C19.5585 22.6837 18.7957 23 18 23H6C5.20435 23 4.44151 22.6837 3.87891 22.1211C3.3163 21.5585 3 20.7957 3 20V6C3 5.20435 3.3163 4.44152 3.87891 3.87891C4.44152 3.3163 5.20435 3 6 3H7C7 1.89543 7.89543 1 9 1H15ZM6 5C5.73478 5 5.4805 5.10543 5.29297 5.29297C5.10543 5.4805 5 5.73478 5 6V20L5.00488 20.0986C5.02757 20.3276 5.12883 20.5429 5.29297 20.707C5.48051 20.8946 5.73478 21 6 21H18C18.2652 21 18.5195 20.8946 18.707 20.707C18.8946 20.5195 19 20.2652 19 20V6C19 5.73478 18.8946 5.48051 18.707 5.29297C18.5429 5.12883 18.3276 5.02757 18.0986 5.00488L18 5H17C17 6.10457 16.1046 7 15 7H9C7.89543 7 7 6.10457 7 5H6ZM9 5H15V3H9V5Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nClipboardIcon.displayName = \"ClipboardIcon\"\n","import * as React from \"react\"\nimport type { Editor } from \"@tiptap/react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport type { Transaction } from \"@tiptap/pm/state\"\nimport { TextSelection } from \"@tiptap/pm/state\"\nimport { Fragment, Slice } from \"@tiptap/pm/model\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Icons ---\nimport { ClipboardIcon } from \"@/components/tiptap-icons/clipboard-icon\"\n\nexport const COPY_TO_CLIPBOARD_SHORTCUT_KEY = \"mod+c\"\n\n/**\n * Configuration for the copy to clipboard functionality\n */\nexport interface UseCopyToClipboardConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether to copy the text with formatting (default: true)\n   * When true, attempts to copy HTML format to clipboard\n   */\n  copyWithFormatting?: boolean\n  /**\n   * Whether the button should hide when copying is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a successful copy operation.\n   */\n  onCopied?: () => void\n}\n\n/**\n * Writes text and optional HTML content to the clipboard\n * @param textContent The plain text content to write\n * @param htmlContent Optional HTML content to write\n * @returns Promise that resolves when the content is successfully written\n */\nexport async function writeToClipboard(\n  textContent: string,\n  htmlContent?: string\n): Promise<void> {\n  try {\n    if (htmlContent && navigator.clipboard && \"write\" in navigator.clipboard) {\n      const blob = new Blob([htmlContent], { type: \"text/html\" })\n      const clipboardItem = new ClipboardItem({ \"text/html\": blob })\n      await navigator.clipboard.write([clipboardItem])\n    }\n  } catch {\n    await navigator.clipboard.writeText(textContent)\n  }\n}\n\n/**\n * Checks if content can be copied in the current editor state\n */\nexport function canCopyContent(tr: Transaction): boolean {\n  const { selection } = tr\n  const { empty } = selection\n\n  if (empty) return false\n\n  return true\n}\n\n/**\n * Checks if formatting can be reset for a node\n */\nexport function canCopyToClipboard(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n\n  const tr = editor.state.tr\n  return canCopyContent(tr)\n}\n\n/**\n * Helper function to extract content from selection or document\n */\nexport function extractContent(\n  editor: Editor,\n  copyWithFormatting: boolean = true\n): { textContent: string; htmlContent?: string } {\n  const { selection } = editor.state\n  const { $anchor } = selection\n\n  let content = selection.content()\n\n  if (selection.empty || selection instanceof TextSelection) {\n    const node = $anchor.node(1)\n\n    // We dont want to use node.content here because we dont want tiptap to split the node\n    // We want the whole node as a slice\n    content = new Slice(Fragment.from(node), 0, 0)\n  }\n\n  const textContent = content.content.textBetween(0, content.content.size, \"\\n\")\n  const htmlContent = copyWithFormatting\n    ? editor.view.serializeForClipboard(content).dom.innerHTML\n    : undefined\n\n  return { textContent, htmlContent }\n}\n\n/**\n * Copies content to clipboard\n */\nexport async function copyToClipboard(\n  editor: Editor | null,\n  copyWithFormatting: boolean = true\n): Promise<boolean> {\n  if (!editor || !editor.isEditable) return false\n\n  try {\n    const { textContent, htmlContent } = extractContent(\n      editor,\n      copyWithFormatting\n    )\n\n    await writeToClipboard(textContent, htmlContent)\n    return true\n  } catch {\n    return false\n  }\n}\n\n/**\n * Determines if the copy to clipboard button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canCopyToClipboard(editor)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides copy to clipboard functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage - no params needed\n * function MySimpleCopyButton() {\n *   const { isVisible, handleCopyToClipboard } = useCopyToClipboard()\n *\n *   if (!isVisible) return null\n *\n *   return <button onClick={handleCopyToClipboard}>Copy</button>\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedCopyButton() {\n *   const { isVisible, handleCopyToClipboard, label } = useCopyToClipboard({\n *     editor: myEditor,\n *     copyWithFormatting: false,\n *     hideWhenUnavailable: true,\n *     onCopied: () => console.log('Content copied!')\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleCopyToClipboard}\n *       aria-label={label}\n *     >\n *       Copy Content\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useCopyToClipboard(config?: UseCopyToClipboardConfig) {\n  const {\n    editor: providedEditor,\n    copyWithFormatting = true,\n    hideWhenUnavailable = false,\n    onCopied,\n  } = config || {}\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canCopyToClipboardState = canCopyToClipboard(editor)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowButton({ editor, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable])\n\n  const handleCopyToClipboard = React.useCallback(async () => {\n    if (!editor) return false\n\n    const success = await copyToClipboard(editor, copyWithFormatting)\n\n    if (success) {\n      onCopied?.()\n    }\n\n    return success\n  }, [editor, copyWithFormatting, onCopied])\n\n  useHotkeys(\n    COPY_TO_CLIPBOARD_SHORTCUT_KEY,\n    (event) => {\n      event.preventDefault() // prevent native copy behavior\n      handleCopyToClipboard()\n    },\n    {\n      enabled: isVisible && canCopyToClipboardState,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    handleCopyToClipboard,\n    canCopyToClipboard: canCopyToClipboardState,\n    label: \"Copy to clipboard\",\n    shortcutKeys: COPY_TO_CLIPBOARD_SHORTCUT_KEY,\n    Icon: ClipboardIcon,\n  }\n}\n","import * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type { UseDeleteNodeConfig } from \"@/components/tiptap-ui/delete-node-button\"\nimport {\n  DELETE_NODE_SHORTCUT_KEY,\n  useDeleteNode,\n} from \"@/components/tiptap-ui/delete-node-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface DeleteNodeButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseDeleteNodeConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function DeleteNodeShortcutBadge({\n  shortcutKeys = DELETE_NODE_SHORTCUT_KEY,\n}: {\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for deleting a node in a Tiptap editor.\n *\n * For custom button implementations, use the `useDeleteNode` hook instead.\n */\nexport const DeleteNodeButton = React.forwardRef<\n  HTMLButtonElement,\n  DeleteNodeButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      text,\n      hideWhenUnavailable = false,\n      onDeleted,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const { isVisible, handleDeleteNode, label, shortcutKeys, Icon } =\n      useDeleteNode({\n        editor,\n        hideWhenUnavailable,\n        onDeleted,\n      })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleDeleteNode()\n      },\n      [handleDeleteNode, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        role=\"button\"\n        tabIndex={-1}\n        aria-label={label}\n        tooltip=\"Delete\"\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <DeleteNodeShortcutBadge shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nDeleteNodeButton.displayName = \"DeleteNodeButton\"\n","import * as React from \"react\"\n\nexport const TrashIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M7 5V4C7 3.17477 7.40255 2.43324 7.91789 1.91789C8.43324 1.40255 9.17477 1 10 1H14C14.8252 1 15.5668 1.40255 16.0821 1.91789C16.5975 2.43324 17 3.17477 17 4V5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H20V20C20 20.8252 19.5975 21.5668 19.0821 22.0821C18.5668 22.5975 17.8252 23 17 23H7C6.17477 23 5.43324 22.5975 4.91789 22.0821C4.40255 21.5668 4 20.8252 4 20V7H3C2.44772 7 2 6.55228 2 6C2 5.44772 2.44772 5 3 5H7ZM9 4C9 3.82523 9.09745 3.56676 9.33211 3.33211C9.56676 3.09745 9.82523 3 10 3H14C14.1748 3 14.4332 3.09745 14.6679 3.33211C14.9025 3.56676 15 3.82523 15 4V5H9V4ZM6 7V20C6 20.1748 6.09745 20.4332 6.33211 20.6679C6.56676 20.9025 6.82523 21 7 21H17C17.1748 21 17.4332 20.9025 17.6679 20.6679C17.9025 20.4332 18 20.1748 18 20V7H6Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nTrashIcon.displayName = \"TrashIcon\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport { type Editor } from \"@tiptap/react\"\nimport { NodeSelection } from \"@tiptap/pm/state\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Icons ---\nimport { TrashIcon } from \"@/components/tiptap-icons/trash-icon\"\n\nexport const DELETE_NODE_SHORTCUT_KEY = \"backspace\"\n\n/**\n * Configuration for the delete node functionality\n */\nexport interface UseDeleteNodeConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether the button should hide when node deletion is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a successful deletion.\n   */\n  onDeleted?: () => void\n}\n\n/**\n * Checks if a node can be deleted based on the current selection\n */\nexport function canDeleteNode(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n\n  const { state } = editor\n  const { selection } = state\n\n  if (selection instanceof NodeSelection) {\n    return true\n  }\n\n  const $pos = selection.$anchor\n\n  for (let depth = $pos.depth; depth > 0; depth--) {\n    const node = $pos.node(depth)\n    const pos = $pos.before(depth)\n\n    // Check if we could delete the range from pos to pos + nodeSize\n    const tr = state.tr.delete(pos, pos + node.nodeSize)\n    if (tr.doc !== state.doc) {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Helper function to delete a node with fallback strategy\n */\nexport function deleteNodeAtPosition(\n  editor: Editor,\n  pos: number,\n  nodeSize: number\n): boolean {\n  const chain = editor.chain().focus()\n  const success = chain.deleteRange({ from: pos, to: pos + nodeSize }).run()\n\n  if (success) return true\n\n  // Fallback\n  return chain.setNodeSelection(pos).deleteSelection().run()\n}\n\n/**\n * Deletes the selected node in the editor using current selection\n */\nexport function deleteNode(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n\n  try {\n    const { state } = editor\n    const { selection } = state\n\n    if (selection instanceof NodeSelection) {\n      const pos = selection.from\n      const selectedNode = selection.node\n\n      if (!selectedNode) return false\n\n      return deleteNodeAtPosition(editor, pos, selectedNode.nodeSize)\n    }\n\n    const $pos = selection.$anchor\n\n    for (let depth = $pos.depth; depth > 0; depth--) {\n      const node = $pos.node(depth)\n      const pos = $pos.before(depth)\n\n      if (node && node.isBlock) {\n        return deleteNodeAtPosition(editor, pos, node.nodeSize)\n      }\n    }\n\n    return false\n  } catch {\n    return false\n  }\n}\n\n/**\n * Determines if the delete node button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canDeleteNode(editor)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides delete node functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage - no params needed\n * function MySimpleDeleteButton() {\n *   const { isVisible, handleDeleteNode } = useDeleteNode()\n *\n *   if (!isVisible) return null\n *\n *   return <button onClick={handleDeleteNode}>Delete</button>\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedDeleteButton() {\n *   const { isVisible, handleDeleteNode, label } = useDeleteNode({\n *     editor: myEditor,\n *     hideWhenUnavailable: true,\n *     onDeleted: () => console.log('Node deleted!')\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleDeleteNode}\n *       aria-label={label}\n *     >\n *       Delete Node\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useDeleteNode(config?: UseDeleteNodeConfig) {\n  const {\n    editor: providedEditor,\n    hideWhenUnavailable = false,\n    onDeleted,\n  } = config || {}\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canDeleteNodeState = canDeleteNode(editor)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowButton({ editor, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable])\n\n  const handleDeleteNode = React.useCallback(() => {\n    if (!editor) return false\n\n    const success = deleteNode(editor)\n    if (success) {\n      onDeleted?.()\n    }\n    return success\n  }, [editor, onDeleted])\n\n  useHotkeys(\n    DELETE_NODE_SHORTCUT_KEY,\n    (event) => {\n      event.preventDefault()\n      handleDeleteNode()\n    },\n    {\n      enabled: isVisible && canDeleteNodeState,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    handleDeleteNode,\n    canDeleteNode: canDeleteNodeState,\n    label: \"Delete\",\n    shortcutKeys: DELETE_NODE_SHORTCUT_KEY,\n    Icon: TrashIcon,\n  }\n}\n","import * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type { UseResetAllFormattingConfig } from \"@/components/tiptap-ui/reset-all-formatting-button\"\nimport {\n  RESET_ALL_FORMATTING_SHORTCUT_KEY,\n  useResetAllFormatting,\n} from \"@/components/tiptap-ui/reset-all-formatting-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface ResetAllFormattingButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseResetAllFormattingConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function ResetAllFormattingShortcutBadge({\n  shortcutKeys = RESET_ALL_FORMATTING_SHORTCUT_KEY,\n}: {\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for resetting formatting of a node in a Tiptap editor.\n * Removes all marks and converts non-paragraph nodes to paragraphs.\n *\n * For custom button implementations, use the `useResetAllFormatting` hook instead.\n */\nexport const ResetAllFormattingButton = React.forwardRef<\n  HTMLButtonElement,\n  ResetAllFormattingButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      text,\n      hideWhenUnavailable = false,\n      preserveMarks = [\"inlineThread\"],\n      onResetAllFormatting,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      canReset,\n      handleResetFormatting,\n      label,\n      shortcutKeys,\n      Icon,\n    } = useResetAllFormatting({\n      editor,\n      preserveMarks,\n      hideWhenUnavailable,\n      onResetAllFormatting,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleResetFormatting()\n      },\n      [handleResetFormatting, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        disabled={!canReset}\n        data-disabled={!canReset}\n        data-active-state=\"off\"\n        role=\"button\"\n        tabIndex={-1}\n        aria-label={label}\n        tooltip=\"Reset formatting\"\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <ResetAllFormattingShortcutBadge shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nResetAllFormattingButton.displayName = \"ResetAllFormattingButton\"\n","import * as React from \"react\"\n\nexport const RotateCcwIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M12 2L11.9962 2.00001C9.22213 2.01045 6.55946 3.0929 4.56496 5.02104L4.55289 5.0329L4 5.58579V3C4 2.44772 3.55228 2 3 2C2.44772 2 2 2.44772 2 3V8C2 8.55228 2.44772 9 3 9H8C8.55228 9 9 8.55228 9 8C9 7.44772 8.55228 7 8 7H5.41422L5.96097 6.45325C7.58329 4.88786 9.7473 4.00897 12.0019 4.00001C13.5835 4.00038 15.1295 4.46955 16.4446 5.34825C17.7602 6.2273 18.7855 7.47673 19.391 8.93854C19.9965 10.4003 20.155 12.0089 19.8463 13.5607C19.5376 15.1126 18.7757 16.538 17.6569 17.6569C16.538 18.7757 15.1126 19.5376 13.5607 19.8463C12.0089 20.155 10.4003 19.9965 8.93853 19.391C7.47672 18.7855 6.22729 17.7602 5.34824 16.4446C4.46919 15.129 4 13.5823 4 12C4 11.4477 3.55228 11 3 11C2.44772 11 2 11.4477 2 12C2 13.9778 2.58649 15.9112 3.6853 17.5557C4.78412 19.2002 6.3459 20.4819 8.17317 21.2388C10.0004 21.9957 12.0111 22.1937 13.9509 21.8079C15.8907 21.422 17.6725 20.4696 19.0711 19.0711C20.4696 17.6726 21.422 15.8907 21.8079 13.9509C22.1937 12.0111 21.9957 10.0004 21.2388 8.17317C20.4819 6.34591 19.2002 4.78412 17.5557 3.68531C15.9112 2.5865 13.9778 2.00001 12 2Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nRotateCcwIcon.displayName = \"RotateCcwIcon\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport { type Editor } from \"@tiptap/react\"\nimport type { Transaction } from \"@tiptap/pm/state\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Icons ---\nimport { RotateCcwIcon } from \"@/components/tiptap-icons/rotate-ccw-icon\"\n\nexport const RESET_ALL_FORMATTING_SHORTCUT_KEY = \"mod+r\"\n\n/**\n * Configuration for the reset formatting functionality\n */\nexport interface UseResetAllFormattingConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether the button should hide when resetting is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Marks to preserve when resetting formatting.\n   */\n  preserveMarks?: string[]\n  /**\n   * Callback function called after formatting is successfully reset.\n   */\n  onResetAllFormatting?: () => void\n}\n\n/**\n * Removes all marks from the transaction except those specified in the skip array\n * @param tr The Tiptap transaction to modify\n * @param skip Array of mark names to skip when removing marks\n * @returns The modified transaction with specified marks removed\n */\nexport function removeAllMarksExcept(tr: Transaction, skip: string[] = []) {\n  const { selection } = tr\n  const { empty, ranges } = selection\n\n  if (empty) return tr\n\n  ranges.forEach((range) => {\n    const from = range.$from.pos\n    const to = range.$to.pos\n\n    tr.doc.nodesBetween(from, to, (node, pos) => {\n      if (!node.isInline) return true\n\n      node.marks.forEach((mark) => {\n        if (!skip.includes(mark.type.name)) {\n          tr.removeMark(pos, pos + node.nodeSize, mark.type)\n        }\n      })\n\n      return true\n    })\n  })\n\n  return tr\n}\n\n/**\n * Checks whether the current selection has marks that can be reset (removed)\n * @param tr The Tiptap transaction to check\n * @param skip Array of mark names to skip when checking for removable marks\n * @returns True if there are marks that can be removed, false otherwise\n */\nexport function canResetMarks(tr: Transaction, skip: string[] = []): boolean {\n  const { selection } = tr\n  const { empty, ranges } = selection\n\n  if (empty) return false\n\n  for (const range of ranges) {\n    const from = range.$from.pos\n    const to = range.$to.pos\n\n    let hasRemovableMarks = false\n\n    tr.doc.nodesBetween(from, to, (node) => {\n      if (!node.isInline) return true\n\n      for (const mark of node.marks) {\n        if (!skip.includes(mark.type.name)) {\n          hasRemovableMarks = true\n          return false\n        }\n      }\n\n      return true\n    })\n\n    if (hasRemovableMarks) {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Checks if formatting can be reset for a node\n */\nexport function canResetFormatting(\n  editor: Editor | null,\n  preserveMarks?: string[]\n): boolean {\n  if (!editor || !editor.isEditable) return false\n\n  const tr = editor.state.tr\n  return canResetMarks(tr, preserveMarks)\n}\n\n/**\n * Resets formatting for a node or selection\n */\nexport function resetFormatting(\n  editor: Editor | null,\n  preserveMarks?: string[]\n): boolean {\n  if (!editor || !editor.isEditable) return false\n\n  try {\n    const { view, state } = editor\n    const { tr } = state\n    const transaction = removeAllMarksExcept(tr, preserveMarks)\n\n    view.dispatch(transaction)\n    editor.commands.focus()\n    return true\n  } catch {\n    return false\n  }\n}\n\n/**\n * Determines if the reset formatting button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n  preserveMarks?: string[]\n}): boolean {\n  const { editor, hideWhenUnavailable, preserveMarks } = props\n\n  if (!editor || !editor.isEditable) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canResetFormatting(editor, preserveMarks)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides reset formatting functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage - no params needed\n * function MySimpleResetButton() {\n *   const { isVisible, handleResetFormatting } = useResetAllFormatting()\n *\n *   if (!isVisible) return null\n *\n *   return <button onClick={handleResetFormatting}>Reset</button>\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedResetButton() {\n *   const { isVisible, handleResetFormatting, label } = useResetAllFormatting({\n *     editor: myEditor,\n *     hideWhenUnavailable: true,\n *     onResetAllFormatting: () => console.log('Formatting reset!')\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleResetFormatting}\n *       aria-label={label}\n *     >\n *       Reset Formatting\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useResetAllFormatting(config?: UseResetAllFormattingConfig) {\n  const {\n    editor: providedEditor,\n    preserveMarks,\n    hideWhenUnavailable = false,\n    onResetAllFormatting,\n  } = config || {}\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canReset = canResetFormatting(editor, preserveMarks)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(\n        shouldShowButton({ editor, hideWhenUnavailable, preserveMarks })\n      )\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable, preserveMarks])\n\n  const handleResetFormatting = React.useCallback(() => {\n    if (!editor) return false\n\n    const success = resetFormatting(editor, preserveMarks)\n    if (success) {\n      onResetAllFormatting?.()\n    }\n    return success\n  }, [editor, onResetAllFormatting, preserveMarks])\n\n  useHotkeys(\n    RESET_ALL_FORMATTING_SHORTCUT_KEY,\n    (event) => {\n      event.preventDefault() // prevent browser default refresh\n      handleResetFormatting()\n    },\n    {\n      enabled: isVisible && canReset,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    handleResetFormatting,\n    canReset,\n    label: \"Reset formatting\",\n    shortcutKeys: RESET_ALL_FORMATTING_SHORTCUT_KEY,\n    Icon: RotateCcwIcon,\n  }\n}\n","import * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type { UseSlashCommandTriggerConfig } from \"@/components/tiptap-ui/slash-command-trigger-button\"\nimport {\n  SLASH_COMMAND_TRIGGER_SHORTCUT_KEY,\n  useSlashCommandTrigger,\n} from \"@/components/tiptap-ui/slash-command-trigger-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface SlashCommandTriggerButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseSlashCommandTriggerConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function SlashCommandShortcutBadge({\n  shortcutKeys = SLASH_COMMAND_TRIGGER_SHORTCUT_KEY,\n}: {\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for inserting slash commands in a Tiptap editor.\n *\n * For custom button implementations, use the `useSlashCommand` hook instead.\n */\nexport const SlashCommandTriggerButton = React.forwardRef<\n  HTMLButtonElement,\n  SlashCommandTriggerButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      node,\n      nodePos,\n      text,\n      trigger = \"/\",\n      hideWhenUnavailable = false,\n      onTriggered,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      canInsert,\n      handleSlashCommand,\n      label,\n      shortcutKeys,\n      Icon,\n    } = useSlashCommandTrigger({\n      editor,\n      node,\n      nodePos,\n      trigger,\n      hideWhenUnavailable,\n      onTriggered,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleSlashCommand()\n      },\n      [handleSlashCommand, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        role=\"button\"\n        tabIndex={-1}\n        disabled={!canInsert}\n        data-disabled={!canInsert}\n        aria-label={label}\n        tooltip={label}\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <SlashCommandShortcutBadge shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nSlashCommandTriggerButton.displayName = \"SlashCommandTriggerButton\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport { type Editor } from \"@tiptap/react\"\nimport type { Node } from \"@tiptap/pm/model\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Icons ---\nimport { PlusIcon } from \"@/components/tiptap-icons/plus-icon\"\n\n// --- Lib ---\nimport {\n  findNodePosition,\n  isNodeTypeSelected,\n  isValidPosition,\n} from \"@/lib/tiptap-utils\"\n\nexport const SLASH_COMMAND_TRIGGER_SHORTCUT_KEY = \"mod+/\"\n\n/**\n * Configuration for the slash command functionality\n */\nexport interface UseSlashCommandTriggerConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * The node to apply trigger to\n   */\n  node?: Node | null\n  /**\n   * The position of the node in the document\n   */\n  nodePos?: number | null\n  /**\n   * The trigger text to insert\n   * @default \"/\"\n   */\n  trigger?: string\n  /**\n   * Whether the button should hide when insertion is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a successful trigger insertion.\n   */\n  onTriggered?: (trigger: string) => void\n}\n\n/**\n * Checks if a slash command can be inserted in the current editor state\n */\nexport function canInsertSlashCommand(\n  editor: Editor | null,\n  node?: Node | null,\n  nodePos?: number | null\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (isNodeTypeSelected(editor, [\"image\"])) return false\n\n  if (node || isValidPosition(nodePos)) {\n    if (isValidPosition(nodePos) && nodePos! >= 0) return true\n\n    if (node) {\n      const foundPos = findNodePosition({ editor, node })\n      return foundPos !== null\n    }\n  }\n\n  return true\n}\n\n/**\n * Inserts a slash command at a specified node position or after the current selection\n */\nexport function insertSlashCommand(\n  editor: Editor | null,\n  trigger: string = \"/\",\n  node?: Node | null,\n  nodePos?: number | null\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!canInsertSlashCommand(editor, node, nodePos)) return false\n\n  try {\n    if ((node !== undefined && node !== null) || isValidPosition(nodePos)) {\n      const foundPos = findNodePosition({\n        editor,\n        node: node || undefined,\n        nodePos: nodePos || undefined,\n      })\n\n      if (!foundPos) {\n        return false\n      }\n\n      const isEmpty =\n        foundPos.node.type.name === \"paragraph\" &&\n        foundPos.node.content.size === 0\n      const insertPos = isEmpty\n        ? foundPos.pos\n        : foundPos.pos + foundPos.node.nodeSize\n\n      editor.view.dispatch(\n        editor.view.state.tr\n          .scrollIntoView()\n          .insertText(trigger, insertPos, insertPos)\n      )\n\n      const triggerLength = trigger.length + 1 // +1 for the space after the trigger\n      const focusPos = isEmpty\n        ? foundPos.pos + triggerLength\n        : foundPos.pos + foundPos.node.nodeSize + triggerLength\n      editor.commands.focus(focusPos)\n\n      return true\n    }\n\n    const { $from } = editor.state.selection\n    const currentNode = $from.node()\n    const isEmpty = currentNode.textContent.length === 0\n    const isStartOfBlock = $from.parentOffset === 0\n\n    // Check if we're at the document node level\n    // This is important if we dont have focus on the editor\n    // and we want to insert the slash at the end of the document\n    const isTopLevel = $from.depth === 0\n\n    if (!isEmpty || !isStartOfBlock) {\n      const insertPosition = isTopLevel\n        ? editor.state.doc.content.size\n        : $from.after()\n\n      return editor\n        .chain()\n        .insertContentAt(insertPosition, {\n          type: \"paragraph\",\n          content: [{ type: \"text\", text: trigger }],\n        })\n        .focus()\n        .run()\n    }\n\n    return editor\n      .chain()\n      .insertContent({ type: \"text\", text: trigger })\n      .focus()\n      .run()\n  } catch {\n    return false\n  }\n}\n\n/**\n * Determines if the slash command button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n  node?: Node | null\n  nodePos?: number | null\n}): boolean {\n  const { editor, hideWhenUnavailable, node, nodePos } = props\n\n  if (!editor || !editor.isEditable) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canInsertSlashCommand(editor, node, nodePos)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides slash command functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage - no params needed\n * function MySimpleSlashButton() {\n *   const { isVisible, handleSlashCommand } = useSlashCommandTrigger()\n *\n *   if (!isVisible) return null\n *\n *   return <button onClick={handleSlashCommand}>Insert Block</button>\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedSlashButton() {\n *   const { isVisible, handleSlashCommand, label } = useSlashCommandTrigger({\n *     editor: myEditor,\n *     trigger: \"/\",\n *     hideWhenUnavailable: true,\n *     onTriggered: (trigger) => console.log('Inserted:', trigger)\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleSlashCommand}\n *       aria-label={label}\n *     >\n *       Insert Block\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useSlashCommandTrigger(config?: UseSlashCommandTriggerConfig) {\n  const {\n    editor: providedEditor,\n    node,\n    nodePos,\n    trigger = \"/\",\n    hideWhenUnavailable = false,\n    onTriggered,\n  } = config || {}\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canInsert = canInsertSlashCommand(editor, node, nodePos)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(\n        shouldShowButton({ editor, hideWhenUnavailable, node, nodePos })\n      )\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable, node, nodePos])\n\n  const handleSlashCommand = React.useCallback(() => {\n    if (!editor) return false\n\n    const success = insertSlashCommand(editor, trigger, node, nodePos)\n    if (success) {\n      onTriggered?.(trigger)\n    }\n    return success\n  }, [editor, trigger, node, nodePos, onTriggered])\n\n  useHotkeys(\n    SLASH_COMMAND_TRIGGER_SHORTCUT_KEY,\n    (event) => {\n      event.preventDefault()\n      handleSlashCommand()\n    },\n    {\n      enabled: isVisible && canInsert,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    },\n    [isVisible, canInsert, handleSlashCommand]\n  )\n\n  return {\n    isVisible,\n    handleSlashCommand,\n    canInsert,\n    label: \"Insert block\",\n    shortcutKeys: SLASH_COMMAND_TRIGGER_SHORTCUT_KEY,\n    trigger,\n    Icon: PlusIcon,\n  }\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type { UseColorTextConfig } from \"@/components/tiptap-ui/color-text-button\"\nimport {\n  COLOR_TEXT_SHORTCUT_KEY,\n  useColorText,\n} from \"@/components/tiptap-ui/color-text-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\n// --- Styles ---\n\nexport interface ColorTextButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseColorTextConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function ColorTextShortcutBadge({\n  shortcutKeys = COLOR_TEXT_SHORTCUT_KEY,\n}: {\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for applying text colors in a Tiptap editor.\n *\n * For custom button implementations, use the `useColorText` hook instead.\n */\nexport const ColorTextButton = React.forwardRef<\n  HTMLButtonElement,\n  ColorTextButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      textColor,\n      text,\n      hideWhenUnavailable = false,\n      onApplied,\n      showShortcut = false,\n      onClick,\n      children,\n      style,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      canColorText,\n      isActive,\n      handleColorText,\n      label,\n      shortcutKeys,\n      Icon,\n    } = useColorText({\n      editor,\n      textColor,\n      label: text || `Color text to ${textColor}`,\n      hideWhenUnavailable,\n      onApplied,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleColorText()\n      },\n      [handleColorText, onClick]\n    )\n\n    const buttonStyle = React.useMemo(\n      () =>\n        ({\n          ...style,\n          \"--color-text-button-color\": textColor,\n        }) as React.CSSProperties,\n      [textColor, style]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        data-active-state={isActive ? \"on\" : \"off\"}\n        role=\"button\"\n        tabIndex={-1}\n        disabled={!canColorText}\n        data-disabled={!canColorText}\n        aria-label={label}\n        aria-pressed={isActive}\n        tooltip={label}\n        onClick={handleClick}\n        style={buttonStyle}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <span\n              className=\"tiptap-button-color-text\"\n              style={{ color: textColor }}\n            >\n              <Icon\n                className=\"tiptap-button-icon\"\n                style={{ color: textColor, flexGrow: 1 }}\n              />\n            </span>\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <ColorTextShortcutBadge shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nColorTextButton.displayName = \"ColorTextButton\"\n","import * as React from \"react\"\n\nexport const TextColorSmallIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M12.8944 5.55279C12.725 5.214 12.3787 5 12 5C11.6212 5 11.2749 5.214 11.1055 5.55279L5.10555 17.5528C4.85856 18.0468 5.05878 18.6474 5.55276 18.8944C6.04674 19.1414 6.64741 18.9412 6.8944 18.4472L8.64957 14.9369C8.75862 14.9777 8.87671 15 9 15H15C15.1233 15 15.2413 14.9777 15.3504 14.9369L17.1055 18.4472C17.3525 18.9412 17.9532 19.1414 18.4472 18.8944C18.9412 18.6474 19.1414 18.0468 18.8944 17.5528L12.8944 5.55279ZM14.3819 13L12 8.23607L9.61801 13H14.3819Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nTextColorSmallIcon.displayName = \"TextColorSmallIcon\"\n","import * as React from \"react\"\nimport { type Editor } from \"@tiptap/react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Lib ---\nimport { isMarkInSchema, isNodeTypeSelected } from \"@/lib/tiptap-utils\"\n\n// --- Icons ---\nimport { TextColorSmallIcon } from \"@/components/tiptap-icons/text-color-small-icon\"\n\nexport const COLOR_TEXT_SHORTCUT_KEY = \"mod+shift+t\"\nexport const TEXT_COLORS = [\n  {\n    label: \"Default text\",\n    value: \"var(--tt-color-text)\",\n    border: \"var(--tt-color-text-contrast)\",\n  },\n  {\n    label: \"Gray text\",\n    value: \"var(--tt-color-text-gray)\",\n    border: \"var(--tt-color-text-gray-contrast)\",\n  },\n  {\n    label: \"Brown text\",\n    value: \"var(--tt-color-text-brown)\",\n    border: \"var(--tt-color-text-brown-contrast)\",\n  },\n  {\n    label: \"Orange text\",\n    value: \"var(--tt-color-text-orange)\",\n    border: \"var(--tt-color-text-orange-contrast)\",\n  },\n  {\n    label: \"Yellow text\",\n    value: \"var(--tt-color-text-yellow)\",\n    border: \"var(--tt-color-text-yellow-contrast)\",\n  },\n  {\n    label: \"Green text\",\n    value: \"var(--tt-color-text-green)\",\n    border: \"var(--tt-color-text-green-contrast)\",\n  },\n  {\n    label: \"Blue text\",\n    value: \"var(--tt-color-text-blue)\",\n    border: \"var(--tt-color-text-blue-contrast)\",\n  },\n  {\n    label: \"Purple text\",\n    value: \"var(--tt-color-text-purple)\",\n    border: \"var(--tt-color-text-purple-contrast)\",\n  },\n  {\n    label: \"Pink text\",\n    value: \"var(--tt-color-text-pink)\",\n    border: \"var(--tt-color-text-pink-contrast)\",\n  },\n  {\n    label: \"Red text\",\n    value: \"var(--tt-color-text-red)\",\n    border: \"var(--tt-color-text-red-contrast)\",\n  },\n]\n\n/**\n * Configuration for the color text functionality\n */\nexport interface UseColorTextConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * The text color to apply.\n   * Can be any valid CSS color value.\n   */\n  textColor: string\n  /**\n   * Optional text to display alongside the icon.\n   */\n  label: string\n  /**\n   * Whether the button should hide when the mark is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Called when the text color is applied.\n   */\n  onApplied?: ({ color, label }: { color: string; label: string }) => void\n}\n\n/**\n * Checks if text color can be toggled in the current editor state\n */\nexport function canColorText(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (\n    !isMarkInSchema(\"textStyle\", editor) ||\n    isNodeTypeSelected(editor, [\"image\"])\n  )\n    return false\n\n  try {\n    return editor.can().setMark(\"textStyle\", { color: \"currentColor\" })\n  } catch {\n    return false\n  }\n}\n\n/**\n * Checks if text color is active in the current selection\n */\nexport function isColorTextActive(\n  editor: Editor | null,\n  textColor: string\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  return editor.isActive(\"textStyle\", { color: textColor })\n}\n\n/**\n * Determines if the color text button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n  if (!isMarkInSchema(\"textStyle\", editor)) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canColorText(editor)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides color text functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage with required textColor\n * function MySimpleTextColorButton() {\n *   const { isVisible, handleColorText, isActive } = useColorText({\n *     textColor: \"red\",\n *     label: \"Red Text\",\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <button\n *       onClick={handleColorText}\n *       style={{ color: isActive ? \"red\" : \"inherit\" }}\n *     >\n *       Red Text\n *     </button>\n *   )\n * }\n *\n * // Advanced usage\n * function MyAdvancedTextColorButton() {\n *   const { isVisible, handleColorText, label, isActive } = useColorText({\n *     editor: myEditor,\n *     textColor: \"#ff0000\",\n *     label: \"Apply Red\",\n *     hideWhenUnavailable: true,\n *     onApplied: ({ color }) => console.log(\"Applied:\", color),\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleColorText}\n *       aria-label={label}\n *       data-active={isActive}\n *     >\n *       Apply Text Color\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useColorText(config: UseColorTextConfig) {\n  const {\n    editor: providedEditor,\n    label,\n    textColor,\n    hideWhenUnavailable = false,\n    onApplied,\n  } = config\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canColorTextState = canColorText(editor)\n  const isActive = isColorTextActive(editor, textColor)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowButton({ editor, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable])\n\n  const handleColorText = React.useCallback(() => {\n    if (!editor || !canColorTextState) return false\n\n    if (editor.state.storedMarks) {\n      const textStyleMarkType = editor.schema.marks.textStyle\n      if (textStyleMarkType) {\n        editor.view.dispatch(\n          editor.state.tr.removeStoredMark(textStyleMarkType)\n        )\n      }\n    }\n\n    setTimeout(() => {\n      const success = editor\n        .chain()\n        .focus()\n        .toggleMark(\"textStyle\", { color: textColor })\n        .run()\n      if (success) {\n        onApplied?.({ color: textColor, label })\n      }\n      return success\n    }, 0)\n  }, [editor, canColorTextState, textColor, onApplied, label])\n\n  useHotkeys(\n    COLOR_TEXT_SHORTCUT_KEY,\n    (event) => {\n      event.preventDefault()\n      handleColorText()\n    },\n    {\n      enabled: isVisible && canColorTextState,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    isActive,\n    handleColorText,\n    canColorText: canColorTextState,\n    label: label || `Color text to ${textColor}`,\n    shortcutKeys: COLOR_TEXT_SHORTCUT_KEY,\n    Icon: TextColorSmallIcon,\n  }\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type { UseColorHighlightConfig } from \"@/components/tiptap-ui/color-highlight-button\"\nimport {\n  COLOR_HIGHLIGHT_SHORTCUT_KEY,\n  useColorHighlight,\n} from \"@/components/tiptap-ui/color-highlight-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\n// --- Styles ---\n\nexport interface ColorHighlightButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseColorHighlightConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function ColorHighlightShortcutBadge({\n  shortcutKeys = COLOR_HIGHLIGHT_SHORTCUT_KEY,\n}: {\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for applying color highlights in a Tiptap editor.\n *\n * For custom button implementations, use the `useColorHighlight` hook instead.\n */\nexport const ColorHighlightButton = React.forwardRef<\n  HTMLButtonElement,\n  ColorHighlightButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      highlightColor,\n      text,\n      hideWhenUnavailable = false,\n      onApplied,\n      showShortcut = false,\n      onClick,\n      children,\n      style,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      canColorHighlight,\n      isActive,\n      handleColorHighlight,\n      label,\n      shortcutKeys,\n    } = useColorHighlight({\n      editor,\n      highlightColor,\n      label: text || `Toggle highlight (${highlightColor})`,\n      hideWhenUnavailable,\n      onApplied,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleColorHighlight()\n      },\n      [handleColorHighlight, onClick]\n    )\n\n    const buttonStyle = React.useMemo(\n      () =>\n        ({\n          ...style,\n          \"--highlight-color\": highlightColor,\n        }) as React.CSSProperties,\n      [highlightColor, style]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        data-active-state={isActive ? \"on\" : \"off\"}\n        role=\"button\"\n        tabIndex={-1}\n        disabled={!canColorHighlight}\n        data-disabled={!canColorHighlight}\n        aria-label={label}\n        aria-pressed={isActive}\n        tooltip={label}\n        onClick={handleClick}\n        style={buttonStyle}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <span\n              className=\"tiptap-button-highlight\"\n              style={\n                { \"--highlight-color\": highlightColor } as React.CSSProperties\n              }\n            />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <ColorHighlightShortcutBadge shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nColorHighlightButton.displayName = \"ColorHighlightButton\"\n","import * as React from \"react\"\n\nexport const HighlighterIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M14.7072 4.70711C15.0977 4.31658 15.0977 3.68342 14.7072 3.29289C14.3167 2.90237 13.6835 2.90237 13.293 3.29289L8.69294 7.89286L8.68594 7.9C8.13626 8.46079 7.82837 9.21474 7.82837 10C7.82837 10.2306 7.85491 10.4584 7.90631 10.6795L2.29289 16.2929C2.10536 16.4804 2 16.7348 2 17V20C2 20.5523 2.44772 21 3 21H12C12.2652 21 12.5196 20.8946 12.7071 20.7071L15.3205 18.0937C15.5416 18.1452 15.7695 18.1717 16.0001 18.1717C16.7853 18.1717 17.5393 17.8639 18.1001 17.3142L22.7072 12.7071C23.0977 12.3166 23.0977 11.6834 22.7072 11.2929C22.3167 10.9024 21.6835 10.9024 21.293 11.2929L16.6971 15.8887C16.5105 16.0702 16.2605 16.1717 16.0001 16.1717C15.7397 16.1717 15.4897 16.0702 15.303 15.8887L10.1113 10.697C9.92992 10.5104 9.82837 10.2604 9.82837 10C9.82837 9.73963 9.92992 9.48958 10.1113 9.30297L14.7072 4.70711ZM13.5858 17L9.00004 12.4142L4 17.4142V19H11.5858L13.5858 17Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nHighlighterIcon.displayName = \"HighlighterIcon\"\n","import * as React from \"react\"\nimport { type Editor } from \"@tiptap/react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Lib ---\nimport { isMarkInSchema, isNodeTypeSelected } from \"@/lib/tiptap-utils\"\n\n// --- Icons ---\nimport { HighlighterIcon } from \"@/components/tiptap-icons/highlighter-icon\"\n\nexport const COLOR_HIGHLIGHT_SHORTCUT_KEY = \"mod+shift+h\"\nexport const HIGHLIGHT_COLORS = [\n  {\n    label: \"Default background\",\n    value: \"var(--tt-bg-color)\",\n    border: \"var(--tt-bg-color-contrast)\",\n  },\n  {\n    label: \"Gray background\",\n    value: \"var(--tt-color-highlight-gray)\",\n    border: \"var(--tt-color-highlight-gray-contrast)\",\n  },\n  {\n    label: \"Brown background\",\n    value: \"var(--tt-color-highlight-brown)\",\n    border: \"var(--tt-color-highlight-brown-contrast)\",\n  },\n  {\n    label: \"Orange background\",\n    value: \"var(--tt-color-highlight-orange)\",\n    border: \"var(--tt-color-highlight-orange-contrast)\",\n  },\n  {\n    label: \"Yellow background\",\n    value: \"var(--tt-color-highlight-yellow)\",\n    border: \"var(--tt-color-highlight-yellow-contrast)\",\n  },\n  {\n    label: \"Green background\",\n    value: \"var(--tt-color-highlight-green)\",\n    border: \"var(--tt-color-highlight-green-contrast)\",\n  },\n  {\n    label: \"Blue background\",\n    value: \"var(--tt-color-highlight-blue)\",\n    border: \"var(--tt-color-highlight-blue-contrast)\",\n  },\n  {\n    label: \"Purple background\",\n    value: \"var(--tt-color-highlight-purple)\",\n    border: \"var(--tt-color-highlight-purple-contrast)\",\n  },\n  {\n    label: \"Pink background\",\n    value: \"var(--tt-color-highlight-pink)\",\n    border: \"var(--tt-color-highlight-pink-contrast)\",\n  },\n  {\n    label: \"Red background\",\n    value: \"var(--tt-color-highlight-red)\",\n    border: \"var(--tt-color-highlight-red-contrast)\",\n  },\n]\nexport type HighlightColor = (typeof HIGHLIGHT_COLORS)[number]\n\n/**\n * Configuration for the color highlight functionality\n */\nexport interface UseColorHighlightConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * The color to apply when toggling the highlight.\n   */\n  highlightColor?: string\n  /**\n   * Optional label to display alongside the icon.\n   */\n  label?: string\n  /**\n   * Whether the button should hide when the mark is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Called when the highlight is applied.\n   */\n  onApplied?: ({ color, label }: { color: string; label: string }) => void\n}\n\nexport function pickHighlightColorsByValue(values: string[]) {\n  const colorMap = new Map(\n    HIGHLIGHT_COLORS.map((color) => [color.value, color])\n  )\n  return values\n    .map((value) => colorMap.get(value))\n    .filter((color): color is (typeof HIGHLIGHT_COLORS)[number] => !!color)\n}\n\nexport function canColorHighlight(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (\n    !isMarkInSchema(\"highlight\", editor) ||\n    isNodeTypeSelected(editor, [\"image\"])\n  )\n    return false\n\n  return editor.can().setMark(\"highlight\")\n}\n\nexport function isColorHighlightActive(\n  editor: Editor | null,\n  highlightColor?: string\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  return highlightColor\n    ? editor.isActive(\"highlight\", { color: highlightColor })\n    : editor.isActive(\"highlight\")\n}\n\nexport function removeHighlight(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!canColorHighlight(editor)) return false\n\n  return editor.chain().focus().unsetMark(\"highlight\").run()\n}\n\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n  if (!isMarkInSchema(\"highlight\", editor)) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canColorHighlight(editor)\n  }\n\n  return true\n}\n\nexport function useColorHighlight(config: UseColorHighlightConfig) {\n  const {\n    editor: providedEditor,\n    label,\n    highlightColor,\n    hideWhenUnavailable = false,\n    onApplied,\n  } = config\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canColorHighlightState = canColorHighlight(editor)\n  const isActive = isColorHighlightActive(editor, highlightColor)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowButton({ editor, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable])\n\n  const handleColorHighlight = React.useCallback(() => {\n    if (!editor || !canColorHighlightState || !highlightColor || !label)\n      return false\n\n    if (editor.state.storedMarks) {\n      const highlightMarkType = editor.schema.marks.highlight\n      if (highlightMarkType) {\n        editor.view.dispatch(\n          editor.state.tr.removeStoredMark(highlightMarkType)\n        )\n      }\n    }\n\n    setTimeout(() => {\n      const success = editor\n        .chain()\n        .focus()\n        .toggleMark(\"highlight\", { color: highlightColor })\n        .run()\n      if (success) {\n        onApplied?.({ color: highlightColor, label })\n      }\n      return success\n    }, 0)\n  }, [canColorHighlightState, highlightColor, editor, label, onApplied])\n\n  const handleRemoveHighlight = React.useCallback(() => {\n    const success = removeHighlight(editor)\n    if (success) {\n      onApplied?.({ color: \"\", label: \"Remove highlight\" })\n    }\n    return success\n  }, [editor, onApplied])\n\n  useHotkeys(\n    COLOR_HIGHLIGHT_SHORTCUT_KEY,\n    (event) => {\n      event.preventDefault()\n      handleColorHighlight()\n    },\n    {\n      enabled: isVisible && canColorHighlightState,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    isActive,\n    handleColorHighlight,\n    handleRemoveHighlight,\n    canColorHighlight: canColorHighlightState,\n    label: label || `Highlight`,\n    shortcutKeys: COLOR_HIGHLIGHT_SHORTCUT_KEY,\n    Icon: HighlighterIcon,\n  }\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- TIptap UI ---\nimport type { UseAiAskConfig } from \"@/components/tiptap-ui/ai-ask-button\"\nimport {\n  AI_ASK_SHORTCUT_KEY,\n  useAiAsk,\n} from \"@/components/tiptap-ui/ai-ask-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface AiAskButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseAiAskConfig {\n  /**\n   * Optional text to display alongside the icon\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button\n   */\n  showShortcut?: boolean\n}\n\n/**\n * Badge component displaying the AI shortcut key\n */\nexport function AskAiShortcutBadge({\n  shortcutKeys = AI_ASK_SHORTCUT_KEY,\n}: {\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for triggering AI ask functionality on selected content in a Tiptap editor.\n */\nexport const AiAskButton = React.forwardRef<\n  HTMLButtonElement,\n  AiAskButtonProps\n>(function AiAskButton(\n  {\n    editor: providedEditor,\n    text,\n    hideWhenUnavailable = false,\n    onAiAsked,\n    showShortcut = false,\n    onClick,\n    children,\n    ...buttonProps\n  },\n  ref\n) {\n  const { editor } = useTiptapEditor(providedEditor)\n  const { isVisible, canAiAsk, handleAiAsk, label, shortcutKeys, Icon } =\n    useAiAsk({\n      editor,\n      hideWhenUnavailable,\n      onAiAsked,\n    })\n\n  const handleClick = React.useCallback(\n    (event: React.MouseEvent<HTMLButtonElement>) => {\n      onClick?.(event)\n      if (event.defaultPrevented) return\n      handleAiAsk()\n    },\n    [handleAiAsk, onClick]\n  )\n\n  if (!isVisible) {\n    return null\n  }\n\n  return (\n    <Button\n      type=\"button\"\n      data-style=\"ghost\"\n      disabled={!canAiAsk}\n      data-disabled={!canAiAsk}\n      role=\"button\"\n      tabIndex={-1}\n      aria-label={label}\n      tooltip={label}\n      onClick={handleClick}\n      {...buttonProps}\n      ref={ref}\n    >\n      {children ?? (\n        <>\n          <Icon className=\"tiptap-button-icon\" />\n          {text && <span className=\"tiptap-button-text\">{text}</span>}\n          {showShortcut && <AskAiShortcutBadge shortcutKeys={shortcutKeys} />}\n        </>\n      )}\n    </Button>\n  )\n})\n","import * as React from \"react\"\nimport { isNodeSelection, type Editor } from \"@tiptap/react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\n\n// --- Lib ---\nimport {\n  isExtensionAvailable,\n  isNodeTypeSelected,\n} from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Icons ---\nimport { AiSparklesIcon } from \"@/components/tiptap-icons/ai-sparkles-icon\"\n\nexport interface UseAiAskConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether the button should hide when blockquote is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after AI ask is successfully triggered\n   */\n  onAiAsked?: () => void\n}\n\nexport const AI_ASK_SHORTCUT_KEY = \"mod+j\"\nexport const AI_EXTENSIONS = [\"aiGeneration\", \"ai\"]\nexport const EXCLUDED_SELECTION_TYPES = [\"codeBlock\", \"image\", \"imageUpload\"]\n\nexport const canPerformAiAsk = (editor: Editor | null): boolean => {\n  if (!editor || !editor.isEditable) return false\n  // TODO: Wait until AI extensions support for image\n  if (\n    !isExtensionAvailable(editor, AI_EXTENSIONS) ||\n    isNodeTypeSelected(editor, [\"image\", \"horizontalRule\"])\n  )\n    return false\n\n  const { selection } = editor.state\n  if (!selection || selection.empty) return false\n\n  if (isNodeSelection(selection)) {\n    const selectedNode = selection.node\n    if (EXCLUDED_SELECTION_TYPES.includes(selectedNode.type.name)) {\n      return false\n    }\n  }\n\n  return true\n}\n\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n  if (!isExtensionAvailable(editor, AI_EXTENSIONS)) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canPerformAiAsk(editor)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides AI ask functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage\n * function MyAiButton() {\n *   const { isVisible, handleAiAsk } = useAiAsk()\n *   if (!isVisible) return null\n *   return <button onClick={handleAiAsk}>Ask AI</button>\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedAiButton() {\n *   const { isVisible, handleAiAsk, label } = useAiAsk({\n *     editor: myEditor,\n *     hideWhenUnavailable: true,\n *     onAiAsked: () => console.log('AI triggered!')\n *   })\n *\n *   return isVisible ? (\n *     <button onClick={handleAiAsk} aria-label={label}>\n *       Ask AI Assistant\n *     </button>\n *   ) : null\n * }\n * ```\n */\nexport function useAiAsk(config: UseAiAskConfig = {}) {\n  const {\n    editor: providedEditor,\n    hideWhenUnavailable = false,\n    onAiAsked,\n  } = config\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canAiAsk = canPerformAiAsk(editor)\n\n  const handleAiAsk = React.useCallback((): boolean => {\n    if (!editor || !canAiAsk) return false\n\n    const success = editor.chain().focus().aiGenerationShow().run()\n    if (success) {\n      onAiAsked?.()\n    }\n    return success\n  }, [canAiAsk, editor, onAiAsked])\n\n  React.useEffect(() => {\n    if (!editor) {\n      setIsVisible(false)\n      return\n    }\n\n    const updateVisibility = () => {\n      setIsVisible(shouldShowButton({ editor, hideWhenUnavailable }))\n    }\n\n    updateVisibility()\n\n    editor.on(\"selectionUpdate\", updateVisibility)\n\n    return () => {\n      editor.off(\"selectionUpdate\", updateVisibility)\n    }\n  }, [editor, hideWhenUnavailable])\n\n  useHotkeys(\n    AI_ASK_SHORTCUT_KEY,\n    (event) => {\n      event.preventDefault()\n      handleAiAsk()\n    },\n    {\n      enabled: isVisible && canAiAsk,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    handleAiAsk,\n    canAiAsk,\n    label: \"Ask AI Assistant\",\n    shortcutKeys: AI_ASK_SHORTCUT_KEY,\n    Icon: AiSparklesIcon,\n  }\n}\n","import * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type { UseTextConfig } from \"@/components/tiptap-ui/text-button\"\nimport { TEXT_SHORTCUT_KEY, useText } from \"@/components/tiptap-ui/text-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface TextButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseTextConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function TextShortcutBadge({\n  shortcutKeys = TEXT_SHORTCUT_KEY,\n}: {\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for converting to text/paragraph in a Tiptap editor.\n *\n * For custom button implementations, use the `useText` hook instead.\n */\nexport const TextButton = React.forwardRef<HTMLButtonElement, TextButtonProps>(\n  (\n    {\n      editor: providedEditor,\n      text,\n      hideWhenUnavailable = false,\n      onToggled,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      canToggle,\n      isActive,\n      handleToggle,\n      label,\n      shortcutKeys,\n      Icon,\n    } = useText({\n      editor,\n      hideWhenUnavailable,\n      onToggled,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleToggle()\n      },\n      [handleToggle, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        data-active-state={isActive ? \"on\" : \"off\"}\n        role=\"button\"\n        tabIndex={-1}\n        disabled={!canToggle}\n        data-disabled={!canToggle}\n        aria-label={label}\n        aria-pressed={isActive}\n        tooltip=\"Text\"\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && <TextShortcutBadge shortcutKeys={shortcutKeys} />}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nTextButton.displayName = \"TextButton\"\n","import * as React from \"react\"\n\nexport const TypeIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M3 4C3 3.44772 3.44772 3 4 3H20C20.5523 3 21 3.44772 21 4V7C21 7.55228 20.5523 8 20 8C19.4477 8 19 7.55228 19 7V5H13V19H15C15.5523 19 16 19.4477 16 20C16 20.5523 15.5523 21 15 21H9C8.44772 21 8 20.5523 8 20C8 19.4477 8.44772 19 9 19H11V5H5V7C5 7.55228 4.55228 8 4 8C3.44772 8 3 7.55228 3 7V4Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nTypeIcon.displayName = \"TypeIcon\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport { type Editor } from \"@tiptap/react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport { NodeSelection, TextSelection } from \"@tiptap/pm/state\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Icons ---\nimport { TypeIcon } from \"@/components/tiptap-icons/type-icon\"\n\n// --- Lib ---\nimport {\n  findNodePosition,\n  isNodeInSchema,\n  isNodeTypeSelected,\n  isValidPosition,\n} from \"@/lib/tiptap-utils\"\n\nexport const TEXT_SHORTCUT_KEY = \"mod+alt+0\"\n\n/**\n * Configuration for the text/paragraph functionality\n */\nexport interface UseTextConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether the button should hide when text conversion is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a successful conversion.\n   */\n  onToggled?: () => void\n}\n\n/**\n * Checks if text/paragraph conversion can be performed in the current editor state\n */\nexport function canToggleText(\n  editor: Editor | null,\n  turnInto: boolean = true\n): boolean {\n  if (!editor) return false\n  if (\n    !isNodeInSchema(\"paragraph\", editor) ||\n    isNodeTypeSelected(editor, [\"image\"])\n  )\n    return false\n\n  if (!turnInto) {\n    return editor.can().setNode(\"paragraph\")\n  }\n\n  try {\n    const view = editor.view\n    const state = view.state\n    const selection = state.selection\n\n    if (selection.empty || selection instanceof TextSelection) {\n      const pos = findNodePosition({\n        editor,\n        node: state.selection.$anchor.node(1),\n      })?.pos\n      if (!isValidPosition(pos)) return false\n    }\n\n    return true\n  } catch {\n    return false\n  }\n}\n\n/**\n * Checks if paragraph is currently active\n */\nexport function isParagraphActive(editor: Editor | null): boolean {\n  if (!editor) return false\n  return editor.isActive(\"paragraph\")\n}\n\n/**\n * Converts the current selection or node to paragraph\n */\nexport function toggleParagraph(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!canToggleText(editor)) return false\n\n  try {\n    const view = editor.view\n    let state = view.state\n    let tr = state.tr\n\n    // No selection, find the the cursor position\n    if (state.selection.empty || state.selection instanceof TextSelection) {\n      const pos = findNodePosition({\n        editor,\n        node: state.selection.$anchor.node(1),\n      })?.pos\n      if (!isValidPosition(pos)) return false\n\n      tr = tr.setSelection(NodeSelection.create(state.doc, pos))\n      view.dispatch(tr)\n      state = view.state\n    }\n\n    const selection = state.selection\n    let chain = editor.chain().focus()\n\n    // Handle NodeSelection\n    if (selection instanceof NodeSelection) {\n      const firstChild = selection.node.firstChild?.firstChild\n      const lastChild = selection.node.lastChild?.lastChild\n\n      const from = firstChild\n        ? selection.from + firstChild.nodeSize\n        : selection.from + 1\n\n      const to = lastChild\n        ? selection.to - lastChild.nodeSize\n        : selection.to - 1\n\n      chain = chain.setTextSelection({ from, to }).clearNodes()\n    }\n\n    if (!editor.isActive(\"paragraph\")) {\n      chain.setNode(\"paragraph\").run()\n    }\n\n    editor.chain().focus().selectTextblockEnd().run()\n\n    return true\n  } catch {\n    return false\n  }\n}\n\n/**\n * Determines if the text button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n  if (!isNodeInSchema(\"paragraph\", editor)) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canToggleText(editor)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides text/paragraph functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage - no params needed\n * function MySimpleTextButton() {\n *   const { isVisible, handleToggle, isActive } = useText()\n *\n *   if (!isVisible) return null\n *\n *   return <button onClick={handleToggle}>Text</button>\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedTextButton() {\n *   const { isVisible, handleToggle, label, isActive } = useText({\n *     editor: myEditor,\n *     hideWhenUnavailable: true,\n *     onToggled: () => console.log('Text converted!')\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleToggle}\n *       aria-label={label}\n *       aria-pressed={isActive}\n *     >\n *       Convert to Text\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useText(config?: UseTextConfig) {\n  const {\n    editor: providedEditor,\n    hideWhenUnavailable = false,\n    onToggled,\n  } = config || {}\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canToggle = canToggleText(editor)\n  const isActive = isParagraphActive(editor)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowButton({ editor, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable])\n\n  const handleToggle = React.useCallback(() => {\n    if (!editor) return false\n\n    const success = toggleParagraph(editor)\n    if (success) {\n      onToggled?.()\n    }\n    return success\n  }, [editor, onToggled])\n\n  useHotkeys(\n    TEXT_SHORTCUT_KEY,\n    (event) => {\n      event.preventDefault()\n      handleToggle()\n    },\n    {\n      enabled: isVisible && canToggle,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    isActive,\n    handleToggle,\n    canToggle,\n    label: \"Text\",\n    shortcutKeys: TEXT_SHORTCUT_KEY,\n    Icon: TypeIcon,\n  }\n}\n","import * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Tiptap UI ---\nimport type {\n  Level,\n  UseHeadingConfig,\n} from \"@/components/tiptap-ui/heading-button\"\nimport {\n  HEADING_SHORTCUT_KEYS,\n  useHeading,\n} from \"@/components/tiptap-ui/heading-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\nexport interface HeadingButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseHeadingConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function HeadingShortcutBadge({\n  level,\n  shortcutKeys = HEADING_SHORTCUT_KEYS[level],\n}: {\n  level: Level\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for toggling heading in a Tiptap editor.\n *\n * For custom button implementations, use the `useHeading` hook instead.\n */\nexport const HeadingButton = React.forwardRef<\n  HTMLButtonElement,\n  HeadingButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      level,\n      text,\n      hideWhenUnavailable = false,\n      onToggled,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      canToggle,\n      isActive,\n      handleToggle,\n      label,\n      Icon,\n      shortcutKeys,\n    } = useHeading({\n      editor,\n      level,\n      hideWhenUnavailable,\n      onToggled,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleToggle()\n      },\n      [handleToggle, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        data-active-state={isActive ? \"on\" : \"off\"}\n        role=\"button\"\n        tabIndex={-1}\n        disabled={!canToggle}\n        data-disabled={!canToggle}\n        aria-label={label}\n        aria-pressed={isActive}\n        tooltip={label}\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <HeadingShortcutBadge level={level} shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nHeadingButton.displayName = \"HeadingButton\"\n","import * as React from \"react\"\n\nexport const HeadingOneIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M5 6C5 5.44772 4.55228 5 4 5C3.44772 5 3 5.44772 3 6V18C3 18.5523 3.44772 19 4 19C4.55228 19 5 18.5523 5 18V13H11V18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18V6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6V11H5V6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M21.0001 10C21.0001 9.63121 20.7971 9.29235 20.472 9.11833C20.1468 8.94431 19.7523 8.96338 19.4454 9.16795L16.4454 11.168C15.9859 11.4743 15.8617 12.0952 16.1681 12.5547C16.4744 13.0142 17.0953 13.1384 17.5548 12.8321L19.0001 11.8685V18C19.0001 18.5523 19.4478 19 20.0001 19C20.5524 19 21.0001 18.5523 21.0001 18V10Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nHeadingOneIcon.displayName = \"HeadingOneIcon\"\n","import * as React from \"react\"\n\nexport const HeadingTwoIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M5 6C5 5.44772 4.55228 5 4 5C3.44772 5 3 5.44772 3 6V18C3 18.5523 3.44772 19 4 19C4.55228 19 5 18.5523 5 18V13H11V18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18V6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6V11H5V6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M22.0001 12C22.0001 10.7611 21.1663 9.79297 20.0663 9.42632C18.9547 9.05578 17.6171 9.28724 16.4001 10.2C15.9582 10.5314 15.8687 11.1582 16.2001 11.6C16.5314 12.0418 17.1582 12.1314 17.6001 11.8C18.383 11.2128 19.0455 11.1942 19.4338 11.3237C19.8339 11.457 20.0001 11.7389 20.0001 12C20.0001 12.4839 19.8554 12.7379 19.6537 12.9481C19.4275 13.1837 19.1378 13.363 18.7055 13.6307C18.6313 13.6767 18.553 13.7252 18.4701 13.777C17.9572 14.0975 17.3128 14.5261 16.8163 15.2087C16.3007 15.9177 16.0001 16.8183 16.0001 18C16.0001 18.5523 16.4478 19 17.0001 19H21.0001C21.5523 19 22.0001 18.5523 22.0001 18C22.0001 17.4477 21.5523 17 21.0001 17H18.131C18.21 16.742 18.3176 16.5448 18.4338 16.385C18.6873 16.0364 19.0429 15.7775 19.5301 15.473C19.5898 15.4357 19.6536 15.3966 19.7205 15.3556C20.139 15.0992 20.6783 14.7687 21.0964 14.3332C21.6447 13.7621 22.0001 13.0161 22.0001 12Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nHeadingTwoIcon.displayName = \"HeadingTwoIcon\"\n","import * as React from \"react\"\n\nexport const HeadingThreeIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M4 5C4.55228 5 5 5.44772 5 6V11H11V6C11 5.44772 11.4477 5 12 5C12.5523 5 13 5.44772 13 6V18C13 18.5523 12.5523 19 12 19C11.4477 19 11 18.5523 11 18V13H5V18C5 18.5523 4.55228 19 4 19C3.44772 19 3 18.5523 3 18V6C3 5.44772 3.44772 5 4 5Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M19.4608 11.2169C19.1135 11.0531 18.5876 11.0204 18.0069 11.3619C17.5309 11.642 16.918 11.4831 16.638 11.007C16.358 10.531 16.5169 9.91809 16.9929 9.63807C18.1123 8.97962 19.3364 8.94691 20.314 9.40808C21.2839 9.86558 21.9999 10.818 21.9999 12C21.9999 12.7957 21.6838 13.5587 21.1212 14.1213C20.5586 14.6839 19.7956 15 18.9999 15C18.4476 15 17.9999 14.5523 17.9999 14C17.9999 13.4477 18.4476 13 18.9999 13C19.2651 13 19.5195 12.8947 19.707 12.7071C19.8946 12.5196 19.9999 12.2652 19.9999 12C19.9999 11.6821 19.8159 11.3844 19.4608 11.2169Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M18.0001 14C18.0001 13.4477 18.4478 13 19.0001 13C19.7957 13 20.5588 13.3161 21.1214 13.8787C21.684 14.4413 22.0001 15.2043 22.0001 16C22.0001 17.2853 21.2767 18.3971 20.1604 18.8994C19.0257 19.41 17.642 19.2315 16.4001 18.3C15.9582 17.9686 15.8687 17.3418 16.2001 16.9C16.5314 16.4582 17.1582 16.3686 17.6001 16.7C18.3581 17.2685 18.9744 17.24 19.3397 17.0756C19.7234 16.9029 20.0001 16.5147 20.0001 16C20.0001 15.7348 19.8947 15.4804 19.7072 15.2929C19.5196 15.1054 19.2653 15 19.0001 15C18.4478 15 18.0001 14.5523 18.0001 14Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nHeadingThreeIcon.displayName = \"HeadingThreeIcon\"\n","import * as React from \"react\"\n\nexport const HeadingFourIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M4 5C4.55228 5 5 5.44772 5 6V11H11V6C11 5.44772 11.4477 5 12 5C12.5523 5 13 5.44772 13 6V18C13 18.5523 12.5523 19 12 19C11.4477 19 11 18.5523 11 18V13H5V18C5 18.5523 4.55228 19 4 19C3.44772 19 3 18.5523 3 18V6C3 5.44772 3.44772 5 4 5Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M17 9C17.5523 9 18 9.44772 18 10V13H20V10C20 9.44772 20.4477 9 21 9C21.5523 9 22 9.44772 22 10V18C22 18.5523 21.5523 19 21 19C20.4477 19 20 18.5523 20 18V15H17C16.4477 15 16 14.5523 16 14V10C16 9.44772 16.4477 9 17 9Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nHeadingFourIcon.displayName = \"HeadingFourIcon\"\n","import * as React from \"react\"\n\nexport const HeadingFiveIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M5 6C5 5.44772 4.55228 5 4 5C3.44772 5 3 5.44772 3 6V18C3 18.5523 3.44772 19 4 19C4.55228 19 5 18.5523 5 18V13H11V18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18V6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6V11H5V6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M16 10C16 9.44772 16.4477 9 17 9H21C21.5523 9 22 9.44772 22 10C22 10.5523 21.5523 11 21 11H18V12H18.3C20.2754 12 22 13.4739 22 15.5C22 17.5261 20.2754 19 18.3 19C17.6457 19 17.0925 18.8643 16.5528 18.5944C16.0588 18.3474 15.8586 17.7468 16.1055 17.2528C16.3525 16.7588 16.9532 16.5586 17.4472 16.8056C17.7074 16.9357 17.9542 17 18.3 17C19.3246 17 20 16.2739 20 15.5C20 14.7261 19.3246 14 18.3 14H17C16.4477 14 16 13.5523 16 13L16 12.9928V10Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nHeadingFiveIcon.displayName = \"HeadingFiveIcon\"\n","import * as React from \"react\"\n\nexport const HeadingSixIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M5 6C5 5.44772 4.55228 5 4 5C3.44772 5 3 5.44772 3 6V18C3 18.5523 3.44772 19 4 19C4.55228 19 5 18.5523 5 18V13H11V18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18V6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6V11H5V6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M20.7071 9.29289C21.0976 9.68342 21.0976 10.3166 20.7071 10.7071C19.8392 11.575 19.2179 12.2949 18.7889 13.0073C18.8587 13.0025 18.929 13 19 13C20.6569 13 22 14.3431 22 16C22 17.6569 20.6569 19 19 19C17.3431 19 16 17.6569 16 16C16 14.6007 16.2837 13.4368 16.8676 12.3419C17.4384 11.2717 18.2728 10.3129 19.2929 9.29289C19.6834 8.90237 20.3166 8.90237 20.7071 9.29289ZM19 17C18.4477 17 18 16.5523 18 16C18 15.4477 18.4477 15 19 15C19.5523 15 20 15.4477 20 16C20 16.5523 19.5523 17 19 17Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nHeadingSixIcon.displayName = \"HeadingSixIcon\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport { type Editor } from \"@tiptap/react\"\nimport { NodeSelection, TextSelection } from \"@tiptap/pm/state\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Lib ---\nimport {\n  findNodePosition,\n  isNodeInSchema,\n  isNodeTypeSelected,\n  isValidPosition,\n} from \"@/lib/tiptap-utils\"\n\n// --- Icons ---\nimport { HeadingOneIcon } from \"@/components/tiptap-icons/heading-one-icon\"\nimport { HeadingTwoIcon } from \"@/components/tiptap-icons/heading-two-icon\"\nimport { HeadingThreeIcon } from \"@/components/tiptap-icons/heading-three-icon\"\nimport { HeadingFourIcon } from \"@/components/tiptap-icons/heading-four-icon\"\nimport { HeadingFiveIcon } from \"@/components/tiptap-icons/heading-five-icon\"\nimport { HeadingSixIcon } from \"@/components/tiptap-icons/heading-six-icon\"\n\nexport type Level = 1 | 2 | 3 | 4 | 5 | 6\n\n/**\n * Configuration for the heading functionality\n */\nexport interface UseHeadingConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * The heading level.\n   */\n  level: Level\n  /**\n   * Whether the button should hide when heading is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a successful heading toggle.\n   */\n  onToggled?: () => void\n}\n\nexport const headingIcons = {\n  1: HeadingOneIcon,\n  2: HeadingTwoIcon,\n  3: HeadingThreeIcon,\n  4: HeadingFourIcon,\n  5: HeadingFiveIcon,\n  6: HeadingSixIcon,\n}\n\nexport const HEADING_SHORTCUT_KEYS: Record<Level, string> = {\n  1: \"ctrl+alt+1\",\n  2: \"ctrl+alt+2\",\n  3: \"ctrl+alt+3\",\n  4: \"ctrl+alt+4\",\n  5: \"ctrl+alt+5\",\n  6: \"ctrl+alt+6\",\n}\n\n/**\n * Checks if heading can be toggled in the current editor state\n */\nexport function canToggle(\n  editor: Editor | null,\n  level?: Level,\n  turnInto: boolean = true\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (\n    !isNodeInSchema(\"heading\", editor) ||\n    isNodeTypeSelected(editor, [\"image\"])\n  )\n    return false\n\n  if (!turnInto) {\n    return level\n      ? editor.can().setNode(\"heading\", { level })\n      : editor.can().setNode(\"heading\")\n  }\n\n  try {\n    const view = editor.view\n    const state = view.state\n    const selection = state.selection\n\n    if (selection.empty || selection instanceof TextSelection) {\n      const pos = findNodePosition({\n        editor,\n        node: state.selection.$anchor.node(1),\n      })?.pos\n      if (!isValidPosition(pos)) return false\n    }\n\n    return true\n  } catch {\n    return false\n  }\n}\n\n/**\n * Checks if heading is currently active\n */\nexport function isHeadingActive(\n  editor: Editor | null,\n  level?: Level | Level[]\n): boolean {\n  if (!editor || !editor.isEditable) return false\n\n  if (Array.isArray(level)) {\n    return level.some((l) => editor.isActive(\"heading\", { level: l }))\n  }\n\n  return level\n    ? editor.isActive(\"heading\", { level })\n    : editor.isActive(\"heading\")\n}\n\n/**\n * Toggles heading in the editor\n */\nexport function toggleHeading(\n  editor: Editor | null,\n  level: Level | Level[]\n): boolean {\n  if (!editor || !editor.isEditable) return false\n\n  const levels = Array.isArray(level) ? level : [level]\n  const toggleLevel = levels.find((l) => canToggle(editor, l))\n\n  if (!toggleLevel) return false\n\n  try {\n    const view = editor.view\n    let state = view.state\n    let tr = state.tr\n\n    // No selection, find the cursor position\n    if (state.selection.empty || state.selection instanceof TextSelection) {\n      const pos = findNodePosition({\n        editor,\n        node: state.selection.$anchor.node(1),\n      })?.pos\n      if (!isValidPosition(pos)) return false\n\n      tr = tr.setSelection(NodeSelection.create(state.doc, pos))\n      view.dispatch(tr)\n      state = view.state\n    }\n\n    const selection = state.selection\n    let chain = editor.chain().focus()\n\n    // Handle NodeSelection\n    if (selection instanceof NodeSelection) {\n      const firstChild = selection.node.firstChild?.firstChild\n      const lastChild = selection.node.lastChild?.lastChild\n\n      const from = firstChild\n        ? selection.from + firstChild.nodeSize\n        : selection.from + 1\n\n      const to = lastChild\n        ? selection.to - lastChild.nodeSize\n        : selection.to - 1\n\n      chain = chain.setTextSelection({ from, to }).clearNodes()\n    }\n\n    const isActive = levels.some((l) =>\n      editor.isActive(\"heading\", { level: l })\n    )\n\n    const toggle = isActive\n      ? chain.setNode(\"paragraph\")\n      : chain.setNode(\"heading\", { level: toggleLevel })\n\n    toggle.run()\n\n    editor.chain().focus().selectTextblockEnd().run()\n\n    return true\n  } catch {\n    return false\n  }\n}\n\n/**\n * Determines if the heading button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  level?: Level | Level[]\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, level, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n  if (!isNodeInSchema(\"heading\", editor)) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    if (Array.isArray(level)) {\n      return level.some((l) => canToggle(editor, l))\n    }\n    return canToggle(editor, level)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides heading functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage\n * function MySimpleHeadingButton() {\n *   const { isVisible, isActive, handleToggle, Icon } = useHeading({ level: 1 })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <button\n *       onClick={handleToggle}\n *       aria-pressed={isActive}\n *     >\n *       <Icon />\n *       Heading 1\n *     </button>\n *   )\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedHeadingButton() {\n *   const { isVisible, isActive, handleToggle, label, Icon } = useHeading({\n *     level: 2,\n *     editor: myEditor,\n *     hideWhenUnavailable: true,\n *     onToggled: (isActive) => console.log('Heading toggled:', isActive)\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleToggle}\n *       aria-label={label}\n *       aria-pressed={isActive}\n *     >\n *       <Icon />\n *       Toggle Heading 2\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useHeading(config: UseHeadingConfig) {\n  const {\n    editor: providedEditor,\n    level,\n    hideWhenUnavailable = false,\n    onToggled,\n  } = config\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canToggleState = canToggle(editor, level)\n  const isActive = isHeadingActive(editor, level)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowButton({ editor, level, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, level, hideWhenUnavailable])\n\n  const handleToggle = React.useCallback(() => {\n    if (!editor) return false\n\n    const success = toggleHeading(editor, level)\n    if (success) {\n      onToggled?.()\n    }\n    return success\n  }, [editor, level, onToggled])\n\n  useHotkeys(\n    HEADING_SHORTCUT_KEYS[level],\n    (event) => {\n      event.preventDefault()\n      handleToggle()\n    },\n    {\n      enabled: isVisible && canToggleState,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    isActive,\n    handleToggle,\n    canToggle: canToggleState,\n    label: `Heading ${level}`,\n    shortcutKeys: HEADING_SHORTCUT_KEYS[level],\n    Icon: headingIcons[level],\n  }\n}\n","import * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\n// --- Tiptap UI ---\nimport type { ListType, UseListConfig } from \"@/components/tiptap-ui/list-button\"\nimport { LIST_SHORTCUT_KEYS, useList } from \"@/components/tiptap-ui/list-button\"\n\nexport interface ListButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseListConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function ListShortcutBadge({\n  type,\n  shortcutKeys = LIST_SHORTCUT_KEYS[type],\n}: {\n  type: ListType\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for toggling lists in a Tiptap editor.\n *\n * For custom button implementations, use the `useList` hook instead.\n */\nexport const ListButton = React.forwardRef<HTMLButtonElement, ListButtonProps>(\n  (\n    {\n      editor: providedEditor,\n      type,\n      text,\n      hideWhenUnavailable = false,\n      onToggled,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      canToggle,\n      isActive,\n      handleToggle,\n      label,\n      shortcutKeys,\n      Icon,\n    } = useList({\n      editor,\n      type,\n      hideWhenUnavailable,\n      onToggled,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleToggle()\n      },\n      [handleToggle, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        data-active-state={isActive ? \"on\" : \"off\"}\n        role=\"button\"\n        tabIndex={-1}\n        disabled={!canToggle}\n        data-disabled={!canToggle}\n        aria-label={label}\n        aria-pressed={isActive}\n        tooltip={label}\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <ListShortcutBadge type={type} shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nListButton.displayName = \"ListButton\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport { type Editor } from \"@tiptap/react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport { NodeSelection, TextSelection } from \"@tiptap/pm/state\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Icons ---\nimport { ListIcon } from \"@/components/tiptap-icons/list-icon\"\nimport { ListOrderedIcon } from \"@/components/tiptap-icons/list-ordered-icon\"\nimport { ListTodoIcon } from \"@/components/tiptap-icons/list-todo-icon\"\n\n// --- Lib ---\nimport {\n  findNodePosition,\n  isNodeInSchema,\n  isNodeTypeSelected,\n  isValidPosition,\n} from \"@/lib/tiptap-utils\"\n\nexport type ListType = \"bulletList\" | \"orderedList\" | \"taskList\"\n\n/**\n * Configuration for the list functionality\n */\nexport interface UseListConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * The type of list to toggle.\n   */\n  type: ListType\n  /**\n   * Whether the button should hide when list is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a successful toggle.\n   */\n  onToggled?: () => void\n}\n\nexport const listIcons = {\n  bulletList: ListIcon,\n  orderedList: ListOrderedIcon,\n  taskList: ListTodoIcon,\n}\n\nexport const listLabels: Record<ListType, string> = {\n  bulletList: \"Bullet List\",\n  orderedList: \"Ordered List\",\n  taskList: \"Task List\",\n}\n\nexport const LIST_SHORTCUT_KEYS: Record<ListType, string> = {\n  bulletList: \"mod+shift+8\",\n  orderedList: \"mod+shift+7\",\n  taskList: \"mod+shift+9\",\n}\n\n/**\n * Checks if a list can be toggled in the current editor state\n */\nexport function canToggleList(\n  editor: Editor | null,\n  type: ListType,\n  turnInto: boolean = true\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!isNodeInSchema(type, editor) || isNodeTypeSelected(editor, [\"image\"]))\n    return false\n\n  if (!turnInto) {\n    switch (type) {\n      case \"bulletList\":\n        return editor.can().toggleBulletList()\n      case \"orderedList\":\n        return editor.can().toggleOrderedList()\n      case \"taskList\":\n        return editor.can().toggleList(\"taskList\", \"taskItem\")\n      default:\n        return false\n    }\n  }\n\n  try {\n    const view = editor.view\n    const state = view.state\n    const selection = state.selection\n\n    if (selection.empty || selection instanceof TextSelection) {\n      const pos = findNodePosition({\n        editor,\n        node: state.selection.$anchor.node(1),\n      })?.pos\n      if (!isValidPosition(pos)) return false\n    }\n\n    return true\n  } catch {\n    return false\n  }\n}\n\n/**\n * Checks if list is currently active\n */\nexport function isListActive(editor: Editor | null, type: ListType): boolean {\n  if (!editor || !editor.isEditable) return false\n\n  switch (type) {\n    case \"bulletList\":\n      return editor.isActive(\"bulletList\")\n    case \"orderedList\":\n      return editor.isActive(\"orderedList\")\n    case \"taskList\":\n      return editor.isActive(\"taskList\")\n    default:\n      return false\n  }\n}\n\n/**\n * Toggles list in the editor\n */\nexport function toggleList(editor: Editor | null, type: ListType): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!canToggleList(editor, type)) return false\n\n  try {\n    const view = editor.view\n    let state = view.state\n    let tr = state.tr\n\n    // No selection, find the the cursor position\n    if (state.selection.empty || state.selection instanceof TextSelection) {\n      const pos = findNodePosition({\n        editor,\n        node: state.selection.$anchor.node(1),\n      })?.pos\n      if (!isValidPosition(pos)) return false\n\n      tr = tr.setSelection(NodeSelection.create(state.doc, pos))\n      view.dispatch(tr)\n      state = view.state\n    }\n\n    const selection = state.selection\n\n    let chain = editor.chain().focus()\n\n    // Handle NodeSelection\n    if (selection instanceof NodeSelection) {\n      const firstChild = selection.node.firstChild?.firstChild\n      const lastChild = selection.node.lastChild?.lastChild\n\n      const from = firstChild\n        ? selection.from + firstChild.nodeSize\n        : selection.from + 1\n\n      const to = lastChild\n        ? selection.to - lastChild.nodeSize\n        : selection.to - 1\n\n      chain = chain.setTextSelection({ from, to }).clearNodes()\n    }\n\n    if (editor.isActive(type)) {\n      // Unwrap list\n      chain\n        .liftListItem(\"listItem\")\n        .lift(\"bulletList\")\n        .lift(\"orderedList\")\n        .lift(\"taskList\")\n        .run()\n    } else {\n      // Wrap in specific list type\n      const toggleMap: Record<ListType, () => typeof chain> = {\n        bulletList: () => chain.toggleBulletList(),\n        orderedList: () => chain.toggleOrderedList(),\n        taskList: () => chain.toggleList(\"taskList\", \"taskItem\"),\n      }\n\n      const toggle = toggleMap[type]\n      if (!toggle) return false\n\n      toggle().run()\n    }\n\n    editor.chain().focus().selectTextblockEnd().run()\n\n    return true\n  } catch {\n    return false\n  }\n}\n\n/**\n * Determines if the list button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  type: ListType\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, type, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n  if (!isNodeInSchema(type, editor)) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canToggleList(editor, type)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides list functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage\n * function MySimpleListButton() {\n *   const { isVisible, handleToggle, isActive } = useList({ type: \"bulletList\" })\n *\n *   if (!isVisible) return null\n *\n *   return <button onClick={handleToggle}>Bullet List</button>\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedListButton() {\n *   const { isVisible, handleToggle, label, isActive } = useList({\n *     type: \"orderedList\",\n *     editor: myEditor,\n *     hideWhenUnavailable: true,\n *     onToggled: () => console.log('List toggled!')\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleToggle}\n *       aria-label={label}\n *       aria-pressed={isActive}\n *     >\n *       Toggle List\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useList(config: UseListConfig) {\n  const {\n    editor: providedEditor,\n    type,\n    hideWhenUnavailable = false,\n    onToggled,\n  } = config\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canToggle = canToggleList(editor, type)\n  const isActive = isListActive(editor, type)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowButton({ editor, type, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, type, hideWhenUnavailable])\n\n  const handleToggle = React.useCallback(() => {\n    if (!editor) return false\n\n    const success = toggleList(editor, type)\n    if (success) {\n      onToggled?.()\n    }\n    return success\n  }, [editor, type, onToggled])\n\n  useHotkeys(\n    LIST_SHORTCUT_KEYS[type],\n    (event) => {\n      event.preventDefault()\n      handleToggle()\n    },\n    {\n      enabled: isVisible && canToggle,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    isActive,\n    handleToggle,\n    canToggle,\n    label: listLabels[type],\n    shortcutKeys: LIST_SHORTCUT_KEYS[type],\n    Icon: listIcons[type],\n  }\n}\n","import * as React from \"react\"\n\n// --- Tiptap UI ---\nimport type { UseBlockquoteConfig } from \"@/components/tiptap-ui/blockquote-button\"\nimport {\n  BLOCKQUOTE_SHORTCUT_KEY,\n  useBlockquote,\n} from \"@/components/tiptap-ui/blockquote-button\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface BlockquoteButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseBlockquoteConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function BlockquoteShortcutBadge({\n  shortcutKeys = BLOCKQUOTE_SHORTCUT_KEY,\n}: {\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for toggling blockquote in a Tiptap editor.\n *\n * For custom button implementations, use the `useBlockquote` hook instead.\n */\nexport const BlockquoteButton = React.forwardRef<\n  HTMLButtonElement,\n  BlockquoteButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      text,\n      hideWhenUnavailable = false,\n      onToggled,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      canToggle,\n      isActive,\n      handleToggle,\n      label,\n      shortcutKeys,\n      Icon,\n    } = useBlockquote({\n      editor,\n      hideWhenUnavailable,\n      onToggled,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleToggle()\n      },\n      [handleToggle, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        data-active-state={isActive ? \"on\" : \"off\"}\n        role=\"button\"\n        tabIndex={-1}\n        disabled={!canToggle}\n        data-disabled={!canToggle}\n        aria-label={label}\n        aria-pressed={isActive}\n        tooltip=\"Blockquote\"\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <BlockquoteShortcutBadge shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nBlockquoteButton.displayName = \"BlockquoteButton\"\n","import * as React from \"react\"\n\nexport const BlockquoteIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M8 6C8 5.44772 8.44772 5 9 5H16C16.5523 5 17 5.44772 17 6C17 6.55228 16.5523 7 16 7H9C8.44772 7 8 6.55228 8 6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M4 3C4.55228 3 5 3.44772 5 4L5 20C5 20.5523 4.55229 21 4 21C3.44772 21 3 20.5523 3 20L3 4C3 3.44772 3.44772 3 4 3Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M8 12C8 11.4477 8.44772 11 9 11H20C20.5523 11 21 11.4477 21 12C21 12.5523 20.5523 13 20 13H9C8.44772 13 8 12.5523 8 12Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M8 18C8 17.4477 8.44772 17 9 17H16C16.5523 17 17 17.4477 17 18C17 18.5523 16.5523 19 16 19H9C8.44772 19 8 18.5523 8 18Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nBlockquoteIcon.displayName = \"BlockquoteIcon\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport type { Editor } from \"@tiptap/react\"\nimport { NodeSelection, TextSelection } from \"@tiptap/pm/state\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Icons ---\nimport { BlockquoteIcon } from \"@/components/tiptap-icons/blockquote-icon\"\n\n// --- UI Utils ---\nimport {\n  findNodePosition,\n  isNodeInSchema,\n  isNodeTypeSelected,\n  isValidPosition,\n} from \"@/lib/tiptap-utils\"\n\nexport const BLOCKQUOTE_SHORTCUT_KEY = \"mod+shift+b\"\n\n/**\n * Configuration for the blockquote functionality\n */\nexport interface UseBlockquoteConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether the button should hide when blockquote is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a successful toggle.\n   */\n  onToggled?: () => void\n}\n\n/**\n * Checks if blockquote can be toggled in the current editor state\n */\nexport function canToggleBlockquote(\n  editor: Editor | null,\n  turnInto: boolean = true\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (\n    !isNodeInSchema(\"blockquote\", editor) ||\n    isNodeTypeSelected(editor, [\"image\"])\n  )\n    return false\n\n  if (!turnInto) {\n    return editor.can().toggleWrap(\"blockquote\")\n  }\n\n  try {\n    const view = editor.view\n    const state = view.state\n    const selection = state.selection\n\n    if (selection.empty || selection instanceof TextSelection) {\n      const pos = findNodePosition({\n        editor,\n        node: state.selection.$anchor.node(1),\n      })?.pos\n      if (!isValidPosition(pos)) return false\n    }\n\n    return true\n  } catch {\n    return false\n  }\n}\n\n/**\n * Toggles blockquote formatting for a specific node or the current selection\n */\nexport function toggleBlockquote(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!canToggleBlockquote(editor)) return false\n\n  try {\n    const view = editor.view\n    let state = view.state\n    let tr = state.tr\n\n    // No selection, find the the cursor position\n    if (state.selection.empty || state.selection instanceof TextSelection) {\n      const pos = findNodePosition({\n        editor,\n        node: state.selection.$anchor.node(1),\n      })?.pos\n      if (!isValidPosition(pos)) return false\n\n      tr = tr.setSelection(NodeSelection.create(state.doc, pos))\n      view.dispatch(tr)\n      state = view.state\n    }\n\n    const selection = state.selection\n\n    let chain = editor.chain().focus()\n\n    // Handle NodeSelection\n    if (selection instanceof NodeSelection) {\n      const firstChild = selection.node.firstChild?.firstChild\n      const lastChild = selection.node.lastChild?.lastChild\n\n      const from = firstChild\n        ? selection.from + firstChild.nodeSize\n        : selection.from + 1\n\n      const to = lastChild\n        ? selection.to - lastChild.nodeSize\n        : selection.to - 1\n\n      chain = chain.setTextSelection({ from, to }).clearNodes()\n    }\n\n    const toggle = editor.isActive(\"blockquote\")\n      ? chain.lift(\"blockquote\")\n      : chain.wrapIn(\"blockquote\")\n\n    toggle.run()\n\n    editor.chain().focus().selectTextblockEnd().run()\n\n    return true\n  } catch {\n    return false\n  }\n}\n\n/**\n * Determines if the blockquote button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n  if (!isNodeInSchema(\"blockquote\", editor)) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canToggleBlockquote(editor)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides blockquote functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage - no params needed\n * function MySimpleBlockquoteButton() {\n *   const { isVisible, handleToggle, isActive } = useBlockquote()\n *\n *   if (!isVisible) return null\n *\n *   return <button onClick={handleToggle}>Blockquote</button>\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedBlockquoteButton() {\n *   const { isVisible, handleToggle, label, isActive } = useBlockquote({\n *     editor: myEditor,\n *     hideWhenUnavailable: true,\n *     onToggled: () => console.log('Blockquote toggled!')\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleToggle}\n *       aria-label={label}\n *       aria-pressed={isActive}\n *     >\n *       Toggle Blockquote\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useBlockquote(config?: UseBlockquoteConfig) {\n  const {\n    editor: providedEditor,\n    hideWhenUnavailable = false,\n    onToggled,\n  } = config || {}\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canToggle = canToggleBlockquote(editor)\n  const isActive = editor?.isActive(\"blockquote\") || false\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowButton({ editor, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable])\n\n  const handleToggle = React.useCallback(() => {\n    if (!editor) return false\n\n    const success = toggleBlockquote(editor)\n    if (success) {\n      onToggled?.()\n    }\n    return success\n  }, [editor, onToggled])\n\n  useHotkeys(\n    BLOCKQUOTE_SHORTCUT_KEY,\n    (event) => {\n      event.preventDefault()\n      handleToggle()\n    },\n    {\n      enabled: isVisible && canToggle,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    isActive,\n    handleToggle,\n    canToggle,\n    label: \"Blockquote\",\n    shortcutKeys: BLOCKQUOTE_SHORTCUT_KEY,\n    Icon: BlockquoteIcon,\n  }\n}\n","import * as React from \"react\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Tiptap UI ---\nimport type { UseCodeBlockConfig } from \"@/components/tiptap-ui/code-block-button\"\nimport {\n  CODE_BLOCK_SHORTCUT_KEY,\n  useCodeBlock,\n} from \"@/components/tiptap-ui/code-block-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface CodeBlockButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseCodeBlockConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function CodeBlockShortcutBadge({\n  shortcutKeys = CODE_BLOCK_SHORTCUT_KEY,\n}: {\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for toggling code block in a Tiptap editor.\n *\n * For custom button implementations, use the `useCodeBlock` hook instead.\n */\nexport const CodeBlockButton = React.forwardRef<\n  HTMLButtonElement,\n  CodeBlockButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      text,\n      hideWhenUnavailable = false,\n      onToggled,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      canToggle,\n      isActive,\n      handleToggle,\n      label,\n      shortcutKeys,\n      Icon,\n    } = useCodeBlock({\n      editor,\n      hideWhenUnavailable,\n      onToggled,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleToggle()\n      },\n      [handleToggle, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        data-active-state={isActive ? \"on\" : \"off\"}\n        role=\"button\"\n        disabled={!canToggle}\n        data-disabled={!canToggle}\n        tabIndex={-1}\n        aria-label={label}\n        aria-pressed={isActive}\n        tooltip=\"Code Block\"\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <CodeBlockShortcutBadge shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nCodeBlockButton.displayName = \"CodeBlockButton\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport { type Editor } from \"@tiptap/react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport { NodeSelection, TextSelection } from \"@tiptap/pm/state\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Lib ---\nimport {\n  findNodePosition,\n  isNodeInSchema,\n  isNodeTypeSelected,\n  isValidPosition,\n} from \"@/lib/tiptap-utils\"\n\n// --- Icons ---\nimport { CodeBlockIcon } from \"@/components/tiptap-icons/code-block-icon\"\n\nexport const CODE_BLOCK_SHORTCUT_KEY = \"mod+alt+c\"\n\n/**\n * Configuration for the code block functionality\n */\nexport interface UseCodeBlockConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether the button should hide when code block is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a successful code block toggle.\n   */\n  onToggled?: () => void\n}\n\n/**\n * Checks if code block can be toggled in the current editor state\n */\nexport function canToggle(\n  editor: Editor | null,\n  turnInto: boolean = true\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (\n    !isNodeInSchema(\"codeBlock\", editor) ||\n    isNodeTypeSelected(editor, [\"image\"])\n  )\n    return false\n\n  if (!turnInto) {\n    return editor.can().toggleNode(\"codeBlock\", \"paragraph\")\n  }\n\n  try {\n    const view = editor.view\n    const state = view.state\n    const selection = state.selection\n\n    if (selection.empty || selection instanceof TextSelection) {\n      const pos = findNodePosition({\n        editor,\n        node: state.selection.$anchor.node(1),\n      })?.pos\n      if (!isValidPosition(pos)) return false\n    }\n\n    return true\n  } catch {\n    return false\n  }\n}\n\n/**\n * Toggles code block in the editor\n */\nexport function toggleCodeBlock(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!canToggle(editor)) return false\n\n  try {\n    const view = editor.view\n    let state = view.state\n    let tr = state.tr\n\n    // No selection, find the the cursor position\n    if (state.selection.empty || state.selection instanceof TextSelection) {\n      const pos = findNodePosition({\n        editor,\n        node: state.selection.$anchor.node(1),\n      })?.pos\n      if (!isValidPosition(pos)) return false\n\n      tr = tr.setSelection(NodeSelection.create(state.doc, pos))\n      view.dispatch(tr)\n      state = view.state\n    }\n\n    const selection = state.selection\n\n    let chain = editor.chain().focus()\n\n    // Handle NodeSelection\n    if (selection instanceof NodeSelection) {\n      const firstChild = selection.node.firstChild?.firstChild\n      const lastChild = selection.node.lastChild?.lastChild\n\n      const from = firstChild\n        ? selection.from + firstChild.nodeSize\n        : selection.from + 1\n\n      const to = lastChild\n        ? selection.to - lastChild.nodeSize\n        : selection.to - 1\n\n      chain = chain.setTextSelection({ from, to }).clearNodes()\n    }\n\n    const toggle = editor.isActive(\"codeBlock\")\n      ? chain.setNode(\"paragraph\")\n      : chain.toggleNode(\"codeBlock\", \"paragraph\")\n\n    toggle.run()\n\n    editor.chain().focus().selectTextblockEnd().run()\n\n    return true\n  } catch {\n    return false\n  }\n}\n\n/**\n * Determines if the code block button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n  if (!isNodeInSchema(\"codeBlock\", editor)) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canToggle(editor)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides code block functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage - no params needed\n * function MySimpleCodeBlockButton() {\n *   const { isVisible, isActive, handleToggle } = useCodeBlock()\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <button\n *       onClick={handleToggle}\n *       aria-pressed={isActive}\n *     >\n *       Code Block\n *     </button>\n *   )\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedCodeBlockButton() {\n *   const { isVisible, isActive, handleToggle, label } = useCodeBlock({\n *     editor: myEditor,\n *     hideWhenUnavailable: true,\n *     onToggled: (isActive) => console.log('Code block toggled:', isActive)\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleToggle}\n *       aria-label={label}\n *       aria-pressed={isActive}\n *     >\n *       Toggle Code Block\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useCodeBlock(config?: UseCodeBlockConfig) {\n  const {\n    editor: providedEditor,\n    hideWhenUnavailable = false,\n    onToggled,\n  } = config || {}\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canToggleState = canToggle(editor)\n  const isActive = editor?.isActive(\"codeBlock\") || false\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowButton({ editor, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable])\n\n  const handleToggle = React.useCallback(() => {\n    if (!editor) return false\n\n    const success = toggleCodeBlock(editor)\n    if (success) {\n      onToggled?.()\n    }\n    return success\n  }, [editor, onToggled])\n\n  useHotkeys(\n    CODE_BLOCK_SHORTCUT_KEY,\n    (event) => {\n      event.preventDefault()\n      handleToggle()\n    },\n    {\n      enabled: isVisible && canToggleState,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    isActive,\n    handleToggle,\n    canToggle: canToggleState,\n    label: \"Code Block\",\n    shortcutKeys: CODE_BLOCK_SHORTCUT_KEY,\n    Icon: CodeBlockIcon,\n  }\n}\n","import * as React from \"react\"\n\nexport const ChevronDownIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M5.29289 8.29289C5.68342 7.90237 6.31658 7.90237 6.70711 8.29289L12 13.5858L17.2929 8.29289C17.6834 7.90237 18.3166 7.90237 18.7071 8.29289C19.0976 8.68342 19.0976 9.31658 18.7071 9.70711L12.7071 15.7071C12.3166 16.0976 11.6834 16.0976 11.2929 15.7071L5.29289 9.70711C4.90237 9.31658 4.90237 8.68342 5.29289 8.29289Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nChevronDownIcon.displayName = \"ChevronDownIcon\"\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\nimport { cn } from \"@/lib/tiptap-utils\"\n\nfunction Popover({\n  ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n  return <PopoverPrimitive.Root {...props} />\n}\n\nfunction PopoverTrigger({\n  ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n  return <PopoverPrimitive.Trigger {...props} />\n}\n\nfunction PopoverContent({\n  className,\n  align = \"center\",\n  sideOffset = 4,\n  ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n  return (\n    <PopoverPrimitive.Portal>\n      <PopoverPrimitive.Content\n        align={align}\n        sideOffset={sideOffset}\n        className={cn(\"tiptap-popover\", className)}\n        {...props}\n      />\n    </PopoverPrimitive.Portal>\n  )\n}\n\nexport { Popover, PopoverTrigger, PopoverContent }\n","\"use client\"\n\nimport * as React from \"react\"\n\n// --- Hooks ---\nimport { useMenuNavigation } from \"@/hooks/use-menu-navigation\"\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Icons ---\nimport { ChevronDownIcon } from \"@/components/tiptap-icons/chevron-down-icon\"\n\n// --- Tiptap UI ---\nimport type {\n  ColorType,\n  ColorItem,\n  RecentColor,\n  UseColorTextPopoverConfig,\n} from \"@/components/tiptap-ui/color-text-popover\"\nimport {\n  useColorTextPopover,\n  useRecentColors,\n  getColorByValue,\n} from \"@/components/tiptap-ui/color-text-popover\"\nimport {\n  TEXT_COLORS,\n  ColorTextButton,\n} from \"@/components/tiptap-ui/color-text-button\"\nimport {\n  HIGHLIGHT_COLORS,\n  ColorHighlightButton,\n} from \"@/components/tiptap-ui/color-highlight-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button, ButtonGroup } from \"@/components/tiptap-ui-primitive/button\"\nimport {\n  Popover,\n  PopoverTrigger,\n  PopoverContent,\n} from \"@/components/tiptap-ui-primitive/popover\"\nimport {\n  Card,\n  CardBody,\n  CardGroupLabel,\n  CardItemGroup,\n} from \"@/components/tiptap-ui-primitive/card\"\n\n// --- Utils ---\nimport { chunkArray } from \"@/lib/tiptap-advanced-utils\"\n\n// --- Styles ---\n\nexport interface RenderColorButtonProps extends ButtonProps {\n  colorObj: RecentColor\n  withLabel?: boolean\n  onColorChanged?: ({\n    type,\n    label,\n    value,\n  }: {\n    type: ColorType\n    label: string\n    value: string\n  }) => void\n}\n\nexport const RecentColorButton: React.FC<RenderColorButtonProps> = ({\n  colorObj,\n  withLabel = false,\n  onColorChanged,\n  ...props\n}) => {\n  const colorSet = colorObj.type === \"text\" ? TEXT_COLORS : HIGHLIGHT_COLORS\n  const color = getColorByValue(colorObj.value, colorSet)\n\n  const commonProps = {\n    tooltip: color.label,\n    text: withLabel ? color.label : undefined,\n    onApplied: () =>\n      onColorChanged?.({\n        type: colorObj.type,\n        label: color.label,\n        value: color.value,\n      }),\n    ...props,\n  }\n\n  return colorObj.type === \"text\" ? (\n    <ColorTextButton\n      textColor={color.value}\n      label={color.label}\n      {...commonProps}\n    />\n  ) : (\n    <ColorHighlightButton highlightColor={color.value} {...commonProps} />\n  )\n}\n\nexport interface ColorGroupProps {\n  type: ColorType\n  colors: ColorItem[][]\n  onColorSelected: ({\n    type,\n    label,\n    value,\n  }: {\n    type: ColorType\n    label: string\n    value: string\n  }) => void\n  selectedIndex?: number\n  startIndexOffset: number\n}\n\nexport const ColorGroup: React.FC<ColorGroupProps> = ({\n  type,\n  colors,\n  onColorSelected,\n  selectedIndex,\n  startIndexOffset,\n}) => {\n  return colors.map((group, groupIndex) => (\n    <ButtonGroup key={`${type}-group-${groupIndex}`} orientation=\"horizontal\">\n      {group.map((color, colorIndex) => {\n        const itemIndex =\n          startIndexOffset +\n          colors.slice(0, groupIndex).reduce((acc, g) => acc + g.length, 0) +\n          colorIndex\n\n        const isHighlighted = selectedIndex === itemIndex\n\n        const commonProps = {\n          tooltip: color.label,\n          onApplied: () =>\n            onColorSelected({ type, label: color.label, value: color.value }),\n          tabIndex: isHighlighted ? 0 : -1,\n          \"data-highlighted\": isHighlighted,\n          \"aria-label\": `${color.label} ${type === \"text\" ? \"text\" : \"highlight\"} color`,\n        }\n\n        return type === \"text\" ? (\n          <ColorTextButton\n            key={`${type}-${color.value}-${colorIndex}`}\n            textColor={color.value}\n            label={color.label}\n            {...commonProps}\n          />\n        ) : (\n          <ColorHighlightButton\n            key={`${type}-${color.value}-${colorIndex}`}\n            highlightColor={color.value}\n            {...commonProps}\n          />\n        )\n      })}\n    </ButtonGroup>\n  ))\n}\n\ninterface RecentColorsSectionProps {\n  recentColors: RecentColor[]\n  onColorSelected: ({\n    type,\n    label,\n    value,\n  }: {\n    type: ColorType\n    label: string\n    value: string\n  }) => void\n  selectedIndex?: number\n}\n\nconst RecentColorsSection: React.FC<RecentColorsSectionProps> = ({\n  recentColors,\n  onColorSelected,\n  selectedIndex,\n}) => {\n  if (recentColors.length === 0) return null\n\n  return (\n    <CardItemGroup>\n      <CardGroupLabel>Recently used</CardGroupLabel>\n      <ButtonGroup orientation=\"horizontal\">\n        {recentColors.map((colorObj, index) => (\n          <RecentColorButton\n            key={`recent-${colorObj.type}-${colorObj.value}`}\n            colorObj={colorObj}\n            onColorChanged={onColorSelected}\n            tabIndex={selectedIndex === index ? 0 : -1}\n            data-highlighted={selectedIndex === index}\n          />\n        ))}\n      </ButtonGroup>\n    </CardItemGroup>\n  )\n}\n\nexport interface TextStyleColorPanelProps {\n  maxColorsPerGroup?: number\n  maxRecentColors?: number\n  onColorChanged?: ({\n    type,\n    label,\n    value,\n  }: {\n    type: ColorType\n    label: string\n    value: string\n  }) => void\n}\n\nexport const TextStyleColorPanel: React.FC<TextStyleColorPanelProps> = ({\n  maxColorsPerGroup = 5,\n  maxRecentColors = 3,\n  onColorChanged,\n}) => {\n  const { recentColors, addRecentColor, isInitialized } =\n    useRecentColors(maxRecentColors)\n\n  const containerRef = React.useRef<HTMLDivElement>(null)\n\n  const textColorGroups = React.useMemo(\n    () => chunkArray(TEXT_COLORS, maxColorsPerGroup),\n    [maxColorsPerGroup]\n  )\n\n  const highlightColorGroups = React.useMemo(\n    () => chunkArray(HIGHLIGHT_COLORS, maxColorsPerGroup),\n    [maxColorsPerGroup]\n  )\n\n  const allTextColors = React.useMemo(\n    () => textColorGroups.flat(),\n    [textColorGroups]\n  )\n\n  const allHighlightColors = React.useMemo(\n    () => highlightColorGroups.flat(),\n    [highlightColorGroups]\n  )\n\n  const textColorStartIndex = React.useMemo(\n    () => (isInitialized ? recentColors.length : 0),\n    [isInitialized, recentColors.length]\n  )\n\n  const highlightColorStartIndex = React.useMemo(\n    () => textColorStartIndex + allTextColors.length,\n    [textColorStartIndex, allTextColors.length]\n  )\n\n  const menuItems = React.useMemo(() => {\n    const items = []\n\n    if (isInitialized && recentColors.length > 0) {\n      items.push(\n        ...recentColors.map((color) => ({\n          type: color.type,\n          value: color.value,\n          label: `Recent ${color.type === \"text\" ? \"text\" : \"highlight\"} color`,\n          group: \"recent\",\n        }))\n      )\n    }\n\n    items.push(\n      ...allTextColors.map((color) => ({\n        type: \"text\" as ColorType,\n        value: color.value,\n        label: color.label,\n        group: \"text\",\n      }))\n    )\n\n    items.push(\n      ...allHighlightColors.map((color) => ({\n        type: \"highlight\" as ColorType,\n        value: color.value,\n        label: color.label,\n        group: \"highlight\",\n      }))\n    )\n\n    return items\n  }, [isInitialized, recentColors, allTextColors, allHighlightColors])\n\n  const handleColorSelected = React.useCallback(\n    ({\n      type,\n      label,\n      value,\n    }: {\n      type: ColorType\n      label: string\n      value: string\n    }) => {\n      if (!containerRef.current) return false\n\n      const highlightedElement = containerRef.current.querySelector(\n        '[data-highlighted=\"true\"]'\n      ) as HTMLElement\n\n      if (highlightedElement) {\n        highlightedElement.click()\n      }\n\n      addRecentColor({ type, label, value })\n      onColorChanged?.({ type, label, value })\n    },\n    [addRecentColor, onColorChanged]\n  )\n\n  const { selectedIndex } = useMenuNavigation({\n    containerRef,\n    items: menuItems,\n    onSelect: (item) => {\n      if (item) {\n        handleColorSelected({\n          type: item.type,\n          label: item.label,\n          value: item.value,\n        })\n      }\n    },\n    orientation: \"both\",\n    autoSelectFirstItem: false,\n  })\n\n  return (\n    <Card ref={containerRef} tabIndex={0} role=\"menu\">\n      <CardBody>\n        {isInitialized && (\n          <RecentColorsSection\n            recentColors={recentColors}\n            onColorSelected={handleColorSelected}\n            selectedIndex={selectedIndex}\n          />\n        )}\n\n        <CardItemGroup>\n          <CardGroupLabel>Text color</CardGroupLabel>\n          <ColorGroup\n            type=\"text\"\n            colors={textColorGroups}\n            onColorSelected={handleColorSelected}\n            selectedIndex={selectedIndex}\n            startIndexOffset={textColorStartIndex}\n          />\n        </CardItemGroup>\n\n        <CardItemGroup>\n          <CardGroupLabel>Highlight color</CardGroupLabel>\n          <ColorGroup\n            type=\"highlight\"\n            colors={highlightColorGroups}\n            onColorSelected={handleColorSelected}\n            selectedIndex={selectedIndex}\n            startIndexOffset={highlightColorStartIndex}\n          />\n        </CardItemGroup>\n      </CardBody>\n    </Card>\n  )\n}\n\nexport interface ColorTextPopoverProps\n  extends Omit<ButtonProps, \"type\">,\n    UseColorTextPopoverConfig {}\n\n/**\n * Color text popover component for Tiptap editors.\n *\n * For custom popover implementations, use the `useColorTextPopover` hook instead.\n */\nexport const ColorTextPopover = React.forwardRef<\n  HTMLButtonElement,\n  ColorTextPopoverProps\n>(\n  (\n    {\n      editor: providedEditor,\n      hideWhenUnavailable = false,\n      onColorChanged,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const [isOpen, setIsOpen] = React.useState(false)\n    const {\n      isVisible,\n      canToggle,\n      activeTextStyle,\n      activeHighlight,\n      handleColorChanged,\n      label,\n      Icon,\n    } = useColorTextPopover({\n      editor,\n      hideWhenUnavailable,\n      onColorChanged,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        setIsOpen(!isOpen)\n      },\n      [onClick, isOpen, setIsOpen]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Popover open={isOpen} onOpenChange={setIsOpen}>\n        <PopoverTrigger asChild>\n          <Button\n            type=\"button\"\n            data-style=\"ghost\"\n            data-appearance=\"default\"\n            role=\"button\"\n            aria-label={label}\n            tooltip={label}\n            disabled={!canToggle}\n            data-disabled={!canToggle}\n            onClick={handleClick}\n            {...buttonProps}\n            ref={ref}\n          >\n            {children ?? (\n              <>\n                <span\n                  className=\"tiptap-button-color-text-popover\"\n                  style={\n                    activeHighlight.color\n                      ? ({\n                          \"--active-highlight-color\": activeHighlight.color,\n                        } as React.CSSProperties)\n                      : ({} as React.CSSProperties)\n                  }\n                >\n                  <Icon\n                    className=\"tiptap-button-icon\"\n                    style={{\n                      color: activeTextStyle.color || undefined,\n                    }}\n                  />\n                </span>\n                <ChevronDownIcon className=\"tiptap-button-dropdown-small\" />\n              </>\n            )}\n          </Button>\n        </PopoverTrigger>\n\n        <PopoverContent\n          aria-label=\"Text color options\"\n          side=\"bottom\"\n          align=\"start\"\n        >\n          <TextStyleColorPanel onColorChanged={handleColorChanged} />\n        </PopoverContent>\n      </Popover>\n    )\n  }\n)\n\nColorTextPopover.displayName = \"ColorTextPopover\"\n\nexport default ColorTextPopover\n","import * as React from \"react\"\nimport type { Editor } from \"@tiptap/react\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Icons ---\nimport { TextColorSmallIcon } from \"@/components/tiptap-icons/text-color-small-icon\"\n\n// --- Lib ---\nimport { isMarkInSchema } from \"@/lib/tiptap-utils\"\nimport { getActiveMarkAttrs } from \"@/lib/tiptap-advanced-utils\"\n\n// --- Tiptap UI ---\nimport { canColorText } from \"@/components/tiptap-ui/color-text-button\"\nimport { canColorHighlight } from \"@/components/tiptap-ui/color-highlight-button\"\n\nexport type ColorType = \"text\" | \"highlight\"\n\nexport interface ColorItem {\n  value: string\n  label: string\n}\n\nexport interface RecentColor {\n  type: ColorType\n  label: string\n  value: string\n}\n\n/**\n * Configuration for the color text popover functionality\n */\nexport interface UseColorTextPopoverConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether the popover should hide when color text is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a color is applied.\n   */\n  onColorChanged?: ({\n    type,\n    label,\n    value,\n  }: {\n    type: ColorType\n    label: string\n    value: string\n  }) => void\n}\n\n/**\n * Get a color object by its value\n */\nexport function getColorByValue(\n  value: string,\n  colorArray: ColorItem[]\n): ColorItem {\n  return (\n    colorArray.find((color) => color.value === value) ?? {\n      value,\n      label: value,\n    }\n  )\n}\n\n/**\n * Checks if color text popover should be shown\n */\nexport function shouldShowColorTextPopover(params: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = params\n\n  if (!editor || !editor.isEditable) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canColorText(editor) || canColorHighlight(editor)\n  }\n\n  return true\n}\n\n/**\n * Hook to manage recently used colors\n */\nexport function useRecentColors(maxColors: number = 3) {\n  const [recentColors, setRecentColors] = React.useState<RecentColor[]>([])\n  const [isInitialized, setIsInitialized] = React.useState(false)\n\n  React.useEffect(() => {\n    try {\n      const storedColors = localStorage.getItem(\"tiptapRecentlyUsedColors\")\n      if (storedColors) {\n        const colors = JSON.parse(storedColors) as RecentColor[]\n        setRecentColors(colors.slice(0, maxColors))\n      }\n    } catch (e) {\n      console.error(\"Failed to load stored colors:\", e)\n    } finally {\n      setIsInitialized(true)\n    }\n  }, [maxColors])\n\n  const addRecentColor = React.useCallback(\n    ({\n      type,\n      label,\n      value,\n    }: {\n      type: ColorType\n      label: string\n      value: string\n    }) => {\n      setRecentColors((prevColors) => {\n        const filtered = prevColors.filter(\n          (c) => !(c.type === type && c.value === value)\n        )\n        const updated = [{ type, label, value }, ...filtered].slice(\n          0,\n          maxColors\n        )\n\n        try {\n          localStorage.setItem(\n            \"tiptapRecentlyUsedColors\",\n            JSON.stringify(updated)\n          )\n        } catch (e) {\n          console.error(\"Failed to store colors:\", e)\n        }\n\n        return updated\n      })\n    },\n    [maxColors]\n  )\n\n  return { recentColors, addRecentColor, isInitialized }\n}\n\n/**\n * Custom hook that provides color text popover functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage - no params needed\n * function MySimpleColorTextPopover() {\n *   const { isVisible, handleColorChanged } = useColorTextPopover()\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <Popover>\n *       <PopoverTrigger asChild>\n *         <button>Color Text</button>\n *       </PopoverTrigger>\n *       <PopoverContent>\n *         <TextStyleColorPanel onColorChanged={handleColorChanged} />\n *       </PopoverContent>\n *     </Popover>\n *   )\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedColorTextPopover() {\n *   const {\n *     isVisible,\n *     activeTextStyle,\n *     activeHighlight,\n *     handleColorChanged,\n *     label,\n *     Icon,\n *   } = useColorTextPopover({\n *     editor: myEditor,\n *     hideWhenUnavailable: true,\n *     onColorChanged: ({ type, label, value }) => console.log('Color changed!', { type, label, value })\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <Popover>\n *       <PopoverTrigger asChild>\n *         <Button\n *           disabled={isDisabled}\n *           aria-label={label}\n *         >\n *           <Icon style={{ color: activeTextStyle.color }} />\n *         </Button>\n *       </PopoverTrigger>\n *       <PopoverContent>\n *         <TextStyleColorPanel onColorChanged={handleColorChanged} />\n *       </PopoverContent>\n *     </Popover>\n *   )\n * }\n * ```\n */\nexport function useColorTextPopover(config?: UseColorTextPopoverConfig) {\n  const {\n    editor: providedEditor,\n    hideWhenUnavailable = false,\n    onColorChanged,\n  } = config || {}\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const [isVisible, setIsVisible] = React.useState(true)\n\n  const textStyleInSchema = isMarkInSchema(\"textStyle\", editor)\n  const highlightInSchema = isMarkInSchema(\"highlight\", editor)\n\n  const activeTextStyle = getActiveMarkAttrs(editor, \"textStyle\") || {}\n  const activeHighlight = getActiveMarkAttrs(editor, \"highlight\") || {}\n\n  const canToggle = canColorText(editor) || canColorHighlight(editor)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const updateVisibility = () => {\n      setIsVisible(\n        shouldShowColorTextPopover({\n          editor,\n          hideWhenUnavailable,\n        })\n      )\n    }\n\n    updateVisibility()\n\n    editor.on(\"selectionUpdate\", updateVisibility)\n\n    return () => {\n      editor.off(\"selectionUpdate\", updateVisibility)\n    }\n  }, [editor, hideWhenUnavailable, highlightInSchema, textStyleInSchema])\n\n  const handleColorChanged = React.useCallback(\n    ({\n      type,\n      label,\n      value,\n    }: {\n      type: ColorType\n      label: string\n      value: string\n    }) => {\n      onColorChanged?.({ type, label, value })\n    },\n    [onColorChanged]\n  )\n\n  return {\n    isVisible,\n    canToggle,\n    activeTextStyle,\n    activeHighlight,\n    handleColorChanged,\n    label: \"Text color\",\n    Icon: TextColorSmallIcon,\n  }\n}\n","// src/node-range.ts\nimport { Extension } from \"@tiptap/core\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\n\n// src/helpers/getNodeRangeDecorations.ts\nimport { Decoration, DecorationSet } from \"@tiptap/pm/view\";\nfunction getNodeRangeDecorations(ranges) {\n  if (!ranges.length) {\n    return DecorationSet.empty;\n  }\n  const decorations = [];\n  const doc = ranges[0].$from.node(0);\n  ranges.forEach((range) => {\n    const pos = range.$from.pos;\n    const node = range.$from.nodeAfter;\n    if (!node) {\n      return;\n    }\n    decorations.push(\n      Decoration.node(pos, pos + node.nodeSize, {\n        class: \"ProseMirror-selectednoderange\"\n      })\n    );\n  });\n  return DecorationSet.create(doc, decorations);\n}\n\n// src/helpers/getSelectionRanges.ts\nimport { NodeRange } from \"@tiptap/pm/model\";\nimport { SelectionRange } from \"@tiptap/pm/state\";\nfunction getSelectionRanges($from, $to, depth) {\n  const ranges = [];\n  const doc = $from.node(0);\n  if (typeof depth === \"number\" && depth >= 0) {\n  } else if ($from.sameParent($to)) {\n    depth = Math.max(0, $from.sharedDepth($to.pos) - 1);\n  } else {\n    depth = $from.sharedDepth($to.pos);\n  }\n  const nodeRange = new NodeRange($from, $to, depth);\n  const offset = nodeRange.depth === 0 ? 0 : doc.resolve(nodeRange.start).posAtIndex(0);\n  nodeRange.parent.forEach((node, pos) => {\n    const from = offset + pos;\n    const to = from + node.nodeSize;\n    if (from < nodeRange.start || from >= nodeRange.end) {\n      return;\n    }\n    const selectionRange = new SelectionRange(doc.resolve(from), doc.resolve(to));\n    ranges.push(selectionRange);\n  });\n  return ranges;\n}\n\n// src/helpers/NodeRangeSelection.ts\nimport { Selection } from \"@tiptap/pm/state\";\n\n// src/helpers/NodeRangeBookmark.ts\nvar NodeRangeBookmark = class _NodeRangeBookmark {\n  constructor(anchor, head) {\n    this.anchor = anchor;\n    this.head = head;\n  }\n  map(mapping) {\n    return new _NodeRangeBookmark(mapping.map(this.anchor), mapping.map(this.head));\n  }\n  resolve(doc) {\n    const $anchor = doc.resolve(this.anchor);\n    const $head = doc.resolve(this.head);\n    return new NodeRangeSelection($anchor, $head);\n  }\n};\n\n// src/helpers/NodeRangeSelection.ts\nvar NodeRangeSelection = class _NodeRangeSelection extends Selection {\n  constructor($anchor, $head, depth, bias = 1) {\n    const { doc } = $anchor;\n    const isCursor = $anchor === $head;\n    const isCursorAtEnd = $anchor.pos === doc.content.size && $head.pos === doc.content.size;\n    const $correctedHead = isCursor && !isCursorAtEnd ? doc.resolve($head.pos + (bias > 0 ? 1 : -1)) : $head;\n    const $correctedAnchor = isCursor && isCursorAtEnd ? doc.resolve($anchor.pos - (bias > 0 ? 1 : -1)) : $anchor;\n    const ranges = getSelectionRanges($correctedAnchor.min($correctedHead), $correctedAnchor.max($correctedHead), depth);\n    const $rangeFrom = $correctedHead.pos >= $anchor.pos ? ranges[0].$from : ranges[ranges.length - 1].$to;\n    const $rangeTo = $correctedHead.pos >= $anchor.pos ? ranges[ranges.length - 1].$to : ranges[0].$from;\n    super($rangeFrom, $rangeTo, ranges);\n    this.depth = depth;\n  }\n  // we can safely ignore this TypeScript error: https://github.com/Microsoft/TypeScript/issues/338\n  // @ts-ignore\n  get $to() {\n    return this.ranges[this.ranges.length - 1].$to;\n  }\n  eq(other) {\n    return other instanceof _NodeRangeSelection && other.$from.pos === this.$from.pos && other.$to.pos === this.$to.pos;\n  }\n  map(doc, mapping) {\n    const $anchor = doc.resolve(mapping.map(this.anchor));\n    const $head = doc.resolve(mapping.map(this.head));\n    return new _NodeRangeSelection($anchor, $head);\n  }\n  toJSON() {\n    return {\n      type: \"nodeRange\",\n      anchor: this.anchor,\n      head: this.head\n    };\n  }\n  get isForwards() {\n    return this.head >= this.anchor;\n  }\n  get isBackwards() {\n    return !this.isForwards;\n  }\n  extendBackwards() {\n    const { doc } = this.$from;\n    if (this.isForwards && this.ranges.length > 1) {\n      const ranges = this.ranges.slice(0, -1);\n      const $from2 = ranges[0].$from;\n      const $to = ranges[ranges.length - 1].$to;\n      return new _NodeRangeSelection($from2, $to, this.depth);\n    }\n    const firstRange = this.ranges[0];\n    const $from = doc.resolve(Math.max(0, firstRange.$from.pos - 1));\n    return new _NodeRangeSelection(this.$anchor, $from, this.depth);\n  }\n  extendForwards() {\n    const { doc } = this.$from;\n    if (this.isBackwards && this.ranges.length > 1) {\n      const ranges = this.ranges.slice(1);\n      const $from = ranges[0].$from;\n      const $to2 = ranges[ranges.length - 1].$to;\n      return new _NodeRangeSelection($to2, $from, this.depth);\n    }\n    const lastRange = this.ranges[this.ranges.length - 1];\n    const $to = doc.resolve(Math.min(doc.content.size, lastRange.$to.pos + 1));\n    return new _NodeRangeSelection(this.$anchor, $to, this.depth);\n  }\n  static fromJSON(doc, json) {\n    return new _NodeRangeSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n  }\n  static create(doc, anchor, head, depth, bias = 1) {\n    return new this(doc.resolve(anchor), doc.resolve(head), depth, bias);\n  }\n  getBookmark() {\n    return new NodeRangeBookmark(this.anchor, this.head);\n  }\n};\nNodeRangeSelection.prototype.visible = false;\n\n// src/helpers/isNodeRangeSelection.ts\nfunction isNodeRangeSelection(value) {\n  return value instanceof NodeRangeSelection;\n}\n\n// src/node-range.ts\nvar NodeRange2 = Extension.create({\n  name: \"nodeRange\",\n  addOptions() {\n    return {\n      depth: void 0,\n      key: \"Mod\"\n    };\n  },\n  addKeyboardShortcuts() {\n    return {\n      // extend NodeRangeSelection upwards\n      \"Shift-ArrowUp\": ({ editor }) => {\n        const { depth } = this.options;\n        const { view, state } = editor;\n        const { doc, selection, tr } = state;\n        const { anchor, head } = selection;\n        if (!isNodeRangeSelection(selection)) {\n          const nodeRangeSelection2 = NodeRangeSelection.create(doc, anchor, head, depth, -1);\n          tr.setSelection(nodeRangeSelection2);\n          view.dispatch(tr);\n          return true;\n        }\n        const nodeRangeSelection = selection.extendBackwards();\n        tr.setSelection(nodeRangeSelection);\n        view.dispatch(tr);\n        return true;\n      },\n      // extend NodeRangeSelection downwards\n      \"Shift-ArrowDown\": ({ editor }) => {\n        const { depth } = this.options;\n        const { view, state } = editor;\n        const { doc, selection, tr } = state;\n        const { anchor, head } = selection;\n        if (!isNodeRangeSelection(selection)) {\n          const nodeRangeSelection2 = NodeRangeSelection.create(doc, anchor, head, depth);\n          tr.setSelection(nodeRangeSelection2);\n          view.dispatch(tr);\n          return true;\n        }\n        const nodeRangeSelection = selection.extendForwards();\n        tr.setSelection(nodeRangeSelection);\n        view.dispatch(tr);\n        return true;\n      },\n      // add `NodeRangeSelection` to all nodes\n      \"Mod-a\": ({ editor }) => {\n        const { depth } = this.options;\n        const { view, state } = editor;\n        const { doc, tr } = state;\n        const nodeRangeSelection = NodeRangeSelection.create(doc, 0, doc.content.size, depth);\n        tr.setSelection(nodeRangeSelection);\n        view.dispatch(tr);\n        return true;\n      }\n    };\n  },\n  onSelectionUpdate() {\n    const { selection } = this.editor.state;\n    if (isNodeRangeSelection(selection)) {\n      this.editor.view.dom.classList.add(\"ProseMirror-noderangeselection\");\n    }\n  },\n  addProseMirrorPlugins() {\n    let hideTextSelection = false;\n    let activeMouseSelection = false;\n    return [\n      new Plugin({\n        key: new PluginKey(\"nodeRange\"),\n        props: {\n          attributes: () => {\n            if (hideTextSelection) {\n              return {\n                class: \"ProseMirror-noderangeselection\"\n              };\n            }\n            return { class: \"\" };\n          },\n          handleDOMEvents: {\n            mousedown: (view, event) => {\n              const { key } = this.options;\n              const isMac = /Mac/.test(navigator.platform);\n              const isShift = !!event.shiftKey;\n              const isControl = !!event.ctrlKey;\n              const isAlt = !!event.altKey;\n              const isMeta = !!event.metaKey;\n              const isMod = isMac ? isMeta : isControl;\n              if (key === null || key === void 0 || key === \"Shift\" && isShift || key === \"Control\" && isControl || key === \"Alt\" && isAlt || key === \"Meta\" && isMeta || key === \"Mod\" && isMod) {\n                activeMouseSelection = true;\n              }\n              if (!activeMouseSelection) {\n                return false;\n              }\n              document.addEventListener(\n                \"mouseup\",\n                () => {\n                  activeMouseSelection = false;\n                  const { state } = view;\n                  const { doc, selection, tr } = state;\n                  const { $anchor, $head } = selection;\n                  if ($anchor.sameParent($head)) {\n                    return;\n                  }\n                  const nodeRangeSelection = NodeRangeSelection.create(doc, $anchor.pos, $head.pos, this.options.depth);\n                  tr.setSelection(nodeRangeSelection);\n                  view.dispatch(tr);\n                },\n                { once: true }\n              );\n              return false;\n            }\n          },\n          // when selecting some text we want to render some decorations\n          // to preview a `NodeRangeSelection`\n          decorations: (state) => {\n            const { selection } = state;\n            const isNodeRange = isNodeRangeSelection(selection);\n            hideTextSelection = false;\n            if (!activeMouseSelection) {\n              if (!isNodeRange) {\n                return null;\n              }\n              hideTextSelection = true;\n              return getNodeRangeDecorations(selection.ranges);\n            }\n            const { $from, $to } = selection;\n            if (!isNodeRange && $from.sameParent($to)) {\n              return null;\n            }\n            const nodeRanges = getSelectionRanges($from, $to, this.options.depth);\n            if (!nodeRanges.length) {\n              return null;\n            }\n            hideTextSelection = true;\n            return getNodeRangeDecorations(nodeRanges);\n          }\n        }\n      })\n    ];\n  }\n});\n\n// src/index.ts\nvar index_default = NodeRange2;\nexport {\n  NodeRange2 as NodeRange,\n  NodeRangeSelection,\n  index_default as default,\n  getNodeRangeDecorations,\n  getSelectionRanges,\n  isNodeRangeSelection\n};\n//# sourceMappingURL=index.js.map","// src/drag-handle.ts\nimport { Extension } from \"@tiptap/core\";\n\n// src/drag-handle-plugin.ts\nimport { computePosition } from \"@floating-ui/dom\";\nimport { isChangeOrigin } from \"@tiptap/extension-collaboration\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport {\n  absolutePositionToRelativePosition,\n  relativePositionToAbsolutePosition,\n  ySyncPluginKey\n} from \"@tiptap/y-tiptap\";\n\n// src/helpers/dragHandler.ts\nimport { getSelectionRanges, NodeRangeSelection } from \"@tiptap/extension-node-range\";\n\n// src/helpers/cloneElement.ts\nfunction getCSSText(element) {\n  let value = \"\";\n  const style = getComputedStyle(element);\n  for (let i = 0; i < style.length; i += 1) {\n    value += `${style[i]}:${style.getPropertyValue(style[i])};`;\n  }\n  return value;\n}\nfunction cloneElement(node) {\n  const clonedNode = node.cloneNode(true);\n  const sourceElements = [node, ...Array.from(node.getElementsByTagName(\"*\"))];\n  const targetElements = [clonedNode, ...Array.from(clonedNode.getElementsByTagName(\"*\"))];\n  sourceElements.forEach((sourceElement, index) => {\n    targetElements[index].style.cssText = getCSSText(sourceElement);\n  });\n  return clonedNode;\n}\n\n// src/helpers/findNextElementFromCursor.ts\nvar findElementNextToCoords = (options) => {\n  const { x, y, direction = \"right\", editor, bandHeight = 5 } = options;\n  const rect = {\n    top: y - bandHeight,\n    bottom: y + bandHeight,\n    left: direction === \"right\" ? x : 0,\n    right: direction === \"right\" ? window.innerWidth - x : x\n  };\n  const root = editor.view.dom;\n  const candidates = [...root.querySelectorAll(\"*\")].filter((candidate) => {\n    return editor.view.posAtDOM(candidate, 0) >= 0;\n  }).filter((candidate) => {\n    const candidateRect = candidate.getBoundingClientRect();\n    return !(candidateRect.bottom < rect.top || candidateRect.top > rect.bottom || candidateRect.right < rect.left || candidateRect.left > rect.right);\n  });\n  if (!candidates || candidates.length === 0) {\n    return { resultElement: null, resultNode: null, pos: null };\n  }\n  const finalCandidate = candidates[0];\n  const candidatePos = editor.view.posAtDOM(finalCandidate, 0);\n  if (candidatePos === -1) {\n    return { resultElement: finalCandidate, resultNode: null, pos: null };\n  }\n  const candidateNode = editor.state.doc.nodeAt(candidatePos - 1);\n  return { resultElement: finalCandidate, resultNode: candidateNode, pos: candidatePos };\n};\n\n// src/helpers/getComputedStyle.ts\nfunction getComputedStyle2(node, property) {\n  const style = window.getComputedStyle(node);\n  return style[property];\n}\n\n// src/helpers/minMax.ts\nfunction minMax(value = 0, min = 0, max = 0) {\n  return Math.min(Math.max(value, min), max);\n}\n\n// src/helpers/getInnerCoords.ts\nfunction getInnerCoords(view, x, y) {\n  const paddingLeft = parseInt(getComputedStyle2(view.dom, \"paddingLeft\"), 10);\n  const paddingRight = parseInt(getComputedStyle2(view.dom, \"paddingRight\"), 10);\n  const borderLeft = parseInt(getComputedStyle2(view.dom, \"borderLeftWidth\"), 10);\n  const borderRight = parseInt(getComputedStyle2(view.dom, \"borderLeftWidth\"), 10);\n  const bounds = view.dom.getBoundingClientRect();\n  const coords = {\n    left: minMax(x, bounds.left + paddingLeft + borderLeft, bounds.right - paddingRight - borderRight),\n    top: y\n  };\n  return coords;\n}\n\n// src/helpers/removeNode.ts\nfunction removeNode(node) {\n  var _a;\n  (_a = node.parentNode) == null ? void 0 : _a.removeChild(node);\n}\n\n// src/helpers/dragHandler.ts\nfunction getDragHandleRanges(event, editor) {\n  const { doc } = editor.view.state;\n  const result = findElementNextToCoords({\n    editor,\n    x: event.clientX,\n    y: event.clientY,\n    direction: \"right\"\n  });\n  if (!result.resultNode || result.pos === null) {\n    return [];\n  }\n  const x = event.clientX;\n  const coords = getInnerCoords(editor.view, x, event.clientY);\n  const posAtCoords = editor.view.posAtCoords(coords);\n  if (!posAtCoords) {\n    return [];\n  }\n  const { pos } = posAtCoords;\n  const nodeAt = doc.resolve(pos).parent;\n  if (!nodeAt) {\n    return [];\n  }\n  const $from = doc.resolve(result.pos);\n  const $to = doc.resolve(result.pos + 1);\n  return getSelectionRanges($from, $to, 0);\n}\nfunction dragHandler(event, editor) {\n  const { view } = editor;\n  if (!event.dataTransfer) {\n    return;\n  }\n  const { empty, $from, $to } = view.state.selection;\n  const dragHandleRanges = getDragHandleRanges(event, editor);\n  const selectionRanges = getSelectionRanges($from, $to, 0);\n  const isDragHandleWithinSelection = selectionRanges.some((range) => {\n    return dragHandleRanges.find((dragHandleRange) => {\n      return dragHandleRange.$from === range.$from && dragHandleRange.$to === range.$to;\n    });\n  });\n  const ranges = empty || !isDragHandleWithinSelection ? dragHandleRanges : selectionRanges;\n  if (!ranges.length) {\n    return;\n  }\n  const { tr } = view.state;\n  const wrapper = document.createElement(\"div\");\n  const from = ranges[0].$from.pos;\n  const to = ranges[ranges.length - 1].$to.pos;\n  const selection = NodeRangeSelection.create(view.state.doc, from, to);\n  const slice = selection.content();\n  ranges.forEach((range) => {\n    const element = view.nodeDOM(range.$from.pos);\n    const clonedElement = cloneElement(element);\n    wrapper.append(clonedElement);\n  });\n  wrapper.style.position = \"absolute\";\n  wrapper.style.top = \"-10000px\";\n  document.body.append(wrapper);\n  event.dataTransfer.clearData();\n  event.dataTransfer.setDragImage(wrapper, 0, 0);\n  view.dragging = { slice, move: true };\n  tr.setSelection(selection);\n  view.dispatch(tr);\n  document.addEventListener(\"drop\", () => removeNode(wrapper), { once: true });\n}\n\n// src/helpers/getOuterNode.ts\nvar getOuterNodePos = (doc, pos) => {\n  const resolvedPos = doc.resolve(pos);\n  const { depth } = resolvedPos;\n  if (depth === 0) {\n    return pos;\n  }\n  const a = resolvedPos.pos - resolvedPos.parentOffset;\n  return a - 1;\n};\nvar getOuterNode = (doc, pos) => {\n  const node = doc.nodeAt(pos);\n  const resolvedPos = doc.resolve(pos);\n  let { depth } = resolvedPos;\n  let parent = node;\n  while (depth > 0) {\n    const currentNode = resolvedPos.node(depth);\n    depth -= 1;\n    if (depth === 0) {\n      parent = currentNode;\n    }\n  }\n  return parent;\n};\n\n// src/drag-handle-plugin.ts\nvar getRelativePos = (state, absolutePos) => {\n  const ystate = ySyncPluginKey.getState(state);\n  if (!ystate) {\n    return null;\n  }\n  return absolutePositionToRelativePosition(absolutePos, ystate.type, ystate.binding.mapping);\n};\nvar getAbsolutePos = (state, relativePos) => {\n  const ystate = ySyncPluginKey.getState(state);\n  if (!ystate) {\n    return -1;\n  }\n  return relativePositionToAbsolutePosition(ystate.doc, ystate.type, relativePos, ystate.binding.mapping) || 0;\n};\nvar getOuterDomNode = (view, domNode) => {\n  let tmpDomNode = domNode;\n  while (tmpDomNode == null ? void 0 : tmpDomNode.parentNode) {\n    if (tmpDomNode.parentNode === view.dom) {\n      break;\n    }\n    tmpDomNode = tmpDomNode.parentNode;\n  }\n  return tmpDomNode;\n};\nvar dragHandlePluginDefaultKey = new PluginKey(\"dragHandle\");\nvar DragHandlePlugin = ({\n  pluginKey = dragHandlePluginDefaultKey,\n  element,\n  editor,\n  computePositionConfig,\n  onNodeChange,\n  onElementDragStart,\n  onElementDragEnd\n}) => {\n  const wrapper = document.createElement(\"div\");\n  let locked = false;\n  let currentNode = null;\n  let currentNodePos = -1;\n  let currentNodeRelPos;\n  let rafId = null;\n  let pendingMouseCoords = null;\n  function hideHandle() {\n    if (!element) {\n      return;\n    }\n    element.style.visibility = \"hidden\";\n    element.style.pointerEvents = \"none\";\n  }\n  function showHandle() {\n    if (!element) {\n      return;\n    }\n    if (!editor.isEditable) {\n      hideHandle();\n      return;\n    }\n    element.style.visibility = \"\";\n    element.style.pointerEvents = \"auto\";\n  }\n  function repositionDragHandle(dom) {\n    const virtualElement = {\n      getBoundingClientRect: () => dom.getBoundingClientRect()\n    };\n    computePosition(virtualElement, element, computePositionConfig).then((val) => {\n      Object.assign(element.style, {\n        position: val.strategy,\n        left: `${val.x}px`,\n        top: `${val.y}px`\n      });\n    });\n  }\n  function onDragStart(e) {\n    onElementDragStart == null ? void 0 : onElementDragStart(e);\n    dragHandler(e, editor);\n    setTimeout(() => {\n      if (element) {\n        element.style.pointerEvents = \"none\";\n      }\n    }, 0);\n  }\n  function onDragEnd(e) {\n    onElementDragEnd == null ? void 0 : onElementDragEnd(e);\n    hideHandle();\n    if (element) {\n      element.style.pointerEvents = \"auto\";\n    }\n  }\n  element.addEventListener(\"dragstart\", onDragStart);\n  element.addEventListener(\"dragend\", onDragEnd);\n  wrapper.appendChild(element);\n  return {\n    unbind() {\n      element.removeEventListener(\"dragstart\", onDragStart);\n      element.removeEventListener(\"dragend\", onDragEnd);\n      if (rafId) {\n        cancelAnimationFrame(rafId);\n        rafId = null;\n        pendingMouseCoords = null;\n      }\n    },\n    plugin: new Plugin({\n      key: typeof pluginKey === \"string\" ? new PluginKey(pluginKey) : pluginKey,\n      state: {\n        init() {\n          return { locked: false };\n        },\n        apply(tr, value, _oldState, state) {\n          const isLocked = tr.getMeta(\"lockDragHandle\");\n          const hideDragHandle = tr.getMeta(\"hideDragHandle\");\n          if (isLocked !== void 0) {\n            locked = isLocked;\n          }\n          if (hideDragHandle) {\n            hideHandle();\n            locked = false;\n            currentNode = null;\n            currentNodePos = -1;\n            onNodeChange == null ? void 0 : onNodeChange({ editor, node: null, pos: -1 });\n            return value;\n          }\n          if (tr.docChanged && currentNodePos !== -1 && element) {\n            if (isChangeOrigin(tr)) {\n              const newPos = getAbsolutePos(state, currentNodeRelPos);\n              if (newPos !== currentNodePos) {\n                currentNodePos = newPos;\n              }\n            } else {\n              const newPos = tr.mapping.map(currentNodePos);\n              if (newPos !== currentNodePos) {\n                currentNodePos = newPos;\n                currentNodeRelPos = getRelativePos(state, currentNodePos);\n              }\n            }\n          }\n          return value;\n        }\n      },\n      view: (view) => {\n        var _a;\n        element.draggable = true;\n        element.style.pointerEvents = \"auto\";\n        (_a = editor.view.dom.parentElement) == null ? void 0 : _a.appendChild(wrapper);\n        wrapper.style.pointerEvents = \"none\";\n        wrapper.style.position = \"absolute\";\n        wrapper.style.top = \"0\";\n        wrapper.style.left = \"0\";\n        return {\n          update(_, oldState) {\n            if (!element) {\n              return;\n            }\n            if (!editor.isEditable) {\n              hideHandle();\n              return;\n            }\n            if (locked) {\n              element.draggable = false;\n            } else {\n              element.draggable = true;\n            }\n            if (view.state.doc.eq(oldState.doc) || currentNodePos === -1) {\n              return;\n            }\n            let domNode = view.nodeDOM(currentNodePos);\n            domNode = getOuterDomNode(view, domNode);\n            if (domNode === view.dom) {\n              return;\n            }\n            if ((domNode == null ? void 0 : domNode.nodeType) !== 1) {\n              return;\n            }\n            const domNodePos = view.posAtDOM(domNode, 0);\n            const outerNode = getOuterNode(editor.state.doc, domNodePos);\n            const outerNodePos = getOuterNodePos(editor.state.doc, domNodePos);\n            currentNode = outerNode;\n            currentNodePos = outerNodePos;\n            currentNodeRelPos = getRelativePos(view.state, currentNodePos);\n            onNodeChange == null ? void 0 : onNodeChange({ editor, node: currentNode, pos: currentNodePos });\n            repositionDragHandle(domNode);\n          },\n          // TODO: Kills even on hot reload\n          destroy() {\n            if (rafId) {\n              cancelAnimationFrame(rafId);\n              rafId = null;\n              pendingMouseCoords = null;\n            }\n            if (element) {\n              removeNode(wrapper);\n            }\n          }\n        };\n      },\n      props: {\n        handleDOMEvents: {\n          keydown(view) {\n            if (!element || locked) {\n              return false;\n            }\n            if (view.hasFocus()) {\n              hideHandle();\n              currentNode = null;\n              currentNodePos = -1;\n              onNodeChange == null ? void 0 : onNodeChange({ editor, node: null, pos: -1 });\n              return false;\n            }\n            return false;\n          },\n          mouseleave(_view, e) {\n            if (locked) {\n              return false;\n            }\n            if (e.target && !wrapper.contains(e.relatedTarget)) {\n              hideHandle();\n              currentNode = null;\n              currentNodePos = -1;\n              onNodeChange == null ? void 0 : onNodeChange({ editor, node: null, pos: -1 });\n            }\n            return false;\n          },\n          mousemove(view, e) {\n            if (!element || locked) {\n              return false;\n            }\n            pendingMouseCoords = { x: e.clientX, y: e.clientY };\n            if (rafId) {\n              return false;\n            }\n            rafId = requestAnimationFrame(() => {\n              rafId = null;\n              if (!pendingMouseCoords) {\n                return;\n              }\n              const { x, y } = pendingMouseCoords;\n              pendingMouseCoords = null;\n              const nodeData = findElementNextToCoords({\n                x,\n                y,\n                direction: \"right\",\n                editor\n              });\n              if (!nodeData.resultElement) {\n                return;\n              }\n              let domNode = nodeData.resultElement;\n              domNode = getOuterDomNode(view, domNode);\n              if (domNode === view.dom) {\n                return;\n              }\n              if ((domNode == null ? void 0 : domNode.nodeType) !== 1) {\n                return;\n              }\n              const domNodePos = view.posAtDOM(domNode, 0);\n              const outerNode = getOuterNode(editor.state.doc, domNodePos);\n              if (outerNode !== currentNode) {\n                const outerNodePos = getOuterNodePos(editor.state.doc, domNodePos);\n                currentNode = outerNode;\n                currentNodePos = outerNodePos;\n                currentNodeRelPos = getRelativePos(view.state, currentNodePos);\n                onNodeChange == null ? void 0 : onNodeChange({ editor, node: currentNode, pos: currentNodePos });\n                repositionDragHandle(domNode);\n                showHandle();\n              }\n            });\n            return false;\n          }\n        }\n      }\n    })\n  };\n};\n\n// src/drag-handle.ts\nvar defaultComputePositionConfig = {\n  placement: \"left-start\",\n  strategy: \"absolute\"\n};\nvar DragHandle = Extension.create({\n  name: \"dragHandle\",\n  addOptions() {\n    return {\n      render() {\n        const element = document.createElement(\"div\");\n        element.classList.add(\"drag-handle\");\n        return element;\n      },\n      computePositionConfig: {},\n      locked: false,\n      onNodeChange: () => {\n        return null;\n      }\n    };\n  },\n  addCommands() {\n    return {\n      lockDragHandle: () => ({ editor }) => {\n        this.options.locked = true;\n        return editor.commands.setMeta(\"lockDragHandle\", this.options.locked);\n      },\n      unlockDragHandle: () => ({ editor }) => {\n        this.options.locked = false;\n        return editor.commands.setMeta(\"lockDragHandle\", this.options.locked);\n      },\n      toggleDragHandle: () => ({ editor }) => {\n        this.options.locked = !this.options.locked;\n        return editor.commands.setMeta(\"lockDragHandle\", this.options.locked);\n      }\n    };\n  },\n  addProseMirrorPlugins() {\n    const element = this.options.render();\n    return [\n      DragHandlePlugin({\n        computePositionConfig: { ...defaultComputePositionConfig, ...this.options.computePositionConfig },\n        element,\n        editor: this.editor,\n        onNodeChange: this.options.onNodeChange\n      }).plugin\n    ];\n  }\n});\n\n// src/index.ts\nvar index_default = DragHandle;\nexport {\n  DragHandle,\n  DragHandlePlugin,\n  index_default as default,\n  defaultComputePositionConfig,\n  dragHandlePluginDefaultKey\n};\n//# sourceMappingURL=index.js.map","// src/DragHandle.tsx\nimport {\n  defaultComputePositionConfig,\n  DragHandlePlugin,\n  dragHandlePluginDefaultKey\n} from \"@tiptap/extension-drag-handle\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DragHandle = (props) => {\n  const {\n    className = \"drag-handle\",\n    children,\n    editor,\n    pluginKey = dragHandlePluginDefaultKey,\n    onNodeChange,\n    onElementDragStart,\n    onElementDragEnd,\n    computePositionConfig = defaultComputePositionConfig\n  } = props;\n  const [element, setElement] = useState(null);\n  const plugin = useRef(null);\n  useEffect(() => {\n    let initPlugin = null;\n    if (!element) {\n      return () => {\n        plugin.current = null;\n      };\n    }\n    if (editor.isDestroyed) {\n      return () => {\n        plugin.current = null;\n      };\n    }\n    if (!plugin.current) {\n      initPlugin = DragHandlePlugin({\n        editor,\n        element,\n        pluginKey,\n        computePositionConfig: {\n          ...defaultComputePositionConfig,\n          ...computePositionConfig\n        },\n        onElementDragStart,\n        onElementDragEnd,\n        onNodeChange\n      });\n      plugin.current = initPlugin.plugin;\n      editor.registerPlugin(plugin.current);\n    }\n    return () => {\n      editor.unregisterPlugin(pluginKey);\n      plugin.current = null;\n      if (initPlugin) {\n        initPlugin.unbind();\n        initPlugin = null;\n      }\n    };\n  }, [element, editor, onNodeChange, pluginKey, computePositionConfig, onElementDragStart, onElementDragEnd]);\n  return /* @__PURE__ */ jsx(\"div\", { className, style: { visibility: \"hidden\", position: \"absolute\" }, ref: setElement, children });\n};\n\n// src/index.ts\nvar index_default = DragHandle;\nexport {\n  DragHandle,\n  index_default as default\n};\n//# sourceMappingURL=index.js.map","import * as React from \"react\"\n\nexport const CornerDownLeftIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M21 4C21 3.44772 20.5523 3 20 3C19.4477 3 19 3.44772 19 4V11C19 11.7956 18.6839 12.5587 18.1213 13.1213C17.5587 13.6839 16.7956 14 16 14H6.41421L9.70711 10.7071C10.0976 10.3166 10.0976 9.68342 9.70711 9.29289C9.31658 8.90237 8.68342 8.90237 8.29289 9.29289L3.29289 14.2929C2.90237 14.6834 2.90237 15.3166 3.29289 15.7071L8.29289 20.7071C8.68342 21.0976 9.31658 21.0976 9.70711 20.7071C10.0976 20.3166 10.0976 19.6834 9.70711 19.2929L6.41421 16H16C17.3261 16 18.5979 15.4732 19.5355 14.5355C20.4732 13.5979 21 12.3261 21 11V4Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nCornerDownLeftIcon.displayName = \"CornerDownLeftIcon\"\n","import * as React from \"react\"\n\nexport const ExternalLinkIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M14 3C14 2.44772 14.4477 2 15 2H21C21.5523 2 22 2.44772 22 3V9C22 9.55228 21.5523 10 21 10C20.4477 10 20 9.55228 20 9V5.41421L10.7071 14.7071C10.3166 15.0976 9.68342 15.0976 9.29289 14.7071C8.90237 14.3166 8.90237 13.6834 9.29289 13.2929L18.5858 4H15C14.4477 4 14 3.55228 14 3Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M4.29289 7.29289C4.48043 7.10536 4.73478 7 5 7H11C11.5523 7 12 6.55228 12 6C12 5.44772 11.5523 5 11 5H5C4.20435 5 3.44129 5.31607 2.87868 5.87868C2.31607 6.44129 2 7.20435 2 8V19C2 19.7957 2.31607 20.5587 2.87868 21.1213C3.44129 21.6839 4.20435 22 5 22H16C16.7957 22 17.5587 21.6839 18.1213 21.1213C18.6839 20.5587 19 19.7957 19 19V13C19 12.4477 18.5523 12 18 12C17.4477 12 17 12.4477 17 13V19C17 19.2652 16.8946 19.5196 16.7071 19.7071C16.5196 19.8946 16.2652 20 16 20H5C4.73478 20 4.48043 19.8946 4.29289 19.7071C4.10536 19.5196 4 19.2652 4 19V8C4 7.73478 4.10536 7.48043 4.29289 7.29289Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nExternalLinkIcon.displayName = \"ExternalLinkIcon\"\n","import * as React from \"react\"\n\nexport const LinkIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M16.9958 1.06669C15.4226 1.05302 13.907 1.65779 12.7753 2.75074L12.765 2.76086L11.045 4.47086C10.6534 4.86024 10.6515 5.49341 11.0409 5.88507C11.4303 6.27673 12.0634 6.27858 12.4551 5.88919L14.1697 4.18456C14.9236 3.45893 15.9319 3.05752 16.9784 3.06662C18.0272 3.07573 19.0304 3.49641 19.772 4.23804C20.5137 4.97967 20.9344 5.98292 20.9435 7.03171C20.9526 8.07776 20.5515 9.08563 19.8265 9.83941L16.833 12.8329C16.4274 13.2386 15.9393 13.5524 15.4019 13.7529C14.8645 13.9533 14.2903 14.0359 13.7181 13.9949C13.146 13.9539 12.5894 13.7904 12.0861 13.5154C11.5827 13.2404 11.1444 12.8604 10.8008 12.401C10.47 11.9588 9.84333 11.8685 9.40108 12.1993C8.95883 12.5301 8.86849 13.1568 9.1993 13.599C9.71464 14.288 10.3721 14.858 11.1272 15.2705C11.8822 15.683 12.7171 15.9283 13.5753 15.9898C14.4334 16.0513 15.2948 15.9274 16.1009 15.6267C16.907 15.326 17.639 14.8555 18.2473 14.247L21.2472 11.2471L21.2593 11.2347C22.3523 10.1031 22.9571 8.58751 22.9434 7.01433C22.9297 5.44115 22.2987 3.93628 21.1863 2.82383C20.0738 1.71138 18.5689 1.08036 16.9958 1.06669Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M10.4247 8.0102C9.56657 7.94874 8.70522 8.07256 7.89911 8.37326C7.09305 8.67395 6.36096 9.14458 5.75272 9.753L2.75285 12.7529L2.74067 12.7653C1.64772 13.8969 1.04295 15.4125 1.05662 16.9857C1.07029 18.5589 1.70131 20.0637 2.81376 21.1762C3.9262 22.2886 5.43108 22.9196 7.00426 22.9333C8.57744 22.947 10.0931 22.3422 11.2247 21.2493L11.2371 21.2371L12.9471 19.5271C13.3376 19.1366 13.3376 18.5034 12.9471 18.1129C12.5565 17.7223 11.9234 17.7223 11.5328 18.1129L9.82932 19.8164C9.07555 20.5414 8.06768 20.9425 7.02164 20.9334C5.97285 20.9243 4.9696 20.5036 4.22797 19.762C3.48634 19.0203 3.06566 18.0171 3.05655 16.9683C3.04746 15.9222 3.44851 14.9144 4.17355 14.1606L7.16719 11.167C7.5727 10.7613 8.06071 10.4476 8.59811 10.2471C9.13552 10.0467 9.70976 9.96412 10.2819 10.0051C10.854 10.0461 11.4106 10.2096 11.9139 10.4846C12.4173 10.7596 12.8556 11.1397 13.1992 11.599C13.53 12.0412 14.1567 12.1316 14.5989 11.8007C15.0412 11.4699 15.1315 10.8433 14.8007 10.401C14.2854 9.71205 13.6279 9.14198 12.8729 8.72948C12.1178 8.31697 11.2829 8.07166 10.4247 8.0102Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nLinkIcon.displayName = \"LinkIcon\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useState, useRef, useEffect } from \"react\"\nimport { createPortal } from \"react-dom\"\nimport type { Editor } from \"@tiptap/react\"\nimport { Icon } from \"@iconify/react\"\n\n// --- Hooks ---\nimport { useIsMobile } from \"@/hooks/use-mobile\"\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Icons ---\nimport { CornerDownLeftIcon } from \"@/components/tiptap-icons/corner-down-left-icon\"\nimport { ExternalLinkIcon } from \"@/components/tiptap-icons/external-link-icon\"\nimport { LinkIcon } from \"@/components/tiptap-icons/link-icon\"\nimport { TrashIcon } from \"@/components/tiptap-icons/trash-icon\"\n\n// --- Tiptap UI ---\nimport type { UseLinkPopoverConfig } from \"@/components/tiptap-ui/link-popover\"\nimport { useLinkPopover } from \"@/components/tiptap-ui/link-popover\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button, ButtonGroup } from \"@/components/tiptap-ui-primitive/button\"\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from \"@/components/tiptap-ui-primitive/popover\"\nimport { Separator } from \"@/components/tiptap-ui-primitive/separator\"\nimport {\n  Card,\n  CardBody,\n  CardItemGroup,\n} from \"@/components/tiptap-ui-primitive/card\"\nimport { Input, InputGroup } from \"@/components/tiptap-ui-primitive/input\"\n\nexport interface PageData {\n  id: string\n  name: string\n  category?: string\n}\n\nexport interface LinkMainProps {\n  /**\n   * The URL to set for the link.\n   */\n  url: string\n  /**\n   * Function to update the URL state.\n   */\n  setUrl: React.Dispatch<React.SetStateAction<string | null>>\n  /**\n   * Function to set the link in the editor.\n   */\n  setLink: (url?: string, pageId?: string, pageName?: string) => void\n  /**\n   * Function to remove the link from the editor.\n   */\n  removeLink: () => void\n  /**\n   * Function to open the link.\n   */\n  openLink: () => void\n  /**\n   * Whether the link is currently active in the editor.\n   */\n  isActive: boolean\n  /**\n   * List of available pages for internal linking\n   */\n  pages?: PageData[]\n}\n\nexport interface LinkPopoverProps\n  extends Omit<ButtonProps, \"type\">,\n    UseLinkPopoverConfig {\n  /**\n   * Callback for when the popover opens or closes.\n   */\n  onOpenChange?: (isOpen: boolean) => void\n  /**\n   * Whether to automatically open the popover when a link is active.\n   * @default true\n   */\n  autoOpenOnLinkActive?: boolean\n  /**\n   * List of available pages for internal linking\n   */\n  pages?: PageData[]\n}\n\n/**\n * Link button component for triggering the link popover\n */\nexport const LinkButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  ({ className, children, ...props }, ref) => {\n    return (\n      <Button\n        type=\"button\"\n        className={className}\n        data-style=\"ghost\"\n        role=\"button\"\n        tabIndex={-1}\n        aria-label=\"Link\"\n        tooltip=\"Link\"\n        ref={ref}\n        {...props}\n      >\n        {children || <LinkIcon className=\"tiptap-button-icon\" />}\n      </Button>\n    )\n  }\n)\n\nLinkButton.displayName = \"LinkButton\"\n\n/**\n * Main content component for the link popover\n */\nconst LinkMain: React.FC<LinkMainProps> = ({\n  url,\n  setUrl,\n  setLink,\n  removeLink,\n  openLink,\n  isActive,\n  pages = [],\n}) => {\n  const isMobile = useIsMobile()\n  const [showPageDropdown, setShowPageDropdown] = useState(false)\n  const [searchQuery, setSearchQuery] = useState(\"\")\n  const dropdownRef = useRef<HTMLDivElement>(null)\n  const inputRef = useRef<HTMLInputElement>(null)\n  const [dropdownPosition, setDropdownPosition] = useState<{ top: number; left: number; width: number } | null>(null)\n\n  // Filter pages based on search query\n  const filteredPages = pages.filter(\n    (page) =>\n      page.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n      (page.category && page.category.toLowerCase().includes(searchQuery.toLowerCase()))\n  )\n\n  // Close dropdown when clicking outside\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n        setShowPageDropdown(false)\n      }\n    }\n\n    if (showPageDropdown) {\n      document.addEventListener('mousedown', handleClickOutside)\n      return () => document.removeEventListener('mousedown', handleClickOutside)\n    }\n  }, [showPageDropdown])\n\n  // Calculate dropdown position\n  useEffect(() => {\n    if (showPageDropdown && inputRef.current) {\n      const rect = inputRef.current.getBoundingClientRect()\n      setDropdownPosition({\n        top: rect.bottom + 4,\n        left: rect.left,\n        width: rect.width,\n      })\n    } else {\n      setDropdownPosition(null)\n    }\n  }, [showPageDropdown])\n\n  const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const value = e.target.value\n\n    // Check if starts with \"/\"\n    if (value.startsWith(\"/\")) {\n      setShowPageDropdown(true)\n      setSearchQuery(value.slice(1)) // Remove \"/\" for filtering\n    } else {\n      setShowPageDropdown(false)\n      setSearchQuery(\"\")\n    }\n\n    setUrl(value)\n  }\n\n  const handlePageSelect = (page: PageData) => {\n    // Create hash-based URL slug\n    const slug = page.name\n      .toLowerCase()\n      .trim()\n      .replace(/\\s+/g, '-')\n      .replace(/[^\\w\\-]/g, '')\n\n    const hashUrl = `#${slug}`\n\n    // Set link with both URL and page attributes\n    setLink(hashUrl, page.id, page.name)\n    setUrl(hashUrl)\n    setShowPageDropdown(false)\n  }\n\n  const handleKeyDown = (event: React.KeyboardEvent) => {\n    // Stop all keyboard events from bubbling to prevent editor interference\n    event.stopPropagation()\n\n    if (event.key === \"Enter\") {\n      event.preventDefault()\n      if (!showPageDropdown) {\n        setLink()\n      }\n    } else if (event.key === \"Escape\") {\n      event.preventDefault()\n      setShowPageDropdown(false)\n    }\n  }\n\n  const DocumentIcon: React.FC<{ className?: string }> = ({ className }) => (\n    <Icon icon=\"mdi:file-document-outline\" className={className} />\n  )\n\n  return (\n    <Card\n      style={{\n        ...(isMobile ? { boxShadow: \"none\", border: 0 } : {}),\n      }}\n    >\n      <CardBody\n        style={{\n          ...(isMobile ? { padding: 0 } : {}),\n        }}\n      >\n        <CardItemGroup orientation=\"horizontal\">\n          <div style={{ position: 'relative', flex: 1 }} ref={dropdownRef}>\n            <InputGroup>\n              <Input\n                ref={inputRef}\n                type=\"url\"\n                placeholder=\"Paste a link or use / to search internal pages\"\n                value={url}\n                onChange={handleInputChange}\n                onKeyDown={handleKeyDown}\n                autoFocus\n                autoComplete=\"off\"\n                autoCorrect=\"off\"\n                autoCapitalize=\"off\"\n              />\n            </InputGroup>\n\n            {/* Page Dropdown - Rendered via Portal */}\n            {showPageDropdown && dropdownPosition && createPortal(\n              <div\n                ref={dropdownRef}\n                style={{\n                  position: 'fixed',\n                  top: `${dropdownPosition.top}px`,\n                  left: `${dropdownPosition.left}px`,\n                  width: `${dropdownPosition.width}px`,\n                  maxHeight: '200px',\n                  overflowY: 'auto',\n                  backgroundColor: '#1a1a1a',\n                  border: '1px solid rgba(255, 255, 255, 0.1)',\n                  borderRadius: '8px',\n                  boxShadow: '0 10px 25px rgba(0, 0, 0, 0.5)',\n                  zIndex: 10001,\n                }}\n              >\n                {filteredPages.length === 0 ? (\n                  <div style={{ padding: '16px', textAlign: 'center', color: '#9ca3af', fontSize: '14px' }}>\n                    {searchQuery ? 'No pages found' : 'No pages available'}\n                  </div>\n                ) : (\n                  filteredPages.map((page) => (\n                    <div\n                      key={page.id}\n                      onClick={() => handlePageSelect(page)}\n                      onMouseEnter={(e) => {\n                        e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.08)'\n                      }}\n                      onMouseLeave={(e) => {\n                        e.currentTarget.style.backgroundColor = 'transparent'\n                      }}\n                      style={{\n                        padding: '12px',\n                        cursor: 'pointer',\n                        borderBottom: '1px solid rgba(255, 255, 255, 0.05)',\n                        transition: 'background-color 0.15s',\n                      }}\n                    >\n                      <div style={{ display: 'flex', alignItems: 'start', gap: '8px' }}>\n                        <DocumentIcon className=\"w-4 h-4 text-[#9ca3af] flex-shrink-0 mt-0.5\" />\n                        <div style={{ flex: 1, minWidth: 0 }}>\n                          <p style={{ color: 'white', fontSize: '14px', margin: 0 }}>{page.name}</p>\n                          {page.category && (\n                            <p style={{ color: '#9ca3af', fontSize: '12px', marginTop: '2px', margin: 0 }}>{page.category}</p>\n                          )}\n                        </div>\n                      </div>\n                    </div>\n                  ))\n                )}\n              </div>,\n              document.body\n            )}\n          </div>\n\n          <ButtonGroup orientation=\"horizontal\">\n            <Button\n              type=\"button\"\n              onClick={() => setLink()}\n              title=\"Apply link\"\n              disabled={!url && !isActive}\n              data-style=\"ghost\"\n            >\n              <CornerDownLeftIcon className=\"tiptap-button-icon\" />\n            </Button>\n          </ButtonGroup>\n\n          <Separator />\n\n          <ButtonGroup orientation=\"horizontal\">\n            <Button\n              type=\"button\"\n              onClick={openLink}\n              title=\"Open in new window\"\n              disabled={!url && !isActive}\n              data-style=\"ghost\"\n            >\n              <ExternalLinkIcon className=\"tiptap-button-icon\" />\n            </Button>\n\n            <Button\n              type=\"button\"\n              onClick={removeLink}\n              title=\"Remove link\"\n              disabled={!url && !isActive}\n              data-style=\"ghost\"\n            >\n              <TrashIcon className=\"tiptap-button-icon\" />\n            </Button>\n          </ButtonGroup>\n        </CardItemGroup>\n      </CardBody>\n    </Card>\n  )\n}\n\n/**\n * Link content component for standalone use\n */\nexport const LinkContent: React.FC<{\n  editor?: Editor | null\n  pages?: PageData[]\n}> = ({ editor, pages }) => {\n  const linkPopover = useLinkPopover({\n    editor,\n  })\n\n  return <LinkMain {...linkPopover} pages={pages} />\n}\n\n/**\n * Link popover component for Tiptap editors.\n *\n * For custom popover implementations, use the `useLinkPopover` hook instead.\n */\nexport const LinkPopover = React.forwardRef<\n  HTMLButtonElement,\n  LinkPopoverProps\n>(\n  (\n    {\n      editor: providedEditor,\n      hideWhenUnavailable = false,\n      onSetLink,\n      onOpenChange,\n      autoOpenOnLinkActive = true,\n      onClick,\n      children,\n      pages,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const [isOpen, setIsOpen] = React.useState(false)\n\n    const {\n      isVisible,\n      canSet,\n      isActive,\n      url,\n      setUrl,\n      setLink,\n      removeLink,\n      openLink,\n      label,\n      Icon,\n    } = useLinkPopover({\n      editor,\n      hideWhenUnavailable,\n      onSetLink,\n    })\n\n    const handleOnOpenChange = React.useCallback(\n      (nextIsOpen: boolean) => {\n        setIsOpen(nextIsOpen)\n        onOpenChange?.(nextIsOpen)\n      },\n      [onOpenChange]\n    )\n\n    const handleSetLink = React.useCallback((url?: string, pageId?: string, pageName?: string) => {\n      setLink(url, pageId, pageName)\n      setIsOpen(false)\n    }, [setLink])\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        setIsOpen(!isOpen)\n      },\n      [onClick, isOpen]\n    )\n\n    React.useEffect(() => {\n      if (autoOpenOnLinkActive && isActive) {\n        setIsOpen(true)\n      }\n    }, [autoOpenOnLinkActive, isActive])\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Popover open={isOpen} onOpenChange={handleOnOpenChange}>\n        <PopoverTrigger asChild>\n          <LinkButton\n            disabled={!canSet}\n            data-active-state={isActive ? \"on\" : \"off\"}\n            data-disabled={!canSet}\n            aria-label={label}\n            aria-pressed={isActive}\n            onClick={handleClick}\n            {...buttonProps}\n            ref={ref}\n          >\n            {children ?? <Icon className=\"tiptap-button-icon\" />}\n          </LinkButton>\n        </PopoverTrigger>\n\n        <PopoverContent>\n          <LinkMain\n            url={url}\n            setUrl={setUrl}\n            setLink={handleSetLink}\n            removeLink={removeLink}\n            openLink={openLink}\n            isActive={isActive}\n            pages={pages}\n          />\n        </PopoverContent>\n      </Popover>\n    )\n  }\n)\n\nLinkPopover.displayName = \"LinkPopover\"\n\nexport default LinkPopover\n","import * as React from \"react\"\nimport type { Editor } from \"@tiptap/react\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Icons ---\nimport { LinkIcon } from \"@/components/tiptap-icons/link-icon\"\n\n// --- Lib ---\nimport { isMarkInSchema, sanitizeUrl } from \"@/lib/tiptap-utils\"\n\n/**\n * Configuration for the link popover functionality\n */\nexport interface UseLinkPopoverConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether to hide the link popover when not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called when the link is set.\n   */\n  onSetLink?: () => void\n}\n\n/**\n * Configuration for the link handler functionality\n */\nexport interface LinkHandlerProps {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor: Editor | null\n  /**\n   * Callback function called when the link is set.\n   */\n  onSetLink?: () => void\n}\n\n/**\n * Checks if a link can be set in the current editor state\n */\nexport function canSetLink(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n  return editor.can().setMark(\"link\")\n}\n\n/**\n * Checks if a link is currently active in the editor\n */\nexport function isLinkActive(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n  return editor.isActive(\"link\")\n}\n\n/**\n * Determines if the link button should be shown\n */\nexport function shouldShowLinkButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = props\n\n  const linkInSchema = isMarkInSchema(\"link\", editor)\n\n  if (!linkInSchema || !editor) {\n    return false\n  }\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canSetLink(editor)\n  }\n\n  return true\n}\n\n/**\n * Custom hook for handling link operations in a Tiptap editor\n */\nexport function useLinkHandler(props: LinkHandlerProps) {\n  const { editor, onSetLink } = props\n  const [url, setUrl] = React.useState<string | null>(null)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    // Get URL immediately on mount\n    const { href } = editor.getAttributes(\"link\")\n\n    if (isLinkActive(editor) && url === null) {\n      setUrl(href || \"\")\n    }\n  }, [editor, url])\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const updateLinkState = () => {\n      const { href } = editor.getAttributes(\"link\")\n      setUrl(href || \"\")\n    }\n\n    editor.on(\"selectionUpdate\", updateLinkState)\n    return () => {\n      editor.off(\"selectionUpdate\", updateLinkState)\n    }\n  }, [editor])\n\n  const setLink = React.useCallback((customUrl?: string, pageId?: string, pageName?: string) => {\n    const linkUrl = customUrl || url\n    if (!linkUrl || !editor) return\n\n    const { selection } = editor.state\n    const isEmpty = selection.empty\n\n    let chain = editor.chain().focus()\n\n    // Set link attributes\n    const linkAttrs: any = { href: linkUrl }\n\n    // Add internal page attributes if provided\n    if (pageId && pageName) {\n      linkAttrs.isInternal = true\n      linkAttrs.pageId = pageId\n      linkAttrs.pageName = pageName\n    }\n\n    chain = chain.extendMarkRange(\"link\").setLink(linkAttrs)\n\n    if (isEmpty) {\n      chain = chain.insertContent({ type: \"text\", text: pageName || linkUrl })\n    }\n\n    chain.run()\n\n    setUrl(null)\n\n    onSetLink?.()\n  }, [editor, onSetLink, url])\n\n  const removeLink = React.useCallback(() => {\n    if (!editor) return\n    editor\n      .chain()\n      .focus()\n      .extendMarkRange(\"link\")\n      .unsetLink()\n      .setMeta(\"preventAutolink\", true)\n      .run()\n    setUrl(\"\")\n  }, [editor])\n\n  const openLink = React.useCallback(\n    (target: string = \"_blank\", features: string = \"noopener,noreferrer\") => {\n      if (!url) return\n\n      const safeUrl = sanitizeUrl(url, window.location.href)\n      if (safeUrl !== \"#\") {\n        window.open(safeUrl, target, features)\n      }\n    },\n    [url]\n  )\n\n  return {\n    url: url || \"\",\n    setUrl,\n    setLink,\n    removeLink,\n    openLink,\n  }\n}\n\n/**\n * Custom hook for link popover state management\n */\nexport function useLinkState(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}) {\n  const { editor, hideWhenUnavailable = false } = props\n\n  const canSet = canSetLink(editor)\n  const isActive = isLinkActive(editor)\n\n  const [isVisible, setIsVisible] = React.useState(false)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(\n        shouldShowLinkButton({\n          editor,\n          hideWhenUnavailable,\n        })\n      )\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable])\n\n  return {\n    isVisible,\n    canSet,\n    isActive,\n  }\n}\n\n/**\n * Main hook that provides link popover functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage\n * function MyLinkButton() {\n *   const { isVisible, canSet, isActive, Icon, label } = useLinkPopover()\n *\n *   if (!isVisible) return null\n *\n *   return <button disabled={!canSet}>Link</button>\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedLinkButton() {\n *   const { isVisible, canSet, isActive, Icon, label } = useLinkPopover({\n *     editor: myEditor,\n *     hideWhenUnavailable: true,\n *     onSetLink: () => console.log('Link set!')\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       disabled={!canSet}\n *       aria-label={label}\n *       aria-pressed={isActive}\n *     >\n *       <Icon />\n *       {label}\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useLinkPopover(config?: UseLinkPopoverConfig) {\n  const {\n    editor: providedEditor,\n    hideWhenUnavailable = false,\n    onSetLink,\n  } = config || {}\n\n  const { editor } = useTiptapEditor(providedEditor)\n\n  const { isVisible, canSet, isActive } = useLinkState({\n    editor,\n    hideWhenUnavailable,\n  })\n\n  const linkHandler = useLinkHandler({\n    editor,\n    onSetLink,\n  })\n\n  return {\n    isVisible,\n    canSet,\n    isActive,\n    label: \"Link\",\n    Icon: LinkIcon,\n    ...linkHandler,\n  }\n}\n","'use client';\n\nimport React, {\n  useState,\n  useEffect,\n  useRef,\n  useMemo,\n  useCallback,\n} from 'react';\nimport { Icon } from '@iconify/react';\nimport { Input } from '@/components/tiptap-ui-primitive/input';\nimport { Search, Loader2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nexport interface IconPickerProps {\n  currentIcon?: string;\n  onIconSelect: (icon: string) => void;\n  onClose?: () => void;\n  className?: string;\n  primaryColor?: string;\n}\n\n// Popular icon sets with their prefixes\nconst ICON_SETS = [\n  { value: '', label: 'All Sets' },\n  { value: 'mdi', label: 'Material Design' },\n  { value: 'lucide', label: 'Lucide' },\n  { value: 'tabler', label: 'Tabler' },\n  { value: 'fa6-solid', label: 'Font Awesome' },\n  { value: 'bi', label: 'Bootstrap' },\n  { value: 'heroicons', label: 'Heroicons' },\n  { value: 'carbon', label: 'Carbon' },\n  { value: 'octicon', label: 'Octicons' },\n  { value: 'solar', label: 'Solar' },\n  { value: 'ph', label: 'Phosphor' },\n];\n\n// Curated popular icons as fallback when no search\nexport const DEFAULT_POPULAR_ICONS = [\n  'mdi:folder',\n  'mdi:folder-open',\n  'mdi:file-document',\n  'mdi:book-open-page-variant',\n  'mdi:book',\n  'mdi:notebook',\n  'mdi:file',\n  'mdi:home',\n  'mdi:cog',\n  'mdi:wrench',\n  'mdi:hammer',\n  'mdi:tools',\n  'mdi:lightbulb',\n  'mdi:star',\n  'mdi:heart',\n  'mdi:rocket',\n  'mdi:flag',\n  'mdi:cube',\n  'mdi:package',\n  'lucide:file-text',\n  'lucide:folder',\n  'lucide:book-open',\n  'lucide:settings',\n  'lucide:tool',\n  'lucide:star',\n  'lucide:heart',\n  'lucide:home',\n  'lucide:box',\n  'tabler:file',\n  'tabler:folder',\n  'tabler:book',\n  'tabler:settings',\n  'fa6-solid:file',\n  'fa6-solid:folder',\n  'fa6-solid:book',\n  'fa6-solid:gear',\n  'bi:file-earmark',\n  'bi:folder',\n  'bi:book',\n  'bi:gear',\n  'heroicons:document',\n  'heroicons:folder',\n  'heroicons:book-open',\n  'heroicons:cog',\n];\n\n/**\n * IconPicker Component with Iconify API Search\n *\n * Allows users to search across 200,000+ icons from Iconify or select from popular icons.\n */\nexport const IconPicker: React.FC<IconPickerProps> = ({\n  currentIcon = '',\n  onIconSelect,\n  onClose,\n  className,\n  primaryColor = 'var(--tnkr-primary)',\n}) => {\n  const [searchTerm, setSearchTerm] = useState('');\n  const [selectedSet, setSelectedSet] = useState('');\n  const [searchResults, setSearchResults] = useState<string[]>([]);\n  const [isSearching, setIsSearching] = useState(false);\n  const searchTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  // Search Iconify API\n  const searchIcons = useCallback(\n    async (query: string, prefix: string = '') => {\n      if (!query || query.length < 2) {\n        setSearchResults([]);\n        return;\n      }\n\n      setIsSearching(true);\n\n      try {\n        const apiUrl = prefix\n          ? `https://api.iconify.design/search?query=${encodeURIComponent(\n              query,\n            )}&prefix=${prefix}&limit=100`\n          : `https://api.iconify.design/search?query=${encodeURIComponent(\n              query,\n            )}&limit=100`;\n\n        const response = await fetch(apiUrl);\n        const data = await response.json();\n\n        if (data.icons && Array.isArray(data.icons)) {\n          setSearchResults(data.icons);\n        } else {\n          setSearchResults([]);\n        }\n      } catch (error) {\n        console.error('Error searching icons:', error);\n        setSearchResults([]);\n      } finally {\n        setIsSearching(false);\n      }\n    },\n    [],\n  );\n\n  // Debounced search\n  useEffect(() => {\n    if (searchTimeoutRef.current !== null) {\n      clearTimeout(searchTimeoutRef.current);\n    }\n\n    if (searchTerm.length >= 2) {\n      searchTimeoutRef.current = setTimeout(() => {\n        searchIcons(searchTerm, selectedSet);\n      }, 300);\n    } else {\n      setSearchResults([]);\n      setIsSearching(false);\n    }\n\n    return () => {\n      if (searchTimeoutRef.current !== null) {\n        clearTimeout(searchTimeoutRef.current);\n      }\n    };\n  }, [searchTerm, selectedSet, searchIcons]);\n\n  // Display icons: search results or popular icons\n  const displayIcons = useMemo(() => {\n    if (searchTerm.length >= 2 && searchResults.length > 0) {\n      return searchResults;\n    }\n\n    if (searchTerm.length >= 2 && !isSearching) {\n      return []; // No results found\n    }\n\n    // Show popular icons filtered by selected set\n    if (selectedSet) {\n      return DEFAULT_POPULAR_ICONS.filter((icon) =>\n        icon.startsWith(selectedSet + ':'),\n      );\n    }\n\n    return DEFAULT_POPULAR_ICONS;\n  }, [searchTerm, searchResults, selectedSet, isSearching]);\n\n  const handleIconClick = (icon: string) => {\n    onIconSelect(icon);\n    onClose?.();\n  };\n\n  return (\n    <div\n      className={cn(\n        'bg-[#1e1e1e] border border-[#444] rounded-lg shadow-lg w-[480px]',\n        className,\n      )}\n      onClick={(e) => e.stopPropagation()}\n    >\n      {/* Header */}\n      <div className=\"p-3 border-b border-[#444]\">\n        <h3 className=\"text-white font-semibold text-sm mb-2\">Choose Icon</h3>\n        <div className=\"relative\">\n          <Search className=\"absolute left-2 top-1/2 -translate-y-1/2 w-3 h-3 text-white/40\" />\n          <Input\n            type=\"text\"\n            placeholder=\"Search 200,000+ icons...\"\n            value={searchTerm}\n            onChange={(e) => setSearchTerm(e.target.value)}\n            onKeyDown={(e) => {\n              e.stopPropagation();\n            }}\n            className=\"pl-7 h-8 text-xs\"\n            style={{\n              backgroundColor: '#2a2a2a',\n              border: '1px solid #444',\n              color: 'white',\n            }}\n            autoFocus\n          />\n          {isSearching && (\n            <Loader2 className=\"absolute right-2 top-1/2 -translate-y-1/2 w-3 h-3 text-white/40 animate-spin\" />\n          )}\n        </div>\n      </div>\n\n      {/* Icon Set Filter */}\n      <div className=\"px-3 py-2 border-b border-[#444]\">\n        <div className=\"flex gap-1 overflow-x-auto pb-1 scrollbar-thin scrollbar-thumb-white/10\">\n          {ICON_SETS.map((set) => (\n            <button\n              key={set.value}\n              onClick={() => setSelectedSet(set.value)}\n              className={cn(\n                'px-3 py-1 text-xs rounded transition-colors whitespace-nowrap flex-shrink-0',\n                selectedSet === set.value\n                  ? 'text-white'\n                  : 'text-white/50 hover:text-white/70 hover:bg-white/5',\n              )}\n              style={\n                selectedSet === set.value\n                  ? {\n                      backgroundColor: `color-mix(in srgb, ${primaryColor} 20%, transparent)`,\n                      borderColor: primaryColor,\n                    }\n                  : {}\n              }\n            >\n              {set.label}\n            </button>\n          ))}\n        </div>\n      </div>\n\n      {/* Icon Grid */}\n      <div className=\"p-3\">\n        <div className=\"max-h-[380px] overflow-y-auto\">\n          {/* Info text */}\n          {!searchTerm && displayIcons.length > 0 && (\n            <div className=\"mb-2 text-xs text-white/40\">\n              Showing popular icons. Type to search all 200,000+ icons.\n            </div>\n          )}\n\n          <div className=\"grid grid-cols-12 gap-1\">\n            {/* Remove Icon Option */}\n            <button\n              onClick={() => handleIconClick('')}\n              className=\"flex items-center justify-center w-9 h-9 rounded hover:bg-[#2a2a2a] transition-colors border border-transparent\"\n              title=\"Remove icon\"\n            >\n              <span className=\"text-white/40 text-xs font-bold\">✕</span>\n            </button>\n\n            {displayIcons.map((icon) => (\n              <button\n                key={icon}\n                onClick={() => handleIconClick(icon)}\n                className=\"flex items-center justify-center w-9 h-9 rounded hover:bg-[#2a2a2a] transition-colors border\"\n                style={{\n                  backgroundColor:\n                    currentIcon === icon\n                      ? `color-mix(in srgb, ${primaryColor} 20%, transparent)`\n                      : 'transparent',\n                  borderColor:\n                    currentIcon === icon ? primaryColor : 'transparent',\n                }}\n                title={icon}\n              >\n                <Icon icon={icon} className=\"w-5 h-5 text-white/70\" />\n              </button>\n            ))}\n          </div>\n\n          {/* Empty states */}\n          {!isSearching &&\n            searchTerm.length >= 2 &&\n            displayIcons.length === 0 && (\n              <div className=\"text-center py-12 text-white/40 text-sm\">\n                <p className=\"mb-2\">No icons found for \"{searchTerm}\"</p>\n                <p className=\"text-xs\">\n                  Try different keywords or browse by icon set\n                </p>\n              </div>\n            )}\n\n          {isSearching && (\n            <div className=\"text-center py-12 text-white/40 text-sm\">\n              <Loader2 className=\"w-6 h-6 animate-spin mx-auto mb-2\" />\n              <p>Searching icons...</p>\n            </div>\n          )}\n        </div>\n      </div>\n\n      {/* Footer */}\n      <div\n        className=\"px-4 py-2 flex items-center justify-between\"\n        style={{\n          borderTop: '1px solid rgba(255, 255, 255, 0.1)',\n        }}\n      >\n        <p className=\"text-xs text-[#9ca3af]\">\n          {searchTerm.length >= 2\n            ? `${displayIcons.length} ${\n                displayIcons.length === 100 ? '(showing first 100)' : ''\n              } icons found`\n            : `${displayIcons.length} popular icons`}\n        </p>\n        <a\n          href=\"https://icon-sets.iconify.design/\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          className=\"text-xs text-white/60 hover:text-white transition-colors\"\n        >\n          Browse all →\n        </a>\n      </div>\n    </div>\n  );\n};\n","\"use client\"\n\nimport React from 'react'\nimport { IconPicker } from '../../../../src/components/IconPicker'\n\ninterface CardIconPickerProps {\n  currentIcon: string\n  onIconSelect: (icon: string) => void\n  onClose: () => void\n}\n\n/**\n * @deprecated Use IconPicker from '@tnkrai/tnkr-editor' instead\n * This component is kept for backward compatibility\n */\nexport const CardIconPicker: React.FC<CardIconPickerProps> = ({\n  currentIcon,\n  onIconSelect,\n  onClose,\n}) => {\n  return (\n    <IconPicker\n      currentIcon={currentIcon}\n      onIconSelect={onIconSelect}\n      onClose={onClose}\n    />\n  )\n}\n","\"use client\"\n\nimport React, { useState, useEffect } from 'react'\nimport { Input } from '@/components/tiptap-ui-primitive/input'\nimport { Button } from '@/components/tiptap-ui-primitive/button'\n\ninterface CardCtaModalProps {\n  currentCta: string | null\n  hasLink: boolean\n  onCtaSubmit: (cta: string) => void\n  onClose: () => void\n}\n\nexport const CardCtaModal: React.FC<CardCtaModalProps> = ({\n  currentCta,\n  hasLink,\n  onCtaSubmit,\n  onClose,\n}) => {\n  const [cta, setCta] = useState(currentCta || '')\n  const [error, setError] = useState<string | null>(null)\n\n  useEffect(() => {\n    setCta(currentCta || '')\n  }, [currentCta])\n\n  const handleSubmit = () => {\n    if (!cta.trim()) {\n      setError('Please enter CTA text')\n      return\n    }\n\n    if (!hasLink) {\n      setError('Please add a link first')\n      return\n    }\n\n    onCtaSubmit(cta.trim())\n    onClose()\n  }\n\n  const handleRemove = () => {\n    onCtaSubmit('')\n    onClose()\n  }\n\n  return (\n    <div\n      className=\"rounded-lg shadow-lg\"\n      style={{\n        backgroundColor: '#161617',\n        border: '1px solid rgba(255, 255, 255, 0.1)',\n        width: '350px',\n      }}\n      onClick={(e) => e.stopPropagation()}\n    >\n      {/* Header */}\n      <div\n        className=\"px-4 py-3\"\n        style={{\n          borderBottom: '1px solid rgba(255, 255, 255, 0.1)',\n        }}\n      >\n        <h3 className=\"text-white font-semibold text-sm\">Add a CTA</h3>\n      </div>\n\n      {/* Content */}\n      <div className=\"p-4\">\n        <div className=\"mb-4\">\n          <Input\n            placeholder=\"What should readers do?\"\n            value={cta}\n            onChange={(e) => {\n              setCta(e.target.value)\n              setError(null)\n            }}\n            onKeyDown={(e) => {\n              // Prevent all keyboard events from propagating to the editor\n              e.stopPropagation()\n              if (e.key === 'Enter') {\n                handleSubmit()\n              }\n            }}\n            className=\"h-10 text-sm\"\n            style={{\n              backgroundColor: 'rgba(255, 255, 255, 0.05)',\n              border: error\n                ? '1px solid var(--tnkr-primary)'\n                : '1px solid rgba(255, 255, 255, 0.1)',\n              color: 'white',\n            }}\n            autoFocus\n          />\n          {error && (\n            <p className=\"text-xs mt-1\" style={{ color: 'var(--tnkr-primary)' }}>{error}</p>\n          )}\n          {!hasLink && (\n            <div\n              className=\"mt-3 p-3 rounded-lg\"\n              style={{\n                backgroundColor: 'rgba(170, 66, 58, 0.1)',\n                border: '1px solid rgba(170, 66, 58, 0.3)',\n              }}\n            >\n              <p className=\"text-xs\" style={{ color: 'var(--tnkr-primary)' }}>\n                Add a link URL first before setting up the CTA\n              </p>\n            </div>\n          )}\n        </div>\n\n        <div className=\"flex gap-2\">\n          <Button\n            onClick={handleSubmit}\n            disabled={!hasLink}\n            className=\"h-9 px-4 flex-1 text-sm font-medium\"\n            style={{\n              backgroundColor: hasLink ? 'var(--tnkr-primary)' : 'rgba(255, 255, 255, 0.05)',\n              color: hasLink ? 'white' : '#9ca3af',\n              cursor: hasLink ? 'pointer' : 'not-allowed',\n            }}\n          >\n            Add CTA\n          </Button>\n          {currentCta && (\n            <Button\n              onClick={handleRemove}\n              className=\"h-9 px-4 text-sm font-medium\"\n              style={{\n                backgroundColor: 'rgba(255, 255, 255, 0.05)',\n                border: '1px solid rgba(255, 255, 255, 0.1)',\n                color: '#9ca3af',\n              }}\n            >\n              Remove\n            </Button>\n          )}\n        </div>\n      </div>\n    </div>\n  )\n}\n","\"use client\"\n\nimport React, { useState, useEffect } from 'react'\nimport { Icon } from '@iconify/react'\nimport { Button } from '@/components/tiptap-ui-primitive/button'\n\ninterface CardColumnsModalProps {\n  currentColumns: number\n  onColumnsChange: (columns: number) => void\n  onClose: () => void\n}\n\nconst columnOptions = [\n  { value: 1, label: 'One' },\n  { value: 2, label: 'Two' },\n  { value: 3, label: 'Three' },\n]\n\nexport const CardColumnsModal: React.FC<CardColumnsModalProps> = ({\n  currentColumns,\n  onColumnsChange,\n  onClose,\n}) => {\n  const [selectedColumns, setSelectedColumns] = useState(currentColumns)\n\n  useEffect(() => {\n    setSelectedColumns(currentColumns)\n  }, [currentColumns])\n\n  const handleSubmit = () => {\n    onColumnsChange(selectedColumns)\n    onClose()\n  }\n\n  return (\n    <div\n      className=\"rounded-lg shadow-lg\"\n      style={{\n        backgroundColor: '#161617',\n        border: '1px solid rgba(255, 255, 255, 0.1)',\n        width: '350px',\n      }}\n      onClick={(e) => e.stopPropagation()}\n    >\n      {/* Header */}\n      <div\n        className=\"px-4 py-3\"\n        style={{\n          borderBottom: '1px solid rgba(255, 255, 255, 0.1)',\n        }}\n      >\n        <h3 className=\"text-white font-semibold text-sm\">Set Columns</h3>\n      </div>\n\n      {/* Content */}\n      <div className=\"p-4\">\n        <div className=\"mb-4 flex items-center justify-between\">\n          <div className=\"flex items-center gap-2\">\n            <Icon icon=\"ph:columns-thin\" className=\"w-5 h-5 text-white\" />\n            <label className=\"text-white text-sm font-medium\">\n              Columns\n            </label>\n          </div>\n          <div className=\"relative\" style={{ width: '120px' }}>\n            <select\n              value={selectedColumns}\n              onChange={(e) => setSelectedColumns(Number(e.target.value))}\n              onKeyDown={(e) => {\n                // Prevent all keyboard events from propagating to the editor\n                e.stopPropagation()\n              }}\n              className=\"w-full h-10 text-sm px-3 rounded-md appearance-none cursor-pointer\"\n              style={{\n                backgroundColor: 'rgba(255, 255, 255, 0.05)',\n                border: '1px solid rgba(255, 255, 255, 0.1)',\n                color: 'white',\n                backgroundImage: `url(\"data:image/svg+xml,%3Csvg width='12' height='8' viewBox='0 0 12 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%239ca3af' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\")`,\n                backgroundRepeat: 'no-repeat',\n                backgroundPosition: 'right 12px center',\n                paddingRight: '36px',\n              }}\n            >\n              {columnOptions.map(option => (\n                <option key={option.value} value={option.value}>\n                  {option.label}\n                </option>\n              ))}\n            </select>\n          </div>\n        </div>\n\n        <Button\n          onClick={handleSubmit}\n          className=\"w-full h-9 px-4 text-sm font-medium\"\n          style={{\n            backgroundColor: 'var(--tnkr-primary)',\n            color: 'white',\n          }}\n        >\n          Save Changes\n        </Button>\n      </div>\n    </div>\n  )\n}\n","import * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { cn } from \"@/lib/tiptap-utils\"\n\nfunction DropdownMenu({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n  return <DropdownMenuPrimitive.Root modal={false} {...props} />\n}\n\nfunction DropdownMenuPortal({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n  return <DropdownMenuPrimitive.Portal {...props} />\n}\n\nconst DropdownMenuTrigger = React.forwardRef<\n  React.ComponentRef<typeof DropdownMenuPrimitive.Trigger>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Trigger>\n>(({ ...props }, ref) => <DropdownMenuPrimitive.Trigger ref={ref} {...props} />)\nDropdownMenuTrigger.displayName = DropdownMenuPrimitive.Trigger.displayName\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSeparator = DropdownMenuPrimitive.Separator\n\nconst DropdownMenuItem = DropdownMenuPrimitive.Item\n\nconst DropdownMenuSubTrigger = DropdownMenuPrimitive.SubTrigger\n\nconst DropdownMenuSubContent = React.forwardRef<\n  React.ComponentRef<typeof DropdownMenuPrimitive.SubContent>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent> & {\n    portal?: boolean | React.ComponentProps<typeof DropdownMenuPortal>\n  }\n>(({ className, portal = true, ...props }, ref) => {\n  const content = (\n    <DropdownMenuPrimitive.SubContent\n      ref={ref}\n      className={cn(\"tiptap-dropdown-menu\", className)}\n      {...props}\n    />\n  )\n\n  return portal ? (\n    <DropdownMenuPortal {...(typeof portal === \"object\" ? portal : {})}>\n      {content}\n    </DropdownMenuPortal>\n  ) : (\n    content\n  )\n})\nDropdownMenuSubContent.displayName =\n  DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n  React.ComponentRef<typeof DropdownMenuPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content> & {\n    portal?: boolean\n  }\n>(({ className, sideOffset = 4, portal = false, ...props }, ref) => {\n  const content = (\n    <DropdownMenuPrimitive.Content\n      ref={ref}\n      sideOffset={sideOffset}\n      onCloseAutoFocus={(e) => e.preventDefault()}\n      className={cn(\"tiptap-dropdown-menu\", className)}\n      {...props}\n    />\n  )\n\n  return portal ? (\n    <DropdownMenuPortal {...(typeof portal === \"object\" ? portal : {})}>\n      {content}\n    </DropdownMenuPortal>\n  ) : (\n    content\n  )\n})\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nexport {\n  DropdownMenu,\n  DropdownMenuTrigger,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuGroup,\n  DropdownMenuSub,\n  DropdownMenuPortal,\n  DropdownMenuSubContent,\n  DropdownMenuSubTrigger,\n  DropdownMenuRadioGroup,\n  DropdownMenuSeparator,\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\n// --- Tiptap UI ---\nimport type { UseTurnIntoDropdownConfig } from \"@/components/tiptap-ui/turn-into-dropdown\"\nimport {\n  useTurnIntoDropdown,\n  getFilteredBlockTypeOptions,\n} from \"@/components/tiptap-ui/turn-into-dropdown\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI Components ---\nimport { TextButton } from \"@/components/tiptap-ui/text-button\"\nimport { HeadingButton } from \"@/components/tiptap-ui/heading-button\"\nimport { ListButton } from \"@/components/tiptap-ui/list-button\"\nimport { BlockquoteButton } from \"@/components/tiptap-ui/blockquote-button\"\nimport { CodeBlockButton } from \"@/components/tiptap-ui/code-block-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button, ButtonGroup } from \"@/components/tiptap-ui-primitive/button\"\nimport {\n  DropdownMenu,\n  DropdownMenuTrigger,\n  DropdownMenuContent,\n  DropdownMenuItem,\n} from \"@/components/tiptap-ui-primitive/dropdown-menu\"\nimport {\n  Card,\n  CardBody,\n  CardGroupLabel,\n  CardItemGroup,\n} from \"@/components/tiptap-ui-primitive/card\"\n\nexport interface TurnIntoDropdownContentProps {\n  blockTypes?: string[]\n  useCardLayout?: boolean\n}\n\nexport const TurnIntoDropdownContent: React.FC<\n  TurnIntoDropdownContentProps\n> = ({ blockTypes, useCardLayout = true }) => {\n  const filteredOptions = getFilteredBlockTypeOptions(blockTypes)\n\n  const renderButtons = () => (\n    <ButtonGroup>\n      {filteredOptions.map((option, index) =>\n        renderBlockTypeButton(option, `${option.type}-${option.level ?? index}`)\n      )}\n    </ButtonGroup>\n  )\n\n  if (!useCardLayout) return renderButtons()\n\n  return (\n    <Card>\n      <CardBody>\n        <CardItemGroup>\n          <CardGroupLabel>Turn into</CardGroupLabel>\n          {renderButtons()}\n        </CardItemGroup>\n      </CardBody>\n    </Card>\n  )\n}\n\nfunction renderBlockTypeButton(\n  option: ReturnType<typeof getFilteredBlockTypeOptions>[0],\n  key: string\n) {\n  switch (option.type) {\n    case \"paragraph\":\n      return (\n        <DropdownMenuItem key={key} asChild>\n          <TextButton showTooltip={false} text={option.label} />\n        </DropdownMenuItem>\n      )\n\n    case \"heading\":\n      if (!option.level) {\n        return null\n      }\n\n      return (\n        <DropdownMenuItem key={key} asChild>\n          <HeadingButton\n            level={option.level || 1}\n            showTooltip={false}\n            text={option.label}\n          />\n        </DropdownMenuItem>\n      )\n\n    case \"bulletList\":\n      return (\n        <DropdownMenuItem key={key} asChild>\n          <ListButton\n            type=\"bulletList\"\n            showTooltip={false}\n            text={option.label}\n          />\n        </DropdownMenuItem>\n      )\n\n    case \"orderedList\":\n      return (\n        <DropdownMenuItem key={key} asChild>\n          <ListButton\n            type=\"orderedList\"\n            showTooltip={false}\n            text={option.label}\n          />\n        </DropdownMenuItem>\n      )\n\n    case \"taskList\":\n      return (\n        <DropdownMenuItem key={key} asChild>\n          <ListButton type=\"taskList\" showTooltip={false} text={option.label} />\n        </DropdownMenuItem>\n      )\n\n    case \"blockquote\":\n      return (\n        <DropdownMenuItem key={key} asChild>\n          <BlockquoteButton showTooltip={false} text={option.label} />\n        </DropdownMenuItem>\n      )\n\n    case \"codeBlock\":\n      return (\n        <DropdownMenuItem key={key} asChild>\n          <CodeBlockButton showTooltip={false} text={option.label} />\n        </DropdownMenuItem>\n      )\n\n    default:\n      return null\n  }\n}\n\nexport interface TurnIntoDropdownProps\n  extends Omit<ButtonProps, \"type\">,\n    UseTurnIntoDropdownConfig {\n  /**\n   * Whether to use card layout for the dropdown content\n   * @default true\n   */\n  useCardLayout?: boolean\n}\n\n/**\n * Dropdown component for transforming block types in a Tiptap editor.\n * For custom dropdown implementations, use the `useTurnIntoDropdown` hook instead.\n */\nexport const TurnIntoDropdown = React.forwardRef<\n  HTMLButtonElement,\n  TurnIntoDropdownProps\n>(\n  (\n    {\n      editor: providedEditor,\n      hideWhenUnavailable = false,\n      blockTypes,\n      useCardLayout = true,\n      onOpenChange,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      canToggle,\n      isOpen,\n      activeBlockType,\n      handleOpenChange,\n      label,\n      Icon,\n    } = useTurnIntoDropdown({\n      editor,\n      hideWhenUnavailable,\n      blockTypes,\n      onOpenChange,\n    })\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <DropdownMenu open={isOpen} onOpenChange={handleOpenChange}>\n        <DropdownMenuTrigger asChild>\n          <Button\n            type=\"button\"\n            data-style=\"ghost\"\n            disabled={!canToggle}\n            data-disabled={!canToggle}\n            role=\"button\"\n            tabIndex={-1}\n            aria-label={label}\n            tooltip=\"Turn into\"\n            {...buttonProps}\n            ref={ref}\n          >\n            {children ?? (\n              <>\n                <span className=\"tiptap-button-text\">\n                  {activeBlockType?.label || \"Text\"}\n                </span>\n                <Icon className=\"tiptap-button-dropdown-small\" />\n              </>\n            )}\n          </Button>\n        </DropdownMenuTrigger>\n\n        <DropdownMenuContent align=\"start\">\n          <TurnIntoDropdownContent\n            blockTypes={blockTypes}\n            useCardLayout={useCardLayout}\n          />\n        </DropdownMenuContent>\n      </DropdownMenu>\n    )\n  }\n)\n\nTurnIntoDropdown.displayName = \"TurnIntoDropdown\"\n","import * as React from \"react\"\nimport type { Editor } from \"@tiptap/react\"\nimport { NodeSelection } from \"@tiptap/pm/state\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Icons ---\nimport { ChevronDownIcon } from \"@/components/tiptap-icons/chevron-down-icon\"\n\n// --- Tiptap UI ---\nimport type { Level } from \"@/components/tiptap-ui/heading-button\"\n\nexport const TURN_INTO_BLOCKS = [\n  \"paragraph\",\n  \"heading\",\n  \"bulletList\",\n  \"orderedList\",\n  \"taskList\",\n  \"blockquote\",\n  \"codeBlock\",\n]\n\n/**\n * Configuration for the turn into dropdown functionality\n */\nexport interface UseTurnIntoDropdownConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether the dropdown should hide when no options are available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Which block types to show in the dropdown\n   * @default [\"paragraph\", \"heading\", \"bulletList\", \"orderedList\", \"taskList\", \"blockquote\", \"codeBlock\"]\n   */\n  blockTypes?: string[]\n  /**\n   * Callback function called when the dropdown state changes.\n   */\n  onOpenChange?: (isOpen: boolean) => void\n}\n\nexport const blockTypeOptions = [\n  {\n    type: \"paragraph\",\n    label: \"Text\",\n    isActive: (editor: Editor) =>\n      editor.isActive(\"paragraph\") &&\n      !editor.isActive(\"heading\") &&\n      !editor.isActive(\"bulletList\") &&\n      !editor.isActive(\"orderedList\") &&\n      !editor.isActive(\"taskList\") &&\n      !editor.isActive(\"blockquote\") &&\n      !editor.isActive(\"codeBlock\"),\n  },\n  {\n    type: \"heading\",\n    label: \"Heading 1\",\n    level: 1 as Level,\n    isActive: (editor: Editor) => editor.isActive(\"heading\", { level: 1 }),\n  },\n  {\n    type: \"heading\",\n    label: \"Heading 2\",\n    level: 2 as Level,\n    isActive: (editor: Editor) => editor.isActive(\"heading\", { level: 2 }),\n  },\n  {\n    type: \"heading\",\n    label: \"Heading 3\",\n    level: 3 as Level,\n    isActive: (editor: Editor) => editor.isActive(\"heading\", { level: 3 }),\n  },\n  {\n    type: \"bulletList\",\n    label: \"Bulleted list\",\n    isActive: (editor: Editor) => editor.isActive(\"bulletList\"),\n  },\n  {\n    type: \"orderedList\",\n    label: \"Numbered list\",\n    isActive: (editor: Editor) => editor.isActive(\"orderedList\"),\n  },\n  {\n    type: \"taskList\",\n    label: \"To-do list\",\n    isActive: (editor: Editor) => editor.isActive(\"taskList\"),\n  },\n  {\n    type: \"blockquote\",\n    label: \"Blockquote\",\n    isActive: (editor: Editor) => editor.isActive(\"blockquote\"),\n  },\n  {\n    type: \"codeBlock\",\n    label: \"Code block\",\n    isActive: (editor: Editor) => editor.isActive(\"codeBlock\"),\n  },\n]\n\n/**\n * Checks if turn into functionality can be used in the current editor state\n */\nexport function canTurnInto(\n  editor: Editor | null,\n  allowedBlockTypes?: string[]\n): boolean {\n  if (!editor || !editor.isEditable) return false\n\n  const blockTypes = allowedBlockTypes || TURN_INTO_BLOCKS\n  const { selection } = editor.state\n\n  if (selection instanceof NodeSelection) {\n    const nodeType = selection.node.type.name\n    return blockTypes.includes(nodeType)\n  }\n\n  const { $anchor } = selection\n  const nodeType = $anchor.parent.type.name\n  return blockTypes.includes(nodeType)\n}\n\n/**\n * Gets filtered block type options based on available types\n */\nexport function getFilteredBlockTypeOptions(blockTypes?: string[]) {\n  if (!blockTypes) return blockTypeOptions\n\n  return blockTypeOptions.filter((option) => {\n    return blockTypes.includes(option.type)\n  })\n}\n\n/**\n * Gets the currently active block type from the available options\n */\nexport function getActiveBlockType(\n  editor: Editor | null,\n  blockTypes?: string[]\n) {\n  if (!editor) return getFilteredBlockTypeOptions(blockTypes)[0]\n\n  const filteredOptions = getFilteredBlockTypeOptions(blockTypes)\n  const activeOption = filteredOptions.find((option) => option.isActive(editor))\n  return activeOption || filteredOptions[0]\n}\n\n/**\n * Determines if the turn into dropdown should be visible\n */\nexport function shouldShowTurnInto(params: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n  blockTypes?: string[]\n}): boolean {\n  const { editor, hideWhenUnavailable, blockTypes } = params\n\n  if (!editor) {\n    return false\n  }\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canTurnInto(editor, blockTypes)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides turn into dropdown functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage\n * function MyTurnIntoDropdown() {\n *   const {\n *     isVisible,\n *     canToggle,\n *     activeBlockType,\n *     handleOpenChange,\n *     label,\n *     Icon,\n *   } = useTurnIntoDropdown()\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <DropdownMenu onOpenChange={handleOpenChange}>\n *       // dropdown content\n *     </DropdownMenu>\n *   )\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedTurnIntoDropdown() {\n *   const {\n *     isVisible,\n *     activeBlockType,\n *   } = useTurnIntoDropdown({\n *     editor: myEditor,\n *     blockTypes: [\"paragraph\", \"heading\", \"bulletList\"],\n *     hideWhenUnavailable: true,\n *     onOpenChange: (isOpen) => console.log(\"Dropdown toggled\", isOpen),\n *   })\n *\n *   // component implementation\n * }\n * ```\n */\nexport function useTurnIntoDropdown(config?: UseTurnIntoDropdownConfig) {\n  const {\n    editor: providedEditor,\n    hideWhenUnavailable = false,\n    blockTypes,\n    onOpenChange,\n  } = config || {}\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const [isOpen, setIsOpen] = React.useState(false)\n  const [isVisible, setIsVisible] = React.useState(true)\n\n  const canToggle = canTurnInto(editor, blockTypes)\n  const activeBlockType = getActiveBlockType(editor, blockTypes)\n\n  const handleOpenChange = React.useCallback(\n    (open: boolean) => {\n      if (!editor || !canToggle) return\n      setIsOpen(open)\n      onOpenChange?.(open)\n    },\n    [canToggle, editor, onOpenChange]\n  )\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(\n        shouldShowTurnInto({\n          editor,\n          hideWhenUnavailable,\n          blockTypes,\n        })\n      )\n    }\n\n    handleSelectionUpdate()\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable, blockTypes])\n\n  return {\n    isVisible,\n    canToggle,\n    isOpen,\n    setIsOpen,\n    activeBlockType,\n    handleOpenChange,\n    filteredOptions: getFilteredBlockTypeOptions(blockTypes),\n    label: `Turn into (current: ${activeBlockType?.label || \"Text\"})`,\n    Icon: ChevronDownIcon,\n  }\n}\n","import { isNodeSelection } from \"@tiptap/core\"\nimport { canResetMarks } from \"../reset-all-formatting-button\"\nimport type { MenuActionVisibility } from \"./drag-context-menu-types\"\nimport { TURN_INTO_BLOCKS } from \"@/components/tiptap-ui/turn-into-dropdown\"\nimport type { Editor } from \"@tiptap/react\"\nimport { NodeSelection } from \"@tiptap/pm/state\"\n\nexport const useMenuActionVisibility = (\n  editor: Editor | null\n): MenuActionVisibility => {\n  if (!editor) {\n    return {\n      hasAnyActionGroups: false,\n      hasColorActions: false,\n      hasTransformActions: false,\n      hasResetFormatting: false,\n      hasImage: false,\n      hasVideo: false,\n      hasAnnotation: false,\n    }\n  }\n\n  const { selection } = editor.state\n  let node = selection.$anchor.node(1)\n\n  if (selection instanceof NodeSelection) {\n    node = selection.node\n  }\n\n  const hasColorActions: boolean =\n    !!editor.can().setMark(\"textStyle\") ||\n    !!editor.can().setMark(\"highlight\") ||\n    false\n\n  const hasTransformActions = !!(\n    node?.type?.name &&\n    TURN_INTO_BLOCKS.includes(node.type.name)\n  )\n\n  const hasImage = isNodeSelection(selection) && node?.type?.name === \"image\"\n  const hasVideo = isNodeSelection(selection) && node?.type?.name === \"video\"\n  const hasAnnotation = isNodeSelection(selection) && node?.type?.name === \"annotation\"\n\n  const hasResetFormatting = canResetMarks(editor.state.tr, [\"inlineThread\"])\n\n  const hasAnyActionGroups =\n    hasColorActions || hasTransformActions || hasResetFormatting\n\n  return {\n    hasAnyActionGroups,\n    hasColorActions,\n    hasTransformActions,\n    hasResetFormatting,\n    hasImage,\n    hasVideo,\n    hasAnnotation,\n  }\n}\n","import * as React from \"react\"\n\nexport const GripVerticalIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M9 3C7.89543 3 7 3.89543 7 5C7 6.10457 7.89543 7 9 7C10.1046 7 11 6.10457 11 5C11 3.89543 10.1046 3 9 3Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M9 10C7.89543 10 7 10.8954 7 12C7 13.1046 7.89543 14 9 14C10.1046 14 11 13.1046 11 12C11 10.8954 10.1046 10 9 10Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M7 19C7 17.8954 7.89543 17 9 17C10.1046 17 11 17.8954 11 19C11 20.1046 10.1046 21 9 21C7.89543 21 7 20.1046 7 19Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M15 10C13.8954 10 13 10.8954 13 12C13 13.1046 13.8954 14 15 14C16.1046 14 17 13.1046 17 12C17 10.8954 16.1046 10 15 10Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M13 5C13 3.89543 13.8954 3 15 3C16.1046 3 17 3.89543 17 5C17 6.10457 16.1046 7 15 7C13.8954 7 13 6.10457 13 5Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M15 17C13.8954 17 13 17.8954 13 19C13 20.1046 13.8954 21 15 21C16.1046 21 17 20.1046 17 19C17 17.8954 16.1046 17 15 17Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nGripVerticalIcon.displayName = \"GripVerticalIcon\"\n","import * as React from \"react\"\n\nexport const PaintBucketIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M5.70711 1.29289C5.31658 0.902369 4.68342 0.902369 4.29289 1.29289C3.90237 1.68342 3.90237 2.31658 4.29289 2.70711L7.08575 5.49997L1.69282 10.8929L1.68582 10.9C1.13614 11.4608 0.828247 12.2147 0.828247 13C0.828247 13.7853 1.1361 14.5392 1.68578 15.1L6.89285 20.3071C8.08338 21.4976 9.91654 21.4976 11.1071 20.3071L19.7071 11.7071C20.0976 11.3166 20.0976 10.6834 19.7071 10.2929L11.7071 2.29289C11.3165 1.90237 10.6834 1.90237 10.2929 2.29289L8.49997 4.08576L5.70711 1.29289ZM17.5857 11L16.5857 12H3.41418L8.49998 6.91419L9.29289 7.70711C9.68342 8.09763 10.3166 8.09763 10.7071 7.70711C11.0976 7.31658 11.0976 6.68342 10.7071 6.29289L9.91419 5.49998L11 4.41421L17.5857 11ZM14.5857 14H3.41418L8.30707 18.8929C8.71654 19.3024 9.28338 19.3024 9.69285 18.8929L14.5857 14Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M20.9829 15.8157C20.8942 15.3427 20.4812 15 20 15C19.5188 15 19.1058 15.3427 19.0171 15.8157C18.9233 16.3161 18.6226 16.706 18.1385 17.3337L18.0955 17.3895C17.6418 17.9781 17 18.8237 17 20C17 20.7957 17.3161 21.5587 17.8787 22.1213C18.4413 22.6839 19.2043 23 20 23C20.7957 23 21.5587 22.6839 22.1213 22.1213C22.6839 21.5587 23 20.7957 23 20C23 18.8237 22.3582 17.9781 21.9045 17.3895L21.8615 17.3337C21.3774 16.706 21.0767 16.3161 20.9829 15.8157ZM19 20C19 19.5763 19.2082 19.2219 19.6795 18.6105C19.714 18.5658 19.7503 18.5192 19.7881 18.4709C19.855 18.3851 19.9265 18.2935 20 18.1963C20.0735 18.2935 20.1449 18.385 20.2119 18.4708C20.2496 18.5192 20.286 18.5658 20.3205 18.6105C20.7918 19.2219 21 19.5763 21 20C21 20.2652 20.8946 20.5196 20.7071 20.7071C20.5196 20.8946 20.2652 21 20 21C19.7348 21 19.4804 20.8946 19.2929 20.7071C19.1054 20.5196 19 20.2652 19 20Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nPaintBucketIcon.displayName = \"MoreVerticalIcon\"\n","import * as React from \"react\"\n\nexport const ChevronRightIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M8.29289 5.29289C8.68342 4.90237 9.31658 4.90237 9.70711 5.29289L15.7071 11.2929C16.0976 11.6834 16.0976 12.3166 15.7071 12.7071L9.70711 18.7071C9.31658 19.0976 8.68342 19.0976 8.29289 18.7071C7.90237 18.3166 7.90237 17.6834 8.29289 17.2929L13.5858 12L8.29289 6.70711C7.90237 6.31658 7.90237 5.68342 8.29289 5.29289Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nChevronRightIcon.displayName = \"ChevronRightIcon\"\n","import * as React from \"react\"\n\nexport const Repeat2Icon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M5.70711 5.29289C5.31658 4.90237 4.68342 4.90237 4.29289 5.29289L1.29289 8.29289C0.902369 8.68342 0.902369 9.31658 1.29289 9.70711C1.68342 10.0976 2.31658 10.0976 2.70711 9.70711L4 8.41421V16C4 16.7956 4.31607 17.5587 4.87868 18.1213C5.44129 18.6839 6.20435 19 7 19H13C13.5523 19 14 18.5523 14 18C14 17.4477 13.5523 17 13 17H7C6.73478 17 6.48043 16.8946 6.29289 16.7071C6.10536 16.5196 6 16.2652 6 16V8.41421L7.29289 9.70711C7.68342 10.0976 8.31658 10.0976 8.70711 9.70711C9.09763 9.31658 9.09763 8.68342 8.70711 8.29289L5.70711 5.29289ZM15.2929 14.2929C15.6834 13.9024 16.3166 13.9024 16.7071 14.2929L18 15.5858V8C18 7.73478 17.8946 7.48043 17.7071 7.29289C17.5196 7.10536 17.2652 7 17 7H11C10.4477 7 10 6.55228 10 6C10 5.44772 10.4477 5 11 5H17C17.7957 5 18.5587 5.31607 19.1213 5.87868C19.6839 6.44129 20 7.20435 20 8V15.5858L21.2929 14.2929C21.6834 13.9024 22.3166 13.9024 22.7071 14.2929C23.0976 14.6834 23.0976 15.3166 22.7071 15.7071L19.7071 18.7071C19.3166 19.0976 18.6834 19.0976 18.2929 18.7071L15.2929 15.7071C14.9024 15.3166 14.9024 14.6834 15.2929 14.2929Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nRepeat2Icon.displayName = \"Repeat2Icon\"\n","import * as React from \"react\"\n\nexport const AddRowAboveIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M11 7V3C11 2.45 11.45 2 12 2C12.55 2 13 2.45 13 3V7C13 7.55 12.55 8 12 8C11.45 8 11 7.55 11 7Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M8 5H4C3.45 5 3 4.55 3 4C3 3.45 3.45 3 4 3H8C8.55 3 9 3.45 9 4C9 4.55 8.55 5 8 5Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M20 5H16C15.45 5 15 4.55 15 4C15 3.45 15.45 3 16 3H20C20.55 3 21 3.45 21 4C21 4.55 20.55 5 20 5Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M20 10H4C3.45 10 3 10.45 3 11V13C3 13.55 3.45 14 4 14H20C20.55 14 21 13.55 21 13V11C21 10.45 20.55 10 20 10Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M20 16H4C3.45 16 3 16.45 3 17V19C3 19.55 3.45 20 4 20H20C20.55 20 21 19.55 21 19V17C21 16.45 20.55 16 20 16Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nAddRowAboveIcon.displayName = \"AddRowAboveIcon\"","import * as React from \"react\"\n\nexport const AddRowBelowIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M20 8H4C3.45 8 3 8.45 3 9V11C3 11.55 3.45 12 4 12H20C20.55 12 21 11.55 21 11V9C21 8.45 20.55 8 20 8Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M20 14H4C3.45 14 3 14.45 3 15V17C3 17.55 3.45 18 4 18H20C20.55 18 21 17.55 21 17V15C21 14.45 20.55 14 20 14Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M11 21V17C11 16.45 11.45 16 12 16C12.55 16 13 16.45 13 17V21C13 21.55 12.55 22 12 22C11.45 22 11 21.55 11 21Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M8 19H4C3.45 19 3 19.45 3 20C3 20.55 3.45 21 4 21H8C8.55 21 9 20.55 9 20C9 19.45 8.55 19 8 19Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M20 19H16C15.45 19 15 19.45 15 20C15 20.55 15.45 21 16 21H20C20.55 21 21 20.55 21 20C21 19.45 20.55 19 20 19Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nAddRowBelowIcon.displayName = \"AddRowBelowIcon\"","import * as React from \"react\"\n\nexport const DuplicateOutlineIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M7 16C7 16.55 7.45 17 8 17H16C16.55 17 17 16.55 17 16V8C17 7.45 16.55 7 16 7H8C7.45 7 7 7.45 7 8V16ZM9 9H15V15H9V9Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M19 3H11C9.9 3 9 3.9 9 5H11V5H17V11H19V5C19 3.9 18.1 3 17 3Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M5 13H3V19C3 20.1 3.9 21 5 21H11V19H5V13Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nDuplicateOutlineIcon.displayName = \"DuplicateOutlineIcon\"","import * as React from \"react\"\nimport type { Node as TiptapNode } from \"@tiptap/pm/model\"\nimport type { Editor } from \"@tiptap/react\"\nimport { offset } from \"@floating-ui/react\"\n\n// Hooks\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\nimport { useUiEditorState } from \"@/hooks/use-ui-editor-state\"\nimport { selectNodeAndHideFloating } from \"@/hooks/use-floating-toolbar-visibility\"\n\n// Primitive UI Components\nimport { Button, ButtonGroup } from \"@/components/tiptap-ui-primitive/button\"\nimport { Spacer } from \"@/components/tiptap-ui-primitive/spacer\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/tiptap-ui-primitive/popover\"\nimport {\n  Menu,\n  MenuContent,\n  MenuItem,\n  MenuGroup,\n  MenuGroupLabel,\n  MenuButton,\n} from \"@/components/tiptap-ui-primitive/menu\"\nimport { Combobox, ComboboxList } from \"@/components/tiptap-ui-primitive/combobox\"\nimport { Separator } from \"@/components/tiptap-ui-primitive/separator\"\n\n// Tiptap UI\nimport { useImageDownload } from \"@/components/tiptap-ui/image-download-button\"\nimport {\n  DuplicateShortcutBadge,\n  useDuplicate,\n} from \"@/components/tiptap-ui/duplicate-button\"\nimport {\n  CopyToClipboardShortcutBadge,\n  useCopyToClipboard,\n} from \"@/components/tiptap-ui/copy-to-clipboard-button\"\nimport {\n  DeleteNodeShortcutBadge,\n  useDeleteNode,\n} from \"@/components/tiptap-ui/delete-node-button\"\nimport { useResetAllFormatting } from \"@/components/tiptap-ui/reset-all-formatting-button\"\nimport { SlashCommandTriggerButton } from \"@/components/tiptap-ui/slash-command-trigger-button\"\nimport {\n  TEXT_COLORS,\n  useColorText,\n} from \"@/components/tiptap-ui/color-text-button\"\nimport {\n  HIGHLIGHT_COLORS,\n  useColorHighlight,\n} from \"@/components/tiptap-ui/color-highlight-button\"\nimport {\n  AskAiShortcutBadge,\n  useAiAsk,\n} from \"@/components/tiptap-ui/ai-ask-button\"\nimport { useText } from \"@/components/tiptap-ui/text-button\"\nimport { useHeading } from \"@/components/tiptap-ui/heading-button\"\nimport { useList } from \"@/components/tiptap-ui/list-button\"\nimport { useBlockquote } from \"@/components/tiptap-ui/blockquote-button\"\nimport { useCodeBlock } from \"@/components/tiptap-ui/code-block-button\"\nimport type { RecentColor } from \"@/components/tiptap-ui/color-text-popover\"\nimport {\n  getColorByValue,\n  useRecentColors,\n} from \"@/components/tiptap-ui/color-text-popover\"\n\nimport { DragHandle } from \"@tiptap/extension-drag-handle-react\"\n\n// Link Popover\nimport { LinkContent, type PageData as LinkPageData } from \"@/components/tiptap-ui/link-popover\"\n\n// Card Node Modals\nimport { CardIconPicker } from \"@/components/tiptap-node/card-node/card-icon-picker\"\nimport { CardUrlModal } from \"@/components/tiptap-node/card-node/card-url-modal\"\nimport type { PageData } from \"@/components/tiptap-node/card-node/card-node-extension\"\nimport { CardCtaModal } from \"@/components/tiptap-node/card-node/card-cta-modal\"\nimport { CardColumnsModal } from \"@/components/tiptap-node/card-node/card-columns-modal\"\nimport { ColumnNodeMenu } from \"@/components/tiptap-node/columns-node/column-node-menu\"\n\n\n// Utils\nimport {\n  getNodeDisplayName,\n  isTextSelectionValid,\n} from \"@/lib/tiptap-collab-utils\"\n\nimport type {\n  ColorMenuItemProps,\n  DragContextMenuProps,\n  MenuItemProps,\n  NodeChangeData,\n} from \"./drag-context-menu-types\"\nimport { useMenuActionVisibility } from \"./drag-context-menu-hooks\"\n\n// Icons\nimport { GripVerticalIcon } from \"@/components/tiptap-icons/grip-vertical-icon\"\nimport { PaintBucketIcon } from \"@/components/tiptap-icons/paint-bucket-icon\"\nimport { ChevronRightIcon } from \"@/components/tiptap-icons/chevron-right-icon\"\nimport { Repeat2Icon } from \"@/components/tiptap-icons/repeat-2-icon\"\nimport { TextColorSmallIcon } from \"@/components/tiptap-icons/text-color-small-icon\"\nimport { AddRowAboveIcon } from \"@/components/tiptap-icons/add-row-above-icon\"\nimport { AddRowBelowIcon } from \"@/components/tiptap-icons/add-row-below-icon\"\nimport { DuplicateOutlineIcon } from \"@/components/tiptap-icons/duplicate-outline-icon\"\nimport { Icon } from \"@iconify/react\"\n\nconst ReplaceImageIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"material-symbols-light:replace-image-outline\" className={className} />\n)\n\nconst AddLinkIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"bitcoin-icons:link-outline\" className={className} />\n)\n\nconst EditIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"material-symbols:edit-outline\" className={className} />\n)\n\nconst IconPickerIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"material-symbols-light:draw-outline-rounded\" className={className} />\n)\n\nconst CtaIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"material-symbols-light:call-to-action-outline\" className={className} />\n)\n\nconst EditLinkIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"hugeicons:note-edit\" className={className} />\n)\n\nconst SetColumnsIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"material-symbols-light:view-column-outline\" className={className} />\n)\n\nconst SR_ONLY = {\n  position: \"absolute\",\n  width: \"1px\",\n  height: \"1px\",\n  padding: 0,\n  margin: \"-1px\",\n  overflow: \"hidden\",\n  clip: \"rect(0, 0, 0, 0)\",\n  whiteSpace: \"nowrap\",\n  borderWidth: 0,\n} as const\n\n// Helper function to safely get node position\nconst getNodePosition = (editor: any, node: TiptapNode | null): number => {\n  if (!editor || !node) return -1\n\n  const { state } = editor\n  const { doc, selection } = state\n\n  // Try to find the node in the document\n  let foundPos = -1\n\n  doc.descendants((descendantNode: TiptapNode, pos: number) => {\n    if (descendantNode === node) {\n      foundPos = pos\n      return false // Stop iteration\n    }\n  })\n\n  // If not found but we have a selection, use selection position\n  if (foundPos === -1 && selection) {\n    const { $from } = selection\n    // For custom nodes, we need to check if we're at the start of the document\n    if ($from.depth >= 0) {\n      foundPos = $from.before($from.depth)\n      // Handle edge case where node is at position 0\n      if (foundPos === -1 && $from.pos === 1) {\n        foundPos = 0\n      }\n    }\n  }\n\n  return foundPos\n}\n\nconst useNodeTransformActions = () => {\n  const text = useText()\n  const heading1 = useHeading({ level: 1 })\n  const heading2 = useHeading({ level: 2 })\n  const heading3 = useHeading({ level: 3 })\n  const bulletList = useList({ type: \"bulletList\" })\n  const orderedList = useList({ type: \"orderedList\" })\n  const taskList = useList({ type: \"taskList\" })\n  const blockquote = useBlockquote()\n  const codeBlock = useCodeBlock()\n\n  const mapper = (\n    action: ReturnType<\n      | typeof useText\n      | typeof useHeading\n      | typeof useList\n      | typeof useBlockquote\n      | typeof useCodeBlock\n    >\n  ) => ({\n    icon: action.Icon,\n    label: action.label,\n    onClick: action.handleToggle,\n    disabled: !action.canToggle,\n    isActive: action.isActive,\n  })\n\n  return [\n    mapper(text),\n    ...[heading1, heading2, heading3].map(mapper),\n    mapper(bulletList),\n    mapper(orderedList),\n    mapper(taskList),\n    mapper(blockquote),\n    mapper(codeBlock),\n  ]\n}\n\nconst BaseMenuItem: React.FC<MenuItemProps> = ({\n  icon: Icon,\n  label,\n  onClick,\n  disabled = false,\n  isActive = false,\n  shortcutBadge,\n}) => (\n  <MenuItem\n    render={\n      <Button data-style=\"ghost\" data-active-state={isActive ? \"on\" : \"off\"} />\n    }\n    onClick={onClick}\n    disabled={disabled}\n  >\n    <Icon className=\"tiptap-button-icon\" />\n    <span className=\"tiptap-button-text\">{label}</span>\n    {shortcutBadge}\n  </MenuItem>\n)\n\nconst SubMenuTrigger: React.FC<{\n  icon: React.ComponentType<{ className?: string }>\n  label: string\n  children: React.ReactNode\n}> = ({ icon: Icon, label, children }) => (\n  <Menu\n    placement=\"right\"\n    trigger={\n      <MenuItem\n        render={\n          <MenuButton\n            render={\n              <Button data-style=\"ghost\">\n                <Icon className=\"tiptap-button-icon\" />\n                <span className=\"tiptap-button-text\">{label}</span>\n                <Spacer />\n                <ChevronRightIcon className=\"tiptap-button-icon\" />\n              </Button>\n            }\n          />\n        }\n      />\n    }\n  >\n    <MenuContent portal>\n      <ComboboxList style={{ width: \"100%\" }}>{children}</ComboboxList>\n    </MenuContent>\n  </Menu>\n)\n\nconst TextColorMenuItem: React.FC<ColorMenuItemProps> = ({ color }) => {\n  const { addRecentColor } = useRecentColors()\n  const { isActive, handleColorText, label } = useColorText({\n    label: color.label,\n    textColor: color.value,\n    onApplied: ({ color, label }) =>\n      addRecentColor({ type: \"text\", label, value: color }),\n  })\n\n  return (\n    <MenuItem\n      render={\n        <Button\n          data-style=\"ghost\"\n          data-active-state={isActive ? \"on\" : \"off\"}\n        />\n      }\n      onClick={handleColorText}\n    >\n      <span className=\"tiptap-button-color-text\" style={{ color: color.value }}>\n        <TextColorSmallIcon\n          className=\"tiptap-button-icon\"\n          style={{ color: color.value, flexGrow: 1 }}\n        />\n      </span>\n      <span className=\"tiptap-button-text\">{label}</span>\n    </MenuItem>\n  )\n}\n\nconst HighlightColorMenuItem: React.FC<ColorMenuItemProps> = ({ color }) => {\n  const { addRecentColor } = useRecentColors()\n  const { isActive, handleColorHighlight, label } = useColorHighlight({\n    label: color.label,\n    highlightColor: color.value,\n    onApplied: ({ color, label }) =>\n      addRecentColor({ type: \"highlight\", label, value: color }),\n  })\n\n  return (\n    <MenuItem\n      render={\n        <Button\n          data-style=\"ghost\"\n          data-active-state={isActive ? \"on\" : \"off\"}\n        />\n      }\n      onClick={handleColorHighlight}\n    >\n      <span\n        className=\"tiptap-button-highlight\"\n        style={{ \"--highlight-color\": color.value } as React.CSSProperties}\n      />\n      <span className=\"tiptap-button-text\">{label}</span>\n    </MenuItem>\n  )\n}\n\nconst RecentColorMenuItem: React.FC<{\n  colorObj: RecentColor\n}> = ({ colorObj }) => {\n  const colorSet = colorObj.type === \"text\" ? TEXT_COLORS : HIGHLIGHT_COLORS\n  const color = getColorByValue(colorObj.value, colorSet)\n\n  const ColorComponent =\n    colorObj.type === \"text\" ? TextColorMenuItem : HighlightColorMenuItem\n\n  return <ColorComponent color={color} />\n}\n\nconst ColorActionGroup: React.FC = () => {\n  const { recentColors, isInitialized } = useRecentColors()\n\n  return (\n    <SubMenuTrigger icon={PaintBucketIcon} label=\"Color\">\n      {/* Recent Colors */}\n      {isInitialized && recentColors.length > 0 && (\n        <MenuGroup>\n          <MenuGroupLabel>Recent colors</MenuGroupLabel>\n          {recentColors.map((colorObj) => (\n            <RecentColorMenuItem key={colorObj.value} colorObj={colorObj} />\n          ))}\n          <Separator orientation=\"horizontal\" />\n        </MenuGroup>\n      )}\n\n      {/* Text Colors */}\n      <MenuGroup>\n        <MenuGroupLabel>Text color</MenuGroupLabel>\n        {TEXT_COLORS.map((textColor) => (\n          <TextColorMenuItem key={textColor.value} color={textColor} />\n        ))}\n      </MenuGroup>\n\n      <Separator orientation=\"horizontal\" />\n\n      {/* Highlight Colors */}\n      <MenuGroup>\n        <MenuGroupLabel>Highlight color</MenuGroupLabel>\n        {HIGHLIGHT_COLORS.map((highlightColor) => (\n          <HighlightColorMenuItem\n            key={highlightColor.value}\n            color={highlightColor}\n          />\n        ))}\n      </MenuGroup>\n    </SubMenuTrigger>\n  )\n}\n\nconst TransformActionGroup: React.FC = () => {\n  const actions = useNodeTransformActions()\n  return (\n    <SubMenuTrigger icon={Repeat2Icon} label=\"Turn Into\">\n      <MenuGroup>\n        <MenuGroupLabel>Turn into</MenuGroupLabel>\n        {actions.map((action) => (\n          <BaseMenuItem key={action.label} {...action} />\n        ))}\n      </MenuGroup>\n    </SubMenuTrigger>\n  )\n}\n\nconst ResetFormattingAction: React.FC = () => {\n  const { canReset, handleResetFormatting, label, Icon } =\n    useResetAllFormatting({\n      hideWhenUnavailable: true,\n      preserveMarks: [\"inlineThread\"],\n    })\n\n  return (\n    <BaseMenuItem\n      icon={Icon}\n      label={label}\n      disabled={!canReset}\n      onClick={handleResetFormatting}\n    />\n  )\n}\n\nconst ImageActionGroup: React.FC = () => {\n  const { canDownload, handleDownload, label, Icon } = useImageDownload({\n    hideWhenUnavailable: true,\n  })\n  const { editor } = useTiptapEditor()\n\n  const handleReplaceImage = React.useCallback(() => {\n    if (!editor) return\n    const { selection } = editor.state\n    const node = (selection as any).node\n    if (node && node.type.name === \"image\") {\n      const pos = selection.from\n      // Delete current image and insert imageUpload node\n      editor\n        .chain()\n        .focus()\n        .deleteRange({ from: pos, to: pos + node.nodeSize })\n        .setImageUploadNode()\n        .run()\n    }\n  }, [editor])\n\n  const handleAddLink = React.useCallback(() => {\n    if (!editor) return\n    const { selection } = editor.state\n    const node = (selection as any).node\n    if (node && node.type.name === \"image\") {\n      const pos = selection.from\n      const currentAttrs = node.attrs\n      // Delete current image and insert new one with isOpen=true to show embed modal\n      editor\n        .chain()\n        .focus()\n        .deleteRange({ from: pos, to: pos + node.nodeSize })\n        .insertContentAt(pos, {\n          type: \"image\",\n          attrs: {\n            ...currentAttrs,\n            src: null,\n            isOpen: true,\n          },\n        })\n        .run()\n    }\n  }, [editor])\n\n  return (\n    <>\n      <BaseMenuItem\n        icon={Icon}\n        label={label}\n        disabled={!canDownload}\n        onClick={handleDownload}\n      />\n      <BaseMenuItem\n        icon={ReplaceImageIcon}\n        label=\"Replace\"\n        onClick={handleReplaceImage}\n      />\n      <BaseMenuItem\n        icon={AddLinkIcon}\n        label=\"Add link\"\n        onClick={handleAddLink}\n      />\n\n      <Separator orientation=\"horizontal\" />\n    </>\n  )\n}\n\nconst VideoActionGroup: React.FC = () => {\n  const { editor } = useTiptapEditor()\n\n  const handleReplaceVideo = React.useCallback(() => {\n    if (!editor) return\n    const { selection } = editor.state\n    const node = (selection as any).node\n    if (node && node.type.name === \"video\") {\n      const pos = selection.from\n      // Delete current video and insert videoUpload node\n      editor\n        .chain()\n        .focus()\n        .deleteRange({ from: pos, to: pos + node.nodeSize })\n        .setVideoUploadNode()\n        .run()\n    }\n  }, [editor])\n\n  const handleAddLink = React.useCallback(() => {\n    if (!editor) return\n    const { selection } = editor.state\n    const node = (selection as any).node\n    if (node && node.type.name === \"video\") {\n      const pos = selection.from\n      const currentAttrs = node.attrs\n      // Delete current video and insert new one with isOpen=true to show embed modal\n      editor\n        .chain()\n        .focus()\n        .deleteRange({ from: pos, to: pos + node.nodeSize })\n        .insertContentAt(pos, {\n          type: \"video\",\n          attrs: {\n            ...currentAttrs,\n            src: null,\n            isOpen: true,\n          },\n        })\n        .run()\n    }\n  }, [editor])\n\n  return (\n    <>\n      <BaseMenuItem\n        icon={ReplaceImageIcon}\n        label=\"Replace\"\n        onClick={handleReplaceVideo}\n      />\n      <BaseMenuItem\n        icon={AddLinkIcon}\n        label=\"Add link\"\n        onClick={handleAddLink}\n      />\n\n      <Separator orientation=\"horizontal\" />\n    </>\n  )\n}\n\nconst AnnotationActionGroup: React.FC = () => {\n  const { editor } = useTiptapEditor()\n\n  const handleReplaceAnnotation = React.useCallback(() => {\n    if (!editor) return\n    const { selection } = editor.state\n    const node = (selection as any).node\n    if (node && node.type.name === \"annotation\") {\n      const pos = selection.from\n      const currentAttrs = node.attrs\n      // Delete current annotation and insert new one with isOpen=true to show selection modal\n      editor\n        .chain()\n        .focus()\n        .deleteRange({ from: pos, to: pos + node.nodeSize })\n        .insertContentAt(pos, {\n          type: \"annotation\",\n          attrs: {\n            ...currentAttrs,\n            annotationId: null,\n            finalSnapshot: null,\n            isOpen: true,\n          },\n        })\n        .run()\n    }\n  }, [editor])\n\n  const handleEditAnnotation = React.useCallback(() => {\n    if (!editor) return\n    const editorElement = editor.view?.dom as HTMLElement\n    const productId = editorElement?.getAttribute('data-product-id')\n    if (productId) {\n      window.location.href = `/overview/editor/hardware-docs/products/${productId}`\n    }\n  }, [editor])\n\n  return (\n    <>\n      <BaseMenuItem\n        icon={ReplaceImageIcon}\n        label=\"Replace\"\n        onClick={handleReplaceAnnotation}\n      />\n      <BaseMenuItem\n        icon={EditIcon}\n        label=\"Edit annotation\"\n        onClick={handleEditAnnotation}\n      />\n\n      <Separator orientation=\"horizontal\" />\n    </>\n  )\n}\n\nconst AddLineActionGroup: React.FC<{ nodePos: number; node: TiptapNode | null }> = ({\n  nodePos,\n  node\n}) => {\n  const { editor } = useTiptapEditor()\n\n  const handleAddLineAbove = React.useCallback(() => {\n    if (!editor) return\n\n    const { state, dispatch } = editor.view\n    const { tr } = state\n\n    let insertPos = nodePos\n\n    // Handle special case for first position\n    if (nodePos < 0 || !state.doc.nodeAt(nodePos)) {\n      // If we can't find the node, try to insert at the current selection\n      const { selection } = state\n      insertPos = selection.$from.before(Math.max(0, selection.$from.depth))\n\n      // If still invalid, insert at the beginning of the document\n      if (insertPos < 0) {\n        insertPos = 0\n      }\n    }\n\n    const newNode = state.schema.nodes.paragraph.create()\n\n    if (newNode) {\n      try {\n        // Insert the node at the calculated position\n        tr.insert(Math.max(0, insertPos), newNode)\n        dispatch(tr)\n\n        // Set cursor position in the new node\n        setTimeout(() => {\n          const newPos = Math.max(0, insertPos)\n          editor.commands.setTextSelection({\n            from: newPos + 1,\n            to: newPos + 1\n          })\n        }, 10)\n      } catch (error) {\n        console.error('Error inserting node above:', error)\n        // Fallback: try to insert at current position\n        editor.commands.insertContentAt(\n          editor.state.selection.from,\n          { type: 'paragraph' }\n        )\n      }\n    }\n  }, [editor, nodePos])\n\n  const handleAddLineBelow = React.useCallback(() => {\n    if (!editor) return\n\n    const { state, dispatch } = editor.view\n    const { tr } = state\n\n    let insertPos = nodePos\n\n    // Calculate the position after the current node\n    if (nodePos >= 0) {\n      const currentNode = state.doc.nodeAt(nodePos)\n      if (currentNode) {\n        insertPos = nodePos + currentNode.nodeSize\n      }\n    } else {\n      // Fallback to current selection end\n      insertPos = state.selection.to\n    }\n\n    const newNode = state.schema.nodes.paragraph.create()\n\n    if (newNode) {\n      try {\n        tr.insert(insertPos, newNode)\n        dispatch(tr)\n\n        // Set cursor in the new node\n        setTimeout(() => {\n          editor.commands.setTextSelection({\n            from: insertPos + 1,\n            to: insertPos + 1\n          })\n        }, 10)\n      } catch (error) {\n        console.error('Error inserting node below:', error)\n        // Fallback\n        editor.commands.insertContentAt(\n          editor.state.selection.to,\n          { type: 'paragraph' }\n        )\n      }\n    }\n  }, [editor, nodePos])\n\n  // Check if editor exists and nodePos is valid (can be 0 for first node)\n  const isDisabled = !editor || nodePos < 0\n\n  return (\n    <MenuGroup>\n      <BaseMenuItem\n        icon={AddRowAboveIcon}\n        label=\"Add line above\"\n        onClick={handleAddLineAbove}\n        disabled={isDisabled}\n      />\n      <BaseMenuItem\n        icon={AddRowBelowIcon}\n        label=\"Add line below\"\n        onClick={handleAddLineBelow}\n        disabled={isDisabled}\n      />\n    </MenuGroup>\n  )\n}\n\nconst CoreActionGroup: React.FC = () => {\n  const {\n    handleDuplicate,\n    canDuplicate,\n    label,\n  } = useDuplicate()\n  const {\n    handleCopyToClipboard,\n    canCopyToClipboard,\n    label: copyLabel,\n    Icon: CopyIcon,\n  } = useCopyToClipboard()\n\n  return (\n    <>\n      <MenuGroup>\n        <BaseMenuItem\n          icon={DuplicateOutlineIcon}\n          label={label}\n          onClick={handleDuplicate}\n          disabled={!canDuplicate}\n          shortcutBadge={<DuplicateShortcutBadge />}\n        />\n        <BaseMenuItem\n          icon={CopyIcon}\n          label={copyLabel}\n          onClick={handleCopyToClipboard}\n          disabled={!canCopyToClipboard}\n          shortcutBadge={<CopyToClipboardShortcutBadge />}\n        />\n      </MenuGroup>\n\n      <Separator orientation=\"horizontal\" />\n    </>\n  )\n}\n\nconst AIActionGroup: React.FC = () => {\n  const { handleAiAsk, canAiAsk, Icon: AiAskIcon } = useAiAsk()\n\n  if (!canAiAsk) return null\n\n  return (\n    <>\n      <MenuGroup>\n        {canAiAsk && (\n          <BaseMenuItem\n            icon={AiAskIcon}\n            label=\"Ask AI\"\n            onClick={handleAiAsk}\n            shortcutBadge={<AskAiShortcutBadge />}\n          />\n        )}\n      </MenuGroup>\n\n      <Separator orientation=\"horizontal\" />\n    </>\n  )\n}\n\nconst DeleteActionGroup: React.FC<{ node: TiptapNode | null; nodePos: number }> = ({\n  node,\n  nodePos\n}) => {\n  const { editor } = useTiptapEditor()\n  const { handleDeleteNode, canDeleteNode, label, Icon } = useDeleteNode()\n\n  const handleDelete = React.useCallback(() => {\n    if (!editor) return\n\n    const { state, dispatch } = editor.view\n    const { tr } = state\n\n    // For custom nodes, use special handling\n    if (node && ['cardNode', 'explorerCard', 'bomNode'].includes(node.type.name)) {\n      // Calculate the actual position\n      let deletePos = nodePos\n\n      if (deletePos < 0) {\n        // Try to find the node position\n        deletePos = getNodePosition(editor, node)\n      }\n\n      // If we still can't find it, use selection\n      if (deletePos < 0) {\n        const { selection } = state\n        deletePos = selection.$from.before(Math.max(0, selection.$from.depth))\n      }\n\n      if (deletePos >= 0) {\n        const nodeAtPos = state.doc.nodeAt(deletePos)\n        if (nodeAtPos) {\n          // Delete the node and its size\n          tr.delete(deletePos, deletePos + nodeAtPos.nodeSize)\n          dispatch(tr)\n\n          // Set selection to a safe position\n          setTimeout(() => {\n            const newPos = Math.max(0, deletePos - 1)\n            editor.commands.setTextSelection(newPos)\n          }, 0)\n\n          return\n        }\n      }\n    }\n\n    // Fallback to default delete behavior\n    handleDeleteNode()\n  }, [editor, node, nodePos, handleDeleteNode])\n\n  return (\n    <MenuGroup>\n      <BaseMenuItem\n        icon={Icon}\n        label={label}\n        onClick={handleDelete}\n        disabled={!canDeleteNode}\n        shortcutBadge={<DeleteNodeShortcutBadge />}\n      />\n    </MenuGroup>\n  )\n}\n\n// Custom icon components for Explorer node actions\nconst TreeViewIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"ph:tree-view-light\" className={className} />\n)\n\nconst NoteIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"hugeicons:note\" className={className} />\n)\n\nconst PropertyAddIcon: React.FC<{ className?: string }> = ({ className }) => (\n  <Icon icon=\"hugeicons:property-add\" className={className} />\n)\n\nconst BomNodeActions: React.FC<{ node: TiptapNode | null }> = ({ node }) => {\n  const { editor } = useTiptapEditor()\n\n  const handleAddProperty = React.useCallback(() => {\n    if (!editor) return\n\n    // Find the position of the BOM node\n    const { state } = editor\n    let bomNodePos = -1\n\n    state.doc.nodesBetween(0, state.doc.content.size, (n, pos) => {\n      if (n.type.name === 'bomNode' && n === node) {\n        bomNodePos = pos\n        return false // Stop iteration\n      }\n    })\n\n    if (bomNodePos === -1) return\n\n    // Navigate to the table inside the BOM node\n    const bomNode = state.doc.nodeAt(bomNodePos)\n    if (!bomNode) return\n\n    const tableNode = bomNode.content.firstChild\n    if (!tableNode || tableNode.type.name !== 'table') return\n\n    // Get the first row to find a cell position\n    const firstRow = tableNode.content.firstChild\n    if (!firstRow) return\n\n    // Get the last cell in the first row to add column after it\n    const lastCell = firstRow.content.lastChild\n    if (!lastCell) return\n\n    // Calculate position of the last cell (inside the BOM node + table + row + cells)\n    let cellPos = bomNodePos + 1 // Enter BOM node\n    cellPos += 1 // Enter table\n    cellPos += 1 // Enter first row\n\n    // Sum up all cell sizes to get to the last cell\n    for (let i = 0; i < firstRow.content.childCount; i++) {\n      const cell = firstRow.content.child(i)\n      if (i === firstRow.content.childCount - 1) {\n        // We're at the last cell, move inside it\n        cellPos += 1\n        break\n      }\n      cellPos += cell.nodeSize\n    }\n\n    // Add column after the last column\n    editor.chain().focus().setTextSelection(cellPos).addColumnAfter().run()\n  }, [editor, node])\n\n  // Only show for BOM nodes\n  if (!node || node.type.name !== 'bomNode') {\n    return null\n  }\n\n  return (\n    <MenuGroup>\n      <BaseMenuItem\n        icon={PropertyAddIcon}\n        label=\"Add property\"\n        onClick={handleAddProperty}\n      />\n    </MenuGroup>\n  )\n}\n\nconst CardNodeActions: React.FC<{\n  node: TiptapNode | null\n}> = ({ node }) => {\n  const { editor } = useTiptapEditor()\n\n  // Get pages from CardNode extension options\n  const cardNodeExtension = editor?.extensionManager?.extensions?.find(\n    (ext: any) => ext.name === 'cardNode'\n  )\n  const pages = (cardNodeExtension?.options?.pages || []) as Array<{ id: string; name: string; category?: string }>\n  const onNavigateToPage = (editor as any)?.tnkrOnNavigateToPage\n\n  const [showIconPicker, setShowIconPicker] = React.useState(false)\n  const [showUrlModal, setShowUrlModal] = React.useState(false)\n  const [showCtaModal, setShowCtaModal] = React.useState(false)\n\n  const handleIconSelect = React.useCallback((icon: string) => {\n    if (!editor || !node) return\n\n    // Find the position of the card node\n    const { state } = editor\n    let cardNodePos = -1\n\n    state.doc.nodesBetween(0, state.doc.content.size, (n, pos) => {\n      if (n.type.name === 'cardNode' && n === node) {\n        cardNodePos = pos\n        return false\n      }\n    })\n\n    if (cardNodePos === -1) return\n\n    const currentCards = node.attrs.cards || []\n    const selectedCardIndex = node.attrs.selectedCardIndex || 0\n    const updatedCards = [...currentCards]\n\n    if (updatedCards[selectedCardIndex]) {\n      updatedCards[selectedCardIndex] = {\n        ...updatedCards[selectedCardIndex],\n        icon,\n      }\n    }\n\n    editor\n      .chain()\n      .focus()\n      .command(({ tr }) => {\n        tr.setNodeMarkup(cardNodePos, undefined, {\n          ...node.attrs,\n          cards: updatedCards,\n        })\n        return true\n      })\n      .run()\n  }, [editor, node])\n\n  const handleUrlSubmit = React.useCallback((url: string) => {\n    if (!editor || !node) return\n\n    const { state } = editor\n    let cardNodePos = -1\n\n    state.doc.nodesBetween(0, state.doc.content.size, (n, pos) => {\n      if (n.type.name === 'cardNode' && n === node) {\n        cardNodePos = pos\n        return false\n      }\n    })\n\n    if (cardNodePos === -1) return\n\n    const currentCards = node.attrs.cards || []\n    const selectedCardIndex = node.attrs.selectedCardIndex || 0\n    const updatedCards = [...currentCards]\n\n    if (updatedCards[selectedCardIndex]) {\n      updatedCards[selectedCardIndex] = {\n        ...updatedCards[selectedCardIndex],\n        linkUrl: url || null,\n      }\n    }\n\n    editor\n      .chain()\n      .focus()\n      .command(({ tr }) => {\n        tr.setNodeMarkup(cardNodePos, undefined, {\n          ...node.attrs,\n          cards: updatedCards,\n        })\n        return true\n      })\n      .run()\n  }, [editor, node])\n\n  const handlePageSelect = React.useCallback((page: PageData) => {\n    if (!editor || !node) return\n\n    const { state } = editor\n    let cardNodePos = -1\n\n    state.doc.nodesBetween(0, state.doc.content.size, (n, pos) => {\n      if (n.type.name === 'cardNode' && n === node) {\n        cardNodePos = pos\n        return false\n      }\n    })\n\n    if (cardNodePos === -1) return\n\n    const currentCards = node.attrs.cards || []\n    const selectedCardIndex = node.attrs.selectedCardIndex || 0\n    const updatedCards = [...currentCards]\n\n    if (updatedCards[selectedCardIndex]) {\n      updatedCards[selectedCardIndex] = {\n        ...updatedCards[selectedCardIndex],\n        linkPage: page || null,\n      }\n    }\n\n    editor\n      .chain()\n      .focus()\n      .command(({ tr }) => {\n        tr.setNodeMarkup(cardNodePos, undefined, {\n          ...node.attrs,\n          cards: updatedCards,\n        })\n        return true\n      })\n      .run()\n  }, [editor, node])\n\n  const handleRemoveUrl = React.useCallback(() => {\n    handleUrlSubmit('')\n  }, [handleUrlSubmit])\n\n  const handleRemovePage = React.useCallback(() => {\n    if (!editor || !node) return\n\n    const { state } = editor\n    let cardNodePos = -1\n\n    state.doc.nodesBetween(0, state.doc.content.size, (n, pos) => {\n      if (n.type.name === 'cardNode' && n === node) {\n        cardNodePos = pos\n        return false\n      }\n    })\n\n    if (cardNodePos === -1) return\n\n    const currentCards = node.attrs.cards || []\n    const selectedCardIndex = node.attrs.selectedCardIndex || 0\n    const updatedCards = [...currentCards]\n\n    if (updatedCards[selectedCardIndex]) {\n      updatedCards[selectedCardIndex] = {\n        ...updatedCards[selectedCardIndex],\n        linkPage: null,\n      }\n    }\n\n    editor\n      .chain()\n      .focus()\n      .command(({ tr }) => {\n        tr.setNodeMarkup(cardNodePos, undefined, {\n          ...node.attrs,\n          cards: updatedCards,\n        })\n        return true\n      })\n      .run()\n  }, [editor, node])\n\n  // Create custom editor for LinkContent (for card nodes)\n  // Use Object.create to preserve prototype methods like on() and off()\n  const cardLinkEditor = React.useMemo(() => {\n    if (!editor || !node || node.type.name !== 'cardNode') return editor\n\n    const currentCards = node.attrs.cards || []\n    const selectedCardIndex = node.attrs.selectedCardIndex || 0\n    const selectedCard = currentCards[selectedCardIndex]\n    const currentUrl = selectedCard?.linkUrl || null\n    const currentPage = selectedCard?.linkPage || null\n    const hasLink = !!(currentUrl || currentPage)\n\n    const customEditor = Object.create(editor) as Editor\n\n    // Override getAttributes\n    customEditor.getAttributes = (name: string) => {\n      if (name === 'link') {\n        return {\n          href: currentUrl || (currentPage ? `#${currentPage.name.toLowerCase().replace(/\\s+/g, '-')}` : ''),\n          isInternal: !!currentPage,\n          pageId: currentPage?.id || null,\n          pageName: currentPage?.name || null,\n        }\n      }\n      return editor?.getAttributes(name) || {}\n    }\n\n    // Override isActive\n    customEditor.isActive = (name: string) => {\n      if (name === 'link') {\n        return hasLink\n      }\n      return editor?.isActive(name) || false\n    }\n\n    // Override can()\n    const originalCan = editor.can.bind(editor)\n    customEditor.can = (() => {\n      const canObj = originalCan()\n      const originalSetMark = canObj.setMark?.bind(canObj)\n\n      return {\n        ...canObj,\n        setMark: (name: string) => {\n          if (name === 'link') return true\n          return originalSetMark?.(name) || false\n        },\n      }\n    }) as any\n\n    // Override chain()\n    const originalChain = editor.chain.bind(editor)\n    customEditor.chain = (() => {\n      const chainObj = originalChain()\n      const originalFocus = chainObj.focus?.bind(chainObj)\n\n      return {\n        ...chainObj,\n        focus: () => {\n          const focusObj = originalFocus?.() || {}\n\n          return {\n            ...focusObj,\n            extendMarkRange: () => ({\n              setLink: (attrs: any) => ({\n                run: () => {\n                  if (attrs.isInternal && attrs.pageId && attrs.pageName) {\n                    handlePageSelect({ id: attrs.pageId, name: attrs.pageName })\n                  } else if (attrs.href) {\n                    handleUrlSubmit(attrs.href)\n                  }\n                  return true\n                },\n              }),\n              unsetLink: () => ({\n                setMeta: () => ({\n                  run: () => {\n                    handleRemoveUrl()\n                    handleRemovePage()\n                    return true\n                  },\n                }),\n              }),\n            }),\n          }\n        },\n      }\n    }) as any\n\n    return customEditor\n  }, [editor, node, handleUrlSubmit, handlePageSelect, handleRemoveUrl, handleRemovePage])\n\n  const handleCtaSubmit = React.useCallback((cta: string) => {\n    if (!editor || !node) return\n\n    const { state } = editor\n    let cardNodePos = -1\n\n    state.doc.nodesBetween(0, state.doc.content.size, (n, pos) => {\n      if (n.type.name === 'cardNode' && n === node) {\n        cardNodePos = pos\n        return false\n      }\n    })\n\n    if (cardNodePos === -1) return\n\n    const currentCards = node.attrs.cards || []\n    const selectedCardIndex = node.attrs.selectedCardIndex || 0\n    const updatedCards = [...currentCards]\n\n    if (updatedCards[selectedCardIndex]) {\n      updatedCards[selectedCardIndex] = {\n        ...updatedCards[selectedCardIndex],\n        ctaText: cta || null,\n      }\n    }\n\n    editor\n      .chain()\n      .focus()\n      .command(({ tr }) => {\n        tr.setNodeMarkup(cardNodePos, undefined, {\n          ...node.attrs,\n          cards: updatedCards,\n        })\n        return true\n      })\n      .run()\n  }, [editor, node])\n\n  const handleColumnsChange = React.useCallback((columns: number) => {\n    if (!editor || !node) return\n\n    const { state } = editor\n    let cardNodePos = -1\n\n    state.doc.nodesBetween(0, state.doc.content.size, (n, pos) => {\n      if (n.type.name === 'cardNode' && n === node) {\n        cardNodePos = pos\n        return false\n      }\n    })\n\n    if (cardNodePos === -1) return\n\n    const currentCards = node.attrs.cards || []\n    const currentColumns = node.attrs.gridColumns || 1\n\n    // Adjust the number of cards to match the new column count\n    let newCards = [...currentCards]\n\n    if (columns > currentCards.length) {\n      // Add new empty cards\n      const cardsToAdd = columns - currentCards.length\n      for (let i = 0; i < cardsToAdd; i++) {\n        newCards.push({\n          icon: 'mdi:cube-outline',\n          title: 'Card Title',\n          description: 'Add a description for your card',\n          linkUrl: null,\n          ctaText: null,\n        })\n      }\n    } else if (columns < currentCards.length) {\n      // Remove extra cards from the end\n      newCards = newCards.slice(0, columns)\n    }\n\n    editor\n      .chain()\n      .focus()\n      .command(({ tr }) => {\n        tr.setNodeMarkup(cardNodePos, undefined, {\n          ...node.attrs,\n          gridColumns: columns,\n          cards: newCards,\n          selectedCardIndex: Math.min(node.attrs.selectedCardIndex || 0, columns - 1),\n        })\n        return true\n      })\n      .run()\n  }, [editor, node])\n\n  // Only show for card nodes\n  if (!node || node.type.name !== 'cardNode') {\n    return null\n  }\n\n  const currentCards = node.attrs.cards || []\n  const selectedCardIndex = node.attrs.selectedCardIndex || 0\n  const selectedCard = currentCards[selectedCardIndex] || currentCards[0]\n\n  return (\n    <>\n      <MenuGroup>\n        {/* Edit Icon - with submenu */}\n        <Menu\n          placement=\"right\"\n          trigger={\n            <MenuItem\n              render={\n                <MenuButton\n                  render={\n                    <Button data-style=\"ghost\">\n                      <IconPickerIcon className=\"tiptap-button-icon\" />\n                      <span className=\"tiptap-button-text\">Edit icon</span>\n                      <Spacer />\n                      <ChevronRightIcon className=\"tiptap-button-icon\" />\n                    </Button>\n                  }\n                />\n              }\n            />\n          }\n        >\n          <MenuContent portal gutter={12}>\n            <div style={{ padding: 0 }}>\n              <CardIconPicker\n                currentIcon={selectedCard?.icon || 'mdi:cube-outline'}\n                onIconSelect={handleIconSelect}\n                onClose={() => {}}\n              />\n            </div>\n          </MenuContent>\n        </Menu>\n\n        {/* Link - with submenu */}\n        <Menu\n          placement=\"right\"\n          trigger={\n            <MenuItem\n              render={\n                <MenuButton\n                  render={\n                    <Button data-style=\"ghost\">\n                      <EditLinkIcon className=\"tiptap-button-icon\" />\n                      <span className=\"tiptap-button-text\">Add Link</span>\n                      <Spacer />\n                      <ChevronRightIcon className=\"tiptap-button-icon\" />\n                    </Button>\n                  }\n                />\n              }\n            />\n          }\n        >\n          <MenuContent portal gutter={12}>\n            <div style={{ padding: 0 }}>\n              <LinkContent\n                editor={cardLinkEditor}\n                pages={pages}\n              />\n            </div>\n          </MenuContent>\n        </Menu>\n\n        {/* Add CTA - with submenu */}\n        <Menu\n          placement=\"right\"\n          trigger={\n            <MenuItem\n              render={\n                <MenuButton\n                  render={\n                    <Button data-style=\"ghost\">\n                      <CtaIcon className=\"tiptap-button-icon\" />\n                      <span className=\"tiptap-button-text\">Add CTA</span>\n                      <Spacer />\n                      <ChevronRightIcon className=\"tiptap-button-icon\" />\n                    </Button>\n                  }\n                />\n              }\n            />\n          }\n        >\n          <MenuContent portal gutter={12}>\n            <div style={{ padding: 0 }}>\n              <CardCtaModal\n                currentCta={selectedCard?.ctaText || null}\n                hasLink={!!selectedCard?.linkUrl}\n                onCtaSubmit={handleCtaSubmit}\n                onClose={() => {}}\n              />\n            </div>\n          </MenuContent>\n        </Menu>\n\n        {/* Set Columns - with submenu */}\n        <Menu\n          placement=\"right\"\n          trigger={\n            <MenuItem\n              render={\n                <MenuButton\n                  render={\n                    <Button data-style=\"ghost\">\n                      <SetColumnsIcon className=\"tiptap-button-icon\" />\n                      <span className=\"tiptap-button-text\">Set Columns</span>\n                      <Spacer />\n                      <ChevronRightIcon className=\"tiptap-button-icon\" />\n                    </Button>\n                  }\n                />\n              }\n            />\n          }\n        >\n          <MenuContent portal gutter={12}>\n            <div style={{ padding: 0 }}>\n              <CardColumnsModal\n                currentColumns={node.attrs.gridColumns || 1}\n                onColumnsChange={handleColumnsChange}\n                onClose={() => {}}\n              />\n            </div>\n          </MenuContent>\n        </Menu>\n      </MenuGroup>\n    </>\n  )\n}\n\nconst ExplorerNodeActions: React.FC<{ node: TiptapNode | null }> = ({ node }) => {\n  const { editor } = useTiptapEditor()\n\n  const showPartsTree = node?.attrs?.showPartsTree ?? true\n\n  const handleTogglePartsTree = React.useCallback(() => {\n    if (!editor) return\n\n    // Find the position of the current node\n    const { state } = editor\n    const { selection } = state\n    let nodePos = selection.$anchor.pos\n\n    // Find the explorer card node at or before the current position\n    state.doc.nodesBetween(0, state.doc.content.size, (n, pos) => {\n      if (n.type.name === 'explorerCard' && n === node) {\n        nodePos = pos\n        return false // Stop iteration\n      }\n    })\n\n    // Update the showPartsTree attribute\n    if (node) {\n      editor\n        .chain()\n        .focus()\n        .command(({ tr }) => {\n          tr.setNodeMarkup(nodePos, undefined, {\n            ...node.attrs,\n            showPartsTree: !showPartsTree,\n          })\n          return true\n        })\n        .run()\n    }\n  }, [editor, node, showPartsTree])\n\n  const handleAddNote = React.useCallback(() => {\n    if (!editor || !node) return\n\n    // Trigger the add note button within the explorer node\n    // We'll dispatch a custom event that the ExplorerCardNodeView will listen to\n    const event = new CustomEvent('explorer-add-note', {\n      detail: { nodeId: node.attrs.id },\n    })\n    window.dispatchEvent(event)\n  }, [editor, node])\n\n  // Only show for explorer card nodes\n  if (!node || node.type.name !== 'explorerCard') {\n    return null\n  }\n\n  return (\n    <MenuGroup>\n      <MenuItem\n        render={\n          <Button data-style=\"ghost\" />\n        }\n        onClick={handleTogglePartsTree}\n      >\n        <TreeViewIcon className=\"tiptap-button-icon\" />\n        <span className=\"tiptap-button-text\">Show parts tree</span>\n        <Spacer />\n        <div\n          className=\"w-10 h-5 rounded-full transition-colors duration-200\"\n          style={{\n            position: 'relative',\n            display: 'flex',\n            alignItems: 'center',\n            padding: '2px',\n            backgroundColor: showPartsTree ? 'var(--tnkr-primary)' : '#313133',\n          }}\n        >\n          <div\n            className=\"w-4 h-4 rounded-full bg-white transition-transform duration-200\"\n            style={{\n              transform: showPartsTree ? 'translateX(20px)' : 'translateX(0)',\n            }}\n          />\n        </div>\n      </MenuItem>\n      <BaseMenuItem\n        icon={NoteIcon}\n        label=\"Add notes\"\n        onClick={handleAddNote}\n      />\n    </MenuGroup>\n  )\n}\n\nexport const DragContextMenu: React.FC<DragContextMenuProps> = ({\n  editor: providedEditor,\n  withSlashCommandTrigger = true,\n  mobileBreakpoint = 768,\n  ...props\n}) => {\n  const { editor } = useTiptapEditor(providedEditor)\n  const { aiGenerationActive, isDragging } = useUiEditorState(editor)\n  const isMobile = useIsMobile(mobileBreakpoint)\n  const [open, setOpen] = React.useState(false)\n  const [node, setNode] = React.useState<TiptapNode | null>(null)\n  const [nodePos, setNodePos] = React.useState<number>(-1)\n  const [isDraggingMenu, setIsDraggingMenu] = React.useState(false)\n  const menuRef = React.useRef<HTMLDivElement>(null)\n\n  const handleNodeChange = React.useCallback((data: NodeChangeData) => {\n    if (data.node) {\n      setNode(data.node)\n\n      // Better position handling for custom nodes\n      let position = data.pos\n\n      // Special handling for custom nodes at the start of the document\n      if (position < 0 && data.node) {\n        position = getNodePosition(editor, data.node)\n      }\n\n      // If still invalid and we have a custom node, try to use selection\n      if (position < 0 && editor && ['cardNode', 'explorerCard', 'bomNode'].includes(data.node.type.name)) {\n        const { selection } = editor.state\n        if (selection && selection.$from) {\n          // For nodes at the very start, position might be 0\n          const depth = selection.$from.depth\n          position = depth > 0 ? selection.$from.before(depth) : 0\n        }\n      }\n\n      setNodePos(position)\n    }\n  }, [editor])\n\n  React.useEffect(() => {\n    if (!editor) return\n    editor.commands.setLockDragHandle(open)\n    editor.commands.setMeta(\"lockDragHandle\", open)\n  }, [editor, open])\n\n  const {\n    hasAnyActionGroups,\n    hasColorActions,\n    hasTransformActions,\n    hasResetFormatting,\n    hasImage,\n    hasVideo,\n    hasAnnotation,\n  } = useMenuActionVisibility(editor)\n\n  const dynamicPositions = React.useMemo(() => {\n    return {\n      middleware: [\n        offset((props) => {\n          const { rects } = props\n          const nodeHeight = rects.reference.height\n          const dragHandleHeight = rects.floating.height\n\n          const crossAxis = nodeHeight / 2 - dragHandleHeight / 2\n\n          return {\n            mainAxis: 16,\n            // if height is more than 40px, then it's likely a block node\n            crossAxis: nodeHeight > 40 ? 0 : crossAxis,\n          }\n        }),\n      ],\n    }\n  }, [])\n\n  const handleOnMenuClose = React.useCallback(() => {\n    if (editor) {\n      editor.commands.setMeta(\"hideDragHandle\", true)\n    }\n  }, [editor])\n\n  const onElementDragStart = React.useCallback(() => {\n    if (!editor) return\n    editor.commands.setIsDragging(true)\n  }, [editor])\n\n  const onElementDragEnd = React.useCallback(() => {\n    if (!editor) return\n    editor.commands.setIsDragging(false)\n  }, [editor])\n\n  if (!editor) return null\n\n  return (\n    <DragHandle\n      editor={editor}\n      onNodeChange={handleNodeChange}\n      computePositionConfig={dynamicPositions}\n      onElementDragStart={onElementDragStart}\n      onElementDragEnd={onElementDragEnd}\n      {...props}\n    >\n      <ButtonGroup\n        orientation=\"horizontal\"\n        style={{\n          ...(aiGenerationActive || isMobile || isTextSelectionValid(editor)\n            ? { opacity: 0, pointerEvents: \"none\" }\n            : {}),\n          ...(isDragging ? { opacity: 0 } : {}),\n        }}\n      >\n        {withSlashCommandTrigger && (\n          <SlashCommandTriggerButton\n            node={node}\n            nodePos={nodePos}\n            data-weight=\"small\"\n          />\n        )}\n\n        <Menu\n          open={open}\n          onOpenChange={setOpen}\n          placement=\"left\"\n          trigger={\n            <MenuButton\n              render={\n                <Button\n                  data-style=\"ghost\"\n                  tabIndex={-1}\n                  tooltip={\n                    <>\n                      <div><span className=\"text-white\">Drag</span> <span className=\"text-white/50\">to move</span></div>\n                      <div><span className='text-white'>Click</span> <span className=\"text-white/50\">to open menu</span></div>\n                    </>\n                  }\n                  data-weight=\"small\"\n                  style={{\n                    cursor: \"grab\",\n                    ...(open ? { pointerEvents: \"none\" } : {}),\n                  }}\n                  onMouseDown={() => {\n                    // Improved node selection with fallback\n                    const actualPos = nodePos >= 0 ? nodePos : getNodePosition(editor, node)\n                    if (actualPos >= 0) {\n                      selectNodeAndHideFloating(editor, actualPos)\n                    }\n                  }}\n                >\n                  <GripVerticalIcon className=\"tiptap-button-icon\" />\n                </Button>\n              }\n            />\n          }\n        >\n          <MenuContent\n            onClose={handleOnMenuClose}\n            autoFocusOnHide={false}\n            preventBodyScroll={true}\n            portal\n            ref={menuRef}\n            style={{\n              cursor: isDraggingMenu ? 'grabbing' : 'auto',\n              borderRadius: '8px',\n            }}\n            onMouseDown={(e) => {\n              // Enable dragging when clicking on the menu header area\n              const target = e.target as HTMLElement\n              if (target.closest('.menu-drag-handle')) {\n                setIsDraggingMenu(true)\n                e.preventDefault()\n\n                const startX = e.clientX\n                const startY = e.clientY\n                const menu = menuRef.current\n                if (!menu) return\n\n                const rect = menu.getBoundingClientRect()\n                const offsetX = startX - rect.left\n                const offsetY = startY - rect.top\n\n                const handleMouseMove = (e: MouseEvent) => {\n                  if (!menu) return\n                  menu.style.position = 'fixed'\n                  menu.style.left = `${e.clientX - offsetX}px`\n                  menu.style.top = `${e.clientY - offsetY}px`\n                }\n\n                const handleMouseUp = () => {\n                  setIsDraggingMenu(false)\n                  document.removeEventListener('mousemove', handleMouseMove)\n                  document.removeEventListener('mouseup', handleMouseUp)\n                }\n\n                document.addEventListener('mousemove', handleMouseMove)\n                document.addEventListener('mouseup', handleMouseUp)\n              }\n            }}\n          >\n            <Combobox style={SR_ONLY} />\n            <ComboboxList style={{ minWidth: \"15rem\" }}>\n              <CardNodeActions node={node} />\n              <ExplorerNodeActions node={node} />\n              <BomNodeActions node={node} />\n                            <ColumnNodeMenu editor={editor} node={node} nodePos={nodePos} />\n\n\n              {(node?.type.name === 'cardNode' || node?.type.name === 'explorerCard' || node?.type.name === 'bomNode' || node?.type.name === 'columnList' || node?.type.name === 'column') && (\n                <Separator orientation=\"horizontal\" />\n              )}\n\n              <MenuGroup>\n                {hasTransformActions && <TransformActionGroup />}\n                {hasResetFormatting && <ResetFormattingAction />}\n                {hasImage && <ImageActionGroup />}\n                {hasVideo && <VideoActionGroup />}\n                {hasAnnotation && <AnnotationActionGroup />}\n              </MenuGroup>\n\n              {hasAnyActionGroups && <Separator orientation=\"horizontal\" />}\n\n              <AddLineActionGroup nodePos={nodePos} node={node} />\n\n              {(node?.type.name === 'cardNode' || node?.type.name === 'explorerCard' || node?.type.name === 'bomNode') && (\n                <Separator orientation=\"horizontal\" />\n              )}\n\n              <CoreActionGroup />\n\n              <AIActionGroup />\n\n              <DeleteActionGroup node={node} nodePos={nodePos} />\n            </ComboboxList>\n          </MenuContent>\n        </Menu>\n      </ButtonGroup>\n    </DragHandle>\n  )\n}","import { useRef, useEffect } from \"react\"\n\n/**\n * Hook that executes a callback when the component unmounts.\n *\n * @param callback Function to be called on component unmount\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const useUnmount = (callback: (...args: Array<any>) => any) => {\n  const ref = useRef(callback)\n  ref.current = callback\n\n  useEffect(\n    () => () => {\n      ref.current()\n    },\n    []\n  )\n}\n\nexport default useUnmount\n","import throttle from \"lodash.throttle\"\nimport * as React from \"react\"\nimport { useUnmount } from \"./use-unmount\"\n\ninterface ThrottleSettings {\n  leading?: boolean | undefined\n  trailing?: boolean | undefined\n}\n\nconst defaultOptions: ThrottleSettings = {\n  leading: false,\n  trailing: true,\n}\n\n/**\n * A hook that returns a throttled callback function.\n *\n * @param fn The function to throttle\n * @param wait The time in ms to wait before calling the function\n * @param dependencies The dependencies to watch for changes\n * @param options The throttle options\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useThrottledCallback<T extends (...args: any[]) => any>(\n  fn: T,\n  wait = 250,\n  dependencies: React.DependencyList = [],\n  options: ThrottleSettings = defaultOptions\n): {\n  (this: ThisParameterType<T>, ...args: Parameters<T>): ReturnType<T>\n  cancel: () => void\n  flush: () => void\n} {\n  const handler = React.useMemo(\n    () => throttle<T>(fn, wait, options),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    dependencies\n  )\n\n  useUnmount(() => {\n    handler.cancel()\n  })\n\n  return handler\n}\n\nexport default useThrottledCallback\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useThrottledCallback } from \"./use-throttled-callback\"\n\nexport interface WindowSizeState {\n  /**\n   * The width of the window's visual viewport in pixels.\n   */\n  width: number\n  /**\n   * The height of the window's visual viewport in pixels.\n   */\n  height: number\n  /**\n   * The distance from the top of the visual viewport to the top of the layout viewport.\n   * Particularly useful for handling mobile keyboard appearance.\n   */\n  offsetTop: number\n  /**\n   * The distance from the left of the visual viewport to the left of the layout viewport.\n   */\n  offsetLeft: number\n  /**\n   * The scale factor of the visual viewport.\n   * This is useful for scaling elements based on the current zoom level.\n   */\n  scale: number\n}\n\n/**\n * Hook that tracks the window's visual viewport dimensions, position, and provides\n * a CSS transform for positioning elements.\n *\n * Uses the Visual Viewport API to get accurate measurements, especially important\n * for mobile devices where virtual keyboards can change the visible area.\n * Only updates state when values actually change to optimize performance.\n *\n * @returns An object containing viewport properties and a CSS transform string\n */\nexport function useWindowSize(): WindowSizeState {\n  const [windowSize, setWindowSize] = React.useState<WindowSizeState>({\n    width: 0,\n    height: 0,\n    offsetTop: 0,\n    offsetLeft: 0,\n    scale: 0,\n  })\n\n  const handleViewportChange = useThrottledCallback(() => {\n    if (typeof window === \"undefined\") return\n\n    const vp = window.visualViewport\n    if (!vp) return\n\n    const {\n      width = 0,\n      height = 0,\n      offsetTop = 0,\n      offsetLeft = 0,\n      scale = 0,\n    } = vp\n\n    setWindowSize((prevState) => {\n      if (\n        width === prevState.width &&\n        height === prevState.height &&\n        offsetTop === prevState.offsetTop &&\n        offsetLeft === prevState.offsetLeft &&\n        scale === prevState.scale\n      ) {\n        return prevState\n      }\n\n      return { width, height, offsetTop, offsetLeft, scale }\n    })\n  }, 200)\n\n  React.useEffect(() => {\n    const visualViewport = window.visualViewport\n    if (!visualViewport) return\n\n    visualViewport.addEventListener(\"resize\", handleViewportChange)\n\n    handleViewportChange()\n\n    return () => {\n      visualViewport.removeEventListener(\"resize\", handleViewportChange)\n    }\n  }, [handleViewportChange])\n\n  return windowSize\n}\n","import * as React from \"react\"\n\nexport const BanIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M4.43471 4.01458C4.34773 4.06032 4.26607 4.11977 4.19292 4.19292C4.11977 4.26607 4.06032 4.34773 4.01458 4.43471C2.14611 6.40628 1 9.0693 1 12C1 18.0751 5.92487 23 12 23C14.9306 23 17.5936 21.854 19.5651 19.9856C19.6522 19.9398 19.7339 19.8803 19.8071 19.8071C19.8803 19.7339 19.9398 19.6522 19.9856 19.5651C21.854 17.5936 23 14.9306 23 12C23 5.92487 18.0751 1 12 1C9.0693 1 6.40628 2.14611 4.43471 4.01458ZM6.38231 4.9681C7.92199 3.73647 9.87499 3 12 3C16.9706 3 21 7.02944 21 12C21 14.125 20.2635 16.078 19.0319 17.6177L6.38231 4.9681ZM17.6177 19.0319C16.078 20.2635 14.125 21 12 21C7.02944 21 3 16.9706 3 12C3 9.87499 3.73647 7.92199 4.9681 6.38231L17.6177 19.0319Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nBanIcon.displayName = \"BanIcon\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport { type Editor } from \"@tiptap/react\"\n\n// --- Hooks ---\nimport { useMenuNavigation } from \"@/hooks/use-menu-navigation\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Icons ---\nimport { BanIcon } from \"@/components/tiptap-icons/ban-icon\"\nimport { HighlighterIcon } from \"@/components/tiptap-icons/highlighter-icon\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button, ButtonGroup } from \"@/components/tiptap-ui-primitive/button\"\nimport {\n  Popover,\n  PopoverTrigger,\n  PopoverContent,\n} from \"@/components/tiptap-ui-primitive/popover\"\nimport { Separator } from \"@/components/tiptap-ui-primitive/separator\"\nimport {\n  Card,\n  CardBody,\n  CardItemGroup,\n} from \"@/components/tiptap-ui-primitive/card\"\n\n// --- Tiptap UI ---\nimport type {\n  HighlightColor,\n  UseColorHighlightConfig,\n} from \"@/components/tiptap-ui/color-highlight-button\"\nimport {\n  ColorHighlightButton,\n  pickHighlightColorsByValue,\n  useColorHighlight,\n} from \"@/components/tiptap-ui/color-highlight-button\"\n\nexport interface ColorHighlightPopoverContentProps {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Optional colors to use in the highlight popover.\n   * If not provided, defaults to a predefined set of colors.\n   */\n  colors?: HighlightColor[]\n}\n\nexport interface ColorHighlightPopoverProps\n  extends Omit<ButtonProps, \"type\">,\n    Pick<\n      UseColorHighlightConfig,\n      \"editor\" | \"hideWhenUnavailable\" | \"onApplied\"\n    > {\n  /**\n   * Optional colors to use in the highlight popover.\n   * If not provided, defaults to a predefined set of colors.\n   */\n  colors?: HighlightColor[]\n}\n\nexport const ColorHighlightPopoverButton = React.forwardRef<\n  HTMLButtonElement,\n  ButtonProps\n>(({ className, children, ...props }, ref) => (\n  <Button\n    type=\"button\"\n    className={className}\n    data-style=\"ghost\"\n    data-appearance=\"default\"\n    role=\"button\"\n    tabIndex={-1}\n    aria-label=\"Highlight text\"\n    tooltip=\"Highlight\"\n    ref={ref}\n    {...props}\n  >\n    {children ?? <HighlighterIcon className=\"tiptap-button-icon\" />}\n  </Button>\n))\n\nColorHighlightPopoverButton.displayName = \"ColorHighlightPopoverButton\"\n\nexport function ColorHighlightPopoverContent({\n  editor,\n  colors = pickHighlightColorsByValue([\n    \"var(--tt-color-highlight-green)\",\n    \"var(--tt-color-highlight-blue)\",\n    \"var(--tt-color-highlight-red)\",\n    \"var(--tt-color-highlight-purple)\",\n    \"var(--tt-color-highlight-yellow)\",\n  ]),\n}: ColorHighlightPopoverContentProps) {\n  const { handleRemoveHighlight } = useColorHighlight({ editor })\n  const isMobile = useIsMobile()\n  const containerRef = React.useRef<HTMLDivElement>(null)\n\n  const menuItems = React.useMemo(\n    () => [...colors, { label: \"Remove highlight\", value: \"none\" }],\n    [colors]\n  )\n\n  const { selectedIndex } = useMenuNavigation({\n    containerRef,\n    items: menuItems,\n    orientation: \"both\",\n    onSelect: (item) => {\n      if (!containerRef.current) return false\n      const highlightedElement = containerRef.current.querySelector(\n        '[data-highlighted=\"true\"]'\n      ) as HTMLElement\n      if (highlightedElement) highlightedElement.click()\n      if (item.value === \"none\") handleRemoveHighlight()\n    },\n    autoSelectFirstItem: false,\n  })\n\n  return (\n    <Card\n      ref={containerRef}\n      tabIndex={0}\n      style={isMobile ? { boxShadow: \"none\", border: 0 } : {}}\n    >\n      <CardBody style={isMobile ? { padding: 0 } : {}}>\n        <CardItemGroup orientation=\"horizontal\">\n          <ButtonGroup orientation=\"horizontal\">\n            {colors.map((color, index) => (\n              <ColorHighlightButton\n                key={color.value}\n                editor={editor}\n                highlightColor={color.value}\n                tooltip={color.label}\n                aria-label={`${color.label} highlight color`}\n                tabIndex={index === selectedIndex ? 0 : -1}\n                data-highlighted={selectedIndex === index}\n              />\n            ))}\n          </ButtonGroup>\n          <Separator />\n          <ButtonGroup orientation=\"horizontal\">\n            <Button\n              onClick={handleRemoveHighlight}\n              aria-label=\"Remove highlight\"\n              tooltip=\"Remove highlight\"\n              tabIndex={selectedIndex === colors.length ? 0 : -1}\n              type=\"button\"\n              role=\"menuitem\"\n              data-style=\"ghost\"\n              data-highlighted={selectedIndex === colors.length}\n            >\n              <BanIcon className=\"tiptap-button-icon\" />\n            </Button>\n          </ButtonGroup>\n        </CardItemGroup>\n      </CardBody>\n    </Card>\n  )\n}\n\nexport function ColorHighlightPopover({\n  editor: providedEditor,\n  colors = pickHighlightColorsByValue([\n    \"var(--tt-color-highlight-green)\",\n    \"var(--tt-color-highlight-blue)\",\n    \"var(--tt-color-highlight-red)\",\n    \"var(--tt-color-highlight-purple)\",\n    \"var(--tt-color-highlight-yellow)\",\n  ]),\n  hideWhenUnavailable = false,\n  onApplied,\n  ...props\n}: ColorHighlightPopoverProps) {\n  const { editor } = useTiptapEditor(providedEditor)\n  const [isOpen, setIsOpen] = React.useState(false)\n  const { isVisible, canColorHighlight, isActive, label, Icon } =\n    useColorHighlight({\n      editor,\n      hideWhenUnavailable,\n      onApplied,\n    })\n\n  if (!isVisible) return null\n\n  return (\n    <Popover open={isOpen} onOpenChange={setIsOpen}>\n      <PopoverTrigger asChild>\n        <ColorHighlightPopoverButton\n          disabled={!canColorHighlight}\n          data-active-state={isActive ? \"on\" : \"off\"}\n          data-disabled={!canColorHighlight}\n          aria-pressed={isActive}\n          aria-label={label}\n          tooltip={label}\n          {...props}\n        >\n          <Icon className=\"tiptap-button-icon\" />\n        </ColorHighlightPopoverButton>\n      </PopoverTrigger>\n      <PopoverContent aria-label=\"Highlight colors\">\n        <ColorHighlightPopoverContent editor={editor} colors={colors} />\n      </PopoverContent>\n    </Popover>\n  )\n}\n\nexport default ColorHighlightPopover\n","\"use client\"\n\nimport * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type { UseImageUploadConfig } from \"@/components/tiptap-ui/image-upload-button\"\nimport {\n  IMAGE_UPLOAD_SHORTCUT_KEY,\n  useImageUpload,\n} from \"@/components/tiptap-ui/image-upload-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface ImageUploadButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseImageUploadConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function ImageShortcutBadge({\n  shortcutKeys = IMAGE_UPLOAD_SHORTCUT_KEY,\n}: {\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for uploading/inserting images in a Tiptap editor.\n *\n * For custom button implementations, use the `useImage` hook instead.\n */\nexport const ImageUploadButton = React.forwardRef<\n  HTMLButtonElement,\n  ImageUploadButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      text,\n      hideWhenUnavailable = false,\n      onInserted,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      canInsert,\n      handleImage,\n      label,\n      isActive,\n      shortcutKeys,\n      Icon,\n    } = useImageUpload({\n      editor,\n      hideWhenUnavailable,\n      onInserted,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleImage()\n      },\n      [handleImage, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        data-active-state={isActive ? \"on\" : \"off\"}\n        role=\"button\"\n        tabIndex={-1}\n        disabled={!canInsert}\n        data-disabled={!canInsert}\n        aria-label={label}\n        aria-pressed={isActive}\n        tooltip={label}\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && <ImageShortcutBadge shortcutKeys={shortcutKeys} />}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nImageUploadButton.displayName = \"ImageUploadButton\"\n","import * as React from \"react\"\n\nexport const ImagePlusIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M20 2C20 1.44772 19.5523 1 19 1C18.4477 1 18 1.44772 18 2V4H16C15.4477 4 15 4.44772 15 5C15 5.55228 15.4477 6 16 6H18V8C18 8.55228 18.4477 9 19 9C19.5523 9 20 8.55228 20 8V6H22C22.5523 6 23 5.55228 23 5C23 4.44772 22.5523 4 22 4H20V2ZM5 4C4.73478 4 4.48043 4.10536 4.29289 4.29289C4.10536 4.48043 4 4.73478 4 5V19C4 19.2652 4.10536 19.5196 4.29289 19.7071C4.48043 19.8946 4.73478 20 5 20H5.58579L14.379 11.2068C14.9416 10.6444 15.7045 10.3284 16.5 10.3284C17.2955 10.3284 18.0584 10.6444 18.621 11.2068L20 12.5858V12C20 11.4477 20.4477 11 21 11C21.5523 11 22 11.4477 22 12V14.998C22 14.9994 22 15.0007 22 15.002V19C22 19.7957 21.6839 20.5587 21.1213 21.1213C20.5587 21.6839 19.7957 22 19 22H6.00219C6.00073 22 5.99927 22 5.99781 22H5C4.20435 22 3.44129 21.6839 2.87868 21.1213C2.31607 20.5587 2 19.7957 2 19V5C2 4.20435 2.31607 3.44129 2.87868 2.87868C3.44129 2.31607 4.20435 2 5 2H12C12.5523 2 13 2.44772 13 3C13 3.55228 12.5523 4 12 4H5ZM8.41422 20H19C19.2652 20 19.5196 19.8946 19.7071 19.7071C19.8946 19.5196 20 19.2652 20 19V15.4142L17.207 12.6212C17.0195 12.4338 16.7651 12.3284 16.5 12.3284C16.2349 12.3284 15.9806 12.4337 15.7931 12.6211L8.41422 20ZM6.87868 6.87868C7.44129 6.31607 8.20435 6 9 6C9.79565 6 10.5587 6.31607 11.1213 6.87868C11.6839 7.44129 12 8.20435 12 9C12 9.79565 11.6839 10.5587 11.1213 11.1213C10.5587 11.6839 9.79565 12 9 12C8.20435 12 7.44129 11.6839 6.87868 11.1213C6.31607 10.5587 6 9.79565 6 9C6 8.20435 6.31607 7.44129 6.87868 6.87868ZM9 8C8.73478 8 8.48043 8.10536 8.29289 8.29289C8.10536 8.48043 8 8.73478 8 9C8 9.26522 8.10536 9.51957 8.29289 9.70711C8.48043 9.89464 8.73478 10 9 10C9.26522 10 9.51957 9.89464 9.70711 9.70711C9.89464 9.51957 10 9.26522 10 9C10 8.73478 9.89464 8.48043 9.70711 8.29289C9.51957 8.10536 9.26522 8 9 8Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nImagePlusIcon.displayName = \"ImagePlusIcon\"\n","import * as React from \"react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport { type Editor } from \"@tiptap/react\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Lib ---\nimport {\n  isExtensionAvailable,\n  isNodeTypeSelected,\n} from \"@/lib/tiptap-utils\"\n\n// --- Icons ---\nimport { ImagePlusIcon } from \"@/components/tiptap-icons/image-plus-icon\"\n\nexport const IMAGE_UPLOAD_SHORTCUT_KEY = \"mod+shift+i\"\n\n/**\n * Configuration for the image upload functionality\n */\nexport interface UseImageUploadConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether the button should hide when insertion is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a successful image insertion.\n   */\n  onInserted?: () => void\n}\n\n/**\n * Checks if image can be inserted in the current editor state\n */\nexport function canInsertImage(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (\n    !isExtensionAvailable(editor, \"imageUpload\") ||\n    isNodeTypeSelected(editor, [\"image\"])\n  )\n    return false\n\n  return editor.can().insertContent({ type: \"imageUpload\" })\n}\n\n/**\n * Checks if image is currently active\n */\nexport function isImageActive(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n  return editor.isActive(\"imageUpload\")\n}\n\n/**\n * Inserts an image in the editor\n */\nexport function insertImage(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!canInsertImage(editor)) return false\n\n  try {\n    return editor\n      .chain()\n      .focus()\n      .insertContent({\n        type: \"imageUpload\",\n      })\n      .run()\n  } catch {\n    return false\n  }\n}\n\n/**\n * Determines if the image button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n  if (!isExtensionAvailable(editor, \"imageUpload\")) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canInsertImage(editor)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides image functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage - no params needed\n * function MySimpleImageButton() {\n *   const { isVisible, handleImage } = useImage()\n *\n *   if (!isVisible) return null\n *\n *   return <button onClick={handleImage}>Add Image</button>\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedImageButton() {\n *   const { isVisible, handleImage, label, isActive } = useImage({\n *     editor: myEditor,\n *     hideWhenUnavailable: true,\n *     onInserted: () => console.log('Image inserted!')\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleImage}\n *       aria-pressed={isActive}\n *       aria-label={label}\n *     >\n *       Add Image\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useImageUpload(config?: UseImageUploadConfig) {\n  const {\n    editor: providedEditor,\n    hideWhenUnavailable = false,\n    onInserted,\n  } = config || {}\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canInsert = canInsertImage(editor)\n  const isActive = isImageActive(editor)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowButton({ editor, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable])\n\n  const handleImage = React.useCallback(() => {\n    if (!editor) return false\n\n    const success = insertImage(editor)\n    if (success) {\n      onInserted?.()\n    }\n    return success\n  }, [editor, onInserted])\n\n  useHotkeys(\n    IMAGE_UPLOAD_SHORTCUT_KEY,\n    (event) => {\n      event.preventDefault()\n      handleImage()\n    },\n    {\n      enabled: isVisible && canInsert,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    isActive,\n    handleImage,\n    canInsert,\n    label: \"Add image\",\n    shortcutKeys: IMAGE_UPLOAD_SHORTCUT_KEY,\n    Icon: ImagePlusIcon,\n  }\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type { Mark, UseMarkConfig } from \"@/components/tiptap-ui/mark-button\"\nimport { MARK_SHORTCUT_KEYS, useMark } from \"@/components/tiptap-ui/mark-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface MarkButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseMarkConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function MarkShortcutBadge({\n  type,\n  shortcutKeys = MARK_SHORTCUT_KEYS[type],\n}: {\n  type: Mark\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for toggling marks in a Tiptap editor.\n *\n * For custom button implementations, use the `useMark` hook instead.\n */\nexport const MarkButton = React.forwardRef<HTMLButtonElement, MarkButtonProps>(\n  (\n    {\n      editor: providedEditor,\n      type,\n      text,\n      hideWhenUnavailable = false,\n      onToggled,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      handleMark,\n      label,\n      canToggle,\n      isActive,\n      Icon,\n      shortcutKeys,\n    } = useMark({\n      editor,\n      type,\n      hideWhenUnavailable,\n      onToggled,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleMark()\n      },\n      [handleMark, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        disabled={!canToggle}\n        data-style=\"ghost\"\n        data-active-state={isActive ? \"on\" : \"off\"}\n        data-disabled={!canToggle}\n        role=\"button\"\n        tabIndex={-1}\n        aria-label={label}\n        aria-pressed={isActive}\n        tooltip={label}\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <MarkShortcutBadge type={type} shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nMarkButton.displayName = \"MarkButton\"\n","import * as React from \"react\"\n\nexport const BoldIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M6 2.5C5.17157 2.5 4.5 3.17157 4.5 4V20C4.5 20.8284 5.17157 21.5 6 21.5H15C16.4587 21.5 17.8576 20.9205 18.8891 19.8891C19.9205 18.8576 20.5 17.4587 20.5 16C20.5 14.5413 19.9205 13.1424 18.8891 12.1109C18.6781 11.9 18.4518 11.7079 18.2128 11.5359C19.041 10.5492 19.5 9.29829 19.5 8C19.5 6.54131 18.9205 5.14236 17.8891 4.11091C16.8576 3.07946 15.4587 2.5 14 2.5H6ZM14 10.5C14.663 10.5 15.2989 10.2366 15.7678 9.76777C16.2366 9.29893 16.5 8.66304 16.5 8C16.5 7.33696 16.2366 6.70107 15.7678 6.23223C15.2989 5.76339 14.663 5.5 14 5.5H7.5V10.5H14ZM7.5 18.5V13.5H15C15.663 13.5 16.2989 13.7634 16.7678 14.2322C17.2366 14.7011 17.5 15.337 17.5 16C17.5 16.663 17.2366 17.2989 16.7678 17.7678C16.2989 18.2366 15.663 18.5 15 18.5H7.5Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nBoldIcon.displayName = \"BoldIcon\"\n","import * as React from \"react\"\n\nexport const Code2Icon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M15.4545 4.2983C15.6192 3.77115 15.3254 3.21028 14.7983 3.04554C14.2712 2.88081 13.7103 3.1746 13.5455 3.70175L8.54554 19.7017C8.38081 20.2289 8.6746 20.7898 9.20175 20.9545C9.72889 21.1192 10.2898 20.8254 10.4545 20.2983L15.4545 4.2983Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M6.70711 7.29289C7.09763 7.68342 7.09763 8.31658 6.70711 8.70711L3.41421 12L6.70711 15.2929C7.09763 15.6834 7.09763 16.3166 6.70711 16.7071C6.31658 17.0976 5.68342 17.0976 5.29289 16.7071L1.29289 12.7071C0.902369 12.3166 0.902369 11.6834 1.29289 11.2929L5.29289 7.29289C5.68342 6.90237 6.31658 6.90237 6.70711 7.29289Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M17.2929 7.29289C17.6834 6.90237 18.3166 6.90237 18.7071 7.29289L22.7071 11.2929C23.0976 11.6834 23.0976 12.3166 22.7071 12.7071L18.7071 16.7071C18.3166 17.0976 17.6834 17.0976 17.2929 16.7071C16.9024 16.3166 16.9024 15.6834 17.2929 15.2929L20.5858 12L17.2929 8.70711C16.9024 8.31658 16.9024 7.68342 17.2929 7.29289Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nCode2Icon.displayName = \"Code2Icon\"\n","import * as React from \"react\"\n\nexport const ItalicIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M15.0222 3H19C19.5523 3 20 3.44772 20 4C20 4.55228 19.5523 5 19 5H15.693L10.443 19H14C14.5523 19 15 19.4477 15 20C15 20.5523 14.5523 21 14 21H9.02418C9.00802 21.0004 8.99181 21.0004 8.97557 21H5C4.44772 21 4 20.5523 4 20C4 19.4477 4.44772 19 5 19H8.30704L13.557 5H10C9.44772 5 9 4.55228 9 4C9 3.44772 9.44772 3 10 3H14.9782C14.9928 2.99968 15.0075 2.99967 15.0222 3Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nItalicIcon.displayName = \"ItalicIcon\"\n","import * as React from \"react\"\n\nexport const StrikeIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M9.00039 3H16.0001C16.5524 3 17.0001 3.44772 17.0001 4C17.0001 4.55229 16.5524 5 16.0001 5H9.00011C8.68006 4.99983 8.36412 5.07648 8.07983 5.22349C7.79555 5.37051 7.55069 5.5836 7.36585 5.84487C7.181 6.10614 7.06155 6.40796 7.01754 6.72497C6.97352 7.04198 7.00623 7.36492 7.11292 7.66667C7.29701 8.18737 7.02414 8.75872 6.50344 8.94281C5.98274 9.1269 5.4114 8.85403 5.2273 8.33333C5.01393 7.72984 4.94851 7.08396 5.03654 6.44994C5.12456 5.81592 5.36346 5.21229 5.73316 4.68974C6.10285 4.1672 6.59256 3.74101 7.16113 3.44698C7.72955 3.15303 8.36047 2.99975 9.00039 3Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M18 13H20C20.5523 13 21 12.5523 21 12C21 11.4477 20.5523 11 20 11H4C3.44772 11 3 11.4477 3 12C3 12.5523 3.44772 13 4 13H14C14.7956 13 15.5587 13.3161 16.1213 13.8787C16.6839 14.4413 17 15.2044 17 16C17 16.7956 16.6839 17.5587 16.1213 18.1213C15.5587 18.6839 14.7956 19 14 19H6C5.44772 19 5 19.4477 5 20C5 20.5523 5.44772 21 6 21H14C15.3261 21 16.5979 20.4732 17.5355 19.5355C18.4732 18.5979 19 17.3261 19 16C19 14.9119 18.6453 13.8604 18 13Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nStrikeIcon.displayName = \"StrikeIcon\"\n","import * as React from \"react\"\n\nexport const SubscriptIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M3.29289 7.29289C3.68342 6.90237 4.31658 6.90237 4.70711 7.29289L12.7071 15.2929C13.0976 15.6834 13.0976 16.3166 12.7071 16.7071C12.3166 17.0976 11.6834 17.0976 11.2929 16.7071L3.29289 8.70711C2.90237 8.31658 2.90237 7.68342 3.29289 7.29289Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M12.7071 7.29289C13.0976 7.68342 13.0976 8.31658 12.7071 8.70711L4.70711 16.7071C4.31658 17.0976 3.68342 17.0976 3.29289 16.7071C2.90237 16.3166 2.90237 15.6834 3.29289 15.2929L11.2929 7.29289C11.6834 6.90237 12.3166 6.90237 12.7071 7.29289Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M17.4079 14.3995C18.0284 14.0487 18.7506 13.9217 19.4536 14.0397C20.1566 14.1578 20.7977 14.5138 21.2696 15.0481L21.2779 15.0574L21.2778 15.0575C21.7439 15.5988 22 16.2903 22 17C22 18.0823 21.3962 18.8401 20.7744 19.3404C20.194 19.8073 19.4858 20.141 18.9828 20.378C18.9638 20.387 18.9451 20.3958 18.9266 20.4045C18.4473 20.6306 18.2804 20.7817 18.1922 20.918C18.1773 20.9412 18.1619 20.9681 18.1467 21H21C21.5523 21 22 21.4477 22 22C22 22.5523 21.5523 23 21 23H17C16.4477 23 16 22.5523 16 22C16 21.1708 16.1176 20.4431 16.5128 19.832C16.9096 19.2184 17.4928 18.8695 18.0734 18.5956C18.6279 18.334 19.138 18.0901 19.5207 17.7821C19.8838 17.49 20 17.2477 20 17C20 16.7718 19.9176 16.5452 19.7663 16.3672C19.5983 16.1792 19.3712 16.0539 19.1224 16.0121C18.8722 15.9701 18.6152 16.015 18.3942 16.1394C18.1794 16.2628 18.0205 16.4549 17.9422 16.675C17.7572 17.1954 17.1854 17.4673 16.665 17.2822C16.1446 17.0972 15.8728 16.5254 16.0578 16.005C16.2993 15.3259 16.7797 14.7584 17.4039 14.4018L17.4079 14.3995L17.4079 14.3995Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nSubscriptIcon.displayName = \"SubscriptIcon\"\n","import * as React from \"react\"\n\nexport const SuperscriptIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M12.7071 7.29289C13.0976 7.68342 13.0976 8.31658 12.7071 8.70711L4.70711 16.7071C4.31658 17.0976 3.68342 17.0976 3.29289 16.7071C2.90237 16.3166 2.90237 15.6834 3.29289 15.2929L11.2929 7.29289C11.6834 6.90237 12.3166 6.90237 12.7071 7.29289Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M3.29289 7.29289C3.68342 6.90237 4.31658 6.90237 4.70711 7.29289L12.7071 15.2929C13.0976 15.6834 13.0976 16.3166 12.7071 16.7071C12.3166 17.0976 11.6834 17.0976 11.2929 16.7071L3.29289 8.70711C2.90237 8.31658 2.90237 7.68342 3.29289 7.29289Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M17.405 1.40657C18.0246 1.05456 18.7463 0.92634 19.4492 1.04344C20.1521 1.16054 20.7933 1.51583 21.2652 2.0497L21.2697 2.05469L21.2696 2.05471C21.7431 2.5975 22 3.28922 22 4.00203C22 5.08579 21.3952 5.84326 20.7727 6.34289C20.1966 6.80531 19.4941 7.13675 18.9941 7.37261C18.9714 7.38332 18.9491 7.39383 18.9273 7.40415C18.4487 7.63034 18.2814 7.78152 18.1927 7.91844C18.1778 7.94155 18.1625 7.96834 18.1473 8.00003H21C21.5523 8.00003 22 8.44774 22 9.00003C22 9.55231 21.5523 10 21 10H17C16.4477 10 16 9.55231 16 9.00003C16 8.17007 16.1183 7.44255 16.5138 6.83161C16.9107 6.21854 17.4934 5.86971 18.0728 5.59591C18.6281 5.33347 19.1376 5.09075 19.5208 4.78316C19.8838 4.49179 20 4.25026 20 4.00203C20 3.77192 19.9178 3.54865 19.7646 3.37182C19.5968 3.18324 19.3696 3.05774 19.1205 3.01625C18.8705 2.97459 18.6137 3.02017 18.3933 3.14533C18.1762 3.26898 18.0191 3.45826 17.9406 3.67557C17.7531 4.19504 17.18 4.46414 16.6605 4.27662C16.141 4.0891 15.8719 3.51596 16.0594 2.99649C16.303 2.3219 16.7817 1.76125 17.4045 1.40689L17.405 1.40657Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nSuperscriptIcon.displayName = \"SuperscriptIcon\"\n","import * as React from \"react\"\n\nexport const UnderlineIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M7 4C7 3.44772 6.55228 3 6 3C5.44772 3 5 3.44772 5 4V10C5 11.8565 5.7375 13.637 7.05025 14.9497C8.36301 16.2625 10.1435 17 12 17C13.8565 17 15.637 16.2625 16.9497 14.9497C18.2625 13.637 19 11.8565 19 10V4C19 3.44772 18.5523 3 18 3C17.4477 3 17 3.44772 17 4V10C17 11.3261 16.4732 12.5979 15.5355 13.5355C14.5979 14.4732 13.3261 15 12 15C10.6739 15 9.40215 14.4732 8.46447 13.5355C7.52678 12.5979 7 11.3261 7 10V4ZM4 19C3.44772 19 3 19.4477 3 20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20C21 19.4477 20.5523 19 20 19H4Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nUnderlineIcon.displayName = \"UnderlineIcon\"\n","import * as React from \"react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport type { Editor } from \"@tiptap/react\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Lib ---\nimport { isMarkInSchema, isNodeTypeSelected } from \"@/lib/tiptap-utils\"\n\n// --- Icons ---\nimport { BoldIcon } from \"@/components/tiptap-icons/bold-icon\"\nimport { Code2Icon } from \"@/components/tiptap-icons/code2-icon\"\nimport { ItalicIcon } from \"@/components/tiptap-icons/italic-icon\"\nimport { StrikeIcon } from \"@/components/tiptap-icons/strike-icon\"\nimport { SubscriptIcon } from \"@/components/tiptap-icons/subscript-icon\"\nimport { SuperscriptIcon } from \"@/components/tiptap-icons/superscript-icon\"\nimport { UnderlineIcon } from \"@/components/tiptap-icons/underline-icon\"\n\nexport type Mark =\n  | \"bold\"\n  | \"italic\"\n  | \"strike\"\n  | \"code\"\n  | \"underline\"\n  | \"superscript\"\n  | \"subscript\"\n\n/**\n * Configuration for the mark functionality\n */\nexport interface UseMarkConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * The type of mark to toggle\n   */\n  type: Mark\n  /**\n   * Whether the button should hide when mark is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a successful mark toggle.\n   */\n  onToggled?: () => void\n}\n\nexport const markIcons = {\n  bold: BoldIcon,\n  italic: ItalicIcon,\n  underline: UnderlineIcon,\n  strike: StrikeIcon,\n  code: Code2Icon,\n  superscript: SuperscriptIcon,\n  subscript: SubscriptIcon,\n}\n\nexport const MARK_SHORTCUT_KEYS: Record<Mark, string> = {\n  bold: \"mod+b\",\n  italic: \"mod+i\",\n  underline: \"mod+u\",\n  strike: \"mod+shift+s\",\n  code: \"mod+e\",\n  superscript: \"mod+.\",\n  subscript: \"mod+,\",\n}\n\n/**\n * Checks if a mark can be toggled in the current editor state\n */\nexport function canToggleMark(editor: Editor | null, type: Mark): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!isMarkInSchema(type, editor) || isNodeTypeSelected(editor, [\"image\"]))\n    return false\n\n  return editor.can().toggleMark(type)\n}\n\n/**\n * Checks if a mark is currently active\n */\nexport function isMarkActive(editor: Editor | null, type: Mark): boolean {\n  if (!editor || !editor.isEditable) return false\n  return editor.isActive(type)\n}\n\n/**\n * Toggles a mark in the editor\n */\nexport function toggleMark(editor: Editor | null, type: Mark): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!canToggleMark(editor, type)) return false\n\n  return editor.chain().focus().toggleMark(type).run()\n}\n\n/**\n * Determines if the mark button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  type: Mark\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, type, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n  if (!isMarkInSchema(type, editor)) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canToggleMark(editor, type)\n  }\n\n  return true\n}\n\n/**\n * Gets the formatted mark name\n */\nexport function getFormattedMarkName(type: Mark): string {\n  return type.charAt(0).toUpperCase() + type.slice(1)\n}\n\n/**\n * Custom hook that provides mark functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage\n * function MySimpleBoldButton() {\n *   const { isVisible, handleMark } = useMark({ type: \"bold\" })\n *\n *   if (!isVisible) return null\n *\n *   return <button onClick={handleMark}>Bold</button>\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedItalicButton() {\n *   const { isVisible, handleMark, label, isActive } = useMark({\n *     editor: myEditor,\n *     type: \"italic\",\n *     hideWhenUnavailable: true,\n *     onToggled: () => console.log('Mark toggled!')\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleMark}\n *       aria-pressed={isActive}\n *       aria-label={label}\n *     >\n *       Italic\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useMark(config: UseMarkConfig) {\n  const {\n    editor: providedEditor,\n    type,\n    hideWhenUnavailable = false,\n    onToggled,\n  } = config\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canToggle = canToggleMark(editor, type)\n  const isActive = isMarkActive(editor, type)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowButton({ editor, type, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, type, hideWhenUnavailable])\n\n  const handleMark = React.useCallback(() => {\n    if (!editor) return false\n\n    const success = toggleMark(editor, type)\n    if (success) {\n      onToggled?.()\n    }\n    return success\n  }, [editor, type, onToggled])\n\n  useHotkeys(\n    MARK_SHORTCUT_KEYS[type],\n    (event) => {\n      event.preventDefault()\n      handleMark()\n    },\n    {\n      enabled: isVisible && canToggle,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    isActive,\n    handleMark,\n    canToggle,\n    label: getFormattedMarkName(type),\n    shortcutKeys: MARK_SHORTCUT_KEYS[type],\n    Icon: markIcons[type],\n  }\n}\n","import * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type {\n  TextAlign,\n  UseTextAlignConfig,\n} from \"@/components/tiptap-ui/text-align-button\"\nimport {\n  TEXT_ALIGN_SHORTCUT_KEYS,\n  useTextAlign,\n} from \"@/components/tiptap-ui/text-align-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\ntype IconProps = React.SVGProps<SVGSVGElement>\ntype IconComponent = ({ className, ...props }: IconProps) => React.ReactElement\n\nexport interface TextAlignButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseTextAlignConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n  /**\n   * Optional custom icon component to render instead of the default.\n   */\n  icon?: React.MemoExoticComponent<IconComponent> | React.FC<IconProps>\n}\n\nexport function TextAlignShortcutBadge({\n  align,\n  shortcutKeys = TEXT_ALIGN_SHORTCUT_KEYS[align],\n}: {\n  align: TextAlign\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for setting text alignment in a Tiptap editor.\n *\n * For custom button implementations, use the `useTextAlign` hook instead.\n */\nexport const TextAlignButton = React.forwardRef<\n  HTMLButtonElement,\n  TextAlignButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      align,\n      text,\n      hideWhenUnavailable = false,\n      onAligned,\n      showShortcut = false,\n      onClick,\n      icon: CustomIcon,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      handleTextAlign,\n      label,\n      canAlign,\n      isActive,\n      Icon,\n      shortcutKeys,\n    } = useTextAlign({\n      editor,\n      align,\n      hideWhenUnavailable,\n      onAligned,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleTextAlign()\n      },\n      [handleTextAlign, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    const RenderIcon = CustomIcon ?? Icon\n\n    return (\n      <Button\n        type=\"button\"\n        disabled={!canAlign}\n        data-style=\"ghost\"\n        data-active-state={isActive ? \"on\" : \"off\"}\n        data-disabled={!canAlign}\n        role=\"button\"\n        tabIndex={-1}\n        aria-label={label}\n        aria-pressed={isActive}\n        tooltip={label}\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <RenderIcon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <TextAlignShortcutBadge\n                align={align}\n                shortcutKeys={shortcutKeys}\n              />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nTextAlignButton.displayName = \"TextAlignButton\"\n","import * as React from \"react\"\n\nexport const AlignCenterIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M2 6C2 5.44772 2.44772 5 3 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H3C2.44772 7 2 6.55228 2 6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M6 12C6 11.4477 6.44772 11 7 11H17C17.5523 11 18 11.4477 18 12C18 12.5523 17.5523 13 17 13H7C6.44772 13 6 12.5523 6 12Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M4 18C4 17.4477 4.44772 17 5 17H19C19.5523 17 20 17.4477 20 18C20 18.5523 19.5523 19 19 19H5C4.44772 19 4 18.5523 4 18Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nAlignCenterIcon.displayName = \"AlignCenterIcon\"\n","import * as React from \"react\"\n\nexport const AlignJustifyIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M2 6C2 5.44772 2.44772 5 3 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H3C2.44772 7 2 6.55228 2 6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M2 12C2 11.4477 2.44772 11 3 11H21C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13H3C2.44772 13 2 12.5523 2 12Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M2 18C2 17.4477 2.44772 17 3 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H3C2.44772 19 2 18.5523 2 18Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nAlignJustifyIcon.displayName = \"AlignJustifyIcon\"\n","import * as React from \"react\"\n\nexport const AlignLeftIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M2 6C2 5.44772 2.44772 5 3 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H3C2.44772 7 2 6.55228 2 6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M2 12C2 11.4477 2.44772 11 3 11H15C15.5523 11 16 11.4477 16 12C16 12.5523 15.5523 13 15 13H3C2.44772 13 2 12.5523 2 12Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M2 18C2 17.4477 2.44772 17 3 17H17C17.5523 17 18 17.4477 18 18C18 18.5523 17.5523 19 17 19H3C2.44772 19 2 18.5523 2 18Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nAlignLeftIcon.displayName = \"AlignLeftIcon\"\n","import * as React from \"react\"\n\nexport const AlignRightIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M2 6C2 5.44772 2.44772 5 3 5H21C21.5523 5 22 5.44772 22 6C22 6.55228 21.5523 7 21 7H3C2.44772 7 2 6.55228 2 6Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M8 12C8 11.4477 8.44772 11 9 11H21C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13H9C8.44772 13 8 12.5523 8 12Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M6 18C6 17.4477 6.44772 17 7 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H7C6.44772 19 6 18.5523 6 18Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nAlignRightIcon.displayName = \"AlignRightIcon\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport type { ChainedCommands } from \"@tiptap/react\"\nimport { type Editor } from \"@tiptap/react\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Lib ---\nimport {\n  isExtensionAvailable,\n  isNodeTypeSelected,\n} from \"@/lib/tiptap-utils\"\n\n// --- Icons ---\nimport { AlignCenterIcon } from \"@/components/tiptap-icons/align-center-icon\"\nimport { AlignJustifyIcon } from \"@/components/tiptap-icons/align-justify-icon\"\nimport { AlignLeftIcon } from \"@/components/tiptap-icons/align-left-icon\"\nimport { AlignRightIcon } from \"@/components/tiptap-icons/align-right-icon\"\n\nexport type TextAlign = \"left\" | \"center\" | \"right\" | \"justify\"\n\n/**\n * Configuration for the text align functionality\n */\nexport interface UseTextAlignConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * The text alignment to apply.\n   */\n  align: TextAlign\n  /**\n   * Whether the button should hide when alignment is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a successful alignment change.\n   */\n  onAligned?: () => void\n}\n\nexport const TEXT_ALIGN_SHORTCUT_KEYS: Record<TextAlign, string> = {\n  left: \"mod+shift+l\",\n  center: \"mod+shift+e\",\n  right: \"mod+shift+r\",\n  justify: \"mod+shift+j\",\n}\n\nexport const textAlignIcons = {\n  left: AlignLeftIcon,\n  center: AlignCenterIcon,\n  right: AlignRightIcon,\n  justify: AlignJustifyIcon,\n}\n\nexport const textAlignLabels: Record<TextAlign, string> = {\n  left: \"Align left\",\n  center: \"Align center\",\n  right: \"Align right\",\n  justify: \"Align justify\",\n}\n\n/**\n * Checks if text alignment can be performed in the current editor state\n */\nexport function canSetTextAlign(\n  editor: Editor | null,\n  align: TextAlign\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (\n    !isExtensionAvailable(editor, \"textAlign\") ||\n    isNodeTypeSelected(editor, [\"image\"])\n  )\n    return false\n\n  return editor.can().setTextAlign(align)\n}\n\nexport function hasSetTextAlign(\n  commands: ChainedCommands\n): commands is ChainedCommands & {\n  setTextAlign: (align: TextAlign) => ChainedCommands\n} {\n  return \"setTextAlign\" in commands\n}\n\n/**\n * Checks if the text alignment is currently active\n */\nexport function isTextAlignActive(\n  editor: Editor | null,\n  align: TextAlign\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  return editor.isActive({ textAlign: align })\n}\n\n/**\n * Sets text alignment in the editor\n */\nexport function setTextAlign(editor: Editor | null, align: TextAlign): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!canSetTextAlign(editor, align)) return false\n\n  const chain = editor.chain().focus()\n  if (hasSetTextAlign(chain)) {\n    return chain.setTextAlign(align).run()\n  }\n\n  return false\n}\n\n/**\n * Determines if the text align button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n  align: TextAlign\n}): boolean {\n  const { editor, hideWhenUnavailable, align } = props\n\n  if (!editor || !editor.isEditable) return false\n  if (!isExtensionAvailable(editor, \"textAlign\")) return false\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canSetTextAlign(editor, align)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides text align functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage\n * function MySimpleAlignButton() {\n *   const { isVisible, handleTextAlign } = useTextAlign({ align: \"center\" })\n *\n *   if (!isVisible) return null\n *\n *   return <button onClick={handleTextAlign}>Align Center</button>\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedAlignButton() {\n *   const { isVisible, handleTextAlign, label, isActive } = useTextAlign({\n *     editor: myEditor,\n *     align: \"right\",\n *     hideWhenUnavailable: true,\n *     onAligned: () => console.log('Text aligned!')\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleTextAlign}\n *       aria-pressed={isActive}\n *       aria-label={label}\n *     >\n *       Align Right\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useTextAlign(config: UseTextAlignConfig) {\n  const {\n    editor: providedEditor,\n    align,\n    hideWhenUnavailable = false,\n    onAligned,\n  } = config\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canAlign = canSetTextAlign(editor, align)\n  const isActive = isTextAlignActive(editor, align)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowButton({ editor, align, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable, align])\n\n  const handleTextAlign = React.useCallback(() => {\n    if (!editor) return false\n\n    const success = setTextAlign(editor, align)\n    if (success) {\n      onAligned?.()\n    }\n    return success\n  }, [editor, align, onAligned])\n\n  useHotkeys(\n    TEXT_ALIGN_SHORTCUT_KEYS[align],\n    (event) => {\n      event.preventDefault()\n      handleTextAlign()\n    },\n    {\n      enabled: isVisible && canAlign,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    isActive,\n    handleTextAlign,\n    canAlign,\n    label: textAlignLabels[align],\n    shortcutKeys: TEXT_ALIGN_SHORTCUT_KEYS[align],\n    Icon: textAlignIcons[align],\n  }\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport { type Editor } from \"@tiptap/react\"\nimport type { Node } from \"@tiptap/pm/model\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Utils ---\nimport {\n  getAnchorNodeAndPos,\n  getEditorExtension,\n} from \"@/lib/tiptap-advanced-utils\"\n\n// --- Icons ---\nimport { LinkIcon } from \"@/components/tiptap-icons/link-icon\"\n\nexport const COPY_ANCHOR_LINK_SHORTCUT_KEY = \"mod+ctrl+l\"\n\n/**\n * Configuration for the copy anchor link functionality\n */\nexport interface UseCopyAnchorLinkConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether the button should hide when no node ID is available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Called when the copy operation finishes.\n   * Provides a boolean indicating whether a node ID was found.\n   */\n  onNodeIdNotFound?: (found: boolean) => void\n  /**\n   * Called after the node ID is extracted.\n   * Provides the extracted node ID, or null if none found.\n   */\n  onExtractedNodeId?: (nodeId: string | null) => void\n  /**\n   * Callback function called after a successful copy operation.\n   */\n  onCopied?: () => void\n}\n\n/**\n * Validates if editor is ready for operations\n */\nfunction isEditorReady(editor: Editor | null): boolean {\n  return !!(editor && editor.isEditable)\n}\n\n/**\n * Gets the attribute name for unique IDs from the editor extension\n */\nfunction getAttributeName(editor: Editor): string {\n  const ext = getEditorExtension(editor, \"uniqueID\")\n  return ext?.options?.attributeName || \"data-id\"\n}\n\n/**\n * Comprehensive node info retrieval with validation\n */\nfunction getNodeWithId(editor: Editor | null): {\n  node: Node\n  nodeId: string | null\n  hasNodeId: boolean\n} | null {\n  if (!isEditorReady(editor)) return null\n\n  const nodeInfo = getAnchorNodeAndPos(editor!)\n  if (!nodeInfo) return null\n\n  const attributeName = getAttributeName(editor!)\n  const nodeId = extractNodeId(nodeInfo.node, attributeName)\n\n  return {\n    node: nodeInfo.node,\n    nodeId,\n    hasNodeId: nodeId !== null,\n  }\n}\n\n/**\n * Extracts the data-id from a node\n */\nexport function extractNodeId(\n  node: Node | null,\n  attributeName: string\n): string | null {\n  if (!node?.attrs?.[attributeName]) return null\n\n  try {\n    return node.attrs[attributeName]\n  } catch {\n    return null\n  }\n}\n\n/**\n * Checks if a node has a data-id that can be copied\n */\nexport function canCopyAnchorLink(editor: Editor | null): boolean {\n  const nodeWithId = getNodeWithId(editor)\n  return nodeWithId?.hasNodeId ?? false\n}\n\n/**\n * Extracts and copies the node ID to clipboard with full URL like Notion\n */\nexport async function copyNodeId(\n  editor: Editor | null,\n  onExtractedNodeId?: (nodeId: string | null) => void,\n  onNodeIdNotFound?: (found: boolean) => void\n): Promise<boolean> {\n  const nodeWithId = getNodeWithId(editor)\n\n  if (!nodeWithId) return false\n\n  const { nodeId, hasNodeId } = nodeWithId\n\n  onExtractedNodeId?.(nodeId)\n  onNodeIdNotFound?.(!hasNodeId)\n\n  if (!hasNodeId || !nodeId) return false\n\n  try {\n    const currentUrl = new URL(window.location.href)\n\n    currentUrl.searchParams.set(\"source\", \"copy_link\")\n    currentUrl.hash = nodeId\n\n    await navigator.clipboard.writeText(currentUrl.toString())\n    return true\n  } catch (err) {\n    console.error(\"Failed to copy node ID to clipboard:\", err)\n    return false\n  }\n}\n\n/**\n * Determines if the copy anchor link button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = props\n\n  if (!isEditorReady(editor)) return false\n\n  const hasNode = !!getAnchorNodeAndPos(editor!)\n\n  if (!hideWhenUnavailable) return hasNode\n\n  return canCopyAnchorLink(editor)\n}\n\n/**\n * Custom hook that provides copy anchor link functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage - no params needed\n * function MyCopyAnchorLinkButton() {\n *   const { isVisible, handleCopyAnchorLink } = useCopyAnchorLink()\n *\n *   if (!isVisible) return null\n *\n *   return <button onClick={handleCopyAnchorLink}>Copy Link</button>\n * }\n *\n * // Advanced usage with configuration\n * function MyAdvancedCopyAnchorLinkButton() {\n *   const { isVisible, handleCopyAnchorLink, label } = useCopyAnchorLink({\n *     editor: myEditor,\n *     hideWhenUnavailable: true,\n *     onCopied: () => console.log('Link copied!')\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleCopyAnchorLink}\n *       aria-label={label}\n *     >\n *       Copy Anchor Link\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useCopyAnchorLink(config?: UseCopyAnchorLinkConfig) {\n  const {\n    editor: providedEditor,\n    hideWhenUnavailable = false,\n    onNodeIdNotFound,\n    onExtractedNodeId,\n    onCopied,\n  } = config || {}\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canCopyAnchor = canCopyAnchorLink(editor)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(shouldShowButton({ editor, hideWhenUnavailable }))\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable])\n\n  const handleCopyAnchorLink = React.useCallback(async () => {\n    const success = await copyNodeId(\n      editor,\n      onExtractedNodeId,\n      onNodeIdNotFound\n    )\n\n    if (success) {\n      onCopied?.()\n    }\n\n    return success\n  }, [editor, onExtractedNodeId, onNodeIdNotFound, onCopied])\n\n  useHotkeys(\n    COPY_ANCHOR_LINK_SHORTCUT_KEY,\n    (event) => {\n      event.preventDefault()\n      handleCopyAnchorLink()\n    },\n    {\n      enabled: isVisible && canCopyAnchor,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    handleCopyAnchorLink,\n    canCopyAnchorLink: canCopyAnchor,\n    label: \"Copy anchor link\",\n    shortcutKeys: COPY_ANCHOR_LINK_SHORTCUT_KEY,\n    Icon: LinkIcon,\n  }\n}\n","import * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type { UseCopyAnchorLinkConfig } from \"./use-copy-anchor-link\"\nimport {\n  COPY_ANCHOR_LINK_SHORTCUT_KEY,\n  useCopyAnchorLink,\n} from \"./use-copy-anchor-link\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface CopyAnchorLinkButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseCopyAnchorLinkConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function CopyAnchorLinkShortcutBadge({\n  shortcutKeys = COPY_ANCHOR_LINK_SHORTCUT_KEY,\n}: {\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for copying anchor links in a Tiptap editor.\n *\n * For custom button implementations, use the `useCopyAnchorLink` hook instead.\n */\nexport const CopyAnchorLinkButton = React.forwardRef<\n  HTMLButtonElement,\n  CopyAnchorLinkButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      text,\n      hideWhenUnavailable = false,\n      onNodeIdNotFound,\n      onExtractedNodeId,\n      onCopied,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const { isVisible, handleCopyAnchorLink, label, shortcutKeys, Icon } =\n      useCopyAnchorLink({\n        editor,\n        hideWhenUnavailable,\n        onNodeIdNotFound,\n        onExtractedNodeId,\n        onCopied,\n      })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleCopyAnchorLink()\n      },\n      [handleCopyAnchorLink, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        role=\"button\"\n        tabIndex={-1}\n        aria-label={label}\n        tooltip=\"Copy anchor link\"\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <CopyAnchorLinkShortcutBadge shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nCopyAnchorLinkButton.displayName = \"CopyAnchorLinkButton\"\n","import * as React from \"react\"\nimport { type Editor } from \"@tiptap/react\"\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { getEditorExtension } from \"@/lib/tiptap-advanced-utils\"\nimport { selectNodeAndHideFloating } from \"@/hooks/use-floating-toolbar-visibility\"\n\nexport interface UseScrollToHashConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Callback called when the target node is found.\n   * @param nodeId The ID of the found node\n   */\n  onTargetFound?: (nodeId: string) => void\n  /**\n   * Callback called when the target node is not found.\n   * @param hash The hash that was attempted to be scrolled to\n   */\n  onTargetNotFound?: (hash: string) => void\n}\n\n/**\n * Hook to scroll to a specific hash in the Tiptap editor.\n * It finds the node with the given ID and scrolls it into view.\n *\n * @param config Configuration for the scroll behavior\n * @returns Function to scroll to a specific hash\n */\nexport function useScrollToHash(config: UseScrollToHashConfig = {}) {\n  const {\n    editor: providedEditor,\n    onTargetFound = () => {},\n    onTargetNotFound = () => {},\n  } = config\n\n  const { editor } = useTiptapEditor(providedEditor)\n\n  const scrollToNode = React.useCallback(\n    (id: string): boolean => {\n      if (!editor) return false\n\n      const attributeName =\n        getEditorExtension(editor, \"uniqueID\")?.options?.attributeName ??\n        \"data-id\"\n      let position: number | null = null\n\n      editor.state.doc.descendants((node, pos) => {\n        if (node.attrs?.[attributeName] === id) {\n          position = pos\n          return false\n        }\n        return true\n      })\n\n      if (position === null) return false\n\n      selectNodeAndHideFloating(editor, position)\n\n      setTimeout(() => {\n        const dom = editor.view.nodeDOM(position!) as HTMLElement | null\n\n        if (dom) {\n          dom.scrollIntoView({ behavior: \"smooth\", block: \"center\" })\n        }\n      }, 0)\n\n      return true\n    },\n    [editor]\n  )\n\n  const handleScroll = React.useCallback(\n    (delay = 0) => {\n      const hash = window.location.hash?.substring(1)\n      if (!hash) return\n\n      setTimeout(() => {\n        if (scrollToNode(hash)) {\n          onTargetFound(hash)\n        } else {\n          onTargetNotFound(hash)\n        }\n      }, delay)\n    },\n    [scrollToNode, onTargetFound, onTargetNotFound]\n  )\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    // Handle collaboration sync or immediate scroll\n    const provider = editor.extensionManager.extensions.find(\n      (ext) => ext.name === \"collaborationCaret\"\n    )?.options?.provider\n\n    if (provider?.on) {\n      const syncHandler = () => handleScroll(500)\n      provider.on(\"synced\", syncHandler)\n\n      return () => {\n        provider.off?.(\"synced\", syncHandler)\n      }\n    } else {\n      handleScroll(500)\n    }\n  }, [editor, handleScroll])\n\n  React.useEffect(() => {\n    const immediateScroll = () => handleScroll()\n    const delayedScroll = () => handleScroll(500)\n\n    window.addEventListener(\"hashchange\", immediateScroll)\n    window.addEventListener(\"pageshow\", delayedScroll)\n    window.addEventListener(\"popstate\", immediateScroll)\n\n    return () => {\n      window.removeEventListener(\"hashchange\", immediateScroll)\n      window.removeEventListener(\"pageshow\", delayedScroll)\n      window.removeEventListener(\"popstate\", immediateScroll)\n    }\n  }, [handleScroll])\n\n  return { scrollToHash: scrollToNode }\n}\n","import * as React from \"react\"\n\nexport const ArrowLeftIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M12.7071 5.70711C13.0976 5.31658 13.0976 4.68342 12.7071 4.29289C12.3166 3.90237 11.6834 3.90237 11.2929 4.29289L4.29289 11.2929C3.90237 11.6834 3.90237 12.3166 4.29289 12.7071L11.2929 19.7071C11.6834 20.0976 12.3166 20.0976 12.7071 19.7071C13.0976 19.3166 13.0976 18.6834 12.7071 18.2929L7.41421 13L19 13C19.5523 13 20 12.5523 20 12C20 11.4477 19.5523 11 19 11L7.41421 11L12.7071 5.70711Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nArrowLeftIcon.displayName = \"ArrowLeftIcon\"\n","import * as React from \"react\"\n\nexport const MoreVerticalIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M10 12C10 10.8954 10.8954 10 12 10C13.1046 10 14 10.8954 14 12C14 13.1046 13.1046 14 12 14C10.8954 14 10 13.1046 10 12Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M10 5C10 3.89543 10.8954 3 12 3C13.1046 3 14 3.89543 14 5C14 6.10457 13.1046 7 12 7C10.8954 7 10 6.10457 10 5Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M10 19C10 17.8954 10.8954 17 12 17C13.1046 17 14 17.8954 14 19C14 20.1046 13.1046 21 12 21C10.8954 21 10 20.1046 10 19Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nMoreVerticalIcon.displayName = \"MoreVerticalIcon\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Separator } from \"@/components/tiptap-ui-primitive/separator\"\nimport { cn } from \"@/lib/tiptap-utils\"\nimport { useMenuNavigation } from \"@/hooks/use-menu-navigation\"\nimport { useComposedRef } from \"@/hooks/use-composed-ref\"\n\ntype BaseProps = React.HTMLAttributes<HTMLDivElement>\n\ninterface ToolbarProps extends BaseProps {\n  variant?: \"floating\" | \"fixed\"\n}\n\nconst useToolbarNavigation = (\n  toolbarRef: React.RefObject<HTMLDivElement | null>\n) => {\n  const [items, setItems] = React.useState<HTMLElement[]>([])\n\n  const collectItems = React.useCallback(() => {\n    if (!toolbarRef.current) return []\n    return Array.from(\n      toolbarRef.current.querySelectorAll<HTMLElement>(\n        'button:not([disabled]), [role=\"button\"]:not([disabled]), [tabindex=\"0\"]:not([disabled])'\n      )\n    )\n  }, [toolbarRef])\n\n  React.useEffect(() => {\n    const toolbar = toolbarRef.current\n    if (!toolbar) return\n\n    const updateItems = () => setItems(collectItems())\n\n    updateItems()\n    const observer = new MutationObserver(updateItems)\n    observer.observe(toolbar, { childList: true, subtree: true })\n\n    return () => observer.disconnect()\n  }, [collectItems, toolbarRef])\n\n  const { selectedIndex } = useMenuNavigation<HTMLElement>({\n    containerRef: toolbarRef,\n    items,\n    orientation: \"horizontal\",\n    onSelect: (el) => el.click(),\n    autoSelectFirstItem: false,\n  })\n\n  React.useEffect(() => {\n    const toolbar = toolbarRef.current\n    if (!toolbar) return\n\n    const handleFocus = (e: FocusEvent) => {\n      const target = e.target as HTMLElement\n      if (toolbar.contains(target))\n        target.setAttribute(\"data-focus-visible\", \"true\")\n    }\n\n    const handleBlur = (e: FocusEvent) => {\n      const target = e.target as HTMLElement\n      if (toolbar.contains(target)) target.removeAttribute(\"data-focus-visible\")\n    }\n\n    toolbar.addEventListener(\"focus\", handleFocus, true)\n    toolbar.addEventListener(\"blur\", handleBlur, true)\n\n    return () => {\n      toolbar.removeEventListener(\"focus\", handleFocus, true)\n      toolbar.removeEventListener(\"blur\", handleBlur, true)\n    }\n  }, [toolbarRef])\n\n  React.useEffect(() => {\n    if (selectedIndex !== undefined && items[selectedIndex]) {\n      items[selectedIndex].focus()\n    }\n  }, [selectedIndex, items])\n}\n\nexport const Toolbar = React.forwardRef<HTMLDivElement, ToolbarProps>(\n  ({ children, className, variant = \"fixed\", ...props }, ref) => {\n    const toolbarRef = React.useRef<HTMLDivElement>(null)\n    const composedRef = useComposedRef(toolbarRef, ref)\n    useToolbarNavigation(toolbarRef)\n\n    return (\n      <div\n        ref={composedRef}\n        role=\"toolbar\"\n        aria-label=\"toolbar\"\n        data-variant={variant}\n        className={cn(\"tiptap-toolbar\", className)}\n        {...props}\n      >\n        {children}\n      </div>\n    )\n  }\n)\nToolbar.displayName = \"Toolbar\"\n\nexport const ToolbarGroup = React.forwardRef<HTMLDivElement, BaseProps>(\n  ({ children, className, ...props }, ref) => (\n    <div\n      ref={ref}\n      role=\"group\"\n      className={cn(\"tiptap-toolbar-group\", className)}\n      {...props}\n    >\n      {children}\n    </div>\n  )\n)\nToolbarGroup.displayName = \"ToolbarGroup\"\n\nexport const ToolbarSeparator = React.forwardRef<HTMLDivElement, BaseProps>(\n  ({ ...props }, ref) => (\n    <Separator ref={ref} orientation=\"vertical\" decorative {...props} />\n  )\n)\nToolbarSeparator.displayName = \"ToolbarSeparator\"\n","\"use client\"\n\nimport * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type { UseMoveNodeConfig } from \"@/components/tiptap-ui/move-node-button\"\nimport { useMoveNode } from \"@/components/tiptap-ui/move-node-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface MoveNodeButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseMoveNodeConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function MoveNodeShortcutBadge({\n  shortcutKeys,\n}: {\n  shortcutKeys: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for moving a node up or down in a Tiptap editor.\n */\nexport const MoveNodeButton = React.forwardRef<\n  HTMLButtonElement,\n  MoveNodeButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      text,\n      direction,\n      hideWhenUnavailable = false,\n      onMoved,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      handleMoveNode,\n      canMoveNode,\n      label,\n      shortcutKeys,\n      Icon,\n    } = useMoveNode({\n      editor,\n      direction,\n      hideWhenUnavailable,\n      onMoved,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleMoveNode()\n      },\n      [handleMoveNode, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    const tooltip = direction === \"up\" ? \"Move Up\" : \"Move Down\"\n\n    return (\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        role=\"button\"\n        tabIndex={-1}\n        aria-label={label}\n        tooltip={tooltip}\n        disabled={!canMoveNode}\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text && <span className=\"tiptap-button-text\">{text}</span>}\n            {showShortcut && (\n              <MoveNodeShortcutBadge shortcutKeys={shortcutKeys} />\n            )}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nMoveNodeButton.displayName = \"MoveNodeButton\"\n","import * as React from \"react\"\n\nexport const AlignTopIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M2 4C2 3.44772 2.44772 3 3 3H21C21.5523 3 22 3.44772 22 4C22 4.55228 21.5523 5 21 5H3C2.44772 5 2 4.55228 2 4Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M13 10.4142L14.2929 11.7071C14.6834 12.0976 15.3166 12.0976 15.7071 11.7071C16.0976 11.3166 16.0976 10.6834 15.7071 10.2929L12.7071 7.29289C12.3166 6.90237 11.6834 6.90237 11.2929 7.29289L8.29289 10.2929C7.90237 10.6834 7.90237 11.3166 8.29289 11.7071C8.68342 12.0976 9.31658 12.0976 9.70711 11.7071L11 10.4142L11 20C11 20.5523 11.4477 21 12 21C12.5523 21 13 20.5523 13 20L13 10.4142Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nAlignTopIcon.displayName = \"AlignTopIcon\"\n","import * as React from \"react\"\n\nexport const AlignBottomIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M11 11.5858L9.70711 10.2929C9.31658 9.90237 8.68342 9.90237 8.29289 10.2929C7.90237 10.6834 7.90237 11.3166 8.29289 11.7071L11.2929 14.7071C11.6834 15.0976 12.3166 15.0976 12.7071 14.7071L15.7071 11.7071C16.0976 11.3166 16.0976 10.6834 15.7071 10.2929C15.3166 9.90237 14.6834 9.90237 14.2929 10.2929L13 11.5858V4C13 3.44771 12.5523 3 12 3C11.4477 3 11 3.44771 11 4V11.5858Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M2 18C2 17.4477 2.44772 17 3 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19H3C2.44772 19 2 18.5523 2 18Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nAlignBottomIcon.displayName = \"AlignBottomIcon\"\n","import * as React from \"react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport { type Editor } from \"@tiptap/react\"\nimport { TextSelection } from \"@tiptap/pm/state\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Utils ---\nimport { getAnchorNodeAndPos } from \"@/lib/tiptap-advanced-utils\"\n\n// --- Icons ---\nimport { AlignTopIcon } from \"@/components/tiptap-icons/align-top-icon\"\nimport { AlignBottomIcon } from \"@/components/tiptap-icons/align-bottom-icon\"\n\nexport const MOVE_UP_SHORTCUT_KEY = \"mod+shift+ArrowUp\"\nexport const MOVE_DOWN_SHORTCUT_KEY = \"mod+shift+ArrowDown\"\n\n/**\n * Configuration for the move node functionality\n */\nexport interface UseMoveNodeConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether the button should hide when moving is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * The direction to move the node.\n   */\n  direction: \"up\" | \"down\"\n  /**\n   * Callback function called after a successful move.\n   */\n  onMoved?: (direction: \"up\" | \"down\") => void\n}\n\n/**\n * Checks if a node can be moved in the specified direction\n */\nexport function canMoveNode(\n  editor: Editor | null,\n  direction: \"up\" | \"down\"\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  const nodeInfo = getAnchorNodeAndPos(editor)\n  if (!nodeInfo) return false\n\n  try {\n    const { pos } = nodeInfo\n    const $pos = editor.state.doc.resolve(pos)\n    const parent = $pos.parent\n    const index = $pos.index()\n\n    return direction === \"up\" ? index > 0 : index < parent.childCount - 1\n  } catch {\n    return false\n  }\n}\n\n/**\n * Moves a node in the editor\n */\nexport function moveNode(\n  editor: Editor | null,\n  direction: \"up\" | \"down\"\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  const nodeInfo = getAnchorNodeAndPos(editor)\n  if (!nodeInfo) return false\n\n  try {\n    const { pos, node } = nodeInfo\n    const tr = editor.state.tr\n    const $pos = tr.doc.resolve(pos)\n    const parent = $pos.parent\n    const index = $pos.index()\n\n    if (index < 0 || index >= parent.childCount) {\n      return false\n    }\n\n    if (direction === \"up\" && index > 0) {\n      const prevNode = parent.child(index - 1)\n      const prevSize = prevNode.nodeSize\n\n      const movedNode = node.type.create(node.attrs, node.content, node.marks)\n      tr.deleteRange(pos, pos + node.nodeSize)\n      const insertPos = pos - prevSize\n      tr.insert(insertPos, movedNode)\n      tr.setSelection(TextSelection.near(tr.doc.resolve(insertPos)))\n    } else if (direction === \"down\" && index < parent.childCount - 1) {\n      const nextNode = parent.child(index + 1)\n      const nextSize = nextNode.nodeSize\n\n      const movedNode = node.type.create(node.attrs, node.content, node.marks)\n      tr.deleteRange(pos, pos + node.nodeSize)\n      const insertPos = pos + nextSize\n      tr.insert(insertPos, movedNode)\n      tr.setSelection(TextSelection.near(tr.doc.resolve(insertPos)))\n    } else {\n      return false\n    }\n\n    editor.view.dispatch(tr)\n    return true\n  } catch (err) {\n    console.error(\"Error moving node:\", err)\n    return false\n  }\n}\n\n/**\n * Determines if the move button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  direction: \"up\" | \"down\"\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, direction, hideWhenUnavailable } = props\n\n  if (!editor || !editor.isEditable) return false\n\n  const hasNode = !!getAnchorNodeAndPos(editor)\n  const movable = canMoveNode(editor, direction)\n\n  return hideWhenUnavailable ? hasNode && movable : hasNode\n}\n\n/**\n * Custom hook that provides move node functionality for Tiptap editor\n */\nexport function useMoveNode(config: UseMoveNodeConfig) {\n  const {\n    editor: providedEditor,\n    hideWhenUnavailable = false,\n    direction,\n    onMoved,\n  } = config\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n\n  const [isVisible, setIsVisible] = React.useState(true)\n  const [canMoveNodeState, setCanMoveNodeState] = React.useState(false)\n\n  const handleMoveNode = React.useCallback(() => {\n    if (!canMoveNodeState) return false\n\n    const success = moveNode(editor, direction)\n    if (success) onMoved?.(direction)\n\n    return success\n  }, [editor, direction, onMoved, canMoveNodeState])\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const update = () => {\n      setIsVisible(shouldShowButton({ editor, direction, hideWhenUnavailable }))\n      setCanMoveNodeState(canMoveNode(editor, direction))\n    }\n\n    update()\n\n    editor.on(\"selectionUpdate\", update)\n    return () => {\n      editor.off(\"selectionUpdate\", update)\n    }\n  }, [editor, direction, hideWhenUnavailable])\n\n  const shortcutKeys =\n    direction === \"up\" ? MOVE_UP_SHORTCUT_KEY : MOVE_DOWN_SHORTCUT_KEY\n\n  useHotkeys(\n    shortcutKeys,\n    (event) => {\n      event.preventDefault()\n      handleMoveNode()\n    },\n    {\n      enabled: isVisible && canMoveNodeState,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    },\n    [handleMoveNode, isVisible, canMoveNodeState, isMobile]\n  )\n\n  const label = direction === \"up\" ? \"Move Up\" : \"Move Down\"\n  const Icon = direction === \"up\" ? AlignTopIcon : AlignBottomIcon\n\n  return {\n    isVisible,\n    handleMoveNode,\n    canMoveNode: canMoveNodeState,\n    label,\n    shortcutKeys,\n    Icon,\n  }\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useThrottledCallback } from \"./use-throttled-callback\"\n\nexport type RectState = Omit<DOMRect, \"toJSON\">\n\nexport interface ElementRectOptions {\n  /**\n   * The element to track. Can be an Element, ref, or selector string.\n   * Defaults to document.body if not provided.\n   */\n  element?: Element | React.RefObject<Element> | string | null\n  /**\n   * Whether to enable rect tracking\n   */\n  enabled?: boolean\n  /**\n   * Throttle delay in milliseconds for rect updates\n   */\n  throttleMs?: number\n  /**\n   * Whether to use ResizeObserver for more accurate tracking\n   */\n  useResizeObserver?: boolean\n}\n\nconst initialRect: RectState = {\n  x: 0,\n  y: 0,\n  width: 0,\n  height: 0,\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0,\n}\n\nconst isSSR = typeof window === \"undefined\"\nconst hasResizeObserver = !isSSR && typeof ResizeObserver !== \"undefined\"\n\n/**\n * Helper function to check if code is running on client side\n */\nconst isClientSide = (): boolean => !isSSR\n\n/**\n * Custom hook that tracks an element's bounding rectangle and updates on resize, scroll, etc.\n *\n * @param options Configuration options for element rect tracking\n * @returns The current bounding rectangle of the element\n */\nexport function useElementRect({\n  element,\n  enabled = true,\n  throttleMs = 100,\n  useResizeObserver = true,\n}: ElementRectOptions = {}): RectState {\n  const [rect, setRect] = React.useState<RectState>(initialRect)\n\n  const getTargetElement = React.useCallback((): Element | null => {\n    if (!enabled || !isClientSide()) return null\n\n    if (!element) {\n      return document.body\n    }\n\n    if (typeof element === \"string\") {\n      return document.querySelector(element)\n    }\n\n    if (\"current\" in element) {\n      return element.current\n    }\n\n    return element\n  }, [element, enabled])\n\n  const updateRect = useThrottledCallback(\n    () => {\n      if (!enabled || !isClientSide()) return\n\n      const targetElement = getTargetElement()\n      if (!targetElement) {\n        setRect(initialRect)\n        return\n      }\n\n      const newRect = targetElement.getBoundingClientRect()\n      setRect({\n        x: newRect.x,\n        y: newRect.y,\n        width: newRect.width,\n        height: newRect.height,\n        top: newRect.top,\n        right: newRect.right,\n        bottom: newRect.bottom,\n        left: newRect.left,\n      })\n    },\n    throttleMs,\n    [enabled, getTargetElement],\n    { leading: true, trailing: true }\n  )\n\n  React.useEffect(() => {\n    if (!enabled || !isClientSide()) {\n      setRect(initialRect)\n      return\n    }\n\n    const targetElement = getTargetElement()\n    if (!targetElement) return\n\n    updateRect()\n\n    const cleanup: (() => void)[] = []\n\n    if (useResizeObserver && hasResizeObserver) {\n      const resizeObserver = new ResizeObserver(() => {\n        window.requestAnimationFrame(updateRect)\n      })\n      resizeObserver.observe(targetElement)\n      cleanup.push(() => resizeObserver.disconnect())\n    }\n\n    const handleUpdate = () => updateRect()\n\n    window.addEventListener(\"scroll\", handleUpdate, { passive: true })\n    window.addEventListener(\"resize\", handleUpdate, { passive: true })\n\n    cleanup.push(() => {\n      window.removeEventListener(\"scroll\", handleUpdate)\n      window.removeEventListener(\"resize\", handleUpdate)\n    })\n\n    return () => {\n      cleanup.forEach((fn) => fn())\n      setRect(initialRect)\n    }\n  }, [enabled, getTargetElement, updateRect, useResizeObserver])\n\n  return rect\n}\n\n/**\n * Convenience hook for tracking document.body rect\n */\nexport function useBodyRect(\n  options: Omit<ElementRectOptions, \"element\"> = {}\n): RectState {\n  return useElementRect({\n    ...options,\n    element: isClientSide() ? document.body : null,\n  })\n}\n\n/**\n * Convenience hook for tracking a ref element's rect\n */\nexport function useRefRect<T extends Element>(\n  ref: React.RefObject<T>,\n  options: Omit<ElementRectOptions, \"element\"> = {}\n): RectState {\n  return useElementRect({ ...options, element: ref })\n}\n","import * as React from \"react\"\nimport type { Editor } from \"@tiptap/react\"\nimport { useWindowSize } from \"@/hooks/use-window-size\"\nimport { useBodyRect } from \"./use-element-rect\"\n\nexport interface CursorVisibilityOptions {\n  /**\n   * The Tiptap editor instance\n   */\n  editor?: Editor | null\n  /**\n   * Reference to the toolbar element that may obscure the cursor\n   */\n  overlayHeight?: number\n}\n\n/**\n * Custom hook that ensures the cursor remains visible when typing in a Tiptap editor.\n * Automatically scrolls the window when the cursor would be hidden by the toolbar.\n *\n * @param options.editor The Tiptap editor instance\n * @param options.overlayHeight Toolbar height to account for\n * @returns The bounding rect of the body\n */\nexport function useCursorVisibility({\n  editor,\n  overlayHeight = 0,\n}: CursorVisibilityOptions) {\n  const { height: windowHeight } = useWindowSize()\n  const rect = useBodyRect({\n    enabled: true,\n    throttleMs: 100,\n    useResizeObserver: true,\n  })\n\n  React.useEffect(() => {\n    const ensureCursorVisibility = () => {\n      if (!editor) return\n\n      const { state, view } = editor\n      if (!view.hasFocus()) return\n\n      // Get current cursor position coordinates\n      const { from } = state.selection\n      const cursorCoords = view.coordsAtPos(from)\n\n      if (windowHeight < rect.height && cursorCoords) {\n        const availableSpace = windowHeight - cursorCoords.top\n\n        // If the cursor is hidden behind the overlay or offscreen, scroll it into view\n        if (availableSpace < overlayHeight) {\n          const targetCursorY = Math.max(windowHeight / 2, overlayHeight)\n          const currentScrollY = window.scrollY\n          const cursorAbsoluteY = cursorCoords.top + currentScrollY\n          const newScrollY = cursorAbsoluteY - targetCursorY\n\n          window.scrollTo({\n            top: Math.max(0, newScrollY),\n            behavior: \"smooth\",\n          })\n        }\n      }\n    }\n\n    ensureCursorVisibility()\n  }, [editor, overlayHeight, windowHeight, rect.height])\n\n  return rect\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { type Editor } from \"@tiptap/react\"\n\n// --- Hooks ---\nimport { useIsMobile } from \"@/hooks/use-mobile\"\nimport {\n  useWindowSize,\n  type WindowSizeState,\n} from \"@/hooks/use-window-size\"\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport {\n  ColorHighlightPopover,\n  ColorHighlightPopoverButton,\n  ColorHighlightPopoverContent,\n} from \"@/components/tiptap-ui/color-highlight-popover\"\nimport { ImageUploadButton } from \"@/components/tiptap-ui/image-upload-button\"\nimport {\n  LinkButton,\n  LinkContent,\n  LinkPopover,\n  type PageData,\n} from \"@/components/tiptap-ui/link-popover\"\nimport { MarkButton } from \"@/components/tiptap-ui/mark-button\"\nimport { TextAlignButton } from \"@/components/tiptap-ui/text-align-button\"\nimport { SlashCommandTriggerButton } from \"@/components/tiptap-ui/slash-command-trigger-button\"\nimport { ResetAllFormattingButton } from \"@/components/tiptap-ui/reset-all-formatting-button\"\nimport { DeleteNodeButton } from \"@/components/tiptap-ui/delete-node-button\"\nimport { CopyAnchorLinkButton } from \"@/components/tiptap-ui/copy-anchor-link-button\"\nimport { TurnIntoDropdownContent } from \"@/components/tiptap-ui/turn-into-dropdown\"\nimport { useRecentColors } from \"@/components/tiptap-ui/color-text-popover\"\nimport {\n  ColorTextButton,\n  TEXT_COLORS,\n} from \"@/components/tiptap-ui/color-text-button\"\nimport {\n  ColorHighlightButton,\n  HIGHLIGHT_COLORS,\n} from \"@/components/tiptap-ui/color-highlight-button\"\nimport { useMenuActionVisibility } from \"@/components/tiptap-ui/drag-context-menu\"\nimport { AiAskButton } from \"@/components/tiptap-ui/ai-ask-button\"\nimport { DuplicateButton } from \"@/components/tiptap-ui/duplicate-button\"\nimport { CopyToClipboardButton } from \"@/components/tiptap-ui/copy-to-clipboard-button\"\n\n// --- Utils ---\nimport { getNodeDisplayName } from \"@/lib/tiptap-collab-utils\"\n\n// --- Icons ---\nimport { PaintBucketIcon } from \"@/components/tiptap-icons/paint-bucket-icon\"\nimport { Repeat2Icon } from \"@/components/tiptap-icons/repeat-2-icon\"\n\n// --- UI Primitives ---\nimport {\n  Card,\n  CardBody,\n  CardGroupLabel,\n  CardItemGroup,\n} from \"@/components/tiptap-ui-primitive/card\"\nimport { Spacer } from \"@/components/tiptap-ui-primitive/spacer\"\nimport { Separator } from \"@/components/tiptap-ui-primitive/separator\"\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuPortal,\n  DropdownMenuSub,\n  DropdownMenuSubContent,\n  DropdownMenuSubTrigger,\n  DropdownMenuTrigger,\n} from \"@/components/tiptap-ui-primitive/dropdown-menu\"\nimport { ArrowLeftIcon } from \"@/components/tiptap-icons/arrow-left-icon\"\nimport { ChevronRightIcon } from \"@/components/tiptap-icons/chevron-right-icon\"\nimport { HighlighterIcon } from \"@/components/tiptap-icons/highlighter-icon\"\nimport { LinkIcon } from \"@/components/tiptap-icons/link-icon\"\nimport { MoreVerticalIcon } from \"@/components/tiptap-icons/more-vertical-icon\"\nimport { Button, ButtonGroup } from \"@/components/tiptap-ui-primitive/button\"\nimport {\n  Toolbar,\n  ToolbarGroup,\n  ToolbarSeparator,\n} from \"@/components/tiptap-ui-primitive/toolbar\"\nimport { MoveNodeButton } from \"@/components/tiptap-ui/move-node-button\"\nimport { useCursorVisibility } from \"@/hooks/use-cursor-visibility\"\n\n// =============================================================================\n// Types & Constants\n// =============================================================================\n\nconst TOOLBAR_VIEWS = {\n  MAIN: \"main\",\n  HIGHLIGHTER: \"highlighter\",\n  LINK: \"link\",\n} as const\n\ntype ToolbarViewId = (typeof TOOLBAR_VIEWS)[keyof typeof TOOLBAR_VIEWS]\n\nexport type ToolbarViewType = {\n  id: string\n  title: string\n  icon: React.ReactNode\n  content: React.ReactNode\n  mobileButton?: (onClick: () => void) => React.ReactNode\n  desktopComponent?: React.ReactNode\n}\n\ntype ToolbarViewRegistry = Record<\n  Exclude<ToolbarViewId, typeof TOOLBAR_VIEWS.MAIN>,\n  ToolbarViewType\n>\n\ninterface ToolbarState {\n  viewId: ToolbarViewId\n  setViewId: (id: ToolbarViewId) => void\n  isMainView: boolean\n  showMainView: () => void\n  showView: (id: ToolbarViewId) => void\n}\n\n// =============================================================================\n// Hooks\n// =============================================================================\n\nfunction useToolbarState(isMobile: boolean): ToolbarState {\n  const [viewId, setViewId] = React.useState<ToolbarViewId>(TOOLBAR_VIEWS.MAIN)\n\n  React.useEffect(() => {\n    if (!isMobile && viewId !== TOOLBAR_VIEWS.MAIN) {\n      setViewId(TOOLBAR_VIEWS.MAIN)\n    }\n  }, [isMobile, viewId])\n\n  return {\n    viewId,\n    setViewId,\n    isMainView: viewId === TOOLBAR_VIEWS.MAIN,\n    showMainView: () => setViewId(TOOLBAR_VIEWS.MAIN),\n    showView: (id: ToolbarViewId) => setViewId(id),\n  }\n}\n\nfunction hasTextSelection(editor: Editor | null): boolean {\n  if (!editor || !editor.isEditable) return false\n\n  const { selection } = editor.state\n  return !selection.empty\n}\n\nexport function useViewportTransform(\n  vp: WindowSizeState,\n  bodyRect: Omit<DOMRect, \"toJSON\">\n) {\n  const [transform, setTransform] = React.useState<string>(\"none\")\n\n  React.useEffect(() => {\n    if (typeof document === \"undefined\") return\n\n    try {\n      const transformOffsetTop = vp.height - bodyRect.height + vp.offsetTop\n      const transformScale = 1 / vp.scale\n\n      const newTransform = `translate(${vp.offsetLeft}px, ${transformOffsetTop}px) scale(${transformScale})`\n      setTransform(newTransform)\n    } catch {\n      setTransform(\"none\")\n    }\n  }, [vp.height, vp.offsetTop, vp.offsetLeft, vp.scale, bodyRect.height])\n\n  return transform\n}\n\n// =============================================================================\n// Toolbar View Registry\n// =============================================================================\n\nfunction createToolbarViewRegistry(pages: PageData[] = []): ToolbarViewRegistry {\n  return {\n    [TOOLBAR_VIEWS.HIGHLIGHTER]: {\n      id: TOOLBAR_VIEWS.HIGHLIGHTER,\n      title: \"Text Highlighter\",\n      icon: <HighlighterIcon className=\"tiptap-button-icon\" />,\n      content: <ColorHighlightPopoverContent />,\n      mobileButton: (onClick: () => void) => (\n        <ColorHighlightPopoverButton onClick={onClick} />\n      ),\n      desktopComponent: <ColorHighlightPopover />,\n    },\n    [TOOLBAR_VIEWS.LINK]: {\n      id: TOOLBAR_VIEWS.LINK,\n      title: \"Link Editor\",\n      icon: <LinkIcon className=\"tiptap-button-icon\" />,\n      content: <LinkContent pages={pages} />,\n      mobileButton: (onClick: () => void) => <LinkButton onClick={onClick} />,\n      desktopComponent: <LinkPopover pages={pages} />,\n    },\n  }\n}\n\n// =============================================================================\n// Sub-Components\n// =============================================================================\n\nfunction AlignmentGroup() {\n  return (\n    <ToolbarGroup>\n      <TextAlignButton align=\"left\" />\n      <TextAlignButton align=\"center\" />\n      <TextAlignButton align=\"right\" />\n      <TextAlignButton align=\"justify\" />\n    </ToolbarGroup>\n  )\n}\n\nfunction ScriptGroup() {\n  return (\n    <ToolbarGroup>\n      <MarkButton type=\"superscript\" />\n      <MarkButton type=\"subscript\" />\n    </ToolbarGroup>\n  )\n}\n\nfunction FormattingGroup() {\n  return (\n    <ToolbarGroup>\n      <MarkButton type=\"bold\" />\n      <MarkButton type=\"italic\" />\n      <MarkButton type=\"strike\" />\n      <MarkButton type=\"code\" />\n    </ToolbarGroup>\n  )\n}\n\nfunction ColorActionGroup() {\n  const { recentColors, isInitialized, addRecentColor } = useRecentColors()\n\n  const renderRecentColors = () => {\n    if (!isInitialized || recentColors.length === 0) return null\n\n    return (\n      <>\n        <CardItemGroup>\n          <CardGroupLabel>Recent colors</CardGroupLabel>\n          <ButtonGroup>\n            {recentColors.map((colorObj) => (\n              <DropdownMenuItem\n                key={`${colorObj.type}-${colorObj.value}`}\n                asChild\n              >\n                {colorObj.type === \"text\" ? (\n                  <ColorTextButton\n                    textColor={colorObj.value}\n                    label={colorObj.label}\n                    text={colorObj.label}\n                    tooltip={colorObj.label}\n                    onApplied={({ color, label }) =>\n                      addRecentColor({\n                        type: \"text\",\n                        label,\n                        value: color,\n                      })\n                    }\n                  />\n                ) : (\n                  <ColorHighlightButton\n                    highlightColor={colorObj.value}\n                    text={colorObj.label}\n                    tooltip={colorObj.label}\n                    onApplied={({ color, label }) =>\n                      addRecentColor({\n                        type: \"highlight\",\n                        label,\n                        value: color,\n                      })\n                    }\n                  />\n                )}\n              </DropdownMenuItem>\n            ))}\n          </ButtonGroup>\n        </CardItemGroup>\n        <Separator orientation=\"horizontal\" />\n      </>\n    )\n  }\n\n  return (\n    <DropdownMenuSub>\n      <DropdownMenuSubTrigger asChild>\n        <Button data-style=\"ghost\">\n          <PaintBucketIcon className=\"tiptap-button-icon\" />\n          <span className=\"tiptap-button-text\">Color</span>\n          <Spacer />\n          <ChevronRightIcon className=\"tiptap-button-icon\" />\n        </Button>\n      </DropdownMenuSubTrigger>\n\n      <DropdownMenuPortal>\n        <DropdownMenuSubContent>\n          <Card>\n            <CardBody>\n              {renderRecentColors()}\n\n              <CardItemGroup>\n                <CardGroupLabel>Text color</CardGroupLabel>\n                <ButtonGroup>\n                  {TEXT_COLORS.map((textColor) => (\n                    <DropdownMenuItem key={textColor.value} asChild>\n                      <ColorTextButton\n                        textColor={textColor.value}\n                        label={textColor.label}\n                        text={textColor.label}\n                        tooltip={textColor.label}\n                        onApplied={({ color, label }) =>\n                          addRecentColor({ type: \"text\", label, value: color })\n                        }\n                      />\n                    </DropdownMenuItem>\n                  ))}\n                </ButtonGroup>\n              </CardItemGroup>\n\n              <Separator orientation=\"horizontal\" />\n\n              <CardItemGroup>\n                <CardGroupLabel>Highlight color</CardGroupLabel>\n                <ButtonGroup>\n                  {HIGHLIGHT_COLORS.map((highlightColor) => (\n                    <DropdownMenuItem key={highlightColor.value} asChild>\n                      <ColorHighlightButton\n                        highlightColor={highlightColor.value}\n                        text={highlightColor.label}\n                        tooltip={highlightColor.label}\n                        onApplied={({ color, label }) =>\n                          addRecentColor({\n                            type: \"highlight\",\n                            label,\n                            value: color,\n                          })\n                        }\n                      />\n                    </DropdownMenuItem>\n                  ))}\n                </ButtonGroup>\n              </CardItemGroup>\n            </CardBody>\n          </Card>\n        </DropdownMenuSubContent>\n      </DropdownMenuPortal>\n    </DropdownMenuSub>\n  )\n}\n\nfunction TransformActionGroup() {\n  return (\n    <DropdownMenuSub>\n      <DropdownMenuSubTrigger asChild>\n        <Button data-style=\"ghost\">\n          <Repeat2Icon className=\"tiptap-button-icon\" />\n          <span className=\"tiptap-button-text\">Turn into</span>\n          <Spacer />\n          <ChevronRightIcon className=\"tiptap-button-icon\" />\n        </Button>\n      </DropdownMenuSubTrigger>\n\n      <DropdownMenuSubContent>\n        <TurnIntoDropdownContent />\n      </DropdownMenuSubContent>\n    </DropdownMenuSub>\n  )\n}\n\n// =============================================================================\n// Dropdown Menu Components\n// =============================================================================\n\ninterface DropdownMenuActionsProps {\n  editor: Editor | null\n}\n\nfunction DropdownMenuActions({ editor }: DropdownMenuActionsProps) {\n  const {\n    hasAnyActionGroups,\n    hasColorActions,\n    hasTransformActions,\n    hasResetFormatting,\n  } = useMenuActionVisibility(editor)\n  const isMobile = useIsMobile()\n\n  return (\n    <Card>\n      <CardBody>\n        <CardItemGroup>\n          <CardGroupLabel>{getNodeDisplayName(editor)}</CardGroupLabel>\n          <ButtonGroup>\n            {hasColorActions && <ColorActionGroup />}\n            {hasTransformActions && <TransformActionGroup />}\n            {hasResetFormatting && (\n              <DropdownMenuItem asChild>\n                <ResetAllFormattingButton text=\"Reset formatting\" />\n              </DropdownMenuItem>\n            )}\n          </ButtonGroup>\n        </CardItemGroup>\n\n        {hasAnyActionGroups && <Separator orientation=\"horizontal\" />}\n\n        <ButtonGroup>\n          <DropdownMenuItem asChild>\n            <DuplicateButton text=\"Duplicate node\" showShortcut={!isMobile} />\n          </DropdownMenuItem>\n          <DropdownMenuItem asChild>\n            <CopyToClipboardButton\n              text=\"Copy to clipboard\"\n              showShortcut={!isMobile}\n            />\n          </DropdownMenuItem>\n          <DropdownMenuItem asChild>\n            <CopyAnchorLinkButton\n              text=\"Copy anchor link\"\n              showShortcut={!isMobile}\n            />\n          </DropdownMenuItem>\n        </ButtonGroup>\n\n        <Separator orientation=\"horizontal\" />\n\n        <ButtonGroup>\n          <DropdownMenuItem asChild>\n            <AiAskButton text=\"Ask AI\" showShortcut={!isMobile} />\n          </DropdownMenuItem>\n        </ButtonGroup>\n\n        <Separator orientation=\"horizontal\" />\n\n        <ButtonGroup>\n          <DropdownMenuItem asChild>\n            <DeleteNodeButton text=\"Delete\" showShortcut={!isMobile} />\n          </DropdownMenuItem>\n        </ButtonGroup>\n      </CardBody>\n    </Card>\n  )\n}\n\nfunction MoreActionsDropdown({ editor }: DropdownMenuActionsProps) {\n  return (\n    <DropdownMenu modal={true}>\n      <DropdownMenuTrigger asChild>\n        <Button data-style=\"ghost\" data-appearance=\"subdued\">\n          <MoreVerticalIcon className=\"tiptap-button-icon\" />\n        </Button>\n      </DropdownMenuTrigger>\n      <DropdownMenuContent portal={true}>\n        <DropdownMenuActions editor={editor} />\n      </DropdownMenuContent>\n    </DropdownMenu>\n  )\n}\n\n// =============================================================================\n// Toolbar View Components\n// =============================================================================\n\ninterface ToolbarViewButtonProps {\n  view: ToolbarViewType\n  isMobile: boolean\n  onViewChange: (viewId: ToolbarViewId) => void\n}\n\nfunction ToolbarViewButton({\n  view,\n  isMobile,\n  onViewChange,\n}: ToolbarViewButtonProps) {\n  const viewId = view.id as Exclude<ToolbarViewId, typeof TOOLBAR_VIEWS.MAIN>\n\n  if (isMobile) {\n    return view.mobileButton ? (\n      React.cloneElement(\n        view.mobileButton(() => onViewChange(viewId)) as React.ReactElement,\n        { key: view.id }\n      )\n    ) : (\n      <Button key={view.id} onClick={() => onViewChange(viewId)}>\n        {view.icon}\n      </Button>\n    )\n  }\n\n  return view.desktopComponent\n    ? React.cloneElement(view.desktopComponent as React.ReactElement, {\n        key: view.id,\n      })\n    : null\n}\n\ninterface ToolbarViewsGroupProps {\n  toolbarViews: ToolbarViewRegistry\n  isMobile: boolean\n  onViewChange: (viewId: ToolbarViewId) => void\n}\n\nfunction ToolbarViewsGroup({\n  toolbarViews,\n  isMobile,\n  onViewChange,\n}: ToolbarViewsGroupProps) {\n  return (\n    <>\n      {Object.values(toolbarViews).map((view) => (\n        <ToolbarViewButton\n          key={view.id}\n          view={view}\n          isMobile={isMobile}\n          onViewChange={onViewChange}\n        />\n      ))}\n    </>\n  )\n}\n\n// =============================================================================\n// Main Toolbar Content\n// =============================================================================\n\ninterface MainToolbarContentProps {\n  editor: Editor | null\n  isMobile: boolean\n  toolbarViews: ToolbarViewRegistry\n  onViewChange: (viewId: ToolbarViewId) => void\n}\n\nfunction MainToolbarContent({\n  editor,\n  isMobile,\n  toolbarViews,\n  onViewChange,\n}: MainToolbarContentProps) {\n  const hasSelection = hasTextSelection(editor)\n\n  return (\n    <>\n      <ToolbarGroup>\n        <SlashCommandTriggerButton />\n        <MoreActionsDropdown editor={editor} />\n      </ToolbarGroup>\n\n      <ToolbarSeparator />\n\n      <ToolbarGroup>\n        <MoveNodeButton direction=\"down\" />\n        <MoveNodeButton direction=\"up\" />\n      </ToolbarGroup>\n\n      {hasSelection && (\n        <>\n          <ToolbarSeparator />\n\n          <ToolbarSeparator />\n\n          <FormattingGroup />\n\n          <ToolbarSeparator />\n\n          <ToolbarViewsGroup\n            toolbarViews={toolbarViews}\n            isMobile={isMobile}\n            onViewChange={onViewChange}\n          />\n\n          <ToolbarSeparator />\n\n          <ScriptGroup />\n\n          <ToolbarSeparator />\n\n          <AlignmentGroup />\n\n          <ToolbarSeparator />\n\n          <ToolbarGroup>\n            <ImageUploadButton text=\"Add\" />\n          </ToolbarGroup>\n        </>\n      )}\n    </>\n  )\n}\n\n// =============================================================================\n// Specialized Toolbar Content\n// =============================================================================\n\ninterface SpecializedToolbarContentProps {\n  view: ToolbarViewType\n  onBack: () => void\n}\n\nfunction SpecializedToolbarContent({\n  view,\n  onBack,\n}: SpecializedToolbarContentProps) {\n  return (\n    <>\n      <ToolbarGroup>\n        <Button data-style=\"ghost\" onClick={onBack}>\n          <ArrowLeftIcon className=\"tiptap-button-icon\" />\n          {view.icon}\n        </Button>\n      </ToolbarGroup>\n\n      <ToolbarSeparator />\n\n      {view.content}\n    </>\n  )\n}\n\n// =============================================================================\n// Main Component\n// =============================================================================\n\nexport interface MobileToolbarProps {\n  editor?: Editor | null\n}\n\nexport function MobileToolbar({ editor: providedEditor }: MobileToolbarProps) {\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile(480)\n  const toolbarRef = React.useRef<HTMLDivElement>(null)\n  const toolbarState = useToolbarState(isMobile)\n\n  // Get pages from CardNode extension for internal linking\n  const cardNodeExtension = editor?.extensionManager?.extensions?.find(\n    (ext: any) => ext.name === 'cardNode'\n  )\n  const pages = (cardNodeExtension?.options?.pages || []) as PageData[]\n\n  const toolbarViews = React.useMemo(() => createToolbarViewRegistry(pages), [pages])\n\n  const currentView = toolbarState.isMainView\n    ? null\n    : toolbarViews[\n        toolbarState.viewId as Exclude<ToolbarViewId, typeof TOOLBAR_VIEWS.MAIN>\n      ]\n\n  const { height } = useWindowSize()\n  const rect = useCursorVisibility({\n    editor,\n    overlayHeight: toolbarRef.current?.getBoundingClientRect().height ?? 0,\n  })\n\n  if (!isMobile || !editor || !editor.isEditable) {\n    return null\n  }\n\n  return (\n    <Toolbar\n      ref={toolbarRef}\n      style={{\n        ...(isMobile\n          ? {\n              bottom: `calc(100% - ${height - rect.y}px)`,\n            }\n          : {}),\n      }}\n    >\n      {toolbarState.isMainView ? (\n        <MainToolbarContent\n          editor={editor}\n          isMobile={isMobile}\n          toolbarViews={toolbarViews}\n          onViewChange={toolbarState.showView}\n        />\n      ) : (\n        currentView && (\n          <SpecializedToolbarContent\n            view={currentView}\n            onBack={toolbarState.showMainView}\n          />\n        )\n      )}\n    </Toolbar>\n  )\n}\n","import * as React from \"react\"\n\n// --- Lib ---\nimport { parseShortcutKeys } from \"@/lib/tiptap-utils\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Tiptap UI ---\nimport type {\n  ImageAlign,\n  UseImageAlignConfig,\n} from \"@/components/tiptap-ui/image-align-button\"\nimport {\n  IMAGE_ALIGN_SHORTCUT_KEYS,\n  useImageAlign,\n} from \"@/components/tiptap-ui/image-align-button\"\n\n// --- UI Primitives ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Badge } from \"@/components/tiptap-ui-primitive/badge\"\n\nexport interface ImageAlignButtonProps\n  extends Omit<ButtonProps, \"type\">,\n    UseImageAlignConfig {\n  /**\n   * Optional text to display alongside the icon.\n   */\n  text?: string\n  /**\n   * Optional show shortcut keys in the button.\n   * @default false\n   */\n  showShortcut?: boolean\n}\n\nexport function ImageAlignShortcutBadge({\n  align,\n  shortcutKeys = IMAGE_ALIGN_SHORTCUT_KEYS[align],\n}: {\n  align: ImageAlign\n  shortcutKeys?: string\n}) {\n  return <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>\n}\n\n/**\n * Button component for setting image alignment in a Tiptap editor.\n *\n * For custom button implementations, use the `useImageAlign` hook instead.\n */\nexport const ImageAlignButton = React.forwardRef<\n  HTMLButtonElement,\n  ImageAlignButtonProps\n>(\n  (\n    {\n      editor: providedEditor,\n      align,\n      text,\n      extensionName,\n      attributeName = \"data-align\",\n      hideWhenUnavailable = false,\n      onAligned,\n      showShortcut = false,\n      onClick,\n      children,\n      ...buttonProps\n    },\n    ref\n  ) => {\n    const { editor } = useTiptapEditor(providedEditor)\n    const {\n      isVisible,\n      handleImageAlign,\n      label,\n      canAlign,\n      isActive,\n      Icon,\n      shortcutKeys,\n    } = useImageAlign({\n      editor,\n      align,\n      extensionName,\n      attributeName,\n      hideWhenUnavailable,\n      onAligned,\n    })\n\n    const handleClick = React.useCallback(\n      (event: React.MouseEvent<HTMLButtonElement>) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        handleImageAlign()\n      },\n      [handleImageAlign, onClick]\n    )\n\n    if (!isVisible) {\n      return null\n    }\n\n    return (\n      <Button\n        type=\"button\"\n        disabled={!canAlign}\n        data-style=\"ghost\"\n        data-active-state={isActive ? \"on\" : \"off\"}\n        data-disabled={!canAlign}\n        role=\"button\"\n        tabIndex={-1}\n        aria-label={label}\n        aria-pressed={isActive}\n        tooltip={label}\n        onClick={handleClick}\n        {...buttonProps}\n        ref={ref}\n      >\n        {children ?? (\n          <>\n            <Icon className=\"tiptap-button-icon\" />\n            {text ? <span>{text}</span> : null}\n            {showShortcut ? (\n              <ImageAlignShortcutBadge\n                align={align}\n                shortcutKeys={shortcutKeys}\n              />\n            ) : null}\n          </>\n        )}\n      </Button>\n    )\n  }\n)\n\nImageAlignButton.displayName = \"ImageAlignButton\"\n","import * as React from \"react\"\n\nexport const AlignCenterVerticalIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M12 1C12.5523 1 13 1.44772 13 2V22C13 22.5523 12.5523 23 12 23C11.4477 23 11 22.5523 11 22V2C11 1.44772 11.4477 1 12 1Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M2 7C2 5.34315 3.34315 4 5 4H7C7.55228 4 8 4.44772 8 5C8 5.55228 7.55228 6 7 6H5C4.44772 6 4 6.44772 4 7V17C4 17.5523 4.44772 18 5 18H7C7.55228 18 8 18.4477 8 19C8 19.5523 7.55228 20 7 20H5C3.34315 20 2 18.6569 2 17V7Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          d=\"M19 4C20.6569 4 22 5.34315 22 7V17C22 18.6569 20.6569 20 19 20H17C16.4477 20 16 19.5523 16 19C16 18.4477 16.4477 18 17 18H19C19.5523 18 20 17.5523 20 17V7C20 6.44772 19.5523 6 19 6H17C16.4477 6 16 5.55228 16 5C16 4.44772 16.4477 4 17 4H19Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nAlignCenterVerticalIcon.displayName = \"AlignCenterVerticalIcon\"\n","import * as React from \"react\"\n\nexport const AlignEndVerticalIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M21 1C21.5523 1 22 1.44772 22 2V22C22 22.5523 21.5523 23 21 23C20.4477 23 20 22.5523 20 22V2C20 1.44772 20.4477 1 21 1Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M2 7C2 5.34315 3.34315 4 5 4H14C15.6569 4 17 5.34315 17 7V17C17 18.6569 15.6569 20 14 20H5C3.34315 20 2 18.6569 2 17V7ZM5 6C4.44772 6 4 6.44772 4 7V17C4 17.5523 4.44772 18 5 18H14C14.5523 18 15 17.5523 15 17V7C15 6.44772 14.5523 6 14 6H5Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nAlignEndVerticalIcon.displayName = \"AlignEndVerticalIcon\"\n","import * as React from \"react\"\n\nexport const AlignStartVerticalIcon = React.memo(\n  ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n    return (\n      <svg\n        width=\"24\"\n        height=\"24\"\n        className={className}\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n      >\n        <path\n          d=\"M4 2C4 1.44772 3.55228 1 3 1C2.44772 1 2 1.44772 2 2V22C2 22.5523 2.44772 23 3 23C3.55228 23 4 22.5523 4 22V2Z\"\n          fill=\"currentColor\"\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M10 4C8.34315 4 7 5.34315 7 7V17C7 18.6569 8.34315 20 10 20H19C20.6569 20 22 18.6569 22 17V7C22 5.34315 20.6569 4 19 4H10ZM9 7C9 6.44772 9.44772 6 10 6H19C19.5523 6 20 6.44772 20 7V17C20 17.5523 19.5523 18 19 18H10C9.44772 18 9 17.5523 9 17V7Z\"\n          fill=\"currentColor\"\n        />\n      </svg>\n    )\n  }\n)\n\nAlignStartVerticalIcon.displayName = \"AlignStartVerticalIcon\"\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useHotkeys } from \"react-hotkeys-hook\"\nimport { type Editor } from \"@tiptap/react\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\n// --- Lib ---\nimport { isExtensionAvailable } from \"@/lib/tiptap-utils\"\n\n// --- Icons ---\nimport { AlignCenterVerticalIcon } from \"@/components/tiptap-icons/align-center-vertical-icon\"\nimport { AlignEndVerticalIcon } from \"@/components/tiptap-icons/align-end-vertical-icon\"\nimport { AlignStartVerticalIcon } from \"@/components/tiptap-icons/align-start-vertical-icon\"\n\nexport type ImageAlign = \"left\" | \"center\" | \"right\"\n\n/**\n * Configuration for the image align functionality\n */\nexport interface UseImageAlignConfig {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * The image alignment to apply.\n   */\n  align: ImageAlign\n  /**\n   * The name of the image extension to target.\n   * @default \"image\"\n   */\n  extensionName?: string\n  /**\n   * The attribute name used for alignment.\n   * @default \"data-align\"\n   */\n  attributeName?: string\n  /**\n   * Whether the button should hide when alignment is not available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n  /**\n   * Callback function called after a successful alignment change.\n   */\n  onAligned?: () => void\n}\n\nexport const IMAGE_ALIGN_SHORTCUT_KEYS: Record<ImageAlign, string> = {\n  left: \"alt+shift+l\",\n  center: \"alt+shift+e\",\n  right: \"alt+shift+r\",\n}\n\nexport const imageAlignIcons = {\n  left: AlignStartVerticalIcon,\n  center: AlignCenterVerticalIcon,\n  right: AlignEndVerticalIcon,\n}\n\nexport const imageAlignLabels: Record<ImageAlign, string> = {\n  left: \"Image align left\",\n  center: \"Image align center\",\n  right: \"Image align right\",\n}\n\n/**\n * Checks if image alignment can be performed in the current editor state\n */\nexport function canSetImageAlign(\n  editor: Editor | null,\n  align: ImageAlign,\n  extensionName: string = \"image\",\n  attributeName: string = \"data-align\"\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!isExtensionAvailable(editor, [extensionName])) return false\n\n  return editor\n    .can()\n    .updateAttributes(extensionName, { [attributeName]: align })\n}\n\n/**\n * Checks if the image alignment is currently active\n */\nexport function isImageAlignActive(\n  editor: Editor | null,\n  align: ImageAlign,\n  extensionName: string = \"image\",\n  attributeName: string = \"data-align\"\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!isExtensionAvailable(editor, [extensionName])) return false\n\n  const attributes = editor.getAttributes(extensionName)\n  const currentAlign = attributes[attributeName] || \"left\"\n  return currentAlign === align\n}\n\n/**\n * Sets image alignment in the editor\n */\nexport function setImageAlign(\n  editor: Editor | null,\n  align: ImageAlign,\n  extensionName: string = \"image\",\n  attributeName: string = \"data-align\"\n): boolean {\n  if (!editor || !editor.isEditable) return false\n  if (!isExtensionAvailable(editor, [extensionName])) return false\n  if (!canSetImageAlign(editor, align, extensionName, attributeName))\n    return false\n\n  try {\n    return editor\n      .chain()\n      .focus()\n      .updateAttributes(extensionName, { [attributeName]: align })\n      .run()\n  } catch {\n    return false\n  }\n}\n\n/**\n * Determines if the image align button should be shown\n */\nexport function shouldShowButton(props: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n  align: ImageAlign\n  extensionName?: string\n  attributeName?: string\n}): boolean {\n  const {\n    editor,\n    hideWhenUnavailable,\n    align,\n    extensionName = \"image\",\n    attributeName = \"data-align\",\n  } = props\n\n  if (!editor || !editor.isEditable) return false\n  if (!isExtensionAvailable(editor, [extensionName])) return false\n\n  if (hideWhenUnavailable) {\n    return canSetImageAlign(editor, align, extensionName, attributeName)\n  }\n\n  return true\n}\n\n/**\n * Custom hook that provides image align functionality for Tiptap editor\n *\n * @example\n * ```tsx\n * // Simple usage with default \"image\" extension\n * function MySimpleImageAlignButton() {\n *   const { isVisible, handleImageAlign } = useImageAlign({ align: \"center\" })\n *\n *   if (!isVisible) return null\n *\n *   return <button onClick={handleImageAlign}>Align Center</button>\n * }\n *\n * // Advanced usage with custom extension name\n * function MyAdvancedImageAlignButton() {\n *   const { isVisible, handleImageAlign, label, isActive } = useImageAlign({\n *     editor: myEditor,\n *     align: \"right\",\n *     extensionName: \"myCustomImage\", // Use your custom extension name\n *     hideWhenUnavailable: true,\n *     onAligned: () => console.log('Image aligned!')\n *   })\n *\n *   if (!isVisible) return null\n *\n *   return (\n *     <MyButton\n *       onClick={handleImageAlign}\n *       aria-pressed={isActive}\n *       aria-label={label}\n *     >\n *       Align Right\n *     </MyButton>\n *   )\n * }\n * ```\n */\nexport function useImageAlign(config: UseImageAlignConfig) {\n  const {\n    editor: providedEditor,\n    align,\n    extensionName = \"image\",\n    attributeName = \"data-align\",\n    hideWhenUnavailable = false,\n    onAligned,\n  } = config\n\n  const { editor } = useTiptapEditor(providedEditor)\n  const isMobile = useIsMobile()\n  const [isVisible, setIsVisible] = React.useState<boolean>(true)\n  const canAlign = canSetImageAlign(editor, align, extensionName, attributeName)\n  const isActive = isImageAlignActive(\n    editor,\n    align,\n    extensionName,\n    attributeName\n  )\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setIsVisible(\n        shouldShowButton({\n          editor,\n          align,\n          hideWhenUnavailable,\n          extensionName,\n          attributeName,\n        })\n      )\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable, align, extensionName, attributeName])\n\n  const handleImageAlign = React.useCallback(() => {\n    if (!editor) return false\n\n    const success = setImageAlign(editor, align, extensionName, attributeName)\n    if (success) {\n      onAligned?.()\n    }\n    return success\n  }, [editor, align, extensionName, attributeName, onAligned])\n\n  useHotkeys(\n    IMAGE_ALIGN_SHORTCUT_KEYS[align],\n    (event) => {\n      event.preventDefault()\n      handleImageAlign()\n    },\n    {\n      enabled: isVisible && canAlign,\n      enableOnContentEditable: !isMobile,\n      enableOnFormTags: true,\n    }\n  )\n\n  return {\n    isVisible,\n    isActive,\n    handleImageAlign,\n    canAlign,\n    label: imageAlignLabels[align],\n    shortcutKeys: IMAGE_ALIGN_SHORTCUT_KEYS[align],\n    Icon: imageAlignIcons[align],\n  }\n}\n","\"use client\"\n\nimport React, { useState, useEffect, useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport { Icon } from '@iconify/react'\nimport { Button } from '@/components/tiptap-ui-primitive/button'\nimport { Input, InputGroup } from '@/components/tiptap-ui-primitive/input'\nimport { Card, CardBody, CardItemGroup } from '@/components/tiptap-ui-primitive/card'\nimport { Separator } from '@/components/tiptap-ui-primitive/separator'\nimport { ButtonGroup } from '@/components/tiptap-ui-primitive/button'\nimport { CornerDownLeftIcon } from '@/components/tiptap-icons/corner-down-left-icon'\nimport { ExternalLinkIcon } from '@/components/tiptap-icons/external-link-icon'\nimport { TrashIcon } from '@/components/tiptap-icons/trash-icon'\n\nexport interface PageData {\n  id: string\n  name: string\n  category?: string\n}\n\ninterface ImageLinkModalProps {\n  currentHref: string | null\n  onHrefChange: (href: string | null) => void\n  onClose: () => void\n  pages?: PageData[]\n  onNavigateToPage?: (pageId: string) => void\n}\n\n// Helper to ensure URL has protocol\nconst ensureProtocol = (url: string): string => {\n  if (!url) return url\n  const trimmed = url.trim()\n  if (!trimmed) return trimmed\n\n  // Check if it already has a protocol\n  if (trimmed.match(/^[a-zA-Z][a-zA-Z\\d+\\-.]*:/)) {\n    return trimmed\n  }\n\n  // Add https:// by default\n  return `https://${trimmed}`\n}\n\nexport const ImageLinkModal: React.FC<ImageLinkModalProps> = ({\n  currentHref,\n  onHrefChange,\n  onClose,\n  pages = [],\n  onNavigateToPage,\n}) => {\n  const [url, setUrl] = useState(currentHref || '')\n  const [showPageDropdown, setShowPageDropdown] = useState(false)\n  const [searchQuery, setSearchQuery] = useState(\"\")\n  const dropdownRef = useRef<HTMLDivElement>(null)\n  const inputRef = useRef<HTMLInputElement>(null)\n  const [dropdownPosition, setDropdownPosition] = useState<{ top: number; left: number; width: number } | null>(null)\n\n  useEffect(() => {\n    setUrl(currentHref || '')\n  }, [currentHref])\n\n  // Filter pages based on search query\n  const filteredPages = pages.filter(\n    (page) =>\n      page.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n      (page.category && page.category.toLowerCase().includes(searchQuery.toLowerCase()))\n  )\n\n  // Close dropdown when clicking outside\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n        setShowPageDropdown(false)\n      }\n    }\n\n    if (showPageDropdown) {\n      document.addEventListener('mousedown', handleClickOutside)\n      return () => document.removeEventListener('mousedown', handleClickOutside)\n    }\n  }, [showPageDropdown])\n\n  // Calculate dropdown position\n  useEffect(() => {\n    if (showPageDropdown && inputRef.current) {\n      const rect = inputRef.current.getBoundingClientRect()\n      setDropdownPosition({\n        top: rect.bottom + 4,\n        left: rect.left,\n        width: rect.width,\n      })\n    } else {\n      setDropdownPosition(null)\n    }\n  }, [showPageDropdown])\n\n  const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const value = e.target.value\n\n    // Check if starts with \"/\"\n    if (value.startsWith(\"/\")) {\n      setShowPageDropdown(true)\n      setSearchQuery(value.slice(1)) // Remove \"/\" for filtering\n    } else {\n      setShowPageDropdown(false)\n      setSearchQuery(\"\")\n    }\n\n    setUrl(value)\n  }\n\n  const handlePageSelect = (page: PageData) => {\n    // Create hash-based URL slug\n    const slug = page.name\n      .toLowerCase()\n      .trim()\n      .replace(/\\s+/g, '-')\n      .replace(/[^\\w\\-]/g, '')\n\n    const hashUrl = `#${slug}`\n\n    // For images, we just set the href\n    // The onNavigateToPage can be used if the image is clicked\n    onHrefChange(hashUrl)\n    setUrl(hashUrl)\n    setShowPageDropdown(false)\n    onClose()\n  }\n\n  const handleSubmit = () => {\n    if (!showPageDropdown) {\n      const finalUrl = url.trim() ? ensureProtocol(url.trim()) : null\n      onHrefChange(finalUrl)\n      onClose()\n    }\n  }\n\n  const handleRemove = () => {\n    onHrefChange(null)\n    setUrl('')\n    onClose()\n  }\n\n  const handleOpenLink = () => {\n    if (url) {\n      const finalUrl = ensureProtocol(url.trim())\n      window.open(finalUrl, '_blank', 'noopener,noreferrer')\n    }\n  }\n\n  const handleKeyDown = (e: React.KeyboardEvent) => {\n    // Stop all keyboard events from bubbling to prevent editor interference\n    e.stopPropagation()\n\n    if (e.key === 'Enter') {\n      e.preventDefault()\n      handleSubmit()\n    } else if (e.key === 'Escape') {\n      e.preventDefault()\n      setShowPageDropdown(false)\n    }\n  }\n\n  const DocumentIcon: React.FC<{ className?: string }> = ({ className }) => (\n    <Icon icon=\"mdi:file-document-outline\" className={className} />\n  )\n\n  return (\n    <Card>\n      <CardBody>\n        <CardItemGroup orientation=\"horizontal\">\n          <div style={{ position: 'relative', flex: 1 }}>\n            <InputGroup>\n              <Input\n                ref={inputRef}\n                type=\"url\"\n                placeholder=\"Paste a link or use / to search internal pages\"\n                value={url}\n                onChange={handleInputChange}\n                onKeyDown={handleKeyDown}\n                autoFocus\n                autoComplete=\"off\"\n                autoCorrect=\"off\"\n                autoCapitalize=\"off\"\n              />\n            </InputGroup>\n\n            {/* Page Dropdown - Rendered via Portal */}\n            {showPageDropdown && dropdownPosition && createPortal(\n              <div\n                ref={dropdownRef}\n                style={{\n                  position: 'fixed',\n                  top: `${dropdownPosition.top}px`,\n                  left: `${dropdownPosition.left}px`,\n                  width: `${dropdownPosition.width}px`,\n                  maxHeight: '200px',\n                  overflowY: 'auto',\n                  backgroundColor: '#1a1a1a',\n                  border: '1px solid rgba(255, 255, 255, 0.1)',\n                  borderRadius: '8px',\n                  boxShadow: '0 10px 25px rgba(0, 0, 0, 0.5)',\n                  zIndex: 10001,\n                }}\n              >\n                {filteredPages.length === 0 ? (\n                  <div style={{ padding: '16px', textAlign: 'center', color: '#9ca3af', fontSize: '14px' }}>\n                    {searchQuery ? 'No pages found' : 'No pages available'}\n                  </div>\n                ) : (\n                  filteredPages.map((page) => (\n                    <div\n                      key={page.id}\n                      onClick={() => handlePageSelect(page)}\n                      onMouseEnter={(e) => {\n                        e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.08)'\n                      }}\n                      onMouseLeave={(e) => {\n                        e.currentTarget.style.backgroundColor = 'transparent'\n                      }}\n                      style={{\n                        padding: '12px',\n                        cursor: 'pointer',\n                        borderBottom: '1px solid rgba(255, 255, 255, 0.05)',\n                        transition: 'background-color 0.15s',\n                      }}\n                    >\n                      <div style={{ display: 'flex', alignItems: 'start', gap: '8px' }}>\n                        <DocumentIcon className=\"w-4 h-4 text-[#9ca3af] flex-shrink-0 mt-0.5\" />\n                        <div style={{ flex: 1, minWidth: 0 }}>\n                          <p style={{ color: 'white', fontSize: '14px', margin: 0 }}>{page.name}</p>\n                          {page.category && (\n                            <p style={{ color: '#9ca3af', fontSize: '12px', marginTop: '2px', margin: 0 }}>{page.category}</p>\n                          )}\n                        </div>\n                      </div>\n                    </div>\n                  ))\n                )}\n              </div>,\n              document.body\n            )}\n          </div>\n\n          <ButtonGroup orientation=\"horizontal\">\n            <Button\n              type=\"button\"\n              onClick={handleSubmit}\n              title=\"Apply link\"\n              disabled={!url && !currentHref}\n              data-style=\"ghost\"\n            >\n              <CornerDownLeftIcon className=\"tiptap-button-icon\" />\n            </Button>\n          </ButtonGroup>\n\n          <Separator />\n\n          <ButtonGroup orientation=\"horizontal\">\n            <Button\n              type=\"button\"\n              onClick={handleOpenLink}\n              title=\"Open in new window\"\n              disabled={!url && !currentHref}\n              data-style=\"ghost\"\n            >\n              <ExternalLinkIcon className=\"tiptap-button-icon\" />\n            </Button>\n\n            <Button\n              type=\"button\"\n              onClick={handleRemove}\n              title=\"Remove link\"\n              disabled={!url && !currentHref}\n              data-style=\"ghost\"\n            >\n              <TrashIcon className=\"tiptap-button-icon\" />\n            </Button>\n          </ButtonGroup>\n        </CardItemGroup>\n      </CardBody>\n    </Card>\n  )\n}\n","\"use client\"\n\nimport type { Editor } from \"@tiptap/react\"\nimport { useState } from \"react\"\nimport { Icon } from \"@iconify/react\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Lib ---\nimport { isNodeTypeSelected } from \"@/lib/tiptap-utils\"\n\n// --- Tiptap UI ---\nimport { DeleteNodeButton } from \"@/components/tiptap-ui/delete-node-button\"\nimport { ImageDownloadButton } from \"@/components/tiptap-ui/image-download-button\"\nimport { ImageAlignButton } from \"@/components/tiptap-ui/image-align-button\"\n\n// --- UI Primitive ---\nimport { Separator } from \"@/components/tiptap-ui-primitive/separator\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/tiptap-ui-primitive/popover\"\n\n// --- Modals ---\nimport { ImageLinkModal, type PageData } from \"./image-link-modal\"\n\nexport function ImageNodeFloating({\n  editor: providedEditor,\n}: {\n  editor?: Editor | null\n}) {\n  const { editor } = useTiptapEditor(providedEditor)\n  const visible = isNodeTypeSelected(editor, [\"image\"])\n\n  // ALL HOOKS MUST BE CALLED BEFORE ANY CONDITIONAL RETURNS\n  const [showLinkModal, setShowLinkModal] = useState(false)\n\n  // Get pages from CardNode extension for internal linking\n  const cardNodeExtension = editor?.extensionManager?.extensions?.find(\n    (ext: any) => ext.name === 'cardNode'\n  )\n  const pages = (cardNodeExtension?.options?.pages || []) as PageData[]\n  const onNavigateToPage = (editor as any)?.tnkrOnNavigateToPage\n\n  // Get current node attributes\n  const node = editor?.state?.selection ? (editor.state.selection as any).node : null\n  const currentHref = node?.attrs?.href || null\n\n  const handleHrefChange = (href: string | null) => {\n    if (!editor) return\n    editor.commands.updateAttributes(\"image\", { href })\n  }\n\n  // NOW that all hooks are called, we can do conditional returns\n  if (!editor || !visible) {\n    return null\n  }\n\n  return (\n    <>\n      <ImageAlignButton align=\"left\" />\n      <ImageAlignButton align=\"center\" />\n      <ImageAlignButton align=\"right\" />\n      <Separator />\n\n      {/* Link Button */}\n      <Popover open={showLinkModal} onOpenChange={setShowLinkModal}>\n        <PopoverTrigger asChild>\n          <Button\n            type=\"button\"\n            data-style=\"ghost\"\n            role=\"button\"\n            tabIndex={-1}\n            aria-label=\"Add Link\"\n            tooltip=\"Add Link\"\n            data-active-state={currentHref ? \"on\" : \"off\"}\n          >\n            <Icon icon=\"ph:link-simple\" className=\"tiptap-button-icon\" />\n          </Button>\n        </PopoverTrigger>\n        <PopoverContent>\n          <ImageLinkModal\n            currentHref={currentHref}\n            onHrefChange={handleHrefChange}\n            onClose={() => setShowLinkModal(false)}\n            pages={pages}\n            onNavigateToPage={onNavigateToPage}\n          />\n        </PopoverContent>\n      </Popover>\n\n      <Separator />\n      <ImageDownloadButton />\n      <Separator />\n      <DeleteNodeButton />\n    </>\n  )\n}\n","import type { Editor } from \"@tiptap/react\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Lib ---\nimport { isNodeTypeSelected } from \"@/lib/tiptap-utils\"\n\n// --- Tiptap UI ---\nimport { DeleteNodeButton } from \"@/components/tiptap-ui/delete-node-button\"\nimport { ImageAlignButton } from \"@/components/tiptap-ui/image-align-button\"\n\n// --- UI Primitive ---\nimport { Separator } from \"@/components/tiptap-ui-primitive/separator\"\n\nexport function AnnotationNodeFloating({\n  editor: providedEditor,\n}: {\n  editor?: Editor | null\n}) {\n  const { editor } = useTiptapEditor(providedEditor)\n  const visible = isNodeTypeSelected(editor, [\"annotation\"])\n\n  if (!editor || !visible) {\n    return null\n  }\n\n  return (\n    <>\n      <ImageAlignButton align=\"left\" extensionName=\"annotation\" />\n      <ImageAlignButton align=\"center\" extensionName=\"annotation\" />\n      <ImageAlignButton align=\"right\" extensionName=\"annotation\" />\n      <Separator />\n      <DeleteNodeButton />\n    </>\n  )\n}\n","\"use client\"\n\nimport type { Editor } from \"@tiptap/react\"\nimport React, { useState } from \"react\"\nimport { Icon } from \"@iconify/react\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Lib ---\nimport { isNodeTypeSelected } from \"@/lib/tiptap-utils\"\n\n// --- Tiptap UI ---\nimport { DeleteNodeButton } from \"@/components/tiptap-ui/delete-node-button\"\n\n// --- UI Primitive ---\nimport { Separator } from \"@/components/tiptap-ui-primitive/separator\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/tiptap-ui-primitive/popover\"\n\n// --- Link Popover ---\nimport { LinkContent, type PageData as LinkPageData } from \"@/components/tiptap-ui/link-popover\"\n\n// --- Modals ---\nimport { CardIconPicker } from \"./card-icon-picker\"\nimport { CardCtaModal } from \"./card-cta-modal\"\nimport type { CardData, PageData } from \"./card-node-extension\"\n\nexport function CardNodeFloating({\n  editor: providedEditor,\n}: {\n  editor?: Editor | null\n}) {\n  const { editor } = useTiptapEditor(providedEditor)\n  const visible = isNodeTypeSelected(editor, [\"cardNode\"])\n\n  // ALL HOOKS MUST BE CALLED BEFORE ANY CONDITIONAL RETURNS\n  const [showLinkModal, setShowLinkModal] = useState(false)\n  const [showIconPicker, setShowIconPicker] = useState(false)\n  const [showCtaModal, setShowCtaModal] = useState(false)\n\n  // Get current node attributes\n  const node = editor?.state?.selection ? (editor.state.selection as any).node : null\n  const cards: CardData[] = node?.attrs?.cards || []\n  const selectedCardIndex: number = node?.attrs?.selectedCardIndex || 0\n\n  // Get pages from extension options (not node attrs)\n  const cardNodeExtension = editor?.extensionManager?.extensions?.find(\n    (ext: any) => ext.name === 'cardNode'\n  )\n  const pages = (cardNodeExtension?.options?.pages || []) as PageData[]\n\n  // Get the currently selected card\n  const selectedCard = cards[selectedCardIndex]\n\n  const currentUrl = selectedCard?.linkUrl || null\n  const currentPage = selectedCard?.linkPage || null\n  const currentIcon = selectedCard?.icon || 'mdi:cube-outline'\n  const currentCta = selectedCard?.ctaText || null\n  const hasLink = !!(currentUrl || currentPage)\n\n  // Helper to update the selected card\n  const updateSelectedCard = React.useCallback((updates: Partial<CardData>) => {\n    if (!editor) return\n    const updatedCards = [...cards]\n    updatedCards[selectedCardIndex] = {\n      ...updatedCards[selectedCardIndex],\n      ...updates,\n    }\n    editor.commands.updateAttributes(\"cardNode\", { cards: updatedCards })\n  }, [editor, cards, selectedCardIndex])\n\n  // Create a custom editor-like object for LinkContent\n  // Use Object.create to preserve prototype methods like on() and off()\n  const cardLinkEditor = React.useMemo(() => {\n    if (!editor) return editor\n\n    const customEditor = Object.create(editor) as Editor\n\n    // Override getAttributes\n    customEditor.getAttributes = (name: string) => {\n      if (name === 'link') {\n        return {\n          href: currentUrl || (currentPage ? `#${currentPage.name.toLowerCase().replace(/\\s+/g, '-')}` : ''),\n          isInternal: !!currentPage,\n          pageId: currentPage?.id || null,\n          pageName: currentPage?.name || null,\n        }\n      }\n      return editor?.getAttributes(name) || {}\n    }\n\n    // Override isActive\n    customEditor.isActive = (name: string) => {\n      if (name === 'link') {\n        return hasLink\n      }\n      return editor?.isActive(name) || false\n    }\n\n    // Override can()\n    const originalCan = editor.can.bind(editor)\n    customEditor.can = (() => {\n      const canObj = originalCan()\n      const originalSetMark = canObj.setMark?.bind(canObj)\n\n      return {\n        ...canObj,\n        setMark: (name: string) => {\n          if (name === 'link') return true\n          return originalSetMark?.(name) || false\n        },\n      }\n    }) as any\n\n    // Override chain()\n    const originalChain = editor.chain.bind(editor)\n    customEditor.chain = (() => {\n      const chainObj = originalChain()\n      const originalFocus = chainObj.focus?.bind(chainObj)\n\n      return {\n        ...chainObj,\n        focus: () => {\n          const focusObj = originalFocus?.() || {}\n\n          return {\n            ...focusObj,\n            extendMarkRange: () => ({\n              setLink: (attrs: any) => ({\n                run: () => {\n                  if (attrs.isInternal && attrs.pageId && attrs.pageName) {\n                    updateSelectedCard({\n                      linkPage: {\n                        id: attrs.pageId,\n                        name: attrs.pageName\n                      },\n                      linkUrl: null\n                    })\n                  } else if (attrs.href) {\n                    updateSelectedCard({\n                      linkUrl: attrs.href,\n                      linkPage: null\n                    })\n                  }\n                  setShowLinkModal(false)\n                  return true\n                },\n              }),\n              unsetLink: () => ({\n                setMeta: () => ({\n                  run: () => {\n                    updateSelectedCard({ linkUrl: null, linkPage: null })\n                    setShowLinkModal(false)\n                    return true\n                  },\n                }),\n              }),\n            }),\n          }\n        },\n      }\n    }) as any\n\n    return customEditor\n  }, [editor, currentUrl, currentPage, hasLink, updateSelectedCard])\n\n  // Icon handler\n  const handleIconSelect = React.useCallback((icon: string) => {\n    updateSelectedCard({ icon })\n  }, [updateSelectedCard])\n\n  // CTA handler\n  const handleCtaSubmit = React.useCallback((cta: string) => {\n    updateSelectedCard({ ctaText: cta || null })\n  }, [updateSelectedCard])\n\n  // NOW that all hooks are called, we can do conditional returns\n  if (!editor || !visible) {\n    return null\n  }\n\n  if (!selectedCard) {\n    return null\n  }\n\n  return (\n    <>\n      {/* Link Button */}\n      <Popover open={showLinkModal} onOpenChange={setShowLinkModal}>\n        <PopoverTrigger asChild>\n          <Button\n            type=\"button\"\n            data-style=\"ghost\"\n            role=\"button\"\n            tabIndex={-1}\n            aria-label=\"Add Link\"\n            tooltip=\"Add Link\"\n            data-active-state={hasLink ? \"on\" : \"off\"}\n          >\n            <Icon icon=\"ph:link-simple\" className=\"tiptap-button-icon\" />\n          </Button>\n        </PopoverTrigger>\n        <PopoverContent>\n          <LinkContent\n            editor={cardLinkEditor}\n            pages={pages}\n          />\n        </PopoverContent>\n      </Popover>\n\n      {/* Icon Picker Button */}\n      <Popover open={showIconPicker} onOpenChange={setShowIconPicker}>\n        <PopoverTrigger asChild>\n          <Button\n            type=\"button\"\n            data-style=\"ghost\"\n            role=\"button\"\n            tabIndex={-1}\n            aria-label=\"Edit Icon\"\n            tooltip=\"Edit Icon\"\n          >\n            <Icon icon=\"ph:smiley\" className=\"tiptap-button-icon\" />\n          </Button>\n        </PopoverTrigger>\n        <PopoverContent>\n          <CardIconPicker\n            currentIcon={currentIcon}\n            onIconSelect={handleIconSelect}\n            onClose={() => setShowIconPicker(false)}\n          />\n        </PopoverContent>\n      </Popover>\n\n      {/* CTA Button */}\n      <Popover open={showCtaModal} onOpenChange={setShowCtaModal}>\n        <PopoverTrigger asChild>\n          <Button\n            type=\"button\"\n            data-style=\"ghost\"\n            role=\"button\"\n            tabIndex={-1}\n            aria-label=\"Add CTA\"\n            tooltip=\"Add CTA\"\n            data-active-state={currentCta ? \"on\" : \"off\"}\n          >\n            <Icon icon=\"ph:hand-pointing\" className=\"tiptap-button-icon\" />\n          </Button>\n        </PopoverTrigger>\n        <PopoverContent>\n          <CardCtaModal\n            currentCta={currentCta}\n            hasLink={hasLink}\n            onCtaSubmit={handleCtaSubmit}\n            onClose={() => setShowCtaModal(false)}\n          />\n        </PopoverContent>\n      </Popover>\n\n      <Separator />\n      <DeleteNodeButton />\n    </>\n  )\n}\n","\"use client\"\n\nimport type { Editor } from \"@tiptap/react\"\nimport { useCallback } from \"react\"\nimport { Icon } from \"@iconify/react\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\n\n// --- Lib ---\nimport { isNodeTypeSelected } from \"@/lib/tiptap-utils\"\n\n// --- Tiptap UI ---\nimport { DeleteNodeButton } from \"@/components/tiptap-ui/delete-node-button\"\n\n// --- UI Primitive ---\nimport { Separator } from \"@/components/tiptap-ui-primitive/separator\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\n\nexport function BOMNodeFloating({\n  editor: providedEditor,\n}: {\n  editor?: Editor | null\n}) {\n  const { editor } = useTiptapEditor(providedEditor)\n  const visible = isNodeTypeSelected(editor, [\"bomNode\"])\n\n  // Get the current BOM node (needs to be before early return to avoid hook issues)\n  const node = editor?.state?.selection ? (editor.state.selection as any).node : null\n\n  // Handle add property (column) - must be called before early return\n  const handleAddProperty = useCallback(() => {\n    if (!editor || !node) return\n\n    // Find the position of the BOM node\n    const { state } = editor\n    let bomNodePos = -1\n\n    state.doc.nodesBetween(0, state.doc.content.size, (n, pos) => {\n      if (n.type.name === 'bomNode' && n === node) {\n        bomNodePos = pos\n        return false // Stop iteration\n      }\n    })\n\n    if (bomNodePos === -1) return\n\n    // Navigate to the table inside the BOM node\n    const bomNode = state.doc.nodeAt(bomNodePos)\n    if (!bomNode) return\n\n    const tableNode = bomNode.content.firstChild\n    if (!tableNode || tableNode.type.name !== 'table') return\n\n    // Get the first row to find a cell position\n    const firstRow = tableNode.content.firstChild\n    if (!firstRow) return\n\n    // Get the last cell in the first row to add column after it\n    const lastCell = firstRow.content.lastChild\n    if (!lastCell) return\n\n    // Calculate position of the last cell (inside the BOM node + table + row + cells)\n    let cellPos = bomNodePos + 1 // Enter BOM node\n    cellPos += 1 // Enter table\n    cellPos += 1 // Enter first row\n\n    // Sum up all cell sizes to get to the last cell\n    for (let i = 0; i < firstRow.content.childCount; i++) {\n      const cell = firstRow.content.child(i)\n      if (i === firstRow.content.childCount - 1) {\n        // We're at the last cell, move inside it\n        cellPos += 1\n        break\n      }\n      cellPos += cell.nodeSize\n    }\n\n    // Add column after the last column\n    editor.chain().focus().setTextSelection(cellPos).addColumnAfter().run()\n  }, [editor, node])\n\n  if (!editor || !visible) {\n    return null\n  }\n\n  return (\n    <>\n      {/* Add Property Button */}\n      <Button\n        type=\"button\"\n        data-style=\"ghost\"\n        role=\"button\"\n        tabIndex={-1}\n        aria-label=\"Add Property\"\n        tooltip=\"Add Property\"\n        onClick={handleAddProperty}\n      >\n        <Icon icon=\"hugeicons:property-add\" className=\"tiptap-button-icon\" />\n      </Button>\n\n      <Separator />\n      <DeleteNodeButton />\n    </>\n  )\n}\n","import type { Editor } from \"@tiptap/react\"\n\nexport const isElementWithinEditor = (\n  editor: Editor | null,\n  element: Node | null\n) => {\n  if (!element || !editor) {\n    return false\n  }\n\n  const editorWrapper = editor.view.dom.parentElement\n  const editorDom = editor.view.dom\n\n  if (!editorWrapper) {\n    return false\n  }\n\n  return (\n    editorWrapper === element ||\n    editorDom === element ||\n    editorWrapper.contains(element)\n  )\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { type Editor } from \"@tiptap/react\";\nimport {\n  flip,\n  offset,\n  shift,\n  useMergeRefs,\n  type UseFloatingOptions,\n} from \"@floating-ui/react\";\nimport { Selection } from \"@tiptap/pm/state\";\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\";\nimport { useFloatingElement } from \"@/hooks/use-floating-element\";\n\n// --- Lib ---\nimport {\n  getSelectionBoundingRect,\n  isSelectionValid,\n} from \"@/lib/tiptap-collab-utils\";\n\nimport { isElementWithinEditor } from \"./floating-element-utils\";\nimport { isValidPosition } from \"@/lib/tiptap-utils\";\n\nexport interface FloatingElementProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * The Tiptap editor instance to attach to.\n   */\n  editor?: Editor | null;\n  /**\n   * Controls whether the floating element should be visible.\n   * @default undefined\n   */\n  shouldShow?: boolean;\n  /**\n   * Additional options to pass to the floating UI.\n   */\n  floatingOptions?: Partial<UseFloatingOptions>;\n  /**\n   * Z-index for the floating element.\n   * @default 10000\n   */\n  zIndex?: number;\n  /**\n   * Callback fired when the visibility state changes.\n   */\n  onOpenChange?: (open: boolean) => void;\n  /**\n   * Callback fired when the selection rectangle changes.\n   * Provides access to the current position information.\n   */\n  onRectChange?: (rect: DOMRect | null) => void;\n  /**\n   * Custom function to determine the position of the floating element.\n   * @default getSelectionBoundingRect\n   */\n  getBoundingClientRect?: (editor: Editor) => DOMRect | null;\n  /**\n   * Whether to update position on scroll events.\n   * @default true\n   */\n  updateOnScroll?: boolean;\n  /**\n   * Whether to close the floating element when Escape key is pressed.\n   * @default true\n   */\n  closeOnEscape?: boolean;\n}\n\n/**\n * A floating UI element that positions itself relative to the current selection in a Tiptap editor.\n * Used for floating toolbars, menus, and other UI elements that need to appear near the text cursor.\n */\nexport const FloatingElement = React.forwardRef<\n  HTMLDivElement,\n  FloatingElementProps\n>(\n  (\n    {\n      editor: providedEditor,\n      shouldShow = undefined,\n      floatingOptions,\n      zIndex = 10000,\n      onOpenChange,\n      onRectChange,\n      getBoundingClientRect = getSelectionBoundingRect,\n      updateOnScroll = true,\n      closeOnEscape = true,\n      children,\n      style: propStyle,\n      ...props\n    },\n    forwardedRef\n  ) => {\n    const [open, setOpen] = React.useState<boolean>(\n      shouldShow !== undefined ? shouldShow : false\n    );\n    const [selectionRect, setSelectionRect] = React.useState<DOMRect | null>(\n      null\n    );\n\n    const floatingElementRef = React.useRef<HTMLDivElement | null>(null);\n    const preventHideRef = React.useRef(false);\n    const preventShowRef = React.useRef(false);\n\n    const { editor } = useTiptapEditor(providedEditor);\n\n    const handleOpenChange = React.useCallback(\n      (newOpen: boolean) => {\n        onOpenChange?.(newOpen);\n        setOpen(newOpen);\n      },\n      [onOpenChange]\n    );\n\n    const handleFloatingOpenChange = (open: boolean) => {\n      // Removed selection reset that was interfering with cursor placement\n      handleOpenChange(open);\n    };\n\n    React.useEffect(() => {\n      onRectChange?.(selectionRect);\n    }, [selectionRect, onRectChange]);\n\n    const { isMounted, ref, style, getFloatingProps } = useFloatingElement(\n      open,\n      selectionRect,\n      zIndex,\n      {\n        placement: \"top\",\n        middleware: [shift(), flip(), offset(4)],\n        onOpenChange: handleFloatingOpenChange,\n        dismissOptions: {\n          enabled: true,\n          escapeKey: true,\n          outsidePress(event) {\n            const relatedTarget = event.target as Node;\n            if (!relatedTarget) return false;\n\n            return !isElementWithinEditor(editor, relatedTarget);\n          },\n        },\n        ...floatingOptions,\n      }\n    );\n\n    const updateSelectionState = React.useCallback(() => {\n      if (!editor) return;\n\n      const newRect = getBoundingClientRect(editor);\n\n      if (newRect && shouldShow !== undefined && !preventShowRef.current) {\n        setSelectionRect(newRect);\n        handleOpenChange(shouldShow);\n        return;\n      }\n\n      const shouldShowResult = isSelectionValid(editor);\n\n      if (\n        newRect &&\n        !preventShowRef.current &&\n        (shouldShowResult || preventHideRef.current)\n      ) {\n        setSelectionRect(newRect);\n        handleOpenChange(true);\n      } else if (\n        !preventHideRef.current &&\n        (!shouldShowResult || preventShowRef.current || !editor.isEditable)\n      ) {\n        handleOpenChange(false);\n      }\n    }, [editor, getBoundingClientRect, handleOpenChange, shouldShow]);\n\n    const debouncedUpdateSelectionState = React.useCallback(() => {\n      // Use RAF to ensure this runs after all synchronous selection updates\n      requestAnimationFrame(() => {\n        updateSelectionState();\n      });\n    }, [updateSelectionState]);\n\n    React.useEffect(() => {\n      if (!editor || !closeOnEscape) return;\n\n      const handleKeyDown = (event: KeyboardEvent) => {\n        if (event.key === \"Escape\" && open) {\n          handleOpenChange(false);\n          return true;\n        }\n        return false;\n      };\n\n      editor.view.dom.addEventListener(\"keydown\", handleKeyDown);\n      return () => {\n        editor.view.dom.removeEventListener(\"keydown\", handleKeyDown);\n      };\n    }, [editor, open, closeOnEscape, handleOpenChange]);\n\n    React.useEffect(() => {\n      if (!editor) return;\n\n      const handleBlur = (event: FocusEvent) => {\n        if (preventHideRef.current) {\n          preventHideRef.current = false;\n          return;\n        }\n\n        const relatedTarget = event.relatedTarget as Node;\n        if (!relatedTarget) return;\n\n        const isWithinEditor = isElementWithinEditor(editor, relatedTarget);\n\n        const floatingElement = floatingElementRef.current;\n        const isWithinFloatingElement =\n          floatingElement &&\n          (floatingElement === relatedTarget ||\n            floatingElement.contains(relatedTarget));\n\n        if (!isWithinEditor && !isWithinFloatingElement && open) {\n          handleOpenChange(false);\n        }\n      };\n\n      editor.view.dom.addEventListener(\"blur\", handleBlur);\n      return () => {\n        editor.view.dom.removeEventListener(\"blur\", handleBlur);\n      };\n    }, [editor, handleOpenChange, open]);\n\n    React.useEffect(() => {\n      if (!editor) return;\n\n      const handleDrag = () => {\n        if (open) {\n          handleOpenChange(false);\n        }\n      };\n\n      editor.view.dom.addEventListener(\"dragstart\", handleDrag);\n      editor.view.dom.addEventListener(\"dragover\", handleDrag);\n\n      return () => {\n        editor.view.dom.removeEventListener(\"dragstart\", handleDrag);\n        editor.view.dom.removeEventListener(\"dragover\", handleDrag);\n      };\n    }, [editor, open, handleOpenChange]);\n\n    // Enhanced mouse handling with proper click-away detection\n    React.useEffect(() => {\n      if (!editor) return;\n\n      const handleMouseUp = (event: Event) => {\n        updateSelectionState();\n      };\n\n      editor.view.root.addEventListener(\"mouseup\", handleMouseUp);\n\n      return () => {\n        editor.view.root.removeEventListener(\"mouseup\", handleMouseUp);\n      };\n    }, [editor, updateSelectionState]);\n\n    React.useEffect(() => {\n      if (!editor) return;\n\n      const updateIfOpen = () => {\n        if (open) updateSelectionState();\n      };\n      editor.on(\"selectionUpdate\", updateSelectionState)\n\n      window.addEventListener(\"resize\", updateIfOpen);\n\n      if (updateOnScroll) {\n        editor.view.root.addEventListener(\"scroll\", updateIfOpen, true);\n      }\n\n      return () => {\n        editor.off(\"selectionUpdate\", updateSelectionState)\n\n        window.removeEventListener(\"resize\", updateIfOpen);\n\n        if (updateOnScroll) {\n          editor.view.root.removeEventListener(\"scroll\", updateIfOpen, true);\n        }\n      };\n    }, [editor, open, updateOnScroll, updateSelectionState]);\n\n    React.useEffect(() => {\n      if (!editor) return;\n      updateSelectionState();\n    }, [editor, updateSelectionState]);\n\n    const finalStyle = React.useMemo(\n      () =>\n        propStyle && Object.keys(propStyle).length > 0 ? propStyle : style,\n      [propStyle, style]\n    );\n    const mergedRef = useMergeRefs([ref, forwardedRef, floatingElementRef]);\n\n    if (!editor || !isMounted || !open) return null;\n\n    return (\n      <div\n        ref={mergedRef}\n        style={finalStyle}\n        {...props}\n        {...getFloatingProps()}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nFloatingElement.displayName = \"FloatingElement\";\n","import * as React from \"react\"\nimport { type Editor } from \"@tiptap/react\"\n\n// --- Hooks ---\nimport { useTiptapEditor } from \"@/hooks/use-tiptap-editor\"\nimport { useUiEditorState } from \"@/hooks/use-ui-editor-state\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\nimport { useFloatingToolbarVisibility } from \"@/hooks/use-floating-toolbar-visibility\"\n\n// --- Node ---\nimport { ImageNodeFloating } from \"@/components/tiptap-node/image-node/image-node-floating\"\nimport { AnnotationNodeFloating } from \"@/components/tiptap-node/annotation-node/annotation-node-floating\"\nimport { CardNodeFloating } from \"@/components/tiptap-node/card-node/card-node-floating\"\nimport { BOMNodeFloating } from \"@/components/tiptap-node/bom-node/bom-node-floating\"\n\n// --- Icons ---\nimport { MoreVerticalIcon } from \"@/components/tiptap-icons/more-vertical-icon\"\n\n// --- UI ---\nimport { ColorTextPopover } from \"@/components/tiptap-ui/color-text-popover\"\nimport { LinkPopover, type PageData } from \"@/components/tiptap-ui/link-popover\"\nimport type { Mark } from \"@/components/tiptap-ui/mark-button\"\nimport { canToggleMark, MarkButton } from \"@/components/tiptap-ui/mark-button\"\nimport type { TextAlign } from \"@/components/tiptap-ui/text-align-button\"\nimport {\n  canSetTextAlign,\n  TextAlignButton,\n} from \"@/components/tiptap-ui/text-align-button\"\nimport { TurnIntoDropdown } from \"@/components/tiptap-ui/turn-into-dropdown\"\n\n// --- Utils ---\nimport { isSelectionValid } from \"@/lib/tiptap-collab-utils\"\n\n// --- Primitive UI Components ---\nimport type { ButtonProps } from \"@/components/tiptap-ui-primitive/button\"\nimport { Button } from \"@/components/tiptap-ui-primitive/button\"\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from \"@/components/tiptap-ui-primitive/popover\"\nimport {\n  Toolbar,\n  ToolbarGroup,\n  ToolbarSeparator,\n} from \"@/components/tiptap-ui-primitive/toolbar\"\n\n// --- UI Utils ---\nimport { FloatingElement } from \"@/components/tiptap-ui-utils/floating-element\"\n\nexport function NotionToolbarFloating() {\n  const { editor } = useTiptapEditor()\n  const isMobile = useIsMobile(480)\n  const { lockDragHandle } =\n    useUiEditorState(editor)\n\n  const { shouldShow } = useFloatingToolbarVisibility({\n    editor,\n    isSelectionValid,\n  })\n\n  // Get pages from CardNode extension for internal linking\n  const cardNodeExtension = editor?.extensionManager?.extensions?.find(\n    (ext: any) => ext.name === 'cardNode'\n  )\n  const pages = (cardNodeExtension?.options?.pages || []) as PageData[]\n\n  if (lockDragHandle || isMobile) return null\n\n  return (\n    <FloatingElement shouldShow={shouldShow}>\n      <Toolbar variant=\"floating\">\n\n        <ToolbarGroup>\n          <TurnIntoDropdown hideWhenUnavailable={true} />\n        </ToolbarGroup>\n\n        <ToolbarSeparator />\n\n        <ToolbarGroup>\n          <MarkButton type=\"bold\" hideWhenUnavailable={true} />\n          <MarkButton type=\"italic\" hideWhenUnavailable={true} />\n          <MarkButton type=\"strike\" hideWhenUnavailable={true} />\n          <MarkButton type=\"code\" hideWhenUnavailable={true} />\n        </ToolbarGroup>\n\n        <ToolbarSeparator />\n\n        <ToolbarGroup>\n          <ImageNodeFloating />\n          <AnnotationNodeFloating />\n          <CardNodeFloating />\n          <BOMNodeFloating />\n        </ToolbarGroup>\n\n        <ToolbarGroup>\n          <LinkPopover\n            autoOpenOnLinkActive={false}\n            hideWhenUnavailable={true}\n            pages={pages}\n          />\n          <ColorTextPopover hideWhenUnavailable={true} />\n        </ToolbarGroup>\n\n        <MoreOptions hideWhenUnavailable={true} />\n      </Toolbar>\n    </FloatingElement>\n  )\n}\n\nfunction canMoreOptions(editor: Editor | null): boolean {\n  if (!editor) {\n    return false\n  }\n\n  // Only allow more options for text-based nodes\n  const isTextNode =\n    editor.isActive(\"paragraph\") ||\n    editor.isActive(\"heading\") ||\n    editor.isActive(\"blockquote\") ||\n    editor.isActive(\"listItem\")\n\n  if (!isTextNode) {\n    return false\n  }\n\n  const canTextAlignAny = [\"left\", \"center\", \"right\", \"justify\"].some((align) =>\n    canSetTextAlign(editor, align as TextAlign)\n  )\n\n  const canMarkAny = [\"superscript\", \"subscript\"].some((type) =>\n    canToggleMark(editor, type as Mark)\n  )\n\n  return canMarkAny || canTextAlignAny\n}\n\nfunction shouldShowMoreOptions(params: {\n  editor: Editor | null\n  hideWhenUnavailable: boolean\n}): boolean {\n  const { editor, hideWhenUnavailable } = params\n\n  if (!editor) {\n    return false\n  }\n\n  // Exclude specific node types where more options shouldn't appear\n  const excludedNodes = [\n    \"codeBlock\",\n    \"image\",\n    \"columns\",\n    \"column\",\n    \"table\",\n    \"tableCell\",\n    \"tableHeader\",\n    \"tableRow\",\n    \"bomNode\",\n    \"horizontalRule\",\n    \"hardBreak\",\n  ]\n\n  const isInExcludedNode = excludedNodes.some(nodeType => editor.isActive(nodeType))\n\n  if (isInExcludedNode) {\n    return false\n  }\n\n  if (hideWhenUnavailable && !editor.isActive(\"code\")) {\n    return canMoreOptions(editor)\n  }\n\n  return Boolean(editor?.isEditable)\n}\n\nexport interface MoreOptionsProps extends Omit<ButtonProps, \"type\"> {\n  /**\n   * The Tiptap editor instance.\n   */\n  editor?: Editor | null\n  /**\n   * Whether to hide the dropdown when no options are available.\n   * @default false\n   */\n  hideWhenUnavailable?: boolean\n}\n\nexport function MoreOptions({\n  editor: providedEditor,\n  hideWhenUnavailable = false,\n  ...props\n}: MoreOptionsProps) {\n  const { editor } = useTiptapEditor(providedEditor)\n  const [show, setShow] = React.useState(false)\n\n  React.useEffect(() => {\n    if (!editor) return\n\n    const handleSelectionUpdate = () => {\n      setShow(\n        shouldShowMoreOptions({\n          editor,\n          hideWhenUnavailable,\n        })\n      )\n    }\n\n    handleSelectionUpdate()\n\n    editor.on(\"selectionUpdate\", handleSelectionUpdate)\n\n    return () => {\n      editor.off(\"selectionUpdate\", handleSelectionUpdate)\n    }\n  }, [editor, hideWhenUnavailable])\n\n  if (!show || !editor || !editor.isEditable) {\n    return null\n  }\n\n  return (\n    <>\n      <ToolbarSeparator />\n      <ToolbarGroup>\n        <Popover>\n          <PopoverTrigger asChild>\n            <Button\n              type=\"button\"\n              data-style=\"ghost\"\n              role=\"button\"\n              tabIndex={-1}\n              tooltip=\"More options\"\n              {...props}\n            >\n              <MoreVerticalIcon className=\"tiptap-button-icon\" />\n            </Button>\n          </PopoverTrigger>\n\n          <PopoverContent\n            side=\"top\"\n            align=\"end\"\n            alignOffset={4}\n            sideOffset={4}\n            asChild\n          >\n            <Toolbar variant=\"floating\" tabIndex={0}>\n              <ToolbarGroup>\n                <MarkButton type=\"superscript\" />\n                <MarkButton type=\"subscript\" />\n              </ToolbarGroup>\n\n              <ToolbarSeparator />\n\n              <ToolbarGroup>\n                <TextAlignButton align=\"left\" />\n                <TextAlignButton align=\"center\" />\n                <TextAlignButton align=\"right\" />\n                <TextAlignButton align=\"justify\" />\n              </ToolbarGroup>\n\n              <ToolbarSeparator />\n            </Toolbar>\n          </PopoverContent>\n        </Popover>\n      </ToolbarGroup>\n    </>\n  )\n}\n","import React, { useEffect, useRef, useState, useMemo } from \"react\";\nimport { useEditor, EditorContent, EditorContext } from \"@tiptap/react\";\nimport { createPortal } from \"react-dom\";\n\n// --- Extension System ---\nimport {\n  ExtensionManager,\n  type ExtensionManagerOptions,\n  type TnkrExtensionConfig,\n  type TnkrExtensionSet,\n} from \"./extensions\";\nimport type { UploadFunction } from \"./extensions\";\n\n// --- Tiptap Node Styles ---\n// Note: SCSS imports removed for build compatibility\n// Styles should be imported in the consuming application\n\n// --- Tiptap UI Components ---\nimport { EmojiDropdownMenu } from \"./components/tiptap-ui/emoji-dropdown-menu\";\nimport { MentionDropdownMenu } from \"./components/tiptap-ui/mention-dropdown-menu\";\nimport { SlashDropdownMenu } from \"./components/tiptap-ui/slash-dropdown-menu\";\nimport { DragContextMenu } from \"./components/tiptap-ui/drag-context-menu\";\n\n// --- Notion-like Components ---\nimport { MobileToolbar } from \"./components/tiptap-templates/notion-like/notion-like-editor-mobile-toolbar\";\nimport { NotionToolbarFloating } from \"./components/tiptap-templates/notion-like/notion-like-editor-toolbar-floating\";\n\n// --- Styles ---\n// Note: SCSS import removed for build compatibility\n\n// --- Utils ---\nimport { cn } from \"./lib/utils\";\n\n// --- Hooks ---\nimport { useUiEditorState } from \"@/hooks/use-ui-editor-state\";\nimport { useScrollToHash } from \"@/components/tiptap-ui/copy-anchor-link-button/use-scroll-to-hash\";\nimport { ProductDataState } from \"@/hooks/useProductData\";\nimport { ProductDataProvider } from \"@/contexts/ProductDataContext\";\nimport { ThemeProvider } from \"@/contexts/ThemeContext\";\n\n// Sidebar imports removed - now using UnifiedSideMenu\n\nexport type PageType =\n  | \"documentation\"\n  | \"tutorial\"\n  | \"api-reference\"\n  | \"guide\"\n  | \"changelog\"\n  | \"custom\"\n  | \"intro\"\n  | \"assembly\"\n  | \"explorer\";\n\nexport interface TnkrEditorProps {\n  content?: any;\n  onChange?: (content: any) => void;\n  placeholder?: string;\n  readOnly?: boolean;\n  className?: string;\n  minHeight?: number;\n  autoFocus?: boolean;\n  pageTitle?: string; // Title for the page (used in default content)\n  pageId?: string; // Unique identifier for this editor instance\n  pageType?: PageType; // Type of page (documentation, tutorial, etc.)\n  onUploadMedia?: UploadFunction;\n  // Extension configuration\n  extensions?: TnkrExtensionConfig[];\n  extensionOptions?: ExtensionManagerOptions;\n  disabledExtensions?: string[];\n  // Use a custom extension set instead of default\n  customExtensionSet?: TnkrExtensionSet;\n  // Feature flags (backward compatibility)\n  enableAI?: boolean;\n  // AI configuration\n  aiToken?: string | null;\n  aiAppId?: string;\n  // Collaboration configuration\n  // UI configuration\n  showDragHandle?: boolean;\n  organizationId?: string;\n  productId?: string;\n  // Centralized product data\n  productData?: ProductDataState;\n  // Tab context (for nested editors inside tabs)\n  tabContext?: string; // Tab title/name when editor is inside a tab\n  // Page navigation for internal links\n  pages?: Array<{ id: string; name: string; category?: string }>;\n  onNavigateToPage?: (pageId: string) => void;\n}\n\nexport const TnkrEditor: React.FC<TnkrEditorProps> = ({\n  content = null,\n  onChange,\n  placeholder = \"Start writing...\",\n  readOnly = false,\n  className = \"\",\n  minHeight = 200,\n  autoFocus = false,\n  pageTitle,\n  pageId,\n  pageType,\n  onUploadMedia,\n  // Extension configuration\n  extensions,\n  extensionOptions,\n  disabledExtensions,\n  // Use a custom extension set instead of default\n  customExtensionSet,\n  // Feature flags (backward compatibility)\n  enableAI = false,\n  // AI configuration\n  aiToken = null,\n  aiAppId = \"tnkr-editor-ai\",\n  // Collaboration configuration\n  // UI configuration\n  showDragHandle = true,\n  organizationId,\n  productId,\n  productData,\n  tabContext,\n  pages,\n  onNavigateToPage\n}) => {\n  const [isClient, setIsClient] = useState(false);\n  const debounceTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n  // Check if we're on the client side\n  useEffect(() => {\n    setIsClient(typeof window !== \"undefined\");\n  }, []);\n\n  // Add styles to document head with unique IDs per instance\n  useEffect(() => {\n    if (!isClient) return;\n\n    // Load Iconify for icons in BOM tables\n    if (!document.querySelector('script[src*=\"iconify\"]')) {\n      const iconifyScript = document.createElement('script');\n      iconifyScript.src = 'https://code.iconify.design/iconify-icon/1.0.7/iconify-icon.min.js';\n      iconifyScript.async = true;\n      document.head.appendChild(iconifyScript);\n    }\n  }, [isClient]);\n\n  // Build extensions using ExtensionManager\n  const configuredExtensions = useMemo(() => {\n    const extensionManagerOptions: ExtensionManagerOptions = {\n      customExtensions: extensions,\n      disabledExtensions,\n      extensionOptions: {\n        ...extensionOptions?.extensionOptions,\n        // Legacy prop support for specific extensions\n        Placeholder: {\n          placeholder,\n          emptyNodeClass: \"is-empty with-slash\",\n        },\n        StarterKit: {\n          horizontalRule: false,\n          dropcursor: { width: 2 },\n          link: { openOnClick: false },\n        },\n        UniqueID: {\n          types: [\n            \"paragraph\",\n            \"bulletList\",\n            \"orderedList\",\n            \"taskList\",\n            \"heading\",\n            \"blockquote\",\n            \"codeBlock\",\n          ],\n        },\n\n        ImageUploadNode: {\n          accept: \"image/*\",\n          maxSize: 1024 * 1024 * 1024, // 1GB\n          limit: 3,\n          upload: onUploadMedia\n            ? async (\n                file: File,\n                onProgress?: (event: { progress: number }) => void,\n                abortSignal?: AbortSignal\n              ) => {\n\n                const result = await onUploadMedia(\n                  file,\n                  onProgress,\n                  abortSignal\n                );\n                return typeof result === \"string\" ? result : result.src;\n              }\n            : async (\n                file: File,\n                onProgress?: (event: { progress: number }) => void,\n                abortSignal?: AbortSignal\n              ) => {\n\n                // Default upload handler that converts file to data URL\n                return new Promise((resolve, reject) => {\n                  if (onProgress) {\n                    onProgress({ progress: 0 });\n                  }\n\n                  const reader = new FileReader();\n\n                  reader.onload = () => {\n                    if (onProgress) {\n                      onProgress({ progress: 100 });\n                    }\n                    const result = reader.result as string;\n\n                    resolve(result);\n                  };\n\n                  reader.onerror = () => {\n                    reject(new Error(\"Failed to read file\"));\n                  };\n\n                  if (abortSignal) {\n                    abortSignal.addEventListener(\"abort\", () => {\n                      reader.abort();\n                      reject(new Error(\"Upload aborted\"));\n                    });\n                  }\n\n                  reader.readAsDataURL(file);\n                });\n              },\n          onError: (error: Error) =>\n            console.error(\"[TnkrEditor] Upload failed:\", error),\n        },\n        VideoUploadNode: {\n          accept: \"video/*\",\n          maxSize: 1024 * 1024 * 1024, // 1GB\n          limit: 1,\n          upload: onUploadMedia\n            ? async (\n                file: File,\n                onProgress?: (event: { progress: number }) => void,\n                abortSignal?: AbortSignal\n              ) => {\n\n                const result = await onUploadMedia(\n                  file,\n                  onProgress,\n                  abortSignal\n                );\n                return typeof result === \"string\" ? result : result.src;\n              }\n            : async (\n                file: File,\n                onProgress?: (event: { progress: number }) => void,\n                abortSignal?: AbortSignal\n              ) => {\n\n                // Default upload handler that converts file to data URL\n                return new Promise((resolve, reject) => {\n                  if (onProgress) {\n                    onProgress({ progress: 0 });\n                  }\n\n                  const reader = new FileReader();\n\n                  reader.onload = () => {\n                    if (onProgress) {\n                      onProgress({ progress: 100 });\n                    }\n                    const result = reader.result as string;\n\n                    resolve(result);\n                  };\n\n                  reader.onerror = () => {\n                    reject(new Error(\"Failed to read file\"));\n                  };\n\n                  if (abortSignal) {\n                    abortSignal.addEventListener(\"abort\", () => {\n                      reader.abort();\n                      reject(new Error(\"Upload aborted\"));\n                    });\n                  }\n\n                  reader.readAsDataURL(file);\n                });\n              },\n          onError: (error: Error) =>\n            console.error(\"[TnkrEditor] Upload failed:\", error),\n        },\n        BomNode: {\n          productId,\n          organizationId,\n        },\n        CardNode: {\n          pages: pages || [],\n          onNavigateToPage: onNavigateToPage,\n        }\n      },\n      ...extensionOptions,\n    };\n\n    const manager = new ExtensionManager(\n      extensionManagerOptions,\n      customExtensionSet\n    );\n    return manager.getConfiguredExtensions();\n  }, [\n    extensions,\n    extensionOptions,\n    disabledExtensions,\n    customExtensionSet,\n    placeholder,\n    enableAI,\n    onUploadMedia,\n    productId,\n    organizationId,\n    pages,\n    onNavigateToPage,\n  ]);\n\n  // Generate unique editor ID\n  const editorId = pageId\n    ? `tnkr-editor-${pageId}`\n    : `tnkr-editor-${Math.random().toString(36).slice(2, 11)}`;\n\n  // Initialize Tiptap editor with Notion-like extensions\n  const editor = useEditor({\n    immediatelyRender: false,\n    shouldRerenderOnTransaction: false,\n    autofocus: autoFocus ? 'end' : false,\n    editorProps: {\n      attributes: {\n        class: `notion-like-editor${!showDragHandle ? \" no-drag-handle\" : \"\"}`,\n        \"data-editor-id\": editorId,\n        // expose editor-scoped defaults on the DOM so node-views can read them\n        \"data-organization-id\": organizationId ?? \"\",\n        \"data-product-id\": productId ?? \"\",\n        \"data-tab-context\": tabContext ?? \"\",\n      },\n    },\n    extensions: configuredExtensions,\n    content: content,\n    editable: !readOnly,\n    onUpdate: ({ editor }) => {\n      if (!onChange) return;\n\n      // Debounce the onChange callback\n      if (debounceTimeoutRef.current) {\n        clearTimeout(debounceTimeoutRef.current);\n      }\n\n      debounceTimeoutRef.current = setTimeout(() => {\n        const editorContent = editor.getJSON();\n        // Merge editor content with custom blocks\n        onChange(editorContent);\n      }, 500);\n    },\n    onContentError: ({ editor, error, disableCollaboration }) => { // Safe even without collab\n      console.error('Table/content error:', error, error.stack); // Log full trace\n      // Optional: disable collab if active, or retry focus\n    },\n  });\n\n  // update editor attributes for organizationId and productId when props change\n  useEffect(()=> {\n    if (!editor) return;\n    const existing = editor.options?.editorProps || {};\n\n    const newAttrs: Record<string, string> = { ...existing.attributes || {} };\n    // always set the attributes (use empty string if missing) so node-views can reliably read them\n    newAttrs[\"data-organization-id\"] = organizationId ?? \"\";\n    newAttrs[\"data-product-id\"] = productId ?? \"\";\n\n    editor.setOptions({\n      editorProps: { ...existing, attributes: newAttrs }\n    });\n\n    // Emit a custom event so node-views can react to editor-level defaults changing\n    try {\n      ;(editor as any).emit?.('tnkr:optionsChanged', { organizationId, productId });\n    } catch (e) {\n      // ignore if emit not available\n    }\n  }, [organizationId, productId, editor])\n\n\n  // Store navigation callback on editor instance for access in components (backup method)\n  useEffect(() => {\n    if (!editor) return;\n    // Store navigation callback on editor instance as backup\n    (editor as any).tnkrOnNavigateToPage = onNavigateToPage;\n  }, [onNavigateToPage, editor])\n\n  // Update editable state when readOnly prop changes\n  useEffect(() => {\n    if (!editor) return;\n    editor.setEditable(!readOnly);\n  }, [readOnly, editor]);\n\n  // Clear selection when autoFocus is false (prevents auto-selection in tabs)\n  // Only apply this fix to nested editors inside tabs (when tabContext is present)\n  useEffect(() => {\n    if (!editor || autoFocus || !tabContext) return;\n\n    // Wait for editor to be fully initialized and then clear selection\n    // Use a longer delay (100ms) to ensure editor has fully initialized and rendered\n    // before clearing selection, especially important for nested editors in tabs\n    const timer = setTimeout(() => {\n      try {\n        // Blur the editor to remove any focus\n        editor.commands.blur();\n        // Also clear any selection\n        if (editor.state.selection) {\n          editor.commands.setTextSelection(0);\n          editor.commands.blur();\n        }\n      } catch (error) {\n        // Ignore any errors during blur\n      }\n    }, 100);\n\n    return () => clearTimeout(timer);\n  }, [editor, autoFocus, tabContext]);\n\n  // Prevent focus when autoFocus is false and clicking outside editor content\n  // Only apply this fix to nested editors inside tabs (when tabContext is present)\n  // useEffect(() => {\n  //   if (!editor || autoFocus || !tabContext) return;\n\n  //   const editorWrapper = document.querySelector(`[data-editor-id=\"${editorId}\"]`)?.closest('.notion-like-editor-wrapper');\n  //   if (!editorWrapper) return;\n\n  //   const handleMouseDown = (e: Event) => {\n  //     const target = e.target as HTMLElement;\n\n  //     // Don't prevent focus if clicking on popup menus or floating UI elements\n  //     if (\n  //       target.closest('.table-cell-menu-popup') ||\n  //       target.closest('[class*=\"SearchablePopup\"]') ||\n  //       target.closest('[role=\"dialog\"]') ||\n  //       target.closest('[role=\"menu\"]') ||\n  //       target.closest('.tippy-box') ||\n  //       target.closest('[data-tippy-root]')\n  //     ) {\n  //       return;\n  //     }\n\n  //     // Check if the click is on the editor's editable area (ProseMirror)\n  //     const editorDom = editor.view.dom;\n  //     const isProseMirrorClick = editorDom.contains(target) || target.closest('.ProseMirror');\n\n  //     // If clicking in the wrapper but not on ProseMirror content, prevent focus\n  //     if (!isProseMirrorClick) {\n  //       e.preventDefault();\n  //       e.stopPropagation();\n  //       // Delay blur to ensure it happens after any focus attempt\n  //       setTimeout(() => {\n  //         editor.commands.blur();\n  //       }, 0);\n  //     }\n  //   };\n\n  //   editorWrapper.addEventListener('mousedown', handleMouseDown, true);\n  //   return () => {\n  //     editorWrapper.removeEventListener('mousedown', handleMouseDown, true);\n  //   };\n  // }, [editor, autoFocus, editorId, tabContext]);\n\n  // Handle internal link clicks for page navigation\n  useEffect(() => {\n    if (!editor || !onNavigateToPage) return;\n\n    const handleClick = (event: MouseEvent) => {\n      const target = event.target as HTMLElement;\n\n      // Find the closest link element\n      const link = target.closest('a[data-internal=\"true\"]');\n      if (!link) return;\n\n      // Prevent default link behavior\n      event.preventDefault();\n\n      // Get the page ID from the link\n      const pageId = link.getAttribute('data-page-id');\n      if (pageId) {\n        onNavigateToPage(pageId);\n      }\n    };\n\n    // Get the editor DOM element\n    const editorElement = editor.view.dom;\n\n    // Add click listener\n    editorElement.addEventListener('click', handleClick);\n\n    // Cleanup\n    return () => {\n      editorElement.removeEventListener('click', handleClick);\n    };\n  }, [editor, onNavigateToPage]);\n\n  // IMPORTANT: All hooks must be called before any conditional logic or early returns\n  // Notion-like editor state management\n  const { isDragging } = useUiEditorState(editor);\n\n  // Selection based effect to handle AI generation acceptance\n\n  useScrollToHash();\n\n  // Loading state\n  if (!isClient) {\n    return (\n      <div className={`w-full text-left ${className}`} style={{ minHeight }}>\n        <div className=\"w-full text-left\">\n          <div\n            className=\"w-full flex items-center justify-center opacity-60\"\n            style={{ minHeight: minHeight - 40 }}\n          >\n            <span className=\"text-white/50\">Loading editor...</span>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  if (!editor) {\n    return (\n      <div className={cn(\"w-full text-left\", className)} style={{ minHeight }}>\n        <div className=\"w-full text-left\">\n          <div\n            className=\"w-full flex items-center justify-center opacity-60\"\n            style={{ minHeight: minHeight - 40 }}\n          >\n            <span className=\"text-white/50\">Loading editor...</span>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <ProductDataProvider productData={productData || null}>\n      <ThemeProvider>\n        <div\n          className=\"notion-like-editor-wrapper\"\n          style={{ minHeight, position: \"relative\" }}\n        >\n          <EditorContext.Provider value={{ editor }}>\n            <EditorContent\n              editor={editor}\n              role=\"presentation\"\n              className=\"notion-like-editor-content\"\n              style={{\n                cursor: isDragging ? \"grabbing\" : \"auto\",\n              }}\n            >\n              {showDragHandle && <DragContextMenu />}\n              <EmojiDropdownMenu />\n              <MentionDropdownMenu />\n              <SlashDropdownMenu />\n              <NotionToolbarFloating />\n\n              {createPortal(<MobileToolbar />, document.body)}\n            </EditorContent>\n          </EditorContext.Provider>\n        </div>\n      </ThemeProvider>\n    </ProductDataProvider>\n  );\n};\n\nexport default TnkrEditor;\n","import React from 'react';\nimport { Icon } from '@iconify/react';\n\ninterface ChevronProps {\n  isOpen: boolean;\n  className?: string;\n}\n\nexport const Chevron: React.FC<ChevronProps> = ({ isOpen, className = '' }) => {\n  return (\n    <Icon\n      icon=\"mdi:chevron-down\"\n      className={`transition-transform duration-200 ${isOpen ? 'rotate-180' : ''} ${className}`}\n    />\n  );\n};","import React, { useState, useRef, useEffect } from 'react';\nimport { Chevron } from '@/app/components/Chevron';\n\ninterface Option {\n  value: string;\n  label: string;\n  logo?: React.ReactNode;\n}\n\ninterface SelectDropdownProps {\n  options: Option[];\n  value?: Option;\n  onChange: (option: Option) => void;\n  placeholder?: string;\n  label?: string;\n}\n\nconst TnkrSelect: React.FC<SelectDropdownProps> = ({\n  options,\n  value,\n  onChange,\n  placeholder = 'Select...',\n  label,\n}: SelectDropdownProps) => {\n  const [open, setOpen] = useState(false);\n  const ref = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const handleClickOutside = (e: MouseEvent) => {\n      if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n    };\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, []);\n\n  return (\n    <div className='relative w-full' ref={ref}>\n      {label && <label className='text-sm font-medium text-white'>{label}</label>}\n      <button\n        type='button'\n        onClick={() => setOpen((o) => !o)}\n        className='w-full cursor-pointer mt-4 flex items-center justify-between px-4 py-2 focus:ring-2 focus:ring-white rounded-lg border-[#313133] border focus:outline-none'\n      >\n        <div className='flex items-center space-x-2 min-w-0'>\n          {value?.logo && value.logo}\n          <span className='text-white truncate block' title={value ? value.label : placeholder}>\n            {value ? value.label : placeholder}\n          </span>\n        </div>\n        <Chevron isOpen={open} />\n      </button>\n      {open && (\n        <div\n          className='absolute z-50 mt-1 w-full bg-black border-[#313133] rounded shadow-lg max-h-60 overflow-y-auto'\n          style={{ top: '100%' }} // Ensure dropdown is positioned below the button\n        >\n          {options.map((opt) => (\n            <button\n              key={opt.value}\n              type='button'\n              onClick={() => {\n                onChange(opt);\n                setOpen(false);\n              }}\n              className='w-full flex items-center px-4 py-2 cursor-pointer hover:bg-[#313133] focus:bg-[#313133] border-b border-[#313133] last:border-b-0 text-left'\n            >\n              {opt.logo && <span className='w-5 h-5 mr-2 flex-shrink-0'>{opt.logo}</span>}\n              <span className='text-white max-w-[10rem] truncate block' title={opt.label}>\n                {opt.label}\n              </span>\n            </button>\n          ))}\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport { TnkrSelect };\n","// CONSTANTS TO USE IN THE ASSEMBLY ANNOTATION COMPONENTS\n\n// Import icons from the centralized index with TypeScript support\nimport {\n  Font1,\n  Font2,\n  Font3,\n  ShapeBoth,\n  ShapeDotted,\n  ShapeFill,\n  ShapeOutline,\n  TextSmall,\n  TextMed,\n  TextLarge,\n  TextXLarge,\n  ArrowDiamond,\n  ArrowDotFill,\n  ArrowInversePointFill,\n  ArrowJoint,\n  ArrowPointFill,\n  ArrowPointOutline,\n  AnnotationTypeLabel,\n  AnnotationTypeShapeAndLabel,\n} from './icons';\n\nimport type { ColorLabel, IShape, ITextStyle, IArrowStyle, AnnotationType, IAnnotation2D } from './types';\n\nimport {\n    Square,\n    Circle as LucideCircle,\n    Hexagon,\n    Octagon,\n    ArrowUp,\n    ArrowDown,\n    ArrowLeft,\n    ArrowRight,\n    RotateCw,\n    RotateCcw,\n    RefreshCw,\n    RefreshCcw,\n    Bold,\n    Italic,\n    Underline,\n    MoveUpRight,\n    CircleOff,\n    AlignLeft,\n    AlignCenter,\n    AlignRight,\n    TypeOutline,\n    Cross,\n} from 'lucide-react';\n\ntype Icon = React.ComponentType<{ className?: string }>;\n\n// Color palette for annotation color pickers\nexport const ANNOTATION_TYPES: Array<{\n    value: AnnotationType;\n    label: string;\n    icon: Icon;\n}> = [\n    { value: 'label', label: 'Label', icon: TypeOutline },\n    { value: 'arrow', label: 'Shapes & Arrows', icon: Cross },\n];\n\n// Color palette for annotation color pickers\nexport const ANNOTATION_COLORS: Array<{\n    value: ColorLabel;\n    code: string;\n}> = [\n    { value: 'white', code: '#FFFFFF' },\n    { value: 'light gray', code: '#9CA3AF' },\n    { value: 'purple', code: '#A855F7' },\n    { value: 'dark purple', code: '#7C3AED' },\n    { value: 'blue', code: '#3B82F6' },\n    { value: 'light blue', code: '#06B6D4' },\n    { value: 'orange', code: '#F97316' },\n    { value: 'dark orange', code: '#EA580C' },\n    { value: 'pulse orange', code: '#DB783E' },\n    { value: 'green', code: '#10B981' },\n    { value: 'light green', code: '#84CC16' },\n    { value: 'red', code: '#EF4444' },\n    { value: 'dark red', code: '#DC2626' },\n];\n\n// Shapes picker\nexport const ANNOTATION_SHAPES: Array<{\n    value: IShape['type'];\n    canContainText?: boolean;\n    label: string;\n    icon: Icon;\n}> = [\n    { value: 'square', label: 'Square', icon: Square, canContainText: true },\n    { value: 'circle', label: 'Circle', icon: LucideCircle, canContainText: true },\n    { value: 'hexagon', label: 'Hexagon', icon: Hexagon, canContainText: true },\n    { value: 'octagon', label: 'Octagon', icon: Octagon, canContainText: true },\n    { value: 'arrowUp', label: 'Arrow Up', icon: ArrowUp },\n    { value: 'arrowDown', label: 'Arrow Down', icon: ArrowDown },\n    { value: 'arrowLeft', label: 'Arrow Left', icon: ArrowLeft },\n    { value: 'arrowRight', label: 'Arrow Right', icon: ArrowRight },\n    { value: 'rotateCw', label: 'Rotate CW', icon: RotateCw },\n    { value: 'rotateCcw', label: 'Rotate CCW', icon: RotateCcw },\n    { value: 'refreshCW', label: 'Refresh CW', icon: RefreshCw },\n    { value: 'refreshCCW', label: 'Refresh CCW', icon: RefreshCcw },\n    { value: 'none', label: 'No Shape', icon: CircleOff, canContainText: true },\n];\n\n// Shape variant picker\nexport const SHAPE_VARIANTS: Array<{\n    value: IShape['variant'];\n    label: string;\n    icon: Icon;\n}> = [\n    { value: 'outline', label: 'Outline', icon: ShapeOutline },\n    { value: 'fill', label: 'Fill', icon: ShapeFill },\n    { value: 'both', label: 'Both', icon: ShapeBoth },\n    { value: 'dotted', label: 'Dotted', icon: ShapeDotted },\n];\n\n// Font family options for annotation text\nexport const FONT_FAMILIES: Array<{\n    value: ITextStyle['fontFamily'];\n    label: string;\n    icon: Icon;\n}> = [\n    { value: 'modern', label: 'Modern', icon: Font1 },\n    { value: 'block', label: 'Block', icon: Font2 },\n    { value: 'cursive', label: 'Cursive', icon: Font3 },\n];\n\n// Text decoration options\nexport const TEXT_DECORATIONS: Array<{\n    value: ITextStyle['decoration'][number];\n    label: string;\n    icon: Icon;\n}> = [\n    { value: 'bold', label: 'Bold', icon: Bold },\n    { value: 'italics', label: 'Italics', icon: Italic },\n    { value: 'underline', label: 'Underline', icon: Underline },\n];\n\n// Text decoration options\nexport const TEXT_SIZES: Array<{\n    value: ITextStyle['size'];\n    label: string;\n    icon: Icon;\n}> = [\n    { value: 'S', label: 'Small', icon: TextSmall },\n    { value: 'M', label: 'Medium', icon: TextMed },\n    { value: 'L', label: 'Large', icon: TextLarge },\n    { value: 'XL', label: 'Extra Large', icon: TextXLarge },\n];\n\nexport const TEXT_ALIGNMENTS: Array<{\n    value: IAnnotation2D['align'];\n    label: string;\n    icon: Icon;\n}> = [\n    { value: 'left', label: 'Left', icon: AlignLeft },\n    { value: 'center', label: 'Center', icon: AlignCenter },\n    { value: 'right', label: 'Right', icon: AlignRight },\n];\n\n// Arrow line style options\nexport const ARROW_LINE_TYPES: Array<{\n    value: IArrowStyle['type'];\n    label: string;\n    icon: Icon;\n}> = [\n    { value: 'joint', label: 'Joint', icon: MoveUpRight },\n    { value: 'straight', label: 'Straight', icon: ArrowJoint },\n];\n\n// Arrow end style options\nexport const ARROW_TIP_STYLES: Array<{\n    value: IArrowStyle['tipStyle'];\n    label: string;\n    icon: Icon;\n}> = [\n    { value: 'point-fill', label: 'Arrow Point Filled', icon: ArrowPointFill },\n    { value: 'point-outline', label: 'Arrow Point Outline', icon: ArrowPointOutline },\n    { value: 'inverse-point', label: 'Inverse Point', icon: ArrowInversePointFill },\n    { value: 'diamond', label: 'Diamond', icon: ArrowDiamond },\n    { value: 'dot', label: 'Dot', icon: ArrowDotFill },\n];\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n    return (\n        <textarea\n            data-slot='textarea'\n            className={cn(\n                'border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n                className\n            )}\n            {...props}\n        />\n    );\n}\n\nexport { Textarea };\n","/**\n * Google Fonts configuration for TnkrEditor\n * These can be used as className values or in CSS-in-JS\n */\n\nexport const fonts = {\n  poppins: {\n    family: 'Poppins, sans-serif',\n    className: 'font-poppins',\n    weights: [300, 400, 500, 600, 700],\n  },\n  orbitron: {\n    family: 'Orbitron, monospace', \n    className: 'font-orbitron',\n    weights: [400, 500, 700, 900],\n  },\n  dancingScript: {\n    family: 'Dancing Script, cursive',\n    className: 'font-dancing-script',\n    weights: [400, 500, 600, 700],\n  },\n} as const;\n\nexport type FontFamily = keyof typeof fonts;\n\n/**\n * Get font family CSS value\n */\nexport const getFontFamily = (font: FontFamily): string => {\n  return fonts[font].family;\n};\n\n/**\n * Get font className for Tailwind CSS\n */\nexport const getFontClassName = (font: FontFamily): string => {\n  return fonts[font].className;\n};","'use client';\nimport React, { useEffect, useRef, useState, useCallback } from 'react';\nimport type { IAnnotation2D, ColorLabel, ITextStyle } from './types';\nimport { ANNOTATION_COLORS, ANNOTATION_SHAPES } from './constants';\nimport { Button } from '@/app/components/ui/Button';\nimport { Textarea } from '@/app/components/ui/textarea';\nimport { X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { getFontClassName } from '@/utils/fonts';\ninterface AssemblyAnnotationOverlayProps {\n    annotations: IAnnotation2D[];\n    setAnnotations: React.Dispatch<React.SetStateAction<IAnnotation2D[]>>;\n    currentAnnotation: IAnnotation2D | null;\n    setCurrentAnnotation: React.Dispatch<React.SetStateAction<IAnnotation2D | null>>;\n    isPlacingAnnotation: boolean;\n    setIsPlacingAnnotation: React.Dispatch<React.SetStateAction<boolean>>;\n    runtimeRef: React.RefObject<any>;\n    isPenToolActive?: boolean; // Whether pen tool is active\n    visibleAnnotationIds: string[]; // Array of annotation IDs that should be visible\n    setVisibleAnnotationIds: React.Dispatch<React.SetStateAction<string[]>>;\n    setCameraSettings?: (settings: any) => void;\n    onDeleteAnnotation?: (annotationId: string) => Promise<void>; // Direct delete function that handles save\n    onActivatePenTool?: () => void; // Callback to activate pen tool when double-clicking annotation\n    onCloseTypeSelector?: () => void; // Callback to close type selector popup\n    onDragStart?: () => void; // Callback when drag starts\n    onDragEnd?: () => void; // Callback when drag ends\n}\n\n// Helper function to get color code from ColorLabel\nconst getColorCode = (colorLabel: ColorLabel): string => {\n    const color = ANNOTATION_COLORS.find((c) => c.value === colorLabel);\n    return color?.code || '#FFFFFF';\n};\n\n// Helper function to convert hex color to rgba with opacity\nconst hexToRgba = (hex: string, opacity: number): string => {\n    const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n    if (result) {\n        const r = parseInt(result[1], 16);\n        const g = parseInt(result[2], 16);\n        const b = parseInt(result[3], 16);\n        return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n    }\n    return `rgba(255, 255, 255, ${opacity})`; // fallback\n};\n\n// Helper function to get font family CSS class\nconst getFontFamilyClass = (family: ITextStyle['fontFamily']): string => {\n    switch (family) {\n        case 'modern':\n            return getFontClassName('poppins');\n        case 'block':\n            return getFontClassName('orbitron');\n        case 'cursive':\n            return getFontClassName('dancingScript');\n        default:\n            return getFontClassName('poppins');\n    }\n};\n\n// Helper function to get text size in pixels\nconst getTextSize = (size: ITextStyle['size']): number => {\n    switch (size) {\n        case 'S':\n            return 12;\n        case 'M':\n            return 16;\n        case 'L':\n            return 20;\n        case 'XL':\n            return 24;\n        default:\n            return 16;\n    }\n};\n\nexport default function AssemblyAnnotationOverlay({\n                                                      annotations,\n                                                      setAnnotations,\n                                                      currentAnnotation,\n                                                      setCurrentAnnotation,\n                                                      isPlacingAnnotation,\n                                                      setIsPlacingAnnotation,\n                                                      runtimeRef,\n                                                      isPenToolActive = false,\n                                                      visibleAnnotationIds,\n                                                      setVisibleAnnotationIds,\n                                                      setCameraSettings,\n                                                      onDeleteAnnotation,\n                                                      onActivatePenTool,\n                                                      onCloseTypeSelector,\n                                                      onDragStart,\n                                                      onDragEnd,\n                                                  }: AssemblyAnnotationOverlayProps) {\n    const overlayRef = useRef<HTMLDivElement>(null);\n    const [linePositions, setLinePositions] = useState<{\n        [key: string]: { startX: number; startY: number; endX: number; endY: number };\n    }>({});\n    const [isDragging, setIsDragging] = useState<string | null>(null);\n    const [dragOffset, setDragOffset] = useState<{ x: number; y: number }>({ x: 0, y: 0 });\n    const [editingAnnotation, setEditingAnnotation] = useState<string | null>(null);\n    const annotationsRef = useRef<IAnnotation2D[]>([]);\n    const lastUpdateTimeRef = useRef<number>(0);\n    const frameId = useRef<number>(0);\n    const dragPositionRef = useRef<{ [key: string]: { x: number; y: number } }>({});\n    const pendingUpdateRef = useRef<IAnnotation2D | null>(null);\n    const updateTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n    // Keep annotations ref in sync for updates\n    useEffect(() => {\n        annotationsRef.current = annotations;\n    }, [annotations]);\n\n    // Track current annotation changes\n    useEffect(() => {\n        // Removed logging to prevent endless stream\n    }, [currentAnnotation]);\n\n    // Update function for annotation positions (removed throttling for smoother dragging)\n    const updateAnnotationPositions = useCallback(() => {\n        if (!runtimeRef.current || !overlayRef.current || annotationsRef.current.length === 0) return;\n\n        // Only throttle updates when not dragging to allow smooth drag interactions\n        if (!isDragging) {\n            const now = Date.now();\n            if (now - lastUpdateTimeRef.current < 33) return;\n            lastUpdateTimeRef.current = now;\n        }\n\n        const newLinePositions: { [key: string]: { startX: number; startY: number; endX: number; endY: number } } = {};\n        const annotationPositions: { [key: string]: { finalX: number; finalY: number; canvasPos: [number, number] } } = {};\n\n        annotationsRef.current.forEach((annotation) => {\n            const element = document.getElementById(`assembly-annotation-${annotation.id}`);\n            if (!element) return;\n\n            const [x, y, z] = annotation.worldPos;\n            const canvasPos = runtimeRef.current.calcCanvasPos(x, y, z);\n\n            if (canvasPos && canvasPos[0] >= 0 && canvasPos[1] >= 0) {\n                // Annotation is visible in viewport\n                let finalX = canvasPos[0];\n                let finalY = canvasPos[1];\n\n                // Apply offset for draggable annotations (both arrow and label)\n                if (annotation.type === 'arrow' || annotation.type === 'label') {\n                    // Check if this annotation is being dragged and use live position\n                    if (isDragging === annotation.id && dragPositionRef.current[annotation.id]) {\n                        finalX = dragPositionRef.current[annotation.id].x;\n                        finalY = dragPositionRef.current[annotation.id].y;\n                    } else if (annotation.customOffset && !(annotation.customOffset.x === 0 && annotation.customOffset.y === 0)) {\n                        // Use custom offset if dragged - but ignore (0,0) which means no real offset\n                        finalX = canvasPos[0] + annotation.customOffset.x;\n                        finalY = canvasPos[1] + annotation.customOffset.y;\n                    } else {\n                        // Default offset for new annotations\n                        if (annotation.type === 'arrow') {\n                            // Default offset for new arrows (closer to origin)\n                            finalX = canvasPos[0] + 50;\n                            finalY = canvasPos[1];\n                        } else if (annotation.type === 'label') {\n                            // Default position for labels (centered above the 3D point)\n                            finalX = canvasPos[0];\n                            finalY = canvasPos[1];\n                        }\n                    }\n                }\n\n                // Store calculated positions for line calculation\n                annotationPositions[annotation.id] = { finalX, finalY, canvasPos };\n\n                element.style.left = `${finalX}px`;\n                element.style.top = `${finalY}px`;\n                element.classList.remove('hidden');\n                element.classList.add('block');\n\n                // Note: Visibility updates would be handled by parent component\n            } else {\n                // Annotation is outside viewport or behind camera\n                element.classList.remove('block');\n                element.classList.add('hidden');\n            }\n        });\n\n        // Calculate line positions for arrow annotations using stored positions\n        annotationsRef.current.forEach((annotation) => {\n            if (annotation.type !== 'arrow') return;\n\n            const element = document.getElementById(`assembly-annotation-${annotation.id}`);\n            if (!element || element.classList.contains('hidden')) return;\n\n            // Use stored position data instead of re-reading from DOM\n            const positionData = annotationPositions[annotation.id];\n            if (!positionData) return;\n\n            const { canvasPos } = positionData;\n\n            // Get fresh bounding rect after position has been applied\n            const annotationRect = element.getBoundingClientRect();\n            const containerRect = overlayRef.current?.getBoundingClientRect();\n\n            if (containerRect) {\n                const startX = canvasPos[0]; // Always start from 3D point\n                const startY = canvasPos[1];\n\n                // Use getBoundingClientRect for consistent viewport-relative coordinates\n                // Convert to container-relative coordinates\n                const annotationLeft = annotationRect.left - containerRect.left;\n                const annotationTop = annotationRect.top - containerRect.top;\n\n                // End point calculation - edge of the annotation box based on direction\n                const centerX = annotationLeft + annotationRect.width / 2;\n                const centerY = annotationTop + annotationRect.height / 2;\n\n                // Calculate direction vector from 3D point to annotation center\n                const dx = centerX - startX;\n                const dy = centerY - startY;\n                const distance = Math.sqrt(dx * dx + dy * dy);\n\n                let endX = centerX;\n                let endY = centerY;\n\n                if (distance > 0) {\n                    // Normalize direction vector\n                    const normalizedDx = dx / distance;\n                    const normalizedDy = dy / distance;\n\n                    // Calculate intersection with annotation border\n                    const halfWidth = annotationRect.width / 2;\n                    const halfHeight = annotationRect.height / 2;\n\n                    // Find which edge the line intersects first\n                    const tX = normalizedDx !== 0 ? halfWidth / Math.abs(normalizedDx) : Infinity;\n                    const tY = normalizedDy !== 0 ? halfHeight / Math.abs(normalizedDy) : Infinity;\n                    const t = Math.min(tX, tY);\n\n                    // Calculate border intersection point\n                    endX = centerX - normalizedDx * t;\n                    endY = centerY - normalizedDy * t;\n                }\n\n                newLinePositions[annotation.id] = { startX, startY, endX, endY };\n            }\n        });\n\n        // Update line positions state\n        setLinePositions(newLinePositions);\n    }, [runtimeRef, isDragging]);\n\n    // Trigger positioning when runtime becomes available\n    useEffect(() => {\n        if (runtimeRef.current && annotations.length > 0) {\n            updateAnnotationPositions();\n        }\n    }, [runtimeRef.current, annotations.length, updateAnnotationPositions]);\n\n    // Create annotation from 3D model click\n    const createAnnotation = useCallback(\n        (event: any) => {\n            if (!isPlacingAnnotation || !currentAnnotation) return;\n\n            const hitPoint = event.hitPnt;\n\n            if (hitPoint && hitPoint.length >= 3) {\n                const newAnnotation: IAnnotation2D = {\n                    ...currentAnnotation,\n                    worldPos: [hitPoint[0], hitPoint[1], hitPoint[2]],\n                };\n\n                // Add to annotations list\n                setAnnotations((prev) => {\n                    const updated = [...prev, newAnnotation];\n                    return updated;\n                });\n\n                // Keep the annotation selected so panel stays visible\n                setCurrentAnnotation(newAnnotation);\n\n                // Stop placement mode\n                setIsPlacingAnnotation(false);\n\n                // Force position update after a short delay\n                setTimeout(() => {\n                    updateAnnotationPositions();\n                }, 100);\n            }\n        },\n        [\n            isPlacingAnnotation,\n            currentAnnotation,\n            updateAnnotationPositions,\n            setAnnotations,\n            setCurrentAnnotation,\n            setIsPlacingAnnotation,\n        ],\n    );\n\n    // Set up enterFrame callback for position updates with better performance\n    useEffect(() => {\n        if (!runtimeRef.current || annotations.length === 0) return;\n\n        const smoothUpdate = () => {\n            // During dragging, update immediately without animation frame delays\n            if (isDragging) {\n                updateAnnotationPositions();\n            } else {\n                // When not dragging, use animation frame for smooth updates\n                if (frameId.current) {\n                    cancelAnimationFrame(frameId.current);\n                }\n                frameId.current = requestAnimationFrame(updateAnnotationPositions);\n            }\n        };\n\n        if (typeof runtimeRef.current.enterFrame !== 'undefined') {\n            runtimeRef.current.enterFrame = smoothUpdate;\n        }\n\n        return () => {\n            if (frameId.current) cancelAnimationFrame(frameId.current);\n        };\n    }, [updateAnnotationPositions, runtimeRef, annotations.length, isDragging]);\n\n    // Set up global click handler for X3D\n    useEffect(() => {\n        (window as any).createAssemblyAnnotation = createAnnotation;\n    }, [createAnnotation]);\n\n    // Set up overlay pointer events\n    useEffect(() => {\n        if (overlayRef.current) overlayRef.current.classList.add('pointer-events-none');\n    }, []);\n\n    // Delete annotation - use direct delete function if available, otherwise fallback to auto-save\n    const deleteAnnotation = async (annotationId: IAnnotation2D['id']) => {\n        // Clear any pending updates for this annotation to prevent race conditions\n        if (pendingUpdateRef.current?.id === annotationId) {\n            pendingUpdateRef.current = null;\n            console.log('🧹 Cleared pending update for deleted annotation:', annotationId);\n        }\n\n        // Clear any active update timer for this annotation\n        if (updateTimerRef.current) {\n            clearTimeout(updateTimerRef.current);\n            updateTimerRef.current = null;\n            console.log('⏹️ Cleared update timer for deleted annotation:', annotationId);\n        }\n\n        // Use direct delete function if available (preferred method)\n        if (onDeleteAnnotation) {\n            console.log('🎯 Using direct delete function for:', annotationId);\n            setCurrentAnnotation(null);\n            await onDeleteAnnotation(annotationId);\n            return;\n        }\n\n        // Fallback: just remove from state, Editor3D autosave will handle saving\n        console.log('🗑️ Using fallback deletion - removing from state:', annotationId);\n        setAnnotations((prev) => prev.filter((annotation) => annotation.id !== annotationId));\n        setCurrentAnnotation(null);\n    };\n\n    // Toggle annotation visibility\n    const handleToggleAnnotation = (annotationId: string) => {\n        const annotation = annotations.find((a) => a.id == annotationId);\n        if (annotation?.cameraState && setCameraSettings) {\n            setCameraSettings(annotation.cameraState);\n        }\n        setVisibleAnnotationIds((prev) => {\n            if (prev.includes(annotationId)) {\n                return prev.filter((id) => id !== annotationId);\n            } else {\n                return [...prev, annotationId];\n            }\n        });\n    };\n\n    // Drag handlers\n    const handleMouseDown = useCallback(\n        (e: React.MouseEvent, annotationId: string) => {\n            const annotation = annotations.find((a) => a.id === annotationId);\n            if (!annotation) return;\n\n            e.preventDefault();\n            e.stopPropagation();\n\n            const containerRect = overlayRef.current?.getBoundingClientRect();\n            if (!containerRect) return;\n\n            // Get the annotation element's current position from the DOM\n            const element = document.getElementById(`assembly-annotation-${annotationId}`);\n            if (!element) return;\n\n            // Get the actual current position from the element's style (this is where it's visually positioned)\n            const currentLeft = parseFloat(element.style.left) || 0;\n            const currentTop = parseFloat(element.style.top) || 0;\n\n            // Store the exact current position to prevent any jump\n            dragPositionRef.current[annotationId] = {\n                x: currentLeft,\n                y: currentTop,\n            };\n\n            setIsDragging(annotationId);\n\n            // Calculate offset from mouse to the element's current position\n            // This maintains the grab point during dragging\n            setDragOffset({\n                x: e.clientX - containerRect.left - currentLeft,\n                y: e.clientY - containerRect.top - currentTop,\n            });\n\n            // Notify parent that drag started\n            onDragStart?.();\n        },\n        [annotations, onDragStart],\n    );\n\n    const handleMouseMove = useCallback(\n        (e: MouseEvent) => {\n            if (!isDragging || !overlayRef.current || !runtimeRef.current) return;\n\n            const containerRect = overlayRef.current.getBoundingClientRect();\n            const annotation = annotations.find((a) => a.id === isDragging);\n\n            if (!annotation) return;\n\n            // Get the 3D anchor point in screen coordinates\n            const [x, y, z] = annotation.worldPos;\n            const canvasPos = runtimeRef.current.calcCanvasPos(x, y, z);\n\n            if (!canvasPos) return;\n\n            // Calculate new position: mouse position minus the offset gives us where the center should be\n            const newX = e.clientX - containerRect.left - dragOffset.x;\n            const newY = e.clientY - containerRect.top - dragOffset.y;\n\n            // Calculate offset from 3D anchor point\n            const offsetX = newX - canvasPos[0];\n            const offsetY = newY - canvasPos[1];\n\n            // Store live position for immediate visual updates\n            dragPositionRef.current[isDragging] = {\n                x: newX,\n                y: newY,\n            };\n\n            // Use requestAnimationFrame for smooth DOM updates\n            if (frameId.current) cancelAnimationFrame(frameId.current);\n            frameId.current = requestAnimationFrame(() => {\n                // Immediately update the DOM element position for instant feedback\n                const element = document.getElementById(`assembly-annotation-${isDragging}`);\n                if (element) {\n                    element.style.left = `${newX}px`;\n                    element.style.top = `${newY}px`;\n                }\n\n                // Update line positions immediately without throttling\n                updateAnnotationPositions();\n            });\n\n            // Store the updated annotation for final state update (no frequent state updates during drag)\n            const updatedAnnotation = {\n                ...annotation,\n                customOffset: {\n                    x: offsetX,\n                    y: offsetY,\n                },\n            };\n\n            pendingUpdateRef.current = updatedAnnotation;\n\n            // Update the ref immediately for position calculations (but not state during drag)\n            annotationsRef.current = annotationsRef.current.map((ann) =>\n                ann.id === updatedAnnotation.id ? updatedAnnotation : ann,\n            );\n        },\n        [isDragging, dragOffset, annotations, runtimeRef, updateAnnotationPositions],\n    );\n\n    const handleMouseUp = useCallback(() => {\n        if (isDragging) {\n            // Flush any pending updates immediately\n            const updatedAnnotation = pendingUpdateRef.current;\n            if (updatedAnnotation) {\n                console.log('💾 Flushing pending update for annotation', updatedAnnotation.id, {\n                    customOffset: updatedAnnotation.customOffset,\n                    scale: updatedAnnotation.scale,\n                });\n\n                // Update state with final position\n                setAnnotations((prev) =>\n                    prev.map((annotation) => (annotation.id === updatedAnnotation.id ? updatedAnnotation : annotation)),\n                );\n\n                pendingUpdateRef.current = null;\n            }\n\n            // Clear the live drag position AFTER ensuring state is updated\n            delete dragPositionRef.current[isDragging];\n\n            // Notify parent that drag ended\n            onDragEnd?.();\n        }\n        setIsDragging(null);\n        setDragOffset({ x: 0, y: 0 });\n    }, [isDragging, setAnnotations, onDragEnd]);\n\n    // Set up global mouse event listeners for drag\n    useEffect(() => {\n        if (isDragging) {\n            document.addEventListener('mousemove', handleMouseMove);\n            document.addEventListener('mouseup', handleMouseUp);\n            return () => {\n                document.removeEventListener('mousemove', handleMouseMove);\n                document.removeEventListener('mouseup', handleMouseUp);\n            };\n        }\n    }, [isDragging, handleMouseMove, handleMouseUp]);\n\n    // Cleanup timers on unmount\n    useEffect(() => {\n        return () => {\n            if (updateTimerRef.current) clearTimeout(updateTimerRef.current);\n            if (frameId.current) cancelAnimationFrame(frameId.current);\n        };\n    }, []);\n\n    const ShapeSVG = ({ annotation }: { annotation: IAnnotation2D }) => {\n        const thickness = 0.5;\n        const backgroundColor = getColorCode(annotation.shape.backgroundColor);\n        const outlineColor = getColorCode(annotation.shape.outlineColor);\n\n        let fill = 'transparent';\n        let stroke = 'transparent';\n        let strokeWidth = 0;\n        let strokeDasharray = '';\n\n        const svgProps = {\n            width: '100%',\n            height: '100%',\n            viewBox: `0 0 50 50`,\n            className: 'absolute inset-0 pointer-events-none z-[1]',\n        };\n\n        if (annotation.shape.type !== 'none') {\n            switch (annotation.shape.variant) {\n                case 'fill':\n                    fill = backgroundColor;\n                    break;\n                case 'outline':\n                    stroke = outlineColor;\n                    strokeWidth = thickness;\n                    break;\n                case 'both':\n                    fill = backgroundColor;\n                    stroke = outlineColor;\n                    strokeWidth = thickness;\n                    break;\n                case 'dotted':\n                    stroke = outlineColor;\n                    strokeWidth = thickness;\n                    strokeDasharray = '3,3';\n                    break;\n                default:\n                    fill = 'rgba(0, 0, 0, 0.8)';\n            }\n        }\n\n        switch (annotation.shape.type) {\n            case 'square':\n                return (\n                    <svg {...svgProps}>\n                        <rect\n                            x={strokeWidth / 2}\n                            y={strokeWidth / 2}\n                            width={50 - strokeWidth}\n                            height={50 - strokeWidth}\n                            rx='6'\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                    </svg>\n                );\n\n            case 'circle':\n                return (\n                    <svg {...svgProps}>\n                        <circle\n                            cx={25}\n                            cy={25}\n                            r={(50 - strokeWidth) / 2}\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                    </svg>\n                );\n\n            case 'hexagon':\n                const hexPoints = [\n                    [25, strokeWidth / 2],\n                    [50 - strokeWidth / 2, 12.5],\n                    [50 - strokeWidth / 2, 37.5],\n                    [25, 50 - strokeWidth / 2],\n                    [strokeWidth / 2, 37.5],\n                    [strokeWidth / 2, 12.5],\n                ]\n                    .map((p) => p.join(','))\n                    .join(' ');\n                return (\n                    <svg {...svgProps}>\n                        <polygon\n                            points={hexPoints}\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                    </svg>\n                );\n\n            case 'octagon':\n                const octPoints = [\n                    [15, strokeWidth / 2],\n                    [35, strokeWidth / 2],\n                    [50 - strokeWidth / 2, 15],\n                    [50 - strokeWidth / 2, 35],\n                    [35, 50 - strokeWidth / 2],\n                    [15, 50 - strokeWidth / 2],\n                    [strokeWidth / 2, 35],\n                    [strokeWidth / 2, 15],\n                ]\n                    .map((p) => p.join(','))\n                    .join(' ');\n                return (\n                    <svg {...svgProps}>\n                        <polygon\n                            points={octPoints}\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                    </svg>\n                );\n\n            case 'arrowUp':\n                const arrowUpPath = `M 25 ${strokeWidth / 2} L 37.5 25 L 30 25 L 30 ${50 - strokeWidth / 2} L 20 ${50 - strokeWidth / 2} L 20 25 L 12.5 25 Z`;\n                return (\n                    <svg {...svgProps}>\n                        <path\n                            d={arrowUpPath}\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                    </svg>\n                );\n\n            case 'arrowDown':\n                const arrowDownPath = `M 20 ${strokeWidth / 2} L 30 ${strokeWidth / 2} L 30 25 L 37.5 25 L 25 ${50 - strokeWidth / 2} L 12.5 25 L 20 25 Z`;\n                return (\n                    <svg {...svgProps}>\n                        <path\n                            d={arrowDownPath}\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                    </svg>\n                );\n\n            case 'arrowLeft':\n                const arrowLeftPath = `M ${strokeWidth / 2} 25 L 25 12.5 L 25 20 L ${50 - strokeWidth / 2} 20 L ${50 - strokeWidth / 2} 30 L 25 30 L 25 37.5 Z`;\n                return (\n                    <svg {...svgProps}>\n                        <path\n                            d={arrowLeftPath}\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                    </svg>\n                );\n\n            case 'arrowRight':\n                const arrowRightPath = `M ${50 - strokeWidth / 2} 25 L 25 12.5 L 25 20 L ${strokeWidth / 2} 20 L ${strokeWidth / 2} 30 L 25 30 L 25 37.5 Z`;\n                return (\n                    <svg {...svgProps}>\n                        <path\n                            d={arrowRightPath}\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                    </svg>\n                );\n\n            case 'rotateCw':\n                return (\n                    <svg {...svgProps}>\n                        <path\n                            d={`M 43.75 25 A 18.75 18.75 0 1 1 25 6.25 C 30.2 6.25 35.4 8.35 39.05 11.95 L 43.75 16.65`}\n                            fill='none'\n                            stroke={stroke || fill}\n                            strokeWidth={strokeWidth || 2}\n                            strokeLinecap='round'\n                            strokeLinejoin='round'\n                        />\n                        <path\n                            d={`M 43.75 6.25 V 16.65 H 33.35`}\n                            fill='none'\n                            stroke={stroke || fill}\n                            strokeWidth={strokeWidth || 2}\n                            strokeLinecap='round'\n                            strokeLinejoin='round'\n                        />\n                    </svg>\n                );\n\n            case 'rotateCcw':\n                return (\n                    <svg {...svgProps}>\n                        <path\n                            d={`M 6.25 25 A 18.75 18.75 0 1 0 25 6.25 C 19.8 6.25 14.6 8.35 10.95 11.95 L 6.25 16.65`}\n                            fill='none'\n                            stroke={stroke || fill}\n                            strokeWidth={strokeWidth || 2}\n                            strokeLinecap='round'\n                            strokeLinejoin='round'\n                        />\n                        <path\n                            d={`M 6.25 6.25 V 16.65 H 16.65`}\n                            fill='none'\n                            stroke={stroke || fill}\n                            strokeWidth={strokeWidth || 2}\n                            strokeLinecap='round'\n                            strokeLinejoin='round'\n                        />\n                    </svg>\n                );\n\n            case 'refreshCW':\n                return (\n                    <svg {...svgProps}>\n                        <path\n                            d={`M 6.25 25 A 18.75 18.75 0 0 1 25 6.25 A 20.3 20.3 0 0 1 39.05 11.95 L 43.75 16.65`}\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                        <path\n                            d={`M 43.75 6.25 V 16.65 H 33.35`}\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                        <path\n                            d={`M 43.75 25 A 18.75 18.75 0 0 1 25 43.75 A 20.3 20.3 0 0 1 10.95 38.05 L 6.25 33.35`}\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                        <path\n                            d={`M 16.65 33.35 H 6.25 V 43.75`}\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                    </svg>\n                );\n\n            case 'refreshCCW':\n                return (\n                    <svg {...svgProps}>\n                        <path\n                            d={`M 43.75 25 A 18.75 18.75 0 0 0 25 6.25 A 20.3 20.3 0 0 0 10.95 11.95 L 6.25 16.65`}\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                        <path\n                            d={`M 6.25 6.25 V 16.65 H 16.65`}\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                        <path\n                            d={`M 6.25 25 A 18.75 18.75 0 0 0 25 43.75 A 20.3 20.3 0 0 0 39.05 38.05 L 43.75 33.35`}\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                        <path\n                            d={`M 33.35 33.35 H 43.75 V 43.75`}\n                            fill={fill}\n                            stroke={stroke}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={strokeDasharray}\n                        />\n                    </svg>\n                );\n\n            case 'none':\n                return (\n                    <svg {...svgProps}>\n                        <rect x={0} y={0} width={50} height={50} rx='6' fill='transparent' stroke='transparent' strokeWidth={0} />\n                    </svg>\n                );\n\n            default:\n                return null;\n        }\n    };\n\n    return (\n        <>\n            {/* SVG Lines for Arrow Annotations */}\n            <svg className='absolute inset-0 w-full h-full pointer-events-none z-10 opacity-100 transition-opacity duration-300 ease-in-out'>\n                <defs>\n                    {/* Create unique markers for each arrow annotation with the correct color */}\n                    {annotations\n                        .filter((a) => a.type === 'arrow' && a.arrow)\n                        .map((annotation) => {\n                            const lineColor = getColorCode(annotation.arrow!.color);\n                            const uniqueId = annotation.id;\n\n                            return (\n                                <React.Fragment key={`markers-${uniqueId}`}>\n                                    <marker\n                                        id={`point-fill-${uniqueId}`}\n                                        markerWidth='10'\n                                        markerHeight='10'\n                                        refX='9'\n                                        refY='3'\n                                        orient='auto'\n                                    >\n                                        <polygon points='0 0, 10 3, 0 6' fill={lineColor} />\n                                    </marker>\n                                    <marker\n                                        id={`pointFill-${uniqueId}`}\n                                        markerWidth='10'\n                                        markerHeight='10'\n                                        refX='9'\n                                        refY='3'\n                                        orient='auto'\n                                    >\n                                        <polygon points='0 0, 10 3, 0 6' fill={lineColor} />\n                                    </marker>\n                                    <marker\n                                        id={`point-outline-${uniqueId}`}\n                                        markerWidth='10'\n                                        markerHeight='10'\n                                        refX='9'\n                                        refY='3'\n                                        orient='auto'\n                                    >\n                                        <polygon points='0 0, 10 3, 0 6' fill='none' stroke={lineColor} strokeWidth='1' />\n                                    </marker>\n                                    <marker\n                                        id={`pointOutline-${uniqueId}`}\n                                        markerWidth='10'\n                                        markerHeight='10'\n                                        refX='9'\n                                        refY='3'\n                                        orient='auto'\n                                    >\n                                        <polygon points='0 0, 10 3, 0 6' fill='none' stroke={lineColor} strokeWidth='1' />\n                                    </marker>\n                                    <marker\n                                        id={`inverse-point-${uniqueId}`}\n                                        markerWidth='10'\n                                        markerHeight='10'\n                                        refX='1'\n                                        refY='3'\n                                        orient='auto'\n                                    >\n                                        <polygon points='10 0, 0 3, 10 6' fill={lineColor} />\n                                    </marker>\n                                    <marker\n                                        id={`inversePointFill-${uniqueId}`}\n                                        markerWidth='10'\n                                        markerHeight='10'\n                                        refX='1'\n                                        refY='3'\n                                        orient='auto'\n                                    >\n                                        <polygon points='10 0, 0 3, 10 6' fill={lineColor} />\n                                    </marker>\n                                    <marker id={`diamond-${uniqueId}`} markerWidth='10' markerHeight='10' refX='5' refY='5' orient='auto'>\n                                        <polygon points='5 1, 9 5, 5 9, 1 5' fill={lineColor} />\n                                    </marker>\n                                    <marker id={`dot-${uniqueId}`} markerWidth='8' markerHeight='8' refX='4' refY='4' orient='auto'>\n                                        <circle cx='4' cy='4' r='3' fill={lineColor} />\n                                    </marker>\n                                    <marker id={`dotFill-${uniqueId}`} markerWidth='8' markerHeight='8' refX='4' refY='4' orient='auto'>\n                                        <circle cx='4' cy='4' r='3' fill={lineColor} />\n                                    </marker>\n                                    <marker id={`joint-${uniqueId}`} markerWidth='8' markerHeight='8' refX='4' refY='4' orient='auto'>\n                                        <circle cx='4' cy='4' r='2' fill='none' stroke={lineColor} strokeWidth='1' />\n                                    </marker>\n                                </React.Fragment>\n                            );\n                        })}\n                </defs>\n\n                {Object.entries(linePositions).map(([annotationId, pos]) => {\n                    const annotation = annotations.find((a) => a.id === annotationId);\n                    if (!annotation || annotation.type !== 'arrow' || !annotation.arrow) return null;\n\n                    // Check if annotation is visible\n                    const isVisible = visibleAnnotationIds.includes(annotationId);\n\n                    // Get line styling from annotation.arrow\n                    const lineColor = getColorCode(annotation.arrow.color);\n                    const lineThickness = annotation.arrow.thickness || 1;\n                    const lineStyle = annotation.arrow.type; // 'straight' or 'joint'\n                    const lineStartStyle = annotation.arrow.startStyle;\n                    const lineEndStyle = annotation.arrow.endStyle;\n\n                    // Determine marker start (model end) based on line end style (swapped logic)\n                    let markerStart = '';\n                    if (lineEndStyle) {\n                        markerStart = `url(#${lineEndStyle}-${annotationId})`;\n                    }\n\n                    // Determine marker end (annotation end) based on line start style (swapped logic)\n                    let markerEnd = '';\n                    if (lineStartStyle) {\n                        markerEnd = `url(#${lineStartStyle}-${annotationId})`;\n                    }\n\n                    // Create path based on line style\n                    let pathElement;\n                    if (lineStyle === 'joint') {\n                        // Create angled path with 100° angle for joint arrows\n                        const deltaX = pos.endX - pos.startX;\n                        const deltaY = pos.endY - pos.startY;\n\n                        // Calculate bend point (70% along the path with 10° offset for 100° angle)\n                        const bendRatio = 0.7; // How far along to place the bend\n                        const midX = pos.startX + deltaX * bendRatio;\n                        const midY = pos.startY + deltaY * bendRatio + deltaX * 0.1; // 10° offset for 100° angle\n\n                        const pathData = `M ${pos.startX} ${pos.startY} L ${midX} ${midY} L ${pos.endX} ${pos.endY}`;\n\n                        pathElement = (\n                            <path\n                                d={pathData}\n                                stroke={lineColor}\n                                strokeWidth={lineThickness}\n                                fill='none'\n                                markerStart={markerStart}\n                                markerEnd={markerEnd}\n                                opacity='0.9'\n                                strokeLinecap='round'\n                                strokeLinejoin='round'\n                            />\n                        );\n                    } else {\n                        // Straight line for straight arrows\n                        pathElement = (\n                            <line\n                                x1={pos.startX}\n                                y1={pos.startY}\n                                x2={pos.endX}\n                                y2={pos.endY}\n                                stroke={lineColor}\n                                strokeWidth={lineThickness}\n                                markerStart={markerStart}\n                                markerEnd={markerEnd}\n                                opacity='0.9'\n                            />\n                        );\n                    }\n\n                    return (\n                        <g key={`line-${annotationId}`}>\n                            {/* Only show line and markers when annotation is visible */}\n                            {isVisible && pathElement}\n                        </g>\n                    );\n                })}\n\n                {/* Pulse indicators for ALL annotations (arrows, labels, etc.) */}\n                {annotations.map((annotation) => {\n                    // Get the 3D world position for this annotation\n                    if (!annotation.worldPos || !runtimeRef.current) return null;\n\n                    const [x, y, z] = annotation.worldPos;\n                    const canvasPos = runtimeRef.current.calcCanvasPos(x, y, z);\n\n                    if (!canvasPos || canvasPos[0] < 0 || canvasPos[1] < 0) return null;\n\n                    const isVisible = visibleAnnotationIds.includes(annotation.id);\n                    if (!annotation.pulse?.show) return null;\n\n                    const pulseColor = getColorCode(annotation.pulse?.color || 'pulse orange');\n\n                    return (\n                        <g\n                            key={`pulse-${annotation.id}`}\n                            onClick={() => handleToggleAnnotation(annotation.id)}\n                            style={{ cursor: 'pointer', pointerEvents: 'auto' }}\n                        >\n                            {/* Outer circle - with outline and semi-transparent fill */}\n                            <circle\n                                cx={canvasPos[0]}\n                                cy={canvasPos[1]}\n                                r='8.75'\n                                fill={isVisible ? hexToRgba(pulseColor, 0.15) : hexToRgba(pulseColor, 0.11)}\n                                stroke={isVisible ? pulseColor : hexToRgba(pulseColor, 0.75)}\n                                strokeWidth='1'\n                            >\n                                <animate attributeName='r' values='3.75;15;3.75' dur='1s' repeatCount='indefinite' />\n                            </circle>\n                            {/* Inner circle - smaller, more opaque center */}\n                            <circle\n                                cx={canvasPos[0]}\n                                cy={canvasPos[1]}\n                                fill={isVisible ? hexToRgba(pulseColor, 0.7) : hexToRgba(pulseColor, 0.53)}\n                                stroke='none'\n                            >\n                                <animate attributeName='r' values='3;10;2' dur='1s' repeatCount='indefinite' />\n                            </circle>\n                        </g>\n                    );\n                })}\n            </svg>\n\n            {/* Clickable background to clear selection - disabled when placing annotation */}\n            <div\n                className='absolute inset-0 w-full h-full z-10'\n                style={{ pointerEvents: currentAnnotation && !isPlacingAnnotation ? 'auto' : 'none' }}\n                onClick={() => {\n                    setCurrentAnnotation(null);\n                    setEditingAnnotation(null);\n                }}\n            />\n\n            {/* Annotation Overlay */}\n            <div\n                ref={overlayRef}\n                className='absolute inset-0 w-full h-full pointer-events-none z-20'\n                style={isPlacingAnnotation ? { cursor: 'default' } : {}}\n                onKeyDown={(e) => {\n                    if (e.key === 'Escape') {\n                        setCurrentAnnotation(null);\n                        setEditingAnnotation(null);\n                    }\n                }}\n            >\n                {annotations.map((annotation) => {\n                    const isSelected = currentAnnotation?.id === annotation.id && isPenToolActive; // Only show selection when pen tool active\n                    const canContainText =\n                        ANNOTATION_SHAPES.find((s) => s.value === annotation.shape.type)?.canContainText || false;\n                    const textSize = getTextSize(annotation.text.size);\n                    const textColor = getColorCode(annotation.text.color);\n                    const fontFamilyClass = getFontFamilyClass(annotation.text.fontFamily);\n                    const scale = 96 * annotation.scale;\n\n                    // Check if this annotation should be visible\n                    const isVisible = visibleAnnotationIds.includes(annotation.id);\n\n                    const ContainerClasses = `\n            ${annotation.type === 'label' ? 'transform -translate-x-1/2 -translate-y-1/2' : ''} ${\n                        isSelected ? 'ring-1 ring-blue-400' : isDragging === annotation.id ? 'opacity-70 ring-1 ring-red-400' : ''\n                    } ${!isVisible ? 'invisible' : ''}\n          `;\n                    const TextAreaClasses = `\n            absolute top-1/2 -translate-y-1/2 ${fontFamilyClass} text-${annotation.align}\n            ${annotation.text.decoration.includes('bold') ? 'font-bold' : ''} ${\n                        annotation.text.decoration.includes('italics') ? 'italic' : ''\n                    } ${annotation.text.decoration.includes('underline') ? 'underline' : ''}\n          `;\n\n                    const handleDoubleClick = () => {\n                        // Set current annotation to show the panel\n                        setCurrentAnnotation(annotation);\n\n                        // Activate pen tool by clicking the pen button in the toolbar\n                        const penButton = document.querySelector('[data-tool=\"pen\"]') as HTMLElement;\n                        if (penButton) {\n                            penButton.click();\n                        } else {\n                            // Fallback to programmatic activation\n                            onActivatePenTool?.();\n                        }\n\n                        // If text is editable, focus on the textarea after a short delay to allow state updates\n                        if (canContainText) {\n                            setEditingAnnotation(annotation.id);\n                            setTimeout(() => {\n                                const textarea = document.querySelector(\n                                    `#assembly-annotation-${annotation.id} textarea`,\n                                ) as HTMLTextAreaElement;\n                                textarea?.focus();\n                            }, 100);\n                        }\n                    };\n\n                    const handleSelect = (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n                        e.stopPropagation(); // Prevent bubbling to overlay click handler\n                        // Only allow selection when pen tool is active\n                        if (isPenToolActive) {\n                            setCurrentAnnotation(annotation);\n                            // Close the type selector popup if it's open\n                            onCloseTypeSelector?.();\n                            // Enable dragging for both arrow and label annotations\n                            if (annotation.type === 'arrow' || annotation.type === 'label') {\n                                handleMouseDown(e, annotation.id);\n                            }\n                        }\n                    };\n\n                    return (\n                        <div\n                            key={annotation.id}\n                            id={`assembly-annotation-${annotation.id}`}\n                            className={cn(\n                                'w-max relative text-xs pointer-events-auto cursor-pointer flex items-center transition-all',\n                                ContainerClasses,\n                            )}\n                            onDoubleClick={handleDoubleClick}\n                            onMouseDown={handleSelect}\n                        >\n                            <div style={{ height: scale, width: scale }}>\n                                <ShapeSVG annotation={annotation} />\n                            </div>\n\n                            <Textarea\n                                rows={1}\n                                value={canContainText ? annotation.text.value : ''}\n                                placeholder={canContainText ? 'Add Text' : ''}\n                                readOnly={!canContainText || editingAnnotation !== annotation.id}\n                                className={cn(\n                                    `absolute resize-none bg-transparent cursor-pointer leading-tight w-full !border-none !outline-none !ring-0 z-[2]`,\n                                    TextAreaClasses,\n                                )}\n                                style={{\n                                    color: textColor,\n                                    fontSize: `${textSize}px`,\n                                    minHeight: `${textSize}px`,\n                                }}\n                                autoFocus={editingAnnotation === annotation.id && canContainText}\n                                onChange={(e) => {\n                                    // Update the annotation text immediately on change\n                                    if (editingAnnotation === annotation.id) {\n                                        // Find the current annotation with all its properties\n                                        const currentAnn = annotations.find((a) => a.id === annotation.id);\n                                        if (!currentAnn) return;\n\n                                        const updatedAnnotation = {\n                                            ...currentAnn,\n                                            text: {\n                                                ...currentAnn.text,\n                                                value: e.target.value,\n                                            },\n                                        };\n\n                                        // Update annotations array\n                                        setAnnotations((prev) => prev.map((a) => (a.id === annotation.id ? updatedAnnotation : a)));\n\n                                        // Also update currentAnnotation if this is the currently selected annotation\n                                        if (currentAnnotation?.id === annotation.id) {\n                                            setCurrentAnnotation(updatedAnnotation);\n                                        }\n                                    }\n                                }}\n                                onBlur={() => setEditingAnnotation(null)}\n                            />\n\n                            {/* Delete button positioned relative to container */}\n                            {isSelected && (\n                                <Button\n                                    size='icon'\n                                    onClick={() => deleteAnnotation(annotation.id)}\n                                    className='absolute -top-3 -right-3 size-max cursor-copy'\n                                >\n                                    <X className='size-3' />\n                                </Button>\n                            )}\n                        </div>\n                    );\n                })}\n            </div>\n        </>\n    );\n}\n","'use client';\n\nimport * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\nfunction DropdownMenu({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n  return <DropdownMenuPrimitive.Root data-slot='dropdown-menu' {...props} />;\n}\n\nfunction DropdownMenuPortal({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n  return (\n    <DropdownMenuPrimitive.Portal data-slot='dropdown-menu-portal' {...props} />\n  );\n}\n\nfunction DropdownMenuTrigger({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n  return (\n    <DropdownMenuPrimitive.Trigger\n      data-slot='dropdown-menu-trigger'\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuContent({\n  className,\n  sideOffset = 4,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n  return (\n    <DropdownMenuPrimitive.Portal>\n      <DropdownMenuPrimitive.Content\n        data-slot='dropdown-menu-content'\n        sideOffset={sideOffset}\n        className={cn(\n          'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md',\n          className\n        )}\n        {...props}\n      />\n    </DropdownMenuPrimitive.Portal>\n  );\n}\n\nfunction DropdownMenuGroup({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n  return (\n    <DropdownMenuPrimitive.Group data-slot='dropdown-menu-group' {...props} />\n  );\n}\n\nfunction DropdownMenuItem({\n  className,\n  inset,\n  variant = 'default',\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n  inset?: boolean\n  variant?: 'default' | 'destructive'\n}) {\n  return (\n    <DropdownMenuPrimitive.Item\n      data-slot='dropdown-menu-item'\n      data-inset={inset}\n      data-variant={variant}\n      className={cn(\n        \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        className\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuCheckboxItem({\n  className,\n  children,\n  checked,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n  return (\n    <DropdownMenuPrimitive.CheckboxItem\n      data-slot='dropdown-menu-checkbox-item'\n      className={cn(\n        \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        className\n      )}\n      checked={checked}\n      {...props}\n    >\n      <span className='pointer-events-none absolute left-2 flex size-3.5 items-center justify-center'>\n        <DropdownMenuPrimitive.ItemIndicator>\n          <CheckIcon className='size-4' />\n        </DropdownMenuPrimitive.ItemIndicator>\n      </span>\n      {children}\n    </DropdownMenuPrimitive.CheckboxItem>\n  );\n}\n\nfunction DropdownMenuRadioGroup({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n  return (\n    <DropdownMenuPrimitive.RadioGroup\n      data-slot='dropdown-menu-radio-group'\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuRadioItem({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n  return (\n    <DropdownMenuPrimitive.RadioItem\n      data-slot='dropdown-menu-radio-item'\n      className={cn(\n        \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        className\n      )}\n      {...props}\n    >\n      <span className='pointer-events-none absolute left-2 flex size-3.5 items-center justify-center'>\n        <DropdownMenuPrimitive.ItemIndicator>\n          <CircleIcon className='size-2 fill-current' />\n        </DropdownMenuPrimitive.ItemIndicator>\n      </span>\n      {children}\n    </DropdownMenuPrimitive.RadioItem>\n  );\n}\n\nfunction DropdownMenuLabel({\n  className,\n  inset,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n  inset?: boolean\n}) {\n  return (\n    <DropdownMenuPrimitive.Label\n      data-slot='dropdown-menu-label'\n      data-inset={inset}\n      className={cn(\n        'px-2 py-1.5 text-sm font-medium data-[inset]:pl-8',\n        className\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuSeparator({\n  className,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n  return (\n    <DropdownMenuPrimitive.Separator\n      data-slot='dropdown-menu-separator'\n      className={cn('bg-border -mx-1 my-1 h-px', className)}\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuShortcut({\n  className,\n  ...props\n}: React.ComponentProps<'span'>) {\n  return (\n    <span\n      data-slot='dropdown-menu-shortcut'\n      className={cn(\n        'text-muted-foreground ml-auto text-xs tracking-widest',\n        className\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction DropdownMenuSub({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n  return <DropdownMenuPrimitive.Sub data-slot='dropdown-menu-sub' {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n  className,\n  inset,\n  children,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n  inset?: boolean\n}) {\n  return (\n    <DropdownMenuPrimitive.SubTrigger\n      data-slot='dropdown-menu-sub-trigger'\n      data-inset={inset}\n      className={cn(\n        'focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8',\n        className\n      )}\n      {...props}\n    >\n      {children}\n      <ChevronRightIcon className='ml-auto size-4' />\n    </DropdownMenuPrimitive.SubTrigger>\n  );\n}\n\nfunction DropdownMenuSubContent({\n  className,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n  return (\n    <DropdownMenuPrimitive.SubContent\n      data-slot='dropdown-menu-sub-content'\n      className={cn(\n        'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg',\n        className\n      )}\n      {...props}\n    />\n  );\n}\n\nexport {\n  DropdownMenu,\n  DropdownMenuPortal,\n  DropdownMenuTrigger,\n  DropdownMenuContent,\n  DropdownMenuGroup,\n  DropdownMenuLabel,\n  DropdownMenuItem,\n  DropdownMenuCheckboxItem,\n  DropdownMenuRadioGroup,\n  DropdownMenuRadioItem,\n  DropdownMenuSeparator,\n  DropdownMenuShortcut,\n  DropdownMenuSub,\n  DropdownMenuSubTrigger,\n  DropdownMenuSubContent,\n};\n","import React from \"react\";\nexport var DefaultContext = {\n  color: undefined,\n  size: undefined,\n  className: undefined,\n  style: undefined,\n  attr: undefined\n};\nexport var IconContext = React.createContext && /*#__PURE__*/React.createContext(DefaultContext);","var _excluded = [\"attr\", \"size\", \"title\"];\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } } return target; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React from \"react\";\nimport { IconContext, DefaultContext } from \"./iconContext.mjs\";\nfunction Tree2Element(tree) {\n  return tree && tree.map((node, i) => /*#__PURE__*/React.createElement(node.tag, _objectSpread({\n    key: i\n  }, node.attr), Tree2Element(node.child)));\n}\nexport function GenIcon(data) {\n  return props => /*#__PURE__*/React.createElement(IconBase, _extends({\n    attr: _objectSpread({}, data.attr)\n  }, props), Tree2Element(data.child));\n}\nexport function IconBase(props) {\n  var elem = conf => {\n    var {\n        attr,\n        size,\n        title\n      } = props,\n      svgProps = _objectWithoutProperties(props, _excluded);\n    var computedSize = size || conf.size || \"1em\";\n    var className;\n    if (conf.className) className = conf.className;\n    if (props.className) className = (className ? className + \" \" : \"\") + props.className;\n    return /*#__PURE__*/React.createElement(\"svg\", _extends({\n      stroke: \"currentColor\",\n      fill: \"currentColor\",\n      strokeWidth: \"0\"\n    }, conf.attr, attr, svgProps, {\n      className: className,\n      style: _objectSpread(_objectSpread({\n        color: props.color || conf.color\n      }, conf.style), props.style),\n      height: computedSize,\n      width: computedSize,\n      xmlns: \"http://www.w3.org/2000/svg\"\n    }), title && /*#__PURE__*/React.createElement(\"title\", null, title), props.children);\n  };\n  return IconContext !== undefined ? /*#__PURE__*/React.createElement(IconContext.Consumer, null, conf => elem(conf)) : elem(DefaultContext);\n}","// THIS FILE IS AUTO GENERATED\nimport { GenIcon } from '../lib/index.mjs';\nexport function CiAirportSign1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Airport_Sign_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M13.105,12.609v2.279a.119.119,0,0,0,.061.105l.622.355a.49.49,0,0,1,.242.365l.049.413a.243.243,0,0,1-.307.263l-1.641-.459a.486.486,0,0,0-.262,0l-1.641.459a.244.244,0,0,1-.308-.263l.05-.413a.487.487,0,0,1,.242-.365l.621-.355a.12.12,0,0,0,.062-.105V12.609a.122.122,0,0,0-.137-.121l-3.485.435A.242.242,0,0,1,7,12.682v-.624a.486.486,0,0,1,.316-.455l3.5-1.313a.122.122,0,0,0,.079-.114V9.435a4.756,4.756,0,0,1,.1-.981h0a1.015,1.015,0,0,1,1.2-.833,1.063,1.063,0,0,1,.819.9l.015.094a6.3,6.3,0,0,1,.077.976v.587a.121.121,0,0,0,.079.114l3.5,1.313a.486.486,0,0,1,.316.455v.624a.243.243,0,0,1-.274.241l-3.484-.435A.121.121,0,0,0,13.105,12.609Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.933A9.933,9.933,0,1,1,21.933,12,9.944,9.944,0,0,1,12,21.933ZM12,3.067A8.933,8.933,0,1,0,20.933,12,8.943,8.943,0,0,0,12,3.067Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiAlarmOff (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Alarm_Off\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4.564,3.856a.5.5,0,0,0-.7.71l.29.29-.5.5a2.019,2.019,0,0,0-.01,2.85l.65.67a8.273,8.273,0,0,0-.71,3.39A8.427,8.427,0,0,0,12,20.686a8.275,8.275,0,0,0,5.72-2.26c.57.57,1.14,1.15,1.71,1.71a.5.5,0,0,0,.71-.7Zm-.21,2.21.51-.5c.32.33.65.65.98.98a6.38,6.38,0,0,0-1.06,1.4l-.43-.44A1.032,1.032,0,0,1,4.354,6.066ZM12,19.686a7.43,7.43,0,0,1-7.42-7.42,7.312,7.312,0,0,1,1.96-5.02l2.59,2.59q3.945,3.945,7.88,7.88A7.27,7.27,0,0,1,12,19.686Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.354,8.216a2.04,2.04,0,0,0,0-2.86l-1.46-1.45a2.01,2.01,0,0,0-2.85,0l-.68.67a8.528,8.528,0,0,0-6.38-.17c-.6.23-.34,1.19.27.97a7.419,7.419,0,0,1,9.64,9.64c-.22.6.74.86.97.26a8.506,8.506,0,0,0-.17-6.39Zm-2.4-1.9a8.068,8.068,0,0,0-1.65-1.27l.44-.43a1.026,1.026,0,0,1,1.45,0l1.45,1.45a1.014,1.014,0,0,1,0,1.44l-.43.44A8.262,8.262,0,0,0,17.954,6.316Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiAlarmOn (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Alarm_On\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.352,8.213a2.017,2.017,0,0,0,0-2.851L18.9,3.9a2.038,2.038,0,0,0-2.86,0l-.67.659A8.238,8.238,0,0,0,12,3.852a8.332,8.332,0,0,0-3.39.71L7.962,3.9a2.038,2.038,0,0,0-2.86,0L3.652,5.362a2.02,2.02,0,0,0-.01,2.851l.65.67a8.419,8.419,0,1,0,16.13,3.39,8.4,8.4,0,0,0-.72-3.411ZM4.362,6.062l1.45-1.45a1.016,1.016,0,0,1,1.44,0l.44.43a8.427,8.427,0,0,0-2.91,2.9l-.42-.43A1.027,1.027,0,0,1,4.362,6.062ZM12,19.682a7.415,7.415,0,1,1,7.42-7.409A7.421,7.421,0,0,1,12,19.682Zm7.22-11.75a8.578,8.578,0,0,0-2.91-2.89l.44-.43a1.016,1.016,0,0,1,1.44,0l1.45,1.45a1.027,1.027,0,0,1,0,1.451Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M17.042,12.763H12a.455.455,0,0,1-.27-.081c-.03-.02-.05-.039-.07-.049a.442.442,0,0,1-.16-.36V7.232a.5.5,0,0,1,1,0v4.531h4.54A.5.5,0,0,1,17.042,12.763Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiAlignBottom (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Align_Bottom\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3.548,20.922h16.9a.5.5,0,0,0,0-1H3.548a.5.5,0,0,0,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M9,18.919H6.565a2.5,2.5,0,0,1-2.5-2.5V5.578a2.5,2.5,0,0,1,2.5-2.5H9a2.5,2.5,0,0,1,2.5,2.5V16.419A2.5,2.5,0,0,1,9,18.919ZM6.565,4.078a1.5,1.5,0,0,0-1.5,1.5V16.419a1.5,1.5,0,0,0,1.5,1.5H9a1.5,1.5,0,0,0,1.5-1.5V5.578A1.5,1.5,0,0,0,9,4.078Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M17.437,18.919H15a2.5,2.5,0,0,1-2.5-2.5V10.55A2.5,2.5,0,0,1,15,8.05h2.434a2.5,2.5,0,0,1,2.5,2.5v5.869A2.5,2.5,0,0,1,17.437,18.919ZM15,9.05a1.5,1.5,0,0,0-1.5,1.5v5.869a1.5,1.5,0,0,0,1.5,1.5h2.434a1.5,1.5,0,0,0,1.5-1.5V10.55a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiAlignCenterH (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Align_Center-H\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.42,4.062H12.5v-.51a.5.5,0,0,0-1,0v.51H6.58a2.507,2.507,0,0,0-2.5,2.5V9a2.5,2.5,0,0,0,2.5,2.5H11.5v1H9.06A2.507,2.507,0,0,0,6.56,15v2.44a2.507,2.507,0,0,0,2.5,2.5H11.5v.51a.5.5,0,0,0,1,0v-.51h2.43a2.5,2.5,0,0,0,2.5-2.5V15a2.5,2.5,0,0,0-2.5-2.5H12.5v-1h4.92A2.5,2.5,0,0,0,19.92,9V6.562A2.507,2.507,0,0,0,17.42,4.062ZM11.5,18.942H9.06a1.511,1.511,0,0,1-1.5-1.5V15a1.5,1.5,0,0,1,1.5-1.5H11.5Zm0-8.44H6.58A1.5,1.5,0,0,1,5.08,9V6.562a1.5,1.5,0,0,1,1.5-1.5H11.5Zm3.43,3a1.5,1.5,0,0,1,1.5,1.5v2.44a1.5,1.5,0,0,1-1.5,1.5H12.5V13.5ZM18.92,9a1.5,1.5,0,0,1-1.5,1.5H12.5V5.062h4.92a1.5,1.5,0,0,1,1.5,1.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiAlignCenterV (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Align_Center-V\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.446,11.5h-.51V9.07a2.5,2.5,0,0,0-2.5-2.5h-2.43a2.5,2.5,0,0,0-2.5,2.5V11.5H11.5V6.58A2.5,2.5,0,0,0,9,4.08H6.566a2.5,2.5,0,0,0-2.5,2.5V11.5h-.52a.5.5,0,0,0,0,1h.52v4.92a2.5,2.5,0,0,0,2.5,2.5H9a2.5,2.5,0,0,0,2.5-2.5V12.5h1.01v2.43a2.5,2.5,0,0,0,2.5,2.5h2.43a2.5,2.5,0,0,0,2.5-2.5V12.5h.51A.5.5,0,0,0,20.446,11.5ZM10.5,17.42A1.5,1.5,0,0,1,9,18.92H6.566a1.5,1.5,0,0,1-1.5-1.5V12.5H10.5Zm0-5.92H5.066V6.58a1.5,1.5,0,0,1,1.5-1.5H9a1.5,1.5,0,0,1,1.5,1.5Zm8.44,3.43a1.5,1.5,0,0,1-1.5,1.5h-2.43a1.5,1.5,0,0,1-1.5-1.5V12.5h5.43Zm0-3.43h-5.43V9.07a1.5,1.5,0,0,1,1.5-1.5h2.43a1.5,1.5,0,0,1,1.5,1.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiAlignLeft (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Align_Left\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3.078,3.548v16.9a.5.5,0,0,0,1,0V3.548a.5.5,0,0,0-1,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.422,11.5H7.582A2.5,2.5,0,0,1,5.082,9V6.565a2.5,2.5,0,0,1,2.5-2.5h10.84a2.5,2.5,0,0,1,2.5,2.5V9A2.5,2.5,0,0,1,18.422,11.5ZM7.582,5.065a1.5,1.5,0,0,0-1.5,1.5V9a1.5,1.5,0,0,0,1.5,1.5h10.84a1.5,1.5,0,0,0,1.5-1.5V6.565a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13.451,19.938H7.582a2.5,2.5,0,0,1-2.5-2.5V15a2.5,2.5,0,0,1,2.5-2.5h5.869a2.5,2.5,0,0,1,2.5,2.5v2.436A2.5,2.5,0,0,1,13.451,19.938ZM7.582,13.5a1.5,1.5,0,0,0-1.5,1.5v2.436a1.5,1.5,0,0,0,1.5,1.5h5.869a1.5,1.5,0,0,0,1.5-1.5V15a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiAlignRight (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Align_Right\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.922,3.548v16.9a.5.5,0,0,0,1,0V3.548a.5.5,0,0,0-1,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.419,11.5H5.578A2.5,2.5,0,0,1,3.078,9V6.565a2.5,2.5,0,0,1,2.5-2.5H16.419a2.5,2.5,0,0,1,2.5,2.5V9A2.5,2.5,0,0,1,16.419,11.5ZM5.578,5.065a1.5,1.5,0,0,0-1.5,1.5V9a1.5,1.5,0,0,0,1.5,1.5H16.419a1.5,1.5,0,0,0,1.5-1.5V6.565a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.419,19.938H10.55a2.5,2.5,0,0,1-2.5-2.5V15a2.5,2.5,0,0,1,2.5-2.5h5.869a2.5,2.5,0,0,1,2.5,2.5v2.436A2.5,2.5,0,0,1,16.419,19.938ZM10.55,13.5A1.5,1.5,0,0,0,9.05,15v2.436a1.5,1.5,0,0,0,1.5,1.5h5.869a1.5,1.5,0,0,0,1.5-1.5V15a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiAlignTop (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Align_Top\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3.548,4.078h16.9a.5.5,0,0,0,0-1H3.548a.5.5,0,0,0,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M9,20.922H6.565a2.5,2.5,0,0,1-2.5-2.5V7.582a2.5,2.5,0,0,1,2.5-2.5H9a2.5,2.5,0,0,1,2.5,2.5v10.84A2.5,2.5,0,0,1,9,20.922ZM6.565,6.082a1.5,1.5,0,0,0-1.5,1.5v10.84a1.5,1.5,0,0,0,1.5,1.5H9a1.5,1.5,0,0,0,1.5-1.5V7.582A1.5,1.5,0,0,0,9,6.082Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M17.438,15.951H15a2.5,2.5,0,0,1-2.5-2.5V7.582a2.5,2.5,0,0,1,2.5-2.5h2.435a2.5,2.5,0,0,1,2.5,2.5v5.869A2.5,2.5,0,0,1,17.438,15.951ZM15,6.082a1.5,1.5,0,0,0-1.5,1.5v5.869a1.5,1.5,0,0,0,1.5,1.5h2.435a1.5,1.5,0,0,0,1.5-1.5V7.582a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiApple (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Apple\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14.875,6.612l.05-.05a3.229,3.229,0,0,0,.95-2.58.976.976,0,0,0-.9-.9,3.229,3.229,0,0,0-2.58.95,3.279,3.279,0,0,0-.85,1.46,4.661,4.661,0,0,0-2.69-1.75.5.5,0,1,0-.22.98,3.664,3.664,0,0,1,2.59,2.2,5.577,5.577,0,0,0-1.9-.32,5.847,5.847,0,0,0-5.84,5.84c0,2.98,2.41,8.49,5.84,8.49a5.821,5.821,0,0,0,2.4-.52.683.683,0,0,1,.56,0,5.73,5.73,0,0,0,2.38.52c3.44,0,5.85-5.51,5.85-8.49A5.838,5.838,0,0,0,14.875,6.612Zm-1.77-1.87a2.3,2.3,0,0,1,1.78-.68c0,.06.01.12.01.17a2.326,2.326,0,0,1-.67,1.63,2.359,2.359,0,0,1-1.79.66A2.247,2.247,0,0,1,13.105,4.742Zm1.56,15.19a4.787,4.787,0,0,1-1.97-.43,1.718,1.718,0,0,0-.69-.15,1.649,1.649,0,0,0-.69.15,4.879,4.879,0,0,1-1.99.43c-2.58,0-4.84-4.67-4.84-7.49a4.855,4.855,0,0,1,6.83-4.42,1.56,1.56,0,0,0,.67.15h.02a1.683,1.683,0,0,0,.69-.15,4.777,4.777,0,0,1,1.97-.42,4.852,4.852,0,0,1,4.85,4.84C19.515,15.262,17.245,19.932,14.665,19.932Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiAt (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"At\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12.09,21.925a9.846,9.846,0,0,1-3.838-.747A9.673,9.673,0,0,1,3.005,15.93,10.034,10.034,0,0,1,2.244,12a10.425,10.425,0,0,1,.695-3.8,9.606,9.606,0,0,1,2-3.169A9.269,9.269,0,0,1,8.1,2.862a10.605,10.605,0,0,1,4.175-.787,10.516,10.516,0,0,1,4.334.827A8.437,8.437,0,0,1,19.64,5.119a8.622,8.622,0,0,1,1.707,3.1,9.263,9.263,0,0,1,.377,3.487,5.809,5.809,0,0,1-1.3,3.6A3.6,3.6,0,0,1,17.7,16.473a3.628,3.628,0,0,1-2.162-.609,2.82,2.82,0,0,1-1.119-1.694l.5.106a2.582,2.582,0,0,1-1.3,1.3A4.37,4.37,0,0,1,11.746,16,3.681,3.681,0,0,1,9.88,15.54a3.2,3.2,0,0,1-1.237-1.271A3.843,3.843,0,0,1,8.2,12.4a3.88,3.88,0,0,1,.456-1.926A3.191,3.191,0,0,1,9.919,9.214a3.792,3.792,0,0,1,1.853-.443,4.716,4.716,0,0,1,1.767.364,2.622,2.622,0,0,1,1.383,1.3l-.5.5V9.461a.4.4,0,0,1,.4-.4h.232a.4.4,0,0,1,.4.4v3.518a2.723,2.723,0,0,0,.529,1.674,2.173,2.173,0,0,0,1.853.708,2.281,2.281,0,0,0,1.323-.41,2.938,2.938,0,0,0,.967-1.178,4.947,4.947,0,0,0,.437-1.852,9.439,9.439,0,0,0-.417-3.574A7.285,7.285,0,0,0,18.5,5.588a7.424,7.424,0,0,0-2.679-1.78,9.605,9.605,0,0,0-3.547-.622,9.041,9.041,0,0,0-3.758.741,8.252,8.252,0,0,0-2.773,2,8.8,8.8,0,0,0-1.72,2.838,9.27,9.27,0,0,0-.589,3.262,8.568,8.568,0,0,0,.682,3.408A8.951,8.951,0,0,0,6,18.24a8.707,8.707,0,0,0,2.785,1.892,8.515,8.515,0,0,0,3.389.682,9.851,9.851,0,0,0,2.679-.378,8.451,8.451,0,0,0,2-.831.4.4,0,0,1,.553.158l.1.192a.4.4,0,0,1-.141.526,9.832,9.832,0,0,1-2.391,1.04A10.5,10.5,0,0,1,12.09,21.925ZM11.8,14.859a2.469,2.469,0,0,0,1.786-.649,2.427,2.427,0,0,0,.675-1.839,2.414,2.414,0,0,0-.7-1.886A2.532,2.532,0,0,0,11.8,9.856a2.482,2.482,0,0,0-1.839.649,2.523,2.523,0,0,0-.65,1.866,2.4,2.4,0,0,0,.682,1.865A2.574,2.574,0,0,0,11.8,14.859Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiAvocado (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Avocado\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M11.982,21.939a7.759,7.759,0,0,1-.818-.044A7.58,7.58,0,0,1,6.1,9.6a3.578,3.578,0,0,0,.684-2.271,5.128,5.128,0,0,1,3.8-5.085,5.266,5.266,0,0,1,4.6.892,5.185,5.185,0,0,1,2.039,4.14A3.6,3.6,0,0,0,17.9,9.61a7.574,7.574,0,0,1-5.918,12.329Zm.009-18.877a4.538,4.538,0,0,0-1.158.152,4.126,4.126,0,0,0-3.055,4.07,4.532,4.532,0,0,1-.9,2.947,6.555,6.555,0,0,0-1.366,5.231A6.643,6.643,0,0,0,11.271,20.9a6.575,6.575,0,0,0,5.851-10.662,4.453,4.453,0,0,1-.9-2.9,4.214,4.214,0,0,0-4.228-4.273Z\"},\"child\":[]},{\"tag\":\"ellipse\",\"attr\":{\"cx\":\"11.999\",\"cy\":\"14.856\",\"rx\":\"2.5\",\"ry\":\"3\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiBacon (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bacon\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.605,7.455l-3.49-3.49a.8.8,0,0,0-1.08-.04,1.833,1.833,0,0,1-.93.37,3.787,3.787,0,0,0-2.21,1.12,3.918,3.918,0,0,0-1.13,2.22,1.681,1.681,0,0,1-.53,1.1,1.753,1.753,0,0,1-1.1.53,4.026,4.026,0,0,0-3.35,3.35,1.677,1.677,0,0,1-.53,1.1,1.721,1.721,0,0,1-1.11.53,4.041,4.041,0,0,0-1.62.63,1.1,1.1,0,0,0-.14,1.66l3.5,3.5a.781.781,0,0,0,.55.23.822.822,0,0,0,.53-.19,1.759,1.759,0,0,1,.93-.38,3.8,3.8,0,0,0,2.21-1.12,3.948,3.948,0,0,0,1.14-2.22,1.71,1.71,0,0,1,.52-1.1,1.776,1.776,0,0,1,1.11-.53,4.03,4.03,0,0,0,3.34-3.35,1.66,1.66,0,0,1,.53-1.1,1.721,1.721,0,0,1,1.11-.53,4.018,4.018,0,0,0,1.61-.62,1.091,1.091,0,0,0,.14-1.67ZM4.1,15.7a3.15,3.15,0,0,1,1.24-.47,2.635,2.635,0,0,0,1.63-.81,2.587,2.587,0,0,0,.8-1.61,2.852,2.852,0,0,1,.86-1.7,2.9,2.9,0,0,1,1.7-.86,2.745,2.745,0,0,0,1.62-.8,2.687,2.687,0,0,0,.8-1.62,2.9,2.9,0,0,1,.86-1.7,2.814,2.814,0,0,1,1.69-.85,2.819,2.819,0,0,0,1.24-.48l1.3,1.3a2.362,2.362,0,0,1-.98.35,3.515,3.515,0,0,0-2.95,2.95,2.136,2.136,0,0,1-.67,1.36,2.159,2.159,0,0,1-1.36.67,3.44,3.44,0,0,0-1.96.99,3.351,3.351,0,0,0-.98,1.96,2.355,2.355,0,0,1-2.03,2.03,3.242,3.242,0,0,0-1.58.66L4.1,15.835ZM19.9,8.3a3.059,3.059,0,0,1-1.23.47,2.659,2.659,0,0,0-1.63.81,2.587,2.587,0,0,0-.8,1.61,2.852,2.852,0,0,1-.86,1.7,2.883,2.883,0,0,1-1.69.86,2.812,2.812,0,0,0-2.43,2.42,2.878,2.878,0,0,1-.86,1.7,2.8,2.8,0,0,1-1.68.85,2.808,2.808,0,0,0-1.25.48l-1.3-1.29a2.423,2.423,0,0,1,.97-.35,3.377,3.377,0,0,0,1.96-.99,3.44,3.44,0,0,0,.99-1.96,2.217,2.217,0,0,1,.66-1.36,2.292,2.292,0,0,1,1.36-.67,3.317,3.317,0,0,0,1.96-.99,3.351,3.351,0,0,0,.99-1.96,2.355,2.355,0,0,1,2.03-2.03,3.479,3.479,0,0,0,1.59-.66l1.23,1.23Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiBadgeDollar (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Badge_Dollar\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.953c-.895,0-1.545-.743-2.118-1.4a3.671,3.671,0,0,0-1.033-.946,3.8,3.8,0,0,0-1.466-.077,3.012,3.012,0,0,1-2.421-.494,3.014,3.014,0,0,1-.494-2.421,3.82,3.82,0,0,0-.077-1.466,3.671,3.671,0,0,0-.946-1.033c-.655-.573-1.4-1.222-1.4-2.118s.743-1.545,1.4-2.118a3.66,3.66,0,0,0,.946-1.034,3.815,3.815,0,0,0,.077-1.465,3.012,3.012,0,0,1,.494-2.421,3.015,3.015,0,0,1,2.422-.5A3.794,3.794,0,0,0,8.849,4.39a3.666,3.666,0,0,0,1.033-.945c.573-.655,1.223-1.4,2.118-1.4s1.545.742,2.118,1.4a3.66,3.66,0,0,0,1.034.946,3.807,3.807,0,0,0,1.464.077,3.018,3.018,0,0,1,2.422.5,3.012,3.012,0,0,1,.5,2.422,3.81,3.81,0,0,0,.077,1.464,3.66,3.66,0,0,0,.946,1.034c.655.573,1.4,1.223,1.4,2.118s-.743,1.545-1.4,2.118a3.666,3.666,0,0,0-.945,1.033,3.815,3.815,0,0,0-.077,1.465,3.012,3.012,0,0,1-.5,2.422,3.018,3.018,0,0,1-2.421.494,3.818,3.818,0,0,0-1.465.077,3.673,3.673,0,0,0-1.034.946C13.545,21.21,12.9,21.953,12,21.953ZM8.093,18.5a2.952,2.952,0,0,1,1.138.183,4.233,4.233,0,0,1,1.4,1.21c.454.52.924,1.057,1.365,1.057s.911-.537,1.366-1.057a4.225,4.225,0,0,1,1.4-1.21,4.365,4.365,0,0,1,1.908-.152c.672.041,1.366.085,1.653-.2s.245-.982.2-1.653a4.387,4.387,0,0,1,.152-1.909,4.241,4.241,0,0,1,1.209-1.4c.52-.454,1.057-.924,1.057-1.365s-.537-.911-1.057-1.365a4.234,4.234,0,0,1-1.209-1.4,4.381,4.381,0,0,1-.152-1.908c.041-.671.084-1.365-.2-1.653s-.982-.246-1.653-.2a4.384,4.384,0,0,1-1.908-.152,4.234,4.234,0,0,1-1.4-1.209c-.454-.52-.924-1.057-1.365-1.057s-.911.537-1.365,1.057a4.241,4.241,0,0,1-1.4,1.209,4.417,4.417,0,0,1-1.909.152c-.67-.041-1.364-.084-1.653.2s-.244.981-.2,1.652A4.37,4.37,0,0,1,5.314,9.23a4.226,4.226,0,0,1-1.21,1.4c-.52.454-1.057.925-1.057,1.365s.537.911,1.057,1.366a4.238,4.238,0,0,1,1.21,1.4,4.378,4.378,0,0,1,.152,1.91c-.041.672-.084,1.366.2,1.653s.98.245,1.653.2C7.578,18.519,7.838,18.5,8.093,18.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.5,13.5a2.006,2.006,0,0,1-2,2v1.01A.5.5,0,0,1,12,17a.492.492,0,0,1-.5-.49V15.5h-1.25a.5.5,0,0,1-.5-.5.5.5,0,0,1,.5-.5H12.5a1,1,0,1,0,0-2h-1a2,2,0,0,1,0-4V7.453A.473.473,0,0,1,12,7a.48.48,0,0,1,.5.45V8.5h1.25a.5.5,0,0,1,.5.5.508.508,0,0,1-.5.5H11.5a1,1,0,0,0,0,2h1A2,2,0,0,1,14.5,13.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiBag1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bag_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.37,17.65a16.777,16.777,0,0,0-2.01-5.54,17.037,17.037,0,0,0-3.74-4.55l-.1-.08a.121.121,0,0,1-.02-.15l1.49-2.59a1.12,1.12,0,0,0,0-1.12,1.092,1.092,0,0,0-.97-.55H8.98a1.1,1.1,0,0,0-.97.55,1.12,1.12,0,0,0,0,1.12l1.5,2.59a.124.124,0,0,1-.03.15l-.09.08A17.327,17.327,0,0,0,3.63,17.65a4.051,4.051,0,0,0-.04.48,2.8,2.8,0,0,0,2.8,2.8H17.62a2.782,2.782,0,0,0,2.13-.99A2.834,2.834,0,0,0,20.37,17.65ZM8.88,4.24a.1.1,0,0,1,0-.12.106.106,0,0,1,.1-.05h6.04a.143.143,0,0,1,.11.05.163.163,0,0,1,0,.12l-1.59,2.8H10.46Zm5.09,4.08a16.436,16.436,0,0,1,5.42,9.5,1.817,1.817,0,0,1-.4,1.47,1.786,1.786,0,0,1-1.37.64H6.39a1.805,1.805,0,0,1-1.8-1.8,1.628,1.628,0,0,1,.03-.31,16.286,16.286,0,0,1,5.42-9.5l.32-.28h3.28Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiBandage (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bandage\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.435,7.5H6.565a4.5,4.5,0,0,0,0,9h10.87a4.5,4.5,0,0,0,0-9Zm-9.93,8h-.94a3.5,3.5,0,0,1,0-7h.94Zm8,0h-7v-7h7Zm1.93,0h-.93v-7h.93a3.5,3.5,0,0,1,0,7Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"10.252\",\"cy\":\"10.501\",\"r\":\"0.625\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"10.252\",\"cy\":\"13.501\",\"r\":\"0.625\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"13.752\",\"cy\":\"10.5\",\"r\":\"0.625\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"13.752\",\"cy\":\"13.5\",\"r\":\"0.625\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiBank (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bank\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.505,17.943V10.362a1.491,1.491,0,0,0,1.39-1.12,1.468,1.468,0,0,0-.7-1.68l-7.45-4.3a1.521,1.521,0,0,0-1.49,0l-7.45,4.3a1.468,1.468,0,0,0-.7,1.68,1.487,1.487,0,0,0,1.45,1.12h.13v7.57h-.12a1.5,1.5,0,0,0,0,3h14.87a1.5,1.5,0,0,0,.07-2.989ZM4.555,9.362a.505.505,0,0,1-.25-.94l7.45-4.289a.474.474,0,0,1,.49,0L19.7,8.422a.5.5,0,0,1-.25.94Zm13.95,1v7.57H14.9v-7.57Zm-4.61,0v7.57h-3.61v-7.57Zm-4.61,0v7.57h-3.6v-7.57Zm10.15,9.57H4.565a.5.5,0,0,1-.5-.5.5.5,0,0,1,.5-.5h14.87a.5.5,0,0,1,.5.5A.5.5,0,0,1,19.435,19.932Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiBarcode (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Barcode\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M8.066,4.065H3.648a1.732,1.732,0,0,0-.963.189A1.368,1.368,0,0,0,2.066,5.48v4.585a.5.5,0,0,0,1,0V5.785a1.794,1.794,0,0,1,.014-.518c.077-.236.319-.2.514-.2H8.066a.5.5,0,0,0,0-1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M2.063,13.937v4.418a1.733,1.733,0,0,0,.189.963,1.369,1.369,0,0,0,1.227.619H8.063a.5.5,0,0,0,0-1H3.783a1.831,1.831,0,0,1-.518-.014c-.236-.077-.2-.319-.2-.514V13.937a.5.5,0,0,0-1,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15.934,19.935h4.418a1.732,1.732,0,0,0,.963-.189,1.368,1.368,0,0,0,.619-1.226V13.935a.5.5,0,0,0-1,0v4.28a1.794,1.794,0,0,1-.014.518c-.077.236-.319.2-.514.2H15.934a.5.5,0,0,0,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21.937,10.063V5.645a1.733,1.733,0,0,0-.189-.963,1.369,1.369,0,0,0-1.227-.619H15.937a.5.5,0,0,0,0,1h4.28a1.831,1.831,0,0,1,.518.014c.236.077.2.319.2.514v4.472a.5.5,0,0,0,1,0Z\"},\"child\":[]},{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"10.999\",\"y\":\"7.643\",\"width\":\"1\",\"height\":\"8.709\",\"rx\":\"0.5\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"14.249\",\"y\":\"7.643\",\"width\":\"1\",\"height\":\"8.709\",\"rx\":\"0.5\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"16.499\",\"y\":\"7.643\",\"width\":\"1\",\"height\":\"8.709\",\"rx\":\"0.5\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"6.499\",\"y\":\"7.643\",\"width\":\"1\",\"height\":\"8.709\",\"rx\":\"0.5\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"8.499\",\"y\":\"7.643\",\"width\":\"1.5\",\"height\":\"8.709\",\"rx\":\"0.75\"},\"child\":[]}]}]}]}]})(props);\n};\nexport function CiBaseball (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Baseball_Ball\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.02,4.976A9.927,9.927,0,1,0,15.74,21.2,9.908,9.908,0,0,0,21.93,12,9.856,9.856,0,0,0,19.02,4.976Zm-13.34.71a8.9,8.9,0,0,1,6.04-2.61,8.461,8.461,0,0,1-.34,2.26l-.34-.19a.5.5,0,0,0-.5.86l.5.29a9.227,9.227,0,0,1-1.57,2.47l-.35-.35a.5.5,0,0,0-.7,0,.5.5,0,0,0,0,.71l.34.34a8.875,8.875,0,0,1-2.47,1.58L6,10.536a.5.5,0,0,0-.68-.19.505.505,0,0,0-.18.69l.2.34a8.2,8.2,0,0,1-2.26.35A8.827,8.827,0,0,1,5.68,5.686ZM11.74,17a.5.5,0,1,0-.5.87l.49.29a10.008,10.008,0,0,0-.45,2.74,8.9,8.9,0,0,1-8.18-8.17,9.378,9.378,0,0,0,2.75-.46l.29.5a.5.5,0,0,0,.43.25.475.475,0,0,0,.25-.07.493.493,0,0,0,.18-.68l-.21-.36a9.461,9.461,0,0,0,2.68-1.73l.36.36a.5.5,0,0,0,.35.15.508.508,0,0,0,.36-.15.513.513,0,0,0,0-.71l-.36-.36A9.665,9.665,0,0,0,11.9,6.8l.37.21a.475.475,0,0,0,.25.07.511.511,0,0,0,.44-.25.494.494,0,0,0-.19-.68l-.51-.29a9.789,9.789,0,0,0,.46-2.76,8.924,8.924,0,0,1,8.18,8.18,10.08,10.08,0,0,0-2.74.46l-.28-.49a.505.505,0,0,0-.69-.18.491.491,0,0,0-.18.68l.2.35a9.684,9.684,0,0,0-2.68,1.73l-.35-.35a.5.5,0,0,0-.71,0,.5.5,0,0,0,0,.7l.36.36a9.2,9.2,0,0,0-1.73,2.67Zm6.58,1.32a8.851,8.851,0,0,1-6.04,2.6,8.388,8.388,0,0,1,.34-2.25l.35.2a.451.451,0,0,0,.25.07.5.5,0,0,0,.43-.25.505.505,0,0,0-.18-.69l-.51-.29a8.7,8.7,0,0,1,1.57-2.47l.36.36a.5.5,0,0,0,.7-.71l-.36-.36a9.124,9.124,0,0,1,2.48-1.57l.3.52a.5.5,0,0,0,.43.25.451.451,0,0,0,.25-.07.505.505,0,0,0,.19-.68l-.21-.36a8.449,8.449,0,0,1,2.25-.34,8.992,8.992,0,0,1-.66,3.14A9.172,9.172,0,0,1,18.32,18.316Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiBasketball (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Basketball\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.02,4.971a9.941,9.941,0,1,0,0,14.05A9.941,9.941,0,0,0,19.02,4.971Zm-13.34.71a8.894,8.894,0,0,1,6.05-2.6,8.812,8.812,0,0,1-2.61,6.04,8.75,8.75,0,0,1-6.04,2.61A8.875,8.875,0,0,1,5.68,5.681ZM3.1,12.731a9.772,9.772,0,0,0,6.73-2.9,9.8,9.8,0,0,0,2.9-6.73,8.908,8.908,0,0,1,5.23,2.24L5.34,17.951A8.881,8.881,0,0,1,3.1,12.731Zm8.18,8.17a8.872,8.872,0,0,1-5.23-2.24L18.66,6.041a8.91,8.91,0,0,1,2.24,5.24,9.86,9.86,0,0,0-9.62,9.62Zm7.04-2.59a8.856,8.856,0,0,1-6.04,2.61,8.851,8.851,0,0,1,8.64-8.64A8.847,8.847,0,0,1,18.32,18.311Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiBatteryCharging (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Battery_Charging\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.505,18.5H4.065a2,2,0,0,1-2-2v-9a2,2,0,0,1,2-2h13.44a2,2,0,0,1,2,2v1h.93a1.5,1.5,0,0,1,1.5,1.5v4a1.5,1.5,0,0,1-1.5,1.5h-.93v1A2,2,0,0,1,17.505,18.5ZM4.065,6.5a1,1,0,0,0-1,1v9a1,1,0,0,0,1,1h13.44a1,1,0,0,0,1-1V15.25a.752.752,0,0,1,.75-.75h1.18a.5.5,0,0,0,.5-.5V10a.5.5,0,0,0-.5-.5h-1.18a.752.752,0,0,1-.75-.75V7.5a1,1,0,0,0-1-1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13.174,11.191H11.891a.11.11,0,0,1-.1-.15l.655-1.669a.251.251,0,0,0-.233-.342H9.274a.248.248,0,0,0-.231.157L8.292,11.04a.11.11,0,0,0,.1.151H9.829a.11.11,0,0,1,.1.144l-.776,3.53a.085.085,0,0,0,.139.081l3.947-3.561A.109.109,0,0,0,13.174,11.191Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiBatteryEmpty (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Battery_Empty\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.505,18.5H4.065a2,2,0,0,1-2-2v-9a2,2,0,0,1,2-2h13.44a2,2,0,0,1,2,2v1h.93a1.5,1.5,0,0,1,1.5,1.5v4a1.5,1.5,0,0,1-1.5,1.5h-.93v1A2,2,0,0,1,17.505,18.5ZM4.065,6.5a1,1,0,0,0-1,1v9a1,1,0,0,0,1,1h13.44a1,1,0,0,0,1-1V15.25a.752.752,0,0,1,.75-.75h1.18a.5.5,0,0,0,.5-.5V10a.5.5,0,0,0-.5-.5h-1.18a.752.752,0,0,1-.75-.75V7.5a1,1,0,0,0-1-1Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiBatteryFull (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Battery_Full\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.505,18.5H4.065a2,2,0,0,1-2-2v-9a2,2,0,0,1,2-2h13.44a2,2,0,0,1,2,2v1h.93a1.5,1.5,0,0,1,1.5,1.5v4a1.5,1.5,0,0,1-1.5,1.5h-.93v1A2,2,0,0,1,17.505,18.5ZM4.065,6.5a1,1,0,0,0-1,1v9a1,1,0,0,0,1,1h13.44a1,1,0,0,0,1-1V15.25a.751.751,0,0,1,.75-.75h1.18a.5.5,0,0,0,.5-.5V10a.5.5,0,0,0-.5-.5h-1.18a.751.751,0,0,1-.75-.75V7.5a1,1,0,0,0-1-1Z\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"4.063\",\"y\":\"7.499\",\"width\":\"13.437\",\"height\":\"8.998\",\"rx\":\"1\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiBeaker1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Beaker_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.447,18.645l-.51-1.52a17.9,17.9,0,0,0-4.02-6.66,1.493,1.493,0,0,1-.42-1.04V3.065H15a.5.5,0,0,0,0-1H9a.5.5,0,0,0,0,1h.5v6.36a1.484,1.484,0,0,1-.41,1.04,17.9,17.9,0,0,0-4.02,6.66l-.52,1.52a2.5,2.5,0,0,0,2.37,3.29h10.16a2.5,2.5,0,0,0,2.37-3.29Zm-9.64-7.49a2.477,2.477,0,0,0,.69-1.73V3.065h3v6.36a2.486,2.486,0,0,0,.7,1.73,16.907,16.907,0,0,1,3.01,4.38H6.787A16.943,16.943,0,0,1,9.807,11.155Zm8.49,9.16a1.507,1.507,0,0,1-1.22.62H6.917a1.5,1.5,0,0,1-1.42-1.98l.51-1.52q.15-.45.33-.9h11.32q.18.45.33.9l.51,1.52A1.5,1.5,0,0,1,18.3,20.315Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiBeerMugFull (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Beer_Mug_Full\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.356,9.63h-.97V7.99a2.938,2.938,0,0,0,.5-1.65,1.77,1.77,0,0,0-.01-.23,2.905,2.905,0,0,0-1.64-2.38,2.956,2.956,0,0,0-2.4-.07,3.278,3.278,0,0,0-5.62,0,2.9,2.9,0,0,0-1.68-.17,2.866,2.866,0,0,0-2.16,1.75,2.948,2.948,0,0,0,.3,2.77V19.43a2.5,2.5,0,0,0,2.5,2.5h7.71a2.5,2.5,0,0,0,2.5-2.5v-.99l.91-.36a2.433,2.433,0,0,0,1.54-2.27V11.1A1.481,1.481,0,0,0,18.356,9.63Zm-1.97,9.8a1.5,1.5,0,0,1-1.5,1.5H7.176a1.5,1.5,0,0,1-1.5-1.5V11.34a2.858,2.858,0,0,0,1.93.74c.13,0,.25-.01.37-.02V18.4a.5.5,0,0,0,.5.5.5.5,0,0,0,.5-.5V11.82a.17.17,0,0,0-.01-.07,2.939,2.939,0,0,0,1.57-2.46h4.42a2.86,2.86,0,0,0,1.43-.38Zm-.01-11.77a1.949,1.949,0,0,1-1.42.63h-4.61a.8.8,0,0,0-.79.61,1.231,1.231,0,0,0-.02.2,1.975,1.975,0,0,1-1.05,1.78,1.934,1.934,0,0,1-2.8-1.72,1.808,1.808,0,0,1,.17-.77.6.6,0,0,0-.13-.68,1.939,1.939,0,0,1-.41-2.11,1.868,1.868,0,0,1,1.4-1.13,2.531,2.531,0,0,1,.38-.03,1.909,1.909,0,0,1,.86.2.766.766,0,0,0,.59.06A.8.8,0,0,0,9,4.32a2.273,2.273,0,0,1,4.06,0,.751.751,0,0,0,.44.38.8.8,0,0,0,.59-.05,1.917,1.917,0,0,1,2.79,1.54A1.886,1.886,0,0,1,16.376,7.66Zm2.46,8.15a1.428,1.428,0,0,1-.92,1.34l-.52.22V10.63h.96a.478.478,0,0,1,.48.47Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13.577,18.9a.5.5,0,0,1-.5-.5V11.82a.5.5,0,0,1,1,0V18.4A.5.5,0,0,1,13.577,18.9Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiBellOff (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bell_Off\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M9.624,5.2c-.571.3-.079,1.124.5.864.509-.227,1.068-.287,1.115-.95.028-.41.014-.81.476-.993a.776.776,0,0,1,1.035.71c.048.461.035.821.548,1.024a4.811,4.811,0,0,1,2.812,2.432,5.63,5.63,0,0,1,.414,2.467v2.02a.5.5,0,0,0,1,0c0-1.646.185-3.394-.521-4.929a5.542,5.542,0,0,0-3.019-2.808c-.034-.013-.155-.069-.227-.092,0-.021,0-.044,0-.059a2.009,2.009,0,0,0-.257-.945,1.739,1.739,0,0,0-3.1.172,1.992,1.992,0,0,0-.153.792c0,.012,0,.033,0,.052C10.24,4.959,9.808,5.107,9.624,5.2Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4.57,3.86c-.46-.46-1.17.25-.71.7C4.92,5.62,5.98,6.69,7.04,7.75a5.535,5.535,0,0,0-.57,2.44v4.54a2.122,2.122,0,0,0-1.88,2.11v.53a2.121,2.121,0,0,0,2.12,2.12H10.3a1.725,1.725,0,0,0,3.4,0h3.59a2.12,2.12,0,0,0,1.15-.34l.99.99a.5.5,0,0,0,.71-.71ZM17.7,18.41a1.15,1.15,0,0,1-.41.08H6.71a1.118,1.118,0,0,1-1.12-1.12v-.53a1.118,1.118,0,0,1,1.12-1.12.762.762,0,0,0,.76-.77V10.19A4.375,4.375,0,0,1,7.8,8.51Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiBellOn (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bell_On\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.79,15.34a2.087,2.087,0,0,0-1.26-.61V10.19a5.5,5.5,0,0,0-1.62-3.91,5.826,5.826,0,0,0-2.15-1.33V4.89a1.8,1.8,0,0,0-1.61-1.81,1.749,1.749,0,0,0-1.91,1.75v.12a5.547,5.547,0,0,0-3.77,5.24v4.54a2.122,2.122,0,0,0-1.88,2.11v.53a2.121,2.121,0,0,0,2.12,2.12H10.3a1.725,1.725,0,0,0,3.4,0h3.59a2.121,2.121,0,0,0,2.12-2.12v-.53A2.1,2.1,0,0,0,18.79,15.34Zm-.38,2.03a1.118,1.118,0,0,1-1.12,1.12H6.71a1.118,1.118,0,0,1-1.12-1.12v-.53a1.118,1.118,0,0,1,1.12-1.12.762.762,0,0,0,.76-.77V10.19a4.555,4.555,0,0,1,3.24-4.34.729.729,0,0,0,.53-.71V4.83a.735.735,0,0,1,.25-.56.744.744,0,0,1,.51-.2h.07a.807.807,0,0,1,.69.82v.25a.729.729,0,0,0,.53.71A4.668,4.668,0,0,1,15.2,6.99a4.468,4.468,0,0,1,1.33,3.2v4.76a.8.8,0,0,0,.22.55.773.773,0,0,0,.54.22,1.127,1.127,0,0,1,1.12,1.12Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiBezier (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bezier\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.435,8.005a1.5,1.5,0,1,0-1.41-2H13.5v-.25a.749.749,0,0,0-.75-.75h-1.5a.755.755,0,0,0-.75.75v.25H4.975a1.5,1.5,0,0,0-2.91.5,1.5,1.5,0,0,0,2.91.5h3.79c-2.5,1.61-4.23,5-4.47,8.99h-.28a.749.749,0,0,0-.75.75v1.5a.749.749,0,0,0,.75.75h1.5a.755.755,0,0,0,.75-.75v-1.5a.755.755,0,0,0-.75-.75h-.21c.27-4.22,2.38-7.78,5.19-8.73a.747.747,0,0,0,.75.74h1.5a.741.741,0,0,0,.75-.74c2.81.95,4.93,4.51,5.21,8.73h-.22a.749.749,0,0,0-.75.75v1.5a.749.749,0,0,0,.75.75h1.5a.755.755,0,0,0,.75-.75v-1.5a.755.755,0,0,0-.75-.75H19.7c-.24-3.99-1.97-7.38-4.46-8.99h3.78A1.5,1.5,0,0,0,20.435,8.005Zm0-2a.508.508,0,0,1,.5.5.5.5,0,0,1-.5.5.5.5,0,0,1-.5-.5A.5.5,0,0,1,20.435,6.005Zm-16.87,1a.5.5,0,0,1-.5-.5.5.5,0,0,1,.5-.5.508.508,0,0,1,.5.5A.5.5,0,0,1,3.565,7.005ZM5.265,18h-1V17h1ZM12.5,7.005h-1v-1h1ZM18.735,17h1v1h-1Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiBitcoin (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bitcoin\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.934A9.934,9.934,0,1,1,21.934,12,9.945,9.945,0,0,1,12,21.934ZM12,3.066A8.934,8.934,0,1,0,20.934,12,8.944,8.944,0,0,0,12,3.066Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.28,11.78A1.994,1.994,0,0,0,12.75,8.5H12.5V7.47A.489.489,0,0,0,12,7a.483.483,0,0,0-.5.47V8.5H10.25a1,1,0,0,0-1,1v5a1,1,0,0,0,1,1H11.5v1.03A.483.483,0,0,0,12,17a.489.489,0,0,0,.5-.47V15.5h.75a2.006,2.006,0,0,0,2-2A2.033,2.033,0,0,0,14.28,11.78ZM10.25,9.5h2.5a1,1,0,0,1,0,2h-2.5Zm3,5h-3v-2h3a1,1,0,0,1,0,2Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiBluetooth (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bluetooth\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.649,15.938,11.829,12l6.82-3.94a.984.984,0,0,0,.5-.87.968.968,0,0,0-.5-.861L12.029,2.5a.989.989,0,0,0-1,0,1,1,0,0,0-.5.87v7.769q-2.1-1.23-4.22-2.44c-.24-.139-.47-.279-.71-.409a.5.5,0,0,0-.51.86L10.039,12c-1.41.81-2.83,1.62-4.23,2.44-.24.129-.48.27-.72.41a.5.5,0,0,0,.51.86c1.65-.951,3.28-1.891,4.93-2.85v7.769a.993.993,0,0,0,.5.871.969.969,0,0,0,1,0l6.62-3.82a1.007,1.007,0,0,0,0-1.74Zm-7.12-12.57,6.62,3.82-6.62,3.83Zm0,17.259V12.988l6.62,3.82Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiBookmarkCheck (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bookmark_Check\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.6,21.938a1.482,1.482,0,0,1-1.011-.4l-4.251-3.9a.5.5,0,0,0-.678,0L7.41,21.538a1.5,1.5,0,0,1-2.517-1.1V4.563a2.5,2.5,0,0,1,2.5-2.5h9.214a2.5,2.5,0,0,1,2.5,2.5V20.435a1.483,1.483,0,0,1-.9,1.375A1.526,1.526,0,0,1,17.6,21.938ZM12,16.5a1.5,1.5,0,0,1,1.018.395L17.269,20.8a.5.5,0,0,0,.838-.368V4.563a1.5,1.5,0,0,0-1.5-1.5H7.393a1.5,1.5,0,0,0-1.5,1.5V20.435a.5.5,0,0,0,.839.368L10.983,16.9A1.5,1.5,0,0,1,12,16.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.85,9.08c-.11.12-.23.23-.35.35-.83.83-1.65,1.65-2.47,2.48a.513.513,0,0,1-.71,0c-.47-.48-.94-.95-1.42-1.42a.5.5,0,0,1,.71-.71c.35.36.7.71,1.06,1.06.83-.82,1.65-1.65,2.48-2.47C14.6,7.91,15.31,8.62,14.85,9.08Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiBookmarkMinus (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bookmark_Minus\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.6,21.938a1.482,1.482,0,0,1-1.011-.4l-4.251-3.9a.5.5,0,0,0-.678,0L7.41,21.538a1.5,1.5,0,0,1-2.517-1.1V4.563a2.5,2.5,0,0,1,2.5-2.5h9.214a2.5,2.5,0,0,1,2.5,2.5V20.435a1.483,1.483,0,0,1-.9,1.375A1.526,1.526,0,0,1,17.6,21.938ZM12,16.5a1.5,1.5,0,0,1,1.018.395L17.269,20.8a.5.5,0,0,0,.838-.368V4.563a1.5,1.5,0,0,0-1.5-1.5H7.393a1.5,1.5,0,0,0-1.5,1.5V20.435a.5.5,0,0,0,.839.368L10.983,16.9A1.5,1.5,0,0,1,12,16.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M10,10.277a.5.5,0,0,1,0-1h4a.5.5,0,0,1,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiBookmarkPlus (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bookmark_Plus\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.6,21.938a1.482,1.482,0,0,1-1.011-.4l-4.251-3.9a.5.5,0,0,0-.678,0L7.41,21.538a1.5,1.5,0,0,1-2.517-1.1V4.563a2.5,2.5,0,0,1,2.5-2.5h9.214a2.5,2.5,0,0,1,2.5,2.5V20.435a1.483,1.483,0,0,1-.9,1.375A1.526,1.526,0,0,1,17.6,21.938ZM12,16.5a1.5,1.5,0,0,1,1.018.395L17.269,20.8a.5.5,0,0,0,.838-.368V4.563a1.5,1.5,0,0,0-1.5-1.5H7.393a1.5,1.5,0,0,0-1.5,1.5V20.435a.5.5,0,0,0,.839.368L10.983,16.9A1.5,1.5,0,0,1,12,16.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14,10.28H12.5v1.5a.5.5,0,0,1-1,0v-1.5H10a.5.5,0,0,1,0-1h1.5V7.78a.5.5,0,0,1,1,0v1.5H14A.5.5,0,0,1,14,10.28Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiBookmarkRemove (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bookmark_Remove\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.6,21.938a1.482,1.482,0,0,1-1.011-.4l-4.251-3.9a.5.5,0,0,0-.678,0L7.41,21.538a1.5,1.5,0,0,1-2.517-1.1V4.563a2.5,2.5,0,0,1,2.5-2.5h9.214a2.5,2.5,0,0,1,2.5,2.5V20.435a1.483,1.483,0,0,1-.9,1.375A1.526,1.526,0,0,1,17.6,21.938ZM12,16.5a1.5,1.5,0,0,1,1.018.395L17.269,20.8a.5.5,0,0,0,.838-.368V4.563a1.5,1.5,0,0,0-1.5-1.5H7.393a1.5,1.5,0,0,0-1.5,1.5V20.435a.5.5,0,0,0,.839.368L10.983,16.9A1.5,1.5,0,0,1,12,16.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M10.23,10.84a.5.5,0,0,0,.71.71L12,10.491,13.06,11.55a.523.523,0,0,0,.71,0,.513.513,0,0,0,0-.71L12.709,9.779,13.77,8.72a.5.5,0,0,0-.71-.71c-.35.35-.7.71-1.06,1.06L10.94,8.01a.5.5,0,0,0-.71,0,.524.524,0,0,0,0,.71c.35.35.71.7,1.06,1.06Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiBookmark (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bookmark\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.6,21.945a1.483,1.483,0,0,1-1.01-.4l-4.251-3.9a.5.5,0,0,0-.68,0L7.409,21.545a1.5,1.5,0,0,1-2.516-1.1V4.57a2.5,2.5,0,0,1,2.5-2.5h9.214a2.5,2.5,0,0,1,2.5,2.5V20.442a1.481,1.481,0,0,1-.9,1.374A1.507,1.507,0,0,1,17.6,21.945ZM12,16.51a1.5,1.5,0,0,1,1.018.395l4.251,3.9a.5.5,0,0,0,.839-.368V4.57a1.5,1.5,0,0,0-1.5-1.5H7.393a1.5,1.5,0,0,0-1.5,1.5V20.442a.5.5,0,0,0,.839.368L10.983,16.9A1.5,1.5,0,0,1,12,16.51Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiBowlNoodles (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bowl_Noodles\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.5,10.705a.948.948,0,0,0-.92-.67h-5.07V8.355l4.75.17h.02a.734.734,0,0,0,.73-.73.718.718,0,0,0-.75-.72l-4.75.17V5.405l4.78-.67a.723.723,0,0,0,.62-.72.487.487,0,0,0-.01-.12.716.716,0,0,0-.87-.58l-4.6.98a1.5,1.5,0,0,0-2.92.47v.15l-1.14.24a1.494,1.494,0,0,0-2.86.61v.01l-1.2.25a.267.267,0,0,0-.2.26v.04a.257.257,0,0,0,.29.21l1.11-.15V7.5l-1.25.04a.263.263,0,0,0-.25.26.256.256,0,0,0,.25.26l1.25.04v1.94H5.425a.963.963,0,0,0-.92.68,10.119,10.119,0,0,0,1.19,8.53l.61.92a1.233,1.233,0,0,0,1.05.57h9.3a1.228,1.228,0,0,0,1.04-.57l.61-.92A10.136,10.136,0,0,0,19.5,10.705Zm-7.99-5.94a.5.5,0,0,1,.5-.5.5.5,0,0,1,.5.5v5.24h-1Zm-2,1.2,1-.14v1.53l-1,.03Zm0,2.25,1,.03v1.79h-1Zm-2-2.45a.5.5,0,0,1,.5-.5.5.5,0,0,1,.5.5v4.24h-1Zm9.96,12.93-.6.93a.261.261,0,0,1-.21.11h-9.3a.236.236,0,0,1-.21-.11l-.61-.93a9.229,9.229,0,0,1-1.11-7.66l13.12-.03A9.122,9.122,0,0,1,17.465,18.7Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiBoxList (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Box_List\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M6.562,8.062h-2a1.5,1.5,0,0,1-1.5-1.5v-2a1.5,1.5,0,0,1,1.5-1.5h2a1.5,1.5,0,0,1,1.5,1.5v2A1.5,1.5,0,0,1,6.562,8.062Zm-2-4a.5.5,0,0,0-.5.5v2a.5.5,0,0,0,.5.5h2a.5.5,0,0,0,.5-.5v-2a.5.5,0,0,0-.5-.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6.562,20.938h-2a1.5,1.5,0,0,1-1.5-1.5v-2a1.5,1.5,0,0,1,1.5-1.5h2a1.5,1.5,0,0,1,1.5,1.5v2A1.5,1.5,0,0,1,6.562,20.938Zm-2-4a.5.5,0,0,0-.5.5v2a.5.5,0,0,0,.5.5h2a.5.5,0,0,0,.5-.5v-2a.5.5,0,0,0-.5-.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6.562,14.5h-2a1.5,1.5,0,0,1-1.5-1.5V11a1.5,1.5,0,0,1,1.5-1.5h2a1.5,1.5,0,0,1,1.5,1.5v2A1.5,1.5,0,0,1,6.562,14.5Zm-2-4a.5.5,0,0,0-.5.5v2a.5.5,0,0,0,.5.5h2a.5.5,0,0,0,.5-.5V11a.5.5,0,0,0-.5-.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.438,6.062h-9a.5.5,0,0,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.438,12.5h-9a.5.5,0,0,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.438,18.935h-9a.5.5,0,1,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiBoxes (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Boxes\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.435,11.5h-2.72V4.56a1.5,1.5,0,0,0-1.5-1.5H8.785a1.5,1.5,0,0,0-1.5,1.5V11.5H4.565a1.5,1.5,0,0,0-1.5,1.5v6.44a1.5,1.5,0,0,0,1.5,1.5H11a1.468,1.468,0,0,0,1-.39,1.487,1.487,0,0,0,1,.39h6.44a1.5,1.5,0,0,0,1.5-1.5V13A1.5,1.5,0,0,0,19.435,11.5ZM11.5,19.44a.5.5,0,0,1-.5.5H4.565a.5.5,0,0,1-.5-.5V13a.5.5,0,0,1,.5-.5h1.97v2a.5.5,0,0,0,.5.5h1.5a.508.508,0,0,0,.5-.5v-2H11.5ZM8.285,11.5V4.56a.5.5,0,0,1,.5-.5h1.96v2a.5.5,0,0,0,.5.5h1.5a.5.5,0,0,0,.5-.5v-2h1.97a.5.5,0,0,1,.5.5V11.5Zm11.65,7.94a.508.508,0,0,1-.5.5H13a.508.508,0,0,1-.5-.5V12.5h2.47v2a.5.5,0,0,0,.5.5h1.5a.5.5,0,0,0,.5-.5v-2h1.97a.5.5,0,0,1,.5.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiBrightnessDown (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Brightness_Down\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,17.5A5.5,5.5,0,1,1,17.5,12,5.506,5.506,0,0,1,12,17.5Zm0-10A4.5,4.5,0,1,0,16.5,12,4.505,4.505,0,0,0,12,7.5Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"2.813\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"21.187\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"21.187\",\"cy\":\"12\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"2.813\",\"cy\":\"12\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18.496\",\"cy\":\"5.504\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"5.504\",\"cy\":\"18.496\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18.496\",\"cy\":\"18.496\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"5.504\",\"cy\":\"5.504\",\"r\":\"0.75\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiBrightnessUp (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Brightness_Up\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,17.5A5.5,5.5,0,1,1,17.5,12,5.506,5.506,0,0,1,12,17.5Zm0-10A4.5,4.5,0,1,0,16.5,12,4.505,4.505,0,0,0,12,7.5Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"3.063\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"20.937\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"20.937\",\"cy\":\"12\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"3.063\",\"cy\":\"12\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18.319\",\"cy\":\"5.681\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"5.681\",\"cy\":\"18.319\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18.319\",\"cy\":\"18.319\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"5.681\",\"cy\":\"5.681\",\"r\":\"1\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiBullhorn (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Bullhorn\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4.5,16.474c-0.849,-0.4 -1.436,-1.263 -1.436,-2.264l-0,-4.419c-0,-1.38 1.118,-2.5 2.5,-2.5l4.343,0c0.793,0 1.581,-0.132 2.33,-0.392c1.859,-0.705 3.792,-1.727 5.24,-2.922l0.869,-0.718c0.015,-0.013 0.032,-0.025 0.049,-0.036c0.666,-0.424 1.538,0.054 1.538,0.844l0,6.717c0.572,0.11 1.004,0.613 1.004,1.217c-0,0.604 -0.432,1.106 -1.004,1.216l-0,6.718c-0,0.787 -0.872,1.267 -1.538,0.843c-0.017,-0.011 -0.034,-0.023 -0.05,-0.036l-0.868,-0.718c-1.446,-1.195 -3.364,-2.214 -5.226,-2.891c-0.748,-0.261 -1.536,-0.394 -2.328,-0.394c-0.609,-0.029 -1.265,-0.029 -1.265,-0.029l0,2.147c0,1.148 -0.931,2.079 -2.079,2.079c-1.148,-0 -2.079,-0.931 -2.079,-2.079l0,-2.383Zm1,0.236l0,2.147c0,0.596 0.483,1.079 1.079,1.079c0.596,-0 1.079,-0.483 1.079,-1.079c0,-0 0,-2.147 0,-2.147l-2.094,-0c-0.031,-0 -0.053,-0 -0.064,-0Zm6,-0.882l0.142,0.04c2.37,0.664 4.575,1.817 6.473,3.385l0.818,0.677l-0,-15.859l-0.82,0.677c-1.897,1.566 -4.1,2.717 -6.468,3.379l-0.145,0.041l-0,7.66Zm-2.842,-0.118l1.842,0l-0,-7.419l-4.936,0c-0.829,0 -1.5,0.672 -1.5,1.5l-0,4.419c-0,0.829 0.671,1.5 1.499,1.5l3.095,0Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiBurger (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Burger\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.325,11.015a7.344,7.344,0,0,0-14.66,0,2.014,2.014,0,0,0-1.6,1.96v.16a2.016,2.016,0,0,0,1.64,1.97l.27,2.45a2.593,2.593,0,0,0,2.59,2.32h8.87a2.593,2.593,0,0,0,2.59-2.32l.27-2.45a2.016,2.016,0,0,0,1.64-1.97v-.16A2,2,0,0,0,19.325,11.015ZM12,5.125a6.365,6.365,0,0,1,6.34,5.85H5.665A6.362,6.362,0,0,1,12,5.125Zm6.04,12.32a1.6,1.6,0,0,1-1.6,1.43H7.565a1.6,1.6,0,0,1-1.6-1.43l-.26-2.31H18.3Zm1.9-4.31a1,1,0,0,1-1,1H5.065a1,1,0,0,1-1-1v-.16a1,1,0,0,1,1-1h13.87a1,1,0,0,1,1,1Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"6.622\",\"r\":\"0.5\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8.323\",\"cy\":\"8.323\",\"r\":\"0.5\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"15.676\",\"cy\":\"8.323\",\"r\":\"0.5\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCalculator1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Calculator_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16.5,21.937h-9a2.5,2.5,0,0,1-2.5-2.5V4.563a2.5,2.5,0,0,1,2.5-2.5h9a2.5,2.5,0,0,1,2.5,2.5V19.437A2.5,2.5,0,0,1,16.5,21.937ZM7.5,3.063A1.5,1.5,0,0,0,6,4.563V19.437a1.5,1.5,0,0,0,1.5,1.5h9a1.5,1.5,0,0,0,1.5-1.5V4.563a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.5,9.757h-5A1.5,1.5,0,0,1,8,8.257V6.563a1.5,1.5,0,0,1,1.5-1.5h5a1.5,1.5,0,0,1,1.5,1.5V8.257A1.5,1.5,0,0,1,14.5,9.757Zm-5-3.694a.5.5,0,0,0-.5.5V8.257a.5.5,0,0,0,.5.5h5a.5.5,0,0,0,.5-.5V6.563a.5.5,0,0,0-.5-.5Z\"},\"child\":[]},{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"11.508\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"15.25\",\"cy\":\"11.508\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8.75\",\"cy\":\"11.508\",\"r\":\"0.75\"},\"child\":[]}]},{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"14.848\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"15.25\",\"cy\":\"14.848\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8.75\",\"cy\":\"14.848\",\"r\":\"0.75\"},\"child\":[]}]},{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"15.25\",\"cy\":\"18.187\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12.248,18.687H8.5a.5.5,0,0,1,0-1h3.744a.5.5,0,1,1,0,1Z\"},\"child\":[]}]}]}]}]})(props);\n};\nexport function CiCalculator2 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Calculator_2\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.45,7.83h-2.8v2.81a.5.5,0,0,1-1,0V7.83H13.84a.5.5,0,0,1,0-1h2.81V4.02a.5.5,0,0,1,1,0V6.83h2.8A.5.5,0,0,1,20.45,7.83Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3.545,7.83a.5.5,0,0,1,0-1h6.619a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M13.836,16.05a.5.5,0,0,1,0-1h6.619a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13.836,20.191a.5.5,0,0,1,0-1h6.619a.5.5,0,0,1,0,1Z\"},\"child\":[]}]},{\"tag\":\"path\",\"attr\":{\"d\":\"M9.55,19.61a.5.5,0,0,1-.71.7L6.86,18.33c-.66.65-1.33,1.32-1.99,1.98a.5.5,0,0,1-.71-.7l1.99-1.99L4.16,15.63a.5.5,0,0,1,.71-.7l.58.58,1.4,1.4c.67-.66,1.33-1.32,1.99-1.98a.5.5,0,0,1,.71.7L7.56,17.62Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCalendarDate (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Calendar_Date\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.435,4.955h-1.94v-1.41c0-0.26-0.23-0.51-0.5-0.5c-0.27,0.01-0.5,0.22-0.5,0.5v1.41h-7v-1.41\\n            c0-0.26-0.23-0.51-0.5-0.5c-0.27,0.01-0.5,0.22-0.5,0.5v1.41h-1.93c-1.38,0-2.5,1.12-2.5,2.5v11c0,1.38,1.12,2.5,2.5,2.5h12.87\\n            c1.38,0,2.5-1.12,2.5-2.5v-11C20.935,6.075,19.815,4.955,18.435,4.955z M19.935,18.455c0,0.83-0.67,1.5-1.5,1.5H5.565\\n            c-0.83,0-1.5-0.67-1.5-1.5v-8.42h15.87V18.455z M19.935,9.035H4.065v-1.58c0-0.83,0.67-1.5,1.5-1.5h1.93v0.59\\n            c0,0.26,0.23,0.51,0.5,0.5c0.27-0.01,0.5-0.22,0.5-0.5v-0.59h7v0.59c0,0.26,0.23,0.51,0.5,0.5c0.27-0.01,0.5-0.22,0.5-0.5v-0.59\\n            h1.94c0.83,0,1.5,0.67,1.5,1.5V9.035z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M11.492,17.173v-3.46c0-0.059-0.064-0.095-0.114-0.064l-0.638,0.392\\n            c-0.1,0.061-0.228-0.01-0.228-0.128v-0.651c0-0.105,0.055-0.203,0.146-0.257l0.764-0.457c0.047-0.028,0.1-0.043,0.154-0.043h0.626\\n            c0.166,0,0.3,0.134,0.3,0.3v4.367c0,0.166-0.134,0.3-0.3,0.3h-0.409C11.626,17.473,11.492,17.339,11.492,17.173z\"},\"child\":[]}]}]})(props);\n};\nexport function CiCalendar (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Calendar\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.438,4.954H16.5c0-0.346,0-0.691,0-1.036c0-0.124,0-0.248,0-0.372c0-0.262-0.23-0.512-0.5-0.5\\n            c-0.271,0.012-0.5,0.22-0.5,0.5c0,0.469,0,0.939,0,1.408h-7c0-0.346,0-0.691,0-1.036c0-0.124,0-0.248,0-0.372\\n            c0-0.262-0.23-0.512-0.5-0.5c-0.271,0.012-0.5,0.22-0.5,0.5c0,0.469,0,0.939,0,1.408H5.562c-1.378,0-2.5,1.122-2.5,2.5v11\\n            c0,1.379,1.122,2.5,2.5,2.5h12.875c1.379,0,2.5-1.121,2.5-2.5v-11C20.938,6.076,19.816,4.954,18.438,4.954z M5.562,5.954H7.5\\n            c0,0.073,0,0.147,0,0.22c0,0.124,0,0.248,0,0.372c0,0.262,0.23,0.512,0.5,0.5c0.271-0.012,0.5-0.22,0.5-0.5c0-0.197,0-0.394,0-0.592\\n            h7c0,0.073,0,0.147,0,0.22c0,0.124,0,0.248,0,0.372c0,0.262,0.23,0.512,0.5,0.5c0.271-0.012,0.5-0.22,0.5-0.5\\n            c0-0.197,0-0.394,0-0.592h1.937c0.827,0,1.5,0.673,1.5,1.5v1.584H4.062V7.454C4.062,6.627,4.735,5.954,5.562,5.954z M18.438,19.954\\n            H5.562c-0.827,0-1.5-0.673-1.5-1.5v-8.416h15.875v8.416C19.938,19.281,19.265,19.954,18.438,19.954z\"},\"child\":[]}]}]})(props);\n};\nexport function CiCamera (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Camera\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.435,19.925H3.565a1.5,1.5,0,0,1-1.5-1.5V9.285a1.5,1.5,0,0,1,1.5-1.5H6.223a.5.5,0,0,0,.5-.454l.166-1.8a1.49,1.49,0,0,1,1.5-1.454h7.23a1.5,1.5,0,0,1,1.5,1.5l.164,1.756a.5.5,0,0,0,.5.454h2.658a1.5,1.5,0,0,1,1.5,1.5v9.14A1.5,1.5,0,0,1,20.435,19.925ZM3.565,8.785a.5.5,0,0,0-.5.5v9.14a.5.5,0,0,0,.5.5h16.87a.5.5,0,0,0,.5-.5V9.285a.5.5,0,0,0-.5-.5H17.777a1.5,1.5,0,0,1-1.494-1.362l-.166-1.8a.515.515,0,0,0-.5-.546H8.385a.5.5,0,0,0-.5.5L7.717,7.423A1.5,1.5,0,0,1,6.223,8.785Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,17.282a4,4,0,1,1,4-4A4,4,0,0,1,12,17.282Zm0-7a3,3,0,1,0,3,3A3,3,0,0,0,12,10.282Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiChat1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Chat_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3.316,19.937A1.251,1.251,0,0,1,2.065,18.69l0-1.716L2.068,6.56a2.5,2.5,0,0,1,2.5-2.5H19.44a2.5,2.5,0,0,1,2.5,2.5v8.41a2.5,2.5,0,0,1-2.5,2.5H6.918a1.49,1.49,0,0,0-1.06.439L4.2,19.57A1.246,1.246,0,0,1,3.316,19.937ZM4.568,5.062a1.5,1.5,0,0,0-1.5,1.5L3.06,16.973l0,1.714a.25.25,0,0,0,.427.176L5.151,17.2a2.482,2.482,0,0,1,1.767-.732H19.44a1.5,1.5,0,0,0,1.5-1.5V6.562a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiChat2 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Chat_2\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,19.937a1.243,1.243,0,0,1-.833-.319L9.281,17.932a1.531,1.531,0,0,0-1.08-.458H4.561a2.5,2.5,0,0,1-2.5-2.5l.006-8.41a2.5,2.5,0,0,1,2.5-2.5H19.439a2.5,2.5,0,0,1,2.5,2.5v8.411a2.5,2.5,0,0,1-2.5,2.5H15.79a1.483,1.483,0,0,0-1.062.441l-1.895,1.7A1.243,1.243,0,0,1,12,19.937ZM4.567,5.063a1.5,1.5,0,0,0-1.5,1.5l-.006,8.411a1.5,1.5,0,0,0,1.5,1.5H8.2a2.483,2.483,0,0,1,1.767.732l1.864,1.667a.248.248,0,0,0,.333,0l1.874-1.682a2.5,2.5,0,0,1,1.751-.716h3.649a1.5,1.5,0,0,0,1.5-1.5V6.563a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiCircleAlert (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Circle_Alert\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12.5,9a.5.5,0,0,0-1,0h0V13.02a.5.5,0,0,0,1,0Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"15.001\",\"r\":\"0.5\"},\"child\":[]}]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.935A9.933,9.933,0,1,1,21.934,12,9.945,9.945,0,0,1,12,21.935ZM12,3.069A8.933,8.933,0,1,0,20.934,12,8.944,8.944,0,0,0,12,3.069Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCircleCheck (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Circle_Check\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M15.81,10.4a.5.5,0,0,0-.71-.71l-3.56,3.56L9.81,11.52a.5.5,0,0,0-.71.71l2.08,2.08a.513.513,0,0,0,.71,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.934A9.934,9.934,0,1,1,21.933,12,9.945,9.945,0,0,1,12,21.934ZM12,3.067A8.934,8.934,0,1,0,20.933,12,8.944,8.944,0,0,0,12,3.067Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCircleChevDown (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Circle_Chev_Down\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12.35,13.85a.492.492,0,0,1-.7,0l-3-3a.495.495,0,0,1,.7-.7L12,12.79l2.65-2.64a.495.495,0,0,1,.7.7Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21.933,12A9.933,9.933,0,1,1,12,2.067,9.944,9.944,0,0,1,21.933,12ZM3.067,12A8.933,8.933,0,1,0,12,3.067,8.943,8.943,0,0,0,3.067,12Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCircleChevLeft (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Circle_Chev_Left\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10.15,12.35a.492.492,0,0,1,0-.7l3-3a.495.495,0,0,1,.7.7L11.21,12l2.64,2.65a.495.495,0,0,1-.7.7Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.933A9.933,9.933,0,1,1,21.933,12,9.944,9.944,0,0,1,12,21.933ZM12,3.067A8.933,8.933,0,1,0,20.933,12,8.943,8.943,0,0,0,12,3.067Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCircleChevRight (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Circle_Chev_Right\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M13.85,11.65a.492.492,0,0,1,0,.7l-3,3a.495.495,0,0,1-.7-.7L12.79,12,10.15,9.35a.495.495,0,0,1,.7-.7Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,2.067A9.933,9.933,0,1,1,2.067,12,9.944,9.944,0,0,1,12,2.067Zm0,18.866A8.933,8.933,0,1,0,3.067,12,8.943,8.943,0,0,0,12,20.933Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCircleChevUp (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Circle_Chev_Up\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M11.65,10.15a.492.492,0,0,1,.7,0l3,3a.495.495,0,0,1-.7.7L12,11.21,9.35,13.85a.495.495,0,0,1-.7-.7Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M2.067,12A9.933,9.933,0,1,1,12,21.934,9.944,9.944,0,0,1,2.067,12Zm18.866,0A8.933,8.933,0,1,0,12,20.934,8.943,8.943,0,0,0,20.933,12Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCircleInfo (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Circle_Info\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M11.5,15a.5.5,0,0,0,1,0h0V10.981a.5.5,0,0,0-1,0Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"8.999\",\"r\":\"0.5\"},\"child\":[]}]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,2.065A9.934,9.934,0,1,1,2.066,12,9.945,9.945,0,0,1,12,2.065Zm0,18.867A8.934,8.934,0,1,0,3.066,12,8.944,8.944,0,0,0,12,20.932Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCircleList (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Circle_List\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.438,6.062h-9a.5.5,0,0,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.438,12.5h-9a.5.5,0,0,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.438,18.935h-9a.5.5,0,1,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5.562,8.062a2.5,2.5,0,1,1,2.5-2.5A2.5,2.5,0,0,1,5.562,8.062Zm0-4a1.5,1.5,0,1,0,1.5,1.5A1.5,1.5,0,0,0,5.562,4.062Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5.562,14.5a2.5,2.5,0,1,1,2.5-2.5A2.5,2.5,0,0,1,5.562,14.5Zm0-4a1.5,1.5,0,1,0,1.5,1.5A1.5,1.5,0,0,0,5.562,10.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5.562,20.938a2.5,2.5,0,1,1,2.5-2.5A2.5,2.5,0,0,1,5.562,20.938Zm0-4a1.5,1.5,0,1,0,1.5,1.5A1.5,1.5,0,0,0,5.562,16.938Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCircleMinus (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Circle_Minus\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M15,11.5h0a.5.5,0,0,1,0,1H9a.5.5,0,0,1,0-1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.934A9.933,9.933,0,1,1,21.932,12,9.945,9.945,0,0,1,12,21.934ZM12,3.068A8.933,8.933,0,1,0,20.932,12,8.944,8.944,0,0,0,12,3.068Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCircleMore (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Circle_More\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12.001\",\"cy\":\"12\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"16.001\",\"cy\":\"12\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8.001\",\"cy\":\"12\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.932A9.934,9.934,0,1,1,21.934,12,9.944,9.944,0,0,1,12,21.932ZM12,3.065A8.934,8.934,0,1,0,20.934,12,8.944,8.944,0,0,0,12,3.065Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCirclePlus (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Circle_Plus\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M15,12.5H12.5V15a.5.5,0,0,1-1,0V12.5H9a.5.5,0,0,1,0-1h2.5V9a.5.5,0,0,1,1,0v2.5H15A.5.5,0,0,1,15,12.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.932A9.934,9.934,0,1,1,21.932,12,9.944,9.944,0,0,1,12,21.932ZM12,3.065A8.934,8.934,0,1,0,20.932,12,8.944,8.944,0,0,0,12,3.065Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCircleQuestion (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Circle_Question\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M11.411,12.459a1.547,1.547,0,0,1,.341-.6,2.644,2.644,0,0,1,.535-.417,2.2,2.2,0,0,0,.363-.286,1.2,1.2,0,0,0,.256-.363A1.084,1.084,0,0,0,13,10.341a.923.923,0,0,0-.142-.517.938.938,0,0,0-.374-.338,1.123,1.123,0,0,0-.519-.119,1.173,1.173,0,0,0-.495.107.934.934,0,0,0-.389.335.884.884,0,0,0-.111.224.516.516,0,0,1-.483.359h0a.506.506,0,0,1-.479-.675,1.661,1.661,0,0,1,.178-.349,1.8,1.8,0,0,1,.748-.634,2.437,2.437,0,0,1,1.031-.215,2.4,2.4,0,0,1,1.082.231,1.737,1.737,0,0,1,.721.641,1.772,1.772,0,0,1,.257.96,1.841,1.841,0,0,1-.118.678,1.685,1.685,0,0,1-.334.536,2.289,2.289,0,0,1-.52.417,2.277,2.277,0,0,0-.462.369,1.113,1.113,0,0,0-.256.455,2.344,2.344,0,0,0-.045.283.487.487,0,0,1-.483.429h0a.484.484,0,0,1-.483-.531A2.931,2.931,0,0,1,11.411,12.459Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"11.793\",\"cy\":\"14.891\",\"r\":\"0.587\"},\"child\":[]}]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.931A9.934,9.934,0,1,1,21.934,12,9.945,9.945,0,0,1,12,21.931ZM12,3.064A8.934,8.934,0,1,0,20.934,12,8.943,8.943,0,0,0,12,3.064Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCircleRemove (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Circle_Remove\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M9.525,13.765a.5.5,0,0,0,.71.71c.59-.59,1.175-1.18,1.765-1.76l1.765,1.76a.5.5,0,0,0,.71-.71c-.59-.58-1.18-1.175-1.76-1.765.41-.42.82-.825,1.23-1.235.18-.18.35-.36.53-.53a.5.5,0,0,0-.71-.71L12,11.293,10.235,9.525a.5.5,0,0,0-.71.71L11.293,12Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.933A9.933,9.933,0,1,1,21.934,12,9.945,9.945,0,0,1,12,21.933ZM12,3.067A8.933,8.933,0,1,0,20.934,12,8.944,8.944,0,0,0,12,3.067Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiClock1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Clock_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.933A9.933,9.933,0,1,1,21.933,12,9.944,9.944,0,0,1,12,21.933ZM12,3.067A8.933,8.933,0,1,0,20.933,12,8.943,8.943,0,0,0,12,3.067Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M11.5,6a.5.5,0,0,1,1,0v4.8c1.13-1.13,2.26-2.27,3.39-3.4a.5.5,0,0,1,.71.71l-4.26,4.25a.463.463,0,0,1-.58.07c-.01-.02-.02-.02-.03-.02a.425.425,0,0,1-.22-.33Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiClock2 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Clock_2\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.933A9.933,9.933,0,1,1,21.933,12,9.944,9.944,0,0,1,12,21.933ZM12,3.067A8.933,8.933,0,1,0,20.933,12,8.943,8.943,0,0,0,12,3.067Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18,12.5H12a.429.429,0,0,1-.34-.14c-.01,0-.01-.01-.02-.02A.429.429,0,0,1,11.5,12V6a.5.5,0,0,1,1,0v5.5H18A.5.5,0,0,1,18,12.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCloudDrizzle (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Cloud_Drizzle\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.605,16.787v1.018a.5.5,0,0,0,1,0V16.787a.516.516,0,0,0-.146-.354.5.5,0,0,0-.854.354Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M11.5,16.787v1.018a.516.516,0,0,0,.146.353.5.5,0,0,0,.854-.353V16.787a.521.521,0,0,0-.146-.354.5.5,0,0,0-.854.354Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.552,20.343v1.018a.5.5,0,0,0,1,0V20.343a.516.516,0,0,0-.146-.354.5.5,0,0,0-.854.354Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.446,20.343v1.018a.5.5,0,0,0,1,0V20.343a.521.521,0,0,0-.146-.354.5.5,0,0,0-.854.354Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5.393,16.787v1.018a.5.5,0,0,0,1,0V16.787a.521.521,0,0,0-.146-.354.5.5,0,0,0-.854.354Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.1,14.228h-5.99A6.116,6.116,0,0,1,3.916,8.474h0A6.044,6.044,0,0,1,9.953,2.139a6.07,6.07,0,0,1,5.8,4.366,3.919,3.919,0,0,1,3.288,1.2,3.85,3.85,0,0,1,1.038,2.908A3.946,3.946,0,0,1,16.1,14.228ZM4.915,8.427a5.117,5.117,0,0,0,5.194,4.8H16.1a2.944,2.944,0,0,0,2.986-2.682,2.873,2.873,0,0,0-3.494-3l-.2.046-.25-.124a.592.592,0,0,1-.262-.377A5.061,5.061,0,0,0,9.953,3.139,5.043,5.043,0,0,0,4.915,8.427Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCloudMoon (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Cloud_Moon\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.36,11.54a.71.71,0,0,0-.73-.29,5.278,5.278,0,0,1-6.34-4.78,5.379,5.379,0,0,1,.37-2.42.729.729,0,0,0-.15-.78.7.7,0,0,0-.76-.16A6.317,6.317,0,0,0,9.77,8.99a5.494,5.494,0,0,0-1.22-.13A6.039,6.039,0,0,0,2.5,14.89c0,.1.01.2.01.3A6.114,6.114,0,0,0,8.7,20.94h5.99a3.941,3.941,0,0,0,3.98-3.61,3.755,3.755,0,0,0-.63-2.38A6.283,6.283,0,0,0,21.4,12.3.682.682,0,0,0,21.36,11.54Zm-6.67,8.4H8.7a5.121,5.121,0,0,1-5.19-4.8A5.042,5.042,0,0,1,8.55,9.86a5.059,5.059,0,0,1,4.92,3.95.548.548,0,0,0,.26.37l.25.13.2-.05a2.873,2.873,0,0,1,3.49,3A2.931,2.931,0,0,1,14.69,19.94Zm2.61-5.83a3.917,3.917,0,0,0-2.95-.89A6.043,6.043,0,0,0,10.78,9.3a5.338,5.338,0,0,1,2.73-4.98,6.325,6.325,0,0,0,4.51,7.85,6.642,6.642,0,0,0,2.12.17A5.2,5.2,0,0,1,17.3,14.11Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiCloudOff (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Cloud_Off\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.8,16.577c-.41.49-1.12-.22-.7-.71a3.585,3.585,0,0,0,.37-4.04A3.266,3.266,0,0,0,16.6,10.3a.5.5,0,0,1-.56-.23,5.391,5.391,0,0,0-5.3-3.1c-.64.04-.64-.96,0-1a6.346,6.346,0,0,1,5.99,3.26,4.255,4.255,0,0,1,4.6,2.1A4.579,4.579,0,0,1,20.8,16.577Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4.941,4.237a.5.5,0,0,0-.7.7l2.69,2.69a6.273,6.273,0,0,0-1.94,3.78,3.342,3.342,0,0,0-2.65,4.6,3.518,3.518,0,0,0,3.48,2.05h11.53c.58.57,1.14,1.14,1.71,1.71a.5.5,0,0,0,.71-.71Zm.3,12.81a2.352,2.352,0,0,1-2.16-2.25,2.309,2.309,0,0,1,2.35-2.42.515.515,0,0,0,.5-.5,5.377,5.377,0,0,1,1.71-3.54q4.35,4.365,8.71,8.72Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCloudOn (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Cloud_On\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.917,13.484a4.381,4.381,0,0,0-5.19-4.26,6.281,6.281,0,0,0-11.75,2.19,3.237,3.237,0,0,0-2.66,2,3.433,3.433,0,0,0,.82,3.74c1.12,1.03,2.54.89,3.94.89h10.15a4.514,4.514,0,0,0,4.69-4.32Zm-4.65,3.56c-1.19.01-2.38,0-3.56,0-2.75,0-5.49.06-8.23,0a2.383,2.383,0,0,1-2.33-1.73,2.333,2.333,0,0,1,2.28-2.94.515.515,0,0,0,.5-.5,5.3,5.3,0,0,1,10.11-1.81.5.5,0,0,0,.56.23,3.366,3.366,0,0,1,4.33,3.32A3.489,3.489,0,0,1,17.267,17.044Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiCloudRainbow (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Cloud_Rainbow\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.8,6.648a8.6,8.6,0,0,0-12.78.82,6.329,6.329,0,0,0-.761-.05,6.212,6.212,0,0,0-6.2,6.2c0,.1.01.2.01.3a6.277,6.277,0,0,0,6.351,5.89h6.159a4.04,4.04,0,0,0,4.081-3.7,3.916,3.916,0,0,0-1.07-2.97,3.98,3.98,0,0,0-3.37-1.23,5.582,5.582,0,0,0-.38-.97,2.617,2.617,0,0,1,3.75-.08c.46.45,1.169-.26.71-.71a3.66,3.66,0,0,0-2.77-1.05,3.594,3.594,0,0,0-2.2.96,6.746,6.746,0,0,0-1.02-1.12,5.131,5.131,0,0,1,7.031.17c.46.45,1.169-.26.71-.71a6.134,6.134,0,0,0-4.51-1.77,5.982,5.982,0,0,0-4.031,1.73,5.632,5.632,0,0,0-1.409-.65,7.615,7.615,0,0,1,10.99-.35C21.546,7.808,22.255,7.1,21.8,6.648Zm-10.56,2.71a.712.712,0,0,0,.11.08,5.238,5.238,0,0,1,1.979,3.06.6.6,0,0,0,.271.37l.25.13.2-.05a2.977,2.977,0,0,1,3.61,3.1,3.037,3.037,0,0,1-3.081,2.76H8.416a5.27,5.27,0,0,1-5.351-4.94,5.2,5.2,0,0,1,8.171-4.51Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiCloudSun (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Cloud_Sun\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.465,9.47l-1.9-1.05.58-2.16a.968.968,0,0,0-.25-.93.957.957,0,0,0-.93-.24l-2.09.6-1.13-1.94a.988.988,0,0,0-.83-.47.967.967,0,0,0-.82.48l-1.06,1.91-2.16-.58a.951.951,0,0,0-.92.24.962.962,0,0,0-.25.93l.6,2.1-.77.44A6.3,6.3,0,0,0,8.1,8.63a6.039,6.039,0,0,0-6.04,6.03c0,.1.01.2.01.3a6.115,6.115,0,0,0,6.19,5.76h5.98a3.952,3.952,0,0,0,3.99-3.62,3.876,3.876,0,0,0-.35-1.88l1.1.3a1.007,1.007,0,0,0,.25.03.907.907,0,0,0,.67-.28.95.95,0,0,0,.25-.92l-.6-2.1,1.93-1.12a.956.956,0,0,0,.47-.83A.945.945,0,0,0,21.465,9.47Zm-7.73,4.57a2.873,2.873,0,0,1,3.49,3,2.947,2.947,0,0,1-2.99,2.68H8.255a5.307,5.307,0,0,1-3.6-1.39,4.935,4.935,0,0,1-1.6-3.41A5.043,5.043,0,0,1,8.1,9.63a5.109,5.109,0,0,1,4.09,2.09,5.932,5.932,0,0,1,.4.65,4.974,4.974,0,0,1,.43,1.21A.64.64,0,0,0,13.735,14.04Zm-.92-3.73a2.106,2.106,0,0,1,4.133-.578,2.114,2.114,0,0,1-2.033,2.688A2.241,2.241,0,0,1,12.815,10.31Zm4.12,3.64a3.9,3.9,0,0,0-1.08-.67,3.11,3.11,0,1,0-4.01-3.34,6.475,6.475,0,0,0-1.09-.69l.06-.03a.978.978,0,0,0,.44-1.07l-.64-2.1,2.17.58a.981.981,0,0,0,1.07-.44l1.03-1.93,1.12,1.92a.952.952,0,0,0,1.08.45L19.175,6l-.57,2.14a.922.922,0,0,0,.44,1.09l1.92,1.04-1.92,1.11a.941.941,0,0,0-.45,1.08l.63,2.09Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiCloud (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Cloud\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.1,19.4H9.646a7.492,7.492,0,0,1-7.588-7.046h0A7.4,7.4,0,0,1,9.452,4.6a7.434,7.434,0,0,1,7.136,5.447,4.731,4.731,0,0,1,4.092,1.441,4.664,4.664,0,0,1,1.26,3.529A4.789,4.789,0,0,1,17.1,19.4ZM3.057,12.309A6.493,6.493,0,0,0,9.646,18.4H17.1a3.787,3.787,0,0,0,3.839-3.453,3.7,3.7,0,0,0-4.5-3.86l-.2.046-.269-.127a.617.617,0,0,1-.273-.392A6.422,6.422,0,0,0,9.452,5.6a6.4,6.4,0,0,0-6.395,6.711Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiCoffeeBean (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Coffee_Bean\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.151,4.868a6.744,6.744,0,0,0-5.96-1.69,12.009,12.009,0,0,0-6.54,3.47,11.988,11.988,0,0,0-3.48,6.55,6.744,6.744,0,0,0,1.69,5.95,6.406,6.406,0,0,0,4.63,1.78,11.511,11.511,0,0,0,7.87-3.56C21.3,13.428,22.1,7.818,19.151,4.868Zm-14.99,8.48a11.041,11.041,0,0,1,3.19-5.99,10.976,10.976,0,0,1,5.99-3.19,8.016,8.016,0,0,1,1.18-.09,5.412,5.412,0,0,1,3.92,1.49.689.689,0,0,1,.11.13,6.542,6.542,0,0,1-2.12,1.23,7.666,7.666,0,0,0-2.96,1.93,7.666,7.666,0,0,0-1.93,2.96,6.589,6.589,0,0,1-1.71,2.63,6.7,6.7,0,0,1-2.63,1.71,7.478,7.478,0,0,0-2.35,1.36A6.18,6.18,0,0,1,4.161,13.348Zm12.49,3.31c-3.55,3.55-8.52,4.35-11.08,1.79a1.538,1.538,0,0,1-.12-.13,6.677,6.677,0,0,1,2.13-1.23,7.862,7.862,0,0,0,2.96-1.93,7.738,7.738,0,0,0,1.93-2.96,6.589,6.589,0,0,1,1.71-2.63,6.589,6.589,0,0,1,2.63-1.71,7.6,7.6,0,0,0,2.34-1.37C20.791,9.2,19.821,13.488,16.651,16.658Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiCoffeeCup (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Coffee_Cup\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.79,5.67a1.5,1.5,0,0,0-1.16-1.46l-.38-1.38a1.081,1.081,0,0,0-1.05-.76H7.79a1.06,1.06,0,0,0-1.04.76L6.37,4.21A1.537,1.537,0,0,0,5.21,5.76,1.476,1.476,0,0,0,6.27,7.18l.1,2.77a.75.75,0,0,0-.42.22.768.768,0,0,0-.21.56l.24,5.76a.759.759,0,0,0,.65.72l.08,2.22a2.579,2.579,0,0,0,2.59,2.5h5.39a2.581,2.581,0,0,0,2.6-2.5l.08-2.22a.76.76,0,0,0,.64-.72l.24-5.76a.768.768,0,0,0-.21-.56.72.72,0,0,0-.41-.22l.1-2.77A1.534,1.534,0,0,0,18.79,5.67Zm-11-2.6,8.49.03.3,1.07H7.44Zm8.5,16.33a1.578,1.578,0,0,1-1.6,1.53H9.3A1.575,1.575,0,0,1,7.71,19.4l-.08-2.18h8.74ZM9.9,13.58a2.1,2.1,0,1,1,2.1,2.1A2.1,2.1,0,0,1,9.9,13.58Zm6.73-3.65H7.37l-.1-2.67h9.45Zm.66-3.67H6.71a.522.522,0,0,1-.5-.59.5.5,0,0,1,.5-.5H17.29a.528.528,0,0,1,.5.59A.5.5,0,0,1,17.29,6.26Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiCoinInsert (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Coin_Insert\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.44,17.7H17.77a7.484,7.484,0,0,0,1.78-4.86A7.55,7.55,0,1,0,6.23,17.7H2.56a.508.508,0,0,0-.5.5.5.5,0,0,0,.5.5H21.44a.5.5,0,0,0,.5-.5A.508.508,0,0,0,21.44,17.7Zm-5.03,0H7.62a6.546,6.546,0,1,1,8.78-.01Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14,13.965a1.616,1.616,0,0,1-1.5,1.61v.65a.485.485,0,0,1-.5.48.491.491,0,0,1-.5-.48v-.64h-.81a.5.5,0,0,1-.5-.5.508.508,0,0,1,.5-.5h1.69a.617.617,0,0,0,.62-.62.623.623,0,0,0-.62-.62h-.75a1.618,1.618,0,0,1-.13-3.23v-.65a.491.491,0,0,1,.5-.48.485.485,0,0,1,.5.48v.64h.81a.5.5,0,0,1,0,1H11.63a.62.62,0,0,0,0,1.24h.75A1.626,1.626,0,0,1,14,13.965Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCoins1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Coins_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.46,10.905a3.469,3.469,0,0,0-2.47,1.04,2.3,2.3,0,0,0-.86-1.73,2.257,2.257,0,0,0,.86-1.78,2.288,2.288,0,0,0-2.28-2.29H4.35a2.284,2.284,0,0,0-1.43,4.07,2.282,2.282,0,0,0,0,3.57,2.277,2.277,0,0,0,1.43,4.06h9.36a2.29,2.29,0,0,0,2.06-1.29,3.434,3.434,0,0,0,2.69,1.3,3.475,3.475,0,1,0,0-6.95Zm-4.75,5.94H4.35a1.28,1.28,0,1,1,0-2.56h9.36a1.28,1.28,0,1,1,0,2.56Zm0-3.56H4.35a1.285,1.285,0,1,1,0-2.57h9.36a1.285,1.285,0,0,1,0,2.57Zm0-3.57H4.35a1.285,1.285,0,1,1,0-2.57h9.36a1.285,1.285,0,0,1,0,2.57Zm4.75,7.14a2.475,2.475,0,1,1,2.48-2.48A2.477,2.477,0,0,1,18.46,16.855Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiCompass1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Compass_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4.661,20.937a1.589,1.589,0,0,1-1.117-.48,1.534,1.534,0,0,1-.4-1.59L6.58,8.937A3.8,3.8,0,0,1,8.938,6.58l9.93-3.439a1.537,1.537,0,0,1,1.589.4,1.532,1.532,0,0,1,.4,1.588L17.42,15.061a3.8,3.8,0,0,1-2.358,2.358l-9.93,3.439A1.442,1.442,0,0,1,4.661,20.937ZM19.337,4.062a.424.424,0,0,0-.142.024L9.267,7.525A2.8,2.8,0,0,0,7.525,9.266L4.087,19.2a.6.6,0,0,0,.717.718l9.93-3.439a2.8,2.8,0,0,0,1.741-1.741L19.913,4.8a.551.551,0,0,0-.163-.553A.609.609,0,0,0,19.337,4.062Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"1.563\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCreditCard1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Credit_Card_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.44,5.14H4.56a2.5,2.5,0,0,0-2.5,2.5v8.72a2.5,2.5,0,0,0,2.5,2.5H19.44a2.5,2.5,0,0,0,2.5-2.5V7.64A2.5,2.5,0,0,0,19.44,5.14ZM3.06,7.64a1.5,1.5,0,0,1,1.5-1.5H19.44a1.5,1.5,0,0,1,1.5,1.5v.5H3.06Zm17.88,8.72a1.5,1.5,0,0,1-1.5,1.5H4.56a1.5,1.5,0,0,1-1.5-1.5V9.64H20.94Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.063,14.247h-3a.5.5,0,1,1,0-1h3a.5.5,0,1,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.934,14.25h-6.5a.5.5,0,1,1,0-1h6.5a.5.5,0,0,1,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCreditCard2 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Credit_Card_2\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.437,18.859H4.563a2.5,2.5,0,0,1-2.5-2.5V7.641a2.5,2.5,0,0,1,2.5-2.5H19.437a2.5,2.5,0,0,1,2.5,2.5v8.718A2.5,2.5,0,0,1,19.437,18.859ZM4.563,6.141a1.5,1.5,0,0,0-1.5,1.5v8.718a1.5,1.5,0,0,0,1.5,1.5H19.437a1.5,1.5,0,0,0,1.5-1.5V7.641a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.063,14.247h-3a.5.5,0,1,1,0-1h3a.5.5,0,1,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.934,14.249h-6.5a.5.5,0,0,1,0-1h6.5a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"16.434\",\"y\":\"7.14\",\"width\":\"2\",\"height\":\"4\",\"rx\":\"0.5\",\"transform\":\"translate(8.293 26.574) rotate(-90)\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCreditCardOff (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Credit_Card_Off\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.94,7.64v9.3a.5.5,0,0,1-.5.5.5.5,0,0,1-.5-.5V9.64H13.49a.75.75,0,0,1,0-1.5h7.45v-.5a1.5,1.5,0,0,0-1.5-1.5H9.89a.5.5,0,0,1,0-1h9.55A2.5,2.5,0,0,1,21.94,7.64Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.064,14.246h-3a.5.5,0,0,1,0-1h3a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.935,14.248h-.944a.5.5,0,0,1,0-1h.944a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.76,18.05,4.01,3.3c-.46-.46-1.17.25-.71.7L4.44,5.14a2.5,2.5,0,0,0-2.38,2.5v8.72a2.5,2.5,0,0,0,2.5,2.5h13.6L20,20.7c.45.46,1.16-.25.7-.71ZM3.06,7.64a1.5,1.5,0,0,1,1.5-1.5h.88c.66.67,1.33,1.34,2,2H3.06Zm9.49,5.61h-.12a.5.5,0,0,0-.5.5.508.508,0,0,0,.5.5h1.12l3.61,3.61H4.56a1.5,1.5,0,0,1-1.5-1.5V9.64H8.94Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiCrop (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Crop\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M5.624,6.623l-2.075,-0c-0.276,-0 -0.5,-0.224 -0.5,-0.5c-0,-0.276 0.224,-0.5 0.5,-0.5l2.075,-0l0,-2.073c0,-0.276 0.224,-0.5 0.5,-0.5c0.276,0 0.5,0.224 0.5,0.5l0,2.073l9.191,-0c1.414,-0 2.561,1.147 2.561,2.561l-0,9.193l2.075,0c0.276,0 0.5,0.224 0.5,0.5c0,0.276 -0.224,0.5 -0.5,0.5l-2.075,0l-0,2.073c-0,0.276 -0.224,0.5 -0.5,0.5c-0.276,-0 -0.5,-0.224 -0.5,-0.5l-0,-2.073l-9.191,0c-1.414,0 -2.561,-1.147 -2.561,-2.561l0,-9.193Zm11.752,10.754l-0,-9.193c-0,-0.862 -0.699,-1.561 -1.561,-1.561l-9.191,-0l0,9.193c0,0.862 0.699,1.561 1.561,1.561l9.191,0Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiDark (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Dark\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12.741,20.917a9.389,9.389,0,0,1-1.395-.105,9.141,9.141,0,0,1-1.465-17.7,1.177,1.177,0,0,1,1.21.281,1.273,1.273,0,0,1,.325,1.293,8.112,8.112,0,0,0-.353,2.68,8.266,8.266,0,0,0,4.366,6.857,7.628,7.628,0,0,0,3.711.993,1.242,1.242,0,0,1,.994,1.963h0A9.148,9.148,0,0,1,12.741,20.917ZM10.261,4.05a.211.211,0,0,0-.065.011,8.137,8.137,0,1,0,9.131,12.526h0a.224.224,0,0,0,.013-.235.232.232,0,0,0-.206-.136A8.619,8.619,0,0,1,14.946,15.1a9.274,9.274,0,0,1-4.883-7.7,9.123,9.123,0,0,1,.4-3.008.286.286,0,0,0-.069-.285A.184.184,0,0,0,10.261,4.05Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiDatabase (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Database\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,2.06c-3.53,0-6.18,1.23-6.18,2.86V19.08c0,1.63,2.65,2.86,6.18,2.86s6.18-1.23,6.18-2.86V4.92C18.18,3.29,15.52,2.06,12,2.06Zm5.18,17.02c0,.78-1.97,1.86-5.18,1.86s-5.18-1.08-5.18-1.86V15.96A9.349,9.349,0,0,0,12,17.22a9.373,9.373,0,0,0,5.18-1.26Zm0-4.72c0,.78-1.97,1.86-5.18,1.86s-5.18-1.08-5.18-1.86V11.24A9.349,9.349,0,0,0,12,12.5a9.373,9.373,0,0,0,5.18-1.26Zm0-4.72c0,.78-1.97,1.86-5.18,1.86S6.82,10.42,6.82,9.64V6.52A9.349,9.349,0,0,0,12,7.78a9.373,9.373,0,0,0,5.18-1.26ZM12,6.78c-3.21,0-5.18-1.08-5.18-1.86S8.79,3.06,12,3.06s5.18,1.08,5.18,1.86S15.21,6.78,12,6.78Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiDeliveryTruck (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Delivery_Truck\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.47,11.185l-1.03-1.43a2.5,2.5,0,0,0-2.03-1.05H14.03V6.565a2.5,2.5,0,0,0-2.5-2.5H4.56a2.507,2.507,0,0,0-2.5,2.5v9.94a1.5,1.5,0,0,0,1.5,1.5H4.78a2.242,2.242,0,0,0,4.44,0h5.56a2.242,2.242,0,0,0,4.44,0h1.22a1.5,1.5,0,0,0,1.5-1.5v-3.87A2.508,2.508,0,0,0,21.47,11.185ZM7,18.935a1.25,1.25,0,1,1,1.25-1.25A1.25,1.25,0,0,1,7,18.935Zm6.03-1.93H9.15a2.257,2.257,0,0,0-4.3,0H3.56a.5.5,0,0,1-.5-.5V6.565a1.5,1.5,0,0,1,1.5-1.5h6.97a1.5,1.5,0,0,1,1.5,1.5ZM17,18.935a1.25,1.25,0,1,1,1.25-1.25A1.25,1.25,0,0,1,17,18.935Zm3.94-2.43a.5.5,0,0,1-.5.5H19.15a2.257,2.257,0,0,0-4.3,0h-.82v-7.3h4.38a1.516,1.516,0,0,1,1.22.63l1.03,1.43a1.527,1.527,0,0,1,.28.87Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.029,12.205h-2a.5.5,0,0,1,0-1h2a.5.5,0,0,1,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiDesktopMouse1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Desktop_Mouse_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M13.435,2.065h-2.87a6.5,6.5,0,0,0-6.5,6.5v6.87a6.5,6.5,0,0,0,6.5,6.5h2.87a6.5,6.5,0,0,0,6.5-6.5V8.565A6.5,6.5,0,0,0,13.435,2.065Zm-8.37,6.5a5.51,5.51,0,0,1,5.5-5.5h.94v6.44H5.065Zm13.87,6.87a5.5,5.5,0,0,1-5.5,5.5h-2.87a5.5,5.5,0,0,1-5.5-5.5v-4.93h13.87Zm0-5.93h-6.43V3.065h.93a5.5,5.5,0,0,1,5.5,5.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiDesktopMouse2 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Desktop_Mouse_2\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M13.437,21.938H10.563a6.508,6.508,0,0,1-6.5-6.5V8.562a6.508,6.508,0,0,1,6.5-6.5h2.874a6.508,6.508,0,0,1,6.5,6.5v6.876A6.508,6.508,0,0,1,13.437,21.938ZM10.563,3.062a5.506,5.506,0,0,0-5.5,5.5v6.876a5.506,5.506,0,0,0,5.5,5.5h2.874a5.506,5.506,0,0,0,5.5-5.5V8.562a5.506,5.506,0,0,0-5.5-5.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M11.5,6.541v4a.5.5,0,0,0,1,0v-4a.5.5,0,0,0-1,0Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiDesktop (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Desktop\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.435,3.065H5.565a2.5,2.5,0,0,0-2.5,2.5v8.87a2.5,2.5,0,0,0,2.5,2.5h2.91l-.37,3H7a.5.5,0,0,0,0,1h10.01a.5.5,0,0,0,0-1H15.9l-.37-3h2.91a2.5,2.5,0,0,0,2.5-2.5V5.565A2.5,2.5,0,0,0,18.435,3.065Zm-9.33,16.87.38-3h5.03l.37,3Zm10.83-5.5a1.5,1.5,0,0,1-1.5,1.5H5.565a1.5,1.5,0,0,1-1.5-1.5v-.5h15.87Zm0-1.5H4.065V5.565a1.5,1.5,0,0,1,1.5-1.5h12.87a1.5,1.5,0,0,1,1.5,1.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiDiscount1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Discount_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.953,12c0,0.591 -0.346,1.124 -0.839,1.61c-0.295,0.29 -0.639,0.568 -0.942,0.85c-0.242,0.225 -0.46,0.446 -0.562,0.692c-0.107,0.257 -0.114,0.576 -0.105,0.913c0.011,0.416 0.056,0.855 0.059,1.265c0.006,0.691 -0.123,1.304 -0.526,1.708c-0.404,0.403 -1.017,0.532 -1.708,0.526c-0.41,-0.004 -0.849,-0.048 -1.264,-0.059c-0.337,-0.009 -0.657,-0.002 -0.914,0.105c-0.246,0.102 -0.467,0.32 -0.692,0.562c-0.282,0.303 -0.56,0.647 -0.85,0.941c-0.486,0.494 -1.019,0.84 -1.61,0.84c-0.591,-0 -1.124,-0.346 -1.61,-0.84c-0.29,-0.294 -0.568,-0.638 -0.85,-0.941c-0.225,-0.242 -0.447,-0.46 -0.692,-0.562c-0.257,-0.107 -0.577,-0.114 -0.913,-0.105c-0.416,0.011 -0.855,0.055 -1.265,0.059c-0.691,0.006 -1.305,-0.123 -1.708,-0.526c-0.404,-0.404 -0.532,-1.017 -0.526,-1.708c0.003,-0.41 0.048,-0.849 0.059,-1.265c0.009,-0.337 0.002,-0.656 -0.105,-0.914c-0.102,-0.245 -0.32,-0.466 -0.562,-0.691c-0.302,-0.282 -0.646,-0.56 -0.941,-0.85c-0.493,-0.486 -0.84,-1.019 -0.84,-1.61c0,-0.591 0.347,-1.124 0.84,-1.61c0.295,-0.29 0.639,-0.568 0.941,-0.85c0.242,-0.225 0.46,-0.446 0.562,-0.691c0.107,-0.258 0.114,-0.577 0.105,-0.914c-0.011,-0.416 -0.056,-0.855 -0.059,-1.265c-0.006,-0.691 0.122,-1.304 0.526,-1.708c0.403,-0.403 1.017,-0.532 1.708,-0.526c0.41,0.004 0.849,0.048 1.265,0.059c0.336,0.009 0.656,0.002 0.913,-0.105c0.245,-0.102 0.467,-0.32 0.692,-0.562c0.282,-0.303 0.56,-0.647 0.85,-0.941c0.486,-0.494 1.019,-0.84 1.61,-0.84c0.591,0 1.124,0.346 1.61,0.84c0.29,0.294 0.568,0.638 0.85,0.941c0.225,0.242 0.446,0.46 0.692,0.562c0.257,0.107 0.577,0.114 0.914,0.105c0.415,-0.011 0.854,-0.055 1.264,-0.059c0.691,-0.006 1.304,0.123 1.708,0.526c0.403,0.404 0.532,1.017 0.526,1.708c-0.003,0.41 -0.048,0.849 -0.059,1.265c-0.009,0.337 -0.002,0.656 0.105,0.913c0.102,0.246 0.32,0.467 0.562,0.692c0.303,0.282 0.647,0.56 0.942,0.85c0.493,0.486 0.839,1.019 0.839,1.61Zm-1,0c0,-0.188 -0.088,-0.355 -0.206,-0.518c-0.164,-0.226 -0.388,-0.437 -0.622,-0.646c-0.583,-0.521 -1.205,-1.04 -1.439,-1.604c-0.242,-0.585 -0.177,-1.399 -0.136,-2.178c0.017,-0.315 0.027,-0.622 -0.015,-0.895c-0.029,-0.191 -0.08,-0.365 -0.204,-0.489c-0.125,-0.125 -0.299,-0.176 -0.49,-0.205c-0.273,-0.042 -0.58,-0.032 -0.895,-0.015c-0.779,0.041 -1.593,0.106 -2.177,-0.136c-0.565,-0.234 -1.084,-0.855 -1.605,-1.439c-0.209,-0.234 -0.42,-0.458 -0.646,-0.622c-0.163,-0.118 -0.33,-0.206 -0.518,-0.206c-0.187,0 -0.355,0.088 -0.518,0.206c-0.226,0.164 -0.437,0.388 -0.646,0.622c-0.521,0.584 -1.04,1.205 -1.605,1.439c-0.584,0.242 -1.398,0.177 -2.177,0.136c-0.315,-0.017 -0.622,-0.027 -0.895,0.015c-0.192,0.029 -0.365,0.08 -0.49,0.205c-0.125,0.124 -0.175,0.298 -0.204,0.489c-0.042,0.273 -0.032,0.58 -0.016,0.895c0.042,0.779 0.107,1.593 -0.135,2.177c-0.234,0.565 -0.855,1.084 -1.439,1.605c-0.234,0.209 -0.458,0.42 -0.622,0.646c-0.118,0.163 -0.206,0.33 -0.206,0.518c0,0.188 0.088,0.355 0.206,0.518c0.164,0.226 0.388,0.437 0.622,0.646c0.584,0.521 1.205,1.04 1.439,1.605c0.242,0.584 0.177,1.398 0.135,2.177c-0.016,0.315 -0.026,0.622 0.016,0.895c0.029,0.191 0.079,0.365 0.204,0.489c0.125,0.125 0.298,0.176 0.49,0.205c0.273,0.042 0.58,0.032 0.895,0.015c0.779,-0.041 1.593,-0.106 2.177,0.136c0.565,0.234 1.084,0.855 1.605,1.439c0.209,0.234 0.42,0.458 0.646,0.622c0.163,0.118 0.331,0.206 0.518,0.206c0.188,-0 0.355,-0.088 0.518,-0.206c0.226,-0.164 0.437,-0.388 0.646,-0.622c0.521,-0.584 1.04,-1.205 1.605,-1.439c0.584,-0.242 1.398,-0.177 2.177,-0.136c0.315,0.017 0.622,0.027 0.895,-0.015c0.191,-0.029 0.365,-0.08 0.49,-0.205c0.124,-0.124 0.175,-0.298 0.204,-0.489c0.042,-0.273 0.032,-0.58 0.015,-0.895c-0.041,-0.779 -0.106,-1.593 0.136,-2.178c0.234,-0.564 0.856,-1.083 1.439,-1.604c0.234,-0.209 0.458,-0.42 0.622,-0.646c0.118,-0.163 0.206,-0.33 0.206,-0.518Zm-10.531,-1.762c-0.396,0.396 -1.039,0.396 -1.435,-0c-0.396,-0.396 -0.396,-1.04 -0,-1.436c0.396,-0.396 1.039,-0.396 1.435,0c0.396,0.396 0.396,1.04 0,1.436Zm4.471,-1.838c0.195,-0.195 0.512,-0.195 0.707,0c0.195,0.195 0.195,0.512 -0,0.707l-6.493,6.493c-0.195,0.195 -0.512,0.195 -0.707,0c-0.195,-0.195 -0.195,-0.512 -0,-0.707l6.493,-6.493Zm-1.315,5.363c0.396,-0.396 1.039,-0.396 1.435,0c0.396,0.396 0.396,1.04 0,1.436c-0.396,0.396 -1.039,0.396 -1.435,-0c-0.397,-0.396 -0.397,-1.04 -0,-1.436Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiDollar (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Dollar\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.934A9.934,9.934,0,1,1,21.934,12,9.945,9.945,0,0,1,12,21.934ZM12,3.066A8.934,8.934,0,1,0,20.934,12,8.944,8.944,0,0,0,12,3.066Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.5,13.5a2.006,2.006,0,0,1-2,2v1.01a.5.5,0,0,1-1,0V15.5H10.25a.5.5,0,0,1,0-1H12.5a1,1,0,0,0,0-2h-1a2,2,0,0,1,0-4V7.49a.5.5,0,0,1,1,0V8.5h1.25a.5.5,0,0,1,0,1H11.5a1,1,0,0,0,0,2h1A2.006,2.006,0,0,1,14.5,13.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiDroplet (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Droplet\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.936A7.27,7.27,0,0,1,7.656,20.5c-2.332-1.724-3.187-5.6-1.868-8.46l4.875-9.173A1.515,1.515,0,0,1,12,2.064h0a1.512,1.512,0,0,1,1.337.805L18.2,12.017c1.331,2.888.475,6.762-1.856,8.485A7.274,7.274,0,0,1,12,21.936ZM12,3.064a.51.51,0,0,0-.456.274L6.683,12.485c-1.1,2.4-.376,5.777,1.568,7.212a6.4,6.4,0,0,0,7.5,0c1.942-1.435,2.668-4.817,1.554-7.237l-4.85-9.122A.507.507,0,0,0,12,3.064Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiDumbbell (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Dumbbell\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.435,11.5h-.38V8.12a1.626,1.626,0,0,0-1.62-1.62h-.63V6.12a1.625,1.625,0,0,0-3.25,0V11.5H8.445V6.12a1.625,1.625,0,0,0-3.25,0V6.5h-.63a1.62,1.62,0,0,0-1.62,1.62V11.5h-.38a.5.5,0,1,0,0,1h.38v3.37a1.622,1.622,0,0,0,1.62,1.63H5.2v.37a1.625,1.625,0,1,0,3.25,0V12.5h7.11v5.37a1.625,1.625,0,1,0,3.25,0V17.5h.63a1.628,1.628,0,0,0,1.62-1.63V12.5h.38a.5.5,0,1,0,0-1ZM5.2,16.5h-.63a.625.625,0,0,1-.62-.63V8.12a.623.623,0,0,1,.62-.62H5.2Zm2.25,1.37a.634.634,0,0,1-.63.63.625.625,0,0,1-.62-.63V6.12a.623.623,0,0,1,.62-.62.632.632,0,0,1,.63.62Zm10.36,0a.625.625,0,1,1-1.25,0V6.12a.625.625,0,0,1,1.25,0Zm2.25-2a.625.625,0,0,1-.62.63h-.63v-9h.63a.623.623,0,0,1,.62.62Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiEdit (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Edit\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3.548,20.938h16.9a.5.5,0,0,0,0-1H3.548a.5.5,0,0,0,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M9.71,17.18a2.587,2.587,0,0,0,1.12-.65l9.54-9.54a1.75,1.75,0,0,0,0-2.47l-.94-.93a1.788,1.788,0,0,0-2.47,0L7.42,13.12a2.473,2.473,0,0,0-.64,1.12L6.04,17a.737.737,0,0,0,.19.72.767.767,0,0,0,.53.22Zm.41-1.36a1.468,1.468,0,0,1-.67.39l-.97.26-1-1,.26-.97a1.521,1.521,0,0,1,.39-.67l.38-.37,1.99,1.99Zm1.09-1.08L9.22,12.75l6.73-6.73,1.99,1.99Zm8.45-8.45L18.65,7.3,16.66,5.31l1.01-1.02a.748.748,0,0,1,1.06,0l.93.94A.754.754,0,0,1,19.66,6.29Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiEraser (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Eraser\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.454,19.028h-7.01l6.62-6.63a2.935,2.935,0,0,0,.87-2.09,2.844,2.844,0,0,0-.87-2.05l-3.42-3.44a2.93,2.93,0,0,0-4.13.01L3.934,13.4a2.946,2.946,0,0,0,0,4.14l1.48,1.49H3.554a.5.5,0,0,0,0,1h16.9A.5.5,0,0,0,20.454,19.028Zm-7.24-13.5a1.956,1.956,0,0,1,2.73,0l3.42,3.44a1.868,1.868,0,0,1,.57,1.35,1.93,1.93,0,0,1-.57,1.37l-5.64,5.64-6.15-6.16Zm-1.19,13.5h-5.2l-2.18-2.2a1.931,1.931,0,0,1,0-2.72l2.23-2.23,6.15,6.15Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiExport (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Export\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M5.552,20.968a2.577,2.577,0,0,1-2.5-2.73c-.012-2.153,0-4.306,0-6.459a.5.5,0,0,1,1,0c0,2.2-.032,4.4,0,6.6.016,1.107.848,1.589,1.838,1.589H18.353A1.546,1.546,0,0,0,19.825,19a3.023,3.023,0,0,0,.1-1.061V11.779h0a.5.5,0,0,1,1,0c0,2.224.085,4.465,0,6.687a2.567,2.567,0,0,1-2.67,2.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12.337,3.176a.455.455,0,0,0-.311-.138c-.015,0-.028,0-.043-.006s-.027,0-.041.006a.457.457,0,0,0-.312.138L7.961,6.845a.5.5,0,0,0,.707.707l2.816-2.815V15.479a.5.5,0,0,0,1,0V4.737L15.3,7.552a.5.5,0,0,0,.707-.707Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiFaceFrown (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Face_Frown\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.942A9.942,9.942,0,1,1,21.942,12,9.953,9.953,0,0,1,12,21.942ZM12,3.058A8.942,8.942,0,1,0,20.942,12,8.952,8.952,0,0,0,12,3.058Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M17.206,16.481a6.033,6.033,0,0,0-10.412,0,.5.5,0,0,0,.863.5,5.033,5.033,0,0,1,8.685,0,.5.5,0,0,0,.864-.5Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"9\",\"cy\":\"9.011\",\"r\":\"1.25\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"15\",\"cy\":\"9.011\",\"r\":\"1.25\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiFaceMeh (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Face_Meh\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.942A9.942,9.942,0,1,1,21.942,12,9.953,9.953,0,0,1,12,21.942ZM12,3.058A8.942,8.942,0,1,0,20.942,12,8.952,8.952,0,0,0,12,3.058Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"9.001\",\"cy\":\"8.99\",\"r\":\"1.25\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"15.001\",\"cy\":\"8.99\",\"r\":\"1.25\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.438,15.939h7.125a.5.5,0,0,0,0-1H8.438a.5.5,0,0,0,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiFaceSmile (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Face_Smile\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.942A9.942,9.942,0,1,1,21.942,12,9.953,9.953,0,0,1,12,21.942ZM12,3.058A8.942,8.942,0,1,0,20.942,12,8.952,8.952,0,0,0,12,3.058Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.693,13.744a5.041,5.041,0,0,1-9.387,0c-.249-.59-1.111-.081-.863.505a6.026,6.026,0,0,0,11.114,0c.247-.586-.614-1.1-.864-.505Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"9\",\"cy\":\"9.011\",\"r\":\"1.25\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"15\",\"cy\":\"9.011\",\"r\":\"1.25\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiFacebook (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Facebook\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.02,4.975A9.93,9.93,0,0,0,2.07,12,9.935,9.935,0,0,0,12,21.935a9.98,9.98,0,0,0,3.8-.75,10.189,10.189,0,0,0,3.22-2.16,9.934,9.934,0,0,0,0-14.05Zm-.7,13.34A8.921,8.921,0,0,1,13,20.885v-6.56h1.88a1,1,0,0,0,0-2H13V9.585a1,1,0,0,1,1-1h1.2a1,1,0,0,0,0-2H13.5a2.5,2.5,0,0,0-2.5,2.5v3.24H9.13a1,1,0,1,0,0,2H11v6.56a8.919,8.919,0,1,1,9.26-5.47A9.061,9.061,0,0,1,18.32,18.315Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiFileOff (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"File_Off\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4,3.308a.5.5,0,0,0-.7.71l.76.76v14.67a2.5,2.5,0,0,0,2.5,2.5H17.44a2.476,2.476,0,0,0,2.28-1.51l.28.28c.45.45,1.16-.26.7-.71Zm14.92,16.33a1.492,1.492,0,0,1-1.48,1.31H6.56a1.5,1.5,0,0,1-1.5-1.5V5.778Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13.38,3.088v2.92a2.5,2.5,0,0,0,2.5,2.5h3.07l-.01,6.7a.5.5,0,0,0,1,0V8.538a2.057,2.057,0,0,0-.75-1.47c-1.3-1.26-2.59-2.53-3.89-3.8a3.924,3.924,0,0,0-1.41-1.13,6.523,6.523,0,0,0-1.71-.06H6.81a.5.5,0,0,0,0,1Zm4.83,4.42H15.88a1.5,1.5,0,0,1-1.5-1.5V3.768Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiFileOn (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"File_On\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.485,7.35l-4.97-4.86a1.466,1.466,0,0,0-1.05-.43h-6.9a2.5,2.5,0,0,0-2.5,2.5V19.44a2.507,2.507,0,0,0,2.5,2.5h10.87a2.507,2.507,0,0,0,2.5-2.5V8.42A1.49,1.49,0,0,0,19.485,7.35Zm-1.27.15h-2.34a1.5,1.5,0,0,1-1.5-1.5V3.75Zm.72,11.94a1.5,1.5,0,0,1-1.5,1.5H6.565a1.5,1.5,0,0,1-1.5-1.5V4.56a1.5,1.5,0,0,1,1.5-1.5h6.81V6a2.5,2.5,0,0,0,2.5,2.5h3.06Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiFilter (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Filter\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14.037,20.937a1.015,1.015,0,0,1-.518-.145l-3.334-2a2.551,2.551,0,0,1-1.233-2.176V12.091a1.526,1.526,0,0,0-.284-.891L4.013,4.658a1.01,1.01,0,0,1,.822-1.6h14.33a1.009,1.009,0,0,1,.822,1.6h0L15.332,11.2a1.527,1.527,0,0,0-.285.891v7.834a1.013,1.013,0,0,1-1.01,1.012ZM4.835,4.063,9.482,10.62a2.515,2.515,0,0,1,.47,1.471v4.524a1.543,1.543,0,0,0,.747,1.318l3.334,2,.014-7.843a2.516,2.516,0,0,1,.471-1.471l4.654-6.542,0,0Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiFlag1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Flag_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.565,3.18a.809.809,0,0,0-.81-.02l-1.13.56c-1.63.87-3.82.83-6.5-.13a9.141,9.141,0,0,0-7.3.52l-.76.41V3.56a.5.5,0,0,0-1,0V20.44a.5.5,0,0,0,1,0V15.9a.836.836,0,0,0,.2-.08l1.03-.55a8.163,8.163,0,0,1,6.5-.46c2.95,1.06,5.41,1.08,7.3.07l1.44-.72a.759.759,0,0,0,.4-.66V3.82A.751.751,0,0,0,20.565,3.18Zm-.63,10.16-1.31.66c-1.63.87-3.82.83-6.5-.13a9.141,9.141,0,0,0-7.3.52l-.76.4V5.65L5.3,4.99a8.122,8.122,0,0,1,6.5-.46c2.95,1.06,5.41,1.08,7.29.08l.85-.43Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiFloppyDisk (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Floppy_Disk\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.015,7.015l-4.15-3.39a2.54,2.54,0,0,0-1.58-.56H4.565a1.5,1.5,0,0,0-1.5,1.5v14.87a1.5,1.5,0,0,0,1.5,1.5h14.87a1.5,1.5,0,0,0,1.5-1.5V8.955A2.507,2.507,0,0,0,20.015,7.015ZM6.565,4.065h5.75v1.37a.5.5,0,0,1-.5.5H7.065a.5.5,0,0,1-.5-.5Zm0,15.87v-5.93a1.5,1.5,0,0,1,1.5-1.5h7.87a1.5,1.5,0,0,1,1.5,1.5v5.93Zm13.37-.5a.5.5,0,0,1-.5.5h-1v-5.93a2.507,2.507,0,0,0-2.5-2.5H8.065a2.5,2.5,0,0,0-2.5,2.5v5.93h-1a.5.5,0,0,1-.5-.5V4.565a.5.5,0,0,1,.5-.5h1v1.37a1.5,1.5,0,0,0,1.5,1.5h4.75a1.5,1.5,0,0,0,1.5-1.5V4.065h.97a1.514,1.514,0,0,1,.95.34l4.14,3.38a1.483,1.483,0,0,1,.56,1.17Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiFolderOff (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Folder_Off\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4.013,3.3a.5.5,0,0,0-.711.71l.25.25A2.438,2.438,0,0,0,2.062,6.5v11a2.453,2.453,0,0,0,2.451,2.44h14.72l.759.76c.461.46,1.171-.25.711-.7Zm.5,15.64A1.45,1.45,0,0,1,3.062,17.5V6.5a1.444,1.444,0,0,1,1.31-1.43C5.893,6.6,7.432,8.14,8.963,9.66q4.485,4.485,8.96,8.97l.31.31Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21.438,17.693a.5.5,0,0,1-.5-.5V9.175a1.445,1.445,0,0,0-1.445-1.444H12.827a1.5,1.5,0,0,1-1.474-1.225l-.05-.267a1.445,1.445,0,0,0-1.42-1.178H8.8a.5.5,0,0,1,0-1H9.883a2.446,2.446,0,0,1,2.4,1.994l.05.268a.5.5,0,0,0,.491.408h6.666a2.448,2.448,0,0,1,2.445,2.444v8.018A.5.5,0,0,1,21.438,17.693Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiFolderOn (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Folder_On\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.435,19.94H4.565a2.5,2.5,0,0,1-2.5-2.5V6.56a2.5,2.5,0,0,1,2.5-2.5h5.27A2.5,2.5,0,0,1,12.292,6.1l.042.222a.5.5,0,0,0,.491.408h6.61a2.5,2.5,0,0,1,2.5,2.5v8.21A2.5,2.5,0,0,1,19.435,19.94ZM4.565,5.06a1.5,1.5,0,0,0-1.5,1.5V17.44a1.5,1.5,0,0,0,1.5,1.5h14.87a1.5,1.5,0,0,0,1.5-1.5V9.23a1.5,1.5,0,0,0-1.5-1.5h-6.61a1.5,1.5,0,0,1-1.474-1.225l-.042-.221A1.5,1.5,0,0,0,9.835,5.06Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiFootball (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Football\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.278,4.757a1.64,1.64,0,0,0-1.03-1.04,12.248,12.248,0,0,0-15.53,15.53,1.64,1.64,0,0,0,1.04,1.03,12.306,12.306,0,0,0,3.95.66,12.262,12.262,0,0,0,11.57-16.18Zm-15.2,14.58a.725.725,0,0,1-.42-.42,11.379,11.379,0,0,1-.58-4.26l5.26,5.26A11.352,11.352,0,0,1,5.078,19.337Zm11.56-2.71a11.179,11.179,0,0,1-6.03,3.14l-6.38-6.38a11.083,11.083,0,0,1,3.14-6.02,11.193,11.193,0,0,1,6.03-3.15l6.38,6.38A11.245,11.245,0,0,1,16.638,16.627Zm3.29-7.3-5.26-5.26c.21,0,.41-.01.62-.01a11.154,11.154,0,0,1,3.63.61.682.682,0,0,1,.42.41A11.543,11.543,0,0,1,19.928,9.327Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M10.4,15.257a.5.5,0,0,0,.35.15.508.508,0,0,0,.36-.15.5.5,0,0,0,0-.7l-.48-.48L12,12.707l.48.48a.518.518,0,0,0,.35.14.543.543,0,0,0,.36-.14.513.513,0,0,0,0-.71l-.48-.48,1.37-1.37.48.48a.5.5,0,0,0,.7-.71L13.6,8.737a.5.5,0,0,0-.71,0,.5.5,0,0,0,0,.7l.49.49L12,11.3l-.48-.48a.495.495,0,1,0-.7.7l.48.48-1.37,1.38-.49-.49a.5.5,0,0,0-.7,0,.5.5,0,0,0,0,.71Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiForkAndKnife (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Fork_Knife\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.83,2.25a6.469,6.469,0,0,0-4.37,6.12v3.15a1.784,1.784,0,0,0,1.78,1.78h2.7v8.14a.5.5,0,0,0,.5.5.508.508,0,0,0,.5-.5V2.56a.508.508,0,0,0-.5-.5.467.467,0,0,0-.17.03ZM16.24,12.3a.781.781,0,0,1-.78-.78V8.37a5.482,5.482,0,0,1,3.48-5.1V12.3Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M11.44,2.07a.5.5,0,0,0-.5.5V7.55H8.5V2.57a.5.5,0,0,0-.5-.5.5.5,0,0,0-.5.5V7.55H5.06V2.57a.5.5,0,0,0-.5-.5.5.5,0,0,0-.5.5V9.05a2.507,2.507,0,0,0,2.5,2.5H7.5v9.89a.508.508,0,0,0,.5.5.5.5,0,0,0,.5-.5V11.55h.94a2.5,2.5,0,0,0,2.5-2.5V2.57A.5.5,0,0,0,11.44,2.07Zm-.5,6.98a1.5,1.5,0,0,1-1.5,1.5H6.56a1.511,1.511,0,0,1-1.5-1.5v-.5h5.88Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiFries (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Fries\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.51,9.535a1.091,1.091,0,0,0-.81-.36H17.67a.5.5,0,0,0-.17.02V4.815a1.5,1.5,0,0,0-1.5-1.5h-.5a1.3,1.3,0,0,0-.52.1,1.474,1.474,0,0,0-1.48-1.35H13a1.5,1.5,0,0,0-1.5,1.5v1.59a1.386,1.386,0,0,0-.5-.09h-.5a1.348,1.348,0,0,0-.5.09v-.34a1.5,1.5,0,0,0-1.5-1.5H8a1.5,1.5,0,0,0-1.5,1.5V9.2a.5.5,0,0,0-.17-.02H5.3a1.1,1.1,0,0,0-1.08,1.2l.85,8.98a2.84,2.84,0,0,0,2.84,2.58h8.18a2.84,2.84,0,0,0,2.84-2.58l.85-8.98A1.112,1.112,0,0,0,19.51,9.535ZM15,4.815a.5.5,0,0,1,.5-.5H16a.5.5,0,0,1,.5.5v6.14h.01A2.915,2.915,0,0,1,15,13.015Zm-2.5,8.53V3.565a.5.5,0,0,1,.5-.5h.5a.5.5,0,0,1,.5.5v9.76Zm-2.5-.02V6.565a.5.5,0,0,1,.5-.5H11a.5.5,0,0,1,.5.5v6.78ZM7.5,4.815a.5.5,0,0,1,.5-.5h.5a.5.5,0,0,1,.5.5v8.2a2.877,2.877,0,0,1-1.5-2.06Zm11.29,5.391-.85,9.049a1.85,1.85,0,0,1-1.85,1.68H7.91a1.84,1.84,0,0,1-1.84-1.68l-.86-9.08H6.33a.1.1,0,0,1,.09.08l.05.56a3.891,3.891,0,0,0,3.88,3.53h3.3a3.884,3.884,0,0,0,3.88-3.53l.05-.56a.106.106,0,0,1,.09-.08Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiGift (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Gift\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.435,5.568h-2.38a1.979,1.979,0,0,0-.51-1.92,2.022,2.022,0,0,0-2.83,0L12,5.367l-1.71-1.719a2,2,0,0,0-2.83,0,1.979,1.979,0,0,0-.51,1.92H4.565a1.5,1.5,0,0,0-1.5,1.5v1A1.487,1.487,0,0,0,4,9.448v8.99a2.507,2.507,0,0,0,2.5,2.5h11a2.5,2.5,0,0,0,2.5-2.5V9.458a1.509,1.509,0,0,0,.94-1.39v-1A1.5,1.5,0,0,0,19.435,5.568ZM8.165,4.357a1,1,0,0,1,1.41,0l1.21,1.211H8.015A.989.989,0,0,1,8.165,4.357ZM11,19.938H6.5a1.5,1.5,0,0,1-1.5-1.5V9.568h6Zm0-11.37H4.565a.5.5,0,0,1-.5-.5v-1a.5.5,0,0,1,.5-.5H11Zm3.43-4.211A1,1,0,0,1,16,5.568h-2.78ZM19,18.438a1.5,1.5,0,0,1-1.5,1.5H13V9.568h6Zm.94-10.37a.5.5,0,0,1-.5.5H13v-2h6.44a.5.5,0,0,1,.5.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiGlass (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Glass\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.279,2.54a1.475,1.475,0,0,0-1.1-.48H6.819a1.47,1.47,0,0,0-1.09.48,1.5,1.5,0,0,0-.41,1.12L6.379,19.6a2.51,2.51,0,0,0,2.49,2.34h6.26a2.519,2.519,0,0,0,2.5-2.34l1.05-15.94A1.5,1.5,0,0,0,18.279,2.54Zm-1.65,16.99a1.508,1.508,0,0,1-1.5,1.41H8.869a1.506,1.506,0,0,1-1.49-1.41l-.64-9.62a2.981,2.981,0,0,0,1.17-.49,1.828,1.828,0,0,1,1.18-.39,1.858,1.858,0,0,1,1.19.39,3.025,3.025,0,0,0,3.45,0,1.879,1.879,0,0,1,1.19-.39,1.828,1.828,0,0,1,1.18.39,3,3,0,0,0,1.16.49Zm.7-10.62a2.317,2.317,0,0,1-.69-.33,2.98,2.98,0,0,0-3.45,0,1.885,1.885,0,0,1-1.18.38,1.939,1.939,0,0,1-1.19-.38,2.818,2.818,0,0,0-1.73-.55,2.809,2.809,0,0,0-1.72.55,2.374,2.374,0,0,1-.7.33l-.35-5.32a.468.468,0,0,1,.14-.37.484.484,0,0,1,.36-.16h10.36a.523.523,0,0,1,.37.16.46.46,0,0,1,.13.37Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiGlobe (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Globe\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14.645,2.428a8.1,8.1,0,0,0-1.61-.3,9.332,9.332,0,0,0-3.6.28l-.07.02a9.928,9.928,0,0,0,.01,19.15,9.091,9.091,0,0,0,2.36.34,1.274,1.274,0,0,0,.27.02,9.65,9.65,0,0,0,2.63-.36,9.931,9.931,0,0,0,.01-19.15Zm-.27.96a8.943,8.943,0,0,1,5.84,5.11h-4.26a13.778,13.778,0,0,0-2.74-5.35A8.254,8.254,0,0,1,14.375,3.388Zm-2.37-.09a12.78,12.78,0,0,1,2.91,5.2H9.075A12.545,12.545,0,0,1,12.005,3.3Zm3.16,6.2a13.193,13.193,0,0,1,0,5.01H8.845a12.185,12.185,0,0,1-.25-2.5,12.353,12.353,0,0,1,.25-2.51Zm-5.6-6.09.07-.02a9.152,9.152,0,0,1,1.16-.23A13.618,13.618,0,0,0,8.045,8.5H3.8A9,9,0,0,1,9.565,3.408Zm-6.5,8.6a8.71,8.71,0,0,1,.37-2.51h4.39a13.95,13.95,0,0,0-.23,2.51,13.757,13.757,0,0,0,.23,2.5H3.435A8.591,8.591,0,0,1,3.065,12.008Zm6.57,8.61a8.9,8.9,0,0,1-5.84-5.11h4.24a13.632,13.632,0,0,0,2.77,5.35A8.1,8.1,0,0,1,9.635,20.618Zm-.56-5.11h5.84a12.638,12.638,0,0,1-2.91,5.21A12.872,12.872,0,0,1,9.075,15.508Zm5.3,5.11a11.551,11.551,0,0,1-1.17.24,13.8,13.8,0,0,0,2.75-5.35h4.26A8.924,8.924,0,0,1,14.375,20.618Zm1.8-6.11a13.611,13.611,0,0,0,0-5.01h4.39a8.379,8.379,0,0,1,.37,2.51,8.687,8.687,0,0,1-.36,2.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiGps (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"GPS\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,14.5A2.5,2.5,0,1,1,14.5,12,2.5,2.5,0,0,1,12,14.5Zm0-4A1.5,1.5,0,1,0,13.5,12,1.5,1.5,0,0,0,12,10.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21.435,11.505h-1.46a7.98,7.98,0,0,0-7.48-7.48V2.565a.508.508,0,0,0-.5-.5.515.515,0,0,0-.5.5v1.46a8,8,0,0,0-7.48,7.48H2.565a.5.5,0,1,0,0,1h1.45a8.012,8.012,0,0,0,7.48,7.48v1.45a.508.508,0,0,0,.5.5.5.5,0,0,0,.5-.5v-1.45a8,8,0,0,0,7.48-7.48h1.46a.5.5,0,0,0,0-1ZM12,19.005a7,7,0,1,1,7-7A7.021,7.021,0,0,1,12,19.005Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiGrid2H (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Grid__2-H\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.437,11H5.565a2.5,2.5,0,0,1-2.5-2.5V5.564a2.5,2.5,0,0,1,2.5-2.5H18.437a2.5,2.5,0,0,1,2.5,2.5V8.5A2.5,2.5,0,0,1,18.437,11ZM5.565,4.064a1.5,1.5,0,0,0-1.5,1.5V8.5a1.5,1.5,0,0,0,1.5,1.5H18.437a1.5,1.5,0,0,0,1.5-1.5V5.564a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.437,20.936H5.565a2.5,2.5,0,0,1-2.5-2.5V15.5a2.5,2.5,0,0,1,2.5-2.5H18.437a2.5,2.5,0,0,1,2.5,2.5v2.934A2.5,2.5,0,0,1,18.437,20.936ZM5.565,14a1.5,1.5,0,0,0-1.5,1.5v2.934a1.5,1.5,0,0,0,1.5,1.5H18.437a1.5,1.5,0,0,0,1.5-1.5V15.5a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiGrid2V (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Grid_2-V\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.436,20.937H15.5a2.5,2.5,0,0,1-2.5-2.5V5.565a2.5,2.5,0,0,1,2.5-2.5h2.933a2.5,2.5,0,0,1,2.5,2.5V18.437A2.5,2.5,0,0,1,18.436,20.937ZM15.5,4.065a1.5,1.5,0,0,0-1.5,1.5V18.437a1.5,1.5,0,0,0,1.5,1.5h2.933a1.5,1.5,0,0,0,1.5-1.5V5.565a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.5,20.937H5.564a2.5,2.5,0,0,1-2.5-2.5V5.565a2.5,2.5,0,0,1,2.5-2.5H8.5a2.5,2.5,0,0,1,2.5,2.5V18.437A2.5,2.5,0,0,1,8.5,20.937ZM5.564,4.065a1.5,1.5,0,0,0-1.5,1.5V18.437a1.5,1.5,0,0,0,1.5,1.5H8.5a1.5,1.5,0,0,0,1.5-1.5V5.565a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiGrid31 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Grid_3-1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M11.434,20.936H5.563a2.5,2.5,0,0,1-2.5-2.5V15.5a2.5,2.5,0,0,1,2.5-2.5h5.871a2.5,2.5,0,0,1,2.5,2.5v2.933A2.5,2.5,0,0,1,11.434,20.936ZM5.563,14a1.5,1.5,0,0,0-1.5,1.5v2.933a1.5,1.5,0,0,0,1.5,1.5h5.871a1.5,1.5,0,0,0,1.5-1.5V15.5a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.435,20.936a2.5,2.5,0,0,1-2.5-2.5V15.5a2.5,2.5,0,0,1,5,0v2.934A2.5,2.5,0,0,1,18.435,20.936Zm0-6.934a1.5,1.5,0,0,0-1.5,1.5v2.934a1.5,1.5,0,0,0,3,0V15.5A1.5,1.5,0,0,0,18.435,14Z\"},\"child\":[]}]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.435,11H5.563a2.5,2.5,0,0,1-2.5-2.5V5.564a2.5,2.5,0,0,1,2.5-2.5H18.435a2.5,2.5,0,0,1,2.5,2.5V8.5A2.5,2.5,0,0,1,18.435,11ZM5.563,4.064a1.5,1.5,0,0,0-1.5,1.5V8.5a1.5,1.5,0,0,0,1.5,1.5H18.435a1.5,1.5,0,0,0,1.5-1.5V5.564a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiGrid32 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Grid_3-2\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.437,11H12.566a2.5,2.5,0,0,1-2.5-2.5V5.564a2.5,2.5,0,0,1,2.5-2.5h5.871a2.5,2.5,0,0,1,2.5,2.5V8.5A2.5,2.5,0,0,1,18.437,11ZM12.566,4.064a1.5,1.5,0,0,0-1.5,1.5V8.5a1.5,1.5,0,0,0,1.5,1.5h5.871a1.5,1.5,0,0,0,1.5-1.5V5.564a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5.565,11a2.5,2.5,0,0,1-2.5-2.5V5.564a2.5,2.5,0,1,1,5,0V8.5A2.5,2.5,0,0,1,5.565,11Zm0-6.934a1.5,1.5,0,0,0-1.5,1.5V8.5a1.5,1.5,0,0,0,3,0V5.564A1.5,1.5,0,0,0,5.565,4.064Z\"},\"child\":[]}]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.437,20.936H5.565a2.5,2.5,0,0,1-2.5-2.5V15.5a2.5,2.5,0,0,1,2.5-2.5H18.437a2.5,2.5,0,0,1,2.5,2.5v2.934A2.5,2.5,0,0,1,18.437,20.936ZM5.565,14a1.5,1.5,0,0,0-1.5,1.5v2.934a1.5,1.5,0,0,0,1.5,1.5H18.437a1.5,1.5,0,0,0,1.5-1.5V15.5a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiGrid41 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Grid_4-1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M8.5,11H5.563a2.5,2.5,0,0,1-2.5-2.5V5.564a2.5,2.5,0,0,1,2.5-2.5H8.5a2.5,2.5,0,0,1,2.5,2.5V8.5A2.5,2.5,0,0,1,8.5,11ZM5.563,4.064a1.5,1.5,0,0,0-1.5,1.5V8.5a1.5,1.5,0,0,0,1.5,1.5H8.5A1.5,1.5,0,0,0,10,8.5V5.564a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.436,11H15.5A2.5,2.5,0,0,1,13,8.5V5.564a2.5,2.5,0,0,1,2.5-2.5h2.934a2.5,2.5,0,0,1,2.5,2.5V8.5A2.5,2.5,0,0,1,18.436,11ZM15.5,4.064a1.5,1.5,0,0,0-1.5,1.5V8.5A1.5,1.5,0,0,0,15.5,10h2.934a1.5,1.5,0,0,0,1.5-1.5V5.564a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.5,20.936H5.564a2.5,2.5,0,0,1-2.5-2.5V15.5a2.5,2.5,0,0,1,2.5-2.5H8.5A2.5,2.5,0,0,1,11,15.5v2.936A2.5,2.5,0,0,1,8.5,20.936ZM5.564,14a1.5,1.5,0,0,0-1.5,1.5v2.936a1.5,1.5,0,0,0,1.5,1.5H8.5a1.5,1.5,0,0,0,1.5-1.5V15.5A1.5,1.5,0,0,0,8.5,14Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.436,20.936H15.5a2.5,2.5,0,0,1-2.5-2.5V15.5A2.5,2.5,0,0,1,15.5,13h2.934a2.5,2.5,0,0,1,2.5,2.5v2.936A2.5,2.5,0,0,1,18.436,20.936ZM15.5,14A1.5,1.5,0,0,0,14,15.5v2.936a1.5,1.5,0,0,0,1.5,1.5h2.934a1.5,1.5,0,0,0,1.5-1.5V15.5a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiGrid42 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Grid_4-2\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M8.5,13.933H5.563a2.5,2.5,0,0,1-2.5-2.5V5.563a2.5,2.5,0,0,1,2.5-2.5H8.5a2.5,2.5,0,0,1,2.5,2.5v5.87A2.5,2.5,0,0,1,8.5,13.933ZM5.563,4.063a1.5,1.5,0,0,0-1.5,1.5v5.87a1.5,1.5,0,0,0,1.5,1.5H8.5a1.5,1.5,0,0,0,1.5-1.5V5.563a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.5,20.935H5.564a2.5,2.5,0,0,1,0-5H8.5a2.5,2.5,0,1,1,0,5Zm-2.934-4a1.5,1.5,0,0,0,0,3H8.5a1.5,1.5,0,1,0,0-3Z\"},\"child\":[]}]},{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.436,20.935H15.5a2.5,2.5,0,0,1-2.5-2.5v-5.87a2.5,2.5,0,0,1,2.5-2.5h2.934a2.5,2.5,0,0,1,2.5,2.5v5.87A2.5,2.5,0,0,1,18.436,20.935ZM15.5,11.065a1.5,1.5,0,0,0-1.5,1.5v5.87a1.5,1.5,0,0,0,1.5,1.5h2.934a1.5,1.5,0,0,0,1.5-1.5v-5.87a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.436,8.063H15.5a2.5,2.5,0,0,1,0-5h2.934a2.5,2.5,0,0,1,0,5Zm-2.934-4a1.5,1.5,0,0,0,0,3h2.934a1.5,1.5,0,0,0,0-3Z\"},\"child\":[]}]}]}]}]})(props);\n};\nexport function CiHardDrive (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Hard_Drive\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.905,14.325l-1.83-10.04a1.507,1.507,0,0,0-1.47-1.22H6.405A1.493,1.493,0,0,0,4.925,4.3l-1.84,10.03a2.452,2.452,0,0,0-.02.27v4.84a1.5,1.5,0,0,0,1.5,1.5h14.87a1.511,1.511,0,0,0,1.5-1.5V14.6A1.241,1.241,0,0,0,20.905,14.325Zm-15-9.85a.5.5,0,0,1,.5-.41h11.2a.511.511,0,0,1,.49.4l1.74,9.54H4.165Zm14.03,14.96a.5.5,0,0,1-.5.5H4.565a.5.5,0,0,1-.5-.5l.01-4.43h15.86Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"5.561\",\"cy\":\"17.47\",\"r\":\"0.5\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"7.561\",\"cy\":\"17.47\",\"r\":\"0.5\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.45,17.97a.5.5,0,0,0,0-1h-5a.5.5,0,0,0,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiHashtag (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Hashtag\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.435,15.506H16.2l.61-7h3.63a.5.5,0,0,0,.5-.5.5.5,0,0,0-.5-.5H16.9l.34-3.87a.509.509,0,0,0-.46-.54.5.5,0,0,0-.54.46l-.35,3.95H8.9l.34-3.87a.509.509,0,0,0-.46-.54.491.491,0,0,0-.54.46l-.35,3.95H3.565a.5.5,0,0,0-.5.5.5.5,0,0,0,.5.5h4.24l-.62,7H3.565a.5.5,0,0,0-.5.5.5.5,0,0,0,.5.5h3.54l-.34,3.86a.508.508,0,0,0,.45.54h.05a.516.516,0,0,0,.5-.46l.34-3.94h7l-.34,3.86a.508.508,0,0,0,.45.54h.05a.516.516,0,0,0,.5-.46l.34-3.94h4.33a.5.5,0,0,0,.5-.5A.5.5,0,0,0,20.435,15.506Zm-5.25,0H8.2l.61-7h7Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiHeadphones (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Headphones\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12.23,3.065h-.46a8.211,8.211,0,0,0-8.2,8.2v6.25a3.385,3.385,0,0,0,.89,2.3,3.423,3.423,0,0,0,2.53,1.12h.53a1.225,1.225,0,0,0,1.22-1.22v-4.4A1.225,1.225,0,0,0,7.52,14.1H7.11a3.6,3.6,0,0,0-2.54,1.05v-3.88a7.208,7.208,0,0,1,7.2-7.2h.46a7.208,7.208,0,0,1,7.2,7.2v3.88a3.6,3.6,0,0,0-2.54-1.05h-.41a1.225,1.225,0,0,0-1.22,1.22v4.4a1.225,1.225,0,0,0,1.22,1.22h.53a3.423,3.423,0,0,0,2.53-1.12,3.385,3.385,0,0,0,.89-2.3v-6.25A8.211,8.211,0,0,0,12.23,3.065ZM4.58,17.275A2.511,2.511,0,0,1,7.11,15.1h.41a.222.222,0,0,1,.22.22v4.4a.222.222,0,0,1-.22.22H6.99a2.422,2.422,0,0,1-1.79-.79,2.322,2.322,0,0,1-.63-1.63A1.927,1.927,0,0,1,4.58,17.275Zm14.22,1.87a2.422,2.422,0,0,1-1.79.79h-.53a.222.222,0,0,1-.22-.22v-4.4a.222.222,0,0,1,.22-.22h.41a2.511,2.511,0,0,1,2.53,2.18,1.927,1.927,0,0,1,.01.24A2.322,2.322,0,0,1,18.8,19.145Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiHeart (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Heart\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,20.043a.977.977,0,0,1-.7-.288L4.63,13.08A5.343,5.343,0,0,1,6.053,4.513,5.266,5.266,0,0,1,12,5.371a5.272,5.272,0,0,1,5.947-.858A5.343,5.343,0,0,1,19.37,13.08l-6.676,6.675A.977.977,0,0,1,12,20.043ZM8.355,4.963A4.015,4.015,0,0,0,6.511,5.4,4.4,4.4,0,0,0,4.122,8.643a4.345,4.345,0,0,0,1.215,3.73l6.675,6.675,6.651-6.675a4.345,4.345,0,0,0,1.215-3.73A4.4,4.4,0,0,0,17.489,5.4a4.338,4.338,0,0,0-4.968.852h0a.744.744,0,0,1-1.042,0A4.474,4.474,0,0,0,8.355,4.963Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiHome (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Home\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.37,10.22l-6.2-7.6a1.5,1.5,0,0,0-2.33-.01L4.63,10.22a2.5,2.5,0,0,0-.57,1.59v7.63a2.507,2.507,0,0,0,2.5,2.5H17.44a2.507,2.507,0,0,0,2.5-2.5V11.81A2.5,2.5,0,0,0,19.37,10.22ZM10,20.94v-5.5a1.5,1.5,0,0,1,1.5-1.5h1a1.5,1.5,0,0,1,1.5,1.5v5.5Zm8.94-1.5a1.511,1.511,0,0,1-1.5,1.5H15v-5.5a2.5,2.5,0,0,0-2.5-2.5h-1A2.5,2.5,0,0,0,9,15.44v5.5H6.56a1.511,1.511,0,0,1-1.5-1.5V11.81a1.474,1.474,0,0,1,.34-.95l6.22-7.61A.474.474,0,0,1,12,3.06a.479.479,0,0,1,.39.19l6.21,7.61a1.474,1.474,0,0,1,.34.95Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiHospital1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Hospital_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.435,7.5h-1.93V5.56a2.5,2.5,0,0,0-2.5-2.5h-4a2.5,2.5,0,0,0-2.5,2.5V7.5H5.565a2.5,2.5,0,0,0-2.5,2.5v9.44a1.511,1.511,0,0,0,1.5,1.5h14.87a1.5,1.5,0,0,0,1.5-1.5V10A2.5,2.5,0,0,0,18.435,7.5ZM7.505,19.94H4.565a.508.508,0,0,1-.5-.5V10a1.5,1.5,0,0,1,1.5-1.5h1.94Zm8,0h-1.5v-2.5a2.038,2.038,0,0,0-.59-1.42,2,2,0,0,0-3.41,1.42v2.5h-1.5V5.56a1.5,1.5,0,0,1,1.5-1.5h4a1.5,1.5,0,0,1,1.5,1.5Zm4.43-.5a.5.5,0,0,1-.5.5h-2.93V8.5h1.93a1.5,1.5,0,0,1,1.5,1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.505,8.56a.5.5,0,0,1-.5.5h-1.5v1.5a.5.5,0,0,1-.5.5.5.5,0,0,1-.5-.5V9.06h-1.5a.5.5,0,0,1-.5-.5.5.5,0,0,1,.5-.5h1.5V6.56a.5.5,0,0,1,.5-.5.508.508,0,0,1,.5.5v1.5h1.5A.508.508,0,0,1,14.505,8.56Z\"},\"child\":[]},{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M5.786,13.217a.5.5,0,0,1-.5-.5v-1.5a.5.5,0,0,1,1,0v1.5A.5.5,0,0,1,5.786,13.217Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5.786,17.717a.5.5,0,0,1-.5-.5v-1.5a.5.5,0,0,1,1,0v1.5A.5.5,0,0,1,5.786,17.717Z\"},\"child\":[]}]},{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.221,13.217a.5.5,0,0,1-.5-.5v-1.5a.5.5,0,0,1,1,0v1.5A.5.5,0,0,1,18.221,13.217Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.221,17.717a.5.5,0,0,1-.5-.5v-1.5a.5.5,0,0,1,1,0v1.5A.5.5,0,0,1,18.221,17.717Z\"},\"child\":[]}]}]}]}]})(props);\n};\nexport function CiHotdog (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Hotdog\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.1,9.349l-9.74,9.74.01.01,9.74-9.74Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.276,9.119l-.47-.47a3.157,3.157,0,0,0-.03-4.43,3.212,3.212,0,0,0-4.42-.03l-.48-.48a2.3,2.3,0,0,0-3.18,0l-7.98,7.98a2.263,2.263,0,0,0,0,3.18l.48.48a3.145,3.145,0,0,0,.03,4.42,3.089,3.089,0,0,0,2.23.92,3.126,3.126,0,0,0,2.2-.89l.47.47a2.245,2.245,0,0,0,3.18,0l7.97-7.97A2.245,2.245,0,0,0,20.276,9.119Zm-15.85,3.27,7.97-7.97a1.243,1.243,0,0,1,1.77,0l.47.47L4.9,14.629l-.47-.47A1.249,1.249,0,0,1,4.426,12.389Zm3.52,6.7a2.2,2.2,0,0,1-3.02-.03,2.149,2.149,0,0,1-.03-3.01l11.16-11.16a2.163,2.163,0,0,1,1.49-.6,2.155,2.155,0,0,1,1.55,3.65Zm11.63-7.49-7.98,7.97a1.275,1.275,0,0,1-1.76,0l-.47-.47-.01-.01,9.74-9.74.01.01.47.47A1.268,1.268,0,0,1,19.576,11.6Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6.57,17.569a.5.5,0,0,1-.354-.854,4.533,4.533,0,0,1,1.357-.967,3.491,3.491,0,0,0,1.1-.778,3.514,3.514,0,0,0,.779-1.1,5.034,5.034,0,0,1,2.324-2.324,3.517,3.517,0,0,0,1.1-.78,3.536,3.536,0,0,0,.78-1.1,4.534,4.534,0,0,1,.97-1.359,4.54,4.54,0,0,1,1.359-.97,3.53,3.53,0,0,0,1.1-.78.5.5,0,1,1,.707.707,4.516,4.516,0,0,1-1.36.969,3.506,3.506,0,0,0-1.1.781,3.535,3.535,0,0,0-.781,1.1,4.516,4.516,0,0,1-.969,1.36,4.5,4.5,0,0,1-1.359.969,4.029,4.029,0,0,0-1.874,1.874,4.5,4.5,0,0,1-.967,1.357,4.524,4.524,0,0,1-1.358.968,3.51,3.51,0,0,0-1.1.777A.5.5,0,0,1,6.57,17.569Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiIceCream (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Ice_Cream\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16.54,5.94a4.594,4.594,0,0,0-9.08,0,3.065,3.065,0,0,0-.76,5.85l3.92,9.25a1.5,1.5,0,0,0,2.76,0l3.92-9.26a3.058,3.058,0,0,0-.76-5.84ZM12.46,20.65a.5.5,0,0,1-.92,0L7.89,12.03h8.22Zm3.64-9.62H7.9a2.06,2.06,0,1,1,.01-4.12.5.5,0,0,0,.5-.48,3.6,3.6,0,0,1,7.18,0,.506.506,0,0,0,.51.48,2.06,2.06,0,0,1,0,4.12Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiImageOff (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Image_Off\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.937,14.218l0,-8.654c0,-0.829 -0.672,-1.5 -1.5,-1.5l-10.628,-0c-0.276,-0 -0.5,-0.225 -0.5,-0.5c0,-0.276 0.224,-0.5 0.5,-0.5l10.628,-0c1.38,-0 2.5,1.118 2.5,2.5l0,10.624c0,0.276 -0.224,0.5 -0.5,0.501c-0.276,-0 -0.5,-0.225 -0.5,-0.5l0,-0.556l-4.583,-4.584c-0.456,-0.456 0.251,-1.163 0.707,-0.707c0.162,0.162 2.37,2.37 3.876,3.876Zm-0.121,6.304c-0.395,0.262 -0.869,0.415 -1.379,0.415l-12.874,-0c-1.381,-0 -2.5,-1.119 -2.5,-2.5l0,-12.873c0,-0.51 0.153,-0.984 0.414,-1.38l-0.263,-0.263c-0.456,-0.456 0.251,-1.163 0.707,-0.707c0.088,0.088 0.176,0.176 0.263,0.263c0.245,0.245 16.095,16.094 16.339,16.338l0.263,0.263c0.455,0.456 -0.252,1.163 -0.707,0.707c-0.088,-0.087 -0.175,-0.175 -0.263,-0.263Zm-11.104,-11.103l-2.001,-2.001c-0.094,0.196 -0.146,0.415 -0.146,0.647c-0,0.829 0.672,1.5 1.5,1.5c0.232,-0 0.451,-0.052 0.647,-0.146Zm-2.733,-2.733l-1.77,-1.77c-0.093,0.196 -0.146,0.416 -0.146,0.648l0,10.717l1.926,-1.926c0.587,-0.586 1.536,-0.586 2.122,-0l0.555,0.554c0.195,0.196 0.511,0.196 0.706,0l2.415,-2.415l-2.343,-2.343c-0.395,0.262 -0.869,0.414 -1.379,0.414c-1.38,-0 -2.5,-1.119 -2.5,-2.5c-0,-0.509 0.152,-0.983 0.414,-1.379Zm-1.916,11.009l0,0.741c0,0.829 0.671,1.5 1.5,1.5l12.874,0c0.232,0 0.451,-0.052 0.647,-0.145c-0.165,-0.165 -3.264,-3.263 -6.59,-6.59l-2.414,2.415c-0.585,0.586 -1.537,0.586 -2.122,0l-0.554,-0.554c-0.195,-0.196 -0.512,-0.196 -0.708,0l-2.633,2.633Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiImageOn (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Image_On\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.435,3.06H5.565a2.5,2.5,0,0,0-2.5,2.5V18.44a2.507,2.507,0,0,0,2.5,2.5h12.87a2.507,2.507,0,0,0,2.5-2.5V5.56A2.5,2.5,0,0,0,18.435,3.06ZM4.065,5.56a1.5,1.5,0,0,1,1.5-1.5h12.87a1.5,1.5,0,0,1,1.5,1.5v8.66l-3.88-3.88a1.509,1.509,0,0,0-2.12,0l-4.56,4.57a.513.513,0,0,1-.71,0l-.56-.56a1.522,1.522,0,0,0-2.12,0l-1.92,1.92Zm15.87,12.88a1.5,1.5,0,0,1-1.5,1.5H5.565a1.5,1.5,0,0,1-1.5-1.5v-.75L6.7,15.06a.5.5,0,0,1,.35-.14.524.524,0,0,1,.36.14l.55.56a1.509,1.509,0,0,0,2.12,0l4.57-4.57a.5.5,0,0,1,.71,0l4.58,4.58Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.062,10.565a2.5,2.5,0,1,1,2.5-2.5A2.5,2.5,0,0,1,8.062,10.565Zm0-4a1.5,1.5,0,1,0,1.5,1.5A1.5,1.5,0,0,0,8.062,6.565Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiImport (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Import\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M5.552,20.968a2.577,2.577,0,0,1-2.5-2.73c-.012-2.153,0-4.306,0-6.459a.5.5,0,0,1,1,0c0,2.2-.032,4.4,0,6.6.016,1.107.848,1.589,1.838,1.589H18.353A1.546,1.546,0,0,0,19.825,19a3.023,3.023,0,0,0,.1-1.061V11.779h0a.5.5,0,0,1,1,0c0,2.224.085,4.465,0,6.687a2.567,2.567,0,0,1-2.67,2.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M11.63,15.818a.459.459,0,0,0,.312.138c.014,0,.027.005.042.006s.027,0,.041-.006a.457.457,0,0,0,.312-.138l3.669-3.669a.5.5,0,0,0-.707-.707l-2.815,2.815V3.515a.5.5,0,0,0-1,0V14.257L8.668,11.442a.5.5,0,0,0-.707.707Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiInboxIn (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Inbox_In\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M11.5,9.361V4.531a.5.5,0,0,1,1,0v4.82l1.27-1.27a.524.524,0,0,1,.71,0,.513.513,0,0,1,0,.71l-2.13,2.12a.492.492,0,0,1-.7,0l-2.12-2.12a.5.5,0,0,1,0-.71.511.511,0,0,1,.7,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.488,19.949H3.512A1.451,1.451,0,0,1,2.062,18.5V12.861a1.451,1.451,0,0,1,1.45-1.449h4.1a1.444,1.444,0,0,1,1.3.8l1.373,2.726a.449.449,0,0,0,.4.247h2.629a.448.448,0,0,0,.4-.248l1.373-2.724a1.442,1.442,0,0,1,1.3-.8h4.1a1.451,1.451,0,0,1,1.45,1.449V18.5A1.451,1.451,0,0,1,20.488,19.949ZM3.512,12.412a.45.45,0,0,0-.45.449V18.5a.45.45,0,0,0,.45.449H20.488a.45.45,0,0,0,.45-.449V12.861a.45.45,0,0,0-.45-.449h-4.1a.449.449,0,0,0-.4.247L14.61,15.384a1.445,1.445,0,0,1-1.295.8H10.686a1.442,1.442,0,0,1-1.295-.8L8.018,12.659a.449.449,0,0,0-.4-.247Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiInboxOut (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Inbox_Out\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.488,19.944H3.512a1.452,1.452,0,0,1-1.45-1.45V12.856a1.452,1.452,0,0,1,1.45-1.45h4.1a1.442,1.442,0,0,1,1.3.8l1.373,2.725a.449.449,0,0,0,.4.247h2.629a.448.448,0,0,0,.4-.248L15.09,12.2a1.442,1.442,0,0,1,1.3-.8h4.1a1.452,1.452,0,0,1,1.45,1.45v5.638A1.452,1.452,0,0,1,20.488,19.944ZM3.512,12.406a.451.451,0,0,0-.45.45v5.638a.45.45,0,0,0,.45.45H20.488a.45.45,0,0,0,.45-.45V12.856a.451.451,0,0,0-.45-.45h-4.1a.449.449,0,0,0-.4.247L14.61,15.378a1.445,1.445,0,0,1-1.295.8H10.686a1.444,1.444,0,0,1-1.295-.8L8.018,12.653a.449.449,0,0,0-.4-.247Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12.5,5.753v4.83a.5.5,0,0,1-1,0V5.763l-1.27,1.27a.524.524,0,0,1-.71,0,.513.513,0,0,1,0-.71l2.13-2.12a.492.492,0,0,1,.7,0l2.12,2.12a.5.5,0,0,1,0,.71.511.511,0,0,1-.7,0Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiIndent (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Indent\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,4.064H3.563a.5.5,0,0,1,0-1H20.437a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,9.688h-9a.5.5,0,0,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,15.312h-9a.5.5,0,0,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,20.936H3.563a.5.5,0,1,1,0-1H20.437a.5.5,0,1,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M7.91,11.65a.492.492,0,0,1,0,.7l-2,2a.495.495,0,0,1-.7-.7L6.36,12.5H3.54a.5.5,0,0,1,0-1H6.35c-.38-.38-.76-.76-1.14-1.15a.495.495,0,0,1,.7-.7Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiInstagram (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Instagram\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.437,20.937H5.563a2.5,2.5,0,0,1-2.5-2.5V5.563a2.5,2.5,0,0,1,2.5-2.5H18.437a2.5,2.5,0,0,1,2.5,2.5V18.437A2.5,2.5,0,0,1,18.437,20.937ZM5.563,4.063a1.5,1.5,0,0,0-1.5,1.5V18.437a1.5,1.5,0,0,0,1.5,1.5H18.437a1.5,1.5,0,0,0,1.5-1.5V5.563a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,16.594A4.595,4.595,0,1,1,16.6,12,4.6,4.6,0,0,1,12,16.594ZM12,8.4A3.595,3.595,0,1,0,15.6,12,3.6,3.6,0,0,0,12,8.4Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"17.2\",\"cy\":\"6.83\",\"r\":\"1.075\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiKeyboard (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Keyboard\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.437,18.5H4.562a2.5,2.5,0,0,1-2.5-2.5V8a2.5,2.5,0,0,1,2.5-2.5H19.437a2.5,2.5,0,0,1,2.5,2.5v8A2.5,2.5,0,0,1,19.437,18.5ZM4.562,6.5A1.5,1.5,0,0,0,3.062,8v8a1.5,1.5,0,0,0,1.5,1.5H19.437a1.5,1.5,0,0,0,1.5-1.5V8a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5.548,16.5h12.9a.5.5,0,0,0,0-1H5.548a.5.5,0,0,0,0,1Z\"},\"child\":[]},{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"5.82\",\"cy\":\"9.248\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"9.94\",\"cy\":\"9.248\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"14.06\",\"cy\":\"9.248\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18.18\",\"cy\":\"9.248\",\"r\":\"0.75\"},\"child\":[]}]},{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"5.82\",\"cy\":\"12.998\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"9.94\",\"cy\":\"12.998\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"14.06\",\"cy\":\"12.998\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18.18\",\"cy\":\"12.998\",\"r\":\"0.75\"},\"child\":[]}]}]}]}]})(props);\n};\nexport function CiLaptop (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Laptop\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.485,16.155a.992.992,0,0,0-.77-.36h-.33V6.565a2.5,2.5,0,0,0-2.5-2.5H6.115a2.5,2.5,0,0,0-2.5,2.5V15.8h-.34a1,1,0,0,0-.98,1.17l.3,1.73a1.5,1.5,0,0,0,1.48,1.24h15.85a1.5,1.5,0,0,0,1.48-1.24l.3-1.73A.986.986,0,0,0,21.485,16.155ZM4.615,6.565a1.5,1.5,0,0,1,1.5-1.5h11.77a1.5,1.5,0,0,1,1.5,1.5V15.8H4.615Zm15.8,11.96a.494.494,0,0,1-.49.41H4.075a.494.494,0,0,1-.49-.41l-.31-1.73h17.44Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiLemon (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Lemon\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M6,20.924a2.172,2.172,0,0,1-1.545-.642l-.734-.733a2.207,2.207,0,0,1-.16-2.947,1.18,1.18,0,0,0,.272-1.117A9.105,9.105,0,0,1,6.205,6.208a9.1,9.1,0,0,1,9.277-2.371,1.149,1.149,0,0,0,1.062-.229l.055-.044a2.205,2.205,0,0,1,2.946.161l.734.733a2.207,2.207,0,0,1,.16,2.947,1.179,1.179,0,0,0-.272,1.116A9.11,9.11,0,0,1,17.8,17.8,9.109,9.109,0,0,1,8.518,20.17a1.14,1.14,0,0,0-1.062.229A2.324,2.324,0,0,1,6,20.924ZM12.812,4.4a8.427,8.427,0,0,0-5.9,2.519,8.1,8.1,0,0,0-2.133,8.246,2.149,2.149,0,0,1-.395,2.014,1.227,1.227,0,0,0,.044,1.667l.734.733a1.209,1.209,0,0,0,1.613.088,2.175,2.175,0,0,1,2.067-.438,8.1,8.1,0,0,0,8.246-2.133,8.1,8.1,0,0,0,2.133-8.246,2.144,2.144,0,0,1,.395-2.013,1.229,1.229,0,0,0-.044-1.668l-.734-.733a1.206,1.206,0,0,0-1.612-.089l-.052.042a2.148,2.148,0,0,1-2.016.4A7.213,7.213,0,0,0,12.812,4.4Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6.457,12.286a.523.523,0,0,1-.178-.032.5.5,0,0,1-.29-.646,9.841,9.841,0,0,1,5.338-5.5.5.5,0,1,1,.386.921,8.845,8.845,0,0,0-4.789,4.939A.5.5,0,0,1,6.457,12.286Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiLight (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Light\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,18.09A6.09,6.09,0,1,1,18.09,12,6.1,6.1,0,0,1,12,18.09ZM12,6.91A5.09,5.09,0,1,0,17.09,12,5.1,5.1,0,0,0,12,6.91Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M11.5,2.568v1.6a.5.5,0,1,0,1,0v-1.6a.5.5,0,1,0-1,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12.5,21.432v-1.6a.5.5,0,0,0-1,0v1.6a.5.5,0,1,0,1,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21.432,11.5h-1.6a.5.5,0,0,0,0,1h1.6a.5.5,0,1,0,0-1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M2.568,12.5h1.6a.5.5,0,1,0,0-1h-1.6a.5.5,0,1,0,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.316,4.977l-.992.992-.141.141a.514.514,0,0,0-.146.353.508.508,0,0,0,.146.354.5.5,0,0,0,.354.146.515.515,0,0,0,.353-.146l.992-.992.141-.141a.515.515,0,0,0,.147-.354.508.508,0,0,0-.147-.353.5.5,0,0,0-.353-.147.522.522,0,0,0-.354.147Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5.684,19.023l.992-.992.141-.141a.514.514,0,0,0,.146-.353.508.508,0,0,0-.146-.354.5.5,0,0,0-.354-.146.515.515,0,0,0-.353.146l-.992.992-.141.141a.515.515,0,0,0-.147.354.508.508,0,0,0,.147.353.5.5,0,0,0,.353.147.522.522,0,0,0,.354-.147Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M19.023,18.316l-.992-.992-.141-.141a.514.514,0,0,0-.353-.146.508.508,0,0,0-.354.146.5.5,0,0,0-.146.354.515.515,0,0,0,.146.353l.992.992.141.141a.515.515,0,0,0,.354.147.508.508,0,0,0,.353-.147.5.5,0,0,0,.147-.353.522.522,0,0,0-.147-.354Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4.977,5.684l.992.992.141.141a.514.514,0,0,0,.353.146.508.508,0,0,0,.354-.146.5.5,0,0,0,.146-.354.515.515,0,0,0-.146-.353l-.992-.992-.141-.141A.515.515,0,0,0,5.33,4.83a.508.508,0,0,0-.353.147.5.5,0,0,0-.147.353.522.522,0,0,0,.147.354Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiLineHeight (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Line_Height\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.439,4.062h-9a.5.5,0,1,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.439,9.686h-9a.5.5,0,0,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.439,15.31h-9a.5.5,0,0,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.439,20.934h-9a.5.5,0,0,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3.208,18.8a.5.5,0,0,1,.71-.71l1.14,1.14V4.775l-1.14,1.14a.513.513,0,0,1-.71,0,.5.5,0,0,1,0-.71l2-2a.494.494,0,0,1,.34-.14.549.549,0,0,1,.37.14l2,2a.524.524,0,0,1,0,.71.5.5,0,0,1-.71,0l-1.15-1.15v14.47l1.15-1.15a.5.5,0,1,1,.71.71l-2,2a.513.513,0,0,1-.71,0Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiLink (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Link\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10.9,8a4.055,4.055,0,0,1,1.352.135,2.511,2.511,0,0,1-.7,4.863.5.5,0,0,0,0,1,3.508,3.508,0,0,0,2.944-5.2A3.557,3.557,0,0,0,11.434,7H5.59A3.5,3.5,0,0,0,5.4,14c.724.041,1.458,0,2.183,0a.5.5,0,0,0,0-1h0c-1.323,0-2.915.262-3.891-.843A2.522,2.522,0,0,1,5.59,8Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.41,17a3.5,3.5,0,0,0,.192-6.994c-.724-.041-1.458,0-2.183,0a.5.5,0,0,0,0,1h0c1.323,0,2.915-.262,3.891.843A2.522,2.522,0,0,1,18.41,16H13.1a4.055,4.055,0,0,1-1.352-.135,2.511,2.511,0,0,1,.7-4.863.5.5,0,0,0,0-1,3.508,3.508,0,0,0-2.944,5.2A3.557,3.557,0,0,0,12.566,17Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiLinkedin (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"LinkedIn\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.44,3.06H5.56a2.507,2.507,0,0,0-2.5,2.5V18.44a2.507,2.507,0,0,0,2.5,2.5H18.44a2.5,2.5,0,0,0,2.5-2.5V5.56A2.5,2.5,0,0,0,18.44,3.06Zm1.5,15.38a1.511,1.511,0,0,1-1.5,1.5H5.56a1.511,1.511,0,0,1-1.5-1.5V5.56a1.511,1.511,0,0,1,1.5-1.5H18.44a1.511,1.511,0,0,1,1.5,1.5Z\"},\"child\":[]},{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M6.376,10.748a1,1,0,1,1,2,0v6.5h0a1,1,0,0,1-2,0Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"7.376\",\"cy\":\"6.744\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M17.62,13.37v3.88a1,1,0,1,1-2,0V13.37a1.615,1.615,0,1,0-3.23,0v3.88a1,1,0,0,1-2,0v-6.5a1.016,1.016,0,0,1,1-1,.94.94,0,0,1,.84.47,3.609,3.609,0,0,1,5.39,3.15Z\"},\"child\":[]}]}]}]}]})(props);\n};\nexport function CiLocationArrow1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Location_Arrow_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14.472,20.937a1.438,1.438,0,0,1-1.3-.812L10.3,14.343a1.418,1.418,0,0,0-.642-.641L3.874,10.831A1.462,1.462,0,0,1,4.06,8.136l14.952-5a1.46,1.46,0,0,1,1.849,1.847l-5,14.952a1.439,1.439,0,0,1-1.284.994C14.543,20.936,14.507,20.937,14.472,20.937ZM19.479,4.063a.488.488,0,0,0-.149.024h0l-14.952,5a.46.46,0,0,0-.058.849L10.1,12.805A2.444,2.444,0,0,1,11.2,13.9l2.87,5.782a.443.443,0,0,0,.445.255.45.45,0,0,0,.4-.312l5-14.953a.462.462,0,0,0-.433-.607Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiLocationOff (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Location_Off\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.2,14.462a.5.5,0,0,1-.417-.775A6.791,6.791,0,0,0,18.831,9.06a6.909,6.909,0,0,0-6.022-5.946A6.834,6.834,0,0,0,8.252,4.175a.5.5,0,1,1-.545-.838,7.882,7.882,0,0,1,10.909,10.9A.5.5,0,0,1,18.2,14.462Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4,3.3a.5.5,0,0,0-.7.7l1.92,1.92a7.784,7.784,0,0,0-1.11,4.03A7.879,7.879,0,0,0,5.55,14.5l5.06,6.74a1.724,1.724,0,0,0,1.39.69,1.705,1.705,0,0,0,1.38-.69l3.06-4.09c.5.49.99.99,1.48,1.48.7.69,1.39,1.38,2.08,2.07.45.46,1.16-.25.7-.71Zm8.58,17.34a.734.734,0,0,1-.58.29.754.754,0,0,1-.59-.29l-5.05-6.73a6.9,6.9,0,0,1-.41-7.26q1.5,1.515,3.01,3.01,3.39,3.39,6.77,6.78Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiLocationOn (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Location_On\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.933a1.715,1.715,0,0,1-1.384-.691L5.555,14.5a7.894,7.894,0,1,1,12.885-.009L13.385,21.24A1.717,1.717,0,0,1,12,21.933ZM11.992,3.066A6.81,6.81,0,0,0,7.414,4.815a6.891,6.891,0,0,0-1.05,9.1l5.051,6.727a.725.725,0,0,0,.584.292h0a.732.732,0,0,0,.586-.292l5.044-6.734A6.874,6.874,0,0,0,12.81,3.113,7.277,7.277,0,0,0,11.992,3.066Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,12.5A2.5,2.5,0,1,1,14.5,10,2.5,2.5,0,0,1,12,12.5Zm0-4A1.5,1.5,0,1,0,13.5,10,1.5,1.5,0,0,0,12,8.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiLock (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Lock\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.44,9.33h-1.1V6.4a4.34,4.34,0,0,0-8.68,0V9.33H6.56a2.5,2.5,0,0,0-2.5,2.5v7.61a2.507,2.507,0,0,0,2.5,2.5H17.44a2.507,2.507,0,0,0,2.5-2.5V11.83A2.5,2.5,0,0,0,17.44,9.33ZM8.66,6.4a3.34,3.34,0,0,1,6.68,0V9.33H8.66ZM18.94,19.44a1.511,1.511,0,0,1-1.5,1.5H6.56a1.511,1.511,0,0,1-1.5-1.5V11.83a1.5,1.5,0,0,1,1.5-1.5H17.44a1.5,1.5,0,0,1,1.5,1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13,14.95a.984.984,0,0,1-.5.86v1.5a.5.5,0,0,1-1,0v-1.5a.984.984,0,0,1-.5-.86,1,1,0,0,1,2,0Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiLogin (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Login\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.944,18.432a2.577,2.577,0,0,1-2.729,2.5c-2.153.012-4.307,0-6.46,0a.5.5,0,0,1,0-1c2.2,0,4.4.032,6.6,0,1.107-.016,1.589-.848,1.589-1.838V5.63a1.545,1.545,0,0,0-.969-1.471,3.027,3.027,0,0,0-1.061-.095H11.755a.5.5,0,0,1,0-1c2.225,0,4.465-.085,6.688,0a2.566,2.566,0,0,1,2.5,2.67Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15.794,12.354a.459.459,0,0,0,.138-.312A.3.3,0,0,0,15.938,12a.29.29,0,0,0-.006-.041.455.455,0,0,0-.138-.313L12.125,7.978a.5.5,0,0,0-.707.707L14.234,11.5H3.492a.5.5,0,0,0,0,1H14.234l-2.816,2.815a.5.5,0,0,0,.707.707Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiLogout (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Logout\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.968,18.448a2.577,2.577,0,0,1-2.73,2.5c-2.153.012-4.306,0-6.459,0a.5.5,0,0,1,0-1c2.2,0,4.4.032,6.6,0,1.107-.016,1.589-.848,1.589-1.838V5.647A1.546,1.546,0,0,0,19,4.175a3.023,3.023,0,0,0-1.061-.095H11.779a.5.5,0,0,1,0-1c2.224,0,4.465-.085,6.687,0a2.567,2.567,0,0,1,2.5,2.67Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3.176,11.663a.455.455,0,0,0-.138.311c0,.015,0,.028-.006.043s0,.027.006.041a.457.457,0,0,0,.138.312l3.669,3.669a.5.5,0,0,0,.707-.707L4.737,12.516H15.479a.5.5,0,0,0,0-1H4.737L7.552,8.7a.5.5,0,0,0-.707-.707Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiLollipop (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Lollipop\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18,6.565h-.19a6,6,0,0,0-11.62,0H6a1.5,1.5,0,1,0,0,3h.19a5.992,5.992,0,0,0,5.31,4.48v7.39a.5.5,0,0,0,.5.5.5.5,0,0,0,.5-.5v-7.39a6.013,6.013,0,0,0,5.31-4.48H18a1.5,1.5,0,1,0,0-3Zm-6-3.5a4.991,4.991,0,0,1,4.77,3.5H7.23A4.991,4.991,0,0,1,12,3.065Zm0,10a4.991,4.991,0,0,1-4.77-3.5h9.54A4.991,4.991,0,0,1,12,13.065Zm6-4.5H6a.5.5,0,0,1-.5-.5.5.5,0,0,1,.5-.5H18a.5.5,0,0,1,.5.5A.508.508,0,0,1,18,8.565Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiMail (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Mail\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.435,4.065H4.565a2.5,2.5,0,0,0-2.5,2.5v10.87a2.5,2.5,0,0,0,2.5,2.5h14.87a2.5,2.5,0,0,0,2.5-2.5V6.565A2.5,2.5,0,0,0,19.435,4.065Zm-14.87,1h14.87a1.489,1.489,0,0,1,1.49,1.39c-2.47,1.32-4.95,2.63-7.43,3.95a6.172,6.172,0,0,1-1.06.53,2.083,2.083,0,0,1-1.67-.39c-1.42-.75-2.84-1.51-4.25-2.26-1.14-.6-2.3-1.21-3.44-1.82A1.491,1.491,0,0,1,4.565,5.065Zm16.37,12.37a1.5,1.5,0,0,1-1.5,1.5H4.565a1.5,1.5,0,0,1-1.5-1.5V7.6c2.36,1.24,4.71,2.5,7.07,3.75a5.622,5.622,0,0,0,1.35.6,2.872,2.872,0,0,0,2-.41c1.45-.76,2.89-1.53,4.34-2.29,1.04-.56,2.07-1.1,3.11-1.65Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiMapPin (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Map_Pin\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,2.06a5.5,5.5,0,0,0-.5,10.97v8.41a.5.5,0,0,0,.5.5.5.5,0,0,0,.5-.5V13.03A5.5,5.5,0,0,0,12,2.06Zm0,10a4.5,4.5,0,1,1,4.5-4.5A4.5,4.5,0,0,1,12,12.06Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiMap (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Map\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.21,4.576a1.906,1.906,0,0,0-1.63-.35l-3.53.89a1.086,1.086,0,0,1-.44,0L9.63,3.876a2.041,2.041,0,0,0-.92,0L4.5,4.936a1.893,1.893,0,0,0-1.44,1.84v11.15a1.871,1.871,0,0,0,.73,1.5,1.906,1.906,0,0,0,1.63.35l3.53-.89a1.086,1.086,0,0,1,.44,0l4.98,1.24a2.315,2.315,0,0,0,.46.05,2.4,2.4,0,0,0,.46-.05l4.21-1.06a1.893,1.893,0,0,0,1.44-1.84V6.076A1.871,1.871,0,0,0,20.21,4.576ZM8.67,17.926l-3.49.87a.89.89,0,0,1-1.12-.87V6.776a.9.9,0,0,1,.68-.87l3.93-.99Zm5.66,1.16-4.66-1.16V4.916l4.66,1.16Zm5.61-1.86a.9.9,0,0,1-.68.87l-3.93.99V6.076l3.49-.87a.908.908,0,0,1,.78.16.886.886,0,0,1,.34.71Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiMaximize1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Maximize_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3.065,16.16a.5.5,0,0,1,1,0v3.07l.01-.01,6.07-6.07a.5.5,0,0,1,.71.71c-.29.29-.58.57-.87.86-1.74,1.74-3.47,3.48-5.21,5.22h3.07a.5.5,0,0,1,0,1H3.565a.429.429,0,0,1-.34-.14c-.01-.01-.02-.01-.02-.02a.384.384,0,0,1-.13-.26C3.066,20.442,3.065,16.16,3.065,16.16Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.935,3.56V7.84a.5.5,0,0,1-1,0V4.77l-.01.01q-3.045,3.03-6.07,6.07a.5.5,0,0,1-.71-.71c.29-.29.58-.57.86-.86,1.75-1.74,3.48-3.48,5.22-5.22h-3.07a.5.5,0,0,1,0-1h4.28a.429.429,0,0,1,.34.14c.01.01.02.01.02.02A.429.429,0,0,1,20.935,3.56Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMaximize2 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Maximize_2\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10.513,3.066H4.93a2.058,2.058,0,0,0-1.15.22,1.6,1.6,0,0,0-.717,1.437v5.793a.5.5,0,0,0,1,0V5.107a2.521,2.521,0,0,1,.022-.689c.115-.373.469-.352.777-.352h5.651a.5.5,0,0,0,0-1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3.063,13.488v5.583a2.057,2.057,0,0,0,.221,1.15,1.6,1.6,0,0,0,1.436.717h5.793a.5.5,0,0,0,0-1H5.1a2.483,2.483,0,0,1-.689-.022c-.372-.115-.352-.469-.352-.777V13.488a.5.5,0,0,0-1,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13.487,20.934H19.07a2.058,2.058,0,0,0,1.15-.22,1.6,1.6,0,0,0,.717-1.437V13.484a.5.5,0,0,0-1,0v5.409a2.521,2.521,0,0,1-.022.689c-.115.373-.469.352-.777.352H13.487a.5.5,0,0,0,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.937,10.512V4.929a2.057,2.057,0,0,0-.221-1.15,1.6,1.6,0,0,0-1.436-.717H13.487a.5.5,0,0,0,0,1H18.9a2.483,2.483,0,0,1,.689.022c.372.115.352.469.352.777v5.651a.5.5,0,0,0,1,0Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMedal (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Medal\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.692,3.755a1.519,1.519,0,0,0-1.27-.69h-4.41a1.487,1.487,0,0,0-1.36.87L12,7.485l-1.66-3.55a1.487,1.487,0,0,0-1.36-.87H4.572a1.5,1.5,0,0,0-1.35,2.14l3.73,8.02a5.638,5.638,0,0,0-.46,2.21,5.5,5.5,0,0,0,11,0,5.419,5.419,0,0,0-.46-2.2l3.75-8.03A1.525,1.525,0,0,0,20.692,3.755ZM4.122,4.785a.527.527,0,0,1,.03-.49.494.494,0,0,1,.42-.23h4.41a.507.507,0,0,1,.46.29l2.61,5.58h-.06a5.505,5.505,0,0,0-4.43,2.25Zm7.87,15.15a4.5,4.5,0,1,1,4.5-4.5A4.5,4.5,0,0,1,11.992,19.935Zm7.89-15.15-3.46,7.4a5.454,5.454,0,0,0-3.21-2.11l-.66-1.42,2-4.3a.507.507,0,0,1,.46-.29h4.41a.482.482,0,0,1,.42.23A.505.505,0,0,1,19.882,4.785Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12.077,16.88l1.024.538a.174.174,0,0,0,.253-.184l-.2-1.14a.174.174,0,0,1,.051-.154l.828-.807a.175.175,0,0,0-.1-.3L12.8,14.669a.177.177,0,0,1-.132-.1l-.512-1.037a.174.174,0,0,0-.313,0l-.512,1.037a.174.174,0,0,1-.131.1l-1.145.166a.175.175,0,0,0-.1.3l.828.807a.174.174,0,0,1,.05.154l-.2,1.14a.174.174,0,0,0,.253.184l1.024-.538A.172.172,0,0,1,12.077,16.88Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMedicalCase (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Medical_Case\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.435,6.465h-1.43v-.9a2.5,2.5,0,0,0-2.5-2.5h-5a2.5,2.5,0,0,0-2.5,2.5v.9H5.565a2.5,2.5,0,0,0-2.5,2.5v9.47a2.5,2.5,0,0,0,2.5,2.5h12.87a2.5,2.5,0,0,0,2.5-2.5V8.965A2.5,2.5,0,0,0,18.435,6.465Zm-10.43-.9a1.5,1.5,0,0,1,1.5-1.5h5a1.5,1.5,0,0,1,1.5,1.5v.9h-8Zm11.93,12.87a1.5,1.5,0,0,1-1.5,1.5H5.565a1.5,1.5,0,0,1-1.5-1.5V8.965a1.5,1.5,0,0,1,1.5-1.5h12.87a1.5,1.5,0,0,1,1.5,1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.505,13.675a.5.5,0,0,1-.5.5h-1.5v1.5a.5.5,0,0,1-.5.5.5.5,0,0,1-.5-.5v-1.5h-1.5a.5.5,0,0,1-.5-.5.5.5,0,0,1,.5-.5h1.5v-1.5a.5.5,0,0,1,.5-.5.508.508,0,0,1,.5.5v1.5h1.5A.508.508,0,0,1,14.505,13.675Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMedicalClipboard (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Medical_Clipboard\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.44,3.5H15.75V2.97a.949.949,0,0,0-1-.91H9.25a.949.949,0,0,0-1,.91V3.5H6.56A2.5,2.5,0,0,0,4.06,6V19.44a2.5,2.5,0,0,0,2.5,2.5H17.44a2.5,2.5,0,0,0,2.5-2.5V6A2.5,2.5,0,0,0,17.44,3.5ZM9.25,3.06l5.5.01V4.19c0,.61-.69,1.12-1.5,1.12h-2.5c-.82,0-1.5-.51-1.5-1.12Zm9.69,16.38a1.511,1.511,0,0,1-1.5,1.5H6.56a1.5,1.5,0,0,1-1.5-1.5V6a1.5,1.5,0,0,1,1.5-1.5H8.28a2.4,2.4,0,0,0,2.47,1.81h2.5A2.4,2.4,0,0,0,15.72,4.5h1.72A1.5,1.5,0,0,1,18.94,6Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.5,12.71a.5.5,0,0,1-.5.5H12.5v1.5a.5.5,0,0,1-.5.5.5.5,0,0,1-.5-.5v-1.5H10a.5.5,0,0,1-.5-.5.5.5,0,0,1,.5-.5h1.5v-1.5a.5.5,0,0,1,.5-.5.508.508,0,0,1,.5.5v1.5H14A.508.508,0,0,1,14.5,12.71Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMedicalCross (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Medical_Cross\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12.943,20.93H11.057a2.388,2.388,0,0,1-2.386-2.386V15.3l-3.215.029a2.39,2.39,0,0,1-2.387-2.386V11.057A2.39,2.39,0,0,1,5.456,8.67H8.7L8.671,5.456A2.388,2.388,0,0,1,11.057,3.07h1.886a2.388,2.388,0,0,1,2.386,2.386V8.7l3.215-.03a2.39,2.39,0,0,1,2.387,2.387v1.886a2.39,2.39,0,0,1-2.387,2.386H15.3l.028,3.215A2.388,2.388,0,0,1,12.943,20.93ZM5.456,9.67a1.388,1.388,0,0,0-1.387,1.387v1.886a1.388,1.388,0,0,0,1.387,1.386H8.7a.972.972,0,0,1,.972.971v3.244a1.388,1.388,0,0,0,1.386,1.386h1.886a1.388,1.388,0,0,0,1.386-1.386V15.3a.972.972,0,0,1,.972-.971h3.243a1.388,1.388,0,0,0,1.387-1.386V11.057A1.388,1.388,0,0,0,18.544,9.67H15.3a.972.972,0,0,1-.972-.97V5.456A1.388,1.388,0,0,0,12.943,4.07H11.057A1.388,1.388,0,0,0,9.671,5.456V8.7a.972.972,0,0,1-.972.97Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiMedicalMask (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Medical_Mask\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.435,12.53H19.5V9.17h1.94a.5.5,0,0,0,.5-.5.5.5,0,0,0-.5-.5H19.5V7.23A2.5,2.5,0,0,0,17,4.73H7a2.507,2.507,0,0,0-2.5,2.5v.94H2.565a.5.5,0,0,0-.5.5.5.5,0,0,0,.5.5H4.5v3.36H2.565a.5.5,0,0,0-.5.5.5.5,0,0,0,.5.5H4.5v.33a4.283,4.283,0,0,0,2.43,3.84l1.74.82a7.79,7.79,0,0,0,6.67,0l1.73-.82h.01a4.274,4.274,0,0,0,2.42-3.84v-.33h1.94a.5.5,0,0,0,.5-.5A.5.5,0,0,0,21.435,12.53ZM18.5,13.86a3.238,3.238,0,0,1-1.85,2.93l-1.73.82a6.767,6.767,0,0,1-5.83,0l-1.73-.82A3.248,3.248,0,0,1,5.5,13.86V7.23A1.5,1.5,0,0,1,7,5.73H17a1.5,1.5,0,0,1,1.5,1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.5,14.534h-5a.5.5,0,0,1,0-1h5a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16,10.168H8a.5.5,0,1,1,0-1h8a.5.5,0,0,1,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMemoPad (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Memo_Pad\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.44,2.065H6.56a2.507,2.507,0,0,0-2.5,2.5v14.87a2.507,2.507,0,0,0,2.5,2.5H17.44a2.5,2.5,0,0,0,2.5-2.5V4.565A2.5,2.5,0,0,0,17.44,2.065Zm1.5,17.37a1.5,1.5,0,0,1-1.5,1.5H6.56a1.5,1.5,0,0,1-1.5-1.5V6.505H18.94Z\"},\"child\":[]},{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M7.549,9.506h0a.5.5,0,0,1,0-1h8.909a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M7.549,12.506h0a.5.5,0,0,1,0-1h6.5a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M7.566,18.374h0a.5.5,0,1,1,0-1h3.251a.5.5,0,0,1,0,1Z\"},\"child\":[]}]}]}]}]})(props);\n};\nexport function CiMenuBurger (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Menu_Burger\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3.563,4.063c-0.276,-0 -0.5,-0.224 -0.5,-0.5c-0,-0.276 0.224,-0.5 0.5,-0.5l16.874,-0.001c0.276,-0 0.5,0.224 0.5,0.5c0,0.276 -0.224,0.5 -0.5,0.5l-16.874,0.001Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3.563,12.501c-0.276,-0 -0.5,-0.224 -0.5,-0.5c-0,-0.276 0.224,-0.5 0.5,-0.5l16.874,-0.002c0.276,0 0.5,0.224 0.5,0.5c0,0.276 -0.224,0.5 -0.5,0.5l-16.874,0.002Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3.563,20.939c-0.276,-0 -0.5,-0.224 -0.5,-0.5c-0,-0.276 0.224,-0.5 0.5,-0.5l16.874,-0.002c0.276,0 0.5,0.224 0.5,0.5c0,0.276 -0.224,0.5 -0.5,0.5l-16.874,0.002Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiMenuFries (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Menu_Fries\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,19.937c0.276,0 0.5,0.224 0.5,0.5c0,0.276 -0.224,0.5 -0.5,0.5l-16.874,0.002c-0.276,-0 -0.5,-0.224 -0.5,-0.5c-0,-0.276 0.224,-0.5 0.5,-0.5l16.874,-0.002Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,11.5c0.276,-0 0.5,0.224 0.5,0.5c0,0.276 -0.224,0.5 -0.5,0.5l-10,0.001c-0.276,-0 -0.5,-0.224 -0.5,-0.5c-0,-0.276 0.224,-0.5 0.5,-0.5l10,-0.001Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,3.062c0.276,-0 0.5,0.224 0.5,0.5c0,0.276 -0.224,0.5 -0.5,0.5l-16.874,0.001c-0.276,-0 -0.5,-0.224 -0.5,-0.5c-0,-0.276 0.224,-0.5 0.5,-0.5l16.874,-0.001Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiMenuKebab (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Menu_Kebab\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14.5,12c0,1.38 -1.12,2.5 -2.5,2.5c-1.38,-0 -2.5,-1.12 -2.5,-2.5c0,-1.38 1.12,-2.5 2.5,-2.5c1.38,-0 2.5,1.12 2.5,2.5Zm-1,-0c0,-0.828 -0.672,-1.5 -1.5,-1.5c-0.828,-0 -1.5,0.672 -1.5,1.5c0,0.828 0.672,1.5 1.5,1.5c0.828,-0 1.5,-0.672 1.5,-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.5,4.563c0,1.38 -1.12,2.5 -2.5,2.5c-1.38,-0 -2.5,-1.12 -2.5,-2.5c0,-1.38 1.12,-2.5 2.5,-2.5c1.38,-0 2.5,1.12 2.5,2.5Zm-1,-0c0,-0.828 -0.672,-1.5 -1.5,-1.5c-0.828,-0 -1.5,0.672 -1.5,1.5c0,0.828 0.672,1.5 1.5,1.5c0.828,-0 1.5,-0.672 1.5,-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.5,19.437c0,1.38 -1.12,2.5 -2.5,2.5c-1.38,0 -2.5,-1.12 -2.5,-2.5c0,-1.38 1.12,-2.5 2.5,-2.5c1.38,0 2.5,1.12 2.5,2.5Zm-1,0c0,-0.828 -0.672,-1.5 -1.5,-1.5c-0.828,0 -1.5,0.672 -1.5,1.5c0,0.828 0.672,1.5 1.5,1.5c0.828,0 1.5,-0.672 1.5,-1.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiMicrochip (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Microchip\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M13,14.5H11A1.5,1.5,0,0,1,9.5,13V11A1.5,1.5,0,0,1,11,9.5h2A1.5,1.5,0,0,1,14.5,11v2A1.5,1.5,0,0,1,13,14.5Zm-2-4a.5.5,0,0,0-.5.5v2a.5.5,0,0,0,.5.5h2a.5.5,0,0,0,.5-.5V11a.5.5,0,0,0-.5-.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.435,14.5h-1.93v-5h1.93a.5.5,0,0,0,0-1h-1.93V8a2.507,2.507,0,0,0-2.5-2.5h-.5V3.565a.508.508,0,0,0-.5-.5.5.5,0,0,0-.5.5V5.5h-5V3.565a.508.508,0,0,0-.5-.5.5.5,0,0,0-.5.5V5.5h-.5A2.5,2.5,0,0,0,5.505,8v.5H3.565a.5.5,0,1,0,0,1h1.94v5H3.565a.5.5,0,1,0,0,1h1.94V16a2.5,2.5,0,0,0,2.5,2.5h.5v1.94a.5.5,0,0,0,1,0V18.5h5v1.94a.5.5,0,0,0,1,0V18.5h.5a2.507,2.507,0,0,0,2.5-2.5v-.5h1.93a.5.5,0,0,0,0-1ZM17.505,16a1.5,1.5,0,0,1-1.5,1.5h-8a1.5,1.5,0,0,1-1.5-1.5V8a1.5,1.5,0,0,1,1.5-1.5h8a1.511,1.511,0,0,1,1.5,1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMicrophoneOff (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Microphone_Off\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16.5,7.046v4.72a.5.5,0,0,1-1,0V9.946H14a.5.5,0,0,1,0-1h1.5v-2H13.57a.5.5,0,0,1,0-1h1.87a3.23,3.23,0,0,0-.2-.72,3.533,3.533,0,0,0-6.16-.59c-.36.53-1.23.03-.87-.5a4.509,4.509,0,0,1,7.71.21A5.255,5.255,0,0,1,16.5,7.046Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.14,19.436q-2.625-2.64-5.27-5.28Q10.685,9.986,6.51,5.8c-.65-.64-1.3-1.29-1.94-1.94a.5.5,0,0,0-.71.71Q5.69,6.381,7.5,8.206v3.92a4.591,4.591,0,0,0,3.59,4.61,4.629,4.629,0,0,0,3.9-1.04c.24.24.48.47.71.71a5.252,5.252,0,0,1-6.62.67,5.2,5.2,0,0,1-2.05-2.76,7.608,7.608,0,0,1-.24-2.33v-2.2a.5.5,0,0,0-1,0,15.463,15.463,0,0,0,.34,4.99,6.276,6.276,0,0,0,5.37,4.17v1.99H8a.5.5,0,0,0,0,1h8a.5.5,0,0,0,0-1H12.5v-2a6.118,6.118,0,0,0,3.91-1.82l1.08,1.08c.65.65,1.3,1.3,1.95,1.94A.5.5,0,0,0,20.14,19.436Zm-11.2-5.42a3.991,3.991,0,0,1-.44-2.03V9.206l5.77,5.77A3.521,3.521,0,0,1,8.94,14.016Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMicrophoneOn (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Microphone_On\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M11.989,2.065a4.507,4.507,0,0,0-4.5,4.5v5.76a4.5,4.5,0,0,0,9,0V6.565A4.507,4.507,0,0,0,11.989,2.065Zm0,13.76a3.5,3.5,0,0,1-3.5-3.5V6.565a3.5,3.5,0,0,1,6.94-.62h-1.87a.5.5,0,0,0-.5.5.5.5,0,0,0,.5.5h1.93v2h-1.93a.5.5,0,0,0-.5.5.508.508,0,0,0,.5.5h1.93v2h-1.94a.508.508,0,0,0-.5.5.515.515,0,0,0,.5.5h1.88A3.492,3.492,0,0,1,11.989,15.825Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12.489,18.925v2.01h3.5a.5.5,0,0,1,0,1h-8a.5.5,0,0,1,0-1h3.5v-1.99a6.055,6.055,0,0,1-2.74-.88,6.291,6.291,0,0,1-2.97-5.14c-.03-1.04,0-2.09,0-3.13a.5.5,0,0,1,1,0c0,1.04-.03,2.09,0,3.13A5.212,5.212,0,0,0,17.2,12.7c.01-.96,0-1.93,0-2.9a.5.5,0,0,1,1,0,26.322,26.322,0,0,1-.08,3.97A6.235,6.235,0,0,1,12.489,18.925Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMinimize1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Minimize_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M11,17.78a.5.5,0,0,1-1,0V14.71L3.92,20.79a.5.5,0,0,1-.71-.71c.29-.29.58-.57.87-.86C5.82,17.48,7.55,15.74,9.3,14H6.22a.5.5,0,0,1,0-1H10.5a.429.429,0,0,1,.34.14c.01.01.02.01.02.02a.384.384,0,0,1,.13.26Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.7,10h3.08a.5.5,0,0,1,0,1H13.5a.429.429,0,0,1-.34-.14c-.01-.01-.02-.01-.02-.02a.384.384,0,0,1-.13-.26L13,6.22a.5.5,0,0,1,1,0V9.29l.01-.01,6.07-6.07a.5.5,0,0,1,.71.71Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMinimize2 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Minimize_2\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3.563,11.016H9.146A2.057,2.057,0,0,0,10.3,10.8a1.6,1.6,0,0,0,.717-1.436V3.566a.5.5,0,0,0-1,0V8.974a2.481,2.481,0,0,1-.022.689c-.115.373-.468.353-.777.353H3.563a.5.5,0,0,0,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M11.013,20.438V14.855a2.065,2.065,0,0,0-.22-1.15,1.6,1.6,0,0,0-1.437-.717H3.563a.5.5,0,0,0,0,1H8.972a2.482,2.482,0,0,1,.689.022c.373.115.352.469.352.777v5.651a.5.5,0,0,0,1,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,12.984H14.854a2.057,2.057,0,0,0-1.15.221,1.6,1.6,0,0,0-.717,1.436v5.793a.5.5,0,0,0,1,0V15.026a2.481,2.481,0,0,1,.022-.689c.115-.373.468-.353.777-.353h5.651a.5.5,0,0,0,0-1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12.987,3.562V9.145a2.065,2.065,0,0,0,.22,1.15,1.6,1.6,0,0,0,1.437.717h5.793a.5.5,0,0,0,0-1H15.028a2.482,2.482,0,0,1-.689-.022c-.373-.115-.352-.469-.352-.777V3.562a.5.5,0,0,0-1,0Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMobile1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Mobile_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10,18.933h4a.5.5,0,0,0,0-1H10a.5.5,0,0,0,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.727,21.937H7.273a2.384,2.384,0,0,1-2.239-2.5V4.563a2.384,2.384,0,0,1,2.239-2.5h9.454a2.384,2.384,0,0,1,2.239,2.5V19.437A2.384,2.384,0,0,1,16.727,21.937ZM7.273,3.063a1.39,1.39,0,0,0-1.239,1.5V19.437a1.39,1.39,0,0,0,1.239,1.5h9.454a1.39,1.39,0,0,0,1.239-1.5V4.563a1.39,1.39,0,0,0-1.239-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMobile2 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Mobile_2\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"17.937\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.727,21.937H7.273a2.384,2.384,0,0,1-2.239-2.5V4.563a2.384,2.384,0,0,1,2.239-2.5h9.454a2.384,2.384,0,0,1,2.239,2.5V19.437A2.384,2.384,0,0,1,16.727,21.937ZM7.273,3.063a1.39,1.39,0,0,0-1.239,1.5V19.437a1.39,1.39,0,0,0,1.239,1.5h9.454a1.39,1.39,0,0,0,1.239-1.5V4.563a1.39,1.39,0,0,0-1.239-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMobile3 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Mobile_3\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16.73,2.065H7.27a2.386,2.386,0,0,0-2.24,2.5v14.87a2.386,2.386,0,0,0,2.24,2.5h9.46a2.386,2.386,0,0,0,2.24-2.5V4.565A2.386,2.386,0,0,0,16.73,2.065Zm1.24,17.37a1.391,1.391,0,0,1-1.24,1.5H7.27a1.391,1.391,0,0,1-1.24-1.5V4.565a1.391,1.391,0,0,1,1.24-1.5H8.8v.51a1,1,0,0,0,1,1h4.4a1,1,0,0,0,1-1v-.51h1.53a1.391,1.391,0,0,1,1.24,1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M10,18.934h4a.5.5,0,0,0,0-1H10a.5.5,0,0,0,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMobile4 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Mobile_4\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12.003\",\"cy\":\"18.937\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.725,2.065H7.275a2.386,2.386,0,0,0-2.24,2.5v14.87a2.386,2.386,0,0,0,2.24,2.5h9.45a2.379,2.379,0,0,0,2.24-2.5V4.565A2.379,2.379,0,0,0,16.725,2.065Zm1.24,17.37a1.384,1.384,0,0,1-1.24,1.5H7.275a1.391,1.391,0,0,1-1.24-1.5v-2.5h11.93Zm0-3.5H6.035V4.565a1.391,1.391,0,0,1,1.24-1.5h9.45a1.384,1.384,0,0,1,1.24,1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMoneyBill (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Money_Bill\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.44,5.78H4.56a2.507,2.507,0,0,0-2.5,2.5v7.44a2.514,2.514,0,0,0,2.5,2.5H19.44a2.507,2.507,0,0,0,2.5-2.5V8.28A2.5,2.5,0,0,0,19.44,5.78ZM3.06,8.28a1.5,1.5,0,0,1,1.5-1.5H6.04A3.521,3.521,0,0,1,3.06,9.76Zm1.5,8.94a1.511,1.511,0,0,1-1.5-1.5V14.24a3.521,3.521,0,0,1,2.98,2.98Zm16.38-1.5a1.5,1.5,0,0,1-1.5,1.5H17.96a3.521,3.521,0,0,1,2.98-2.98Zm0-2.49a4.528,4.528,0,0,0-3.99,3.99H7.05a4.528,4.528,0,0,0-3.99-3.99V10.77A4.528,4.528,0,0,0,7.05,6.78h9.9a4.528,4.528,0,0,0,3.99,3.99Zm0-3.47a3.521,3.521,0,0,1-2.98-2.98h1.48a1.5,1.5,0,0,1,1.5,1.5Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12.002\",\"cy\":\"11.998\",\"r\":\"2\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMoneyCheck1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Money_Check_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.437,18.218H4.563a2.5,2.5,0,0,1-2.5-2.5V8.282a2.5,2.5,0,0,1,2.5-2.5H19.437a2.5,2.5,0,0,1,2.5,2.5v7.436A2.5,2.5,0,0,1,19.437,18.218ZM4.563,6.782a1.5,1.5,0,0,0-1.5,1.5v7.436a1.5,1.5,0,0,0,1.5,1.5H19.437a1.5,1.5,0,0,0,1.5-1.5V8.282a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,12.786H5.064a.5.5,0,0,1,0-1H12a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14,15.714H5.064a.5.5,0,1,1,0-1H14a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"15.436\",\"y\":\"8.283\",\"width\":\"4\",\"height\":\"2\",\"rx\":\"0.5\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiMonitor (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Monitor\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.435,3.06H5.565a2.5,2.5,0,0,0-2.5,2.5v8.88a2.507,2.507,0,0,0,2.5,2.5h2.91l-.37,3H7a.5.5,0,0,0,0,1h10.01a.5.5,0,0,0,0-1H15.9l-.37-3h2.91a2.507,2.507,0,0,0,2.5-2.5V5.56A2.5,2.5,0,0,0,18.435,3.06ZM14.9,19.94H9.115l.37-3h5.03Zm5.04-5.5a1.5,1.5,0,0,1-1.5,1.5H5.565a1.5,1.5,0,0,1-1.5-1.5V5.56a1.5,1.5,0,0,1,1.5-1.5h12.87a1.5,1.5,0,0,1,1.5,1.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiMountain1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Mountain_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.857,19.525l-6.57-14.96a2.5,2.5,0,0,0-4.58-.01l-6.56,14.96a1,1,0,0,0,.07.96.985.985,0,0,0,.84.46h15.89a1,1,0,0,0,.91-1.41ZM10.627,4.965a1.5,1.5,0,0,1,2.75,0l2.43,5.53-1.45,1.45a.5.5,0,0,1-.71,0l-2.04-2.03a1.5,1.5,0,0,0-1.06-.44h-1.9Zm-6.57,14.96,4.15-9.45h2.34a.491.491,0,0,1,.36.15l2.03,2.03A1.508,1.508,0,0,0,14,13.1a1.491,1.491,0,0,0,1.06-.44l1.18-1.17,3.71,8.45Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiMug1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Mug_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.115,5.91V4.97a1.2,1.2,0,0,0-1.2-1.2H4.265a1.2,1.2,0,0,0-1.2,1.2v9.14a11.321,11.321,0,0,0,.8,4.17A3.3,3.3,0,0,0,7,20.23h7.19a3.312,3.312,0,0,0,3.14-1.95,10.989,10.989,0,0,0,.74-3.13l1.04-.52a3.319,3.319,0,0,0,1.83-2.97V9.19A3.326,3.326,0,0,0,18.115,5.91Zm-1.73,12.01a2.3,2.3,0,0,1-2.2,1.31H7a2.312,2.312,0,0,1-2.2-1.31,10.238,10.238,0,0,1-.73-3.81V4.97a.2.2,0,0,1,.2-.2h12.65a.2.2,0,0,1,.2.2v9.14A10.238,10.238,0,0,1,16.385,17.92Zm3.55-6.26a2.287,2.287,0,0,1-1.28,2.07l-.54.27V6.93a2.316,2.316,0,0,1,1.82,2.26Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiMusicNote1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Music_Note_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.05,3.657a2.487,2.487,0,0,0-2.03-.56l-7.88,1.33a2.483,2.483,0,0,0-2.08,2.46v8.82a3,3,0,1,0,1,2.23V9.387l10.88-1.83v6.22a2.936,2.936,0,0,0-2-.77,3,3,0,1,0,3,3V5.567A2.513,2.513,0,0,0,20.05,3.657ZM6.06,19.937a2,2,0,1,1,2-2A1.993,1.993,0,0,1,6.06,19.937Zm11.88-1.93a2,2,0,1,1,2-2A2,2,0,0,1,17.94,18.007Zm2-11.46L9.06,8.377V6.887a1.483,1.483,0,0,1,1.25-1.47l7.88-1.33a1.493,1.493,0,0,1,1.75,1.48Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiNoWaitingSign (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"No_Waiting_Sign\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,2.07a9.93,9.93,0,1,0,7.03,16.95.374.374,0,0,0,.06-.07A9.837,9.837,0,0,0,21.935,12,9.944,9.944,0,0,0,12,2.07Zm0,18.86A8.945,8.945,0,0,1,3.065,12a8.84,8.84,0,0,1,2.28-5.95l12.61,12.61A8.925,8.925,0,0,1,12,20.93Zm6.67-2.98L6.045,5.34a8.934,8.934,0,0,1,12.62,12.61Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiPalette (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Palette\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.31,20.93a1.62,1.62,0,0,0,1.62-1.62V15.93a1.62,1.62,0,0,0-1.62-1.62H14.37l4.66-4.66a1.642,1.642,0,0,0,0-2.3L16.64,4.96a1.636,1.636,0,0,0-2.3,0L9.69,9.62V4.56a1.5,1.5,0,0,0-1.5-1.5H4.57a1.5,1.5,0,0,0-1.5,1.5V18.44a2.507,2.507,0,0,0,2.5,2.5ZM9.69,11.04l5.36-5.37a.628.628,0,0,1,.88,0l2.39,2.39a.628.628,0,0,1,0,.88L9.69,17.57ZM4.07,4.56a.5.5,0,0,1,.5-.5H8.19a.5.5,0,0,1,.5.5V8.48H4.07Zm0,4.92H8.69v4.43H4.07ZM7.29,19.93l-1.72.01a1.5,1.5,0,0,1-1.5-1.5V14.91H8.69v3.53a1.5,1.5,0,0,1-1.4,1.49m12.64-.62a.623.623,0,0,1-.62.62H9.19a2.381,2.381,0,0,0,.42-.86l3.76-3.76h5.94a.623.623,0,0,1,.62.62Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"6.382\",\"cy\":\"17.419\",\"r\":\"0.844\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiPaperplane (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Paper_Plane\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.061,11.077,3.741,4.157a.994.994,0,0,0-1.17.32,1,1,0,0,0-.01,1.22l4.49,6a.525.525,0,0,1-.01.62L2.511,18.3a1.02,1.02,0,0,0,0,1.22,1,1,0,0,0,.8.4,1.021,1.021,0,0,0,.38-.07l17.36-6.9a1.006,1.006,0,0,0,.01-1.87ZM3.371,5.087l16.06,6.42H8.061a1.329,1.329,0,0,0-.21-.41Zm-.06,13.82,4.53-5.98a1.212,1.212,0,0,0,.22-.42h11.38Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiParking1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Parking_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.933A9.933,9.933,0,1,1,21.933,12,9.944,9.944,0,0,1,12,21.933ZM12,3.067A8.933,8.933,0,1,0,20.933,12,8.943,8.943,0,0,0,12,3.067Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12.569,8.5h-1.75a.749.749,0,0,0-.75.75v5.74a.5.5,0,0,0,.5.5.5.5,0,0,0,.5-.5V13.5h1.5a2.5,2.5,0,0,0,0-5Zm0,4h-1.5v-3h1.5a1.5,1.5,0,0,1,0,3Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiPassport1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Passport_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16.5,21.936h-9a2.5,2.5,0,0,1-2.5-2.5V4.564a2.5,2.5,0,0,1,2.5-2.5h9a2.5,2.5,0,0,1,2.5,2.5V19.436A2.5,2.5,0,0,1,16.5,21.936ZM7.5,3.064A1.5,1.5,0,0,0,6,4.564V19.436a1.5,1.5,0,0,0,1.5,1.5h9a1.5,1.5,0,0,0,1.5-1.5V4.564a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,12.563a3.5,3.5,0,1,1,3.5-3.5A3.5,3.5,0,0,1,12,12.563Zm0-6a2.5,2.5,0,1,0,2.5,2.5A2.5,2.5,0,0,0,12,6.563Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15,18.438H9a.5.5,0,0,1,0-1h6a.5.5,0,1,1,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiPause1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Pause_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M8.25,21.937H6.564a2.5,2.5,0,0,1-2.5-2.5V4.563a2.5,2.5,0,0,1,2.5-2.5H8.25a2.5,2.5,0,0,1,2.5,2.5V19.437A2.5,2.5,0,0,1,8.25,21.937ZM6.564,3.063a1.5,1.5,0,0,0-1.5,1.5V19.437a1.5,1.5,0,0,0,1.5,1.5H8.25a1.5,1.5,0,0,0,1.5-1.5V4.563a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M17.436,21.937H15.75a2.5,2.5,0,0,1-2.5-2.5V4.563a2.5,2.5,0,0,1,2.5-2.5h1.686a2.5,2.5,0,0,1,2.5,2.5V19.437A2.5,2.5,0,0,1,17.436,21.937ZM15.75,3.063a1.5,1.5,0,0,0-1.5,1.5V19.437a1.5,1.5,0,0,0,1.5,1.5h1.686a1.5,1.5,0,0,0,1.5-1.5V4.563a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiPen (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Pen\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.235,11.284a2.3,2.3,0,0,0-3.01-.149L15.444,5.744a2.484,2.484,0,0,0-2.1-1.7l-8.581-.93A1.5,1.5,0,0,0,3.115,4.765l.93,8.579a2.479,2.479,0,0,0,1.7,2.1l5.39,1.77a2.258,2.258,0,0,0-.51,1.43,2.257,2.257,0,0,0,2.25,2.25,2.263,2.263,0,0,0,1.591-.661l5.77-5.769a2.249,2.249,0,0,0,0-3.181Zm-14.18,3.21a1.5,1.5,0,0,1-1.02-1.26l-.9-8.39,4.01,4.01a1.188,1.188,0,0,0,.281,1.221,1.167,1.167,0,1,0,1.649-1.651,1.143,1.143,0,0,0-1.209-.269l-4.02-4.02,8.39.9a1.476,1.476,0,0,1,1.259,1.02l1.931,5.86-4.51,4.51Zm11.709-2.51a1.25,1.25,0,0,1,2.13.891,1.237,1.237,0,0,1-.369.88l-5.771,5.77a1.277,1.277,0,0,1-1.769,0,1.253,1.253,0,0,1,0-1.76Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiPenpot (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"id\":\"Penpot\",\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4.415,7.22a.755.755,0,0,0-.35.64v9.67a1.536,1.536,0,0,0,.88,1.38l5.96,2.82a2.618,2.618,0,0,0,2.19,0l5.96-2.82a1.536,1.536,0,0,0,.88-1.38V7.86a.742.742,0,0,0-.36-.64l-2.23-1.15v-1a.98.98,0,0,0-.15-.52l-1.33-2.16a.749.749,0,0,0-1.28,0L13.3,4.5l-.66-1.07A.755.755,0,0,0,12,3.08a.791.791,0,0,0-.64.36l-.65,1.06L9.4,2.39a.749.749,0,0,0-1.28,0L6.805,4.55a.98.98,0,0,0-.15.52v1Zm12.93-.01.7.35-.7.33Zm-2.44-3.43h.64l.5.81h-1.64Zm1.44,1.81V8.36l-.61.29V5.59Zm-2.23,0h.62V9.12l-.62.3ZM8.445,3.78h.64l.5.81H7.945Zm1.44,1.81V9.41l-.61-.29V5.59Zm-2.23,0h.62V8.65l-.62-.29Zm-1,1.62v.68l-.7-.33ZM5.365,18a.52.52,0,0,1-.3-.47V8.24l6.43,3.04v9.59Zm6.13-7.83-.61-.29V6.64h.61Zm-.32-4.53.51-.82h.62l.51.82Zm1.94,1V9.89l-.62.29V6.64ZM12.5,20.88V11.29l6.44-3.05v9.29a.512.512,0,0,1-.31.47Z\"},\"child\":[]}]})(props);\n};\nexport function CiPercent (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Percent\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.934A9.934,9.934,0,1,1,21.933,12,9.945,9.945,0,0,1,12,21.934ZM12,3.066A8.934,8.934,0,1,0,20.933,12,8.944,8.944,0,0,0,12,3.066Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M9,10.258a1.5,1.5,0,1,1,1.061-.439h0A1.5,1.5,0,0,1,9,10.258Zm0-2a.5.5,0,1,0,.353.146A.5.5,0,0,0,9,8.259Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M7.758,16.743A.5.5,0,0,1,7.4,15.89L15.889,7.4a.5.5,0,0,1,.707.707L8.111,16.6A.5.5,0,0,1,7.758,16.743Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15,16.742a1.5,1.5,0,1,1,1.061-.438A1.493,1.493,0,0,1,15,16.742Zm0-2a.5.5,0,0,0-.354.147h0a.5.5,0,0,0-.146.352.5.5,0,1,0,1,0,.5.5,0,0,0-.5-.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiPhone (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Phone\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14.436,20.938A11.384,11.384,0,0,1,4.572,3.9a1.668,1.668,0,0,1,1.241-.822,1.716,1.716,0,0,1,1.454.492l3.139,3.14a1.715,1.715,0,0,1,0,2.427l-.295.3a1.937,1.937,0,0,0,0,2.736l1.72,1.721a1.983,1.983,0,0,0,2.736,0l.29-.29a1.719,1.719,0,0,1,2.428,0l3.139,3.139a1.724,1.724,0,0,1,.492,1.455,1.669,1.669,0,0,1-.822,1.239A11.327,11.327,0,0,1,14.436,20.938ZM6.042,4.063a.793.793,0,0,0-.1.006.673.673,0,0,0-.5.331A10.375,10.375,0,0,0,19.594,18.567a.674.674,0,0,0,.331-.5.734.734,0,0,0-.208-.618l-3.139-3.139a.717.717,0,0,0-1.014,0l-.29.29a3.006,3.006,0,0,1-4.15,0L9.4,12.876a2.939,2.939,0,0,1,0-4.149l.3-.3a.717.717,0,0,0,0-1.014L6.56,4.277A.729.729,0,0,0,6.042,4.063Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiPickerEmpty (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Picker_Empty\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.94,5.876a2.805,2.805,0,0,0-.84-2.01,2.856,2.856,0,0,0-3.97,0l-2.21,2.21-.75-.75a.8.8,0,0,0-1.1,0,.785.785,0,0,0,0,1.1l.75.75-8.77,8.76a3.248,3.248,0,0,0-.92,2.13l-.07,1.52a1.311,1.311,0,0,0,.38.97,1.332,1.332,0,0,0,.91.38h.06l1.52-.07a3.248,3.248,0,0,0,2.13-.92l8.76-8.77.75.75a.8.8,0,0,0,1.1,0,.785.785,0,0,0,0-1.1l-.75-.75L20.1,7.9A2.828,2.828,0,0,0,20.94,5.876ZM7.35,19.236a2.22,2.22,0,0,1-1.46.63l-1.53.07a.243.243,0,0,1-.21-.09.3.3,0,0,1-.09-.21l.07-1.53a2.22,2.22,0,0,1,.63-1.46l8.77-8.76,2.59,2.59ZM19.4,7.2l-2.18,2.18-2.59-2.59,2.21-2.22a1.861,1.861,0,0,1,2.56,0,1.846,1.846,0,0,1,.54,1.31A1.869,1.869,0,0,1,19.4,7.2Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiPickerHalf (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Picker_Half\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.936,5.889a2.825,2.825,0,0,0-4.81-2.02l-2.21,2.22-.75-.75a.771.771,0,0,0-.55-.22.8.8,0,0,0-.55.22.785.785,0,0,0,0,1.1l.75.75-8.76,8.76a3.154,3.154,0,0,0-.92,2.13l-.07,1.52a1.316,1.316,0,0,0,1.28,1.35h.06l1.52-.07a3.21,3.21,0,0,0,2.13-.93l8.76-8.76.75.75a.8.8,0,0,0,1.1,0,.785.785,0,0,0,0-1.1l-.75-.75,2.18-2.18A2.845,2.845,0,0,0,20.936,5.889Zm-8.56,8.33H7.2l6.33-6.32,2.59,2.59ZM19.4,7.2l-2.18,2.19L14.626,6.8l2.21-2.22a1.823,1.823,0,0,1,2.56,0,1.859,1.859,0,0,1,0,2.62Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiPill (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Pill\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.31,4.691a5.5,5.5,0,0,0-7.78,0l-6.84,6.84a5.5,5.5,0,0,0,3.89,9.39,5.524,5.524,0,0,0,3.89-1.61l6.84-6.84a5.5,5.5,0,0,0,0-7.78Zm-.71,7.07-3.42,3.42L8.82,8.821,12.24,5.4a4.5,4.5,0,0,1,7.68,3.17A4.429,4.429,0,0,1,18.6,11.761Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiPillsBottle1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"meds_Bottle_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.435,2.06H6.565a2.5,2.5,0,0,0-2.5,2.5v2a1.492,1.492,0,0,0,1.22,1.47V19.44a2.5,2.5,0,0,0,2.5,2.5h8.43a2.5,2.5,0,0,0,2.5-2.5V8.03a1.492,1.492,0,0,0,1.22-1.47v-2A2.5,2.5,0,0,0,17.435,2.06Zm.28,17.38a1.5,1.5,0,0,1-1.5,1.5H7.785a1.5,1.5,0,0,1-1.5-1.5v-.88h3.52a.491.491,0,0,0,.48-.5.485.485,0,0,0-.48-.5H6.285V15h2.57a.5.5,0,0,0,0-1H6.285V11.45h3.52a.491.491,0,0,0,.48-.5.485.485,0,0,0-.48-.5H6.285V8.06h11.43Zm1.22-12.88a.5.5,0,0,1-.5.5H5.565a.5.5,0,0,1-.5-.5v-2a1.5,1.5,0,0,1,1.5-1.5h10.87a1.5,1.5,0,0,1,1.5,1.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiPizza (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Pizza\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.807,13.437l-.01-.04a19.05,19.05,0,0,0-10.23-10.21,1.574,1.574,0,0,0-2.08.93l-5.32,14.69a1.58,1.58,0,0,0,1.48,2.12,1.654,1.654,0,0,0,.54-.09l14.7-5.32a1.585,1.585,0,0,0,.91-.85A1.547,1.547,0,0,0,20.807,13.437Zm-6.98,2.98a1,1,0,0,0,.2.16L4.847,19.9a.582.582,0,0,1-.6-.14.556.556,0,0,1-.14-.61l2.39-6.6a1,1,0,0,0,.16.2,1.81,1.81,0,0,0,2.56-2.56,1.782,1.782,0,0,0-1.7-.47l1.09-2.98a17.346,17.346,0,0,1,6.82,5.57,2.447,2.447,0,0,0-1.6.71A2.4,2.4,0,0,0,13.827,16.417Zm6.05-2.15a.592.592,0,0,1-.33.31l-1.32.47c-.11-.23-.22-.45-.33-.67-.12-.24-.25-.48-.38-.71-.31-.55-.65-1.08-1-1.58a18.655,18.655,0,0,0-7.57-6.3l.48-1.33a.561.561,0,0,1,.31-.33.456.456,0,0,1,.23-.05.793.793,0,0,1,.25.05,18.013,18.013,0,0,1,9.67,9.68v.02A.561.561,0,0,1,19.877,14.267Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"7.835\",\"cy\":\"16.489\",\"r\":\"1.075\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiPlane (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Plane\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M11.9,20.936H10.85a.911.911,0,0,1-.9-1.023l.693-5.548H7.3l-.513.9a1.329,1.329,0,0,1-.992.657L5.1,16a.9.9,0,0,1-.8-.31.912.912,0,0,1-.185-.839l.774-2.769a.318.318,0,0,0,0-.173L4.114,9.145A.909.909,0,0,1,5.1,8l.695.083a1.331,1.331,0,0,1,.992.656l.513.9h3.34L9.946,4.088a.911.911,0,0,1,.9-1.024H11.9a1.327,1.327,0,0,1,1.236.857l2.144,5.714h1.046a8.5,8.5,0,0,1,1.758.184,2.166,2.166,0,0,1,1.429.9,2.209,2.209,0,0,1,.365,1.7A2.288,2.288,0,0,1,17.95,14.2l-.16.024a10.926,10.926,0,0,1-1.721.137h-.787l-2.144,5.714A1.327,1.327,0,0,1,11.9,20.936Zm-.951-1H11.9a.323.323,0,0,0,.3-.209l2.214-5.905a.71.71,0,0,1,.661-.457h.991a9.946,9.946,0,0,0,1.567-.125l.16-.025a1.3,1.3,0,0,0,1.1-.979,1.227,1.227,0,0,0-.2-.937,1.2,1.2,0,0,0-.793-.5,7.647,7.647,0,0,0-1.577-.167h-1.25a.711.711,0,0,1-.661-.456L12.2,4.273a.323.323,0,0,0-.3-.209h-.951l.722,5.778a.7.7,0,0,1-.7.793H7.127a.7.7,0,0,1-.614-.359l-.6-1.045a.32.32,0,0,0-.241-.16L5.113,9l.738,2.64a1.34,1.34,0,0,1,0,.711L5.113,15l.562-.067a.32.32,0,0,0,.241-.16l.6-1.049a.7.7,0,0,1,.612-.355h3.846a.7.7,0,0,1,.7.794ZM7.386,14.212l0,.005Zm3.295-.179v0Zm0-4.067v0Zm-3.3-.186,0,0Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiPlay1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Play_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M6.562,21.94a2.5,2.5,0,0,1-2.5-2.5V4.56A2.5,2.5,0,0,1,7.978,2.5L18.855,9.939a2.5,2.5,0,0,1,0,4.12L7.977,21.5A2.5,2.5,0,0,1,6.562,21.94Zm0-18.884a1.494,1.494,0,0,0-.7.177,1.477,1.477,0,0,0-.8,1.327V19.439a1.5,1.5,0,0,0,2.35,1.235l10.877-7.44a1.5,1.5,0,0,0,0-2.471L7.413,3.326A1.491,1.491,0,0,0,6.564,3.056Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiPlug1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Plug_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.305,5.755H15.5V2.545a.5.5,0,0,0-1,0v3.21h-5V2.545a.5.5,0,0,0-1,0v3.21H6.7a1.566,1.566,0,0,0-1.57,1.57v4.28a7.046,7.046,0,0,0,6.37,7.11v2.72a.5.5,0,0,0,1,0v-2.7a6.874,6.874,0,0,0,6.38-6.86V7.325A1.573,1.573,0,0,0,17.305,5.755Zm.57,6.12a5.875,5.875,0,0,1-6.06,5.87,6.054,6.054,0,0,1-5.69-6.14V7.325a.563.563,0,0,1,.57-.57h10.61a.57.57,0,0,1,.57.57Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiPower (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Power\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M6.638,5.209a8.782,8.782,0,1,0,13.917,8.96,8.871,8.871,0,0,0-3.189-8.96c-.5-.39-1.214.312-.707.707a7.93,7.93,0,0,1,3.082,7.113,7.787,7.787,0,0,1-15.308.956A7.9,7.9,0,0,1,7.345,5.916c.507-.394-.205-1.1-.707-.707Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12.5,12.519a.5.5,0,0,1-1,0V3.548h0a.5.5,0,0,1,1,0Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiRainbow (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Rainbow\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3.089,16.71A9,9,0,0,1,8.97,8.326,8.912,8.912,0,0,1,20.911,16.71a.5.5,0,0,0,1,0,10.033,10.033,0,0,0-6.46-9.291,9.981,9.981,0,0,0-11.06,2.944,10.058,10.058,0,0,0-2.3,6.347.5.5,0,0,0,1,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5.985,16.71A6.078,6.078,0,0,1,12,10.7a6.078,6.078,0,0,1,6.015,6.015.5.5,0,0,0,1,0A7.013,7.013,0,0,0,6.606,12.228,7.151,7.151,0,0,0,4.985,16.71a.5.5,0,0,0,1,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.88,16.71a3.12,3.12,0,0,1,6.24,0,.5.5,0,0,0,1,0,4.119,4.119,0,0,0-7.255-2.669A4.219,4.219,0,0,0,7.88,16.71a.5.5,0,0,0,1,0Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiRead (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"read\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,18.883a10.8,10.8,0,0,1-9.675-5.728,2.6,2.6,0,0,1,0-2.31A10.8,10.8,0,0,1,12,5.117a10.8,10.8,0,0,1,9.675,5.728h0a2.6,2.6,0,0,1,0,2.31A10.8,10.8,0,0,1,12,18.883ZM12,6.117a9.787,9.787,0,0,0-8.78,5.176,1.586,1.586,0,0,0,0,1.415A9.788,9.788,0,0,0,12,17.883a9.787,9.787,0,0,0,8.78-5.176,1.584,1.584,0,0,0,0-1.414h0A9.787,9.787,0,0,0,12,6.117Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,16.049A4.049,4.049,0,1,1,16.049,12,4.054,4.054,0,0,1,12,16.049Zm0-7.1A3.049,3.049,0,1,0,15.049,12,3.052,3.052,0,0,0,12,8.951Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"2.028\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiReceipt (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Receipt\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,21.919a1.454,1.454,0,0,1-.791-.232L9.645,20.666a.47.47,0,0,0-.439-.028l-1.776.829a1.466,1.466,0,0,1-1.4-.087,1.214,1.214,0,0,1-.581-1.02V3.641A1.217,1.217,0,0,1,6.033,2.62a1.469,1.469,0,0,1,1.4-.087l1.775.829a.469.469,0,0,0,.439-.026L11.21,2.313a1.464,1.464,0,0,1,1.581,0l1.564,1.022a.469.469,0,0,0,.44.026l1.775-.829a1.461,1.461,0,0,1,1.4.087,1.217,1.217,0,0,1,.581,1.021V20.36a1.216,1.216,0,0,1-.581,1.02,1.46,1.46,0,0,1-1.4.087L14.8,20.639a.474.474,0,0,0-.441.027l-1.564,1.021A1.448,1.448,0,0,1,12,21.919ZM9.4,19.6a1.44,1.44,0,0,1,.79.234l1.564,1.02a.464.464,0,0,0,.487,0l1.565-1.021a1.462,1.462,0,0,1,1.41-.095l1.774.828a.463.463,0,0,0,.437-.024.221.221,0,0,0,.118-.177V3.641a.219.219,0,0,0-.118-.177.461.461,0,0,0-.437-.025l-1.775.829a1.458,1.458,0,0,1-1.409-.095L12.243,3.151a.467.467,0,0,0-.486,0L10.192,4.172a1.467,1.467,0,0,1-1.41.1L7.007,3.439a.461.461,0,0,0-.437.025.219.219,0,0,0-.118.177V20.36a.221.221,0,0,0,.118.177.468.468,0,0,0,.437.024l1.776-.829A1.461,1.461,0,0,1,9.4,19.6Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15.046,7.4H8.954a.5.5,0,0,1,0-1h6.092a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15.046,10.953H8.954a.5.5,0,0,1,0-1h6.092a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,14.5H8.954a.5.5,0,0,1,0-1H12a.5.5,0,0,1,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiRedo (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Redo\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4.061,13.67A7.958,7.958,0,0,0,16.2,19.74a8.061,8.061,0,0,0,3.77-6.77.5.5,0,0,0-1,0,6.976,6.976,0,0,1-11,5.7,6.969,6.969,0,0,1,1-11.97,10.075,10.075,0,0,1,4.64-.69V7.46a.5.5,0,0,0,.81.39l2.47-1.95a.5.5,0,0,0,0-.79L14.4,3.17a.5.5,0,0,0-.8.4V5.01c-.71-.01-1.43-.03-2.13.02a7.985,7.985,0,0,0-7.41,8.64Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiRepeat (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Repeat\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M2.078,17.562c-0.01,-0.039 -0.016,-0.08 -0.016,-0.123c0,-0.138 0.056,-0.263 0.147,-0.353c0.008,-0.009 1.416,-1.417 2,-2c0.198,-0.198 0.507,-0.183 0.707,-0c0.199,0.183 0.185,0.522 -0,0.707l-1.147,1.146l15.669,0c0.828,0 1.5,-0.671 1.5,-1.5l0,-3.439c0,-0.276 0.224,-0.5 0.5,-0.5c0.276,0 0.5,0.224 0.5,0.5l0,3.439c0,1.381 -1.12,2.5 -2.5,2.5l-15.669,0l1.147,1.147c0.198,0.198 0.183,0.507 -0,0.707c-0.183,0.199 -0.522,0.185 -0.707,-0l-2,-2c-0.066,-0.063 -0.11,-0.143 -0.131,-0.231Zm19.845,-11.105c0.01,0.039 0.015,0.08 0.015,0.122c0,0.138 -0.056,0.263 -0.147,0.354c-0.008,0.008 -1.416,1.417 -2,2c-0.197,0.198 -0.507,0.183 -0.707,-0c-0.199,-0.183 -0.185,-0.522 0,-0.707l1.147,-1.147l-15.669,0c-0.828,0 -1.5,0.672 -1.5,1.5l0,3.439c-0,0.276 -0.224,0.5 -0.5,0.5c-0.276,0 -0.5,-0.224 -0.5,-0.5l0,-3.439c0,-1.381 1.12,-2.5 2.5,-2.5l15.669,0l-1.146,-1.146c-0.198,-0.198 -0.183,-0.507 -0,-0.707c0.183,-0.199 0.522,-0.185 0.707,-0l2,2c0.065,0.063 0.11,0.143 0.131,0.231Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiRollingSuitcase (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Rolling_Suitcase\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16.25,7.49H15V3.56a1.5,1.5,0,0,0-1.5-1.5h-3A1.511,1.511,0,0,0,9,3.56V7.49H7.75a2.5,2.5,0,0,0-2.5,2.5v8.44a2.5,2.5,0,0,0,2.5,2.5h.5v.01a1,1,0,0,0,2,0v-.01h3.5v.01a1,1,0,0,0,2,0v-.01h.5a2.5,2.5,0,0,0,2.5-2.5V9.99A2.5,2.5,0,0,0,16.25,7.49ZM10,3.56a.508.508,0,0,1,.5-.5h3a.5.5,0,0,1,.5.5V7.5H10Zm7.75,14.87a1.5,1.5,0,0,1-1.5,1.5H7.75a1.5,1.5,0,0,1-1.5-1.5V9.99a1.511,1.511,0,0,1,1.5-1.5h8.5a1.5,1.5,0,0,1,1.5,1.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiRoute (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Route\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.792,17.086c-.58-.58-1.16-1.17-1.75-1.75-.08-.08-.16-.17-.25-.25a.492.492,0,0,0-.7,0,.5.5,0,0,0,0,.71l1.14,1.14H9.282a2.22,2.22,0,0,1,0-4.44h3a3.215,3.215,0,1,0,0-6.43H7.012a2.5,2.5,0,1,0,0,1h5.27a2.215,2.215,0,1,1,0,4.43h-3a3.22,3.22,0,1,0,0,6.44h10.96l-.9.9c-.09.08-.17.17-.25.25a.5.5,0,0,0,0,.71.511.511,0,0,0,.7,0l1.75-1.75.25-.25A.5.5,0,0,0,21.792,17.086ZM4.562,8.066a1.5,1.5,0,1,1,1.5-1.5A1.5,1.5,0,0,1,4.562,8.066Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiRouter (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Router\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.44,10.94H17.93V4.54a.5.5,0,0,0-1,0v6.4H7.06V7a.5.5,0,0,0-1,0v3.94H4.56a2.507,2.507,0,0,0-2.5,2.5v4a2.514,2.514,0,0,0,2.5,2.5H19.44a2.507,2.507,0,0,0,2.5-2.5v-4A2.5,2.5,0,0,0,19.44,10.94Zm1.5,6.5a1.5,1.5,0,0,1-1.5,1.5H4.56a1.511,1.511,0,0,1-1.5-1.5v-4a1.5,1.5,0,0,1,1.5-1.5H19.44a1.5,1.5,0,0,1,1.5,1.5Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"4.75\",\"cy\":\"15.436\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8.25\",\"cy\":\"15.436\",\"r\":\"0.75\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.5,16.936h-5a1.5,1.5,0,1,1,0-3h5a1.5,1.5,0,0,1,0,3Zm-5-2a.5.5,0,1,0,0,1h5a.5.5,0,0,0,0-1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiRuler (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Ruler\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M9.479,3.5a1.5,1.5,0,0,0-2.12,0L3.5,7.35a1.516,1.516,0,0,0-.44,1.06A1.5,1.5,0,0,0,3.5,9.47L14.519,20.5a1.509,1.509,0,0,0,2.13,0l3.85-3.86a1.491,1.491,0,0,0,0-2.12ZM8.359,7.08a.5.5,0,0,0,0,.71.524.524,0,0,0,.71,0c.55-.56,1.09-1.1,1.65-1.64l1.25,1.25-.9.9a.483.483,0,0,0,0,.7.5.5,0,0,0,.71,0c.29-.3.6-.6.9-.89l1.25,1.25-1.64,1.65a.495.495,0,0,0,.7.7c.56-.55,1.1-1.09,1.65-1.64l1.25,1.25-.9.9a.524.524,0,0,0-.14.36.5.5,0,0,0,.14.35.513.513,0,0,0,.71,0l.9-.9,1.26,1.26-1.65,1.64a.5.5,0,0,0,.71.71c.55-.56,1.09-1.1,1.65-1.64l1.23,1.23a.5.5,0,0,1,0,.7l-3.86,3.86a.5.5,0,0,1-.71,0L4.209,8.77a.491.491,0,0,1-.15-.36.485.485,0,0,1,.15-.35L8.069,4.2a.508.508,0,0,1,.7,0l1.24,1.24Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.939,12.96l-.04-.04c.01,0,.01,0,.02.01S18.939,12.95,18.939,12.96Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSatellite1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Satellite_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.135,12.37a5.447,5.447,0,0,0,3.42-1.2.982.982,0,0,0,.37-.72,1.04,1.04,0,0,0-.31-.8l-2.78-2.78c.39-.39.8-.8,1.19-1.2.08-.07.15-.14.23-.22a.511.511,0,0,0,0-.7.5.5,0,0,0-.71,0c-.48.47-.94.94-1.42,1.41l-2.78-2.78a1.077,1.077,0,0,0-.8-.31,1,1,0,0,0-.72.37,5.454,5.454,0,0,0-1.19,3.67l-1.45,1.46L7.855,6.24a.978.978,0,0,0-1.41,0L3.365,9.32a1,1,0,0,0,0,1.41L5.7,13.06l-.41.4a2.65,2.65,0,0,0,0,3.74L6.8,18.71a2.632,2.632,0,0,0,3.74,0l.4-.4,2.33,2.33a1,1,0,0,0,1.41,0l3.08-3.09a1,1,0,0,0,0-1.41l-2.32-2.32,1.45-1.46A2.09,2.09,0,0,0,17.135,12.37ZM4.065,10.03l3.09-3.09,2.32,2.33L6.4,12.35Zm12.99,6.82-3.08,3.08-2.33-2.33,3.08-3.08Zm-5.23-8.51a5.482,5.482,0,0,0,3.84,3.83l-5.84,5.84a1.642,1.642,0,0,1-2.32,0l-1.52-1.52a1.642,1.642,0,0,1,0-2.32Zm2.12,1.71a4.417,4.417,0,0,1-.3-5.96l3.13,3.13,3.14,3.14.02.03A4.5,4.5,0,0,1,13.945,10.05Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiSaveDown1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Save_Down_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.617,6.383a7.944,7.944,0,0,1-1.748,12.568A8.028,8.028,0,0,1,4.283,13.908,8.028,8.028,0,0,1,6.378,6.391c.451-.46-.256-1.168-.707-.707A8.946,8.946,0,0,0,15.427,20.27a8.946,8.946,0,0,0,2.9-14.594c-.451-.461-1.158.247-.707.707Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15.355,10.6l-3,3a.5.5,0,0,1-.35.15.508.508,0,0,1-.36-.15l-3-3a.5.5,0,0,1,.71-.71l2.14,2.14V3.555a.508.508,0,0,1,.5-.5.5.5,0,0,1,.5.5v8.49l2.15-2.16a.5.5,0,0,1,.71.71Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSaveDown2 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Save_Down_2\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.437,20.948H5.563a2.372,2.372,0,0,1-2.5-2.21v-11a2.372,2.372,0,0,1,2.5-2.211h.462a.5.5,0,0,1,0,1H5.563a1.38,1.38,0,0,0-1.5,1.211v11a1.38,1.38,0,0,0,1.5,1.21H18.437a1.38,1.38,0,0,0,1.5-1.21v-11a1.38,1.38,0,0,0-1.5-1.211h-.462a.5.5,0,0,1,0-1h.462a2.372,2.372,0,0,1,2.5,2.211v11A2.372,2.372,0,0,1,18.437,20.948Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15.355,10.592l-3,3a.5.5,0,0,1-.35.15.508.508,0,0,1-.36-.15l-3-3a.5.5,0,0,1,.71-.71l2.14,2.139V3.552a.508.508,0,0,1,.5-.5.5.5,0,0,1,.5.5v8.49l2.15-2.16a.5.5,0,0,1,.71.71Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSaveUp1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Save_Up_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.617,6.374a7.946,7.946,0,0,1-1.748,12.569A8.028,8.028,0,0,1,4.283,13.9,8.029,8.029,0,0,1,6.378,6.382c.451-.46-.256-1.168-.707-.707a8.946,8.946,0,0,0,9.756,14.587,8.946,8.946,0,0,0,2.9-14.595c-.451-.46-1.158.247-.707.707Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.645,6.213l3-3a.5.5,0,0,1,.35-.15.508.508,0,0,1,.36.15l3,3a.5.5,0,0,1-.71.71l-2.14-2.14v8.47a.508.508,0,0,1-.5.5.5.5,0,0,1-.5-.5V4.763l-2.15,2.16a.5.5,0,0,1-.71-.71Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSaveUp2 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Save_Up_2\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.437,20.937H5.563a2.372,2.372,0,0,1-2.5-2.211v-11a2.372,2.372,0,0,1,2.5-2.212h.462a.5.5,0,0,1,0,1H5.563a1.381,1.381,0,0,0-1.5,1.212v11a1.38,1.38,0,0,0,1.5,1.211H18.437a1.38,1.38,0,0,0,1.5-1.211v-11a1.381,1.381,0,0,0-1.5-1.212h-.462a.5.5,0,0,1,0-1h.462a2.372,2.372,0,0,1,2.5,2.212v11A2.372,2.372,0,0,1,18.437,20.937Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.645,6.213l3-3a.5.5,0,0,1,.35-.15.508.508,0,0,1,.36.15l3,3a.5.5,0,0,1-.71.71l-2.14-2.14v8.47a.508.508,0,0,1-.5.5.5.5,0,0,1-.5-.5V4.763l-2.15,2.16a.5.5,0,0,1-.71-.71Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSearch (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"version\":\"1.1\",\"id\":\"search\",\"x\":\"0px\",\"y\":\"0px\",\"viewBox\":\"0 0 24 24\",\"style\":\"enable-background:new 0 0 24 24;\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.031,20.79c0.46,0.46,1.17-0.25,0.71-0.7l-3.75-3.76c1.27-1.41,2.04-3.27,2.04-5.31\\n\\t\\tc0-4.39-3.57-7.96-7.96-7.96s-7.96,3.57-7.96,7.96c0,4.39,3.57,7.96,7.96,7.96c1.98,0,3.81-0.73,5.21-1.94L20.031,20.79z\\n\\t\\t M4.11,11.02c0-3.84,3.13-6.96,6.96-6.96c3.84,0,6.96,3.12,6.96,6.96c0,3.84-3.12,6.96-6.96,6.96C7.24,17.98,4.11,14.86,4.11,11.02\\n\\t\\tz\"},\"child\":[]}]}]})(props);\n};\nexport function CiServer (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Server\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,11H3.563a1.5,1.5,0,0,1-1.5-1.5V5.565a1.5,1.5,0,0,1,1.5-1.5H20.437a1.5,1.5,0,0,1,1.5,1.5v3.93A1.5,1.5,0,0,1,20.437,11ZM3.563,5.065a.5.5,0,0,0-.5.5v3.93a.5.5,0,0,0,.5.5H20.437a.5.5,0,0,0,.5-.5V5.565a.5.5,0,0,0-.5-.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,19.935H3.563a1.5,1.5,0,0,1-1.5-1.5v-3.93a1.5,1.5,0,0,1,1.5-1.5H20.437a1.5,1.5,0,0,1,1.5,1.5v3.93A1.5,1.5,0,0,1,20.437,19.935ZM3.563,14.005a.5.5,0,0,0-.5.5v3.93a.5.5,0,0,0,.5.5H20.437a.5.5,0,0,0,.5-.5v-3.93a.5.5,0,0,0-.5-.5Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"5.563\",\"cy\":\"7.53\",\"r\":\"0.5\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"7.563\",\"cy\":\"7.53\",\"r\":\"0.5\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13.452,8.03a.5.5,0,0,1,0-1h5a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"5.563\",\"cy\":\"16.47\",\"r\":\"0.5\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"7.563\",\"cy\":\"16.47\",\"r\":\"0.5\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13.452,16.97a.5.5,0,0,1,0-1h5a.5.5,0,0,1,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSettings (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Settings\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12.6,20.936H11.3a.883.883,0,0,1-.852-.654l-.774-2.833-2.5,1.435a.886.886,0,0,1-1.06-.138l-.925-.919a.884.884,0,0,1-.143-1.066l1.469-2.545L6.509,14.2l-2.787-.747a.882.882,0,0,1-.654-.851V11.3a.882.882,0,0,1,.652-.85l2.839-.777L5.12,7.171a.885.885,0,0,1,.141-1.062l.918-.918A.885.885,0,0,1,7.24,5.049L9.792,6.514l.012,0,.745-2.79a.881.881,0,0,1,.851-.655h1.3a.883.883,0,0,1,.852.655l.762,2.838,2.509-1.441a.885.885,0,0,1,1.059.138l.926.919a.882.882,0,0,1,.141,1.067L17.483,9.777l.008.022,2.786.746a.883.883,0,0,1,.653.851v1.3a.883.883,0,0,1-.654.852l-2.837.774,1.439,2.505a.881.881,0,0,1-.141,1.063l-.917.917a.888.888,0,0,1-1.063.141l-2.539-1.462L14.2,17.5l-.745,2.785A.885.885,0,0,1,12.6,20.936Zm-1.21-1h1.119l.738-2.756a.888.888,0,0,1,.528-.592l.134-.052a.873.873,0,0,1,.76.057l2.51,1.445.789-.789-1.423-2.478a.881.881,0,0,1-.048-.78l.052-.125a.875.875,0,0,1,.584-.51l2.8-.749v-1.12l-2.755-.737a.885.885,0,0,1-.592-.529l-.052-.132a.882.882,0,0,1,.057-.763L18.04,6.818l-.8-.79-2.48,1.425a.878.878,0,0,1-.772.052l-.115-.047a.888.888,0,0,1-.518-.588l-.748-2.806H11.492l-.738,2.762a.883.883,0,0,1-.539.6l-.12.045a.874.874,0,0,1-.751-.058L6.822,5.962l-.789.789L7.455,9.227a.886.886,0,0,1,.046.785l-.051.12a.876.876,0,0,1-.579.5l-2.8.758v1.121l2.757.738a.889.889,0,0,1,.591.525l.048.121a.874.874,0,0,1-.055.77L5.958,17.181l.8.791,2.47-1.419a.878.878,0,0,1,.787-.045l.106.044a.874.874,0,0,1,.526.591ZM9.75,17.482l.008,0ZM9.6,17.421l.007,0ZM6.487,14.147h0Zm.044-4.411h0Zm7.724-3.2Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,15a3,3,0,1,1,3-3A3,3,0,0,1,12,15Zm0-5a2,2,0,1,0,2,2A2,2,0,0,0,12,10Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiShare1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Share_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12.223,11.075a.5.5,0,0,0,.7.71l7-7v3.58a.508.508,0,0,0,.5.5.5.5,0,0,0,.5-.5V3.575a.5.5,0,0,0-.5-.5h-4.79a.5.5,0,0,0,0,1h3.58Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M17.876,20.926H6.124a3.053,3.053,0,0,1-3.05-3.05V6.124a3.053,3.053,0,0,1,3.05-3.05h6.028a.5.5,0,0,1,0,1H6.124a2.053,2.053,0,0,0-2.05,2.05V17.876a2.053,2.053,0,0,0,2.05,2.05H17.876a2.053,2.053,0,0,0,2.05-2.05V11.849a.5.5,0,0,1,1,0v6.027A3.053,3.053,0,0,1,17.876,20.926Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiShare2 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Share_2\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.44,15.94a2.5,2.5,0,0,0-1.96.95L7.97,12.64a2.356,2.356,0,0,0,0-1.29l8.5-4.25a2.5,2.5,0,1,0-.53-1.54,2.269,2.269,0,0,0,.09.65l-8.5,4.25a2.5,2.5,0,1,0,0,3.08l8.5,4.25a2.269,2.269,0,0,0-.09.65,2.5,2.5,0,1,0,2.5-2.5Zm0-11.88a1.5,1.5,0,1,1-1.5,1.5A1.5,1.5,0,0,1,18.44,4.06ZM5.56,13.5A1.5,1.5,0,1,1,7.06,12,1.5,1.5,0,0,1,5.56,13.5Zm12.88,6.44a1.5,1.5,0,1,1,1.5-1.5A1.5,1.5,0,0,1,18.44,19.94Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiShirt (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Shirt\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16.657,21.949H7.343a2.5,2.5,0,0,1-2.5-2.5V11.222a6.468,6.468,0,0,1,.112-1.2L5.224,8.59a5.572,5.572,0,0,0,.094-1.015V3.3a1.252,1.252,0,0,1,1.25-1.25H8.815a1.251,1.251,0,0,1,1.25,1.25V6.413a1.935,1.935,0,0,0,3.87,0V3.3a1.251,1.251,0,0,1,1.25-1.25h2.247a1.252,1.252,0,0,1,1.25,1.25V7.575a5.486,5.486,0,0,0,.1,1.015l.269,1.431a6.57,6.57,0,0,1,.111,1.2v8.227A2.5,2.5,0,0,1,16.657,21.949ZM6.568,3.051a.251.251,0,0,0-.25.25V7.575a6.543,6.543,0,0,1-.111,1.2l-.27,1.432a5.5,5.5,0,0,0-.094,1.015v8.227a1.5,1.5,0,0,0,1.5,1.5h9.314a1.5,1.5,0,0,0,1.5-1.5V11.222a5.519,5.519,0,0,0-.094-1.016l-.269-1.43a6.453,6.453,0,0,1-.112-1.2V3.3a.251.251,0,0,0-.25-.25H15.185a.251.251,0,0,0-.25.25V6.413a2.935,2.935,0,0,1-5.87,0V3.3a.251.251,0,0,0-.25-.25Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M11.986,17.333V13.874a.075.075,0,0,0-.114-.064l-.638.392a.149.149,0,0,1-.228-.128v-.65a.3.3,0,0,1,.145-.258l.764-.457a.3.3,0,0,1,.154-.043H12.7a.3.3,0,0,1,.3.3v4.367a.3.3,0,0,1-.3.3h-.409A.3.3,0,0,1,11.986,17.333Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiShop (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Shop\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.6,5.26a2.512,2.512,0,0,0-2.48-2.2H5.885a2.512,2.512,0,0,0-2.48,2.19l-.3,2.47a3.411,3.411,0,0,0,1.16,2.56v8.16a2.5,2.5,0,0,0,2.5,2.5h10.47a2.5,2.5,0,0,0,2.5-2.5V10.28A3.411,3.411,0,0,0,20.9,7.72Zm-6.59,14.68h-4V15.86a1.5,1.5,0,0,1,1.5-1.5h1a1.5,1.5,0,0,1,1.5,1.5Zm4.73-1.5a1.5,1.5,0,0,1-1.5,1.5h-2.23V15.86a2.5,2.5,0,0,0-2.5-2.5h-1a2.5,2.5,0,0,0-2.5,2.5v4.08H6.765a1.5,1.5,0,0,1-1.5-1.5V10.87a3.223,3.223,0,0,0,1.24.24,3.358,3.358,0,0,0,2.58-1.19.241.241,0,0,1,.34,0,3.358,3.358,0,0,0,2.58,1.19A3.393,3.393,0,0,0,14.6,9.92a.219.219,0,0,1,.16-.07.238.238,0,0,1,.17.07,3.358,3.358,0,0,0,2.58,1.19,3.173,3.173,0,0,0,1.23-.24Zm-1.23-8.33a2.386,2.386,0,0,1-1.82-.83,1.2,1.2,0,0,0-.92-.43h-.01a1.194,1.194,0,0,0-.92.42,2.476,2.476,0,0,1-3.65,0,1.24,1.24,0,0,0-1.86,0A2.405,2.405,0,0,1,4.1,7.78l.3-2.4a1.517,1.517,0,0,1,1.49-1.32h12.23a1.5,1.5,0,0,1,1.49,1.32l.29,2.36A2.392,2.392,0,0,1,17.505,10.11Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiShoppingBasket (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Shopping_Basket\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.44,7.937H17.3l-1.21-4.51a.508.508,0,0,0-.61-.35.489.489,0,0,0-.35.61l1.14,4.25H7.74l1.14-4.25a.5.5,0,0,0-.36-.61.513.513,0,0,0-.61.35l-1.2,4.51H4.56a1.5,1.5,0,0,0-.32,2.96l.74,7.77a2.492,2.492,0,0,0,2.49,2.27h9.06a2.492,2.492,0,0,0,2.49-2.27l.74-7.77a1.5,1.5,0,0,0-.32-2.96Zm-1.41,10.64a1.5,1.5,0,0,1-1.5,1.36H7.47a1.5,1.5,0,0,1-1.5-1.36l-.72-7.64h13.5Zm1.41-8.64H4.56a.508.508,0,0,1-.5-.5.5.5,0,0,1,.5-.5H19.44a.5.5,0,0,1,.5.5A.508.508,0,0,1,19.44,9.937Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M9.5,17.432a.5.5,0,0,1-.5-.5v-3a.5.5,0,0,1,1,0v3A.5.5,0,0,1,9.5,17.432Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.5,17.432a.5.5,0,0,1-.5-.5v-3a.5.5,0,0,1,1,0v3A.5.5,0,0,1,14.5,17.432Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiShoppingCart (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Shopping_Cart\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.437,19.934c0,0.552 -0.448,1 -1,1c-0.552,0 -1,-0.448 -1,-1c0,-0.552 0.448,-1 1,-1c0.552,0 1,0.448 1,1Zm-11.217,-4.266l-0.945,-10.9c-0.03,-0.391 -0.356,-0.693 -0.749,-0.693l-0.966,-0c-0.276,-0 -0.5,-0.224 -0.5,-0.5c0,-0.276 0.224,-0.5 0.5,-0.5l0.966,-0c0.916,-0 1.676,0.704 1.746,1.617l0.139,1.818l13.03,-0c0.885,-0 1.577,0.76 1.494,1.638l-0.668,7.52c-0.121,1.285 -1.199,2.267 -2.489,2.267l-9.069,0c-1.29,0 -2.367,-0.981 -2.489,-2.267Zm0.274,-8.158l0.722,8.066c0.073,0.77 0.719,1.359 1.493,1.359l9.069,0c0.774,0 1.42,-0.589 1.493,-1.359l0.668,-7.518c0.028,-0.294 -0.203,-0.548 -0.498,-0.548l-12.947,-0Zm4.454,12.424c-0,0.552 -0.448,1 -1,1c-0.552,0 -1,-0.448 -1,-1c-0,-0.552 0.448,-1 1,-1c0.552,0 1,0.448 1,1Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiShoppingTag (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Shopping_Tag\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.605,5.988a2.8,2.8,0,0,0-2.6-2.59l-4.56-.32a2.842,2.842,0,0,0-2.17.81L3.9,11.278a2.794,2.794,0,0,0,0,3.95l4.87,4.88a2.8,2.8,0,0,0,3.96,0l7.38-7.39a2.779,2.779,0,0,0,.81-2.17ZM12.015,19.4a1.8,1.8,0,0,1-2.54,0l-4.87-4.87a1.793,1.793,0,0,1,0-2.55l1.17-1.17,7.42,7.42Zm7.38-7.38-5.5,5.5L6.485,10.1l5.5-5.5a1.786,1.786,0,0,1,1.27-.53c.04,0,.08.01.12.01l4.56.32a1.8,1.8,0,0,1,1.67,1.66l.32,4.56A1.829,1.829,0,0,1,19.4,12.018Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"17\",\"cy\":\"6.999\",\"r\":\"0.862\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiShuffle (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Shuffle\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.794,17.082a.513.513,0,0,1,0,.71c-.08.08-.17.16-.25.25-.58.58-1.17,1.16-1.75,1.75a.5.5,0,0,1-.71-.71c.09-.08.17-.17.25-.25l.9-.9h-3.85a2.509,2.509,0,0,1-2.15-1.21L12,12.982l-2.24,3.74a2.509,2.509,0,0,1-2.15,1.21H2.564a.5.5,0,0,1-.5-.5.5.5,0,0,1,.5-.5h5.05A1.507,1.507,0,0,0,8.9,16.2l2.51-4.2L8.9,7.792a1.507,1.507,0,0,0-1.29-.73H2.564a.5.5,0,0,1,0-1h5.05a2.518,2.518,0,0,1,2.15,1.22L12,11.032l2.24-3.75a2.489,2.489,0,0,1,2.14-1.22h3.85l-1.15-1.15a.5.5,0,1,1,.71-.7c.08.08.17.16.25.25.58.58,1.17,1.16,1.75,1.75a.5.5,0,0,1,0,.7c-.08.09-.17.17-.25.25-.58.59-1.17,1.17-1.75,1.75a.5.5,0,1,1-.71-.7l.25-.25.9-.9h-3.85a1.519,1.519,0,0,0-1.29.73L12.584,12l2.51,4.2a1.519,1.519,0,0,0,1.29.73h3.84l-1.14-1.14a.5.5,0,0,1,.71-.71Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiSignpostDuo1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Signpost_Duo_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,11.5H6.536a2.628,2.628,0,0,1-1.723-.629L2.564,8.915A1.329,1.329,0,0,1,2.57,6.831L4.813,4.88a2.619,2.619,0,0,1,1.723-.629h13.9a1.451,1.451,0,0,1,1.5,1.393v4.463A1.451,1.451,0,0,1,20.437,11.5Zm-13.9-6.25a1.64,1.64,0,0,0-1.067.384L3.215,7.6a.364.364,0,0,0-.152.281.349.349,0,0,0,.141.27l.011.01,2.254,1.961a1.644,1.644,0,0,0,1.067.384h13.9a.463.463,0,0,0,.5-.394V5.644a.463.463,0,0,0-.5-.393Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M17.464,19.749H3.563a1.451,1.451,0,0,1-1.5-1.394V13.892a1.451,1.451,0,0,1,1.5-1.393h13.9a2.621,2.621,0,0,1,1.724.63l2.249,1.956a1.329,1.329,0,0,1-.007,2.083l-2.242,1.951A2.625,2.625,0,0,1,17.464,19.749ZM3.563,13.5a.463.463,0,0,0-.5.393v4.463a.463.463,0,0,0,.5.394h13.9a1.644,1.644,0,0,0,1.068-.385l2.253-1.96a.362.362,0,0,0,.152-.28.351.351,0,0,0-.141-.271l-.011-.01-2.254-1.96a1.64,1.64,0,0,0-1.067-.384Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSignpostL1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Signpost_L_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,16H6.536a2.489,2.489,0,0,1-1.744-.709L2.542,13.1a1.5,1.5,0,0,1,.007-2.2L4.792,8.709A2.483,2.483,0,0,1,6.536,8h13.9a1.5,1.5,0,0,1,1.5,1.5v5A1.5,1.5,0,0,1,20.437,16ZM6.536,9a1.491,1.491,0,0,0-1.046.425l-2.255,2.2A.5.5,0,0,0,3.063,12a.494.494,0,0,0,.162.369l.01.01,2.254,2.2A1.492,1.492,0,0,0,6.536,15h13.9a.5.5,0,0,0,.5-.5v-5a.5.5,0,0,0-.5-.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiSignpostR1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Signpost_R_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3.563,8h13.9a2.489,2.489,0,0,1,1.744.709l2.25,2.192a1.5,1.5,0,0,1-.007,2.2l-2.243,2.187A2.483,2.483,0,0,1,17.464,16H3.563a1.5,1.5,0,0,1-1.5-1.5v-5A1.5,1.5,0,0,1,3.563,8Zm13.9,7a1.491,1.491,0,0,0,1.046-.425l2.255-2.2A.5.5,0,0,0,20.937,12a.494.494,0,0,0-.162-.369l-.01-.01-2.254-2.2A1.492,1.492,0,0,0,17.464,9H3.563a.5.5,0,0,0-.5.5v5a.5.5,0,0,0,.5.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiSliderHorizontal (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Slider_Horizontal\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.45,7.5H9.99A2,2,0,0,0,8.06,6h-1A2,2,0,0,0,5.13,7.5H2.55a.5.5,0,0,0-.5.5.508.508,0,0,0,.5.5H5.13A2,2,0,0,0,7.06,10h1A2,2,0,0,0,9.99,8.5H21.45A.5.5,0,0,0,21.45,7.5ZM8.06,9h-1a1.006,1.006,0,0,1-1-.98V8a1,1,0,0,1,1-1h1a1,1,0,1,1,0,2Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21.45,15.5H18.87A2,2,0,0,0,16.94,14h-1a2,2,0,0,0-1.93,1.5H2.55a.5.5,0,0,0,0,1H14.01A2,2,0,0,0,15.94,18h1a2,2,0,0,0,1.93-1.5h2.58a.5.5,0,0,0,.5-.5A.508.508,0,0,0,21.45,15.5Zm-3.51.5a1,1,0,0,1-1,1h-1a1,1,0,1,1,0-2h1a1.006,1.006,0,0,1,1,.98Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSliderVertical (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Slider_Vertical\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M8.5,5.13V2.55a.5.5,0,0,0-.5-.5.508.508,0,0,0-.5.5V5.13A2,2,0,0,0,6,7.06v1A2,2,0,0,0,7.5,9.99V21.45a.5.5,0,0,0,1,0V9.99A2,2,0,0,0,10,8.06v-1A2,2,0,0,0,8.5,5.13ZM9,8.06a1,1,0,1,1-2,0v-1a1.006,1.006,0,0,1,.98-1H8a1,1,0,0,1,1,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.5,14.01V2.55a.5.5,0,0,0-1,0V14.01A2,2,0,0,0,14,15.94v1a2,2,0,0,0,1.5,1.93v2.58a.5.5,0,0,0,.5.5.508.508,0,0,0,.5-.5V18.87A2,2,0,0,0,18,16.94v-1A2,2,0,0,0,16.5,14.01Zm.5,2.93a1.006,1.006,0,0,1-.98,1H16a1,1,0,0,1-1-1v-1a1,1,0,1,1,2,0Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSpeaker (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Speaker\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.437,21.938H6.562a2.5,2.5,0,0,1-2.5-2.5V4.562a2.5,2.5,0,0,1,2.5-2.5H17.437a2.5,2.5,0,0,1,2.5,2.5V19.438A2.5,2.5,0,0,1,17.437,21.938ZM6.562,3.062a1.5,1.5,0,0,0-1.5,1.5V19.438a1.5,1.5,0,0,0,1.5,1.5H17.437a1.5,1.5,0,0,0,1.5-1.5V4.562a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,18.939a3.75,3.75,0,1,1,3.75-3.75A3.755,3.755,0,0,1,12,18.939Zm0-6.5a2.75,2.75,0,1,0,2.75,2.75A2.752,2.752,0,0,0,12,12.439Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,9.563a2.25,2.25,0,1,1,2.25-2.25A2.253,2.253,0,0,1,12,9.563Zm0-3.5a1.25,1.25,0,1,0,1.25,1.25A1.251,1.251,0,0,0,12,6.063Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSquareAlert (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Square_Alert\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.437,20.936H5.562a2.5,2.5,0,0,1-2.5-2.5V5.562a2.5,2.5,0,0,1,2.5-2.5H18.437a2.5,2.5,0,0,1,2.5,2.5V18.436A2.5,2.5,0,0,1,18.437,20.936ZM5.562,4.062a1.5,1.5,0,0,0-1.5,1.5V18.436a1.5,1.5,0,0,0,1.5,1.5H18.437a1.5,1.5,0,0,0,1.5-1.5V5.562a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M11.5,10.982a.5.5,0,0,1,1,0V15h0a.5.5,0,0,1-1,0Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"9\",\"r\":\"0.5\"},\"child\":[]}]}]}]}]})(props);\n};\nexport function CiSquareCheck (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Square_Check\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.437,20.939H5.563a2.5,2.5,0,0,1-2.5-2.5V5.566a2.5,2.5,0,0,1,2.5-2.5H18.437a2.5,2.5,0,0,1,2.5,2.5V18.439A2.5,2.5,0,0,1,18.437,20.939ZM5.563,4.066a1.5,1.5,0,0,0-1.5,1.5V18.439a1.5,1.5,0,0,0,1.5,1.5H18.437a1.5,1.5,0,0,0,1.5-1.5V5.566a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15.81,10.4c.45-.46-.26-1.17-.71-.71l-3.56,3.56c-.58-.58-1.16-1.15-1.73-1.73a.5.5,0,0,0-.71.71l2.08,2.08a.513.513,0,0,0,.71,0Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSquareChevDown (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Square_Chev_Down\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M8.65,10.85a.495.495,0,0,1,.7-.7L12,12.79l2.65-2.64a.495.495,0,0,1,.7.7l-3,3a.492.492,0,0,1-.7,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3.063,18.437V5.563a2.5,2.5,0,0,1,2.5-2.5H18.437a2.5,2.5,0,0,1,2.5,2.5V18.437a2.5,2.5,0,0,1-2.5,2.5H5.563A2.5,2.5,0,0,1,3.063,18.437ZM19.937,5.563a1.5,1.5,0,0,0-1.5-1.5H5.563a1.5,1.5,0,0,0-1.5,1.5V18.437a1.5,1.5,0,0,0,1.5,1.5H18.437a1.5,1.5,0,0,0,1.5-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSquareChevLeft (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Square_Chev_Left\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M11.21,12l2.64,2.65a.495.495,0,0,1-.7.7c-.13-.12-.25-.24-.38-.37-.87-.87-1.75-1.75-2.62-2.63a.492.492,0,0,1,0-.7l3-3a.495.495,0,0,1,.7.7Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.437,20.939H5.562a2.5,2.5,0,0,1-2.5-2.5V5.566a2.5,2.5,0,0,1,2.5-2.5H18.437a2.5,2.5,0,0,1,2.5,2.5V18.439A2.5,2.5,0,0,1,18.437,20.939ZM5.562,4.066a1.5,1.5,0,0,0-1.5,1.5V18.439a1.5,1.5,0,0,0,1.5,1.5H18.437a1.5,1.5,0,0,0,1.5-1.5V5.566a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSquareChevRight (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Square_Chev_Right\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10.85,15.35a.495.495,0,0,1-.7-.7L12.79,12,10.15,9.35a.495.495,0,0,1,.7-.7l3,3a.492.492,0,0,1,0,.7Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.437,20.937H5.563a2.5,2.5,0,0,1-2.5-2.5V5.563a2.5,2.5,0,0,1,2.5-2.5H18.437a2.5,2.5,0,0,1,2.5,2.5V18.437A2.5,2.5,0,0,1,18.437,20.937ZM5.563,4.063a1.5,1.5,0,0,0-1.5,1.5V18.437a1.5,1.5,0,0,0,1.5,1.5H18.437a1.5,1.5,0,0,0,1.5-1.5V5.563a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSquareChevUp (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Square_Chev_Up\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M15.35,13.15a.495.495,0,0,1-.7.7L12,11.21,9.35,13.85a.495.495,0,0,1-.7-.7l3-3a.492.492,0,0,1,.7,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.937,5.563V18.437a2.5,2.5,0,0,1-2.5,2.5H5.563a2.5,2.5,0,0,1-2.5-2.5V5.563a2.5,2.5,0,0,1,2.5-2.5H18.437A2.5,2.5,0,0,1,20.937,5.563ZM4.063,18.437a1.5,1.5,0,0,0,1.5,1.5H18.437a1.5,1.5,0,0,0,1.5-1.5V5.563a1.5,1.5,0,0,0-1.5-1.5H5.563a1.5,1.5,0,0,0-1.5,1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSquareInfo (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Square_Info\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.438,20.937H5.564a2.5,2.5,0,0,1-2.5-2.5V5.563a2.5,2.5,0,0,1,2.5-2.5H18.438a2.5,2.5,0,0,1,2.5,2.5V18.437A2.5,2.5,0,0,1,18.438,20.937ZM5.564,4.063a1.5,1.5,0,0,0-1.5,1.5V18.437a1.5,1.5,0,0,0,1.5,1.5H18.438a1.5,1.5,0,0,0,1.5-1.5V5.563a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12.5,9a.5.5,0,0,0-1,0h0v4.018a.5.5,0,0,0,1,0Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"14.999\",\"r\":\"0.5\"},\"child\":[]}]}]}]}]})(props);\n};\nexport function CiSquareMinus (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Square_Minus\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.438,20.938H5.564a2.5,2.5,0,0,1-2.5-2.5V5.564a2.5,2.5,0,0,1,2.5-2.5H18.438a2.5,2.5,0,0,1,2.5,2.5V18.438A2.5,2.5,0,0,1,18.438,20.938ZM5.564,4.064a1.5,1.5,0,0,0-1.5,1.5V18.438a1.5,1.5,0,0,0,1.5,1.5H18.438a1.5,1.5,0,0,0,1.5-1.5V5.564a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M9,12.5a.5.5,0,0,1,0-1h6a.5.5,0,0,1,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSquareMore (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Square_More\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.437,20.938H5.562a2.5,2.5,0,0,1-2.5-2.5V5.565a2.5,2.5,0,0,1,2.5-2.5H18.437a2.5,2.5,0,0,1,2.5,2.5V18.438A2.5,2.5,0,0,1,18.437,20.938ZM5.562,4.065a1.5,1.5,0,0,0-1.5,1.5V18.438a1.5,1.5,0,0,0,1.5,1.5H18.437a1.5,1.5,0,0,0,1.5-1.5V5.565a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"11.999\",\"cy\":\"12.002\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"15.999\",\"cy\":\"12.002\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"7.999\",\"cy\":\"12.002\",\"r\":\"1\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSquarePlus (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Square_Plus\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.438,20.938H5.563a2.5,2.5,0,0,1-2.5-2.5V5.564a2.5,2.5,0,0,1,2.5-2.5H18.438a2.5,2.5,0,0,1,2.5,2.5V18.438A2.5,2.5,0,0,1,18.438,20.938ZM5.563,4.064a1.5,1.5,0,0,0-1.5,1.5V18.438a1.5,1.5,0,0,0,1.5,1.5H18.438a1.5,1.5,0,0,0,1.5-1.5V5.564a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15,12.5H12.5V15a.5.5,0,0,1-1,0V12.5H9a.5.5,0,0,1,0-1h2.5V9a.5.5,0,0,1,1,0v2.5H15A.5.5,0,0,1,15,12.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSquareQuestion (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Square_Question\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M11.41,12.461a1.555,1.555,0,0,1,.341-.6,2.68,2.68,0,0,1,.535-.417,2.2,2.2,0,0,0,.363-.285,1.218,1.218,0,0,0,.256-.364A1.083,1.083,0,0,0,13,10.344a.927.927,0,0,0-.142-.518.946.946,0,0,0-.374-.338,1.135,1.135,0,0,0-.519-.119,1.188,1.188,0,0,0-.5.107.934.934,0,0,0-.389.335.884.884,0,0,0-.111.224.515.515,0,0,1-.483.359h0a.506.506,0,0,1-.479-.675,1.653,1.653,0,0,1,.178-.348,1.789,1.789,0,0,1,.748-.634,2.609,2.609,0,0,1,2.113.015,1.733,1.733,0,0,1,.721.642,1.766,1.766,0,0,1,.257.959,1.833,1.833,0,0,1-.118.678,1.674,1.674,0,0,1-.334.536,2.289,2.289,0,0,1-.52.417,2.245,2.245,0,0,0-.462.37,1.1,1.1,0,0,0-.256.454,2.344,2.344,0,0,0-.045.283.486.486,0,0,1-.483.429h0a.484.484,0,0,1-.483-.53A2.928,2.928,0,0,1,11.41,12.461Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"11.792\",\"cy\":\"14.894\",\"r\":\"0.587\"},\"child\":[]}]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.438,20.938H5.563a2.5,2.5,0,0,1-2.5-2.5V5.564a2.5,2.5,0,0,1,2.5-2.5H18.438a2.5,2.5,0,0,1,2.5,2.5V18.438A2.5,2.5,0,0,1,18.438,20.938ZM5.563,4.064a1.5,1.5,0,0,0-1.5,1.5V18.438a1.5,1.5,0,0,0,1.5,1.5H18.438a1.5,1.5,0,0,0,1.5-1.5V5.564a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSquareRemove (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Square_Remove\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.437,20.937H5.563a2.5,2.5,0,0,1-2.5-2.5V5.563a2.5,2.5,0,0,1,2.5-2.5H18.437a2.5,2.5,0,0,1,2.5,2.5V18.437A2.5,2.5,0,0,1,18.437,20.937ZM5.563,4.063a1.5,1.5,0,0,0-1.5,1.5V18.437a1.5,1.5,0,0,0,1.5,1.5H18.437a1.5,1.5,0,0,0,1.5-1.5V5.563a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13.767,14.477a.5.5,0,0,0,.71-.71L12.707,12l1.77-1.77a.5.5,0,0,0-.71-.7L12,11.3l-1.77-1.77a.5.5,0,0,0-.7.7c.59.59,1.17,1.18,1.77,1.77l-1.77,1.77c-.46.45.25,1.16.7.71L12,12.707Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiStar (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Star\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16.6,20.463a1.5,1.5,0,0,1-.7-.174l-3.666-1.927a.5.5,0,0,0-.464,0L8.1,20.289a1.5,1.5,0,0,1-2.177-1.581l.7-4.082a.5.5,0,0,0-.143-.442L3.516,11.293a1.5,1.5,0,0,1,.832-2.559l4.1-.6a.5.5,0,0,0,.376-.273l1.833-3.714a1.5,1.5,0,0,1,2.69,0l1.833,3.714a.5.5,0,0,0,.376.274l4.1.6a1.5,1.5,0,0,1,.832,2.559l-2.965,2.891a.5.5,0,0,0-.144.442l.7,4.082A1.5,1.5,0,0,1,16.6,20.463Zm-3.9-2.986L16.364,19.4a.5.5,0,0,0,.725-.527l-.7-4.082a1.5,1.5,0,0,1,.432-1.328l2.965-2.89a.5.5,0,0,0-.277-.853l-4.1-.6a1.5,1.5,0,0,1-1.13-.821L12.449,4.594a.516.516,0,0,0-.9,0L9.719,8.308a1.5,1.5,0,0,1-1.13.82l-4.1.6a.5.5,0,0,0-.277.853L7.18,13.468A1.5,1.5,0,0,1,7.611,14.8l-.7,4.082a.5.5,0,0,0,.726.527L11.3,17.477a1.5,1.5,0,0,1,1.4,0Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiStethoscope (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Stethoscope\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.185,9.256a2.748,2.748,0,0,0-.5,5.45v2.31a2.923,2.923,0,0,1-2.92,2.92h-2.78a2.923,2.923,0,0,1-2.92-2.92v-.98a5.5,5.5,0,0,0,5-5.47V5.286a1.483,1.483,0,0,0-1.03-1.42l-2.31-.78a.5.5,0,0,0-.63.32.491.491,0,0,0,.31.63l2.32.78a.486.486,0,0,1,.34.47v5.28a4.5,4.5,0,0,1-9,0V5.286a.486.486,0,0,1,.34-.47l2.32-.78a.491.491,0,0,0,.31-.63.5.5,0,0,0-.63-.32l-2.31.78a1.483,1.483,0,0,0-1.03,1.42v5.28a5.5,5.5,0,0,0,5,5.47v.98a3.926,3.926,0,0,0,3.92,3.92h2.78a3.926,3.926,0,0,0,3.92-3.92v-2.31a2.748,2.748,0,0,0-.5-5.45Zm0,4.5a1.75,1.75,0,1,1,1.75-1.75A1.758,1.758,0,0,1,18.185,13.756Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiStickyNote (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Sticky_Note\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.44,3.065H5.56a2.507,2.507,0,0,0-2.5,2.5v12.87a2.507,2.507,0,0,0,2.5,2.5h8.68A2.482,2.482,0,0,0,16,20.2l4.21-4.2a2.505,2.505,0,0,0,.73-1.77V5.565A2.5,2.5,0,0,0,18.44,3.065Zm-4.38,13.5v3.37H5.56a1.5,1.5,0,0,1-1.5-1.5V5.565a1.5,1.5,0,0,1,1.5-1.5H18.44a1.5,1.5,0,0,1,1.5,1.5v8.5H16.56A2.507,2.507,0,0,0,14.06,16.565Zm1,3.13v-3.13a1.5,1.5,0,0,1,1.5-1.5h3.13Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiStop1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Stop_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.437,20.937H5.563a2.5,2.5,0,0,1-2.5-2.5V5.563a2.5,2.5,0,0,1,2.5-2.5H18.437a2.5,2.5,0,0,1,2.5,2.5V18.437A2.5,2.5,0,0,1,18.437,20.937ZM5.563,4.063a1.5,1.5,0,0,0-1.5,1.5V18.437a1.5,1.5,0,0,0,1.5,1.5H18.437a1.5,1.5,0,0,0,1.5-1.5V5.563a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiStopSign1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Stop_Sign_1\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12.531,15.688H10.14a.5.5,0,0,1,0-1h2.391a1.094,1.094,0,0,0,0-2.188H11.468a2.094,2.094,0,0,1,0-4.188h2.391a.5.5,0,0,1,0,1H11.468a1.094,1.094,0,0,0,0,2.188h1.063a2.094,2.094,0,0,1,0,4.188Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15.079,21.933H8.92A2.482,2.482,0,0,1,7.153,21.2L2.8,16.847a2.484,2.484,0,0,1-.732-1.768V8.921A2.486,2.486,0,0,1,2.8,7.153L7.153,2.8A2.482,2.482,0,0,1,8.92,2.067h6.159a2.482,2.482,0,0,1,1.767.732L21.2,7.154a2.482,2.482,0,0,1,.732,1.767v6.158a2.491,2.491,0,0,1-.731,1.768L16.846,21.2A2.482,2.482,0,0,1,15.079,21.933ZM8.92,3.067a1.511,1.511,0,0,0-1.06.439L3.506,7.861a1.489,1.489,0,0,0-.439,1.06v6.158a1.491,1.491,0,0,0,.439,1.061L7.86,20.494a1.511,1.511,0,0,0,1.06.439h6.159a1.511,1.511,0,0,0,1.06-.439l4.355-4.354a1.494,1.494,0,0,0,.439-1.061V8.921a1.511,1.511,0,0,0-.439-1.06L16.139,3.506a1.511,1.511,0,0,0-1.06-.439Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiStopwatch (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Stopwatch\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.925,7.828c1.226,1.391 1.97,3.217 1.97,5.215c0,4.358 -3.537,7.895 -7.895,7.895c-4.358,0 -7.896,-3.537 -7.896,-7.895c0,-4.189 3.271,-7.621 7.396,-7.879l0,-1.103l-1.587,0c-0.645,0 -0.643,-1 -0,-1l4.174,0c0.645,0 0.644,1 -0,1l-1.587,0l0,1.103c1.803,0.113 3.443,0.832 4.718,1.956c0.378,-0.378 0.756,-0.756 1.135,-1.134c0.197,-0.198 0.507,-0.183 0.707,-0c0.199,0.183 0.185,0.522 -0,0.707l-1.135,1.135Zm0.97,5.215c0,-3.805 -3.089,-6.895 -6.895,-6.895c-3.806,0.001 -6.896,3.09 -6.896,6.895c0,3.806 3.09,6.895 6.896,6.895c3.806,0 6.895,-3.089 6.895,-6.895Zm-6.395,0.001c0,0.645 -1,0.643 -1,-0l0,-4.704c0,-0.644 1,-0.643 1,-0l0,4.704Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiStreamOff (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Stream_Off\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4.911,4.206c-.45-.45-1.16.26-.71.71l.32.32v.01A10.646,10.646,0,0,0,5.541,19.8c.48.43,1.19-.28.71-.71a9.623,9.623,0,0,1-1.01-13.13l2.27,2.27a6.022,6.022,0,0,0,.61,8.18c.48.44,1.19-.27.71-.7a5.024,5.024,0,0,1-.61-6.77l2.61,2.61a1.13,1.13,0,0,0-.09.45,1.248,1.248,0,0,0,1.25,1.24,1.13,1.13,0,0,0,.45-.09l4.77,4.77.86.86a3.024,3.024,0,0,1-.31.31.355.355,0,0,0-.11.16.406.406,0,0,0-.04.19.381.381,0,0,0,.04.19.386.386,0,0,0,.11.17.5.5,0,0,0,.35.14.585.585,0,0,0,.13-.02.432.432,0,0,0,.22-.12c.11-.1.22-.2.32-.3.1.09.19.19.29.29.45.45,1.16-.26.71-.71Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M17.73,4.908a9.624,9.624,0,0,1,2.3,11.1c-.265.582.6,1.09.864.505A10.647,10.647,0,0,0,18.438,4.2c-.475-.433-1.185.272-.708.707Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15.15,8.291a5.016,5.016,0,0,1,1.6,4.572.515.515,0,0,0,.349.615.5.5,0,0,0,.615-.349,6.042,6.042,0,0,0-1.852-5.546c-.476-.431-1.185.274-.708.708Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiStreamOn (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Stream_On\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M6.26,19.089A9.625,9.625,0,0,1,6.234,4.911C6.709,4.475,6,3.769,5.527,4.2A10.516,10.516,0,0,0,5.553,19.8c.475.433,1.184-.273.707-.707Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.84,15.706a5.024,5.024,0,0,1-.014-7.412c.474-.437-.234-1.143-.707-.707a6.028,6.028,0,0,0,.014,8.826c.474.434,1.183-.272.707-.707Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"1.244\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M17.74,4.911a9.625,9.625,0,0,1,.026,14.178c-.475.436.234,1.142.707.707A10.516,10.516,0,0,0,18.447,4.2c-.475-.433-1.184.273-.707.707Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15.16,8.294a5.024,5.024,0,0,1,.014,7.412c-.474.437.234,1.143.707.707a6.028,6.028,0,0,0-.014-8.826c-.474-.434-1.183.272-.707.707Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiSun (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Sun\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12,20.937a1.074,1.074,0,0,1-.94-.542L9.61,17.9a.084.084,0,0,0-.1-.041L6.728,18.6A1.087,1.087,0,0,1,5.4,17.272l.748-2.8a.088.088,0,0,0-.041-.1l-2.5-1.439a1.086,1.086,0,0,1,0-1.881L6.1,9.61a.087.087,0,0,0,.041-.1L5.4,6.728A1.087,1.087,0,0,1,6.728,5.4l2.8.748a.091.091,0,0,0,.1-.041l1.439-2.5A1.076,1.076,0,0,1,12,3.063h0a1.074,1.074,0,0,1,.94.542L14.39,6.1a.084.084,0,0,0,.1.041L17.272,5.4A1.087,1.087,0,0,1,18.6,6.728l-.748,2.8a.087.087,0,0,0,.041.1l2.5,1.439a1.086,1.086,0,0,1,0,1.881L17.9,14.39a.089.089,0,0,0-.041.1l.748,2.784A1.087,1.087,0,0,1,17.272,18.6l-2.8-.748a.089.089,0,0,0-.1.041l-1.439,2.5a1.076,1.076,0,0,1-.94.544ZM9.534,16.853a1.091,1.091,0,0,1,.942.541l1.448,2.5a.082.082,0,0,0,.075.043h0a.081.081,0,0,0,.074-.043l1.44-2.5a1.083,1.083,0,0,1,1.221-.507l2.8.747a.087.087,0,0,0,.106-.106l-.747-2.785a1.089,1.089,0,0,1,.5-1.222l2.5-1.448a.086.086,0,0,0,0-.15l-2.5-1.439a1.086,1.086,0,0,1-.507-1.221l.747-2.8a.08.08,0,0,0-.022-.083.086.086,0,0,0-.085-.023l-2.784.747a1.088,1.088,0,0,1-1.222-.5l-1.448-2.5A.082.082,0,0,0,12,4.063h0a.081.081,0,0,0-.074.043l-1.44,2.5a1.087,1.087,0,0,1-1.222.507l-2.8-.747a.087.087,0,0,0-.106.106L7.11,9.254a1.089,1.089,0,0,1-.5,1.222l-2.5,1.448A.082.082,0,0,0,4.063,12a.081.081,0,0,0,.043.074l2.5,1.44a1.087,1.087,0,0,1,.507,1.221l-.747,2.8a.08.08,0,0,0,.022.083.087.087,0,0,0,.085.023l2.784-.747A1.077,1.077,0,0,1,9.534,16.853Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,15.875A3.875,3.875,0,1,1,15.875,12,3.88,3.88,0,0,1,12,15.875Zm0-6.75A2.875,2.875,0,1,0,14.875,12,2.879,2.879,0,0,0,12,9.125Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiTablets1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Tablets_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14.76,3.065a6.171,6.171,0,0,0-6.11,5.58,6.159,6.159,0,1,0,6.71,6.71,6.159,6.159,0,0,0-.6-12.29ZM9.23,19.935A5.166,5.166,0,0,1,5.24,11.5l7.27,7.26A5.153,5.153,0,0,1,9.23,19.935Zm3.99-1.88-7.27-7.27a5.165,5.165,0,0,1,7.27,7.27Zm2.15-3.71a6.12,6.12,0,0,0-5.72-5.71,5.157,5.157,0,1,1,5.72,5.71Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiTempHigh (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Temp_High\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14.863,13.4V4.939a2.929,2.929,0,0,0-.84-2.03,2.859,2.859,0,0,0-2.23-.82,2.948,2.948,0,0,0-2.66,3l.01,8.28a4.755,4.755,0,0,0,1.9,8.46,5.093,5.093,0,0,0,.95.09,4.759,4.759,0,0,0,4.76-4.75A4.684,4.684,0,0,0,14.863,13.4Zm-.48,6.66a3.783,3.783,0,0,1-3.15.78,3.7,3.7,0,0,1-2.92-2.98,3.745,3.745,0,0,1,1.43-3.69.962.962,0,0,0,.39-.77V5.089a1.968,1.968,0,0,1,1.73-2,.66.66,0,0,1,.14-.01,1.878,1.878,0,0,1,1.86,1.86V13.4a.962.962,0,0,0,.39.77,3.742,3.742,0,0,1,.13,5.89Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13.893,17.169a1.89,1.89,0,0,1-3.78,0,1.858,1.858,0,0,1,1.39-1.81V5.4a.5.5,0,0,1,1,0v9.96A1.869,1.869,0,0,1,13.893,17.169Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiTextAlignCenter (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Text_Align_Center\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,4.063H3.563a.5.5,0,1,1,0-1H20.437a.5.5,0,1,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.5,8.5h-9a.5.5,0,0,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.5,16.5h-9a.5.5,0,1,1,0-1h9a.5.5,0,1,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,12.5H3.563a.5.5,0,0,1,0-1H20.437a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,20.937H3.563a.5.5,0,1,1,0-1H20.437a.5.5,0,0,1,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiTextAlignJustify (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Text_Align_Justify\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,4.064H3.563a.5.5,0,0,1,0-1H20.437a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,8.5H3.563a.5.5,0,0,1,0-1H20.437a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,16.5H3.563a.5.5,0,1,1,0-1H20.437a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,12.5H3.563a.5.5,0,0,1,0-1H20.437a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,20.936H3.563a.5.5,0,1,1,0-1H20.437a.5.5,0,1,1,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiTextAlignLeft (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Text_Align_Left\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.438,4.063H3.563a.5.5,0,1,1,0-1H20.438a.5.5,0,1,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12.562,8.5h-9a.5.5,0,0,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12.562,16.5h-9a.5.5,0,1,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.436,12.5H3.562a.5.5,0,1,1,0-1H20.436a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.436,20.937H3.562a.5.5,0,0,1,0-1H20.436a.5.5,0,0,1,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiTextAlignRight (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Text_Align_Right\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,4.064H3.563a.5.5,0,0,1,0-1H20.437a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,8.5h-9a.5.5,0,1,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,16.5h-9a.5.5,0,1,1,0-1h9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,12.5H3.563a.5.5,0,0,1,0-1H20.437a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.437,20.936H3.563a.5.5,0,1,1,0-1H20.437a.5.5,0,1,1,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiText (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Text\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.44,2.06H5.56a1.5,1.5,0,0,0-1.5,1.5v4.5a.5.5,0,0,0,1,0v-1H10V20.94H8a.5.5,0,0,0,0,1h8a.5.5,0,0,0,0-1H14V7.06h4.94v1a.5.5,0,0,0,1,0V3.56A1.5,1.5,0,0,0,18.44,2.06Zm.5,4H14a1,1,0,0,0-1,1V20.94H11V7.06a1,1,0,0,0-1-1H5.06V3.56a.5.5,0,0,1,.5-.5H18.44a.5.5,0,0,1,.5.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiTimer (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Timer\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M2.336,9.685A9.934,9.934,0,0,0,13.592,21.808,9.931,9.931,0,0,0,20.708,7.23,10.046,10.046,0,0,0,12,2.072a.507.507,0,0,0-.5.5v4.2a.5.5,0,0,0,1,0v-4.2l-.5.5a8.935,8.935,0,0,1,8.433,11.892A8.938,8.938,0,0,1,6.468,19.027,9.041,9.041,0,0,1,3.3,9.951c.142-.627-.822-.9-.964-.266Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M7.4,8.117a.5.5,0,0,1,.707-.707l4.243,4.242h0a.5.5,0,0,1-.707.707Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiTrash (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Trash\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.45,4.06H15.27v-.5a1.5,1.5,0,0,0-1.5-1.5H10.23a1.5,1.5,0,0,0-1.5,1.5v.5H4.55a.5.5,0,0,0,0,1h.72l.42,14.45a2.493,2.493,0,0,0,2.5,2.43h7.62a2.493,2.493,0,0,0,2.5-2.43l.42-14.45h.72A.5.5,0,0,0,19.45,4.06Zm-9.72-.5a.5.5,0,0,1,.5-.5h3.54a.5.5,0,0,1,.5.5v.5H9.73Zm7.58,15.92a1.5,1.5,0,0,1-1.5,1.46H8.19a1.5,1.5,0,0,1-1.5-1.46L6.26,5.06H17.74Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.375,8h0a.5.5,0,0,1,1,0l.25,10a.5.5,0,0,1-1,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15.625,8.007a.5.5,0,0,0-1,0h0l-.25,10a.5.5,0,0,0,1,0Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiTrophy (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Trophy\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.435,5.055h-.97c.01-.12.02-.24.02-.36a1.645,1.645,0,0,0-.45-1.18,1.462,1.462,0,0,0-1.05-.45H7.025a1.484,1.484,0,0,0-1.06.45,1.6,1.6,0,0,0-.44,1.18c0,.12.01.24.02.36h-.98a1.5,1.5,0,0,0-1.5,1.5v2a4.5,4.5,0,0,0,4.27,4.49c1.07,2.3,2.53,3.79,4.17,4.04v2.85h-4a.5.5,0,1,0,0,1h9a.5.5,0,0,0,0-1h-4v-2.85c1.64-.25,3.1-1.74,4.17-4.04a4.493,4.493,0,0,0,4.26-4.49v-2A1.5,1.5,0,0,0,19.435,5.055Zm-15.37,3.5v-2a.5.5,0,0,1,.5-.5h1.04a22.9,22.9,0,0,0,1.28,5.93A3.5,3.5,0,0,1,4.065,8.555Zm7.94,7.57c-2.82,0-5.23-5.04-5.48-11.47a.573.573,0,0,1,.16-.44.48.48,0,0,1,.34-.15h9.96a.442.442,0,0,1,.33.15.62.62,0,0,1,.17.44C17.235,11.085,14.825,16.125,12.005,16.125Zm7.93-7.57a3.508,3.508,0,0,1-2.8,3.42,23.353,23.353,0,0,0,1.27-5.92h1.03a.5.5,0,0,1,.5.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiTurnL1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Turn_L_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.939,9.509v10.93a.508.508,0,0,1-.5.5.5.5,0,0,1-.5-.5V9.509a3.5,3.5,0,0,0-3.5-3.5h-9.9l-.01,1.44a.5.5,0,0,1-.81.4l-2.47-1.96a.5.5,0,0,1,0-.78l2.49-1.94a.5.5,0,0,1,.81.4l-.01,1.44h9.9A4.507,4.507,0,0,1,20.939,9.509Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiTurnR1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Turn_R_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3.061,9.509v10.93a.508.508,0,0,0,.5.5.5.5,0,0,0,.5-.5V9.509a3.5,3.5,0,0,1,3.5-3.5h9.9l.01,1.44a.5.5,0,0,0,.81.4l2.47-1.96a.5.5,0,0,0,0-.78l-2.49-1.94a.5.5,0,0,0-.81.4l.01,1.44h-9.9A4.507,4.507,0,0,0,3.061,9.509Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiTwitter (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Twitter\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.913,5.322a1.034,1.034,0,0,1,.837,1.629L19.708,8.432c-.064,5.086-1.765,8.539-5.056,10.264A10.917,10.917,0,0,1,9.6,19.835a12.233,12.233,0,0,1-6.2-1.524.76.76,0,0,1-.317-.8.768.768,0,0,1,.63-.6,20.6,20.6,0,0,0,3.745-.886C2,13.5,3.19,7.824,3.71,6.081a1.028,1.028,0,0,1,1.729-.422,9.931,9.931,0,0,0,5.995,2.95A4.188,4.188,0,0,1,12.725,5.3a4.125,4.125,0,0,1,5.7.02ZM4.521,17.794c1.862.872,6.226,1.819,9.667.016,2.955-1.549,4.476-4.732,4.521-9.461a.771.771,0,0,1,.142-.436l1.081-1.538-.041-.053c-.518-.007-1.029-.014-1.55,0a.835.835,0,0,1-.547-.221,3.13,3.13,0,0,0-4.383-.072,3.174,3.174,0,0,0-.935,2.87.646.646,0,0,1-.154.545.591.591,0,0,1-.516.205A10.924,10.924,0,0,1,4.722,6.354c-.67,2.078-1.52,7.094,3.869,9.065a.632.632,0,0,1,.416.538.625.625,0,0,1-.3.6A13.178,13.178,0,0,1,4.521,17.794ZM11.875,8.65h0Zm7.793-.161,0,0Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiUmbrella (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Umbrella\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12.5,4.06v-.5a.509.509,0,0,0-.15-.35.483.483,0,0,0-.7,0,.491.491,0,0,0-.15.35v.5a8.41,8.41,0,0,0-7.88,7.82.976.976,0,0,0,.27.74,1.029,1.029,0,0,0,.74.32H11.5v5.22a1.653,1.653,0,0,1-.62,1.54A1.528,1.528,0,0,1,8.5,18.54a.5.5,0,0,0-1,0,2.433,2.433,0,0,0,2.43,2.4,2.45,2.45,0,0,0,2.57-2.29c.08-1.39,0-2.81,0-4.2V12.94h6.87a1.029,1.029,0,0,0,.74-.32.976.976,0,0,0,.27-.74A8.41,8.41,0,0,0,12.5,4.06Zm6.87,7.88-14.75.01a7.4,7.4,0,0,1,14.76-.02C19.38,11.94,19.38,11.94,19.37,11.94Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiUndo (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Undo\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.939,13.67A7.958,7.958,0,0,1,7.8,19.74a8.061,8.061,0,0,1-3.77-6.77.5.5,0,0,1,1,0,6.976,6.976,0,0,0,11,5.7,6.969,6.969,0,0,0-1-11.97,10.075,10.075,0,0,0-4.64-.69V7.46a.5.5,0,0,1-.81.39L7.109,5.9a.5.5,0,0,1,0-.79L9.6,3.17a.5.5,0,0,1,.8.4V5.01c.71-.01,1.43-.03,2.13.02a7.985,7.985,0,0,1,7.41,8.64Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiUnlock (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Unlock\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.44,9.33h-1.1c0-.97.01-1.95,0-2.92A4.343,4.343,0,0,0,8.36,4.04c-.36.53.51,1.03.87.5a3.365,3.365,0,0,1,5.23-.39c1.04,1.11.88,2.57.88,3.96V9.33H6.56a2.5,2.5,0,0,0-2.5,2.5v7.61a2.507,2.507,0,0,0,2.5,2.5H17.44a2.507,2.507,0,0,0,2.5-2.5V11.83A2.5,2.5,0,0,0,17.44,9.33Zm1.5,10.11a1.511,1.511,0,0,1-1.5,1.5H6.56a1.511,1.511,0,0,1-1.5-1.5V11.83a1.5,1.5,0,0,1,1.5-1.5H17.44a1.5,1.5,0,0,1,1.5,1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13,14.95a.984.984,0,0,1-.5.86v1.5a.5.5,0,0,1-1,0v-1.5a.984.984,0,0,1-.5-.86,1,1,0,0,1,2,0Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiUnread (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"unread\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10.182,6.314a10.215,10.215,0,0,1,7.9,1.782,9.145,9.145,0,0,1,2.5,2.817,1.875,1.875,0,0,1,.082,2.024,9.266,9.266,0,0,1-1.485,2.008c-.446.464.26,1.172.707.707,1.1-1.144,2.533-2.86,1.9-4.554a8.845,8.845,0,0,0-2.721-3.5A11.243,11.243,0,0,0,9.916,5.35c-.633.11-.364,1.074.266.964Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M19.824,19.11q-3.045-3.045-6.09-6.08c-.93-.93-1.85-1.86-2.77-2.77Q8.849,8.145,6.754,6.04L4.894,4.18c-.45-.45-1.16.26-.71.71l1.9,1.9a10.42,10.42,0,0,0-3.22,3.12,3.743,3.743,0,0,0-.8,2.28,4.581,4.581,0,0,0,.99,2.17,10.925,10.925,0,0,0,8.18,4.5A11.379,11.379,0,0,0,17,17.71l.25.25,1.86,1.86C19.564,20.27,20.274,19.56,19.824,19.11Zm-10.3-8.88c.25.24.49.49.73.73A2.039,2.039,0,0,0,12,14.03a2.023,2.023,0,0,0,1.04-.28c.25.24.49.49.73.73a3.047,3.047,0,0,1-4.25-4.25Zm-3.7,5.6a9.558,9.558,0,0,1-1.81-1.84c-.53-.71-1.19-1.62-.85-2.55a8.348,8.348,0,0,1,3.65-3.92c.67.67,1.34,1.33,2,2a4.04,4.04,0,0,0,5.67,5.67c.6.59,1.19,1.19,1.78,1.78A10.4,10.4,0,0,1,5.824,15.83Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiUsb (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Usb\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.44,8.355H18.31v-.14a1.443,1.443,0,0,0-1.44-1.45H7.29a5.235,5.235,0,0,0,0,10.47h9.58a1.443,1.443,0,0,0,1.44-1.45v-.14h2.13a1.511,1.511,0,0,0,1.5-1.5V9.855A1.5,1.5,0,0,0,20.44,8.355Zm-3.13,7.43a.446.446,0,0,1-.44.45H7.29a4.235,4.235,0,0,1,0-8.47h9.58a.446.446,0,0,1,.44.45Zm3.63-1.64a.508.508,0,0,1-.5.5H18.31V9.355h2.13a.5.5,0,0,1,.5.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6.29,13.444A1.446,1.446,0,1,1,7.738,12,1.447,1.447,0,0,1,6.29,13.444Zm0-1.892A.446.446,0,1,0,6.738,12,.446.446,0,0,0,6.29,11.552Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiUser (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"User\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.438,21.937H6.562a2.5,2.5,0,0,1-2.5-2.5V18.61c0-3.969,3.561-7.2,7.938-7.2s7.938,3.229,7.938,7.2v.827A2.5,2.5,0,0,1,17.438,21.937ZM12,12.412c-3.826,0-6.938,2.78-6.938,6.2v.827a1.5,1.5,0,0,0,1.5,1.5H17.438a1.5,1.5,0,0,0,1.5-1.5V18.61C18.938,15.192,15.826,12.412,12,12.412Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,9.911a3.924,3.924,0,1,1,3.923-3.924A3.927,3.927,0,0,1,12,9.911Zm0-6.847a2.924,2.924,0,1,0,2.923,2.923A2.926,2.926,0,0,0,12,3.064Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiVault (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Vault\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M15.935,6.06H8.065a2,2,0,0,0-2,2v6a1.993,1.993,0,0,0,2,2h7.87a2,2,0,0,0,2-2v-6A2.006,2.006,0,0,0,15.935,6.06Zm1,8a1,1,0,0,1-1,1H8.065a.99.99,0,0,1-1-1v-6a1,1,0,0,1,1-1h7.87a1,1,0,0,1,1,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.435,3.06H5.565a2.507,2.507,0,0,0-2.5,2.5v11a2.5,2.5,0,0,0,2.5,2.5v.38a1.5,1.5,0,0,0,1.5,1.5h1.43a1.5,1.5,0,0,0,1.5-1.5v-.38h4v.38a1.5,1.5,0,0,0,1.5,1.5h1.44a1.5,1.5,0,0,0,1.5-1.5v-.38a2.5,2.5,0,0,0,2.5-2.5v-11A2.507,2.507,0,0,0,18.435,3.06ZM8.995,19.44a.5.5,0,0,1-.5.5H7.065a.5.5,0,0,1-.5-.5v-.38h2.43Zm8.44,0a.5.5,0,0,1-.5.5H15.5a.508.508,0,0,1-.5-.5v-.38h2.44Zm2.5-2.88a1.5,1.5,0,0,1-1.5,1.5H5.565a1.5,1.5,0,0,1-1.5-1.5v-11a1.5,1.5,0,0,1,1.5-1.5h12.87a1.5,1.5,0,0,1,1.5,1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.265,10.56h-.61A1.656,1.656,0,0,0,12.5,9.4V8.79a.491.491,0,0,0-.5-.48.5.5,0,0,0-.5.48V9.4a1.656,1.656,0,0,0-1.16,1.16h-.61a.5.5,0,0,0-.48.5.491.491,0,0,0,.48.5h.61a1.656,1.656,0,0,0,1.16,1.16v.62a.489.489,0,0,0,.5.47.483.483,0,0,0,.5-.47v-.62a1.622,1.622,0,0,0,1.16-1.16h.61a.485.485,0,0,0,.48-.5A.491.491,0,0,0,14.265,10.56ZM12,11.81a.75.75,0,1,1,.75-.75A.749.749,0,0,1,12,11.81Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiVial (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Vial\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.779,9.441l-.48-.47L15.039,3.7l-.48-.48a.5.5,0,0,0-.7,0,.5.5,0,0,0,0,.71l.47.48L4.159,14.581a3.694,3.694,0,0,0,0,5.22l.04.04a3.706,3.706,0,0,0,5.23,0L19.6,9.671l.47.48a.52.52,0,0,0,.71,0A.513.513,0,0,0,20.779,9.441Zm-12.06,9.69a2.7,2.7,0,0,1-3.81,0l-.04-.04a2.7,2.7,0,0,1,0-3.81l1.7-1.7h7.71Zm6.56-6.55H7.569l7.47-7.46,3.85,3.85Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiVideoOff (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Video_Off\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.783,9.51v6.53a.5.5,0,0,1-1,0V9.6c0-.85.06-1.72,0-2.57-.03-.37-.27-.5-.61-.3-.39.22-.76.51-1.13.76-.73.49-1.47.99-2.2,1.49,0,.71-.01,1.41-.01,2.11a.5.5,0,0,1-1,0V9.12c0-.58.01-1.16,0-1.74a1.524,1.524,0,0,0-1.56-1.5c-1.22-.01-2.43,0-3.65,0a.5.5,0,0,1,0-1h2.13c.6,0,1.22-.05,1.81.01a2.54,2.54,0,0,1,2.27,2.5c0,.13.01.26,0,.39.77-.53,1.55-1.05,2.32-1.57a2.466,2.466,0,0,1,1.26-.6,1.364,1.364,0,0,1,1.37,1.36C20.813,7.81,20.783,8.67,20.783,9.51Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M19.773,19.08q-6.5-6.51-12.99-13c-.62-.62-1.24-1.24-1.87-1.86-.45-.46-1.16.25-.7.71l.28.28A2.468,2.468,0,0,0,3.2,7.38v9.24a2.5,2.5,0,0,0,2.5,2.5h7.63a2.5,2.5,0,0,0,2.5-2.5v-.07l1.37,1.37c.62.62,1.24,1.24,1.87,1.86A.5.5,0,0,0,19.773,19.08Zm-4.94-2.46a1.5,1.5,0,0,1-1.5,1.5H5.7a1.5,1.5,0,0,1-1.5-1.5V7.38a1.5,1.5,0,0,1,1.04-1.42l9.59,9.59Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiVideoOn (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Video_On\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.05,5.05a1.433,1.433,0,0,0-1.48.08L16.25,7.37V6.56a2.5,2.5,0,0,0-2.5-2.5H4.69a2.5,2.5,0,0,0-2.5,2.5V17.44a2.5,2.5,0,0,0,2.5,2.5h9.06a2.5,2.5,0,0,0,2.5-2.5v-.81l3.32,2.24a1.5,1.5,0,0,0,.81.24,1.414,1.414,0,0,0,1.43-1.43V6.32A1.437,1.437,0,0,0,21.05,5.05Zm-5.8,12.39a1.5,1.5,0,0,1-1.5,1.5H4.69a1.5,1.5,0,0,1-1.5-1.5V6.56a1.5,1.5,0,0,1,1.5-1.5h9.06a1.5,1.5,0,0,1,1.5,1.5Zm5.56.24a.415.415,0,0,1-.23.38.425.425,0,0,1-.45-.02l-3.88-2.62V8.58l3.88-2.62a.425.425,0,0,1,.45-.02.415.415,0,0,1,.23.38Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiViewBoard (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"View_Board\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.437,20.936H5.563a2.5,2.5,0,0,1-2.5-2.5V5.562a2.5,2.5,0,0,1,2.5-2.5H18.437a2.5,2.5,0,0,1,2.5,2.5V18.436A2.5,2.5,0,0,1,18.437,20.936ZM5.563,4.062a1.5,1.5,0,0,0-1.5,1.5V18.436a1.5,1.5,0,0,0,1.5,1.5H18.437a1.5,1.5,0,0,0,1.5-1.5V5.562a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12.5,14.544a.5.5,0,0,1-1,0v-8h0a.5.5,0,0,1,1,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.717,12.453a.5.5,0,0,1-1,0V6.544h0a.5.5,0,0,1,1,0Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.28,6.544a.5.5,0,0,0-1,0h0v4a.5.5,0,0,0,1,0Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiViewColumn (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"View_Column\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.44,3.06H5.56a2.507,2.507,0,0,0-2.5,2.5V18.44a2.514,2.514,0,0,0,2.5,2.5H18.44a2.514,2.514,0,0,0,2.5-2.5V5.56A2.507,2.507,0,0,0,18.44,3.06ZM8.67,19.94H5.56a1.511,1.511,0,0,1-1.5-1.5V5.56a1.5,1.5,0,0,1,1.5-1.5H8.67Zm1-15.88h4.66V19.94H9.67ZM19.94,18.44a1.511,1.511,0,0,1-1.5,1.5H15.33V4.06h3.11a1.5,1.5,0,0,1,1.5,1.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiViewList (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"View_List\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.436,20.937H5.562a2.5,2.5,0,0,1-2.5-2.5V5.563a2.5,2.5,0,0,1,2.5-2.5H18.436a2.5,2.5,0,0,1,2.5,2.5V18.437A2.5,2.5,0,0,1,18.436,20.937ZM5.562,4.063a1.5,1.5,0,0,0-1.5,1.5V18.437a1.5,1.5,0,0,0,1.5,1.5H18.436a1.5,1.5,0,0,0,1.5-1.5V5.563a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6.544,8.283h0a.519.519,0,0,1-.353-.147.5.5,0,0,1,0-.707.512.512,0,0,1,.353-.146H7.55a.516.516,0,0,1,.353.146.5.5,0,0,1,.147.354.5.5,0,0,1-.5.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6.544,12.5h0a.523.523,0,0,1-.353-.146.5.5,0,0,1,0-.708.516.516,0,0,1,.353-.146H7.55a.521.521,0,0,1,.353.146.5.5,0,0,1,0,.708.516.516,0,0,1-.353.146Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6.544,16.72h0a.519.519,0,0,1-.353-.147.5.5,0,0,1,0-.707.516.516,0,0,1,.353-.146H7.55a.516.516,0,0,1,.353.146.5.5,0,0,1,.147.354.5.5,0,0,1-.5.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M10.554,8.281h0a.5.5,0,0,1,0-1h6.9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M10.554,12.5h0a.5.5,0,0,1,0-1h6.9a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M10.554,16.718h0a.5.5,0,0,1,0-1h6.9a.5.5,0,0,1,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiViewTable (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"View_Table\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.44,3.06H5.56a2.507,2.507,0,0,0-2.5,2.5V18.44a2.507,2.507,0,0,0,2.5,2.5H18.44a2.514,2.514,0,0,0,2.5-2.5V5.56A2.514,2.514,0,0,0,18.44,3.06ZM8.71,19.94H5.56a1.5,1.5,0,0,1-1.5-1.5V15.33H8.71Zm0-5.61H4.06V9.67H8.71Zm0-5.66H4.06V5.56a1.5,1.5,0,0,1,1.5-1.5H8.71Zm11.23,9.77a1.511,1.511,0,0,1-1.5,1.5H9.71V15.33H19.94Zm0-4.11H9.71V9.67H19.94Zm0-5.66H9.71V4.06h8.73a1.511,1.511,0,0,1,1.5,1.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiViewTimeline (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"View_Timeline\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.436,20.94H5.562a2.5,2.5,0,0,1-2.5-2.5V5.567a2.5,2.5,0,0,1,2.5-2.5H18.436a2.5,2.5,0,0,1,2.5,2.5V18.44A2.5,2.5,0,0,1,18.436,20.94ZM5.562,4.067a1.5,1.5,0,0,0-1.5,1.5V18.44a1.5,1.5,0,0,0,1.5,1.5H18.436a1.5,1.5,0,0,0,1.5-1.5V5.567a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6.544,8.287h0a.5.5,0,0,1,0-1H12a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M9.271,12.5h0a.5.5,0,0,1,0-1h5.454a.5.5,0,0,1,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12,16.724h0a.5.5,0,0,1,0-1h5.455a.5.5,0,0,1,0,1Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiVirus (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Virus\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M5.86,19.905a.485.485,0,0,0,.35.15.469.469,0,0,0,.35-.15.483.483,0,0,0,0-.7l-.53-.53,1.74-1.74a6.426,6.426,0,0,0,3.73,1.54v2.46h-.75a.5.5,0,0,0,0,1h2.5a.5.5,0,1,0,0-1H12.5v-2.46a6.426,6.426,0,0,0,3.73-1.54l1.74,1.74-.53.53a.483.483,0,0,0,0,.7.469.469,0,0,0,.35.15.485.485,0,0,0,.35-.15l1.77-1.76a.513.513,0,0,0,0-.71.5.5,0,0,0-.71,0l-.52.53-1.74-1.74a6.435,6.435,0,0,0,1.54-3.73h2.46v.75a.5.5,0,0,0,.5.5.5.5,0,0,0,.5-.5v-2.5a.508.508,0,0,0-.5-.5.5.5,0,0,0-.5.5v.75H18.48a6.418,6.418,0,0,0-1.55-3.72l1.75-1.74.52.53a.508.508,0,0,0,.36.15.5.5,0,0,0,.35-.15.513.513,0,0,0,0-.71l-1.77-1.77a.5.5,0,0,0-.7,0,.5.5,0,0,0,0,.71l.53.53-1.74,1.74a6.382,6.382,0,0,0-3.73-1.55V3.065h.75a.5.5,0,0,0,.5-.5.5.5,0,0,0-.5-.5h-2.5a.5.5,0,0,0-.5.5.5.5,0,0,0,.5.5h.75v2.45a6.382,6.382,0,0,0-3.73,1.55L6.03,5.325l.53-.53a.5.5,0,0,0,0-.71.5.5,0,0,0-.7,0L4.09,5.855a.513.513,0,0,0,0,.71.5.5,0,0,0,.35.15.508.508,0,0,0,.36-.15l.52-.53,1.75,1.74A6.418,6.418,0,0,0,5.52,11.5H3.06v-.75a.5.5,0,0,0-.5-.5.508.508,0,0,0-.5.5v2.5a.5.5,0,0,0,.5.5.5.5,0,0,0,.5-.5V12.5H5.52a6.435,6.435,0,0,0,1.54,3.73l-1.74,1.74-.52-.53a.5.5,0,0,0-.71,0,.513.513,0,0,0,0,.71Zm10.03-4.02A5.5,5.5,0,1,1,17.5,12,5.448,5.448,0,0,1,15.89,15.885Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiVoicemail (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Voicemail\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.435,7.5a4.5,4.5,0,0,0-2.82,8H9.385a4.494,4.494,0,1,0-2.82,1h10.87a4.5,4.5,0,0,0,0-9ZM3.065,12a3.5,3.5,0,1,1,3.56,3.5h-.06A3.5,3.5,0,0,1,3.065,12Zm14.37,3.5h-.06a3.53,3.53,0,1,1,.06,0Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiVolumeHigh (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Volume_High\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M13.816,19.937a1.446,1.446,0,0,1-.717-.194L9.43,17.623a3.257,3.257,0,0,0-1.625-.434H4.439a2.379,2.379,0,0,1-2.375-2.376V9.187A2.378,2.378,0,0,1,4.439,6.812H7.805A3.257,3.257,0,0,0,9.43,6.376L13.1,4.259A1.437,1.437,0,0,1,15.255,5.5V18.5a1.424,1.424,0,0,1-.718,1.245A1.445,1.445,0,0,1,13.816,19.937ZM4.439,7.812A1.377,1.377,0,0,0,3.064,9.187v5.626a1.378,1.378,0,0,0,1.375,1.376H7.805a4.254,4.254,0,0,1,2.125.569L13.6,18.876a.439.439,0,0,0,.657-.38V5.5a.438.438,0,0,0-.657-.379L9.93,7.242a4.251,4.251,0,0,1-2.125.57Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.407,6.262a7.79,7.79,0,0,1,.021,11.476c-.474.437.235,1.143.707.707a8.793,8.793,0,0,0-.021-12.89c-.474-.434-1.184.272-.707.707Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.91,9.031a4.021,4.021,0,0,1,.012,5.938c-.474.438.234,1.143.707.707a5.025,5.025,0,0,0-.012-7.352c-.474-.434-1.183.272-.707.707Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiVolumeMute (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Volume_Mute\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M13.817,19.936a1.424,1.424,0,0,1-.719-.2L9.43,17.624a3.254,3.254,0,0,0-1.625-.436H4.44a2.377,2.377,0,0,1-2.375-2.375V9.187A2.378,2.378,0,0,1,4.44,6.811H7.805A3.257,3.257,0,0,0,9.43,6.377L13.1,4.259A1.438,1.438,0,0,1,15.255,5.5V18.5a1.423,1.423,0,0,1-.718,1.245A1.439,1.439,0,0,1,13.817,19.936ZM4.44,7.811A1.377,1.377,0,0,0,3.065,9.187v5.626A1.377,1.377,0,0,0,4.44,16.188H7.805a4.247,4.247,0,0,1,2.125.571L13.6,18.876a.437.437,0,0,0,.439,0,.433.433,0,0,0,.218-.379V5.5a.438.438,0,0,0-.657-.379L9.93,7.242a4.25,4.25,0,0,1-2.125.569Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M17.606,14.445a.5.5,0,0,1-.7-.711c.17-.169.34-.349.52-.52l1.21-1.209c-.57-.581-1.15-1.161-1.73-1.74a.5.5,0,0,1,.7-.71l1.74,1.739,1.74-1.739a.5.5,0,0,1,.7.71l-1.73,1.74,1.73,1.729a.5.5,0,0,1-.7.711L19.343,12.7Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiVolume (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Volume\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.849,20.934a1.555,1.555,0,0,1-.781-.212l-4.16-2.4a3.769,3.769,0,0,0-1.877-.5H7.214a2.631,2.631,0,0,1-2.628-2.627V8.809A2.631,2.631,0,0,1,7.214,6.182h3.817a3.747,3.747,0,0,0,1.877-.5l4.16-2.4a1.564,1.564,0,0,1,2.346,1.354V19.369a1.57,1.57,0,0,1-1.565,1.565ZM7.214,7.182A1.63,1.63,0,0,0,5.586,8.809v6.382a1.629,1.629,0,0,0,1.628,1.627h3.817a4.756,4.756,0,0,1,2.377.637l4.16,2.4a.543.543,0,0,0,.563,0,.553.553,0,0,0,.283-.487V4.632a.565.565,0,0,0-.846-.489l-4.16,2.4a4.753,4.753,0,0,1-2.377.637Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiWallet (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Wallet\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.435,4.065H4.565a2.5,2.5,0,0,0-2.5,2.5v10.87a2.5,2.5,0,0,0,2.5,2.5h14.87a2.5,2.5,0,0,0,2.5-2.5V6.565A2.5,2.5,0,0,0,19.435,4.065Zm1.5,9.93h-6.42a2,2,0,0,1,0-4h6.42Zm-6.42-5a3,3,0,0,0,0,6h6.42v2.44a1.5,1.5,0,0,1-1.5,1.5H4.565a1.5,1.5,0,0,1-1.5-1.5V6.565a1.5,1.5,0,0,1,1.5-1.5h14.87a1.5,1.5,0,0,1,1.5,1.5v2.43Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"14.519\",\"cy\":\"11.996\",\"r\":\"1\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiWarning (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Warning\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12.5,8.752a.5.5,0,0,0-1,0h0v6a.5.5,0,0,0,1,0Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"11.999\",\"cy\":\"16.736\",\"r\":\"0.5\"},\"child\":[]}]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.642,20.934H5.385A2.5,2.5,0,0,1,3.163,17.29L9.792,4.421a2.5,2.5,0,0,1,4.444,0L20.865,17.29a2.5,2.5,0,0,1-2.223,3.644ZM12.014,4.065a1.478,1.478,0,0,0-1.334.814L4.052,17.748a1.5,1.5,0,0,0,1.333,2.186H18.642a1.5,1.5,0,0,0,1.334-2.186L13.348,4.879A1.478,1.478,0,0,0,12.014,4.065Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiWavePulse1 (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Wave_Pulse_1\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M8.974,18h0a1.446,1.446,0,0,1-1.259-.972L5.872,12.883c-.115-.26-.262-.378-.349-.378H2.562a.5.5,0,1,1,0-1H5.523a1.444,1.444,0,0,1,1.263.972l1.839,4.145c.116.261.258.378.349.378h0c.088,0,.229-.113.344-.368L13.7,6.956A1.423,1.423,0,0,1,14.958,6h0a1.449,1.449,0,0,1,1.26.975l1.839,4.151c.11.249.259.379.349.379h3.028a.5.5,0,0,1,0,1H18.41a1.444,1.444,0,0,1-1.263-.975L15.308,7.379c-.116-.261-.259-.378-.35-.379h0c-.088,0-.229.114-.344.368l-4.385,9.676A1.437,1.437,0,0,1,8.974,18Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiWheat (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Wheat\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M15.247,13.836a3.115,3.115,0,0,0,.79-2.78,1.053,1.053,0,0,0-.8-.81,3.1,3.1,0,0,0,.8-2.79,1.061,1.061,0,0,0-.82-.82,3.211,3.211,0,0,0-2.04.25A3.09,3.09,0,0,0,14,4.816a3.1,3.1,0,0,0-1.41-2.57,1.043,1.043,0,0,0-1.16-.01A3.124,3.124,0,0,0,10,4.816a3.052,3.052,0,0,0,.83,2.07,3.154,3.154,0,0,0-2.04-.25,1.048,1.048,0,0,0-.82.82,3.1,3.1,0,0,0,.79,2.79,1.041,1.041,0,0,0-.79.81,3.11,3.11,0,0,0,.78,2.78,1.071,1.071,0,0,0-.78.82,3.031,3.031,0,0,0,3,3.7,2.436,2.436,0,0,0,.53-.05v3.15a.5.5,0,0,0,1,0v-3.15a2.469,2.469,0,0,0,.54.05,3.054,3.054,0,0,0,2.17-.88,3.124,3.124,0,0,0,.83-2.82A1.083,1.083,0,0,0,15.247,13.836Zm-3.83,3.48a2.12,2.12,0,0,1-1.92-.55,2.041,2.041,0,0,1-.51-1.96,2.558,2.558,0,0,1,.47-.04,1.984,1.984,0,0,1,1.45.59A2.011,2.011,0,0,1,11.417,17.316Zm0-3.6a2.112,2.112,0,0,1-1.92-.55,2.022,2.022,0,0,1-.51-1.95,1.93,1.93,0,0,1,.47-.05,1.984,1.984,0,0,1,1.45.59A2.011,2.011,0,0,1,11.417,13.716Zm0-3.6a2.112,2.112,0,0,1-1.92-.55,2.022,2.022,0,0,1-.51-1.95,2.592,2.592,0,0,1,.47-.05,1.984,1.984,0,0,1,1.45.59A2.011,2.011,0,0,1,11.417,10.116Zm.56-3.55A2.1,2.1,0,0,1,11,4.816a2.005,2.005,0,0,1,1.04-1.74A2.1,2.1,0,0,1,13,4.816,2.054,2.054,0,0,1,11.977,6.566Zm2.53,10.2a2.072,2.072,0,0,1-1.96.51,2.384,2.384,0,0,1-.05-.45v-.02a2.065,2.065,0,0,1,.59-1.46,1.99,1.99,0,0,1,1.4-.57,2.279,2.279,0,0,1,.57.07A2.14,2.14,0,0,1,14.507,16.766Zm0-3.6a2.047,2.047,0,0,1-1.96.51,2.384,2.384,0,0,1-.05-.45v-.02a2.024,2.024,0,0,1,.59-1.45,1.957,1.957,0,0,1,1.4-.58,2.863,2.863,0,0,1,.57.07A2.14,2.14,0,0,1,14.507,13.166Zm0-3.6a2.024,2.024,0,0,1-1.96.51,2.384,2.384,0,0,1-.05-.45v-.02a2.024,2.024,0,0,1,.59-1.45,1.955,1.955,0,0,1,1.41-.57,2.259,2.259,0,0,1,.56.07A2.12,2.12,0,0,1,14.507,9.566Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiWifiOff (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Wi-Fi_Off\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10.37,6.564a12.392,12.392,0,0,1,10.71,3.93c.436.476,1.141-.233.708-.708A13.324,13.324,0,0,0,10.37,5.564c-.631.076-.638,1.077,0,1Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13.907,10.283A8.641,8.641,0,0,1,18.349,12.9c.434.477,1.139-.232.707-.707a9.586,9.586,0,0,0-4.883-2.871c-.626-.146-.893.818-.266.965Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12.003\",\"cy\":\"16.922\",\"r\":\"1.12\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M19.773,19.06a.5.5,0,0,1-.71.71l-5.84-5.84A4.478,4.478,0,0,0,8.7,15.24c-.43.48-1.14-.23-.71-.7a5.47,5.47,0,0,1,4.06-1.78l-2.37-2.37a8.693,8.693,0,0,0-4.03,2.53c-.43.48-1.13-.23-.7-.71A9.439,9.439,0,0,1,8.893,9.6L6.883,7.59a12.557,12.557,0,0,0-3.96,2.94.5.5,0,1,1-.7-.71,13.109,13.109,0,0,1,3.91-2.98l-1.9-1.9a.5.5,0,0,1,.71-.71Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiWifiOn (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Wi-Fi_On\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M2.922,10.777a12.194,12.194,0,0,1,18.155-.034c.436.476,1.141-.233.707-.707a13.189,13.189,0,0,0-19.569.034c-.432.475.273,1.184.707.707Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5.654,13.169a8.615,8.615,0,0,1,12.691-.024c.437.475,1.143-.234.707-.707a9.621,9.621,0,0,0-14.106.024c-.433.474.272,1.184.708.707Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.7,15.492a4.47,4.47,0,0,1,6.6-.013c.438.474,1.143-.235.707-.707a5.475,5.475,0,0,0-8.015.013c-.434.474.271,1.183.707.707Z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"11.999\",\"cy\":\"17.172\",\"r\":\"1.12\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiYoutube (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Youtube\"},\"child\":[{\"tag\":\"g\",\"attr\":{},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.437,19.937H4.562a2.5,2.5,0,0,1-2.5-2.5V6.563a2.5,2.5,0,0,1,2.5-2.5H19.437a2.5,2.5,0,0,1,2.5,2.5V17.437A2.5,2.5,0,0,1,19.437,19.937ZM4.562,5.063a1.5,1.5,0,0,0-1.5,1.5V17.437a1.5,1.5,0,0,0,1.5,1.5H19.437a1.5,1.5,0,0,0,1.5-1.5V6.563a1.5,1.5,0,0,0-1.5-1.5Z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14.568,11.149,10.6,8.432a1.032,1.032,0,0,0-1.614.851v5.434a1.032,1.032,0,0,0,1.614.851l3.972-2.717A1.031,1.031,0,0,0,14.568,11.149Z\"},\"child\":[]}]}]}]})(props);\n};\nexport function CiZoomIn (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Zoom_In\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16.279,17.039c-1.396,1.209 -3.216,1.941 -5.206,1.941c-4.393,0 -7.96,-3.567 -7.96,-7.96c-0,-4.393 3.567,-7.96 7.96,-7.96c4.393,0 7.96,3.567 7.96,7.96c-0,2.044 -0.772,3.909 -2.04,5.319l0.165,0.165c1.194,1.194 2.388,2.388 3.583,3.582c0.455,0.456 -0.252,1.163 -0.707,0.708l-3.755,-3.755Zm1.754,-6.019c-0,-3.841 -3.119,-6.96 -6.96,-6.96c-3.842,0 -6.96,3.119 -6.96,6.96c-0,3.841 3.118,6.96 6.96,6.96c3.841,0 6.96,-3.119 6.96,-6.96Zm-7.46,0.5l-1.5,0c-0.645,0 -0.643,-1 -0,-1l1.5,0l-0,-1.5c-0,-0.645 1,-0.643 1,0l-0,1.5l1.5,0c0.645,0 0.643,1 -0,1l-1.5,0l-0,1.5c-0,0.645 -1,0.643 -1,0l-0,-1.5Z\"},\"child\":[]}]}]})(props);\n};\nexport function CiZoomOut (props) {\n  return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\"},\"child\":[{\"tag\":\"g\",\"attr\":{\"id\":\"Zoom_Out\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16.279,17.039c-1.396,1.209 -3.216,1.941 -5.206,1.941c-4.393,0 -7.96,-3.567 -7.96,-7.96c-0,-4.393 3.567,-7.96 7.96,-7.96c4.393,0 7.96,3.567 7.96,7.96c-0,2.044 -0.772,3.909 -2.04,5.319l0.165,0.165c1.194,1.194 2.388,2.388 3.583,3.582c0.455,0.456 -0.252,1.163 -0.707,0.708l-3.755,-3.755Zm1.754,-6.019c-0,-3.841 -3.119,-6.96 -6.96,-6.96c-3.842,0 -6.96,3.119 -6.96,6.96c-0,3.841 3.118,6.96 6.96,6.96c3.841,0 6.96,-3.119 6.96,-6.96Zm-4.96,-0.5c0.645,0 0.643,1 -0,1l-4,0c-0.645,0 -0.643,-1 -0,-1l4,0Z\"},\"child\":[]}]}]})(props);\n};\n","import React, { useState, useRef, useEffect } from 'react';\n\nexport interface InlineTextEditorProps {\n  value: string;\n  onChange: (value: string) => void;\n  placeholder?: string;\n  className?: string;\n  disabled?: boolean;\n  multiline?: boolean;\n  onBlur?: () => void;\n  onFocus?: () => void;\n}\n\nexport const InlineTextEditor: React.FC<InlineTextEditorProps> = ({\n  value,\n  onChange,\n  placeholder = 'Click to edit...',\n  className = '',\n  disabled = false,\n  multiline = false,\n  onBlur,\n  onFocus,\n}) => {\n  const [isEditing, setIsEditing] = useState(false);\n  const [editValue, setEditValue] = useState(value);\n  const inputRef = useRef<HTMLInputElement | HTMLTextAreaElement>(null);\n\n  // Update edit value when prop value changes\n  useEffect(() => {\n    setEditValue(value);\n  }, [value]);\n\n  const handleClick = () => {\n    if (disabled) return;\n    setIsEditing(true);\n    onFocus?.();\n  };\n\n  const handleBlur = () => {\n    setIsEditing(false);\n    onChange(editValue);\n    onBlur?.();\n  };\n\n  const handleKeyDown = (e: React.KeyboardEvent) => {\n    if (e.key === 'Enter' && !multiline) {\n      e.preventDefault();\n      (e.target as HTMLInputElement | HTMLTextAreaElement).blur();\n    }\n    if (e.key === 'Escape') {\n      setEditValue(value); // Reset to original value\n      (e.target as HTMLInputElement | HTMLTextAreaElement).blur();\n    }\n  };\n\n  const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n    setEditValue(e.target.value);\n  };\n\n  // Auto-focus when editing starts\n  useEffect(() => {\n    if (isEditing && inputRef.current) {\n      inputRef.current.focus();\n      inputRef.current.select();\n    }\n  }, [isEditing]);\n\n  const displayText = value || placeholder;\n  const isPlaceholder = !value;\n\n  if (isEditing) {\n    const InputComponent = multiline ? 'textarea' : 'input';\n    \n    return (\n      <InputComponent\n        ref={inputRef as any}\n        value={editValue}\n        onChange={handleChange}\n        onBlur={handleBlur}\n        onKeyDown={handleKeyDown}\n        className={`\n          bg-transparent border-none outline-none resize-none \n          text-inherit font-inherit leading-inherit\n          w-full p-0 m-0\n          ${className}\n        `}\n        style={{\n          minHeight: multiline ? '1.5em' : 'auto',\n        }}\n      />\n    );\n  }\n\n  return (\n    <div\n      onClick={handleClick}\n      className={`\n        cursor-${disabled ? 'default' : 'text'}\n        ${disabled ? '' : 'hover:bg-white/5 rounded px-1 -mx-1'}\n        transition-colors duration-150\n        ${className}\n      `}\n      style={{ minHeight: '1.5em' }}\n    >\n      {displayText}\n    </div>\n  );\n};","import React, {\n  useState,\n  useMemo,\n  useRef,\n  useCallback,\n  useEffect,\n} from \"react\";\nimport { Button } from \"@/app/components/ui/Button\";\nimport { Phase, Part } from \"@/app/components/TnkrModelView/types\";\nimport { TnkrEditorModelViewCore } from \"@/app/components/TnkrModelView\";\nimport { TnkrSelect } from \"@/app/components/ui/TnkrSelect\";\nimport { TnkrEditor } from \"../../../core/TnkrEditor\";\nimport { getBasicExtensions } from \"../../../core/extensions\";\nimport { type UploadFunction } from \"../../../core/components/tiptap-node/image-upload-node/image-upload-node-extension\";\nimport AssemblyAnnotationOverlay from \"./AssemblyAnnotationsOverlay\";\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuLabel,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from \"@/app/components/ui/dropdown-menu\";\nimport { Icon } from \"@iconify/react\";\nimport { CiBellOn } from \"react-icons/ci\";\nimport { IAnnotation2D } from \"./types\";\nimport { InlineTextEditor } from \"./InlineTextEditor\";\n\nexport interface AssemblyViewModeProps {\n  phases: Phase[];\n  htmlContent: string;\n  className?: string;\n  productTitle?: string;\n  parts: Part[];\n  // Assembly-specific props\n  organizationId?: string;\n  productId?: string;\n  editMode?: boolean;\n  onUploadMedia?: UploadFunction;\n  // Phase update callback\n  onPhasesUpdate?: (phases: Phase[]) => void;\n  // Route control props\n  routePhaseId?: string;\n  routeStepId?: string;\n  // Navigation change callback\n  onAssemblyChange?: (currentPhaseId: string, currentStepId?: string) => void;\n  // Camera reset button visibility\n  showResetCamera?: boolean;\n}\n\n// Tag component with randomized background colors\ninterface TagProps {\n  text: string;\n  className?: string;\n}\n\nconst Tag: React.FC<TagProps> = ({ text, className = \"\" }) => {\n  // Color palette\n  const colors = [\"#222B26\", \"#38281E\", \"#392E1E\", \"#1D282E\", \"#2B2431\"];\n\n  // Generate a deterministic color based on text content\n  // This ensures the same text always gets the same color\n  const getColor = (str: string) => {\n    let hash = 0;\n    for (let i = 0; i < str.length; i++) {\n      hash = str.charCodeAt(i) + ((hash << 5) - hash);\n    }\n    const index = Math.abs(hash) % colors.length;\n    return colors[index];\n  };\n\n  const backgroundColor = getColor(text);\n\n  return (\n    <span\n      className={`px-3 py-1.5 rounded-md text-sm font-medium text-white ${className}`}\n      style={{ backgroundColor }}\n    >\n      {text}\n    </span>\n  );\n};\n\nexport const AssemblyViewMode: React.FC<AssemblyViewModeProps> = ({\n  phases,\n  htmlContent,\n  className = \"\",\n  productTitle,\n  parts,\n  organizationId,\n  productId,\n  editMode = false,\n  onUploadMedia,\n  onPhasesUpdate,\n  routePhaseId,\n  routeStepId,\n  onAssemblyChange,\n  showResetCamera = false,\n}) => {\n  // Initialize state based on route props\n  const getInitialPhaseIndex = () => {\n    if (routePhaseId) {\n      const index = phases.findIndex((p) => p.id === routePhaseId);\n      return index >= 0 ? index : 0;\n    }\n    return 0;\n  };\n\n  const getInitialStepIndex = () => {\n    if (routePhaseId && routeStepId) {\n      const phaseIndex = phases.findIndex((p) => p.id === routePhaseId);\n      if (phaseIndex >= 0) {\n        const stepIndex = phases[phaseIndex].steps.findIndex(\n          (s) => s.id === routeStepId\n        );\n        return stepIndex >= 0 ? stepIndex : 0;\n      }\n    }\n    return 0;\n  };\n\n  const getInitialView = (): \"overview\" | \"step\" => {\n    if (routePhaseId && routeStepId) {\n      const phaseIndex = phases.findIndex((p) => p.id === routePhaseId);\n      if (phaseIndex >= 0) {\n        const stepIndex = phases[phaseIndex].steps.findIndex(\n          (s) => s.id === routeStepId\n        );\n        if (stepIndex >= 0) {\n          return \"step\";\n        }\n      }\n    }\n    return \"overview\";\n  };\n\n  const [currentPhaseIndex, setCurrentPhaseIndex] =\n    useState(getInitialPhaseIndex);\n  const [currentStepIndex, setCurrentStepIndex] = useState(getInitialStepIndex);\n  const [currentView, setCurrentView] = useState<\"overview\" | \"step\">(\n    getInitialView\n  );\n\n  // Track if routing has been initialized to prevent unnecessary resets\n  const routingInitialized = useRef(false);\n\n  // Update routing state when phases are loaded AND route props are provided\n  useEffect(() => {\n    // Only handle routing if there are actual route props and phases are loaded\n    if (\n      phases.length > 0 &&\n      (routePhaseId || routeStepId) &&\n      !routingInitialized.current\n    ) {\n      const newPhaseIndex = getInitialPhaseIndex();\n      const newStepIndex = getInitialStepIndex();\n      const newView = getInitialView();\n\n      setCurrentPhaseIndex(newPhaseIndex);\n      setCurrentStepIndex(newStepIndex);\n      setCurrentView(newView);\n\n      // Mark routing as initialized\n      routingInitialized.current = true;\n\n      // Call onAssemblyChange if provided to sync with parent\n      if (onAssemblyChange && routePhaseId) {\n        onAssemblyChange(routePhaseId, routeStepId);\n      }\n    }\n  }, [phases, routePhaseId, routeStepId, onAssemblyChange]);\n\n  // Reset routing initialization flag when route props change\n  useEffect(() => {\n    routingInitialized.current = false;\n  }, [routePhaseId, routeStepId]);\n  const [isAnimating, setIsAnimating] = useState(false);\n  const [isPreparingAnimation, setIsPreparingAnimation] = useState(false);\n  const containerRef = React.useRef<HTMLDivElement>(null);\n\n  const runtimeRef = useRef<any>(null);\n  const cameraSettingsRef = useRef<((settings: any) => void) | undefined>();\n\n  // Annotations state - default to all hidden in view mode - manage like Editor3D\n  const [assemblyAnnotations, setAssemblyAnnotations] = useState<\n    IAnnotation2D[]\n  >([]);\n  const [visibleAnnotationIds, setVisibleAnnotationIds] = useState<string[]>(\n    []\n  );\n\n  // Editor states for phase titles, descriptions, step titles, and step descriptions\n  const [phaseDescriptions, setPhaseDescriptions] = useState<\n    Record<string, any>\n  >({});\n  const [phaseTitles, setPhaseTitles] = useState<Record<string, any>>({});\n  const [stepTitles, setStepTitles] = useState<Record<string, any>>({});\n  const [stepDescriptions, setStepDescriptions] = useState<Record<string, any>>(\n    {}\n  );\n  const [saveStates, setSaveStates] = useState<\n    Record<string, \"idle\" | \"saving\" | \"error\">\n  >({});\n  const saveTimeoutRef = useRef<Record<string, NodeJS.Timeout>>({});\n\n  const currentPhase = phases[currentPhaseIndex];\n  const currentStep = currentPhase?.steps[currentStepIndex];\n\n  // Track step changes and update annotations like Editor3D\n  const prevStepIdRef = useRef<string | null>(null);\n\n  // Smart function to get/initialize description for a specific phase\n  const getPhaseDescription = useCallback(\n    (phase: Phase) => {\n      if (!phase?.id) return null;\n\n      // Check if we already have this phase description\n      if (phaseDescriptions[phase.id]) {\n        console.log(\n          `📋 Using cached description for phase: ${phase.title || phase.id}`\n        );\n        return phaseDescriptions[phase.id];\n      }\n\n      // Initialize description for this phase\n      let initialDescription;\n      if (phase.description) {\n        if (typeof phase.description === \"object\") {\n          // Already in TipTap format\n          initialDescription = phase.description;\n        } else if (phase.description.trim()) {\n          // Convert string to TipTap format\n          initialDescription = {\n            type: \"doc\",\n            content: [\n              {\n                type: \"paragraph\",\n                content: [\n                  {\n                    type: \"text\",\n                    text: phase.description,\n                  },\n                ],\n              },\n            ],\n          };\n        } else {\n          // Empty string\n          initialDescription = {\n            type: \"doc\",\n            content: [{ type: \"paragraph\", content: [] }],\n          };\n        }\n      } else {\n        // No description\n        initialDescription = {\n          type: \"doc\",\n          content: [{ type: \"paragraph\", content: [] }],\n        };\n      }\n\n      // Update state with this phase's description\n      setPhaseDescriptions((prev) => ({\n        ...prev,\n        [phase.id!]: initialDescription,\n      }));\n\n      return initialDescription;\n    },\n    [phaseDescriptions]\n  );\n\n  // Smart function to get/initialize title for a specific phase\n  const getPhaseTitle = useCallback(\n    (phase: Phase) => {\n      if (!phase?.id) return null;\n\n      if (phaseTitles[phase.id]) {\n        return phaseTitles[phase.id];\n      }\n\n      // Initialize title for this phase\n      let initialTitle;\n      if (phase.title) {\n        if (typeof phase.title === \"object\") {\n          // Already in TipTap format\n          initialTitle = phase.title;\n        } else if (phase.title.trim() && phase.title !== \"Add a title\") {\n          // Convert string to TipTap format\n          initialTitle = {\n            type: \"doc\",\n            content: [\n              {\n                type: \"heading\",\n                attrs: { level: 1 },\n                content: [\n                  {\n                    type: \"text\",\n                    text: phase.title,\n                  },\n                ],\n              },\n            ],\n          };\n        } else {\n          // Empty or placeholder string\n          initialTitle = {\n            type: \"doc\",\n            content: [{ type: \"heading\", attrs: { level: 1 }, content: [] }],\n          };\n        }\n      } else {\n        // No title\n        initialTitle = {\n          type: \"doc\",\n          content: [{ type: \"heading\", attrs: { level: 1 }, content: [] }],\n        };\n      }\n\n      setPhaseTitles((prev) => ({\n        ...prev,\n        [phase.id!]: initialTitle,\n      }));\n\n      return initialTitle;\n    },\n    [phaseTitles]\n  );\n\n  // Smart function to get/initialize title for a specific step\n  const getStepTitle = useCallback(\n    (step: any) => {\n      if (!step?.id) return null;\n\n      if (stepTitles[step.id]) {\n        return stepTitles[step.id];\n      }\n\n      let initialTitle;\n      if (step.title) {\n        if (typeof step.title === \"object\") {\n          // Already in TipTap format\n          initialTitle = step.title;\n        } else if (step.title.trim()) {\n          // Convert string to TipTap format\n          initialTitle = {\n            type: \"doc\",\n            content: [\n              {\n                type: \"heading\",\n                attrs: { level: 2 },\n                content: [\n                  {\n                    type: \"text\",\n                    text: step.title,\n                  },\n                ],\n              },\n            ],\n          };\n        } else {\n          // Empty string\n          initialTitle = {\n            type: \"doc\",\n            content: [{ type: \"heading\", attrs: { level: 2 }, content: [] }],\n          };\n        }\n      } else {\n        // No title\n        initialTitle = {\n          type: \"doc\",\n          content: [{ type: \"heading\", attrs: { level: 2 }, content: [] }],\n        };\n      }\n\n      setStepTitles((prev) => ({\n        ...prev,\n        [step.id!]: initialTitle,\n      }));\n\n      return initialTitle;\n    },\n    [stepTitles]\n  );\n\n  // Smart function to get/initialize description for a specific step\n  const getStepDescription = useCallback(\n    (step: any) => {\n      if (!step?.id) return null;\n\n      if (stepDescriptions[step.id]) {\n        return stepDescriptions[step.id];\n      }\n\n      let initialDescription;\n      if (step.description) {\n        if (typeof step.description === \"object\") {\n          // Already in TipTap format\n          initialDescription = step.description;\n        } else if (step.description.trim()) {\n          // Convert string to TipTap format\n          initialDescription = {\n            type: \"doc\",\n            content: [\n              {\n                type: \"paragraph\",\n                content: [\n                  {\n                    type: \"text\",\n                    text: step.description,\n                  },\n                ],\n              },\n            ],\n          };\n        } else {\n          // Empty string\n          initialDescription = {\n            type: \"doc\",\n            content: [{ type: \"paragraph\", content: [] }],\n          };\n        }\n      } else {\n        // No description\n        initialDescription = {\n          type: \"doc\",\n          content: [{ type: \"paragraph\", content: [] }],\n        };\n      }\n\n      setStepDescriptions((prev) => ({\n        ...prev,\n        [step.id!]: initialDescription,\n      }));\n\n      return initialDescription;\n    },\n    [stepDescriptions]\n  );\n\n  // Get current phase description (triggers initialization if needed)\n  const currentPhaseDescription = useMemo(() => {\n    if (!currentPhase) return null;\n    return getPhaseDescription(currentPhase);\n  }, [currentPhase, getPhaseDescription]);\n\n  // Get current phase title\n  const currentPhaseTitle = useMemo(() => {\n    if (!currentPhase) return null;\n    return getPhaseTitle(currentPhase);\n  }, [currentPhase, getPhaseTitle]);\n\n  // Get current step title and description\n  const currentStepTitle = useMemo(() => {\n    if (!currentStep) return null;\n    return getStepTitle(currentStep);\n  }, [currentStep, getStepTitle]);\n\n  const currentStepDescription = useMemo(() => {\n    if (!currentStep) return null;\n    return getStepDescription(currentStep);\n  }, [currentStep, getStepDescription]);\n\n  // Debounced save function - handles different content types\n  const debouncedSave = useCallback(\n    async (\n      itemId: string,\n      content: any,\n      type:\n        | \"description\"\n        | \"title\"\n        | \"step-title\"\n        | \"step-description\" = \"description\"\n    ) => {\n      // Only save when in edit mode (user has edit permissions)\n      if (!editMode) return;\n\n      if (!organizationId || !productId) return;\n\n      // Clear existing timeout\n      if (saveTimeoutRef.current[itemId]) {\n        clearTimeout(saveTimeoutRef.current[itemId]);\n      }\n\n      // Set new timeout\n      saveTimeoutRef.current[itemId] = setTimeout(async () => {\n        try {\n          setSaveStates((prev) => ({ ...prev, [itemId]: \"saving\" }));\n\n          let updatedPhases = [...phases];\n\n          if (type === \"description\") {\n            // Update phase description\n            updatedPhases = phases.map((phase) =>\n              phase.id === itemId ? { ...phase, description: content } : phase\n            );\n          } else if (type === \"title\") {\n            // Update phase title - extract text from TipTap content\n            const titleText = extractTextFromTipTap(content);\n            updatedPhases = phases.map((phase) =>\n              phase.id === itemId ? { ...phase, title: titleText } : phase\n            );\n          } else if (type === \"step-title\") {\n            // Update step title\n            const titleText = extractTextFromTipTap(content);\n            updatedPhases = phases.map((phase) => ({\n              ...phase,\n              steps: phase.steps.map((step) =>\n                step.id === itemId ? { ...step, title: titleText } : step\n              ),\n            }));\n          } else if (type === \"step-description\") {\n            // Update step description\n            updatedPhases = phases.map((phase) => ({\n              ...phase,\n              steps: phase.steps.map((step) =>\n                step.id === itemId ? { ...step, description: content } : step\n              ),\n            }));\n          }\n\n          // Save to API\n          const response = await fetch(\n            `/api/phases?productId=${productId}&organizationId=${organizationId}`,\n            {\n              method: \"POST\",\n              headers: {\n                \"Content-Type\": \"application/json\",\n              },\n              body: JSON.stringify({\n                phases: updatedPhases,\n                productId,\n                organizationId,\n              }),\n            }\n          );\n\n          if (!response.ok) {\n            throw new Error(\"Failed to save phases\");\n          }\n\n          setSaveStates((prev) => ({ ...prev, [itemId]: \"idle\" }));\n\n          // Notify parent of phase updates\n          if (onPhasesUpdate) {\n            onPhasesUpdate(updatedPhases);\n          }\n        } catch (error) {\n          console.error(\"Failed to save content:\", error);\n          setSaveStates((prev) => ({ ...prev, [itemId]: \"error\" }));\n        }\n      }, 1500); // 1.5 second debounce\n    },\n    [phases, organizationId, productId, onPhasesUpdate, editMode]\n  );\n\n  // Utility function to extract text from TipTap content\n  const extractTextFromTipTap = (content: any): string => {\n    if (!content || !content.content) return \"\";\n\n    const extractTextFromNodes = (nodes: any[]): string => {\n      return nodes\n        .map((node) => {\n          if (node.type === \"text\") {\n            return node.text || \"\";\n          } else if (node.content) {\n            return extractTextFromNodes(node.content);\n          }\n          return \"\";\n        })\n        .join(\"\");\n    };\n\n    return extractTextFromNodes(content.content);\n  };\n\n  // Utility function to create TipTap content from plain text\n  const createTipTapFromText = (\n    text: string,\n    nodeType: \"paragraph\" | \"heading\" = \"paragraph\",\n    level?: number\n  ): any => {\n    const attrs = nodeType === \"heading\" && level ? { level } : {};\n    return {\n      type: \"doc\",\n      content: [\n        {\n          type: nodeType,\n          ...(Object.keys(attrs).length > 0 ? { attrs } : {}),\n          content: text ? [{ type: \"text\", text }] : [],\n        },\n      ],\n    };\n  };\n\n  // Handle editor changes for different content types\n  const handlePhaseDescriptionChange = useCallback(\n    (phaseId: string, content: any) => {\n      setPhaseDescriptions((prev) => ({\n        ...prev,\n        [phaseId]: content,\n      }));\n\n      // Only save when in edit mode (user has edit permissions)\n      if (editMode) {\n        debouncedSave(phaseId, content);\n      }\n    },\n    [debouncedSave, editMode]\n  );\n\n  const handleStepDescriptionChange = useCallback(\n    (stepId: string, content: any) => {\n      setStepDescriptions((prev) => ({\n        ...prev,\n        [stepId]: content,\n      }));\n\n      // Only save when in edit mode (user has edit permissions)\n      if (editMode) {\n        debouncedSave(stepId, content, \"step-description\");\n      }\n    },\n    [debouncedSave, editMode]\n  );\n\n  // Handlers for inline text editors\n  const handlePhaseTitleTextChange = useCallback(\n    (phaseId: string, text: string) => {\n      // Create TipTap content from plain text\n      const tipTapContent = createTipTapFromText(text, \"heading\", 1);\n\n      // Update local state\n      setPhaseTitles((prev) => ({\n        ...prev,\n        [phaseId]: tipTapContent,\n      }));\n\n      // Only save when in edit mode (user has edit permissions)\n      if (editMode) {\n        debouncedSave(phaseId, tipTapContent, \"title\");\n      }\n    },\n    [debouncedSave, editMode]\n  );\n\n  const handleStepTitleTextChange = useCallback(\n    (stepId: string, text: string) => {\n      // Create TipTap content from plain text\n      const tipTapContent = createTipTapFromText(text, \"heading\", 2);\n\n      // Update local state\n      setStepTitles((prev) => ({\n        ...prev,\n        [stepId]: tipTapContent,\n      }));\n\n      // Only save when in edit mode (user has edit permissions)\n      if (editMode) {\n        debouncedSave(stepId, tipTapContent, \"step-title\");\n      }\n    },\n    [debouncedSave, editMode]\n  );\n\n  // Load annotations when step changes - same logic as Editor3D with migration\n  useEffect(() => {\n    // Only update if the step ID actually changed\n    if (prevStepIdRef.current !== currentStep?.id) {\n      prevStepIdRef.current = currentStep?.id || null;\n\n      if ((currentStep as any)?.annotations) {\n        // MIGRATION LOGIC: Convert old pulse format to new format\n        // Background: In commit 8e30c8a, pulse structure was changed from:\n        //   arrow.endPulse (boolean) and arrow.pulseColor (ColorLabel)\n        // to:\n        //   pulse: { show: boolean, color: ColorLabel }\n        // This migration ensures existing annotations don't lose their pulse settings\n        const migratedAnnotations = (currentStep as any).annotations.map(\n          (annotation: any) => {\n            // Check if annotation has old pulse format but no new pulse property\n            if (annotation.arrow?.endPulse && !annotation.pulse) {\n              return {\n                ...annotation,\n                pulse: {\n                  show: annotation.arrow.endPulse,\n                  color: annotation.arrow.pulseColor || \"pulse orange\",\n                },\n                // Clean up old properties from arrow object\n                arrow: {\n                  ...annotation.arrow,\n                  endPulse: undefined,\n                  pulseColor: undefined,\n                },\n              };\n            }\n            // Return annotation as-is if already migrated or doesn't need migration\n            return annotation;\n          }\n        );\n\n        setAssemblyAnnotations(migratedAnnotations);\n        console.log(\n          \"📝 View mode annotations loaded and migrated for step:\",\n          currentStep?.id,\n          \"count:\",\n          migratedAnnotations.length\n        );\n      } else {\n        setAssemblyAnnotations([]);\n      }\n\n      // Reset visible annotations (default to all hidden in view mode)\n      setVisibleAnnotationIds([]);\n    }\n  }, [currentStep?.id, currentStep]);\n  // Navigation functions\n  const canGoNext = useMemo(() => {\n    if (!currentPhase) return false;\n\n    // If not at last step of current phase, can go next\n    if (currentStepIndex < currentPhase.steps.length - 1) return true;\n\n    // If at last step of current phase, check if there's a next phase with steps\n    if (currentPhaseIndex < phases.length - 1) {\n      const nextPhase = phases[currentPhaseIndex + 1];\n      return nextPhase.steps.length > 0;\n    }\n\n    return false;\n  }, [currentPhase, currentStepIndex, currentPhaseIndex, phases]);\n\n  const canGoPrevious = useMemo(() => {\n    if (!currentPhase) return false;\n\n    // If not at first step of current phase, can go previous\n    if (currentStepIndex > 0) return true;\n\n    // If at first step of current phase, check if there's a previous phase with steps\n    if (currentPhaseIndex > 0) {\n      const previousPhase = phases[currentPhaseIndex - 1];\n      return previousPhase.steps.length > 0;\n    }\n\n    return false;\n  }, [currentPhase, currentStepIndex, currentPhaseIndex, phases]);\n\n  const handleNext = () => {\n    if (!currentPhase) return;\n\n    let newPhaseIndex = currentPhaseIndex;\n    let newStepIndex = currentStepIndex;\n\n    if (currentStepIndex < currentPhase.steps.length - 1) {\n      newStepIndex = currentStepIndex + 1;\n      setCurrentStepIndex(newStepIndex);\n    } else if (currentPhaseIndex < phases.length - 1) {\n      const nextPhaseIndex = currentPhaseIndex + 1;\n      const nextPhase = phases[nextPhaseIndex];\n      if (nextPhase.steps.length > 0) {\n        newPhaseIndex = nextPhaseIndex;\n        newStepIndex = 0;\n        setCurrentPhaseIndex(newPhaseIndex);\n        setCurrentStepIndex(newStepIndex);\n      }\n    }\n\n    // Call onAssemblyChange if provided\n    if (onAssemblyChange) {\n      const phaseId = phases[newPhaseIndex]?.id;\n      const stepId =\n        currentView === \"step\"\n          ? phases[newPhaseIndex]?.steps[newStepIndex]?.id\n          : undefined;\n      if (phaseId) {\n        onAssemblyChange(phaseId, stepId);\n      }\n    }\n  };\n\n  const handlePrevious = () => {\n    if (!currentPhase) return;\n\n    let newPhaseIndex = currentPhaseIndex;\n    let newStepIndex = currentStepIndex;\n\n    if (currentStepIndex > 0) {\n      newStepIndex = currentStepIndex - 1;\n      setCurrentStepIndex(newStepIndex);\n    } else if (currentPhaseIndex > 0) {\n      const previousPhaseIndex = currentPhaseIndex - 1;\n      const previousPhase = phases[previousPhaseIndex];\n      if (previousPhase.steps.length > 0) {\n        newPhaseIndex = previousPhaseIndex;\n        newStepIndex = previousPhase.steps.length - 1;\n        setCurrentPhaseIndex(newPhaseIndex);\n        setCurrentStepIndex(newStepIndex);\n      }\n    }\n\n    // Call onAssemblyChange if provided\n    if (onAssemblyChange) {\n      const phaseId = phases[newPhaseIndex]?.id;\n      const stepId =\n        currentView === \"step\"\n          ? phases[newPhaseIndex]?.steps[newStepIndex]?.id\n          : undefined;\n      if (phaseId) {\n        onAssemblyChange(phaseId, stepId);\n      }\n    }\n  };\n\n  const handlePhaseChange = (phaseIndex: number) => {\n    setCurrentPhaseIndex(phaseIndex);\n    setCurrentStepIndex(0);\n    setCurrentView(\"overview\");\n\n    // Call onAssemblyChange if provided\n    if (onAssemblyChange) {\n      const phaseId = phases[phaseIndex]?.id;\n      if (phaseId) {\n        onAssemblyChange(phaseId, undefined); // No stepId in overview mode\n      }\n    }\n  };\n\n  const handleStepClick = (stepIndex: number) => {\n    setCurrentStepIndex(stepIndex);\n    setCurrentView(\"step\");\n\n    // Call onAssemblyChange if provided\n    if (onAssemblyChange) {\n      const phaseId = currentPhase?.id;\n      const stepId = currentPhase?.steps[stepIndex]?.id;\n      if (phaseId) {\n        onAssemblyChange(phaseId, stepId);\n      }\n    }\n  };\n\n  const handleBeginPhase = () => {\n    setCurrentStepIndex(0);\n    setCurrentView(\"step\");\n\n    // Call onAssemblyChange if provided\n    if (onAssemblyChange) {\n      const phaseId = currentPhase?.id;\n      const stepId = currentPhase?.steps[0]?.id;\n      if (phaseId) {\n        onAssemblyChange(phaseId, stepId);\n      }\n    }\n  };\n\n  const handleToggleAnnotation = (annotationId: string) => {\n    // Note: Camera settings functionality would require additional props if needed\n    setVisibleAnnotationIds((prev) => {\n      if (prev.includes(annotationId)) {\n        return prev.filter((id) => id !== annotationId);\n      } else {\n        return [...prev, annotationId];\n      }\n    });\n  };\n\n  const handleResetCamera = () => {\n    // Reset camera to the current step's default position\n    if (cameraSettingsRef.current && currentStep?.cameraState) {\n      cameraSettingsRef.current(currentStep.cameraState);\n    }\n  };\n\n  // Handle 3D model setup - based on Editor3D implementation with stability improvements\n  const handleElementsReady = (functions: any) => {\n    functions.toggleElement(\"HUDs_Div\", false);\n\n    // Initial setup\n    if (containerRef.current) {\n      // Small delay to ensure container has rendered\n      const style = document.createElement(\"style\");\n      style.textContent = `\n      x3d, X3D {\n        height:  ${containerRef.current.clientHeight}px;\n      }\n    `;\n      document.head.appendChild(style);\n      functions.updateElementAttribute(\n        \"x3d\",\n        \"height\",\n        `${containerRef.current.clientHeight}`\n      );\n      const axesEl = document.getElementById(\"swAxes\");\n      if (axesEl) {\n        axesEl.setAttribute(\"whichChoice\", \"-1\");\n      }\n    }\n\n    // Set up runtime reference for assembly annotations with smart polling - same as Editor3D.tsx in tnkr-app-dashboard\n    let runtimePollCount = 0;\n    const maxRuntimePolls = 60; // 3 seconds (60 * 50ms)\n\n    const waitForAssemblyRuntime = () => {\n      const x3dElement = containerRef.current?.querySelector(\"x3d\");\n      const runtime = x3dElement && (x3dElement as any).runtime;\n\n      if (runtime && runtime.calcCanvasPos) {\n        // Runtime is ready for annotation positioning\n        runtimeRef.current = runtime;\n        return;\n      }\n\n      runtimePollCount++;\n      if (runtimePollCount < maxRuntimePolls) {\n        setTimeout(waitForAssemblyRuntime, 50);\n      }\n    };\n\n    waitForAssemblyRuntime();\n\n    return () => {};\n  };\n  // Calculate progress for current phase\n  const totalStepsInCurrentPhase = useMemo(() => {\n    return currentPhase?.steps.length || 0;\n  }, [currentPhase]);\n\n  const completedStepsInCurrentPhase = useMemo(() => {\n    if (currentView !== \"step\") return 0;\n    return currentStepIndex + 1;\n  }, [currentView, currentStepIndex]);\n\n  if (phases.length === 0) {\n    return (\n      <div\n        className={`bg-[#161617] mx-auto w-[98%] overflow-hidden my-8 rounded-3xl ${className}`}\n        style={{ height: \"calc(100vh - 8rem)\" }}\n      >\n        <div className=\"flex items-center justify-center h-full w-full\">\n          <div className=\"text-center space-y-6 max-w-md mx-auto px-6\">\n            {/* Icon */}\n            <div className=\"flex justify-center mb-4\">\n              <div className=\"w-16 h-16 rounded-full bg-[#313133] flex items-center justify-center\">\n                <Icon\n                  icon=\"mdi:cube-outline\"\n                  className=\"w-8 h-8 text-white/40\"\n                />\n              </div>\n            </div>\n\n            {/* Main message */}\n            <div className=\"space-y-3\">\n              <h3 className=\"text-xl font-semibold text-white\">\n                No Assembly Phases Available\n              </h3>\n              <p className=\"text-white/60 text-sm leading-relaxed\">\n                Import assembly instructions to get started with your 3D\n                assembly guide. You can create step-by-step instructions with\n                animations and annotations.\n              </p>\n            </div>\n\n            {/* Call to action hint */}\n            <div className=\"pt-4\">\n              <div\n                className=\"inline-flex items-center gap-2 px-4 py-2 rounded-lg\"\n                style={{\n                  backgroundColor: 'color-mix(in srgb, var(--tnkr-primary) 10%, transparent)',\n                  borderWidth: '1px',\n                  borderStyle: 'solid',\n                  borderColor: 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)'\n                }}\n              >\n                <Icon\n                  icon=\"mdi:information-outline\"\n                  className=\"w-4 h-4\"\n                  style={{ color: 'var(--tnkr-primary)' }}\n                />\n                <span className=\"text-xs font-medium\" style={{ color: 'var(--tnkr-primary)' }}>\n                  Use the import feature to add content\n                </span>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div\n      className={`bg-[#161617] mx-auto w-[98%] overflow-auto my-4 rounded-3xl ${className}`}\n      style={{ height: \"calc(100vh - 8rem)\" }}\n    >\n      <div className=\"grid grid-cols-1 lg:grid-cols-5 gap-4 p-4 py-4 w-full h-full min-h-0\">\n        {/* Left Container - Progress & 3D Viewer - Takes 2.5/4 of width */}\n        <div className=\"lg:col-span-3 overflow-hidden flex flex-col w-full h-full relative bg-transparent border rounded-3xl  border-[#313133]\">\n          {/* 3D Model Viewer - Full height container */}\n          <div\n            ref={containerRef}\n            className=\"w-full relative h-full overflow-y-auto\"\n            style={{ backgroundColor: \"transparent\" }}\n          >\n            {/* Progress Section - Overlay at top */}\n            <div className=\"absolute top-0 left-0 right-0 z-10 rounded-lg py-6 px-6 bg-gradient-to-b from-[#161617]/90 to-transparent\">\n              <div className=\"flex items-center justify-between mb-4\">\n                <div className=\"text-sm text-white/70\">\n                  {productTitle} Assembly\n                </div>\n                <div className=\"text-sm text-white/70\">\n                  {completedStepsInCurrentPhase}/{totalStepsInCurrentPhase}{\" \"}\n                  Complete\n                </div>\n              </div>\n\n              {/* Progress Bar */}\n              <div className=\"flex space-x-1\">\n                {currentPhase?.steps.map((_, index) => (\n                  <div\n                    key={index}\n                    className={`h-1 rounded-sm flex-1 transition-all duration-300 ${\n                      index < completedStepsInCurrentPhase\n                        ? \"bg-white\"\n                        : \"bg-[#313133]\"\n                    }`}\n                  />\n                ))}\n              </div>\n            </div>\n\n            {/* Reset Camera Button - Left side */}\n            {showResetCamera && currentView === \"step\" && (\n              <div className=\"absolute top-20 left-5 z-20\">\n                <Button\n                  variant=\"outline\"\n                  size=\"sm\"\n                  onClick={handleResetCamera}\n                  className=\"flex items-center justify-center p-2 bg-transparent hover:bg-[#313133] text-white border border-[#313133]\"\n                >\n                  <Icon\n                    icon=\"tabler:refresh\"\n                    className=\"w-5 h-5\"\n                  />\n                </Button>\n              </div>\n            )}\n\n            {/* Annotations Dropdown - Right side */}\n            {currentView === \"step\" && assemblyAnnotations.length > 0 && (\n              <div className=\"absolute  top-20 right-5 z-20\">\n                <DropdownMenu>\n                  <DropdownMenuTrigger asChild>\n                    <Button\n                      variant=\"outline\"\n                      size=\"sm\"\n                      className=\"flex items-center gap-2 px-3 py-1.5\"\n                    >\n                      <div className=\"relative\">\n                        <CiBellOn className=\"size-5 stroke-[0.7]\" style={{ color: 'var(--tnkr-primary)' }} />\n                        <p\n                          className=\"absolute top-0 right-0 rounded-full text-[7px] text-white size-2.5 text-center\"\n                          style={{ backgroundColor: 'var(--tnkr-primary)' }}\n                        >\n                          {assemblyAnnotations.length}\n                        </p>\n                      </div>\n                      Annotations\n                      <Icon icon=\"ph:caret-down\" className=\"w-3 h-3 ml-1\" />\n                    </Button>\n                  </DropdownMenuTrigger>\n                  <DropdownMenuContent\n                    align=\"end\"\n                    className=\"bg-[#232326] border-gray-700 min-w-[200px]\"\n                  >\n                    <DropdownMenuLabel className=\"text-gray-400 text-xs\">\n                      Annotation Controls\n                    </DropdownMenuLabel>\n                    <DropdownMenuSeparator className=\"bg-gray-700\" />\n\n                    {/* Show/Hide All Options */}\n                    <DropdownMenuItem\n                      onClick={() =>\n                        setVisibleAnnotationIds(\n                          assemblyAnnotations.map((a: IAnnotation2D) => a.id)\n                        )\n                      }\n                      className=\"text-white hover:bg-gray-800 cursor-pointer\"\n                    >\n                      <Icon icon=\"ph:eye\" className=\"w-4 h-4 mr-2\" />\n                      Show All Annotations\n                    </DropdownMenuItem>\n                    <DropdownMenuItem\n                      onClick={() => setVisibleAnnotationIds([])}\n                      className=\"text-white hover:bg-gray-800 cursor-pointer\"\n                    >\n                      <Icon icon=\"ph:eye-slash\" className=\"w-4 h-4 mr-2\" />\n                      Hide All Annotations\n                    </DropdownMenuItem>\n\n                    <DropdownMenuSeparator className=\"bg-gray-700\" />\n                    <DropdownMenuLabel className=\"text-gray-400 text-xs\">\n                      Individual Annotations\n                    </DropdownMenuLabel>\n\n                    {/* List of individual annotations */}\n                    {assemblyAnnotations.map(\n                      (annotation: IAnnotation2D, index: number) => {\n                        const displayText =\n                          annotation.text.value ||\n                          `${annotation.type === \"arrow\" ? \"Arrow\" : \"Label\"} ${\n                            index + 1\n                          }`;\n                        const truncatedText =\n                          displayText.length > 30\n                            ? displayText.substring(0, 30) + \"...\"\n                            : displayText;\n                        const isVisible = visibleAnnotationIds.includes(\n                          annotation.id\n                        );\n\n                        return (\n                          <DropdownMenuItem\n                            key={annotation.id}\n                            onClick={() =>\n                              handleToggleAnnotation(annotation.id)\n                            }\n                            className=\"text-white hover:bg-gray-800 cursor-pointer flex items-center justify-between\"\n                          >\n                            <div className=\"flex items-center flex-1 min-w-0\">\n                              <Icon\n                                icon={isVisible ? \"ph:eye\" : \"ph:eye-slash\"}\n                                className={`w-4 h-4 mr-2 flex-shrink-0 ${\n                                  isVisible ? \"text-green-400\" : \"text-gray-500\"\n                                }`}\n                              />\n                              <span\n                                className=\"truncate flex-1\"\n                                title={displayText}\n                              >\n                                {truncatedText}\n                              </span>\n                            </div>\n                          </DropdownMenuItem>\n                        );\n                      }\n                    )}\n\n                    {assemblyAnnotations.length === 0 && (\n                      <div className=\"text-gray-500 text-sm px-2 py-1.5\">\n                        No annotations in this step\n                      </div>\n                    )}\n                  </DropdownMenuContent>\n                </DropdownMenu>\n              </div>\n            )}\n            <div className=\"w-full h-full flex flex-col min-h-[400px]\">\n              {htmlContent ? (\n                <TnkrEditorModelViewCore\n                  htmlString={htmlContent}\n                  parts={currentView === \"step\" && currentStep?.parts ? currentStep.parts : parts}\n                  phases={phases}\n                  selectedPhaseId={currentPhase?.id}\n                  selectedStepId={\n                    currentView === \"step\" ? currentStep?.id : undefined\n                  }\n                  selectStep={(phaseId: string, stepId: string) => {\n                    // Find the phase and step to navigate to\n                    const targetPhaseIndex = phases.findIndex(\n                      (p) => p.id === phaseId\n                    );\n                    if (targetPhaseIndex !== -1) {\n                      const targetPhase = phases[targetPhaseIndex];\n                      const targetStepIndex = targetPhase.steps.findIndex(\n                        (s) => s.id === stepId\n                      );\n                      if (targetStepIndex !== -1) {\n                        setCurrentPhaseIndex(targetPhaseIndex);\n                        setCurrentStepIndex(targetStepIndex);\n                        setCurrentView(\"step\");\n\n                        // Call onAssemblyChange when navigation happens from 3D viewer\n                        if (onAssemblyChange) {\n                          onAssemblyChange(phaseId, stepId);\n                        }\n                      }\n                    }\n                  }}\n                  isAnimating={isAnimating}\n                  isPreparingAnimation={isPreparingAnimation}\n                  setIsAnimating={setIsAnimating}\n                  setIsPreparingAnimation={setIsPreparingAnimation}\n                  onElementsReady={handleElementsReady}\n                  handleNext={handleNext}\n                  handlePrevious={handlePrevious}\n                  onCameraSettingsReady={(setCameraFn) => {\n                    cameraSettingsRef.current = setCameraFn;\n                  }}\n                />\n              ) : (\n                <div className=\"flex items-center justify-center h-full text-gray-500\">\n                  <p>3D Model Loading...</p>\n                </div>\n              )}\n\n              {/* Assembly Annotation Overlay - View mode only (non-interactive except for visibility toggle) - Only in step view */}\n              {htmlContent &&\n                currentView === \"step\" &&\n                assemblyAnnotations.length > 0 && (\n                  <AssemblyAnnotationOverlay\n                    annotations={assemblyAnnotations}\n                    setAnnotations={() => {}} // No-op in view mode\n                    currentAnnotation={null} // No current annotation in view mode\n                    setCurrentAnnotation={() => {}} // No-op in view mode\n                    isPlacingAnnotation={false} // Never placing in view mode\n                    setIsPlacingAnnotation={() => {}} // No-op in view mode\n                    runtimeRef={runtimeRef}\n                    isPenToolActive={false} // Never active in view mode\n                    visibleAnnotationIds={visibleAnnotationIds}\n                    setVisibleAnnotationIds={setVisibleAnnotationIds}\n                    setCameraSettings={cameraSettingsRef.current} // Pass camera settings function from TnkrEditorModelViewCore\n                    onActivatePenTool={() => {}} // No pen tool activation in view mode\n                    onCloseTypeSelector={() => {}} // No type selector in view mode\n                  />\n                )}\n            </div>\n          </div>\n        </div>\n\n        {/* Right Container - Phase/Step Content */}\n        <div className=\"lg:col-span-2 bg-[#0D0D0D] rounded-3xl w-full h-full  px-6 pt-4 pb-6 flex flex-col   overflow-hidden \">\n          {/* Phase Dropdown */}\n          <div className=\"mb-4 max-w-[12rem]\">\n            <TnkrSelect\n              value={{\n                value: currentPhaseIndex.toString(),\n                label: phases[currentPhaseIndex]?.title || \"\",\n              }}\n              options={phases.map((phase, index) => ({\n                value: index.toString(),\n                label: phase.title,\n              }))}\n              onChange={(option) => handlePhaseChange(Number(option.value))}\n            />\n          </div>\n          <div className=\"border-b border-[#313133] mb-6\" />\n\n          {/* Dynamic Content Based on View */}\n          <div className=\"flex-1 flex flex-col overflow-y-auto min-h-0\">\n            {currentView === \"overview\" ? (\n              // Phase Overview\n              // Check if phase has \"Add a title\" and no content\n              currentPhase?.title === \"Add a title\" &&\n              phases.length === 1 &&\n              (!currentPhase?.steps || currentPhase.steps.length === 0) &&\n              !currentPhase?.description ? (\n                // Display \"No Content Yet\" centered\n                <div className=\"flex-1 flex items-center justify-center\">\n                  <p className=\"text-white/80 text-lg\">No Content Yet</p>\n                </div>\n              ) : (\n                <>\n                  {/* Phase Title Editor */}\n                  <div className=\"mb-1 relative\">\n                    <InlineTextEditor\n                      value={extractTextFromTipTap(currentPhaseTitle)}\n                      onChange={(text) => {\n                        if (currentPhase?.id) {\n                          handlePhaseTitleTextChange(currentPhase.id, text);\n                        }\n                      }}\n                      placeholder=\"Add a title\"\n                      className=\"text-white text-3xl font-bold leading-tight\"\n                      disabled={!editMode}\n                    />\n                  </div>\n\n                  {/* Phase Description Editor */}\n                  <div className=\"mb-8 relative\">\n\n                    <TnkrEditor\n                      key={`phase-${currentPhase?.id}`} // Unique editor per phase\n                      content={currentPhaseDescription}\n                      showDragHandle={false}\n                      onChange={(content) => {\n                        if (currentPhase?.id) {\n                          handlePhaseDescriptionChange(\n                            currentPhase.id,\n                            content\n                          );\n                        }\n                      }}\n                      onUploadMedia={onUploadMedia}\n                      customExtensionSet={getBasicExtensions()}\n                      className=\"text-white\"\n                      minHeight={0}\n                      readOnly={!editMode}\n                    />\n                  </div>\n\n                  {currentPhase?.steps && currentPhase.steps.length > 0 && (\n                    <div className=\"flex-1\">\n                      <h2 className=\"text-xl font-semibold mb-4 text-white\">\n                        Steps\n                      </h2>\n                      <div className=\"space-y-4\">\n                        {currentPhase.steps.map((step, index) => (\n                          <button\n                            key={step.id}\n                            onClick={() => handleStepClick(index)}\n                            className=\"w-full text-left rounded-2xl px-4 py-3 cursor-pointer border border-[#313133] transition-all\"\n                            onMouseEnter={(e) => e.currentTarget.style.borderColor = 'var(--tnkr-primary)'}\n                            onMouseLeave={(e) => e.currentTarget.style.borderColor = '#313133'}\n                          >\n                            <span className=\"text-white/70\">\n                              Step {index + 1}: {step.title}\n                            </span>\n                          </button>\n                        ))}\n                      </div>\n                    </div>\n                  )}\n\n                  {currentPhase?.steps && currentPhase.steps.length > 0 && (\n                    <div className=\"mt-8 max-w-[7rem] ml-auto\">\n                      <Button\n                        onClick={handleBeginPhase}\n                        className=\"text-white px-6 py-2 rounded-lg font-medium w-full h-11\"\n                        style={{ backgroundColor: 'var(--tnkr-primary)' }}\n                        onMouseEnter={(e) => e.currentTarget.style.backgroundColor = 'color-mix(in srgb, var(--tnkr-primary) 85%, black)'}\n                        onMouseLeave={(e) => e.currentTarget.style.backgroundColor = 'var(--tnkr-primary)'}\n                      >\n                        Begin Phase\n                      </Button>\n                    </div>\n                  )}\n                </>\n              )\n            ) : (\n              // Step Details\n              <>\n                {/* Step Title Editor */}\n                <div className=\"mb-1 relative\">\n                  <InlineTextEditor\n                    value={extractTextFromTipTap(currentStepTitle)}\n                    onChange={(text) => {\n                      if (currentStep?.id) {\n                        handleStepTitleTextChange(currentStep.id, text);\n                      }\n                    }}\n                    placeholder=\"Add a step title\"\n                    className=\"text-white text-2xl font-bold leading-tight\"\n                    disabled={!editMode}\n                  />\n                </div>\n\n                {/* Step Description Editor */}\n                <div className=\"mb-8  relative\">\n                  <TnkrEditor\n                    key={`step-description-${currentStep?.id}`}\n                    content={currentStepDescription}\n                    showDragHandle={false}\n                    onChange={(content) => {\n                      if (currentStep?.id) {\n                        handleStepDescriptionChange(currentStep.id, content);\n                      }\n                    }}\n                    onUploadMedia={onUploadMedia}\n                    customExtensionSet={getBasicExtensions()}\n                    className=\"text-white/70 leading-relaxed\"\n                    minHeight={0}\n                    readOnly={!editMode}\n                  />\n                </div>\n\n                <div className=\"space-y-6 flex-1\">\n                  {/* Parts Needed */}\n                  {currentStep?.parts && currentStep.parts.length > 0 && (\n                    <div>\n                      <h3 className=\"text-lg font-semibold mb-4 text-white\">\n                        Parts Needed\n                      </h3>\n                      <div className=\"flex flex-wrap gap-2\">\n                        {currentStep.parts.map((part, index) => {\n                          const displayName = part.name;\n                          return (\n                            <Tag key={part.id || index} text={displayName} />\n                          );\n                        })}\n                      </div>\n                    </div>\n                  )}\n\n                  {/* Tools */}\n                  {currentStep?.tools && currentStep.tools.length > 0 && (\n                    <div>\n                      <h3 className=\"text-lg font-semibold mb-4 text-white\">\n                        Tools\n                      </h3>\n                      <div className=\"flex flex-wrap gap-2\">\n                        {currentStep.tools.map((tool, index) => (\n                          <Tag key={tool.id || index} text={tool.title} />\n                        ))}\n                      </div>\n                    </div>\n                  )}\n                </div>\n\n                <div className=\"flex items-center justify-between gap-4 mt-4\">\n                  {/* Previous Step Button - Only show if there's a previous step */}\n                  {canGoPrevious && (\n                    <Button\n                      onClick={handlePrevious}\n                      className=\"bg-transparent border border-[#313133] hover:bg-[#232326] text-white/70 hover:text-white px-6 py-2.5 rounded-lg font-medium h-11\"\n                    >\n                      {currentStepIndex === 0 && currentPhaseIndex > 0\n                        ? \"Previous Phase\"\n                        : \"Previous Step\"}\n                    </Button>\n                  )}\n\n                  {/* Next Step Button */}\n                  <Button\n                    onClick={handleNext}\n                    disabled={!canGoNext}\n                    className=\"disabled:opacity-50 disabled:cursor-not-allowed text-white px-6 py-2.5 rounded-lg font-medium h-11 ml-auto\"\n                    style={{ backgroundColor: 'var(--tnkr-primary)' }}\n                    onMouseEnter={(e) => !canGoNext || (e.currentTarget.style.backgroundColor = 'color-mix(in srgb, var(--tnkr-primary) 85%, black)')}\n                    onMouseLeave={(e) => !canGoNext || (e.currentTarget.style.backgroundColor = 'var(--tnkr-primary)')}\n                  >\n                    {currentStepIndex === currentPhase?.steps.length - 1\n                      ? currentPhaseIndex < phases.length - 1\n                        ? \"Next Phase\"\n                        : \"Complete\"\n                      : \"Next Step\"}\n                  </Button>\n                </div>\n              </>\n            )}\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n","import React, { useState, useEffect } from \"react\";\nimport { AssemblyViewMode } from \"./AssemblyViewMode\";\nimport { Part, Phase } from \"../TnkrModelView/types\";\nimport { type UploadFunction } from \"@/core/components/tiptap-node/image-upload-node/image-upload-node-extension\";\nimport { ProductDataState } from \"@/hooks/useProductData\";\n\ninterface AssemblyViewProps {\n  organizationId: string;\n  productId: string;\n  className?: string;\n  style?: React.CSSProperties;\n  // Editor-related props\n  initialData?: any;\n  onEditorChange?: (data: any) => void;\n  onSave?: (content: any) => void;\n  editMode?: boolean;\n  onUploadMedia?: UploadFunction;\n  // Camera reset button visibility\n  showResetCamera?: boolean;\n  // Centralized product data\n  productData?: ProductDataState;\n}\n\nexport const AssemblyView: React.FC<AssemblyViewProps> = ({\n  organizationId,\n  productId,\n  className,\n  style,\n  // Editor-related props\n  initialData,\n  onEditorChange,\n  onSave,\n  editMode = false,\n  onUploadMedia,\n  showResetCamera = false,\n  // Centralized product data\n  productData,\n}) => {\n  const [phases, setPhases] = useState<Phase[]>([]);\n\n  // Use centralized data from context instead of API fetching\n  const htmlContent = productData?.htmlContent || null;\n  const partLists = productData?.partsTree || [];\n  const loading = productData?.isLoading || false;\n  const loadingContent = productData?.isLoadingContent || false;\n  const error = productData?.error || null;\n\n  // Initialize phases from centralized data\n  useEffect(() => {\n    if (productData?.phases) {\n      console.log('Loading phases from centralized data:', productData.phases);\n      setPhases(productData.phases);\n    }\n  }, [productData?.phases]);\n\n  if (loading || loadingContent) {\n    return (\n      <div className={`relative flex items-center justify-center ${className || ''}`}>\n        <div className=\"text-center\">\n          <div\n            className=\"animate-spin rounded-full h-8 w-8 border-b-2 mx-auto mb-4\"\n            style={{ borderColor: 'var(--tnkr-primary)' }}\n          ></div>\n          <p className=\"text-white/60\">Loading assembly data...</p>\n        </div>\n      </div>\n    );\n  }\n\n  if (error) {\n    return (\n      <div className={`w-full h-full relative flex items-center justify-center ${className || ''}`}>\n        <div className=\"text-center\">\n          <p className=\"text-red-400 mb-4\">Error loading assembly data</p>\n          <p className=\"text-white/60 text-sm\">{error}</p>\n        </div>\n      </div>\n    );\n  }\n\n  if (!htmlContent) {\n    return (\n      <div className={`w-full h-full min-h-[600px] relative flex items-center justify-center ${className || ''}`} style={style}>\n        <div className=\"absolute inset-0 flex items-center justify-center\">\n          <div className=\"text-center\">\n            <p className=\"text-white/60\">No assembly content available</p>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <AssemblyViewMode\n      htmlContent={htmlContent}\n      parts={partLists}\n      phases={phases}\n      className={className}\n      organizationId={organizationId}\n      productId={productId}\n      editMode={editMode}\n      showResetCamera={showResetCamera}\n      onUploadMedia={onUploadMedia}\n      onPhasesUpdate={(updatedPhases) => {\n        // Update local phases state\n        setPhases(updatedPhases);\n      }}\n    />\n  );\n};\n\nexport default AssemblyView;","/* UAParser.js v1.0.41\n   Copyright © 2012-2025 Faisal Salman <f@faisalman.com>\n   MIT License */\n(function(window,undefined){\"use strict\";var LIBVERSION=\"1.0.41\",EMPTY=\"\",UNKNOWN=\"?\",FUNC_TYPE=\"function\",UNDEF_TYPE=\"undefined\",OBJ_TYPE=\"object\",STR_TYPE=\"string\",MAJOR=\"major\",MODEL=\"model\",NAME=\"name\",TYPE=\"type\",VENDOR=\"vendor\",VERSION=\"version\",ARCHITECTURE=\"architecture\",CONSOLE=\"console\",MOBILE=\"mobile\",TABLET=\"tablet\",SMARTTV=\"smarttv\",WEARABLE=\"wearable\",EMBEDDED=\"embedded\",UA_MAX_LENGTH=500;var AMAZON=\"Amazon\",APPLE=\"Apple\",ASUS=\"ASUS\",BLACKBERRY=\"BlackBerry\",BROWSER=\"Browser\",CHROME=\"Chrome\",EDGE=\"Edge\",FIREFOX=\"Firefox\",GOOGLE=\"Google\",HONOR=\"Honor\",HUAWEI=\"Huawei\",LENOVO=\"Lenovo\",LG=\"LG\",MICROSOFT=\"Microsoft\",MOTOROLA=\"Motorola\",NVIDIA=\"Nvidia\",ONEPLUS=\"OnePlus\",OPERA=\"Opera\",OPPO=\"OPPO\",SAMSUNG=\"Samsung\",SHARP=\"Sharp\",SONY=\"Sony\",XIAOMI=\"Xiaomi\",ZEBRA=\"Zebra\",FACEBOOK=\"Facebook\",CHROMIUM_OS=\"Chromium OS\",MAC_OS=\"Mac OS\",SUFFIX_BROWSER=\" Browser\";var extend=function(regexes,extensions){var mergedRegexes={};for(var i in regexes){if(extensions[i]&&extensions[i].length%2===0){mergedRegexes[i]=extensions[i].concat(regexes[i])}else{mergedRegexes[i]=regexes[i]}}return mergedRegexes},enumerize=function(arr){var enums={};for(var i=0;i<arr.length;i++){enums[arr[i].toUpperCase()]=arr[i]}return enums},has=function(str1,str2){return typeof str1===STR_TYPE?lowerize(str2).indexOf(lowerize(str1))!==-1:false},lowerize=function(str){return str.toLowerCase()},majorize=function(version){return typeof version===STR_TYPE?version.replace(/[^\\d\\.]/g,EMPTY).split(\".\")[0]:undefined},trim=function(str,len){if(typeof str===STR_TYPE){str=str.replace(/^\\s\\s*/,EMPTY);return typeof len===UNDEF_TYPE?str:str.substring(0,UA_MAX_LENGTH)}};var rgxMapper=function(ua,arrays){var i=0,j,k,p,q,matches,match;while(i<arrays.length&&!matches){var regex=arrays[i],props=arrays[i+1];j=k=0;while(j<regex.length&&!matches){if(!regex[j]){break}matches=regex[j++].exec(ua);if(!!matches){for(p=0;p<props.length;p++){match=matches[++k];q=props[p];if(typeof q===OBJ_TYPE&&q.length>0){if(q.length===2){if(typeof q[1]==FUNC_TYPE){this[q[0]]=q[1].call(this,match)}else{this[q[0]]=q[1]}}else if(q.length===3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){this[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{this[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length===4){this[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{this[q]=match?match:undefined}}}}i+=2}},strMapper=function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j<map[i].length;j++){if(has(map[i][j],str)){return i===UNKNOWN?undefined:i}}}else if(has(map[i],str)){return i===UNKNOWN?undefined:i}}return map.hasOwnProperty(\"*\")?map[\"*\"]:str};var oldSafariMap={\"1.0\":\"/8\",1.2:\"/1\",1.3:\"/3\",\"2.0\":\"/412\",\"2.0.2\":\"/416\",\"2.0.3\":\"/417\",\"2.0.4\":\"/419\",\"?\":\"/\"},windowsVersionMap={ME:\"4.90\",\"NT 3.11\":\"NT3.51\",\"NT 4.0\":\"NT4.0\",2e3:\"NT 5.0\",XP:[\"NT 5.1\",\"NT 5.2\"],Vista:\"NT 6.0\",7:\"NT 6.1\",8:\"NT 6.2\",8.1:\"NT 6.3\",10:[\"NT 6.4\",\"NT 10.0\"],RT:\"ARM\"};var regexes={browser:[[/\\b(?:crmo|crios)\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Chrome\"]],[/edg(?:e|ios|a)?\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Edge\"]],[/(opera mini)\\/([-\\w\\.]+)/i,/(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i,/(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i],[NAME,VERSION],[/opios[\\/ ]+([\\w\\.]+)/i],[VERSION,[NAME,OPERA+\" Mini\"]],[/\\bop(?:rg)?x\\/([\\w\\.]+)/i],[VERSION,[NAME,OPERA+\" GX\"]],[/\\bopr\\/([\\w\\.]+)/i],[VERSION,[NAME,OPERA]],[/\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i],[VERSION,[NAME,\"Baidu\"]],[/\\b(?:mxbrowser|mxios|myie2)\\/?([-\\w\\.]*)\\b/i],[VERSION,[NAME,\"Maxthon\"]],[/(kindle)\\/([\\w\\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\\/ ]?([\\w\\.]*)/i,/(avant|iemobile|slim(?:browser|boat|jet))[\\/ ]?([\\d\\.]*)/i,/(?:ms|\\()(ie) ([\\w\\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon)\\/([-\\w\\.]+)/i,/(heytap|ovi|115)browser\\/([\\d\\.]+)/i,/(weibo)__([\\d\\.]+)/i],[NAME,VERSION],[/quark(?:pc)?\\/([-\\w\\.]+)/i],[VERSION,[NAME,\"Quark\"]],[/\\bddg\\/([\\w\\.]+)/i],[VERSION,[NAME,\"DuckDuckGo\"]],[/(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i],[VERSION,[NAME,\"UC\"+BROWSER]],[/microm.+\\bqbcore\\/([\\w\\.]+)/i,/\\bqbcore\\/([\\w\\.]+).+microm/i,/micromessenger\\/([\\w\\.]+)/i],[VERSION,[NAME,\"WeChat\"]],[/konqueror\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Konqueror\"]],[/trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i],[VERSION,[NAME,\"IE\"]],[/ya(?:search)?browser\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Yandex\"]],[/slbrowser\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Smart Lenovo \"+BROWSER]],[/(avast|avg)\\/([\\w\\.]+)/i],[[NAME,/(.+)/,\"$1 Secure \"+BROWSER],VERSION],[/\\bfocus\\/([\\w\\.]+)/i],[VERSION,[NAME,FIREFOX+\" Focus\"]],[/\\bopt\\/([\\w\\.]+)/i],[VERSION,[NAME,OPERA+\" Touch\"]],[/coc_coc\\w+\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Coc Coc\"]],[/dolfin\\/([\\w\\.]+)/i],[VERSION,[NAME,\"Dolphin\"]],[/coast\\/([\\w\\.]+)/i],[VERSION,[NAME,OPERA+\" Coast\"]],[/miuibrowser\\/([\\w\\.]+)/i],[VERSION,[NAME,\"MIUI\"+SUFFIX_BROWSER]],[/fxios\\/([\\w\\.-]+)/i],[VERSION,[NAME,FIREFOX]],[/\\bqihoobrowser\\/?([\\w\\.]*)/i],[VERSION,[NAME,\"360\"]],[/\\b(qq)\\/([\\w\\.]+)/i],[[NAME,/(.+)/,\"$1Browser\"],VERSION],[/(oculus|sailfish|huawei|vivo|pico)browser\\/([\\w\\.]+)/i],[[NAME,/(.+)/,\"$1\"+SUFFIX_BROWSER],VERSION],[/samsungbrowser\\/([\\w\\.]+)/i],[VERSION,[NAME,SAMSUNG+\" Internet\"]],[/metasr[\\/ ]?([\\d\\.]+)/i],[VERSION,[NAME,\"Sogou Explorer\"]],[/(sogou)mo\\w+\\/([\\d\\.]+)/i],[[NAME,\"Sogou Mobile\"],VERSION],[/(electron)\\/([\\w\\.]+) safari/i,/(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i,/m?(qqbrowser|2345(?=browser|chrome|explorer))\\w*[\\/ ]?v?([\\w\\.]+)/i],[NAME,VERSION],[/(lbbrowser|rekonq)/i,/\\[(linkedin)app\\]/i],[NAME],[/ome\\/([\\w\\.]+) \\w* ?(iron) saf/i,/ome\\/([\\w\\.]+).+qihu (360)[es]e/i],[VERSION,NAME],[/((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i],[[NAME,FACEBOOK],VERSION],[/(Klarna)\\/([\\w\\.]+)/i,/(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i,/(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i,/(daum)apps[\\/ ]([\\w\\.]+)/i,/safari (line)\\/([\\w\\.]+)/i,/\\b(line)\\/([\\w\\.]+)\\/iab/i,/(alipay)client\\/([\\w\\.]+)/i,/(twitter)(?:and| f.+e\\/([\\w\\.]+))/i,/(chromium|instagram|snapchat)[\\/ ]([-\\w\\.]+)/i],[NAME,VERSION],[/\\bgsa\\/([\\w\\.]+) .*safari\\//i],[VERSION,[NAME,\"GSA\"]],[/musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i],[VERSION,[NAME,\"TikTok\"]],[/headlesschrome(?:\\/([\\w\\.]+)| )/i],[VERSION,[NAME,CHROME+\" Headless\"]],[/ wv\\).+(chrome)\\/([\\w\\.]+)/i],[[NAME,CHROME+\" WebView\"],VERSION],[/droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i],[VERSION,[NAME,\"Android \"+BROWSER]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i],[NAME,VERSION],[/version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i],[VERSION,[NAME,\"Mobile Safari\"]],[/version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i],[VERSION,NAME],[/webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i],[NAME,[VERSION,strMapper,oldSafariMap]],[/(webkit|khtml)\\/([\\w\\.]+)/i],[NAME,VERSION],[/(navigator|netscape\\d?)\\/([-\\w\\.]+)/i],[[NAME,\"Netscape\"],VERSION],[/(wolvic|librewolf)\\/([\\w\\.]+)/i],[NAME,VERSION],[/mobile vr; rv:([\\w\\.]+)\\).+firefox/i],[VERSION,[NAME,FIREFOX+\" Reality\"]],[/ekiohf.+(flow)\\/([\\w\\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\\/ ]?([\\w\\.\\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,/(firefox)\\/([\\w\\.]+)/i,/(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i,/(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,/\\b(links) \\(([\\w\\.]+)/i],[NAME,[VERSION,/_/g,\".\"]],[/(cobalt)\\/([\\w\\.]+)/i],[NAME,[VERSION,/master.|lts./,\"\"]]],cpu:[[/\\b((amd|x|x86[-_]?|wow|win)64)\\b/i],[[ARCHITECTURE,\"amd64\"]],[/(ia32(?=;))/i,/\\b((i[346]|x)86)(pc)?\\b/i],[[ARCHITECTURE,\"ia32\"]],[/\\b(aarch64|arm(v?[89]e?l?|_?64))\\b/i],[[ARCHITECTURE,\"arm64\"]],[/\\b(arm(v[67])?ht?n?[fl]p?)\\b/i],[[ARCHITECTURE,\"armhf\"]],[/( (ce|mobile); ppc;|\\/[\\w\\.]+arm\\b)/i],[[ARCHITECTURE,\"arm\"]],[/((ppc|powerpc)(64)?)( mac|;|\\))/i],[[ARCHITECTURE,/ower/,EMPTY,lowerize]],[/ sun4\\w[;\\)]/i],[[ARCHITECTURE,\"sparc\"]],[/\\b(avr32|ia64(?=;)|68k(?=\\))|\\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\\b|pa-risc)/i],[[ARCHITECTURE,lowerize]]],device:[[/\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i],[MODEL,[VENDOR,SAMSUNG],[TYPE,TABLET]],[/\\b((?:s[cgp]h|gt|sm)-(?![lr])\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,/samsung[- ]((?!sm-[lr])[-\\w]+)/i,/sec-(sgh\\w+)/i],[MODEL,[VENDOR,SAMSUNG],[TYPE,MOBILE]],[/(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i],[MODEL,[VENDOR,APPLE],[TYPE,MOBILE]],[/\\((ipad);[-\\w\\),; ]+apple/i,/applecoremedia\\/[\\w\\.]+ \\((ipad)/i,/\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i],[MODEL,[VENDOR,APPLE],[TYPE,TABLET]],[/(macintosh);/i],[MODEL,[VENDOR,APPLE]],[/\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i],[MODEL,[VENDOR,SHARP],[TYPE,MOBILE]],[/\\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\\)|;)/i],[MODEL,[VENDOR,HONOR],[TYPE,TABLET]],[/honor([-\\w ]+)[;\\)]/i],[MODEL,[VENDOR,HONOR],[TYPE,MOBILE]],[/\\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\\w\\. ]*(?= bui|\\)))\\b(?!.+d\\/s)/i],[MODEL,[VENDOR,HUAWEI],[TYPE,TABLET]],[/(?:huawei)([-\\w ]+)[;\\)]/i,/\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i],[MODEL,[VENDOR,HUAWEI],[TYPE,MOBILE]],[/oid[^\\)]+; (2[\\dbc]{4}(182|283|rp\\w{2})[cgl]|m2105k81a?c)(?: bui|\\))/i,/\\b((?:red)?mi[-_ ]?pad[\\w- ]*)(?: bui|\\))/i],[[MODEL,/_/g,\" \"],[VENDOR,XIAOMI],[TYPE,TABLET]],[/\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i,/\\b; (\\w+) build\\/hm\\1/i,/\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i,/\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i,/oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i,/\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\\))/i,/ ([\\w ]+) miui\\/v?\\d/i],[[MODEL,/_/g,\" \"],[VENDOR,XIAOMI],[TYPE,MOBILE]],[/; (\\w+) bui.+ oppo/i,/\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i],[MODEL,[VENDOR,OPPO],[TYPE,MOBILE]],[/\\b(opd2(\\d{3}a?))(?: bui|\\))/i],[MODEL,[VENDOR,strMapper,{OnePlus:[\"304\",\"403\",\"203\"],\"*\":OPPO}],[TYPE,TABLET]],[/vivo (\\w+)(?: bui|\\))/i,/\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i],[MODEL,[VENDOR,\"Vivo\"],[TYPE,MOBILE]],[/\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i],[MODEL,[VENDOR,\"Realme\"],[TYPE,MOBILE]],[/\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,/\\bmot(?:orola)?[- ](\\w*)/i,/((?:moto(?! 360)[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i],[MODEL,[VENDOR,MOTOROLA],[TYPE,MOBILE]],[/\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i],[MODEL,[VENDOR,MOTOROLA],[TYPE,TABLET]],[/((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i],[MODEL,[VENDOR,LG],[TYPE,TABLET]],[/(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,/\\blg[-e;\\/ ]+((?!browser|netcast|android tv|watch)\\w+)/i,/\\blg-?([\\d\\w]+) bui/i],[MODEL,[VENDOR,LG],[TYPE,MOBILE]],[/(ideatab[-\\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\\d{3,4}(?:f[cu]|xu|[av])|yt\\d?-[jx]?\\d+[lfmx])( bui|;|\\)|\\/)/i,/lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\\w- ]+?)|tb[\\w-]{6,7})( bui|;|\\)|\\/)/i],[MODEL,[VENDOR,LENOVO],[TYPE,TABLET]],[/(nokia) (t[12][01])/i],[VENDOR,MODEL,[TYPE,TABLET]],[/(?:maemo|nokia).*(n900|lumia \\d+|rm-\\d+)/i,/nokia[-_ ]?(([-\\w\\. ]*))/i],[[MODEL,/_/g,\" \"],[TYPE,MOBILE],[VENDOR,\"Nokia\"]],[/(pixel (c|tablet))\\b/i],[MODEL,[VENDOR,GOOGLE],[TYPE,TABLET]],[/droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i],[MODEL,[VENDOR,GOOGLE],[TYPE,MOBILE]],[/droid.+; (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i],[MODEL,[VENDOR,SONY],[TYPE,MOBILE]],[/sony tablet [ps]/i,/\\b(?:sony)?sgp\\w+(?: bui|\\))/i],[[MODEL,\"Xperia Tablet\"],[VENDOR,SONY],[TYPE,TABLET]],[/ (kb2005|in20[12]5|be20[12][59])\\b/i,/(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i],[MODEL,[VENDOR,ONEPLUS],[TYPE,MOBILE]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo(?!bc)\\w\\w)( bui|\\))/i,/(kf[a-z]+)( bui|\\)).+silk\\//i],[MODEL,[VENDOR,AMAZON],[TYPE,TABLET]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i],[[MODEL,/(.+)/g,\"Fire Phone $1\"],[VENDOR,AMAZON],[TYPE,MOBILE]],[/(playbook);[-\\w\\),; ]+(rim)/i],[MODEL,VENDOR,[TYPE,TABLET]],[/\\b((?:bb[a-f]|st[hv])100-\\d)/i,/\\(bb10; (\\w+)/i],[MODEL,[VENDOR,BLACKBERRY],[TYPE,MOBILE]],[/(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i],[MODEL,[VENDOR,ASUS],[TYPE,TABLET]],[/ (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i],[MODEL,[VENDOR,ASUS],[TYPE,MOBILE]],[/(nexus 9)/i],[MODEL,[VENDOR,\"HTC\"],[TYPE,TABLET]],[/(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i,/(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i],[VENDOR,[MODEL,/_/g,\" \"],[TYPE,MOBILE]],[/droid [\\w\\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])\\w*(\\)| bui)/i],[MODEL,[VENDOR,\"TCL\"],[TYPE,TABLET]],[/(itel) ((\\w+))/i],[[VENDOR,lowerize],MODEL,[TYPE,strMapper,{tablet:[\"p10001l\",\"w7001\"],\"*\":\"mobile\"}]],[/droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i],[MODEL,[VENDOR,\"Acer\"],[TYPE,TABLET]],[/droid.+; (m[1-5] note) bui/i,/\\bmz-([-\\w]{2,})/i],[MODEL,[VENDOR,\"Meizu\"],[TYPE,MOBILE]],[/; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i],[MODEL,[VENDOR,\"Ulefone\"],[TYPE,MOBILE]],[/; (energy ?\\w+)(?: bui|\\))/i,/; energizer ([\\w ]+)(?: bui|\\))/i],[MODEL,[VENDOR,\"Energizer\"],[TYPE,MOBILE]],[/; cat (b35);/i,/; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\\))/i],[MODEL,[VENDOR,\"Cat\"],[TYPE,MOBILE]],[/((?:new )?andromax[\\w- ]+)(?: bui|\\))/i],[MODEL,[VENDOR,\"Smartfren\"],[TYPE,MOBILE]],[/droid.+; (a(?:015|06[35]|142p?))/i],[MODEL,[VENDOR,\"Nothing\"],[TYPE,MOBILE]],[/; (x67 5g|tikeasy \\w+|ac[1789]\\d\\w+)( b|\\))/i,/archos ?(5|gamepad2?|([\\w ]*[t1789]|hello) ?\\d+[\\w ]*)( b|\\))/i],[MODEL,[VENDOR,\"Archos\"],[TYPE,TABLET]],[/archos ([\\w ]+)( b|\\))/i,/; (ac[3-6]\\d\\w{2,8})( b|\\))/i],[MODEL,[VENDOR,\"Archos\"],[TYPE,MOBILE]],[/(imo) (tab \\w+)/i,/(infinix) (x1101b?)/i],[VENDOR,MODEL,[TYPE,TABLET]],[/(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\\w]*)/i,/; (hmd|imo) ([\\w ]+?)(?: bui|\\))/i,/(hp) ([\\w ]+\\w)/i,/(microsoft); (lumia[\\w ]+)/i,/(lenovo)[-_ ]?([-\\w ]+?)(?: bui|\\)|\\/)/i,/(oppo) ?([\\w ]+) bui/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/(kobo)\\s(ereader|touch)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\\/([\\w\\.]+)/i,/(nook)[\\w ]+build\\/(\\w+)/i,/(dell) (strea[kpr\\d ]*[\\dko])/i,/(le[- ]+pan)[- ]+(\\w{1,9}) bui/i,/(trinity)[- ]*(t\\d{3}) bui/i,/(gigaset)[- ]+(q\\w{1,9}) bui/i,/(vodafone) ([\\w ]+)(?:\\)| bui)/i],[VENDOR,MODEL,[TYPE,TABLET]],[/(surface duo)/i],[MODEL,[VENDOR,MICROSOFT],[TYPE,TABLET]],[/droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i],[MODEL,[VENDOR,\"Fairphone\"],[TYPE,MOBILE]],[/(u304aa)/i],[MODEL,[VENDOR,\"AT&T\"],[TYPE,MOBILE]],[/\\bsie-(\\w*)/i],[MODEL,[VENDOR,\"Siemens\"],[TYPE,MOBILE]],[/\\b(rct\\w+) b/i],[MODEL,[VENDOR,\"RCA\"],[TYPE,TABLET]],[/\\b(venue[\\d ]{2,7}) b/i],[MODEL,[VENDOR,\"Dell\"],[TYPE,TABLET]],[/\\b(q(?:mv|ta)\\w+) b/i],[MODEL,[VENDOR,\"Verizon\"],[TYPE,TABLET]],[/\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i],[MODEL,[VENDOR,\"Barnes & Noble\"],[TYPE,TABLET]],[/\\b(tm\\d{3}\\w+) b/i],[MODEL,[VENDOR,\"NuVision\"],[TYPE,TABLET]],[/\\b(k88) b/i],[MODEL,[VENDOR,\"ZTE\"],[TYPE,TABLET]],[/\\b(nx\\d{3}j) b/i],[MODEL,[VENDOR,\"ZTE\"],[TYPE,MOBILE]],[/\\b(gen\\d{3}) b.+49h/i],[MODEL,[VENDOR,\"Swiss\"],[TYPE,MOBILE]],[/\\b(zur\\d{3}) b/i],[MODEL,[VENDOR,\"Swiss\"],[TYPE,TABLET]],[/\\b((zeki)?tb.*\\b) b/i],[MODEL,[VENDOR,\"Zeki\"],[TYPE,TABLET]],[/\\b([yr]\\d{2}) b/i,/\\b(dragon[- ]+touch |dt)(\\w{5}) b/i],[[VENDOR,\"Dragon Touch\"],MODEL,[TYPE,TABLET]],[/\\b(ns-?\\w{0,9}) b/i],[MODEL,[VENDOR,\"Insignia\"],[TYPE,TABLET]],[/\\b((nxa|next)-?\\w{0,9}) b/i],[MODEL,[VENDOR,\"NextBook\"],[TYPE,TABLET]],[/\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[VENDOR,\"Voice\"],MODEL,[TYPE,MOBILE]],[/\\b(lvtel\\-)?(v1[12]) b/i],[[VENDOR,\"LvTel\"],MODEL,[TYPE,MOBILE]],[/\\b(ph-1) /i],[MODEL,[VENDOR,\"Essential\"],[TYPE,MOBILE]],[/\\b(v(100md|700na|7011|917g).*\\b) b/i],[MODEL,[VENDOR,\"Envizen\"],[TYPE,TABLET]],[/\\b(trio[-\\w\\. ]+) b/i],[MODEL,[VENDOR,\"MachSpeed\"],[TYPE,TABLET]],[/\\btu_(1491) b/i],[MODEL,[VENDOR,\"Rotor\"],[TYPE,TABLET]],[/((?:tegranote|shield t(?!.+d tv))[\\w- ]*?)(?: b|\\))/i],[MODEL,[VENDOR,NVIDIA],[TYPE,TABLET]],[/(sprint) (\\w+)/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/(kin\\.[onetw]{3})/i],[[MODEL,/\\./g,\" \"],[VENDOR,MICROSOFT],[TYPE,MOBILE]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i],[MODEL,[VENDOR,ZEBRA],[TYPE,TABLET]],[/droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i],[MODEL,[VENDOR,ZEBRA],[TYPE,MOBILE]],[/smart-tv.+(samsung)/i],[VENDOR,[TYPE,SMARTTV]],[/hbbtv.+maple;(\\d+)/i],[[MODEL,/^/,\"SmartTV\"],[VENDOR,SAMSUNG],[TYPE,SMARTTV]],[/(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i],[[VENDOR,LG],[TYPE,SMARTTV]],[/(apple) ?tv/i],[VENDOR,[MODEL,APPLE+\" TV\"],[TYPE,SMARTTV]],[/crkey/i],[[MODEL,CHROME+\"cast\"],[VENDOR,GOOGLE],[TYPE,SMARTTV]],[/droid.+aft(\\w+)( bui|\\))/i],[MODEL,[VENDOR,AMAZON],[TYPE,SMARTTV]],[/(shield \\w+ tv)/i],[MODEL,[VENDOR,NVIDIA],[TYPE,SMARTTV]],[/\\(dtv[\\);].+(aquos)/i,/(aquos-tv[\\w ]+)\\)/i],[MODEL,[VENDOR,SHARP],[TYPE,SMARTTV]],[/(bravia[\\w ]+)( bui|\\))/i],[MODEL,[VENDOR,SONY],[TYPE,SMARTTV]],[/(mi(tv|box)-?\\w+) bui/i],[MODEL,[VENDOR,XIAOMI],[TYPE,SMARTTV]],[/Hbbtv.*(technisat) (.*);/i],[VENDOR,MODEL,[TYPE,SMARTTV]],[/\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i,/hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i],[[VENDOR,trim],[MODEL,trim],[TYPE,SMARTTV]],[/droid.+; ([\\w- ]+) (?:android tv|smart[- ]?tv)/i],[MODEL,[TYPE,SMARTTV]],[/\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i],[[TYPE,SMARTTV]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[VENDOR,MODEL,[TYPE,CONSOLE]],[/droid.+; (shield)( bui|\\))/i],[MODEL,[VENDOR,NVIDIA],[TYPE,CONSOLE]],[/(playstation \\w+)/i],[MODEL,[VENDOR,SONY],[TYPE,CONSOLE]],[/\\b(xbox(?: one)?(?!; xbox))[\\); ]/i],[MODEL,[VENDOR,MICROSOFT],[TYPE,CONSOLE]],[/\\b(sm-[lr]\\d\\d[0156][fnuw]?s?|gear live)\\b/i],[MODEL,[VENDOR,SAMSUNG],[TYPE,WEARABLE]],[/((pebble))app/i,/(asus|google|lg|oppo) ((pixel |zen)?watch[\\w ]*)( bui|\\))/i],[VENDOR,MODEL,[TYPE,WEARABLE]],[/(ow(?:19|20)?we?[1-3]{1,3})/i],[MODEL,[VENDOR,OPPO],[TYPE,WEARABLE]],[/(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i],[MODEL,[VENDOR,APPLE],[TYPE,WEARABLE]],[/(opwwe\\d{3})/i],[MODEL,[VENDOR,ONEPLUS],[TYPE,WEARABLE]],[/(moto 360)/i],[MODEL,[VENDOR,MOTOROLA],[TYPE,WEARABLE]],[/(smartwatch 3)/i],[MODEL,[VENDOR,SONY],[TYPE,WEARABLE]],[/(g watch r)/i],[MODEL,[VENDOR,LG],[TYPE,WEARABLE]],[/droid.+; (wt63?0{2,3})\\)/i],[MODEL,[VENDOR,ZEBRA],[TYPE,WEARABLE]],[/droid.+; (glass) \\d/i],[MODEL,[VENDOR,GOOGLE],[TYPE,WEARABLE]],[/(pico) (4|neo3(?: link|pro)?)/i],[VENDOR,MODEL,[TYPE,WEARABLE]],[/; (quest( \\d| pro)?)/i],[MODEL,[VENDOR,FACEBOOK],[TYPE,WEARABLE]],[/(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i],[VENDOR,[TYPE,EMBEDDED]],[/(aeobc)\\b/i],[MODEL,[VENDOR,AMAZON],[TYPE,EMBEDDED]],[/(homepod).+mac os/i],[MODEL,[VENDOR,APPLE],[TYPE,EMBEDDED]],[/windows iot/i],[[TYPE,EMBEDDED]],[/droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew).+? mobile safari/i],[MODEL,[TYPE,MOBILE]],[/droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i],[MODEL,[TYPE,TABLET]],[/\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i],[[TYPE,TABLET]],[/(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i],[[TYPE,MOBILE]],[/droid .+?; ([\\w\\. -]+)( bui|\\))/i],[MODEL,[VENDOR,\"Generic\"]]],engine:[[/windows.+ edge\\/([\\w\\.]+)/i],[VERSION,[NAME,EDGE+\"HTML\"]],[/(arkweb)\\/([\\w\\.]+)/i],[NAME,VERSION],[/webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i],[VERSION,[NAME,\"Blink\"]],[/(presto)\\/([\\w\\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\\/([\\w\\.]+)/i,/ekioh(flow)\\/([\\w\\.]+)/i,/(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i,/(icab)[\\/ ]([23]\\.[\\d\\.]+)/i,/\\b(libweb)/i],[NAME,VERSION],[/ladybird\\//i],[[NAME,\"LibWeb\"]],[/rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i],[VERSION,NAME]],os:[[/microsoft (windows) (vista|xp)/i],[NAME,VERSION],[/(windows (?:phone(?: os)?|mobile|iot))[\\/ ]?([\\d\\.\\w ]*)/i],[NAME,[VERSION,strMapper,windowsVersionMap]],[/windows nt 6\\.2; (arm)/i,/windows[\\/ ]([ntce\\d\\. ]+\\w)(?!.+xbox)/i,/(?:win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i],[[VERSION,strMapper,windowsVersionMap],[NAME,\"Windows\"]],[/[adehimnop]{4,7}\\b(?:.*os ([\\w]+) like mac|; opera)/i,/(?:ios;fbsv\\/|iphone.+ios[\\/ ])([\\d\\.]+)/i,/cfnetwork\\/.+darwin/i],[[VERSION,/_/g,\".\"],[NAME,\"iOS\"]],[/(mac os x) ?([\\w\\. ]*)/i,/(macintosh|mac_powerpc\\b)(?!.+haiku)/i],[[NAME,MAC_OS],[VERSION,/_/g,\".\"]],[/droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i],[VERSION,NAME],[/(ubuntu) ([\\w\\.]+) like android/i],[[NAME,/(.+)/,\"$1 Touch\"],VERSION],[/(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen|webos)\\w*[-\\/; ]?([\\d\\.]*)/i],[NAME,VERSION],[/\\(bb(10);/i],[VERSION,[NAME,BLACKBERRY]],[/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\\/ ]?([\\w\\.]*)/i],[VERSION,[NAME,\"Symbian\"]],[/mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i],[VERSION,[NAME,FIREFOX+\" OS\"]],[/web0s;.+rt(tv)/i,/\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i],[VERSION,[NAME,\"webOS\"]],[/watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i],[VERSION,[NAME,\"watchOS\"]],[/crkey\\/([\\d\\.]+)/i],[VERSION,[NAME,CHROME+\"cast\"]],[/(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i],[[NAME,CHROMIUM_OS],VERSION],[/panasonic;(viera)/i,/(netrange)mmh/i,/(nettv)\\/(\\d+\\.[\\w\\.]+)/i,/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\\);]+)/i,/\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i,/(mint)[\\/\\(\\) ]?(\\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,/(hurd|linux)(?: arm\\w*| x86\\w*| ?)([\\w\\.]*)/i,/(gnu) ?([\\w\\.]*)/i,/\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i,/(haiku) (\\w+)/i],[NAME,VERSION],[/(sunos) ?([\\w\\.\\d]*)/i],[[NAME,\"Solaris\"],VERSION],[/((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i,/(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i,/\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,/(unix) ?([\\w\\.]*)/i],[NAME,VERSION]]};var UAParser=function(ua,extensions){if(typeof ua===OBJ_TYPE){extensions=ua;ua=undefined}if(!(this instanceof UAParser)){return new UAParser(ua,extensions).getResult()}var _navigator=typeof window!==UNDEF_TYPE&&window.navigator?window.navigator:undefined;var _ua=ua||(_navigator&&_navigator.userAgent?_navigator.userAgent:EMPTY);var _uach=_navigator&&_navigator.userAgentData?_navigator.userAgentData:undefined;var _rgxmap=extensions?extend(regexes,extensions):regexes;var _isSelfNav=_navigator&&_navigator.userAgent==_ua;this.getBrowser=function(){var _browser={};_browser[NAME]=undefined;_browser[VERSION]=undefined;rgxMapper.call(_browser,_ua,_rgxmap.browser);_browser[MAJOR]=majorize(_browser[VERSION]);if(_isSelfNav&&_navigator&&_navigator.brave&&typeof _navigator.brave.isBrave==FUNC_TYPE){_browser[NAME]=\"Brave\"}return _browser};this.getCPU=function(){var _cpu={};_cpu[ARCHITECTURE]=undefined;rgxMapper.call(_cpu,_ua,_rgxmap.cpu);return _cpu};this.getDevice=function(){var _device={};_device[VENDOR]=undefined;_device[MODEL]=undefined;_device[TYPE]=undefined;rgxMapper.call(_device,_ua,_rgxmap.device);if(_isSelfNav&&!_device[TYPE]&&_uach&&_uach.mobile){_device[TYPE]=MOBILE}if(_isSelfNav&&_device[MODEL]==\"Macintosh\"&&_navigator&&typeof _navigator.standalone!==UNDEF_TYPE&&_navigator.maxTouchPoints&&_navigator.maxTouchPoints>2){_device[MODEL]=\"iPad\";_device[TYPE]=TABLET}return _device};this.getEngine=function(){var _engine={};_engine[NAME]=undefined;_engine[VERSION]=undefined;rgxMapper.call(_engine,_ua,_rgxmap.engine);return _engine};this.getOS=function(){var _os={};_os[NAME]=undefined;_os[VERSION]=undefined;rgxMapper.call(_os,_ua,_rgxmap.os);if(_isSelfNav&&!_os[NAME]&&_uach&&_uach.platform&&_uach.platform!=\"Unknown\"){_os[NAME]=_uach.platform.replace(/chrome os/i,CHROMIUM_OS).replace(/macos/i,MAC_OS)}return _os};this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}};this.getUA=function(){return _ua};this.setUA=function(ua){_ua=typeof ua===STR_TYPE&&ua.length>UA_MAX_LENGTH?trim(ua,UA_MAX_LENGTH):ua;return this};this.setUA(_ua);return this};UAParser.VERSION=LIBVERSION;UAParser.BROWSER=enumerize([NAME,VERSION,MAJOR]);UAParser.CPU=enumerize([ARCHITECTURE]);UAParser.DEVICE=enumerize([MODEL,VENDOR,TYPE,CONSOLE,MOBILE,SMARTTV,TABLET,WEARABLE,EMBEDDED]);UAParser.ENGINE=UAParser.OS=enumerize([NAME,VERSION]);if(typeof exports!==UNDEF_TYPE){if(typeof module!==UNDEF_TYPE&&module.exports){exports=module.exports=UAParser}exports.UAParser=UAParser}else{if(typeof define===FUNC_TYPE&&define.amd){define(function(){return UAParser})}else if(typeof window!==UNDEF_TYPE){window.UAParser=UAParser}}var $=typeof window!==UNDEF_TYPE&&(window.jQuery||window.Zepto);if($&&!$.ua){var parser=new UAParser;$.ua=parser.getResult();$.ua.get=function(){return parser.getUA()};$.ua.set=function(ua){parser.setUA(ua);var result=parser.getResult();for(var prop in result){$.ua[prop]=result[prop]}}}})(typeof window===\"object\"?window:this);","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar React = require('react');\nvar React__default = _interopDefault(React);\n\nvar UAParser = require('ua-parser-js/dist/ua-parser.min');\n\nvar ClientUAInstance = new UAParser();\nvar browser = ClientUAInstance.getBrowser();\nvar cpu = ClientUAInstance.getCPU();\nvar device = ClientUAInstance.getDevice();\nvar engine = ClientUAInstance.getEngine();\nvar os = ClientUAInstance.getOS();\nvar ua = ClientUAInstance.getUA();\nvar setUa = function setUa(userAgentString) {\n  return ClientUAInstance.setUA(userAgentString);\n};\nvar parseUserAgent = function parseUserAgent(userAgent) {\n  if (!userAgent) {\n    console.error('No userAgent string was provided');\n    return;\n  }\n\n  var UserAgentInstance = new UAParser(userAgent);\n  return {\n    UA: UserAgentInstance,\n    browser: UserAgentInstance.getBrowser(),\n    cpu: UserAgentInstance.getCPU(),\n    device: UserAgentInstance.getDevice(),\n    engine: UserAgentInstance.getEngine(),\n    os: UserAgentInstance.getOS(),\n    ua: UserAgentInstance.getUA(),\n    setUserAgent: function setUserAgent(userAgentString) {\n      return UserAgentInstance.setUA(userAgentString);\n    }\n  };\n};\n\nvar UAHelper = /*#__PURE__*/Object.freeze({\n  ClientUAInstance: ClientUAInstance,\n  browser: browser,\n  cpu: cpu,\n  device: device,\n  engine: engine,\n  os: os,\n  ua: ua,\n  setUa: setUa,\n  parseUserAgent: parseUserAgent\n});\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n\n    if (enumerableOnly) {\n      symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n    }\n\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n\n  var target = _objectWithoutPropertiesLoose(source, excluded);\n\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n    return call;\n  } else if (call !== void 0) {\n    throw new TypeError(\"Derived constructors may only return object or undefined\");\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n  var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n  if (_i == null) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n\n  var _s, _e;\n\n  try {\n    for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar DeviceTypes = {\n  Mobile: 'mobile',\n  Tablet: 'tablet',\n  SmartTv: 'smarttv',\n  Console: 'console',\n  Wearable: 'wearable',\n  Embedded: 'embedded',\n  Browser: undefined\n};\nvar BrowserTypes = {\n  Chrome: 'Chrome',\n  Firefox: 'Firefox',\n  Opera: 'Opera',\n  Yandex: 'Yandex',\n  Safari: 'Safari',\n  InternetExplorer: 'Internet Explorer',\n  Edge: 'Edge',\n  Chromium: 'Chromium',\n  Ie: 'IE',\n  MobileSafari: 'Mobile Safari',\n  EdgeChromium: 'Edge Chromium',\n  MIUI: 'MIUI Browser',\n  SamsungBrowser: 'Samsung Browser'\n};\nvar OsTypes = {\n  IOS: 'iOS',\n  Android: 'Android',\n  WindowsPhone: 'Windows Phone',\n  Windows: 'Windows',\n  MAC_OS: 'Mac OS'\n};\nvar InitialDeviceTypes = {\n  isMobile: false,\n  isTablet: false,\n  isBrowser: false,\n  isSmartTV: false,\n  isConsole: false,\n  isWearable: false\n};\n\nvar checkDeviceType = function checkDeviceType(type) {\n  switch (type) {\n    case DeviceTypes.Mobile:\n      return {\n        isMobile: true\n      };\n\n    case DeviceTypes.Tablet:\n      return {\n        isTablet: true\n      };\n\n    case DeviceTypes.SmartTv:\n      return {\n        isSmartTV: true\n      };\n\n    case DeviceTypes.Console:\n      return {\n        isConsole: true\n      };\n\n    case DeviceTypes.Wearable:\n      return {\n        isWearable: true\n      };\n\n    case DeviceTypes.Browser:\n      return {\n        isBrowser: true\n      };\n\n    case DeviceTypes.Embedded:\n      return {\n        isEmbedded: true\n      };\n\n    default:\n      return InitialDeviceTypes;\n  }\n};\nvar setUserAgent = function setUserAgent(userAgent) {\n  return setUa(userAgent);\n};\nvar setDefaults = function setDefaults(p) {\n  var d = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'none';\n  return p ? p : d;\n};\nvar getNavigatorInstance = function getNavigatorInstance() {\n  if (typeof window !== 'undefined') {\n    if (window.navigator || navigator) {\n      return window.navigator || navigator;\n    }\n  }\n\n  return false;\n};\nvar isIOS13Check = function isIOS13Check(type) {\n  var nav = getNavigatorInstance();\n  return nav && nav.platform && (nav.platform.indexOf(type) !== -1 || nav.platform === 'MacIntel' && nav.maxTouchPoints > 1 && !window.MSStream);\n};\n\nvar browserPayload = function browserPayload(isBrowser, browser, engine, os, ua) {\n  return {\n    isBrowser: isBrowser,\n    browserMajorVersion: setDefaults(browser.major),\n    browserFullVersion: setDefaults(browser.version),\n    browserName: setDefaults(browser.name),\n    engineName: setDefaults(engine.name),\n    engineVersion: setDefaults(engine.version),\n    osName: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    userAgent: setDefaults(ua)\n  };\n};\nvar mobilePayload = function mobilePayload(type, device, os, ua) {\n  return _objectSpread2({}, type, {\n    vendor: setDefaults(device.vendor),\n    model: setDefaults(device.model),\n    os: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    ua: setDefaults(ua)\n  });\n};\nvar smartTvPayload = function smartTvPayload(isSmartTV, engine, os, ua) {\n  return {\n    isSmartTV: isSmartTV,\n    engineName: setDefaults(engine.name),\n    engineVersion: setDefaults(engine.version),\n    osName: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    userAgent: setDefaults(ua)\n  };\n};\nvar consolePayload = function consolePayload(isConsole, engine, os, ua) {\n  return {\n    isConsole: isConsole,\n    engineName: setDefaults(engine.name),\n    engineVersion: setDefaults(engine.version),\n    osName: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    userAgent: setDefaults(ua)\n  };\n};\nvar wearablePayload = function wearablePayload(isWearable, engine, os, ua) {\n  return {\n    isWearable: isWearable,\n    engineName: setDefaults(engine.name),\n    engineVersion: setDefaults(engine.version),\n    osName: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    userAgent: setDefaults(ua)\n  };\n};\nvar embeddedPayload = function embeddedPayload(isEmbedded, device, engine, os, ua) {\n  return {\n    isEmbedded: isEmbedded,\n    vendor: setDefaults(device.vendor),\n    model: setDefaults(device.model),\n    engineName: setDefaults(engine.name),\n    engineVersion: setDefaults(engine.version),\n    osName: setDefaults(os.name),\n    osVersion: setDefaults(os.version),\n    userAgent: setDefaults(ua)\n  };\n};\n\nfunction deviceDetect(userAgent) {\n  var _ref = userAgent ? parseUserAgent(userAgent) : UAHelper,\n      device = _ref.device,\n      browser = _ref.browser,\n      engine = _ref.engine,\n      os = _ref.os,\n      ua = _ref.ua;\n\n  var type = checkDeviceType(device.type);\n  var isBrowser = type.isBrowser,\n      isMobile = type.isMobile,\n      isTablet = type.isTablet,\n      isSmartTV = type.isSmartTV,\n      isConsole = type.isConsole,\n      isWearable = type.isWearable,\n      isEmbedded = type.isEmbedded;\n\n  if (isBrowser) {\n    return browserPayload(isBrowser, browser, engine, os, ua);\n  }\n\n  if (isSmartTV) {\n    return smartTvPayload(isSmartTV, engine, os, ua);\n  }\n\n  if (isConsole) {\n    return consolePayload(isConsole, engine, os, ua);\n  }\n\n  if (isMobile) {\n    return mobilePayload(type, device, os, ua);\n  }\n\n  if (isTablet) {\n    return mobilePayload(type, device, os, ua);\n  }\n\n  if (isWearable) {\n    return wearablePayload(isWearable, engine, os, ua);\n  }\n\n  if (isEmbedded) {\n    return embeddedPayload(isEmbedded, device, engine, os, ua);\n  }\n}\n\nvar isMobileType = function isMobileType(_ref) {\n  var type = _ref.type;\n  return type === DeviceTypes.Mobile;\n};\nvar isTabletType = function isTabletType(_ref2) {\n  var type = _ref2.type;\n  return type === DeviceTypes.Tablet;\n};\nvar isMobileAndTabletType = function isMobileAndTabletType(_ref3) {\n  var type = _ref3.type;\n  return type === DeviceTypes.Mobile || type === DeviceTypes.Tablet;\n};\nvar isSmartTVType = function isSmartTVType(_ref4) {\n  var type = _ref4.type;\n  return type === DeviceTypes.SmartTv;\n};\nvar isBrowserType = function isBrowserType(_ref5) {\n  var type = _ref5.type;\n  return type === DeviceTypes.Browser;\n};\nvar isWearableType = function isWearableType(_ref6) {\n  var type = _ref6.type;\n  return type === DeviceTypes.Wearable;\n};\nvar isConsoleType = function isConsoleType(_ref7) {\n  var type = _ref7.type;\n  return type === DeviceTypes.Console;\n};\nvar isEmbeddedType = function isEmbeddedType(_ref8) {\n  var type = _ref8.type;\n  return type === DeviceTypes.Embedded;\n};\nvar getMobileVendor = function getMobileVendor(_ref9) {\n  var vendor = _ref9.vendor;\n  return setDefaults(vendor);\n};\nvar getMobileModel = function getMobileModel(_ref10) {\n  var model = _ref10.model;\n  return setDefaults(model);\n};\nvar getDeviceType = function getDeviceType(_ref11) {\n  var type = _ref11.type;\n  return setDefaults(type, 'browser');\n}; // os types\n\nvar isAndroidType = function isAndroidType(_ref12) {\n  var name = _ref12.name;\n  return name === OsTypes.Android;\n};\nvar isWindowsType = function isWindowsType(_ref13) {\n  var name = _ref13.name;\n  return name === OsTypes.Windows;\n};\nvar isMacOsType = function isMacOsType(_ref14) {\n  var name = _ref14.name;\n  return name === OsTypes.MAC_OS;\n};\nvar isWinPhoneType = function isWinPhoneType(_ref15) {\n  var name = _ref15.name;\n  return name === OsTypes.WindowsPhone;\n};\nvar isIOSType = function isIOSType(_ref16) {\n  var name = _ref16.name;\n  return name === OsTypes.IOS;\n};\nvar getOsVersion = function getOsVersion(_ref17) {\n  var version = _ref17.version;\n  return setDefaults(version);\n};\nvar getOsName = function getOsName(_ref18) {\n  var name = _ref18.name;\n  return setDefaults(name);\n}; // browser types\n\nvar isChromeType = function isChromeType(_ref19) {\n  var name = _ref19.name;\n  return name === BrowserTypes.Chrome;\n};\nvar isFirefoxType = function isFirefoxType(_ref20) {\n  var name = _ref20.name;\n  return name === BrowserTypes.Firefox;\n};\nvar isChromiumType = function isChromiumType(_ref21) {\n  var name = _ref21.name;\n  return name === BrowserTypes.Chromium;\n};\nvar isEdgeType = function isEdgeType(_ref22) {\n  var name = _ref22.name;\n  return name === BrowserTypes.Edge;\n};\nvar isYandexType = function isYandexType(_ref23) {\n  var name = _ref23.name;\n  return name === BrowserTypes.Yandex;\n};\nvar isSafariType = function isSafariType(_ref24) {\n  var name = _ref24.name;\n  return name === BrowserTypes.Safari || name === BrowserTypes.MobileSafari;\n};\nvar isMobileSafariType = function isMobileSafariType(_ref25) {\n  var name = _ref25.name;\n  return name === BrowserTypes.MobileSafari;\n};\nvar isOperaType = function isOperaType(_ref26) {\n  var name = _ref26.name;\n  return name === BrowserTypes.Opera;\n};\nvar isIEType = function isIEType(_ref27) {\n  var name = _ref27.name;\n  return name === BrowserTypes.InternetExplorer || name === BrowserTypes.Ie;\n};\nvar isMIUIType = function isMIUIType(_ref28) {\n  var name = _ref28.name;\n  return name === BrowserTypes.MIUI;\n};\nvar isSamsungBrowserType = function isSamsungBrowserType(_ref29) {\n  var name = _ref29.name;\n  return name === BrowserTypes.SamsungBrowser;\n};\nvar getBrowserFullVersion = function getBrowserFullVersion(_ref30) {\n  var version = _ref30.version;\n  return setDefaults(version);\n};\nvar getBrowserVersion = function getBrowserVersion(_ref31) {\n  var major = _ref31.major;\n  return setDefaults(major);\n};\nvar getBrowserName = function getBrowserName(_ref32) {\n  var name = _ref32.name;\n  return setDefaults(name);\n}; // engine types\n\nvar getEngineName = function getEngineName(_ref33) {\n  var name = _ref33.name;\n  return setDefaults(name);\n};\nvar getEngineVersion = function getEngineVersion(_ref34) {\n  var version = _ref34.version;\n  return setDefaults(version);\n};\nvar isElectronType = function isElectronType() {\n  var nav = getNavigatorInstance();\n  var ua = nav && nav.userAgent && nav.userAgent.toLowerCase();\n  return typeof ua === 'string' ? /electron/.test(ua) : false;\n};\nvar isEdgeChromiumType = function isEdgeChromiumType(ua) {\n  return typeof ua === 'string' && ua.indexOf('Edg/') !== -1;\n};\nvar getIOS13 = function getIOS13() {\n  var nav = getNavigatorInstance();\n  return nav && (/iPad|iPhone|iPod/.test(nav.platform) || nav.platform === 'MacIntel' && nav.maxTouchPoints > 1) && !window.MSStream;\n};\nvar getIPad13 = function getIPad13() {\n  return isIOS13Check('iPad');\n};\nvar getIphone13 = function getIphone13() {\n  return isIOS13Check('iPhone');\n};\nvar getIPod13 = function getIPod13() {\n  return isIOS13Check('iPod');\n};\nvar getUseragent = function getUseragent(userAg) {\n  return setDefaults(userAg);\n};\n\nfunction buildSelectorsObject(options) {\n  var _ref = options ? options : UAHelper,\n      device = _ref.device,\n      browser = _ref.browser,\n      os = _ref.os,\n      engine = _ref.engine,\n      ua = _ref.ua;\n\n  return {\n    isSmartTV: isSmartTVType(device),\n    isConsole: isConsoleType(device),\n    isWearable: isWearableType(device),\n    isEmbedded: isEmbeddedType(device),\n    isMobileSafari: isMobileSafariType(browser) || getIPad13(),\n    isChromium: isChromiumType(browser),\n    isMobile: isMobileAndTabletType(device) || getIPad13(),\n    isMobileOnly: isMobileType(device),\n    isTablet: isTabletType(device) || getIPad13(),\n    isBrowser: isBrowserType(device),\n    isDesktop: isBrowserType(device),\n    isAndroid: isAndroidType(os),\n    isWinPhone: isWinPhoneType(os),\n    isIOS: isIOSType(os) || getIPad13(),\n    isChrome: isChromeType(browser),\n    isFirefox: isFirefoxType(browser),\n    isSafari: isSafariType(browser),\n    isOpera: isOperaType(browser),\n    isIE: isIEType(browser),\n    osVersion: getOsVersion(os),\n    osName: getOsName(os),\n    fullBrowserVersion: getBrowserFullVersion(browser),\n    browserVersion: getBrowserVersion(browser),\n    browserName: getBrowserName(browser),\n    mobileVendor: getMobileVendor(device),\n    mobileModel: getMobileModel(device),\n    engineName: getEngineName(engine),\n    engineVersion: getEngineVersion(engine),\n    getUA: getUseragent(ua),\n    isEdge: isEdgeType(browser) || isEdgeChromiumType(ua),\n    isYandex: isYandexType(browser),\n    deviceType: getDeviceType(device),\n    isIOS13: getIOS13(),\n    isIPad13: getIPad13(),\n    isIPhone13: getIphone13(),\n    isIPod13: getIPod13(),\n    isElectron: isElectronType(),\n    isEdgeChromium: isEdgeChromiumType(ua),\n    isLegacyEdge: isEdgeType(browser) && !isEdgeChromiumType(ua),\n    isWindows: isWindowsType(os),\n    isMacOs: isMacOsType(os),\n    isMIUI: isMIUIType(browser),\n    isSamsungBrowser: isSamsungBrowserType(browser)\n  };\n}\n\nvar isSmartTV = isSmartTVType(device);\nvar isConsole = isConsoleType(device);\nvar isWearable = isWearableType(device);\nvar isEmbedded = isEmbeddedType(device);\nvar isMobileSafari = isMobileSafariType(browser) || getIPad13();\nvar isChromium = isChromiumType(browser);\nvar isMobile = isMobileAndTabletType(device) || getIPad13();\nvar isMobileOnly = isMobileType(device);\nvar isTablet = isTabletType(device) || getIPad13();\nvar isBrowser = isBrowserType(device);\nvar isDesktop = isBrowserType(device);\nvar isAndroid = isAndroidType(os);\nvar isWinPhone = isWinPhoneType(os);\nvar isIOS = isIOSType(os) || getIPad13();\nvar isChrome = isChromeType(browser);\nvar isFirefox = isFirefoxType(browser);\nvar isSafari = isSafariType(browser);\nvar isOpera = isOperaType(browser);\nvar isIE = isIEType(browser);\nvar osVersion = getOsVersion(os);\nvar osName = getOsName(os);\nvar fullBrowserVersion = getBrowserFullVersion(browser);\nvar browserVersion = getBrowserVersion(browser);\nvar browserName = getBrowserName(browser);\nvar mobileVendor = getMobileVendor(device);\nvar mobileModel = getMobileModel(device);\nvar engineName = getEngineName(engine);\nvar engineVersion = getEngineVersion(engine);\nvar getUA = getUseragent(ua);\nvar isEdge = isEdgeType(browser) || isEdgeChromiumType(ua);\nvar isYandex = isYandexType(browser);\nvar deviceType = getDeviceType(device);\nvar isIOS13 = getIOS13();\nvar isIPad13 = getIPad13();\nvar isIPhone13 = getIphone13();\nvar isIPod13 = getIPod13();\nvar isElectron = isElectronType();\nvar isEdgeChromium = isEdgeChromiumType(ua);\nvar isLegacyEdge = isEdgeType(browser) && !isEdgeChromiumType(ua);\nvar isWindows = isWindowsType(os);\nvar isMacOs = isMacOsType(os);\nvar isMIUI = isMIUIType(browser);\nvar isSamsungBrowser = isSamsungBrowserType(browser);\nvar getSelectorsByUserAgent = function getSelectorsByUserAgent(userAgent) {\n  if (!userAgent || typeof userAgent !== 'string') {\n    console.error('No valid user agent string was provided');\n    return;\n  }\n\n  var _UAHelper$parseUserAg = parseUserAgent(userAgent),\n      device = _UAHelper$parseUserAg.device,\n      browser = _UAHelper$parseUserAg.browser,\n      os = _UAHelper$parseUserAg.os,\n      engine = _UAHelper$parseUserAg.engine,\n      ua = _UAHelper$parseUserAg.ua;\n\n  return buildSelectorsObject({\n    device: device,\n    browser: browser,\n    os: os,\n    engine: engine,\n    ua: ua\n  });\n};\n\nvar AndroidView = function AndroidView(_ref) {\n  var renderWithFragment = _ref.renderWithFragment,\n      children = _ref.children,\n      props = _objectWithoutProperties(_ref, [\"renderWithFragment\", \"children\"]);\n\n  return isAndroid ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar BrowserView = function BrowserView(_ref2) {\n  var renderWithFragment = _ref2.renderWithFragment,\n      children = _ref2.children,\n      props = _objectWithoutProperties(_ref2, [\"renderWithFragment\", \"children\"]);\n\n  return isBrowser ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar IEView = function IEView(_ref3) {\n  var renderWithFragment = _ref3.renderWithFragment,\n      children = _ref3.children,\n      props = _objectWithoutProperties(_ref3, [\"renderWithFragment\", \"children\"]);\n\n  return isIE ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar IOSView = function IOSView(_ref4) {\n  var renderWithFragment = _ref4.renderWithFragment,\n      children = _ref4.children,\n      props = _objectWithoutProperties(_ref4, [\"renderWithFragment\", \"children\"]);\n\n  return isIOS ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar MobileView = function MobileView(_ref5) {\n  var renderWithFragment = _ref5.renderWithFragment,\n      children = _ref5.children,\n      props = _objectWithoutProperties(_ref5, [\"renderWithFragment\", \"children\"]);\n\n  return isMobile ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar TabletView = function TabletView(_ref6) {\n  var renderWithFragment = _ref6.renderWithFragment,\n      children = _ref6.children,\n      props = _objectWithoutProperties(_ref6, [\"renderWithFragment\", \"children\"]);\n\n  return isTablet ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar WinPhoneView = function WinPhoneView(_ref7) {\n  var renderWithFragment = _ref7.renderWithFragment,\n      children = _ref7.children,\n      props = _objectWithoutProperties(_ref7, [\"renderWithFragment\", \"children\"]);\n\n  return isWinPhone ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar MobileOnlyView = function MobileOnlyView(_ref8) {\n  var renderWithFragment = _ref8.renderWithFragment,\n      children = _ref8.children,\n      viewClassName = _ref8.viewClassName,\n      style = _ref8.style,\n      props = _objectWithoutProperties(_ref8, [\"renderWithFragment\", \"children\", \"viewClassName\", \"style\"]);\n\n  return isMobileOnly ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar SmartTVView = function SmartTVView(_ref9) {\n  var renderWithFragment = _ref9.renderWithFragment,\n      children = _ref9.children,\n      props = _objectWithoutProperties(_ref9, [\"renderWithFragment\", \"children\"]);\n\n  return isSmartTV ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar ConsoleView = function ConsoleView(_ref10) {\n  var renderWithFragment = _ref10.renderWithFragment,\n      children = _ref10.children,\n      props = _objectWithoutProperties(_ref10, [\"renderWithFragment\", \"children\"]);\n\n  return isConsole ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar WearableView = function WearableView(_ref11) {\n  var renderWithFragment = _ref11.renderWithFragment,\n      children = _ref11.children,\n      props = _objectWithoutProperties(_ref11, [\"renderWithFragment\", \"children\"]);\n\n  return isWearable ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\nvar CustomView = function CustomView(_ref12) {\n  var renderWithFragment = _ref12.renderWithFragment,\n      children = _ref12.children,\n      viewClassName = _ref12.viewClassName,\n      style = _ref12.style,\n      condition = _ref12.condition,\n      props = _objectWithoutProperties(_ref12, [\"renderWithFragment\", \"children\", \"viewClassName\", \"style\", \"condition\"]);\n\n  return condition ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement(\"div\", props, children) : null;\n};\n\nfunction withOrientationChange(WrappedComponent) {\n  return /*#__PURE__*/function (_React$Component) {\n    _inherits(_class, _React$Component);\n\n    function _class(props) {\n      var _this;\n\n      _classCallCheck(this, _class);\n\n      _this = _possibleConstructorReturn(this, _getPrototypeOf(_class).call(this, props));\n      _this.isEventListenerAdded = false;\n      _this.handleOrientationChange = _this.handleOrientationChange.bind(_assertThisInitialized(_this));\n      _this.onOrientationChange = _this.onOrientationChange.bind(_assertThisInitialized(_this));\n      _this.onPageLoad = _this.onPageLoad.bind(_assertThisInitialized(_this));\n      _this.state = {\n        isLandscape: false,\n        isPortrait: false\n      };\n      return _this;\n    }\n\n    _createClass(_class, [{\n      key: \"handleOrientationChange\",\n      value: function handleOrientationChange() {\n        if (!this.isEventListenerAdded) {\n          this.isEventListenerAdded = true;\n        }\n\n        var orientation = window.innerWidth > window.innerHeight ? 90 : 0;\n        this.setState({\n          isPortrait: orientation === 0,\n          isLandscape: orientation === 90\n        });\n      }\n    }, {\n      key: \"onOrientationChange\",\n      value: function onOrientationChange() {\n        this.handleOrientationChange();\n      }\n    }, {\n      key: \"onPageLoad\",\n      value: function onPageLoad() {\n        this.handleOrientationChange();\n      }\n    }, {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) !== undefined && isMobile) {\n          if (!this.isEventListenerAdded) {\n            this.handleOrientationChange();\n            window.addEventListener(\"load\", this.onPageLoad, false);\n          } else {\n            window.removeEventListener(\"load\", this.onPageLoad, false);\n          }\n\n          window.addEventListener(\"resize\", this.onOrientationChange, false);\n        }\n      }\n    }, {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        window.removeEventListener(\"resize\", this.onOrientationChange, false);\n      }\n    }, {\n      key: \"render\",\n      value: function render() {\n        return React__default.createElement(WrappedComponent, _extends({}, this.props, {\n          isLandscape: this.state.isLandscape,\n          isPortrait: this.state.isPortrait\n        }));\n      }\n    }]);\n\n    return _class;\n  }(React__default.Component);\n}\n\nfunction useMobileOrientation() {\n  var _useState = React.useState(function () {\n    var orientation = window.innerWidth > window.innerHeight ? 90 : 0;\n    return {\n      isPortrait: orientation === 0,\n      isLandscape: orientation === 90,\n      orientation: orientation === 0 ? 'portrait' : 'landscape'\n    };\n  }),\n      _useState2 = _slicedToArray(_useState, 2),\n      state = _useState2[0],\n      setState = _useState2[1];\n\n  var handleOrientationChange = React.useCallback(function () {\n    var orientation = window.innerWidth > window.innerHeight ? 90 : 0;\n    var next = {\n      isPortrait: orientation === 0,\n      isLandscape: orientation === 90,\n      orientation: orientation === 0 ? 'portrait' : 'landscape'\n    };\n    state.orientation !== next.orientation && setState(next);\n  }, [state.orientation]);\n  React.useEffect(function () {\n    if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) !== undefined && isMobile) {\n      handleOrientationChange();\n      window.addEventListener(\"load\", handleOrientationChange, false);\n      window.addEventListener(\"resize\", handleOrientationChange, false);\n    }\n\n    return function () {\n      window.removeEventListener(\"resize\", handleOrientationChange, false);\n      window.removeEventListener(\"load\", handleOrientationChange, false);\n    };\n  }, [handleOrientationChange]);\n  return state;\n}\n\nfunction useDeviceData(userAgent) {\n  var hookUserAgent = userAgent ? userAgent : window.navigator.userAgent;\n  return parseUserAgent(hookUserAgent);\n}\n\nfunction useDeviceSelectors(userAgent) {\n  var hookUserAgent = userAgent ? userAgent : window.navigator.userAgent;\n  var deviceData = useDeviceData(hookUserAgent);\n  var selectors = buildSelectorsObject(deviceData);\n  return [selectors, deviceData];\n}\n\nexports.AndroidView = AndroidView;\nexports.BrowserTypes = BrowserTypes;\nexports.BrowserView = BrowserView;\nexports.ConsoleView = ConsoleView;\nexports.CustomView = CustomView;\nexports.IEView = IEView;\nexports.IOSView = IOSView;\nexports.MobileOnlyView = MobileOnlyView;\nexports.MobileView = MobileView;\nexports.OsTypes = OsTypes;\nexports.SmartTVView = SmartTVView;\nexports.TabletView = TabletView;\nexports.WearableView = WearableView;\nexports.WinPhoneView = WinPhoneView;\nexports.browserName = browserName;\nexports.browserVersion = browserVersion;\nexports.deviceDetect = deviceDetect;\nexports.deviceType = deviceType;\nexports.engineName = engineName;\nexports.engineVersion = engineVersion;\nexports.fullBrowserVersion = fullBrowserVersion;\nexports.getSelectorsByUserAgent = getSelectorsByUserAgent;\nexports.getUA = getUA;\nexports.isAndroid = isAndroid;\nexports.isBrowser = isBrowser;\nexports.isChrome = isChrome;\nexports.isChromium = isChromium;\nexports.isConsole = isConsole;\nexports.isDesktop = isDesktop;\nexports.isEdge = isEdge;\nexports.isEdgeChromium = isEdgeChromium;\nexports.isElectron = isElectron;\nexports.isEmbedded = isEmbedded;\nexports.isFirefox = isFirefox;\nexports.isIE = isIE;\nexports.isIOS = isIOS;\nexports.isIOS13 = isIOS13;\nexports.isIPad13 = isIPad13;\nexports.isIPhone13 = isIPhone13;\nexports.isIPod13 = isIPod13;\nexports.isLegacyEdge = isLegacyEdge;\nexports.isMIUI = isMIUI;\nexports.isMacOs = isMacOs;\nexports.isMobile = isMobile;\nexports.isMobileOnly = isMobileOnly;\nexports.isMobileSafari = isMobileSafari;\nexports.isOpera = isOpera;\nexports.isSafari = isSafari;\nexports.isSamsungBrowser = isSamsungBrowser;\nexports.isSmartTV = isSmartTV;\nexports.isTablet = isTablet;\nexports.isWearable = isWearable;\nexports.isWinPhone = isWinPhone;\nexports.isWindows = isWindows;\nexports.isYandex = isYandex;\nexports.mobileModel = mobileModel;\nexports.mobileVendor = mobileVendor;\nexports.osName = osName;\nexports.osVersion = osVersion;\nexports.parseUserAgent = parseUserAgent;\nexports.setUserAgent = setUserAgent;\nexports.useDeviceData = useDeviceData;\nexports.useDeviceSelectors = useDeviceSelectors;\nexports.useMobileOrientation = useMobileOrientation;\nexports.withOrientationChange = withOrientationChange;\n","import type { PreviewCategory } from \"./TnkrPreview\"\n\n// Utility type for the original Category (as used in your existing sidebar)\nexport interface Category {\n  id: string\n  name: string\n  parentId: string | null\n  children: Category[]\n  order: number\n  isExpanded: boolean\n  hasPage: boolean\n  pageContent?: any\n  type?: string\n  icon?: string\n  organizationId?: string\n  productId?: string\n}\n\n/**\n * Converts Category[] to PreviewCategory[] for use in the preview component\n */\nexport const convertCategoriesToPreview = (categories: Category[]): PreviewCategory[] => {\n  const convertSingle = (category: Category): PreviewCategory => ({\n    id: category.id,\n    name: category.name,\n    parentId: category.parentId,\n    children: category.children.map(convertSingle),\n    order: category.order,\n    isExpanded: category.isExpanded,\n    hasPage: category.hasPage,\n    type: category.type,\n    icon: category.icon,\n    organizationId: category.organizationId,\n    productId: category.productId,\n    pageContent: category.pageContent,\n  })\n\n  return categories.map(convertSingle)\n}\n\n/**\n * Gets all pages with content in a flat array for navigation\n */\nexport const getPagesWithContent = (categories: PreviewCategory[]): PreviewCategory[] => {\n  const flattenCategories = (cats: PreviewCategory[]): PreviewCategory[] => {\n    return cats.reduce((acc: PreviewCategory[], cat) => {\n      if (cat.hasPage && cat.pageContent) {\n        acc.push(cat)\n      }\n      if (cat.children && cat.children.length > 0) {\n        acc.push(...flattenCategories(cat.children))\n      }\n      return acc\n    }, [])\n  }\n\n  return flattenCategories(categories)\n}\n\n/**\n * Finds a category by ID in a nested structure\n */\nexport const findCategoryById = (categories: PreviewCategory[], id: string): PreviewCategory | null => {\n  for (const cat of categories) {\n    if (cat.id === id) return cat\n    if (cat.children && cat.children.length > 0) {\n      const found = findCategoryById(cat.children, id)\n      if (found) return found\n    }\n  }\n  return null\n}\n\n/**\n * Gets the root category name for a given category\n */\nexport const getRootCategoryName = (categories: PreviewCategory[], categoryId: string): string => {\n  const category = findCategoryById(categories, categoryId)\n  if (!category) return \"\"\n\n  // If it's a root category, return its name\n  if (!category.parentId) return category.name\n\n  // Otherwise, find the root parent\n  const rootParent = findCategoryById(categories, category.parentId)\n  return rootParent && rootParent.parentId ? rootParent.name : category.name\n}\n\n/**\n * URL Hash Routing Utilities\n */\n\n/**\n * Encodes a category name to be used in URL hash\n * Converts to lowercase and replaces spaces with hyphens for clean URLs\n */\nexport const encodeCategoryHash = (categoryName: string): string => {\n  const slugified = categoryName\n    .toLowerCase()\n    .trim()\n    .replace(/\\s+/g, '-')\n    .replace(/[^\\w\\-]/g, '')\n  return encodeURIComponent(slugified)\n}\n\n/**\n * Decodes a URL hash to get the category name slug\n */\nexport const decodeCategoryHash = (hash: string): string => {\n  // Remove the leading # if present\n  const cleanHash = hash.startsWith('#') ? hash.slice(1) : hash\n  return decodeURIComponent(cleanHash)\n}\n\n/**\n * Gets the current category name slug from the URL hash\n */\nexport const getCategoryNameFromHash = (): string | null => {\n  if (typeof window === 'undefined') return null\n  const hash = window.location.hash\n  return hash ? decodeCategoryHash(hash) : null\n}\n\n/**\n * Updates the URL hash with the category name\n */\nexport const updateHashWithCategory = (categoryName: string): void => {\n  if (typeof window === 'undefined') return\n  const encodedName = encodeCategoryHash(categoryName)\n  window.history.pushState(null, '', `#${encodedName}`)\n}\n\n/**\n * Finds a category by matching its name (case-insensitive, ignoring spaces/hyphens)\n */\nexport const findCategoryByName = (categories: PreviewCategory[], nameSlug: string): PreviewCategory | null => {\n  const normalizeForComparison = (str: string) =>\n    str.toLowerCase().replace(/[\\s\\-]/g, '')\n\n  const normalizedSlug = normalizeForComparison(nameSlug)\n\n  const searchCategories = (cats: PreviewCategory[]): PreviewCategory | null => {\n    for (const cat of cats) {\n      if (normalizeForComparison(cat.name) === normalizedSlug) {\n        return cat\n      }\n      if (cat.children && cat.children.length > 0) {\n        const found = searchCategories(cat.children)\n        if (found) return found\n      }\n    }\n    return null\n  }\n\n  return searchCategories(categories)\n}\n\n/**\n * Encodes a section heading to be used in URL hash\n * Converts to lowercase and replaces spaces with hyphens for clean URLs\n */\nexport const encodeSectionHash = (headingText: string): string => {\n  return headingText\n    .toLowerCase()\n    .trim()\n    .replace(/\\s+/g, '-')\n    .replace(/[^\\w\\-]/g, '')\n}\n\n/**\n * Updates URL hash with both category and section\n */\nexport const updateHashWithSection = (\n  categoryName: string,\n  sectionHeading?: string\n): void => {\n  if (typeof window === 'undefined') return\n\n  const categorySlug = encodeCategoryHash(categoryName)\n  const sectionSlug = sectionHeading ? encodeSectionHash(sectionHeading) : ''\n\n  const hash = sectionSlug\n    ? `#${categorySlug}#${sectionSlug}`\n    : `#${categorySlug}`\n\n  window.history.pushState(null, '', hash)\n}\n\n/**\n * Parses hash to get both category and section\n */\nexport const parseHashWithSection = (): {\n  category: string | null\n  section: string | null\n} => {\n  if (typeof window === 'undefined') {\n    return { category: null, section: null }\n  }\n\n  const hash = window.location.hash.slice(1) // Remove #\n  const parts = hash.split('#')\n\n  return {\n    category: parts[0] ? decodeCategoryHash(parts[0]) : null,\n    section: parts[1] || null,\n  }\n}\n\n/**\n * Clears the URL hash\n */\nexport const clearHash = (): void => {\n  if (typeof window === 'undefined') return\n  window.history.replaceState(null, '', window.location.pathname + window.location.search)\n}\n","/**\n * Helper functions for generating default page content\n * Extracted from CustomPage.tsx to keep the component less dense\n */\n\nimport { PageContent } from \"./CustomPage\";\n\n/**\n * Get default intro content for new pages\n */\nexport const getDefaultIntroContent = (): PageContent => ({\n  type: \"doc\",\n  content: [\n    {\n      type: \"paragraph\",\n      content: [],\n    },\n  ],\n});\n\n/**\n * Get first page content with introduction template\n */\nexport const getFirstPageContent = (): PageContent => ({\n  type: \"doc\",\n  content: [\n    {\n      type: \"heading\",\n      attrs: { level: 1 },\n      content: [{ type: \"text\", text: \"Introduction\" }],\n    },\n    {\n      type: \"paragraph\",\n      content: [\n        {\n          type: \"text\",\n          text: \"Introduce your product to your customers with ease! Use this template to explain how your solution empowers users. Highlight the key features, such as the hardware, libraries, and remote control capabilities that enable developers to collect data, train AI models, and deploy applications swiftly. Make it clear how your product transforms the way users interact with technology, turning complex tasks into simple, efficient processes.\",\n        },\n      ],\n    },\n    {\n      type: \"paragraph\",\n      content: [],\n    },\n    {\n      type: \"image\",\n      attrs: {\n        src: \"/assets/img/central-docs-intro.png\",\n        alt: \"Central Docs Introduction\",\n        title: \"Introduction to Central Documentation\",\n      },\n    },\n    {\n      type: \"paragraph\",\n      content: [],\n    },\n    {\n      type: \"heading\",\n      attrs: { level: 1 },\n      content: [{ type: \"text\", text: \"Hardware\" }],\n    },\n    {\n      type: \"paragraph\",\n      content: [\n        {\n          type: \"text\",\n          text: \"Highlight your hardware products in this section, add a short description to give your users an idea of what you're building.\",\n        },\n      ],\n    },\n  ],\n});\n\n/**\n * Get explorer page content with 3D model viewer and BOM table\n */\nexport const getExplorerPageContent = (\n  productName?: string,\n  organizationId?: string,\n  productId?: string\n): PageContent => ({\n  type: \"doc\",\n  content: [\n    {\n      type: \"paragraph\",\n      content: [],\n    },\n    {\n      type: \"paragraph\",\n      content: [],\n    },\n    {\n      type: \"explorerCard\",\n      attrs: {\n        id: `explorer-${Date.now()}`,\n        flashCards: [],\n        showPartsTree: true,\n        organizationId: organizationId || null,\n        productId: productId || null,\n      },\n    },\n    {\n      type: \"paragraph\",\n      content: [],\n    },\n    {\n      type: \"paragraph\",\n      content: [],\n    },\n    {\n      type: \"heading\",\n      attrs: { level: 1 },\n      content: [{ type: \"text\", text: \"Bill of Materials\" }],\n    },\n    {\n      type: \"paragraph\",\n      content: [\n        {\n          type: \"text\",\n          text: `${productName || \"This product\"} makes use of parts you can purchase online and print with a 3D printer, here's a breakdown:`,\n        },\n      ],\n    },\n    {\n      type: \"paragraph\",\n      content: [],\n    },\n    {\n      type: \"paragraph\",\n      content: [],\n    },\n    {\n      type: \"tabs\",\n      attrs: {\n        tabs: [\n          {\n            id: \"tab-1\",\n            title: \"Parts List\",\n            content: {\n              type: \"doc\",\n              content: [\n                {\n                  type: \"bomNode\",\n                  attrs: {\n                    id: `bom-${Date.now()}`,\n                    title: \"Bill of Materials\",\n                    type: \"regular-parts\",\n                    organizationId: organizationId || null,\n                    productId: productId || null,\n                  },\n                  content: [\n                    {\n                      type: \"table\",\n                      content: [\n                        {\n                          type: \"tableRow\",\n                          content: [\n                            {\n                              type: \"tableHeader\",\n                              content: [{ type: \"paragraph\", content: [{ type: \"text\", text: \"Part Name\" }] }],\n                            },\n                            {\n                              type: \"tableHeader\",\n                              content: [{ type: \"paragraph\", content: [{ type: \"text\", text: \"Quantity\" }] }],\n                            },\n                            {\n                              type: \"tableHeader\",\n                              content: [{ type: \"paragraph\", content: [{ type: \"text\", text: \"Mass (kg)\" }] }],\n                            },\n                            {\n                              type: \"tableHeader\",\n                              content: [{ type: \"paragraph\", content: [{ type: \"text\", text: \"Notes\" }] }],\n                            },\n                            {\n                              type: \"tableHeader\",\n                              content: [{ type: \"paragraph\", content: [{ type: \"text\", text: \"Sourcing Region\" }] }],\n                            },\n                            {\n                              type: \"tableHeader\",\n                              content: [{ type: \"paragraph\", content: [{ type: \"text\", text: \"Sourcing Link\" }] }],\n                            },\n                            {\n                              type: \"tableHeader\",\n                              content: [{ type: \"paragraph\", content: [{ type: \"text\", text: \"Data Sheet URL\" }] }],\n                            },\n                            {\n                              type: \"tableHeader\",\n                              content: [{ type: \"paragraph\", content: [{ type: \"text\", text: \"Manufacturer Website\" }] }],\n                            },\n                            {\n                              type: \"tableHeader\",\n                              content: [{ type: \"paragraph\", content: [{ type: \"text\", text: \"Product Link\" }] }],\n                            },\n                          ],\n                        },\n                        {\n                          type: \"tableRow\",\n                          content: [\n                            {\n                              type: \"tableCell\",\n                              content: [{ type: \"paragraph\", content: [] }],\n                            },\n                            {\n                              type: \"tableCell\",\n                              content: [{ type: \"paragraph\", content: [] }],\n                            },\n                            {\n                              type: \"tableCell\",\n                              content: [{ type: \"paragraph\", content: [] }],\n                            },\n                            {\n                              type: \"tableCell\",\n                              content: [{ type: \"paragraph\", content: [] }],\n                            },\n                            {\n                              type: \"tableCell\",\n                              content: [{ type: \"paragraph\", content: [] }],\n                            },\n                            {\n                              type: \"tableCell\",\n                              content: [{ type: \"paragraph\", content: [] }],\n                            },\n                            {\n                              type: \"tableCell\",\n                              content: [{ type: \"paragraph\", content: [] }],\n                            },\n                            {\n                              type: \"tableCell\",\n                              content: [{ type: \"paragraph\", content: [] }],\n                            },\n                            {\n                              type: \"tableCell\",\n                              content: [{ type: \"paragraph\", content: [] }],\n                            },\n                          ],\n                        },\n                      ],\n                    },\n                  ],\n                },\n              ],\n            },\n          },\n        ],\n        activeTab: \"tab-1\",\n      },\n    },\n    {\n      type: \"paragraph\",\n      content: [],\n    },\n  ],\n});\n","import React, {ReactNode, useEffect, useRef, useState} from \"react\";\nimport {PageType, TnkrEditor, TnkrEditorProps} from \"@/core/TnkrEditor\";\nimport {type UploadFunction} from \"@/core/components/tiptap-node/image-upload-node/image-upload-node-extension\";\nimport AssemblyView from \"./assembly/AssemblyView\";\nimport { useProductData } from \"@/hooks/useProductData\";\nimport { UnifiedSideMenuProvider } from \"@/core/components/unified-side-menu\";\nimport { isMobile } from \"react-device-detect\";\nimport { Monitor } from \"lucide-react\";\nimport {\n  updateHashWithCategory,\n  getCategoryNameFromHash,\n  findCategoryByName,\n  type Category\n} from \"../../preview/utils\";\nimport {\n  getDefaultIntroContent,\n  getFirstPageContent,\n  getExplorerPageContent\n} from \"./page-content-helpers\";\nimport { type WhatsNextPage } from \"./WhatsNext\";\n\nexport interface PageContent {\n  type: string;\n  content: any[];\n}\n\nexport interface CustomPageProps {\n  pageParent: string;\n  pageTitle?: string;\n  pageId?: string; // Unique identifier for this page instance\n  pageType?: PageType;\n  editorProps?: TnkrEditorProps;\n  initialData?: any;\n  className?: string;\n  style?: React.CSSProperties;\n  onEditorChange?: (content: any) => void;\n  onSave?: (content: any) => void;\n  children?: ReactNode;\n  showBreadcrumbs?: boolean;\n  onUploadMedia?: UploadFunction;\n  breadcrumbs?: string[];\n  editMode?: boolean;\n  pages?: WhatsNextPage[];\n  goToPage?: (pageId: string) => void;\n  // Props for assembly page type\n  organizationId?: string;\n  productId?: string;\n  // Camera reset button visibility for assembly\n  showResetCamera?: boolean;\n  // Utility card onClick handler\n  onUtilityCardClick?: () => void;\n  // Hash routing support\n  categories?: Category[];\n  onHashNavigation?: (category: Category) => void;\n}\n\nexport const CustomPage: React.FC<CustomPageProps> = ({\n  pageParent,\n  pageTitle,\n  pageId,\n  pageType = \"documentation\",\n  editorProps = {},\n  initialData,\n  className = \"\",\n  style = {},\n  onEditorChange,\n  onSave,\n  editMode: initialEditMode = false,\n  pages,\n  goToPage,\n  onUploadMedia,\n  organizationId,\n  productId,\n  showResetCamera = false,\n  onUtilityCardClick,\n  categories,\n  onHashNavigation,\n}) => {\n  const [isEditMode, setIsEditMode] = useState(initialEditMode);\n  const hasInitialized = useRef(false);\n\n  // Fetch product data when organizationId and productId are provided\n  const productData = useProductData(organizationId || null, productId || null);\n\n  // Validate if content has actual data (not empty or default state)\n  const isValidContent = (content: any): boolean => {\n    // Check if content exists and has the proper structure\n    if (!content || !content.content || !Array.isArray(content.content)) {\n      return false;\n    }\n\n    // Check if content has more than just empty paragraphs\n    const hasActualContent = content.content.some((node: any) => {\n      // If it's a paragraph, check if it has content\n      if (node.type === 'paragraph') {\n        return node.content && node.content.length > 0;\n      }\n      // Any other node type (heading, image, etc.) counts as actual content\n      return node.type !== 'paragraph';\n    });\n\n    return hasActualContent;\n  };\n\n  // Determine default content based on page type\n  const getInitialContent = () => {\n    // Only use initialData if it's valid and has actual content\n    if (initialData && isValidContent(initialData)) {\n      // Check if explorer page has an explorer card\n      if (pageType === 'explorer') {\n        const hasExplorerCard = initialData.content?.some((node: any) => node.type === 'explorerCard');\n        if (!hasExplorerCard) {\n          // No explorer card found, auto-populate the page\n          return getExplorerPageContent(productData?.productName, organizationId, productId);\n        }\n      }\n      return initialData;\n    }\n\n    // If initialData is invalid or empty, fall back to default content\n    if (pageType === \"intro\") return getFirstPageContent();\n    if (pageType === \"explorer\") {\n      return getExplorerPageContent(productData?.productName, organizationId, productId);\n    }\n    return getDefaultIntroContent();\n  };\n\n  const [lastSavedData, setLastSavedData] = useState(getInitialContent());\n  const [editorContent, setEditorContent] = useState(getInitialContent());\n\n  const handleEditorChange = (data: any) => {\n    setEditorContent(data);\n    if (onEditorChange) {\n      onEditorChange(data);\n    }\n  };\n\n  const handleSave = () => {\n    if (onSave) {\n      onSave(editorContent);\n    }\n    setLastSavedData(editorContent);\n    setIsEditMode(false);\n  };\n\n  const handleCancel = () => {\n    setEditorContent(lastSavedData);\n    setIsEditMode(false);\n  };\n\n\n  // Check URL hash on mount and navigate if categories are provided\n  useEffect(() => {\n    if (!categories || !onHashNavigation) return;\n\n    const hashCategoryName = getCategoryNameFromHash();\n    if (hashCategoryName) {\n      const category = findCategoryByName(categories, hashCategoryName);\n      if (category) {\n        // Only trigger navigation if the hash doesn't match current page\n        const currentPageMatchesHash =\n          pageTitle?.toLowerCase().replace(/\\s+/g, '-') === hashCategoryName ||\n          pageId === category.id;\n\n        if (!currentPageMatchesHash) {\n          onHashNavigation(category);\n        }\n      }\n    }\n  }, []); // Run only once on mount\n\n  // Reinitialize editor content when pageId changes\n  useEffect(() => {\n    const content = getInitialContent();\n    setEditorContent(content);\n    setLastSavedData(content);\n    setIsEditMode(initialEditMode);\n  }, [pageId, pageTitle, initialData, initialEditMode, pageType]);\n\n  // Update URL hash only when page changes (not when edit mode changes)\n  useEffect(() => {\n    if (pageTitle) {\n      updateHashWithCategory(pageTitle);\n    } else if (pageId) {\n      updateHashWithCategory(pageId);\n    }\n  }, [pageId, pageTitle]);\n\n  // Set document title when pageTitle changes\n  useEffect(() => {\n    if (pageTitle && typeof document !== 'undefined') {\n      document.title = pageTitle;\n    }\n  }, [pageTitle]);\n\n  // Keyboard shortcuts\n  useEffect(() => {\n    const handleKeyDown = (e: KeyboardEvent) => {\n      // Cmd/Ctrl + S to save\n      if ((e.metaKey || e.ctrlKey) && e.key === \"s\" && isEditMode) {\n        e.preventDefault();\n        handleSave();\n      }\n      // Escape to cancel\n      if (e.key === \"Escape\" && isEditMode) {\n        handleCancel();\n      }\n    };\n\n    window.addEventListener(\"keydown\", handleKeyDown);\n    return () => window.removeEventListener(\"keydown\", handleKeyDown);\n  }, [isEditMode, editorContent]);\n\n  // For assembly pages, render TnkrModelView instead of editor\n  if (pageType === \"assembly\" && organizationId && productId) {\n    return (\n      <UnifiedSideMenuProvider uploadFunction={onUploadMedia}>\n        <div\n          className={`relative h-full w-full flex flex-col ${className}`}\n          style={style}\n        >\n          <AssemblyView\n            organizationId={organizationId}\n            productId={productId}\n            // Pass centralized product data\n            productData={productData}\n            // Pass editor-related props\n            initialData={editorContent}\n            onEditorChange={handleEditorChange}\n            onSave={onSave}\n            showResetCamera={showResetCamera}\n            editMode={isEditMode}\n            onUploadMedia={onUploadMedia}\n          />\n        </div>\n      </UnifiedSideMenuProvider>\n    );\n  }\n\n  // Show mobile warning if on mobile device\n  if (isMobile) {\n    return (\n      <div className=\"flex items-center justify-center h-full w-full bg-[#0D0D0D] p-8\">\n        <div className=\"text-center max-w-md\">\n          <Monitor className=\"w-16 h-16 mx-auto mb-6 text-white/40\" />\n          <h2 className=\"text-2xl font-semibold text-white mb-3\">\n            Desktop View Required\n          </h2>\n          <p className=\"text-white/60 mb-2\">\n            This page is optimized for desktop viewing and is not yet available on mobile devices.\n          </p>\n          <p className=\"text-white/40 text-sm\">\n            Please access this content from a desktop or laptop computer for the best experience.\n          </p>\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <UnifiedSideMenuProvider uploadFunction={onUploadMedia}>\n      <div\n        className={`relative h-full ${pageType === 'explorer' ? 'overflow-hidden' : 'overflow-auto'} w-full flex flex-col mx-auto ${className}`}\n        style={style}\n      >\n        {/* Parent category */}\n\n\n        <div className={`flex-1 'prose prose-invert max-w-none px-8`}>\n            <header className=\"font-semibold text-sm uppercase tracking-wide mb-4 mt-4\" style={{marginLeft: '1rem', color: 'var(--tnkr-primary)'}}>\n              {pageParent}\n            </header>\n\n          {/* Editor */}\n          <>\n              <TnkrEditor\n                key={`${pageId}`}\n                content={editorContent}\n                onChange={handleEditorChange}\n                readOnly={!isEditMode}\n                pageTitle={pageTitle}\n                pageId={pageId}\n                onUploadMedia={onUploadMedia}\n                placeholder={isEditMode ? \"Start writing your content...\" : \"\"}\n                minHeight={pageType === 'explorer' ? 0 : 600}\n                organizationId={organizationId}\n                productId={productId}\n                pageType={pageType}\n                onNavigateToPage={goToPage}\n                // Pass centralized product data to the editor\n                productData={productData}\n                showDragHandle={true}\n                pages={pages}\n                {...editorProps}\n              />\n          </>\n        </div>\n      </div>\n    </UnifiedSideMenuProvider>\n  );\n};\n","\"use client\";\n\nimport type React from \"react\";\nimport { ChevronDown, ChevronRight } from \"lucide-react\";\nimport { Icon } from \"@iconify/react\";\nimport { cn } from \"@/lib/utils\";\nimport { PreviewCategory } from \"./TnkrPreview\";\n\ninterface PreviewCategoryItemProps {\n  category: PreviewCategory;\n  level: number;\n  selectedId?: string | null;\n  onSelect: (category: PreviewCategory) => void;\n  onToggleExpand?: (id: string) => void;\n}\n\nconst PreviewCategoryItem: React.FC<PreviewCategoryItemProps> = ({\n  category,\n  level,\n  selectedId,\n  onSelect,\n  onToggleExpand,\n}) => {\n  const hasChildren = category.children && category.children.length > 0;\n  const isExpanded = category.isExpanded;\n  const isClickable =\n    category.hasPage ||\n    (category.type === \"assembly\" &&\n      category.organizationId &&\n      category.productId);\n  const isSelected = selectedId === category.id && isClickable;\n\n  const handleClick = () => {\n    // Expand/collapse if has children\n    if (hasChildren && level > 0) {\n      onToggleExpand?.(category.id);\n    }\n    // Select if clickable (has page)\n    if (isClickable) {\n      onSelect(category);\n    }\n  };\n\n  return (\n    <div className=\"w-full\">\n      <div\n        className={cn(\n          \"flex items-center py-2 px-3 text-sm transition-colors group rounded-lg\",\n          isSelected\n            ? \"font-medium\"\n            : \"hover:text-white\",\n          level === 0 && \"font-bold text-white\",\n          level === 1 && \"font-normal text-white/70\",\n          level >= 2 && \"text-white/70\",\n          (isClickable || (hasChildren && level > 0)) ? \"cursor-pointer\" : \"\"\n        )}\n        style={{\n          marginLeft: `${level == 2 ? level * 6 : 8}px`,\n          backgroundColor: isSelected ? 'color-mix(in srgb, var(--tnkr-primary) 20%, transparent)' : undefined,\n          color: isSelected ? 'var(--tnkr-primary)' : undefined,\n          userSelect: 'none',\n        }}\n        onMouseEnter={(e) => {\n          if (!isSelected) {\n            e.currentTarget.style.backgroundColor = 'color-mix(in srgb, var(--tnkr-primary) 10%, transparent)';\n          }\n        }}\n        onMouseLeave={(e) => {\n          if (!isSelected) {\n            e.currentTarget.style.backgroundColor = '';\n          }\n        }}\n        onClick={handleClick}\n      >\n        {/* Icon display */}\n        {category.icon && (\n          <span className={cn(\"mr-2 flex-shrink-0\", level === 0 && \"font-bold\")}>\n            {category.icon.includes(':') ? (\n              <Icon icon={category.icon} className=\"w-4 h-4\" style={{ fontWeight: level === 0 ? 'bold' : undefined }} />\n            ) : (\n              <span className=\"text-base\">{category.icon}</span>\n            )}\n          </span>\n        )}\n\n        {/* Category name - clickable only if it has content */}\n        <span className=\"truncate flex-1\">\n          {category.name}\n        </span>\n        {/* Expand/Collapse button - only for non-root categories */}\n        {hasChildren && level > 0 && (\n          <button\n            onClick={(e) => {\n              e.stopPropagation();\n              onToggleExpand?.(category.id);\n            }}\n            className=\"ml-2 p-0.5 hover:bg-gray-700 rounded transition-colors flex-shrink-0\"\n            aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n          >\n            {isExpanded ? (\n              <ChevronDown size={14} className=\"text-gray-400\" />\n            ) : (\n              <ChevronRight size={14} className=\"text-gray-400\" />\n            )}\n          </button>\n        )}\n      </div>\n\n      {/* Render children - root categories (level 0) are always expanded */}\n      {((level === 0) || isExpanded) && hasChildren && (\n        <div className=\"mt-2\">\n          {category.children.map((child) => (\n            <PreviewCategoryItem\n              key={child.id}\n              category={child}\n              level={level + 1}\n              selectedId={selectedId}\n              onSelect={onSelect}\n              onToggleExpand={onToggleExpand}\n            />\n          ))}\n        </div>\n      )}\n    </div>\n  );\n};\n\ninterface PreviewSidebarProps {\n  categories: PreviewCategory[];\n  selectedCategoryId?: string | null;\n  onCategorySelect: (category: PreviewCategory) => void;\n  onToggleExpand?: (id: string) => void;\n  className?: string;\n}\n\nexport const PreviewSidebar: React.FC<PreviewSidebarProps> = ({\n  categories,\n  selectedCategoryId,\n  onCategorySelect,\n  onToggleExpand,\n  className = \"\",\n}) => {\n  return (\n    <div className={cn(\"w-64 flex flex-col px-2\", className)}>\n      <div className=\"flex-1 overflow-y-auto py-4\">\n        {categories.map((category, index) => (\n          <div key={category.id} className={index > 0 ? \"mt-5\" : \"\"}>\n            <PreviewCategoryItem\n              category={category}\n              level={0}\n              selectedId={selectedCategoryId}\n              onSelect={onCategorySelect}\n              onToggleExpand={onToggleExpand}\n            />\n          </div>\n        ))}\n\n        {categories.length === 0 && (\n          <div className=\"flex items-center justify-center p-8 text-gray-500\">\n            <p>No content available</p>\n          </div>\n        )}\n      </div>\n\n      {/* Powered by tnkrAI badge */}\n      <div className=\"px-4 py-3 border-t border-[#313133]\">\n        <a\n          href=\"https://tnkr.ai\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          className=\"flex items-center justify-center gap-2 text-xs text-gray-400 hover:text-gray-300 transition-colors\"\n        >\n          <span>Powered by</span>\n          <span className=\"font-semibold\" style={{ color: 'var(--tnkr-primary)' }}>TnkrAI</span>\n        </a>\n      </div>\n    </div>\n  );\n};\n\nexport default PreviewSidebar;\n","'use client';\n\nimport type React from 'react';\nimport { useState, useEffect, useMemo } from 'react';\nimport { Hash, ChevronRight } from 'lucide-react';\nimport { Icon } from '@iconify/react';\nimport { cn } from '@/lib/utils';\n\ninterface HeadingItem {\n  id: string;\n  text: string;\n  level: number;\n  element?: HTMLElement;\n}\n\ninterface PageContentNavigatorProps {\n  content?: any;\n  className?: string;\n}\n\nexport const PageContentNavigator: React.FC<PageContentNavigatorProps> = ({\n  content,\n  className = '',\n}) => {\n  const [headings, setHeadings] = useState<HeadingItem[]>([]);\n  const [activeHeading, setActiveHeading] = useState<string>('');\n\n  // Extract headings from the content\n  useEffect(() => {\n    if (!content) {\n      setHeadings([]);\n      return;\n    }\n\n    const extractedHeadings: HeadingItem[] = [];\n    let headingCounter = 0;\n\n    // Handle TipTap/ProseMirror JSON content structure\n    const processNode = (node: any) => {\n      if (node.type === 'heading' && node.content && node.content.length > 0) {\n        headingCounter++;\n        const textContent = node.content\n          .map((child: any) => child.text || '')\n          .join('')\n          .trim();\n\n        if (textContent) {\n          extractedHeadings.push({\n            id: `heading-${headingCounter}`,\n            text: textContent,\n            level: node.attrs?.level || 1,\n          });\n        }\n      }\n\n      if (node.content && Array.isArray(node.content)) {\n        node.content.forEach(processNode);\n      }\n    };\n\n    if (content && content.content && Array.isArray(content.content)) {\n      content.content.forEach(processNode);\n    }\n\n    setHeadings(extractedHeadings);\n  }, [content]);\n\n  // Set up scroll event listener to track active heading\n  useEffect(() => {\n    if (headings.length === 0) return;\n\n    // Find the scrolling container by ID\n    const scrollContainer = document.getElementById('page-content-scroll-container');\n    if (!scrollContainer) return;\n\n    const mainContent = document.querySelector('.prose');\n    if (!mainContent) return;\n\n    const updateActiveHeading = () => {\n      const actualHeadings = Array.from(mainContent.querySelectorAll('h1, h2, h3, h4, h5, h6'));\n      const containerRect = scrollContainer.getBoundingClientRect();\n\n      // Find the heading that is currently at or near the top of the scroll container\n      let currentHeading: Element | null = null;\n      let closestDistance = Infinity;\n\n      actualHeadings.forEach((headingElement) => {\n        const rect = headingElement.getBoundingClientRect();\n        // Calculate distance from heading to the top of the scroll container\n        const distanceFromTop = rect.top - containerRect.top;\n\n        // Consider headings that are within the visible area (with some offset)\n        if (distanceFromTop >= -50 && distanceFromTop <= 150) {\n          const distance = Math.abs(distanceFromTop);\n          if (distance < closestDistance) {\n            closestDistance = distance;\n            currentHeading = headingElement;\n          }\n        }\n      });\n\n      // If no heading is near the top, find the last heading above the viewport\n      if (!currentHeading) {\n        let lastAbove: Element | null = null;\n        actualHeadings.forEach((headingElement) => {\n          const rect = headingElement.getBoundingClientRect();\n          if (rect.top < containerRect.top) {\n            lastAbove = headingElement;\n          }\n        });\n        currentHeading = lastAbove;\n      }\n\n      if (currentHeading) {\n        const headingText = (currentHeading as Element).textContent?.trim();\n        const heading = headings.find((h) => h.text === headingText);\n        if (heading && heading.id !== activeHeading) {\n          setActiveHeading(heading.id);\n        }\n      }\n    };\n\n    // Initial update\n    updateActiveHeading();\n\n    // Listen to scroll events on the container\n    scrollContainer.addEventListener('scroll', updateActiveHeading);\n\n    return () => {\n      scrollContainer.removeEventListener('scroll', updateActiveHeading);\n    };\n  }, [headings, activeHeading]);\n\n  // Handle heading click\n  const handleHeadingClick = (headingId: string) => {\n    // Find the heading by matching text content\n    const heading = headings.find((h) => h.id === headingId);\n    if (!heading) return;\n\n    const mainContent = document.querySelector('.prose');\n    if (mainContent) {\n      const allHeadings = mainContent.querySelectorAll(\n        'h1, h2, h3, h4, h5, h6',\n      );\n      for (const element of allHeadings) {\n        if (element.textContent?.trim() === heading.text) {\n          element.scrollIntoView({\n            behavior: 'smooth',\n            block: 'start',\n          });\n          setActiveHeading(headingId);\n          break;\n        }\n      }\n    }\n  };\n\n  // Group headings by level for better visual hierarchy\n  const groupedHeadings = useMemo(() => {\n    return headings.map((heading, index) => ({\n      ...heading,\n      isActive: activeHeading === heading.id,\n      indent: Math.max(0, heading.level - 1) * 16,\n    }));\n  }, [headings, activeHeading]);\n\n  if (headings.length === 0) {\n    return null;\n  }\n\n  return (\n    <div\n      className={cn(\n        'w-64 bg-[#0D0D0D] flex flex-col sticky top-4 self-start h-fit max-h-[calc(100vh-2rem)] rounded-br-3xl',\n        className,\n      )}\n    >\n      {/* Header */}\n      <div className=\"mb-8 px-4 pt-4\">\n        <h3 className=\"text-white font-semibold text-sm flex items-center\">\n          <Icon\n            icon=\"icon-park-solid:paragraph-round\"\n            className=\"mr-2\"\n            width=\"16\"\n            height=\"16\"\n          />\n          Page Content\n        </h3>\n      </div>\n\n      {/* Headings list */}\n      <div\n        className=\"flex-1 overflow-y-auto\"\n        onWheel={(e) => {\n          const element = e.currentTarget;\n          const isScrollable = element.scrollHeight > element.clientHeight;\n\n          if (!isScrollable) {\n            // If not scrollable, don't prevent default - allow page scroll\n            return;\n          }\n\n          const isAtTop = element.scrollTop === 0;\n          const isAtBottom =\n            element.scrollTop + element.clientHeight >= element.scrollHeight;\n\n          // If scrolling up and at top, or scrolling down and at bottom, allow page scroll\n          if ((e.deltaY < 0 && isAtTop) || (e.deltaY > 0 && isAtBottom)) {\n            return;\n          }\n\n          // Otherwise, prevent page scroll and scroll this element\n          e.stopPropagation();\n        }}\n      >\n        <nav className=\"px-4\">\n          {groupedHeadings.map((heading) => (\n            <button\n              key={heading.id}\n              onClick={() => handleHeadingClick(heading.id)}\n              className={cn(\n                'w-full text-left py-2 text-sm transition-all duration-200 flex items-start',\n                heading.isActive\n                  ? 'font-medium'\n                  : 'text-white/60 hover:text-white',\n              )}\n              style={\n                heading.isActive ? { color: 'var(--tnkr-primary)' } : undefined\n              }\n            >\n              <span className=\"truncate leading-relaxed\">{heading.text}</span>\n            </button>\n          ))}\n        </nav>\n      </div>\n    </div>\n  );\n};\n\nexport default PageContentNavigator;\n","import { cn } from '@/lib/utils';\nimport React from 'react';\n\n// InputAdornmentProps for the adornment component\nexport interface InputAdornmentProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  children: React.ReactNode;\n  position: 'start' | 'end';\n  disablePointerEvents?: boolean;\n  disableTypography?: boolean;\n  className?: string;\n  hasBg?: boolean;\n}\n\n// InputProps for the input component\nexport interface InputProps\n  extends React.InputHTMLAttributes<HTMLInputElement> {\n  startAdornment?: React.ReactNode;\n  endAdornment?: React.ReactNode;\n  className?: string;\n}\n\n// InputAdornment component\nconst InputAdornment = React.forwardRef<HTMLDivElement, InputAdornmentProps>(\n  (\n    {\n      children,\n      position,\n      disablePointerEvents = false,\n      disableTypography = false,\n      hasBg = true,\n      className,\n      ...props\n    },\n    ref,\n  ) => {\n    const adornmentContent =\n      typeof children === 'string' && !disableTypography ? (\n        <span className='text-[#8E9196] text-sm'>{children}</span>\n      ) : (\n        children\n      );\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          'flex items-center h-10 w-full  px-3',\n          position === 'start' && hasBg\n            ? 'border-r  rounded-l-lg  border-[#313133]'\n            : '',\n          position === 'end' && hasBg\n            ? 'border-l border-[#313133] rounded-l-lg'\n            : '',\n          disablePointerEvents && 'pointer-events-none',\n          hasBg ? 'border-[#313133] bg-[#313133]' : '',\n          'text-[#8E9196]',\n          className,\n        )}\n        {...props}\n      >\n        {position === 'start' && (\n          <span className='notranslate' aria-hidden>\n            ​\n          </span>\n        )}\n        {adornmentContent}\n        {position === 'end' && (\n          <span className='notranslate' aria-hidden>\n            ​\n          </span>\n        )}\n      </div>\n    );\n  },\n);\nInputAdornment.displayName = 'InputAdornment';\n\n// Input component\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n  ({ className, type, startAdornment, endAdornment, ...props }, ref) => {\n    return (\n      <div className='relative flex items-center w-full'>\n        {startAdornment && (\n          <div className='absolute left-0 flex items-center h-full'>\n            {React.isValidElement(startAdornment) ? (\n              startAdornment\n            ) : (\n              <InputAdornment position='start'>{startAdornment}</InputAdornment>\n            )}\n          </div>\n        )}\n        <input\n          type={type}\n          className={cn(\n            'flex h-10 w-full rounded-md border border-[#313133] bg-background py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring/20 focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50',\n            startAdornment ? 'pl-10' : 'pl-3',\n            endAdornment ? 'pr-10' : 'pr-3',\n            className,\n          )}\n          ref={ref}\n          {...props}\n        />\n        {endAdornment && (\n          <div className='absolute right-0 flex items-center h-full'>\n            {React.isValidElement(endAdornment) ? (\n              endAdornment\n            ) : (\n              <InputAdornment position='end'>{endAdornment}</InputAdornment>\n            )}\n          </div>\n        )}\n      </div>\n    );\n  },\n);\nInput.displayName = 'Input';\n\nexport { Input, InputAdornment };\n","\"use client\"\n\nimport type React from \"react\"\nimport { Search, MessageSquare, Phone } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { Icon } from \"@iconify/react\"\nimport { Input } from \"@/app/components/ui/Input\"\n\ninterface PreviewNavbarProps {\n    organizationName?: string\n    organizationLogo?: string // Can be an iconify icon name or a URL\n    onContactClick?: () => void\n    onDiscussionsClick?: () => void\n    onSearchClick?: () => void\n    className?: string\n}\n\nexport const PreviewNavbar: React.FC<PreviewNavbarProps> = ({\n    organizationName = \"Organization\",\n    organizationLogo,\n    onContactClick,\n    onDiscussionsClick,\n    onSearchClick,\n    className = \"\"\n}) => {\n    return (\n        <div className={cn(\"w-full h-16 bg-[#0D0D0D] border-b border-[#313133] flex items-center px-6\", className)}>\n            {/* Left section - Logo and Organization Name */}\n            <div className=\"flex items-center space-x-4 flex-shrink-0\">\n                {organizationLogo ? (\n                    organizationLogo.includes('/') || organizationLogo.includes('.') ? (\n                        // If it's a URL\n                        <img \n                            src={organizationLogo} \n                            alt={organizationName} \n                            className=\"w-8 h-8 object-contain\"\n                        />\n                    ) : (\n                        // If it's an iconify icon name\n                        <Icon\n                            icon={organizationLogo}\n                            style={{ color: 'var(--tnkr-primary)' }}\n                            width=\"28\"\n                            height=\"28\"\n                        />\n                    )\n                ) : (\n                    // Default company logo\n                    <img \n                        src=\"https://central-docs-dev.s3.us-east-1.amazonaws.com/assets/public-assets/Group+75.svg\"\n                        alt={organizationName} \n                        className=\"w-8 h-8 object-contain\"\n                    />\n                )}\n                <span className=\"text-white font-semibold text-base\">\n                    {organizationName}\n                </span>\n            </div>\n\n            {/* Center section - Search */}\n            <div className=\"flex-1 flex justify-center px-8\">\n                <div className=\"w-full max-w-lg\">\n                    <Input\n                        type=\"text\"\n                        placeholder=\"Search...\"\n                        className=\"bg-[#161617]/70 border-[#313133] rounded-xl text-white placeholder-white/40 cursor-pointer\"\n                        style={{ '--focus-border-color': 'var(--tnkr-primary)' } as React.CSSProperties}\n                        onClick={onSearchClick}\n                        onFocus={onSearchClick}\n                        readOnly\n                        startAdornment={\n                            <div className=\"flex items-center justify-center h-full pl-2\">\n                                <Search\n                                    size={18}\n                                    className=\"text-white/40\"\n                                />\n                            </div>\n                        }\n                        endAdornment={\n                            <div className=\"flex items-center space-x-1 mr-3\">\n                                <div className=\"flex items-center px-1.5 py-0.5 bg-[#1a1a1a] border border-[#313133] rounded text-white/60\">\n                                    <Icon icon=\"ci:command\" width=\"12\" height=\"12\" />\n                                </div>\n                                <div className=\"flex items-center px-1.5 py-0.5 bg-[#1a1a1a] border border-[#313133] rounded text-white/60 text-xs font-medium\">\n                                    K\n                                </div>\n                            </div>\n                        }\n                    />\n                </div>\n            </div>\n\n            {/* Right section - Buttons */}\n            {/* <div className=\"flex items-center gap-8 flex-shrink-0 \">\n                <button\n                    onClick={onContactClick}\n                    className=\"text-white/70 cursor-pointer hover:text-white text-sm transition-all duration-200\"\n                >\n                    Contact Us\n                </button>\n                <button\n                    onClick={onDiscussionsClick}\n                    className=\"flex cursor-pointer items-center space-x-2 px-4 py-1.5 rounded-xl text-white transition-all duration-200\"\n                    style={{\n                        backgroundColor: 'var(--tnkr-primary)',\n                        '--hover-bg': 'color-mix(in srgb, var(--tnkr-primary) 90%, transparent)'\n                    } as React.CSSProperties}\n                >\n                    <span className=\"text-sm\">Discussions</span>\n                    <Icon icon=\"mynaui:chat\" width=\"16\" height=\"16\" />\n                </button>\n            </div> */}\n        </div>\n    )\n}\n\nexport default PreviewNavbar","import React, { useState, useRef, useEffect } from \"react\"\nimport { Icon } from \"@iconify/react\"\nimport { Button } from \"./ui/Button\"\nimport { Input } from \"./ui/Input\"\n\nexport interface WhatsNextPage {\n  id: string\n  name: string\n  category?: string\n}\n\nexport interface WhatsNextProps {\n  pages?: WhatsNextPage[]\n  goToPage?: (pageId: string) => void\n  title?: string\n  description?: string\n  isEditable?: boolean // If false, only shows selected pages without edit controls\n  initialSelectedPages?: WhatsNextPage[] // Pre-selected pages for preview mode\n  onSelectedPagesChange?: (selectedPages: WhatsNextPage[]) => void // Callback when pages change\n}\n\nexport const WhatsNext: React.FC<WhatsNextProps> = ({\n  pages = [],\n  goToPage,\n  title = \"What's Next?\",\n  description = \"Continue your journey with these related pages\",\n  isEditable = true,\n  initialSelectedPages = [],\n  onSelectedPagesChange\n}) => {\n  const [isModalOpen, setIsModalOpen] = useState(false)\n  const [searchQuery, setSearchQuery] = useState(\"\")\n  const [editingIndex, setEditingIndex] = useState<number | null>(null)\n  const [selectedPages, setSelectedPages] = useState<WhatsNextPage[]>(initialSelectedPages)\n  const searchInputRef = useRef<HTMLInputElement>(null)\n  const dropdownRef = useRef<HTMLDivElement>(null)\n\n  // Update selectedPages when initialSelectedPages changes (for loading saved data)\n  useEffect(() => {\n    setSelectedPages(initialSelectedPages);\n  }, [initialSelectedPages]);\n\n  // Filter pages based on search query\n  const filteredPages = pages.filter(\n    (page: WhatsNextPage) =>\n      page.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n      (page.category && page.category.toLowerCase().includes(searchQuery.toLowerCase()))\n  )\n\n  const handleOpenModal = (editIndex: number | null = null) => {\n    setIsModalOpen(true)\n    setEditingIndex(editIndex)\n    setSearchQuery(\"\")\n    // Focus the search input after modal opens\n    setTimeout(() => {\n      if (searchInputRef.current) {\n        searchInputRef.current.focus()\n      }\n    }, 100)\n  }\n\n  const handleCloseModal = () => {\n    setIsModalOpen(false)\n    setSearchQuery(\"\")\n    setEditingIndex(null)\n  }\n\n  const handlePageSelect = (page: WhatsNextPage) => {\n    let updatedPages: WhatsNextPage[]\n    if (editingIndex !== null) {\n      // Replace the page at editingIndex\n      updatedPages = [...selectedPages]\n      updatedPages[editingIndex] = page\n    } else {\n      // Add new page\n      updatedPages = [...selectedPages, page]\n    }\n    setSelectedPages(updatedPages)\n    if (onSelectedPagesChange) {\n      onSelectedPagesChange(updatedPages)\n    }\n    handleCloseModal()\n  }\n\n  const handleGoToPage = (page: WhatsNextPage) => {\n    if (goToPage) {\n      goToPage(page.id)\n    }\n  }\n\n  const handleEditSelection = (index: number) => {\n    handleOpenModal(index)\n  }\n\n  const handleDeleteSelection = (index: number) => {\n    const updatedPages = selectedPages.filter((_: any, i: number) => i !== index)\n    setSelectedPages(updatedPages)\n    if (onSelectedPagesChange) {\n      onSelectedPagesChange(updatedPages)\n    }\n  }\n\n  // Handle escape key and click outside to close dropdown\n  useEffect(() => {\n    const handleEscape = (e: KeyboardEvent) => {\n      if (e.key === 'Escape' && isModalOpen) {\n        handleCloseModal()\n      }\n    }\n\n    const handleClickOutside = (e: MouseEvent) => {\n      if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n        handleCloseModal()\n      }\n    }\n\n    if (isModalOpen) {\n      document.addEventListener('keydown', handleEscape)\n      document.addEventListener('mousedown', handleClickOutside)\n      return () => {\n        document.removeEventListener('keydown', handleEscape)\n        document.removeEventListener('mousedown', handleClickOutside)\n      }\n    }\n  }, [isModalOpen])\n\n  // Don't render anything if no pages selected and not editable\n  if (!isEditable && selectedPages.length === 0) {\n    return null;\n  }\n\n  return (\n    <div className={`whats-next-standalone ${isEditable ? 'edit-mode' : ''}`}>\n      <div className=\"whats-next-wrapper\">\n        <div className=\"whats-next-container\">\n          {/* Show header with title and description only in editable mode */}\n          {isEditable && (\n            <div className=\"whats-next-header\">\n              <h3 className=\"whats-next-title\">{title}</h3>\n              {description && <p className=\"whats-next-description\">{description}</p>}\n            </div>\n          )}\n\n          <div className=\"whats-next-content\">\n            {/* Show selected pages */}\n            {selectedPages.map((page: WhatsNextPage, index: number) => (\n              <div key={`${page.id}-${index}`} className=\"whats-next-selected\">\n                <span\n                  className=\"whats-next-selected-text\"\n                  onClick={() => handleGoToPage(page)}\n                  style={{ cursor: 'pointer' }}\n                >\n                  {page.name}\n                </span>\n\n                <div className=\"whats-next-actions\">\n                  <Button\n                    variant=\"ghost\"\n                    size=\"icon\"\n                    onClick={() => handleGoToPage(page)}\n                    title=\"Go to page\"\n                    className=\"whats-next-action-button whats-next-go-button\"\n                    startIcon={\n                      <Icon icon=\"material-symbols:chevron-right\" className=\"whats-next-action-icon\" />\n                    }\n                  />\n\n                  {/* Only show edit/delete buttons in editable mode */}\n                  {isEditable && (\n                    <>\n                      <Button\n                        variant=\"ghost\"\n                        size=\"icon\"\n                        onClick={() => handleEditSelection(index)}\n                        title=\"Edit selection\"\n                        className=\"whats-next-action-button whats-next-edit-button\"\n                        startIcon={\n                          <Icon icon=\"material-symbols:edit-outline\" className=\"whats-next-action-icon\" />\n                        }\n                      />\n\n                      <Button\n                        variant=\"ghost\"\n                        size=\"icon\"\n                        onClick={() => handleDeleteSelection(index)}\n                        title=\"Remove selection\"\n                        className=\"whats-next-action-button whats-next-delete-button\"\n                        startIcon={<Icon icon=\"material-symbols:close\" className=\"whats-next-action-icon\" />}\n                      />\n                    </>\n                  )}\n                </div>\n              </div>\n            ))}\n\n            {/* Show add button only when no pages selected and editable */}\n            {isEditable && selectedPages.length === 0 && (\n              <div style={{ position: \"relative\" }} ref={dropdownRef}>\n                <Button\n                  variant=\"outline\"\n                  onClick={() => handleOpenModal()}\n                  className=\"whats-next-add-button\"\n                  startIcon={\n                    <Icon icon=\"material-symbols-light:add-rounded\" className=\"whats-next-add-icon\" />\n                  }\n                >\n                  <span>Add Page</span>\n                </Button>\n\n                {isModalOpen && (\n                  <div className=\"whats-next-modal\" onClick={(e) => e.stopPropagation()}>\n                    <div className=\"whats-next-modal-body\">\n                      <div className=\"py-2 px-2\">\n                        <Input\n                          ref={searchInputRef}\n                          type=\"text\"\n                          placeholder=\"Search pages...\"\n                          value={searchQuery}\n                          className=\"h-7 text-xs pl-8\"\n                          onChange={(e: React.ChangeEvent<HTMLInputElement>) => setSearchQuery(e.target.value)}\n                          startAdornment={\n                            <Icon icon=\"iconamoon:search-thin\" className=\"text-gray-400 w-3.5 h-3.5 ml-2\" />\n                          }\n                        />\n                      </div>\n\n                      <div\n                        className=\"whats-next-pages-list\"\n                        onWheel={(e) => {\n                          const element = e.currentTarget;\n                          const isScrollable = element.scrollHeight > element.clientHeight;\n\n                          if (!isScrollable) {\n                            return;\n                          }\n\n                          const isAtTop = element.scrollTop === 0;\n                          const isAtBottom = element.scrollTop + element.clientHeight >= element.scrollHeight;\n\n                          if ((e.deltaY < 0 && isAtTop) || (e.deltaY > 0 && isAtBottom)) {\n                            return;\n                          }\n\n                          e.stopPropagation();\n                        }}\n                      >\n                        {filteredPages.length === 0 ? (\n                          <div className=\"whats-next-no-results\">\n                            {searchQuery ? \"No pages found\" : \"No pages available\"}\n                          </div>\n                        ) : (\n                          filteredPages.map((page: WhatsNextPage) => (\n                            <div\n                              key={page.id}\n                              className=\"whats-next-page-item\"\n                              onClick={() => handlePageSelect(page)}\n                            >\n                              <div className=\"whats-next-page-info\">\n                                <span className=\"whats-next-page-name\">{page.name}</span>\n                                {page.category && (\n                                  <span className=\"whats-next-page-category\">{page.category}</span>\n                                )}\n                              </div>\n                            </div>\n                          ))\n                        )}\n                      </div>\n                    </div>\n                  </div>\n                )}\n              </div>\n            )}\n\n            {/* Show add more button when there are already pages and editable */}\n            {isEditable && selectedPages.length > 0 && (\n              <div style={{ position: \"relative\" }} ref={dropdownRef}>\n                <Button\n                  variant=\"ghost\"\n                  onClick={() => handleOpenModal()}\n                  className=\"rounded-lg p-4 border border-[#313133]\"\n                  startIcon={\n                    <Icon icon=\"material-symbols-light:add-rounded\" className=\"whats-next-add-icon\" />\n                  }\n                >\n                  <span>Add More</span>\n                </Button>\n\n                {isModalOpen && (\n                  <div className=\"whats-next-modal\" onClick={(e) => e.stopPropagation()}>\n                    <div className=\"whats-next-modal-body\">\n                      <div className=\"py-2 px-2\">\n                        <Input\n                          ref={searchInputRef}\n                          type=\"text\"\n                          placeholder=\"Search pages...\"\n                          value={searchQuery}\n                          className=\"h-7 text-xs pl-8\"\n                          onChange={(e: React.ChangeEvent<HTMLInputElement>) => setSearchQuery(e.target.value)}\n                          startAdornment={\n                            <Icon icon=\"iconamoon:search-thin\" className=\"text-gray-400 w-3.5 h-3.5 ml-2\" />\n                          }\n                        />\n                      </div>\n\n                      <div\n                        className=\"whats-next-pages-list\"\n                        onWheel={(e) => {\n                          const element = e.currentTarget;\n                          const isScrollable = element.scrollHeight > element.clientHeight;\n\n                          if (!isScrollable) {\n                            return;\n                          }\n\n                          const isAtTop = element.scrollTop === 0;\n                          const isAtBottom = element.scrollTop + element.clientHeight >= element.scrollHeight;\n\n                          if ((e.deltaY < 0 && isAtTop) || (e.deltaY > 0 && isAtBottom)) {\n                            return;\n                          }\n\n                          e.stopPropagation();\n                        }}\n                      >\n                        {filteredPages.length === 0 ? (\n                          <div className=\"whats-next-no-results\">\n                            {searchQuery ? \"No pages found\" : \"No pages available\"}\n                          </div>\n                        ) : (\n                          filteredPages.map((page: WhatsNextPage) => (\n                            <div\n                              key={page.id}\n                              className=\"whats-next-page-item\"\n                              onClick={() => handlePageSelect(page)}\n                            >\n                              <div className=\"whats-next-page-info\">\n                                <span className=\"whats-next-page-name\">{page.name}</span>\n                                {page.category && (\n                                  <span className=\"whats-next-page-category\">{page.category}</span>\n                                )}\n                              </div>\n                            </div>\n                          ))\n                        )}\n                      </div>\n                    </div>\n                  </div>\n                )}\n              </div>\n            )}\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React from \"react\"\nimport { Icon } from \"@iconify/react\"\nimport { Button } from \"./ui/Button\"\n\nexport interface PreviousPageProps {\n  canGoBack: boolean\n  onGoBack: () => void\n  previousPageName?: string\n}\n\nexport const PreviousPage: React.FC<PreviousPageProps> = ({\n  canGoBack,\n  onGoBack,\n  previousPageName\n}) => {\n  // Don't render if can't go back\n  if (!canGoBack) {\n    return null\n  }\n\n  return (\n    <div className=\"previous-page-standalone\">\n      <div className=\"previous-page-wrapper\">\n        <div className=\"previous-page-container\">\n          <div className=\"previous-page-content\">\n            <div className=\"previous-page-selected\">\n              <div className=\"previous-page-actions\">\n                <Button\n                  variant=\"ghost\"\n                  size=\"icon\"\n                  onClick={onGoBack}\n                  title=\"Go to previous page\"\n                  className=\"previous-page-action-button previous-page-go-button\"\n                  startIcon={\n                    <Icon icon=\"material-symbols:chevron-left\" className=\"previous-page-action-icon\" />\n                  }\n                />\n              </div>\n\n              <span\n                className=\"previous-page-selected-text\"\n                onClick={onGoBack}\n                style={{ cursor: 'pointer' }}\n              >\n                {previousPageName || \"Previous Page\"}\n              </span>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n","import type { PreviewCategory } from \"./TnkrPreview\"\n\n/**\n * Represents a searchable content block within a page\n */\nexport interface SearchableBlock {\n  id: string\n  type: string // \"heading\", \"paragraph\", \"image\", \"card\", etc.\n  text: string // Searchable text content\n  headingLevel?: number\n  parentHeading?: string // Context from parent heading\n  position: number // Order in the page\n}\n\n/**\n * Represents a searchable page with all its content\n */\nexport interface SearchablePage {\n  pageId: string\n  pageName: string\n  categoryPath: string[] // Breadcrumb trail [\"Parent\", \"Child\", \"Page\"]\n  blocks: SearchableBlock[]\n}\n\n/**\n * Search result with relevance information\n */\nexport interface SearchResult {\n  page: SearchablePage\n  block: SearchableBlock\n  score: number\n  matches?: string[] // Matched text excerpts\n}\n\n/**\n * Recursively extracts text content from a TipTap JSON node\n */\nexport const extractTextFromNode = (node: any): string => {\n  let text = \"\"\n\n  // Direct text content\n  if (node.text) {\n    text += node.text + \" \"\n  }\n\n  // Extract text from node attributes (for special nodes)\n  if (node.attrs) {\n    // Image alt text and title\n    if (node.attrs.alt) text += node.attrs.alt + \" \"\n    if (node.attrs.title) text += node.attrs.title + \" \"\n\n    // Card content\n    if (node.attrs.cardTitle) text += node.attrs.cardTitle + \" \"\n    if (node.attrs.description) text += node.attrs.description + \" \"\n\n    // Link text (from marks)\n    if (node.attrs.href) text += node.attrs.href + \" \"\n\n    // Tab content - extract from tabs array\n    if (node.attrs.tabs && Array.isArray(node.attrs.tabs)) {\n      node.attrs.tabs.forEach((tab: any) => {\n        // Extract tab title\n        if (tab.title) text += tab.title + \" \"\n        // Recursively extract content from each tab\n        if (tab.content) {\n          text += extractTextFromNode(tab.content)\n        }\n      })\n    }\n  }\n\n  // Extract from marks (like links)\n  if (node.marks && Array.isArray(node.marks)) {\n    node.marks.forEach((mark: any) => {\n      if (mark.attrs && mark.attrs.href) {\n        text += mark.attrs.href + \" \"\n      }\n    })\n  }\n\n  // Recursively extract from child content\n  if (node.content && Array.isArray(node.content)) {\n    node.content.forEach((child: any) => {\n      text += extractTextFromNode(child)\n    })\n  }\n\n  return text\n}\n\n/**\n * Extracts searchable blocks from a TipTap JSON document\n */\nexport const extractBlocksFromContent = (pageContent: any): SearchableBlock[] => {\n  const blocks: SearchableBlock[] = []\n\n  if (!pageContent || !pageContent.content) {\n    return blocks\n  }\n\n  let position = 0\n  let currentHeading = \"\"\n\n  const processNode = (node: any) => {\n    const text = extractTextFromNode(node).trim()\n\n    if (!text) return\n\n    // Create searchable block\n    const block: SearchableBlock = {\n      id: `block-${position}`,\n      type: node.type || \"unknown\",\n      text,\n      position,\n    }\n\n    // Handle headings\n    if (node.type === \"heading\") {\n      block.headingLevel = node.attrs?.level || 1\n      currentHeading = text\n    } else {\n      // Non-heading blocks get parent heading context\n      if (currentHeading) {\n        block.parentHeading = currentHeading\n      }\n    }\n\n    blocks.push(block)\n    position++\n  }\n\n  // Process all top-level nodes\n  pageContent.content.forEach((node: any) => {\n    processNode(node)\n  })\n\n  return blocks\n}\n\n/**\n * Gets the breadcrumb path for a category\n */\nexport const getCategoryPath = (\n  categories: PreviewCategory[],\n  categoryId: string\n): string[] => {\n  const path: string[] = []\n\n  const findPath = (cats: PreviewCategory[], id: string): boolean => {\n    for (const cat of cats) {\n      if (cat.id === id) {\n        path.unshift(cat.name)\n        return true\n      }\n\n      if (cat.children && cat.children.length > 0) {\n        if (findPath(cat.children, id)) {\n          path.unshift(cat.name)\n          return true\n        }\n      }\n    }\n    return false\n  }\n\n  findPath(categories, categoryId)\n  return path\n}\n\n/**\n * Builds a complete search index from all categories\n */\nexport const buildSearchIndex = (\n  categories: PreviewCategory[]\n): SearchablePage[] => {\n  const index: SearchablePage[] = []\n\n  const processCategory = (cat: PreviewCategory) => {\n    // Only process categories with pages\n    if (cat.hasPage && cat.pageContent) {\n      const blocks = extractBlocksFromContent(cat.pageContent)\n\n      if (blocks.length > 0) {\n        index.push({\n          pageId: cat.id,\n          pageName: cat.name,\n          categoryPath: getCategoryPath(categories, cat.id),\n          blocks,\n        })\n      }\n    }\n\n    // Recursively process children\n    if (cat.children && cat.children.length > 0) {\n      cat.children.forEach(processCategory)\n    }\n  }\n\n  categories.forEach(processCategory)\n  return index\n}\n\n/**\n * Generates a unique heading ID from heading text and position\n */\nexport const generateHeadingId = (text: string, position: number): string => {\n  const slug = text\n    .toLowerCase()\n    .trim()\n    .replace(/\\s+/g, \"-\")\n    .replace(/[^\\w\\-]/g, \"\")\n\n  return `${slug}-${position}`\n}\n\n/**\n * Gets a text excerpt around a match\n */\nexport const getExcerpt = (\n  text: string,\n  searchTerm: string,\n  contextLength: number = 50\n): string => {\n  const lowerText = text.toLowerCase()\n  const lowerTerm = searchTerm.toLowerCase()\n  const index = lowerText.indexOf(lowerTerm)\n\n  if (index === -1) {\n    // No match found, return beginning of text\n    return text.slice(0, contextLength * 2) + (text.length > contextLength * 2 ? \"...\" : \"\")\n  }\n\n  const start = Math.max(0, index - contextLength)\n  const end = Math.min(text.length, index + searchTerm.length + contextLength)\n\n  let excerpt = text.slice(start, end)\n\n  if (start > 0) excerpt = \"...\" + excerpt\n  if (end < text.length) excerpt = excerpt + \"...\"\n\n  return excerpt\n}\n\n/**\n * Highlights search terms in text\n */\nexport const highlightMatches = (text: string, searchTerm: string): string => {\n  if (!searchTerm) return text\n\n  const regex = new RegExp(`(${searchTerm})`, \"gi\")\n  return text.replace(regex, \"<mark>$1</mark>\")\n}\n","\"use client\"\n\nimport React, { useState, useEffect, useRef, useCallback } from \"react\"\nimport { Icon } from \"@iconify/react\"\nimport { Search, ChevronRight } from \"lucide-react\"\nimport type { SearchResult } from \"./searchUtils\"\nimport { getExcerpt } from \"./searchUtils\"\n\ninterface SearchModalProps {\n  isOpen: boolean\n  onClose: () => void\n  onSearch: (query: string) => SearchResult[]\n  onResultClick: (result: SearchResult, query: string) => void\n  recentSearches?: string[]\n}\n\nexport const SearchModal: React.FC<SearchModalProps> = ({\n  isOpen,\n  onClose,\n  onSearch,\n  onResultClick,\n  recentSearches = [],\n}) => {\n  const [query, setQuery] = useState(\"\")\n  const [results, setResults] = useState<SearchResult[]>([])\n  const [selectedIndex, setSelectedIndex] = useState(0)\n  const inputRef = useRef<HTMLInputElement>(null)\n  const resultsContainerRef = useRef<HTMLDivElement>(null)\n\n  // Focus input when modal opens\n  useEffect(() => {\n    if (isOpen && inputRef.current) {\n      inputRef.current.focus()\n      setQuery(\"\")\n      setResults([])\n      setSelectedIndex(0)\n    }\n  }, [isOpen])\n\n  // Perform search when query changes\n  useEffect(() => {\n    if (query.trim()) {\n      const searchResults = onSearch(query)\n      setResults(searchResults)\n      setSelectedIndex(0)\n    } else {\n      setResults([])\n    }\n  }, [query, onSearch])\n\n  // Handle keyboard navigation\n  const handleKeyDown = useCallback(\n    (e: React.KeyboardEvent) => {\n      if (!results.length) return\n\n      switch (e.key) {\n        case \"ArrowDown\":\n          e.preventDefault()\n          setSelectedIndex((prev) => (prev < results.length - 1 ? prev + 1 : prev))\n          break\n        case \"ArrowUp\":\n          e.preventDefault()\n          setSelectedIndex((prev) => (prev > 0 ? prev - 1 : prev))\n          break\n        case \"Enter\":\n          e.preventDefault()\n          if (results[selectedIndex]) {\n            handleResultClick(results[selectedIndex])\n          }\n          break\n        case \"Escape\":\n          e.preventDefault()\n          onClose()\n          break\n      }\n    },\n    [results, selectedIndex, onClose]\n  )\n\n  // Scroll selected item into view\n  useEffect(() => {\n    if (resultsContainerRef.current) {\n      const selectedElement = resultsContainerRef.current.children[\n        selectedIndex\n      ] as HTMLElement\n\n      if (selectedElement) {\n        selectedElement.scrollIntoView({\n          behavior: \"smooth\",\n          block: \"nearest\",\n        })\n      }\n    }\n  }, [selectedIndex])\n\n  const handleResultClick = (result: SearchResult) => {\n    onResultClick(result, query)\n    onClose()\n  }\n\n  const handleOverlayClick = (e: React.MouseEvent) => {\n    if (e.target === e.currentTarget) {\n      onClose()\n    }\n  }\n\n  const getContentTypeBadge = (type: string) => {\n    const badges: Record<string, { icon: string; label: string; color: string }> = {\n      heading: { icon: \"mdi:format-header-1\", label: \"Heading\", color: \"#6366f1\" },\n      paragraph: { icon: \"mdi:text\", label: \"Text\", color: \"#8b5cf6\" },\n      image: { icon: \"mdi:image\", label: \"Image\", color: \"#ec4899\" },\n      card: { icon: \"mdi:card-text\", label: \"Card\", color: \"#f59e0b\" },\n      codeBlock: { icon: \"mdi:code-braces\", label: \"Code\", color: \"#10b981\" },\n      bulletList: { icon: \"mdi:format-list-bulleted\", label: \"List\", color: \"#06b6d4\" },\n      orderedList: { icon: \"mdi:format-list-numbered\", label: \"List\", color: \"#06b6d4\" },\n    }\n\n    const badge = badges[type] || { icon: \"mdi:file-document\", label: \"Content\", color: \"#6b7280\" }\n\n    return (\n      <div\n        className=\"flex items-center gap-1 px-2 py-0.5 rounded text-xs\"\n        style={{\n          backgroundColor: `${badge.color}20`,\n          color: badge.color,\n        }}\n      >\n        <Icon icon={badge.icon} width={14} height={14} />\n        <span>{badge.label}</span>\n      </div>\n    )\n  }\n\n  if (!isOpen) return null\n\n  return (\n    <div\n      className=\"fixed inset-0 z-50 flex items-start justify-center pt-[10vh] px-4\"\n      style={{\n        backgroundColor: \"rgba(0, 0, 0, 0.7)\",\n        backdropFilter: \"blur(4px)\",\n      }}\n      onClick={handleOverlayClick}\n    >\n      <div\n        className=\"w-full max-w-2xl rounded-xl shadow-2xl overflow-hidden\"\n        style={{\n          backgroundColor: \"#161617\",\n          border: \"1px solid #313133\",\n          maxHeight: \"70vh\",\n        }}\n        onClick={(e) => e.stopPropagation()}\n      >\n        {/* Search Input */}\n        <div className=\"p-4\">\n          <div className=\"relative flex items-center w-full\">\n            <input\n              ref={inputRef}\n              type=\"text\"\n              placeholder=\"Search...\"\n              value={query}\n              onChange={(e) => setQuery(e.target.value)}\n              onKeyDown={handleKeyDown}\n              className=\"flex h-10 w-full rounded-xl border border-[#313133] bg-[#161617]/70 pl-10 pr-3 py-2 text-sm text-white placeholder:text-white/40 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-0\"\n              style={{\n                caretColor: \"var(--tnkr-primary)\",\n                \"--focus-border-color\": \"var(--tnkr-primary)\"\n              } as React.CSSProperties}\n            />\n            <div className=\"absolute left-0 flex items-center justify-center h-full pl-3\">\n              <Search size={18} className=\"text-white/40\" />\n            </div>\n          </div>\n        </div>\n\n        {/* Results */}\n        <div\n          ref={resultsContainerRef}\n          className=\"overflow-y-auto\"\n          style={{\n            maxHeight: \"calc(70vh - 60px)\",\n          }}\n        >\n          {query && results.length === 0 && (\n            <div className=\"px-4 py-8 text-center\">\n              <Icon\n                icon=\"mdi:magnify-remove-outline\"\n                width={48}\n                height={48}\n                style={{ color: \"#8E9196\", margin: \"0 auto 12px\" }}\n              />\n              <p style={{ color: \"#8E9196\" }}>No results found for \"{query}\"</p>\n              <p className=\"text-xs mt-2\" style={{ color: \"#5A5B5D\" }}>\n                Try searching with different keywords\n              </p>\n            </div>\n          )}\n\n          {!query && recentSearches.length > 0 && (\n            <div className=\"px-4 py-4\">\n              <div\n                className=\"text-xs uppercase tracking-wide mb-3 font-medium\"\n                style={{ color: \"#8E9196\" }}\n              >\n                Recent Searches\n              </div>\n              {recentSearches.map((search, idx) => (\n                <button\n                  key={idx}\n                  onClick={() => setQuery(search)}\n                  className=\"w-full text-left px-3 py-2 rounded-lg transition-all flex items-center gap-3 text-sm group\"\n                  onMouseEnter={(e) => {\n                    e.currentTarget.style.backgroundColor = \"#1a1a1a\"\n                  }}\n                  onMouseLeave={(e) => {\n                    e.currentTarget.style.backgroundColor = \"transparent\"\n                  }}\n                >\n                  <Icon\n                    icon=\"mdi:history\"\n                    width={16}\n                    height={16}\n                    style={{ color: \"#8E9196\" }}\n                  />\n                  <span className=\"text-white/80 flex-1\">{search}</span>\n                  <ChevronRight\n                    size={14}\n                    className=\"text-white/40 opacity-0 group-hover:opacity-100 transition-opacity\"\n                  />\n                </button>\n              ))}\n            </div>\n          )}\n\n          {!query && recentSearches.length === 0 && (\n            <div className=\"px-4 py-8 text-center\">\n              <Icon\n                icon=\"mdi:magnify\"\n                width={48}\n                height={48}\n                style={{ color: \"#8E9196\", margin: \"0 auto 12px\" }}\n              />\n              <p style={{ color: \"#8E9196\" }}>Start typing to search</p>\n              <p className=\"text-xs mt-2\" style={{ color: \"#5A5B5D\" }}>\n                Search through all pages and content\n              </p>\n            </div>\n          )}\n\n          {results.map((result, index) => (\n            <div\n              key={`${result.page.pageId}-${result.block.id}`}\n              className=\"group px-4 py-3 cursor-pointer transition-all relative\"\n              style={{\n                backgroundColor:\n                  index === selectedIndex ? \"color-mix(in srgb, var(--tnkr-primary) 10%, transparent)\" : \"transparent\",\n                borderLeft:\n                  index === selectedIndex ? \"2px solid var(--tnkr-primary)\" : \"2px solid transparent\",\n              }}\n              onClick={() => handleResultClick(result)}\n              onMouseEnter={() => setSelectedIndex(index)}\n            >\n              {/* Breadcrumb */}\n              <div className=\"flex items-center gap-2 mb-1\">\n                <div className=\"flex items-center gap-1 text-xs\" style={{ color: \"#8E9196\" }}>\n                  {result.page.categoryPath.map((category, idx) => (\n                    <React.Fragment key={idx}>\n                      {idx > 0 && (\n                        <Icon icon=\"mdi:chevron-right\" width={12} height={12} />\n                      )}\n                      <span>{category}</span>\n                    </React.Fragment>\n                  ))}\n                </div>\n              </div>\n\n              {/* Page name and content type */}\n              <div className=\"flex items-center gap-2 mb-2\">\n                <h4 className=\"text-white text-sm font-medium\">\n                  {result.page.pageName}\n                </h4>\n                {getContentTypeBadge(result.block.type)}\n              </div>\n\n              {/* Content excerpt */}\n              <p className=\"text-sm\" style={{ color: \"#B4B5B7\" }}>\n                {result.block.parentHeading && (\n                  <span className=\"font-medium\" style={{ color: \"#8E9196\" }}>\n                    {result.block.parentHeading} →{\" \"}\n                  </span>\n                )}\n                {getExcerpt(result.block.text, query, 60)}\n              </p>\n\n              {/* Hover caret icon */}\n              <div className=\"absolute right-4 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 transition-opacity\">\n                <ChevronRight size={16} className=\"text-white/40\" />\n              </div>\n            </div>\n          ))}\n        </div>\n\n        {/* Footer hint */}\n        {results.length > 0 && (\n          <div\n            className=\"px-4 py-2 flex items-center justify-between text-xs\"\n            style={{\n              borderTop: \"1px solid #313133\",\n              backgroundColor: \"rgba(255, 255, 255, 0.02)\",\n              color: \"#8E9196\",\n            }}\n          >\n            <div className=\"flex items-center gap-3\">\n              <div className=\"flex items-center gap-1\">\n                <Icon icon=\"mdi:arrow-up\" width={12} height={12} />\n                <Icon icon=\"mdi:arrow-down\" width={12} height={12} />\n                <span>Navigate</span>\n              </div>\n              <div className=\"flex items-center gap-1\">\n                <Icon icon=\"mdi:keyboard-return\" width={12} height={12} />\n                <span>Select</span>\n              </div>\n            </div>\n            <div>{results.length} results</div>\n          </div>\n        )}\n      </div>\n    </div>\n  )\n}\n","/**\n * Fuse.js v7.1.0 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2025 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction isArray(value) {\n  return !Array.isArray\n    ? getTag(value) === '[object Array]'\n    : Array.isArray(value)\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/baseToString.js\nconst INFINITY = 1 / 0;\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value\n  }\n  let result = value + '';\n  return result == '0' && 1 / value == -INFINITY ? '-0' : result\n}\n\nfunction toString(value) {\n  return value == null ? '' : baseToString(value)\n}\n\nfunction isString(value) {\n  return typeof value === 'string'\n}\n\nfunction isNumber(value) {\n  return typeof value === 'number'\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/isBoolean.js\nfunction isBoolean(value) {\n  return (\n    value === true ||\n    value === false ||\n    (isObjectLike(value) && getTag(value) == '[object Boolean]')\n  )\n}\n\nfunction isObject(value) {\n  return typeof value === 'object'\n}\n\n// Checks if `value` is object-like.\nfunction isObjectLike(value) {\n  return isObject(value) && value !== null\n}\n\nfunction isDefined(value) {\n  return value !== undefined && value !== null\n}\n\nfunction isBlank(value) {\n  return !value.trim().length\n}\n\n// Gets the `toStringTag` of `value`.\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/getTag.js\nfunction getTag(value) {\n  return value == null\n    ? value === undefined\n      ? '[object Undefined]'\n      : '[object Null]'\n    : Object.prototype.toString.call(value)\n}\n\nconst EXTENDED_SEARCH_UNAVAILABLE = 'Extended search is not available';\n\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\n\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) =>\n  `Invalid value for key ${key}`;\n\nconst PATTERN_LENGTH_TOO_LARGE = (max) =>\n  `Pattern length exceeds max of ${max}.`;\n\nconst MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`;\n\nconst INVALID_KEY_WEIGHT_VALUE = (key) =>\n  `Property 'weight' in key '${key}' must be a positive integer`;\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nclass KeyStore {\n  constructor(keys) {\n    this._keys = [];\n    this._keyMap = {};\n\n    let totalWeight = 0;\n\n    keys.forEach((key) => {\n      let obj = createKey(key);\n\n      this._keys.push(obj);\n      this._keyMap[obj.id] = obj;\n\n      totalWeight += obj.weight;\n    });\n\n    // Normalize weights so that their sum is equal to 1\n    this._keys.forEach((key) => {\n      key.weight /= totalWeight;\n    });\n  }\n  get(keyId) {\n    return this._keyMap[keyId]\n  }\n  keys() {\n    return this._keys\n  }\n  toJSON() {\n    return JSON.stringify(this._keys)\n  }\n}\n\nfunction createKey(key) {\n  let path = null;\n  let id = null;\n  let src = null;\n  let weight = 1;\n  let getFn = null;\n\n  if (isString(key) || isArray(key)) {\n    src = key;\n    path = createKeyPath(key);\n    id = createKeyId(key);\n  } else {\n    if (!hasOwn.call(key, 'name')) {\n      throw new Error(MISSING_KEY_PROPERTY('name'))\n    }\n\n    const name = key.name;\n    src = name;\n\n    if (hasOwn.call(key, 'weight')) {\n      weight = key.weight;\n\n      if (weight <= 0) {\n        throw new Error(INVALID_KEY_WEIGHT_VALUE(name))\n      }\n    }\n\n    path = createKeyPath(name);\n    id = createKeyId(name);\n    getFn = key.getFn;\n  }\n\n  return { path, id, weight, src, getFn }\n}\n\nfunction createKeyPath(key) {\n  return isArray(key) ? key : key.split('.')\n}\n\nfunction createKeyId(key) {\n  return isArray(key) ? key.join('.') : key\n}\n\nfunction get(obj, path) {\n  let list = [];\n  let arr = false;\n\n  const deepGet = (obj, path, index) => {\n    if (!isDefined(obj)) {\n      return\n    }\n    if (!path[index]) {\n      // If there's no path left, we've arrived at the object we care about.\n      list.push(obj);\n    } else {\n      let key = path[index];\n\n      const value = obj[key];\n\n      if (!isDefined(value)) {\n        return\n      }\n\n      // If we're at the last value in the path, and if it's a string/number/bool,\n      // add it to the list\n      if (\n        index === path.length - 1 &&\n        (isString(value) || isNumber(value) || isBoolean(value))\n      ) {\n        list.push(toString(value));\n      } else if (isArray(value)) {\n        arr = true;\n        // Search each item in the array.\n        for (let i = 0, len = value.length; i < len; i += 1) {\n          deepGet(value[i], path, index + 1);\n        }\n      } else if (path.length) {\n        // An object. Recurse further.\n        deepGet(value, path, index + 1);\n      }\n    }\n  };\n\n  // Backwards compatibility (since path used to be a string)\n  deepGet(obj, isString(path) ? path.split('.') : path, 0);\n\n  return arr ? list : list[0]\n}\n\nconst MatchOptions = {\n  // Whether the matches should be included in the result set. When `true`, each record in the result\n  // set will include the indices of the matched characters.\n  // These can consequently be used for highlighting purposes.\n  includeMatches: false,\n  // When `true`, the matching function will continue to the end of a search pattern even if\n  // a perfect match has already been located in the string.\n  findAllMatches: false,\n  // Minimum number of characters that must be matched before a result is considered a match\n  minMatchCharLength: 1\n};\n\nconst BasicOptions = {\n  // When `true`, the algorithm continues searching to the end of the input even if a perfect\n  // match is found before the end of the same input.\n  isCaseSensitive: false,\n  // When `true`, the algorithm will ignore diacritics (accents) in comparisons\n  ignoreDiacritics: false,\n  // When true, the matching function will continue to the end of a search pattern even if\n  includeScore: false,\n  // List of properties that will be searched. This also supports nested properties.\n  keys: [],\n  // Whether to sort the result list, by score\n  shouldSort: true,\n  // Default sort function: sort by ascending score, ascending index\n  sortFn: (a, b) =>\n    a.score === b.score ? (a.idx < b.idx ? -1 : 1) : a.score < b.score ? -1 : 1\n};\n\nconst FuzzyOptions = {\n  // Approximately where in the text is the pattern expected to be found?\n  location: 0,\n  // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match\n  // (of both letters and location), a threshold of '1.0' would match anything.\n  threshold: 0.6,\n  // Determines how close the match must be to the fuzzy location (specified above).\n  // An exact letter match which is 'distance' characters away from the fuzzy location\n  // would score as a complete mismatch. A distance of '0' requires the match be at\n  // the exact location specified, a threshold of '1000' would require a perfect match\n  // to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n  distance: 100\n};\n\nconst AdvancedOptions = {\n  // When `true`, it enables the use of unix-like search commands\n  useExtendedSearch: false,\n  // The get function to use when fetching an object's properties.\n  // The default will search nested paths *ie foo.bar.baz*\n  getFn: get,\n  // When `true`, search will ignore `location` and `distance`, so it won't matter\n  // where in the string the pattern appears.\n  // More info: https://fusejs.io/concepts/scoring-theory.html#fuzziness-score\n  ignoreLocation: false,\n  // When `true`, the calculation for the relevance score (used for sorting) will\n  // ignore the field-length norm.\n  // More info: https://fusejs.io/concepts/scoring-theory.html#field-length-norm\n  ignoreFieldNorm: false,\n  // The weight to determine how much field length norm effects scoring.\n  fieldNormWeight: 1\n};\n\nvar Config = {\n  ...BasicOptions,\n  ...MatchOptions,\n  ...FuzzyOptions,\n  ...AdvancedOptions\n};\n\nconst SPACE = /[^ ]+/g;\n\n// Field-length norm: the shorter the field, the higher the weight.\n// Set to 3 decimals to reduce index size.\nfunction norm(weight = 1, mantissa = 3) {\n  const cache = new Map();\n  const m = Math.pow(10, mantissa);\n\n  return {\n    get(value) {\n      const numTokens = value.match(SPACE).length;\n\n      if (cache.has(numTokens)) {\n        return cache.get(numTokens)\n      }\n\n      // Default function is 1/sqrt(x), weight makes that variable\n      const norm = 1 / Math.pow(numTokens, 0.5 * weight);\n\n      // In place of `toFixed(mantissa)`, for faster computation\n      const n = parseFloat(Math.round(norm * m) / m);\n\n      cache.set(numTokens, n);\n\n      return n\n    },\n    clear() {\n      cache.clear();\n    }\n  }\n}\n\nclass FuseIndex {\n  constructor({\n    getFn = Config.getFn,\n    fieldNormWeight = Config.fieldNormWeight\n  } = {}) {\n    this.norm = norm(fieldNormWeight, 3);\n    this.getFn = getFn;\n    this.isCreated = false;\n\n    this.setIndexRecords();\n  }\n  setSources(docs = []) {\n    this.docs = docs;\n  }\n  setIndexRecords(records = []) {\n    this.records = records;\n  }\n  setKeys(keys = []) {\n    this.keys = keys;\n    this._keysMap = {};\n    keys.forEach((key, idx) => {\n      this._keysMap[key.id] = idx;\n    });\n  }\n  create() {\n    if (this.isCreated || !this.docs.length) {\n      return\n    }\n\n    this.isCreated = true;\n\n    // List is Array<String>\n    if (isString(this.docs[0])) {\n      this.docs.forEach((doc, docIndex) => {\n        this._addString(doc, docIndex);\n      });\n    } else {\n      // List is Array<Object>\n      this.docs.forEach((doc, docIndex) => {\n        this._addObject(doc, docIndex);\n      });\n    }\n\n    this.norm.clear();\n  }\n  // Adds a doc to the end of the index\n  add(doc) {\n    const idx = this.size();\n\n    if (isString(doc)) {\n      this._addString(doc, idx);\n    } else {\n      this._addObject(doc, idx);\n    }\n  }\n  // Removes the doc at the specified index of the index\n  removeAt(idx) {\n    this.records.splice(idx, 1);\n\n    // Change ref index of every subsquent doc\n    for (let i = idx, len = this.size(); i < len; i += 1) {\n      this.records[i].i -= 1;\n    }\n  }\n  getValueForItemAtKeyId(item, keyId) {\n    return item[this._keysMap[keyId]]\n  }\n  size() {\n    return this.records.length\n  }\n  _addString(doc, docIndex) {\n    if (!isDefined(doc) || isBlank(doc)) {\n      return\n    }\n\n    let record = {\n      v: doc,\n      i: docIndex,\n      n: this.norm.get(doc)\n    };\n\n    this.records.push(record);\n  }\n  _addObject(doc, docIndex) {\n    let record = { i: docIndex, $: {} };\n\n    // Iterate over every key (i.e, path), and fetch the value at that key\n    this.keys.forEach((key, keyIndex) => {\n      let value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n\n      if (!isDefined(value)) {\n        return\n      }\n\n      if (isArray(value)) {\n        let subRecords = [];\n        const stack = [{ nestedArrIndex: -1, value }];\n\n        while (stack.length) {\n          const { nestedArrIndex, value } = stack.pop();\n\n          if (!isDefined(value)) {\n            continue\n          }\n\n          if (isString(value) && !isBlank(value)) {\n            let subRecord = {\n              v: value,\n              i: nestedArrIndex,\n              n: this.norm.get(value)\n            };\n\n            subRecords.push(subRecord);\n          } else if (isArray(value)) {\n            value.forEach((item, k) => {\n              stack.push({\n                nestedArrIndex: k,\n                value: item\n              });\n            });\n          } else ;\n        }\n        record.$[keyIndex] = subRecords;\n      } else if (isString(value) && !isBlank(value)) {\n        let subRecord = {\n          v: value,\n          n: this.norm.get(value)\n        };\n\n        record.$[keyIndex] = subRecord;\n      }\n    });\n\n    this.records.push(record);\n  }\n  toJSON() {\n    return {\n      keys: this.keys,\n      records: this.records\n    }\n  }\n}\n\nfunction createIndex(\n  keys,\n  docs,\n  { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n  const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n  myIndex.setKeys(keys.map(createKey));\n  myIndex.setSources(docs);\n  myIndex.create();\n  return myIndex\n}\n\nfunction parseIndex(\n  data,\n  { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n  const { keys, records } = data;\n  const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n  myIndex.setKeys(keys);\n  myIndex.setIndexRecords(records);\n  return myIndex\n}\n\nfunction computeScore$1(\n  pattern,\n  {\n    errors = 0,\n    currentLocation = 0,\n    expectedLocation = 0,\n    distance = Config.distance,\n    ignoreLocation = Config.ignoreLocation\n  } = {}\n) {\n  const accuracy = errors / pattern.length;\n\n  if (ignoreLocation) {\n    return accuracy\n  }\n\n  const proximity = Math.abs(expectedLocation - currentLocation);\n\n  if (!distance) {\n    // Dodge divide by zero error.\n    return proximity ? 1.0 : accuracy\n  }\n\n  return accuracy + proximity / distance\n}\n\nfunction convertMaskToIndices(\n  matchmask = [],\n  minMatchCharLength = Config.minMatchCharLength\n) {\n  let indices = [];\n  let start = -1;\n  let end = -1;\n  let i = 0;\n\n  for (let len = matchmask.length; i < len; i += 1) {\n    let match = matchmask[i];\n    if (match && start === -1) {\n      start = i;\n    } else if (!match && start !== -1) {\n      end = i - 1;\n      if (end - start + 1 >= minMatchCharLength) {\n        indices.push([start, end]);\n      }\n      start = -1;\n    }\n  }\n\n  // (i-1 - start) + 1 => i - start\n  if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n    indices.push([start, i - 1]);\n  }\n\n  return indices\n}\n\n// Machine word size\nconst MAX_BITS = 32;\n\nfunction search(\n  text,\n  pattern,\n  patternAlphabet,\n  {\n    location = Config.location,\n    distance = Config.distance,\n    threshold = Config.threshold,\n    findAllMatches = Config.findAllMatches,\n    minMatchCharLength = Config.minMatchCharLength,\n    includeMatches = Config.includeMatches,\n    ignoreLocation = Config.ignoreLocation\n  } = {}\n) {\n  if (pattern.length > MAX_BITS) {\n    throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS))\n  }\n\n  const patternLen = pattern.length;\n  // Set starting location at beginning text and initialize the alphabet.\n  const textLen = text.length;\n  // Handle the case when location > text.length\n  const expectedLocation = Math.max(0, Math.min(location, textLen));\n  // Highest score beyond which we give up.\n  let currentThreshold = threshold;\n  // Is there a nearby exact match? (speedup)\n  let bestLocation = expectedLocation;\n\n  // Performance: only computer matches when the minMatchCharLength > 1\n  // OR if `includeMatches` is true.\n  const computeMatches = minMatchCharLength > 1 || includeMatches;\n  // A mask of the matches, used for building the indices\n  const matchMask = computeMatches ? Array(textLen) : [];\n\n  let index;\n\n  // Get all exact matches, here for speed up\n  while ((index = text.indexOf(pattern, bestLocation)) > -1) {\n    let score = computeScore$1(pattern, {\n      currentLocation: index,\n      expectedLocation,\n      distance,\n      ignoreLocation\n    });\n\n    currentThreshold = Math.min(score, currentThreshold);\n    bestLocation = index + patternLen;\n\n    if (computeMatches) {\n      let i = 0;\n      while (i < patternLen) {\n        matchMask[index + i] = 1;\n        i += 1;\n      }\n    }\n  }\n\n  // Reset the best location\n  bestLocation = -1;\n\n  let lastBitArr = [];\n  let finalScore = 1;\n  let binMax = patternLen + textLen;\n\n  const mask = 1 << (patternLen - 1);\n\n  for (let i = 0; i < patternLen; i += 1) {\n    // Scan for the best match; each iteration allows for one more error.\n    // Run a binary search to determine how far from the match location we can stray\n    // at this error level.\n    let binMin = 0;\n    let binMid = binMax;\n\n    while (binMin < binMid) {\n      const score = computeScore$1(pattern, {\n        errors: i,\n        currentLocation: expectedLocation + binMid,\n        expectedLocation,\n        distance,\n        ignoreLocation\n      });\n\n      if (score <= currentThreshold) {\n        binMin = binMid;\n      } else {\n        binMax = binMid;\n      }\n\n      binMid = Math.floor((binMax - binMin) / 2 + binMin);\n    }\n\n    // Use the result from this iteration as the maximum for the next.\n    binMax = binMid;\n\n    let start = Math.max(1, expectedLocation - binMid + 1);\n    let finish = findAllMatches\n      ? textLen\n      : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n    // Initialize the bit array\n    let bitArr = Array(finish + 2);\n\n    bitArr[finish + 1] = (1 << i) - 1;\n\n    for (let j = finish; j >= start; j -= 1) {\n      let currentLocation = j - 1;\n      let charMatch = patternAlphabet[text.charAt(currentLocation)];\n\n      if (computeMatches) {\n        // Speed up: quick bool to int conversion (i.e, `charMatch ? 1 : 0`)\n        matchMask[currentLocation] = +!!charMatch;\n      }\n\n      // First pass: exact match\n      bitArr[j] = ((bitArr[j + 1] << 1) | 1) & charMatch;\n\n      // Subsequent passes: fuzzy match\n      if (i) {\n        bitArr[j] |=\n          ((lastBitArr[j + 1] | lastBitArr[j]) << 1) | 1 | lastBitArr[j + 1];\n      }\n\n      if (bitArr[j] & mask) {\n        finalScore = computeScore$1(pattern, {\n          errors: i,\n          currentLocation,\n          expectedLocation,\n          distance,\n          ignoreLocation\n        });\n\n        // This match will almost certainly be better than any existing match.\n        // But check anyway.\n        if (finalScore <= currentThreshold) {\n          // Indeed it is\n          currentThreshold = finalScore;\n          bestLocation = currentLocation;\n\n          // Already passed `loc`, downhill from here on in.\n          if (bestLocation <= expectedLocation) {\n            break\n          }\n\n          // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n          start = Math.max(1, 2 * expectedLocation - bestLocation);\n        }\n      }\n    }\n\n    // No hope for a (better) match at greater error levels.\n    const score = computeScore$1(pattern, {\n      errors: i + 1,\n      currentLocation: expectedLocation,\n      expectedLocation,\n      distance,\n      ignoreLocation\n    });\n\n    if (score > currentThreshold) {\n      break\n    }\n\n    lastBitArr = bitArr;\n  }\n\n  const result = {\n    isMatch: bestLocation >= 0,\n    // Count exact matches (those with a score of 0) to be \"almost\" exact\n    score: Math.max(0.001, finalScore)\n  };\n\n  if (computeMatches) {\n    const indices = convertMaskToIndices(matchMask, minMatchCharLength);\n    if (!indices.length) {\n      result.isMatch = false;\n    } else if (includeMatches) {\n      result.indices = indices;\n    }\n  }\n\n  return result\n}\n\nfunction createPatternAlphabet(pattern) {\n  let mask = {};\n\n  for (let i = 0, len = pattern.length; i < len; i += 1) {\n    const char = pattern.charAt(i);\n    mask[char] = (mask[char] || 0) | (1 << (len - i - 1));\n  }\n\n  return mask\n}\n\nconst stripDiacritics = String.prototype.normalize\n    ? ((str) => str.normalize('NFD').replace(/[\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D3-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DF9\\u1DFB-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F]/g, ''))\n    : ((str) => str);\n\nclass BitapSearch {\n  constructor(\n    pattern,\n    {\n      location = Config.location,\n      threshold = Config.threshold,\n      distance = Config.distance,\n      includeMatches = Config.includeMatches,\n      findAllMatches = Config.findAllMatches,\n      minMatchCharLength = Config.minMatchCharLength,\n      isCaseSensitive = Config.isCaseSensitive,\n      ignoreDiacritics = Config.ignoreDiacritics,\n      ignoreLocation = Config.ignoreLocation\n    } = {}\n  ) {\n    this.options = {\n      location,\n      threshold,\n      distance,\n      includeMatches,\n      findAllMatches,\n      minMatchCharLength,\n      isCaseSensitive,\n      ignoreDiacritics,\n      ignoreLocation\n    };\n\n    pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n    pattern = ignoreDiacritics ? stripDiacritics(pattern) : pattern;\n    this.pattern = pattern;\n\n    this.chunks = [];\n\n    if (!this.pattern.length) {\n      return\n    }\n\n    const addChunk = (pattern, startIndex) => {\n      this.chunks.push({\n        pattern,\n        alphabet: createPatternAlphabet(pattern),\n        startIndex\n      });\n    };\n\n    const len = this.pattern.length;\n\n    if (len > MAX_BITS) {\n      let i = 0;\n      const remainder = len % MAX_BITS;\n      const end = len - remainder;\n\n      while (i < end) {\n        addChunk(this.pattern.substr(i, MAX_BITS), i);\n        i += MAX_BITS;\n      }\n\n      if (remainder) {\n        const startIndex = len - MAX_BITS;\n        addChunk(this.pattern.substr(startIndex), startIndex);\n      }\n    } else {\n      addChunk(this.pattern, 0);\n    }\n  }\n\n  searchIn(text) {\n    const { isCaseSensitive, ignoreDiacritics, includeMatches } = this.options;\n\n    text = isCaseSensitive ? text : text.toLowerCase();\n    text = ignoreDiacritics ? stripDiacritics(text) : text;\n\n    // Exact match\n    if (this.pattern === text) {\n      let result = {\n        isMatch: true,\n        score: 0\n      };\n\n      if (includeMatches) {\n        result.indices = [[0, text.length - 1]];\n      }\n\n      return result\n    }\n\n    // Otherwise, use Bitap algorithm\n    const {\n      location,\n      distance,\n      threshold,\n      findAllMatches,\n      minMatchCharLength,\n      ignoreLocation\n    } = this.options;\n\n    let allIndices = [];\n    let totalScore = 0;\n    let hasMatches = false;\n\n    this.chunks.forEach(({ pattern, alphabet, startIndex }) => {\n      const { isMatch, score, indices } = search(text, pattern, alphabet, {\n        location: location + startIndex,\n        distance,\n        threshold,\n        findAllMatches,\n        minMatchCharLength,\n        includeMatches,\n        ignoreLocation\n      });\n\n      if (isMatch) {\n        hasMatches = true;\n      }\n\n      totalScore += score;\n\n      if (isMatch && indices) {\n        allIndices = [...allIndices, ...indices];\n      }\n    });\n\n    let result = {\n      isMatch: hasMatches,\n      score: hasMatches ? totalScore / this.chunks.length : 1\n    };\n\n    if (hasMatches && includeMatches) {\n      result.indices = allIndices;\n    }\n\n    return result\n  }\n}\n\nclass BaseMatch {\n  constructor(pattern) {\n    this.pattern = pattern;\n  }\n  static isMultiMatch(pattern) {\n    return getMatch(pattern, this.multiRegex)\n  }\n  static isSingleMatch(pattern) {\n    return getMatch(pattern, this.singleRegex)\n  }\n  search(/*text*/) {}\n}\n\nfunction getMatch(pattern, exp) {\n  const matches = pattern.match(exp);\n  return matches ? matches[1] : null\n}\n\n// Token: 'file\n\nclass ExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'exact'\n  }\n  static get multiRegex() {\n    return /^=\"(.*)\"$/\n  }\n  static get singleRegex() {\n    return /^=(.*)$/\n  }\n  search(text) {\n    const isMatch = text === this.pattern;\n\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [0, this.pattern.length - 1]\n    }\n  }\n}\n\n// Token: !fire\n\nclass InverseExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'inverse-exact'\n  }\n  static get multiRegex() {\n    return /^!\"(.*)\"$/\n  }\n  static get singleRegex() {\n    return /^!(.*)$/\n  }\n  search(text) {\n    const index = text.indexOf(this.pattern);\n    const isMatch = index === -1;\n\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [0, text.length - 1]\n    }\n  }\n}\n\n// Token: ^file\n\nclass PrefixExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'prefix-exact'\n  }\n  static get multiRegex() {\n    return /^\\^\"(.*)\"$/\n  }\n  static get singleRegex() {\n    return /^\\^(.*)$/\n  }\n  search(text) {\n    const isMatch = text.startsWith(this.pattern);\n\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [0, this.pattern.length - 1]\n    }\n  }\n}\n\n// Token: !^fire\n\nclass InversePrefixExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'inverse-prefix-exact'\n  }\n  static get multiRegex() {\n    return /^!\\^\"(.*)\"$/\n  }\n  static get singleRegex() {\n    return /^!\\^(.*)$/\n  }\n  search(text) {\n    const isMatch = !text.startsWith(this.pattern);\n\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [0, text.length - 1]\n    }\n  }\n}\n\n// Token: .file$\n\nclass SuffixExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'suffix-exact'\n  }\n  static get multiRegex() {\n    return /^\"(.*)\"\\$$/\n  }\n  static get singleRegex() {\n    return /^(.*)\\$$/\n  }\n  search(text) {\n    const isMatch = text.endsWith(this.pattern);\n\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [text.length - this.pattern.length, text.length - 1]\n    }\n  }\n}\n\n// Token: !.file$\n\nclass InverseSuffixExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'inverse-suffix-exact'\n  }\n  static get multiRegex() {\n    return /^!\"(.*)\"\\$$/\n  }\n  static get singleRegex() {\n    return /^!(.*)\\$$/\n  }\n  search(text) {\n    const isMatch = !text.endsWith(this.pattern);\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [0, text.length - 1]\n    }\n  }\n}\n\nclass FuzzyMatch extends BaseMatch {\n  constructor(\n    pattern,\n    {\n      location = Config.location,\n      threshold = Config.threshold,\n      distance = Config.distance,\n      includeMatches = Config.includeMatches,\n      findAllMatches = Config.findAllMatches,\n      minMatchCharLength = Config.minMatchCharLength,\n      isCaseSensitive = Config.isCaseSensitive,\n      ignoreDiacritics = Config.ignoreDiacritics,\n      ignoreLocation = Config.ignoreLocation\n    } = {}\n  ) {\n    super(pattern);\n    this._bitapSearch = new BitapSearch(pattern, {\n      location,\n      threshold,\n      distance,\n      includeMatches,\n      findAllMatches,\n      minMatchCharLength,\n      isCaseSensitive,\n      ignoreDiacritics,\n      ignoreLocation\n    });\n  }\n  static get type() {\n    return 'fuzzy'\n  }\n  static get multiRegex() {\n    return /^\"(.*)\"$/\n  }\n  static get singleRegex() {\n    return /^(.*)$/\n  }\n  search(text) {\n    return this._bitapSearch.searchIn(text)\n  }\n}\n\n// Token: 'file\n\nclass IncludeMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'include'\n  }\n  static get multiRegex() {\n    return /^'\"(.*)\"$/\n  }\n  static get singleRegex() {\n    return /^'(.*)$/\n  }\n  search(text) {\n    let location = 0;\n    let index;\n\n    const indices = [];\n    const patternLen = this.pattern.length;\n\n    // Get all exact matches\n    while ((index = text.indexOf(this.pattern, location)) > -1) {\n      location = index + patternLen;\n      indices.push([index, location - 1]);\n    }\n\n    const isMatch = !!indices.length;\n\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices\n    }\n  }\n}\n\n// ❗Order is important. DO NOT CHANGE.\nconst searchers = [\n  ExactMatch,\n  IncludeMatch,\n  PrefixExactMatch,\n  InversePrefixExactMatch,\n  InverseSuffixExactMatch,\n  SuffixExactMatch,\n  InverseExactMatch,\n  FuzzyMatch\n];\n\nconst searchersLen = searchers.length;\n\n// Regex to split by spaces, but keep anything in quotes together\nconst SPACE_RE = / +(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/;\nconst OR_TOKEN = '|';\n\n// Return a 2D array representation of the query, for simpler parsing.\n// Example:\n// \"^core go$ | rb$ | py$ xy$\" => [[\"^core\", \"go$\"], [\"rb$\"], [\"py$\", \"xy$\"]]\nfunction parseQuery(pattern, options = {}) {\n  return pattern.split(OR_TOKEN).map((item) => {\n    let query = item\n      .trim()\n      .split(SPACE_RE)\n      .filter((item) => item && !!item.trim());\n\n    let results = [];\n    for (let i = 0, len = query.length; i < len; i += 1) {\n      const queryItem = query[i];\n\n      // 1. Handle multiple query match (i.e, once that are quoted, like `\"hello world\"`)\n      let found = false;\n      let idx = -1;\n      while (!found && ++idx < searchersLen) {\n        const searcher = searchers[idx];\n        let token = searcher.isMultiMatch(queryItem);\n        if (token) {\n          results.push(new searcher(token, options));\n          found = true;\n        }\n      }\n\n      if (found) {\n        continue\n      }\n\n      // 2. Handle single query matches (i.e, once that are *not* quoted)\n      idx = -1;\n      while (++idx < searchersLen) {\n        const searcher = searchers[idx];\n        let token = searcher.isSingleMatch(queryItem);\n        if (token) {\n          results.push(new searcher(token, options));\n          break\n        }\n      }\n    }\n\n    return results\n  })\n}\n\n// These extended matchers can return an array of matches, as opposed\n// to a singl match\nconst MultiMatchSet = new Set([FuzzyMatch.type, IncludeMatch.type]);\n\n/**\n * Command-like searching\n * ======================\n *\n * Given multiple search terms delimited by spaces.e.g. `^jscript .python$ ruby !java`,\n * search in a given text.\n *\n * Search syntax:\n *\n * | Token       | Match type                 | Description                            |\n * | ----------- | -------------------------- | -------------------------------------- |\n * | `jscript`   | fuzzy-match                | Items that fuzzy match `jscript`       |\n * | `=scheme`   | exact-match                | Items that are `scheme`                |\n * | `'python`   | include-match              | Items that include `python`            |\n * | `!ruby`     | inverse-exact-match        | Items that do not include `ruby`       |\n * | `^java`     | prefix-exact-match         | Items that start with `java`           |\n * | `!^earlang` | inverse-prefix-exact-match | Items that do not start with `earlang` |\n * | `.js$`      | suffix-exact-match         | Items that end with `.js`              |\n * | `!.go$`     | inverse-suffix-exact-match | Items that do not end with `.go`       |\n *\n * A single pipe character acts as an OR operator. For example, the following\n * query matches entries that start with `core` and end with either`go`, `rb`,\n * or`py`.\n *\n * ```\n * ^core go$ | rb$ | py$\n * ```\n */\nclass ExtendedSearch {\n  constructor(\n    pattern,\n    {\n      isCaseSensitive = Config.isCaseSensitive,\n      ignoreDiacritics = Config.ignoreDiacritics,\n      includeMatches = Config.includeMatches,\n      minMatchCharLength = Config.minMatchCharLength,\n      ignoreLocation = Config.ignoreLocation,\n      findAllMatches = Config.findAllMatches,\n      location = Config.location,\n      threshold = Config.threshold,\n      distance = Config.distance\n    } = {}\n  ) {\n    this.query = null;\n    this.options = {\n      isCaseSensitive,\n      ignoreDiacritics,\n      includeMatches,\n      minMatchCharLength,\n      findAllMatches,\n      ignoreLocation,\n      location,\n      threshold,\n      distance\n    };\n\n    pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n    pattern = ignoreDiacritics ? stripDiacritics(pattern) : pattern;\n    this.pattern = pattern;\n    this.query = parseQuery(this.pattern, this.options);\n  }\n\n  static condition(_, options) {\n    return options.useExtendedSearch\n  }\n\n  searchIn(text) {\n    const query = this.query;\n\n    if (!query) {\n      return {\n        isMatch: false,\n        score: 1\n      }\n    }\n\n    const { includeMatches, isCaseSensitive, ignoreDiacritics } = this.options;\n\n    text = isCaseSensitive ? text : text.toLowerCase();\n    text = ignoreDiacritics ? stripDiacritics(text) : text;\n\n    let numMatches = 0;\n    let allIndices = [];\n    let totalScore = 0;\n\n    // ORs\n    for (let i = 0, qLen = query.length; i < qLen; i += 1) {\n      const searchers = query[i];\n\n      // Reset indices\n      allIndices.length = 0;\n      numMatches = 0;\n\n      // ANDs\n      for (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n        const searcher = searchers[j];\n        const { isMatch, indices, score } = searcher.search(text);\n\n        if (isMatch) {\n          numMatches += 1;\n          totalScore += score;\n          if (includeMatches) {\n            const type = searcher.constructor.type;\n            if (MultiMatchSet.has(type)) {\n              allIndices = [...allIndices, ...indices];\n            } else {\n              allIndices.push(indices);\n            }\n          }\n        } else {\n          totalScore = 0;\n          numMatches = 0;\n          allIndices.length = 0;\n          break\n        }\n      }\n\n      // OR condition, so if TRUE, return\n      if (numMatches) {\n        let result = {\n          isMatch: true,\n          score: totalScore / numMatches\n        };\n\n        if (includeMatches) {\n          result.indices = allIndices;\n        }\n\n        return result\n      }\n    }\n\n    // Nothing was matched\n    return {\n      isMatch: false,\n      score: 1\n    }\n  }\n}\n\nconst registeredSearchers = [];\n\nfunction register(...args) {\n  registeredSearchers.push(...args);\n}\n\nfunction createSearcher(pattern, options) {\n  for (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n    let searcherClass = registeredSearchers[i];\n    if (searcherClass.condition(pattern, options)) {\n      return new searcherClass(pattern, options)\n    }\n  }\n\n  return new BitapSearch(pattern, options)\n}\n\nconst LogicalOperator = {\n  AND: '$and',\n  OR: '$or'\n};\n\nconst KeyType = {\n  PATH: '$path',\n  PATTERN: '$val'\n};\n\nconst isExpression = (query) =>\n  !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\n\nconst isPath = (query) => !!query[KeyType.PATH];\n\nconst isLeaf = (query) =>\n  !isArray(query) && isObject(query) && !isExpression(query);\n\nconst convertToExplicit = (query) => ({\n  [LogicalOperator.AND]: Object.keys(query).map((key) => ({\n    [key]: query[key]\n  }))\n});\n\n// When `auto` is `true`, the parse function will infer and initialize and add\n// the appropriate `Searcher` instance\nfunction parse(query, options, { auto = true } = {}) {\n  const next = (query) => {\n    let keys = Object.keys(query);\n\n    const isQueryPath = isPath(query);\n\n    if (!isQueryPath && keys.length > 1 && !isExpression(query)) {\n      return next(convertToExplicit(query))\n    }\n\n    if (isLeaf(query)) {\n      const key = isQueryPath ? query[KeyType.PATH] : keys[0];\n\n      const pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n\n      if (!isString(pattern)) {\n        throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key))\n      }\n\n      const obj = {\n        keyId: createKeyId(key),\n        pattern\n      };\n\n      if (auto) {\n        obj.searcher = createSearcher(pattern, options);\n      }\n\n      return obj\n    }\n\n    let node = {\n      children: [],\n      operator: keys[0]\n    };\n\n    keys.forEach((key) => {\n      const value = query[key];\n\n      if (isArray(value)) {\n        value.forEach((item) => {\n          node.children.push(next(item));\n        });\n      }\n    });\n\n    return node\n  };\n\n  if (!isExpression(query)) {\n    query = convertToExplicit(query);\n  }\n\n  return next(query)\n}\n\n// Practical scoring function\nfunction computeScore(\n  results,\n  { ignoreFieldNorm = Config.ignoreFieldNorm }\n) {\n  results.forEach((result) => {\n    let totalScore = 1;\n\n    result.matches.forEach(({ key, norm, score }) => {\n      const weight = key ? key.weight : null;\n\n      totalScore *= Math.pow(\n        score === 0 && weight ? Number.EPSILON : score,\n        (weight || 1) * (ignoreFieldNorm ? 1 : norm)\n      );\n    });\n\n    result.score = totalScore;\n  });\n}\n\nfunction transformMatches(result, data) {\n  const matches = result.matches;\n  data.matches = [];\n\n  if (!isDefined(matches)) {\n    return\n  }\n\n  matches.forEach((match) => {\n    if (!isDefined(match.indices) || !match.indices.length) {\n      return\n    }\n\n    const { indices, value } = match;\n\n    let obj = {\n      indices,\n      value\n    };\n\n    if (match.key) {\n      obj.key = match.key.src;\n    }\n\n    if (match.idx > -1) {\n      obj.refIndex = match.idx;\n    }\n\n    data.matches.push(obj);\n  });\n}\n\nfunction transformScore(result, data) {\n  data.score = result.score;\n}\n\nfunction format(\n  results,\n  docs,\n  {\n    includeMatches = Config.includeMatches,\n    includeScore = Config.includeScore\n  } = {}\n) {\n  const transformers = [];\n\n  if (includeMatches) transformers.push(transformMatches);\n  if (includeScore) transformers.push(transformScore);\n\n  return results.map((result) => {\n    const { idx } = result;\n\n    const data = {\n      item: docs[idx],\n      refIndex: idx\n    };\n\n    if (transformers.length) {\n      transformers.forEach((transformer) => {\n        transformer(result, data);\n      });\n    }\n\n    return data\n  })\n}\n\nclass Fuse {\n  constructor(docs, options = {}, index) {\n    this.options = { ...Config, ...options };\n\n    if (\n      this.options.useExtendedSearch &&\n      !true\n    ) {\n      throw new Error(EXTENDED_SEARCH_UNAVAILABLE)\n    }\n\n    this._keyStore = new KeyStore(this.options.keys);\n\n    this.setCollection(docs, index);\n  }\n\n  setCollection(docs, index) {\n    this._docs = docs;\n\n    if (index && !(index instanceof FuseIndex)) {\n      throw new Error(INCORRECT_INDEX_TYPE)\n    }\n\n    this._myIndex =\n      index ||\n      createIndex(this.options.keys, this._docs, {\n        getFn: this.options.getFn,\n        fieldNormWeight: this.options.fieldNormWeight\n      });\n  }\n\n  add(doc) {\n    if (!isDefined(doc)) {\n      return\n    }\n\n    this._docs.push(doc);\n    this._myIndex.add(doc);\n  }\n\n  remove(predicate = (/* doc, idx */) => false) {\n    const results = [];\n\n    for (let i = 0, len = this._docs.length; i < len; i += 1) {\n      const doc = this._docs[i];\n      if (predicate(doc, i)) {\n        this.removeAt(i);\n        i -= 1;\n        len -= 1;\n\n        results.push(doc);\n      }\n    }\n\n    return results\n  }\n\n  removeAt(idx) {\n    this._docs.splice(idx, 1);\n    this._myIndex.removeAt(idx);\n  }\n\n  getIndex() {\n    return this._myIndex\n  }\n\n  search(query, { limit = -1 } = {}) {\n    const {\n      includeMatches,\n      includeScore,\n      shouldSort,\n      sortFn,\n      ignoreFieldNorm\n    } = this.options;\n\n    let results = isString(query)\n      ? isString(this._docs[0])\n        ? this._searchStringList(query)\n        : this._searchObjectList(query)\n      : this._searchLogical(query);\n\n    computeScore(results, { ignoreFieldNorm });\n\n    if (shouldSort) {\n      results.sort(sortFn);\n    }\n\n    if (isNumber(limit) && limit > -1) {\n      results = results.slice(0, limit);\n    }\n\n    return format(results, this._docs, {\n      includeMatches,\n      includeScore\n    })\n  }\n\n  _searchStringList(query) {\n    const searcher = createSearcher(query, this.options);\n    const { records } = this._myIndex;\n    const results = [];\n\n    // Iterate over every string in the index\n    records.forEach(({ v: text, i: idx, n: norm }) => {\n      if (!isDefined(text)) {\n        return\n      }\n\n      const { isMatch, score, indices } = searcher.searchIn(text);\n\n      if (isMatch) {\n        results.push({\n          item: text,\n          idx,\n          matches: [{ score, value: text, norm, indices }]\n        });\n      }\n    });\n\n    return results\n  }\n\n  _searchLogical(query) {\n\n    const expression = parse(query, this.options);\n\n    const evaluate = (node, item, idx) => {\n      if (!node.children) {\n        const { keyId, searcher } = node;\n\n        const matches = this._findMatches({\n          key: this._keyStore.get(keyId),\n          value: this._myIndex.getValueForItemAtKeyId(item, keyId),\n          searcher\n        });\n\n        if (matches && matches.length) {\n          return [\n            {\n              idx,\n              item,\n              matches\n            }\n          ]\n        }\n\n        return []\n      }\n\n      const res = [];\n      for (let i = 0, len = node.children.length; i < len; i += 1) {\n        const child = node.children[i];\n        const result = evaluate(child, item, idx);\n        if (result.length) {\n          res.push(...result);\n        } else if (node.operator === LogicalOperator.AND) {\n          return []\n        }\n      }\n      return res\n    };\n\n    const records = this._myIndex.records;\n    const resultMap = {};\n    const results = [];\n\n    records.forEach(({ $: item, i: idx }) => {\n      if (isDefined(item)) {\n        let expResults = evaluate(expression, item, idx);\n\n        if (expResults.length) {\n          // Dedupe when adding\n          if (!resultMap[idx]) {\n            resultMap[idx] = { idx, item, matches: [] };\n            results.push(resultMap[idx]);\n          }\n          expResults.forEach(({ matches }) => {\n            resultMap[idx].matches.push(...matches);\n          });\n        }\n      }\n    });\n\n    return results\n  }\n\n  _searchObjectList(query) {\n    const searcher = createSearcher(query, this.options);\n    const { keys, records } = this._myIndex;\n    const results = [];\n\n    // List is Array<Object>\n    records.forEach(({ $: item, i: idx }) => {\n      if (!isDefined(item)) {\n        return\n      }\n\n      let matches = [];\n\n      // Iterate over every key (i.e, path), and fetch the value at that key\n      keys.forEach((key, keyIndex) => {\n        matches.push(\n          ...this._findMatches({\n            key,\n            value: item[keyIndex],\n            searcher\n          })\n        );\n      });\n\n      if (matches.length) {\n        results.push({\n          idx,\n          item,\n          matches\n        });\n      }\n    });\n\n    return results\n  }\n  _findMatches({ key, value, searcher }) {\n    if (!isDefined(value)) {\n      return []\n    }\n\n    let matches = [];\n\n    if (isArray(value)) {\n      value.forEach(({ v: text, i: idx, n: norm }) => {\n        if (!isDefined(text)) {\n          return\n        }\n\n        const { isMatch, score, indices } = searcher.searchIn(text);\n\n        if (isMatch) {\n          matches.push({\n            score,\n            key,\n            value: text,\n            idx,\n            norm,\n            indices\n          });\n        }\n      });\n    } else {\n      const { v: text, n: norm } = value;\n\n      const { isMatch, score, indices } = searcher.searchIn(text);\n\n      if (isMatch) {\n        matches.push({ score, key, value: text, norm, indices });\n      }\n    }\n\n    return matches\n  }\n}\n\nFuse.version = '7.1.0';\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\n\n{\n  Fuse.parseQuery = parse;\n}\n\n{\n  register(ExtendedSearch);\n}\n\nexport { Fuse as default };\n","import { useMemo, useState, useCallback } from \"react\"\nimport Fuse from \"fuse.js\"\nimport type { PreviewCategory } from \"./TnkrPreview\"\nimport { buildSearchIndex, type SearchablePage, type SearchResult } from \"./searchUtils\"\n\nexport interface UseSearchIndexOptions {\n  threshold?: number // How fuzzy the search should be (0 = exact, 1 = very fuzzy)\n  includeScore?: boolean\n  minMatchCharLength?: number\n}\n\nexport interface UseSearchIndexReturn {\n  search: (query: string) => SearchResult[]\n  isIndexing: boolean\n  indexSize: number\n}\n\n/**\n * Hook to build and search through page content using Fuse.js\n */\nexport const useSearchIndex = (\n  categories: PreviewCategory[],\n  options: UseSearchIndexOptions = {}\n): UseSearchIndexReturn => {\n  const [isIndexing, setIsIndexing] = useState(true)\n\n  // Build the search index from categories\n  const searchIndex = useMemo(() => {\n    setIsIndexing(true)\n    const index = buildSearchIndex(categories)\n    setIsIndexing(false)\n    return index\n  }, [categories])\n\n  // Create Fuse.js instance with optimized configuration\n  const fuse = useMemo(() => {\n    // Flatten the index for Fuse.js\n    const flattenedIndex = searchIndex.flatMap((page) =>\n      page.blocks.map((block) => ({\n        page,\n        block,\n      }))\n    )\n\n    return new Fuse(flattenedIndex, {\n      keys: [\n        {\n          name: \"page.pageName\",\n          weight: 3, // Page names are very important\n        },\n        {\n          name: \"block.text\",\n          weight: 2, // Block content is important\n        },\n        {\n          name: \"block.parentHeading\",\n          weight: 1.5, // Parent heading provides context\n        },\n        {\n          name: \"page.categoryPath\",\n          weight: 1, // Category path is less important\n        },\n      ],\n      threshold: options.threshold ?? 0.3, // More strict matching by default\n      includeScore: options.includeScore ?? true,\n      minMatchCharLength: options.minMatchCharLength ?? 2,\n      ignoreLocation: true, // Search anywhere in the text\n      useExtendedSearch: false,\n      findAllMatches: true,\n    })\n  }, [searchIndex, options.threshold, options.includeScore, options.minMatchCharLength])\n\n  // Search function\n  const search = useCallback(\n    (query: string): SearchResult[] => {\n      if (!query || query.trim().length === 0) {\n        return []\n      }\n\n      const results = fuse.search(query)\n\n      return results.map((result) => ({\n        page: result.item.page,\n        block: result.item.block,\n        score: result.score ?? 0,\n      }))\n    },\n    [fuse]\n  )\n\n  return {\n    search,\n    isIndexing,\n    indexSize: searchIndex.reduce((acc, page) => acc + page.blocks.length, 0),\n  }\n}\n","'use client';\n\nimport React, { useState, useCallback, useMemo, useEffect } from 'react';\nimport { TnkrEditor } from '@/core/TnkrEditor';\nimport { CustomPage } from '../src/components/CustomPage';\nimport { PreviewSidebar } from './PreviewSidebar';\nimport { PageContentNavigator } from './PageContentNavigator';\nimport { PreviewNavbar } from './PreviewNavbar';\nimport { ChevronRight, Monitor } from 'lucide-react';\nimport { WhatsNext, type WhatsNextPage } from '../src/components/WhatsNext';\nimport '../src/components/WhatsNext.scss';\nimport { PreviousPage } from '../src/components/PreviousPage';\nimport '../src/components/PreviousPage.scss';\nimport { isMobile } from 'react-device-detect';\nimport {\n  getRootCategoryName,\n  getCategoryNameFromHash,\n  updateHashWithCategory,\n  findCategoryByName,\n  findCategoryById as findCategoryByIdUtil,\n  encodeSectionHash,\n  updateHashWithSection,\n} from './utils';\nimport { ProductDataProvider } from '@/core/contexts/ProductDataContext';\nimport { ThemeProvider, initializeTheme } from '@/core/contexts/ThemeContext';\nimport type { ProductDataState } from '@/core/hooks/useProductData';\nimport { SearchModal } from './SearchModal';\nimport { useSearchIndex } from './useSearchIndex';\nimport type { SearchResult } from './searchUtils';\nimport { useHotkeys } from 'react-hotkeys-hook';\n\n// Recent searches configuration\nconst RECENT_SEARCHES_KEY = 'tnkr-recent-searches';\nconst MAX_RECENT_SEARCHES = 5;\n\n// Helper functions for recent searches persistence\nconst loadRecentSearches = (): string[] => {\n  if (typeof window === 'undefined') return [];\n  try {\n    const stored = localStorage.getItem(RECENT_SEARCHES_KEY);\n    return stored ? JSON.parse(stored) : [];\n  } catch (error) {\n    console.error('Failed to load recent searches:', error);\n    return [];\n  }\n};\n\nconst saveRecentSearches = (searches: string[]): void => {\n  if (typeof window === 'undefined') return;\n  try {\n    localStorage.setItem(RECENT_SEARCHES_KEY, JSON.stringify(searches));\n  } catch (error) {\n    console.error('Failed to save recent searches:', error);\n  }\n};\n\nexport interface PreviewCategory {\n  id: string;\n  name: string;\n  parentId: string | null;\n  children: PreviewCategory[];\n  order: number;\n  isExpanded: boolean;\n  hasPage: boolean;\n  pageContent?: any;\n  type?: string;\n  icon?: string; // Icon identifier (e.g., iconify icon name or emoji)\n  // Assembly-specific props\n  organizationId?: string;\n  productId?: string;\n}\n\nexport interface OrgCustomization {\n  title?: string;\n  dark_logo_url?: string | null;\n  light_logo_url?: string | null;\n  primary_color?: string;\n  tint_color?: string;\n}\n\nexport interface TnkrPreviewProps {\n  categories: PreviewCategory[];\n  className?: string;\n  title?: string;\n  onCategorySelect?: (category: PreviewCategory) => void;\n  organizationName?: string;\n  organizationLogo?: string;\n  orgCustomization?: OrgCustomization | null;\n  onContactClick?: () => void;\n  onDiscussionsClick?: () => void;\n  showResetCamera?: boolean;\n}\n\n// Component for rendering breadcrumbs\nconst Breadcrumbs: React.FC<{\n  category: PreviewCategory | null;\n  categories: PreviewCategory[];\n}> = ({ category, categories }) => {\n  if (!category) return null;\n\n  const getBreadcrumbs = (cat: PreviewCategory): string[] => {\n    const breadcrumbs: string[] = [];\n    let current: PreviewCategory | null = cat;\n\n    while (current) {\n      breadcrumbs.unshift(current.name);\n      if (current.parentId) {\n        current = findCategoryById(categories, current.parentId);\n      } else {\n        current = null;\n      }\n    }\n\n    return breadcrumbs;\n  };\n\n  const findCategoryById = (\n    cats: PreviewCategory[],\n    id: string,\n  ): PreviewCategory | null => {\n    for (const cat of cats) {\n      if (cat.id === id) return cat;\n      if (cat.children && cat.children.length > 0) {\n        const found = findCategoryById(cat.children, id);\n        if (found) return found;\n      }\n    }\n    return null;\n  };\n\n  const breadcrumbs = getBreadcrumbs(category);\n\n  return (\n    <div className=\"flex items-center space-x-2 text-sm mb-8\">\n      {breadcrumbs.map((crumb, index) => (\n        <React.Fragment key={index}>\n          {index > 0 && <ChevronRight size={14} className=\"text-white/30\" />}\n          <span\n            className={\n              index === breadcrumbs.length - 1 ? 'text-white' : 'text-white/50'\n            }\n          >\n            {crumb}\n          </span>\n        </React.Fragment>\n      ))}\n    </div>\n  );\n};\n\n// Page content renderer with proper structure\nconst PageContent: React.FC<{\n  category: PreviewCategory | null;\n  categories: PreviewCategory[];\n  onGoToPage: (pageId: string) => void;\n  showResetCamera?: boolean;\n  previousPage: PreviewCategory | null;\n  nextPage: PreviewCategory | null;\n}> = ({\n  category,\n  categories,\n  onGoToPage,\n  showResetCamera,\n  previousPage,\n  nextPage,\n}) => {\n  if (!category) {\n    return (\n      <div className=\"flex-1 flex items-center justify-center\">\n        <div className=\"text-center\">\n          <h2 className=\"text-2xl font-semibold text-white mb-4\">\n            Welcome to Documentation\n          </h2>\n          <p className=\"text-white/60 mb-8 w-full\">\n            Select a page from the sidebar to view its content. Navigate through\n            categories to explore different sections of the documentation.\n          </p>\n          <div className=\"flex justify-center space-x-4\">\n            <div className=\"px-4 py-2 bg-[#1a1a1a] rounded-lg border border-[#313133]\">\n              <span className=\"text-white/50 text-sm\">Total Pages</span>\n              <p className=\"text-white text-lg font-semibold\">\n                {countPages(categories)}\n              </p>\n            </div>\n            <div className=\"px-4 py-2 bg-[#1a1a1a] rounded-lg border border-[#313133]\">\n              <span className=\"text-white/50 text-sm\">Categories</span>\n              <p className=\"text-white text-lg font-semibold\">\n                {countCategories(categories)}\n              </p>\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  // Convert categories to WhatsNext pages format\n  const convertCategoriesToPages = (cats: PreviewCategory[]): any[] => {\n    const pages: any[] = [];\n    const traverse = (categories: PreviewCategory[], parent?: string) => {\n      categories.forEach((cat) => {\n        if (cat.hasPage) {\n          pages.push({\n            id: cat.id,\n            name: cat.name,\n            parent: parent,\n            category: cat.type,\n          });\n        }\n        if (cat.children && cat.children.length > 0) {\n          traverse(cat.children, cat.name);\n        }\n      });\n    };\n    traverse(cats);\n    return pages;\n  };\n\n  const findCategoryById = (\n    cats: PreviewCategory[],\n    id: string,\n  ): PreviewCategory | null => {\n    for (const cat of cats) {\n      if (cat.id === id) return cat;\n      if (cat.children && cat.children.length > 0) {\n        const found = findCategoryById(cat.children, id);\n        if (found) return found;\n      }\n    }\n    return null;\n  };\n\n  // Determine page type badge color\n\n  // Assembly pages get full-height custom rendering\n  if (\n    category.type === 'assembly' &&\n    category.organizationId &&\n    category.productId\n  ) {\n    return (\n      <div className=\"flex-1 p-2\">\n        <CustomPage\n          pageParent={getRootCategoryName(categories, category.id)}\n          pageTitle={category.name}\n          pageId={category.id}\n          pageType=\"assembly\"\n          organizationId={category.organizationId}\n          productId={category.productId}\n          showResetCamera={showResetCamera}\n          editMode={false} // Preview mode - readonly\n        />\n      </div>\n    );\n  }\n\n  // Regular pages get the standard preview layout\n  return (\n    <div className=\"flex-1 overflow-y-auto flex flex-col min-h-full\">\n      <div className=\"mx-auto px-3 py-4 w-full flex-1 flex flex-col min-h-full\">\n        {/* Regular content - use TnkrEditor */}\n        <div className=\"prose prose-invert max-w-none flex-1 flex flex-col\">\n          <header\n            className=\"font-semibold text-sm uppercase tracking-wide mb-2 mt-2\"\n            style={{ marginLeft: '1rem', color: 'var(--tnkr-primary)' }}\n          >\n            {getRootCategoryName(categories, category.id)}\n          </header>\n          <TnkrEditor\n            key={category.id}\n            content={category.pageContent}\n            readOnly={true}\n            className=\"border-none bg-transparent\"\n            placeholder=\"\"\n            minHeight={400}\n            onNavigateToPage={onGoToPage}\n          />\n        </div>\n\n        {/* Navigation buttons - Previous on left, Next (WhatsNext) on right - Always at bottom */}\n        <div className=\"flex items-start justify-between gap-4 mt-auto pt-8 pb-4\">\n          {/* Previous Page Component - Show if there's a previous page */}\n          {previousPage && (\n            <PreviousPage\n              canGoBack={true}\n              onGoBack={() => onGoToPage(previousPage.id)}\n              previousPageName={previousPage.name}\n            />\n          )}\n\n          {/* Next Page Component - Show if there's a next page */}\n          {nextPage && (\n            <WhatsNext\n              pages={convertCategoriesToPages(categories)}\n              goToPage={onGoToPage}\n              isEditable={false}\n              initialSelectedPages={[\n                {\n                  id: nextPage.id,\n                  name: nextPage.name,\n                  category: getRootCategoryName(categories, nextPage.id),\n                },\n              ]}\n            />\n          )}\n        </div>\n      </div>\n    </div>\n  );\n};\n\n// Helper functions\nconst countPages = (categories: PreviewCategory[]): number => {\n  let count = 0;\n  const traverse = (cats: PreviewCategory[]) => {\n    cats.forEach((cat) => {\n      if (cat.hasPage && cat.pageContent) count++;\n      if (cat.children) traverse(cat.children);\n    });\n  };\n  traverse(categories);\n  return count;\n};\n\nconst countCategories = (categories: PreviewCategory[]): number => {\n  let count = 0;\n  const traverse = (cats: PreviewCategory[]) => {\n    count += cats.length;\n    cats.forEach((cat) => {\n      if (cat.children) traverse(cat.children);\n    });\n  };\n  traverse(categories);\n  return count;\n};\n\nconst getPageDescription = (pageType: string): string => {\n  const descriptions: Record<string, string> = {\n    documentation: 'Comprehensive documentation and reference materials',\n    tutorial: 'Step-by-step guide to help you get started',\n    'api-reference': 'Detailed API specifications and endpoints',\n    guide: 'In-depth guide covering best practices and examples',\n    changelog: 'Recent updates and version history',\n    custom: 'Custom content page',\n    assembly: 'Interactive assembly instructions with 3D visualization',\n  };\n  return descriptions[pageType] || descriptions.custom;\n};\n\nexport const TnkrPreview: React.FC<TnkrPreviewProps> = ({\n  categories,\n  className = '',\n  title,\n  onCategorySelect,\n  organizationName,\n  organizationLogo,\n  orgCustomization,\n  onContactClick,\n  onDiscussionsClick,\n  showResetCamera,\n}) => {\n  // Use customization data with fallbacks\n  const displayTitle =\n    orgCustomization?.title || title || organizationName || 'Documentation';\n  const displayLogo = orgCustomization?.dark_logo_url || organizationLogo;\n  const [selectedCategoryId, setSelectedCategoryId] = useState<string | null>(\n    null,\n  );\n  const [navigationHistory, setNavigationHistory] = useState<string[]>([]);\n\n  // Initialize expanded categories - subcategories should be closed by default\n  const getInitiallyExpandedCategories = (): Set<string> => {\n    // Root categories don't need to be in the expanded set since they're always shown\n    // Subcategories should be closed by default, so we return empty set\n    return new Set<string>();\n  };\n\n  const [expandedCategories, setExpandedCategories] = useState<Set<string>>(\n    () => getInitiallyExpandedCategories(),\n  );\n\n  // Search modal state\n  const [isSearchModalOpen, setIsSearchModalOpen] = useState(false);\n\n  // Initialize search index\n  const { search: performSearch } = useSearchIndex(categories);\n\n  // Recent searches state\n  const [recentSearches, setRecentSearches] = useState<string[]>(() =>\n    loadRecentSearches(),\n  );\n\n  // Update expanded categories when categories prop changes\n  useEffect(() => {\n    setExpandedCategories(getInitiallyExpandedCategories());\n  }, [categories]);\n\n  // Initialize theme when orgCustomization is available\n  useEffect(() => {\n    if (orgCustomization?.primary_color) {\n      initializeTheme(\n        orgCustomization.primary_color,\n        orgCustomization.tint_color,\n      );\n    }\n  }, [orgCustomization]);\n\n  // Get all categories that have pages (flattened list)\n  const pagesWithContent = useMemo(() => {\n    const flattenCategories = (cats: PreviewCategory[]): PreviewCategory[] => {\n      return cats.reduce((acc: PreviewCategory[], cat) => {\n        // Include regular pages with content or assembly pages with required props\n        const hasRegularContent = cat.hasPage && cat.pageContent;\n        const hasAssemblyContent =\n          cat.type === 'assembly' && cat.organizationId && cat.productId;\n\n        if (hasRegularContent || hasAssemblyContent) {\n          acc.push(cat);\n        }\n        if (cat.children && cat.children.length > 0) {\n          acc.push(...flattenCategories(cat.children));\n        }\n        return acc;\n      }, []);\n    };\n    return flattenCategories(categories);\n  }, [categories]);\n\n  // Get current page index\n  const currentPageIndex = useMemo(() => {\n    if (!selectedCategoryId) return 0;\n    return pagesWithContent.findIndex((page) => page.id === selectedCategoryId);\n  }, [selectedCategoryId, pagesWithContent]);\n\n  // Get previous page in sequential order\n  const previousPage = useMemo(() => {\n    if (currentPageIndex > 0) {\n      return pagesWithContent[currentPageIndex - 1];\n    }\n    return null;\n  }, [currentPageIndex, pagesWithContent]);\n\n  // Get next page in sequential order\n  const nextPage = useMemo(() => {\n    if (\n      currentPageIndex >= 0 &&\n      currentPageIndex < pagesWithContent.length - 1\n    ) {\n      return pagesWithContent[currentPageIndex + 1];\n    }\n    return null;\n  }, [currentPageIndex, pagesWithContent]);\n\n  // Get selected category\n  const selectedCategory = useMemo(() => {\n    if (!selectedCategoryId) return null;\n\n    // Find category from all categories, not just pagesWithContent\n    const findCategoryById = (\n      cats: PreviewCategory[],\n      id: string,\n    ): PreviewCategory | null => {\n      for (const cat of cats) {\n        if (cat.id === id) return cat;\n        if (cat.children && cat.children.length > 0) {\n          const found = findCategoryById(cat.children, id);\n          if (found) return found;\n        }\n      }\n      return null;\n    };\n\n    return findCategoryById(categories, selectedCategoryId);\n  }, [selectedCategoryId, categories]);\n\n  // Update document title when selected category changes\n  useEffect(() => {\n    if (selectedCategory && typeof document !== 'undefined') {\n      document.title = selectedCategory.name;\n    }\n  }, [selectedCategory]);\n\n  // Initialize with URL hash or first page\n  useEffect(() => {\n    // Try to get category from URL hash\n    const hashCategoryName = getCategoryNameFromHash();\n\n    if (hashCategoryName) {\n      // Find category by name\n      const category = findCategoryByName(categories, hashCategoryName);\n      const canSelectAssembly =\n        category?.type === 'assembly' &&\n        category?.organizationId &&\n        category?.productId;\n      const canSelectRegular = category?.hasPage && category?.pageContent;\n\n      if (category && (canSelectAssembly || canSelectRegular)) {\n        // Only update if different from current selection\n        if (category.id !== selectedCategoryId) {\n          setSelectedCategoryId(category.id);\n        }\n        return;\n      }\n    }\n\n    // Fall back to first page if hash is invalid or not set\n    if (pagesWithContent.length > 0 && !selectedCategoryId) {\n      const firstPage = pagesWithContent[0];\n      setSelectedCategoryId(firstPage.id);\n      updateHashWithCategory(firstPage.name);\n    }\n  }, [pagesWithContent, categories, selectedCategoryId]);\n\n  // Listen for hash changes (browser back/forward)\n  useEffect(() => {\n    const handleHashChange = () => {\n      const hashCategoryName = getCategoryNameFromHash();\n      if (hashCategoryName) {\n        const category = findCategoryByName(categories, hashCategoryName);\n        const canSelectAssembly =\n          category?.type === 'assembly' &&\n          category?.organizationId &&\n          category?.productId;\n        const canSelectRegular = category?.hasPage && category?.pageContent;\n\n        if (category && (canSelectAssembly || canSelectRegular)) {\n          setSelectedCategoryId(category.id);\n          onCategorySelect?.(category);\n        }\n      }\n    };\n\n    window.addEventListener('hashchange', handleHashChange);\n    return () => window.removeEventListener('hashchange', handleHashChange);\n  }, [categories, onCategorySelect]);\n\n  // Handle category selection\n  const handleCategorySelect = useCallback(\n    (category: PreviewCategory) => {\n      // Allow assembly pages to be selected if they have organizationId and productId\n      const canSelectAssembly =\n        category.type === 'assembly' &&\n        category.organizationId &&\n        category.productId;\n      // Allow regular pages if they have content\n      const canSelectRegular = category.hasPage && category.pageContent;\n\n      if (canSelectAssembly || canSelectRegular) {\n        // Track navigation history (keep last 50 pages)\n        setNavigationHistory((prev) => {\n          if (selectedCategoryId && selectedCategoryId !== category.id) {\n            return [...prev, selectedCategoryId].slice(-50);\n          }\n          return prev;\n        });\n\n        setSelectedCategoryId(category.id);\n        updateHashWithCategory(category.name);\n        onCategorySelect?.(category);\n      }\n    },\n    [onCategorySelect, selectedCategoryId],\n  );\n\n  // Handle toggle expand\n  const handleToggleExpand = useCallback((categoryId: string) => {\n    setExpandedCategories((prev) => {\n      const newSet = new Set(prev);\n      if (newSet.has(categoryId)) {\n        newSet.delete(categoryId);\n      } else {\n        newSet.add(categoryId);\n      }\n      return newSet;\n    });\n  }, []);\n\n  // Update categories with expansion state\n  const categoriesWithExpansion = useMemo(() => {\n    const updateExpansion = (cats: PreviewCategory[]): PreviewCategory[] => {\n      return cats.map((cat) => ({\n        ...cat,\n        isExpanded: expandedCategories.has(cat.id),\n        children: updateExpansion(cat.children || []),\n      }));\n    };\n    return updateExpansion(categories);\n  }, [categories, expandedCategories]);\n\n  // Handle WhatsNext goToPage functionality\n  const handleGoToPage = useCallback(\n    (pageId: string) => {\n      // Find the page by ID in the flattened pages\n      const page = pagesWithContent.find((p) => p.id === pageId);\n      if (page) {\n        // Track navigation history (keep last 50 pages)\n        setNavigationHistory((prev) => {\n          if (selectedCategoryId && selectedCategoryId !== page.id) {\n            return [...prev, selectedCategoryId].slice(-50);\n          }\n          return prev;\n        });\n\n        setSelectedCategoryId(page.id);\n        updateHashWithCategory(page.name);\n        onCategorySelect?.(page);\n      }\n    },\n    [pagesWithContent, onCategorySelect, selectedCategoryId],\n  );\n\n  // Handle going back to previous page\n  const handleGoToPreviousPage = useCallback(() => {\n    if (navigationHistory.length > 0) {\n      const previousPageId = navigationHistory[navigationHistory.length - 1];\n      const previousPage = pagesWithContent.find(\n        (p) => p.id === previousPageId,\n      );\n\n      if (previousPage) {\n        // Remove the last item from history\n        setNavigationHistory((prev) => prev.slice(0, -1));\n\n        setSelectedCategoryId(previousPage.id);\n        updateHashWithCategory(previousPage.name);\n        onCategorySelect?.(previousPage);\n      }\n    }\n  }, [navigationHistory, pagesWithContent, onCategorySelect]);\n\n  // Handle page navigation\n  const handleNextPage = useCallback(() => {\n    if (currentPageIndex < pagesWithContent.length - 1) {\n      const nextPage = pagesWithContent[currentPageIndex + 1];\n      setSelectedCategoryId(nextPage.id);\n      updateHashWithCategory(nextPage.name);\n      onCategorySelect?.(nextPage);\n    }\n  }, [currentPageIndex, pagesWithContent, onCategorySelect]);\n\n  const handlePreviousPage = useCallback(() => {\n    if (currentPageIndex > 0) {\n      const prevPage = pagesWithContent[currentPageIndex - 1];\n      setSelectedCategoryId(prevPage.id);\n      updateHashWithCategory(prevPage.name);\n      onCategorySelect?.(prevPage);\n    }\n  }, [currentPageIndex, pagesWithContent, onCategorySelect]);\n\n  const handlePageSelect = useCallback(\n    (pageIndex: number) => {\n      if (pageIndex >= 0 && pageIndex < pagesWithContent.length) {\n        const page = pagesWithContent[pageIndex];\n        setSelectedCategoryId(page.id);\n        updateHashWithCategory(page.name);\n        onCategorySelect?.(page);\n      }\n    },\n    [pagesWithContent, onCategorySelect],\n  );\n\n  // Search handlers\n  const addRecentSearch = useCallback((query: string) => {\n    if (!query.trim()) return;\n\n    setRecentSearches((prev) => {\n      // Remove duplicates, add to front, limit to MAX\n      const updated = [\n        query,\n        ...prev.filter((q) => q.toLowerCase() !== query.toLowerCase()),\n      ].slice(0, MAX_RECENT_SEARCHES);\n\n      saveRecentSearches(updated);\n      return updated;\n    });\n  }, []);\n\n  const handleSearchClick = useCallback(() => {\n    setIsSearchModalOpen(true);\n  }, []);\n\n  const handleSearchClose = useCallback(() => {\n    setIsSearchModalOpen(false);\n  }, []);\n\n  const handleSearchResultClick = useCallback(\n    (result: SearchResult, query: string) => {\n      // Track the search query\n      addRecentSearch(query);\n\n      // For headings, use hash-based navigation for instant scroll\n      if (result.block.type === 'heading') {\n        const sectionSlug = encodeSectionHash(result.block.text);\n\n        // Update URL hash with both page and section\n        updateHashWithSection(result.page.pageName, result.block.text);\n\n        // Navigate to page\n        handleGoToPage(result.page.pageId);\n\n        // Try immediate scroll with heading ID\n        setTimeout(() => {\n          // Try to find heading by generated ID\n          const headingById = document.getElementById(sectionSlug);\n          if (headingById) {\n            headingById.scrollIntoView({\n              behavior: 'auto',\n              block: 'start',\n            });\n            return;\n          }\n\n          // Fallback: find by text content\n          const mainContent = document.querySelector('.prose');\n          if (!mainContent) return;\n\n          const allHeadings = mainContent.querySelectorAll('h1, h2, h3, h4, h5, h6');\n          for (const heading of allHeadings) {\n            if (heading.textContent?.trim() === result.block.text.trim()) {\n              heading.scrollIntoView({\n                behavior: 'auto',\n                block: 'start',\n              });\n              return;\n            }\n          }\n        }, 100); // Reduced from 300ms to 100ms\n      } else {\n        // For non-heading content, just navigate to page\n        updateHashWithCategory(result.page.pageName);\n        handleGoToPage(result.page.pageId);\n\n        // Try to scroll to content\n        setTimeout(() => {\n          const mainContent = document.querySelector('.prose');\n          if (!mainContent) return;\n\n          const allElements = mainContent.querySelectorAll('p, h1, h2, h3, h4, h5, h6, li, div');\n          for (const element of allElements) {\n            const text = element.textContent?.trim() || '';\n            if (text && result.block.text.includes(text.substring(0, 50))) {\n              element.scrollIntoView({\n                behavior: 'auto',\n                block: 'start',\n              });\n              return;\n            }\n          }\n        }, 100); // Reduced from 300ms to 100ms\n      }\n    },\n    [handleGoToPage, addRecentSearch],\n  );\n\n  // Keyboard shortcut for search (Cmd+K / Ctrl+K)\n  useHotkeys(\n    'mod+k',\n    (event) => {\n      event.preventDefault();\n      setIsSearchModalOpen(true);\n    },\n    {\n      enabled: true,\n      enableOnFormTags: true,\n    },\n    [],\n  );\n\n  // Show mobile warning if on mobile device\n  if (isMobile) {\n    return (\n      <div className=\"flex items-center justify-center h-screen w-screen bg-[#0D0D0D] p-8\">\n        <div className=\"text-center max-w-md\">\n          <Monitor className=\"w-16 h-16 mx-auto mb-6 text-white/40\" />\n          <h2 className=\"text-2xl font-semibold text-white mb-3\">\n            Desktop View Required\n          </h2>\n          <p className=\"text-white/60 mb-2\">\n            This documentation is optimized for desktop viewing and is not yet\n            available on mobile devices.\n          </p>\n          <p className=\"text-white/40 text-sm\">\n            Please access this content from a desktop or laptop computer for the\n            best experience.\n          </p>\n        </div>\n      </div>\n    );\n  }\n\n  // Create a minimal ProductDataState for theme context\n  const mockProductData: ProductDataState = {\n    productName: '',\n    htmlContent: null,\n    partsTree: [],\n    phases: [],\n    pointers: [],\n    orgCustomization: orgCustomization || null,\n    isLoading: false,\n    isLoadingContent: false,\n    error: null,\n    refetch: async () => {},\n  };\n\n  return (\n    <ProductDataProvider productData={mockProductData}>\n      <ThemeProvider>\n        <div\n          className={`flex flex-col h-screen w-full p-2 bg-[#0D0D0D] border-[#000000] overflow-hidden ${className}`}\n        >\n          {/* Top Navbar */}\n          <PreviewNavbar\n            organizationName={displayTitle}\n            organizationLogo={displayLogo}\n            onContactClick={onContactClick}\n            onDiscussionsClick={onDiscussionsClick}\n            onSearchClick={handleSearchClick}\n          />\n\n          {/* Main Content Area */}\n          <div className=\"flex flex-1 overflow-hidden rounded-b-3xl min-h-0\">\n            {/* Left Sidebar */}\n            <PreviewSidebar\n              categories={categoriesWithExpansion}\n              selectedCategoryId={selectedCategoryId}\n              onCategorySelect={handleCategorySelect}\n              onToggleExpand={handleToggleExpand}\n            />\n\n            {/* Main content area */}\n            <div className=\"flex-1 flex flex-col overflow-hidden\">\n              {/* Content Area with Right Sidebar - Only show if there's content */}\n              {selectedCategory &&\n              ((selectedCategory.hasPage && selectedCategory.pageContent) ||\n                (selectedCategory.type === 'assembly' &&\n                  selectedCategory.organizationId &&\n                  selectedCategory.productId)) ? (\n                <div className=\"flex-1 flex overflow-hidden h-full\">\n                  {/* Main Content - Scrollable area */}\n                  <div\n                    className={`flex-1 overflow-y-auto w-full ${selectedCategory?.type !== 'assembly' ? 'max-w-[calc(100%-256px)]' : ''}`}  \n                    id=\"page-content-scroll-container\"\n                  >\n                    <PageContent\n                      category={selectedCategory}\n                      categories={categories}\n                      onGoToPage={handleGoToPage}\n                      showResetCamera={showResetCamera}\n                      previousPage={previousPage}\n                      nextPage={nextPage}\n                    />\n                  </div>\n\n                  {/* Right Sidebar - Page Content Navigator - Only show for regular content pages */}\n                  {selectedCategory.hasPage &&\n                    selectedCategory.type !== 'assembly' &&\n                    selectedCategory.pageContent && (\n                      <PageContentNavigator\n                        content={selectedCategory.pageContent}\n                      />\n                    )}\n                </div>\n              ) : (\n                /* Show placeholder when no content */\n                <div className=\"flex-1 flex items-center justify-center\">\n                  <div className=\"text-center text-white/60\">\n                    <p className=\"text-lg mb-2\">No content available</p>\n                    <p className=\"text-sm\">\n                      Select a page with content to view it here\n                    </p>\n                  </div>\n                </div>\n              )}\n            </div>\n          </div>\n\n          {/* Search Modal */}\n          <SearchModal\n            isOpen={isSearchModalOpen}\n            onClose={handleSearchClose}\n            onSearch={performSearch}\n            onResultClick={handleSearchResultClick}\n            recentSearches={recentSearches}\n          />\n        </div>\n      </ThemeProvider>\n    </ProductDataProvider>\n  );\n};\n\nexport default TnkrPreview;\n","\"use client\"\n\nimport type React from \"react\"\nimport { useState } from \"react\"\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\n\ninterface PageNavigationProps {\n  title?: string\n  currentPage: number\n  totalPages: number\n  onPreviousPage: () => void\n  onNextPage: () => void\n  onPageSelect: (pageIndex: number) => void\n  canGoPrevious: boolean\n  canGoNext: boolean\n  className?: string\n}\n\nexport const PageNavigation: React.FC<PageNavigationProps> = ({\n                                                                title,\n                                                                currentPage,\n                                                                totalPages,\n                                                                onPreviousPage,\n                                                                onNextPage,\n                                                                onPageSelect,\n                                                                canGoPrevious,\n                                                                canGoNext,\n                                                                className = \"\",\n                                                              }) => {\n  const [showPageSelector, setShowPageSelector] = useState(false)\n\n  // Generate page numbers to show in navigation\n  const getVisiblePages = () => {\n    const pages: (number | \"ellipsis\")[] = []\n    const current = currentPage\n    const total = totalPages\n\n    if (total <= 7) {\n      // Show all pages if 7 or fewer\n      for (let i = 1; i <= total; i++) {\n        pages.push(i)\n      }\n    } else {\n      // Always show first page\n      pages.push(1)\n\n      if (current <= 4) {\n        // Near beginning\n        for (let i = 2; i <= 5; i++) {\n          pages.push(i)\n        }\n        pages.push(\"ellipsis\")\n        pages.push(total)\n      } else if (current >= total - 3) {\n        // Near end\n        pages.push(\"ellipsis\")\n        for (let i = total - 4; i <= total; i++) {\n          pages.push(i)\n        }\n      } else {\n        // Middle\n        pages.push(\"ellipsis\")\n        for (let i = current - 1; i <= current + 1; i++) {\n          pages.push(i)\n        }\n        pages.push(\"ellipsis\")\n        pages.push(total)\n      }\n    }\n\n    return pages\n  }\n\n  const visiblePages = getVisiblePages()\n\n  return (\n      <div className={cn(\"bg-[#0D0D0D] border-b border-[#313133] px-6 py-4\", className)}>\n        <div className=\"flex items-center justify-between\">\n          {/* Title */}\n          <div className=\"flex-1\">{title && <h1 className=\"text-white text-lg font-medium truncate\">{title}</h1>}</div>\n\n          {/* Page Navigation */}\n          <div className=\"flex items-center space-x-4\">\n            {/* Page counter */}\n            <div className=\"text-white/70 text-sm\">\n              Page {currentPage} of {totalPages}\n            </div>\n\n            {/* Navigation controls */}\n            <div className=\"flex items-center space-x-1\">\n              {/* Previous button */}\n              <button\n                  onClick={onPreviousPage}\n                  disabled={!canGoPrevious}\n                  className={cn(\n                      \"p-2 rounded-lg transition-colors\",\n                      canGoPrevious ? \"hover:bg-[#232326] text-white\" : \"text-white/30 cursor-not-allowed\",\n                  )}\n                  title=\"Previous page\"\n              >\n                <ChevronLeft size={16} />\n              </button>\n\n              {/* Page selector dropdown */}\n              <div className=\"relative\">\n                <button\n                    onClick={() => setShowPageSelector(!showPageSelector)}\n                    className=\"px-3 py-2 rounded-lg hover:bg-[#232326] text-white/70 hover:text-white transition-colors text-sm\"\n                    title=\"Select page\"\n                >\n                  <MoreHorizontal size={16} />\n                </button>\n\n                {showPageSelector && (\n                    <div className=\"absolute top-full right-0 mt-1 bg-[#1a1a1a] border border-[#313133] rounded-lg shadow-lg z-50 min-w-[200px]\">\n                      <div className=\"max-h-60 overflow-y-auto p-2\">\n                        <div className=\"grid grid-cols-5 gap-1\">\n                          {visiblePages.map((page, index) =>\n                              page === \"ellipsis\" ? (\n                                  <div key={`ellipsis-${index}`} className=\"flex items-center justify-center p-2\">\n                                    <span className=\"text-white/50\">...</span>\n                                  </div>\n                              ) : (\n                                  <button\n                                      key={page}\n                                      onClick={() => {\n                                        onPageSelect(page - 1)\n                                        setShowPageSelector(false)\n                                      }}\n                                      className={cn(\n                                          \"p-2 rounded text-sm transition-colors\",\n                                          page === currentPage\n                                              ? \"text-white\"\n                                              : \"hover:bg-[#232326] text-white/70 hover:text-white\",\n                                      )}\n                                      style={page === currentPage ? { backgroundColor: 'var(--tnkr-primary)' } : undefined}\n                                  >\n                                    {page}\n                                  </button>\n                              ),\n                          )}\n                        </div>\n                      </div>\n                    </div>\n                )}\n              </div>\n\n              {/* Next button */}\n              <button\n                  onClick={onNextPage}\n                  disabled={!canGoNext}\n                  className={cn(\n                      \"p-2 rounded-lg transition-colors\",\n                      canGoNext ? \"hover:bg-[#232326] text-white\" : \"text-white/30 cursor-not-allowed\",\n                  )}\n                  title=\"Next page\"\n              >\n                <ChevronRight size={16} />\n              </button>\n            </div>\n          </div>\n        </div>\n\n        {/* Progress bar */}\n        <div className=\"mt-3\">\n          <div className=\"w-full bg-[#313133] rounded-full h-1\">\n            <div\n                className=\"h-1 rounded-full transition-all duration-300\"\n                style={{\n                  width: `${(currentPage / totalPages) * 100}%`,\n                  backgroundColor: 'var(--tnkr-primary)'\n                }}\n            />\n          </div>\n        </div>\n\n        {/* Click outside handler */}\n        {showPageSelector && <div className=\"fixed inset-0 z-40\" onClick={() => setShowPageSelector(false)} />}\n      </div>\n  )\n}\n\nexport default PageNavigation\n"],"names":["PMNode","PluginKey","Node","mergeAttributes","ProseMirrorNode","Suggestion","__defProp","wrappingInputRule","Node2","mergeAttributes2","getNodeType","getNodeAtPosition","getNodeType2","isNodeActive","isAtStartOfNode","isNodeActive2","isAtEndOfNode","Extension","Node3","mergeAttributes3","wrappingInputRule2","inputRegex","Node4","mergeAttributes4","wrappingInputRule3","Node5","mergeAttributes5","Extension2","Mark","Extension3","Extension4","Extension5","Extension6","textInputRule","pasteRegex","markInputRule","markPasteRule","contains","escape","Options","i","buildTree","version","InputRule","InputRule2","katex2","byteToHex","unsafeStringify","getRandomValues","rnds8","rng","randomUUID","v4","native","removeDuplicates","uuidv4","findChildren","Plugin","combineTransactionSteps","getChangedRanges","findChildrenInRange","Fragment","Slice","escapeForRegEx","nodeInputRule","PasteRule","uuidv42","ignoreTags","doc","createKey","keys","ie","mac","windows","DOMParser","handleTripleClick","shift","NodeSelection2","PluginKey2","Fragment2","TextSelection2","Slice2","Slice3","Fragment3","arrow","Selection2","Fragment4","TextSelection3","TableView","PluginKey3","DecorationSet2","Decoration2","Plugin2","findParentNodeClosestToPos","TextSelection","CellSelection2","callOrReturn","getExtensionField","SPACE","noop","warn","init","getMarksBetween","getAttributes","Plugin3","isAllowedUri","find2","index_default","Link","HorizontalRule","state","canInsertNode","isNodeSelection","NodeSelection","TiptapHorizontalRule","Image","cn","isMac","Selection","Input","_jsx","ImageIcon","_jsxs","UploadIcon","useState","useEffect","useRef","NodeViewWrapper","React","_Fragment","NodeViewContent","TiptapImage","ReactNodeViewRenderer","useFloating","autoUpdate","offset","flip","useHover","useFocus","useDismiss","useRole","useInteractions","FloatingDelayGroup","useMergeRefs","FloatingPortal","Button","useFileUpload","CloudUploadIcon","ImageUploadNode","ImageUploadNodeComponent","VideoIcon","VideoUploadNode","VideoUploadNodeComponent","twMerge","Icon","createContext","useContext","TnkrEditor","lazy","useMemo","useCallback","Suspense","cva","Slot","Eye","EyeOff","TreeNode","ChevronDown","ChevronRight","ReactDOM","X","hexToRgba","createStore","identity","useStore","create","calloutConfig","Callout","Plus","createPortal","Search","CodeBlock","textblockTypeInputRule","highlight","Decoration","DecorationSet","ChevronUp","Check","Copy","createLowlight","common","CodeBlockLowlight","useEditorState","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","__spreadProps","__objRest","isValidElement","getWindow","isVisible","isSafari","isFirefox","useLayoutEffect","useReducer","hasInstalledGlobalEventListeners","jsx","ctx","NULL_ITEM","flipItems","findFirstEnabledItem","groupItemsByRows","TagName","forwardRef","isSafariBrowser","symbol","require$$0","shimModule","require$$1","memo","flushSync","omit","Core.createDisclosureStore","getEnabledItems","jsxs","Core.createDialogStore","min","max","floor","computePosition","min$1","limitShift","size","isNode","getComputedStyle","useMenuContext","createRef","Menu","MenuButton","MenuGroup","MenuItem","MenuItemRadio","pick","Core.createMenuStore","Combobox","ComboboxItem","ComboboxList","ComboboxPopover","Core.createComboboxStore","ComboboxProvider","Ariakit.ComboboxProvider","Ariakit.ComboboxList","Ariakit.ComboboxPopover","Ariakit.Combobox","Ariakit.ComboboxItem","Ariakit.useMenuContext","Ariakit.MenuProvider","Ariakit.Menu","Ariakit.MenuButton","Ariakit.MenuButtonArrow","Ariakit.MenuGroup","Ariakit.MenuItemCheck","Ariakit.MenuItemRadio","Ariakit.MenuItem","Ariakit.useMenuStore","Ariakit.useStoreState","StarterKit","CustomImage","Placeholder","math.floor","isArray","math.max","binary.BITS7","binary.BIT8","math.isNegativeZero","binary.BITS6","binary.BIT7","string.utf8TextEncoder","string.encodeUtf8","math.min","number.isInteger","math.abs","binary.BITS31","array.isArray","isBrowser","map.create","string.fromCamelCase","conditions.undefinedToNull","storage.varStorage","f.isOneOf","binary.BIT30","string.fromCharCode","env.isBrowser","encoding.encode","encoding.writeAny","buf.toBase64","sha256.digest","buf.encodeAny","Y","set.create","random.oneOf","eventloop.timeout","environment.isBrowser","dom.doc","PModel.Slice","PModel.Fragment","error.unexpectedCase","error.methodUnimplemented","isObject","object.keys","object.every","map.setIfUndefined","Item","ContentType","Text","XmlElement","UndoManager","useTransitionStyles","useCurrentEditor","SuggestionPluginKey","isTextSelection","posToDOMRect","shouldShowButton","useHotkeys","canToggle","PopoverPrimitive","NodeRange","SelectionRange","Loader2","DropdownMenu","DropdownMenuPrimitive","DropdownMenuTrigger","DropdownMenuItem","DropdownMenuContent","TransformActionGroup","throttle","useEditor","EditorContext","EditorContent","Square","LucideCircle","Hexagon","Octagon","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","RotateCw","RotateCcw","RefreshCw","RefreshCcw","CircleOff","_objectWithoutProperties","_objectWithoutPropertiesLoose","_extends","ownKeys","_defineProperty","undefined","this","_interopDefault","isMobile","Monitor","ChevronLeft","MoreHorizontal"],"mappings":"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AAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AACvC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,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AAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AACzC,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC1C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC1C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAA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AAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI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iBAAiB,EAAE;AACrB,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAC5B,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;AACpC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;AAC1C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,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K,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AACjC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AACjC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;AACpC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AACjC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC;AAC5C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC;AAChD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAClD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACvC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAC7B,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CA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,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAA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,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAClD,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC;AAC1C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC;AAC1C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC;AACzC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC;AAC1C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC;AAC1C,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC;AAC1C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC;AAC1C,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CA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AAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC;AACzC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC;AACzC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC;AAC1C,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,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AK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CA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AAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC7C,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACvC,IAAI,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;A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IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,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,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;AAChD,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACjD,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;AAC3C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACxD,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACxD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAClD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC;AAC3C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAClD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;AAClD,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACxD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAClD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAClD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAClD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACxD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAClD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAC7B,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAClD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAClD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAClD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAClD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OA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AE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAC/B,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAClC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAClC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAClC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAClC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAClC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAClC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAClC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAClC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAClC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAClC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAClC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC;AAC1C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,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E,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AACnC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AACnC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AACnC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AACnC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AACnC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AACnC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AACnC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AACnC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EA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AI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC;AACzC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC3C,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OA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AO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAClC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC;AAClD,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AACrC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAC7B,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAClC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC5C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAClC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAClC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAClC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAClC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAClC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAClC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAClC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAClC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AACtC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,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C;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACzC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1C,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1C,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1C,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACzC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACzC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACzC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACzC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACnC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1C,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1C,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1C,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC9B,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1C,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpC,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,OAA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,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE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AG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,QAAQ;AACpB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,GAAG,EAAE,GAAG;AACV,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,Q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AAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,KAAK;AACZ,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,GAAG,EAAE,IAAI;AACX,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,35,38,40,76,77,78,105,106,107,108,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,348,349,350,429,430,431,435,436,448]}