@bioturing/components 0.37.1 → 0.39.0

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 (56) hide show
  1. package/dist/components/cmdk/index.d.ts +2 -2
  2. package/dist/components/combobox/component.js.map +1 -1
  3. package/dist/components/data-table/component.js +7 -7
  4. package/dist/components/data-table/component.js.map +1 -1
  5. package/dist/components/data-table/hooks.d.ts.map +1 -1
  6. package/dist/components/data-table/hooks.js +73 -61
  7. package/dist/components/data-table/hooks.js.map +1 -1
  8. package/dist/components/dropdown-menu/component.js +1 -1
  9. package/dist/components/dropdown-menu/component.js.map +1 -1
  10. package/dist/components/hooks/useResizable.d.ts +50 -0
  11. package/dist/components/hooks/useResizable.d.ts.map +1 -0
  12. package/dist/components/hooks/useResizable.js +148 -0
  13. package/dist/components/hooks/useResizable.js.map +1 -0
  14. package/dist/components/index.d.ts +1 -0
  15. package/dist/components/index.d.ts.map +1 -1
  16. package/dist/components/popup-panel/component.d.ts +13 -1
  17. package/dist/components/popup-panel/component.d.ts.map +1 -1
  18. package/dist/components/popup-panel/component.js +134 -120
  19. package/dist/components/popup-panel/component.js.map +1 -1
  20. package/dist/components/popup-panel/utils.d.ts +10 -0
  21. package/dist/components/popup-panel/utils.d.ts.map +1 -0
  22. package/dist/components/popup-panel/utils.js +13 -0
  23. package/dist/components/popup-panel/utils.js.map +1 -0
  24. package/dist/components/resizable/component.d.ts +2 -8
  25. package/dist/components/resizable/component.d.ts.map +1 -1
  26. package/dist/components/resizable/component.js +250 -248
  27. package/dist/components/resizable/component.js.map +1 -1
  28. package/dist/components/toast/function.d.ts +8 -8
  29. package/dist/components/toast/function.d.ts.map +1 -1
  30. package/dist/components/toast/function.js.map +1 -1
  31. package/dist/components/tree/components.d.ts.map +1 -1
  32. package/dist/components/tree/components.js +50 -40
  33. package/dist/components/tree/components.js.map +1 -1
  34. package/dist/components/tree/style.css +1 -1
  35. package/dist/components/tree/types.d.ts +4 -0
  36. package/dist/components/tree/types.d.ts.map +1 -1
  37. package/dist/components/tree/useTreeCommon.d.ts +1 -0
  38. package/dist/components/tree/useTreeCommon.d.ts.map +1 -1
  39. package/dist/components/tree/useTreeCommon.js +21 -19
  40. package/dist/components/tree/useTreeCommon.js.map +1 -1
  41. package/dist/components/window-portal/component.d.ts +24 -0
  42. package/dist/components/window-portal/component.d.ts.map +1 -0
  43. package/dist/components/window-portal/component.js +120 -0
  44. package/dist/components/window-portal/component.js.map +1 -0
  45. package/dist/components/window-portal/index.d.ts +3 -0
  46. package/dist/components/window-portal/index.d.ts.map +1 -0
  47. package/dist/components/window-portal/types.d.ts +77 -0
  48. package/dist/components/window-portal/types.d.ts.map +1 -0
  49. package/dist/index.js +81 -79
  50. package/dist/index.js.map +1 -1
  51. package/dist/metadata.d.ts +8 -0
  52. package/dist/metadata.d.ts.map +1 -1
  53. package/dist/metadata.js +18 -0
  54. package/dist/metadata.js.map +1 -1
  55. package/dist/stats.html +1 -1
  56. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sources":["../../../src/components/resizable/component.tsx"],"sourcesContent":["\"use client\";\nimport React, { useCallback, useEffect, useState, isValidElement } from \"react\";\nimport {\n useResizable,\n type MoveValues,\n ResizableProps as UseResizableProps,\n} from \"react-use-resizable\";\nimport mergeRefs from \"merge-refs\";\nimport {\n useCls,\n clsx,\n WithRenderProp,\n WithRenderPropProps,\n cn,\n getReactElementProp,\n} from \"../utils\";\nimport { mergeProps } from \"@base-ui-components/react\";\n\nimport \"./style.css\";\nimport { on } from \"node:stream\";\n\nexport interface ResizableProps\n extends Omit<WithRenderPropProps, keyof UseResizableProps>,\n UseResizableProps {\n /**\n * Single React element child that will be enhanced with resize handles\n */\n children: React.ReactNode;\n /**\n * Whether the component should be resizable\n * @default false\n */\n resizable?: boolean;\n /**\n * Configure which resize handles to show\n * @default { bottom: true, right: true, left: true, top: true }\n */\n handles?: {\n bottom?: boolean;\n right?: boolean;\n left?: boolean;\n top?: boolean;\n };\n /**\n * Whether to use absolute positioning for left handle resizing\n * Set to true when used in absolutely positioned containers like PopupPanel\n * @default false\n */\n absolutePositioning?: boolean;\n /**\n * Custom class names for different parts of the resizable component\n */\n classNames?: {\n root?: string;\n resizeHandle?: string;\n };\n /**\n * Key to reset dimensions to current element size\n * When this value changes, the component will recalculate its dimensions\n * Similar to React's key prop pattern for forcing component resets\n */\n resetKey?: React.Key;\n /**\n * Maximum width the component can be resized to\n */\n maxWidth?: number;\n /**\n * Maximum height the component can be resized to\n */\n maxHeight?: number;\n /**\n * Minimum width the component can be resized to\n */\n minWidth?: number;\n /**\n * Minimum height the component can be resized to\n */\n minHeight?: number;\n /**\n * Callback fired during resize operations\n */\n onResize?: (values: MoveValues) => void;\n /**\n * Whether to maintain aspect ratio during resize\n * @default false\n */\n maintainAspectRatio?: boolean;\n}\n\nexport const Resizable = ({\n children,\n resizable = false,\n handles = { bottom: true, right: true, left: true, top: true },\n absolutePositioning = false,\n classNames,\n className: containerClassName,\n style: containerStyle,\n resetKey,\n\n // Use Resizable Props\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n lockHorizontal,\n lockVertical,\n onResize,\n onDragEnd: onDragEndProp,\n onDragStart: onDragStartProp,\n disabled,\n maintainAspectRatio = false,\n interval,\n initialHeight: initialHeightProp,\n initialWidth: initialWidthProp,\n // other With Render Props\n ...rest\n}: ResizableProps) => {\n // Validate that children is a single React element\n // if (!isValidElement(children)) {\n // throw new Error(\n // \"Resizable component expects a single React element as children\"\n // );\n // }\n\n const cls = useCls();\n const [panelRef, setPanelRef] = useState<HTMLDivElement | null>(null);\n const [width, setWidth] = useState<number>();\n const [height, setHeight] = useState<number>();\n const [resizing, setResizing] = useState(false);\n\n const callbackRef = useCallback(\n (node: HTMLDivElement) => {\n setPanelRef(node);\n\n // Get initial dimensions only once when ref is set\n // For aspect ratio maintenance, we need initial dimensions immediately\n // Otherwise, preserve natural width/height behavior\n if (node && !width && !height) {\n const rect = node.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0) {\n if (maintainAspectRatio) {\n // Need dimensions for aspect ratio calculation\n setWidth(rect.width);\n setHeight(rect.height);\n }\n // For non-aspect-ratio cases, don't set dimensions to preserve natural behavior\n }\n }\n },\n [width, height, maintainAspectRatio],\n );\n\n // Reset dimensions when resetKey changes\n useEffect(() => {\n if (resetKey !== undefined && panelRef) {\n // Clear the hook's inline styles to reset to natural size\n panelRef.style.width = \"\";\n panelRef.style.height = \"\";\n\n // Force a reflow to get natural dimensions\n const rect = panelRef.getBoundingClientRect();\n\n if (rect.width > 0 && rect.height > 0) {\n if (maintainAspectRatio) {\n // For aspect ratio maintenance, re-measure and set dimensions\n setWidth(rect.width);\n setHeight(rect.height);\n } else {\n // Reset state to allow natural dimensions again\n setWidth(undefined);\n setHeight(undefined);\n }\n\n // Don't apply any explicit dimensions - let them remain natural\n // panelRef.style.width = `${rect.width}px`;\n // panelRef.style.height = `${rect.height}px`;\n }\n }\n }, [resetKey, panelRef, maintainAspectRatio]);\n\n // Initialize useResizable with current dimensions (or undefined if not ready)\n // For aspect ratio maintenance, we need initial dimensions\n // Otherwise, preserve natural width/height behavior until user starts resizing\n const resizableHook = useResizable({\n initialWidth: maintainAspectRatio ? width : initialWidthProp,\n initialHeight: maintainAspectRatio ? height : initialHeightProp,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n lockHorizontal,\n lockVertical,\n onResize,\n disabled,\n maintainAspectRatio,\n interval,\n onDragStart: (values) => {\n setResizing(true);\n // Capture natural dimensions when user starts resizing\n if (panelRef) {\n const rect = panelRef.getBoundingClientRect();\n if (rect.width > 0 && !width) {\n setWidth(rect.width);\n }\n if (rect.height > 0 && !height) {\n setHeight(rect.height);\n }\n }\n if (onDragStartProp) onDragStartProp(values);\n },\n onDragEnd: (values) => {\n setResizing(false);\n if (onDragEndProp) onDragEndProp(values);\n },\n });\n\n const isChildrenValidElement = isValidElement(children);\n\n useEffect(() => {\n if (resizing) {\n document.body.style.userSelect = \"none\";\n } else {\n document.body.style.userSelect = \"\";\n }\n }, [resizing]);\n\n // Get resizable props - useResizable hook handles cases where dimensions aren't ready\n const { ref: rootRefProp, ...rootPropsWithoutRef } =\n resizableHook.getRootProps();\n const getHandleProps = resizableHook.getHandleProps;\n const rootRef = resizableHook.rootRef;\n\n // Handle reverse handle change for horizontal resizing (only for absolute positioning)\n const onReverseHandleChangeHorizontal = (\n parent: React.RefObject<HTMLDivElement>,\n values: MoveValues,\n ) => {\n if (!parent.current || !absolutePositioning) return;\n const { widthDiff } = values;\n parent.current.style.left = `${\n parseInt(parent.current.style.left || \"0\") - widthDiff\n }px`;\n };\n\n // Handle reverse handle change for vertical resizing (only for absolute positioning)\n const onReverseHandleChangeVertical = (\n parent: React.RefObject<HTMLDivElement>,\n values: MoveValues,\n ) => {\n if (!parent.current || !absolutePositioning) return;\n const { heightDiff } = values;\n parent.current.style.top = `${\n parseInt(parent.current.style.top || \"0\") - heightDiff\n }px`;\n };\n\n const resizeHandles = resizable\n ? [\n handles.top && !maintainAspectRatio && (\n <div\n key=\"top\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle,\n )}\n data-placement=\"top-center\"\n {...getHandleProps({\n reverse: true,\n lockHorizontal: true,\n onResize: (values) =>\n onReverseHandleChangeVertical(rootRef, values),\n })}\n />\n ),\n handles.bottom && !maintainAspectRatio && (\n <div\n key=\"bottom\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle,\n )}\n data-placement=\"bottom-left\"\n {...getHandleProps({\n lockHorizontal: true,\n })}\n />\n ),\n handles.left && !maintainAspectRatio && (\n <div\n key=\"left\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle,\n )}\n data-placement=\"top-left\"\n {...getHandleProps({\n reverse: true,\n lockVertical: true,\n onResize: (values) =>\n onReverseHandleChangeHorizontal(rootRef, values),\n })}\n />\n ),\n handles.right && !maintainAspectRatio && (\n <div\n key=\"right\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle,\n )}\n data-placement=\"top-right\"\n {...getHandleProps({\n lockVertical: true,\n })}\n />\n ),\n // For aspect ratio maintenance, add corner handles that can resize both dimensions\n handles.right && handles.bottom && (\n <div\n key=\"bottom-right-corner\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle,\n )}\n data-placement=\"bottom-right-corner\"\n {...getHandleProps({\n // No locks - allow both horizontal and vertical resizing\n })}\n />\n ),\n maintainAspectRatio && handles.left && handles.bottom && (\n <div\n key=\"bottom-left-corner\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle,\n )}\n data-placement=\"bottom-left-corner\"\n {...getHandleProps({\n reverse: true,\n onResize: (values) =>\n onReverseHandleChangeHorizontal(rootRef, values),\n })}\n />\n ),\n maintainAspectRatio && handles.right && handles.top && (\n <div\n key=\"top-right-corner\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle,\n )}\n data-placement=\"top-right-corner\"\n {...getHandleProps({\n reverse: true,\n onResize: (values) =>\n onReverseHandleChangeVertical(rootRef, values),\n })}\n />\n ),\n handles.left && handles.top && (\n <div\n key=\"top-left-corner\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle,\n )}\n data-placement=\"top-left-corner\"\n {...getHandleProps({\n reverse: true,\n onResize: (values) => {\n onReverseHandleChangeHorizontal(rootRef, values);\n onReverseHandleChangeVertical(rootRef, values);\n },\n })}\n />\n ),\n ]\n : [];\n\n const childElement = children as React.ReactElement & {\n ref?: React.Ref<HTMLDivElement>;\n };\n\n const childElementProps = {\n className: getReactElementProp<string>(childElement, \"className\"),\n style: getReactElementProp<React.CSSProperties>(childElement, \"style\"),\n children: getReactElementProp<React.ReactNode>(childElement, \"children\"),\n ref: childElement.ref,\n };\n\n const childProps = {\n className: cn(\n resizable && cls(\"resizable\"),\n classNames?.root,\n childElementProps.className,\n containerClassName,\n ),\n ref: mergeRefs(\n resizable ? rootRefProp : undefined,\n callbackRef, // Always need this for dimension measurement\n childElement?.ref,\n ),\n style: { ...childElementProps.style, ...containerStyle },\n ...(resizing ? { \"data-resizing\": true } : {}),\n ...(resizable ? { \"data-resizable\": true } : {}),\n children: isChildrenValidElement\n ? [\n ...(Array.isArray(childElementProps.children)\n ? childElementProps.children\n : [childElementProps.children]),\n ...resizeHandles.filter(Boolean),\n ]\n : children,\n };\n\n return (\n <WithRenderProp\n render={(props) => {\n // Merge the props from WithRenderProp with our childProps\n const mergedProps = mergeProps(\n props,\n childProps,\n resizable ? rootPropsWithoutRef : {},\n );\n if (isChildrenValidElement) {\n return React.cloneElement(childElement, mergedProps);\n } else {\n return <div {...mergedProps}>{children}</div>;\n }\n }}\n {...rest}\n />\n );\n};\n"],"names":["Resizable","children","resizable","handles","absolutePositioning","classNames","containerClassName","containerStyle","resetKey","maxHeight","maxWidth","minHeight","minWidth","lockHorizontal","lockVertical","onResize","onDragEndProp","onDragStartProp","disabled","maintainAspectRatio","interval","initialHeightProp","initialWidthProp","rest","cls","useCls","panelRef","setPanelRef","useState","width","setWidth","height","setHeight","resizing","setResizing","callbackRef","useCallback","node","rect","useEffect","resizableHook","useResizable","values","isChildrenValidElement","isValidElement","rootRefProp","rootPropsWithoutRef","getHandleProps","rootRef","onReverseHandleChangeHorizontal","parent","widthDiff","onReverseHandleChangeVertical","heightDiff","resizeHandles","jsx","clsx","childElement","childElementProps","getReactElementProp","childProps","cn","mergeRefs","WithRenderProp","props","mergedProps","mergeProps","React"],"mappings":"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"}
