@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
@@ -0,0 +1,255 @@
1
+ import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
2
+ import { A as A11yDialog } from './a11y-dialog.esm.js';
3
+ import { d as disableBodyScroll, e as enableBodyScroll } from './bodyScrollLock.esm.js';
4
+ import { c as classnames } from './index2.js';
5
+ import { q as querySelectorAllDeep } from './utils.js';
6
+ import { d as defineCustomElement$5 } from './flip-icon-arrow-left2.js';
7
+ import { d as defineCustomElement$4 } from './flip-icon-arrow-right2.js';
8
+ import { d as defineCustomElement$3 } from './flip-icon-close2.js';
9
+ import { d as defineCustomElement$2 } from './flip-icon-download2.js';
10
+
11
+ const flipLightboxCss = ":host{display:block}:host *{box-sizing:border-box}.lightbox{position:fixed;z-index:var(--s-z-40);background-color:rgba(0, 0, 0, 1);inset:0}.lightbox[aria-hidden=\"true\"]{display:none}@media (min-width: 768px){.lightbox{background-color:rgba(0, 0, 0, 0.6)}}.lightbox:not(.lightbox--closing) .lightbox__body{-webkit-animation:0.15s lightbox-fade-in;animation:0.15s lightbox-fade-in}@media (prefers-reduced-motion){.lightbox:not(.lightbox--closing) .lightbox__body{-webkit-animation:none;animation:none}}.lightbox--closing{-webkit-animation:0.15s lightbox-fade-out;animation:0.15s lightbox-fade-out;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@media (prefers-reduced-motion){.lightbox--closing{-webkit-animation:none;animation:none}}.lightbox__body{position:relative;width:100%;height:100%}.lightbox__header{position:absolute;z-index:1;top:0;right:0;left:0;display:flex;padding:var(--s-space-12) var(--s-space-16);justify-content:space-between;align-items:flex-start;pointer-events:none}.lightbox__controls{position:absolute;z-index:1;top:50%;right:0;left:0;display:none;padding-right:var(--s-space-16);padding-left:var(--s-space-16);justify-content:space-between;align-items:flex-start;pointer-events:none}@media (min-width: 768px){.lightbox__controls{display:flex}}.lightbox__close-button,.lightbox__download-button,.lightbox__previous-slide-button,.lightbox__next-slide-button{display:inline-flex;width:2.5rem;height:2.5rem;justify-content:center;align-items:center;border:none;border-radius:50%;color:var(--s-icon-on-image);background-color:rgba(0, 0, 0, 0.6);cursor:pointer;transition:opacity 0.15s;pointer-events:auto}.lightbox__close-button:disabled,.lightbox__download-button:disabled,.lightbox__previous-slide-button:disabled,.lightbox__next-slide-button:disabled{pointer-events:none;opacity:0}.lightbox__content{overflow:hidden;width:100%;height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none}.lightbox__slides{display:flex;width:100%;height:100%}.lightbox__slides ::slotted(*){flex-basis:100%;flex-shrink:0;transition:transform 0.3s}@media (min-width: 768px){.lightbox__slides ::slotted(*){padding:4rem 5rem}}@media (prefers-reduced-motion){.lightbox__slides ::slotted(*){transition:none}}.lightbox__pagination{position:absolute;bottom:var(--s-space-32);left:50%;padding:var(--s-space-4) var(--s-space-12);border-radius:var(--s-border-radius-base);color:var(--s-text-on-image);background-color:rgba(0, 0, 0, 0.6);font-weight:var(--s-font-weight-medium);line-height:var(--s-line-height-base);transform:translateX(-50%);pointer-events:none}@media (min-width: 768px){.lightbox__pagination{display:none}}@-webkit-keyframes lightbox-fade-in{from{opacity:0}to{opacity:1}}@keyframes lightbox-fade-in{from{opacity:0}to{opacity:1}}@-webkit-keyframes lightbox-fade-out{from{opacity:1}to{opacity:0}}@keyframes lightbox-fade-out{from{opacity:1}to{opacity:0}}";
12
+
13
+ const FlipLightbox$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
14
+ constructor() {
15
+ super();
16
+ this.__registerHost();
17
+ this.__attachShadow();
18
+ this.closeButtonLabel = "Close modal";
19
+ this.downloadButtonLabel = "Download active slide content";
20
+ this.nextSlideButtonLabel = "Next slide";
21
+ this.previousSlideButtonLabel = "Previous slide";
22
+ this.activeSlideIndex = 0;
23
+ this.closing = false;
24
+ this.dragging = false;
25
+ this.mediaPlayers = [];
26
+ this.onCloseButtonClick = () => {
27
+ this.close();
28
+ };
29
+ this.onDownloadButtonClick = () => {
30
+ var _a;
31
+ (_a = this.slides[this.activeSlideIndex]) === null || _a === void 0 ? void 0 : _a.download();
32
+ };
33
+ this.onKeyDown = (event) => {
34
+ if (event.code === "Escape") {
35
+ this.close();
36
+ }
37
+ else if (event.code === "ArrowLeft") {
38
+ this.onPreviousSlideClick();
39
+ }
40
+ else if (event.code === "ArrowRight") {
41
+ this.onNextSlideClick();
42
+ }
43
+ };
44
+ this.onNextSlideClick = () => {
45
+ this.activateSlide(Math.min(this.slides.length - 1, this.activeSlideIndex + 1));
46
+ };
47
+ this.onPreviousSlideClick = () => {
48
+ this.activateSlide(Math.max(0, this.activeSlideIndex - 1));
49
+ };
50
+ this.registerSlides = () => {
51
+ this.slides = Array.from(this.el.children);
52
+ this.setSlideAttributes();
53
+ this.updateMediaPlayers();
54
+ };
55
+ this.onPointerDown = (event) => {
56
+ event.preventDefault();
57
+ this.dragging = true;
58
+ this.dragStartPosition =
59
+ event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;
60
+ this.slides.forEach((slide) => {
61
+ slide.style.transition = "none";
62
+ });
63
+ };
64
+ this.onPointerMove = (event) => {
65
+ if (this.dragging) {
66
+ event.preventDefault();
67
+ const deltaX = event instanceof MouseEvent
68
+ ? event.clientX - this.dragStartPosition
69
+ : event.touches[0].clientX - this.dragStartPosition;
70
+ this.slides.forEach((slide) => {
71
+ const pixelOffset = this.activeSlideIndex * slide.getBoundingClientRect().width;
72
+ this.dragDelta = deltaX;
73
+ slide.style.transform = `translate3d(${(-pixelOffset + this.dragDelta) / 16}rem, 0, 0)`;
74
+ });
75
+ }
76
+ };
77
+ this.onPointerUp = () => {
78
+ this.dragging = false;
79
+ this.dragStartPosition = undefined;
80
+ const dragRatio = this.dragDelta /
81
+ this.slides[this.activeSlideIndex].getBoundingClientRect().width;
82
+ this.dragDelta = 0;
83
+ const shouldMoveToPreviousSlide = dragRatio > 0.2;
84
+ const shouldMoveToNextSlide = dragRatio < -0.2;
85
+ this.slides.forEach((slide) => {
86
+ slide.style.transition = "";
87
+ });
88
+ if (shouldMoveToPreviousSlide) {
89
+ this.onPreviousSlideClick();
90
+ }
91
+ else if (shouldMoveToNextSlide) {
92
+ this.onNextSlideClick();
93
+ }
94
+ else {
95
+ this.resetSlidePositions();
96
+ }
97
+ };
98
+ }
99
+ componentWillLoad() {
100
+ this.registerSlides();
101
+ }
102
+ componentDidLoad() {
103
+ this.modal = new A11yDialog(this.modalEl);
104
+ this.activateSlide(0);
105
+ }
106
+ disconnectedCallback() {
107
+ var _a;
108
+ (_a = this.modal) === null || _a === void 0 ? void 0 : _a.destroy();
109
+ this.unlockBodyScroll();
110
+ }
111
+ /**
112
+ * Open the lightbox.
113
+ */
114
+ async open() {
115
+ this.modal.show();
116
+ this.lockBodyScroll();
117
+ }
118
+ /**
119
+ * Close the lightbox.
120
+ */
121
+ async close() {
122
+ if (this.closing) {
123
+ return;
124
+ }
125
+ this.closing = true;
126
+ this.unlockBodyScroll();
127
+ setTimeout(() => {
128
+ this.modal.hide();
129
+ this.closing = false;
130
+ }, 150);
131
+ }
132
+ /**
133
+ * Activate a slide.
134
+ * @param newActiveSlideIndex
135
+ */
136
+ async activateSlide(newActiveSlideIndex) {
137
+ this.dragging = false;
138
+ this.activeSlideIndex = newActiveSlideIndex;
139
+ this.slides.forEach((slide, index) => {
140
+ if (index === this.activeSlideIndex) {
141
+ slide.removeAttribute("aria-hidden");
142
+ slide.setAttribute("active", "true");
143
+ }
144
+ else if (index === this.activeSlideIndex - 1 ||
145
+ index === this.activeSlideIndex + 1) {
146
+ slide.setAttribute("aria-hidden", "true");
147
+ slide.setAttribute("active", "true");
148
+ }
149
+ else {
150
+ slide.setAttribute("aria-hidden", "true");
151
+ }
152
+ slide.style.transform = `translate3d(-${100 * this.activeSlideIndex}%, 0, 0)`;
153
+ });
154
+ // wait for slide animation before deactivating the slide
155
+ setTimeout(() => {
156
+ this.slides.forEach((slide, index) => {
157
+ if (index !== this.activeSlideIndex &&
158
+ index !== this.activeSlideIndex - 1 &&
159
+ index !== this.activeSlideIndex + 1) {
160
+ slide.setAttribute("active", "false");
161
+ }
162
+ });
163
+ }, 300);
164
+ this.stopAllMediaPlayers();
165
+ this.updateMediaPlayers();
166
+ }
167
+ setSlideAttributes() {
168
+ this.slides.forEach((slide) => {
169
+ slide.setAttribute("active", "false");
170
+ slide.setAttribute("aria-label", slide.file);
171
+ slide.setAttribute("aria-roledescription", "slide");
172
+ slide.setAttribute("role", "group");
173
+ });
174
+ }
175
+ resetSlidePositions() {
176
+ this.slides.forEach((slide) => {
177
+ slide.style.transform = `translate3d(-${100 * this.activeSlideIndex}%, 0, 0)`;
178
+ });
179
+ }
180
+ lockBodyScroll() {
181
+ disableBodyScroll(this.el);
182
+ }
183
+ unlockBodyScroll() {
184
+ enableBodyScroll(this.el);
185
+ }
186
+ updateMediaPlayers() {
187
+ const mediaPlayers = querySelectorAllDeep(this.el, "video");
188
+ this.mediaPlayers = mediaPlayers;
189
+ }
190
+ stopAllMediaPlayers() {
191
+ this.mediaPlayers.forEach((mediaPlayer) => mediaPlayer.pause());
192
+ }
193
+ render() {
194
+ const showPagination = this.slides.length > 1;
195
+ const className = classnames("lightbox", {
196
+ "lightbox--closing": this.closing,
197
+ });
198
+ return (h(Host, null, 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) }, h("div", { class: "lightbox__body", role: "document" }, h("header", { class: "lightbox__header" }, h("button", { "aria-label": this.closeButtonLabel, class: "lightbox__close-button", onClick: this.onCloseButtonClick }, h("flip-icon-close", null)), h("button", { "aria-label": this.downloadButtonLabel, class: "lightbox__download-button", onClick: this.onDownloadButtonClick }, h("flip-icon-download", null))), h("div", { "aria-roledescription": "carousel", class: "lightbox__content", role: "group" }, h("div", { "aria-atomic": "false", "aria-live": "polite", class: "lightbox__slides" }, h("slot", { onSlotchange: this.registerSlides }))), h("div", { class: "lightbox__controls" }, h("button", { "aria-label": this.previousSlideButtonLabel, class: "lightbox__previous-slide-button", disabled: this.activeSlideIndex === 0, onClick: this.onPreviousSlideClick }, h("flip-icon-arrow-left", null)), h("button", { "aria-label": this.nextSlideButtonLabel, class: "lightbox__next-slide-button", disabled: this.activeSlideIndex === this.slides.length - 1, onClick: this.onNextSlideClick }, h("flip-icon-arrow-right", null))), showPagination && (h("span", { class: "lightbox__pagination" }, h("span", { "aria-current": "page" }, this.activeSlideIndex + 1), " /", " ", this.slides.length))))));
199
+ }
200
+ get el() { return this; }
201
+ static get style() { return flipLightboxCss; }
202
+ }, [1, "flip-lightbox", {
203
+ "closeButtonLabel": [1, "close-button-label"],
204
+ "downloadButtonLabel": [1, "download-button-label"],
205
+ "label": [1],
206
+ "nextSlideButtonLabel": [1, "next-slide-button-label"],
207
+ "previousSlideButtonLabel": [1, "previous-slide-button-label"],
208
+ "activeSlideIndex": [32],
209
+ "closing": [32],
210
+ "slides": [32],
211
+ "open": [64],
212
+ "close": [64],
213
+ "activateSlide": [64]
214
+ }]);
215
+ function defineCustomElement$1() {
216
+ if (typeof customElements === "undefined") {
217
+ return;
218
+ }
219
+ const components = ["flip-lightbox", "flip-icon-arrow-left", "flip-icon-arrow-right", "flip-icon-close", "flip-icon-download"];
220
+ components.forEach(tagName => { switch (tagName) {
221
+ case "flip-lightbox":
222
+ if (!customElements.get(tagName)) {
223
+ customElements.define(tagName, FlipLightbox$1);
224
+ }
225
+ break;
226
+ case "flip-icon-arrow-left":
227
+ if (!customElements.get(tagName)) {
228
+ defineCustomElement$5();
229
+ }
230
+ break;
231
+ case "flip-icon-arrow-right":
232
+ if (!customElements.get(tagName)) {
233
+ defineCustomElement$4();
234
+ }
235
+ break;
236
+ case "flip-icon-close":
237
+ if (!customElements.get(tagName)) {
238
+ defineCustomElement$3();
239
+ }
240
+ break;
241
+ case "flip-icon-download":
242
+ if (!customElements.get(tagName)) {
243
+ defineCustomElement$2();
244
+ }
245
+ break;
246
+ } });
247
+ }
248
+ defineCustomElement$1();
249
+
250
+ const FlipLightbox = FlipLightbox$1;
251
+ const defineCustomElement = defineCustomElement$1;
252
+
253
+ export { FlipLightbox, defineCustomElement };
254
+
255
+ //# sourceMappingURL=flip-lightbox.js.map
@@ -0,0 +1 @@
1
+ {"file":"flip-lightbox.js","mappings":";;;;;;;;;;AAAA,MAAM,eAAe,GAAG,q1FAAq1F;;MCmBh2FA,cAAY;EALzB;;;;IAQU,qBAAgB,GAAY,aAAa,CAAC;IAC1C,wBAAmB,GAAY,+BAA+B,CAAC;IAE/D,yBAAoB,GAAY,YAAY,CAAC;IAC7C,6BAAwB,GAAY,gBAAgB,CAAC;IAEpD,qBAAgB,GAAW,CAAC,CAAC;IAC7B,YAAO,GAAG,KAAK,CAAC;IAGjB,aAAQ,GAAY,KAAK,CAAC;IAK1B,iBAAY,GAA4C,EAAE,CAAC;IAiH3D,uBAAkB,GAAG;MAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;KACd,CAAC;IAEM,0BAAqB,GAAG;;MAC9B,MAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,0CAAE,QAAQ,EAAE,CAAC;KAChD,CAAC;IAEM,cAAS,GAAG,CAAC,KAAoB;MACvC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;OACd;WAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;QACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;OAC7B;WAAM,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;QACtC,IAAI,CAAC,gBAAgB,EAAE,CAAC;OACzB;KACF,CAAC;IAEM,qBAAgB,GAAG;MACzB,IAAI,CAAC,aAAa,CAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAC5D,CAAC;KACH,CAAC;IAEM,yBAAoB,GAAG;MAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC;KAC5D,CAAC;IAEM,mBAAc,GAAG;MACvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAgC,CAAC;MAC1E,IAAI,CAAC,kBAAkB,EAAE,CAAC;MAC1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B,CAAC;IAcM,kBAAa,GAAG,CAAC,KAA8B;MACrD,KAAK,CAAC,cAAc,EAAE,CAAC;MAEvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;MAErB,IAAI,CAAC,iBAAiB;QACpB,KAAK,YAAY,UAAU,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;MAEzE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK;QACxB,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;OACjC,CAAC,CAAC;KACJ,CAAC;IAEM,kBAAa,GAAG,CAAC,KAA8B;MACrD,IAAI,IAAI,CAAC,QAAQ,EAAE;QACjB,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,MAAM,MAAM,GACV,KAAK,YAAY,UAAU;YACvB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB;YACtC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAExD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK;UACxB,MAAM,WAAW,GACf,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;UAE9D,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;UAExB,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,eACtB,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,IAAI,EACpC,YAAY,CAAC;SACd,CAAC,CAAC;OACJ;KACF,CAAC;IAEM,gBAAW,GAAG;MACpB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;MACtB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;MAEnC,MAAM,SAAS,GACb,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;MAEnE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;MAEnB,MAAM,yBAAyB,GAAG,SAAS,GAAG,GAAG,CAAC;MAClD,MAAM,qBAAqB,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC;MAE/C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK;QACxB,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;OAC7B,CAAC,CAAC;MAEH,IAAI,yBAAyB,EAAE;QAC7B,IAAI,CAAC,oBAAoB,EAAE,CAAC;OAC7B;WAAM,IAAI,qBAAqB,EAAE;QAChC,IAAI,CAAC,gBAAgB,EAAE,CAAC;OACzB;WAAM;QACL,IAAI,CAAC,mBAAmB,EAAE,CAAC;OAC5B;KACF,CAAC;GAqFH;EA7SC,iBAAiB;IACf,IAAI,CAAC,cAAc,EAAE,CAAC;GACvB;EAED,gBAAgB;IACd,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;GACvB;EAED,oBAAoB;;IAClB,MAAA,IAAI,CAAC,KAAK,0CAAE,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;GACzB;;;;EAMD,MAAM,IAAI;IACR,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAClB,IAAI,CAAC,cAAc,EAAE,CAAC;GACvB;;;;EAMD,MAAM,KAAK;IACT,IAAI,IAAI,CAAC,OAAO,EAAE;MAChB,OAAO;KACR;IAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAExB,UAAU,CAAC;MACT,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;MAClB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB,EAAE,GAAG,CAAC,CAAC;GACT;;;;;EAOD,MAAM,aAAa,CAAC,mBAA2B;IAC7C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACtB,IAAI,CAAC,gBAAgB,GAAG,mBAAmB,CAAC;IAE5C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK;MAC/B,IAAI,KAAK,KAAK,IAAI,CAAC,gBAAgB,EAAE;QACnC,KAAK,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QACrC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;OACtC;WAAM,IACL,KAAK,KAAK,IAAI,CAAC,gBAAgB,GAAG,CAAC;QACnC,KAAK,KAAK,IAAI,CAAC,gBAAgB,GAAG,CAAC,EACnC;QACA,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC1C,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;OACtC;WAAM;QACL,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;OAC3C;MAED,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,gBACtB,GAAG,GAAG,IAAI,CAAC,gBACb,UAAU,CAAC;KACZ,CAAC,CAAC;;IAGH,UAAU,CAAC;MACT,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK;QAC/B,IACE,KAAK,KAAK,IAAI,CAAC,gBAAgB;UAC/B,KAAK,KAAK,IAAI,CAAC,gBAAgB,GAAG,CAAC;UACnC,KAAK,KAAK,IAAI,CAAC,gBAAgB,GAAG,CAAC,EACnC;UACA,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SACvC;OACF,CAAC,CAAC;KACJ,EAAE,GAAG,CAAC,CAAC;IAER,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;GAC3B;EAEO,kBAAkB;IACxB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK;MACxB,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;MACtC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;MAC7C,KAAK,CAAC,YAAY,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;MACpD,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC,CAAC;GACJ;EAEO,mBAAmB;IACzB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK;MACxB,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,gBACtB,GAAG,GAAG,IAAI,CAAC,gBACb,UAAU,CAAC;KACZ,CAAC,CAAC;GACJ;EAEO,cAAc;IACpB,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;GAC5B;EAEO,gBAAgB;IACtB,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;GAC3B;EAoCO,kBAAkB;IACxB,MAAM,YAAY,GAAG,oBAAoB,CAEvC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAEpB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;GAClC;EAEO,mBAAmB;IACzB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;GACjE;EA+DD,MAAM;IACJ,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAE9C,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,EAAE;MACvC,mBAAmB,EAAE,IAAI,CAAC,OAAO;KAClC,CAAC,CAAC;IAEH,QACE,EAAC,IAAI,QACH,8BACc,MAAM,gBACN,IAAI,CAAC,KAAK,EACtB,KAAK,EAAE,SAAS,EAChB,EAAE,EAAC,UAAU,EACb,WAAW,EAAE,IAAI,CAAC,aAAa,EAC/B,WAAW,EAAE,IAAI,CAAC,aAAa,EAC/B,UAAU,EAAE,IAAI,CAAC,WAAW,EAC5B,SAAS,EAAE,IAAI,CAAC,WAAW,EAC3B,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,UAAU,EAAE,IAAI,CAAC,WAAW,EAC5B,WAAW,EAAE,IAAI,CAAC,aAAa,EAC/B,YAAY,EAAE,IAAI,CAAC,aAAa,EAChC,GAAG,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,IAEhC,WAAK,KAAK,EAAC,gBAAgB,EAAC,IAAI,EAAC,UAAU,IACzC,cAAQ,KAAK,EAAC,kBAAkB,IAC9B,4BACc,IAAI,CAAC,gBAAgB,EACjC,KAAK,EAAC,wBAAwB,EAC9B,OAAO,EAAE,IAAI,CAAC,kBAAkB,IAEhC,0BAAmC,CAC5B,EACT,4BACc,IAAI,CAAC,mBAAmB,EACpC,KAAK,EAAC,2BAA2B,EACjC,OAAO,EAAE,IAAI,CAAC,qBAAqB,IAEnC,6BAAyC,CAClC,CACF,EACT,mCACuB,UAAU,EAC/B,KAAK,EAAC,mBAAmB,EACzB,IAAI,EAAC,OAAO,IAEZ,0BACc,OAAO,eACT,QAAQ,EAClB,KAAK,EAAC,kBAAkB,IAExB,YAAM,YAAY,EAAE,IAAI,CAAC,cAAc,GAAS,CAC5C,CACF,EACN,WAAK,KAAK,EAAC,oBAAoB,IAC7B,4BACc,IAAI,CAAC,wBAAwB,EACzC,KAAK,EAAC,iCAAiC,EACvC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,KAAK,CAAC,EACrC,OAAO,EAAE,IAAI,CAAC,oBAAoB,IAElC,+BAA6C,CACtC,EACT,4BACc,IAAI,CAAC,oBAAoB,EACrC,KAAK,EAAC,6BAA6B,EACnC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAC1D,OAAO,EAAE,IAAI,CAAC,gBAAgB,IAE9B,gCAA+C,CACxC,CACL,EACL,cAAc,KACb,YAAM,KAAK,EAAC,sBAAsB,IAChC,4BAAmB,MAAM,IAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAQ,QAAG,GAAG,EACjE,IAAI,CAAC,MAAM,CAAC,MAAM,CACd,CACR,CACG,CACE,CACL,EACP;GACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["FlipLightbox"],"sources":["./src/components/flip-lightbox/flip-lightbox.css?tag=flip-lightbox&encapsulation=shadow","./src/components/flip-lightbox/flip-lightbox.tsx"],"sourcesContent":["@import \"../../styles/media-queries.css\";\n\n:host {\n display: block;\n\n & * {\n box-sizing: border-box;\n }\n}\n\n.lightbox {\n position: fixed;\n z-index: var(--s-z-40);\n background-color: rgba(0, 0, 0, 1);\n inset: 0;\n\n &[aria-hidden=\"true\"] {\n display: none;\n }\n\n @media (--from-tablet) {\n background-color: rgba(0, 0, 0, 0.6);\n }\n}\n\n.lightbox:not(.lightbox--closing) {\n & .lightbox__body {\n animation: 0.15s lightbox-fade-in;\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n}\n\n.lightbox--closing {\n animation: 0.15s lightbox-fade-out;\n animation-fill-mode: forwards;\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n}\n\n.lightbox__body {\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n.lightbox__header {\n position: absolute;\n z-index: 1;\n top: 0;\n right: 0;\n left: 0;\n display: flex;\n padding: var(--s-space-12) var(--s-space-16);\n justify-content: space-between;\n align-items: flex-start;\n pointer-events: none;\n}\n\n.lightbox__controls {\n position: absolute;\n z-index: 1;\n top: 50%;\n right: 0;\n left: 0;\n display: none;\n padding-right: var(--s-space-16);\n padding-left: var(--s-space-16);\n justify-content: space-between;\n align-items: flex-start;\n pointer-events: none;\n\n @media (--from-tablet) {\n display: flex;\n }\n}\n\n.lightbox__close-button,\n.lightbox__download-button,\n.lightbox__previous-slide-button,\n.lightbox__next-slide-button {\n display: inline-flex;\n width: 2.5rem;\n height: 2.5rem;\n justify-content: center;\n align-items: center;\n border: none;\n border-radius: 50%;\n color: var(--s-icon-on-image);\n background-color: rgba(0, 0, 0, 0.6);\n cursor: pointer;\n transition: opacity 0.15s;\n pointer-events: auto;\n\n &:disabled {\n pointer-events: none;\n opacity: 0;\n }\n}\n\n.lightbox__content {\n overflow: hidden;\n width: 100%;\n height: 100%;\n user-select: none;\n}\n\n.lightbox__slides {\n display: flex;\n width: 100%;\n height: 100%;\n\n & ::slotted(*) {\n flex-basis: 100%;\n flex-shrink: 0;\n transition: transform 0.3s;\n\n @media (--from-tablet) {\n padding: 4rem 5rem;\n }\n\n @media (prefers-reduced-motion) {\n transition: none;\n }\n }\n}\n\n.lightbox__pagination {\n position: absolute;\n bottom: var(--s-space-32);\n left: 50%;\n padding: var(--s-space-4) var(--s-space-12);\n border-radius: var(--s-border-radius-base);\n color: var(--s-text-on-image);\n background-color: rgba(0, 0, 0, 0.6);\n font-weight: var(--s-font-weight-medium);\n line-height: var(--s-line-height-base);\n transform: translateX(-50%);\n pointer-events: none;\n\n @media (--from-tablet) {\n display: none;\n }\n}\n\n@keyframes lightbox-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes lightbox-fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n","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"],"version":3}
@@ -7,7 +7,7 @@ import { d as defineCustomElement$4 } from './flip-button-group2.js';
7
7
  import { d as defineCustomElement$3 } from './flip-heading2.js';
