vistaview 1.0.5 → 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 -65
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","names":[],"sources":["../src/main.ts"],"sourcesContent":["import type { VistaData, VistaExtension, VistaImageClone, VistaImageParams, VistaView } from 'vistaview';\n\n// logger\n// async as example\n\nexport function logger(): VistaExtension {\n return {\n name: 'logger',\n onInitializeImage: (params: VistaImageParams) => {\n console.debug('Logger: VistaView initialized with params:');\n console.debug(params);\n },\n onContentChange: (_content: VistaImageClone, _v: VistaView) => {\n console.debug('Logger: Content changed');\n console.debug(_content);\n },\n onImageView: async (vistaData: VistaData, _v: VistaView) => {\n console.debug('Logger: Image viewed');\n console.debug(vistaData);\n },\n onOpen: async (_vistaView: VistaView) => {\n console.debug('Logger: VistaView opened');\n console.debug(_vistaView);\n },\n onClose: (_vistaView: VistaView) => {\n console.debug('Logger: VistaView closed');\n console.debug(_vistaView);\n },\n };\n}\n"],"mappings":"AAKA,SAAgB,SAAyB;AACvC,QAAO;EACL,MAAM;EACN,oBAAoB,MAA6B;AAE/C,GADA,QAAQ,MAAM,6CAA6C,EAC3D,QAAQ,MAAM,EAAO;;EAEvB,kBAAkB,GAA2B,MAAkB;AAE7D,GADA,QAAQ,MAAM,0BAA0B,EACxC,QAAQ,MAAM,EAAS;;EAEzB,aAAa,OAAO,GAAsB,MAAkB;AAE1D,GADA,QAAQ,MAAM,uBAAuB,EACrC,QAAQ,MAAM,EAAU;;EAE1B,QAAQ,OAAO,MAA0B;AAEvC,GADA,QAAQ,MAAM,2BAA2B,EACzC,QAAQ,MAAM,EAAW;;EAE3B,UAAU,MAA0B;AAElC,GADA,QAAQ,MAAM,2BAA2B,EACzC,QAAQ,MAAM,EAAW;;EAE5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.test.d.ts","sourceRoot":"","sources":["../src/main.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.VistaView=e.VistaView||{}))})(this,function(e){function t(){return{name:`logger`,onInitializeImage:e=>{console.debug(`Logger: VistaView initialized with params:`),console.debug(e)},onContentChange:(e,t)=>{console.debug(`Logger: Content changed`),console.debug(e)},onImageView:async(e,t)=>{console.debug(`Logger: Image viewed`),console.debug(e)},onOpen:async e=>{console.debug(`Logger: VistaView opened`),console.debug(e)},onClose:e=>{console.debug(`Logger: VistaView closed`),console.debug(e)}}}e.logger=t});
|
|
2
|
+
//# sourceMappingURL=main.umd.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.umd.cjs","names":[],"sources":["../src/main.ts"],"sourcesContent":["import type { VistaData, VistaExtension, VistaImageClone, VistaImageParams, VistaView } from 'vistaview';\n\n// logger\n// async as example\n\nexport function logger(): VistaExtension {\n return {\n name: 'logger',\n onInitializeImage: (params: VistaImageParams) => {\n console.debug('Logger: VistaView initialized with params:');\n console.debug(params);\n },\n onContentChange: (_content: VistaImageClone, _v: VistaView) => {\n console.debug('Logger: Content changed');\n console.debug(_content);\n },\n onImageView: async (vistaData: VistaData, _v: VistaView) => {\n console.debug('Logger: Image viewed');\n console.debug(vistaData);\n },\n onOpen: async (_vistaView: VistaView) => {\n console.debug('Logger: VistaView opened');\n console.debug(_vistaView);\n },\n onClose: (_vistaView: VistaView) => {\n console.debug('Logger: VistaView closed');\n console.debug(_vistaView);\n },\n };\n}\n"],"mappings":"iOAKA,SAAgB,GAAyB,CACvC,MAAO,CACL,KAAM,SACN,kBAAoB,GAA6B,CAC/C,QAAQ,MAAM,6CAA6C,CAC3D,QAAQ,MAAM,EAAO,EAEvB,iBAAkB,EAA2B,IAAkB,CAC7D,QAAQ,MAAM,0BAA0B,CACxC,QAAQ,MAAM,EAAS,EAEzB,YAAa,MAAO,EAAsB,IAAkB,CAC1D,QAAQ,MAAM,uBAAuB,CACrC,QAAQ,MAAM,EAAU,EAE1B,OAAQ,KAAO,IAA0B,CACvC,QAAQ,MAAM,2BAA2B,CACzC,QAAQ,MAAM,EAAW,EAE3B,QAAU,GAA0B,CAClC,QAAQ,MAAM,2BAA2B,CACzC,QAAQ,MAAM,EAAW,EAE5B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { VistaExtension, VistaImageParams } from '
|
|
2
|
-
import { VistaBox } from '
|
|
1
|
+
import type { VistaExtension, VistaImageParams } from 'vistaview';
|
|
2
|
+
import { VistaBox } from 'vistaview';
|
|
3
3
|
export interface MapboxConfig {
|
|
4
4
|
accessToken: string;
|
|
5
5
|
zoom?: number;
|
|
@@ -50,4 +50,4 @@ export declare class VistaMapbox extends VistaBox {
|
|
|
50
50
|
} | undefined;
|
|
51
51
|
}
|
|
52
52
|
export declare function mapbox(config: MapboxConfig): VistaExtension;
|
|
53
|
-
//# sourceMappingURL=
|
|
53
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,gBAAgB,EAAa,MAAM,WAAW,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAoCtE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAY3F;AAED,qBAAa,WAAY,SAAQ,QAAQ;IACvC,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,cAAc,CAAmB;gBAE7B,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc;YA0CnE,YAAY;IA8B1B,OAAO,CAAC,aAAa;IA0DrB,SAAS,CAAC,cAAc,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAS7D,iBAAiB;;;;CAGlB;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,CAqB3D"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { VistaBox } from "vistaview";
|
|
2
|
+
function parseMapboxLocation(e) {
|
|
3
|
+
if (!e) return null;
|
|
4
|
+
try {
|
|
5
|
+
let t = e.match(/(-?\d+\.?\d*),\s*(-?\d+\.?\d*),?\s*(\d+\.?\d*)?,?\s*(\d+\.?\d*)?,?\s*(\d+\.?\d*)?/);
|
|
6
|
+
if (t) return {
|
|
7
|
+
lng: parseFloat(t[1]),
|
|
8
|
+
lat: parseFloat(t[2]),
|
|
9
|
+
zoom: t[3] ? parseFloat(t[3]) : void 0,
|
|
10
|
+
bearing: t[4] ? parseFloat(t[4]) : void 0,
|
|
11
|
+
pitch: t[5] ? parseFloat(t[5]) : void 0
|
|
12
|
+
};
|
|
13
|
+
let n = new URL(e);
|
|
14
|
+
if (n.hostname.includes("mapbox.com")) {
|
|
15
|
+
let e = n.pathname.match(/@(-?\d+\.?\d*),(-?\d+\.?\d*),(\d+\.?\d*)?/);
|
|
16
|
+
if (e) return {
|
|
17
|
+
lng: parseFloat(e[1]),
|
|
18
|
+
lat: parseFloat(e[2]),
|
|
19
|
+
zoom: e[3] ? parseFloat(e[3]) : void 0
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
} catch {}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
function getMapboxStaticImage(e, t) {
|
|
26
|
+
let n = e.zoom || t.zoom || 15, r = t.width || 800, i = t.height || 600, a = t.style || "streets-v12", o = e.bearing || t.bearing || 0, s = e.pitch || t.pitch || 0;
|
|
27
|
+
return `https://api.mapbox.com/styles/v1/mapbox/${a}/static/${`pin-s+ff0000(${e.lng},${e.lat})`}/${e.lng},${e.lat},${n},${o},${s}/${r}x${i}@2x?access_token=${t.accessToken}`;
|
|
28
|
+
}
|
|
29
|
+
var VistaMapbox = class extends VistaBox {
|
|
30
|
+
element;
|
|
31
|
+
mapboxConfig;
|
|
32
|
+
location;
|
|
33
|
+
thumbnailImage;
|
|
34
|
+
constructor(e, t, r) {
|
|
35
|
+
super(e), this.mapboxConfig = t, this.location = r;
|
|
36
|
+
let i = document.createElement("div");
|
|
37
|
+
i.style.position = "relative", this.thumbnailImage = document.createElement("img"), i.appendChild(this.thumbnailImage), this.thumbnailImage.src = this.origin?.image.src || getMapboxStaticImage(r, t), this.thumbnailImage.style.width = "100%", this.thumbnailImage.style.height = "100%", this.thumbnailImage.style.objectFit = "cover", this.thumbnailImage.classList.add("vvw--pulsing"), this.element = i, this.element.classList.add("vvw-img-hi");
|
|
38
|
+
let { width: a, height: o } = this.getFullSizeDim();
|
|
39
|
+
this.fullH = o, this.fullW = a, this.minW = this.fullW * .5, this.maxW = this.fullW, this.element.style.width = `${a}px`, this.element.style.height = `${o}px`, this.setSizes({
|
|
40
|
+
stableSize: !1,
|
|
41
|
+
initDimension: !0
|
|
42
|
+
}), this.pos === 0 ? this.loadMapboxGL().then(() => {
|
|
43
|
+
this.initializeMap(i);
|
|
44
|
+
}) : this.isLoadedResolved(!0);
|
|
45
|
+
}
|
|
46
|
+
async loadMapboxGL() {
|
|
47
|
+
if (!window.mapboxgl) {
|
|
48
|
+
if (!document.querySelector(".vistaview-mapbox-gl-css")) {
|
|
49
|
+
let e = document.createElement("link");
|
|
50
|
+
e.rel = "stylesheet", e.href = "https://api.mapbox.com/mapbox-gl-js/v3.0.1/mapbox-gl.css", e.className = "vistaview-mapbox-gl-css", document.head.appendChild(e);
|
|
51
|
+
}
|
|
52
|
+
if (!document.querySelector(".vistaview-mapbox-gl-js")) return new Promise((e, t) => {
|
|
53
|
+
let n = document.createElement("script");
|
|
54
|
+
n.src = "https://api.mapbox.com/mapbox-gl-js/v3.0.1/mapbox-gl.js", n.className = "vistaview-mapbox-gl-js", n.onload = () => e(), n.onerror = () => t(/* @__PURE__ */ Error("Failed to load Mapbox GL JS")), document.head.appendChild(n);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
initializeMap(e) {
|
|
59
|
+
let t = window.mapboxgl;
|
|
60
|
+
if (!t) {
|
|
61
|
+
this.isLoadedRejected(/* @__PURE__ */ Error("Mapbox GL JS not loaded"));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
let n = document.createElement("div");
|
|
65
|
+
n.style.position = "absolute", n.style.top = "0", n.style.left = "0", n.style.width = "100%", n.style.height = "100%", n.style.opacity = "0", n.style.transition = "opacity 1s ease", e.appendChild(n), n.addEventListener("pointerdown", (e) => {
|
|
66
|
+
e.stopPropagation();
|
|
67
|
+
}), t.accessToken = this.mapboxConfig.accessToken;
|
|
68
|
+
let r = new t.Map({
|
|
69
|
+
container: n,
|
|
70
|
+
style: `mapbox://styles/mapbox/${this.mapboxConfig.style || "streets-v12"}`,
|
|
71
|
+
center: [this.location.lng, this.location.lat],
|
|
72
|
+
zoom: this.location.zoom || this.mapboxConfig.zoom || 15,
|
|
73
|
+
bearing: this.location.bearing || this.mapboxConfig.bearing || 0,
|
|
74
|
+
pitch: this.location.pitch || this.mapboxConfig.pitch || 0
|
|
75
|
+
});
|
|
76
|
+
new t.Marker({ color: "#ff0000" }).setLngLat([this.location.lng, this.location.lat]).addTo(r), r.addControl(new t.NavigationControl()), r.on("load", () => {
|
|
77
|
+
this.onImageReady = () => {
|
|
78
|
+
r.resize(), n.style.opacity = "1", this.thumbnailImage.classList.remove("vvw--pulsing");
|
|
79
|
+
}, this.isLoadedResolved(!0);
|
|
80
|
+
}), r.on("error", (e) => {
|
|
81
|
+
this.isLoadedRejected(e);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
getFullSizeDim() {
|
|
85
|
+
let e = Math.min(window.innerWidth, this.mapboxConfig.width || 800);
|
|
86
|
+
return {
|
|
87
|
+
width: e,
|
|
88
|
+
height: e * 9 / 16
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
setFinalTransform() {
|
|
92
|
+
return super.setFinalTransform({ propagateEvent: !1 });
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
function mapbox(e) {
|
|
96
|
+
return e.accessToken || console.error("Mapbox access token is required"), {
|
|
97
|
+
name: "mapbox",
|
|
98
|
+
onInitializeImage: (n) => {
|
|
99
|
+
let i = n.elm.config.src, a = parseMapboxLocation(i);
|
|
100
|
+
if (a) return new VistaMapbox(n, e, a);
|
|
101
|
+
},
|
|
102
|
+
onImageView: async (e, t) => {
|
|
103
|
+
let n = e.images.to[Math.floor(e.images.to.length / 2)];
|
|
104
|
+
n instanceof VistaMapbox && t.deactivateUi([
|
|
105
|
+
"download",
|
|
106
|
+
"zoomIn",
|
|
107
|
+
"zoomOut"
|
|
108
|
+
], n);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export { VistaMapbox, getMapboxStaticImage, mapbox, parseMapboxLocation };
|
|
113
|
+
|
|
114
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","names":[],"sources":["../src/main.ts"],"sourcesContent":["import type { VistaData, VistaExtension, VistaImageParams, VistaView } from 'vistaview';\nimport { VistaBox } from 'vistaview';\n\nexport interface MapboxConfig {\n accessToken: string;\n zoom?: number; // Default zoom level (0-22)\n width?: number; // Map width in pixels\n height?: number; // Map height in pixels\n style?: string; // Map style (e.g., 'streets-v12', 'satellite-v9', 'outdoors-v12')\n pitch?: number; // Camera pitch (0-60)\n bearing?: number; // Camera bearing (0-359)\n}\n\nexport interface MapboxLocation {\n lng: number;\n lat: number;\n zoom?: number;\n bearing?: number;\n pitch?: number;\n}\n\n/**\n * Parse Mapbox URL and extract location data\n * Supports various Mapbox URL formats:\n * - https://api.mapbox.com/styles/v1/{username}/{style_id}/static/-74.0060,40.7128,15,0/800x600\n * - Custom format: mapbox://-74.0060,40.7128,15\n * @param url - Mapbox URL or coordinate string\n * @returns Location data or null if not found\n */\nexport function parseMapboxLocation(url: string): MapboxLocation | null {\n if (!url) return null;\n\n try {\n // Match pattern: lng,lat,zoom or lng,lat,zoom,bearing,pitch\n const coordMatch = url.match(\n /(-?\\d+\\.?\\d*),\\s*(-?\\d+\\.?\\d*),?\\s*(\\d+\\.?\\d*)?,?\\s*(\\d+\\.?\\d*)?,?\\s*(\\d+\\.?\\d*)?/\n );\n if (coordMatch) {\n return {\n lng: parseFloat(coordMatch[1]),\n lat: parseFloat(coordMatch[2]),\n zoom: coordMatch[3] ? parseFloat(coordMatch[3]) : undefined,\n bearing: coordMatch[4] ? parseFloat(coordMatch[4]) : undefined,\n pitch: coordMatch[5] ? parseFloat(coordMatch[5]) : undefined,\n };\n }\n\n // Try URL parsing for mapbox.com links\n const urlObj = new URL(url);\n if (urlObj.hostname.includes('mapbox.com')) {\n // Extract from pathname like /@lng,lat,zoom\n const atMatch = urlObj.pathname.match(/@(-?\\d+\\.?\\d*),(-?\\d+\\.?\\d*),(\\d+\\.?\\d*)?/);\n if (atMatch) {\n return {\n lng: parseFloat(atMatch[1]),\n lat: parseFloat(atMatch[2]),\n zoom: atMatch[3] ? parseFloat(atMatch[3]) : undefined,\n };\n }\n }\n } catch (error) {\n // Not a valid URL, might be coordinate string - already handled above\n }\n\n return null;\n}\n\n/**\n * Get Mapbox static image URL\n * @param location - Location data\n * @param config - Mapbox configuration\n * @returns Static map image URL\n */\nexport function getMapboxStaticImage(location: MapboxLocation, config: MapboxConfig): string {\n const zoom = location.zoom || config.zoom || 15;\n const width = config.width || 800;\n const height = config.height || 600;\n const style = config.style || 'streets-v12';\n const bearing = location.bearing || config.bearing || 0;\n const pitch = location.pitch || config.pitch || 0;\n\n // Add marker overlay\n const marker = `pin-s+ff0000(${location.lng},${location.lat})`;\n\n return `https://api.mapbox.com/styles/v1/mapbox/${style}/static/${marker}/${location.lng},${location.lat},${zoom},${bearing},${pitch}/${width}x${height}@2x?access_token=${config.accessToken}`;\n}\n\nexport class VistaMapbox extends VistaBox {\n element: HTMLDivElement;\n private mapboxConfig: MapboxConfig;\n private location: MapboxLocation;\n private thumbnailImage: HTMLImageElement;\n\n constructor(par: VistaImageParams, config: MapboxConfig, location: MapboxLocation) {\n super(par);\n\n this.mapboxConfig = config;\n this.location = location;\n\n const div = document.createElement('div');\n div.style.position = 'relative';\n this.thumbnailImage = document.createElement('img');\n div.appendChild(this.thumbnailImage);\n this.thumbnailImage.src = this.origin?.image.src || getMapboxStaticImage(location, config);\n this.thumbnailImage.style.width = '100%';\n this.thumbnailImage.style.height = '100%';\n this.thumbnailImage.style.objectFit = 'cover';\n this.thumbnailImage.classList.add('vvw--pulsing');\n\n this.element = div;\n\n this.element.classList.add('vvw-img-hi');\n\n // Set sizes\n const { width: fullWidth, height: fullHeight } = this.getFullSizeDim();\n this.fullH = fullHeight;\n this.fullW = fullWidth;\n this.minW = this.fullW * 0.5;\n this.maxW = this.fullW; // no scaling\n this.element.style.width = `${fullWidth}px`;\n this.element.style.height = `${fullHeight}px`;\n\n // Trigger setSizes to setup thumb and map initial style\n this.setSizes({ stableSize: false, initDimension: true });\n\n if (this.pos === 0) {\n // Load Mapbox GL JS dynamically if not already loaded\n this.loadMapboxGL().then(() => {\n this.initializeMap(div);\n });\n } else {\n this.isLoadedResolved!(true);\n }\n }\n\n private async loadMapboxGL(): Promise<void> {\n // Check if Mapbox GL is already loaded\n if ((window as any).mapboxgl) {\n return;\n }\n\n // Load CSS\n if (!document.querySelector('.vistaview-mapbox-gl-css')) {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = 'https://api.mapbox.com/mapbox-gl-js/v3.0.1/mapbox-gl.css';\n link.className = 'vistaview-mapbox-gl-css';\n document.head.appendChild(link);\n }\n\n // Load JS\n if (document.querySelector('.vistaview-mapbox-gl-js')) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = 'https://api.mapbox.com/mapbox-gl-js/v3.0.1/mapbox-gl.js';\n script.className = 'vistaview-mapbox-gl-js';\n script.onload = () => resolve();\n script.onerror = () => reject(new Error('Failed to load Mapbox GL JS'));\n document.head.appendChild(script);\n });\n }\n\n private initializeMap(container: HTMLDivElement): void {\n const mapboxgl = (window as any).mapboxgl;\n if (!mapboxgl) {\n this.isLoadedRejected!(new Error('Mapbox GL JS not loaded'));\n return;\n }\n\n // Create map container div\n const mapDiv = document.createElement('div');\n mapDiv.style.position = 'absolute';\n mapDiv.style.top = '0';\n mapDiv.style.left = '0';\n mapDiv.style.width = '100%';\n mapDiv.style.height = '100%';\n mapDiv.style.opacity = '0';\n mapDiv.style.transition = 'opacity 1s ease';\n container.appendChild(mapDiv);\n\n // Stop pointer events from propagating to VistaView's drag handlers\n mapDiv.addEventListener('pointerdown', (e) => {\n e.stopPropagation();\n });\n\n mapboxgl.accessToken = this.mapboxConfig.accessToken;\n\n const map = new mapboxgl.Map({\n container: mapDiv,\n style: `mapbox://styles/mapbox/${this.mapboxConfig.style || 'streets-v12'}`,\n center: [this.location.lng, this.location.lat],\n zoom: this.location.zoom || this.mapboxConfig.zoom || 15,\n bearing: this.location.bearing || this.mapboxConfig.bearing || 0,\n pitch: this.location.pitch || this.mapboxConfig.pitch || 0,\n });\n\n // Add marker\n new mapboxgl.Marker({ color: '#ff0000' })\n .setLngLat([this.location.lng, this.location.lat])\n .addTo(map);\n\n // Add navigation controls\n map.addControl(new mapboxgl.NavigationControl());\n\n map.on('load', () => {\n this.onImageReady = () => {\n map.resize();\n mapDiv.style.opacity = '1';\n this.thumbnailImage.classList.remove('vvw--pulsing');\n };\n\n this.isLoadedResolved!(true);\n });\n\n map.on('error', (e: any) => {\n this.isLoadedRejected!(e);\n });\n }\n\n // Use 16:9 aspect ratio with max 800px width\n protected getFullSizeDim(): { width: number; height: number } {\n const maxWidth = Math.min(window.innerWidth, this.mapboxConfig.width || 800);\n return {\n width: maxWidth,\n height: (maxWidth * 9) / 16,\n };\n }\n\n // Override to avoid propagating content change event\n setFinalTransform() {\n return super.setFinalTransform({ propagateEvent: false });\n }\n}\n\nexport function mapbox(config: MapboxConfig): VistaExtension {\n if (!config.accessToken) {\n console.error('Mapbox access token is required');\n }\n\n return {\n name: 'mapbox',\n onInitializeImage: (params: VistaImageParams) => {\n const url = params.elm.config.src;\n const location = parseMapboxLocation(url);\n if (!location) return;\n\n return new VistaMapbox(params, config, location);\n },\n onImageView: async (data: VistaData, v: VistaView) => {\n const mainData = data.images.to![Math.floor(data.images.to!.length / 2)];\n if (mainData instanceof VistaMapbox) {\n v.deactivateUi(['download', 'zoomIn', 'zoomOut'], mainData);\n }\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.test.d.ts","sourceRoot":"","sources":["../src/main.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`vistaview`)):typeof define==`function`&&define.amd?define([`exports`,`vistaview`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.VistaView=e.VistaView||{},e.VistaView))})(this,function(e,t){function n(e){if(!e)return null;try{let t=e.match(/(-?\d+\.?\d*),\s*(-?\d+\.?\d*),?\s*(\d+\.?\d*)?,?\s*(\d+\.?\d*)?,?\s*(\d+\.?\d*)?/);if(t)return{lng:parseFloat(t[1]),lat:parseFloat(t[2]),zoom:t[3]?parseFloat(t[3]):void 0,bearing:t[4]?parseFloat(t[4]):void 0,pitch:t[5]?parseFloat(t[5]):void 0};let n=new URL(e);if(n.hostname.includes(`mapbox.com`)){let e=n.pathname.match(/@(-?\d+\.?\d*),(-?\d+\.?\d*),(\d+\.?\d*)?/);if(e)return{lng:parseFloat(e[1]),lat:parseFloat(e[2]),zoom:e[3]?parseFloat(e[3]):void 0}}}catch{}return null}function r(e,t){let n=e.zoom||t.zoom||15,r=t.width||800,i=t.height||600,a=t.style||`streets-v12`,o=e.bearing||t.bearing||0,s=e.pitch||t.pitch||0;return`https://api.mapbox.com/styles/v1/mapbox/${a}/static/${`pin-s+ff0000(${e.lng},${e.lat})`}/${e.lng},${e.lat},${n},${o},${s}/${r}x${i}@2x?access_token=${t.accessToken}`}var i=class extends t.VistaBox{element;mapboxConfig;location;thumbnailImage;constructor(e,t,n){super(e),this.mapboxConfig=t,this.location=n;let i=document.createElement(`div`);i.style.position=`relative`,this.thumbnailImage=document.createElement(`img`),i.appendChild(this.thumbnailImage),this.thumbnailImage.src=this.origin?.image.src||r(n,t),this.thumbnailImage.style.width=`100%`,this.thumbnailImage.style.height=`100%`,this.thumbnailImage.style.objectFit=`cover`,this.thumbnailImage.classList.add(`vvw--pulsing`),this.element=i,this.element.classList.add(`vvw-img-hi`);let{width:a,height:o}=this.getFullSizeDim();this.fullH=o,this.fullW=a,this.minW=this.fullW*.5,this.maxW=this.fullW,this.element.style.width=`${a}px`,this.element.style.height=`${o}px`,this.setSizes({stableSize:!1,initDimension:!0}),this.pos===0?this.loadMapboxGL().then(()=>{this.initializeMap(i)}):this.isLoadedResolved(!0)}async loadMapboxGL(){if(!window.mapboxgl){if(!document.querySelector(`.vistaview-mapbox-gl-css`)){let e=document.createElement(`link`);e.rel=`stylesheet`,e.href=`https://api.mapbox.com/mapbox-gl-js/v3.0.1/mapbox-gl.css`,e.className=`vistaview-mapbox-gl-css`,document.head.appendChild(e)}if(!document.querySelector(`.vistaview-mapbox-gl-js`))return new Promise((e,t)=>{let n=document.createElement(`script`);n.src=`https://api.mapbox.com/mapbox-gl-js/v3.0.1/mapbox-gl.js`,n.className=`vistaview-mapbox-gl-js`,n.onload=()=>e(),n.onerror=()=>t(Error(`Failed to load Mapbox GL JS`)),document.head.appendChild(n)})}}initializeMap(e){let t=window.mapboxgl;if(!t){this.isLoadedRejected(Error(`Mapbox GL JS not loaded`));return}let n=document.createElement(`div`);n.style.position=`absolute`,n.style.top=`0`,n.style.left=`0`,n.style.width=`100%`,n.style.height=`100%`,n.style.opacity=`0`,n.style.transition=`opacity 1s ease`,e.appendChild(n),n.addEventListener(`pointerdown`,e=>{e.stopPropagation()}),t.accessToken=this.mapboxConfig.accessToken;let r=new t.Map({container:n,style:`mapbox://styles/mapbox/${this.mapboxConfig.style||`streets-v12`}`,center:[this.location.lng,this.location.lat],zoom:this.location.zoom||this.mapboxConfig.zoom||15,bearing:this.location.bearing||this.mapboxConfig.bearing||0,pitch:this.location.pitch||this.mapboxConfig.pitch||0});new t.Marker({color:`#ff0000`}).setLngLat([this.location.lng,this.location.lat]).addTo(r),r.addControl(new t.NavigationControl),r.on(`load`,()=>{this.onImageReady=()=>{r.resize(),n.style.opacity=`1`,this.thumbnailImage.classList.remove(`vvw--pulsing`)},this.isLoadedResolved(!0)}),r.on(`error`,e=>{this.isLoadedRejected(e)})}getFullSizeDim(){let e=Math.min(window.innerWidth,this.mapboxConfig.width||800);return{width:e,height:e*9/16}}setFinalTransform(){return super.setFinalTransform({propagateEvent:!1})}};function a(e){return e.accessToken||console.error(`Mapbox access token is required`),{name:`mapbox`,onInitializeImage:t=>{let r=t.elm.config.src,a=n(r);if(a)return new i(t,e,a)},onImageView:async(e,t)=>{let n=e.images.to[Math.floor(e.images.to.length/2)];n instanceof i&&t.deactivateUi([`download`,`zoomIn`,`zoomOut`],n)}}}e.VistaMapbox=i,e.getMapboxStaticImage=r,e.mapbox=a,e.parseMapboxLocation=n});
|
|
2
|
+
//# sourceMappingURL=main.umd.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.umd.cjs","names":[],"sources":["../src/main.ts"],"sourcesContent":["import type { VistaData, VistaExtension, VistaImageParams, VistaView } from 'vistaview';\nimport { VistaBox } from 'vistaview';\n\nexport interface MapboxConfig {\n accessToken: string;\n zoom?: number; // Default zoom level (0-22)\n width?: number; // Map width in pixels\n height?: number; // Map height in pixels\n style?: string; // Map style (e.g., 'streets-v12', 'satellite-v9', 'outdoors-v12')\n pitch?: number; // Camera pitch (0-60)\n bearing?: number; // Camera bearing (0-359)\n}\n\nexport interface MapboxLocation {\n lng: number;\n lat: number;\n zoom?: number;\n bearing?: number;\n pitch?: number;\n}\n\n/**\n * Parse Mapbox URL and extract location data\n * Supports various Mapbox URL formats:\n * - https://api.mapbox.com/styles/v1/{username}/{style_id}/static/-74.0060,40.7128,15,0/800x600\n * - Custom format: mapbox://-74.0060,40.7128,15\n * @param url - Mapbox URL or coordinate string\n * @returns Location data or null if not found\n */\nexport function parseMapboxLocation(url: string): MapboxLocation | null {\n if (!url) return null;\n\n try {\n // Match pattern: lng,lat,zoom or lng,lat,zoom,bearing,pitch\n const coordMatch = url.match(\n /(-?\\d+\\.?\\d*),\\s*(-?\\d+\\.?\\d*),?\\s*(\\d+\\.?\\d*)?,?\\s*(\\d+\\.?\\d*)?,?\\s*(\\d+\\.?\\d*)?/\n );\n if (coordMatch) {\n return {\n lng: parseFloat(coordMatch[1]),\n lat: parseFloat(coordMatch[2]),\n zoom: coordMatch[3] ? parseFloat(coordMatch[3]) : undefined,\n bearing: coordMatch[4] ? parseFloat(coordMatch[4]) : undefined,\n pitch: coordMatch[5] ? parseFloat(coordMatch[5]) : undefined,\n };\n }\n\n // Try URL parsing for mapbox.com links\n const urlObj = new URL(url);\n if (urlObj.hostname.includes('mapbox.com')) {\n // Extract from pathname like /@lng,lat,zoom\n const atMatch = urlObj.pathname.match(/@(-?\\d+\\.?\\d*),(-?\\d+\\.?\\d*),(\\d+\\.?\\d*)?/);\n if (atMatch) {\n return {\n lng: parseFloat(atMatch[1]),\n lat: parseFloat(atMatch[2]),\n zoom: atMatch[3] ? parseFloat(atMatch[3]) : undefined,\n };\n }\n }\n } catch (error) {\n // Not a valid URL, might be coordinate string - already handled above\n }\n\n return null;\n}\n\n/**\n * Get Mapbox static image URL\n * @param location - Location data\n * @param config - Mapbox configuration\n * @returns Static map image URL\n */\nexport function getMapboxStaticImage(location: MapboxLocation, config: MapboxConfig): string {\n const zoom = location.zoom || config.zoom || 15;\n const width = config.width || 800;\n const height = config.height || 600;\n const style = config.style || 'streets-v12';\n const bearing = location.bearing || config.bearing || 0;\n const pitch = location.pitch || config.pitch || 0;\n\n // Add marker overlay\n const marker = `pin-s+ff0000(${location.lng},${location.lat})`;\n\n return `https://api.mapbox.com/styles/v1/mapbox/${style}/static/${marker}/${location.lng},${location.lat},${zoom},${bearing},${pitch}/${width}x${height}@2x?access_token=${config.accessToken}`;\n}\n\nexport class VistaMapbox extends VistaBox {\n element: HTMLDivElement;\n private mapboxConfig: MapboxConfig;\n private location: MapboxLocation;\n private thumbnailImage: HTMLImageElement;\n\n constructor(par: VistaImageParams, config: MapboxConfig, location: MapboxLocation) {\n super(par);\n\n this.mapboxConfig = config;\n this.location = location;\n\n const div = document.createElement('div');\n div.style.position = 'relative';\n this.thumbnailImage = document.createElement('img');\n div.appendChild(this.thumbnailImage);\n this.thumbnailImage.src = this.origin?.image.src || getMapboxStaticImage(location, config);\n this.thumbnailImage.style.width = '100%';\n this.thumbnailImage.style.height = '100%';\n this.thumbnailImage.style.objectFit = 'cover';\n this.thumbnailImage.classList.add('vvw--pulsing');\n\n this.element = div;\n\n this.element.classList.add('vvw-img-hi');\n\n // Set sizes\n const { width: fullWidth, height: fullHeight } = this.getFullSizeDim();\n this.fullH = fullHeight;\n this.fullW = fullWidth;\n this.minW = this.fullW * 0.5;\n this.maxW = this.fullW; // no scaling\n this.element.style.width = `${fullWidth}px`;\n this.element.style.height = `${fullHeight}px`;\n\n // Trigger setSizes to setup thumb and map initial style\n this.setSizes({ stableSize: false, initDimension: true });\n\n if (this.pos === 0) {\n // Load Mapbox GL JS dynamically if not already loaded\n this.loadMapboxGL().then(() => {\n this.initializeMap(div);\n });\n } else {\n this.isLoadedResolved!(true);\n }\n }\n\n private async loadMapboxGL(): Promise<void> {\n // Check if Mapbox GL is already loaded\n if ((window as any).mapboxgl) {\n return;\n }\n\n // Load CSS\n if (!document.querySelector('.vistaview-mapbox-gl-css')) {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = 'https://api.mapbox.com/mapbox-gl-js/v3.0.1/mapbox-gl.css';\n link.className = 'vistaview-mapbox-gl-css';\n document.head.appendChild(link);\n }\n\n // Load JS\n if (document.querySelector('.vistaview-mapbox-gl-js')) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = 'https://api.mapbox.com/mapbox-gl-js/v3.0.1/mapbox-gl.js';\n script.className = 'vistaview-mapbox-gl-js';\n script.onload = () => resolve();\n script.onerror = () => reject(new Error('Failed to load Mapbox GL JS'));\n document.head.appendChild(script);\n });\n }\n\n private initializeMap(container: HTMLDivElement): void {\n const mapboxgl = (window as any).mapboxgl;\n if (!mapboxgl) {\n this.isLoadedRejected!(new Error('Mapbox GL JS not loaded'));\n return;\n }\n\n // Create map container div\n const mapDiv = document.createElement('div');\n mapDiv.style.position = 'absolute';\n mapDiv.style.top = '0';\n mapDiv.style.left = '0';\n mapDiv.style.width = '100%';\n mapDiv.style.height = '100%';\n mapDiv.style.opacity = '0';\n mapDiv.style.transition = 'opacity 1s ease';\n container.appendChild(mapDiv);\n\n // Stop pointer events from propagating to VistaView's drag handlers\n mapDiv.addEventListener('pointerdown', (e) => {\n e.stopPropagation();\n });\n\n mapboxgl.accessToken = this.mapboxConfig.accessToken;\n\n const map = new mapboxgl.Map({\n container: mapDiv,\n style: `mapbox://styles/mapbox/${this.mapboxConfig.style || 'streets-v12'}`,\n center: [this.location.lng, this.location.lat],\n zoom: this.location.zoom || this.mapboxConfig.zoom || 15,\n bearing: this.location.bearing || this.mapboxConfig.bearing || 0,\n pitch: this.location.pitch || this.mapboxConfig.pitch || 0,\n });\n\n // Add marker\n new mapboxgl.Marker({ color: '#ff0000' })\n .setLngLat([this.location.lng, this.location.lat])\n .addTo(map);\n\n // Add navigation controls\n map.addControl(new mapboxgl.NavigationControl());\n\n map.on('load', () => {\n this.onImageReady = () => {\n map.resize();\n mapDiv.style.opacity = '1';\n this.thumbnailImage.classList.remove('vvw--pulsing');\n };\n\n this.isLoadedResolved!(true);\n });\n\n map.on('error', (e: any) => {\n this.isLoadedRejected!(e);\n });\n }\n\n // Use 16:9 aspect ratio with max 800px width\n protected getFullSizeDim(): { width: number; height: number } {\n const maxWidth = Math.min(window.innerWidth, this.mapboxConfig.width || 800);\n return {\n width: maxWidth,\n height: (maxWidth * 9) / 16,\n };\n }\n\n // Override to avoid propagating content change event\n setFinalTransform() {\n return super.setFinalTransform({ propagateEvent: false });\n }\n}\n\nexport function mapbox(config: MapboxConfig): VistaExtension {\n if (!config.accessToken) {\n console.error('Mapbox access token is required');\n }\n\n return {\n name: 'mapbox',\n onInitializeImage: (params: VistaImageParams) => {\n const url = params.elm.config.src;\n const location = parseMapboxLocation(url);\n if (!location) return;\n\n return new VistaMapbox(params, config, location);\n },\n onImageView: async (data: VistaData, v: VistaView) => {\n const mainData = data.images.to![Math.floor(data.images.to!.length / 2)];\n if (mainData instanceof VistaMapbox) {\n v.deactivateUi(['download', 'zoomIn', 'zoomOut'], mainData);\n }\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { VistaExtension, VistaImageParams } from '
|
|
2
|
-
import { VistaBox } from '
|
|
1
|
+
import type { VistaExtension, VistaImageParams } from 'vistaview';
|
|
2
|
+
import { VistaBox } from 'vistaview';
|
|
3
3
|
export interface OpenStreetMapConfig {
|
|
4
4
|
zoom?: number;
|
|
5
5
|
width?: number;
|
|
@@ -48,4 +48,4 @@ export declare class VistaOpenStreetMap extends VistaBox {
|
|
|
48
48
|
} | undefined;
|
|
49
49
|
}
|
|
50
50
|
export declare function openStreetMap(config?: OpenStreetMapConfig): VistaExtension;
|
|
51
|
-
//# sourceMappingURL=
|
|
51
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,gBAAgB,EAAa,MAAM,WAAW,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CA0CpF;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,qBAAqB,EAC/B,MAAM,EAAE,mBAAmB,GAC1B,MAAM,CAiBR;AAED,qBAAa,kBAAmB,SAAQ,QAAQ;IAC9C,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,cAAc,CAAmB;gBAE7B,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,qBAAqB;YA2CjF,WAAW;IA8BzB,OAAO,CAAC,aAAa;IA2DrB,SAAS,CAAC,cAAc,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAS7D,iBAAiB;;;;CAGlB;AAED,wBAAgB,aAAa,CAAC,MAAM,GAAE,mBAAwB,GAAG,cAAc,CAiB9E"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { VistaBox } from "vistaview";
|
|
2
|
+
function parseOpenStreetMapLocation(e) {
|
|
3
|
+
if (!e) return null;
|
|
4
|
+
try {
|
|
5
|
+
let t = e.match(/(-?\d+\.?\d*),\s*(-?\d+\.?\d*),?\s*(\d+\.?\d*)?/);
|
|
6
|
+
if (t) return {
|
|
7
|
+
lat: parseFloat(t[1]),
|
|
8
|
+
lng: parseFloat(t[2]),
|
|
9
|
+
zoom: t[3] ? parseFloat(t[3]) : void 0
|
|
10
|
+
};
|
|
11
|
+
let n = new URL(e);
|
|
12
|
+
if (n.hostname.includes("openstreetmap.org")) {
|
|
13
|
+
let e = n.hash.match(/#map=(\d+\.?\d*)\/(-?\d+\.?\d*)\/(-?\d+\.?\d*)/);
|
|
14
|
+
if (e) return {
|
|
15
|
+
zoom: parseFloat(e[1]),
|
|
16
|
+
lat: parseFloat(e[2]),
|
|
17
|
+
lng: parseFloat(e[3])
|
|
18
|
+
};
|
|
19
|
+
let t = n.searchParams.get("mlat"), r = n.searchParams.get("mlon");
|
|
20
|
+
if (t && r) return {
|
|
21
|
+
lat: parseFloat(t),
|
|
22
|
+
lng: parseFloat(r)
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
} catch {}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
function getOpenStreetMapStaticImage(e, t) {
|
|
29
|
+
let n = e.zoom || t.zoom || 15, r = e.lat, i = e.lng, a = 2 ** n;
|
|
30
|
+
return `https://tile.openstreetmap.org/${n}/${Math.floor((i + 180) / 360 * a)}/${Math.floor((1 - Math.log(Math.tan(r * Math.PI / 180) + 1 / Math.cos(r * Math.PI / 180)) / Math.PI) / 2 * a)}.png`;
|
|
31
|
+
}
|
|
32
|
+
var VistaOpenStreetMap = class extends VistaBox {
|
|
33
|
+
element;
|
|
34
|
+
osmConfig;
|
|
35
|
+
location;
|
|
36
|
+
thumbnailImage;
|
|
37
|
+
constructor(e, t, r) {
|
|
38
|
+
super(e), this.osmConfig = t, this.location = r;
|
|
39
|
+
let i = document.createElement("div");
|
|
40
|
+
i.style.position = "relative", this.thumbnailImage = document.createElement("img"), i.appendChild(this.thumbnailImage), this.thumbnailImage.src = this.origin?.image.src || getOpenStreetMapStaticImage(r, t), this.thumbnailImage.style.width = "100%", this.thumbnailImage.style.height = "100%", this.thumbnailImage.style.objectFit = "cover", this.thumbnailImage.classList.add("vvw--pulsing"), this.element = i, this.element.classList.add("vvw-img-hi");
|
|
41
|
+
let { width: a, height: o } = this.getFullSizeDim();
|
|
42
|
+
this.fullH = o, this.fullW = a, this.minW = this.fullW * .5, this.maxW = this.fullW, this.element.style.width = `${a}px`, this.element.style.height = `${o}px`, this.setSizes({
|
|
43
|
+
stableSize: !1,
|
|
44
|
+
initDimension: !0
|
|
45
|
+
}), this.pos === 0 ? this.loadLeaflet().then(() => {
|
|
46
|
+
this.initializeMap(i);
|
|
47
|
+
}) : this.isLoadedResolved(!0);
|
|
48
|
+
}
|
|
49
|
+
async loadLeaflet() {
|
|
50
|
+
if (!window.L) {
|
|
51
|
+
if (!document.querySelector(".vistaview-leaflet-css")) {
|
|
52
|
+
let e = document.createElement("link");
|
|
53
|
+
e.rel = "stylesheet", e.href = "https://unpkg.com/leaflet@1.9.4/dist/leaflet.css", e.className = "vistaview-leaflet-css", document.head.appendChild(e);
|
|
54
|
+
}
|
|
55
|
+
if (!document.querySelector(".vistaview-leaflet-js")) return new Promise((e, t) => {
|
|
56
|
+
let n = document.createElement("script");
|
|
57
|
+
n.src = "https://unpkg.com/leaflet@1.9.4/dist/leaflet.js", n.className = "vistaview-leaflet-js", n.onload = () => e(), n.onerror = () => t(/* @__PURE__ */ Error("Failed to load Leaflet")), document.head.appendChild(n);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
initializeMap(e) {
|
|
62
|
+
let t = window.L;
|
|
63
|
+
if (!t) {
|
|
64
|
+
this.isLoadedRejected(/* @__PURE__ */ Error("Leaflet not loaded"));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
let n = document.createElement("div");
|
|
68
|
+
n.style.position = "absolute", n.style.top = "0", n.style.left = "0", n.style.width = "100%", n.style.height = "100%", n.style.opacity = "0", n.style.transition = "opacity 1s ease", e.appendChild(n), n.addEventListener("pointerdown", (e) => {
|
|
69
|
+
e.stopPropagation();
|
|
70
|
+
});
|
|
71
|
+
let r = t.map(n, {
|
|
72
|
+
center: [this.location.lat, this.location.lng],
|
|
73
|
+
zoom: this.location.zoom || this.osmConfig.zoom || 15
|
|
74
|
+
}), i = this.osmConfig.tileLayer || "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", a = this.osmConfig.attribution || "© <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors";
|
|
75
|
+
t.tileLayer(i, {
|
|
76
|
+
attribution: a,
|
|
77
|
+
maxZoom: 19
|
|
78
|
+
}).addTo(r), t.marker([this.location.lat, this.location.lng]).addTo(r).bindPopup(`${this.location.lat}, ${this.location.lng}`), r.whenReady(() => {
|
|
79
|
+
this.onImageReady = () => {
|
|
80
|
+
r.invalidateSize(), n.style.opacity = "1", this.thumbnailImage.classList.remove("vvw--pulsing");
|
|
81
|
+
}, this.isLoadedResolved(!0);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
getFullSizeDim() {
|
|
85
|
+
let e = Math.min(window.innerWidth, this.osmConfig.width || 800);
|
|
86
|
+
return {
|
|
87
|
+
width: e,
|
|
88
|
+
height: e * 9 / 16
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
setFinalTransform() {
|
|
92
|
+
return super.setFinalTransform({ propagateEvent: !1 });
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
function openStreetMap(e = {}) {
|
|
96
|
+
return {
|
|
97
|
+
name: "openStreetMap",
|
|
98
|
+
onInitializeImage: (n) => {
|
|
99
|
+
let i = n.elm.config.src, a = parseOpenStreetMapLocation(i);
|
|
100
|
+
if (a) return new VistaOpenStreetMap(n, e, a);
|
|
101
|
+
},
|
|
102
|
+
onImageView: async (e, t) => {
|
|
103
|
+
let n = e.images.to[Math.floor(e.images.to.length / 2)];
|
|
104
|
+
n instanceof VistaOpenStreetMap && t.deactivateUi([
|
|
105
|
+
"download",
|
|
106
|
+
"zoomIn",
|
|
107
|
+
"zoomOut"
|
|
108
|
+
], n);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export { VistaOpenStreetMap, getOpenStreetMapStaticImage, openStreetMap, parseOpenStreetMapLocation };
|
|
113
|
+
|
|
114
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","names":[],"sources":["../src/main.ts"],"sourcesContent":["import type { VistaData, VistaExtension, VistaImageParams, VistaView } from 'vistaview';\nimport { VistaBox } from 'vistaview';\n\nexport interface OpenStreetMapConfig {\n zoom?: number; // Default zoom level (0-19)\n width?: number; // Map width in pixels\n height?: number; // Map height in pixels\n tileLayer?: string; // Tile layer URL (default: OpenStreetMap)\n attribution?: string; // Custom attribution\n}\n\nexport interface OpenStreetMapLocation {\n lat: number;\n lng: number;\n zoom?: number;\n}\n\n/**\n * Parse OpenStreetMap URL and extract location data\n * Supports various OpenStreetMap URL formats:\n * - https://www.openstreetmap.org/#map=15/40.7128/-74.0060\n * - https://www.openstreetmap.org/?mlat=40.7128&mlon=-74.0060#map=15/40.7128/-74.0060\n * - Custom format: osm://40.7128,-74.0060,15\n * @param url - OpenStreetMap URL or coordinate string\n * @returns Location data or null if not found\n */\nexport function parseOpenStreetMapLocation(url: string): OpenStreetMapLocation | null {\n if (!url) return null;\n\n try {\n // Match custom format: osm://lat,lng,zoom or just lat,lng,zoom\n const coordMatch = url.match(/(-?\\d+\\.?\\d*),\\s*(-?\\d+\\.?\\d*),?\\s*(\\d+\\.?\\d*)?/);\n if (coordMatch) {\n return {\n lat: parseFloat(coordMatch[1]),\n lng: parseFloat(coordMatch[2]),\n zoom: coordMatch[3] ? parseFloat(coordMatch[3]) : undefined,\n };\n }\n\n // Try URL parsing for openstreetmap.org links\n const urlObj = new URL(url);\n if (urlObj.hostname.includes('openstreetmap.org')) {\n // Extract from hash like #map=15/40.7128/-74.0060\n const hashMatch = urlObj.hash.match(/#map=(\\d+\\.?\\d*)\\/(-?\\d+\\.?\\d*)\\/(-?\\d+\\.?\\d*)/);\n if (hashMatch) {\n return {\n zoom: parseFloat(hashMatch[1]),\n lat: parseFloat(hashMatch[2]),\n lng: parseFloat(hashMatch[3]),\n };\n }\n\n // Extract from query params\n const mlat = urlObj.searchParams.get('mlat');\n const mlon = urlObj.searchParams.get('mlon');\n if (mlat && mlon) {\n return {\n lat: parseFloat(mlat),\n lng: parseFloat(mlon),\n };\n }\n }\n } catch (error) {\n // Not a valid URL, might be coordinate string - already handled above\n }\n\n return null;\n}\n\n/**\n * Get OpenStreetMap static image URL\n * Uses a direct tile approach for static map preview\n * @param location - Location data\n * @param config - OpenStreetMap configuration\n * @returns Static map image URL\n */\nexport function getOpenStreetMapStaticImage(\n location: OpenStreetMapLocation,\n config: OpenStreetMapConfig\n): string {\n const zoom = location.zoom || config.zoom || 15;\n\n // Calculate tile coordinates for the given lat/lng/zoom\n const lat = location.lat;\n const lng = location.lng;\n const n = Math.pow(2, zoom);\n const x = Math.floor(((lng + 180) / 360) * n);\n const y = Math.floor(\n ((1 -\n Math.log(Math.tan((lat * Math.PI) / 180) + 1 / Math.cos((lat * Math.PI) / 180)) / Math.PI) /\n 2) *\n n\n );\n\n // Return a single tile centered on the location\n return `https://tile.openstreetmap.org/${zoom}/${x}/${y}.png`;\n}\n\nexport class VistaOpenStreetMap extends VistaBox {\n element: HTMLDivElement;\n private osmConfig: OpenStreetMapConfig;\n private location: OpenStreetMapLocation;\n private thumbnailImage: HTMLImageElement;\n\n constructor(par: VistaImageParams, config: OpenStreetMapConfig, location: OpenStreetMapLocation) {\n super(par);\n\n this.osmConfig = config;\n this.location = location;\n\n const div = document.createElement('div');\n div.style.position = 'relative';\n this.thumbnailImage = document.createElement('img');\n div.appendChild(this.thumbnailImage);\n this.thumbnailImage.src =\n this.origin?.image.src || getOpenStreetMapStaticImage(location, config);\n this.thumbnailImage.style.width = '100%';\n this.thumbnailImage.style.height = '100%';\n this.thumbnailImage.style.objectFit = 'cover';\n this.thumbnailImage.classList.add('vvw--pulsing');\n\n this.element = div;\n\n this.element.classList.add('vvw-img-hi');\n\n // Set sizes\n const { width: fullWidth, height: fullHeight } = this.getFullSizeDim();\n this.fullH = fullHeight;\n this.fullW = fullWidth;\n this.minW = this.fullW * 0.5;\n this.maxW = this.fullW; // no scaling\n this.element.style.width = `${fullWidth}px`;\n this.element.style.height = `${fullHeight}px`;\n\n // Trigger setSizes to setup thumb and map initial style\n this.setSizes({ stableSize: false, initDimension: true });\n\n if (this.pos === 0) {\n // Load Leaflet dynamically if not already loaded\n this.loadLeaflet().then(() => {\n this.initializeMap(div);\n });\n } else {\n this.isLoadedResolved!(true);\n }\n }\n\n private async loadLeaflet(): Promise<void> {\n // Check if Leaflet is already loaded\n if ((window as any).L) {\n return;\n }\n\n // Load CSS\n if (!document.querySelector('.vistaview-leaflet-css')) {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.css';\n link.className = 'vistaview-leaflet-css';\n document.head.appendChild(link);\n }\n\n // Load JS\n if (document.querySelector('.vistaview-leaflet-js')) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.js';\n script.className = 'vistaview-leaflet-js';\n script.onload = () => resolve();\n script.onerror = () => reject(new Error('Failed to load Leaflet'));\n document.head.appendChild(script);\n });\n }\n\n private initializeMap(container: HTMLDivElement): void {\n const L = (window as any).L;\n if (!L) {\n this.isLoadedRejected!(new Error('Leaflet not loaded'));\n return;\n }\n\n // Create map container div\n const mapDiv = document.createElement('div');\n mapDiv.style.position = 'absolute';\n mapDiv.style.top = '0';\n mapDiv.style.left = '0';\n mapDiv.style.width = '100%';\n mapDiv.style.height = '100%';\n mapDiv.style.opacity = '0';\n mapDiv.style.transition = 'opacity 1s ease';\n container.appendChild(mapDiv);\n\n // Stop pointer events from propagating to VistaView's drag handlers\n mapDiv.addEventListener('pointerdown', (e) => {\n e.stopPropagation();\n });\n\n // Initialize Leaflet map\n const map = L.map(mapDiv, {\n center: [this.location.lat, this.location.lng],\n zoom: this.location.zoom || this.osmConfig.zoom || 15,\n });\n\n // Add tile layer\n const tileLayer =\n this.osmConfig.tileLayer || 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n const attribution =\n this.osmConfig.attribution ||\n '© <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors';\n\n L.tileLayer(tileLayer, {\n attribution: attribution,\n maxZoom: 19,\n }).addTo(map);\n\n // Add marker\n L.marker([this.location.lat, this.location.lng])\n .addTo(map)\n .bindPopup(`${this.location.lat}, ${this.location.lng}`);\n\n // Wait for tiles to load\n map.whenReady(() => {\n this.onImageReady = () => {\n map.invalidateSize();\n mapDiv.style.opacity = '1';\n this.thumbnailImage.classList.remove('vvw--pulsing');\n };\n\n this.isLoadedResolved!(true);\n });\n }\n\n // Use 16:9 aspect ratio with max 800px width\n protected getFullSizeDim(): { width: number; height: number } {\n const maxWidth = Math.min(window.innerWidth, this.osmConfig.width || 800);\n return {\n width: maxWidth,\n height: (maxWidth * 9) / 16,\n };\n }\n\n // Override to avoid propagating content change event\n setFinalTransform() {\n return super.setFinalTransform({ propagateEvent: false });\n }\n}\n\nexport function openStreetMap(config: OpenStreetMapConfig = {}): VistaExtension {\n return {\n name: 'openStreetMap',\n onInitializeImage: (params: VistaImageParams) => {\n const url = params.elm.config.src;\n const location = parseOpenStreetMapLocation(url);\n if (!location) return;\n\n return new VistaOpenStreetMap(params, config, location);\n },\n onImageView: async (data: VistaData, v: VistaView) => {\n const mainData = data.images.to![Math.floor(data.images.to!.length / 2)];\n if (mainData instanceof VistaOpenStreetMap) {\n v.deactivateUi(['download', 'zoomIn', 'zoomOut'], mainData);\n }\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.test.d.ts","sourceRoot":"","sources":["../src/main.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`vistaview`)):typeof define==`function`&&define.amd?define([`exports`,`vistaview`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.VistaView=e.VistaView||{},e.VistaView))})(this,function(e,t){function n(e){if(!e)return null;try{let t=e.match(/(-?\d+\.?\d*),\s*(-?\d+\.?\d*),?\s*(\d+\.?\d*)?/);if(t)return{lat:parseFloat(t[1]),lng:parseFloat(t[2]),zoom:t[3]?parseFloat(t[3]):void 0};let n=new URL(e);if(n.hostname.includes(`openstreetmap.org`)){let e=n.hash.match(/#map=(\d+\.?\d*)\/(-?\d+\.?\d*)\/(-?\d+\.?\d*)/);if(e)return{zoom:parseFloat(e[1]),lat:parseFloat(e[2]),lng:parseFloat(e[3])};let t=n.searchParams.get(`mlat`),r=n.searchParams.get(`mlon`);if(t&&r)return{lat:parseFloat(t),lng:parseFloat(r)}}}catch{}return null}function r(e,t){let n=e.zoom||t.zoom||15,r=e.lat,i=e.lng,a=2**n;return`https://tile.openstreetmap.org/${n}/${Math.floor((i+180)/360*a)}/${Math.floor((1-Math.log(Math.tan(r*Math.PI/180)+1/Math.cos(r*Math.PI/180))/Math.PI)/2*a)}.png`}var i=class extends t.VistaBox{element;osmConfig;location;thumbnailImage;constructor(e,t,n){super(e),this.osmConfig=t,this.location=n;let i=document.createElement(`div`);i.style.position=`relative`,this.thumbnailImage=document.createElement(`img`),i.appendChild(this.thumbnailImage),this.thumbnailImage.src=this.origin?.image.src||r(n,t),this.thumbnailImage.style.width=`100%`,this.thumbnailImage.style.height=`100%`,this.thumbnailImage.style.objectFit=`cover`,this.thumbnailImage.classList.add(`vvw--pulsing`),this.element=i,this.element.classList.add(`vvw-img-hi`);let{width:a,height:o}=this.getFullSizeDim();this.fullH=o,this.fullW=a,this.minW=this.fullW*.5,this.maxW=this.fullW,this.element.style.width=`${a}px`,this.element.style.height=`${o}px`,this.setSizes({stableSize:!1,initDimension:!0}),this.pos===0?this.loadLeaflet().then(()=>{this.initializeMap(i)}):this.isLoadedResolved(!0)}async loadLeaflet(){if(!window.L){if(!document.querySelector(`.vistaview-leaflet-css`)){let e=document.createElement(`link`);e.rel=`stylesheet`,e.href=`https://unpkg.com/leaflet@1.9.4/dist/leaflet.css`,e.className=`vistaview-leaflet-css`,document.head.appendChild(e)}if(!document.querySelector(`.vistaview-leaflet-js`))return new Promise((e,t)=>{let n=document.createElement(`script`);n.src=`https://unpkg.com/leaflet@1.9.4/dist/leaflet.js`,n.className=`vistaview-leaflet-js`,n.onload=()=>e(),n.onerror=()=>t(Error(`Failed to load Leaflet`)),document.head.appendChild(n)})}}initializeMap(e){let t=window.L;if(!t){this.isLoadedRejected(Error(`Leaflet not loaded`));return}let n=document.createElement(`div`);n.style.position=`absolute`,n.style.top=`0`,n.style.left=`0`,n.style.width=`100%`,n.style.height=`100%`,n.style.opacity=`0`,n.style.transition=`opacity 1s ease`,e.appendChild(n),n.addEventListener(`pointerdown`,e=>{e.stopPropagation()});let r=t.map(n,{center:[this.location.lat,this.location.lng],zoom:this.location.zoom||this.osmConfig.zoom||15}),i=this.osmConfig.tileLayer||`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`,a=this.osmConfig.attribution||`© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors`;t.tileLayer(i,{attribution:a,maxZoom:19}).addTo(r),t.marker([this.location.lat,this.location.lng]).addTo(r).bindPopup(`${this.location.lat}, ${this.location.lng}`),r.whenReady(()=>{this.onImageReady=()=>{r.invalidateSize(),n.style.opacity=`1`,this.thumbnailImage.classList.remove(`vvw--pulsing`)},this.isLoadedResolved(!0)})}getFullSizeDim(){let e=Math.min(window.innerWidth,this.osmConfig.width||800);return{width:e,height:e*9/16}}setFinalTransform(){return super.setFinalTransform({propagateEvent:!1})}};function a(e={}){return{name:`openStreetMap`,onInitializeImage:t=>{let r=t.elm.config.src,a=n(r);if(a)return new i(t,e,a)},onImageView:async(e,t)=>{let n=e.images.to[Math.floor(e.images.to.length/2)];n instanceof i&&t.deactivateUi([`download`,`zoomIn`,`zoomOut`],n)}}}e.VistaOpenStreetMap=i,e.getOpenStreetMapStaticImage=r,e.openStreetMap=a,e.parseOpenStreetMapLocation=n});
|
|
2
|
+
//# sourceMappingURL=main.umd.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.umd.cjs","names":[],"sources":["../src/main.ts"],"sourcesContent":["import type { VistaData, VistaExtension, VistaImageParams, VistaView } from 'vistaview';\nimport { VistaBox } from 'vistaview';\n\nexport interface OpenStreetMapConfig {\n zoom?: number; // Default zoom level (0-19)\n width?: number; // Map width in pixels\n height?: number; // Map height in pixels\n tileLayer?: string; // Tile layer URL (default: OpenStreetMap)\n attribution?: string; // Custom attribution\n}\n\nexport interface OpenStreetMapLocation {\n lat: number;\n lng: number;\n zoom?: number;\n}\n\n/**\n * Parse OpenStreetMap URL and extract location data\n * Supports various OpenStreetMap URL formats:\n * - https://www.openstreetmap.org/#map=15/40.7128/-74.0060\n * - https://www.openstreetmap.org/?mlat=40.7128&mlon=-74.0060#map=15/40.7128/-74.0060\n * - Custom format: osm://40.7128,-74.0060,15\n * @param url - OpenStreetMap URL or coordinate string\n * @returns Location data or null if not found\n */\nexport function parseOpenStreetMapLocation(url: string): OpenStreetMapLocation | null {\n if (!url) return null;\n\n try {\n // Match custom format: osm://lat,lng,zoom or just lat,lng,zoom\n const coordMatch = url.match(/(-?\\d+\\.?\\d*),\\s*(-?\\d+\\.?\\d*),?\\s*(\\d+\\.?\\d*)?/);\n if (coordMatch) {\n return {\n lat: parseFloat(coordMatch[1]),\n lng: parseFloat(coordMatch[2]),\n zoom: coordMatch[3] ? parseFloat(coordMatch[3]) : undefined,\n };\n }\n\n // Try URL parsing for openstreetmap.org links\n const urlObj = new URL(url);\n if (urlObj.hostname.includes('openstreetmap.org')) {\n // Extract from hash like #map=15/40.7128/-74.0060\n const hashMatch = urlObj.hash.match(/#map=(\\d+\\.?\\d*)\\/(-?\\d+\\.?\\d*)\\/(-?\\d+\\.?\\d*)/);\n if (hashMatch) {\n return {\n zoom: parseFloat(hashMatch[1]),\n lat: parseFloat(hashMatch[2]),\n lng: parseFloat(hashMatch[3]),\n };\n }\n\n // Extract from query params\n const mlat = urlObj.searchParams.get('mlat');\n const mlon = urlObj.searchParams.get('mlon');\n if (mlat && mlon) {\n return {\n lat: parseFloat(mlat),\n lng: parseFloat(mlon),\n };\n }\n }\n } catch (error) {\n // Not a valid URL, might be coordinate string - already handled above\n }\n\n return null;\n}\n\n/**\n * Get OpenStreetMap static image URL\n * Uses a direct tile approach for static map preview\n * @param location - Location data\n * @param config - OpenStreetMap configuration\n * @returns Static map image URL\n */\nexport function getOpenStreetMapStaticImage(\n location: OpenStreetMapLocation,\n config: OpenStreetMapConfig\n): string {\n const zoom = location.zoom || config.zoom || 15;\n\n // Calculate tile coordinates for the given lat/lng/zoom\n const lat = location.lat;\n const lng = location.lng;\n const n = Math.pow(2, zoom);\n const x = Math.floor(((lng + 180) / 360) * n);\n const y = Math.floor(\n ((1 -\n Math.log(Math.tan((lat * Math.PI) / 180) + 1 / Math.cos((lat * Math.PI) / 180)) / Math.PI) /\n 2) *\n n\n );\n\n // Return a single tile centered on the location\n return `https://tile.openstreetmap.org/${zoom}/${x}/${y}.png`;\n}\n\nexport class VistaOpenStreetMap extends VistaBox {\n element: HTMLDivElement;\n private osmConfig: OpenStreetMapConfig;\n private location: OpenStreetMapLocation;\n private thumbnailImage: HTMLImageElement;\n\n constructor(par: VistaImageParams, config: OpenStreetMapConfig, location: OpenStreetMapLocation) {\n super(par);\n\n this.osmConfig = config;\n this.location = location;\n\n const div = document.createElement('div');\n div.style.position = 'relative';\n this.thumbnailImage = document.createElement('img');\n div.appendChild(this.thumbnailImage);\n this.thumbnailImage.src =\n this.origin?.image.src || getOpenStreetMapStaticImage(location, config);\n this.thumbnailImage.style.width = '100%';\n this.thumbnailImage.style.height = '100%';\n this.thumbnailImage.style.objectFit = 'cover';\n this.thumbnailImage.classList.add('vvw--pulsing');\n\n this.element = div;\n\n this.element.classList.add('vvw-img-hi');\n\n // Set sizes\n const { width: fullWidth, height: fullHeight } = this.getFullSizeDim();\n this.fullH = fullHeight;\n this.fullW = fullWidth;\n this.minW = this.fullW * 0.5;\n this.maxW = this.fullW; // no scaling\n this.element.style.width = `${fullWidth}px`;\n this.element.style.height = `${fullHeight}px`;\n\n // Trigger setSizes to setup thumb and map initial style\n this.setSizes({ stableSize: false, initDimension: true });\n\n if (this.pos === 0) {\n // Load Leaflet dynamically if not already loaded\n this.loadLeaflet().then(() => {\n this.initializeMap(div);\n });\n } else {\n this.isLoadedResolved!(true);\n }\n }\n\n private async loadLeaflet(): Promise<void> {\n // Check if Leaflet is already loaded\n if ((window as any).L) {\n return;\n }\n\n // Load CSS\n if (!document.querySelector('.vistaview-leaflet-css')) {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.css';\n link.className = 'vistaview-leaflet-css';\n document.head.appendChild(link);\n }\n\n // Load JS\n if (document.querySelector('.vistaview-leaflet-js')) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.js';\n script.className = 'vistaview-leaflet-js';\n script.onload = () => resolve();\n script.onerror = () => reject(new Error('Failed to load Leaflet'));\n document.head.appendChild(script);\n });\n }\n\n private initializeMap(container: HTMLDivElement): void {\n const L = (window as any).L;\n if (!L) {\n this.isLoadedRejected!(new Error('Leaflet not loaded'));\n return;\n }\n\n // Create map container div\n const mapDiv = document.createElement('div');\n mapDiv.style.position = 'absolute';\n mapDiv.style.top = '0';\n mapDiv.style.left = '0';\n mapDiv.style.width = '100%';\n mapDiv.style.height = '100%';\n mapDiv.style.opacity = '0';\n mapDiv.style.transition = 'opacity 1s ease';\n container.appendChild(mapDiv);\n\n // Stop pointer events from propagating to VistaView's drag handlers\n mapDiv.addEventListener('pointerdown', (e) => {\n e.stopPropagation();\n });\n\n // Initialize Leaflet map\n const map = L.map(mapDiv, {\n center: [this.location.lat, this.location.lng],\n zoom: this.location.zoom || this.osmConfig.zoom || 15,\n });\n\n // Add tile layer\n const tileLayer =\n this.osmConfig.tileLayer || 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n const attribution =\n this.osmConfig.attribution ||\n '© <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors';\n\n L.tileLayer(tileLayer, {\n attribution: attribution,\n maxZoom: 19,\n }).addTo(map);\n\n // Add marker\n L.marker([this.location.lat, this.location.lng])\n .addTo(map)\n .bindPopup(`${this.location.lat}, ${this.location.lng}`);\n\n // Wait for tiles to load\n map.whenReady(() => {\n this.onImageReady = () => {\n map.invalidateSize();\n mapDiv.style.opacity = '1';\n this.thumbnailImage.classList.remove('vvw--pulsing');\n };\n\n this.isLoadedResolved!(true);\n });\n }\n\n // Use 16:9 aspect ratio with max 800px width\n protected getFullSizeDim(): { width: number; height: number } {\n const maxWidth = Math.min(window.innerWidth, this.osmConfig.width || 800);\n return {\n width: maxWidth,\n height: (maxWidth * 9) / 16,\n };\n }\n\n // Override to avoid propagating content change event\n setFinalTransform() {\n return super.setFinalTransform({ propagateEvent: false });\n }\n}\n\nexport function openStreetMap(config: OpenStreetMapConfig = {}): VistaExtension {\n return {\n name: 'openStreetMap',\n onInitializeImage: (params: VistaImageParams) => {\n const url = params.elm.config.src;\n const location = parseOpenStreetMapLocation(url);\n if (!location) return;\n\n return new VistaOpenStreetMap(params, config, location);\n },\n onImageView: async (data: VistaData, v: VistaView) => {\n const mainData = data.images.to![Math.floor(data.images.to!.length / 2)];\n if (mainData instanceof VistaOpenStreetMap) {\n v.deactivateUi(['download', 'zoomIn', 'zoomOut'], mainData);\n }\n },\n };\n}\n"],"mappings":"gRA0BA,SAAgB,EAA2B,EAA2C,CACpF,GAAI,CAAC,EAAK,OAAO,KAEjB,GAAI,CAEF,IAAM,EAAa,EAAI,MAAM,kDAAkD,CAC/E,GAAI,EACF,MAAO,CACL,IAAK,WAAW,EAAW,GAAG,CAC9B,IAAK,WAAW,EAAW,GAAG,CAC9B,KAAM,EAAW,GAAK,WAAW,EAAW,GAAG,CAAG,IAAA,GACnD,CAIH,IAAM,EAAS,IAAI,IAAI,EAAI,CAC3B,GAAI,EAAO,SAAS,SAAS,oBAAoB,CAAE,CAEjD,IAAM,EAAY,EAAO,KAAK,MAAM,iDAAiD,CACrF,GAAI,EACF,MAAO,CACL,KAAM,WAAW,EAAU,GAAG,CAC9B,IAAK,WAAW,EAAU,GAAG,CAC7B,IAAK,WAAW,EAAU,GAAG,CAC9B,CAIH,IAAM,EAAO,EAAO,aAAa,IAAI,OAAO,CACtC,EAAO,EAAO,aAAa,IAAI,OAAO,CAC5C,GAAI,GAAQ,EACV,MAAO,CACL,IAAK,WAAW,EAAK,CACrB,IAAK,WAAW,EAAK,CACtB,OAGS,EAIhB,OAAO,KAUT,SAAgB,EACd,EACA,EACQ,CACR,IAAM,EAAO,EAAS,MAAQ,EAAO,MAAQ,GAGvC,EAAM,EAAS,IACf,EAAM,EAAS,IACf,EAAa,GAAG,EAUtB,MAAO,kCAAkC,EAAK,GATpC,KAAK,OAAQ,EAAM,KAAO,IAAO,EAAE,CASM,GARzC,KAAK,OACX,EACA,KAAK,IAAI,KAAK,IAAK,EAAM,KAAK,GAAM,IAAI,CAAG,EAAI,KAAK,IAAK,EAAM,KAAK,GAAM,IAAI,CAAC,CAAG,KAAK,IACvF,EACA,EACH,CAGuD,MAG1D,IAAa,EAAb,cAAwC,EAAA,QAAS,CAC/C,QACA,UACA,SACA,eAEA,YAAY,EAAuB,EAA6B,EAAiC,CAC/F,MAAM,EAAI,CAEV,KAAK,UAAY,EACjB,KAAK,SAAW,EAEhB,IAAM,EAAM,SAAS,cAAc,MAAM,CACzC,EAAI,MAAM,SAAW,WACrB,KAAK,eAAiB,SAAS,cAAc,MAAM,CACnD,EAAI,YAAY,KAAK,eAAe,CACpC,KAAK,eAAe,IAClB,KAAK,QAAQ,MAAM,KAAO,EAA4B,EAAU,EAAO,CACzE,KAAK,eAAe,MAAM,MAAQ,OAClC,KAAK,eAAe,MAAM,OAAS,OACnC,KAAK,eAAe,MAAM,UAAY,QACtC,KAAK,eAAe,UAAU,IAAI,eAAe,CAEjD,KAAK,QAAU,EAEf,KAAK,QAAQ,UAAU,IAAI,aAAa,CAGxC,GAAM,CAAE,MAAO,EAAW,OAAQ,GAAe,KAAK,gBAAgB,CACtE,KAAK,MAAQ,EACb,KAAK,MAAQ,EACb,KAAK,KAAO,KAAK,MAAQ,GACzB,KAAK,KAAO,KAAK,MACjB,KAAK,QAAQ,MAAM,MAAQ,GAAG,EAAU,IACxC,KAAK,QAAQ,MAAM,OAAS,GAAG,EAAW,IAG1C,KAAK,SAAS,CAAE,WAAY,GAAO,cAAe,GAAM,CAAC,CAErD,KAAK,MAAQ,EAEf,KAAK,aAAa,CAAC,SAAW,CAC5B,KAAK,cAAc,EAAI,EACvB,CAEF,KAAK,iBAAkB,GAAK,CAIhC,MAAc,aAA6B,CAEpC,WAAe,EAKpB,IAAI,CAAC,SAAS,cAAc,yBAAyB,CAAE,CACrD,IAAM,EAAO,SAAS,cAAc,OAAO,CAC3C,EAAK,IAAM,aACX,EAAK,KAAO,mDACZ,EAAK,UAAY,wBACjB,SAAS,KAAK,YAAY,EAAK,CAI7B,aAAS,cAAc,wBAAwB,CAInD,OAAO,IAAI,SAAS,EAAS,IAAW,CACtC,IAAM,EAAS,SAAS,cAAc,SAAS,CAC/C,EAAO,IAAM,kDACb,EAAO,UAAY,uBACnB,EAAO,WAAe,GAAS,CAC/B,EAAO,YAAgB,EAAW,MAAM,yBAAyB,CAAC,CAClE,SAAS,KAAK,YAAY,EAAO,EACjC,EAGJ,cAAsB,EAAiC,CACrD,IAAM,EAAK,OAAe,EAC1B,GAAI,CAAC,EAAG,CACN,KAAK,iBAAsB,MAAM,qBAAqB,CAAC,CACvD,OAIF,IAAM,EAAS,SAAS,cAAc,MAAM,CAC5C,EAAO,MAAM,SAAW,WACxB,EAAO,MAAM,IAAM,IACnB,EAAO,MAAM,KAAO,IACpB,EAAO,MAAM,MAAQ,OACrB,EAAO,MAAM,OAAS,OACtB,EAAO,MAAM,QAAU,IACvB,EAAO,MAAM,WAAa,kBAC1B,EAAU,YAAY,EAAO,CAG7B,EAAO,iBAAiB,cAAgB,GAAM,CAC5C,EAAE,iBAAiB,EACnB,CAGF,IAAM,EAAM,EAAE,IAAI,EAAQ,CACxB,OAAQ,CAAC,KAAK,SAAS,IAAK,KAAK,SAAS,IAAI,CAC9C,KAAM,KAAK,SAAS,MAAQ,KAAK,UAAU,MAAQ,GACpD,CAAC,CAGI,EACJ,KAAK,UAAU,WAAa,qDACxB,EACJ,KAAK,UAAU,aACf,0FAEF,EAAE,UAAU,EAAW,CACR,cACb,QAAS,GACV,CAAC,CAAC,MAAM,EAAI,CAGb,EAAE,OAAO,CAAC,KAAK,SAAS,IAAK,KAAK,SAAS,IAAI,CAAC,CAC7C,MAAM,EAAI,CACV,UAAU,GAAG,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,MAAM,CAG1D,EAAI,cAAgB,CAClB,KAAK,iBAAqB,CACxB,EAAI,gBAAgB,CACpB,EAAO,MAAM,QAAU,IACvB,KAAK,eAAe,UAAU,OAAO,eAAe,EAGtD,KAAK,iBAAkB,GAAK,EAC5B,CAIJ,gBAA8D,CAC5D,IAAM,EAAW,KAAK,IAAI,OAAO,WAAY,KAAK,UAAU,OAAS,IAAI,CACzE,MAAO,CACL,MAAO,EACP,OAAS,EAAW,EAAK,GAC1B,CAIH,mBAAoB,CAClB,OAAO,MAAM,kBAAkB,CAAE,eAAgB,GAAO,CAAC,GAI7D,SAAgB,EAAc,EAA8B,EAAE,CAAkB,CAC9E,MAAO,CACL,KAAM,gBACN,kBAAoB,GAA6B,CAC/C,IAAM,EAAM,EAAO,IAAI,OAAO,IACxB,EAAW,EAA2B,EAAI,CAC3C,KAEL,OAAO,IAAI,EAAmB,EAAQ,EAAQ,EAAS,EAEzD,YAAa,MAAO,EAAiB,IAAiB,CACpD,IAAM,EAAW,EAAK,OAAO,GAAI,KAAK,MAAM,EAAK,OAAO,GAAI,OAAS,EAAE,EACnE,aAAoB,GACtB,EAAE,aAAa,CAAC,WAAY,SAAU,UAAU,CAAE,EAAS,EAGhE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { VistaExtension } from '
|
|
1
|
+
import type { VistaExtension } from 'vistaview';
|
|
2
2
|
export declare function selectBox({ onSelect, selection, placeholder, }: {
|
|
3
3
|
onSelect: (value: string) => void | Promise<void>;
|
|
4
4
|
selection: {
|
|
@@ -7,4 +7,4 @@ export declare function selectBox({ onSelect, selection, placeholder, }: {
|
|
|
7
7
|
}[];
|
|
8
8
|
placeholder?: string;
|
|
9
9
|
}): VistaExtension;
|
|
10
|
-
//# sourceMappingURL=
|
|
10
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,WAAW,CAAC;AAE3D,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,WAAgC,GACjC,EAAE;IACD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,cAAc,CAwCjB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
function selectBox({ onSelect: e, selection: t, placeholder: n = "Select an option" }) {
|
|
2
|
+
let r = null;
|
|
3
|
+
return {
|
|
4
|
+
name: "selectBox",
|
|
5
|
+
control: () => {
|
|
6
|
+
r = document.createElement("div"), r.classList.add("vvw-select-box");
|
|
7
|
+
let i = document.createElement("select");
|
|
8
|
+
i.classList.add("vvw-select-box-select");
|
|
9
|
+
let a = document.createElement("option");
|
|
10
|
+
return a.value = "", a.textContent = n, a.disabled = !0, a.selected = !0, i.appendChild(a), t.forEach((e) => {
|
|
11
|
+
let t = document.createElement("option");
|
|
12
|
+
t.value = e.value, t.textContent = e.text || e.value, i.appendChild(t);
|
|
13
|
+
}), i.addEventListener("change", async (t) => {
|
|
14
|
+
let n = t.target.value;
|
|
15
|
+
await e(n);
|
|
16
|
+
}), r.appendChild(i), r;
|
|
17
|
+
},
|
|
18
|
+
onClose(e) {
|
|
19
|
+
r && r.remove();
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export { selectBox };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","names":["container: HTMLDivElement | null"],"sources":["../src/main.ts"],"sourcesContent":["import type { VistaExtension, VistaView } from 'vistaview';\n\nexport function selectBox({\n onSelect,\n selection,\n placeholder = 'Select an option',\n}: {\n onSelect: (value: string) => void | Promise<void>;\n selection: { value: string; text?: string }[];\n placeholder?: string;\n}): VistaExtension {\n let container: HTMLDivElement | null = null;\n\n return {\n name: 'selectBox',\n control: () => {\n container = document.createElement('div');\n container.classList.add('vvw-select-box');\n\n const select = document.createElement('select');\n select.classList.add('vvw-select-box-select');\n\n const firstOption = document.createElement('option');\n firstOption.value = '';\n firstOption.textContent = placeholder;\n firstOption.disabled = true;\n firstOption.selected = true;\n select.appendChild(firstOption);\n\n selection.forEach((item) => {\n const option = document.createElement('option');\n option.value = item.value;\n option.textContent = item.text || item.value;\n select.appendChild(option);\n });\n\n select.addEventListener('change', async (e) => {\n const target = e.target as HTMLSelectElement;\n const value = target.value;\n await onSelect(value);\n });\n\n container.appendChild(select);\n return container;\n },\n onClose(_vistaView: VistaView) {\n // cleanup\n container && container.remove();\n },\n };\n}\n"],"mappings":"AAEA,SAAgB,UAAU,EACxB,aACA,cACA,iBAAc,sBAKG;CACjB,IAAIA,IAAmC;AAEvC,QAAO;EACL,MAAM;EACN,eAAe;AAEb,GADA,IAAY,SAAS,cAAc,MAAM,EACzC,EAAU,UAAU,IAAI,iBAAiB;GAEzC,IAAM,IAAS,SAAS,cAAc,SAAS;AAC/C,KAAO,UAAU,IAAI,wBAAwB;GAE7C,IAAM,IAAc,SAAS,cAAc,SAAS;AAqBpD,UApBA,EAAY,QAAQ,IACpB,EAAY,cAAc,GAC1B,EAAY,WAAW,IACvB,EAAY,WAAW,IACvB,EAAO,YAAY,EAAY,EAE/B,EAAU,SAAS,MAAS;IAC1B,IAAM,IAAS,SAAS,cAAc,SAAS;AAG/C,IAFA,EAAO,QAAQ,EAAK,OACpB,EAAO,cAAc,EAAK,QAAQ,EAAK,OACvC,EAAO,YAAY,EAAO;KAC1B,EAEF,EAAO,iBAAiB,UAAU,OAAO,MAAM;IAE7C,IAAM,IADS,EAAE,OACI;AACrB,UAAM,EAAS,EAAM;KACrB,EAEF,EAAU,YAAY,EAAO,EACtB;;EAET,QAAQ,GAAuB;AAE7B,QAAa,EAAU,QAAQ;;EAElC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.VistaView=e.VistaView||{}))})(this,function(e){function t({onSelect:e,selection:t,placeholder:n=`Select an option`}){let r=null;return{name:`selectBox`,control:()=>{r=document.createElement(`div`),r.classList.add(`vvw-select-box`);let i=document.createElement(`select`);i.classList.add(`vvw-select-box-select`);let a=document.createElement(`option`);return a.value=``,a.textContent=n,a.disabled=!0,a.selected=!0,i.appendChild(a),t.forEach(e=>{let t=document.createElement(`option`);t.value=e.value,t.textContent=e.text||e.value,i.appendChild(t)}),i.addEventListener(`change`,async t=>{let n=t.target.value;await e(n)}),r.appendChild(i),r},onClose(e){r&&r.remove()}}}e.selectBox=t});
|
|
2
|
+
//# sourceMappingURL=main.umd.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.umd.cjs","names":["container: HTMLDivElement | null"],"sources":["../src/main.ts"],"sourcesContent":["import type { VistaExtension, VistaView } from 'vistaview';\n\nexport function selectBox({\n onSelect,\n selection,\n placeholder = 'Select an option',\n}: {\n onSelect: (value: string) => void | Promise<void>;\n selection: { value: string; text?: string }[];\n placeholder?: string;\n}): VistaExtension {\n let container: HTMLDivElement | null = null;\n\n return {\n name: 'selectBox',\n control: () => {\n container = document.createElement('div');\n container.classList.add('vvw-select-box');\n\n const select = document.createElement('select');\n select.classList.add('vvw-select-box-select');\n\n const firstOption = document.createElement('option');\n firstOption.value = '';\n firstOption.textContent = placeholder;\n firstOption.disabled = true;\n firstOption.selected = true;\n select.appendChild(firstOption);\n\n selection.forEach((item) => {\n const option = document.createElement('option');\n option.value = item.value;\n option.textContent = item.text || item.value;\n select.appendChild(option);\n });\n\n select.addEventListener('change', async (e) => {\n const target = e.target as HTMLSelectElement;\n const value = target.value;\n await onSelect(value);\n });\n\n container.appendChild(select);\n return container;\n },\n onClose(_vistaView: VistaView) {\n // cleanup\n container && container.remove();\n },\n };\n}\n"],"mappings":"iOAEA,SAAgB,EAAU,CACxB,WACA,YACA,cAAc,oBAKG,CACjB,IAAIA,EAAmC,KAEvC,MAAO,CACL,KAAM,YACN,YAAe,CACb,EAAY,SAAS,cAAc,MAAM,CACzC,EAAU,UAAU,IAAI,iBAAiB,CAEzC,IAAM,EAAS,SAAS,cAAc,SAAS,CAC/C,EAAO,UAAU,IAAI,wBAAwB,CAE7C,IAAM,EAAc,SAAS,cAAc,SAAS,CAqBpD,MApBA,GAAY,MAAQ,GACpB,EAAY,YAAc,EAC1B,EAAY,SAAW,GACvB,EAAY,SAAW,GACvB,EAAO,YAAY,EAAY,CAE/B,EAAU,QAAS,GAAS,CAC1B,IAAM,EAAS,SAAS,cAAc,SAAS,CAC/C,EAAO,MAAQ,EAAK,MACpB,EAAO,YAAc,EAAK,MAAQ,EAAK,MACvC,EAAO,YAAY,EAAO,EAC1B,CAEF,EAAO,iBAAiB,SAAU,KAAO,IAAM,CAE7C,IAAM,EADS,EAAE,OACI,MACrB,MAAM,EAAS,EAAM,EACrB,CAEF,EAAU,YAAY,EAAO,CACtB,GAET,QAAQ,EAAuB,CAE7B,GAAa,EAAU,QAAQ,EAElC"}
|
package/{dist/lib/extensions/streamable-video.d.ts → extensions/streamable-video/dist/main.d.ts}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { VistaExtension, VistaImageParams } from '
|
|
2
|
-
import { VistaBox } from '
|
|
1
|
+
import type { VistaExtension, VistaImageParams } from 'vistaview';
|
|
2
|
+
import { VistaBox } from 'vistaview';
|
|
3
3
|
/**
|
|
4
4
|
* Parse Streamable URL and extract video ID
|
|
5
5
|
* Supports various Streamable URL formats:
|
|
@@ -29,4 +29,4 @@ export declare class VistaStreamableVideo extends VistaBox {
|
|
|
29
29
|
} | undefined;
|
|
30
30
|
}
|
|
31
31
|
export declare function streamableVideo(): VistaExtension;
|
|
32
|
-
//# sourceMappingURL=
|
|
32
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,gBAAgB,EAAa,MAAM,WAAW,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcjE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO/D;AAED,qBAAa,oBAAqB,SAAQ,QAAQ;IAChD,OAAO,EAAE,cAAc,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;gBAEA,GAAG,EAAE,gBAAgB;IA0DjC,SAAS,CAAC,cAAc,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAU7D,iBAAiB;;;;CAGlB;AAED,wBAAgB,eAAe,IAAI,cAAc,CAiBhD"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { VistaBox } from "vistaview";
|
|
2
|
+
function parseStreamableVideoId(e) {
|
|
3
|
+
if (!e) return null;
|
|
4
|
+
for (let t of [/streamable\.com\/e\/([a-zA-Z0-9]+)/, /streamable\.com\/([a-zA-Z0-9]+)/]) {
|
|
5
|
+
let n = e.match(t);
|
|
6
|
+
if (n && n[1]) return n[1];
|
|
7
|
+
}
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
function getStreamableThumbnail(e) {
|
|
11
|
+
let n = parseStreamableVideoId(e);
|
|
12
|
+
if (!n) throw Error("Invalid Streamable video URL");
|
|
13
|
+
return `https://cdn-cf-east.streamable.com/image/${n}.jpg`;
|
|
14
|
+
}
|
|
15
|
+
var VistaStreamableVideo = class extends VistaBox {
|
|
16
|
+
element;
|
|
17
|
+
url;
|
|
18
|
+
constructor(e) {
|
|
19
|
+
super(e);
|
|
20
|
+
let r = e.elm.config.src;
|
|
21
|
+
this.url = r;
|
|
22
|
+
let i = document.createElement("div");
|
|
23
|
+
i.style.position = "relative";
|
|
24
|
+
let a = document.createElement("img");
|
|
25
|
+
i.appendChild(a), a.src = this.origin?.image.src || getStreamableThumbnail(r), a.style.width = "100%", a.style.height = "100%", a.style.objectFit = "cover", a.classList.add("vvw--pulsing"), this.element = i, this.element.classList.add("vvw-img-hi");
|
|
26
|
+
let { width: o, height: s } = this.getFullSizeDim();
|
|
27
|
+
if (this.fullH = s, this.fullW = o, this.minW = this.fullW * .5, this.maxW = this.fullW, this.element.style.width = `${o}px`, this.element.style.height = `${s}px`, this.setSizes({
|
|
28
|
+
stableSize: !1,
|
|
29
|
+
initDimension: !0
|
|
30
|
+
}), this.pos === 0) {
|
|
31
|
+
let e = document.createElement("iframe");
|
|
32
|
+
e.frameBorder = "0", e.allow = "autoplay; fullscreen", e.allowFullscreen = !0, e.width = "100%", e.height = "100%", e.style.position = "absolute", e.style.top = "0", e.style.left = "0", e.style.opacity = "0", e.style.transition = "opacity 333ms ease", e.src = `https://streamable.com/e/${parseStreamableVideoId(r)}?autoplay=1`, i.appendChild(e), e.onload = () => {
|
|
33
|
+
e.style.opacity = "1", a.classList.remove("vvw--pulsing");
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
this.isLoadedResolved(!0);
|
|
37
|
+
}
|
|
38
|
+
getFullSizeDim() {
|
|
39
|
+
let e = Math.min(window.innerWidth, 800);
|
|
40
|
+
return {
|
|
41
|
+
width: e,
|
|
42
|
+
height: e * 9 / 16
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
setFinalTransform() {
|
|
46
|
+
return super.setFinalTransform({ propagateEvent: !1 });
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
function streamableVideo() {
|
|
50
|
+
return {
|
|
51
|
+
name: "streamableVideo",
|
|
52
|
+
onInitializeImage: (e) => {
|
|
53
|
+
let n = e.elm.config.src;
|
|
54
|
+
if (parseStreamableVideoId(n)) return new VistaStreamableVideo(e);
|
|
55
|
+
},
|
|
56
|
+
onImageView: async (e, t) => {
|
|
57
|
+
let n = e.images.to[Math.floor(e.images.to.length / 2)];
|
|
58
|
+
n instanceof VistaStreamableVideo && t.deactivateUi([
|
|
59
|
+
"download",
|
|
60
|
+
"zoomIn",
|
|
61
|
+
"zoomOut"
|
|
62
|
+
], n);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export { VistaStreamableVideo, getStreamableThumbnail, parseStreamableVideoId, streamableVideo };
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=main.js.map
|