1
+ {"version":3,"file":"component.js","sources":["../../../src/components/resizable/component.tsx"],"sourcesContent":["\"use client\";\nimport React, {\n useCallback,\n useEffect,\n useState,\n isValidElement,\n forwardRef,\n} from \"react\";\nimport {\n useResizable,\n type MoveValues,\n ResizableProps as UseResizableProps,\n} from \"../hooks/useResizable\";\nimport mergeRefs from \"merge-refs\";\nimport {\n useCls,\n clsx,\n WithRenderProp,\n WithRenderPropProps,\n cn,\n getReactElementProp,\n} from \"../utils\";\nimport { mergeProps } from \"@base-ui-components/react\";\n\nimport \"./style.css\";\n// import { on } from \"node:stream\";\n\nexport interface ResizableProps\n extends Omit<WithRenderPropProps, keyof UseResizableProps>,\n UseResizableProps {\n /**\n * Single React element child that will be enhanced with resize handles\n */\n children: React.ReactNode;\n /**\n * Whether the component should be resizable\n * @default false\n */\n resizable?: boolean;\n /**\n * Configure which resize handles to show\n * @default { bottom: true, right: true, left: true, top: true }\n */\n handles?: {\n bottom?: boolean;\n right?: boolean;\n left?: boolean;\n top?: boolean;\n };\n // /**\n // * Whether to use absolute positioning for left handle resizing\n // * Set to true when used in absolutely positioned containers like PopupPanel\n // * @default false\n // */\n // absolutePositioning?: boolean;\n /**\n * Custom class names for different parts of the resizable component\n */\n classNames?: {\n root?: string;\n resizeHandle?: string;\n };\n /**\n * Key to reset dimensions to current element size\n * When this value changes, the component will recalculate its dimensions\n * Similar to React's key prop pattern for forcing component resets\n */\n resetKey?: React.Key;\n /**\n * Maximum width the component can be resized to\n */\n maxWidth?: number;\n /**\n * Maximum height the component can be resized to\n */\n maxHeight?: number;\n /**\n * Minimum width the component can be resized to\n */\n minWidth?: number;\n /**\n * Minimum height the component can be resized to\n */\n minHeight?: number;\n /**\n * Callback fired during resize operations\n */\n onResize?: (values: MoveValues) => void;\n /**\n * Whether to maintain aspect ratio during resize\n * @default false\n */\n maintainAspectRatio?: boolean;\n}\n\nexport const Resizable = forwardRef<HTMLDivElement, ResizableProps>(\n (\n {\n children,\n resizable = false,\n handles = { bottom: true, right: true, left: true, top: true },\n classNames,\n className: containerClassName,\n style: containerStyle,\n resetKey,\n\n // Use Resizable Props\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n lockHorizontal,\n lockVertical,\n onResize,\n onDragEnd: onDragEndProp,\n onDragStart: onDragStartProp,\n disabled,\n maintainAspectRatio = false,\n interval,\n initialHeight: initialHeightProp,\n initialWidth: initialWidthProp,\n // other With Render Props\n ...rest\n },\n ref\n ) => {\n // Validate that children is a single React element\n // if (!isValidElement(children)) {\n // throw new Error(\n // \"Resizable component expects a single React element as children\"\n // );\n // }\n\n const cls = useCls();\n const [panelRef, setPanelRef] = useState<HTMLDivElement | null>(null);\n const [width, setWidth] = useState<number>();\n const [height, setHeight] = useState<number>();\n const [resizing, setResizing] = useState(false);\n\n const callbackRef = useCallback(\n (node: HTMLDivElement) => {\n setPanelRef(node);\n\n // Get initial dimensions only once when ref is set\n // For aspect ratio maintenance, we need initial dimensions immediately\n // Otherwise, preserve natural width/height behavior\n if (node && !width && !height) {\n const rect = node.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0) {\n if (maintainAspectRatio) {\n // Need dimensions for aspect ratio calculation\n setWidth(rect.width);\n setHeight(rect.height);\n }\n // For non-aspect-ratio cases, don't set dimensions to preserve natural behavior\n }\n }\n },\n [width, height, maintainAspectRatio]\n );\n\n // Reset dimensions when resetKey changes\n useEffect(() => {\n if (resetKey !== undefined && panelRef) {\n // Clear the hook's inline styles to reset to natural size\n panelRef.style.width = \"\";\n panelRef.style.height = \"\";\n\n // Force a reflow to get natural dimensions\n const rect = panelRef.getBoundingClientRect();\n\n if (rect.width > 0 && rect.height > 0) {\n if (maintainAspectRatio) {\n // For aspect ratio maintenance, re-measure and set dimensions\n setWidth(rect.width);\n setHeight(rect.height);\n } else {\n // Reset state to allow natural dimensions again\n setWidth(undefined);\n setHeight(undefined);\n }\n\n // Don't apply any explicit dimensions - let them remain natural\n // panelRef.style.width = `${rect.width}px`;\n // panelRef.style.height = `${rect.height}px`;\n }\n }\n }, [resetKey, panelRef, maintainAspectRatio]);\n\n // Initialize useResizable with current dimensions (or undefined if not ready)\n // For aspect ratio maintenance, we need initial dimensions\n // Otherwise, preserve natural width/height behavior until user starts resizing\n const resizableHook = useResizable({\n initialWidth: maintainAspectRatio ? width : initialWidthProp,\n initialHeight: maintainAspectRatio ? height : initialHeightProp,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n lockHorizontal,\n lockVertical,\n onResize,\n disabled,\n maintainAspectRatio,\n interval,\n onDragStart: (values) => {\n setResizing(true);\n // Capture natural dimensions when user starts resizing\n if (panelRef) {\n const rect = panelRef.getBoundingClientRect();\n if (rect.width > 0 && !width) {\n setWidth(rect.width);\n }\n if (rect.height > 0 && !height) {\n setHeight(rect.height);\n }\n }\n if (onDragStartProp) onDragStartProp(values);\n },\n onDragEnd: (values) => {\n setResizing(false);\n if (onDragEndProp) onDragEndProp(values);\n },\n });\n\n const isChildrenValidElement = isValidElement(children);\n\n useEffect(() => {\n if (resizing) {\n document.body.style.userSelect = \"none\";\n } else {\n document.body.style.userSelect = \"\";\n }\n }, [resizing]);\n\n // Get resizable props - useResizable hook handles cases where dimensions aren't ready\n const { ref: rootRefProp, ...rootPropsWithoutRef } =\n resizableHook.getRootProps();\n const getHandleProps = resizableHook.getHandleProps;\n\n // // Handle reverse handle change for horizontal resizing (only for absolute positioning)\n // const onReverseHandleChangeHorizontal = (\n // parent: React.RefObject<HTMLDivElement>,\n // values: MoveValues\n // ) => {\n // if (!parent.current || !absolutePositioning) return;\n // const { widthDiff } = values;\n // parent.current.style.left = `${\n // parseInt(parent.current.style.left || \"0\") - widthDiff\n // }px`;\n // };\n\n // // Handle reverse handle change for vertical resizing (only for absolute positioning)\n // const onReverseHandleChangeVertical = (\n // parent: React.RefObject<HTMLDivElement>,\n // values: MoveValues\n // ) => {\n // if (!parent.current || !absolutePositioning) return;\n // const { heightDiff } = values;\n // console.log({\n // parentStyleTop: parent.current.style.top,\n // computedStyleTop: window.getComputedStyle(parent.current).top,\n // });\n // parent.current.style.top = `${\n // parseInt(parent.current.style.top || \"0\") - heightDiff\n // }px`;\n // };\n\n const resizeHandles = resizable\n ? [\n handles.top && !maintainAspectRatio && (\n <div\n key=\"top\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle\n )}\n data-placement=\"top-center\"\n {...getHandleProps({\n reverse: true,\n lockHorizontal: true,\n // onResize: (values) =>\n // onReverseHandleChangeVertical(rootRef, values),\n })}\n />\n ),\n handles.bottom && !maintainAspectRatio && (\n <div\n key=\"bottom\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle\n )}\n data-placement=\"bottom-left\"\n {...getHandleProps({\n lockHorizontal: true,\n })}\n />\n ),\n handles.left && !maintainAspectRatio && (\n <div\n key=\"left\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle\n )}\n data-placement=\"top-left\"\n {...getHandleProps({\n reverse: true,\n lockVertical: true,\n // onResize: (values) =>\n // onReverseHandleChangeHorizontal(rootRef, values),\n })}\n />\n ),\n handles.right && !maintainAspectRatio && (\n <div\n key=\"right\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle\n )}\n data-placement=\"top-right\"\n {...getHandleProps({\n lockVertical: true,\n })}\n />\n ),\n handles.right && handles.bottom && (\n <div\n key=\"bottom-right-corner\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle\n )}\n data-placement=\"bottom-right-corner\"\n {...getHandleProps({\n // No locks - allow both horizontal and vertical resizing\n corner: \"bottom-right\",\n })}\n />\n ),\n handles.left && handles.top && (\n <div\n key=\"top-left-corner\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle\n )}\n data-placement=\"top-left-corner\"\n {...getHandleProps({\n corner: \"top-left\",\n // onResize: (values) => {\n // onReverseHandleChangeHorizontal(rootRef, values);\n // onReverseHandleChangeVertical(rootRef, values);\n // },\n })}\n />\n ),\n handles.right && handles.top && (\n <div\n key=\"top-right-corner\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle\n )}\n data-placement=\"top-right-corner\"\n {...getHandleProps({\n corner: \"top-right\",\n // onResize: (values) => {\n // onReverseHandleChangeVertical(rootRef, values);\n // },\n })}\n />\n ),\n handles.left && handles.bottom && (\n <div\n key=\"bottom-left-corner\"\n className={clsx(\n cls(\"resizable-resize-handle\"),\n classNames?.resizeHandle\n )}\n data-placement=\"bottom-left-corner\"\n {...getHandleProps({\n corner: \"bottom-left\",\n // onResize: (values) => {\n // onReverseHandleChangeHorizontal(rootRef, values);\n // onReverseHandleChangeVertical(rootRef, values);\n // },\n })}\n />\n ),\n ]\n : [];\n\n const childElement = children as React.ReactElement & {\n ref?: React.Ref<HTMLDivElement>;\n };\n\n const childElementProps = {\n className: getReactElementProp<string>(childElement, \"className\"),\n style: getReactElementProp<React.CSSProperties>(childElement, \"style\"),\n children: getReactElementProp<React.ReactNode>(childElement, \"children\"),\n ref: childElement.ref,\n };\n\n const childProps = {\n className: cn(\n resizable && cls(\"resizable\"),\n classNames?.root,\n childElementProps.className,\n containerClassName\n ),\n ref: mergeRefs(\n resizable ? rootRefProp : undefined,\n callbackRef, // Always need this for dimension measurement\n childElement?.ref,\n ref\n ),\n style: { ...childElementProps.style, ...containerStyle },\n ...(resizing ? { \"data-resizing\": true } : {}),\n ...(resizable ? { \"data-resizable\": true } : {}),\n children: isChildrenValidElement\n ? [\n ...(Array.isArray(childElementProps.children)\n ? childElementProps.children\n : [childElementProps.children]),\n ...resizeHandles.filter(Boolean),\n ]\n : children,\n };\n\n return (\n <WithRenderProp\n render={(props) => {\n // Merge the props from WithRenderProp with our childProps\n const mergedProps = mergeProps(\n props,\n childProps,\n resizable ? rootPropsWithoutRef : {}\n );\n if (isChildrenValidElement) {\n return React.cloneElement(childElement, mergedProps);\n } else {\n return <div {...mergedProps}>{children}</div>;\n }\n }}\n {...rest}\n />\n );\n }\n);\n"],"names":["Resizable","forwardRef","children","resizable","handles","classNames","containerClassName","containerStyle","resetKey","maxHeight","maxWidth","minHeight","minWidth","lockHorizontal","lockVertical","onResize","onDragEndProp","onDragStartProp","disabled","maintainAspectRatio","interval","initialHeightProp","initialWidthProp","rest","ref","cls","useCls","panelRef","setPanelRef","useState","width","setWidth","height","setHeight","resizing","setResizing","callbackRef","useCallback","node","rect","useEffect","resizableHook","useResizable","values","isChildrenValidElement","isValidElement","rootRefProp","rootPropsWithoutRef","getHandleProps","resizeHandles","jsx","clsx","childElement","childElementProps","getReactElementProp","childProps","cn","mergeRefs","WithRenderProp","props","mergedProps","mergeProps","React"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
- import { Toast as BaseToast } from '@base-ui-components/react';
1
+ import { ToastManagerAddOptions } from '@base-ui-components/react';
2
2
  import { ToastData } from './types';
3
- export declare const toastManager: BaseToast.createToastManager.ToastManager;
4
- export declare const toast: ((message: string, options?: Omit<BaseToast.useToastManager.AddOptions<ToastData>, "data" | "description">) => string) & {
5
- info: (message: string, options?: Omit<BaseToast.useToastManager.AddOptions<ToastData>, "data" | "description">) => string;
6
- success: (message: string, options?: Omit<BaseToast.useToastManager.AddOptions<ToastData>, "data" | "description">) => string;
7
- error: (message: string, options?: Omit<BaseToast.useToastManager.AddOptions<ToastData>, "data" | "description">) => string;
8
- warning: (message: string, options?: Omit<BaseToast.useToastManager.AddOptions<ToastData>, "data" | "description">) => string;
9
- progress: (message: string, options?: Omit<BaseToast.useToastManager.AddOptions<ToastData>, "data" | "description">) => string;
3
+ export declare const toastManager: import('@base-ui-components/react').ToastManager;
4
+ export declare const toast: ((message: string, options?: Omit<ToastManagerAddOptions<ToastData>, "data" | "description">) => string) & {
5
+ info: (message: string, options?: Omit<ToastManagerAddOptions<ToastData>, "data" | "description">) => string;
6
+ success: (message: string, options?: Omit<ToastManagerAddOptions<ToastData>, "data" | "description">) => string;
7
+ error: (message: string, options?: Omit<ToastManagerAddOptions<ToastData>, "data" | "description">) => string;
8
+ warning: (message: string, options?: Omit<ToastManagerAddOptions<ToastData>, "data" | "description">) => string;
9
+ progress: (message: string, options?: Omit<ToastManagerAddOptions<ToastData>, "data" | "description">) => string;
10
10
  };
11
11
  //# sourceMappingURL=function.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../../src/components/toast/function.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,eAAO,MAAM,YAAY,2CAAiC,CAAC;AAuB3D,eAAO,MAAM,KAAK,aAnBL,MAAM,YACL,IAAI,CACZ,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,EAC/C,MAAM,GAAG,aAAa,CACvB;oBAJQ,MAAM,YACL,IAAI,CACZ,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,EAC/C,MAAM,GAAG,aAAa,CACvB;uBAJQ,MAAM,YACL,IAAI,CACZ,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,EAC/C,MAAM,GAAG,aAAa,CACvB;qBAJQ,MAAM,YACL,IAAI,CACZ,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,EAC/C,MAAM,GAAG,aAAa,CACvB;uBAJQ,MAAM,YACL,IAAI,CACZ,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,EAC/C,MAAM,GAAG,aAAa,CACvB;wBAJQ,MAAM,YACL,IAAI,CACZ,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,EAC/C,MAAM,GAAG,aAAa,CACvB;CAqBH,CAAC"}
1
+ {"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../../src/components/toast/function.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,sBAAsB,EACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,eAAO,MAAM,YAAY,kDAAiC,CAAC;AAoB3D,eAAO,MAAM,KAAK,aAhBL,MAAM,YACL,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;oBADhE,MAAM,YACL,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;uBADhE,MAAM,YACL,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;qBADhE,MAAM,YACL,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;uBADhE,MAAM,YACL,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;wBADhE,MAAM,YACL,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;CAqB3E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"function.js","sources":["../../../src/components/toast/function.ts"],"sourcesContent":["\"use client\";\nimport { Toast as BaseToast } from \"@base-ui-components/react\";\nimport type { ToastData } from \"./types\";\n\nexport const toastManager = BaseToast.createToastManager();\n\nfunction createToastTypeFunction(type: ToastData[\"type\"]) {\n return (\n message: string,\n options?: Omit<\n BaseToast.useToastManager.AddOptions<ToastData>,\n \"data\" | \"description\"\n >\n ) => {\n const toastId = toastManager.add<ToastData>({\n description: message,\n data: {\n type: type,\n },\n // progress and error toasts should not auto close\n ...(type === \"progress\" ? { timeout: 0 } : {}),\n ...options,\n });\n return toastId;\n };\n}\n\nexport const toast = Object.assign(createToastTypeFunction(\"info\"), {\n info: createToastTypeFunction(\"info\"),\n success: createToastTypeFunction(\"success\"),\n error: createToastTypeFunction(\"error\"),\n warning: createToastTypeFunction(\"warning\"),\n progress: createToastTypeFunction(\"progress\"),\n});\n"],"names":["toastManager","BaseToast","createToastTypeFunction","type","message","options","toast"],"mappings":";;AAIO,MAAMA,IAAeC,EAAU,mBAAA;AAEtC,SAASC,EAAwBC,GAAyB;AACxD,SAAO,CACLC,GACAC,MAKgBL,EAAa,IAAe;AAAA,IAC1C,aAAaI;AAAA,IACb,MAAM;AAAA,MACJ,MAAAD;AAAA,IAAA;AAAA;AAAA,IAGF,GAAIA,MAAS,aAAa,EAAE,SAAS,EAAA,IAAM,CAAA;AAAA,IAC3C,GAAGE;AAAA,EAAA,CACJ;AAGL;AAEO,MAAMC,IAAQ,OAAO,OAAOJ,EAAwB,MAAM,GAAG;AAAA,EAClE,MAAMA,EAAwB,MAAM;AAAA,EACpC,SAASA,EAAwB,SAAS;AAAA,EAC1C,OAAOA,EAAwB,OAAO;AAAA,EACtC,SAASA,EAAwB,SAAS;AAAA,EAC1C,UAAUA,EAAwB,UAAU;AAC9C,CAAC;"}
1
+ {"version":3,"file":"function.js","sources":["../../../src/components/toast/function.ts"],"sourcesContent":["\"use client\";\nimport {\n Toast as BaseToast,\n ToastManagerAddOptions,\n} from \"@base-ui-components/react\";\nimport type { ToastData } from \"./types\";\n\nexport const toastManager = BaseToast.createToastManager();\n\nfunction createToastTypeFunction(type: ToastData[\"type\"]) {\n return (\n message: string,\n options?: Omit<ToastManagerAddOptions<ToastData>, \"data\" | \"description\">\n ) => {\n const toastId = toastManager.add<ToastData>({\n description: message,\n data: {\n type: type,\n },\n // progress and error toasts should not auto close\n ...(type === \"progress\" ? { timeout: 0 } : {}),\n ...options,\n });\n return toastId;\n };\n}\n\nexport const toast = Object.assign(createToastTypeFunction(\"info\"), {\n info: createToastTypeFunction(\"info\"),\n success: createToastTypeFunction(\"success\"),\n error: createToastTypeFunction(\"error\"),\n warning: createToastTypeFunction(\"warning\"),\n progress: createToastTypeFunction(\"progress\"),\n});\n"],"names":["toastManager","BaseToast","createToastTypeFunction","type","message","options","toast"],"mappings":";;AAOO,MAAMA,IAAeC,EAAU,mBAAA;AAEtC,SAASC,EAAwBC,GAAyB;AACxD,SAAO,CACLC,GACAC,MAEgBL,EAAa,IAAe;AAAA,IAC1C,aAAaI;AAAA,IACb,MAAM;AAAA,MACJ,MAAAD;AAAA,IAAA;AAAA;AAAA,IAGF,GAAIA,MAAS,aAAa,EAAE,SAAS,EAAA,IAAM,CAAA;AAAA,IAC3C,GAAGE;AAAA,EAAA,CACJ;AAGL;AAEO,MAAMC,IAAQ,OAAO,OAAOJ,EAAwB,MAAM,GAAG;AAAA,EAClE,MAAMA,EAAwB,MAAM;AAAA,EACpC,SAASA,EAAwB,SAAS;AAAA,EAC1C,OAAOA,EAAwB,OAAO;AAAA,EACtC,SAASA,EAAwB,SAAS;AAAA,EAC1C,UAAUA,EAAwB,UAAU;AAC9C,CAAC;"}
@@ -1 +1 @@
1
- {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/components/tree/components.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,IAAI,OAAO,EAClB,KAAK,QAAQ,IAAI,eAAe,EACjC,MAAM,cAAc,CAAC;AAItB,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG3E,OAAO,aAAa,CAAC;AAIrB,QAAA,MAAM,aAAa,GAAI,CAAC,SAAS,eAAe,GAAG,YAAY,EAC7D,OAAO,SAAS,CAAC,CAAC,CAAC,EACnB,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,4CA8BtD,CAAC;AAGF,QAAA,MAAM,kBAAkB,GAAI,CAAC,SAAS,eAAe,GAAG,YAAY,EAClE,OAAO,kBAAkB,CAAC,CAAC,CAAC,EAC5B,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,4CA8BtD,CAAC;AAsBF,eAAO,MAAM,IAAI,IAjBf,CAAC,SAAS,eAAe,2BAElB,SAAS,CAAC,CAAC,CAAC,GAAG;IACpB,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACjE,KACE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;oBAItC,CAAC,SAAS,eAAe,2BAElB,kBAAkB,CAAC,CAAC,CAAC,GAAG;QAC7B,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACjE,KACE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;;CAM3C,CAAC"}
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/components/tree/components.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,IAAI,OAAO,EAClB,KAAK,QAAQ,IAAI,eAAe,EACjC,MAAM,cAAc,CAAC;AAItB,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG3E,OAAO,aAAa,CAAC;AAIrB,QAAA,MAAM,aAAa,GAAI,CAAC,SAAS,eAAe,GAAG,YAAY,EAC7D,OAAO,SAAS,CAAC,CAAC,CAAC,EACnB,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,4CAmCtD,CAAC;AAGF,QAAA,MAAM,kBAAkB,GAAI,CAAC,SAAS,eAAe,GAAG,YAAY,EAClE,OAAO,kBAAkB,CAAC,CAAC,CAAC,EAC5B,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,4CAmCtD,CAAC;AAsBF,eAAO,MAAM,IAAI,IAjBf,CAAC,SAAS,eAAe,2BAElB,SAAS,CAAC,CAAC,CAAC,GAAG;IACpB,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACjE,KACE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;oBAItC,CAAC,SAAS,eAAe,2BAElB,kBAAkB,CAAC,CAAC,CAAC,GAAG;QAC7B,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACjE,KACE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;;CAM3C,CAAC"}
@@ -1,69 +1,79 @@
1
1
  "use client";
2
2
  import { jsx as T } from "react/jsx-runtime";
3
- import p from "antd/es/tree";
4
- import { forwardRef as l } from "react";
5
- import { useTreeCommon as u } from "./useTreeCommon.js";
3
+ import m from "antd/es/tree";
4
+ import { forwardRef as u } from "react";
5
+ import { useTreeCommon as k } from "./useTreeCommon.js";
6
6
  import './style.css';/* empty css */
7
- import { clsx as k } from "../utils/cn.js";
8
- const y = (e, r) => {
7
+ import { clsx as y } from "../utils/cn.js";
8
+ const x = (r, n) => {
9
9
  const {
10
- cls: c,
11
- customSwitcherIcon: n,
10
+ cls: e,
11
+ customSwitcherIcon: c,
12
12
  processedTreeData: t,
13
- currentUniqueExpandedKeys: s,
14
- currentUniqueCheckedKeys: o,
13
+ currentUniqueExpandedKeys: o,
14
+ currentUniqueCheckedKeys: s,
15
15
  handleAntTreeExpand: a,
16
16
  handleAntTreeCheck: d,
17
- restProps: h,
18
- className: i,
19
- switcherIcon: m
20
- } = u(e);
17
+ restProps: i,
18
+ className: h,
19
+ switcherIcon: p,
20
+ nodeVerticalAlign: l
21
+ } = k(r);
21
22
  return /* @__PURE__ */ T(
22
- p,
23
+ m,
23
24
  {
24
- ref: r,
25
- className: k(c("tree"), i),
26
- switcherIcon: m || n,
25
+ ref: n,
26
+ className: y(
27
+ e("tree"),
28
+ l === "top" && e("tree-align-top"),
29
+ h
30
+ ),
31
+ switcherIcon: p || c,
27
32
  treeData: t,
28
- expandedKeys: s,
33
+ expandedKeys: o,
29
34
  onExpand: a,
30
- checkedKeys: { checked: o, halfChecked: [] },
35
+ checkedKeys: { checked: s, halfChecked: [] },
31
36
  onCheck: d,
32
- ...h
37
+ ...i
33
38
  }
34
39
  );
35
- }, x = (e, r) => {
40
+ }, f = (r, n) => {
36
41
  const {
37
- cls: c,
38
- customSwitcherIcon: n,
42
+ cls: e,
43
+ customSwitcherIcon: c,
39
44
  processedTreeData: t,
40
- currentUniqueExpandedKeys: s,
41
- currentUniqueCheckedKeys: o,
45
+ currentUniqueExpandedKeys: o,
46
+ currentUniqueCheckedKeys: s,
42
47
  handleAntTreeExpand: a,
43
48
  handleAntTreeCheck: d,
44
- restProps: h,
45
- className: i,
46
- switcherIcon: m
47
- } = u(e);
49
+ restProps: i,
50
+ className: h,
51
+ switcherIcon: p,
52
+ nodeVerticalAlign: l
53
+ } = k(r);
48
54
  return /* @__PURE__ */ T(
49
- p.DirectoryTree,
55
+ m.DirectoryTree,
50
56
  {
51
- ref: r,
52
- className: k(c("directory-tree"), i),
53
- switcherIcon: m || n,
57
+ ref: n,
58
+ className: y(
59
+ e("directory-tree"),
60
+ l === "top" && e("tree-align-top"),
61
+ h
62
+ ),
63
+ switcherIcon: p || c,
54
64
  treeData: t,
55
- expandedKeys: s,
65
+ expandedKeys: o,
56
66
  onExpand: a,
57
- checkedKeys: { checked: o, halfChecked: [] },
67
+ checkedKeys: { checked: s, halfChecked: [] },
58
68
  onCheck: d,
59
- ...h
69
+ ...i
60
70
  }
61
71
  );
62
- }, f = l(y), C = l(x), A = Object.assign(f, {
63
- DirectoryTree: C,
64
- TreeNode: p.TreeNode
72
+ }, C = u(x), I = u(f), g = Object.assign(C, {
73
+ DirectoryTree: I,
74
+ TreeNode: m.TreeNode
65
75
  });
66
76
  export {
67
- A as Tree
77
+ g as Tree
68
78
  };
69
79
  //# sourceMappingURL=components.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sources":["../../../src/components/tree/components.tsx"],"sourcesContent":["\"use client\";\nimport {\n default as AntTree,\n type DataNode as AntTreeDataNode,\n} from \"antd/es/tree\";\n\nimport { forwardRef } from \"react\";\nimport { clsx } from \"../utils\";\nimport type { TreeDataNode, TreeProps, DirectoryTreeProps } from \"./types\";\nimport { useTreeCommon } from \"./useTreeCommon\";\n\nimport \"./style.css\";\n\n// Create inner function for main Tree with forwarded ref\n// Ensure generic constraint matches TreeProps if it uses AntTreeDataNode\nconst MainTreeInner = <T extends AntTreeDataNode = TreeDataNode>(\n props: TreeProps<T>,\n ref: React.Ref<React.ComponentRef<typeof AntTree<T>>>\n) => {\n const {\n cls,\n customSwitcherIcon,\n processedTreeData,\n currentUniqueExpandedKeys,\n currentUniqueCheckedKeys,\n handleAntTreeExpand,\n handleAntTreeCheck,\n restProps,\n className,\n switcherIcon,\n } = useTreeCommon(props);\n\n return (\n <AntTree\n ref={ref}\n className={clsx(cls(\"tree\"), className)}\n switcherIcon={switcherIcon || customSwitcherIcon}\n // Pass processed props to AntTree\n treeData={processedTreeData}\n expandedKeys={currentUniqueExpandedKeys}\n onExpand={handleAntTreeExpand}\n // Pass checked keys in the object format\n checkedKeys={{ checked: currentUniqueCheckedKeys, halfChecked: [] }}\n onCheck={handleAntTreeCheck}\n {...restProps} // Pass other props like checkable, showLine, etc.\n />\n );\n};\n\n// Create inner function for DirectoryTree with forwarded ref\nconst DirectoryTreeInner = <T extends AntTreeDataNode = TreeDataNode>(\n props: DirectoryTreeProps<T>,\n ref: React.Ref<React.ComponentRef<typeof AntTree<T>>>\n) => {\n const {\n cls,\n customSwitcherIcon,\n processedTreeData,\n currentUniqueExpandedKeys,\n currentUniqueCheckedKeys,\n handleAntTreeExpand,\n handleAntTreeCheck,\n restProps,\n className,\n switcherIcon,\n } = useTreeCommon(props as any);\n\n return (\n <AntTree.DirectoryTree\n ref={ref}\n className={clsx(cls(\"directory-tree\"), className)}\n switcherIcon={switcherIcon || customSwitcherIcon}\n // Pass processed props to AntTree.DirectoryTree\n treeData={processedTreeData as T[]}\n expandedKeys={currentUniqueExpandedKeys}\n onExpand={handleAntTreeExpand}\n // Pass checked keys in the object format\n checkedKeys={{ checked: currentUniqueCheckedKeys, halfChecked: [] }}\n onCheck={handleAntTreeCheck}\n {...restProps} // Pass other props like checkable, showLine, etc.\n />\n );\n};\n\n// Use forwardRef with type assertion for main Tree\n// Ensure the generic constraint here matches TreeProps\nconst MainTree = forwardRef(MainTreeInner) as <\n T extends AntTreeDataNode = TreeDataNode // Use AntTreeDataNode if TreeProps uses it\n>(\n props: TreeProps<T> & {\n ref?: React.ForwardedRef<React.ComponentRef<typeof AntTree<T>>>;\n }\n) => ReturnType<typeof MainTreeInner<T>>;\n\n// Use forwardRef with type assertion for DirectoryTree\nconst DirectoryTree = forwardRef(DirectoryTreeInner) as <\n T extends AntTreeDataNode = AntTreeDataNode\n>(\n props: DirectoryTreeProps<T> & {\n ref?: React.ForwardedRef<React.ComponentRef<typeof AntTree<T>>>; // Check ref type consistency\n }\n) => ReturnType<typeof DirectoryTreeInner<T>>;\n\n// Create the final component with DirectoryTree property\nexport const Tree = Object.assign(MainTree, {\n DirectoryTree,\n TreeNode: AntTree.TreeNode,\n});\n"],"names":["MainTreeInner","props","ref","cls","customSwitcherIcon","processedTreeData","currentUniqueExpandedKeys","currentUniqueCheckedKeys","handleAntTreeExpand","handleAntTreeCheck","restProps","className","switcherIcon","useTreeCommon","jsx","AntTree","clsx","DirectoryTreeInner","MainTree","forwardRef","DirectoryTree","Tree"],"mappings":";;;;;;;AAeA,MAAMA,IAAgB,CACpBC,GACAC,MACG;AACH,QAAM;AAAA,IACJ,KAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,2BAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC;AAAA,IACA,cAAAC;AAAA,EAAA,IACEC,EAAcZ,CAAK;AAEvB,SACE,gBAAAa;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAAb;AAAA,MACA,WAAWc,EAAKb,EAAI,MAAM,GAAGQ,CAAS;AAAA,MACtC,cAAcC,KAAgBR;AAAA,MAE9B,UAAUC;AAAA,MACV,cAAcC;AAAA,MACd,UAAUE;AAAA,MAEV,aAAa,EAAE,SAASD,GAA0B,aAAa,CAAA,EAAC;AAAA,MAChE,SAASE;AAAA,MACR,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGV,GAGMO,IAAqB,CACzBhB,GACAC,MACG;AACH,QAAM;AAAA,IACJ,KAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,2BAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC;AAAA,IACA,cAAAC;AAAA,EAAA,IACEC,EAAcZ,CAAY;AAE9B,SACE,gBAAAa;AAAA,IAACC,EAAQ;AAAA,IAAR;AAAA,MACC,KAAAb;AAAA,MACA,WAAWc,EAAKb,EAAI,gBAAgB,GAAGQ,CAAS;AAAA,MAChD,cAAcC,KAAgBR;AAAA,MAE9B,UAAUC;AAAA,MACV,cAAcC;AAAA,MACd,UAAUE;AAAA,MAEV,aAAa,EAAE,SAASD,GAA0B,aAAa,CAAA,EAAC;AAAA,MAChE,SAASE;AAAA,MACR,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGV,GAIMQ,IAAWC,EAAWnB,CAAa,GASnCoB,IAAgBD,EAAWF,CAAkB,GAStCI,IAAO,OAAO,OAAOH,GAAU;AAAA,EAC1C,eAAAE;AAAA,EACA,UAAUL,EAAQ;AACpB,CAAC;"}
1
+ {"version":3,"file":"components.js","sources":["../../../src/components/tree/components.tsx"],"sourcesContent":["\"use client\";\nimport {\n default as AntTree,\n type DataNode as AntTreeDataNode,\n} from \"antd/es/tree\";\n\nimport { forwardRef } from \"react\";\nimport { clsx } from \"../utils\";\nimport type { TreeDataNode, TreeProps, DirectoryTreeProps } from \"./types\";\nimport { useTreeCommon } from \"./useTreeCommon\";\n\nimport \"./style.css\";\n\n// Create inner function for main Tree with forwarded ref\n// Ensure generic constraint matches TreeProps if it uses AntTreeDataNode\nconst MainTreeInner = <T extends AntTreeDataNode = TreeDataNode>(\n props: TreeProps<T>,\n ref: React.Ref<React.ComponentRef<typeof AntTree<T>>>\n) => {\n const {\n cls,\n customSwitcherIcon,\n processedTreeData,\n currentUniqueExpandedKeys,\n currentUniqueCheckedKeys,\n handleAntTreeExpand,\n handleAntTreeCheck,\n restProps,\n className,\n switcherIcon,\n nodeVerticalAlign,\n } = useTreeCommon(props);\n\n return (\n <AntTree\n ref={ref}\n className={clsx(\n cls(\"tree\"),\n nodeVerticalAlign === \"top\" && cls(\"tree-align-top\"),\n className\n )}\n switcherIcon={switcherIcon || customSwitcherIcon}\n // Pass processed props to AntTree\n treeData={processedTreeData}\n expandedKeys={currentUniqueExpandedKeys}\n onExpand={handleAntTreeExpand}\n // Pass checked keys in the object format\n checkedKeys={{ checked: currentUniqueCheckedKeys, halfChecked: [] }}\n onCheck={handleAntTreeCheck}\n {...restProps} // Pass other props like checkable, showLine, etc.\n />\n );\n};\n\n// Create inner function for DirectoryTree with forwarded ref\nconst DirectoryTreeInner = <T extends AntTreeDataNode = TreeDataNode>(\n props: DirectoryTreeProps<T>,\n ref: React.Ref<React.ComponentRef<typeof AntTree<T>>>\n) => {\n const {\n cls,\n customSwitcherIcon,\n processedTreeData,\n currentUniqueExpandedKeys,\n currentUniqueCheckedKeys,\n handleAntTreeExpand,\n handleAntTreeCheck,\n restProps,\n className,\n switcherIcon,\n nodeVerticalAlign,\n } = useTreeCommon(props as any);\n\n return (\n <AntTree.DirectoryTree\n ref={ref}\n className={clsx(\n cls(\"directory-tree\"),\n nodeVerticalAlign === \"top\" && cls(\"tree-align-top\"),\n className\n )}\n switcherIcon={switcherIcon || customSwitcherIcon}\n // Pass processed props to AntTree.DirectoryTree\n treeData={processedTreeData as T[]}\n expandedKeys={currentUniqueExpandedKeys}\n onExpand={handleAntTreeExpand}\n // Pass checked keys in the object format\n checkedKeys={{ checked: currentUniqueCheckedKeys, halfChecked: [] }}\n onCheck={handleAntTreeCheck}\n {...restProps} // Pass other props like checkable, showLine, etc.\n />\n );\n};\n\n// Use forwardRef with type assertion for main Tree\n// Ensure the generic constraint here matches TreeProps\nconst MainTree = forwardRef(MainTreeInner) as <\n T extends AntTreeDataNode = TreeDataNode // Use AntTreeDataNode if TreeProps uses it\n>(\n props: TreeProps<T> & {\n ref?: React.ForwardedRef<React.ComponentRef<typeof AntTree<T>>>;\n }\n) => ReturnType<typeof MainTreeInner<T>>;\n\n// Use forwardRef with type assertion for DirectoryTree\nconst DirectoryTree = forwardRef(DirectoryTreeInner) as <\n T extends AntTreeDataNode = AntTreeDataNode\n>(\n props: DirectoryTreeProps<T> & {\n ref?: React.ForwardedRef<React.ComponentRef<typeof AntTree<T>>>; // Check ref type consistency\n }\n) => ReturnType<typeof DirectoryTreeInner<T>>;\n\n// Create the final component with DirectoryTree property\nexport const Tree = Object.assign(MainTree, {\n DirectoryTree,\n TreeNode: AntTree.TreeNode,\n});\n"],"names":["MainTreeInner","props","ref","cls","customSwitcherIcon","processedTreeData","currentUniqueExpandedKeys","currentUniqueCheckedKeys","handleAntTreeExpand","handleAntTreeCheck","restProps","className","switcherIcon","nodeVerticalAlign","useTreeCommon","jsx","AntTree","clsx","DirectoryTreeInner","MainTree","forwardRef","DirectoryTree","Tree"],"mappings":";;;;;;;AAeA,MAAMA,IAAgB,CACpBC,GACAC,MACG;AACH,QAAM;AAAA,IACJ,KAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,2BAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC;AAAA,IACA,cAAAC;AAAA,IACA,mBAAAC;AAAA,EAAA,IACEC,EAAcb,CAAK;AAEvB,SACE,gBAAAc;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAAd;AAAA,MACA,WAAWe;AAAA,QACTd,EAAI,MAAM;AAAA,QACVU,MAAsB,SAASV,EAAI,gBAAgB;AAAA,QACnDQ;AAAA,MAAA;AAAA,MAEF,cAAcC,KAAgBR;AAAA,MAE9B,UAAUC;AAAA,MACV,cAAcC;AAAA,MACd,UAAUE;AAAA,MAEV,aAAa,EAAE,SAASD,GAA0B,aAAa,CAAA,EAAC;AAAA,MAChE,SAASE;AAAA,MACR,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGV,GAGMQ,IAAqB,CACzBjB,GACAC,MACG;AACH,QAAM;AAAA,IACJ,KAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,2BAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC;AAAA,IACA,cAAAC;AAAA,IACA,mBAAAC;AAAA,EAAA,IACEC,EAAcb,CAAY;AAE9B,SACE,gBAAAc;AAAA,IAACC,EAAQ;AAAA,IAAR;AAAA,MACC,KAAAd;AAAA,MACA,WAAWe;AAAA,QACTd,EAAI,gBAAgB;AAAA,QACpBU,MAAsB,SAASV,EAAI,gBAAgB;AAAA,QACnDQ;AAAA,MAAA;AAAA,MAEF,cAAcC,KAAgBR;AAAA,MAE9B,UAAUC;AAAA,MACV,cAAcC;AAAA,MACd,UAAUE;AAAA,MAEV,aAAa,EAAE,SAASD,GAA0B,aAAa,CAAA,EAAC;AAAA,MAChE,SAASE;AAAA,MACR,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGV,GAIMS,IAAWC,EAAWpB,CAAa,GASnCqB,IAAgBD,EAAWF,CAAkB,GAStCI,IAAO,OAAO,OAAOH,GAAU;AAAA,EAC1C,eAAAE;AAAA,EACA,UAAUL,EAAQ;AACpB,CAAC;"}
@@ -1 +1 @@
1
- @layer components{.ds-tree{background:none}.ds-tree-treenode{display:flex;width:100%}.ds-tree-node-content-wrapper{display:flex;flex-grow:1}.ds-tree-title{flex:1}.ds-tree-switcher{display:flex;align-items:center;justify-content:center}.ds-tree-icon__customize{display:flex;align-items:center;justify-content:center;font-size:1rem;color:var(--ds-color-icon);margin-right:.5rem}.ds-tree-treenode-selected .ds-tree-icon__customize{color:var(--ds-tree-directory-node-selected-color)}.ds-tree-treenode:not(.ds-tree-treenode-disabled).ds-tree-treenode-selected .ds-tree-node-content-wrapper:hover{color:var(--ds-tree-directory-node-selected-color)}.ds-tree-switcher .ds-tree-switcher-icon{font-size:.75rem}.ds-caret-switcher-icon{transition:transform .2s ease-in-out}.ds-tree-switcher_open .ds-caret-switcher-icon{transform:rotate(90deg)}.ds-tree .ds-tree-switcher:before{height:max(100%,var(--ds-tree-title-height))}}
1
+ @layer components{.ds-tree{background:none}.ds-tree-treenode{display:flex;width:100%}.ds-tree-node-content-wrapper{display:flex;flex-grow:1}.ds-tree-title{flex:1}.ds-tree-switcher{display:flex;align-items:center;justify-content:center}.ds-tree-align-top .ds-tree-checkbox{align-self:flex-start;margin-top:.25rem}.ds-tree-icon__customize{display:flex;align-items:center;justify-content:center;font-size:1rem;color:var(--ds-color-icon);margin-right:.5rem}.ds-tree-treenode:not(.ds-tree-treenode-disabled).ds-tree-treenode-selected .ds-tree-node-content-wrapper:hover{color:var(--ds-tree-node-selected-color)}.ds-directory-tree .ds-tree-treenode-selected .ds-tree-icon__customize{color:var(--ds-tree-directory-node-selected-color)}.ds-directory-tree .ds-tree-treenode:not(.ds-tree-treenode-disabled).ds-tree-treenode-selected .ds-tree-node-content-wrapper:hover{color:var(--ds-tree-directory-node-selected-color)}.ds-tree-switcher .ds-tree-switcher-icon{font-size:.75rem}.ds-caret-switcher-icon{transition:transform .2s ease-in-out}.ds-tree-switcher_open .ds-caret-switcher-icon{transform:rotate(90deg)}.ds-tree .ds-tree-switcher:before{height:max(100%,var(--ds-tree-title-height))}}
@@ -35,6 +35,8 @@ export interface TreeProps<T extends AntTreeDataNode = TreeDataNode> extends Omi
35
35
  allowDuplicatedKeys?: boolean;
36
36
  /** Draggable configuration for tree items */
37
37
  draggable?: AntTreeProps<T>["draggable"];
38
+ /** Vertical alignment of tree nodes (default: 'center') */
39
+ nodeVerticalAlign?: "center" | "top";
38
40
  }
39
41
  export interface DirectoryTreeProps<T extends AntTreeDataNode = TreeDataNode> extends Omit<AntDirectoryTreeProps<T>, "treeData" | "expandedKeys" | "defaultExpandedKeys" | "onExpand" | "checkedKeys" | "defaultCheckedKeys" | "onCheck" | "draggable"> {
40
42
  treeData?: T[];
@@ -52,5 +54,7 @@ export interface DirectoryTreeProps<T extends AntTreeDataNode = TreeDataNode> ex
52
54
  allowDuplicatedKeys?: boolean;
53
55
  /** Draggable configuration for directory tree items */
54
56
  draggable?: AntDirectoryTreeProps<T>["draggable"];
57
+ /** Vertical alignment of tree nodes (default: 'center') */
58
+ nodeVerticalAlign?: "center" | "top";
55
59
  }
56
60
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/tree/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/tree/types.ts"],"names":[],"mappings":"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"}
@@ -175,5 +175,6 @@ export declare function useTreeCommon<T extends AntTreeDataNode>(props: TreeProp
175
175
  };
176
176
  className: string;
177
177
  switcherIcon: import('antd/es/tree/Tree').SwitcherIcon;
178
+ nodeVerticalAlign: "center" | "top";
178
179
  };
179
180
  //# sourceMappingURL=useTreeCommon.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTreeCommon.d.ts","sourceRoot":"","sources":["../../../src/components/tree/useTreeCommon.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,IAAI,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAW,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAgB,SAAS,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG3E,wBAAgB,aAAa,CAAC,CAAC,SAAS,eAAe,EACrD,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;;iEAHxB,MAAQ,SAAQ;;;;;;;;;;;;;;;gBAwG0hC,MAAO,aAAa;mBAAiK,MAAO,SAAS;;;;;;kBAlC7vC,MAAO,iBACN;iBACD,MAAO,iBACb;;;;;oBACQ,MAAO,oBACJ;;wBACW,MACnB,iBAAa;;;;;;;;;;;;;;;;;;;;;;;;mBAIK,MACjB,cACC;;;;;;qGA7EmB,MAAO,SAC1B;;;;oBAiGsoD,MAAO,aAAa;;;;;;;;;;;;;;mCAxC5pD,MAAE,SAAS;iGAIH,MAAO,SACjB;;;mBAmCkgB,MAAO,UAAU;;;;;;;8BAAuqB,MAAO,SAAS;;;;gBAA7I,MAAO,aAAa;mBAAiK,MAAO,SAAS;;;;;;kBAlC7vC,MAAO,iBACN;iBACD,MAAO,iBACb;;;;;oBACQ,MAAO,oBACJ;;wBACW,MACnB,iBAAa;;;;;;;;;;;;;;;;;;;;;;;;mBAIK,MACjB,cACC;;;;;;qGA7EmB,MAAO,SAC1B;;;;oBAiGsoD,MAAO,aAAa;;;;;;;;;;;;;;mCAxC5pD,MAAE,SAAS;iGAIH,MAAO,SACjB;;;mBAmCkgB,MAAO,UAAU;;;;;;;8BAAuqB,MAAO,SAAS;;;;;EAD3sC"}
1
+ {"version":3,"file":"useTreeCommon.d.ts","sourceRoot":"","sources":["../../../src/components/tree/useTreeCommon.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,IAAI,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAW,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAgB,SAAS,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG3E,wBAAgB,aAAa,CAAC,CAAC,SAAS,eAAe,EACrD,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;;iEAHxB,MAAQ,SAAQ;;;;;;;;;;;;;;;gBA0Gi+B,MAAO,aAAa;mBAAiK,MAAO,SAAS;;;;;;kBArClsC,MAAO,iBACT;iBAEH,MAAO,iBAAiB;;;;;oBAExB,MAAG,oBACL;;wBACa,MAAO,iBACT;;;;;;;;;;;;;;;;;;;;;;;;mBAIR,MAAO,cACH;;;;;;qGA5EgB,MAAO,SAC1B;;;;oBAmG6kD,MAAO,aAAa;;;;;;;;;;;;;;mCA3ChmD,MAAO,SACX;iGAEW,MAAO,SACpB;;;mBAuC0c,MAAO,UAAU;;;;;;;8BAAuqB,MAAO,SAAS;;;;gBAA7I,MAAO,aAAa;mBAAiK,MAAO,SAAS;;;;;;kBArClsC,MAAO,iBACT;iBAEH,MAAO,iBAAiB;;;;;oBAExB,MAAG,oBACL;;wBACa,MAAO,iBACT;;;;;;;;;;;;;;;;;;;;;;;;mBAIR,MAAO,cACH;;;;;;qGA5EgB,MAAO,SAC1B;;;;oBAmG6kD,MAAO,aAAa;;;;;;;;;;;;;;mCA3ChmD,MAAO,SACX;iGAEW,MAAO,SACpB;;;mBAuC0c,MAAO,UAAU;;;;;;;8BAAuqB,MAAO,SAAS;;;;;;EADlpC"}
@@ -1,9 +1,9 @@
1
1
  "use client";
2
- import { jsx as v } from "react/jsx-runtime";
3
- import { useMemo as I } from "react";
4
- import { CaretRight as M } from "@bioturing/assets";
5
- import { useUniqueKeysTree as S } from "./useUniqueKeysTree.js";
6
- import { useCls as U } from "../utils/antdUtils.js";
2
+ import { jsx as I } from "react/jsx-runtime";
3
+ import { useMemo as M } from "react";
4
+ import { CaretRight as S } from "@bioturing/assets";
5
+ import { useUniqueKeysTree as U } from "./useUniqueKeysTree.js";
6
+ import { useCls as N } from "../utils/antdUtils.js";
7
7
  function z(h) {
8
8
  const {
9
9
  treeData: o = [],
@@ -18,8 +18,9 @@ function z(h) {
18
18
  allowDuplicatedKeys: E,
19
19
  className: K,
20
20
  switcherIcon: k,
21
- ...w
22
- } = h, A = I(() => {
21
+ nodeVerticalAlign: w = "center",
22
+ ...A
23
+ } = h, g = M(() => {
23
24
  if (d) {
24
25
  const t = [], s = (c = []) => {
25
26
  c.forEach((r) => {
@@ -55,30 +56,31 @@ function z(h) {
55
56
  ]), {
56
57
  processedTreeData: C,
57
58
  currentUniqueExpandedKeys: D,
58
- currentUniqueCheckedKeys: g,
59
- handleAntTreeExpand: T,
60
- handleAntTreeCheck: q
61
- } = S({
59
+ currentUniqueCheckedKeys: T,
60
+ handleAntTreeExpand: q,
61
+ handleAntTreeCheck: v
62
+ } = U({
62
63
  treeData: o,
63
64
  expandedKeys: u,
64
- defaultExpandedKeys: A,
65
+ defaultExpandedKeys: g,
65
66
  onExpand: f,
66
67
  checkedKeys: y,
67
68
  defaultCheckedKeys: m,
68
69
  onCheck: x,
69
70
  allowDuplicatedKeys: E
70
- }), p = U();
71
+ }), p = N();
71
72
  return {
72
73
  cls: p,
73
- customSwitcherIcon: () => /* @__PURE__ */ v(M, { weight: "bold", className: p("caret-switcher-icon") }),
74
+ customSwitcherIcon: () => /* @__PURE__ */ I(S, { weight: "bold", className: p("caret-switcher-icon") }),
74
75
  processedTreeData: C,
75
76
  currentUniqueExpandedKeys: D,
76
- currentUniqueCheckedKeys: g,
77
- handleAntTreeExpand: T,
78
- handleAntTreeCheck: q,
79
- restProps: w,
77
+ currentUniqueCheckedKeys: T,
78
+ handleAntTreeExpand: q,
79
+ handleAntTreeCheck: v,
80
+ restProps: A,
80
81
  className: K,
81
- switcherIcon: k
82
+ switcherIcon: k,
83
+ nodeVerticalAlign: w
82
84
  };
83
85
  }
84
86
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"useTreeCommon.js","sources":["../../../src/components/tree/useTreeCommon.tsx"],"sourcesContent":["\"use client\";\nimport { type DataNode as AntTreeDataNode } from \"antd/es/tree\";\n\nimport { useMemo, type Key } from \"react\";\nimport { useCls } from \"../utils\";\nimport { CaretRight } from \"@bioturing/assets\";\nimport type { TreeDataNode, TreeProps, DirectoryTreeProps } from \"./types\";\nimport { useUniqueKeysTree } from \"./useUniqueKeysTree\";\n\nexport function useTreeCommon<T extends AntTreeDataNode>(\n props: TreeProps<T> | DirectoryTreeProps<T>\n) {\n const {\n treeData: originTreeData = [],\n expandedKeys: propExpandedKeys,\n defaultExpandedKeys: propDefaultExpandedKeys = [],\n defaultExpandAll = false,\n defaultExpandParent = true,\n onExpand: propOnExpand,\n checkedKeys,\n defaultCheckedKeys,\n onCheck,\n allowDuplicatedKeys,\n className,\n switcherIcon,\n ...restProps\n } = props;\n\n // compute resolved defaultExpandedKeys\n const resolvedDefaultExpandedKeys = useMemo<Key[]>(() => {\n if (defaultExpandAll) {\n const keys: Key[] = [];\n const traverse = (nodes: TreeDataNode[] = []) => {\n nodes.forEach((node) => {\n keys.push(node.key);\n if (Array.isArray(node.children))\n traverse(node.children as TreeDataNode[]);\n });\n };\n traverse(originTreeData as TreeDataNode[]);\n return keys;\n }\n if (defaultExpandParent && propDefaultExpandedKeys?.length) {\n // build parent map\n const parentMap = new Map<Key, Key>();\n const traverse = (nodes: TreeDataNode[], parent?: TreeDataNode) => {\n nodes.forEach((node) => {\n if (parent) parentMap.set(node.key, parent.key);\n const children = Array.isArray(node.children)\n ? (node.children as TreeDataNode[])\n : [];\n if (children.length) traverse(children, node);\n });\n };\n traverse(originTreeData as TreeDataNode[]);\n // collect all expansions: original keys + their ancestors\n const expanded = new Set<Key>(propDefaultExpandedKeys);\n propDefaultExpandedKeys.forEach((key) => {\n let k = key;\n while (parentMap.has(k)) {\n const p = parentMap.get(k)!;\n if (!expanded.has(p)) expanded.add(p);\n k = p;\n }\n });\n return Array.from(expanded);\n }\n return propDefaultExpandedKeys ?? [];\n }, [\n originTreeData,\n defaultExpandAll,\n defaultExpandParent,\n propDefaultExpandedKeys,\n ]);\n\n // use unique keys hook\n const {\n processedTreeData,\n currentUniqueExpandedKeys,\n currentUniqueCheckedKeys,\n handleAntTreeExpand,\n handleAntTreeCheck,\n } = useUniqueKeysTree({\n treeData: originTreeData,\n expandedKeys: propExpandedKeys,\n defaultExpandedKeys: resolvedDefaultExpandedKeys,\n onExpand: propOnExpand,\n checkedKeys,\n defaultCheckedKeys,\n onCheck,\n allowDuplicatedKeys,\n });\n\n const cls = useCls();\n const customSwitcherIcon: TreeProps<T>[\"switcherIcon\"] = () => (\n <CaretRight weight=\"bold\" className={cls(\"caret-switcher-icon\")} />\n );\n\n return {\n cls,\n customSwitcherIcon,\n processedTreeData,\n currentUniqueExpandedKeys,\n currentUniqueCheckedKeys,\n handleAntTreeExpand,\n handleAntTreeCheck,\n restProps,\n className,\n switcherIcon,\n };\n}\n"],"names":["useTreeCommon","props","originTreeData","propExpandedKeys","propDefaultExpandedKeys","defaultExpandAll","defaultExpandParent","propOnExpand","checkedKeys","defaultCheckedKeys","onCheck","allowDuplicatedKeys","className","switcherIcon","restProps","resolvedDefaultExpandedKeys","useMemo","keys","traverse","nodes","node","parentMap","parent","children","expanded","key","k","p","processedTreeData","currentUniqueExpandedKeys","currentUniqueCheckedKeys","handleAntTreeExpand","handleAntTreeCheck","useUniqueKeysTree","cls","useCls","jsx","CaretRight"],"mappings":";;;;;;AASO,SAASA,EACdC,GACA;AACA,QAAM;AAAA,IACJ,UAAUC,IAAiB,CAAA;AAAA,IAC3B,cAAcC;AAAA,IACd,qBAAqBC,IAA0B,CAAA;AAAA,IAC/C,kBAAAC,IAAmB;AAAA,IACnB,qBAAAC,IAAsB;AAAA,IACtB,UAAUC;AAAA,IACV,aAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,cAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDb,GAGEc,IAA8BC,EAAe,MAAM;AACvD,QAAIX,GAAkB;AACpB,YAAMY,IAAc,CAAA,GACdC,IAAW,CAACC,IAAwB,OAAO;AAC/C,QAAAA,EAAM,QAAQ,CAACC,MAAS;AACtB,UAAAH,EAAK,KAAKG,EAAK,GAAG,GACd,MAAM,QAAQA,EAAK,QAAQ,KAC7BF,EAASE,EAAK,QAA0B;AAAA,QAC5C,CAAC;AAAA,MACH;AACA,aAAAF,EAAShB,CAAgC,GAClCe;AAAA,IACT;AACA,QAAIX,KAAuBF,GAAyB,QAAQ;AAE1D,YAAMiB,wBAAgB,IAAA,GAChBH,IAAW,CAACC,GAAuBG,MAA0B;AACjE,QAAAH,EAAM,QAAQ,CAACC,MAAS;AACtB,UAAIE,KAAQD,EAAU,IAAID,EAAK,KAAKE,EAAO,GAAG;AAC9C,gBAAMC,IAAW,MAAM,QAAQH,EAAK,QAAQ,IACvCA,EAAK,WACN,CAAA;AACJ,UAAIG,EAAS,UAAQL,EAASK,GAAUH,CAAI;AAAA,QAC9C,CAAC;AAAA,MACH;AACA,MAAAF,EAAShB,CAAgC;AAEzC,YAAMsB,IAAW,IAAI,IAASpB,CAAuB;AACrD,aAAAA,EAAwB,QAAQ,CAACqB,MAAQ;AACvC,YAAIC,IAAID;AACR,eAAOJ,EAAU,IAAIK,CAAC,KAAG;AACvB,gBAAMC,IAAIN,EAAU,IAAIK,CAAC;AACzB,UAAKF,EAAS,IAAIG,CAAC,KAAGH,EAAS,IAAIG,CAAC,GACpCD,IAAIC;AAAA,QACN;AAAA,MACF,CAAC,GACM,MAAM,KAAKH,CAAQ;AAAA,IAC5B;AACA,WAAOpB,KAA2B,CAAA;AAAA,EACpC,GAAG;AAAA,IACDF;AAAA,IACAG;AAAA,IACAC;AAAA,IACAF;AAAA,EAAA,CACD,GAGK;AAAA,IACJ,mBAAAwB;AAAA,IACA,2BAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,oBAAAC;AAAA,EAAA,IACEC,EAAkB;AAAA,IACpB,UAAU/B;AAAA,IACV,cAAcC;AAAA,IACd,qBAAqBY;AAAA,IACrB,UAAUR;AAAA,IACV,aAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,qBAAAC;AAAA,EAAA,CACD,GAEKuB,IAAMC,EAAA;AAKZ,SAAO;AAAA,IACL,KAAAD;AAAA,IACA,oBANuD,MACvD,gBAAAE,EAACC,GAAA,EAAW,QAAO,QAAO,WAAWH,EAAI,qBAAqB,GAAG;AAAA,IAMjE,mBAAAN;AAAA,IACA,2BAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,WAAAlB;AAAA,IACA,WAAAF;AAAA,IACA,cAAAC;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"useTreeCommon.js","sources":["../../../src/components/tree/useTreeCommon.tsx"],"sourcesContent":["\"use client\";\nimport { type DataNode as AntTreeDataNode } from \"antd/es/tree\";\n\nimport { useMemo, type Key } from \"react\";\nimport { useCls } from \"../utils\";\nimport { CaretRight } from \"@bioturing/assets\";\nimport type { TreeDataNode, TreeProps, DirectoryTreeProps } from \"./types\";\nimport { useUniqueKeysTree } from \"./useUniqueKeysTree\";\n\nexport function useTreeCommon<T extends AntTreeDataNode>(\n props: TreeProps<T> | DirectoryTreeProps<T>\n) {\n const {\n treeData: originTreeData = [],\n expandedKeys: propExpandedKeys,\n defaultExpandedKeys: propDefaultExpandedKeys = [],\n defaultExpandAll = false,\n defaultExpandParent = true,\n onExpand: propOnExpand,\n checkedKeys,\n defaultCheckedKeys,\n onCheck,\n allowDuplicatedKeys,\n className,\n switcherIcon,\n nodeVerticalAlign = \"center\",\n ...restProps\n } = props;\n\n // compute resolved defaultExpandedKeys\n const resolvedDefaultExpandedKeys = useMemo<Key[]>(() => {\n if (defaultExpandAll) {\n const keys: Key[] = [];\n const traverse = (nodes: TreeDataNode[] = []) => {\n nodes.forEach((node) => {\n keys.push(node.key);\n if (Array.isArray(node.children))\n traverse(node.children as TreeDataNode[]);\n });\n };\n traverse(originTreeData as TreeDataNode[]);\n return keys;\n }\n if (defaultExpandParent && propDefaultExpandedKeys?.length) {\n // build parent map\n const parentMap = new Map<Key, Key>();\n const traverse = (nodes: TreeDataNode[], parent?: TreeDataNode) => {\n nodes.forEach((node) => {\n if (parent) parentMap.set(node.key, parent.key);\n const children = Array.isArray(node.children)\n ? (node.children as TreeDataNode[])\n : [];\n if (children.length) traverse(children, node);\n });\n };\n traverse(originTreeData as TreeDataNode[]);\n // collect all expansions: original keys + their ancestors\n const expanded = new Set<Key>(propDefaultExpandedKeys);\n propDefaultExpandedKeys.forEach((key) => {\n let k = key;\n while (parentMap.has(k)) {\n const p = parentMap.get(k)!;\n if (!expanded.has(p)) expanded.add(p);\n k = p;\n }\n });\n return Array.from(expanded);\n }\n return propDefaultExpandedKeys ?? [];\n }, [\n originTreeData,\n defaultExpandAll,\n defaultExpandParent,\n propDefaultExpandedKeys,\n ]);\n\n // use unique keys hook\n const {\n processedTreeData,\n currentUniqueExpandedKeys,\n currentUniqueCheckedKeys,\n handleAntTreeExpand,\n handleAntTreeCheck,\n } = useUniqueKeysTree({\n treeData: originTreeData,\n expandedKeys: propExpandedKeys,\n defaultExpandedKeys: resolvedDefaultExpandedKeys,\n onExpand: propOnExpand,\n checkedKeys,\n defaultCheckedKeys,\n onCheck,\n allowDuplicatedKeys,\n });\n\n const cls = useCls();\n const customSwitcherIcon: TreeProps<T>[\"switcherIcon\"] = () => (\n <CaretRight weight=\"bold\" className={cls(\"caret-switcher-icon\")} />\n );\n\n return {\n cls,\n customSwitcherIcon,\n processedTreeData,\n currentUniqueExpandedKeys,\n currentUniqueCheckedKeys,\n handleAntTreeExpand,\n handleAntTreeCheck,\n restProps,\n className,\n switcherIcon,\n nodeVerticalAlign,\n };\n}\n"],"names":["useTreeCommon","props","originTreeData","propExpandedKeys","propDefaultExpandedKeys","defaultExpandAll","defaultExpandParent","propOnExpand","checkedKeys","defaultCheckedKeys","onCheck","allowDuplicatedKeys","className","switcherIcon","nodeVerticalAlign","restProps","resolvedDefaultExpandedKeys","useMemo","keys","traverse","nodes","node","parentMap","parent","children","expanded","key","k","p","processedTreeData","currentUniqueExpandedKeys","currentUniqueCheckedKeys","handleAntTreeExpand","handleAntTreeCheck","useUniqueKeysTree","cls","useCls","jsx","CaretRight"],"mappings":";;;;;;AASO,SAASA,EACdC,GACA;AACA,QAAM;AAAA,IACJ,UAAUC,IAAiB,CAAA;AAAA,IAC3B,cAAcC;AAAA,IACd,qBAAqBC,IAA0B,CAAA;AAAA,IAC/C,kBAAAC,IAAmB;AAAA,IACnB,qBAAAC,IAAsB;AAAA,IACtB,UAAUC;AAAA,IACV,aAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,cAAAC;AAAA,IACA,mBAAAC,IAAoB;AAAA,IACpB,GAAGC;AAAA,EAAA,IACDd,GAGEe,IAA8BC,EAAe,MAAM;AACvD,QAAIZ,GAAkB;AACpB,YAAMa,IAAc,CAAA,GACdC,IAAW,CAACC,IAAwB,OAAO;AAC/C,QAAAA,EAAM,QAAQ,CAACC,MAAS;AACtB,UAAAH,EAAK,KAAKG,EAAK,GAAG,GACd,MAAM,QAAQA,EAAK,QAAQ,KAC7BF,EAASE,EAAK,QAA0B;AAAA,QAC5C,CAAC;AAAA,MACH;AACA,aAAAF,EAASjB,CAAgC,GAClCgB;AAAA,IACT;AACA,QAAIZ,KAAuBF,GAAyB,QAAQ;AAE1D,YAAMkB,wBAAgB,IAAA,GAChBH,IAAW,CAACC,GAAuBG,MAA0B;AACjE,QAAAH,EAAM,QAAQ,CAACC,MAAS;AACtB,UAAIE,KAAQD,EAAU,IAAID,EAAK,KAAKE,EAAO,GAAG;AAC9C,gBAAMC,IAAW,MAAM,QAAQH,EAAK,QAAQ,IACvCA,EAAK,WACN,CAAA;AACJ,UAAIG,EAAS,UAAQL,EAASK,GAAUH,CAAI;AAAA,QAC9C,CAAC;AAAA,MACH;AACA,MAAAF,EAASjB,CAAgC;AAEzC,YAAMuB,IAAW,IAAI,IAASrB,CAAuB;AACrD,aAAAA,EAAwB,QAAQ,CAACsB,MAAQ;AACvC,YAAIC,IAAID;AACR,eAAOJ,EAAU,IAAIK,CAAC,KAAG;AACvB,gBAAMC,IAAIN,EAAU,IAAIK,CAAC;AACzB,UAAKF,EAAS,IAAIG,CAAC,KAAGH,EAAS,IAAIG,CAAC,GACpCD,IAAIC;AAAA,QACN;AAAA,MACF,CAAC,GACM,MAAM,KAAKH,CAAQ;AAAA,IAC5B;AACA,WAAOrB,KAA2B,CAAA;AAAA,EACpC,GAAG;AAAA,IACDF;AAAA,IACAG;AAAA,IACAC;AAAA,IACAF;AAAA,EAAA,CACD,GAGK;AAAA,IACJ,mBAAAyB;AAAA,IACA,2BAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,oBAAAC;AAAA,EAAA,IACEC,EAAkB;AAAA,IACpB,UAAUhC;AAAA,IACV,cAAcC;AAAA,IACd,qBAAqBa;AAAA,IACrB,UAAUT;AAAA,IACV,aAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,qBAAAC;AAAA,EAAA,CACD,GAEKwB,IAAMC,EAAA;AAKZ,SAAO;AAAA,IACL,KAAAD;AAAA,IACA,oBANuD,MACvD,gBAAAE,EAACC,GAAA,EAAW,QAAO,QAAO,WAAWH,EAAI,qBAAqB,GAAG;AAAA,IAMjE,mBAAAN;AAAA,IACA,2BAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,WAAAlB;AAAA,IACA,WAAAH;AAAA,IACA,cAAAC;AAAA,IACA,mBAAAC;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,24 @@
1
+ import { WindowPortalProps } from './types';
2
+ /**
3
+ * WindowPortal - Renders content in a separate browser window
4
+ *
5
+ * This component creates a new browser window and renders its children inside it.
6
+ * It automatically copies parent window styles for consistent theming and handles
7
+ * cleanup when the component unmounts or the window is closed.
8
+ *
9
+ * **Performance Note**: Rapid state updates (e.g., text input) may have slight latency
10
+ * due to React reconciliation across different window contexts. This is expected behavior
11
+ * when using portals across window boundaries.
12
+ *
13
+ * **Theme Synchronization**: The component automatically syncs theme changes (light/dark mode)
14
+ * from the parent window to the popup window using a MutationObserver.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * <WindowPortal width={800} height={600} title="My Window">
19
+ * <div>Content rendered in separate window</div>
20
+ * </WindowPortal>
21
+ * ```
22
+ */
23
+ export declare function WindowPortal({ children, width, height, left, top, title, copyStyles, onClose, windowFeatures, }: WindowPortalProps): import('react').ReactPortal;
24
+ //# sourceMappingURL=component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/window-portal/component.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,KAAW,EACX,MAAY,EACZ,IAAU,EACV,GAAS,EACT,KAAU,EACV,UAAiB,EACjB,OAAO,EACP,cAAmB,GACpB,EAAE,iBAAiB,+BAiOnB"}
@@ -0,0 +1,120 @@
1
+ "use client";
2
+ import { useState as C, useRef as g, useCallback as I, useEffect as i } from "react";
3
+ import { createPortal as P } from "react-dom";
4
+ function z({
5
+ children: w,
6
+ width: $ = 600,
7
+ height: N = 400,
8
+ left: W = 200,
9
+ top: k = 200,
10
+ title: d = "",
11
+ copyStyles: f = !0,
12
+ onClose: y,
13
+ windowFeatures: x = {}
14
+ }) {
15
+ const [l, S] = C(null), c = g(null), [h, E] = C(!1), b = I((e) => {
16
+ if (!e || e.closed) return;
17
+ e.document.head.querySelectorAll("style, link[rel='stylesheet']").forEach((o) => o.remove()), Array.from(document.styleSheets).forEach((o) => {
18
+ try {
19
+ if (o.cssRules) {
20
+ const t = e.document.createElement("style");
21
+ Array.from(o.cssRules).forEach((r) => {
22
+ t.appendChild(
23
+ e.document.createTextNode(r.cssText)
24
+ );
25
+ }), e.document.head.appendChild(t);
26
+ }
27
+ } catch {
28
+ if (o.href) {
29
+ const r = e.document.createElement("link");
30
+ r.rel = "stylesheet", r.href = o.href, e.document.head.appendChild(r);
31
+ }
32
+ }
33
+ }), Array.from(document.querySelectorAll("style")).forEach((o) => {
34
+ const t = e.document.createElement("style");
35
+ t.textContent = o.textContent, e.document.head.appendChild(t);
36
+ });
37
+ }, []);
38
+ return i(() => {
39
+ const e = document.createElement("div");
40
+ S(e);
41
+ }, []), i(() => {
42
+ if (!l || c.current && !c.current.closed)
43
+ return;
44
+ const {
45
+ resizable: e = !0,
46
+ scrollbars: u = !0,
47
+ toolbar: o = !1,
48
+ menubar: t = !1,
49
+ location: r = !1,
50
+ status: s = !1
51
+ } = x, m = [
52
+ `width=${$}`,
53
+ `height=${N}`,
54
+ `left=${W}`,
55
+ `top=${k}`,
56
+ `resizable=${e ? "yes" : "no"}`,
57
+ `scrollbars=${u ? "yes" : "no"}`,
58
+ `toolbar=${o ? "yes" : "no"}`,
59
+ `menubar=${t ? "yes" : "no"}`,
60
+ `location=${r ? "yes" : "no"}`,
61
+ `status=${s ? "yes" : "no"}`
62
+ ].join(","), n = window.open("", "", m);
63
+ if (!n) {
64
+ console.warn(
65
+ "WindowPortal: Failed to open new window. It may have been blocked by a popup blocker."
66
+ );
67
+ return;
68
+ }
69
+ if (c.current = n, d && (n.document.title = d), f) {
70
+ b(n);
71
+ const v = document.documentElement.className;
72
+ v && (n.document.documentElement.className = v), Array.from(document.documentElement.attributes).forEach((a) => {
73
+ a.name.startsWith("data-") && n.document.documentElement.setAttribute(a.name, a.value);
74
+ });
75
+ const A = document.body.className;
76
+ A && (n.document.body.className = A), Array.from(document.body.attributes).forEach((a) => {
77
+ a.name.startsWith("data-") && n.document.body.setAttribute(a.name, a.value);
78
+ });
79
+ }
80
+ n.document.body.appendChild(l), E(!0);
81
+ const R = () => {
82
+ y && y();
83
+ }, p = setInterval(() => {
84
+ n.closed && (clearInterval(p), R());
85
+ }, 500);
86
+ return () => {
87
+ clearInterval(p), E(!1), n && !n.closed && n.close();
88
+ };
89
+ }, [l]), i(() => {
90
+ c.current && !c.current.closed && (c.current.document.title = d);
91
+ }, [d]), i(() => {
92
+ if (!f || !h || !c.current || c.current.closed)
93
+ return;
94
+ const e = c.current, u = new MutationObserver((t) => {
95
+ t.forEach((r) => {
96
+ if (r.type === "attributes") {
97
+ const s = r.attributeName;
98
+ if (!s) return;
99
+ if (s === "class")
100
+ e.document.documentElement.className = document.documentElement.className, b(e);
101
+ else if (s.startsWith("data-")) {
102
+ const m = document.documentElement.getAttribute(s);
103
+ m !== null ? e.document.documentElement.setAttribute(s, m) : e.document.documentElement.removeAttribute(s);
104
+ }
105
+ }
106
+ });
107
+ }), o = Array.from(document.documentElement.attributes).filter((t) => t.name.startsWith("data-")).map((t) => t.name);
108
+ return u.observe(document.documentElement, {
109
+ attributes: !0,
110
+ attributeFilter: ["class", ...o],
111
+ attributeOldValue: !1
112
+ }), () => {
113
+ u.disconnect();
114
+ };
115
+ }, [f, b, h]), l ? P(w, l) : null;
116
+ }
117
+ export {
118
+ z as WindowPortal
119
+ };
120
+ //# sourceMappingURL=component.js.map