@ioca/react 1.5.10 → 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 (45) 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/dropbox.js +54 -0
  12. package/lib/cjs/components/upload/dropbox.js.map +1 -0
  13. package/lib/cjs/components/upload/renderFile.js +33 -36
  14. package/lib/cjs/components/upload/renderFile.js.map +1 -1
  15. package/lib/cjs/components/upload/upload.js +106 -69
  16. package/lib/cjs/components/upload/upload.js.map +1 -1
  17. package/lib/cjs/js/usePreview/renderFile.js +1 -1
  18. package/lib/cjs/js/usePreview/renderFile.js.map +1 -1
  19. package/lib/css/index.css +1 -1
  20. package/lib/css/index.css.map +1 -1
  21. package/lib/es/components/editor/editor.js +5 -0
  22. package/lib/es/components/editor/editor.js.map +1 -1
  23. package/lib/es/components/editor/memtion.js +46 -4
  24. package/lib/es/components/editor/memtion.js.map +1 -1
  25. package/lib/es/components/list/list.js +4 -4
  26. package/lib/es/components/list/list.js.map +1 -1
  27. package/lib/es/components/picker/colors/index.js +6 -3
  28. package/lib/es/components/picker/colors/index.js.map +1 -1
  29. package/lib/es/components/tabs/navs.js.map +1 -1
  30. package/lib/es/components/tabs/tabs.js.map +1 -1
  31. package/lib/es/components/upload/dropbox.js +46 -0
  32. package/lib/es/components/upload/dropbox.js.map +1 -0
  33. package/lib/es/components/upload/renderFile.js +34 -37
  34. package/lib/es/components/upload/renderFile.js.map +1 -1
  35. package/lib/es/components/upload/upload.js +107 -70
  36. package/lib/es/components/upload/upload.js.map +1 -1
  37. package/lib/es/js/usePreview/renderFile.js +1 -1
  38. package/lib/es/js/usePreview/renderFile.js.map +1 -1
  39. package/lib/index.js +233 -115
  40. package/lib/types/components/list/item.d.ts +6 -0
  41. package/lib/types/components/list/list.d.ts +3 -5
  42. package/lib/types/components/picker/type.d.ts +4 -1
  43. package/lib/types/components/tabs/type.d.ts +1 -1
  44. package/lib/types/components/upload/type.d.ts +4 -8
  45. package/package.json +97 -97
@@ -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":["_jsx","_Fragment"],"mappings":"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"}
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":["_jsx","_Fragment"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import classNames from 'classnames';
3
- import { Children, cloneElement } from 'react';
3
+ import { forwardRef, Children, cloneElement } from 'react';
4
4
  import Item from './item.js';
5
5
 
