@neuronection/assistant-ui 0.3.0 → 0.5.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/CHANGELOG.md +43 -0
- package/README.md +2 -0
- package/dist/ai-actions-dropdown.d.ts +29 -0
- package/dist/ai-actions-dropdown.js +3 -0
- package/dist/ai-actions-dropdown.js.map +1 -0
- package/dist/ai-button.d.ts +22 -0
- package/dist/ai-button.js +3 -0
- package/dist/ai-button.js.map +1 -0
- package/dist/breadcrumbs.d.ts +24 -0
- package/dist/breadcrumbs.js +3 -0
- package/dist/breadcrumbs.js.map +1 -0
- package/dist/chip-list.d.ts +1 -1
- package/dist/chip-list.js +1 -1
- package/dist/{chunk-TJGX27YO.js → chunk-34NO2UOB.js} +4 -4
- package/dist/chunk-34NO2UOB.js.map +1 -0
- package/dist/{chunk-5X3RYDPC.js → chunk-5LRRVD27.js} +4 -4
- package/dist/chunk-5LRRVD27.js.map +1 -0
- package/dist/{chunk-LEDQQBVV.js → chunk-75QQR2VT.js} +4 -4
- package/dist/{chunk-LEDQQBVV.js.map → chunk-75QQR2VT.js.map} +1 -1
- package/dist/{chunk-N5KQRHXU.js → chunk-BE3XFZWU.js} +3 -3
- package/dist/{chunk-N5KQRHXU.js.map → chunk-BE3XFZWU.js.map} +1 -1
- package/dist/{chunk-XLD2BPTT.js → chunk-BN3YHYYL.js} +3 -2
- package/dist/chunk-BN3YHYYL.js.map +1 -0
- package/dist/{chunk-GPIN2ITX.js → chunk-BUPMDOVL.js} +25 -8
- package/dist/chunk-BUPMDOVL.js.map +1 -0
- package/dist/chunk-BWPNEQ3T.js +92 -0
- package/dist/chunk-BWPNEQ3T.js.map +1 -0
- package/dist/chunk-CZ2BL2ZL.js +89 -0
- package/dist/chunk-CZ2BL2ZL.js.map +1 -0
- package/dist/{chunk-3HFL3JGP.js → chunk-GDGKARRB.js} +4 -2
- package/dist/chunk-GDGKARRB.js.map +1 -0
- package/dist/chunk-I37SYHM7.js +123 -0
- package/dist/chunk-I37SYHM7.js.map +1 -0
- package/dist/{chunk-ESUTPQDO.js → chunk-I5J6SDLK.js} +3 -3
- package/dist/{chunk-ESUTPQDO.js.map → chunk-I5J6SDLK.js.map} +1 -1
- package/dist/{chunk-KXLMTAZ5.js → chunk-JWAX2AOO.js} +3 -3
- package/dist/chunk-JWAX2AOO.js.map +1 -0
- package/dist/chunk-L56KGPGS.js +115 -0
- package/dist/chunk-L56KGPGS.js.map +1 -0
- package/dist/{chunk-DV3MXDLN.js → chunk-OT6EQFMP.js} +3 -3
- package/dist/{chunk-DV3MXDLN.js.map → chunk-OT6EQFMP.js.map} +1 -1
- package/dist/{chunk-CI56SSO2.js → chunk-SIIY2EGI.js} +3 -3
- package/dist/{chunk-CI56SSO2.js.map → chunk-SIIY2EGI.js.map} +1 -1
- package/dist/{chunk-RHBQ3GZE.js → chunk-SXVOJ7WE.js} +4 -4
- package/dist/{chunk-RHBQ3GZE.js.map → chunk-SXVOJ7WE.js.map} +1 -1
- package/dist/chunk-TFS2NUET.js +66 -0
- package/dist/chunk-TFS2NUET.js.map +1 -0
- package/dist/{chunk-GA3XIDVX.js → chunk-TKKHWO6C.js} +3 -3
- package/dist/{chunk-GA3XIDVX.js.map → chunk-TKKHWO6C.js.map} +1 -1
- package/dist/{chunk-2KO2YIZN.js → chunk-UU2V5FGF.js} +11 -9
- package/dist/chunk-UU2V5FGF.js.map +1 -0
- package/dist/{chunk-3522NABN.js → chunk-W5WDGME5.js} +3 -3
- package/dist/{chunk-3522NABN.js.map → chunk-W5WDGME5.js.map} +1 -1
- package/dist/{chunk-WZSAUESL.js → chunk-WA7Q4TTA.js} +3 -3
- package/dist/{chunk-WZSAUESL.js.map → chunk-WA7Q4TTA.js.map} +1 -1
- package/dist/combobox.js +1 -1
- package/dist/confirmation-modal.js +1 -1
- package/dist/context-menu.js +1 -1
- package/dist/copy-button.d.ts +14 -0
- package/dist/copy-button.js +3 -0
- package/dist/copy-button.js.map +1 -0
- package/dist/date-picker.d.ts +1 -0
- package/dist/date-picker.js +1 -1
- package/dist/field-label.js +1 -1
- package/dist/form-modal.d.ts +6 -1
- package/dist/form-modal.js +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.js +27 -22
- package/dist/info-button.js +1 -1
- package/dist/menu.js +1 -1
- package/dist/modal.d.ts +23 -1
- package/dist/modal.js +2 -1
- package/dist/popover-button.js +1 -1
- package/dist/popover.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/table.d.ts +1 -0
- package/dist/table.js +1 -1
- package/dist/tokens.d.ts +1 -1
- package/dist/tokens.js +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/wizard.js +1 -1
- package/package.json +17 -1
- package/dist/chunk-2KO2YIZN.js.map +0 -1
- package/dist/chunk-3HFL3JGP.js.map +0 -1
- package/dist/chunk-5X3RYDPC.js.map +0 -1
- package/dist/chunk-GPIN2ITX.js.map +0 -1
- package/dist/chunk-IFNT6JSQ.js +0 -3
- package/dist/chunk-IFNT6JSQ.js.map +0 -1
- package/dist/chunk-KXLMTAZ5.js.map +0 -1
- package/dist/chunk-TJGX27YO.js.map +0 -1
- package/dist/chunk-XLD2BPTT.js.map +0 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
4
|
+
import { X } from 'lucide-react';
|
|
5
|
+
import { cva } from 'class-variance-authority';
|
|
6
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var panelModalVariants = cva("", {
|
|
9
|
+
variants: {
|
|
10
|
+
size: {
|
|
11
|
+
sm: "sm:max-w-md",
|
|
12
|
+
md: "sm:max-w-2xl",
|
|
13
|
+
lg: "sm:max-w-4xl",
|
|
14
|
+
xl: "sm:max-w-6xl"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
defaultVariants: {
|
|
18
|
+
size: "md"
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
var PanelModal = React.forwardRef(function PanelModal2({
|
|
22
|
+
open,
|
|
23
|
+
onOpenChange,
|
|
24
|
+
title,
|
|
25
|
+
headerIcon,
|
|
26
|
+
headerActions,
|
|
27
|
+
footer,
|
|
28
|
+
hideHeader = false,
|
|
29
|
+
bodyClassName,
|
|
30
|
+
closeLabel = "Close",
|
|
31
|
+
size,
|
|
32
|
+
className,
|
|
33
|
+
children,
|
|
34
|
+
...props
|
|
35
|
+
}, ref) {
|
|
36
|
+
return /* @__PURE__ */ jsx(DialogPrimitive.Root, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogPrimitive.Portal, { children: [
|
|
37
|
+
/* @__PURE__ */ jsx(
|
|
38
|
+
DialogPrimitive.Overlay,
|
|
39
|
+
{
|
|
40
|
+
"data-as": "modal-overlay",
|
|
41
|
+
className: "as-anim-fade fixed inset-0 z-[var(--as-z-modal)] bg-[var(--as-overlay)]"
|
|
42
|
+
}
|
|
43
|
+
),
|
|
44
|
+
/* @__PURE__ */ jsxs(
|
|
45
|
+
DialogPrimitive.Content,
|
|
46
|
+
{
|
|
47
|
+
ref,
|
|
48
|
+
"data-as": "panel-modal",
|
|
49
|
+
"aria-describedby": void 0,
|
|
50
|
+
className: cn(
|
|
51
|
+
"as-anim-pop fixed inset-0 z-[var(--as-z-modal)] flex flex-col overflow-y-auto bg-[var(--as-surface-raised)] text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none",
|
|
52
|
+
"sm:inset-auto sm:left-1/2 sm:top-1/2 sm:h-auto sm:max-h-[90vh] sm:w-auto sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-[var(--as-radius-lg)] sm:border sm:border-[var(--as-border)]",
|
|
53
|
+
panelModalVariants({ size }),
|
|
54
|
+
className
|
|
55
|
+
),
|
|
56
|
+
...props,
|
|
57
|
+
children: [
|
|
58
|
+
hideHeader ? /* @__PURE__ */ jsx(
|
|
59
|
+
DialogPrimitive.Close,
|
|
60
|
+
{
|
|
61
|
+
"aria-label": closeLabel,
|
|
62
|
+
className: "absolute right-3 top-3 z-10 rounded-[var(--as-radius-sm)] bg-[var(--as-surface-raised)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-secondary)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]",
|
|
63
|
+
children: /* @__PURE__ */ jsx(X, { "aria-hidden": "true", className: "size-4" })
|
|
64
|
+
}
|
|
65
|
+
) : /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center justify-between gap-3 border-b border-[var(--as-border)] px-5 py-4 sm:px-6", children: [
|
|
66
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
67
|
+
headerIcon,
|
|
68
|
+
title ? /* @__PURE__ */ jsx(DialogPrimitive.Title, { className: "truncate font-semibold text-[var(--as-fg)]", children: title }) : null
|
|
69
|
+
] }),
|
|
70
|
+
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [
|
|
71
|
+
headerActions,
|
|
72
|
+
/* @__PURE__ */ jsx(
|
|
73
|
+
DialogPrimitive.Close,
|
|
74
|
+
{
|
|
75
|
+
"aria-label": closeLabel,
|
|
76
|
+
className: "rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-secondary)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]",
|
|
77
|
+
children: /* @__PURE__ */ jsx(X, { "aria-hidden": "true", className: "size-5" })
|
|
78
|
+
}
|
|
79
|
+
)
|
|
80
|
+
] })
|
|
81
|
+
] }),
|
|
82
|
+
/* @__PURE__ */ jsx("div", { className: cn("min-h-0 flex-1", hideHeader && "pt-10", bodyClassName ?? "p-5 sm:p-6"), children }),
|
|
83
|
+
footer ? /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-[var(--as-border)] px-5 py-4 sm:px-6", children: footer }) : null
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
] }) });
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
export { PanelModal };
|
|
91
|
+
//# sourceMappingURL=chunk-BWPNEQ3T.js.map
|
|
92
|
+
//# sourceMappingURL=chunk-BWPNEQ3T.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/modal/PanelModal.tsx"],"names":["PanelModal"],"mappings":"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","file":"chunk-BWPNEQ3T.js","sourcesContent":["import * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { X } from 'lucide-react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../lib/utils'\n\nconst panelModalVariants = cva('', {\n variants: {\n size: {\n sm: 'sm:max-w-md',\n md: 'sm:max-w-2xl',\n lg: 'sm:max-w-4xl',\n xl: 'sm:max-w-6xl',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nexport interface PanelModalProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n 'title'\n >,\n VariantProps<typeof panelModalVariants> {\n open: boolean\n onOpenChange: (open: boolean) => void\n title?: React.ReactNode\n headerIcon?: React.ReactNode\n headerActions?: React.ReactNode\n footer?: React.ReactNode\n hideHeader?: boolean\n bodyClassName?: string\n closeLabel?: string\n}\n\n/**\n * Dialog panel with a header (icon, title, actions, close), scrollable body\n * and optional sticky footer — full-screen on mobile, centered card on\n * desktop. For plain dialogs prefer the `Modal` parts; for forms prefer\n * `FormModal`.\n */\nexport const PanelModal = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n PanelModalProps\n>(function PanelModal(\n {\n open,\n onOpenChange,\n title,\n headerIcon,\n headerActions,\n footer,\n hideHeader = false,\n bodyClassName,\n closeLabel = 'Close',\n size,\n className,\n children,\n ...props\n },\n ref,\n) {\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n data-as=\"modal-overlay\"\n className=\"as-anim-fade fixed inset-0 z-[var(--as-z-modal)] bg-[var(--as-overlay)]\"\n />\n <DialogPrimitive.Content\n ref={ref}\n data-as=\"panel-modal\"\n aria-describedby={undefined}\n className={cn(\n 'as-anim-pop fixed inset-0 z-[var(--as-z-modal)] flex flex-col overflow-y-auto bg-[var(--as-surface-raised)] text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none',\n 'sm:inset-auto sm:left-1/2 sm:top-1/2 sm:h-auto sm:max-h-[90vh] sm:w-auto sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-[var(--as-radius-lg)] sm:border sm:border-[var(--as-border)]',\n panelModalVariants({ size }),\n className,\n )}\n {...props}\n >\n {hideHeader ? (\n <DialogPrimitive.Close\n aria-label={closeLabel}\n className=\"absolute right-3 top-3 z-10 rounded-[var(--as-radius-sm)] bg-[var(--as-surface-raised)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-secondary)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <X aria-hidden=\"true\" className=\"size-4\" />\n </DialogPrimitive.Close>\n ) : (\n <div className=\"flex shrink-0 items-center justify-between gap-3 border-b border-[var(--as-border)] px-5 py-4 sm:px-6\">\n <div className=\"flex min-w-0 items-center gap-2\">\n {headerIcon}\n {title ? (\n <DialogPrimitive.Title className=\"truncate font-semibold text-[var(--as-fg)]\">\n {title}\n </DialogPrimitive.Title>\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {headerActions}\n <DialogPrimitive.Close\n aria-label={closeLabel}\n className=\"rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-secondary)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <X aria-hidden=\"true\" className=\"size-5\" />\n </DialogPrimitive.Close>\n </div>\n </div>\n )}\n <div className={cn('min-h-0 flex-1', hideHeader && 'pt-10', bodyClassName ?? 'p-5 sm:p-6')}>\n {children}\n </div>\n {footer ? (\n <div className=\"shrink-0 border-t border-[var(--as-border)] px-5 py-4 sm:px-6\">\n {footer}\n </div>\n ) : null}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n})\n"]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Check, Copy } from 'lucide-react';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function writeClipboard(value) {
|
|
7
|
+
if (navigator?.clipboard?.writeText) {
|
|
8
|
+
return navigator.clipboard.writeText(value);
|
|
9
|
+
}
|
|
10
|
+
return new Promise((resolve, reject) => {
|
|
11
|
+
try {
|
|
12
|
+
const textarea = document.createElement("textarea");
|
|
13
|
+
textarea.value = value;
|
|
14
|
+
textarea.style.position = "fixed";
|
|
15
|
+
textarea.style.opacity = "0";
|
|
16
|
+
document.body.appendChild(textarea);
|
|
17
|
+
textarea.select();
|
|
18
|
+
document.execCommand("copy");
|
|
19
|
+
document.body.removeChild(textarea);
|
|
20
|
+
resolve();
|
|
21
|
+
} catch (error) {
|
|
22
|
+
reject(error);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
var CopyButton = React.forwardRef(
|
|
27
|
+
function CopyButton2({
|
|
28
|
+
value,
|
|
29
|
+
label = "Copy",
|
|
30
|
+
size = 14,
|
|
31
|
+
hideWhenEmpty = true,
|
|
32
|
+
copiedDuration = 1500,
|
|
33
|
+
onCopied,
|
|
34
|
+
onCopyError,
|
|
35
|
+
className,
|
|
36
|
+
onClick,
|
|
37
|
+
...props
|
|
38
|
+
}, ref) {
|
|
39
|
+
const [copied, setCopied] = React.useState(false);
|
|
40
|
+
const timer = React.useRef(null);
|
|
41
|
+
React.useEffect(
|
|
42
|
+
() => () => {
|
|
43
|
+
if (timer.current) clearTimeout(timer.current);
|
|
44
|
+
},
|
|
45
|
+
[]
|
|
46
|
+
);
|
|
47
|
+
if (hideWhenEmpty && !value) return null;
|
|
48
|
+
const Icon = copied ? Check : Copy;
|
|
49
|
+
return /* @__PURE__ */ jsx(
|
|
50
|
+
"button",
|
|
51
|
+
{
|
|
52
|
+
ref,
|
|
53
|
+
type: "button",
|
|
54
|
+
"data-as": "copy-button",
|
|
55
|
+
"data-copied": copied || void 0,
|
|
56
|
+
"aria-label": label,
|
|
57
|
+
title: label,
|
|
58
|
+
onClick: (event) => {
|
|
59
|
+
onClick?.(event);
|
|
60
|
+
if (event.defaultPrevented || !value) return;
|
|
61
|
+
event.preventDefault();
|
|
62
|
+
event.stopPropagation();
|
|
63
|
+
writeClipboard(value).then(
|
|
64
|
+
() => {
|
|
65
|
+
setCopied(true);
|
|
66
|
+
if (timer.current) clearTimeout(timer.current);
|
|
67
|
+
timer.current = setTimeout(() => setCopied(false), copiedDuration);
|
|
68
|
+
onCopied?.();
|
|
69
|
+
},
|
|
70
|
+
(error) => {
|
|
71
|
+
onCopyError?.(error);
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
},
|
|
75
|
+
className: cn(
|
|
76
|
+
"inline-flex cursor-pointer items-center justify-center rounded-[var(--as-radius-sm)] p-0.5 text-[var(--as-muted-fg)] transition-colors hover:text-[var(--as-primary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]",
|
|
77
|
+
copied && "text-[var(--as-success)] hover:text-[var(--as-success)]",
|
|
78
|
+
className
|
|
79
|
+
),
|
|
80
|
+
...props,
|
|
81
|
+
children: /* @__PURE__ */ jsx(Icon, { style: { width: size, height: size }, "aria-hidden": true })
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
export { CopyButton };
|
|
88
|
+
//# sourceMappingURL=chunk-CZ2BL2ZL.js.map
|
|
89
|
+
//# sourceMappingURL=chunk-CZ2BL2ZL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/copy-button/CopyButton.tsx"],"names":["CopyButton"],"mappings":"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","file":"chunk-CZ2BL2ZL.js","sourcesContent":["import * as React from 'react'\nimport { Check, Copy } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface CopyButtonProps\n extends Omit<React.ComponentProps<'button'>, 'value' | 'children'> {\n value: string\n label?: string\n size?: number\n hideWhenEmpty?: boolean\n copiedDuration?: number\n onCopied?: () => void\n onCopyError?: (error: unknown) => void\n}\n\nfunction writeClipboard(value: string): Promise<void> {\n if (navigator?.clipboard?.writeText) {\n return navigator.clipboard.writeText(value)\n }\n return new Promise((resolve, reject) => {\n try {\n const textarea = document.createElement('textarea')\n textarea.value = value\n textarea.style.position = 'fixed'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n textarea.select()\n document.execCommand('copy')\n document.body.removeChild(textarea)\n resolve()\n } catch (error) {\n reject(error)\n }\n })\n}\n\nexport const CopyButton = React.forwardRef<HTMLButtonElement, CopyButtonProps>(\n function CopyButton(\n {\n value,\n label = 'Copy',\n size = 14,\n hideWhenEmpty = true,\n copiedDuration = 1500,\n onCopied,\n onCopyError,\n className,\n onClick,\n ...props\n },\n ref,\n ) {\n const [copied, setCopied] = React.useState(false)\n const timer = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n\n React.useEffect(\n () => () => {\n if (timer.current) clearTimeout(timer.current)\n },\n [],\n )\n\n if (hideWhenEmpty && !value) return null\n\n const Icon = copied ? Check : Copy\n\n return (\n <button\n ref={ref}\n type=\"button\"\n data-as=\"copy-button\"\n data-copied={copied || undefined}\n aria-label={label}\n title={label}\n onClick={(event) => {\n onClick?.(event)\n if (event.defaultPrevented || !value) return\n event.preventDefault()\n event.stopPropagation()\n writeClipboard(value).then(\n () => {\n setCopied(true)\n if (timer.current) clearTimeout(timer.current)\n timer.current = setTimeout(() => setCopied(false), copiedDuration)\n onCopied?.()\n },\n (error) => {\n onCopyError?.(error)\n },\n )\n }}\n className={cn(\n 'inline-flex cursor-pointer items-center justify-center rounded-[var(--as-radius-sm)] p-0.5 text-[var(--as-muted-fg)] transition-colors hover:text-[var(--as-primary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n copied && 'text-[var(--as-success)] hover:text-[var(--as-success)]',\n className,\n )}\n {...props}\n >\n <Icon style={{ width: size, height: size }} aria-hidden />\n </button>\n )\n },\n)\n"]}
|
|
@@ -32,6 +32,8 @@ var semanticTokens = [
|
|
|
32
32
|
"--as-ai-fg",
|
|
33
33
|
"--as-focus-ring",
|
|
34
34
|
"--as-overlay",
|
|
35
|
+
"--as-z-modal",
|
|
36
|
+
"--as-z-popover",
|
|
35
37
|
"--as-radius-sm",
|
|
36
38
|
"--as-radius",
|
|
37
39
|
"--as-radius-lg",
|
|
@@ -43,5 +45,5 @@ var semanticTokens = [
|
|
|
43
45
|
];
|
|
44
46
|
|
|
45
47
|
export { rawTokens, semanticTokens };
|
|
46
|
-
//# sourceMappingURL=chunk-
|
|
47
|
-
//# sourceMappingURL=chunk-
|
|
48
|
+
//# sourceMappingURL=chunk-GDGKARRB.js.map
|
|
49
|
+
//# sourceMappingURL=chunk-GDGKARRB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tokens/tokens.ts"],"names":[],"mappings":";AAAO,IAAM,SAAA,GAAY;AAAA,EACvB,aAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,oBAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF;AAEO,IAAM,cAAA,GAAiB;AAAA,EAC5B,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,cAAA;AAAA,EACA,qBAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF","file":"chunk-GDGKARRB.js","sourcesContent":["export const rawTokens = [\n '--as-tone-0',\n '--as-tone-50',\n '--as-tone-100',\n '--as-tone-200',\n '--as-tone-300',\n '--as-tone-500',\n '--as-tone-700',\n '--as-tone-900',\n '--as-accent',\n '--as-accent-strong',\n '--as-success',\n '--as-warning',\n '--as-danger',\n '--as-ai',\n] as const\n\nexport const semanticTokens = [\n '--as-primary',\n '--as-primary-fg',\n '--as-secondary',\n '--as-secondary-fg',\n '--as-surface',\n '--as-surface-raised',\n '--as-border',\n '--as-fg',\n '--as-muted',\n '--as-muted-fg',\n '--as-success-fg',\n '--as-warning-fg',\n '--as-danger-fg',\n '--as-ai-fg',\n '--as-focus-ring',\n '--as-overlay',\n '--as-z-modal',\n '--as-z-popover',\n '--as-radius-sm',\n '--as-radius',\n '--as-radius-lg',\n '--as-font-sans',\n '--as-font-mono',\n '--as-shadow-1',\n '--as-shadow-2',\n '--as-shadow-3',\n] as const\n\nexport type RawTokenName = (typeof rawTokens)[number]\nexport type SemanticTokenName = (typeof semanticTokens)[number]\nexport type ThemeTokenName = SemanticTokenName | RawTokenName\nexport type ThemeTokens = Partial<Record<ThemeTokenName, string>>\n"]}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { Popover, PopoverTrigger, PopoverContent } from './chunk-SIIY2EGI.js';
|
|
2
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Sparkles, Send } from 'lucide-react';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var AiActionsDropdown = React.forwardRef(function AiActionsDropdown2({
|
|
8
|
+
actions,
|
|
9
|
+
onAction,
|
|
10
|
+
onPrompt,
|
|
11
|
+
busy = false,
|
|
12
|
+
error,
|
|
13
|
+
label = "AI actions",
|
|
14
|
+
title,
|
|
15
|
+
promptLabel = "Ask something custom",
|
|
16
|
+
promptPlaceholder,
|
|
17
|
+
promptSubmitLabel = "Send",
|
|
18
|
+
disabled = false,
|
|
19
|
+
align = "end",
|
|
20
|
+
side = "bottom",
|
|
21
|
+
className,
|
|
22
|
+
panelClassName
|
|
23
|
+
}, ref) {
|
|
24
|
+
const [open, setOpen] = React.useState(false);
|
|
25
|
+
const [prompt, setPrompt] = React.useState("");
|
|
26
|
+
const sendPrompt = () => {
|
|
27
|
+
const trimmed = prompt.trim();
|
|
28
|
+
if (!trimmed || busy || !onPrompt) return;
|
|
29
|
+
onPrompt(trimmed);
|
|
30
|
+
setPrompt("");
|
|
31
|
+
};
|
|
32
|
+
return /* @__PURE__ */ jsx(Popover, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxs("span", { className: "relative inline-flex", children: [
|
|
33
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, disabled: disabled || busy, children: /* @__PURE__ */ jsx(
|
|
34
|
+
"button",
|
|
35
|
+
{
|
|
36
|
+
ref,
|
|
37
|
+
type: "button",
|
|
38
|
+
"data-as": "ai-actions-dropdown",
|
|
39
|
+
"aria-label": label,
|
|
40
|
+
className: cn(
|
|
41
|
+
"inline-flex size-7 cursor-pointer items-center justify-center rounded-full bg-[color-mix(in_srgb,var(--as-ai)_12%,transparent)] text-[var(--as-ai)] transition-[filter] hover:brightness-95 focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50",
|
|
42
|
+
className
|
|
43
|
+
),
|
|
44
|
+
children: /* @__PURE__ */ jsx(Sparkles, { className: "size-4", "aria-hidden": true })
|
|
45
|
+
}
|
|
46
|
+
) }),
|
|
47
|
+
/* @__PURE__ */ jsx(
|
|
48
|
+
PopoverContent,
|
|
49
|
+
{
|
|
50
|
+
side,
|
|
51
|
+
align,
|
|
52
|
+
"aria-label": title ?? label,
|
|
53
|
+
className: cn("w-64 p-1.5", panelClassName),
|
|
54
|
+
children: /* @__PURE__ */ jsxs("div", { "data-as": "ai-actions-panel", role: "menu", children: [
|
|
55
|
+
title ? /* @__PURE__ */ jsx("p", { className: "px-2 pb-1 pt-1.5 text-xs font-semibold uppercase tracking-wide text-[var(--as-muted-fg)]", children: title }) : null,
|
|
56
|
+
actions.map((action) => /* @__PURE__ */ jsxs(
|
|
57
|
+
"button",
|
|
58
|
+
{
|
|
59
|
+
type: "button",
|
|
60
|
+
role: "menuitem",
|
|
61
|
+
disabled: busy,
|
|
62
|
+
onClick: () => onAction(action),
|
|
63
|
+
className: "flex w-full cursor-pointer items-start gap-2.5 rounded-[var(--as-radius-sm)] px-2 py-2 text-left transition-colors hover:bg-[var(--as-secondary)] disabled:pointer-events-none disabled:opacity-50",
|
|
64
|
+
children: [
|
|
65
|
+
/* @__PURE__ */ jsx(
|
|
66
|
+
action.icon,
|
|
67
|
+
{
|
|
68
|
+
className: "mt-0.5 size-4 shrink-0 text-[var(--as-ai)]",
|
|
69
|
+
"aria-hidden": true
|
|
70
|
+
}
|
|
71
|
+
),
|
|
72
|
+
/* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col", children: [
|
|
73
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-[var(--as-fg)]", children: action.label }),
|
|
74
|
+
action.description ? /* @__PURE__ */ jsx("span", { className: "text-xs text-[var(--as-muted-fg)]", children: action.description }) : null
|
|
75
|
+
] })
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
action.id
|
|
79
|
+
)),
|
|
80
|
+
onPrompt ? /* @__PURE__ */ jsxs(
|
|
81
|
+
"form",
|
|
82
|
+
{
|
|
83
|
+
className: "mt-1 flex items-center gap-1.5 border-t border-[var(--as-border)] p-1.5",
|
|
84
|
+
onSubmit: (event) => {
|
|
85
|
+
event.preventDefault();
|
|
86
|
+
sendPrompt();
|
|
87
|
+
},
|
|
88
|
+
children: [
|
|
89
|
+
/* @__PURE__ */ jsx(
|
|
90
|
+
"input",
|
|
91
|
+
{
|
|
92
|
+
type: "text",
|
|
93
|
+
"aria-label": promptLabel,
|
|
94
|
+
placeholder: promptPlaceholder ?? promptLabel,
|
|
95
|
+
value: prompt,
|
|
96
|
+
onChange: (event) => setPrompt(event.target.value),
|
|
97
|
+
className: "h-7 w-full bg-transparent text-sm outline-none placeholder:text-[var(--as-muted-fg)]"
|
|
98
|
+
}
|
|
99
|
+
),
|
|
100
|
+
/* @__PURE__ */ jsx(
|
|
101
|
+
"button",
|
|
102
|
+
{
|
|
103
|
+
type: "submit",
|
|
104
|
+
"aria-label": promptSubmitLabel,
|
|
105
|
+
disabled: busy || !prompt.trim(),
|
|
106
|
+
className: "shrink-0 cursor-pointer rounded-[var(--as-radius-sm)] bg-[var(--as-ai)] p-1 text-[var(--as-ai-fg)] transition-opacity hover:opacity-90 disabled:pointer-events-none disabled:opacity-40",
|
|
107
|
+
children: /* @__PURE__ */ jsx(Send, { className: "size-3", "aria-hidden": true })
|
|
108
|
+
}
|
|
109
|
+
)
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
) : null,
|
|
113
|
+
busy ? /* @__PURE__ */ jsx("p", { className: "px-2 pb-1.5 text-xs text-[var(--as-muted-fg)]", role: "status", children: "\u2026" }) : null,
|
|
114
|
+
error ? /* @__PURE__ */ jsx("p", { role: "alert", className: "px-2 pb-1.5 text-xs text-[var(--as-danger)]", children: error }) : null
|
|
115
|
+
] })
|
|
116
|
+
}
|
|
117
|
+
)
|
|
118
|
+
] }) });
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
export { AiActionsDropdown };
|
|
122
|
+
//# sourceMappingURL=chunk-I37SYHM7.js.map
|
|
123
|
+
//# sourceMappingURL=chunk-I37SYHM7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ai-actions-dropdown/AiActionsDropdown.tsx"],"names":["AiActionsDropdown"],"mappings":"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","file":"chunk-I37SYHM7.js","sourcesContent":["import * as React from 'react'\nimport { Send, Sparkles, type LucideIcon } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover'\n\nexport interface AiAction {\n id: string\n label: string\n description?: string\n icon: LucideIcon\n}\n\nexport interface AiActionsDropdownProps {\n actions: AiAction[]\n onAction: (action: AiAction) => void\n onPrompt?: (prompt: string) => void\n busy?: boolean\n error?: string | null\n label?: string\n title?: string\n promptLabel?: string\n promptPlaceholder?: string\n promptSubmitLabel?: string\n disabled?: boolean\n align?: 'start' | 'center' | 'end'\n side?: 'top' | 'bottom' | 'left' | 'right'\n className?: string\n panelClassName?: string\n}\n\nexport const AiActionsDropdown = React.forwardRef<\n HTMLButtonElement,\n AiActionsDropdownProps\n>(function AiActionsDropdown(\n {\n actions,\n onAction,\n onPrompt,\n busy = false,\n error,\n label = 'AI actions',\n title,\n promptLabel = 'Ask something custom',\n promptPlaceholder,\n promptSubmitLabel = 'Send',\n disabled = false,\n align = 'end',\n side = 'bottom',\n className,\n panelClassName,\n },\n ref,\n) {\n const [open, setOpen] = React.useState(false)\n const [prompt, setPrompt] = React.useState('')\n\n const sendPrompt = () => {\n const trimmed = prompt.trim()\n if (!trimmed || busy || !onPrompt) return\n onPrompt(trimmed)\n setPrompt('')\n }\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <span className=\"relative inline-flex\">\n <PopoverTrigger asChild disabled={disabled || busy}>\n <button\n ref={ref}\n type=\"button\"\n data-as=\"ai-actions-dropdown\"\n aria-label={label}\n className={cn(\n 'inline-flex size-7 cursor-pointer items-center justify-center rounded-full bg-[color-mix(in_srgb,var(--as-ai)_12%,transparent)] text-[var(--as-ai)] transition-[filter] hover:brightness-95 focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50',\n className,\n )}\n >\n <Sparkles className=\"size-4\" aria-hidden />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side={side}\n align={align}\n aria-label={title ?? label}\n className={cn('w-64 p-1.5', panelClassName)}\n >\n <div data-as=\"ai-actions-panel\" role=\"menu\">\n {title ? (\n <p className=\"px-2 pb-1 pt-1.5 text-xs font-semibold uppercase tracking-wide text-[var(--as-muted-fg)]\">\n {title}\n </p>\n ) : null}\n {actions.map((action) => (\n <button\n key={action.id}\n type=\"button\"\n role=\"menuitem\"\n disabled={busy}\n onClick={() => onAction(action)}\n className=\"flex w-full cursor-pointer items-start gap-2.5 rounded-[var(--as-radius-sm)] px-2 py-2 text-left transition-colors hover:bg-[var(--as-secondary)] disabled:pointer-events-none disabled:opacity-50\"\n >\n <action.icon\n className=\"mt-0.5 size-4 shrink-0 text-[var(--as-ai)]\"\n aria-hidden\n />\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">\n {action.label}\n </span>\n {action.description ? (\n <span className=\"text-xs text-[var(--as-muted-fg)]\">\n {action.description}\n </span>\n ) : null}\n </span>\n </button>\n ))}\n {onPrompt ? (\n <form\n className=\"mt-1 flex items-center gap-1.5 border-t border-[var(--as-border)] p-1.5\"\n onSubmit={(event) => {\n event.preventDefault()\n sendPrompt()\n }}\n >\n <input\n type=\"text\"\n aria-label={promptLabel}\n placeholder={promptPlaceholder ?? promptLabel}\n value={prompt}\n onChange={(event) => setPrompt(event.target.value)}\n className=\"h-7 w-full bg-transparent text-sm outline-none placeholder:text-[var(--as-muted-fg)]\"\n />\n <button\n type=\"submit\"\n aria-label={promptSubmitLabel}\n disabled={busy || !prompt.trim()}\n className=\"shrink-0 cursor-pointer rounded-[var(--as-radius-sm)] bg-[var(--as-ai)] p-1 text-[var(--as-ai-fg)] transition-opacity hover:opacity-90 disabled:pointer-events-none disabled:opacity-40\"\n >\n <Send className=\"size-3\" aria-hidden />\n </button>\n </form>\n ) : null}\n {busy ? (\n <p className=\"px-2 pb-1.5 text-xs text-[var(--as-muted-fg)]\" role=\"status\">\n …\n </p>\n ) : null}\n {error ? (\n <p role=\"alert\" className=\"px-2 pb-1.5 text-xs text-[var(--as-danger)]\">\n {error}\n </p>\n ) : null}\n </div>\n </PopoverContent>\n </span>\n </Popover>\n )\n})\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { InfoButton } from './chunk-
|
|
1
|
+
import { InfoButton } from './chunk-OT6EQFMP.js';
|
|
2
2
|
import { cn } from './chunk-BLJWR4ZV.js';
|
|
3
3
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
4
|
|
|
@@ -17,5 +17,5 @@ function FieldLabel({
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export { FieldLabel };
|
|
20
|
-
//# sourceMappingURL=chunk-
|
|
21
|
-
//# sourceMappingURL=chunk-
|
|
20
|
+
//# sourceMappingURL=chunk-I5J6SDLK.js.map
|
|
21
|
+
//# sourceMappingURL=chunk-I5J6SDLK.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/field-label/FieldLabel.tsx"],"names":[],"mappings":";;;;AAaO,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,uBACE,IAAA,CAAC,UAAK,SAAA,EAAQ,aAAA,EAAc,WAAW,EAAA,CAAG,uCAAA,EAAyC,SAAS,CAAA,EAC1F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAM,QAAA,EAAS,CAAA;AAAA,wBACf,UAAA,EAAA,EAAW,KAAA,EAAO,SAAA,EAAW,KAAA,EAAc,aACzC,QAAA,EAAA,IAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/field-label/FieldLabel.tsx"],"names":[],"mappings":";;;;AAaO,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,uBACE,IAAA,CAAC,UAAK,SAAA,EAAQ,aAAA,EAAc,WAAW,EAAA,CAAG,uCAAA,EAAyC,SAAS,CAAA,EAC1F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAM,QAAA,EAAS,CAAA;AAAA,wBACf,UAAA,EAAA,EAAW,KAAA,EAAO,SAAA,EAAW,KAAA,EAAc,aACzC,QAAA,EAAA,IAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ","file":"chunk-I5J6SDLK.js","sourcesContent":["import * as React from 'react'\nimport { cn } from '../../lib/utils'\nimport { InfoButton } from '../info-button/InfoButton'\n\nexport interface FieldLabelProps {\n children: React.ReactNode\n info: React.ReactNode\n infoTitle?: React.ReactNode\n label?: string\n showOnHover?: boolean\n className?: string\n}\n\nexport function FieldLabel({\n children,\n info,\n infoTitle,\n label,\n showOnHover,\n className,\n}: FieldLabelProps) {\n return (\n <span data-as=\"field-label\" className={cn('group flex items-center gap-1 text-xs', className)}>\n <span>{children}</span>\n <InfoButton title={infoTitle} label={label} showOnHover={showOnHover}>\n {info}\n </InfoButton>\n </span>\n )\n}\n"]}
|
|
@@ -16,7 +16,7 @@ var MenuContent = React.forwardRef(function MenuContent2({ className, sideOffset
|
|
|
16
16
|
sideOffset,
|
|
17
17
|
collisionPadding: 8,
|
|
18
18
|
className: cn(
|
|
19
|
-
"as-anim-pop z-
|
|
19
|
+
"as-anim-pop z-[var(--as-z-popover)] min-w-40 overflow-hidden rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-1 text-[var(--as-fg)] shadow-[var(--as-shadow-3)]",
|
|
20
20
|
className
|
|
21
21
|
),
|
|
22
22
|
...props,
|
|
@@ -105,5 +105,5 @@ function ActionMenu({
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
export { ActionMenu, Menu, MenuContent, MenuGroup, MenuItem, MenuLabel, MenuSeparator, MenuTrigger };
|
|
108
|
-
//# sourceMappingURL=chunk-
|
|
109
|
-
//# sourceMappingURL=chunk-
|
|
108
|
+
//# sourceMappingURL=chunk-JWAX2AOO.js.map
|
|
109
|
+
//# sourceMappingURL=chunk-JWAX2AOO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/menu/Menu.tsx"],"names":["MenuContent","MenuItem","MenuSeparator","MenuLabel"],"mappings":"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","file":"chunk-JWAX2AOO.js","sourcesContent":["import * as React from 'react'\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { Loader2, type LucideIcon } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport const Menu = DropdownMenuPrimitive.Root\nexport const MenuTrigger = DropdownMenuPrimitive.Trigger\nexport const MenuGroup = DropdownMenuPrimitive.Group\n\nexport const MenuContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(function MenuContent({ className, sideOffset = 6, children, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n data-as=\"menu\"\n sideOffset={sideOffset}\n collisionPadding={8}\n className={cn(\n 'as-anim-pop z-[var(--as-z-popover)] min-w-40 overflow-hidden rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-1 text-[var(--as-fg)] shadow-[var(--as-shadow-3)]',\n className,\n )}\n {...props}\n >\n {children}\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n )\n})\n\nexport interface MenuItemProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> {\n icon?: LucideIcon\n danger?: boolean\n pending?: boolean\n}\n\nexport const MenuItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Item>,\n MenuItemProps\n>(function MenuItem({ className, icon: Icon, danger, pending, disabled, children, ...props }, ref) {\n const SpinnerIcon = pending ? Loader2 : null\n return (\n <DropdownMenuPrimitive.Item\n ref={ref}\n disabled={disabled || pending}\n aria-busy={pending || undefined}\n className={cn(\n 'flex w-full cursor-pointer select-none items-center gap-2 rounded-[calc(var(--as-radius-sm)-2px)] px-2 py-1.5 text-left text-sm outline-none transition-colors focus:bg-[var(--as-secondary)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0',\n danger && 'text-[var(--as-danger)] focus:bg-[var(--as-danger)]/10',\n className,\n )}\n {...props}\n >\n {SpinnerIcon ? (\n <SpinnerIcon className=\"animate-spin\" aria-hidden />\n ) : Icon ? (\n <Icon aria-hidden />\n ) : null}\n {children}\n </DropdownMenuPrimitive.Item>\n )\n})\n\nexport const MenuSeparator = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(function MenuSeparator({ className, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-[var(--as-border)]', className)}\n {...props}\n />\n )\n})\n\nexport const MenuLabel = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>\n>(function MenuLabel({ className, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-xs font-medium text-[var(--as-muted-fg)]', className)}\n {...props}\n />\n )\n})\n\nexport interface ActionMenuItem {\n key: string\n label: string\n icon?: LucideIcon\n danger?: boolean\n disabled?: boolean\n pending?: boolean\n onSelect: () => void\n}\n\nexport interface ActionMenuProps {\n label: string\n trigger: React.ReactNode\n items: ActionMenuItem[]\n align?: 'start' | 'center' | 'end'\n side?: 'top' | 'right' | 'bottom' | 'left'\n triggerClassName?: string\n panelClassName?: string\n disabled?: boolean\n}\n\nexport function ActionMenu({\n label,\n trigger,\n items,\n align = 'end',\n side = 'bottom',\n triggerClassName,\n panelClassName,\n disabled = false,\n}: ActionMenuProps) {\n return (\n <Menu modal={false}>\n <MenuTrigger\n type=\"button\"\n aria-label={label}\n disabled={disabled}\n className={cn(\n 'inline-flex cursor-pointer items-center justify-center gap-1 rounded-full transition-colors hover:bg-[var(--as-secondary)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50',\n triggerClassName ?? 'size-9',\n )}\n >\n {trigger}\n </MenuTrigger>\n <MenuContent align={align} side={side} className={cn('w-52 p-1', panelClassName)}>\n <div className=\"flex flex-col\">\n {items.map((item) => (\n <MenuItem\n key={item.key}\n icon={item.icon}\n danger={item.danger}\n disabled={item.disabled}\n pending={item.pending}\n onSelect={() => item.onSelect()}\n >\n {item.label}\n </MenuItem>\n ))}\n </div>\n </MenuContent>\n </Menu>\n )\n}\n"]}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { Popover, PopoverTrigger, PopoverContent } from './chunk-SIIY2EGI.js';
|
|
2
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Sparkles, Send } from 'lucide-react';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var AiButton = React.forwardRef(
|
|
8
|
+
function AiButton2({
|
|
9
|
+
onSubmit,
|
|
10
|
+
suggestions = [],
|
|
11
|
+
onResponse,
|
|
12
|
+
loading = false,
|
|
13
|
+
error,
|
|
14
|
+
label = "Ask AI",
|
|
15
|
+
promptLabel = "Ask a question",
|
|
16
|
+
submitLabel = "Send",
|
|
17
|
+
loadingLabel = "Thinking\u2026",
|
|
18
|
+
placeholder,
|
|
19
|
+
disabled = false,
|
|
20
|
+
side = "bottom",
|
|
21
|
+
align = "end",
|
|
22
|
+
className,
|
|
23
|
+
panelClassName
|
|
24
|
+
}, ref) {
|
|
25
|
+
const [open, setOpen] = React.useState(false);
|
|
26
|
+
const [prompt, setPrompt] = React.useState("");
|
|
27
|
+
const send = (value) => {
|
|
28
|
+
const trimmed = value.trim();
|
|
29
|
+
if (!trimmed || loading) return;
|
|
30
|
+
onSubmit(trimmed);
|
|
31
|
+
setPrompt("");
|
|
32
|
+
};
|
|
33
|
+
return /* @__PURE__ */ jsx(Popover, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxs("span", { className: "relative inline-flex", children: [
|
|
34
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, disabled, children: /* @__PURE__ */ jsxs(
|
|
35
|
+
"button",
|
|
36
|
+
{
|
|
37
|
+
ref,
|
|
38
|
+
type: "button",
|
|
39
|
+
"data-as": "ai-button",
|
|
40
|
+
"aria-label": label,
|
|
41
|
+
className: cn(
|
|
42
|
+
"inline-flex cursor-pointer items-center gap-1 rounded-full bg-[color-mix(in_srgb,var(--as-ai)_12%,transparent)] px-2.5 py-1 text-xs font-medium text-[var(--as-ai)] transition-[filter] hover:brightness-95 focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50",
|
|
43
|
+
className
|
|
44
|
+
),
|
|
45
|
+
children: [
|
|
46
|
+
/* @__PURE__ */ jsx(Sparkles, { className: "size-3.5", "aria-hidden": true }),
|
|
47
|
+
label
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
) }),
|
|
51
|
+
/* @__PURE__ */ jsx(
|
|
52
|
+
PopoverContent,
|
|
53
|
+
{
|
|
54
|
+
side,
|
|
55
|
+
align,
|
|
56
|
+
"aria-label": label,
|
|
57
|
+
className: cn("w-72 p-3", panelClassName),
|
|
58
|
+
children: /* @__PURE__ */ jsxs(
|
|
59
|
+
"form",
|
|
60
|
+
{
|
|
61
|
+
"data-as": "ai-button-panel",
|
|
62
|
+
onSubmit: (event) => {
|
|
63
|
+
event.preventDefault();
|
|
64
|
+
send(prompt);
|
|
65
|
+
},
|
|
66
|
+
children: [
|
|
67
|
+
suggestions.length > 0 ? /* @__PURE__ */ jsx("div", { className: "mb-2 flex flex-wrap gap-1", children: suggestions.map((suggestion) => /* @__PURE__ */ jsx(
|
|
68
|
+
"button",
|
|
69
|
+
{
|
|
70
|
+
type: "button",
|
|
71
|
+
disabled: loading,
|
|
72
|
+
onClick: () => send(suggestion),
|
|
73
|
+
className: "cursor-pointer rounded-[var(--as-radius-sm)] bg-[var(--as-secondary)] px-2 py-1 text-xs transition-colors hover:bg-[color-mix(in_srgb,var(--as-ai)_14%,var(--as-secondary))] disabled:pointer-events-none disabled:opacity-50",
|
|
74
|
+
children: suggestion
|
|
75
|
+
},
|
|
76
|
+
suggestion
|
|
77
|
+
)) }) : null,
|
|
78
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center gap-2", children: [
|
|
79
|
+
/* @__PURE__ */ jsx(
|
|
80
|
+
"input",
|
|
81
|
+
{
|
|
82
|
+
type: "text",
|
|
83
|
+
"aria-label": promptLabel,
|
|
84
|
+
placeholder: placeholder ?? promptLabel,
|
|
85
|
+
value: prompt,
|
|
86
|
+
onChange: (event) => setPrompt(event.target.value),
|
|
87
|
+
className: "h-8 w-full rounded-[var(--as-radius-sm)] border border-[var(--as-border)] bg-[var(--as-surface)] px-2 text-sm outline-none placeholder:text-[var(--as-muted-fg)] focus-visible:border-[var(--as-focus-ring)]"
|
|
88
|
+
}
|
|
89
|
+
),
|
|
90
|
+
/* @__PURE__ */ jsx(
|
|
91
|
+
"button",
|
|
92
|
+
{
|
|
93
|
+
type: "submit",
|
|
94
|
+
"aria-label": submitLabel,
|
|
95
|
+
disabled: loading || !prompt.trim(),
|
|
96
|
+
className: "shrink-0 cursor-pointer rounded-[var(--as-radius-sm)] bg-[var(--as-ai)] p-1.5 text-[var(--as-ai-fg)] transition-opacity hover:opacity-90 disabled:pointer-events-none disabled:opacity-40",
|
|
97
|
+
children: /* @__PURE__ */ jsx(Send, { className: "size-3.5", "aria-hidden": true })
|
|
98
|
+
}
|
|
99
|
+
)
|
|
100
|
+
] }),
|
|
101
|
+
loading ? /* @__PURE__ */ jsx("p", { className: "text-sm text-[var(--as-muted-fg)]", role: "status", children: loadingLabel }) : null,
|
|
102
|
+
error ? /* @__PURE__ */ jsx("p", { role: "alert", className: "text-sm text-[var(--as-danger)]", children: error }) : null,
|
|
103
|
+
onResponse
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
)
|
|
109
|
+
] }) });
|
|
110
|
+
}
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
export { AiButton };
|
|
114
|
+
//# sourceMappingURL=chunk-L56KGPGS.js.map
|
|
115
|
+
//# sourceMappingURL=chunk-L56KGPGS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ai-button/AiButton.tsx"],"names":["AiButton"],"mappings":"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","file":"chunk-L56KGPGS.js","sourcesContent":["import * as React from 'react'\nimport { Send, Sparkles } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover'\n\nexport interface AiButtonProps {\n onSubmit: (prompt: string) => void\n suggestions?: string[]\n onResponse?: React.ReactNode\n loading?: boolean\n error?: string | null\n label?: string\n promptLabel?: string\n submitLabel?: string\n loadingLabel?: string\n placeholder?: string\n disabled?: boolean\n side?: 'top' | 'bottom' | 'left' | 'right'\n align?: 'start' | 'center' | 'end'\n className?: string\n panelClassName?: string\n}\n\nexport const AiButton = React.forwardRef<HTMLButtonElement, AiButtonProps>(\n function AiButton(\n {\n onSubmit,\n suggestions = [],\n onResponse,\n loading = false,\n error,\n label = 'Ask AI',\n promptLabel = 'Ask a question',\n submitLabel = 'Send',\n loadingLabel = 'Thinking…',\n placeholder,\n disabled = false,\n side = 'bottom',\n align = 'end',\n className,\n panelClassName,\n },\n ref,\n ) {\n const [open, setOpen] = React.useState(false)\n const [prompt, setPrompt] = React.useState('')\n\n const send = (value: string) => {\n const trimmed = value.trim()\n if (!trimmed || loading) return\n onSubmit(trimmed)\n setPrompt('')\n }\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <span className=\"relative inline-flex\">\n <PopoverTrigger asChild disabled={disabled}>\n <button\n ref={ref}\n type=\"button\"\n data-as=\"ai-button\"\n aria-label={label}\n className={cn(\n 'inline-flex cursor-pointer items-center gap-1 rounded-full bg-[color-mix(in_srgb,var(--as-ai)_12%,transparent)] px-2.5 py-1 text-xs font-medium text-[var(--as-ai)] transition-[filter] hover:brightness-95 focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50',\n className,\n )}\n >\n <Sparkles className=\"size-3.5\" aria-hidden />\n {label}\n </button>\n </PopoverTrigger>\n <PopoverContent\n side={side}\n align={align}\n aria-label={label}\n className={cn('w-72 p-3', panelClassName)}\n >\n <form\n data-as=\"ai-button-panel\"\n onSubmit={(event) => {\n event.preventDefault()\n send(prompt)\n }}\n >\n {suggestions.length > 0 ? (\n <div className=\"mb-2 flex flex-wrap gap-1\">\n {suggestions.map((suggestion) => (\n <button\n key={suggestion}\n type=\"button\"\n disabled={loading}\n onClick={() => send(suggestion)}\n className=\"cursor-pointer rounded-[var(--as-radius-sm)] bg-[var(--as-secondary)] px-2 py-1 text-xs transition-colors hover:bg-[color-mix(in_srgb,var(--as-ai)_14%,var(--as-secondary))] disabled:pointer-events-none disabled:opacity-50\"\n >\n {suggestion}\n </button>\n ))}\n </div>\n ) : null}\n <div className=\"mb-2 flex items-center gap-2\">\n <input\n type=\"text\"\n aria-label={promptLabel}\n placeholder={placeholder ?? promptLabel}\n value={prompt}\n onChange={(event) => setPrompt(event.target.value)}\n className=\"h-8 w-full rounded-[var(--as-radius-sm)] border border-[var(--as-border)] bg-[var(--as-surface)] px-2 text-sm outline-none placeholder:text-[var(--as-muted-fg)] focus-visible:border-[var(--as-focus-ring)]\"\n />\n <button\n type=\"submit\"\n aria-label={submitLabel}\n disabled={loading || !prompt.trim()}\n className=\"shrink-0 cursor-pointer rounded-[var(--as-radius-sm)] bg-[var(--as-ai)] p-1.5 text-[var(--as-ai-fg)] transition-opacity hover:opacity-90 disabled:pointer-events-none disabled:opacity-40\"\n >\n <Send className=\"size-3.5\" aria-hidden />\n </button>\n </div>\n {loading ? (\n <p className=\"text-sm text-[var(--as-muted-fg)]\" role=\"status\">\n {loadingLabel}\n </p>\n ) : null}\n {error ? (\n <p role=\"alert\" className=\"text-sm text-[var(--as-danger)]\">\n {error}\n </p>\n ) : null}\n {onResponse}\n </form>\n </PopoverContent>\n </span>\n </Popover>\n )\n },\n)\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PopoverButton } from './chunk-
|
|
1
|
+
import { PopoverButton } from './chunk-BE3XFZWU.js';
|
|
2
2
|
import { cn } from './chunk-BLJWR4ZV.js';
|
|
3
3
|
import { Info } from 'lucide-react';
|
|
4
4
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -42,5 +42,5 @@ function InfoButton({
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
export { InfoButton };
|
|
45
|
-
//# sourceMappingURL=chunk-
|
|
46
|
-
//# sourceMappingURL=chunk-
|
|
45
|
+
//# sourceMappingURL=chunk-OT6EQFMP.js.map
|
|
46
|
+
//# sourceMappingURL=chunk-OT6EQFMP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/info-button/InfoButton.tsx"],"names":[],"mappings":";;;;;AAcO,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ,aAAA;AAAA,EACR,WAAA,GAAc,IAAA;AAAA,EACd,WAAA,GAAc,IAAA;AAAA,EACd;AACF,CAAA,EAAoB;AAClB,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAQ,aAAA;AAAA,MACR,SAAA,EAAW,EAAA;AAAA,QACT,UAAA;AAAA,QACA,WAAA,IACE,+EAAA;AAAA,QACF;AAAA,OACF;AAAA,MACA,WAAA,EAAa,CAAC,KAAA,KAAU,KAAA,CAAM,eAAA,EAAgB;AAAA,MAC9C,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,eAAA,EAAgB;AAAA,MAC1C,aAAA,EAAe,CAAC,KAAA,KAAU,KAAA,CAAM,eAAA,EAAgB;AAAA,MAEhD,QAAA,kBAAA,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,yBAAS,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC,CAAA;AAAA,UAC9C,KAAA;AAAA,UACA,gBAAA,EAAiB,4DAAA;AAAA,UACjB,WAAA;AAAA,UACA,cAAA,EAAe,UAAA;AAAA,UAEf,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACZ,QAAA,EAAA;AAAA,YAAA,KAAA,mBAAQ,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qBAAA,EAAuB,iBAAM,CAAA,GAAO,IAAA;AAAA,4BAC1D,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAS;AAAA,WAAA,EAC/D;AAAA;AAAA;AACF;AAAA,GACF;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/info-button/InfoButton.tsx"],"names":[],"mappings":";;;;;AAcO,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ,aAAA;AAAA,EACR,WAAA,GAAc,IAAA;AAAA,EACd,WAAA,GAAc,IAAA;AAAA,EACd;AACF,CAAA,EAAoB;AAClB,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAQ,aAAA;AAAA,MACR,SAAA,EAAW,EAAA;AAAA,QACT,UAAA;AAAA,QACA,WAAA,IACE,+EAAA;AAAA,QACF;AAAA,OACF;AAAA,MACA,WAAA,EAAa,CAAC,KAAA,KAAU,KAAA,CAAM,eAAA,EAAgB;AAAA,MAC9C,OAAA,EAAS,CAAC,KAAA,KAAU,KAAA,CAAM,eAAA,EAAgB;AAAA,MAC1C,aAAA,EAAe,CAAC,KAAA,KAAU,KAAA,CAAM,eAAA,EAAgB;AAAA,MAEhD,QAAA,kBAAA,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,yBAAS,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC,CAAA;AAAA,UAC9C,KAAA;AAAA,UACA,gBAAA,EAAiB,4DAAA;AAAA,UACjB,WAAA;AAAA,UACA,cAAA,EAAe,UAAA;AAAA,UAEf,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACZ,QAAA,EAAA;AAAA,YAAA,KAAA,mBAAQ,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qBAAA,EAAuB,iBAAM,CAAA,GAAO,IAAA;AAAA,4BAC1D,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAS;AAAA,WAAA,EAC/D;AAAA;AAAA;AACF;AAAA,GACF;AAEJ","file":"chunk-OT6EQFMP.js","sourcesContent":["import * as React from 'react'\nimport { Info } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { PopoverButton } from '../popover-button/PopoverButton'\n\nexport interface InfoButtonProps {\n children: React.ReactNode\n title?: React.ReactNode\n label?: string\n showOnHover?: boolean\n openOnHover?: boolean\n className?: string\n}\n\nexport function InfoButton({\n children,\n title,\n label = 'Information',\n showOnHover = true,\n openOnHover = true,\n className,\n}: InfoButtonProps) {\n return (\n <span\n data-as=\"info-button\"\n className={cn(\n 'shrink-0',\n showOnHover &&\n 'opacity-0 transition-opacity focus-within:opacity-100 group-hover:opacity-100',\n className,\n )}\n onMouseDown={(event) => event.stopPropagation()}\n onClick={(event) => event.stopPropagation()}\n onDoubleClick={(event) => event.stopPropagation()}\n >\n <PopoverButton\n trigger={<Info className=\"size-4\" aria-hidden />}\n label={label}\n triggerClassName=\"size-6 text-[var(--as-muted-fg)] hover:text-[var(--as-fg)]\"\n openOnHover={openOnHover}\n panelClassName=\"max-w-xs\"\n >\n <div className=\"space-y-1.5\">\n {title ? <p className=\"text-sm font-medium\">{title}</p> : null}\n <div className=\"text-xs text-[var(--as-muted-fg)]\">{children}</div>\n </div>\n </PopoverButton>\n </span>\n )\n}\n"]}
|
|
@@ -16,7 +16,7 @@ var PopoverContent = React.forwardRef(function PopoverContent2({ className, alig
|
|
|
16
16
|
align,
|
|
17
17
|
sideOffset,
|
|
18
18
|
className: cn(
|
|
19
|
-
"as-anim-pop z-
|
|
19
|
+
"as-anim-pop z-[var(--as-z-popover)] w-72 rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-4 text-[var(--as-fg)] shadow-[var(--as-shadow-3)] focus:outline-none",
|
|
20
20
|
className
|
|
21
21
|
),
|
|
22
22
|
...props
|
|
@@ -25,5 +25,5 @@ var PopoverContent = React.forwardRef(function PopoverContent2({ className, alig
|
|
|
25
25
|
});
|
|
26
26
|
|
|
27
27
|
export { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger };
|
|
28
|
-
//# sourceMappingURL=chunk-
|
|
29
|
-
//# sourceMappingURL=chunk-
|
|
28
|
+
//# sourceMappingURL=chunk-SIIY2EGI.js.map
|
|
29
|
+
//# sourceMappingURL=chunk-SIIY2EGI.js.map
|