@casinogate/ui 1.11.7 → 1.11.9
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.
- package/dist/assets/css/root.css +57 -0
- package/dist/components/file-upload/components/file-upload.clear-trigger.svelte +30 -0
- package/dist/components/file-upload/components/file-upload.clear-trigger.svelte.d.ts +4 -0
- package/dist/components/file-upload/components/file-upload.context.svelte +10 -0
- package/dist/components/file-upload/components/file-upload.context.svelte.d.ts +4 -0
- package/dist/components/file-upload/components/file-upload.dropzone.svelte +72 -0
- package/dist/components/file-upload/components/file-upload.dropzone.svelte.d.ts +4 -0
- package/dist/components/file-upload/components/file-upload.hidden-input.svelte +35 -0
- package/dist/components/file-upload/components/file-upload.hidden-input.svelte.d.ts +4 -0
- package/dist/components/file-upload/components/file-upload.item-delete-trigger.svelte +31 -0
- package/dist/components/file-upload/components/file-upload.item-delete-trigger.svelte.d.ts +4 -0
- package/dist/components/file-upload/components/file-upload.item-group.svelte +21 -0
- package/dist/components/file-upload/components/file-upload.item-group.svelte.d.ts +4 -0
- package/dist/components/file-upload/components/file-upload.item-name.svelte +28 -0
- package/dist/components/file-upload/components/file-upload.item-name.svelte.d.ts +4 -0
- package/dist/components/file-upload/components/file-upload.item-preview-image.svelte +33 -0
- package/dist/components/file-upload/components/file-upload.item-preview-image.svelte.d.ts +4 -0
- package/dist/components/file-upload/components/file-upload.item-preview.svelte +29 -0
- package/dist/components/file-upload/components/file-upload.item-preview.svelte.d.ts +4 -0
- package/dist/components/file-upload/components/file-upload.item-size-text.svelte +28 -0
- package/dist/components/file-upload/components/file-upload.item-size-text.svelte.d.ts +4 -0
- package/dist/components/file-upload/components/file-upload.item.svelte +29 -0
- package/dist/components/file-upload/components/file-upload.item.svelte.d.ts +4 -0
- package/dist/components/file-upload/components/file-upload.root.svelte +47 -0
- package/dist/components/file-upload/components/file-upload.root.svelte.d.ts +4 -0
- package/dist/components/file-upload/components/file-upload.svelte.d.ts +41 -0
- package/dist/components/file-upload/components/file-upload.svelte.js +120 -0
- package/dist/components/file-upload/components/file-upload.trigger.svelte +31 -0
- package/dist/components/file-upload/components/file-upload.trigger.svelte.d.ts +4 -0
- package/dist/components/file-upload/components/index.d.ts +13 -0
- package/dist/components/file-upload/components/index.js +13 -0
- package/dist/components/file-upload/composed/index.d.ts +1 -0
- package/dist/components/file-upload/composed/index.js +1 -0
- package/dist/components/file-upload/composed/root/file-upload.root.svelte +36 -0
- package/dist/components/file-upload/composed/root/file-upload.root.svelte.d.ts +4 -0
- package/dist/components/file-upload/composed/root/index.d.ts +1 -0
- package/dist/components/file-upload/composed/root/index.js +1 -0
- package/dist/components/file-upload/index.d.ts +3 -0
- package/dist/components/file-upload/index.js +3 -0
- package/dist/components/file-upload/styles.d.ts +80 -0
- package/dist/components/file-upload/styles.js +68 -0
- package/dist/components/file-upload/types.d.ts +83 -0
- package/dist/components/file-upload/types.js +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/pagination/components/index.d.ts +6 -0
- package/dist/components/pagination/components/index.js +6 -0
- package/dist/components/pagination/components/pagination.ellipsis.svelte +2 -5
- package/dist/components/pagination/components/pagination.item.svelte +4 -5
- package/dist/components/pagination/components/pagination.next-button.svelte +3 -6
- package/dist/components/pagination/components/pagination.page-size.svelte +40 -0
- package/dist/components/pagination/components/pagination.page-size.svelte.d.ts +4 -0
- package/dist/components/pagination/components/pagination.prev-button.svelte +2 -4
- package/dist/components/pagination/components/pagination.root.svelte +3 -5
- package/dist/components/pagination/composed/index.d.ts +1 -0
- package/dist/components/pagination/composed/index.js +1 -0
- package/dist/components/pagination/composed/root/index.d.ts +1 -0
- package/dist/components/pagination/composed/root/index.js +1 -0
- package/dist/components/pagination/composed/root/pagination.root.svelte +36 -0
- package/dist/components/pagination/composed/root/pagination.root.svelte.d.ts +4 -0
- package/dist/components/pagination/index.d.ts +3 -3
- package/dist/components/pagination/index.js +3 -2
- package/dist/components/pagination/styles.d.ts +41 -80
- package/dist/components/pagination/styles.js +33 -39
- package/dist/components/pagination/types.d.ts +14 -1
- package/dist/components/select/components/select.trigger.svelte +3 -0
- package/dist/components/select/select.svelte +5 -2
- package/dist/components/select/styles.d.ts +10 -1
- package/dist/components/select/styles.js +16 -2
- package/dist/components/select/types.d.ts +2 -0
- package/package.json +1 -1
- package/dist/components/pagination/exports-primitive.d.ts +0 -5
- package/dist/components/pagination/exports-primitive.js +0 -5
- package/dist/components/pagination/exports.d.ts +0 -1
- package/dist/components/pagination/exports.js +0 -1
- package/dist/components/pagination/pagination.svelte +0 -28
- package/dist/components/pagination/pagination.svelte.d.ts +0 -3
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { keyWithPrefix } from '../../../internal/utils/common.js';
|
|
2
|
+
import { Context } from 'runed';
|
|
3
|
+
// --- Root State ---
|
|
4
|
+
export const FileUploadRootContext = new Context(keyWithPrefix('file-upload-root'));
|
|
5
|
+
export class FileUploadRootState {
|
|
6
|
+
static create(opts) {
|
|
7
|
+
return FileUploadRootContext.set(new FileUploadRootState(opts));
|
|
8
|
+
}
|
|
9
|
+
opts;
|
|
10
|
+
acceptedFiles = $state([]);
|
|
11
|
+
rejectedFiles = $state([]);
|
|
12
|
+
dragging = $state(false);
|
|
13
|
+
onFileAccept;
|
|
14
|
+
onFileReject;
|
|
15
|
+
onFileChange;
|
|
16
|
+
hiddenInputRef = null;
|
|
17
|
+
constructor(opts) {
|
|
18
|
+
this.opts = opts;
|
|
19
|
+
}
|
|
20
|
+
setHiddenInput(input) {
|
|
21
|
+
this.hiddenInputRef = input;
|
|
22
|
+
}
|
|
23
|
+
openFilePicker() {
|
|
24
|
+
this.hiddenInputRef?.click();
|
|
25
|
+
}
|
|
26
|
+
addFiles(files) {
|
|
27
|
+
const fileArray = Array.from(files);
|
|
28
|
+
const maxFiles = this.opts.maxFiles.current;
|
|
29
|
+
const accepted = [];
|
|
30
|
+
const rejected = [];
|
|
31
|
+
for (const file of fileArray) {
|
|
32
|
+
const errors = this.validateFile(file);
|
|
33
|
+
if (errors.length > 0) {
|
|
34
|
+
rejected.push({ file, errors });
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
accepted.push(file);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (accepted.length > 0) {
|
|
41
|
+
const incoming = accepted.slice(0, maxFiles);
|
|
42
|
+
const overLimit = accepted.slice(maxFiles);
|
|
43
|
+
for (const file of overLimit) {
|
|
44
|
+
rejected.push({ file, errors: ['TOO_MANY_FILES'] });
|
|
45
|
+
}
|
|
46
|
+
this.acceptedFiles = this.acceptedFiles.length + incoming.length > maxFiles ? incoming : [...this.acceptedFiles, ...incoming];
|
|
47
|
+
this.onFileAccept?.({ files: incoming });
|
|
48
|
+
}
|
|
49
|
+
if (rejected.length > 0) {
|
|
50
|
+
this.rejectedFiles = [...this.rejectedFiles, ...rejected];
|
|
51
|
+
this.onFileReject?.({ files: rejected });
|
|
52
|
+
}
|
|
53
|
+
this.onFileChange?.({
|
|
54
|
+
acceptedFiles: this.acceptedFiles,
|
|
55
|
+
rejectedFiles: this.rejectedFiles,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
removeFile(file) {
|
|
59
|
+
this.acceptedFiles = this.acceptedFiles.filter((f) => f !== file);
|
|
60
|
+
this.onFileChange?.({
|
|
61
|
+
acceptedFiles: this.acceptedFiles,
|
|
62
|
+
rejectedFiles: this.rejectedFiles,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
clearFiles() {
|
|
66
|
+
this.acceptedFiles = [];
|
|
67
|
+
this.rejectedFiles = [];
|
|
68
|
+
this.onFileChange?.({
|
|
69
|
+
acceptedFiles: this.acceptedFiles,
|
|
70
|
+
rejectedFiles: this.rejectedFiles,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
validateFile(file) {
|
|
74
|
+
const errors = [];
|
|
75
|
+
const maxFileSize = this.opts.maxFileSize.current;
|
|
76
|
+
if (file.size > maxFileSize) {
|
|
77
|
+
errors.push('FILE_TOO_LARGE');
|
|
78
|
+
}
|
|
79
|
+
const accept = this.opts.accept.current;
|
|
80
|
+
if (accept && !this.matchesAccept(file, accept)) {
|
|
81
|
+
errors.push('FILE_INVALID_TYPE');
|
|
82
|
+
}
|
|
83
|
+
return errors;
|
|
84
|
+
}
|
|
85
|
+
matchesAccept(file, accept) {
|
|
86
|
+
const acceptTokens = accept
|
|
87
|
+
.split(',')
|
|
88
|
+
.map((t) => t.trim())
|
|
89
|
+
.filter(Boolean);
|
|
90
|
+
return acceptTokens.some((token) => {
|
|
91
|
+
if (token.startsWith('.')) {
|
|
92
|
+
return file.name.toLowerCase().endsWith(token.toLowerCase());
|
|
93
|
+
}
|
|
94
|
+
if (token.endsWith('/*')) {
|
|
95
|
+
const prefix = token.slice(0, -1);
|
|
96
|
+
return file.type.startsWith(prefix);
|
|
97
|
+
}
|
|
98
|
+
return file.type === token;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// --- Item State ---
|
|
103
|
+
export const FileUploadItemContext = new Context(keyWithPrefix('file-upload-item'));
|
|
104
|
+
export class FileUploadItemState {
|
|
105
|
+
static create(opts) {
|
|
106
|
+
return FileUploadItemContext.set(new FileUploadItemState(opts));
|
|
107
|
+
}
|
|
108
|
+
opts;
|
|
109
|
+
constructor(opts) {
|
|
110
|
+
this.opts = opts;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// --- Utils ---
|
|
114
|
+
export function formatFileSize(bytes) {
|
|
115
|
+
if (bytes < 1024)
|
|
116
|
+
return `${bytes} B`;
|
|
117
|
+
if (bytes < 1024 * 1024)
|
|
118
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
119
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
120
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '../../../internal/utils/common.js';
|
|
3
|
+
import { fileUploadPrimitiveTriggerStyles } from '../styles.js';
|
|
4
|
+
import type { FileUploadPrimitiveTriggerProps } from '../types.js';
|
|
5
|
+
import { FileUploadRootContext } from './file-upload.svelte.js';
|
|
6
|
+
|
|
7
|
+
let {
|
|
8
|
+
ref = $bindable(null),
|
|
9
|
+
children,
|
|
10
|
+
class: className,
|
|
11
|
+
...restProps
|
|
12
|
+
}: FileUploadPrimitiveTriggerProps = $props();
|
|
13
|
+
|
|
14
|
+
const rootState = FileUploadRootContext.get();
|
|
15
|
+
|
|
16
|
+
function handleClick(e: MouseEvent) {
|
|
17
|
+
e.stopPropagation();
|
|
18
|
+
rootState.openFilePicker();
|
|
19
|
+
}
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<button
|
|
23
|
+
bind:this={ref}
|
|
24
|
+
type="button"
|
|
25
|
+
class={cn(fileUploadPrimitiveTriggerStyles(), className)}
|
|
26
|
+
data-slot="file-upload-trigger"
|
|
27
|
+
onclick={handleClick}
|
|
28
|
+
{...restProps}
|
|
29
|
+
>
|
|
30
|
+
{@render children?.()}
|
|
31
|
+
</button>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { default as Root } from './file-upload.root.svelte';
|
|
2
|
+
export { default as Context } from './file-upload.context.svelte';
|
|
3
|
+
export { default as Dropzone } from './file-upload.dropzone.svelte';
|
|
4
|
+
export { default as Trigger } from './file-upload.trigger.svelte';
|
|
5
|
+
export { default as HiddenInput } from './file-upload.hidden-input.svelte';
|
|
6
|
+
export { default as ItemGroup } from './file-upload.item-group.svelte';
|
|
7
|
+
export { default as Item } from './file-upload.item.svelte';
|
|
8
|
+
export { default as ItemPreview } from './file-upload.item-preview.svelte';
|
|
9
|
+
export { default as ItemPreviewImage } from './file-upload.item-preview-image.svelte';
|
|
10
|
+
export { default as ItemName } from './file-upload.item-name.svelte';
|
|
11
|
+
export { default as ItemSizeText } from './file-upload.item-size-text.svelte';
|
|
12
|
+
export { default as ItemDeleteTrigger } from './file-upload.item-delete-trigger.svelte';
|
|
13
|
+
export { default as ClearTrigger } from './file-upload.clear-trigger.svelte';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { default as Root } from './file-upload.root.svelte';
|
|
2
|
+
export { default as Context } from './file-upload.context.svelte';
|
|
3
|
+
export { default as Dropzone } from './file-upload.dropzone.svelte';
|
|
4
|
+
export { default as Trigger } from './file-upload.trigger.svelte';
|
|
5
|
+
export { default as HiddenInput } from './file-upload.hidden-input.svelte';
|
|
6
|
+
export { default as ItemGroup } from './file-upload.item-group.svelte';
|
|
7
|
+
export { default as Item } from './file-upload.item.svelte';
|
|
8
|
+
export { default as ItemPreview } from './file-upload.item-preview.svelte';
|
|
9
|
+
export { default as ItemPreviewImage } from './file-upload.item-preview-image.svelte';
|
|
10
|
+
export { default as ItemName } from './file-upload.item-name.svelte';
|
|
11
|
+
export { default as ItemSizeText } from './file-upload.item-size-text.svelte';
|
|
12
|
+
export { default as ItemDeleteTrigger } from './file-upload.item-delete-trigger.svelte';
|
|
13
|
+
export { default as ClearTrigger } from './file-upload.clear-trigger.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Root } from './root/index.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Root } from './root/index.js';
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import * as FileUploadPrimitive from '../../components/index.js';
|
|
3
|
+
import type { FileUploadRootProps } from '../../types.js';
|
|
4
|
+
|
|
5
|
+
let {
|
|
6
|
+
ref = $bindable(null),
|
|
7
|
+
accept,
|
|
8
|
+
maxFiles = 1,
|
|
9
|
+
maxFileSize = Infinity,
|
|
10
|
+
disabled = false,
|
|
11
|
+
invalid = false,
|
|
12
|
+
onFileAccept,
|
|
13
|
+
onFileReject,
|
|
14
|
+
onFileChange,
|
|
15
|
+
children,
|
|
16
|
+
class: className,
|
|
17
|
+
...restProps
|
|
18
|
+
}: FileUploadRootProps = $props();
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<FileUploadPrimitive.Root
|
|
22
|
+
bind:ref
|
|
23
|
+
{accept}
|
|
24
|
+
{maxFiles}
|
|
25
|
+
{maxFileSize}
|
|
26
|
+
{disabled}
|
|
27
|
+
{invalid}
|
|
28
|
+
{onFileAccept}
|
|
29
|
+
{onFileReject}
|
|
30
|
+
{onFileChange}
|
|
31
|
+
class={className}
|
|
32
|
+
{...restProps}
|
|
33
|
+
>
|
|
34
|
+
<FileUploadPrimitive.HiddenInput />
|
|
35
|
+
{@render children?.()}
|
|
36
|
+
</FileUploadPrimitive.Root>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Root } from './file-upload.root.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Root } from './file-upload.root.svelte';
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { VariantProps } from 'tailwind-variants';
|
|
2
|
+
export declare const fileUploadPrimitiveRootStyles: import("tailwind-variants").TVReturnType<{
|
|
3
|
+
disabled: {
|
|
4
|
+
true: string;
|
|
5
|
+
};
|
|
6
|
+
}, undefined, string[], {
|
|
7
|
+
disabled: {
|
|
8
|
+
true: string;
|
|
9
|
+
};
|
|
10
|
+
}, undefined, import("tailwind-variants").TVReturnType<{
|
|
11
|
+
disabled: {
|
|
12
|
+
true: string;
|
|
13
|
+
};
|
|
14
|
+
}, undefined, string[], unknown, unknown, undefined>>;
|
|
15
|
+
export declare const fileUploadPrimitiveDropzoneStyles: import("tailwind-variants").TVReturnType<{
|
|
16
|
+
dragging: {
|
|
17
|
+
true: string;
|
|
18
|
+
};
|
|
19
|
+
invalid: {
|
|
20
|
+
true: string;
|
|
21
|
+
};
|
|
22
|
+
disabled: {
|
|
23
|
+
true: string;
|
|
24
|
+
};
|
|
25
|
+
}, undefined, string[], {
|
|
26
|
+
dragging: {
|
|
27
|
+
true: string;
|
|
28
|
+
};
|
|
29
|
+
invalid: {
|
|
30
|
+
true: string;
|
|
31
|
+
};
|
|
32
|
+
disabled: {
|
|
33
|
+
true: string;
|
|
34
|
+
};
|
|
35
|
+
}, undefined, import("tailwind-variants").TVReturnType<{
|
|
36
|
+
dragging: {
|
|
37
|
+
true: string;
|
|
38
|
+
};
|
|
39
|
+
invalid: {
|
|
40
|
+
true: string;
|
|
41
|
+
};
|
|
42
|
+
disabled: {
|
|
43
|
+
true: string;
|
|
44
|
+
};
|
|
45
|
+
}, undefined, string[], unknown, unknown, undefined>>;
|
|
46
|
+
export declare const fileUploadPrimitiveTriggerStyles: import("tailwind-variants").TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import("tailwind-variants").TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
|
|
47
|
+
export declare const fileUploadPrimitiveItemGroupStyles: import("tailwind-variants").TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import("tailwind-variants").TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
|
|
48
|
+
export declare const fileUploadPrimitiveItemStyles: import("tailwind-variants").TVReturnType<{
|
|
49
|
+
variant: {
|
|
50
|
+
default: string;
|
|
51
|
+
clean: string;
|
|
52
|
+
};
|
|
53
|
+
}, undefined, string[], {
|
|
54
|
+
variant: {
|
|
55
|
+
default: string;
|
|
56
|
+
clean: string;
|
|
57
|
+
};
|
|
58
|
+
}, undefined, import("tailwind-variants").TVReturnType<{
|
|
59
|
+
variant: {
|
|
60
|
+
default: string;
|
|
61
|
+
clean: string;
|
|
62
|
+
};
|
|
63
|
+
}, undefined, string[], unknown, unknown, undefined>>;
|
|
64
|
+
export declare const fileUploadPrimitiveItemPreviewStyles: import("tailwind-variants").TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import("tailwind-variants").TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
|
|
65
|
+
export declare const fileUploadPrimitiveItemPreviewImageStyles: import("tailwind-variants").TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import("tailwind-variants").TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
|
|
66
|
+
export declare const fileUploadPrimitiveItemNameStyles: import("tailwind-variants").TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import("tailwind-variants").TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
|
|
67
|
+
export declare const fileUploadPrimitiveItemSizeTextStyles: import("tailwind-variants").TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import("tailwind-variants").TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
|
|
68
|
+
export declare const fileUploadPrimitiveItemDeleteTriggerStyles: import("tailwind-variants").TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import("tailwind-variants").TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
|
|
69
|
+
export declare const fileUploadPrimitiveClearTriggerStyles: import("tailwind-variants").TVReturnType<{} | {} | {}, undefined, string[], {} | {}, undefined, import("tailwind-variants").TVReturnType<unknown, undefined, string[], unknown, unknown, undefined>>;
|
|
70
|
+
export type FileUploadPrimitiveRootVariants = VariantProps<typeof fileUploadPrimitiveRootStyles>;
|
|
71
|
+
export type FileUploadPrimitiveDropzoneVariants = VariantProps<typeof fileUploadPrimitiveDropzoneStyles>;
|
|
72
|
+
export type FileUploadPrimitiveTriggerVariants = VariantProps<typeof fileUploadPrimitiveTriggerStyles>;
|
|
73
|
+
export type FileUploadPrimitiveItemGroupVariants = VariantProps<typeof fileUploadPrimitiveItemGroupStyles>;
|
|
74
|
+
export type FileUploadPrimitiveItemVariants = VariantProps<typeof fileUploadPrimitiveItemStyles>;
|
|
75
|
+
export type FileUploadPrimitiveItemPreviewVariants = VariantProps<typeof fileUploadPrimitiveItemPreviewStyles>;
|
|
76
|
+
export type FileUploadPrimitiveItemPreviewImageVariants = VariantProps<typeof fileUploadPrimitiveItemPreviewImageStyles>;
|
|
77
|
+
export type FileUploadPrimitiveItemNameVariants = VariantProps<typeof fileUploadPrimitiveItemNameStyles>;
|
|
78
|
+
export type FileUploadPrimitiveItemSizeTextVariants = VariantProps<typeof fileUploadPrimitiveItemSizeTextStyles>;
|
|
79
|
+
export type FileUploadPrimitiveItemDeleteTriggerVariants = VariantProps<typeof fileUploadPrimitiveItemDeleteTriggerStyles>;
|
|
80
|
+
export type FileUploadPrimitiveClearTriggerVariants = VariantProps<typeof fileUploadPrimitiveClearTriggerStyles>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { tv } from '../../internal/utils/tailwindcss.js';
|
|
2
|
+
export const fileUploadPrimitiveRootStyles = tv({
|
|
3
|
+
base: ['cgui:flex cgui:flex-col cgui:gap-3'],
|
|
4
|
+
variants: {
|
|
5
|
+
disabled: {
|
|
6
|
+
true: 'cgui:opacity-50 cgui:pointer-events-none',
|
|
7
|
+
},
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
export const fileUploadPrimitiveDropzoneStyles = tv({
|
|
11
|
+
base: [
|
|
12
|
+
'cgui:flex cgui:flex-col cgui:items-center cgui:justify-center cgui:gap-2',
|
|
13
|
+
'cgui:rounded-md cgui:border cgui:border-dashed cgui:border-stroke-default',
|
|
14
|
+
'cgui:cursor-pointer',
|
|
15
|
+
'cgui:transition-colors cgui:duration-200',
|
|
16
|
+
],
|
|
17
|
+
variants: {
|
|
18
|
+
dragging: {
|
|
19
|
+
true: 'cgui:border-stroke-primary cgui:bg-surface-primary/5',
|
|
20
|
+
},
|
|
21
|
+
invalid: {
|
|
22
|
+
true: 'cgui:border-stroke-error',
|
|
23
|
+
},
|
|
24
|
+
disabled: {
|
|
25
|
+
true: 'cgui:cursor-not-allowed',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
export const fileUploadPrimitiveTriggerStyles = tv({
|
|
30
|
+
base: ['cgui:cursor-pointer'],
|
|
31
|
+
});
|
|
32
|
+
export const fileUploadPrimitiveItemGroupStyles = tv({
|
|
33
|
+
base: ['cgui:flex cgui:flex-col cgui:gap-2 cgui:list-none cgui:p-0 cgui:m-0'],
|
|
34
|
+
});
|
|
35
|
+
export const fileUploadPrimitiveItemStyles = tv({
|
|
36
|
+
base: ['cgui:flex cgui:items-center cgui:gap-3'],
|
|
37
|
+
variants: {
|
|
38
|
+
variant: {
|
|
39
|
+
default: 'cgui:rounded-sm cgui:border cgui:border-stroke-default cgui:p-2',
|
|
40
|
+
clean: '',
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
export const fileUploadPrimitiveItemPreviewStyles = tv({
|
|
45
|
+
base: [
|
|
46
|
+
'cgui:size-10 cgui:shrink-0 cgui:flex cgui:items-center cgui:justify-center cgui:overflow-hidden cgui:rounded-xs',
|
|
47
|
+
],
|
|
48
|
+
});
|
|
49
|
+
export const fileUploadPrimitiveItemPreviewImageStyles = tv({
|
|
50
|
+
base: ['cgui:size-full cgui:object-cover'],
|
|
51
|
+
});
|
|
52
|
+
export const fileUploadPrimitiveItemNameStyles = tv({
|
|
53
|
+
base: ['cgui:text-body-2 cgui:text-fg-darkest cgui:truncate cgui:flex-1'],
|
|
54
|
+
});
|
|
55
|
+
export const fileUploadPrimitiveItemSizeTextStyles = tv({
|
|
56
|
+
base: ['cgui:text-caption-2 cgui:text-fg-regular cgui:shrink-0'],
|
|
57
|
+
});
|
|
58
|
+
export const fileUploadPrimitiveItemDeleteTriggerStyles = tv({
|
|
59
|
+
base: [
|
|
60
|
+
'cgui:shrink-0 cgui:size-6 cgui:flex cgui:items-center cgui:justify-center',
|
|
61
|
+
'cgui:rounded-xs cgui:cursor-pointer',
|
|
62
|
+
'cgui:text-fg-regular cgui:hover:text-fg-darkest',
|
|
63
|
+
'cgui:transition-colors cgui:duration-200',
|
|
64
|
+
],
|
|
65
|
+
});
|
|
66
|
+
export const fileUploadPrimitiveClearTriggerStyles = tv({
|
|
67
|
+
base: ['cgui:cursor-pointer'],
|
|
68
|
+
});
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { Without } from '../../internal/types/common.js';
|
|
2
|
+
import type { WithVariants } from '../../internal/types/composition.js';
|
|
3
|
+
import type { PrimitiveButtonAttributes, PrimitiveDivAttributes, PrimitiveImgAttributes, PrimitiveInputAttributes, PrimitiveLiAttributes, PrimitiveUListAttributes } from '../../internal/types/html-attributes.js';
|
|
4
|
+
import type { WithChildren, WithElementRef } from 'svelte-toolbelt';
|
|
5
|
+
import type { FileUploadPrimitiveClearTriggerVariants, FileUploadPrimitiveDropzoneVariants, FileUploadPrimitiveItemDeleteTriggerVariants, FileUploadPrimitiveItemGroupVariants, FileUploadPrimitiveItemNameVariants, FileUploadPrimitiveItemPreviewImageVariants, FileUploadPrimitiveItemPreviewVariants, FileUploadPrimitiveItemSizeTextVariants, FileUploadPrimitiveItemVariants, FileUploadPrimitiveTriggerVariants } from './styles.js';
|
|
6
|
+
export type FileError = 'TOO_MANY_FILES' | 'FILE_INVALID_TYPE' | 'FILE_TOO_LARGE';
|
|
7
|
+
export type RejectedFile = {
|
|
8
|
+
file: File;
|
|
9
|
+
errors: FileError[];
|
|
10
|
+
};
|
|
11
|
+
export type FileAcceptDetails = {
|
|
12
|
+
files: File[];
|
|
13
|
+
};
|
|
14
|
+
export type FileRejectDetails = {
|
|
15
|
+
files: RejectedFile[];
|
|
16
|
+
};
|
|
17
|
+
export type FileChangeDetails = {
|
|
18
|
+
acceptedFiles: File[];
|
|
19
|
+
rejectedFiles: RejectedFile[];
|
|
20
|
+
};
|
|
21
|
+
type FileUploadPrimitiveRootPropsWithoutHTML = WithElementRef<WithChildren<{
|
|
22
|
+
accept?: string;
|
|
23
|
+
maxFiles?: number;
|
|
24
|
+
maxFileSize?: number;
|
|
25
|
+
disabled?: boolean;
|
|
26
|
+
invalid?: boolean;
|
|
27
|
+
onFileAccept?: (details: FileAcceptDetails) => void;
|
|
28
|
+
onFileReject?: (details: FileRejectDetails) => void;
|
|
29
|
+
onFileChange?: (details: FileChangeDetails) => void;
|
|
30
|
+
}>>;
|
|
31
|
+
export type FileUploadPrimitiveRootProps = FileUploadPrimitiveRootPropsWithoutHTML & Without<PrimitiveDivAttributes, FileUploadPrimitiveRootPropsWithoutHTML>;
|
|
32
|
+
type FileUploadPrimitiveDropzonePropsWithoutHTML = WithVariants<WithElementRef<WithChildren<{
|
|
33
|
+
disableClick?: boolean;
|
|
34
|
+
}>>, FileUploadPrimitiveDropzoneVariants>;
|
|
35
|
+
export type FileUploadPrimitiveDropzoneProps = FileUploadPrimitiveDropzonePropsWithoutHTML & Without<PrimitiveDivAttributes, FileUploadPrimitiveDropzonePropsWithoutHTML>;
|
|
36
|
+
type FileUploadPrimitiveTriggerPropsWithoutHTML = WithVariants<WithElementRef<WithChildren<{}>>, FileUploadPrimitiveTriggerVariants>;
|
|
37
|
+
export type FileUploadPrimitiveTriggerProps = FileUploadPrimitiveTriggerPropsWithoutHTML & Without<PrimitiveButtonAttributes, FileUploadPrimitiveTriggerPropsWithoutHTML>;
|
|
38
|
+
type FileUploadPrimitiveHiddenInputPropsWithoutHTML = WithElementRef<{}>;
|
|
39
|
+
export type FileUploadPrimitiveHiddenInputProps = FileUploadPrimitiveHiddenInputPropsWithoutHTML & Without<PrimitiveInputAttributes, FileUploadPrimitiveHiddenInputPropsWithoutHTML>;
|
|
40
|
+
type FileUploadPrimitiveItemGroupPropsWithoutHTML = WithVariants<WithElementRef<WithChildren<{}>>, FileUploadPrimitiveItemGroupVariants>;
|
|
41
|
+
export type FileUploadPrimitiveItemGroupProps = FileUploadPrimitiveItemGroupPropsWithoutHTML & Without<PrimitiveUListAttributes, FileUploadPrimitiveItemGroupPropsWithoutHTML>;
|
|
42
|
+
type FileUploadPrimitiveItemPropsWithoutHTML = WithVariants<WithElementRef<WithChildren<{
|
|
43
|
+
file: File;
|
|
44
|
+
}>>, FileUploadPrimitiveItemVariants>;
|
|
45
|
+
export type FileUploadPrimitiveItemProps = FileUploadPrimitiveItemPropsWithoutHTML & Without<PrimitiveLiAttributes, FileUploadPrimitiveItemPropsWithoutHTML>;
|
|
46
|
+
type FileUploadPrimitiveItemPreviewPropsWithoutHTML = WithVariants<WithElementRef<WithChildren<{
|
|
47
|
+
type?: string;
|
|
48
|
+
}>>, FileUploadPrimitiveItemPreviewVariants>;
|
|
49
|
+
export type FileUploadPrimitiveItemPreviewProps = FileUploadPrimitiveItemPreviewPropsWithoutHTML & Without<PrimitiveDivAttributes, FileUploadPrimitiveItemPreviewPropsWithoutHTML>;
|
|
50
|
+
type FileUploadPrimitiveItemPreviewImagePropsWithoutHTML = WithVariants<WithElementRef<{}>, FileUploadPrimitiveItemPreviewImageVariants>;
|
|
51
|
+
export type FileUploadPrimitiveItemPreviewImageProps = FileUploadPrimitiveItemPreviewImagePropsWithoutHTML & Without<PrimitiveImgAttributes, FileUploadPrimitiveItemPreviewImagePropsWithoutHTML>;
|
|
52
|
+
type FileUploadPrimitiveItemNamePropsWithoutHTML = WithVariants<WithElementRef<WithChildren<{}>>, FileUploadPrimitiveItemNameVariants>;
|
|
53
|
+
export type FileUploadPrimitiveItemNameProps = FileUploadPrimitiveItemNamePropsWithoutHTML & Without<PrimitiveDivAttributes, FileUploadPrimitiveItemNamePropsWithoutHTML>;
|
|
54
|
+
type FileUploadPrimitiveItemSizeTextPropsWithoutHTML = WithVariants<WithElementRef<WithChildren<{}>>, FileUploadPrimitiveItemSizeTextVariants>;
|
|
55
|
+
export type FileUploadPrimitiveItemSizeTextProps = FileUploadPrimitiveItemSizeTextPropsWithoutHTML & Without<PrimitiveDivAttributes, FileUploadPrimitiveItemSizeTextPropsWithoutHTML>;
|
|
56
|
+
type FileUploadPrimitiveItemDeleteTriggerPropsWithoutHTML = WithVariants<WithElementRef<WithChildren<{}>>, FileUploadPrimitiveItemDeleteTriggerVariants>;
|
|
57
|
+
export type FileUploadPrimitiveItemDeleteTriggerProps = FileUploadPrimitiveItemDeleteTriggerPropsWithoutHTML & Without<PrimitiveButtonAttributes, FileUploadPrimitiveItemDeleteTriggerPropsWithoutHTML>;
|
|
58
|
+
type FileUploadPrimitiveClearTriggerPropsWithoutHTML = WithVariants<WithElementRef<WithChildren<{}>>, FileUploadPrimitiveClearTriggerVariants>;
|
|
59
|
+
export type FileUploadPrimitiveClearTriggerProps = FileUploadPrimitiveClearTriggerPropsWithoutHTML & Without<PrimitiveButtonAttributes, FileUploadPrimitiveClearTriggerPropsWithoutHTML>;
|
|
60
|
+
export type FileUploadContext = {
|
|
61
|
+
readonly acceptedFiles: File[];
|
|
62
|
+
readonly rejectedFiles: RejectedFile[];
|
|
63
|
+
readonly dragging: boolean;
|
|
64
|
+
addFiles(files: FileList | File[]): void;
|
|
65
|
+
removeFile(file: File): void;
|
|
66
|
+
clearFiles(): void;
|
|
67
|
+
openFilePicker(): void;
|
|
68
|
+
};
|
|
69
|
+
export type FileUploadPrimitiveContextProps = {
|
|
70
|
+
children?: import('svelte').Snippet<[FileUploadContext]>;
|
|
71
|
+
};
|
|
72
|
+
type FileUploadRootPropsWithoutHTML = WithElementRef<WithChildren<{
|
|
73
|
+
accept?: string;
|
|
74
|
+
maxFiles?: number;
|
|
75
|
+
maxFileSize?: number;
|
|
76
|
+
disabled?: boolean;
|
|
77
|
+
invalid?: boolean;
|
|
78
|
+
onFileAccept?: (details: FileAcceptDetails) => void;
|
|
79
|
+
onFileReject?: (details: FileRejectDetails) => void;
|
|
80
|
+
onFileChange?: (details: FileChangeDetails) => void;
|
|
81
|
+
}>>;
|
|
82
|
+
export type FileUploadRootProps = FileUploadRootPropsWithoutHTML & Without<PrimitiveDivAttributes, FileUploadRootPropsWithoutHTML>;
|
|
83
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -12,6 +12,7 @@ export * from './dialog/index.js';
|
|
|
12
12
|
export * from './drawer/index.js';
|
|
13
13
|
export * from './dropdown/index.js';
|
|
14
14
|
export * from './field/index.js';
|
|
15
|
+
export * from './file-upload/index.js';
|
|
15
16
|
export * from './icons/index.js';
|
|
16
17
|
export * from './input/index.js';
|
|
17
18
|
export * from './kbd/index.js';
|
package/dist/components/index.js
CHANGED
|
@@ -12,6 +12,7 @@ export * from './dialog/index.js';
|
|
|
12
12
|
export * from './drawer/index.js';
|
|
13
13
|
export * from './dropdown/index.js';
|
|
14
14
|
export * from './field/index.js';
|
|
15
|
+
export * from './file-upload/index.js';
|
|
15
16
|
export * from './icons/index.js';
|
|
16
17
|
export * from './input/index.js';
|
|
17
18
|
export * from './kbd/index.js';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as Ellipsis } from './pagination.ellipsis.svelte';
|
|
2
|
+
export { default as Item } from './pagination.item.svelte';
|
|
3
|
+
export { default as NextButton } from './pagination.next-button.svelte';
|
|
4
|
+
export { default as PageSize } from './pagination.page-size.svelte';
|
|
5
|
+
export { default as PrevButton } from './pagination.prev-button.svelte';
|
|
6
|
+
export { default as Root } from './pagination.root.svelte';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as Ellipsis } from './pagination.ellipsis.svelte';
|
|
2
|
+
export { default as Item } from './pagination.item.svelte';
|
|
3
|
+
export { default as NextButton } from './pagination.next-button.svelte';
|
|
4
|
+
export { default as PageSize } from './pagination.page-size.svelte';
|
|
5
|
+
export { default as PrevButton } from './pagination.prev-button.svelte';
|
|
6
|
+
export { default as Root } from './pagination.root.svelte';
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { PaginationStylesContext } from '../styles.js';
|
|
3
|
-
|
|
4
2
|
import { Icon } from '../../icons/index.js';
|
|
5
3
|
import { cn } from '../../../internal/utils/common.js';
|
|
4
|
+
import { paginationEllipsisStyles } from '../styles.js';
|
|
6
5
|
import type { PaginationEllipsisProps } from '../types.js';
|
|
7
6
|
|
|
8
7
|
let { class: className, ref = $bindable(null), child, ...restProps }: PaginationEllipsisProps = $props();
|
|
9
8
|
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
const classNames = $derived(cn(variants.current.ellipsis(), className));
|
|
9
|
+
const classNames = $derived(cn(paginationEllipsisStyles(), className));
|
|
13
10
|
</script>
|
|
14
11
|
|
|
15
12
|
{#if child}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { cn } from '../../../internal/utils/common.js';
|
|
3
|
-
import { PaginationStylesContext } from '../styles.js';
|
|
4
|
-
import type { PaginationItemProps } from '../types.js';
|
|
5
|
-
|
|
6
3
|
import { Pagination as PaginationPrimitive } from 'bits-ui';
|
|
4
|
+
import { PaginationContext, paginationItemStyles } from '../styles.js';
|
|
5
|
+
import type { PaginationItemProps } from '../types.js';
|
|
7
6
|
|
|
8
7
|
let { page, class: className, ...props }: PaginationItemProps = $props();
|
|
9
8
|
|
|
10
|
-
const
|
|
9
|
+
const ctx = PaginationContext.get();
|
|
11
10
|
</script>
|
|
12
11
|
|
|
13
|
-
<PaginationPrimitive.Page {page} class={cn(
|
|
12
|
+
<PaginationPrimitive.Page {page} class={cn(paginationItemStyles({ size: ctx.current.size }), className)} {...props} />
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { cn } from '../../../internal/utils/common.js';
|
|
3
|
-
import { PaginationStylesContext } from '../styles.js';
|
|
4
|
-
|
|
5
2
|
import { Icon } from '../../icons/index.js';
|
|
3
|
+
import { cn } from '../../../internal/utils/common.js';
|
|
6
4
|
import { Pagination as PaginationPrimitive } from 'bits-ui';
|
|
5
|
+
import { paginationButtonStyles } from '../styles.js';
|
|
7
6
|
import type { PaginationNextButtonProps } from '../types.js';
|
|
8
7
|
|
|
9
8
|
let { class: className, children, ref = $bindable(null), ...props }: PaginationNextButtonProps = $props();
|
|
10
9
|
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
const classNames = $derived(cn(variants.current.button(), className));
|
|
10
|
+
const classNames = $derived(cn(paginationButtonStyles(), className));
|
|
14
11
|
</script>
|
|
15
12
|
|
|
16
13
|
<PaginationPrimitive.NextButton bind:ref class={classNames} {...props}>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Select, type SelectCollection } from '../../select/index.js';
|
|
3
|
+
import { createSelectCollection } from '../../select/select.svelte';
|
|
4
|
+
import type { PaginationPageSizeProps } from '../types.js';
|
|
5
|
+
|
|
6
|
+
let { perPage = $bindable(10), perPageItems = [10, 20, 50, 100], ...restProps }: PaginationPageSizeProps = $props();
|
|
7
|
+
|
|
8
|
+
let value = $state(String(perPage));
|
|
9
|
+
|
|
10
|
+
const collection: SelectCollection = $derived(
|
|
11
|
+
createSelectCollection({
|
|
12
|
+
items: perPageItems.map((item) => ({
|
|
13
|
+
value: String(item),
|
|
14
|
+
label: String(item),
|
|
15
|
+
})),
|
|
16
|
+
})
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
$effect(() => {
|
|
20
|
+
value = String(perPage);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
function onSelect(newValue: string | string[]) {
|
|
24
|
+
if (typeof newValue === 'string' && newValue) {
|
|
25
|
+
perPage = Number(newValue);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<Select.Root
|
|
31
|
+
{collection}
|
|
32
|
+
bind:value
|
|
33
|
+
type="single"
|
|
34
|
+
{onSelect}
|
|
35
|
+
triggerClass="cgui:min-w-15"
|
|
36
|
+
triggerProps={{
|
|
37
|
+
fullWidth: false,
|
|
38
|
+
}}
|
|
39
|
+
{...restProps}
|
|
40
|
+
/>
|
|
@@ -2,14 +2,12 @@
|
|
|
2
2
|
import { Icon } from '../../icons/index.js';
|
|
3
3
|
import { cn } from '../../../internal/utils/common.js';
|
|
4
4
|
import { Pagination as PaginationPrimitive } from 'bits-ui';
|
|
5
|
-
import {
|
|
5
|
+
import { paginationButtonStyles } from '../styles.js';
|
|
6
6
|
import type { PaginationPrevButtonProps } from '../types.js';
|
|
7
7
|
|
|
8
8
|
let { class: className, children, ref = $bindable(null), ...props }: PaginationPrevButtonProps = $props();
|
|
9
9
|
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
const classNames = $derived(cn(variants.current.button(), className));
|
|
10
|
+
const classNames = $derived(cn(paginationButtonStyles(), className));
|
|
13
11
|
</script>
|
|
14
12
|
|
|
15
13
|
<PaginationPrimitive.PrevButton bind:ref class={classNames} {...props}>
|