vistaview 1.0.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +18 -61
  3. package/{dist/lib/extensions/dailymotion-video.d.ts → extensions/dailymotion-video/dist/main.d.ts} +3 -3
  4. package/extensions/dailymotion-video/dist/main.d.ts.map +1 -0
  5. package/extensions/dailymotion-video/dist/main.js +72 -0
  6. package/extensions/dailymotion-video/dist/main.js.map +1 -0
  7. package/extensions/dailymotion-video/dist/main.test.d.ts +2 -0
  8. package/extensions/dailymotion-video/dist/main.test.d.ts.map +1 -0
  9. package/extensions/dailymotion-video/dist/main.umd.cjs +2 -0
  10. package/extensions/dailymotion-video/dist/main.umd.cjs.map +1 -0
  11. package/extensions/download/dist/main.d.ts +4 -0
  12. package/extensions/download/dist/main.d.ts.map +1 -0
  13. package/extensions/download/dist/main.js +42 -0
  14. package/extensions/download/dist/main.js.map +1 -0
  15. package/extensions/download/dist/main.test.d.ts +2 -0
  16. package/extensions/download/dist/main.test.d.ts.map +1 -0
  17. package/extensions/download/dist/main.umd.cjs +2 -0
  18. package/extensions/download/dist/main.umd.cjs.map +1 -0
  19. package/{dist/lib/extensions/google-maps.d.ts → extensions/google-maps/dist/main.d.ts} +3 -3
  20. package/extensions/google-maps/dist/main.d.ts.map +1 -0
  21. package/extensions/google-maps/dist/main.js +96 -0
  22. package/extensions/google-maps/dist/main.js.map +1 -0
  23. package/extensions/google-maps/dist/main.test.d.ts +2 -0
  24. package/extensions/google-maps/dist/main.test.d.ts.map +1 -0
  25. package/extensions/google-maps/dist/main.umd.cjs +2 -0
  26. package/extensions/google-maps/dist/main.umd.cjs.map +1 -0
  27. package/extensions/image-story/dist/main.d.ts +16 -0
  28. package/extensions/image-story/dist/main.d.ts.map +1 -0
  29. package/extensions/image-story/dist/main.js +600 -0
  30. package/extensions/image-story/dist/main.js.map +1 -0
  31. package/extensions/image-story/dist/main.test.d.ts +2 -0
  32. package/extensions/image-story/dist/main.test.d.ts.map +1 -0
  33. package/extensions/image-story/dist/main.umd.cjs +3 -0
  34. package/extensions/image-story/dist/main.umd.cjs.map +1 -0
  35. package/extensions/image-story/dist/style.css +1 -0
  36. package/extensions/logger/dist/main.d.ts +3 -0
  37. package/extensions/logger/dist/main.d.ts.map +1 -0
  38. package/extensions/logger/dist/main.js +23 -0
  39. package/extensions/logger/dist/main.js.map +1 -0
  40. package/extensions/logger/dist/main.test.d.ts +2 -0
  41. package/extensions/logger/dist/main.test.d.ts.map +1 -0
  42. package/extensions/logger/dist/main.umd.cjs +2 -0
  43. package/extensions/logger/dist/main.umd.cjs.map +1 -0
  44. package/{dist/lib/extensions/mapbox.d.ts → extensions/mapbox/dist/main.d.ts} +3 -3
  45. package/extensions/mapbox/dist/main.d.ts.map +1 -0
  46. package/extensions/mapbox/dist/main.js +114 -0
  47. package/extensions/mapbox/dist/main.js.map +1 -0
  48. package/extensions/mapbox/dist/main.test.d.ts +2 -0
  49. package/extensions/mapbox/dist/main.test.d.ts.map +1 -0
  50. package/extensions/mapbox/dist/main.umd.cjs +2 -0
  51. package/extensions/mapbox/dist/main.umd.cjs.map +1 -0
  52. package/{dist/lib/extensions/openstreetmap.d.ts → extensions/openstreetmap/dist/main.d.ts} +3 -3
  53. package/extensions/openstreetmap/dist/main.d.ts.map +1 -0
  54. package/extensions/openstreetmap/dist/main.js +114 -0
  55. package/extensions/openstreetmap/dist/main.js.map +1 -0
  56. package/extensions/openstreetmap/dist/main.test.d.ts +2 -0
  57. package/extensions/openstreetmap/dist/main.test.d.ts.map +1 -0
  58. package/extensions/openstreetmap/dist/main.umd.cjs +2 -0
  59. package/extensions/openstreetmap/dist/main.umd.cjs.map +1 -0
  60. package/{dist/lib/extensions/select-box.d.ts → extensions/select-box/dist/main.d.ts} +2 -2
  61. package/extensions/select-box/dist/main.d.ts.map +1 -0
  62. package/extensions/select-box/dist/main.js +25 -0
  63. package/extensions/select-box/dist/main.js.map +1 -0
  64. package/extensions/select-box/dist/main.umd.cjs +2 -0
  65. package/extensions/select-box/dist/main.umd.cjs.map +1 -0
  66. package/{dist/lib/extensions/streamable-video.d.ts → extensions/streamable-video/dist/main.d.ts} +3 -3
  67. package/extensions/streamable-video/dist/main.d.ts.map +1 -0
  68. package/extensions/streamable-video/dist/main.js +68 -0
  69. package/extensions/streamable-video/dist/main.js.map +1 -0
  70. package/extensions/streamable-video/dist/main.test.d.ts +2 -0
  71. package/extensions/streamable-video/dist/main.test.d.ts.map +1 -0
  72. package/extensions/streamable-video/dist/main.umd.cjs +2 -0
  73. package/extensions/streamable-video/dist/main.umd.cjs.map +1 -0
  74. package/{dist/lib/extensions/twitch-video.d.ts → extensions/twitch-video/dist/main.d.ts} +3 -3
  75. package/extensions/twitch-video/dist/main.d.ts.map +1 -0
  76. package/extensions/twitch-video/dist/main.js +81 -0
  77. package/extensions/twitch-video/dist/main.js.map +1 -0
  78. package/extensions/twitch-video/dist/main.umd.cjs +2 -0
  79. package/extensions/twitch-video/dist/main.umd.cjs.map +1 -0
  80. package/{dist/lib/extensions/vidyard-video.d.ts → extensions/vidyard-video/dist/main.d.ts} +3 -3
  81. package/extensions/vidyard-video/dist/main.d.ts.map +1 -0
  82. package/extensions/vidyard-video/dist/main.js +72 -0
  83. package/extensions/vidyard-video/dist/main.js.map +1 -0
  84. package/extensions/vidyard-video/dist/main.test.d.ts +2 -0
  85. package/extensions/vidyard-video/dist/main.test.d.ts.map +1 -0
  86. package/extensions/vidyard-video/dist/main.umd.cjs +2 -0
  87. package/extensions/vidyard-video/dist/main.umd.cjs.map +1 -0
  88. package/{dist/lib/extensions/vimeo-video.d.ts → extensions/vimeo-video/dist/main.d.ts} +3 -3
  89. package/extensions/vimeo-video/dist/main.d.ts.map +1 -0
  90. package/extensions/vimeo-video/dist/main.js +68 -0
  91. package/extensions/vimeo-video/dist/main.js.map +1 -0
  92. package/extensions/vimeo-video/dist/main.test.d.ts +2 -0
  93. package/extensions/vimeo-video/dist/main.test.d.ts.map +1 -0
  94. package/extensions/vimeo-video/dist/main.umd.cjs +2 -0
  95. package/extensions/vimeo-video/dist/main.umd.cjs.map +1 -0
  96. package/{dist/lib/extensions/wistia-video.d.ts → extensions/wistia-video/dist/main.d.ts} +3 -3
  97. package/extensions/wistia-video/dist/main.d.ts.map +1 -0
  98. package/extensions/wistia-video/dist/main.js +72 -0
  99. package/extensions/wistia-video/dist/main.js.map +1 -0
  100. package/extensions/wistia-video/dist/main.test.d.ts +2 -0
  101. package/extensions/wistia-video/dist/main.test.d.ts.map +1 -0
  102. package/extensions/wistia-video/dist/main.umd.cjs +2 -0
  103. package/extensions/wistia-video/dist/main.umd.cjs.map +1 -0
  104. package/{dist/lib/extensions/youtube-video.d.ts → extensions/youtube-video/dist/main.d.ts} +3 -3
  105. package/extensions/youtube-video/dist/main.d.ts.map +1 -0
  106. package/extensions/youtube-video/dist/main.js +80 -0
  107. package/extensions/youtube-video/dist/main.js.map +1 -0
  108. package/extensions/youtube-video/dist/main.test.d.ts +2 -0
  109. package/extensions/youtube-video/dist/main.test.d.ts.map +1 -0
  110. package/extensions/youtube-video/dist/main.umd.cjs +2 -0
  111. package/extensions/youtube-video/dist/main.umd.cjs.map +1 -0
  112. package/frameworks/react/dist/main.d.ts +3 -0
  113. package/frameworks/react/dist/main.es.js +51 -0
  114. package/frameworks/react/dist/main.es.js.map +1 -0
  115. package/frameworks/react/dist/test-setup.d.ts +1 -0
  116. package/frameworks/react/dist/use-vistaview.d.ts +2 -0
  117. package/frameworks/react/dist/vistaview.d.ts +13 -0
  118. package/frameworks/solid/dist/dev.js +77 -0
  119. package/frameworks/solid/dist/dev.jsx +72 -0
  120. package/frameworks/solid/dist/index.d.ts +18 -0
  121. package/frameworks/solid/dist/index.js +76 -0
  122. package/frameworks/solid/dist/index.jsx +71 -0
  123. package/frameworks/svelte/dist/VistaView.svelte +65 -0
  124. package/frameworks/svelte/dist/VistaView.svelte.d.ts +46 -0
  125. package/frameworks/svelte/dist/index.d.ts +3 -0
  126. package/frameworks/svelte/dist/index.js +2 -0
  127. package/frameworks/svelte/dist/types.d.ts +14 -0
  128. package/frameworks/svelte/dist/types.js +1 -0
  129. package/frameworks/svelte/dist/use-vistaview.d.ts +2 -0
  130. package/frameworks/svelte/dist/use-vistaview.js +24 -0
  131. package/frameworks/svelte/dist/use-vistaview.test.d.ts +1 -0
  132. package/frameworks/svelte/dist/use-vistaview.test.js +115 -0
  133. package/frameworks/vue/dist/main.es.js +95 -0
  134. package/frameworks/vue/dist/main.es.js.map +1 -0
  135. package/{dist → main/dist}/lib/components.d.ts +1 -2
  136. package/main/dist/lib/components.js +107 -0
  137. package/main/dist/lib/defaults/close.d.ts +2 -0
  138. package/main/dist/lib/defaults/close.js +4 -0
  139. package/main/dist/lib/defaults/image-setup.d.ts +3 -0
  140. package/main/dist/lib/defaults/image-setup.js +4 -0
  141. package/main/dist/lib/defaults/init.d.ts +2 -0
  142. package/main/dist/lib/defaults/init.js +97 -0
  143. package/main/dist/lib/defaults/open.d.ts +2 -0
  144. package/main/dist/lib/defaults/open.js +8 -0
  145. package/main/dist/lib/defaults/options.d.ts +2 -0
  146. package/main/dist/lib/defaults/options.js +15 -0
  147. package/{dist → main/dist}/lib/defaults/transition.d.ts +2 -3
  148. package/main/dist/lib/defaults/transition.js +40 -0
  149. package/{dist → main/dist}/lib/main.d.ts +1 -2
  150. package/main/dist/lib/main.js +66 -0
  151. package/{dist → main/dist}/lib/throttle.d.ts +0 -1
  152. package/main/dist/lib/throttle.js +21 -0
  153. package/{dist → main/dist}/lib/types.d.ts +4 -5
  154. package/main/dist/lib/types.js +1 -0
  155. package/{dist → main/dist}/lib/utils/get-fitted-size.d.ts +0 -1
  156. package/main/dist/lib/utils/get-fitted-size.js +53 -0
  157. package/{dist → main/dist}/lib/utils/get-full-size-dim.d.ts +0 -1
  158. package/main/dist/lib/utils/get-full-size-dim.js +35 -0
  159. package/{dist → main/dist}/lib/utils/get-style.d.ts +0 -1
  160. package/main/dist/lib/utils/get-style.js +19 -0
  161. package/{dist → main/dist}/lib/utils/index.d.ts +0 -1
  162. package/main/dist/lib/utils/index.js +7 -0
  163. package/{dist → main/dist}/lib/utils/is-not-zero-css.d.ts +0 -1
  164. package/main/dist/lib/utils/is-not-zero-css.js +3 -0
  165. package/{dist → main/dist}/lib/utils/parse-element.d.ts +1 -2
  166. package/main/dist/lib/utils/parse-element.js +67 -0
  167. package/{dist → main/dist}/lib/vista-box.d.ts +3 -4
  168. package/main/dist/lib/vista-box.js +466 -0
  169. package/{dist → main/dist}/lib/vista-hires-transition.d.ts +2 -3
  170. package/main/dist/lib/vista-hires-transition.js +108 -0
  171. package/{dist → main/dist}/lib/vista-image-event.d.ts +2 -3
  172. package/main/dist/lib/vista-image-event.js +166 -0
  173. package/{dist → main/dist}/lib/vista-image.d.ts +2 -3
  174. package/main/dist/lib/vista-image.js +274 -0
  175. package/{dist → main/dist}/lib/vista-pointers.d.ts +1 -2
  176. package/main/dist/lib/vista-pointers.js +163 -0
  177. package/{dist → main/dist}/lib/vista-state.d.ts +2 -3
  178. package/main/dist/lib/vista-state.js +15 -0
  179. package/{dist → main/dist}/lib/vista-view.d.ts +2 -3
  180. package/main/dist/lib/vista-view.js +576 -0
  181. package/main/dist/style.css +1 -0
  182. package/main/dist/styles/autumn-amber.css +1 -0
  183. package/main/dist/styles/cotton-candy.css +1 -0
  184. package/main/dist/styles/dark-rounded.css +1 -0
  185. package/main/dist/styles/ember-glow.css +1 -0
  186. package/main/dist/styles/forest-moss.css +1 -0
  187. package/main/dist/styles/green-lake.css +1 -0
  188. package/main/dist/styles/ice-crystal.css +1 -0
  189. package/main/dist/styles/lavender-fields.css +1 -0
  190. package/main/dist/styles/midnight-gold.css +1 -0
  191. package/main/dist/styles/midnight-ocean.css +1 -0
  192. package/main/dist/styles/mint-chocolate.css +1 -0
  193. package/main/dist/styles/neon-nights.css +1 -0
  194. package/main/dist/styles/paper-light.css +1 -0
  195. package/main/dist/styles/retro-arcade.css +1 -0
  196. package/main/dist/styles/soft-neutral.css +1 -0
  197. package/main/dist/styles/stark-minimal.css +1 -0
  198. package/main/dist/styles/strawberry.css +1 -0
  199. package/{dist → main/dist}/vistaview.d.ts +0 -1
  200. package/main/dist/vistaview.js +14 -0
  201. package/main/dist/vistaview.umd.js +18 -0
  202. package/package.json +122 -67
  203. package/dist/extensions/dailymotion-video.d.ts +0 -2
  204. package/dist/extensions/dailymotion-video.js +0 -80
  205. package/dist/extensions/dailymotion-video.umd.js +0 -1
  206. package/dist/extensions/download.d.ts +0 -2
  207. package/dist/extensions/download.js +0 -35
  208. package/dist/extensions/download.umd.js +0 -1
  209. package/dist/extensions/google-maps.d.ts +0 -2
  210. package/dist/extensions/google-maps.js +0 -96
  211. package/dist/extensions/google-maps.umd.js +0 -1
  212. package/dist/extensions/image-story.d.ts +0 -2
  213. package/dist/extensions/image-story.js +0 -621
  214. package/dist/extensions/image-story.umd.js +0 -2
  215. package/dist/extensions/logger.d.ts +0 -2
  216. package/dist/extensions/logger.js +0 -23
  217. package/dist/extensions/logger.umd.js +0 -1
  218. package/dist/extensions/mapbox.d.ts +0 -2
  219. package/dist/extensions/mapbox.js +0 -124
  220. package/dist/extensions/mapbox.umd.js +0 -1
  221. package/dist/extensions/openstreetmap.d.ts +0 -2
  222. package/dist/extensions/openstreetmap.js +0 -125
  223. package/dist/extensions/openstreetmap.umd.js +0 -1
  224. package/dist/extensions/select-box.d.ts +0 -2
  225. package/dist/extensions/select-box.js +0 -29
  226. package/dist/extensions/select-box.umd.js +0 -1
  227. package/dist/extensions/streamable-video.d.ts +0 -2
  228. package/dist/extensions/streamable-video.js +0 -76
  229. package/dist/extensions/streamable-video.umd.js +0 -1
  230. package/dist/extensions/twitch-video.d.ts +0 -2
  231. package/dist/extensions/twitch-video.js +0 -79
  232. package/dist/extensions/vidyard-video.d.ts +0 -2
  233. package/dist/extensions/vidyard-video.js +0 -80
  234. package/dist/extensions/vidyard-video.umd.js +0 -1
  235. package/dist/extensions/vimeo-video.d.ts +0 -2
  236. package/dist/extensions/vimeo-video.js +0 -76
  237. package/dist/extensions/vimeo-video.umd.js +0 -1
  238. package/dist/extensions/wistia-video.d.ts +0 -2
  239. package/dist/extensions/wistia-video.js +0 -85
  240. package/dist/extensions/wistia-video.umd.js +0 -1
  241. package/dist/extensions/youtube-video.d.ts +0 -2
  242. package/dist/extensions/youtube-video.js +0 -88
  243. package/dist/extensions/youtube-video.umd.js +0 -1
  244. package/dist/lib/components.d.ts.map +0 -1
  245. package/dist/lib/defaults/close.d.ts +0 -3
  246. package/dist/lib/defaults/close.d.ts.map +0 -1
  247. package/dist/lib/defaults/image-setup.d.ts +0 -4
  248. package/dist/lib/defaults/image-setup.d.ts.map +0 -1
  249. package/dist/lib/defaults/init.d.ts +0 -3
  250. package/dist/lib/defaults/init.d.ts.map +0 -1
  251. package/dist/lib/defaults/open.d.ts +0 -3
  252. package/dist/lib/defaults/open.d.ts.map +0 -1
  253. package/dist/lib/defaults/options.d.ts +0 -3
  254. package/dist/lib/defaults/options.d.ts.map +0 -1
  255. package/dist/lib/defaults/transition.d.ts.map +0 -1
  256. package/dist/lib/extensions/dailymotion-video.d.ts.map +0 -1
  257. package/dist/lib/extensions/download.d.ts +0 -3
  258. package/dist/lib/extensions/download.d.ts.map +0 -1
  259. package/dist/lib/extensions/google-maps.d.ts.map +0 -1
  260. package/dist/lib/extensions/image-story.d.ts +0 -12
  261. package/dist/lib/extensions/image-story.d.ts.map +0 -1
  262. package/dist/lib/extensions/logger.d.ts +0 -3
  263. package/dist/lib/extensions/logger.d.ts.map +0 -1
  264. package/dist/lib/extensions/mapbox.d.ts.map +0 -1
  265. package/dist/lib/extensions/openstreetmap.d.ts.map +0 -1
  266. package/dist/lib/extensions/select-box.d.ts.map +0 -1
  267. package/dist/lib/extensions/streamable-video.d.ts.map +0 -1
  268. package/dist/lib/extensions/twitch-video.d.ts.map +0 -1
  269. package/dist/lib/extensions/vidyard-video.d.ts.map +0 -1
  270. package/dist/lib/extensions/vimeo-video.d.ts.map +0 -1
  271. package/dist/lib/extensions/wistia-video.d.ts.map +0 -1
  272. package/dist/lib/extensions/youtube-video.d.ts.map +0 -1
  273. package/dist/lib/main.d.ts.map +0 -1
  274. package/dist/lib/throttle.d.ts.map +0 -1
  275. package/dist/lib/types.d.ts.map +0 -1
  276. package/dist/lib/utils/get-fitted-size.d.ts.map +0 -1
  277. package/dist/lib/utils/get-full-size-dim.d.ts.map +0 -1
  278. package/dist/lib/utils/get-style.d.ts.map +0 -1
  279. package/dist/lib/utils/index.d.ts.map +0 -1
  280. package/dist/lib/utils/is-not-zero-css.d.ts.map +0 -1
  281. package/dist/lib/utils/parse-element.d.ts.map +0 -1
  282. package/dist/lib/vista-box.d.ts.map +0 -1
  283. package/dist/lib/vista-hires-transition.d.ts.map +0 -1
  284. package/dist/lib/vista-image-event.d.ts.map +0 -1
  285. package/dist/lib/vista-image.d.ts.map +0 -1
  286. package/dist/lib/vista-pointers.d.ts.map +0 -1
  287. package/dist/lib/vista-state.d.ts.map +0 -1
  288. package/dist/lib/vista-view.d.ts.map +0 -1
  289. package/dist/react.d.ts +0 -11
  290. package/dist/react.d.ts.map +0 -1
  291. package/dist/react.js +0 -69
  292. package/dist/solid.d.ts +0 -3
  293. package/dist/solid.d.ts.map +0 -1
  294. package/dist/solid.js +0 -24
  295. package/dist/style.css +0 -1
  296. package/dist/style.d.ts +0 -1
  297. package/dist/styles/autumn-amber.css +0 -1
  298. package/dist/styles/autumn-amber.d.ts +0 -1
  299. package/dist/styles/cotton-candy.css +0 -1
  300. package/dist/styles/cotton-candy.d.ts +0 -1
  301. package/dist/styles/dark-rounded.css +0 -1
  302. package/dist/styles/dark-rounded.d.ts +0 -1
  303. package/dist/styles/ember-glow.css +0 -1
  304. package/dist/styles/ember-glow.d.ts +0 -1
  305. package/dist/styles/extensions/image-story.css +0 -1
  306. package/dist/styles/extensions/image-story.d.ts +0 -1
  307. package/dist/styles/forest-moss.css +0 -1
  308. package/dist/styles/forest-moss.d.ts +0 -1
  309. package/dist/styles/green-lake.css +0 -1
  310. package/dist/styles/green-lake.d.ts +0 -1
  311. package/dist/styles/ice-crystal.css +0 -1
  312. package/dist/styles/ice-crystal.d.ts +0 -1
  313. package/dist/styles/lavender-fields.css +0 -1
  314. package/dist/styles/lavender-fields.d.ts +0 -1
  315. package/dist/styles/midnight-gold.css +0 -1
  316. package/dist/styles/midnight-gold.d.ts +0 -1
  317. package/dist/styles/midnight-ocean.css +0 -1
  318. package/dist/styles/midnight-ocean.d.ts +0 -1
  319. package/dist/styles/mint-chocolate.css +0 -1
  320. package/dist/styles/mint-chocolate.d.ts +0 -1
  321. package/dist/styles/neon-nights.css +0 -1
  322. package/dist/styles/neon-nights.d.ts +0 -1
  323. package/dist/styles/paper-light.css +0 -1
  324. package/dist/styles/paper-light.d.ts +0 -1
  325. package/dist/styles/retro-arcade.css +0 -1
  326. package/dist/styles/retro-arcade.d.ts +0 -1
  327. package/dist/styles/soft-neutral.css +0 -1
  328. package/dist/styles/soft-neutral.d.ts +0 -1
  329. package/dist/styles/stark-minimal.css +0 -1
  330. package/dist/styles/stark-minimal.d.ts +0 -1
  331. package/dist/styles/strawberry.css +0 -1
  332. package/dist/styles/strawberry.d.ts +0 -1
  333. package/dist/svelte.d.ts +0 -3
  334. package/dist/svelte.d.ts.map +0 -1
  335. package/dist/svelte.js +0 -22
  336. package/dist/vista-box-zG6ZgBcI.js +0 -334
  337. package/dist/vistaview.d.ts.map +0 -1
  338. package/dist/vistaview.js +0 -1013
  339. package/dist/vistaview.umd.js +0 -18
  340. package/dist/vue.d.ts +0 -25
  341. package/dist/vue.d.ts.map +0 -1
  342. package/dist/vue.js +0 -79
