@ioca/react 1.5.19 → 1.5.20

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 (38) hide show
  1. package/lib/cjs/components/datagrid/virtual.js +129 -102
  2. package/lib/cjs/components/datagrid/virtual.js.map +1 -1
  3. package/lib/cjs/components/form/useForm.js +1 -1
  4. package/lib/cjs/components/form/useForm.js.map +1 -1
  5. package/lib/cjs/components/tabs/tabs.js +8 -17
  6. package/lib/cjs/components/tabs/tabs.js.map +1 -1
  7. package/lib/cjs/components/tree/item.js +44 -56
  8. package/lib/cjs/components/tree/item.js.map +1 -1
  9. package/lib/cjs/components/tree/tree.js +121 -18
  10. package/lib/cjs/components/tree/tree.js.map +1 -1
  11. package/lib/cjs/components/tree/virtual.js +52 -0
  12. package/lib/cjs/components/tree/virtual.js.map +1 -0
  13. package/lib/cjs/js/usePreview/content.js +3 -3
  14. package/lib/cjs/js/usePreview/content.js.map +1 -1
  15. package/lib/cjs/js/usePreview/type.js.map +1 -1
  16. package/lib/css/index.css +1 -1
  17. package/lib/css/index.css.map +1 -1
  18. package/lib/css/input.css +0 -4
  19. package/lib/es/components/datagrid/virtual.js +130 -103
  20. package/lib/es/components/datagrid/virtual.js.map +1 -1
  21. package/lib/es/components/form/useForm.js +1 -1
  22. package/lib/es/components/form/useForm.js.map +1 -1
  23. package/lib/es/components/tabs/tabs.js +8 -17
  24. package/lib/es/components/tabs/tabs.js.map +1 -1
  25. package/lib/es/components/tree/item.js +44 -57
  26. package/lib/es/components/tree/item.js.map +1 -1
  27. package/lib/es/components/tree/tree.js +122 -19
  28. package/lib/es/components/tree/tree.js.map +1 -1
  29. package/lib/es/components/tree/virtual.js +44 -0
  30. package/lib/es/components/tree/virtual.js.map +1 -0
  31. package/lib/es/js/usePreview/content.js +3 -3
  32. package/lib/es/js/usePreview/content.js.map +1 -1
  33. package/lib/es/js/usePreview/type.js.map +1 -1
  34. package/lib/index.js +338 -197
  35. package/lib/types/components/tabs/type.d.ts +1 -1
  36. package/lib/types/components/tree/type.d.ts +8 -5
  37. package/lib/types/js/usePreview/type.d.ts +1 -1
  38. package/package.json +6 -5
@@ -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: WheelEvent) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (vertical) return;\n\n navsRef.current?.scrollBy({\n left: e.deltaY + e.deltaX,\n });\n };\n\n navsRef.current.addEventListener(\"wheel\", handleMouseWheel, {\n passive: false,\n });\n\n return () => {\n if (!navsRef.current) return;\n navsRef.current.removeEventListener(\"wheel\", handleMouseWheel);\n };\n }, [vertical]);\n\n useImperativeHandle(ref, () => ({\n open,\n close,\n add,\n navs: navsRef,\n }));\n\n const cachedTabKeySet = useMemo(() => new Set(cachedTabs), [cachedTabs]);\n const moreTabs = useMemo(\n () =>\n !hideMore && overflow\n ? tabs.filter((tab) => tab.intersecting === false)\n : [],\n [hideMore, overflow, tabs],\n );\n\n return (\n <div\n className={classNames(\n \"i-tabs\",\n { flex: vertical, [`i-tabs-${type}`]: type !== \"default\" },\n className,\n )}\n {...rest}\n >\n <div\n className={classNames(\"i-tab-navs-container\", navsClass, {\n \"i-tab-navs-vertical\": vertical,\n })}\n >\n {prepend}\n\n <TabsNavs\n tabs={tabs}\n moreTabs={moreTabs}\n activeKey={activeKey}\n vertical={vertical}\n overflow={overflow}\n hideMore={hideMore}\n navsJustify={navsJustify}\n bar={bar}\n barClass={barClass}\n barStyle={barStyle}\n navsRef={navsRef}\n renderMore={renderMore}\n setNavRef={setNavRef}\n onOpen={open}\n onClose={close}\n onMoreTabClick={handleMoreTabClick}\n onKeyAction={handleKeyAction}\n />\n\n {append}\n </div>\n\n <TabsContents\n tabs={tabs}\n activeKey={activeKey}\n cachedTabKeySet={cachedTabKeySet}\n getContent={getContent}\n />\n </div>\n );\n}) as CompositionTabs;\n\nTabs.Item = TabItem;\n\nexport default Tabs;\n"],"names":["defaultRenderMore","useRef","useState","useIntersectionObserver","useSize","useMemo","getParsedTabs","useEffect","isSameTabs","emptyBarStyle","useImperativeHandle","_jsxs","classNames","_jsx","TabsNavs","TabsContents","TabItem"],"mappings":"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"}
1
+ {"version":3,"file":"tabs.js","sources":["../../../../packages/components/tabs/tabs.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { CSSProperties, KeyboardEvent, ReactNode, useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { useIntersectionObserver, useSize } from \"../../js/hooks\";\nimport TabsContents from \"./contents\";\nimport { defaultRenderMore, emptyBarStyle, getParsedTabs, isSameTabs } 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>(undefined);\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(() => getParsedTabs(items, children), [children, items]);\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 = [...sourceTabs.filter((tab) => !hiddenSourceKeysRef.current.has(String(tab.key))), ...dynamicTabs];\n\n setTabs((currentTabs) => (isSameTabs(currentTabs, nextTabs) ? currentTabs : nextTabs));\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 = position === undefined ? nextTabs.length : 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 = 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 = (e: KeyboardEvent<HTMLElement>, action: () => void) => {\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 (t.intersecting === undefined || t.intersecting === true) {\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) => (idx === i ? { ...t, intersecting: visible } : t));\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\n setBarStyle({\n height: offsetHeight * 0.5,\n width: 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(() => (!hideMore && overflow ? tabs.filter((tab) => tab.intersecting === false) : []), [hideMore, overflow, tabs]);\n\n return (\n <div className={classNames(\"i-tabs\", { flex: vertical, [`i-tabs-${type}`]: type !== \"default\" }, className)} {...rest}>\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 tabs={tabs} activeKey={activeKey} cachedTabKeySet={cachedTabKeySet} getContent={getContent} />\n </div>\n );\n}) as CompositionTabs;\n\nTabs.Item = TabItem;\n\nexport default Tabs;\n"],"names":["defaultRenderMore","useRef","useState","useIntersectionObserver","useSize","useMemo","getParsedTabs","useEffect","isSameTabs","emptyBarStyle","useImperativeHandle","_jsxs","classNames","_jsx","TabsNavs","TabsContents","TabItem"],"mappings":"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"}
@@ -3,38 +3,15 @@
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var material = require('@ricons/material');
5
5
  var classNames = require('classnames');
6
- var react = require('react');
7
6
  var checkbox = require('../checkbox/checkbox.js');
8
7
  var icon = require('../icon/icon.js');
8
+ var loading = require('../loading/loading.js');
9
9
 
10
10
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
11
11
 
12
12
  var classNames__default = /*#__PURE__*/_interopDefaultCompat(classNames);
13
13
 
