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,576 @@
1
+ import { DefaultOptions } from './defaults/options';
2
+ import { vistaViewComponent } from './components';
3
+ import { imageSetup } from './defaults/image-setup';
4
+ import { init } from './defaults/init';
5
+ import { open } from './defaults/open';
6
+ import { close } from './defaults/close';
7
+ import { transition } from './defaults/transition';
8
+ import { VistaImage } from './vista-image';
9
+ import { Throttle } from './throttle';
10
+ import { VistaState } from './vista-state';
11
+ import { VistaHiresTransition } from './vista-hires-transition';
12
+ import { parseElement } from './utils/parse-element';
13
+ import { VistaImageEvent } from './vista-image-event';
14
+ export const GlobalVistaState = {
15
+ somethingOpened: null,
16
+ };
17
+ export class VistaView {
18
+ options;
19
+ state = new VistaState();
20
+ imageContainer = null;
21
+ externalPointerListener = [];
22
+ elements;
23
+ eventHandlers = null;
24
+ imageSetupFunction = imageSetup;
25
+ initFunction = init;
26
+ openFunction = open;
27
+ closeFunction = close;
28
+ transitionFunction = transition;
29
+ throttle = new Throttle();
30
+ root = null;
31
+ onClickElements = (e) => {
32
+ e.preventDefault();
33
+ const list = this.qsOrigin(this.elements);
34
+ const index = Array.prototype.indexOf.call(list, e.currentTarget);
35
+ this.open(index);
36
+ };
37
+ defaultOnClickHandler = (e) => e.preventDefault();
38
+ constructor(elements, options = {}) {
39
+ this.elements = elements;
40
+ this.options = {
41
+ ...DefaultOptions,
42
+ ...options,
43
+ controls: {
44
+ ...DefaultOptions.controls,
45
+ ...options.controls,
46
+ },
47
+ };
48
+ // setup user defined functions
49
+ if (this.options.imageSetupFunction) {
50
+ this.imageSetupFunction = this.options.imageSetupFunction;
51
+ }
52
+ if (this.options.closeFunction) {
53
+ this.closeFunction = this.options.closeFunction;
54
+ }
55
+ if (this.options.initFunction) {
56
+ this.initFunction = this.options.initFunction;
57
+ }
58
+ if (this.options.transitionFunction) {
59
+ this.transitionFunction = this.options.transitionFunction;
60
+ }
61
+ // Register all extensions
62
+ this.options.extensions?.forEach((ext) => {
63
+ this.state.extensions.add(ext);
64
+ });
65
+ // detect reduced motion
66
+ this.state.isReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
67
+ // set click listeners on elements
68
+ this.reset();
69
+ // run init function
70
+ this.initFunction(this);
71
+ }
72
+ reset() {
73
+ if (typeof this.elements === 'string') {
74
+ const list = this.qsOrigin(this.elements);
75
+ this.state.elmLength = list.length;
76
+ list.forEach((el) => {
77
+ const e = el;
78
+ e.removeEventListener('click', this.defaultOnClickHandler);
79
+ e.removeEventListener('pointerup', this.onClickElements);
80
+ e.addEventListener('click', this.defaultOnClickHandler);
81
+ e.addEventListener('pointerup', this.onClickElements);
82
+ });
83
+ }
84
+ else {
85
+ this.state.elmLength = this.elements.length;
86
+ }
87
+ }
88
+ // ============================================================================
89
+ // HELPER METHODS
90
+ // ============================================================================
91
+ qs(selector) {
92
+ return this.root ? this.root.querySelector(selector) : null;
93
+ }
94
+ qsOrigin(selector) {
95
+ return document.querySelectorAll(selector);
96
+ }
97
+ registerPointerListener(listener) {
98
+ this.externalPointerListener.push(listener);
99
+ }
100
+ getChildElements(positionalIndex, index) {
101
+ const images = [];
102
+ const htmls = [];
103
+ const elements = typeof this.elements === 'string'
104
+ ? this.qsOrigin(this.elements)
105
+ : this.elements;
106
+ for (let i = -positionalIndex; i <= positionalIndex; i++) {
107
+ const elmIndex = (index + i + elements.length) % elements.length;
108
+ const elm = elements[elmIndex];
109
+ const parsedElm = elm instanceof HTMLElement
110
+ ? parseElement(elm)
111
+ : { config: elm, origin: undefined, parsedSrcSet: undefined };
112
+ const params = {
113
+ elm: parsedElm,
114
+ pos: i,
115
+ index: elmIndex,
116
+ vistaView: this,
117
+ maxZoomLevel: this.options.maxZoomLevel,
118
+ transitionShouldWait: () => this.isRapidSwap,
119
+ onScale: ({ vistaImage, isMin, isMax, }) => {
120
+ if (vistaImage.index === this.state.currentIndex) {
121
+ this.state.zoomedIn = !isMin;
122
+ if (isMin) {
123
+ this.qs('.vvw-zoom-out')?.setAttribute('disabled', 'true');
124
+ }
125
+ else {
126
+ this.qs('.vvw-zoom-out')?.removeAttribute('disabled');
127
+ }
128
+ if (isMax) {
129
+ this.qs('.vvw-zoom-in')?.setAttribute('disabled', 'true');
130
+ }
131
+ else {
132
+ this.qs('.vvw-zoom-in')?.removeAttribute('disabled');
133
+ }
134
+ }
135
+ },
136
+ };
137
+ let vistaBox = null;
138
+ this.state.extensions.forEach((ext) => {
139
+ if (!vistaBox && ext.onInitializeImage) {
140
+ vistaBox = ext.onInitializeImage(params);
141
+ }
142
+ });
143
+ const vistaImg = vistaBox ?? new VistaImage(params);
144
+ const div = document.createElement('div');
145
+ div.className = 'vvw-item';
146
+ div.dataset.vvwPos = `${i}`;
147
+ div.dataset.vvwIdx = `${elmIndex}`;
148
+ if (vistaImg.thumb)
149
+ div.appendChild(vistaImg.thumb);
150
+ div.appendChild(vistaImg.element);
151
+ images.push(vistaImg);
152
+ htmls.push(div);
153
+ }
154
+ return {
155
+ htmls,
156
+ images,
157
+ };
158
+ }
159
+ // ============================================================================
160
+ // SWAP LOGIC - handles image transitions between prev/next
161
+ // ============================================================================
162
+ lastSwapTime = 0;
163
+ isRapidSwap = false;
164
+ isRapidSwapRelease = null;
165
+ transitionCleanup = null;
166
+ async swap(beforeIndex, via) {
167
+ // reactivate UI elements
168
+ // before anything
169
+ this.reactivateUi();
170
+ const allImage = this.options.preloads || 0;
171
+ const index = this.state.currentIndex;
172
+ const { htmls, images } = this.getChildElements(allImage, index);
173
+ const imgc = this.imageContainer;
174
+ const c = this.state.children;
175
+ const vistaData = {
176
+ htmlElements: { from: c.htmls, to: htmls },
177
+ images: { from: c.images, to: images },
178
+ index: { from: beforeIndex, to: this.state.currentIndex },
179
+ via: via || { next: false, prev: false },
180
+ };
181
+ this.imageSetupFunction(vistaData, this);
182
+ // RESET ZOOM STATE
183
+ this.state.zoomedIn = false;
184
+ this.qs('.vvw-zoom-out')?.setAttribute('disabled', 'true');
185
+ this.qs('.vvw-zoom-in')?.removeAttribute('disabled');
186
+ // Check if this is a rapid swap (user navigating quickly)
187
+ const now = performance.now();
188
+ const rapid = now - this.lastSwapTime < this.options.rapidLimit;
189
+ this.isRapidSwap = rapid;
190
+ // can only setDescription after state.children is updated
191
+ // so we cache current images first
192
+ const { images: currentImages } = this.state.children;
193
+ this.state.children = { htmls, images };
194
+ this.displayCurrentInfo();
195
+ if (rapid) {
196
+ // Cancel pending image loads from previous swap
197
+ currentImages.forEach((img) => {
198
+ img.cancelPendingLoad();
199
+ img.destroy();
200
+ });
201
+ }
202
+ else {
203
+ // NORMAL SWAP: Run transition animation
204
+ const abortControllerSignal = this.state.abortController.signal;
205
+ const res = this.transitionFunction(vistaData, abortControllerSignal, this);
206
+ if (res) {
207
+ this.transitionCleanup = res.cleanup;
208
+ await res.transitionEnded;
209
+ }
210
+ this.lastSwapTime = performance.now();
211
+ // Cancel pending image loads from previous swap
212
+ currentImages.forEach((img) => {
213
+ img.cancelPendingLoad();
214
+ });
215
+ // Preserve animation state from old center image to avoid jarring resets
216
+ // -----
217
+ const img0 = currentImages.find((img) => img.index === index);
218
+ const transitionState = img0 ? VistaHiresTransition.stop(img0) : undefined;
219
+ const nextImg0 = images.find((img) => img.index === index);
220
+ if (nextImg0 && img0) {
221
+ nextImg0.cloneStyleFrom(img0, transitionState);
222
+ }
223
+ currentImages.forEach((img) => {
224
+ img.destroy();
225
+ });
226
+ }
227
+ // swap elements
228
+ imgc.innerHTML = '';
229
+ if (this.transitionCleanup) {
230
+ this.transitionCleanup();
231
+ // this.transitionCleanup = null;
232
+ }
233
+ htmls.forEach((vistaImg) => {
234
+ imgc.appendChild(vistaImg);
235
+ });
236
+ images.forEach((img) => {
237
+ img.init();
238
+ });
239
+ if (rapid) {
240
+ // Set cooldown period before allowing normal transitions again
241
+ if (this.isRapidSwapRelease)
242
+ clearTimeout(this.isRapidSwapRelease);
243
+ this.isRapidSwapRelease = setTimeout(() => {
244
+ this.isRapidSwap = false;
245
+ }, 333);
246
+ }
247
+ else {
248
+ this.isRapidSwap = false;
249
+ }
250
+ this.options.onImageView && this.options.onImageView(vistaData, this);
251
+ this.state.extensions.forEach((ext) => {
252
+ ext.onImageView && ext.onImageView(vistaData, this);
253
+ });
254
+ }
255
+ // ============================================================================
256
+ // UI UPDATES
257
+ // ============================================================================
258
+ displayCurrentInfo() {
259
+ const cid = this.state.currentIndex;
260
+ // set opacity in element
261
+ if (typeof this.elements === 'string') {
262
+ this.qsOrigin(this.elements).forEach((el, idx) => {
263
+ el.style.opacity = '';
264
+ if (idx === cid) {
265
+ el.style.opacity = '0';
266
+ }
267
+ });
268
+ }
269
+ const indexDisplay = this.qs('.vvw-index');
270
+ const indexText = `${cid + 1}`;
271
+ const indexTotal = `${this.state.elmLength}`;
272
+ if (indexDisplay) {
273
+ indexDisplay.textContent = `${indexText} / ${indexTotal}`;
274
+ }
275
+ const description = this.qs('.vvw-desc');
276
+ if (description) {
277
+ const currentImg = this.state.children.images.find((img) => img.index === cid);
278
+ const descText = currentImg?.config.alt || '';
279
+ if (descText) {
280
+ description.textContent = descText;
281
+ description.setAttribute('aria-label', `Image ${indexText} of ${indexTotal}: ${descText}`);
282
+ description.style.opacity = '';
283
+ }
284
+ else {
285
+ description.textContent = '';
286
+ description.setAttribute('aria-label', `Image ${indexText} of ${indexTotal}`);
287
+ description.style.opacity = '0';
288
+ }
289
+ }
290
+ }
291
+ // ============================================================================
292
+ // ACTIVATE/DEACTIVATE UI ELEMENTS
293
+ // ============================================================================
294
+ tempDeactivatedUi = [];
295
+ tempDeactivationRequestBy = null;
296
+ deactivateUi(names, requestBy) {
297
+ names.forEach((name) => {
298
+ if (name === 'zoomIn') {
299
+ this.qs('.vvw-zoom-in')?.setAttribute('disabled', 'true');
300
+ }
301
+ else if (name === 'zoomOut') {
302
+ this.qs('.vvw-zoom-out')?.setAttribute('disabled', 'true');
303
+ }
304
+ this.tempDeactivatedUi.push(name);
305
+ });
306
+ this.tempDeactivationRequestBy = requestBy || null;
307
+ this.state.extensions.forEach((ext) => {
308
+ ext.onDeactivateUi && ext.onDeactivateUi(names, this.tempDeactivationRequestBy, this);
309
+ });
310
+ }
311
+ reactivateUi() {
312
+ this.tempDeactivatedUi.forEach((name) => {
313
+ if (name === 'zoomIn') {
314
+ this.qs('.vvw-zoom-in')?.removeAttribute('disabled');
315
+ }
316
+ else if (name === 'zoomOut') {
317
+ this.qs('.vvw-zoom-out')?.removeAttribute('disabled');
318
+ }
319
+ });
320
+ this.state.extensions.forEach((ext) => {
321
+ ext.onReactivateUi &&
322
+ ext.onReactivateUi(this.tempDeactivatedUi, this.tempDeactivationRequestBy, this);
323
+ });
324
+ this.tempDeactivatedUi = [];
325
+ this.tempDeactivationRequestBy = null;
326
+ }
327
+ // ============================================================================
328
+ // LIFECYCLE METHODS - open, close, destroy
329
+ // ============================================================================
330
+ // OPEN
331
+ open(startIndex = 0) {
332
+ if (GlobalVistaState.somethingOpened) {
333
+ console.warn('Another VistaView instance is already opened. Close it first before opening a new one.');
334
+ return;
335
+ }
336
+ GlobalVistaState.somethingOpened = this;
337
+ // reset elm calculation
338
+ this.reset();
339
+ if (startIndex < 0 || startIndex >= this.state.elmLength) {
340
+ // get the looped start index
341
+ startIndex =
342
+ ((startIndex % this.state.elmLength) + this.state.elmLength) % this.state.elmLength;
343
+ }
344
+ this.state.currentIndex = startIndex;
345
+ // Prevent body scrolling
346
+ document.body.style.overflow = 'hidden';
347
+ // setting up root component
348
+ const root = vistaViewComponent({
349
+ controls: this.options.controls,
350
+ extensions: this.state.extensions,
351
+ });
352
+ document.body.append(root);
353
+ this.root = document.body.querySelector('#vvw-root');
354
+ if (!this.root) {
355
+ throw new Error('Failed to setup VistaView root element.');
356
+ }
357
+ this.imageContainer = this.qs('.vvw-image-container');
358
+ // add options
359
+ if (this.options.animationDurationBase) {
360
+ this.root.style.setProperty('--vvw-anim-dur', `${this.options.animationDurationBase}`);
361
+ }
362
+ if (this.options.initialZIndex !== undefined) {
363
+ this.root.style.setProperty('--vvw-init-z', `${this.options.initialZIndex ?? 0}`);
364
+ }
365
+ if (this.options.arrowOnSmallScreens) {
366
+ this.root.classList.add('vvw-arrow-sm');
367
+ }
368
+ // setting up image, with preloads
369
+ const allImage = this.options.preloads || 0;
370
+ const index = startIndex;
371
+ const { images, htmls } = this.getChildElements(allImage, index);
372
+ const vistaData = {
373
+ htmlElements: { from: null, to: htmls },
374
+ images: { from: null, to: images },
375
+ index: { from: null, to: this.state.currentIndex },
376
+ via: { next: false, prev: false },
377
+ };
378
+ this.imageSetupFunction(vistaData, this);
379
+ this.state.children = { htmls, images };
380
+ htmls.forEach((vistaImg) => {
381
+ this.imageContainer.appendChild(vistaImg);
382
+ });
383
+ images.forEach((img) => {
384
+ img.init();
385
+ });
386
+ // set action buttons
387
+ // set buttons' event listeners
388
+ this.qs('.vvw-close')?.addEventListener('click', () => this.close());
389
+ this.qs('.vvw-zoom-in')?.addEventListener('click', () => this.zoomIn());
390
+ this.qs('.vvw-zoom-out')?.addEventListener('click', () => this.zoomOut());
391
+ this.qs('.vvw-prev>button')?.addEventListener('click', () => this.prev());
392
+ this.qs('.vvw-next>button')?.addEventListener('click', () => this.next());
393
+ if (this.state.elmLength < 2) {
394
+ this.qs('.vvw-prev')?.classList.add('vvw--hidden');
395
+ this.qs('.vvw-next')?.classList.add('vvw--hidden');
396
+ }
397
+ // call open function, before transition
398
+ this.openFunction(this);
399
+ // listen to events
400
+ this.eventHandlers = new VistaImageEvent(this);
401
+ this.externalPointerListener.forEach((listener) => {
402
+ this.eventHandlers.registerPointerListener(listener);
403
+ });
404
+ this.eventHandlers.start(this.imageContainer);
405
+ // when using single raf, sometimes the thumbnmail jumps
406
+ requestAnimationFrame(() => {
407
+ requestAnimationFrame(() => {
408
+ this.root?.addEventListener('transitionend', () => {
409
+ this.root?.classList.add('vvw--settled');
410
+ }, { once: true });
411
+ this.root.classList.add('vvw--active');
412
+ this.displayCurrentInfo();
413
+ this.options.onOpen && this.options.onOpen(this);
414
+ this.options.onImageView && this.options.onImageView(vistaData, this);
415
+ this.state.extensions.forEach((ext) => {
416
+ ext.onOpen && ext.onOpen(this);
417
+ ext.onImageView && ext.onImageView(vistaData, this);
418
+ });
419
+ });
420
+ });
421
+ }
422
+ /// CLOSE
423
+ async close(animate = true) {
424
+ if (GlobalVistaState.somethingOpened !== this) {
425
+ return;
426
+ }
427
+ if (!this.root) {
428
+ return;
429
+ }
430
+ this.eventHandlers.stop();
431
+ this.eventHandlers = null;
432
+ this.state.children.images.forEach((img) => {
433
+ img.prepareClose();
434
+ });
435
+ if (animate) {
436
+ await new Promise((resolve) => {
437
+ const target = 3;
438
+ let current = 0;
439
+ this.root.addEventListener('transitionend', (e) => {
440
+ if (e.target !== this.root)
441
+ return;
442
+ current++;
443
+ if (current === 2) {
444
+ if (typeof this.elements === 'string') {
445
+ this.state.children.images.forEach((img) => {
446
+ img.destroy();
447
+ });
448
+ this.qsOrigin(this.elements).forEach((el) => {
449
+ el.style.opacity = '';
450
+ });
451
+ }
452
+ }
453
+ if (current === target) {
454
+ resolve(null);
455
+ }
456
+ });
457
+ this.root.classList.add('vvw--closing');
458
+ });
459
+ }
460
+ else {
461
+ if (typeof this.elements === 'string') {
462
+ this.state.children.images.forEach((img) => {
463
+ img.destroy();
464
+ });
465
+ this.qsOrigin(this.elements).forEach((el) => {
466
+ el.style.opacity = '';
467
+ });
468
+ }
469
+ }
470
+ // this.eventHandlers.stop();
471
+ this.root.remove();
472
+ this.root = null;
473
+ this.imageContainer = null;
474
+ this.state.children = { htmls: [], images: [] };
475
+ this.state.currentIndex = -1;
476
+ //
477
+ this.state.children.images.forEach((img) => {
478
+ img.destroy();
479
+ });
480
+ // Restore body scrolling
481
+ document.body.style.overflow = '';
482
+ GlobalVistaState.somethingOpened = null;
483
+ this.closeFunction(this);
484
+ this.options.onClose && this.options.onClose(this);
485
+ this.state.extensions.forEach((ext) => {
486
+ ext.onClose && ext.onClose(this);
487
+ });
488
+ }
489
+ // DESTROY
490
+ destroy() {
491
+ // close without animation
492
+ this.close(false);
493
+ this.externalPointerListener = [];
494
+ // remove click listeners on elements
495
+ if (typeof this.elements === 'string') {
496
+ this.qsOrigin(this.elements).forEach((el) => {
497
+ el.removeAttribute('data-vista-idx');
498
+ el.removeEventListener('click', this.defaultOnClickHandler);
499
+ el.removeEventListener('pointerup', this.onClickElements);
500
+ });
501
+ }
502
+ }
503
+ // ============================================================================
504
+ // NAVIGATION METHODS - next, prev, view
505
+ // ============================================================================
506
+ next() {
507
+ if (GlobalVistaState.somethingOpened !== this) {
508
+ console.warn('This VistaView instance is not opened.');
509
+ return;
510
+ }
511
+ const index = (this.state.currentIndex + 1) % this.state.elmLength;
512
+ this.view(index, { next: true, prev: false });
513
+ }
514
+ prev() {
515
+ if (GlobalVistaState.somethingOpened !== this) {
516
+ console.warn('This VistaView instance is not opened.');
517
+ return;
518
+ }
519
+ const index = (this.state.currentIndex - 1 + this.state.elmLength) % this.state.elmLength;
520
+ this.view(index, { next: false, prev: true });
521
+ }
522
+ view(index, via) {
523
+ if (GlobalVistaState.somethingOpened !== this) {
524
+ console.warn('This VistaView instance is not opened.');
525
+ return;
526
+ }
527
+ if (this.state.elmLength < 2) {
528
+ return;
529
+ }
530
+ if (index < 0 || index >= this.state.elmLength) {
531
+ // get the looped index
532
+ index = ((index % this.state.elmLength) + this.state.elmLength) % this.state.elmLength;
533
+ }
534
+ const before = this.state.currentIndex;
535
+ this.state.currentIndex = index;
536
+ // abort previous transition
537
+ const abortController = this.state.abortController;
538
+ abortController?.abort();
539
+ // set abort controller
540
+ this.state.abortController = new AbortController();
541
+ this.swap(before, via);
542
+ }
543
+ // ============================================================================
544
+ // ZOOM CONTROLS
545
+ // ============================================================================
546
+ isZoomedIn = false;
547
+ zoomIn() {
548
+ if (GlobalVistaState.somethingOpened !== this) {
549
+ console.warn('This VistaView instance is not opened.');
550
+ return;
551
+ }
552
+ if (this.tempDeactivatedUi.includes('zoomIn')) {
553
+ return;
554
+ }
555
+ this.throttle.fio(() => {
556
+ const image = this.state.children.images.find((img) => img.pos === 0);
557
+ image?.animateZoom(1.68);
558
+ }, 'zoom', 222);
559
+ }
560
+ zoomOut() {
561
+ if (GlobalVistaState.somethingOpened !== this) {
562
+ console.warn('This VistaView instance is not opened.');
563
+ return;
564
+ }
565
+ if (this.tempDeactivatedUi.includes('zoomOut')) {
566
+ return;
567
+ }
568
+ this.throttle.fio(() => {
569
+ const image = this.state.children.images.find((img) => img.pos === 0);
570
+ image?.animateZoom(0.68);
571
+ }, 'zoom', 222);
572
+ }
573
+ getCurrentIndex() {
574
+ return this.state.currentIndex;
575
+ }
576
+ }
@@ -0,0 +1 @@
1
+ :root{--vvw-bg-color:#000;--vvw-text-color:#fff;--vvw-bg-blur:10px;--vvw-bg-opacity:.8;--vvw-anim-dur:333;--vvw-init-z:1;--vvw-dest-z:2147480000;--vvw-ui-outline-color:hsl(from var(--vvw-bg-color)h s calc(l + 30));--vvw-ui-bg-color:var(--vvw-bg-color);--vvw-ui-text-color:var(--vvw-text-color);--vvw-ui-hover-bg-color:hsl(from var(--vvw-bg-color)h s calc(l + 20));--vvw-ui-active-bg-color:hsl(from var(--vvw-bg-color)h s calc(l + 40));--vvw-ui-border-radius:0px;--vvw-ui-border-width:1px}@keyframes vvw-pulse{0%{opacity:1;border-radius:var(--vvw-init-radius);scale:1}50%{opacity:.7;border-radius:var(--vvw-pulse-radius);scale:.99}to{opacity:1;border-radius:var(--vvw-init-radius);scale:1}}@keyframes vvw-simple-pulse{0%{opacity:1}50%{opacity:.8}to{opacity:1}}@keyframes vvw-gradient{0%{background-position:0%}50%{background-position:100%}to{background-position:0%}}.vvw-root{width:100vw;width:100dvw;height:100vh;height:100dvh;z-index:var(--vvw-init-z);opacity:0;isolation:isolate;touch-action:none;position:fixed;top:0;left:0;overflow:hidden;transform:none}.vvw-container{width:100%;height:100%;position:relative;overflow:hidden}.vvw-bg{z-index:0;background-color:rgb(from var(--vvw-bg-color)r g b/var(--vvw-bg-opacity));width:100%;height:100%;-webkit-backdrop-filter:blur(var(--vvw-bg-blur));backdrop-filter:blur(var(--vvw-bg-blur));opacity:0;transition:opacity calc(var(--vvw-anim-dur)*1ms)calc(var(--vvw-anim-dur)*1ms)ease;position:absolute;top:0;left:0}.vvw-image-container{isolation:isolate;height:100%;position:relative;overflow:hidden}.vvw-item{cursor:grab;width:100%;height:100%;position:relative;overflow:hidden}.vvw-item:active{cursor:grabbing}.vvw-item img,.vvw-item iframe.vvw-img-hi,.vvw-item div.vvw-img-hi{display:block;position:absolute;top:50%;left:50%;translate:-50% -50%}.vvw-item .vvw-img-err{color:#fff;text-align:center;z-index:2;background-color:red;margin:0;padding:8px 12px;font-size:14px;display:none;position:absolute;top:50%;left:50%;translate:-50% -50%}.vvw-item .vvw-img-lo{--vvw-init-radius:0px;--vvw-pulse-radius:0px;--vvw-init-x:0px;--vvw-init-y:0px;--vvw-current-x:0px;--vvw-current-y:0px;z-index:0;opacity:1;border-radius:var(--vvw-init-radius);transition:transform calc(var(--vvw-anim-dur)*1ms)ease;transform:translate3d(var(--vvw-current-x),var(--vvw-current-y),0);background:linear-gradient(45deg,#1a1a1a,#333,#1a1a1a,#555) 0 0/400% 400%;outline:1px solid #fff3;animation:3s ease-in-out infinite vvw-gradient;overflow:hidden;max-width:none!important;max-height:none!important}.vvw-item .vvw-img-hi{--vvw-init-radius:0px;--vvw-init-w:0px;--vvw-init-h:0px;border-radius:var(--vvw-init-radius);z-index:1;object-fit:cover;opacity:0;overflow:hidden;max-width:none!important;max-height:none!important}.vvw-top-bar,.vvw-bottom-bar{z-index:6;pointer-events:none;justify-content:space-between;align-items:stretch;gap:1rem;width:100vw;display:flex;position:absolute;top:0;left:0}:is(.vvw-top-bar,.vvw-bottom-bar)>div{align-items:stretch;display:flex}:is(.vvw-top-bar,.vvw-bottom-bar)>div:nth-child(2){flex:auto}.vvw-bottom-bar{top:unset;bottom:0}.vvw-ui{opacity:0;transition:opacity calc(var(--vvw-anim-dur)*1ms)ease calc(var(--vvw-anim-dur)*2ms)ease;outline:var(--vvw-ui-border-width)solid var(--vvw-ui-outline-color);background-color:var(--vvw-ui-bg-color);color:var(--vvw-ui-text-color);pointer-events:auto}.vvw-ui.vvw-index{padding:8px 13px;font-size:16px}.vvw-ui.vvw-desc{text-overflow:ellipsis;white-space:nowrap;max-width:100%;padding:8px 15px;font-size:14px;overflow:hidden}.vvw-ui>button{color:inherit;font:inherit;cursor:pointer;box-sizing:border-box;background:0 0;border:0;border-radius:0;outline:none;justify-content:center;align-self:stretch;align-items:center;height:100%;margin:0;padding:8px 12px;display:flex}.vvw-ui>button:disabled{color:rgb(from var(--vvw-ui-text-color)r g b/.5);cursor:not-allowed}.vvw-ui>button:hover{background-color:var(--vvw-ui-hover-bg-color)}.vvw-ui>button:active{background-color:var(--vvw-ui-active-bg-color)}.vvw-ui>button svg{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:24px;height:24px}.vvw-ui.vvw-prev button,.vvw-ui.vvw-next button{padding:1rem .5rem}.vvw-ui.vvw-prev{z-index:2;border-top-right-radius:var(--vvw-ui-border-radius);border-bottom-right-radius:var(--vvw-ui-border-radius);justify-content:center;align-items:center;display:none;position:absolute;top:50%;left:0;translate:0 -50%}.vvw-ui.vvw-next{z-index:2;border-top-left-radius:var(--vvw-ui-border-radius);border-bottom-left-radius:var(--vvw-ui-border-radius);justify-content:center;align-items:center;display:none;position:absolute;top:50%;right:0;translate:0 -50%}@media (min-width:768px){.vvw-ui.vvw-prev,.vvw-ui.vvw-next{display:flex}}.vvw-bottom-bar>div:first-child>div:last-child,.vvw-bottom-bar>div:nth-child(2)>div:last-child{border-top-right-radius:var(--vvw-ui-border-radius);overflow:hidden}.vvw-bottom-bar>div:nth-child(2)>div:first-child,.vvw-bottom-bar>div:last-child>div:first-child{border-top-left-radius:var(--vvw-ui-border-radius);overflow:hidden}.vvw-top-bar>div:first-child>div:last-child,.vvw-top-bar>div:nth-child(2)>div:last-child{border-bottom-right-radius:var(--vvw-ui-border-radius);overflow:hidden}.vvw-top-bar>div:nth-child(2)>div:first-child,.vvw-top-bar>div:last-child>div:first-child{border-bottom-left-radius:var(--vvw-ui-border-radius);overflow:hidden}.vvw-arrow-sm .vvw-ui.vvw-prev,.vvw-arrow-sm .vvw-ui.vvw-next{display:flex}.vvw-root.vvw--active{opacity:1;transition:z-index 0s calc(var(--vvw-anim-dur)*1ms)ease;z-index:var(--vvw-dest-z)}.vvw-root.vvw--active .vvw-bg{opacity:1}.vvw-root.vvw--active .vvw-img-lo{--vvw-current-x:0px!important;--vvw-current-y:0px!important}.vvw-root.vvw--active .vvw-ui{opacity:1}.vvw-root.vvw--settled .vvw-img-lo{animation:1s infinite vvw-pulse,3s ease-in-out infinite vvw-gradient;animation-delay:calc(var(--vvw-anim-dur)*2ms)}.vvw-root.vvw--settled .vvw-img-lo:has(+.vvw--loaded){opacity:0;animation:none}.vvw-root.vvw--settled .vvw-img-err:has(~img.vvw--loaderror){display:block}.vvw-root.vvw--settled .vvw-img-hi.vvw--loaded{transition:border-radius calc(var(--vvw-anim-dur)*1ms)ease;opacity:1;border-radius:0}.vvw-root.vvw--closing{transition:opacity calc(var(--vvw-anim-dur)*1ms)calc(var(--vvw-anim-dur)*2ms)ease,transform 0s calc(var(--vvw-anim-dur)*2ms)ease,z-index 0s calc(var(--vvw-anim-dur)*1ms)ease;z-index:var(--vvw-init-z);transform:scale(1);opacity:0!important}.vvw-root.vvw--closing .vvw-img-err:has(~img.vvw--loaderror){display:none}.vvw-root.vvw--closing .vvw-img-hi.vvw--loaded,.vvw-root.vvw--closing .vvw-img-hi.vvw--ready{transition:width calc(var(--vvw-anim-dur)*1ms)ease,height calc(var(--vvw-anim-dur)*1ms)ease,border-radius calc(var(--vvw-anim-dur)*1ms)ease,top calc(var(--vvw-anim-dur)*1ms)ease,left calc(var(--vvw-anim-dur)*1ms)ease,translate calc(var(--vvw-anim-dur)*1ms)ease,opacity 0s calc(var(--vvw-anim-dur)*1ms)ease;opacity:0!important;width:var(--vvw-init-w)!important;height:var(--vvw-init-h)!important;border-radius:var(--vvw-init-radius)!important;top:50%!important;left:50%!important;translate:-50% -50%!important}.vvw-root.vvw--closing .vvw-img-lo{transition:opacity 0s calc(var(--vvw-anim-dur)*1ms)ease,transform calc(var(--vvw-anim-dur)*1ms)calc(var(--vvw-anim-dur)*1ms)ease;opacity:1!important;--vvw-current-x:var(--vvw-init-x)!important;--vvw-current-y:var(--vvw-init-y)!important}.vvw-root.vvw--closing .vvw-ui{transition:opacity calc(var(--vvw-anim-dur)*1ms)ease;opacity:0}.vvw-root.vvw--closing .vvw-bg{transition:opacity calc(var(--vvw-anim-dur)*1ms)calc(var(--vvw-anim-dur)*1ms)ease;opacity:0}.vvw--hidden{display:none!important}.vvw--pulsing{animation:1s ease-in-out infinite vvw-simple-pulse}
@@ -0,0 +1 @@
1
+ .vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .333s,padding-right .333s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .333s .111s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)}:root{--vvw-bg-color:#1a0f00;--vvw-text-color:#fff8dc;--vvw-ui-outline-color:#8b4513;--vvw-ui-bg-color:#d2691e;--vvw-ui-text-color:#fff8dc;--vvw-ui-hover-bg-color:#ff8c42;--vvw-ui-active-bg-color:#ffa559;--vvw-ui-border-radius:6px}
@@ -0,0 +1 @@
1
+ .vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .4s ease-in-out,padding-right .4s ease-in-out}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .4s ease-in-out .12s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)}:root{--vvw-bg-color:#fff0faf2;--vvw-text-color:#c2185b;--vvw-ui-outline-color:#ffb3d9;--vvw-ui-bg-color:#ffe0f0;--vvw-ui-text-color:#c2185b;--vvw-ui-hover-bg-color:#ffc9e5;--vvw-ui-active-bg-color:#ffb3da;--vvw-ui-border-radius:18px}
@@ -0,0 +1 @@
1
+ .vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .333s,padding-right .333s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .333s .111s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)}:root{--vvw-ui-outline-color:#333;--vvw-ui-bg-color:#222;--vvw-ui-text-color:#eee;--vvw-ui-hover-bg-color:#333;--vvw-ui-active-bg-color:#444;--vvw-ui-border-radius:5px}
@@ -0,0 +1 @@
1
+ .vvw-ui{box-shadow:0 0 8px #ff572266}.vvw-ui>button{box-shadow:0 0 8px #ff572266}.vvw-ui>button svg{filter:drop-shadow(0 0 2px #ff5722)}.vvw-ui>button:hover,.vvw-ui>button:active{box-shadow:0 0 12px #ff572299}.vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .333s,padding-right .333s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .333s .111s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)}:root{--vvw-bg-color:#0d0300;--vvw-text-color:#ffccbc;--vvw-ui-outline-color:#d84315;--vvw-ui-bg-color:#1a0a00;--vvw-ui-text-color:#ffccbc;--vvw-ui-hover-bg-color:#2d1400;--vvw-ui-active-bg-color:#401f00;--vvw-ui-border-radius:6px}
@@ -0,0 +1 @@
1
+ .vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .333s,padding-right .333s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .333s .111s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)}:root{--vvw-bg-color:#0d1a0d;--vvw-text-color:#d4e8d4;--vvw-ui-outline-color:#3d5a3d;--vvw-ui-bg-color:#4a6741;--vvw-ui-text-color:#d4e8d4;--vvw-ui-hover-bg-color:#5a7a52;--vvw-ui-active-bg-color:#6a8d63;--vvw-ui-border-radius:7px}
@@ -0,0 +1 @@
1
+ .vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .333s,padding-right .333s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .333s .111s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)}:root{--vvw-bg-color:#001a14;--vvw-text-color:#e8f5f1;--vvw-ui-outline-color:#0a5f4e;--vvw-ui-bg-color:#0d7a64;--vvw-ui-text-color:#e8f5f1;--vvw-ui-hover-bg-color:#0f9677;--vvw-ui-active-bg-color:#11b389;--vvw-ui-border-radius:8px}
@@ -0,0 +1 @@
1
+ .vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .333s,padding-right .333s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .333s .111s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)}:root{--vvw-bg-color:#e1f5fe;--vvw-text-color:#01579b;--vvw-ui-outline-color:#4db8ff;--vvw-ui-bg-color:#b3e5fc;--vvw-ui-text-color:#01579b;--vvw-ui-hover-bg-color:#81d4fa;--vvw-ui-active-bg-color:#4fc3f7;--vvw-ui-border-radius:2px}
@@ -0,0 +1 @@
1
+ .vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .4s ease-out,padding-right .4s ease-out}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .4s ease-out .1s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)}:root{--vvw-bg-color:#1a0d2e;--vvw-text-color:#f4f0ff;--vvw-ui-outline-color:#6b5b95;--vvw-ui-bg-color:#8e7cc3;--vvw-ui-text-color:#f4f0ff;--vvw-ui-hover-bg-color:#a599d6;--vvw-ui-active-bg-color:#bcb3e5;--vvw-ui-border-radius:10px}
@@ -0,0 +1 @@
1
+ .vvw-ui>button:hover,.vvw-ui>button:active{color:gold}.vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .333s,padding-right .333s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .333s .111s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)}:root{--vvw-bg-color:#000;--vvw-text-color:khaki;--vvw-ui-outline-color:#d4af37;--vvw-ui-bg-color:#1a1a1a;--vvw-ui-text-color:khaki;--vvw-ui-hover-bg-color:#2a2a2a;--vvw-ui-active-bg-color:#3a3a3a;--vvw-ui-border-radius:4px}
@@ -0,0 +1 @@
1
+ .vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .5s cubic-bezier(.4,0,.2,1),padding-right .5s cubic-bezier(.4,0,.2,1)}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .5s cubic-bezier(.4,0,.2,1) .15s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)}:root{--vvw-bg-color:#001a2e;--vvw-text-color:#a8e6ff;--vvw-ui-outline-color:#0a3d62;--vvw-ui-bg-color:#1e5f8c;--vvw-ui-text-color:#a8e6ff;--vvw-ui-hover-bg-color:#2980b9;--vvw-ui-active-bg-color:#3498db;--vvw-ui-border-radius:15px}
@@ -0,0 +1 @@
1
+ .vvw-ui>button:hover,.vvw-ui>button:active{color:#80cbc4}.vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .333s,padding-right .333s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .333s .111s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)}:root{--vvw-bg-color:#1a0f0a;--vvw-text-color:#b2dfdb;--vvw-ui-outline-color:#3e2723;--vvw-ui-bg-color:#5d4037;--vvw-ui-text-color:#b2dfdb;--vvw-ui-hover-bg-color:#6d4c41;--vvw-ui-active-bg-color:#7d584b;--vvw-ui-border-radius:10px}
@@ -0,0 +1 @@
1
+ .vvw-ui{box-shadow:0 0 10px #ff00ff80}.vvw-ui>button{box-shadow:0 0 10px #ff00ff80}.vvw-ui>button svg{filter:drop-shadow(0 0 3px #0ff)}.vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .25s,padding-right .25s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .25s 80ms}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)}:root{--vvw-bg-color:#0a0014;--vvw-text-color:#0ff;--vvw-ui-outline-color:#f0f;--vvw-ui-bg-color:#1a0033;--vvw-ui-text-color:#0ff;--vvw-ui-hover-bg-color:#5600a1;--vvw-ui-active-bg-color:#7a00d4;--vvw-ui-border-radius:3px}
@@ -0,0 +1 @@
1
+ .vvw-ui{box-shadow:0 2px 4px #0000001a}.vvw-ui>button{box-shadow:0 2px 4px #0000001a}.vvw-ui>button:hover,.vvw-ui>button:active{box-shadow:0 3px 6px #00000026}.vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .333s,padding-right .333s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .333s .111s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)}:root{--vvw-bg-color:#fffffff2;--vvw-text-color:#424242;--vvw-ui-outline-color:#e0e0e0;--vvw-ui-bg-color:#fff;--vvw-ui-text-color:#424242;--vvw-ui-hover-bg-color:#f5f5f5;--vvw-ui-active-bg-color:#ebebeb;--vvw-ui-border-radius:8px}
@@ -0,0 +1 @@
1
+ .vvw-ui{border:var(--vvw-ui-border-width)solid var(--vvw-ui-outline-color)}.vvw-ui>button,.vvw-ui.vvw-index,.vvw-ui.vvw-desc{font-weight:700}.vvw-ui>button:hover,.vvw-ui>button:active{color:#fff;border-color:#0f0}.vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:visible}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .2s linear,padding-right .2s linear;overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .2s linear}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)scale(1.1)}.vvw-ui.vvw-prev button{border-radius:0}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next button{border-radius:0}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)scale(1.1)}:root{--vvw-bg-color:#000;--vvw-text-color:#ff0;--vvw-ui-outline-color:red;--vvw-ui-bg-color:#00f;--vvw-ui-text-color:#ff0;--vvw-ui-hover-bg-color:red;--vvw-ui-active-bg-color:#f33;--vvw-ui-border-radius:4px;--vvw-ui-border-width:1px}
@@ -0,0 +1 @@
1
+ .vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .333s,padding-right .333s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .333s .111s}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)}:root{--vvw-bg-color:#fafafa;--vvw-text-color:#5d4037;--vvw-ui-outline-color:#d7ccc8;--vvw-ui-bg-color:#efebe9;--vvw-ui-text-color:#5d4037;--vvw-ui-hover-bg-color:#d7ccc8;--vvw-ui-active-bg-color:#c9b7b0;--vvw-ui-border-radius:20px}
@@ -0,0 +1 @@
1
+ .vvw-ui.vvw-prev,.vvw-ui.vvw-next{overflow:hidden}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button{padding:18px 3px;transition:padding-left .2s linear,padding-right .2s linear}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next) button svg{transition:transform .2s linear}:is(.vvw-ui.vvw-prev,.vvw-ui.vvw-next):hover button svg{transform:translate(-3px)}.vvw-ui.vvw-prev:hover button{padding-left:8px}.vvw-ui.vvw-next:hover button{padding-right:8px}.vvw-ui.vvw-next:hover button svg{transform:translate(3px)}:root{--vvw-bg-color:#000;--vvw-text-color:#fff;--vvw-ui-outline-color:#222;--vvw-ui-bg-color:#000;--vvw-ui-text-color:#fff;--vvw-ui-hover-bg-color:#1a1a1a;--vvw-ui-active-bg-color:#333;--vvw-ui-border-radius:0}