8
8
  import { d as defineCustomElement$2 } from './flip-stack2.js';
9
9
 
10
- const flipModalCss = ":host{--flip-ghost-button-background-default:var(--s-surface-overlay-default);--flip-ghost-button-background-hovered:var(--s-surface-overlay-hovered);--flip-ghost-button-background-pressed:var(--s-surface-overlay-pressed);display:block}:host *{box-sizing:border-box}.modal{position:fixed;z-index:var(--s-z-40);display:flex;justify-content:center;align-items:center;inset:0}.modal[aria-hidden=\"true\"]{display:none}.modal:not(.modal--closing) .modal__backdrop{-webkit-animation:0.15s modal-backdrop-fade-in;animation:0.15s modal-backdrop-fade-in}@media (prefers-reduced-motion){.modal:not(.modal--closing) .modal__backdrop{-webkit-animation:none;animation:none}}.modal:not(.modal--closing) .modal__body{-webkit-animation:0.15s modal-scale-in;animation:0.15s modal-scale-in}@media (prefers-reduced-motion){.modal:not(.modal--closing) .modal__body{-webkit-animation:none;animation:none}}.modal--closing{-webkit-animation:0.15s modal-fade-out;animation:0.15s modal-fade-out;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@media (prefers-reduced-motion){.modal--closing{-webkit-animation:none;animation:none}}@media (min-width: 768px){.modal--scrolled .modal__header{border-bottom:var(--s-border-width-default) solid var(--s-border-default)}}.modal__backdrop{position:fixed;background-color:rgba(0, 0, 0, 0.2);inset:0}.modal__body{position:relative;z-index:var(--s-z-40);display:flex;width:100vw;height:100vh;background-color:var(--s-surface-overlay-default);flex-direction:column}@media (min-width: 768px){.modal__body{width:90vw;max-width:33.75rem;height:auto;max-height:90vh;border-radius:var(--s-border-radius-xl);box-shadow:0.125rem 0.25rem 1rem rgba(0, 0, 0, 0.14)}}.modal__close-button{position:absolute;top:var(--s-space-8);left:var(--s-space-8)}@media (min-width: 768px){.modal__close-button{top:var(--s-space-16);right:var(--s-space-16);left:auto}}.modal__header{display:flex;height:3.5rem;padding-top:var(--s-space-8);padding-right:var(--s-space-16);padding-bottom:var(--s-space-8);padding-left:calc(var(--s-space-8) + 2.5rem + var(--s-space-8));flex-shrink:0;align-items:center;border-bottom:var(--s-border-width-default) solid var(--s-border-default);gap:var(--s-space-16)}@media (min-width: 768px){.modal__header{padding-top:var(--s-space-24);padding-right:calc(var(--s-space-16) + 2.5rem + var(--s-space-8));padding-bottom:var(--s-space-16);padding-left:var(--s-space-24);border-bottom:none}}.modal__heading{overflow:hidden}.modal__heading::part(heading){overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.modal__content{overflow-x:hidden;overflow-y:auto;padding-top:var(--s-space-24);padding-right:var(--s-space-16);padding-bottom:var(--s-space-24);padding-left:var(--s-space-16);flex-grow:1;line-height:var(--s-line-height-base)}.modal__content ::slotted(*){margin:0}@media (min-width: 768px){.modal__content{padding-top:0;padding-right:var(--s-space-24);padding-bottom:var(--s-space-32);padding-left:var(--s-space-24)}}.modal__controls{display:flex;padding-top:var(--s-space-16);padding-right:var(--s-space-24);padding-bottom:var(--s-space-16);padding-left:var(--s-space-24);flex-shrink:0;justify-content:flex-end;border-top:var(--s-border-width-default) solid var(--s-border-default)}@-webkit-keyframes modal-scale-in{from{transform:scale(0)}to{transform:scale(1)}}@keyframes modal-scale-in{from{transform:scale(0)}to{transform:scale(1)}}@-webkit-keyframes modal-backdrop-fade-in{from{opacity:0}to{opacity:1}}@keyframes modal-backdrop-fade-in{from{opacity:0}to{opacity:1}}@-webkit-keyframes modal-fade-out{from{opacity:1}to{opacity:0}}@keyframes modal-fade-out{from{opacity:1}to{opacity:0}}";
10
+ const flipModalCss = ":host{--flip-ghost-button-background-default:var(--s-surface-overlay-default);--flip-ghost-button-background-hovered:var(--s-surface-overlay-hovered);--flip-ghost-button-background-pressed:var(--s-surface-overlay-pressed);display:block}:host *{box-sizing:border-box}.modal{position:fixed;z-index:var(--s-z-40);display:flex;justify-content:center;align-items:center;inset:0}.modal[aria-hidden=\"true\"]{display:none}.modal:not(.modal--closing) .modal__backdrop{-webkit-animation:0.15s modal-backdrop-fade-in;animation:0.15s modal-backdrop-fade-in}@media (prefers-reduced-motion){.modal:not(.modal--closing) .modal__backdrop{-webkit-animation:none;animation:none}}.modal:not(.modal--closing) .modal__body{-webkit-animation:0.15s modal-scale-in;animation:0.15s modal-scale-in}@media (prefers-reduced-motion){.modal:not(.modal--closing) .modal__body{-webkit-animation:none;animation:none}}.modal--closing{-webkit-animation:0.15s modal-fade-out;animation:0.15s modal-fade-out;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@media (prefers-reduced-motion){.modal--closing{-webkit-animation:none;animation:none}}@media (min-width: 768px){.modal--scrollable .modal__content{padding-bottom:0}}.modal--scrollable:not(.modal--scrolled-down) .modal__controls{border-top:var(--s-border-width-default) solid var(--s-border-default)}@media (min-width: 768px){.modal--scrolled .modal__header{border-bottom:var(--s-border-width-default) solid var(--s-border-default)}}.modal__backdrop{position:fixed;background-color:rgba(0, 0, 0, 0.2);inset:0}.modal__body{position:relative;z-index:var(--s-z-40);display:flex;width:100vw;height:100vh;background-color:var(--s-surface-overlay-default);flex-direction:column}@media (min-width: 768px){.modal__body{width:90vw;max-width:33.75rem;height:auto;max-height:90vh;border-radius:var(--s-border-radius-base);box-shadow:0.125rem 0.25rem 1rem rgba(0, 0, 0, 0.14)}}.modal__close-button{position:absolute;top:var(--s-space-8);left:var(--s-space-8)}@media (min-width: 768px){.modal__close-button{top:var(--s-space-16);right:var(--s-space-16);left:auto}}.modal__header{display:flex;height:3.5rem;padding-top:var(--s-space-8);padding-right:var(--s-space-16);padding-bottom:var(--s-space-8);padding-left:calc(var(--s-space-8) + 2.5rem + var(--s-space-8));flex-shrink:0;align-items:center;border-bottom:var(--s-border-width-default) solid var(--s-border-default);gap:var(--s-space-16)}@media (min-width: 768px){.modal__header{height:4.125rem;padding-top:var(--s-space-24);padding-right:calc(var(--s-space-16) + 2.5rem + var(--s-space-8));padding-bottom:var(--s-space-16);padding-left:var(--s-space-24);border-bottom:none}}.modal__heading{overflow:hidden}.modal__heading::part(heading){overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.modal__content{overflow-x:hidden;overflow-y:auto;padding-top:var(--s-space-24);padding-right:var(--s-space-16);padding-bottom:var(--s-space-24);padding-left:var(--s-space-16);flex-grow:1;line-height:var(--s-line-height-base)}.modal__content ::slotted(*){margin:0}@media (min-width: 768px){.modal__content{padding-top:0;padding-right:var(--s-space-24);padding-bottom:var(--s-space-16);padding-left:var(--s-space-24)}}.modal__controls{display:flex;padding-top:var(--s-space-16);padding-right:var(--s-space-24);padding-bottom:var(--s-space-16);padding-left:var(--s-space-24);flex-shrink:0;justify-content:flex-end}@-webkit-keyframes modal-scale-in{from{transform:scale(0)}to{transform:scale(1)}}@keyframes modal-scale-in{from{transform:scale(0)}to{transform:scale(1)}}@-webkit-keyframes modal-backdrop-fade-in{from{opacity:0}to{opacity:1}}@keyframes modal-backdrop-fade-in{from{opacity:0}to{opacity:1}}@-webkit-keyframes modal-fade-out{from{opacity:1}to{opacity:0}}@keyframes modal-fade-out{from{opacity:1}to{opacity:0}}";
11
11
 
