@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.js","sources":["../../../src/components/window-portal/component.tsx"],"sourcesContent":["\"use client\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { WindowPortalProps } from \"./types\";\n\n/**\n * WindowPortal - Renders content in a separate browser window\n *\n * This component creates a new browser window and renders its children inside it.\n * It automatically copies parent window styles for consistent theming and handles\n * cleanup when the component unmounts or the window is closed.\n *\n * **Performance Note**: Rapid state updates (e.g., text input) may have slight latency\n * due to React reconciliation across different window contexts. This is expected behavior\n * when using portals across window boundaries.\n *\n * **Theme Synchronization**: The component automatically syncs theme changes (light/dark mode)\n * from the parent window to the popup window using a MutationObserver.\n *\n * @example\n * ```tsx\n * <WindowPortal width={800} height={600} title=\"My Window\">\n * <div>Content rendered in separate window</div>\n * </WindowPortal>\n * ```\n */\nexport function WindowPortal({\n children,\n width = 600,\n height = 400,\n left = 200,\n top = 200,\n title = \"\",\n copyStyles = true,\n onClose,\n windowFeatures = {},\n}: WindowPortalProps) {\n const [container, setContainer] = useState<HTMLElement | null>(null);\n const newWindow = useRef<Window | null>(null);\n const [windowReady, setWindowReady] = useState(false);\n\n // Function to copy styles from parent to popup window\n const copyStylesToWindow = useCallback((win: Window) => {\n if (!win || win.closed) return;\n\n // Clear existing styles in popup window\n const existingStyles = win.document.head.querySelectorAll(\"style, link[rel='stylesheet']\");\n existingStyles.forEach((style) => style.remove());\n\n // Copy all stylesheets\n Array.from(document.styleSheets).forEach((stylesheet) => {\n try {\n // Try to copy via cssRules (for same-origin stylesheets)\n if (stylesheet.cssRules) {\n const newStyleElement = win.document.createElement(\"style\");\n Array.from(stylesheet.cssRules).forEach((rule) => {\n newStyleElement.appendChild(\n win.document.createTextNode(rule.cssText)\n );\n });\n win.document.head.appendChild(newStyleElement);\n }\n } catch (e) {\n // If cssRules is not accessible (CORS), copy via link element\n if (stylesheet.href) {\n const link = win.document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = stylesheet.href;\n win.document.head.appendChild(link);\n }\n }\n });\n\n // Copy inline style elements\n Array.from(document.querySelectorAll(\"style\")).forEach((style) => {\n const newStyle = win.document.createElement(\"style\");\n newStyle.textContent = style.textContent;\n win.document.head.appendChild(newStyle);\n });\n }, []);\n\n useEffect(() => {\n // Create container element on client-side\n const div = document.createElement(\"div\");\n setContainer(div);\n }, []);\n\n useEffect(() => {\n // When container is ready\n if (!container) return;\n\n // Only create the window once - don't recreate on every render\n if (newWindow.current && !newWindow.current.closed) {\n return;\n }\n\n // Build window features string\n const {\n resizable = true,\n scrollbars = true,\n toolbar = false,\n menubar = false,\n location = false,\n status = false,\n } = windowFeatures;\n\n const features = [\n `width=${width}`,\n `height=${height}`,\n `left=${left}`,\n `top=${top}`,\n `resizable=${resizable ? \"yes\" : \"no\"}`,\n `scrollbars=${scrollbars ? \"yes\" : \"no\"}`,\n `toolbar=${toolbar ? \"yes\" : \"no\"}`,\n `menubar=${menubar ? \"yes\" : \"no\"}`,\n `location=${location ? \"yes\" : \"no\"}`,\n `status=${status ? \"yes\" : \"no\"}`,\n ].join(\",\");\n\n // Create window\n const win = window.open(\"\", \"\", features);\n\n if (!win) {\n console.warn(\n \"WindowPortal: Failed to open new window. It may have been blocked by a popup blocker.\"\n );\n return;\n }\n\n newWindow.current = win;\n\n // Set initial window title\n if (title) {\n win.document.title = title;\n }\n\n // Copy styles from parent window\n if (copyStyles) {\n copyStylesToWindow(win);\n\n // Copy theme classes from html element to maintain dark/light mode\n const htmlClasses = document.documentElement.className;\n if (htmlClasses) {\n win.document.documentElement.className = htmlClasses;\n }\n\n // Copy data attributes from html element (for theme)\n Array.from(document.documentElement.attributes).forEach((attr) => {\n if (attr.name.startsWith(\"data-\")) {\n win.document.documentElement.setAttribute(attr.name, attr.value);\n }\n });\n\n // Also copy body classes and attributes\n const bodyClasses = document.body.className;\n if (bodyClasses) {\n win.document.body.className = bodyClasses;\n }\n\n Array.from(document.body.attributes).forEach((attr) => {\n if (attr.name.startsWith(\"data-\")) {\n win.document.body.setAttribute(attr.name, attr.value);\n }\n });\n }\n\n // Append container to new window's body\n win.document.body.appendChild(container);\n\n // Mark window as ready for theme sync\n setWindowReady(true);\n\n // Set up cleanup handler\n const handleClose = () => {\n if (onClose) {\n onClose();\n }\n };\n\n // Poll for window closure (since 'beforeunload' doesn't always work reliably)\n const checkClosed = setInterval(() => {\n if (win.closed) {\n clearInterval(checkClosed);\n handleClose();\n }\n }, 500);\n\n // Return cleanup function\n return () => {\n clearInterval(checkClosed);\n setWindowReady(false);\n if (win && !win.closed) {\n win.close();\n }\n };\n // Only depend on container - window should only be created once\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [container]);\n\n // Update window title when it changes\n useEffect(() => {\n if (newWindow.current && !newWindow.current.closed) {\n newWindow.current.document.title = title;\n }\n }, [title]);\n\n // Sync theme changes from parent to popup window\n useEffect(() => {\n if (!copyStyles || !windowReady || !newWindow.current || newWindow.current.closed) {\n return;\n }\n\n const win = newWindow.current;\n\n // Create a MutationObserver to watch for class and data attribute changes on html element\n // Theme classes (light/dark) are applied to the html element in this design system\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === \"attributes\") {\n const attrName = mutation.attributeName;\n if (!attrName) return;\n\n // Sync class changes from html element (this is where theme classes are applied)\n if (attrName === \"class\") {\n win.document.documentElement.className = document.documentElement.className;\n\n // Re-copy all styles to get the updated theme-specific CSS\n // This ensures CSS variables and theme-specific rules are updated\n copyStylesToWindow(win);\n }\n // Sync data attributes (for theme)\n else if (attrName.startsWith(\"data-\")) {\n const value = document.documentElement.getAttribute(attrName);\n if (value !== null) {\n win.document.documentElement.setAttribute(attrName, value);\n } else {\n win.document.documentElement.removeAttribute(attrName);\n }\n }\n }\n });\n });\n\n // Collect all data-* attributes to watch\n const allDataAttrs = Array.from(document.documentElement.attributes)\n .filter((attr) => attr.name.startsWith(\"data-\"))\n .map((attr) => attr.name);\n\n // Observe the parent window's html element for attribute changes\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"class\", ...allDataAttrs],\n attributeOldValue: false,\n });\n\n return () => {\n observer.disconnect();\n };\n }, [copyStyles, copyStylesToWindow, windowReady]);\n\n return container ? createPortal(children, container) : null;\n}\n"],"names":["WindowPortal","children","width","height","left","top","title","copyStyles","onClose","windowFeatures","container","setContainer","useState","newWindow","useRef","windowReady","setWindowReady","copyStylesToWindow","useCallback","win","style","stylesheet","newStyleElement","rule","link","newStyle","useEffect","div","resizable","scrollbars","toolbar","menubar","location","status","features","htmlClasses","attr","bodyClasses","handleClose","checkClosed","observer","mutations","mutation","attrName","value","allDataAttrs","createPortal"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { WindowPortal } from './component';
2
+ export type { WindowPortalProps } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/window-portal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,77 @@
1
+ import { ReactNode } from 'react';
2
+ export interface WindowPortalProps {
3
+ /**
4
+ * Content to render in the new window
5
+ */
6
+ children: ReactNode;
7
+ /**
8
+ * Width of the new window in pixels
9
+ * @default 600
10
+ */
11
+ width?: number;
12
+ /**
13
+ * Height of the new window in pixels
14
+ * @default 400
15
+ */
16
+ height?: number;
17
+ /**
18
+ * Left position of the new window in pixels from the screen's left edge
19
+ * @default 200
20
+ */
21
+ left?: number;
22
+ /**
23
+ * Top position of the new window in pixels from the screen's top edge
24
+ * @default 200
25
+ */
26
+ top?: number;
27
+ /**
28
+ * Title of the new window
29
+ * @default ""
30
+ */
31
+ title?: string;
32
+ /**
33
+ * Whether to copy parent window's stylesheets to the new window
34
+ * @default true
35
+ */
36
+ copyStyles?: boolean;
37
+ /**
38
+ * Callback fired when the window is closed
39
+ */
40
+ onClose?: () => void;
41
+ /**
42
+ * Native window features configuration
43
+ */
44
+ windowFeatures?: {
45
+ /**
46
+ * Whether the window should be resizable
47
+ * @default true
48
+ */
49
+ resizable?: boolean;
50
+ /**
51
+ * Whether to show scrollbars
52
+ * @default true
53
+ */
54
+ scrollbars?: boolean;
55
+ /**
56
+ * Whether to show the toolbar
57
+ * @default false
58
+ */
59
+ toolbar?: boolean;
60
+ /**
61
+ * Whether to show the menubar
62
+ * @default false
63
+ */
64
+ menubar?: boolean;
65
+ /**
66
+ * Whether to show the location bar
67
+ * @default false
68
+ */
69
+ location?: boolean;
70
+ /**
71
+ * Whether to show the status bar
72
+ * @default false
73
+ */
74
+ status?: boolean;
75
+ };
76
+ }
77
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/window-portal/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,cAAc,CAAC,EAAE;QACf;;;WAGG;QACH,SAAS,CAAC,EAAE,OAAO,CAAC;QAEpB;;;WAGG;QACH,UAAU,CAAC,EAAE,OAAO,CAAC;QAErB;;;WAGG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAElB;;;WAGG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAElB;;;WAGG;QACH,QAAQ,CAAC,EAAE,OAAO,CAAC;QAEnB;;;WAGG;QACH,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;CACH"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { componentMetadata as r, getComponentsByCategory as t } from "./metadata.js";
2
2
  import { default as m } from "./components/utils/createSyntheticClickEvent.js";
3
- import { Affix as f, Alert as x, Anchor as s, App as l, AutoComplete as n, Avatar as i, BackTop as C, Calendar as c, Card as u, Carousel as T, Cascader as d, Col as g, ColorPicker as S, ConfigProvider as h, DatePicker as A, Descriptions as E, Divider as P, Drawer as b, Dropdown as R, Flex as k, FloatButton as D, Grid as I, InputNumber as L, Layout as O, List as B, Mentions as v, Menu as y, Pagination as N, Popconfirm as M, Progress as _, QRCode as w, Rate as U, Result as F, Row as W, Skeleton as V, Space as K, Statistic as q, Steps as z, Tabs as G, TimePicker as Q, Timeline as H, Transfer as j, TreeSelect as J, Typography as X, Watermark as Y, message as Z, notification as $, theme as ee, unstableSetRender as oe, version as re } from "antd";
3
+ import { Affix as f, Alert as x, Anchor as s, App as l, AutoComplete as n, Avatar as i, BackTop as C, Calendar as c, Card as u, Carousel as T, Cascader as d, Col as g, ColorPicker as S, ConfigProvider as h, DatePicker as A, Descriptions as E, Divider as P, Drawer as b, Dropdown as R, Flex as k, FloatButton as D, Grid as I, InputNumber as L, Layout as O, List as B, Mentions as v, Menu as y, Pagination as N, Popconfirm as M, Progress as w, QRCode as _, Rate as U, Result as W, Row as F, Skeleton as V, Space as K, Statistic as q, Steps as z, Tabs as G, TimePicker as Q, Timeline as H, Transfer as j, TreeSelect as J, Typography as X, Watermark as Y, message as Z, notification as $, theme as ee, unstableSetRender as oe, version as re } from "antd";
4
4
  import { DataTable as ae } from "./components/data-table/component.js";
5
5
  import { Select as pe } from "./components/select/component.js";
6
6
  import { Modal as xe } from "./components/modal/index.js";
@@ -16,9 +16,9 @@ import { ThemeContext as ke, useTheme as De } from "./components/theme-provider/
16
16
  import { ThemeContextProvider as Le } from "./components/theme-provider/context/provider.js";
17
17
  import { Split as Be, Splitter as ve } from "./components/splitter/component.js";
18
18
  import { Truncate as Ne } from "./components/truncate/component.js";
19
- import { DropdownMenu as _e } from "./components/dropdown-menu/component.js";
19
+ import { DropdownMenu as we } from "./components/dropdown-menu/component.js";
20
20
  import { DropdownMenuItem as Ue } from "./components/dropdown-menu/item.js";
21
- import { CommandPalette as We } from "./components/command-palette/component.js";
21
+ import { CommandPalette as Fe } from "./components/command-palette/component.js";
22
22
  import { KeyboardShortcut as Ke } from "./components/keyboard-shortcut/component.js";
23
23
  import { Transition as ze } from "./components/transition/component.js";
24
24
  import { DefaultUpload as Qe, Upload as He } from "./components/upload/component.js";
@@ -39,9 +39,9 @@ import { ScrollArea as Io } from "./components/scroll-area/component.js";
39
39
  import { Popover as Oo } from "./components/popover/component.js";
40
40
  import { Slider as vo } from "./components/slider/component.js";
41
41
  import { Tooltip as No } from "./components/tooltip/component.js";
42
- import { Breadcrumb as _o } from "./components/breadcrumb/component.js";
42
+ import { Breadcrumb as wo } from "./components/breadcrumb/component.js";
43
43
  import { BreadcrumbItem as Uo } from "./components/breadcrumb/item.js";
44
- import { useUniqueKeysTree as Wo } from "./components/tree/useUniqueKeysTree.js";
44
+ import { useUniqueKeysTree as Fo } from "./components/tree/useUniqueKeysTree.js";
45
45
  import { getUniqueKeysFromOriginals as Ko, processTreeData as qo } from "./components/tree/helpers.js";
46
46
  import { Tree as Go } from "./components/tree/components.js";
47
47
  import { Spin as Ho } from "./components/spin/component.js";
@@ -64,32 +64,33 @@ import { Button as Dr } from "./components/button/component.js";
64
64
  import { DSRoot as Lr } from "./components/ds-root/component.js";
65
65
  import { useDS as Br } from "./components/ds-root/hook.js";
66
66
  import { DragDrop as yr, DragDropRoot as Nr } from "./components/drag-drop/index.js";
67
- import { ColorSelect as _r } from "./components/color-select/component.js";
67
+ import { ColorSelect as wr } from "./components/color-select/component.js";
68
68
  import { Nav as Ur } from "./components/nav/index.js";
69
- import { ChoiceList as Wr } from "./components/choice-list/component.js";
69
+ import { ChoiceList as Fr } from "./components/choice-list/component.js";
70
70
  import { StatusIcon as Kr } from "./components/status-icon/component.js";
71
71
  import { Resizable as zr } from "./components/resizable/component.js";
72
72
  import { Combobox as Qr } from "./components/combobox/component.js";
73
73
  import { SelectTrigger as jr, SelectTriggerArrow as Jr, SelectTriggerClear as Xr, SelectTriggerContent as Yr, SelectTriggerRoot as Zr } from "./components/select-trigger/component.js";
74
74
  import { Loader as et } from "./components/loader/component.js";
75
- import { useForm as rt, useWatch as tt } from "antd/es/form/Form";
76
- import { useMessage as mt, useModal as pt, useToken as ft } from "./components/hooks/antd.js";
77
- import { default as st } from "antd/es/app/useApp";
78
- import { useAnimationsFinished as nt, useEnhancedEffect as it, useEventCallback as Ct, useLatestRef as ct } from "./components/hooks/base-ui.js";
79
- import { useControlledState as Tt } from "./components/hooks/useControlledState.js";
80
- import { useCharts as gt } from "./components/hooks/useCharts.js";
81
- import { useCSSVariables as ht } from "./components/hooks/useCSSVariables.js";
82
- import { useHover as Et } from "./components/hooks/useHover.js";
83
- import { useDraggable as bt } from "./components/hooks/useDraggable.js";
84
- import { BREAKPOINTS as kt, useBreakpoint as Dt } from "./components/hooks/useBreakpoint.js";
85
- import { useWindowSize as Lt } from "./components/hooks/useWindowSize.js";
86
- import { useElementSize as Bt, useResizeObserver as vt } from "./components/hooks/useResizeObserver.js";
87
- import { antdColorTokens as Nt, darkTheme as Mt, lightTheme as _t } from "./tokens/and-theme/tokens.js";
88
- import { categoricalChartColorKeys as Ut, categoricalChartColorTokens as Ft, categoricalChartsColors as Wt, chartColorTokens as Vt, rawChartColorTokens as Kt } from "./tokens/charts/palettes/cloudscape.js";
89
- import { COLORBREWER as zt } from "./tokens/charts/palettes/colorbrewer.js";
90
- import { tab10 as Qt, tab20 as Ht, tab20b as jt, tab20c as Jt } from "./tokens/charts/palettes/tableau.js";
91
- import { CATEGORICAL_PALETTES as Yt, CATEGORICAL_PALETTE_NAMES as Zt, SEQUENTIAL_PALETTES as $t, SEQUENTIAL_PALETTE_NAMES as ea, getAllCategoricalChartColors as oa, getAllSequentialChartColors as ra, getCategoricalChartColors as ta, getSequentialChartColors as aa } from "./tokens/charts/palettes/index.js";
92
- import { getColorsByTheme as pa, getTokensByTheme as fa, resolveColorTokens as xa } from "./tokens/utils.js";
75
+ import { WindowPortal as rt } from "./components/window-portal/component.js";
76
+ import { useForm as at, useWatch as mt } from "antd/es/form/Form";
77
+ import { useMessage as ft, useModal as xt, useToken as st } from "./components/hooks/antd.js";
78
+ import { default as nt } from "antd/es/app/useApp";
79
+ import { useAnimationsFinished as Ct, useEnhancedEffect as ct, useEventCallback as ut, useLatestRef as Tt } from "./components/hooks/base-ui.js";
80
+ import { useControlledState as gt } from "./components/hooks/useControlledState.js";
81
+ import { useCharts as ht } from "./components/hooks/useCharts.js";
82
+ import { useCSSVariables as Et } from "./components/hooks/useCSSVariables.js";
83
+ import { useHover as bt } from "./components/hooks/useHover.js";
84
+ import { useDraggable as kt } from "./components/hooks/useDraggable.js";
85
+ import { BREAKPOINTS as It, useBreakpoint as Lt } from "./components/hooks/useBreakpoint.js";
86
+ import { useWindowSize as Bt } from "./components/hooks/useWindowSize.js";
87
+ import { useElementSize as yt, useResizeObserver as Nt } from "./components/hooks/useResizeObserver.js";
88
+ import { antdColorTokens as wt, darkTheme as _t, lightTheme as Ut } from "./tokens/and-theme/tokens.js";
89
+ import { categoricalChartColorKeys as Ft, categoricalChartColorTokens as Vt, categoricalChartsColors as Kt, chartColorTokens as qt, rawChartColorTokens as zt } from "./tokens/charts/palettes/cloudscape.js";
90
+ import { COLORBREWER as Qt } from "./tokens/charts/palettes/colorbrewer.js";
91
+ import { tab10 as jt, tab20 as Jt, tab20b as Xt, tab20c as Yt } from "./tokens/charts/palettes/tableau.js";
92
+ import { CATEGORICAL_PALETTES as $t, CATEGORICAL_PALETTE_NAMES as ea, SEQUENTIAL_PALETTES as oa, SEQUENTIAL_PALETTE_NAMES as ra, getAllCategoricalChartColors as ta, getAllSequentialChartColors as aa, getCategoricalChartColors as ma, getSequentialChartColors as pa } from "./tokens/charts/palettes/index.js";
93
+ import { getColorsByTheme as xa, getTokensByTheme as sa, resolveColorTokens as la } from "./tokens/utils.js";
93
94
  export {
94
95
  f as Affix,
95
96
  x as Alert,
@@ -97,28 +98,28 @@ export {
97
98
  l as App,
98
99
  n as AutoComplete,
99
100
  i as Avatar,
100
- kt as BREAKPOINTS,
101
+ It as BREAKPOINTS,
101
102
  C as BackTop,
102
103
  Er as Badge,
103
- _o as Breadcrumb,
104
+ wo as Breadcrumb,
104
105
  Uo as BreadcrumbItem,
105
106
  Dr as Button,
106
- Yt as CATEGORICAL_PALETTES,
107
- Zt as CATEGORICAL_PALETTE_NAMES,
108
- zt as COLORBREWER,
107
+ $t as CATEGORICAL_PALETTES,
108
+ ea as CATEGORICAL_PALETTE_NAMES,
109
+ Qt as COLORBREWER,
109
110
  c as Calendar,
110
111
  u as Card,
111
112
  T as Carousel,
112
113
  d as Cascader,
113
114
  ce as Checkbox,
114
- Wr as ChoiceList,
115
+ Fr as ChoiceList,
115
116
  ir as CodeBlock,
116
117
  g as Col,
117
118
  gr as Collapse,
118
119
  S as ColorPicker,
119
- _r as ColorSelect,
120
+ wr as ColorSelect,
120
121
  Qr as Combobox,
121
- We as CommandPalette,
122
+ Fe as CommandPalette,
122
123
  h as ConfigProvider,
123
124
  Eo as DROPDOWN_COLLISION_AVOIDANCE,
124
125
  Lr as DSRoot,
@@ -131,7 +132,7 @@ export {
131
132
  Nr as DragDropRoot,
132
133
  b as Drawer,
133
134
  R as Dropdown,
134
- _e as DropdownMenu,
135
+ we as DropdownMenu,
135
136
  Ue as DropdownMenuItem,
136
137
  Jo as Empty,
137
138
  $o as Field,
@@ -156,15 +157,15 @@ export {
156
157
  M as Popconfirm,
157
158
  Oo as Popover,
158
159
  lr as PopupPanel,
159
- _ as Progress,
160
- w as QRCode,
160
+ w as Progress,
161
+ _ as QRCode,
161
162
  Rr as Radio,
162
163
  U as Rate,
163
164
  zr as Resizable,
164
- F as Result,
165
- W as Row,
166
- $t as SEQUENTIAL_PALETTES,
167
- ea as SEQUENTIAL_PALETTE_NAMES,
165
+ W as Result,
166
+ F as Row,
167
+ oa as SEQUENTIAL_PALETTES,
168
+ ra as SEQUENTIAL_PALETTE_NAMES,
168
169
  Io as ScrollArea,
169
170
  Te as Segmented,
170
171
  pe as Select,
@@ -206,75 +207,76 @@ export {
206
207
  He as Upload,
207
208
  xr as VerticalCollapsiblePanel,
208
209
  Y as Watermark,
210
+ rt as WindowPortal,
209
211
  fo as WithRenderProp,
210
- Nt as antdColorTokens,
212
+ wt as antdColorTokens,
211
213
  Ro as buildAntdPlacement,
212
- Ut as categoricalChartColorKeys,
213
- Ft as categoricalChartColorTokens,
214
- Wt as categoricalChartsColors,
214
+ Ft as categoricalChartColorKeys,
215
+ Vt as categoricalChartColorTokens,
216
+ Kt as categoricalChartsColors,
215
217
  go as changeThemeWithoutTransition,
216
- Vt as chartColorTokens,
218
+ qt as chartColorTokens,
217
219
  Ye as clsx,
218
220
  Ze as cn,
219
221
  r as componentMetadata,
220
222
  m as createSyntheticClickEvent,
221
223
  $e as cx,
222
- Mt as darkTheme,
223
- oa as getAllCategoricalChartColors,
224
- ra as getAllSequentialChartColors,
225
- ta as getCategoricalChartColors,
226
- pa as getColorsByTheme,
224
+ _t as darkTheme,
225
+ ta as getAllCategoricalChartColors,
226
+ aa as getAllSequentialChartColors,
227
+ ma as getCategoricalChartColors,
228
+ xa as getColorsByTheme,
227
229
  t as getComponentsByCategory,
228
230
  so as getReactElementProp,
229
- aa as getSequentialChartColors,
230
- fa as getTokensByTheme,
231
+ pa as getSequentialChartColors,
232
+ sa as getTokensByTheme,
231
233
  Ko as getUniqueKeysFromOriginals,
232
234
  to as isTracebackError,
233
235
  mo as isValidHexColor,
234
- _t as lightTheme,
236
+ Ut as lightTheme,
235
237
  no as mergeRefs,
236
238
  Z as message,
237
239
  ho as moveTypingCursorToEnd,
238
240
  $ as notification,
239
241
  ko as parseAntdPlacement,
240
242
  qo as processTreeData,
241
- Kt as rawChartColorTokens,
243
+ zt as rawChartColorTokens,
242
244
  oo as reactNodeToString,
243
- xa as resolveColorTokens,
244
- Qt as tab10,
245
- Ht as tab20,
246
- jt as tab20b,
247
- Jt as tab20c,
245
+ la as resolveColorTokens,
246
+ jt as tab10,
247
+ Jt as tab20,
248
+ Xt as tab20b,
249
+ Yt as tab20c,
248
250
  ee as theme,
249
251
  mr as toast,
250
252
  pr as toastManager,
251
253
  oe as unstableSetRender,
252
- nt as useAnimationsFinished,
254
+ Ct as useAnimationsFinished,
253
255
  Co as useAntdCssVarClassname,
254
- st as useApp,
255
- Dt as useBreakpoint,
256
- ht as useCSSVariables,
257
- gt as useCharts,
256
+ nt as useApp,
257
+ Lt as useBreakpoint,
258
+ Et as useCSSVariables,
259
+ ht as useCharts,
258
260
  co as useCls,
259
- Tt as useControlledState,
261
+ gt as useControlledState,
260
262
  Br as useDS,
261
- bt as useDraggable,
262
- Bt as useElementSize,
263
- it as useEnhancedEffect,
264
- Ct as useEventCallback,
265
- rt as useForm,
263
+ kt as useDraggable,
264
+ yt as useElementSize,
265
+ ct as useEnhancedEffect,
266
+ ut as useEventCallback,
267
+ at as useForm,
266
268
  uo as useGetPrefixCls,
267
- Et as useHover,
268
- ct as useLatestRef,
269
- mt as useMessage,
270
- pt as useModal,
271
- vt as useResizeObserver,
269
+ bt as useHover,
270
+ Tt as useLatestRef,
271
+ ft as useMessage,
272
+ xt as useModal,
273
+ Nt as useResizeObserver,
272
274
  De as useTheme,
273
- ft as useToken,
274
- Wo as useUniqueKeysTree,
275
+ st as useToken,
276
+ Fo as useUniqueKeysTree,
275
277
  Je as useUploadItemRender,
276
- tt as useWatch,
277
- Lt as useWindowSize,
278
+ mt as useWatch,
279
+ Bt as useWindowSize,
278
280
  re as version
279
281
  };
280
282
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -447,6 +447,14 @@ export declare const componentMetadata: {
447
447
  originalDocUrl: string;
448
448
  description: string;
449
449
  };
450
+ WindowPortal: {
451
+ name: string;
452
+ link: string;
453
+ base: "custom";
454
+ refinements: string[];
455
+ category: "Utility";
456
+ description: string;
457
+ };
450
458
  };
451
459
  /**
452
460
  * Get all components by category
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,SAAS,GACT,QAAQ,GACR,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,UAAU,GACV,SAAS,GACT,SAAS,CAAC;AAEd,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsqBe,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,uBAAuB,QAAO,MAAM,CAC/C,iBAAiB,EACjB,iBAAiB,EAAE,CA0BpB,CAAC"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,SAAS,GACT,QAAQ,GACR,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,UAAU,GACV,SAAS,GACT,SAAS,CAAC;AAEd,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyrBe,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,uBAAuB,QAAO,MAAM,CAC/C,iBAAiB,EACjB,iBAAiB,EAAE,CA0BpB,CAAC"}
package/dist/metadata.js CHANGED
@@ -642,6 +642,24 @@ const i = {
642
642
  originalDocUrl: "https://base-ui.com/react/components/vertical-collapsible-panel",
643
643
  // Assuming this kebab-case name for Base UI docs
644
644
  description: "A panel that can be collapsed or expanded vertically, often used in sidebars or for sectioning content."
645
+ },
646
+ WindowPortal: {
647
+ name: "WindowPortal",
648
+ link: "/window-portal",
649
+ base: "custom",
650
+ refinements: [
651
+ "Custom implementation using React's `createPortal` to render content in a separate browser window.",
652
+ "Automatically copies parent window styles (stylesheets and inline styles) to the new window for consistent theming.",
653
+ "Real-time theme synchronization using MutationObserver to detect and sync theme changes (light/dark mode) from parent to popup window.",
654
+ "Configurable window dimensions (width, height) and position (left, top).",
655
+ "Customizable window title and native window features (resizable, scrollbars, toolbar, menubar, etc.).",
656
+ "Proper cleanup handling: closes window on component unmount and triggers `onClose` callback when window is closed.",
657
+ "State synchronization: React state naturally syncs between parent and popup windows via portal mechanism.",
658
+ "Uses `windowReady` state to ensure MutationObserver is only set up after window is fully created.",
659
+ "Performance note: Rapid state updates may have slight latency due to React reconciliation across window boundaries."
660
+ ],
661
+ category: "Utility",
662
+ description: "Renders React components in a separate browser window while maintaining state synchronization and theme consistency with the parent window."
645
663
  }
646
664
  }, a = () => {
647
665
  const e = {