@ioca/react 1.5.4 → 1.5.6

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 (31) hide show
  1. package/lib/cjs/components/editor/controls.js +19 -37
  2. package/lib/cjs/components/editor/controls.js.map +1 -1
  3. package/lib/cjs/components/editor/editor.js +34 -27
  4. package/lib/cjs/components/editor/editor.js.map +1 -1
  5. package/lib/cjs/components/editor/memtion.js +99 -6
  6. package/lib/cjs/components/editor/memtion.js.map +1 -1
  7. package/lib/cjs/components/picker/colors/index.js +6 -5
  8. package/lib/cjs/components/picker/colors/index.js.map +1 -1
  9. package/lib/cjs/components/select/select.js +4 -4
  10. package/lib/cjs/components/select/select.js.map +1 -1
  11. package/lib/cjs/components/tabs/tabs.js +1 -1
  12. package/lib/cjs/components/tabs/tabs.js.map +1 -1
  13. package/lib/css/index.css +1 -1
  14. package/lib/css/index.css.map +1 -1
  15. package/lib/css/reset.css +2 -2
  16. package/lib/es/components/editor/controls.js +20 -38
  17. package/lib/es/components/editor/controls.js.map +1 -1
  18. package/lib/es/components/editor/editor.js +35 -28
  19. package/lib/es/components/editor/editor.js.map +1 -1
  20. package/lib/es/components/editor/memtion.js +99 -7
  21. package/lib/es/components/editor/memtion.js.map +1 -1
  22. package/lib/es/components/picker/colors/index.js +6 -5
  23. package/lib/es/components/picker/colors/index.js.map +1 -1
  24. package/lib/es/components/select/select.js +4 -4
  25. package/lib/es/components/select/select.js.map +1 -1
  26. package/lib/es/components/tabs/tabs.js +1 -1
  27. package/lib/es/components/tabs/tabs.js.map +1 -1
  28. package/lib/index.js +162 -80
  29. package/lib/types/components/editor/type.d.ts +1 -1
  30. package/lib/types/components/picker/type.d.ts +3 -1
  31. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"memtion.js","sources":["../../../../packages/components/editor/memtion.tsx"],"sourcesContent":["import { memo, ReactNode } from \"react\";\r\nimport { renderToStaticMarkup } from \"react-dom/server\";\r\nimport { escapeAttrValue } from \"xss\";\r\nimport List from \"../list\";\r\nimport { IEditorMemtion, IEditorMemtionOption } from \"./type\";\r\n\r\nexport const MEMTION_TAG_CLASS_NAME = \"i-memtion-tag\";\r\n\r\ninterface IMemtionProps {\r\n visible?: boolean;\r\n rect?: DOMRect | null;\r\n options?: IEditorMemtionOption[];\r\n activeIndex?: number;\r\n onActiveChange?: (index: number) => void;\r\n onSelect?: (option: IEditorMemtionOption) => void;\r\n}\r\n\r\ninterface IInsertMemtionOptionParams {\r\n editor: HTMLDivElement | null;\r\n range: Range | null;\r\n mode: \"rich\" | \"plaintext\";\r\n memtion?: IEditorMemtion;\r\n option: IEditorMemtionOption;\r\n sanitizeValue: (value: string) => string;\r\n}\r\n\r\nconst getInsertNode = (\r\n memtion: IEditorMemtion | undefined,\r\n option: IEditorMemtionOption,\r\n) => memtion?.insert?.(option) ?? option.value;\r\n\r\nconst getInsertText = (\r\n memtion: IEditorMemtion | undefined,\r\n option: IEditorMemtionOption,\r\n) => {\r\n const nextNode = getInsertNode(memtion, option);\r\n\r\n if (typeof nextNode === \"string\" || typeof nextNode === \"number\") {\r\n return `${String(nextNode)} `;\r\n }\r\n\r\n return `${String(option.value)} `;\r\n};\r\n\r\nconst getInsertHtml = (\r\n memtion: IEditorMemtion | undefined,\r\n option: IEditorMemtionOption,\r\n sanitizeValue: (value: string) => string,\r\n) => {\r\n const nextNode = getInsertNode(memtion, option);\r\n\r\n if (nextNode === null || nextNode === undefined || nextNode === false) {\r\n return \"\";\r\n }\r\n\r\n const content = sanitizeValue(\r\n renderToStaticMarkup(<>{nextNode as ReactNode}</>),\r\n );\r\n\r\n return `<span class=\"${MEMTION_TAG_CLASS_NAME}\" contenteditable=\"false\" data-memtion-value=\"${escapeAttrValue(String(option.value))}\">${content}</span>`;\r\n};\r\n\r\nexport const getSelectionRect = (range: Range | null) => {\r\n if (!range) return null;\r\n\r\n const rect = range.getBoundingClientRect();\r\n\r\n if (rect.width || rect.height) {\r\n return rect;\r\n }\r\n\r\n return range.getClientRects()[0] ?? rect;\r\n};\r\n\r\nexport const insertMemtionOption = ({\r\n editor,\r\n range,\r\n mode,\r\n memtion,\r\n option,\r\n sanitizeValue,\r\n}: IInsertMemtionOptionParams) => {\r\n if (!editor || !range) return null;\r\n\r\n const browserSelection = window.getSelection();\r\n if (!browserSelection) return null;\r\n\r\n const nextRange = range.cloneRange();\r\n browserSelection.removeAllRanges();\r\n browserSelection.addRange(nextRange);\r\n editor.focus();\r\n nextRange.deleteContents();\r\n\r\n if (mode === \"plaintext\") {\r\n const text = document.createTextNode(getInsertText(memtion, option));\r\n nextRange.insertNode(text);\r\n nextRange.setStartAfter(text);\r\n } else {\r\n const html = getInsertHtml(memtion, option, sanitizeValue);\r\n const fragment = nextRange.createContextualFragment(html);\r\n const lastNode = fragment.lastChild;\r\n const spacing = document.createTextNode(\" \");\r\n\r\n nextRange.insertNode(fragment);\r\n\r\n if (lastNode) {\r\n nextRange.setStartAfter(lastNode);\r\n nextRange.collapse(true);\r\n }\r\n\r\n nextRange.insertNode(spacing);\r\n nextRange.setStartAfter(spacing);\r\n }\r\n\r\n nextRange.collapse(true);\r\n browserSelection.removeAllRanges();\r\n browserSelection.addRange(nextRange);\r\n\r\n return nextRange;\r\n};\r\n\r\nexport const getMemtionText = (\r\n triggerRange: Range | null,\r\n selectionRange: Range | null,\r\n) => {\r\n if (!triggerRange || !selectionRange) return \"\";\r\n\r\n const range = triggerRange.cloneRange();\r\n range.setEnd(selectionRange.endContainer, selectionRange.endOffset);\r\n\r\n return range.toString();\r\n};\r\n\r\nexport const getMemtionReplaceRange = (\r\n triggerRange: Range | null,\r\n selectionRange: Range | null,\r\n) => {\r\n if (!triggerRange || !selectionRange) return null;\r\n\r\n const range = triggerRange.cloneRange();\r\n range.setEnd(selectionRange.endContainer, selectionRange.endOffset);\r\n\r\n return range;\r\n};\r\n\r\nexport const filterMemtionOptions = (\r\n options: IEditorMemtionOption[],\r\n keyword: string,\r\n) => {\r\n const normalizedKeyword = keyword.trim().toLowerCase();\r\n\r\n if (!normalizedKeyword) {\r\n return options;\r\n }\r\n\r\n return options.filter((option) =>\r\n String(option.value).toLowerCase().includes(normalizedKeyword),\r\n );\r\n};\r\n\r\nconst isMemtionTag = (node: Node | null) =>\r\n node instanceof HTMLElement &&\r\n node.classList.contains(MEMTION_TAG_CLASS_NAME);\r\n\r\nconst getAdjacentMemtionTag = (\r\n range: Range,\r\n direction: \"backward\" | \"forward\",\r\n) => {\r\n const { startContainer, startOffset } = range;\r\n\r\n if (startContainer.nodeType === Node.TEXT_NODE) {\r\n const textNode = startContainer as Text;\r\n\r\n if (direction === \"backward\" && startOffset === 0) {\r\n return isMemtionTag(textNode.previousSibling)\r\n ? (textNode.previousSibling as HTMLElement)\r\n : null;\r\n }\r\n\r\n if (direction === \"forward\" && startOffset === textNode.data.length) {\r\n return isMemtionTag(textNode.nextSibling)\r\n ? (textNode.nextSibling as HTMLElement)\r\n : null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n const element = startContainer as Element;\r\n const targetIndex =\r\n direction === \"backward\" ? startOffset - 1 : startOffset;\r\n const targetNode = element.childNodes.item(targetIndex);\r\n\r\n return isMemtionTag(targetNode) ? (targetNode as HTMLElement) : null;\r\n};\r\n\r\nexport const removeAdjacentMemtionTag = (\r\n editor: HTMLDivElement | null,\r\n key: \"Backspace\" | \"Delete\",\r\n) => {\r\n if (!editor) return false;\r\n\r\n const selection = window.getSelection();\r\n if (!selection?.rangeCount || !selection.isCollapsed) return false;\r\n\r\n const activeRange = selection.getRangeAt(0);\r\n const tag = getAdjacentMemtionTag(\r\n activeRange,\r\n key === \"Backspace\" ? \"backward\" : \"forward\",\r\n );\r\n\r\n if (!tag || !tag.parentNode) return false;\r\n\r\n const parent = tag.parentNode;\r\n const nextSibling = tag.nextSibling;\r\n const index = Array.prototype.indexOf.call(parent.childNodes, tag);\r\n\r\n if (nextSibling?.nodeType === Node.TEXT_NODE) {\r\n const textNode = nextSibling as Text;\r\n\r\n if (textNode.data.startsWith(\" \")) {\r\n textNode.deleteData(0, 1);\r\n\r\n if (!textNode.data.length) {\r\n nextSibling.remove();\r\n }\r\n }\r\n }\r\n\r\n tag.remove();\r\n\r\n const range = document.createRange();\r\n range.setStart(parent, Math.min(index, parent.childNodes.length));\r\n range.collapse(true);\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n editor.focus();\r\n\r\n return true;\r\n};\r\n\r\nconst Memtion = (props: IMemtionProps) => {\r\n const { visible, rect, options, activeIndex, onActiveChange, onSelect } =\r\n props;\r\n\r\n if (!visible || !rect || !options?.length) {\r\n return null;\r\n }\r\n\r\n return (\r\n <List\r\n className=\"i-editor-memtion\"\r\n type=\"option\"\r\n style={{\r\n position: \"fixed\",\r\n top: rect.bottom,\r\n left: rect.left,\r\n }}\r\n >\r\n {options.map((option, i) => (\r\n <List.Item\r\n key={`${option.value}-${i}`}\r\n type=\"option\"\r\n active={i === activeIndex}\r\n onMouseDown={(e) => e.preventDefault()}\r\n onMouseEnter={() => onActiveChange?.(i)}\r\n onClick={() => onSelect?.(option)}\r\n >\r\n {option.label}\r\n </List.Item>\r\n ))}\r\n </List>\r\n );\r\n};\r\n\r\nexport default memo(Memtion);\r\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 } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { renderToStaticMarkup } from \"react-dom/server\";\r\nimport List from \"../list\";\r\nimport { IEditorMemtion, IEditorMemtionOption } from \"./type\";\r\n\r\nexport const MEMTION_TAG_CLASS_NAME = \"i-memtion-tag\";\r\n\r\nconst blockTags = new Set([\r\n \"ADDRESS\",\r\n \"ARTICLE\",\r\n \"ASIDE\",\r\n \"BLOCKQUOTE\",\r\n \"DIV\",\r\n \"DL\",\r\n \"FIELDSET\",\r\n \"FIGCAPTION\",\r\n \"FIGURE\",\r\n \"FOOTER\",\r\n \"FORM\",\r\n \"H1\",\r\n \"H2\",\r\n \"H3\",\r\n \"H4\",\r\n \"H5\",\r\n \"H6\",\r\n \"HEADER\",\r\n \"LI\",\r\n \"MAIN\",\r\n \"NAV\",\r\n \"OL\",\r\n \"P\",\r\n \"PRE\",\r\n \"SECTION\",\r\n \"TABLE\",\r\n \"TD\",\r\n \"TH\",\r\n \"TR\",\r\n \"UL\",\r\n]);\r\n\r\nconst escapeHtmlAttr = (value: string) =>\r\n value\r\n .replaceAll(\"&\", \"&amp;\")\r\n .replaceAll('\"', \"&quot;\")\r\n .replaceAll(\"<\", \"&lt;\")\r\n .replaceAll(\">\", \"&gt;\");\r\n\r\ninterface IMemtionProps {\r\n visible?: boolean;\r\n rect?: DOMRect | null;\r\n options?: IEditorMemtionOption[];\r\n activeIndex?: number;\r\n onActiveChange?: (index: number) => void;\r\n onSelect?: (option: IEditorMemtionOption) => void;\r\n}\r\n\r\ninterface IInsertMemtionOptionParams {\r\n editor: HTMLDivElement | null;\r\n range: Range | null;\r\n mode: \"rich\" | \"plaintext\" | \"plaintextOnMemtion\";\r\n memtion?: IEditorMemtion;\r\n option: IEditorMemtionOption;\r\n sanitizeValue: (value: string) => string;\r\n}\r\n\r\nconst getInsertNode = (\r\n memtion: IEditorMemtion | undefined,\r\n option: IEditorMemtionOption,\r\n) => memtion?.insert?.(option) ?? option.value;\r\n\r\nconst getInsertText = (\r\n memtion: IEditorMemtion | undefined,\r\n option: IEditorMemtionOption,\r\n) => {\r\n const nextNode = getInsertNode(memtion, option);\r\n\r\n if (typeof nextNode === \"string\" || typeof nextNode === \"number\") {\r\n return `${String(nextNode)} `;\r\n }\r\n\r\n return `${String(option.value)} `;\r\n};\r\n\r\nconst getInsertHtml = (\r\n memtion: IEditorMemtion | undefined,\r\n option: IEditorMemtionOption,\r\n sanitizeValue: (value: string) => string,\r\n) => {\r\n const nextNode = getInsertNode(memtion, option);\r\n\r\n if (nextNode === null || nextNode === undefined || nextNode === false) {\r\n return \"\";\r\n }\r\n\r\n const content = sanitizeValue(\r\n renderToStaticMarkup(<>{nextNode as ReactNode}</>),\r\n );\r\n\r\n return `<span class=\"${MEMTION_TAG_CLASS_NAME}\" contenteditable=\"false\" data-memtion-value=\"${escapeHtmlAttr(String(option.value))}\">${content}</span>`;\r\n};\r\n\r\nexport const getSelectionRect = (range: Range | null) => {\r\n if (!range) return null;\r\n\r\n const rect = range.getBoundingClientRect();\r\n\r\n if (rect.width || rect.height) {\r\n return rect;\r\n }\r\n\r\n return range.getClientRects()[0] ?? rect;\r\n};\r\n\r\nexport const insertMemtionOption = ({\r\n editor,\r\n range,\r\n mode,\r\n memtion,\r\n option,\r\n sanitizeValue,\r\n}: IInsertMemtionOptionParams) => {\r\n if (!editor || !range) return null;\r\n\r\n const browserSelection = window.getSelection();\r\n if (!browserSelection) return null;\r\n\r\n const nextRange = range.cloneRange();\r\n browserSelection.removeAllRanges();\r\n browserSelection.addRange(nextRange);\r\n editor.focus();\r\n nextRange.deleteContents();\r\n\r\n if (mode === \"plaintext\") {\r\n const text = document.createTextNode(getInsertText(memtion, option));\r\n nextRange.insertNode(text);\r\n nextRange.setStartAfter(text);\r\n } else {\r\n const html = getInsertHtml(memtion, option, sanitizeValue);\r\n const fragment = nextRange.createContextualFragment(html);\r\n const lastNode = fragment.lastChild;\r\n\r\n nextRange.insertNode(fragment);\r\n\r\n if (lastNode) {\r\n nextRange.setStartAfter(lastNode);\r\n nextRange.collapse(true);\r\n }\r\n }\r\n\r\n nextRange.collapse(true);\r\n browserSelection.removeAllRanges();\r\n browserSelection.addRange(nextRange);\r\n\r\n return nextRange;\r\n};\r\n\r\nexport const getMemtionText = (\r\n triggerRange: Range | null,\r\n selectionRange: Range | null,\r\n) => {\r\n if (!triggerRange || !selectionRange) return \"\";\r\n\r\n const range = triggerRange.cloneRange();\r\n range.setEnd(selectionRange.endContainer, selectionRange.endOffset);\r\n\r\n return range.toString();\r\n};\r\n\r\nexport const getMemtionReplaceRange = (\r\n triggerRange: Range | null,\r\n selectionRange: Range | null,\r\n) => {\r\n if (!triggerRange || !selectionRange) return null;\r\n\r\n const range = triggerRange.cloneRange();\r\n range.setEnd(selectionRange.endContainer, selectionRange.endOffset);\r\n\r\n return range;\r\n};\r\n\r\nexport const filterMemtionOptions = (\r\n options: IEditorMemtionOption[],\r\n keyword: string,\r\n) => {\r\n const normalizedKeyword = keyword.trim().toLowerCase();\r\n\r\n if (!normalizedKeyword) {\r\n return options;\r\n }\r\n\r\n return options.filter((option) =>\r\n String(option.value).toLowerCase().includes(normalizedKeyword),\r\n );\r\n};\r\n\r\nconst isMemtionTag = (node: Node | null) =>\r\n node instanceof HTMLElement &&\r\n node.classList.contains(MEMTION_TAG_CLASS_NAME);\r\n\r\nconst appendBreak = (container: HTMLElement) => {\r\n if (!container.lastChild || container.lastChild.nodeName === \"BR\") {\r\n return;\r\n }\r\n\r\n container.appendChild(document.createElement(\"br\"));\r\n};\r\n\r\nconst appendPlaintextOnMemtionNode = (\r\n container: HTMLElement,\r\n node: Node | null,\r\n) => {\r\n if (!node) return;\r\n\r\n if (node.nodeType === Node.TEXT_NODE) {\r\n container.appendChild(\r\n document.createTextNode(\r\n (node.textContent ?? \"\").replaceAll(\"\\r\", \"\"),\r\n ),\r\n );\r\n return;\r\n }\r\n\r\n if (!(node instanceof HTMLElement)) {\r\n return;\r\n }\r\n\r\n if (isMemtionTag(node)) {\r\n const tag = document.createElement(\"span\");\r\n const memtionValue = node.getAttribute(\"data-memtion-value\");\r\n\r\n tag.className = MEMTION_TAG_CLASS_NAME;\r\n tag.setAttribute(\"contenteditable\", \"false\");\r\n\r\n if (memtionValue !== null) {\r\n tag.setAttribute(\"data-memtion-value\", memtionValue);\r\n }\r\n\r\n tag.innerHTML = node.innerHTML;\r\n container.appendChild(tag);\r\n return;\r\n }\r\n\r\n if (node.tagName === \"BR\") {\r\n appendBreak(container);\r\n return;\r\n }\r\n\r\n Array.from(node.childNodes).forEach((child) => {\r\n appendPlaintextOnMemtionNode(container, child);\r\n });\r\n\r\n if (blockTags.has(node.tagName)) {\r\n appendBreak(container);\r\n }\r\n};\r\n\r\nexport const sanitizePlaintextOnMemtionHtml = (value: string) => {\r\n if (typeof document === \"undefined\") {\r\n return value;\r\n }\r\n\r\n const source = document.createElement(\"div\");\r\n const result = document.createElement(\"div\");\r\n\r\n source.innerHTML = value;\r\n\r\n Array.from(source.childNodes).forEach((child) => {\r\n appendPlaintextOnMemtionNode(result, child);\r\n });\r\n\r\n while (result.lastChild?.nodeName === \"BR\") {\r\n result.lastChild.remove();\r\n }\r\n\r\n return result.innerHTML;\r\n};\r\n\r\nconst getAdjacentMemtionTag = (\r\n range: Range,\r\n direction: \"backward\" | \"forward\",\r\n) => {\r\n const { startContainer, startOffset } = range;\r\n\r\n if (startContainer.nodeType === Node.TEXT_NODE) {\r\n const textNode = startContainer as Text;\r\n\r\n if (direction === \"backward\" && startOffset === 0) {\r\n return isMemtionTag(textNode.previousSibling)\r\n ? (textNode.previousSibling as HTMLElement)\r\n : null;\r\n }\r\n\r\n if (direction === \"forward\" && startOffset === textNode.data.length) {\r\n return isMemtionTag(textNode.nextSibling)\r\n ? (textNode.nextSibling as HTMLElement)\r\n : null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n const element = startContainer as Element;\r\n const targetIndex =\r\n direction === \"backward\" ? startOffset - 1 : startOffset;\r\n const targetNode = element.childNodes.item(targetIndex);\r\n\r\n return isMemtionTag(targetNode) ? (targetNode as HTMLElement) : null;\r\n};\r\n\r\nexport const removeAdjacentMemtionTag = (\r\n editor: HTMLDivElement | null,\r\n key: \"Backspace\" | \"Delete\",\r\n) => {\r\n if (!editor) return false;\r\n\r\n const selection = window.getSelection();\r\n if (!selection?.rangeCount || !selection.isCollapsed) return false;\r\n\r\n const activeRange = selection.getRangeAt(0);\r\n const tag = getAdjacentMemtionTag(\r\n activeRange,\r\n key === \"Backspace\" ? \"backward\" : \"forward\",\r\n );\r\n\r\n if (!tag || !tag.parentNode) return false;\r\n\r\n const parent = tag.parentNode;\r\n const nextSibling = tag.nextSibling;\r\n const index = Array.prototype.indexOf.call(parent.childNodes, tag);\r\n\r\n if (nextSibling?.nodeType === Node.TEXT_NODE) {\r\n const textNode = nextSibling as Text;\r\n\r\n if (textNode.data.startsWith(\" \")) {\r\n textNode.deleteData(0, 1);\r\n\r\n if (!textNode.data.length) {\r\n nextSibling.remove();\r\n }\r\n }\r\n }\r\n\r\n tag.remove();\r\n\r\n const range = document.createRange();\r\n range.setStart(parent, Math.min(index, parent.childNodes.length));\r\n range.collapse(true);\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n editor.focus();\r\n\r\n return true;\r\n};\r\n\r\nconst Memtion = (props: IMemtionProps) => {\r\n const { visible, rect, options, activeIndex, onActiveChange, onSelect } =\r\n props;\r\n\r\n if (!visible || !rect || !options?.length) {\r\n return null;\r\n }\r\n\r\n const content = (\r\n <List\r\n className=\"i-editor-memtion\"\r\n type=\"option\"\r\n style={{\r\n position: \"fixed\",\r\n top: rect.bottom,\r\n left: rect.left,\r\n }}\r\n >\r\n {options.map((option, i) => (\r\n <List.Item\r\n key={`${option.value}-${i}`}\r\n type=\"option\"\r\n active={i === activeIndex}\r\n onMouseDown={(e) => e.preventDefault()}\r\n onMouseEnter={() => onActiveChange?.(i)}\r\n onClick={() => onSelect?.(option)}\r\n >\r\n {option.label}\r\n </List.Item>\r\n ))}\r\n </List>\r\n );\r\n\r\n if (typeof document === \"undefined\") {\r\n return content;\r\n }\r\n\r\n return createPortal(content, document.body);\r\n};\r\n\r\nexport default memo(Memtion);\r\n"],"names":["_jsx","_Fragment"],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import ColorsPanel from '@rc-component/color-picker';
