@dofe/sso-ui 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/collapsible.d.ts +6 -0
- package/dist/components/collapsible.d.ts.map +1 -0
- package/dist/components/collapsible.js +14 -0
- package/dist/components/collapsible.js.map +1 -0
- package/dist/components/confirm-dialog.d.ts +107 -0
- package/dist/components/confirm-dialog.d.ts.map +1 -0
- package/dist/components/confirm-dialog.js +99 -0
- package/dist/components/confirm-dialog.js.map +1 -0
- package/dist/components/gauge.d.ts +19 -0
- package/dist/components/gauge.d.ts.map +1 -0
- package/dist/components/gauge.js +56 -0
- package/dist/components/gauge.js.map +1 -0
- package/dist/components/radio-group.d.ts +6 -0
- package/dist/components/radio-group.d.ts.map +1 -0
- package/dist/components/radio-group.js +16 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -1
- package/src/styles/globals.css +188 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
|
|
2
|
+
declare function Collapsible({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.Root>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
declare function CollapsibleTrigger({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
declare function CollapsibleContent({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.Content>): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export { Collapsible, CollapsibleTrigger, CollapsibleContent };
|
|
6
|
+
//# sourceMappingURL=collapsible.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapsible.d.ts","sourceRoot":"","sources":["../../src/components/collapsible.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,oBAAoB,MAAM,6BAA6B,CAAC;AAEpE,iBAAS,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,2CAExF;AAED,iBAAS,kBAAkB,CAAC,EAC1B,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,OAAO,CAAC,2CAE3D;AAED,iBAAS,kBAAkB,CAAC,EAC1B,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,OAAO,CAAC,2CAE3D;AAED,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
|
|
4
|
+
function Collapsible({ ...props }) {
|
|
5
|
+
return _jsx(CollapsiblePrimitive.Root, { "data-slot": "collapsible", ...props });
|
|
6
|
+
}
|
|
7
|
+
function CollapsibleTrigger({ ...props }) {
|
|
8
|
+
return _jsx(CollapsiblePrimitive.Trigger, { "data-slot": "collapsible-trigger", ...props });
|
|
9
|
+
}
|
|
10
|
+
function CollapsibleContent({ ...props }) {
|
|
11
|
+
return _jsx(CollapsiblePrimitive.Content, { "data-slot": "collapsible-content", ...props });
|
|
12
|
+
}
|
|
13
|
+
export { Collapsible, CollapsibleTrigger, CollapsibleContent };
|
|
14
|
+
//# sourceMappingURL=collapsible.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapsible.js","sourceRoot":"","sources":["../../src/components/collapsible.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,oBAAoB,MAAM,6BAA6B,CAAC;AAEpE,SAAS,WAAW,CAAC,EAAE,GAAG,KAAK,EAA0D;IACvF,OAAO,KAAC,oBAAoB,CAAC,IAAI,iBAAW,aAAa,KAAK,KAAK,GAAI,CAAC;AAC1E,CAAC;AAED,SAAS,kBAAkB,CAAC,EAC1B,GAAG,KAAK,EACkD;IAC1D,OAAO,KAAC,oBAAoB,CAAC,OAAO,iBAAW,qBAAqB,KAAK,KAAK,GAAI,CAAC;AACrF,CAAC;AAED,SAAS,kBAAkB,CAAC,EAC1B,GAAG,KAAK,EACkD;IAC1D,OAAO,KAAC,oBAAoB,CAAC,OAAO,iBAAW,qBAAqB,KAAK,KAAK,GAAI,CAAC;AACrF,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Button, buttonVariants } from './button';
|
|
3
|
+
import type { VariantProps } from 'class-variance-authority';
|
|
4
|
+
import { type LucideIcon } from 'lucide-react';
|
|
5
|
+
/**
|
|
6
|
+
* Confirm dialog variant types
|
|
7
|
+
*/
|
|
8
|
+
export type ConfirmVariant = 'danger' | 'warning' | 'info' | 'success';
|
|
9
|
+
/**
|
|
10
|
+
* Button variant type
|
|
11
|
+
*/
|
|
12
|
+
type ButtonVariant = VariantProps<typeof buttonVariants>['variant'];
|
|
13
|
+
/**
|
|
14
|
+
* Confirm dialog props
|
|
15
|
+
*/
|
|
16
|
+
export interface ConfirmDialogProps {
|
|
17
|
+
/** Whether the dialog is open */
|
|
18
|
+
open: boolean;
|
|
19
|
+
/** Callback when open state changes */
|
|
20
|
+
onOpenChange: (open: boolean) => void;
|
|
21
|
+
/** Dialog title */
|
|
22
|
+
title: string;
|
|
23
|
+
/** Dialog description */
|
|
24
|
+
description?: string;
|
|
25
|
+
/** Confirm button text */
|
|
26
|
+
confirmText?: string;
|
|
27
|
+
/** Cancel button text */
|
|
28
|
+
cancelText?: string;
|
|
29
|
+
/** Confirm button variant */
|
|
30
|
+
confirmVariant?: ButtonVariant;
|
|
31
|
+
/** Dialog variant (affects icon and styling) */
|
|
32
|
+
variant?: ConfirmVariant;
|
|
33
|
+
/** Custom icon */
|
|
34
|
+
icon?: LucideIcon;
|
|
35
|
+
/** Whether the confirm action is loading */
|
|
36
|
+
/** Whether the confirm action is loading */
|
|
37
|
+
loading?: boolean;
|
|
38
|
+
/** Whether the confirm action is disabled */
|
|
39
|
+
disabled?: boolean;
|
|
40
|
+
/** Callback when confirm is clicked */
|
|
41
|
+
onConfirm: () => void | Promise<void>;
|
|
42
|
+
/** Callback when cancel is clicked */
|
|
43
|
+
onCancel?: () => void;
|
|
44
|
+
/** Custom confirm button props */
|
|
45
|
+
confirmButtonProps?: React.ComponentProps<typeof Button>;
|
|
46
|
+
/** Custom cancel button props */
|
|
47
|
+
cancelButtonProps?: React.ComponentProps<typeof Button>;
|
|
48
|
+
/** Additional content below description */
|
|
49
|
+
children?: React.ReactNode;
|
|
50
|
+
/** Custom class name for dialog content */
|
|
51
|
+
className?: string;
|
|
52
|
+
/** Whether to hide the cancel button */
|
|
53
|
+
hideCancelButton?: boolean;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* ConfirmDialog - A reusable confirmation dialog for user actions
|
|
57
|
+
*
|
|
58
|
+
* Provides a consistent UI for confirming actions, especially destructive ones.
|
|
59
|
+
* Supports multiple variants (danger, warning, info, success) with appropriate
|
|
60
|
+
* icons and styling.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```tsx
|
|
64
|
+
* // Danger confirmation (delete, remove, etc.)
|
|
65
|
+
* <ConfirmDialog
|
|
66
|
+
* open={showDeleteDialog}
|
|
67
|
+
* onOpenChange={setShowDeleteDialog}
|
|
68
|
+
* title="Delete AI Employee?"
|
|
69
|
+
* description="This action cannot be undone. All data associated with this AI employee will be permanently removed."
|
|
70
|
+
* variant="danger"
|
|
71
|
+
* confirmText="Delete"
|
|
72
|
+
* onConfirm={handleDelete}
|
|
73
|
+
* />
|
|
74
|
+
*
|
|
75
|
+
* // Warning confirmation
|
|
76
|
+
* <ConfirmDialog
|
|
77
|
+
* open={showWarningDialog}
|
|
78
|
+
* onOpenChange={setShowWarningDialog}
|
|
79
|
+
* title="Unsaved Changes"
|
|
80
|
+
* description="You have unsaved changes. Are you sure you want to leave?"
|
|
81
|
+
* variant="warning"
|
|
82
|
+
* confirmText="Leave"
|
|
83
|
+
* onConfirm={handleLeave}
|
|
84
|
+
* />
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export declare function ConfirmDialog({ open, onOpenChange, title, description, confirmText, cancelText, confirmVariant, variant, icon: CustomIcon, loading, disabled, onConfirm, onCancel, confirmButtonProps, cancelButtonProps, children, className, hideCancelButton, }: ConfirmDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
88
|
+
/**
|
|
89
|
+
* AlertDialog - Simplified confirm dialog for destructive actions
|
|
90
|
+
*
|
|
91
|
+
* A convenient wrapper around ConfirmDialog with sensible defaults for
|
|
92
|
+
* destructive actions like delete, remove, etc.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```tsx
|
|
96
|
+
* <AlertDialog
|
|
97
|
+
* open={showDeleteDialog}
|
|
98
|
+
* onOpenChange={setShowDeleteDialog}
|
|
99
|
+
* title="Delete item?"
|
|
100
|
+
* description="This action cannot be undone."
|
|
101
|
+
* onConfirm={handleDelete}
|
|
102
|
+
* />
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
export declare function AlertDialog(props: Omit<ConfirmDialogProps, 'variant'>): import("react/jsx-runtime").JSX.Element;
|
|
106
|
+
export default ConfirmDialog;
|
|
107
|
+
//# sourceMappingURL=confirm-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm-dialog.d.ts","sourceRoot":"","sources":["../../src/components/confirm-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAS7D,OAAO,EAA6C,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1F;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvE;;GAEG;AACH,KAAK,aAAa,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,uCAAuC;IACvC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,gDAAgD;IAChD,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,kBAAkB;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,4CAA4C;IAC5C,4CAA4C;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,kCAAkC;IAClC,kBAAkB,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,CAAC;IACzD,iCAAiC;IACjC,iBAAiB,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,CAAC;IACxD,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAgCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,WAAuB,EACvB,UAAqB,EACrB,cAAc,EACd,OAAkB,EAClB,IAAI,EAAE,UAAU,EAChB,OAAe,EACf,QAAgB,EAChB,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,gBAAwB,GACzB,EAAE,kBAAkB,2CAoEpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,2CAErE;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from '../lib/utils';
|
|
4
|
+
import { Button } from './button';
|
|
5
|
+
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from './dialog';
|
|
6
|
+
import { AlertTriangle, Info, CheckCircle, XCircle } from 'lucide-react';
|
|
7
|
+
/**
|
|
8
|
+
* Default icons for each variant
|
|
9
|
+
*/
|
|
10
|
+
const variantIcons = {
|
|
11
|
+
danger: XCircle,
|
|
12
|
+
warning: AlertTriangle,
|
|
13
|
+
info: Info,
|
|
14
|
+
success: CheckCircle,
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Default button variants for each confirm variant
|
|
18
|
+
*/
|
|
19
|
+
const variantButtonVariants = {
|
|
20
|
+
danger: 'destructive',
|
|
21
|
+
warning: 'default',
|
|
22
|
+
info: 'default',
|
|
23
|
+
success: 'default',
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Icon colors for each variant
|
|
27
|
+
*/
|
|
28
|
+
const variantIconColors = {
|
|
29
|
+
danger: 'text-destructive',
|
|
30
|
+
warning: 'text-amber-500',
|
|
31
|
+
info: 'text-blue-500',
|
|
32
|
+
success: 'text-green-500',
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* ConfirmDialog - A reusable confirmation dialog for user actions
|
|
36
|
+
*
|
|
37
|
+
* Provides a consistent UI for confirming actions, especially destructive ones.
|
|
38
|
+
* Supports multiple variants (danger, warning, info, success) with appropriate
|
|
39
|
+
* icons and styling.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```tsx
|
|
43
|
+
* // Danger confirmation (delete, remove, etc.)
|
|
44
|
+
* <ConfirmDialog
|
|
45
|
+
* open={showDeleteDialog}
|
|
46
|
+
* onOpenChange={setShowDeleteDialog}
|
|
47
|
+
* title="Delete AI Employee?"
|
|
48
|
+
* description="This action cannot be undone. All data associated with this AI employee will be permanently removed."
|
|
49
|
+
* variant="danger"
|
|
50
|
+
* confirmText="Delete"
|
|
51
|
+
* onConfirm={handleDelete}
|
|
52
|
+
* />
|
|
53
|
+
*
|
|
54
|
+
* // Warning confirmation
|
|
55
|
+
* <ConfirmDialog
|
|
56
|
+
* open={showWarningDialog}
|
|
57
|
+
* onOpenChange={setShowWarningDialog}
|
|
58
|
+
* title="Unsaved Changes"
|
|
59
|
+
* description="You have unsaved changes. Are you sure you want to leave?"
|
|
60
|
+
* variant="warning"
|
|
61
|
+
* confirmText="Leave"
|
|
62
|
+
* onConfirm={handleLeave}
|
|
63
|
+
* />
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export function ConfirmDialog({ open, onOpenChange, title, description, confirmText = 'Confirm', cancelText = 'Cancel', confirmVariant, variant = 'danger', icon: CustomIcon, loading = false, disabled = false, onConfirm, onCancel, confirmButtonProps, cancelButtonProps, children, className, hideCancelButton = false, }) {
|
|
67
|
+
const Icon = CustomIcon ?? variantIcons[variant];
|
|
68
|
+
const finalConfirmVariant = confirmVariant ?? variantButtonVariants[variant];
|
|
69
|
+
const handleConfirm = async () => {
|
|
70
|
+
await onConfirm();
|
|
71
|
+
};
|
|
72
|
+
const handleCancel = () => {
|
|
73
|
+
onCancel?.();
|
|
74
|
+
onOpenChange(false);
|
|
75
|
+
};
|
|
76
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: cn('sm:max-w-[425px]', className), children: [_jsx(DialogHeader, { children: _jsxs("div", { className: "flex items-start gap-4", children: [_jsx("div", { className: cn('flex size-10 shrink-0 items-center justify-center rounded-full', variant === 'danger' && 'bg-destructive/10', variant === 'warning' && 'bg-amber-500/10', variant === 'info' && 'bg-blue-500/10', variant === 'success' && 'bg-green-500/10'), children: _jsx(Icon, { className: cn('size-5', variantIconColors[variant]) }) }), _jsxs("div", { className: "flex-1 space-y-1", children: [_jsx(DialogTitle, { children: title }), description && _jsx(DialogDescription, { children: description })] })] }) }), children && _jsx("div", { className: "py-2", children: children }), _jsxs(DialogFooter, { className: "gap-2 sm:gap-0", children: [!hideCancelButton && (_jsx(Button, { variant: "outline", onClick: handleCancel, disabled: loading, ...cancelButtonProps, children: cancelText })), _jsx(Button, { variant: finalConfirmVariant, onClick: handleConfirm, disabled: disabled || loading, ...confirmButtonProps, children: loading ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "size-4 animate-spin rounded-full border-2 border-current border-t-transparent" }), confirmText] })) : (confirmText) })] })] }) }));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* AlertDialog - Simplified confirm dialog for destructive actions
|
|
80
|
+
*
|
|
81
|
+
* A convenient wrapper around ConfirmDialog with sensible defaults for
|
|
82
|
+
* destructive actions like delete, remove, etc.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```tsx
|
|
86
|
+
* <AlertDialog
|
|
87
|
+
* open={showDeleteDialog}
|
|
88
|
+
* onOpenChange={setShowDeleteDialog}
|
|
89
|
+
* title="Delete item?"
|
|
90
|
+
* description="This action cannot be undone."
|
|
91
|
+
* onConfirm={handleDelete}
|
|
92
|
+
* />
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export function AlertDialog(props) {
|
|
96
|
+
return _jsx(ConfirmDialog, { variant: "danger", ...props });
|
|
97
|
+
}
|
|
98
|
+
export default ConfirmDialog;
|
|
99
|
+
//# sourceMappingURL=confirm-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm-dialog.js","sourceRoot":"","sources":["../../src/components/confirm-dialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type VariantProps } from 'class-variance-authority';
|
|
3
|
+
declare const gaugeVariants: (props?: ({
|
|
4
|
+
size?: "sm" | "lg" | "md" | null | undefined;
|
|
5
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
|
+
export interface GaugeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof gaugeVariants> {
|
|
7
|
+
value: number;
|
|
8
|
+
max?: number;
|
|
9
|
+
label?: string;
|
|
10
|
+
unit?: string;
|
|
11
|
+
showValue?: boolean;
|
|
12
|
+
thresholds?: {
|
|
13
|
+
warning: number;
|
|
14
|
+
danger: number;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
declare const Gauge: React.ForwardRefExoticComponent<GaugeProps & React.RefAttributes<HTMLDivElement>>;
|
|
18
|
+
export { Gauge, gaugeVariants };
|
|
19
|
+
//# sourceMappingURL=gauge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gauge.d.ts","sourceRoot":"","sources":["../../src/components/gauge.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,QAAA,MAAM,aAAa;;8EAWjB,CAAC;AAeH,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,OAAO,aAAa,CAAC;IAChF,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,QAAA,MAAM,KAAK,mFAqFV,CAAC;AAGF,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { cn } from '../lib/utils';
|
|
5
|
+
import { cva } from 'class-variance-authority';
|
|
6
|
+
const gaugeVariants = cva('flex flex-col items-center relative', {
|
|
7
|
+
variants: {
|
|
8
|
+
size: {
|
|
9
|
+
sm: 'w-20',
|
|
10
|
+
md: 'w-[120px]',
|
|
11
|
+
lg: 'w-40',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
defaultVariants: {
|
|
15
|
+
size: 'md',
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
const valueTextVariants = cva('font-bold text-foreground', {
|
|
19
|
+
variants: {
|
|
20
|
+
size: {
|
|
21
|
+
sm: 'text-base',
|
|
22
|
+
md: 'text-2xl',
|
|
23
|
+
lg: 'text-[32px]',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
defaultVariants: {
|
|
27
|
+
size: 'md',
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
const Gauge = React.forwardRef(({ className, value, max = 100, size = 'md', label, unit = '%', showValue = true, thresholds = { warning: 70, danger: 90 }, ...props }, ref) => {
|
|
31
|
+
const percentage = Math.min((value / max) * 100, 100);
|
|
32
|
+
const circumference = 2 * Math.PI * 45; // radius = 45
|
|
33
|
+
const strokeDashoffset = circumference - (percentage / 100) * circumference;
|
|
34
|
+
// Determine color based on thresholds
|
|
35
|
+
let strokeColor = 'stroke-emerald-500';
|
|
36
|
+
let glowColor = 'drop-shadow-[0_0_4px_rgba(16,185,129,0.5)]';
|
|
37
|
+
if (percentage >= thresholds.danger) {
|
|
38
|
+
strokeColor = 'stroke-red-500';
|
|
39
|
+
glowColor = 'drop-shadow-[0_0_4px_rgba(239,68,68,0.5)]';
|
|
40
|
+
}
|
|
41
|
+
else if (percentage >= thresholds.warning) {
|
|
42
|
+
strokeColor = 'stroke-amber-500';
|
|
43
|
+
glowColor = 'drop-shadow-[0_0_4px_rgba(245,158,11,0.5)]';
|
|
44
|
+
}
|
|
45
|
+
const displayValue = max === 100 ? Math.round(value) : value.toFixed(1);
|
|
46
|
+
return (_jsxs("div", { ref: ref, className: cn(gaugeVariants({ size }), className), ...props, children: [_jsxs("svg", { viewBox: "0 0 100 100", className: "w-full h-auto", children: [_jsx("circle", { className: "stroke-muted", cx: "50", cy: "50", r: "45", fill: "none", strokeWidth: "8" }), [0, 25, 50, 75, 100].map((tick) => {
|
|
47
|
+
const angle = (tick / 100) * 270 - 135; // -135 to 135 degrees
|
|
48
|
+
const rad = (angle * Math.PI) / 180;
|
|
49
|
+
const innerR = 38;
|
|
50
|
+
const outerR = 42;
|
|
51
|
+
return (_jsx("line", { className: "stroke-muted-foreground/50", x1: 50 + innerR * Math.cos(rad), y1: 50 + innerR * Math.sin(rad), x2: 50 + outerR * Math.cos(rad), y2: 50 + outerR * Math.sin(rad), strokeWidth: "2" }, tick));
|
|
52
|
+
}), _jsx("circle", { className: cn(strokeColor, glowColor, 'transition-all duration-500 ease-out'), cx: "50", cy: "50", r: "45", fill: "none", strokeWidth: "8", strokeLinecap: "round", strokeDasharray: circumference, strokeDashoffset: strokeDashoffset, transform: "rotate(-90 50 50)" })] }), showValue && (_jsxs("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 text-center flex flex-col items-center leading-none", children: [_jsx("span", { className: cn(valueTextVariants({ size })), children: displayValue }), _jsx("span", { className: "font-mono text-[10px] text-muted-foreground uppercase md:text-[11px]", children: unit })] })), label && (_jsx("div", { className: "mt-2 font-mono text-[11px] font-medium uppercase tracking-wide text-muted-foreground", children: label }))] }));
|
|
53
|
+
});
|
|
54
|
+
Gauge.displayName = 'Gauge';
|
|
55
|
+
export { Gauge, gaugeVariants };
|
|
56
|
+
//# sourceMappingURL=gauge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gauge.js","sourceRoot":"","sources":["../../src/components/gauge.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
|
|
3
|
+
declare const RadioGroup: React.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
4
|
+
declare const RadioGroupItem: React.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupItemProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
5
|
+
export { RadioGroup, RadioGroupItem };
|
|
6
|
+
//# sourceMappingURL=radio-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-group.d.ts","sourceRoot":"","sources":["../../src/components/radio-group.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,mBAAmB,MAAM,6BAA6B,CAAC;AAKnE,QAAA,MAAM,UAAU,+JAKd,CAAC;AAGH,QAAA,MAAM,cAAc,yKAkBlB,CAAC;AAGH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
|
|
5
|
+
import { Circle } from 'lucide-react';
|
|
6
|
+
import { cn } from '../lib/utils';
|
|
7
|
+
const RadioGroup = React.forwardRef(({ className, ...props }, ref) => {
|
|
8
|
+
return _jsx(RadioGroupPrimitive.Root, { className: cn('grid gap-2', className), ...props, ref: ref });
|
|
9
|
+
});
|
|
10
|
+
RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
|
|
11
|
+
const RadioGroupItem = React.forwardRef(({ className, ...props }, ref) => {
|
|
12
|
+
return (_jsx(RadioGroupPrimitive.Item, { ref: ref, className: cn('aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50', className), ...props, children: _jsx(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: _jsx(Circle, { className: "h-2.5 w-2.5 fill-current text-current" }) }) }));
|
|
13
|
+
});
|
|
14
|
+
RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
|
|
15
|
+
export { RadioGroup, RadioGroupItem };
|
|
16
|
+
//# sourceMappingURL=radio-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-group.js","sourceRoot":"","sources":["../../src/components/radio-group.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,mBAAmB,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAGjC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACjC,OAAO,KAAC,mBAAmB,CAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,KAAM,KAAK,EAAE,GAAG,EAAE,GAAG,GAAI,CAAC;AACnG,CAAC,CAAC,CAAC;AACH,UAAU,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC;AAE9D,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAGrC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACjC,OAAO,CACL,KAAC,mBAAmB,CAAC,IAAI,IACvB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,0OAA0O,EAC1O,SAAS,CACV,KACG,KAAK,YAET,KAAC,mBAAmB,CAAC,SAAS,IAAC,SAAS,EAAC,kCAAkC,YACzE,KAAC,MAAM,IAAC,SAAS,EAAC,uCAAuC,GAAG,GAC9B,GACP,CAC5B,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,cAAc,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,11 +7,15 @@ export * from './components/calendar';
|
|
|
7
7
|
export * from './components/card';
|
|
8
8
|
export * from './components/carousel';
|
|
9
9
|
export * from './components/checkbox';
|
|
10
|
+
export * from './components/collapsible';
|
|
11
|
+
export * from './components/command';
|
|
12
|
+
export * from './components/confirm-dialog';
|
|
10
13
|
export * from './components/dialog';
|
|
11
14
|
export * from './components/dropdown-menu';
|
|
12
15
|
export * from './components/empty';
|
|
13
16
|
export * from './components/field';
|
|
14
17
|
export * from './components/form';
|
|
18
|
+
export * from './components/gauge';
|
|
15
19
|
export * from './components/input';
|
|
16
20
|
export * from './components/input-group';
|
|
17
21
|
export * from './components/item';
|
|
@@ -19,6 +23,7 @@ export * from './components/label';
|
|
|
19
23
|
export * from './components/password-strength';
|
|
20
24
|
export * from './components/popover';
|
|
21
25
|
export * from './components/progress';
|
|
26
|
+
export * from './components/radio-group';
|
|
22
27
|
export * from './components/scroll-area';
|
|
23
28
|
export * from './components/select';
|
|
24
29
|
export * from './components/separator';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AAGrC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AAGrC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,11 +8,15 @@ export * from './components/calendar';
|
|
|
8
8
|
export * from './components/card';
|
|
9
9
|
export * from './components/carousel';
|
|
10
10
|
export * from './components/checkbox';
|
|
11
|
+
export * from './components/collapsible';
|
|
12
|
+
export * from './components/command';
|
|
13
|
+
export * from './components/confirm-dialog';
|
|
11
14
|
export * from './components/dialog';
|
|
12
15
|
export * from './components/dropdown-menu';
|
|
13
16
|
export * from './components/empty';
|
|
14
17
|
export * from './components/field';
|
|
15
18
|
export * from './components/form';
|
|
19
|
+
export * from './components/gauge';
|
|
16
20
|
export * from './components/input';
|
|
17
21
|
export * from './components/input-group';
|
|
18
22
|
export * from './components/item';
|
|
@@ -20,6 +24,7 @@ export * from './components/label';
|
|
|
20
24
|
export * from './components/password-strength';
|
|
21
25
|
export * from './components/popover';
|
|
22
26
|
export * from './components/progress';
|
|
27
|
+
export * from './components/radio-group';
|
|
23
28
|
export * from './components/scroll-area';
|
|
24
29
|
export * from './components/select';
|
|
25
30
|
export * from './components/separator';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AAErC,QAAQ;AACR,cAAc,oBAAoB,CAAC;AAEnC,QAAQ;AACR,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AAErC,QAAQ;AACR,cAAc,oBAAoB,CAAC;AAEnC,QAAQ;AACR,cAAc,aAAa,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dofe/sso-ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -45,10 +45,12 @@
|
|
|
45
45
|
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
46
46
|
"@radix-ui/react-avatar": "^1.1.11",
|
|
47
47
|
"@radix-ui/react-checkbox": "^1.3.3",
|
|
48
|
+
"@radix-ui/react-collapsible": "^1.1.11",
|
|
48
49
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
49
50
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
50
51
|
"@radix-ui/react-label": "^2.1.8",
|
|
51
52
|
"@radix-ui/react-popover": "^1.1.15",
|
|
53
|
+
"@radix-ui/react-radio-group": "^1.3.4",
|
|
52
54
|
"@radix-ui/react-scroll-area": "^1.2.10",
|
|
53
55
|
"@radix-ui/react-select": "^2.2.6",
|
|
54
56
|
"@radix-ui/react-separator": "^1.1.8",
|
package/src/styles/globals.css
CHANGED
|
@@ -132,3 +132,191 @@
|
|
|
132
132
|
@apply bg-background text-foreground;
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
|
+
|
|
136
|
+
/* ============================================
|
|
137
|
+
Dialog Component Styles
|
|
138
|
+
Unified design for all dialogs across apps
|
|
139
|
+
============================================ */
|
|
140
|
+
|
|
141
|
+
/* Dialog Overlay - Soft backdrop with subtle blur */
|
|
142
|
+
[data-slot="dialog-overlay"] {
|
|
143
|
+
background-color: oklch(0.141 0.005 285.823 / 0.6) !important;
|
|
144
|
+
backdrop-filter: blur(4px);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.dark [data-slot="dialog-overlay"] {
|
|
148
|
+
background-color: oklch(0.1 0 0 / 0.7) !important;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* Dialog Content - Soft, elegant styling */
|
|
152
|
+
[data-slot="dialog-content"] {
|
|
153
|
+
/* Soft background with slight warmth */
|
|
154
|
+
background-color: oklch(0.985 0.005 285.823) !important;
|
|
155
|
+
|
|
156
|
+
/* Subtle rounded border */
|
|
157
|
+
border: 1px solid oklch(0.85 0.01 162 / 0.6) !important;
|
|
158
|
+
border-radius: 14px !important;
|
|
159
|
+
|
|
160
|
+
/* Soft layered shadow for depth */
|
|
161
|
+
box-shadow:
|
|
162
|
+
0 20px 25px -5px oklch(0.141 0.005 285.823 / 0.08),
|
|
163
|
+
0 8px 10px -6px oklch(0.141 0.005 285.823 / 0.04),
|
|
164
|
+
0 0 0 1px oklch(0.85 0.01 162 / 0.4) !important;
|
|
165
|
+
|
|
166
|
+
/* Ensure proper centering */
|
|
167
|
+
position: fixed !important;
|
|
168
|
+
top: 50% !important;
|
|
169
|
+
left: 50% !important;
|
|
170
|
+
transform: translate(-50%, -50%) !important;
|
|
171
|
+
z-index: 50 !important;
|
|
172
|
+
|
|
173
|
+
/* Soft padding */
|
|
174
|
+
padding: 1.5rem !important;
|
|
175
|
+
|
|
176
|
+
/* Smooth enter animation */
|
|
177
|
+
animation: dialog-soft-enter 0.25s cubic-bezier(0.34, 1.56, 0.64, 1) !important;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.dark [data-slot="dialog-content"] {
|
|
181
|
+
background-color: oklch(0.22 0.008 285.885) !important;
|
|
182
|
+
border: 1px solid oklch(0.35 0.025 165 / 0.5) !important;
|
|
183
|
+
box-shadow:
|
|
184
|
+
0 20px 25px -5px oklch(0 0 0 / 0.25),
|
|
185
|
+
0 8px 10px -6px oklch(0 0 0 / 0.15),
|
|
186
|
+
0 0 0 1px oklch(0.35 0.025 165 / 0.3) !important;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* Dialog Header */
|
|
190
|
+
[data-slot="dialog-header"] {
|
|
191
|
+
padding-bottom: 1rem;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
[data-slot="dialog-title"] {
|
|
195
|
+
color: oklch(0.2 0.02 165) !important;
|
|
196
|
+
font-weight: 600 !important;
|
|
197
|
+
font-size: 1.125rem !important;
|
|
198
|
+
letter-spacing: -0.01em !important;
|
|
199
|
+
margin-bottom: 0.5rem !important;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.dark [data-slot="dialog-title"] {
|
|
203
|
+
color: oklch(0.95 0 0) !important;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
[data-slot="dialog-description"] {
|
|
207
|
+
color: oklch(0.5 0.03 165) !important;
|
|
208
|
+
line-height: 1.6 !important;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.dark [data-slot="dialog-description"] {
|
|
212
|
+
color: oklch(0.65 0.03 165) !important;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/* Dialog Footer */
|
|
216
|
+
[data-slot="dialog-footer"] {
|
|
217
|
+
padding-top: 1rem;
|
|
218
|
+
gap: 0.75rem;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/* Dialog Close Button */
|
|
222
|
+
[data-slot="dialog-content"] button.absolute[class*="top-"][class*="right-"] {
|
|
223
|
+
top: 1rem !important;
|
|
224
|
+
right: 1.25rem !important;
|
|
225
|
+
opacity: 0.4;
|
|
226
|
+
transition: opacity 0.2s ease, transform 0.2s ease, background-color 0.2s ease;
|
|
227
|
+
border-radius: 6px !important;
|
|
228
|
+
padding: 0.375rem !important;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
[data-slot="dialog-content"] button.absolute[class*="top-"][class*="right-"]:hover {
|
|
232
|
+
opacity: 1;
|
|
233
|
+
transform: scale(1.1);
|
|
234
|
+
background-color: oklch(0.92 0.01 162);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.dark [data-slot="dialog-content"] button.absolute:hover {
|
|
238
|
+
background-color: oklch(0.35 0.02 165);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/* Soft Dialog Animation */
|
|
242
|
+
@keyframes dialog-soft-enter {
|
|
243
|
+
from {
|
|
244
|
+
opacity: 0;
|
|
245
|
+
transform: translate(-50%, -50%) scale(0.92);
|
|
246
|
+
filter: blur(2px);
|
|
247
|
+
}
|
|
248
|
+
to {
|
|
249
|
+
opacity: 1;
|
|
250
|
+
transform: translate(-50%, -50%) scale(1);
|
|
251
|
+
filter: blur(0);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/* ============================================
|
|
256
|
+
Dialog Variants
|
|
257
|
+
============================================ */
|
|
258
|
+
|
|
259
|
+
/* Delete/Confirm Dialog */
|
|
260
|
+
.dialog-destructive [data-slot="dialog-content"],
|
|
261
|
+
.dialog-confirm [data-slot="dialog-content"] {
|
|
262
|
+
border: 1px solid oklch(0.7 0.15 25 / 0.3) !important;
|
|
263
|
+
border-top: 3px solid oklch(0.55 0.2 25) !important;
|
|
264
|
+
border-radius: 14px !important;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.dark .dialog-destructive [data-slot="dialog-content"],
|
|
268
|
+
.dark .dialog-confirm [data-slot="dialog-content"] {
|
|
269
|
+
border: 1px solid oklch(0.6 0.18 25 / 0.4) !important;
|
|
270
|
+
border-top: 3px solid oklch(0.65 0.2 25) !important;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.dialog-destructive [data-slot="dialog-title"],
|
|
274
|
+
.dialog-confirm [data-slot="dialog-title"] {
|
|
275
|
+
color: oklch(0.45 0.18 25) !important;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.dark .dialog-destructive [data-slot="dialog-title"],
|
|
279
|
+
.dark .dialog-confirm [data-slot="dialog-title"] {
|
|
280
|
+
color: oklch(0.65 0.2 25) !important;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/* Form Dialog */
|
|
284
|
+
.dialog-form [data-slot="dialog-content"] {
|
|
285
|
+
max-width: 28rem !important;
|
|
286
|
+
padding: 1.75rem !important;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/* Info Dialog */
|
|
290
|
+
.dialog-info [data-slot="dialog-content"] {
|
|
291
|
+
max-width: 22rem !important;
|
|
292
|
+
padding: 1.25rem !important;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/* Large Dialog */
|
|
296
|
+
.dialog-large [data-slot="dialog-content"] {
|
|
297
|
+
max-width: 42rem !important;
|
|
298
|
+
max-height: 85vh !important;
|
|
299
|
+
overflow-y: auto;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/* ============================================
|
|
303
|
+
Responsive Styles
|
|
304
|
+
============================================ */
|
|
305
|
+
|
|
306
|
+
@media (max-width: 640px) {
|
|
307
|
+
[data-slot="dialog-content"] {
|
|
308
|
+
width: calc(100vw - 2rem) !important;
|
|
309
|
+
max-width: calc(100vw - 2rem) !important;
|
|
310
|
+
margin: 1rem !important;
|
|
311
|
+
max-height: calc(100vh - 2rem) !important;
|
|
312
|
+
border-radius: 12px !important;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
[data-slot="dialog-footer"] {
|
|
316
|
+
flex-direction: column;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
[data-slot="dialog-footer"] button {
|
|
320
|
+
width: 100%;
|
|
321
|
+
}
|
|
322
|
+
}
|