@nanoporetech-digital/components 4.9.3 → 4.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/cjs/drag-777bd8dd.js +74 -0
  3. package/dist/cjs/drag-777bd8dd.js.map +1 -0
  4. package/dist/cjs/index-71f899a7.js +4 -0
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/nano-components.cjs.js +1 -1
  7. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +4 -4
  8. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
  9. package/dist/cjs/nano-global-nav.cjs.entry.js +2 -3
  10. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  11. package/dist/cjs/nano-icon-button_2.cjs.entry.js +40 -3
  12. package/dist/cjs/nano-icon-button_2.cjs.entry.js.map +1 -1
  13. package/dist/cjs/nano-sortable.cjs.entry.js +653 -0
  14. package/dist/cjs/nano-sortable.cjs.entry.js.map +1 -0
  15. package/dist/cjs/nano-split-pane.cjs.entry.js +30 -45
  16. package/dist/cjs/nano-split-pane.cjs.entry.js.map +1 -1
  17. package/dist/cjs/nano-tab-group.cjs.entry.js +39 -43
  18. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  19. package/dist/cjs/nano-tab.cjs.entry.js +3 -3
  20. package/dist/cjs/nano-tab.cjs.entry.js.map +1 -1
  21. package/dist/cjs/{nano-table-0bac0552.js → nano-table-ff33dc43.js} +20 -147
  22. package/dist/cjs/nano-table-ff33dc43.js.map +1 -0
  23. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  24. package/dist/cjs/{table.worker-13b5bc18.js → table.worker-0a6bc962.js} +3 -3
  25. package/dist/cjs/table.worker-0a6bc962.js.map +1 -0
  26. package/dist/cjs/{table.worker-f820b411.js → table.worker-bd51e29f.js} +1 -1
  27. package/dist/collection/collection-manifest.json +1 -0
  28. package/dist/collection/components/global-nav/global-nav.js +2 -3
  29. package/dist/collection/components/global-nav/global-nav.js.map +1 -1
  30. package/dist/collection/components/icon-button/icon-button.css +6 -4
  31. package/dist/collection/components/icon-button/icon-button.js +83 -4
  32. package/dist/collection/components/icon-button/icon-button.js.map +1 -1
  33. package/dist/collection/components/nav-item/nav-item.js +4 -4
  34. package/dist/collection/components/nav-item/nav-item.js.map +1 -1
  35. package/dist/collection/components/sortable/sortable.css +28 -0
  36. package/dist/collection/components/sortable/sortable.js +1180 -0
  37. package/dist/collection/components/sortable/sortable.js.map +1 -0
  38. package/dist/collection/components/split-pane/split-pane.js +29 -27
  39. package/dist/collection/components/split-pane/split-pane.js.map +1 -1
  40. package/dist/collection/components/table/table-interface.js.map +1 -1
  41. package/dist/collection/components/table/table.css +12 -38
  42. package/dist/collection/components/table/table.header.js +3 -86
  43. package/dist/collection/components/table/table.header.js.map +1 -1
  44. package/dist/collection/components/table/table.js +4 -92
  45. package/dist/collection/components/table/table.js.map +1 -1
  46. package/dist/collection/components/table/table.store.js +1 -1
  47. package/dist/collection/components/table/table.store.js.map +1 -1
  48. package/dist/collection/components/table/table.worker.js +3 -3
  49. package/dist/collection/components/table/table.worker.js.map +1 -1
  50. package/dist/collection/components/tabs/tab-group.css +9 -13
  51. package/dist/collection/components/tabs/tab-group.js +39 -43
  52. package/dist/collection/components/tabs/tab-group.js.map +1 -1
  53. package/dist/collection/components/tabs/tab.css +53 -14
  54. package/dist/collection/components/tabs/tab.js +8 -2
  55. package/dist/collection/components/tabs/tab.js.map +1 -1
  56. package/dist/collection/utils/drag.js +52 -4
  57. package/dist/collection/utils/drag.js.map +1 -1
  58. package/dist/components/drag.js +72 -0
  59. package/dist/components/drag.js.map +1 -0
  60. package/dist/components/icon-button.js +45 -5
  61. package/dist/components/icon-button.js.map +1 -1
  62. package/dist/components/index.d.ts +1 -0
  63. package/dist/components/index.js +1 -0
  64. package/dist/components/index.js.map +1 -1
  65. package/dist/components/nano-global-nav.js +2 -3
  66. package/dist/components/nano-global-nav.js.map +1 -1
  67. package/dist/components/nano-sortable.d.ts +11 -0
  68. package/dist/components/nano-sortable.js +691 -0
  69. package/dist/components/nano-sortable.js.map +1 -0
  70. package/dist/components/nano-split-pane.js +30 -45
  71. package/dist/components/nano-split-pane.js.map +1 -1
  72. package/dist/components/nano-tab-group.js +40 -44
  73. package/dist/components/nano-tab-group.js.map +1 -1
  74. package/dist/components/nano-tab.js +3 -3
  75. package/dist/components/nano-tab.js.map +1 -1
  76. package/dist/components/nav-item.js +4 -4
  77. package/dist/components/nav-item.js.map +1 -1
  78. package/dist/components/table.js +19 -147
  79. package/dist/components/table.js.map +1 -1
  80. package/dist/components/table.worker.js +1 -1
  81. package/dist/esm/drag-1723a4cc.js +72 -0
  82. package/dist/esm/drag-1723a4cc.js.map +1 -0
  83. package/dist/esm/index-dad5627b.js +4 -0
  84. package/dist/esm/loader.js +1 -1
  85. package/dist/esm/nano-components.js +1 -1
  86. package/dist/esm/nano-global-nav-user-profile_3.entry.js +4 -4
  87. package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
  88. package/dist/esm/nano-global-nav.entry.js +2 -3
  89. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  90. package/dist/esm/nano-icon-button_2.entry.js +41 -4
  91. package/dist/esm/nano-icon-button_2.entry.js.map +1 -1
  92. package/dist/esm/nano-sortable.entry.js +649 -0
  93. package/dist/esm/nano-sortable.entry.js.map +1 -0
  94. package/dist/esm/nano-split-pane.entry.js +30 -45
  95. package/dist/esm/nano-split-pane.entry.js.map +1 -1
  96. package/dist/esm/nano-tab-group.entry.js +39 -43
  97. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  98. package/dist/esm/nano-tab.entry.js +3 -3
  99. package/dist/esm/nano-tab.entry.js.map +1 -1
  100. package/dist/esm/{nano-table-ece658c4.js → nano-table-ec980076.js} +21 -148
  101. package/dist/esm/nano-table-ec980076.js.map +1 -0
  102. package/dist/esm/nano-table.entry.js +1 -1
  103. package/dist/esm/{table.worker-e89525d3.js → table.worker-b53db58e.js} +3 -3
  104. package/dist/esm/table.worker-b53db58e.js.map +1 -0
  105. package/dist/esm/{table.worker-f820b411.js → table.worker-bd51e29f.js} +1 -1
  106. package/dist/nano-components/nano-components.css +1 -1
  107. package/dist/nano-components/nano-components.esm.js +1 -1
  108. package/dist/nano-components/nano-components.esm.js.map +1 -1
  109. package/dist/nano-components/p-064af7d0.js +5 -0
  110. package/dist/nano-components/p-064af7d0.js.map +1 -0
  111. package/dist/nano-components/p-241baff8.entry.js +5 -0
  112. package/dist/nano-components/p-241baff8.entry.js.map +1 -0
  113. package/dist/nano-components/p-58b53239.entry.js.map +1 -1
  114. package/dist/nano-components/{p-bd2d0c58.js → p-806bcd46.js} +2 -2
  115. package/dist/nano-components/p-842cf127.js +5 -0
  116. package/dist/nano-components/p-842cf127.js.map +1 -0
  117. package/dist/nano-components/{p-272b2f59.entry.js → p-ace1ffc2.entry.js} +2 -2
  118. package/dist/nano-components/p-ace1ffc2.entry.js.map +1 -0
  119. package/dist/nano-components/p-b8e76fdf.entry.js +5 -0
  120. package/dist/nano-components/p-b8e76fdf.entry.js.map +1 -0
  121. package/dist/nano-components/{p-f820b411.js → p-bd51e29f.js} +1 -1
  122. package/dist/nano-components/p-d3de231c.entry.js +5 -0
  123. package/dist/nano-components/p-d3de231c.entry.js.map +1 -0
  124. package/dist/nano-components/{p-27d5d32b.entry.js → p-f591400b.entry.js} +2 -2
  125. package/dist/nano-components/p-f60fe933.entry.js +5 -0
  126. package/dist/nano-components/p-f60fe933.entry.js.map +1 -0
  127. package/dist/nano-components/p-f7535f45.entry.js +5 -0
  128. package/dist/nano-components/p-f7535f45.entry.js.map +1 -0
  129. package/dist/types/components/icon-button/icon-button.d.ts +14 -0
  130. package/dist/types/components/sortable/sortable.d.ts +204 -0
  131. package/dist/types/components/table/table-interface.d.ts +2 -4
  132. package/dist/types/components/table/table.d.ts +0 -30
  133. package/dist/types/components/table/table.header.d.ts +0 -3
  134. package/dist/types/components/tabs/tab-group.d.ts +0 -1
  135. package/dist/types/components/tabs/tab.d.ts +6 -0
  136. package/dist/types/components.d.ts +248 -28
  137. package/dist/types/utils/drag.d.ts +21 -1
  138. package/docs-json.json +562 -46
  139. package/docs-vscode.json +74 -5
  140. package/hydrate/index.js +877 -254
  141. package/package.json +2 -2
  142. package/dist/cjs/nano-table-0bac0552.js.map +0 -1
  143. package/dist/cjs/table.worker-13b5bc18.js.map +0 -1
  144. package/dist/esm/nano-table-ece658c4.js.map +0 -1
  145. package/dist/esm/table.worker-e89525d3.js.map +0 -1
  146. package/dist/nano-components/p-068bdd89.entry.js +0 -5
  147. package/dist/nano-components/p-068bdd89.entry.js.map +0 -1
  148. package/dist/nano-components/p-11025069.js +0 -5
  149. package/dist/nano-components/p-11025069.js.map +0 -1
  150. package/dist/nano-components/p-272b2f59.entry.js.map +0 -1
  151. package/dist/nano-components/p-64b56ee6.entry.js +0 -5
  152. package/dist/nano-components/p-64b56ee6.entry.js.map +0 -1
  153. package/dist/nano-components/p-a5a560e7.entry.js +0 -5
  154. package/dist/nano-components/p-a5a560e7.entry.js.map +0 -1
  155. package/dist/nano-components/p-a761ac89.entry.js +0 -5
  156. package/dist/nano-components/p-a761ac89.entry.js.map +0 -1
  157. /package/dist/nano-components/{p-27d5d32b.entry.js.map → p-806bcd46.js.map} +0 -0
  158. /package/dist/nano-components/{p-bd2d0c58.js.map → p-f591400b.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"tab.js","sourceRoot":"","sources":["../../../src/components/tabs/tab.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,IAAI,EAEJ,MAAM,EACN,IAAI,EACJ,CAAC,EACD,KAAK,GAEN,MAAM,eAAe,CAAC;AAEvB,IAAI,EAAE,GAAG,CAAC,CAAC;AAEX;;GAEG;AAOH,MAAM,OAAO,GAAG;;IACN,UAAK,GAAG,YAAY,EAAE,EAAE,EAAE,CAAC;IAgC3B,qBAAgB,GAAG,GAAG,EAAE;MAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC,CAAC;IAEM,uBAAkB,GAAG,CAAC,CAAgB,EAAE,EAAE;MAChD,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG;QAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC7C,CAAC,CAAC;iBAhC+B,EAAE;kBAGD,KAAK;oBAGH,KAAK;oBAGtB,KAAK;;EAKxB,6BAA6B;EAE7B,KAAK,CAAC,QAAQ;IACZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;EAC1C,CAAC;EAED,kCAAkC;EAElC,KAAK,CAAC,WAAW;IACf,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;EAClB,CAAC;EAUD,MAAM;IACJ,OAAO,CACL,EAAC,IAAI,IAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK;MAClC,WACE,IAAI,EAAC,MAAM,EACX,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,EAC5B,KAAK,EAAE;UACL,OAAO,EAAE,IAAI;UACb,iBAAiB,EAAE,IAAI,CAAC,MAAM;UAC9B,mBAAmB,EAAE,IAAI,CAAC,QAAQ;UAClC,mBAAmB,EAAE,IAAI,CAAC,QAAQ;SACnC,EACD,IAAI,EAAC,KAAK,mBACK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,mBAChC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAC7C,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG;QAEpD,eAAQ;QACP,IAAI,CAAC,QAAQ,IAAI,CAChB,wBACE,KAAK,EAAC,gBAAgB,EACtB,QAAQ,EAAC,aAAa,EACtB,KAAK,EAAC,uBAAuB,EAC7B,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAC9B,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAClC,QAAQ,EAAE,CAAC,CAAC,GACZ,CACH,CACG,CACD,CACR,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n Element,\n Host,\n ComponentInterface,\n Method,\n Prop,\n h,\n Event,\n EventEmitter,\n} from '@stencil/core';\n\nlet id = 0;\n\n/**\n * @slot - The tab's label.\n */\n\n@Component({\n tag: 'nano-tab',\n styleUrl: 'tab.scss',\n shadow: true,\n})\nexport class Tab implements ComponentInterface {\n private tabId = `nano-tab-${++id}`;\n private tab: HTMLElement;\n\n @Element() host: HTMLNanoTabElement;\n\n /** The name of the tab panel the tab will control. The panel must be located in the same tab group. */\n @Prop({ reflect: true }) panel = '';\n\n /** The active, selected tab. If none active, the first will automatically be selected. */\n @Prop({ reflect: true }) active = false;\n\n /** Set to true to draw the tab in an active state. */\n @Prop({ reflect: true }) disabled = false;\n\n /** When true, the tab will be rendered with a close icon. */\n @Prop() closable = false;\n\n /** Emitted when the tab is closable and the close button is activated. */\n @Event() nanoTabClose: EventEmitter;\n\n /** Sets focus to the tab. */\n @Method()\n async setFocus() {\n this.tab.focus({ preventScroll: true });\n }\n\n /** Removes focus from the tab. */\n @Method()\n async removeFocus() {\n this.tab.blur();\n }\n\n private handleCloseClick = () => {\n this.nanoTabClose.emit();\n };\n\n private handleCloseKeydown = (e: KeyboardEvent) => {\n if (e.key === ' ') this.handleCloseClick();\n };\n\n render() {\n return (\n <Host id={this.host.id || this.tabId}>\n <div\n part=\"base\"\n ref={(el) => (this.tab = el)}\n class={{\n nanotab: true,\n 'nanotab--active': this.active,\n 'nanotab--disabled': this.disabled,\n 'nanotab--closable': this.closable,\n }}\n role=\"tab\"\n aria-disabled={this.disabled ? 'true' : 'false'}\n aria-selected={this.active ? 'true' : 'false'}\n tabindex={this.disabled || !this.active ? '-1' : '0'}\n >\n <slot />\n {this.closable && (\n <nano-icon-button\n label=\"Close this tab\"\n iconName=\"light/times\"\n class=\"nanotab__close-button\"\n onClick={this.handleCloseClick}\n onKeyDown={this.handleCloseKeydown}\n tabIndex={-1}\n />\n )}\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"tab.js","sourceRoot":"","sources":["../../../src/components/tabs/tab.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,IAAI,EAEJ,MAAM,EACN,IAAI,EACJ,CAAC,EACD,KAAK,GAEN,MAAM,eAAe,CAAC;AAEvB,IAAI,EAAE,GAAG,CAAC,CAAC;AAEX;;;;;;;;GAQG;AAOH,MAAM,OAAO,GAAG;;IACN,UAAK,GAAG,YAAY,EAAE,EAAE,EAAE,CAAC;IAgC3B,qBAAgB,GAAG,GAAG,EAAE;MAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC,CAAC;IAEM,uBAAkB,GAAG,CAAC,CAAgB,EAAE,EAAE;MAChD,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG;QAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC7C,CAAC,CAAC;iBAhC+B,EAAE;kBAGD,KAAK;oBAGH,KAAK;oBAGtB,KAAK;;EAKxB,6BAA6B;EAE7B,KAAK,CAAC,QAAQ;IACZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;EAC1C,CAAC;EAED,kCAAkC;EAElC,KAAK,CAAC,WAAW;IACf,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;EAClB,CAAC;EAUD,MAAM;IACJ,OAAO,CACL,EAAC,IAAI,IAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK;MAClC,WACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE;UACL,OAAO,EAAE,IAAI;UACb,iBAAiB,EAAE,IAAI,CAAC,MAAM;UAC9B,mBAAmB,EAAE,IAAI,CAAC,QAAQ;UAClC,mBAAmB,EAAE,IAAI,CAAC,QAAQ;SACnC;QAED,YAAM,IAAI,EAAC,OAAO,GAAG;QACrB,WACE,IAAI,EAAC,KAAK,EACV,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,EAC5B,IAAI,EAAC,KAAK,mBACK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,mBAChC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAC7C,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EACpD,KAAK,EAAC,cAAc;UAEpB,eAAQ,CACJ;QACL,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAClC,wBACE,KAAK,EAAC,gBAAgB,EACtB,QAAQ,EAAC,aAAa,EACtB,KAAK,EAAC,uBAAuB,EAC7B,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAC9B,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAClC,IAAI,EAAC,WAAW,GAChB,CACH;QACD,YAAM,IAAI,EAAC,KAAK,GAAG,CACf,CACD,CACR,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n Element,\n Host,\n ComponentInterface,\n Method,\n Prop,\n h,\n Event,\n EventEmitter,\n} from '@stencil/core';\n\nlet id = 0;\n\n/**\n * @slot start - start of the tab, content. Outside of the focusable element\n * @slot end - end of the tab, content. Outside of the focusable element\n * @slot - The tab's label.\n *\n * @part base - the wrapper around the whole control\n * @part tab - the main tab control that controls the active state\n * @part close-btn - the close button of the tab (if `closable=true`)\n */\n\n@Component({\n tag: 'nano-tab',\n styleUrl: 'tab.scss',\n shadow: true,\n})\nexport class Tab implements ComponentInterface {\n private tabId = `nano-tab-${++id}`;\n private tab: HTMLElement;\n\n @Element() host: HTMLNanoTabElement;\n\n /** The name of the tab panel the tab will control. The panel must be located in the same tab group. */\n @Prop({ reflect: true }) panel = '';\n\n /** The active, selected tab. If none active, the first will automatically be selected. */\n @Prop({ reflect: true }) active = false;\n\n /** Set to true to draw the tab in an active state. */\n @Prop({ reflect: true }) disabled = false;\n\n /** When true, the tab will be rendered with a close icon. */\n @Prop() closable = false;\n\n /** Emitted when the tab is closable and the close button is activated. */\n @Event() nanoTabClose: EventEmitter;\n\n /** Sets focus to the tab. */\n @Method()\n async setFocus() {\n this.tab.focus({ preventScroll: true });\n }\n\n /** Removes focus from the tab. */\n @Method()\n async removeFocus() {\n this.tab.blur();\n }\n\n private handleCloseClick = () => {\n this.nanoTabClose.emit();\n };\n\n private handleCloseKeydown = (e: KeyboardEvent) => {\n if (e.key === ' ') this.handleCloseClick();\n };\n\n render() {\n return (\n <Host id={this.host.id || this.tabId}>\n <div\n part=\"base\"\n class={{\n nanotab: true,\n 'nanotab--active': this.active,\n 'nanotab--disabled': this.disabled,\n 'nanotab--closable': this.closable,\n }}\n >\n <slot name=\"start\" />\n <div\n part=\"tab\"\n ref={(el) => (this.tab = el)}\n role=\"tab\"\n aria-disabled={this.disabled ? 'true' : 'false'}\n aria-selected={this.active ? 'true' : 'false'}\n tabindex={this.disabled || !this.active ? '-1' : '0'}\n class=\"nanotab__tab\"\n >\n <slot />\n </div>\n {this.closable && !this.disabled && (\n <nano-icon-button\n label=\"Close this tab\"\n iconName=\"light/times\"\n class=\"nanotab__close-button\"\n onClick={this.handleCloseClick}\n onKeyDown={this.handleCloseKeydown}\n part=\"close-btn\"\n />\n )}\n <slot name=\"end\" />\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -1,21 +1,69 @@
1
1
  /*!
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
- export function drag(container, onMove) {
4
+ /** Begins listening for dragging. */
5
+ export function drag(container, options) {
6
+ const initialOffsets = {
7
+ pageX: 0,
8
+ pageY: 0,
9
+ offsetX: 0,
10
+ offsetY: 0,
11
+ };
5
12
  function move(pointerEvent) {
6
13
  const dims = container.getBoundingClientRect();
7
14
  const defaultView = container.ownerDocument.defaultView;
8
15
  const offsetX = dims.left + defaultView.pageXOffset;
9
16
  const offsetY = dims.top + defaultView.pageYOffset;
10
- const x = pointerEvent.pageX - offsetX;
11
- const y = pointerEvent.pageY - offsetY;
12
- onMove(x, y);
17
+ let x = 0;
18
+ let y = 0;
19
+ if (options.relative) {
20
+ x =
21
+ pointerEvent.pageX -
22
+ initialOffsets.pageX -
23
+ (offsetX - initialOffsets.offsetX);
24
+ y =
25
+ pointerEvent.pageY -
26
+ initialOffsets.pageY -
27
+ (offsetY - initialOffsets.offsetY);
28
+ }
29
+ else {
30
+ x = pointerEvent.pageX - offsetX;
31
+ y = pointerEvent.pageY - offsetY;
32
+ }
33
+ if (options === null || options === void 0 ? void 0 : options.onMove) {
34
+ options.onMove(x, y);
35
+ }
13
36
  }
14
37
  function stop() {
15
38
  document.removeEventListener('pointermove', move);
16
39
  document.removeEventListener('pointerup', stop);
40
+ if (options === null || options === void 0 ? void 0 : options.onStop) {
41
+ options.onStop();
42
+ }
17
43
  }
18
44
  document.addEventListener('pointermove', move, { passive: true });
19
45
  document.addEventListener('pointerup', stop);
46
+ if (!!!(options === null || options === void 0 ? void 0 : options.initialEvent))
47
+ return;
48
+ let initialEvent;
49
+ if (options === null || options === void 0 ? void 0 : options.initialEvent['touches']) {
50
+ initialEvent = {
51
+ pageX: (options === null || options === void 0 ? void 0 : options.initialEvent).touches[0].pageX,
52
+ pageY: (options === null || options === void 0 ? void 0 : options.initialEvent).touches[0].pageY,
53
+ };
54
+ }
55
+ else {
56
+ initialEvent = {
57
+ pageX: (options === null || options === void 0 ? void 0 : options.initialEvent).pageX,
58
+ pageY: (options === null || options === void 0 ? void 0 : options.initialEvent).pageY,
59
+ };
60
+ }
61
+ const defaultView = container.ownerDocument.defaultView;
62
+ const dims = container.getBoundingClientRect();
63
+ initialOffsets.pageX = initialEvent.pageX;
64
+ initialOffsets.pageY = initialEvent.pageY;
65
+ initialOffsets.offsetX = dims.left + defaultView.pageXOffset;
66
+ initialOffsets.offsetY = dims.top + defaultView.pageYOffset;
67
+ // move(initialEvent);
20
68
  }
21
69
  //# sourceMappingURL=drag.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"drag.js","sourceRoot":"","sources":["../../src/utils/drag.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,IAAI,CAClB,SAAsB,EACtB,MAAsC;EAEtC,SAAS,IAAI,CAAC,YAA0B;IACtC,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;IAC/C,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,WAAY,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC;IACnD,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC;IACvC,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC;IAEvC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACf,CAAC;EAED,SAAS,IAAI;IACX,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAClD,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;EAClD,CAAC;EAED,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;EAClE,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC","sourcesContent":["export function drag(\n container: HTMLElement,\n onMove: (x: number, y: number) => void\n) {\n function move(pointerEvent: PointerEvent) {\n const dims = container.getBoundingClientRect();\n const defaultView = container.ownerDocument.defaultView!;\n const offsetX = dims.left + defaultView.pageXOffset;\n const offsetY = dims.top + defaultView.pageYOffset;\n const x = pointerEvent.pageX - offsetX;\n const y = pointerEvent.pageY - offsetY;\n\n onMove(x, y);\n }\n\n function stop() {\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', stop);\n }\n\n document.addEventListener('pointermove', move, { passive: true });\n document.addEventListener('pointerup', stop);\n}\n"]}
1
+ {"version":3,"file":"drag.js","sourceRoot":"","sources":["../../src/utils/drag.ts"],"names":[],"mappings":"AA0BA,qCAAqC;AACrC,MAAM,UAAU,IAAI,CAAC,SAAsB,EAAE,OAA8B;EACzE,MAAM,cAAc,GAAmB;IACrC,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;GACX,CAAC;EAEF,SAAS,IAAI,CAAC,YAA8C;IAC1D,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;IAC/C,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,WAAY,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC;IACnD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,IAAI,OAAO,CAAC,QAAQ,EAAE;MACpB,CAAC;QACC,YAAY,CAAC,KAAK;UAClB,cAAc,CAAC,KAAK;UACpB,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;MACrC,CAAC;QACC,YAAY,CAAC,KAAK;UAClB,cAAc,CAAC,KAAK;UACpB,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;KACtC;SAAM;MACL,CAAC,GAAG,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC;MACjC,CAAC,GAAG,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC;KAClC;IAED,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE;MACnB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACtB;EACH,CAAC;EAED,SAAS,IAAI;IACX,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAClD,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAEhD,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE;MACnB,OAAO,CAAC,MAAM,EAAE,CAAC;KAClB;EACH,CAAC;EAED,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;EAClE,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;EAE7C,IAAI,CAAC,CAAC,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAA;IAAE,OAAO;EAErC,IAAI,YAA8C,CAAC;EAEnD,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC,SAAS,CAAC,EAAE;IACpC,YAAY,GAAG;MACb,KAAK,EAAE,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAA2B,CAAA,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;MAC7D,KAAK,EAAE,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAA2B,CAAA,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;KAC9D,CAAC;GACH;OAAM;IACL,YAAY,GAAG;MACb,KAAK,EAAE,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAA2B,CAAA,CAAC,KAAK;MAClD,KAAK,EAAE,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAA2B,CAAA,CAAC,KAAK;KACnD,CAAC;GACH;EAED,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,WAAY,CAAC;EACzD,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;EAE/C,cAAc,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;EAC1C,cAAc,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;EAC1C,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC;EAC7D,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC;EAE5D,sBAAsB;AACxB,CAAC","sourcesContent":["interface DragOptions {\n /** Callback that runs as dragging occurs. */\n onMove: (x: number, y: number) => void;\n /** Callback that runs when dragging stops. */\n onStop: () => void;\n /**\n * When an initial event is passed, the first drag will be triggered immediately using the coordinates therein. This\n * is useful when the drag is initiated by a mousedown/touchstart event but you want the initial \"click\" to activate\n * a drag (e.g. positioning a handle initially at the click target).\n */\n initialEvent: TouchEvent | PointerEvent | MouseEvent;\n /**\n * Used in conjunction with `options.initialEvent`\n * Subtracts the initial pointer co-ordinates from the move co-ordinates.\n * This is useful for tracking how far an element has been dragged\n */\n relative?: boolean;\n}\n\ninterface InitialOffsets {\n pageX: number;\n pageY: number;\n offsetX: number;\n offsetY: number;\n}\n\n/** Begins listening for dragging. */\nexport function drag(container: HTMLElement, options?: Partial<DragOptions>) {\n const initialOffsets: InitialOffsets = {\n pageX: 0,\n pageY: 0,\n offsetX: 0,\n offsetY: 0,\n };\n\n function move(pointerEvent: { pageX: number; pageY: number }) {\n const dims = container.getBoundingClientRect();\n const defaultView = container.ownerDocument.defaultView!;\n const offsetX = dims.left + defaultView.pageXOffset;\n const offsetY = dims.top + defaultView.pageYOffset;\n let x = 0;\n let y = 0;\n\n if (options.relative) {\n x =\n pointerEvent.pageX -\n initialOffsets.pageX -\n (offsetX - initialOffsets.offsetX);\n y =\n pointerEvent.pageY -\n initialOffsets.pageY -\n (offsetY - initialOffsets.offsetY);\n } else {\n x = pointerEvent.pageX - offsetX;\n y = pointerEvent.pageY - offsetY;\n }\n\n if (options?.onMove) {\n options.onMove(x, y);\n }\n }\n\n function stop() {\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', stop);\n\n if (options?.onStop) {\n options.onStop();\n }\n }\n\n document.addEventListener('pointermove', move, { passive: true });\n document.addEventListener('pointerup', stop);\n\n if (!!!options?.initialEvent) return;\n\n let initialEvent: { pageX: number; pageY: number };\n\n if (options?.initialEvent['touches']) {\n initialEvent = {\n pageX: (options?.initialEvent as TouchEvent).touches[0].pageX,\n pageY: (options?.initialEvent as TouchEvent).touches[0].pageY,\n };\n } else {\n initialEvent = {\n pageX: (options?.initialEvent as MouseEvent).pageX,\n pageY: (options?.initialEvent as MouseEvent).pageY,\n };\n }\n\n const defaultView = container.ownerDocument.defaultView!;\n const dims = container.getBoundingClientRect();\n\n initialOffsets.pageX = initialEvent.pageX;\n initialOffsets.pageY = initialEvent.pageY;\n initialOffsets.offsetX = dims.left + defaultView.pageXOffset;\n initialOffsets.offsetY = dims.top + defaultView.pageYOffset;\n\n // move(initialEvent);\n}\n"]}
@@ -0,0 +1,72 @@
1
+ /*!
2
+ * Web Components for Nanopore digital Web Apps
3
+ */
4
+ /** Begins listening for dragging. */
5
+ function drag(container, options) {
6
+ const initialOffsets = {
7
+ pageX: 0,
8
+ pageY: 0,
9
+ offsetX: 0,
10
+ offsetY: 0,
11
+ };
12
+ function move(pointerEvent) {
13
+ const dims = container.getBoundingClientRect();
14
+ const defaultView = container.ownerDocument.defaultView;
15
+ const offsetX = dims.left + defaultView.pageXOffset;
16
+ const offsetY = dims.top + defaultView.pageYOffset;
17
+ let x = 0;
18
+ let y = 0;
19
+ if (options.relative) {
20
+ x =
21
+ pointerEvent.pageX -
22
+ initialOffsets.pageX -
23
+ (offsetX - initialOffsets.offsetX);
24
+ y =
25
+ pointerEvent.pageY -
26
+ initialOffsets.pageY -
27
+ (offsetY - initialOffsets.offsetY);
28
+ }
29
+ else {
30
+ x = pointerEvent.pageX - offsetX;
31
+ y = pointerEvent.pageY - offsetY;
32
+ }
33
+ if (options === null || options === void 0 ? void 0 : options.onMove) {
34
+ options.onMove(x, y);
35
+ }
36
+ }
37
+ function stop() {
38
+ document.removeEventListener('pointermove', move);
39
+ document.removeEventListener('pointerup', stop);
40
+ if (options === null || options === void 0 ? void 0 : options.onStop) {
41
+ options.onStop();
42
+ }
43
+ }
44
+ document.addEventListener('pointermove', move, { passive: true });
45
+ document.addEventListener('pointerup', stop);
46
+ if (!!!(options === null || options === void 0 ? void 0 : options.initialEvent))
47
+ return;
48
+ let initialEvent;
49
+ if (options === null || options === void 0 ? void 0 : options.initialEvent['touches']) {
50
+ initialEvent = {
51
+ pageX: (options === null || options === void 0 ? void 0 : options.initialEvent).touches[0].pageX,
52
+ pageY: (options === null || options === void 0 ? void 0 : options.initialEvent).touches[0].pageY,
53
+ };
54
+ }
55
+ else {
56
+ initialEvent = {
57
+ pageX: (options === null || options === void 0 ? void 0 : options.initialEvent).pageX,
58
+ pageY: (options === null || options === void 0 ? void 0 : options.initialEvent).pageY,
59
+ };
60
+ }
61
+ const defaultView = container.ownerDocument.defaultView;
62
+ const dims = container.getBoundingClientRect();
63
+ initialOffsets.pageX = initialEvent.pageX;
64
+ initialOffsets.pageY = initialEvent.pageY;
65
+ initialOffsets.offsetX = dims.left + defaultView.pageXOffset;
66
+ initialOffsets.offsetY = dims.top + defaultView.pageYOffset;
67
+ // move(initialEvent);
68
+ }
69
+
70
+ export { drag as d };
71
+
72
+ //# sourceMappingURL=drag.js.map
@@ -0,0 +1 @@
1
+ {"file":"drag.js","mappings":"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","names":[],"sources":["./src/utils/drag.ts"],"sourcesContent":["interface DragOptions {\n /** Callback that runs as dragging occurs. */\n onMove: (x: number, y: number) => void;\n /** Callback that runs when dragging stops. */\n onStop: () => void;\n /**\n * When an initial event is passed, the first drag will be triggered immediately using the coordinates therein. This\n * is useful when the drag is initiated by a mousedown/touchstart event but you want the initial \"click\" to activate\n * a drag (e.g. positioning a handle initially at the click target).\n */\n initialEvent: TouchEvent | PointerEvent | MouseEvent;\n /**\n * Used in conjunction with `options.initialEvent`\n * Subtracts the initial pointer co-ordinates from the move co-ordinates.\n * This is useful for tracking how far an element has been dragged\n */\n relative?: boolean;\n}\n\ninterface InitialOffsets {\n pageX: number;\n pageY: number;\n offsetX: number;\n offsetY: number;\n}\n\n/** Begins listening for dragging. */\nexport function drag(container: HTMLElement, options?: Partial<DragOptions>) {\n const initialOffsets: InitialOffsets = {\n pageX: 0,\n pageY: 0,\n offsetX: 0,\n offsetY: 0,\n };\n\n function move(pointerEvent: { pageX: number; pageY: number }) {\n const dims = container.getBoundingClientRect();\n const defaultView = container.ownerDocument.defaultView!;\n const offsetX = dims.left + defaultView.pageXOffset;\n const offsetY = dims.top + defaultView.pageYOffset;\n let x = 0;\n let y = 0;\n\n if (options.relative) {\n x =\n pointerEvent.pageX -\n initialOffsets.pageX -\n (offsetX - initialOffsets.offsetX);\n y =\n pointerEvent.pageY -\n initialOffsets.pageY -\n (offsetY - initialOffsets.offsetY);\n } else {\n x = pointerEvent.pageX - offsetX;\n y = pointerEvent.pageY - offsetY;\n }\n\n if (options?.onMove) {\n options.onMove(x, y);\n }\n }\n\n function stop() {\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', stop);\n\n if (options?.onStop) {\n options.onStop();\n }\n }\n\n document.addEventListener('pointermove', move, { passive: true });\n document.addEventListener('pointerup', stop);\n\n if (!!!options?.initialEvent) return;\n\n let initialEvent: { pageX: number; pageY: number };\n\n if (options?.initialEvent['touches']) {\n initialEvent = {\n pageX: (options?.initialEvent as TouchEvent).touches[0].pageX,\n pageY: (options?.initialEvent as TouchEvent).touches[0].pageY,\n };\n } else {\n initialEvent = {\n pageX: (options?.initialEvent as MouseEvent).pageX,\n pageY: (options?.initialEvent as MouseEvent).pageY,\n };\n }\n\n const defaultView = container.ownerDocument.defaultView!;\n const dims = container.getBoundingClientRect();\n\n initialOffsets.pageX = initialEvent.pageX;\n initialOffsets.pageY = initialEvent.pageY;\n initialOffsets.offsetX = dims.left + defaultView.pageXOffset;\n initialOffsets.offsetY = dims.top + defaultView.pageYOffset;\n\n // move(initialEvent);\n}\n"],"version":3}
@@ -1,17 +1,32 @@
1
1
  /*!
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
- import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
4
+ import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
5
5
  import { f as focusVisible } from './focus-visible.js';
6
6
  import { d as defineCustomElement$2 } from './icon.js';
7
7
  import { d as defineCustomElement$1 } from './tooltip.js';
8
8
 
9
- const iconButtonCss = ".sc-nano-icon-button-h{box-sizing:border-box}*.sc-nano-icon-button,*.sc-nano-icon-button::before,*.sc-nano-icon-button::after{box-sizing:border-box}[hidden].sc-nano-icon-button{display:none !important}.sc-nano-icon-button-h{display:inline-block;--border-radius:var(--nano-border-radius-medium, 4px);--active-color:#005c75;--hover-color:#007495;--nano-color-base:var(--color, #687576);--background:transparent;--padding:var(--nano-spacing-small, 8px)}.icon-button.sc-nano-icon-button{flex:0 0 auto;display:flex;align-items:center;border:none;border-radius:var(--border-radius);background:var(--background);font-size:inherit;color:var(--color);padding:var(--padding);cursor:pointer;-webkit-appearance:none;appearance:none;transition:box-shadow var(--nano-transition-fast, 0.1s) ease-in-out}.icon-button.sc-nano-icon-button:hover:not(.icon-button--disabled),.icon-button.sc-nano-icon-button:focus:not(.icon-button--disabled){color:var(--hover-color);--nano-color-base:var(--hover-color)}.icon-button.sc-nano-icon-button:active:not(.icon-button--disabled){color:var(--active-color);--nano-color-base:var(--active-color)}.icon-button.sc-nano-icon-button:focus{outline:none}.icon-button--disabled.sc-nano-icon-button{opacity:0.5;cursor:not-allowed;pointer-events:none}.focus-visible.icon-button.sc-nano-icon-button:focus{box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)))}";
9
+ const iconButtonCss = ":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--border-radius:var(--nano-border-radius-medium, 4px);--active-color:#005c75;--hover-color:#007495;--nano-color-base:var(--color, #687576);--background:transparent;--padding:var(--nano-spacing-small, 8px);--box-shadow:none;border-radius:var(--border-radius);display:inline-block}.icon-button{flex:0 0 auto;display:flex;align-items:center;border:none;border-radius:inherit;background:var(--background);font-size:inherit;color:var(--color);padding:var(--padding);cursor:pointer;-webkit-appearance:none;appearance:none;transition:box-shadow var(--nano-transition-fast, 0.1s) ease-in-out;box-shadow:var(--box-shadow)}.icon-button:hover:not(.icon-button--disabled),.icon-button:focus:not(.icon-button--disabled){color:var(--hover-color);--nano-color-base:var(--hover-color)}.icon-button:active:not(.icon-button--disabled){color:var(--active-color);--nano-color-base:var(--active-color)}.icon-button:focus{outline:none}.icon-button--disabled{opacity:0.5;cursor:not-allowed;pointer-events:none}.focus-visible.icon-button:focus{box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)))}";
10
10
 
11
11
  const IconButton = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
12
12
  constructor() {
13
13
  super();
14
14
  this.__registerHost();
15
+ this.__attachShadow();
16
+ this.handleClick = (ev) => {
17
+ if (this.type === 'button')
18
+ return;
19
+ const formEl = this.findForm();
20
+ if (formEl) {
21
+ ev.preventDefault();
22
+ const fakeButton = document.createElement('button');
23
+ fakeButton.type = this.type;
24
+ fakeButton.style.display = 'none';
25
+ formEl.appendChild(fakeButton);
26
+ fakeButton.click();
27
+ fakeButton.remove();
28
+ }
29
+ };
15
30
  this.iconName = undefined;
16
31
  this.iconSrc = undefined;
17
32
  this.type = 'button';
@@ -21,12 +36,34 @@ const IconButton = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
21
36
  this.showTooltip = false;
22
37
  this.disabled = false;
23
38
  this.href = undefined;
39
+ this.rel = undefined;
24
40
  this.target = undefined;
41
+ this.form = undefined;
25
42
  }
26
43
  /** Sets focus on the internal button */
27
44
  async setFocus() {
28
45
  this.button.focus();
29
46
  }
47
+ /**
48
+ * Finds the form element based on the provided `form` selector
49
+ * or element reference provided.
50
+ * @returns the found form element (if found)
51
+ */
52
+ findForm() {
53
+ const { form, host } = this;
54
+ if (!form)
55
+ return host.closest('form');
56
+ if (form instanceof HTMLFormElement) {
57
+ return form;
58
+ }
59
+ if (typeof form === 'string') {
60
+ const el = document.getElementById(form);
61
+ if (el instanceof HTMLFormElement) {
62
+ return el;
63
+ }
64
+ }
65
+ return null;
66
+ }
30
67
  componentDidLoad() {
31
68
  focusVisible.observe(this.button);
32
69
  }
@@ -39,10 +76,10 @@ const IconButton = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
39
76
  }
40
77
  content() {
41
78
  const TagType = this.href === undefined ? 'button' : 'a';
42
- return (h(TagType, { part: "base", ref: (el) => (this.button = el), class: {
79
+ return (h(Host, { "aria-disabled": this.disabled ? 'true' : null }, h(TagType, { onClick: this.handleClick, part: "base", ref: (el) => (this.button = el), class: {
43
80
  'icon-button': true,
44
81
  'icon-button--disabled': this.disabled,
45
- }, "aria-label": this.label, name: this.name, value: this.value, href: this.href || undefined, target: this.href && this.target ? this.target : undefined, type: !this.href && this.type ? this.type : undefined }, h("nano-icon", { name: this.iconName, src: this.iconSrc, "aria-hidden": "true", lazy: false, part: "icon" })));
82
+ }, "aria-label": this.label, name: this.name, value: this.value, href: this.href || undefined, target: this.href && this.target ? this.target : undefined, rel: this.rel || undefined, type: !this.href && this.type ? this.type : undefined }, h("nano-icon", { name: this.iconName, src: this.iconSrc, "aria-hidden": "true", lazy: false, part: "icon" }))));
46
83
  }
47
84
  render() {
48
85
  if (this.showTooltip) {
@@ -50,8 +87,9 @@ const IconButton = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
50
87
  }
51
88
  return this.content();
52
89
  }
90
+ get host() { return this; }
53
91
  static get style() { return iconButtonCss; }
54
- }, [2, "nano-icon-button", {
92
+ }, [1, "nano-icon-button", {
55
93
  "iconName": [1, "icon-name"],
56
94
  "iconSrc": [1, "icon-src"],
57
95
  "type": [513],
@@ -61,7 +99,9 @@ const IconButton = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
61
99
  "showTooltip": [4, "show-tooltip"],
62
100
  "disabled": [516],
63
101
  "href": [1],
102
+ "rel": [1],
64
103
  "target": [1],
104
+ "form": [1],
65
105
  "setFocus": [64]
66
106
  }]);
67
107
  function defineCustomElement() {
@@ -1 +1 @@
1
- {"file":"icon-button.js","mappings":";;;;;;;;AAAA,MAAM,aAAa,GAAG,65CAA65C;;MCct6C,UAAU;;;;;;gBAU0C,QAAQ;;;;uBAaxC,KAAK;oBAGA,KAAK;;;;;EAYzC,MAAM,QAAQ;IACZ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;GACrB;EAED,gBAAgB;IACd,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;GACnC;EAED,iBAAiB;IACf,IAAI,IAAI,CAAC,MAAM;MAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;GACpD;EAED,oBAAoB;IAClB,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;GACrC;EAEO,OAAO;IACb,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,QAAQ,GAAI,GAAW,CAAC;IAElE,QACE,EAAC,OAAO,IACN,IAAI,EAAC,MAAM,EACX,GAAG,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,EAC/B,KAAK,EAAE;QACL,aAAa,EAAE,IAAI;QACnB,uBAAuB,EAAE,IAAI,CAAC,QAAQ;OACvC,gBACW,IAAI,CAAC,KAAK,EACtB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS,EAC5B,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,EAC1D,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS,IAErD,iBACE,IAAI,EAAE,IAAI,CAAC,QAAQ,EACnB,GAAG,EAAE,IAAI,CAAC,OAAO,iBACL,MAAM,EAClB,IAAI,EAAE,KAAK,EACX,IAAI,EAAC,MAAM,GACX,CACM,EACV;GACH;EAED,MAAM;IACJ,IAAI,IAAI,CAAC,WAAW,EAAE;MACpB,OAAO,oBAAc,OAAO,EAAE,IAAI,CAAC,KAAK,IAAG,IAAI,CAAC,OAAO,EAAE,CAAgB,CAAC;KAC3E;IACD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;GACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":["./src/components/icon-button/icon-button.scss?tag=nano-icon-button&encapsulation=scoped","./src/components/icon-button/icon-button.tsx"],"sourcesContent":["@use 'sass:map';\n@use 'sass:list';\n\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/form';\n\n:host {\n /**\n * @prop --border-radius: defaults to #{$border-radius-medium};\n * @prop --border-radius: defaults to #{$border-radius-medium};\n * @prop --color: defaults to #{map.get($colors, palegrey)};\n * @prop --active-color: defaults to #{map.get($colors, darkblue--faded)};\n * @prop --hover-color: defaults to #{map.get($colors, blue)};\n * @prop --background: defaults to transparent;\n * @prop --padding: defaults to #{$spacing-small};\n */\n display: inline-block;\n\n --border-radius: #{$border-radius-medium};\n --active-color: #{map.get($colors, darkblue--faded)};\n --hover-color: #{map.get($colors, blue)};\n --nano-color-base: var(--color, #{map.get($colors, mediumgrey)});\n --background: transparent;\n --padding: #{$spacing-small};\n}\n\n.icon-button {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n border: none;\n border-radius: var(--border-radius);\n background: var(--background);\n font-size: inherit;\n color: var(--color);\n padding: var(--padding);\n cursor: pointer;\n appearance: none;\n transition: box-shadow #{$transition-xfast} ease-in-out;\n\n &:hover:not(.icon-button--disabled),\n &:focus:not(.icon-button--disabled) {\n color: var(--hover-color);\n\n --nano-color-base: var(--hover-color);\n }\n\n &:active:not(.icon-button--disabled) {\n color: var(--active-color);\n\n --nano-color-base: var(--active-color);\n }\n\n &:focus {\n outline: none;\n }\n}\n\n.icon-button--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.focus-visible.icon-button:focus {\n box-shadow: #{$control-focus-style};\n}\n","import { Component, Prop, h, ComponentInterface, Method } from '@stencil/core';\nimport { focusVisible } from '../../utils/focus-visible';\n\n/** Icons buttons are simple, icon-only buttons that can be used for actions and in toolbars.\n *\n * @part base - the main control (either `<a />` or `<button />`)\n * @part icon - a `<nano-icon />` component\n */\n\n@Component({\n tag: 'nano-icon-button',\n styleUrl: 'icon-button.scss',\n scoped: true,\n})\nexport class IconButton implements ComponentInterface {\n private button: HTMLButtonElement;\n\n /** The name of the icon to draw. */\n @Prop() iconName?: string;\n\n /** An external URL of an SVG file. */\n @Prop() iconSrc?: string;\n\n /** The default behavior of the button. */\n @Prop({ reflect: true }) type: 'submit' | 'reset' | 'button' = 'button';\n\n /** The name of the button, submitted as a pair with the button’s value as part of the form data. */\n @Prop({ reflect: true }) name?: string;\n\n /** Defines the value associated with the button’s name when it’s submitted with the form data. */\n @Prop({ reflect: true }) value?: string;\n\n /** A description that gets read by screen readers and other assistive devices. For optimal accessibility, you should\n * always include a label that describes what the icon button does. */\n @Prop() label!: string;\n\n /** display the label as a `<nano-tooltip />` */\n @Prop() showTooltip: boolean = false;\n\n /** Set to true to disable the button. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Contains a URL or a URL fragment that the hyperlink points to.\n * If this property is set, an anchor tag will be rendered. */\n @Prop() href: string | undefined;\n\n /** Specifies where to display the linked URL. Only applies when an `href` is provided.\n * Special keywords: `\"_blank\"`, `\"_self\"`, `\"_parent\"`, `\"_top\"`. */\n @Prop() target: string | undefined;\n\n /** Sets focus on the internal button */\n @Method()\n async setFocus() {\n this.button.focus();\n }\n\n componentDidLoad() {\n focusVisible.observe(this.button);\n }\n\n connectedCallback() {\n if (this.button) focusVisible.observe(this.button);\n }\n\n disconnectedCallback() {\n focusVisible.unobserve(this.button);\n }\n\n private content() {\n const TagType = this.href === undefined ? 'button' : ('a' as any);\n\n return (\n <TagType\n part=\"base\"\n ref={(el) => (this.button = el)}\n class={{\n 'icon-button': true,\n 'icon-button--disabled': this.disabled,\n }}\n aria-label={this.label}\n name={this.name}\n value={this.value}\n href={this.href || undefined}\n target={this.href && this.target ? this.target : undefined}\n type={!this.href && this.type ? this.type : undefined}\n >\n <nano-icon\n name={this.iconName}\n src={this.iconSrc}\n aria-hidden=\"true\"\n lazy={false}\n part=\"icon\"\n />\n </TagType>\n );\n }\n\n render() {\n if (this.showTooltip) {\n return <nano-tooltip content={this.label}>{this.content()}</nano-tooltip>;\n }\n return this.content();\n }\n}\n"],"version":3}
1
+ {"file":"icon-button.js","mappings":"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","names":[],"sources":["./src/components/icon-button/icon-button.scss?tag=nano-icon-button&encapsulation=shadow","./src/components/icon-button/icon-button.tsx"],"sourcesContent":["@use 'sass:map';\n@use 'sass:list';\n\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/form';\n\n:host {\n /**\n * @prop --color: defaults to #{map.get($colors, palegrey)};\n * @prop --active-color: defaults to #{map.get($colors, darkblue--faded)};\n * @prop --hover-color: defaults to #{map.get($colors, blue)};\n * @prop --background: defaults to transparent;\n * @prop --padding: defaults to #{$spacing-small};\n * @prop --box-shadow: defaults to none;\n */\n\n --border-radius: #{$border-radius-medium};\n --active-color: #{map.get($colors, darkblue--faded)};\n --hover-color: #{map.get($colors, blue)};\n --nano-color-base: var(--color, #{map.get($colors, mediumgrey)});\n --background: transparent;\n --padding: #{$spacing-small};\n --box-shadow: none;\n\n border-radius: var(--border-radius);\n display: inline-block;\n}\n\n.icon-button {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n border: none;\n border-radius: inherit;\n background: var(--background);\n font-size: inherit;\n color: var(--color);\n padding: var(--padding);\n cursor: pointer;\n appearance: none;\n transition: box-shadow #{$transition-xfast} ease-in-out;\n box-shadow: var(--box-shadow);\n\n &:hover:not(.icon-button--disabled),\n &:focus:not(.icon-button--disabled) {\n color: var(--hover-color);\n\n --nano-color-base: var(--hover-color);\n }\n\n &:active:not(.icon-button--disabled) {\n color: var(--active-color);\n\n --nano-color-base: var(--active-color);\n }\n\n &:focus {\n outline: none;\n }\n}\n\n.icon-button--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.focus-visible.icon-button:focus {\n box-shadow: #{$control-focus-style};\n}\n","import {\n Component,\n Prop,\n h,\n ComponentInterface,\n Method,\n Element,\n Host,\n} from '@stencil/core';\nimport { focusVisible } from '../../utils/focus-visible';\n\n/** Icons buttons are simple, icon-only buttons that can be used for actions and in toolbars.\n *\n * @part base - the main control (either `<a />` or `<button />`)\n * @part icon - a `<nano-icon />` component\n */\n@Component({\n tag: 'nano-icon-button',\n styleUrl: 'icon-button.scss',\n shadow: true,\n})\nexport class IconButton implements ComponentInterface {\n private button: HTMLButtonElement;\n\n @Element() host: HTMLNanoIconButtonElement;\n\n /** The name of the icon to draw. */\n @Prop() iconName?: string;\n\n /** An external URL of an SVG file. */\n @Prop() iconSrc?: string;\n\n /** The default behavior of the button. */\n @Prop({ reflect: true }) type: 'submit' | 'reset' | 'button' = 'button';\n\n /** The name of the button, submitted as a pair with the button’s value as part of the form data. */\n @Prop({ reflect: true }) name?: string;\n\n /** Defines the value associated with the button’s name when it’s submitted with the form data. */\n @Prop({ reflect: true }) value?: string;\n\n /** A description that gets read by screen readers and other assistive devices. For optimal accessibility, you should\n * always include a label that describes what the icon button does. */\n @Prop() label!: string;\n\n /** display the label as a `<nano-tooltip />` */\n @Prop() showTooltip: boolean = false;\n\n /** Set to true to disable the button. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Contains a URL or a URL fragment that the hyperlink points to.\n * If this property is set, an anchor tag will be rendered. */\n @Prop() href: string | undefined;\n\n /** Specifies the relationship of the target object to the link object.\n * The value is a space-separated list of [link types](https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types) */\n @Prop() rel: string | undefined;\n\n /** Specifies where to display the linked URL. Only applies when an `href` is provided.\n * Special keywords: `\"_blank\"`, `\"_self\"`, `\"_parent\"`, `\"_top\"`. */\n @Prop() target: string | undefined;\n\n /** The HTML form element or form element id.\n * Used to submit a form when the button is not a child of the form. */\n @Prop() form: HTMLFormElement | string;\n\n /** Sets focus on the internal button */\n @Method()\n async setFocus() {\n this.button.focus();\n }\n\n /**\n * Finds the form element based on the provided `form` selector\n * or element reference provided.\n * @returns the found form element (if found)\n */\n private findForm(): HTMLFormElement | null {\n const { form, host } = this;\n if (!form) return host.closest('form');\n\n if (form instanceof HTMLFormElement) {\n return form;\n }\n if (typeof form === 'string') {\n const el = document.getElementById(form);\n if (el instanceof HTMLFormElement) {\n return el;\n }\n }\n return null;\n }\n\n private handleClick = (ev: Event) => {\n if (this.type === 'button') return;\n const formEl = this.findForm();\n\n if (formEl) {\n ev.preventDefault();\n\n const fakeButton = document.createElement('button');\n fakeButton.type = this.type;\n fakeButton.style.display = 'none';\n formEl.appendChild(fakeButton);\n fakeButton.click();\n fakeButton.remove();\n }\n };\n\n componentDidLoad() {\n focusVisible.observe(this.button);\n }\n\n connectedCallback() {\n if (this.button) focusVisible.observe(this.button);\n }\n\n disconnectedCallback() {\n focusVisible.unobserve(this.button);\n }\n\n private content() {\n const TagType: 'a' | 'button' = this.href === undefined ? 'button' : 'a';\n\n return (\n <Host aria-disabled={this.disabled ? 'true' : null}>\n <TagType\n onClick={this.handleClick}\n part=\"base\"\n ref={(el) => (this.button = el)}\n class={{\n 'icon-button': true,\n 'icon-button--disabled': this.disabled,\n }}\n aria-label={this.label}\n name={this.name}\n value={this.value}\n href={this.href || undefined}\n target={this.href && this.target ? this.target : undefined}\n rel={this.rel || undefined}\n type={!this.href && this.type ? this.type : undefined}\n >\n <nano-icon\n name={this.iconName}\n src={this.iconSrc}\n aria-hidden=\"true\"\n lazy={false}\n part=\"icon\"\n />\n </TagType>\n </Host>\n );\n }\n\n render() {\n if (this.showTooltip) {\n return <nano-tooltip content={this.label}>{this.content()}</nano-tooltip>;\n }\n return this.content();\n }\n}\n"],"version":3}
@@ -42,6 +42,7 @@ export { Select as NanoSelect } from '../types/components/select/select';
42
42
  export { Skeleton as NanoSkeleton } from '../types/components/skeleton/skeleton';
43
43
  export { Slide as NanoSlide } from '../types/components/slides/slide';
44
44
  export { Slides as NanoSlides } from '../types/components/slides/slides';
45
+ export { Sortable as NanoSortable } from '../types/components/sortable/sortable';
45
46
  export { Spinner as NanoSpinner } from '../types/components/spinner/spinner';
46
47
  export { SplitPane as NanoSplitPane } from '../types/components/split-pane/split-pane';
47
48
  export { Sticker as NanoSticker } from '../types/components/sticker/sticker';
@@ -46,6 +46,7 @@ export { NanoSelect, defineCustomElement as defineCustomElementNanoSelect } from
46
46
  export { NanoSkeleton, defineCustomElement as defineCustomElementNanoSkeleton } from './nano-skeleton.js';
47
47
  export { NanoSlide, defineCustomElement as defineCustomElementNanoSlide } from './nano-slide.js';
48
48
  export { NanoSlides, defineCustomElement as defineCustomElementNanoSlides } from './nano-slides.js';
49
+ export { NanoSortable, defineCustomElement as defineCustomElementNanoSortable } from './nano-sortable.js';
49
50
  export { NanoSpinner, defineCustomElement as defineCustomElementNanoSpinner } from './nano-spinner.js';
50
51
  export { NanoSplitPane, defineCustomElement as defineCustomElementNanoSplitPane } from './nano-split-pane.js';
51
52
  export { NanoSticker, defineCustomElement as defineCustomElementNanoSticker } from './nano-sticker.js';
@@ -1 +1 @@
1
- {"file":"index.js","mappings":"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","names":[],"sources":["./src/components/alert/alert.helpers.ts","./src/components/dialog/dialog.helpers.ts","./src/index.ts","./node_modules/focus-options-polyfill/index.js","./src/global/script/global.ts"],"sourcesContent":["import type { Color, AlertToastPosition } from '../../interface';\n\ninterface ImperativeAlertOptions {\n color?: Color;\n duration?: number;\n closable?: boolean;\n}\n\ninterface ImperativeAlertButton {\n classes: string;\n content: string;\n handler?: (e: MouseEvent) => void;\n}\n\nconst alertContent = (\n message: string,\n buttons: ImperativeAlertButton[] = []\n) => {\n return `${message}\n ${\n buttons.length\n ? buttons\n .map(\n (btn, i) =>\n `<button data-btn=\"${i}\" class=\"button ${btn.classes}\" slot=\"footer\">${btn.content}</button>`\n )\n .join('')\n : ''\n }`;\n};\n\nconst addBtnHandlers = (\n alert: HTMLNanoAlertElement,\n buttons: ImperativeAlertButton[] = []\n) => {\n if (buttons.length) {\n Array.from(alert.querySelectorAll('button[slot=\"footer\"]')).map(\n (btn: HTMLElement) => {\n const foundBtn = buttons.find(\n (_fb, i) => btn.dataset.btn === i.toString()\n );\n if (foundBtn && foundBtn.handler) {\n btn.addEventListener('click', foundBtn.handler);\n }\n }\n );\n }\n};\n\n/**\n * `nano-alert` helper to create toast notifications imperatively.\n * @param message - a JS template string e.g. `<h4>Hello</h4> ${aVariable}`\n * @param position - the position of the toast. Options are 'tr', 'tl', 'bl' & 'br'\n * @param icon - name for the `nano-icon`\n * @param alertOptions - { color: Color, duration: number, closable: boolean }\n * @returns `Promise<void>`\n */\nexport async function nanoShowToast(\n message: string,\n position: AlertToastPosition = 'tr',\n icon?: string | undefined,\n alertOptions?: ImperativeAlertOptions,\n buttons: ImperativeAlertButton[] = []\n) {\n const opts: ImperativeAlertOptions = {\n color: 'primary',\n duration: 3000,\n closable: true,\n ...alertOptions,\n };\n icon = icon || 'light/info-circle';\n const alert: HTMLNanoAlertElement = Object.assign(\n document.createElement('nano-alert'),\n {\n ...opts,\n open: false,\n innerHTML: `\n <nano-icon name=\"${icon}\" slot=\"icon\"></nano-icon>\n ${alertContent(message, buttons)}\n `,\n }\n );\n addBtnHandlers(alert, buttons);\n\n document.body.appendChild(alert);\n return new Promise<HTMLNanoAlertElement>((resolve) => {\n requestAnimationFrame(async (_) => {\n await alert.toast(position);\n resolve(alert);\n });\n });\n}\n\n/**\n * `nano-alert` helper to create alert notifications imperatively.\n * @param message - a JS template string e.g. `<h4>Hello</h4> ${aVariable}`\n * @param buttons\n * @param label - descriptive label for assitive technology\n * @param icon - name for the `nano-icon`\n * @param alertOptions\n * @returns `Promise<void>`\n */\nexport function nanoShowAlert(\n message: string,\n buttons: ImperativeAlertButton[] = [],\n label: string,\n icon: string | undefined = 'light/info-circle',\n alertOptions: ImperativeAlertOptions = {}\n) {\n const opts: ImperativeAlertOptions = {\n color: 'primary',\n duration: Infinity,\n closable: false,\n ...alertOptions,\n };\n icon = icon || 'light/info-circle';\n const alert: HTMLNanoAlertElement = Object.assign(\n document.createElement('nano-alert'),\n {\n ...opts,\n open: false,\n innerHTML: `\n ${icon ? `<nano-icon name=\"${icon}\" slot=\"icon\"></nano-icon>` : ''}\n ${alertContent(message, buttons)}\n `,\n }\n );\n addBtnHandlers(alert, buttons);\n\n document.body.appendChild(alert);\n return new Promise<HTMLNanoAlertElement>((resolve) => {\n setTimeout(async (_) => {\n await alert.alert(label);\n resolve(alert);\n }, 100);\n });\n}\n","interface ImperativeDialogOptions {\n noUserDismiss: boolean;\n noHeader?: boolean;\n noFooter?: boolean;\n label: string;\n}\n/**\n * `nano-dialog` helper to create dialog modals imperatively.\n * @param body - a JS template string e.g. `<h4>Hello</h4> ${aVariable}`\n * @param buttons - { classes: string; content: string; handler: () => {} }[]\n * @param dialogOptions - { noUserDismiss: boolean, noHeader?: boolean, noFooter?: boolean, label: string }\n * @returns `Promise<void>`\n */\nexport function nanoCreateDialog(\n body: string,\n buttons: { classes: string; content: string; handler: () => void }[] = [],\n dialogOptions?: ImperativeDialogOptions\n) {\n const opts: ImperativeDialogOptions = {\n noUserDismiss: false,\n label: 'Dialog',\n ...dialogOptions,\n };\n const dialog: HTMLNanoDialogElement = Object.assign(\n document.createElement('nano-dialog'),\n {\n ...opts,\n open: false,\n innerHTML: `\n ${body}\n ${\n buttons.length\n ? buttons\n .map(\n (btn, i) =>\n `<button data-btn=\"${i}\" class=\"button ${btn.classes}\" slot=\"footer\">${btn.content}</button>`\n )\n .join('')\n : ''\n }`,\n }\n );\n\n if (buttons.length) {\n Array.from(dialog.querySelectorAll('button[slot=\"footer\"]')).map(\n (btn: HTMLElement) => {\n const foundBtn = buttons.find(\n (_fb, i) => btn.dataset.btn === i.toString()\n );\n if (foundBtn && foundBtn.handler) {\n btn.addEventListener('click', foundBtn.handler);\n }\n }\n );\n }\n\n document.body.appendChild(dialog);\n return dialog;\n}\n","// import { setPlatformHelpers } from '@stencil/core';\nexport * from './components/alert/alert.helpers';\nexport * from './components/dialog/dialog.helpers';\nexport {\n debounce as nanoDebounce,\n throttle as nanoThrottle,\n} from './utils/throttle';\nexport { getTabbableElements as nanoGetTabElements } from './utils/tabbable';\n\nexport const initialize = (\n helpers: { _ael?: any; _ce?: any; _rel?: any } = {}\n) => {\n if (typeof (window as any) === 'undefined') {\n return;\n }\n\n const platformHelpers: any = {};\n if (helpers._ael) {\n platformHelpers.ael = helpers._ael;\n }\n if (helpers._rel) {\n platformHelpers.rel = helpers._rel;\n }\n if (helpers._ce) {\n platformHelpers.ce = helpers._ce;\n }\n // setPlatformHelpers(platformHelpers);\n};\n","// focus - focusOptions - preventScroll polyfill\n(function() {\n if (\n typeof window === \"undefined\" ||\n typeof document === \"undefined\" ||\n typeof HTMLElement === \"undefined\"\n ) {\n return;\n }\n\n var supportsPreventScrollOption = false;\n try {\n var focusElem = document.createElement(\"div\");\n focusElem.addEventListener(\n \"focus\",\n function(event) {\n event.preventDefault();\n event.stopPropagation();\n },\n true\n );\n focusElem.focus(\n Object.defineProperty({}, \"preventScroll\", {\n get: function() {\n // Edge v18 gives a false positive for supporting inputs\n if (\n navigator &&\n typeof navigator.userAgent !== 'undefined' &&\n navigator.userAgent &&\n navigator.userAgent.match(/Edge\\/1[7-8]/)) {\n return supportsPreventScrollOption = false\n }\n\n supportsPreventScrollOption = true;\n }\n })\n );\n } catch (e) {}\n\n if (\n HTMLElement.prototype.nativeFocus === undefined &&\n !supportsPreventScrollOption\n ) {\n HTMLElement.prototype.nativeFocus = HTMLElement.prototype.focus;\n\n var calcScrollableElements = function(element) {\n var parent = element.parentNode;\n var scrollableElements = [];\n var rootScrollingElement =\n document.scrollingElement || document.documentElement;\n\n while (parent && parent !== rootScrollingElement) {\n if (\n parent.offsetHeight < parent.scrollHeight ||\n parent.offsetWidth < parent.scrollWidth\n ) {\n scrollableElements.push([\n parent,\n parent.scrollTop,\n parent.scrollLeft\n ]);\n }\n parent = parent.parentNode;\n }\n parent = rootScrollingElement;\n scrollableElements.push([parent, parent.scrollTop, parent.scrollLeft]);\n\n return scrollableElements;\n };\n\n var restoreScrollPosition = function(scrollableElements) {\n for (var i = 0; i < scrollableElements.length; i++) {\n scrollableElements[i][0].scrollTop = scrollableElements[i][1];\n scrollableElements[i][0].scrollLeft = scrollableElements[i][2];\n }\n scrollableElements = [];\n };\n\n var patchedFocus = function(args) {\n if (args && args.preventScroll) {\n var evScrollableElements = calcScrollableElements(this);\n if (typeof setTimeout === 'function') {\n var thisElem = this;\n setTimeout(function () {\n thisElem.nativeFocus();\n restoreScrollPosition(evScrollableElements);\n }, 0);\n } else {\n this.nativeFocus();\n restoreScrollPosition(evScrollableElements);\n }\n }\n else {\n this.nativeFocus();\n }\n };\n\n HTMLElement.prototype.focus = patchedFocus;\n }\n})();\n","import { Build } from '@stencil/core';\n\n// focus options\nimport 'focus-options-polyfill';\n\nif (Build.isBrowser && globalThis['document']) {\n // fire global 'ready' event when everything is hydrated\n\n const docEle = document.documentElement;\n const docIsReady = () => {\n if (!docEle.classList.contains('hydrated')) return false;\n document.documentElement.dispatchEvent(\n new CustomEvent('nanoComponentsReady')\n );\n return true;\n };\n\n if (!docIsReady()) {\n let mutationO = new MutationObserver((_) => {\n if (docIsReady()) {\n mutationO.disconnect();\n mutationO = null;\n }\n });\n\n mutationO.observe(document.documentElement, {\n childList: false,\n subtree: false,\n attributes: true,\n });\n }\n}\n"],"version":3}
1
+ {"file":"index.js","mappings":"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","names":[],"sources":["./src/components/alert/alert.helpers.ts","./src/components/dialog/dialog.helpers.ts","./src/index.ts","./node_modules/focus-options-polyfill/index.js","./src/global/script/global.ts"],"sourcesContent":["import type { Color, AlertToastPosition } from '../../interface';\n\ninterface ImperativeAlertOptions {\n color?: Color;\n duration?: number;\n closable?: boolean;\n}\n\ninterface ImperativeAlertButton {\n classes: string;\n content: string;\n handler?: (e: MouseEvent) => void;\n}\n\nconst alertContent = (\n message: string,\n buttons: ImperativeAlertButton[] = []\n) => {\n return `${message}\n ${\n buttons.length\n ? buttons\n .map(\n (btn, i) =>\n `<button data-btn=\"${i}\" class=\"button ${btn.classes}\" slot=\"footer\">${btn.content}</button>`\n )\n .join('')\n : ''\n }`;\n};\n\nconst addBtnHandlers = (\n alert: HTMLNanoAlertElement,\n buttons: ImperativeAlertButton[] = []\n) => {\n if (buttons.length) {\n Array.from(alert.querySelectorAll('button[slot=\"footer\"]')).map(\n (btn: HTMLElement) => {\n const foundBtn = buttons.find(\n (_fb, i) => btn.dataset.btn === i.toString()\n );\n if (foundBtn && foundBtn.handler) {\n btn.addEventListener('click', foundBtn.handler);\n }\n }\n );\n }\n};\n\n/**\n * `nano-alert` helper to create toast notifications imperatively.\n * @param message - a JS template string e.g. `<h4>Hello</h4> ${aVariable}`\n * @param position - the position of the toast. Options are 'tr', 'tl', 'bl' & 'br'\n * @param icon - name for the `nano-icon`\n * @param alertOptions - { color: Color, duration: number, closable: boolean }\n * @returns `Promise<void>`\n */\nexport async function nanoShowToast(\n message: string,\n position: AlertToastPosition = 'tr',\n icon?: string | undefined,\n alertOptions?: ImperativeAlertOptions,\n buttons: ImperativeAlertButton[] = []\n) {\n const opts: ImperativeAlertOptions = {\n color: 'primary',\n duration: 3000,\n closable: true,\n ...alertOptions,\n };\n icon = icon || 'light/info-circle';\n const alert: HTMLNanoAlertElement = Object.assign(\n document.createElement('nano-alert'),\n {\n ...opts,\n open: false,\n innerHTML: `\n <nano-icon name=\"${icon}\" slot=\"icon\"></nano-icon>\n ${alertContent(message, buttons)}\n `,\n }\n );\n addBtnHandlers(alert, buttons);\n\n document.body.appendChild(alert);\n return new Promise<HTMLNanoAlertElement>((resolve) => {\n requestAnimationFrame(async (_) => {\n await alert.toast(position);\n resolve(alert);\n });\n });\n}\n\n/**\n * `nano-alert` helper to create alert notifications imperatively.\n * @param message - a JS template string e.g. `<h4>Hello</h4> ${aVariable}`\n * @param buttons\n * @param label - descriptive label for assitive technology\n * @param icon - name for the `nano-icon`\n * @param alertOptions\n * @returns `Promise<void>`\n */\nexport function nanoShowAlert(\n message: string,\n buttons: ImperativeAlertButton[] = [],\n label: string,\n icon: string | undefined = 'light/info-circle',\n alertOptions: ImperativeAlertOptions = {}\n) {\n const opts: ImperativeAlertOptions = {\n color: 'primary',\n duration: Infinity,\n closable: false,\n ...alertOptions,\n };\n icon = icon || 'light/info-circle';\n const alert: HTMLNanoAlertElement = Object.assign(\n document.createElement('nano-alert'),\n {\n ...opts,\n open: false,\n innerHTML: `\n ${icon ? `<nano-icon name=\"${icon}\" slot=\"icon\"></nano-icon>` : ''}\n ${alertContent(message, buttons)}\n `,\n }\n );\n addBtnHandlers(alert, buttons);\n\n document.body.appendChild(alert);\n return new Promise<HTMLNanoAlertElement>((resolve) => {\n setTimeout(async (_) => {\n await alert.alert(label);\n resolve(alert);\n }, 100);\n });\n}\n","interface ImperativeDialogOptions {\n noUserDismiss: boolean;\n noHeader?: boolean;\n noFooter?: boolean;\n label: string;\n}\n/**\n * `nano-dialog` helper to create dialog modals imperatively.\n * @param body - a JS template string e.g. `<h4>Hello</h4> ${aVariable}`\n * @param buttons - { classes: string; content: string; handler: () => {} }[]\n * @param dialogOptions - { noUserDismiss: boolean, noHeader?: boolean, noFooter?: boolean, label: string }\n * @returns `Promise<void>`\n */\nexport function nanoCreateDialog(\n body: string,\n buttons: { classes: string; content: string; handler: () => void }[] = [],\n dialogOptions?: ImperativeDialogOptions\n) {\n const opts: ImperativeDialogOptions = {\n noUserDismiss: false,\n label: 'Dialog',\n ...dialogOptions,\n };\n const dialog: HTMLNanoDialogElement = Object.assign(\n document.createElement('nano-dialog'),\n {\n ...opts,\n open: false,\n innerHTML: `\n ${body}\n ${\n buttons.length\n ? buttons\n .map(\n (btn, i) =>\n `<button data-btn=\"${i}\" class=\"button ${btn.classes}\" slot=\"footer\">${btn.content}</button>`\n )\n .join('')\n : ''\n }`,\n }\n );\n\n if (buttons.length) {\n Array.from(dialog.querySelectorAll('button[slot=\"footer\"]')).map(\n (btn: HTMLElement) => {\n const foundBtn = buttons.find(\n (_fb, i) => btn.dataset.btn === i.toString()\n );\n if (foundBtn && foundBtn.handler) {\n btn.addEventListener('click', foundBtn.handler);\n }\n }\n );\n }\n\n document.body.appendChild(dialog);\n return dialog;\n}\n","// import { setPlatformHelpers } from '@stencil/core';\nexport * from './components/alert/alert.helpers';\nexport * from './components/dialog/dialog.helpers';\nexport {\n debounce as nanoDebounce,\n throttle as nanoThrottle,\n} from './utils/throttle';\nexport { getTabbableElements as nanoGetTabElements } from './utils/tabbable';\n\nexport const initialize = (\n helpers: { _ael?: any; _ce?: any; _rel?: any } = {}\n) => {\n if (typeof (window as any) === 'undefined') {\n return;\n }\n\n const platformHelpers: any = {};\n if (helpers._ael) {\n platformHelpers.ael = helpers._ael;\n }\n if (helpers._rel) {\n platformHelpers.rel = helpers._rel;\n }\n if (helpers._ce) {\n platformHelpers.ce = helpers._ce;\n }\n // setPlatformHelpers(platformHelpers);\n};\n","// focus - focusOptions - preventScroll polyfill\n(function() {\n if (\n typeof window === \"undefined\" ||\n typeof document === \"undefined\" ||\n typeof HTMLElement === \"undefined\"\n ) {\n return;\n }\n\n var supportsPreventScrollOption = false;\n try {\n var focusElem = document.createElement(\"div\");\n focusElem.addEventListener(\n \"focus\",\n function(event) {\n event.preventDefault();\n event.stopPropagation();\n },\n true\n );\n focusElem.focus(\n Object.defineProperty({}, \"preventScroll\", {\n get: function() {\n // Edge v18 gives a false positive for supporting inputs\n if (\n navigator &&\n typeof navigator.userAgent !== 'undefined' &&\n navigator.userAgent &&\n navigator.userAgent.match(/Edge\\/1[7-8]/)) {\n return supportsPreventScrollOption = false\n }\n\n supportsPreventScrollOption = true;\n }\n })\n );\n } catch (e) {}\n\n if (\n HTMLElement.prototype.nativeFocus === undefined &&\n !supportsPreventScrollOption\n ) {\n HTMLElement.prototype.nativeFocus = HTMLElement.prototype.focus;\n\n var calcScrollableElements = function(element) {\n var parent = element.parentNode;\n var scrollableElements = [];\n var rootScrollingElement =\n document.scrollingElement || document.documentElement;\n\n while (parent && parent !== rootScrollingElement) {\n if (\n parent.offsetHeight < parent.scrollHeight ||\n parent.offsetWidth < parent.scrollWidth\n ) {\n scrollableElements.push([\n parent,\n parent.scrollTop,\n parent.scrollLeft\n ]);\n }\n parent = parent.parentNode;\n }\n parent = rootScrollingElement;\n scrollableElements.push([parent, parent.scrollTop, parent.scrollLeft]);\n\n return scrollableElements;\n };\n\n var restoreScrollPosition = function(scrollableElements) {\n for (var i = 0; i < scrollableElements.length; i++) {\n scrollableElements[i][0].scrollTop = scrollableElements[i][1];\n scrollableElements[i][0].scrollLeft = scrollableElements[i][2];\n }\n scrollableElements = [];\n };\n\n var patchedFocus = function(args) {\n if (args && args.preventScroll) {\n var evScrollableElements = calcScrollableElements(this);\n if (typeof setTimeout === 'function') {\n var thisElem = this;\n setTimeout(function () {\n thisElem.nativeFocus();\n restoreScrollPosition(evScrollableElements);\n }, 0);\n } else {\n this.nativeFocus();\n restoreScrollPosition(evScrollableElements);\n }\n }\n else {\n this.nativeFocus();\n }\n };\n\n HTMLElement.prototype.focus = patchedFocus;\n }\n})();\n","import { Build } from '@stencil/core';\n\n// focus options\nimport 'focus-options-polyfill';\n\nif (Build.isBrowser && globalThis['document']) {\n // fire global 'ready' event when everything is hydrated\n\n const docEle = document.documentElement;\n const docIsReady = () => {\n if (!docEle.classList.contains('hydrated')) return false;\n document.documentElement.dispatchEvent(\n new CustomEvent('nanoComponentsReady')\n );\n return true;\n };\n\n if (!docIsReady()) {\n let mutationO = new MutationObserver((_) => {\n if (docIsReady()) {\n mutationO.disconnect();\n mutationO = null;\n }\n });\n\n mutationO.observe(document.documentElement, {\n childList: false,\n subtree: false,\n attributes: true,\n });\n }\n}\n"],"version":3}
@@ -495,13 +495,12 @@ const GlobalNav = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
495
495
  return;
496
496
  switch (this.env) {
497
497
  case 'prod':
498
- this.userProfileUrl = 'https://community.nanoporetech.com/profile/me';
498
+ this.userProfileUrl = 'https://myaccount.nanoporetech.com/';
499
499
  case 'local':
500
500
  case 'dev':
501
501
  case 'test':
502
502
  default:
503
- this.userProfileUrl =
504
- 'https://community-test.nanoporetech.com/profile/me';
503
+ this.userProfileUrl = 'https://myaccount.nanoporetech.com/';
505
504
  break;
506
505
  }
507
506
  if (!this.getMyAccountData || this.myAccData) {