bj-web-components 0.1.7

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/dist/web.d.ts ADDED
@@ -0,0 +1,434 @@
1
+ import { CSSProperties } from 'react';
2
+ import { ForwardRefExoticComponent } from 'react';
3
+ import { InputHTMLAttributes } from 'react';
4
+ import { JSX } from 'react/jsx-runtime';
5
+ import { ReactNode } from 'react';
6
+ import { RefAttributes } from 'react';
7
+
8
+ declare interface BaseTooltipProps {
9
+ placement?: TooltipPlacement;
10
+ className?: string;
11
+ style?: CSSProperties;
12
+ /** 自定义弹层挂载容器,默认 document.body */
13
+ getPopupContainer?: () => HTMLElement;
14
+ }
15
+
16
+ export declare function BuCategoryDropdown({ data, value, onChange, placeholder, disabled, maxVisible, className, style, getPopupContainer, }: BuCategoryDropdownProps): JSX.Element;
17
+
18
+ export declare interface BuCategoryDropdownProps {
19
+ /** 分类树数据 */
20
+ data: CategoryItem[];
21
+ /** 当前选中路径,数组索引对应层级 */
22
+ value?: string[];
23
+ /** 选中回调,返回新路径和对应的节点数组 */
24
+ onChange?: (value: string[], path: CategoryItem[]) => void;
25
+ /** 触发按钮占位文字 */
26
+ placeholder?: string;
27
+ /** 是否禁用整个组件 */
28
+ disabled?: boolean;
29
+ /** 每列最多显示几项,超出后出现滚动条,默认 6 */
30
+ maxVisible?: number;
31
+ className?: string;
32
+ style?: CSSProperties;
33
+ /** 自定义下拉面板挂载容器,返回目标 DOM 元素。默认挂载到 document.body */
34
+ getPopupContainer?: () => HTMLElement;
35
+ }
36
+
37
+ export declare const BuEmptyInputBox: ForwardRefExoticComponent<BuEmptyInputBoxProps & RefAttributes<HTMLInputElement>>;
38
+
39
+ export declare type BuEmptyInputBoxLang = 'zh' | 'en';
40
+
41
+ export declare type BuEmptyInputBoxMode = 'single' | 'bilingual';
42
+
43
+ export declare interface BuEmptyInputBoxProps {
44
+ /** 单语 / 双语模式 */
45
+ mode?: BuEmptyInputBoxMode;
46
+ /** 双语模式下当前激活的语言 */
47
+ activeLang?: BuEmptyInputBoxLang;
48
+ onLangChange?: (lang: BuEmptyInputBoxLang) => void;
49
+ /** 受控值,与 antd Form 兼容 */
50
+ value?: string;
51
+ onChange?: (value: string) => void;
52
+ placeholder?: string;
53
+ maxLength?: number;
54
+ /** 错误状态 */
55
+ error?: boolean;
56
+ disabled?: boolean;
57
+ /** 点击删除按钮回调(传入时显示删除按钮) */
58
+ onDelete?: () => void;
59
+ /** Override display labels for i18n support */
60
+ labels?: {
61
+ zh?: string;
62
+ en?: string;
63
+ };
64
+ id?: string;
65
+ className?: string;
66
+ style?: CSSProperties;
67
+ }
68
+
69
+ export declare const BuInput: ForwardRefExoticComponent<BuInputProps & RefAttributes<HTMLInputElement | HTMLTextAreaElement>>;
70
+
71
+ export declare type BuInputLang = 'zh' | 'en';
72
+
73
+ export declare type BuInputMode = 'single' | 'bilingual';
74
+
75
+ export declare interface BuInputProps {
76
+ /** 输入框类型:input(单行)| textarea(多行) */
77
+ type?: BuInputType;
78
+ /** 单语 / 双语模式 */
79
+ mode?: BuInputMode;
80
+ /** 双语模式下当前激活的语言 */
81
+ activeLang?: BuInputLang;
82
+ onLangChange?: (lang: BuInputLang) => void;
83
+ /** 受控值,与 antd Form 兼容 */
84
+ value?: string;
85
+ onChange?: (value: string) => void;
86
+ /** 标签文字 */
87
+ label?: string;
88
+ /** 是否必填(label 前显示红色 *) */
89
+ required?: boolean;
90
+ placeholder?: string;
91
+ /** 最大字符数,配合 showCount 使用 */
92
+ maxLength?: number;
93
+ /** 是否显示字符计数,双语模式下始终显示 */
94
+ showCount?: boolean;
95
+ /** 错误状态:无值时 placeholder 变红;有值时显示 errorMessage */
96
+ error?: boolean;
97
+ /** 错误提示文字(有输入值 + error=true 时显示在输入框下方) */
98
+ errorMessage?: string;
99
+ disabled?: boolean;
100
+ /** 数字步进器最小值(type='number' 时生效) */
101
+ min?: number;
102
+ /** 数字步进器最大值(type='number' 时生效) */
103
+ max?: number;
104
+ /** 数字步进器步长(type='number' 时生效) */
105
+ step?: number;
106
+ /** 输入框左侧 icon,如拖拽把手 */
107
+ leftIcon?: ReactNode;
108
+ /** 输入框右侧 icon,如删除按钮 */
109
+ rightIcon?: ReactNode;
110
+ /** 自定义语言切换按钮,替换内置的中文/EN 按钮,双语模式下生效 */
111
+ langToggle?: ReactNode;
112
+ /** 正在翻译中状态,显示 loading 指示器 */
113
+ translating?: boolean;
114
+ /** 翻译完成状态,显示对勾 */
115
+ translated?: boolean;
116
+ onBlur?: () => void;
117
+ /** Override display labels for i18n support */
118
+ labels?: {
119
+ zh?: string;
120
+ en?: string;
121
+ };
122
+ id?: string;
123
+ className?: string;
124
+ style?: CSSProperties;
125
+ }
126
+
127
+ export declare type BuInputType = 'input' | 'textarea' | 'number';
128
+
129
+ export declare function BuModal({ open, title, mode, children, okText, cancelText, onOk, onCancel, onClose, activeLang, onLangChange, labels, hint, confirmLoading, width, className, style, }: BuModalProps): JSX.Element | null;
130
+
131
+ export declare interface BuModalProps {
132
+ /** 是否显示弹窗 */
133
+ open?: boolean;
134
+ /** 弹窗标题 */
135
+ title?: string;
136
+ /** 弹窗模式:standard 双按钮 | bilingual 双语双按钮 | single 单按钮居中 */
137
+ mode?: ModalMode;
138
+ /** 弹窗内容 */
139
+ children?: ReactNode;
140
+ /** 确认按钮文字 */
141
+ okText?: string;
142
+ /** 取消按钮文字(standard / bilingual 模式生效) */
143
+ cancelText?: string;
144
+ /** 确认回调 */
145
+ onOk?: () => void;
146
+ /** 取消回调 */
147
+ onCancel?: () => void;
148
+ /** 关闭回调(点击 × 或遮罩) */
149
+ onClose?: () => void;
150
+ /** bilingual 模式下当前激活语言 */
151
+ activeLang?: ModalLang;
152
+ /** bilingual 模式下语言切换回调 */
153
+ onLangChange?: (lang: ModalLang) => void;
154
+ /** 按钮上方的提示文字,12px #999 */
155
+ hint?: string;
156
+ /** Override display labels for i18n support */
157
+ labels?: {
158
+ zh?: string;
159
+ en?: string;
160
+ };
161
+ /** 确认按钮加载中状态 */
162
+ confirmLoading?: boolean;
163
+ /** 弹窗宽度,默认 480px,作用于内层白框 */
164
+ width?: number | string;
165
+ /** 自定义类名,挂在最外层遮罩上(整个 modal) */
166
+ className?: string;
167
+ /** 自定义样式,作用于内层白框 */
168
+ style?: CSSProperties;
169
+ }
170
+
171
+ export declare function BuProductField({ options, value, onChange, placeholder, emptyText, onManageField, multiple, showSearch, showSort, addButtonText, onAdd, labels, className, style, getPopupContainer, }: BuProductFieldProps): JSX.Element;
172
+
173
+ export declare interface BuProductFieldProps {
174
+ /** 可选项列表 */
175
+ options?: ProductFieldOption[];
176
+ /** 当前选中值(受控) */
177
+ value?: string[];
178
+ /** 选中变化回调 */
179
+ onChange?: (values: string[]) => void;
180
+ /** 触发器占位文字 */
181
+ placeholder?: string;
182
+ /** 无数据主文案 */
183
+ emptyText?: string;
184
+ /** 点击"管理字段"的回调 */
185
+ onManageField?: () => void;
186
+ /** 单选模式(默认多选) */
187
+ multiple?: boolean;
188
+ /** 是否显示搜索框(默认 true) */
189
+ showSearch?: boolean;
190
+ /** 是否显示排序按钮(默认 true) */
191
+ showSort?: boolean;
192
+ /** 底部新增区域内容(字符串或 React 元素),不传则不显示 */
193
+ addButtonText?: ReactNode;
194
+ /** 点击新增按钮的回调 */
195
+ onAdd?: () => void;
196
+ /** Override display labels for i18n support */
197
+ labels?: {
198
+ searchPlaceholder?: string;
199
+ sortDefault?: string;
200
+ sortAsc?: string;
201
+ sortDesc?: string;
202
+ noMatchText?: string;
203
+ manageFieldPre?: string;
204
+ manageFieldLink?: string;
205
+ manageFieldPost?: string;
206
+ };
207
+ className?: string;
208
+ style?: CSSProperties;
209
+ /** 自定义下拉面板挂载容器,返回目标 DOM 元素。默认挂载到 document.body */
210
+ getPopupContainer?: () => HTMLElement;
211
+ }
212
+
213
+ export declare const BuSwitch: {
214
+ ({ checked: controlledChecked, defaultChecked, onChange, disabled, loading, checkedChildren, unCheckedChildren, theme, activeColor, inactiveColor, className, style, }: BuSwitchProps): JSX.Element;
215
+ displayName: string;
216
+ };
217
+
218
+ export declare interface BuSwitchProps {
219
+ /** 是否选中(受控) */
220
+ checked?: boolean;
221
+ /** 初始是否选中(非受控) */
222
+ defaultChecked?: boolean;
223
+ /** 变化回调 */
224
+ onChange?: (checked: boolean) => void;
225
+ /** 是否禁用 */
226
+ disabled?: boolean;
227
+ /** 加载中 */
228
+ loading?: boolean;
229
+ /** 选中时的内容(显示在开关内部右侧) */
230
+ checkedChildren?: ReactNode;
231
+ /** 未选中时的内容(显示在开关内部左侧) */
232
+ unCheckedChildren?: ReactNode;
233
+ /** 颜色主题:light=黑灰系, dark=品牌红系 */
234
+ theme?: BuSwitchTheme;
235
+ /** 自定义选中颜色,覆盖 theme 默认色 */
236
+ activeColor?: string;
237
+ /** 自定义未选中颜色,覆盖 theme 默认色 */
238
+ inactiveColor?: string;
239
+ /** 自定义类名 */
240
+ className?: string;
241
+ /** 自定义样式 */
242
+ style?: CSSProperties;
243
+ }
244
+
245
+ /** 开关颜色主题 */
246
+ export declare type BuSwitchTheme = 'light' | 'dark';
247
+
248
+ export declare interface CategoryItem {
249
+ /** 唯一标识 */
250
+ value: string;
251
+ /** 显示文字 */
252
+ label: string;
253
+ /** 是否禁用(分类未创建好时不可选) */
254
+ disabled?: boolean;
255
+ /** 子分类 */
256
+ children?: CategoryItem[];
257
+ }
258
+
259
+ export declare function ConfirmTooltip({ placement, title, okText, cancelText, onOk, onCancel, className, style, }: ConfirmTooltipProps): JSX.Element;
260
+
261
+ export declare interface ConfirmTooltipProps extends BaseTooltipProps {
262
+ title?: string;
263
+ okText?: string;
264
+ cancelText?: string;
265
+ onOk?: () => void;
266
+ onCancel?: () => void;
267
+ }
268
+
269
+ export declare function ContentTooltip({ placement, content, variant, className, style, }: ContentTooltipProps): JSX.Element;
270
+
271
+ export declare interface ContentTooltipProps extends BaseTooltipProps {
272
+ content?: string;
273
+ variant?: TooltipVariant;
274
+ }
275
+
276
+ export declare function FileCard(props: FileCardProps): JSX.Element;
277
+
278
+ export declare interface FileCardProps {
279
+ /** 文件名 */
280
+ fileName: string;
281
+ /** 文件类型 */
282
+ fileType: FileType;
283
+ /** 文件 URL(image 类型可展示缩略图) */
284
+ fileUrl?: string;
285
+ /** 自定义类名 */
286
+ className?: string;
287
+ /** 自定义样式 */
288
+ style?: CSSProperties;
289
+ /** 删除回调 */
290
+ onDelete?: () => void;
291
+ /** 修改文件名提交回调 */
292
+ onRename?: (newName: string) => void | Promise<void>;
293
+ /** 预览点击回调 */
294
+ onPreview?: () => void;
295
+ }
296
+
297
+ export declare type FileType = 'pdf' | 'image' | 'doc' | 'docx' | 'xls' | 'xlsx' | 'ppt' | 'pptx' | 'zip' | 'rar' | 'txt' | 'other';
298
+
299
+ export declare type ModalLang = 'zh' | 'en';
300
+
301
+ export declare type ModalMode = 'standard' | 'bilingual' | 'single';
302
+
303
+ export declare const Pagination: (props: PaginationProps) => JSX.Element | null;
304
+
305
+ export declare type PaginationAlign = 'start' | 'center' | 'end';
306
+
307
+ export declare interface PaginationProps {
308
+ /** 国际化方法,默认返回原参数 */
309
+ t?: (text: string) => string;
310
+ current?: number;
311
+ defaultCurrent?: number;
312
+ pageSize?: number;
313
+ defaultPageSize?: number;
314
+ total?: number;
315
+ onChange?: (page: number, pageSize: number) => void;
316
+ onShowSizeChange?: (current: number, size: number) => void;
317
+ showSizeChanger?: boolean;
318
+ showQuickJumper?: boolean | {
319
+ goButton?: ReactNode;
320
+ };
321
+ pageSizeOptions?: number[];
322
+ disabled?: boolean;
323
+ hideOnSinglePage?: boolean;
324
+ showTotal?: boolean | ((total: number, range: [number, number]) => ReactNode);
325
+ size?: PaginationSize;
326
+ align?: PaginationAlign;
327
+ simple?: boolean;
328
+ /** 下拉弹框弹出位置,最高优先级。默认自动检测:底部空间不足时翻转到顶部 */
329
+ popupPlacement?: PopupPlacement;
330
+ className?: string;
331
+ style?: CSSProperties;
332
+ }
333
+
334
+ export declare type PaginationSize = 'small' | 'medium' | 'large';
335
+
336
+ declare type PopupPlacement = 'bottom' | 'top';
337
+
338
+ export declare interface ProductFieldOption {
339
+ /** 选项唯一标识 */
340
+ value: string;
341
+ /** 选项显示内容,支持字符串或 React 元素 */
342
+ label: ReactNode;
343
+ /** 搜索匹配文本,label 为 ReactNode 时必须提供,否则该选项不参与搜索过滤 */
344
+ searchText?: string;
345
+ }
346
+
347
+ export declare function ProgressTooltip({ placement, title, progress, className, style, }: ProgressTooltipProps): JSX.Element;
348
+
349
+ export declare interface ProgressTooltipProps extends BaseTooltipProps {
350
+ title?: string;
351
+ progress?: number;
352
+ }
353
+
354
+ export declare function SkuInputCard({ id, name, onNameChange, mode, activeLang, onLangChange, showBody, error, onDelete, onPreviewImage, onDeleteImage, onUpload, onAssociate, images, labels, inputEvents, className, style, options, optionFilterProp, onSelect, onSearch, open: controlledOpen, onDropdownVisibleChange, }: SkuInputCardProps): JSX.Element;
355
+
356
+ export declare interface SkuInputCardProps {
357
+ /** Drag handle id, for external DnD libraries */
358
+ id?: string;
359
+ /** Product name value */
360
+ name?: string;
361
+ onNameChange?: (value: string) => void;
362
+ /** single: no language toggle; bilingual: show 中文/EN toggle */
363
+ mode?: SkuInputMode;
364
+ /** Active language when mode is bilingual */
365
+ activeLang?: SkuInputLang;
366
+ onLangChange?: (lang: SkuInputLang) => void;
367
+ /** Show/hide the body content area */
368
+ showBody?: boolean;
369
+ /** Error state — red border + tinted input */
370
+ error?: boolean;
371
+ onDelete?: () => void;
372
+ /** Called when user clicks the preview button on an uploaded image */
373
+ onPreviewImage?: (url: string) => void;
374
+ /** Called when user clicks the delete button on an uploaded image */
375
+ onDeleteImage?: (url: string) => void;
376
+ /**
377
+ * Parent-provided upload handler. Receives the selected File and should
378
+ * return a URL string (or Promise<string>) to display the image.
379
+ * If not provided the component manages uploads internally.
380
+ */
381
+ onUpload?: (file: File) => string | Promise<string>;
382
+ /** Called when user clicks "关联图片". Parent is responsible for providing the image URL. */
383
+ onAssociate?: () => void;
384
+ /** Externally managed image list (URLs). Controls displayed images when provided. */
385
+ images?: string[];
386
+ /** Override display labels for i18n support */
387
+ labels?: {
388
+ namePlaceholder?: string;
389
+ uploadLocal?: string;
390
+ associateImage?: string;
391
+ searchPlaceholder?: string;
392
+ notFoundContent?: string;
393
+ };
394
+ /** Input event handlers applied to the name input element */
395
+ inputEvents?: Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'style' | 'className'>;
396
+ className?: string;
397
+ style?: CSSProperties;
398
+ /** Options for the search dropdown. When provided the input shows a dropdown on focus/type. */
399
+ options?: SkuInputOption[];
400
+ /** Custom filter: receives the option and the current input value; return true to show. */
401
+ optionFilterProp?: (option: SkuInputOption, inputValue: string) => boolean;
402
+ /** Called when user selects an option from the dropdown. */
403
+ onSelect?: (value: string, option: SkuInputOption) => void;
404
+ /** Called when input value changes while dropdown is active (for remote search). */
405
+ onSearch?: (value: string) => void;
406
+ /** Whether the dropdown is visible (controlled mode). */
407
+ open?: boolean;
408
+ /** Callback when dropdown visibility changes. */
409
+ onDropdownVisibleChange?: (visible: boolean) => void;
410
+ }
411
+
412
+ export declare type SkuInputLang = 'zh' | 'en';
413
+
414
+ export declare type SkuInputMode = 'single' | 'bilingual';
415
+
416
+ export declare interface SkuInputOption {
417
+ value: string;
418
+ label: ReactNode;
419
+ disabled?: boolean;
420
+ }
421
+
422
+ export declare type TooltipPlacement = 'auto' | 'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft' | 'bottomRight' | 'left' | 'leftTop' | 'leftBottom' | 'right' | 'rightTop' | 'rightBottom';
423
+
424
+ export declare type TooltipVariant = 'default' | 'light' | 'bordered' | 'tinted';
425
+
426
+ export declare const TooltipWrapper: ForwardRefExoticComponent<TooltipWrapperProps & RefAttributes<HTMLDivElement>>;
427
+
428
+ export declare interface TooltipWrapperProps {
429
+ children: React.ReactNode;
430
+ style?: CSSProperties;
431
+ className?: string;
432
+ }
433
+
434
+ export { }
package/dist/web.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./Switch-4R9E-bDk.js");exports.BuCategoryDropdown=o.BuCategoryDropdown;exports.BuEmptyInputBox=o.BuEmptyInputBox;exports.BuInput=o.BuInput;exports.BuModal=o.BuModal;exports.BuProductField=o.BuProductField;exports.BuSwitch=o.BuSwitch;exports.ConfirmTooltip=o.ConfirmTooltip;exports.ContentTooltip=o.ContentTooltip;exports.FileCard=o.FileCard;exports.Pagination=o.Pagination;exports.ProgressTooltip=o.ProgressTooltip;exports.SkuInputCard=o.SkuInputCard;exports.TooltipWrapper=o.TooltipWrapper;
package/dist/web.mjs ADDED
@@ -0,0 +1,16 @@
1
+ import { B as s, a as t, b as p, c as r, d as u, e as i, C as n, f as e, F as B, P as d, g as l, S as C, T } from "./Switch-D6dAcrxq.mjs";
2
+ export {
3
+ s as BuCategoryDropdown,
4
+ t as BuEmptyInputBox,
5
+ p as BuInput,
6
+ r as BuModal,
7
+ u as BuProductField,
8
+ i as BuSwitch,
9
+ n as ConfirmTooltip,
10
+ e as ContentTooltip,
11
+ B as FileCard,
12
+ d as Pagination,
13
+ l as ProgressTooltip,
14
+ C as SkuInputCard,
15
+ T as TooltipWrapper
16
+ };
@@ -0,0 +1 @@
1
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
package/package.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "bj-web-components",
3
+ "version": "0.1.7",
4
+ "description": "Enterprise UI component library for Web, Mobile, and Mini-app platforms",
5
+ "keywords": [
6
+ "react",
7
+ "ui",
8
+ "component",
9
+ "design-system",
10
+ "web",
11
+ "mobile",
12
+ "miniapp"
13
+ ],
14
+ "author": "hkm-hfrl",
15
+ "license": "MIT",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": ""
19
+ },
20
+ "private": false,
21
+ "main": "./dist/index.js",
22
+ "module": "./dist/index.mjs",
23
+ "types": "./dist/index.d.ts",
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist/index.d.ts",
27
+ "import": "./dist/index.mjs",
28
+ "require": "./dist/index.js"
29
+ },
30
+ "./react": {
31
+ "types": "./dist/react.d.ts",
32
+ "import": "./dist/react.mjs",
33
+ "require": "./dist/react.js"
34
+ },
35
+ "./web": {
36
+ "types": "./dist/web.d.ts",
37
+ "import": "./dist/web.mjs",
38
+ "require": "./dist/web.js"
39
+ },
40
+ "./mobile": {
41
+ "types": "./dist/mobile.d.ts",
42
+ "import": "./dist/mobile.mjs",
43
+ "require": "./dist/mobile.js"
44
+ },
45
+ "./miniapp": {
46
+ "types": "./dist/miniapp.d.ts",
47
+ "import": "./dist/miniapp.mjs",
48
+ "require": "./dist/miniapp.js"
49
+ },
50
+ "./shared": {
51
+ "types": "./dist/shared.d.ts",
52
+ "import": "./dist/shared.mjs",
53
+ "require": "./dist/shared.js"
54
+ },
55
+ "./style": "./dist/style.css"
56
+ },
57
+ "files": [
58
+ "dist"
59
+ ],
60
+ "scripts": {
61
+ "dev": "vite",
62
+ "build": "vite build",
63
+ "preview": "vite preview",
64
+ "lint": "eslint",
65
+ "build:lib": "vite build --mode lib",
66
+ "build:lib:watch": "vite build --mode lib --watch"
67
+ },
68
+ "peerDependencies": {
69
+ "react": ">=17.0.0",
70
+ "react-dom": ">=17.0.0"
71
+ },
72
+ "devDependencies": {
73
+ "@tailwindcss/postcss": "^4",
74
+ "@types/node": "^20",
75
+ "@types/react": "^19",
76
+ "@types/react-dom": "^19",
77
+ "@vitejs/plugin-react": "^4.3.4",
78
+ "antd": "^6.3.3",
79
+ "eslint": "^9",
80
+ "less": "^4.6.4",
81
+ "lucide-react": "^0.577.0",
82
+ "react": "19.2.3",
83
+ "react-dom": "19.2.3",
84
+ "react-router-dom": "^6.30.3",
85
+ "tailwindcss": "^4",
86
+ "typescript": "^5",
87
+ "vite": "^6.0.7",
88
+ "vite-plugin-dts": "^4.3.0"
89
+ }
90
+ }