vistaview 1.0.3 → 2.0.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/LICENSE +21 -0
- package/README.md +18 -61
- package/{dist/lib/extensions/dailymotion-video.d.ts → extensions/dailymotion-video/dist/main.d.ts} +3 -3
- package/extensions/dailymotion-video/dist/main.d.ts.map +1 -0
- package/extensions/dailymotion-video/dist/main.js +72 -0
- package/extensions/dailymotion-video/dist/main.js.map +1 -0
- package/extensions/dailymotion-video/dist/main.test.d.ts +2 -0
- package/extensions/dailymotion-video/dist/main.test.d.ts.map +1 -0
- package/extensions/dailymotion-video/dist/main.umd.cjs +2 -0
- package/extensions/dailymotion-video/dist/main.umd.cjs.map +1 -0
- package/extensions/download/dist/main.d.ts +4 -0
- package/extensions/download/dist/main.d.ts.map +1 -0
- package/extensions/download/dist/main.js +42 -0
- package/extensions/download/dist/main.js.map +1 -0
- package/extensions/download/dist/main.test.d.ts +2 -0
- package/extensions/download/dist/main.test.d.ts.map +1 -0
- package/extensions/download/dist/main.umd.cjs +2 -0
- package/extensions/download/dist/main.umd.cjs.map +1 -0
- package/{dist/lib/extensions/google-maps.d.ts → extensions/google-maps/dist/main.d.ts} +3 -3
- package/extensions/google-maps/dist/main.d.ts.map +1 -0
- package/extensions/google-maps/dist/main.js +96 -0
- package/extensions/google-maps/dist/main.js.map +1 -0
- package/extensions/google-maps/dist/main.test.d.ts +2 -0
- package/extensions/google-maps/dist/main.test.d.ts.map +1 -0
- package/extensions/google-maps/dist/main.umd.cjs +2 -0
- package/extensions/google-maps/dist/main.umd.cjs.map +1 -0
- package/extensions/image-story/dist/main.d.ts +16 -0
- package/extensions/image-story/dist/main.d.ts.map +1 -0
- package/extensions/image-story/dist/main.js +600 -0
- package/extensions/image-story/dist/main.js.map +1 -0
- package/extensions/image-story/dist/main.test.d.ts +2 -0
- package/extensions/image-story/dist/main.test.d.ts.map +1 -0
- package/extensions/image-story/dist/main.umd.cjs +3 -0
- package/extensions/image-story/dist/main.umd.cjs.map +1 -0
- package/extensions/image-story/dist/style.css +1 -0
- package/extensions/logger/dist/main.d.ts +3 -0
- package/extensions/logger/dist/main.d.ts.map +1 -0
- package/extensions/logger/dist/main.js +23 -0
- package/extensions/logger/dist/main.js.map +1 -0
- package/extensions/logger/dist/main.test.d.ts +2 -0
- package/extensions/logger/dist/main.test.d.ts.map +1 -0
- package/extensions/logger/dist/main.umd.cjs +2 -0
- package/extensions/logger/dist/main.umd.cjs.map +1 -0
- package/{dist/lib/extensions/mapbox.d.ts → extensions/mapbox/dist/main.d.ts} +3 -3
- package/extensions/mapbox/dist/main.d.ts.map +1 -0
- package/extensions/mapbox/dist/main.js +114 -0
- package/extensions/mapbox/dist/main.js.map +1 -0
- package/extensions/mapbox/dist/main.test.d.ts +2 -0
- package/extensions/mapbox/dist/main.test.d.ts.map +1 -0
- package/extensions/mapbox/dist/main.umd.cjs +2 -0
- package/extensions/mapbox/dist/main.umd.cjs.map +1 -0
- package/{dist/lib/extensions/openstreetmap.d.ts → extensions/openstreetmap/dist/main.d.ts} +3 -3
- package/extensions/openstreetmap/dist/main.d.ts.map +1 -0
- package/extensions/openstreetmap/dist/main.js +114 -0
- package/extensions/openstreetmap/dist/main.js.map +1 -0
- package/extensions/openstreetmap/dist/main.test.d.ts +2 -0
- package/extensions/openstreetmap/dist/main.test.d.ts.map +1 -0
- package/extensions/openstreetmap/dist/main.umd.cjs +2 -0
- package/extensions/openstreetmap/dist/main.umd.cjs.map +1 -0
- package/{dist/lib/extensions/select-box.d.ts → extensions/select-box/dist/main.d.ts} +2 -2
- package/extensions/select-box/dist/main.d.ts.map +1 -0
- package/extensions/select-box/dist/main.js +25 -0
- package/extensions/select-box/dist/main.js.map +1 -0
- package/extensions/select-box/dist/main.umd.cjs +2 -0
- package/extensions/select-box/dist/main.umd.cjs.map +1 -0
- package/{dist/lib/extensions/streamable-video.d.ts → extensions/streamable-video/dist/main.d.ts} +3 -3
- package/extensions/streamable-video/dist/main.d.ts.map +1 -0
- package/extensions/streamable-video/dist/main.js +68 -0
- package/extensions/streamable-video/dist/main.js.map +1 -0
- package/extensions/streamable-video/dist/main.test.d.ts +2 -0
- package/extensions/streamable-video/dist/main.test.d.ts.map +1 -0
- package/extensions/streamable-video/dist/main.umd.cjs +2 -0
- package/extensions/streamable-video/dist/main.umd.cjs.map +1 -0
- package/{dist/lib/extensions/twitch-video.d.ts → extensions/twitch-video/dist/main.d.ts} +3 -3
- package/extensions/twitch-video/dist/main.d.ts.map +1 -0
- package/extensions/twitch-video/dist/main.js +81 -0
- package/extensions/twitch-video/dist/main.js.map +1 -0
- package/extensions/twitch-video/dist/main.umd.cjs +2 -0
- package/extensions/twitch-video/dist/main.umd.cjs.map +1 -0
- package/{dist/lib/extensions/vidyard-video.d.ts → extensions/vidyard-video/dist/main.d.ts} +3 -3
- package/extensions/vidyard-video/dist/main.d.ts.map +1 -0
- package/extensions/vidyard-video/dist/main.js +72 -0
- package/extensions/vidyard-video/dist/main.js.map +1 -0
- package/extensions/vidyard-video/dist/main.test.d.ts +2 -0
- package/extensions/vidyard-video/dist/main.test.d.ts.map +1 -0
- package/extensions/vidyard-video/dist/main.umd.cjs +2 -0
- package/extensions/vidyard-video/dist/main.umd.cjs.map +1 -0
- package/{dist/lib/extensions/vimeo-video.d.ts → extensions/vimeo-video/dist/main.d.ts} +3 -3
- package/extensions/vimeo-video/dist/main.d.ts.map +1 -0
- package/extensions/vimeo-video/dist/main.js +68 -0
- package/extensions/vimeo-video/dist/main.js.map +1 -0
- package/extensions/vimeo-video/dist/main.test.d.ts +2 -0
- package/extensions/vimeo-video/dist/main.test.d.ts.map +1 -0
- package/extensions/vimeo-video/dist/main.umd.cjs +2 -0
- package/extensions/vimeo-video/dist/main.umd.cjs.map +1 -0
- package/{dist/lib/extensions/wistia-video.d.ts → extensions/wistia-video/dist/main.d.ts} +3 -3
- package/extensions/wistia-video/dist/main.d.ts.map +1 -0
- package/extensions/wistia-video/dist/main.js +72 -0
- package/extensions/wistia-video/dist/main.js.map +1 -0
- package/extensions/wistia-video/dist/main.test.d.ts +2 -0
- package/extensions/wistia-video/dist/main.test.d.ts.map +1 -0
- package/extensions/wistia-video/dist/main.umd.cjs +2 -0
- package/extensions/wistia-video/dist/main.umd.cjs.map +1 -0
- package/{dist/lib/extensions/youtube-video.d.ts → extensions/youtube-video/dist/main.d.ts} +3 -3
- package/extensions/youtube-video/dist/main.d.ts.map +1 -0
- package/extensions/youtube-video/dist/main.js +80 -0
- package/extensions/youtube-video/dist/main.js.map +1 -0
- package/extensions/youtube-video/dist/main.test.d.ts +2 -0
- package/extensions/youtube-video/dist/main.test.d.ts.map +1 -0
- package/extensions/youtube-video/dist/main.umd.cjs +2 -0
- package/extensions/youtube-video/dist/main.umd.cjs.map +1 -0
- package/frameworks/react/dist/main.d.ts +3 -0
- package/frameworks/react/dist/main.es.js +51 -0
- package/frameworks/react/dist/main.es.js.map +1 -0
- package/frameworks/react/dist/test-setup.d.ts +1 -0
- package/frameworks/react/dist/use-vistaview.d.ts +2 -0
- package/frameworks/react/dist/vistaview.d.ts +13 -0
- package/frameworks/solid/dist/dev.js +77 -0
- package/frameworks/solid/dist/dev.jsx +72 -0
- package/frameworks/solid/dist/index.d.ts +18 -0
- package/frameworks/solid/dist/index.js +76 -0
- package/frameworks/solid/dist/index.jsx +71 -0
- package/frameworks/svelte/dist/VistaView.svelte +65 -0
- package/frameworks/svelte/dist/VistaView.svelte.d.ts +46 -0
- package/frameworks/svelte/dist/index.d.ts +3 -0
- package/frameworks/svelte/dist/index.js +2 -0
- package/frameworks/svelte/dist/types.d.ts +14 -0
- package/frameworks/svelte/dist/types.js +1 -0
- package/frameworks/svelte/dist/use-vistaview.d.ts +2 -0
- package/frameworks/svelte/dist/use-vistaview.js +24 -0
- package/frameworks/svelte/dist/use-vistaview.test.d.ts +1 -0
- package/frameworks/svelte/dist/use-vistaview.test.js +115 -0
- package/frameworks/vue/dist/main.es.js +95 -0
- package/frameworks/vue/dist/main.es.js.map +1 -0
- package/{dist → main/dist}/lib/components.d.ts +1 -2
- package/main/dist/lib/components.js +107 -0
- package/main/dist/lib/defaults/close.d.ts +2 -0
- package/main/dist/lib/defaults/close.js +4 -0
- package/main/dist/lib/defaults/image-setup.d.ts +3 -0
- package/main/dist/lib/defaults/image-setup.js +4 -0
- package/main/dist/lib/defaults/init.d.ts +2 -0
- package/main/dist/lib/defaults/init.js +97 -0
- package/main/dist/lib/defaults/open.d.ts +2 -0
- package/main/dist/lib/defaults/open.js +8 -0
- package/main/dist/lib/defaults/options.d.ts +2 -0
- package/main/dist/lib/defaults/options.js +15 -0
- package/{dist → main/dist}/lib/defaults/transition.d.ts +2 -3
- package/main/dist/lib/defaults/transition.js +40 -0
- package/{dist → main/dist}/lib/main.d.ts +1 -2
- package/main/dist/lib/main.js +66 -0
- package/{dist → main/dist}/lib/throttle.d.ts +0 -1
- package/main/dist/lib/throttle.js +21 -0
- package/{dist → main/dist}/lib/types.d.ts +4 -5
- package/main/dist/lib/types.js +1 -0
- package/{dist → main/dist}/lib/utils/get-fitted-size.d.ts +0 -1
- package/main/dist/lib/utils/get-fitted-size.js +53 -0
- package/{dist → main/dist}/lib/utils/get-full-size-dim.d.ts +0 -1
- package/main/dist/lib/utils/get-full-size-dim.js +35 -0
- package/{dist → main/dist}/lib/utils/get-style.d.ts +0 -1
- package/main/dist/lib/utils/get-style.js +19 -0
- package/{dist → main/dist}/lib/utils/index.d.ts +0 -1
- package/main/dist/lib/utils/index.js +7 -0
- package/{dist → main/dist}/lib/utils/is-not-zero-css.d.ts +0 -1
- package/main/dist/lib/utils/is-not-zero-css.js +3 -0
- package/{dist → main/dist}/lib/utils/parse-element.d.ts +1 -2
- package/main/dist/lib/utils/parse-element.js +67 -0
- package/{dist → main/dist}/lib/vista-box.d.ts +3 -4
- package/main/dist/lib/vista-box.js +466 -0
- package/{dist → main/dist}/lib/vista-hires-transition.d.ts +2 -3
- package/main/dist/lib/vista-hires-transition.js +108 -0
- package/{dist → main/dist}/lib/vista-image-event.d.ts +2 -3
- package/main/dist/lib/vista-image-event.js +166 -0
- package/{dist → main/dist}/lib/vista-image.d.ts +2 -3
- package/main/dist/lib/vista-image.js +274 -0
- package/{dist → main/dist}/lib/vista-pointers.d.ts +1 -2
- package/main/dist/lib/vista-pointers.js +163 -0
- package/{dist → main/dist}/lib/vista-state.d.ts +2 -3
- package/main/dist/lib/vista-state.js +15 -0
- package/{dist → main/dist}/lib/vista-view.d.ts +2 -3
- package/main/dist/lib/vista-view.js +576 -0
- package/main/dist/style.css +1 -0
- package/main/dist/styles/autumn-amber.css +1 -0
- package/main/dist/styles/cotton-candy.css +1 -0
- package/main/dist/styles/dark-rounded.css +1 -0
- package/main/dist/styles/ember-glow.css +1 -0
- package/main/dist/styles/forest-moss.css +1 -0
- package/main/dist/styles/green-lake.css +1 -0
- package/main/dist/styles/ice-crystal.css +1 -0
- package/main/dist/styles/lavender-fields.css +1 -0
- package/main/dist/styles/midnight-gold.css +1 -0
- package/main/dist/styles/midnight-ocean.css +1 -0
- package/main/dist/styles/mint-chocolate.css +1 -0
- package/main/dist/styles/neon-nights.css +1 -0
- package/main/dist/styles/paper-light.css +1 -0
- package/main/dist/styles/retro-arcade.css +1 -0
- package/main/dist/styles/soft-neutral.css +1 -0
- package/main/dist/styles/stark-minimal.css +1 -0
- package/main/dist/styles/strawberry.css +1 -0
- package/{dist → main/dist}/vistaview.d.ts +0 -1
- package/main/dist/vistaview.js +14 -0
- package/main/dist/vistaview.umd.js +18 -0
- package/package.json +122 -67
- package/dist/extensions/dailymotion-video.d.ts +0 -2
- package/dist/extensions/dailymotion-video.js +0 -80
- package/dist/extensions/dailymotion-video.umd.js +0 -1
- package/dist/extensions/download.d.ts +0 -2
- package/dist/extensions/download.js +0 -35
- package/dist/extensions/download.umd.js +0 -1
- package/dist/extensions/google-maps.d.ts +0 -2
- package/dist/extensions/google-maps.js +0 -96
- package/dist/extensions/google-maps.umd.js +0 -1
- package/dist/extensions/image-story.d.ts +0 -2
- package/dist/extensions/image-story.js +0 -621
- package/dist/extensions/image-story.umd.js +0 -2
- package/dist/extensions/logger.d.ts +0 -2
- package/dist/extensions/logger.js +0 -23
- package/dist/extensions/logger.umd.js +0 -1
- package/dist/extensions/mapbox.d.ts +0 -2
- package/dist/extensions/mapbox.js +0 -124
- package/dist/extensions/mapbox.umd.js +0 -1
- package/dist/extensions/openstreetmap.d.ts +0 -2
- package/dist/extensions/openstreetmap.js +0 -125
- package/dist/extensions/openstreetmap.umd.js +0 -1
- package/dist/extensions/select-box.d.ts +0 -2
- package/dist/extensions/select-box.js +0 -29
- package/dist/extensions/select-box.umd.js +0 -1
- package/dist/extensions/streamable-video.d.ts +0 -2
- package/dist/extensions/streamable-video.js +0 -76
- package/dist/extensions/streamable-video.umd.js +0 -1
- package/dist/extensions/twitch-video.d.ts +0 -2
- package/dist/extensions/twitch-video.js +0 -79
- package/dist/extensions/vidyard-video.d.ts +0 -2
- package/dist/extensions/vidyard-video.js +0 -80
- package/dist/extensions/vidyard-video.umd.js +0 -1
- package/dist/extensions/vimeo-video.d.ts +0 -2
- package/dist/extensions/vimeo-video.js +0 -76
- package/dist/extensions/vimeo-video.umd.js +0 -1
- package/dist/extensions/wistia-video.d.ts +0 -2
- package/dist/extensions/wistia-video.js +0 -85
- package/dist/extensions/wistia-video.umd.js +0 -1
- package/dist/extensions/youtube-video.d.ts +0 -2
- package/dist/extensions/youtube-video.js +0 -88
- package/dist/extensions/youtube-video.umd.js +0 -1
- package/dist/lib/components.d.ts.map +0 -1
- package/dist/lib/defaults/close.d.ts +0 -3
- package/dist/lib/defaults/close.d.ts.map +0 -1
- package/dist/lib/defaults/image-setup.d.ts +0 -4
- package/dist/lib/defaults/image-setup.d.ts.map +0 -1
- package/dist/lib/defaults/init.d.ts +0 -3
- package/dist/lib/defaults/init.d.ts.map +0 -1
- package/dist/lib/defaults/open.d.ts +0 -3
- package/dist/lib/defaults/open.d.ts.map +0 -1
- package/dist/lib/defaults/options.d.ts +0 -3
- package/dist/lib/defaults/options.d.ts.map +0 -1
- package/dist/lib/defaults/transition.d.ts.map +0 -1
- package/dist/lib/extensions/dailymotion-video.d.ts.map +0 -1
- package/dist/lib/extensions/download.d.ts +0 -3
- package/dist/lib/extensions/download.d.ts.map +0 -1
- package/dist/lib/extensions/google-maps.d.ts.map +0 -1
- package/dist/lib/extensions/image-story.d.ts +0 -12
- package/dist/lib/extensions/image-story.d.ts.map +0 -1
- package/dist/lib/extensions/logger.d.ts +0 -3
- package/dist/lib/extensions/logger.d.ts.map +0 -1
- package/dist/lib/extensions/mapbox.d.ts.map +0 -1
- package/dist/lib/extensions/openstreetmap.d.ts.map +0 -1
- package/dist/lib/extensions/select-box.d.ts.map +0 -1
- package/dist/lib/extensions/streamable-video.d.ts.map +0 -1
- package/dist/lib/extensions/twitch-video.d.ts.map +0 -1
- package/dist/lib/extensions/vidyard-video.d.ts.map +0 -1
- package/dist/lib/extensions/vimeo-video.d.ts.map +0 -1
- package/dist/lib/extensions/wistia-video.d.ts.map +0 -1
- package/dist/lib/extensions/youtube-video.d.ts.map +0 -1
- package/dist/lib/main.d.ts.map +0 -1
- package/dist/lib/throttle.d.ts.map +0 -1
- package/dist/lib/types.d.ts.map +0 -1
- package/dist/lib/utils/get-fitted-size.d.ts.map +0 -1
- package/dist/lib/utils/get-full-size-dim.d.ts.map +0 -1
- package/dist/lib/utils/get-style.d.ts.map +0 -1
- package/dist/lib/utils/index.d.ts.map +0 -1
- package/dist/lib/utils/is-not-zero-css.d.ts.map +0 -1
- package/dist/lib/utils/parse-element.d.ts.map +0 -1
- package/dist/lib/vista-box.d.ts.map +0 -1
- package/dist/lib/vista-hires-transition.d.ts.map +0 -1
- package/dist/lib/vista-image-event.d.ts.map +0 -1
- package/dist/lib/vista-image.d.ts.map +0 -1
- package/dist/lib/vista-pointers.d.ts.map +0 -1
- package/dist/lib/vista-state.d.ts.map +0 -1
- package/dist/lib/vista-view.d.ts.map +0 -1
- package/dist/react.d.ts +0 -11
- package/dist/react.d.ts.map +0 -1
- package/dist/react.js +0 -69
- package/dist/solid.d.ts +0 -3
- package/dist/solid.d.ts.map +0 -1
- package/dist/solid.js +0 -24
- package/dist/style.css +0 -1
- package/dist/style.d.ts +0 -1
- package/dist/styles/autumn-amber.css +0 -1
- package/dist/styles/autumn-amber.d.ts +0 -1
- package/dist/styles/cotton-candy.css +0 -1
- package/dist/styles/cotton-candy.d.ts +0 -1
- package/dist/styles/dark-rounded.css +0 -1
- package/dist/styles/dark-rounded.d.ts +0 -1
- package/dist/styles/ember-glow.css +0 -1
- package/dist/styles/ember-glow.d.ts +0 -1
- package/dist/styles/extensions/image-story.css +0 -1
- package/dist/styles/extensions/image-story.d.ts +0 -1
- package/dist/styles/forest-moss.css +0 -1
- package/dist/styles/forest-moss.d.ts +0 -1
- package/dist/styles/green-lake.css +0 -1
- package/dist/styles/green-lake.d.ts +0 -1
- package/dist/styles/ice-crystal.css +0 -1
- package/dist/styles/ice-crystal.d.ts +0 -1
- package/dist/styles/lavender-fields.css +0 -1
- package/dist/styles/lavender-fields.d.ts +0 -1
- package/dist/styles/midnight-gold.css +0 -1
- package/dist/styles/midnight-gold.d.ts +0 -1
- package/dist/styles/midnight-ocean.css +0 -1
- package/dist/styles/midnight-ocean.d.ts +0 -1
- package/dist/styles/mint-chocolate.css +0 -1
- package/dist/styles/mint-chocolate.d.ts +0 -1
- package/dist/styles/neon-nights.css +0 -1
- package/dist/styles/neon-nights.d.ts +0 -1
- package/dist/styles/paper-light.css +0 -1
- package/dist/styles/paper-light.d.ts +0 -1
- package/dist/styles/retro-arcade.css +0 -1
- package/dist/styles/retro-arcade.d.ts +0 -1
- package/dist/styles/soft-neutral.css +0 -1
- package/dist/styles/soft-neutral.d.ts +0 -1
- package/dist/styles/stark-minimal.css +0 -1
- package/dist/styles/stark-minimal.d.ts +0 -1
- package/dist/styles/strawberry.css +0 -1
- package/dist/styles/strawberry.d.ts +0 -1
- package/dist/svelte.d.ts +0 -3
- package/dist/svelte.d.ts.map +0 -1
- package/dist/svelte.js +0 -22
- package/dist/vista-box-zG6ZgBcI.js +0 -334
- package/dist/vistaview.d.ts.map +0 -1
- package/dist/vistaview.js +0 -1013
- package/dist/vistaview.umd.js +0 -18
- package/dist/vue.d.ts +0 -25
- package/dist/vue.d.ts.map +0 -1
- package/dist/vue.js +0 -79
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// run on every image transition
|
|
2
|
+
export function transition({ htmlElements: { to: HtmlTo }, index: { from: fromIndex, to: toIndex } }, signal, vistaView) {
|
|
3
|
+
const { imageContainer: imgc, options } = vistaView;
|
|
4
|
+
const { isReducedMotion } = vistaView.state;
|
|
5
|
+
if (!HtmlTo || signal.aborted || isReducedMotion)
|
|
6
|
+
return;
|
|
7
|
+
const adjacent = Math.abs(toIndex - fromIndex) === 1 ||
|
|
8
|
+
(fromIndex === 0 && toIndex === vistaView.state.elmLength - 1) ||
|
|
9
|
+
(fromIndex === vistaView.state.elmLength - 1 && toIndex === 0);
|
|
10
|
+
// for non-adjacent
|
|
11
|
+
// just return
|
|
12
|
+
if (!adjacent) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
// adjacent transition
|
|
16
|
+
// with no reduced motion preference
|
|
17
|
+
// slide left/right
|
|
18
|
+
return {
|
|
19
|
+
cleanup: () => {
|
|
20
|
+
imgc.style.transition = '';
|
|
21
|
+
imgc.style.transform = '';
|
|
22
|
+
},
|
|
23
|
+
transitionEnded: new Promise((r) => {
|
|
24
|
+
imgc.addEventListener('transitionend', () => {
|
|
25
|
+
r();
|
|
26
|
+
}, { once: true });
|
|
27
|
+
imgc.addEventListener('transitioncancel', () => {
|
|
28
|
+
if (signal.aborted)
|
|
29
|
+
r();
|
|
30
|
+
}, { once: true });
|
|
31
|
+
const duration = Math.round(options.animationDurationBase * 100) / 100;
|
|
32
|
+
const transform = toIndex === fromIndex + 1 ||
|
|
33
|
+
(fromIndex === vistaView.state.elmLength - 1 && toIndex === 0)
|
|
34
|
+
? 'translateX(-100vw)'
|
|
35
|
+
: 'translateX(100vw)';
|
|
36
|
+
imgc.style.transition = `transform ${duration}ms ease`;
|
|
37
|
+
imgc.style.transform = transform;
|
|
38
|
+
}),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { VistaView } from './vista-view';
|
|
2
|
+
function checkCorrectness(elements) {
|
|
3
|
+
let els = null;
|
|
4
|
+
// get elements as node list
|
|
5
|
+
if (typeof elements === 'string') {
|
|
6
|
+
els = document.querySelectorAll(elements);
|
|
7
|
+
if (els.length === 0) {
|
|
8
|
+
return new Error('No elements found in node list.');
|
|
9
|
+
}
|
|
10
|
+
// Validate DOM elements - must be img or a
|
|
11
|
+
for (let i = 0; i < els.length; i++) {
|
|
12
|
+
const el = els[i];
|
|
13
|
+
const tagName = el.tagName.toLowerCase();
|
|
14
|
+
if (tagName !== 'img' && tagName !== 'a') {
|
|
15
|
+
return new Error(`Invalid element at index ${i}: expected <img>, <a>, got <${tagName}>`);
|
|
16
|
+
}
|
|
17
|
+
// If anchor, must contain img
|
|
18
|
+
if (tagName === 'a') {
|
|
19
|
+
const hasImg = el.querySelector('img') !== null;
|
|
20
|
+
if (!hasImg) {
|
|
21
|
+
return new Error(`Invalid <a> element at index ${i}: must contain <img>`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// Validate VistaImgConfig array
|
|
28
|
+
const data = elements;
|
|
29
|
+
for (let i = 0; i < data.length; i++) {
|
|
30
|
+
const img = data[i];
|
|
31
|
+
if (!img.src) {
|
|
32
|
+
return new Error(`Invalid image data at index ${i}: must have 'src'`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return elements;
|
|
37
|
+
}
|
|
38
|
+
export function vistaView({ elements, ...opts }) {
|
|
39
|
+
if (!elements) {
|
|
40
|
+
console.error(elements);
|
|
41
|
+
console.error('no elements provided');
|
|
42
|
+
console.warn('VistaView: silently returning.');
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
let elms = checkCorrectness(elements);
|
|
46
|
+
if (elms instanceof Error) {
|
|
47
|
+
console.error(elms);
|
|
48
|
+
console.warn('VistaView: silently returning.');
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
const v = new VistaView(elms, opts);
|
|
52
|
+
return {
|
|
53
|
+
open: (startIndex = 0) => v.open(startIndex),
|
|
54
|
+
reset: () => v.reset(),
|
|
55
|
+
close: () => v.close(),
|
|
56
|
+
next: () => v.next(),
|
|
57
|
+
prev: () => v.prev(),
|
|
58
|
+
zoomIn: () => v.zoomIn(),
|
|
59
|
+
zoomOut: () => v.zoomOut(),
|
|
60
|
+
destroy: () => v.destroy(),
|
|
61
|
+
getCurrentIndex: () => v.getCurrentIndex(),
|
|
62
|
+
view: (index) => {
|
|
63
|
+
v.view(index);
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Throttle: Function execution rate limiter
|
|
2
|
+
// Ensures that the function is not called more than once in the specified wait time.
|
|
3
|
+
export class Throttle {
|
|
4
|
+
fiolast = {};
|
|
5
|
+
// first in out
|
|
6
|
+
fio(func, id, wait = 50) {
|
|
7
|
+
const now = Date.now();
|
|
8
|
+
const timeSinceLastCall = now - (this.fiolast[id] ?? 0);
|
|
9
|
+
const invoke = () => {
|
|
10
|
+
this.fiolast[id] = Date.now();
|
|
11
|
+
func();
|
|
12
|
+
};
|
|
13
|
+
if (!this.fiolast[id]) {
|
|
14
|
+
invoke();
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (timeSinceLastCall >= wait) {
|
|
18
|
+
invoke();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { VistaBox } from './vista-box';
|
|
2
|
-
import { VistaState } from './vista-state';
|
|
3
|
-
import { VistaView } from './vista-view';
|
|
4
|
-
import { VistaHiresTransitionOpt } from './vista-hires-transition';
|
|
1
|
+
import type { VistaBox } from './vista-box';
|
|
2
|
+
import type { VistaState } from './vista-state';
|
|
3
|
+
import type { VistaView } from './vista-view';
|
|
4
|
+
import type { VistaHiresTransitionOpt } from './vista-hires-transition';
|
|
5
5
|
export type { VistaImage } from './vista-image';
|
|
6
6
|
export type VistaOpt = {
|
|
7
7
|
animationDurationBase?: number;
|
|
@@ -204,4 +204,3 @@ export type VistaImageClone = {
|
|
|
204
204
|
};
|
|
205
205
|
};
|
|
206
206
|
};
|
|
207
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// this function calculates the rendered size of an image element
|
|
2
|
+
// according to its CSS object-fit property
|
|
3
|
+
export function getFittedSize(img) {
|
|
4
|
+
const style = window.getComputedStyle(img);
|
|
5
|
+
const objectFit = style.objectFit || ''; // empty string in some old browsers
|
|
6
|
+
// Rendered <img> size
|
|
7
|
+
const { width: boxW, height: boxH } = img.getBoundingClientRect();
|
|
8
|
+
// Natural image size
|
|
9
|
+
const natW = img.naturalWidth;
|
|
10
|
+
const natH = img.naturalHeight;
|
|
11
|
+
// If object-fit is not supported → fallback to "fill" behavior
|
|
12
|
+
if (!objectFit) {
|
|
13
|
+
return { width: boxW, height: boxH };
|
|
14
|
+
}
|
|
15
|
+
// natural size missing (e.g., SVG, broken image)
|
|
16
|
+
if (!natW || !natH) {
|
|
17
|
+
return { width: boxW, height: boxH };
|
|
18
|
+
}
|
|
19
|
+
const imageAR = natW / natH;
|
|
20
|
+
const boxAR = boxW / boxH;
|
|
21
|
+
switch (objectFit) {
|
|
22
|
+
case 'fill':
|
|
23
|
+
return { width: boxW, height: boxH };
|
|
24
|
+
case 'none':
|
|
25
|
+
return { width: natW, height: natH };
|
|
26
|
+
case 'contain':
|
|
27
|
+
if (imageAR > boxAR) {
|
|
28
|
+
return { width: boxW, height: boxW / imageAR };
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return { width: boxH * imageAR, height: boxH };
|
|
32
|
+
}
|
|
33
|
+
case 'cover':
|
|
34
|
+
if (imageAR < boxAR) {
|
|
35
|
+
return { width: boxW, height: boxW / imageAR };
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
return { width: boxH * imageAR, height: boxH };
|
|
39
|
+
}
|
|
40
|
+
case 'scale-down': {
|
|
41
|
+
// natural size
|
|
42
|
+
const natural = { width: natW, height: natH };
|
|
43
|
+
// contain size
|
|
44
|
+
const contain = imageAR > boxAR
|
|
45
|
+
? { width: boxW, height: boxW / imageAR }
|
|
46
|
+
: { width: boxH * imageAR, height: boxH };
|
|
47
|
+
// pick the smaller of the two
|
|
48
|
+
return contain.width <= natural.width && contain.height <= natural.height ? contain : natural;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Unknown or non-standard object-fit → fallback
|
|
52
|
+
return { width: boxW, height: boxH };
|
|
53
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export function getFullSizeDim(img) {
|
|
2
|
+
const vw = window.innerWidth;
|
|
3
|
+
const vh = window.innerHeight;
|
|
4
|
+
const nw = img.naturalWidth;
|
|
5
|
+
const nh = img.naturalHeight;
|
|
6
|
+
if (!nw || !nh) {
|
|
7
|
+
console.error('Error', img);
|
|
8
|
+
throw new Error('Image natural dimensions are zero');
|
|
9
|
+
}
|
|
10
|
+
if (nw < vw && nh < vh) {
|
|
11
|
+
// smaller than screen, no need to resize
|
|
12
|
+
return {
|
|
13
|
+
width: nw,
|
|
14
|
+
height: nh,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const imageAR = nw / nh;
|
|
18
|
+
const screenAR = vw / vh;
|
|
19
|
+
let width;
|
|
20
|
+
let height;
|
|
21
|
+
if (imageAR > screenAR) {
|
|
22
|
+
// Image is wider than screen → constrain by width
|
|
23
|
+
width = vw;
|
|
24
|
+
height = vw / imageAR;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// Image is taller than screen → constrain by height
|
|
28
|
+
height = vh;
|
|
29
|
+
width = vh * imageAR;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
width,
|
|
33
|
+
height,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { isNotZeroCss } from './is-not-zero-css';
|
|
2
|
+
export function getStyle(elm) {
|
|
3
|
+
const anchor = elm instanceof HTMLAnchorElement ? elm : null;
|
|
4
|
+
const image = elm instanceof HTMLImageElement ? elm : anchor?.querySelector('img');
|
|
5
|
+
const aStyles = anchor ? getComputedStyle(anchor) : null;
|
|
6
|
+
const iStyles = image ? getComputedStyle(image) : null;
|
|
7
|
+
let borderRadius = '0px';
|
|
8
|
+
let objectFit = iStyles ? iStyles.objectFit : 'contain';
|
|
9
|
+
if (aStyles && isNotZeroCss(aStyles.borderRadius)) {
|
|
10
|
+
borderRadius = aStyles.borderRadius;
|
|
11
|
+
}
|
|
12
|
+
else if (iStyles && isNotZeroCss(iStyles.borderRadius)) {
|
|
13
|
+
borderRadius = iStyles.borderRadius;
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
borderRadius,
|
|
17
|
+
objectFit,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { isNotZeroCss } from './is-not-zero-css';
|
|
2
|
+
function getComputedStyleProps(elm) {
|
|
3
|
+
const anchor = elm instanceof HTMLAnchorElement ? elm : null;
|
|
4
|
+
const image = elm instanceof HTMLImageElement ? elm : anchor?.querySelector('img');
|
|
5
|
+
const aStyles = anchor ? getComputedStyle(anchor) : null;
|
|
6
|
+
const iStyles = image ? getComputedStyle(image) : null;
|
|
7
|
+
let borderRadius = '0px';
|
|
8
|
+
let objectFit = iStyles ? iStyles.objectFit : 'contain';
|
|
9
|
+
if (aStyles && isNotZeroCss(aStyles.borderRadius)) {
|
|
10
|
+
borderRadius = aStyles.borderRadius;
|
|
11
|
+
}
|
|
12
|
+
else if (iStyles && isNotZeroCss(iStyles.borderRadius)) {
|
|
13
|
+
borderRadius = iStyles.borderRadius;
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
borderRadius,
|
|
17
|
+
objectFit,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function getSrcset(srcSetStr) {
|
|
21
|
+
const parts = srcSetStr.split(',').map((s) => s.trim());
|
|
22
|
+
const srcset = [];
|
|
23
|
+
for (const part of parts) {
|
|
24
|
+
const [src, widthStr] = part.split(' ').map((s) => s.trim());
|
|
25
|
+
if (src && widthStr && widthStr.endsWith('w')) {
|
|
26
|
+
const width = parseInt(widthStr.slice(0, -1), 10);
|
|
27
|
+
if (!isNaN(width)) {
|
|
28
|
+
srcset.push({ src, width });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return srcset;
|
|
33
|
+
}
|
|
34
|
+
export function parseElement(elm) {
|
|
35
|
+
const image = elm instanceof HTMLImageElement ? elm : elm.querySelector('img');
|
|
36
|
+
const src = elm.dataset.vistaviewSrc ||
|
|
37
|
+
elm.getAttribute('href') ||
|
|
38
|
+
elm.getAttribute('src') ||
|
|
39
|
+
image?.getAttribute('src') ||
|
|
40
|
+
'';
|
|
41
|
+
const srcSet = elm.dataset.vistaviewSrcset ||
|
|
42
|
+
elm.getAttribute('srcset') ||
|
|
43
|
+
image?.getAttribute('srcset') ||
|
|
44
|
+
'';
|
|
45
|
+
if (!src && !srcSet) {
|
|
46
|
+
console.error('VistaView Error: Element must have href, src, or srcSet');
|
|
47
|
+
throw new Error('VistaView: Element must have href, src, or srcSet');
|
|
48
|
+
}
|
|
49
|
+
const parsedSrcSet = srcSet ? getSrcset(srcSet) : undefined;
|
|
50
|
+
const styles = getComputedStyleProps(elm);
|
|
51
|
+
return {
|
|
52
|
+
config: {
|
|
53
|
+
src,
|
|
54
|
+
alt: elm.dataset.vistaviewAlt || elm.getAttribute('alt') || image?.getAttribute('alt') || '',
|
|
55
|
+
srcSet: srcSet || undefined,
|
|
56
|
+
},
|
|
57
|
+
parsedSrcSet: parsedSrcSet?.length ? parsedSrcSet : undefined,
|
|
58
|
+
origin: {
|
|
59
|
+
anchor: elm instanceof HTMLAnchorElement ? elm : undefined,
|
|
60
|
+
image: image,
|
|
61
|
+
src,
|
|
62
|
+
srcSet,
|
|
63
|
+
borderRadius: styles.borderRadius,
|
|
64
|
+
objectFit: styles.objectFit,
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { VistaImageState, VistaImgConfig, VistaImageParams, VistaImgOrigin, VistaImageClone } from './types';
|
|
2
|
-
import { VistaHiresTransitionOpt } from './vista-hires-transition';
|
|
3
|
-
import { VistaView } from './vista-view';
|
|
1
|
+
import type { VistaImageState, VistaImgConfig, VistaImageParams, VistaImgOrigin, VistaImageClone } from './types';
|
|
2
|
+
import type { VistaHiresTransitionOpt } from './vista-hires-transition';
|
|
3
|
+
import type { VistaView } from './vista-view';
|
|
4
4
|
export declare abstract class VistaBox {
|
|
5
5
|
abstract element: HTMLImageElement | HTMLDivElement;
|
|
6
6
|
state: VistaImageState;
|
|
@@ -110,4 +110,3 @@ export declare abstract class VistaBox {
|
|
|
110
110
|
cancel: () => void;
|
|
111
111
|
} | undefined;
|
|
112
112
|
}
|
|
113
|
-
//# sourceMappingURL=vista-box.d.ts.map
|