@gradio/imageslider 0.2.0
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/CHANGELOG.md +1115 -0
- package/Example.svelte +69 -0
- package/Index.svelte +206 -0
- package/LICENSE +201 -0
- package/README.md +67 -0
- package/dist/Example.svelte +68 -0
- package/dist/Example.svelte.d.ts +19 -0
- package/dist/Index.svelte +178 -0
- package/dist/Index.svelte.d.ts +153 -0
- package/dist/img_01.png +0 -0
- package/dist/img_02.png +0 -0
- package/dist/img_03.png +0 -0
- package/dist/shared/ClearImage.svelte +28 -0
- package/dist/shared/ClearImage.svelte.d.ts +18 -0
- package/dist/shared/Image.svelte +208 -0
- package/dist/shared/Image.svelte.d.ts +41 -0
- package/dist/shared/ImageEl.svelte +119 -0
- package/dist/shared/ImageEl.svelte.d.ts +258 -0
- package/dist/shared/Slider.svelte +183 -0
- package/dist/shared/Slider.svelte.d.ts +28 -0
- package/dist/shared/SliderPreview.svelte +201 -0
- package/dist/shared/SliderPreview.svelte.d.ts +32 -0
- package/dist/shared/SliderUpload.svelte +41 -0
- package/dist/shared/SliderUpload.svelte.d.ts +71 -0
- package/dist/shared/zoom.d.ts +69 -0
- package/dist/shared/zoom.js +349 -0
- package/img_01.png +0 -0
- package/img_02.png +0 -0
- package/img_03.png +0 -0
- package/package.json +47 -0
- package/shared/ClearImage.svelte +30 -0
- package/shared/Image.svelte +235 -0
- package/shared/ImageEl.svelte +165 -0
- package/shared/Slider.svelte +200 -0
- package/shared/SliderPreview.svelte +229 -0
- package/shared/SliderUpload.svelte +46 -0
- package/shared/zoom.ts +487 -0
@@ -0,0 +1,119 @@
|
|
1
|
+
<script>import { createEventDispatcher, onMount, tick } from "svelte";
|
2
|
+
import { resolve_wasm_src } from "@gradio/wasm/svelte";
|
3
|
+
export let src = void 0;
|
4
|
+
export let fullscreen = false;
|
5
|
+
let resolved_src;
|
6
|
+
export let fixed = false;
|
7
|
+
export let transform = "translate(0px, 0px) scale(1)";
|
8
|
+
export let img_el = null;
|
9
|
+
export let hidden = false;
|
10
|
+
export let variant = "upload";
|
11
|
+
export let max_height = 500;
|
12
|
+
let latest_src;
|
13
|
+
$: {
|
14
|
+
resolved_src = src;
|
15
|
+
latest_src = src;
|
16
|
+
const resolving_src = src;
|
17
|
+
resolve_wasm_src(resolving_src).then((s) => {
|
18
|
+
if (latest_src === resolving_src) {
|
19
|
+
resolved_src = s;
|
20
|
+
}
|
21
|
+
});
|
22
|
+
}
|
23
|
+
const dispatch = createEventDispatcher();
|
24
|
+
function get_image_size(img) {
|
25
|
+
if (!img)
|
26
|
+
return { top: 0, left: 0, width: 0, height: 0 };
|
27
|
+
const container = img.parentElement?.getBoundingClientRect();
|
28
|
+
if (!container)
|
29
|
+
return { top: 0, left: 0, width: 0, height: 0 };
|
30
|
+
const naturalAspect = img.naturalWidth / img.naturalHeight;
|
31
|
+
const containerAspect = container.width / container.height;
|
32
|
+
let displayedWidth, displayedHeight;
|
33
|
+
if (naturalAspect > containerAspect) {
|
34
|
+
displayedWidth = container.width;
|
35
|
+
displayedHeight = container.width / naturalAspect;
|
36
|
+
} else {
|
37
|
+
displayedHeight = container.height;
|
38
|
+
displayedWidth = container.height * naturalAspect;
|
39
|
+
}
|
40
|
+
const offsetX = (container.width - displayedWidth) / 2;
|
41
|
+
const offsetY = (container.height - displayedHeight) / 2;
|
42
|
+
return {
|
43
|
+
top: offsetY,
|
44
|
+
left: offsetX,
|
45
|
+
width: displayedWidth,
|
46
|
+
height: displayedHeight
|
47
|
+
};
|
48
|
+
}
|
49
|
+
onMount(() => {
|
50
|
+
const resizer = new ResizeObserver(async (entries) => {
|
51
|
+
for (const entry of entries) {
|
52
|
+
await tick();
|
53
|
+
dispatch("load", get_image_size(img_el));
|
54
|
+
}
|
55
|
+
});
|
56
|
+
resizer.observe(img_el);
|
57
|
+
return () => {
|
58
|
+
resizer.disconnect();
|
59
|
+
};
|
60
|
+
});
|
61
|
+
</script>
|
62
|
+
|
63
|
+
<!-- svelte-ignore a11y-missing-attribute -->
|
64
|
+
<img
|
65
|
+
src={resolved_src}
|
66
|
+
{...$$restProps}
|
67
|
+
class:fixed
|
68
|
+
style:transform
|
69
|
+
bind:this={img_el}
|
70
|
+
class:hidden
|
71
|
+
class:preview={variant === "preview"}
|
72
|
+
class:slider={variant === "upload"}
|
73
|
+
style:max-height={max_height && !fullscreen ? `${max_height}px` : null}
|
74
|
+
class:fullscreen
|
75
|
+
class:small={!fullscreen}
|
76
|
+
on:load={() => dispatch("load", get_image_size(img_el))}
|
77
|
+
/>
|
78
|
+
|
79
|
+
<style>
|
80
|
+
.preview {
|
81
|
+
object-fit: contain;
|
82
|
+
width: 100%;
|
83
|
+
transform-origin: top left;
|
84
|
+
margin: auto;
|
85
|
+
}
|
86
|
+
|
87
|
+
.small {
|
88
|
+
max-height: 500px;
|
89
|
+
}
|
90
|
+
|
91
|
+
.upload {
|
92
|
+
object-fit: contain;
|
93
|
+
max-height: 500px;
|
94
|
+
}
|
95
|
+
|
96
|
+
.fixed {
|
97
|
+
position: absolute;
|
98
|
+
top: 0;
|
99
|
+
left: 0;
|
100
|
+
right: 0;
|
101
|
+
bottom: 0;
|
102
|
+
}
|
103
|
+
|
104
|
+
.fullscreen {
|
105
|
+
width: 100%;
|
106
|
+
height: 100%;
|
107
|
+
}
|
108
|
+
|
109
|
+
:global(.image-container:fullscreen) img {
|
110
|
+
width: 100%;
|
111
|
+
height: 100%;
|
112
|
+
max-height: none;
|
113
|
+
max-width: none;
|
114
|
+
}
|
115
|
+
|
116
|
+
.hidden {
|
117
|
+
opacity: 0;
|
118
|
+
}
|
119
|
+
</style>
|
@@ -0,0 +1,258 @@
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
2
|
+
declare const __propDef: {
|
3
|
+
props: {
|
4
|
+
[x: `data-${string}`]: any;
|
5
|
+
alt?: string | undefined | null;
|
6
|
+
crossorigin?: "anonymous" | "use-credentials" | "" | undefined | null;
|
7
|
+
decoding?: "async" | "auto" | "sync" | undefined | null;
|
8
|
+
fetchpriority?: "auto" | "high" | "low" | undefined | null;
|
9
|
+
height?: number | string | undefined | null;
|
10
|
+
ismap?: boolean | undefined | null;
|
11
|
+
loading?: "eager" | "lazy" | undefined | null;
|
12
|
+
referrerpolicy?: ReferrerPolicy | undefined | null;
|
13
|
+
sizes?: string | undefined | null;
|
14
|
+
src?: string | undefined | null;
|
15
|
+
srcset?: string | undefined | null;
|
16
|
+
usemap?: string | undefined | null;
|
17
|
+
width?: number | string | undefined | null;
|
18
|
+
readonly 'bind:naturalWidth'?: number | undefined | null;
|
19
|
+
readonly 'bind:naturalHeight'?: number | undefined | null;
|
20
|
+
accesskey?: string | undefined | null;
|
21
|
+
autofocus?: boolean | undefined | null;
|
22
|
+
class?: string | undefined | null;
|
23
|
+
contenteditable?: import("svelte/elements").Booleanish | "inherit" | "plaintext-only" | undefined | null;
|
24
|
+
contextmenu?: string | undefined | null;
|
25
|
+
dir?: string | undefined | null;
|
26
|
+
draggable?: import("svelte/elements").Booleanish | undefined | null;
|
27
|
+
enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | null;
|
28
|
+
hidden?: boolean | undefined;
|
29
|
+
id?: string | undefined | null;
|
30
|
+
lang?: string | undefined | null;
|
31
|
+
part?: string | undefined | null;
|
32
|
+
placeholder?: string | undefined | null;
|
33
|
+
slot?: string | undefined | null;
|
34
|
+
spellcheck?: import("svelte/elements").Booleanish | undefined | null;
|
35
|
+
style?: string | undefined | null;
|
36
|
+
tabindex?: number | undefined | null;
|
37
|
+
title?: string | undefined | null;
|
38
|
+
translate?: "yes" | "no" | "" | undefined | null;
|
39
|
+
inert?: boolean | undefined | null;
|
40
|
+
popover?: "auto" | "manual" | "" | undefined | null;
|
41
|
+
radiogroup?: string | undefined | null;
|
42
|
+
role?: import("svelte/elements").AriaRole | undefined | null;
|
43
|
+
about?: string | undefined | null;
|
44
|
+
datatype?: string | undefined | null;
|
45
|
+
inlist?: any;
|
46
|
+
prefix?: string | undefined | null;
|
47
|
+
property?: string | undefined | null;
|
48
|
+
resource?: string | undefined | null;
|
49
|
+
typeof?: string | undefined | null;
|
50
|
+
vocab?: string | undefined | null;
|
51
|
+
autocapitalize?: string | undefined | null;
|
52
|
+
autocorrect?: string | undefined | null;
|
53
|
+
autosave?: string | undefined | null;
|
54
|
+
color?: string | undefined | null;
|
55
|
+
itemprop?: string | undefined | null;
|
56
|
+
itemscope?: boolean | undefined | null;
|
57
|
+
itemtype?: string | undefined | null;
|
58
|
+
itemid?: string | undefined | null;
|
59
|
+
itemref?: string | undefined | null;
|
60
|
+
results?: number | undefined | null;
|
61
|
+
security?: string | undefined | null;
|
62
|
+
unselectable?: "on" | "off" | undefined | null;
|
63
|
+
inputmode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | null;
|
64
|
+
is?: string | undefined | null;
|
65
|
+
'bind:innerHTML'?: string | undefined | null;
|
66
|
+
'bind:textContent'?: string | undefined | null;
|
67
|
+
'bind:innerText'?: string | undefined | null;
|
68
|
+
readonly 'bind:contentRect'?: DOMRectReadOnly | undefined | null;
|
69
|
+
readonly 'bind:contentBoxSize'?: ResizeObserverSize[] | undefined | null;
|
70
|
+
readonly 'bind:borderBoxSize'?: ResizeObserverSize[] | undefined | null;
|
71
|
+
readonly 'bind:devicePixelContentBoxSize'?: ResizeObserverSize[] | undefined | null;
|
72
|
+
'data-sveltekit-keepfocus'?: true | "" | "off" | undefined | null;
|
73
|
+
'data-sveltekit-noscroll'?: true | "" | "off" | undefined | null;
|
74
|
+
'data-sveltekit-preload-code'?: true | "" | "eager" | "viewport" | "hover" | "tap" | "off" | undefined | null;
|
75
|
+
'data-sveltekit-preload-data'?: true | "" | "hover" | "tap" | "off" | undefined | null;
|
76
|
+
'data-sveltekit-reload'?: true | "" | "off" | undefined | null;
|
77
|
+
'data-sveltekit-replacestate'?: true | "" | "off" | undefined | null;
|
78
|
+
'aria-activedescendant'?: string | undefined | null;
|
79
|
+
'aria-atomic'?: import("svelte/elements").Booleanish | undefined | null;
|
80
|
+
'aria-autocomplete'?: "none" | "inline" | "list" | "both" | undefined | null;
|
81
|
+
'aria-busy'?: import("svelte/elements").Booleanish | undefined | null;
|
82
|
+
'aria-checked'?: boolean | "false" | "mixed" | "true" | undefined | null;
|
83
|
+
'aria-colcount'?: number | undefined | null;
|
84
|
+
'aria-colindex'?: number | undefined | null;
|
85
|
+
'aria-colspan'?: number | undefined | null;
|
86
|
+
'aria-controls'?: string | undefined | null;
|
87
|
+
'aria-current'?: import("svelte/elements").Booleanish | "page" | "step" | "location" | "date" | "time" | undefined | null;
|
88
|
+
'aria-describedby'?: string | undefined | null;
|
89
|
+
'aria-details'?: string | undefined | null;
|
90
|
+
'aria-disabled'?: import("svelte/elements").Booleanish | undefined | null;
|
91
|
+
'aria-dropeffect'?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined | null;
|
92
|
+
'aria-errormessage'?: string | undefined | null;
|
93
|
+
'aria-expanded'?: import("svelte/elements").Booleanish | undefined | null;
|
94
|
+
'aria-flowto'?: string | undefined | null;
|
95
|
+
'aria-grabbed'?: import("svelte/elements").Booleanish | undefined | null;
|
96
|
+
'aria-haspopup'?: import("svelte/elements").Booleanish | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined | null;
|
97
|
+
'aria-hidden'?: import("svelte/elements").Booleanish | undefined | null;
|
98
|
+
'aria-invalid'?: import("svelte/elements").Booleanish | "grammar" | "spelling" | undefined | null;
|
99
|
+
'aria-keyshortcuts'?: string | undefined | null;
|
100
|
+
'aria-label'?: string | undefined | null;
|
101
|
+
'aria-labelledby'?: string | undefined | null;
|
102
|
+
'aria-level'?: number | undefined | null;
|
103
|
+
'aria-live'?: "off" | "assertive" | "polite" | undefined | null;
|
104
|
+
'aria-modal'?: import("svelte/elements").Booleanish | undefined | null;
|
105
|
+
'aria-multiline'?: import("svelte/elements").Booleanish | undefined | null;
|
106
|
+
'aria-multiselectable'?: import("svelte/elements").Booleanish | undefined | null;
|
107
|
+
'aria-orientation'?: "horizontal" | "vertical" | undefined | null;
|
108
|
+
'aria-owns'?: string | undefined | null;
|
109
|
+
'aria-placeholder'?: string | undefined | null;
|
110
|
+
'aria-posinset'?: number | undefined | null;
|
111
|
+
'aria-pressed'?: boolean | "false" | "mixed" | "true" | undefined | null;
|
112
|
+
'aria-readonly'?: import("svelte/elements").Booleanish | undefined | null;
|
113
|
+
'aria-relevant'?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined | null;
|
114
|
+
'aria-required'?: import("svelte/elements").Booleanish | undefined | null;
|
115
|
+
'aria-roledescription'?: string | undefined | null;
|
116
|
+
'aria-rowcount'?: number | undefined | null;
|
117
|
+
'aria-rowindex'?: number | undefined | null;
|
118
|
+
'aria-rowspan'?: number | undefined | null;
|
119
|
+
'aria-selected'?: import("svelte/elements").Booleanish | undefined | null;
|
120
|
+
'aria-setsize'?: number | undefined | null;
|
121
|
+
'aria-sort'?: "none" | "ascending" | "descending" | "other" | undefined | null;
|
122
|
+
'aria-valuemax'?: number | undefined | null;
|
123
|
+
'aria-valuemin'?: number | undefined | null;
|
124
|
+
'aria-valuenow'?: number | undefined | null;
|
125
|
+
'aria-valuetext'?: string | undefined | null;
|
126
|
+
'on:copy'?: import("svelte/elements").ClipboardEventHandler<HTMLImageElement> | null | undefined;
|
127
|
+
'on:cut'?: import("svelte/elements").ClipboardEventHandler<HTMLImageElement> | null | undefined;
|
128
|
+
'on:paste'?: import("svelte/elements").ClipboardEventHandler<HTMLImageElement> | null | undefined;
|
129
|
+
'on:compositionend'?: import("svelte/elements").CompositionEventHandler<HTMLImageElement> | null | undefined;
|
130
|
+
'on:compositionstart'?: import("svelte/elements").CompositionEventHandler<HTMLImageElement> | null | undefined;
|
131
|
+
'on:compositionupdate'?: import("svelte/elements").CompositionEventHandler<HTMLImageElement> | null | undefined;
|
132
|
+
'on:focus'?: import("svelte/elements").FocusEventHandler<HTMLImageElement> | null | undefined;
|
133
|
+
'on:focusin'?: import("svelte/elements").FocusEventHandler<HTMLImageElement> | null | undefined;
|
134
|
+
'on:focusout'?: import("svelte/elements").FocusEventHandler<HTMLImageElement> | null | undefined;
|
135
|
+
'on:blur'?: import("svelte/elements").FocusEventHandler<HTMLImageElement> | null | undefined;
|
136
|
+
'on:change'?: import("svelte/elements").FormEventHandler<HTMLImageElement> | null | undefined;
|
137
|
+
'on:beforeinput'?: import("svelte/elements").EventHandler<InputEvent, HTMLImageElement> | null | undefined;
|
138
|
+
'on:input'?: import("svelte/elements").FormEventHandler<HTMLImageElement> | null | undefined;
|
139
|
+
'on:reset'?: import("svelte/elements").FormEventHandler<HTMLImageElement> | null | undefined;
|
140
|
+
'on:submit'?: import("svelte/elements").EventHandler<SubmitEvent, HTMLImageElement> | null | undefined;
|
141
|
+
'on:invalid'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
142
|
+
'on:formdata'?: import("svelte/elements").EventHandler<FormDataEvent, HTMLImageElement> | null | undefined;
|
143
|
+
'on:load'?: import("svelte/elements").EventHandler | undefined | null;
|
144
|
+
'on:error'?: import("svelte/elements").EventHandler | undefined | null;
|
145
|
+
'on:beforetoggle'?: import("svelte/elements").ToggleEventHandler<HTMLImageElement> | null | undefined;
|
146
|
+
'on:toggle'?: import("svelte/elements").ToggleEventHandler<HTMLImageElement> | null | undefined;
|
147
|
+
'on:keydown'?: import("svelte/elements").KeyboardEventHandler<HTMLImageElement> | null | undefined;
|
148
|
+
'on:keypress'?: import("svelte/elements").KeyboardEventHandler<HTMLImageElement> | null | undefined;
|
149
|
+
'on:keyup'?: import("svelte/elements").KeyboardEventHandler<HTMLImageElement> | null | undefined;
|
150
|
+
'on:abort'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
151
|
+
'on:canplay'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
152
|
+
'on:canplaythrough'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
153
|
+
'on:cuechange'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
154
|
+
'on:durationchange'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
155
|
+
'on:emptied'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
156
|
+
'on:encrypted'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
157
|
+
'on:ended'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
158
|
+
'on:loadeddata'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
159
|
+
'on:loadedmetadata'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
160
|
+
'on:loadstart'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
161
|
+
'on:pause'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
162
|
+
'on:play'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
163
|
+
'on:playing'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
164
|
+
'on:progress'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
165
|
+
'on:ratechange'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
166
|
+
'on:seeked'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
167
|
+
'on:seeking'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
168
|
+
'on:stalled'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
169
|
+
'on:suspend'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
170
|
+
'on:timeupdate'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
171
|
+
'on:volumechange'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
172
|
+
'on:waiting'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
173
|
+
'on:auxclick'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
174
|
+
'on:click'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
175
|
+
'on:contextmenu'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
176
|
+
'on:dblclick'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
177
|
+
'on:drag'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
178
|
+
'on:dragend'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
179
|
+
'on:dragenter'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
180
|
+
'on:dragexit'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
181
|
+
'on:dragleave'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
182
|
+
'on:dragover'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
183
|
+
'on:dragstart'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
184
|
+
'on:drop'?: import("svelte/elements").DragEventHandler<HTMLImageElement> | null | undefined;
|
185
|
+
'on:mousedown'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
186
|
+
'on:mouseenter'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
187
|
+
'on:mouseleave'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
188
|
+
'on:mousemove'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
189
|
+
'on:mouseout'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
190
|
+
'on:mouseover'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
191
|
+
'on:mouseup'?: import("svelte/elements").MouseEventHandler<HTMLImageElement> | null | undefined;
|
192
|
+
'on:select'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
193
|
+
'on:selectionchange'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
194
|
+
'on:selectstart'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
195
|
+
'on:touchcancel'?: import("svelte/elements").TouchEventHandler<HTMLImageElement> | null | undefined;
|
196
|
+
'on:touchend'?: import("svelte/elements").TouchEventHandler<HTMLImageElement> | null | undefined;
|
197
|
+
'on:touchmove'?: import("svelte/elements").TouchEventHandler<HTMLImageElement> | null | undefined;
|
198
|
+
'on:touchstart'?: import("svelte/elements").TouchEventHandler<HTMLImageElement> | null | undefined;
|
199
|
+
'on:gotpointercapture'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
200
|
+
'on:pointercancel'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
201
|
+
'on:pointerdown'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
202
|
+
'on:pointerenter'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
203
|
+
'on:pointerleave'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
204
|
+
'on:pointermove'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
205
|
+
'on:pointerout'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
206
|
+
'on:pointerover'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
207
|
+
'on:pointerup'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
208
|
+
'on:lostpointercapture'?: import("svelte/elements").PointerEventHandler<HTMLImageElement> | null | undefined;
|
209
|
+
'on:gamepadconnected'?: import("svelte/elements").GamepadEventHandler<HTMLImageElement> | null | undefined;
|
210
|
+
'on:gamepaddisconnected'?: import("svelte/elements").GamepadEventHandler<HTMLImageElement> | null | undefined;
|
211
|
+
'on:scroll'?: import("svelte/elements").UIEventHandler<HTMLImageElement> | null | undefined;
|
212
|
+
'on:scrollend'?: import("svelte/elements").UIEventHandler<HTMLImageElement> | null | undefined;
|
213
|
+
'on:resize'?: import("svelte/elements").UIEventHandler<HTMLImageElement> | null | undefined;
|
214
|
+
'on:wheel'?: import("svelte/elements").WheelEventHandler<HTMLImageElement> | null | undefined;
|
215
|
+
'on:animationstart'?: import("svelte/elements").AnimationEventHandler<HTMLImageElement> | null | undefined;
|
216
|
+
'on:animationend'?: import("svelte/elements").AnimationEventHandler<HTMLImageElement> | null | undefined;
|
217
|
+
'on:animationiteration'?: import("svelte/elements").AnimationEventHandler<HTMLImageElement> | null | undefined;
|
218
|
+
'on:transitionstart'?: import("svelte/elements").TransitionEventHandler<HTMLImageElement> | null | undefined;
|
219
|
+
'on:transitionrun'?: import("svelte/elements").TransitionEventHandler<HTMLImageElement> | null | undefined;
|
220
|
+
'on:transitionend'?: import("svelte/elements").TransitionEventHandler<HTMLImageElement> | null | undefined;
|
221
|
+
'on:transitioncancel'?: import("svelte/elements").TransitionEventHandler<HTMLImageElement> | null | undefined;
|
222
|
+
'on:outrostart'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLImageElement> | null | undefined;
|
223
|
+
'on:outroend'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLImageElement> | null | undefined;
|
224
|
+
'on:introstart'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLImageElement> | null | undefined;
|
225
|
+
'on:introend'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLImageElement> | null | undefined;
|
226
|
+
'on:message'?: import("svelte/elements").MessageEventHandler<HTMLImageElement> | null | undefined;
|
227
|
+
'on:messageerror'?: import("svelte/elements").MessageEventHandler<HTMLImageElement> | null | undefined;
|
228
|
+
'on:visibilitychange'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
229
|
+
'on:cancel'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
230
|
+
'on:close'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
231
|
+
'on:fullscreenchange'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
232
|
+
'on:fullscreenerror'?: import("svelte/elements").EventHandler<Event, HTMLImageElement> | null | undefined;
|
233
|
+
"data-testid"?: string | undefined;
|
234
|
+
fixed?: boolean | undefined;
|
235
|
+
transform?: string | undefined;
|
236
|
+
img_el?: HTMLImageElement | undefined;
|
237
|
+
variant?: ("preview" | "upload") | undefined;
|
238
|
+
max_height?: number | undefined;
|
239
|
+
fullscreen?: boolean | undefined;
|
240
|
+
};
|
241
|
+
events: {
|
242
|
+
load: CustomEvent<{
|
243
|
+
top: number;
|
244
|
+
left: number;
|
245
|
+
width: number;
|
246
|
+
height: number;
|
247
|
+
}>;
|
248
|
+
} & {
|
249
|
+
[evt: string]: CustomEvent<any>;
|
250
|
+
};
|
251
|
+
slots: {};
|
252
|
+
};
|
253
|
+
export type ImageElProps = typeof __propDef.props;
|
254
|
+
export type ImageElEvents = typeof __propDef.events;
|
255
|
+
export type ImageElSlots = typeof __propDef.slots;
|
256
|
+
export default class ImageEl extends SvelteComponent<ImageElProps, ImageElEvents, ImageElSlots> {
|
257
|
+
}
|
258
|
+
export {};
|
@@ -0,0 +1,183 @@
|
|
1
|
+
<script>import { onMount } from "svelte";
|
2
|
+
import { drag } from "d3-drag";
|
3
|
+
import { select } from "d3-selection";
|
4
|
+
function clamp(value, min, max) {
|
5
|
+
return Math.min(Math.max(value, min), max);
|
6
|
+
}
|
7
|
+
export let position = 0.5;
|
8
|
+
export let disabled = false;
|
9
|
+
export let slider_color = "var(--border-color-primary)";
|
10
|
+
export let image_size = { top: 0, left: 0, width: 0, height: 0 };
|
11
|
+
export let el = void 0;
|
12
|
+
export let parent_el = void 0;
|
13
|
+
let inner;
|
14
|
+
let px = 0;
|
15
|
+
let active = false;
|
16
|
+
let container_width = 0;
|
17
|
+
function set_position(width) {
|
18
|
+
container_width = parent_el?.getBoundingClientRect().width || 0;
|
19
|
+
if (width === 0) {
|
20
|
+
image_size.width = el?.getBoundingClientRect().width || 0;
|
21
|
+
}
|
22
|
+
px = clamp(
|
23
|
+
image_size.width * position + image_size.left,
|
24
|
+
0,
|
25
|
+
container_width
|
26
|
+
);
|
27
|
+
}
|
28
|
+
function round(n, points) {
|
29
|
+
const mod = Math.pow(10, points);
|
30
|
+
return Math.round((n + Number.EPSILON) * mod) / mod;
|
31
|
+
}
|
32
|
+
function update_position(x) {
|
33
|
+
px = clamp(x, 0, container_width);
|
34
|
+
position = round((x - image_size.left) / image_size.width, 5);
|
35
|
+
}
|
36
|
+
function drag_start(event) {
|
37
|
+
if (disabled)
|
38
|
+
return;
|
39
|
+
active = true;
|
40
|
+
update_position(event.x);
|
41
|
+
}
|
42
|
+
function drag_move(event) {
|
43
|
+
if (disabled)
|
44
|
+
return;
|
45
|
+
update_position(event.x);
|
46
|
+
}
|
47
|
+
function drag_end() {
|
48
|
+
if (disabled)
|
49
|
+
return;
|
50
|
+
active = false;
|
51
|
+
}
|
52
|
+
function update_position_from_pc(pc) {
|
53
|
+
px = clamp(image_size.width * pc + image_size.left, 0, container_width);
|
54
|
+
}
|
55
|
+
$:
|
56
|
+
set_position(image_size.width);
|
57
|
+
$:
|
58
|
+
update_position_from_pc(position);
|
59
|
+
onMount(() => {
|
60
|
+
set_position(image_size.width);
|
61
|
+
const drag_handler = drag().on("start", drag_start).on("drag", drag_move).on("end", drag_end);
|
62
|
+
select(inner).call(drag_handler);
|
63
|
+
});
|
64
|
+
</script>
|
65
|
+
|
66
|
+
<svelte:window on:resize={() => set_position(image_size.width)} />
|
67
|
+
|
68
|
+
<div class="wrap" role="none" bind:this={parent_el}>
|
69
|
+
<div class="content" bind:this={el}>
|
70
|
+
<slot />
|
71
|
+
</div>
|
72
|
+
<div
|
73
|
+
class="outer"
|
74
|
+
class:disabled
|
75
|
+
bind:this={inner}
|
76
|
+
role="none"
|
77
|
+
style="transform: translateX({px}px)"
|
78
|
+
class:grab={active}
|
79
|
+
>
|
80
|
+
<span class="icon-wrap" class:active class:disabled
|
81
|
+
><span class="icon left">◢</span><span
|
82
|
+
class="icon center"
|
83
|
+
style:--color={slider_color}
|
84
|
+
></span><span class="icon right">◢</span></span
|
85
|
+
>
|
86
|
+
<div class="inner" style:--color={slider_color}></div>
|
87
|
+
</div>
|
88
|
+
</div>
|
89
|
+
|
90
|
+
<style>
|
91
|
+
.wrap {
|
92
|
+
position: relative;
|
93
|
+
width: 100%;
|
94
|
+
height: 100%;
|
95
|
+
z-index: var(--layer-1);
|
96
|
+
overflow: hidden;
|
97
|
+
}
|
98
|
+
|
99
|
+
.icon-wrap {
|
100
|
+
display: block;
|
101
|
+
position: absolute;
|
102
|
+
top: 50%;
|
103
|
+
transform: translate(-20.5px, -50%);
|
104
|
+
left: 10px;
|
105
|
+
width: 40px;
|
106
|
+
transition: 0.2s;
|
107
|
+
color: var(--body-text-color);
|
108
|
+
height: 30px;
|
109
|
+
border-radius: 5px;
|
110
|
+
background-color: var(--color-accent);
|
111
|
+
display: flex;
|
112
|
+
align-items: center;
|
113
|
+
justify-content: center;
|
114
|
+
z-index: var(--layer-3);
|
115
|
+
box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.3);
|
116
|
+
font-size: 12px;
|
117
|
+
}
|
118
|
+
|
119
|
+
.icon.left {
|
120
|
+
transform: rotate(135deg);
|
121
|
+
text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.1);
|
122
|
+
}
|
123
|
+
|
124
|
+
.icon.right {
|
125
|
+
transform: rotate(-45deg);
|
126
|
+
text-shadow: -1px -1px 1px rgba(0, 0, 0, 0.1);
|
127
|
+
}
|
128
|
+
|
129
|
+
.icon.center {
|
130
|
+
display: block;
|
131
|
+
width: 1px;
|
132
|
+
height: 100%;
|
133
|
+
background-color: var(--color);
|
134
|
+
opacity: 0.1;
|
135
|
+
}
|
136
|
+
|
137
|
+
.icon-wrap.active {
|
138
|
+
opacity: 0;
|
139
|
+
}
|
140
|
+
|
141
|
+
.icon-wrap.disabled {
|
142
|
+
opacity: 0;
|
143
|
+
}
|
144
|
+
|
145
|
+
.outer {
|
146
|
+
width: 20px;
|
147
|
+
height: 100%;
|
148
|
+
position: absolute;
|
149
|
+
cursor: grab;
|
150
|
+
position: absolute;
|
151
|
+
top: 0;
|
152
|
+
left: -10px;
|
153
|
+
pointer-events: auto;
|
154
|
+
z-index: var(--layer-2);
|
155
|
+
}
|
156
|
+
.grab {
|
157
|
+
cursor: grabbing;
|
158
|
+
}
|
159
|
+
|
160
|
+
.inner {
|
161
|
+
width: 1px;
|
162
|
+
height: 100%;
|
163
|
+
background: var(--color);
|
164
|
+
position: absolute;
|
165
|
+
left: calc((100% - 2px) / 2);
|
166
|
+
}
|
167
|
+
|
168
|
+
.disabled {
|
169
|
+
cursor: auto;
|
170
|
+
}
|
171
|
+
|
172
|
+
.disabled .inner {
|
173
|
+
box-shadow: none;
|
174
|
+
}
|
175
|
+
|
176
|
+
.content {
|
177
|
+
width: 100%;
|
178
|
+
height: 100%;
|
179
|
+
display: flex;
|
180
|
+
justify-content: center;
|
181
|
+
align-items: center;
|
182
|
+
}
|
183
|
+
</style>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
2
|
+
declare const __propDef: {
|
3
|
+
props: {
|
4
|
+
position?: number | undefined;
|
5
|
+
disabled?: boolean | undefined;
|
6
|
+
slider_color?: string | undefined;
|
7
|
+
image_size?: {
|
8
|
+
top: number;
|
9
|
+
left: number;
|
10
|
+
width: number;
|
11
|
+
height: number;
|
12
|
+
} | undefined;
|
13
|
+
el?: HTMLDivElement | undefined;
|
14
|
+
parent_el?: HTMLDivElement | undefined;
|
15
|
+
};
|
16
|
+
events: {
|
17
|
+
[evt: string]: CustomEvent<any>;
|
18
|
+
};
|
19
|
+
slots: {
|
20
|
+
default: {};
|
21
|
+
};
|
22
|
+
};
|
23
|
+
export type SliderProps = typeof __propDef.props;
|
24
|
+
export type SliderEvents = typeof __propDef.events;
|
25
|
+
export type SliderSlots = typeof __propDef.slots;
|
26
|
+
export default class Slider extends SvelteComponent<SliderProps, SliderEvents, SliderSlots> {
|
27
|
+
}
|
28
|
+
export {};
|