@getflip/swirl-components 0.3.0 → 0.4.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 (284) hide show
  1. package/dist/cjs/flip-action-list-item.cjs.entry.js +1 -1
  2. package/dist/cjs/flip-action-list-item.cjs.entry.js.map +1 -1
  3. package/dist/cjs/flip-avatar-group.cjs.entry.js +11 -1
  4. package/dist/cjs/flip-avatar-group.cjs.entry.js.map +1 -1
  5. package/dist/cjs/flip-avatar.cjs.entry.js +11 -1
  6. package/dist/cjs/flip-avatar.cjs.entry.js.map +1 -1
  7. package/dist/cjs/flip-button-group.cjs.entry.js +9 -3
  8. package/dist/cjs/flip-button-group.cjs.entry.js.map +1 -1
  9. package/dist/cjs/flip-button.cjs.entry.js +1 -1
  10. package/dist/cjs/flip-button.cjs.entry.js.map +1 -1
  11. package/dist/cjs/flip-checkbox.cjs.entry.js +1 -1
  12. package/dist/cjs/flip-checkbox.cjs.entry.js.map +1 -1
  13. package/dist/cjs/flip-date-picker_3.cjs.entry.js +20 -12
  14. package/dist/cjs/flip-date-picker_3.cjs.entry.js.map +1 -1
  15. package/dist/cjs/flip-dialog.cjs.entry.js +1 -1
  16. package/dist/cjs/flip-dialog.cjs.entry.js.map +1 -1
  17. package/dist/cjs/flip-file-uploader.cjs.entry.js +1 -1
  18. package/dist/cjs/flip-file-uploader.cjs.entry.js.map +1 -1
  19. package/dist/cjs/flip-file-viewer-audio_6.cjs.entry.js +3 -3
  20. package/dist/cjs/flip-file-viewer-audio_6.cjs.entry.js.map +1 -1
  21. package/dist/cjs/flip-file-viewer.cjs.entry.js +2 -1
  22. package/dist/cjs/flip-file-viewer.cjs.entry.js.map +1 -1
  23. package/dist/cjs/flip-form-group.cjs.entry.js +1 -1
  24. package/dist/cjs/flip-form-group.cjs.entry.js.map +1 -1
  25. package/dist/cjs/flip-icon-arrow-left_3.cjs.entry.js +50 -0
  26. package/dist/cjs/flip-icon-arrow-left_3.cjs.entry.js.map +1 -0
  27. package/dist/cjs/flip-lightbox.cjs.entry.js +205 -0
  28. package/dist/cjs/flip-lightbox.cjs.entry.js.map +1 -0
  29. package/dist/cjs/flip-modal.cjs.entry.js +14 -2
  30. package/dist/cjs/flip-modal.cjs.entry.js.map +1 -1
  31. package/dist/cjs/flip-radio-group.cjs.entry.js +1 -1
  32. package/dist/cjs/flip-radio-group.cjs.entry.js.map +1 -1
  33. package/dist/cjs/flip-radio.cjs.entry.js +1 -1
  34. package/dist/cjs/flip-radio.cjs.entry.js.map +1 -1
  35. package/dist/cjs/flip-tabs.cjs.entry.js +3 -40
  36. package/dist/cjs/flip-tabs.cjs.entry.js.map +1 -1
  37. package/dist/cjs/flip-text-input.cjs.entry.js +1 -1
  38. package/dist/cjs/flip-text-input.cjs.entry.js.map +1 -1
  39. package/dist/cjs/flip-toast.cjs.entry.js +1 -1
  40. package/dist/cjs/flip-toast.cjs.entry.js.map +1 -1
  41. package/dist/cjs/loader.cjs.js +1 -1
  42. package/dist/cjs/swirl-components.cjs.js +1 -1
  43. package/dist/collection/collection-manifest.json +1 -0
  44. package/dist/collection/components/flip-action-list-item/flip-action-list-item.css +4 -0
  45. package/dist/collection/components/flip-avatar/flip-avatar.js +11 -1
  46. package/dist/collection/components/flip-avatar/flip-avatar.js.map +1 -1
  47. package/dist/collection/components/flip-avatar-group/flip-avatar-group.js +11 -1
  48. package/dist/collection/components/flip-avatar-group/flip-avatar-group.js.map +1 -1
  49. package/dist/collection/components/flip-button/flip-button.css +10 -2
  50. package/dist/collection/components/flip-button-group/flip-button-group.css +57 -0
  51. package/dist/collection/components/flip-button-group/flip-button-group.js +27 -5
  52. package/dist/collection/components/flip-button-group/flip-button-group.js.map +1 -1
  53. package/dist/collection/components/flip-button-group/flip-button-group.stories.js +8 -2
  54. package/dist/collection/components/flip-button-group/flip-button-group.stories.js.map +1 -1
  55. package/dist/collection/components/flip-checkbox/flip-checkbox.css +1 -1
  56. package/dist/collection/components/flip-date-picker/flip-date-picker.css +0 -1
  57. package/dist/collection/components/flip-dialog/flip-dialog.css +1 -1
  58. package/dist/collection/components/flip-file-uploader/flip-file-uploader.css +3 -1
  59. package/dist/collection/components/flip-file-viewer/flip-file-viewer.js +20 -1
  60. package/dist/collection/components/flip-file-viewer/flip-file-viewer.js.map +1 -1
  61. package/dist/collection/components/flip-file-viewer/viewers/flip-file-viewer-csv/flip-file-viewer-csv.css +2 -0
  62. package/dist/collection/components/flip-file-viewer/viewers/flip-file-viewer-text/flip-file-viewer-text.css +2 -0
  63. package/dist/collection/components/flip-file-viewer/viewers/flip-file-viewer-video/flip-file-viewer-video.css +2 -2
  64. package/dist/collection/components/flip-form-group/flip-form-group.css +6 -2
  65. package/dist/collection/components/flip-lightbox/flip-lightbox.css +208 -0
  66. package/dist/collection/components/flip-lightbox/flip-lightbox.js +375 -0
  67. package/dist/collection/components/flip-lightbox/flip-lightbox.js.map +1 -0
  68. package/dist/collection/components/flip-lightbox/flip-lightbox.stories.js +44 -0
  69. package/dist/collection/components/flip-lightbox/flip-lightbox.stories.js.map +1 -0
  70. package/dist/collection/components/flip-modal/flip-modal.css +14 -3
  71. package/dist/collection/components/flip-modal/flip-modal.js +16 -2
  72. package/dist/collection/components/flip-modal/flip-modal.js.map +1 -1
  73. package/dist/collection/components/flip-popover/flip-popover.css +1 -1
  74. package/dist/collection/components/flip-popover/flip-popover.js +18 -10
  75. package/dist/collection/components/flip-popover/flip-popover.js.map +1 -1
  76. package/dist/collection/components/flip-radio/flip-radio.css +1 -1
  77. package/dist/collection/components/flip-radio-group/flip-radio-group.css +1 -1
  78. package/dist/collection/components/flip-tabs/flip-tabs.css +25 -36
  79. package/dist/collection/components/flip-tabs/flip-tabs.js +12 -59
  80. package/dist/collection/components/flip-tabs/flip-tabs.js.map +1 -1
  81. package/dist/collection/components/flip-text-input/flip-text-input.css +2 -0
  82. package/dist/collection/components/flip-toast/flip-toast.css +1 -1
  83. package/dist/components/flip-action-list-item.js +1 -1
  84. package/dist/components/flip-action-list-item.js.map +1 -1
  85. package/dist/components/flip-avatar-group.js +11 -1
  86. package/dist/components/flip-avatar-group.js.map +1 -1
  87. package/dist/components/flip-avatar.js +11 -1
  88. package/dist/components/flip-avatar.js.map +1 -1
  89. package/dist/components/flip-button-group2.js +9 -3
  90. package/dist/components/flip-button-group2.js.map +1 -1
  91. package/dist/components/flip-button2.js +1 -1
  92. package/dist/components/flip-button2.js.map +1 -1
  93. package/dist/components/flip-checkbox.js +1 -1
  94. package/dist/components/flip-checkbox.js.map +1 -1
  95. package/dist/components/flip-date-picker2.js +1 -1
  96. package/dist/components/flip-date-picker2.js.map +1 -1
  97. package/dist/components/flip-dialog.js +1 -1
  98. package/dist/components/flip-dialog.js.map +1 -1
  99. package/dist/components/flip-file-uploader.js +1 -1
  100. package/dist/components/flip-file-uploader.js.map +1 -1
  101. package/dist/components/flip-file-viewer-csv2.js +1 -1
  102. package/dist/components/flip-file-viewer-csv2.js.map +1 -1
  103. package/dist/components/flip-file-viewer-text2.js +1 -1
  104. package/dist/components/flip-file-viewer-text2.js.map +1 -1
  105. package/dist/components/flip-file-viewer-video2.js +1 -1
  106. package/dist/components/flip-file-viewer-video2.js.map +1 -1
  107. package/dist/components/flip-file-viewer.js +3 -1
  108. package/dist/components/flip-file-viewer.js.map +1 -1
  109. package/dist/components/flip-form-group.js +1 -1
  110. package/dist/components/flip-form-group.js.map +1 -1
  111. package/dist/components/flip-icon-arrow-left.js +1 -32
  112. package/dist/components/flip-icon-arrow-left.js.map +1 -1
  113. package/dist/{esm/flip-icon-arrow-left.entry.js → components/flip-icon-arrow-left2.js} +26 -8
  114. package/dist/components/flip-icon-arrow-left2.js.map +1 -0
  115. package/dist/components/flip-icon-arrow-right.js +1 -32
  116. package/dist/components/flip-icon-arrow-right.js.map +1 -1
  117. package/dist/{esm/flip-icon-arrow-right.entry.js → components/flip-icon-arrow-right2.js} +26 -8
  118. package/dist/components/flip-icon-arrow-right2.js.map +1 -0
  119. package/dist/components/flip-icon-download.js +1 -32
  120. package/dist/components/flip-icon-download.js.map +1 -1
  121. package/dist/{esm/flip-icon-download.entry.js → components/flip-icon-download2.js} +26 -8
  122. package/dist/components/flip-icon-download2.js.map +1 -0
  123. package/dist/components/flip-lightbox.d.ts +11 -0
  124. package/dist/components/flip-lightbox.js +255 -0
  125. package/dist/components/flip-lightbox.js.map +1 -0
  126. package/dist/components/flip-modal.js +16 -2
  127. package/dist/components/flip-modal.js.map +1 -1
  128. package/dist/components/flip-popover2.js +19 -11
  129. package/dist/components/flip-popover2.js.map +1 -1
  130. package/dist/components/flip-radio-group.js +1 -1
  131. package/dist/components/flip-radio-group.js.map +1 -1
  132. package/dist/components/flip-radio.js +1 -1
  133. package/dist/components/flip-radio.js.map +1 -1
  134. package/dist/components/flip-tabs.js +4 -42
  135. package/dist/components/flip-tabs.js.map +1 -1
  136. package/dist/components/flip-text-input.js +1 -1
  137. package/dist/components/flip-text-input.js.map +1 -1
  138. package/dist/components/flip-toast2.js +1 -1
  139. package/dist/components/flip-toast2.js.map +1 -1
  140. package/dist/components/index.d.ts +1 -0
  141. package/dist/components/index.js +1 -0
  142. package/dist/components/index.js.map +1 -1
  143. package/dist/esm/flip-action-list-item.entry.js +1 -1
  144. package/dist/esm/flip-action-list-item.entry.js.map +1 -1
  145. package/dist/esm/flip-avatar-group.entry.js +11 -1
  146. package/dist/esm/flip-avatar-group.entry.js.map +1 -1
  147. package/dist/esm/flip-avatar.entry.js +11 -1
  148. package/dist/esm/flip-avatar.entry.js.map +1 -1
  149. package/dist/esm/flip-button-group.entry.js +9 -3
  150. package/dist/esm/flip-button-group.entry.js.map +1 -1
  151. package/dist/esm/flip-button.entry.js +1 -1
  152. package/dist/esm/flip-button.entry.js.map +1 -1
  153. package/dist/esm/flip-checkbox.entry.js +1 -1
  154. package/dist/esm/flip-checkbox.entry.js.map +1 -1
  155. package/dist/esm/flip-date-picker_3.entry.js +20 -12
  156. package/dist/esm/flip-date-picker_3.entry.js.map +1 -1
  157. package/dist/esm/flip-dialog.entry.js +1 -1
  158. package/dist/esm/flip-dialog.entry.js.map +1 -1
  159. package/dist/esm/flip-file-uploader.entry.js +1 -1
  160. package/dist/esm/flip-file-uploader.entry.js.map +1 -1
  161. package/dist/esm/flip-file-viewer-audio_6.entry.js +3 -3
  162. package/dist/esm/flip-file-viewer-audio_6.entry.js.map +1 -1
  163. package/dist/esm/flip-file-viewer.entry.js +2 -1
  164. package/dist/esm/flip-file-viewer.entry.js.map +1 -1
  165. package/dist/esm/flip-form-group.entry.js +1 -1
  166. package/dist/esm/flip-form-group.entry.js.map +1 -1
  167. package/dist/esm/flip-icon-arrow-left_3.entry.js +44 -0
  168. package/dist/esm/flip-icon-arrow-left_3.entry.js.map +1 -0
  169. package/dist/esm/flip-lightbox.entry.js +201 -0
  170. package/dist/esm/flip-lightbox.entry.js.map +1 -0
  171. package/dist/esm/flip-modal.entry.js +14 -2
  172. package/dist/esm/flip-modal.entry.js.map +1 -1
  173. package/dist/esm/flip-radio-group.entry.js +1 -1
  174. package/dist/esm/flip-radio-group.entry.js.map +1 -1
  175. package/dist/esm/flip-radio.entry.js +1 -1
  176. package/dist/esm/flip-radio.entry.js.map +1 -1
  177. package/dist/esm/flip-tabs.entry.js +3 -40
  178. package/dist/esm/flip-tabs.entry.js.map +1 -1
  179. package/dist/esm/flip-text-input.entry.js +1 -1
  180. package/dist/esm/flip-text-input.entry.js.map +1 -1
  181. package/dist/esm/flip-toast.entry.js +1 -1
  182. package/dist/esm/flip-toast.entry.js.map +1 -1
  183. package/dist/esm/loader.js +1 -1
  184. package/dist/esm/swirl-components.js +1 -1
  185. package/dist/swirl-components/p-013a1742.entry.js +2 -0
  186. package/dist/swirl-components/p-013a1742.entry.js.map +1 -0
  187. package/dist/swirl-components/{p-c8db8af8.entry.js → p-04eefcca.entry.js} +2 -2
  188. package/dist/swirl-components/p-04eefcca.entry.js.map +1 -0
  189. package/dist/swirl-components/p-1ff7b440.entry.js +2 -0
  190. package/dist/swirl-components/p-1ff7b440.entry.js.map +1 -0
  191. package/dist/swirl-components/p-3147334a.entry.js +2 -0
  192. package/dist/swirl-components/p-3147334a.entry.js.map +1 -0
  193. package/dist/swirl-components/p-5022e258.entry.js +2 -0
  194. package/dist/swirl-components/p-5022e258.entry.js.map +1 -0
  195. package/dist/swirl-components/p-6ddd889e.entry.js +2 -0
  196. package/dist/swirl-components/p-6ddd889e.entry.js.map +1 -0
  197. package/dist/swirl-components/p-6febfe15.entry.js +2 -0
  198. package/dist/swirl-components/p-6febfe15.entry.js.map +1 -0
  199. package/dist/swirl-components/p-8784a282.entry.js +2 -0
  200. package/dist/swirl-components/p-8784a282.entry.js.map +1 -0
  201. package/dist/swirl-components/p-8faa2889.entry.js +2 -0
  202. package/dist/swirl-components/p-8faa2889.entry.js.map +1 -0
  203. package/dist/swirl-components/p-95c9ef17.entry.js +2 -0
  204. package/dist/swirl-components/p-95c9ef17.entry.js.map +1 -0
  205. package/dist/swirl-components/p-a15a28d3.entry.js +2 -0
  206. package/dist/swirl-components/p-a15a28d3.entry.js.map +1 -0
  207. package/dist/swirl-components/p-a178d901.entry.js +2 -0
  208. package/dist/swirl-components/p-a178d901.entry.js.map +1 -0
  209. package/dist/swirl-components/p-ad92140f.entry.js +2 -0
  210. package/dist/swirl-components/p-ad92140f.entry.js.map +1 -0
  211. package/dist/swirl-components/p-b1532bdb.entry.js +2 -0
  212. package/dist/swirl-components/p-b1532bdb.entry.js.map +1 -0
  213. package/dist/swirl-components/{p-c4c5a7ca.entry.js → p-bb9a65d7.entry.js} +3 -3
  214. package/dist/swirl-components/p-bb9a65d7.entry.js.map +1 -0
  215. package/dist/swirl-components/{p-7c20748f.entry.js → p-d6bb9690.entry.js} +2 -2
  216. package/dist/swirl-components/{p-7c20748f.entry.js.map → p-d6bb9690.entry.js.map} +1 -1
  217. package/dist/swirl-components/p-d9dfcd01.entry.js +2 -0
  218. package/dist/swirl-components/p-d9dfcd01.entry.js.map +1 -0
  219. package/dist/swirl-components/{p-06a08b17.entry.js → p-e34707fb.entry.js} +2 -2
  220. package/dist/swirl-components/{p-06a08b17.entry.js.map → p-e34707fb.entry.js.map} +1 -1
  221. package/dist/swirl-components/{p-692cb3d7.entry.js → p-f6a8ea5d.entry.js} +2 -2
  222. package/dist/swirl-components/p-f6a8ea5d.entry.js.map +1 -0
  223. package/dist/swirl-components/p-f94fc675.entry.js +2 -0
  224. package/dist/swirl-components/p-f94fc675.entry.js.map +1 -0
  225. package/dist/swirl-components/swirl-components.css +1 -1
  226. package/dist/swirl-components/swirl-components.esm.js +1 -1
  227. package/dist/swirl-components/swirl-components.esm.js.map +1 -1
  228. package/dist/types/components/flip-avatar/flip-avatar.d.ts +3 -0
  229. package/dist/types/components/flip-avatar-group/flip-avatar-group.d.ts +3 -0
  230. package/dist/types/components/flip-button-group/flip-button-group.d.ts +4 -3
  231. package/dist/types/components/flip-button-group/flip-button-group.stories.d.ts +5 -0
  232. package/dist/types/components/flip-file-viewer/flip-file-viewer.d.ts +1 -0
  233. package/dist/types/components/flip-lightbox/flip-lightbox.d.ts +49 -0
  234. package/dist/types/components/flip-lightbox/flip-lightbox.stories.d.ts +16 -0
  235. package/dist/types/components/flip-modal/flip-modal.d.ts +2 -0
  236. package/dist/types/components/flip-popover/flip-popover.d.ts +2 -0
  237. package/dist/types/components/flip-tabs/flip-tabs.d.ts +0 -7
  238. package/dist/types/components.d.ts +43 -3
  239. package/package.json +1 -1
  240. package/vscode-data.json +37 -0
  241. package/dist/cjs/flip-icon-arrow-left.cjs.entry.js +0 -22
  242. package/dist/cjs/flip-icon-arrow-left.cjs.entry.js.map +0 -1
  243. package/dist/cjs/flip-icon-arrow-right.cjs.entry.js +0 -22
  244. package/dist/cjs/flip-icon-arrow-right.cjs.entry.js.map +0 -1
  245. package/dist/cjs/flip-icon-download.cjs.entry.js +0 -22
  246. package/dist/cjs/flip-icon-download.cjs.entry.js.map +0 -1
  247. package/dist/esm/flip-icon-arrow-left.entry.js.map +0 -1
  248. package/dist/esm/flip-icon-arrow-right.entry.js.map +0 -1
  249. package/dist/esm/flip-icon-download.entry.js.map +0 -1
  250. package/dist/swirl-components/p-273b12eb.entry.js +0 -2
  251. package/dist/swirl-components/p-273b12eb.entry.js.map +0 -1
  252. package/dist/swirl-components/p-4aafa158.entry.js +0 -2
  253. package/dist/swirl-components/p-4aafa158.entry.js.map +0 -1
  254. package/dist/swirl-components/p-529bace4.entry.js +0 -2
  255. package/dist/swirl-components/p-529bace4.entry.js.map +0 -1
  256. package/dist/swirl-components/p-692cb3d7.entry.js.map +0 -1
  257. package/dist/swirl-components/p-91ccf392.entry.js +0 -2
  258. package/dist/swirl-components/p-91ccf392.entry.js.map +0 -1
  259. package/dist/swirl-components/p-91cd33f9.entry.js +0 -2
  260. package/dist/swirl-components/p-91cd33f9.entry.js.map +0 -1
  261. package/dist/swirl-components/p-9ffa5f69.entry.js +0 -2
  262. package/dist/swirl-components/p-9ffa5f69.entry.js.map +0 -1
  263. package/dist/swirl-components/p-b65aec9d.entry.js +0 -2
  264. package/dist/swirl-components/p-b65aec9d.entry.js.map +0 -1
  265. package/dist/swirl-components/p-bada1dda.entry.js +0 -2
  266. package/dist/swirl-components/p-bada1dda.entry.js.map +0 -1
  267. package/dist/swirl-components/p-bc94ecde.entry.js +0 -2
  268. package/dist/swirl-components/p-bc94ecde.entry.js.map +0 -1
  269. package/dist/swirl-components/p-c4c5a7ca.entry.js.map +0 -1
  270. package/dist/swirl-components/p-c8db8af8.entry.js.map +0 -1
  271. package/dist/swirl-components/p-c9f5b33a.entry.js +0 -2
  272. package/dist/swirl-components/p-c9f5b33a.entry.js.map +0 -1
  273. package/dist/swirl-components/p-d9b3b617.entry.js +0 -2
  274. package/dist/swirl-components/p-d9b3b617.entry.js.map +0 -1
  275. package/dist/swirl-components/p-df639805.entry.js +0 -2
  276. package/dist/swirl-components/p-df639805.entry.js.map +0 -1
  277. package/dist/swirl-components/p-dfd81ceb.entry.js +0 -2
  278. package/dist/swirl-components/p-dfd81ceb.entry.js.map +0 -1
  279. package/dist/swirl-components/p-e1debe08.entry.js +0 -2
  280. package/dist/swirl-components/p-e1debe08.entry.js.map +0 -1
  281. package/dist/swirl-components/p-f9c75666.entry.js +0 -2
  282. package/dist/swirl-components/p-f9c75666.entry.js.map +0 -1
  283. package/dist/swirl-components/p-fefffb34.entry.js +0 -2
  284. package/dist/swirl-components/p-fefffb34.entry.js.map +0 -1
