@vritti/quantum-ui 0.3.6 → 0.3.7
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/Avatar.js +5 -5
- package/dist/Checkbox2.js +2 -2
- package/dist/Combination.js +1 -1
- package/dist/ConfirmContext.js +20 -1
- package/dist/ConfirmContext.js.map +1 -1
- package/dist/Dialog.js +24 -38
- package/dist/Dialog.js.map +1 -1
- package/dist/DropdownMenu.js +1 -0
- package/dist/DropdownMenu.js.map +1 -1
- package/dist/Progress.js +2 -2
- package/dist/RadioGroup.js +2 -2
- package/dist/Sidebar.js +1 -1
- package/dist/Switch.js +2 -2
- package/dist/TabsSkeleton.js +1 -1
- package/dist/Toggle.js +1 -1
- package/dist/ViewTabs.js +1 -2
- package/dist/ViewTabs.js.map +1 -1
- package/dist/cells.js +50 -21
- package/dist/cells.js.map +1 -1
- package/dist/components/Dialog.js +1 -1
- package/dist/components/RichTextEditor.js +1 -1
- package/dist/dropdown-menu.js +3 -2
- package/dist/dropdown-menu.js.map +1 -1
- package/dist/image-component.js +1 -1
- package/dist/index.js +2 -2
- package/dist/index12.js +3 -2
- package/dist/index12.js.map +1 -1
- package/dist/index13.js +2 -1
- package/dist/index13.js.map +1 -1
- package/dist/index14.js +6 -5
- package/dist/index14.js.map +1 -1
- package/dist/index15.js +1 -1
- package/dist/index16.js +1 -1
- package/dist/index18.js +1 -1
- package/dist/index20.js +1 -1
- package/dist/index21.js +1 -1
- package/dist/index23.js +1 -1
- package/dist/index25.js +3 -2534
- package/dist/index25.js.map +1 -1
- package/dist/index26.js +2526 -22
- package/dist/index26.js.map +1 -1
- package/dist/index27.js +32 -4
- package/dist/index27.js.map +1 -1
- package/dist/index28.js +4 -37
- package/dist/index28.js.map +1 -1
- package/dist/index29.js +36 -310
- package/dist/index29.js.map +1 -1
- package/dist/index30.js +309 -7
- package/dist/index30.js.map +1 -1
- package/dist/index31.js +8 -30
- package/dist/index31.js.map +1 -1
- package/dist/index32.js +29 -59
- package/dist/index32.js.map +1 -1
- package/dist/index33.js +59 -10
- package/dist/index33.js.map +1 -1
- package/dist/index34.js +10 -35
- package/dist/index34.js.map +1 -1
- package/dist/index35.js +27 -36810
- package/dist/index35.js.map +1 -1
- package/dist/index36.js +36809 -70
- package/dist/index36.js.map +1 -1
- package/dist/index37.js +72 -187
- package/dist/index37.js.map +1 -1
- package/dist/index38.js +199 -0
- package/dist/index38.js.map +1 -0
- package/dist/index4.js +1 -1
- package/dist/lib/components/DataTable/components/DataTableImportDialog.d.ts.map +1 -1
- package/dist/lib/components/DataTable/components/DataTableViewTabs.d.ts.map +1 -1
- package/dist/lib/components/DataTable/components/DataTableViewsMenu.d.ts.map +1 -1
- package/dist/lib/components/DataTable/components/RowActions.d.ts.map +1 -1
- package/dist/lib/components/Dialog/Dialog.d.ts +15 -16
- package/dist/lib/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/lib/components/Dialog/index.d.ts +2 -2
- package/dist/lib/components/Dialog/index.d.ts.map +1 -1
- package/dist/lib/components/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/lib/components/DropdownMenu/types.d.ts +2 -1
- package/dist/lib/components/DropdownMenu/types.d.ts.map +1 -1
- package/dist/lib/context/ConfirmContext.d.ts.map +1 -1
- package/dist/trash-2.js +17 -3
- package/dist/trash-2.js.map +1 -1
- package/dist/utils/motion.js +2 -2
- package/dist/value.js +1 -1
- package/package.json +1 -1
- package/dist/plus.js +0 -18
- package/dist/plus.js.map +0 -1
package/dist/Avatar.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { c as createContextScope } from './
|
|
4
|
-
import { u as useCallbackRef } from './
|
|
5
|
-
import { u as useLayoutEffect2 } from './
|
|
6
|
-
import { P as Primitive } from './
|
|
7
|
-
import { r as requireShim } from './
|
|
3
|
+
import { c as createContextScope } from './index33.js';
|
|
4
|
+
import { u as useCallbackRef } from './index31.js';
|
|
5
|
+
import { u as useLayoutEffect2 } from './index28.js';
|
|
6
|
+
import { P as Primitive } from './index29.js';
|
|
7
|
+
import { r as requireShim } from './index38.js';
|
|
8
8
|
import { c as cn } from './utils.js';
|
|
9
9
|
|
|
10
10
|
var shimExports = requireShim();
|
package/dist/Checkbox2.js
CHANGED
|
@@ -3,8 +3,8 @@ import * as React from 'react';
|
|
|
3
3
|
import { u as useComposedRefs } from './index11.js';
|
|
4
4
|
import { c as createContextScope } from './index19.js';
|
|
5
5
|
import { P as Primitive, u as useControllableState, c as composeEventHandlers } from './index18.js';
|
|
6
|
-
import { u as usePrevious } from './
|
|
7
|
-
import { u as useSize } from './
|
|
6
|
+
import { u as usePrevious } from './index34.js';
|
|
7
|
+
import { u as useSize } from './index35.js';
|
|
8
8
|
import { P as Presence } from './index21.js';
|
|
9
9
|
import { c as cn } from './utils.js';
|
|
10
10
|
import { C as Check } from './check.js';
|
package/dist/Combination.js
CHANGED
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import { u as useComposedRefs } from './index11.js';
|
|
4
4
|
import { P as Primitive } from './index18.js';
|
|
5
|
-
import { u as useCallbackRef$1 } from './
|
|
5
|
+
import { u as useCallbackRef$1 } from './index31.js';
|
|
6
6
|
import { jsx } from 'react/jsx-runtime';
|
|
7
7
|
|
|
8
8
|
var count = 0;
|
package/dist/ConfirmContext.js
CHANGED
|
@@ -3,6 +3,23 @@ import { createContext, useState, useRef, useCallback, useMemo } from 'react';
|
|
|
3
3
|
import { A as Alert } from './Alert.js';
|
|
4
4
|
import { B as Button } from './Button.js';
|
|
5
5
|
import { D as Dialog } from './Dialog.js';
|
|
6
|
+
import { T as TriangleAlert } from './triangle-alert.js';
|
|
7
|
+
import { c as createLucideIcon } from './createLucideIcon.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @license lucide-react v0.562.0 - ISC
|
|
11
|
+
*
|
|
12
|
+
* This source code is licensed under the ISC license.
|
|
13
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
const __iconNode = [
|
|
18
|
+
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
19
|
+
["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
|
|
20
|
+
["path", { d: "M12 17h.01", key: "p32p05" }]
|
|
21
|
+
];
|
|
22
|
+
const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode);
|
|
6
23
|
|
|
7
24
|
const DEFAULT_CONFIRM_OPTIONS = {
|
|
8
25
|
title: "Are you sure?",
|
|
@@ -60,8 +77,10 @@ const ConfirmProvider = ({ children, defaultOptions }) => {
|
|
|
60
77
|
Dialog,
|
|
61
78
|
{
|
|
62
79
|
handle,
|
|
80
|
+
icon: options.variant === "destructive" ? TriangleAlert : CircleQuestionMark,
|
|
81
|
+
iconVariant: options.variant,
|
|
63
82
|
title: options.title,
|
|
64
|
-
description: options.description
|
|
83
|
+
description: options.description,
|
|
65
84
|
footer: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
66
85
|
/* @__PURE__ */ jsx(Button, { variant: "outline", type: "button", onClick: handleCancel, children: options.cancelLabel }),
|
|
67
86
|
/* @__PURE__ */ jsx(Button, { variant: options.variant, type: "button", onClick: handleConfirm, children: options.confirmLabel })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmContext.js","sources":["../lib/context/ConfirmContext.tsx"],"sourcesContent":["import { createContext, type ReactNode, useCallback, useMemo, useRef, useState } from 'react';\nimport { Alert } from '../components/Alert';\nimport { Button } from '../components/Button';\nimport { Dialog } from '../components/Dialog';\nimport type { DialogHandle } from '../hooks/useDialog';\n\nexport interface ConfirmAlert {\n type: 'default' | 'destructive' | 'warning' | 'success' | 'info';\n text: string;\n}\n\n// All fields optional — every one has a built-in default\nexport interface ConfirmOptions {\n title?: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n variant?: 'default' | 'destructive';\n alert?: ConfirmAlert;\n}\n\ninterface ResolvedConfirmOptions {\n title: string;\n description: string;\n confirmLabel: string;\n cancelLabel: string;\n variant: 'default' | 'destructive';\n alert?: ConfirmAlert;\n}\n\n// Built-in defaults — used when neither the provider nor the caller provides a value\nconst DEFAULT_CONFIRM_OPTIONS: ResolvedConfirmOptions = {\n title: 'Are you sure?',\n description: '',\n confirmLabel: 'Confirm',\n cancelLabel: 'Cancel',\n variant: 'default',\n};\n\nexport interface ConfirmContextValue {\n confirm: (options?: ConfirmOptions) => Promise<boolean>;\n}\n\nexport const ConfirmContext = createContext<ConfirmContextValue | null>(null);\nConfirmContext.displayName = 'ConfirmContext';\n\nexport interface ConfirmProviderProps {\n children: ReactNode;\n // Override built-in defaults library-wide (still overridden per call)\n defaultOptions?: ConfirmOptions;\n}\n\n// Renders a shared confirm dialog and exposes the imperative confirm() function\nexport const ConfirmProvider = ({ children, defaultOptions }: ConfirmProviderProps) => {\n const [state, setState] = useState<{ open: boolean; options: ResolvedConfirmOptions }>({\n open: false,\n options: DEFAULT_CONFIRM_OPTIONS,\n });\n const resolverRef = useRef<((value: boolean) => void) | null>(null);\n\n const confirm = useCallback(\n (options?: ConfirmOptions): Promise<boolean> => {\n // Resolve any in-flight promise defensively before replacing it\n resolverRef.current?.(false);\n return new Promise<boolean>((resolve) => {\n resolverRef.current = resolve;\n // Merge: built-in defaults -> provider defaults -> per-call options\n setState({\n open: true,\n options: { ...DEFAULT_CONFIRM_OPTIONS, ...defaultOptions, ...options },\n });\n });\n },\n [defaultOptions],\n );\n\n const handleCancel = useCallback(() => {\n resolverRef.current?.(false);\n resolverRef.current = null;\n setState((prev) => ({ ...prev, open: false }));\n }, []);\n\n const handleConfirm = useCallback(() => {\n resolverRef.current?.(true);\n resolverRef.current = null;\n setState((prev) => ({ ...prev, open: false }));\n }, []);\n\n // Build a DialogHandle-compatible object for the Dialog component\n const handle: DialogHandle = useMemo(\n () => ({\n isOpen: state.open,\n open: () => setState((prev) => ({ ...prev, open: true })),\n close: handleCancel,\n onOpenChange: (val: boolean) => {\n if (!val) handleCancel();\n },\n }),\n [state.open, handleCancel],\n );\n\n const { options } = state;\n\n return (\n <ConfirmContext.Provider value={{ confirm }}>\n {children}\n <Dialog\n handle={handle}\n title={options.title}\n description={options.description
|
|
1
|
+
{"version":3,"file":"ConfirmContext.js","sources":["../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js","../lib/context/ConfirmContext.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst CircleQuestionMark = createLucideIcon(\"circle-question-mark\", __iconNode);\n\nexport { __iconNode, CircleQuestionMark as default };\n//# sourceMappingURL=circle-question-mark.js.map\n","import { CircleHelp, TriangleAlert } from 'lucide-react';\nimport { createContext, type ReactNode, useCallback, useMemo, useRef, useState } from 'react';\nimport { Alert } from '../components/Alert';\nimport { Button } from '../components/Button';\nimport { Dialog } from '../components/Dialog';\nimport type { DialogHandle } from '../hooks/useDialog';\n\nexport interface ConfirmAlert {\n type: 'default' | 'destructive' | 'warning' | 'success' | 'info';\n text: string;\n}\n\n// All fields optional — every one has a built-in default\nexport interface ConfirmOptions {\n title?: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n variant?: 'default' | 'destructive';\n alert?: ConfirmAlert;\n}\n\ninterface ResolvedConfirmOptions {\n title: string;\n description: string;\n confirmLabel: string;\n cancelLabel: string;\n variant: 'default' | 'destructive';\n alert?: ConfirmAlert;\n}\n\n// Built-in defaults — used when neither the provider nor the caller provides a value\nconst DEFAULT_CONFIRM_OPTIONS: ResolvedConfirmOptions = {\n title: 'Are you sure?',\n description: '',\n confirmLabel: 'Confirm',\n cancelLabel: 'Cancel',\n variant: 'default',\n};\n\nexport interface ConfirmContextValue {\n confirm: (options?: ConfirmOptions) => Promise<boolean>;\n}\n\nexport const ConfirmContext = createContext<ConfirmContextValue | null>(null);\nConfirmContext.displayName = 'ConfirmContext';\n\nexport interface ConfirmProviderProps {\n children: ReactNode;\n // Override built-in defaults library-wide (still overridden per call)\n defaultOptions?: ConfirmOptions;\n}\n\n// Renders a shared confirm dialog and exposes the imperative confirm() function\nexport const ConfirmProvider = ({ children, defaultOptions }: ConfirmProviderProps) => {\n const [state, setState] = useState<{ open: boolean; options: ResolvedConfirmOptions }>({\n open: false,\n options: DEFAULT_CONFIRM_OPTIONS,\n });\n const resolverRef = useRef<((value: boolean) => void) | null>(null);\n\n const confirm = useCallback(\n (options?: ConfirmOptions): Promise<boolean> => {\n // Resolve any in-flight promise defensively before replacing it\n resolverRef.current?.(false);\n return new Promise<boolean>((resolve) => {\n resolverRef.current = resolve;\n // Merge: built-in defaults -> provider defaults -> per-call options\n setState({\n open: true,\n options: { ...DEFAULT_CONFIRM_OPTIONS, ...defaultOptions, ...options },\n });\n });\n },\n [defaultOptions],\n );\n\n const handleCancel = useCallback(() => {\n resolverRef.current?.(false);\n resolverRef.current = null;\n setState((prev) => ({ ...prev, open: false }));\n }, []);\n\n const handleConfirm = useCallback(() => {\n resolverRef.current?.(true);\n resolverRef.current = null;\n setState((prev) => ({ ...prev, open: false }));\n }, []);\n\n // Build a DialogHandle-compatible object for the Dialog component\n const handle: DialogHandle = useMemo(\n () => ({\n isOpen: state.open,\n open: () => setState((prev) => ({ ...prev, open: true })),\n close: handleCancel,\n onOpenChange: (val: boolean) => {\n if (!val) handleCancel();\n },\n }),\n [state.open, handleCancel],\n );\n\n const { options } = state;\n\n return (\n <ConfirmContext.Provider value={{ confirm }}>\n {children}\n <Dialog\n handle={handle}\n icon={options.variant === 'destructive' ? TriangleAlert : CircleHelp}\n iconVariant={options.variant}\n title={options.title}\n description={options.description}\n footer={\n <>\n <Button variant=\"outline\" type=\"button\" onClick={handleCancel}>\n {options.cancelLabel}\n </Button>\n <Button variant={options.variant} type=\"button\" onClick={handleConfirm}>\n {options.confirmLabel}\n </Button>\n </>\n }\n >\n {options.alert ? <Alert variant={options.alert.type} description={options.alert.text} /> : null}\n </Dialog>\n </ConfirmContext.Provider>\n );\n};\nConfirmProvider.displayName = 'ConfirmProvider';\n"],"names":["options","CircleHelp"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/Dialog.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import { B as Button } from './Button.js';
|
|
3
|
-
import { F as Form } from './Form.js';
|
|
4
|
-
import { R as Root, T as Trigger, C as Content, a as Close, b as Title, D as Description, P as Portal, O as Overlay } from './index29.js';
|
|
5
|
-
import { forwardRef } from 'react';
|
|
6
2
|
import { c as cn } from './utils.js';
|
|
3
|
+
import { R as Root, T as Trigger, C as Content, a as Close, b as Title, D as Description, P as Portal, O as Overlay } from './index30.js';
|
|
4
|
+
import { forwardRef } from 'react';
|
|
7
5
|
import { X } from './x.js';
|
|
8
6
|
|
|
9
7
|
function Dialog$1({ ...props }) {
|
|
@@ -94,48 +92,26 @@ const DialogDescription = forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
94
92
|
));
|
|
95
93
|
DialogDescription.displayName = Description.displayName;
|
|
96
94
|
|
|
95
|
+
function DialogActions({ children, className }) {
|
|
96
|
+
return /* @__PURE__ */ jsx("div", { className: cn("flex flex-col-reverse gap-2 border-t pt-4 sm:flex-row sm:justify-end", className), children });
|
|
97
|
+
}
|
|
98
|
+
DialogActions.displayName = "DialogActions";
|
|
97
99
|
function Dialog({
|
|
98
100
|
handle,
|
|
99
101
|
anchor,
|
|
100
102
|
content,
|
|
101
103
|
trigger,
|
|
104
|
+
icon: Icon,
|
|
105
|
+
iconVariant = "default",
|
|
102
106
|
title,
|
|
103
107
|
description,
|
|
104
108
|
badgeSlot,
|
|
105
109
|
children,
|
|
106
110
|
footer,
|
|
107
|
-
className
|
|
108
|
-
mode = "default",
|
|
109
|
-
form,
|
|
110
|
-
mutation,
|
|
111
|
-
onFormSubmit,
|
|
112
|
-
transformSubmit,
|
|
113
|
-
submitLabel,
|
|
114
|
-
cancelLabel,
|
|
115
|
-
fieldMapping
|
|
111
|
+
className
|
|
116
112
|
}) {
|
|
117
113
|
const renderBody = () => {
|
|
118
114
|
if (content) return content(handle.close);
|
|
119
|
-
if (mode === "form" && form) {
|
|
120
|
-
return /* @__PURE__ */ jsxs(
|
|
121
|
-
Form,
|
|
122
|
-
{
|
|
123
|
-
form,
|
|
124
|
-
mutation,
|
|
125
|
-
onSubmit: onFormSubmit,
|
|
126
|
-
transformSubmit,
|
|
127
|
-
fieldMapping,
|
|
128
|
-
className: "space-y-4",
|
|
129
|
-
children: [
|
|
130
|
-
children,
|
|
131
|
-
/* @__PURE__ */ jsx(DialogFooter, { children: footer ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
132
|
-
/* @__PURE__ */ jsx(Button, { variant: "outline", type: "button", onClick: handle.close, children: cancelLabel ?? "Cancel" }),
|
|
133
|
-
/* @__PURE__ */ jsx(Button, { type: "submit", children: submitLabel ?? "Save" })
|
|
134
|
-
] }) })
|
|
135
|
-
]
|
|
136
|
-
}
|
|
137
|
-
);
|
|
138
|
-
}
|
|
139
115
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
140
116
|
children,
|
|
141
117
|
footer && /* @__PURE__ */ jsx(DialogFooter, { children: footer })
|
|
@@ -144,12 +120,22 @@ function Dialog({
|
|
|
144
120
|
return /* @__PURE__ */ jsxs(Dialog$1, { open: handle.isOpen, onOpenChange: handle.onOpenChange, children: [
|
|
145
121
|
anchor ? anchor(handle.open) : trigger && /* @__PURE__ */ jsx(DialogTrigger, { asChild: true, children: trigger }),
|
|
146
122
|
/* @__PURE__ */ jsxs(DialogContent, { className, children: [
|
|
147
|
-
|
|
148
|
-
|
|
123
|
+
/* @__PURE__ */ jsxs(DialogHeader, { children: [
|
|
124
|
+
/* @__PURE__ */ jsx(DialogTitle, { children: /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2", children: [
|
|
125
|
+
/* @__PURE__ */ jsx(
|
|
126
|
+
"span",
|
|
127
|
+
{
|
|
128
|
+
className: cn(
|
|
129
|
+
"flex size-8 shrink-0 items-center justify-center rounded-lg",
|
|
130
|
+
iconVariant === "destructive" ? "bg-destructive/10 text-destructive" : "bg-primary/10 text-primary"
|
|
131
|
+
),
|
|
132
|
+
children: /* @__PURE__ */ jsx(Icon, { className: "size-4" })
|
|
133
|
+
}
|
|
134
|
+
),
|
|
149
135
|
/* @__PURE__ */ jsx("span", { children: title }),
|
|
150
136
|
badgeSlot
|
|
151
|
-
] })
|
|
152
|
-
|
|
137
|
+
] }) }),
|
|
138
|
+
/* @__PURE__ */ jsx(DialogDescription, { children: description })
|
|
153
139
|
] }),
|
|
154
140
|
renderBody()
|
|
155
141
|
] })
|
|
@@ -157,5 +143,5 @@ function Dialog({
|
|
|
157
143
|
}
|
|
158
144
|
Dialog.displayName = "Dialog";
|
|
159
145
|
|
|
160
|
-
export { Dialog as D };
|
|
146
|
+
export { Dialog as D, DialogActions as a };
|
|
161
147
|
//# sourceMappingURL=Dialog.js.map
|
package/dist/Dialog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.js","sources":["../shadcn/shadcnDialog/dialog.tsx","../lib/components/Dialog/Dialog.tsx"],"sourcesContent":["'use client';\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport type * as React from 'react';\nimport { forwardRef } from 'react';\n\nimport { cn } from '../utils';\n\n// Dialog root wrapper with data-slot attribute\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\n// Dialog trigger wrapper with data-slot attribute\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\n// Dialog portal pass-through\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal {...props} />;\n}\n\n// Dialog close wrapper with data-slot attribute\nfunction DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nconst DialogOverlay = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n data-slot=\"dialog-overlay\"\n className={cn(\n 'fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n data-slot=\"dialog-content\"\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 sm:rounded-lg',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\n// Dialog header layout container\nfunction DialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn('flex flex-col gap-2 text-center sm:text-left', className)}\n {...props}\n />\n );\n}\nDialogHeader.displayName = 'DialogHeader';\n\n// Dialog footer layout container\nfunction DialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)}\n {...props}\n />\n );\n}\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogTitle = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n data-slot=\"dialog-title\"\n className={cn('text-lg font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n data-slot=\"dialog-description\"\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","import type { UseMutationResult } from '@tanstack/react-query';\nimport type React from 'react';\nimport type { FieldValues, UseFormReturn } from 'react-hook-form';\nimport {\n Dialog as ShadcnDialog,\n DialogContent as ShadcnDialogContent,\n DialogDescription as ShadcnDialogDescription,\n DialogFooter as ShadcnDialogFooter,\n DialogHeader as ShadcnDialogHeader,\n DialogTitle as ShadcnDialogTitle,\n DialogTrigger as ShadcnDialogTrigger,\n} from '../../../shadcn/shadcnDialog';\nimport type { DialogHandle } from '../../hooks/useDialog';\nimport type { FieldMapping } from '../../utils/formHelpers';\nimport { Button } from '../Button';\nimport { Form, type FormProps } from '../Form';\n\nexport interface DialogProps<\n TFieldValues extends FieldValues = FieldValues,\n TContext = unknown,\n TTransformedValues extends FieldValues | undefined = TFieldValues,\n TMutationData = unknown,\n TMutationError = Error,\n TMutationVariables = unknown,\n> {\n // Handle from useDialog() — controls open state and cleanup\n handle: DialogHandle;\n // anchor — render prop that receives open(); button renders outside DialogTrigger\n anchor?: (open: () => void) => React.ReactNode;\n // content — render prop that receives close()\n content?: (close: () => void) => React.ReactNode;\n // trigger — legacy ReactNode trigger (wrapped in DialogTrigger automatically)\n trigger?: React.ReactNode;\n title?: React.ReactNode;\n description?: React.ReactNode;\n // Optional badge-style slot rendered inline with the title in the header.\n // Use for short status indicators tied to the dialog's subject (e.g. \"Draft\", \"Derived unit\").\n badgeSlot?: React.ReactNode;\n children?: React.ReactNode;\n footer?: React.ReactNode;\n className?: string;\n // Form mode — wraps children+footer in a Form component\n mode?: 'default' | 'form';\n form?: UseFormReturn<TFieldValues, TContext, TTransformedValues>;\n mutation?: UseMutationResult<TMutationData, TMutationError, TMutationVariables, unknown>;\n onFormSubmit?: FormProps<TFieldValues, TContext, TTransformedValues>['onSubmit'];\n transformSubmit?: FormProps<\n TFieldValues,\n TContext,\n TTransformedValues,\n TMutationData,\n TMutationError,\n TMutationVariables\n >['transformSubmit'];\n submitLabel?: string;\n cancelLabel?: string;\n fieldMapping?: FieldMapping;\n}\n\n// Composite dialog — controlled by a useDialog() handle\nexport function Dialog<\n TFieldValues extends FieldValues = FieldValues,\n TContext = unknown,\n TTransformedValues extends FieldValues | undefined = TFieldValues,\n TMutationData = unknown,\n TMutationError = Error,\n TMutationVariables = unknown,\n>({\n handle,\n anchor,\n content,\n trigger,\n title,\n description,\n badgeSlot,\n children,\n footer,\n className,\n mode = 'default',\n form,\n mutation,\n onFormSubmit,\n transformSubmit,\n submitLabel,\n cancelLabel,\n fieldMapping,\n}: DialogProps<TFieldValues, TContext, TTransformedValues, TMutationData, TMutationError, TMutationVariables>) {\n // Render the body+footer content — shared between default and form modes\n const renderBody = () => {\n if (content) return content(handle.close);\n\n if (mode === 'form' && form) {\n return (\n <Form\n form={form}\n mutation={mutation}\n onSubmit={onFormSubmit}\n transformSubmit={transformSubmit}\n fieldMapping={fieldMapping}\n className=\"space-y-4\"\n >\n {children}\n <ShadcnDialogFooter>\n {footer ?? (\n <>\n <Button variant=\"outline\" type=\"button\" onClick={handle.close}>\n {cancelLabel ?? 'Cancel'}\n </Button>\n <Button type=\"submit\">{submitLabel ?? 'Save'}</Button>\n </>\n )}\n </ShadcnDialogFooter>\n </Form>\n );\n }\n\n return (\n <>\n {children}\n {footer && <ShadcnDialogFooter>{footer}</ShadcnDialogFooter>}\n </>\n );\n };\n\n return (\n <ShadcnDialog open={handle.isOpen} onOpenChange={handle.onOpenChange}>\n {anchor ? anchor(handle.open) : trigger && <ShadcnDialogTrigger asChild>{trigger}</ShadcnDialogTrigger>}\n <ShadcnDialogContent className={className}>\n {(title || description) && (\n <ShadcnDialogHeader>\n {title && (\n <ShadcnDialogTitle>\n {badgeSlot ? (\n <span className=\"flex items-center gap-2\">\n <span>{title}</span>\n {badgeSlot}\n </span>\n ) : (\n title\n )}\n </ShadcnDialogTitle>\n )}\n {description && <ShadcnDialogDescription>{description}</ShadcnDialogDescription>}\n </ShadcnDialogHeader>\n )}\n {renderBody()}\n </ShadcnDialogContent>\n </ShadcnDialog>\n );\n}\n\nDialog.displayName = 'Dialog';\n"],"names":["Dialog","DialogPrimitive.Root","DialogPrimitive.Trigger","DialogPrimitive.Portal","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogPrimitive.Close","DialogPrimitive.Title","DialogPrimitive.Description","ShadcnDialogFooter","ShadcnDialog","ShadcnDialogTrigger","ShadcnDialogContent","ShadcnDialogHeader","ShadcnDialogTitle","ShadcnDialogDescription"],"mappings":";;;;;;;;AAUA,SAASA,QAAA,CAAO,EAAE,GAAG,KAAA,EAAM,EAAsD;AAC/E,EAAA,2BAAQC,IAAgB,EAAhB,EAAqB,WAAA,EAAU,QAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAC7D;AAGA,SAAS,aAAA,CAAc,EAAE,GAAG,KAAA,EAAM,EAAyD;AACzF,EAAA,2BAAQC,OAAgB,EAAhB,EAAwB,WAAA,EAAU,gBAAA,EAAkB,GAAG,KAAA,EAAO,CAAA;AACxE;AAGA,SAAS,YAAA,CAAa,EAAE,GAAG,KAAA,EAAM,EAAwD;AACvF,EAAA,uBAAO,GAAA,CAACC,MAAgB,EAAhB,EAAwB,GAAG,KAAA,EAAO,CAAA;AAC5C;AAOA,MAAM,aAAA,GAAgB,WAGpB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAACC,OAAgB;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,gBAAA;AAAA,IACV,SAAA,EAAW,EAAA;AAAA,MACT,wJAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD,CAAA;AACD,aAAA,CAAc,WAAA,GAAcA,OAAgB,CAAQ,WAAA;AAEpD,MAAM,aAAA,GAAgB,UAAA,CAGpB,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpC,IAAA,CAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,kBAAA,GAAA,CAAC,aAAA,EAAA,EAAc,CAAA;AAAA,kBACf,IAAA;AAAA,IAACC,OAAgB;AAAA,IAAhB;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qVAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACD,IAAA,CAACC,KAAgB,EAAhB,EAAsB,WAAU,+QAAA,EAC/B,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,CAAA,EAAA,EAAE,WAAU,SAAA,EAAU,CAAA;AAAA,0BACvB,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,OAAA,EAAK;AAAA,SAAA,EACjC;AAAA;AAAA;AAAA;AACF,CAAA,EACF,CACD,CAAA;AACD,aAAA,CAAc,WAAA,GAAcD,OAAgB,CAAQ,WAAA;AAGpD,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAyC;AACnF,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,8CAAA,EAAgD,SAAS,CAAA;AAAA,MACtE,GAAG;AAAA;AAAA,GACN;AAEJ;AACA,YAAA,CAAa,WAAA,GAAc,cAAA;AAG3B,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAyC;AACnF,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,wDAAA,EAA0D,SAAS,CAAA;AAAA,MAChF,GAAG;AAAA;AAAA,GACN;AAEJ;AACA,YAAA,CAAa,WAAA,GAAc,cAAA;AAE3B,MAAM,WAAA,GAAc,WAGlB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAACE,KAAgB;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,cAAA;AAAA,IACV,SAAA,EAAW,EAAA,CAAG,mDAAA,EAAqD,SAAS,CAAA;AAAA,IAC3E,GAAG;AAAA;AACN,CACD,CAAA;AACD,WAAA,CAAY,WAAA,GAAcA,KAAgB,CAAM,WAAA;AAEhD,MAAM,iBAAA,GAAoB,WAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAACC,WAAgB;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,oBAAA;AAAA,IACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,IACvD,GAAG;AAAA;AACN,CACD,CAAA;AACD,iBAAA,CAAkB,WAAA,GAAcA,WAAgB,CAAY,WAAA;;AC1DrD,SAAS,MAAA,CAOd;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,IAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAA+G;AAE7G,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,IAAI,OAAA,EAAS,OAAO,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA;AAExC,IAAA,IAAI,IAAA,KAAS,UAAU,IAAA,EAAM;AAC3B,MAAA,uBACE,IAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,QAAA;AAAA,UACA,QAAA,EAAU,YAAA;AAAA,UACV,eAAA;AAAA,UACA,YAAA;AAAA,UACA,SAAA,EAAU,WAAA;AAAA,UAET,QAAA,EAAA;AAAA,YAAA,QAAA;AAAA,4BACD,GAAA,CAACC,YAAA,EAAA,EACE,QAAA,EAAA,MAAA,oBACC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAO,SAAQ,SAAA,EAAU,IAAA,EAAK,UAAS,OAAA,EAAS,MAAA,CAAO,KAAA,EACrD,QAAA,EAAA,WAAA,IAAe,QAAA,EAClB,CAAA;AAAA,8BACA,GAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAU,yBAAe,MAAA,EAAO;AAAA,aAAA,EAC/C,CAAA,EAEJ;AAAA;AAAA;AAAA,OACF;AAAA,IAEJ;AAEA,IAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,MACA,MAAA,oBAAU,GAAA,CAACA,YAAA,EAAA,EAAoB,QAAA,EAAA,MAAA,EAAO;AAAA,KAAA,EACzC,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,4BACGC,QAAA,EAAA,EAAa,IAAA,EAAM,OAAO,MAAA,EAAQ,YAAA,EAAc,OAAO,YAAA,EACrD,QAAA,EAAA;AAAA,IAAA,MAAA,GAAS,MAAA,CAAO,OAAO,IAAI,CAAA,GAAI,2BAAW,GAAA,CAACC,aAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EAAE,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,oBACjF,IAAA,CAACC,iBAAoB,SAAA,EACjB,QAAA,EAAA;AAAA,MAAA,CAAA,KAAA,IAAS,WAAA,0BACRC,YAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,KAAA,wBACEC,WAAA,EAAA,EACE,QAAA,EAAA,SAAA,mBACC,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,yBAAA,EACd,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACZ;AAAA,SAAA,EACH,IAEA,KAAA,EAEJ,CAAA;AAAA,QAED,WAAA,oBAAe,GAAA,CAACC,iBAAA,EAAA,EAAyB,QAAA,EAAA,WAAA,EAAY;AAAA,OAAA,EACxD,CAAA;AAAA,MAED,UAAA;AAAW,KAAA,EACd;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"Dialog.js","sources":["../shadcn/shadcnDialog/dialog.tsx","../lib/components/Dialog/Dialog.tsx"],"sourcesContent":["'use client';\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport type * as React from 'react';\nimport { forwardRef } from 'react';\n\nimport { cn } from '../utils';\n\n// Dialog root wrapper with data-slot attribute\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\n// Dialog trigger wrapper with data-slot attribute\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\n// Dialog portal pass-through\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal {...props} />;\n}\n\n// Dialog close wrapper with data-slot attribute\nfunction DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nconst DialogOverlay = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n data-slot=\"dialog-overlay\"\n className={cn(\n 'fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n data-slot=\"dialog-content\"\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 sm:rounded-lg',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\n// Dialog header layout container\nfunction DialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn('flex flex-col gap-2 text-center sm:text-left', className)}\n {...props}\n />\n );\n}\nDialogHeader.displayName = 'DialogHeader';\n\n// Dialog footer layout container\nfunction DialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)}\n {...props}\n />\n );\n}\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogTitle = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n data-slot=\"dialog-title\"\n className={cn('text-lg font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n data-slot=\"dialog-description\"\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","import type { LucideIcon } from 'lucide-react';\nimport type React from 'react';\nimport {\n Dialog as ShadcnDialog,\n DialogContent as ShadcnDialogContent,\n DialogDescription as ShadcnDialogDescription,\n DialogFooter as ShadcnDialogFooter,\n DialogHeader as ShadcnDialogHeader,\n DialogTitle as ShadcnDialogTitle,\n DialogTrigger as ShadcnDialogTrigger,\n} from '../../../shadcn/shadcnDialog';\nimport { cn } from '../../../shadcn/utils';\nimport type { DialogHandle } from '../../hooks/useDialog';\n\nexport interface DialogActionsProps {\n children: React.ReactNode;\n className?: string;\n}\n\n// Standard dialog/form action bar — a top divider with right-aligned buttons that stack on mobile.\n// Use to wrap a form's submit/cancel buttons so every dialog shares the same footer layout.\nexport function DialogActions({ children, className }: DialogActionsProps) {\n return (\n <div className={cn('flex flex-col-reverse gap-2 border-t pt-4 sm:flex-row sm:justify-end', className)}>\n {children}\n </div>\n );\n}\n\nDialogActions.displayName = 'DialogActions';\n\nexport interface DialogProps {\n // Handle from useDialog() — controls open state and cleanup\n handle: DialogHandle;\n // anchor — render prop that receives open(); button renders outside DialogTrigger\n anchor?: (open: () => void) => React.ReactNode;\n // content — render prop that receives close()\n content?: (close: () => void) => React.ReactNode;\n // trigger — legacy ReactNode trigger (wrapped in DialogTrigger automatically)\n trigger?: React.ReactNode;\n // Required header icon — rendered as a badge before the title to standardize dialog headers.\n icon: LucideIcon;\n // Colour of the header icon badge. Use 'destructive' for delete/confirm-destructive dialogs.\n iconVariant?: 'default' | 'destructive';\n title: React.ReactNode;\n description: React.ReactNode;\n // Optional badge-style slot rendered inline with the title in the header.\n // Use for short status indicators tied to the dialog's subject (e.g. \"Draft\", \"Derived unit\").\n badgeSlot?: React.ReactNode;\n children?: React.ReactNode;\n footer?: React.ReactNode;\n className?: string;\n}\n\n// Composite dialog — controlled by a useDialog() handle\nexport function Dialog({\n handle,\n anchor,\n content,\n trigger,\n icon: Icon,\n iconVariant = 'default',\n title,\n description,\n badgeSlot,\n children,\n footer,\n className,\n}: DialogProps) {\n // Render the body — a `content` render-prop, or `children` plus an optional `footer`.\n const renderBody = () => {\n if (content) return content(handle.close);\n\n return (\n <>\n {children}\n {footer && <ShadcnDialogFooter>{footer}</ShadcnDialogFooter>}\n </>\n );\n };\n\n return (\n <ShadcnDialog open={handle.isOpen} onOpenChange={handle.onOpenChange}>\n {anchor ? anchor(handle.open) : trigger && <ShadcnDialogTrigger asChild>{trigger}</ShadcnDialogTrigger>}\n <ShadcnDialogContent className={className}>\n <ShadcnDialogHeader>\n <ShadcnDialogTitle>\n <span className=\"flex items-center gap-2\">\n <span\n className={cn(\n 'flex size-8 shrink-0 items-center justify-center rounded-lg',\n iconVariant === 'destructive' ? 'bg-destructive/10 text-destructive' : 'bg-primary/10 text-primary',\n )}\n >\n <Icon className=\"size-4\" />\n </span>\n <span>{title}</span>\n {badgeSlot}\n </span>\n </ShadcnDialogTitle>\n <ShadcnDialogDescription>{description}</ShadcnDialogDescription>\n </ShadcnDialogHeader>\n {renderBody()}\n </ShadcnDialogContent>\n </ShadcnDialog>\n );\n}\n\nDialog.displayName = 'Dialog';\n"],"names":["Dialog","DialogPrimitive.Root","DialogPrimitive.Trigger","DialogPrimitive.Portal","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogPrimitive.Close","DialogPrimitive.Title","DialogPrimitive.Description","ShadcnDialogFooter","ShadcnDialog","ShadcnDialogTrigger","ShadcnDialogContent","ShadcnDialogHeader","ShadcnDialogTitle","ShadcnDialogDescription"],"mappings":"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"}
|
package/dist/DropdownMenu.js
CHANGED
package/dist/DropdownMenu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownMenu.js","sources":["../lib/components/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["import type React from 'react';\nimport { Fragment, useState } from 'react';\nimport {\n DropdownMenuCheckboxItem as ShadcnDropdownMenuCheckboxItem,\n DropdownMenuContent as ShadcnDropdownMenuContent,\n DropdownMenuGroup as ShadcnDropdownMenuGroup,\n DropdownMenuItem as ShadcnDropdownMenuItem,\n DropdownMenuLabel as ShadcnDropdownMenuLabel,\n DropdownMenuPortal as ShadcnDropdownMenuPortal,\n DropdownMenuRadioGroup as ShadcnDropdownMenuRadioGroup,\n DropdownMenuRadioItem as ShadcnDropdownMenuRadioItem,\n DropdownMenu as ShadcnDropdownMenuRoot,\n DropdownMenuSeparator as ShadcnDropdownMenuSeparator,\n DropdownMenuShortcut as ShadcnDropdownMenuShortcut,\n DropdownMenuSub as ShadcnDropdownMenuSub,\n DropdownMenuSubContent as ShadcnDropdownMenuSubContent,\n DropdownMenuSubTrigger as ShadcnDropdownMenuSubTrigger,\n DropdownMenuTrigger as ShadcnDropdownMenuTrigger,\n} from '../../../shadcn/shadcnDropdownMenu';\nimport type { DialogHandle } from '../../hooks/useDialog';\nimport { Button } from '../Button';\nimport { Dialog } from '../Dialog';\nimport type { DialogMenuItem, DropdownMenuProps, MenuItem } from './types';\n\nconst DropdownMenuRoot = ShadcnDropdownMenuRoot;\nconst DropdownMenuCheckboxItem = ShadcnDropdownMenuCheckboxItem;\nconst DropdownMenuContent = ShadcnDropdownMenuContent;\nconst DropdownMenuGroup = ShadcnDropdownMenuGroup;\nconst DropdownMenuItem = ShadcnDropdownMenuItem;\nconst DropdownMenuLabel = ShadcnDropdownMenuLabel;\nconst DropdownMenuPortal = ShadcnDropdownMenuPortal;\nconst DropdownMenuRadioGroup = ShadcnDropdownMenuRadioGroup;\nconst DropdownMenuRadioItem = ShadcnDropdownMenuRadioItem;\nconst DropdownMenuSeparator = ShadcnDropdownMenuSeparator;\nconst DropdownMenuShortcut = ShadcnDropdownMenuShortcut;\nconst DropdownMenuSub = ShadcnDropdownMenuSub;\nconst DropdownMenuSubContent = ShadcnDropdownMenuSubContent;\nconst DropdownMenuSubTrigger = ShadcnDropdownMenuSubTrigger;\nconst DropdownMenuTrigger = ShadcnDropdownMenuTrigger;\n\n// Renders a single menu item based on its type — supports nested submenus\nconst renderMenuItem = (item: MenuItem, index: number, onDialogSelect?: (id: string) => void): React.ReactNode => {\n switch (item.type) {\n case 'separator':\n return <DropdownMenuSeparator key={item.id ?? `separator-${index}`} />;\n\n case 'label':\n return <DropdownMenuLabel key={item.id}>{item.label}</DropdownMenuLabel>;\n\n case 'item': {\n const Icon = item.icon;\n return (\n <DropdownMenuItem\n key={item.id}\n onClick={item.onClick}\n disabled={item.disabled}\n className={item.variant === 'destructive' ? 'text-destructive focus:text-destructive' : undefined}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n <span>{item.label}</span>\n {item.shortcut && <DropdownMenuShortcut>{item.shortcut}</DropdownMenuShortcut>}\n </DropdownMenuItem>\n );\n }\n\n case 'checkbox': {\n const Icon = item.icon;\n return (\n <DropdownMenuCheckboxItem\n key={item.id}\n checked={item.checked}\n onCheckedChange={item.onCheckedChange}\n disabled={item.disabled}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n {item.label}\n </DropdownMenuCheckboxItem>\n );\n }\n\n case 'radio-group':\n return (\n <DropdownMenuRadioGroup key={item.id} value={item.value} onValueChange={item.onValueChange}>\n {item.items.map((radioItem) => {\n const Icon = radioItem.icon;\n return (\n <DropdownMenuRadioItem key={radioItem.value} value={radioItem.value} disabled={radioItem.disabled}>\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n {radioItem.label}\n </DropdownMenuRadioItem>\n );\n })}\n </DropdownMenuRadioGroup>\n );\n\n case 'sub': {\n const Icon = item.icon;\n return (\n <DropdownMenuSub key={item.id}>\n <DropdownMenuSubTrigger disabled={item.disabled}>\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n <span>{item.label}</span>\n </DropdownMenuSubTrigger>\n <DropdownMenuPortal>\n <DropdownMenuSubContent>\n {item.items.map((subItem, subIndex) => renderMenuItem(subItem, subIndex, onDialogSelect))}\n </DropdownMenuSubContent>\n </DropdownMenuPortal>\n </DropdownMenuSub>\n );\n }\n\n case 'group':\n return (\n <DropdownMenuGroup key={item.id}>\n {item.label && <DropdownMenuLabel>{item.label}</DropdownMenuLabel>}\n {item.items.map((groupItem, groupIndex) => renderMenuItem(groupItem, groupIndex, onDialogSelect))}\n </DropdownMenuGroup>\n );\n\n case 'dialog': {\n const Icon = item.icon;\n return (\n <DropdownMenuItem\n key={item.id}\n disabled={item.disabled}\n onSelect={(e) => {\n e.preventDefault();\n onDialogSelect?.(item.id);\n }}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n <span>{item.label}</span>\n </DropdownMenuItem>\n );\n }\n\n case 'custom': {\n const content = typeof item.render === 'function' ? item.render() : item.render;\n if (item.asMenuItem) {\n return (\n <DropdownMenuItem key={item.id} onClick={item.onClick} disabled={item.disabled}>\n {content}\n </DropdownMenuItem>\n );\n }\n return <Fragment key={item.id}>{content}</Fragment>;\n }\n\n default:\n return null;\n }\n};\n\n/**\n * DropdownMenu - A flexible, data-driven dropdown menu component\n *\n * This component provides a declarative API for building dropdown menus without\n * manually composing primitive components. It supports all dropdown menu features\n * including items, checkboxes, radio groups, submenus, separators, labels, and groups.\n *\n * @example\n * ```tsx\n * import { DropdownMenu } from '@vritti/quantum-ui/DropdownMenu';\n * import { Settings, User, LogOut } from 'lucide-react';\n *\n * function UserMenu() {\n * const [showStatus, setShowStatus] = useState(true);\n *\n * return (\n * <DropdownMenu\n * trigger={{ label: 'Menu', variant: 'outline' }}\n * items={[\n * { type: 'label', id: 'account-label', label: 'My Account' },\n * { type: 'item', id: 'profile', label: 'Profile', icon: User, shortcut: '⌘P' },\n * { type: 'item', id: 'settings', label: 'Settings', icon: Settings },\n * { type: 'separator' },\n * {\n * type: 'checkbox',\n * id: 'status',\n * label: 'Show Status',\n * checked: showStatus,\n * onCheckedChange: setShowStatus,\n * },\n * { type: 'separator' },\n * {\n * type: 'item',\n * id: 'logout',\n * label: 'Log out',\n * icon: LogOut,\n * variant: 'destructive',\n * },\n * ]}\n * align=\"end\"\n * />\n * );\n * }\n * ```\n */\nexport const DropdownMenu: React.FC<DropdownMenuProps> = ({\n trigger,\n items,\n modal = false,\n contentClassName,\n align = 'end',\n side,\n}) => {\n const [activeDialogId, setActiveDialogId] = useState<string | null>(null);\n const TriggerIcon = trigger.icon;\n\n // Collect all dialog-type items (including nested) for rendering outside the Radix root\n const collectDialogItems = (menuItems: MenuItem[]): DialogMenuItem[] => {\n const result: DialogMenuItem[] = [];\n for (const item of menuItems) {\n if (item.type === 'dialog') result.push(item);\n if (item.type === 'sub' || item.type === 'group') result.push(...collectDialogItems(item.items));\n }\n return result;\n };\n\n const dialogItems = collectDialogItems(items);\n\n return (\n <>\n <DropdownMenuRoot modal={modal}>\n <DropdownMenuTrigger asChild>\n {trigger.children ?? (\n <Button variant={trigger.variant} className={trigger.className}>\n {TriggerIcon && <TriggerIcon className=\"mr-2 h-4 w-4\" />}\n {trigger.label}\n </Button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className={contentClassName}\n align={align}\n side={side}\n onCloseAutoFocus={(event) => {\n if (!modal) {\n event.preventDefault();\n }\n }}\n >\n {items.map((item, index) => renderMenuItem(item, index, setActiveDialogId))}\n </DropdownMenuContent>\n </DropdownMenuRoot>\n {dialogItems.map((item) => {\n const handle: DialogHandle = {\n isOpen: activeDialogId === item.id,\n open: () => setActiveDialogId(item.id),\n close: () => setActiveDialogId(null),\n onOpenChange: (val) => {\n if (!val) setActiveDialogId(null);\n },\n };\n return (\n <Dialog\n key={item.id}\n handle={handle}\n title={item.dialog.title}\n description={item.dialog.description}\n badgeSlot={item.dialog.badgeSlot}\n content={item.dialog.content}\n footer={item.dialog.footer}\n />\n );\n })}\n </>\n );\n};\n\nDropdownMenu.displayName = 'DropdownMenu';\n"],"names":["ShadcnDropdownMenuRoot","ShadcnDropdownMenuCheckboxItem","ShadcnDropdownMenuContent","ShadcnDropdownMenuGroup","ShadcnDropdownMenuItem","ShadcnDropdownMenuLabel","ShadcnDropdownMenuPortal","ShadcnDropdownMenuRadioGroup","ShadcnDropdownMenuRadioItem","ShadcnDropdownMenuSeparator","ShadcnDropdownMenuShortcut","ShadcnDropdownMenuSub","ShadcnDropdownMenuSubContent","ShadcnDropdownMenuSubTrigger","ShadcnDropdownMenuTrigger","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DropdownMenu.js","sources":["../lib/components/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["import type React from 'react';\nimport { Fragment, useState } from 'react';\nimport {\n DropdownMenuCheckboxItem as ShadcnDropdownMenuCheckboxItem,\n DropdownMenuContent as ShadcnDropdownMenuContent,\n DropdownMenuGroup as ShadcnDropdownMenuGroup,\n DropdownMenuItem as ShadcnDropdownMenuItem,\n DropdownMenuLabel as ShadcnDropdownMenuLabel,\n DropdownMenuPortal as ShadcnDropdownMenuPortal,\n DropdownMenuRadioGroup as ShadcnDropdownMenuRadioGroup,\n DropdownMenuRadioItem as ShadcnDropdownMenuRadioItem,\n DropdownMenu as ShadcnDropdownMenuRoot,\n DropdownMenuSeparator as ShadcnDropdownMenuSeparator,\n DropdownMenuShortcut as ShadcnDropdownMenuShortcut,\n DropdownMenuSub as ShadcnDropdownMenuSub,\n DropdownMenuSubContent as ShadcnDropdownMenuSubContent,\n DropdownMenuSubTrigger as ShadcnDropdownMenuSubTrigger,\n DropdownMenuTrigger as ShadcnDropdownMenuTrigger,\n} from '../../../shadcn/shadcnDropdownMenu';\nimport type { DialogHandle } from '../../hooks/useDialog';\nimport { Button } from '../Button';\nimport { Dialog } from '../Dialog';\nimport type { DialogMenuItem, DropdownMenuProps, MenuItem } from './types';\n\nconst DropdownMenuRoot = ShadcnDropdownMenuRoot;\nconst DropdownMenuCheckboxItem = ShadcnDropdownMenuCheckboxItem;\nconst DropdownMenuContent = ShadcnDropdownMenuContent;\nconst DropdownMenuGroup = ShadcnDropdownMenuGroup;\nconst DropdownMenuItem = ShadcnDropdownMenuItem;\nconst DropdownMenuLabel = ShadcnDropdownMenuLabel;\nconst DropdownMenuPortal = ShadcnDropdownMenuPortal;\nconst DropdownMenuRadioGroup = ShadcnDropdownMenuRadioGroup;\nconst DropdownMenuRadioItem = ShadcnDropdownMenuRadioItem;\nconst DropdownMenuSeparator = ShadcnDropdownMenuSeparator;\nconst DropdownMenuShortcut = ShadcnDropdownMenuShortcut;\nconst DropdownMenuSub = ShadcnDropdownMenuSub;\nconst DropdownMenuSubContent = ShadcnDropdownMenuSubContent;\nconst DropdownMenuSubTrigger = ShadcnDropdownMenuSubTrigger;\nconst DropdownMenuTrigger = ShadcnDropdownMenuTrigger;\n\n// Renders a single menu item based on its type — supports nested submenus\nconst renderMenuItem = (item: MenuItem, index: number, onDialogSelect?: (id: string) => void): React.ReactNode => {\n switch (item.type) {\n case 'separator':\n return <DropdownMenuSeparator key={item.id ?? `separator-${index}`} />;\n\n case 'label':\n return <DropdownMenuLabel key={item.id}>{item.label}</DropdownMenuLabel>;\n\n case 'item': {\n const Icon = item.icon;\n return (\n <DropdownMenuItem\n key={item.id}\n onClick={item.onClick}\n disabled={item.disabled}\n className={item.variant === 'destructive' ? 'text-destructive focus:text-destructive' : undefined}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n <span>{item.label}</span>\n {item.shortcut && <DropdownMenuShortcut>{item.shortcut}</DropdownMenuShortcut>}\n </DropdownMenuItem>\n );\n }\n\n case 'checkbox': {\n const Icon = item.icon;\n return (\n <DropdownMenuCheckboxItem\n key={item.id}\n checked={item.checked}\n onCheckedChange={item.onCheckedChange}\n disabled={item.disabled}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n {item.label}\n </DropdownMenuCheckboxItem>\n );\n }\n\n case 'radio-group':\n return (\n <DropdownMenuRadioGroup key={item.id} value={item.value} onValueChange={item.onValueChange}>\n {item.items.map((radioItem) => {\n const Icon = radioItem.icon;\n return (\n <DropdownMenuRadioItem key={radioItem.value} value={radioItem.value} disabled={radioItem.disabled}>\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n {radioItem.label}\n </DropdownMenuRadioItem>\n );\n })}\n </DropdownMenuRadioGroup>\n );\n\n case 'sub': {\n const Icon = item.icon;\n return (\n <DropdownMenuSub key={item.id}>\n <DropdownMenuSubTrigger disabled={item.disabled}>\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n <span>{item.label}</span>\n </DropdownMenuSubTrigger>\n <DropdownMenuPortal>\n <DropdownMenuSubContent>\n {item.items.map((subItem, subIndex) => renderMenuItem(subItem, subIndex, onDialogSelect))}\n </DropdownMenuSubContent>\n </DropdownMenuPortal>\n </DropdownMenuSub>\n );\n }\n\n case 'group':\n return (\n <DropdownMenuGroup key={item.id}>\n {item.label && <DropdownMenuLabel>{item.label}</DropdownMenuLabel>}\n {item.items.map((groupItem, groupIndex) => renderMenuItem(groupItem, groupIndex, onDialogSelect))}\n </DropdownMenuGroup>\n );\n\n case 'dialog': {\n const Icon = item.icon;\n return (\n <DropdownMenuItem\n key={item.id}\n disabled={item.disabled}\n onSelect={(e) => {\n e.preventDefault();\n onDialogSelect?.(item.id);\n }}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n <span>{item.label}</span>\n </DropdownMenuItem>\n );\n }\n\n case 'custom': {\n const content = typeof item.render === 'function' ? item.render() : item.render;\n if (item.asMenuItem) {\n return (\n <DropdownMenuItem key={item.id} onClick={item.onClick} disabled={item.disabled}>\n {content}\n </DropdownMenuItem>\n );\n }\n return <Fragment key={item.id}>{content}</Fragment>;\n }\n\n default:\n return null;\n }\n};\n\n/**\n * DropdownMenu - A flexible, data-driven dropdown menu component\n *\n * This component provides a declarative API for building dropdown menus without\n * manually composing primitive components. It supports all dropdown menu features\n * including items, checkboxes, radio groups, submenus, separators, labels, and groups.\n *\n * @example\n * ```tsx\n * import { DropdownMenu } from '@vritti/quantum-ui/DropdownMenu';\n * import { Settings, User, LogOut } from 'lucide-react';\n *\n * function UserMenu() {\n * const [showStatus, setShowStatus] = useState(true);\n *\n * return (\n * <DropdownMenu\n * trigger={{ label: 'Menu', variant: 'outline' }}\n * items={[\n * { type: 'label', id: 'account-label', label: 'My Account' },\n * { type: 'item', id: 'profile', label: 'Profile', icon: User, shortcut: '⌘P' },\n * { type: 'item', id: 'settings', label: 'Settings', icon: Settings },\n * { type: 'separator' },\n * {\n * type: 'checkbox',\n * id: 'status',\n * label: 'Show Status',\n * checked: showStatus,\n * onCheckedChange: setShowStatus,\n * },\n * { type: 'separator' },\n * {\n * type: 'item',\n * id: 'logout',\n * label: 'Log out',\n * icon: LogOut,\n * variant: 'destructive',\n * },\n * ]}\n * align=\"end\"\n * />\n * );\n * }\n * ```\n */\nexport const DropdownMenu: React.FC<DropdownMenuProps> = ({\n trigger,\n items,\n modal = false,\n contentClassName,\n align = 'end',\n side,\n}) => {\n const [activeDialogId, setActiveDialogId] = useState<string | null>(null);\n const TriggerIcon = trigger.icon;\n\n // Collect all dialog-type items (including nested) for rendering outside the Radix root\n const collectDialogItems = (menuItems: MenuItem[]): DialogMenuItem[] => {\n const result: DialogMenuItem[] = [];\n for (const item of menuItems) {\n if (item.type === 'dialog') result.push(item);\n if (item.type === 'sub' || item.type === 'group') result.push(...collectDialogItems(item.items));\n }\n return result;\n };\n\n const dialogItems = collectDialogItems(items);\n\n return (\n <>\n <DropdownMenuRoot modal={modal}>\n <DropdownMenuTrigger asChild>\n {trigger.children ?? (\n <Button variant={trigger.variant} className={trigger.className}>\n {TriggerIcon && <TriggerIcon className=\"mr-2 h-4 w-4\" />}\n {trigger.label}\n </Button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className={contentClassName}\n align={align}\n side={side}\n onCloseAutoFocus={(event) => {\n if (!modal) {\n event.preventDefault();\n }\n }}\n >\n {items.map((item, index) => renderMenuItem(item, index, setActiveDialogId))}\n </DropdownMenuContent>\n </DropdownMenuRoot>\n {dialogItems.map((item) => {\n const handle: DialogHandle = {\n isOpen: activeDialogId === item.id,\n open: () => setActiveDialogId(item.id),\n close: () => setActiveDialogId(null),\n onOpenChange: (val) => {\n if (!val) setActiveDialogId(null);\n },\n };\n return (\n <Dialog\n key={item.id}\n handle={handle}\n icon={item.icon}\n title={item.dialog.title}\n description={item.dialog.description}\n badgeSlot={item.dialog.badgeSlot}\n content={item.dialog.content}\n footer={item.dialog.footer}\n />\n );\n })}\n </>\n );\n};\n\nDropdownMenu.displayName = 'DropdownMenu';\n"],"names":["ShadcnDropdownMenuRoot","ShadcnDropdownMenuCheckboxItem","ShadcnDropdownMenuContent","ShadcnDropdownMenuGroup","ShadcnDropdownMenuItem","ShadcnDropdownMenuLabel","ShadcnDropdownMenuPortal","ShadcnDropdownMenuRadioGroup","ShadcnDropdownMenuRadioItem","ShadcnDropdownMenuSeparator","ShadcnDropdownMenuShortcut","ShadcnDropdownMenuSub","ShadcnDropdownMenuSubContent","ShadcnDropdownMenuSubTrigger","ShadcnDropdownMenuTrigger","Fragment"],"mappings":"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"}
|
package/dist/Progress.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { forwardRef } from 'react';
|
|
4
|
-
import { c as createContextScope } from './
|
|
5
|
-
import { P as Primitive } from './
|
|
4
|
+
import { c as createContextScope } from './index33.js';
|
|
5
|
+
import { P as Primitive } from './index29.js';
|
|
6
6
|
import { c as cn } from './utils.js';
|
|
7
7
|
|
|
8
8
|
var PROGRESS_NAME = "Progress";
|
package/dist/RadioGroup.js
CHANGED
|
@@ -8,8 +8,8 @@ import { u as useComposedRefs } from './index11.js';
|
|
|
8
8
|
import { c as createContextScope } from './index19.js';
|
|
9
9
|
import { R as Root, c as createRovingFocusGroupScope, I as Item } from './index20.js';
|
|
10
10
|
import { u as useDirection } from './index22.js';
|
|
11
|
-
import { u as useSize } from './
|
|
12
|
-
import { u as usePrevious } from './
|
|
11
|
+
import { u as useSize } from './index35.js';
|
|
12
|
+
import { u as usePrevious } from './index34.js';
|
|
13
13
|
import { P as Presence } from './index21.js';
|
|
14
14
|
|
|
15
15
|
var RADIO_NAME = "Radio";
|
package/dist/Sidebar.js
CHANGED
|
@@ -6,7 +6,7 @@ import { forwardRef, useState, useCallback, useEffect, useMemo, useRef, createCo
|
|
|
6
6
|
import { u as useIsMobile } from './useIsMobile.js';
|
|
7
7
|
import { c as cn } from './utils.js';
|
|
8
8
|
import { T as TooltipProvider, a as Tooltip, b as TooltipTrigger, c as TooltipContent } from './tooltip.js';
|
|
9
|
-
import { R as Root, P as Portal, C as Content, a as Close, b as Title, D as Description, O as Overlay } from './
|
|
9
|
+
import { R as Root, P as Portal, C as Content, a as Close, b as Title, D as Description, O as Overlay } from './index30.js';
|
|
10
10
|
import { X } from './x.js';
|
|
11
11
|
import { D as DropdownMenu, a as DropdownMenuTrigger, b as DropdownMenuContent, e as DropdownMenuLabel, c as DropdownMenuItem } from './dropdown-menu.js';
|
|
12
12
|
import { c as createLucideIcon } from './createLucideIcon.js';
|
package/dist/Switch.js
CHANGED
|
@@ -5,8 +5,8 @@ import { F as Field, e as FieldLabel, c as FieldError } from './field.js';
|
|
|
5
5
|
import { u as useControllableState, P as Primitive, c as composeEventHandlers } from './index18.js';
|
|
6
6
|
import { u as useComposedRefs } from './index11.js';
|
|
7
7
|
import { c as createContextScope } from './index19.js';
|
|
8
|
-
import { u as usePrevious } from './
|
|
9
|
-
import { u as useSize } from './
|
|
8
|
+
import { u as usePrevious } from './index34.js';
|
|
9
|
+
import { u as useSize } from './index35.js';
|
|
10
10
|
import { c as cn } from './utils.js';
|
|
11
11
|
|
|
12
12
|
var SWITCH_NAME = "Switch";
|
package/dist/TabsSkeleton.js
CHANGED
|
@@ -2,7 +2,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
2
2
|
import { C as Content, L as List, T as Trigger, R as Root2 } from './index17.js';
|
|
3
3
|
import { useId, useState } from 'react';
|
|
4
4
|
import { c as cn } from './utils.js';
|
|
5
|
-
import { L as LayoutGroup } from './
|
|
5
|
+
import { L as LayoutGroup } from './index37.js';
|
|
6
6
|
import { m as motion, A as AnimatePresence } from './proxy.js';
|
|
7
7
|
import { S as Skeleton } from './Skeleton.js';
|
|
8
8
|
|
package/dist/Toggle.js
CHANGED
package/dist/ViewTabs.js
CHANGED
|
@@ -8,10 +8,9 @@ import { C as Check } from './check.js';
|
|
|
8
8
|
import { X } from './x.js';
|
|
9
9
|
import { c as createLucideIcon } from './createLucideIcon.js';
|
|
10
10
|
import { L as Lock } from './lock.js';
|
|
11
|
-
import { P as Pencil, T as Trash2 } from './trash-2.js';
|
|
11
|
+
import { P as Pencil, T as Trash2, a as Plus } from './trash-2.js';
|
|
12
12
|
import { S as Save, a as Share2 } from './share-2.js';
|
|
13
13
|
import { E as Ellipsis } from './ellipsis.js';
|
|
14
|
-
import { P as Plus } from './plus.js';
|
|
15
14
|
|
|
16
15
|
/**
|
|
17
16
|
* @license lucide-react v0.562.0 - ISC
|
package/dist/ViewTabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewTabs.js","sources":["../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/globe.js","../lib/components/ViewTabs/ViewTabs.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n];\nconst Globe = createLucideIcon(\"globe\", __iconNode);\n\nexport { __iconNode, Globe as default };\n//# sourceMappingURL=globe.js.map\n","import { Check, Ellipsis, Globe, Lock, Pencil, Plus, Save, Share2, Trash2, X } from 'lucide-react';\nimport { useCallback, useRef, useState } from 'react';\nimport { cn } from '../../../shadcn/utils';\nimport type { TableViewState } from '../../types/table-filter';\nimport { Button } from '../Button';\nimport { DropdownMenu, type MenuItem } from '../DropdownMenu';\nimport { Spinner } from '../Spinner';\n\nexport interface TableView {\n id: string;\n name: string;\n state: TableViewState;\n isShared: boolean;\n isOwn: boolean;\n}\n\nexport interface ViewTabsProps {\n defaultLabel?: string;\n views: TableView[];\n activeViewId: string | null;\n currentState: TableViewState;\n onActivate: (viewId: string | null) => void;\n onSave: (name: string) => void;\n onUpdate: (viewId: string) => void;\n onRename: (viewId: string, name: string) => void;\n onDelete: (viewId: string) => void;\n onToggleShare: (viewId: string, isShared: boolean) => void;\n isLoading?: boolean;\n}\n\n// Horizontal tab strip for switching between saved table views\nexport const ViewTabs: React.FC<ViewTabsProps> = ({\n defaultLabel = 'All',\n views,\n activeViewId,\n currentState: _currentState,\n onActivate,\n onSave,\n onUpdate,\n onRename,\n onDelete,\n onToggleShare,\n isLoading = false,\n}) => {\n const [isCreating, setIsCreating] = useState(false);\n const [newName, setNewName] = useState('');\n const [editingId, setEditingId] = useState<string | null>(null);\n const [editingName, setEditingName] = useState('');\n const newInputRef = useRef<HTMLInputElement>(null);\n const editInputRef = useRef<HTMLInputElement>(null);\n\n // Starts the inline create flow\n const handleStartCreate = useCallback(() => {\n setIsCreating(true);\n setNewName('');\n requestAnimationFrame(() => newInputRef.current?.focus());\n }, []);\n\n // Saves a new view from the inline input\n const handleConfirmCreate = useCallback(() => {\n const trimmed = newName.trim();\n if (trimmed) {\n onSave(trimmed);\n }\n setIsCreating(false);\n setNewName('');\n }, [newName, onSave]);\n\n // Cancels the inline create flow\n const handleCancelCreate = useCallback(() => {\n setIsCreating(false);\n setNewName('');\n }, []);\n\n // Starts inline rename for a view\n const handleStartRename = useCallback((view: TableView) => {\n setEditingId(view.id);\n setEditingName(view.name);\n requestAnimationFrame(() => editInputRef.current?.focus());\n }, []);\n\n // Confirms the rename\n const handleConfirmRename = useCallback(() => {\n if (editingId && editingName.trim()) {\n onRename(editingId, editingName.trim());\n }\n setEditingId(null);\n setEditingName('');\n }, [editingId, editingName, onRename]);\n\n // Cancels the rename\n const handleCancelRename = useCallback(() => {\n setEditingId(null);\n setEditingName('');\n }, []);\n\n if (isLoading) {\n return (\n <div className=\"flex items-center gap-2 border-b px-1 py-2\">\n <Spinner className=\"size-4 text-muted-foreground\" />\n </div>\n );\n }\n\n return (\n <div className=\"flex items-center gap-1 border-b overflow-x-auto\" role=\"tablist\" aria-label=\"Table views\">\n {/* Default \"All\" tab */}\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={activeViewId === null}\n className={cn(\n 'shrink-0 px-4 py-2 text-sm font-medium transition-colors border-b-2 whitespace-nowrap',\n activeViewId === null\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground hover:border-border',\n )}\n onClick={() => onActivate(null)}\n >\n {defaultLabel}\n </button>\n\n {/* Named view tabs */}\n {views.map((view) => (\n <div key={view.id} className=\"flex items-center shrink-0\">\n {editingId === view.id ? (\n <div className=\"flex items-center gap-1 px-2 py-1.5\">\n <input\n ref={editInputRef}\n type=\"text\"\n value={editingName}\n onChange={(e) => setEditingName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleConfirmRename();\n if (e.key === 'Escape') handleCancelRename();\n }}\n className=\"h-6 w-24 rounded border border-input bg-transparent px-2 text-sm outline-none focus-visible:border-ring\"\n />\n <Button variant=\"ghost\" size=\"icon\" className=\"h-6 w-6\" onClick={handleConfirmRename}>\n <Check className=\"size-3.5\" />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" className=\"h-6 w-6\" onClick={handleCancelRename}>\n <X className=\"size-3.5\" />\n </Button>\n </div>\n ) : (\n <>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={activeViewId === view.id}\n className={cn(\n 'px-4 py-2 text-sm font-medium transition-colors border-b-2 whitespace-nowrap',\n activeViewId === view.id\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground hover:border-border',\n )}\n onClick={() => onActivate(view.id)}\n >\n <span className=\"flex items-center gap-1.5\">\n {view.name}\n {view.isShared && <Globe className=\"size-3 text-muted-foreground\" />}\n {!view.isOwn && <Lock className=\"size-3 text-muted-foreground\" />}\n </span>\n </button>\n {(() => {\n const items: MenuItem[] = view.isOwn\n ? [\n {\n type: 'item',\n id: `${view.id}-rename`,\n label: 'Edit name',\n icon: Pencil,\n onClick: () => handleStartRename(view),\n },\n {\n type: 'item',\n id: `${view.id}-save`,\n label: 'Save changes',\n icon: Save,\n onClick: () => onUpdate(view.id),\n },\n {\n type: 'item',\n id: `${view.id}-share`,\n label: view.isShared ? 'Unshare' : 'Share',\n icon: Share2,\n onClick: () => onToggleShare(view.id, !view.isShared),\n },\n { type: 'separator' },\n {\n type: 'item',\n id: `${view.id}-delete`,\n label: 'Delete',\n icon: Trash2,\n variant: 'destructive',\n onClick: () => onDelete(view.id),\n },\n ]\n : [\n {\n type: 'item',\n id: `${view.id}-shared-by-others`,\n label: 'Shared by others',\n icon: Lock,\n disabled: true,\n },\n ];\n\n return (\n <DropdownMenu\n trigger={{\n children: (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 shrink-0 text-muted-foreground hover:text-foreground\"\n >\n <Ellipsis className=\"size-3.5\" />\n <span className=\"sr-only\">View options for {view.name}</span>\n </Button>\n ),\n }}\n items={items}\n align=\"start\"\n contentClassName=\"w-[180px]\"\n />\n );\n })()}\n </>\n )}\n </div>\n ))}\n\n {/* Create new view */}\n {isCreating ? (\n <div className=\"flex items-center gap-1 px-2 py-1.5 shrink-0\">\n <input\n ref={newInputRef}\n type=\"text\"\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleConfirmCreate();\n if (e.key === 'Escape') handleCancelCreate();\n }}\n placeholder=\"View name...\"\n className=\"h-6 w-28 rounded border border-input bg-transparent px-2 text-sm outline-none placeholder:text-muted-foreground focus-visible:border-ring\"\n />\n <Button variant=\"ghost\" size=\"icon\" className=\"h-6 w-6\" onClick={handleConfirmCreate}>\n <Check className=\"size-3.5\" />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" className=\"h-6 w-6\" onClick={handleCancelCreate}>\n <X className=\"size-3.5\" />\n </Button>\n </div>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={handleStartCreate}\n aria-label=\"Create new view\"\n >\n <Plus className=\"size-4\" />\n </Button>\n )}\n </div>\n );\n};\n\nViewTabs.displayName = 'ViewTabs';\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"ViewTabs.js","sources":["../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/globe.js","../lib/components/ViewTabs/ViewTabs.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n];\nconst Globe = createLucideIcon(\"globe\", __iconNode);\n\nexport { __iconNode, Globe as default };\n//# sourceMappingURL=globe.js.map\n","import { Check, Ellipsis, Globe, Lock, Pencil, Plus, Save, Share2, Trash2, X } from 'lucide-react';\nimport { useCallback, useRef, useState } from 'react';\nimport { cn } from '../../../shadcn/utils';\nimport type { TableViewState } from '../../types/table-filter';\nimport { Button } from '../Button';\nimport { DropdownMenu, type MenuItem } from '../DropdownMenu';\nimport { Spinner } from '../Spinner';\n\nexport interface TableView {\n id: string;\n name: string;\n state: TableViewState;\n isShared: boolean;\n isOwn: boolean;\n}\n\nexport interface ViewTabsProps {\n defaultLabel?: string;\n views: TableView[];\n activeViewId: string | null;\n currentState: TableViewState;\n onActivate: (viewId: string | null) => void;\n onSave: (name: string) => void;\n onUpdate: (viewId: string) => void;\n onRename: (viewId: string, name: string) => void;\n onDelete: (viewId: string) => void;\n onToggleShare: (viewId: string, isShared: boolean) => void;\n isLoading?: boolean;\n}\n\n// Horizontal tab strip for switching between saved table views\nexport const ViewTabs: React.FC<ViewTabsProps> = ({\n defaultLabel = 'All',\n views,\n activeViewId,\n currentState: _currentState,\n onActivate,\n onSave,\n onUpdate,\n onRename,\n onDelete,\n onToggleShare,\n isLoading = false,\n}) => {\n const [isCreating, setIsCreating] = useState(false);\n const [newName, setNewName] = useState('');\n const [editingId, setEditingId] = useState<string | null>(null);\n const [editingName, setEditingName] = useState('');\n const newInputRef = useRef<HTMLInputElement>(null);\n const editInputRef = useRef<HTMLInputElement>(null);\n\n // Starts the inline create flow\n const handleStartCreate = useCallback(() => {\n setIsCreating(true);\n setNewName('');\n requestAnimationFrame(() => newInputRef.current?.focus());\n }, []);\n\n // Saves a new view from the inline input\n const handleConfirmCreate = useCallback(() => {\n const trimmed = newName.trim();\n if (trimmed) {\n onSave(trimmed);\n }\n setIsCreating(false);\n setNewName('');\n }, [newName, onSave]);\n\n // Cancels the inline create flow\n const handleCancelCreate = useCallback(() => {\n setIsCreating(false);\n setNewName('');\n }, []);\n\n // Starts inline rename for a view\n const handleStartRename = useCallback((view: TableView) => {\n setEditingId(view.id);\n setEditingName(view.name);\n requestAnimationFrame(() => editInputRef.current?.focus());\n }, []);\n\n // Confirms the rename\n const handleConfirmRename = useCallback(() => {\n if (editingId && editingName.trim()) {\n onRename(editingId, editingName.trim());\n }\n setEditingId(null);\n setEditingName('');\n }, [editingId, editingName, onRename]);\n\n // Cancels the rename\n const handleCancelRename = useCallback(() => {\n setEditingId(null);\n setEditingName('');\n }, []);\n\n if (isLoading) {\n return (\n <div className=\"flex items-center gap-2 border-b px-1 py-2\">\n <Spinner className=\"size-4 text-muted-foreground\" />\n </div>\n );\n }\n\n return (\n <div className=\"flex items-center gap-1 border-b overflow-x-auto\" role=\"tablist\" aria-label=\"Table views\">\n {/* Default \"All\" tab */}\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={activeViewId === null}\n className={cn(\n 'shrink-0 px-4 py-2 text-sm font-medium transition-colors border-b-2 whitespace-nowrap',\n activeViewId === null\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground hover:border-border',\n )}\n onClick={() => onActivate(null)}\n >\n {defaultLabel}\n </button>\n\n {/* Named view tabs */}\n {views.map((view) => (\n <div key={view.id} className=\"flex items-center shrink-0\">\n {editingId === view.id ? (\n <div className=\"flex items-center gap-1 px-2 py-1.5\">\n <input\n ref={editInputRef}\n type=\"text\"\n value={editingName}\n onChange={(e) => setEditingName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleConfirmRename();\n if (e.key === 'Escape') handleCancelRename();\n }}\n className=\"h-6 w-24 rounded border border-input bg-transparent px-2 text-sm outline-none focus-visible:border-ring\"\n />\n <Button variant=\"ghost\" size=\"icon\" className=\"h-6 w-6\" onClick={handleConfirmRename}>\n <Check className=\"size-3.5\" />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" className=\"h-6 w-6\" onClick={handleCancelRename}>\n <X className=\"size-3.5\" />\n </Button>\n </div>\n ) : (\n <>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={activeViewId === view.id}\n className={cn(\n 'px-4 py-2 text-sm font-medium transition-colors border-b-2 whitespace-nowrap',\n activeViewId === view.id\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground hover:border-border',\n )}\n onClick={() => onActivate(view.id)}\n >\n <span className=\"flex items-center gap-1.5\">\n {view.name}\n {view.isShared && <Globe className=\"size-3 text-muted-foreground\" />}\n {!view.isOwn && <Lock className=\"size-3 text-muted-foreground\" />}\n </span>\n </button>\n {(() => {\n const items: MenuItem[] = view.isOwn\n ? [\n {\n type: 'item',\n id: `${view.id}-rename`,\n label: 'Edit name',\n icon: Pencil,\n onClick: () => handleStartRename(view),\n },\n {\n type: 'item',\n id: `${view.id}-save`,\n label: 'Save changes',\n icon: Save,\n onClick: () => onUpdate(view.id),\n },\n {\n type: 'item',\n id: `${view.id}-share`,\n label: view.isShared ? 'Unshare' : 'Share',\n icon: Share2,\n onClick: () => onToggleShare(view.id, !view.isShared),\n },\n { type: 'separator' },\n {\n type: 'item',\n id: `${view.id}-delete`,\n label: 'Delete',\n icon: Trash2,\n variant: 'destructive',\n onClick: () => onDelete(view.id),\n },\n ]\n : [\n {\n type: 'item',\n id: `${view.id}-shared-by-others`,\n label: 'Shared by others',\n icon: Lock,\n disabled: true,\n },\n ];\n\n return (\n <DropdownMenu\n trigger={{\n children: (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 shrink-0 text-muted-foreground hover:text-foreground\"\n >\n <Ellipsis className=\"size-3.5\" />\n <span className=\"sr-only\">View options for {view.name}</span>\n </Button>\n ),\n }}\n items={items}\n align=\"start\"\n contentClassName=\"w-[180px]\"\n />\n );\n })()}\n </>\n )}\n </div>\n ))}\n\n {/* Create new view */}\n {isCreating ? (\n <div className=\"flex items-center gap-1 px-2 py-1.5 shrink-0\">\n <input\n ref={newInputRef}\n type=\"text\"\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleConfirmCreate();\n if (e.key === 'Escape') handleCancelCreate();\n }}\n placeholder=\"View name...\"\n className=\"h-6 w-28 rounded border border-input bg-transparent px-2 text-sm outline-none placeholder:text-muted-foreground focus-visible:border-ring\"\n />\n <Button variant=\"ghost\" size=\"icon\" className=\"h-6 w-6\" onClick={handleConfirmCreate}>\n <Check className=\"size-3.5\" />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" className=\"h-6 w-6\" onClick={handleCancelCreate}>\n <X className=\"size-3.5\" />\n </Button>\n </div>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={handleStartCreate}\n aria-label=\"Create new view\"\n >\n <Plus className=\"size-4\" />\n </Button>\n )}\n </div>\n );\n};\n\nViewTabs.displayName = 'ViewTabs';\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|