@windrun-huaiin/third-ui 16.0.1 → 20.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.
Files changed (30) hide show
  1. package/dist/clerk/fingerprint/fingerprint-provider.js +58 -49
  2. package/dist/clerk/fingerprint/fingerprint-provider.mjs +58 -49
  3. package/dist/main/alert-dialog/ads-alert-dialog.d.ts +15 -0
  4. package/dist/main/alert-dialog/ads-alert-dialog.js +24 -0
  5. package/dist/main/alert-dialog/ads-alert-dialog.mjs +22 -0
  6. package/dist/main/alert-dialog/confirm-dialog.d.ts +15 -0
  7. package/dist/main/alert-dialog/confirm-dialog.js +40 -0
  8. package/dist/main/alert-dialog/confirm-dialog.mjs +38 -0
  9. package/dist/main/alert-dialog/dialog-styles.d.ts +14 -0
  10. package/dist/main/alert-dialog/dialog-styles.js +35 -0
  11. package/dist/main/alert-dialog/dialog-styles.mjs +20 -0
  12. package/dist/main/alert-dialog/high-priority-confirm-dialog.d.ts +12 -0
  13. package/dist/main/alert-dialog/high-priority-confirm-dialog.js +23 -0
  14. package/dist/main/alert-dialog/high-priority-confirm-dialog.mjs +21 -0
  15. package/dist/main/alert-dialog/index.d.ts +4 -0
  16. package/dist/main/alert-dialog/info-dialog.d.ts +13 -0
  17. package/dist/main/alert-dialog/info-dialog.js +50 -0
  18. package/dist/main/alert-dialog/info-dialog.mjs +48 -0
  19. package/dist/main/index.d.ts +1 -1
  20. package/dist/main/index.js +7 -1
  21. package/dist/main/index.mjs +4 -1
  22. package/package.json +4 -4
  23. package/src/clerk/fingerprint/fingerprint-provider.tsx +155 -62
  24. package/src/main/{ads-alert-dialog.tsx → alert-dialog/ads-alert-dialog.tsx} +46 -29
  25. package/src/main/alert-dialog/confirm-dialog.tsx +131 -0
  26. package/src/main/alert-dialog/dialog-styles.ts +73 -0
  27. package/src/main/alert-dialog/high-priority-confirm-dialog.tsx +94 -0
  28. package/src/main/alert-dialog/index.ts +7 -0
  29. package/src/main/alert-dialog/info-dialog.tsx +139 -0
  30. package/src/main/index.ts +1 -1
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var React = require('react');
6
+ var Image = require('next/image');
7
+ var icons = require('@windrun-huaiin/base-ui/icons');
8
+ var ui = require('@windrun-huaiin/base-ui/ui');
9
+ var utils = require('@windrun-huaiin/lib/utils');
10
+ var dialogStyles = require('./dialog-styles.js');
11
+
12
+ function AdsAlertDialog({ open, onOpenChange, title, description, imgSrc, imgHref, cancelText, onCancel, confirmText, onConfirm, }) {
13
+ const [imgError, setImgError] = React.useState(false);
14
+ const handleClose = () => onOpenChange(false);
15
+ return (jsxRuntime.jsx(ui.AlertDialog, { open: open, onOpenChange: onOpenChange, children: jsxRuntime.jsxs(ui.AlertDialogContent, { className: utils.cn(dialogStyles.dialogContentClass, 'max-w-md p-4'), overlayClassName: dialogStyles.dialogThemedOverlayClass, onOverlayClick: handleClose, children: [jsxRuntime.jsxs("div", { className: dialogStyles.dialogHeaderClass, children: [jsxRuntime.jsx(ui.AlertDialogTitle, { asChild: true, children: jsxRuntime.jsxs("div", { className: dialogStyles.dialogTitleClass, children: [jsxRuntime.jsx("span", { className: "inline-flex size-9 shrink-0 items-center justify-center rounded-full bg-neutral-100 text-neutral-600 ring-1 ring-neutral-200 dark:bg-neutral-900 dark:text-neutral-300 dark:ring-neutral-800", children: jsxRuntime.jsx(icons.BellIcon, { className: "size-5" }) }), jsxRuntime.jsx("span", { className: "truncate", children: title })] }) }), jsxRuntime.jsx("button", { type: "button", className: dialogStyles.closeButtonClass, onClick: handleClose, "aria-label": "Close", children: jsxRuntime.jsx(icons.XIcon, { className: "size-4" }) })] }), jsxRuntime.jsx(ui.AlertDialogDescription, { className: utils.cn(dialogStyles.dialogDescriptionClass, 'mb-3 text-base text-neutral-800 dark:text-neutral-100'), children: description }), imgSrc && (jsxRuntime.jsx("div", { className: "relative mb-2 flex h-[220px] w-full max-w-[400px] items-center justify-center overflow-hidden rounded-xl border border-neutral-200 bg-neutral-50 dark:border-neutral-800 dark:bg-neutral-900", children: imgError ? (jsxRuntime.jsxs("div", { className: "absolute inset-0 flex flex-col items-center justify-center border border-dashed border-neutral-300 text-sm text-neutral-400 dark:border-neutral-700", children: [jsxRuntime.jsx(icons.ImageOffIcon, { className: "mb-2 size-12" }), jsxRuntime.jsx("span", { children: "Image loading failed" })] })) : imgHref ? (jsxRuntime.jsx("a", { href: imgHref, target: "_blank", rel: "noopener noreferrer", className: "block h-full w-full", children: jsxRuntime.jsx(Image, { src: imgSrc, alt: "image", fill: true, className: "rounded-lg object-contain", priority: false, placeholder: "empty", unoptimized: true, onError: () => setImgError(true), sizes: "(max-width: 400px) 100vw, 400px" }) })) : (jsxRuntime.jsx(Image, { src: imgSrc, alt: "image", fill: true, className: "rounded-lg object-contain", priority: false, placeholder: "empty", unoptimized: true, onError: () => setImgError(true), sizes: "(max-width: 400px) 100vw, 400px" })) })), (cancelText || confirmText) && (jsxRuntime.jsxs("div", { className: dialogStyles.dialogFooterClass, children: [cancelText && (jsxRuntime.jsx("button", { type: "button", onClick: () => {
16
+ onOpenChange(false);
17
+ onCancel === null || onCancel === void 0 ? void 0 : onCancel();
18
+ }, className: dialogStyles.secondaryButtonClass, children: cancelText })), confirmText && (jsxRuntime.jsx(ui.AlertDialogAction, { onClick: () => {
19
+ onOpenChange(false);
20
+ onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm();
21
+ }, className: confirmText && !cancelText ? dialogStyles.subtlePrimaryButtonClass : dialogStyles.primaryButtonClass, children: confirmText }))] }))] }) }));
22
+ }
23
+
24
+ exports.AdsAlertDialog = AdsAlertDialog;
@@ -0,0 +1,22 @@
1
+ "use client";
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import { useState } from 'react';
4
+ import Image from 'next/image';
5
+ import { BellIcon, XIcon, ImageOffIcon } from '@windrun-huaiin/base-ui/icons';
6
+ import { AlertDialog, AlertDialogContent, AlertDialogTitle, AlertDialogDescription, AlertDialogAction } from '@windrun-huaiin/base-ui/ui';
7
+ import { cn } from '@windrun-huaiin/lib/utils';
8
+ import { dialogThemedOverlayClass, dialogHeaderClass, dialogTitleClass, closeButtonClass, dialogDescriptionClass, dialogFooterClass, secondaryButtonClass, subtlePrimaryButtonClass, primaryButtonClass, dialogContentClass } from './dialog-styles.mjs';
9
+
10
+ function AdsAlertDialog({ open, onOpenChange, title, description, imgSrc, imgHref, cancelText, onCancel, confirmText, onConfirm, }) {
11
+ const [imgError, setImgError] = useState(false);
12
+ const handleClose = () => onOpenChange(false);
13
+ return (jsx(AlertDialog, { open: open, onOpenChange: onOpenChange, children: jsxs(AlertDialogContent, { className: cn(dialogContentClass, 'max-w-md p-4'), overlayClassName: dialogThemedOverlayClass, onOverlayClick: handleClose, children: [jsxs("div", { className: dialogHeaderClass, children: [jsx(AlertDialogTitle, { asChild: true, children: jsxs("div", { className: dialogTitleClass, children: [jsx("span", { className: "inline-flex size-9 shrink-0 items-center justify-center rounded-full bg-neutral-100 text-neutral-600 ring-1 ring-neutral-200 dark:bg-neutral-900 dark:text-neutral-300 dark:ring-neutral-800", children: jsx(BellIcon, { className: "size-5" }) }), jsx("span", { className: "truncate", children: title })] }) }), jsx("button", { type: "button", className: closeButtonClass, onClick: handleClose, "aria-label": "Close", children: jsx(XIcon, { className: "size-4" }) })] }), jsx(AlertDialogDescription, { className: cn(dialogDescriptionClass, 'mb-3 text-base text-neutral-800 dark:text-neutral-100'), children: description }), imgSrc && (jsx("div", { className: "relative mb-2 flex h-[220px] w-full max-w-[400px] items-center justify-center overflow-hidden rounded-xl border border-neutral-200 bg-neutral-50 dark:border-neutral-800 dark:bg-neutral-900", children: imgError ? (jsxs("div", { className: "absolute inset-0 flex flex-col items-center justify-center border border-dashed border-neutral-300 text-sm text-neutral-400 dark:border-neutral-700", children: [jsx(ImageOffIcon, { className: "mb-2 size-12" }), jsx("span", { children: "Image loading failed" })] })) : imgHref ? (jsx("a", { href: imgHref, target: "_blank", rel: "noopener noreferrer", className: "block h-full w-full", children: jsx(Image, { src: imgSrc, alt: "image", fill: true, className: "rounded-lg object-contain", priority: false, placeholder: "empty", unoptimized: true, onError: () => setImgError(true), sizes: "(max-width: 400px) 100vw, 400px" }) })) : (jsx(Image, { src: imgSrc, alt: "image", fill: true, className: "rounded-lg object-contain", priority: false, placeholder: "empty", unoptimized: true, onError: () => setImgError(true), sizes: "(max-width: 400px) 100vw, 400px" })) })), (cancelText || confirmText) && (jsxs("div", { className: dialogFooterClass, children: [cancelText && (jsx("button", { type: "button", onClick: () => {
14
+ onOpenChange(false);
15
+ onCancel === null || onCancel === void 0 ? void 0 : onCancel();
16
+ }, className: secondaryButtonClass, children: cancelText })), confirmText && (jsx(AlertDialogAction, { onClick: () => {
17
+ onOpenChange(false);
18
+ onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm();
19
+ }, className: confirmText && !cancelText ? subtlePrimaryButtonClass : primaryButtonClass, children: confirmText }))] }))] }) }));
20
+ }
21
+
22
+ export { AdsAlertDialog };
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ export type ConfirmDialogType = 'normal' | 'danger';
3
+ interface ConfirmDialogProps {
4
+ open: boolean;
5
+ onOpenChange: (open: boolean) => void;
6
+ type?: ConfirmDialogType;
7
+ title: React.ReactNode;
8
+ description: React.ReactNode;
9
+ cancelText?: string;
10
+ confirmText?: string;
11
+ onCancel?: () => void;
12
+ onConfirm?: () => void;
13
+ }
14
+ export declare function ConfirmDialog({ open, onOpenChange, type, title, description, cancelText, confirmText, onCancel, onConfirm, }: ConfirmDialogProps): import("react/jsx-runtime").JSX.Element;
15
+ export {};
@@ -0,0 +1,40 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var icons = require('@windrun-huaiin/base-ui/icons');
6
+ var lib = require('@windrun-huaiin/base-ui/lib');
7
+ var ui = require('@windrun-huaiin/base-ui/ui');
8
+ var utils = require('@windrun-huaiin/lib/utils');
9
+ var dialogStyles = require('./dialog-styles.js');
10
+
11
+ const confirmTypeClassMap = {
12
+ normal: {
13
+ content: '',
14
+ iconWrap: utils.cn(lib.themeBgColor, 'ring-0'),
15
+ icon: lib.themeIconColor,
16
+ action: dialogStyles.primaryButtonClass,
17
+ Icon: icons.CircleQuestionMarkIcon,
18
+ },
19
+ danger: {
20
+ content: 'border-red-300 dark:border-red-700',
21
+ iconWrap: 'bg-red-100 text-red-600 ring-red-200 dark:bg-red-950 dark:text-red-300 dark:ring-red-900',
22
+ icon: 'text-red-600 dark:text-red-300',
23
+ action: dialogStyles.dangerButtonClass,
24
+ Icon: icons.CircleAlertIcon,
25
+ },
26
+ };
27
+ function ConfirmDialog({ open, onOpenChange, type = 'normal', title, description, cancelText = 'Cancel', confirmText = 'Confirm', onCancel, onConfirm, }) {
28
+ const typeClass = confirmTypeClassMap[type];
29
+ const Icon = typeClass.Icon;
30
+ const handleCancel = () => {
31
+ onOpenChange(false);
32
+ onCancel === null || onCancel === void 0 ? void 0 : onCancel();
33
+ };
34
+ return (jsxRuntime.jsx(ui.AlertDialog, { open: open, onOpenChange: onOpenChange, children: jsxRuntime.jsxs(ui.AlertDialogContent, { className: utils.cn(dialogStyles.dialogContentClass, typeClass.content), overlayClassName: dialogStyles.dialogThemedOverlayClass, onOverlayClick: handleCancel, children: [jsxRuntime.jsxs("div", { className: dialogStyles.dialogHeaderClass, children: [jsxRuntime.jsx(ui.AlertDialogTitle, { asChild: true, children: jsxRuntime.jsxs("div", { className: dialogStyles.dialogTitleClass, children: [jsxRuntime.jsx("span", { className: utils.cn('inline-flex size-9 shrink-0 items-center justify-center rounded-full ring-1', typeClass.iconWrap), children: jsxRuntime.jsx(Icon, { className: utils.cn('size-5', typeClass.icon) }) }), jsxRuntime.jsx("span", { className: "min-w-0 truncate", children: title })] }) }), jsxRuntime.jsx("button", { type: "button", className: dialogStyles.closeButtonClass, onClick: handleCancel, "aria-label": "Close", children: jsxRuntime.jsx(icons.XIcon, { className: "size-4" }) })] }), jsxRuntime.jsx(ui.AlertDialogDescription, { className: dialogStyles.dialogDescriptionClass, children: description }), jsxRuntime.jsxs("div", { className: dialogStyles.dialogFooterClass, children: [jsxRuntime.jsx(ui.AlertDialogCancel, { className: dialogStyles.secondaryButtonClass, onClick: handleCancel, children: cancelText }), jsxRuntime.jsx(ui.AlertDialogAction, { className: typeClass.action, onClick: () => {
35
+ onOpenChange(false);
36
+ onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm();
37
+ }, children: confirmText })] })] }) }));
38
+ }
39
+
40
+ exports.ConfirmDialog = ConfirmDialog;
@@ -0,0 +1,38 @@
1
+ "use client";
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import { CircleAlertIcon, CircleQuestionMarkIcon, XIcon } from '@windrun-huaiin/base-ui/icons';
4
+ import { themeBgColor, themeIconColor } from '@windrun-huaiin/base-ui/lib';
5
+ import { AlertDialog, AlertDialogContent, AlertDialogTitle, AlertDialogDescription, AlertDialogCancel, AlertDialogAction } from '@windrun-huaiin/base-ui/ui';
6
+ import { cn } from '@windrun-huaiin/lib/utils';
7
+ import { dangerButtonClass, primaryButtonClass, dialogThemedOverlayClass, dialogHeaderClass, dialogTitleClass, closeButtonClass, dialogDescriptionClass, dialogFooterClass, secondaryButtonClass, dialogContentClass } from './dialog-styles.mjs';
8
+
9
+ const confirmTypeClassMap = {
10
+ normal: {
11
+ content: '',
12
+ iconWrap: cn(themeBgColor, 'ring-0'),
13
+ icon: themeIconColor,
14
+ action: primaryButtonClass,
15
+ Icon: CircleQuestionMarkIcon,
16
+ },
17
+ danger: {
18
+ content: 'border-red-300 dark:border-red-700',
19
+ iconWrap: 'bg-red-100 text-red-600 ring-red-200 dark:bg-red-950 dark:text-red-300 dark:ring-red-900',
20
+ icon: 'text-red-600 dark:text-red-300',
21
+ action: dangerButtonClass,
22
+ Icon: CircleAlertIcon,
23
+ },
24
+ };
25
+ function ConfirmDialog({ open, onOpenChange, type = 'normal', title, description, cancelText = 'Cancel', confirmText = 'Confirm', onCancel, onConfirm, }) {
26
+ const typeClass = confirmTypeClassMap[type];
27
+ const Icon = typeClass.Icon;
28
+ const handleCancel = () => {
29
+ onOpenChange(false);
30
+ onCancel === null || onCancel === void 0 ? void 0 : onCancel();
31
+ };
32
+ return (jsx(AlertDialog, { open: open, onOpenChange: onOpenChange, children: jsxs(AlertDialogContent, { className: cn(dialogContentClass, typeClass.content), overlayClassName: dialogThemedOverlayClass, onOverlayClick: handleCancel, children: [jsxs("div", { className: dialogHeaderClass, children: [jsx(AlertDialogTitle, { asChild: true, children: jsxs("div", { className: dialogTitleClass, children: [jsx("span", { className: cn('inline-flex size-9 shrink-0 items-center justify-center rounded-full ring-1', typeClass.iconWrap), children: jsx(Icon, { className: cn('size-5', typeClass.icon) }) }), jsx("span", { className: "min-w-0 truncate", children: title })] }) }), jsx("button", { type: "button", className: closeButtonClass, onClick: handleCancel, "aria-label": "Close", children: jsx(XIcon, { className: "size-4" }) })] }), jsx(AlertDialogDescription, { className: dialogDescriptionClass, children: description }), jsxs("div", { className: dialogFooterClass, children: [jsx(AlertDialogCancel, { className: secondaryButtonClass, onClick: handleCancel, children: cancelText }), jsx(AlertDialogAction, { className: typeClass.action, onClick: () => {
33
+ onOpenChange(false);
34
+ onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm();
35
+ }, children: confirmText })] })] }) }));
36
+ }
37
+
38
+ export { ConfirmDialog };
@@ -0,0 +1,14 @@
1
+ export declare const dialogSurfaceClass: string;
2
+ export declare const dialogThemedOverlayClass: string;
3
+ export declare const dialogContentClass: string;
4
+ export declare const dialogHeaderClass = "flex items-start justify-between gap-4";
5
+ export declare const dialogTitleClass = "flex min-w-0 items-center gap-2 text-lg font-bold leading-tight text-neutral-950 dark:text-neutral-50";
6
+ export declare const dialogDescriptionClass = "mt-3 text-sm font-medium leading-relaxed text-neutral-600 dark:text-neutral-300";
7
+ export declare const dialogFooterClass = "mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end";
8
+ export declare const closeButtonClass = "inline-flex size-8 shrink-0 items-center justify-center rounded-full text-neutral-400 transition hover:bg-neutral-100 hover:text-neutral-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-400 dark:hover:bg-neutral-800 dark:hover:text-neutral-200";
9
+ export declare const secondaryButtonClass = "inline-flex min-h-10 items-center justify-center rounded-full border border-neutral-300 bg-white px-5 py-2 text-sm font-semibold text-neutral-700 transition hover:bg-neutral-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-400 disabled:pointer-events-none disabled:opacity-60 dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-200 dark:hover:bg-neutral-800";
10
+ export declare const primaryButtonClass: string;
11
+ export declare const subtlePrimaryButtonClass: string;
12
+ export declare const dangerButtonClass = "inline-flex min-h-10 items-center justify-center rounded-full bg-red-600 px-5 py-2 text-sm font-bold text-white shadow-sm transition hover:bg-red-700 hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-red-500 disabled:pointer-events-none disabled:opacity-60 dark:bg-red-600 dark:hover:bg-red-500";
13
+ export declare const highPriorityTitleClass: string;
14
+ export declare const highPrioritySurfaceClass: string;
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var lib = require('@windrun-huaiin/base-ui/lib');
5
+ var utils = require('@windrun-huaiin/lib/utils');
6
+
7
+ const dialogSurfaceClass = utils.cn('w-[calc(100vw-2rem)] max-w-md rounded-2xl border bg-white p-5 text-neutral-950 shadow-2xl outline-none dark:bg-neutral-950 dark:text-neutral-50', 'border-neutral-200 dark:border-neutral-800');
8
+ const dialogThemedOverlayClass = utils.cn(lib.themeMainBgColor, 'opacity-90 backdrop-blur-[2px] dark:opacity-85');
9
+ const dialogContentClass = utils.cn('fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2', dialogSurfaceClass);
10
+ const dialogHeaderClass = 'flex items-start justify-between gap-4';
11
+ const dialogTitleClass = 'flex min-w-0 items-center gap-2 text-lg font-bold leading-tight text-neutral-950 dark:text-neutral-50';
12
+ const dialogDescriptionClass = 'mt-3 text-sm font-medium leading-relaxed text-neutral-600 dark:text-neutral-300';
13
+ const dialogFooterClass = 'mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end';
14
+ const closeButtonClass = 'inline-flex size-8 shrink-0 items-center justify-center rounded-full text-neutral-400 transition hover:bg-neutral-100 hover:text-neutral-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-400 dark:hover:bg-neutral-800 dark:hover:text-neutral-200';
15
+ const secondaryButtonClass = 'inline-flex min-h-10 items-center justify-center rounded-full border border-neutral-300 bg-white px-5 py-2 text-sm font-semibold text-neutral-700 transition hover:bg-neutral-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-400 disabled:pointer-events-none disabled:opacity-60 dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-200 dark:hover:bg-neutral-800';
16
+ const primaryButtonClass = utils.cn('inline-flex min-h-10 items-center justify-center rounded-full px-5 py-2 text-sm font-bold text-white shadow-sm transition hover:shadow-md focus-visible:outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-60', lib.themeButtonGradientClass, lib.themeButtonGradientHoverClass, lib.themeRingColor);
17
+ const subtlePrimaryButtonClass = utils.cn('inline-flex min-h-10 items-center justify-center rounded-full border px-5 py-2 text-sm font-bold transition hover:brightness-95 focus-visible:outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-60', lib.themeBgColor, lib.themeBorderColor, lib.themeIconColor, lib.themeRingColor);
18
+ const dangerButtonClass = 'inline-flex min-h-10 items-center justify-center rounded-full bg-red-600 px-5 py-2 text-sm font-bold text-white shadow-sm transition hover:bg-red-700 hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-red-500 disabled:pointer-events-none disabled:opacity-60 dark:bg-red-600 dark:hover:bg-red-500';
19
+ const highPriorityTitleClass = utils.cn('flex min-w-0 items-center gap-2 text-lg font-bold leading-tight', lib.themeIconColor);
20
+ const highPrioritySurfaceClass = utils.cn(dialogSurfaceClass, 'backdrop-blur-md ring-4 animate-in zoom-in-95 duration-300', lib.themeBorderColor, lib.themeRingColor);
21
+
22
+ exports.closeButtonClass = closeButtonClass;
23
+ exports.dangerButtonClass = dangerButtonClass;
24
+ exports.dialogContentClass = dialogContentClass;
25
+ exports.dialogDescriptionClass = dialogDescriptionClass;
26
+ exports.dialogFooterClass = dialogFooterClass;
27
+ exports.dialogHeaderClass = dialogHeaderClass;
28
+ exports.dialogSurfaceClass = dialogSurfaceClass;
29
+ exports.dialogThemedOverlayClass = dialogThemedOverlayClass;
30
+ exports.dialogTitleClass = dialogTitleClass;
31
+ exports.highPrioritySurfaceClass = highPrioritySurfaceClass;
32
+ exports.highPriorityTitleClass = highPriorityTitleClass;
33
+ exports.primaryButtonClass = primaryButtonClass;
34
+ exports.secondaryButtonClass = secondaryButtonClass;
35
+ exports.subtlePrimaryButtonClass = subtlePrimaryButtonClass;
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { themeMainBgColor, themeButtonGradientClass, themeButtonGradientHoverClass, themeRingColor, themeBgColor, themeBorderColor, themeIconColor } from '@windrun-huaiin/base-ui/lib';
3
+ import { cn } from '@windrun-huaiin/lib/utils';
4
+
5
+ const dialogSurfaceClass = cn('w-[calc(100vw-2rem)] max-w-md rounded-2xl border bg-white p-5 text-neutral-950 shadow-2xl outline-none dark:bg-neutral-950 dark:text-neutral-50', 'border-neutral-200 dark:border-neutral-800');
6
+ const dialogThemedOverlayClass = cn(themeMainBgColor, 'opacity-90 backdrop-blur-[2px] dark:opacity-85');
7
+ const dialogContentClass = cn('fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2', dialogSurfaceClass);
8
+ const dialogHeaderClass = 'flex items-start justify-between gap-4';
9
+ const dialogTitleClass = 'flex min-w-0 items-center gap-2 text-lg font-bold leading-tight text-neutral-950 dark:text-neutral-50';
10
+ const dialogDescriptionClass = 'mt-3 text-sm font-medium leading-relaxed text-neutral-600 dark:text-neutral-300';
11
+ const dialogFooterClass = 'mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end';
12
+ const closeButtonClass = 'inline-flex size-8 shrink-0 items-center justify-center rounded-full text-neutral-400 transition hover:bg-neutral-100 hover:text-neutral-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-400 dark:hover:bg-neutral-800 dark:hover:text-neutral-200';
13
+ const secondaryButtonClass = 'inline-flex min-h-10 items-center justify-center rounded-full border border-neutral-300 bg-white px-5 py-2 text-sm font-semibold text-neutral-700 transition hover:bg-neutral-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-400 disabled:pointer-events-none disabled:opacity-60 dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-200 dark:hover:bg-neutral-800';
14
+ const primaryButtonClass = cn('inline-flex min-h-10 items-center justify-center rounded-full px-5 py-2 text-sm font-bold text-white shadow-sm transition hover:shadow-md focus-visible:outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-60', themeButtonGradientClass, themeButtonGradientHoverClass, themeRingColor);
15
+ const subtlePrimaryButtonClass = cn('inline-flex min-h-10 items-center justify-center rounded-full border px-5 py-2 text-sm font-bold transition hover:brightness-95 focus-visible:outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-60', themeBgColor, themeBorderColor, themeIconColor, themeRingColor);
16
+ const dangerButtonClass = 'inline-flex min-h-10 items-center justify-center rounded-full bg-red-600 px-5 py-2 text-sm font-bold text-white shadow-sm transition hover:bg-red-700 hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-red-500 disabled:pointer-events-none disabled:opacity-60 dark:bg-red-600 dark:hover:bg-red-500';
17
+ const highPriorityTitleClass = cn('flex min-w-0 items-center gap-2 text-lg font-bold leading-tight', themeIconColor);
18
+ const highPrioritySurfaceClass = cn(dialogSurfaceClass, 'backdrop-blur-md ring-4 animate-in zoom-in-95 duration-300', themeBorderColor, themeRingColor);
19
+
20
+ export { closeButtonClass, dangerButtonClass, dialogContentClass, dialogDescriptionClass, dialogFooterClass, dialogHeaderClass, dialogSurfaceClass, dialogThemedOverlayClass, dialogTitleClass, highPrioritySurfaceClass, highPriorityTitleClass, primaryButtonClass, secondaryButtonClass, subtlePrimaryButtonClass };
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ interface HighPriorityConfirmDialogProps {
3
+ open: boolean;
4
+ onCancel: () => void;
5
+ onConfirm: () => void;
6
+ title: string;
7
+ description: React.ReactNode;
8
+ confirmText?: string;
9
+ cancelText?: string;
10
+ }
11
+ export declare function HighPriorityConfirmDialog({ open, onCancel, onConfirm, title, description, confirmText, cancelText, }: HighPriorityConfirmDialogProps): React.ReactPortal | null;
12
+ export {};
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var React = require('react');
6
+ var reactDom = require('react-dom');
7
+ var icons = require('@windrun-huaiin/base-ui/icons');
8
+ var utils = require('@windrun-huaiin/lib/utils');
9
+ var dialogStyles = require('./dialog-styles.js');
10
+ var lib = require('@windrun-huaiin/base-ui/lib');
11
+
12
+ function HighPriorityConfirmDialog({ open, onCancel, onConfirm, title, description, confirmText = "Confirm", cancelText = "Cancel", }) {
13
+ const [mounted, setMounted] = React.useState(false);
14
+ React.useEffect(() => {
15
+ // Ensure portal target exists and prevent hydration mismatch
16
+ setTimeout(() => setMounted(true), 0);
17
+ }, []);
18
+ if (!open || !mounted)
19
+ return null;
20
+ return reactDom.createPortal(jsxRuntime.jsx("div", { className: "fixed inset-0 z-10000 flex items-center justify-center bg-black/60 backdrop-blur-sm animate-in fade-in duration-300", children: jsxRuntime.jsxs("div", { className: utils.cn(dialogStyles.highPrioritySurfaceClass, "scale-100"), role: "dialog", "aria-modal": "true", onClick: (e) => e.stopPropagation(), children: [jsxRuntime.jsxs("div", { className: dialogStyles.dialogHeaderClass, children: [jsxRuntime.jsxs("h3", { className: dialogStyles.highPriorityTitleClass, children: [jsxRuntime.jsx("span", { className: utils.cn('inline-flex size-9 shrink-0 items-center justify-center rounded-full ring-1', lib.themeBgColor, lib.themeBorderColor), children: jsxRuntime.jsx(icons.FAQSIcon, { className: utils.cn('size-5', lib.themeIconColor) }) }), jsxRuntime.jsx("span", { className: "min-w-0 truncate", children: title })] }), jsxRuntime.jsx("button", { type: "button", className: dialogStyles.closeButtonClass, onClick: onCancel, "aria-label": "Close", children: jsxRuntime.jsx(icons.XIcon, { className: "size-4" }) })] }), jsxRuntime.jsx("div", { className: dialogStyles.dialogDescriptionClass, children: description }), jsxRuntime.jsxs("div", { className: dialogStyles.dialogFooterClass, children: [jsxRuntime.jsx("button", { type: "button", onClick: onCancel, className: dialogStyles.secondaryButtonClass, children: cancelText }), jsxRuntime.jsx("button", { type: "button", onClick: onConfirm, className: utils.cn(dialogStyles.primaryButtonClass, "hover:scale-105 active:scale-95"), children: confirmText })] })] }) }), document.body);
21
+ }
22
+
23
+ exports.HighPriorityConfirmDialog = HighPriorityConfirmDialog;
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import { useState, useEffect } from 'react';
4
+ import { createPortal } from 'react-dom';
5
+ import { FAQSIcon, XIcon } from '@windrun-huaiin/base-ui/icons';
6
+ import { cn } from '@windrun-huaiin/lib/utils';
7
+ import { dialogHeaderClass, highPriorityTitleClass, closeButtonClass, dialogDescriptionClass, dialogFooterClass, secondaryButtonClass, primaryButtonClass, highPrioritySurfaceClass } from './dialog-styles.mjs';
8
+ import { themeIconColor, themeBgColor, themeBorderColor } from '@windrun-huaiin/base-ui/lib';
9
+
10
+ function HighPriorityConfirmDialog({ open, onCancel, onConfirm, title, description, confirmText = "Confirm", cancelText = "Cancel", }) {
11
+ const [mounted, setMounted] = useState(false);
12
+ useEffect(() => {
13
+ // Ensure portal target exists and prevent hydration mismatch
14
+ setTimeout(() => setMounted(true), 0);
15
+ }, []);
16
+ if (!open || !mounted)
17
+ return null;
18
+ return createPortal(jsx("div", { className: "fixed inset-0 z-10000 flex items-center justify-center bg-black/60 backdrop-blur-sm animate-in fade-in duration-300", children: jsxs("div", { className: cn(highPrioritySurfaceClass, "scale-100"), role: "dialog", "aria-modal": "true", onClick: (e) => e.stopPropagation(), children: [jsxs("div", { className: dialogHeaderClass, children: [jsxs("h3", { className: highPriorityTitleClass, children: [jsx("span", { className: cn('inline-flex size-9 shrink-0 items-center justify-center rounded-full ring-1', themeBgColor, themeBorderColor), children: jsx(FAQSIcon, { className: cn('size-5', themeIconColor) }) }), jsx("span", { className: "min-w-0 truncate", children: title })] }), jsx("button", { type: "button", className: closeButtonClass, onClick: onCancel, "aria-label": "Close", children: jsx(XIcon, { className: "size-4" }) })] }), jsx("div", { className: dialogDescriptionClass, children: description }), jsxs("div", { className: dialogFooterClass, children: [jsx("button", { type: "button", onClick: onCancel, className: secondaryButtonClass, children: cancelText }), jsx("button", { type: "button", onClick: onConfirm, className: cn(primaryButtonClass, "hover:scale-105 active:scale-95"), children: confirmText })] })] }) }), document.body);
19
+ }
20
+
21
+ export { HighPriorityConfirmDialog };
@@ -0,0 +1,4 @@
1
+ export * from './ads-alert-dialog';
2
+ export * from './confirm-dialog';
3
+ export * from './high-priority-confirm-dialog';
4
+ export * from './info-dialog';
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ export type InfoDialogType = 'info' | 'warn' | 'success' | 'error';
3
+ interface InfoDialogProps {
4
+ open: boolean;
5
+ onOpenChange: (open: boolean) => void;
6
+ type?: InfoDialogType;
7
+ title: React.ReactNode;
8
+ description: React.ReactNode;
9
+ confirmText?: string;
10
+ onConfirm?: () => void;
11
+ }
12
+ export declare function InfoDialog({ open, onOpenChange, type, title, description, confirmText, onConfirm, }: InfoDialogProps): import("react/jsx-runtime").JSX.Element;
13
+ export {};
@@ -0,0 +1,50 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var icons = require('@windrun-huaiin/base-ui/icons');
6
+ var ui = require('@windrun-huaiin/base-ui/ui');
7
+ var utils = require('@windrun-huaiin/lib/utils');
8
+ var dialogStyles = require('./dialog-styles.js');
9
+
10
+ const infoTypeClassMap = {
11
+ info: {
12
+ content: 'border-sky-300 dark:border-sky-700',
13
+ iconWrap: 'bg-sky-100 text-sky-600 ring-sky-200 dark:bg-sky-950 dark:text-sky-300 dark:ring-sky-900',
14
+ icon: 'text-sky-600 dark:text-sky-300',
15
+ action: 'bg-sky-600 text-white hover:bg-sky-700 focus-visible:ring-sky-500 dark:bg-sky-500 dark:hover:bg-sky-400',
16
+ Icon: icons.BadgeInfoIcon,
17
+ },
18
+ warn: {
19
+ content: 'border-amber-300 dark:border-amber-700',
20
+ iconWrap: 'bg-amber-100 text-amber-700 ring-amber-200 dark:bg-amber-950 dark:text-amber-300 dark:ring-amber-900',
21
+ icon: 'text-amber-700 dark:text-amber-300',
22
+ action: 'bg-amber-600 text-white hover:bg-amber-700 focus-visible:ring-amber-500 dark:bg-amber-500 dark:hover:bg-amber-400',
23
+ Icon: icons.BadgeAlertIcon,
24
+ },
25
+ success: {
26
+ content: 'border-emerald-300 dark:border-emerald-700',
27
+ iconWrap: 'bg-emerald-100 text-emerald-600 ring-emerald-200 dark:bg-emerald-950 dark:text-emerald-300 dark:ring-emerald-900',
28
+ icon: 'text-emerald-600 dark:text-emerald-300',
29
+ action: 'bg-emerald-600 text-white hover:bg-emerald-700 focus-visible:ring-emerald-500 dark:bg-emerald-500 dark:hover:bg-emerald-400',
30
+ Icon: icons.BadgeCheckIcon,
31
+ },
32
+ error: {
33
+ content: 'border-red-300 dark:border-red-700',
34
+ iconWrap: 'bg-red-100 text-red-600 ring-red-200 dark:bg-red-950 dark:text-red-300 dark:ring-red-900',
35
+ icon: 'text-red-600 dark:text-red-300',
36
+ action: 'bg-red-600 text-white hover:bg-red-700 focus-visible:ring-red-500 dark:bg-red-600 dark:hover:bg-red-500',
37
+ Icon: icons.BadgeXIcon,
38
+ },
39
+ };
40
+ function InfoDialog({ open, onOpenChange, type = 'info', title, description, confirmText = 'OK', onConfirm, }) {
41
+ const typeClass = infoTypeClassMap[type];
42
+ const Icon = typeClass.Icon;
43
+ const handleClose = () => onOpenChange(false);
44
+ return (jsxRuntime.jsx(ui.AlertDialog, { open: open, onOpenChange: onOpenChange, children: jsxRuntime.jsxs(ui.AlertDialogContent, { className: utils.cn(dialogStyles.dialogContentClass, typeClass.content), overlayClassName: dialogStyles.dialogThemedOverlayClass, onOverlayClick: handleClose, children: [jsxRuntime.jsxs("div", { className: dialogStyles.dialogHeaderClass, children: [jsxRuntime.jsx(ui.AlertDialogTitle, { asChild: true, children: jsxRuntime.jsxs("div", { className: dialogStyles.dialogTitleClass, children: [jsxRuntime.jsx("span", { className: utils.cn('inline-flex size-9 shrink-0 items-center justify-center rounded-full ring-1', typeClass.iconWrap), children: jsxRuntime.jsx(Icon, { className: utils.cn('size-5', typeClass.icon) }) }), jsxRuntime.jsx("span", { className: "min-w-0 truncate", children: title })] }) }), jsxRuntime.jsx("button", { type: "button", className: dialogStyles.closeButtonClass, onClick: handleClose, "aria-label": "Close", children: jsxRuntime.jsx(icons.XIcon, { className: "size-4" }) })] }), jsxRuntime.jsx(ui.AlertDialogDescription, { className: dialogStyles.dialogDescriptionClass, children: description }), jsxRuntime.jsx("div", { className: dialogStyles.dialogFooterClass, children: jsxRuntime.jsx(ui.AlertDialogAction, { className: utils.cn('inline-flex min-h-10 items-center justify-center rounded-full px-5 py-2 text-sm font-bold transition focus-visible:outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-60', typeClass.action), onClick: () => {
45
+ onOpenChange(false);
46
+ onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm();
47
+ }, children: confirmText }) })] }) }));
48
+ }
49
+
50
+ exports.InfoDialog = InfoDialog;
@@ -0,0 +1,48 @@
1
+ "use client";
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import { BadgeXIcon, BadgeCheckIcon, BadgeAlertIcon, BadgeInfoIcon, XIcon } from '@windrun-huaiin/base-ui/icons';
4
+ import { AlertDialog, AlertDialogContent, AlertDialogTitle, AlertDialogDescription, AlertDialogAction } from '@windrun-huaiin/base-ui/ui';
5
+ import { cn } from '@windrun-huaiin/lib/utils';
6
+ import { dialogThemedOverlayClass, dialogHeaderClass, dialogTitleClass, closeButtonClass, dialogDescriptionClass, dialogFooterClass, dialogContentClass } from './dialog-styles.mjs';
7
+
8
+ const infoTypeClassMap = {
9
+ info: {
10
+ content: 'border-sky-300 dark:border-sky-700',
11
+ iconWrap: 'bg-sky-100 text-sky-600 ring-sky-200 dark:bg-sky-950 dark:text-sky-300 dark:ring-sky-900',
12
+ icon: 'text-sky-600 dark:text-sky-300',
13
+ action: 'bg-sky-600 text-white hover:bg-sky-700 focus-visible:ring-sky-500 dark:bg-sky-500 dark:hover:bg-sky-400',
14
+ Icon: BadgeInfoIcon,
15
+ },
16
+ warn: {
17
+ content: 'border-amber-300 dark:border-amber-700',
18
+ iconWrap: 'bg-amber-100 text-amber-700 ring-amber-200 dark:bg-amber-950 dark:text-amber-300 dark:ring-amber-900',
19
+ icon: 'text-amber-700 dark:text-amber-300',
20
+ action: 'bg-amber-600 text-white hover:bg-amber-700 focus-visible:ring-amber-500 dark:bg-amber-500 dark:hover:bg-amber-400',
21
+ Icon: BadgeAlertIcon,
22
+ },
23
+ success: {
24
+ content: 'border-emerald-300 dark:border-emerald-700',
25
+ iconWrap: 'bg-emerald-100 text-emerald-600 ring-emerald-200 dark:bg-emerald-950 dark:text-emerald-300 dark:ring-emerald-900',
26
+ icon: 'text-emerald-600 dark:text-emerald-300',
27
+ action: 'bg-emerald-600 text-white hover:bg-emerald-700 focus-visible:ring-emerald-500 dark:bg-emerald-500 dark:hover:bg-emerald-400',
28
+ Icon: BadgeCheckIcon,
29
+ },
30
+ error: {
31
+ content: 'border-red-300 dark:border-red-700',
32
+ iconWrap: 'bg-red-100 text-red-600 ring-red-200 dark:bg-red-950 dark:text-red-300 dark:ring-red-900',
33
+ icon: 'text-red-600 dark:text-red-300',
34
+ action: 'bg-red-600 text-white hover:bg-red-700 focus-visible:ring-red-500 dark:bg-red-600 dark:hover:bg-red-500',
35
+ Icon: BadgeXIcon,
36
+ },
37
+ };
38
+ function InfoDialog({ open, onOpenChange, type = 'info', title, description, confirmText = 'OK', onConfirm, }) {
39
+ const typeClass = infoTypeClassMap[type];
40
+ const Icon = typeClass.Icon;
41
+ const handleClose = () => onOpenChange(false);
42
+ return (jsx(AlertDialog, { open: open, onOpenChange: onOpenChange, children: jsxs(AlertDialogContent, { className: cn(dialogContentClass, typeClass.content), overlayClassName: dialogThemedOverlayClass, onOverlayClick: handleClose, children: [jsxs("div", { className: dialogHeaderClass, children: [jsx(AlertDialogTitle, { asChild: true, children: jsxs("div", { className: dialogTitleClass, children: [jsx("span", { className: cn('inline-flex size-9 shrink-0 items-center justify-center rounded-full ring-1', typeClass.iconWrap), children: jsx(Icon, { className: cn('size-5', typeClass.icon) }) }), jsx("span", { className: "min-w-0 truncate", children: title })] }) }), jsx("button", { type: "button", className: closeButtonClass, onClick: handleClose, "aria-label": "Close", children: jsx(XIcon, { className: "size-4" }) })] }), jsx(AlertDialogDescription, { className: dialogDescriptionClass, children: description }), jsx("div", { className: dialogFooterClass, children: jsx(AlertDialogAction, { className: cn('inline-flex min-h-10 items-center justify-center rounded-full px-5 py-2 text-sm font-bold transition focus-visible:outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-60', typeClass.action), onClick: () => {
43
+ onOpenChange(false);
44
+ onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm();
45
+ }, children: confirmText }) })] }) }));
46
+ }
47
+
48
+ export { InfoDialog };
@@ -1,7 +1,7 @@
1
1
  export * from './go-to-top';