3
3
  import { useState, useEffect } from 'react';
4
+ import InputContainer from '../../input/container.js';
4
5
  import Popup from '../../popup/popup.js';
5
6
  import Footer, { ColorMethods } from './footer.js';
6
7
  import Handle from './handle.js';
7
8
 
8
9
  function ColorPicker(props) {
9
- const { value, type = "HEX", disabledAlpha, children, usePanel, handle = "both", placeholder = "Colors", popupProps, onChange, } = props;
10
+ const { value, type = "HEX", disabledAlpha, children, usePanel, handle = "both", placeholder = "Colors", popupProps, onChange, label, required, ...restProps } = props;
10
11
  const [colorType, setColorType] = useState(type);
11
12
  const [colorValue, setColorValue] = useState(value);
12
13
  const [syncValue, setSyncValue] = useState(value);
@@ -48,11 +49,11 @@ function ColorPicker(props) {
48
49
  }
49
50
  }, [popupProps?.visible]);
50
51
  if (usePanel) {
51
- return jsx(ColorsPanel, { ...props });
52
+ return (jsx(InputContainer, { label: label, required: required, children: jsx(ColorsPanel, { ...restProps, value: value, onChange: onChange }) }));
52
53
  }
53
- return (jsx(Popup, { trigger: 'click', touchable: true, position: 'bottom', ...popupProps, visible: visible, content: jsx(ColorsPanel, { value: syncValue, disabledAlpha: disabledAlpha, panelRender: (panel) => {
54
- return (jsxs(Fragment, { children: [panel, jsx(Footer, { value: colorValue, type: colorType, onTypeChange: handleTypeChange, onChange: handleValueChange, onOk: handleOk })] }));
55
- }, onChange: handleChange, onChangeComplete: handleComplete }), onVisibleChange: handleVisibleChange, children: children ?? (jsx(Handle, { color: value, handle: handle, placeholder: placeholder })) }));
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 (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 })) }) }));
56
57
  }
