ar-design 0.2.69 → 0.2.70

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.
@@ -29,6 +29,17 @@
29
29
  cursor: pointer;
30
30
  user-select: none;
31
31
  }
32
+ .ar-upload-button > .button:has(> img) {
33
+ padding: 0;
34
+ border: none;
35
+ overflow: hidden;
36
+ }
37
+ .ar-upload-button > .button > img {
38
+ width: 100%;
39
+ height: 200px;
40
+ object-fit: fill;
41
+ object-position: top;
42
+ }
32
43
  .ar-upload-button > .button > .information {
33
44
  display: flex;
34
45
  flex-direction: column;
@@ -54,53 +65,10 @@
54
65
  transition: top 250ms ease-in-out;
55
66
  }
56
67
  .ar-upload-button > .ar-upload-files > ul {
57
- display: flex;
58
- flex-direction: column;
59
- list-style-type: none;
60
- }
61
- .ar-upload-button > .ar-upload-files > ul > li {
62
- position: relative;
63
- border-bottom: solid 1px var(--gray-200);
64
- }
65
- .ar-upload-button > .ar-upload-files > ul > li:hover > .errors {
66
- display: flex;
67
- }
68
- .ar-upload-button > .ar-upload-files > ul > li.error {
69
- border-left: solid 2px var(--danger);
70
- }
71
- .ar-upload-button > .ar-upload-files > ul > li .content {
72
- display: flex;
73
- flex-direction: row;
74
- justify-content: space-between;
75
- align-items: center;
76
- width: 100%;
77
- height: 2rem;
78
- padding: 0 0.5rem;
79
- }
80
- .ar-upload-button > .ar-upload-files > ul > li .content > span:first-child {
81
- width: 90%;
82
- font-size: 0.75rem;
83
- text-overflow: ellipsis;
84
- overflow: hidden;
85
- white-space: nowrap;
86
- }
87
- .ar-upload-button > .ar-upload-files > ul > li .content > span:first-child.error {
88
- color: var(--danger);
89
- /* -webkit-text-stroke: 0.5px var(--danger); */
90
- }
91
- .ar-upload-button > .ar-upload-files > ul > li .content > span:last-child {
92
- background-color: rgba(var(--danger-rgb), 0.1);
93
- width: 1rem;
94
- height: 1rem;
95
- border-radius: var(--border-radius-pill);
96
- color: rgba(var(--danger-rgb), 0.5);
97
- font-size: 0.75rem;
98
- text-align: center;
99
- /* -webkit-text-stroke: 1px rgba(var(--danger-rgb), 0.5); */
100
- line-height: 0.85rem;
101
- cursor: pointer;
68
+ list-style: none;
102
69
  }
103
70
 
71
+ .ar-upload-button > .ar-upload-files > ul > li > .file,
104
72
  .ar-upload-button > .ar-upload-files > .file {
105
73
  display: flex;
106
74
  flex-direction: row;
@@ -111,14 +79,17 @@
111
79
  padding: 0.5rem;
112
80
  border-radius: var(--border-radius-sm);
113
81
  }
82
+ .ar-upload-button > .ar-upload-files > ul > li > .file > .information,
114
83
  .ar-upload-button > .ar-upload-files > .file > .information {
115
84
  display: flex;
116
85
  flex-direction: row;
117
86
  gap: 0.5rem;
118
87
  }
88
+ .ar-upload-button > .ar-upload-files > ul > li > .file > .information > span,
119
89
  .ar-upload-button > .ar-upload-files > .file > .information > span {
120
90
  display: inline-block;
121
91
  }
92
+ .ar-upload-button > .ar-upload-files > ul > li > .file > .information > span:last-child,
122
93
  .ar-upload-button > .ar-upload-files > .file > .information > span:last-child {
123
94
  background-color: var(--primary);
124
95
  padding: 0 0.25rem;
@@ -127,6 +98,7 @@
127
98
  font-size: 0.75rem;
128
99
  line-height: 2;
129
100
  }
101
+ .ar-upload-button > .ar-upload-files > ul > li > .file > .delete,
130
102
  .ar-upload-button > .ar-upload-files > .file > .delete {
131
103
  cursor: pointer;
132
104
  }