@@ -10,16 +10,20 @@
10
10
  .form-group {
11
11
  display: flex;
12
12
  flex-direction: column;
13
- gap: var(--s-space-24);
13
+ gap: var(--s-space-16);
14
14
  }
15
15
 
16
16
  @media (min-width: 768px) {
17
17
 
18
18
  .form-group {
19
- gap: var(--s-space-32)
19
+ gap: var(--s-space-24)
20
20
  }
21
21
  }
22
22
 
23
+ .form-group--orientation-horizontal {
24
+ gap: var(--s-space-16);
25
+ }
26
+
23
27
  @media (min-width: 768px) {
24
28
 
25
29
  .form-group--orientation-horizontal {
@@ -0,0 +1,208 @@
1
+ :host {
2
+ display: block;
3
+ }
4
+
5
+ :host * {
6
+ box-sizing: border-box;
7
+ }
8
+
9
+ .lightbox {
10
+ position: fixed;
11
+ z-index: var(--s-z-40);
12
+ background-color: rgba(0, 0, 0, 1);
13
+ inset: 0;
14
+ }
15
+
16
+ .lightbox[aria-hidden="true"] {
17
+ display: none;
18
+ }
19
+
20
+ @media (min-width: 768px) {
21
+
22
+ .lightbox {
23
+ background-color: rgba(0, 0, 0, 0.6)
24
+ }
25
+ }
26
+
27
+ .lightbox:not(.lightbox--closing) .lightbox__body {
28
+ -webkit-animation: 0.15s lightbox-fade-in;
29
+ animation: 0.15s lightbox-fade-in;
30
+ }
31
+
32
+ @media (prefers-reduced-motion) {
33
+
34
+ .lightbox:not(.lightbox--closing) .lightbox__body {
35
+ -webkit-animation: none;
36
+ animation: none
37
+ }
38
+ }
39
+
40
+ .lightbox--closing {
41
+ -webkit-animation: 0.15s lightbox-fade-out;
42
+ animation: 0.15s lightbox-fade-out;
43
+ -webkit-animation-fill-mode: forwards;
44
+ animation-fill-mode: forwards;
45
+ }
46
+
47
+ @media (prefers-reduced-motion) {
48
+
49
+ .lightbox--closing {
50
+ -webkit-animation: none;
51
+ animation: none
52
+ }
53
+ }
54
+
55
+ .lightbox__body {
56
+ position: relative;
57
+ width: 100%;
58
+ height: 100%;
59
+ }
60
+
61
+ .lightbox__header {
62
+ position: absolute;
63
+ z-index: 1;
64
+ top: 0;
65
+ right: 0;
66
+ left: 0;
67
+ display: flex;
68
+ padding: var(--s-space-12) var(--s-space-16);
69
+ justify-content: space-between;
70
+ align-items: flex-start;
71
+ pointer-events: none;
72
+ }
73
+
74
+ .lightbox__controls {
75
+ position: absolute;
76
+ z-index: 1;
77
+ top: 50%;
78
+ right: 0;
79
+ left: 0;
80
+ display: none;
81
+ padding-right: var(--s-space-16);
82
+ padding-left: var(--s-space-16);
83
+ justify-content: space-between;
84
+ align-items: flex-start;
85
+ pointer-events: none;
86
+ }
87
+
88
+ @media (min-width: 768px) {
89
+
90
+ .lightbox__controls {
91
+ display: flex
92
+ }
93
+ }
94
+
95
+ .lightbox__close-button,
96
+ .lightbox__download-button,
97
+ .lightbox__previous-slide-button,
98
+ .lightbox__next-slide-button {
99
+ display: inline-flex;
100
+ width: 2.5rem;
101
+ height: 2.5rem;
102
+ justify-content: center;
103
+ align-items: center;
104
+ border: none;
105
+ border-radius: 50%;
106
+ color: var(--s-icon-on-image);
107
+ background-color: rgba(0, 0, 0, 0.6);
108
+ cursor: pointer;
109
+ transition: opacity 0.15s;
110
+ pointer-events: auto;
111
+ }
112
+
113
+ .lightbox__close-button:disabled, .lightbox__download-button:disabled, .lightbox__previous-slide-button:disabled, .lightbox__next-slide-button:disabled {
114
+ pointer-events: none;
115
+ opacity: 0;
116
+ }
117
+
118
+ .lightbox__content {
119
+ overflow: hidden;
120
+ width: 100%;
121
+ height: 100%;
122
+ -webkit-user-select: none;
123
+ -moz-user-select: none;
124
+ user-select: none;
125
+ }
126
+
127
+ .lightbox__slides {
128
+ display: flex;
129
+ width: 100%;
130
+ height: 100%;
131
+ }
132
+
133
+ .lightbox__slides ::slotted(*) {
134
+ flex-basis: 100%;
135
+ flex-shrink: 0;
136
+ transition: transform 0.3s;
137
+ }
138
+
139
+ @media (min-width: 768px) {
140
+
141
+ .lightbox__slides ::slotted(*) {
142
+ padding: 4rem 5rem
143
+ }
144
+ }
145
+
146
+ @media (prefers-reduced-motion) {
147
+
148
+ .lightbox__slides ::slotted(*) {
149
+ transition: none
150
+ }
151
+ }
152
+
153
+ .lightbox__pagination {
154
+ position: absolute;
155
+ bottom: var(--s-space-32);
156
+ left: 50%;
157
+ padding: var(--s-space-4) var(--s-space-12);
158
+ border-radius: var(--s-border-radius-base);
159
+ color: var(--s-text-on-image);
160
+ background-color: rgba(0, 0, 0, 0.6);
161
+ font-weight: var(--s-font-weight-medium);
162
+ line-height: var(--s-line-height-base);
163
+ transform: translateX(-50%);
164
+ pointer-events: none;
165
+ }
166
+
167
+ @media (min-width: 768px) {
168
+
169
+ .lightbox__pagination {
170
+ display: none
171
+ }
172
+ }
173
+
174
+ @-webkit-keyframes lightbox-fade-in {
175
+ from {
176
+ opacity: 0;
177
+ }
178
+ to {
179
+ opacity: 1;
180
+ }
181
+ }
182
+
183
+ @keyframes lightbox-fade-in {
184
+ from {
185
+ opacity: 0;
186
+ }
187
+ to {
188
+ opacity: 1;
189
+ }
190
+ }
191
+
192
+ @-webkit-keyframes lightbox-fade-out {
193
+ from {
194
+ opacity: 1;
195
+ }
196
+ to {
197
+ opacity: 0;
198
+ }
199
+ }
200
+
201
+ @keyframes lightbox-fade-out {
202
+ from {
203
+ opacity: 1;
204
+ }
205
+ to {
206
+ opacity: 0;
207
+ }
208
+ }
@@ -0,0 +1,375 @@
1
+ import { Component, Element, h, Host, Method, Prop, State, } from "@stencil/core";
2
+ import A11yDialog from "a11y-dialog";
3
+ import { disableBodyScroll, enableBodyScroll } from "body-scroll-lock";
4
+ import classnames from "classnames";
5
+ import { querySelectorAllDeep } from "../../utils";
6
+ export class FlipLightbox {
7
+ constructor() {
8
+ this.closeButtonLabel = "Close modal";
9
+ this.downloadButtonLabel = "Download active slide content";
10
+ this.nextSlideButtonLabel = "Next slide";
11
+ this.previousSlideButtonLabel = "Previous slide";
12
+ this.activeSlideIndex = 0;
13
+ this.closing = false;
14
+ this.dragging = false;
15
+ this.mediaPlayers = [];
16
+ this.onCloseButtonClick = () => {
17
+ this.close();
18
+ };
19
+ this.onDownloadButtonClick = () => {
20
+ var _a;
21
+ (_a = this.slides[this.activeSlideIndex]) === null || _a === void 0 ? void 0 : _a.download();
22
+ };
23
+ this.onKeyDown = (event) => {
24
+ if (event.code === "Escape") {
25
+ this.close();
26
+ }
27
+ else if (event.code === "ArrowLeft") {
28
+ this.onPreviousSlideClick();
29
+ }
30
+ else if (event.code === "ArrowRight") {
31
+ this.onNextSlideClick();
32
+ }
33
+ };
34
+ this.onNextSlideClick = () => {
35
+ this.activateSlide(Math.min(this.slides.length - 1, this.activeSlideIndex + 1));
36
+ };
37
+ this.onPreviousSlideClick = () => {
38
+ this.activateSlide(Math.max(0, this.activeSlideIndex - 1));
39
+ };
40
+ this.registerSlides = () => {
41
+ this.slides = Array.from(this.el.children);
42
+ this.setSlideAttributes();
43
+ this.updateMediaPlayers();
44
+ };
45
+ this.onPointerDown = (event) => {
46
+ event.preventDefault();
47
+ this.dragging = true;
48
+ this.dragStartPosition =
49
+ event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;
50
+ this.slides.forEach((slide) => {
51
+ slide.style.transition = "none";
52
+ });
53
+ };
54
+ this.onPointerMove = (event) => {
55
+ if (this.dragging) {
56
+ event.preventDefault();
57
+ const deltaX = event instanceof MouseEvent
58
+ ? event.clientX - this.dragStartPosition
59
+ : event.touches[0].clientX - this.dragStartPosition;
60
+ this.slides.forEach((slide) => {
61
+ const pixelOffset = this.activeSlideIndex * slide.getBoundingClientRect().width;
62
+ this.dragDelta = deltaX;
63
+ slide.style.transform = `translate3d(${(-pixelOffset + this.dragDelta) / 16}rem, 0, 0)`;
64
+ });
65
+ }
66
+ };
67
+ this.onPointerUp = () => {
68
+ this.dragging = false;
69
+ this.dragStartPosition = undefined;
70
+ const dragRatio = this.dragDelta /
71
+ this.slides[this.activeSlideIndex].getBoundingClientRect().width;
72
+ this.dragDelta = 0;
73
+ const shouldMoveToPreviousSlide = dragRatio > 0.2;
74
+ const shouldMoveToNextSlide = dragRatio < -0.2;
75
+ this.slides.forEach((slide) => {
76
+ slide.style.transition = "";
77
+ });
78
+ if (shouldMoveToPreviousSlide) {
79
+ this.onPreviousSlideClick();
80
+ }
81
+ else if (shouldMoveToNextSlide) {
82
+ this.onNextSlideClick();
83
+ }
84
+ else {
85
+ this.resetSlidePositions();
86
+ }
87
+ };
88
+ }
89
+ componentWillLoad() {
90
+ this.registerSlides();
91
+ }
92
+ componentDidLoad() {
93
+ this.modal = new A11yDialog(this.modalEl);
94
+ this.activateSlide(0);
95
+ }
96
+ disconnectedCallback() {
97
+ var _a;
98
+ (_a = this.modal) === null || _a === void 0 ? void 0 : _a.destroy();
99
+ this.unlockBodyScroll();
100
+ }
101
+ /**
102
+ * Open the lightbox.
103
+ */
104
+ async open() {
105
+ this.modal.show();
106
+ this.lockBodyScroll();
107
+ }
108
+ /**
109
+ * Close the lightbox.
110
+ */
111
+ async close() {
112
+ if (this.closing) {
113
+ return;
114
+ }
115
+ this.closing = true;
116
+ this.unlockBodyScroll();
117
+ setTimeout(() => {
118
+ this.modal.hide();
119
+ this.closing = false;
120
+ }, 150);
121
+ }
122
+ /**
123
+ * Activate a slide.
124
+ * @param newActiveSlideIndex
125
+ */
126
+ async activateSlide(newActiveSlideIndex) {
127
+ this.dragging = false;
128
+ this.activeSlideIndex = newActiveSlideIndex;
129
+ this.slides.forEach((slide, index) => {
130
+ if (index === this.activeSlideIndex) {
131
+ slide.removeAttribute("aria-hidden");
132
+ slide.setAttribute("active", "true");
133
+ }
134
+ else if (index === this.activeSlideIndex - 1 ||
135
+ index === this.activeSlideIndex + 1) {
136
+ slide.setAttribute("aria-hidden", "true");
137
+ slide.setAttribute("active", "true");
138
+ }
139
+ else {
140
+ slide.setAttribute("aria-hidden", "true");
141
+ }
142
+ slide.style.transform = `translate3d(-${100 * this.activeSlideIndex}%, 0, 0)`;
143
+ });
144
+ // wait for slide animation before deactivating the slide
145
+ setTimeout(() => {
146
+ this.slides.forEach((slide, index) => {
147
+ if (index !== this.activeSlideIndex &&
148
+ index !== this.activeSlideIndex - 1 &&
149
+ index !== this.activeSlideIndex + 1) {
150
+ slide.setAttribute("active", "false");
151
+ }
152
+ });
153
+ }, 300);
154
+ this.stopAllMediaPlayers();
155
+ this.updateMediaPlayers();
156
+ }
157
+ setSlideAttributes() {
158
+ this.slides.forEach((slide) => {
159
+ slide.setAttribute("active", "false");
160
+ slide.setAttribute("aria-label", slide.file);
161
+ slide.setAttribute("aria-roledescription", "slide");
162
+ slide.setAttribute("role", "group");
163
+ });
164
+ }
165
+ resetSlidePositions() {
166
+ this.slides.forEach((slide) => {
167
+ slide.style.transform = `translate3d(-${100 * this.activeSlideIndex}%, 0, 0)`;
168
+ });
169
+ }
170
+ lockBodyScroll() {
171
+ disableBodyScroll(this.el);
172
+ }
173
+ unlockBodyScroll() {
174
+ enableBodyScroll(this.el);
175
+ }
176
+ updateMediaPlayers() {
177
+ const mediaPlayers = querySelectorAllDeep(this.el, "video");
178
+ this.mediaPlayers = mediaPlayers;
179
+ }
180
+ stopAllMediaPlayers() {
181
+ this.mediaPlayers.forEach((mediaPlayer) => mediaPlayer.pause());
182
+ }
183
+ render() {
184
+ const showPagination = this.slides.length > 1;
185
+ const className = classnames("lightbox", {
186
+ "lightbox--closing": this.closing,
187
+ });
188
+ return (h(Host, null,
189
+ h("section", { "aria-hidden": "true", "aria-label": this.label, class: className, id: "lightbox", onMouseDown: this.onPointerDown, onMouseMove: this.onPointerMove, onMouseOut: this.onPointerUp, onMouseUp: this.onPointerUp, onKeyDown: this.onKeyDown, onTouchEnd: this.onPointerUp, onTouchMove: this.onPointerMove, onTouchStart: this.onPointerDown, ref: (el) => (this.modalEl = el) },
190
+ h("div", { class: "lightbox__body", role: "document" },
191
+ h("header", { class: "lightbox__header" },
192
+ h("button", { "aria-label": this.closeButtonLabel, class: "lightbox__close-button", onClick: this.onCloseButtonClick },
193
+ h("flip-icon-close", null)),
194
+ h("button", { "aria-label": this.downloadButtonLabel, class: "lightbox__download-button", onClick: this.onDownloadButtonClick },
195
+ h("flip-icon-download", null))),
196
+ h("div", { "aria-roledescription": "carousel", class: "lightbox__content", role: "group" },
197
+ h("div", { "aria-atomic": "false", "aria-live": "polite", class: "lightbox__slides" },
198
+ h("slot", { onSlotchange: this.registerSlides }))),
199
+ h("div", { class: "lightbox__controls" },
200
+ h("button", { "aria-label": this.previousSlideButtonLabel, class: "lightbox__previous-slide-button", disabled: this.activeSlideIndex === 0, onClick: this.onPreviousSlideClick },
201
+ h("flip-icon-arrow-left", null)),
202
+ h("button", { "aria-label": this.nextSlideButtonLabel, class: "lightbox__next-slide-button", disabled: this.activeSlideIndex === this.slides.length - 1, onClick: this.onNextSlideClick },
203
+ h("flip-icon-arrow-right", null))),
204
+ showPagination && (h("span", { class: "lightbox__pagination" },
205
+ h("span", { "aria-current": "page" }, this.activeSlideIndex + 1),
206
+ " /",
207
+ " ",
208
+ this.slides.length))))));
209
+ }
210
+ static get is() { return "flip-lightbox"; }
211
+ static get encapsulation() { return "shadow"; }
212
+ static get originalStyleUrls() { return {
213
+ "$": ["flip-lightbox.css"]
214
+ }; }
215
+ static get styleUrls() { return {
216
+ "$": ["flip-lightbox.css"]
217
+ }; }
218
+ static get properties() { return {
219
+ "closeButtonLabel": {
220
+ "type": "string",
221
+ "mutable": false,
222
+ "complexType": {
223
+ "original": "string",
224
+ "resolved": "string",
225
+ "references": {}
226
+ },
227
+ "required": false,
228
+ "optional": true,
229
+ "docs": {
230
+ "tags": [],
231
+ "text": ""
232
+ },
233
+ "attribute": "close-button-label",
234
+ "reflect": false,
235
+ "defaultValue": "\"Close modal\""
236
+ },
237
+ "downloadButtonLabel": {
238
+ "type": "string",
239
+ "mutable": false,
240
+ "complexType": {
241
+ "original": "string",
242
+ "resolved": "string",
243
+ "references": {}
244
+ },
245
+ "required": false,
246
+ "optional": true,
247
+ "docs": {
248
+ "tags": [],
249
+ "text": ""
250
+ },
251
+ "attribute": "download-button-label",
252
+ "reflect": false,
253
+ "defaultValue": "\"Download active slide content\""
254
+ },
255
+ "label": {
256
+ "type": "string",
257
+ "mutable": false,
258
+ "complexType": {
259
+ "original": "string",
260
+ "resolved": "string",
261
+ "references": {}
262
+ },
263
+ "required": true,
264
+ "optional": false,
265
+ "docs": {
266
+ "tags": [],
267
+ "text": ""
268
+ },
269
+ "attribute": "label",
270
+ "reflect": false
271
+ },
272
+ "nextSlideButtonLabel": {
273
+ "type": "string",
274
+ "mutable": false,
275
+ "complexType": {
276
+ "original": "string",
277
+ "resolved": "string",
278
+ "references": {}
279
+ },
280
+ "required": false,
281
+ "optional": true,
282
+ "docs": {
283
+ "tags": [],
284
+ "text": ""
285
+ },
286
+ "attribute": "next-slide-button-label",
287
+ "reflect": false,
288
+ "defaultValue": "\"Next slide\""
289
+ },
290
+ "previousSlideButtonLabel": {
291
+ "type": "string",
292
+ "mutable": false,
293
+ "complexType": {
294
+ "original": "string",
295
+ "resolved": "string",
296
+ "references": {}
297
+ },
298
+ "required": false,
299
+ "optional": true,
300
+ "docs": {
301
+ "tags": [],
302
+ "text": ""
303
+ },
304
+ "attribute": "previous-slide-button-label",
305
+ "reflect": false,
306
+ "defaultValue": "\"Previous slide\""
307
+ }
308
+ }; }
309
+ static get states() { return {
310
+ "activeSlideIndex": {},
311
+ "closing": {},
312
+ "slides": {}
313
+ }; }
314
+ static get methods() { return {
315
+ "open": {
316
+ "complexType": {
317
+ "signature": "() => Promise<void>",
318
+ "parameters": [],
319
+ "references": {
320
+ "Promise": {
321
+ "location": "global"
322
+ }
323
+ },
324
+ "return": "Promise<void>"
325
+ },
326
+ "docs": {
327
+ "text": "Open the lightbox.",
328
+ "tags": []
329
+ }
330
+ },
331
+ "close": {
332
+ "complexType": {
333
+ "signature": "() => Promise<void>",
334
+ "parameters": [],
335
+ "references": {
336
+ "Promise": {
337
+ "location": "global"
338
+ }
339
+ },
340
+ "return": "Promise<void>"
341
+ },
342
+ "docs": {
343
+ "text": "Close the lightbox.",
344
+ "tags": []
345
+ }
346
+ },
347
+ "activateSlide": {
348
+ "complexType": {
349
+ "signature": "(newActiveSlideIndex: number) => Promise<void>",
350
+ "parameters": [{
351
+ "tags": [{
352
+ "name": "param",
353
+ "text": "newActiveSlideIndex"
354
+ }],
355
+ "text": ""
356
+ }],
357
+ "references": {
358
+ "Promise": {
359
+ "location": "global"
360
+ }
361
+ },
362
+ "return": "Promise<void>"
363
+ },
364
+ "docs": {
365
+ "text": "Activate a slide.",
366
+ "tags": [{
367
+ "name": "param",
368
+ "text": "newActiveSlideIndex"
369
+ }]
370
+ }
371
+ }
372
+ }; }
373
+ static get elementRef() { return "el"; }
374
+ }
375
+ //# sourceMappingURL=flip-lightbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flip-lightbox.js","sourceRoot":"","sources":["../../../../src/components/flip-lightbox/flip-lightbox.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n h,\n Host,\n Method,\n Prop,\n State,\n} from \"@stencil/core\";\nimport A11yDialog from \"a11y-dialog\";\nimport { disableBodyScroll, enableBodyScroll } from \"body-scroll-lock\";\nimport classnames from \"classnames\";\nimport { querySelectorAllDeep } from \"../../utils\";\n\n@Component({\n shadow: true,\n styleUrl: \"flip-lightbox.css\",\n tag: \"flip-lightbox\",\n})\nexport class FlipLightbox {\n @Element() el: HTMLElement;\n\n @Prop() closeButtonLabel?: string = \"Close modal\";\n @Prop() downloadButtonLabel?: string = \"Download active slide content\";\n @Prop() label!: string;\n @Prop() nextSlideButtonLabel?: string = \"Next slide\";\n @Prop() previousSlideButtonLabel?: string = \"Previous slide\";\n\n @State() activeSlideIndex: number = 0;\n @State() closing = false;\n @State() slides: HTMLFlipFileViewerElement[];\n\n private dragging: boolean = false;\n private dragStartPosition: number;\n private dragDelta: number;\n private modal: A11yDialog;\n private modalEl: HTMLElement;\n private mediaPlayers: (HTMLVideoElement | HTMLAudioElement)[] = [];\n\n componentWillLoad() {\n this.registerSlides();\n }\n\n componentDidLoad() {\n this.modal = new A11yDialog(this.modalEl);\n this.activateSlide(0);\n }\n\n disconnectedCallback() {\n this.modal?.destroy();\n this.unlockBodyScroll();\n }\n\n /**\n * Open the lightbox.\n */\n @Method()\n async open() {\n this.modal.show();\n this.lockBodyScroll();\n }\n\n /**\n * Close the lightbox.\n */\n @Method()\n async close() {\n if (this.closing) {\n return;\n }\n\n this.closing = true;\n this.unlockBodyScroll();\n\n setTimeout(() => {\n this.modal.hide();\n this.closing = false;\n }, 150);\n }\n\n /**\n * Activate a slide.\n * @param newActiveSlideIndex\n */\n @Method()\n async activateSlide(newActiveSlideIndex: number) {\n this.dragging = false;\n this.activeSlideIndex = newActiveSlideIndex;\n\n this.slides.forEach((slide, index) => {\n if (index === this.activeSlideIndex) {\n slide.removeAttribute(\"aria-hidden\");\n slide.setAttribute(\"active\", \"true\");\n } else if (\n index === this.activeSlideIndex - 1 ||\n index === this.activeSlideIndex + 1\n ) {\n slide.setAttribute(\"aria-hidden\", \"true\");\n slide.setAttribute(\"active\", \"true\");\n } else {\n slide.setAttribute(\"aria-hidden\", \"true\");\n }\n\n slide.style.transform = `translate3d(-${\n 100 * this.activeSlideIndex\n }%, 0, 0)`;\n });\n\n // wait for slide animation before deactivating the slide\n setTimeout(() => {\n this.slides.forEach((slide, index) => {\n if (\n index !== this.activeSlideIndex &&\n index !== this.activeSlideIndex - 1 &&\n index !== this.activeSlideIndex + 1\n ) {\n slide.setAttribute(\"active\", \"false\");\n }\n });\n }, 300);\n\n this.stopAllMediaPlayers();\n this.updateMediaPlayers();\n }\n\n private setSlideAttributes() {\n this.slides.forEach((slide) => {\n slide.setAttribute(\"active\", \"false\");\n slide.setAttribute(\"aria-label\", slide.file);\n slide.setAttribute(\"aria-roledescription\", \"slide\");\n slide.setAttribute(\"role\", \"group\");\n });\n }\n\n private resetSlidePositions() {\n this.slides.forEach((slide) => {\n slide.style.transform = `translate3d(-${\n 100 * this.activeSlideIndex\n }%, 0, 0)`;\n });\n }\n\n private lockBodyScroll() {\n disableBodyScroll(this.el);\n }\n\n private unlockBodyScroll() {\n enableBodyScroll(this.el);\n }\n\n private onCloseButtonClick = () => {\n this.close();\n };\n\n private onDownloadButtonClick = () => {\n this.slides[this.activeSlideIndex]?.download();\n };\n\n private onKeyDown = (event: KeyboardEvent) => {\n if (event.code === \"Escape\") {\n this.close();\n } else if (event.code === \"ArrowLeft\") {\n this.onPreviousSlideClick();\n } else if (event.code === \"ArrowRight\") {\n this.onNextSlideClick();\n }\n };\n\n private onNextSlideClick = () => {\n this.activateSlide(\n Math.min(this.slides.length - 1, this.activeSlideIndex + 1)\n );\n };\n\n private onPreviousSlideClick = () => {\n this.activateSlide(Math.max(0, this.activeSlideIndex - 1));\n };\n\n private registerSlides = () => {\n this.slides = Array.from(this.el.children) as HTMLFlipFileViewerElement[];\n this.setSlideAttributes();\n this.updateMediaPlayers();\n };\n\n private updateMediaPlayers() {\n const mediaPlayers = querySelectorAllDeep<\n HTMLAudioElement | HTMLVideoElement\n >(this.el, \"video\");\n\n this.mediaPlayers = mediaPlayers;\n }\n\n private stopAllMediaPlayers() {\n this.mediaPlayers.forEach((mediaPlayer) => mediaPlayer.pause());\n }\n\n private onPointerDown = (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n\n this.dragging = true;\n\n this.dragStartPosition =\n event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;\n\n this.slides.forEach((slide) => {\n slide.style.transition = \"none\";\n });\n };\n\n private onPointerMove = (event: MouseEvent | TouchEvent) => {\n if (this.dragging) {\n event.preventDefault();\n\n const deltaX =\n event instanceof MouseEvent\n ? event.clientX - this.dragStartPosition\n : event.touches[0].clientX - this.dragStartPosition;\n\n this.slides.forEach((slide) => {\n const pixelOffset =\n this.activeSlideIndex * slide.getBoundingClientRect().width;\n\n this.dragDelta = deltaX;\n\n slide.style.transform = `translate3d(${\n (-pixelOffset + this.dragDelta) / 16\n }rem, 0, 0)`;\n });\n }\n };\n\n private onPointerUp = () => {\n this.dragging = false;\n this.dragStartPosition = undefined;\n\n const dragRatio =\n this.dragDelta /\n this.slides[this.activeSlideIndex].getBoundingClientRect().width;\n\n this.dragDelta = 0;\n\n const shouldMoveToPreviousSlide = dragRatio > 0.2;\n const shouldMoveToNextSlide = dragRatio < -0.2;\n\n this.slides.forEach((slide) => {\n slide.style.transition = \"\";\n });\n\n if (shouldMoveToPreviousSlide) {\n this.onPreviousSlideClick();\n } else if (shouldMoveToNextSlide) {\n this.onNextSlideClick();\n } else {\n this.resetSlidePositions();\n }\n };\n\n render() {\n const showPagination = this.slides.length > 1;\n\n const className = classnames(\"lightbox\", {\n \"lightbox--closing\": this.closing,\n });\n\n return (\n <Host>\n <section\n aria-hidden=\"true\"\n aria-label={this.label}\n class={className}\n id=\"lightbox\"\n onMouseDown={this.onPointerDown}\n onMouseMove={this.onPointerMove}\n onMouseOut={this.onPointerUp}\n onMouseUp={this.onPointerUp}\n onKeyDown={this.onKeyDown}\n onTouchEnd={this.onPointerUp}\n onTouchMove={this.onPointerMove}\n onTouchStart={this.onPointerDown}\n ref={(el) => (this.modalEl = el)}\n >\n <div class=\"lightbox__body\" role=\"document\">\n <header class=\"lightbox__header\">\n <button\n aria-label={this.closeButtonLabel}\n class=\"lightbox__close-button\"\n onClick={this.onCloseButtonClick}\n >\n <flip-icon-close></flip-icon-close>\n </button>\n <button\n aria-label={this.downloadButtonLabel}\n class=\"lightbox__download-button\"\n onClick={this.onDownloadButtonClick}\n >\n <flip-icon-download></flip-icon-download>\n </button>\n </header>\n <div\n aria-roledescription=\"carousel\"\n class=\"lightbox__content\"\n role=\"group\"\n >\n <div\n aria-atomic=\"false\"\n aria-live=\"polite\"\n class=\"lightbox__slides\"\n >\n <slot onSlotchange={this.registerSlides}></slot>\n </div>\n </div>\n <div class=\"lightbox__controls\">\n <button\n aria-label={this.previousSlideButtonLabel}\n class=\"lightbox__previous-slide-button\"\n disabled={this.activeSlideIndex === 0}\n onClick={this.onPreviousSlideClick}\n >\n <flip-icon-arrow-left></flip-icon-arrow-left>\n </button>\n <button\n aria-label={this.nextSlideButtonLabel}\n class=\"lightbox__next-slide-button\"\n disabled={this.activeSlideIndex === this.slides.length - 1}\n onClick={this.onNextSlideClick}\n >\n <flip-icon-arrow-right></flip-icon-arrow-right>\n </button>\n </div>\n {showPagination && (\n <span class=\"lightbox__pagination\">\n <span aria-current=\"page\">{this.activeSlideIndex + 1}</span> /{\" \"}\n {this.slides.length}\n </span>\n )}\n </div>\n </section>\n </Host>\n );\n }\n}\n"]}
@@ -0,0 +1,44 @@
1
+ import { generateStoryElement } from "../../utils";
2
+ import Docs from "./flip-lightbox.mdx";
3
+ export default {
4
+ component: "flip-lightbox",
5
+ parameters: {
6
+ docs: {
7
+ page: Docs,
8
+ source: {
9
+ code: `<flip-lightbox id="lightbox" label="Lightbox">
10
+ <flip-file-viewer description="Cute dog in a blaket." file="/sample.jpg" type="image/jpeg"></flip-file-viewer>
11
+ <flip-file-viewer description="Another cute dog in a blanket." file="/sample-2.jpg" type="image/jpeg"></flip-file-viewer>
12
+ <flip-file-viewer description="Black puppy." file="/sample-3.jpg" type="image/jpeg"></flip-file-viewer>
13
+ <flip-file-viewer file="/sample.mp4" type="video/mp4"></flip-file-viewer>
14
+ </flip-lightbox>
15
+
16
+ <script>
17
+ const lightbox = document.body.querySelector('#lightbox');
18
+ lightbox.open();
19
+ </script>`,
20
+ },
21
+ },
22
+ },
23
+ title: "Components/FlipLightbox",
24
+ };
25
+ const Template = (args) => {
26
+ const container = document.createElement("div");
27
+ const trigger = document.createElement("flip-button");
28
+ const element = generateStoryElement("flip-lightbox", args);
29
+ trigger.label = "Open lightbox";
30
+ trigger.addEventListener("click", () => element.open());
31
+ element.innerHTML = `
32
+ <flip-file-viewer description="Cute dog in a blanket." file="/sample.jpg" type="image/jpeg"></flip-file-viewer>
33
+ <flip-file-viewer description="Another cute dog in a blanket." file="/sample-2.jpg" type="image/jpeg"></flip-file-viewer>
34
+ <flip-file-viewer description="Black puppy." file="/sample-3.jpg" type="image/jpeg"></flip-file-viewer>
35
+ <flip-file-viewer file="/sample.mp4" type="video/mp4"></flip-file-viewer>
36
+ `;
37
+ container.append(trigger, element);
38
+ return container;
39
+ };
40
+ export const FlipLightbox = Template.bind({});
41
+ FlipLightbox.args = {
42
+ label: "Lightbox",
43
+ };
44
+ //# sourceMappingURL=flip-lightbox.stories.js.map