12
12
  const FlipModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
13
13
  constructor() {
@@ -18,7 +18,9 @@ const FlipModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
18
18
  this.secondaryAction = createEvent(this, "secondaryAction", 7);
19
19
  this.closeButtonLabel = "Close modal";
20
20
  this.closing = false;
21
+ this.scrollable = false;
21
22
  this.scrolled = false;
23
+ this.scrolledDown = false;
22
24
  this.onKeyDown = (event) => {
23
25
  if (event.code === "Escape") {
24
26
  this.close();
@@ -39,11 +41,19 @@ const FlipModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
39
41
  this.close();
40
42
  };
41
43
  this.determineScrollStatus = () => {
42
- var _a;
44
+ var _a, _b, _c, _d, _e, _f;
43
45
  const scrolled = ((_a = this.scrollContainer) === null || _a === void 0 ? void 0 : _a.scrollTop) > 0;
46
+ const scrolledDown = Math.ceil(((_b = this.scrollContainer) === null || _b === void 0 ? void 0 : _b.scrollTop) + ((_c = this.scrollContainer) === null || _c === void 0 ? void 0 : _c.offsetHeight)) >= ((_d = this.scrollContainer) === null || _d === void 0 ? void 0 : _d.scrollHeight);
47
+ const scrollable = ((_e = this.scrollContainer) === null || _e === void 0 ? void 0 : _e.scrollHeight) > ((_f = this.scrollContainer) === null || _f === void 0 ? void 0 : _f.offsetHeight);
44
48
  if (scrolled !== this.scrolled) {
45
49
  this.scrolled = scrolled;
46
50
  }
51
+ if (scrolledDown !== this.scrolledDown) {
52
+ this.scrolledDown = scrolledDown;
53
+ }
54
+ if (scrollable !== this.scrollable) {
55
+ this.scrollable = scrollable;
56
+ }
47
57
  };
48
58
  }
49
59
  componentDidLoad() {
@@ -89,7 +99,9 @@ const FlipModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
89
99
  render() {
90
100
  const className = classnames("modal", {
91
101
  "modal--closing": this.closing,
102
+ "modal--scrollable": this.scrollable,
92
103
  "modal--scrolled": this.scrolled,
104
+ "modal--scrolled-down": this.scrolledDown,
93
105
  });
94
106
  return (h(Host, null, h("section", { "aria-hidden": "true", "aria-label": this.label, class: className, id: "modal", onKeyDown: this.onKeyDown, ref: (el) => (this.modalEl = el) }, h("div", { class: "modal__backdrop", onClick: this.onBackdropClick }), h("div", { class: "modal__body", role: "document" }, h("flip-button", { class: "modal__close-button", hideLabel: true, icon: "<flip-icon-close></flip-icon-close>", label: this.closeButtonLabel, onClick: this.onCloseButtonClick }), h("header", { class: "modal__header" }, h("flip-heading", { as: "h2", class: "modal__heading", level: 3, text: this.label })), h("div", { class: "modal__content", onScroll: this.determineScrollStatus, ref: (el) => (this.scrollContainer = el) }, h("slot", null)), h("footer", { class: "modal__controls" }, h("flip-button-group", { wrap: true }, this.secondaryActionLabel && (h("flip-button", { label: this.secondaryActionLabel, onClick: this.onSecondaryAction })), this.primaryActionLabel && (h("flip-button", { intent: "primary", label: this.primaryActionLabel, onClick: this.onPrimaryAction, variant: "flat" }))))))));
95
107
  }
@@ -100,7 +112,9 @@ const FlipModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
100
112
  "primaryActionLabel": [1, "primary-action-label"],
101
113
  "secondaryActionLabel": [1, "secondary-action-label"],
102
114
  "closing": [32],
115
+ "scrollable": [32],
103
116
  "scrolled": [32],
117
+ "scrolledDown": [32],
104
118
  "open": [64],
105
119
  "close": [64]
106
120
  }, [[9, "resize", "onWindowResize"]]]);