@@ -98,6 +98,7 @@ type Props = {
98
98
  * ```
99
99
  */
100
100
  allowedTypes?: AllowedTypes[];
101
+ uploadType?: "image" | "application-file";
101
102
  /**
102
103
  * Kabul edilen maksimum dosya boyutu (byte cinsinden).
103
104
  *
@@ -2,7 +2,7 @@ import React, { useEffect, useRef, useState } from "react";
2
2
  import "../../../assets/css/components/form/upload/styles.css";
3
3
  import Tooltip from "../../feedback/tooltip";
4
4
  import { ARIcon } from "../../icons";
5
- const Upload = ({ text, file, onChange, allowedTypes, maxSize, multiple }) => {
5
+ const Upload = ({ text, file, onChange, allowedTypes, uploadType = "application-file", maxSize, multiple, }) => {
6
6
  // refs
7
7
  const _firstLoad = useRef(false);
8
8
  const _input = useRef(null);
@@ -10,8 +10,9 @@ const Upload = ({ text, file, onChange, allowedTypes, maxSize, multiple }) => {
10
10
  // refs -> File Data
11
11
  const _validationErrors = useRef([]);
12
12
  // states
13
- const [selectedFiles, setSelectedFiles] = useState([]);
14
13
  const [selectedFile, setSelectedFile] = useState(undefined);
14
+ const [selectedFileBase64, setSelectedFileBase64] = useState(undefined);
15
+ const [selectedFiles, setSelectedFiles] = useState([]);
15
16
  const [validationErrors, setValidationErrors] = useState([]);
16
17
  // methods
17
18
  const handleFileChange = (files) => {
@@ -40,6 +41,7 @@ const Upload = ({ text, file, onChange, allowedTypes, maxSize, multiple }) => {
40
41
  }
41
42
  else {
42
43
  setSelectedFile(undefined);
44
+ setSelectedFileBase64(undefined);
43
45
  }
44
46
  };
45
47
  const handleValidationFile = (file) => {
@@ -101,6 +103,7 @@ const Upload = ({ text, file, onChange, allowedTypes, maxSize, multiple }) => {
101
103
  handleValidationFile(selectedFile);
102
104
  fileFormData.append("file", selectedFile);
103
105
  onChange(fileFormData, selectedFile, await handleFileToBase64(selectedFile));
106
+ setSelectedFileBase64(await handleFileToBase64(selectedFile));
104
107
  // Input içerisine dosyalar aktarılıyor.
105
108
  dataTransfer.items.add(selectedFile);
106
109
  _input.current.files = dataTransfer.files;
@@ -122,15 +125,17 @@ const Upload = ({ text, file, onChange, allowedTypes, maxSize, multiple }) => {
122
125
  if (_input.current)
123
126
  _input.current.click();
124
127
  } },
125
- React.createElement("div", { className: "information" },
126
- React.createElement(ARIcon, { variant: "linear", icon: "Upload", stroke: "var(--gray-600)", fill: "transparent" }),
127
- React.createElement("div", { className: "properies" },
128
- allowedTypes && (React.createElement("div", { className: "allow-types" }, allowedTypes?.map((allowedType) => allowedType.split("/")[1].toLocaleUpperCase()).join(", "))),
129
- maxSize && React.createElement("div", { className: "max-size" },
130
- "up to ",
131
- maxSize,
132
- "MB"))),
133
- text && React.createElement("span", null, text)),
128
+ uploadType === "image" && selectedFileBase64 && React.createElement("img", { src: selectedFileBase64 }),
129
+ (uploadType === "application-file" || !selectedFileBase64) && (React.createElement(React.Fragment, null,
130
+ React.createElement("div", { className: "information" },
131
+ React.createElement(ARIcon, { variant: "linear", icon: "Upload", stroke: "var(--gray-600)", fill: "transparent" }),
132
+ React.createElement("div", { className: "properies" },
133
+ allowedTypes && (React.createElement("div", { className: "allow-types" }, allowedTypes?.map((allowedType) => allowedType.split("/")[1].toLocaleUpperCase()).join(", "))),
134
+ maxSize && React.createElement("div", { className: "max-size" },
135
+ "up to ",
136
+ maxSize,
137
+ "MB"))),
138
+ text && React.createElement("span", null, text)))),
134
139
  React.createElement("div", { className: "ar-upload-files" }, multiple ? (React.createElement("ul", null, selectedFiles.map((selectedFile, index) => {
135
140
  let _className = [];
136
141
  const errorMessages = validationErrors
@@ -138,12 +143,14 @@ const Upload = ({ text, file, onChange, allowedTypes, maxSize, multiple }) => {
138
143
  .map((error) => error[selectedFile.name]);
139
144
  if (errorMessages.length > 0)
140
145
  _className.push("error");
141
- const content = (React.createElement("div", { className: "content" },
142
- React.createElement("span", { className: _className.map((c) => c).join(" ") }, selectedFile.name),
143
- React.createElement("span", { onClick: (event) => {
144
- event.stopPropagation();
145
- handleFileRemove(selectedFile);
146
- } }, "x")));
146
+ const content = (React.createElement("div", { className: "file" },
147
+ React.createElement("div", { className: "information" },
148
+ React.createElement("span", null, selectedFile.name),
149
+ React.createElement("span", null,
150
+ (selectedFile.size / 1024).toFixed(3),
151
+ "KB")),
152
+ React.createElement("div", { className: "delete", onClick: () => handleFileRemove(selectedFile) },
153
+ React.createElement(ARIcon, { icon: "CloseCircle", fill: "transparent", size: 20 }))));
147
154
  return (React.createElement("li", { key: index, className: _className.map((c) => c).join(" ") }, errorMessages.length === 0 ? (content) : (React.createElement(Tooltip, { text: errorMessages.map((message) => message ?? "") }, content))));
148
155
  }))) : (selectedFile && (React.createElement("div", { className: "file" },
149
156
  React.createElement("div", { className: "information" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ar-design",
3
- "version": "0.2.69",
3
+ "version": "0.2.70",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",