@hyunsdev/ui 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/LICENSE +674 -0
- package/README.md +89 -0
- package/SKILL.md +38 -0
- package/dist/WindowContext-DybYtZJa.d.ts +50 -0
- package/dist/_styles-BbTx89aX.d.ts +3 -0
- package/dist/chunk-23KUNTRD.js +49 -0
- package/dist/chunk-23KUNTRD.js.map +1 -0
- package/dist/chunk-3RTSANKB.js +51 -0
- package/dist/chunk-3RTSANKB.js.map +1 -0
- package/dist/chunk-4QIWBOF4.js +129 -0
- package/dist/chunk-4QIWBOF4.js.map +1 -0
- package/dist/chunk-5JCWC7IU.js +293 -0
- package/dist/chunk-5JCWC7IU.js.map +1 -0
- package/dist/chunk-6ANDNGHD.js +33 -0
- package/dist/chunk-6ANDNGHD.js.map +1 -0
- package/dist/chunk-7W7QZHEZ.js +42 -0
- package/dist/chunk-7W7QZHEZ.js.map +1 -0
- package/dist/chunk-BHO4WT2N.js +51 -0
- package/dist/chunk-BHO4WT2N.js.map +1 -0
- package/dist/chunk-BI3KKBIC.js +11 -0
- package/dist/chunk-BI3KKBIC.js.map +1 -0
- package/dist/chunk-D3SP7GL3.js +55 -0
- package/dist/chunk-D3SP7GL3.js.map +1 -0
- package/dist/chunk-D7W4RSQX.js +115 -0
- package/dist/chunk-D7W4RSQX.js.map +1 -0
- package/dist/chunk-DN2AEEA2.js +11 -0
- package/dist/chunk-DN2AEEA2.js.map +1 -0
- package/dist/chunk-ETTKFCO6.js +84 -0
- package/dist/chunk-ETTKFCO6.js.map +1 -0
- package/dist/chunk-GJT7TDBS.js +66 -0
- package/dist/chunk-GJT7TDBS.js.map +1 -0
- package/dist/chunk-HZT6RQYZ.js +109 -0
- package/dist/chunk-HZT6RQYZ.js.map +1 -0
- package/dist/chunk-JB2QZV7K.js +60 -0
- package/dist/chunk-JB2QZV7K.js.map +1 -0
- package/dist/chunk-KJJB2PVC.js +21 -0
- package/dist/chunk-KJJB2PVC.js.map +1 -0
- package/dist/chunk-NE3IVPMO.js +31 -0
- package/dist/chunk-NE3IVPMO.js.map +1 -0
- package/dist/chunk-O2BG2KSY.js +23 -0
- package/dist/chunk-O2BG2KSY.js.map +1 -0
- package/dist/chunk-OUFGNJ3V.js +1726 -0
- package/dist/chunk-OUFGNJ3V.js.map +1 -0
- package/dist/chunk-PLZMCJSL.js +351 -0
- package/dist/chunk-PLZMCJSL.js.map +1 -0
- package/dist/chunk-POG5DZBT.js +104 -0
- package/dist/chunk-POG5DZBT.js.map +1 -0
- package/dist/chunk-SECZM6JE.js +170 -0
- package/dist/chunk-SECZM6JE.js.map +1 -0
- package/dist/chunk-T64WPXSC.js +48 -0
- package/dist/chunk-T64WPXSC.js.map +1 -0
- package/dist/chunk-TU5CYBB4.js +90 -0
- package/dist/chunk-TU5CYBB4.js.map +1 -0
- package/dist/chunk-UVAI2U6X.js +153 -0
- package/dist/chunk-UVAI2U6X.js.map +1 -0
- package/dist/chunk-UXCBLYG6.js +142 -0
- package/dist/chunk-UXCBLYG6.js.map +1 -0
- package/dist/chunk-VUR4MQMH.js +53 -0
- package/dist/chunk-VUR4MQMH.js.map +1 -0
- package/dist/chunk-WIEKNG4S.js +26 -0
- package/dist/chunk-WIEKNG4S.js.map +1 -0
- package/dist/chunk-WIZ4OLOB.js +23 -0
- package/dist/chunk-WIZ4OLOB.js.map +1 -0
- package/dist/chunk-WJRJBMFN.js +21 -0
- package/dist/chunk-WJRJBMFN.js.map +1 -0
- package/dist/chunk-YUPLJP3F.js +33 -0
- package/dist/chunk-YUPLJP3F.js.map +1 -0
- package/dist/chunk-Z7ITPSUF.js +184 -0
- package/dist/chunk-Z7ITPSUF.js.map +1 -0
- package/dist/chunk-ZC76ALSI.js +75 -0
- package/dist/chunk-ZC76ALSI.js.map +1 -0
- package/dist/code-block-core-xkE94Rk5.d.ts +30 -0
- package/dist/components/accordion.d.ts +9 -0
- package/dist/components/accordion.js +98 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/alert-dialog.d.ts +26 -0
- package/dist/components/alert-dialog.js +341 -0
- package/dist/components/alert-dialog.js.map +1 -0
- package/dist/components/alert.d.ts +13 -0
- package/dist/components/alert.js +76 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/aspect-ratio.d.ts +6 -0
- package/dist/components/aspect-ratio.js +12 -0
- package/dist/components/aspect-ratio.js.map +1 -0
- package/dist/components/avatar.d.ts +13 -0
- package/dist/components/avatar.js +19 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.d.ts +12 -0
- package/dist/components/badge.js +11 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/breadcrumb.d.ts +13 -0
- package/dist/components/breadcrumb.js +102 -0
- package/dist/components/breadcrumb.js.map +1 -0
- package/dist/components/button-group.d.ts +16 -0
- package/dist/components/button-group.js +15 -0
- package/dist/components/button-group.js.map +1 -0
- package/dist/components/button.d.ts +14 -0
- package/dist/components/button.js +11 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/calendar.d.ts +14 -0
- package/dist/components/calendar.js +13 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/card.d.ts +13 -0
- package/dist/components/card.js +21 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/carousel.d.ts +32 -0
- package/dist/components/carousel.js +196 -0
- package/dist/components/carousel.js.map +1 -0
- package/dist/components/chart.d.ts +46 -0
- package/dist/components/chart.js +254 -0
- package/dist/components/chart.js.map +1 -0
- package/dist/components/checkbox.d.ts +6 -0
- package/dist/components/checkbox.js +41 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/code-block-core.d.ts +3 -0
- package/dist/components/code-block-core.js +13 -0
- package/dist/components/code-block-core.js.map +1 -0
- package/dist/components/code-block-custom.d.ts +20 -0
- package/dist/components/code-block-custom.js +16 -0
- package/dist/components/code-block-custom.js.map +1 -0
- package/dist/components/code-block-shiki.d.ts +13 -0
- package/dist/components/code-block-shiki.js +15 -0
- package/dist/components/code-block-shiki.js.map +1 -0
- package/dist/components/code-block.d.ts +5 -0
- package/dist/components/code-block.js +14 -0
- package/dist/components/code-block.js.map +1 -0
- package/dist/components/collapsible.d.ts +8 -0
- package/dist/components/collapsible.js +24 -0
- package/dist/components/collapsible.js.map +1 -0
- package/dist/components/collection.d.ts +63 -0
- package/dist/components/collection.js +598 -0
- package/dist/components/collection.js.map +1 -0
- package/dist/components/color-dot.d.ts +19 -0
- package/dist/components/color-dot.js +41 -0
- package/dist/components/color-dot.js.map +1 -0
- package/dist/components/color-picker.d.ts +12 -0
- package/dist/components/color-picker.js +142 -0
- package/dist/components/color-picker.js.map +1 -0
- package/dist/components/combobox.d.ts +74 -0
- package/dist/components/combobox.js +610 -0
- package/dist/components/combobox.js.map +1 -0
- package/dist/components/command.d.ts +21 -0
- package/dist/components/command.js +31 -0
- package/dist/components/command.js.map +1 -0
- package/dist/components/date-picker.d.ts +43 -0
- package/dist/components/date-picker.js +235 -0
- package/dist/components/date-picker.js.map +1 -0
- package/dist/components/dialog.d.ts +25 -0
- package/dist/components/dialog.js +31 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/drawer.d.ts +15 -0
- package/dist/components/drawer.js +124 -0
- package/dist/components/drawer.js.map +1 -0
- package/dist/components/dropdown-menu.d.ts +34 -0
- package/dist/components/dropdown-menu.js +248 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/empty.d.ts +15 -0
- package/dist/components/empty.js +104 -0
- package/dist/components/empty.js.map +1 -0
- package/dist/components/field.d.ts +29 -0
- package/dist/components/field.js +214 -0
- package/dist/components/field.js.map +1 -0
- package/dist/components/format-bytes.d.ts +12 -0
- package/dist/components/format-bytes.js +30 -0
- package/dist/components/format-bytes.js.map +1 -0
- package/dist/components/format-number.d.ts +12 -0
- package/dist/components/format-number.js +30 -0
- package/dist/components/format-number.js.map +1 -0
- package/dist/components/gauge.d.ts +11 -0
- package/dist/components/gauge.js +82 -0
- package/dist/components/gauge.js.map +1 -0
- package/dist/components/hover-card.d.ts +8 -0
- package/dist/components/hover-card.js +45 -0
- package/dist/components/hover-card.js.map +1 -0
- package/dist/components/input-group.d.ts +24 -0
- package/dist/components/input-group.js +23 -0
- package/dist/components/input-group.js.map +1 -0
- package/dist/components/input-otp.d.ts +20 -0
- package/dist/components/input-otp.js +95 -0
- package/dist/components/input-otp.js.map +1 -0
- package/dist/components/input.d.ts +9 -0
- package/dist/components/input.js +9 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/item.d.ts +27 -0
- package/dist/components/item.js +182 -0
- package/dist/components/item.js.map +1 -0
- package/dist/components/kbd.d.ts +6 -0
- package/dist/components/kbd.js +34 -0
- package/dist/components/kbd.js.map +1 -0
- package/dist/components/label.d.ts +6 -0
- package/dist/components/label.js +9 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/loading-bar.d.ts +8 -0
- package/dist/components/loading-bar.js +127 -0
- package/dist/components/loading-bar.js.map +1 -0
- package/dist/components/loading-dots.d.ts +5 -0
- package/dist/components/loading-dots.js +45 -0
- package/dist/components/loading-dots.js.map +1 -0
- package/dist/components/main-provider.d.ts +7 -0
- package/dist/components/main-provider.js +12 -0
- package/dist/components/main-provider.js.map +1 -0
- package/dist/components/mark.d.ts +11 -0
- package/dist/components/mark.js +44 -0
- package/dist/components/mark.js.map +1 -0
- package/dist/components/pagination.d.ts +21 -0
- package/dist/components/pagination.js +114 -0
- package/dist/components/pagination.js.map +1 -0
- package/dist/components/popover.d.ts +12 -0
- package/dist/components/popover.js +22 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/prev-next-navigation.d.ts +15 -0
- package/dist/components/prev-next-navigation.js +85 -0
- package/dist/components/prev-next-navigation.js.map +1 -0
- package/dist/components/progress.d.ts +6 -0
- package/dist/components/progress.js +38 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/radio-group.d.ts +7 -0
- package/dist/components/radio-group.js +57 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/relative-time.d.ts +16 -0
- package/dist/components/relative-time.js +75 -0
- package/dist/components/relative-time.js.map +1 -0
- package/dist/components/resizable.d.ts +10 -0
- package/dist/components/resizable.js +45 -0
- package/dist/components/resizable.js.map +1 -0
- package/dist/components/scroll-area.d.ts +7 -0
- package/dist/components/scroll-area.js +11 -0
- package/dist/components/scroll-area.js.map +1 -0
- package/dist/components/select.d.ts +20 -0
- package/dist/components/select.js +189 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/separator.d.ts +6 -0
- package/dist/components/separator.js +9 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/sheet.d.ts +16 -0
- package/dist/components/sheet.js +25 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/show-more.d.ts +15 -0
- package/dist/components/show-more.js +79 -0
- package/dist/components/show-more.js.map +1 -0
- package/dist/components/skeleton.d.ts +5 -0
- package/dist/components/skeleton.js +8 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/slider.d.ts +6 -0
- package/dist/components/slider.js +65 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/snippet.d.ts +13 -0
- package/dist/components/snippet.js +135 -0
- package/dist/components/snippet.js.map +1 -0
- package/dist/components/sonner.d.ts +6 -0
- package/dist/components/sonner.js +10 -0
- package/dist/components/sonner.js.map +1 -0
- package/dist/components/spinner.d.ts +5 -0
- package/dist/components/spinner.js +8 -0
- package/dist/components/spinner.js.map +1 -0
- package/dist/components/stat.d.ts +17 -0
- package/dist/components/stat.js +71 -0
- package/dist/components/stat.js.map +1 -0
- package/dist/components/steps.d.ts +17 -0
- package/dist/components/steps.js +133 -0
- package/dist/components/steps.js.map +1 -0
- package/dist/components/switch.d.ts +8 -0
- package/dist/components/switch.js +44 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/table.d.ts +12 -0
- package/dist/components/table.js +101 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tabs.d.ts +14 -0
- package/dist/components/tabs.js +88 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/textarea.d.ts +5 -0
- package/dist/components/textarea.js +9 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/theme-provider.d.ts +10 -0
- package/dist/components/theme-provider.js +14 -0
- package/dist/components/theme-provider.js.map +1 -0
- package/dist/components/time-picker.d.ts +17 -0
- package/dist/components/time-picker.js +219 -0
- package/dist/components/time-picker.js.map +1 -0
- package/dist/components/timeline.d.ts +17 -0
- package/dist/components/timeline.js +138 -0
- package/dist/components/timeline.js.map +1 -0
- package/dist/components/toggle-group.d.ts +14 -0
- package/dist/components/toggle-group.js +82 -0
- package/dist/components/toggle-group.js.map +1 -0
- package/dist/components/toggle.d.ts +12 -0
- package/dist/components/toggle.js +11 -0
- package/dist/components/toggle.js.map +1 -0
- package/dist/components/tooltip.d.ts +9 -0
- package/dist/components/tooltip.js +15 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/components/typography.d.ts +17 -0
- package/dist/components/typography.js +91 -0
- package/dist/components/typography.js.map +1 -0
- package/dist/hooks/use-mobile.d.ts +3 -0
- package/dist/hooks/use-mobile.js +7 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/hooks/use-theme.d.ts +3 -0
- package/dist/hooks/use-theme.js +8 -0
- package/dist/hooks/use-theme.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/layouts/center/index.d.ts +18 -0
- package/dist/layouts/center/index.js +73 -0
- package/dist/layouts/center/index.js.map +1 -0
- package/dist/layouts/chat/index.d.ts +42 -0
- package/dist/layouts/chat/index.js +191 -0
- package/dist/layouts/chat/index.js.map +1 -0
- package/dist/layouts/command/index.d.ts +2 -0
- package/dist/layouts/command/index.js +1 -0
- package/dist/layouts/command/index.js.map +1 -0
- package/dist/layouts/panel/index.d.ts +55 -0
- package/dist/layouts/panel/index.js +513 -0
- package/dist/layouts/panel/index.js.map +1 -0
- package/dist/layouts/presentation/index.d.ts +14 -0
- package/dist/layouts/presentation/index.js +100 -0
- package/dist/layouts/presentation/index.js.map +1 -0
- package/dist/layouts/site/index.d.ts +17 -0
- package/dist/layouts/site/index.js +82 -0
- package/dist/layouts/site/index.js.map +1 -0
- package/dist/layouts/window/index.d.ts +223 -0
- package/dist/layouts/window/index.js +127 -0
- package/dist/layouts/window/index.js.map +1 -0
- package/dist/layouts/workbench/index.d.ts +281 -0
- package/dist/layouts/workbench/index.js +2457 -0
- package/dist/layouts/workbench/index.js.map +1 -0
- package/dist/lib/format.d.ts +15 -0
- package/dist/lib/format.js +9 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/theme.d.ts +22 -0
- package/dist/lib/theme.js +25 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +7 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/styles/fonts.css +1 -0
- package/dist/styles/globals.css +717 -0
- package/dist/styles/tokens.css +693 -0
- package/package.json +137 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ShikiTransformer, CodeToHastOptions } from 'shiki';
|
|
3
|
+
|
|
4
|
+
type CodeBlockThemeMap<ThemeName extends string = string> = {
|
|
5
|
+
dark: ThemeName;
|
|
6
|
+
light: ThemeName;
|
|
7
|
+
};
|
|
8
|
+
type CodeBlockHighlighter = {
|
|
9
|
+
codeToHtml: (code: string, options: CodeToHastOptions<string, string>) => Promise<string>;
|
|
10
|
+
};
|
|
11
|
+
type CodeBlockLineNumbers = readonly number[];
|
|
12
|
+
type CodeBlockCommonProps = Omit<React.ComponentProps<"div">, "children"> & {
|
|
13
|
+
code: string;
|
|
14
|
+
focusLines?: CodeBlockLineNumbers;
|
|
15
|
+
highlightLines?: CodeBlockLineNumbers;
|
|
16
|
+
lang: string;
|
|
17
|
+
title?: React.ReactNode;
|
|
18
|
+
showCopyButton?: boolean;
|
|
19
|
+
showLineNumbers?: boolean;
|
|
20
|
+
wrapLongLines?: boolean;
|
|
21
|
+
transformers?: readonly ShikiTransformer[];
|
|
22
|
+
};
|
|
23
|
+
type CodeBlockCoreProps = CodeBlockCommonProps & {
|
|
24
|
+
fallbackLanguage?: string | undefined;
|
|
25
|
+
highlighter: () => Promise<CodeBlockHighlighter>;
|
|
26
|
+
themeNames: CodeBlockThemeMap;
|
|
27
|
+
};
|
|
28
|
+
declare function CodeBlockCore({ className, code, fallbackLanguage, focusLines: focusLinesProp, highlightLines: highlightLinesProp, highlighter, lang, themeNames, title, showCopyButton, showLineNumbers, wrapLongLines, transformers: transformersProp, ...props }: CodeBlockCoreProps): React.JSX.Element;
|
|
29
|
+
|
|
30
|
+
export { type CodeBlockCommonProps as C, type CodeBlockThemeMap as a, type CodeBlockHighlighter as b, type CodeBlockLineNumbers as c, CodeBlockCore as d, type CodeBlockCoreProps as e };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as AccordionPrimitive from '@radix-ui/react-accordion';
|
|
3
|
+
|
|
4
|
+
declare function Accordion({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Root>): React.JSX.Element;
|
|
5
|
+
declare function AccordionItem({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Item>): React.JSX.Element;
|
|
6
|
+
declare function AccordionTrigger({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Trigger>): React.JSX.Element;
|
|
7
|
+
declare function AccordionContent({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Content>): React.JSX.Element;
|
|
8
|
+
|
|
9
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
cn
|
|
4
|
+
} from "../chunk-DN2AEEA2.js";
|
|
5
|
+
|
|
6
|
+
// src/components/accordion.tsx
|
|
7
|
+
import "react";
|
|
8
|
+
import * as AccordionPrimitive from "@radix-ui/react-accordion";
|
|
9
|
+
import { ChevronDownIcon, ChevronUpIcon } from "lucide-react";
|
|
10
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
function Accordion({ className, ...props }) {
|
|
12
|
+
return /* @__PURE__ */ jsx(
|
|
13
|
+
AccordionPrimitive.Root,
|
|
14
|
+
{
|
|
15
|
+
"data-slot": "accordion",
|
|
16
|
+
className: cn("flex w-full flex-col", className),
|
|
17
|
+
...props
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
function AccordionItem({
|
|
22
|
+
className,
|
|
23
|
+
...props
|
|
24
|
+
}) {
|
|
25
|
+
return /* @__PURE__ */ jsx(
|
|
26
|
+
AccordionPrimitive.Item,
|
|
27
|
+
{
|
|
28
|
+
"data-slot": "accordion-item",
|
|
29
|
+
className: cn("not-last:border-b", className),
|
|
30
|
+
...props
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
function AccordionTrigger({
|
|
35
|
+
className,
|
|
36
|
+
children,
|
|
37
|
+
...props
|
|
38
|
+
}) {
|
|
39
|
+
return /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
|
|
40
|
+
AccordionPrimitive.Trigger,
|
|
41
|
+
{
|
|
42
|
+
"data-slot": "accordion-trigger",
|
|
43
|
+
className: cn(
|
|
44
|
+
"group/accordion-trigger focus-visible:border-focus-ring focus-visible:ring-focus-ring focus-visible:after:border-focus-ring **:data-[slot=accordion-trigger-icon]:text-text-muted relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-3 disabled:pointer-events-none disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4",
|
|
45
|
+
className
|
|
46
|
+
),
|
|
47
|
+
...props,
|
|
48
|
+
children: [
|
|
49
|
+
children,
|
|
50
|
+
/* @__PURE__ */ jsx(
|
|
51
|
+
ChevronDownIcon,
|
|
52
|
+
{
|
|
53
|
+
"data-slot": "accordion-trigger-icon",
|
|
54
|
+
className: "pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden"
|
|
55
|
+
}
|
|
56
|
+
),
|
|
57
|
+
/* @__PURE__ */ jsx(
|
|
58
|
+
ChevronUpIcon,
|
|
59
|
+
{
|
|
60
|
+
"data-slot": "accordion-trigger-icon",
|
|
61
|
+
className: "pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline"
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
) });
|
|
67
|
+
}
|
|
68
|
+
function AccordionContent({
|
|
69
|
+
className,
|
|
70
|
+
children,
|
|
71
|
+
...props
|
|
72
|
+
}) {
|
|
73
|
+
return /* @__PURE__ */ jsx(
|
|
74
|
+
AccordionPrimitive.Content,
|
|
75
|
+
{
|
|
76
|
+
"data-slot": "accordion-content",
|
|
77
|
+
className: "data-open:animate-accordion-down data-closed:animate-accordion-up overflow-hidden text-sm",
|
|
78
|
+
...props,
|
|
79
|
+
children: /* @__PURE__ */ jsx(
|
|
80
|
+
"div",
|
|
81
|
+
{
|
|
82
|
+
className: cn(
|
|
83
|
+
"[&_a]:hover:text-text-normal h-(--radix-accordion-content-height) pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4",
|
|
84
|
+
className
|
|
85
|
+
),
|
|
86
|
+
children
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
export {
|
|
93
|
+
Accordion,
|
|
94
|
+
AccordionContent,
|
|
95
|
+
AccordionItem,
|
|
96
|
+
AccordionTrigger
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/accordion.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nfunction Accordion({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return (\n <AccordionPrimitive.Root\n data-slot=\"accordion\"\n className={cn(\"flex w-full flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"not-last:border-b\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"group/accordion-trigger focus-visible:border-focus-ring focus-visible:ring-focus-ring focus-visible:after:border-focus-ring **:data-[slot=accordion-trigger-icon]:text-text-muted relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-3 disabled:pointer-events-none disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon\n data-slot=\"accordion-trigger-icon\"\n className=\"pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden\"\n />\n <ChevronUpIcon\n data-slot=\"accordion-trigger-icon\"\n className=\"pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline\"\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"data-open:animate-accordion-down data-closed:animate-accordion-up overflow-hidden text-sm\"\n {...props}\n >\n <div\n className={cn(\n \"[&_a]:hover:text-text-normal h-(--radix-accordion-content-height) pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4\",\n className,\n )}\n >\n {children}\n </div>\n </AccordionPrimitive.Content>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n"],"mappings":";;;;;;AAEA,OAAuB;AAEvB,YAAY,wBAAwB;AACpC,SAAS,iBAAiB,qBAAqB;AAM3C,cA4BE,YA5BF;AAFJ,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAAyD;AAChG,SACE;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,wBAAwB,SAAS;AAAA,MAC9C,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA,GAAG;AACL,GAAyD;AACvD,SACE;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,qBAAqB,SAAS;AAAA,MAC3C,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA4D;AAC1D,SACE,oBAAoB,2BAAnB,EAA0B,WAAU,QACnC;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACD;AAAA,UAAC;AAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA;AAAA,QACZ;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA;AAAA,QACZ;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA4D;AAC1D,SACE;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAU;AAAA,MACT,GAAG;AAAA,MAEJ;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UAEC;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
|
|
3
|
+
import { Button } from './button.js';
|
|
4
|
+
import 'class-variance-authority/types';
|
|
5
|
+
import 'class-variance-authority';
|
|
6
|
+
|
|
7
|
+
type AlertDialogCloseReason = "cancel-button" | "action-button" | "programmatic";
|
|
8
|
+
type AlertDialogRootProps = React.ComponentProps<typeof AlertDialogPrimitive.Root> & {
|
|
9
|
+
onCloseRequest?: (reason: AlertDialogCloseReason) => boolean | Promise<boolean>;
|
|
10
|
+
};
|
|
11
|
+
declare function AlertDialog({ defaultOpen, onCloseRequest, onOpenChange, open, ...props }: AlertDialogRootProps): React.JSX.Element;
|
|
12
|
+
declare function AlertDialogTrigger({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>): React.JSX.Element;
|
|
13
|
+
declare function AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>): React.JSX.Element;
|
|
14
|
+
declare function AlertDialogOverlay({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>): React.JSX.Element;
|
|
15
|
+
declare const AlertDialogContent: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React.RefAttributes<HTMLDivElement> & {
|
|
16
|
+
size?: "default" | "sm";
|
|
17
|
+
}, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
18
|
+
declare function AlertDialogHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
19
|
+
declare function AlertDialogFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
20
|
+
declare function AlertDialogMedia({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
21
|
+
declare function AlertDialogTitle({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Title>): React.JSX.Element;
|
|
22
|
+
declare function AlertDialogDescription({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Description>): React.JSX.Element;
|
|
23
|
+
declare function AlertDialogAction({ asChild, className, onClick, variant, size, type, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Action> & Pick<React.ComponentProps<typeof Button>, "variant" | "size">): React.JSX.Element;
|
|
24
|
+
declare function AlertDialogCancel({ asChild, className, onClick, variant, size, type, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> & Pick<React.ComponentProps<typeof Button>, "variant" | "size">): React.JSX.Element;
|
|
25
|
+
|
|
26
|
+
export { AlertDialog, AlertDialogAction, AlertDialogCancel, type AlertDialogCloseReason, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger };
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
Button
|
|
4
|
+
} from "../chunk-TU5CYBB4.js";
|
|
5
|
+
import {
|
|
6
|
+
dialogSurfaceClass,
|
|
7
|
+
overlayScrimClass
|
|
8
|
+
} from "../chunk-O2BG2KSY.js";
|
|
9
|
+
import {
|
|
10
|
+
cn
|
|
11
|
+
} from "../chunk-DN2AEEA2.js";
|
|
12
|
+
|
|
13
|
+
// src/components/alert-dialog.tsx
|
|
14
|
+
import * as React from "react";
|
|
15
|
+
import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
|
|
16
|
+
import * as Slot from "@radix-ui/react-slot";
|
|
17
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
18
|
+
var AlertDialogContext = React.createContext(null);
|
|
19
|
+
function resolveOpenState(currentOpen, nextOpen) {
|
|
20
|
+
return typeof nextOpen === "function" ? nextOpen(currentOpen) : nextOpen;
|
|
21
|
+
}
|
|
22
|
+
function setRefValue(ref, value) {
|
|
23
|
+
if (typeof ref === "function") {
|
|
24
|
+
ref(value);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (ref) {
|
|
28
|
+
ref.current = value;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function useAlertDialogContext(componentName) {
|
|
32
|
+
const context = React.useContext(AlertDialogContext);
|
|
33
|
+
if (!context) {
|
|
34
|
+
throw new Error(`${componentName} must be used within an AlertDialog.`);
|
|
35
|
+
}
|
|
36
|
+
return context;
|
|
37
|
+
}
|
|
38
|
+
function AlertDialog({
|
|
39
|
+
defaultOpen = false,
|
|
40
|
+
onCloseRequest,
|
|
41
|
+
onOpenChange,
|
|
42
|
+
open,
|
|
43
|
+
...props
|
|
44
|
+
}) {
|
|
45
|
+
const [blockedInteractionCount, setBlockedInteractionCount] = React.useState(0);
|
|
46
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);
|
|
47
|
+
const isControlled = open !== void 0;
|
|
48
|
+
const isOpen = isControlled ? open : uncontrolledOpen;
|
|
49
|
+
const isOpenRef = React.useRef(isOpen);
|
|
50
|
+
const closeRequestVersionRef = React.useRef(0);
|
|
51
|
+
React.useEffect(() => {
|
|
52
|
+
isOpenRef.current = isOpen;
|
|
53
|
+
}, [isOpen]);
|
|
54
|
+
const setOpenState = React.useCallback(
|
|
55
|
+
(nextOpen) => {
|
|
56
|
+
const resolvedOpen = resolveOpenState(isOpenRef.current, nextOpen);
|
|
57
|
+
if (!isControlled) {
|
|
58
|
+
setUncontrolledOpen(resolvedOpen);
|
|
59
|
+
}
|
|
60
|
+
onOpenChange?.(resolvedOpen);
|
|
61
|
+
},
|
|
62
|
+
[isControlled, onOpenChange]
|
|
63
|
+
);
|
|
64
|
+
const openAlertDialog = React.useCallback(() => {
|
|
65
|
+
closeRequestVersionRef.current += 1;
|
|
66
|
+
setOpenState(true);
|
|
67
|
+
}, [setOpenState]);
|
|
68
|
+
const forceCloseAlertDialog = React.useCallback(() => {
|
|
69
|
+
closeRequestVersionRef.current += 1;
|
|
70
|
+
setOpenState(false);
|
|
71
|
+
}, [setOpenState]);
|
|
72
|
+
const requestClose = React.useCallback(
|
|
73
|
+
async (reason) => {
|
|
74
|
+
if (!isOpenRef.current) {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
const closeRequestVersion = closeRequestVersionRef.current + 1;
|
|
78
|
+
closeRequestVersionRef.current = closeRequestVersion;
|
|
79
|
+
const closeAllowed = await onCloseRequest?.(reason) ?? true;
|
|
80
|
+
if (!closeAllowed) {
|
|
81
|
+
setBlockedInteractionCount((currentCount) => currentCount + 1);
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
if (closeRequestVersion !== closeRequestVersionRef.current) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
setOpenState(false);
|
|
88
|
+
return true;
|
|
89
|
+
},
|
|
90
|
+
[onCloseRequest, setOpenState]
|
|
91
|
+
);
|
|
92
|
+
const contextValue = React.useMemo(
|
|
93
|
+
() => ({
|
|
94
|
+
blockedInteractionCount,
|
|
95
|
+
forceClose: forceCloseAlertDialog,
|
|
96
|
+
open: openAlertDialog,
|
|
97
|
+
requestClose
|
|
98
|
+
}),
|
|
99
|
+
[blockedInteractionCount, forceCloseAlertDialog, openAlertDialog, requestClose]
|
|
100
|
+
);
|
|
101
|
+
return /* @__PURE__ */ jsx(AlertDialogContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
|
|
102
|
+
AlertDialogPrimitive.Root,
|
|
103
|
+
{
|
|
104
|
+
"data-slot": "alert-dialog",
|
|
105
|
+
open: isOpen,
|
|
106
|
+
onOpenChange: (nextOpen) => {
|
|
107
|
+
if (nextOpen) {
|
|
108
|
+
openAlertDialog();
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
void requestClose("programmatic").catch((error) => {
|
|
112
|
+
console.error("Failed to close alert dialog from root state change.", error);
|
|
113
|
+
});
|
|
114
|
+
},
|
|
115
|
+
...props
|
|
116
|
+
}
|
|
117
|
+
) });
|
|
118
|
+
}
|
|
119
|
+
function AlertDialogTrigger({
|
|
120
|
+
...props
|
|
121
|
+
}) {
|
|
122
|
+
return /* @__PURE__ */ jsx(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
|
|
123
|
+
}
|
|
124
|
+
function AlertDialogPortal({ ...props }) {
|
|
125
|
+
return /* @__PURE__ */ jsx(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
|
|
126
|
+
}
|
|
127
|
+
function AlertDialogOverlay({
|
|
128
|
+
className,
|
|
129
|
+
...props
|
|
130
|
+
}) {
|
|
131
|
+
return /* @__PURE__ */ jsx(
|
|
132
|
+
AlertDialogPrimitive.Overlay,
|
|
133
|
+
{
|
|
134
|
+
"data-slot": "alert-dialog-overlay",
|
|
135
|
+
className: cn(
|
|
136
|
+
"data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0 fixed inset-0 z-[var(--layer-dialog)] duration-100",
|
|
137
|
+
overlayScrimClass,
|
|
138
|
+
className
|
|
139
|
+
),
|
|
140
|
+
...props
|
|
141
|
+
}
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
var AlertDialogContent = React.forwardRef(function AlertDialogContent2({ className, size = "default", forceMount, ...props }, ref) {
|
|
145
|
+
const { blockedInteractionCount } = useAlertDialogContext("AlertDialogContent");
|
|
146
|
+
const contentRef = React.useRef(
|
|
147
|
+
null
|
|
148
|
+
);
|
|
149
|
+
const blockedInteractionAnimationRef = React.useRef(null);
|
|
150
|
+
React.useEffect(() => {
|
|
151
|
+
if (blockedInteractionCount === 0) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const alertDialogContentElement = contentRef.current;
|
|
155
|
+
if (!alertDialogContentElement || typeof alertDialogContentElement.animate !== "function") {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const prefersReducedMotion = typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
159
|
+
const offset = prefersReducedMotion ? 6 : 12;
|
|
160
|
+
const duration = prefersReducedMotion ? 180 : 320;
|
|
161
|
+
blockedInteractionAnimationRef.current?.cancel();
|
|
162
|
+
blockedInteractionAnimationRef.current = alertDialogContentElement.animate(
|
|
163
|
+
[
|
|
164
|
+
{ marginLeft: "0px" },
|
|
165
|
+
{ marginLeft: `-${offset}px` },
|
|
166
|
+
{ marginLeft: `${Math.round(offset * 0.83)}px` },
|
|
167
|
+
{ marginLeft: `-${Math.round(offset * 0.67)}px` },
|
|
168
|
+
{ marginLeft: `${Math.round(offset * 0.5)}px` },
|
|
169
|
+
{ marginLeft: "0px" }
|
|
170
|
+
],
|
|
171
|
+
{
|
|
172
|
+
duration,
|
|
173
|
+
easing: "cubic-bezier(0.36, 0.07, 0.19, 0.97)"
|
|
174
|
+
}
|
|
175
|
+
);
|
|
176
|
+
return () => {
|
|
177
|
+
blockedInteractionAnimationRef.current?.cancel();
|
|
178
|
+
};
|
|
179
|
+
}, [blockedInteractionCount]);
|
|
180
|
+
return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
|
|
181
|
+
/* @__PURE__ */ jsx(AlertDialogOverlay, { ...forceMount === true ? { forceMount: true } : {} }),
|
|
182
|
+
/* @__PURE__ */ jsx(
|
|
183
|
+
AlertDialogPrimitive.Content,
|
|
184
|
+
{
|
|
185
|
+
ref: (node) => {
|
|
186
|
+
contentRef.current = node;
|
|
187
|
+
setRefValue(ref, node);
|
|
188
|
+
},
|
|
189
|
+
"data-slot": "alert-dialog-content",
|
|
190
|
+
"data-size": size,
|
|
191
|
+
...forceMount === true ? { forceMount: true } : {},
|
|
192
|
+
className: cn(
|
|
193
|
+
"group/alert-dialog-content 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 fixed top-1/2 left-1/2 z-[var(--layer-dialog)] grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-[var(--radius-dialog)] p-4 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm",
|
|
194
|
+
dialogSurfaceClass,
|
|
195
|
+
className
|
|
196
|
+
),
|
|
197
|
+
...props
|
|
198
|
+
}
|
|
199
|
+
)
|
|
200
|
+
] });
|
|
201
|
+
});
|
|
202
|
+
function AlertDialogHeader({ className, ...props }) {
|
|
203
|
+
return /* @__PURE__ */ jsx(
|
|
204
|
+
"div",
|
|
205
|
+
{
|
|
206
|
+
"data-slot": "alert-dialog-header",
|
|
207
|
+
className: cn(
|
|
208
|
+
"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-4 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]",
|
|
209
|
+
className
|
|
210
|
+
),
|
|
211
|
+
...props
|
|
212
|
+
}
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
function AlertDialogFooter({ className, ...props }) {
|
|
216
|
+
return /* @__PURE__ */ jsx(
|
|
217
|
+
"div",
|
|
218
|
+
{
|
|
219
|
+
"data-slot": "alert-dialog-footer",
|
|
220
|
+
className: cn(
|
|
221
|
+
"bg-dialog-footer-background border-dialog-border -mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-[var(--radius-dialog)] border-t p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",
|
|
222
|
+
className
|
|
223
|
+
),
|
|
224
|
+
...props
|
|
225
|
+
}
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
function AlertDialogMedia({ className, ...props }) {
|
|
229
|
+
return /* @__PURE__ */ jsx(
|
|
230
|
+
"div",
|
|
231
|
+
{
|
|
232
|
+
"data-slot": "alert-dialog-media",
|
|
233
|
+
className: cn(
|
|
234
|
+
"bg-background-secondary mb-2 inline-flex size-10 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6",
|
|
235
|
+
className
|
|
236
|
+
),
|
|
237
|
+
...props
|
|
238
|
+
}
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
function AlertDialogTitle({
|
|
242
|
+
className,
|
|
243
|
+
...props
|
|
244
|
+
}) {
|
|
245
|
+
return /* @__PURE__ */ jsx(
|
|
246
|
+
AlertDialogPrimitive.Title,
|
|
247
|
+
{
|
|
248
|
+
"data-slot": "alert-dialog-title",
|
|
249
|
+
className: cn(
|
|
250
|
+
"font-heading text-dialog-text text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",
|
|
251
|
+
className
|
|
252
|
+
),
|
|
253
|
+
...props
|
|
254
|
+
}
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
function AlertDialogDescription({
|
|
258
|
+
className,
|
|
259
|
+
...props
|
|
260
|
+
}) {
|
|
261
|
+
return /* @__PURE__ */ jsx(
|
|
262
|
+
AlertDialogPrimitive.Description,
|
|
263
|
+
{
|
|
264
|
+
"data-slot": "alert-dialog-description",
|
|
265
|
+
className: cn(
|
|
266
|
+
"text-text-muted *:[a]:hover:text-text-normal text-sm text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3",
|
|
267
|
+
className
|
|
268
|
+
),
|
|
269
|
+
...props
|
|
270
|
+
}
|
|
271
|
+
);
|
|
272
|
+
}
|
|
273
|
+
function AlertDialogAction({
|
|
274
|
+
asChild = false,
|
|
275
|
+
className,
|
|
276
|
+
onClick,
|
|
277
|
+
variant = "accent",
|
|
278
|
+
size = "default",
|
|
279
|
+
type = "button",
|
|
280
|
+
...props
|
|
281
|
+
}) {
|
|
282
|
+
const { requestClose } = useAlertDialogContext("AlertDialogAction");
|
|
283
|
+
const Comp = asChild ? Slot.Root : "button";
|
|
284
|
+
return /* @__PURE__ */ jsx(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx(
|
|
285
|
+
Comp,
|
|
286
|
+
{
|
|
287
|
+
"data-slot": "alert-dialog-action",
|
|
288
|
+
className: cn(className),
|
|
289
|
+
onClick: async (event) => {
|
|
290
|
+
if (!await requestClose("action-button")) {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
onClick?.(event);
|
|
294
|
+
},
|
|
295
|
+
type: asChild ? void 0 : type,
|
|
296
|
+
...props
|
|
297
|
+
}
|
|
298
|
+
) });
|
|
299
|
+
}
|
|
300
|
+
function AlertDialogCancel({
|
|
301
|
+
asChild = false,
|
|
302
|
+
className,
|
|
303
|
+
onClick,
|
|
304
|
+
variant = "outline",
|
|
305
|
+
size = "default",
|
|
306
|
+
type = "button",
|
|
307
|
+
...props
|
|
308
|
+
}) {
|
|
309
|
+
const { requestClose } = useAlertDialogContext("AlertDialogCancel");
|
|
310
|
+
const Comp = asChild ? Slot.Root : "button";
|
|
311
|
+
return /* @__PURE__ */ jsx(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx(
|
|
312
|
+
Comp,
|
|
313
|
+
{
|
|
314
|
+
"data-slot": "alert-dialog-cancel",
|
|
315
|
+
className: cn(className),
|
|
316
|
+
onClick: async (event) => {
|
|
317
|
+
if (!await requestClose("cancel-button")) {
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
onClick?.(event);
|
|
321
|
+
},
|
|
322
|
+
type: asChild ? void 0 : type,
|
|
323
|
+
...props
|
|
324
|
+
}
|
|
325
|
+
) });
|
|
326
|
+
}
|
|
327
|
+
export {
|
|
328
|
+
AlertDialog,
|
|
329
|
+
AlertDialogAction,
|
|
330
|
+
AlertDialogCancel,
|
|
331
|
+
AlertDialogContent,
|
|
332
|
+
AlertDialogDescription,
|
|
333
|
+
AlertDialogFooter,
|
|
334
|
+
AlertDialogHeader,
|
|
335
|
+
AlertDialogMedia,
|
|
336
|
+
AlertDialogOverlay,
|
|
337
|
+
AlertDialogPortal,
|
|
338
|
+
AlertDialogTitle,
|
|
339
|
+
AlertDialogTrigger
|
|
340
|
+
};
|
|
341
|
+
//# sourceMappingURL=alert-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/alert-dialog.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\nimport * as Slot from \"@radix-ui/react-slot\"\n\nimport { Button } from \"@hyunsdev/ui/components/button\"\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nimport { dialogSurfaceClass, overlayScrimClass } from \"./_styles\"\n\nexport type AlertDialogCloseReason = \"cancel-button\" | \"action-button\" | \"programmatic\"\n\ntype AlertDialogRootProps = React.ComponentProps<typeof AlertDialogPrimitive.Root> & {\n onCloseRequest?: (reason: AlertDialogCloseReason) => boolean | Promise<boolean>\n}\n\ntype AlertDialogContextValue = {\n blockedInteractionCount: number\n forceClose: () => void\n open: () => void\n requestClose: (reason: AlertDialogCloseReason) => Promise<boolean>\n}\n\nconst AlertDialogContext = React.createContext<AlertDialogContextValue | null>(null)\n\nfunction resolveOpenState(currentOpen: boolean, nextOpen: React.SetStateAction<boolean>) {\n return typeof nextOpen === \"function\" ? nextOpen(currentOpen) : nextOpen\n}\n\nfunction setRefValue<T>(ref: React.Ref<T> | undefined, value: T) {\n if (typeof ref === \"function\") {\n ref(value)\n return\n }\n\n if (ref) {\n ref.current = value\n }\n}\n\nfunction useAlertDialogContext(componentName: string) {\n const context = React.useContext(AlertDialogContext)\n\n if (!context) {\n throw new Error(`${componentName} must be used within an AlertDialog.`)\n }\n\n return context\n}\n\nfunction AlertDialog({\n defaultOpen = false,\n onCloseRequest,\n onOpenChange,\n open,\n ...props\n}: AlertDialogRootProps) {\n const [blockedInteractionCount, setBlockedInteractionCount] = React.useState(0)\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n const isControlled = open !== undefined\n const isOpen = isControlled ? open : uncontrolledOpen\n const isOpenRef = React.useRef(isOpen)\n const closeRequestVersionRef = React.useRef(0)\n\n React.useEffect(() => {\n isOpenRef.current = isOpen\n }, [isOpen])\n\n const setOpenState = React.useCallback<React.Dispatch<React.SetStateAction<boolean>>>(\n (nextOpen) => {\n const resolvedOpen = resolveOpenState(isOpenRef.current, nextOpen)\n\n if (!isControlled) {\n setUncontrolledOpen(resolvedOpen)\n }\n\n onOpenChange?.(resolvedOpen)\n },\n [isControlled, onOpenChange],\n )\n\n const openAlertDialog = React.useCallback(() => {\n closeRequestVersionRef.current += 1\n setOpenState(true)\n }, [setOpenState])\n\n const forceCloseAlertDialog = React.useCallback(() => {\n closeRequestVersionRef.current += 1\n setOpenState(false)\n }, [setOpenState])\n\n const requestClose = React.useCallback(\n async (reason: AlertDialogCloseReason) => {\n if (!isOpenRef.current) {\n return true\n }\n\n const closeRequestVersion = closeRequestVersionRef.current + 1\n closeRequestVersionRef.current = closeRequestVersion\n const closeAllowed = (await onCloseRequest?.(reason)) ?? true\n\n if (!closeAllowed) {\n setBlockedInteractionCount((currentCount) => currentCount + 1)\n return false\n }\n\n if (closeRequestVersion !== closeRequestVersionRef.current) {\n return false\n }\n\n setOpenState(false)\n\n return true\n },\n [onCloseRequest, setOpenState],\n )\n\n const contextValue = React.useMemo(\n () => ({\n blockedInteractionCount,\n forceClose: forceCloseAlertDialog,\n open: openAlertDialog,\n requestClose,\n }),\n [blockedInteractionCount, forceCloseAlertDialog, openAlertDialog, requestClose],\n )\n\n return (\n <AlertDialogContext.Provider value={contextValue}>\n <AlertDialogPrimitive.Root\n data-slot=\"alert-dialog\"\n open={isOpen}\n onOpenChange={(nextOpen) => {\n if (nextOpen) {\n openAlertDialog()\n return\n }\n\n void requestClose(\"programmatic\").catch((error) => {\n console.error(\"Failed to close alert dialog from root state change.\", error)\n })\n }}\n {...props}\n />\n </AlertDialogContext.Provider>\n )\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n}\n\nfunction AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0 fixed inset-0 z-[var(--layer-dialog)] duration-100\",\n overlayScrimClass,\n className,\n )}\n {...props}\n />\n )\n}\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: \"default\" | \"sm\"\n }\n>(function AlertDialogContent({ className, size = \"default\", forceMount, ...props }, ref) {\n const { blockedInteractionCount } = useAlertDialogContext(\"AlertDialogContent\")\n const contentRef = React.useRef<React.ElementRef<typeof AlertDialogPrimitive.Content> | null>(\n null,\n )\n const blockedInteractionAnimationRef = React.useRef<Animation | null>(null)\n\n React.useEffect(() => {\n if (blockedInteractionCount === 0) {\n return\n }\n\n const alertDialogContentElement = contentRef.current\n\n if (!alertDialogContentElement || typeof alertDialogContentElement.animate !== \"function\") {\n return\n }\n\n const prefersReducedMotion =\n typeof window !== \"undefined\" && window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n const offset = prefersReducedMotion ? 6 : 12\n const duration = prefersReducedMotion ? 180 : 320\n\n blockedInteractionAnimationRef.current?.cancel()\n blockedInteractionAnimationRef.current = alertDialogContentElement.animate(\n [\n { marginLeft: \"0px\" },\n { marginLeft: `-${offset}px` },\n { marginLeft: `${Math.round(offset * 0.83)}px` },\n { marginLeft: `-${Math.round(offset * 0.67)}px` },\n { marginLeft: `${Math.round(offset * 0.5)}px` },\n { marginLeft: \"0px\" },\n ],\n {\n duration,\n easing: \"cubic-bezier(0.36, 0.07, 0.19, 0.97)\",\n },\n )\n\n return () => {\n blockedInteractionAnimationRef.current?.cancel()\n }\n }, [blockedInteractionCount])\n\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay {...(forceMount === true ? { forceMount: true } : {})} />\n <AlertDialogPrimitive.Content\n ref={(node) => {\n contentRef.current = node\n setRefValue(ref, node)\n }}\n data-slot=\"alert-dialog-content\"\n data-size={size}\n {...(forceMount === true ? { forceMount: true } : {})}\n className={cn(\n \"group/alert-dialog-content 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 fixed top-1/2 left-1/2 z-[var(--layer-dialog)] grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-[var(--radius-dialog)] p-4 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm\",\n dialogSurfaceClass,\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n})\n\nfunction AlertDialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n \"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-4 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]\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"bg-dialog-footer-background border-dialog-border -mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-[var(--radius-dialog)] border-t p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"bg-background-secondary mb-2 inline-flex size-10 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n \"font-heading text-dialog-text text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\n \"text-text-muted *:[a]:hover:text-text-normal text-sm text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n asChild = false,\n className,\n onClick,\n variant = \"accent\",\n size = \"default\",\n type = \"button\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n const { requestClose } = useAlertDialogContext(\"AlertDialogAction\")\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Button variant={variant} size={size} asChild>\n <Comp\n data-slot=\"alert-dialog-action\"\n className={cn(className)}\n onClick={async (event: React.MouseEvent<HTMLButtonElement>) => {\n if (!(await requestClose(\"action-button\"))) {\n return\n }\n\n onClick?.(event)\n }}\n type={asChild ? undefined : type}\n {...props}\n />\n </Button>\n )\n}\n\nfunction AlertDialogCancel({\n asChild = false,\n className,\n onClick,\n variant = \"outline\",\n size = \"default\",\n type = \"button\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n const { requestClose } = useAlertDialogContext(\"AlertDialogCancel\")\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Button variant={variant} size={size} asChild>\n <Comp\n data-slot=\"alert-dialog-cancel\"\n className={cn(className)}\n onClick={async (event: React.MouseEvent<HTMLButtonElement>) => {\n if (!(await requestClose(\"cancel-button\"))) {\n return\n }\n\n onClick?.(event)\n }}\n type={asChild ? undefined : type}\n {...props}\n />\n </Button>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n"],"mappings":"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","names":["AlertDialogContent"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { VariantProps } from 'class-variance-authority';
|
|
4
|
+
|
|
5
|
+
declare const alertVariants: (props?: ({
|
|
6
|
+
variant?: "default" | "destructive" | null | undefined;
|
|
7
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
8
|
+
declare function Alert({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof alertVariants>): React.JSX.Element;
|
|
9
|
+
declare function AlertTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
10
|
+
declare function AlertDescription({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
11
|
+
declare function AlertAction({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
12
|
+
|
|
13
|
+
export { Alert, AlertAction, AlertDescription, AlertTitle };
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cardSurfaceClass
|
|
3
|
+
} from "../chunk-O2BG2KSY.js";
|
|
4
|
+
import {
|
|
5
|
+
cn
|
|
6
|
+
} from "../chunk-DN2AEEA2.js";
|
|
7
|
+
|
|
8
|
+
// src/components/alert.tsx
|
|
9
|
+
import "react";
|
|
10
|
+
import { cva } from "class-variance-authority";
|
|
11
|
+
import { jsx } from "react/jsx-runtime";
|
|
12
|
+
var alertVariants = cva(
|
|
13
|
+
"group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 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 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4",
|
|
14
|
+
{
|
|
15
|
+
variants: {
|
|
16
|
+
variant: {
|
|
17
|
+
default: cardSurfaceClass,
|
|
18
|
+
destructive: `${cardSurfaceClass} text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current`
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
defaultVariants: {
|
|
22
|
+
variant: "default"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
);
|
|
26
|
+
function Alert({
|
|
27
|
+
className,
|
|
28
|
+
variant,
|
|
29
|
+
...props
|
|
30
|
+
}) {
|
|
31
|
+
return /* @__PURE__ */ jsx(
|
|
32
|
+
"div",
|
|
33
|
+
{
|
|
34
|
+
"data-slot": "alert",
|
|
35
|
+
role: "alert",
|
|
36
|
+
className: cn(alertVariants({ variant }), className),
|
|
37
|
+
...props
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
function AlertTitle({ className, ...props }) {
|
|
42
|
+
return /* @__PURE__ */ jsx(
|
|
43
|
+
"div",
|
|
44
|
+
{
|
|
45
|
+
"data-slot": "alert-title",
|
|
46
|
+
className: cn(
|
|
47
|
+
"font-heading [&_a]:hover:text-text-normal font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3",
|
|
48
|
+
className
|
|
49
|
+
),
|
|
50
|
+
...props
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
function AlertDescription({ className, ...props }) {
|
|
55
|
+
return /* @__PURE__ */ jsx(
|
|
56
|
+
"div",
|
|
57
|
+
{
|
|
58
|
+
"data-slot": "alert-description",
|
|
59
|
+
className: cn(
|
|
60
|
+
"text-text-muted [&_a]:hover:text-text-normal text-sm text-balance md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4",
|
|
61
|
+
className
|
|
62
|
+
),
|
|
63
|
+
...props
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
function AlertAction({ className, ...props }) {
|
|
68
|
+
return /* @__PURE__ */ jsx("div", { "data-slot": "alert-action", className: cn("absolute top-2 right-2", className), ...props });
|
|
69
|
+
}
|
|
70
|
+
export {
|
|
71
|
+
Alert,
|
|
72
|
+
AlertAction,
|
|
73
|
+
AlertDescription,
|
|
74
|
+
AlertTitle
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=alert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/alert.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nimport { cardSurfaceClass } from \"./_styles\"\n\nconst alertVariants = cva(\n \"group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 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 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: cardSurfaceClass,\n destructive: `${cardSurfaceClass} text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current`,\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"font-heading [&_a]:hover:text-text-normal font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"text-text-muted [&_a]:hover:text-text-normal text-sm text-balance md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"alert-action\" className={cn(\"absolute top-2 right-2\", className)} {...props} />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction }\n"],"mappings":";;;;;;;;AAAA,OAAuB;AAEvB,SAAS,WAA8B;AA2BnC;AArBJ,IAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aAAa,GAAG,gBAAgB;AAAA,MAClC;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,SAAS,MAAM;AAAA,EACb;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAqE;AACnE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;AAAA,MAClD,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,MAAM,GAAgC;AACxE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC9E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,MAAM,GAAgC;AACzE,SACE,oBAAC,SAAI,aAAU,gBAAe,WAAW,GAAG,0BAA0B,SAAS,GAAI,GAAG,OAAO;AAEjG;","names":[]}
|