@nanoporetech-digital/components 1.13.20 → 1.13.21

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 (44) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/cjs/nano-alert.cjs.entry.js +1 -1
  3. package/dist/cjs/nano-alert.cjs.entry.js.map +1 -1
  4. package/dist/collection/components/accordion/accordion.js +1 -1
  5. package/dist/collection/components/alert/alert.css +4 -0
  6. package/dist/collection/components/alert/alert.js +1 -1
  7. package/dist/collection/components/algolia/algolia-filter.js +2 -2
  8. package/dist/collection/components/algolia/algolia-input.js +5 -5
  9. package/dist/collection/components/algolia/algolia-results.js +1 -1
  10. package/dist/collection/components/algolia/algolia.js +5 -5
  11. package/dist/collection/components/checkbox/checkbox-group.js +2 -2
  12. package/dist/collection/components/checkbox/checkbox.js +2 -2
  13. package/dist/collection/components/date-input/date-input.js +7 -7
  14. package/dist/collection/components/date-picker/date-picker.js +5 -5
  15. package/dist/collection/components/details/details.js +1 -1
  16. package/dist/collection/components/dialog/dialog.js +1 -1
  17. package/dist/collection/components/file-upload/file-upload.js +3 -3
  18. package/dist/collection/components/global-nav/global-nav.js +4 -4
  19. package/dist/collection/components/grid/grid-item.js +1 -1
  20. package/dist/collection/components/icon/icon.js +1 -1
  21. package/dist/collection/components/input/input.js +5 -5
  22. package/dist/collection/components/nav-item/nav-item.js +4 -4
  23. package/dist/collection/components/range/range.js +4 -4
  24. package/dist/collection/components/resize-observe/resize-observe.js +1 -1
  25. package/dist/collection/components/select/select.js +5 -5
  26. package/dist/collection/components/slides/slides.js +7 -7
  27. package/dist/collection/components/tabs/tab-group.js +2 -2
  28. package/dist/custom-elements/index.js +1 -1
  29. package/dist/custom-elements/index.js.map +1 -1
  30. package/dist/esm/nano-alert.entry.js +1 -1
  31. package/dist/esm/nano-alert.entry.js.map +1 -1
  32. package/dist/esm-es5/nano-alert.entry.js +1 -1
  33. package/dist/esm-es5/nano-alert.entry.js.map +1 -1
  34. package/dist/nano-components/nano-components.esm.js +1 -1
  35. package/dist/nano-components/p-1fd60eec.system.js +1 -1
  36. package/dist/nano-components/p-5918ac51.entry.js +2 -0
  37. package/dist/nano-components/p-5918ac51.entry.js.map +1 -0
  38. package/dist/nano-components/{p-6f8baf7c.system.entry.js → p-a897cfae.system.entry.js} +2 -2
  39. package/dist/nano-components/p-a897cfae.system.entry.js.map +1 -0
  40. package/docs-json.json +1 -1
  41. package/package.json +2 -2
  42. package/dist/nano-components/p-0e1d7b66.entry.js +0 -2
  43. package/dist/nano-components/p-0e1d7b66.entry.js.map +0 -1
  44. package/dist/nano-components/p-6f8baf7c.system.entry.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/components/alert/alert.scss?tag=nano-alert&encapsulation=shadow","src/components/alert/alert.tsx"],"names":["toastStackTr","Object","assign","document","createElement","className","toastStackTl","toastStackBl","toastStackBr","Alert","[object Object]","hostRef","this","addedTransEnd","goingToHide","goingToShow","isModal","isToast","isShowing","open","closable","duration","Infinity","handleMouseMove","restartAutoHide","handleCloseClick","hide","handleTransitionEnd","event","propertyName","target","panel","overlay","host","hidden","nanoAfterShow","emit","nanoAfterHide","handleButtonClick","defaultPrevented","tagName","toLowerCase","clearTimeout","autoHideTimeout","setTimeout","Panel","h","ref","el","part","class","alert","alert--open","alert--toasty","alert--modal","alert--showing","role","aria-live","aria-atomic","aria-hidden","aria-modal","undefined","aria-label","label","onMouseMove","tabIndex","name","iconName","onClick","show","nanoShow","raf","nanoHide","position","Promise","resolve","toastStack","parentElement","body","appendChild","connectedCallback","addEventListener","remove","querySelector","once","contains","modal","activate","lockBodyScrolling","originalTrigger","activeElement","focus","preventScroll","deactivate","Modal","unlockBodyScrolling","removeEventListener","Host","createColorClasses","color","showing","alert__overlay","alert__overlay--open","div"],"mappings":"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","sourcesContent":["@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/layers';\n\n:host {\n /**\n * @prop --border-radius: defaults to #{$layer-border-radius};\n * @prop --border-color: defaults to #{$layer-border-color};\n * @prop --border-width: defaults to #{$layer-border-width};\n * @prop --background: defaults to #{$layer-bg-color};\n * @prop --tint-color: defaults to var(--nano-color-base, #{nano-color(primary, base)});\n * @prop --icon-size: defaults to 1.5rem;\n * @prop --scrim-color: overlay colour of alert display. Defaults to #{$layer-overlay-dark};\n * @prop --close-button-color: defaults to #{$color-mediumgrey} ;\n */\n\n --border-radius: #{$layer-border-radius};\n --border-color: #{$layer-border-color};\n --border-width: #{$layer-border-width};\n --background: #{$layer-bg-color};\n --tint-color: var(--nano-color-base, #{nano-color(primary, base)});\n --icon-size: 2rem;\n --scrim-color: #{$layer-overlay-dark};\n --close-button-color: #{$color-palegrey};\n\n display: block;\n}\n\n:host(.nano-color) {\n --tint-color: var(--nano-color-base, #{nano-color(primary, base)});\n}\n\n.alert {\n position: relative;\n background-color: var(--background);\n border: solid var(--border-width) var(--border-color);\n border-top-width: 4px;\n border-top-color: var(--tint-color);\n border-radius: var(--border-radius);\n opacity: 0;\n transform: scale(0.9);\n transition:\n #{$transition-medium} opacity ease,\n #{$transition-fast} transform ease;\n\n &:focus {\n outline: none;\n }\n\n &:not(.alert--showing) {\n @include hidden;\n }\n\n &--open {\n opacity: 1;\n transform: none;\n }\n\n &--toasty,\n &--modal {\n box-shadow: #{$layer-shadow-large};\n margin: #{$spacing-medium};\n }\n}\n\n.alert__content {\n display: flex;\n align-items: stretch;\n}\n\n.alert__modal-wrap {\n position: fixed;\n display: flex;\n align-items: center;\n justify-content: center;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: #{$layer-index-alert};\n}\n\n.alert__message {\n flex: 1 1 auto;\n padding: #{$spacing-medium};\n overflow: hidden;\n line-height: 1.6;\n}\n\n.alert__close {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n font-size: 1.1em;\n\n @include padding(0, #{$spacing-medium}, 0, 0);\n\n --color: var(--close-button-color);\n}\n\n.alert__footer {\n padding: 0 #{$spacing-small} 0;\n display: flex;\n flex-direction: row;\n justify-content: space-around;\n align-items: center;\n\n ::slotted(*),\n &::slotted(*) {\n flex: 1;\n margin: 0 #{$spacing-small} #{$spacing-medium} !important;\n }\n}\n\n.alert__overlay {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: var(--scrim-color);\n opacity: 0;\n transition: #{$transition-fast} opacity;\n z-index: #{$layer-index-alert};\n backdrop-filter: blur(#{$layer-overlay-blur});\n\n &--open {\n opacity: 1;\n }\n}\n\n.alert__icon {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n font-size: var(--icon-size);\n\n &::slotted(*) {\n color: var(--tint-color);\n margin-left: #{$spacing-medium};\n }\n}\n\n.alert__icon ::slotted(*) {\n color: var(--tint-color);\n\n @include margin(0, 0, 0, #{$spacing-medium});\n}\n// just testing - rm later\n.something {\n color: black;\n}\n","import {\n Component,\n ComponentInterface,\n Element,\n Event,\n EventEmitter,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n VNode,\n} from '@stencil/core';\nimport { Color } from '../../interface';\nimport Modal from '../../utils/modal';\nimport {\n createColorClasses,\n lockBodyScrolling,\n raf,\n unlockBodyScrolling,\n} from '../../utils/utils';\n\nconst toastStackTr = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--tr',\n});\nconst toastStackTl = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--tl',\n});\nconst toastStackBl = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--bl',\n});\nconst toastStackBr = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--br',\n});\n\n/**\n * Alerts are used to display important messages either inline, as toast notifications or as modals requiring action.\n * @slot - The alert's content.\n * @slot icon - An icon to show in the alert.\n * @slot footer - Place items at the bottom of the alert. Best used with `button` elements - esp when used as with the `alert()` method.\n */\n@Component({\n tag: 'nano-alert',\n styleUrl: 'alert.scss',\n shadow: true,\n})\nexport class Alert implements ComponentInterface {\n private autoHideTimeout: ReturnType<typeof setTimeout>;\n private panel: HTMLElement;\n private overlay: HTMLElement;\n private modal: Modal;\n private originalTrigger: HTMLElement | null;\n private addedTransEnd = false;\n private goingToHide = false;\n private goingToShow = false;\n\n @State() isModal = false;\n @State() isToast = false;\n @State() isShowing = false;\n @State() label: string;\n\n @Element() host: HTMLNanoAlertElement;\n\n /** Indicates whether or not the alert 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 /** Set to true to make the alert closable. */\n @Prop({ reflect: true }) closable = false;\n\n /** The color to use from the application's color palette. */\n @Prop({ reflect: true }) color?: Color;\n\n /**\n * The length of time, in milliseconds, the alert will show before closing itself. If the user interacts with the\n * alert before it closes (e.g. moves the mouse over it), the timer will restart.\n */\n @Prop() duration = Infinity;\n\n @Watch('duration')\n handleDurationChange() {\n this.restartAutoHide();\n }\n\n /** Emitted when the alert opens. Calling `event.preventDefault()` will prevent it from being opened. */\n @Event() nanoShow: EventEmitter;\n\n /** Emitted after the alert opens and all transitions are complete. */\n @Event() nanoAfterShow: EventEmitter;\n\n /** Emitted when the alert closes. Calling `event.preventDefault()` will prevent it from being closed. */\n @Event() nanoHide: EventEmitter;\n\n /** Emitted after the alert closes and all transitions are complete. */\n @Event() nanoAfterHide: EventEmitter;\n\n /** Shows the alert. */\n @Method()\n async show() {\n if (this.goingToShow) {\n return;\n }\n const nanoShow = this.nanoShow.emit();\n if (nanoShow.defaultPrevented) {\n this.open = false;\n return false;\n }\n\n this.host.hidden = false;\n this.goingToShow = true;\n this.open = true;\n raf(() => {\n this.isShowing = true;\n this.goingToShow = false;\n });\n\n if (this.duration < Infinity) {\n clearTimeout(this.autoHideTimeout);\n this.autoHideTimeout = setTimeout(() => this.hide(), this.duration);\n }\n }\n\n /** Hides the alert */\n @Method()\n async hide() {\n if (this.goingToHide) {\n return;\n }\n const nanoHide = this.nanoHide.emit();\n\n if (nanoHide.defaultPrevented) {\n this.open = true;\n return false;\n }\n this.goingToHide = true;\n this.open = false;\n\n raf(() => (this.goingToHide = false));\n clearTimeout(this.autoHideTimeout);\n }\n\n /**\n * Displays the alert as a toast notification. This will move the alert out of its position in the DOM and, when\n * dismissed, it will be removed from the DOM completely. By storing a reference to the alert, you can reuse it by\n * calling this method again. The returned promise will resolve after the alert is hidden.\n *\n * @param position options are tr (top-right - default), tl (top-left), br (bottom-right), bl (bottom-left)\n * @returns a promise which will resolve after the alert has hidden\n */\n @Method()\n async toast(position: 'tr' | 'tl' | 'bl' | 'br' = 'tr') {\n this.isToast = true;\n return new Promise<void>((resolve) => {\n let toastStack: HTMLElement;\n switch (position) {\n case 'tl':\n toastStack = toastStackTl;\n break;\n case 'bl':\n toastStack = toastStackBl;\n break;\n case 'br':\n toastStack = toastStackBr;\n break;\n default:\n toastStack = toastStackTr;\n break;\n }\n\n if (!toastStack.parentElement) {\n document.body.appendChild(toastStack);\n }\n\n toastStack.appendChild(this.host);\n this.connectedCallback();\n this.show();\n\n this.host.addEventListener(\n 'nanoAfterHide',\n () => {\n this.host.remove();\n this.isToast = false;\n resolve();\n\n // Remove the toast stack from the DOM when there are no more alerts\n if (!toastStack.querySelector('nano-alert')) {\n toastStack.remove();\n }\n },\n { once: true }\n );\n });\n }\n\n /**\n * Displays the alert as a dialog / modal - more akin to a traditional js alert().\n * @param label a label for assistive technology\n */\n @Method()\n async alert(label: string) {\n this.isModal = true;\n this.label = label;\n\n return new Promise<void>((resolve) => {\n if (!document.body.contains(this.host)) {\n document.body.appendChild(this.host);\n }\n\n this.modal.activate();\n lockBodyScrolling(this.host);\n this.originalTrigger = document.activeElement as HTMLElement;\n\n raf(() => {\n this.show();\n });\n\n this.host.addEventListener(\n 'nanoAfterShow',\n () => {\n raf(() => this.panel.focus({ preventScroll: true }));\n },\n { once: true }\n );\n\n this.host.addEventListener(\n 'nanoAfterHide',\n () => {\n this.modal.deactivate();\n this.host.remove();\n this.label = undefined;\n this.isModal = false;\n resolve();\n\n // Restore focus to the original trigger\n if (\n this.originalTrigger &&\n typeof this.originalTrigger.focus === 'function'\n ) {\n setTimeout(() => this.originalTrigger.focus());\n }\n },\n { once: true }\n );\n });\n }\n\n private handleMouseMove = () => {\n this.restartAutoHide();\n };\n\n private handleCloseClick = () => {\n this.hide();\n };\n\n private handleTransitionEnd = (event: TransitionEvent) => {\n if (\n event.propertyName === 'opacity' &&\n (event.target === this.panel || event.target === this.overlay)\n ) {\n this.host.hidden = !this.open;\n this.isShowing = this.open;\n this.open ? this.nanoAfterShow.emit() : this.nanoAfterHide.emit();\n }\n };\n\n private handleButtonClick = (event: Event) => {\n const target = event.target as HTMLElement;\n if (event.defaultPrevented) return;\n if (target.tagName && target.tagName.toLowerCase() === 'button')\n this.hide();\n };\n\n private restartAutoHide = () => {\n clearTimeout(this.autoHideTimeout);\n if (this.open && this.duration < Infinity) {\n this.autoHideTimeout = setTimeout(() => this.hide(), this.duration);\n }\n };\n\n connectedCallback() {\n this.modal = new Modal(this.host);\n this.host.addEventListener('click', this.handleButtonClick);\n\n if (this.panel) {\n this.addedTransEnd = true;\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\n }\n\n disconnectedCallback() {\n unlockBodyScrolling(this.host);\n this.host.removeEventListener('click', this.handleButtonClick);\n\n this.addedTransEnd = false;\n this.panel.removeEventListener('transitionend', this.handleTransitionEnd);\n }\n\n componentDidLoad() {\n // Show on init if open\n if (this.open) {\n this.show();\n }\n if (!this.addedTransEnd) {\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\n }\n\n private Panel = (): VNode => {\n return (\n <div\n ref={(el) => (this.panel = el)}\n part=\"panel\"\n class={{\n alert: true,\n 'alert--open': this.open,\n 'alert--toasty': this.isToast,\n 'alert--modal': !!this.isModal,\n 'alert--showing': this.isShowing,\n }}\n role={!!this.isModal ? 'alertdialog' : 'alert'}\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n aria-hidden={this.open ? 'false' : 'true'}\n aria-modal={!!this.isModal ? 'true' : undefined}\n aria-label={this.label ? this.label : undefined}\n onMouseMove={this.handleMouseMove}\n tabIndex={!!this.isModal ? 0 : undefined}\n >\n <div class=\"alert__content\">\n <div part=\"icon\" class=\"alert__icon\">\n <slot name=\"icon\" />\n </div>\n <div part=\"message\" class=\"alert__message\">\n <slot />\n </div>\n {this.closable && (\n <div class=\"alert__close\">\n <nano-icon-button\n class=\"alert__close\"\n iconName=\"light/times\"\n label=\"close menu\"\n onClick={this.handleCloseClick}\n ></nano-icon-button>\n </div>\n )}\n </div>\n <div class=\"alert__footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n );\n };\n\n render() {\n return (\n <Host\n class={{ ...createColorClasses(this.color) }}\n showing={this.isShowing}\n >\n {this.isModal && [\n <div\n part=\"overlay\"\n class={{\n alert__overlay: true,\n 'alert__overlay--open': this.open,\n }}\n ref={(div) => (this.overlay = div)}\n />,\n <div class=\"alert__modal-wrap\">\n <this.Panel />\n </div>,\n ]}\n {!this.isModal && <this.Panel />}\n </Host>\n );\n }\n}\n"]}
@@ -1,2 +1,2 @@
1
- var __awaiter=this&&this.__awaiter||function(t,e,n,i){function a(t){return t instanceof n?t:new n((function(e){e(t)}))}return new(n||(n=Promise))((function(n,o){function r(t){try{l(i.next(t))}catch(e){o(e)}}function s(t){try{l(i["throw"](t))}catch(e){o(e)}}function l(t){t.done?n(t.value):a(t.value).then(r,s)}l((i=i.apply(t,e||[])).next())}))};var __generator=this&&this.__generator||function(t,e){var n={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},i,a,o,r;return r={next:s(0),throw:s(1),return:s(2)},typeof Symbol==="function"&&(r[Symbol.iterator]=function(){return this}),r;function s(t){return function(e){return l([t,e])}}function l(r){if(i)throw new TypeError("Generator is already executing.");while(n)try{if(i=1,a&&(o=r[0]&2?a["return"]:r[0]?a["throw"]||((o=a["return"])&&o.call(a),0):a.next)&&!(o=o.call(a,r[1])).done)return o;if(a=0,o)r=[r[0]&2,o.value];switch(r[0]){case 0:case 1:o=r;break;case 4:n.label++;return{value:r[1],done:false};case 5:n.label++;a=r[1];r=[0];continue;case 7:r=n.ops.pop();n.trys.pop();continue;default:if(!(o=n.trys,o=o.length>0&&o[o.length-1])&&(r[0]===6||r[0]===2)){n=0;continue}if(r[0]===3&&(!o||r[1]>o[0]&&r[1]<o[3])){n.label=r[1];break}if(r[0]===6&&n.label<o[1]){n.label=o[1];o=r;break}if(o&&n.label<o[2]){n.label=o[2];n.ops.push(r);break}if(o[2])n.ops.pop();n.trys.pop();continue}r=e.call(t,n)}catch(s){r=[6,s];a=0}finally{i=o=0}if(r[0]&5)throw r[1];return{value:r[0]?r[1]:void 0,done:true}}};System.register(["./p-2d59dda3.system.js","./p-f60dde31.system.js","./p-89a5c54a.system.js","./p-f00d0c25.system.js","./p-a057ad2d.system.js","./p-0c67773b.system.js","./p-3d1c1c19.system.js"],(function(t){"use strict";var e,n,i,a,o,r,s,l,d,c;return{setters:[function(t){e=t.r;n=t.c;i=t.h;a=t.e;o=t.g},function(t){r=t.M},function(t){s=t.r},function(t){l=t.l;d=t.u},function(t){c=t.c},function(){},function(){}],execute:function(){var u=":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}:host{--border-radius:var(--nano-layer-border-radius, var(--nano-border-radius-medium, 4px));--border-color:var(--nano-layer-border-color, rgba(0, 0, 0, 0.1));--border-width:var(--nano-layer-border-width, 1px);--background:var(--nano-layer-bg, #fff);--tint-color:var(--nano-color-base, var(--nano-color-primary, #0084a9));--icon-size:2rem;--scrim-color:var(--nano-layer-overlay-dark, rgba(74, 74, 74, .5));--close-button-color:#b5aea7;display:block}:host(.nano-color){--tint-color:var(--nano-color-base, var(--nano-color-primary, #0084a9))}.alert{position:relative;background-color:var(--background);border:solid var(--border-width) var(--border-color);border-top-width:4px;border-top-color:var(--tint-color);border-radius:var(--border-radius);opacity:0;-webkit-transform:scale(0.9);transform:scale(0.9);-webkit-transition:var(--nano-transition-medium, 0.5s) opacity ease, var(--nano-transition-fast, 0.3s) transform ease;transition:var(--nano-transition-medium, 0.5s) opacity ease, var(--nano-transition-fast, 0.3s) transform ease}.alert:focus{outline:none}.alert:not(.alert--showing){position:absolute;width:1px;height:1px;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);overflow:hidden;pointer-events:none;visibility:hidden}.alert--open{opacity:1;-webkit-transform:none;transform:none}.alert--toasty,.alert--modal{-webkit-box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.3));box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.3));margin:var(--nano-spacing-medium, 16px)}.alert__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.alert__modal-wrap{position:fixed;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;top:0;right:0;bottom:0;left:0;z-index:var(--nano-layer-index-alert, 800)}.alert__message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:var(--nano-spacing-medium, 16px);overflow:hidden;line-height:1.6}.alert__close{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:1.1em;padding-left:0;padding-right:var(--nano-spacing-medium, 16px);padding-top:0;padding-bottom:0;--color:var(--close-button-color)}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.alert__close{padding-left:unset;padding-right:unset;-webkit-padding-start:0;padding-inline-start:0;-webkit-padding-end:var(--nano-spacing-medium, 16px);padding-inline-end:var(--nano-spacing-medium, 16px)}}.alert__footer{padding:0 var(--nano-spacing-small, 8px) 0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:distribute;justify-content:space-around;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.alert__footer ::slotted(*),.alert__footer::slotted(*){-webkit-box-flex:1;-ms-flex:1;flex:1;margin:0 var(--nano-spacing-small, 8px) var(--nano-spacing-medium, 16px) !important}.alert__overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:var(--scrim-color);opacity:0;-webkit-transition:var(--nano-transition-fast, 0.3s) opacity;transition:var(--nano-transition-fast, 0.3s) opacity;z-index:var(--nano-layer-index-alert, 800);-webkit-backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px));backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px))}.alert__overlay--open{opacity:1}.alert__icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:var(--icon-size)}.alert__icon::slotted(*){color:var(--tint-color);margin-left:var(--nano-spacing-medium, 16px)}.alert__icon ::slotted(*){color:var(--tint-color);margin-left:var(--nano-spacing-medium, 16px);margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.alert__icon ::slotted(*){margin-left:unset;margin-right:unset;-webkit-margin-start:var(--nano-spacing-medium, 16px);margin-inline-start:var(--nano-spacing-medium, 16px);-webkit-margin-end:0;margin-inline-end:0}}";var f=Object.assign(document.createElement("div"),{className:"nano-toast-stack nano-toast-stack--tr"});var h=Object.assign(document.createElement("div"),{className:"nano-toast-stack nano-toast-stack--tl"});var p=Object.assign(document.createElement("div"),{className:"nano-toast-stack nano-toast-stack--bl"});var b=Object.assign(document.createElement("div"),{className:"nano-toast-stack nano-toast-stack--br"});var m=t("nano_alert",function(){function t(t){var a=this;e(this,t);this.nanoShow=n(this,"nanoShow",7);this.nanoAfterShow=n(this,"nanoAfterShow",7);this.nanoHide=n(this,"nanoHide",7);this.nanoAfterHide=n(this,"nanoAfterHide",7);this.addedTransEnd=false;this.goingToHide=false;this.goingToShow=false;this.isModal=false;this.isToast=false;this.isShowing=false;this.open=false;this.closable=false;this.duration=Infinity;this.handleMouseMove=function(){a.restartAutoHide()};this.handleCloseClick=function(){a.hide()};this.handleTransitionEnd=function(t){if(t.propertyName==="opacity"&&(t.target===a.panel||t.target===a.overlay)){a.host.hidden=!a.open;a.isShowing=a.open;a.open?a.nanoAfterShow.emit():a.nanoAfterHide.emit()}};this.handleButtonClick=function(t){var e=t.target;if(t.defaultPrevented)return;if(e.tagName&&e.tagName.toLowerCase()==="button")a.hide()};this.restartAutoHide=function(){clearTimeout(a.autoHideTimeout);if(a.open&&a.duration<Infinity){a.autoHideTimeout=setTimeout((function(){return a.hide()}),a.duration)}};this.Panel=function(){return i("div",{ref:function(t){return a.panel=t},part:"panel",class:{alert:true,"alert--open":a.open,"alert--toasty":a.isToast,"alert--modal":!!a.isModal,"alert--showing":a.isShowing},role:!!a.isModal?"alertdialog":"alert","aria-live":"assertive","aria-atomic":"true","aria-hidden":a.open?"false":"true","aria-modal":!!a.isModal?"true":undefined,"aria-label":a.label?a.label:undefined,onMouseMove:a.handleMouseMove,tabIndex:!!a.isModal?0:undefined},i("div",{class:"alert__content"},i("div",{part:"icon",class:"alert__icon"},i("slot",{name:"icon"})),i("div",{part:"message",class:"alert__message"},i("slot",null)),a.closable&&i("div",{class:"alert__close"},i("nano-icon-button",{class:"alert__close",iconName:"light/times",label:"close menu",onClick:a.handleCloseClick}))),i("div",{class:"alert__footer"},i("slot",{name:"footer"})))}}t.prototype.handleOpenChange=function(){this.open?this.show():this.hide()};t.prototype.handleDurationChange=function(){this.restartAutoHide()};t.prototype.show=function(){return __awaiter(this,void 0,void 0,(function(){var t;var e=this;return __generator(this,(function(n){if(this.goingToShow){return[2]}t=this.nanoShow.emit();if(t.defaultPrevented){this.open=false;return[2,false]}this.host.hidden=false;this.goingToShow=true;this.open=true;s((function(){e.isShowing=true;e.goingToShow=false}));if(this.duration<Infinity){clearTimeout(this.autoHideTimeout);this.autoHideTimeout=setTimeout((function(){return e.hide()}),this.duration)}return[2]}))}))};t.prototype.hide=function(){return __awaiter(this,void 0,void 0,(function(){var t;var e=this;return __generator(this,(function(n){if(this.goingToHide){return[2]}t=this.nanoHide.emit();if(t.defaultPrevented){this.open=true;return[2,false]}this.goingToHide=true;this.open=false;s((function(){return e.goingToHide=false}));clearTimeout(this.autoHideTimeout);return[2]}))}))};t.prototype.toast=function(t){if(t===void 0){t="tr"}return __awaiter(this,void 0,void 0,(function(){var e=this;return __generator(this,(function(n){this.isToast=true;return[2,new Promise((function(n){var i;switch(t){case"tl":i=h;break;case"bl":i=p;break;case"br":i=b;break;default:i=f;break}if(!i.parentElement){document.body.appendChild(i)}i.appendChild(e.host);e.connectedCallback();e.show();e.host.addEventListener("nanoAfterHide",(function(){e.host.remove();e.isToast=false;n();if(!i.querySelector("nano-alert")){i.remove()}}),{once:true})}))]}))}))};t.prototype.alert=function(t){return __awaiter(this,void 0,void 0,(function(){var e=this;return __generator(this,(function(n){this.isModal=true;this.label=t;return[2,new Promise((function(t){if(!document.body.contains(e.host)){document.body.appendChild(e.host)}e.modal.activate();l(e.host);e.originalTrigger=document.activeElement;s((function(){e.show()}));e.host.addEventListener("nanoAfterShow",(function(){s((function(){return e.panel.focus({preventScroll:true})}))}),{once:true});e.host.addEventListener("nanoAfterHide",(function(){e.modal.deactivate();e.host.remove();e.label=undefined;e.isModal=false;t();if(e.originalTrigger&&typeof e.originalTrigger.focus==="function"){setTimeout((function(){return e.originalTrigger.focus()}))}}),{once:true})}))]}))}))};t.prototype.connectedCallback=function(){this.modal=new r(this.host);this.host.addEventListener("click",this.handleButtonClick);if(this.panel){this.addedTransEnd=true;this.panel.addEventListener("transitionend",this.handleTransitionEnd)}};t.prototype.disconnectedCallback=function(){d(this.host);this.host.removeEventListener("click",this.handleButtonClick);this.addedTransEnd=false;this.panel.removeEventListener("transitionend",this.handleTransitionEnd)};t.prototype.componentDidLoad=function(){if(this.open){this.show()}if(!this.addedTransEnd){this.panel.addEventListener("transitionend",this.handleTransitionEnd)}};t.prototype.render=function(){var t=this;return i(a,{class:Object.assign({},c(this.color)),showing:this.isShowing},this.isModal&&[i("div",{part:"overlay",class:{alert__overlay:true,"alert__overlay--open":this.open},ref:function(e){return t.overlay=e}}),i("div",{class:"alert__modal-wrap"},i(this.Panel,null))],!this.isModal&&i(this.Panel,null))};Object.defineProperty(t.prototype,"host",{get:function(){return o(this)},enumerable:false,configurable:true});Object.defineProperty(t,"watchers",{get:function(){return{open:["handleOpenChange"],duration:["handleDurationChange"]}},enumerable:false,configurable:true});return t}());m.style=u}}}));
2
- //# sourceMappingURL=p-6f8baf7c.system.entry.js.map
1
+ var __awaiter=this&&this.__awaiter||function(t,e,n,i){function a(t){return t instanceof n?t:new n((function(e){e(t)}))}return new(n||(n=Promise))((function(n,o){function r(t){try{l(i.next(t))}catch(e){o(e)}}function s(t){try{l(i["throw"](t))}catch(e){o(e)}}function l(t){t.done?n(t.value):a(t.value).then(r,s)}l((i=i.apply(t,e||[])).next())}))};var __generator=this&&this.__generator||function(t,e){var n={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},i,a,o,r;return r={next:s(0),throw:s(1),return:s(2)},typeof Symbol==="function"&&(r[Symbol.iterator]=function(){return this}),r;function s(t){return function(e){return l([t,e])}}function l(r){if(i)throw new TypeError("Generator is already executing.");while(n)try{if(i=1,a&&(o=r[0]&2?a["return"]:r[0]?a["throw"]||((o=a["return"])&&o.call(a),0):a.next)&&!(o=o.call(a,r[1])).done)return o;if(a=0,o)r=[r[0]&2,o.value];switch(r[0]){case 0:case 1:o=r;break;case 4:n.label++;return{value:r[1],done:false};case 5:n.label++;a=r[1];r=[0];continue;case 7:r=n.ops.pop();n.trys.pop();continue;default:if(!(o=n.trys,o=o.length>0&&o[o.length-1])&&(r[0]===6||r[0]===2)){n=0;continue}if(r[0]===3&&(!o||r[1]>o[0]&&r[1]<o[3])){n.label=r[1];break}if(r[0]===6&&n.label<o[1]){n.label=o[1];o=r;break}if(o&&n.label<o[2]){n.label=o[2];n.ops.push(r);break}if(o[2])n.ops.pop();n.trys.pop();continue}r=e.call(t,n)}catch(s){r=[6,s];a=0}finally{i=o=0}if(r[0]&5)throw r[1];return{value:r[0]?r[1]:void 0,done:true}}};System.register(["./p-2d59dda3.system.js","./p-f60dde31.system.js","./p-89a5c54a.system.js","./p-f00d0c25.system.js","./p-a057ad2d.system.js","./p-0c67773b.system.js","./p-3d1c1c19.system.js"],(function(t){"use strict";var e,n,i,a,o,r,s,l,d,c;return{setters:[function(t){e=t.r;n=t.c;i=t.h;a=t.e;o=t.g},function(t){r=t.M},function(t){s=t.r},function(t){l=t.l;d=t.u},function(t){c=t.c},function(){},function(){}],execute:function(){var u=":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}:host{--border-radius:var(--nano-layer-border-radius, var(--nano-border-radius-medium, 4px));--border-color:var(--nano-layer-border-color, rgba(0, 0, 0, 0.1));--border-width:var(--nano-layer-border-width, 1px);--background:var(--nano-layer-bg, #fff);--tint-color:var(--nano-color-base, var(--nano-color-primary, #0084a9));--icon-size:2rem;--scrim-color:var(--nano-layer-overlay-dark, rgba(74, 74, 74, .5));--close-button-color:#b5aea7;display:block}:host(.nano-color){--tint-color:var(--nano-color-base, var(--nano-color-primary, #0084a9))}.alert{position:relative;background-color:var(--background);border:solid var(--border-width) var(--border-color);border-top-width:4px;border-top-color:var(--tint-color);border-radius:var(--border-radius);opacity:0;-webkit-transform:scale(0.9);transform:scale(0.9);-webkit-transition:var(--nano-transition-medium, 0.5s) opacity ease, var(--nano-transition-fast, 0.3s) transform ease;transition:var(--nano-transition-medium, 0.5s) opacity ease, var(--nano-transition-fast, 0.3s) transform ease}.alert:focus{outline:none}.alert:not(.alert--showing){position:absolute;width:1px;height:1px;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);overflow:hidden;pointer-events:none;visibility:hidden}.alert--open{opacity:1;-webkit-transform:none;transform:none}.alert--toasty,.alert--modal{-webkit-box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.3));box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.3));margin:var(--nano-spacing-medium, 16px)}.alert__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.alert__modal-wrap{position:fixed;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;top:0;right:0;bottom:0;left:0;z-index:var(--nano-layer-index-alert, 800)}.alert__message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:var(--nano-spacing-medium, 16px);overflow:hidden;line-height:1.6}.alert__close{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:1.1em;padding-left:0;padding-right:var(--nano-spacing-medium, 16px);padding-top:0;padding-bottom:0;--color:var(--close-button-color)}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.alert__close{padding-left:unset;padding-right:unset;-webkit-padding-start:0;padding-inline-start:0;-webkit-padding-end:var(--nano-spacing-medium, 16px);padding-inline-end:var(--nano-spacing-medium, 16px)}}.alert__footer{padding:0 var(--nano-spacing-small, 8px) 0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:distribute;justify-content:space-around;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.alert__footer ::slotted(*),.alert__footer::slotted(*){-webkit-box-flex:1;-ms-flex:1;flex:1;margin:0 var(--nano-spacing-small, 8px) var(--nano-spacing-medium, 16px) !important}.alert__overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:var(--scrim-color);opacity:0;-webkit-transition:var(--nano-transition-fast, 0.3s) opacity;transition:var(--nano-transition-fast, 0.3s) opacity;z-index:var(--nano-layer-index-alert, 800);-webkit-backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px));backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px))}.alert__overlay--open{opacity:1}.alert__icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:var(--icon-size)}.alert__icon::slotted(*){color:var(--tint-color);margin-left:var(--nano-spacing-medium, 16px)}.alert__icon ::slotted(*){color:var(--tint-color);margin-left:var(--nano-spacing-medium, 16px);margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.alert__icon ::slotted(*){margin-left:unset;margin-right:unset;-webkit-margin-start:var(--nano-spacing-medium, 16px);margin-inline-start:var(--nano-spacing-medium, 16px);-webkit-margin-end:0;margin-inline-end:0}}.something{color:black}";var f=Object.assign(document.createElement("div"),{className:"nano-toast-stack nano-toast-stack--tr"});var h=Object.assign(document.createElement("div"),{className:"nano-toast-stack nano-toast-stack--tl"});var p=Object.assign(document.createElement("div"),{className:"nano-toast-stack nano-toast-stack--bl"});var b=Object.assign(document.createElement("div"),{className:"nano-toast-stack nano-toast-stack--br"});var m=t("nano_alert",function(){function t(t){var a=this;e(this,t);this.nanoShow=n(this,"nanoShow",7);this.nanoAfterShow=n(this,"nanoAfterShow",7);this.nanoHide=n(this,"nanoHide",7);this.nanoAfterHide=n(this,"nanoAfterHide",7);this.addedTransEnd=false;this.goingToHide=false;this.goingToShow=false;this.isModal=false;this.isToast=false;this.isShowing=false;this.open=false;this.closable=false;this.duration=Infinity;this.handleMouseMove=function(){a.restartAutoHide()};this.handleCloseClick=function(){a.hide()};this.handleTransitionEnd=function(t){if(t.propertyName==="opacity"&&(t.target===a.panel||t.target===a.overlay)){a.host.hidden=!a.open;a.isShowing=a.open;a.open?a.nanoAfterShow.emit():a.nanoAfterHide.emit()}};this.handleButtonClick=function(t){var e=t.target;if(t.defaultPrevented)return;if(e.tagName&&e.tagName.toLowerCase()==="button")a.hide()};this.restartAutoHide=function(){clearTimeout(a.autoHideTimeout);if(a.open&&a.duration<Infinity){a.autoHideTimeout=setTimeout((function(){return a.hide()}),a.duration)}};this.Panel=function(){return i("div",{ref:function(t){return a.panel=t},part:"panel",class:{alert:true,"alert--open":a.open,"alert--toasty":a.isToast,"alert--modal":!!a.isModal,"alert--showing":a.isShowing},role:!!a.isModal?"alertdialog":"alert","aria-live":"assertive","aria-atomic":"true","aria-hidden":a.open?"false":"true","aria-modal":!!a.isModal?"true":undefined,"aria-label":a.label?a.label:undefined,onMouseMove:a.handleMouseMove,tabIndex:!!a.isModal?0:undefined},i("div",{class:"alert__content"},i("div",{part:"icon",class:"alert__icon"},i("slot",{name:"icon"})),i("div",{part:"message",class:"alert__message"},i("slot",null)),a.closable&&i("div",{class:"alert__close"},i("nano-icon-button",{class:"alert__close",iconName:"light/times",label:"close menu",onClick:a.handleCloseClick}))),i("div",{class:"alert__footer"},i("slot",{name:"footer"})))}}t.prototype.handleOpenChange=function(){this.open?this.show():this.hide()};t.prototype.handleDurationChange=function(){this.restartAutoHide()};t.prototype.show=function(){return __awaiter(this,void 0,void 0,(function(){var t;var e=this;return __generator(this,(function(n){if(this.goingToShow){return[2]}t=this.nanoShow.emit();if(t.defaultPrevented){this.open=false;return[2,false]}this.host.hidden=false;this.goingToShow=true;this.open=true;s((function(){e.isShowing=true;e.goingToShow=false}));if(this.duration<Infinity){clearTimeout(this.autoHideTimeout);this.autoHideTimeout=setTimeout((function(){return e.hide()}),this.duration)}return[2]}))}))};t.prototype.hide=function(){return __awaiter(this,void 0,void 0,(function(){var t;var e=this;return __generator(this,(function(n){if(this.goingToHide){return[2]}t=this.nanoHide.emit();if(t.defaultPrevented){this.open=true;return[2,false]}this.goingToHide=true;this.open=false;s((function(){return e.goingToHide=false}));clearTimeout(this.autoHideTimeout);return[2]}))}))};t.prototype.toast=function(t){if(t===void 0){t="tr"}return __awaiter(this,void 0,void 0,(function(){var e=this;return __generator(this,(function(n){this.isToast=true;return[2,new Promise((function(n){var i;switch(t){case"tl":i=h;break;case"bl":i=p;break;case"br":i=b;break;default:i=f;break}if(!i.parentElement){document.body.appendChild(i)}i.appendChild(e.host);e.connectedCallback();e.show();e.host.addEventListener("nanoAfterHide",(function(){e.host.remove();e.isToast=false;n();if(!i.querySelector("nano-alert")){i.remove()}}),{once:true})}))]}))}))};t.prototype.alert=function(t){return __awaiter(this,void 0,void 0,(function(){var e=this;return __generator(this,(function(n){this.isModal=true;this.label=t;return[2,new Promise((function(t){if(!document.body.contains(e.host)){document.body.appendChild(e.host)}e.modal.activate();l(e.host);e.originalTrigger=document.activeElement;s((function(){e.show()}));e.host.addEventListener("nanoAfterShow",(function(){s((function(){return e.panel.focus({preventScroll:true})}))}),{once:true});e.host.addEventListener("nanoAfterHide",(function(){e.modal.deactivate();e.host.remove();e.label=undefined;e.isModal=false;t();if(e.originalTrigger&&typeof e.originalTrigger.focus==="function"){setTimeout((function(){return e.originalTrigger.focus()}))}}),{once:true})}))]}))}))};t.prototype.connectedCallback=function(){this.modal=new r(this.host);this.host.addEventListener("click",this.handleButtonClick);if(this.panel){this.addedTransEnd=true;this.panel.addEventListener("transitionend",this.handleTransitionEnd)}};t.prototype.disconnectedCallback=function(){d(this.host);this.host.removeEventListener("click",this.handleButtonClick);this.addedTransEnd=false;this.panel.removeEventListener("transitionend",this.handleTransitionEnd)};t.prototype.componentDidLoad=function(){if(this.open){this.show()}if(!this.addedTransEnd){this.panel.addEventListener("transitionend",this.handleTransitionEnd)}};t.prototype.render=function(){var t=this;return i(a,{class:Object.assign({},c(this.color)),showing:this.isShowing},this.isModal&&[i("div",{part:"overlay",class:{alert__overlay:true,"alert__overlay--open":this.open},ref:function(e){return t.overlay=e}}),i("div",{class:"alert__modal-wrap"},i(this.Panel,null))],!this.isModal&&i(this.Panel,null))};Object.defineProperty(t.prototype,"host",{get:function(){return o(this)},enumerable:false,configurable:true});Object.defineProperty(t,"watchers",{get:function(){return{open:["handleOpenChange"],duration:["handleDurationChange"]}},enumerable:false,configurable:true});return t}());m.style=u}}}));
2
+ //# sourceMappingURL=p-a897cfae.system.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/components/alert/alert.scss?tag=nano-alert&encapsulation=shadow","src/components/alert/alert.tsx"],"names":["alertCss","toastStackTr","Object","assign","document","createElement","className","toastStackTl","toastStackBl","toastStackBr","Alert","exports","class_1","hostRef","_this","this","addedTransEnd","goingToHide","goingToShow","isModal","isToast","isShowing","open","closable","duration","Infinity","handleMouseMove","restartAutoHide","handleCloseClick","hide","handleTransitionEnd","event","propertyName","target","panel","overlay","host","hidden","nanoAfterShow","emit","nanoAfterHide","handleButtonClick","defaultPrevented","tagName","toLowerCase","clearTimeout","autoHideTimeout","setTimeout","Panel","h","ref","el","part","class","alert","alert--open","alert--toasty","alert--modal","alert--showing","role","aria-live","aria-atomic","aria-hidden","aria-modal","undefined","aria-label","label","onMouseMove","tabIndex","name","iconName","onClick","prototype","handleOpenChange","show","handleDurationChange","nanoShow","raf","nanoHide","toast","position","Promise","resolve","toastStack","parentElement","body","appendChild","connectedCallback","addEventListener","remove","querySelector","once","contains","modal","activate","lockBodyScrolling","originalTrigger","activeElement","focus","preventScroll","deactivate","Modal","disconnectedCallback","unlockBodyScrolling","removeEventListener","componentDidLoad","render","Host","createColorClasses","color","showing","alert__overlay","alert__overlay--open","div"],"mappings":"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","sourcesContent":["@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/layers';\n\n:host {\n /**\n * @prop --border-radius: defaults to #{$layer-border-radius};\n * @prop --border-color: defaults to #{$layer-border-color};\n * @prop --border-width: defaults to #{$layer-border-width};\n * @prop --background: defaults to #{$layer-bg-color};\n * @prop --tint-color: defaults to var(--nano-color-base, #{nano-color(primary, base)});\n * @prop --icon-size: defaults to 1.5rem;\n * @prop --scrim-color: overlay colour of alert display. Defaults to #{$layer-overlay-dark};\n * @prop --close-button-color: defaults to #{$color-mediumgrey} ;\n */\n\n --border-radius: #{$layer-border-radius};\n --border-color: #{$layer-border-color};\n --border-width: #{$layer-border-width};\n --background: #{$layer-bg-color};\n --tint-color: var(--nano-color-base, #{nano-color(primary, base)});\n --icon-size: 2rem;\n --scrim-color: #{$layer-overlay-dark};\n --close-button-color: #{$color-palegrey};\n\n display: block;\n}\n\n:host(.nano-color) {\n --tint-color: var(--nano-color-base, #{nano-color(primary, base)});\n}\n\n.alert {\n position: relative;\n background-color: var(--background);\n border: solid var(--border-width) var(--border-color);\n border-top-width: 4px;\n border-top-color: var(--tint-color);\n border-radius: var(--border-radius);\n opacity: 0;\n transform: scale(0.9);\n transition:\n #{$transition-medium} opacity ease,\n #{$transition-fast} transform ease;\n\n &:focus {\n outline: none;\n }\n\n &:not(.alert--showing) {\n @include hidden;\n }\n\n &--open {\n opacity: 1;\n transform: none;\n }\n\n &--toasty,\n &--modal {\n box-shadow: #{$layer-shadow-large};\n margin: #{$spacing-medium};\n }\n}\n\n.alert__content {\n display: flex;\n align-items: stretch;\n}\n\n.alert__modal-wrap {\n position: fixed;\n display: flex;\n align-items: center;\n justify-content: center;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: #{$layer-index-alert};\n}\n\n.alert__message {\n flex: 1 1 auto;\n padding: #{$spacing-medium};\n overflow: hidden;\n line-height: 1.6;\n}\n\n.alert__close {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n font-size: 1.1em;\n\n @include padding(0, #{$spacing-medium}, 0, 0);\n\n --color: var(--close-button-color);\n}\n\n.alert__footer {\n padding: 0 #{$spacing-small} 0;\n display: flex;\n flex-direction: row;\n justify-content: space-around;\n align-items: center;\n\n ::slotted(*),\n &::slotted(*) {\n flex: 1;\n margin: 0 #{$spacing-small} #{$spacing-medium} !important;\n }\n}\n\n.alert__overlay {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: var(--scrim-color);\n opacity: 0;\n transition: #{$transition-fast} opacity;\n z-index: #{$layer-index-alert};\n backdrop-filter: blur(#{$layer-overlay-blur});\n\n &--open {\n opacity: 1;\n }\n}\n\n.alert__icon {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n font-size: var(--icon-size);\n\n &::slotted(*) {\n color: var(--tint-color);\n margin-left: #{$spacing-medium};\n }\n}\n\n.alert__icon ::slotted(*) {\n color: var(--tint-color);\n\n @include margin(0, 0, 0, #{$spacing-medium});\n}\n// just testing - rm later\n.something {\n color: black;\n}\n","import {\n Component,\n ComponentInterface,\n Element,\n Event,\n EventEmitter,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n VNode,\n} from '@stencil/core';\nimport { Color } from '../../interface';\nimport Modal from '../../utils/modal';\nimport {\n createColorClasses,\n lockBodyScrolling,\n raf,\n unlockBodyScrolling,\n} from '../../utils/utils';\n\nconst toastStackTr = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--tr',\n});\nconst toastStackTl = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--tl',\n});\nconst toastStackBl = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--bl',\n});\nconst toastStackBr = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--br',\n});\n\n/**\n * Alerts are used to display important messages either inline, as toast notifications or as modals requiring action.\n * @slot - The alert's content.\n * @slot icon - An icon to show in the alert.\n * @slot footer - Place items at the bottom of the alert. Best used with `button` elements - esp when used as with the `alert()` method.\n */\n@Component({\n tag: 'nano-alert',\n styleUrl: 'alert.scss',\n shadow: true,\n})\nexport class Alert implements ComponentInterface {\n private autoHideTimeout: ReturnType<typeof setTimeout>;\n private panel: HTMLElement;\n private overlay: HTMLElement;\n private modal: Modal;\n private originalTrigger: HTMLElement | null;\n private addedTransEnd = false;\n private goingToHide = false;\n private goingToShow = false;\n\n @State() isModal = false;\n @State() isToast = false;\n @State() isShowing = false;\n @State() label: string;\n\n @Element() host: HTMLNanoAlertElement;\n\n /** Indicates whether or not the alert 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 /** Set to true to make the alert closable. */\n @Prop({ reflect: true }) closable = false;\n\n /** The color to use from the application's color palette. */\n @Prop({ reflect: true }) color?: Color;\n\n /**\n * The length of time, in milliseconds, the alert will show before closing itself. If the user interacts with the\n * alert before it closes (e.g. moves the mouse over it), the timer will restart.\n */\n @Prop() duration = Infinity;\n\n @Watch('duration')\n handleDurationChange() {\n this.restartAutoHide();\n }\n\n /** Emitted when the alert opens. Calling `event.preventDefault()` will prevent it from being opened. */\n @Event() nanoShow: EventEmitter;\n\n /** Emitted after the alert opens and all transitions are complete. */\n @Event() nanoAfterShow: EventEmitter;\n\n /** Emitted when the alert closes. Calling `event.preventDefault()` will prevent it from being closed. */\n @Event() nanoHide: EventEmitter;\n\n /** Emitted after the alert closes and all transitions are complete. */\n @Event() nanoAfterHide: EventEmitter;\n\n /** Shows the alert. */\n @Method()\n async show() {\n if (this.goingToShow) {\n return;\n }\n const nanoShow = this.nanoShow.emit();\n if (nanoShow.defaultPrevented) {\n this.open = false;\n return false;\n }\n\n this.host.hidden = false;\n this.goingToShow = true;\n this.open = true;\n raf(() => {\n this.isShowing = true;\n this.goingToShow = false;\n });\n\n if (this.duration < Infinity) {\n clearTimeout(this.autoHideTimeout);\n this.autoHideTimeout = setTimeout(() => this.hide(), this.duration);\n }\n }\n\n /** Hides the alert */\n @Method()\n async hide() {\n if (this.goingToHide) {\n return;\n }\n const nanoHide = this.nanoHide.emit();\n\n if (nanoHide.defaultPrevented) {\n this.open = true;\n return false;\n }\n this.goingToHide = true;\n this.open = false;\n\n raf(() => (this.goingToHide = false));\n clearTimeout(this.autoHideTimeout);\n }\n\n /**\n * Displays the alert as a toast notification. This will move the alert out of its position in the DOM and, when\n * dismissed, it will be removed from the DOM completely. By storing a reference to the alert, you can reuse it by\n * calling this method again. The returned promise will resolve after the alert is hidden.\n *\n * @param position options are tr (top-right - default), tl (top-left), br (bottom-right), bl (bottom-left)\n * @returns a promise which will resolve after the alert has hidden\n */\n @Method()\n async toast(position: 'tr' | 'tl' | 'bl' | 'br' = 'tr') {\n this.isToast = true;\n return new Promise<void>((resolve) => {\n let toastStack: HTMLElement;\n switch (position) {\n case 'tl':\n toastStack = toastStackTl;\n break;\n case 'bl':\n toastStack = toastStackBl;\n break;\n case 'br':\n toastStack = toastStackBr;\n break;\n default:\n toastStack = toastStackTr;\n break;\n }\n\n if (!toastStack.parentElement) {\n document.body.appendChild(toastStack);\n }\n\n toastStack.appendChild(this.host);\n this.connectedCallback();\n this.show();\n\n this.host.addEventListener(\n 'nanoAfterHide',\n () => {\n this.host.remove();\n this.isToast = false;\n resolve();\n\n // Remove the toast stack from the DOM when there are no more alerts\n if (!toastStack.querySelector('nano-alert')) {\n toastStack.remove();\n }\n },\n { once: true }\n );\n });\n }\n\n /**\n * Displays the alert as a dialog / modal - more akin to a traditional js alert().\n * @param label a label for assistive technology\n */\n @Method()\n async alert(label: string) {\n this.isModal = true;\n this.label = label;\n\n return new Promise<void>((resolve) => {\n if (!document.body.contains(this.host)) {\n document.body.appendChild(this.host);\n }\n\n this.modal.activate();\n lockBodyScrolling(this.host);\n this.originalTrigger = document.activeElement as HTMLElement;\n\n raf(() => {\n this.show();\n });\n\n this.host.addEventListener(\n 'nanoAfterShow',\n () => {\n raf(() => this.panel.focus({ preventScroll: true }));\n },\n { once: true }\n );\n\n this.host.addEventListener(\n 'nanoAfterHide',\n () => {\n this.modal.deactivate();\n this.host.remove();\n this.label = undefined;\n this.isModal = false;\n resolve();\n\n // Restore focus to the original trigger\n if (\n this.originalTrigger &&\n typeof this.originalTrigger.focus === 'function'\n ) {\n setTimeout(() => this.originalTrigger.focus());\n }\n },\n { once: true }\n );\n });\n }\n\n private handleMouseMove = () => {\n this.restartAutoHide();\n };\n\n private handleCloseClick = () => {\n this.hide();\n };\n\n private handleTransitionEnd = (event: TransitionEvent) => {\n if (\n event.propertyName === 'opacity' &&\n (event.target === this.panel || event.target === this.overlay)\n ) {\n this.host.hidden = !this.open;\n this.isShowing = this.open;\n this.open ? this.nanoAfterShow.emit() : this.nanoAfterHide.emit();\n }\n };\n\n private handleButtonClick = (event: Event) => {\n const target = event.target as HTMLElement;\n if (event.defaultPrevented) return;\n if (target.tagName && target.tagName.toLowerCase() === 'button')\n this.hide();\n };\n\n private restartAutoHide = () => {\n clearTimeout(this.autoHideTimeout);\n if (this.open && this.duration < Infinity) {\n this.autoHideTimeout = setTimeout(() => this.hide(), this.duration);\n }\n };\n\n connectedCallback() {\n this.modal = new Modal(this.host);\n this.host.addEventListener('click', this.handleButtonClick);\n\n if (this.panel) {\n this.addedTransEnd = true;\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\n }\n\n disconnectedCallback() {\n unlockBodyScrolling(this.host);\n this.host.removeEventListener('click', this.handleButtonClick);\n\n this.addedTransEnd = false;\n this.panel.removeEventListener('transitionend', this.handleTransitionEnd);\n }\n\n componentDidLoad() {\n // Show on init if open\n if (this.open) {\n this.show();\n }\n if (!this.addedTransEnd) {\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\n }\n\n private Panel = (): VNode => {\n return (\n <div\n ref={(el) => (this.panel = el)}\n part=\"panel\"\n class={{\n alert: true,\n 'alert--open': this.open,\n 'alert--toasty': this.isToast,\n 'alert--modal': !!this.isModal,\n 'alert--showing': this.isShowing,\n }}\n role={!!this.isModal ? 'alertdialog' : 'alert'}\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n aria-hidden={this.open ? 'false' : 'true'}\n aria-modal={!!this.isModal ? 'true' : undefined}\n aria-label={this.label ? this.label : undefined}\n onMouseMove={this.handleMouseMove}\n tabIndex={!!this.isModal ? 0 : undefined}\n >\n <div class=\"alert__content\">\n <div part=\"icon\" class=\"alert__icon\">\n <slot name=\"icon\" />\n </div>\n <div part=\"message\" class=\"alert__message\">\n <slot />\n </div>\n {this.closable && (\n <div class=\"alert__close\">\n <nano-icon-button\n class=\"alert__close\"\n iconName=\"light/times\"\n label=\"close menu\"\n onClick={this.handleCloseClick}\n ></nano-icon-button>\n </div>\n )}\n </div>\n <div class=\"alert__footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n );\n };\n\n render() {\n return (\n <Host\n class={{ ...createColorClasses(this.color) }}\n showing={this.isShowing}\n >\n {this.isModal && [\n <div\n part=\"overlay\"\n class={{\n alert__overlay: true,\n 'alert__overlay--open': this.open,\n }}\n ref={(div) => (this.overlay = div)}\n />,\n <div class=\"alert__modal-wrap\">\n <this.Panel />\n </div>,\n ]}\n {!this.isModal && <this.Panel />}\n </Host>\n );\n }\n}\n"]}
package/docs-json.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2021-09-29T16:10:53",
2
+ "timestamp": "2021-09-29T16:38:55",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "2.5.9",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanoporetech-digital/components",
3
- "version": "1.13.20",
3
+ "version": "1.13.21",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://git.oxfordnanolabs.local/Digital/nano-components"
@@ -124,5 +124,5 @@
124
124
  "peerDependencies": {
125
125
  "@stencil/core": "^2.5.0"
126
126
  },
127
- "gitHead": "b11eed12a6c754024b97c8e7e401e0e118216306"
127
+ "gitHead": "3f65547b1f95a4dfde37af95266eef7e16963e74"
128
128
  }
@@ -1,2 +0,0 @@
1
- import{r as t,c as i,h as a,e,g as s}from"./p-f55560d3.js";import{M as o}from"./p-8c9e74c7.js";import{r as n}from"./p-c930d4f5.js";import{l as r,u as l}from"./p-5af040f4.js";import{c as h}from"./p-d3af43d2.js";import"./p-a5917bdc.js";import"./p-a0ddf496.js";const c=Object.assign(document.createElement("div"),{className:"nano-toast-stack nano-toast-stack--tr"}),d=Object.assign(document.createElement("div"),{className:"nano-toast-stack nano-toast-stack--tl"}),m=Object.assign(document.createElement("div"),{className:"nano-toast-stack nano-toast-stack--bl"}),b=Object.assign(document.createElement("div"),{className:"nano-toast-stack nano-toast-stack--br"});let p=class{constructor(e){t(this,e),this.nanoShow=i(this,"nanoShow",7),this.nanoAfterShow=i(this,"nanoAfterShow",7),this.nanoHide=i(this,"nanoHide",7),this.nanoAfterHide=i(this,"nanoAfterHide",7),this.addedTransEnd=!1,this.goingToHide=!1,this.goingToShow=!1,this.isModal=!1,this.isToast=!1,this.isShowing=!1,this.open=!1,this.closable=!1,this.duration=1/0,this.handleMouseMove=()=>{this.restartAutoHide()},this.handleCloseClick=()=>{this.hide()},this.handleTransitionEnd=t=>{"opacity"!==t.propertyName||t.target!==this.panel&&t.target!==this.overlay||(this.host.hidden=!this.open,this.isShowing=this.open,this.open?this.nanoAfterShow.emit():this.nanoAfterHide.emit())},this.handleButtonClick=t=>{const i=t.target;t.defaultPrevented||i.tagName&&"button"===i.tagName.toLowerCase()&&this.hide()},this.restartAutoHide=()=>{clearTimeout(this.autoHideTimeout),this.open&&this.duration<1/0&&(this.autoHideTimeout=setTimeout((()=>this.hide()),this.duration))},this.Panel=()=>a("div",{ref:t=>this.panel=t,part:"panel",class:{alert:!0,"alert--open":this.open,"alert--toasty":this.isToast,"alert--modal":!!this.isModal,"alert--showing":this.isShowing},role:this.isModal?"alertdialog":"alert","aria-live":"assertive","aria-atomic":"true","aria-hidden":this.open?"false":"true","aria-modal":this.isModal?"true":void 0,"aria-label":this.label?this.label:void 0,onMouseMove:this.handleMouseMove,tabIndex:this.isModal?0:void 0},a("div",{class:"alert__content"},a("div",{part:"icon",class:"alert__icon"},a("slot",{name:"icon"})),a("div",{part:"message",class:"alert__message"},a("slot",null)),this.closable&&a("div",{class:"alert__close"},a("nano-icon-button",{class:"alert__close",iconName:"light/times",label:"close menu",onClick:this.handleCloseClick}))),a("div",{class:"alert__footer"},a("slot",{name:"footer"})))}handleOpenChange(){this.open?this.show():this.hide()}handleDurationChange(){this.restartAutoHide()}async show(){if(!this.goingToShow)return this.nanoShow.emit().defaultPrevented?(this.open=!1,!1):(this.host.hidden=!1,this.goingToShow=!0,this.open=!0,n((()=>{this.isShowing=!0,this.goingToShow=!1})),void(this.duration<1/0&&(clearTimeout(this.autoHideTimeout),this.autoHideTimeout=setTimeout((()=>this.hide()),this.duration))))}async hide(){if(!this.goingToHide)return this.nanoHide.emit().defaultPrevented?(this.open=!0,!1):(this.goingToHide=!0,this.open=!1,n((()=>this.goingToHide=!1)),void clearTimeout(this.autoHideTimeout))}async toast(t="tr"){return this.isToast=!0,new Promise((i=>{let a;switch(t){case"tl":a=d;break;case"bl":a=m;break;case"br":a=b;break;default:a=c}a.parentElement||document.body.appendChild(a),a.appendChild(this.host),this.connectedCallback(),this.show(),this.host.addEventListener("nanoAfterHide",(()=>{this.host.remove(),this.isToast=!1,i(),a.querySelector("nano-alert")||a.remove()}),{once:!0})}))}async alert(t){return this.isModal=!0,this.label=t,new Promise((t=>{document.body.contains(this.host)||document.body.appendChild(this.host),this.modal.activate(),r(this.host),this.originalTrigger=document.activeElement,n((()=>{this.show()})),this.host.addEventListener("nanoAfterShow",(()=>{n((()=>this.panel.focus({preventScroll:!0})))}),{once:!0}),this.host.addEventListener("nanoAfterHide",(()=>{this.modal.deactivate(),this.host.remove(),this.label=void 0,this.isModal=!1,t(),this.originalTrigger&&"function"==typeof this.originalTrigger.focus&&setTimeout((()=>this.originalTrigger.focus()))}),{once:!0})}))}connectedCallback(){this.modal=new o(this.host),this.host.addEventListener("click",this.handleButtonClick),this.panel&&(this.addedTransEnd=!0,this.panel.addEventListener("transitionend",this.handleTransitionEnd))}disconnectedCallback(){l(this.host),this.host.removeEventListener("click",this.handleButtonClick),this.addedTransEnd=!1,this.panel.removeEventListener("transitionend",this.handleTransitionEnd)}componentDidLoad(){this.open&&this.show(),this.addedTransEnd||this.panel.addEventListener("transitionend",this.handleTransitionEnd)}render(){return a(e,{class:Object.assign({},h(this.color)),showing:this.isShowing},this.isModal&&[a("div",{part:"overlay",class:{alert__overlay:!0,"alert__overlay--open":this.open},ref:t=>this.overlay=t}),a("div",{class:"alert__modal-wrap"},a(this.Panel,null))],!this.isModal&&a(this.Panel,null))}get host(){return s(this)}static get watchers(){return{open:["handleOpenChange"],duration:["handleDurationChange"]}}};p.style=":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}:host{--border-radius:var(--nano-layer-border-radius, var(--nano-border-radius-medium, 4px));--border-color:var(--nano-layer-border-color, rgba(0, 0, 0, 0.1));--border-width:var(--nano-layer-border-width, 1px);--background:var(--nano-layer-bg, #fff);--tint-color:var(--nano-color-base, var(--nano-color-primary, #0084a9));--icon-size:2rem;--scrim-color:var(--nano-layer-overlay-dark, rgba(74, 74, 74, .5));--close-button-color:#b5aea7;display:block}:host(.nano-color){--tint-color:var(--nano-color-base, var(--nano-color-primary, #0084a9))}.alert{position:relative;background-color:var(--background);border:solid var(--border-width) var(--border-color);border-top-width:4px;border-top-color:var(--tint-color);border-radius:var(--border-radius);opacity:0;-webkit-transform:scale(0.9);transform:scale(0.9);-webkit-transition:var(--nano-transition-medium, 0.5s) opacity ease, var(--nano-transition-fast, 0.3s) transform ease;transition:var(--nano-transition-medium, 0.5s) opacity ease, var(--nano-transition-fast, 0.3s) transform ease}.alert:focus{outline:none}.alert:not(.alert--showing){position:absolute;width:1px;height:1px;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);overflow:hidden;pointer-events:none;visibility:hidden}.alert--open{opacity:1;-webkit-transform:none;transform:none}.alert--toasty,.alert--modal{-webkit-box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.3));box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.3));margin:var(--nano-spacing-medium, 16px)}.alert__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.alert__modal-wrap{position:fixed;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;top:0;right:0;bottom:0;left:0;z-index:var(--nano-layer-index-alert, 800)}.alert__message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:var(--nano-spacing-medium, 16px);overflow:hidden;line-height:1.6}.alert__close{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:1.1em;padding-left:0;padding-right:var(--nano-spacing-medium, 16px);padding-top:0;padding-bottom:0;--color:var(--close-button-color)}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.alert__close{padding-left:unset;padding-right:unset;-webkit-padding-start:0;padding-inline-start:0;-webkit-padding-end:var(--nano-spacing-medium, 16px);padding-inline-end:var(--nano-spacing-medium, 16px)}}.alert__footer{padding:0 var(--nano-spacing-small, 8px) 0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:distribute;justify-content:space-around;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.alert__footer ::slotted(*),.alert__footer::slotted(*){-webkit-box-flex:1;-ms-flex:1;flex:1;margin:0 var(--nano-spacing-small, 8px) var(--nano-spacing-medium, 16px) !important}.alert__overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:var(--scrim-color);opacity:0;-webkit-transition:var(--nano-transition-fast, 0.3s) opacity;transition:var(--nano-transition-fast, 0.3s) opacity;z-index:var(--nano-layer-index-alert, 800);-webkit-backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px));backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px))}.alert__overlay--open{opacity:1}.alert__icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:var(--icon-size)}.alert__icon::slotted(*){color:var(--tint-color);margin-left:var(--nano-spacing-medium, 16px)}.alert__icon ::slotted(*){color:var(--tint-color);margin-left:var(--nano-spacing-medium, 16px);margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.alert__icon ::slotted(*){margin-left:unset;margin-right:unset;-webkit-margin-start:var(--nano-spacing-medium, 16px);margin-inline-start:var(--nano-spacing-medium, 16px);-webkit-margin-end:0;margin-inline-end:0}}";export{p as nano_alert}
2
- //# sourceMappingURL=p-0e1d7b66.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["src/components/alert/alert.scss?tag=nano-alert&encapsulation=shadow","src/components/alert/alert.tsx"],"names":["toastStackTr","Object","assign","document","createElement","className","toastStackTl","toastStackBl","toastStackBr","Alert","[object Object]","hostRef","this","addedTransEnd","goingToHide","goingToShow","isModal","isToast","isShowing","open","closable","duration","Infinity","handleMouseMove","restartAutoHide","handleCloseClick","hide","handleTransitionEnd","event","propertyName","target","panel","overlay","host","hidden","nanoAfterShow","emit","nanoAfterHide","handleButtonClick","defaultPrevented","tagName","toLowerCase","clearTimeout","autoHideTimeout","setTimeout","Panel","h","ref","el","part","class","alert","alert--open","alert--toasty","alert--modal","alert--showing","role","aria-live","aria-atomic","aria-hidden","aria-modal","undefined","aria-label","label","onMouseMove","tabIndex","name","iconName","onClick","show","nanoShow","raf","nanoHide","position","Promise","resolve","toastStack","parentElement","body","appendChild","connectedCallback","addEventListener","remove","querySelector","once","contains","modal","activate","lockBodyScrolling","originalTrigger","activeElement","focus","preventScroll","deactivate","Modal","unlockBodyScrolling","removeEventListener","Host","createColorClasses","color","showing","alert__overlay","alert__overlay--open","div"],"mappings":"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","sourcesContent":["@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/layers';\n\n:host {\n /**\n * @prop --border-radius: defaults to #{$layer-border-radius};\n * @prop --border-color: defaults to #{$layer-border-color};\n * @prop --border-width: defaults to #{$layer-border-width};\n * @prop --background: defaults to #{$layer-bg-color};\n * @prop --tint-color: defaults to var(--nano-color-base, #{nano-color(primary, base)});\n * @prop --icon-size: defaults to 1.5rem;\n * @prop --scrim-color: overlay colour of alert display. Defaults to #{$layer-overlay-dark};\n * @prop --close-button-color: defaults to #{$color-mediumgrey} ;\n */\n\n --border-radius: #{$layer-border-radius};\n --border-color: #{$layer-border-color};\n --border-width: #{$layer-border-width};\n --background: #{$layer-bg-color};\n --tint-color: var(--nano-color-base, #{nano-color(primary, base)});\n --icon-size: 2rem;\n --scrim-color: #{$layer-overlay-dark};\n --close-button-color: #{$color-palegrey};\n\n display: block;\n}\n\n:host(.nano-color) {\n --tint-color: var(--nano-color-base, #{nano-color(primary, base)});\n}\n\n.alert {\n position: relative;\n background-color: var(--background);\n border: solid var(--border-width) var(--border-color);\n border-top-width: 4px;\n border-top-color: var(--tint-color);\n border-radius: var(--border-radius);\n opacity: 0;\n transform: scale(0.9);\n transition:\n #{$transition-medium} opacity ease,\n #{$transition-fast} transform ease;\n\n &:focus {\n outline: none;\n }\n\n &:not(.alert--showing) {\n @include hidden;\n }\n\n &--open {\n opacity: 1;\n transform: none;\n }\n\n &--toasty,\n &--modal {\n box-shadow: #{$layer-shadow-large};\n margin: #{$spacing-medium};\n }\n}\n\n.alert__content {\n display: flex;\n align-items: stretch;\n}\n\n.alert__modal-wrap {\n position: fixed;\n display: flex;\n align-items: center;\n justify-content: center;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: #{$layer-index-alert};\n}\n\n.alert__message {\n flex: 1 1 auto;\n padding: #{$spacing-medium};\n overflow: hidden;\n line-height: 1.6;\n}\n\n.alert__close {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n font-size: 1.1em;\n\n @include padding(0, #{$spacing-medium}, 0, 0);\n\n --color: var(--close-button-color);\n}\n\n.alert__footer {\n padding: 0 #{$spacing-small} 0;\n display: flex;\n flex-direction: row;\n justify-content: space-around;\n align-items: center;\n\n ::slotted(*),\n &::slotted(*) {\n flex: 1;\n margin: 0 #{$spacing-small} #{$spacing-medium} !important;\n }\n}\n\n.alert__overlay {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: var(--scrim-color);\n opacity: 0;\n transition: #{$transition-fast} opacity;\n z-index: #{$layer-index-alert};\n backdrop-filter: blur(#{$layer-overlay-blur});\n\n &--open {\n opacity: 1;\n }\n}\n\n.alert__icon {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n font-size: var(--icon-size);\n\n &::slotted(*) {\n color: var(--tint-color);\n margin-left: #{$spacing-medium};\n }\n}\n\n.alert__icon ::slotted(*) {\n color: var(--tint-color);\n\n @include margin(0, 0, 0, #{$spacing-medium});\n}\n\n","import {\n Component,\n ComponentInterface,\n Element,\n Event,\n EventEmitter,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n VNode,\n} from '@stencil/core';\nimport { Color } from '../../interface';\nimport Modal from '../../utils/modal';\nimport {\n createColorClasses,\n lockBodyScrolling,\n raf,\n unlockBodyScrolling,\n} from '../../utils/utils';\n\nconst toastStackTr = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--tr',\n});\nconst toastStackTl = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--tl',\n});\nconst toastStackBl = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--bl',\n});\nconst toastStackBr = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--br',\n});\n\n/**\n * Alerts are used to display important messages either inline, as toast notifications or as modals requiring action.\n * @slot - The alert's content.\n * @slot icon - An icon to show in the alert.\n * @slot footer - Place items at the bottom of the alert. Best used with `button` elements - esp when used as with the `alert()` method.\n */\n@Component({\n tag: 'nano-alert',\n styleUrl: 'alert.scss',\n shadow: true,\n})\nexport class Alert implements ComponentInterface {\n private autoHideTimeout: ReturnType<typeof setTimeout>;\n private panel: HTMLElement;\n private overlay: HTMLElement;\n private modal: Modal;\n private originalTrigger: HTMLElement | null;\n private addedTransEnd = false;\n private goingToHide = false;\n private goingToShow = false;\n\n @State() isModal = false;\n @State() isToast = false;\n @State() isShowing = false;\n @State() label: string;\n\n @Element() host: HTMLNanoAlertElement;\n\n /** Indicates whether or not the alert 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 /** Set to true to make the alert closable. */\n @Prop({ reflect: true }) closable = false;\n\n /** The color to use from the application's color palette. */\n @Prop({ reflect: true }) color?: Color;\n\n /**\n * The length of time, in milliseconds, the alert will show before closing itself. If the user interacts with the\n * alert before it closes (e.g. moves the mouse over it), the timer will restart.\n */\n @Prop() duration = Infinity;\n\n @Watch('duration')\n handleDurationChange() {\n this.restartAutoHide();\n }\n\n /** Emitted when the alert opens. Calling `event.preventDefault()` will prevent it from being opened. */\n @Event() nanoShow: EventEmitter;\n\n /** Emitted after the alert opens and all transitions are complete. */\n @Event() nanoAfterShow: EventEmitter;\n\n /** Emitted when the alert closes. Calling `event.preventDefault()` will prevent it from being closed. */\n @Event() nanoHide: EventEmitter;\n\n /** Emitted after the alert closes and all transitions are complete. */\n @Event() nanoAfterHide: EventEmitter;\n\n /** Shows the alert. */\n @Method()\n async show() {\n if (this.goingToShow) {\n return;\n }\n const nanoShow = this.nanoShow.emit();\n if (nanoShow.defaultPrevented) {\n this.open = false;\n return false;\n }\n\n this.host.hidden = false;\n this.goingToShow = true;\n this.open = true;\n raf(() => {\n this.isShowing = true;\n this.goingToShow = false;\n });\n\n if (this.duration < Infinity) {\n clearTimeout(this.autoHideTimeout);\n this.autoHideTimeout = setTimeout(() => this.hide(), this.duration);\n }\n }\n\n /** Hides the alert */\n @Method()\n async hide() {\n if (this.goingToHide) {\n return;\n }\n const nanoHide = this.nanoHide.emit();\n\n if (nanoHide.defaultPrevented) {\n this.open = true;\n return false;\n }\n this.goingToHide = true;\n this.open = false;\n\n raf(() => (this.goingToHide = false));\n clearTimeout(this.autoHideTimeout);\n }\n\n /**\n * Displays the alert as a toast notification. This will move the alert out of its position in the DOM and, when\n * dismissed, it will be removed from the DOM completely. By storing a reference to the alert, you can reuse it by\n * calling this method again. The returned promise will resolve after the alert is hidden.\n *\n * @param position options are tr (top-right - default), tl (top-left), br (bottom-right), bl (bottom-left)\n * @returns a promise which will resolve after the alert has hidden\n */\n @Method()\n async toast(position: 'tr' | 'tl' | 'bl' | 'br' = 'tr') {\n this.isToast = true;\n return new Promise<void>((resolve) => {\n let toastStack: HTMLElement;\n switch (position) {\n case 'tl':\n toastStack = toastStackTl;\n break;\n case 'bl':\n toastStack = toastStackBl;\n break;\n case 'br':\n toastStack = toastStackBr;\n break;\n default:\n toastStack = toastStackTr;\n break;\n }\n\n if (!toastStack.parentElement) {\n document.body.appendChild(toastStack);\n }\n\n toastStack.appendChild(this.host);\n this.connectedCallback();\n this.show();\n\n this.host.addEventListener(\n 'nanoAfterHide',\n () => {\n this.host.remove();\n this.isToast = false;\n resolve();\n\n // Remove the toast stack from the DOM when there are no more alerts\n if (!toastStack.querySelector('nano-alert')) {\n toastStack.remove();\n }\n },\n { once: true }\n );\n });\n }\n\n /**\n * Displays the alert as a dialog / modal - more akin to a traditional js alert().\n * @param label a label for assistive technology\n */\n @Method()\n async alert(label: string) {\n this.isModal = true;\n this.label = label;\n\n return new Promise<void>((resolve) => {\n if (!document.body.contains(this.host)) {\n document.body.appendChild(this.host);\n }\n\n this.modal.activate();\n lockBodyScrolling(this.host);\n this.originalTrigger = document.activeElement as HTMLElement;\n\n raf(() => {\n this.show();\n });\n\n this.host.addEventListener(\n 'nanoAfterShow',\n () => {\n raf(() => this.panel.focus({ preventScroll: true }));\n },\n { once: true }\n );\n\n this.host.addEventListener(\n 'nanoAfterHide',\n () => {\n this.modal.deactivate();\n this.host.remove();\n this.label = undefined;\n this.isModal = false;\n resolve();\n\n // Restore focus to the original trigger\n if (\n this.originalTrigger &&\n typeof this.originalTrigger.focus === 'function'\n ) {\n setTimeout(() => this.originalTrigger.focus());\n }\n },\n { once: true }\n );\n });\n }\n\n private handleMouseMove = () => {\n this.restartAutoHide();\n };\n\n private handleCloseClick = () => {\n this.hide();\n };\n\n private handleTransitionEnd = (event: TransitionEvent) => {\n if (\n event.propertyName === 'opacity' &&\n (event.target === this.panel || event.target === this.overlay)\n ) {\n this.host.hidden = !this.open;\n this.isShowing = this.open;\n this.open ? this.nanoAfterShow.emit() : this.nanoAfterHide.emit();\n }\n };\n\n private handleButtonClick = (event: Event) => {\n const target = event.target as HTMLElement;\n if (event.defaultPrevented) return;\n if (target.tagName && target.tagName.toLowerCase() === 'button')\n this.hide();\n };\n\n private restartAutoHide = () => {\n clearTimeout(this.autoHideTimeout);\n if (this.open && this.duration < Infinity) {\n this.autoHideTimeout = setTimeout(() => this.hide(), this.duration);\n }\n };\n\n connectedCallback() {\n this.modal = new Modal(this.host);\n this.host.addEventListener('click', this.handleButtonClick);\n\n if (this.panel) {\n this.addedTransEnd = true;\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\n }\n\n disconnectedCallback() {\n unlockBodyScrolling(this.host);\n this.host.removeEventListener('click', this.handleButtonClick);\n\n this.addedTransEnd = false;\n this.panel.removeEventListener('transitionend', this.handleTransitionEnd);\n }\n\n componentDidLoad() {\n // Show on init if open\n if (this.open) {\n this.show();\n }\n if (!this.addedTransEnd) {\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\n }\n\n private Panel = (): VNode => {\n return (\n <div\n ref={(el) => (this.panel = el)}\n part=\"panel\"\n class={{\n alert: true,\n 'alert--open': this.open,\n 'alert--toasty': this.isToast,\n 'alert--modal': !!this.isModal,\n 'alert--showing': this.isShowing,\n }}\n role={!!this.isModal ? 'alertdialog' : 'alert'}\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n aria-hidden={this.open ? 'false' : 'true'}\n aria-modal={!!this.isModal ? 'true' : undefined}\n aria-label={this.label ? this.label : undefined}\n onMouseMove={this.handleMouseMove}\n tabIndex={!!this.isModal ? 0 : undefined}\n >\n <div class=\"alert__content\">\n <div part=\"icon\" class=\"alert__icon\">\n <slot name=\"icon\" />\n </div>\n <div part=\"message\" class=\"alert__message\">\n <slot />\n </div>\n {this.closable && (\n <div class=\"alert__close\">\n <nano-icon-button\n class=\"alert__close\"\n iconName=\"light/times\"\n label=\"close menu\"\n onClick={this.handleCloseClick}\n ></nano-icon-button>\n </div>\n )}\n </div>\n <div class=\"alert__footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n );\n };\n\n render() {\n return (\n <Host\n class={{ ...createColorClasses(this.color) }}\n showing={this.isShowing}\n >\n {this.isModal && [\n <div\n part=\"overlay\"\n class={{\n alert__overlay: true,\n 'alert__overlay--open': this.open,\n }}\n ref={(div) => (this.overlay = div)}\n />,\n <div class=\"alert__modal-wrap\">\n <this.Panel />\n </div>,\n ]}\n {!this.isModal && <this.Panel />}\n </Host>\n );\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["src/components/alert/alert.scss?tag=nano-alert&encapsulation=shadow","src/components/alert/alert.tsx"],"names":["alertCss","toastStackTr","Object","assign","document","createElement","className","toastStackTl","toastStackBl","toastStackBr","Alert","exports","class_1","hostRef","_this","this","addedTransEnd","goingToHide","goingToShow","isModal","isToast","isShowing","open","closable","duration","Infinity","handleMouseMove","restartAutoHide","handleCloseClick","hide","handleTransitionEnd","event","propertyName","target","panel","overlay","host","hidden","nanoAfterShow","emit","nanoAfterHide","handleButtonClick","defaultPrevented","tagName","toLowerCase","clearTimeout","autoHideTimeout","setTimeout","Panel","h","ref","el","part","class","alert","alert--open","alert--toasty","alert--modal","alert--showing","role","aria-live","aria-atomic","aria-hidden","aria-modal","undefined","aria-label","label","onMouseMove","tabIndex","name","iconName","onClick","prototype","handleOpenChange","show","handleDurationChange","nanoShow","raf","nanoHide","toast","position","Promise","resolve","toastStack","parentElement","body","appendChild","connectedCallback","addEventListener","remove","querySelector","once","contains","modal","activate","lockBodyScrolling","originalTrigger","activeElement","focus","preventScroll","deactivate","Modal","disconnectedCallback","unlockBodyScrolling","removeEventListener","componentDidLoad","render","Host","createColorClasses","color","showing","alert__overlay","alert__overlay--open","div"],"mappings":"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","sourcesContent":["@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/layers';\n\n:host {\n /**\n * @prop --border-radius: defaults to #{$layer-border-radius};\n * @prop --border-color: defaults to #{$layer-border-color};\n * @prop --border-width: defaults to #{$layer-border-width};\n * @prop --background: defaults to #{$layer-bg-color};\n * @prop --tint-color: defaults to var(--nano-color-base, #{nano-color(primary, base)});\n * @prop --icon-size: defaults to 1.5rem;\n * @prop --scrim-color: overlay colour of alert display. Defaults to #{$layer-overlay-dark};\n * @prop --close-button-color: defaults to #{$color-mediumgrey} ;\n */\n\n --border-radius: #{$layer-border-radius};\n --border-color: #{$layer-border-color};\n --border-width: #{$layer-border-width};\n --background: #{$layer-bg-color};\n --tint-color: var(--nano-color-base, #{nano-color(primary, base)});\n --icon-size: 2rem;\n --scrim-color: #{$layer-overlay-dark};\n --close-button-color: #{$color-palegrey};\n\n display: block;\n}\n\n:host(.nano-color) {\n --tint-color: var(--nano-color-base, #{nano-color(primary, base)});\n}\n\n.alert {\n position: relative;\n background-color: var(--background);\n border: solid var(--border-width) var(--border-color);\n border-top-width: 4px;\n border-top-color: var(--tint-color);\n border-radius: var(--border-radius);\n opacity: 0;\n transform: scale(0.9);\n transition:\n #{$transition-medium} opacity ease,\n #{$transition-fast} transform ease;\n\n &:focus {\n outline: none;\n }\n\n &:not(.alert--showing) {\n @include hidden;\n }\n\n &--open {\n opacity: 1;\n transform: none;\n }\n\n &--toasty,\n &--modal {\n box-shadow: #{$layer-shadow-large};\n margin: #{$spacing-medium};\n }\n}\n\n.alert__content {\n display: flex;\n align-items: stretch;\n}\n\n.alert__modal-wrap {\n position: fixed;\n display: flex;\n align-items: center;\n justify-content: center;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: #{$layer-index-alert};\n}\n\n.alert__message {\n flex: 1 1 auto;\n padding: #{$spacing-medium};\n overflow: hidden;\n line-height: 1.6;\n}\n\n.alert__close {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n font-size: 1.1em;\n\n @include padding(0, #{$spacing-medium}, 0, 0);\n\n --color: var(--close-button-color);\n}\n\n.alert__footer {\n padding: 0 #{$spacing-small} 0;\n display: flex;\n flex-direction: row;\n justify-content: space-around;\n align-items: center;\n\n ::slotted(*),\n &::slotted(*) {\n flex: 1;\n margin: 0 #{$spacing-small} #{$spacing-medium} !important;\n }\n}\n\n.alert__overlay {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: var(--scrim-color);\n opacity: 0;\n transition: #{$transition-fast} opacity;\n z-index: #{$layer-index-alert};\n backdrop-filter: blur(#{$layer-overlay-blur});\n\n &--open {\n opacity: 1;\n }\n}\n\n.alert__icon {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n font-size: var(--icon-size);\n\n &::slotted(*) {\n color: var(--tint-color);\n margin-left: #{$spacing-medium};\n }\n}\n\n.alert__icon ::slotted(*) {\n color: var(--tint-color);\n\n @include margin(0, 0, 0, #{$spacing-medium});\n}\n\n","import {\n Component,\n ComponentInterface,\n Element,\n Event,\n EventEmitter,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n VNode,\n} from '@stencil/core';\nimport { Color } from '../../interface';\nimport Modal from '../../utils/modal';\nimport {\n createColorClasses,\n lockBodyScrolling,\n raf,\n unlockBodyScrolling,\n} from '../../utils/utils';\n\nconst toastStackTr = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--tr',\n});\nconst toastStackTl = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--tl',\n});\nconst toastStackBl = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--bl',\n});\nconst toastStackBr = Object.assign(document.createElement('div'), {\n className: 'nano-toast-stack nano-toast-stack--br',\n});\n\n/**\n * Alerts are used to display important messages either inline, as toast notifications or as modals requiring action.\n * @slot - The alert's content.\n * @slot icon - An icon to show in the alert.\n * @slot footer - Place items at the bottom of the alert. Best used with `button` elements - esp when used as with the `alert()` method.\n */\n@Component({\n tag: 'nano-alert',\n styleUrl: 'alert.scss',\n shadow: true,\n})\nexport class Alert implements ComponentInterface {\n private autoHideTimeout: ReturnType<typeof setTimeout>;\n private panel: HTMLElement;\n private overlay: HTMLElement;\n private modal: Modal;\n private originalTrigger: HTMLElement | null;\n private addedTransEnd = false;\n private goingToHide = false;\n private goingToShow = false;\n\n @State() isModal = false;\n @State() isToast = false;\n @State() isShowing = false;\n @State() label: string;\n\n @Element() host: HTMLNanoAlertElement;\n\n /** Indicates whether or not the alert 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 /** Set to true to make the alert closable. */\n @Prop({ reflect: true }) closable = false;\n\n /** The color to use from the application's color palette. */\n @Prop({ reflect: true }) color?: Color;\n\n /**\n * The length of time, in milliseconds, the alert will show before closing itself. If the user interacts with the\n * alert before it closes (e.g. moves the mouse over it), the timer will restart.\n */\n @Prop() duration = Infinity;\n\n @Watch('duration')\n handleDurationChange() {\n this.restartAutoHide();\n }\n\n /** Emitted when the alert opens. Calling `event.preventDefault()` will prevent it from being opened. */\n @Event() nanoShow: EventEmitter;\n\n /** Emitted after the alert opens and all transitions are complete. */\n @Event() nanoAfterShow: EventEmitter;\n\n /** Emitted when the alert closes. Calling `event.preventDefault()` will prevent it from being closed. */\n @Event() nanoHide: EventEmitter;\n\n /** Emitted after the alert closes and all transitions are complete. */\n @Event() nanoAfterHide: EventEmitter;\n\n /** Shows the alert. */\n @Method()\n async show() {\n if (this.goingToShow) {\n return;\n }\n const nanoShow = this.nanoShow.emit();\n if (nanoShow.defaultPrevented) {\n this.open = false;\n return false;\n }\n\n this.host.hidden = false;\n this.goingToShow = true;\n this.open = true;\n raf(() => {\n this.isShowing = true;\n this.goingToShow = false;\n });\n\n if (this.duration < Infinity) {\n clearTimeout(this.autoHideTimeout);\n this.autoHideTimeout = setTimeout(() => this.hide(), this.duration);\n }\n }\n\n /** Hides the alert */\n @Method()\n async hide() {\n if (this.goingToHide) {\n return;\n }\n const nanoHide = this.nanoHide.emit();\n\n if (nanoHide.defaultPrevented) {\n this.open = true;\n return false;\n }\n this.goingToHide = true;\n this.open = false;\n\n raf(() => (this.goingToHide = false));\n clearTimeout(this.autoHideTimeout);\n }\n\n /**\n * Displays the alert as a toast notification. This will move the alert out of its position in the DOM and, when\n * dismissed, it will be removed from the DOM completely. By storing a reference to the alert, you can reuse it by\n * calling this method again. The returned promise will resolve after the alert is hidden.\n *\n * @param position options are tr (top-right - default), tl (top-left), br (bottom-right), bl (bottom-left)\n * @returns a promise which will resolve after the alert has hidden\n */\n @Method()\n async toast(position: 'tr' | 'tl' | 'bl' | 'br' = 'tr') {\n this.isToast = true;\n return new Promise<void>((resolve) => {\n let toastStack: HTMLElement;\n switch (position) {\n case 'tl':\n toastStack = toastStackTl;\n break;\n case 'bl':\n toastStack = toastStackBl;\n break;\n case 'br':\n toastStack = toastStackBr;\n break;\n default:\n toastStack = toastStackTr;\n break;\n }\n\n if (!toastStack.parentElement) {\n document.body.appendChild(toastStack);\n }\n\n toastStack.appendChild(this.host);\n this.connectedCallback();\n this.show();\n\n this.host.addEventListener(\n 'nanoAfterHide',\n () => {\n this.host.remove();\n this.isToast = false;\n resolve();\n\n // Remove the toast stack from the DOM when there are no more alerts\n if (!toastStack.querySelector('nano-alert')) {\n toastStack.remove();\n }\n },\n { once: true }\n );\n });\n }\n\n /**\n * Displays the alert as a dialog / modal - more akin to a traditional js alert().\n * @param label a label for assistive technology\n */\n @Method()\n async alert(label: string) {\n this.isModal = true;\n this.label = label;\n\n return new Promise<void>((resolve) => {\n if (!document.body.contains(this.host)) {\n document.body.appendChild(this.host);\n }\n\n this.modal.activate();\n lockBodyScrolling(this.host);\n this.originalTrigger = document.activeElement as HTMLElement;\n\n raf(() => {\n this.show();\n });\n\n this.host.addEventListener(\n 'nanoAfterShow',\n () => {\n raf(() => this.panel.focus({ preventScroll: true }));\n },\n { once: true }\n );\n\n this.host.addEventListener(\n 'nanoAfterHide',\n () => {\n this.modal.deactivate();\n this.host.remove();\n this.label = undefined;\n this.isModal = false;\n resolve();\n\n // Restore focus to the original trigger\n if (\n this.originalTrigger &&\n typeof this.originalTrigger.focus === 'function'\n ) {\n setTimeout(() => this.originalTrigger.focus());\n }\n },\n { once: true }\n );\n });\n }\n\n private handleMouseMove = () => {\n this.restartAutoHide();\n };\n\n private handleCloseClick = () => {\n this.hide();\n };\n\n private handleTransitionEnd = (event: TransitionEvent) => {\n if (\n event.propertyName === 'opacity' &&\n (event.target === this.panel || event.target === this.overlay)\n ) {\n this.host.hidden = !this.open;\n this.isShowing = this.open;\n this.open ? this.nanoAfterShow.emit() : this.nanoAfterHide.emit();\n }\n };\n\n private handleButtonClick = (event: Event) => {\n const target = event.target as HTMLElement;\n if (event.defaultPrevented) return;\n if (target.tagName && target.tagName.toLowerCase() === 'button')\n this.hide();\n };\n\n private restartAutoHide = () => {\n clearTimeout(this.autoHideTimeout);\n if (this.open && this.duration < Infinity) {\n this.autoHideTimeout = setTimeout(() => this.hide(), this.duration);\n }\n };\n\n connectedCallback() {\n this.modal = new Modal(this.host);\n this.host.addEventListener('click', this.handleButtonClick);\n\n if (this.panel) {\n this.addedTransEnd = true;\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\n }\n\n disconnectedCallback() {\n unlockBodyScrolling(this.host);\n this.host.removeEventListener('click', this.handleButtonClick);\n\n this.addedTransEnd = false;\n this.panel.removeEventListener('transitionend', this.handleTransitionEnd);\n }\n\n componentDidLoad() {\n // Show on init if open\n if (this.open) {\n this.show();\n }\n if (!this.addedTransEnd) {\n this.panel.addEventListener('transitionend', this.handleTransitionEnd);\n }\n }\n\n private Panel = (): VNode => {\n return (\n <div\n ref={(el) => (this.panel = el)}\n part=\"panel\"\n class={{\n alert: true,\n 'alert--open': this.open,\n 'alert--toasty': this.isToast,\n 'alert--modal': !!this.isModal,\n 'alert--showing': this.isShowing,\n }}\n role={!!this.isModal ? 'alertdialog' : 'alert'}\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n aria-hidden={this.open ? 'false' : 'true'}\n aria-modal={!!this.isModal ? 'true' : undefined}\n aria-label={this.label ? this.label : undefined}\n onMouseMove={this.handleMouseMove}\n tabIndex={!!this.isModal ? 0 : undefined}\n >\n <div class=\"alert__content\">\n <div part=\"icon\" class=\"alert__icon\">\n <slot name=\"icon\" />\n </div>\n <div part=\"message\" class=\"alert__message\">\n <slot />\n </div>\n {this.closable && (\n <div class=\"alert__close\">\n <nano-icon-button\n class=\"alert__close\"\n iconName=\"light/times\"\n label=\"close menu\"\n onClick={this.handleCloseClick}\n ></nano-icon-button>\n </div>\n )}\n </div>\n <div class=\"alert__footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n );\n };\n\n render() {\n return (\n <Host\n class={{ ...createColorClasses(this.color) }}\n showing={this.isShowing}\n >\n {this.isModal && [\n <div\n part=\"overlay\"\n class={{\n alert__overlay: true,\n 'alert__overlay--open': this.open,\n }}\n ref={(div) => (this.overlay = div)}\n />,\n <div class=\"alert__modal-wrap\">\n <this.Panel />\n </div>,\n ]}\n {!this.isModal && <this.Panel />}\n </Host>\n );\n }\n}\n"]}