ui-lab-registry 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +145 -0
- package/dist/categories.d.ts +5 -0
- package/dist/categories.d.ts.map +1 -0
- package/dist/categories.js +81 -0
- package/dist/categories.js.map +1 -0
- package/dist/components/badge.d.ts +15 -0
- package/dist/components/badge.d.ts.map +1 -0
- package/dist/components/badge.js +31 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/button-group.d.ts +27 -0
- package/dist/components/button-group.d.ts.map +1 -0
- package/dist/components/button-group.js +99 -0
- package/dist/components/button-group.js.map +1 -0
- package/dist/components/button.d.ts +13 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js +26 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/card.d.ts +19 -0
- package/dist/components/card.d.ts.map +1 -0
- package/dist/components/card.js +20 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/checkbox.d.ts +21 -0
- package/dist/components/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox.js +69 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/command-palette.d.ts +32 -0
- package/dist/components/command-palette.d.ts.map +1 -0
- package/dist/components/command-palette.js +256 -0
- package/dist/components/command-palette.js.map +1 -0
- package/dist/components/confirmation.d.ts +25 -0
- package/dist/components/confirmation.d.ts.map +1 -0
- package/dist/components/confirmation.js +120 -0
- package/dist/components/confirmation.js.map +1 -0
- package/dist/components/context-menu.d.ts +28 -0
- package/dist/components/context-menu.d.ts.map +1 -0
- package/dist/components/context-menu.js +36 -0
- package/dist/components/context-menu.js.map +1 -0
- package/dist/components/divider.d.ts +19 -0
- package/dist/components/divider.d.ts.map +1 -0
- package/dist/components/divider.js +240 -0
- package/dist/components/divider.js.map +1 -0
- package/dist/components/form-wrapper.d.ts +48 -0
- package/dist/components/form-wrapper.d.ts.map +1 -0
- package/dist/components/form-wrapper.js +122 -0
- package/dist/components/form-wrapper.js.map +1 -0
- package/dist/components/index.d.ts +24 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +24 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/input.d.ts +17 -0
- package/dist/components/input.d.ts.map +1 -0
- package/dist/components/input.js +38 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/label.d.ts +17 -0
- package/dist/components/label.d.ts.map +1 -0
- package/dist/components/label.js +31 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/logo.d.ts +2 -0
- package/dist/components/logo.d.ts.map +1 -0
- package/dist/components/logo.js +6 -0
- package/dist/components/logo.js.map +1 -0
- package/dist/components/modal.d.ts +21 -0
- package/dist/components/modal.d.ts.map +1 -0
- package/dist/components/modal.js +67 -0
- package/dist/components/modal.js.map +1 -0
- package/dist/components/popover.d.ts +18 -0
- package/dist/components/popover.d.ts.map +1 -0
- package/dist/components/popover.js +243 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/progress.d.ts +19 -0
- package/dist/components/progress.d.ts.map +1 -0
- package/dist/components/progress.js +38 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/radio.d.ts +17 -0
- package/dist/components/radio.d.ts.map +1 -0
- package/dist/components/radio.js +62 -0
- package/dist/components/radio.js.map +1 -0
- package/dist/components/select.d.ts +13 -0
- package/dist/components/select.d.ts.map +1 -0
- package/dist/components/select.js +26 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/slider.d.ts +9 -0
- package/dist/components/slider.d.ts.map +1 -0
- package/dist/components/slider.js +32 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/switch.d.ts +24 -0
- package/dist/components/switch.d.ts.map +1 -0
- package/dist/components/switch.js +92 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/tabs.d.ts +20 -0
- package/dist/components/tabs.d.ts.map +1 -0
- package/dist/components/tabs.js +85 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/textarea.d.ts +17 -0
- package/dist/components/textarea.d.ts.map +1 -0
- package/dist/components/textarea.js +62 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/toast/index.d.ts +5 -0
- package/dist/components/toast/index.d.ts.map +1 -0
- package/dist/components/toast/index.js +4 -0
- package/dist/components/toast/index.js.map +1 -0
- package/dist/components/toast/store.d.ts +55 -0
- package/dist/components/toast/store.d.ts.map +1 -0
- package/dist/components/toast/store.js +76 -0
- package/dist/components/toast/store.js.map +1 -0
- package/dist/components/toast/toast.d.ts +10 -0
- package/dist/components/toast/toast.d.ts.map +1 -0
- package/dist/components/toast/toast.js +148 -0
- package/dist/components/toast/toast.js.map +1 -0
- package/dist/components/toast/toaster.d.ts +2 -0
- package/dist/components/toast/toaster.d.ts.map +1 -0
- package/dist/components/toast/toaster.js +391 -0
- package/dist/components/toast/toaster.js.map +1 -0
- package/dist/components/toast/use-toast.d.ts +9 -0
- package/dist/components/toast/use-toast.d.ts.map +1 -0
- package/dist/components/toast/use-toast.js +17 -0
- package/dist/components/toast/use-toast.js.map +1 -0
- package/dist/components/tooltip.d.ts +17 -0
- package/dist/components/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip.js +227 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/helpers.d.ts +9 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +36 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +5 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/registry.d.ts +10 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +418 -0
- package/dist/registry.js.map +1 -0
- package/dist/starters/presets.d.ts +4 -0
- package/dist/starters/presets.d.ts.map +1 -0
- package/dist/starters/presets.js +49 -0
- package/dist/starters/presets.js.map +1 -0
- package/dist/types.d.ts +35 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +66 -0
- package/src/categories.ts +84 -0
- package/src/helpers.ts +44 -0
- package/src/index.ts +29 -0
- package/src/lib/utils.ts +5 -0
- package/src/registry.ts +443 -0
- package/src/starters/presets.ts +51 -0
- package/src/types.ts +48 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface ModalProps {
|
|
3
|
+
isOpen: boolean;
|
|
4
|
+
onClose: () => void;
|
|
5
|
+
title?: React.ReactNode;
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
footer?: React.ReactNode;
|
|
8
|
+
closeButton?: boolean;
|
|
9
|
+
size?: "sm" | "md" | "lg" | "xl";
|
|
10
|
+
onBackdropClick?: boolean;
|
|
11
|
+
className?: string;
|
|
12
|
+
contentClassName?: string;
|
|
13
|
+
overlayClassName?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Modal component that displays content in a centered dialog with a backdrop overlay.
|
|
17
|
+
* Supports blocking interactions outside the modal and customizable sizing.
|
|
18
|
+
*/
|
|
19
|
+
declare const Modal: React.ForwardRefExoticComponent<ModalProps & React.RefAttributes<HTMLDivElement>>;
|
|
20
|
+
export { Modal };
|
|
21
|
+
//# sourceMappingURL=modal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../../src/components/modal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAK3D,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AASD;;;GAGG;AACH,QAAA,MAAM,KAAK,mFAkIV,CAAC;AAIF,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React, { useState, useEffect, useRef } from "react";
|
|
4
|
+
import { createPortal } from "react-dom";
|
|
5
|
+
import { cn } from "../lib/utils";
|
|
6
|
+
import { HiX } from "react-icons/hi";
|
|
7
|
+
const sizeClasses = {
|
|
8
|
+
sm: "max-w-sm",
|
|
9
|
+
md: "max-w-md",
|
|
10
|
+
lg: "max-w-lg",
|
|
11
|
+
xl: "max-w-2xl",
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Modal component that displays content in a centered dialog with a backdrop overlay.
|
|
15
|
+
* Supports blocking interactions outside the modal and customizable sizing.
|
|
16
|
+
*/
|
|
17
|
+
const Modal = React.forwardRef(({ isOpen, onClose, title, children, footer, closeButton = true, size = "md", onBackdropClick = true, className, contentClassName, overlayClassName, }, ref) => {
|
|
18
|
+
const [mounted, setMounted] = useState(false);
|
|
19
|
+
const modalRef = useRef(null);
|
|
20
|
+
// Use combined refs
|
|
21
|
+
React.useImperativeHandle(ref, () => modalRef.current);
|
|
22
|
+
/**
|
|
23
|
+
* Handle mount to prevent hydration issues
|
|
24
|
+
*/
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
setMounted(true);
|
|
27
|
+
}, []);
|
|
28
|
+
/**
|
|
29
|
+
* Handle escape key to close modal
|
|
30
|
+
*/
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (!isOpen)
|
|
33
|
+
return;
|
|
34
|
+
const handleKeyDown = (event) => {
|
|
35
|
+
if (event.key === "Escape") {
|
|
36
|
+
onClose();
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
40
|
+
return () => {
|
|
41
|
+
document.removeEventListener("keydown", handleKeyDown);
|
|
42
|
+
};
|
|
43
|
+
}, [isOpen, onClose]);
|
|
44
|
+
/**
|
|
45
|
+
* Prevent body scroll when modal is open
|
|
46
|
+
*/
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (isOpen) {
|
|
49
|
+
document.body.style.overflow = "hidden";
|
|
50
|
+
return () => {
|
|
51
|
+
document.body.style.overflow = "unset";
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}, [isOpen]);
|
|
55
|
+
if (!mounted || !isOpen) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const handleBackdropClick = () => {
|
|
59
|
+
if (onBackdropClick) {
|
|
60
|
+
onClose();
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
return createPortal(_jsxs("div", { className: cn("fixed inset-0 z-50 flex items-center justify-center", overlayClassName), onClick: handleBackdropClick, children: [_jsx("div", { className: "absolute inset-0 bg-black/50 backdrop-blur-sm" }), _jsxs("div", { ref: modalRef, role: "dialog", "aria-modal": "true", className: cn("relative w-full mx-4 bg-background-900 rounded-lg border border-background-700 shadow-xl", sizeClasses[size], className), onClick: (e) => e.stopPropagation(), children: [(title || closeButton) && (_jsxs("div", { className: "flex items-center justify-between border-b border-background-700 p-4", children: [title && (_jsx("h4", { className: "font-semibold", children: title })), !title && closeButton && _jsx("div", { className: "flex-1" }), closeButton && (_jsx("button", { onClick: onClose, className: "ml-auto text-foreground-500 hover:text-foreground-200 transition-colors p-1", "aria-label": "Close modal", children: _jsx(HiX, { className: "w-5 h-5" }) }))] })), _jsx("div", { className: cn("px-4 py-4", contentClassName), children: children }), footer && (_jsx("div", { className: "border-t border-background-700 p-2", children: footer }))] })] }), document.body);
|
|
64
|
+
});
|
|
65
|
+
Modal.displayName = "Modal";
|
|
66
|
+
export { Modal };
|
|
67
|
+
//# sourceMappingURL=modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal.js","sourceRoot":"","sources":["../../src/components/modal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
type PopoverPosition = "top" | "right" | "bottom" | "left";
|
|
3
|
+
export interface PopoverProps {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
content: React.ReactNode;
|
|
6
|
+
position?: PopoverPosition;
|
|
7
|
+
className?: string;
|
|
8
|
+
contentClassName?: string;
|
|
9
|
+
isOpen?: boolean;
|
|
10
|
+
onOpenChange?: (isOpen: boolean) => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Popover component that displays floating content triggered by click.
|
|
14
|
+
* Supports positioning in four directions with click-outside-to-close behavior.
|
|
15
|
+
*/
|
|
16
|
+
declare const Popover: React.ForwardRefExoticComponent<PopoverProps & React.RefAttributes<HTMLDivElement>>;
|
|
17
|
+
export { Popover };
|
|
18
|
+
//# sourceMappingURL=popover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../src/components/popover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAW3D,KAAK,eAAe,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AA+KD;;;GAGG;AACH,QAAA,MAAM,OAAO,qFAqLZ,CAAC;AAIF,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React, { useState, useRef, useEffect } from "react";
|
|
3
|
+
import { createPortal } from "react-dom";
|
|
4
|
+
import { cn } from "../lib/utils";
|
|
5
|
+
// Layout and spacing constants
|
|
6
|
+
const ARROW_SIZE = 12;
|
|
7
|
+
const ARROW_MASK_THICKNESS = 2;
|
|
8
|
+
const POPOVER_GAP = 8;
|
|
9
|
+
const ARROW_POSITIONING_SIZE = 6;
|
|
10
|
+
const PopoverArrow = ({ position }) => {
|
|
11
|
+
const [borderWidth, setBorderWidth] = React.useState(1);
|
|
12
|
+
React.useEffect(() => {
|
|
13
|
+
const root = document.documentElement;
|
|
14
|
+
const borderWidthStr = getComputedStyle(root).getPropertyValue("--border-width-base").trim();
|
|
15
|
+
const width = parseFloat(borderWidthStr) || 1;
|
|
16
|
+
setBorderWidth(width);
|
|
17
|
+
}, []);
|
|
18
|
+
/**
|
|
19
|
+
* Calculate SVG polygon points for the arrow triangle.
|
|
20
|
+
* Creates a triangle pointing in the specified direction.
|
|
21
|
+
*/
|
|
22
|
+
const getArrowPoints = () => {
|
|
23
|
+
const halfSize = ARROW_SIZE / 2;
|
|
24
|
+
switch (position) {
|
|
25
|
+
case "top":
|
|
26
|
+
return `${halfSize},${ARROW_SIZE} 0,0 ${ARROW_SIZE},0`;
|
|
27
|
+
case "bottom":
|
|
28
|
+
return `${halfSize},0 0,${ARROW_SIZE} ${ARROW_SIZE},${ARROW_SIZE}`;
|
|
29
|
+
case "left":
|
|
30
|
+
return `${ARROW_SIZE},${halfSize} 0,0 0,${ARROW_SIZE}`;
|
|
31
|
+
case "right":
|
|
32
|
+
return `0,${halfSize} ${ARROW_SIZE},0 ${ARROW_SIZE},${ARROW_SIZE}`;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Calculate border lines for the arrow.
|
|
37
|
+
* Excludes the edge that connects to the popover to avoid double borders.
|
|
38
|
+
*/
|
|
39
|
+
const getBorderLines = () => {
|
|
40
|
+
const halfSize = ARROW_SIZE / 2;
|
|
41
|
+
switch (position) {
|
|
42
|
+
case "top":
|
|
43
|
+
return [
|
|
44
|
+
{ x1: halfSize, y1: ARROW_SIZE, x2: 0, y2: 0 },
|
|
45
|
+
{ x1: halfSize, y1: ARROW_SIZE, x2: ARROW_SIZE, y2: 0 },
|
|
46
|
+
];
|
|
47
|
+
case "bottom":
|
|
48
|
+
return [
|
|
49
|
+
{ x1: halfSize, y1: 0, x2: 0, y2: ARROW_SIZE },
|
|
50
|
+
{ x1: halfSize, y1: 0, x2: ARROW_SIZE, y2: ARROW_SIZE },
|
|
51
|
+
];
|
|
52
|
+
case "left":
|
|
53
|
+
return [
|
|
54
|
+
{ x1: ARROW_SIZE, y1: halfSize, x2: 0, y2: 0 },
|
|
55
|
+
{ x1: ARROW_SIZE, y1: halfSize, x2: 0, y2: ARROW_SIZE },
|
|
56
|
+
];
|
|
57
|
+
case "right":
|
|
58
|
+
return [
|
|
59
|
+
{ x1: 0, y1: halfSize, x2: ARROW_SIZE, y2: 0 },
|
|
60
|
+
{ x1: 0, y1: halfSize, x2: ARROW_SIZE, y2: ARROW_SIZE },
|
|
61
|
+
];
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Calculate positioning styles for the arrow relative to the popover.
|
|
66
|
+
* Accounts for border width and positions the arrow at the popover edge.
|
|
67
|
+
*/
|
|
68
|
+
const getArrowStyles = () => {
|
|
69
|
+
const borderOffset = borderWidth / 2;
|
|
70
|
+
switch (position) {
|
|
71
|
+
case "top":
|
|
72
|
+
return {
|
|
73
|
+
top: `calc(100% + ${borderOffset}px)`,
|
|
74
|
+
left: "50%",
|
|
75
|
+
transform: `translateX(-50%) translateY(-${borderOffset}px)`,
|
|
76
|
+
};
|
|
77
|
+
case "bottom":
|
|
78
|
+
return {
|
|
79
|
+
bottom: `calc(100% + ${borderOffset}px)`,
|
|
80
|
+
left: "50%",
|
|
81
|
+
transform: `translateX(-50%) translateY(${borderOffset}px)`,
|
|
82
|
+
};
|
|
83
|
+
case "left":
|
|
84
|
+
return {
|
|
85
|
+
left: `calc(100% + ${borderOffset}px)`,
|
|
86
|
+
top: "50%",
|
|
87
|
+
transform: `translateY(-50%) translateX(-${borderOffset}px)`,
|
|
88
|
+
};
|
|
89
|
+
case "right":
|
|
90
|
+
return {
|
|
91
|
+
right: `calc(100% + ${borderOffset}px)`,
|
|
92
|
+
top: "50%",
|
|
93
|
+
transform: `translateY(-50%) translateX(${borderOffset}px)`,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Get the connecting edge mask based on arrow position.
|
|
99
|
+
* This hides the popover border at the arrow connection point.
|
|
100
|
+
*/
|
|
101
|
+
const getMaskRect = () => {
|
|
102
|
+
switch (position) {
|
|
103
|
+
case "top":
|
|
104
|
+
return (_jsx("rect", { x: "0", y: ARROW_SIZE - ARROW_MASK_THICKNESS, width: ARROW_SIZE, height: ARROW_MASK_THICKNESS, fill: "black" }));
|
|
105
|
+
case "bottom":
|
|
106
|
+
return _jsx("rect", { x: "0", y: "0", width: ARROW_SIZE, height: ARROW_MASK_THICKNESS, fill: "black" });
|
|
107
|
+
case "left":
|
|
108
|
+
return (_jsx("rect", { x: ARROW_SIZE - ARROW_MASK_THICKNESS, y: "0", width: ARROW_MASK_THICKNESS, height: ARROW_SIZE, fill: "black" }));
|
|
109
|
+
case "right":
|
|
110
|
+
return _jsx("rect", { x: "0", y: "0", width: ARROW_MASK_THICKNESS, height: ARROW_SIZE, fill: "black" });
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
return (_jsxs("svg", { width: ARROW_SIZE, height: ARROW_SIZE, viewBox: `0 0 ${ARROW_SIZE} ${ARROW_SIZE}`, className: "absolute pointer-events-none", style: getArrowStyles(), children: [_jsx("defs", { children: _jsxs("mask", { id: `popover-arrow-mask-${position}`, children: [_jsx("rect", { width: ARROW_SIZE, height: ARROW_SIZE, fill: "white" }), getMaskRect()] }) }), _jsx("polygon", { points: getArrowPoints(), fill: "var(--color-background-900)", mask: `url(#popover-arrow-mask-${position})` }), getBorderLines().map((line, idx) => (_jsx("line", { x1: line.x1, y1: line.y1, x2: line.x2, y2: line.y2, stroke: "var(--color-background-700)", strokeWidth: borderWidth, strokeLinecap: "round" }, idx)))] }));
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Popover component that displays floating content triggered by click.
|
|
117
|
+
* Supports positioning in four directions with click-outside-to-close behavior.
|
|
118
|
+
*/
|
|
119
|
+
const Popover = React.forwardRef(({ children, content, position = "bottom", className, contentClassName, isOpen: controlledIsOpen, onOpenChange, }, ref) => {
|
|
120
|
+
const [isOpen, setIsOpen] = useState(controlledIsOpen ?? false);
|
|
121
|
+
const [isPositioned, setIsPositioned] = useState(false);
|
|
122
|
+
const [popoverPosition, setPopoverPosition] = useState({
|
|
123
|
+
top: 0,
|
|
124
|
+
left: 0,
|
|
125
|
+
});
|
|
126
|
+
const triggerRef = useRef(null);
|
|
127
|
+
// Handle controlled/uncontrolled component
|
|
128
|
+
const open = controlledIsOpen !== undefined ? controlledIsOpen : isOpen;
|
|
129
|
+
const setOpen = (newOpen) => {
|
|
130
|
+
if (controlledIsOpen === undefined) {
|
|
131
|
+
setIsOpen(newOpen);
|
|
132
|
+
}
|
|
133
|
+
onOpenChange?.(newOpen);
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Calculate popover position based on trigger element and position preference.
|
|
137
|
+
* Positions the popover with appropriate spacing and arrow alignment.
|
|
138
|
+
* Uses a separate effect to allow immediate rendering while still applying positioning.
|
|
139
|
+
*/
|
|
140
|
+
useEffect(() => {
|
|
141
|
+
if (!open || !triggerRef.current)
|
|
142
|
+
return;
|
|
143
|
+
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
144
|
+
let top = 0;
|
|
145
|
+
let left = 0;
|
|
146
|
+
switch (position) {
|
|
147
|
+
case "top":
|
|
148
|
+
top = triggerRect.top - POPOVER_GAP - ARROW_POSITIONING_SIZE;
|
|
149
|
+
left = triggerRect.left + triggerRect.width / 2;
|
|
150
|
+
break;
|
|
151
|
+
case "bottom":
|
|
152
|
+
top = triggerRect.bottom + POPOVER_GAP + ARROW_POSITIONING_SIZE;
|
|
153
|
+
left = triggerRect.left + triggerRect.width / 2;
|
|
154
|
+
break;
|
|
155
|
+
case "left":
|
|
156
|
+
top = triggerRect.top + triggerRect.height / 2;
|
|
157
|
+
left = triggerRect.left - POPOVER_GAP - ARROW_POSITIONING_SIZE;
|
|
158
|
+
break;
|
|
159
|
+
case "right":
|
|
160
|
+
top = triggerRect.top + triggerRect.height / 2;
|
|
161
|
+
left = triggerRect.right + POPOVER_GAP + ARROW_POSITIONING_SIZE;
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
setPopoverPosition({ top, left });
|
|
165
|
+
}, [open, position]);
|
|
166
|
+
/**
|
|
167
|
+
* Mark as positioned after position calculation to prevent layout shift.
|
|
168
|
+
* Uses a separate effect to ensure positioning is calculated first.
|
|
169
|
+
*/
|
|
170
|
+
useEffect(() => {
|
|
171
|
+
if (!open) {
|
|
172
|
+
setIsPositioned(false);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
setIsPositioned(true);
|
|
176
|
+
}, [open]);
|
|
177
|
+
/**
|
|
178
|
+
* Handle trigger click to toggle popover visibility.
|
|
179
|
+
*/
|
|
180
|
+
const handleTriggerClick = (e) => {
|
|
181
|
+
e.stopPropagation();
|
|
182
|
+
setOpen(!open);
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* Handle click outside popover to close it.
|
|
186
|
+
* Keep track of popover content DOM node to prevent closing on internal clicks.
|
|
187
|
+
*/
|
|
188
|
+
const popoverContentRef = useRef(null);
|
|
189
|
+
useEffect(() => {
|
|
190
|
+
if (!open)
|
|
191
|
+
return;
|
|
192
|
+
const handleClickOutside = (e) => {
|
|
193
|
+
const target = e.target;
|
|
194
|
+
if (triggerRef.current &&
|
|
195
|
+
!triggerRef.current.contains(target) &&
|
|
196
|
+
popoverContentRef.current &&
|
|
197
|
+
!popoverContentRef.current.contains(target)) {
|
|
198
|
+
setOpen(false);
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
document.addEventListener("click", handleClickOutside);
|
|
202
|
+
return () => {
|
|
203
|
+
document.removeEventListener("click", handleClickOutside);
|
|
204
|
+
};
|
|
205
|
+
}, [open]);
|
|
206
|
+
/**
|
|
207
|
+
* Handle Escape key to close popover.
|
|
208
|
+
*/
|
|
209
|
+
useEffect(() => {
|
|
210
|
+
if (!open)
|
|
211
|
+
return;
|
|
212
|
+
const handleKeyDown = (event) => {
|
|
213
|
+
if (event.key === "Escape") {
|
|
214
|
+
setOpen(false);
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
218
|
+
return () => {
|
|
219
|
+
document.removeEventListener("keydown", handleKeyDown);
|
|
220
|
+
};
|
|
221
|
+
}, [open]);
|
|
222
|
+
/**
|
|
223
|
+
* CSS classes for positioning the popover container based on direction.
|
|
224
|
+
* Applies negative transforms to properly center the popover relative to trigger.
|
|
225
|
+
*/
|
|
226
|
+
const positionClasses = {
|
|
227
|
+
top: "-translate-x-1/2 -translate-y-full",
|
|
228
|
+
bottom: "-translate-x-1/2 translate-y-0",
|
|
229
|
+
left: "-translate-y-1/2 -translate-x-full",
|
|
230
|
+
right: "-translate-y-1/2 translate-x-0",
|
|
231
|
+
};
|
|
232
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { ref: triggerRef, onClick: handleTriggerClick, className: cn("inline-block", className), children: children }), open &&
|
|
233
|
+
createPortal(_jsx("div", { role: "dialog", className: cn("fixed pointer-events-none z-50 transition-opacity", positionClasses[position], {
|
|
234
|
+
"opacity-0": !isPositioned,
|
|
235
|
+
"opacity-100": isPositioned,
|
|
236
|
+
}), style: {
|
|
237
|
+
top: `${popoverPosition.top}px`,
|
|
238
|
+
left: `${popoverPosition.left}px`,
|
|
239
|
+
}, children: _jsxs("div", { ref: popoverContentRef, onClick: (e) => e.stopPropagation(), className: cn("relative pointer-events-auto bg-background-900 text-foreground-50 text-sm p-3 rounded-lg shadow-lg border border-background-700", contentClassName), children: [content, _jsx(PopoverArrow, { position: position })] }) }), document.body)] }));
|
|
240
|
+
});
|
|
241
|
+
Popover.displayName = "Popover";
|
|
242
|
+
export { Popover };
|
|
243
|
+
//# sourceMappingURL=popover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popover.js","sourceRoot":"","sources":["../../src/components/popover.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
declare const progressVariants: (props?: ({
|
|
4
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
5
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
|
+
declare const progressFillVariants: (props?: ({
|
|
7
|
+
variant?: "default" | "success" | "warning" | "error" | null | undefined;
|
|
8
|
+
animated?: boolean | null | undefined;
|
|
9
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
10
|
+
export interface ProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children">, VariantProps<typeof progressVariants>, VariantProps<typeof progressFillVariants> {
|
|
11
|
+
value?: number;
|
|
12
|
+
max?: number;
|
|
13
|
+
indeterminate?: boolean;
|
|
14
|
+
label?: string;
|
|
15
|
+
showValue?: boolean;
|
|
16
|
+
}
|
|
17
|
+
declare const Progress: React.ForwardRefExoticComponent<ProgressProps & React.RefAttributes<HTMLDivElement>>;
|
|
18
|
+
export { Progress, progressVariants, progressFillVariants };
|
|
19
|
+
//# sourceMappingURL=progress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/components/progress.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,gBAAgB;;8EASpB,CAAC;AAEH,QAAA,MAAM,oBAAoB;;;8EAiBzB,CAAC;AAEF,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,EAC5D,YAAY,CAAC,OAAO,gBAAgB,CAAC,EACrC,YAAY,CAAC,OAAO,oBAAoB,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,QAAA,MAAM,QAAQ,sFAsDb,CAAC;AAIF,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { cva } from "class-variance-authority";
|
|
5
|
+
import { cn } from "../lib/utils";
|
|
6
|
+
const progressVariants = cva("relative w-full overflow-hidden rounded-full", {
|
|
7
|
+
variants: {
|
|
8
|
+
size: {
|
|
9
|
+
sm: "h-1",
|
|
10
|
+
md: "h-2",
|
|
11
|
+
lg: "h-3",
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
defaultVariants: { size: "md" },
|
|
15
|
+
});
|
|
16
|
+
const progressFillVariants = cva("h-full transition-all duration-300 ease-out rounded-full", {
|
|
17
|
+
variants: {
|
|
18
|
+
variant: {
|
|
19
|
+
default: "bg-accent-500",
|
|
20
|
+
success: "bg-success-500",
|
|
21
|
+
warning: "bg-warning-500",
|
|
22
|
+
error: "bg-danger-500",
|
|
23
|
+
},
|
|
24
|
+
animated: {
|
|
25
|
+
true: "animate-pulse",
|
|
26
|
+
false: "",
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
defaultVariants: { variant: "default", animated: false },
|
|
30
|
+
});
|
|
31
|
+
const Progress = React.forwardRef(({ className, size = "md", variant = "default", animated = false, value = 0, max = 100, indeterminate = false, label, showValue = false, ...props }, ref) => {
|
|
32
|
+
const clampedValue = Math.min(Math.max(value, 0), max);
|
|
33
|
+
const percentage = (clampedValue / max) * 100;
|
|
34
|
+
return (_jsxs("div", { className: cn("w-full", showValue || label ? "space-y-1" : ""), children: [(label || showValue) && (_jsxs("div", { className: "flex items-center justify-between text-sm text-foreground-400", children: [label && _jsx("span", { children: label }), showValue && !indeterminate && (_jsxs("span", { className: "tabular-nums", children: [Math.round(percentage), "%"] }))] })), _jsx("div", { ref: ref, role: "progressbar", "aria-valuenow": indeterminate ? undefined : clampedValue, "aria-valuemin": 0, "aria-valuemax": max, "aria-label": label, className: cn(progressVariants({ size }), "bg-background-700", className), ...props, children: _jsx("div", { className: cn(progressFillVariants({ variant, animated: animated || indeterminate }), indeterminate && "w-1/3 animate-[progress-indeterminate_1.5s_ease-in-out_infinite]"), style: indeterminate ? undefined : { width: `${percentage}%` } }) })] }));
|
|
35
|
+
});
|
|
36
|
+
Progress.displayName = "Progress";
|
|
37
|
+
export { Progress, progressVariants, progressFillVariants };
|
|
38
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/components/progress.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,gBAAgB,GAAG,GAAG,CAAC,8CAA8C,EAAE;IAC3E,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,EAAE,EAAE,KAAK;YACT,EAAE,EAAE,KAAK;YACT,EAAE,EAAE,KAAK;SACV;KACF;IACD,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;CAChC,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,GAAG,CAC9B,0DAA0D,EAC1D;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,gBAAgB;YACzB,OAAO,EAAE,gBAAgB;YACzB,KAAK,EAAE,eAAe;SACvB;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,EAAE;SACV;KACF;IACD,eAAe,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;CACzD,CACF,CAAC;AAaF,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAC/B,CACE,EACE,SAAS,EACT,IAAI,GAAG,IAAI,EACX,OAAO,GAAG,SAAS,EACnB,QAAQ,GAAG,KAAK,EAChB,KAAK,GAAG,CAAC,EACT,GAAG,GAAG,GAAG,EACT,aAAa,GAAG,KAAK,EACrB,KAAK,EACL,SAAS,GAAG,KAAK,EACjB,GAAG,KAAK,EACT,EACD,GAAG,EACH,EAAE;IACF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAE9C,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,aAChE,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,CACvB,eAAK,SAAS,EAAC,+DAA+D,aAC3E,KAAK,IAAI,yBAAO,KAAK,GAAQ,EAC7B,SAAS,IAAI,CAAC,aAAa,IAAI,CAC9B,gBAAM,SAAS,EAAC,cAAc,aAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAChE,IACG,CACP,EACD,cACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,aAAa,mBACH,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,mBACxC,CAAC,mBACD,GAAG,gBACN,KAAK,EACjB,SAAS,EAAE,EAAE,CACX,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,EAC1B,mBAAmB,EACnB,SAAS,CACV,KACG,KAAK,YAET,cACE,SAAS,EAAE,EAAE,CACX,oBAAoB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,IAAI,aAAa,EAAE,CAAC,EACtE,aAAa,IAAI,kEAAkE,CACpF,EACD,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,UAAU,GAAG,EAAE,GAC9D,GACE,IACF,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
declare const radioVariants: (props?: ({
|
|
4
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
5
|
+
checked?: boolean | null | undefined;
|
|
6
|
+
disabled?: boolean | null | undefined;
|
|
7
|
+
error?: boolean | null | undefined;
|
|
8
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
9
|
+
export interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "type" | "size" | "checked" | "disabled">, VariantProps<typeof radioVariants> {
|
|
10
|
+
label?: React.ReactNode;
|
|
11
|
+
description?: React.ReactNode;
|
|
12
|
+
helperText?: React.ReactNode;
|
|
13
|
+
helperTextError?: boolean;
|
|
14
|
+
}
|
|
15
|
+
declare const Radio: React.ForwardRefExoticComponent<RadioProps & React.RefAttributes<HTMLInputElement>>;
|
|
16
|
+
export { Radio, radioVariants };
|
|
17
|
+
//# sourceMappingURL=radio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio.d.ts","sourceRoot":"","sources":["../../src/components/radio.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,aAAa;;;;;8EA6BlB,CAAC;AAEF,MAAM,WAAW,UACf,SAAQ,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC,EACnG,YAAY,CAAC,OAAO,aAAa,CAAC;IAClC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,QAAA,MAAM,KAAK,qFAyHV,CAAC;AAIF,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React, { useState, useId } from "react";
|
|
4
|
+
import { cva } from "class-variance-authority";
|
|
5
|
+
import { cn } from "../lib/utils";
|
|
6
|
+
const radioVariants = cva("inline-flex items-center justify-center rounded-full border-2 transition-all cursor-pointer flex-shrink-0", {
|
|
7
|
+
variants: {
|
|
8
|
+
size: {
|
|
9
|
+
sm: "w-4 h-4",
|
|
10
|
+
md: "w-5 h-5",
|
|
11
|
+
lg: "w-6 h-6",
|
|
12
|
+
},
|
|
13
|
+
checked: {
|
|
14
|
+
true: "bg-accent-500 border-accent-500",
|
|
15
|
+
false: "bg-background-800 border-background-700",
|
|
16
|
+
},
|
|
17
|
+
disabled: {
|
|
18
|
+
true: "opacity-60 cursor-not-allowed",
|
|
19
|
+
false: "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-500/50",
|
|
20
|
+
},
|
|
21
|
+
error: {
|
|
22
|
+
true: "border-danger-600 bg-danger-600/10",
|
|
23
|
+
false: "",
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
defaultVariants: {
|
|
27
|
+
size: "md",
|
|
28
|
+
checked: false,
|
|
29
|
+
disabled: false,
|
|
30
|
+
error: false,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
const Radio = React.forwardRef(({ className, size = "md", disabled = false, error = false, label, description, helperText, helperTextError = false, checked: checkedProp, defaultChecked, onChange, id, ...props }, ref) => {
|
|
34
|
+
const [internalChecked, setInternalChecked] = useState(checkedProp === true);
|
|
35
|
+
const generatedId = useId();
|
|
36
|
+
const isControlled = checkedProp !== undefined;
|
|
37
|
+
const checked = isControlled ? (checkedProp ?? false) : internalChecked;
|
|
38
|
+
const handleChange = (e) => {
|
|
39
|
+
if (!isControlled) {
|
|
40
|
+
setInternalChecked(e.target.checked);
|
|
41
|
+
}
|
|
42
|
+
onChange?.(e);
|
|
43
|
+
};
|
|
44
|
+
const radioId = id || `radio-${generatedId}`;
|
|
45
|
+
return (_jsxs("div", { className: "w-full", children: [_jsxs("div", { className: "flex items-start gap-3", children: [_jsx("input", { ref: ref, type: "radio", id: radioId, checked: checked, onChange: handleChange, disabled: disabled ?? false, className: "hidden", "aria-label": typeof label === "string" ? label : undefined, suppressHydrationWarning: true, ...props }), _jsx("div", { className: cn(radioVariants({
|
|
46
|
+
size,
|
|
47
|
+
checked,
|
|
48
|
+
disabled,
|
|
49
|
+
error,
|
|
50
|
+
className,
|
|
51
|
+
})), onClick: () => {
|
|
52
|
+
if (!disabled) {
|
|
53
|
+
const input = document.getElementById(radioId);
|
|
54
|
+
if (input) {
|
|
55
|
+
input.click();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}, role: "presentation", children: checked && (_jsx("div", { className: cn("bg-accent-50 rounded-full", size === "sm" && "w-2 h-2", size === "md" && "w-2.5 h-2.5", size === "lg" && "w-3 h-3") })) }), (label || description) && (_jsxs("div", { className: "flex flex-col gap-1", children: [label && (_jsx("label", { htmlFor: radioId, className: cn("text-foreground-300 transition-colors cursor-pointer select-none pt-1", disabled && "opacity-60 cursor-not-allowed text-foreground-500", size === "sm" && "text-xs", size === "md" && "text-sm", size === "lg" && "text-base"), suppressHydrationWarning: true, children: label })), description && (_jsx("p", { className: cn("text-xs transition-colors", disabled && "opacity-60 text-foreground-500", error ? "text-danger-600" : "text-foreground-500"), children: description }))] }))] }), helperText && (_jsx("p", { className: cn("text-xs mt-2 ml-8 transition-colors", helperTextError ? "text-danger-600" : "text-foreground-500"), children: helperText }))] }));
|
|
59
|
+
});
|
|
60
|
+
Radio.displayName = "Radio";
|
|
61
|
+
export { Radio, radioVariants };
|
|
62
|
+
//# sourceMappingURL=radio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio.js","sourceRoot":"","sources":["../../src/components/radio.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
3
|
+
declare const Select: React.FC<SelectPrimitive.SelectProps>;
|
|
4
|
+
declare const SelectGroup: React.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
5
|
+
declare const SelectValue: React.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React.RefAttributes<HTMLSpanElement>>;
|
|
6
|
+
declare const SelectTrigger: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
7
|
+
declare const SelectScrollUpButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
8
|
+
declare const SelectScrollDownButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
9
|
+
declare const SelectContent: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
10
|
+
declare const SelectItem: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
11
|
+
declare const SelectSeparator: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
12
|
+
export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, };
|
|
13
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/components/select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAIzD,QAAA,MAAM,MAAM,uCAAuB,CAAA;AAEnC,QAAA,MAAM,WAAW,yGAAwB,CAAA;AAEzC,QAAA,MAAM,WAAW,0GAAwB,CAAA;AAEzC,QAAA,MAAM,aAAa,oKAkBjB,CAAA;AAGF,QAAA,MAAM,oBAAoB,qKAcxB,CAAA;AAGF,QAAA,MAAM,sBAAsB,uKAc1B,CAAA;AAIF,QAAA,MAAM,aAAa,8JA6BjB,CAAA;AAGF,QAAA,MAAM,UAAU,2JAoBd,CAAA;AAGF,QAAA,MAAM,eAAe,gKASnB,CAAA;AAGF,OAAO,EACL,MAAM,EACN,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,EACb,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
5
|
+
import { cn } from "../lib/utils";
|
|
6
|
+
import { FaCheck, FaChevronDown } from "react-icons/fa6";
|
|
7
|
+
const Select = SelectPrimitive.Root;
|
|
8
|
+
const SelectGroup = SelectPrimitive.Group;
|
|
9
|
+
const SelectValue = SelectPrimitive.Value;
|
|
10
|
+
const SelectTrigger = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(SelectPrimitive.Trigger, { ref: ref, className: cn("flex h-9 w-full items-center justify-between rounded-lg border border-background-700 bg-background-800/50 px-3 py-2 text-sm text-foreground-50 hover:border-background-600 focus:outline-none focus:ring-2 focus:ring-accent-500 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1", className), suppressHydrationWarning: true, ...props, children: [children, _jsx(SelectPrimitive.Icon, { asChild: true, children: _jsx(FaChevronDown, { className: "w-2.5 h-2.5" }) })] })));
|
|
11
|
+
SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
|
|
12
|
+
const SelectScrollUpButton = React.forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.ScrollUpButton, { ref: ref, className: cn("flex cursor-default items-center justify-center py-1", className), ...props, children: _jsx(FaChevronDown, { className: "w-2.5 h-2.5" }) })));
|
|
13
|
+
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
|
|
14
|
+
const SelectScrollDownButton = React.forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.ScrollDownButton, { ref: ref, className: cn("flex cursor-default items-center justify-center py-1", className), ...props, children: _jsx(FaChevronDown, { className: "w-2.5 h-2.5" }) })));
|
|
15
|
+
SelectScrollDownButton.displayName =
|
|
16
|
+
SelectPrimitive.ScrollDownButton.displayName;
|
|
17
|
+
const SelectContent = React.forwardRef(({ className, children, position = "popper", ...props }, ref) => (_jsx(SelectPrimitive.Portal, { children: _jsxs(SelectPrimitive.Content, { ref: ref, className: cn("relative z-50 overflow-hidden rounded-lg border border-background-700 bg-background-900 shadow-md 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 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", position === "popper" &&
|
|
18
|
+
"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", className), position: position, ...props, children: [_jsx(SelectScrollUpButton, {}), _jsx(SelectPrimitive.Viewport, { className: cn("p-1 w-fit", position === "popper" &&
|
|
19
|
+
"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"), children: children }), _jsx(SelectScrollDownButton, {})] }) })));
|
|
20
|
+
SelectContent.displayName = SelectPrimitive.Content.displayName;
|
|
21
|
+
const SelectItem = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(SelectPrimitive.Item, { ref: ref, className: cn("relative flex cursor-default select-none items-center rounded-lg py-1.5 pl-8 pr-2 text-sm outline-none hover:bg-background-700/50 focus:bg-background-700/50 data-[disabled]:pointer-events-none data-[disabled]:opacity-50", className), ...props, children: [_jsx("span", { className: "absolute left-2 flex items-center justify-center", children: _jsx(SelectPrimitive.ItemIndicator, { children: _jsx(FaCheck, { className: "w-3 h-3 text-accent-500" }) }) }), _jsx(SelectPrimitive.ItemText, { children: children })] })));
|
|
22
|
+
SelectItem.displayName = SelectPrimitive.Item.displayName;
|
|
23
|
+
const SelectSeparator = React.forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.Separator, { ref: ref, className: cn("-mx-1 my-1 h-px bg-background-700", className), ...props })));
|
|
24
|
+
SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
|
|
25
|
+
export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, };
|
|
26
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/components/select.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as SliderPrimitive from '@radix-ui/react-slider';
|
|
3
|
+
declare const Root: React.ForwardRefExoticComponent<Omit<SliderPrimitive.SliderProps & React.RefAttributes<HTMLSpanElement>, "ref"> & {
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
size?: "sm" | "md" | "lg";
|
|
6
|
+
} & React.RefAttributes<HTMLSpanElement>>;
|
|
7
|
+
declare const Thumb: React.ForwardRefExoticComponent<Omit<SliderPrimitive.SliderThumbProps & React.RefAttributes<HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
|
|
8
|
+
export { Root, Thumb };
|
|
9
|
+
//# sourceMappingURL=slider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../src/components/slider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAO1D,QAAA,MAAM,IAAI;eAEmE,OAAO;WAAS,IAAI,GAAG,IAAI,GAAG,IAAI;yCAgC7G,CAAC;AAGH,QAAA,MAAM,KAAK,8JAmBT,CAAC;AAGH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC"}
|