@pnkx-lib/ui 1.9.238 → 1.9.240

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,92 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { useState } from 'react';
4
+ import { Spin, Upload, message } from 'antd';
5
+ import { C as Controller } from '../chunks/index.esm-o4O8pXMN.js';
6
+ import { I as Icon, _ as _extends } from '../chunks/AntdIcon-ZIq9SabE.js';
7
+
8
+ // This icon file is generated automatically.
9
+ var InboxOutlined$1 = { "icon": { "tag": "svg", "attrs": { "viewBox": "0 0 1024 1024", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M885.2 446.3l-.2-.8-112.2-285.1c-5-16.1-19.9-27.2-36.8-27.2H281.2c-17 0-32.1 11.3-36.9 27.6L139.4 443l-.3.7-.2.8c-1.3 4.9-1.7 9.9-1 14.8-.1 1.6-.2 3.2-.2 4.8V830a60.9 60.9 0 0060.8 60.8h627.2c33.5 0 60.8-27.3 60.9-60.8V464.1c0-1.3 0-2.6-.1-3.7.4-4.9 0-9.6-1.3-14.1zm-295.8-43l-.3 15.7c-.8 44.9-31.8 75.1-77.1 75.1-22.1 0-41.1-7.1-54.8-20.6S436 441.2 435.6 419l-.3-15.7H229.5L309 210h399.2l81.7 193.3H589.4zm-375 76.8h157.3c24.3 57.1 76 90.8 140.4 90.8 33.7 0 65-9.4 90.3-27.2 22.2-15.6 39.5-37.4 50.7-63.6h156.5V814H214.4V480.1z" } }] }, "name": "inbox", "theme": "outlined" };
10
+
11
+ var InboxOutlined = function InboxOutlined(props, ref) {
12
+ return /*#__PURE__*/React.createElement(Icon, _extends({}, props, {
13
+ ref: ref,
14
+ icon: InboxOutlined$1
15
+ }));
16
+ };
17
+
18
+ /**![inbox](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg4NS4yIDQ0Ni4zbC0uMi0uOC0xMTIuMi0yODUuMWMtNS0xNi4xLTE5LjktMjcuMi0zNi44LTI3LjJIMjgxLjJjLTE3IDAtMzIuMSAxMS4zLTM2LjkgMjcuNkwxMzkuNCA0NDNsLS4zLjctLjIuOGMtMS4zIDQuOS0xLjcgOS45LTEgMTQuOC0uMSAxLjYtLjIgMy4yLS4yIDQuOFY4MzBhNjAuOSA2MC45IDAgMDA2MC44IDYwLjhoNjI3LjJjMzMuNSAwIDYwLjgtMjcuMyA2MC45LTYwLjhWNDY0LjFjMC0xLjMgMC0yLjYtLjEtMy43LjQtNC45IDAtOS42LTEuMy0xNC4xem0tMjk1LjgtNDNsLS4zIDE1LjdjLS44IDQ0LjktMzEuOCA3NS4xLTc3LjEgNzUuMS0yMi4xIDAtNDEuMS03LjEtNTQuOC0yMC42UzQzNiA0NDEuMiA0MzUuNiA0MTlsLS4zLTE1LjdIMjI5LjVMMzA5IDIxMGgzOTkuMmw4MS43IDE5My4zSDU4OS40em0tMzc1IDc2LjhoMTU3LjNjMjQuMyA1Ny4xIDc2IDkwLjggMTQwLjQgOTAuOCAzMy43IDAgNjUtOS40IDkwLjMtMjcuMiAyMi4yLTE1LjYgMzkuNS0zNy40IDUwLjctNjMuNmgxNTYuNVY4MTRIMjE0LjRWNDgwLjF6IiAvPjwvc3ZnPg==) */
19
+ var RefIcon = /*#__PURE__*/React.forwardRef(InboxOutlined);
20
+ if (process.env.NODE_ENV !== 'production') {
21
+ RefIcon.displayName = 'InboxOutlined';
22
+ }
23
+
24
+ const { Dragger } = Upload;
25
+ const UploadMultiple = ({
26
+ name,
27
+ control,
28
+ title,
29
+ content
30
+ }) => {
31
+ const [isLoading, setIsLoading] = useState(false);
32
+ const createUploadProps = (value, onChange) => ({
33
+ multiple: true,
34
+ listType: "picture",
35
+ showUploadList: true,
36
+ fileList: value,
37
+ customRequest: async ({ file, onSuccess, onError }) => {
38
+ const formData = new FormData();
39
+ formData.append("file", file);
40
+ formData.append("upload_preset", "ml_default");
41
+ setIsLoading(true);
42
+ try {
43
+ const res = await fetch(
44
+ "https://api.cloudinary.com/v1_1/dhtrzmzd3/image/upload",
45
+ {
46
+ method: "POST",
47
+ body: formData
48
+ }
49
+ );
50
+ const data = await res.json();
51
+ const newFile = {
52
+ uid: data.asset_id || Date.now().toString(),
53
+ name: data.original_filename,
54
+ url: data.secure_url
55
+ };
56
+ onChange([...value || [], newFile]);
57
+ onSuccess?.(data, new XMLHttpRequest());
58
+ message.success("Tải ảnh lên thành công.");
59
+ } catch (err) {
60
+ onError?.(err);
61
+ message.error("Tải ảnh lên thất bại.");
62
+ } finally {
63
+ setIsLoading(false);
64
+ }
65
+ },
66
+ onPreview: (file) => {
67
+ window.open(file.url, "_blank");
68
+ },
69
+ onRemove: (file) => {
70
+ const newList = (value || []).filter((item) => item.uid !== file.uid);
71
+ onChange(newList);
72
+ }
73
+ });
74
+ return /* @__PURE__ */ jsx(
75
+ Controller,
76
+ {
77
+ name,
78
+ control,
79
+ render: ({ field }) => {
80
+ const { value, onChange } = field;
81
+ const props = createUploadProps(value || [], onChange);
82
+ return /* @__PURE__ */ jsx(Spin, { spinning: isLoading, tip: "Đang tải", children: /* @__PURE__ */ jsxs(Dragger, { ...props, children: [
83
+ /* @__PURE__ */ jsx("p", { className: "ant-upload-drag-icon", children: /* @__PURE__ */ jsx(RefIcon, {}) }),
84
+ /* @__PURE__ */ jsx("p", { className: "ant-upload-text", children: title }),
85
+ /* @__PURE__ */ jsx("p", { className: "ant-upload-hint", children: content })
86
+ ] }) });
87
+ }
88
+ }
89
+ );
90
+ };
91
+
92
+ export { UploadMultiple };
package/es/ui/index.js CHANGED
@@ -68,6 +68,7 @@ export { Card } from './Card.js';
68
68
  export { ConfigProvider } from './ConfigProvider.js';
69
69
  export { PageNotFound } from './PageNotFound.js';
70
70
  export { UploadImage } from './UploadImage.js';
71
+ export { UploadMultiple } from './UploadMultiple.js';
71
72
  export { T as TINY_API } from '../chunks/common-CocKiHtC.js';
72
73
 
73
74
  const SettingColumnItem = ({ lable, name, control }) => {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pnkx-lib/ui",
3
3
  "private": false,
4
- "version": "1.9.238",
4
+ "version": "1.9.240",
5
5
  "type": "module",
6
6
  "main": "./es/index.js",
7
7
  "module": "./es/index.js",
@@ -117,13 +117,13 @@
117
117
  ]
118
118
  },
119
119
  "peerDependencies": {
120
+ "@pnkx-lib/core": "^1.1.77",
120
121
  "@tailwindcss/vite": "^4.0.17",
121
122
  "antd": "^5.24.4",
122
123
  "react": "^18.3.1",
123
124
  "react-dom": "^18.3.1",
124
125
  "react-router": "^7.6.0",
125
- "tailwindcss": "^4.0.17",
126
- "@pnkx-lib/core": "^1.1.71"
126
+ "tailwindcss": "^4.0.17"
127
127
  },
128
128
  "dependencies": {
129
129
  "@ant-design/icons": "^5.6.1",
@@ -135,7 +135,7 @@
135
135
  "@headlessui/react": "^2.2.2",
136
136
  "@heroicons/react": "^2.2.0",
137
137
  "@hookform/resolvers": "^5.0.1",
138
- "@pnkx-lib/icon": "^0.0.35",
138
+ "@pnkx-lib/icon": "^0.0.39",
139
139
  "@tailwindcss/cli": "^4.1.6",
140
140
  "@tanstack/react-query": "^5.80.7",
141
141
  "@tinymce/miniature": "^6.0.0",
@@ -16,7 +16,7 @@ export interface SidebarProps {
16
16
  userInfo?: {
17
17
  avatar: string;
18
18
  name: string;
19
- email: string;
19
+ email?: string;
20
20
  };
21
21
  }
22
22
  export declare const Sidebar: ({ children, menu, userInfo }: SidebarProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { Control } from 'react-hook-form';
2
+ export interface UploadMultipleProps {
3
+ name: string;
4
+ control: Control | any;
5
+ title?: string;
6
+ content?: string;
7
+ }
8
+ export declare const UploadMultiple: ({ name, control, title, content, }: UploadMultipleProps) => import("react/jsx-runtime").JSX.Element;
@@ -58,3 +58,4 @@ export * from './Card';
58
58
  export * from './ConfigProvider';
59
59
  export * from './PageNotFound';
60
60
  export * from './UploadImage';
61
+ export * from './UploadMultiple';
@@ -0,0 +1,2 @@
1
+ export * from '../components/ui/UploadMultiple'
2
+ export {}