ar-design 0.3.3 → 0.3.5

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 (36) hide show
  1. package/dist/assets/css/components/data-display/dnd/dnd.css +62 -40
  2. package/dist/assets/css/components/data-display/kanban-board/styles.css +68 -0
  3. package/dist/assets/css/components/data-display/table/styles.css +30 -0
  4. package/dist/assets/css/components/form/upload/dropzone.css +1 -0
  5. package/dist/components/data-display/diagram/index.d.ts +2 -1
  6. package/dist/components/data-display/diagram/index.js +11 -3
  7. package/dist/components/data-display/dnd/IProps.d.ts +2 -1
  8. package/dist/components/data-display/dnd/index.d.ts +1 -1
  9. package/dist/components/data-display/dnd/index.js +55 -17
  10. package/dist/components/data-display/kanban-board/IProps.d.ts +5 -0
  11. package/dist/components/data-display/kanban-board/IProps.js +1 -0
  12. package/dist/components/data-display/kanban-board/index.d.ts +5 -0
  13. package/dist/components/data-display/kanban-board/index.js +71 -0
  14. package/dist/components/data-display/table/Editable.d.ts +9 -0
  15. package/dist/components/data-display/table/Editable.js +44 -0
  16. package/dist/components/data-display/table/IProps.d.ts +1 -0
  17. package/dist/components/data-display/table/index.js +10 -5
  18. package/dist/components/feedback/popup/index.js +2 -2
  19. package/dist/components/form/date-picker/Props.d.ts +2 -2
  20. package/dist/components/form/date-picker/index.js +2 -2
  21. package/dist/components/form/upload/Buttons.js +2 -2
  22. package/dist/components/form/upload/Dropzone.js +3 -4
  23. package/dist/components/form/upload/List.js +1 -1
  24. package/dist/components/form/upload/Props.d.ts +3 -46
  25. package/dist/components/form/upload/index.js +50 -101
  26. package/dist/components/icons/Compiler.d.ts +2 -2
  27. package/dist/components/icons/Compiler.js +118 -124
  28. package/dist/components/icons/index.d.ts +1 -2
  29. package/dist/components/icons/index.js +2 -2
  30. package/dist/index.d.ts +2 -1
  31. package/dist/index.js +2 -1
  32. package/dist/libs/core/service/Api.js +0 -2
  33. package/dist/libs/infrastructure/shared/Utils.d.ts +1 -2
  34. package/dist/libs/infrastructure/shared/Utils.js +2 -4
  35. package/dist/libs/types/index.d.ts +13 -2
  36. package/package.json +1 -1
@@ -21,7 +21,7 @@ const months = [
21
21
  { value: 10, text: "Kasım" },
22
22
  { value: 11, text: "Aralık" },
23
23
  ];
