@bioturing/components 0.46.0 → 0.46.1
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/code-block/component.js +58 -58
- package/dist/components/code-block/component.js.map +1 -1
- package/dist/components/collapse/component.js +6 -6
- package/dist/components/collapse/component.js.map +1 -1
- package/dist/components/command-palette/component.d.ts.map +1 -1
- package/dist/components/command-palette/component.js +30 -24
- package/dist/components/command-palette/component.js.map +1 -1
- package/dist/components/drag-drop/droppable.d.ts.map +1 -1
- package/dist/components/drag-drop/droppable.js +72 -68
- package/dist/components/drag-drop/droppable.js.map +1 -1
- package/dist/components/drag-drop/index.d.ts.map +1 -1
- package/dist/components/drag-drop/value.d.ts.map +1 -1
- package/dist/components/drag-drop/value.js +40 -56
- package/dist/components/drag-drop/value.js.map +1 -1
- package/dist/components/toast/component.d.ts.map +1 -1
- package/dist/components/toast/component.js +37 -35
- package/dist/components/toast/component.js.map +1 -1
- package/dist/stats.html +1 -1
- package/package.json +1 -1
|
@@ -1,82 +1,82 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsxs as
|
|
3
|
-
import { CheckIcon as
|
|
4
|
-
import { Highlight as
|
|
5
|
-
import { useState as i, useEffect as
|
|
6
|
-
import { ThemeProvider as
|
|
2
|
+
import { jsxs as U, jsx as e } from "react/jsx-runtime";
|
|
3
|
+
import { CheckIcon as V, CopyIcon as W } from "@bioturing/assets";
|
|
4
|
+
import { Highlight as X, themes as I } from "prism-react-renderer";
|
|
5
|
+
import { useState as i, useEffect as Y, useCallback as M } from "react";
|
|
6
|
+
import { ThemeProvider as Z } from "../theme-provider/component.js";
|
|
7
7
|
import './style.css';/* empty css */
|
|
8
|
-
import { Segmented as
|
|
9
|
-
import { useControlledState as
|
|
10
|
-
import { reactNodeToString as
|
|
11
|
-
import { useCls as
|
|
12
|
-
import { useTheme as
|
|
13
|
-
import { clsx as
|
|
8
|
+
import { Segmented as ee } from "../segmented/component.js";
|
|
9
|
+
import { useControlledState as oe } from "../hooks/useControlledState.js";
|
|
10
|
+
import { reactNodeToString as te } from "../utils/reactToString.js";
|
|
11
|
+
import { useCls as re } from "../utils/antdUtils.js";
|
|
12
|
+
import { useTheme as ne } from "../theme-provider/context/themeStore.js";
|
|
13
|
+
import { clsx as v } from "../utils/cn.js";
|
|
14
14
|
import { IconButton as ce } from "../icon-button/component.js";
|
|
15
15
|
import { ScrollArea as se } from "../scroll-area/component.js";
|
|
16
|
-
const
|
|
17
|
-
dark:
|
|
18
|
-
light:
|
|
16
|
+
const w = {
|
|
17
|
+
dark: I.vsDark,
|
|
18
|
+
light: I.vsLight
|
|
19
19
|
}, ye = ({
|
|
20
|
-
code:
|
|
20
|
+
code: g,
|
|
21
21
|
children: m,
|
|
22
22
|
// initial,
|
|
23
23
|
lang: d = "tsx",
|
|
24
|
-
className:
|
|
24
|
+
className: x,
|
|
25
25
|
options: t,
|
|
26
|
-
activeOption:
|
|
27
|
-
defaultActiveOption:
|
|
28
|
-
onActiveOptionChange:
|
|
26
|
+
activeOption: E,
|
|
27
|
+
defaultActiveOption: b = 0,
|
|
28
|
+
onActiveOptionChange: L,
|
|
29
29
|
copyText: p = "Copy",
|
|
30
|
-
copySuccessText:
|
|
30
|
+
copySuccessText: k = "Copied",
|
|
31
31
|
classNames: h,
|
|
32
32
|
maxHeight: c,
|
|
33
33
|
onCopy: u,
|
|
34
34
|
theme: s = "auto",
|
|
35
|
-
themeProviderProps:
|
|
36
|
-
scrollAreaProps:
|
|
37
|
-
...
|
|
35
|
+
themeProviderProps: O,
|
|
36
|
+
scrollAreaProps: j,
|
|
37
|
+
...A
|
|
38
38
|
}) => {
|
|
39
|
-
const [l,
|
|
40
|
-
x,
|
|
39
|
+
const [l, y] = oe(
|
|
41
40
|
E,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
L,
|
|
42
|
+
b
|
|
43
|
+
), [n, B] = i(g || ""), [F, P] = i(d), C = t && t.length > 0;
|
|
44
|
+
Y(() => {
|
|
45
45
|
if (C) {
|
|
46
46
|
const o = t[l]?.code || "", r = t[l]?.lang || d;
|
|
47
|
-
|
|
47
|
+
B(o), P(r);
|
|
48
48
|
}
|
|
49
49
|
}, [
|
|
50
|
-
v,
|
|
51
|
-
l,
|
|
52
50
|
g,
|
|
51
|
+
l,
|
|
52
|
+
b,
|
|
53
53
|
t,
|
|
54
54
|
d,
|
|
55
55
|
C,
|
|
56
|
-
|
|
56
|
+
y
|
|
57
57
|
]);
|
|
58
|
-
const [
|
|
59
|
-
const o = n ||
|
|
58
|
+
const [_, f] = i(p), [D, S] = i(!1), $ = M(() => {
|
|
59
|
+
const o = n || te(m);
|
|
60
60
|
try {
|
|
61
61
|
navigator.clipboard.writeText(o).then(() => {
|
|
62
|
-
f(
|
|
62
|
+
f(k), S(!0), u && u(o);
|
|
63
63
|
});
|
|
64
64
|
} catch {
|
|
65
65
|
f("Failed to copy");
|
|
66
66
|
}
|
|
67
|
-
}, [n, m,
|
|
68
|
-
f(p),
|
|
69
|
-
}, [p]), a =
|
|
67
|
+
}, [n, m, k, u]), q = M(() => {
|
|
68
|
+
f(p), S(!1);
|
|
69
|
+
}, [p]), a = re(), { theme: z } = ne(), N = () => /* @__PURE__ */ U(
|
|
70
70
|
"div",
|
|
71
71
|
{
|
|
72
|
-
className:
|
|
73
|
-
...
|
|
72
|
+
className: v(a("code-block"), x, h?.root),
|
|
73
|
+
...A,
|
|
74
74
|
children: [
|
|
75
|
-
C && /* @__PURE__ */ e("div", { className: a("code-block-header", h?.header), children: /* @__PURE__ */ e(
|
|
76
|
-
|
|
75
|
+
C && /* @__PURE__ */ e("div", { className: v(a("code-block-header"), h?.header), children: /* @__PURE__ */ e(
|
|
76
|
+
ee,
|
|
77
77
|
{
|
|
78
78
|
value: l,
|
|
79
|
-
onChange:
|
|
79
|
+
onChange: y,
|
|
80
80
|
options: t.map((o, r) => ({
|
|
81
81
|
label: o.label,
|
|
82
82
|
value: r
|
|
@@ -86,31 +86,31 @@ const M = {
|
|
|
86
86
|
/* @__PURE__ */ e("div", { className: a("code-block-copy"), children: /* @__PURE__ */ e(
|
|
87
87
|
ce,
|
|
88
88
|
{
|
|
89
|
-
onClick:
|
|
90
|
-
label:
|
|
91
|
-
onMouseLeave:
|
|
92
|
-
children:
|
|
89
|
+
onClick: $,
|
|
90
|
+
label: _,
|
|
91
|
+
onMouseLeave: q,
|
|
92
|
+
children: D ? /* @__PURE__ */ e(V, {}) : /* @__PURE__ */ e(W, {})
|
|
93
93
|
}
|
|
94
94
|
) }),
|
|
95
95
|
/* @__PURE__ */ e(
|
|
96
96
|
"div",
|
|
97
97
|
{
|
|
98
|
-
className: a("code-block-content", h?.content),
|
|
98
|
+
className: v(a("code-block-content"), h?.content),
|
|
99
99
|
style: {
|
|
100
100
|
maxHeight: c && (typeof c == "number" ? `${c}px` : c)
|
|
101
101
|
},
|
|
102
|
-
children: /* @__PURE__ */ e(se, { orientation: "both", ...
|
|
103
|
-
|
|
102
|
+
children: /* @__PURE__ */ e(se, { orientation: "both", ...j, children: n ? /* @__PURE__ */ e(
|
|
103
|
+
X,
|
|
104
104
|
{
|
|
105
|
-
language:
|
|
105
|
+
language: F,
|
|
106
106
|
code: n,
|
|
107
|
-
theme: s == "auto" ?
|
|
108
|
-
children: ({ className: o, style: r, tokens:
|
|
107
|
+
theme: s == "auto" ? w[z] : w[s],
|
|
108
|
+
children: ({ className: o, style: r, tokens: G, getLineProps: H, getTokenProps: J }) => /* @__PURE__ */ e(
|
|
109
109
|
"pre",
|
|
110
110
|
{
|
|
111
111
|
style: { ...r, backgroundColor: "transparent" },
|
|
112
112
|
className: o,
|
|
113
|
-
children:
|
|
113
|
+
children: G.map((T, K) => /* @__PURE__ */ e("div", { ...H({ line: T }), children: T.map((Q, R) => /* @__PURE__ */ e("span", { ...J({ token: Q }) }, R)) }, K))
|
|
114
114
|
}
|
|
115
115
|
)
|
|
116
116
|
}
|
|
@@ -120,13 +120,13 @@ const M = {
|
|
|
120
120
|
]
|
|
121
121
|
}
|
|
122
122
|
);
|
|
123
|
-
return s == "auto" ?
|
|
124
|
-
|
|
123
|
+
return s == "auto" ? N() : /* @__PURE__ */ e(
|
|
124
|
+
Z,
|
|
125
125
|
{
|
|
126
126
|
theme: s,
|
|
127
127
|
appendClassesToChildren: !0,
|
|
128
|
-
...
|
|
129
|
-
children:
|
|
128
|
+
...O,
|
|
129
|
+
children: N()
|
|
130
130
|
}
|
|
131
131
|
);
|
|
132
132
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/code-block/component.tsx"],"sourcesContent":["\"use client\";\nimport { CheckIcon, CopyIcon } from \"@bioturing/assets\";\nimport { Highlight, themes } from \"prism-react-renderer\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport { IconButton } from \"../icon-button\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { Segmented } from \"../segmented\";\nimport { ThemeProvider } from \"../theme-provider/component\";\nimport { clsx, reactNodeToString, useCls } from \"../utils\";\nimport type { CodeBlockProps } from \"./types\";\n\n// Import component-specific styles\nimport \"./style.css\";\nimport { useTheme } from \"../theme-provider\";\n\nconst THEME_MAP = {\n dark: themes.vsDark,\n light: themes.vsLight,\n};\n\nexport const CodeBlock = ({\n code,\n children,\n // initial,\n lang: defaultLang = \"tsx\",\n className,\n options,\n activeOption: controlledActiveOption,\n defaultActiveOption = 0,\n onActiveOptionChange,\n copyText = \"Copy\",\n copySuccessText = \"Copied\",\n classNames,\n maxHeight,\n onCopy,\n theme = \"auto\",\n themeProviderProps,\n scrollAreaProps,\n ...rest\n}: CodeBlockProps) => {\n const [activeOption, setActiveOption] = useControlledState(\n controlledActiveOption,\n onActiveOptionChange,\n defaultActiveOption\n );\n\n const [currentCode, setCurrentCode] = useState(code || \"\");\n\n const [lang, setLang] = useState(defaultLang);\n\n const hasOptions = options && options.length > 0;\n\n useEffect(() => {\n if (hasOptions) {\n const newCode = options[activeOption]?.code || \"\";\n const newLang = options[activeOption]?.lang || defaultLang;\n setCurrentCode(newCode);\n setLang(newLang);\n }\n }, [\n code,\n activeOption,\n defaultActiveOption,\n options,\n defaultLang,\n hasOptions,\n setActiveOption,\n ]);\n\n const [tooltipContent, setTooltipContent] = useState(copyText);\n const [copySuccess, setCopySuccess] = useState(false);\n\n const handleCopy = useCallback(() => {\n const codeContent = currentCode ? currentCode : reactNodeToString(children);\n try {\n navigator.clipboard.writeText(codeContent).then(() => {\n setTooltipContent(copySuccessText);\n setCopySuccess(true);\n if (onCopy) onCopy(codeContent);\n });\n } catch (_) {\n setTooltipContent(\"Failed to copy\");\n }\n }, [currentCode, children, copySuccessText, onCopy]);\n\n const handleMouseLeave = useCallback(() => {\n setTooltipContent(copyText);\n setCopySuccess(false);\n }, [copyText]);\n\n const cls = useCls();\n const { theme: currentThemeFromContext } = useTheme();\n\n const renderInner = () => (\n <div\n className={clsx(cls(\"code-block\"), className, classNames?.root)}\n {...rest}\n >\n {hasOptions && (\n <div className={cls(\"code-block-header\", classNames?.header)}>\n <Segmented\n value={activeOption}\n onChange={setActiveOption}\n options={options.map((opt, index) => ({\n label: opt.label,\n value: index,\n }))}\n />\n </div>\n )}\n <div className={cls(\"code-block-copy\")}>\n <IconButton\n onClick={handleCopy}\n label={tooltipContent}\n onMouseLeave={handleMouseLeave}\n >\n {copySuccess ? <CheckIcon /> : <CopyIcon />}\n </IconButton>\n </div>\n <div\n className={cls(\"code-block-content\", classNames?.content)}\n style={{\n maxHeight:\n maxHeight &&\n (typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight),\n }}\n >\n <ScrollArea orientation=\"both\" {...scrollAreaProps}>\n {currentCode ? (\n <Highlight\n language={lang}\n code={currentCode}\n theme={\n theme == \"auto\"\n ? THEME_MAP[currentThemeFromContext]\n : THEME_MAP[theme]\n }\n >\n {({ className, style, tokens, getLineProps, getTokenProps }) => (\n <pre\n style={{ ...style, backgroundColor: \"transparent\" }}\n className={className}\n >\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n ) : (\n children\n )}\n </ScrollArea>\n </div>\n </div>\n );\n\n return theme == \"auto\" ? (\n renderInner()\n ) : (\n <ThemeProvider\n theme={theme}\n appendClassesToChildren\n {...themeProviderProps}\n >\n {renderInner()}\n </ThemeProvider>\n );\n};\n"],"names":["THEME_MAP","themes","CodeBlock","code","children","defaultLang","className","options","controlledActiveOption","defaultActiveOption","onActiveOptionChange","copyText","copySuccessText","classNames","maxHeight","onCopy","theme","themeProviderProps","scrollAreaProps","rest","activeOption","setActiveOption","useControlledState","currentCode","setCurrentCode","useState","lang","setLang","hasOptions","useEffect","newCode","newLang","tooltipContent","setTooltipContent","copySuccess","setCopySuccess","handleCopy","useCallback","codeContent","reactNodeToString","handleMouseLeave","cls","useCls","currentThemeFromContext","useTheme","renderInner","jsxs","clsx","jsx","Segmented","opt","index","IconButton","CheckIcon","CopyIcon","ScrollArea","Highlight","style","tokens","getLineProps","getTokenProps","line","i","token","key","ThemeProvider"],"mappings":";;;;;;;;;;;;;;;AAgBA,MAAMA,IAAY;AAAA,EAChB,MAAMC,EAAO;AAAA,EACb,OAAOA,EAAO;AAChB,GAEaC,KAAY,CAAC;AAAA,EACxB,MAAAC;AAAA,EACA,UAAAC;AAAA;AAAA,EAEA,MAAMC,IAAc;AAAA,EACpB,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAcC;AAAA,EACd,qBAAAC,IAAsB;AAAA,EACtB,sBAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,iBAAAC,IAAkB;AAAA,EAClB,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,oBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,GAAGC;AACL,MAAsB;AACpB,QAAM,CAACC,GAAcC,CAAe,IAAIC;AAAA,IACtCd;AAAA,IACAE;AAAA,IACAD;AAAA,EAAA,GAGI,CAACc,GAAaC,CAAc,IAAIC,EAAStB,KAAQ,EAAE,GAEnD,CAACuB,GAAMC,CAAO,IAAIF,EAASpB,CAAW,GAEtCuB,IAAarB,KAAWA,EAAQ,SAAS;AAE/C,EAAAsB,EAAU,MAAM;AACd,QAAID,GAAY;AACd,YAAME,IAAUvB,EAAQa,CAAY,GAAG,QAAQ,IACzCW,IAAUxB,EAAQa,CAAY,GAAG,QAAQf;AAC/C,MAAAmB,EAAeM,CAAO,GACtBH,EAAQI,CAAO;AAAA,IACjB;AAAA,EACF,GAAG;AAAA,IACD5B;AAAA,IACAiB;AAAA,IACAX;AAAA,IACAF;AAAA,IACAF;AAAA,IACAuB;AAAA,IACAP;AAAA,EAAA,CACD;AAED,QAAM,CAACW,GAAgBC,CAAiB,IAAIR,EAASd,CAAQ,GACvD,CAACuB,GAAaC,CAAc,IAAIV,EAAS,EAAK,GAE9CW,IAAaC,EAAY,MAAM;AACnC,UAAMC,IAAcf,KAA4BgB,GAAkBnC,CAAQ;AAC1E,QAAI;AACF,gBAAU,UAAU,UAAUkC,CAAW,EAAE,KAAK,MAAM;AACpD,QAAAL,EAAkBrB,CAAe,GACjCuB,EAAe,EAAI,GACfpB,OAAeuB,CAAW;AAAA,MAChC,CAAC;AAAA,IACH,QAAY;AACV,MAAAL,EAAkB,gBAAgB;AAAA,IACpC;AAAA,EACF,GAAG,CAACV,GAAanB,GAAUQ,GAAiBG,CAAM,CAAC,GAE7CyB,IAAmBH,EAAY,MAAM;AACzC,IAAAJ,EAAkBtB,CAAQ,GAC1BwB,EAAe,EAAK;AAAA,EACtB,GAAG,CAACxB,CAAQ,CAAC,GAEP8B,IAAMC,GAAA,GACN,EAAE,OAAOC,EAAA,IAA4BC,GAAA,GAErCC,IAAc,MAClB,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,
|
|
1
|
+
{"version":3,"file":"component.js","sources":["../../../src/components/code-block/component.tsx"],"sourcesContent":["\"use client\";\nimport { CheckIcon, CopyIcon } from \"@bioturing/assets\";\nimport { Highlight, themes } from \"prism-react-renderer\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport { IconButton } from \"../icon-button\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { Segmented } from \"../segmented\";\nimport { ThemeProvider } from \"../theme-provider/component\";\nimport { clsx, reactNodeToString, useCls } from \"../utils\";\nimport type { CodeBlockProps } from \"./types\";\n\n// Import component-specific styles\nimport \"./style.css\";\nimport { useTheme } from \"../theme-provider\";\n\nconst THEME_MAP = {\n dark: themes.vsDark,\n light: themes.vsLight,\n};\n\nexport const CodeBlock = ({\n code,\n children,\n // initial,\n lang: defaultLang = \"tsx\",\n className,\n options,\n activeOption: controlledActiveOption,\n defaultActiveOption = 0,\n onActiveOptionChange,\n copyText = \"Copy\",\n copySuccessText = \"Copied\",\n classNames,\n maxHeight,\n onCopy,\n theme = \"auto\",\n themeProviderProps,\n scrollAreaProps,\n ...rest\n}: CodeBlockProps) => {\n const [activeOption, setActiveOption] = useControlledState(\n controlledActiveOption,\n onActiveOptionChange,\n defaultActiveOption\n );\n\n const [currentCode, setCurrentCode] = useState(code || \"\");\n\n const [lang, setLang] = useState(defaultLang);\n\n const hasOptions = options && options.length > 0;\n\n useEffect(() => {\n if (hasOptions) {\n const newCode = options[activeOption]?.code || \"\";\n const newLang = options[activeOption]?.lang || defaultLang;\n setCurrentCode(newCode);\n setLang(newLang);\n }\n }, [\n code,\n activeOption,\n defaultActiveOption,\n options,\n defaultLang,\n hasOptions,\n setActiveOption,\n ]);\n\n const [tooltipContent, setTooltipContent] = useState(copyText);\n const [copySuccess, setCopySuccess] = useState(false);\n\n const handleCopy = useCallback(() => {\n const codeContent = currentCode ? currentCode : reactNodeToString(children);\n try {\n navigator.clipboard.writeText(codeContent).then(() => {\n setTooltipContent(copySuccessText);\n setCopySuccess(true);\n if (onCopy) onCopy(codeContent);\n });\n } catch (_) {\n setTooltipContent(\"Failed to copy\");\n }\n }, [currentCode, children, copySuccessText, onCopy]);\n\n const handleMouseLeave = useCallback(() => {\n setTooltipContent(copyText);\n setCopySuccess(false);\n }, [copyText]);\n\n const cls = useCls();\n const { theme: currentThemeFromContext } = useTheme();\n\n const renderInner = () => (\n <div\n className={clsx(cls(\"code-block\"), className, classNames?.root)}\n {...rest}\n >\n {hasOptions && (\n <div className={clsx(cls(\"code-block-header\"), classNames?.header)}>\n <Segmented\n value={activeOption}\n onChange={setActiveOption}\n options={options.map((opt, index) => ({\n label: opt.label,\n value: index,\n }))}\n />\n </div>\n )}\n <div className={cls(\"code-block-copy\")}>\n <IconButton\n onClick={handleCopy}\n label={tooltipContent}\n onMouseLeave={handleMouseLeave}\n >\n {copySuccess ? <CheckIcon /> : <CopyIcon />}\n </IconButton>\n </div>\n <div\n className={clsx(cls(\"code-block-content\"), classNames?.content)}\n style={{\n maxHeight:\n maxHeight &&\n (typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight),\n }}\n >\n <ScrollArea orientation=\"both\" {...scrollAreaProps}>\n {currentCode ? (\n <Highlight\n language={lang}\n code={currentCode}\n theme={\n theme == \"auto\"\n ? THEME_MAP[currentThemeFromContext]\n : THEME_MAP[theme]\n }\n >\n {({ className, style, tokens, getLineProps, getTokenProps }) => (\n <pre\n style={{ ...style, backgroundColor: \"transparent\" }}\n className={className}\n >\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n ) : (\n children\n )}\n </ScrollArea>\n </div>\n </div>\n );\n\n return theme == \"auto\" ? (\n renderInner()\n ) : (\n <ThemeProvider\n theme={theme}\n appendClassesToChildren\n {...themeProviderProps}\n >\n {renderInner()}\n </ThemeProvider>\n );\n};\n"],"names":["THEME_MAP","themes","CodeBlock","code","children","defaultLang","className","options","controlledActiveOption","defaultActiveOption","onActiveOptionChange","copyText","copySuccessText","classNames","maxHeight","onCopy","theme","themeProviderProps","scrollAreaProps","rest","activeOption","setActiveOption","useControlledState","currentCode","setCurrentCode","useState","lang","setLang","hasOptions","useEffect","newCode","newLang","tooltipContent","setTooltipContent","copySuccess","setCopySuccess","handleCopy","useCallback","codeContent","reactNodeToString","handleMouseLeave","cls","useCls","currentThemeFromContext","useTheme","renderInner","jsxs","clsx","jsx","Segmented","opt","index","IconButton","CheckIcon","CopyIcon","ScrollArea","Highlight","style","tokens","getLineProps","getTokenProps","line","i","token","key","ThemeProvider"],"mappings":"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"}
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as a } from "react/jsx-runtime";
|
|
3
3
|
import { Collapse as r } from "antd";
|
|
4
|
-
import { forwardRef as
|
|
4
|
+
import { forwardRef as p } from "react";
|
|
5
5
|
import './style.css';/* empty css */
|
|
6
6
|
import { useCls as t } from "../utils/antdUtils.js";
|
|
7
|
-
import { clsx as
|
|
7
|
+
import { clsx as n } from "../utils/cn.js";
|
|
8
8
|
const m = (s, e) => {
|
|
9
|
-
const { className: o, ...l } = s,
|
|
9
|
+
const { className: o, ...l } = s, c = t();
|
|
10
10
|
return /* @__PURE__ */ a(
|
|
11
11
|
r,
|
|
12
12
|
{
|
|
13
13
|
ref: e,
|
|
14
|
-
className: n("collapse", o),
|
|
14
|
+
className: n(c("collapse"), o),
|
|
15
15
|
...l
|
|
16
16
|
}
|
|
17
17
|
);
|
|
18
|
-
}, i =
|
|
18
|
+
}, i = p(m), f = (s) => {
|
|
19
19
|
const { className: e, ...o } = s, l = t();
|
|
20
20
|
return console.warn(
|
|
21
21
|
"[bioturing-ds] Collapse.Panel is deprecated. Please use items prop instead."
|
|
22
22
|
), /* @__PURE__ */ a(
|
|
23
23
|
r.Panel,
|
|
24
24
|
{
|
|
25
|
-
className:
|
|
25
|
+
className: n(l("collapse-panel"), e),
|
|
26
26
|
...o
|
|
27
27
|
}
|
|
28
28
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/collapse/component.tsx"],"sourcesContent":["\"use client\";\nimport {\n Collapse as AntCollapse,\n type CollapseProps as AntCollapseProps,\n type CollapsePanelProps as AntCollapsePanelProps,\n} from \"antd\";\nimport { type ForwardedRef, forwardRef } from \"react\";\nimport { useCls, clsx } from \"../utils\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\n// Define props interface extending Ant Design's CollapseProps\nexport interface CollapseProps extends AntCollapseProps {}\n\n// Define props interface extending Ant Design's CollapsePanelProps\nexport interface CollapsePanelProps extends AntCollapsePanelProps {}\n\n// Create inner function with forwarded ref\nconst CollapseInner = (\n props: CollapseProps,\n ref: ForwardedRef<HTMLDivElement>\n) => {\n const { className, ...restProps } = props;\n const cls = useCls();\n return (\n <AntCollapse\n ref={ref}\n className={cls(\"collapse\", className)}\n {...restProps}\n />\n );\n};\n\n// Use forwardRef with type assertion\nconst MainCollapse = forwardRef(CollapseInner) as (\n props: CollapseProps & {\n ref?: React.ForwardedRef<HTMLDivElement>;\n }\n) => ReturnType<typeof CollapseInner>;\n\n// Create the Panel component (deprecated)\nconst Panel = (props: CollapsePanelProps) => {\n const { className, ...restProps } = props;\n const cls = useCls();\n console.warn(\n \"[bioturing-ds] Collapse.Panel is deprecated. Please use items prop instead.\"\n );\n return (\n <AntCollapse.Panel\n className={clsx(cls(\"collapse-panel\"), className)}\n {...restProps}\n />\n );\n};\n\n// Create the final component with Panel property\nexport const Collapse = Object.assign(MainCollapse, {\n Panel: Panel,\n});\n"],"names":["CollapseInner","props","ref","className","restProps","cls","useCls","jsx","AntCollapse","MainCollapse","forwardRef","Panel","
|
|
1
|
+
{"version":3,"file":"component.js","sources":["../../../src/components/collapse/component.tsx"],"sourcesContent":["\"use client\";\nimport {\n Collapse as AntCollapse,\n type CollapseProps as AntCollapseProps,\n type CollapsePanelProps as AntCollapsePanelProps,\n} from \"antd\";\nimport { type ForwardedRef, forwardRef } from \"react\";\nimport { useCls, clsx } from \"../utils\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\n// Define props interface extending Ant Design's CollapseProps\nexport interface CollapseProps extends AntCollapseProps {}\n\n// Define props interface extending Ant Design's CollapsePanelProps\nexport interface CollapsePanelProps extends AntCollapsePanelProps {}\n\n// Create inner function with forwarded ref\nconst CollapseInner = (\n props: CollapseProps,\n ref: ForwardedRef<HTMLDivElement>\n) => {\n const { className, ...restProps } = props;\n const cls = useCls();\n return (\n <AntCollapse\n ref={ref}\n className={clsx(cls(\"collapse\"), className)}\n {...restProps}\n />\n );\n};\n\n// Use forwardRef with type assertion\nconst MainCollapse = forwardRef(CollapseInner) as (\n props: CollapseProps & {\n ref?: React.ForwardedRef<HTMLDivElement>;\n }\n) => ReturnType<typeof CollapseInner>;\n\n// Create the Panel component (deprecated)\nconst Panel = (props: CollapsePanelProps) => {\n const { className, ...restProps } = props;\n const cls = useCls();\n console.warn(\n \"[bioturing-ds] Collapse.Panel is deprecated. Please use items prop instead.\"\n );\n return (\n <AntCollapse.Panel\n className={clsx(cls(\"collapse-panel\"), className)}\n {...restProps}\n />\n );\n};\n\n// Create the final component with Panel property\nexport const Collapse = Object.assign(MainCollapse, {\n Panel: Panel,\n});\n"],"names":["CollapseInner","props","ref","className","restProps","cls","useCls","jsx","AntCollapse","clsx","MainCollapse","forwardRef","Panel","Collapse"],"mappings":";;;;;;;AAmBA,MAAMA,IAAgB,CACpBC,GACAC,MACG;AACH,QAAM,EAAE,WAAAC,GAAW,GAAGC,EAAA,IAAcH,GAC9BI,IAAMC,EAAA;AACZ,SACE,gBAAAC;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,KAAAN;AAAA,MACA,WAAWO,EAAKJ,EAAI,UAAU,GAAGF,CAAS;AAAA,MACzC,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGV,GAGMM,IAAeC,EAAWX,CAAa,GAOvCY,IAAQ,CAACX,MAA8B;AAC3C,QAAM,EAAE,WAAAE,GAAW,GAAGC,EAAA,IAAcH,GAC9BI,IAAMC,EAAA;AACZ,iBAAQ;AAAA,IACN;AAAA,EAAA,GAGA,gBAAAC;AAAA,IAACC,EAAY;AAAA,IAAZ;AAAA,MACC,WAAWC,EAAKJ,EAAI,gBAAgB,GAAGF,CAAS;AAAA,MAC/C,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGV,GAGaS,IAAW,OAAO,OAAOH,GAAc;AAAA,EAClD,OAAAE;AACF,CAAC;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/command-palette/component.tsx"],"names":[],"mappings":"AACA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAM9D,OAAO,aAAa,CAAC;AAKrB,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAGF,KAAK,mBAAmB,GAAG,KAAK,CAAC,cAAc,CAC7C,OAAO,MAAM,CAAC,OAAO,CACtB,CAAC,QAAQ,CAAC,CAAC;AAEZ,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,0CAA0C;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC/B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACrC,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAoBD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/command-palette/component.tsx"],"names":[],"mappings":"AACA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAM9D,OAAO,aAAa,CAAC;AAKrB,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAGF,KAAK,mBAAmB,GAAG,KAAK,CAAC,cAAc,CAC7C,OAAO,MAAM,CAAC,OAAO,CACtB,CAAC,QAAQ,CAAC,CAAC;AAEZ,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,0CAA0C;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC/B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACrC,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAoBD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAsNxD,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as o, jsxs as
|
|
2
|
+
import { jsx as o, jsxs as u } from "react/jsx-runtime";
|
|
3
3
|
import R, { useEffect as V, useMemo as A, useCallback as D } from "react";
|
|
4
4
|
import { useStableCallback as v } from "@base-ui/utils/useStableCallback";
|
|
5
5
|
import { Autocomplete as i } from "@base-ui/react/autocomplete";
|
|
6
|
-
import { Dialog as
|
|
6
|
+
import { Dialog as p } from "@base-ui/react/dialog";
|
|
7
7
|
import { useDropdownMenu as j } from "../dropdown-menu/useDropdownMenu.js";
|
|
8
8
|
import './style.css';/* empty css */
|
|
9
9
|
import { DropdownMenuItem as x } from "../dropdown-menu/item.js";
|
|
@@ -13,7 +13,7 @@ import { useControlledState as F } from "../hooks/useControlledState.js";
|
|
|
13
13
|
import { useTheme as I } from "../theme-provider/context/themeStore.js";
|
|
14
14
|
import { Input as q } from "../input/component.js";
|
|
15
15
|
import { ScrollArea as z } from "../scroll-area/component.js";
|
|
16
|
-
import { clsx as
|
|
16
|
+
import { clsx as c } from "../utils/cn.js";
|
|
17
17
|
import { createRenderProp as H } from "../utils/renderProp.js";
|
|
18
18
|
const J = [
|
|
19
19
|
{ key: "k", metaKey: !0 },
|
|
@@ -35,19 +35,19 @@ const pe = ({
|
|
|
35
35
|
classNames: r,
|
|
36
36
|
nativeButton: $ = !0
|
|
37
37
|
}) => {
|
|
38
|
-
const n = B(), [G,
|
|
38
|
+
const n = B(), [G, s] = F(
|
|
39
39
|
m,
|
|
40
40
|
M,
|
|
41
41
|
E
|
|
42
42
|
), [y, b] = R.useState(""), C = v(() => {
|
|
43
|
-
|
|
43
|
+
s(!1);
|
|
44
44
|
}), k = v(() => {
|
|
45
|
-
|
|
45
|
+
s((e) => !e);
|
|
46
46
|
});
|
|
47
47
|
V(() => {
|
|
48
48
|
const e = (t) => {
|
|
49
49
|
f.find(
|
|
50
|
-
(
|
|
50
|
+
(d) => Q(t, d)
|
|
51
51
|
) && (t.preventDefault(), k());
|
|
52
52
|
};
|
|
53
53
|
return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
|
|
@@ -56,7 +56,7 @@ const pe = ({
|
|
|
56
56
|
items: P,
|
|
57
57
|
inCombobox: !0,
|
|
58
58
|
onOpenChange: (e) => {
|
|
59
|
-
e ||
|
|
59
|
+
e || s(!1);
|
|
60
60
|
},
|
|
61
61
|
classNames: {
|
|
62
62
|
group: r?.group,
|
|
@@ -86,7 +86,7 @@ const pe = ({
|
|
|
86
86
|
`${t}-${l}`
|
|
87
87
|
) : null,
|
|
88
88
|
[r?.item, C]
|
|
89
|
-
), N = D(() => /* @__PURE__ */
|
|
89
|
+
), N = D(() => /* @__PURE__ */ u(
|
|
90
90
|
i.Root,
|
|
91
91
|
{
|
|
92
92
|
items: S,
|
|
@@ -112,16 +112,16 @@ const pe = ({
|
|
|
112
112
|
)
|
|
113
113
|
}
|
|
114
114
|
) }),
|
|
115
|
-
/* @__PURE__ */
|
|
115
|
+
/* @__PURE__ */ u(z, { fadeEdges: !0, children: [
|
|
116
116
|
/* @__PURE__ */ o(
|
|
117
117
|
i.List,
|
|
118
118
|
{
|
|
119
119
|
className: n("dropdown-menu-list", "command-palette-list"),
|
|
120
|
-
children: (e, t) => /* @__PURE__ */
|
|
120
|
+
children: (e, t) => /* @__PURE__ */ u(
|
|
121
121
|
i.Group,
|
|
122
122
|
{
|
|
123
123
|
items: e.items,
|
|
124
|
-
className:
|
|
124
|
+
className: c(
|
|
125
125
|
n("dropdown-menu-group"),
|
|
126
126
|
t > 0 && "mt-2",
|
|
127
127
|
r?.group
|
|
@@ -130,14 +130,14 @@ const pe = ({
|
|
|
130
130
|
e.label && /* @__PURE__ */ o(
|
|
131
131
|
i.GroupLabel,
|
|
132
132
|
{
|
|
133
|
-
className:
|
|
133
|
+
className: c(
|
|
134
134
|
n("dropdown-menu-header"),
|
|
135
135
|
r?.groupLabel
|
|
136
136
|
),
|
|
137
137
|
children: /* @__PURE__ */ o("span", { children: e.label })
|
|
138
138
|
}
|
|
139
139
|
),
|
|
140
|
-
/* @__PURE__ */ o(i.Collection, { children: (l,
|
|
140
|
+
/* @__PURE__ */ o(i.Collection, { children: (l, d) => L(l, t, d) })
|
|
141
141
|
]
|
|
142
142
|
},
|
|
143
143
|
`group-${t}`
|
|
@@ -163,7 +163,7 @@ const pe = ({
|
|
|
163
163
|
y,
|
|
164
164
|
r
|
|
165
165
|
]), O = {
|
|
166
|
-
className:
|
|
166
|
+
className: c(
|
|
167
167
|
n("command-palette-trigger"),
|
|
168
168
|
r?.trigger,
|
|
169
169
|
K
|
|
@@ -171,24 +171,30 @@ const pe = ({
|
|
|
171
171
|
render: (e, t) => H(a, e, t),
|
|
172
172
|
nativeButton: $
|
|
173
173
|
};
|
|
174
|
-
return /* @__PURE__ */
|
|
175
|
-
a && /* @__PURE__ */ o(
|
|
176
|
-
/* @__PURE__ */
|
|
174
|
+
return /* @__PURE__ */ u(p.Root, { open: G, onOpenChange: s, modal: !0, children: [
|
|
175
|
+
a && /* @__PURE__ */ o(p.Trigger, { ...O }),
|
|
176
|
+
/* @__PURE__ */ u(p.Portal, { children: [
|
|
177
177
|
/* @__PURE__ */ o(
|
|
178
|
-
|
|
178
|
+
p.Backdrop,
|
|
179
179
|
{
|
|
180
|
-
className: n("command-palette-overlay", r?.mask)
|
|
180
|
+
className: c(n("command-palette-overlay"), r?.mask)
|
|
181
181
|
}
|
|
182
182
|
),
|
|
183
183
|
/* @__PURE__ */ o(
|
|
184
|
-
|
|
184
|
+
p.Popup,
|
|
185
185
|
{
|
|
186
|
-
className:
|
|
187
|
-
"command-palette-content",
|
|
186
|
+
className: c(
|
|
187
|
+
n("command-palette-content"),
|
|
188
188
|
K,
|
|
189
189
|
r?.content
|
|
190
190
|
),
|
|
191
|
-
children: /* @__PURE__ */ o(
|
|
191
|
+
children: /* @__PURE__ */ o(
|
|
192
|
+
"div",
|
|
193
|
+
{
|
|
194
|
+
className: c(n("command-palette"), T, r?.root),
|
|
195
|
+
children: N()
|
|
196
|
+
}
|
|
197
|
+
)
|
|
192
198
|
}
|
|
193
199
|
)
|
|
194
200
|
] })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../../src/components/command-palette/component.tsx"],"sourcesContent":["\"use client\";\nimport React, { useCallback, useEffect, useMemo } from \"react\";\nimport { useStableCallback } from \"@base-ui/utils/useStableCallback\";\nimport { Autocomplete } from \"@base-ui/react/autocomplete\";\nimport { Dialog } from \"@base-ui/react/dialog\";\nimport { DropdownMenuItemType } from \"../dropdown-menu/types\";\nimport { useDropdownMenu } from \"../dropdown-menu/useDropdownMenu\";\nimport { useControlledState } from \"../hooks\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { Input } from \"../input\";\nimport { clsx, useCls, createRenderProp } from \"../utils\";\nimport \"./style.css\";\nimport { useTheme } from \"../theme-provider\";\nimport { DropdownMenuItem } from \"../dropdown-menu/item\";\nimport { DropdownMenuDivider } from \"../dropdown-menu/divider\";\n\nexport type CommandPaletteShortcut = {\n key: string;\n metaKey?: boolean;\n ctrlKey?: boolean;\n altKey?: boolean;\n shiftKey?: boolean;\n};\n\n// Extract the render prop type from Dialog.Trigger for proper typing\ntype DialogTriggerRender = React.ComponentProps<\n typeof Dialog.Trigger\n>[\"render\"];\n\nexport interface CommandPaletteProps {\n /** Optional trigger element - if provided, renders a Dialog.Trigger */\n children?: DialogTriggerRender;\n /** Whether the command palette is open */\n open?: boolean;\n /** Callback fired when the open state changes */\n onOpenChange?: (open: boolean) => void;\n /**\n * Default open state\n */\n defaultOpen?: boolean;\n /** Items to display in the command palette */\n items?: DropdownMenuItemType[];\n /** Keyboard shortcuts to open the palette */\n shortcuts?: CommandPaletteShortcut[];\n /** Placeholder text for the search input */\n placeholder?: string;\n /** Text to show when no results are found */\n emptyText?: string;\n /** Accessible label for the command palette */\n label?: string;\n /** Additional CSS class names */\n className?: string;\n classNames?: {\n trigger?: string;\n root?: string;\n mask?: string;\n content?: string;\n group?: string;\n item?: string;\n groupLabel?: string;\n };\n /**\n * Whether the trigger should act as a native button element.\n * Set to false when using non-button elements as trigger\n * to suppress Base UI warnings and remove native button semantics.\n * @default true\n */\n nativeButton?: boolean;\n}\n\nconst defaultShortcuts: CommandPaletteShortcut[] = [\n { key: \"k\", metaKey: true },\n { key: \"k\", ctrlKey: true },\n];\n\nfunction matchesShortcut(\n event: KeyboardEvent,\n shortcut: CommandPaletteShortcut\n): boolean {\n return (\n event.key.toLowerCase() === shortcut.key.toLowerCase() &&\n !!event.metaKey === !!shortcut.metaKey &&\n !!event.ctrlKey === !!shortcut.ctrlKey &&\n !!event.altKey === !!shortcut.altKey &&\n !!event.shiftKey === !!shortcut.shiftKey\n );\n}\n\nexport const CommandPalette: React.FC<CommandPaletteProps> = ({\n children,\n open,\n onOpenChange,\n defaultOpen = false,\n items = [],\n shortcuts = defaultShortcuts,\n placeholder = \"Type a command or search...\",\n emptyText = \"No results found.\",\n className,\n classNames,\n nativeButton = true,\n}) => {\n const cls = useCls();\n const [actualOpen, setActualOpen] = useControlledState(\n open,\n onOpenChange,\n defaultOpen\n );\n const [searchValue, setSearchValue] = React.useState(\"\");\n\n // Stable callback for closing the palette\n const handleClose = useStableCallback(() => {\n setActualOpen(false);\n });\n\n // Stable callback for toggling (uses functional setState to avoid stale closures)\n const handleToggle = useStableCallback(() => {\n setActualOpen((prev) => !prev);\n });\n\n // Set up keyboard shortcuts\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const matchingShortcut = shortcuts.find((shortcut) =>\n matchesShortcut(event, shortcut)\n );\n\n if (matchingShortcut) {\n event.preventDefault();\n handleToggle();\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [shortcuts, handleToggle]);\n\n const { itemGroups } = useDropdownMenu({\n items,\n inCombobox: true,\n onOpenChange: (open) => {\n if (!open) {\n setActualOpen(false);\n }\n },\n classNames: {\n group: classNames?.group,\n groupLabel: classNames?.groupLabel,\n item: classNames?.item,\n },\n });\n\n // Transform itemGroups into autocomplete group structure\n const autocompleteGroups = useMemo(() => {\n const groups = itemGroups.map((group) => ({\n label: group.label || \"\",\n items: group.items,\n }));\n return groups;\n }, [itemGroups]);\n\n const { className: themeClassName } = useTheme();\n\n const renderMenuItem = useCallback(\n (item: DropdownMenuItemType, groupIndex: number, itemIndex: number) => {\n if (item.type === \"item\") {\n return (\n <DropdownMenuItem\n key={`${groupIndex}-${itemIndex}`}\n item={item}\n inCombobox={true}\n afterSelect={handleClose}\n classNames={{\n item: classNames?.item,\n }}\n />\n );\n } else if (item.type === \"divider\") {\n return (\n <DropdownMenuDivider\n key={`${groupIndex}-${itemIndex}`}\n inCombobox={true}\n />\n );\n }\n return null;\n },\n [classNames?.item, handleClose]\n );\n\n const renderMenuInner = useCallback(() => {\n return (\n <Autocomplete.Root\n items={autocompleteGroups}\n onValueChange={(value) => setSearchValue(value)}\n itemToStringValue={(item) =>\n item.type == \"item\" ? String(item.key) : \"\"\n }\n open={true}\n inline\n modal={false}\n >\n <div className={cls(\"command-palette-search-wrapper\")}>\n <Autocomplete.Input\n render={({ ref, ...rest }) => (\n <Input\n placeholder={placeholder}\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n className={cls(\"command-palette-search\")}\n autoFocus\n {...rest}\n />\n )}\n />\n </div>\n <ScrollArea fadeEdges>\n <Autocomplete.List\n className={cls(\"dropdown-menu-list\", \"command-palette-list\")}\n >\n {(group, groupIndex) => (\n <Autocomplete.Group\n key={`group-${groupIndex}`}\n items={group.items}\n className={clsx(\n cls(\"dropdown-menu-group\"),\n groupIndex > 0 && \"mt-2\",\n classNames?.group\n )}\n >\n {group.label && (\n <Autocomplete.GroupLabel\n className={clsx(\n cls(\"dropdown-menu-header\"),\n classNames?.groupLabel\n )}\n >\n <span>{group.label}</span>\n </Autocomplete.GroupLabel>\n )}\n <Autocomplete.Collection>\n {(item, itemIndex) =>\n renderMenuItem(item, groupIndex, itemIndex)\n }\n </Autocomplete.Collection>\n </Autocomplete.Group>\n )}\n </Autocomplete.List>\n <Autocomplete.Empty\n className={cls(\"dropdown-menu-empty\", \"command-palette-empty\")}\n >\n {emptyText}\n </Autocomplete.Empty>\n </ScrollArea>\n </Autocomplete.Root>\n );\n }, [\n autocompleteGroups,\n cls,\n emptyText,\n placeholder,\n renderMenuItem,\n searchValue,\n classNames,\n ]);\n\n const commonTriggerProps: {\n className: string;\n render: DialogTriggerRender;\n nativeButton: boolean;\n } = {\n className: clsx(\n cls(\"command-palette-trigger\"),\n classNames?.trigger,\n themeClassName\n ),\n render: (props, state) => createRenderProp(children, props, state),\n nativeButton,\n };\n\n return (\n <Dialog.Root open={actualOpen} onOpenChange={setActualOpen} modal={true}>\n {children && <Dialog.Trigger {...commonTriggerProps} />}\n <Dialog.Portal>\n <Dialog.Backdrop\n className={cls(\"command-palette-overlay\", classNames?.mask)}\n />\n <Dialog.Popup\n className={cls(\n \"command-palette-content\",\n themeClassName,\n classNames?.content\n )}\n >\n <div className={cls(\"command-palette\", className, classNames?.root)}>\n {renderMenuInner()}\n </div>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n"],"names":["defaultShortcuts","matchesShortcut","event","shortcut","CommandPalette","children","open","onOpenChange","defaultOpen","items","shortcuts","placeholder","emptyText","className","classNames","nativeButton","cls","useCls","actualOpen","setActualOpen","useControlledState","searchValue","setSearchValue","React","handleClose","useStableCallback","handleToggle","prev","useEffect","handleKeyDown","itemGroups","useDropdownMenu","autocompleteGroups","useMemo","group","themeClassName","useTheme","renderMenuItem","useCallback","item","groupIndex","itemIndex","jsx","DropdownMenuItem","DropdownMenuDivider","renderMenuInner","jsxs","Autocomplete","value","ref","rest","Input","e","ScrollArea","clsx","commonTriggerProps","props","state","createRenderProp","Dialog"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component.js","sources":["../../../src/components/command-palette/component.tsx"],"sourcesContent":["\"use client\";\nimport React, { useCallback, useEffect, useMemo } from \"react\";\nimport { useStableCallback } from \"@base-ui/utils/useStableCallback\";\nimport { Autocomplete } from \"@base-ui/react/autocomplete\";\nimport { Dialog } from \"@base-ui/react/dialog\";\nimport { DropdownMenuItemType } from \"../dropdown-menu/types\";\nimport { useDropdownMenu } from \"../dropdown-menu/useDropdownMenu\";\nimport { useControlledState } from \"../hooks\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { Input } from \"../input\";\nimport { clsx, useCls, createRenderProp } from \"../utils\";\nimport \"./style.css\";\nimport { useTheme } from \"../theme-provider\";\nimport { DropdownMenuItem } from \"../dropdown-menu/item\";\nimport { DropdownMenuDivider } from \"../dropdown-menu/divider\";\n\nexport type CommandPaletteShortcut = {\n key: string;\n metaKey?: boolean;\n ctrlKey?: boolean;\n altKey?: boolean;\n shiftKey?: boolean;\n};\n\n// Extract the render prop type from Dialog.Trigger for proper typing\ntype DialogTriggerRender = React.ComponentProps<\n typeof Dialog.Trigger\n>[\"render\"];\n\nexport interface CommandPaletteProps {\n /** Optional trigger element - if provided, renders a Dialog.Trigger */\n children?: DialogTriggerRender;\n /** Whether the command palette is open */\n open?: boolean;\n /** Callback fired when the open state changes */\n onOpenChange?: (open: boolean) => void;\n /**\n * Default open state\n */\n defaultOpen?: boolean;\n /** Items to display in the command palette */\n items?: DropdownMenuItemType[];\n /** Keyboard shortcuts to open the palette */\n shortcuts?: CommandPaletteShortcut[];\n /** Placeholder text for the search input */\n placeholder?: string;\n /** Text to show when no results are found */\n emptyText?: string;\n /** Accessible label for the command palette */\n label?: string;\n /** Additional CSS class names */\n className?: string;\n classNames?: {\n trigger?: string;\n root?: string;\n mask?: string;\n content?: string;\n group?: string;\n item?: string;\n groupLabel?: string;\n };\n /**\n * Whether the trigger should act as a native button element.\n * Set to false when using non-button elements as trigger\n * to suppress Base UI warnings and remove native button semantics.\n * @default true\n */\n nativeButton?: boolean;\n}\n\nconst defaultShortcuts: CommandPaletteShortcut[] = [\n { key: \"k\", metaKey: true },\n { key: \"k\", ctrlKey: true },\n];\n\nfunction matchesShortcut(\n event: KeyboardEvent,\n shortcut: CommandPaletteShortcut\n): boolean {\n return (\n event.key.toLowerCase() === shortcut.key.toLowerCase() &&\n !!event.metaKey === !!shortcut.metaKey &&\n !!event.ctrlKey === !!shortcut.ctrlKey &&\n !!event.altKey === !!shortcut.altKey &&\n !!event.shiftKey === !!shortcut.shiftKey\n );\n}\n\nexport const CommandPalette: React.FC<CommandPaletteProps> = ({\n children,\n open,\n onOpenChange,\n defaultOpen = false,\n items = [],\n shortcuts = defaultShortcuts,\n placeholder = \"Type a command or search...\",\n emptyText = \"No results found.\",\n className,\n classNames,\n nativeButton = true,\n}) => {\n const cls = useCls();\n const [actualOpen, setActualOpen] = useControlledState(\n open,\n onOpenChange,\n defaultOpen\n );\n const [searchValue, setSearchValue] = React.useState(\"\");\n\n // Stable callback for closing the palette\n const handleClose = useStableCallback(() => {\n setActualOpen(false);\n });\n\n // Stable callback for toggling (uses functional setState to avoid stale closures)\n const handleToggle = useStableCallback(() => {\n setActualOpen((prev) => !prev);\n });\n\n // Set up keyboard shortcuts\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const matchingShortcut = shortcuts.find((shortcut) =>\n matchesShortcut(event, shortcut)\n );\n\n if (matchingShortcut) {\n event.preventDefault();\n handleToggle();\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [shortcuts, handleToggle]);\n\n const { itemGroups } = useDropdownMenu({\n items,\n inCombobox: true,\n onOpenChange: (open) => {\n if (!open) {\n setActualOpen(false);\n }\n },\n classNames: {\n group: classNames?.group,\n groupLabel: classNames?.groupLabel,\n item: classNames?.item,\n },\n });\n\n // Transform itemGroups into autocomplete group structure\n const autocompleteGroups = useMemo(() => {\n const groups = itemGroups.map((group) => ({\n label: group.label || \"\",\n items: group.items,\n }));\n return groups;\n }, [itemGroups]);\n\n const { className: themeClassName } = useTheme();\n\n const renderMenuItem = useCallback(\n (item: DropdownMenuItemType, groupIndex: number, itemIndex: number) => {\n if (item.type === \"item\") {\n return (\n <DropdownMenuItem\n key={`${groupIndex}-${itemIndex}`}\n item={item}\n inCombobox={true}\n afterSelect={handleClose}\n classNames={{\n item: classNames?.item,\n }}\n />\n );\n } else if (item.type === \"divider\") {\n return (\n <DropdownMenuDivider\n key={`${groupIndex}-${itemIndex}`}\n inCombobox={true}\n />\n );\n }\n return null;\n },\n [classNames?.item, handleClose]\n );\n\n const renderMenuInner = useCallback(() => {\n return (\n <Autocomplete.Root\n items={autocompleteGroups}\n onValueChange={(value) => setSearchValue(value)}\n itemToStringValue={(item) =>\n item.type == \"item\" ? String(item.key) : \"\"\n }\n open={true}\n inline\n modal={false}\n >\n <div className={cls(\"command-palette-search-wrapper\")}>\n <Autocomplete.Input\n render={({ ref, ...rest }) => (\n <Input\n placeholder={placeholder}\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n className={cls(\"command-palette-search\")}\n autoFocus\n {...rest}\n />\n )}\n />\n </div>\n <ScrollArea fadeEdges>\n <Autocomplete.List\n className={cls(\"dropdown-menu-list\", \"command-palette-list\")}\n >\n {(group, groupIndex) => (\n <Autocomplete.Group\n key={`group-${groupIndex}`}\n items={group.items}\n className={clsx(\n cls(\"dropdown-menu-group\"),\n groupIndex > 0 && \"mt-2\",\n classNames?.group\n )}\n >\n {group.label && (\n <Autocomplete.GroupLabel\n className={clsx(\n cls(\"dropdown-menu-header\"),\n classNames?.groupLabel\n )}\n >\n <span>{group.label}</span>\n </Autocomplete.GroupLabel>\n )}\n <Autocomplete.Collection>\n {(item, itemIndex) =>\n renderMenuItem(item, groupIndex, itemIndex)\n }\n </Autocomplete.Collection>\n </Autocomplete.Group>\n )}\n </Autocomplete.List>\n <Autocomplete.Empty\n className={cls(\"dropdown-menu-empty\", \"command-palette-empty\")}\n >\n {emptyText}\n </Autocomplete.Empty>\n </ScrollArea>\n </Autocomplete.Root>\n );\n }, [\n autocompleteGroups,\n cls,\n emptyText,\n placeholder,\n renderMenuItem,\n searchValue,\n classNames,\n ]);\n\n const commonTriggerProps: {\n className: string;\n render: DialogTriggerRender;\n nativeButton: boolean;\n } = {\n className: clsx(\n cls(\"command-palette-trigger\"),\n classNames?.trigger,\n themeClassName\n ),\n render: (props, state) => createRenderProp(children, props, state),\n nativeButton,\n };\n\n return (\n <Dialog.Root open={actualOpen} onOpenChange={setActualOpen} modal={true}>\n {children && <Dialog.Trigger {...commonTriggerProps} />}\n <Dialog.Portal>\n <Dialog.Backdrop\n className={clsx(cls(\"command-palette-overlay\"), classNames?.mask)}\n />\n <Dialog.Popup\n className={clsx(\n cls(\"command-palette-content\"),\n themeClassName,\n classNames?.content\n )}\n >\n <div\n className={clsx(cls(\"command-palette\"), className, classNames?.root)}\n >\n {renderMenuInner()}\n </div>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n"],"names":["defaultShortcuts","matchesShortcut","event","shortcut","CommandPalette","children","open","onOpenChange","defaultOpen","items","shortcuts","placeholder","emptyText","className","classNames","nativeButton","cls","useCls","actualOpen","setActualOpen","useControlledState","searchValue","setSearchValue","React","handleClose","useStableCallback","handleToggle","prev","useEffect","handleKeyDown","itemGroups","useDropdownMenu","autocompleteGroups","useMemo","group","themeClassName","useTheme","renderMenuItem","useCallback","item","groupIndex","itemIndex","jsx","DropdownMenuItem","DropdownMenuDivider","renderMenuInner","jsxs","Autocomplete","value","ref","rest","Input","e","ScrollArea","clsx","commonTriggerProps","props","state","createRenderProp","Dialog"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"droppable.d.ts","sourceRoot":"","sources":["../../../src/components/drag-drop/droppable.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAiB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"droppable.d.ts","sourceRoot":"","sources":["../../../src/components/drag-drop/droppable.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAiB,MAAM,SAAS,CAAC;AAkB3E;;;GAGG;AACH,QAAA,MAAM,cAAc,GAAI,CAAC,SAAS,IAAI,GAAG,IAAI,EAAE,CAAC,SAAS,OAAO,GAAG,KAAK,EAAE,qKAiBvE,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,SAiG9B,CAAC;AAEF,eAAO,MAAM,SAAS,EAA2B,OAAO,cAAc,CAAC"}
|