14
- function TreeList(props) {
15
- const { data = [], depth = 0, round, style, className, parent, nodeProps, ...restProps } = props;
16
- const contents = data.map((item, i) => {
17
- const { type } = item;
18
- const title = item[nodeProps.title];
19
- const itemKey = item[nodeProps.key] ||
20
- (parent?.key !== undefined ? `${parent.key}-${i}` : `${i}`);
21
- item.key = itemKey;
22
- item.parent = parent;
23
- if (type === "title") {
24
- return (jsxRuntime.jsx("div", { className: 'i-tree-group-title', children: title }, i));
25
- }
26
- if (type && type !== "item") {
27
- return (jsxRuntime.jsx("div", { className: `i-tree-type-${type}`, children: title }, i));
28
- }
29
- return (jsxRuntime.jsx(TreeItem, { index: i, item: item, depth: depth, nodeProps: nodeProps, ...restProps }, itemKey));
30
- });
31
- if (depth > 0)
32
- return jsxRuntime.jsx(jsxRuntime.Fragment, { children: contents });
33
- return (jsxRuntime.jsx("div", { className: classNames__default("i-tree", className, {
34
- "i-tree-round": round,
35
- }), style: style, children: contents }));
36
- }
37
- const Header = (props) => {
14
+ const TreeItemHeader = (props) => {
38
15
  const { as: Tag = "a", href, selected, children, ...restProps } = props;
39
16
  const className = classNames__default("i-tree-item-header", {
40
17
  "i-tree-item-selected": selected,
@@ -44,37 +21,48 @@ const Header = (props) => {
44
21
  }
45
22
  return (jsxRuntime.jsx(Tag, { to: href || "", className: className, ...restProps, children: children }));
46
23
  };
47
- const TreeItem = (props) => {
48
- const { item, depth = 0, index, selected, checked = [], partofs = {}, checkable, nodeProps, renderExtra, onItemClick, onItemSelect, onItemCheck, ...restProps } = props;
49
- const { as, key = "", href, icon: icon$1, title, expanded, disabled } = item;
50
- const children = item[nodeProps.children];
51
- const [expand, setExpand] = react.useState(expanded);
52
- const handleExpand = (e, fromToggle) => {
53
- if (fromToggle) {
54
- e.preventDefault();
55
- e.stopPropagation();
56
- }
57
- if (disabled || !children?.length)
58
- return;
59
- setExpand((v) => !v);
60
- };
61
- const handleItemClick = (e) => {
62
- if (disabled) {
63
- e.preventDefault();
64
- e.stopPropagation();
65
- return;
66
- }
67
- handleExpand(e);
68
- onItemClick?.(item, e);
69
- onItemSelect?.(key, item);
70
- };
71
- const handleItemCheck = (checked) => onItemCheck?.(item, checked, []);
72
- const itemChecked = checked.includes(key);
73
- return (jsxRuntime.jsxs("div", { className: classNames__default("i-tree-item", {
74
- "i-tree-expand": expand,
75
- }), children: [jsxRuntime.jsxs(Header, { as: as, href: href, style: { paddingLeft: `${depth * 1.5 + 0.5}em` }, selected: selected === key, onClick: handleItemClick, children: [checkable && (jsxRuntime.jsx(checkbox.default.Item, { value: itemChecked, partof: !itemChecked && partofs[key], className: 'i-tree-checkbox', onChange: handleItemCheck, onClick: (e) => e.stopPropagation() })), icon$1 && jsxRuntime.jsx("span", { className: 'i-tree-item-icon', children: icon$1 }), jsxRuntime.jsx("span", { className: 'i-tree-item-title', children: title }), renderExtra?.(item), children && (jsxRuntime.jsx(icon.default, { icon: jsxRuntime.jsx(material.KeyboardArrowDownRound, {}), className: 'i-tree-toggle', onClick: (e) => handleExpand(e, true) }))] }), children?.length && (jsxRuntime.jsx("div", { className: 'i-tree-item-content', children: jsxRuntime.jsx(TreeList, { data: children, depth: depth + 1, selected: selected, checkable: checkable, parent: item, partofs: partofs, checked: checked, nodeProps: nodeProps, renderExtra: renderExtra, onItemClick: onItemClick, onItemSelect: onItemSelect, onItemCheck: onItemCheck, ...restProps }) }))] }));
76
- };
24
+ function TreeRow(props) {
25
+ const { flatNode, wrapperStyle, virtualMode, selected, checkedSet, partofs = {}, checkable, nodeProps, renderExtra, loadingKeys, onExpand, onItemClick, onItemSelect, onItemCheck, } = props;
26
+ const { node, depth, isExpanded } = flatNode;
27
+ const { key = "", as, href, icon: icon$1, title, disabled, type } = node;
28
+ const children = node[nodeProps.children];
29
+ const hasChildren = children instanceof Promise || (Array.isArray(children) && children.length > 0);
30
+ const loading$1 = loadingKeys?.includes(key);
31
+ if (type === "title") {
32
+ return jsxRuntime.jsx("div", { style: wrapperStyle, className: "i-tree-group-title", children: title });
33
+ }
34
+ if (type && type !== "item") {
35
+ return jsxRuntime.jsx("div", { style: wrapperStyle, className: `i-tree-type-${type}`, children: title });
36
+ }
37
+ return (jsxRuntime.jsx("div", { className: !virtualMode ? classNames__default("i-tree-item", { "i-tree-expand": isExpanded }) : undefined, style: wrapperStyle, children: jsxRuntime.jsxs(TreeItemHeader, { as: as, href: href, style: { paddingLeft: `${depth * 1.5 + 0.5}em` }, selected: selected === key, onClick: (e) => {
38
+ if (disabled) {
39
+ e.preventDefault();
40
+ e.stopPropagation();
41
+ return;
42
+ }
43
+ if (hasChildren)
44
+ onExpand(key);
45
+ onItemClick?.(node, e);
46
+ onItemSelect?.(key, node);
47
+ }, children: [checkable && (jsxRuntime.jsx(checkbox.default.Item, { value: checkedSet.has(key), partof: !checkedSet.has(key) && partofs[key], className: "i-tree-checkbox", onChange: () => onItemCheck?.(node, !checkedSet.has(key), []), onClick: (e) => e.stopPropagation() })), icon$1 && jsxRuntime.jsx("span", { className: "i-tree-item-icon", children: icon$1 }), jsxRuntime.jsx("span", { className: "i-tree-item-title", children: title }), renderExtra?.(node), hasChildren && (jsxRuntime.jsx(icon.default, { icon: loading$1 ? jsxRuntime.jsx(loading.default, { size: ".86em" }) : jsxRuntime.jsx(material.KeyboardArrowDownRound, {}), className: classNames__default("i-tree-toggle", {
48
+ "i-tree-expand": virtualMode ? isExpanded : false,
49
+ }), onClick: (e) => {
50
+ e.preventDefault();
51
+ e.stopPropagation();
52
+ onExpand(key);
53
+ } }))] }) }));
54
+ }
55
+ function TreeList(props) {
56
+ const { flatNodes, onExpand, selected, checkedSet, partofs = {}, checkable, nodeProps, renderExtra, loadingKeys, round, className, style, onItemClick, onItemSelect, onItemCheck } = props;
57
+ return (jsxRuntime.jsx("div", { className: classNames__default("i-tree", className, {
58
+ "i-tree-round": round,
59
+ }), style: style, children: flatNodes.map((flatNode) => {
60
+ const { key = "" } = flatNode.node;
61
+ return (jsxRuntime.jsx(TreeRow, { flatNode: flatNode, selected: selected, checkedSet: checkedSet, partofs: partofs, checkable: checkable, nodeProps: nodeProps, renderExtra: renderExtra, loadingKeys: loadingKeys, onExpand: onExpand, onItemClick: onItemClick, onItemSelect: onItemSelect, onItemCheck: onItemCheck }, key));
62
+ }) }));
63
+ }
77
64
 
78
- exports.TreeItem = TreeItem;
65
+ exports.TreeItemHeader = TreeItemHeader;
79
66
  exports.TreeList = TreeList;
67
+ exports.TreeRow = TreeRow;
80
68
  //# sourceMappingURL=item.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"item.js","sources":["../../../../packages/components/tree/item.tsx"],"sourcesContent":["import { KeyboardArrowDownRound } from \"@ricons/material\";\nimport classNames from \"classnames\";\nimport { MouseEvent, useState } from \"react\";\nimport Checkbox from \"../checkbox\";\nimport Icon from \"../icon\";\nimport { ITree, ITreeHeader, PropsTreeItem } from \"./type\";\n\ninterface ITreeList extends Omit<ITree, \"nodeProps\"> {\n\tnodeProps: {\n\t\tkey: string;\n\t\ttitle: string;\n\t\tchildren: string;\n\t};\n}\n\nexport function TreeList(props: ITreeList) {\n\tconst {\n\t\tdata = [],\n\t\tdepth = 0,\n\t\tround,\n\t\tstyle,\n\t\tclassName,\n\t\tparent,\n\t\tnodeProps,\n\t\t...restProps\n\t} = props;\n\n\tconst contents = data.map((item, i) => {\n\t\tconst { type } = item;\n\t\tconst title = item[nodeProps.title];\n\t\tconst itemKey =\n\t\t\titem[nodeProps.key] ||\n\t\t\t(parent?.key !== undefined ? `${parent.key}-${i}` : `${i}`);\n\n\t\titem.key = itemKey;\n\t\titem.parent = parent;\n\n\t\tif (type === \"title\") {\n\t\t\treturn (\n\t\t\t\t<div key={i} className='i-tree-group-title'>\n\t\t\t\t\t{title}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tif (type && type !== \"item\") {\n\t\t\treturn (\n\t\t\t\t<div key={i} className={`i-tree-type-${type}`}>\n\t\t\t\t\t{title}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<TreeItem\n\t\t\t\tkey={itemKey}\n\t\t\t\tindex={i}\n\t\t\t\titem={item}\n\t\t\t\tdepth={depth}\n\t\t\t\tnodeProps={nodeProps}\n\t\t\t\t{...restProps}\n\t\t\t/>\n\t\t);\n\t});\n\n\tif (depth > 0) return <>{contents}</>;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={classNames(\"i-tree\", className, {\n\t\t\t\t\"i-tree-round\": round,\n\t\t\t})}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t{contents}\n\t\t</div>\n\t);\n}\n\nconst Header = (props: ITreeHeader) => {\n\tconst { as: Tag = \"a\", href, selected, children, ...restProps } = props;\n\n\tconst className = classNames(\"i-tree-item-header\", {\n\t\t\"i-tree-item-selected\": selected,\n\t});\n\n\tif (typeof Tag === \"string\") {\n\t\treturn (\n\t\t\t<Tag href={href} className={className} {...restProps}>\n\t\t\t\t{children}\n\t\t\t</Tag>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Tag to={href || \"\"} className={className} {...restProps}>\n\t\t\t{children}\n\t\t</Tag>\n\t);\n};\n\nexport const TreeItem = (props: PropsTreeItem) => {\n\tconst {\n\t\titem,\n\t\tdepth = 0,\n\t\tindex,\n\t\tselected,\n\t\tchecked = [],\n\t\tpartofs = {},\n\t\tcheckable,\n\t\tnodeProps,\n\t\trenderExtra,\n\t\tonItemClick,\n\t\tonItemSelect,\n\t\tonItemCheck,\n\t\t...restProps\n\t} = props;\n\n\tconst { as, key = \"\", href, icon, title, expanded, disabled } = item;\n\tconst children = item[nodeProps.children];\n\n\tconst [expand, setExpand] = useState(expanded);\n\n\tconst handleExpand = (e: MouseEvent<HTMLElement>, fromToggle?: boolean) => {\n\t\tif (fromToggle) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\tif (disabled || !children?.length) return;\n\n\t\tsetExpand((v) => !v);\n\t};\n\n\tconst handleItemClick = (e: MouseEvent<HTMLElement>) => {\n\t\tif (disabled) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\treturn;\n\t\t}\n\n\t\thandleExpand(e);\n\t\tonItemClick?.(item, e);\n\t\tonItemSelect?.(key, item);\n\t};\n\n\tconst handleItemCheck = (checked) => onItemCheck?.(item, checked, []);\n\tconst itemChecked = checked.includes(key);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={classNames(\"i-tree-item\", {\n\t\t\t\t\"i-tree-expand\": expand,\n\t\t\t})}\n\t\t>\n\t\t\t<Header\n\t\t\t\tas={as}\n\t\t\t\thref={href}\n\t\t\t\tstyle={{ paddingLeft: `${depth * 1.5 + 0.5}em` }}\n\t\t\t\tselected={selected === key}\n\t\t\t\tonClick={handleItemClick}\n\t\t\t>\n\t\t\t\t{checkable && (\n\t\t\t\t\t<Checkbox.Item\n\t\t\t\t\t\tvalue={itemChecked}\n\t\t\t\t\t\tpartof={!itemChecked && partofs[key]}\n\t\t\t\t\t\tclassName='i-tree-checkbox'\n\t\t\t\t\t\tonChange={handleItemCheck}\n\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{icon && <span className='i-tree-item-icon'>{icon}</span>}\n\n\t\t\t\t<span className='i-tree-item-title'>{title}</span>\n\n\t\t\t\t{renderExtra?.(item)}\n\n\t\t\t\t{children && (\n\t\t\t\t\t<Icon\n\t\t\t\t\t\ticon={<KeyboardArrowDownRound />}\n\t\t\t\t\t\tclassName='i-tree-toggle'\n\t\t\t\t\t\tonClick={(e) => handleExpand(e, true)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</Header>\n\n\t\t\t{children?.length && (\n\t\t\t\t<div className='i-tree-item-content'>\n\t\t\t\t\t<TreeList\n\t\t\t\t\t\tdata={children}\n\t\t\t\t\t\tdepth={depth + 1}\n\t\t\t\t\t\tselected={selected}\n\t\t\t\t\t\tcheckable={checkable}\n\t\t\t\t\t\tparent={item}\n\t\t\t\t\t\tpartofs={partofs}\n\t\t\t\t\t\tchecked={checked}\n\t\t\t\t\t\tnodeProps={nodeProps}\n\t\t\t\t\t\trenderExtra={renderExtra}\n\t\t\t\t\t\tonItemClick={onItemClick}\n\t\t\t\t\t\tonItemSelect={onItemSelect}\n\t\t\t\t\t\tonItemCheck={onItemCheck}\n\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n"],"names":["_jsx","_Fragment","classNames","icon","useState","_jsxs","Checkbox","Icon","KeyboardArrowDownRound"],"mappings":"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"}
1
+ {"version":3,"file":"item.js","sources":["../../../../packages/components/tree/item.tsx"],"sourcesContent":["import { KeyboardArrowDownRound } from \"@ricons/material\";\nimport classNames from \"classnames\";\nimport { MouseEvent } from \"react\";\nimport Checkbox from \"../checkbox\";\nimport Icon from \"../icon\";\nimport Loading from \"../loading\";\nimport { FlatNode, ITreeItem } from \"./type\";\n\nexport const TreeItemHeader = (props: {\n as?: ITreeItem[\"as\"];\n href?: string;\n selected?: boolean;\n style?: React.CSSProperties;\n children: React.ReactNode;\n onClick?: (e: MouseEvent<HTMLElement>) => void;\n}) => {\n const { as: Tag = \"a\", href, selected, children, ...restProps } = props;\n\n const className = classNames(\"i-tree-item-header\", {\n \"i-tree-item-selected\": selected,\n });\n\n if (typeof Tag === \"string\") {\n return (\n <Tag href={href} className={className} {...restProps}>\n {children}\n </Tag>\n );\n }\n\n return (\n <Tag to={href || \"\"} className={className} {...restProps}>\n {children}\n </Tag>\n );\n};\n\nexport interface TreeRowProps {\n\tflatNode: FlatNode;\n\twrapperStyle?: React.CSSProperties;\n\tvirtualMode?: boolean;\n\tselected?: string;\n\tcheckedSet: Set<string>;\n\tpartofs?: Record<string, boolean>;\n\tcheckable?: boolean;\n\tnodeProps: { key: string; title: string; children: string };\n\trenderExtra?: (item: ITreeItem) => React.ReactNode;\n\tloadingKeys?: string[];\n\tonExpand: (key: string) => void;\n\tonItemClick?: (item: ITreeItem, e: MouseEvent<HTMLElement>) => void;\n\tonItemSelect?: (key: string, item: ITreeItem) => void;\n\tonItemCheck?: (item: ITreeItem, checked: boolean, checkedKeys: string[]) => void;\n}\n\nexport function TreeRow(props: TreeRowProps) {\n\tconst {\n\t\tflatNode,\n\t\twrapperStyle,\n\t\tvirtualMode,\n\t\tselected,\n\t\tcheckedSet,\n\t\tpartofs = {},\n\t\tcheckable,\n\t\tnodeProps,\n\t\trenderExtra,\n\t\tloadingKeys,\n\t\tonExpand,\n\t\tonItemClick,\n\t\tonItemSelect,\n\t\tonItemCheck,\n\t} = props;\n\n\tconst { node, depth, isExpanded } = flatNode;\n\tconst { key = \"\", as, href, icon, title, disabled, type } = node;\n\tconst children = node[nodeProps.children];\n\tconst hasChildren = children instanceof Promise || (Array.isArray(children) && children.length > 0);\n\tconst loading = loadingKeys?.includes(key);\n\n\tif (type === \"title\") {\n\t\treturn <div style={wrapperStyle} className=\"i-tree-group-title\">{title}</div>;\n\t}\n\n\tif (type && type !== \"item\") {\n\t\treturn <div style={wrapperStyle} className={`i-tree-type-${type}`}>{title}</div>;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={!virtualMode ? classNames(\"i-tree-item\", { \"i-tree-expand\": isExpanded }) : undefined}\n\t\t\tstyle={wrapperStyle}\n\t\t>\n\t\t\t<TreeItemHeader\n\t\t\t\tas={as}\n\t\t\t\thref={href}\n\t\t\t\tstyle={{ paddingLeft: `${depth * 1.5 + 0.5}em` }}\n\t\t\t\tselected={selected === key}\n\t\t\t\tonClick={(e) => {\n\t\t\t\t\tif (disabled) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (hasChildren) onExpand(key);\n\t\t\t\t\tonItemClick?.(node, e);\n\t\t\t\t\tonItemSelect?.(key, node);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{checkable && (\n\t\t\t\t\t<Checkbox.Item\n\t\t\t\t\t\tvalue={checkedSet.has(key)}\n\t\t\t\t\t\tpartof={!checkedSet.has(key) && partofs[key]}\n\t\t\t\t\t\tclassName=\"i-tree-checkbox\"\n\t\t\t\t\t\tonChange={() => onItemCheck?.(node, !checkedSet.has(key), [])}\n\t\t\t\t\t\tonClick={(e: MouseEvent) => e.stopPropagation()}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{icon && <span className=\"i-tree-item-icon\">{icon}</span>}\n\n\t\t\t\t<span className=\"i-tree-item-title\">{title}</span>\n\n\t\t\t\t{renderExtra?.(node)}\n\n\t\t\t\t{hasChildren && (\n\t\t\t\t\t<Icon\n\t\t\t\t\t\ticon={loading ? <Loading size=\".86em\" /> : <KeyboardArrowDownRound />}\n\t\t\t\t\t\tclassName={classNames(\"i-tree-toggle\", {\n\t\t\t\t\t\t\t\"i-tree-expand\": virtualMode ? isExpanded : false,\n\t\t\t\t\t\t})}\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tonExpand(key);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</TreeItemHeader>\n\t\t</div>\n\t);\n}\n\ninterface TreeListProps {\n flatNodes: FlatNode[];\n onExpand: (key: string) => void;\n selected?: string;\n checkedSet: Set<string>;\n partofs?: Record<string, boolean>;\n checkable?: boolean;\n nodeProps: { key: string; title: string; children: string };\n renderExtra?: (item: ITreeItem) => React.ReactNode;\n loadingKeys?: string[];\n round?: boolean;\n className?: string;\n style?: React.CSSProperties;\n onItemClick?: (item: ITreeItem, e: MouseEvent<HTMLElement>) => void;\n onItemSelect?: (key: string, item: ITreeItem) => void;\n onItemCheck?: (item: ITreeItem, checked: boolean, checkedKeys: string[]) => void;\n}\n\nexport function TreeList(props: TreeListProps) {\n const { flatNodes, onExpand, selected, checkedSet, partofs = {}, checkable, nodeProps, renderExtra, loadingKeys, round, className, style, onItemClick, onItemSelect, onItemCheck } = props;\n\n return (\n <div\n className={classNames(\"i-tree\", className, {\n \"i-tree-round\": round,\n })}\n style={style}\n >\n {flatNodes.map((flatNode) => {\n const { key = \"\" } = flatNode.node;\n return (\n <TreeRow\n key={key}\n flatNode={flatNode}\n selected={selected}\n checkedSet={checkedSet}\n partofs={partofs}\n checkable={checkable}\n nodeProps={nodeProps}\n renderExtra={renderExtra}\n loadingKeys={loadingKeys}\n onExpand={onExpand}\n onItemClick={onItemClick}\n onItemSelect={onItemSelect}\n onItemCheck={onItemCheck}\n />\n );\n })}\n </div>\n );\n}\n"],"names":["classNames","_jsx","icon","loading","_jsxs","Checkbox","Icon","Loading","KeyboardArrowDownRound"],"mappings":"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"}
@@ -3,22 +3,95 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
+ var reactDom = require('react-dom');
6
7
  var react = require('react');
7
8
  var item = require('./item.js');
9
+ var virtual = require('./virtual.js');
8
10
 
9
11
  const defaultNodeProps = {
10
12
  key: "key",
11
13
  title: "title",
12
14
  children: "children",
13
15
  };
16
+ function flattenTree(nodes, expandedMap, nodeProps, depth = 0, parentItem, asyncChildrenMap = {}) {
17
+ const result = [];
18
+ nodes.forEach((item, i) => {
19
+ const mapKey = item[nodeProps.key];
20
+ item.key = mapKey || `${parentItem?.key ?? ""}-${i}`;
21
+ item.parent = parentItem;
22
+ const isExpanded = !!expandedMap[item.key];
23
+ result.push({ node: item, depth, isExpanded });
24
+ const children = asyncChildrenMap[item.key] || item[nodeProps.children];
25
+ if (Array.isArray(children) && children.length) {
26
+ const childNodes = flattenTree(children, expandedMap, nodeProps, depth + 1, item, asyncChildrenMap);
27
+ if (isExpanded)
28
+ result.push(...childNodes);
29
+ }
30
+ });
31
+ return result;
32
+ }
14
33
  const Tree = (props) => {
15
- const { data = [], ref, selected, checked = [], disabledRelated, nodeProps, onItemSelect, onItemCheck, ...restProps } = props;
34
+ const { data = [], ref, selected, checked = [], disabledRelated, nodeProps, height, useVirtual, onItemSelect, onItemCheck, ...restProps } = props;
16
35
  const [selectedKey, setSelectedKey] = react.useState(selected);
17
36
  const [checkedKeys, setCheckedKeys] = react.useState(checked);
18
37
  const [partofs, setPartofs] = react.useState({});
38
+ const [loadingMap, setLoadingMap] = react.useState({});
39
+ const [asyncChildrenMap, setAsyncChildrenMap] = react.useState({});
19
40
  const nodeMapsRef = react.useRef(new Map());
20
- const oNodeProps = Object.assign({}, defaultNodeProps, nodeProps);
21
- const isChecked = (key) => checkedKeys.includes(key || "");
41
+ const oNodeProps = react.useMemo(() => ({ ...defaultNodeProps, ...nodeProps }), [nodeProps]);
42
+ const checkedSet = react.useMemo(() => new Set(checkedKeys), [checkedKeys]);
43
+ const [expandedMap, setExpandedMap] = react.useState(() => {
44
+ const map = {};
45
+ const walk = (nodes, parentKey = "") => {
46
+ nodes.forEach((item, i) => {
47
+ const mapKey = item[oNodeProps.key];
48
+ const key = mapKey || `${parentKey}-${i}`;
49
+ if (item.expanded)
50
+ map[key] = true;
51
+ const children = item[oNodeProps.children];
52
+ if (Array.isArray(children) && children.length)
53
+ walk(children, key);
54
+ });
55
+ };
56
+ walk(data);
57
+ return map;
58
+ });
59
+ const handleExpand = (key) => {
60
+ if (loadingMap[key])
61
+ return;
62
+ const item = nodeMapsRef.current.get(key);
63
+ if (!item)
64
+ return;
65
+ const rawChildren = item[oNodeProps.children];
66
+ const isAsync = rawChildren instanceof Promise;
67
+ const isExpanded = !!expandedMap[key];
68
+ if (isAsync && !isExpanded) {
69
+ reactDom.flushSync(() => {
70
+ setLoadingMap((prev) => ({ ...prev, [key]: true }));
71
+ setExpandedMap((prev) => ({ ...prev, [key]: true }));
72
+ });
73
+ rawChildren
74
+ .then((resolved) => {
75
+ item[oNodeProps.children] = resolved;
76
+ setAsyncChildrenMap((prev) => ({ ...prev, [key]: resolved }));
77
+ })
78
+ .finally(() => {
79
+ setLoadingMap((prev) => {
80
+ const next = { ...prev };
81
+ delete next[key];
82
+ return next;
83
+ });
84
+ });
85
+ }
86
+ else {
87
+ setExpandedMap((prev) => ({
88
+ ...prev,
89
+ [key]: !prev[key],
90
+ }));
91
+ }
92
+ };
93
+ const flatNodes = react.useMemo(() => flattenTree(data, expandedMap, oNodeProps, 0, undefined, asyncChildrenMap), [data, expandedMap, oNodeProps, asyncChildrenMap]);
94
+ const loadingKeys = react.useMemo(() => Object.keys(loadingMap).filter((k) => loadingMap[k]), [loadingMap]);
22
95
  const checkItem = (item, checked, direction) => {
23
96
  const { key = "", parent, children } = item;
24
97
  const shouldChanged = { [key]: checked };
@@ -27,7 +100,9 @@ const Tree = (props) => {
27
100
  return [shouldChanged];
28
101
  if (checked) {
29
102
  if (parent && direction !== "leaf") {
30
- const hasUnchecked = parent.children?.some((o) => o.key !== key && !isChecked(o.key));
103
+ const hasUnchecked = Array.isArray(parent.children)
104
+ ? parent.children.some((o) => o.key !== key && !checkedSet.has(o.key))
105
+ : false;
31
106
  const [changes, parts] = checkItem(parent, true, "root");
32
107
  if (!hasUnchecked) {
33
108
  Object.assign(shouldChanged, changes);
@@ -36,9 +111,9 @@ const Tree = (props) => {
36
111
  [parent.key]: true,
37
112
  });
38
113
  }
39
- if (children?.length && direction !== "root") {
114
+ if (Array.isArray(children) && children.length && direction !== "root") {
40
115
  children.map((o) => {
41
- if (isChecked(o.key))
116
+ if (checkedSet.has(o.key))
42
117
  return;
43
118
  const [changes] = checkItem(o, true, "leaf");
44
119
  Object.assign(shouldChanged, changes);
@@ -50,16 +125,18 @@ const Tree = (props) => {
50
125
  if (parent && direction !== "leaf") {
51
126
  const [changes, parts] = checkItem(parent, false, "root");
52
127
  Object.assign(shouldChanged, changes);
53
- const hasChecked = parent.children?.some((o) => isChecked(o.key) && o.key !== key);
128
+ const hasChecked = Array.isArray(parent.children)
129
+ ? parent.children.some((o) => checkedSet.has(o.key) && o.key !== key)
130
+ : false;
54
131
  Object.assign(partofs, hasChecked ? {} : parts, {
55
132
  [parent.key]: hasChecked,
56
133
  [key]: false,
57
134
  });
58
135
  }
59
- if (children?.length && direction !== "root") {
136
+ if (Array.isArray(children) && children.length && direction !== "root") {
60
137
  children.map((o) => {
61
138
  const [changes] = checkItem(o, false, "leaf");
62
- if (!isChecked(o.key))
139
+ if (!checkedSet.has(o.key))
63
140
  return;
64
141
  Object.assign(shouldChanged, changes);
65
142
  partofs[o.key] = false;
@@ -70,9 +147,10 @@ const Tree = (props) => {
70
147
  const handleCheck = (item, checked) => {
71
148
  const [shouldChanged, partofs] = checkItem(item, checked);
72
149
  const changedKeys = Object.keys(shouldChanged);
150
+ const changedKeysSet = new Set(changedKeys);
73
151
  const nextChecked = checked
74
152
  ? Array.from(new Set([...checkedKeys, ...changedKeys]))
75
- : checkedKeys.filter((k) => !changedKeys.includes(k));
153
+ : checkedKeys.filter((k) => !changedKeysSet.has(k));
76
154
  setCheckedKeys(nextChecked);
77
155
  setPartofs((p) => ({ ...p, ...partofs }));
78
156
  onItemCheck?.(item, checked, nextChecked);
@@ -90,15 +168,37 @@ const Tree = (props) => {
90
168
  }, [selected]);
91
169
  react.useEffect(() => {
92
170
  nodeMapsRef.current.clear();
93
- const { key, children } = oNodeProps;
94
- const recursive = (nodes) => {
95
- nodes.map((o) => {
96
- nodeMapsRef.current.set(o[key], o);
97
- o[children]?.length > 0 && recursive(o[children]);
171
+ const { key: keyProp, children: childrenProp } = oNodeProps;
172
+ const walk = (nodes, parentKey = "") => {
173
+ nodes.forEach((item, i) => {
174
+ const mapKey = item[keyProp];
175
+ const key = (mapKey || `${parentKey}-${i}`);
176
+ nodeMapsRef.current.set(key, item);
177
+ const itemChildren = item[childrenProp];
178
+ if (Array.isArray(itemChildren) && itemChildren.length) {
179
+ walk(itemChildren, key);
180
+ }
98
181
  });
99
182
  };
100
- recursive(data);
101
- }, [data]);
183
+ walk(data);
184
+ }, [data, oNodeProps, asyncChildrenMap]);
185
+ react.useEffect(() => {
186
+ if (!props.selected)
187
+ return;
188
+ const node = nodeMapsRef.current.get(props.selected);
189
+ if (!node)
190
+ return;
191
+ const toExpand = {};
192
+ let p = node.parent;
193
+ while (p) {
194
+ if (p.key)
195
+ toExpand[p.key] = true;
196
+ p = p.parent;
197
+ }
198
+ if (Object.keys(toExpand).length > 0) {
199
+ setExpandedMap((prev) => ({ ...prev, ...toExpand }));
200
+ }
201
+ }, [props.selected]);
102
202
  react.useImperativeHandle(ref, () => {
103
203
  return {
104
204
  getChecked: () => {
@@ -127,7 +227,10 @@ const Tree = (props) => {
127
227
  },
128
228
  };
129
229
  });
130
- return (jsxRuntime.jsx(item.TreeList, { data: data, selected: selectedKey, checked: checkedKeys, partofs: partofs, nodeProps: oNodeProps, onItemCheck: handleCheck, onItemSelect: handleSelect, ...restProps }));
230
+ if (useVirtual) {
231
+ return (jsxRuntime.jsx(virtual.default, { flatNodes: flatNodes, onExpand: handleExpand, height: height, useVirtual: useVirtual, selected: selectedKey, checkedSet: checkedSet, partofs: partofs, nodeProps: oNodeProps, loadingKeys: loadingKeys, onItemCheck: handleCheck, onItemSelect: handleSelect, ...restProps }));
232
+ }
233
+ return (jsxRuntime.jsx(item.TreeList, { flatNodes: flatNodes, onExpand: handleExpand, selected: selectedKey, checkedSet: checkedSet, partofs: partofs, nodeProps: oNodeProps, loadingKeys: loadingKeys, onItemCheck: handleCheck, onItemSelect: handleSelect, ...restProps }));
131
234
  };
132
235
 
133
236
  exports.default = Tree;
@@ -1 +1 @@
1
- {"version":3,"file":"tree.js","sources":["../../../../packages/components/tree/tree.tsx"],"sourcesContent":["import { useEffect, useImperativeHandle, useRef, useState } from \"react\";\nimport \"./index.css\";\nimport { TreeList } from \"./item\";\nimport { ITree, ITreeItem } from \"./type\";\n\nconst defaultNodeProps = {\n\tkey: \"key\",\n\ttitle: \"title\",\n\tchildren: \"children\",\n};\n\nconst Tree = (props: ITree) => {\n\tconst {\n\t\tdata = [],\n\t\tref,\n\t\tselected,\n\t\tchecked = [],\n\t\tdisabledRelated,\n\t\tnodeProps,\n\t\tonItemSelect,\n\t\tonItemCheck,\n\t\t...restProps\n\t} = props;\n\tconst [selectedKey, setSelectedKey] = useState(selected);\n\tconst [checkedKeys, setCheckedKeys] = useState(checked);\n\tconst [partofs, setPartofs] = useState<Record<string, boolean>>({});\n\tconst nodeMapsRef = useRef<Map<any, any>>(new Map());\n\tconst oNodeProps = Object.assign({}, defaultNodeProps, nodeProps);\n\n\tconst isChecked = (key?: string) => checkedKeys.includes(key || \"\");\n\n\tconst checkItem = (\n\t\titem: ITreeItem,\n\t\tchecked: boolean,\n\t\tdirection?: \"root\" | \"leaf\"\n\t) => {\n\t\tconst { key = \"\", parent, children } = item;\n\t\tconst shouldChanged = { [key]: checked };\n\t\tconst partofs = { [key]: false };\n\n\t\tif (disabledRelated) return [shouldChanged];\n\n\t\tif (checked) {\n\t\t\tif (parent && direction !== \"leaf\") {\n\t\t\t\tconst hasUnchecked = parent.children?.some(\n\t\t\t\t\t(o) => o.key !== key && !isChecked(o.key)\n\t\t\t\t);\n\n\t\t\t\tconst [changes, parts] = checkItem(parent, true, \"root\");\n\n\t\t\t\tif (!hasUnchecked) {\n\t\t\t\t\tObject.assign(shouldChanged, changes);\n\t\t\t\t}\n\n\t\t\t\tObject.assign(partofs, hasUnchecked ? parts : {}, {\n\t\t\t\t\t[parent.key as string]: true,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (children?.length && direction !== \"root\") {\n\t\t\t\tchildren.map((o) => {\n\t\t\t\t\tif (isChecked(o.key)) return;\n\n\t\t\t\t\tconst [changes] = checkItem(o, true, \"leaf\");\n\n\t\t\t\t\tObject.assign(shouldChanged, changes);\n\t\t\t\t\tpartofs[o.key as string] = false;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn [shouldChanged, partofs];\n\t\t}\n\n\t\tif (parent && direction !== \"leaf\") {\n\t\t\tconst [changes, parts] = checkItem(parent, false, \"root\");\n\n\t\t\tObject.assign(shouldChanged, changes);\n\n\t\t\tconst hasChecked = parent.children?.some(\n\t\t\t\t(o) => isChecked(o.key) && o.key !== key\n\t\t\t);\n\n\t\t\tObject.assign(partofs, hasChecked ? {} : parts, {\n\t\t\t\t[parent.key as string]: hasChecked,\n\t\t\t\t[key]: false,\n\t\t\t});\n\t\t}\n\t\tif (children?.length && direction !== \"root\") {\n\t\t\tchildren.map((o) => {\n\t\t\t\tconst [changes] = checkItem(o, false, \"leaf\");\n\n\t\t\t\tif (!isChecked(o.key)) return;\n\n\t\t\t\tObject.assign(shouldChanged, changes);\n\t\t\t\tpartofs[o.key as string] = false;\n\t\t\t});\n\t\t}\n\n\t\treturn [shouldChanged, partofs];\n\t};\n\n\tconst handleCheck = (item: ITreeItem, checked: boolean) => {\n\t\tconst [shouldChanged, partofs] = checkItem(item, checked);\n\t\tconst changedKeys = Object.keys(shouldChanged);\n\n\t\tconst nextChecked = checked\n\t\t\t? Array.from(new Set([...checkedKeys, ...changedKeys]))\n\t\t\t: checkedKeys.filter((k) => !changedKeys.includes(k));\n\n\t\tsetCheckedKeys(nextChecked);\n\t\tsetPartofs((p) => ({ ...p, ...partofs }));\n\t\tonItemCheck?.(item, checked, nextChecked);\n\t};\n\n\tconst handleSelect = (key: string, item: ITreeItem) => {\n\t\tif (!props.selectable) return;\n\n\t\tsetSelectedKey(key);\n\t\tonItemSelect?.(key, item);\n\t};\n\n\tuseEffect(() => {\n\t\tif (selected === undefined) return;\n\n\t\tsetSelectedKey(selected);\n\t}, [selected]);\n\n\tuseEffect(() => {\n\t\tnodeMapsRef.current.clear();\n\n\t\tconst { key, children } = oNodeProps;\n\t\tconst recursive = (nodes) => {\n\t\t\tnodes.map((o) => {\n\t\t\t\tnodeMapsRef.current.set(o[key], o);\n\n\t\t\t\to[children]?.length > 0 && recursive(o[children]);\n\t\t\t});\n\t\t};\n\n\t\trecursive(data);\n\t}, [data]);\n\n\tuseImperativeHandle(ref, () => {\n\t\treturn {\n\t\t\tgetChecked: () => {\n\t\t\t\tconst items: ITreeItem[] = [];\n\t\t\t\tcheckedKeys.map((k) => {\n\t\t\t\t\tconst item = nodeMapsRef.current.get(k);\n\t\t\t\t\titems.push(item);\n\t\t\t\t});\n\t\t\t\treturn [checkedKeys, items];\n\t\t\t},\n\t\t\tgetSelected: () => {\n\t\t\t\tconst item = nodeMapsRef.current.get(selectedKey);\n\t\t\t\treturn [selectedKey, item];\n\t\t\t},\n\t\t\tgetPartofs: () => {\n\t\t\t\tconst items: ITreeItem[] = [];\n\t\t\t\tconst keys = Object.keys(partofs).filter((k) => {\n\t\t\t\t\tconst indeterminate = partofs[k];\n\n\t\t\t\t\tif (indeterminate) {\n\t\t\t\t\t\tconst item = nodeMapsRef.current.get(k);\n\t\t\t\t\t\titems.push(item);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn indeterminate;\n\t\t\t\t});\n\n\t\t\t\treturn [keys, items];\n\t\t\t},\n\t\t};\n\t});\n\n\treturn (\n\t\t<TreeList\n\t\t\tdata={data}\n\t\t\tselected={selectedKey}\n\t\t\tchecked={checkedKeys}\n\t\t\tpartofs={partofs}\n\t\t\tnodeProps={oNodeProps}\n\t\t\tonItemCheck={handleCheck}\n\t\t\tonItemSelect={handleSelect}\n\t\t\t{...restProps}\n\t\t/>\n\t);\n};\n\nexport default Tree;\n"],"names":["useState","useRef","useEffect","useImperativeHandle","_jsx","TreeList"],"mappings":"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"}
1
+ {"version":3,"file":"tree.js","sources":["../../../../packages/components/tree/tree.tsx"],"sourcesContent":["import { flushSync } from \"react-dom\";\nimport { useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport \"./index.css\";\nimport { TreeList } from \"./item\";\nimport { ITree, ITreeItem, FlatNode } from \"./type\";\nimport VirtualTree from \"./virtual\";\n\nconst defaultNodeProps = {\n\tkey: \"key\",\n\ttitle: \"title\",\n\tchildren: \"children\",\n};\n\nfunction flattenTree(\n\tnodes: ITreeItem[],\n\texpandedMap: Record<string, boolean>,\n\tnodeProps: { key: string; title: string; children: string },\n\tdepth = 0,\n\tparentItem?: ITreeItem,\n\tasyncChildrenMap: Record<string, ITreeItem[]> = {},\n): FlatNode[] {\n\tconst result: FlatNode[] = [];\n\tnodes.forEach((item, i) => {\n\t\tconst mapKey = item[nodeProps.key];\n\t\titem.key = mapKey || `${parentItem?.key ?? \"\"}-${i}`;\n\t\titem.parent = parentItem;\n\t\tconst isExpanded = !!expandedMap[item.key];\n\t\tresult.push({ node: item, depth, isExpanded });\n\t\tconst children = asyncChildrenMap[item.key as string] || item[nodeProps.children];\n\t\tif (Array.isArray(children) && children.length) {\n\t\t\tconst childNodes = flattenTree(children, expandedMap, nodeProps, depth + 1, item, asyncChildrenMap);\n\t\t\tif (isExpanded) result.push(...childNodes);\n\t\t}\n\t});\n\treturn result;\n}\n\nconst Tree = (props: ITree) => {\n\tconst {\n\t\tdata = [],\n\t\tref,\n\t\tselected,\n\t\tchecked = [],\n\t\tdisabledRelated,\n\t\tnodeProps,\n\t\theight,\n\t\tuseVirtual,\n\t\tonItemSelect,\n\t\tonItemCheck,\n\t\t...restProps\n\t} = props;\n\tconst [selectedKey, setSelectedKey] = useState(selected);\n\tconst [checkedKeys, setCheckedKeys] = useState(checked);\n\tconst [partofs, setPartofs] = useState<Record<string, boolean>>({});\n\tconst [loadingMap, setLoadingMap] = useState<Record<string, boolean>>({});\n\tconst [asyncChildrenMap, setAsyncChildrenMap] = useState<Record<string, ITreeItem[]>>({});\n\tconst nodeMapsRef = useRef<Map<string, ITreeItem>>(new Map());\n\tconst oNodeProps = useMemo(\n\t\t() => ({ ...defaultNodeProps, ...nodeProps }),\n\t\t[nodeProps],\n\t);\n\tconst checkedSet = useMemo(() => new Set(checkedKeys), [checkedKeys]);\n\n\tconst [expandedMap, setExpandedMap] = useState<Record<string, boolean>>(\n\t\t() => {\n\t\t\tconst map: Record<string, boolean> = {};\n\t\t\tconst walk = (nodes: ITreeItem[], parentKey = \"\") => {\n\t\t\t\tnodes.forEach((item, i) => {\n\t\t\t\t\tconst mapKey = item[oNodeProps.key] as string | undefined;\n\t\t\t\t\tconst key = mapKey || `${parentKey}-${i}`;\n\t\t\t\t\tif (item.expanded) map[key] = true;\n\t\t\t\t\tconst children = item[oNodeProps.children];\n\t\t\t\t\tif (Array.isArray(children) && children.length) walk(children, key);\n\t\t\t\t});\n\t\t\t};\n\t\t\twalk(data);\n\t\t\treturn map;\n\t\t},\n\t);\n\n\tconst handleExpand = (key: string) => {\n\t\tif (loadingMap[key]) return;\n\n\t\tconst item = nodeMapsRef.current.get(key);\n\t\tif (!item) return;\n\n\t\tconst rawChildren = item[oNodeProps.children];\n\t\tconst isAsync = rawChildren instanceof Promise;\n\t\tconst isExpanded = !!expandedMap[key];\n\n\t\tif (isAsync && !isExpanded) {\n\t\t\tflushSync(() => {\n\t\t\t\tsetLoadingMap((prev) => ({ ...prev, [key]: true }));\n\t\t\t\tsetExpandedMap((prev) => ({ ...prev, [key]: true }));\n\t\t\t});\n\n\t\t\trawChildren\n\t\t\t\t.then((resolved: ITreeItem[]) => {\n\t\t\t\t\titem[oNodeProps.children] = resolved;\n\t\t\t\t\tsetAsyncChildrenMap((prev) => ({ ...prev, [key]: resolved }));\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tsetLoadingMap((prev) => {\n\t\t\t\t\t\tconst next = { ...prev };\n\t\t\t\t\t\tdelete next[key];\n\t\t\t\t\t\treturn next;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t} else {\n\t\t\tsetExpandedMap((prev) => ({\n\t\t\t\t...prev,\n\t\t\t\t[key]: !prev[key],\n\t\t\t}));\n\t\t}\n\t};\n\n\tconst flatNodes = useMemo(\n\t\t() => flattenTree(data, expandedMap, oNodeProps, 0, undefined, asyncChildrenMap),\n\t\t[data, expandedMap, oNodeProps, asyncChildrenMap],\n\t);\n\n\tconst loadingKeys = useMemo(\n\t\t() => Object.keys(loadingMap).filter((k) => loadingMap[k]),\n\t\t[loadingMap],\n\t);\n\n\n\tconst checkItem = (\n\t\titem: ITreeItem,\n\t\tchecked: boolean,\n\t\tdirection?: \"root\" | \"leaf\",\n\t) => {\n\t\tconst { key = \"\", parent, children } = item;\n\t\tconst shouldChanged = { [key]: checked };\n\t\tconst partofs = { [key]: false };\n\n\t\tif (disabledRelated) return [shouldChanged];\n\n\t\tif (checked) {\n\t\t\tif (parent && direction !== \"leaf\") {\n\t\t\t\tconst hasUnchecked = Array.isArray(parent.children)\n\t\t\t\t\t? parent.children.some(\n\t\t\t\t\t\t(o) => o.key !== key && !checkedSet.has(o.key),\n\t\t\t\t\t)\n\t\t\t\t\t: false;\n\n\t\t\t\tconst [changes, parts] = checkItem(parent, true, \"root\");\n\n\t\t\t\tif (!hasUnchecked) {\n\t\t\t\t\tObject.assign(shouldChanged, changes);\n\t\t\t\t}\n\n\t\t\t\tObject.assign(partofs, hasUnchecked ? parts : {}, {\n\t\t\t\t\t[parent.key as string]: true,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (Array.isArray(children) && children.length && direction !== \"root\") {\n\t\t\t\tchildren.map((o) => {\n\t\t\t\t\tif (checkedSet.has(o.key)) return;\n\n\t\t\t\t\tconst [changes] = checkItem(o, true, \"leaf\");\n\n\t\t\t\t\tObject.assign(shouldChanged, changes);\n\t\t\t\t\tpartofs[o.key as string] = false;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn [shouldChanged, partofs];\n\t\t}\n\n\t\tif (parent && direction !== \"leaf\") {\n\t\t\tconst [changes, parts] = checkItem(parent, false, \"root\");\n\n\t\t\tObject.assign(shouldChanged, changes);\n\n\t\t\tconst hasChecked = Array.isArray(parent.children)\n\t\t\t\t? parent.children.some(\n\t\t\t\t\t(o) => checkedSet.has(o.key) && o.key !== key,\n\t\t\t\t)\n\t\t\t\t: false;\n\n\t\t\tObject.assign(partofs, hasChecked ? {} : parts, {\n\t\t\t\t[parent.key as string]: hasChecked,\n\t\t\t\t[key]: false,\n\t\t\t});\n\t\t}\n\t\tif (Array.isArray(children) && children.length && direction !== \"root\") {\n\t\t\tchildren.map((o) => {\n\t\t\t\tconst [changes] = checkItem(o, false, \"leaf\");\n\n\t\t\t\tif (!checkedSet.has(o.key)) return;\n\n\t\t\t\tObject.assign(shouldChanged, changes);\n\t\t\t\tpartofs[o.key as string] = false;\n\t\t\t});\n\t\t}\n\n\t\treturn [shouldChanged, partofs];\n\t};\n\n\tconst handleCheck = (item: ITreeItem, checked: boolean) => {\n\t\tconst [shouldChanged, partofs] = checkItem(item, checked);\n\t\tconst changedKeys = Object.keys(shouldChanged);\n\n\t\tconst changedKeysSet = new Set(changedKeys);\n\t\tconst nextChecked = checked\n\t\t\t? Array.from(new Set([...checkedKeys, ...changedKeys]))\n\t\t\t: checkedKeys.filter((k) => !changedKeysSet.has(k));\n\n\t\tsetCheckedKeys(nextChecked);\n\t\tsetPartofs((p) => ({ ...p, ...partofs }));\n\t\tonItemCheck?.(item, checked, nextChecked);\n\t};\n\n\tconst handleSelect = (key: string, item: ITreeItem) => {\n\t\tif (!props.selectable) return;\n\n\t\tsetSelectedKey(key);\n\t\tonItemSelect?.(key, item);\n\t};\n\n\tuseEffect(() => {\n\t\tif (selected === undefined) return;\n\n\t\tsetSelectedKey(selected);\n\t}, [selected]);\n\n\tuseEffect(() => {\n\t\tnodeMapsRef.current.clear();\n\t\tconst { key: keyProp, children: childrenProp } = oNodeProps;\n\t\tconst walk = (nodes: ITreeItem[], parentKey = \"\") => {\n\t\t\tnodes.forEach((item, i) => {\n\t\t\t\tconst mapKey = item[keyProp];\n\t\t\t\tconst key = (mapKey || `${parentKey}-${i}`) as string;\n\t\t\t\tnodeMapsRef.current.set(key, item);\n\t\t\t\tconst itemChildren = item[childrenProp];\n\t\t\t\tif (Array.isArray(itemChildren) && itemChildren.length) {\n\t\t\t\t\twalk(itemChildren, key);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\twalk(data);\n\t}, [data, oNodeProps, asyncChildrenMap]);\n\n\tuseEffect(() => {\n\t\tif (!props.selected) return;\n\n\t\tconst node = nodeMapsRef.current.get(props.selected);\n\t\tif (!node) return;\n\n\t\tconst toExpand: Record<string, boolean> = {};\n\t\tlet p = node.parent;\n\t\twhile (p) {\n\t\t\tif (p.key) toExpand[p.key] = true;\n\t\t\tp = p.parent;\n\t\t}\n\n\t\tif (Object.keys(toExpand).length > 0) {\n\t\t\tsetExpandedMap((prev) => ({ ...prev, ...toExpand }));\n\t\t}\n\t}, [props.selected]);\n\n\tuseImperativeHandle(ref, () => {\n\t\treturn {\n\t\t\tgetChecked: () => {\n\t\t\t\tconst items: ITreeItem[] = [];\n\t\t\t\tcheckedKeys.map((k) => {\n\t\t\t\t\tconst item = nodeMapsRef.current.get(k);\n\t\t\t\t\titems.push(item);\n\t\t\t\t});\n\t\t\t\treturn [checkedKeys, items];\n\t\t\t},\n\t\t\tgetSelected: () => {\n\t\t\t\tconst item = nodeMapsRef.current.get(selectedKey);\n\t\t\t\treturn [selectedKey, item];\n\t\t\t},\n\t\t\tgetPartofs: () => {\n\t\t\t\tconst items: ITreeItem[] = [];\n\t\t\t\tconst keys = Object.keys(partofs).filter((k) => {\n\t\t\t\t\tconst indeterminate = partofs[k];\n\n\t\t\t\t\tif (indeterminate) {\n\t\t\t\t\t\tconst item = nodeMapsRef.current.get(k);\n\t\t\t\t\t\titems.push(item);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn indeterminate;\n\t\t\t\t});\n\n\t\t\t\treturn [keys, items];\n\t\t\t},\n\t\t};\n\t});\n\n\tif (useVirtual) {\n\t\treturn (\n\t\t\t<VirtualTree\n\t\t\t\tflatNodes={flatNodes}\n\t\t\t\tonExpand={handleExpand}\n\t\t\t\theight={height}\n\t\t\t\tuseVirtual={useVirtual}\n\t\t\t\tselected={selectedKey}\n\t\t\t\tcheckedSet={checkedSet}\n\t\t\t\tpartofs={partofs}\n\t\t\t\tnodeProps={oNodeProps}\n\t\t\t\tloadingKeys={loadingKeys}\n\t\t\t\tonItemCheck={handleCheck}\n\t\t\t\tonItemSelect={handleSelect}\n\t\t\t\t{...restProps}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<TreeList\n\t\t\tflatNodes={flatNodes}\n\t\t\tonExpand={handleExpand}\n\t\t\tselected={selectedKey}\n\t\t\tcheckedSet={checkedSet}\n\t\t\tpartofs={partofs}\n\t\t\tnodeProps={oNodeProps}\n\t\t\tloadingKeys={loadingKeys}\n\t\t\tonItemCheck={handleCheck}\n\t\t\tonItemSelect={handleSelect}\n\t\t\t{...restProps}\n\t\t/>\n\t);\n};\n\nexport default Tree;\n"],"names":["useState","useRef","useMemo","flushSync","useEffect","useImperativeHandle","_jsx","VirtualTree","TreeList"],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var classNames = require('classnames');
7
+ var react = require('react');
8
+ var reactWindow = require('react-window');
9
+ var hooks = require('../../js/hooks.js');
10
+ var item = require('./item.js');
11
+
12
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
13
+
14
+ var classNames__default = /*#__PURE__*/_interopDefaultCompat(classNames);
15
+
16
+ function VirtualTree(props) {
17
+ const { flatNodes, onExpand, selected, checkedSet, partofs = {}, checkable, nodeProps, renderExtra, loadingKeys, height, useVirtual, className, style, onItemClick, onItemSelect, onItemCheck, } = props;
18
+ const listRef = react.useRef(null);
19
+ const wrapRef = react.useRef(null);
20
+ const ro = hooks.useResizeObserver();
21
+ const [viewportHeight, setViewportHeight] = react.useState(0);
22
+ react.useEffect(() => {
23
+ const el = wrapRef.current;
24
+ if (!el)
25
+ return;
26
+ const update = () => {
27
+ const r = el.getBoundingClientRect();
28
+ setViewportHeight((prev) => (prev === r.height ? prev : r.height));
29
+ };
30
+ update();
31
+ ro.observe?.(el, update);
32
+ return () => ro.unobserve?.(el);
33
+ }, [ro]);
34
+ const listHeight = Math.max(0, (typeof height === "number" ? height : viewportHeight || 360));
35
+ const propsRef = react.useRef(props);
36
+ propsRef.current = props;
37
+ const rowComponent = react.useCallback(({ index, style, }) => {
38
+ const p = propsRef.current;
39
+ const flatNode = p.flatNodes[index];
40
+ if (!flatNode)
41
+ return null;
42
+ return (jsxRuntime.jsx(item.TreeRow, { flatNode: flatNode, wrapperStyle: style, virtualMode: true, selected: p.selected, checkedSet: p.checkedSet, partofs: p.partofs, checkable: p.checkable, nodeProps: p.nodeProps, renderExtra: p.renderExtra, loadingKeys: p.loadingKeys, onExpand: p.onExpand, onItemClick: p.onItemClick, onItemSelect: p.onItemSelect, onItemCheck: p.onItemCheck }));
43
+ }, []);
44
+ return (jsxRuntime.jsx("div", { ref: wrapRef, className: classNames__default("i-tree", className), style: { display: "block", width: "100%", height: "100%", ...style }, children: jsxRuntime.jsx(reactWindow.List, { listRef: listRef, rowCount: flatNodes.length, rowHeight: useVirtual.rowHeight, overscanCount: Math.max(3, useVirtual.threshold ?? 8), rowProps: {}, style: {
45
+ width: "100%",
46
+ height: listHeight,
47
+ overflow: "auto",
48
+ }, rowComponent: rowComponent }) }));
49
+ }
50
+
51
+ exports.default = VirtualTree;
52
+ //# sourceMappingURL=virtual.js.map