@ioca/react 1.5.11 → 1.5.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/lib/cjs/components/editor/editor.js +5 -0
  2. package/lib/cjs/components/editor/editor.js.map +1 -1
  3. package/lib/cjs/components/editor/memtion.js +45 -3
  4. package/lib/cjs/components/editor/memtion.js.map +1 -1
  5. package/lib/cjs/components/list/list.js +3 -3
  6. package/lib/cjs/components/list/list.js.map +1 -1
  7. package/lib/cjs/components/picker/colors/index.js +7 -3
  8. package/lib/cjs/components/picker/colors/index.js.map +1 -1
  9. package/lib/cjs/components/tabs/navs.js.map +1 -1
  10. package/lib/cjs/components/tabs/tabs.js.map +1 -1
  11. package/lib/cjs/components/upload/upload.js +8 -2
  12. package/lib/cjs/components/upload/upload.js.map +1 -1
  13. package/lib/css/index.css +1 -1
  14. package/lib/css/index.css.map +1 -1
  15. package/lib/es/components/editor/editor.js +5 -0
  16. package/lib/es/components/editor/editor.js.map +1 -1
  17. package/lib/es/components/editor/memtion.js +46 -4
  18. package/lib/es/components/editor/memtion.js.map +1 -1
  19. package/lib/es/components/list/list.js +4 -4
  20. package/lib/es/components/list/list.js.map +1 -1
  21. package/lib/es/components/picker/colors/index.js +6 -3
  22. package/lib/es/components/picker/colors/index.js.map +1 -1
  23. package/lib/es/components/tabs/navs.js.map +1 -1
  24. package/lib/es/components/tabs/tabs.js.map +1 -1
  25. package/lib/es/components/upload/upload.js +8 -2
  26. package/lib/es/components/upload/upload.js.map +1 -1
  27. package/lib/index.js +64 -11
  28. package/lib/types/components/list/item.d.ts +6 -0
  29. package/lib/types/components/list/list.d.ts +3 -5
  30. package/lib/types/components/picker/type.d.ts +4 -1
  31. package/lib/types/components/tabs/type.d.ts +1 -1
  32. package/lib/types/components/upload/type.d.ts +1 -0
  33. package/package.json +97 -97
@@ -124,6 +124,8 @@ const Editor = (props) => {
124
124
  };