57
58
 
58
59
  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\";\r\nimport { useEffect, useState } from \"react\";\r\nimport Popup from \"../../popup\";\r\nimport { IColorPicker } from \"../type\";\r\nimport Footer, { ColorMethods } from \"./footer\";\r\nimport Handle from \"./handle\";\r\nimport \"./index.css\";\r\n\r\nexport default function ColorPicker(props: IColorPicker) {\r\n\tconst {\r\n\t\tvalue,\r\n\t\ttype = \"HEX\",\r\n\t\tdisabledAlpha,\r\n\t\tchildren,\r\n\t\tusePanel,\r\n\t\thandle = \"both\",\r\n\t\tplaceholder = \"Colors\",\r\n\t\tpopupProps,\r\n\t\tonChange,\r\n\t} = props;\r\n\r\n\tconst [colorType, setColorType] = useState(type);\r\n\tconst [colorValue, setColorValue] = useState(value);\r\n\tconst [syncValue, setSyncValue] = useState(value);\r\n\tconst [visible, setVisible] = useState<boolean | undefined>(popupProps?.visible);\r\n\r\n\tconst handleChange = (target) => {\r\n\t\tsetSyncValue(target);\r\n\t};\r\n\r\n\tconst handleComplete = (target) => {\r\n\t\tconst method = ColorMethods[colorType];\r\n\r\n\t\tif (target.a !== 1) {\r\n\t\t\ttarget.a = parseFloat(target.a.toFixed(3));\r\n\t\t}\r\n\r\n\t\tsetColorValue(target[method]?.());\r\n\t};\r\n\r\n\tconst handleVisibleChange = (v: boolean) => {\r\n\t\tsetVisible(v);\r\n\t\tpopupProps?.onVisibleChange?.(v);\r\n\t};\r\n\r\n\tconst handleTypeChange = (t) => {\r\n\t\tconst method = ColorMethods[t];\r\n\r\n\t\tsetColorType(t);\r\n\t\tsetColorValue(syncValue?.[method]?.());\r\n\t};\r\n\r\n\tconst handleValueChange = (v) => {\r\n\t\tsetColorValue(v);\r\n\t\tsetSyncValue(v);\r\n\t};\r\n\r\n\tconst handleOk = () => {\r\n\t\tonChange?.(colorValue);\r\n\t\tsetVisible(false);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tsetSyncValue(value);\r\n\t\tsetColorValue(value);\r\n\t}, [value]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (popupProps?.visible !== undefined) {\r\n\t\t\tsetVisible(popupProps.visible);\r\n\t\t}\r\n\t}, [popupProps?.visible]);\r\n\r\n\tif (usePanel) {\r\n\t\treturn <ColorsPanel {...props} />;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<Popup\r\n\t\t\ttrigger='click'\r\n\t\t\ttouchable\r\n\t\t\tposition='bottom'\r\n\t\t\t{...popupProps}\r\n\t\t\tvisible={visible}\r\n\t\t\tcontent={\r\n\t\t\t\t<ColorsPanel\r\n\t\t\t\t\tvalue={syncValue}\r\n\t\t\t\t\tdisabledAlpha={disabledAlpha}\r\n\t\t\t\t\tpanelRender={(panel) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t{panel}\r\n\t\t\t\t\t\t\t\t<Footer\r\n\t\t\t\t\t\t\t\t\tvalue={colorValue}\r\n\t\t\t\t\t\t\t\t\ttype={colorType}\r\n\t\t\t\t\t\t\t\t\tonTypeChange={handleTypeChange}\r\n\t\t\t\t\t\t\t\t\tonChange={handleValueChange}\r\n\t\t\t\t\t\t\t\t\tonOk={handleOk}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tonChange={handleChange}\r\n\t\t\t\t\tonChangeComplete={handleComplete}\r\n\t\t\t\t/>\r\n\t\t\t}\r\n\t\t\tonVisibleChange={handleVisibleChange}\r\n\t\t>\r\n\t\t\t{children ?? (\r\n\t\t\t\t<Handle\r\n\t\t\t\t\tcolor={value}\r\n\t\t\t\t\thandle={handle}\r\n\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</Popup>\r\n\t);\r\n}\r\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\";\r\nimport { useEffect, useState } from \"react\";\r\nimport InputContainer from \"../../input/container\";\r\nimport Popup from \"../../popup\";\r\nimport { IColorPicker } from \"../type\";\r\nimport Footer, { ColorMethods } from \"./footer\";\r\nimport Handle from \"./handle\";\r\nimport \"./index.css\";\r\n\r\nexport default function ColorPicker(props: IColorPicker) {\r\n const {\r\n value,\r\n type = \"HEX\",\r\n disabledAlpha,\r\n children,\r\n usePanel,\r\n handle = \"both\",\r\n placeholder = \"Colors\",\r\n popupProps,\r\n onChange,\r\n label,\r\n required,\r\n ...restProps\r\n } = props;\r\n\r\n const [colorType, setColorType] = useState(type);\r\n const [colorValue, setColorValue] = useState(value);\r\n const [syncValue, setSyncValue] = useState(value);\r\n const [visible, setVisible] = useState<boolean | undefined>(\r\n popupProps?.visible,\r\n );\r\n\r\n const handleChange = (target) => {\r\n setSyncValue(target);\r\n };\r\n\r\n const handleComplete = (target) => {\r\n const method = ColorMethods[colorType];\r\n\r\n if (target.a !== 1) {\r\n target.a = parseFloat(target.a.toFixed(3));\r\n }\r\n\r\n setColorValue(target[method]?.());\r\n };\r\n\r\n const handleVisibleChange = (v: boolean) => {\r\n setVisible(v);\r\n popupProps?.onVisibleChange?.(v);\r\n };\r\n\r\n const handleTypeChange = (t) => {\r\n const method = ColorMethods[t];\r\n\r\n setColorType(t);\r\n setColorValue(syncValue?.[method]?.());\r\n };\r\n\r\n const handleValueChange = (v) => {\r\n setColorValue(v);\r\n setSyncValue(v);\r\n };\r\n\r\n const handleOk = () => {\r\n onChange?.(colorValue);\r\n setVisible(false);\r\n };\r\n\r\n useEffect(() => {\r\n setSyncValue(value);\r\n setColorValue(value);\r\n }, [value]);\r\n\r\n useEffect(() => {\r\n if (popupProps?.visible !== undefined) {\r\n setVisible(popupProps.visible);\r\n }\r\n }, [popupProps?.visible]);\r\n\r\n if (usePanel) {\r\n return (\r\n <InputContainer label={label} required={required}>\r\n <ColorsPanel {...restProps} value={value} onChange={onChange} />\r\n </InputContainer>\r\n );\r\n }\r\n\r\n return (\r\n <InputContainer label={label} required={required}>\r\n <Popup\r\n trigger=\"click\"\r\n touchable\r\n position=\"bottom\"\r\n {...popupProps}\r\n visible={visible}\r\n content={\r\n <ColorsPanel\r\n {...restProps}\r\n value={syncValue}\r\n disabledAlpha={disabledAlpha}\r\n panelRender={(panel) => {\r\n return (\r\n <>\r\n {panel}\r\n <Footer\r\n value={colorValue}\r\n type={colorType}\r\n onTypeChange={handleTypeChange}\r\n onChange={handleValueChange}\r\n onOk={handleOk}\r\n />\r\n </>\r\n );\r\n }}\r\n onChange={handleChange}\r\n onChangeComplete={handleComplete}\r\n />\r\n }\r\n onVisibleChange={handleVisibleChange}\r\n >\r\n {children ?? (\r\n <Handle\r\n color={value}\r\n handle={handle}\r\n placeholder={placeholder}\r\n />\r\n )}\r\n </Popup>\r\n </InputContainer>\r\n );\r\n}\r\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