@@ -1 +1 @@
1
- {"file":"flip-modal.js","mappings":"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","names":["FlipModal"],"sources":["./src/components/flip-modal/flip-modal.css?tag=flip-modal&encapsulation=shadow","./src/components/flip-modal/flip-modal.tsx"],"sourcesContent":["@import \"../../styles/media-queries.css\";\n\n:host {\n --flip-ghost-button-background-default: var(--s-surface-overlay-default);\n --flip-ghost-button-background-hovered: var(--s-surface-overlay-hovered);\n --flip-ghost-button-background-pressed: var(--s-surface-overlay-pressed);\n\n display: block;\n\n & * {\n box-sizing: border-box;\n }\n}\n\n.modal {\n position: fixed;\n z-index: var(--s-z-40);\n display: flex;\n justify-content: center;\n align-items: center;\n inset: 0;\n\n &[aria-hidden=\"true\"] {\n display: none;\n }\n}\n\n.modal:not(.modal--closing) {\n & .modal__backdrop {\n animation: 0.15s modal-backdrop-fade-in;\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n\n & .modal__body {\n animation: 0.15s modal-scale-in;\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n}\n\n.modal--closing {\n animation: 0.15s modal-fade-out;\n animation-fill-mode: forwards;\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n}\n\n.modal--scrolled {\n @media (--from-tablet) {\n & .modal__header {\n border-bottom: var(--s-border-width-default) solid var(--s-border-default);\n }\n }\n}\n\n.modal__backdrop {\n position: fixed;\n background-color: rgba(0, 0, 0, 0.2);\n inset: 0;\n}\n\n.modal__body {\n position: relative;\n z-index: var(--s-z-40);\n display: flex;\n width: 100vw;\n height: 100vh;\n background-color: var(--s-surface-overlay-default);\n flex-direction: column;\n\n @media (--from-tablet) {\n width: 90vw;\n max-width: 33.75rem;\n height: auto;\n max-height: 90vh;\n border-radius: var(--s-border-radius-xl);\n box-shadow: 0.125rem 0.25rem 1rem rgba(0, 0, 0, 0.14);\n }\n}\n\n.modal__close-button {\n position: absolute;\n top: var(--s-space-8);\n left: var(--s-space-8);\n\n @media (--from-tablet) {\n top: var(--s-space-16);\n right: var(--s-space-16);\n left: auto;\n }\n}\n\n.modal__header {\n display: flex;\n height: 3.5rem;\n padding-top: var(--s-space-8);\n padding-right: var(--s-space-16);\n padding-bottom: var(--s-space-8);\n padding-left: calc(var(--s-space-8) + 2.5rem + var(--s-space-8));\n flex-shrink: 0;\n align-items: center;\n border-bottom: var(--s-border-width-default) solid var(--s-border-default);\n gap: var(--s-space-16);\n\n @media (--from-tablet) {\n padding-top: var(--s-space-24);\n padding-right: calc(var(--s-space-16) + 2.5rem + var(--s-space-8));\n padding-bottom: var(--s-space-16);\n padding-left: var(--s-space-24);\n border-bottom: none;\n }\n}\n\n.modal__heading {\n overflow: hidden;\n\n &::part(heading) {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n}\n\n.modal__content {\n overflow-x: hidden;\n overflow-y: auto;\n padding-top: var(--s-space-24);\n padding-right: var(--s-space-16);\n padding-bottom: var(--s-space-24);\n padding-left: var(--s-space-16);\n flex-grow: 1;\n line-height: var(--s-line-height-base);\n\n & ::slotted(*) {\n margin: 0;\n }\n\n @media (--from-tablet) {\n padding-top: 0;\n padding-right: var(--s-space-24);\n padding-bottom: var(--s-space-32);\n padding-left: var(--s-space-24);\n }\n}\n\n.modal__controls {\n display: flex;\n padding-top: var(--s-space-16);\n padding-right: var(--s-space-24);\n padding-bottom: var(--s-space-16);\n padding-left: var(--s-space-24);\n flex-shrink: 0;\n justify-content: flex-end;\n border-top: var(--s-border-width-default) solid var(--s-border-default);\n}\n\n@keyframes modal-scale-in {\n from {\n transform: scale(0);\n }\n to {\n transform: scale(1);\n }\n}\n\n@keyframes modal-backdrop-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes modal-fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n","import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\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\";\n\n@Component({\n shadow: true,\n styleUrl: \"flip-modal.css\",\n tag: \"flip-modal\",\n})\nexport class FlipModal {\n @Prop() closeButtonLabel?: string = \"Close modal\";\n @Prop() label!: string;\n @Prop() primaryActionLabel?: string;\n @Prop() secondaryActionLabel?: string;\n\n @Event() primaryAction: EventEmitter<MouseEvent>;\n @Event() secondaryAction: EventEmitter<MouseEvent>;\n\n @State() closing = false;\n @State() scrolled = false;\n\n private modal: A11yDialog;\n private modalEl: HTMLElement;\n private scrollContainer: HTMLElement;\n\n componentDidLoad() {\n this.modal = new A11yDialog(this.modalEl);\n this.determineScrollStatus();\n }\n\n disconnectedCallback() {\n this.modal?.destroy();\n this.unlockBodyScroll();\n }\n\n @Listen(\"resize\", { target: \"window\" })\n onWindowResize() {\n this.determineScrollStatus();\n }\n\n /**\n * Open the modal.\n */\n @Method()\n async open() {\n this.modal.show();\n this.lockBodyScroll();\n this.determineScrollStatus();\n }\n\n /**\n * Close the modal.\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 onKeyDown = (event: KeyboardEvent) => {\n if (event.code === \"Escape\") {\n this.close();\n }\n };\n\n private onBackdropClick = () => {\n this.close();\n };\n\n private onCloseButtonClick = () => {\n this.close();\n };\n\n private onPrimaryAction = (event: MouseEvent) => {\n this.primaryAction.emit(event);\n this.close();\n };\n\n private onSecondaryAction = (event: MouseEvent) => {\n this.secondaryAction.emit(event);\n this.close();\n };\n\n private determineScrollStatus = () => {\n const scrolled = this.scrollContainer?.scrollTop > 0;\n\n if (scrolled !== this.scrolled) {\n this.scrolled = scrolled;\n }\n };\n\n private lockBodyScroll() {\n disableBodyScroll(this.scrollContainer);\n }\n\n private unlockBodyScroll() {\n enableBodyScroll(this.scrollContainer);\n }\n\n render() {\n const className = classnames(\"modal\", {\n \"modal--closing\": this.closing,\n \"modal--scrolled\": this.scrolled,\n });\n\n return (\n <Host>\n <section\n aria-hidden=\"true\"\n aria-label={this.label}\n class={className}\n id=\"modal\"\n onKeyDown={this.onKeyDown}\n ref={(el) => (this.modalEl = el)}\n >\n <div class=\"modal__backdrop\" onClick={this.onBackdropClick}></div>\n <div class=\"modal__body\" role=\"document\">\n <flip-button\n class=\"modal__close-button\"\n hideLabel\n icon=\"<flip-icon-close></flip-icon-close>\"\n label={this.closeButtonLabel}\n onClick={this.onCloseButtonClick}\n ></flip-button>\n <header class=\"modal__header\">\n <flip-heading\n as=\"h2\"\n class=\"modal__heading\"\n level={3}\n text={this.label}\n ></flip-heading>\n </header>\n <div\n class=\"modal__content\"\n onScroll={this.determineScrollStatus}\n ref={(el) => (this.scrollContainer = el)}\n >\n <slot></slot>\n </div>\n <footer class=\"modal__controls\">\n <flip-button-group wrap>\n {this.secondaryActionLabel && (\n <flip-button\n label={this.secondaryActionLabel}\n onClick={this.onSecondaryAction}\n ></flip-button>\n )}\n {this.primaryActionLabel && (\n <flip-button\n intent=\"primary\"\n label={this.primaryActionLabel}\n onClick={this.onPrimaryAction}\n variant=\"flat\"\n ></flip-button>\n )}\n </flip-button-group>\n </footer>\n </div>\n </section>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"flip-modal.js","mappings":";;;;;;;;;AAAA,MAAM,YAAY,GAAG,ktHAAktH;;MCoB1tHA,WAAS;EALtB;;;;;;IAMU,qBAAgB,GAAY,aAAa,CAAC;IAQzC,YAAO,GAAG,KAAK,CAAC;IAChB,eAAU,GAAG,KAAK,CAAC;IACnB,aAAQ,GAAG,KAAK,CAAC;IACjB,iBAAY,GAAG,KAAK,CAAC;IAiD9B,cAAS,GAAG,CAAC,KAAoB;MAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;OACd;KACF,CAAC;IAEM,oBAAe,GAAG;MACxB,IAAI,CAAC,KAAK,EAAE,CAAC;KACd,CAAC;IAEM,uBAAkB,GAAG;MAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;KACd,CAAC;IAEM,oBAAe,GAAG,CAAC,KAAiB;MAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;MAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;KACd,CAAC;IAEM,sBAAiB,GAAG,CAAC,KAAiB;MAC5C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;MACjC,IAAI,CAAC,KAAK,EAAE,CAAC;KACd,CAAC;IAEM,0BAAqB,GAAG;;MAC9B,MAAM,QAAQ,GAAG,CAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,SAAS,IAAG,CAAC,CAAC;MAErD,MAAM,YAAY,GAChB,IAAI,CAAC,IAAI,CACP,CAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,SAAS,KAAG,MAAA,IAAI,CAAC,eAAe,0CAAE,YAAY,CAAA,CACrE,KAAI,MAAA,IAAI,CAAC,eAAe,0CAAE,YAAY,CAAA,CAAC;MAE1C,MAAM,UAAU,GACd,CAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,YAAY,KAAG,MAAA,IAAI,CAAC,eAAe,0CAAE,YAAY,CAAA,CAAC;MAE1E,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE;QAC9B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;OAC1B;MAED,IAAI,YAAY,KAAK,IAAI,CAAC,YAAY,EAAE;QACtC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;OAClC;MAED,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;QAClC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;OAC9B;KACF,CAAC;GA2EH;EApKC,gBAAgB;IACd,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,qBAAqB,EAAE,CAAC;GAC9B;EAED,oBAAoB;;IAClB,MAAA,IAAI,CAAC,KAAK,0CAAE,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;GACzB;EAGD,cAAc;IACZ,IAAI,CAAC,qBAAqB,EAAE,CAAC;GAC9B;;;;EAMD,MAAM,IAAI;IACR,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAClB,IAAI,CAAC,cAAc,EAAE,CAAC;IACtB,IAAI,CAAC,qBAAqB,EAAE,CAAC;GAC9B;;;;EAMD,MAAM,KAAK;IACT,IAAI,IAAI,CAAC,OAAO,EAAE;MAChB,OAAO;KACR;IAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAExB,UAAU,CAAC;MACT,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;MAClB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB,EAAE,GAAG,CAAC,CAAC;GACT;EAkDO,cAAc;IACpB,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;GACzC;EAEO,gBAAgB;IACtB,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;GACxC;EAED,MAAM;IACJ,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE;MACpC,gBAAgB,EAAE,IAAI,CAAC,OAAO;MAC9B,mBAAmB,EAAE,IAAI,CAAC,UAAU;MACpC,iBAAiB,EAAE,IAAI,CAAC,QAAQ;MAChC,sBAAsB,EAAE,IAAI,CAAC,YAAY;KAC1C,CAAC,CAAC;IAEH,QACE,EAAC,IAAI,QACH,8BACc,MAAM,gBACN,IAAI,CAAC,KAAK,EACtB,KAAK,EAAE,SAAS,EAChB,EAAE,EAAC,OAAO,EACV,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,GAAG,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,IAEhC,WAAK,KAAK,EAAC,iBAAiB,EAAC,OAAO,EAAE,IAAI,CAAC,eAAe,GAAQ,EAClE,WAAK,KAAK,EAAC,aAAa,EAAC,IAAI,EAAC,UAAU,IACtC,mBACE,KAAK,EAAC,qBAAqB,EAC3B,SAAS,QACT,IAAI,EAAC,qCAAqC,EAC1C,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAC5B,OAAO,EAAE,IAAI,CAAC,kBAAkB,GACnB,EACf,cAAQ,KAAK,EAAC,eAAe,IAC3B,oBACE,EAAE,EAAC,IAAI,EACP,KAAK,EAAC,gBAAgB,EACtB,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,IAAI,CAAC,KAAK,GACF,CACT,EACT,WACE,KAAK,EAAC,gBAAgB,EACtB,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EACpC,GAAG,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,IAExC,eAAa,CACT,EACN,cAAQ,KAAK,EAAC,iBAAiB,IAC7B,yBAAmB,IAAI,UACpB,IAAI,CAAC,oBAAoB,KACxB,mBACE,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAChC,OAAO,EAAE,IAAI,CAAC,iBAAiB,GAClB,CAChB,EACA,IAAI,CAAC,kBAAkB,KACtB,mBACE,MAAM,EAAC,SAAS,EAChB,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAC9B,OAAO,EAAE,IAAI,CAAC,eAAe,EAC7B,OAAO,EAAC,MAAM,GACD,CAChB,CACiB,CACb,CACL,CACE,CACL,EACP;GACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["FlipModal"],"sources":["./src/components/flip-modal/flip-modal.css?tag=flip-modal&encapsulation=shadow","./src/components/flip-modal/flip-modal.tsx"],"sourcesContent":["@import \"../../styles/media-queries.css\";\n\n:host {\n --flip-ghost-button-background-default: var(--s-surface-overlay-default);\n --flip-ghost-button-background-hovered: var(--s-surface-overlay-hovered);\n --flip-ghost-button-background-pressed: var(--s-surface-overlay-pressed);\n\n display: block;\n\n & * {\n box-sizing: border-box;\n }\n}\n\n.modal {\n position: fixed;\n z-index: var(--s-z-40);\n display: flex;\n justify-content: center;\n align-items: center;\n inset: 0;\n\n &[aria-hidden=\"true\"] {\n display: none;\n }\n}\n\n.modal:not(.modal--closing) {\n & .modal__backdrop {\n animation: 0.15s modal-backdrop-fade-in;\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n\n & .modal__body {\n animation: 0.15s modal-scale-in;\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n}\n\n.modal--closing {\n animation: 0.15s modal-fade-out;\n animation-fill-mode: forwards;\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n}\n\n.modal--scrollable {\n & .modal__content {\n @media (--from-tablet) {\n padding-bottom: 0;\n }\n }\n\n &:not(.modal--scrolled-down) {\n & .modal__controls {\n border-top: var(--s-border-width-default) solid var(--s-border-default);\n }\n }\n}\n\n.modal--scrolled {\n @media (--from-tablet) {\n & .modal__header {\n border-bottom: var(--s-border-width-default) solid var(--s-border-default);\n }\n }\n}\n\n.modal__backdrop {\n position: fixed;\n background-color: rgba(0, 0, 0, 0.2);\n inset: 0;\n}\n\n.modal__body {\n position: relative;\n z-index: var(--s-z-40);\n display: flex;\n width: 100vw;\n height: 100vh;\n background-color: var(--s-surface-overlay-default);\n flex-direction: column;\n\n @media (--from-tablet) {\n width: 90vw;\n max-width: 33.75rem;\n height: auto;\n max-height: 90vh;\n border-radius: var(--s-border-radius-base);\n box-shadow: 0.125rem 0.25rem 1rem rgba(0, 0, 0, 0.14);\n }\n}\n\n.modal__close-button {\n position: absolute;\n top: var(--s-space-8);\n left: var(--s-space-8);\n\n @media (--from-tablet) {\n top: var(--s-space-16);\n right: var(--s-space-16);\n left: auto;\n }\n}\n\n.modal__header {\n display: flex;\n height: 3.5rem;\n padding-top: var(--s-space-8);\n padding-right: var(--s-space-16);\n padding-bottom: var(--s-space-8);\n padding-left: calc(var(--s-space-8) + 2.5rem + var(--s-space-8));\n flex-shrink: 0;\n align-items: center;\n border-bottom: var(--s-border-width-default) solid var(--s-border-default);\n gap: var(--s-space-16);\n\n @media (--from-tablet) {\n height: 4.125rem;\n padding-top: var(--s-space-24);\n padding-right: calc(var(--s-space-16) + 2.5rem + var(--s-space-8));\n padding-bottom: var(--s-space-16);\n padding-left: var(--s-space-24);\n border-bottom: none;\n }\n}\n\n.modal__heading {\n overflow: hidden;\n\n &::part(heading) {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n}\n\n.modal__content {\n overflow-x: hidden;\n overflow-y: auto;\n padding-top: var(--s-space-24);\n padding-right: var(--s-space-16);\n padding-bottom: var(--s-space-24);\n padding-left: var(--s-space-16);\n flex-grow: 1;\n line-height: var(--s-line-height-base);\n\n & ::slotted(*) {\n margin: 0;\n }\n\n @media (--from-tablet) {\n padding-top: 0;\n padding-right: var(--s-space-24);\n padding-bottom: var(--s-space-16);\n padding-left: var(--s-space-24);\n }\n}\n\n.modal__controls {\n display: flex;\n padding-top: var(--s-space-16);\n padding-right: var(--s-space-24);\n padding-bottom: var(--s-space-16);\n padding-left: var(--s-space-24);\n flex-shrink: 0;\n justify-content: flex-end;\n}\n\n@keyframes modal-scale-in {\n from {\n transform: scale(0);\n }\n to {\n transform: scale(1);\n }\n}\n\n@keyframes modal-backdrop-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes modal-fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n","import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\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\";\n\n@Component({\n shadow: true,\n styleUrl: \"flip-modal.css\",\n tag: \"flip-modal\",\n})\nexport class FlipModal {\n @Prop() closeButtonLabel?: string = \"Close modal\";\n @Prop() label!: string;\n @Prop() primaryActionLabel?: string;\n @Prop() secondaryActionLabel?: string;\n\n @Event() primaryAction: EventEmitter<MouseEvent>;\n @Event() secondaryAction: EventEmitter<MouseEvent>;\n\n @State() closing = false;\n @State() scrollable = false;\n @State() scrolled = false;\n @State() scrolledDown = false;\n\n private modal: A11yDialog;\n private modalEl: HTMLElement;\n private scrollContainer: HTMLElement;\n\n componentDidLoad() {\n this.modal = new A11yDialog(this.modalEl);\n this.determineScrollStatus();\n }\n\n disconnectedCallback() {\n this.modal?.destroy();\n this.unlockBodyScroll();\n }\n\n @Listen(\"resize\", { target: \"window\" })\n onWindowResize() {\n this.determineScrollStatus();\n }\n\n /**\n * Open the modal.\n */\n @Method()\n async open() {\n this.modal.show();\n this.lockBodyScroll();\n this.determineScrollStatus();\n }\n\n /**\n * Close the modal.\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 onKeyDown = (event: KeyboardEvent) => {\n if (event.code === \"Escape\") {\n this.close();\n }\n };\n\n private onBackdropClick = () => {\n this.close();\n };\n\n private onCloseButtonClick = () => {\n this.close();\n };\n\n private onPrimaryAction = (event: MouseEvent) => {\n this.primaryAction.emit(event);\n this.close();\n };\n\n private onSecondaryAction = (event: MouseEvent) => {\n this.secondaryAction.emit(event);\n this.close();\n };\n\n private determineScrollStatus = () => {\n const scrolled = this.scrollContainer?.scrollTop > 0;\n\n const scrolledDown =\n Math.ceil(\n this.scrollContainer?.scrollTop + this.scrollContainer?.offsetHeight\n ) >= this.scrollContainer?.scrollHeight;\n\n const scrollable =\n this.scrollContainer?.scrollHeight > this.scrollContainer?.offsetHeight;\n\n if (scrolled !== this.scrolled) {\n this.scrolled = scrolled;\n }\n\n if (scrolledDown !== this.scrolledDown) {\n this.scrolledDown = scrolledDown;\n }\n\n if (scrollable !== this.scrollable) {\n this.scrollable = scrollable;\n }\n };\n\n private lockBodyScroll() {\n disableBodyScroll(this.scrollContainer);\n }\n\n private unlockBodyScroll() {\n enableBodyScroll(this.scrollContainer);\n }\n\n render() {\n const className = classnames(\"modal\", {\n \"modal--closing\": this.closing,\n \"modal--scrollable\": this.scrollable,\n \"modal--scrolled\": this.scrolled,\n \"modal--scrolled-down\": this.scrolledDown,\n });\n\n return (\n <Host>\n <section\n aria-hidden=\"true\"\n aria-label={this.label}\n class={className}\n id=\"modal\"\n onKeyDown={this.onKeyDown}\n ref={(el) => (this.modalEl = el)}\n >\n <div class=\"modal__backdrop\" onClick={this.onBackdropClick}></div>\n <div class=\"modal__body\" role=\"document\">\n <flip-button\n class=\"modal__close-button\"\n hideLabel\n icon=\"<flip-icon-close></flip-icon-close>\"\n label={this.closeButtonLabel}\n onClick={this.onCloseButtonClick}\n ></flip-button>\n <header class=\"modal__header\">\n <flip-heading\n as=\"h2\"\n class=\"modal__heading\"\n level={3}\n text={this.label}\n ></flip-heading>\n </header>\n <div\n class=\"modal__content\"\n onScroll={this.determineScrollStatus}\n ref={(el) => (this.scrollContainer = el)}\n >\n <slot></slot>\n </div>\n <footer class=\"modal__controls\">\n <flip-button-group wrap>\n {this.secondaryActionLabel && (\n <flip-button\n label={this.secondaryActionLabel}\n onClick={this.onSecondaryAction}\n ></flip-button>\n )}\n {this.primaryActionLabel && (\n <flip-button\n intent=\"primary\"\n label={this.primaryActionLabel}\n onClick={this.onPrimaryAction}\n variant=\"flat\"\n ></flip-button>\n )}\n </flip-button-group>\n </footer>\n </div>\n </section>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -4,7 +4,7 @@ import { e as enableBodyScroll, d as disableBodyScroll } from './bodyScrollLock.
4
4
  import { c as classnames } from './index2.js';
5
5
  import { i as isMobileViewport, q as querySelectorAllDeep } from './utils.js';
6
6
 
7
- const flipPopoverCss = ":host{position:relative;z-index:var(--s-z-40);display:inline-flex}:host *{box-sizing:border-box}.popover--active:not(.popover--closing) .popover__backdrop{-webkit-animation:0.15s popover-fade-in;animation:0.15s popover-fade-in}@media (prefers-reduced-motion){.popover--active:not(.popover--closing) .popover__backdrop{-webkit-animation:none;animation:none}}.popover--active:not(.popover--closing) .popover__content{-webkit-animation:0.15s popover-slide-in;animation:0.15s popover-slide-in}@media (min-width: 768px){.popover--active:not(.popover--closing) .popover__content{transform-origin:top left;-webkit-animation:0.15s popover-fade-scale-in;animation:0.15s popover-fade-scale-in}}@media (prefers-reduced-motion){.popover--active:not(.popover--closing) .popover__content{-webkit-animation:none;animation:none}}.popover--closing .popover__backdrop{-webkit-animation:0.15s popover-fade-out;animation:0.15s popover-fade-out;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@media (prefers-reduced-motion){.popover--closing .popover__backdrop{-webkit-animation:none;animation:none}}.popover--closing .popover__content{-webkit-animation:0.15s popover-slide-out;animation:0.15s popover-slide-out;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@media (min-width: 768px){.popover--closing .popover__content{-webkit-animation:0.15s popover-fade-out;animation:0.15s popover-fade-out}}@media (prefers-reduced-motion){.popover--closing .popover__content{-webkit-animation:none;animation:none}}.popover--inactive .popover__content{display:none}.popover__backdrop{position:fixed;z-index:0;background-color:rgba(0, 0, 0, 0.2);-webkit-animation:0.15s popover-backdrop-fade-in;animation:0.15s popover-backdrop-fade-in;inset:0}@media (prefers-reduced-motion){.popover__backdrop{-webkit-animation:none;animation:none}}@media (min-width: 768px){.popover__backdrop{display:none}}.popover__content{position:fixed;z-index:2;right:0;bottom:0;left:0;overflow:hidden;border-top-left-radius:var(--s-border-radius-xl);border-top-right-radius:var(--s-border-radius-xl);background-color:var(--s-surface-overlay-default)}@media (min-width: 768px){.popover__content{right:unset;bottom:unset;left:unset;max-width:22.5rem;border-radius:var(--s-border-radius-xl);-webkit-animation:none;animation:none;box-shadow:0.125rem 0.25rem 2.5rem rgba(0, 0, 0, 0.14)}}.popover__scroll-container{overflow-x:hidden;overflow-y:auto;width:100%;max-height:90vh;padding-top:var(--s-space-24);padding-bottom:var(--s-space-24);overscroll-behavior:contain}@media (min-width: 768px){.popover__scroll-container{max-height:22rem;padding-top:var(--s-space-8);padding-bottom:var(--s-space-8)}}.popover__handle{position:absolute;top:var(--s-space-8);left:50%;width:2.5rem;height:0.375rem;border-radius:0.1875rem;background-color:var(--s-border-default);transform:translatex(-50%)}@media (min-width: 768px){.popover__handle{display:none}}@-webkit-keyframes popover-slide-in{from{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes popover-slide-in{from{transform:translateY(100%)}to{transform:translateY(0)}}@-webkit-keyframes popover-slide-out{from{transform:translateY(0)}to{transform:translateY(100%)}}@keyframes popover-slide-out{from{transform:translateY(0)}to{transform:translateY(100%)}}@-webkit-keyframes popover-fade-in{from{opacity:0}to{opacity:1}}@keyframes popover-fade-in{from{opacity:0}to{opacity:1}}@-webkit-keyframes popover-fade-out{from{opacity:1}to{opacity:0}}@keyframes popover-fade-out{from{opacity:1}to{opacity:0}}@-webkit-keyframes popover-fade-scale-in{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes popover-fade-scale-in{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}";
7
+ const flipPopoverCss = ":host{position:relative;z-index:var(--s-z-40);display:inline-flex}:host *{box-sizing:border-box}.popover--active:not(.popover--closing) .popover__backdrop{-webkit-animation:0.15s popover-fade-in;animation:0.15s popover-fade-in}@media (prefers-reduced-motion){.popover--active:not(.popover--closing) .popover__backdrop{-webkit-animation:none;animation:none}}.popover--active:not(.popover--closing) .popover__content{-webkit-animation:0.15s popover-slide-in;animation:0.15s popover-slide-in}@media (min-width: 768px){.popover--active:not(.popover--closing) .popover__content{transform-origin:top left;-webkit-animation:0.15s popover-fade-scale-in;animation:0.15s popover-fade-scale-in}}@media (prefers-reduced-motion){.popover--active:not(.popover--closing) .popover__content{-webkit-animation:none;animation:none}}.popover--closing .popover__backdrop{-webkit-animation:0.15s popover-fade-out;animation:0.15s popover-fade-out;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@media (prefers-reduced-motion){.popover--closing .popover__backdrop{-webkit-animation:none;animation:none}}.popover--closing .popover__content{-webkit-animation:0.15s popover-slide-out;animation:0.15s popover-slide-out;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@media (min-width: 768px){.popover--closing .popover__content{-webkit-animation:0.15s popover-fade-out;animation:0.15s popover-fade-out}}@media (prefers-reduced-motion){.popover--closing .popover__content{-webkit-animation:none;animation:none}}.popover--inactive .popover__content{display:none}.popover__backdrop{position:fixed;z-index:0;background-color:rgba(0, 0, 0, 0.2);-webkit-animation:0.15s popover-backdrop-fade-in;animation:0.15s popover-backdrop-fade-in;inset:0}@media (prefers-reduced-motion){.popover__backdrop{-webkit-animation:none;animation:none}}@media (min-width: 768px){.popover__backdrop{display:none}}.popover__content{position:fixed;z-index:2;right:0;bottom:0;left:0;overflow:hidden;border-top-left-radius:var(--s-border-radius-xl);border-top-right-radius:var(--s-border-radius-xl);background-color:var(--s-surface-overlay-default)}@media (min-width: 768px){.popover__content{right:unset;bottom:unset;left:unset;max-width:22.5rem;border-radius:var(--s-border-radius-sm);-webkit-animation:none;animation:none;box-shadow:0.125rem 0.25rem 2.5rem rgba(0, 0, 0, 0.14)}}.popover__scroll-container{overflow-x:hidden;overflow-y:auto;width:100%;max-height:90vh;padding-top:var(--s-space-24);padding-bottom:var(--s-space-24);overscroll-behavior:contain}@media (min-width: 768px){.popover__scroll-container{max-height:22rem;padding-top:var(--s-space-8);padding-bottom:var(--s-space-8)}}.popover__handle{position:absolute;top:var(--s-space-8);left:50%;width:2.5rem;height:0.375rem;border-radius:0.1875rem;background-color:var(--s-border-default);transform:translatex(-50%)}@media (min-width: 768px){.popover__handle{display:none}}@-webkit-keyframes popover-slide-in{from{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes popover-slide-in{from{transform:translateY(100%)}to{transform:translateY(0)}}@-webkit-keyframes popover-slide-out{from{transform:translateY(0)}to{transform:translateY(100%)}}@keyframes popover-slide-out{from{transform:translateY(0)}to{transform:translateY(100%)}}@-webkit-keyframes popover-fade-in{from{opacity:0}to{opacity:1}}@keyframes popover-fade-in{from{opacity:0}to{opacity:1}}@-webkit-keyframes popover-fade-out{from{opacity:1}to{opacity:0}}@keyframes popover-fade-out{from{opacity:1}to{opacity:0}}@-webkit-keyframes popover-fade-scale-in{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes popover-fade-scale-in{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}";
8
8
 
9
9
  const FlipPopover = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
10
10
  constructor() {
@@ -53,6 +53,9 @@ const FlipPopover = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
53
53
  strategy: "fixed",
54
54
  });
55
55
  };
56
+ this.onCloseButtonClick = () => {
57
+ this.close();
58
+ };
56
59
  }
