@nanoporetech-digital/components 7.8.0 → 7.9.1

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 (70) hide show
  1. package/dist/cjs/app-globals-3e14cb71.js.map +1 -1
  2. package/dist/cjs/nano-checkbox.cjs.entry.js +8 -4
  3. package/dist/cjs/nano-checkbox.cjs.entry.js.map +1 -1
  4. package/dist/cjs/nano-icon-button_2.cjs.entry.js +5 -5
  5. package/dist/cjs/nano-icon-button_2.cjs.entry.js.map +1 -1
  6. package/dist/cjs/nano-icon.cjs.entry.js +1 -1
  7. package/dist/cjs/nano-icon.cjs.entry.js.map +1 -1
  8. package/dist/cjs/{nano-table-43fc3d23.js → nano-table-54523fe5.js} +2 -2
  9. package/dist/cjs/{nano-table-43fc3d23.js.map → nano-table-54523fe5.js.map} +1 -1
  10. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  11. package/dist/cjs/{table.worker-ad250672.js → table.worker-99f69a43.js} +2 -2
  12. package/dist/cjs/table.worker-99f69a43.js.map +1 -0
  13. package/dist/collection/components/checkbox/checkbox.js +8 -4
  14. package/dist/collection/components/checkbox/checkbox.js.map +1 -1
  15. package/dist/collection/components/icon/icon.js +3 -2
  16. package/dist/collection/components/icon/icon.js.map +1 -1
  17. package/dist/collection/components/icon-button/icon-button.js +2 -1
  18. package/dist/collection/components/icon-button/icon-button.js.map +1 -1
  19. package/dist/components/icon-button.js +2 -1
  20. package/dist/components/icon-button.js.map +1 -1
  21. package/dist/components/icon.js +1 -1
  22. package/dist/components/icon.js.map +1 -1
  23. package/dist/components/index.js.map +1 -1
  24. package/dist/components/nano-checkbox.js +8 -4
  25. package/dist/components/nano-checkbox.js.map +1 -1
  26. package/dist/esm/app-globals-f0120bbe.js.map +1 -1
  27. package/dist/esm/nano-checkbox.entry.js +8 -4
  28. package/dist/esm/nano-checkbox.entry.js.map +1 -1
  29. package/dist/esm/nano-icon-button_2.entry.js +4 -4
  30. package/dist/esm/nano-icon-button_2.entry.js.map +1 -1
  31. package/dist/esm/nano-icon.entry.js +1 -1
  32. package/dist/esm/nano-icon.entry.js.map +1 -1
  33. package/dist/esm/{nano-table-4481d4e1.js → nano-table-3965ddd0.js} +2 -2
  34. package/dist/esm/{nano-table-4481d4e1.js.map → nano-table-3965ddd0.js.map} +1 -1
  35. package/dist/esm/nano-table.entry.js +1 -1
  36. package/dist/esm/{table.worker-1bc9c170.js → table.worker-8e04f768.js} +2 -2
  37. package/dist/esm/table.worker-8e04f768.js.map +1 -0
  38. package/dist/nano-components/app-globals-f0120bbe.js.map +1 -1
  39. package/dist/nano-components/nano-checkbox.entry.js +1 -1
  40. package/dist/nano-components/nano-checkbox.entry.js.map +1 -1
  41. package/dist/nano-components/nano-icon-button_2.entry.js +1 -1
  42. package/dist/nano-components/nano-icon-button_2.entry.js.map +1 -1
  43. package/dist/nano-components/nano-icon.entry.js +1 -1
  44. package/dist/nano-components/nano-icon.entry.js.map +1 -1
  45. package/dist/nano-components/{nano-table-4481d4e1.js → nano-table-3965ddd0.js} +2 -2
  46. package/dist/nano-components/nano-table.entry.js +1 -1
  47. package/dist/nano-components/table.worker-8e04f768.js +5 -0
  48. package/dist/types/components/icon/icon.d.ts +2 -1
  49. package/dist/types/components.d.ts +8 -4
  50. package/docs-json.json +2 -2
  51. package/docs-vscode.json +1 -1
  52. package/hydrate/index.js +15 -10
  53. package/hydrate/index.mjs +15 -10
  54. package/package.json +1 -1
  55. package/dist/cjs/table.worker-ad250672.js.map +0 -1
  56. package/dist/esm/table.worker-1bc9c170.js.map +0 -1
  57. package/dist/nano-components/table.worker-1bc9c170.js +0 -5
  58. /package/dist/nano-components/{nano-table-4481d4e1.js.map → nano-table-3965ddd0.js.map} +0 -0
  59. /package/dist/nano-components/{table.worker-1bc9c170.js.map → table.worker-8e04f768.js.map} +0 -0
  60. /package/dist/types/builds/{Te2fj7s- → 6SyqsxUA}/0/Digital/nano-components/packages/components/.stencil/generators/custom-element-doc-generator.d.ts +0 -0
  61. /package/dist/types/builds/{Te2fj7s- → 6SyqsxUA}/0/Digital/nano-components/packages/components/.stencil/generators/vue/generate-vue-component.d.ts +0 -0
  62. /package/dist/types/builds/{Te2fj7s- → 6SyqsxUA}/0/Digital/nano-components/packages/components/.stencil/generators/vue/index.d.ts +0 -0
  63. /package/dist/types/builds/{Te2fj7s- → 6SyqsxUA}/0/Digital/nano-components/packages/components/.stencil/generators/vue/output-vue.d.ts +0 -0
  64. /package/dist/types/builds/{Te2fj7s- → 6SyqsxUA}/0/Digital/nano-components/packages/components/.stencil/generators/vue/plugin.d.ts +0 -0
  65. /package/dist/types/builds/{Te2fj7s- → 6SyqsxUA}/0/Digital/nano-components/packages/components/.stencil/generators/vue/types.d.ts +0 -0
  66. /package/dist/types/builds/{Te2fj7s- → 6SyqsxUA}/0/Digital/nano-components/packages/components/.stencil/generators/vue/utils.d.ts +0 -0
  67. /package/dist/types/builds/{Te2fj7s- → 6SyqsxUA}/0/Digital/nano-components/packages/components/.stencil/stencil.config.d.ts +0 -0
  68. /package/dist/types/builds/{Te2fj7s- → 6SyqsxUA}/0/Digital/nano-components/packages/components/.stencil/stencil.config.prod.d.ts +0 -0
  69. /package/dist/types/builds/{Te2fj7s- → 6SyqsxUA}/0/Digital/nano-components/packages/components/.stencil/testing/mocks/intersection-observer.d.ts +0 -0
  70. /package/dist/types/builds/{Te2fj7s- → 6SyqsxUA}/0/Digital/nano-components/packages/components/.stencil/wdio.conf.d.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
- export { T as nano_table } from './nano-table-4481d4e1.js';
4
+ export { T as nano_table } from './nano-table-3965ddd0.js';
5
5
  import './index-6cc72cd9.js';
6
6
  import './renderer-4bc3e2dc.js';
7
7
  import './math-d160f8a6.js';
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
- import { c as createWorker } from './nano-table-4481d4e1.js';
4
+ import { c as createWorker } from './nano-table-3965ddd0.js';
5
5
  import './index-6cc72cd9.js';
6
6
  import './renderer-4bc3e2dc.js';
7
7
  import './math-d160f8a6.js';