@@ -9,7 +9,7 @@ import Helpericon from '../utils/helpericon/helpericon.js';
9
9
  import { displayValue, Options } from './options.js';
10
10
 
11
11
  const Select = (props) => {
12
- const { ref, type = "text", name, label, value = "", placeholder, options = [], multiple, prepend, append, labelInline, style, className, message, status = "normal", hideClear, hideArrow, maxDisplay, border, filter, tip, filterPlaceholder = "...", popupProps, onSelect, onChange, ...restProps } = props;
12
+ const { ref, type = "text", name, label, value = "", placeholder, required, options = [], multiple, prepend, append, labelInline, style, className, message, status = "normal", hideClear, hideArrow, maxDisplay, border, filter, tip, filterPlaceholder = "...", popupProps, onSelect, onChange, ...restProps } = props;
13
13
  const [filterValue, setFilterValue] = useState("");
14
14
  const [selectedValue, setSelectedValue] = useState(value);
15
15
  const [active, setActive] = useState(false);
@@ -76,11 +76,11 @@ const Select = (props) => {
76
76
  const text = message ?? tip;
77
77
  return (jsxs("label", { className: classNames("i-input-label", className, {
78
78
  "i-input-inline": labelInline,
79
- }), style: style, children: [label && jsx("span", { className: 'i-input-label-text', children: label }), jsx(Popup, { position: 'bottom', arrow: false, fitSize: true, offset: 0, ...popupProps, visible: active, trigger: 'none', onVisibleChange: handleVisibleChange, content: jsx(Options, { options: filterOptions, value: selectedValue, multiple: multiple, filter: !!filter, filterPlaceholder: filterPlaceholder, onSelect: handleSelect, onFilter: handleFilterChange }), children: jsxs("div", { className: classNames("i-input-item", {
79
+ }), style: style, children: [label && (jsxs("span", { className: "i-input-label-text", children: [required && jsx("span", { className: "error", children: "*" }), label] })), jsx(Popup, { position: "bottom", arrow: false, fitSize: true, offset: 0, ...popupProps, visible: active, trigger: "none", onVisibleChange: handleVisibleChange, content: jsx(Options, { options: filterOptions, value: selectedValue, multiple: multiple, filter: !!filter, filterPlaceholder: filterPlaceholder, onSelect: handleSelect, onFilter: handleFilterChange }), children: jsxs("div", { className: classNames("i-input-item", {
80
80
  [`i-input-${status}`]: status !== "normal",
81
81
  "i-input-borderless": !border,
82
82
  "i-input-focus": active,
83
- }), onClick: () => setActive(true), children: [prepend, jsx("input", { ref: ref, type: 'hidden', value: selectedValue, ...restProps }), multiple ? (hasValue ? (jsx("div", { className: classNames("i-input i-select", {
83
+ }), onClick: () => setActive(true), children: [prepend, jsx("input", { ref: ref, type: "hidden", value: selectedValue, ...restProps }), multiple ? (hasValue ? (jsx("div", { className: classNames("i-input i-select", {
84
84
  "i-select-multiple": multiple,
85
85
  }), children: displayValue({
86
86
  options: formattedOptions,
@@ -88,7 +88,7 @@ const Select = (props) => {
88
88
  multiple,
89
89
  maxDisplay,
90
90
  onSelect: handleSelect,
91
- }) })) : (jsx("input", { className: 'i-input i-select', placeholder: placeholder, readOnly: true }))) : null, !multiple && (jsx("input", { value: active ? filterValue : displayLabel, className: 'i-input i-select', placeholder: displayLabel || placeholder, onChange: handleInputChange, readOnly: !filter })), jsx(Helpericon, { active: !hideArrow, icon: clearable ? undefined : jsx(UnfoldMoreRound, {}), onClick: handleHelperClick }), append] }) }), text && jsx("span", { className: 'i-input-message', children: text })] }));
91
+ }) })) : (jsx("input", { className: "i-input i-select", placeholder: placeholder, readOnly: true }))) : null, !multiple && (jsx("input", { value: active ? filterValue : displayLabel, className: "i-input i-select", placeholder: displayLabel || placeholder, onChange: handleInputChange, readOnly: !filter })), jsx(Helpericon, { active: !hideArrow, icon: clearable ? undefined : jsx(UnfoldMoreRound, {}), onClick: handleHelperClick }), append] }) }), text && jsx("span", { className: "i-input-message", children: text })] }));
92
92
  };
93
93
 
