@zuixihuanxingnai/react-super-ui 1.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.
@@ -0,0 +1,9 @@
1
+ import { default as React } from 'react';
2
+ export type ButtonProps = React.PropsWithChildren<{
3
+ variant?: 'primary' | 'default' | 'danger';
4
+ size?: 'small' | 'middle' | 'large';
5
+ loading?: boolean;
6
+ icon?: React.ReactNode;
7
+ block?: boolean;
8
+ }> & React.ButtonHTMLAttributes<HTMLButtonElement>;
9
+ export declare const Button: React.FC<ButtonProps>;
@@ -0,0 +1 @@
1
+ export * from './Button';
@@ -0,0 +1,7 @@
1
+ import { default as React } from 'react';
2
+ export type FormProps = {
3
+ children: React.ReactNode;
4
+ onFinish?: (values: any) => void;
5
+ initialValues?: Record<string, any>;
6
+ };
7
+ export declare const Form: React.FC<FormProps>;
@@ -0,0 +1,16 @@
1
+ import { default as React } from 'react';
2
+ import { Rule } from '../../form-engine';
3
+ type FormControlProps = {
4
+ value?: any;
5
+ onChange?: (e: any) => void;
6
+ onBlur?: (e: any) => void;
7
+ error?: string;
8
+ };
9
+ type FormItemProps = {
10
+ name: string;
11
+ label?: string;
12
+ rules?: Rule[];
13
+ children: React.ReactElement<FormControlProps>;
14
+ };
15
+ export declare const FormItem: React.FC<FormItemProps>;
16
+ export {};
@@ -0,0 +1,14 @@
1
+ type ValidateFunc = () => Promise<boolean>;
2
+ export type FormContextType = {
3
+ values: Record<string, any>;
4
+ errors: Record<string, string>;
5
+ setFieldValue: (name: string, value: any) => void;
6
+ setFieldError: (name: string, error: string) => void;
7
+ registerField: (name: string, validate: ValidateFunc) => void;
8
+ unregisterField: (name: string) => void;
9
+ resetFields: () => void;
10
+ validateFields: () => Promise<boolean>;
11
+ };
12
+ export declare const FormContext: import('react').Context<FormContextType | undefined>;
13
+ export declare const useFormContext: () => FormContextType;
14
+ export {};
@@ -0,0 +1,2 @@
1
+ export { Form } from './Form';
2
+ export { FormItem } from './FormItem';
@@ -0,0 +1,5 @@
1
+ export * from './button';
2
+ export * from './input';
3
+ export * from './form';
4
+ export * from './modal';
5
+ export * from './select';
@@ -0,0 +1,11 @@
1
+ import { default as React } from 'react';
2
+ export type InputProps = {
3
+ label?: string;
4
+ errorMessage?: string;
5
+ error?: boolean;
6
+ size?: 'small' | 'middle' | 'large';
7
+ prefix?: React.ReactNode;
8
+ suffix?: React.ReactNode;
9
+ clearable?: boolean;
10
+ } & Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>;
11
+ export declare const Input: React.FC<InputProps>;
@@ -0,0 +1 @@
1
+ export * from './Input';
@@ -0,0 +1,19 @@
1
+ import { default as React } from 'react';
2
+ export type ModalProps = {
3
+ open: boolean;
4
+ title?: React.ReactNode;
5
+ children?: React.ReactNode;
6
+ footer?: React.ReactNode | null;
7
+ closable?: boolean;
8
+ maskClosable?: boolean;
9
+ mask?: boolean;
10
+ keyboard?: boolean;
11
+ width?: number | string;
12
+ height?: number | string;
13
+ okText?: React.ReactNode;
14
+ cancelText?: React.ReactNode;
15
+ confirmLoading?: boolean;
16
+ onOk?: () => void | Promise<void>;
17
+ onClose?: () => void;
18
+ };
19
+ export declare const Modal: React.FC<ModalProps>;
@@ -0,0 +1,6 @@
1
+ import { ModalProps } from './Modal';
2
+ type ConfirmProps = Omit<ModalProps, 'open' | 'onClose'>;
3
+ export declare function confirm(props: ConfirmProps): {
4
+ destroy: () => void;
5
+ };
6
+ export {};
@@ -0,0 +1,9 @@
1
+ import { Modal } from './Modal';
2
+ import { confirm } from './confirm';
3
+ type ModalType = typeof Modal & {
4
+ confirm: typeof confirm;
5
+ };
6
+ declare const ModalWithConfirm: ModalType;
7
+ export { ModalWithConfirm as Modal };
8
+ export type { ModalProps } from './Modal';
9
+ export { confirm };
@@ -0,0 +1,33 @@
1
+ import { default as React } from 'react';
2
+ export type SelectOption = {
3
+ label: React.ReactNode;
4
+ value: string | number;
5
+ disabled?: boolean;
6
+ };
7
+ export type SelectProps = {
8
+ /**
9
+ * 当前值(受控)
10
+ */
11
+ value?: string | number;
12
+ /**
13
+ * 默认值(非受控)
14
+ */
15
+ defaultValue?: string | number;
16
+ /**
17
+ * 可选项
18
+ */
19
+ options: SelectOption[];
20
+ /**
21
+ * 占位文字
22
+ */
23
+ placeholder?: string;
24
+ /**
25
+ * 是否禁用
26
+ */
27
+ disabled?: boolean;
28
+ /**
29
+ * 值变化
30
+ */
31
+ onChange?: (value: string | number, option: SelectOption) => void;
32
+ };
33
+ export declare const Select: React.FC<SelectProps>;
@@ -0,0 +1 @@
1
+ export * from './Select';
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ .ui-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border-radius:6px;border:none;cursor:pointer;transition:all .2s}.ui-btn.ui-btn-block{width:100%}.ui-btn.is-disabled{cursor:not-allowed;opacity:.6}.ui-btn.is-disabled:hover{background:inherit}.ui-btn.ui-btn-loading{pointer-events:none}.ui-btn .ui-btn-spinner{width:14px;height:14px;border:2px solid #ccc;border-top-color:transparent;border-radius:50%;animation:spin .6s linear infinite}.ui-btn-default{background:#fff;color:#333;border:1px solid #dcdfe6}.ui-btn-default:hover{background:#f5f7fa}.ui-btn-default:active{background:#e6e8eb}.ui-btn-primary{background:#1677ff;color:#fff}.ui-btn-primary:hover{background:#4096ff}.ui-btn-primary:active{background:#0958d9}.ui-btn-danger{background:#ff4d4f;color:#fff}.ui-btn-danger:hover{background:#ff7875}.ui-btn-danger:active{background:#d9363e}.ui-btn-small{height:28px;padding:0 10px;font-size:12px;width:100px}.ui-btn-middle{height:36px;padding:0 16px;font-size:14px;width:200px}.ui-btn-large{height:44px;padding:0 20px;font-size:16px;width:250px}@keyframes spin{to{transform:rotate(360deg)}}.ui-input-wrapper{margin:0 auto;display:inline-flex;align-items:center;width:100%;border:1px solid #dcdfe6;border-radius:6px;padding:0 8px;background:#fff;transition:all .2s}.ui-input-wrapper:focus-within{border-color:#1677ff}.ui-input-wrapper.is-error{border-color:#ff4d4f}.ui-input-wrapper.is-disabled{background:#f5f5f5;cursor:not-allowed}.ui-input{flex:1;border:none;outline:none;font-size:14px;background:transparent}.ui-input-prefix,.ui-input-suffix{color:#999;margin:0 4px}.ui-input-clear{cursor:pointer;margin-left:4px;color:#999}.ui-input-clear:hover{color:#333}.ui-input-small{height:28px;font-size:12px}.ui-input-middle{height:36px}.ui-input-large{height:44px;font-size:16px}.ui-form-container{margin:0 auto 16px;display:flex;flex-direction:column;gap:20px;width:800px}.ui-form-label{font-size:14px;color:#333}.ui-form-error{font-size:12px;color:#ff4d4f}.ui-form-item.is-error .ui-input-wrapper{border-color:#ff4d4f}.ui-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:24px;background:#00000073;animation:ui-modal-fade-in .2s ease}.ui-modal{width:100%;max-width:1600px;height:100%;max-height:1000px;background:#fff;border-radius:12px;overflow:hidden;box-shadow:0 8px 24px #00000026;animation:ui-modal-zoom-in .2s ease;display:flex;flex-direction:column;justify-content:space-between}.ui-modal-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid #f0f0f0}.ui-modal-title{margin:0;font-size:16px;font-weight:600;color:#1f1f1f;line-height:1.5}.ui-modal-close{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:6px;background:transparent;cursor:pointer;font-size:18px;color:#666;transition:all .2s}.ui-modal-close:hover{background:#f2f3f5;color:#000}.ui-modal-body{padding:24px;font-size:14px;line-height:1.6;color:#333}.ui-modal-footer{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px 24px;border-top:1px solid #f0f0f0}.ui-modal-btn{padding:6px 16px;border-radius:6px;font-size:14px;cursor:pointer;transition:all .2s;border:1px solid transparent}.ui-modal-btn-default{border-color:#d9d9d9;background:#fff;color:#333}.ui-modal-btn-primary{border-color:#1677ff;background:#1677ff;color:#fff}.ui-modal-btn-default:hover{border-color:#1677ff;color:#1677ff}.ui-modal-btn-primary:hover{background:#4096ff;border-color:#4096ff}@keyframes ui-modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes ui-modal-zoom-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}.ui-select{position:relative;width:220px;font-size:14px}.ui-select-selector{display:flex;align-items:center;justify-content:space-between;height:36px;padding:0 12px;border:1px solid #d9d9d9;border-radius:6px;background:#fff;cursor:pointer;transition:all .2s}.ui-select-selector:hover{border-color:#4096ff}.ui-select.is-open .ui-select-selector{border-color:#1677ff;box-shadow:0 0 0 2px #1677ff26}.ui-select-value{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ui-select-value.is-placeholder{color:#bfbfbf}.ui-select-arrow{margin-left:8px;font-size:12px;color:#999;transition:transform .2s}.ui-select.is-open .ui-select-arrow{transform:rotate(180deg)}.ui-select-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:1000;background:#fff;border:1px solid #f0f0f0;border-radius:8px;box-shadow:0 6px 16px #00000014,0 12px 24px #0000001f;padding:4px;transform-origin:top;animation:ui-select-dropdown-enter .4s ease}.ui-select-option{padding:8px 12px;border-radius:6px;cursor:pointer;transition:all .4s}.ui-select-option:hover{background:#f5f5f5}.ui-select-option.is-selected{background:#e6f4ff;color:#1677ff;font-weight:500}.ui-select-option.is-disabled{color:#bfbfbf;cursor:not-allowed}.ui-select-option.is-disabled:hover{background:transparent}.ui-select.is-disabled .ui-select-selector{background:#f5f5f5;color:#bfbfbf;cursor:not-allowed}.ui-select.is-disabled .ui-select-selector:hover{border-color:#d9d9d9;box-shadow:none}@keyframes ui-select-dropdown-enter{0%{opacity:0;transform:scaleY(.8) translateY(-4px)}to{opacity:1;transform:scaleY(1) translateY(0)}}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@zuixihuanxingnai/react-super-ui",
3
+ "version": "1.0.0",
4
+ "description": "A React UI component library",
5
+ "main": "dist/index.cjs.js",
6
+ "module": "dist/index.es.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "sideEffects": [
12
+ "**/*.css",
13
+ "**/*.less"
14
+ ],
15
+ "peerDependencies": {
16
+ "react": "^18 || ^19",
17
+ "react-dom": "^18 || ^19"
18
+ },
19
+ "devDependencies": {
20
+ "@storybook/react-vite": "^10.3.6",
21
+ "@storybook/addon-vitest": "^10.3.6",
22
+ "@vitejs/plugin-react": "^4.0.0",
23
+ "vite": "^5.0.0",
24
+ "vite-plugin-dts": "^5.0.0",
25
+ "typescript": "^6.0.3",
26
+ "vitest": "^4.1.6"
27
+ },
28
+ "scripts": {
29
+ "dev": "vite",
30
+ "build": "vite build",
31
+ "storybook": "storybook dev -p 6006",
32
+ "build-storybook": "storybook build"
33
+ }
34
+ }