@likable-hair/svelte 3.1.43 → 3.1.44
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.
|
@@ -3,7 +3,7 @@ import "./FileInput.css";
|
|
|
3
3
|
import { createEventDispatcher } from "svelte";
|
|
4
4
|
let clazz = "";
|
|
5
5
|
export { clazz as class };
|
|
6
|
-
export let files = void 0, placeholder = void 0, persistOverUpload = true, disabled = false;
|
|
6
|
+
export let files = void 0, placeholder = void 0, persistOverUpload = true, disabled = false, maxFiles = void 0;
|
|
7
7
|
let inputElement = void 0;
|
|
8
8
|
let dropAreaActive = false;
|
|
9
9
|
const highlight = (highlighted) => {
|
|
@@ -12,27 +12,41 @@ const highlight = (highlighted) => {
|
|
|
12
12
|
const dispatch = createEventDispatcher();
|
|
13
13
|
function handleFileDrop(event) {
|
|
14
14
|
let droppedFiles = event.dataTransfer?.files;
|
|
15
|
+
let limitedFiles;
|
|
15
16
|
if (droppedFiles) {
|
|
17
|
+
if (maxFiles !== void 0) {
|
|
18
|
+
let freeSlots = Math.max(0, maxFiles - (files?.length || 0));
|
|
19
|
+
limitedFiles = Array.from(droppedFiles).slice(0, freeSlots);
|
|
20
|
+
} else {
|
|
21
|
+
limitedFiles = Array.from(droppedFiles);
|
|
22
|
+
}
|
|
16
23
|
if (!persistOverUpload)
|
|
17
|
-
files =
|
|
24
|
+
files = limitedFiles;
|
|
18
25
|
else
|
|
19
|
-
files = files ? [...files, ...
|
|
26
|
+
files = files ? [...files, ...limitedFiles] : limitedFiles;
|
|
20
27
|
dispatch("fileDrop", {
|
|
21
28
|
nativeEvent: event,
|
|
22
|
-
files:
|
|
29
|
+
files: limitedFiles
|
|
23
30
|
});
|
|
24
31
|
}
|
|
25
32
|
}
|
|
26
33
|
function handleFileFromInput(event) {
|
|
27
34
|
let selectedFiles = event.target.files;
|
|
35
|
+
let limitedFiles;
|
|
28
36
|
if (selectedFiles) {
|
|
37
|
+
if (maxFiles !== void 0) {
|
|
38
|
+
let freeSlots = Math.max(0, maxFiles - (files?.length || 0));
|
|
39
|
+
limitedFiles = Array.from(selectedFiles).slice(0, freeSlots);
|
|
40
|
+
} else {
|
|
41
|
+
limitedFiles = Array.from(selectedFiles);
|
|
42
|
+
}
|
|
29
43
|
if (!persistOverUpload)
|
|
30
|
-
files =
|
|
44
|
+
files = limitedFiles;
|
|
31
45
|
else
|
|
32
|
-
files = files ? [...files, ...
|
|
46
|
+
files = files ? [...files, ...limitedFiles] : limitedFiles;
|
|
33
47
|
dispatch("fileSelect", {
|
|
34
48
|
nativeEvent: event,
|
|
35
|
-
files:
|
|
49
|
+
files: limitedFiles
|
|
36
50
|
});
|
|
37
51
|
}
|
|
38
52
|
}
|
|
@@ -100,7 +114,7 @@ function handleFileFromInput(event) {
|
|
|
100
114
|
.drop-area > input {
|
|
101
115
|
display: none;
|
|
102
116
|
}
|
|
103
|
-
.drop-area:hover:not(.disabled) {
|
|
117
|
+
.drop-area:hover:not(.disabled) {
|
|
104
118
|
box-shadow: var(
|
|
105
119
|
--file-input-focus-shadow,
|
|
106
120
|
var(--file-input-default-focus-shadow)
|
|
@@ -5,7 +5,7 @@ import FileInput from "./FileInput.svelte";
|
|
|
5
5
|
import Icon from "../media/Icon.svelte";
|
|
6
6
|
let clazz = "";
|
|
7
7
|
export { clazz as class };
|
|
8
|
-
export let files = [], persistOverUpload = true, dropAreaActive = true, icon = "mdi-file-document";
|
|
8
|
+
export let files = [], persistOverUpload = true, dropAreaActive = true, icon = "mdi-file-document", disabled = false, maxFiles = void 0;
|
|
9
9
|
let fileActive = null;
|
|
10
10
|
function handleFileMouseEnter(file) {
|
|
11
11
|
dropAreaActive = false;
|
|
@@ -29,11 +29,13 @@ function handleRemove(file) {
|
|
|
29
29
|
<FileInput
|
|
30
30
|
bind:files
|
|
31
31
|
{persistOverUpload}
|
|
32
|
+
disabled={disabled || (maxFiles !== undefined && files.length >= maxFiles)}
|
|
32
33
|
--file-input-border-radius="var(--file-input-list-border-radius,var(--file-input-list-default-border-radius))"
|
|
33
34
|
--file-input-background-color="var(--file-input-list-background-color,var(--file-input-list-default-background-color))"
|
|
34
35
|
--file-input-color="var(--file-input-list-color,var(--file-input-list-default-color))"
|
|
35
36
|
--file-input-height="var(--file-input-list-height,var(--file-input-list-default-height))"
|
|
36
37
|
--file-input-width="var(--file-input-list-width,var(--file-input-list-default-width))"
|
|
38
|
+
{maxFiles}
|
|
37
39
|
>
|
|
38
40
|
<span
|
|
39
41
|
slot="body"
|
|
@@ -115,7 +117,7 @@ function handleRemove(file) {
|
|
|
115
117
|
var(--file-input-list-default-hover-color)
|
|
116
118
|
);
|
|
117
119
|
}
|
|
118
|
-
|
|
120
|
+
|
|
119
121
|
.body-container {
|
|
120
122
|
border: dotted;
|
|
121
123
|
border-color: var(
|
|
@@ -128,7 +130,7 @@ function handleRemove(file) {
|
|
|
128
130
|
);
|
|
129
131
|
width: calc(100% - 20px);
|
|
130
132
|
height: calc(100% - 20px);
|
|
131
|
-
box-sizing: border-box;
|
|
133
|
+
box-sizing: border-box;
|
|
132
134
|
margin: auto;
|
|
133
135
|
position: relative;
|
|
134
136
|
display: flex;
|