94
94
  export { Select as default };
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","sources":["../../../../packages/components/select/select.tsx"],"sourcesContent":["import { UnfoldMoreRound } from \"@ricons/material\";\r\nimport classNames from \"classnames\";\r\nimport { debounce } from \"radash\";\r\nimport { ChangeEvent, useEffect, useMemo, useState } from \"react\";\r\nimport \"../../css/input.css\";\r\nimport { formatOption } from \"../../js/utils\";\r\nimport { TOption } from \"../../type\";\r\nimport Popup from \"../popup\";\r\nimport Helpericon from \"../utils/helpericon\";\r\nimport \"./index.css\";\r\nimport { Options, displayValue } from \"./options\";\r\nimport { ISelect } from \"./type\";\r\n\r\nconst Select = (props: ISelect) => {\r\n\tconst {\r\n\t\tref,\r\n\t\ttype = \"text\",\r\n\t\tname,\r\n\t\tlabel,\r\n\t\tvalue = \"\",\r\n\t\tplaceholder,\r\n\t\toptions = [],\r\n\t\tmultiple,\r\n\t\tprepend,\r\n\t\tappend,\r\n\t\tlabelInline,\r\n\t\tstyle,\r\n\t\tclassName,\r\n\t\tmessage,\r\n\t\tstatus = \"normal\",\r\n\t\thideClear,\r\n\t\thideArrow,\r\n\t\tmaxDisplay,\r\n\t\tborder,\r\n\t\tfilter,\r\n\t\ttip,\r\n\t\tfilterPlaceholder = \"...\",\r\n\t\tpopupProps,\r\n\t\tonSelect,\r\n\t\tonChange,\r\n\t\t...restProps\r\n\t} = props;\r\n\r\n\tconst [filterValue, setFilterValue] = useState(\"\");\r\n\tconst [selectedValue, setSelectedValue] = useState(value);\r\n\r\n\tconst [active, setActive] = useState<boolean>(false);\r\n\r\n\tconst formattedOptions = useMemo(() => formatOption(options), [options]);\r\n\r\n\tconst filterOptions = useMemo(() => {\r\n\t\tconst fv = filterValue;\r\n\t\tif (!fv || !filter) return formattedOptions;\r\n\r\n\t\tconst filterFn =\r\n\t\t\ttypeof filter === \"function\"\r\n\t\t\t\t? filter\r\n\t\t\t\t: (opt) => opt.value.includes(fv) || opt.label.includes(fv);\r\n\r\n\t\treturn formattedOptions.filter(filterFn);\r\n\t}, [formattedOptions, filter, filterValue]);\r\n\r\n\tconst changeValue = (v: any) => {\r\n\t\tsetSelectedValue(v);\r\n\t\tonChange?.(v);\r\n\t};\r\n\r\n\tconst displayLabel = useMemo(() => {\r\n\t\tif (multiple) {\r\n\t\t\treturn \"\";\r\n\t\t}\r\n\r\n\t\tconst option = formattedOptions.find(\r\n\t\t\t(opt) => opt.value === selectedValue\r\n\t\t);\r\n\t\treturn option ? option.label : selectedValue;\r\n\t}, [selectedValue, formattedOptions]);\r\n\r\n\tconst handleSelect = (value: any, option?: TOption) => {\r\n\t\tonSelect?.(value, option);\r\n\r\n\t\tif (multiple) {\r\n\t\t\tconst values = [...(selectedValue as any[])];\r\n\t\t\tconst i = values.findIndex((v) => v === value);\r\n\r\n\t\t\ti > -1 ? values.splice(i, 1) : values.push(value);\r\n\t\t\tchangeValue(values as any);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetActive(false);\r\n\t\tchangeValue(value);\r\n\t};\r\n\r\n\tconst handleVisibleChange = (visible: boolean) => {\r\n\t\tsetActive(visible);\r\n\r\n\t\tif (!filter) return;\r\n\r\n\t\tsetFilterValue(\"\");\r\n\t};\r\n\r\n\tconst handleHelperClick = (e) => {\r\n\t\te.stopPropagation();\r\n\t\tsetActive(true);\r\n\t\tif (!active) return;\r\n\r\n\t\tchangeValue(multiple ? [] : \"\");\r\n\t};\r\n\r\n\tconst handleFilterChange = debounce(\r\n\t\t{ delay: 400 },\r\n\t\t(e: ChangeEvent<HTMLInputElement>) => {\r\n\t\t\tconst v = e.target.value;\r\n\t\t\tsetFilterValue(v);\r\n\t\t}\r\n\t);\r\n\r\n\tconst handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\r\n\t\tsetFilterValue(e.target.value);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tsetSelectedValue(value);\r\n\t}, [value]);\r\n\r\n\tconst hasValue = multiple\r\n\t\t? (selectedValue as any[]).length > 0\r\n\t\t: !!selectedValue;\r\n\tconst clearable = !hideClear && active && hasValue;\r\n\tconst text = message ?? tip;\r\n\r\n\treturn (\r\n\t\t<label\r\n\t\t\tclassName={classNames(\"i-input-label\", className, {\r\n\t\t\t\t\"i-input-inline\": labelInline,\r\n\t\t\t})}\r\n\t\t\tstyle={style}\r\n\t\t>\r\n\t\t\t{label && <span className='i-input-label-text'>{label}</span>}\r\n\r\n\t\t\t<Popup\r\n\t\t\t\tposition='bottom'\r\n\t\t\t\tarrow={false}\r\n\t\t\t\tfitSize\r\n\t\t\t\toffset={0}\r\n\t\t\t\t{...popupProps}\r\n\t\t\t\tvisible={active}\r\n\t\t\t\ttrigger='none'\r\n\t\t\t\tonVisibleChange={handleVisibleChange}\r\n\t\t\t\tcontent={\r\n\t\t\t\t\t<Options\r\n\t\t\t\t\t\toptions={filterOptions}\r\n\t\t\t\t\t\tvalue={selectedValue}\r\n\t\t\t\t\t\tmultiple={multiple}\r\n\t\t\t\t\t\tfilter={!!filter}\r\n\t\t\t\t\t\tfilterPlaceholder={filterPlaceholder}\r\n\t\t\t\t\t\tonSelect={handleSelect}\r\n\t\t\t\t\t\tonFilter={handleFilterChange}\r\n\t\t\t\t\t/>\r\n\t\t\t\t}\r\n\t\t\t>\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName={classNames(\"i-input-item\", {\r\n\t\t\t\t\t\t[`i-input-${status}`]: status !== \"normal\",\r\n\t\t\t\t\t\t\"i-input-borderless\": !border,\r\n\t\t\t\t\t\t\"i-input-focus\": active,\r\n\t\t\t\t\t})}\r\n\t\t\t\t\tonClick={() => setActive(true)}\r\n\t\t\t\t>\r\n\t\t\t\t\t{prepend}\r\n\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\ttype='hidden'\r\n\t\t\t\t\t\tvalue={selectedValue}\r\n\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t{multiple ? (\r\n\t\t\t\t\t\thasValue ? (\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclassName={classNames(\"i-input i-select\", {\r\n\t\t\t\t\t\t\t\t\t\"i-select-multiple\": multiple,\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{displayValue({\r\n\t\t\t\t\t\t\t\t\toptions: formattedOptions,\r\n\t\t\t\t\t\t\t\t\tvalue: selectedValue,\r\n\t\t\t\t\t\t\t\t\tmultiple,\r\n\t\t\t\t\t\t\t\t\tmaxDisplay,\r\n\t\t\t\t\t\t\t\t\tonSelect: handleSelect,\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\tclassName='i-input i-select'\r\n\t\t\t\t\t\t\t\tplaceholder={placeholder}\r\n\t\t\t\t\t\t\t\treadOnly\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t) : null}\r\n\r\n\t\t\t\t\t{!multiple && (\r\n\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\tvalue={active ? filterValue : displayLabel}\r\n\t\t\t\t\t\t\tclassName='i-input i-select'\r\n\t\t\t\t\t\t\tplaceholder={displayLabel || placeholder}\r\n\t\t\t\t\t\t\tonChange={handleInputChange}\r\n\t\t\t\t\t\t\treadOnly={!filter}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t<Helpericon\r\n\t\t\t\t\t\tactive={!hideArrow}\r\n\t\t\t\t\t\ticon={clearable ? undefined : <UnfoldMoreRound />}\r\n\t\t\t\t\t\tonClick={handleHelperClick}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t{append}\r\n\t\t\t\t</div>\r\n\t\t\t</Popup>\r\n\r\n\t\t\t{text && <span className='i-input-message'>{text}</span>}\r\n\t\t</label>\r\n\t);\r\n};\r\n\r\nexport default Select;\r\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"select.js","sources":["../../../../packages/components/select/select.tsx"],"sourcesContent":["import { UnfoldMoreRound } from \"@ricons/material\";\r\nimport classNames from \"classnames\";\r\nimport { debounce } from \"radash\";\r\nimport { ChangeEvent, useEffect, useMemo, useState } from \"react\";\r\nimport \"../../css/input.css\";\r\nimport { formatOption } from \"../../js/utils\";\r\nimport { TOption } from \"../../type\";\r\nimport Popup from \"../popup\";\r\nimport Helpericon from \"../utils/helpericon\";\r\nimport \"./index.css\";\r\nimport { Options, displayValue } from \"./options\";\r\nimport { ISelect } from \"./type\";\r\n\r\nconst Select = (props: ISelect) => {\r\n const {\r\n ref,\r\n type = \"text\",\r\n name,\r\n label,\r\n value = \"\",\r\n placeholder,\r\n required,\r\n options = [],\r\n multiple,\r\n prepend,\r\n append,\r\n labelInline,\r\n style,\r\n className,\r\n message,\r\n status = \"normal\",\r\n hideClear,\r\n hideArrow,\r\n maxDisplay,\r\n border,\r\n filter,\r\n tip,\r\n filterPlaceholder = \"...\",\r\n popupProps,\r\n onSelect,\r\n onChange,\r\n ...restProps\r\n } = props;\r\n\r\n const [filterValue, setFilterValue] = useState(\"\");\r\n const [selectedValue, setSelectedValue] = useState(value);\r\n\r\n const [active, setActive] = useState<boolean>(false);\r\n\r\n const formattedOptions = useMemo(() => formatOption(options), [options]);\r\n\r\n const filterOptions = useMemo(() => {\r\n const fv = filterValue;\r\n if (!fv || !filter) return formattedOptions;\r\n\r\n const filterFn =\r\n typeof filter === \"function\"\r\n ? filter\r\n : (opt) => opt.value.includes(fv) || opt.label.includes(fv);\r\n\r\n return formattedOptions.filter(filterFn);\r\n }, [formattedOptions, filter, filterValue]);\r\n\r\n const changeValue = (v: any) => {\r\n setSelectedValue(v);\r\n onChange?.(v);\r\n };\r\n\r\n const displayLabel = useMemo(() => {\r\n if (multiple) {\r\n return \"\";\r\n }\r\n\r\n const option = formattedOptions.find(\r\n (opt) => opt.value === selectedValue,\r\n );\r\n return option ? option.label : selectedValue;\r\n }, [selectedValue, formattedOptions]);\r\n\r\n const handleSelect = (value: any, option?: TOption) => {\r\n onSelect?.(value, option);\r\n\r\n if (multiple) {\r\n const values = [...(selectedValue as any[])];\r\n const i = values.findIndex((v) => v === value);\r\n\r\n i > -1 ? values.splice(i, 1) : values.push(value);\r\n changeValue(values as any);\r\n\r\n return;\r\n }\r\n\r\n setActive(false);\r\n changeValue(value);\r\n };\r\n\r\n const handleVisibleChange = (visible: boolean) => {\r\n setActive(visible);\r\n\r\n if (!filter) return;\r\n\r\n setFilterValue(\"\");\r\n };\r\n\r\n const handleHelperClick = (e) => {\r\n e.stopPropagation();\r\n setActive(true);\r\n if (!active) return;\r\n\r\n changeValue(multiple ? [] : \"\");\r\n };\r\n\r\n const handleFilterChange = debounce(\r\n { delay: 400 },\r\n (e: ChangeEvent<HTMLInputElement>) => {\r\n const v = e.target.value;\r\n setFilterValue(v);\r\n },\r\n );\r\n\r\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\r\n setFilterValue(e.target.value);\r\n };\r\n\r\n useEffect(() => {\r\n setSelectedValue(value);\r\n }, [value]);\r\n\r\n const hasValue = multiple\r\n ? (selectedValue as any[]).length > 0\r\n : !!selectedValue;\r\n const clearable = !hideClear && active && hasValue;\r\n const text = message ?? tip;\r\n\r\n return (\r\n <label\r\n className={classNames(\"i-input-label\", className, {\r\n \"i-input-inline\": labelInline,\r\n })}\r\n style={style}\r\n >\r\n {label && (\r\n <span className=\"i-input-label-text\">\r\n {required && <span className=\"error\">*</span>}\r\n {label}\r\n </span>\r\n )}\r\n\r\n <Popup\r\n position=\"bottom\"\r\n arrow={false}\r\n fitSize\r\n offset={0}\r\n {...popupProps}\r\n visible={active}\r\n trigger=\"none\"\r\n onVisibleChange={handleVisibleChange}\r\n content={\r\n <Options\r\n options={filterOptions}\r\n value={selectedValue}\r\n multiple={multiple}\r\n filter={!!filter}\r\n filterPlaceholder={filterPlaceholder}\r\n onSelect={handleSelect}\r\n onFilter={handleFilterChange}\r\n />\r\n }\r\n >\r\n <div\r\n className={classNames(\"i-input-item\", {\r\n [`i-input-${status}`]: status !== \"normal\",\r\n \"i-input-borderless\": !border,\r\n \"i-input-focus\": active,\r\n })}\r\n onClick={() => setActive(true)}\r\n >\r\n {prepend}\r\n\r\n <input\r\n ref={ref}\r\n type=\"hidden\"\r\n value={selectedValue}\r\n {...restProps}\r\n />\r\n\r\n {multiple ? (\r\n hasValue ? (\r\n <div\r\n className={classNames(\"i-input i-select\", {\r\n \"i-select-multiple\": multiple,\r\n })}\r\n >\r\n {displayValue({\r\n options: formattedOptions,\r\n value: selectedValue,\r\n multiple,\r\n maxDisplay,\r\n onSelect: handleSelect,\r\n })}\r\n </div>\r\n ) : (\r\n <input\r\n className=\"i-input i-select\"\r\n placeholder={placeholder}\r\n readOnly\r\n />\r\n )\r\n ) : null}\r\n\r\n {!multiple && (\r\n <input\r\n value={active ? filterValue : displayLabel}\r\n className=\"i-input i-select\"\r\n placeholder={displayLabel || placeholder}\r\n onChange={handleInputChange}\r\n readOnly={!filter}\r\n />\r\n )}\r\n\r\n <Helpericon\r\n active={!hideArrow}\r\n icon={clearable ? undefined : <UnfoldMoreRound />}\r\n onClick={handleHelperClick}\r\n />\r\n\r\n {append}\r\n </div>\r\n </Popup>\r\n\r\n {text && <span className=\"i-input-message\">{text}</span>}\r\n </label>\r\n );\r\n};\r\n\r\nexport default Select;\r\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -199,7 +199,7 @@ const Tabs = ((props) => {
199
199
  const { offsetHeight, offsetLeft, offsetTop, offsetWidth } = nav;
