@nanoporetech-digital/components 6.1.0 → 6.3.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 (286) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/cjs/index-14451c95.js +6 -2
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/nano-alert.cjs.entry.js +1 -1
  5. package/dist/cjs/nano-animation.cjs.entry.js +1209 -0
  6. package/dist/cjs/nano-animation.cjs.entry.js.map +1 -0
  7. package/dist/cjs/nano-components.cjs.js +1 -1
  8. package/dist/cjs/nano-dialog.cjs.entry.js +22 -5
  9. package/dist/cjs/nano-dialog.cjs.entry.js.map +1 -1
  10. package/dist/cjs/nano-drawer.cjs.entry.js +1 -1
  11. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
  12. package/dist/cjs/nano-hero.cjs.entry.js +1 -1
  13. package/dist/cjs/nano-hero.cjs.entry.js.map +1 -1
  14. package/dist/cjs/nano-intersection-observe.cjs.entry.js +131 -0
  15. package/dist/cjs/nano-intersection-observe.cjs.entry.js.map +1 -0
  16. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +1 -1
  17. package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
  18. package/dist/cjs/nano-sticker.cjs.entry.js +2 -27
  19. package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
  20. package/dist/cjs/nano-tab-group.cjs.entry.js +3 -4
  21. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  22. package/dist/cjs/{nano-table-6f48a747.js → nano-table-9f615d5c.js} +5 -25
  23. package/dist/cjs/nano-table-9f615d5c.js.map +1 -0
  24. package/dist/cjs/nano-table.cjs.entry.js +2 -1
  25. package/dist/cjs/nano-table.cjs.entry.js.map +1 -1
  26. package/dist/cjs/{scroll-e8c21f80.js → scroll-4e95debb.js} +40 -3
  27. package/dist/cjs/scroll-4e95debb.js.map +1 -0
  28. package/dist/cjs/scroll-parent-87393de2.js +31 -0
  29. package/dist/cjs/scroll-parent-87393de2.js.map +1 -0
  30. package/dist/cjs/{table.worker-f3e54773.js → table.worker-6b65a9ea.js} +3 -2
  31. package/dist/cjs/table.worker-6b65a9ea.js.map +1 -0
  32. package/dist/cjs/transitions-20fce787.js.map +1 -1
  33. package/dist/collection/collection-manifest.json +2 -1
  34. package/dist/collection/components/animation/animation.js +547 -0
  35. package/dist/collection/components/animation/animation.js.map +1 -0
  36. package/dist/collection/components/animation/animations/attention_seekers/bounce.js +43 -0
  37. package/dist/collection/components/animation/animations/attention_seekers/flash.js +7 -0
  38. package/dist/collection/components/animation/animations/attention_seekers/headShake.js +8 -0
  39. package/dist/collection/components/animation/animations/attention_seekers/heartBeat.js +7 -0
  40. package/dist/collection/components/animation/animations/attention_seekers/jello.js +15 -0
  41. package/dist/collection/components/animation/animations/attention_seekers/pulse.js +5 -0
  42. package/dist/collection/components/animation/animations/attention_seekers/rubberBand.js +9 -0
  43. package/dist/collection/components/animation/animations/attention_seekers/shake.js +13 -0
  44. package/dist/collection/components/animation/animations/attention_seekers/shakeX.js +13 -0
  45. package/dist/collection/components/animation/animations/attention_seekers/shakeY.js +13 -0
  46. package/dist/collection/components/animation/animations/attention_seekers/swing.js +7 -0
  47. package/dist/collection/components/animation/animations/attention_seekers/tada.js +13 -0
  48. package/dist/collection/components/animation/animations/attention_seekers/wobble.js +18 -0
  49. package/dist/collection/components/animation/animations/back_entrances/backInDown.js +5 -0
  50. package/dist/collection/components/animation/animations/back_entrances/backInLeft.js +5 -0
  51. package/dist/collection/components/animation/animations/back_entrances/backInRight.js +5 -0
  52. package/dist/collection/components/animation/animations/back_entrances/backInUp.js +5 -0
  53. package/dist/collection/components/animation/animations/back_exits/backOutDown.js +5 -0
  54. package/dist/collection/components/animation/animations/back_exits/backOutLeft.js +5 -0
  55. package/dist/collection/components/animation/animations/back_exits/backOutRight.js +5 -0
  56. package/dist/collection/components/animation/animations/back_exits/backOutUp.js +5 -0
  57. package/dist/collection/components/animation/animations/bouncing_entrances/bounceIn.js +14 -0
  58. package/dist/collection/components/animation/animations/bouncing_entrances/bounceInDown.js +20 -0
  59. package/dist/collection/components/animation/animations/bouncing_entrances/bounceInLeft.js +16 -0
  60. package/dist/collection/components/animation/animations/bouncing_entrances/bounceInRight.js +16 -0
  61. package/dist/collection/components/animation/animations/bouncing_entrances/bounceInUp.js +16 -0
  62. package/dist/collection/components/animation/animations/bouncing_exits/bounceOut.js +6 -0
  63. package/dist/collection/components/animation/animations/bouncing_exits/bounceOutDown.js +14 -0
  64. package/dist/collection/components/animation/animations/bouncing_exits/bounceOutLeft.js +12 -0
  65. package/dist/collection/components/animation/animations/bouncing_exits/bounceOutRight.js +8 -0
  66. package/dist/collection/components/animation/animations/bouncing_exits/bounceOutUp.js +18 -0
  67. package/dist/collection/components/animation/animations/easings/easings.js +35 -0
  68. package/dist/collection/components/animation/animations/easings/easings.js.map +1 -0
  69. package/dist/collection/components/animation/animations/fading_entrances/fadeIn.js +4 -0
  70. package/dist/collection/components/animation/animations/fading_entrances/fadeInBottomLeft.js +4 -0
  71. package/dist/collection/components/animation/animations/fading_entrances/fadeInBottomRight.js +4 -0
  72. package/dist/collection/components/animation/animations/fading_entrances/fadeInDown.js +4 -0
  73. package/dist/collection/components/animation/animations/fading_entrances/fadeInDownBig.js +4 -0
  74. package/dist/collection/components/animation/animations/fading_entrances/fadeInLeft.js +4 -0
  75. package/dist/collection/components/animation/animations/fading_entrances/fadeInLeftBig.js +4 -0
  76. package/dist/collection/components/animation/animations/fading_entrances/fadeInRight.js +4 -0
  77. package/dist/collection/components/animation/animations/fading_entrances/fadeInRightBig.js +4 -0
  78. package/dist/collection/components/animation/animations/fading_entrances/fadeInTopLeft.js +4 -0
  79. package/dist/collection/components/animation/animations/fading_entrances/fadeInTopRight.js +4 -0
  80. package/dist/collection/components/animation/animations/fading_entrances/fadeInUp.js +4 -0
  81. package/dist/collection/components/animation/animations/fading_entrances/fadeInUpBig.js +4 -0
  82. package/dist/collection/components/animation/animations/fading_exits/fadeOut.js +4 -0
  83. package/dist/collection/components/animation/animations/fading_exits/fadeOutBottomLeft.js +4 -0
  84. package/dist/collection/components/animation/animations/fading_exits/fadeOutBottomRight.js +4 -0
  85. package/dist/collection/components/animation/animations/fading_exits/fadeOutDown.js +4 -0
  86. package/dist/collection/components/animation/animations/fading_exits/fadeOutDownBig.js +4 -0
  87. package/dist/collection/components/animation/animations/fading_exits/fadeOutLeft.js +4 -0
  88. package/dist/collection/components/animation/animations/fading_exits/fadeOutLeftBig.js +4 -0
  89. package/dist/collection/components/animation/animations/fading_exits/fadeOutRight.js +4 -0
  90. package/dist/collection/components/animation/animations/fading_exits/fadeOutRightBig.js +4 -0
  91. package/dist/collection/components/animation/animations/fading_exits/fadeOutTopLeft.js +4 -0
  92. package/dist/collection/components/animation/animations/fading_exits/fadeOutTopRight.js +4 -0
  93. package/dist/collection/components/animation/animations/fading_exits/fadeOutUp.js +4 -0
  94. package/dist/collection/components/animation/animations/fading_exits/fadeOutUpBig.js +4 -0
  95. package/dist/collection/components/animation/animations/flippers/flip.js +32 -0
  96. package/dist/collection/components/animation/animations/flippers/flipInX.js +20 -0
  97. package/dist/collection/components/animation/animations/flippers/flipInY.js +20 -0
  98. package/dist/collection/components/animation/animations/flippers/flipOutX.js +13 -0
  99. package/dist/collection/components/animation/animations/flippers/flipOutY.js +13 -0
  100. package/dist/collection/components/animation/animations/index.js +203 -0
  101. package/dist/collection/components/animation/animations/index.js.map +1 -0
  102. package/dist/collection/components/animation/animations/lightspeed/lightSpeedInLeft.js +10 -0
  103. package/dist/collection/components/animation/animations/lightspeed/lightSpeedInRight.js +10 -0
  104. package/dist/collection/components/animation/animations/lightspeed/lightSpeedOutLeft.js +8 -0
  105. package/dist/collection/components/animation/animations/lightspeed/lightSpeedOutRight.js +8 -0
  106. package/dist/collection/components/animation/animations/rotating_entrances/rotateIn.js +4 -0
  107. package/dist/collection/components/animation/animations/rotating_entrances/rotateInDownLeft.js +4 -0
  108. package/dist/collection/components/animation/animations/rotating_entrances/rotateInDownRight.js +4 -0
  109. package/dist/collection/components/animation/animations/rotating_entrances/rotateInUpLeft.js +4 -0
  110. package/dist/collection/components/animation/animations/rotating_entrances/rotateInUpRight.js +4 -0
  111. package/dist/collection/components/animation/animations/rotating_exits/rotateOut.js +4 -0
  112. package/dist/collection/components/animation/animations/rotating_exits/rotateOutDownLeft.js +4 -0
  113. package/dist/collection/components/animation/animations/rotating_exits/rotateOutDownRight.js +4 -0
  114. package/dist/collection/components/animation/animations/rotating_exits/rotateOutUpLeft.js +4 -0
  115. package/dist/collection/components/animation/animations/rotating_exits/rotateOutUpRight.js +4 -0
  116. package/dist/collection/components/animation/animations/sliding_entrances/slideInDown.js +4 -0
  117. package/dist/collection/components/animation/animations/sliding_entrances/slideInLeft.js +4 -0
  118. package/dist/collection/components/animation/animations/sliding_entrances/slideInRight.js +4 -0
  119. package/dist/collection/components/animation/animations/sliding_entrances/slideInUp.js +4 -0
  120. package/dist/collection/components/animation/animations/sliding_exits/slideOutDown.js +4 -0
  121. package/dist/collection/components/animation/animations/sliding_exits/slideOutLeft.js +4 -0
  122. package/dist/collection/components/animation/animations/sliding_exits/slideOutRight.js +4 -0
  123. package/dist/collection/components/animation/animations/sliding_exits/slideOutUp.js +4 -0
  124. package/dist/collection/components/animation/animations/specials/hinge.js +18 -0
  125. package/dist/collection/components/animation/animations/specials/jackInTheBox.js +11 -0
  126. package/dist/collection/components/animation/animations/specials/rollIn.js +8 -0
  127. package/dist/collection/components/animation/animations/specials/rollOut.js +8 -0
  128. package/dist/collection/components/animation/animations/zooming_entrances/zoomIn.js +4 -0
  129. package/dist/collection/components/animation/animations/zooming_entrances/zoomInDown.js +14 -0
  130. package/dist/collection/components/animation/animations/zooming_entrances/zoomInLeft.js +14 -0
  131. package/dist/collection/components/animation/animations/zooming_entrances/zoomInRight.js +14 -0
  132. package/dist/collection/components/animation/animations/zooming_entrances/zoomInUp.js +14 -0
  133. package/dist/collection/components/animation/animations/zooming_exits/zoomOut.js +5 -0
  134. package/dist/collection/components/animation/animations/zooming_exits/zoomOutDown.js +14 -0
  135. package/dist/collection/components/animation/animations/zooming_exits/zoomOutLeft.js +12 -0
  136. package/dist/collection/components/animation/animations/zooming_exits/zoomOutRight.js +12 -0
  137. package/dist/collection/components/animation/animations/zooming_exits/zoomOutUp.js +14 -0
  138. package/dist/collection/components/dialog/dialog.css +13 -5
  139. package/dist/collection/components/dialog/dialog.js +20 -3
  140. package/dist/collection/components/dialog/dialog.js.map +1 -1
  141. package/dist/collection/components/hero/hero.css +0 -1
  142. package/dist/collection/components/intersection-observe/intersection-observe.js +256 -0
  143. package/dist/collection/components/intersection-observe/intersection-observe.js.map +1 -0
  144. package/dist/collection/components/resize-observe/resize-observe.js +1 -1
  145. package/dist/collection/components/resize-observe/resize-observe.js.map +1 -1
  146. package/dist/collection/components/select/select.js +5 -5
  147. package/dist/collection/components/select/select.js.map +1 -1
  148. package/dist/collection/components/sticker/sticker.js +2 -27
  149. package/dist/collection/components/sticker/sticker.js.map +1 -1
  150. package/dist/collection/components/table/table.js +2 -1
  151. package/dist/collection/components/table/table.js.map +1 -1
  152. package/dist/collection/components/table/table.utils.js +0 -21
  153. package/dist/collection/components/table/table.utils.js.map +1 -1
  154. package/dist/collection/components/tabs/tab-group.js +2 -3
  155. package/dist/collection/components/tabs/tab-group.js.map +1 -1
  156. package/dist/collection/utils/scroll-parent.js +26 -0
  157. package/dist/collection/utils/scroll-parent.js.map +1 -0
  158. package/dist/collection/utils/scroll.js +39 -2
  159. package/dist/collection/utils/scroll.js.map +1 -1
  160. package/dist/collection/utils/transitions.js +1 -0
  161. package/dist/collection/utils/transitions.js.map +1 -1
  162. package/dist/components/index.d.ts +2 -1
  163. package/dist/components/index.js +2 -1
  164. package/dist/components/index.js.map +1 -1
  165. package/dist/components/{nano-aspect-ratio.d.ts → nano-animation.d.ts} +4 -4
  166. package/dist/components/nano-animation.js +1239 -0
  167. package/dist/components/nano-animation.js.map +1 -0
  168. package/dist/components/nano-dialog.js +21 -4
  169. package/dist/components/nano-dialog.js.map +1 -1
  170. package/dist/components/nano-hero.js +1 -1
  171. package/dist/components/nano-hero.js.map +1 -1
  172. package/dist/components/nano-intersection-observe.d.ts +11 -0
  173. package/dist/components/nano-intersection-observe.js +149 -0
  174. package/dist/components/nano-intersection-observe.js.map +1 -0
  175. package/dist/components/nano-tab-group.js +2 -3
  176. package/dist/components/nano-tab-group.js.map +1 -1
  177. package/dist/components/resize-observe.js +1 -1
  178. package/dist/components/resize-observe.js.map +1 -1
  179. package/dist/components/scroll-parent.js +29 -0
  180. package/dist/components/scroll-parent.js.map +1 -0
  181. package/dist/components/scroll.js +39 -2
  182. package/dist/components/scroll.js.map +1 -1
  183. package/dist/components/select.js.map +1 -1
  184. package/dist/components/sticker.js +2 -27
  185. package/dist/components/sticker.js.map +1 -1
  186. package/dist/components/table.js +1 -21
  187. package/dist/components/table.js.map +1 -1
  188. package/dist/components/transitions.js.map +1 -1
  189. package/dist/esm/index-9695db0a.js +6 -2
  190. package/dist/esm/loader.js +1 -1
  191. package/dist/esm/nano-alert.entry.js +1 -1
  192. package/dist/esm/nano-animation.entry.js +1205 -0
  193. package/dist/esm/nano-animation.entry.js.map +1 -0
  194. package/dist/esm/nano-components.js +1 -1
  195. package/dist/esm/nano-dialog.entry.js +22 -5
  196. package/dist/esm/nano-dialog.entry.js.map +1 -1
  197. package/dist/esm/nano-drawer.entry.js +1 -1
  198. package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
  199. package/dist/esm/nano-hero.entry.js +1 -1
  200. package/dist/esm/nano-hero.entry.js.map +1 -1
  201. package/dist/esm/nano-intersection-observe.entry.js +127 -0
  202. package/dist/esm/nano-intersection-observe.entry.js.map +1 -0
  203. package/dist/esm/nano-resize-observe_2.entry.js +1 -1
  204. package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
  205. package/dist/esm/nano-sticker.entry.js +2 -27
  206. package/dist/esm/nano-sticker.entry.js.map +1 -1
  207. package/dist/esm/nano-tab-group.entry.js +3 -4
  208. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  209. package/dist/esm/{nano-table-fc01a927.js → nano-table-66bee831.js} +3 -23
  210. package/dist/esm/nano-table-66bee831.js.map +1 -0
  211. package/dist/esm/nano-table.entry.js +2 -1
  212. package/dist/esm/nano-table.entry.js.map +1 -1
  213. package/dist/esm/{scroll-ac332213.js → scroll-762b3e1a.js} +40 -3
  214. package/dist/esm/scroll-762b3e1a.js.map +1 -0
  215. package/dist/esm/scroll-parent-bab1cbf7.js +29 -0
  216. package/dist/esm/scroll-parent-bab1cbf7.js.map +1 -0
  217. package/dist/esm/{table.worker-c70f6379.js → table.worker-936e6d51.js} +3 -2
  218. package/dist/esm/table.worker-936e6d51.js.map +1 -0
  219. package/dist/esm/transitions-bd15e312.js.map +1 -1
  220. package/dist/nano-components/nano-alert.entry.js +1 -1
  221. package/dist/nano-components/nano-animation.entry.js +5 -0
  222. package/dist/nano-components/nano-animation.entry.js.map +1 -0
  223. package/dist/nano-components/nano-components.css +1 -1
  224. package/dist/nano-components/nano-components.esm.js +1 -1
  225. package/dist/nano-components/nano-components.esm.js.map +1 -1
  226. package/dist/nano-components/nano-dialog.entry.js +1 -1
  227. package/dist/nano-components/nano-dialog.entry.js.map +1 -1
  228. package/dist/nano-components/nano-drawer.entry.js +1 -1
  229. package/dist/nano-components/nano-global-nav-user-profile_3.entry.js.map +1 -1
  230. package/dist/nano-components/nano-hero.entry.js +1 -1
  231. package/dist/nano-components/nano-hero.entry.js.map +1 -1
  232. package/dist/nano-components/nano-intersection-observe.entry.js +5 -0
  233. package/dist/nano-components/nano-intersection-observe.entry.js.map +1 -0
  234. package/dist/nano-components/nano-resize-observe_2.entry.js +1 -1
  235. package/dist/nano-components/nano-resize-observe_2.entry.js.map +1 -1
  236. package/dist/nano-components/nano-sticker.entry.js +1 -1
  237. package/dist/nano-components/nano-sticker.entry.js.map +1 -1
  238. package/dist/nano-components/nano-tab-group.entry.js +1 -1
  239. package/dist/nano-components/nano-tab-group.entry.js.map +1 -1
  240. package/dist/nano-components/nano-table-66bee831.js +5 -0
  241. package/dist/nano-components/nano-table-66bee831.js.map +1 -0
  242. package/dist/nano-components/nano-table.entry.js +1 -1
  243. package/dist/nano-components/scroll-762b3e1a.js +5 -0
  244. package/dist/nano-components/scroll-762b3e1a.js.map +1 -0
  245. package/dist/nano-components/scroll-parent-bab1cbf7.js +5 -0
  246. package/dist/nano-components/scroll-parent-bab1cbf7.js.map +1 -0
  247. package/dist/nano-components/table.worker-936e6d51.js +5 -0
  248. package/dist/nano-components/transitions-bd15e312.js.map +1 -1
  249. package/dist/types/components/animation/animation.d.ts +74 -0
  250. package/dist/types/components/animation/animations/easings/easings.d.ts +31 -0
  251. package/dist/types/components/animation/animations/index.d.ts +101 -0
  252. package/dist/types/components/intersection-observe/intersection-observe.d.ts +45 -0
  253. package/dist/types/components/select/select.d.ts +2 -4
  254. package/dist/types/components/sticker/sticker.d.ts +0 -5
  255. package/dist/types/components/table/table.utils.d.ts +0 -6
  256. package/dist/types/components.d.ts +209 -42
  257. package/dist/types/interface.d.ts +6 -2
  258. package/dist/types/utils/scroll-parent.d.ts +6 -0
  259. package/docs-json.json +945 -31
  260. package/docs-vscode.json +488 -8
  261. package/hydrate/index.js +1568 -235
  262. package/package.json +2 -2
  263. package/dist/cjs/nano-aspect-ratio.cjs.entry.js +0 -53
  264. package/dist/cjs/nano-aspect-ratio.cjs.entry.js.map +0 -1
  265. package/dist/cjs/nano-table-6f48a747.js.map +0 -1
  266. package/dist/cjs/scroll-e8c21f80.js.map +0 -1
  267. package/dist/cjs/table.worker-f3e54773.js.map +0 -1
  268. package/dist/collection/components/aspect-ratio/aspect-ratio.css +0 -38
  269. package/dist/collection/components/aspect-ratio/aspect-ratio.js +0 -106
  270. package/dist/collection/components/aspect-ratio/aspect-ratio.js.map +0 -1
  271. package/dist/components/nano-aspect-ratio.js +0 -70
  272. package/dist/components/nano-aspect-ratio.js.map +0 -1
  273. package/dist/esm/nano-aspect-ratio.entry.js +0 -49
  274. package/dist/esm/nano-aspect-ratio.entry.js.map +0 -1
  275. package/dist/esm/nano-table-fc01a927.js.map +0 -1
  276. package/dist/esm/scroll-ac332213.js.map +0 -1
  277. package/dist/esm/table.worker-c70f6379.js.map +0 -1
  278. package/dist/nano-components/nano-aspect-ratio.entry.js +0 -5
  279. package/dist/nano-components/nano-aspect-ratio.entry.js.map +0 -1
  280. package/dist/nano-components/nano-table-fc01a927.js +0 -5
  281. package/dist/nano-components/nano-table-fc01a927.js.map +0 -1
  282. package/dist/nano-components/scroll-ac332213.js +0 -5
  283. package/dist/nano-components/scroll-ac332213.js.map +0 -1
  284. package/dist/nano-components/table.worker-c70f6379.js +0 -5
  285. package/dist/types/components/aspect-ratio/aspect-ratio.d.ts +0 -19
  286. /package/dist/nano-components/{table.worker-c70f6379.js.map → table.worker-936e6d51.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
- import{r as i,c as a,h as o,a as t,g as s}from"./index-9695db0a.js";import{M as e}from"./modal-88c117cd.js";import{l as n,u as r}from"./scroll-ac332213.js";import{h as l}from"./slot-8126e238.js";import{C as d}from"./component-store-486d9d7a.js";import"./tabbable-26a66a22.js";import"./dom-8599fac1.js";import"./throttle-ac4fcefa.js";const h=":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--border-radius:var(--nano-layer-border-radius, var(--nano-border-radius-medium, 4px));--content-background:#fafafa;--footer-content:#e4e6e8;--scrim-color:var(--nano-layer-overlay-dark, rgb(74 74 74 / 50%));--box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.2));--close-button-color:#b5aea7;--width:60rem;--tint-color:#00607b;--body-padding-v:var(--nano-spacing-large, 20px);--body-padding-h:var(--nano-spacing-large, 20px);--header-padding-v:var(--nano-spacing-medium, 16px);--header-padding-h:var(--nano-spacing-large, 20px);--footer-padding-v:var(--nano-spacing-medium, 16px);--footer-padding-h:var(--nano-spacing-large, 20px)}.dialog{display:flex;align-items:center;justify-content:center;position:fixed;inset:0;z-index:var(--nano-layer-index-modal, 700)}.dialog__panel{display:flex;flex-direction:column;z-index:2;inline-size:var(--width);max-inline-size:calc(100% - var(--nano-spacing-xlarge, 24px));max-block-size:calc(92% - var(--nano-spacing-xlarge, 24px));background-color:var(--content-background);border-radius:var(--border-radius);box-shadow:var(--box-shadow);opacity:0;transform:scale(0.8);transition:var(--nano-transition-fast, 0.3s) opacity, var(--nano-transition-fast, 0.3s) transform}.dialog__panel:focus{outline:none}.dialog--with-ribbon .dialog__panel{border-block-start:5px solid var(--tint-color)}.dialog--open .dialog__panel{display:flex;opacity:1;transform:none}.dialog--nodismiss .dialog__panel{animation:cannotClose 0.25s ease-in-out 1}@keyframes cannotClose{0%{transform:scale(1)}50%{transform:scale(1.08)}100%{transform:scale(1)}}.dialog__header{flex:0 0 auto;display:flex;inline-size:100%;background-color:var(--content-background);border-radius:var(--border-radius) var(--border-radius) 0 0;transition:var(--nano-transition-fast, 0.1s) box-shadow;min-inline-size:auto}[stuck] .dialog__header{box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2))}.dialog__title{flex:1 1 auto;font-size:var(--nano-fontsize-large, 1.25rem);line-height:1.6;padding-block:var(--header-padding-v);padding-inline:var(--header-padding-h)}.dialog .dialog__close-icon{flex:0 0 auto;display:flex;align-items:center;font-size:var(--nano-fontsize-xlarge, 1.5rem);padding-block:0;padding-inline:var(--header-padding-h);--color:var(--close-button-color)}.dialog__body{padding-block:0 var(--body-padding-v);padding-inline:var(--body-padding-h)}.dialog:not(.dialog--has-header) .dialog__body{padding-block-start:var(--body-padding-v)}.dialog__body ::slotted(*){max-inline-size:100%}.dialog__body-wrap{flex:1 1 auto;overflow:auto;-webkit-overflow-scrolling:touch;border-radius:var(--border-radius)}.dialog:not(.dialog--has-header) .dialog__body-wrap{border-radius:0 0 inherit inherit}.dialog:not(.dialog--has-footer) .dialog__body-wrap{border-radius:inherit inherit 0 0}.dialog__footer{inline-size:100%;padding-block:var(--footer-padding-v);padding-inline:var(--footer-padding-h);background:var(--footer-content);border-radius:0 0 var(--border-radius) var(--border-radius);position:relative;inset-block-start:1px;min-inline-size:auto}.dialog__footer ::slotted(button){margin-inline-end:var(--nano-spacing-small, 8px) !important}.dialog:not(.dialog--has-footer) .dialog__footer{display:none}.dialog__close-txt{color:var(--tint-color);border:none;text-decoration:underline;margin:0;text-underline-offset:4px;background-color:transparent;font:inherit;-webkit-box-align:center;cursor:pointer;font-size:var(--nano-fontsize-small, 0.875rem);padding:0.5rem;border-radius:var(--nano-border-radius-small, 2px);transition:box-shadow 100ms ease-in-out}.dialog__close-txt:focus{outline:none;box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)))}.dialog__overlay{position:fixed;inset:0;background-color:var(--scrim-color);opacity:0;transition:var(--nano-transition-fast, 0.3s) opacity;-webkit-backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px));backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px))}.dialog--open .dialog__overlay{opacity:1}";let c=0;const g=class{constructor(o){i(this,o);this.nanoShow=a(this,"nanoShow",7);this.nanoAfterShow=a(this,"nanoAfterShow",7);this.nanoHide=a(this,"nanoHide",7);this.nanoAfterHide=a(this,"nanoAfterHide",7);this.nanoInitialFocus=a(this,"nanoInitialFocus",7);this.nanoRequestClose=a(this,"nanoRequestClose",7);this.componentId=`dialog-${++c}`;this.willShow=false;this.willHide=false;this.handleKeyDown=i=>{if(i.key==="Escape"){this.requestClose()}};this.requestClose=()=>{const i=this.nanoRequestClose.emit();if(!i.defaultPrevented&&!this.noUserDismiss){this.hide()}else{this.noDismiss=true;setTimeout((()=>this.noDismiss=false),250)}};this.handleTransitionEnd=i=>{if(i.propertyName==="opacity"&&i.composedPath().find((i=>i===this.panel||i===this.overlay))){this.willShow=false;this.willHide=false;this.open?this.nanoAfterShow.emit():this.nanoAfterHide.emit();if(!this.open)this.dialog.hidden=true}};this.handleSlotChange=()=>{this.hasFooter=l(this.host,"footer")};this.noDismiss=false;this.hasFooter=false;this.showRibbon=true;this.open=false;this.label=undefined;this.noHeader=false;this.noFooter=false;this.noUserDismiss=false;this.storeId=undefined;this.storeMethod="url-hash";this.hoist=false}get panel(){return this._panel}set panel(i){if(this._panel){this.panel.removeEventListener("transitionend",this.handleTransitionEnd)}i.addEventListener("transitionend",this.handleTransitionEnd);this._panel=i}handleOpenChange(){this.open?this.show():this.hide()}handleHoistChange(){if(!this.hoist||Array.from(document.body.children).includes(this.host))return;document.body.prepend(this.host)}async show(){if(this.willShow){return}const i=this.nanoShow.emit();if(i.defaultPrevented){this.open=false;return}if(this.dialog)this.dialog.hidden=false;this.originalTrigger=document.activeElement;this.willShow=true;this.open=true;this.modal.activate();n(this.host);if(this.open){this.host.addEventListener("nanoAfterShow",(()=>{const i=this.nanoInitialFocus.emit();if(!i.defaultPrevented){this.panel.focus({preventScroll:true})}}),{once:true})}}async hide(){if(this.willHide){return}const i=this.nanoHide.emit();if(i.defaultPrevented){this.open=true;return}this.willHide=true;this.open=false;this.modal.deactivate();r(this.host);this.stopVideos();const a=this.originalTrigger;if(a&&typeof a.focus==="function"){setTimeout((()=>a.focus()))}}stopVideos(){const i=Array.from(this.host.querySelectorAll("iframe,video"));i.forEach((i=>{if(i.tagName.toLowerCase()==="video")i.pause();else{const a=i.src;i.src=a}}))}connectedCallback(){this.handleHoistChange();this.modal=new e(this.host)}componentWillLoad(){this.handleSlotChange();if(this.open)this.show();if(this.storeId)d.init(this,["open"],this.storeMethod,this.storeId)}componentDidLoad(){this.dialog.hidden=!this.open}disconnectedCallback(){r(this.host);if(!this.panel)return;this.panel.removeEventListener("transitionend",this.handleTransitionEnd)}render(){return o(t,null,o("div",{part:"base",class:{dialog:true,"dialog--open":this.open,"dialog--has-footer":!this.noFooter,"dialog--has-header":!this.noHeader,"dialog--nodismiss":this.noDismiss,"dialog--with-ribbon":this.showRibbon},onKeyDown:this.handleKeyDown,ref:i=>this.dialog=i},o("div",{part:"overlay",class:"dialog__overlay",ref:i=>this.overlay=i,onClick:this.requestClose}),o("div",{ref:i=>this.panel=i,part:"panel",class:"dialog__panel",role:"dialog","aria-modal":"true","aria-hidden":this.open?"false":"true","aria-label":this.noHeader?this.label:null,"aria-labelledby":!this.noHeader?`${this.componentId}-title`:null,tabIndex:0},o("div",{class:"dialog__body-wrap"},!this.noHeader&&o("nano-sticker",null,o("div",{part:"header",class:"dialog__header"},o("span",{part:"title",class:"dialog__title",id:`${this.componentId}-title`},o("slot",{name:"label"},this.label||String.fromCharCode(65279))),!this.noUserDismiss&&o("nano-icon-button",{part:"close-button",exportparts:"base:close-button__base",class:"dialog__close-icon",label:"close dialog",onClick:this.requestClose,iconName:"light/times"}))),o("div",{part:"body",class:"dialog__body"},o("slot",null)),!this.noFooter&&(this.hasFooter||!this.noUserDismiss)&&o("nano-sticker",{position:"bottom"},o("footer",{part:"footer",class:"dialog__footer"},o("slot",{name:"footer",onSlotchange:this.handleSlotChange}),!this.noUserDismiss&&o("button",{class:"dialog__close-txt",onClick:this.requestClose},"Close")))))))}get host(){return s(this)}static get watchers(){return{open:["handleOpenChange"],hoist:["handleHoistChange"]}}};g.style=h;export{g as nano_dialog};
4
+ import{r as i,c as o,h as a,a as t,g as s}from"./index-9695db0a.js";import{M as e}from"./modal-88c117cd.js";import{l as n,u as r}from"./scroll-762b3e1a.js";import{h as l}from"./slot-8126e238.js";import{C as d}from"./component-store-486d9d7a.js";import"./tabbable-26a66a22.js";import"./dom-8599fac1.js";import"./throttle-ac4fcefa.js";const h=":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--border-radius:var(--nano-layer-border-radius, var(--nano-border-radius-medium, 4px));--content-background:#fafafa;--footer-content:#e4e6e8;--scrim-color:var(--nano-layer-overlay-dark, rgb(74 74 74 / 50%));--box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.2));--close-button-color:#b5aea7;--width:60rem;--tint-color:#00607b;--body-padding-v:var(--nano-spacing-large, 20px);--body-padding-h:var(--nano-spacing-large, 20px);--header-padding-v:var(--nano-spacing-medium, 16px);--header-padding-h:var(--nano-spacing-large, 20px);--footer-padding-v:var(--nano-spacing-medium, 16px);--footer-padding-h:var(--nano-spacing-large, 20px)}.dialog{display:flex;align-items:center;justify-content:center;position:fixed;inset:0;z-index:var(--nano-layer-index-modal, 700);border:none;inline-size:unset;block-size:unset;color:unset;background-color:unset}.dialog::backdrop{display:none}.dialog__panel{display:flex;flex-direction:column;z-index:2;inline-size:var(--width);max-inline-size:calc(100% - (var(--nano-spacing-xlarge, 24px) + var(--nano-scroll-lock-size)));max-block-size:calc(92vh - var(--nano-spacing-xlarge, 24px));background-color:var(--content-background);border-radius:var(--border-radius);box-shadow:var(--box-shadow);opacity:0;transform:scale(0.8);transition:var(--nano-transition-fast, 0.3s) opacity, var(--nano-transition-fast, 0.3s) transform}.dialog__panel:focus{outline:none}.dialog--with-ribbon .dialog__panel{border-block-start:5px solid var(--tint-color)}.dialog--open .dialog__panel{display:flex;opacity:1;transform:none}.dialog--nodismiss .dialog__panel{animation:cannotClose 0.25s ease-in-out 1}@keyframes cannotClose{0%{transform:scale(1)}50%{transform:scale(1.08)}100%{transform:scale(1)}}.dialog__header{flex:0 0 auto;display:flex;inline-size:100%;background-color:var(--content-background);border-radius:var(--border-radius) var(--border-radius) 0 0;transition:var(--nano-transition-fast, 0.1s) box-shadow;min-inline-size:auto}[stuck] .dialog__header{box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2))}.dialog__title{flex:1 1 auto;font-size:var(--nano-fontsize-large, 1.25rem);line-height:1.6;padding-block:var(--header-padding-v);padding-inline:var(--header-padding-h)}.dialog .dialog__close-icon{flex:0 0 auto;display:flex;align-items:center;font-size:var(--nano-fontsize-xlarge, 1.5rem);padding-block:0;padding-inline:var(--header-padding-h);--color:var(--close-button-color)}.dialog__body{padding-block:0 var(--body-padding-v);padding-inline:var(--body-padding-h)}.dialog:not(.dialog--has-header) .dialog__body{padding-block-start:var(--body-padding-v)}.dialog__body ::slotted(*){max-inline-size:100%}.dialog__body-wrap{flex:1 1 auto;overflow:auto;-webkit-overflow-scrolling:touch;border-radius:var(--border-radius)}.dialog:not(.dialog--has-header) .dialog__body-wrap{border-radius:0 0 inherit inherit}.dialog:not(.dialog--has-footer) .dialog__body-wrap{border-radius:inherit inherit 0 0}.dialog__footer{inline-size:100%;padding-block:var(--footer-padding-v);padding-inline:var(--footer-padding-h);background:var(--footer-content);border-radius:0 0 var(--border-radius) var(--border-radius);position:sticky;inset-block-end:0;min-inline-size:auto}.dialog__footer ::slotted(button){margin-inline-end:var(--nano-spacing-small, 8px) !important}.dialog:not(.dialog--has-footer) .dialog__footer{display:none}.dialog__close-txt{color:var(--tint-color);border:none;text-decoration:underline;margin:0;text-underline-offset:4px;background-color:transparent;font:inherit;-webkit-box-align:center;cursor:pointer;font-size:var(--nano-fontsize-small, 0.875rem);padding:0.5rem;border-radius:var(--nano-border-radius-small, 2px);transition:box-shadow 100ms ease-in-out}.dialog__close-txt:focus{outline:none;box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)))}.dialog__overlay{position:fixed;inset:0 !important;background-color:var(--scrim-color);opacity:0;transition:var(--nano-transition-fast, 0.3s) opacity;-webkit-backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px));backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px))}.dialog--open .dialog__overlay{opacity:1}";let c=0;const g=class{constructor(a){i(this,a);this.nanoShow=o(this,"nanoShow",7);this.nanoAfterShow=o(this,"nanoAfterShow",7);this.nanoHide=o(this,"nanoHide",7);this.nanoAfterHide=o(this,"nanoAfterHide",7);this.nanoInitialFocus=o(this,"nanoInitialFocus",7);this.nanoRequestClose=o(this,"nanoRequestClose",7);this.componentId=`dialog-${++c}`;this.willShow=false;this.willHide=false;this.handleKeyDown=i=>{if(i.key==="Escape"){this.requestClose()}};this.requestClose=()=>{const i=this.nanoRequestClose.emit();if(!i.defaultPrevented&&!this.noUserDismiss){this.hide()}else{this.noDismiss=true;setTimeout((()=>this.noDismiss=false),250)}};this.handleTransitionEnd=i=>{if(i.propertyName==="opacity"&&i.composedPath().find((i=>i===this.panel||i===this.overlay))){this.willShow=false;this.willHide=false;this.open?this.nanoAfterShow.emit():this.nanoAfterHide.emit();if(!this.open)this.dialog.hidden=true}};this.handleSlotChange=()=>{this.hasFooter=l(this.host,"footer")};this.noDismiss=false;this.hasFooter=false;this.showRibbon=true;this.open=false;this.label=undefined;this.noHeader=false;this.noFooter=false;this.noUserDismiss=false;this.storeId=undefined;this.storeMethod="url-hash";this.hoist=false}get panel(){return this._panel}set panel(i){if(this._panel){this.panel.removeEventListener("transitionend",this.handleTransitionEnd)}i.addEventListener("transitionend",this.handleTransitionEnd);this._panel=i}handleOpenChange(){this.open?this.show():this.hide()}handleHoistChange(){if(globalThis.HTMLElement.prototype.hasOwnProperty("popover")||!this.hoist||Array.from(document.body.children).includes(this.host))return;document.body.prepend(this.host)}async show(){if(this.willShow){return}const i=this.nanoShow.emit();if(i.defaultPrevented){this.open=false;return}if(this.dialog)this.dialog.hidden=false;this.originalTrigger=document.activeElement;this.willShow=true;this.open=true;this.modal.activate();if(typeof this.dialog?.showPopover==="function"){this.dialog.showPopover()}n(this.host);if(this.open){this.host.addEventListener("nanoAfterShow",(()=>{const i=this.nanoInitialFocus.emit();if(!i.defaultPrevented){this.panel.focus({preventScroll:true})}}),{once:true})}}async hide(){if(this.willHide){return}const i=this.nanoHide.emit();if(i.defaultPrevented){this.open=true;return}this.willHide=true;this.open=false;this.modal.deactivate();this.stopVideos();const o=this.originalTrigger;if(o&&typeof o.focus==="function"){setTimeout((()=>o.focus()))}setTimeout((()=>{if(!this.open&&typeof this.dialog?.hidePopover==="function"){this.dialog.hidePopover()}r(this.host)}),300)}stopVideos(){const i=Array.from(this.host.querySelectorAll("iframe,video"));i.forEach((i=>{if(i.tagName.toLowerCase()==="video")i.pause();else{const o=i.src;i.src=o}}))}connectedCallback(){this.handleHoistChange();this.modal=new e(this.host)}componentWillLoad(){this.handleSlotChange();if(this.open)this.show();if(this.storeId)d.init(this,["open"],this.storeMethod,this.storeId)}componentDidLoad(){this.dialog.hidden=!this.open}disconnectedCallback(){r(this.host);if(!this.panel)return;this.panel.removeEventListener("transitionend",this.handleTransitionEnd)}render(){return a(t,null,a("div",{part:"base",class:{dialog:true,"dialog--open":this.open,"dialog--has-footer":!this.noFooter,"dialog--has-header":!this.noHeader,"dialog--nodismiss":this.noDismiss,"dialog--with-ribbon":this.showRibbon},onKeyDown:this.handleKeyDown,ref:i=>this.dialog=i,popover:"manual"},a("div",{part:"overlay",class:"dialog__overlay",ref:i=>this.overlay=i,onClick:this.requestClose}),a("div",{ref:i=>this.panel=i,part:"panel",class:"dialog__panel",role:"dialog","aria-modal":"true","aria-hidden":this.open?"false":"true","aria-label":this.noHeader?this.label:null,"aria-labelledby":!this.noHeader?`${this.componentId}-title`:null,tabIndex:-1},a("div",{class:"dialog__body-wrap"},!this.noHeader&&a("nano-sticker",null,a("header",{part:"header",class:"dialog__header"},a("span",{part:"title",class:"dialog__title",id:`${this.componentId}-title`},a("slot",{name:"label"},this.label||String.fromCharCode(65279))),!this.noUserDismiss&&a("nano-icon-button",{part:"close-button",exportparts:"base:close-button__base",class:"dialog__close-icon",label:"close dialog",onClick:this.requestClose,iconName:"light/times"}))),a("div",{part:"body",class:"dialog__body"},a("slot",null)),!this.noFooter&&(this.hasFooter||!this.noUserDismiss)&&a("footer",{part:"footer",class:"dialog__footer"},a("slot",{name:"footer",onSlotchange:this.handleSlotChange}),!this.noUserDismiss&&a("button",{class:"dialog__close-txt",onClick:this.requestClose},"Close"))))))}get host(){return s(this)}static get watchers(){return{open:["handleOpenChange"],hoist:["handleHoistChange"]}}};g.style=h;export{g as nano_dialog};
5
5
  //# sourceMappingURL=nano-dialog.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["dialogCss","id","Dialog","this","componentId","willShow","willHide","handleKeyDown","event","key","requestClose","nanoOverlayDismiss","nanoRequestClose","emit","defaultPrevented","noUserDismiss","hide","noDismiss","setTimeout","handleTransitionEnd","propertyName","composedPath","find","node","panel","overlay","open","nanoAfterShow","nanoAfterHide","dialog","hidden","handleSlotChange","hasFooter","hasSlot","host","_panel","p","removeEventListener","addEventListener","handleOpenChange","show","handleHoistChange","hoist","Array","from","document","body","children","includes","prepend","async","nanoShow","originalTrigger","activeElement","modal","activate","lockBodyScrolling","nanoInitialFocus","focus","preventScroll","once","nanoHide","deactivate","unlockBodyScrolling","stopVideos","trigger","videos","querySelectorAll","forEach","video","tagName","toLowerCase","pause","src","connectedCallback","Modal","componentWillLoad","storeId","ComponentStore","init","storeMethod","componentDidLoad","disconnectedCallback","render","h","Host","part","class","noFooter","noHeader","showRibbon","onKeyDown","ref","ele","el","onClick","role","label","tabIndex","name","String","fromCharCode","exportparts","iconName","position","onSlotchange"],"sources":["./src/components/dialog/dialog.scss?tag=nano-dialog&encapsulation=shadow","./src/components/dialog/dialog.tsx"],"sourcesContent":["@use 'sass:map';\n@use 'sass:list';\n\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/layers';\n@import '../../global/style/nano-theme/form';\n\n/**\n * @prop --width: The preferred width of the dialog. Note that the dialog will shrink to accommodate smaller screens.\n * @prop --border-radius: defaults to #{$layer-border-radius};\n * @prop --content-background: defaults to #{$layer-bg-color};\n * @prop --footer-background: defaults to #{map.get($colors, celsius)};\n * @prop --box-shadow: defaults to $layer-shadow-xlarge;\n * @prop --close-button-color: defaults to #{map.get($colors, palegrey)};\n * @prop --scrim-color: overlay colour of alert display. Defaults to #{$layer-overlay-dark};\n * @prop --tint-color: colour used to highlight items in the dialog - top ribbon, bottom close button. Default #{map.get($colors, blue)};\n * @prop --width: defaults to 31rem;\n * @prop --nano-layer-overlay-blur: inheritable theme applied to backdrop. Default to #{$layer-overlay-blur}\n */\n:host {\n --border-radius: #{$layer-border-radius};\n --content-background: #fafafa;\n --footer-content: #{map.get($colors, lightgrey)};\n --scrim-color: #{$layer-overlay-dark};\n --box-shadow: #{$layer-shadow-large};\n --close-button-color: #{map.get($colors, palegrey)};\n --width: 60rem;\n --tint-color: #{darken(map.get($colors, blue), 5%)};\n --body-padding-v: #{$spacing-large};\n --body-padding-h: #{$spacing-large};\n --header-padding-v: #{$spacing-medium};\n --header-padding-h: #{$spacing-large};\n --footer-padding-v: #{$spacing-medium};\n --footer-padding-h: #{$spacing-large};\n}\n\n.dialog {\n $self: &;\n\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n inset: 0;\n z-index: #{$layer-index-modal};\n\n &__panel {\n display: flex;\n flex-direction: column;\n z-index: 2;\n inline-size: var(--width);\n max-inline-size: calc(100% - #{$spacing-xlarge});\n max-block-size: calc(92% - #{$spacing-xlarge});\n background-color: var(--content-background);\n border-radius: var(--border-radius);\n box-shadow: var(--box-shadow);\n opacity: 0;\n transform: scale(0.8);\n transition: #{$transition-fast} opacity, #{$transition-fast} transform;\n\n &:focus {\n outline: none;\n }\n\n .dialog--with-ribbon & {\n border-block-start: 5px solid var(--tint-color);\n }\n\n .dialog--open & {\n display: flex;\n opacity: 1;\n transform: none;\n }\n\n .dialog--nodismiss & {\n animation: cannotClose 0.25s ease-in-out 1;\n\n @keyframes cannotClose {\n 0% {\n transform: scale(1);\n }\n\n 50% {\n transform: scale(1.08);\n }\n\n 100% {\n transform: scale(1);\n }\n }\n }\n }\n\n &__header {\n flex: 0 0 auto;\n display: flex;\n inline-size: 100%;\n background-color: var(--content-background);\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n transition: #{$transition-xfast} box-shadow;\n min-inline-size: auto;\n\n [stuck] & {\n box-shadow: #{$layer-shadow-medium};\n }\n }\n\n &__title {\n flex: 1 1 auto;\n font-size: #{$fontsize-large};\n line-height: 1.6;\n padding-block: var(--header-padding-v);\n padding-inline: var(--header-padding-h);\n }\n\n & &__close-icon {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n font-size: #{$fontsize-xlarge};\n padding-block: 0;\n padding-inline: var(--header-padding-h);\n\n --color: var(--close-button-color);\n }\n\n &__body {\n padding-block: 0 var(--body-padding-v);\n padding-inline: var(--body-padding-h);\n\n .dialog:not(.dialog--has-header) & {\n padding-block-start: var(--body-padding-v);\n }\n\n & ::slotted(*) {\n max-inline-size: 100%;\n }\n\n &-wrap {\n flex: 1 1 auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n border-radius: var(--border-radius);\n\n .dialog:not(.dialog--has-header) & {\n border-radius: 0 0 inherit inherit;\n }\n\n .dialog:not(.dialog--has-footer) & {\n border-radius: inherit inherit 0 0;\n }\n }\n }\n\n &__footer {\n inline-size: 100%;\n padding-block: var(--footer-padding-v);\n padding-inline: var(--footer-padding-h);\n background: var(--footer-content);\n border-radius: 0 0 var(--border-radius) var(--border-radius);\n position: relative;\n inset-block-start: 1px;\n min-inline-size: auto;\n\n ::slotted(button) {\n margin-inline-end: #{$spacing-small} !important;\n }\n\n .dialog:not(.dialog--has-footer) & {\n display: none;\n }\n }\n\n &__close-txt {\n color: var(--tint-color);\n border: none;\n text-decoration: underline;\n margin: 0;\n text-underline-offset: 4px;\n background-color: transparent;\n font: inherit;\n -webkit-box-align: center;\n cursor: pointer;\n font-size: #{$fontsize-small};\n padding: 0.5rem;\n border-radius: #{$border-radius-small};\n transition: box-shadow 100ms ease-in-out;\n\n &:focus {\n outline: none;\n box-shadow: #{$control-focus-style};\n }\n }\n\n &__overlay {\n position: fixed;\n inset: 0;\n background-color: var(--scrim-color);\n opacity: 0;\n transition: #{$transition-fast} opacity;\n backdrop-filter: blur(#{$layer-overlay-blur});\n\n .dialog--open & {\n opacity: 1;\n }\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n ComponentInterface,\n} from '@stencil/core';\nimport Modal from '../../utils/modal';\nimport { lockBodyScrolling, unlockBodyScrolling } from '../../utils/scroll';\nimport { hasSlot } from '../../utils/slot';\nimport {\n ComponentStore,\n StorageMethods,\n} from '../../utils/store/component-store';\n\nlet id = 0;\n\n/**\n * Dialogs, sometimes called \"modals\", appear above the page and require the user's immediate attention.\n *\n * @part base - The component’s base wrapper\n * @part overlay - The overlay that covers the screen behind the dialog\n * @part panel - The dialog’s panel (where the dialog and its content are rendered)\n * @part header - The dialog’s header. This element wraps the title and header actions\n * @part title - The dialog’s title\n * @part close-button - The `<nano-icon-button>` close button\n * @part close-button__base - The close button's exported `base` part\n * @part body - dilog body / content\n * @part footer - dialog footer bar\n *\n * @slot label - The dialog's label. Alternatively, you can use the label prop.\n * @slot footer - The dialog's footer, usually one or more buttons representing various options.\n * @slot - The dialog's content.\n */\n@Component({\n tag: 'nano-dialog',\n styleUrl: 'dialog.scss',\n shadow: true,\n})\nexport class Dialog implements ComponentInterface {\n private componentId = `dialog-${++id}`;\n private modal: Modal;\n private willShow = false;\n private willHide = false;\n private originalTrigger: HTMLElement | null;\n private overlay: HTMLElement;\n private dialog: HTMLElement;\n\n get panel() {\n return this._panel;\n }\n set panel(p: HTMLElement) {\n if (this._panel) {\n this.panel.removeEventListener('transitionend', this.handleTransitionEnd);\n }\n p.addEventListener('transitionend', this.handleTransitionEnd);\n this._panel = p;\n }\n private _panel: HTMLElement;\n\n @Element() host: HTMLNanoDialogElement;\n @State() noDismiss = false;\n @State() hasFooter = false;\n\n /** Show a colour ribbon at the top of the modal */\n @Prop() showRibbon = true;\n\n /** Indicates whether or not the dialog is open. You can use this in lieu of the show/hide methods. */\n @Prop({ mutable: true, reflect: true }) open = false;\n\n @Watch('open')\n handleOpenChange() {\n this.open ? this.show() : this.hide();\n }\n\n /** The dialog's label as displayed in the header. You should always include a relevant\n * label even when using `no-header`, as it is required for proper accessibility. */\n @Prop() label!: string;\n\n /** Set to true to disable the header. This will also remove the default close button,\n * so please ensure you provide an easy, accessible way for users to dismiss the dialog. */\n @Prop() noHeader = false;\n\n /** Set to true to disable the footer. This will also remove the footer close button,\n * so please ensure you provide an easy, accessible way for users to dismiss the dialog. */\n @Prop() noFooter = false;\n\n /** An alternative to `preventDefault()` on the `nanoRequestClose` event. This will hide the close button and disable clicks on the overlay or presses the `Escape` key */\n @Prop() noUserDismiss = false;\n\n /** Store search queries (against this ID) to the component store. Use in conjunction with storeMethod */\n @Prop() storeId?: string;\n\n /** The method of storage. Either session storage, url hash (after the '#') or url query (after the '?'). */\n @Prop() storeMethod: StorageMethods = 'url-hash';\n\n /** Relocate the dialog to the root of the DOM. Useful for elements bound via css `transform: ...` */\n @Prop() hoist = false;\n\n @Watch('hoist')\n handleHoistChange() {\n if (!this.hoist || Array.from(document.body.children).includes(this.host))\n return;\n document.body.prepend(this.host);\n }\n\n /** Emitted when the dialog opens. Calling `event.preventDefault()` will prevent it from being opened. */\n @Event() nanoShow: EventEmitter;\n\n /** Emitted after the dialog opens and all transitions are complete. */\n @Event() nanoAfterShow: EventEmitter;\n\n /** Emitted when the dialog closes. Calling `event.preventDefault()` will prevent it from being closed. */\n @Event() nanoHide: EventEmitter;\n\n /** Emitted after the dialog closes and all transitions are complete. */\n @Event() nanoAfterHide: EventEmitter;\n\n /** Emitted when the dialog opens and the panel gains focus. Calling `event.preventDefault()` will prevent\n * focus and allow you to set it on a different element in the dialog, such as an input or button. */\n @Event() nanoInitialFocus: EventEmitter;\n\n /** Emitted when the user clicks the close button, clicks the overlay, or presses the `Escape` key. Calling `event.preventDefault()` will prevent the dialog from closing. */\n @Event() nanoRequestClose: EventEmitter;\n\n /** Shows the dialog */\n @Method()\n async show() {\n if (this.willShow) {\n return;\n }\n\n const nanoShow = this.nanoShow.emit();\n if (nanoShow.defaultPrevented) {\n this.open = false;\n return;\n }\n\n if (this.dialog) this.dialog.hidden = false;\n this.originalTrigger = document.activeElement as HTMLElement;\n this.willShow = true;\n this.open = true;\n this.modal.activate();\n\n lockBodyScrolling(this.host);\n\n if (this.open) {\n // Wait for the next frame before setting initial focus so the dialog is technically visible\n this.host.addEventListener(\n 'nanoAfterShow',\n () => {\n const nanoInitialFocus = this.nanoInitialFocus.emit();\n if (!nanoInitialFocus.defaultPrevented) {\n this.panel.focus({ preventScroll: true });\n }\n },\n { once: true }\n );\n }\n }\n\n /** Hides the dialog */\n @Method()\n async hide() {\n if (this.willHide) {\n return;\n }\n\n const nanoHide = this.nanoHide.emit();\n if (nanoHide.defaultPrevented) {\n this.open = true;\n return;\n }\n\n this.willHide = true;\n this.open = false;\n this.modal.deactivate();\n unlockBodyScrolling(this.host);\n this.stopVideos();\n\n // Restore focus to the original trigger\n const trigger = this.originalTrigger;\n if (trigger && typeof trigger.focus === 'function') {\n setTimeout(() => trigger.focus());\n }\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n const nanoOverlayDismiss = this.nanoRequestClose.emit();\n\n if (!nanoOverlayDismiss.defaultPrevented && !this.noUserDismiss) {\n this.hide();\n } else {\n this.noDismiss = true;\n setTimeout(() => (this.noDismiss = false), 250);\n }\n };\n\n private handleTransitionEnd = (event: TransitionEvent) => {\n if (\n event.propertyName === 'opacity' &&\n event\n .composedPath()\n .find((node) => node === this.panel || node === this.overlay)\n ) {\n // Ensure we only emit one event when the target element is no longer visible\n this.willShow = false;\n this.willHide = false;\n this.open ? this.nanoAfterShow.emit() : this.nanoAfterHide.emit();\n if (!this.open) this.dialog.hidden = true;\n }\n };\n\n private handleSlotChange = () => {\n this.hasFooter = hasSlot(this.host, 'footer');\n };\n\n private stopVideos() {\n const videos: (HTMLVideoElement | HTMLIFrameElement)[] = Array.from(\n this.host.querySelectorAll('iframe,video')\n );\n videos.forEach((video) => {\n if (video.tagName.toLowerCase() === 'video')\n (video as HTMLVideoElement).pause();\n else {\n const src = video.src;\n video.src = src;\n }\n });\n }\n\n connectedCallback() {\n this.handleHoistChange();\n this.modal = new Modal(this.host);\n }\n\n componentWillLoad() {\n this.handleSlotChange();\n // Show on init if open\n if (this.open) this.show();\n if (this.storeId)\n ComponentStore.init(this, ['open'], this.storeMethod, this.storeId);\n }\n\n componentDidLoad() {\n this.dialog.hidden = !this.open;\n }\n\n disconnectedCallback() {\n unlockBodyScrolling(this.host);\n if (!this.panel) return;\n this.panel.removeEventListener('transitionend', this.handleTransitionEnd);\n }\n\n render() {\n return (\n <Host>\n <div\n part=\"base\"\n class={{\n dialog: true,\n 'dialog--open': this.open,\n 'dialog--has-footer': !this.noFooter,\n 'dialog--has-header': !this.noHeader,\n 'dialog--nodismiss': this.noDismiss,\n 'dialog--with-ribbon': this.showRibbon,\n }}\n onKeyDown={this.handleKeyDown}\n ref={(ele) => (this.dialog = ele)}\n >\n <div\n part=\"overlay\"\n class=\"dialog__overlay\"\n ref={(el) => (this.overlay = el)}\n onClick={this.requestClose}\n />\n\n <div\n ref={(el) => (this.panel = el)}\n part=\"panel\"\n class=\"dialog__panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-hidden={this.open ? 'false' : 'true'}\n aria-label={this.noHeader ? this.label : null}\n aria-labelledby={\n !this.noHeader ? `${this.componentId}-title` : null\n }\n tabIndex={0}\n >\n <div class=\"dialog__body-wrap\">\n {!this.noHeader && (\n <nano-sticker>\n <div part=\"header\" class=\"dialog__header\">\n <span\n part=\"title\"\n class=\"dialog__title\"\n id={`${this.componentId}-title`}\n >\n <slot name=\"label\">\n {/* If there's no label, use an invisible character to prevent the heading from collapsing */}\n {this.label || String.fromCharCode(65279)}\n </slot>\n </span>\n {!this.noUserDismiss && (\n <nano-icon-button\n part=\"close-button\"\n exportparts=\"base:close-button__base\"\n class=\"dialog__close-icon\"\n label=\"close dialog\"\n onClick={this.requestClose}\n iconName=\"light/times\"\n />\n )}\n </div>\n </nano-sticker>\n )}\n <div part=\"body\" class=\"dialog__body\">\n <slot />\n </div>\n {!this.noFooter && (this.hasFooter || !this.noUserDismiss) && (\n <nano-sticker position=\"bottom\">\n <footer part=\"footer\" class=\"dialog__footer\">\n <slot name=\"footer\" onSlotchange={this.handleSlotChange} />\n {!this.noUserDismiss && (\n <button\n class=\"dialog__close-txt\"\n onClick={this.requestClose}\n >\n Close\n </button>\n )}\n </footer>\n </nano-sticker>\n )}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["dialogCss","id","Dialog","this","componentId","willShow","willHide","handleKeyDown","event","key","requestClose","nanoOverlayDismiss","nanoRequestClose","emit","defaultPrevented","noUserDismiss","hide","noDismiss","setTimeout","handleTransitionEnd","propertyName","composedPath","find","node","panel","overlay","open","nanoAfterShow","nanoAfterHide","dialog","hidden","handleSlotChange","hasFooter","hasSlot","host","_panel","p","removeEventListener","addEventListener","handleOpenChange","show","handleHoistChange","globalThis","HTMLElement","prototype","hasOwnProperty","hoist","Array","from","document","body","children","includes","prepend","async","nanoShow","originalTrigger","activeElement","modal","activate","showPopover","lockBodyScrolling","nanoInitialFocus","focus","preventScroll","once","nanoHide","deactivate","stopVideos","trigger","hidePopover","unlockBodyScrolling","videos","querySelectorAll","forEach","video","tagName","toLowerCase","pause","src","connectedCallback","Modal","componentWillLoad","storeId","ComponentStore","init","storeMethod","componentDidLoad","disconnectedCallback","render","h","Host","part","class","noFooter","noHeader","showRibbon","onKeyDown","ref","ele","popover","el","onClick","role","label","tabIndex","name","String","fromCharCode","exportparts","iconName","onSlotchange"],"sources":["./src/components/dialog/dialog.scss?tag=nano-dialog&encapsulation=shadow","./src/components/dialog/dialog.tsx"],"sourcesContent":["@use 'sass:map';\n@use 'sass:list';\n\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/layers';\n@import '../../global/style/nano-theme/form';\n\n/**\n * @prop --width: The preferred width of the dialog. Note that the dialog will shrink to accommodate smaller screens.\n * @prop --border-radius: defaults to #{$layer-border-radius};\n * @prop --content-background: defaults to #{$layer-bg-color};\n * @prop --footer-background: defaults to #{map.get($colors, celsius)};\n * @prop --box-shadow: defaults to $layer-shadow-xlarge;\n * @prop --close-button-color: defaults to #{map.get($colors, palegrey)};\n * @prop --scrim-color: overlay colour of alert display. Defaults to #{$layer-overlay-dark};\n * @prop --tint-color: colour used to highlight items in the dialog - top ribbon, bottom close button. Default #{map.get($colors, blue)};\n * @prop --width: defaults to 31rem;\n * @prop --nano-layer-overlay-blur: inheritable theme applied to backdrop. Default to #{$layer-overlay-blur}\n */\n:host {\n --border-radius: #{$layer-border-radius};\n --content-background: #fafafa;\n --footer-content: #{map.get($colors, lightgrey)};\n --scrim-color: #{$layer-overlay-dark};\n --box-shadow: #{$layer-shadow-large};\n --close-button-color: #{map.get($colors, palegrey)};\n --width: 60rem;\n --tint-color: #{darken(map.get($colors, blue), 5%)};\n --body-padding-v: #{$spacing-large};\n --body-padding-h: #{$spacing-large};\n --header-padding-v: #{$spacing-medium};\n --header-padding-h: #{$spacing-large};\n --footer-padding-v: #{$spacing-medium};\n --footer-padding-h: #{$spacing-large};\n}\n\n.dialog {\n $self: &;\n\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n inset: 0;\n z-index: #{$layer-index-modal};\n\n // reset native popover styles\n border: none;\n inline-size: unset;\n block-size: unset;\n color: unset;\n background-color: unset;\n\n &::backdrop { display: none; }\n\n &__panel {\n display: flex;\n flex-direction: column;\n z-index: 2;\n inline-size: var(--width);\n max-inline-size: calc(100% - (#{$spacing-xlarge} + var(--nano-scroll-lock-size)));\n max-block-size: calc(92vh - #{$spacing-xlarge});\n background-color: var(--content-background);\n border-radius: var(--border-radius);\n box-shadow: var(--box-shadow);\n opacity: 0;\n transform: scale(0.8);\n transition: #{$transition-fast} opacity, #{$transition-fast} transform;\n\n &:focus {\n outline: none;\n }\n\n .dialog--with-ribbon & {\n border-block-start: 5px solid var(--tint-color);\n }\n\n .dialog--open & {\n display: flex;\n opacity: 1;\n transform: none;\n }\n\n .dialog--nodismiss & {\n animation: cannotClose 0.25s ease-in-out 1;\n\n @keyframes cannotClose {\n 0% {\n transform: scale(1);\n }\n\n 50% {\n transform: scale(1.08);\n }\n\n 100% {\n transform: scale(1);\n }\n }\n }\n }\n\n &__header {\n flex: 0 0 auto;\n display: flex;\n inline-size: 100%;\n background-color: var(--content-background);\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n transition: #{$transition-xfast} box-shadow;\n min-inline-size: auto;\n\n [stuck] & {\n box-shadow: #{$layer-shadow-medium};\n }\n }\n\n &__title {\n flex: 1 1 auto;\n font-size: #{$fontsize-large};\n line-height: 1.6;\n padding-block: var(--header-padding-v);\n padding-inline: var(--header-padding-h);\n }\n\n & &__close-icon {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n font-size: #{$fontsize-xlarge};\n padding-block: 0;\n padding-inline: var(--header-padding-h);\n\n --color: var(--close-button-color);\n }\n\n &__body {\n padding-block: 0 var(--body-padding-v);\n padding-inline: var(--body-padding-h);\n\n .dialog:not(.dialog--has-header) & {\n padding-block-start: var(--body-padding-v);\n }\n\n & ::slotted(*) {\n max-inline-size: 100%;\n }\n\n &-wrap {\n flex: 1 1 auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n border-radius: var(--border-radius);\n\n .dialog:not(.dialog--has-header) & {\n border-radius: 0 0 inherit inherit;\n }\n\n .dialog:not(.dialog--has-footer) & {\n border-radius: inherit inherit 0 0;\n }\n }\n }\n\n &__footer {\n inline-size: 100%;\n padding-block: var(--footer-padding-v);\n padding-inline: var(--footer-padding-h);\n background: var(--footer-content);\n border-radius: 0 0 var(--border-radius) var(--border-radius);\n position: sticky;\n inset-block-end: 0;\n min-inline-size: auto;\n\n ::slotted(button) {\n margin-inline-end: #{$spacing-small} !important;\n }\n\n .dialog:not(.dialog--has-footer) & {\n display: none;\n }\n }\n\n &__close-txt {\n color: var(--tint-color);\n border: none;\n text-decoration: underline;\n margin: 0;\n text-underline-offset: 4px;\n background-color: transparent;\n font: inherit;\n -webkit-box-align: center;\n cursor: pointer;\n font-size: #{$fontsize-small};\n padding: 0.5rem;\n border-radius: #{$border-radius-small};\n transition: box-shadow 100ms ease-in-out;\n\n &:focus {\n outline: none;\n box-shadow: #{$control-focus-style};\n }\n }\n\n &__overlay {\n position: fixed;\n inset: 0 !important;\n background-color: var(--scrim-color);\n opacity: 0;\n transition: #{$transition-fast} opacity;\n backdrop-filter: blur(#{$layer-overlay-blur});\n\n .dialog--open & {\n opacity: 1;\n }\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n ComponentInterface,\n} from '@stencil/core';\nimport Modal from '../../utils/modal';\nimport { lockBodyScrolling, unlockBodyScrolling } from '../../utils/scroll';\nimport { hasSlot } from '../../utils/slot';\nimport {\n ComponentStore,\n StorageMethods,\n} from '../../utils/store/component-store';\n\nlet id = 0;\n\n/**\n * Dialogs, sometimes called \"modals\", appear above the page and require the user's immediate attention.\n *\n * @part base - The component’s base wrapper\n * @part overlay - The overlay that covers the screen behind the dialog\n * @part panel - The dialog’s panel (where the dialog and its content are rendered)\n * @part header - The dialog’s header. This element wraps the title and header actions\n * @part title - The dialog’s title\n * @part close-button - The `<nano-icon-button>` close button\n * @part close-button__base - The close button's exported `base` part\n * @part body - dilog body / content\n * @part footer - dialog footer bar\n *\n * @slot label - The dialog's label. Alternatively, you can use the label prop.\n * @slot footer - The dialog's footer, usually one or more buttons representing various options.\n * @slot - The dialog's content.\n */\n@Component({\n tag: 'nano-dialog',\n styleUrl: 'dialog.scss',\n shadow: true,\n})\nexport class Dialog implements ComponentInterface {\n private componentId = `dialog-${++id}`;\n private modal: Modal;\n private willShow = false;\n private willHide = false;\n private originalTrigger: HTMLElement | null;\n private overlay: HTMLElement;\n private dialog: HTMLElement;\n\n get panel() {\n return this._panel;\n }\n set panel(p: HTMLElement) {\n if (this._panel) {\n this.panel.removeEventListener('transitionend', this.handleTransitionEnd);\n }\n p.addEventListener('transitionend', this.handleTransitionEnd);\n this._panel = p;\n }\n private _panel: HTMLElement;\n\n @Element() host: HTMLNanoDialogElement;\n @State() noDismiss = false;\n @State() hasFooter = false;\n\n /** Show a colour ribbon at the top of the modal */\n @Prop() showRibbon = true;\n\n /** Indicates whether or not the dialog is open. You can use this in lieu of the show/hide methods. */\n @Prop({ mutable: true, reflect: true }) open = false;\n\n @Watch('open')\n handleOpenChange() {\n this.open ? this.show() : this.hide();\n }\n\n /** The dialog's label as displayed in the header. You should always include a relevant\n * label even when using `no-header`, as it is required for proper accessibility. */\n @Prop() label!: string;\n\n /** Set to true to disable the header. This will also remove the default close button,\n * so please ensure you provide an easy, accessible way for users to dismiss the dialog. */\n @Prop() noHeader = false;\n\n /** Set to true to disable the footer. This will also remove the footer close button,\n * so please ensure you provide an easy, accessible way for users to dismiss the dialog. */\n @Prop() noFooter = false;\n\n /** An alternative to `preventDefault()` on the `nanoRequestClose` event. This will hide the close button and disable clicks on the overlay or presses the `Escape` key */\n @Prop() noUserDismiss = false;\n\n /** Store search queries (against this ID) to the component store. Use in conjunction with storeMethod */\n @Prop() storeId?: string;\n\n /** The method of storage. Either session storage, url hash (after the '#') or url query (after the '?'). */\n @Prop() storeMethod: StorageMethods = 'url-hash';\n\n /** Relocate the dialog to the root of the DOM. Useful for elements bound via css `transform: ...` */\n @Prop() hoist = false;\n\n @Watch('hoist')\n handleHoistChange() {\n // if native popover is supported then bail as this is not required\n if (\n globalThis.HTMLElement.prototype.hasOwnProperty('popover') ||\n !this.hoist ||\n Array.from(document.body.children).includes(this.host)\n )\n return;\n document.body.prepend(this.host);\n }\n\n /** Emitted when the dialog opens. Calling `event.preventDefault()` will prevent it from being opened. */\n @Event() nanoShow: EventEmitter;\n\n /** Emitted after the dialog opens and all transitions are complete. */\n @Event() nanoAfterShow: EventEmitter;\n\n /** Emitted when the dialog closes. Calling `event.preventDefault()` will prevent it from being closed. */\n @Event() nanoHide: EventEmitter;\n\n /** Emitted after the dialog closes and all transitions are complete. */\n @Event() nanoAfterHide: EventEmitter;\n\n /** Emitted when the dialog opens and the panel gains focus. Calling `event.preventDefault()` will prevent\n * focus and allow you to set it on a different element in the dialog, such as an input or button. */\n @Event() nanoInitialFocus: EventEmitter;\n\n /** Emitted when the user clicks the close button, clicks the overlay, or presses the `Escape` key. Calling `event.preventDefault()` will prevent the dialog from closing. */\n @Event() nanoRequestClose: EventEmitter;\n\n /** Shows the dialog */\n @Method()\n async show() {\n if (this.willShow) {\n return;\n }\n\n const nanoShow = this.nanoShow.emit();\n if (nanoShow.defaultPrevented) {\n this.open = false;\n return;\n }\n\n if (this.dialog) this.dialog.hidden = false;\n this.originalTrigger = document.activeElement as HTMLElement;\n this.willShow = true;\n\n this.open = true;\n this.modal.activate();\n\n // @ts-ignore\n if (typeof this.dialog?.showPopover === 'function') {\n // @ts-ignore\n this.dialog.showPopover();\n }\n\n lockBodyScrolling(this.host);\n\n if (this.open) {\n // Wait for the next frame before setting initial focus so the dialog is technically visible\n this.host.addEventListener(\n 'nanoAfterShow',\n () => {\n const nanoInitialFocus = this.nanoInitialFocus.emit();\n if (!nanoInitialFocus.defaultPrevented) {\n this.panel.focus({ preventScroll: true });\n }\n },\n { once: true }\n );\n }\n }\n\n /** Hides the dialog */\n @Method()\n async hide() {\n if (this.willHide) {\n return;\n }\n\n const nanoHide = this.nanoHide.emit();\n if (nanoHide.defaultPrevented) {\n this.open = true;\n return;\n }\n\n this.willHide = true;\n this.open = false;\n this.modal.deactivate();\n this.stopVideos();\n\n // Restore focus to the original trigger\n const trigger = this.originalTrigger;\n if (trigger && typeof trigger.focus === 'function') {\n setTimeout(() => trigger.focus());\n }\n\n setTimeout(() => {\n // @ts-ignore\n if (!this.open && typeof this.dialog?.hidePopover === 'function') {\n // @ts-ignore\n this.dialog.hidePopover();\n }\n unlockBodyScrolling(this.host);\n }, 300);\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n const nanoOverlayDismiss = this.nanoRequestClose.emit();\n\n if (!nanoOverlayDismiss.defaultPrevented && !this.noUserDismiss) {\n this.hide();\n } else {\n this.noDismiss = true;\n setTimeout(() => (this.noDismiss = false), 250);\n }\n };\n\n private handleTransitionEnd = (event: TransitionEvent) => {\n if (\n event.propertyName === 'opacity' &&\n event\n .composedPath()\n .find((node) => node === this.panel || node === this.overlay)\n ) {\n // Ensure we only emit one event when the target element is no longer visible\n this.willShow = false;\n this.willHide = false;\n this.open ? this.nanoAfterShow.emit() : this.nanoAfterHide.emit();\n if (!this.open) this.dialog.hidden = true;\n }\n };\n\n private handleSlotChange = () => {\n this.hasFooter = hasSlot(this.host, 'footer');\n };\n\n private stopVideos() {\n const videos: (HTMLVideoElement | HTMLIFrameElement)[] = Array.from(\n this.host.querySelectorAll('iframe,video')\n );\n videos.forEach((video) => {\n if (video.tagName.toLowerCase() === 'video')\n (video as HTMLVideoElement).pause();\n else {\n const src = video.src;\n video.src = src;\n }\n });\n }\n\n connectedCallback() {\n this.handleHoistChange();\n this.modal = new Modal(this.host);\n }\n\n componentWillLoad() {\n this.handleSlotChange();\n // Show on init if open\n if (this.open) this.show();\n if (this.storeId)\n ComponentStore.init(this, ['open'], this.storeMethod, this.storeId);\n }\n\n componentDidLoad() {\n this.dialog.hidden = !this.open;\n }\n\n disconnectedCallback() {\n unlockBodyScrolling(this.host);\n if (!this.panel) return;\n this.panel.removeEventListener('transitionend', this.handleTransitionEnd);\n }\n\n render() {\n return (\n <Host>\n <div\n part=\"base\"\n class={{\n dialog: true,\n 'dialog--open': this.open,\n 'dialog--has-footer': !this.noFooter,\n 'dialog--has-header': !this.noHeader,\n 'dialog--nodismiss': this.noDismiss,\n 'dialog--with-ribbon': this.showRibbon,\n }}\n onKeyDown={this.handleKeyDown}\n ref={(ele) => (this.dialog = ele)}\n // @ts-ignore\n popover=\"manual\"\n >\n <div\n part=\"overlay\"\n class=\"dialog__overlay\"\n ref={(el) => (this.overlay = el)}\n onClick={this.requestClose}\n />\n\n <div\n ref={(el) => (this.panel = el)}\n part=\"panel\"\n class=\"dialog__panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-hidden={this.open ? 'false' : 'true'}\n aria-label={this.noHeader ? this.label : null}\n aria-labelledby={\n !this.noHeader ? `${this.componentId}-title` : null\n }\n tabIndex={-1}\n >\n <div class=\"dialog__body-wrap\">\n {!this.noHeader && (\n <nano-sticker>\n <header part=\"header\" class=\"dialog__header\">\n <span\n part=\"title\"\n class=\"dialog__title\"\n id={`${this.componentId}-title`}\n >\n <slot name=\"label\">\n {/* If there's no label, use an invisible character to prevent the heading from collapsing */}\n {this.label || String.fromCharCode(65279)}\n </slot>\n </span>\n {!this.noUserDismiss && (\n <nano-icon-button\n part=\"close-button\"\n exportparts=\"base:close-button__base\"\n class=\"dialog__close-icon\"\n label=\"close dialog\"\n onClick={this.requestClose}\n iconName=\"light/times\"\n />\n )}\n </header>\n </nano-sticker>\n )}\n <div part=\"body\" class=\"dialog__body\">\n <slot />\n </div>\n {!this.noFooter && (this.hasFooter || !this.noUserDismiss) && (\n <footer part=\"footer\" class=\"dialog__footer\">\n <slot name=\"footer\" onSlotchange={this.handleSlotChange} />\n {!this.noUserDismiss && (\n <button\n class=\"dialog__close-txt\"\n onClick={this.requestClose}\n >\n Close\n </button>\n )}\n </footer>\n )}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
- import{r as e,c as a,h as t,g as r}from"./index-9695db0a.js";import{M as i}from"./modal-88c117cd.js";import{l as s,u as n}from"./scroll-ac332213.js";import{h as o}from"./slot-8126e238.js";import{w as d}from"./events-6a805b42.js";import{C as l}from"./component-store-486d9d7a.js";import"./tabbable-26a66a22.js";import"./dom-8599fac1.js";import"./throttle-ac4fcefa.js";const h=":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--size:25rem;--panel-background:white;--panel-shadow:var(--nano-layer-shadow-xlarge, 0 4px 16px rgba(0, 0, 0, 0.4));--scrim-color:var(--nano-layer-overlay-dark, rgb(74 74 74 / 50%));--header-button-color:#b5aea7;--footer-background:#e4e6e8;--header-background:var(--panel-background);--header-spacing:var(--nano-spacing-large, 20px);--body-spacing:var(--nano-spacing-large, 20px);--footer-spacing:var(--nano-spacing-medium, 16px) var(--nano-spacing-large, 20px);--dir:1}:host(:dir(rtl)){--dir:-1}:host-context([dir=rtl]){--dir:-1}.drawer{inset-block-start:0;inset-inline-start:0;inline-size:100%;block-size:100%;pointer-events:none;overflow:hidden}.drawer--contained{position:absolute;z-index:initial}.drawer--fixed{position:fixed;z-index:var(--nano-layer-index-modal, 700)}.drawer__panel{position:absolute;z-index:2;max-inline-size:100%;max-block-size:100%;background-color:var(--panel-background);box-shadow:var(--panel-shadow);pointer-events:all;transition:var(--nano-transition-fast, 0.3s) opacity, var(--nano-transition-fast, 0.3s) transform;display:flex;flex-direction:column}@media (forced-colors: active){.drawer__panel{border:solid 1px #4a4a4a}}.drawer__panel:focus{outline:none}.drawer--nodismiss .drawer__panel{animation:cannotClose 0.25s ease-in-out 1}@keyframes cannotClose{0%{transform:scale(1)}50%{transform:scale(1.08)}100%{transform:scale(1)}}.drawer--top .drawer__panel{inset-block:0 auto;inset-inline:0 auto;inline-size:100%;block-size:var(--size);opacity:0;transform:translateY(-100%)}.drawer--bottom .drawer__panel{inset-block:auto 0;inset-inline:0 auto;inline-size:100%;block-size:var(--size);opacity:0;transform:translateY(100%)}.drawer--top.drawer--open .drawer__panel,.drawer--bottom.drawer--open .drawer__panel{opacity:1;transform:translateY(0)}.drawer--start .drawer__panel{inset-block:0 auto;inset-inline:0 auto;inline-size:var(--size);block-size:100%;opacity:0;transform:translateX(calc(var(--dir) * -100%))}.drawer--end .drawer__panel{inset-block:0 auto;inset-inline:auto 0;inline-size:var(--size);block-size:100%;opacity:0;transform:translateX(calc(var(--dir) * 100%))}.drawer--start.drawer--open .drawer__panel,.drawer--end.drawer--open .drawer__panel{opacity:1;transform:translateX(0)}.drawer__header{inline-size:100%;display:flex;background-color:var(--header-background)}[stuck] .drawer__header{box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2))}.drawer__title{flex:1 1 auto;font:inherit;font-size:var(--nano-fontsize-large, 1.25rem);line-height:1.2;padding:var(--header-spacing);margin:0}.drawer__header-actions{flex-shrink:0;display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--nano-spacing-xsmall, 4px);padding:0 var(--header-spacing)}.drawer__header-actions .drawer__close,.drawer__header-actions ::slotted(nano-icon-button){flex:0 0 auto;display:flex;align-items:center;font-size:var(--nano-fontsize-xlarge, 1.5rem);--color:var(--header-button-color)}.drawer__main{display:flex;flex-direction:column;overflow:auto;-webkit-overflow-scrolling:touch;flex:1 1 auto}.drawer__body{display:block;flex:1 1 auto;padding:var(--body-spacing);padding-block:0 var(--body-spacing);padding-inline:var(--body-spacing)}.drawer:not(.drawer--has-header) .drawer__body{padding-block-start:var(--body-spacing)}.drawer__footer{inline-size:100%;text-align:end;padding:var(--footer-spacing);background:var(--footer-background);inset-block-start:1px;position:relative}.drawer__footer ::slotted(button:not(:last-of-type)){margin-inline-end:var(--nano-spacing-xsmall, 4px)}.drawer:not(.drawer--has-footer) .drawer__footer{display:none}.drawer__overlay{display:block;position:fixed;inset:0;background-color:var(--scrim-color);pointer-events:all;-webkit-backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px));backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px));opacity:0;transition:var(--nano-transition-fast, 0.3s) opacity}.drawer--open .drawer__overlay{opacity:1}.drawer--contained .drawer__overlay{display:none}";const c=class{constructor(t){e(this,t);this.nanoShow=a(this,"nanoShow",7);this.nanoHide=a(this,"nanoHide",7);this.nanoAfterHide=a(this,"nanoAfterHide",7);this.nanoAfterShow=a(this,"nanoAfterShow",7);this.nanoInitialFocus=a(this,"nanoInitialFocus",7);this.nanoRquestClose=a(this,"nanoRquestClose",7);this.handleDocumentKeyDown=e=>{if(this.contained){return}if(e.key==="Escape"&&this.modal.isActive()&&this.open){e.stopImmediatePropagation();this.requestClose("keyboard")}};this.handleTransitionEnd=e=>{if(e.propertyName==="opacity"&&e.composedPath().find((e=>e===this.panel||e===this.overlay))){if(!this.open){this.drawer.hidden=true;this.overlay.hidden=false;this.panel.hidden=false}this.open?this.nanoAfterShow.emit():this.nanoAfterHide.emit()}};this.handleSlotChange=()=>{this.hasFooter=o(this.host,"footer")};this.noDismiss=false;this.hasFooter=undefined;this.open=false;this.label=undefined;this.placement="end";this.contained=false;this.noHeader=false;this.storeId=undefined;this.storeMethod="url-hash";this.noUserDismiss=false;this.hoist=false}get panel(){return this._panel}set panel(e){if(this._panel){this.panel.removeEventListener("animationend",this.handleTransitionEnd)}if(!e)return;e.addEventListener("transitionend",this.handleTransitionEnd);this._panel=e}handleHoistChange(){if(!this.hoist||Array.from(document.body.children).includes(this.host))return;document.body.prepend(this.host)}async show(){if(this.open)return undefined;this.open=true;return d(this.host,"nanoAfterShow")}async hide(){if(!this.open)return undefined;this.open=false;return d(this.host,"nanoAfterHide")}requestClose(e){const a=this.nanoRquestClose.emit({source:e});if(a.defaultPrevented||this.noUserDismiss){this.noDismiss=true;setTimeout((()=>this.noDismiss=false),250);return}this.hide()}handleNoModalChange(){if(this.open&&!this.contained){this.modal.activate();s(this.host)}if(this.open&&this.contained){this.modal.deactivate();n(this.host)}}async handleOpenChange(){if(this.open){this.nanoShow.emit();this.addOpenListeners();this.originalTrigger=document.activeElement;if(!this.contained){this.modal.activate();s(this.host)}const e=this.host.querySelector("[autofocus]");if(e){e.removeAttribute("autofocus")}this.drawer.hidden=false;requestAnimationFrame((()=>{const a=this.nanoInitialFocus.emit();if(!a.defaultPrevented){if(e){e.focus({preventScroll:true})}else{this.panel.focus({preventScroll:true})}}if(e){e.setAttribute("autofocus","")}}));this.nanoAfterShow.emit();return}this.nanoHide.emit();this.removeOpenListeners();if(!this.contained){this.modal.deactivate();n(this.host)}const e=this.originalTrigger;if(typeof e?.focus==="function"){setTimeout((()=>e.focus()))}}addOpenListeners(){document.addEventListener("keydown",this.handleDocumentKeyDown)}removeOpenListeners(){document.removeEventListener("keydown",this.handleDocumentKeyDown)}connectedCallback(){this.handleHoistChange();this.modal=new i(this.host)}disconnectedCallback(){n(this.host)}componentWillLoad(){this.handleSlotChange();if(this.open)this.show();if(this.storeId)l.init(this,["open"],this.storeMethod,this.storeId)}componentDidLoad(){this.drawer.hidden=!this.open;if(this.open){this.addOpenListeners();if(!this.contained){this.modal.activate();s(this.host)}}}render(){return t("div",{ref:e=>this.drawer=e,part:"base",class:{drawer:true,"drawer--open":this.open,[`drawer--${this.placement}`]:true,"drawer--contained":this.contained,"drawer--fixed":!this.contained,"drawer--has-footer":o(this.host,"footer"),"drawer--has-header":!this.noHeader,"drawer--nodismiss":this.noDismiss}},t("div",{ref:e=>this.overlay=e,part:"overlay",class:"drawer__overlay",onClick:()=>this.requestClose("overlay"),tabindex:"-1"}),t("div",{ref:e=>this.panel=e,part:"panel",class:"drawer__panel",role:"dialog","aria-modal":"true","aria-hidden":this.open?"false":"true","aria-label":this.noHeader?this.label:undefined,"aria-labelledby":!this.noHeader?"title":undefined,tabindex:"0"},t("div",{class:"drawer__main"},!this.noHeader&&t("nano-sticker",null,t("div",{part:"header",class:"drawer__header"},t("h2",{part:"title",class:"drawer__title",id:"title"},t("slot",{name:"label"},this.label.length>0?this.label:String.fromCharCode(65279))),t("div",{part:"header-actions",class:"drawer__header-actions"},t("slot",{name:"header-actions"}),!this.noUserDismiss&&t("nano-icon-button",{part:"close-button",exportparts:"base:close-button__base",class:"drawer__close",iconName:"light/times",label:"Close",onClick:()=>this.requestClose("close-button")})))),t("div",{part:"body",class:"drawer__body"},t("slot",null)),t("nano-sticker",{position:"bottom"},t("footer",{part:"footer",class:"drawer__footer"},t("slot",{name:"footer",onSlotchange:this.handleSlotChange}))))))}get host(){return r(this)}static get watchers(){return{hoist:["handleHoistChange"],contained:["handleNoModalChange"],open:["handleOpenChange"]}}};c.style=h;export{c as nano_drawer};
4
+ import{r as e,c as a,h as t,g as r}from"./index-9695db0a.js";import{M as i}from"./modal-88c117cd.js";import{l as s,u as n}from"./scroll-762b3e1a.js";import{h as o}from"./slot-8126e238.js";import{w as d}from"./events-6a805b42.js";import{C as l}from"./component-store-486d9d7a.js";import"./tabbable-26a66a22.js";import"./dom-8599fac1.js";import"./throttle-ac4fcefa.js";const h=":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--size:25rem;--panel-background:white;--panel-shadow:var(--nano-layer-shadow-xlarge, 0 4px 16px rgba(0, 0, 0, 0.4));--scrim-color:var(--nano-layer-overlay-dark, rgb(74 74 74 / 50%));--header-button-color:#b5aea7;--footer-background:#e4e6e8;--header-background:var(--panel-background);--header-spacing:var(--nano-spacing-large, 20px);--body-spacing:var(--nano-spacing-large, 20px);--footer-spacing:var(--nano-spacing-medium, 16px) var(--nano-spacing-large, 20px);--dir:1}:host(:dir(rtl)){--dir:-1}:host-context([dir=rtl]){--dir:-1}.drawer{inset-block-start:0;inset-inline-start:0;inline-size:100%;block-size:100%;pointer-events:none;overflow:hidden}.drawer--contained{position:absolute;z-index:initial}.drawer--fixed{position:fixed;z-index:var(--nano-layer-index-modal, 700)}.drawer__panel{position:absolute;z-index:2;max-inline-size:100%;max-block-size:100%;background-color:var(--panel-background);box-shadow:var(--panel-shadow);pointer-events:all;transition:var(--nano-transition-fast, 0.3s) opacity, var(--nano-transition-fast, 0.3s) transform;display:flex;flex-direction:column}@media (forced-colors: active){.drawer__panel{border:solid 1px #4a4a4a}}.drawer__panel:focus{outline:none}.drawer--nodismiss .drawer__panel{animation:cannotClose 0.25s ease-in-out 1}@keyframes cannotClose{0%{transform:scale(1)}50%{transform:scale(1.08)}100%{transform:scale(1)}}.drawer--top .drawer__panel{inset-block:0 auto;inset-inline:0 auto;inline-size:100%;block-size:var(--size);opacity:0;transform:translateY(-100%)}.drawer--bottom .drawer__panel{inset-block:auto 0;inset-inline:0 auto;inline-size:100%;block-size:var(--size);opacity:0;transform:translateY(100%)}.drawer--top.drawer--open .drawer__panel,.drawer--bottom.drawer--open .drawer__panel{opacity:1;transform:translateY(0)}.drawer--start .drawer__panel{inset-block:0 auto;inset-inline:0 auto;inline-size:var(--size);block-size:100%;opacity:0;transform:translateX(calc(var(--dir) * -100%))}.drawer--end .drawer__panel{inset-block:0 auto;inset-inline:auto 0;inline-size:var(--size);block-size:100%;opacity:0;transform:translateX(calc(var(--dir) * 100%))}.drawer--start.drawer--open .drawer__panel,.drawer--end.drawer--open .drawer__panel{opacity:1;transform:translateX(0)}.drawer__header{inline-size:100%;display:flex;background-color:var(--header-background)}[stuck] .drawer__header{box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2))}.drawer__title{flex:1 1 auto;font:inherit;font-size:var(--nano-fontsize-large, 1.25rem);line-height:1.2;padding:var(--header-spacing);margin:0}.drawer__header-actions{flex-shrink:0;display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--nano-spacing-xsmall, 4px);padding:0 var(--header-spacing)}.drawer__header-actions .drawer__close,.drawer__header-actions ::slotted(nano-icon-button){flex:0 0 auto;display:flex;align-items:center;font-size:var(--nano-fontsize-xlarge, 1.5rem);--color:var(--header-button-color)}.drawer__main{display:flex;flex-direction:column;overflow:auto;-webkit-overflow-scrolling:touch;flex:1 1 auto}.drawer__body{display:block;flex:1 1 auto;padding:var(--body-spacing);padding-block:0 var(--body-spacing);padding-inline:var(--body-spacing)}.drawer:not(.drawer--has-header) .drawer__body{padding-block-start:var(--body-spacing)}.drawer__footer{inline-size:100%;text-align:end;padding:var(--footer-spacing);background:var(--footer-background);inset-block-start:1px;position:relative}.drawer__footer ::slotted(button:not(:last-of-type)){margin-inline-end:var(--nano-spacing-xsmall, 4px)}.drawer:not(.drawer--has-footer) .drawer__footer{display:none}.drawer__overlay{display:block;position:fixed;inset:0;background-color:var(--scrim-color);pointer-events:all;-webkit-backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px));backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px));opacity:0;transition:var(--nano-transition-fast, 0.3s) opacity}.drawer--open .drawer__overlay{opacity:1}.drawer--contained .drawer__overlay{display:none}";const c=class{constructor(t){e(this,t);this.nanoShow=a(this,"nanoShow",7);this.nanoHide=a(this,"nanoHide",7);this.nanoAfterHide=a(this,"nanoAfterHide",7);this.nanoAfterShow=a(this,"nanoAfterShow",7);this.nanoInitialFocus=a(this,"nanoInitialFocus",7);this.nanoRquestClose=a(this,"nanoRquestClose",7);this.handleDocumentKeyDown=e=>{if(this.contained){return}if(e.key==="Escape"&&this.modal.isActive()&&this.open){e.stopImmediatePropagation();this.requestClose("keyboard")}};this.handleTransitionEnd=e=>{if(e.propertyName==="opacity"&&e.composedPath().find((e=>e===this.panel||e===this.overlay))){if(!this.open){this.drawer.hidden=true;this.overlay.hidden=false;this.panel.hidden=false}this.open?this.nanoAfterShow.emit():this.nanoAfterHide.emit()}};this.handleSlotChange=()=>{this.hasFooter=o(this.host,"footer")};this.noDismiss=false;this.hasFooter=undefined;this.open=false;this.label=undefined;this.placement="end";this.contained=false;this.noHeader=false;this.storeId=undefined;this.storeMethod="url-hash";this.noUserDismiss=false;this.hoist=false}get panel(){return this._panel}set panel(e){if(this._panel){this.panel.removeEventListener("animationend",this.handleTransitionEnd)}if(!e)return;e.addEventListener("transitionend",this.handleTransitionEnd);this._panel=e}handleHoistChange(){if(!this.hoist||Array.from(document.body.children).includes(this.host))return;document.body.prepend(this.host)}async show(){if(this.open)return undefined;this.open=true;return d(this.host,"nanoAfterShow")}async hide(){if(!this.open)return undefined;this.open=false;return d(this.host,"nanoAfterHide")}requestClose(e){const a=this.nanoRquestClose.emit({source:e});if(a.defaultPrevented||this.noUserDismiss){this.noDismiss=true;setTimeout((()=>this.noDismiss=false),250);return}this.hide()}handleNoModalChange(){if(this.open&&!this.contained){this.modal.activate();s(this.host)}if(this.open&&this.contained){this.modal.deactivate();n(this.host)}}async handleOpenChange(){if(this.open){this.nanoShow.emit();this.addOpenListeners();this.originalTrigger=document.activeElement;if(!this.contained){this.modal.activate();s(this.host)}const e=this.host.querySelector("[autofocus]");if(e){e.removeAttribute("autofocus")}this.drawer.hidden=false;requestAnimationFrame((()=>{const a=this.nanoInitialFocus.emit();if(!a.defaultPrevented){if(e){e.focus({preventScroll:true})}else{this.panel.focus({preventScroll:true})}}if(e){e.setAttribute("autofocus","")}}));this.nanoAfterShow.emit();return}this.nanoHide.emit();this.removeOpenListeners();if(!this.contained){this.modal.deactivate();n(this.host)}const e=this.originalTrigger;if(typeof e?.focus==="function"){setTimeout((()=>e.focus()))}}addOpenListeners(){document.addEventListener("keydown",this.handleDocumentKeyDown)}removeOpenListeners(){document.removeEventListener("keydown",this.handleDocumentKeyDown)}connectedCallback(){this.handleHoistChange();this.modal=new i(this.host)}disconnectedCallback(){n(this.host)}componentWillLoad(){this.handleSlotChange();if(this.open)this.show();if(this.storeId)l.init(this,["open"],this.storeMethod,this.storeId)}componentDidLoad(){this.drawer.hidden=!this.open;if(this.open){this.addOpenListeners();if(!this.contained){this.modal.activate();s(this.host)}}}render(){return t("div",{ref:e=>this.drawer=e,part:"base",class:{drawer:true,"drawer--open":this.open,[`drawer--${this.placement}`]:true,"drawer--contained":this.contained,"drawer--fixed":!this.contained,"drawer--has-footer":o(this.host,"footer"),"drawer--has-header":!this.noHeader,"drawer--nodismiss":this.noDismiss}},t("div",{ref:e=>this.overlay=e,part:"overlay",class:"drawer__overlay",onClick:()=>this.requestClose("overlay"),tabindex:"-1"}),t("div",{ref:e=>this.panel=e,part:"panel",class:"drawer__panel",role:"dialog","aria-modal":"true","aria-hidden":this.open?"false":"true","aria-label":this.noHeader?this.label:undefined,"aria-labelledby":!this.noHeader?"title":undefined,tabindex:"0"},t("div",{class:"drawer__main"},!this.noHeader&&t("nano-sticker",null,t("div",{part:"header",class:"drawer__header"},t("h2",{part:"title",class:"drawer__title",id:"title"},t("slot",{name:"label"},this.label.length>0?this.label:String.fromCharCode(65279))),t("div",{part:"header-actions",class:"drawer__header-actions"},t("slot",{name:"header-actions"}),!this.noUserDismiss&&t("nano-icon-button",{part:"close-button",exportparts:"base:close-button__base",class:"drawer__close",iconName:"light/times",label:"Close",onClick:()=>this.requestClose("close-button")})))),t("div",{part:"body",class:"drawer__body"},t("slot",null)),t("nano-sticker",{position:"bottom"},t("footer",{part:"footer",class:"drawer__footer"},t("slot",{name:"footer",onSlotchange:this.handleSlotChange}))))))}get host(){return r(this)}static get watchers(){return{hoist:["handleHoistChange"],contained:["handleNoModalChange"],open:["handleOpenChange"]}}};c.style=h;export{c as nano_drawer};
5
5
  //# sourceMappingURL=nano-drawer.entry.js.map