@websolutespa/ask-ui 1.0.3 → 1.0.5

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.
Files changed (129) hide show
  1. package/dist/components/accordion.d.mts +25 -0
  2. package/dist/components/accordion.mjs +55 -0
  3. package/dist/components/ai-elements/attachments.d.mts +94 -0
  4. package/dist/components/ai-elements/attachments.mjs +174 -0
  5. package/dist/components/ai-elements/conversation.d.mts +51 -0
  6. package/dist/components/ai-elements/conversation.mjs +85 -0
  7. package/dist/components/ai-elements/message.d.mts +89 -0
  8. package/dist/components/ai-elements/message.mjs +175 -0
  9. package/dist/components/ai-elements/prompt-input.d.mts +277 -0
  10. package/dist/components/ai-elements/prompt-input.mjs +703 -0
  11. package/dist/components/ai-elements/speech-input.d.mts +64 -0
  12. package/dist/components/ai-elements/speech-input.mjs +153 -0
  13. package/dist/components/alert-dialog.d.mts +60 -0
  14. package/dist/components/alert-dialog.mjs +101 -0
  15. package/dist/components/alert.d.mts +28 -0
  16. package/dist/components/alert.mjs +43 -0
  17. package/dist/components/aspect-ratio.d.mts +9 -0
  18. package/dist/components/aspect-ratio.mjs +12 -0
  19. package/dist/components/avatar.d.mts +34 -0
  20. package/dist/components/avatar.mjs +51 -0
  21. package/dist/components/badge.d.mts +19 -0
  22. package/dist/components/badge.mjs +27 -0
  23. package/dist/components/breadcrumb.d.mts +38 -0
  24. package/dist/components/breadcrumb.mjs +70 -0
  25. package/dist/components/button-group.d.mts +28 -0
  26. package/dist/components/button-group.mjs +38 -0
  27. package/dist/components/button.d.mts +21 -0
  28. package/dist/components/button.mjs +47 -0
  29. package/dist/components/calendar.d.mts +30 -0
  30. package/dist/components/calendar.mjs +109 -0
  31. package/dist/components/card.d.mts +37 -0
  32. package/dist/components/card.mjs +56 -0
  33. package/dist/components/carousel.d.mts +56 -0
  34. package/dist/components/carousel.mjs +132 -0
  35. package/dist/components/chart.d.mts +78 -0
  36. package/dist/components/chart.mjs +146 -0
  37. package/dist/components/checkbox.d.mts +11 -0
  38. package/dist/components/checkbox.mjs +21 -0
  39. package/dist/components/collapsible.d.mts +15 -0
  40. package/dist/components/collapsible.mjs +24 -0
  41. package/dist/components/combobox.d.mts +81 -0
  42. package/dist/components/combobox.mjs +163 -0
  43. package/dist/components/command.d.mts +54 -0
  44. package/dist/components/command.mjs +88 -0
  45. package/dist/components/context-menu.d.mts +85 -0
  46. package/dist/components/context-menu.mjs +125 -0
  47. package/dist/components/dialog.d.mts +51 -0
  48. package/dist/components/dialog.mjs +96 -0
  49. package/dist/components/direction.d.mts +15 -0
  50. package/dist/components/direction.mjs +14 -0
  51. package/dist/components/drawer.d.mts +47 -0
  52. package/dist/components/drawer.mjs +79 -0
  53. package/dist/components/dropdown-menu.d.mts +87 -0
  54. package/dist/components/dropdown-menu.mjs +131 -0
  55. package/dist/components/empty.d.mts +35 -0
  56. package/dist/components/empty.mjs +59 -0
  57. package/dist/components/field.d.mts +64 -0
  58. package/dist/components/field.mjs +110 -0
  59. package/dist/components/hover-card.d.mts +22 -0
  60. package/dist/components/hover-card.mjs +33 -0
  61. package/dist/components/input-group.d.mts +43 -0
  62. package/dist/components/input-group.mjs +79 -0
  63. package/dist/components/input-otp.d.mts +28 -0
  64. package/dist/components/input-otp.mjs +47 -0
  65. package/dist/components/input.d.mts +11 -0
  66. package/dist/components/input.mjs +14 -0
  67. package/dist/components/item.d.mts +62 -0
  68. package/dist/components/item.mjs +117 -0
  69. package/dist/components/kbd.d.mts +13 -0
  70. package/dist/components/kbd.mjs +19 -0
  71. package/dist/components/label.d.mts +11 -0
  72. package/dist/components/label.mjs +15 -0
  73. package/dist/components/menubar.d.mts +90 -0
  74. package/dist/components/menubar.mjs +135 -0
  75. package/dist/components/native-select.d.mts +21 -0
  76. package/dist/components/native-select.mjs +37 -0
  77. package/dist/components/navigation-menu.d.mts +46 -0
  78. package/dist/components/navigation-menu.mjs +80 -0
  79. package/dist/components/pagination.d.mts +45 -0
  80. package/dist/components/pagination.mjs +80 -0
  81. package/dist/components/popover.d.mts +34 -0
  82. package/dist/components/popover.mjs +56 -0
  83. package/dist/components/progress.d.mts +12 -0
  84. package/dist/components/progress.mjs +20 -0
  85. package/dist/components/radio-group.d.mts +15 -0
  86. package/dist/components/radio-group.mjs +27 -0
  87. package/dist/components/resizable.d.mts +20 -0
  88. package/dist/components/resizable.mjs +28 -0
  89. package/dist/components/scroll-area.d.mts +17 -0
  90. package/dist/components/scroll-area.mjs +37 -0
  91. package/dist/components/select.d.mts +53 -0
  92. package/dist/components/select.mjs +100 -0
  93. package/dist/components/separator.d.mts +13 -0
  94. package/dist/components/separator.mjs +17 -0
  95. package/dist/components/sheet.d.mts +42 -0
  96. package/dist/components/sheet.mjs +90 -0
  97. package/dist/components/sidebar.d.mts +167 -0
  98. package/dist/components/sidebar.mjs +374 -0
  99. package/dist/components/skeleton.d.mts +9 -0
  100. package/dist/components/skeleton.mjs +12 -0
  101. package/dist/components/slider.d.mts +15 -0
  102. package/dist/components/slider.mjs +36 -0
  103. package/dist/components/sonner.d.mts +9 -0
  104. package/dist/components/sonner.mjs +30 -0
  105. package/dist/components/spinner.d.mts +9 -0
  106. package/dist/components/spinner.mjs +14 -0
  107. package/dist/components/switch.d.mts +14 -0
  108. package/dist/components/switch.mjs +20 -0
  109. package/dist/components/table.d.mts +38 -0
  110. package/dist/components/table.mjs +67 -0
  111. package/dist/components/tabs.d.mts +30 -0
  112. package/dist/components/tabs.mjs +46 -0
  113. package/dist/components/textarea.d.mts +10 -0
  114. package/dist/components/textarea.mjs +13 -0
  115. package/dist/components/toggle-group.d.mts +28 -0
  116. package/dist/components/toggle-group.mjs +51 -0
  117. package/dist/components/toggle.d.mts +19 -0
  118. package/dist/components/toggle.mjs +37 -0
  119. package/dist/components/tooltip.d.mts +23 -0
  120. package/dist/components/tooltip.mjs +36 -0
  121. package/dist/exports/components.d.mts +61 -0
  122. package/dist/exports/components.mjs +61 -0
  123. package/dist/exports/hooks.d.mts +2 -0
  124. package/dist/exports/hooks.mjs +2 -0
  125. package/dist/exports/lib.d.mts +2 -0
  126. package/dist/exports/lib.mjs +2 -0
  127. package/dist/hooks/use-mobile.d.mts +4 -0
  128. package/dist/hooks/use-mobile.mjs +18 -0
  129. package/package.json +7 -7
