@windrun-huaiin/third-ui 20.0.0 → 21.0.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 +1 -1
- package/dist/clerk/clerk-page-generator.d.ts +0 -8
- package/dist/clerk/fingerprint/fingerprint-provider.js +58 -49
- package/dist/clerk/fingerprint/fingerprint-provider.mjs +58 -49
- package/dist/fuma/fuma-page-genarator.d.ts +2 -2
- package/dist/fuma/fuma-page-genarator.js +21 -8
- package/dist/fuma/fuma-page-genarator.mjs +21 -8
- package/dist/fuma/llm-copy-handler.js +3 -2
- package/dist/fuma/llm-copy-handler.mjs +3 -2
- package/dist/fuma/mdx/index.d.ts +1 -0
- package/dist/fuma/mdx/index.js +3 -0
- package/dist/fuma/mdx/index.mjs +1 -0
- package/dist/fuma/mdx/math.d.ts +17 -0
- package/dist/fuma/mdx/math.js +60 -0
- package/dist/fuma/mdx/math.mjs +57 -0
- package/dist/fuma/mdx/zia-card.js +1 -1
- package/dist/fuma/mdx/zia-card.mjs +1 -1
- package/dist/main/{ads-alert-dialog.d.ts → alert-dialog/ads-alert-dialog.d.ts} +1 -1
- package/dist/main/alert-dialog/ads-alert-dialog.js +24 -0
- package/dist/main/alert-dialog/ads-alert-dialog.mjs +22 -0
- package/dist/main/alert-dialog/confirm-dialog.d.ts +15 -0
- package/dist/main/alert-dialog/confirm-dialog.js +40 -0
- package/dist/main/alert-dialog/confirm-dialog.mjs +38 -0
- package/dist/main/alert-dialog/dialog-styles.d.ts +14 -0
- package/dist/main/alert-dialog/dialog-styles.js +35 -0
- package/dist/main/alert-dialog/dialog-styles.mjs +20 -0
- package/dist/main/alert-dialog/high-priority-confirm-dialog.d.ts +12 -0
- package/dist/main/alert-dialog/high-priority-confirm-dialog.js +23 -0
- package/dist/main/alert-dialog/high-priority-confirm-dialog.mjs +21 -0
- package/dist/main/alert-dialog/index.d.ts +4 -0
- package/dist/main/alert-dialog/info-dialog.d.ts +13 -0
- package/dist/main/alert-dialog/info-dialog.js +50 -0
- package/dist/main/alert-dialog/info-dialog.mjs +48 -0
- package/dist/main/index.d.ts +1 -1
- package/dist/main/index.js +7 -1
- package/dist/main/index.mjs +4 -1
- package/package.json +4 -4
- package/src/clerk/clerk-page-generator.tsx +0 -9
- package/src/clerk/fingerprint/fingerprint-provider.tsx +155 -62
- package/src/fuma/fuma-page-genarator.tsx +26 -9
- package/src/fuma/llm-copy-handler.ts +3 -3
- package/src/fuma/mdx/index.ts +1 -0
- package/src/fuma/mdx/math.tsx +130 -0
- package/src/fuma/mdx/zia-card.tsx +1 -0
- package/src/main/{ads-alert-dialog.tsx → alert-dialog/ads-alert-dialog.tsx} +46 -29
- package/src/main/alert-dialog/confirm-dialog.tsx +131 -0
- package/src/main/alert-dialog/dialog-styles.ts +73 -0
- package/src/main/alert-dialog/high-priority-confirm-dialog.tsx +94 -0
- package/src/main/alert-dialog/index.ts +7 -0
- package/src/main/alert-dialog/info-dialog.tsx +139 -0
- package/src/main/index.ts +1 -1
- package/src/main/language-detector.tsx +0 -8
- package/dist/main/ads-alert-dialog.js +0 -21
- package/dist/main/ads-alert-dialog.mjs +0 -19
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import {
|
|
5
|
+
BadgeAlertIcon,
|
|
6
|
+
BadgeCheckIcon,
|
|
7
|
+
BadgeInfoIcon,
|
|
8
|
+
BadgeXIcon,
|
|
9
|
+
XIcon,
|
|
10
|
+
} from '@windrun-huaiin/base-ui/icons';
|
|
11
|
+
import {
|
|
12
|
+
AlertDialog,
|
|
13
|
+
AlertDialogAction,
|
|
14
|
+
AlertDialogContent,
|
|
15
|
+
AlertDialogDescription,
|
|
16
|
+
AlertDialogTitle,
|
|
17
|
+
} from '@windrun-huaiin/base-ui/ui';
|
|
18
|
+
import { cn } from '@windrun-huaiin/lib/utils';
|
|
19
|
+
import {
|
|
20
|
+
closeButtonClass,
|
|
21
|
+
dialogContentClass,
|
|
22
|
+
dialogDescriptionClass,
|
|
23
|
+
dialogFooterClass,
|
|
24
|
+
dialogHeaderClass,
|
|
25
|
+
dialogThemedOverlayClass,
|
|
26
|
+
dialogTitleClass,
|
|
27
|
+
} from './dialog-styles';
|
|
28
|
+
|
|
29
|
+
export type InfoDialogType = 'info' | 'warn' | 'success' | 'error';
|
|
30
|
+
type InfoDialogIcon = typeof BadgeInfoIcon;
|
|
31
|
+
|
|
32
|
+
interface InfoDialogProps {
|
|
33
|
+
open: boolean;
|
|
34
|
+
onOpenChange: (open: boolean) => void;
|
|
35
|
+
type?: InfoDialogType;
|
|
36
|
+
title: React.ReactNode;
|
|
37
|
+
description: React.ReactNode;
|
|
38
|
+
confirmText?: string;
|
|
39
|
+
onConfirm?: () => void;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const infoTypeClassMap: Record<InfoDialogType, {
|
|
43
|
+
content: string;
|
|
44
|
+
iconWrap: string;
|
|
45
|
+
icon: string;
|
|
46
|
+
action: string;
|
|
47
|
+
Icon: InfoDialogIcon;
|
|
48
|
+
}> = {
|
|
49
|
+
info: {
|
|
50
|
+
content: 'border-sky-300 dark:border-sky-700',
|
|
51
|
+
iconWrap: 'bg-sky-100 text-sky-600 ring-sky-200 dark:bg-sky-950 dark:text-sky-300 dark:ring-sky-900',
|
|
52
|
+
icon: 'text-sky-600 dark:text-sky-300',
|
|
53
|
+
action: 'bg-sky-600 text-white hover:bg-sky-700 focus-visible:ring-sky-500 dark:bg-sky-500 dark:hover:bg-sky-400',
|
|
54
|
+
Icon: BadgeInfoIcon,
|
|
55
|
+
},
|
|
56
|
+
warn: {
|
|
57
|
+
content: 'border-amber-300 dark:border-amber-700',
|
|
58
|
+
iconWrap: 'bg-amber-100 text-amber-700 ring-amber-200 dark:bg-amber-950 dark:text-amber-300 dark:ring-amber-900',
|
|
59
|
+
icon: 'text-amber-700 dark:text-amber-300',
|
|
60
|
+
action: 'bg-amber-600 text-white hover:bg-amber-700 focus-visible:ring-amber-500 dark:bg-amber-500 dark:hover:bg-amber-400',
|
|
61
|
+
Icon: BadgeAlertIcon,
|
|
62
|
+
},
|
|
63
|
+
success: {
|
|
64
|
+
content: 'border-emerald-300 dark:border-emerald-700',
|
|
65
|
+
iconWrap: 'bg-emerald-100 text-emerald-600 ring-emerald-200 dark:bg-emerald-950 dark:text-emerald-300 dark:ring-emerald-900',
|
|
66
|
+
icon: 'text-emerald-600 dark:text-emerald-300',
|
|
67
|
+
action: 'bg-emerald-600 text-white hover:bg-emerald-700 focus-visible:ring-emerald-500 dark:bg-emerald-500 dark:hover:bg-emerald-400',
|
|
68
|
+
Icon: BadgeCheckIcon,
|
|
69
|
+
},
|
|
70
|
+
error: {
|
|
71
|
+
content: 'border-red-300 dark:border-red-700',
|
|
72
|
+
iconWrap: 'bg-red-100 text-red-600 ring-red-200 dark:bg-red-950 dark:text-red-300 dark:ring-red-900',
|
|
73
|
+
icon: 'text-red-600 dark:text-red-300',
|
|
74
|
+
action: 'bg-red-600 text-white hover:bg-red-700 focus-visible:ring-red-500 dark:bg-red-600 dark:hover:bg-red-500',
|
|
75
|
+
Icon: BadgeXIcon,
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
export function InfoDialog({
|
|
80
|
+
open,
|
|
81
|
+
onOpenChange,
|
|
82
|
+
type = 'info',
|
|
83
|
+
title,
|
|
84
|
+
description,
|
|
85
|
+
confirmText = 'OK',
|
|
86
|
+
onConfirm,
|
|
87
|
+
}: InfoDialogProps) {
|
|
88
|
+
const typeClass = infoTypeClassMap[type];
|
|
89
|
+
const Icon = typeClass.Icon;
|
|
90
|
+
const handleClose = () => onOpenChange(false);
|
|
91
|
+
|
|
92
|
+
return (
|
|
93
|
+
<AlertDialog open={open} onOpenChange={onOpenChange}>
|
|
94
|
+
<AlertDialogContent
|
|
95
|
+
className={cn(dialogContentClass, typeClass.content)}
|
|
96
|
+
overlayClassName={dialogThemedOverlayClass}
|
|
97
|
+
onOverlayClick={handleClose}
|
|
98
|
+
>
|
|
99
|
+
<div className={dialogHeaderClass}>
|
|
100
|
+
<AlertDialogTitle asChild>
|
|
101
|
+
<div className={dialogTitleClass}>
|
|
102
|
+
<span className={cn('inline-flex size-9 shrink-0 items-center justify-center rounded-full ring-1', typeClass.iconWrap)}>
|
|
103
|
+
<Icon className={cn('size-5', typeClass.icon)} />
|
|
104
|
+
</span>
|
|
105
|
+
<span className="min-w-0 truncate">{title}</span>
|
|
106
|
+
</div>
|
|
107
|
+
</AlertDialogTitle>
|
|
108
|
+
<button
|
|
109
|
+
type="button"
|
|
110
|
+
className={closeButtonClass}
|
|
111
|
+
onClick={handleClose}
|
|
112
|
+
aria-label="Close"
|
|
113
|
+
>
|
|
114
|
+
<XIcon className="size-4" />
|
|
115
|
+
</button>
|
|
116
|
+
</div>
|
|
117
|
+
|
|
118
|
+
<AlertDialogDescription className={dialogDescriptionClass}>
|
|
119
|
+
{description}
|
|
120
|
+
</AlertDialogDescription>
|
|
121
|
+
|
|
122
|
+
<div className={dialogFooterClass}>
|
|
123
|
+
<AlertDialogAction
|
|
124
|
+
className={cn(
|
|
125
|
+
'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',
|
|
126
|
+
typeClass.action
|
|
127
|
+
)}
|
|
128
|
+
onClick={() => {
|
|
129
|
+
onOpenChange(false);
|
|
130
|
+
onConfirm?.();
|
|
131
|
+
}}
|
|
132
|
+
>
|
|
133
|
+
{confirmText}
|
|
134
|
+
</AlertDialogAction>
|
|
135
|
+
</div>
|
|
136
|
+
</AlertDialogContent>
|
|
137
|
+
</AlertDialog>
|
|
138
|
+
);
|
|
139
|
+
}
|
package/src/main/index.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
export * from './go-to-top';
|
|
5
5
|
export * from './loading';
|
|
6
6
|
export * from './nprogress-bar';
|
|
7
|
-
export * from './
|
|
7
|
+
export * from './alert-dialog';
|
|
8
8
|
export * from './x-button'
|
|
9
9
|
export * from './x-toggle-button'
|
|
10
10
|
export * from './ai-prompt-textarea'
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* MIT License
|
|
4
|
-
* Copyright (c) 2026 D8ger
|
|
5
|
-
*
|
|
6
|
-
* This source code is licensed under the MIT license found in the
|
|
7
|
-
* LICENSE file in the root directory of this source tree.
|
|
8
|
-
*/
|
|
9
1
|
'use client'
|
|
10
2
|
|
|
11
3
|
import { XIcon } from "@windrun-huaiin/base-ui/icons"
|
|
@@ -1,21 +0,0 @@
|
|
|
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
|
-
|
|
10
|
-
function AdsAlertDialog({ open, onOpenChange, title, description, imgSrc, imgHref, cancelText, onCancel, confirmText, onConfirm, }) {
|
|
11
|
-
const [imgError, setImgError] = React.useState(false);
|
|
12
|
-
return (jsxRuntime.jsx(ui.AlertDialog, { open: open, onOpenChange: onOpenChange, children: jsxRuntime.jsxs(ui.AlertDialogContent, { className: "fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 bg-white dark:bg-neutral-900 rounded-2xl shadow-2xl border border-neutral-200 dark:border-neutral-700 max-w-md w-full min-w-[320px] p-4 flex flex-col items-stretch", children: [jsxRuntime.jsxs("div", { className: "flex flex-row items-center justify-between mb-2", children: [jsxRuntime.jsx(ui.AlertDialogTitle, { asChild: true, children: jsxRuntime.jsxs("div", { className: "flex flex-row items-center gap-1 min-w-0 text-xl font-semibold", children: [jsxRuntime.jsx(icons.InfoIcon, { className: "w-5 h-5" }), jsxRuntime.jsx("span", { className: "truncate", children: title })] }) }), jsxRuntime.jsx("button", { className: "text-neutral-400 hover:text-neutral-700 dark:hover:text-neutral-200 text-xl ml-4", onClick: () => onOpenChange(false), "aria-label": "Close", tabIndex: 0, children: jsxRuntime.jsx(icons.XIcon, { className: "w-5 h-5" }) })] }), jsxRuntime.jsx(ui.AlertDialogDescription, { className: "text-base font-medium text-neutral-800 dark:text-neutral-100 mb-2", children: description }), imgSrc && (jsxRuntime.jsx("div", { className: "w-full max-w-[400px] h-[220px] relative flex items-center justify-center mb-2", children: imgError ? (jsxRuntime.jsxs("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-gray-100 dark:bg-neutral-800 border border-dashed border-neutral-300 dark:border-neutral-700 rounded-lg text-neutral-400 text-sm", children: [jsxRuntime.jsx(icons.ImageOffIcon, { className: "w-12 h-12 mb-2" }), jsxRuntime.jsx("span", { children: "Image loading failed" })] })) : imgHref ? (jsxRuntime.jsx("a", { href: imgHref, target: "_blank", rel: "noopener noreferrer", className: "block w-full h-full", children: jsxRuntime.jsx(Image, { src: imgSrc, alt: "image", fill: true, className: "object-contain rounded-lg", 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: "object-contain rounded-lg", priority: false, placeholder: "empty", unoptimized: true, onError: () => setImgError(true), sizes: "(max-width: 400px) 100vw, 400px" })) })), (cancelText || confirmText) && (jsxRuntime.jsxs("div", { className: "flex justify-end gap-2 mt-2", children: [cancelText && (jsxRuntime.jsx("button", { onClick: () => {
|
|
13
|
-
onOpenChange(false);
|
|
14
|
-
onCancel === null || onCancel === void 0 ? void 0 : onCancel();
|
|
15
|
-
}, className: "px-6 py-2 rounded-lg border border-neutral-300 dark:border-neutral-600 bg-white dark:bg-neutral-800 text-neutral-700 dark:text-neutral-200 font-semibold hover:bg-neutral-100 dark:hover:bg-neutral-700 transition", children: cancelText })), confirmText && (jsxRuntime.jsx(ui.AlertDialogAction, { onClick: () => {
|
|
16
|
-
onOpenChange(false);
|
|
17
|
-
onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm();
|
|
18
|
-
}, className: "px-6 py-2 rounded-lg bg-purple-500 text-white font-semibold hover:bg-purple-600 transition", children: confirmText }))] }))] }) }));
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
exports.AdsAlertDialog = AdsAlertDialog;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
|
-
import { useState } from 'react';
|
|
4
|
-
import Image from 'next/image';
|
|
5
|
-
import { InfoIcon, XIcon, ImageOffIcon } from '@windrun-huaiin/base-ui/icons';
|
|
6
|
-
import { AlertDialog, AlertDialogContent, AlertDialogTitle, AlertDialogDescription, AlertDialogAction } from '@windrun-huaiin/base-ui/ui';
|
|
7
|
-
|
|
8
|
-
function AdsAlertDialog({ open, onOpenChange, title, description, imgSrc, imgHref, cancelText, onCancel, confirmText, onConfirm, }) {
|
|
9
|
-
const [imgError, setImgError] = useState(false);
|
|
10
|
-
return (jsx(AlertDialog, { open: open, onOpenChange: onOpenChange, children: jsxs(AlertDialogContent, { className: "fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 bg-white dark:bg-neutral-900 rounded-2xl shadow-2xl border border-neutral-200 dark:border-neutral-700 max-w-md w-full min-w-[320px] p-4 flex flex-col items-stretch", children: [jsxs("div", { className: "flex flex-row items-center justify-between mb-2", children: [jsx(AlertDialogTitle, { asChild: true, children: jsxs("div", { className: "flex flex-row items-center gap-1 min-w-0 text-xl font-semibold", children: [jsx(InfoIcon, { className: "w-5 h-5" }), jsx("span", { className: "truncate", children: title })] }) }), jsx("button", { className: "text-neutral-400 hover:text-neutral-700 dark:hover:text-neutral-200 text-xl ml-4", onClick: () => onOpenChange(false), "aria-label": "Close", tabIndex: 0, children: jsx(XIcon, { className: "w-5 h-5" }) })] }), jsx(AlertDialogDescription, { className: "text-base font-medium text-neutral-800 dark:text-neutral-100 mb-2", children: description }), imgSrc && (jsx("div", { className: "w-full max-w-[400px] h-[220px] relative flex items-center justify-center mb-2", children: imgError ? (jsxs("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-gray-100 dark:bg-neutral-800 border border-dashed border-neutral-300 dark:border-neutral-700 rounded-lg text-neutral-400 text-sm", children: [jsx(ImageOffIcon, { className: "w-12 h-12 mb-2" }), jsx("span", { children: "Image loading failed" })] })) : imgHref ? (jsx("a", { href: imgHref, target: "_blank", rel: "noopener noreferrer", className: "block w-full h-full", children: jsx(Image, { src: imgSrc, alt: "image", fill: true, className: "object-contain rounded-lg", priority: false, placeholder: "empty", unoptimized: true, onError: () => setImgError(true), sizes: "(max-width: 400px) 100vw, 400px" }) })) : (jsx(Image, { src: imgSrc, alt: "image", fill: true, className: "object-contain rounded-lg", priority: false, placeholder: "empty", unoptimized: true, onError: () => setImgError(true), sizes: "(max-width: 400px) 100vw, 400px" })) })), (cancelText || confirmText) && (jsxs("div", { className: "flex justify-end gap-2 mt-2", children: [cancelText && (jsx("button", { onClick: () => {
|
|
11
|
-
onOpenChange(false);
|
|
12
|
-
onCancel === null || onCancel === void 0 ? void 0 : onCancel();
|
|
13
|
-
}, className: "px-6 py-2 rounded-lg border border-neutral-300 dark:border-neutral-600 bg-white dark:bg-neutral-800 text-neutral-700 dark:text-neutral-200 font-semibold hover:bg-neutral-100 dark:hover:bg-neutral-700 transition", children: cancelText })), confirmText && (jsx(AlertDialogAction, { onClick: () => {
|
|
14
|
-
onOpenChange(false);
|
|
15
|
-
onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm();
|
|
16
|
-
}, className: "px-6 py-2 rounded-lg bg-purple-500 text-white font-semibold hover:bg-purple-600 transition", children: confirmText }))] }))] }) }));
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export { AdsAlertDialog };
|