@@ -26,4 +26,4 @@ try {
26
26
 
27
27
  export { worker, workerMsgId, workerName, workerPath };
28
28
 
29
- //# sourceMappingURL=table.worker-1bc9c170.js.map
29
+ //# sourceMappingURL=table.worker-8e04f768.js.map
@@ -0,0 +1 @@
1
+ {"file":"table.worker-8e04f768.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
@@ -1 +1 @@
1
- {"version":3,"names":["appGlobalScript","async","globalThis","window","docEle","document","documentElement","addEventListener","classList","add","docIsReady","contains","dispatchEvent","CustomEvent","mutationO","MutationObserver","_","disconnect","observe","childList","subtree","attributes","globalScripts"],"sources":["src/global/script/global.ts","@stencil/core/internal/app-globals"],"sourcesContent":["export default async () => {\n if (\n globalThis.window &&\n 'MutationObserver' in globalThis.window &&\n globalThis['document']\n ) {\n // fire global 'ready' event when everything is hydrated\n\n const docEle = document.documentElement;\n\n window.addEventListener('appload', () => {\n docEle.classList.add('hydrated');\n });\n\n const docIsReady = () => {\n if (!docEle.classList.contains('hydrated')) return false;\n docEle.dispatchEvent(new CustomEvent('nanoComponentsReady'));\n return true;\n };\n\n if (!docIsReady()) {\n let mutationO = new MutationObserver((_) => {\n if (!docIsReady()) return;\n\n mutationO.disconnect();\n mutationO = null;\n });\n\n mutationO.observe(docEle, {\n childList: false,\n subtree: false,\n attributes: true,\n });\n }\n }\n};\n","import appGlobalScript from '/builds/Te2fj7s-/0/Digital/nano-components/packages/components/src/global/script/global.ts';\nexport const globalScripts = appGlobalScript;\n"],"mappings":";;;AAAA,MAAAA,EAAeC,UACb,GACEC,WAAWC,QACX,qBAAsBD,WAAWC,QACjCD,WAAW,YACX,CAGA,MAAME,EAASC,SAASC,gBAExBH,OAAOI,iBAAiB,WAAW,KACjCH,EAAOI,UAAUC,IAAI,WAAW,IAGlC,MAAMC,EAAa,KACjB,IAAKN,EAAOI,UAAUG,SAAS,YAAa,OAAO,MACnDP,EAAOQ,cAAc,IAAIC,YAAY,wBACrC,OAAO,IAAI,EAGb,IAAKH,IAAc,CACjB,IAAII,EAAY,IAAIC,kBAAkBC,IACpC,IAAKN,IAAc,OAEnBI,EAAUG,aACVH,EAAY,IAAI,IAGlBA,EAAUI,QAAQd,EAAQ,CACxBe,UAAW,MACXC,QAAS,MACTC,WAAY,M,IC9BR,MAACC,EAAgBtB,S","ignoreList":[]}
1
+ {"version":3,"names":["appGlobalScript","async","globalThis","window","docEle","document","documentElement","addEventListener","classList","add","docIsReady","contains","dispatchEvent","CustomEvent","mutationO","MutationObserver","_","disconnect","observe","childList","subtree","attributes","globalScripts"],"sources":["src/global/script/global.ts","@stencil/core/internal/app-globals"],"sourcesContent":["export default async () => {\n if (\n globalThis.window &&\n 'MutationObserver' in globalThis.window &&\n globalThis['document']\n ) {\n // fire global 'ready' event when everything is hydrated\n\n const docEle = document.documentElement;\n\n window.addEventListener('appload', () => {\n docEle.classList.add('hydrated');\n });\n\n const docIsReady = () => {\n if (!docEle.classList.contains('hydrated')) return false;\n docEle.dispatchEvent(new CustomEvent('nanoComponentsReady'));\n return true;\n };\n\n if (!docIsReady()) {\n let mutationO = new MutationObserver((_) => {\n if (!docIsReady()) return;\n\n mutationO.disconnect();\n mutationO = null;\n });\n\n mutationO.observe(docEle, {\n childList: false,\n subtree: false,\n attributes: true,\n });\n }\n }\n};\n","import appGlobalScript from '/builds/6SyqsxUA/0/Digital/nano-components/packages/components/src/global/script/global.ts';\nexport const globalScripts = appGlobalScript;\n"],"mappings":";;;AAAA,MAAAA,EAAeC,UACb,GACEC,WAAWC,QACX,qBAAsBD,WAAWC,QACjCD,WAAW,YACX,CAGA,MAAME,EAASC,SAASC,gBAExBH,OAAOI,iBAAiB,WAAW,KACjCH,EAAOI,UAAUC,IAAI,WAAW,IAGlC,MAAMC,EAAa,KACjB,IAAKN,EAAOI,UAAUG,SAAS,YAAa,OAAO,MACnDP,EAAOQ,cAAc,IAAIC,YAAY,wBACrC,OAAO,IAAI,EAGb,IAAKH,IAAc,CACjB,IAAII,EAAY,IAAIC,kBAAkBC,IACpC,IAAKN,IAAc,OAEnBI,EAAUG,aACVH,EAAY,IAAI,IAGlBA,EAAUI,QAAQd,EAAQ,CACxBe,UAAW,MACXC,QAAS,MACTC,WAAY,M,IC9BR,MAACC,EAAgBtB,S","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
- import{r as e,c,g as n,a as o}from"./index-6cc72cd9.js";import{f as a}from"./focus-visible-e5f02c46.js";import{c as s}from"./theme-d553c17a.js";import{t as i,h as r}from"./renderer-4bc3e2dc.js";const t='.sc-nano-checkbox-h{box-sizing:border-box}*.sc-nano-checkbox,*.sc-nano-checkbox::before,*.sc-nano-checkbox::after{box-sizing:border-box}[hidden].sc-nano-checkbox{display:none !important}.sc-nano-checkbox-h{box-sizing:border-box}*.sc-nano-checkbox,*.sc-nano-checkbox::before,*.sc-nano-checkbox::after{box-sizing:border-box}[hidden].sc-nano-checkbox{display:none !important}.sc-nano-checkbox-h{--focus-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));--invalid-shadow:0 0 0 0.1875rem #ef4135;--padding:initial;--check-bg-color:#fff;--check-border-color:#b5aea7;--check-border-size:1px;--check-border-style:var(--check-border-size) solid var(--check-border-color);--check-checked-bg-color:#455556;--check-checked-border-color:#455556;--check-checked-higlight-color:#fff;--check-base-size:inherit;--label-spacing:10px 0;--tagbox-rgb:144 198 231;--tagbox-border-color:rgb(var(--tagbox-rgb) / 50%);--tagbox-bg-color:rgb(var(--tagbox-rgb) / 20%);--tagbox-border-radius:0;--segment-color:#007495;--segment-border-radius:3px;--segment-shadow:0 1px 4px rgb(0 0 0 / 20%);--cb-border-radius:2px;--radio-border-radius:50%;--switch-inactive-color:rgb(181 174 167 / 70%);--switch-active-color:#007495;display:inline-block;max-inline-size:100%}.sc-nano-checkbox-h *.sc-nano-checkbox{box-sizing:inherit}[type=tag].sc-nano-checkbox-h{text-transform:uppercase;--control-padding:0.2rem 1rem}[type=radio][checked].sc-nano-checkbox-h:not([checked=false]){--check-border-size:0.3125em}[type=segment].sc-nano-checkbox-h{--check-border-style:none;--control-padding:0.7em 1em 0.7em 1em}[type=segment-pill].sc-nano-checkbox-h{--check-border-color:rgba(181, 174, 167, 0.5);--segment-border-radius:5px;--control-padding:0.7em 1em 0.7em 1em}.nano-color.sc-nano-checkbox-h{--tagbox-rgb:var(--nano-color-base-rgb);--focus-shadow:0 0 0 0.1875rem var(--nano-color-shade)}[checked].sc-nano-checkbox-h:not([checked=false]){--tagbox-border-color:rgb(var(--tagbox-rgb) / 80%);--tagbox-bg-color:rgb(var(--tagbox-rgb) / 50%)}[has-focus].sc-nano-checkbox-h:not([has-focus=false]){--cb-border-radius:5px}[disabled].sc-nano-checkbox-h:not([disabled=false]){opacity:0.7;--tagbox-rgb:104 117 118;--check-bg-color:rgba(104, 117, 118, 0.5);--check-checked-bg-color:rgba(104, 117, 118, 0.5);--segment-color:#455556}.nanocb.sc-nano-checkbox{padding:var(--padding);cursor:pointer;display:flex;align-items:center;line-height:1.2;position:relative}.nanocb__input.sc-nano-checkbox{border-radius:var(--cb-border-radius, 3px);font-size:var(--check-base-size);position:relative;block-size:1.5em;inline-size:1.5em;min-inline-size:1.5em;border:var(--check-border-style);box-shadow:0 1px 4px rgba(0, 0, 0, 0.2)}.nanocb__input.sc-nano-checkbox::before{border-radius:var(--cb-border-radius);position:absolute;content:"";inset-inline-start:calc(0.725em - var(--check-border-size));inset-block-start:calc(0.725em - var(--check-border-size));inline-size:0;block-size:0;border:2px solid var(--check-checked-higlight-color);transform:scale(0)}.nanocb__input--radio.sc-nano-checkbox{border-radius:var(--radio-border-radius);background-color:var(--check-bg-color)}.nanocb__input--checkbox.sc-nano-checkbox{background-color:var(--check-bg-color)}.nanocb__input--checkbox.sc-nano-checkbox::after{border-radius:var(--cb-border-radius);position:absolute;content:"";inset-inline-start:calc(0.825em - var(--check-border-size));inset-block-start:calc(0.825em - var(--check-border-size));block-size:0;inline-size:0;border:solid var(--check-checked-higlight-color);border-width:0 0.1875em 0.1875em 0;transform:rotate(0deg) scale(0);opacity:1;transition:all 0.15s ease-out}.nanocb--indeterminate.sc-nano-checkbox .nanocb__input--checkbox.sc-nano-checkbox::after{border-width:0 0 0.1875em}.nanocb__input--switch.sc-nano-checkbox{border-radius:1em !important;inline-size:2.4em;block-size:1.3em;background:var(--switch-inactive-color)}[type=switch].sc-nano-checkbox-h:not([disabled]) .nanocb__input--switch.sc-nano-checkbox:hover::after{scale:1.1 1}.nanocb__input--switch.sc-nano-checkbox::after{position:relative;content:"";display:block;border-radius:inherit;block-size:80%;inline-size:40%;background:var(--check-checked-higlight-color);transform-origin:left;inset-inline-start:6%;inset-block-start:10%;transition:0.1s ease scale, 0.15s ease left}.nanocb__input--segment.sc-nano-checkbox,.nanocb__input--segment-pill.sc-nano-checkbox{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nanocb__input--segment.sc-nano-checkbox::before,.nanocb__input--segment-pill.sc-nano-checkbox::before{display:none}.nanocb__input--tag.sc-nano-checkbox{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nanocb__input--tag.sc-nano-checkbox::before{display:none}.nanocb--invalid.sc-nano-checkbox:not(.nanocb--focused) .nanocb__input.sc-nano-checkbox{box-shadow:0 0 15px rgba(0, 0, 0, 0.2), var(--invalid-shadow)}.nanocb--invalid.sc-nano-checkbox:not(.nanocb--focused) .nanocb__input--tag.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox,.nanocb--invalid.sc-nano-checkbox:not(.nanocb--focused) .nanocb__input--segment.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox,.nanocb--invalid.sc-nano-checkbox:not(.nanocb--focused) .nanocb__input--segment-pill.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox{box-shadow:var(--invalid-shadow);z-index:1}.nanocb.sc-nano-checkbox input.sc-nano-checkbox{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:focus~.nanocb__input.sc-nano-checkbox{box-shadow:0 0 15px rgba(0, 0, 0, 0.2), var(--focus-shadow)}.nanocb.sc-nano-checkbox input.focus-visible.sc-nano-checkbox:focus~.nanocb__input--tag.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox,.nanocb.sc-nano-checkbox input.focus-visible.sc-nano-checkbox:focus~.nanocb__input--segment.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox,.nanocb.sc-nano-checkbox input.focus-visible.sc-nano-checkbox:focus~.nanocb__input--segment-pill.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox{box-shadow:var(--focus-shadow);z-index:1}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input.sc-nano-checkbox{border-radius:var(--cb-border-radius);background-color:var(--check-checked-bg-color);transform:rotate(0deg) scale(1);opacity:1;border-color:var(--check-checked-border-color)}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--segment.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox,.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--segment-pill.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox{color:var(--check-checked-higlight-color);background-color:var(--check-checked-bg-color);box-shadow:inset 0 3px 4px rgba(0, 0, 0, 0.2)}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--radio.sc-nano-checkbox{border-radius:var(--radio-border-radius);background-color:var(--check-checked-higlight-color)}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--radio.sc-nano-checkbox::after{border:solid var(--check-checked-border-color);border-width:0 0.125em 0.125em 0;opacity:0}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--radio.sc-nano-checkbox::before{border-radius:var(--radio-border-radius)}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--checkbox.sc-nano-checkbox::after{transform:rotate(45deg) scale(1);opacity:1;inset-inline-start:calc(0.575em - var(--check-border-size));inset-block-start:calc(0.2875em - var(--check-border-size));inline-size:0.375em;block-size:0.75em;border-radius:0}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--tag.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox::after{transform:rotate(45deg)}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--switch.sc-nano-checkbox{background:var(--switch-active-color)}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--switch.sc-nano-checkbox::after{inset-inline-start:56%;transform-origin:right}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:indeterminate~.nanocb__input--checkbox.sc-nano-checkbox{border-radius:var(--input-border-radius, 5px);background-color:var(--check-checked-bg-color);transform:rotate(0deg) scale(1);opacity:1;border:0.125em solid var(--check-checked-bg-color)}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:indeterminate~.nanocb__input--checkbox.sc-nano-checkbox::after{transform:scale(1);opacity:1;inset-inline-start:0.3125em;inset-block-start:0;inline-size:0.7em;block-size:0.7em;border-radius:0}.nanocb__label.sc-nano-checkbox{padding-inline:var(--label-spacing);padding-block:0;display:flex;align-items:center;line-height:1;flex:1;justify-content:space-between}.nanocb__label--segment.sc-nano-checkbox,.nanocb__label--segment-pill.sc-nano-checkbox{border:var(--check-border-style);border-radius:var(--segment-border-radius);box-shadow:var(--segment-shadow);display:inline-flex;padding:var(--control-padding);background:var(--check-bg-color);color:var(--segment-color);align-items:center;inline-size:100%}.sc-nano-checkbox-h:first-of-type .nanocb__label--segment-pill.sc-nano-checkbox{border-start-start-radius:var(--segment-border-radius);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--segment-border-radius);border-inline-end:none}.sc-nano-checkbox-h:not(:last-of-type):not(:first-of-type) .nanocb__label--segment-pill.sc-nano-checkbox{border-radius:0;border-inline-end:none}.sc-nano-checkbox-h:last-of-type .nanocb__label--segment-pill.sc-nano-checkbox{border-start-start-radius:0;border-start-end-radius:var(--segment-border-radius);border-end-end-radius:var(--segment-border-radius);border-end-start-radius:0}.sc-nano-checkbox-h:first-of-type:last-of-type .nanocb__label--segment-pill.sc-nano-checkbox{border-radius:var(--segment-border-radius);border:var(--check-border-style)}.nanocb__label--tag.sc-nano-checkbox{letter-spacing:2px;font-weight:400;font-size:0.65em;line-height:1.4;padding:var(--control-padding);border:2px solid #b5aea7;border-color:var(--tagbox-border-color);background-color:var(--tagbox-bg-color);transition:all 0.2s;border-radius:var(--cb-border-radius);inline-size:100%}.nanocb__label--tag.sc-nano-checkbox::after{content:"+";margin-inline:0.3125em 0;margin-block:0;font-weight:200;position:relative;font-family:inherit;font-size:1.8em;display:inline-block;transform:rotate(0deg);transform-origin:center}.nanocb__label--tag.sc-nano-checkbox span.sc-nano-checkbox{display:block}';const b=t;let h=0;const d=class{constructor(n){e(this,n);this.nanoChange=c(this,"nanoChange",7);this.nanoFocus=c(this,"nanoFocus",7);this.nanoBlur=c(this,"nanoBlur",7)}inputId=`nano-cb-${h++}`;input;get host(){return n(this)}inputType="checkbox";hasFocus=false;checked=false;async handleCheckedChange(){if(!this.input)return;this.input.checked=this.checked;if(this.inputType==="radio"&&this.name&&this.checked){const e=this.host.closest("form");let c;if(e){c=Array.from(e.querySelectorAll(`${i("nano-checkbox")}[name="${this.name}"]`))}else{c=Array.from(document.querySelectorAll(`${i("nano-checkbox")}[name="${this.name}"]`))?.filter((e=>!e.closest("form")))}c.map((e=>{if(e!==this.host)e.checked=false}))}this.nanoChange.emit({value:this.value,checked:this.checked})}disabled=false;value="on";name;required=false;type="checkbox";typeChange(){if(["checkbox","switch","tag"].includes(this.type))this.inputType="checkbox";else this.inputType="radio"}label;indeterminate=false;handleIndeterminateChange(){this.checked=false;this.input.indeterminate=this.indeterminate}get invalid(){return this._invalid}_invalid=false;get validityMessage(){if(!this.input)return"";return this.input.validationMessage}color;form;nanoChange;nanoFocus;nanoBlur;async getInputElement(){if(this.input)return this.input}async reportValidity(e=false){if(e)this.input.reportValidity();this._invalid=!this.input.validity.valid;return{isValid:!this.invalid,errorMessage:this.input.validationMessage}}async setError(e,c=true){if(!this.input)return;if(c)this._invalid=!!e.length;this.input.setCustomValidity(e)}async setFocus(){if(this.input){this.input.focus();a.force(this.input)}}async removeFocus(){if(this.input){this.input.blur();a.force(this.input,false)}}onReset(e){const c=this.form?document.querySelector("#"+this.form):this.host.closest("form");if(!c||e.target!==this.host.closest("form"))return;this.checked=false}handleInvalid=e=>{this._invalid=!e.target.validity.valid};handleChange=e=>{this.checked=e.target.checked;this.indeterminate=false};handleFocus=()=>{this.hasFocus=true;this.nanoFocus.emit()};handleBlur=()=>{this.hasFocus=false;this.nanoBlur.emit()};isRadioChecked(){requestAnimationFrame((()=>this.checked=this.input.checked))}componentWillLoad(){this.typeChange()}componentDidLoad(){this.input.indeterminate=this.indeterminate;this.isRadioChecked();a.observe(this.input)}disconnectedCallback(){a.unobserve(this.input)}render(){const e=this.inputId+"-lbl";return r(o,{key:"743ba20f7dc131a5df0dbef97f12682228b3a49d",class:{...s(this.color),"nano-checkbox":true}},r("label",{key:"9b0f1649bcf44a7685c3e1f91da816e7283f41e0",class:{nanocb:true,"nanocb--checked":this.checked,"nanocb--invalid":this.invalid,"nanocb--disabled":this.disabled,"nanocb--focused":this.hasFocus,"nanocb--indeterminate":this.indeterminate},htmlFor:this.inputId},r("input",{key:"77bac537123647d224667f66ef9d8a3ea732af9a",type:this.inputType,name:this.name,form:this.form,required:this.required,checked:this.checked,disabled:this.disabled,value:this.value,"aria-labelledby":e,onBlur:this.handleBlur,onFocus:this.handleFocus,onChange:this.handleChange,ref:e=>this.input=e,id:this.inputId,onInvalid:this.handleInvalid}),r("span",{key:"6ee7540510d902daaf303edcc2a677e9819d3b00",class:"nanocb__input nanocb__input--"+this.type}),r("div",{key:"0ea0aea0ca852394ae4a3ccc6eb998e990d61f01",id:e,class:"nanocb__label nanocb__label--"+this.type},this.label&&!!this.label.length&&r("span",{key:"a1b43b59fc067cba5fd22b87add0c5352666ca2f"},this.label),r("span",{key:"e2a1abe3e02c9a3deeda47430b164a0b0f03982b",hidden:this.label&&!!this.label.length},r("slot",{key:"30738b530444fd2051465eb6ff9098ebb06e2e88"})))))}static get watchers(){return{checked:["handleCheckedChange"],type:["typeChange"],indeterminate:["handleIndeterminateChange"]}}};d.style=b;export{d as nano_checkbox};
4
+ import{r as e,c as n,g as c,a as o}from"./index-6cc72cd9.js";import{f as a}from"./focus-visible-e5f02c46.js";import{c as s}from"./theme-d553c17a.js";import{t as i,h as r}from"./renderer-4bc3e2dc.js";const t='.sc-nano-checkbox-h{box-sizing:border-box}*.sc-nano-checkbox,*.sc-nano-checkbox::before,*.sc-nano-checkbox::after{box-sizing:border-box}[hidden].sc-nano-checkbox{display:none !important}.sc-nano-checkbox-h{box-sizing:border-box}*.sc-nano-checkbox,*.sc-nano-checkbox::before,*.sc-nano-checkbox::after{box-sizing:border-box}[hidden].sc-nano-checkbox{display:none !important}.sc-nano-checkbox-h{--focus-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));--invalid-shadow:0 0 0 0.1875rem #ef4135;--padding:initial;--check-bg-color:#fff;--check-border-color:#b5aea7;--check-border-size:1px;--check-border-style:var(--check-border-size) solid var(--check-border-color);--check-checked-bg-color:#455556;--check-checked-border-color:#455556;--check-checked-higlight-color:#fff;--check-base-size:inherit;--label-spacing:10px 0;--tagbox-rgb:144 198 231;--tagbox-border-color:rgb(var(--tagbox-rgb) / 50%);--tagbox-bg-color:rgb(var(--tagbox-rgb) / 20%);--tagbox-border-radius:0;--segment-color:#007495;--segment-border-radius:3px;--segment-shadow:0 1px 4px rgb(0 0 0 / 20%);--cb-border-radius:2px;--radio-border-radius:50%;--switch-inactive-color:rgb(181 174 167 / 70%);--switch-active-color:#007495;display:inline-block;max-inline-size:100%}.sc-nano-checkbox-h *.sc-nano-checkbox{box-sizing:inherit}[type=tag].sc-nano-checkbox-h{text-transform:uppercase;--control-padding:0.2rem 1rem}[type=radio][checked].sc-nano-checkbox-h:not([checked=false]){--check-border-size:0.3125em}[type=segment].sc-nano-checkbox-h{--check-border-style:none;--control-padding:0.7em 1em 0.7em 1em}[type=segment-pill].sc-nano-checkbox-h{--check-border-color:rgba(181, 174, 167, 0.5);--segment-border-radius:5px;--control-padding:0.7em 1em 0.7em 1em}.nano-color.sc-nano-checkbox-h{--tagbox-rgb:var(--nano-color-base-rgb);--focus-shadow:0 0 0 0.1875rem var(--nano-color-shade)}[checked].sc-nano-checkbox-h:not([checked=false]){--tagbox-border-color:rgb(var(--tagbox-rgb) / 80%);--tagbox-bg-color:rgb(var(--tagbox-rgb) / 50%)}[has-focus].sc-nano-checkbox-h:not([has-focus=false]){--cb-border-radius:5px}[disabled].sc-nano-checkbox-h:not([disabled=false]){opacity:0.7;--tagbox-rgb:104 117 118;--check-bg-color:rgba(104, 117, 118, 0.5);--check-checked-bg-color:rgba(104, 117, 118, 0.5);--segment-color:#455556}.nanocb.sc-nano-checkbox{padding:var(--padding);cursor:pointer;display:flex;align-items:center;line-height:1.2;position:relative}.nanocb__input.sc-nano-checkbox{border-radius:var(--cb-border-radius, 3px);font-size:var(--check-base-size);position:relative;block-size:1.5em;inline-size:1.5em;min-inline-size:1.5em;border:var(--check-border-style);box-shadow:0 1px 4px rgba(0, 0, 0, 0.2)}.nanocb__input.sc-nano-checkbox::before{border-radius:var(--cb-border-radius);position:absolute;content:"";inset-inline-start:calc(0.725em - var(--check-border-size));inset-block-start:calc(0.725em - var(--check-border-size));inline-size:0;block-size:0;border:2px solid var(--check-checked-higlight-color);transform:scale(0)}.nanocb__input--radio.sc-nano-checkbox{border-radius:var(--radio-border-radius);background-color:var(--check-bg-color)}.nanocb__input--checkbox.sc-nano-checkbox{background-color:var(--check-bg-color)}.nanocb__input--checkbox.sc-nano-checkbox::after{border-radius:var(--cb-border-radius);position:absolute;content:"";inset-inline-start:calc(0.825em - var(--check-border-size));inset-block-start:calc(0.825em - var(--check-border-size));block-size:0;inline-size:0;border:solid var(--check-checked-higlight-color);border-width:0 0.1875em 0.1875em 0;transform:rotate(0deg) scale(0);opacity:1;transition:all 0.15s ease-out}.nanocb--indeterminate.sc-nano-checkbox .nanocb__input--checkbox.sc-nano-checkbox::after{border-width:0 0 0.1875em}.nanocb__input--switch.sc-nano-checkbox{border-radius:1em !important;inline-size:2.4em;block-size:1.3em;background:var(--switch-inactive-color)}[type=switch].sc-nano-checkbox-h:not([disabled]) .nanocb__input--switch.sc-nano-checkbox:hover::after{scale:1.1 1}.nanocb__input--switch.sc-nano-checkbox::after{position:relative;content:"";display:block;border-radius:inherit;block-size:80%;inline-size:40%;background:var(--check-checked-higlight-color);transform-origin:left;inset-inline-start:6%;inset-block-start:10%;transition:0.1s ease scale, 0.15s ease left}.nanocb__input--segment.sc-nano-checkbox,.nanocb__input--segment-pill.sc-nano-checkbox{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nanocb__input--segment.sc-nano-checkbox::before,.nanocb__input--segment-pill.sc-nano-checkbox::before{display:none}.nanocb__input--tag.sc-nano-checkbox{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nanocb__input--tag.sc-nano-checkbox::before{display:none}.nanocb--invalid.sc-nano-checkbox:not(.nanocb--focused) .nanocb__input.sc-nano-checkbox{box-shadow:0 0 15px rgba(0, 0, 0, 0.2), var(--invalid-shadow)}.nanocb--invalid.sc-nano-checkbox:not(.nanocb--focused) .nanocb__input--tag.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox,.nanocb--invalid.sc-nano-checkbox:not(.nanocb--focused) .nanocb__input--segment.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox,.nanocb--invalid.sc-nano-checkbox:not(.nanocb--focused) .nanocb__input--segment-pill.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox{box-shadow:var(--invalid-shadow);z-index:1}.nanocb.sc-nano-checkbox input.sc-nano-checkbox{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:focus~.nanocb__input.sc-nano-checkbox{box-shadow:0 0 15px rgba(0, 0, 0, 0.2), var(--focus-shadow)}.nanocb.sc-nano-checkbox input.focus-visible.sc-nano-checkbox:focus~.nanocb__input--tag.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox,.nanocb.sc-nano-checkbox input.focus-visible.sc-nano-checkbox:focus~.nanocb__input--segment.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox,.nanocb.sc-nano-checkbox input.focus-visible.sc-nano-checkbox:focus~.nanocb__input--segment-pill.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox{box-shadow:var(--focus-shadow);z-index:1}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input.sc-nano-checkbox{border-radius:var(--cb-border-radius);background-color:var(--check-checked-bg-color);transform:rotate(0deg) scale(1);opacity:1;border-color:var(--check-checked-border-color)}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--segment.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox,.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--segment-pill.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox{color:var(--check-checked-higlight-color);background-color:var(--check-checked-bg-color);box-shadow:inset 0 3px 4px rgba(0, 0, 0, 0.2)}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--radio.sc-nano-checkbox{border-radius:var(--radio-border-radius);background-color:var(--check-checked-higlight-color)}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--radio.sc-nano-checkbox::after{border:solid var(--check-checked-border-color);border-width:0 0.125em 0.125em 0;opacity:0}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--radio.sc-nano-checkbox::before{border-radius:var(--radio-border-radius)}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--checkbox.sc-nano-checkbox::after{transform:rotate(45deg) scale(1);opacity:1;inset-inline-start:calc(0.575em - var(--check-border-size));inset-block-start:calc(0.2875em - var(--check-border-size));inline-size:0.375em;block-size:0.75em;border-radius:0}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--tag.sc-nano-checkbox+.nanocb__label.sc-nano-checkbox::after{transform:rotate(45deg)}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--switch.sc-nano-checkbox{background:var(--switch-active-color)}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:checked~.nanocb__input--switch.sc-nano-checkbox::after{inset-inline-start:56%;transform-origin:right}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:indeterminate~.nanocb__input--checkbox.sc-nano-checkbox{border-radius:var(--input-border-radius, 5px);background-color:var(--check-checked-bg-color);transform:rotate(0deg) scale(1);opacity:1;border:0.125em solid var(--check-checked-bg-color)}.nanocb.sc-nano-checkbox input.sc-nano-checkbox:indeterminate~.nanocb__input--checkbox.sc-nano-checkbox::after{transform:scale(1);opacity:1;inset-inline-start:0.3125em;inset-block-start:0;inline-size:0.7em;block-size:0.7em;border-radius:0}.nanocb__label.sc-nano-checkbox{padding-inline:var(--label-spacing);padding-block:0;display:flex;align-items:center;line-height:1;flex:1;justify-content:space-between}.nanocb__label--segment.sc-nano-checkbox,.nanocb__label--segment-pill.sc-nano-checkbox{border:var(--check-border-style);border-radius:var(--segment-border-radius);box-shadow:var(--segment-shadow);display:inline-flex;padding:var(--control-padding);background:var(--check-bg-color);color:var(--segment-color);align-items:center;inline-size:100%}.sc-nano-checkbox-h:first-of-type .nanocb__label--segment-pill.sc-nano-checkbox{border-start-start-radius:var(--segment-border-radius);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--segment-border-radius);border-inline-end:none}.sc-nano-checkbox-h:not(:last-of-type):not(:first-of-type) .nanocb__label--segment-pill.sc-nano-checkbox{border-radius:0;border-inline-end:none}.sc-nano-checkbox-h:last-of-type .nanocb__label--segment-pill.sc-nano-checkbox{border-start-start-radius:0;border-start-end-radius:var(--segment-border-radius);border-end-end-radius:var(--segment-border-radius);border-end-start-radius:0}.sc-nano-checkbox-h:first-of-type:last-of-type .nanocb__label--segment-pill.sc-nano-checkbox{border-radius:var(--segment-border-radius);border:var(--check-border-style)}.nanocb__label--tag.sc-nano-checkbox{letter-spacing:2px;font-weight:400;font-size:0.65em;line-height:1.4;padding:var(--control-padding);border:2px solid #b5aea7;border-color:var(--tagbox-border-color);background-color:var(--tagbox-bg-color);transition:all 0.2s;border-radius:var(--cb-border-radius);inline-size:100%}.nanocb__label--tag.sc-nano-checkbox::after{content:"+";margin-inline:0.3125em 0;margin-block:0;font-weight:200;position:relative;font-family:inherit;font-size:1.8em;display:inline-block;transform:rotate(0deg);transform-origin:center}.nanocb__label--tag.sc-nano-checkbox span.sc-nano-checkbox{display:block}';const b=t;let h=0;const d=class{constructor(c){e(this,c);this.nanoChange=n(this,"nanoChange",7);this.nanoFocus=n(this,"nanoFocus",7);this.nanoBlur=n(this,"nanoBlur",7)}inputId=`nano-cb-${h++}`;input;get host(){return c(this)}inputType="checkbox";hasFocus=false;checked=false;async handleCheckedChange(){if(!this.input)return;this.input.checked=this.checked;if(this.inputType==="radio"&&this.name&&this.checked&&this.host.isConnected){const e=this.host.closest("form");const n=this.host.getRootNode();let c;if(e){c=Array.from(e.querySelectorAll(`${i("nano-checkbox")}[name="${this.name}"]`))}else{c=Array.from(n.querySelectorAll(`${i("nano-checkbox")}[name="${this.name}"]`))?.filter((e=>!e.closest("form")))}c.map((e=>{if(e!==this.host)e.checked=false}))}this.nanoChange.emit({value:this.value,checked:this.checked})}disabled=false;value="on";name;required=false;type="checkbox";typeChange(){if(["checkbox","switch","tag"].includes(this.type))this.inputType="checkbox";else this.inputType="radio"}label;indeterminate=false;handleIndeterminateChange(){this.checked=false;this.input.indeterminate=this.indeterminate}get invalid(){return this._invalid}_invalid=false;get validityMessage(){if(!this.input)return"";return this.input.validationMessage}color;form;nanoChange;nanoFocus;nanoBlur;async getInputElement(){if(this.input)return this.input}async reportValidity(e=false){if(e)this.input.reportValidity();this._invalid=!this.input.validity.valid;return{isValid:!this.invalid,errorMessage:this.input.validationMessage}}async setError(e,n=true){if(!this.input)return;if(n)this._invalid=!!e.length;this.input.setCustomValidity(e)}async setFocus(){if(this.input){this.input.focus();a.force(this.input)}}async removeFocus(){if(this.input){this.input.blur();a.force(this.input,false)}}onReset(e){const n=this.form?document.querySelector("#"+this.form):this.host.closest("form");if(!n||e.target!==this.host.closest("form"))return;this.checked=false}handleInvalid=e=>{this._invalid=!e.target.validity.valid};handleChange=e=>{this.checked=e.target.checked;this.indeterminate=false};handleFocus=()=>{this.hasFocus=true;this.nanoFocus.emit()};handleBlur=()=>{this.hasFocus=false;this.nanoBlur.emit()};isRadioChecked(){requestAnimationFrame((()=>this.checked=this.input.checked))}componentWillLoad(){this.typeChange()}componentDidLoad(){this.input.indeterminate=this.indeterminate;this.isRadioChecked();a.observe(this.input)}disconnectedCallback(){a.unobserve(this.input)}render(){const e=this.inputId+"-lbl";return r(o,{key:"92eaee0287da5164176c1893add5d48ff518153a",class:{...s(this.color),"nano-checkbox":true}},r("label",{key:"5082a3b8114162d5b52e9f24abe031f8796665e2",class:{nanocb:true,"nanocb--checked":this.checked,"nanocb--invalid":this.invalid,"nanocb--disabled":this.disabled,"nanocb--focused":this.hasFocus,"nanocb--indeterminate":this.indeterminate},htmlFor:this.inputId},r("input",{key:"2b91ea2ac18ac260710202040db3f7a4574a1922",type:this.inputType,name:this.name,form:this.form,required:this.required,checked:this.checked,disabled:this.disabled,value:this.value,"aria-labelledby":e,onBlur:this.handleBlur,onFocus:this.handleFocus,onChange:this.handleChange,ref:e=>this.input=e,id:this.inputId,onInvalid:this.handleInvalid}),r("span",{key:"0594a16034577181d4f3b1801b08d1761bd4cfe8",class:"nanocb__input nanocb__input--"+this.type}),r("div",{key:"051e89cbd5aeabad7f6e70369a3f9316f86eb8f8",id:e,class:"nanocb__label nanocb__label--"+this.type},this.label&&!!this.label.length&&r("span",{key:"ddb4067806f185c0d564a0a54c7642a57313e482"},this.label),r("span",{key:"745cbff6863337008827893a7b451c4a31fb1e91",hidden:this.label&&!!this.label.length},r("slot",{key:"023db905814a76b115e2779d717932125c0bff4a"})))))}static get watchers(){return{checked:["handleCheckedChange"],type:["typeChange"],indeterminate:["handleIndeterminateChange"]}}};d.style=b;export{d as nano_checkbox};
5
5
  //# sourceMappingURL=nano-checkbox.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["checkboxCss","NanoCheckboxStyle0","checkboxIds","Checkbox","inputId","input","inputType","hasFocus","checked","handleCheckedChange","this","name","form","host","closest","ctrls","Array","from","querySelectorAll","transformTag","document","filter","radio","map","el","nanoChange","emit","value","disabled","required","type","typeChange","includes","label","indeterminate","handleIndeterminateChange","invalid","_invalid","validityMessage","validationMessage","color","nanoFocus","nanoBlur","getInputElement","reportValidity","validateFirst","validity","valid","isValid","errorMessage","setError","message","updateStatus","length","setCustomValidity","setFocus","focus","focusVisible","force","removeFocus","blur","onReset","e","querySelector","target","handleInvalid","ev","handleChange","handleFocus","handleBlur","isRadioChecked","requestAnimationFrame","componentWillLoad","componentDidLoad","observe","disconnectedCallback","unobserve","render","labelId","h","Host","key","class","createColorClasses","nanocb","htmlFor","onBlur","onFocus","onChange","ref","id","onInvalid","hidden"],"sources":["src/components/checkbox/checkbox.scss?tag=nano-checkbox&encapsulation=scoped","src/components/checkbox/checkbox.tsx"],"sourcesContent":["@use 'sass:map';\n@use '../../global/style/utilities' as mx;\n@use '../../global/style/nano-theme/tokens';\n\n:host {\n /**\n * @prop --control-invalid-style: Control box-shadow when invalid. Defaults to to #{tokens.$control-invalid-style};\n * @prop --focus-shadow: Control focus box-shadow. Defaults to to #{tokens.$control-focus-style};\n * @prop --padding: padding around radio and checkbox controls. Defaults to initial;\n * @prop --control-padding: padding around tag and segmented controls text. Various defaults.\n * @prop --check-bg-color: Initial Bg color of radio / checkbox controls. Changes for [checked] and [disabled] states. Defaults to #{map.get(tokens.$colors, white)};\n * @prop --check-border-color: initial border color. Defaults to #{map.get(tokens.$colors, palegrey)};\n * @prop --check-border-size: initial border size. Default to 1px;\n * @prop --check-border-style: Initial border style. Defaults to var(--check-border-size) solid var(--check-border-color);\n * @prop --check-checked-bg-color: Checked bg of controls (not tag). Defaults to #{map.get(tokens.$colors, darkgrey)};\n * @prop --check-checked-border-color: Checked border color of radio / checkbox controls. Defaults to #{map.get(tokens.$colors, darkgrey)};\n * @prop --check-checked-higlight-color: Checked forgrdound / icon color. Defaults to #{map.get(tokens.$colors, white)};\n * @prop --check-base-size: Relative scaling size for check controls. Defaults to to inherit;\n\n * @prop --cb-border-radius: Checkbox border radius. Defaults to to 2px and 5px on [has-focus];\n * @prop --radio-border-radius: Radio border radius. Defaults to to 50%;\n * @prop --tagbox-rgb: an rba list for tags which can be used to generate --tagbox-border-color and --tagbox-bg-color. Defaults to #{mx.color-to-rgb-list(map.get(tokens.$colors, lightblue))};\n * @prop --tagbox-border-color: Defaults to rgb(var(--tagbox-rgb) / 50%);\n * @prop --tagbox-bg-color: Defaults to rgb(var(--tagbox-rgb) / 10%);\n * @prop --segment-color: Segment, unselected text color. (selected color is --check-checked-higlight-color). Defaults to #{map.get(tokens.$colors, blue)};\n * @prop --segment-border-radius: Defaults to 3px;\n * @prop --segment-shadow: Defaults to 0 1px 4px rgb(0 0 0 / 20%);\n * @prop --switch-inactive-color: Defaults to rgb(#{mx.color-to-rgb-list(map.get(tokens.$colors, palegrey))} / 70%);\n * @prop --switch-active-color: Defaults to #{map.get(tokens.$colors, blue)};\n */\n\n --focus-shadow: #{tokens.$control-focus-style};\n --invalid-shadow: #{tokens.$control-focus-size + ' ' map.get(tokens.$colors, red)};\n --padding: initial;\n --check-bg-color: #{map.get(tokens.$colors, white)};\n --check-border-color: #{map.get(tokens.$colors, palegrey)};\n --check-border-size: 1px;\n --check-border-style: var(--check-border-size) solid var(--check-border-color);\n --check-checked-bg-color: #{map.get(tokens.$colors, darkgrey)};\n --check-checked-border-color: #{map.get(tokens.$colors, darkgrey)};\n --check-checked-higlight-color: #{map.get(tokens.$colors, white)};\n --check-base-size: inherit;\n --label-spacing: 10px 0;\n\n // type specific\n\n // tag\n --tagbox-rgb: #{mx.color-to-rgb-list(map.get(tokens.$colors, lightblue))};\n --tagbox-border-color: rgb(var(--tagbox-rgb) / 50%);\n --tagbox-bg-color: rgb(var(--tagbox-rgb) / 20%);\n --tagbox-border-radius: 0;\n\n // segment\n --segment-color: #{map.get(tokens.$colors, blue)};\n --segment-border-radius: 3px;\n --segment-shadow: 0 1px 4px rgb(0 0 0 / 20%);\n\n // cb / radio\n --cb-border-radius: 2px;\n --radio-border-radius: 50%;\n\n // switch\n --switch-inactive-color: rgb(#{mx.color-to-rgb-list(map.get(tokens.$colors, palegrey))} / 70%);\n --switch-active-color: #{map.get(tokens.$colors, blue)};\n\n display: inline-block;\n max-inline-size: 100%;\n\n * {\n box-sizing: inherit;\n }\n}\n\n:host([type='tag']) {\n text-transform: uppercase;\n\n --control-padding: 0.2rem 1rem;\n}\n\n:host([type='radio'][checked]):not([checked='false']) {\n --check-border-size: 0.3125em;\n}\n\n:host([type='segment']) {\n --check-border-style: none;\n --control-padding: 0.7em 1em 0.7em 1em;\n}\n\n:host([type='segment-pill']) {\n --check-border-color: #{rgba(map.get(tokens.$colors, palegrey), 0.5)};\n --segment-border-radius: 5px;\n --control-padding: 0.7em 1em 0.7em 1em;\n}\n\n:host(.nano-color) {\n --tagbox-rgb: var(--nano-color-base-rgb);\n --focus-shadow: #{tokens.$control-focus-size} var(--nano-color-shade);\n}\n\n:host([checked]:not([checked='false'])) {\n --tagbox-border-color: rgb(var(--tagbox-rgb) / 80%);\n --tagbox-bg-color: rgb(var(--tagbox-rgb) / 50%);\n}\n\n:host([has-focus]:not([has-focus='false'])) {\n --cb-border-radius: 5px;\n}\n\n:host([disabled]:not([disabled='false'])) {\n opacity: 0.7;\n\n --tagbox-rgb: #{mx.color-to-rgb-list(map.get(tokens.$colors, mediumgrey))};\n --check-bg-color: #{rgba(map.get(tokens.$colors, mediumgrey), 0.5)};\n --check-checked-bg-color: #{rgba(map.get(tokens.$colors, mediumgrey), 0.5)};\n --segment-color: #{map.get(tokens.$colors, darkgrey)};\n}\n\n.nanocb {\n padding: var(--padding);\n cursor: pointer;\n display: flex;\n align-items: center;\n line-height: 1.2;\n position: relative;\n\n // The mock, viewable 'input' control. Only relevant for controls where the label\n // is outside / separate from the UI control (e.g. checkbox, radio, switch).\n\n &__input {\n border-radius: var(--cb-border-radius, 3px);\n font-size: var(--check-base-size);\n position: relative;\n block-size: 1.5em;\n inline-size: 1.5em;\n min-inline-size: 1.5em;\n border: var(--check-border-style);\n box-shadow: 0 1px 4px rgb(0 0 0 / 20%);\n\n &::before {\n border-radius: var(--cb-border-radius);\n position: absolute;\n content: '';\n inset-inline-start: calc(0.725em - var(--check-border-size));\n inset-block-start: calc(0.725em - var(--check-border-size));\n inline-size: 0;\n block-size: 0;\n border: 2px solid var(--check-checked-higlight-color);\n transform: scale(0);\n }\n\n &--radio {\n border-radius: var(--radio-border-radius);\n background-color: var(--check-bg-color);\n }\n\n &--checkbox {\n background-color: var(--check-bg-color);\n\n &::after {\n border-radius: var(--cb-border-radius);\n position: absolute;\n content: '';\n inset-inline-start: calc(0.825em - var(--check-border-size));\n inset-block-start: calc(0.825em - var(--check-border-size));\n block-size: 0;\n inline-size: 0;\n border: solid var(--check-checked-higlight-color);\n border-width: 0 0.1875em 0.1875em 0;\n transform: rotate(0deg) scale(0);\n opacity: 1;\n transition: all 0.15s ease-out;\n\n .nanocb--indeterminate & {\n border-width: 0 0 0.1875em;\n }\n }\n }\n\n &--switch {\n border-radius: 1em !important;\n inline-size: 2.4em;\n block-size: 1.3em;\n background: var(--switch-inactive-color);\n\n :host([type=\"switch\"]:not([disabled])) & {\n &:hover::after {\n scale: 1.1 1;\n }\n }\n\n &::after {\n position: relative;\n content: '';\n display: block;\n border-radius: inherit;\n block-size: 80%;\n inline-size: 40%;\n background: var(--check-checked-higlight-color);\n transform-origin: left;\n inset-inline-start: 6%;\n inset-block-start: 10%;\n transition: .1s ease scale, .15s ease left;\n }\n }\n\n &--segment,\n &--segment-pill {\n @include mx.visually-hide();\n\n &::before {\n display: none;\n }\n }\n\n &--tag {\n @include mx.visually-hide();\n\n &::before {\n display: none;\n }\n }\n }\n\n &--invalid:not(.nanocb--focused) {\n .nanocb__input {\n box-shadow: 0 0 15px rgb(0 0 0 / 20%), var(--invalid-shadow);\n\n &--tag + .nanocb__label,\n &--segment + .nanocb__label,\n &--segment-pill + .nanocb__label {\n box-shadow: var(--invalid-shadow);\n z-index: 1;\n }\n }\n }\n\n // The 'real' input control which we hide but use it's state for display\n input {\n @include mx.visually-hide();\n\n &:focus ~ .nanocb__input {\n box-shadow: 0 0 15px rgb(0 0 0 / 20%), var(--focus-shadow);\n }\n\n &.focus-visible:focus ~ .nanocb__input {\n &--tag + .nanocb__label,\n &--segment + .nanocb__label,\n &--segment-pill + .nanocb__label {\n box-shadow: var(--focus-shadow);\n z-index: 1;\n }\n }\n\n &:checked ~ .nanocb__input {\n border-radius: var(--cb-border-radius);\n background-color: var(--check-checked-bg-color);\n transform: rotate(0deg) scale(1);\n opacity: 1;\n border-color: var(--check-checked-border-color);\n\n // segment / segment-pill active\n\n &--segment + .nanocb__label,\n &--segment-pill + .nanocb__label {\n color: var(--check-checked-higlight-color);\n background-color: var(--check-checked-bg-color);\n box-shadow: inset 0 3px 4px rgb(0 0 0 / 20%);\n }\n\n // radio active\n\n &--radio {\n border-radius: var(--radio-border-radius);\n background-color: var(--check-checked-higlight-color);\n\n &::after {\n border: solid var(--check-checked-border-color);\n border-width: 0 0.125em 0.125em 0;\n opacity: 0;\n }\n\n &::before {\n border-radius: var(--radio-border-radius);\n }\n }\n\n // checkbox active\n\n &--checkbox {\n &::after {\n transform: rotate(45deg) scale(1);\n opacity: 1;\n inset-inline-start: calc(0.575em - var(--check-border-size));\n inset-block-start: calc(0.2875em - var(--check-border-size));\n inline-size: 0.375em;\n block-size: 0.75em;\n border-radius: 0;\n }\n }\n\n // tag active\n\n &--tag + .nanocb__label::after {\n transform: rotate(45deg);\n }\n\n // switch active\n\n &--switch {\n background: var(--switch-active-color);\n\n &::after {\n inset-inline-start: 56%;\n transform-origin: right;\n }\n }\n }\n\n // indeterminate (only checkbox?)\n\n &:indeterminate ~ .nanocb__input--checkbox {\n border-radius: var(--input-border-radius, 5px);\n background-color: var(--check-checked-bg-color);\n transform: rotate(0deg) scale(1);\n opacity: 1;\n border: 0.125em solid var(--check-checked-bg-color);\n\n &::after {\n transform: scale(1);\n opacity: 1;\n inset-inline-start: 0.3125em;\n inset-block-start: 0;\n inline-size: 0.7em;\n block-size: 0.7em;\n border-radius: 0;\n }\n }\n }\n\n // The label\n &__label {\n padding-inline: var(--label-spacing);\n padding-block: 0;\n display: flex;\n align-items: center;\n line-height: 1;\n flex: 1;\n justify-content: space-between;\n\n &--segment,\n &--segment-pill {\n border: var(--check-border-style);\n border-radius: var(--segment-border-radius);\n box-shadow: var(--segment-shadow);\n display: inline-flex;\n padding: var(--control-padding);\n background: var(--check-bg-color);\n color: var(--segment-color);\n align-items: center;\n inline-size: 100%;\n }\n\n &--segment-pill {\n // first\n :host(:first-of-type) & {\n border-start-start-radius: var(--segment-border-radius);\n border-start-end-radius: 0;\n border-end-end-radius: 0;\n border-end-start-radius: var(--segment-border-radius);\n border-inline-end: none;\n }\n\n // middle\n :host(:not(:last-of-type):not(:first-of-type)) & {\n border-radius: 0;\n border-inline-end: none;\n }\n\n // last\n :host(:last-of-type) & {\n border-start-start-radius: 0;\n border-start-end-radius: var(--segment-border-radius);\n border-end-end-radius: var(--segment-border-radius);\n border-end-start-radius: 0;\n }\n\n // single\n :host(:first-of-type:last-of-type) & {\n border-radius: var(--segment-border-radius);\n border: var(--check-border-style);\n }\n }\n\n &--tag {\n letter-spacing: 2px;\n font-weight: 400;\n font-size: 0.65em;\n line-height: 1.4;\n padding: var(--control-padding);\n border: 2px solid #b5aea7;\n border-color: var(--tagbox-border-color);\n background-color: var(--tagbox-bg-color);\n transition: all 0.2s;\n border-radius: var(--cb-border-radius);\n inline-size: 100%;\n\n &::after {\n content: '+';\n margin-inline: 0.3125em 0;\n margin-block: 0;\n font-weight: 200;\n position: relative;\n font-family: inherit;\n font-size: 1.8em;\n display: inline-block;\n transform: rotate(0deg);\n transform-origin: center;\n }\n\n span {\n display: block;\n }\n }\n }\n}\n","import {\n Component,\n Prop,\n Event,\n EventEmitter,\n ComponentInterface,\n State,\n Watch,\n Method,\n Element,\n Host,\n Listen,\n} from '@stencil/core';\nimport { focusVisible } from '../../utils/focus-visible';\nimport { createColorClasses } from '../../utils/theme';\nimport { transformTag, h } from '../../utils/renderer';\nimport { CheckboxChangeEventDetail } from './checkbox-interface';\nimport type { ControlValidity, Color } from '../../types/shared';\n\nlet checkboxIds = 0;\n\n/**\n * `nano-checkbox` is used to let a user choose one or more options from a limited number of options.\n * They appear as checked when activated.\n * They can be checked by mouse, keyboard, touch or programmatically by setting the checked property.\n *\n * @slot - if you do not set a label attribute, you can use this slot for more complex markup\n */\n@Component({\n tag: 'nano-checkbox',\n styleUrl: 'checkbox.scss',\n scoped: true,\n})\nexport class Checkbox implements ComponentInterface {\n private inputId = `nano-cb-${checkboxIds++}`;\n private input: HTMLInputElement;\n\n @Element() private host: HTMLNanoCheckboxElement;\n @State() inputType: 'checkbox' | 'radio' = 'checkbox';\n\n /** @internal */\n @Prop({ mutable: true, reflect: true }) hasFocus = false;\n\n /**\n * checked property that can be used to get/set the value. accepts only boolean values\n */\n @Prop({ mutable: true, reflect: true }) checked: boolean = false;\n\n @Watch('checked')\n async handleCheckedChange() {\n if (!this.input) return;\n\n this.input.checked = this.checked;\n\n if (this.inputType === 'radio' && this.name && this.checked) {\n const form = this.host.closest('form');\n let ctrls: Element[];\n if (form) {\n ctrls = Array.from(\n form.querySelectorAll(\n `${transformTag('nano-checkbox')}[name=\"${this.name}\"]`\n )\n );\n } else {\n ctrls = Array.from(\n document.querySelectorAll(\n `${transformTag('nano-checkbox')}[name=\"${this.name}\"]`\n )\n )?.filter((radio) => !radio.closest('form'));\n }\n ctrls.map((el: HTMLNanoCheckboxElement) => {\n if (el !== this.host) el.checked = false;\n });\n }\n this.nanoChange.emit({ value: this.value, checked: this.checked });\n }\n\n /**\n * If `true`, the user cannot interact with the checkbox.\n */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /**\n * The value of a checkbox is analogous to the value of an `<input type='checkbox'>`,\n * it's only present when `checked` is true.\n */\n @Prop({ reflect: true }) value: string = 'on';\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop({ reflect: true }) name: string;\n\n /**\n * Set to true to make the field required.\n */\n @Prop({ reflect: true }) required: boolean = false;\n\n /**\n * Controls the underlying field type and style.\n */\n @Prop({ reflect: true }) type:\n | 'radio'\n | 'checkbox'\n | 'tag'\n | 'segment'\n | 'switch'\n | 'segment-pill' = 'checkbox';\n\n @Watch('type')\n typeChange() {\n if (['checkbox', 'switch', 'tag'].includes(this.type))\n this.inputType = 'checkbox';\n else this.inputType = 'radio';\n }\n\n /**\n * label property that can be used to set the label text. Alternatively you may use a label slot.\n */\n @Prop() label?: string;\n\n /**\n * If `true`, the checkbox will visually appear as indeterminate (only relevant for type=\"checkbox\")\n */\n @Prop({ mutable: true, reflect: true }) indeterminate: boolean = false;\n\n @Watch('indeterminate')\n handleIndeterminateChange() {\n this.checked = false;\n this.input.indeterminate = this.indeterminate;\n }\n\n /**\n * This will be true when the control is in an invalid state.\n * Validity is determined by the `required` prop. Or if custom validity message is set. @readonly\n */\n @Prop({ reflect: true })\n get invalid() {\n return this._invalid;\n }\n @State() _invalid = false;\n\n /**\n * Current validation message - if any. @readonly\n */\n @Prop()\n get validityMessage() {\n if (!this.input) return '';\n return this.input.validationMessage;\n }\n\n /**\n * Color to use from your application's color palette.\n */\n @Prop() color?: Color;\n\n /**\n * The form element to associate the input with (its form owner). Must be the id of a form.\n */\n @Prop() form?: string | null;\n\n /**\n * Emited when the checkbox is toggled\n */\n @Event() nanoChange: EventEmitter<CheckboxChangeEventDetail>;\n\n /**\n * Emited when the checkbox is focused\n */\n @Event() nanoFocus: EventEmitter;\n\n /**\n * Emited when the checkbox is blurred\n */\n @Event() nanoBlur: EventEmitter;\n\n // public methods\n\n /**\n * Returns the native input control\n * @returns the native input control\n */\n @Method()\n async getInputElement() {\n if (this.input) return this.input;\n }\n\n /**\n * Get the current state of the control.\n * @param validateFirst - perform validation first before reporting\n * @returns `Promise<{ isValid: boolean, errorMessage: string }>`\n */\n @Method()\n async reportValidity(\n validateFirst: boolean = false\n ): Promise<ControlValidity> {\n if (validateFirst) this.input.reportValidity();\n this._invalid = !this.input.validity.valid;\n\n return {\n isValid: !this.invalid,\n errorMessage: this.input.validationMessage,\n };\n }\n\n /**\n * Sets a custom validation message.\n * If `message` is not empty, the field will be considered invalid. Use in conjunction with `nano-checkbox-group`\n */\n @Method()\n async setError(message: string, updateStatus = true) {\n if (!this.input) return;\n if (updateStatus) this._invalid = !!message.length;\n this.input.setCustomValidity(message);\n }\n\n /**\n * Sets focus on the checkbox.\n */\n @Method()\n async setFocus() {\n if (this.input) {\n this.input.focus();\n focusVisible.force(this.input);\n }\n }\n\n /**\n * Removes focus from the checkbox.\n */\n @Method()\n async removeFocus() {\n if (this.input) {\n this.input.blur();\n focusVisible.force(this.input, false);\n }\n }\n\n @Listen('reset', { target: 'body' })\n onReset(e) {\n const form = this.form\n ? document.querySelector('#' + this.form)\n : this.host.closest('form');\n if (!form || e.target !== this.host.closest('form')) return;\n\n this.checked = false;\n }\n\n // private handlers\n\n private handleInvalid = (ev: Event) => {\n this._invalid = !(ev.target as HTMLInputElement).validity.valid;\n };\n\n private handleChange = (ev: InputEvent) => {\n this.checked = (ev.target as HTMLInputElement).checked;\n this.indeterminate = false;\n };\n\n private handleFocus = () => {\n this.hasFocus = true;\n this.nanoFocus.emit();\n };\n\n private handleBlur = () => {\n this.hasFocus = false;\n this.nanoBlur.emit();\n };\n\n /* Although many radio components can be 'checked',\n the underlying control may not be. Check */\n private isRadioChecked() {\n requestAnimationFrame(() => (this.checked = this.input.checked));\n }\n\n // Stencil hooks\n\n componentWillLoad() {\n this.typeChange();\n }\n\n componentDidLoad() {\n this.input.indeterminate = this.indeterminate;\n this.isRadioChecked();\n focusVisible.observe(this.input);\n }\n\n disconnectedCallback() {\n focusVisible.unobserve(this.input);\n }\n\n render() {\n const labelId = this.inputId + '-lbl';\n\n return (\n <Host\n class={{ ...createColorClasses(this.color), 'nano-checkbox': true }}\n >\n <label\n class={{\n nanocb: true,\n 'nanocb--checked': this.checked,\n 'nanocb--invalid': this.invalid,\n 'nanocb--disabled': this.disabled,\n 'nanocb--focused': this.hasFocus,\n 'nanocb--indeterminate': this.indeterminate,\n }}\n htmlFor={this.inputId}\n >\n <input\n type={this.inputType}\n name={this.name}\n form={this.form}\n required={this.required}\n checked={this.checked}\n disabled={this.disabled}\n value={this.value}\n aria-labelledby={labelId}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onChange={this.handleChange}\n ref={(input) => (this.input = input)}\n id={this.inputId}\n onInvalid={this.handleInvalid}\n />\n <span class={'nanocb__input nanocb__input--' + this.type}></span>\n\n <div id={labelId} class={'nanocb__label nanocb__label--' + this.type}>\n {this.label && !!this.label.length && <span>{this.label}</span>}\n <span hidden={this.label && !!this.label.length}>\n <slot />\n </span>\n </div>\n </label>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["checkboxCss","NanoCheckboxStyle0","checkboxIds","Checkbox","inputId","input","inputType","hasFocus","checked","handleCheckedChange","this","name","host","isConnected","form","closest","root","getRootNode","ctrls","Array","from","querySelectorAll","transformTag","filter","radio","map","el","nanoChange","emit","value","disabled","required","type","typeChange","includes","label","indeterminate","handleIndeterminateChange","invalid","_invalid","validityMessage","validationMessage","color","nanoFocus","nanoBlur","getInputElement","reportValidity","validateFirst","validity","valid","isValid","errorMessage","setError","message","updateStatus","length","setCustomValidity","setFocus","focus","focusVisible","force","removeFocus","blur","onReset","e","document","querySelector","target","handleInvalid","ev","handleChange","handleFocus","handleBlur","isRadioChecked","requestAnimationFrame","componentWillLoad","componentDidLoad","observe","disconnectedCallback","unobserve","render","labelId","h","Host","key","class","createColorClasses","nanocb","htmlFor","onBlur","onFocus","onChange","ref","id","onInvalid","hidden"],"sources":["src/components/checkbox/checkbox.scss?tag=nano-checkbox&encapsulation=scoped","src/components/checkbox/checkbox.tsx"],"sourcesContent":["@use 'sass:map';\n@use '../../global/style/utilities' as mx;\n@use '../../global/style/nano-theme/tokens';\n\n:host {\n /**\n * @prop --control-invalid-style: Control box-shadow when invalid. Defaults to to #{tokens.$control-invalid-style};\n * @prop --focus-shadow: Control focus box-shadow. Defaults to to #{tokens.$control-focus-style};\n * @prop --padding: padding around radio and checkbox controls. Defaults to initial;\n * @prop --control-padding: padding around tag and segmented controls text. Various defaults.\n * @prop --check-bg-color: Initial Bg color of radio / checkbox controls. Changes for [checked] and [disabled] states. Defaults to #{map.get(tokens.$colors, white)};\n * @prop --check-border-color: initial border color. Defaults to #{map.get(tokens.$colors, palegrey)};\n * @prop --check-border-size: initial border size. Default to 1px;\n * @prop --check-border-style: Initial border style. Defaults to var(--check-border-size) solid var(--check-border-color);\n * @prop --check-checked-bg-color: Checked bg of controls (not tag). Defaults to #{map.get(tokens.$colors, darkgrey)};\n * @prop --check-checked-border-color: Checked border color of radio / checkbox controls. Defaults to #{map.get(tokens.$colors, darkgrey)};\n * @prop --check-checked-higlight-color: Checked forgrdound / icon color. Defaults to #{map.get(tokens.$colors, white)};\n * @prop --check-base-size: Relative scaling size for check controls. Defaults to to inherit;\n\n * @prop --cb-border-radius: Checkbox border radius. Defaults to to 2px and 5px on [has-focus];\n * @prop --radio-border-radius: Radio border radius. Defaults to to 50%;\n * @prop --tagbox-rgb: an rba list for tags which can be used to generate --tagbox-border-color and --tagbox-bg-color. Defaults to #{mx.color-to-rgb-list(map.get(tokens.$colors, lightblue))};\n * @prop --tagbox-border-color: Defaults to rgb(var(--tagbox-rgb) / 50%);\n * @prop --tagbox-bg-color: Defaults to rgb(var(--tagbox-rgb) / 10%);\n * @prop --segment-color: Segment, unselected text color. (selected color is --check-checked-higlight-color). Defaults to #{map.get(tokens.$colors, blue)};\n * @prop --segment-border-radius: Defaults to 3px;\n * @prop --segment-shadow: Defaults to 0 1px 4px rgb(0 0 0 / 20%);\n * @prop --switch-inactive-color: Defaults to rgb(#{mx.color-to-rgb-list(map.get(tokens.$colors, palegrey))} / 70%);\n * @prop --switch-active-color: Defaults to #{map.get(tokens.$colors, blue)};\n */\n\n --focus-shadow: #{tokens.$control-focus-style};\n --invalid-shadow: #{tokens.$control-focus-size + ' ' map.get(tokens.$colors, red)};\n --padding: initial;\n --check-bg-color: #{map.get(tokens.$colors, white)};\n --check-border-color: #{map.get(tokens.$colors, palegrey)};\n --check-border-size: 1px;\n --check-border-style: var(--check-border-size) solid var(--check-border-color);\n --check-checked-bg-color: #{map.get(tokens.$colors, darkgrey)};\n --check-checked-border-color: #{map.get(tokens.$colors, darkgrey)};\n --check-checked-higlight-color: #{map.get(tokens.$colors, white)};\n --check-base-size: inherit;\n --label-spacing: 10px 0;\n\n // type specific\n\n // tag\n --tagbox-rgb: #{mx.color-to-rgb-list(map.get(tokens.$colors, lightblue))};\n --tagbox-border-color: rgb(var(--tagbox-rgb) / 50%);\n --tagbox-bg-color: rgb(var(--tagbox-rgb) / 20%);\n --tagbox-border-radius: 0;\n\n // segment\n --segment-color: #{map.get(tokens.$colors, blue)};\n --segment-border-radius: 3px;\n --segment-shadow: 0 1px 4px rgb(0 0 0 / 20%);\n\n // cb / radio\n --cb-border-radius: 2px;\n --radio-border-radius: 50%;\n\n // switch\n --switch-inactive-color: rgb(#{mx.color-to-rgb-list(map.get(tokens.$colors, palegrey))} / 70%);\n --switch-active-color: #{map.get(tokens.$colors, blue)};\n\n display: inline-block;\n max-inline-size: 100%;\n\n * {\n box-sizing: inherit;\n }\n}\n\n:host([type='tag']) {\n text-transform: uppercase;\n\n --control-padding: 0.2rem 1rem;\n}\n\n:host([type='radio'][checked]):not([checked='false']) {\n --check-border-size: 0.3125em;\n}\n\n:host([type='segment']) {\n --check-border-style: none;\n --control-padding: 0.7em 1em 0.7em 1em;\n}\n\n:host([type='segment-pill']) {\n --check-border-color: #{rgba(map.get(tokens.$colors, palegrey), 0.5)};\n --segment-border-radius: 5px;\n --control-padding: 0.7em 1em 0.7em 1em;\n}\n\n:host(.nano-color) {\n --tagbox-rgb: var(--nano-color-base-rgb);\n --focus-shadow: #{tokens.$control-focus-size} var(--nano-color-shade);\n}\n\n:host([checked]:not([checked='false'])) {\n --tagbox-border-color: rgb(var(--tagbox-rgb) / 80%);\n --tagbox-bg-color: rgb(var(--tagbox-rgb) / 50%);\n}\n\n:host([has-focus]:not([has-focus='false'])) {\n --cb-border-radius: 5px;\n}\n\n:host([disabled]:not([disabled='false'])) {\n opacity: 0.7;\n\n --tagbox-rgb: #{mx.color-to-rgb-list(map.get(tokens.$colors, mediumgrey))};\n --check-bg-color: #{rgba(map.get(tokens.$colors, mediumgrey), 0.5)};\n --check-checked-bg-color: #{rgba(map.get(tokens.$colors, mediumgrey), 0.5)};\n --segment-color: #{map.get(tokens.$colors, darkgrey)};\n}\n\n.nanocb {\n padding: var(--padding);\n cursor: pointer;\n display: flex;\n align-items: center;\n line-height: 1.2;\n position: relative;\n\n // The mock, viewable 'input' control. Only relevant for controls where the label\n // is outside / separate from the UI control (e.g. checkbox, radio, switch).\n\n &__input {\n border-radius: var(--cb-border-radius, 3px);\n font-size: var(--check-base-size);\n position: relative;\n block-size: 1.5em;\n inline-size: 1.5em;\n min-inline-size: 1.5em;\n border: var(--check-border-style);\n box-shadow: 0 1px 4px rgb(0 0 0 / 20%);\n\n &::before {\n border-radius: var(--cb-border-radius);\n position: absolute;\n content: '';\n inset-inline-start: calc(0.725em - var(--check-border-size));\n inset-block-start: calc(0.725em - var(--check-border-size));\n inline-size: 0;\n block-size: 0;\n border: 2px solid var(--check-checked-higlight-color);\n transform: scale(0);\n }\n\n &--radio {\n border-radius: var(--radio-border-radius);\n background-color: var(--check-bg-color);\n }\n\n &--checkbox {\n background-color: var(--check-bg-color);\n\n &::after {\n border-radius: var(--cb-border-radius);\n position: absolute;\n content: '';\n inset-inline-start: calc(0.825em - var(--check-border-size));\n inset-block-start: calc(0.825em - var(--check-border-size));\n block-size: 0;\n inline-size: 0;\n border: solid var(--check-checked-higlight-color);\n border-width: 0 0.1875em 0.1875em 0;\n transform: rotate(0deg) scale(0);\n opacity: 1;\n transition: all 0.15s ease-out;\n\n .nanocb--indeterminate & {\n border-width: 0 0 0.1875em;\n }\n }\n }\n\n &--switch {\n border-radius: 1em !important;\n inline-size: 2.4em;\n block-size: 1.3em;\n background: var(--switch-inactive-color);\n\n :host([type=\"switch\"]:not([disabled])) & {\n &:hover::after {\n scale: 1.1 1;\n }\n }\n\n &::after {\n position: relative;\n content: '';\n display: block;\n border-radius: inherit;\n block-size: 80%;\n inline-size: 40%;\n background: var(--check-checked-higlight-color);\n transform-origin: left;\n inset-inline-start: 6%;\n inset-block-start: 10%;\n transition: .1s ease scale, .15s ease left;\n }\n }\n\n &--segment,\n &--segment-pill {\n @include mx.visually-hide();\n\n &::before {\n display: none;\n }\n }\n\n &--tag {\n @include mx.visually-hide();\n\n &::before {\n display: none;\n }\n }\n }\n\n &--invalid:not(.nanocb--focused) {\n .nanocb__input {\n box-shadow: 0 0 15px rgb(0 0 0 / 20%), var(--invalid-shadow);\n\n &--tag + .nanocb__label,\n &--segment + .nanocb__label,\n &--segment-pill + .nanocb__label {\n box-shadow: var(--invalid-shadow);\n z-index: 1;\n }\n }\n }\n\n // The 'real' input control which we hide but use it's state for display\n input {\n @include mx.visually-hide();\n\n &:focus ~ .nanocb__input {\n box-shadow: 0 0 15px rgb(0 0 0 / 20%), var(--focus-shadow);\n }\n\n &.focus-visible:focus ~ .nanocb__input {\n &--tag + .nanocb__label,\n &--segment + .nanocb__label,\n &--segment-pill + .nanocb__label {\n box-shadow: var(--focus-shadow);\n z-index: 1;\n }\n }\n\n &:checked ~ .nanocb__input {\n border-radius: var(--cb-border-radius);\n background-color: var(--check-checked-bg-color);\n transform: rotate(0deg) scale(1);\n opacity: 1;\n border-color: var(--check-checked-border-color);\n\n // segment / segment-pill active\n\n &--segment + .nanocb__label,\n &--segment-pill + .nanocb__label {\n color: var(--check-checked-higlight-color);\n background-color: var(--check-checked-bg-color);\n box-shadow: inset 0 3px 4px rgb(0 0 0 / 20%);\n }\n\n // radio active\n\n &--radio {\n border-radius: var(--radio-border-radius);\n background-color: var(--check-checked-higlight-color);\n\n &::after {\n border: solid var(--check-checked-border-color);\n border-width: 0 0.125em 0.125em 0;\n opacity: 0;\n }\n\n &::before {\n border-radius: var(--radio-border-radius);\n }\n }\n\n // checkbox active\n\n &--checkbox {\n &::after {\n transform: rotate(45deg) scale(1);\n opacity: 1;\n inset-inline-start: calc(0.575em - var(--check-border-size));\n inset-block-start: calc(0.2875em - var(--check-border-size));\n inline-size: 0.375em;\n block-size: 0.75em;\n border-radius: 0;\n }\n }\n\n // tag active\n\n &--tag + .nanocb__label::after {\n transform: rotate(45deg);\n }\n\n // switch active\n\n &--switch {\n background: var(--switch-active-color);\n\n &::after {\n inset-inline-start: 56%;\n transform-origin: right;\n }\n }\n }\n\n // indeterminate (only checkbox?)\n\n &:indeterminate ~ .nanocb__input--checkbox {\n border-radius: var(--input-border-radius, 5px);\n background-color: var(--check-checked-bg-color);\n transform: rotate(0deg) scale(1);\n opacity: 1;\n border: 0.125em solid var(--check-checked-bg-color);\n\n &::after {\n transform: scale(1);\n opacity: 1;\n inset-inline-start: 0.3125em;\n inset-block-start: 0;\n inline-size: 0.7em;\n block-size: 0.7em;\n border-radius: 0;\n }\n }\n }\n\n // The label\n &__label {\n padding-inline: var(--label-spacing);\n padding-block: 0;\n display: flex;\n align-items: center;\n line-height: 1;\n flex: 1;\n justify-content: space-between;\n\n &--segment,\n &--segment-pill {\n border: var(--check-border-style);\n border-radius: var(--segment-border-radius);\n box-shadow: var(--segment-shadow);\n display: inline-flex;\n padding: var(--control-padding);\n background: var(--check-bg-color);\n color: var(--segment-color);\n align-items: center;\n inline-size: 100%;\n }\n\n &--segment-pill {\n // first\n :host(:first-of-type) & {\n border-start-start-radius: var(--segment-border-radius);\n border-start-end-radius: 0;\n border-end-end-radius: 0;\n border-end-start-radius: var(--segment-border-radius);\n border-inline-end: none;\n }\n\n // middle\n :host(:not(:last-of-type):not(:first-of-type)) & {\n border-radius: 0;\n border-inline-end: none;\n }\n\n // last\n :host(:last-of-type) & {\n border-start-start-radius: 0;\n border-start-end-radius: var(--segment-border-radius);\n border-end-end-radius: var(--segment-border-radius);\n border-end-start-radius: 0;\n }\n\n // single\n :host(:first-of-type:last-of-type) & {\n border-radius: var(--segment-border-radius);\n border: var(--check-border-style);\n }\n }\n\n &--tag {\n letter-spacing: 2px;\n font-weight: 400;\n font-size: 0.65em;\n line-height: 1.4;\n padding: var(--control-padding);\n border: 2px solid #b5aea7;\n border-color: var(--tagbox-border-color);\n background-color: var(--tagbox-bg-color);\n transition: all 0.2s;\n border-radius: var(--cb-border-radius);\n inline-size: 100%;\n\n &::after {\n content: '+';\n margin-inline: 0.3125em 0;\n margin-block: 0;\n font-weight: 200;\n position: relative;\n font-family: inherit;\n font-size: 1.8em;\n display: inline-block;\n transform: rotate(0deg);\n transform-origin: center;\n }\n\n span {\n display: block;\n }\n }\n }\n}\n","import {\n Component,\n Prop,\n Event,\n EventEmitter,\n ComponentInterface,\n State,\n Watch,\n Method,\n Element,\n Host,\n Listen,\n} from '@stencil/core';\nimport { focusVisible } from '../../utils/focus-visible';\nimport { createColorClasses } from '../../utils/theme';\nimport { transformTag, h } from '../../utils/renderer';\nimport { CheckboxChangeEventDetail } from './checkbox-interface';\nimport type { ControlValidity, Color } from '../../types/shared';\n\nlet checkboxIds = 0;\n\n/**\n * `nano-checkbox` is used to let a user choose one or more options from a limited number of options.\n * They appear as checked when activated.\n * They can be checked by mouse, keyboard, touch or programmatically by setting the checked property.\n *\n * @slot - if you do not set a label attribute, you can use this slot for more complex markup\n */\n@Component({\n tag: 'nano-checkbox',\n styleUrl: 'checkbox.scss',\n scoped: true,\n})\nexport class Checkbox implements ComponentInterface {\n private inputId = `nano-cb-${checkboxIds++}`;\n private input: HTMLInputElement;\n\n @Element() private host: HTMLNanoCheckboxElement;\n @State() inputType: 'checkbox' | 'radio' = 'checkbox';\n\n /** @internal */\n @Prop({ mutable: true, reflect: true }) hasFocus = false;\n\n /**\n * checked property that can be used to get/set the value. accepts only boolean values\n */\n @Prop({ mutable: true, reflect: true }) checked: boolean = false;\n\n @Watch('checked')\n async handleCheckedChange() {\n if (!this.input) return;\n\n this.input.checked = this.checked;\n\n if (\n this.inputType === 'radio' &&\n this.name &&\n this.checked &&\n this.host.isConnected\n ) {\n const form = this.host.closest('form');\n const root = this.host.getRootNode() as ShadowRoot | Document;\n let ctrls: Element[];\n\n if (form) {\n ctrls = Array.from(\n form.querySelectorAll(\n `${transformTag('nano-checkbox')}[name=\"${this.name}\"]`\n )\n );\n } else {\n ctrls = Array.from(\n root.querySelectorAll(\n `${transformTag('nano-checkbox')}[name=\"${this.name}\"]`\n )\n )?.filter((radio) => !radio.closest('form'));\n }\n ctrls.map((el: HTMLNanoCheckboxElement) => {\n if (el !== this.host) el.checked = false;\n });\n }\n this.nanoChange.emit({ value: this.value, checked: this.checked });\n }\n\n /**\n * If `true`, the user cannot interact with the checkbox.\n */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /**\n * The value of a checkbox is analogous to the value of an `<input type='checkbox'>`,\n * it's only present when `checked` is true.\n */\n @Prop({ reflect: true }) value: string = 'on';\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop({ reflect: true }) name: string;\n\n /**\n * Set to true to make the field required.\n */\n @Prop({ reflect: true }) required: boolean = false;\n\n /**\n * Controls the underlying field type and style.\n */\n @Prop({ reflect: true }) type:\n | 'radio'\n | 'checkbox'\n | 'tag'\n | 'segment'\n | 'switch'\n | 'segment-pill' = 'checkbox';\n\n @Watch('type')\n typeChange() {\n if (['checkbox', 'switch', 'tag'].includes(this.type))\n this.inputType = 'checkbox';\n else this.inputType = 'radio';\n }\n\n /**\n * label property that can be used to set the label text. Alternatively you may use a label slot.\n */\n @Prop() label?: string;\n\n /**\n * If `true`, the checkbox will visually appear as indeterminate (only relevant for type=\"checkbox\")\n */\n @Prop({ mutable: true, reflect: true }) indeterminate: boolean = false;\n\n @Watch('indeterminate')\n handleIndeterminateChange() {\n this.checked = false;\n this.input.indeterminate = this.indeterminate;\n }\n\n /**\n * This will be true when the control is in an invalid state.\n * Validity is determined by the `required` prop. Or if custom validity message is set. @readonly\n */\n @Prop({ reflect: true })\n get invalid() {\n return this._invalid;\n }\n @State() _invalid = false;\n\n /**\n * Current validation message - if any. @readonly\n */\n @Prop()\n get validityMessage() {\n if (!this.input) return '';\n return this.input.validationMessage;\n }\n\n /**\n * Color to use from your application's color palette.\n */\n @Prop() color?: Color;\n\n /**\n * The form element to associate the input with (its form owner). Must be the id of a form.\n */\n @Prop() form?: string | null;\n\n /**\n * Emited when the checkbox is toggled\n */\n @Event() nanoChange: EventEmitter<CheckboxChangeEventDetail>;\n\n /**\n * Emited when the checkbox is focused\n */\n @Event() nanoFocus: EventEmitter;\n\n /**\n * Emited when the checkbox is blurred\n */\n @Event() nanoBlur: EventEmitter;\n\n // public methods\n\n /**\n * Returns the native input control\n * @returns the native input control\n */\n @Method()\n async getInputElement() {\n if (this.input) return this.input;\n }\n\n /**\n * Get the current state of the control.\n * @param validateFirst - perform validation first before reporting\n * @returns `Promise<{ isValid: boolean, errorMessage: string }>`\n */\n @Method()\n async reportValidity(\n validateFirst: boolean = false\n ): Promise<ControlValidity> {\n if (validateFirst) this.input.reportValidity();\n this._invalid = !this.input.validity.valid;\n\n return {\n isValid: !this.invalid,\n errorMessage: this.input.validationMessage,\n };\n }\n\n /**\n * Sets a custom validation message.\n * If `message` is not empty, the field will be considered invalid. Use in conjunction with `nano-checkbox-group`\n */\n @Method()\n async setError(message: string, updateStatus = true) {\n if (!this.input) return;\n if (updateStatus) this._invalid = !!message.length;\n this.input.setCustomValidity(message);\n }\n\n /**\n * Sets focus on the checkbox.\n */\n @Method()\n async setFocus() {\n if (this.input) {\n this.input.focus();\n focusVisible.force(this.input);\n }\n }\n\n /**\n * Removes focus from the checkbox.\n */\n @Method()\n async removeFocus() {\n if (this.input) {\n this.input.blur();\n focusVisible.force(this.input, false);\n }\n }\n\n @Listen('reset', { target: 'body' })\n onReset(e) {\n const form = this.form\n ? document.querySelector('#' + this.form)\n : this.host.closest('form');\n if (!form || e.target !== this.host.closest('form')) return;\n\n this.checked = false;\n }\n\n // private handlers\n\n private handleInvalid = (ev: Event) => {\n this._invalid = !(ev.target as HTMLInputElement).validity.valid;\n };\n\n private handleChange = (ev: InputEvent) => {\n this.checked = (ev.target as HTMLInputElement).checked;\n this.indeterminate = false;\n };\n\n private handleFocus = () => {\n this.hasFocus = true;\n this.nanoFocus.emit();\n };\n\n private handleBlur = () => {\n this.hasFocus = false;\n this.nanoBlur.emit();\n };\n\n /* Although many radio components can be 'checked',\n the underlying control may not be. Check */\n private isRadioChecked() {\n requestAnimationFrame(() => (this.checked = this.input.checked));\n }\n\n // Stencil hooks\n\n componentWillLoad() {\n this.typeChange();\n }\n\n componentDidLoad() {\n this.input.indeterminate = this.indeterminate;\n this.isRadioChecked();\n focusVisible.observe(this.input);\n }\n\n disconnectedCallback() {\n focusVisible.unobserve(this.input);\n }\n\n render() {\n const labelId = this.inputId + '-lbl';\n\n return (\n <Host\n class={{ ...createColorClasses(this.color), 'nano-checkbox': true }}\n >\n <label\n class={{\n nanocb: true,\n 'nanocb--checked': this.checked,\n 'nanocb--invalid': this.invalid,\n 'nanocb--disabled': this.disabled,\n 'nanocb--focused': this.hasFocus,\n 'nanocb--indeterminate': this.indeterminate,\n }}\n htmlFor={this.inputId}\n >\n <input\n type={this.inputType}\n name={this.name}\n form={this.form}\n required={this.required}\n checked={this.checked}\n disabled={this.disabled}\n value={this.value}\n aria-labelledby={labelId}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onChange={this.handleChange}\n ref={(input) => (this.input = input)}\n id={this.inputId}\n onInvalid={this.handleInvalid}\n />\n <span class={'nanocb__input nanocb__input--' + this.type}></span>\n\n <div id={labelId} class={'nanocb__label nanocb__label--' + this.type}>\n {this.label && !!this.label.length && <span>{this.label}</span>}\n <span hidden={this.label && !!this.label.length}>\n <slot />\n </span>\n </div>\n </label>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
- import{r as t,g as o,h as i,a as n,c as e}from"./index-6cc72cd9.js";import{f as r}from"./focus-visible-e5f02c46.js";import{h as s}from"./renderer-4bc3e2dc.js";import{P as a}from"./popover-30ce6cac.js";const l=":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}: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;--button-bg:var(--background);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(--button-bg);font-size:inherit;color:var(--color);padding:var(--padding);cursor:pointer;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__label{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.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)))}";const p=l;const d=class{constructor(o){t(this,o)}button;get host(){return o(this)}iconName;iconSrc;type="button";name;value;label;showTooltip=false;disabled=false;href;rel;target;form;async setFocus(){this.button.focus()}findForm(){const{form:t,host:o}=this;if(!t)return o.closest("form");if(t instanceof HTMLFormElement){return t}if(typeof t==="string"){const o=document.getElementById(t);if(o instanceof HTMLFormElement){return o}}return null}handleClick=t=>{if(this.type==="button")return;const o=this.findForm();if(o){t.preventDefault();const i=document.createElement("button");i.type=this.type;i.style.display="none";o.appendChild(i);i.click();i.remove()}};componentDidLoad(){r.observe(this.button)}connectedCallback(){if(this.button)r.observe(this.button)}disconnectedCallback(){r.unobserve(this.button)}content(){const t=this.href===undefined?"button":"a";return i(t,{onClick:this.handleClick,part:"base",ref:t=>this.button=t,class:{"icon-button":true,"icon-button--disabled":this.disabled},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},i("span",{class:"icon-button__label"},this.label),i("nano-icon",{name:this.iconName,src:this.iconSrc,"aria-hidden":"true",lazy:false,part:"icon"}))}render(){if(this.showTooltip){return i(n,{class:"nano-icon-button","aria-disabled":this.disabled?"true":null},i("nano-tooltip",{content:this.label},this.content()))}return i(n,{class:"nano-icon-button","aria-disabled":this.disabled?"true":null},this.content())}};d.style=p;const c=':host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--max-width:20rem;--hide-delay:0.125s;--hide-duration:0.125s;--hide-timing-function:ease;--show-delay:0.125s;--show-duration:0.125s;--show-timing-function:ease;--background:var(--nano-tooltip-bg-color, #4a4a4a);--color:var(--nano-tooltip-color, #fff);display:contents}.tooltip{max-inline-size:var(--max-width);border-radius:var(--nano-tooltip-border-radius, var(--nano-border-radius-small, 2px));background-color:var(--background);font-size:var(--nano-fontsize-small, 0.875rem);line-height:1.5;color:var(--color);opacity:0;padding:var(--nano-tooltip-padding, var(--nano-spacing-xsmall, 4px) var(--nano-spacing-small, 8px));transform:translateY(10px) translateZ(0);transform-origin:bottom;transition:opacity, transform var(--hide-duration) var(--hide-timing-function) var(--hide-delay);white-space:normal}.tooltip-arrow{content:"";position:absolute;inline-size:0;block-size:0;color:var(--background);transition:0.2s ease transform}.tooltip-positioner{position:absolute;z-index:var(--nano-layer-index-tooltip, 1000);border:0;background:none;padding:0;overflow:visible;color:unset}.tooltip-positioner::backdrop{display:none}.tooltip-positioner[popover],.tooltip-positioner:popover-open{inset:unset}.tooltip-positioner .tooltip{transition-delay:var(--show-delay);transition-duration:var(--show-duration);transition-timing-function:var(--show-timing-function)}.tooltip-positioner[data-popper-placement^=top] .tooltip{transform-origin:bottom;transform:translateY(-10px) translateZ(0)}.tooltip-positioner[data-popper-placement^=bottom] .tooltip{transform-origin:top}.tooltip-positioner[data-popper-placement^=left] .tooltip{transform-origin:right}.tooltip-positioner[data-popper-placement^=right] .tooltip{transform-origin:left}.tooltip-positioner.popover-visible .tooltip{opacity:1;transform:none}.tooltip-positioner[data-popper-placement^=bottom] .tooltip-arrow{inset-block-end:100%;inset-inline-start:calc(50% - 5px);border-block-end:5px solid;border-inline-start:5px solid transparent;border-inline-end:5px solid transparent}.tooltip-positioner[data-popper-placement=bottom-start] .tooltip-arrow{inset-inline-start:5px}.tooltip-positioner[data-popper-placement=bottom-end] .tooltip-arrow{inset-inline:auto 5px}.tooltip-positioner[data-popper-placement^=top] .tooltip-arrow{inset-block-start:100%;inset-inline-start:calc(50% - 5px);border-block-start:5px solid;border-inline-start:5px solid transparent;border-inline-end:5px solid transparent}.tooltip-positioner[data-popper-placement=top-start] .tooltip-arrow{inset-inline-start:5px}.tooltip-positioner[data-popper-placement=top-end] .tooltip-arrow{inset-inline:auto 5px}.tooltip-positioner[data-popper-placement^=left] .tooltip-arrow{inset-block-start:calc(50% - 5px);inset-inline-start:100%;border-inline-start:5px solid;border-block-start:5px solid transparent;border-block-end:5px solid transparent}.tooltip-positioner[data-popper-placement=left-start] .tooltip-arrow{inset-block-start:5px}.tooltip-positioner[data-popper-placement=left-end] .tooltip-arrow{inset-block:auto 5px}.tooltip-positioner[data-popper-placement^=right] .tooltip-arrow{inset-block-start:calc(50% - 5px);inset-inline-end:100%;border-inline-end:5px solid;border-block-start:5px solid transparent;border-block-end:5px solid transparent}.tooltip-positioner[data-popper-placement=right-start] .tooltip-arrow{inset-block-start:5px}.tooltip-positioner[data-popper-placement=right-end] .tooltip-arrow{inset-block:auto 5px}';const h=c;const b=class{constructor(o){t(this,o);this.nanoShow=e(this,"nanoShow",7);this.nanoAfterShow=e(this,"nanoAfterShow",7);this.nanoHide=e(this,"nanoHide",7);this.nanoAfterHide=e(this,"nanoAfterHide",7)}isVisible=false;popover;tooltipPositioner;tooltip;_target;get target(){return this._target}set target(t){if(t!==this._target&&this._target){this._target.removeAttribute("aria-label")}t.setAttribute("aria-label",this.label);this._target=t}label="";get host(){return o(this)}content="";setLabel(){const t=Array.from(this.host.querySelectorAll('[slot="content"]'));const o=t.map((t=>t.textContent)).join(" ").trim();if(!this.target){this.target=this.getTarget();if(!this.target)return}this.label=o||this.content;this.target.setAttribute("aria-label",this.label)}placement="top";disabled=false;distance=10;open=false;skidding=0;hoist=false;trigger="hover focus";handleOpenChange(){if(this.open)this.show();else this.hide()}nanoShow;nanoAfterShow;nanoHide;nanoAfterHide;async show(){if(this.isVisible||this.disabled){return}const t=this.nanoShow.emit();if(t.defaultPrevented){this.open=false;return}this.isVisible=true;this.open=true;if(typeof this.tooltipPositioner?.showPopover==="function"){this.hoist=true;this.popover.show();this.tooltipPositioner.showPopover()}else{this.popover.show()}}async hide(){if(!this.isVisible){return}const t=this.nanoHide.emit();if(t.defaultPrevented){this.open=true;return}this.isVisible=false;this.open=false;this.popover.hide();setTimeout((()=>{if(!this.open&&typeof this.tooltipPositioner?.hidePopover==="function"){this.tooltipPositioner.hidePopover()}}),300)}getTarget(){const t=[...Array.from(this.host.children)].find((t=>t.tagName.toLowerCase()!=="style"&&t.getAttribute("slot")!=="content"));if(!t){throw new Error("Invalid tooltip target: no child element was found.")}return t}hasTrigger(t){const o=this.trigger.split(" ");return o.includes(t)}syncOptions(){this.popover.setOptions({strategy:this.hoist?"fixed":"absolute",placement:this.placement,distance:this.distance,skidding:this.skidding,transitionElement:this.tooltip,onAfterHide:()=>this.nanoAfterHide.emit(),onAfterShow:()=>this.nanoAfterShow.emit()})}handleBlur=()=>{if(this.hasTrigger("focus")){this.hide()}};handleClick=()=>{if(this.hasTrigger("click")){if(this.open)this.hide();else this.show()}};handleFocus=()=>{if(this.hasTrigger("focus")){this.show()}};handleKeyDown=t=>{if(this.open&&t.key==="Escape"){t.stopPropagation();this.hide()}};handleMouseOver=()=>{if(this.hasTrigger("hover")){this.show()}};handleMouseOut=()=>{if(this.hasTrigger("hover")){this.hide()}};handleSlotChange=()=>{this.target=this.getTarget()};componentDidLoad(){this.target=this.getTarget();this.popover=new a(this.target,this.tooltipPositioner);this.syncOptions();this.setLabel();this.tooltipPositioner.hidden=!this.open;if(this.open){this.show()}}componentDidUpdate(){this.syncOptions()}disconnectedCallback(){if(this.popover)this.popover.destroy()}render(){return s(n,{key:"aea96e5f6c3a04be33309614166cde8809501bdd",onKeyDown:this.handleKeyDown,onMouseOver:this.handleMouseOver,onMouseOut:this.handleMouseOut,onBlur:this.handleBlur,onFocus:this.handleFocus,onClick:this.handleClick,class:"nano-tooltip"},s("slot",{key:"1d35074667f546275cd81875cf49b5de5a9a144f",onSlotchange:this.handleSlotChange}),s("div",{key:"694a19141a36749d393e0db08ce48bfc490e7938",ref:t=>this.tooltipPositioner=t,class:"tooltip-positioner",popover:"manual"},s("div",{key:"8b181e183dff1ab3b1a2253f693f6d62f6a504d2",part:"base",ref:t=>this.tooltip=t,class:{tooltip:true,"tooltip--open":this.open},role:"tooltip","aria-hidden":this.open?"false":"true"},s("slot",{key:"ba3d58a1cab421828b90a880019c334ddd15c40a",name:"content",onSlotchange:()=>this.setLabel()},this.content),s("div",{key:"e254be92d3ca7ff1fc592c6f81a6b4de0185434a",class:"tooltip-arrow","data-popper-arrow":true}))))}static get watchers(){return{content:["setLabel"],open:["handleOpenChange"]}}};b.style=h;export{d as nano_icon_button,b as nano_tooltip};
4
+ import{r as t,g as o,a as i,c as n}from"./index-6cc72cd9.js";import{h as e}from"./renderer-4bc3e2dc.js";import{f as r}from"./focus-visible-e5f02c46.js";import{P as s}from"./popover-30ce6cac.js";const a=":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}: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;--button-bg:var(--background);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(--button-bg);font-size:inherit;color:var(--color);padding:var(--padding);cursor:pointer;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__label{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.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)))}";const l=a;const p=class{constructor(o){t(this,o)}button;get host(){return o(this)}iconName;iconSrc;type="button";name;value;label;showTooltip=false;disabled=false;href;rel;target;form;async setFocus(){this.button.focus()}findForm(){const{form:t,host:o}=this;if(!t)return o.closest("form");if(t instanceof HTMLFormElement){return t}if(typeof t==="string"){const o=document.getElementById(t);if(o instanceof HTMLFormElement){return o}}return null}handleClick=t=>{if(this.type==="button")return;const o=this.findForm();if(o){t.preventDefault();const i=document.createElement("button");i.type=this.type;i.style.display="none";o.appendChild(i);i.click();i.remove()}};componentDidLoad(){r.observe(this.button)}connectedCallback(){if(this.button)r.observe(this.button)}disconnectedCallback(){r.unobserve(this.button)}content(){const t=this.href===undefined?"button":"a";return e(t,{onClick:this.handleClick,part:"base",ref:t=>this.button=t,class:{"icon-button":true,"icon-button--disabled":this.disabled},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},e("span",{class:"icon-button__label"},this.label),e("nano-icon",{name:this.iconName,src:this.iconSrc,"aria-hidden":"true",lazy:false,part:"icon"}))}render(){if(this.showTooltip){return e(i,{class:"nano-icon-button","aria-disabled":this.disabled?"true":null},e("nano-tooltip",{content:this.label},this.content()))}return e(i,{class:"nano-icon-button","aria-disabled":this.disabled?"true":null},this.content())}};p.style=l;const d=':host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--max-width:20rem;--hide-delay:0.125s;--hide-duration:0.125s;--hide-timing-function:ease;--show-delay:0.125s;--show-duration:0.125s;--show-timing-function:ease;--background:var(--nano-tooltip-bg-color, #4a4a4a);--color:var(--nano-tooltip-color, #fff);display:contents}.tooltip{max-inline-size:var(--max-width);border-radius:var(--nano-tooltip-border-radius, var(--nano-border-radius-small, 2px));background-color:var(--background);font-size:var(--nano-fontsize-small, 0.875rem);line-height:1.5;color:var(--color);opacity:0;padding:var(--nano-tooltip-padding, var(--nano-spacing-xsmall, 4px) var(--nano-spacing-small, 8px));transform:translateY(10px) translateZ(0);transform-origin:bottom;transition:opacity, transform var(--hide-duration) var(--hide-timing-function) var(--hide-delay);white-space:normal}.tooltip-arrow{content:"";position:absolute;inline-size:0;block-size:0;color:var(--background);transition:0.2s ease transform}.tooltip-positioner{position:absolute;z-index:var(--nano-layer-index-tooltip, 1000);border:0;background:none;padding:0;overflow:visible;color:unset}.tooltip-positioner::backdrop{display:none}.tooltip-positioner[popover],.tooltip-positioner:popover-open{inset:unset}.tooltip-positioner .tooltip{transition-delay:var(--show-delay);transition-duration:var(--show-duration);transition-timing-function:var(--show-timing-function)}.tooltip-positioner[data-popper-placement^=top] .tooltip{transform-origin:bottom;transform:translateY(-10px) translateZ(0)}.tooltip-positioner[data-popper-placement^=bottom] .tooltip{transform-origin:top}.tooltip-positioner[data-popper-placement^=left] .tooltip{transform-origin:right}.tooltip-positioner[data-popper-placement^=right] .tooltip{transform-origin:left}.tooltip-positioner.popover-visible .tooltip{opacity:1;transform:none}.tooltip-positioner[data-popper-placement^=bottom] .tooltip-arrow{inset-block-end:100%;inset-inline-start:calc(50% - 5px);border-block-end:5px solid;border-inline-start:5px solid transparent;border-inline-end:5px solid transparent}.tooltip-positioner[data-popper-placement=bottom-start] .tooltip-arrow{inset-inline-start:5px}.tooltip-positioner[data-popper-placement=bottom-end] .tooltip-arrow{inset-inline:auto 5px}.tooltip-positioner[data-popper-placement^=top] .tooltip-arrow{inset-block-start:100%;inset-inline-start:calc(50% - 5px);border-block-start:5px solid;border-inline-start:5px solid transparent;border-inline-end:5px solid transparent}.tooltip-positioner[data-popper-placement=top-start] .tooltip-arrow{inset-inline-start:5px}.tooltip-positioner[data-popper-placement=top-end] .tooltip-arrow{inset-inline:auto 5px}.tooltip-positioner[data-popper-placement^=left] .tooltip-arrow{inset-block-start:calc(50% - 5px);inset-inline-start:100%;border-inline-start:5px solid;border-block-start:5px solid transparent;border-block-end:5px solid transparent}.tooltip-positioner[data-popper-placement=left-start] .tooltip-arrow{inset-block-start:5px}.tooltip-positioner[data-popper-placement=left-end] .tooltip-arrow{inset-block:auto 5px}.tooltip-positioner[data-popper-placement^=right] .tooltip-arrow{inset-block-start:calc(50% - 5px);inset-inline-end:100%;border-inline-end:5px solid;border-block-start:5px solid transparent;border-block-end:5px solid transparent}.tooltip-positioner[data-popper-placement=right-start] .tooltip-arrow{inset-block-start:5px}.tooltip-positioner[data-popper-placement=right-end] .tooltip-arrow{inset-block:auto 5px}';const c=d;const h=class{constructor(o){t(this,o);this.nanoShow=n(this,"nanoShow",7);this.nanoAfterShow=n(this,"nanoAfterShow",7);this.nanoHide=n(this,"nanoHide",7);this.nanoAfterHide=n(this,"nanoAfterHide",7)}isVisible=false;popover;tooltipPositioner;tooltip;_target;get target(){return this._target}set target(t){if(t!==this._target&&this._target){this._target.removeAttribute("aria-label")}t.setAttribute("aria-label",this.label);this._target=t}label="";get host(){return o(this)}content="";setLabel(){const t=Array.from(this.host.querySelectorAll('[slot="content"]'));const o=t.map((t=>t.textContent)).join(" ").trim();if(!this.target){this.target=this.getTarget();if(!this.target)return}this.label=o||this.content;this.target.setAttribute("aria-label",this.label)}placement="top";disabled=false;distance=10;open=false;skidding=0;hoist=false;trigger="hover focus";handleOpenChange(){if(this.open)this.show();else this.hide()}nanoShow;nanoAfterShow;nanoHide;nanoAfterHide;async show(){if(this.isVisible||this.disabled){return}const t=this.nanoShow.emit();if(t.defaultPrevented){this.open=false;return}this.isVisible=true;this.open=true;if(typeof this.tooltipPositioner?.showPopover==="function"){this.hoist=true;this.popover.show();this.tooltipPositioner.showPopover()}else{this.popover.show()}}async hide(){if(!this.isVisible){return}const t=this.nanoHide.emit();if(t.defaultPrevented){this.open=true;return}this.isVisible=false;this.open=false;this.popover.hide();setTimeout((()=>{if(!this.open&&typeof this.tooltipPositioner?.hidePopover==="function"){this.tooltipPositioner.hidePopover()}}),300)}getTarget(){const t=[...Array.from(this.host.children)].find((t=>t.tagName.toLowerCase()!=="style"&&t.getAttribute("slot")!=="content"));if(!t){throw new Error("Invalid tooltip target: no child element was found.")}return t}hasTrigger(t){const o=this.trigger.split(" ");return o.includes(t)}syncOptions(){this.popover.setOptions({strategy:this.hoist?"fixed":"absolute",placement:this.placement,distance:this.distance,skidding:this.skidding,transitionElement:this.tooltip,onAfterHide:()=>this.nanoAfterHide.emit(),onAfterShow:()=>this.nanoAfterShow.emit()})}handleBlur=()=>{if(this.hasTrigger("focus")){this.hide()}};handleClick=()=>{if(this.hasTrigger("click")){if(this.open)this.hide();else this.show()}};handleFocus=()=>{if(this.hasTrigger("focus")){this.show()}};handleKeyDown=t=>{if(this.open&&t.key==="Escape"){t.stopPropagation();this.hide()}};handleMouseOver=()=>{if(this.hasTrigger("hover")){this.show()}};handleMouseOut=()=>{if(this.hasTrigger("hover")){this.hide()}};handleSlotChange=()=>{this.target=this.getTarget()};componentDidLoad(){this.target=this.getTarget();this.popover=new s(this.target,this.tooltipPositioner);this.syncOptions();this.setLabel();this.tooltipPositioner.hidden=!this.open;if(this.open){this.show()}}componentDidUpdate(){this.syncOptions()}disconnectedCallback(){if(this.popover)this.popover.destroy()}render(){return e(i,{key:"aea96e5f6c3a04be33309614166cde8809501bdd",onKeyDown:this.handleKeyDown,onMouseOver:this.handleMouseOver,onMouseOut:this.handleMouseOut,onBlur:this.handleBlur,onFocus:this.handleFocus,onClick:this.handleClick,class:"nano-tooltip"},e("slot",{key:"1d35074667f546275cd81875cf49b5de5a9a144f",onSlotchange:this.handleSlotChange}),e("div",{key:"694a19141a36749d393e0db08ce48bfc490e7938",ref:t=>this.tooltipPositioner=t,class:"tooltip-positioner",popover:"manual"},e("div",{key:"8b181e183dff1ab3b1a2253f693f6d62f6a504d2",part:"base",ref:t=>this.tooltip=t,class:{tooltip:true,"tooltip--open":this.open},role:"tooltip","aria-hidden":this.open?"false":"true"},e("slot",{key:"ba3d58a1cab421828b90a880019c334ddd15c40a",name:"content",onSlotchange:()=>this.setLabel()},this.content),e("div",{key:"e254be92d3ca7ff1fc592c6f81a6b4de0185434a",class:"tooltip-arrow","data-popper-arrow":true}))))}static get watchers(){return{content:["setLabel"],open:["handleOpenChange"]}}};h.style=c;export{p as nano_icon_button,h as nano_tooltip};
5
5
  //# sourceMappingURL=nano-icon-button_2.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["iconButtonCss","NanoIconButtonStyle0","IconButton","button","iconName","iconSrc","type","name","value","label","showTooltip","disabled","href","rel","target","form","setFocus","this","focus","findForm","host","closest","HTMLFormElement","el","document","getElementById","handleClick","ev","formEl","preventDefault","fakeButton","createElement","style","display","appendChild","click","remove","componentDidLoad","focusVisible","observe","connectedCallback","disconnectedCallback","unobserve","content","TagType","undefined","h","onClick","part","ref","class","src","lazy","render","Host","tooltipCss","NanoTooltipStyle0","Tooltip","isVisible","popover","tooltipPositioner","tooltip","_target","newTarget","removeAttribute","setAttribute","setLabel","contentSlotNodes","Array","from","querySelectorAll","textContent","map","node","join","trim","getTarget","placement","distance","open","skidding","hoist","trigger","handleOpenChange","show","hide","nanoShow","nanoAfterShow","nanoHide","nanoAfterHide","slShow","emit","defaultPrevented","showPopover","slHide","setTimeout","hidePopover","children","find","tagName","toLowerCase","getAttribute","Error","hasTrigger","triggerType","triggers","split","includes","syncOptions","setOptions","strategy","transitionElement","onAfterHide","onAfterShow","handleBlur","handleFocus","handleKeyDown","event","key","stopPropagation","handleMouseOver","handleMouseOut","handleSlotChange","Popover","hidden","componentDidUpdate","destroy","onKeyDown","onMouseOver","onMouseOut","onBlur","onFocus","onSlotchange","role"],"sources":["src/components/icon-button/icon-button.scss?tag=nano-icon-button&encapsulation=shadow","src/components/icon-button/icon-button.tsx","src/components/tooltip/tooltip.scss?tag=nano-tooltip&encapsulation=shadow","src/components/tooltip/tooltip.tsx"],"sourcesContent":["@use 'sass:map';\n@use '../../global/style/nano-theme/tokens';\n@use '../../global/style/utilities/mixins' as mx;\n\n:host {\n /**\n * @prop --color: defaults to #{map.get(tokens.$colors, palegrey)};\n * @prop --active-color: defaults to #{map.get(tokens.$colors, darkblue--faded)};\n * @prop --hover-color: defaults to #{map.get(tokens.$colors, blue)};\n * @prop --background: defaults to transparent;\n * @prop --padding: defaults to #{tokens.$spacing-small};\n * @prop --box-shadow: defaults to none;\n */\n\n --border-radius: #{tokens.$border-radius-medium};\n --active-color: #{map.get(tokens.$colors, darkblue--faded)};\n --hover-color: #{map.get(tokens.$colors, blue)};\n --nano-color-base: var(--color, #{map.get(tokens.$colors, mediumgrey)});\n --background: transparent;\n --padding: #{tokens.$spacing-small};\n --box-shadow: none;\n --button-bg: var(--background);\n\n border-radius: var(--border-radius);\n display: inline-block;\n}\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(--button-bg);\n font-size: inherit;\n color: var(--color);\n padding: var(--padding);\n cursor: pointer;\n appearance: none;\n transition: box-shadow #{tokens.$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__label {\n @include mx.visually-hide();\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: #{tokens.$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 <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 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 <span class=\"icon-button__label\">{this.label}</span>\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 (\n <Host\n class=\"nano-icon-button\"\n aria-disabled={this.disabled ? 'true' : null}\n >\n <nano-tooltip content={this.label}>{this.content()}</nano-tooltip>\n </Host>\n );\n }\n return (\n <Host\n class=\"nano-icon-button\"\n aria-disabled={this.disabled ? 'true' : null}\n >\n {this.content()}\n </Host>\n );\n }\n}\n","@use '../../global/style/nano-theme/tokens';\n\n/**\n * @prop --hide-delay: The amount of time to wait before hiding the tooltip.\n * @prop --hide-duration: The amount of time the hide transition takes to complete.\n * @prop --hide-timing-function: The timing function (easing) to use for the hide transition.\n * @prop --max-width: The maximum width of the tooltip.\n * @prop --show-delay: The amount of time to wait before showing the tooltip.\n * @prop --show-duration: The amount of time the show transition takes to complete.\n * @prop --show-timing-function: The timing function (easing) to use for the show transition.\n */\n:host {\n --max-width: 20rem;\n --hide-delay: 0.125s;\n --hide-duration: 0.125s;\n --hide-timing-function: ease;\n --show-delay: 0.125s;\n --show-duration: 0.125s;\n --show-timing-function: ease;\n --background: #{tokens.$tooltip-bg-color};\n --color: #{tokens.$tooltip-color};;\n\n /* autoprefixer: ignore next */\n display: contents;\n}\n\n.tooltip {\n $self: &;\n\n max-inline-size: var(--max-width);\n border-radius: #{tokens.$tooltip-border-radius};\n background-color: var(--background);\n font-size: #{tokens.$tooltip-fontsize};\n line-height: 1.5;\n color: var(--color);\n opacity: 0;\n padding: #{tokens.$tooltip-padding};\n transform: translateY(10px) translateZ(0);\n transform-origin: bottom;\n transition: opacity, transform var(--hide-duration) var(--hide-timing-function) var(--hide-delay);\n white-space: normal;\n\n &-arrow {\n content: '';\n position: absolute;\n inline-size: 0;\n block-size: 0;\n color: var(--background);\n transition: 0.2s ease transform;\n }\n\n &-positioner {\n position: absolute;\n z-index: #{tokens.$layer-index-tooltip};\n border: 0;\n background: none;\n padding: 0;\n overflow: visible;\n color: unset;\n\n &::backdrop { display: none; }\n\n &[popover],\n &:popover-open {\n inset: unset;\n }\n\n #{$self} {\n transition-delay: var(--show-delay);\n transition-duration: var(--show-duration);\n transition-timing-function: var(--show-timing-function);\n }\n\n &[data-popper-placement^='top'] #{$self} {\n transform-origin: bottom;\n transform: translateY(-10px) translateZ(0);\n }\n\n &[data-popper-placement^='bottom'] #{$self} {\n transform-origin: top;\n }\n\n &[data-popper-placement^='left'] #{$self} {\n transform-origin: right;\n }\n\n &[data-popper-placement^='right'] #{$self} {\n transform-origin: left;\n }\n\n &.popover-visible #{$self} {\n opacity: 1;\n transform: none;\n }\n\n // Arrow + bottom\n &[data-popper-placement^='bottom'] #{$self}-arrow {\n inset-block-end: 100%;\n inset-inline-start: calc(50% - #{tokens.$tooltip-arrow-size});\n border-block-end: #{tokens.$tooltip-arrow-size} solid;\n border-inline-start: #{tokens.$tooltip-arrow-size} solid transparent;\n border-inline-end: #{tokens.$tooltip-arrow-size} solid transparent;\n }\n\n &[data-popper-placement='bottom-start'] #{$self}-arrow {\n inset-inline-start: #{tokens.$tooltip-arrow-offset};\n }\n\n &[data-popper-placement='bottom-end'] #{$self}-arrow {\n inset-inline: auto #{tokens.$tooltip-arrow-offset};\n }\n\n // Arrow + top\n &[data-popper-placement^='top'] #{$self}-arrow {\n inset-block-start: 100%;\n inset-inline-start: calc(50% - #{tokens.$tooltip-arrow-size});\n border-block-start: #{tokens.$tooltip-arrow-size} solid;\n border-inline-start: #{tokens.$tooltip-arrow-size} solid transparent;\n border-inline-end: #{tokens.$tooltip-arrow-size} solid transparent;\n }\n\n &[data-popper-placement='top-start'] #{$self}-arrow {\n inset-inline-start: #{tokens.$tooltip-arrow-offset};\n }\n\n &[data-popper-placement='top-end'] #{$self}-arrow {\n inset-inline: auto #{tokens.$tooltip-arrow-offset};\n }\n\n // Arrow + left\n &[data-popper-placement^='left'] #{$self}-arrow {\n inset-block-start: calc(50% - #{tokens.$tooltip-arrow-size});\n inset-inline-start: 100%;\n border-inline-start: #{tokens.$tooltip-arrow-size} solid;\n border-block-start: #{tokens.$tooltip-arrow-size} solid transparent;\n border-block-end: #{tokens.$tooltip-arrow-size} solid transparent;\n }\n\n &[data-popper-placement='left-start'] #{$self}-arrow {\n inset-block-start: #{tokens.$tooltip-arrow-offset};\n }\n\n &[data-popper-placement='left-end'] #{$self}-arrow {\n inset-block: auto #{tokens.$tooltip-arrow-offset};\n }\n\n // Arrow + right\n &[data-popper-placement^='right'] #{$self}-arrow {\n inset-block-start: calc(50% - #{tokens.$tooltip-arrow-size});\n inset-inline-end: 100%;\n border-inline-end: #{tokens.$tooltip-arrow-size} solid;\n border-block-start: #{tokens.$tooltip-arrow-size} solid transparent;\n border-block-end: #{tokens.$tooltip-arrow-size} solid transparent;\n }\n\n &[data-popper-placement='right-start'] #{$self}-arrow {\n inset-block-start: #{tokens.$tooltip-arrow-offset};\n }\n\n &[data-popper-placement='right-end'] #{$self}-arrow {\n inset-block: auto #{tokens.$tooltip-arrow-offset};\n }\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n Method,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { h } from '../../utils/renderer';\nimport Popover from '../../utils/popover';\n\n/**\n * Tooltips display additional information based on a specific action.\n * @slot - The tooltip's target element. Only the first element will be used as the target.\n * @slot content - The tooltip's content. Alternatively, you can use the content prop.\n */\n@Component({\n tag: 'nano-tooltip',\n styleUrl: 'tooltip.scss',\n shadow: true,\n})\nexport class Tooltip {\n private isVisible = false;\n private popover: Popover;\n private tooltipPositioner: HTMLElement;\n private tooltip: HTMLElement;\n\n private _target: HTMLElement;\n private get target() {\n return this._target;\n }\n private set target(newTarget) {\n if (newTarget !== this._target && this._target) {\n this._target.removeAttribute('aria-label');\n }\n newTarget.setAttribute('aria-label', this.label);\n this._target = newTarget;\n }\n\n private label = '';\n\n @Element() host: HTMLNanoTooltipElement;\n\n /** The tooltip's content. Alternatively, you can use the content slot. */\n @Prop() content = '';\n\n @Watch('content')\n setLabel() {\n const contentSlotNodes = Array.from(\n this.host.querySelectorAll('[slot=\"content\"]')\n );\n const textContent = contentSlotNodes\n .map((node) => node.textContent)\n .join(' ')\n .trim();\n\n if (!this.target) {\n this.target = this.getTarget();\n\n if (!this.target) return;\n }\n\n this.label = textContent || this.content;\n this.target.setAttribute('aria-label', this.label);\n }\n\n /**\n * The preferred placement of the tooltip. Note that the actual placement may vary as needed to keep the tooltip\n * inside of the viewport.\n */\n @Prop() placement:\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start'\n | 'left-end' = 'top';\n\n /** Set to true to disable the tooltip so it won't show when triggered. */\n @Prop() disabled = false;\n\n /** The distance in pixels from which to offset the tooltip away from its target. */\n @Prop() distance = 10;\n\n /** Indicates whether or not the tooltip is open. You can use this in lieu of the show/hide methods. */\n @Prop({ mutable: true, reflect: true }) open = false;\n\n /** The distance in pixels from which to offset the tooltip along its target. */\n @Prop() skidding = 0;\n\n /**\n * Enable this option to prevent the panel from being clipped when the component is placed inside a container with\n * `overflow: auto|scroll`.\n */\n @Prop({ mutable: true }) hoist = false;\n\n /**\n * Controls how the tooltip is activated. Possible options include `click`, `hover`, `focus`, and `manual`. Multiple\n * options can be passed by separating them with a space. When manual is used, the tooltip must be activated\n * programmatically.\n */\n @Prop() trigger: string = 'hover focus';\n\n @Watch('open')\n handleOpenChange() {\n if (this.open) this.show();\n else this.hide();\n }\n\n // Events\n\n /** Emitted when the tooltip begins to show. Calling `event.preventDefault()` will prevent it from being shown. */\n @Event() nanoShow: EventEmitter;\n\n /** Emitted after the tooltip has shown and all transitions are complete. */\n @Event() nanoAfterShow: EventEmitter;\n\n /** Emitted when the tooltip begins to hide. Calling `event.preventDefault()` will prevent it from being hidden. */\n @Event() nanoHide: EventEmitter;\n\n /** Emitted after the tooltip has hidden and all transitions are complete. */\n @Event() nanoAfterHide: EventEmitter;\n\n // Public methods\n\n /** Shows the tooltip. */\n @Method()\n async show() {\n // Prevent subsequent calls to the method, whether manually or triggered by the `open` watcher\n if (this.isVisible || this.disabled) {\n return;\n }\n const slShow = this.nanoShow.emit();\n if (slShow.defaultPrevented) {\n this.open = false;\n return;\n }\n\n this.isVisible = true;\n this.open = true;\n if (typeof this.tooltipPositioner?.showPopover === 'function') {\n this.hoist = true;\n this.popover.show();\n this.tooltipPositioner.showPopover();\n } else {\n this.popover.show();\n }\n }\n\n /** Hides the tooltip. */\n @Method()\n async hide() {\n // Prevent subsequent calls to the method, whether manually or triggered by the `open` watcher\n if (!this.isVisible) {\n return;\n }\n\n const slHide = this.nanoHide.emit();\n if (slHide.defaultPrevented) {\n this.open = true;\n return;\n }\n\n this.isVisible = false;\n this.open = false;\n this.popover.hide();\n\n setTimeout(() => {\n if (\n !this.open &&\n typeof this.tooltipPositioner?.hidePopover === 'function'\n ) {\n this.tooltipPositioner.hidePopover();\n }\n }, 300);\n }\n\n // Private methods\n\n private getTarget() {\n // Get the first child that isn't a <style> or content slot\n const target = [...Array.from(this.host.children)].find(\n (el) =>\n el.tagName.toLowerCase() !== 'style' &&\n el.getAttribute('slot') !== 'content'\n ) as HTMLElement;\n\n if (!target) {\n throw new Error('Invalid tooltip target: no child element was found.');\n }\n\n return target;\n }\n\n private hasTrigger(triggerType: string) {\n const triggers = this.trigger.split(' ');\n return triggers.includes(triggerType);\n }\n\n private syncOptions() {\n this.popover.setOptions({\n strategy: this.hoist ? 'fixed' : 'absolute',\n placement: this.placement,\n distance: this.distance,\n skidding: this.skidding,\n transitionElement: this.tooltip,\n onAfterHide: () => this.nanoAfterHide.emit(),\n onAfterShow: () => this.nanoAfterShow.emit(),\n });\n }\n\n // Event Handlers\n\n private handleBlur = () => {\n if (this.hasTrigger('focus')) {\n this.hide();\n }\n };\n\n private handleClick = () => {\n if (this.hasTrigger('click')) {\n if (this.open) this.hide();\n else this.show();\n }\n };\n\n private handleFocus = () => {\n if (this.hasTrigger('focus')) {\n this.show();\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n // Pressing escape when the target element has focus should dismiss the tooltip\n if (this.open && event.key === 'Escape') {\n event.stopPropagation();\n this.hide();\n }\n };\n\n private handleMouseOver = () => {\n if (this.hasTrigger('hover')) {\n this.show();\n }\n };\n\n private handleMouseOut = () => {\n if (this.hasTrigger('hover')) {\n this.hide();\n }\n };\n\n private handleSlotChange = () => {\n this.target = this.getTarget();\n };\n\n // Stencil hooks\n\n componentDidLoad() {\n this.target = this.getTarget();\n this.popover = new Popover(this.target, this.tooltipPositioner);\n this.syncOptions();\n this.setLabel();\n\n // Show on init if open\n this.tooltipPositioner.hidden = !this.open;\n if (this.open) {\n this.show();\n }\n }\n\n componentDidUpdate() {\n this.syncOptions();\n }\n\n disconnectedCallback() {\n if (this.popover) this.popover.destroy();\n }\n\n render() {\n return (\n <Host\n onKeyDown={this.handleKeyDown}\n onMouseOver={this.handleMouseOver}\n onMouseOut={this.handleMouseOut}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onClick={this.handleClick}\n class=\"nano-tooltip\"\n >\n <slot onSlotchange={this.handleSlotChange} />\n <div\n ref={(el) => (this.tooltipPositioner = el)}\n class=\"tooltip-positioner\"\n popover=\"manual\"\n >\n <div\n part=\"base\"\n ref={(el) => (this.tooltip = el)}\n class={{\n tooltip: true,\n 'tooltip--open': this.open,\n }}\n role=\"tooltip\"\n aria-hidden={this.open ? 'false' : 'true'}\n >\n <slot name=\"content\" onSlotchange={() => this.setLabel()}>\n {this.content}\n </slot>\n <div class=\"tooltip-arrow\" data-popper-arrow></div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["iconButtonCss","NanoIconButtonStyle0","IconButton","button","iconName","iconSrc","type","name","value","label","showTooltip","disabled","href","rel","target","form","setFocus","this","focus","findForm","host","closest","HTMLFormElement","el","document","getElementById","handleClick","ev","formEl","preventDefault","fakeButton","createElement","style","display","appendChild","click","remove","componentDidLoad","focusVisible","observe","connectedCallback","disconnectedCallback","unobserve","content","TagType","undefined","h","onClick","part","ref","class","src","lazy","render","Host","tooltipCss","NanoTooltipStyle0","Tooltip","isVisible","popover","tooltipPositioner","tooltip","_target","newTarget","removeAttribute","setAttribute","setLabel","contentSlotNodes","Array","from","querySelectorAll","textContent","map","node","join","trim","getTarget","placement","distance","open","skidding","hoist","trigger","handleOpenChange","show","hide","nanoShow","nanoAfterShow","nanoHide","nanoAfterHide","slShow","emit","defaultPrevented","showPopover","slHide","setTimeout","hidePopover","children","find","tagName","toLowerCase","getAttribute","Error","hasTrigger","triggerType","triggers","split","includes","syncOptions","setOptions","strategy","transitionElement","onAfterHide","onAfterShow","handleBlur","handleFocus","handleKeyDown","event","key","stopPropagation","handleMouseOver","handleMouseOut","handleSlotChange","Popover","hidden","componentDidUpdate","destroy","onKeyDown","onMouseOver","onMouseOut","onBlur","onFocus","onSlotchange","role"],"sources":["src/components/icon-button/icon-button.scss?tag=nano-icon-button&encapsulation=shadow","src/components/icon-button/icon-button.tsx","src/components/tooltip/tooltip.scss?tag=nano-tooltip&encapsulation=shadow","src/components/tooltip/tooltip.tsx"],"sourcesContent":["@use 'sass:map';\n@use '../../global/style/nano-theme/tokens';\n@use '../../global/style/utilities/mixins' as mx;\n\n:host {\n /**\n * @prop --color: defaults to #{map.get(tokens.$colors, palegrey)};\n * @prop --active-color: defaults to #{map.get(tokens.$colors, darkblue--faded)};\n * @prop --hover-color: defaults to #{map.get(tokens.$colors, blue)};\n * @prop --background: defaults to transparent;\n * @prop --padding: defaults to #{tokens.$spacing-small};\n * @prop --box-shadow: defaults to none;\n */\n\n --border-radius: #{tokens.$border-radius-medium};\n --active-color: #{map.get(tokens.$colors, darkblue--faded)};\n --hover-color: #{map.get(tokens.$colors, blue)};\n --nano-color-base: var(--color, #{map.get(tokens.$colors, mediumgrey)});\n --background: transparent;\n --padding: #{tokens.$spacing-small};\n --box-shadow: none;\n --button-bg: var(--background);\n\n border-radius: var(--border-radius);\n display: inline-block;\n}\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(--button-bg);\n font-size: inherit;\n color: var(--color);\n padding: var(--padding);\n cursor: pointer;\n appearance: none;\n transition: box-shadow #{tokens.$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__label {\n @include mx.visually-hide();\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: #{tokens.$control-focus-style};\n}\n","import {\n Component,\n Prop,\n ComponentInterface,\n Method,\n Element,\n Host,\n} from '@stencil/core';\nimport { h } from '../../utils/renderer';\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 <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 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 <span class=\"icon-button__label\">{this.label}</span>\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 (\n <Host\n class=\"nano-icon-button\"\n aria-disabled={this.disabled ? 'true' : null}\n >\n <nano-tooltip content={this.label}>{this.content()}</nano-tooltip>\n </Host>\n );\n }\n return (\n <Host\n class=\"nano-icon-button\"\n aria-disabled={this.disabled ? 'true' : null}\n >\n {this.content()}\n </Host>\n );\n }\n}\n","@use '../../global/style/nano-theme/tokens';\n\n/**\n * @prop --hide-delay: The amount of time to wait before hiding the tooltip.\n * @prop --hide-duration: The amount of time the hide transition takes to complete.\n * @prop --hide-timing-function: The timing function (easing) to use for the hide transition.\n * @prop --max-width: The maximum width of the tooltip.\n * @prop --show-delay: The amount of time to wait before showing the tooltip.\n * @prop --show-duration: The amount of time the show transition takes to complete.\n * @prop --show-timing-function: The timing function (easing) to use for the show transition.\n */\n:host {\n --max-width: 20rem;\n --hide-delay: 0.125s;\n --hide-duration: 0.125s;\n --hide-timing-function: ease;\n --show-delay: 0.125s;\n --show-duration: 0.125s;\n --show-timing-function: ease;\n --background: #{tokens.$tooltip-bg-color};\n --color: #{tokens.$tooltip-color};;\n\n /* autoprefixer: ignore next */\n display: contents;\n}\n\n.tooltip {\n $self: &;\n\n max-inline-size: var(--max-width);\n border-radius: #{tokens.$tooltip-border-radius};\n background-color: var(--background);\n font-size: #{tokens.$tooltip-fontsize};\n line-height: 1.5;\n color: var(--color);\n opacity: 0;\n padding: #{tokens.$tooltip-padding};\n transform: translateY(10px) translateZ(0);\n transform-origin: bottom;\n transition: opacity, transform var(--hide-duration) var(--hide-timing-function) var(--hide-delay);\n white-space: normal;\n\n &-arrow {\n content: '';\n position: absolute;\n inline-size: 0;\n block-size: 0;\n color: var(--background);\n transition: 0.2s ease transform;\n }\n\n &-positioner {\n position: absolute;\n z-index: #{tokens.$layer-index-tooltip};\n border: 0;\n background: none;\n padding: 0;\n overflow: visible;\n color: unset;\n\n &::backdrop { display: none; }\n\n &[popover],\n &:popover-open {\n inset: unset;\n }\n\n #{$self} {\n transition-delay: var(--show-delay);\n transition-duration: var(--show-duration);\n transition-timing-function: var(--show-timing-function);\n }\n\n &[data-popper-placement^='top'] #{$self} {\n transform-origin: bottom;\n transform: translateY(-10px) translateZ(0);\n }\n\n &[data-popper-placement^='bottom'] #{$self} {\n transform-origin: top;\n }\n\n &[data-popper-placement^='left'] #{$self} {\n transform-origin: right;\n }\n\n &[data-popper-placement^='right'] #{$self} {\n transform-origin: left;\n }\n\n &.popover-visible #{$self} {\n opacity: 1;\n transform: none;\n }\n\n // Arrow + bottom\n &[data-popper-placement^='bottom'] #{$self}-arrow {\n inset-block-end: 100%;\n inset-inline-start: calc(50% - #{tokens.$tooltip-arrow-size});\n border-block-end: #{tokens.$tooltip-arrow-size} solid;\n border-inline-start: #{tokens.$tooltip-arrow-size} solid transparent;\n border-inline-end: #{tokens.$tooltip-arrow-size} solid transparent;\n }\n\n &[data-popper-placement='bottom-start'] #{$self}-arrow {\n inset-inline-start: #{tokens.$tooltip-arrow-offset};\n }\n\n &[data-popper-placement='bottom-end'] #{$self}-arrow {\n inset-inline: auto #{tokens.$tooltip-arrow-offset};\n }\n\n // Arrow + top\n &[data-popper-placement^='top'] #{$self}-arrow {\n inset-block-start: 100%;\n inset-inline-start: calc(50% - #{tokens.$tooltip-arrow-size});\n border-block-start: #{tokens.$tooltip-arrow-size} solid;\n border-inline-start: #{tokens.$tooltip-arrow-size} solid transparent;\n border-inline-end: #{tokens.$tooltip-arrow-size} solid transparent;\n }\n\n &[data-popper-placement='top-start'] #{$self}-arrow {\n inset-inline-start: #{tokens.$tooltip-arrow-offset};\n }\n\n &[data-popper-placement='top-end'] #{$self}-arrow {\n inset-inline: auto #{tokens.$tooltip-arrow-offset};\n }\n\n // Arrow + left\n &[data-popper-placement^='left'] #{$self}-arrow {\n inset-block-start: calc(50% - #{tokens.$tooltip-arrow-size});\n inset-inline-start: 100%;\n border-inline-start: #{tokens.$tooltip-arrow-size} solid;\n border-block-start: #{tokens.$tooltip-arrow-size} solid transparent;\n border-block-end: #{tokens.$tooltip-arrow-size} solid transparent;\n }\n\n &[data-popper-placement='left-start'] #{$self}-arrow {\n inset-block-start: #{tokens.$tooltip-arrow-offset};\n }\n\n &[data-popper-placement='left-end'] #{$self}-arrow {\n inset-block: auto #{tokens.$tooltip-arrow-offset};\n }\n\n // Arrow + right\n &[data-popper-placement^='right'] #{$self}-arrow {\n inset-block-start: calc(50% - #{tokens.$tooltip-arrow-size});\n inset-inline-end: 100%;\n border-inline-end: #{tokens.$tooltip-arrow-size} solid;\n border-block-start: #{tokens.$tooltip-arrow-size} solid transparent;\n border-block-end: #{tokens.$tooltip-arrow-size} solid transparent;\n }\n\n &[data-popper-placement='right-start'] #{$self}-arrow {\n inset-block-start: #{tokens.$tooltip-arrow-offset};\n }\n\n &[data-popper-placement='right-end'] #{$self}-arrow {\n inset-block: auto #{tokens.$tooltip-arrow-offset};\n }\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n Method,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { h } from '../../utils/renderer';\nimport Popover from '../../utils/popover';\n\n/**\n * Tooltips display additional information based on a specific action.\n * @slot - The tooltip's target element. Only the first element will be used as the target.\n * @slot content - The tooltip's content. Alternatively, you can use the content prop.\n */\n@Component({\n tag: 'nano-tooltip',\n styleUrl: 'tooltip.scss',\n shadow: true,\n})\nexport class Tooltip {\n private isVisible = false;\n private popover: Popover;\n private tooltipPositioner: HTMLElement;\n private tooltip: HTMLElement;\n\n private _target: HTMLElement;\n private get target() {\n return this._target;\n }\n private set target(newTarget) {\n if (newTarget !== this._target && this._target) {\n this._target.removeAttribute('aria-label');\n }\n newTarget.setAttribute('aria-label', this.label);\n this._target = newTarget;\n }\n\n private label = '';\n\n @Element() host: HTMLNanoTooltipElement;\n\n /** The tooltip's content. Alternatively, you can use the content slot. */\n @Prop() content = '';\n\n @Watch('content')\n setLabel() {\n const contentSlotNodes = Array.from(\n this.host.querySelectorAll('[slot=\"content\"]')\n );\n const textContent = contentSlotNodes\n .map((node) => node.textContent)\n .join(' ')\n .trim();\n\n if (!this.target) {\n this.target = this.getTarget();\n\n if (!this.target) return;\n }\n\n this.label = textContent || this.content;\n this.target.setAttribute('aria-label', this.label);\n }\n\n /**\n * The preferred placement of the tooltip. Note that the actual placement may vary as needed to keep the tooltip\n * inside of the viewport.\n */\n @Prop() placement:\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start'\n | 'left-end' = 'top';\n\n /** Set to true to disable the tooltip so it won't show when triggered. */\n @Prop() disabled = false;\n\n /** The distance in pixels from which to offset the tooltip away from its target. */\n @Prop() distance = 10;\n\n /** Indicates whether or not the tooltip is open. You can use this in lieu of the show/hide methods. */\n @Prop({ mutable: true, reflect: true }) open = false;\n\n /** The distance in pixels from which to offset the tooltip along its target. */\n @Prop() skidding = 0;\n\n /**\n * Enable this option to prevent the panel from being clipped when the component is placed inside a container with\n * `overflow: auto|scroll`.\n */\n @Prop({ mutable: true }) hoist = false;\n\n /**\n * Controls how the tooltip is activated. Possible options include `click`, `hover`, `focus`, and `manual`. Multiple\n * options can be passed by separating them with a space. When manual is used, the tooltip must be activated\n * programmatically.\n */\n @Prop() trigger: string = 'hover focus';\n\n @Watch('open')\n handleOpenChange() {\n if (this.open) this.show();\n else this.hide();\n }\n\n // Events\n\n /** Emitted when the tooltip begins to show. Calling `event.preventDefault()` will prevent it from being shown. */\n @Event() nanoShow: EventEmitter;\n\n /** Emitted after the tooltip has shown and all transitions are complete. */\n @Event() nanoAfterShow: EventEmitter;\n\n /** Emitted when the tooltip begins to hide. Calling `event.preventDefault()` will prevent it from being hidden. */\n @Event() nanoHide: EventEmitter;\n\n /** Emitted after the tooltip has hidden and all transitions are complete. */\n @Event() nanoAfterHide: EventEmitter;\n\n // Public methods\n\n /** Shows the tooltip. */\n @Method()\n async show() {\n // Prevent subsequent calls to the method, whether manually or triggered by the `open` watcher\n if (this.isVisible || this.disabled) {\n return;\n }\n const slShow = this.nanoShow.emit();\n if (slShow.defaultPrevented) {\n this.open = false;\n return;\n }\n\n this.isVisible = true;\n this.open = true;\n if (typeof this.tooltipPositioner?.showPopover === 'function') {\n this.hoist = true;\n this.popover.show();\n this.tooltipPositioner.showPopover();\n } else {\n this.popover.show();\n }\n }\n\n /** Hides the tooltip. */\n @Method()\n async hide() {\n // Prevent subsequent calls to the method, whether manually or triggered by the `open` watcher\n if (!this.isVisible) {\n return;\n }\n\n const slHide = this.nanoHide.emit();\n if (slHide.defaultPrevented) {\n this.open = true;\n return;\n }\n\n this.isVisible = false;\n this.open = false;\n this.popover.hide();\n\n setTimeout(() => {\n if (\n !this.open &&\n typeof this.tooltipPositioner?.hidePopover === 'function'\n ) {\n this.tooltipPositioner.hidePopover();\n }\n }, 300);\n }\n\n // Private methods\n\n private getTarget() {\n // Get the first child that isn't a <style> or content slot\n const target = [...Array.from(this.host.children)].find(\n (el) =>\n el.tagName.toLowerCase() !== 'style' &&\n el.getAttribute('slot') !== 'content'\n ) as HTMLElement;\n\n if (!target) {\n throw new Error('Invalid tooltip target: no child element was found.');\n }\n\n return target;\n }\n\n private hasTrigger(triggerType: string) {\n const triggers = this.trigger.split(' ');\n return triggers.includes(triggerType);\n }\n\n private syncOptions() {\n this.popover.setOptions({\n strategy: this.hoist ? 'fixed' : 'absolute',\n placement: this.placement,\n distance: this.distance,\n skidding: this.skidding,\n transitionElement: this.tooltip,\n onAfterHide: () => this.nanoAfterHide.emit(),\n onAfterShow: () => this.nanoAfterShow.emit(),\n });\n }\n\n // Event Handlers\n\n private handleBlur = () => {\n if (this.hasTrigger('focus')) {\n this.hide();\n }\n };\n\n private handleClick = () => {\n if (this.hasTrigger('click')) {\n if (this.open) this.hide();\n else this.show();\n }\n };\n\n private handleFocus = () => {\n if (this.hasTrigger('focus')) {\n this.show();\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n // Pressing escape when the target element has focus should dismiss the tooltip\n if (this.open && event.key === 'Escape') {\n event.stopPropagation();\n this.hide();\n }\n };\n\n private handleMouseOver = () => {\n if (this.hasTrigger('hover')) {\n this.show();\n }\n };\n\n private handleMouseOut = () => {\n if (this.hasTrigger('hover')) {\n this.hide();\n }\n };\n\n private handleSlotChange = () => {\n this.target = this.getTarget();\n };\n\n // Stencil hooks\n\n componentDidLoad() {\n this.target = this.getTarget();\n this.popover = new Popover(this.target, this.tooltipPositioner);\n this.syncOptions();\n this.setLabel();\n\n // Show on init if open\n this.tooltipPositioner.hidden = !this.open;\n if (this.open) {\n this.show();\n }\n }\n\n componentDidUpdate() {\n this.syncOptions();\n }\n\n disconnectedCallback() {\n if (this.popover) this.popover.destroy();\n }\n\n render() {\n return (\n <Host\n onKeyDown={this.handleKeyDown}\n onMouseOver={this.handleMouseOver}\n onMouseOut={this.handleMouseOut}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onClick={this.handleClick}\n class=\"nano-tooltip\"\n >\n <slot onSlotchange={this.handleSlotChange} />\n <div\n ref={(el) => (this.tooltipPositioner = el)}\n class=\"tooltip-positioner\"\n popover=\"manual\"\n >\n <div\n part=\"base\"\n ref={(el) => (this.tooltip = el)}\n class={{\n tooltip: true,\n 'tooltip--open': this.open,\n }}\n role=\"tooltip\"\n aria-hidden={this.open ? 'false' : 'true'}\n >\n <slot name=\"content\" onSlotchange={() => this.setLabel()}>\n {this.content}\n </slot>\n <div class=\"tooltip-arrow\" data-popper-arrow></div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
- import{j as i,r as n,g as o,a as t}from"./index-6cc72cd9.js";import{h as r}from"./renderer-4bc3e2dc.js";import{c as s}from"./theme-d553c17a.js";let e;const a=()=>{if(!e){const i=window;i.Nanoicons=i.Nanoicons||{};e=i.Nanoicons.map=i.Nanoicons.map||new Map}return e};const c=i=>{let n=h(i.src);if(n){return n}n=f(i.name,i.icon);if(n){return l(n)}if(i.icon){n=h(i.icon);if(n){return n}}return null};const l=n=>{const o=a().get(n);if(o){return o}return i(`../nano-assets/fontawesome-pro/svgs/${n}.svg`)};const f=(i,n)=>{if(!i&&n&&!d(n)){i=n}if(u(i)){i=m(i)}if(!u(i)||i.trim()===""){return null}const o=i.replace(/[a-z]|-|\/|\d/gi,"");if(o!==""){console.warn("invalid characters in icon name "+i);return null}return i};const h=i=>{if(u(i)){i=i.trim();if(d(i)){return i}}return null};const d=i=>i.length>0&&/(\/|\.)/.test(i);const u=i=>typeof i==="string";const m=i=>i.toLowerCase();const p=i=>{if(i){const n=document.createElement("div");n.innerHTML=i;for(let i=n.childNodes.length-1;i>=0;i--){if(n.childNodes[i].nodeName.toLowerCase()!=="svg"){n.removeChild(n.childNodes[i])}}const o=n.firstElementChild;if(o&&o.nodeName.toLowerCase()==="svg"){const i=o.getAttribute("class")||"";o.setAttribute("class",(i+" sc-nano-icon s-nano-icon svg").trim());if(b(o)){return n.innerHTML}}}return""};const b=i=>{if(i.nodeType===1){if(i.nodeName.toLowerCase()==="script"){return false}for(let n=0;n<i.attributes.length;n++){const o=i.attributes[n].value;if(u(o)&&o.toLowerCase().indexOf("on")===0){return false}}for(let n=0;n<i.childNodes.length;n++){if(!b(i.childNodes[n])){return false}}}return true};const g=new Map;const v=new Map;const y=i=>{let n=v.get(i);if(!n){n=fetch(i).then((n=>{if(n.ok){return n.text().then((n=>{g.set(i,p(n))}))}g.set(i,"")}));v.set(i,n)}return n};const w=":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--color:var(--nano-color-base, currentcolor);--primary-color:var(--nano-color-tint, currentcolor);--secondary-color:var(--nano-color-shade, currentcolor);--stroke-width:32px;--primary-opacity:0.8;--secondary-opacity:1;--icon-size:var(--nano-icon-size, 1em);--icon-margin-top:var(--nano-icon-margin-top, 0);--icon-margin-end:var(--nano-icon-margin-end, 0);--icon-margin-bottom:var(--nano-icon-margin-bottom, 0);--icon-margin-start:var(--nano-icon-margin-start, 0);display:inline-block;inline-size:var(--icon-size);block-size:var(--icon-size);min-inline-size:var(--icon-size);min-block-size:var(--icon-size);contain:strict;fill:currentcolor;box-sizing:content-box !important;transition:opacity 0.3s ease;color:var(--color);margin-inline:var(--icon-margin-start) var(--icon-margin-end);margin-block:var(--icon-margin-top) var(--icon-margin-bottom)}:host .nanoicon{stroke:currentcolor}.nanoicon-fill-none{fill:none}.nanoicon-stroke-width{stroke-width:32px;stroke-width:var(--stroke-width)}.icon-inner,.nanoicon,svg,.svg{display:block;block-size:100%;inline-size:100%;overflow:visible}:host(.loading){opacity:0}.fa-primary{color:var(--primary-color);opacity:var(--primary-opacity, 1)}.fa-secondary{color:var(--secondary-color);opacity:var(--secondary-opacity) !important}:host(.flip-rtl) .icon-inner{transform:scaleX(-1)}:host(.icon-small){font-size:18px !important}:host(.icon-large){font-size:32px !important}";const z=w;const x=class{constructor(i){n(this,i)}io;get el(){return o(this)}svgContent;isVisible=false;isLoading=true;color;role;ariaLabel;flipRtl;name;src;icon;size;lazy=true;udpateRole(){if(this.ariaLabel)this.role="img";else if(!this.ariaLabel)this.role="presentation"}setAriaLabel(){if(!this.ariaLabel&&!this.el.ariaLabel){if(!this.role||this.role!=="presentation"){const i=f(this.name,this.icon);if(i){this.ariaLabel=i.split("/").slice(-1)[0].replace(/-/g," ")}}}else if(this.role==="presentation"){this.ariaLabel=undefined}}connectedCallback(){this.waitUntilVisible(this.el,"50px",(()=>{this.isVisible=true;this.loadIcon()}))}disconnectedCallback(){if(this.io){this.io.disconnect();this.io=undefined}}componentWillLoad(){this.udpateRole();this.setAriaLabel()}waitUntilVisible(i,n,o){if(this.lazy&&typeof window!=="undefined"&&window.IntersectionObserver){const t=this.io=new window.IntersectionObserver((i=>{if(i[0].isIntersecting||i[1]&&i[1].isIntersecting){t.disconnect();this.io=undefined;o()}}),{rootMargin:n});t.observe(i)}else{o()}}loadIcon(){if(this.isVisible){const i=c(this);if(i){if(g.has(i)){this.svgContent=g.get(i);requestAnimationFrame((()=>this.isLoading=false))}else{y(i).then((()=>{this.svgContent=g.get(i);requestAnimationFrame((()=>this.isLoading=false));this.setAriaLabel()}))}}}}isRtl(){if(this.el.ownerDocument?.dir==="rtl")return true;if(this.el.closest('[dir="rtl"]'))return true;const i=this.el.getRootNode();const n=i.host;if(n&&n.closest('[dir="rtl"]'))return true;return false}render(){const i=this.flipRtl||this.name&&(this.name.indexOf("arrow")>-1||this.name.indexOf("chevron")>-1)&&this.isRtl()&&this.flipRtl!==false;return r(t,{key:"b63eb962d8abc727b57cbb63b665296a2801f4a0",class:{...s(this.color),loading:this.isLoading,[`icon-${this.size}`]:!!this.size,"flip-rtl":!!i,"nano-icon":true}},this.svgContent?r("div",{class:"icon-inner",innerHTML:this.svgContent}):r("div",{class:"icon-inner"}))}static get watchers(){return{ariaLabel:["udpateRole"],role:["setAriaLabel"],name:["loadIcon"],src:["loadIcon"],icon:["loadIcon"]}}};x.style=z;export{x as nano_icon};
4
+ import{j as i,r as n,g as o,a as t}from"./index-6cc72cd9.js";import{h as r}from"./renderer-4bc3e2dc.js";import{c as s}from"./theme-d553c17a.js";let e;const a=()=>{if(!e){const i=window;i.Nanoicons=i.Nanoicons||{};e=i.Nanoicons.map=i.Nanoicons.map||new Map}return e};const c=i=>{let n=h(i.src);if(n){return n}n=f(i.name,i.icon);if(n){return l(n)}if(i.icon){n=h(i.icon);if(n){return n}}return null};const l=n=>{const o=a().get(n);if(o){return o}return i(`../nano-assets/fontawesome-pro/svgs/${n}.svg`)};const f=(i,n)=>{if(!i&&n&&!d(n)){i=n}if(u(i)){i=m(i)}if(!u(i)||i.trim()===""){return null}const o=i.replace(/[a-z]|-|\/|\d/gi,"");if(o!==""){console.warn("invalid characters in icon name "+i);return null}return i};const h=i=>{if(u(i)){i=i.trim();if(d(i)){return i}}return null};const d=i=>i.length>0&&/(\/|\.)/.test(i);const u=i=>typeof i==="string";const m=i=>i.toLowerCase();const p=i=>{if(i){const n=document.createElement("div");n.innerHTML=i;for(let i=n.childNodes.length-1;i>=0;i--){if(n.childNodes[i].nodeName.toLowerCase()!=="svg"){n.removeChild(n.childNodes[i])}}const o=n.firstElementChild;if(o&&o.nodeName.toLowerCase()==="svg"){const i=o.getAttribute("class")||"";o.setAttribute("class",(i+" sc-nano-icon s-nano-icon svg").trim());if(g(o)){return n.innerHTML}}}return""};const g=i=>{if(i.nodeType===1){if(i.nodeName.toLowerCase()==="script"){return false}for(let n=0;n<i.attributes.length;n++){const o=i.attributes[n].value;if(u(o)&&o.toLowerCase().indexOf("on")===0){return false}}for(let n=0;n<i.childNodes.length;n++){if(!g(i.childNodes[n])){return false}}}return true};const b=new Map;const v=new Map;const y=i=>{let n=v.get(i);if(!n){n=fetch(i).then((n=>{if(n.ok){return n.text().then((n=>{b.set(i,p(n))}))}b.set(i,"")}));v.set(i,n)}return n};const w=":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--color:var(--nano-color-base, currentcolor);--primary-color:var(--nano-color-tint, currentcolor);--secondary-color:var(--nano-color-shade, currentcolor);--stroke-width:32px;--primary-opacity:0.8;--secondary-opacity:1;--icon-size:var(--nano-icon-size, 1em);--icon-margin-top:var(--nano-icon-margin-top, 0);--icon-margin-end:var(--nano-icon-margin-end, 0);--icon-margin-bottom:var(--nano-icon-margin-bottom, 0);--icon-margin-start:var(--nano-icon-margin-start, 0);display:inline-block;inline-size:var(--icon-size);block-size:var(--icon-size);min-inline-size:var(--icon-size);min-block-size:var(--icon-size);contain:strict;fill:currentcolor;box-sizing:content-box !important;transition:opacity 0.3s ease;color:var(--color);margin-inline:var(--icon-margin-start) var(--icon-margin-end);margin-block:var(--icon-margin-top) var(--icon-margin-bottom)}:host .nanoicon{stroke:currentcolor}.nanoicon-fill-none{fill:none}.nanoicon-stroke-width{stroke-width:32px;stroke-width:var(--stroke-width)}.icon-inner,.nanoicon,svg,.svg{display:block;block-size:100%;inline-size:100%;overflow:visible}:host(.loading){opacity:0}.fa-primary{color:var(--primary-color);opacity:var(--primary-opacity, 1)}.fa-secondary{color:var(--secondary-color);opacity:var(--secondary-opacity) !important}:host(.flip-rtl) .icon-inner{transform:scaleX(-1)}:host(.icon-small){font-size:18px !important}:host(.icon-large){font-size:32px !important}";const z=w;const x=class{constructor(i){n(this,i)}io;get el(){return o(this)}svgContent;isVisible=false;isLoading=true;color;role;ariaLabel;flipRtl;name;src;icon;size;lazy=true;udpateRole(){if(this.ariaLabel)this.role="img";else if(!this.ariaLabel)this.role="presentation"}setAriaLabel(){if(!this.ariaLabel&&!this.el.ariaLabel){if(!this.role||this.role!=="presentation"){const i=f(this.name,this.icon);if(i){this.ariaLabel=i.split("/").slice(-1)[0].replace(/-/g," ")}}}else if(this.role==="presentation"){this.ariaLabel=undefined}}connectedCallback(){this.waitUntilVisible(this.el,"50px",(()=>{this.isVisible=true;this.loadIcon()}))}disconnectedCallback(){if(this.io){this.io.disconnect();this.io=undefined}}componentWillLoad(){this.udpateRole();this.setAriaLabel()}waitUntilVisible(i,n,o){if(this.lazy&&typeof window!=="undefined"&&window.IntersectionObserver){const t=this.io=new window.IntersectionObserver((i=>{if(i[0].isIntersecting||i[1]&&i[1].isIntersecting){t.disconnect();this.io=undefined;o()}}),{rootMargin:n});t.observe(i)}else{o()}}loadIcon(){if(this.isVisible){const i=c(this);if(i){if(b.has(i)){this.svgContent=b.get(i);requestAnimationFrame((()=>this.isLoading=false))}else{y(i).then((()=>{this.svgContent=b.get(i);requestAnimationFrame((()=>this.isLoading=false));this.setAriaLabel()}))}}}}isRtl(){if(this.el.ownerDocument?.dir==="rtl")return true;if(this.el.closest('[dir="rtl"]'))return true;const i=this.el.getRootNode();const n=i.host;if(n&&n.closest('[dir="rtl"]'))return true;return false}render(){const i=this.flipRtl||this.name&&(this.name.indexOf("arrow")>-1||this.name.indexOf("chevron")>-1)&&this.isRtl()&&this.flipRtl!==false;return r(t,{key:"bcb65502c19151978a0035c5493e1cfe37019c4a",class:{...s(this.color),loading:this.isLoading,[`icon-${this.size}`]:!!this.size,"flip-rtl":!!i,"nano-icon":true}},this.svgContent?r("div",{class:"icon-inner",innerHTML:this.svgContent}):r("div",{class:"icon-inner"}))}static get watchers(){return{ariaLabel:["udpateRole"],role:["setAriaLabel"],name:["loadIcon"],src:["loadIcon"],icon:["loadIcon"]}}};x.style=z;export{x as nano_icon};
5
5
  //# sourceMappingURL=nano-icon.entry.js.map