@@ -0,0 +1,64 @@
1
+ import { Button } from "../button.mjs";
2
+ import { ComponentProps } from "react";
3
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
+
5
+ //#region src/components/ai-elements/speech-input.d.ts
6
+ interface SpeechRecognition extends EventTarget {
7
+ continuous: boolean;
8
+ interimResults: boolean;
9
+ lang: string;
10
+ start(): void;
11
+ stop(): void;
12
+ onstart: ((this: SpeechRecognition, ev: Event) => void) | null;
13
+ onend: ((this: SpeechRecognition, ev: Event) => void) | null;
14
+ onresult: ((this: SpeechRecognition, ev: SpeechRecognitionEvent) => void) | null;
15
+ onerror: ((this: SpeechRecognition, ev: SpeechRecognitionErrorEvent) => void) | null;
16
+ }
17
+ interface SpeechRecognitionEvent extends Event {
18
+ results: SpeechRecognitionResultList;
19
+ resultIndex: number;
20
+ }
21
+ interface SpeechRecognitionResultList {
22
+ readonly length: number;
23
+ item(index: number): SpeechRecognitionResult;
24
+ [index: number]: SpeechRecognitionResult;
25
+ }
26
+ interface SpeechRecognitionResult {
27
+ readonly length: number;
28
+ item(index: number): SpeechRecognitionAlternative;
29
+ [index: number]: SpeechRecognitionAlternative;
30
+ isFinal: boolean;
31
+ }
32
+ interface SpeechRecognitionAlternative {
33
+ transcript: string;
34
+ confidence: number;
35
+ }
36
+ interface SpeechRecognitionErrorEvent extends Event {
37
+ error: string;
38
+ }
39
+ declare global {
40
+ interface Window {
41
+ SpeechRecognition: new () => SpeechRecognition;
42
+ webkitSpeechRecognition: new () => SpeechRecognition;
43
+ }
44
+ }
45
+ type SpeechInputProps = ComponentProps<typeof Button> & {
46
+ onTranscriptionChange?: (text: string) => void;
47
+ /**
48
+ * Callback for when audio is recorded using MediaRecorder fallback.
49
+ * This is called in browsers that don't support the Web Speech API (Firefox, Safari).
50
+ * The callback receives an audio Blob that should be sent to a transcription service.
51
+ * Return the transcribed text, which will be passed to onTranscriptionChange.
52
+ */
53
+ onAudioRecorded?: (audioBlob: Blob) => Promise<string>;
54
+ lang?: string;
55
+ };
56
+ declare const SpeechInput: ({
57
+ className,
58
+ onTranscriptionChange,
59
+ onAudioRecorded,
60
+ lang,
61
+ ...props
62
+ }: SpeechInputProps) => _$react_jsx_runtime0.JSX.Element;
63
+ //#endregion
64
+ export { SpeechInput, SpeechInputProps };
@@ -0,0 +1,153 @@
1
+ "use client";
2
+ import { cn } from "../../lib/utils.mjs";
3
+ import { Button } from "../button.mjs";
4
+ import { Spinner } from "../spinner.mjs";
5
+ import { MicIcon, SquareIcon } from "lucide-react";
6
+ import { useCallback, useEffect, useRef, useState } from "react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ //#region src/components/ai-elements/speech-input.tsx
9
+ const detectSpeechInputMode = () => {
10
+ if (typeof window === "undefined") return "none";
11
+ if ("SpeechRecognition" in window || "webkitSpeechRecognition" in window) return "speech-recognition";
12
+ if ("MediaRecorder" in window && "mediaDevices" in navigator) return "media-recorder";
13
+ return "none";
14
+ };
15
+ const SpeechInput = ({ className, onTranscriptionChange, onAudioRecorded, lang = "en-US", ...props }) => {
16
+ const [isListening, setIsListening] = useState(false);
17
+ const [isProcessing, setIsProcessing] = useState(false);
18
+ const [mode] = useState(detectSpeechInputMode);
19
+ const [isRecognitionReady, setIsRecognitionReady] = useState(false);
20
+ const recognitionRef = useRef(null);
21
+ const mediaRecorderRef = useRef(null);
22
+ const streamRef = useRef(null);
23
+ const audioChunksRef = useRef([]);
24
+ const onTranscriptionChangeRef = useRef(onTranscriptionChange);
25
+ const onAudioRecordedRef = useRef(onAudioRecorded);
26
+ onTranscriptionChangeRef.current = onTranscriptionChange;
27
+ onAudioRecordedRef.current = onAudioRecorded;
28
+ useEffect(() => {
29
+ if (mode !== "speech-recognition") return;
30
+ const speechRecognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
31
+ speechRecognition.continuous = true;
32
+ speechRecognition.interimResults = true;
33
+ speechRecognition.lang = lang;
34
+ const handleStart = () => {
35
+ setIsListening(true);
36
+ };
37
+ const handleEnd = () => {
38
+ setIsListening(false);
39
+ };
40
+ const handleResult = (event) => {
41
+ const speechEvent = event;
42
+ let finalTranscript = "";
43
+ for (let i = speechEvent.resultIndex; i < speechEvent.results.length; i += 1) {
44
+ const result = speechEvent.results[i];
45
+ if (result.isFinal) finalTranscript += result[0]?.transcript ?? "";
46
+ }
47
+ if (finalTranscript) onTranscriptionChangeRef.current?.(finalTranscript);
48
+ };
49
+ const handleError = () => {
50
+ setIsListening(false);
51
+ };
52
+ speechRecognition.addEventListener("start", handleStart);
53
+ speechRecognition.addEventListener("end", handleEnd);
54
+ speechRecognition.addEventListener("result", handleResult);
55
+ speechRecognition.addEventListener("error", handleError);
56
+ recognitionRef.current = speechRecognition;
57
+ setIsRecognitionReady(true);
58
+ return () => {
59
+ speechRecognition.removeEventListener("start", handleStart);
60
+ speechRecognition.removeEventListener("end", handleEnd);
61
+ speechRecognition.removeEventListener("result", handleResult);
62
+ speechRecognition.removeEventListener("error", handleError);
63
+ speechRecognition.stop();
64
+ recognitionRef.current = null;
65
+ setIsRecognitionReady(false);
66
+ };
67
+ }, [mode, lang]);
68
+ useEffect(() => () => {
69
+ if (mediaRecorderRef.current?.state === "recording") mediaRecorderRef.current.stop();
70
+ if (streamRef.current) for (const track of streamRef.current.getTracks()) track.stop();
71
+ }, []);
72
+ const startMediaRecorder = useCallback(async () => {
73
+ if (!onAudioRecordedRef.current) return;
74
+ try {
75
+ const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
76
+ streamRef.current = stream;
77
+ const mediaRecorder = new MediaRecorder(stream);
78
+ audioChunksRef.current = [];
79
+ const handleDataAvailable = (event) => {
80
+ if (event.data.size > 0) audioChunksRef.current.push(event.data);
81
+ };
82
+ const handleStop = async () => {
83
+ for (const track of stream.getTracks()) track.stop();
84
+ streamRef.current = null;
85
+ const audioBlob = new Blob(audioChunksRef.current, { type: "audio/webm" });
86
+ if (audioBlob.size > 0 && onAudioRecordedRef.current) {
87
+ setIsProcessing(true);
88
+ try {
89
+ const transcript = await onAudioRecordedRef.current(audioBlob);
90
+ if (transcript) onTranscriptionChangeRef.current?.(transcript);
91
+ } catch {} finally {
92
+ setIsProcessing(false);
93
+ }
94
+ }
95
+ };
96
+ const handleError = () => {
97
+ setIsListening(false);
98
+ for (const track of stream.getTracks()) track.stop();
99
+ streamRef.current = null;
100
+ };
101
+ mediaRecorder.addEventListener("dataavailable", handleDataAvailable);
102
+ mediaRecorder.addEventListener("stop", handleStop);
103
+ mediaRecorder.addEventListener("error", handleError);
104
+ mediaRecorderRef.current = mediaRecorder;
105
+ mediaRecorder.start();
106
+ setIsListening(true);
107
+ } catch {
108
+ setIsListening(false);
109
+ }
110
+ }, []);
111
+ const stopMediaRecorder = useCallback(() => {
112
+ if (mediaRecorderRef.current?.state === "recording") mediaRecorderRef.current.stop();
113
+ setIsListening(false);
114
+ }, []);
115
+ const toggleListening = useCallback(() => {
116
+ if (mode === "speech-recognition" && recognitionRef.current) if (isListening) recognitionRef.current.stop();
117
+ else recognitionRef.current.start();
118
+ else if (mode === "media-recorder") if (isListening) stopMediaRecorder();
119
+ else startMediaRecorder();
120
+ }, [
121
+ mode,
122
+ isListening,
123
+ startMediaRecorder,
124
+ stopMediaRecorder
125
+ ]);
126
+ const isDisabled = mode === "none" || mode === "speech-recognition" && !isRecognitionReady || mode === "media-recorder" && !onAudioRecorded || isProcessing;
127
+ return /* @__PURE__ */ jsxs("div", {
128
+ className: "relative inline-flex items-center justify-center",
129
+ children: [isListening && [
130
+ 0,
131
+ 1,
132
+ 2
133
+ ].map((index) => /* @__PURE__ */ jsx("div", {
134
+ className: "absolute inset-0 animate-ping rounded-full border-2 border-red-400/30",
135
+ style: {
136
+ animationDelay: `${index * .3}s`,
137
+ animationDuration: "2s"
138
+ }
139
+ }, index)), /* @__PURE__ */ jsxs(Button, {
140
+ className: cn("relative z-10 rounded-full transition-all duration-300", isListening ? "bg-destructive text-white hover:bg-destructive/80 hover:text-white" : "bg-primary text-primary-foreground hover:bg-primary/80 hover:text-primary-foreground", className),
141
+ disabled: isDisabled,
142
+ onClick: toggleListening,
143
+ ...props,
144
+ children: [
145
+ isProcessing && /* @__PURE__ */ jsx(Spinner, {}),
146
+ !isProcessing && isListening && /* @__PURE__ */ jsx(SquareIcon, { className: "size-4" }),
147
+ !(isProcessing || isListening) && /* @__PURE__ */ jsx(MicIcon, { className: "size-4" })
148
+ ]
149
+ })]
150
+ });
151
+ };
152
+ //#endregion
153
+ export { SpeechInput };
@@ -0,0 +1,60 @@
1
+ import { Button } from "./button.mjs";
2
+ import { AlertDialog } from "radix-ui";
3
+ import * as React from "react";
4
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
+
6
+ //#region src/components/alert-dialog.d.ts
7
+ declare function AlertDialog$1({
8
+ ...props
9
+ }: React.ComponentProps<typeof AlertDialog.Root>): _$react_jsx_runtime0.JSX.Element;
10
+ declare function AlertDialogTrigger({
11
+ ...props
12
+ }: React.ComponentProps<typeof AlertDialog.Trigger>): _$react_jsx_runtime0.JSX.Element;
13
+ declare function AlertDialogPortal({
14
+ ...props
15
+ }: React.ComponentProps<typeof AlertDialog.Portal>): _$react_jsx_runtime0.JSX.Element;
16
+ declare function AlertDialogOverlay({
17
+ className,
18
+ ...props
19
+ }: React.ComponentProps<typeof AlertDialog.Overlay>): _$react_jsx_runtime0.JSX.Element;
20
+ declare function AlertDialogContent({
21
+ className,
22
+ size,
23
+ ...props
24
+ }: React.ComponentProps<typeof AlertDialog.Content> & {
25
+ size?: 'default' | 'sm';
26
+ }): _$react_jsx_runtime0.JSX.Element;
27
+ declare function AlertDialogHeader({
28
+ className,
29
+ ...props
30
+ }: React.ComponentProps<'div'>): _$react_jsx_runtime0.JSX.Element;
31
+ declare function AlertDialogFooter({
32
+ className,
33
+ ...props
34
+ }: React.ComponentProps<'div'>): _$react_jsx_runtime0.JSX.Element;
35
+ declare function AlertDialogMedia({
36
+ className,
37
+ ...props
38
+ }: React.ComponentProps<'div'>): _$react_jsx_runtime0.JSX.Element;
39
+ declare function AlertDialogTitle({
40
+ className,
41
+ ...props
42
+ }: React.ComponentProps<typeof AlertDialog.Title>): _$react_jsx_runtime0.JSX.Element;
43
+ declare function AlertDialogDescription({
44
+ className,
45
+ ...props
46
+ }: React.ComponentProps<typeof AlertDialog.Description>): _$react_jsx_runtime0.JSX.Element;
47
+ declare function AlertDialogAction({
48
+ className,
49
+ variant,
50
+ size,
51
+ ...props
52
+ }: React.ComponentProps<typeof AlertDialog.Action> & Pick<React.ComponentProps<typeof Button>, 'variant' | 'size'>): _$react_jsx_runtime0.JSX.Element;
53
+ declare function AlertDialogCancel({
54
+ className,
55
+ variant,
56
+ size,
57
+ ...props
58
+ }: React.ComponentProps<typeof AlertDialog.Cancel> & Pick<React.ComponentProps<typeof Button>, 'variant' | 'size'>): _$react_jsx_runtime0.JSX.Element;
59
+ //#endregion
60
+ export { AlertDialog$1 as AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger };
@@ -0,0 +1,101 @@
1
+ "use client";
2
+ import { cn } from "../lib/utils.mjs";
3
+ import { Button } from "./button.mjs";
4
+ import { AlertDialog } from "radix-ui";
5
+ import "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/components/alert-dialog.tsx
8
+ function AlertDialog$1({ ...props }) {
9
+ return /* @__PURE__ */ jsx(AlertDialog.Root, {
10
+ "data-slot": "alert-dialog",
11
+ ...props
12
+ });
13
+ }
14
+ function AlertDialogTrigger({ ...props }) {
15
+ return /* @__PURE__ */ jsx(AlertDialog.Trigger, {
16
+ "data-slot": "alert-dialog-trigger",
17
+ ...props
18
+ });
19
+ }
20
+ function AlertDialogPortal({ ...props }) {
21
+ return /* @__PURE__ */ jsx(AlertDialog.Portal, {
22
+ "data-slot": "alert-dialog-portal",
23
+ ...props
24
+ });
25
+ }
26
+ function AlertDialogOverlay({ className, ...props }) {
27
+ return /* @__PURE__ */ jsx(AlertDialog.Overlay, {
28
+ "data-slot": "alert-dialog-overlay",
29
+ className: cn("fixed inset-0 z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0", className),
30
+ ...props
31
+ });
32
+ }
33
+ function AlertDialogContent({ className, size = "default", ...props }) {
34
+ return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [/* @__PURE__ */ jsx(AlertDialogOverlay, {}), /* @__PURE__ */ jsx(AlertDialog.Content, {
35
+ "data-slot": "alert-dialog-content",
36
+ "data-size": size,
37
+ className: cn("group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-6 rounded-xl bg-popover p-6 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-lg data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
38
+ ...props
39
+ })] });
40
+ }
41
+ function AlertDialogHeader({ className, ...props }) {
42
+ return /* @__PURE__ */ jsx("div", {
43
+ "data-slot": "alert-dialog-header",
44
+ className: cn("grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]", className),
45
+ ...props
46
+ });
47
+ }
48
+ function AlertDialogFooter({ className, ...props }) {
49
+ return /* @__PURE__ */ jsx("div", {
50
+ "data-slot": "alert-dialog-footer",
51
+ className: cn("flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end", className),
52
+ ...props
53
+ });
54
+ }
55
+ function AlertDialogMedia({ className, ...props }) {
56
+ return /* @__PURE__ */ jsx("div", {
57
+ "data-slot": "alert-dialog-media",
58
+ className: cn("mb-2 inline-flex size-16 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8", className),
59
+ ...props
60
+ });
61
+ }
62
+ function AlertDialogTitle({ className, ...props }) {
63
+ return /* @__PURE__ */ jsx(AlertDialog.Title, {
64
+ "data-slot": "alert-dialog-title",
65
+ className: cn("text-lg font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2", className),
66
+ ...props
67
+ });
68
+ }
69
+ function AlertDialogDescription({ className, ...props }) {
70
+ return /* @__PURE__ */ jsx(AlertDialog.Description, {
71
+ "data-slot": "alert-dialog-description",
72
+ className: cn("text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
73
+ ...props
74
+ });
75
+ }
76
+ function AlertDialogAction({ className, variant = "default", size = "default", ...props }) {
77
+ return /* @__PURE__ */ jsx(Button, {
78
+ variant,
79
+ size,
80
+ asChild: true,
81
+ children: /* @__PURE__ */ jsx(AlertDialog.Action, {
82
+ "data-slot": "alert-dialog-action",
83
+ className: cn(className),
84
+ ...props
85
+ })
86
+ });
87
+ }
88
+ function AlertDialogCancel({ className, variant = "outline", size = "default", ...props }) {
89
+ return /* @__PURE__ */ jsx(Button, {
90
+ variant,
91
+ size,
92
+ asChild: true,
93
+ children: /* @__PURE__ */ jsx(AlertDialog.Cancel, {
94
+ "data-slot": "alert-dialog-cancel",
95
+ className: cn(className),
96
+ ...props
97
+ })
98
+ });
99
+ }
100
+ //#endregion
101
+ export { AlertDialog$1 as AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger };
@@ -0,0 +1,28 @@
1
+ import * as React from "react";
2
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
+ import { VariantProps } from "class-variance-authority";
4
+ import * as _$class_variance_authority_types0 from "class-variance-authority/types";
5
+
6
+ //#region src/components/alert.d.ts
7
+ declare const alertVariants: (props?: ({
8
+ variant?: "default" | "destructive" | null | undefined;
9
+ } & _$class_variance_authority_types0.ClassProp) | undefined) => string;
10
+ declare function Alert({
11
+ className,
12
+ variant,
13
+ ...props
14
+ }: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>): _$react_jsx_runtime0.JSX.Element;
15
+ declare function AlertTitle({
16
+ className,
17
+ ...props
18
+ }: React.ComponentProps<'div'>): _$react_jsx_runtime0.JSX.Element;
19
+ declare function AlertDescription({
20
+ className,
21
+ ...props
22
+ }: React.ComponentProps<'div'>): _$react_jsx_runtime0.JSX.Element;
23
+ declare function AlertAction({
24
+ className,
25
+ ...props
26
+ }: React.ComponentProps<'div'>): _$react_jsx_runtime0.JSX.Element;
27
+ //#endregion
28
+ export { Alert, AlertAction, AlertDescription, AlertTitle };
@@ -0,0 +1,43 @@
1
+ import { cn } from "../lib/utils.mjs";
2
+ import "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { cva } from "class-variance-authority";
5
+ //#region src/components/alert.tsx
6
+ const alertVariants = cva("group/alert relative grid w-full gap-0.5 rounded-lg border px-4 py-3 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4", {
7
+ variants: { variant: {
8
+ default: "bg-card text-card-foreground",
9
+ destructive: "bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"
10
+ } },
11
+ defaultVariants: { variant: "default" }
12
+ });
13
+ function Alert({ className, variant, ...props }) {
14
+ return /* @__PURE__ */ jsx("div", {
15
+ "data-slot": "alert",
16
+ role: "alert",
17
+ className: cn(alertVariants({ variant }), className),
18
+ ...props
19
+ });
20
+ }
21
+ function AlertTitle({ className, ...props }) {
22
+ return /* @__PURE__ */ jsx("div", {
23
+ "data-slot": "alert-title",
24
+ className: cn("font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground", className),
25
+ ...props
26
+ });
27
+ }
28
+ function AlertDescription({ className, ...props }) {
29
+ return /* @__PURE__ */ jsx("div", {
30
+ "data-slot": "alert-description",
31
+ className: cn("text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", className),
32
+ ...props
33
+ });
34
+ }
35
+ function AlertAction({ className, ...props }) {
36
+ return /* @__PURE__ */ jsx("div", {
37
+ "data-slot": "alert-action",
38
+ className: cn("absolute top-2.5 right-3", className),
39
+ ...props
40
+ });
41
+ }
42
+ //#endregion
43
+ export { Alert, AlertAction, AlertDescription, AlertTitle };
@@ -0,0 +1,9 @@
1
+ import { AspectRatio } from "radix-ui";
2
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
+
4
+ //#region src/components/aspect-ratio.d.ts
5
+ declare function AspectRatio$1({
6
+ ...props
7
+ }: React.ComponentProps<typeof AspectRatio.Root>): _$react_jsx_runtime0.JSX.Element;
8
+ //#endregion
9
+ export { AspectRatio$1 as AspectRatio };
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import { AspectRatio } from "radix-ui";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/components/aspect-ratio.tsx
5
+ function AspectRatio$1({ ...props }) {
6
+ return /* @__PURE__ */ jsx(AspectRatio.Root, {
7
+ "data-slot": "aspect-ratio",
8
+ ...props
9
+ });
10
+ }
11
+ //#endregion
12
+ export { AspectRatio$1 as AspectRatio };
@@ -0,0 +1,34 @@
1
+ import { Avatar } from "radix-ui";
2
+ import * as React from "react";
3
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
+
5
+ //#region src/components/avatar.d.ts
6
+ declare function Avatar$1({
7
+ className,
8
+ size,
9
+ ...props
10
+ }: React.ComponentProps<typeof Avatar.Root> & {
11
+ size?: 'default' | 'sm' | 'lg';
12
+ }): _$react_jsx_runtime0.JSX.Element;
13
+ declare function AvatarImage({
14
+ className,
15
+ ...props
16
+ }: React.ComponentProps<typeof Avatar.Image>): _$react_jsx_runtime0.JSX.Element;
17
+ declare function AvatarFallback({
18
+ className,
19
+ ...props
20
+ }: React.ComponentProps<typeof Avatar.Fallback>): _$react_jsx_runtime0.JSX.Element;
21
+ declare function AvatarBadge({
22
+ className,
23
+ ...props
24
+ }: React.ComponentProps<'span'>): _$react_jsx_runtime0.JSX.Element;
25
+ declare function AvatarGroup({
26
+ className,
27
+ ...props
28
+ }: React.ComponentProps<'div'>): _$react_jsx_runtime0.JSX.Element;
29
+ declare function AvatarGroupCount({
30
+ className,
31
+ ...props
32
+ }: React.ComponentProps<'div'>): _$react_jsx_runtime0.JSX.Element;
33
+ //#endregion
34
+ export { Avatar$1 as Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage };
@@ -0,0 +1,51 @@
1
+ "use client";
2
+ import { cn } from "../lib/utils.mjs";
3
+ import { Avatar } from "radix-ui";
4
+ import "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/components/avatar.tsx
7
+ function Avatar$1({ className, size = "default", ...props }) {
8
+ return /* @__PURE__ */ jsx(Avatar.Root, {
9
+ "data-slot": "avatar",
10
+ "data-size": size,
11
+ className: cn("group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten", className),
12
+ ...props
13
+ });
14
+ }
15
+ function AvatarImage({ className, ...props }) {
16
+ return /* @__PURE__ */ jsx(Avatar.Image, {
17
+ "data-slot": "avatar-image",
18
+ className: cn("aspect-square size-full rounded-full object-cover", className),
19
+ ...props
20
+ });
21
+ }
22
+ function AvatarFallback({ className, ...props }) {
23
+ return /* @__PURE__ */ jsx(Avatar.Fallback, {
24
+ "data-slot": "avatar-fallback",
25
+ className: cn("flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs", className),
26
+ ...props
27
+ });
28
+ }
29
+ function AvatarBadge({ className, ...props }) {
30
+ return /* @__PURE__ */ jsx("span", {
31
+ "data-slot": "avatar-badge",
32
+ className: cn("absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none", "group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden", "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2", "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2", className),
33
+ ...props
34
+ });
35
+ }
36
+ function AvatarGroup({ className, ...props }) {
37
+ return /* @__PURE__ */ jsx("div", {
38
+ "data-slot": "avatar-group",
39
+ className: cn("group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background", className),
40
+ ...props
41
+ });
42
+ }
43
+ function AvatarGroupCount({ className, ...props }) {
44
+ return /* @__PURE__ */ jsx("div", {
45
+ "data-slot": "avatar-group-count",
46
+ className: cn("relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3", className),
47
+ ...props
48
+ });
49
+ }
50
+ //#endregion
51
+ export { Avatar$1 as Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage };
@@ -0,0 +1,19 @@
1
+ import * as React from "react";
2
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
+ import { VariantProps } from "class-variance-authority";
4
+ import * as _$class_variance_authority_types0 from "class-variance-authority/types";
5
+
6
+ //#region src/components/badge.d.ts
7
+ declare const badgeVariants: (props?: ({
8
+ variant?: "link" | "default" | "outline" | "secondary" | "ghost" | "destructive" | null | undefined;
9
+ } & _$class_variance_authority_types0.ClassProp) | undefined) => string;
10
+ declare function Badge({
11
+ className,
12
+ variant,
13
+ asChild,
14
+ ...props
15
+ }: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & {
16
+ asChild?: boolean;
17
+ }): _$react_jsx_runtime0.JSX.Element;
18
+ //#endregion
19
+ export { Badge, badgeVariants };
@@ -0,0 +1,27 @@
1
+ import { cn } from "../lib/utils.mjs";
2
+ import { Slot } from "radix-ui";
3
+ import "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { cva } from "class-variance-authority";
6
+ //#region src/components/badge.tsx
7
+ const badgeVariants = cva("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!", {
8
+ variants: { variant: {
9
+ default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
10
+ secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
11
+ destructive: "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",
12
+ outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
13
+ ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
14
+ link: "text-primary underline-offset-4 hover:underline"
15
+ } },
16
+ defaultVariants: { variant: "default" }
17
+ });
18
+ function Badge({ className, variant = "default", asChild = false, ...props }) {
19
+ return /* @__PURE__ */ jsx(asChild ? Slot.Root : "span", {
20
+ "data-slot": "badge",
21
+ "data-variant": variant,
22
+ className: cn(badgeVariants({ variant }), className),
23
+ ...props
24
+ });
25
+ }
26
+ //#endregion
27
+ export { Badge, badgeVariants };
@@ -0,0 +1,38 @@
1
+ import * as React from "react";
2
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
+
4
+ //#region src/components/breadcrumb.d.ts
5
+ declare function Breadcrumb({
6
+ className,
7
+ ...props
8
+ }: React.ComponentProps<'nav'>): _$react_jsx_runtime0.JSX.Element;
9
+ declare function BreadcrumbList({
10
+ className,
11
+ ...props
12
+ }: React.ComponentProps<'ol'>): _$react_jsx_runtime0.JSX.Element;
13
+ declare function BreadcrumbItem({
14
+ className,
15
+ ...props
16
+ }: React.ComponentProps<'li'>): _$react_jsx_runtime0.JSX.Element;
17
+ declare function BreadcrumbLink({
18
+ asChild,
19
+ className,
20
+ ...props
21
+ }: React.ComponentProps<'a'> & {
22
+ asChild?: boolean;
23
+ }): _$react_jsx_runtime0.JSX.Element;
24
+ declare function BreadcrumbPage({
25
+ className,
26
+ ...props
27
+ }: React.ComponentProps<'span'>): _$react_jsx_runtime0.JSX.Element;
28
+ declare function BreadcrumbSeparator({
29
+ children,
30
+ className,
31
+ ...props
32
+ }: React.ComponentProps<'li'>): _$react_jsx_runtime0.JSX.Element;
33
+ declare function BreadcrumbEllipsis({
34
+ className,
35
+ ...props
36
+ }: React.ComponentProps<'span'>): _$react_jsx_runtime0.JSX.Element;
37
+ //#endregion
38
+ export { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator };