@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.
- package/dist/components/cmdk/index.d.ts +2 -2
- package/dist/components/combobox/component.js.map +1 -1
- package/dist/components/data-table/component.js +7 -7
- package/dist/components/data-table/component.js.map +1 -1
- package/dist/components/data-table/hooks.d.ts.map +1 -1
- package/dist/components/data-table/hooks.js +73 -61
- package/dist/components/data-table/hooks.js.map +1 -1
- package/dist/components/dropdown-menu/component.js +1 -1
- package/dist/components/dropdown-menu/component.js.map +1 -1
- package/dist/components/hooks/useResizable.d.ts +50 -0
- package/dist/components/hooks/useResizable.d.ts.map +1 -0
- package/dist/components/hooks/useResizable.js +148 -0
- package/dist/components/hooks/useResizable.js.map +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/popup-panel/component.d.ts +13 -1
- package/dist/components/popup-panel/component.d.ts.map +1 -1
- package/dist/components/popup-panel/component.js +134 -120
- package/dist/components/popup-panel/component.js.map +1 -1
- package/dist/components/popup-panel/utils.d.ts +10 -0
- package/dist/components/popup-panel/utils.d.ts.map +1 -0
- package/dist/components/popup-panel/utils.js +13 -0
- package/dist/components/popup-panel/utils.js.map +1 -0
- package/dist/components/resizable/component.d.ts +2 -8
- package/dist/components/resizable/component.d.ts.map +1 -1
- package/dist/components/resizable/component.js +250 -248
- package/dist/components/resizable/component.js.map +1 -1
- package/dist/components/toast/function.d.ts +8 -8
- package/dist/components/toast/function.d.ts.map +1 -1
- package/dist/components/toast/function.js.map +1 -1
- package/dist/components/tree/components.d.ts.map +1 -1
- package/dist/components/tree/components.js +50 -40
- package/dist/components/tree/components.js.map +1 -1
- package/dist/components/tree/style.css +1 -1
- package/dist/components/tree/types.d.ts +4 -0
- package/dist/components/tree/types.d.ts.map +1 -1
- package/dist/components/tree/useTreeCommon.d.ts +1 -0
- package/dist/components/tree/useTreeCommon.d.ts.map +1 -1
- package/dist/components/tree/useTreeCommon.js +21 -19
- package/dist/components/tree/useTreeCommon.js.map +1 -1
- package/dist/components/window-portal/component.d.ts +24 -0
- package/dist/components/window-portal/component.d.ts.map +1 -0
- package/dist/components/window-portal/component.js +120 -0
- package/dist/components/window-portal/component.js.map +1 -0
- package/dist/components/window-portal/index.d.ts +3 -0
- package/dist/components/window-portal/index.d.ts.map +1 -0
- package/dist/components/window-portal/types.d.ts +77 -0
- package/dist/components/window-portal/types.d.ts.map +1 -0
- package/dist/index.js +81 -79
- package/dist/index.js.map +1 -1
- package/dist/metadata.d.ts +8 -0
- package/dist/metadata.d.ts.map +1 -1
- package/dist/metadata.js +18 -0
- package/dist/metadata.js.map +1 -1
- package/dist/stats.html +1 -1
- 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 @@
|
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 {
|
|
76
|
-
import {
|
|
77
|
-
import {
|
|
78
|
-
import {
|
|
79
|
-
import {
|
|
80
|
-
import {
|
|
81
|
-
import {
|
|
82
|
-
import {
|
|
83
|
-
import {
|
|
84
|
-
import {
|
|
85
|
-
import {
|
|
86
|
-
import {
|
|
87
|
-
import {
|
|
88
|
-
import {
|
|
89
|
-
import {
|
|
90
|
-
import {
|
|
91
|
-
import {
|
|
92
|
-
import {
|
|
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
|
-
|
|
101
|
+
It as BREAKPOINTS,
|
|
101
102
|
C as BackTop,
|
|
102
103
|
Er as Badge,
|
|
103
|
-
|
|
104
|
+
wo as Breadcrumb,
|
|
104
105
|
Uo as BreadcrumbItem,
|
|
105
106
|
Dr as Button,
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
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
|
-
|
|
120
|
+
wr as ColorSelect,
|
|
120
121
|
Qr as Combobox,
|
|
121
|
-
|
|
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
|
-
|
|
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
|
-
|
|
160
|
-
|
|
160
|
+
w as Progress,
|
|
161
|
+
_ as QRCode,
|
|
161
162
|
Rr as Radio,
|
|
162
163
|
U as Rate,
|
|
163
164
|
zr as Resizable,
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
212
|
+
wt as antdColorTokens,
|
|
211
213
|
Ro as buildAntdPlacement,
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
214
|
+
Ft as categoricalChartColorKeys,
|
|
215
|
+
Vt as categoricalChartColorTokens,
|
|
216
|
+
Kt as categoricalChartsColors,
|
|
215
217
|
go as changeThemeWithoutTransition,
|
|
216
|
-
|
|
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
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
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
|
-
|
|
230
|
-
|
|
231
|
+
pa as getSequentialChartColors,
|
|
232
|
+
sa as getTokensByTheme,
|
|
231
233
|
Ko as getUniqueKeysFromOriginals,
|
|
232
234
|
to as isTracebackError,
|
|
233
235
|
mo as isValidHexColor,
|
|
234
|
-
|
|
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
|
-
|
|
243
|
+
zt as rawChartColorTokens,
|
|
242
244
|
oo as reactNodeToString,
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
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
|
-
|
|
254
|
+
Ct as useAnimationsFinished,
|
|
253
255
|
Co as useAntdCssVarClassname,
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
256
|
+
nt as useApp,
|
|
257
|
+
Lt as useBreakpoint,
|
|
258
|
+
Et as useCSSVariables,
|
|
259
|
+
ht as useCharts,
|
|
258
260
|
co as useCls,
|
|
259
|
-
|
|
261
|
+
gt as useControlledState,
|
|
260
262
|
Br as useDS,
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
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
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
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
|
-
|
|
274
|
-
|
|
275
|
+
st as useToken,
|
|
276
|
+
Fo as useUniqueKeysTree,
|
|
275
277
|
Je as useUploadItemRender,
|
|
276
|
-
|
|
277
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/metadata.d.ts
CHANGED
|
@@ -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
|
package/dist/metadata.d.ts.map
CHANGED
|
@@ -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
|
|
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 = {
|