2
2
  export * from './loading';
3
3
  export * from './nprogress-bar';
4
- export * from './ads-alert-dialog';
4
+ export * from './alert-dialog';
5
5
  export * from './x-button';
6
6
  export * from './x-toggle-button';
7
7
  export * from './ai-prompt-textarea';
@@ -4,7 +4,10 @@
4
4
  var goToTop = require('./go-to-top.js');
5
5
  var loading = require('./loading.js');
6
6
  var nprogressBar = require('./nprogress-bar.js');
7
- var adsAlertDialog = require('./ads-alert-dialog.js');
7
+ var adsAlertDialog = require('./alert-dialog/ads-alert-dialog.js');
8
+ var confirmDialog = require('./alert-dialog/confirm-dialog.js');
9
+ var highPriorityConfirmDialog = require('./alert-dialog/high-priority-confirm-dialog.js');
10
+ var infoDialog = require('./alert-dialog/info-dialog.js');
8
11
  var xButton = require('./x-button.js');
9
12
  var xToggleButton = require('./x-toggle-button.js');
10
13
  var aiPromptTextarea = require('./ai-prompt-textarea.js');
@@ -33,6 +36,9 @@ exports.Loading = loading.Loading;
33
36
  exports.getLoadingCycleDurationMs = loading.getLoadingCycleDurationMs;