24
- const DatePicker = ({ onChange, isClock, validation, ...attributes }) => {
24
+ const DatePicker = ({ variant, color, onChange, isClock, validation, ...attributes }) => {
25
25
  // refs
26
26
  const _arCalendar = useRef(null);
27
27
  const _arClock = useRef(null);
@@ -249,7 +249,7 @@ const DatePicker = ({ onChange, isClock, validation, ...attributes }) => {
249
249
  attributes.placeholder && attributes.placeholder.length > 0 && (React.createElement("label", null,
250
250
  validation ? "* " : "",
251
251
  attributes.placeholder)),
252
- React.createElement(Input, { ref: _beginDate, ...attributes, value: DATE.ParseValue(String(attributes.value), isClock), type: isClock ? "datetime-local" : "date", onKeyDown: (event) => {
252
+ React.createElement(Input, { ref: _beginDate, variant: variant, color: color, ...attributes, value: DATE.ParseValue(String(attributes.value), isClock), type: isClock ? "datetime-local" : "date", onKeyDown: (event) => {
253
253
  if (event.code === "Space")
254
254
  event.preventDefault();
255
255
  else if (event.code === "Enter")
@@ -13,13 +13,13 @@ const Buttons = ({ selectedFile, handleFileToBase64, handleFileRemove }) => {
13
13
  a.click();
14
14
  window.URL.revokeObjectURL(url);
15
15
  } }),
16
- selectedFile.type.includes("image") && (React.createElement(Button, { variant: "borderless", color: "blue", type: "button", icon: { element: React.createElement(ARIcon, { variant: "fill", icon: "Eye", fill: "currentColor" }) }, onClick: async (e) => {
16
+ selectedFile.type.includes("image") && (React.createElement(Button, { variant: "borderless", color: "blue", type: "button", icon: { element: React.createElement(ARIcon, { icon: "Eye-Fill", fill: "currentColor" }) }, onClick: async (e) => {
17
17
  e.stopPropagation();
18
18
  const base64 = await handleFileToBase64(selectedFile);
19
19
  const newTab = window.open();
20
20
  newTab?.document.write(`<img src="${base64}" title="${selectedFile.name}" alt="${selectedFile.name}" />`);
21
21
  } })),
22
- React.createElement(Button, { variant: "borderless", color: "red", type: "button", icon: { element: React.createElement(ARIcon, { variant: "fill", icon: "Trash", fill: "currentColor" }) }, onClick: (e) => {
22
+ React.createElement(Button, { variant: "borderless", color: "red", type: "button", icon: { element: React.createElement(ARIcon, { icon: "Trash-Fill", fill: "currentColor" }) }, onClick: (e) => {
23
23
  e.stopPropagation();
24
24
  handleFileRemove(selectedFile);
25
25
  } }))));
@@ -21,15 +21,13 @@ const Dropzone = ({ selectedFiles, validationErrors = [], handleFileToBase64, ha
21
21
  handleSelectFile(file);
22
22
  } },
23
23
  message && (React.createElement("div", { className: "error" },
24
- React.createElement(ARIcon, { variant: "fill", icon: "ExclamationDiamond", fill: "var(--white)" }),
24
+ React.createElement(ARIcon, { icon: "ExclamationDiamond-Fill", fill: "var(--white)" }),
25
25
  React.createElement("span", null, message))),
26
26
  React.createElement(Buttons, { selectedFile: file, handleFileToBase64: handleFileToBase64, handleFileRemove: handleFileRemove }),
27
27
  file.type.includes("image") ? (React.createElement("img", { src: base64 })) : (React.createElement(ARIcon, { icon: fileInfo.icon ?? "Document", fill: "var(--white)", size: 32 }))));
28
28
  };
29
29
  // useEffects
30
30
  useEffect(() => {
31
- if (selectedFiles.length === 0)
32
- return;
33
31
  (async () => {
34
32
  const newMap = {};
35
33
  for (const file of selectedFiles) {
@@ -38,12 +36,13 @@ const Dropzone = ({ selectedFiles, validationErrors = [], handleFileToBase64, ha
38
36
  }
39
37
  setFileBase64Map(newMap);
40
38
  setSelectedFile(selectedFiles[0]);
41
- setSelectedFileBase64(newMap[selectedFiles[0].name]);
39
+ setSelectedFileBase64(newMap[selectedFiles[0]?.name]);
42
40
  })();
43
41
  }, [selectedFiles]);
44
42
  return selectedFile ? (React.createElement(React.Fragment, null,
45
43
  React.createElement("div", { className: "preview" },
46
44
  selectedFile.type.includes("image") ? (React.createElement("img", { src: selectedFileBase64, className: "selected-image" })) : ("Önizleme Yok."),
45
+ React.createElement(Buttons, { selectedFile: selectedFile, handleFileToBase64: handleFileToBase64, handleFileRemove: handleFileRemove }),
47
46
  React.createElement("div", { className: "informations" },
48
47
  React.createElement("span", { className: "file-name" }, selectedFile.name),
49
48
  React.createElement("div", null,
@@ -8,7 +8,7 @@ const List = ({ selectedFiles, validationErrors = [], handleFileToBase64, handle
8
8
  const message = validationErrors.find((v) => v.fileName === selectedFile.name)?.message;
9
9
  return (React.createElement("li", null,
10
10
  message && (React.createElement("div", { className: "error" },
11
- React.createElement(ARIcon, { variant: "fill", icon: "ExclamationDiamond", fill: "var(--white)" }),
11
+ React.createElement(ARIcon, { icon: "ExclamationDiamond-Fill", fill: "var(--white)" }),
12
12
  React.createElement("span", null, message))),
13
13
  React.createElement(Buttons, { selectedFile: selectedFile, handleFileToBase64: handleFileToBase64, handleFileRemove: handleFileRemove }),
14
14
  React.createElement("span", { className: "file-name" }, selectedFile.name),
@@ -14,7 +14,7 @@ interface IMultiple {
14
14
  * />
15
15
  * ```
16
16
  */
17
- file: File[];
17
+ files: File[];
18
18
  /**
19
19
  * Dosya seçimi veya değişikliğinde tetiklenen fonksiyon.
20
20
  *
@@ -33,50 +33,6 @@ interface IMultiple {
33
33
  * ```
34
34
  */
35
35
  onChange: (formData: FormData, files: File[], base64: string[], isInvalidFileExist: boolean) => void;
36
- /**
37
- * Çoklu dosya seçiminin aktif olduğunu belirtir.
38
- *
39
- * Örneğin;
40
- * ```jsx
41
- * <Upload multiple={true} />
42
- * ```
43
- */
44
- multiple: true;
45
- }
46
- interface ISingle {
47
- /**
48
- * Yüklenen tek dosya veya undefined.
49
- *
50
- * Örneğin;
51
- *
52
- * ```jsx
53
- * <Upload file={selectedFile} />
54
- * ```
55
- */
56
- file: File | undefined;
57
- /**
58
- * Dosya seçimi veya değişikliğinde tetiklenen fonksiyon.
59
- *
60
- * @param formData - Dosyayla oluşturulmuş FormData nesnesi veya undefined.
61
- * @param files - Seçilen dosya veya null.
62
- *
63
- * Örneğin;
64
- *
65
- * ```jsx
66
- * <Upload onChange={(formData, file) => console.log(file)} />
67
- * ```
68
- */
69
- onChange: (formData: FormData | undefined, files: File | null, base64: string) => void;
70
- /**
71
- * Çoklu dosya seçiminin devre dışı olduğunu belirtir.
72
- *
73
- * Örneğin;
74
- *
75
- * ```jsx
76
- * <Upload multiple={false} />
77
- * ```
78
- */
79
- multiple?: false;
80
36
  }
81
37
  type Props = {
82
38
  /**
@@ -109,5 +65,6 @@ type Props = {
109
65
  */
110
66
  maxSize?: number;
111
67
  type?: "list" | "dropzone";
112
- } & (IMultiple | ISingle) & IValidation & IDisabled;
68
+ multiple?: boolean;
69
+ } & IMultiple & IValidation & IDisabled;
113
70
  export default Props;
@@ -5,7 +5,7 @@ import { ARIcon } from "../../icons";
5
5
  import Dropzone from "./Dropzone";
6
6
  import Button from "../button";
7
7
  import List from "./List";
8
- const Upload = ({ text, file, onChange, allowedTypes, maxSize, type = "list", multiple }) => {
8
+ const Upload = ({ text, files, onChange, allowedTypes, maxSize, type = "list", multiple }) => {
9
9
  // refs
10
10
  const _firstLoad = useRef(false);
11
11
  const _input = useRef(null);
@@ -15,45 +15,28 @@ const Upload = ({ text, file, onChange, allowedTypes, maxSize, type = "list", mu
15
15
  // variables
16
16
  const [className, setClassName] = useState(["button"]);
17
17
  // states
18
- const [selectedFile, setSelectedFile] = useState(undefined);
19
18
  const [selectedFiles, setSelectedFiles] = useState([]);
20
19
  const [validationErrors, setValidationErrors] = useState([]);
21
20
  // methods
22
21
  const handleFileChange = useCallback((files) => {
23
22
  const _files = Array.from(files ?? []);
24
- if (_files.length > 0) {
25
- if (multiple) {
26
- setSelectedFiles((prev) => {
27
- const previousFileNames = prev.map((f) => f.name);
28
- const newFiles = _files.filter((f) => !previousFileNames.includes(f.name)) ?? [];
29
- return [...prev, ...newFiles];
30
- });
31
- }
32
- else {
33
- setSelectedFile(_files[0]);
34
- }
35
- }
36
- else {
37
- multiple ? setSelectedFiles(file) : setSelectedFile(file);
38
- }
23
+ setSelectedFiles((prev) => {
24
+ const previousFileNames = prev.map((f) => f.name);
25
+ const newFiles = _files.filter((f) => !previousFileNames.includes(f.name)) ?? [];
26
+ return [...prev, ...newFiles];
27
+ });
39
28
  }, []);
40
29
  const handleFileRemove = useCallback((fileToRemove) => {
41
- if (multiple) {
42
- const dataTransfer = new DataTransfer();
43
- setSelectedFiles((prev) => {
44
- const newList = prev.filter((x) => x.name !== fileToRemove.name);
45
- newList.forEach((file) => dataTransfer.items.add(file));
46
- if (_input.current)
47
- _input.current.files = dataTransfer.files;
48
- if (newList.length === 0)
49
- setClassName((prev) => prev.filter((c) => c !== "has-file"));
50
- return newList;
51
- });
52
- }
53
- else {
54
- setSelectedFile(undefined);
55
- setClassName((prev) => prev.filter((c) => c !== "has-file"));
56
- }
30
+ const dataTransfer = new DataTransfer();
31
+ setSelectedFiles((prev) => {
32
+ const newList = prev.filter((x) => x.name !== fileToRemove.name);
33
+ newList.forEach((file) => dataTransfer.items.add(file));
34
+ if (_input.current)
35
+ _input.current.files = dataTransfer.files;
36
+ if (newList.length === 0)
37
+ setClassName((prev) => prev.filter((c) => c !== "has-file"));
38
+ return newList;
39
+ });
57
40
  }, []);
58
41
  const handleValidationFile = useCallback((file) => {
59
42
  const newErrors = [];
@@ -106,15 +89,8 @@ const Upload = ({ text, file, onChange, allowedTypes, maxSize, type = "list", mu
106
89
  e.preventDefault();
107
90
  e.stopPropagation();
108
91
  const files = e.dataTransfer.files;
109
- if (files && files.length > 0) {
110
- if (multiple) {
111
- setSelectedFiles(Array.from(files));
112
- }
113
- else {
114
- setSelectedFile(files[files.length - 1]);
115
- _firstLoad.current = true;
116
- }
117
- }
92
+ if (files && files.length > 0)
93
+ setSelectedFiles(Array.from(files));
118
94
  setClassName((prev) => prev.filter((c) => c !== "dragging"));
119
95
  }, []);
120
96
  const renderUploadFile = (params) => {
@@ -130,65 +106,38 @@ const Upload = ({ text, file, onChange, allowedTypes, maxSize, type = "list", mu
130
106
  setValidationErrors([]);
131
107
  _validationErrors.current = [];
132
108
  if (_input.current) {
133
- if (multiple) {
134
- if (selectedFiles.length === 0) {
135
- onChange(fileFormData, [], [], false);
136
- return;
137
- }
138
- // Seçilmiş olan dosyalar validasyona gönderiliyor.
139
- selectedFiles.forEach((f) => handleValidationFile(f));
140
- const inValidFiles = Array.from(new Set(_validationErrors.current));
141
- // Input içerisine dosyalar aktarılıyor.
142
- selectedFiles.forEach((f) => dataTransfer.items.add(f));
143
- _input.current.files = dataTransfer.files;
144
- // Geçerli olan dosyalar alındı...
145
- const validFiles = [...selectedFiles.filter((x) => !inValidFiles.includes(x.name))];
146
- validFiles.forEach((f) => fileFormData.append("file", f));
147
- // Geçerli olan dosyalar base64'e dönüştürülüyor...
148
- const base64Array = await Promise.all(validFiles.map((validFile) => handleFileToBase64(validFile)));
149
- onChange(fileFormData, validFiles, base64Array, _validationErrors.current.length === 0);
150
- // Eğer dosya varsa.
151
- setClassName((prev) => {
152
- const index = prev.findIndex((c) => c === "has-file");
153
- if (index === -1)
154
- return [...prev, "has-file"];
155
- return prev;
156
- });
157
- }
158
- else {
159
- if (selectedFile) {
160
- handleValidationFile(selectedFile);
161
- fileFormData.append("file", selectedFile);
162
- onChange(fileFormData, selectedFile, await handleFileToBase64(selectedFile));
163
- // Input içerisine dosyalar aktarılıyor.
164
- dataTransfer.items.add(selectedFile);
165
- _input.current.files = dataTransfer.files;
166
- }
167
- else {
168
- onChange(undefined, null, "");
169
- }
109
+ if (selectedFiles.length === 0) {
110
+ onChange(fileFormData, [], [], false);
111
+ return;
170
112
  }
113
+ // Seçilmiş olan dosyalar validasyona gönderiliyor.
114
+ selectedFiles.forEach((f) => handleValidationFile(f));
115
+ const inValidFiles = Array.from(new Set(_validationErrors.current));
116
+ // Input içerisine dosyalar aktarılıyor.
117
+ selectedFiles.forEach((f) => dataTransfer.items.add(f));
118
+ _input.current.files = dataTransfer.files;
119
+ // Geçerli olan dosyalar alındı...
120
+ const validFiles = [...selectedFiles.filter((x) => !inValidFiles.includes(x.name))];
121
+ validFiles.forEach((f) => fileFormData.append("file", f));
122
+ // Geçerli olan dosyalar base64'e dönüştürülüyor...
123
+ const base64Array = await Promise.all(validFiles.map((validFile) => handleFileToBase64(validFile)));
124
+ onChange(fileFormData, validFiles, base64Array, _validationErrors.current.length === 0);
125
+ // Eğer dosya varsa.
126
+ setClassName((prev) => {
127
+ const index = prev.findIndex((c) => c === "has-file");
128
+ if (index === -1)
129
+ return [...prev, "has-file"];
130
+ return prev;
131
+ });
171
132
  }
172
133
  })();
173
- }, [selectedFiles, selectedFile]);
134
+ }, [selectedFiles]);
174
135
  useEffect(() => {
175
- if (_firstLoad.current) {
176
- // if (multiple && file.length === 0) {
177
- // setSelectedFiles([]);
178
- // } else {
179
- // if (!file) setSelectedFile(undefined);
180
- // }
136
+ if (_firstLoad.current)
181
137
  return;
182
- }
183
- if (multiple) {
184
- setSelectedFiles(file);
185
- _firstLoad.current = true;
186
- }
187
- else {
188
- setSelectedFile(file);
189
- _firstLoad.current = true;
190
- }
191
- }, [file]);
138
+ setSelectedFiles(files);
139
+ _firstLoad.current = true;
140
+ }, [files]);
192
141
  useEffect(() => {
193
142
  if (type === "dropzone")
194
143
  setClassName((prev) => [...prev, "dropzone"]);
@@ -197,11 +146,11 @@ const Upload = ({ text, file, onChange, allowedTypes, maxSize, type = "list", mu
197
146
  case "list":
198
147
  return renderUploadFile({
199
148
  children: (React.createElement(React.Fragment, null,
200
- React.createElement(Button, { variant: "outlined", color: "gray", icon: { element: React.createElement(ARIcon, { variant: "fill", icon: "CloudUpload" }) }, onClick: () => {
149
+ React.createElement(Button, { variant: "outlined", color: "gray", icon: { element: React.createElement(ARIcon, { icon: "CloudUpload-Fill" }) }, onClick: () => {
201
150
  if (_input.current)
202
151
  _input.current.click();
203
152
  } }, text && React.createElement("span", null, text)),
204
- React.createElement(List, { selectedFiles: selectedFiles.length === 0 && selectedFile ? [selectedFile] : selectedFiles, validationErrors: validationErrors, handleFileToBase64: handleFileToBase64, handleFileRemove: handleFileRemove }))),
153
+ React.createElement(List, { selectedFiles: selectedFiles ?? [], validationErrors: validationErrors, handleFileToBase64: handleFileToBase64, handleFileRemove: handleFileRemove }))),
205
154
  });
206
155
  case "dropzone":
207
156
  return renderUploadFile({
@@ -210,10 +159,10 @@ const Upload = ({ text, file, onChange, allowedTypes, maxSize, type = "list", mu
210
159
  if (_input.current)
211
160
  _input.current.click();
212
161
  } },
213
- React.createElement(Dropzone, { selectedFiles: selectedFiles.length === 0 && selectedFile ? [selectedFile] : selectedFiles, validationErrors: validationErrors, handleFileToBase64: handleFileToBase64, handleFileRemove: handleFileRemove }),
214
- !selectedFile && selectedFiles.length === 0 && (React.createElement(React.Fragment, null,
162
+ React.createElement(Dropzone, { selectedFiles: selectedFiles ?? [], validationErrors: validationErrors, handleFileToBase64: handleFileToBase64, handleFileRemove: handleFileRemove }),
163
+ selectedFiles && selectedFiles.length === 0 && (React.createElement(React.Fragment, null,
215
164
  React.createElement("div", { className: "upload" },
216
- React.createElement(ARIcon, { variant: "fill", icon: "CloudUpload", size: 32 }),
165
+ React.createElement(ARIcon, { icon: "CloudUpload-Fill", size: 32 }),
217
166
  React.createElement("div", { className: "properies" },
218
167
  allowedTypes && (React.createElement("div", { className: "allow-types" }, allowedTypes?.map((allowedType) => allowedType.split("/")[1].toLocaleUpperCase()).join(", "))),
219
168
  maxSize && React.createElement("div", { className: "max-size" },
@@ -1,9 +1,9 @@
1
1
  import React from "react";
2
- import { Icons, IconVariants } from "../../libs/types";
2
+ import { Icons } from "../../libs/types";
3
3
  declare class Icon {
4
4
  private _stroke?;
5
5
  private _strokeWidth?;
6
6
  constructor(stroke?: string, strokeWidth?: number);
7
- Compiler: (variant: IconVariants, icon: Icons) => React.JSX.Element | null;
7
+ Compiler: (icon: Icons) => React.JSX.Element | null;
8
8
  }
9
9
  export default Icon;