@likable-hair/svelte 3.1.43 → 3.1.45
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
|
}
|
|
@@ -49,6 +63,7 @@ function handleFileFromInput(event) {
|
|
|
49
63
|
}}
|
|
50
64
|
class:disabled
|
|
51
65
|
class="drop-area {clazz}"
|
|
66
|
+
role="presentation"
|
|
52
67
|
>
|
|
53
68
|
<slot name="body" active={dropAreaActive}>
|
|
54
69
|
<span> { placeholder || 'Drop file here or click to upload'} </span>
|
|
@@ -59,6 +74,7 @@ function handleFileFromInput(event) {
|
|
|
59
74
|
multiple
|
|
60
75
|
bind:this={inputElement}
|
|
61
76
|
on:input={handleFileFromInput}
|
|
77
|
+
on:change
|
|
62
78
|
{disabled}
|
|
63
79
|
/>
|
|
64
80
|
</div>
|
|
@@ -100,7 +116,7 @@ function handleFileFromInput(event) {
|
|
|
100
116
|
.drop-area > input {
|
|
101
117
|
display: none;
|
|
102
118
|
}
|
|
103
|
-
.drop-area:hover:not(.disabled) {
|
|
119
|
+
.drop-area:hover:not(.disabled) {
|
|
104
120
|
box-shadow: var(
|
|
105
121
|
--file-input-focus-shadow,
|
|
106
122
|
var(--file-input-default-focus-shadow)
|
|
@@ -8,8 +8,10 @@ declare const __propDef: {
|
|
|
8
8
|
placeholder?: string | undefined;
|
|
9
9
|
persistOverUpload?: boolean | undefined;
|
|
10
10
|
disabled?: boolean | undefined;
|
|
11
|
+
maxFiles?: number | undefined;
|
|
11
12
|
};
|
|
12
13
|
events: {
|
|
14
|
+
change: Event;
|
|
13
15
|
fileDrop: CustomEvent<{
|
|
14
16
|
nativeEvent: DragEvent;
|
|
15
17
|
files: File[];
|
|
@@ -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,14 @@ 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
|
+
on:change
|
|
39
|
+
{maxFiles}
|
|
37
40
|
>
|
|
38
41
|
<span
|
|
39
42
|
slot="body"
|
|
@@ -115,7 +118,7 @@ function handleRemove(file) {
|
|
|
115
118
|
var(--file-input-list-default-hover-color)
|
|
116
119
|
);
|
|
117
120
|
}
|
|
118
|
-
|
|
121
|
+
|
|
119
122
|
.body-container {
|
|
120
123
|
border: dotted;
|
|
121
124
|
border-color: var(
|
|
@@ -128,7 +131,7 @@ function handleRemove(file) {
|
|
|
128
131
|
);
|
|
129
132
|
width: calc(100% - 20px);
|
|
130
133
|
height: calc(100% - 20px);
|
|
131
|
-
box-sizing: border-box;
|
|
134
|
+
box-sizing: border-box;
|
|
132
135
|
margin: auto;
|
|
133
136
|
position: relative;
|
|
134
137
|
display: flex;
|
|
@@ -8,8 +8,12 @@ declare const __propDef: {
|
|
|
8
8
|
persistOverUpload?: boolean | undefined;
|
|
9
9
|
dropAreaActive?: boolean | undefined;
|
|
10
10
|
icon?: string | undefined;
|
|
11
|
+
disabled?: boolean | undefined;
|
|
12
|
+
maxFiles?: number | undefined;
|
|
11
13
|
};
|
|
12
14
|
events: {
|
|
15
|
+
change: Event;
|
|
16
|
+
} & {
|
|
13
17
|
[evt: string]: CustomEvent<any>;
|
|
14
18
|
};
|
|
15
19
|
slots: {};
|