6
- const List = (props) => {
6
+ const List = forwardRef((props, ref) => {
7
7
  const { label, type, border, className, children, ...restProps } = props;
8
- return (jsx("ul", { className: classNames("i-list", className), ...restProps, children: Children.map(children, (node, i) => {
8
+ return (jsx("ul", { ref: ref, className: classNames("i-list", className), ...restProps, children: Children.map(children, (node, i) => {
9
9
  const renderLabel = typeof label === "function" ? label(i) : label;
10
10
  const { type, props: nodeProps } = node;
11
11
  if (type === Item) {
@@ -18,7 +18,7 @@ const List = (props) => {
18
18
  }
19
19
  return node;
20
20
  }) }));
21
- };
21
+ });
22
22
  List.Item = Item;
23
23
 
24
24
  export { List as default };
@@ -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"],"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,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAA,GAAM,SAAS,YAC3D,QAAQ,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,KAAK,IAAI,EAAE;gBAClB,OAAO,YAAY,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,GAAG,IAAI;;;;"}
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":["_jsx"],"mappings":";;;;;AAMA,MAAM,IAAI,GAAG,UAAU,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,QACIA,GAAA,CAAA,IAAA,EAAA,EACI,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAA,GACtC,SAAS,EAAA,QAAA,EAEZ,QAAQ,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,KAAK,IAAI,EAAE;gBACf,OAAO,YAAY,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,GAAG,IAAI;;;;"}
@@ -1,5 +1,6 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import ColorsPanel from '@rc-component/color-picker';
3
+ import classNames from 'classnames';
3
4
  import { useState, useEffect } from 'react';
4
5
  import InputContainer from '../../input/container.js';
5
6
  import Popup from '../../popup/popup.js';
@@ -7,7 +8,7 @@ import Footer, { ColorMethods } from './footer.js';
7
8
  import Handle from './handle.js';
8
9
 
9
10
  function ColorPicker(props) {
10
- const { value, type = "HEX", disabledAlpha, children, usePanel, handle = "both", placeholder = "Colors", popupProps, onChange, label, required, ...restProps } = props;
11
+ const { value, type = "HEX", disabledAlpha, children, usePanel, handle = "both", placeholder = "Colors", popupProps, onChange, label, required, className, style, ...restProps } = props;
11
12
  const [colorType, setColorType] = useState(type);
12
13
  const [colorValue, setColorValue] = useState(value);
13
14
  const [syncValue, setSyncValue] = useState(value);
@@ -51,9 +52,11 @@ function ColorPicker(props) {
51
52
  if (usePanel) {
52
53
  return (jsx(InputContainer, { label: label, required: required, children: jsx(ColorsPanel, { ...restProps, value: value, onChange: onChange }) }));
53
54
  }
54
- return (jsx(InputContainer, { label: label, required: required, children: jsx(Popup, { trigger: "click", touchable: true, position: "bottom", ...popupProps, visible: visible, content: jsx(ColorsPanel, { ...restProps, value: syncValue, disabledAlpha: disabledAlpha, panelRender: (panel) => {
55
+ return (jsx(InputContainer, { label: label, required: required, className: classNames("i-colorpicker", className), style: style, children: jsx(Popup, { trigger: "click", touchable: true, position: "bottom", ...popupProps, visible: visible, content: jsx(ColorsPanel, { ...restProps, value: syncValue, disabledAlpha: disabledAlpha, panelRender: (panel) => {
55
56
  return (jsxs(Fragment, { children: [panel, jsx(Footer, { value: colorValue, type: colorType, onTypeChange: handleTypeChange, onChange: handleValueChange, onOk: handleOk })] }));
56
- }, onChange: handleChange, onChangeComplete: handleComplete }), onVisibleChange: handleVisibleChange, children: children ?? (jsx(Handle, { color: value, handle: handle, placeholder: placeholder })) }) }));
57
+ }, onChange: handleChange, onChangeComplete: handleComplete }), onVisibleChange: handleVisibleChange, children: typeof children === "function"
58
+ ? children({ type: colorType, value: colorValue })
59
+ : (children ?? (jsx(Handle, { color: value, handle: handle, placeholder: placeholder }))) }) }));
57
60
  }
58
61
 
59
62
  export { ColorPicker as default };
@@ -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":["_jsx","_jsxs","_Fragment"],"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":["_jsx","_jsxs","_Fragment"],"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":["_jsxs","_Fragment","_jsx"],"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":["_jsxs","_Fragment","_jsx"],"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":["_jsxs","_jsx","TabItem"],"mappings":"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"}
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":["_jsxs","_jsx","TabItem"],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { MoveToInboxTwotone, OutboxTwotone } from '@ricons/material';
3
+ import classNames from 'classnames';
4
+ import { useState, useRef } from 'react';
5
+ import Icon from '../icon/icon.js';
6
+
7
+ const Dropbox = (props) => {
8
+ const { multiple, accept, disabled, children, onChange, onDropFiles } = props;
9
+ const [dragging, setDragging] = useState(false);
10
+ const inputRef = useRef(null);
11
+ const handleDragOver = (e) => {
12
+ e.preventDefault();
13
+ e.stopPropagation();
14
+ };
15
+ const handleDragEnter = (e) => {
16
+ e.preventDefault();
17
+ e.stopPropagation();
18
+ if (!disabled)
19
+ setDragging(true);
20
+ };
21
+ const handleDragLeave = (e) => {
22
+ e.preventDefault();
23
+ e.stopPropagation();
24
+ setDragging(false);
25
+ };
26
+ const handleDrop = (e) => {
27
+ e.preventDefault();
28
+ e.stopPropagation();
29
+ setDragging(false);
30
+ if (disabled)
31
+ return;
32
+ const files = Array.from(e.dataTransfer.files);
33
+ if (files.length)
34
+ onDropFiles(files);
35
+ };
36
+ const handleClick = () => {
37
+ if (!disabled)
38
+ inputRef.current?.click();
39
+ };
40
+ return (jsxs("div", { className: classNames("i-upload-dropbox", dragging && "i-upload-dropbox-active"), onDragOver: handleDragOver, onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDrop: handleDrop, onClick: handleClick, children: [jsx("input", { ref: inputRef, type: "file", className: "i-input-file-hidden", multiple: multiple, accept: accept, disabled: disabled, onChange: onChange }), typeof children === "function"
41
+ ? children(dragging)
42
+ : children || (jsx(Icon, { icon: dragging ? (jsx(MoveToInboxTwotone, {})) : (jsx(OutboxTwotone, {})), size: "2em" }))] }));
43
+ };
44
+
45
+ export { Dropbox as default };
46
+ //# sourceMappingURL=dropbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropbox.js","sources":["../../../../packages/components/upload/dropbox.tsx"],"sourcesContent":["import { MoveToInboxTwotone, OutboxTwotone } from \"@ricons/material\";\nimport classNames from \"classnames\";\nimport { DragEvent, useRef, useState } from \"react\";\nimport Icon from \"../icon\";\nimport { IDropboxProps } from \"./type\";\n\nconst Dropbox = (props: IDropboxProps) => {\n const { multiple, accept, disabled, children, onChange, onDropFiles } =\n props;\n const [dragging, setDragging] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleDragOver = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n const handleDragEnter = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!disabled) setDragging(true);\n };\n\n const handleDragLeave = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragging(false);\n };\n\n const handleDrop = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragging(false);\n if (disabled) return;\n const files = Array.from(e.dataTransfer.files);\n if (files.length) onDropFiles(files);\n };\n\n const handleClick = () => {\n if (!disabled) inputRef.current?.click();\n };\n\n return (\n <div\n className={classNames(\n \"i-upload-dropbox\",\n dragging && \"i-upload-dropbox-active\",\n )}\n onDragOver={handleDragOver}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={handleClick}\n >\n <input\n ref={inputRef}\n type=\"file\"\n className=\"i-input-file-hidden\"\n multiple={multiple}\n accept={accept}\n disabled={disabled}\n onChange={onChange}\n />\n {typeof children === \"function\"\n ? children(dragging)\n : children || (\n <Icon\n icon={\n dragging ? (\n <MoveToInboxTwotone />\n ) : (\n <OutboxTwotone />\n )\n }\n size=\"2em\"\n />\n )}\n </div>\n );\n};\n\nexport default Dropbox;\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAMA,MAAM,OAAO,GAAG,CAAC,KAAoB,KAAI;AACrC,IAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,GACjE,KAAK;IACT,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC/C,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC;AAE/C,IAAA,MAAM,cAAc,GAAG,CAAC,CAAY,KAAI;QACpC,CAAC,CAAC,cAAc,EAAE;QAClB,CAAC,CAAC,eAAe,EAAE;AACvB,IAAA,CAAC;AAED,IAAA,MAAM,eAAe,GAAG,CAAC,CAAY,KAAI;QACrC,CAAC,CAAC,cAAc,EAAE;QAClB,CAAC,CAAC,eAAe,EAAE;AACnB,QAAA,IAAI,CAAC,QAAQ;YAAE,WAAW,CAAC,IAAI,CAAC;AACpC,IAAA,CAAC;AAED,IAAA,MAAM,eAAe,GAAG,CAAC,CAAY,KAAI;QACrC,CAAC,CAAC,cAAc,EAAE;QAClB,CAAC,CAAC,eAAe,EAAE;QACnB,WAAW,CAAC,KAAK,CAAC;AACtB,IAAA,CAAC;AAED,IAAA,MAAM,UAAU,GAAG,CAAC,CAAY,KAAI;QAChC,CAAC,CAAC,cAAc,EAAE;QAClB,CAAC,CAAC,eAAe,EAAE;QACnB,WAAW,CAAC,KAAK,CAAC;AAClB,QAAA,IAAI,QAAQ;YAAE;AACd,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;QAC9C,IAAI,KAAK,CAAC,MAAM;YAAE,WAAW,CAAC,KAAK,CAAC;AACxC,IAAA,CAAC;IAED,MAAM,WAAW,GAAG,MAAK;AACrB,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE;AAC5C,IAAA,CAAC;AAED,IAAA,QACIA,IAAA,CAAA,KAAA,EAAA,EACI,SAAS,EAAE,UAAU,CACjB,kBAAkB,EAClB,QAAQ,IAAI,yBAAyB,CACxC,EACD,UAAU,EAAE,cAAc,EAC1B,WAAW,EAAE,eAAe,EAC5B,WAAW,EAAE,eAAe,EAC5B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAW,EAAA,QAAA,EAAA,CAEpBC,GAAA,CAAA,OAAA,EAAA,EACI,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,qBAAqB,EAC/B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAAA,CACpB,EACD,OAAO,QAAQ,KAAK;AACjB,kBAAE,QAAQ,CAAC,QAAQ;AACnB,kBAAE,QAAQ,KACJA,IAAC,IAAI,EAAA,EACD,IAAI,EACA,QAAQ,IACJA,IAAC,kBAAkB,EAAA,EAAA,CAAG,KAEtBA,GAAA,CAAC,aAAa,EAAA,EAAA,CAAG,CACpB,EAEL,IAAI,EAAC,KAAK,EAAA,CACZ,CACL,CAAA,EAAA,CACL;AAEd;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { ListAltRound } from '@ricons/material';
3
- import { title } from 'radash';
2
+ import { FilePresentOutlined } from '@ricons/material';
3
+ import { memo, useCallback, useMemo } from 'react';
4
4
  import SortableContainer from 'react-easy-sort';
5
5
  import { TFileType } from '../../js/usePreview/type.js';
6
6
  import { getFileType, formatBytes } from '../../js/utils.js';
@@ -8,53 +8,50 @@ import Icon from '../icon/icon.js';
8
8
  import MemoImage from '../image/image.js';
9
9
  import Helpericon from '../utils/helpericon/helpericon.js';
10
10
 
11
- const ListContainer = (props) => {
12
- const { sortable, onSortEnd, itemProps, ...restProps } = props;
13
- const customProps = {
14
- className: "i-upload-list",
15
- onClick: (e) => {
16
- e.stopPropagation();
17
- e.preventDefault();
18
- },
19
- };
11
+ const ListContainer = memo((props) => {
12
+ const { sortable, onSortEnd, children, ...restProps } = props;
20
13
  if (!sortable) {
21
- return jsx("div", { ...customProps, ...restProps });
14
+ return (jsx("div", { className: "i-upload-list", onClick: (e) => {
15
+ e.stopPropagation();
16
+ e.preventDefault();
17
+ }, ...restProps, children: children }));
22
18
  }
23
- return (jsx(SortableContainer, { draggedItemClassName: 'i-upload-item-dragged', onSortEnd: onSortEnd, ...customProps, ...restProps }));
24
- };
25
- const FileListItem = (props) => {
19
+ return (jsx(SortableContainer, { draggedItemClassName: "i-upload-item-dragged", onSortEnd: onSortEnd, className: "i-upload-list", ...restProps, children: children }));
20
+ });
21
+ const CloseBtn = memo(({ index, onRemove }) => (jsx(Helpericon, { active: true, className: "i-upload-delete", onClick: (e) => {
22
+ e.stopPropagation();
23
+ e.preventDefault();
24
+ onRemove(index);
25
+ } })));
26
+ const FileListItem = memo((props) => {
26
27
  const { ref, mode, index, file, renderItem, onRemove, onPreview } = props;
27
28
  if (!file)
28
- return "";
29
- const { id, name, size, url, src } = file;
29
+ return null;
30
+ const { name, size, url, src } = file;
30
31
  const type = getFileType(name, file.type);
32
+ const handleClick = useCallback(() => {
33
+ onPreview?.(index);
34
+ }, [onPreview, index]);
31
35
  if (renderItem) {
32
36
  return renderItem(file, index);
33
37
  }
34
- const CloseBtn = (jsx(Helpericon, { active: true, className: 'i-upload-delete', onClick: (e) => {
35
- e.stopPropagation();
36
- e.preventDefault();
37
- onRemove(index);
38
- } }));
38
+ const node = useMemo(() => {
39
+ switch (type) {
40
+ case TFileType.IMAGE:
41
+ return (jsx(MemoImage, { lazyload: true, src: url || src, fit: "cover", onMouseDown: (e) => e.preventDefault() }));
42
+ case TFileType.VIDEO:
43
+ return jsx("video", { src: url || src, preload: "none" });
44
+ default:
45
+ return (jsxs(Fragment, { children: [jsx(Icon, { icon: jsx(FilePresentOutlined, {}), size: "1.5em" }), jsx("span", { className: "i-upload-file-name", children: name })] }));
46
+ }
47
+ }, [type, url, src, name]);
39
48
  switch (mode) {
40
49
  case "card":
41
- let node = jsx(Fragment, {});
42
- switch (type) {
43
- case TFileType.IMAGE:
44
- node = (jsx(MemoImage, { lazyload: true, src: url || src, fit: 'cover', onMouseDown: (e) => e.preventDefault() }));
45
- break;
46
- case TFileType.VIDEO:
47
- node = jsx("video", { src: url || src, preload: 'none' });
48
- break;
49
- default:
50
- node = (jsxs(Fragment, { children: [jsx(Icon, { icon: jsx(ListAltRound, {}) }), jsx("span", { className: 'i-upload-file-name', children: title(name) })] }));
51
- break;
52
- }
53
- return (jsxs("div", { ref: ref, title: name, className: 'i-upload-item-card', onClick: () => onPreview?.(index), children: [node, CloseBtn] }));
50
+ return (jsxs("div", { ref: ref, className: "i-upload-item-card", onClick: handleClick, children: [node, jsx(CloseBtn, { index: index, onRemove: onRemove }), name && (jsx("span", { className: "px-12 py-8 i-upload-tip", children: name }))] }));
54
51
  default:
55
- return (jsxs("div", { ref: ref, className: 'i-upload-item', onClick: () => onPreview?.(index), children: [jsx("span", { children: name }), jsx("i", { className: 'i-upload-size', children: formatBytes(size ?? 0) }), CloseBtn] }, id));
52
+ return (jsxs("div", { ref: ref, className: "i-upload-item", onClick: handleClick, children: [jsx("span", { children: name }), jsx("i", { className: "i-upload-size", children: formatBytes(size ?? 0) }), jsx(CloseBtn, { index: index, onRemove: onRemove })] }));
56
53
  }
57
- };
54
+ });
58
55
 
59
56
  export { ListContainer, FileListItem as default };
60
57
  //# sourceMappingURL=renderFile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderFile.js","sources":["../../../../packages/components/upload/renderFile.tsx"],"sourcesContent":["import { ListAltRound } from \"@ricons/material\";\nimport { title } from \"radash\";\nimport { RefObject } from \"react\";\nimport SortableContainer from \"react-easy-sort\";\nimport { TFileType } from \"../../js/usePreview/type\";\nimport { formatBytes, getFileType } from \"../../js/utils\";\nimport Icon from \"../icon\";\nimport Image from \"../image\";\nimport Helpericon from \"../utils/helpericon\";\nimport { IUploadItem } from \"./type\";\n\nexport const ListContainer = (props) => {\n\tconst { sortable, onSortEnd, itemProps, ...restProps } = props;\n\tconst customProps = {\n\t\tclassName: \"i-upload-list\",\n\t\tonClick: (e) => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t},\n\t};\n\n\tif (!sortable) {\n\t\treturn <div {...customProps} {...restProps} />;\n\t}\n\treturn (\n\t\t<SortableContainer\n\t\t\tdraggedItemClassName='i-upload-item-dragged'\n\t\t\tonSortEnd={onSortEnd}\n\t\t\t{...customProps}\n\t\t\t{...restProps}\n\t\t/>\n\t);\n};\n\nconst FileListItem = (\n\tprops: IUploadItem & { ref?: RefObject<HTMLDivElement | null> }\n) => {\n\tconst { ref, mode, index, file, renderItem, onRemove, onPreview } = props;\n\n\tif (!file) return \"\";\n\n\tconst { id, name, size, url, src } = file;\n\tconst type = getFileType(name, file.type);\n\n\tif (renderItem) {\n\t\treturn renderItem(file, index);\n\t}\n\n\tconst CloseBtn = (\n\t\t<Helpericon\n\t\t\tactive\n\t\t\tclassName='i-upload-delete'\n\t\t\tonClick={(e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.preventDefault();\n\t\t\t\tonRemove(index);\n\t\t\t}}\n\t\t/>\n\t);\n\n\tswitch (mode) {\n\t\tcase \"card\":\n\t\t\tlet node = <></>;\n\n\t\t\tswitch (type) {\n\t\t\t\tcase TFileType.IMAGE:\n\t\t\t\t\tnode = (\n\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\tlazyload\n\t\t\t\t\t\t\tsrc={url || src}\n\t\t\t\t\t\t\tfit='cover'\n\t\t\t\t\t\t\tonMouseDown={(e) => e.preventDefault()}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TFileType.VIDEO:\n\t\t\t\t\tnode = <video src={url || src} preload='none' />;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tnode = (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<Icon icon={<ListAltRound />} />\n\t\t\t\t\t\t\t<span className='i-upload-file-name'>\n\t\t\t\t\t\t\t\t{title(name)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</>\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tref={ref}\n\t\t\t\t\ttitle={name}\n\t\t\t\t\tclassName='i-upload-item-card'\n\t\t\t\t\tonClick={() => onPreview?.(index)}\n\t\t\t\t>\n\t\t\t\t\t{node}\n\t\t\t\t\t{CloseBtn}\n\t\t\t\t</div>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tref={ref}\n\t\t\t\t\tkey={id}\n\t\t\t\t\tclassName='i-upload-item'\n\t\t\t\t\tonClick={() => onPreview?.(index)}\n\t\t\t\t>\n\t\t\t\t\t<span>{name}</span>\n\n\t\t\t\t\t<i className='i-upload-size'>{formatBytes(size ?? 0)}</i>\n\n\t\t\t\t\t{CloseBtn}\n\t\t\t\t</div>\n\t\t\t);\n\t}\n};\n\nexport default FileListItem;\n"],"names":["_jsx","_Fragment","Image","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"renderFile.js","sources":["../../../../packages/components/upload/renderFile.tsx"],"sourcesContent":["import { FilePresentOutlined } from \"@ricons/material\";\nimport { memo, MouseEvent, RefObject, useCallback, useMemo } from \"react\";\nimport SortableContainer from \"react-easy-sort\";\nimport { TFileType } from \"../../js/usePreview/type\";\nimport { formatBytes, getFileType } from \"../../js/utils\";\nimport Icon from \"../icon\";\nimport Image from \"../image\";\nimport Helpericon from \"../utils/helpericon\";\nimport { IUploadItem } from \"./type\";\n\ninterface ListContainerProps {\n sortable?: boolean;\n onSortEnd: (oldIndex: number, newIndex: number) => void;\n [key: string]: any;\n}\n\nexport const ListContainer = memo((props: ListContainerProps) => {\n const { sortable, onSortEnd, children, ...restProps } = props;\n\n if (!sortable) {\n return (\n <div\n className=\"i-upload-list\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n {...restProps}\n >\n {children}\n </div>\n );\n }\n return (\n <SortableContainer\n draggedItemClassName=\"i-upload-item-dragged\"\n onSortEnd={onSortEnd}\n className=\"i-upload-list\"\n {...restProps}\n >\n {children}\n </SortableContainer>\n );\n});\n\nconst CloseBtn = memo(\n ({ index, onRemove }: { index: number; onRemove: (i: number) => void }) => (\n <Helpericon\n active\n className=\"i-upload-delete\"\n onClick={(e: MouseEvent<HTMLElement>) => {\n e.stopPropagation();\n e.preventDefault();\n onRemove(index);\n }}\n />\n ),\n);\n\nconst FileListItem = memo(\n (props: IUploadItem & { ref?: RefObject<HTMLDivElement | null> }) => {\n const { ref, mode, index, file, renderItem, onRemove, onPreview } =\n props;\n\n if (!file) return null;\n\n const { name, size, url, src } = file;\n const type = getFileType(name, file.type);\n\n const handleClick = useCallback(() => {\n onPreview?.(index);\n }, [onPreview, index]);\n\n if (renderItem) {\n return renderItem(file, index);\n }\n\n const node = useMemo(() => {\n switch (type) {\n case TFileType.IMAGE:\n return (\n <Image\n lazyload\n src={url || src}\n fit=\"cover\"\n onMouseDown={(e: MouseEvent<HTMLImageElement>) =>\n e.preventDefault()\n }\n />\n );\n case TFileType.VIDEO:\n return <video src={url || src} preload=\"none\" />;\n default:\n return (\n <>\n <Icon icon={<FilePresentOutlined />} size=\"1.5em\" />\n <span className=\"i-upload-file-name\">{name}</span>\n </>\n );\n }\n }, [type, url, src, name]);\n\n switch (mode) {\n case \"card\":\n return (\n <div\n ref={ref}\n className=\"i-upload-item-card\"\n onClick={handleClick}\n >\n {node}\n <CloseBtn index={index} onRemove={onRemove} />\n {name && (\n <span className=\"px-12 py-8 i-upload-tip\">\n {name}\n </span>\n )}\n </div>\n );\n default:\n return (\n <div\n ref={ref}\n className=\"i-upload-item\"\n onClick={handleClick}\n >\n <span>{name}</span>\n <i className=\"i-upload-size\">\n {formatBytes(size ?? 0)}\n </i>\n <CloseBtn index={index} onRemove={onRemove} />\n </div>\n );\n }\n },\n);\n\nexport default FileListItem;\n"],"names":["_jsx","Image","_jsxs","_Fragment"],"mappings":"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"}