@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.
@@ -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 {};