@nanoporetech-digital/components 5.2.1 → 5.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 (259) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/{_commonjsHelpers-9f2314fc.js → _commonjsHelpers-29614748.js} +1 -17
  3. package/dist/cjs/_commonjsHelpers-29614748.js.map +1 -0
  4. package/dist/cjs/algoliasearch-lite.esm.browser-992a2eff.js +922 -0
  5. package/dist/cjs/algoliasearch-lite.esm.browser-992a2eff.js.map +1 -0
  6. package/dist/cjs/component-store-21cb4901.js +328 -0
  7. package/dist/cjs/component-store-21cb4901.js.map +1 -0
  8. package/dist/cjs/events-db0a42ee.js +39 -0
  9. package/dist/cjs/events-db0a42ee.js.map +1 -0
  10. package/dist/cjs/loader.cjs.js +1 -1
  11. package/dist/cjs/nano-alert.cjs.entry.js +9 -2
  12. package/dist/cjs/nano-alert.cjs.entry.js.map +1 -1
  13. package/dist/cjs/nano-algolia-filter.cjs.entry.js +1 -2
  14. package/dist/cjs/nano-algolia-filter.cjs.entry.js.map +1 -1
  15. package/dist/cjs/nano-algolia-input.cjs.entry.js +8 -4
  16. package/dist/cjs/nano-algolia-input.cjs.entry.js.map +1 -1
  17. package/dist/cjs/nano-algolia.cjs.entry.js +4 -4
  18. package/dist/cjs/nano-algolia.cjs.entry.js.map +1 -1
  19. package/dist/cjs/nano-components.cjs.js +1 -1
  20. package/dist/cjs/nano-datalist_3.cjs.entry.js +1 -1
  21. package/dist/cjs/nano-dialog.cjs.entry.js +23 -22
  22. package/dist/cjs/nano-dialog.cjs.entry.js.map +1 -1
  23. package/dist/cjs/nano-drawer.cjs.entry.js +169 -111
  24. package/dist/cjs/nano-drawer.cjs.entry.js.map +1 -1
  25. package/dist/cjs/nano-dropdown.cjs.entry.js +16 -2
  26. package/dist/cjs/nano-dropdown.cjs.entry.js.map +1 -1
  27. package/dist/cjs/nano-global-nav.cjs.entry.js +5 -6
  28. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  29. package/dist/cjs/nano-global-search-results.cjs.entry.js +2 -1
  30. package/dist/cjs/nano-global-search-results.cjs.entry.js.map +1 -1
  31. package/dist/cjs/nano-slides.cjs.entry.js +1 -1
  32. package/dist/cjs/nano-sortable.cjs.entry.js +3 -15
  33. package/dist/cjs/nano-sortable.cjs.entry.js.map +1 -1
  34. package/dist/cjs/nano-sticker.cjs.entry.js +16 -9
  35. package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
  36. package/dist/cjs/nano-tab-group.cjs.entry.js +1 -2
  37. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  38. package/dist/cjs/{nano-table-10a40ab3.js → nano-table-e15cc6b0.js} +6 -6
  39. package/dist/cjs/nano-table-e15cc6b0.js.map +1 -0
  40. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  41. package/dist/cjs/{slot-a448c1a7.js → slot-2dd6ed1d.js} +20 -15
  42. package/dist/cjs/slot-2dd6ed1d.js.map +1 -0
  43. package/dist/cjs/{table.worker-f04588c1.js → table.worker-8759e6ea.js} +2 -2
  44. package/dist/cjs/table.worker-8759e6ea.js.map +1 -0
  45. package/dist/collection/components/alert/alert.css +15 -0
  46. package/dist/collection/components/alert/alert.js +10 -2
  47. package/dist/collection/components/alert/alert.js.map +1 -1
  48. package/dist/collection/components/algolia/algolia-interface.js.map +1 -1
  49. package/dist/collection/components/algolia/algolia.js +1 -1
  50. package/dist/collection/components/algolia/algolia.js.map +1 -1
  51. package/dist/collection/components/dialog/dialog.css +1 -17
  52. package/dist/collection/components/dialog/dialog.js +31 -20
  53. package/dist/collection/components/dialog/dialog.js.map +1 -1
  54. package/dist/collection/components/drawer/drawer.css +136 -67
  55. package/dist/collection/components/drawer/drawer.js +282 -154
  56. package/dist/collection/components/drawer/drawer.js.map +1 -1
  57. package/dist/collection/components/dropdown/dropdown.css +10 -0
  58. package/dist/collection/components/dropdown/dropdown.js +15 -1
  59. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  60. package/dist/collection/components/global-nav/global-nav.js +2 -2
  61. package/dist/collection/components/global-nav/global-nav.js.map +1 -1
  62. package/dist/collection/components/global-nav/style/global-nav.css +5 -1
  63. package/dist/collection/components/global-search-results/global-search-results.js +2 -1
  64. package/dist/collection/components/global-search-results/global-search-results.js.map +1 -1
  65. package/dist/collection/components/sticker/sticker.js +16 -9
  66. package/dist/collection/components/sticker/sticker.js.map +1 -1
  67. package/dist/collection/components/table/table.pin-service.js +4 -4
  68. package/dist/collection/components/table/table.pin-service.js.map +1 -1
  69. package/dist/collection/utils/events.js +17 -0
  70. package/dist/collection/utils/events.js.map +1 -1
  71. package/dist/collection/utils/slot.js +19 -14
  72. package/dist/collection/utils/slot.js.map +1 -1
  73. package/dist/collection/utils/store/get-set.js +6 -12
  74. package/dist/collection/utils/store/get-set.js.map +1 -1
  75. package/dist/components/_commonjsHelpers.js +1 -16
  76. package/dist/components/_commonjsHelpers.js.map +1 -1
  77. package/dist/components/algolia.js +2 -2
  78. package/dist/components/algolia.js.map +1 -1
  79. package/dist/components/algoliasearch-lite.esm.browser.js +920 -0
  80. package/dist/components/algoliasearch-lite.esm.browser.js.map +1 -0
  81. package/dist/components/component-store.js +68 -2001
  82. package/dist/components/component-store.js.map +1 -1
  83. package/dist/components/dropdown.js +16 -2
  84. package/dist/components/dropdown.js.map +1 -1
  85. package/dist/components/events.js +36 -0
  86. package/dist/components/events.js.map +1 -0
  87. package/dist/components/nano-alert.js +10 -2
  88. package/dist/components/nano-alert.js.map +1 -1
  89. package/dist/components/nano-algolia-input.js +6 -1
  90. package/dist/components/nano-algolia-input.js.map +1 -1
  91. package/dist/components/nano-dialog.js +21 -20
  92. package/dist/components/nano-dialog.js.map +1 -1
  93. package/dist/components/nano-drawer.js +205 -122
  94. package/dist/components/nano-drawer.js.map +1 -1
  95. package/dist/components/nano-global-nav.js +4 -4
  96. package/dist/components/nano-global-nav.js.map +1 -1
  97. package/dist/components/nano-global-search-results.js +2 -1
  98. package/dist/components/nano-global-search-results.js.map +1 -1
  99. package/dist/components/nano-sortable.js +1 -13
  100. package/dist/components/nano-sortable.js.map +1 -1
  101. package/dist/components/slot.js +19 -14
  102. package/dist/components/slot.js.map +1 -1
  103. package/dist/components/sticker.js +16 -9
  104. package/dist/components/sticker.js.map +1 -1
  105. package/dist/components/table.js +4 -4
  106. package/dist/components/table.js.map +1 -1
  107. package/dist/esm/{_commonjsHelpers-e401b2a2.js → _commonjsHelpers-04a0e019.js} +2 -17
  108. package/dist/esm/_commonjsHelpers-04a0e019.js.map +1 -0
  109. package/dist/esm/algoliasearch-lite.esm.browser-04891fdc.js +920 -0
  110. package/dist/esm/algoliasearch-lite.esm.browser-04891fdc.js.map +1 -0
  111. package/dist/esm/component-store-65d7e36a.js +326 -0
  112. package/dist/esm/component-store-65d7e36a.js.map +1 -0
  113. package/dist/esm/events-6a805b42.js +36 -0
  114. package/dist/esm/events-6a805b42.js.map +1 -0
  115. package/dist/esm/loader.js +1 -1
  116. package/dist/esm/nano-alert.entry.js +9 -2
  117. package/dist/esm/nano-alert.entry.js.map +1 -1
  118. package/dist/esm/nano-algolia-filter.entry.js +1 -2
  119. package/dist/esm/nano-algolia-filter.entry.js.map +1 -1
  120. package/dist/esm/nano-algolia-input.entry.js +7 -3
  121. package/dist/esm/nano-algolia-input.entry.js.map +1 -1
  122. package/dist/esm/nano-algolia.entry.js +4 -4
  123. package/dist/esm/nano-algolia.entry.js.map +1 -1
  124. package/dist/esm/nano-components.js +1 -1
  125. package/dist/esm/nano-datalist_3.entry.js +1 -1
  126. package/dist/esm/nano-dialog.entry.js +23 -22
  127. package/dist/esm/nano-dialog.entry.js.map +1 -1
  128. package/dist/esm/nano-drawer.entry.js +171 -113
  129. package/dist/esm/nano-drawer.entry.js.map +1 -1
  130. package/dist/esm/nano-dropdown.entry.js +16 -2
  131. package/dist/esm/nano-dropdown.entry.js.map +1 -1
  132. package/dist/esm/nano-global-nav.entry.js +5 -6
  133. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  134. package/dist/esm/nano-global-search-results.entry.js +2 -1
  135. package/dist/esm/nano-global-search-results.entry.js.map +1 -1
  136. package/dist/esm/nano-slides.entry.js +1 -1
  137. package/dist/esm/nano-sortable.entry.js +1 -13
  138. package/dist/esm/nano-sortable.entry.js.map +1 -1
  139. package/dist/esm/nano-sticker.entry.js +16 -9
  140. package/dist/esm/nano-sticker.entry.js.map +1 -1
  141. package/dist/esm/nano-tab-group.entry.js +1 -2
  142. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  143. package/dist/esm/{nano-table-2bbcaa8d.js → nano-table-5c5bd3f2.js} +6 -6
  144. package/dist/esm/nano-table-5c5bd3f2.js.map +1 -0
  145. package/dist/esm/nano-table.entry.js +1 -1
  146. package/dist/esm/{slot-a4f6e2af.js → slot-8126e238.js} +20 -15
  147. package/dist/esm/slot-8126e238.js.map +1 -0
  148. package/dist/esm/{table.worker-7324ad73.js → table.worker-e7f4f50c.js} +2 -2
  149. package/dist/esm/table.worker-e7f4f50c.js.map +1 -0
  150. package/dist/nano-components/nano-components.css +1 -1
  151. package/dist/nano-components/nano-components.esm.js +1 -1
  152. package/dist/nano-components/nano-components.esm.js.map +1 -1
  153. package/dist/nano-components/p-0301e8f7.entry.js +5 -0
  154. package/dist/nano-components/p-0301e8f7.entry.js.map +1 -0
  155. package/dist/nano-components/p-27422aa9.entry.js +5 -0
  156. package/dist/nano-components/{p-6920ad69.entry.js.map → p-27422aa9.entry.js.map} +1 -1
  157. package/dist/nano-components/{p-52ae36ec.js → p-2d79f5b3.js} +2 -2
  158. package/dist/nano-components/{p-0697795a.entry.js → p-31c23d6e.entry.js} +2 -2
  159. package/dist/nano-components/p-31c23d6e.entry.js.map +1 -0
  160. package/dist/nano-components/p-487de04d.entry.js.map +1 -1
  161. package/dist/nano-components/p-570d2e50.entry.js +5 -0
  162. package/dist/nano-components/p-570d2e50.entry.js.map +1 -0
  163. package/dist/nano-components/{p-3eb6d833.entry.js → p-5a4b3fa9.entry.js} +2 -2
  164. package/dist/nano-components/p-653ae985.js +5 -0
  165. package/dist/nano-components/p-653ae985.js.map +1 -0
  166. package/dist/nano-components/p-676a4744.entry.js +5 -0
  167. package/dist/nano-components/{p-d0eefd52.entry.js.map → p-676a4744.entry.js.map} +1 -1
  168. package/dist/nano-components/p-8fe51abf.js +5 -0
  169. package/dist/nano-components/{p-4884b65a.entry.js → p-90cd4f56.entry.js} +2 -2
  170. package/dist/nano-components/p-90cd4f56.entry.js.map +1 -0
  171. package/dist/nano-components/p-9ba81ed2.js +5 -0
  172. package/dist/nano-components/p-9ba81ed2.js.map +1 -0
  173. package/dist/nano-components/p-9bfdee71.js +5 -0
  174. package/dist/nano-components/p-9bfdee71.js.map +1 -0
  175. package/dist/nano-components/p-a8d6ca38.entry.js +5 -0
  176. package/dist/nano-components/p-a8d6ca38.entry.js.map +1 -0
  177. package/dist/nano-components/p-ace7743c.entry.js +5 -0
  178. package/dist/nano-components/p-ace7743c.entry.js.map +1 -0
  179. package/dist/nano-components/{p-39aec880.entry.js → p-bab2888b.entry.js} +2 -2
  180. package/dist/nano-components/p-bdb5b6fc.entry.js +5 -0
  181. package/dist/nano-components/p-bdb5b6fc.entry.js.map +1 -0
  182. package/dist/nano-components/p-cad86fb8.js +5 -0
  183. package/dist/nano-components/p-cad86fb8.js.map +1 -0
  184. package/dist/nano-components/p-dc565459.js +5 -0
  185. package/dist/nano-components/p-dc565459.js.map +1 -0
  186. package/dist/nano-components/p-ede12d35.entry.js +5 -0
  187. package/dist/nano-components/p-ede12d35.entry.js.map +1 -0
  188. package/dist/nano-components/p-f504b1df.entry.js +7 -0
  189. package/dist/nano-components/p-f504b1df.entry.js.map +1 -0
  190. package/dist/nano-components/{p-db370094.entry.js → p-f7a4c62b.entry.js} +2 -2
  191. package/dist/themes/london-calling.css.map +1 -1
  192. package/dist/themes/nanopore.cn.css.map +1 -1
  193. package/dist/themes/nanopore.css.map +1 -1
  194. package/dist/types/components/alert/alert.d.ts +1 -0
  195. package/dist/types/components/algolia/algolia-interface.d.ts +1 -1
  196. package/dist/types/components/algolia/algolia.d.ts +1 -1
  197. package/dist/types/components/dialog/dialog.d.ts +15 -4
  198. package/dist/types/components/drawer/drawer.d.ts +69 -50
  199. package/dist/types/components/sticker/sticker.d.ts +4 -4
  200. package/dist/types/components.d.ts +50 -28
  201. package/dist/types/types/algolia.d.ts +4 -0
  202. package/dist/types/types/scss.vars.d.ts +4 -0
  203. package/dist/types/utils/events.d.ts +7 -0
  204. package/dist/types/utils/slot.d.ts +3 -3
  205. package/docs-json.json +268 -61
  206. package/docs-vscode.json +28 -11
  207. package/hydrate/index.js +1335 -2236
  208. package/package.json +4 -4
  209. package/dist/cjs/_commonjsHelpers-9f2314fc.js.map +0 -1
  210. package/dist/cjs/algoliasearch.umd-689c1560.js +0 -15
  211. package/dist/cjs/algoliasearch.umd-689c1560.js.map +0 -1
  212. package/dist/cjs/component-store-f1dc1276.js +0 -2261
  213. package/dist/cjs/component-store-f1dc1276.js.map +0 -1
  214. package/dist/cjs/nano-table-10a40ab3.js.map +0 -1
  215. package/dist/cjs/slot-a448c1a7.js.map +0 -1
  216. package/dist/cjs/table.worker-f04588c1.js.map +0 -1
  217. package/dist/components/algoliasearch.umd.js +0 -13
  218. package/dist/components/algoliasearch.umd.js.map +0 -1
  219. package/dist/esm/_commonjsHelpers-e401b2a2.js.map +0 -1
  220. package/dist/esm/algoliasearch.umd-4f7efa84.js +0 -13
  221. package/dist/esm/algoliasearch.umd-4f7efa84.js.map +0 -1
  222. package/dist/esm/component-store-c23ebc9c.js +0 -2259
  223. package/dist/esm/component-store-c23ebc9c.js.map +0 -1
  224. package/dist/esm/nano-table-2bbcaa8d.js.map +0 -1
  225. package/dist/esm/slot-a4f6e2af.js.map +0 -1
  226. package/dist/esm/table.worker-7324ad73.js.map +0 -1
  227. package/dist/nano-components/p-0697795a.entry.js.map +0 -1
  228. package/dist/nano-components/p-17b099cc.entry.js +0 -5
  229. package/dist/nano-components/p-17b099cc.entry.js.map +0 -1
  230. package/dist/nano-components/p-1a0b5bc3.js +0 -5
  231. package/dist/nano-components/p-1a0b5bc3.js.map +0 -1
  232. package/dist/nano-components/p-4884b65a.entry.js.map +0 -1
  233. package/dist/nano-components/p-58cf5446.js +0 -5
  234. package/dist/nano-components/p-58cf5446.js.map +0 -1
  235. package/dist/nano-components/p-6920ad69.entry.js +0 -5
  236. package/dist/nano-components/p-69a3e911.js +0 -5
  237. package/dist/nano-components/p-7baa9e14.entry.js +0 -5
  238. package/dist/nano-components/p-7baa9e14.entry.js.map +0 -1
  239. package/dist/nano-components/p-9b533dc3.js +0 -5
  240. package/dist/nano-components/p-9b533dc3.js.map +0 -1
  241. package/dist/nano-components/p-a362bd23.entry.js +0 -5
  242. package/dist/nano-components/p-a362bd23.entry.js.map +0 -1
  243. package/dist/nano-components/p-b04fd7ca.entry.js +0 -5
  244. package/dist/nano-components/p-b04fd7ca.entry.js.map +0 -1
  245. package/dist/nano-components/p-b72df1aa.entry.js +0 -5
  246. package/dist/nano-components/p-b72df1aa.entry.js.map +0 -1
  247. package/dist/nano-components/p-ce5efc3f.entry.js +0 -5
  248. package/dist/nano-components/p-ce5efc3f.entry.js.map +0 -1
  249. package/dist/nano-components/p-d0eefd52.entry.js +0 -5
  250. package/dist/nano-components/p-e2b2b015.entry.js +0 -5
  251. package/dist/nano-components/p-e2b2b015.entry.js.map +0 -1
  252. package/dist/nano-components/p-ed6adde2.js +0 -7
  253. package/dist/nano-components/p-ed6adde2.js.map +0 -1
  254. package/dist/types/dom.ie.d.ts +0 -3
  255. /package/dist/nano-components/{p-39aec880.entry.js.map → p-2d79f5b3.js.map} +0 -0
  256. /package/dist/nano-components/{p-3eb6d833.entry.js.map → p-5a4b3fa9.entry.js.map} +0 -0
  257. /package/dist/nano-components/{p-52ae36ec.js.map → p-8fe51abf.js.map} +0 -0
  258. /package/dist/nano-components/{p-69a3e911.js.map → p-bab2888b.entry.js.map} +0 -0
  259. /package/dist/nano-components/{p-db370094.entry.js.map → p-f7a4c62b.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/components/dialog/dialog.tsx"],"names":[],"mappings":"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","sourcesContent":["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 * @slot - The dialog's content.\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 */\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 panel: HTMLElement;\n private willShow = false;\n private willHide = false;\n private originalTrigger: HTMLElement | null;\n private overlay: HTMLElement;\n private addedTransEnd = false;\n\n @Element() host: HTMLNanoDialogElement;\n @State() isVisible = false;\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 || document.body.children[0] === this.host) 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 this.originalTrigger = document.activeElement as HTMLElement;\n this.willShow = true;\n this.isVisible = 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.isVisible = this.open;\n this.willShow = false;\n this.willHide = false;\n this.open ? this.nanoAfterShow.emit() : this.nanoAfterHide.emit();\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 if (this.panel) {\n this.addedTransEnd = true;\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\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 if (!this.addedTransEnd) {\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\n }\n\n disconnectedCallback() {\n if (!this.panel) return;\n unlockBodyScrolling(this.host);\n this.addedTransEnd = false;\n this.panel.removeEventListener('transitionend', this.handleTransitionEnd);\n }\n\n render() {\n return (\n <Host showing={this.isVisible ? true : undefined}>\n <div\n part=\"base\"\n class={{\n dialog: true,\n 'dialog--open': this.open,\n 'dialog--visible': this.isVisible,\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 >\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 <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 exportparts=\"base:close-button\"\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\n part=\"body\"\n class=\"dialog__body\"\n style={{ display: !this.isVisible ? 'none' : '' }}\n >\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"]}
1
+ {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/components/dialog/dialog.tsx"],"names":[],"mappings":"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","sourcesContent":["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 <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 <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"]}
@@ -13,16 +13,34 @@
13
13
  :host {
14
14
  /**
15
15
  * @prop --size: The preferred size of the drawer; width or height depending on placement. Note that the drawer will shrink to accommodate smaller screens. Defaults to 25rem
16
- * @prop --panel-background-color: background color of panel. Default to 'white'
17
- * @prop --panel-shadow: Defaults to '0 4px 16px rgb(0 0 0 / 10%)';
18
- * @prop --overlay-color: Defaults to 'hsla(203, 10%, 20%, 0.5)';
16
+ * @prop --panel-background: background color of panel. Default to 'white'
17
+ * @prop --panel-shadow: Defaults to var(--nano-layer-shadow-xlarge, 0 4px 16px rgba(0, 0, 0, 0.4));
18
+ * @prop --scrim-color: overlay colour of alert display. Defaults to var(--nano-layer-overlay-dark, rgb(74 74 74 / 50%));
19
+ * @prop --footer-background: Defaults to #e4e6e8;
20
+ * @prop --header-spacing: The amount of padding to use for the header.
21
+ * @prop --body-spacing: The amount of padding to use for the body.
22
+ * @prop --footer-spacing: The amount of padding to use for the footer. Defaults to var(--nano-spacing-medium, 16px) var(--nano-spacing-large, 20px)
23
+ * @prop --header-button-color: defaults to #b5aea7;
19
24
  */
20
- position: relative;
21
- display: block;
22
25
  --size: 25rem;
23
- --panel-background-color: white;
24
- --panel-shadow: 0 4px 16px rgb(0 0 0 / 10%);
25
- --overlay-color: hsl(203deg 10% 20% / 50%);
26
+ --panel-background: white;
27
+ --panel-shadow: var(--nano-layer-shadow-xlarge, 0 4px 16px rgba(0, 0, 0, 0.4));
28
+ --scrim-color: var(--nano-layer-overlay-dark, rgb(74 74 74 / 50%));
29
+ --header-button-color: #b5aea7;
30
+ --footer-background: #e4e6e8;
31
+ --header-background: var(--panel-background);
32
+ --header-spacing: var(--nano-spacing-large, 20px);
33
+ --body-spacing: var(--nano-spacing-large, 20px);
34
+ --footer-spacing: var(--nano-spacing-medium, 16px) var(--nano-spacing-large, 20px);
35
+ --dir: 1;
36
+ }
37
+
38
+ :host(:dir(rtl)) {
39
+ --dir: -1;
40
+ }
41
+
42
+ :host-context([dir=rtl]) {
43
+ --dir: -1;
26
44
  }
27
45
 
28
46
  .drawer {
@@ -33,110 +51,161 @@
33
51
  pointer-events: none;
34
52
  overflow: hidden;
35
53
  }
36
- .drawer:not(.drawer--visible) {
37
- position: absolute;
38
- inline-size: 1px;
39
- block-size: 1px;
40
- clip: rect(0 0 0 0);
41
- -webkit-clip-path: inset(50%);
42
- clip-path: inset(50%);
43
- overflow: hidden;
44
- pointer-events: none;
45
- visibility: hidden;
46
- }
47
-
48
54
  .drawer--contained {
49
55
  position: absolute;
50
56
  z-index: initial;
51
57
  }
52
-
53
58
  .drawer--fixed {
54
59
  position: fixed;
55
- z-index: 2000;
60
+ z-index: var(--nano-layer-index-modal, 700);
56
61
  }
57
62
 
58
63
  .drawer__panel {
59
64
  position: absolute;
60
- display: flex;
61
- flex-direction: column;
62
65
  z-index: 2;
63
66
  max-width: 100%;
64
67
  max-height: 100%;
65
- background-color: var(--panel-background-color);
68
+ background-color: var(--panel-background);
66
69
  box-shadow: var(--panel-shadow);
67
- transition: 250ms transform;
68
- overflow: auto;
69
70
  pointer-events: all;
71
+ transition: var(--nano-transition-fast, 0.3s) opacity, var(--nano-transition-fast, 0.3s) transform;
72
+ display: flex;
73
+ flex-direction: column;
74
+ }
75
+ @media (forced-colors: active) {
76
+ .drawer__panel {
77
+ border: solid 1px #4a4a4a;
78
+ }
70
79
  }
71
80
  .drawer__panel:focus {
72
81
  outline: none;
73
82
  }
74
-
75
- .drawer--start .drawer__panel {
76
- transform: translate3d(-100%, 0, 0);
77
- inset-block: 0 auto;
78
- width: var(--size);
79
- height: 100%;
80
- }
81
- .drawer--start .drawer__panel[dir=rtl] {
82
- transform: translate3d(calc(-1 * -100%), 0, 0);
83
- }
84
-
85
- .drawer--end .drawer__panel {
86
- transform: translate3d(100%, 0, 0);
87
- inset-block: 0 auto;
88
- width: var(--size);
89
- height: 100%;
83
+ .drawer--nodismiss .drawer__panel {
84
+ animation: cannotClose 0.25s ease-in-out 1;
90
85
  }
91
- .drawer--end .drawer__panel[dir=rtl] {
92
- transform: translate3d(calc(-1 * 100%), 0, 0);
86
+ @keyframes cannotClose {
87
+ 0% {
88
+ transform: scale(1);
89
+ }
90
+ 50% {
91
+ transform: scale(1.08);
92
+ }
93
+ 100% {
94
+ transform: scale(1);
95
+ }
93
96
  }
94
-
95
97
  .drawer--top .drawer__panel {
96
- inset-inline: auto 0;
97
98
  inset-block: 0 auto;
99
+ inset-inline-end: auto;
100
+ inset-inline-start: 0;
98
101
  width: 100%;
99
102
  height: var(--size);
100
- transform: translate(0, -100%);
103
+ opacity: 0;
104
+ transform: translateY(-100%);
101
105
  }
102
-
103
106
  .drawer--bottom .drawer__panel {
104
- inset-inline: auto 0;
105
107
  inset-block: auto 0;
108
+ inset-inline-end: auto;
109
+ inset-inline-start: 0;
106
110
  width: 100%;
107
111
  height: var(--size);
108
- transform: translate(0, 100%);
112
+ opacity: 0;
113
+ transform: translateY(100%);
109
114
  }
110
-
111
- .drawer--open .drawer__panel {
112
- transform: translate(0, 0);
115
+ .drawer--top.drawer--open .drawer__panel, .drawer--bottom.drawer--open .drawer__panel {
116
+ opacity: 1;
117
+ transform: translateY(0);
118
+ }
119
+ .drawer--start .drawer__panel {
120
+ inset-block: 0 auto;
121
+ inset-inline-end: auto;
122
+ inset-inline-start: 0;
123
+ width: var(--size);
124
+ height: 100%;
125
+ opacity: 0;
126
+ transform: translateX(calc(var(--dir) * -100%));
127
+ }
128
+ .drawer--end .drawer__panel {
129
+ inset-block: 0 auto;
130
+ inset-inline-end: 0;
131
+ inset-inline-start: auto;
132
+ width: var(--size);
133
+ height: 100%;
134
+ opacity: 0;
135
+ transform: translateX(calc(var(--dir) * 100%));
136
+ }
137
+ .drawer--start.drawer--open .drawer__panel, .drawer--end.drawer--open .drawer__panel {
138
+ opacity: 1;
139
+ transform: translateX(0);
113
140
  }
114
141
 
115
142
  .drawer__header {
143
+ inline-size: 100%;
116
144
  display: flex;
145
+ background-color: var(--header-background);
146
+ }
147
+ [stuck] .drawer__header {
148
+ box-shadow: var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2));
117
149
  }
118
150
 
119
151
  .drawer__title {
120
152
  flex: 1 1 auto;
121
- padding: 20px;
153
+ font: inherit;
154
+ font-size: var(--nano-fontsize-large, 1.25rem);
155
+ line-height: 1.2;
156
+ padding: var(--header-spacing);
157
+ margin: 0;
122
158
  }
123
159
 
124
- .drawer__close {
160
+ .drawer__header-actions {
161
+ flex-shrink: 0;
162
+ display: flex;
163
+ flex-wrap: wrap;
164
+ justify-content: flex-end;
165
+ gap: var(--nano-spacing-xsmall, 4px);
166
+ padding: 0 var(--header-spacing);
167
+ }
168
+ .drawer__header-actions .drawer__close,
169
+ .drawer__header-actions ::slotted(nano-icon-button) {
125
170
  flex: 0 0 auto;
126
171
  display: flex;
127
172
  align-items: center;
173
+ font-size: var(--nano-fontsize-xlarge, 1.5rem);
174
+ --color: var(--header-button-color);
128
175
  }
129
176
 
130
- .drawer__body {
131
- flex: 1 1 auto;
177
+ .drawer__main {
178
+ display: flex;
179
+ flex-direction: column;
132
180
  overflow: auto;
133
181
  -webkit-overflow-scrolling: touch;
182
+ flex: 1 1 auto;
183
+ }
184
+
185
+ .drawer__body {
186
+ display: block;
187
+ flex: 1 1 auto;
188
+ padding: var(--body-spacing);
189
+ padding-block: 0 var(--body-spacing);
190
+ padding-inline: var(--body-spacing);
191
+ }
192
+ .drawer:not(.drawer--has-header) .drawer__body {
193
+ -webkit-padding-before: var(--body-spacing);
194
+ padding-block-start: var(--body-spacing);
134
195
  }
135
196
 
136
197
  .drawer__footer {
198
+ inline-size: 100%;
137
199
  text-align: end;
200
+ padding: var(--footer-spacing);
201
+ background: var(--footer-background);
202
+ inset-block-start: 1px;
203
+ position: relative;
204
+ }
205
+ .drawer__footer ::slotted(button:not(:last-of-type)) {
206
+ -webkit-margin-end: var(--nano-spacing-xsmall, 4px);
207
+ margin-inline-end: var(--nano-spacing-xsmall, 4px);
138
208
  }
139
-
140
209
  .drawer:not(.drawer--has-footer) .drawer__footer {
141
210
  display: none;
142
211
  }
@@ -145,16 +214,16 @@
145
214
  display: block;
146
215
  position: fixed;
147
216
  inset: 0;
148
- background-color: var(--overlay-color);
149
- opacity: 0;
150
- transition: 250ms opacity;
217
+ background-color: var(--scrim-color);
151
218
  pointer-events: all;
219
+ -webkit-backdrop-filter: blur(var(--nano-layer-overlay-blur, 3px));
220
+ backdrop-filter: blur(var(--nano-layer-overlay-blur, 3px));
221
+ opacity: 0;
222
+ transition: var(--nano-transition-fast, 0.3s) opacity;
152
223
  }
153
-
154
- .drawer--contained .drawer__overlay {
155
- position: absolute;
156
- }
157
-
158
224
  .drawer--open .drawer__overlay {
159
225
  opacity: 1;
226
+ }
227
+ .drawer--contained .drawer__overlay {
228
+ display: none;
160
229
  }