@@ -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;for(let t of[/wistia\.com\/medias\/([a-zA-Z0-9]+)/,/wistia\.net\/embed\/iframe\/([a-zA-Z0-9]+)/]){let n=e.match(t);if(n&&n[1])return n[1]}return null}async function r(e){let t=n(e);if(!t)throw Error(`Invalid Wistia video URL`);try{return(await(await fetch(`https://fast.wistia.com/oembed?url=https://home.wistia.com/medias/${t}`)).json()).thumbnail_url}catch(e){throw console.error(`Failed to fetch Wistia thumbnail:`,e),Error(`Failed to fetch Wistia thumbnail`)}}var i=class extends t.VistaBox{element;url;constructor(e){super(e);let t=e.elm.config.src;this.url=t;let r=document.createElement(`div`);r.style.position=`relative`,r.style.overflow=`hidden`,r.style.borderRadius=`14px`;let i=document.createElement(`img`);r.appendChild(i),i.style.width=`100%`,i.style.height=`100%`,i.style.objectFit=`cover`,i.src=this.origin?.image.src||``,i.classList.add(`vvw--pulsing`),this.element=r,this.element.classList.add(`vvw-img-hi`);let{width:a,height:o}=this.getFullSizeDim();if(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){let e=document.createElement(`iframe`);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://fast.wistia.net/embed/iframe/${n(t)}?autoPlay=1`,r.appendChild(e),e.onload=()=>{e.style.opacity=`1`,i.classList.remove(`vvw--pulsing`)}}this.isLoadedResolved(!0)}getFullSizeDim(){let e=Math.min(window.innerWidth,800);return{width:e,height:e*9/16}}setFinalTransform(){return super.setFinalTransform({propagateEvent:!1})}};function a(){return{name:`wistiaVideo`,onInitializeImage:e=>{let t=e.elm.config.src;if(n(t))return new i(e)},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.VistaWistiaVideo=i,e.getWistiaThumbnail=r,e.parseWistiaVideoId=n,e.wistiaVideo=a});
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\n/**\n * Parse Wistia URL and extract video ID\n * Supports various Wistia URL formats:\n * - https://home.wistia.com/medias/VIDEO_ID\n * - https://fast.wistia.net/embed/iframe/VIDEO_ID\n * - https://ACCOUNT.wistia.com/medias/VIDEO_ID\n * @param url - Wistia video URL\n * @returns Video ID or null if not found\n */\nexport function parseWistiaVideoId(url: string): string | null {\n if (!url) return null;\n\n // Try different Wistia URL patterns\n const patterns = [\n /wistia\\.com\\/medias\\/([a-zA-Z0-9]+)/,\n /wistia\\.net\\/embed\\/iframe\\/([a-zA-Z0-9]+)/,\n ];\n\n for (const pattern of patterns) {\n const match = url.match(pattern);\n if (match && match[1]) {\n return match[1];\n }\n }\n\n return null;\n}\n\n/**\n * Get Wistia video thumbnail URL using oEmbed API\n * Note: This fetches data asynchronously from Wistia's oEmbed endpoint\n * @param videoUrl - Wistia video URL\n * @returns Promise with thumbnail URL\n */\nexport async function getWistiaThumbnail(videoUrl: string): Promise<string> {\n const videoId = parseWistiaVideoId(videoUrl);\n\n if (!videoId) {\n throw new Error('Invalid Wistia video URL');\n }\n\n try {\n const response = await fetch(\n `https://fast.wistia.com/oembed?url=https://home.wistia.com/medias/${videoId}`\n );\n const data = await response.json();\n return data.thumbnail_url;\n } catch (error) {\n // Fallback: return a placeholder or rethrow\n console.error('Failed to fetch Wistia thumbnail:', error);\n throw new Error('Failed to fetch Wistia thumbnail');\n }\n}\n\nexport class VistaWistiaVideo extends VistaBox {\n element: HTMLDivElement;\n url: string;\n\n constructor(par: VistaImageParams) {\n super(par);\n\n const url = par.elm.config.src;\n this.url = url;\n\n const div = document.createElement('div');\n div.style.position = 'relative';\n div.style.overflow = 'hidden';\n div.style.borderRadius = '14px';\n const image = document.createElement('img');\n div.appendChild(image);\n image.style.width = '100%';\n image.style.height = '100%';\n image.style.objectFit = 'cover';\n image.src = this.origin?.image.src || ''; // use existing thumbnail if available\n image.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 iframe initial style\n this.setSizes({ stableSize: false, initDimension: true });\n\n if (this.pos === 0) {\n const iframe = document.createElement('iframe');\n iframe.frameBorder = '0';\n iframe.allow = 'autoplay; fullscreen';\n iframe.allowFullscreen = true;\n iframe.width = '100%';\n iframe.height = '100%';\n iframe.style.position = 'absolute';\n iframe.style.top = '0';\n iframe.style.left = '0';\n iframe.style.opacity = '0';\n iframe.style.transition = 'opacity 333ms ease';\n iframe.src = `https://fast.wistia.net/embed/iframe/${parseWistiaVideoId(url)}?autoPlay=1`;\n div.appendChild(iframe);\n\n iframe.onload = () => {\n iframe.style.opacity = '1';\n image.classList.remove('vvw--pulsing');\n };\n }\n\n this.isLoadedResolved!(true);\n }\n\n // the default full size is the scaled thumbnail size\n // so we change it to 16:9 full window width size (or max 800px)\n protected getFullSizeDim(): { width: number; height: number } {\n const maxWidth = Math.min(window.innerWidth, 800);\n return {\n width: maxWidth,\n height: (maxWidth * 9) / 16,\n };\n }\n\n // override to avoid propagating content change event\n // (because no change will happen on iframe)\n setFinalTransform() {\n return super.setFinalTransform({ propagateEvent: false });\n }\n}\n\nexport function wistiaVideo(): VistaExtension {\n return {\n name: 'wistiaVideo',\n onInitializeImage: (params: VistaImageParams) => {\n const url = params.elm.config.src;\n const videoId = parseWistiaVideoId(url);\n if (!videoId) return;\n\n return new VistaWistiaVideo(params);\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 VistaWistiaVideo) {\n v.deactivateUi(['download', 'zoomIn', 'zoomOut'], mainData);\n }\n },\n };\n}\n"],"mappings":"gRAYA,SAAgB,EAAmB,EAA4B,CAC7D,GAAI,CAAC,EAAK,OAAO,KAQjB,IAAK,IAAM,IALM,CACf,sCACA,6CACD,CAE+B,CAC9B,IAAM,EAAQ,EAAI,MAAM,EAAQ,CAChC,GAAI,GAAS,EAAM,GACjB,OAAO,EAAM,GAIjB,OAAO,KAST,eAAsB,EAAmB,EAAmC,CAC1E,IAAM,EAAU,EAAmB,EAAS,CAE5C,GAAI,CAAC,EACH,MAAU,MAAM,2BAA2B,CAG7C,GAAI,CAKF,OADa,MAHI,MAAM,MACrB,qEAAqE,IACtE,EAC2B,MAAM,EACtB,oBACL,EAAO,CAGd,MADA,QAAQ,MAAM,oCAAqC,EAAM,CAC/C,MAAM,mCAAmC,EAIvD,IAAa,EAAb,cAAsC,EAAA,QAAS,CAC7C,QACA,IAEA,YAAY,EAAuB,CACjC,MAAM,EAAI,CAEV,IAAM,EAAM,EAAI,IAAI,OAAO,IAC3B,KAAK,IAAM,EAEX,IAAM,EAAM,SAAS,cAAc,MAAM,CACzC,EAAI,MAAM,SAAW,WACrB,EAAI,MAAM,SAAW,SACrB,EAAI,MAAM,aAAe,OACzB,IAAM,EAAQ,SAAS,cAAc,MAAM,CAC3C,EAAI,YAAY,EAAM,CACtB,EAAM,MAAM,MAAQ,OACpB,EAAM,MAAM,OAAS,OACrB,EAAM,MAAM,UAAY,QACxB,EAAM,IAAM,KAAK,QAAQ,MAAM,KAAO,GACtC,EAAM,UAAU,IAAI,eAAe,CAEnC,KAAK,QAAU,EAEf,KAAK,QAAQ,UAAU,IAAI,aAAa,CAGxC,GAAM,CAAE,MAAO,EAAW,OAAQ,GAAe,KAAK,gBAAgB,CAWtE,GAVA,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,EAAG,CAClB,IAAM,EAAS,SAAS,cAAc,SAAS,CAC/C,EAAO,YAAc,IACrB,EAAO,MAAQ,uBACf,EAAO,gBAAkB,GACzB,EAAO,MAAQ,OACf,EAAO,OAAS,OAChB,EAAO,MAAM,SAAW,WACxB,EAAO,MAAM,IAAM,IACnB,EAAO,MAAM,KAAO,IACpB,EAAO,MAAM,QAAU,IACvB,EAAO,MAAM,WAAa,qBAC1B,EAAO,IAAM,wCAAwC,EAAmB,EAAI,CAAC,aAC7E,EAAI,YAAY,EAAO,CAEvB,EAAO,WAAe,CACpB,EAAO,MAAM,QAAU,IACvB,EAAM,UAAU,OAAO,eAAe,EAI1C,KAAK,iBAAkB,GAAK,CAK9B,gBAA8D,CAC5D,IAAM,EAAW,KAAK,IAAI,OAAO,WAAY,IAAI,CACjD,MAAO,CACL,MAAO,EACP,OAAS,EAAW,EAAK,GAC1B,CAKH,mBAAoB,CAClB,OAAO,MAAM,kBAAkB,CAAE,eAAgB,GAAO,CAAC,GAI7D,SAAgB,GAA8B,CAC5C,MAAO,CACL,KAAM,cACN,kBAAoB,GAA6B,CAC/C,IAAM,EAAM,EAAO,IAAI,OAAO,IACd,KAAmB,EAAI,CAGvC,OAAO,IAAI,EAAiB,EAAO,EAErC,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,5 +1,5 @@
1
- import { VistaExtension, VistaImageParams } from '../types';
2
- import { VistaBox } from '../vista-box';
1
+ import type { VistaExtension, VistaImageParams } from 'vistaview';
2
+ import { VistaBox } from 'vistaview';
3
3
  /**
4
4
  * Parse YouTube URL and extract video ID
5
5
  * Supports various YouTube URL formats:
@@ -35,4 +35,4 @@ export declare class VistaYoutubeVideo extends VistaBox {
35
35
  } | undefined;
36
36
  }
37
37
  export declare function youtubeVideo(): VistaExtension;
38
- //# sourceMappingURL=youtube-video.d.ts.map
38
+ //# 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;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoB9D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,SAAgB,GACxD,MAAM,CAeR;AAED,qBAAa,iBAAkB,SAAQ,QAAQ;IAC7C,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,YAAY,IAAI,cAAc,CAiB7C"}
@@ -0,0 +1,80 @@
1
+ import { VistaBox } from "vistaview";
2
+ function parseYouTubeVideoId(e) {
3
+ if (!e) return null;
4
+ for (let t of [
5
+ /(?:youtube\.com\/watch\?v=|youtu\.be\/)([a-zA-Z0-9_-]{11})/,
6
+ /youtube\.com\/embed\/([a-zA-Z0-9_-]{11})/,
7
+ /youtube\.com\/v\/([a-zA-Z0-9_-]{11})/,
8
+ /youtube\.com\/live\/([a-zA-Z0-9_-]{11})/,
9
+ /youtube\.com\/shorts\/([a-zA-Z0-9_-]{11})/
10
+ ]) {
11
+ let n = e.match(t);
12
+ if (n && n[1]) return n[1];
13
+ }
14
+ return null;
15
+ }
16
+ function getYouTubeThumbnail(e, n = "hq") {
17
+ let r = {
18
+ maxres: "maxresdefault.jpg",
19
+ hq: "hqdefault.jpg",
20
+ mq: "mqdefault.jpg",
21
+ sd: "sddefault.jpg",
22
+ default: "default.jpg"
23
+ }, i = parseYouTubeVideoId(e);
24
+ if (!i) throw Error("Invalid YouTube video URL");
25
+ return `https://img.youtube.com/vi/${i}/${r[n]}`;
26
+ }
27
+ var VistaYoutubeVideo = class extends VistaBox {
28
+ element;
29
+ url;
30
+ constructor(e) {
31
+ super(e);
32
+ let r = e.elm.config.src;
33
+ this.url = r;
34
+ let i = document.createElement("div");
35
+ i.style.position = "relative";
36
+ let a = document.createElement("img");
37
+ i.appendChild(a), a.src = this.origin?.image.src || getYouTubeThumbnail(r, "hq"), 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");
38
+ let { width: o, height: s } = this.getFullSizeDim();
39
+ 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({
40
+ stableSize: !1,
41
+ initDimension: !0
42
+ }), this.pos === 0) {
43
+ let e = document.createElement("iframe");
44
+ e.frameBorder = "0", e.allow = "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share", 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://www.youtube.com/embed/${parseYouTubeVideoId(r)}?autoplay=1&rel=0`, i.appendChild(e), e.onload = () => {
45
+ e.style.opacity = "1", a.classList.remove("vvw--pulsing");
46
+ };
47
+ }
48
+ this.isLoadedResolved(!0);
49
+ }
50
+ getFullSizeDim() {
51
+ let e = Math.min(window.innerWidth, 800);
52
+ return {
53
+ width: e,
54
+ height: e * 9 / 16
55
+ };
56
+ }
57
+ setFinalTransform() {
58
+ return super.setFinalTransform({ propagateEvent: !1 });
59
+ }
60
+ };
61
+ function youtubeVideo() {
62
+ return {
63
+ name: "youtubeVideo",
64
+ onInitializeImage: (e) => {
65
+ let n = e.elm.config.src;
66
+ if (parseYouTubeVideoId(n)) return new VistaYoutubeVideo(e);
67
+ },
68
+ onImageView: async (e, t) => {
69
+ let n = e.images.to[Math.floor(e.images.to.length / 2)];
70
+ n instanceof VistaYoutubeVideo && t.deactivateUi([
71
+ "download",
72
+ "zoomIn",
73
+ "zoomOut"
74
+ ], n);
75
+ }
76
+ };
77
+ }
78
+ export { VistaYoutubeVideo, getYouTubeThumbnail, parseYouTubeVideoId, youtubeVideo };
79
+
80
+ //# 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\n/**\n * Parse YouTube URL and extract video ID\n * Supports various YouTube URL formats:\n * - https://www.youtube.com/watch?v=VIDEO_ID\n * - https://youtu.be/VIDEO_ID\n * - https://www.youtube.com/embed/VIDEO_ID\n * - https://m.youtube.com/watch?v=VIDEO_ID\n * - https://www.youtube.com/v/VIDEO_ID\n * - https://www.youtube.com/live/VIDEO_ID\n * - https://www.youtube.com/shorts/VIDEO_ID\n * @param url - YouTube video URL\n * @returns Video ID or null if not found\n */\nexport function parseYouTubeVideoId(url: string): string | null {\n if (!url) return null;\n\n // Try different YouTube URL patterns\n const patterns = [\n /(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([a-zA-Z0-9_-]{11})/,\n /youtube\\.com\\/embed\\/([a-zA-Z0-9_-]{11})/,\n /youtube\\.com\\/v\\/([a-zA-Z0-9_-]{11})/,\n /youtube\\.com\\/live\\/([a-zA-Z0-9_-]{11})/,\n /youtube\\.com\\/shorts\\/([a-zA-Z0-9_-]{11})/,\n ];\n\n for (const pattern of patterns) {\n const match = url.match(pattern);\n if (match && match[1]) {\n return match[1];\n }\n }\n\n return null;\n}\n\n/**\n * Get YouTube video thumbnail URL\n * @param videoUrl - YouTube video URL\n * @param quality - Thumbnail quality: 'maxres' | 'hq' | 'mq' | 'sd' | 'default'\n * @returns Thumbnail URL\n */\nexport function getYouTubeThumbnail(\n videoUrl: string,\n quality: 'maxres' | 'hq' | 'mq' | 'sd' | 'default' = 'hq'\n): string {\n const qualityMap = {\n maxres: 'maxresdefault.jpg',\n hq: 'hqdefault.jpg',\n mq: 'mqdefault.jpg',\n sd: 'sddefault.jpg',\n default: 'default.jpg',\n };\n\n const videoId = parseYouTubeVideoId(videoUrl);\n if (!videoId) {\n throw new Error('Invalid YouTube video URL');\n }\n\n return `https://img.youtube.com/vi/${videoId}/${qualityMap[quality]}`;\n}\n\nexport class VistaYoutubeVideo extends VistaBox {\n element: HTMLDivElement;\n url: string;\n\n constructor(par: VistaImageParams) {\n super(par);\n\n const url = par.elm.config.src;\n this.url = url;\n\n const div = document.createElement('div');\n div.style.position = 'relative';\n const image = document.createElement('img');\n div.appendChild(image);\n image.src = this.origin?.image.src || getYouTubeThumbnail(url, 'hq');\n image.style.width = '100%';\n image.style.height = '100%';\n image.style.objectFit = 'cover';\n image.classList.add('vvw--pulsing');\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 iframe initial style\n this.setSizes({ stableSize: false, initDimension: true });\n\n if (this.pos === 0) {\n const iframe = document.createElement('iframe');\n iframe.frameBorder = '0';\n iframe.allow =\n 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share';\n iframe.allowFullscreen = true;\n iframe.width = '100%';\n iframe.height = '100%';\n iframe.style.position = 'absolute';\n iframe.style.top = '0';\n iframe.style.left = '0';\n iframe.style.opacity = '0';\n iframe.style.transition = 'opacity 333ms ease';\n iframe.src = `https://www.youtube.com/embed/${parseYouTubeVideoId(url)}?autoplay=1&rel=0`;\n div.appendChild(iframe);\n\n iframe.onload = () => {\n iframe.style.opacity = '1';\n image.classList.remove('vvw--pulsing');\n };\n }\n\n this.isLoadedResolved!(true);\n }\n\n // the default full size is the scaled thumbnail size\n // so we change it to 16:9 full window width size (or max 800px)\n protected getFullSizeDim(): { width: number; height: number } {\n const maxWidth = Math.min(window.innerWidth, 800);\n return {\n width: maxWidth,\n height: (maxWidth * 9) / 16,\n };\n }\n\n // override to avoid propagating content change event\n // (because no change will happen on iframe)\n setFinalTransform() {\n return super.setFinalTransform({ propagateEvent: false });\n }\n}\n\nexport function youtubeVideo(): VistaExtension {\n return {\n name: 'youtubeVideo',\n onInitializeImage: (params: VistaImageParams) => {\n const url = params.elm.config.src;\n const videoId = parseYouTubeVideoId(url);\n if (!videoId) return;\n\n return new VistaYoutubeVideo(params);\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 VistaYoutubeVideo) {\n v.deactivateUi(['download', 'zoomIn', 'zoomOut'], mainData);\n }\n },\n };\n}\n"],"mappings":";AAgBA,SAAgB,oBAAoB,GAA4B;AAC9D,KAAI,CAAC,EAAK,QAAO;AAWjB,MAAK,IAAM,KARM;EACf;EACA;EACA;EACA;EACA;EACD,EAE+B;EAC9B,IAAM,IAAQ,EAAI,MAAM,EAAQ;AAChC,MAAI,KAAS,EAAM,GACjB,QAAO,EAAM;;AAIjB,QAAO;;AAST,SAAgB,oBACd,GACA,IAAqD,MAC7C;CACR,IAAM,IAAa;EACjB,QAAQ;EACR,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,SAAS;EACV,EAEK,IAAU,oBAAoB,EAAS;AAC7C,KAAI,CAAC,EACH,OAAU,MAAM,4BAA4B;AAG9C,QAAO,8BAA8B,EAAQ,GAAG,EAAW;;AAG7D,IAAa,oBAAb,cAAuC,SAAS;CAC9C;CACA;CAEA,YAAY,GAAuB;AACjC,QAAM,EAAI;EAEV,IAAM,IAAM,EAAI,IAAI,OAAO;AAC3B,OAAK,MAAM;EAEX,IAAM,IAAM,SAAS,cAAc,MAAM;AACzC,IAAI,MAAM,WAAW;EACrB,IAAM,IAAQ,SAAS,cAAc,MAAM;AAS3C,EARA,EAAI,YAAY,EAAM,EACtB,EAAM,MAAM,KAAK,QAAQ,MAAM,OAAO,oBAAoB,GAAK,KAAK,EACpE,EAAM,MAAM,QAAQ,QACpB,EAAM,MAAM,SAAS,QACrB,EAAM,MAAM,YAAY,SACxB,EAAM,UAAU,IAAI,eAAe,EACnC,KAAK,UAAU,GAEf,KAAK,QAAQ,UAAU,IAAI,aAAa;EAGxC,IAAM,EAAE,OAAO,GAAW,QAAQ,MAAe,KAAK,gBAAgB;AAWtE,MAVA,KAAK,QAAQ,GACb,KAAK,QAAQ,GACb,KAAK,OAAO,KAAK,QAAQ,IACzB,KAAK,OAAO,KAAK,OACjB,KAAK,QAAQ,MAAM,QAAQ,GAAG,EAAU,KACxC,KAAK,QAAQ,MAAM,SAAS,GAAG,EAAW,KAG1C,KAAK,SAAS;GAAE,YAAY;GAAO,eAAe;GAAM,CAAC,EAErD,KAAK,QAAQ,GAAG;GAClB,IAAM,IAAS,SAAS,cAAc,SAAS;AAe/C,GAdA,EAAO,cAAc,KACrB,EAAO,QACL,uGACF,EAAO,kBAAkB,IACzB,EAAO,QAAQ,QACf,EAAO,SAAS,QAChB,EAAO,MAAM,WAAW,YACxB,EAAO,MAAM,MAAM,KACnB,EAAO,MAAM,OAAO,KACpB,EAAO,MAAM,UAAU,KACvB,EAAO,MAAM,aAAa,sBAC1B,EAAO,MAAM,iCAAiC,oBAAoB,EAAI,CAAC,oBACvE,EAAI,YAAY,EAAO,EAEvB,EAAO,eAAe;AAEpB,IADA,EAAO,MAAM,UAAU,KACvB,EAAM,UAAU,OAAO,eAAe;;;AAI1C,OAAK,iBAAkB,GAAK;;CAK9B,iBAA8D;EAC5D,IAAM,IAAW,KAAK,IAAI,OAAO,YAAY,IAAI;AACjD,SAAO;GACL,OAAO;GACP,QAAS,IAAW,IAAK;GAC1B;;CAKH,oBAAoB;AAClB,SAAO,MAAM,kBAAkB,EAAE,gBAAgB,IAAO,CAAC;;;AAI7D,SAAgB,eAA+B;AAC7C,QAAO;EACL,MAAM;EACN,oBAAoB,MAA6B;GAC/C,IAAM,IAAM,EAAO,IAAI,OAAO;AACd,2BAAoB,EAAI,CAGxC,QAAO,IAAI,kBAAkB,EAAO;;EAEtC,aAAa,OAAO,GAAiB,MAAiB;GACpD,IAAM,IAAW,EAAK,OAAO,GAAI,KAAK,MAAM,EAAK,OAAO,GAAI,SAAS,EAAE;AACvE,GAAI,aAAoB,qBACtB,EAAE,aAAa;IAAC;IAAY;IAAU;IAAU,EAAE,EAAS;;EAGhE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=main.test.d.ts.map
@@ -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;for(let t of[/(?:youtube\.com\/watch\?v=|youtu\.be\/)([a-zA-Z0-9_-]{11})/,/youtube\.com\/embed\/([a-zA-Z0-9_-]{11})/,/youtube\.com\/v\/([a-zA-Z0-9_-]{11})/,/youtube\.com\/live\/([a-zA-Z0-9_-]{11})/,/youtube\.com\/shorts\/([a-zA-Z0-9_-]{11})/]){let n=e.match(t);if(n&&n[1])return n[1]}return null}function r(e,t=`hq`){let r={maxres:`maxresdefault.jpg`,hq:`hqdefault.jpg`,mq:`mqdefault.jpg`,sd:`sddefault.jpg`,default:`default.jpg`},i=n(e);if(!i)throw Error(`Invalid YouTube video URL`);return`https://img.youtube.com/vi/${i}/${r[t]}`}var i=class extends t.VistaBox{element;url;constructor(e){super(e);let t=e.elm.config.src;this.url=t;let i=document.createElement(`div`);i.style.position=`relative`;let a=document.createElement(`img`);i.appendChild(a),a.src=this.origin?.image.src||r(t,`hq`),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`);let{width:o,height:s}=this.getFullSizeDim();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({stableSize:!1,initDimension:!0}),this.pos===0){let e=document.createElement(`iframe`);e.frameBorder=`0`,e.allow=`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share`,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://www.youtube.com/embed/${n(t)}?autoplay=1&rel=0`,i.appendChild(e),e.onload=()=>{e.style.opacity=`1`,a.classList.remove(`vvw--pulsing`)}}this.isLoadedResolved(!0)}getFullSizeDim(){let e=Math.min(window.innerWidth,800);return{width:e,height:e*9/16}}setFinalTransform(){return super.setFinalTransform({propagateEvent:!1})}};function a(){return{name:`youtubeVideo`,onInitializeImage:e=>{let t=e.elm.config.src;if(n(t))return new i(e)},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.VistaYoutubeVideo=i,e.getYouTubeThumbnail=r,e.parseYouTubeVideoId=n,e.youtubeVideo=a});
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\n/**\n * Parse YouTube URL and extract video ID\n * Supports various YouTube URL formats:\n * - https://www.youtube.com/watch?v=VIDEO_ID\n * - https://youtu.be/VIDEO_ID\n * - https://www.youtube.com/embed/VIDEO_ID\n * - https://m.youtube.com/watch?v=VIDEO_ID\n * - https://www.youtube.com/v/VIDEO_ID\n * - https://www.youtube.com/live/VIDEO_ID\n * - https://www.youtube.com/shorts/VIDEO_ID\n * @param url - YouTube video URL\n * @returns Video ID or null if not found\n */\nexport function parseYouTubeVideoId(url: string): string | null {\n if (!url) return null;\n\n // Try different YouTube URL patterns\n const patterns = [\n /(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([a-zA-Z0-9_-]{11})/,\n /youtube\\.com\\/embed\\/([a-zA-Z0-9_-]{11})/,\n /youtube\\.com\\/v\\/([a-zA-Z0-9_-]{11})/,\n /youtube\\.com\\/live\\/([a-zA-Z0-9_-]{11})/,\n /youtube\\.com\\/shorts\\/([a-zA-Z0-9_-]{11})/,\n ];\n\n for (const pattern of patterns) {\n const match = url.match(pattern);\n if (match && match[1]) {\n return match[1];\n }\n }\n\n return null;\n}\n\n/**\n * Get YouTube video thumbnail URL\n * @param videoUrl - YouTube video URL\n * @param quality - Thumbnail quality: 'maxres' | 'hq' | 'mq' | 'sd' | 'default'\n * @returns Thumbnail URL\n */\nexport function getYouTubeThumbnail(\n videoUrl: string,\n quality: 'maxres' | 'hq' | 'mq' | 'sd' | 'default' = 'hq'\n): string {\n const qualityMap = {\n maxres: 'maxresdefault.jpg',\n hq: 'hqdefault.jpg',\n mq: 'mqdefault.jpg',\n sd: 'sddefault.jpg',\n default: 'default.jpg',\n };\n\n const videoId = parseYouTubeVideoId(videoUrl);\n if (!videoId) {\n throw new Error('Invalid YouTube video URL');\n }\n\n return `https://img.youtube.com/vi/${videoId}/${qualityMap[quality]}`;\n}\n\nexport class VistaYoutubeVideo extends VistaBox {\n element: HTMLDivElement;\n url: string;\n\n constructor(par: VistaImageParams) {\n super(par);\n\n const url = par.elm.config.src;\n this.url = url;\n\n const div = document.createElement('div');\n div.style.position = 'relative';\n const image = document.createElement('img');\n div.appendChild(image);\n image.src = this.origin?.image.src || getYouTubeThumbnail(url, 'hq');\n image.style.width = '100%';\n image.style.height = '100%';\n image.style.objectFit = 'cover';\n image.classList.add('vvw--pulsing');\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 iframe initial style\n this.setSizes({ stableSize: false, initDimension: true });\n\n if (this.pos === 0) {\n const iframe = document.createElement('iframe');\n iframe.frameBorder = '0';\n iframe.allow =\n 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share';\n iframe.allowFullscreen = true;\n iframe.width = '100%';\n iframe.height = '100%';\n iframe.style.position = 'absolute';\n iframe.style.top = '0';\n iframe.style.left = '0';\n iframe.style.opacity = '0';\n iframe.style.transition = 'opacity 333ms ease';\n iframe.src = `https://www.youtube.com/embed/${parseYouTubeVideoId(url)}?autoplay=1&rel=0`;\n div.appendChild(iframe);\n\n iframe.onload = () => {\n iframe.style.opacity = '1';\n image.classList.remove('vvw--pulsing');\n };\n }\n\n this.isLoadedResolved!(true);\n }\n\n // the default full size is the scaled thumbnail size\n // so we change it to 16:9 full window width size (or max 800px)\n protected getFullSizeDim(): { width: number; height: number } {\n const maxWidth = Math.min(window.innerWidth, 800);\n return {\n width: maxWidth,\n height: (maxWidth * 9) / 16,\n };\n }\n\n // override to avoid propagating content change event\n // (because no change will happen on iframe)\n setFinalTransform() {\n return super.setFinalTransform({ propagateEvent: false });\n }\n}\n\nexport function youtubeVideo(): VistaExtension {\n return {\n name: 'youtubeVideo',\n onInitializeImage: (params: VistaImageParams) => {\n const url = params.elm.config.src;\n const videoId = parseYouTubeVideoId(url);\n if (!videoId) return;\n\n return new VistaYoutubeVideo(params);\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 VistaYoutubeVideo) {\n v.deactivateUi(['download', 'zoomIn', 'zoomOut'], mainData);\n }\n },\n };\n}\n"],"mappings":"gRAgBA,SAAgB,EAAoB,EAA4B,CAC9D,GAAI,CAAC,EAAK,OAAO,KAWjB,IAAK,IAAM,IARM,CACf,6DACA,2CACA,uCACA,0CACA,4CACD,CAE+B,CAC9B,IAAM,EAAQ,EAAI,MAAM,EAAQ,CAChC,GAAI,GAAS,EAAM,GACjB,OAAO,EAAM,GAIjB,OAAO,KAST,SAAgB,EACd,EACA,EAAqD,KAC7C,CACR,IAAM,EAAa,CACjB,OAAQ,oBACR,GAAI,gBACJ,GAAI,gBACJ,GAAI,gBACJ,QAAS,cACV,CAEK,EAAU,EAAoB,EAAS,CAC7C,GAAI,CAAC,EACH,MAAU,MAAM,4BAA4B,CAG9C,MAAO,8BAA8B,EAAQ,GAAG,EAAW,KAG7D,IAAa,EAAb,cAAuC,EAAA,QAAS,CAC9C,QACA,IAEA,YAAY,EAAuB,CACjC,MAAM,EAAI,CAEV,IAAM,EAAM,EAAI,IAAI,OAAO,IAC3B,KAAK,IAAM,EAEX,IAAM,EAAM,SAAS,cAAc,MAAM,CACzC,EAAI,MAAM,SAAW,WACrB,IAAM,EAAQ,SAAS,cAAc,MAAM,CAC3C,EAAI,YAAY,EAAM,CACtB,EAAM,IAAM,KAAK,QAAQ,MAAM,KAAO,EAAoB,EAAK,KAAK,CACpE,EAAM,MAAM,MAAQ,OACpB,EAAM,MAAM,OAAS,OACrB,EAAM,MAAM,UAAY,QACxB,EAAM,UAAU,IAAI,eAAe,CACnC,KAAK,QAAU,EAEf,KAAK,QAAQ,UAAU,IAAI,aAAa,CAGxC,GAAM,CAAE,MAAO,EAAW,OAAQ,GAAe,KAAK,gBAAgB,CAWtE,GAVA,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,EAAG,CAClB,IAAM,EAAS,SAAS,cAAc,SAAS,CAC/C,EAAO,YAAc,IACrB,EAAO,MACL,sGACF,EAAO,gBAAkB,GACzB,EAAO,MAAQ,OACf,EAAO,OAAS,OAChB,EAAO,MAAM,SAAW,WACxB,EAAO,MAAM,IAAM,IACnB,EAAO,MAAM,KAAO,IACpB,EAAO,MAAM,QAAU,IACvB,EAAO,MAAM,WAAa,qBAC1B,EAAO,IAAM,iCAAiC,EAAoB,EAAI,CAAC,mBACvE,EAAI,YAAY,EAAO,CAEvB,EAAO,WAAe,CACpB,EAAO,MAAM,QAAU,IACvB,EAAM,UAAU,OAAO,eAAe,EAI1C,KAAK,iBAAkB,GAAK,CAK9B,gBAA8D,CAC5D,IAAM,EAAW,KAAK,IAAI,OAAO,WAAY,IAAI,CACjD,MAAO,CACL,MAAO,EACP,OAAS,EAAW,EAAK,GAC1B,CAKH,mBAAoB,CAClB,OAAO,MAAM,kBAAkB,CAAE,eAAgB,GAAO,CAAC,GAI7D,SAAgB,GAA+B,CAC7C,MAAO,CACL,KAAM,eACN,kBAAoB,GAA6B,CAC/C,IAAM,EAAM,EAAO,IAAI,OAAO,IACd,KAAoB,EAAI,CAGxC,OAAO,IAAI,EAAkB,EAAO,EAEtC,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"}
@@ -0,0 +1,3 @@
1
+ export { useVistaView } from "./use-vistaview";
2
+ export { VistaView } from "./vistaview";
3
+ export type { VistaViewProps, VistaComponentRef } from "./vistaview";
@@ -0,0 +1,51 @@
1
+ "use client";
2
+ import { useCallback, useEffect, useId, useImperativeHandle, useRef } from "react";
3
+ import { vistaView } from "vistaview";
4
+ import { jsx } from "react/jsx-runtime";
5
+ function useVistaView(a) {
6
+ let o = useRef(null);
7
+ return useEffect(() => (o.current = vistaView(a), () => {
8
+ o.current?.destroy(), o.current = null;
9
+ }), [a]), {
10
+ open: useCallback((e = 0) => o.current?.open(e), []),
11
+ close: useCallback(() => o.current?.close() ?? Promise.resolve(), []),
12
+ reset: useCallback(() => o.current?.reset(), []),
13
+ next: useCallback(() => o.current?.next(), []),
14
+ prev: useCallback(() => o.current?.prev(), []),
15
+ zoomIn: useCallback(() => o.current?.zoomIn(), []),
16
+ zoomOut: useCallback(() => o.current?.zoomOut(), []),
17
+ getCurrentIndex: useCallback(() => o.current?.getCurrentIndex() ?? -1, []),
18
+ view: useCallback((e) => o.current?.view(e), []),
19
+ destroy: useCallback(() => o.current?.destroy(), [])
20
+ };
21
+ }
22
+ const VistaView = (function({ children: e, selector: s = "> a", options: c, id: l, ref: u, ...d }) {
23
+ let f = useRef(null), p = useRef(null), m = useId(), h = l || `vvw-gallery-${m.replace(/:/g, "")}`;
24
+ return useImperativeHandle(u, () => ({
25
+ vistaView: p.current,
26
+ container: f.current
27
+ }), []), useEffect(() => {
28
+ if (f.current) return p.current = vistaView({
29
+ ...c,
30
+ elements: `#${h} ${s}`
31
+ }), () => {
32
+ p.current?.destroy(), p.current = null;
33
+ };
34
+ }, [
35
+ h,
36
+ s,
37
+ c
38
+ ]), useEffect(() => {
39
+ p.current?.reset();
40
+ }, [e]), /* @__PURE__ */ jsx("div", {
41
+ ref: (e) => {
42
+ f.current = e;
43
+ },
44
+ ...d,
45
+ id: h,
46
+ children: e
47
+ });
48
+ });
49
+ export { VistaView, useVistaView };
50
+
51
+ //# sourceMappingURL=main.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.es.js","names":[],"sources":["../src/use-vistaview.ts","../src/vistaview.tsx"],"sourcesContent":["\nimport { useEffect, useRef, useCallback } from 'react';\nimport { vistaView } from 'vistaview';\nimport type { VistaParams, VistaInterface } from 'vistaview';\n\nexport function useVistaView(options: VistaParams): VistaInterface {\n const instance = useRef<VistaInterface | null>(null);\n\n useEffect(() => {\n instance.current = vistaView(options);\n return () => {\n instance.current?.destroy();\n instance.current = null;\n };\n }, [options]);\n\n return {\n open: useCallback((i = 0) => instance.current?.open(i), []),\n close: useCallback(() => instance.current?.close() ?? Promise.resolve(), []),\n reset: useCallback(() => instance.current?.reset(), []),\n next: useCallback(() => instance.current?.next(), []),\n prev: useCallback(() => instance.current?.prev(), []),\n zoomIn: useCallback(() => instance.current?.zoomIn(), []),\n zoomOut: useCallback(() => instance.current?.zoomOut(), []),\n getCurrentIndex: useCallback(() => instance.current?.getCurrentIndex() ?? -1, []),\n view: useCallback((i: number) => instance.current?.view(i), []),\n destroy: useCallback(() => instance.current?.destroy(), []),\n };\n}","\nimport { useEffect, useRef, useId, useImperativeHandle } from 'react';\nimport type { ReactNode } from 'react';\nimport { vistaView } from 'vistaview';\nimport type { VistaInterface, VistaOpt } from 'vistaview';\n\nexport interface VistaViewProps {\n children: ReactNode;\n selector?: string;\n options?: VistaOpt;\n ref?: React.Ref<VistaComponentRef>;\n}\n\nexport type VistaComponentRef = { vistaView: VistaInterface | null; container: HTMLDivElement | null } | null;\n\nexport const VistaView = (function VistaView(\n { children, selector = '> a', options, id, ref, ...rest }: VistaViewProps & React.HTMLAttributes<HTMLDivElement>\n) {\n const containerRefInner = useRef<HTMLDivElement | null>(null);\n const instanceRef = useRef<VistaInterface | null>(null);\n const generatedId = useId();\n const galleryId = id || `vvw-gallery-${generatedId.replace(/:/g, '')}`;\n\n // expose { vistaView, container } on the component ref\n useImperativeHandle(ref as React.Ref<VistaComponentRef>, () => ({\n vistaView: instanceRef.current,\n container: containerRefInner.current,\n }), []);\n\n useEffect(() => {\n if (!containerRefInner.current) return;\n\n instanceRef.current = vistaView({\n ...options,\n elements: `#${galleryId} ${selector}`,\n });\n\n return () => {\n instanceRef.current?.destroy();\n instanceRef.current = null;\n };\n }, [galleryId, selector, options]);\n\n useEffect(() => {\n // reset when children change\n instanceRef.current?.reset();\n }, [children]);\n\n return (\n <div ref={el => { containerRefInner.current = el }} {...rest} id={galleryId}>\n {children}\n </div>\n );\n});\n\n"],"mappings":";;;;AAKA,SAAgB,aAAa,GAAsC;CACjE,IAAM,IAAW,OAA8B,KAAK;AAUpD,QARA,iBACE,EAAS,UAAU,UAAU,EAAQ,QACxB;AAEX,EADA,EAAS,SAAS,SAAS,EAC3B,EAAS,UAAU;KAEpB,CAAC,EAAQ,CAAC,EAEN;EACL,MAAM,aAAa,IAAI,MAAM,EAAS,SAAS,KAAK,EAAE,EAAE,EAAE,CAAC;EAC3D,OAAO,kBAAkB,EAAS,SAAS,OAAO,IAAI,QAAQ,SAAS,EAAE,EAAE,CAAC;EAC5E,OAAO,kBAAkB,EAAS,SAAS,OAAO,EAAE,EAAE,CAAC;EACvD,MAAM,kBAAkB,EAAS,SAAS,MAAM,EAAE,EAAE,CAAC;EACrD,MAAM,kBAAkB,EAAS,SAAS,MAAM,EAAE,EAAE,CAAC;EACrD,QAAQ,kBAAkB,EAAS,SAAS,QAAQ,EAAE,EAAE,CAAC;EACzD,SAAS,kBAAkB,EAAS,SAAS,SAAS,EAAE,EAAE,CAAC;EAC3D,iBAAiB,kBAAkB,EAAS,SAAS,iBAAiB,IAAI,IAAI,EAAE,CAAC;EACjF,MAAM,aAAa,MAAc,EAAS,SAAS,KAAK,EAAE,EAAE,EAAE,CAAC;EAC/D,SAAS,kBAAkB,EAAS,SAAS,SAAS,EAAE,EAAE,CAAC;EAC5D;;ACZH,MAAa,aAAa,SACxB,EAAE,aAAU,cAAW,OAAO,YAAS,OAAI,QAAK,GAAG,KACnD;CACA,IAAM,IAAoB,OAA8B,KAAK,EACvD,IAAc,OAA8B,KAAK,EACjD,IAAc,OAAO,EACrB,IAAY,KAAM,eAAe,EAAY,QAAQ,MAAM,GAAG;AA2BpE,QAxBA,oBAAoB,UAA4C;EAC9D,WAAW,EAAY;EACvB,WAAW,EAAkB;EAC9B,GAAG,EAAE,CAAC,EAEP,gBAAgB;AACT,QAAkB,QAOvB,QALA,EAAY,UAAU,UAAU;GAC9B,GAAG;GACH,UAAU,IAAI,EAAU,GAAG;GAC5B,CAAC,QAEW;AAEX,GADA,EAAY,SAAS,SAAS,EAC9B,EAAY,UAAU;;IAEvB;EAAC;EAAW;EAAU;EAAQ,CAAC,EAElC,gBAAgB;AAEd,IAAY,SAAS,OAAO;IAC3B,CAAC,EAAS,CAAC,EAGZ,oBAAC,OAAA;EAAI,MAAK,MAAM;AAAE,KAAkB,UAAU;;EAAM,GAAI;EAAM,IAAI;EAC/D;GACG"}
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom/vitest';
@@ -0,0 +1,2 @@
1
+ import type { VistaParams, VistaInterface } from 'vistaview';
2
+ export declare function useVistaView(options: VistaParams): VistaInterface;
@@ -0,0 +1,13 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { VistaInterface, VistaOpt } from 'vistaview';
3
+ export interface VistaViewProps {
4
+ children: ReactNode;
5
+ selector?: string;
6
+ options?: VistaOpt;
7
+ ref?: React.Ref<VistaComponentRef>;
8
+ }
9
+ export type VistaComponentRef = {
10
+ vistaView: VistaInterface | null;
11
+ container: HTMLDivElement | null;
12
+ } | null;
13
+ export declare const VistaView: ({ children, selector, options, id, ref, ...rest }: VistaViewProps & React.HTMLAttributes<HTMLDivElement>) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,77 @@
1
+ import { onMount, onCleanup, splitProps, children, createEffect } from 'solid-js';
2
+ import { vistaView } from 'vistaview';
3
+ import { template, use, spread, mergeProps, insert } from 'solid-js/web';
4
+
5
+ // src/use-vistaview.ts
6
+ function useVistaView(options) {
7
+ let instance = null;
8
+ onMount(() => {
9
+ instance = vistaView(options);
10
+ });
11
+ onCleanup(() => {
12
+ instance?.destroy();
13
+ instance = null;
14
+ });
15
+ return {
16
+ open: (i) => instance?.open(i),
17
+ close: () => instance?.close() ?? Promise.resolve(),
18
+ reset: () => instance?.reset(),
19
+ next: () => instance?.next(),
20
+ prev: () => instance?.prev(),
21
+ zoomIn: () => instance?.zoomIn(),
22
+ zoomOut: () => instance?.zoomOut(),
23
+ getCurrentIndex: () => instance?.getCurrentIndex() ?? -1,
24
+ view: (i) => instance?.view(i),
25
+ destroy: () => instance?.destroy()
26
+ };
27
+ }
28
+ var _tmpl$ = /* @__PURE__ */ template(`<div>`);
29
+ function VistaView(props) {
30
+ let container;
31
+ let instance = null;
32
+ const [local, rest] = splitProps(props, ["selector", "options", "componentRef", "id", "children"]);
33
+ let galleryId = local.id || `vvw-gallery-${Math.random().toString(36).slice(2)}`;
34
+ const resolved = children(() => props.children);
35
+ createEffect(() => {
36
+ const nodes = resolved();
37
+ if (nodes && instance) {
38
+ instance.reset();
39
+ }
40
+ });
41
+ onMount(() => {
42
+ if (!container) {
43
+ console.warn("VistaView: container not yet mounted");
44
+ return;
45
+ }
46
+ const realId = container.id;
47
+ const selector = `#${realId} ${local.selector ?? "> a"}`;
48
+ const nodes = document.querySelectorAll(selector);
49
+ if (nodes.length > 0) {
50
+ instance?.destroy();
51
+ instance = vistaView({
52
+ ...local.options,
53
+ elements: selector
54
+ });
55
+ local.componentRef?.({
56
+ vistaView: instance,
57
+ container
58
+ });
59
+ }
60
+ });
61
+ onCleanup(() => {
62
+ instance?.destroy();
63
+ local.componentRef?.(null);
64
+ instance = null;
65
+ });
66
+ return (() => {
67
+ var _el$ = _tmpl$();
68
+ use((el) => container = el, _el$);
69
+ spread(_el$, mergeProps(rest, {
70
+ "id": galleryId
71
+ }), false, true);
72
+ insert(_el$, () => local.children);
73
+ return _el$;
74
+ })();
75
+ }
76
+
77
+ export { VistaView, useVistaView };
@@ -0,0 +1,72 @@
1
+ // src/use-vistaview.ts
2
+ import { onMount, onCleanup } from "solid-js";
3
+ import { vistaView } from "vistaview";
4
+ function useVistaView(options) {
5
+ let instance = null;
6
+ onMount(() => {
7
+ instance = vistaView(options);
8
+ });
9
+ onCleanup(() => {
10
+ instance?.destroy();
11
+ instance = null;
12
+ });
13
+ return {
14
+ open: (i) => instance?.open(i),
15
+ close: () => instance?.close() ?? Promise.resolve(),
16
+ reset: () => instance?.reset(),
17
+ next: () => instance?.next(),
18
+ prev: () => instance?.prev(),
19
+ zoomIn: () => instance?.zoomIn(),
20
+ zoomOut: () => instance?.zoomOut(),
21
+ getCurrentIndex: () => instance?.getCurrentIndex() ?? -1,
22
+ view: (i) => instance?.view(i),
23
+ destroy: () => instance?.destroy()
24
+ };
25
+ }
26
+
27
+ // src/vistaview.tsx
28
+ import { onCleanup as onCleanup2, onMount as onMount2, splitProps } from "solid-js";
29
+ import { children, createEffect } from "solid-js";
30
+ import { vistaView as vistaView2 } from "vistaview";
31
+ function VistaView(props) {
32
+ let container;
33
+ let instance = null;
34
+ const [local, rest] = splitProps(props, ["selector", "options", "componentRef", "id", "children"]);
35
+ let galleryId = local.id || `vvw-gallery-${Math.random().toString(36).slice(2)}`;
36
+ const resolved = children(() => props.children);
37
+ createEffect(() => {
38
+ const nodes = resolved();
39
+ if (nodes && instance) {
40
+ instance.reset();
41
+ }
42
+ });
43
+ onMount2(() => {
44
+ if (!container) {
45
+ console.warn("VistaView: container not yet mounted");
46
+ return;
47
+ }
48
+ const realId = container.id;
49
+ const selector = `#${realId} ${local.selector ?? "> a"}`;
50
+ const nodes = document.querySelectorAll(selector);
51
+ if (nodes.length > 0) {
52
+ instance?.destroy();
53
+ instance = vistaView2({
54
+ ...local.options,
55
+ elements: selector
56
+ });
57
+ local.componentRef?.({ vistaView: instance, container });
58
+ }
59
+ });
60
+ onCleanup2(() => {
61
+ instance?.destroy();
62
+ local.componentRef?.(null);
63
+ instance = null;
64
+ });
65
+ return <div ref={(el) => container = el} {...rest} id={galleryId}>
66
+ {local.children}
67
+ </div>;
68
+ }
69
+ export {
70
+ VistaView,
71
+ useVistaView
72
+ };
@@ -0,0 +1,18 @@
1
+ import { VistaParams, VistaInterface, VistaOpt } from 'vistaview';
2
+ import { JSX } from 'solid-js';
3
+
4
+ declare function useVistaView(options: VistaParams): VistaInterface;
5
+
6
+ interface VistaViewProps extends JSX.HTMLAttributes<HTMLDivElement> {
7
+ selector?: string;
8
+ options?: VistaOpt;
9
+ componentRef?: (obj: {
10
+ vistaView: VistaInterface | null;
11
+ container?: HTMLDivElement | undefined;
12
+ } | null) => void;
13
+ id?: string;
14
+ children?: any;
15
+ }
16
+ declare function VistaView(props: VistaViewProps): JSX.Element;
17
+
18
+ export { VistaView, type VistaViewProps, useVistaView };
@@ -0,0 +1,76 @@
1
+ import { onMount, onCleanup, splitProps, children, createEffect } from 'solid-js';
2
+ import { vistaView } from 'vistaview';
3
+ import { template, use, spread, mergeProps, insert } from 'solid-js/web';
4
+
5
+ // src/use-vistaview.ts
6
+ function useVistaView(options) {
7
+ let instance = null;
8
+ onMount(() => {
9
+ instance = vistaView(options);
10
+ });
11
+ onCleanup(() => {
12
+ instance?.destroy();
13
+ instance = null;
14
+ });
15
+ return {
16
+ open: (i) => instance?.open(i),
17
+ close: () => instance?.close() ?? Promise.resolve(),
18
+ reset: () => instance?.reset(),
19
+ next: () => instance?.next(),
20
+ prev: () => instance?.prev(),
21
+ zoomIn: () => instance?.zoomIn(),
22
+ zoomOut: () => instance?.zoomOut(),
23
+ getCurrentIndex: () => instance?.getCurrentIndex() ?? -1,
24
+ view: (i) => instance?.view(i),
25
+ destroy: () => instance?.destroy()
26
+ };
27
+ }
28
+ var _tmpl$ = /* @__PURE__ */ template(`<div>`);
29
+ function VistaView(props) {
30
+ let container;
31
+ let instance = null;
32
+ const [local, rest] = splitProps(props, ["selector", "options", "componentRef", "id", "children"]);
33
+ let galleryId = local.id || `vvw-gallery-${Math.random().toString(36).slice(2)}`;
34
+ const resolved = children(() => props.children);
35
+ createEffect(() => {
36
+ const nodes = resolved();
37
+ if (nodes && instance) {
38
+ instance.reset();
39
+ }
40
+ });
41
+ onMount(() => {
42
+ if (!container) {
43
+ return;
44
+ }
45
+ const realId = container.id;
46
+ const selector = `#${realId} ${local.selector ?? "> a"}`;
47
+ const nodes = document.querySelectorAll(selector);
48
+ if (nodes.length > 0) {
49
+ instance?.destroy();
50
+ instance = vistaView({
51
+ ...local.options,
52
+ elements: selector
53
+ });
54
+ local.componentRef?.({
55
+ vistaView: instance,
56
+ container
57
+ });
58
+ }
59
+ });
60
+ onCleanup(() => {
61
+ instance?.destroy();
62
+ local.componentRef?.(null);
63
+ instance = null;
64
+ });
65
+ return (() => {
66
+ var _el$ = _tmpl$();
67
+ use((el) => container = el, _el$);
68
+ spread(_el$, mergeProps(rest, {
69
+ "id": galleryId
70
+ }), false, true);
71
+ insert(_el$, () => local.children);
72
+ return _el$;
73
+ })();
74
+ }
75
+
76
+ export { VistaView, useVistaView };
@@ -0,0 +1,71 @@
1
+ // src/use-vistaview.ts
2
+ import { onMount, onCleanup } from "solid-js";
3
+ import { vistaView } from "vistaview";
4
+ function useVistaView(options) {
5
+ let instance = null;
6
+ onMount(() => {
7
+ instance = vistaView(options);
8
+ });
9
+ onCleanup(() => {
10
+ instance?.destroy();
11
+ instance = null;
12
+ });
13
+ return {
14
+ open: (i) => instance?.open(i),
15
+ close: () => instance?.close() ?? Promise.resolve(),
16
+ reset: () => instance?.reset(),
17
+ next: () => instance?.next(),
18
+ prev: () => instance?.prev(),
19
+ zoomIn: () => instance?.zoomIn(),
20
+ zoomOut: () => instance?.zoomOut(),
21
+ getCurrentIndex: () => instance?.getCurrentIndex() ?? -1,
22
+ view: (i) => instance?.view(i),
23
+ destroy: () => instance?.destroy()
24
+ };
25
+ }
26
+
27
+ // src/vistaview.tsx
28
+ import { onCleanup as onCleanup2, onMount as onMount2, splitProps } from "solid-js";
29
+ import { children, createEffect } from "solid-js";
30
+ import { vistaView as vistaView2 } from "vistaview";
31
+ function VistaView(props) {
32
+ let container;
33
+ let instance = null;
34
+ const [local, rest] = splitProps(props, ["selector", "options", "componentRef", "id", "children"]);
35
+ let galleryId = local.id || `vvw-gallery-${Math.random().toString(36).slice(2)}`;
36
+ const resolved = children(() => props.children);
37
+ createEffect(() => {
38
+ const nodes = resolved();
39
+ if (nodes && instance) {
40
+ instance.reset();
41
+ }
42
+ });
43
+ onMount2(() => {
44
+ if (!container) {
45
+ return;
46
+ }
47
+ const realId = container.id;
48
+ const selector = `#${realId} ${local.selector ?? "> a"}`;
49
+ const nodes = document.querySelectorAll(selector);
50
+ if (nodes.length > 0) {
51
+ instance?.destroy();
52
+ instance = vistaView2({
53
+ ...local.options,
54
+ elements: selector
55
+ });
56
+ local.componentRef?.({ vistaView: instance, container });
57
+ }
58
+ });
59
+ onCleanup2(() => {
60
+ instance?.destroy();
61
+ local.componentRef?.(null);
62
+ instance = null;
63
+ });
64
+ return <div ref={(el) => container = el} {...rest} id={galleryId}>
65
+ {local.children}
66
+ </div>;
67
+ }
68
+ export {
69
+ VistaView,
70
+ useVistaView
71
+ };
@@ -0,0 +1,65 @@
1
+ <script lang="ts">
2
+ import { onMount, onDestroy } from 'svelte';
3
+ import { vistaView } from 'vistaview';
4
+ import type { VistaOpt, VistaInterface } from 'vistaview';
5
+ import { tick } from 'svelte';
6
+
7
+ export let selector: string = '> a';
8
+ export let options: VistaOpt = {} as VistaOpt;
9
+ export let id: string = '';
10
+ export let vistaRef: ((obj: { vistaView: VistaInterface | null; container: HTMLElement | null } | null) => void) | undefined = undefined;
11
+
12
+ let container: HTMLDivElement | null = null;
13
+ let instance: VistaInterface | null = null;
14
+ const galleryId = id || `vvw-gallery-${Math.random().toString(36).slice(2)}`;
15
+
16
+ function destroyInstance() {
17
+ instance?.destroy();
18
+ instance = null;
19
+ vistaRef?.(null);
20
+ }
21
+
22
+ function initInstance() {
23
+ if (!container) return;
24
+ destroyInstance();
25
+ instance = vistaView({
26
+ ...options,
27
+ elements: `#${galleryId} ${selector}`,
28
+ });
29
+ vistaRef?.({ vistaView: instance, container });
30
+ }
31
+
32
+ // expose API via component instance
33
+ export function getApi() {
34
+ return { vistaView: instance, container };
35
+ }
36
+
37
+ // re-init when props change
38
+ $: selector, options, async () => {
39
+ // wait DOM update if necessary
40
+ await tick();
41
+ initInstance();
42
+ };
43
+
44
+ let observer: MutationObserver | null = null;
45
+ onMount(() => {
46
+ initInstance();
47
+ observer = new MutationObserver(() => {
48
+ instance?.reset();
49
+ });
50
+
51
+ observer.observe(container!, {
52
+ childList: true,
53
+ subtree: false,
54
+ });
55
+ });
56
+
57
+ onDestroy(() => {
58
+ observer?.disconnect();
59
+ destroyInstance();
60
+ });
61
+ </script>
62
+
63
+ <div id={galleryId} bind:this={container} {...$$restProps}>
64
+ <slot />
65
+ </div>