125
125
  const handleKeyDown = (e) => {
126
126
  onKeyDown?.(e);
127
+ if (e.defaultPrevented)
128
+ return;
127
129
  if (!isPlaintextMode &&
128
130
  (e.key === "Backspace" || e.key === "Delete") &&
129
131
  memtion.removeAdjacentMemtionTag(editorRef.current, e.key)) {
@@ -164,6 +166,9 @@ const Editor = (props) => {
164
166
  controls.exec(isRichMode ? "insertHTML" : "insertText", false, isRichMode ? "	" : "\t");
165
167
  break;
166
168
  case "Enter":
169
+ if (e.shiftKey) {
170
+ break;
171
+ }
167
172
  if (!onEnter)
168
173
  break;
169
174
  e.preventDefault();
@@ -1 +1 @@
1
- {"version":3,"file":"editor.js","sources":["../../../../packages/components/editor/editor.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport xss from \"xss\";\nimport { IButton } from \"../button/type\";\nimport getControls, { exec, xssOptions } from \"./controls\";\nimport \"./index.css\";\nimport Memtion, {\n filterMemtionOptions,\n getMemtionReplaceRange,\n getMemtionText,\n getSelectionRect,\n insertMemtionOption,\n removeAdjacentMemtionTag,\n sanitizePlaintextOnMemtionHtml,\n} from \"./memtion\";\nimport { IEditor, IEditorMemtionOption } from \"./type\";\n\nconst controlBtnProps: IButton = {\n square: true,\n flat: true,\n size: \"small\",\n};\n\nconst Editor = (props: IEditor) => {\n const {\n ref,\n value = \"\",\n width,\n height = \"10em\",\n placeholder,\n autosize,\n border = true,\n mode = \"rich\",\n hideControl,\n addtionControls,\n memtion,\n className,\n style,\n onChange,\n onEnter,\n onFocus,\n onBlur,\n onPaste,\n onMouseUp,\n onKeyUp,\n onKeyDown,\n ...restProps\n } = props;\n const editorRef = useRef<HTMLDivElement>(null);\n const selectionRef = useRef<Range | null>(null);\n const memtionTriggerRangeRef = useRef<Range | null>(null);\n const pendingMemtionRef = useRef(false);\n const isPlaintextMode = mode === \"plaintext\";\n const isRichMode = mode === \"rich\";\n const isPlaintextOnMemtionMode = mode === \"plaintextOnMemtion\";\n const [memtionVisible, setMemtionVisible] = useState(false);\n const [memtionRect, setMemtionRect] = useState<DOMRect | null>(null);\n const [memtionKeyword, setMemtionKeyword] = useState(\"\");\n const [memtionActiveIndex, setMemtionActiveIndex] = useState(0);\n const memtionOptions = useMemo(\n () => filterMemtionOptions(memtion?.options ?? [], memtionKeyword),\n [memtion?.options, memtionKeyword],\n );\n\n const sanitizeValue = (nextValue: string) => {\n if (isPlaintextMode) {\n return nextValue === \"\\n\" ? \"\" : nextValue;\n }\n\n const safeHtml = isPlaintextOnMemtionMode\n ? sanitizePlaintextOnMemtionHtml(xss(nextValue, xssOptions))\n : xss(nextValue, xssOptions);\n\n return safeHtml === \"<br>\" ? \"\" : safeHtml;\n };\n\n const syncHeight = () => {\n if (autosize && editorRef.current) {\n editorRef.current.style.height = `${editorRef.current.scrollHeight}px`;\n }\n };\n\n const rememberSelection = () => {\n if (!editorRef.current) return;\n\n const selection = window.getSelection();\n if (!selection?.rangeCount) return;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const parent =\n container.nodeType === Node.ELEMENT_NODE\n ? (container as Element)\n : container.parentElement;\n\n if (!parent || !editorRef.current.contains(parent)) return;\n\n selectionRef.current = range.cloneRange();\n };\n\n const setEditorValue = (nextValue: string) => {\n if (!editorRef.current) return;\n\n const safeValue = sanitizeValue(nextValue);\n\n if (isPlaintextMode) {\n editorRef.current.textContent = safeValue;\n return;\n }\n\n editorRef.current.innerHTML = safeValue;\n };\n\n const getEditorValue = (sanitize = false) => {\n const nextValue = !editorRef.current\n ? \"\"\n : isPlaintextMode\n ? (editorRef.current.textContent ?? \"\")\n : editorRef.current.innerHTML;\n\n return sanitize ? sanitizeValue(nextValue) : nextValue;\n };\n\n const hideMemtion = () => {\n pendingMemtionRef.current = false;\n memtionTriggerRangeRef.current = null;\n setMemtionVisible(false);\n setMemtionRect(null);\n setMemtionKeyword(\"\");\n setMemtionActiveIndex(0);\n };\n\n const syncEditorState = () => {\n selectionRef.current = null;\n hideMemtion();\n };\n\n const insertMemtion = (option: IEditorMemtionOption) => {\n const replaceRange = getMemtionReplaceRange(\n memtionTriggerRangeRef.current,\n selectionRef.current,\n );\n\n const range = insertMemtionOption({\n editor: editorRef.current,\n range: replaceRange,\n mode,\n memtion,\n option,\n sanitizeValue,\n });\n\n if (!range || !editorRef.current) return;\n\n selectionRef.current = range.cloneRange();\n hideMemtion();\n editorRef.current.dispatchEvent(new Event(\"input\", { bubbles: true }));\n };\n\n const handlePaste = (e) => {\n onPaste?.(e);\n\n if (e.defaultPrevented) return;\n\n e.preventDefault();\n\n const html = e.clipboardData.getData(\"text/html\");\n const text = e.clipboardData.getData(\"text/plain\");\n const pasteValue = isPlaintextMode\n ? text\n : html\n ? sanitizeValue(html)\n : text;\n\n exec(isPlaintextMode ? \"insertText\" : \"insertHTML\", false, pasteValue);\n };\n\n const handleKeyDown = (e) => {\n onKeyDown?.(e);\n\n if (\n !isPlaintextMode &&\n (e.key === \"Backspace\" || e.key === \"Delete\") &&\n removeAdjacentMemtionTag(editorRef.current, e.key)\n ) {\n e.preventDefault();\n rememberSelection();\n editorRef.current?.dispatchEvent(\n new Event(\"input\", { bubbles: true }),\n );\n return;\n }\n\n const memtionKey = memtion?.key ?? \"@\";\n if (memtionVisible && e.key === \" \") {\n hideMemtion();\n }\n\n if (memtionVisible && memtionOptions.length) {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n setMemtionActiveIndex((index) =>\n index + 1 >= memtionOptions.length ? 0 : index + 1,\n );\n return;\n case \"ArrowUp\":\n e.preventDefault();\n setMemtionActiveIndex((index) =>\n index - 1 < 0 ? memtionOptions.length - 1 : index - 1,\n );\n return;\n case \"Enter\":\n e.preventDefault();\n insertMemtion(memtionOptions[memtionActiveIndex]);\n return;\n default:\n break;\n }\n }\n\n if (memtion && e.key === memtionKey) {\n rememberSelection();\n memtionTriggerRangeRef.current =\n selectionRef.current?.cloneRange() ?? null;\n pendingMemtionRef.current = true;\n }\n\n switch (e.key) {\n case \"Tab\":\n e.preventDefault();\n exec(\n isRichMode ? \"insertHTML\" : \"insertText\",\n false,\n isRichMode ? \"&#09;\" : \"\\t\",\n );\n break;\n case \"Enter\":\n if (!onEnter) break;\n e.preventDefault();\n onEnter(e);\n break;\n default:\n break;\n }\n };\n\n useEffect(() => {\n if (!editorRef.current) return;\n const nextValue = sanitizeValue(value);\n if (getEditorValue(true) === nextValue) return;\n\n setEditorValue(nextValue);\n syncEditorState();\n syncHeight();\n }, [autosize, mode, value]);\n\n useEffect(() => {\n if (!memtionOptions.length) {\n setMemtionActiveIndex(0);\n return;\n }\n\n setMemtionActiveIndex((index) =>\n index >= memtionOptions.length ? 0 : index,\n );\n }, [memtionOptions]);\n\n const handleInput = (e) => {\n const rawValue = getEditorValue();\n let nextValue = sanitizeValue(rawValue);\n\n if (\n isPlaintextOnMemtionMode &&\n rawValue !== nextValue &&\n editorRef.current\n ) {\n setEditorValue(nextValue);\n }\n\n if (!nextValue && rawValue && editorRef.current) {\n nextValue = \"\";\n setEditorValue(nextValue);\n }\n\n rememberSelection();\n\n if (memtion && (pendingMemtionRef.current || memtionVisible)) {\n const memtionKey = memtion?.key ?? \"@\";\n const memtionText = getMemtionText(\n memtionTriggerRangeRef.current,\n selectionRef.current,\n );\n\n if (!memtionText.startsWith(memtionKey) || /\\s/.test(memtionText)) {\n hideMemtion();\n } else {\n const keyword = memtionText.slice(memtionKey.length);\n pendingMemtionRef.current = false;\n setMemtionRect(getSelectionRect(selectionRef.current));\n setMemtionKeyword(keyword);\n setMemtionActiveIndex(0);\n setMemtionVisible(true);\n }\n }\n\n syncHeight();\n\n onChange?.(nextValue, e);\n };\n\n const handleFocus = (e) => {\n rememberSelection();\n onFocus?.(e);\n };\n\n const handleBlur = (e) => {\n hideMemtion();\n onBlur?.(e);\n };\n\n const handleMouseUp = (e) => {\n rememberSelection();\n onMouseUp?.(e);\n };\n\n const handleKeyUp = (e) => {\n rememberSelection();\n onKeyUp?.(e);\n };\n\n const handleRef = (node: HTMLDivElement | null) => {\n editorRef.current = node;\n\n if (typeof ref === \"function\") {\n ref(node);\n return;\n }\n\n if (ref) {\n ref.current = node;\n }\n };\n\n const getSelection = useCallback(\n () => selectionRef.current?.cloneRange() ?? null,\n [],\n );\n\n const controls = useMemo(\n () =>\n getControls({\n controlBtnProps,\n addtionControls,\n getSelection,\n }),\n [addtionControls, getSelection],\n );\n\n return (\n <div\n className={classNames(\"i-editor\", className, {\n \"i-editor-borderless\": !border,\n })}\n style={{\n ...style,\n [autosize ? \"minHeight\" : \"height\"]: height,\n width,\n }}\n >\n {!hideControl && (\n <div className=\"i-editor-controls\">{controls}</div>\n )}\n\n {memtion && (\n <Memtion\n visible={memtionVisible}\n rect={memtionRect}\n options={memtionOptions}\n activeIndex={memtionActiveIndex}\n onActiveChange={setMemtionActiveIndex}\n onSelect={insertMemtion}\n />\n )}\n\n <div\n ref={handleRef}\n className=\"i-editor-content\"\n data-placeholder={placeholder}\n contentEditable={isPlaintextMode ? \"plaintext-only\" : true}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onMouseUp={handleMouseUp}\n onPaste={handlePaste}\n onInput={handleInput}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDown}\n {...restProps}\n />\n </div>\n );\n};\n\nexport default Editor;\n"],"names":["memtion","useRef","useState","useMemo","filterMemtionOptions","sanitizePlaintextOnMemtionHtml","xss","xssOptions","getMemtionReplaceRange","insertMemtionOption","exec","removeAdjacentMemtionTag","useEffect","getMemtionText","getSelectionRect","useCallback","controls","getControls","_jsxs","classNames","_jsx","Memtion"],"mappings":"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"}
1
+ {"version":3,"file":"editor.js","sources":["../../../../packages/components/editor/editor.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport xss from \"xss\";\nimport { IButton } from \"../button/type\";\nimport getControls, { exec, xssOptions } from \"./controls\";\nimport \"./index.css\";\nimport Memtion, {\n filterMemtionOptions,\n getMemtionReplaceRange,\n getMemtionText,\n getSelectionRect,\n insertMemtionOption,\n removeAdjacentMemtionTag,\n sanitizePlaintextOnMemtionHtml,\n} from \"./memtion\";\nimport { IEditor, IEditorMemtionOption } from \"./type\";\n\nconst controlBtnProps: IButton = {\n square: true,\n flat: true,\n size: \"small\",\n};\n\nconst Editor = (props: IEditor) => {\n const {\n ref,\n value = \"\",\n width,\n height = \"10em\",\n placeholder,\n autosize,\n border = true,\n mode = \"rich\",\n hideControl,\n addtionControls,\n memtion,\n className,\n style,\n onChange,\n onEnter,\n onFocus,\n onBlur,\n onPaste,\n onMouseUp,\n onKeyUp,\n onKeyDown,\n ...restProps\n } = props;\n const editorRef = useRef<HTMLDivElement>(null);\n const selectionRef = useRef<Range | null>(null);\n const memtionTriggerRangeRef = useRef<Range | null>(null);\n const pendingMemtionRef = useRef(false);\n const isPlaintextMode = mode === \"plaintext\";\n const isRichMode = mode === \"rich\";\n const isPlaintextOnMemtionMode = mode === \"plaintextOnMemtion\";\n const [memtionVisible, setMemtionVisible] = useState(false);\n const [memtionRect, setMemtionRect] = useState<DOMRect | null>(null);\n const [memtionKeyword, setMemtionKeyword] = useState(\"\");\n const [memtionActiveIndex, setMemtionActiveIndex] = useState(0);\n const memtionOptions = useMemo(\n () => filterMemtionOptions(memtion?.options ?? [], memtionKeyword),\n [memtion?.options, memtionKeyword],\n );\n\n const sanitizeValue = (nextValue: string) => {\n if (isPlaintextMode) {\n return nextValue === \"\\n\" ? \"\" : nextValue;\n }\n\n const safeHtml = isPlaintextOnMemtionMode\n ? sanitizePlaintextOnMemtionHtml(xss(nextValue, xssOptions))\n : xss(nextValue, xssOptions);\n\n return safeHtml === \"<br>\" ? \"\" : safeHtml;\n };\n\n const syncHeight = () => {\n if (autosize && editorRef.current) {\n editorRef.current.style.height = `${editorRef.current.scrollHeight}px`;\n }\n };\n\n const rememberSelection = () => {\n if (!editorRef.current) return;\n\n const selection = window.getSelection();\n if (!selection?.rangeCount) return;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const parent =\n container.nodeType === Node.ELEMENT_NODE\n ? (container as Element)\n : container.parentElement;\n\n if (!parent || !editorRef.current.contains(parent)) return;\n\n selectionRef.current = range.cloneRange();\n };\n\n const setEditorValue = (nextValue: string) => {\n if (!editorRef.current) return;\n\n const safeValue = sanitizeValue(nextValue);\n\n if (isPlaintextMode) {\n editorRef.current.textContent = safeValue;\n return;\n }\n\n editorRef.current.innerHTML = safeValue;\n };\n\n const getEditorValue = (sanitize = false) => {\n const nextValue = !editorRef.current\n ? \"\"\n : isPlaintextMode\n ? (editorRef.current.textContent ?? \"\")\n : editorRef.current.innerHTML;\n\n return sanitize ? sanitizeValue(nextValue) : nextValue;\n };\n\n const hideMemtion = () => {\n pendingMemtionRef.current = false;\n memtionTriggerRangeRef.current = null;\n setMemtionVisible(false);\n setMemtionRect(null);\n setMemtionKeyword(\"\");\n setMemtionActiveIndex(0);\n };\n\n const syncEditorState = () => {\n selectionRef.current = null;\n hideMemtion();\n };\n\n const insertMemtion = (option: IEditorMemtionOption) => {\n const replaceRange = getMemtionReplaceRange(\n memtionTriggerRangeRef.current,\n selectionRef.current,\n );\n\n const range = insertMemtionOption({\n editor: editorRef.current,\n range: replaceRange,\n mode,\n memtion,\n option,\n sanitizeValue,\n });\n\n if (!range || !editorRef.current) return;\n\n selectionRef.current = range.cloneRange();\n hideMemtion();\n editorRef.current.dispatchEvent(new Event(\"input\", { bubbles: true }));\n };\n\n const handlePaste = (e) => {\n onPaste?.(e);\n\n if (e.defaultPrevented) return;\n\n e.preventDefault();\n\n const html = e.clipboardData.getData(\"text/html\");\n const text = e.clipboardData.getData(\"text/plain\");\n const pasteValue = isPlaintextMode\n ? text\n : html\n ? sanitizeValue(html)\n : text;\n\n exec(isPlaintextMode ? \"insertText\" : \"insertHTML\", false, pasteValue);\n };\n\n const handleKeyDown = (e) => {\n onKeyDown?.(e);\n\n if (e.defaultPrevented) return;\n\n if (\n !isPlaintextMode &&\n (e.key === \"Backspace\" || e.key === \"Delete\") &&\n removeAdjacentMemtionTag(editorRef.current, e.key)\n ) {\n e.preventDefault();\n rememberSelection();\n editorRef.current?.dispatchEvent(\n new Event(\"input\", { bubbles: true }),\n );\n return;\n }\n\n const memtionKey = memtion?.key ?? \"@\";\n if (memtionVisible && e.key === \" \") {\n hideMemtion();\n }\n\n if (memtionVisible && memtionOptions.length) {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n setMemtionActiveIndex((index) =>\n index + 1 >= memtionOptions.length ? 0 : index + 1,\n );\n return;\n case \"ArrowUp\":\n e.preventDefault();\n setMemtionActiveIndex((index) =>\n index - 1 < 0 ? memtionOptions.length - 1 : index - 1,\n );\n return;\n case \"Enter\":\n e.preventDefault();\n insertMemtion(memtionOptions[memtionActiveIndex]);\n return;\n default:\n break;\n }\n }\n\n if (memtion && e.key === memtionKey) {\n rememberSelection();\n memtionTriggerRangeRef.current =\n selectionRef.current?.cloneRange() ?? null;\n pendingMemtionRef.current = true;\n }\n\n switch (e.key) {\n case \"Tab\":\n e.preventDefault();\n exec(\n isRichMode ? \"insertHTML\" : \"insertText\",\n false,\n isRichMode ? \"&#09;\" : \"\\t\",\n );\n break;\n case \"Enter\":\n if (e.shiftKey) {\n break;\n }\n if (!onEnter) break;\n e.preventDefault();\n onEnter(e);\n break;\n default:\n break;\n }\n };\n\n useEffect(() => {\n if (!editorRef.current) return;\n const nextValue = sanitizeValue(value);\n if (getEditorValue(true) === nextValue) return;\n\n setEditorValue(nextValue);\n syncEditorState();\n syncHeight();\n }, [autosize, mode, value]);\n\n useEffect(() => {\n if (!memtionOptions.length) {\n setMemtionActiveIndex(0);\n return;\n }\n\n setMemtionActiveIndex((index) =>\n index >= memtionOptions.length ? 0 : index,\n );\n }, [memtionOptions]);\n\n const handleInput = (e) => {\n const rawValue = getEditorValue();\n let nextValue = sanitizeValue(rawValue);\n\n if (\n isPlaintextOnMemtionMode &&\n rawValue !== nextValue &&\n editorRef.current\n ) {\n setEditorValue(nextValue);\n }\n\n if (!nextValue && rawValue && editorRef.current) {\n nextValue = \"\";\n setEditorValue(nextValue);\n }\n\n rememberSelection();\n\n if (memtion && (pendingMemtionRef.current || memtionVisible)) {\n const memtionKey = memtion?.key ?? \"@\";\n const memtionText = getMemtionText(\n memtionTriggerRangeRef.current,\n selectionRef.current,\n );\n\n if (!memtionText.startsWith(memtionKey) || /\\s/.test(memtionText)) {\n hideMemtion();\n } else {\n const keyword = memtionText.slice(memtionKey.length);\n pendingMemtionRef.current = false;\n setMemtionRect(getSelectionRect(selectionRef.current));\n setMemtionKeyword(keyword);\n setMemtionActiveIndex(0);\n setMemtionVisible(true);\n }\n }\n\n syncHeight();\n\n onChange?.(nextValue, e);\n };\n\n const handleFocus = (e) => {\n rememberSelection();\n onFocus?.(e);\n };\n\n const handleBlur = (e) => {\n hideMemtion();\n onBlur?.(e);\n };\n\n const handleMouseUp = (e) => {\n rememberSelection();\n onMouseUp?.(e);\n };\n\n const handleKeyUp = (e) => {\n rememberSelection();\n onKeyUp?.(e);\n };\n\n const handleRef = (node: HTMLDivElement | null) => {\n editorRef.current = node;\n\n if (typeof ref === \"function\") {\n ref(node);\n return;\n }\n\n if (ref) {\n ref.current = node;\n }\n };\n\n const getSelection = useCallback(\n () => selectionRef.current?.cloneRange() ?? null,\n [],\n );\n\n const controls = useMemo(\n () =>\n getControls({\n controlBtnProps,\n addtionControls,\n getSelection,\n }),\n [addtionControls, getSelection],\n );\n\n return (\n <div\n className={classNames(\"i-editor\", className, {\n \"i-editor-borderless\": !border,\n })}\n style={{\n ...style,\n [autosize ? \"minHeight\" : \"height\"]: height,\n width,\n }}\n >\n {!hideControl && (\n <div className=\"i-editor-controls\">{controls}</div>\n )}\n\n {memtion && (\n <Memtion\n visible={memtionVisible}\n rect={memtionRect}\n options={memtionOptions}\n activeIndex={memtionActiveIndex}\n onActiveChange={setMemtionActiveIndex}\n onSelect={insertMemtion}\n />\n )}\n\n <div\n ref={handleRef}\n className=\"i-editor-content\"\n data-placeholder={placeholder}\n contentEditable={isPlaintextMode ? \"plaintext-only\" : true}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onMouseUp={handleMouseUp}\n onPaste={handlePaste}\n onInput={handleInput}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDown}\n {...restProps}\n />\n </div>\n );\n};\n\nexport default Editor;\n"],"names":["memtion","useRef","useState","useMemo","filterMemtionOptions","sanitizePlaintextOnMemtionHtml","xss","xssOptions","getMemtionReplaceRange","insertMemtionOption","exec","removeAdjacentMemtionTag","useEffect","getMemtionText","getSelectionRect","useCallback","controls","getControls","_jsxs","classNames","_jsx","Memtion"],"mappings":"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"}
@@ -6,6 +6,7 @@ var jsxRuntime = require('react/jsx-runtime');
6
6
  var react = require('react');
7
7
  var reactDom = require('react-dom');
8
8
  var server = require('react-dom/server');
9
+ var utils = require('../../js/utils.js');
9
10
  var list = require('../list/list.js');
10
11
 
11
12
  const MEMTION_TAG_CLASS_NAME = "i-memtion-tag";
@@ -231,15 +232,56 @@ const removeAdjacentMemtionTag = (editor, key) => {
231
232
  editor.focus();
232
233
  return true;
233
234
  };
235
+ const makeRectSource = (rect) => {
236
+ const { left, top, width, height } = rect;
237
+ return {
238
+ offsetParent: null,
239
+ offsetLeft: left,
240
+ offsetTop: top,
241
+ getBoundingClientRect: () => ({
242
+ left,
243
+ top,
244
+ right: left + width,
245
+ bottom: top + height,
246
+ width,
247
+ height,
248
+ x: left,
249
+ y: top,
250
+ toJSON: () => ({}),
251
+ }),
252
+ };
253
+ };
234
254
  const Memtion$1 = (props) => {
235
255
  const { visible, rect, options, activeIndex, onActiveChange, onSelect } = props;
256
+ const containerRef = react.useRef(null);
257
+ const [pos, setPos] = react.useState({ left: 0, top: 0 });
258
+ const [ready, setReady] = react.useState(false);
259
+ react.useLayoutEffect(() => {
260
+ if (!visible || !rect || !options?.length) {
261
+ setReady(false);
262
+ return;
263
+ }
264
+ const el = containerRef.current;
265
+ if (!el)
266
+ return;
267
+ const [left, top] = utils.getPosition(makeRectSource(rect), el, {
268
+ position: "bottom",
269
+ gap: 4,
270
+ offset: 0,
271
+ align: "start",
272
+ refWindow: true,
273
+ });
274
+ setPos({ left, top });
275
+ setReady(true);
276
+ }, [visible, rect, options]);
236
277
  if (!visible || !rect || !options?.length) {
237
278
  return null;
238
279
  }
239
- const content = (jsxRuntime.jsx(list.default, { className: "i-editor-memtion", type: "option", style: {
280
+ const content = (jsxRuntime.jsx(list.default, { ref: containerRef, className: "i-editor-memtion", type: "option", style: {
240
281
  position: "fixed",
241
- top: rect.bottom,
242
- left: rect.left,
282
+ left: pos.left,
283
+ top: pos.top,
284
+ opacity: ready ? 1 : 0,
243
285
  }, children: options.map((option, i) => (jsxRuntime.jsx(list.default.Item, { type: "option", active: i === activeIndex, onMouseDown: (e) => e.preventDefault(), onMouseEnter: () => onActiveChange?.(i), onClick: () => onSelect?.(option), children: option.label }, `${option.value}-${i}`))) }));
244
286
  if (typeof document === "undefined") {
245
287
  return content;
@@ -1 +1 @@
1
- {"version":3,"file":"memtion.js","sources":["../../../../packages/components/editor/memtion.tsx"],"sourcesContent":["import { memo, ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { renderToStaticMarkup } from \"react-dom/server\";\nimport List from \"../list\";\nimport { IEditorMemtion, IEditorMemtionOption } from \"./type\";\n\nexport const MEMTION_TAG_CLASS_NAME = \"i-memtion-tag\";\n\nconst blockTags = new Set([\n \"ADDRESS\",\n \"ARTICLE\",\n \"ASIDE\",\n \"BLOCKQUOTE\",\n \"DIV\",\n \"DL\",\n \"FIELDSET\",\n \"FIGCAPTION\",\n \"FIGURE\",\n \"FOOTER\",\n \"FORM\",\n \"H1\",\n \"H2\",\n \"H3\",\n \"H4\",\n \"H5\",\n \"H6\",\n \"HEADER\",\n \"LI\",\n \"MAIN\",\n \"NAV\",\n \"OL\",\n \"P\",\n \"PRE\",\n \"SECTION\",\n \"TABLE\",\n \"TD\",\n \"TH\",\n \"TR\",\n \"UL\",\n]);\n\nconst escapeHtmlAttr = (value: string) =>\n value\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll('\"', \"&quot;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\");\n\ninterface IMemtionProps {\n visible?: boolean;\n rect?: DOMRect | null;\n options?: IEditorMemtionOption[];\n activeIndex?: number;\n onActiveChange?: (index: number) => void;\n onSelect?: (option: IEditorMemtionOption) => void;\n}\n\ninterface IInsertMemtionOptionParams {\n editor: HTMLDivElement | null;\n range: Range | null;\n mode: \"rich\" | \"plaintext\" | \"plaintextOnMemtion\";\n memtion?: IEditorMemtion;\n option: IEditorMemtionOption;\n sanitizeValue: (value: string) => string;\n}\n\nconst getInsertNode = (\n memtion: IEditorMemtion | undefined,\n option: IEditorMemtionOption,\n) => memtion?.insert?.(option) ?? option.value;\n\nconst getInsertText = (\n memtion: IEditorMemtion | undefined,\n option: IEditorMemtionOption,\n) => {\n const nextNode = getInsertNode(memtion, option);\n\n if (typeof nextNode === \"string\" || typeof nextNode === \"number\") {\n return `${String(nextNode)} `;\n }\n\n return `${String(option.value)} `;\n};\n\nconst getInsertHtml = (\n memtion: IEditorMemtion | undefined,\n option: IEditorMemtionOption,\n sanitizeValue: (value: string) => string,\n) => {\n const nextNode = getInsertNode(memtion, option);\n\n if (nextNode === null || nextNode === undefined || nextNode === false) {\n return \"\";\n }\n\n const content = sanitizeValue(\n renderToStaticMarkup(<>{nextNode as ReactNode}</>),\n );\n\n return `<span class=\"${MEMTION_TAG_CLASS_NAME}\" contenteditable=\"false\" data-memtion-value=\"${escapeHtmlAttr(String(option.value))}\">${content}</span>`;\n};\n\nexport const getSelectionRect = (range: Range | null) => {\n if (!range) return null;\n\n const rect = range.getBoundingClientRect();\n\n if (rect.width || rect.height) {\n return rect;\n }\n\n return range.getClientRects()[0] ?? rect;\n};\n\nexport const insertMemtionOption = ({\n editor,\n range,\n mode,\n memtion,\n option,\n sanitizeValue,\n}: IInsertMemtionOptionParams) => {\n if (!editor || !range) return null;\n\n const browserSelection = window.getSelection();\n if (!browserSelection) return null;\n\n const nextRange = range.cloneRange();\n browserSelection.removeAllRanges();\n browserSelection.addRange(nextRange);\n editor.focus();\n nextRange.deleteContents();\n\n if (mode === \"plaintext\") {\n const text = document.createTextNode(getInsertText(memtion, option));\n nextRange.insertNode(text);\n nextRange.setStartAfter(text);\n } else {\n const html = getInsertHtml(memtion, option, sanitizeValue);\n const fragment = nextRange.createContextualFragment(html);\n const lastNode = fragment.lastChild;\n\n nextRange.insertNode(fragment);\n\n if (lastNode) {\n nextRange.setStartAfter(lastNode);\n nextRange.collapse(true);\n }\n }\n\n nextRange.collapse(true);\n browserSelection.removeAllRanges();\n browserSelection.addRange(nextRange);\n\n return nextRange;\n};\n\nexport const getMemtionText = (\n triggerRange: Range | null,\n selectionRange: Range | null,\n) => {\n if (!triggerRange || !selectionRange) return \"\";\n\n const range = triggerRange.cloneRange();\n range.setEnd(selectionRange.endContainer, selectionRange.endOffset);\n\n return range.toString();\n};\n\nexport const getMemtionReplaceRange = (\n triggerRange: Range | null,\n selectionRange: Range | null,\n) => {\n if (!triggerRange || !selectionRange) return null;\n\n const range = triggerRange.cloneRange();\n range.setEnd(selectionRange.endContainer, selectionRange.endOffset);\n\n return range;\n};\n\nexport const filterMemtionOptions = (\n options: IEditorMemtionOption[],\n keyword: string,\n) => {\n const normalizedKeyword = keyword.trim().toLowerCase();\n\n if (!normalizedKeyword) {\n return options;\n }\n\n return options.filter((option) =>\n String(option.value).toLowerCase().includes(normalizedKeyword),\n );\n};\n\nconst isMemtionTag = (node: Node | null) =>\n node instanceof HTMLElement &&\n node.classList.contains(MEMTION_TAG_CLASS_NAME);\n\nconst appendBreak = (container: HTMLElement) => {\n if (!container.lastChild || container.lastChild.nodeName === \"BR\") {\n return;\n }\n\n container.appendChild(document.createElement(\"br\"));\n};\n\nconst appendPlaintextOnMemtionNode = (\n container: HTMLElement,\n node: Node | null,\n) => {\n if (!node) return;\n\n if (node.nodeType === Node.TEXT_NODE) {\n container.appendChild(\n document.createTextNode(\n (node.textContent ?? \"\").replaceAll(\"\\r\", \"\"),\n ),\n );\n return;\n }\n\n if (!(node instanceof HTMLElement)) {\n return;\n }\n\n if (isMemtionTag(node)) {\n const tag = document.createElement(\"span\");\n const memtionValue = node.getAttribute(\"data-memtion-value\");\n\n tag.className = MEMTION_TAG_CLASS_NAME;\n tag.setAttribute(\"contenteditable\", \"false\");\n\n if (memtionValue !== null) {\n tag.setAttribute(\"data-memtion-value\", memtionValue);\n }\n\n tag.innerHTML = node.innerHTML;\n container.appendChild(tag);\n return;\n }\n\n if (node.tagName === \"BR\") {\n appendBreak(container);\n return;\n }\n\n Array.from(node.childNodes).forEach((child) => {\n appendPlaintextOnMemtionNode(container, child);\n });\n\n if (blockTags.has(node.tagName)) {\n appendBreak(container);\n }\n};\n\nexport const sanitizePlaintextOnMemtionHtml = (value: string) => {\n if (typeof document === \"undefined\") {\n return value;\n }\n\n const source = document.createElement(\"div\");\n const result = document.createElement(\"div\");\n\n source.innerHTML = value;\n\n Array.from(source.childNodes).forEach((child) => {\n appendPlaintextOnMemtionNode(result, child);\n });\n\n while (result.lastChild?.nodeName === \"BR\") {\n result.lastChild.remove();\n }\n\n return result.innerHTML;\n};\n\nconst getAdjacentMemtionTag = (\n range: Range,\n direction: \"backward\" | \"forward\",\n) => {\n const { startContainer, startOffset } = range;\n\n if (startContainer.nodeType === Node.TEXT_NODE) {\n const textNode = startContainer as Text;\n\n if (direction === \"backward\" && startOffset === 0) {\n return isMemtionTag(textNode.previousSibling)\n ? (textNode.previousSibling as HTMLElement)\n : null;\n }\n\n if (direction === \"forward\" && startOffset === textNode.data.length) {\n return isMemtionTag(textNode.nextSibling)\n ? (textNode.nextSibling as HTMLElement)\n : null;\n }\n\n return null;\n }\n\n const element = startContainer as Element;\n const targetIndex =\n direction === \"backward\" ? startOffset - 1 : startOffset;\n const targetNode = element.childNodes.item(targetIndex);\n\n return isMemtionTag(targetNode) ? (targetNode as HTMLElement) : null;\n};\n\nexport const removeAdjacentMemtionTag = (\n editor: HTMLDivElement | null,\n key: \"Backspace\" | \"Delete\",\n) => {\n if (!editor) return false;\n\n const selection = window.getSelection();\n if (!selection?.rangeCount || !selection.isCollapsed) return false;\n\n const activeRange = selection.getRangeAt(0);\n const tag = getAdjacentMemtionTag(\n activeRange,\n key === \"Backspace\" ? \"backward\" : \"forward\",\n );\n\n if (!tag || !tag.parentNode) return false;\n\n const parent = tag.parentNode;\n const nextSibling = tag.nextSibling;\n const index = Array.prototype.indexOf.call(parent.childNodes, tag);\n\n if (nextSibling?.nodeType === Node.TEXT_NODE) {\n const textNode = nextSibling as Text;\n\n if (textNode.data.startsWith(\" \")) {\n textNode.deleteData(0, 1);\n\n if (!textNode.data.length) {\n nextSibling.remove();\n }\n }\n }\n\n tag.remove();\n\n const range = document.createRange();\n range.setStart(parent, Math.min(index, parent.childNodes.length));\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n editor.focus();\n\n return true;\n};\n\nconst Memtion = (props: IMemtionProps) => {\n const { visible, rect, options, activeIndex, onActiveChange, onSelect } =\n props;\n\n if (!visible || !rect || !options?.length) {\n return null;\n }\n\n const content = (\n <List\n className=\"i-editor-memtion\"\n type=\"option\"\n style={{\n position: \"fixed\",\n top: rect.bottom,\n left: rect.left,\n }}\n >\n {options.map((option, i) => (\n <List.Item\n key={`${option.value}-${i}`}\n type=\"option\"\n active={i === activeIndex}\n onMouseDown={(e) => e.preventDefault()}\n onMouseEnter={() => onActiveChange?.(i)}\n onClick={() => onSelect?.(option)}\n >\n {option.label}\n </List.Item>\n ))}\n </List>\n );\n\n if (typeof document === \"undefined\") {\n return content;\n }\n\n return createPortal(content, document.body);\n};\n\nexport default memo(Memtion);\n"],"names":["renderToStaticMarkup","_jsx","_Fragment","Memtion","List","createPortal","memo"],"mappings":";;;;;;;;;;AAMO,MAAM,sBAAsB,GAAG;AAEtC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACtB,SAAS;IACT,SAAS;IACT,OAAO;IACP,YAAY;IACZ,KAAK;IACL,IAAI;IACJ,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,IAAI;IACJ,MAAM;IACN,KAAK;IACL,IAAI;IACJ,GAAG;IACH,KAAK;IACL,SAAS;IACT,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;AACP,CAAA,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAa,KACjC;AACK,KAAA,UAAU,CAAC,GAAG,EAAE,OAAO;AACvB,KAAA,UAAU,CAAC,GAAG,EAAE,QAAQ;AACxB,KAAA,UAAU,CAAC,GAAG,EAAE,MAAM;AACtB,KAAA,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;AAoBhC,MAAM,aAAa,GAAG,CAClB,OAAmC,EACnC,MAA4B,KAC3B,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK;AAE9C,MAAM,aAAa,GAAG,CAClB,OAAmC,EACnC,MAA4B,KAC5B;IACA,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC;IAE/C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAC9D,QAAA,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG;IACjC;IAEA,OAAO,CAAA,EAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG;AACrC,CAAC;AAED,MAAM,aAAa,GAAG,CAClB,OAAmC,EACnC,MAA4B,EAC5B,aAAwC,KACxC;IACA,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC;AAE/C,IAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,KAAK,EAAE;AACnE,QAAA,OAAO,EAAE;IACb;IAEA,MAAM,OAAO,GAAG,aAAa,CACzBA,2BAAoB,CAACC,cAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAG,QAAqB,EAAA,CAAI,CAAC,CACrD;AAED,IAAA,OAAO,CAAA,aAAA,EAAgB,sBAAsB,CAAA,8CAAA,EAAiD,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA,EAAA,EAAK,OAAO,SAAS;AAC3J,CAAC;AAEM,MAAM,gBAAgB,GAAG,CAAC,KAAmB,KAAI;AACpD,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;AAEvB,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,EAAE;IAE1C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,OAAO,IAAI;IACf;IAEA,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;AAC5C;AAEO,MAAM,mBAAmB,GAAG,CAAC,EAChC,MAAM,EACN,KAAK,EACL,IAAI,EACJ,OAAO,EACP,MAAM,EACN,aAAa,GACY,KAAI;AAC7B,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;AAElC,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,YAAY,EAAE;AAC9C,IAAA,IAAI,CAAC,gBAAgB;AAAE,QAAA,OAAO,IAAI;AAElC,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE;IACpC,gBAAgB,CAAC,eAAe,EAAE;AAClC,IAAA,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC;IACpC,MAAM,CAAC,KAAK,EAAE;IACd,SAAS,CAAC,cAAc,EAAE;AAE1B,IAAA,IAAI,IAAI,KAAK,WAAW,EAAE;AACtB,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACpE,QAAA,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;AAC1B,QAAA,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;IACjC;SAAO;QACH,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC;QAC1D,MAAM,QAAQ,GAAG,SAAS,CAAC,wBAAwB,CAAC,IAAI,CAAC;AACzD,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS;AAEnC,QAAA,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC;QAE9B,IAAI,QAAQ,EAAE;AACV,YAAA,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC;AACjC,YAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC5B;IACJ;AAEA,IAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;IACxB,gBAAgB,CAAC,eAAe,EAAE;AAClC,IAAA,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC;AAEpC,IAAA,OAAO,SAAS;AACpB;MAEa,cAAc,GAAG,CAC1B,YAA0B,EAC1B,cAA4B,KAC5B;AACA,IAAA,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc;AAAE,QAAA,OAAO,EAAE;AAE/C,IAAA,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE;IACvC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,SAAS,CAAC;AAEnE,IAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;AAC3B;MAEa,sBAAsB,GAAG,CAClC,YAA0B,EAC1B,cAA4B,KAC5B;AACA,IAAA,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc;AAAE,QAAA,OAAO,IAAI;AAEjD,IAAA,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE;IACvC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,SAAS,CAAC;AAEnE,IAAA,OAAO,KAAK;AAChB;MAEa,oBAAoB,GAAG,CAChC,OAA+B,EAC/B,OAAe,KACf;IACA,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;IAEtD,IAAI,CAAC,iBAAiB,EAAE;AACpB,QAAA,OAAO,OAAO;IAClB;IAEA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KACzB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CACjE;AACL;AAEA,MAAM,YAAY,GAAG,CAAC,IAAiB,KACnC,IAAI,YAAY,WAAW;AAC3B,IAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,sBAAsB,CAAC;AAEnD,MAAM,WAAW,GAAG,CAAC,SAAsB,KAAI;AAC3C,IAAA,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,QAAQ,KAAK,IAAI,EAAE;QAC/D;IACJ;IAEA,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,4BAA4B,GAAG,CACjC,SAAsB,EACtB,IAAiB,KACjB;AACA,IAAA,IAAI,CAAC,IAAI;QAAE;IAEX,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;QAClC,SAAS,CAAC,WAAW,CACjB,QAAQ,CAAC,cAAc,CACnB,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAChD,CACJ;QACD;IACJ;AAEA,IAAA,IAAI,EAAE,IAAI,YAAY,WAAW,CAAC,EAAE;QAChC;IACJ;AAEA,IAAA,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;QACpB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC;AAE5D,QAAA,GAAG,CAAC,SAAS,GAAG,sBAAsB;AACtC,QAAA,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC;AAE5C,QAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACvB,YAAA,GAAG,CAAC,YAAY,CAAC,oBAAoB,EAAE,YAAY,CAAC;QACxD;AAEA,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAC9B,QAAA,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC;QAC1B;IACJ;AAEA,IAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;QACvB,WAAW,CAAC,SAAS,CAAC;QACtB;IACJ;AAEA,IAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC1C,QAAA,4BAA4B,CAAC,SAAS,EAAE,KAAK,CAAC;AAClD,IAAA,CAAC,CAAC;IAEF,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QAC7B,WAAW,CAAC,SAAS,CAAC;IAC1B;AACJ,CAAC;AAEM,MAAM,8BAA8B,GAAG,CAAC,KAAa,KAAI;AAC5D,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACjC,QAAA,OAAO,KAAK;IAChB;IAEA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAE5C,IAAA,MAAM,CAAC,SAAS,GAAG,KAAK;AAExB,IAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC5C,QAAA,4BAA4B,CAAC,MAAM,EAAE,KAAK,CAAC;AAC/C,IAAA,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC,SAAS,EAAE,QAAQ,KAAK,IAAI,EAAE;AACxC,QAAA,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE;IAC7B;IAEA,OAAO,MAAM,CAAC,SAAS;AAC3B;AAEA,MAAM,qBAAqB,GAAG,CAC1B,KAAY,EACZ,SAAiC,KACjC;AACA,IAAA,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,KAAK;IAE7C,IAAI,cAAc,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;QAC5C,MAAM,QAAQ,GAAG,cAAsB;QAEvC,IAAI,SAAS,KAAK,UAAU,IAAI,WAAW,KAAK,CAAC,EAAE;AAC/C,YAAA,OAAO,YAAY,CAAC,QAAQ,CAAC,eAAe;kBACrC,QAAQ,CAAC;kBACV,IAAI;QACd;AAEA,QAAA,IAAI,SAAS,KAAK,SAAS,IAAI,WAAW,KAAK,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE;AACjE,YAAA,OAAO,YAAY,CAAC,QAAQ,CAAC,WAAW;kBACjC,QAAQ,CAAC;kBACV,IAAI;QACd;AAEA,QAAA,OAAO,IAAI;IACf;IAEA,MAAM,OAAO,GAAG,cAAyB;AACzC,IAAA,MAAM,WAAW,GACb,SAAS,KAAK,UAAU,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW;IAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAEvD,IAAA,OAAO,YAAY,CAAC,UAAU,CAAC,GAAI,UAA0B,GAAG,IAAI;AACxE,CAAC;MAEY,wBAAwB,GAAG,CACpC,MAA6B,EAC7B,GAA2B,KAC3B;AACA,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK;AAEzB,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE;IACvC,IAAI,CAAC,SAAS,EAAE,UAAU,IAAI,CAAC,SAAS,CAAC,WAAW;AAAE,QAAA,OAAO,KAAK;IAElE,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3C,IAAA,MAAM,GAAG,GAAG,qBAAqB,CAC7B,WAAW,EACX,GAAG,KAAK,WAAW,GAAG,UAAU,GAAG,SAAS,CAC/C;AAED,IAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU;AAAE,QAAA,OAAO,KAAK;AAEzC,IAAA,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU;AAC7B,IAAA,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW;AACnC,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC;IAElE,IAAI,WAAW,EAAE,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;QAC1C,MAAM,QAAQ,GAAG,WAAmB;QAEpC,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAC/B,YAAA,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;AAEzB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE;gBACvB,WAAW,CAAC,MAAM,EAAE;YACxB;QACJ;IACJ;IAEA,GAAG,CAAC,MAAM,EAAE;AAEZ,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE;AACpC,IAAA,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACjE,IAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;IACpB,SAAS,CAAC,eAAe,EAAE;AAC3B,IAAA,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;IACzB,MAAM,CAAC,KAAK,EAAE;AAEd,IAAA,OAAO,IAAI;AACf;AAEA,MAAMC,SAAO,GAAG,CAAC,KAAoB,KAAI;AACrC,IAAA,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,GACnE,KAAK;IAET,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;AACvC,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,MAAM,OAAO,IACTF,cAAA,CAACG,YAAI,EAAA,EACD,SAAS,EAAC,kBAAkB,EAC5B,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE;AACH,YAAA,QAAQ,EAAE,OAAO;YACjB,GAAG,EAAE,IAAI,CAAC,MAAM;YAChB,IAAI,EAAE,IAAI,CAAC,IAAI;AAClB,SAAA,EAAA,QAAA,EAEA,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MACnBH,cAAA,CAACG,YAAI,CAAC,IAAI,EAAA,EAEN,IAAI,EAAC,QAAQ,EACb,MAAM,EAAE,CAAC,KAAK,WAAW,EACzB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,EACtC,YAAY,EAAE,MAAM,cAAc,GAAG,CAAC,CAAC,EACvC,OAAO,EAAE,MAAM,QAAQ,GAAG,MAAM,CAAC,YAEhC,MAAM,CAAC,KAAK,EAAA,EAPR,GAAG,MAAM,CAAC,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAQnB,CACf,CAAC,EAAA,CACC,CACV;AAED,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACjC,QAAA,OAAO,OAAO;IAClB;IAEA,OAAOC,qBAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,cAAeC,UAAI,CAACH,SAAO,CAAC;;;;;;;;;;;;"}
1
+ {"version":3,"file":"memtion.js","sources":["../../../../packages/components/editor/memtion.tsx"],"sourcesContent":["import { memo, ReactNode, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { renderToStaticMarkup } from \"react-dom/server\";\nimport { getPosition } from \"../../js/utils\";\nimport List from \"../list\";\nimport { IEditorMemtion, IEditorMemtionOption } from \"./type\";\n\nexport const MEMTION_TAG_CLASS_NAME = \"i-memtion-tag\";\n\nconst blockTags = new Set([\n \"ADDRESS\",\n \"ARTICLE\",\n \"ASIDE\",\n \"BLOCKQUOTE\",\n \"DIV\",\n \"DL\",\n \"FIELDSET\",\n \"FIGCAPTION\",\n \"FIGURE\",\n \"FOOTER\",\n \"FORM\",\n \"H1\",\n \"H2\",\n \"H3\",\n \"H4\",\n \"H5\",\n \"H6\",\n \"HEADER\",\n \"LI\",\n \"MAIN\",\n \"NAV\",\n \"OL\",\n \"P\",\n \"PRE\",\n \"SECTION\",\n \"TABLE\",\n \"TD\",\n \"TH\",\n \"TR\",\n \"UL\",\n]);\n\nconst escapeHtmlAttr = (value: string) =>\n value\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll('\"', \"&quot;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\");\n\ninterface IMemtionProps {\n visible?: boolean;\n rect?: DOMRect | null;\n options?: IEditorMemtionOption[];\n activeIndex?: number;\n onActiveChange?: (index: number) => void;\n onSelect?: (option: IEditorMemtionOption) => void;\n}\n\ninterface IInsertMemtionOptionParams {\n editor: HTMLDivElement | null;\n range: Range | null;\n mode: \"rich\" | \"plaintext\" | \"plaintextOnMemtion\";\n memtion?: IEditorMemtion;\n option: IEditorMemtionOption;\n sanitizeValue: (value: string) => string;\n}\n\nconst getInsertNode = (\n memtion: IEditorMemtion | undefined,\n option: IEditorMemtionOption,\n) => memtion?.insert?.(option) ?? option.value;\n\nconst getInsertText = (\n memtion: IEditorMemtion | undefined,\n option: IEditorMemtionOption,\n) => {\n const nextNode = getInsertNode(memtion, option);\n\n if (typeof nextNode === \"string\" || typeof nextNode === \"number\") {\n return `${String(nextNode)} `;\n }\n\n return `${String(option.value)} `;\n};\n\nconst getInsertHtml = (\n memtion: IEditorMemtion | undefined,\n option: IEditorMemtionOption,\n sanitizeValue: (value: string) => string,\n) => {\n const nextNode = getInsertNode(memtion, option);\n\n if (nextNode === null || nextNode === undefined || nextNode === false) {\n return \"\";\n }\n\n const content = sanitizeValue(\n renderToStaticMarkup(<>{nextNode as ReactNode}</>),\n );\n\n return `<span class=\"${MEMTION_TAG_CLASS_NAME}\" contenteditable=\"false\" data-memtion-value=\"${escapeHtmlAttr(String(option.value))}\">${content}</span>`;\n};\n\nexport const getSelectionRect = (range: Range | null) => {\n if (!range) return null;\n\n const rect = range.getBoundingClientRect();\n\n if (rect.width || rect.height) {\n return rect;\n }\n\n return range.getClientRects()[0] ?? rect;\n};\n\nexport const insertMemtionOption = ({\n editor,\n range,\n mode,\n memtion,\n option,\n sanitizeValue,\n}: IInsertMemtionOptionParams) => {\n if (!editor || !range) return null;\n\n const browserSelection = window.getSelection();\n if (!browserSelection) return null;\n\n const nextRange = range.cloneRange();\n browserSelection.removeAllRanges();\n browserSelection.addRange(nextRange);\n editor.focus();\n nextRange.deleteContents();\n\n if (mode === \"plaintext\") {\n const text = document.createTextNode(getInsertText(memtion, option));\n nextRange.insertNode(text);\n nextRange.setStartAfter(text);\n } else {\n const html = getInsertHtml(memtion, option, sanitizeValue);\n const fragment = nextRange.createContextualFragment(html);\n const lastNode = fragment.lastChild;\n\n nextRange.insertNode(fragment);\n\n if (lastNode) {\n nextRange.setStartAfter(lastNode);\n nextRange.collapse(true);\n }\n }\n\n nextRange.collapse(true);\n browserSelection.removeAllRanges();\n browserSelection.addRange(nextRange);\n\n return nextRange;\n};\n\nexport const getMemtionText = (\n triggerRange: Range | null,\n selectionRange: Range | null,\n) => {\n if (!triggerRange || !selectionRange) return \"\";\n\n const range = triggerRange.cloneRange();\n range.setEnd(selectionRange.endContainer, selectionRange.endOffset);\n\n return range.toString();\n};\n\nexport const getMemtionReplaceRange = (\n triggerRange: Range | null,\n selectionRange: Range | null,\n) => {\n if (!triggerRange || !selectionRange) return null;\n\n const range = triggerRange.cloneRange();\n range.setEnd(selectionRange.endContainer, selectionRange.endOffset);\n\n return range;\n};\n\nexport const filterMemtionOptions = (\n options: IEditorMemtionOption[],\n keyword: string,\n) => {\n const normalizedKeyword = keyword.trim().toLowerCase();\n\n if (!normalizedKeyword) {\n return options;\n }\n\n return options.filter((option) =>\n String(option.value).toLowerCase().includes(normalizedKeyword),\n );\n};\n\nconst isMemtionTag = (node: Node | null) =>\n node instanceof HTMLElement &&\n node.classList.contains(MEMTION_TAG_CLASS_NAME);\n\nconst appendBreak = (container: HTMLElement) => {\n if (!container.lastChild || container.lastChild.nodeName === \"BR\") {\n return;\n }\n\n container.appendChild(document.createElement(\"br\"));\n};\n\nconst appendPlaintextOnMemtionNode = (\n container: HTMLElement,\n node: Node | null,\n) => {\n if (!node) return;\n\n if (node.nodeType === Node.TEXT_NODE) {\n container.appendChild(\n document.createTextNode(\n (node.textContent ?? \"\").replaceAll(\"\\r\", \"\"),\n ),\n );\n return;\n }\n\n if (!(node instanceof HTMLElement)) {\n return;\n }\n\n if (isMemtionTag(node)) {\n const tag = document.createElement(\"span\");\n const memtionValue = node.getAttribute(\"data-memtion-value\");\n\n tag.className = MEMTION_TAG_CLASS_NAME;\n tag.setAttribute(\"contenteditable\", \"false\");\n\n if (memtionValue !== null) {\n tag.setAttribute(\"data-memtion-value\", memtionValue);\n }\n\n tag.innerHTML = node.innerHTML;\n container.appendChild(tag);\n return;\n }\n\n if (node.tagName === \"BR\") {\n appendBreak(container);\n return;\n }\n\n Array.from(node.childNodes).forEach((child) => {\n appendPlaintextOnMemtionNode(container, child);\n });\n\n if (blockTags.has(node.tagName)) {\n appendBreak(container);\n }\n};\n\nexport const sanitizePlaintextOnMemtionHtml = (value: string) => {\n if (typeof document === \"undefined\") {\n return value;\n }\n\n const source = document.createElement(\"div\");\n const result = document.createElement(\"div\");\n\n source.innerHTML = value;\n\n Array.from(source.childNodes).forEach((child) => {\n appendPlaintextOnMemtionNode(result, child);\n });\n\n while (result.lastChild?.nodeName === \"BR\") {\n result.lastChild.remove();\n }\n\n return result.innerHTML;\n};\n\nconst getAdjacentMemtionTag = (\n range: Range,\n direction: \"backward\" | \"forward\",\n) => {\n const { startContainer, startOffset } = range;\n\n if (startContainer.nodeType === Node.TEXT_NODE) {\n const textNode = startContainer as Text;\n\n if (direction === \"backward\" && startOffset === 0) {\n return isMemtionTag(textNode.previousSibling)\n ? (textNode.previousSibling as HTMLElement)\n : null;\n }\n\n if (direction === \"forward\" && startOffset === textNode.data.length) {\n return isMemtionTag(textNode.nextSibling)\n ? (textNode.nextSibling as HTMLElement)\n : null;\n }\n\n return null;\n }\n\n const element = startContainer as Element;\n const targetIndex =\n direction === \"backward\" ? startOffset - 1 : startOffset;\n const targetNode = element.childNodes.item(targetIndex);\n\n return isMemtionTag(targetNode) ? (targetNode as HTMLElement) : null;\n};\n\nexport const removeAdjacentMemtionTag = (\n editor: HTMLDivElement | null,\n key: \"Backspace\" | \"Delete\",\n) => {\n if (!editor) return false;\n\n const selection = window.getSelection();\n if (!selection?.rangeCount || !selection.isCollapsed) return false;\n\n const activeRange = selection.getRangeAt(0);\n const tag = getAdjacentMemtionTag(\n activeRange,\n key === \"Backspace\" ? \"backward\" : \"forward\",\n );\n\n if (!tag || !tag.parentNode) return false;\n\n const parent = tag.parentNode;\n const nextSibling = tag.nextSibling;\n const index = Array.prototype.indexOf.call(parent.childNodes, tag);\n\n if (nextSibling?.nodeType === Node.TEXT_NODE) {\n const textNode = nextSibling as Text;\n\n if (textNode.data.startsWith(\" \")) {\n textNode.deleteData(0, 1);\n\n if (!textNode.data.length) {\n nextSibling.remove();\n }\n }\n }\n\n tag.remove();\n\n const range = document.createRange();\n range.setStart(parent, Math.min(index, parent.childNodes.length));\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n editor.focus();\n\n return true;\n};\n\nconst makeRectSource = (rect: DOMRect): HTMLElement => {\n const { left, top, width, height } = rect;\n\n return {\n offsetParent: null,\n offsetLeft: left,\n offsetTop: top,\n getBoundingClientRect: () => ({\n left,\n top,\n right: left + width,\n bottom: top + height,\n width,\n height,\n x: left,\n y: top,\n toJSON: () => ({}),\n }),\n } as HTMLElement;\n};\n\nconst Memtion = (props: IMemtionProps) => {\n const { visible, rect, options, activeIndex, onActiveChange, onSelect } =\n props;\n\n const containerRef = useRef<HTMLUListElement | null>(null);\n const [pos, setPos] = useState({ left: 0, top: 0 });\n const [ready, setReady] = useState(false);\n\n useLayoutEffect(() => {\n if (!visible || !rect || !options?.length) {\n setReady(false);\n return;\n }\n\n const el = containerRef.current;\n if (!el) return;\n\n const [left, top] = getPosition(makeRectSource(rect), el, {\n position: \"bottom\",\n gap: 4,\n offset: 0,\n align: \"start\",\n refWindow: true,\n });\n\n setPos({ left, top });\n setReady(true);\n }, [visible, rect, options]);\n\n if (!visible || !rect || !options?.length) {\n return null;\n }\n\n const content = (\n <List\n ref={containerRef}\n className=\"i-editor-memtion\"\n type=\"option\"\n style={{\n position: \"fixed\",\n left: pos.left,\n top: pos.top,\n opacity: ready ? 1 : 0,\n }}\n >\n {options.map((option, i) => (\n <List.Item\n key={`${option.value}-${i}`}\n type=\"option\"\n active={i === activeIndex}\n onMouseDown={(e) => e.preventDefault()}\n onMouseEnter={() => onActiveChange?.(i)}\n onClick={() => onSelect?.(option)}\n >\n {option.label}\n </List.Item>\n ))}\n </List>\n );\n\n if (typeof document === \"undefined\") {\n return content;\n }\n\n return createPortal(content, document.body);\n};\n\nexport default memo(Memtion);\n"],"names":["renderToStaticMarkup","_jsx","_Fragment","Memtion","useRef","useState","useLayoutEffect","getPosition","List","createPortal","memo"],"mappings":"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"}
@@ -11,9 +11,9 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
11
11
 
12
12
  var classNames__default = /*#__PURE__*/_interopDefaultCompat(classNames);
13
13
 
14
- const List = (props) => {
14
+ const List = react.forwardRef((props, ref) => {
15
15
  const { label, type, border, className, children, ...restProps } = props;
16
- return (jsxRuntime.jsx("ul", { className: classNames__default("i-list", className), ...restProps, children: react.Children.map(children, (node, i) => {
16
+ return (jsxRuntime.jsx("ul", { ref: ref, className: classNames__default("i-list", className), ...restProps, children: react.Children.map(children, (node, i) => {
17
17
  const renderLabel = typeof label === "function" ? label(i) : label;
18
18
  const { type, props: nodeProps } = node;
19
19
  if (type === item.default) {
@@ -26,7 +26,7 @@ const List = (props) => {
26
26
  }
27
27
  return node;
28
28
  }) }));
29
- };
29
+ });
30
30
  List.Item = item.default;
31
31
 
32
32
  exports.default = List;
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sources":["../../../../packages/components/list/list.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { Children, cloneElement } from \"react\";\nimport \"./index.css\";\nimport Item from \"./item\";\nimport { IList } from \"./type\";\n\nconst List = (props: IList) => {\n\tconst { label, type, border, className, children, ...restProps } = props;\n\n\treturn (\n\t\t<ul className={classNames(\"i-list\", className)} {...restProps}>\n\t\t\t{Children.map(children, (node: any, i) => {\n\t\t\t\tconst renderLabel =\n\t\t\t\t\ttypeof label === \"function\" ? label(i) : label;\n\n\t\t\t\tconst { type, props: nodeProps } = node;\n\n\t\t\t\tif (type === Item) {\n\t\t\t\t\treturn cloneElement(node, {\n\t\t\t\t\t\tlabel: renderLabel,\n\t\t\t\t\t\t...nodeProps,\n\t\t\t\t\t\ttype: props.type,\n\t\t\t\t\t\tborder,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn node;\n\t\t\t})}\n\t\t</ul>\n\t);\n};\n\nList.Item = Item;\n\nexport default List;\n"],"names":["_jsx","classNames","Children","Item","cloneElement"],"mappings":";;;;;;;;;;;;;AAMA,MAAM,IAAI,GAAG,CAAC,KAAY,KAAI;AAC7B,IAAA,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK;IAExE,QACCA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAEC,mBAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAA,GAAM,SAAS,YAC3DC,cAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAS,EAAE,CAAC,KAAI;AACxC,YAAA,MAAM,WAAW,GAChB,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK;YAE/C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI;AAEvC,YAAA,IAAI,IAAI,KAAKC,YAAI,EAAE;gBAClB,OAAOC,kBAAY,CAAC,IAAI,EAAE;AACzB,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,GAAG,SAAS;oBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,MAAM;AACN,iBAAA,CAAC;YACH;AAEA,YAAA,OAAO,IAAI;QACZ,CAAC,CAAC,EAAA,CACE;AAEP;AAEA,IAAI,CAAC,IAAI,GAAGD,YAAI;;;;"}
1
+ {"version":3,"file":"list.js","sources":["../../../../packages/components/list/list.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { Children, cloneElement, forwardRef } from \"react\";\nimport \"./index.css\";\nimport Item from \"./item\";\nimport { IList } from \"./type\";\n\nconst List = forwardRef<HTMLUListElement, IList>((props, ref) => {\n const { label, type, border, className, children, ...restProps } = props;\n\n return (\n <ul\n ref={ref}\n className={classNames(\"i-list\", className)}\n {...restProps}\n >\n {Children.map(children, (node: any, i) => {\n const renderLabel =\n typeof label === \"function\" ? label(i) : label;\n\n const { type, props: nodeProps } = node;\n\n if (type === Item) {\n return cloneElement(node, {\n label: renderLabel,\n ...nodeProps,\n type: props.type,\n border,\n });\n }\n\n return node;\n })}\n </ul>\n );\n}) as typeof List & { Item: typeof Item };\n\nList.Item = Item;\n\nexport default List;\n"],"names":["forwardRef","_jsx","classNames","Children","Item","cloneElement"],"mappings":";;;;;;;;;;;;;AAMA,MAAM,IAAI,GAAGA,gBAAU,CAA0B,CAAC,KAAK,EAAE,GAAG,KAAI;AAC5D,IAAA,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK;AAExE,IAAA,QACIC,cAAA,CAAA,IAAA,EAAA,EACI,GAAG,EAAE,GAAG,EACR,SAAS,EAAEC,mBAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAA,GACtC,SAAS,EAAA,QAAA,EAEZC,cAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAS,EAAE,CAAC,KAAI;AACrC,YAAA,MAAM,WAAW,GACb,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK;YAElD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI;AAEvC,YAAA,IAAI,IAAI,KAAKC,YAAI,EAAE;gBACf,OAAOC,kBAAY,CAAC,IAAI,EAAE;AACtB,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,GAAG,SAAS;oBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,MAAM;AACT,iBAAA,CAAC;YACN;AAEA,YAAA,OAAO,IAAI;QACf,CAAC,CAAC,EAAA,CACD;AAEb,CAAC;AAED,IAAI,CAAC,IAAI,GAAGD,YAAI;;;;"}
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
  var ColorsPanel = require('@rc-component/color-picker');
7
+ var classNames = require('classnames');
7
8
  var react = require('react');
8
9
  var container = require('../../input/container.js');
9
10
  var popup = require('../../popup/popup.js');
@@ -13,9 +14,10 @@ var handle = require('./handle.js');
13
14
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
14
15
 
15
16
  var ColorsPanel__default = /*#__PURE__*/_interopDefaultCompat(ColorsPanel);
17
+ var classNames__default = /*#__PURE__*/_interopDefaultCompat(classNames);
16
18
 
17
19
  function ColorPicker(props) {
18
- const { value, type = "HEX", disabledAlpha, children, usePanel, handle: handle$1 = "both", placeholder = "Colors", popupProps, onChange, label, required, ...restProps } = props;
20
+ const { value, type = "HEX", disabledAlpha, children, usePanel, handle: handle$1 = "both", placeholder = "Colors", popupProps, onChange, label, required, className, style, ...restProps } = props;
19
21
  const [colorType, setColorType] = react.useState(type);
20
22
  const [colorValue, setColorValue] = react.useState(value);
21
23
  const [syncValue, setSyncValue] = react.useState(value);
@@ -59,9 +61,11 @@ function ColorPicker(props) {
59
61
  if (usePanel) {
60
62
  return (jsxRuntime.jsx(container.default, { label: label, required: required, children: jsxRuntime.jsx(ColorsPanel__default, { ...restProps, value: value, onChange: onChange }) }));
61
63
  }
62
- return (jsxRuntime.jsx(container.default, { label: label, required: required, children: jsxRuntime.jsx(popup.default, { trigger: "click", touchable: true, position: "bottom", ...popupProps, visible: visible, content: jsxRuntime.jsx(ColorsPanel__default, { ...restProps, value: syncValue, disabledAlpha: disabledAlpha, panelRender: (panel) => {
64
+ return (jsxRuntime.jsx(container.default, { label: label, required: required, className: classNames__default("i-colorpicker", className), style: style, children: jsxRuntime.jsx(popup.default, { trigger: "click", touchable: true, position: "bottom", ...popupProps, visible: visible, content: jsxRuntime.jsx(ColorsPanel__default, { ...restProps, value: syncValue, disabledAlpha: disabledAlpha, panelRender: (panel) => {
63
65
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [panel, jsxRuntime.jsx(footer.default, { value: colorValue, type: colorType, onTypeChange: handleTypeChange, onChange: handleValueChange, onOk: handleOk })] }));
64
- }, onChange: handleChange, onChangeComplete: handleComplete }), onVisibleChange: handleVisibleChange, children: children ?? (jsxRuntime.jsx(handle.default, { color: value, handle: handle$1, placeholder: placeholder })) }) }));
66
+ }, onChange: handleChange, onChangeComplete: handleComplete }), onVisibleChange: handleVisibleChange, children: typeof children === "function"
67
+ ? children({ type: colorType, value: colorValue })
68
+ : (children ?? (jsxRuntime.jsx(handle.default, { color: value, handle: handle$1, placeholder: placeholder }))) }) }));
65
69
  }
66
70
 
67
71
  exports.default = ColorPicker;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../packages/components/picker/colors/index.tsx"],"sourcesContent":["import ColorsPanel from \"@rc-component/color-picker\";\nimport { useEffect, useState } from \"react\";\nimport InputContainer from \"../../input/container\";\nimport Popup from \"../../popup\";\nimport { IColorPicker } from \"../type\";\nimport Footer, { ColorMethods } from \"./footer\";\nimport Handle from \"./handle\";\nimport \"./index.css\";\n\nexport default function ColorPicker(props: IColorPicker) {\n const {\n value,\n type = \"HEX\",\n disabledAlpha,\n children,\n usePanel,\n handle = \"both\",\n placeholder = \"Colors\",\n popupProps,\n onChange,\n label,\n required,\n ...restProps\n } = props;\n\n const [colorType, setColorType] = useState(type);\n const [colorValue, setColorValue] = useState(value);\n const [syncValue, setSyncValue] = useState(value);\n const [visible, setVisible] = useState<boolean | undefined>(\n popupProps?.visible,\n );\n\n const handleChange = (target) => {\n setSyncValue(target);\n };\n\n const handleComplete = (target) => {\n const method = ColorMethods[colorType];\n\n if (target.a !== 1) {\n target.a = parseFloat(target.a.toFixed(3));\n }\n\n setColorValue(target[method]?.());\n };\n\n const handleVisibleChange = (v: boolean) => {\n setVisible(v);\n popupProps?.onVisibleChange?.(v);\n };\n\n const handleTypeChange = (t) => {\n const method = ColorMethods[t];\n\n setColorType(t);\n setColorValue(syncValue?.[method]?.());\n };\n\n const handleValueChange = (v) => {\n setColorValue(v);\n setSyncValue(v);\n };\n\n const handleOk = () => {\n onChange?.(colorValue);\n setVisible(false);\n };\n\n useEffect(() => {\n setSyncValue(value);\n setColorValue(value);\n }, [value]);\n\n useEffect(() => {\n if (popupProps?.visible !== undefined) {\n setVisible(popupProps.visible);\n }\n }, [popupProps?.visible]);\n\n if (usePanel) {\n return (\n <InputContainer label={label} required={required}>\n <ColorsPanel {...restProps} value={value} onChange={onChange} />\n </InputContainer>\n );\n }\n\n return (\n <InputContainer label={label} required={required}>\n <Popup\n trigger=\"click\"\n touchable\n position=\"bottom\"\n {...popupProps}\n visible={visible}\n content={\n <ColorsPanel\n {...restProps}\n value={syncValue}\n disabledAlpha={disabledAlpha}\n panelRender={(panel) => {\n return (\n <>\n {panel}\n <Footer\n value={colorValue}\n type={colorType}\n onTypeChange={handleTypeChange}\n onChange={handleValueChange}\n onOk={handleOk}\n />\n </>\n );\n }}\n onChange={handleChange}\n onChangeComplete={handleComplete}\n />\n }\n onVisibleChange={handleVisibleChange}\n >\n {children ?? (\n <Handle\n color={value}\n handle={handle}\n placeholder={placeholder}\n />\n )}\n </Popup>\n </InputContainer>\n );\n}\n"],"names":["handle","useState","ColorMethods","useEffect","_jsx","InputContainer","ColorsPanel","Popup","_jsxs","_Fragment","Footer","Handle"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../packages/components/picker/colors/index.tsx"],"sourcesContent":["import ColorsPanel from \"@rc-component/color-picker\";\nimport classNames from \"classnames\";\nimport { useEffect, useState } from \"react\";\nimport InputContainer from \"../../input/container\";\nimport Popup from \"../../popup\";\nimport { IColorPicker } from \"../type\";\nimport Footer, { ColorMethods } from \"./footer\";\nimport Handle from \"./handle\";\nimport \"./index.css\";\n\nexport default function ColorPicker(props: IColorPicker) {\n const {\n value,\n type = \"HEX\",\n disabledAlpha,\n children,\n usePanel,\n handle = \"both\",\n placeholder = \"Colors\",\n popupProps,\n onChange,\n label,\n required,\n className,\n style,\n ...restProps\n } = props;\n\n const [colorType, setColorType] = useState(type);\n const [colorValue, setColorValue] = useState(value);\n const [syncValue, setSyncValue] = useState(value);\n const [visible, setVisible] = useState<boolean | undefined>(\n popupProps?.visible,\n );\n\n const handleChange = (target) => {\n setSyncValue(target);\n };\n\n const handleComplete = (target) => {\n const method = ColorMethods[colorType];\n\n if (target.a !== 1) {\n target.a = parseFloat(target.a.toFixed(3));\n }\n\n setColorValue(target[method]?.());\n };\n\n const handleVisibleChange = (v: boolean) => {\n setVisible(v);\n popupProps?.onVisibleChange?.(v);\n };\n\n const handleTypeChange = (t) => {\n const method = ColorMethods[t];\n\n setColorType(t);\n setColorValue(syncValue?.[method]?.());\n };\n\n const handleValueChange = (v) => {\n setColorValue(v);\n setSyncValue(v);\n };\n\n const handleOk = () => {\n onChange?.(colorValue);\n setVisible(false);\n };\n\n useEffect(() => {\n setSyncValue(value);\n setColorValue(value);\n }, [value]);\n\n useEffect(() => {\n if (popupProps?.visible !== undefined) {\n setVisible(popupProps.visible);\n }\n }, [popupProps?.visible]);\n\n if (usePanel) {\n return (\n <InputContainer label={label} required={required}>\n <ColorsPanel {...restProps} value={value} onChange={onChange} />\n </InputContainer>\n );\n }\n\n return (\n <InputContainer\n label={label}\n required={required}\n className={classNames(\"i-colorpicker\", className)}\n style={style}\n >\n <Popup\n trigger=\"click\"\n touchable\n position=\"bottom\"\n {...popupProps}\n visible={visible}\n content={\n <ColorsPanel\n {...restProps}\n value={syncValue}\n disabledAlpha={disabledAlpha}\n panelRender={(panel) => {\n return (\n <>\n {panel}\n <Footer\n value={colorValue}\n type={colorType}\n onTypeChange={handleTypeChange}\n onChange={handleValueChange}\n onOk={handleOk}\n />\n </>\n );\n }}\n onChange={handleChange}\n onChangeComplete={handleComplete}\n />\n }\n onVisibleChange={handleVisibleChange}\n >\n {typeof children === \"function\"\n ? children({ type: colorType, value: colorValue })\n : (children ?? (\n <Handle\n color={value}\n handle={handle}\n placeholder={placeholder}\n />\n ))}\n </Popup>\n </InputContainer>\n );\n}\n"],"names":["handle","useState","ColorMethods","useEffect","_jsx","InputContainer","ColorsPanel","classNames","Popup","_jsxs","_Fragment","Footer","Handle"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"navs.js","sources":["../../../../packages/components/tabs/navs.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport type { CSSProperties, KeyboardEvent, ReactNode, RefObject } from \"react\";\nimport { memo } from \"react\";\nimport Popup from \"../popup\";\nimport Helpericon from \"../utils/helpericon\";\nimport { ITabItem } from \"./type\";\n\ninterface ITabsNavsProps {\n tabs: ITabItem[];\n moreTabs: ITabItem[];\n activeKey?: string;\n vertical?: boolean;\n overflow?: boolean;\n hideMore?: boolean;\n navsJustify?: \"start\" | \"center\" | \"end\";\n bar?: boolean;\n barClass?: string;\n barStyle?: CSSProperties;\n navsRef: RefObject<HTMLDivElement>;\n renderMore: (moreTabs: ITabItem[]) => ReactNode;\n setNavRef: (index: number, node: HTMLAnchorElement | null) => void;\n onOpen: (key: string) => void;\n onClose: (key: string) => void;\n onMoreTabClick: (key: string) => void;\n onKeyAction: (e: KeyboardEvent<HTMLElement>, action: () => void) => void;\n}\n\nconst TabsNavs = (props: ITabsNavsProps) => {\n const {\n tabs,\n moreTabs,\n activeKey,\n vertical,\n overflow,\n hideMore,\n navsJustify = \"start\",\n bar,\n barClass,\n barStyle,\n navsRef,\n renderMore,\n setNavRef,\n onOpen,\n onClose,\n onMoreTabClick,\n onKeyAction,\n } = props;\n\n return (\n <>\n <div\n ref={navsRef}\n className={classNames(\"i-tab-navs\", `justify-${navsJustify}`)}\n role=\"tablist\"\n aria-orientation={vertical ? \"vertical\" : \"horizontal\"}\n >\n {tabs.map((tab, i) => {\n const { title, key = `${i}`, closable } = tab;\n const isActive = activeKey === key;\n\n return (\n <a\n key={key}\n ref={(node) => setNavRef(i, node)}\n className={classNames(\"i-tab-nav\", {\n \"i-tab-active\": isActive,\n })}\n role=\"tab\"\n tabIndex={isActive ? 0 : -1}\n aria-selected={isActive}\n onClick={() => onOpen(key)}\n onKeyDown={(e) => onKeyAction(e, () => onOpen(key))}\n >\n {title}\n\n {closable && (\n <Helpericon\n as=\"i\"\n active\n className=\"i-tab-nav-close\"\n role=\"button\"\n tabIndex={0}\n aria-label=\"关闭标签页\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onClose(key);\n }}\n onKeyDown={(e) =>\n onKeyAction(e, () => onClose(key))\n }\n />\n )}\n </a>\n );\n })}\n\n {bar && (\n <span\n className={classNames(\"i-tab-navs-bar\", barClass)}\n style={barStyle}\n />\n )}\n </div>\n\n {!hideMore && overflow && moreTabs.length > 0 && (\n <Popup\n arrow={false}\n position={vertical ? \"right\" : \"bottom\"}\n align=\"end\"\n touchable\n hideDelay={500}\n content={\n <div className=\"i-tabs-morelist pd-4\">\n {moreTabs.map((tab, i) => {\n const { key = `${i}`, title } = tab;\n const isActive = activeKey === key;\n\n return (\n <a\n key={key}\n className={classNames(\"i-tab-nav\", {\n \"i-tab-active\": isActive,\n })}\n role=\"button\"\n tabIndex={0}\n onClick={() => onMoreTabClick(key)}\n onKeyDown={(e) =>\n onKeyAction(e, () =>\n onMoreTabClick(key),\n )\n }\n >\n {title}\n </a>\n );\n })}\n </div>\n }\n >\n {renderMore(moreTabs)}\n </Popup>\n )}\n </>\n );\n};\n\nexport default memo(TabsNavs);\n"],"names":["TabsNavs","_jsxs","_Fragment","classNames","_jsx","Helpericon","Popup","memo"],"mappings":"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"}
1
+ {"version":3,"file":"navs.js","sources":["../../../../packages/components/tabs/navs.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport type { CSSProperties, KeyboardEvent, ReactNode, RefObject } from \"react\";\nimport { memo } from \"react\";\nimport Popup from \"../popup\";\nimport Helpericon from \"../utils/helpericon\";\nimport { ITabItem } from \"./type\";\n\ninterface ITabsNavsProps {\n tabs: ITabItem[];\n moreTabs: ITabItem[];\n activeKey?: string;\n vertical?: boolean;\n overflow?: boolean;\n hideMore?: boolean;\n navsJustify?: \"start\" | \"center\" | \"end\";\n bar?: boolean;\n barClass?: string;\n barStyle?: CSSProperties;\n navsRef: RefObject<HTMLDivElement | null>;\n renderMore: (moreTabs: ITabItem[]) => ReactNode;\n setNavRef: (index: number, node: HTMLAnchorElement | null) => void;\n onOpen: (key: string) => void;\n onClose: (key: string) => void;\n onMoreTabClick: (key: string) => void;\n onKeyAction: (e: KeyboardEvent<HTMLElement>, action: () => void) => void;\n}\n\nconst TabsNavs = (props: ITabsNavsProps) => {\n const {\n tabs,\n moreTabs,\n activeKey,\n vertical,\n overflow,\n hideMore,\n navsJustify = \"start\",\n bar,\n barClass,\n barStyle,\n navsRef,\n renderMore,\n setNavRef,\n onOpen,\n onClose,\n onMoreTabClick,\n onKeyAction,\n } = props;\n\n return (\n <>\n <div\n ref={navsRef}\n className={classNames(\"i-tab-navs\", `justify-${navsJustify}`)}\n role=\"tablist\"\n aria-orientation={vertical ? \"vertical\" : \"horizontal\"}\n >\n {tabs.map((tab, i) => {\n const { title, key = `${i}`, closable } = tab;\n const isActive = activeKey === key;\n\n return (\n <a\n key={key}\n ref={(node) => setNavRef(i, node)}\n className={classNames(\"i-tab-nav\", {\n \"i-tab-active\": isActive,\n })}\n role=\"tab\"\n tabIndex={isActive ? 0 : -1}\n aria-selected={isActive}\n onClick={() => onOpen(key)}\n onKeyDown={(e) => onKeyAction(e, () => onOpen(key))}\n >\n {title}\n\n {closable && (\n <Helpericon\n as=\"i\"\n active\n className=\"i-tab-nav-close\"\n role=\"button\"\n tabIndex={0}\n aria-label=\"关闭标签页\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onClose(key);\n }}\n onKeyDown={(e) =>\n onKeyAction(e, () => onClose(key))\n }\n />\n )}\n </a>\n );\n })}\n\n {bar && (\n <span\n className={classNames(\"i-tab-navs-bar\", barClass)}\n style={barStyle}\n />\n )}\n </div>\n\n {!hideMore && overflow && moreTabs.length > 0 && (\n <Popup\n arrow={false}\n position={vertical ? \"right\" : \"bottom\"}\n align=\"end\"\n touchable\n hideDelay={500}\n content={\n <div className=\"i-tabs-morelist pd-4\">\n {moreTabs.map((tab, i) => {\n const { key = `${i}`, title } = tab;\n const isActive = activeKey === key;\n\n return (\n <a\n key={key}\n className={classNames(\"i-tab-nav\", {\n \"i-tab-active\": isActive,\n })}\n role=\"button\"\n tabIndex={0}\n onClick={() => onMoreTabClick(key)}\n onKeyDown={(e) =>\n onKeyAction(e, () =>\n onMoreTabClick(key),\n )\n }\n >\n {title}\n </a>\n );\n })}\n </div>\n }\n >\n {renderMore(moreTabs)}\n </Popup>\n )}\n </>\n );\n};\n\nexport default memo(TabsNavs);\n"],"names":["TabsNavs","_jsxs","_Fragment","classNames","_jsx","Helpericon","Popup","memo"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.js","sources":["../../../../packages/components/tabs/tabs.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport {\n CSSProperties,\n KeyboardEvent,\n ReactNode,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useIntersectionObserver, useSize } from \"../../js/hooks\";\nimport TabsContents from \"./contents\";\nimport {\n defaultRenderMore,\n emptyBarStyle,\n getParsedTabs,\n isSameTabs,\n} from \"./helper\";\nimport \"./index.css\";\nimport TabItem from \"./item\";\nimport TabsNavs from \"./navs\";\nimport { CompositionTabs, ITabItem, ITabs } from \"./type\";\nconst Tabs = ((props: ITabs) => {\n const {\n ref,\n active,\n tabs: items,\n type = \"default\",\n prepend,\n append,\n children,\n className,\n vertical,\n toggable,\n navsJustify = \"start\",\n navsClass,\n bar = true,\n hideMore,\n barClass,\n renderMore = defaultRenderMore,\n onTabChange,\n ...rest\n } = props;\n\n const navRefs = useRef<(HTMLAnchorElement | null)[]>([]);\n const navsRef = useRef<HTMLDivElement>(null);\n const contentsRef = useRef<Map<string, ReactNode>>(new Map());\n const [activeKey, setActiveKey] = useState<string | undefined>(active);\n const [prevActiveKey, setPrevActiveKey] = useState<string | undefined>(\n undefined,\n );\n const [barStyle, setBarStyle] = useState<CSSProperties>({});\n const [cachedTabs, setCachedTabs] = useState<string[]>([]);\n const [overflow, setOverflow] = useState(false);\n const [tabs, setTabs] = useState<ITabItem[]>([]);\n const { observe, unobserve } = useIntersectionObserver();\n const size = useSize(navsRef);\n\n const tabsRef = useRef<ITabItem[]>(tabs);\n tabsRef.current = tabs;\n const activeKeyRef = useRef<string | undefined>(activeKey);\n activeKeyRef.current = activeKey;\n const prevActiveKeyRef = useRef<string | undefined>(prevActiveKey);\n prevActiveKeyRef.current = prevActiveKey;\n const sourceKeysRef = useRef<Set<string>>(new Set());\n const hiddenSourceKeysRef = useRef<Set<string>>(new Set());\n const parsedTabs = useMemo(\n () => getParsedTabs(items, children),\n [children, items],\n );\n\n useEffect(() => {\n const prevContents = new Map(contentsRef.current);\n const nextContents = new Map(parsedTabs.contents);\n const sourceTabs = parsedTabs.tabs;\n const sourceKeys = parsedTabs.keys;\n\n hiddenSourceKeysRef.current.forEach((key) => {\n if (!sourceKeys.has(key)) {\n hiddenSourceKeysRef.current.delete(key);\n }\n });\n\n const dynamicTabs = tabsRef.current.filter((tab) => {\n const key = String(tab.key);\n return !sourceKeysRef.current.has(key) && !sourceKeys.has(key);\n });\n\n dynamicTabs.forEach((tab) => {\n const key = String(tab.key);\n nextContents.set(key, prevContents.get(key));\n });\n\n sourceKeysRef.current = sourceKeys;\n contentsRef.current = nextContents;\n const nextTabs = [\n ...sourceTabs.filter(\n (tab) => !hiddenSourceKeysRef.current.has(String(tab.key)),\n ),\n ...dynamicTabs,\n ];\n\n setTabs((currentTabs) =>\n isSameTabs(currentTabs, nextTabs) ? currentTabs : nextTabs,\n );\n }, [parsedTabs]);\n\n const add = (tab: ITabItem, position?: number) => {\n const currentTabs = tabsRef.current;\n const tkey = String(tab.key ?? currentTabs.length);\n const i = currentTabs.findIndex((t) => t.key === tkey);\n\n if (i > -1) {\n open(currentTabs[i].key ?? `${i}`);\n return;\n }\n\n contentsRef.current.set(tkey, tab.content);\n const { content, ...rest } = tab;\n setTabs((ts) => {\n const nextTabs = [...ts];\n const index =\n position === undefined\n ? nextTabs.length\n : Math.max(0, Math.min(position, nextTabs.length));\n nextTabs.splice(index, 0, { ...rest, key: tkey });\n return nextTabs;\n });\n open(tkey);\n };\n\n const close = (key: string) => {\n const currentTabs = tabsRef.current;\n const i = currentTabs.findIndex((t) => t.key === key);\n\n if (i < 0) return;\n\n if (sourceKeysRef.current.has(key)) {\n hiddenSourceKeysRef.current.add(key);\n } else {\n contentsRef.current.delete(key);\n }\n const nextTabs = [...currentTabs];\n nextTabs.splice(i, 1);\n setTabs(nextTabs);\n\n if (activeKeyRef.current !== key) return;\n\n const next = nextTabs[i] || nextTabs[i - 1];\n const prev = prevActiveKeyRef.current;\n const nextKey =\n prev && nextTabs.some((t) => t.key === prev) ? prev : next?.key;\n open(nextKey ?? \"\");\n };\n\n const open = (key: string) => {\n const nextKey = key || undefined;\n\n if (nextKey === undefined) {\n onTabChange?.(undefined, activeKey);\n setPrevActiveKey(activeKey);\n setActiveKey(undefined);\n setBarStyle(emptyBarStyle);\n return;\n }\n\n if (nextKey === activeKey) {\n if (!toggable) return;\n\n onTabChange?.(undefined, key);\n setActiveKey(undefined);\n setBarStyle(emptyBarStyle);\n return;\n }\n\n setPrevActiveKey(activeKey);\n onTabChange?.(nextKey, activeKey);\n setActiveKey(nextKey);\n };\n\n const handleKeyAction = (\n e: KeyboardEvent<HTMLElement>,\n action: () => void,\n ) => {\n if (![\"Enter\", \" \"].includes(e.key)) return;\n e.preventDefault();\n action();\n };\n\n const scrollToTab = (key: string) => {\n const index = tabsRef.current.findIndex((tab) => tab.key === key);\n const nav = navRefs.current[index];\n\n nav?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n inline: \"nearest\",\n });\n };\n\n const handleMoreTabClick = (key: string) => {\n open(key);\n scrollToTab(key);\n };\n\n const setNavRef = (index: number, node: HTMLAnchorElement | null) => {\n navRefs.current[index] = node;\n };\n\n const getContent = (key: string) => contentsRef.current.get(key);\n\n useEffect(() => {\n if (!size || hideMore || !observe || !unobserve) return;\n const { scrollHeight, scrollWidth } = navsRef.current as HTMLElement;\n const { width, height } = size;\n\n const nextOverflow = scrollHeight > height || scrollWidth > width;\n setOverflow((v) => (v === nextOverflow ? v : nextOverflow));\n\n if (!nextOverflow) {\n setTabs((ts) => {\n let changed = false;\n const next = ts.map((t) => {\n if (\n t.intersecting === undefined ||\n t.intersecting === true\n ) {\n return t;\n }\n changed = true;\n return { ...t, intersecting: true };\n });\n return changed ? next : ts;\n });\n return;\n }\n\n const observed: HTMLElement[] = [];\n\n navRefs.current.forEach((nav, i) => {\n if (!nav) return;\n observed.push(nav);\n observe(nav, (_tar: HTMLElement, visible: boolean) => {\n setTabs((ts) => {\n if (!ts[i]) return ts;\n if (ts[i]?.intersecting === visible) return ts;\n return ts.map((t, idx) =>\n idx === i ? { ...t, intersecting: visible } : t,\n );\n });\n });\n });\n\n return () => {\n observed.forEach((el) => unobserve(el));\n };\n }, [size, hideMore, tabs.length, observe, unobserve]);\n\n useEffect(() => {\n if (!bar || type === \"pane\" || activeKey === undefined) {\n return;\n }\n\n const index = tabs.findIndex((tab) => tab.key === activeKey);\n\n const timer = window.setTimeout(() => {\n const nav = navRefs.current[index];\n\n if (!nav) return;\n\n if (tabs[index]?.keepDOM && activeKey) {\n setCachedTabs((keys) => {\n if (keys.includes(activeKey)) return keys;\n return [activeKey, ...keys];\n });\n }\n\n const { offsetHeight, offsetLeft, offsetTop, offsetWidth } = nav;\n const isLine = type === \"line\";\n\n setBarStyle({\n height: !vertical && isLine ? \".25em\" : offsetHeight * 0.5,\n width: vertical && isLine ? \".25em\" : offsetWidth,\n transform: `translate(${offsetLeft}px, ${offsetTop}px)`,\n });\n }, 16);\n\n return () => {\n window.clearTimeout(timer);\n };\n }, [activeKey, bar, size, tabs, type, vertical]);\n\n useEffect(() => {\n if (active === undefined || activeKey === active) return;\n\n setPrevActiveKey(activeKey);\n setActiveKey(active);\n }, [active]);\n\n useEffect(() => {\n if (!navsRef.current || vertical) return;\n\n const handleMouseWheel = (e) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (vertical) return;\n\n navsRef.current?.scrollBy({\n left: e.deltaY + e.deltaX,\n });\n };\n\n navsRef.current.addEventListener(\"wheel\", handleMouseWheel, {\n passive: false,\n });\n\n return () => {\n if (!navsRef.current) return;\n navsRef.current.removeEventListener(\"wheel\", handleMouseWheel);\n };\n }, [vertical]);\n\n useImperativeHandle(ref, () => ({\n open,\n close,\n add,\n navs: navsRef,\n }));\n\n const cachedTabKeySet = useMemo(() => new Set(cachedTabs), [cachedTabs]);\n const moreTabs = useMemo(\n () =>\n !hideMore && overflow\n ? tabs.filter((tab) => tab.intersecting === false)\n : [],\n [hideMore, overflow, tabs],\n );\n\n return (\n <div\n className={classNames(\n \"i-tabs\",\n { flex: vertical, [`i-tabs-${type}`]: type !== \"default\" },\n className,\n )}\n {...rest}\n >\n <div\n className={classNames(\"i-tab-navs-container\", navsClass, {\n \"i-tab-navs-vertical\": vertical,\n })}\n >\n {prepend}\n\n <TabsNavs\n tabs={tabs}\n moreTabs={moreTabs}\n activeKey={activeKey}\n vertical={vertical}\n overflow={overflow}\n hideMore={hideMore}\n navsJustify={navsJustify}\n bar={bar}\n barClass={barClass}\n barStyle={barStyle}\n navsRef={navsRef}\n renderMore={renderMore}\n setNavRef={setNavRef}\n onOpen={open}\n onClose={close}\n onMoreTabClick={handleMoreTabClick}\n onKeyAction={handleKeyAction}\n />\n\n {append}\n </div>\n\n <TabsContents\n tabs={tabs}\n activeKey={activeKey}\n cachedTabKeySet={cachedTabKeySet}\n getContent={getContent}\n />\n </div>\n );\n}) as CompositionTabs;\n\nTabs.Item = TabItem;\n\nexport default Tabs;\n"],"names":["defaultRenderMore","useRef","useState","useIntersectionObserver","useSize","useMemo","getParsedTabs","useEffect","isSameTabs","emptyBarStyle","useImperativeHandle","_jsxs","classNames","_jsx","TabsNavs","TabsContents","TabItem"],"mappings":";;;;;;;;;;;;;;;;;AAuBA,MAAM,IAAI,IAAI,CAAC,KAAY,KAAI;IAC3B,MAAM,EACF,GAAG,EACH,MAAM,EACN,IAAI,EAAE,KAAK,EACX,IAAI,GAAG,SAAS,EAChB,OAAO,EACP,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,GAAG,OAAO,EACrB,SAAS,EACT,GAAG,GAAG,IAAI,EACV,QAAQ,EACR,QAAQ,EACR,UAAU,GAAGA,wBAAiB,EAC9B,WAAW,EACX,GAAG,IAAI,EACV,GAAG,KAAK;AAET,IAAA,MAAM,OAAO,GAAGC,YAAM,CAA+B,EAAE,CAAC;AACxD,IAAA,MAAM,OAAO,GAAGA,YAAM,CAAiB,IAAI,CAAC;IAC5C,MAAM,WAAW,GAAGA,YAAM,CAAyB,IAAI,GAAG,EAAE,CAAC;IAC7D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAGC,cAAQ,CAAqB,MAAM,CAAC;IACtE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAGA,cAAQ,CAC9C,SAAS,CACZ;IACD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAGA,cAAQ,CAAgB,EAAE,CAAC;IAC3D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAQ,CAAW,EAAE,CAAC;IAC1D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;IAC/C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAGA,cAAQ,CAAa,EAAE,CAAC;IAChD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAGC,6BAAuB,EAAE;AACxD,IAAA,MAAM,IAAI,GAAGC,aAAO,CAAC,OAAO,CAAC;AAE7B,IAAA,MAAM,OAAO,GAAGH,YAAM,CAAa,IAAI,CAAC;AACxC,IAAA,OAAO,CAAC,OAAO,GAAG,IAAI;AACtB,IAAA,MAAM,YAAY,GAAGA,YAAM,CAAqB,SAAS,CAAC;AAC1D,IAAA,YAAY,CAAC,OAAO,GAAG,SAAS;AAChC,IAAA,MAAM,gBAAgB,GAAGA,YAAM,CAAqB,aAAa,CAAC;AAClE,IAAA,gBAAgB,CAAC,OAAO,GAAG,aAAa;IACxC,MAAM,aAAa,GAAGA,YAAM,CAAc,IAAI,GAAG,EAAE,CAAC;IACpD,MAAM,mBAAmB,GAAGA,YAAM,CAAc,IAAI,GAAG,EAAE,CAAC;IAC1D,MAAM,UAAU,GAAGI,aAAO,CACtB,MAAMC,oBAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,EACpC,CAAC,QAAQ,EAAE,KAAK,CAAC,CACpB;IAEDC,eAAS,CAAC,MAAK;QACX,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC;QACjD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC;AACjD,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI;AAClC,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI;QAElC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACtB,gBAAA,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;YAC3C;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;YAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AAC3B,YAAA,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;AAClE,QAAA,CAAC,CAAC;AAEF,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACxB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AAC3B,YAAA,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChD,QAAA,CAAC,CAAC;AAEF,QAAA,aAAa,CAAC,OAAO,GAAG,UAAU;AAClC,QAAA,WAAW,CAAC,OAAO,GAAG,YAAY;AAClC,QAAA,MAAM,QAAQ,GAAG;YACb,GAAG,UAAU,CAAC,MAAM,CAChB,CAAC,GAAG,KAAK,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAC7D;AACD,YAAA,GAAG,WAAW;SACjB;QAED,OAAO,CAAC,CAAC,WAAW,KAChBC,iBAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,WAAW,GAAG,QAAQ,CAC7D;AACL,IAAA,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;AAEhB,IAAA,MAAM,GAAG,GAAG,CAAC,GAAa,EAAE,QAAiB,KAAI;AAC7C,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO;AACnC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC;AAClD,QAAA,MAAM,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC;AAEtD,QAAA,IAAI,CAAC,GAAG,EAAE,EAAE;AACR,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA,EAAG,CAAC,CAAA,CAAE,CAAC;YAClC;QACJ;QAEA,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC;QAC1C,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG;AAChC,QAAA,OAAO,CAAC,CAAC,EAAE,KAAI;AACX,YAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC;AACxB,YAAA,MAAM,KAAK,GACP,QAAQ,KAAK;kBACP,QAAQ,CAAC;AACX,kBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1D,YAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACjD,YAAA,OAAO,QAAQ;AACnB,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,IAAI,CAAC;AACd,IAAA,CAAC;AAED,IAAA,MAAM,KAAK,GAAG,CAAC,GAAW,KAAI;AAC1B,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO;AACnC,QAAA,MAAM,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;QAErD,IAAI,CAAC,GAAG,CAAC;YAAE;QAEX,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAChC,YAAA,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QACxC;aAAO;AACH,YAAA,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;QACnC;AACA,QAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,WAAW,CAAC;AACjC,QAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,CAAC,QAAQ,CAAC;AAEjB,QAAA,IAAI,YAAY,CAAC,OAAO,KAAK,GAAG;YAAE;AAElC,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3C,QAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO;AACrC,QAAA,MAAM,OAAO,GACT,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG;AACnE,QAAA,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;AACvB,IAAA,CAAC;AAED,IAAA,MAAM,IAAI,GAAG,CAAC,GAAW,KAAI;AACzB,QAAA,MAAM,OAAO,GAAG,GAAG,IAAI,SAAS;AAEhC,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,YAAA,WAAW,GAAG,SAAS,EAAE,SAAS,CAAC;YACnC,gBAAgB,CAAC,SAAS,CAAC;YAC3B,YAAY,CAAC,SAAS,CAAC;YACvB,WAAW,CAACC,oBAAa,CAAC;YAC1B;QACJ;AAEA,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ;gBAAE;AAEf,YAAA,WAAW,GAAG,SAAS,EAAE,GAAG,CAAC;YAC7B,YAAY,CAAC,SAAS,CAAC;YACvB,WAAW,CAACA,oBAAa,CAAC;YAC1B;QACJ;QAEA,gBAAgB,CAAC,SAAS,CAAC;AAC3B,QAAA,WAAW,GAAG,OAAO,EAAE,SAAS,CAAC;QACjC,YAAY,CAAC,OAAO,CAAC;AACzB,IAAA,CAAC;AAED,IAAA,MAAM,eAAe,GAAG,CACpB,CAA6B,EAC7B,MAAkB,KAClB;AACA,QAAA,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE;QACrC,CAAC,CAAC,cAAc,EAAE;AAClB,QAAA,MAAM,EAAE;AACZ,IAAA,CAAC;AAED,IAAA,MAAM,WAAW,GAAG,CAAC,GAAW,KAAI;AAChC,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC;QACjE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAElC,GAAG,EAAE,cAAc,CAAC;AAChB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,MAAM,EAAE,SAAS;AACpB,SAAA,CAAC;AACN,IAAA,CAAC;AAED,IAAA,MAAM,kBAAkB,GAAG,CAAC,GAAW,KAAI;QACvC,IAAI,CAAC,GAAG,CAAC;QACT,WAAW,CAAC,GAAG,CAAC;AACpB,IAAA,CAAC;AAED,IAAA,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,IAA8B,KAAI;AAChE,QAAA,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI;AACjC,IAAA,CAAC;AAED,IAAA,MAAM,UAAU,GAAG,CAAC,GAAW,KAAK,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAEhEF,eAAS,CAAC,MAAK;QACX,IAAI,CAAC,IAAI,IAAI,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS;YAAE;QACjD,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,OAAsB;AACpE,QAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;QAE9B,MAAM,YAAY,GAAG,YAAY,GAAG,MAAM,IAAI,WAAW,GAAG,KAAK;QACjE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;QAE3D,IAAI,CAAC,YAAY,EAAE;AACf,YAAA,OAAO,CAAC,CAAC,EAAE,KAAI;gBACX,IAAI,OAAO,GAAG,KAAK;gBACnB,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACtB,oBAAA,IACI,CAAC,CAAC,YAAY,KAAK,SAAS;AAC5B,wBAAA,CAAC,CAAC,YAAY,KAAK,IAAI,EACzB;AACE,wBAAA,OAAO,CAAC;oBACZ;oBACA,OAAO,GAAG,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE;AACvC,gBAAA,CAAC,CAAC;gBACF,OAAO,OAAO,GAAG,IAAI,GAAG,EAAE;AAC9B,YAAA,CAAC,CAAC;YACF;QACJ;QAEA,MAAM,QAAQ,GAAkB,EAAE;QAElC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AAC/B,YAAA,IAAI,CAAC,GAAG;gBAAE;AACV,YAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,OAAO,CAAC,GAAG,EAAE,CAAC,IAAiB,EAAE,OAAgB,KAAI;AACjD,gBAAA,OAAO,CAAC,CAAC,EAAE,KAAI;AACX,oBAAA,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAAE,wBAAA,OAAO,EAAE;AACrB,oBAAA,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,KAAK,OAAO;AAAE,wBAAA,OAAO,EAAE;AAC9C,oBAAA,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KACjB,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,CAAC,CAClD;AACL,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAK;AACR,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC;AAC3C,QAAA,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAErDA,eAAS,CAAC,MAAK;QACX,IAAI,CAAC,GAAG,IAAI,IAAI,KAAK,MAAM,IAAI,SAAS,KAAK,SAAS,EAAE;YACpD;QACJ;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC;AAE5D,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;YACjC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;AAElC,YAAA,IAAI,CAAC,GAAG;gBAAE;YAEV,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI,SAAS,EAAE;AACnC,gBAAA,aAAa,CAAC,CAAC,IAAI,KAAI;AACnB,oBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AAAE,wBAAA,OAAO,IAAI;AACzC,oBAAA,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC;AAC/B,gBAAA,CAAC,CAAC;YACN;YAEA,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,GAAG;AAChE,YAAA,MAAM,MAAM,GAAG,IAAI,KAAK,MAAM;AAE9B,YAAA,WAAW,CAAC;AACR,gBAAA,MAAM,EAAE,CAAC,QAAQ,IAAI,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,GAAG;gBAC1D,KAAK,EAAE,QAAQ,IAAI,MAAM,GAAG,OAAO,GAAG,WAAW;AACjD,gBAAA,SAAS,EAAE,CAAA,UAAA,EAAa,UAAU,CAAA,IAAA,EAAO,SAAS,CAAA,GAAA,CAAK;AAC1D,aAAA,CAAC;QACN,CAAC,EAAE,EAAE,CAAC;AAEN,QAAA,OAAO,MAAK;AACR,YAAA,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;AAC9B,QAAA,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEhDA,eAAS,CAAC,MAAK;AACX,QAAA,IAAI,MAAM,KAAK,SAAS,IAAI,SAAS,KAAK,MAAM;YAAE;QAElD,gBAAgB,CAAC,SAAS,CAAC;QAC3B,YAAY,CAAC,MAAM,CAAC;AACxB,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAEZA,eAAS,CAAC,MAAK;AACX,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,QAAQ;YAAE;AAElC,QAAA,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAI;YAC3B,CAAC,CAAC,eAAe,EAAE;YACnB,CAAC,CAAC,cAAc,EAAE;AAElB,YAAA,IAAI,QAAQ;gBAAE;AAEd,YAAA,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC;AACtB,gBAAA,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AAC5B,aAAA,CAAC;AACN,QAAA,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,EAAE;AACxD,YAAA,OAAO,EAAE,KAAK;AACjB,SAAA,CAAC;AAEF,QAAA,OAAO,MAAK;YACR,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE;YACtB,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,CAAC;AAClE,QAAA,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAEd,IAAAG,yBAAmB,CAAC,GAAG,EAAE,OAAO;QAC5B,IAAI;QACJ,KAAK;QACL,GAAG;AACH,QAAA,IAAI,EAAE,OAAO;AAChB,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,eAAe,GAAGL,aAAO,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAGA,aAAO,CACpB,MACI,CAAC,QAAQ,IAAI;AACT,UAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,YAAY,KAAK,KAAK;UAC/C,EAAE,EACZ,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAC7B;AAED,IAAA,QACIM,eAAA,CAAA,KAAA,EAAA,EACI,SAAS,EAAEC,mBAAU,CACjB,QAAQ,EACR,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA,OAAA,EAAU,IAAI,CAAA,CAAE,GAAG,IAAI,KAAK,SAAS,EAAE,EAC1D,SAAS,CACZ,EAAA,GACG,IAAI,EAAA,QAAA,EAAA,CAERD,eAAA,CAAA,KAAA,EAAA,EACI,SAAS,EAAEC,mBAAU,CAAC,sBAAsB,EAAE,SAAS,EAAE;AACrD,oBAAA,qBAAqB,EAAE,QAAQ;iBAClC,CAAC,EAAA,QAAA,EAAA,CAED,OAAO,EAERC,cAAA,CAACC,YAAQ,EAAA,EACL,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,KAAK,EACd,cAAc,EAAE,kBAAkB,EAClC,WAAW,EAAE,eAAe,EAAA,CAC9B,EAED,MAAM,CAAA,EAAA,CACL,EAEND,eAACE,gBAAY,EAAA,EACT,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,UAAU,EAAA,CACxB,CAAA,EAAA,CACA;AAEd,CAAC;AAED,IAAI,CAAC,IAAI,GAAGC,YAAO;;;;"}
1
+ {"version":3,"file":"tabs.js","sources":["../../../../packages/components/tabs/tabs.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport {\n CSSProperties,\n KeyboardEvent,\n ReactNode,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useIntersectionObserver, useSize } from \"../../js/hooks\";\nimport TabsContents from \"./contents\";\nimport {\n defaultRenderMore,\n emptyBarStyle,\n getParsedTabs,\n isSameTabs,\n} from \"./helper\";\nimport \"./index.css\";\nimport TabItem from \"./item\";\nimport TabsNavs from \"./navs\";\nimport { CompositionTabs, ITabItem, ITabs } from \"./type\";\nconst Tabs = ((props: ITabs) => {\n const {\n ref,\n active,\n tabs: items,\n type = \"default\",\n prepend,\n append,\n children,\n className,\n vertical,\n toggable,\n navsJustify = \"start\",\n navsClass,\n bar = true,\n hideMore,\n barClass,\n renderMore = defaultRenderMore,\n onTabChange,\n ...rest\n } = props;\n\n const navRefs = useRef<(HTMLAnchorElement | null)[]>([]);\n const navsRef = useRef<HTMLDivElement>(null);\n const contentsRef = useRef<Map<string, ReactNode>>(new Map());\n const [activeKey, setActiveKey] = useState<string | undefined>(active);\n const [prevActiveKey, setPrevActiveKey] = useState<string | undefined>(\n undefined,\n );\n const [barStyle, setBarStyle] = useState<CSSProperties>({});\n const [cachedTabs, setCachedTabs] = useState<string[]>([]);\n const [overflow, setOverflow] = useState(false);\n const [tabs, setTabs] = useState<ITabItem[]>([]);\n const { observe, unobserve } = useIntersectionObserver();\n const size = useSize(navsRef);\n\n const tabsRef = useRef<ITabItem[]>(tabs);\n tabsRef.current = tabs;\n const activeKeyRef = useRef<string | undefined>(activeKey);\n activeKeyRef.current = activeKey;\n const prevActiveKeyRef = useRef<string | undefined>(prevActiveKey);\n prevActiveKeyRef.current = prevActiveKey;\n const sourceKeysRef = useRef<Set<string>>(new Set());\n const hiddenSourceKeysRef = useRef<Set<string>>(new Set());\n const parsedTabs = useMemo(\n () => getParsedTabs(items, children),\n [children, items],\n );\n\n useEffect(() => {\n const prevContents = new Map(contentsRef.current);\n const nextContents = new Map(parsedTabs.contents);\n const sourceTabs = parsedTabs.tabs;\n const sourceKeys = parsedTabs.keys;\n\n hiddenSourceKeysRef.current.forEach((key) => {\n if (!sourceKeys.has(key)) {\n hiddenSourceKeysRef.current.delete(key);\n }\n });\n\n const dynamicTabs = tabsRef.current.filter((tab) => {\n const key = String(tab.key);\n return !sourceKeysRef.current.has(key) && !sourceKeys.has(key);\n });\n\n dynamicTabs.forEach((tab) => {\n const key = String(tab.key);\n nextContents.set(key, prevContents.get(key));\n });\n\n sourceKeysRef.current = sourceKeys;\n contentsRef.current = nextContents;\n const nextTabs = [\n ...sourceTabs.filter(\n (tab) => !hiddenSourceKeysRef.current.has(String(tab.key)),\n ),\n ...dynamicTabs,\n ];\n\n setTabs((currentTabs) =>\n isSameTabs(currentTabs, nextTabs) ? currentTabs : nextTabs,\n );\n }, [parsedTabs]);\n\n const add = (tab: ITabItem, position?: number) => {\n const currentTabs = tabsRef.current;\n const tkey = String(tab.key ?? currentTabs.length);\n const i = currentTabs.findIndex((t) => t.key === tkey);\n\n if (i > -1) {\n open(currentTabs[i].key ?? `${i}`);\n return;\n }\n\n contentsRef.current.set(tkey, tab.content);\n const { content, ...rest } = tab;\n setTabs((ts) => {\n const nextTabs = [...ts];\n const index =\n position === undefined\n ? nextTabs.length\n : Math.max(0, Math.min(position, nextTabs.length));\n nextTabs.splice(index, 0, { ...rest, key: tkey });\n return nextTabs;\n });\n open(tkey);\n };\n\n const close = (key: string) => {\n const currentTabs = tabsRef.current;\n const i = currentTabs.findIndex((t) => t.key === key);\n\n if (i < 0) return;\n\n if (sourceKeysRef.current.has(key)) {\n hiddenSourceKeysRef.current.add(key);\n } else {\n contentsRef.current.delete(key);\n }\n const nextTabs = [...currentTabs];\n nextTabs.splice(i, 1);\n setTabs(nextTabs);\n\n if (activeKeyRef.current !== key) return;\n\n const next = nextTabs[i] || nextTabs[i - 1];\n const prev = prevActiveKeyRef.current;\n const nextKey =\n prev && nextTabs.some((t) => t.key === prev) ? prev : next?.key;\n open(nextKey ?? \"\");\n };\n\n const open = (key: string) => {\n const nextKey = key || undefined;\n\n if (nextKey === undefined) {\n onTabChange?.(undefined, activeKey);\n setPrevActiveKey(activeKey);\n setActiveKey(undefined);\n setBarStyle(emptyBarStyle);\n return;\n }\n\n if (nextKey === activeKey) {\n if (!toggable) return;\n\n onTabChange?.(undefined, key);\n setActiveKey(undefined);\n setBarStyle(emptyBarStyle);\n return;\n }\n\n setPrevActiveKey(activeKey);\n onTabChange?.(nextKey, activeKey);\n setActiveKey(nextKey);\n };\n\n const handleKeyAction = (\n e: KeyboardEvent<HTMLElement>,\n action: () => void,\n ) => {\n if (![\"Enter\", \" \"].includes(e.key)) return;\n e.preventDefault();\n action();\n };\n\n const scrollToTab = (key: string) => {\n const index = tabsRef.current.findIndex((tab) => tab.key === key);\n const nav = navRefs.current[index];\n\n nav?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n inline: \"nearest\",\n });\n };\n\n const handleMoreTabClick = (key: string) => {\n open(key);\n scrollToTab(key);\n };\n\n const setNavRef = (index: number, node: HTMLAnchorElement | null) => {\n navRefs.current[index] = node;\n };\n\n const getContent = (key: string) => contentsRef.current.get(key);\n\n useEffect(() => {\n if (!size || hideMore || !observe || !unobserve) return;\n const { scrollHeight, scrollWidth } = navsRef.current as HTMLElement;\n const { width, height } = size;\n\n const nextOverflow = scrollHeight > height || scrollWidth > width;\n setOverflow((v) => (v === nextOverflow ? v : nextOverflow));\n\n if (!nextOverflow) {\n setTabs((ts) => {\n let changed = false;\n const next = ts.map((t) => {\n if (\n t.intersecting === undefined ||\n t.intersecting === true\n ) {\n return t;\n }\n changed = true;\n return { ...t, intersecting: true };\n });\n return changed ? next : ts;\n });\n return;\n }\n\n const observed: HTMLElement[] = [];\n\n navRefs.current.forEach((nav, i) => {\n if (!nav) return;\n observed.push(nav);\n observe(nav, (_tar: HTMLElement, visible: boolean) => {\n setTabs((ts) => {\n if (!ts[i]) return ts;\n if (ts[i]?.intersecting === visible) return ts;\n return ts.map((t, idx) =>\n idx === i ? { ...t, intersecting: visible } : t,\n );\n });\n });\n });\n\n return () => {\n observed.forEach((el) => unobserve(el));\n };\n }, [size, hideMore, tabs.length, observe, unobserve]);\n\n useEffect(() => {\n if (!bar || type === \"pane\" || activeKey === undefined) {\n return;\n }\n\n const index = tabs.findIndex((tab) => tab.key === activeKey);\n\n const timer = window.setTimeout(() => {\n const nav = navRefs.current[index];\n\n if (!nav) return;\n\n if (tabs[index]?.keepDOM && activeKey) {\n setCachedTabs((keys) => {\n if (keys.includes(activeKey)) return keys;\n return [activeKey, ...keys];\n });\n }\n\n const { offsetHeight, offsetLeft, offsetTop, offsetWidth } = nav;\n const isLine = type === \"line\";\n\n setBarStyle({\n height: !vertical && isLine ? \".25em\" : offsetHeight * 0.5,\n width: vertical && isLine ? \".25em\" : offsetWidth,\n transform: `translate(${offsetLeft}px, ${offsetTop}px)`,\n });\n }, 16);\n\n return () => {\n window.clearTimeout(timer);\n };\n }, [activeKey, bar, size, tabs, type, vertical]);\n\n useEffect(() => {\n if (active === undefined || activeKey === active) return;\n\n setPrevActiveKey(activeKey);\n setActiveKey(active);\n }, [active]);\n\n useEffect(() => {\n if (!navsRef.current || vertical) return;\n\n const handleMouseWheel = (e: WheelEvent) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (vertical) return;\n\n navsRef.current?.scrollBy({\n left: e.deltaY + e.deltaX,\n });\n };\n\n navsRef.current.addEventListener(\"wheel\", handleMouseWheel, {\n passive: false,\n });\n\n return () => {\n if (!navsRef.current) return;\n navsRef.current.removeEventListener(\"wheel\", handleMouseWheel);\n };\n }, [vertical]);\n\n useImperativeHandle(ref, () => ({\n open,\n close,\n add,\n navs: navsRef,\n }));\n\n const cachedTabKeySet = useMemo(() => new Set(cachedTabs), [cachedTabs]);\n const moreTabs = useMemo(\n () =>\n !hideMore && overflow\n ? tabs.filter((tab) => tab.intersecting === false)\n : [],\n [hideMore, overflow, tabs],\n );\n\n return (\n <div\n className={classNames(\n \"i-tabs\",\n { flex: vertical, [`i-tabs-${type}`]: type !== \"default\" },\n className,\n )}\n {...rest}\n >\n <div\n className={classNames(\"i-tab-navs-container\", navsClass, {\n \"i-tab-navs-vertical\": vertical,\n })}\n >\n {prepend}\n\n <TabsNavs\n tabs={tabs}\n moreTabs={moreTabs}\n activeKey={activeKey}\n vertical={vertical}\n overflow={overflow}\n hideMore={hideMore}\n navsJustify={navsJustify}\n bar={bar}\n barClass={barClass}\n barStyle={barStyle}\n navsRef={navsRef}\n renderMore={renderMore}\n setNavRef={setNavRef}\n onOpen={open}\n onClose={close}\n onMoreTabClick={handleMoreTabClick}\n onKeyAction={handleKeyAction}\n />\n\n {append}\n </div>\n\n <TabsContents\n tabs={tabs}\n activeKey={activeKey}\n cachedTabKeySet={cachedTabKeySet}\n getContent={getContent}\n />\n </div>\n );\n}) as CompositionTabs;\n\nTabs.Item = TabItem;\n\nexport default Tabs;\n"],"names":["defaultRenderMore","useRef","useState","useIntersectionObserver","useSize","useMemo","getParsedTabs","useEffect","isSameTabs","emptyBarStyle","useImperativeHandle","_jsxs","classNames","_jsx","TabsNavs","TabsContents","TabItem"],"mappings":"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"}
@@ -8,6 +8,7 @@ var classNames = require('classnames');
8
8
  var radash = require('radash');
9
9
  var react = require('react');
10
10
  var SortableContainer = require('react-easy-sort');
11
+ var reactDom = require('react-dom');
11
12
  var index = require('../../js/usePreview/index.js');
12
13
  var utils = require('../../js/utils.js');
13
14
  var button = require('../button/button.js');
@@ -40,7 +41,7 @@ const normalizeFiles = (files) => (files ?? []).map((item) => {
40
41
  };
41
42
  });
42
43
  const Upload = (props) => {
43
- const { label, labelInline, value, files, placeholder, status = "normal", message, className, style, children, droppable, dropbox: dropbox$1, defaultButtonProps, mode = "default", cardSize = "3.2em", disabled, sortable, limit = props.multiple ? Infinity : 1, multiple, renderItem, shouldUpload = () => true, uploader, onChange, onFilesChange, onUpload, onRemove, ...restProps } = props;
44
+ const { label, labelInline, value, files, placeholder, status = "normal", message, className, style, children, droppable, dropbox: dropbox$1, getDropboxContainer, defaultButtonProps, mode = "default", cardSize = "3.2em", disabled, sortable, limit = props.multiple ? Infinity : 1, multiple, renderItem, shouldUpload = () => true, uploader, onChange, onFilesChange, onUpload, onRemove, ...restProps } = props;
44
45
  const [internalFileList, setInternalFileList] = react.useState([]);
45
46
  const isControlled = react.useMemo(() => value !== undefined || files !== undefined, [value, files]);
46
47
  const fileList = isControlled
@@ -150,7 +151,12 @@ const Upload = (props) => {
150
151
  return node;
151
152
  return jsxRuntime.jsx(SortableContainer.SortableItem, { children: node }, key);
152
153
  }) }), uploadMessage && (jsxRuntime.jsx("span", { className: "i-upload-message", children: uploadMessage })), fileList.length < limit &&
153
- (droppable ? (jsxRuntime.jsx(dropbox.default, { multiple: multiple, accept: restProps.accept, disabled: disabled, onChange: handleChange, onDropFiles: handleDropFiles, children: dropbox$1 })) : (jsxRuntime.jsxs("label", { children: [jsxRuntime.jsx("input", { ...restProps, disabled: disabled, ref: inputRef, type: "file", className: "i-input-file-hidden", multiple: multiple, onChange: handleChange }), trigger] })))] }) }));
154
+ (droppable ? ((() => {
155
+ const node = (jsxRuntime.jsx(dropbox.default, { multiple: multiple, accept: restProps.accept, disabled: disabled, onChange: handleChange, onDropFiles: handleDropFiles, children: dropbox$1 }));
156
+ return getDropboxContainer
157
+ ? reactDom.createPortal(node, getDropboxContainer())
158
+ : node;
159
+ })()) : (jsxRuntime.jsxs("label", { children: [jsxRuntime.jsx("input", { ...restProps, disabled: disabled, ref: inputRef, type: "file", className: "i-input-file-hidden", multiple: multiple, onChange: handleChange }), trigger] })))] }) }));
154
160
  };
155
161
 
156
162
  exports.default = Upload;