57
60
  componentDidLoad() {
58
61
  this.connectTrigger();
@@ -87,7 +90,7 @@ const FlipPopover = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
87
90
  this.updateTriggerAttributes();
88
91
  }, 150);
89
92
  this.unlockBodyScroll();
90
- (_a = this.triggerEl) === null || _a === void 0 ? void 0 : _a.focus();
93
+ (_a = this.getNativeTriggerElement()) === null || _a === void 0 ? void 0 : _a.focus();
91
94
  }
92
95
  /**
93
96
  * Open the popover.
@@ -114,23 +117,28 @@ const FlipPopover = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
114
117
  });
115
118
  }
116
119
  connectTrigger() {
117
- var _a;
118
- const triggerComponent = querySelectorAllDeep(document.body, `#${this.trigger}`)[0];
119
- this.triggerEl = ((triggerComponent === null || triggerComponent === void 0 ? void 0 : triggerComponent.children[0]) ||
120
- ((_a = triggerComponent === null || triggerComponent === void 0 ? void 0 : triggerComponent.shadowRoot) === null || _a === void 0 ? void 0 : _a.children[0]) ||
121
- triggerComponent);
120
+ this.triggerEl = querySelectorAllDeep(document.body, `#${this.trigger}`)[0];
122
121
  if (!Boolean(this.triggerEl)) {
123
122
  return;
124
123
  }
125
124
  this.triggerEl.addEventListener("click", this.toggle);
126
125
  }
126
+ getNativeTriggerElement() {
127
+ var _a, _b, _c;
128
+ return this.triggerEl.tagName.startsWith("FLIP-")
129
+ ? (((_a = this.triggerEl) === null || _a === void 0 ? void 0 : _a.children[0]) ||
130
+ ((_c = (_b = this.triggerEl) === null || _b === void 0 ? void 0 : _b.shadowRoot) === null || _c === void 0 ? void 0 : _c.children[0]) ||
131
+ this.triggerEl)
132
+ : this.triggerEl;
133
+ }
127
134
  updateTriggerAttributes() {
128
135
  if (!Boolean(this.triggerEl)) {
129
136
  return;
130
137
  }
131
- this.triggerEl.setAttribute("aria-controls", this.popoverId);
132
- this.triggerEl.setAttribute("aria-expanded", String(this.active));
133
- this.triggerEl.setAttribute("aria-haspopup", "dialog");
138
+ const nativeTriggerEl = this.getNativeTriggerElement();
139
+ nativeTriggerEl.setAttribute("aria-controls", this.popoverId);
140
+ nativeTriggerEl.setAttribute("aria-expanded", String(this.active));
141
+ nativeTriggerEl.setAttribute("aria-haspopup", "dialog");
134
142
  }
135
143
  updateChildMenuItems() {
136
144
  this.childMenuItems = querySelectorAllDeep(this.el, '[role="menuitem"]');
@@ -155,7 +163,7 @@ const FlipPopover = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
155
163
  return (h(Host, { id: this.popoverId, onFocusout: this.onFocusOut }, h("div", { class: className, onKeyDown: this.onKeydown }, h("div", { "aria-hidden": !this.active ? "true" : "false", "aria-label": this.label, class: "popover__content", role: "dialog", tabindex: "-1", ref: (el) => (this.contentContainer = el), style: {
156
164
  top: Boolean(this.position) ? `${(_a = this.position) === null || _a === void 0 ? void 0 : _a.y}px` : "",
157
165
  left: Boolean(this.position) ? `${(_b = this.position) === null || _b === void 0 ? void 0 : _b.x}px` : "",
158
- } }, h("span", { class: "popover__handle" }), h("div", { class: "popover__scroll-container", ref: (el) => (this.scrollContainer = el) }, h("slot", null))), this.active && (h("div", { class: "popover__backdrop", onClick: this.close })))));
166
+ } }, h("span", { class: "popover__handle" }), h("div", { class: "popover__scroll-container", ref: (el) => (this.scrollContainer = el) }, h("slot", null))), this.active && (h("div", { class: "popover__backdrop", onClick: this.onCloseButtonClick })))));
159
167
  }
160
168
  get el() { return this; }
161
169
  static get style() { return flipPopoverCss; }
@@ -1 +1 @@
1
- {"file":"flip-popover2.js","mappings":"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","names":[],"sources":["./src/components/flip-popover/flip-popover.css?tag=flip-popover&encapsulation=shadow","./src/components/flip-popover/flip-popover.tsx"],"sourcesContent":["@import \"../../styles/media-queries.css\";\n\n:host {\n position: relative;\n z-index: var(--s-z-40);\n display: inline-flex;\n\n & * {\n box-sizing: border-box;\n }\n}\n\n.popover--active:not(.popover--closing) {\n & .popover__backdrop {\n animation: 0.15s popover-fade-in;\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n\n & .popover__content {\n animation: 0.15s popover-slide-in;\n\n @media (--from-tablet) {\n transform-origin: top left;\n animation: 0.15s popover-fade-scale-in;\n }\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n}\n\n.popover--closing {\n & .popover__backdrop {\n animation: 0.15s popover-fade-out;\n animation-fill-mode: forwards;\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n\n & .popover__content {\n animation: 0.15s popover-slide-out;\n animation-fill-mode: forwards;\n\n @media (--from-tablet) {\n animation: 0.15s popover-fade-out;\n }\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n}\n\n.popover--inactive {\n & .popover__content {\n display: none;\n }\n}\n\n.popover__backdrop {\n position: fixed;\n z-index: 0;\n background-color: rgba(0, 0, 0, 0.2);\n animation: 0.15s popover-backdrop-fade-in;\n inset: 0;\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n\n @media (--from-tablet) {\n display: none;\n }\n}\n\n.popover__content {\n position: fixed;\n z-index: 2;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: hidden;\n border-top-left-radius: var(--s-border-radius-xl);\n border-top-right-radius: var(--s-border-radius-xl);\n background-color: var(--s-surface-overlay-default);\n\n @media (--from-tablet) {\n right: unset;\n bottom: unset;\n left: unset;\n max-width: 22.5rem;\n border-radius: var(--s-border-radius-xl);\n animation: none;\n box-shadow: 0.125rem 0.25rem 2.5rem rgba(0, 0, 0, 0.14);\n }\n}\n\n.popover__scroll-container {\n overflow-x: hidden;\n overflow-y: auto;\n width: 100%;\n max-height: 90vh;\n padding-top: var(--s-space-24);\n padding-bottom: var(--s-space-24);\n overscroll-behavior: contain;\n\n @media (--from-tablet) {\n max-height: 22rem;\n padding-top: var(--s-space-8);\n padding-bottom: var(--s-space-8);\n }\n}\n\n.popover__handle {\n position: absolute;\n top: var(--s-space-8);\n left: 50%;\n width: 2.5rem;\n height: 0.375rem;\n border-radius: 0.1875rem;\n background-color: var(--s-border-default);\n transform: translatex(-50%);\n\n @media (--from-tablet) {\n display: none;\n }\n}\n\n@keyframes popover-slide-in {\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n}\n\n@keyframes popover-slide-out {\n from {\n transform: translateY(0);\n }\n to {\n transform: translateY(100%);\n }\n}\n\n@keyframes popover-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes popover-fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n\n@keyframes popover-fade-scale-in {\n from {\n transform: scale(0);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n","import {\n autoUpdate,\n computePosition,\n ComputePositionReturn,\n flip,\n Placement,\n shift,\n} from \"@floating-ui/dom\";\nimport {\n Component,\n Element,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n} from \"@stencil/core\";\nimport { disableBodyScroll, enableBodyScroll } from \"body-scroll-lock\";\nimport classnames from \"classnames\";\nimport { isMobileViewport, querySelectorAllDeep } from \"../../utils\";\n\n/**\n * @slot slot - The popover content.\n */\n@Component({\n shadow: true,\n styleUrl: \"flip-popover.css\",\n tag: \"flip-popover\",\n})\nexport class FlipPopover {\n @Element() el: HTMLElement;\n\n @Prop() label!: string;\n @Prop() placement?: Placement = \"bottom-start\";\n @Prop() popoverId!: string;\n @Prop() trigger!: string;\n\n @State() active = false;\n @State() closing = false;\n @State() position: ComputePositionReturn;\n\n private childMenuItems: HTMLElement[];\n private disableAutoUpdate: any;\n private contentContainer: HTMLDivElement;\n private scrollContainer: HTMLDivElement;\n private triggerEl: HTMLElement;\n\n componentDidLoad() {\n this.connectTrigger();\n this.updateChildMenuItems();\n this.updateTriggerAttributes();\n }\n\n disconnectedCallback() {\n enableBodyScroll(this.scrollContainer);\n }\n\n @Listen(\"click\", { target: \"window\" })\n onWindowClick(event: MouseEvent) {\n const target = event.target as HTMLElement;\n\n if (!this.el.contains(target)) {\n this.close();\n }\n }\n\n onFocusOut = (event: FocusEvent) => {\n if (!this.active) {\n return;\n }\n\n const target =\n (event.relatedTarget as HTMLElement) || (event.target as HTMLElement);\n\n const popoverLostFocus = !this.el.contains(target);\n\n if (popoverLostFocus) {\n this.close();\n }\n };\n\n /**\n * Close the popover.\n * @returns\n */\n @Method()\n public async close() {\n if (this.closing) {\n return;\n }\n\n if (this.disableAutoUpdate) {\n this.disableAutoUpdate();\n }\n\n this.closing = true;\n\n setTimeout(() => {\n this.active = false;\n this.closing = false;\n this.updateTriggerAttributes();\n }, 150);\n\n this.unlockBodyScroll();\n\n this.triggerEl?.focus();\n }\n\n /**\n * Open the popover.\n * @returns\n */\n @Method()\n public async open() {\n this.active = true;\n\n this.updateChildMenuItems();\n this.updateTriggerAttributes();\n\n requestAnimationFrame(async () => {\n await this.reposition();\n\n if (this.childMenuItems.length > 0) {\n (this.childMenuItems[0] as HTMLElement).focus();\n } else {\n this.contentContainer.focus();\n }\n\n if (this.disableAutoUpdate) {\n this.disableAutoUpdate();\n }\n\n this.disableAutoUpdate = autoUpdate(\n this.triggerEl,\n this.contentContainer,\n this.reposition\n );\n\n this.scrollContainer.scrollTop = 0;\n\n this.lockBodyScroll();\n });\n }\n\n toggle = (event: Event) => {\n event.stopPropagation();\n\n if (this.active) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private connectTrigger() {\n const triggerComponent = querySelectorAllDeep(\n document.body,\n `#${this.trigger}`\n )[0];\n\n this.triggerEl = (triggerComponent?.children[0] ||\n triggerComponent?.shadowRoot?.children[0] ||\n triggerComponent) as HTMLElement;\n\n if (!Boolean(this.triggerEl)) {\n return;\n }\n\n this.triggerEl.addEventListener(\"click\", this.toggle);\n }\n\n private onKeydown = (event: KeyboardEvent) => {\n if (event.code === \"Escape\" && this.active) {\n this.close();\n }\n };\n\n private updateTriggerAttributes() {\n if (!Boolean(this.triggerEl)) {\n return;\n }\n\n this.triggerEl.setAttribute(\"aria-controls\", this.popoverId);\n this.triggerEl.setAttribute(\"aria-expanded\", String(this.active));\n this.triggerEl.setAttribute(\"aria-haspopup\", \"dialog\");\n }\n\n private updateChildMenuItems() {\n this.childMenuItems = querySelectorAllDeep(this.el, '[role=\"menuitem\"]');\n }\n\n private reposition = async () => {\n const mobile = isMobileViewport();\n\n if (!Boolean(this.triggerEl) || !Boolean(this.contentContainer)) {\n return;\n }\n\n if (mobile) {\n this.position = undefined;\n return;\n }\n\n this.position = await computePosition(\n this.triggerEl,\n this.contentContainer,\n {\n middleware: [shift(), flip()],\n placement: this.placement,\n strategy: \"fixed\",\n }\n );\n };\n\n private lockBodyScroll() {\n const mobile = isMobileViewport();\n\n if (!mobile) {\n return;\n }\n\n disableBodyScroll(this.scrollContainer);\n }\n\n private unlockBodyScroll() {\n enableBodyScroll(this.scrollContainer);\n }\n\n render() {\n const className = classnames(\"popover\", {\n \"popover--closing\": this.closing,\n \"popover--active\": this.active,\n \"popover--inactive\": !this.active,\n });\n\n return (\n <Host id={this.popoverId} onFocusout={this.onFocusOut}>\n <div class={className} onKeyDown={this.onKeydown}>\n <div\n aria-hidden={!this.active ? \"true\" : \"false\"}\n aria-label={this.label}\n class=\"popover__content\"\n role=\"dialog\"\n tabindex=\"-1\"\n ref={(el) => (this.contentContainer = el)}\n style={{\n top: Boolean(this.position) ? `${this.position?.y}px` : \"\",\n left: Boolean(this.position) ? `${this.position?.x}px` : \"\",\n }}\n >\n <span class=\"popover__handle\"></span>\n <div\n class=\"popover__scroll-container\"\n ref={(el) => (this.scrollContainer = el)}\n >\n <slot></slot>\n </div>\n </div>\n {this.active && (\n <div class=\"popover__backdrop\" onClick={this.close}></div>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"flip-popover2.js","mappings":"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","names":[],"sources":["./src/components/flip-popover/flip-popover.css?tag=flip-popover&encapsulation=shadow","./src/components/flip-popover/flip-popover.tsx"],"sourcesContent":["@import \"../../styles/media-queries.css\";\n\n:host {\n position: relative;\n z-index: var(--s-z-40);\n display: inline-flex;\n\n & * {\n box-sizing: border-box;\n }\n}\n\n.popover--active:not(.popover--closing) {\n & .popover__backdrop {\n animation: 0.15s popover-fade-in;\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n\n & .popover__content {\n animation: 0.15s popover-slide-in;\n\n @media (--from-tablet) {\n transform-origin: top left;\n animation: 0.15s popover-fade-scale-in;\n }\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n}\n\n.popover--closing {\n & .popover__backdrop {\n animation: 0.15s popover-fade-out;\n animation-fill-mode: forwards;\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n\n & .popover__content {\n animation: 0.15s popover-slide-out;\n animation-fill-mode: forwards;\n\n @media (--from-tablet) {\n animation: 0.15s popover-fade-out;\n }\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n}\n\n.popover--inactive {\n & .popover__content {\n display: none;\n }\n}\n\n.popover__backdrop {\n position: fixed;\n z-index: 0;\n background-color: rgba(0, 0, 0, 0.2);\n animation: 0.15s popover-backdrop-fade-in;\n inset: 0;\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n\n @media (--from-tablet) {\n display: none;\n }\n}\n\n.popover__content {\n position: fixed;\n z-index: 2;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: hidden;\n border-top-left-radius: var(--s-border-radius-xl);\n border-top-right-radius: var(--s-border-radius-xl);\n background-color: var(--s-surface-overlay-default);\n\n @media (--from-tablet) {\n right: unset;\n bottom: unset;\n left: unset;\n max-width: 22.5rem;\n border-radius: var(--s-border-radius-sm);\n animation: none;\n box-shadow: 0.125rem 0.25rem 2.5rem rgba(0, 0, 0, 0.14);\n }\n}\n\n.popover__scroll-container {\n overflow-x: hidden;\n overflow-y: auto;\n width: 100%;\n max-height: 90vh;\n padding-top: var(--s-space-24);\n padding-bottom: var(--s-space-24);\n overscroll-behavior: contain;\n\n @media (--from-tablet) {\n max-height: 22rem;\n padding-top: var(--s-space-8);\n padding-bottom: var(--s-space-8);\n }\n}\n\n.popover__handle {\n position: absolute;\n top: var(--s-space-8);\n left: 50%;\n width: 2.5rem;\n height: 0.375rem;\n border-radius: 0.1875rem;\n background-color: var(--s-border-default);\n transform: translatex(-50%);\n\n @media (--from-tablet) {\n display: none;\n }\n}\n\n@keyframes popover-slide-in {\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n}\n\n@keyframes popover-slide-out {\n from {\n transform: translateY(0);\n }\n to {\n transform: translateY(100%);\n }\n}\n\n@keyframes popover-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes popover-fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n\n@keyframes popover-fade-scale-in {\n from {\n transform: scale(0);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n","import {\n autoUpdate,\n computePosition,\n ComputePositionReturn,\n flip,\n Placement,\n shift,\n} from \"@floating-ui/dom\";\nimport {\n Component,\n Element,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n} from \"@stencil/core\";\nimport { disableBodyScroll, enableBodyScroll } from \"body-scroll-lock\";\nimport classnames from \"classnames\";\nimport { isMobileViewport, querySelectorAllDeep } from \"../../utils\";\n\n/**\n * @slot slot - The popover content.\n */\n@Component({\n shadow: true,\n styleUrl: \"flip-popover.css\",\n tag: \"flip-popover\",\n})\nexport class FlipPopover {\n @Element() el: HTMLElement;\n\n @Prop() label!: string;\n @Prop() placement?: Placement = \"bottom-start\";\n @Prop() popoverId!: string;\n @Prop() trigger!: string;\n\n @State() active = false;\n @State() closing = false;\n @State() position: ComputePositionReturn;\n\n private childMenuItems: HTMLElement[];\n private disableAutoUpdate: any;\n private contentContainer: HTMLDivElement;\n private scrollContainer: HTMLDivElement;\n private triggerEl: HTMLElement;\n\n componentDidLoad() {\n this.connectTrigger();\n this.updateChildMenuItems();\n this.updateTriggerAttributes();\n }\n\n disconnectedCallback() {\n enableBodyScroll(this.scrollContainer);\n }\n\n @Listen(\"click\", { target: \"window\" })\n onWindowClick(event: MouseEvent) {\n const target = event.target as HTMLElement;\n\n if (!this.el.contains(target)) {\n this.close();\n }\n }\n\n onFocusOut = (event: FocusEvent) => {\n if (!this.active) {\n return;\n }\n\n const target =\n (event.relatedTarget as HTMLElement) || (event.target as HTMLElement);\n\n const popoverLostFocus = !this.el.contains(target);\n\n if (popoverLostFocus) {\n this.close();\n }\n };\n\n /**\n * Close the popover.\n * @returns\n */\n @Method()\n public async close() {\n if (this.closing) {\n return;\n }\n\n if (this.disableAutoUpdate) {\n this.disableAutoUpdate();\n }\n\n this.closing = true;\n\n setTimeout(() => {\n this.active = false;\n this.closing = false;\n this.updateTriggerAttributes();\n }, 150);\n\n this.unlockBodyScroll();\n\n this.getNativeTriggerElement()?.focus();\n }\n\n /**\n * Open the popover.\n * @returns\n */\n @Method()\n public async open() {\n this.active = true;\n\n this.updateChildMenuItems();\n this.updateTriggerAttributes();\n\n requestAnimationFrame(async () => {\n await this.reposition();\n\n if (this.childMenuItems.length > 0) {\n (this.childMenuItems[0] as HTMLElement).focus();\n } else {\n this.contentContainer.focus();\n }\n\n if (this.disableAutoUpdate) {\n this.disableAutoUpdate();\n }\n\n this.disableAutoUpdate = autoUpdate(\n this.triggerEl,\n this.contentContainer,\n this.reposition\n );\n\n this.scrollContainer.scrollTop = 0;\n\n this.lockBodyScroll();\n });\n }\n\n toggle = (event: Event) => {\n event.stopPropagation();\n\n if (this.active) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private connectTrigger() {\n this.triggerEl = querySelectorAllDeep(document.body, `#${this.trigger}`)[0];\n\n if (!Boolean(this.triggerEl)) {\n return;\n }\n\n this.triggerEl.addEventListener(\"click\", this.toggle);\n }\n\n private getNativeTriggerElement() {\n return this.triggerEl.tagName.startsWith(\"FLIP-\")\n ? ((this.triggerEl?.children[0] ||\n this.triggerEl?.shadowRoot?.children[0] ||\n this.triggerEl) as HTMLElement)\n : this.triggerEl;\n }\n\n private onKeydown = (event: KeyboardEvent) => {\n if (event.code === \"Escape\" && this.active) {\n this.close();\n }\n };\n\n private updateTriggerAttributes() {\n if (!Boolean(this.triggerEl)) {\n return;\n }\n\n const nativeTriggerEl = this.getNativeTriggerElement();\n\n nativeTriggerEl.setAttribute(\"aria-controls\", this.popoverId);\n nativeTriggerEl.setAttribute(\"aria-expanded\", String(this.active));\n nativeTriggerEl.setAttribute(\"aria-haspopup\", \"dialog\");\n }\n\n private updateChildMenuItems() {\n this.childMenuItems = querySelectorAllDeep(this.el, '[role=\"menuitem\"]');\n }\n\n private reposition = async () => {\n const mobile = isMobileViewport();\n\n if (!Boolean(this.triggerEl) || !Boolean(this.contentContainer)) {\n return;\n }\n\n if (mobile) {\n this.position = undefined;\n return;\n }\n\n this.position = await computePosition(\n this.triggerEl,\n this.contentContainer,\n {\n middleware: [shift(), flip()],\n placement: this.placement,\n strategy: \"fixed\",\n }\n );\n };\n\n private lockBodyScroll() {\n const mobile = isMobileViewport();\n\n if (!mobile) {\n return;\n }\n\n disableBodyScroll(this.scrollContainer);\n }\n\n private unlockBodyScroll() {\n enableBodyScroll(this.scrollContainer);\n }\n\n private onCloseButtonClick = () => {\n this.close();\n };\n\n render() {\n const className = classnames(\"popover\", {\n \"popover--closing\": this.closing,\n \"popover--active\": this.active,\n \"popover--inactive\": !this.active,\n });\n\n return (\n <Host id={this.popoverId} onFocusout={this.onFocusOut}>\n <div class={className} onKeyDown={this.onKeydown}>\n <div\n aria-hidden={!this.active ? \"true\" : \"false\"}\n aria-label={this.label}\n class=\"popover__content\"\n role=\"dialog\"\n tabindex=\"-1\"\n ref={(el) => (this.contentContainer = el)}\n style={{\n top: Boolean(this.position) ? `${this.position?.y}px` : \"\",\n left: Boolean(this.position) ? `${this.position?.x}px` : \"\",\n }}\n >\n <span class=\"popover__handle\"></span>\n <div\n class=\"popover__scroll-container\"\n ref={(el) => (this.scrollContainer = el)}\n >\n <slot></slot>\n </div>\n </div>\n {this.active && (\n <div\n class=\"popover__backdrop\"\n onClick={this.onCloseButtonClick}\n ></div>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1,6 +1,6 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
2
 
3
- const flipRadioGroupCss = ".sc-flip-radio-group-h{display:block}.sc-flip-radio-group-h *.sc-flip-radio-group{box-sizing:border-box}.radio-group.sc-flip-radio-group{display:flex;flex-direction:column;gap:var(--s-space-4)}";
3
+ const flipRadioGroupCss = ".sc-flip-radio-group-h{display:block}.sc-flip-radio-group-h *.sc-flip-radio-group{box-sizing:border-box}.radio-group.sc-flip-radio-group{display:flex;flex-direction:column;gap:var(--s-space-12)}";
4
4
 
5
5
  const FlipRadioGroup$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
6
6
  constructor() {