200
200
  const isLine = type === "line";
201
201
  setBarStyle({
202
- height: !vertical && isLine ? ".25em" : offsetHeight,
202
+ height: !vertical && isLine ? ".25em" : ".8em",
203
203
  width: vertical && isLine ? ".25em" : offsetWidth,
204
204
  transform: `translate(${offsetLeft}px, ${offsetTop}px)`,
205
205
  });
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.js","sources":["../../../../packages/components/tabs/tabs.tsx"],"sourcesContent":["import { MoreHorizRound } from \"@ricons/material\";\r\nimport classNames from \"classnames\";\r\nimport {\r\n CSSProperties,\r\n Children,\r\n KeyboardEvent,\r\n ReactNode,\r\n useEffect,\r\n useImperativeHandle,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport { useIntersectionObserver, useSize } from \"../../js/hooks\";\r\nimport Button from \"../button\";\r\nimport Icon from \"../icon\";\r\nimport Popup from \"../popup\";\r\nimport Helpericon from \"../utils/helpericon\";\r\nimport \"./index.css\";\r\nimport TabItem from \"./item\";\r\nimport { CompositionTabs, ITabItem, ITabs } from \"./type\";\r\n\r\nconst Tabs = ((props: ITabs) => {\r\n const {\r\n ref,\r\n active,\r\n tabs: items,\r\n type = \"default\",\r\n prepend,\r\n append,\r\n children,\r\n className,\r\n vertical,\r\n toggable,\r\n navsJustify = \"start\",\r\n bar = true,\r\n hideMore,\r\n barClass,\r\n renderMore = () => (\r\n <Button flat square size=\"small\">\r\n <Icon icon={<MoreHorizRound />} />\r\n </Button>\r\n ),\r\n onTabChange,\r\n ...rest\r\n } = props;\r\n\r\n const navRefs = useRef<HTMLElement[]>([]);\r\n const barRef = useRef<HTMLSpanElement>(null);\r\n const navsRef = useRef<HTMLDivElement>(null);\r\n const contentsRef = useRef<Map<string, ReactNode>>(new Map());\r\n const [activeKey, setActiveKey] = useState<string | undefined>(active);\r\n const [prevActiveKey, setPrevActiveKey] = useState<string | undefined>(\r\n undefined,\r\n );\r\n const [barStyle, setBarStyle] = useState<CSSProperties>({});\r\n const [cachedTabs, setCachedTabs] = useState<string[]>([]);\r\n const [overflow, setOverflow] = useState(false);\r\n const [tabs, setTabs] = useState<ITabItem[]>([]);\r\n const { observe, unobserve } = useIntersectionObserver();\r\n const size = useSize(navsRef);\r\n\r\n const tabsRef = useRef<ITabItem[]>(tabs);\r\n tabsRef.current = tabs;\r\n const activeKeyRef = useRef<string | undefined>(activeKey);\r\n activeKeyRef.current = activeKey;\r\n const prevActiveKeyRef = useRef<string | undefined>(prevActiveKey);\r\n prevActiveKeyRef.current = prevActiveKey;\r\n\r\n useEffect(() => {\r\n contentsRef.current.clear();\r\n\r\n if (!items) {\r\n if (!children) {\r\n setTabs([]);\r\n return;\r\n }\r\n\r\n setTabs(\r\n (Children.map(children, (node, i) => {\r\n const { key, props: nodeProps } = node as {\r\n key?: string;\r\n props?: any;\r\n };\r\n const {\r\n title,\r\n children: tabChildren,\r\n content,\r\n keepDOM,\r\n closable,\r\n } = nodeProps;\r\n const tabKey = String(key ?? i);\r\n contentsRef.current.set(tabKey, tabChildren ?? content);\r\n\r\n return {\r\n key: tabKey,\r\n title,\r\n keepDOM,\r\n closable,\r\n };\r\n }) as ITabItem[]) ?? [],\r\n );\r\n\r\n return;\r\n }\r\n\r\n setTabs(\r\n items.map((item, i) => {\r\n if ([\"string\", \"number\"].includes(typeof item)) {\r\n const key = String(item);\r\n return { key, title: item };\r\n }\r\n const key = String(item.key ?? i);\r\n contentsRef.current.set(key, item.content);\r\n const { content, ...rest } = item;\r\n return {\r\n ...rest,\r\n key,\r\n };\r\n }),\r\n );\r\n }, [children, items]);\r\n\r\n const add = (tab: ITabItem) => {\r\n const currentTabs = tabsRef.current;\r\n const tkey = String(tab.key ?? currentTabs.length);\r\n const i = currentTabs.findIndex((t) => t.key === tkey);\r\n\r\n if (i > -1) {\r\n open(currentTabs[i].key ?? `${i}`);\r\n return;\r\n }\r\n\r\n contentsRef.current.set(tkey, tab.content);\r\n const { content, ...rest } = tab;\r\n setTabs((ts) => [...ts, { ...rest, key: tkey }]);\r\n open(tkey);\r\n };\r\n\r\n const close = (key: string) => {\r\n const currentTabs = tabsRef.current;\r\n const i = currentTabs.findIndex((t) => t.key === key);\r\n\r\n if (i < 0) return;\r\n\r\n contentsRef.current.delete(key);\r\n const nextTabs = [...currentTabs];\r\n nextTabs.splice(i, 1);\r\n setTabs(nextTabs);\r\n\r\n if (activeKeyRef.current !== key) return;\r\n\r\n const next = nextTabs[i] || nextTabs[i - 1];\r\n const prev = prevActiveKeyRef.current;\r\n const nextKey =\r\n prev && nextTabs.some((t) => t.key === prev) ? prev : next?.key;\r\n open(nextKey ?? \"\");\r\n };\r\n\r\n const open = (key: string) => {\r\n const nextKey = key || undefined;\r\n\r\n if (nextKey === undefined) {\r\n onTabChange?.(undefined, activeKey);\r\n setPrevActiveKey(activeKey);\r\n setActiveKey(undefined);\r\n setBarStyle({\r\n height: 0,\r\n width: 0,\r\n });\r\n return;\r\n }\r\n\r\n if (nextKey === activeKey) {\r\n if (!toggable) return;\r\n\r\n onTabChange?.(undefined, key);\r\n setActiveKey(undefined);\r\n\r\n setBarStyle({\r\n height: 0,\r\n width: 0,\r\n });\r\n return;\r\n }\r\n\r\n setPrevActiveKey(activeKey);\r\n onTabChange?.(nextKey, activeKey);\r\n setActiveKey(nextKey);\r\n };\r\n\r\n const handleKeyAction = (e: KeyboardEvent<Element>, action: () => void) => {\r\n if (![\"Enter\", \" \"].includes(e.key)) return;\r\n e.preventDefault();\r\n action();\r\n };\r\n\r\n const scrollToTab = (key: string) => {\r\n const index = tabsRef.current.findIndex((tab) => tab.key === key);\r\n const nav = navRefs.current[index];\r\n\r\n nav?.scrollIntoView({\r\n behavior: \"smooth\",\r\n block: \"nearest\",\r\n inline: \"nearest\",\r\n });\r\n };\r\n\r\n const handleMoreTabClick = (key: string) => {\r\n open(key);\r\n scrollToTab(key);\r\n };\r\n\r\n useEffect(() => {\r\n if (!size || hideMore || !observe || !unobserve) return;\r\n const { scrollHeight, scrollWidth } = navsRef.current as HTMLElement;\r\n const { width, height } = size;\r\n\r\n const nextOverflow = scrollHeight > height || scrollWidth > width;\r\n setOverflow((v) => (v === nextOverflow ? v : nextOverflow));\r\n\r\n if (!nextOverflow) {\r\n setTabs((ts) => {\r\n let changed = false;\r\n const next = ts.map((t) => {\r\n if (\r\n t.intersecting === undefined ||\r\n t.intersecting === true\r\n ) {\r\n return t;\r\n }\r\n changed = true;\r\n return { ...t, intersecting: true };\r\n });\r\n return changed ? next : ts;\r\n });\r\n return;\r\n }\r\n\r\n const observed: HTMLElement[] = [];\r\n\r\n navRefs.current.map((nav, i) => {\r\n if (!nav) return;\r\n observed.push(nav);\r\n observe(nav, (_tar: HTMLElement, visible: boolean) => {\r\n setTabs((ts) => {\r\n if (!ts[i]) return ts;\r\n if (ts[i]?.intersecting === visible) return ts;\r\n return ts.map((t, idx) =>\r\n idx === i ? { ...t, intersecting: visible } : t,\r\n );\r\n });\r\n });\r\n });\r\n\r\n return () => {\r\n observed.map((el) => unobserve(el));\r\n };\r\n }, [size, hideMore, tabs.length, observe, unobserve]);\r\n\r\n useEffect(() => {\r\n if (!bar || type === \"pane\" || activeKey === undefined) {\r\n return;\r\n }\r\n\r\n const index = tabs.findIndex((tab) => tab.key === activeKey);\r\n\r\n const timer = window.setTimeout(() => {\r\n const nav = navRefs.current[index];\r\n\r\n if (!nav) return;\r\n\r\n if (tabs[index]?.keepDOM && activeKey) {\r\n setCachedTabs((keys) => {\r\n if (keys.includes(activeKey)) return keys;\r\n return [activeKey, ...keys];\r\n });\r\n }\r\n\r\n const { offsetHeight, offsetLeft, offsetTop, offsetWidth } = nav;\r\n const isLine = type === \"line\";\r\n\r\n setBarStyle({\r\n height: !vertical && isLine ? \".25em\" : offsetHeight,\r\n width: vertical && isLine ? \".25em\" : offsetWidth,\r\n transform: `translate(${offsetLeft}px, ${offsetTop}px)`,\r\n });\r\n }, 16);\r\n\r\n return () => {\r\n window.clearTimeout(timer);\r\n };\r\n }, [activeKey, bar, size, tabs, type, vertical]);\r\n\r\n useEffect(() => {\r\n if (active === undefined || activeKey === active) return;\r\n\r\n open(active);\r\n }, [active]);\r\n\r\n useEffect(() => {\r\n if (!navsRef.current || vertical) return;\r\n\r\n const handleMouseWheel = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n if (vertical) return;\r\n\r\n navsRef.current?.scrollBy({\r\n left: e.deltaY + e.deltaX,\r\n });\r\n };\r\n\r\n navsRef.current.addEventListener(\"wheel\", handleMouseWheel, {\r\n passive: false,\r\n });\r\n\r\n return () => {\r\n if (!navsRef.current) return;\r\n navsRef.current.removeEventListener(\"wheel\", handleMouseWheel);\r\n };\r\n }, [vertical]);\r\n\r\n useImperativeHandle(ref, () => ({\r\n open,\r\n close,\r\n add,\r\n navs: navsRef,\r\n }));\r\n\r\n const moreTabs =\r\n !hideMore && overflow\r\n ? tabs.filter((tab) => tab.intersecting === false)\r\n : [];\r\n\r\n return (\r\n <div\r\n className={classNames(\r\n \"i-tabs\",\r\n { flex: vertical, [`i-tabs-${type}`]: type !== \"default\" },\r\n className,\r\n )}\r\n {...rest}\r\n >\r\n <div\r\n className={classNames(\"i-tab-navs-container\", {\r\n \"i-tab-navs-vertical\": vertical,\r\n })}\r\n >\r\n {prepend}\r\n\r\n <div\r\n ref={navsRef}\r\n className={classNames(\r\n \"i-tab-navs\",\r\n `justify-${navsJustify}`,\r\n )}\r\n role=\"tablist\"\r\n aria-orientation={vertical ? \"vertical\" : \"horizontal\"}\r\n >\r\n {tabs.map((tab, i) => {\r\n const { title, key = `${i}`, closable } = tab;\r\n const isActive = activeKey === key;\r\n\r\n return (\r\n <a\r\n key={key}\r\n ref={(ref) => (navRefs.current[i] = ref as any)}\r\n className={classNames(\"i-tab-nav\", {\r\n \"i-tab-active\": isActive,\r\n })}\r\n role=\"tab\"\r\n tabIndex={isActive ? 0 : -1}\r\n aria-selected={isActive}\r\n onClick={() => open(key)}\r\n onKeyDown={(e) =>\r\n handleKeyAction(e, () => open(key))\r\n }\r\n >\r\n {title}\r\n\r\n {closable && (\r\n <Helpericon\r\n as=\"i\"\r\n active\r\n className=\"i-tab-nav-close\"\r\n role=\"button\"\r\n tabIndex={0}\r\n aria-label=\"关闭标签页\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n close(key);\r\n }}\r\n onKeyDown={(e) =>\r\n handleKeyAction(e, () => close(key))\r\n }\r\n />\r\n )}\r\n </a>\r\n );\r\n })}\r\n\r\n {bar && (\r\n <span\r\n ref={barRef}\r\n className={classNames(\"i-tab-navs-bar\", barClass)}\r\n style={barStyle}\r\n />\r\n )}\r\n </div>\r\n\r\n {!hideMore && overflow && moreTabs.length > 0 && (\r\n <Popup\r\n arrow={false}\r\n position={vertical ? \"right\" : \"bottom\"}\r\n align=\"end\"\r\n touchable\r\n hideDelay={500}\r\n content={\r\n <div className=\"i-tabs-morelist pd-4\">\r\n {moreTabs.map((tab, i) => {\r\n const { key = `${i}`, title } = tab;\r\n const isActive = activeKey === key;\r\n\r\n return (\r\n <a\r\n key={key}\r\n className={classNames(\"i-tab-nav\", {\r\n \"i-tab-active\": isActive,\r\n })}\r\n role=\"button\"\r\n tabIndex={0}\r\n onClick={() =>\r\n handleMoreTabClick(key)\r\n }\r\n onKeyDown={(e) =>\r\n handleKeyAction(e, () =>\r\n handleMoreTabClick(key),\r\n )\r\n }\r\n >\r\n {title}\r\n </a>\r\n );\r\n })}\r\n </div>\r\n }\r\n >\r\n {renderMore(moreTabs)}\r\n </Popup>\r\n )}\r\n\r\n {append}\r\n </div>\r\n\r\n <div className=\"i-tab-contents\">\r\n {tabs.map((tab, i) => {\r\n const key = tab.key ?? `${i}`;\r\n const content = contentsRef.current.get(key);\r\n const isActive = activeKey === key;\r\n const show =\r\n isActive ||\r\n (key !== undefined && cachedTabs.includes(key));\r\n\r\n return (\r\n show && (\r\n <div\r\n key={key}\r\n className={classNames(\"i-tab-content\", {\r\n \"i-tab-active\": isActive,\r\n })}\r\n role=\"tabpanel\"\r\n aria-hidden={!isActive}\r\n >\r\n {content}\r\n </div>\r\n )\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}) as CompositionTabs;\r\n\r\nTabs.Item = TabItem;\r\n\r\nexport default Tabs;\r\n"],"names":["_jsx","_jsxs","TabItem"],"mappings":"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"}
1
+ {"version":3,"file":"tabs.js","sources":["../../../../packages/components/tabs/tabs.tsx"],"sourcesContent":["import { MoreHorizRound } from \"@ricons/material\";\r\nimport classNames from \"classnames\";\r\nimport {\r\n CSSProperties,\r\n Children,\r\n KeyboardEvent,\r\n ReactNode,\r\n useEffect,\r\n useImperativeHandle,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport { useIntersectionObserver, useSize } from \"../../js/hooks\";\r\nimport Button from \"../button\";\r\nimport Icon from \"../icon\";\r\nimport Popup from \"../popup\";\r\nimport Helpericon from \"../utils/helpericon\";\r\nimport \"./index.css\";\r\nimport TabItem from \"./item\";\r\nimport { CompositionTabs, ITabItem, ITabs } from \"./type\";\r\n\r\nconst Tabs = ((props: ITabs) => {\r\n const {\r\n ref,\r\n active,\r\n tabs: items,\r\n type = \"default\",\r\n prepend,\r\n append,\r\n children,\r\n className,\r\n vertical,\r\n toggable,\r\n navsJustify = \"start\",\r\n bar = true,\r\n hideMore,\r\n barClass,\r\n renderMore = () => (\r\n <Button flat square size=\"small\">\r\n <Icon icon={<MoreHorizRound />} />\r\n </Button>\r\n ),\r\n onTabChange,\r\n ...rest\r\n } = props;\r\n\r\n const navRefs = useRef<HTMLElement[]>([]);\r\n const barRef = useRef<HTMLSpanElement>(null);\r\n const navsRef = useRef<HTMLDivElement>(null);\r\n const contentsRef = useRef<Map<string, ReactNode>>(new Map());\r\n const [activeKey, setActiveKey] = useState<string | undefined>(active);\r\n const [prevActiveKey, setPrevActiveKey] = useState<string | undefined>(\r\n undefined,\r\n );\r\n const [barStyle, setBarStyle] = useState<CSSProperties>({});\r\n const [cachedTabs, setCachedTabs] = useState<string[]>([]);\r\n const [overflow, setOverflow] = useState(false);\r\n const [tabs, setTabs] = useState<ITabItem[]>([]);\r\n const { observe, unobserve } = useIntersectionObserver();\r\n const size = useSize(navsRef);\r\n\r\n const tabsRef = useRef<ITabItem[]>(tabs);\r\n tabsRef.current = tabs;\r\n const activeKeyRef = useRef<string | undefined>(activeKey);\r\n activeKeyRef.current = activeKey;\r\n const prevActiveKeyRef = useRef<string | undefined>(prevActiveKey);\r\n prevActiveKeyRef.current = prevActiveKey;\r\n\r\n useEffect(() => {\r\n contentsRef.current.clear();\r\n\r\n if (!items) {\r\n if (!children) {\r\n setTabs([]);\r\n return;\r\n }\r\n\r\n setTabs(\r\n (Children.map(children, (node, i) => {\r\n const { key, props: nodeProps } = node as {\r\n key?: string;\r\n props?: any;\r\n };\r\n const {\r\n title,\r\n children: tabChildren,\r\n content,\r\n keepDOM,\r\n closable,\r\n } = nodeProps;\r\n const tabKey = String(key ?? i);\r\n contentsRef.current.set(tabKey, tabChildren ?? content);\r\n\r\n return {\r\n key: tabKey,\r\n title,\r\n keepDOM,\r\n closable,\r\n };\r\n }) as ITabItem[]) ?? [],\r\n );\r\n\r\n return;\r\n }\r\n\r\n setTabs(\r\n items.map((item, i) => {\r\n if ([\"string\", \"number\"].includes(typeof item)) {\r\n const key = String(item);\r\n return { key, title: item };\r\n }\r\n const key = String(item.key ?? i);\r\n contentsRef.current.set(key, item.content);\r\n const { content, ...rest } = item;\r\n return {\r\n ...rest,\r\n key,\r\n };\r\n }),\r\n );\r\n }, [children, items]);\r\n\r\n const add = (tab: ITabItem) => {\r\n const currentTabs = tabsRef.current;\r\n const tkey = String(tab.key ?? currentTabs.length);\r\n const i = currentTabs.findIndex((t) => t.key === tkey);\r\n\r\n if (i > -1) {\r\n open(currentTabs[i].key ?? `${i}`);\r\n return;\r\n }\r\n\r\n contentsRef.current.set(tkey, tab.content);\r\n const { content, ...rest } = tab;\r\n setTabs((ts) => [...ts, { ...rest, key: tkey }]);\r\n open(tkey);\r\n };\r\n\r\n const close = (key: string) => {\r\n const currentTabs = tabsRef.current;\r\n const i = currentTabs.findIndex((t) => t.key === key);\r\n\r\n if (i < 0) return;\r\n\r\n contentsRef.current.delete(key);\r\n const nextTabs = [...currentTabs];\r\n nextTabs.splice(i, 1);\r\n setTabs(nextTabs);\r\n\r\n if (activeKeyRef.current !== key) return;\r\n\r\n const next = nextTabs[i] || nextTabs[i - 1];\r\n const prev = prevActiveKeyRef.current;\r\n const nextKey =\r\n prev && nextTabs.some((t) => t.key === prev) ? prev : next?.key;\r\n open(nextKey ?? \"\");\r\n };\r\n\r\n const open = (key: string) => {\r\n const nextKey = key || undefined;\r\n\r\n if (nextKey === undefined) {\r\n onTabChange?.(undefined, activeKey);\r\n setPrevActiveKey(activeKey);\r\n setActiveKey(undefined);\r\n setBarStyle({\r\n height: 0,\r\n width: 0,\r\n });\r\n return;\r\n }\r\n\r\n if (nextKey === activeKey) {\r\n if (!toggable) return;\r\n\r\n onTabChange?.(undefined, key);\r\n setActiveKey(undefined);\r\n\r\n setBarStyle({\r\n height: 0,\r\n width: 0,\r\n });\r\n return;\r\n }\r\n\r\n setPrevActiveKey(activeKey);\r\n onTabChange?.(nextKey, activeKey);\r\n setActiveKey(nextKey);\r\n };\r\n\r\n const handleKeyAction = (e: KeyboardEvent<Element>, action: () => void) => {\r\n if (![\"Enter\", \" \"].includes(e.key)) return;\r\n e.preventDefault();\r\n action();\r\n };\r\n\r\n const scrollToTab = (key: string) => {\r\n const index = tabsRef.current.findIndex((tab) => tab.key === key);\r\n const nav = navRefs.current[index];\r\n\r\n nav?.scrollIntoView({\r\n behavior: \"smooth\",\r\n block: \"nearest\",\r\n inline: \"nearest\",\r\n });\r\n };\r\n\r\n const handleMoreTabClick = (key: string) => {\r\n open(key);\r\n scrollToTab(key);\r\n };\r\n\r\n useEffect(() => {\r\n if (!size || hideMore || !observe || !unobserve) return;\r\n const { scrollHeight, scrollWidth } = navsRef.current as HTMLElement;\r\n const { width, height } = size;\r\n\r\n const nextOverflow = scrollHeight > height || scrollWidth > width;\r\n setOverflow((v) => (v === nextOverflow ? v : nextOverflow));\r\n\r\n if (!nextOverflow) {\r\n setTabs((ts) => {\r\n let changed = false;\r\n const next = ts.map((t) => {\r\n if (\r\n t.intersecting === undefined ||\r\n t.intersecting === true\r\n ) {\r\n return t;\r\n }\r\n changed = true;\r\n return { ...t, intersecting: true };\r\n });\r\n return changed ? next : ts;\r\n });\r\n return;\r\n }\r\n\r\n const observed: HTMLElement[] = [];\r\n\r\n navRefs.current.map((nav, i) => {\r\n if (!nav) return;\r\n observed.push(nav);\r\n observe(nav, (_tar: HTMLElement, visible: boolean) => {\r\n setTabs((ts) => {\r\n if (!ts[i]) return ts;\r\n if (ts[i]?.intersecting === visible) return ts;\r\n return ts.map((t, idx) =>\r\n idx === i ? { ...t, intersecting: visible } : t,\r\n );\r\n });\r\n });\r\n });\r\n\r\n return () => {\r\n observed.map((el) => unobserve(el));\r\n };\r\n }, [size, hideMore, tabs.length, observe, unobserve]);\r\n\r\n useEffect(() => {\r\n if (!bar || type === \"pane\" || activeKey === undefined) {\r\n return;\r\n }\r\n\r\n const index = tabs.findIndex((tab) => tab.key === activeKey);\r\n\r\n const timer = window.setTimeout(() => {\r\n const nav = navRefs.current[index];\r\n\r\n if (!nav) return;\r\n\r\n if (tabs[index]?.keepDOM && activeKey) {\r\n setCachedTabs((keys) => {\r\n if (keys.includes(activeKey)) return keys;\r\n return [activeKey, ...keys];\r\n });\r\n }\r\n\r\n const { offsetHeight, offsetLeft, offsetTop, offsetWidth } = nav;\r\n const isLine = type === \"line\";\r\n\r\n setBarStyle({\r\n height: !vertical && isLine ? \".25em\" : \".8em\",\r\n width: vertical && isLine ? \".25em\" : offsetWidth,\r\n transform: `translate(${offsetLeft}px, ${offsetTop}px)`,\r\n });\r\n }, 16);\r\n\r\n return () => {\r\n window.clearTimeout(timer);\r\n };\r\n }, [activeKey, bar, size, tabs, type, vertical]);\r\n\r\n useEffect(() => {\r\n if (active === undefined || activeKey === active) return;\r\n\r\n open(active);\r\n }, [active]);\r\n\r\n useEffect(() => {\r\n if (!navsRef.current || vertical) return;\r\n\r\n const handleMouseWheel = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n if (vertical) return;\r\n\r\n navsRef.current?.scrollBy({\r\n left: e.deltaY + e.deltaX,\r\n });\r\n };\r\n\r\n navsRef.current.addEventListener(\"wheel\", handleMouseWheel, {\r\n passive: false,\r\n });\r\n\r\n return () => {\r\n if (!navsRef.current) return;\r\n navsRef.current.removeEventListener(\"wheel\", handleMouseWheel);\r\n };\r\n }, [vertical]);\r\n\r\n useImperativeHandle(ref, () => ({\r\n open,\r\n close,\r\n add,\r\n navs: navsRef,\r\n }));\r\n\r\n const moreTabs =\r\n !hideMore && overflow\r\n ? tabs.filter((tab) => tab.intersecting === false)\r\n : [];\r\n\r\n return (\r\n <div\r\n className={classNames(\r\n \"i-tabs\",\r\n { flex: vertical, [`i-tabs-${type}`]: type !== \"default\" },\r\n className,\r\n )}\r\n {...rest}\r\n >\r\n <div\r\n className={classNames(\"i-tab-navs-container\", {\r\n \"i-tab-navs-vertical\": vertical,\r\n })}\r\n >\r\n {prepend}\r\n\r\n <div\r\n ref={navsRef}\r\n className={classNames(\r\n \"i-tab-navs\",\r\n `justify-${navsJustify}`,\r\n )}\r\n role=\"tablist\"\r\n aria-orientation={vertical ? \"vertical\" : \"horizontal\"}\r\n >\r\n {tabs.map((tab, i) => {\r\n const { title, key = `${i}`, closable } = tab;\r\n const isActive = activeKey === key;\r\n\r\n return (\r\n <a\r\n key={key}\r\n ref={(ref) => (navRefs.current[i] = ref as any)}\r\n className={classNames(\"i-tab-nav\", {\r\n \"i-tab-active\": isActive,\r\n })}\r\n role=\"tab\"\r\n tabIndex={isActive ? 0 : -1}\r\n aria-selected={isActive}\r\n onClick={() => open(key)}\r\n onKeyDown={(e) =>\r\n handleKeyAction(e, () => open(key))\r\n }\r\n >\r\n {title}\r\n\r\n {closable && (\r\n <Helpericon\r\n as=\"i\"\r\n active\r\n className=\"i-tab-nav-close\"\r\n role=\"button\"\r\n tabIndex={0}\r\n aria-label=\"关闭标签页\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n close(key);\r\n }}\r\n onKeyDown={(e) =>\r\n handleKeyAction(e, () => close(key))\r\n }\r\n />\r\n )}\r\n </a>\r\n );\r\n })}\r\n\r\n {bar && (\r\n <span\r\n ref={barRef}\r\n className={classNames(\"i-tab-navs-bar\", barClass)}\r\n style={barStyle}\r\n />\r\n )}\r\n </div>\r\n\r\n {!hideMore && overflow && moreTabs.length > 0 && (\r\n <Popup\r\n arrow={false}\r\n position={vertical ? \"right\" : \"bottom\"}\r\n align=\"end\"\r\n touchable\r\n hideDelay={500}\r\n content={\r\n <div className=\"i-tabs-morelist pd-4\">\r\n {moreTabs.map((tab, i) => {\r\n const { key = `${i}`, title } = tab;\r\n const isActive = activeKey === key;\r\n\r\n return (\r\n <a\r\n key={key}\r\n className={classNames(\"i-tab-nav\", {\r\n \"i-tab-active\": isActive,\r\n })}\r\n role=\"button\"\r\n tabIndex={0}\r\n onClick={() =>\r\n handleMoreTabClick(key)\r\n }\r\n onKeyDown={(e) =>\r\n handleKeyAction(e, () =>\r\n handleMoreTabClick(key),\r\n )\r\n }\r\n >\r\n {title}\r\n </a>\r\n );\r\n })}\r\n </div>\r\n }\r\n >\r\n {renderMore(moreTabs)}\r\n </Popup>\r\n )}\r\n\r\n {append}\r\n </div>\r\n\r\n <div className=\"i-tab-contents\">\r\n {tabs.map((tab, i) => {\r\n const key = tab.key ?? `${i}`;\r\n const content = contentsRef.current.get(key);\r\n const isActive = activeKey === key;\r\n const show =\r\n isActive ||\r\n (key !== undefined && cachedTabs.includes(key));\r\n\r\n return (\r\n show && (\r\n <div\r\n key={key}\r\n className={classNames(\"i-tab-content\", {\r\n \"i-tab-active\": isActive,\r\n })}\r\n role=\"tabpanel\"\r\n aria-hidden={!isActive}\r\n >\r\n {content}\r\n </div>\r\n )\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}) as CompositionTabs;\r\n\r\nTabs.Item = TabItem;\r\n\r\nexport default Tabs;\r\n"],"names":["_jsx","_jsxs","TabItem"],"mappings":"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"}