34
37
  exports.NProgressBar = nprogressBar.NProgressBar;
35
38
  exports.AdsAlertDialog = adsAlertDialog.AdsAlertDialog;
39
+ exports.ConfirmDialog = confirmDialog.ConfirmDialog;
40
+ exports.HighPriorityConfirmDialog = highPriorityConfirmDialog.HighPriorityConfirmDialog;
41
+ exports.InfoDialog = infoDialog.InfoDialog;
36
42
  exports.XButton = xButton.XButton;
37
43
  exports.XToggleButton = xToggleButton.XToggleButton;
38
44
  exports.AIPromptTextarea = aiPromptTextarea.AIPromptTextarea;
@@ -2,7 +2,10 @@
2
2
  export { GoToTop } from './go-to-top.mjs';
3
3
  export { Loading, getLoadingCycleDurationMs } from './loading.mjs';
4
4
  export { NProgressBar } from './nprogress-bar.mjs';
5
- export { AdsAlertDialog } from './ads-alert-dialog.mjs';
5
+ export { AdsAlertDialog } from './alert-dialog/ads-alert-dialog.mjs';
6
+ export { ConfirmDialog } from './alert-dialog/confirm-dialog.mjs';
7
+ export { HighPriorityConfirmDialog } from './alert-dialog/high-priority-confirm-dialog.mjs';
8
+ export { InfoDialog } from './alert-dialog/info-dialog.mjs';
6
9
  export { XButton } from './x-button.mjs';
7
10
  export { XToggleButton } from './x-toggle-button.mjs';
8
11
  export { AIPromptTextarea } from './ai-prompt-textarea.mjs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@windrun-huaiin/third-ui",
3
- "version": "16.0.1",
3
+ "version": "20.1.0",
4
4
  "description": "Third-party integrated UI components for windrun-huaiin projects",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -102,9 +102,9 @@
102
102
  "tslib": "^2.8.1",
103
103
  "unified": "^11.0.5",
104
104
  "zod": "^4.3.6",
105
- "@windrun-huaiin/base-ui": "^16.0.0",
106
- "@windrun-huaiin/lib": "^16.0.0",
107
- "@windrun-huaiin/contracts": "^16.0.0"
105
+ "@windrun-huaiin/base-ui": "^20.1.0",
106
+ "@windrun-huaiin/contracts": "^20.0.0",
107
+ "@windrun-huaiin/lib": "^20.0.0"
108
108
  },
109
109
  "peerDependencies": {
110
110
  "clsx": "^2.1.1",