nanosplash 2.5.3 → 3.0.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 (102) hide show
  1. package/.github/workflows/ci.yml +48 -0
  2. package/.prettierrc +10 -9
  3. package/LICENSE +1 -1
  4. package/README.md +139 -72
  5. package/coverage/base.css +224 -0
  6. package/coverage/block-navigation.js +87 -0
  7. package/coverage/clover.xml +555 -0
  8. package/coverage/core/Dom.ts.html +565 -0
  9. package/coverage/core/Service.ts.html +790 -0
  10. package/coverage/core/Splash.ts.html +457 -0
  11. package/coverage/core/index.html +146 -0
  12. package/coverage/coverage-final.json +9043 -0
  13. package/coverage/favicon.png +0 -0
  14. package/coverage/index.html +131 -0
  15. package/coverage/prettify.css +1 -0
  16. package/coverage/prettify.js +2 -0
  17. package/coverage/sort-arrow-sprite.png +0 -0
  18. package/coverage/sorter.js +196 -0
  19. package/coverage/types/Types.ts.html +121 -0
  20. package/coverage/types/index.html +116 -0
  21. package/dist/latest/cjs/ns.cjs +1 -0
  22. package/dist/latest/cjs/style.css +1 -0
  23. package/dist/latest/es/ns.js +306 -0
  24. package/dist/latest/es/style.css +1 -0
  25. package/dist/latest/iife/ns.iife.js +4 -0
  26. package/dist/versioned/3.0.1/cjs/ns.cjs +1 -0
  27. package/dist/versioned/3.0.1/cjs/style.css +1 -0
  28. package/dist/versioned/3.0.1/es/ns.js +306 -0
  29. package/dist/versioned/3.0.1/es/style.css +1 -0
  30. package/dist/versioned/3.0.1/iife/ns.iife.js +2 -0
  31. package/docs/index.6d66a821.js +1 -0
  32. package/docs/index.74dbd99e.css +1 -0
  33. package/docs/index.f34144dc.js +1 -0
  34. package/docs/index.html +90 -114
  35. package/index.html +87 -115
  36. package/package.json +50 -36
  37. package/src/sass/ns.sass +95 -0
  38. package/src/ts/core/Dom.ts +160 -0
  39. package/src/ts/core/Service.ts +235 -0
  40. package/src/ts/core/ServiceInterface.ts +60 -0
  41. package/src/ts/core/Splash.ts +124 -0
  42. package/src/ts/core/SplashInterface.ts +54 -0
  43. package/src/ts/main.ts +9 -0
  44. package/src/ts/types/Types.ts +12 -0
  45. package/src/ts/types/global.d.ts +14 -0
  46. package/tests/Dom.spec.ts +127 -0
  47. package/tests/Guid.spec.ts +21 -0
  48. package/tests/Service.spec.ts +119 -0
  49. package/tests/Splash.spec.ts +64 -0
  50. package/tsconfig.json +20 -16
  51. package/vite.config.ts +27 -13
  52. package/vite.demo.config.ts +16 -0
  53. package/.github/workflows/production.yml +0 -60
  54. package/.github/workflows/release.yml +0 -61
  55. package/_config.yml +0 -1
  56. package/dist/iife/manifest.json +0 -7
  57. package/dist/iife/nanosplash.iife.js +0 -1
  58. package/dist/module/manifest.json +0 -7
  59. package/dist/module/nanosplash.cjs.js +0 -1
  60. package/dist/module/nanosplash.es.js +0 -371
  61. package/dist/module/style.css +0 -1
  62. package/docs/nanosplash.iife.js +0 -6
  63. package/docs/style.css +0 -1
  64. package/docs/typedoc/.nojekyll +0 -1
  65. package/docs/typedoc/assets/highlight.css +0 -22
  66. package/docs/typedoc/assets/icons.css +0 -1043
  67. package/docs/typedoc/assets/icons.png +0 -0
  68. package/docs/typedoc/assets/icons@2x.png +0 -0
  69. package/docs/typedoc/assets/main.js +0 -52
  70. package/docs/typedoc/assets/search.js +0 -1
  71. package/docs/typedoc/assets/style.css +0 -1414
  72. package/docs/typedoc/assets/widgets.png +0 -0
  73. package/docs/typedoc/assets/widgets@2x.png +0 -0
  74. package/docs/typedoc/classes/Core_Nanosplash.default.html +0 -133
  75. package/docs/typedoc/index.html +0 -1
  76. package/docs/typedoc/modules/Core_Nanosplash.html +0 -1
  77. package/docs/typedoc/modules/types.html +0 -1
  78. package/favicon.svg +0 -15
  79. package/postcss.config.js +0 -8
  80. package/src/Core/Nanosplash.ts +0 -257
  81. package/src/Core/SplashInstance.ts +0 -298
  82. package/src/Exceptions/DestinationException.ts +0 -13
  83. package/src/Exceptions/Exception.ts +0 -9
  84. package/src/Exceptions/IllegalArgumentException.ts +0 -11
  85. package/src/Factory/NanosplashFactory.ts +0 -93
  86. package/src/Interfaces/ContextualAPIInterface.ts +0 -8
  87. package/src/Interfaces/IdentityInterface.ts +0 -3
  88. package/src/Interfaces/InsideInterface.ts +0 -5
  89. package/src/Interfaces/NanosplashInterface.ts +0 -8
  90. package/src/Interfaces/ProgressInterface.ts +0 -5
  91. package/src/Interfaces/ShowInterface.ts +0 -5
  92. package/src/Interfaces/WhileInterface.ts +0 -5
  93. package/src/Repositories/NanosplashRepository.ts +0 -82
  94. package/src/Tests/dom.spec.ts +0 -72
  95. package/src/Utilities/dom.ts +0 -49
  96. package/src/main.ts +0 -5
  97. package/src/style.sass +0 -88
  98. package/src/types.d.ts +0 -59
  99. package/update-all.sh +0 -3
  100. package/vite.iife.config.js +0 -72
  101. package/vite.mod.config.js +0 -71
  102. package/vite.site.config.js +0 -22
@@ -0,0 +1 @@
1
+ var S=Object.defineProperty;var N=(t,e,n)=>e in t?S(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var c=(t,e,n)=>(N(t,typeof e!="symbol"?e+"":e,n),n);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const o of s)if(o.type==="childList")for(const l of o.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&r(l)}).observe(document,{childList:!0,subtree:!0});function n(s){const o={};return s.integrity&&(o.integrity=s.integrity),s.referrerPolicy&&(o.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?o.credentials="include":s.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(s){if(s.ep)return;s.ep=!0;const o=n(s);fetch(s.href,o)}})();const v="3.0.1";var u=(t=>(t.Add="add",t.Remove="remove",t))(u||{});const d=class d{constructor(){c(this,"id");c(this,"element");this.element=p(),this.element.id=this.id=d.generateGUID()}static generateGUID(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const n=Math.random()*16|0;return(e==="x"?n:n&3|8).toString(16)})}getNSContentElement(){return this.getNSElement().firstElementChild}getNSTextElement(){return this.getNSContentElement().firstElementChild}getId(){return this.id}getNSElement(){return this.element}setText(e){return this.getNSTextElement().innerText=e,e.length>0?this.showText():this.hideText(),this}showText(){return E(this.getNSTextElement()),this}hideText(){return I(this.getNSTextElement()),this}remove(){var e;return this.element&&((e=this.element.parentElement)==null||e.removeChild(this.element),delete this.element),this}};c(d,"NSClass","ns"),c(d,"NSHostClass","nsh");let a=d;function p(){return new DOMParser().parseFromString('<div class=ns><div class=nsc><div class=nst></div><div class=nss><svg viewBox="0 0 50 50"><circle class=path cx=25 cy=25 r=20 fill=none></circle></svg></div></div></div>',"text/html").body.firstChild}function y(t,e){e.children.length>0?e.insertBefore(t,e.children.item(0)):e.append(t)}function f(t,e){t==null||t.classList[e](a.NSHostClass)}function w(t){f(t.getNSElement().parentElement,u.Remove)}function E(t){t.style.display="flex"}function I(t){t.style.display="none"}function x(t){return t instanceof Element?t:document.querySelector(t||"")}function C(t){var e;return((e=t==null?void 0:t.classList)==null?void 0:e.contains(a.NSClass))??!1}function m(t,e){f(t.parentElement,u.Remove),f(e,u.Add),y(t,e)}function g(t){const e=t.firstElementChild;if(e!==null&&C(e)){const s=e.id;return h.getInstance().nsStack.find(l=>l.getId()===s)??null}return null}const i=class i{constructor(){c(this,"version");c(this,"nsStack");this.version=v,this.nsStack=[]}findIndex(e){return this.nsStack.findIndex(e)}find(e){return this.nsStack.find(e)}static getInstance(){return i.instance||(i.instance=new i),i.instance}static assignToWindow(){Object.defineProperty(window,i.WindowAccessorKey,{value:i.getInstance(),writable:!1})}static start(){i.assignToWindow(),window.addEventListener("load",()=>{window[i.WindowAccessorKey]instanceof i||i.assignToWindow()})}createNS(e){const n=new a;return n.setText(e||""),this.nsStack.push(n),n}cleanAndRemove(e){return w(e),e.remove().getId()}stackDelete(e){let n=this.findIndex(r=>r.getId()===e.getId());return n<0?null:(this.nsStack.splice(n,1),e.getId())}deleteNS(e){const n=this.find(e);return n?(this.cleanAndRemove(n),this.stackDelete(n)):null}show(e){let n=g(document.body);return n||(n=this.createNS(),m(n.getNSElement(),document.body)),n.setText(e||"").getId()}showInside(e,n){const r=x(e);if(r){let s=g(r);return s||(s=this.createNS()),m(s.getNSElement(),r),s.setText(n||"").getId()}return null}hide(){const e=this.nsStack.pop();return e?this.cleanAndRemove(e):null}hideAll(){this.nsStack.forEach(this.cleanAndRemove),this.nsStack.splice(0,this.nsStack.length)}hideId(e){return this.deleteNS(n=>n.getId()===e)}hideInside(e){const n=x(e),r=s=>s.getNSElement().parentElement===n;return n?this.deleteNS(r):null}};c(i,"WindowAccessorKey","ns"),c(i,"instance");let h=i;try{h.start()}catch(t){console.warn(t)}
package/docs/index.html CHANGED
@@ -2,130 +2,106 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
- <link rel="icon" type="image/svg+xml" href="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDEwIiBoZWlnaHQ9IjQwNCIgdmlld0JveD0iMCAwIDQxMCA0MDQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0zOTkuNjQxIDU5LjUyNDZMMjE1LjY0MyAzODguNTQ1QzIxMS44NDQgMzk1LjMzOCAyMDIuMDg0IDM5NS4zNzggMTk4LjIyOCAzODguNjE4TDEwLjU4MTcgNTkuNTU2M0M2LjM4MDg3IDUyLjE4OTYgMTIuNjgwMiA0My4yNjY1IDIxLjAyODEgNDQuNzU4NkwyMDUuMjIzIDc3LjY4MjRDMjA2LjM5OCA3Ny44OTI0IDIwNy42MDEgNzcuODkwNCAyMDguNzc2IDc3LjY3NjNMMzg5LjExOSA0NC44MDU4QzM5Ny40MzkgNDMuMjg5NCA0MDMuNzY4IDUyLjE0MzQgMzk5LjY0MSA1OS41MjQ2WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyKSIvPgo8cGF0aCBkPSJNMjkyLjk2NSAxLjU3NDRMMTU2LjgwMSAyOC4yNTUyQzE1NC41NjMgMjguNjkzNyAxNTIuOTA2IDMwLjU5MDMgMTUyLjc3MSAzMi44NjY0TDE0NC4zOTUgMTc0LjMzQzE0NC4xOTggMTc3LjY2MiAxNDcuMjU4IDE4MC4yNDggMTUwLjUxIDE3OS40OThMMTg4LjQyIDE3MC43NDlDMTkxLjk2NyAxNjkuOTMxIDE5NS4xNzIgMTczLjA1NSAxOTQuNDQzIDE3Ni42MjJMMTgzLjE4IDIzMS43NzVDMTgyLjQyMiAyMzUuNDg3IDE4NS45MDcgMjM4LjY2MSAxODkuNTMyIDIzNy41NkwyMTIuOTQ3IDIzMC40NDZDMjE2LjU3NyAyMjkuMzQ0IDIyMC4wNjUgMjMyLjUyNyAyMTkuMjk3IDIzNi4yNDJMMjAxLjM5OCAzMjIuODc1QzIwMC4yNzggMzI4LjI5NCAyMDcuNDg2IDMzMS4yNDkgMjEwLjQ5MiAzMjYuNjAzTDIxMi41IDMyMy41TDMyMy40NTQgMTAyLjA3MkMzMjUuMzEyIDk4LjM2NDUgMzIyLjEwOCA5NC4xMzcgMzE4LjAzNiA5NC45MjI4TDI3OS4wMTQgMTAyLjQ1NEMyNzUuMzQ3IDEwMy4xNjEgMjcyLjIyNyA5OS43NDYgMjczLjI2MiA5Ni4xNTgzTDI5OC43MzEgNy44NjY4OUMyOTkuNzY3IDQuMjczMTQgMjk2LjYzNiAwLjg1NTE4MSAyOTIuOTY1IDEuNTc0NFoiIGZpbGw9InVybCgjcGFpbnQxX2xpbmVhcikiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhciIgeDE9IjYuMDAwMTciIHkxPSIzMi45OTk5IiB4Mj0iMjM1IiB5Mj0iMzQ0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiM0MUQxRkYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjQkQzNEZFIi8+CjwvbGluZWFyR3JhZGllbnQ+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhciIgeDE9IjE5NC42NTEiIHkxPSI4LjgxODE4IiB4Mj0iMjM2LjA3NiIgeTI9IjI5Mi45ODkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iI0ZGRUE4MyIvPgo8c3RvcCBvZmZzZXQ9IjAuMDgzMzMzMyIgc3RvcC1jb2xvcj0iI0ZGREQzNSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGRkE4MDAiLz4KPC9saW5lYXJHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K" />
6
- <script src="https://cdn.tailwindcss.com"></script>
7
- <link href="https://cdn.lineicons.com/3.0/lineicons.css" rel="stylesheet" />
8
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
9
6
  <title>Nanosplash</title>
10
- <meta name="description" content="The tiny loading screen" />
11
- <meta name="keywords" content="splash, screen, loading" />
12
- <meta name="author" content="Isak Hauge" />
13
- <script type="module" crossorigin src="/nanosplash.iife.js"></script>
14
- <link rel="stylesheet" href="/style.css">
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0" />
9
+ <script type="module" crossorigin src="/nanosplash/index.f34144dc.js"></script>
10
+ <link rel="stylesheet" href="/nanosplash/index.74dbd99e.css">
15
11
  </head>
16
- <body class="flex flex-col justify-between">
17
- <div class="w-100 min-h-screen flex flex-col justify-center items-center">
18
- <div class="text-4xl text-slate-900 drop-shadow-lg">Nanosplash</div>
19
- <div class="text-pink-500 mt-3 font-mono text-sm">ns.show('text').inside('#id')</div>
20
- <div class="flex gap-5">
21
- <div
22
- id="demo"
23
- class="bg-pink-500 text-pink-200 p-3 cursor-pointer hover:text-white rounded-xl shadow-xl mt-8"
24
- >
25
- <i class="lni lni-play"></i>
26
- Display demo
27
- </div>
28
- <a
29
- href="#example"
30
- class="bg-slate-500 text-slate-200 p-3 cursor-pointer hover:text-white rounded-xl shadow-xl mt-8"
31
- >
32
- Show examples
33
- </a>
34
- </div>
35
- <div class="flex flex-col space-y-2 my-10">
36
- <div class="flex space-x-2 justify-center">
37
- <img src="https://badgen.net/npm/v/nanosplash" />
38
- <img src="https://badgen.net/npm/types/nanosplash" />
39
- <img src="https://badgen.net/npm/dw/nanosplash" />
40
- </div>
41
- <div class="flex space-x-2 justify-center">
42
- <img src="https://badgen.net/bundlephobia/min/nanosplash" />
43
- <img
44
- src="https://badgen.net/bundlephobia/tree-shaking/nanosplash"
45
- />
46
- </div>
47
- </div>
48
- <div class="flex rounded-xl text-slate-400 shadow-xl overflow-hidden">
49
- <div data-copy class="p-3 bg-slate-800 text-slate-400 font-mono">
50
- &lt;script src=&quot;https://unpkg.com/nanosplash/dist/iife/nanosplash.iife.js&quot;&gt;
51
- </div>
52
- <div id="copy" class="bg-pink-500 text-pink-200 p-3 cursor-pointer hover:text-white">Copy</div>
53
- </div>
54
- <div class="mt-10 flex justify-content items-center divide-x-2 text-slate-400">
55
- <a href="https://www.npmjs.com/package/nanosplash" target="_blank"><i class="lni lni-npm text-4xl hover:text-pink-500 px-5"></i></a>
56
- <a href="https://github.com/isakhauge/nanosplash" target="_blank"><i class="lni lni-github-original text-2xl hover:text-pink-500 px-5"></i></a>
12
+ <body class="bg-slate-50 min-w-full min-h-screen">
13
+ <div
14
+ id="main"
15
+ class="min-h-screen flex flex-col justify-center items-center p-5 overflow-hidden">
16
+ <div class="text-slate-700 font-medium text-4xl md:text-4xl xl:text-5xl drop-shadow-md tracking-wide">
17
+ Nanosplash
57
18
  </div>
58
- <a class="mt-10 text-pink-300 hover:text-pink-500" href="https://rawcdn.githack.com/isakhauge/nanosplash/0a6cdef58b0e47c0cad911952b1a329df58d2c24/docs/typedoc/index.html">API Reference Documentation</a>
59
- </div>
60
- <div id="example" class="grid grid-cols-1 xl:grid-cols-2 gap-1">
61
- <div id="a" class="p-20 bg-slate-100 flex flex-col items-center">
62
- <div class="text-xl mb-10">Give user progress feedback</div>
63
- <div class="text-white bg-slate-800 p-5 rounded-xl shadow-2xl font-mono text-sm break-all">
64
- ns.progress(<br>
65
- &nbsp;&nbsp;[promise1, 'Loading A'],<br>
66
- &nbsp;&nbsp;[promise2, 'Loading B'],<br>
67
- &nbsp;&nbsp;[promise3, 'Loading C'],<br>
68
- ).inside('#myDiv')
69
- </div>
70
- </div>
71
- <div id="b" class="p-20 bg-slate-100 flex flex-col items-center">
72
- <div class="text-xl mb-10">Handle async functions</div>
73
- <div class="text-white bg-slate-800 p-5 rounded-xl shadow-2xl font-mono text-sm break-all">
74
- ns.while(promise).show('Loading ...').inside('#myDiv')
75
- </div>
19
+ <div class="mt-5 md:mt-10 flex max-w-md justify-center flex-wrap gap-x-1 gap-y-1 drop-shadow-md">
20
+ <img loading="lazy" src="https://badgen.net/npm/v/nanosplash" alt="Version">
21
+ <img loading="lazy" src="https://badgen.net/npm/license/nanosplash" alt="License">
22
+ <img loading="lazy" src="https://badgen.net/npm/types/nanosplash" alt="Types">
23
+ <img loading="lazy" src="https://badgen.net/bundlephobia/minzip/nanosplash" alt="Minzipped size">
24
+ <img loading="lazy" src="https://badgen.net/bundlephobia/dependency-count/nanosplash" alt="Dependency count">
25
+ <img loading="lazy" src="https://badgen.net/bundlephobia/tree-shaking/nanosplash" alt="Tree shaking">
76
26
  </div>
77
- <div id="c" class="p-20 bg-slate-100 flex flex-col items-center">
78
- <div class="text-xl mb-10">Display fullscreen</div>
79
- <div class="text-white bg-slate-800 p-5 rounded-xl shadow-2xl font-mono text-sm break-all">
80
- ns.show('Fullscreen text')
81
- </div>
27
+ <div class="mt-5 md:mt-10 flex gap-x-3 w-full max-w-[500px] justify-center">
28
+ <button
29
+ id="run"
30
+ type="button"
31
+ class="py-2 px-3 bg-white text-slate-700 rounded-xl shadow flex items-center gap-x-2 ease-in-out duration-300 shadow-md hover:shadow-2xl hover:translate-y-[-2px] border border-[rgba(0,0,0,0.02)]">
32
+ <span class="material-symbols-outlined">magic_button</span>
33
+ Run demo
34
+ </button>
35
+ <a
36
+ id="doc"
37
+ href="https://github.com/isakhauge/nanosplash"
38
+ type="button"
39
+ class="py-2 px-3 bg-white text-slate-700 rounded-xl shadow flex items-center gap-x-2 ease-in-out duration-300 shadow-md hover:shadow-2xl hover:translate-y-[-2px] border border-[rgba(0,0,0,0.02)]">
40
+ <span class="material-symbols-outlined">menu_book</span>
41
+ Documentation
42
+ </a>
82
43
  </div>
83
- <div id="d" class="p-20 bg-slate-100 flex flex-col items-center">
84
- <div class="text-xl mb-10">Display multiple, independent instances</div>
85
- <div class="text-white bg-slate-800 p-5 rounded-xl shadow-2xl font-mono text-sm break-all">
86
- ns.show('Loading component A').inside('#a')<br>
87
- ns.show('Loading component B').inside('#b')<br>
88
- ns.show('Loading component C').inside('#c')
44
+ <div
45
+ id="wrapper"
46
+ class="relative min-w-[300px] mt-5 md:mt-20 flex flex-col md:flex-row gap-y-5 md:gap-y-0 md:gap-x-5 justify-stretch items-stretch bg-white 00 p-10 md:p-10 xl:p-20 rounded-xl ease-in-out duration-500 shadow-md hover:shadow-2xl hover:translate-y-[-2px] border border-[rgba(0,0,0,0.02)]">
47
+ <div class="absolute top-2 left-2 font-mono text-xs md:text-sm xl:text-base text-slate-500 cursor-default">#wrapper</div>
48
+ <div
49
+ id="a"
50
+ class="relative bg-white p-8 md:p-10 xl:p-20 rounded-xl shadow-md ease-in-out duration-500 hover:shadow-2xl hover:translate-y-[-2px] border border-[rgba(0,0,0,0.02)]">
51
+ <div class="absolute top-2 left-2 font-mono text-xs md:text-sm xl:text-base text-slate-500 cursor-default">#a</div>
52
+ <div class="text-slate-500 text-base md:text-xl xl:text-2xl font-medium cursor-default">Element A</div>
89
53
  </div>
90
- </div>
91
- <div id="e" class="p-20 bg-slate-100 flex flex-col items-center">
92
- <div class="text-xl mb-10">Move splash instance to another destination</div>
93
- <div class="text-white bg-slate-800 p-5 rounded-xl shadow-2xl font-mono text-sm break-all">
94
- const splash = ns.show('Loading').inside('#a')<br>
95
- splash.moveTo('#b')
54
+ <div
55
+ id="b"
56
+ class="relative bg-white p-8 md:p-10 xl:p-20 rounded-xl shadow-md ease-in-out duration-500 hover:shadow-2xl hover:translate-y-[-2px] border border-[rgba(0,0,0,0.02)]">
57
+ <div class="absolute top-2 left-2 font-mono text-xs md:text-sm xl:text-base text-slate-500 cursor-default">#b</div>
58
+ <div class="text-slate-500 text-base md:text-xl xl:text-2xl font-medium cursor-default">Element B</div>
96
59
  </div>
97
- </div>
98
- <div id="f" class="p-20 bg-slate-100 flex flex-col items-center">
99
- <div class="text-xl mb-10">Hide splash instances</div>
100
- <div class="text-white bg-slate-800 p-5 rounded-xl shadow-2xl font-mono text-sm break-all">
101
- // Hides one instance at a time, in a LIFO-fashion.<br>
102
- ns.hide()<br><br>
103
- // Hides all instances.<br>
104
- ns.hideAll()
60
+ <div
61
+ id="c"
62
+ class="relative bg-white p-8 md:p-10 xl:p-20 rounded-xl shadow-md ease-in-out duration-500 hover:shadow-2xl hover:translate-y-[-2px] border border-[rgba(0,0,0,0.02)]">
63
+ <div class="absolute top-2 left-2 font-mono text-xs md:text-sm xl:text-base text-slate-500 cursor-default">#c</div>
64
+ <div class="text-slate-500 text-base md:text-xl xl:text-2xl font-medium cursor-default">Element C</div>
105
65
  </div>
106
66
  </div>
107
67
  </div>
108
- <footer>
109
-
110
- <script>
111
- window.addEventListener('load', () => {
112
- document.getElementById('demo').onclick = function () {
113
- const wait = ms => new Promise(r => setTimeout(r, ms))
114
- window.ns.progress(
115
- [wait(2000), 'Loading data from API'],
116
- [wait(4000), 'Restructuring'],
117
- [wait(6000), 'Indexing'],
118
- [wait(8000), 'Give this repo a star']
119
- )
120
- }
121
- document.getElementById('copy').onclick = function () {
122
- const text = document.querySelector('[data-copy]').innerText
123
- navigator.clipboard.writeText(text)
124
- alert('Copied to clipboard!')
125
- }
126
- })
127
- </script>
128
- </footer>
129
- <style>body{min-height:100vh}</style>
68
+
69
+ <script>
70
+ const wait = (ms) => new Promise(r => setTimeout(r, ms))
71
+ const ref = (selector) => document.querySelector(selector)
72
+ const run = ref('#run')
73
+ run.onclick = async () => {
74
+ console.log('Running demo')
75
+ const sec = (n) => n * 1000
76
+ ns.show('Nanosplash')
77
+ await wait(sec(2))
78
+ ns.show('Tiny loading screen')
79
+ await wait(sec(2))
80
+ ns.show('For web artisans')
81
+ await wait(sec(2))
82
+ ns.hide()
83
+ ns.showInside('#wrapper', 'Display over elements')
84
+ await wait(sec(2.25))
85
+ ns.hide()
86
+ ns.showInside('#a', 'Like this')
87
+ await wait(sec(0.5))
88
+ ns.showInside('#b', 'This')
89
+ await wait(sec(0.5))
90
+ ns.showInside('#c', 'Or this')
91
+ await wait(sec(1))
92
+ ns.hideAll()
93
+ ns.show('Simple API')
94
+ await wait(sec(1.5))
95
+ ns.show('1.5kb minzipped')
96
+ await wait(sec(1.5))
97
+ ns.show('No dependencies')
98
+ await wait(sec(1.5))
99
+ ns.show('99% test coverage')
100
+ await wait(sec(1.5))
101
+ ns.show('Nanosplash')
102
+ await wait(sec(2))
103
+ ns.hide()
104
+ }
105
+ </script>
130
106
  </body>
131
107
  </html>
package/index.html CHANGED
@@ -2,132 +2,104 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
- <link rel="icon" type="image/svg+xml" href="favicon.svg" />
6
- <script src="https://cdn.tailwindcss.com"></script>
7
- <link href="https://cdn.lineicons.com/3.0/lineicons.css" rel="stylesheet" />
8
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
9
6
  <title>Nanosplash</title>
10
- <meta name="description" content="The tiny loading screen" />
11
- <meta name="keywords" content="splash, screen, loading" />
12
- <meta name="author" content="Isak Hauge" />
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0" />
13
9
  </head>
14
- <body class="flex flex-col justify-between">
15
- <div class="w-100 min-h-screen flex flex-col justify-center items-center">
16
- <div class="text-4xl text-slate-900 drop-shadow-lg">Nanosplash</div>
17
- <div class="text-pink-500 mt-3 font-mono text-sm">ns.show('text').inside('#id')</div>
18
- <div class="flex gap-5">
19
- <div
20
- id="demo"
21
- class="bg-pink-500 text-pink-200 p-3 cursor-pointer hover:text-white rounded-xl shadow-xl mt-8"
22
- >
23
- <i class="lni lni-play"></i>
24
- Display demo
25
- </div>
26
- <a
27
- href="#example"
28
- class="bg-slate-500 text-slate-200 p-3 cursor-pointer hover:text-white rounded-xl shadow-xl mt-8"
29
- >
30
- Show examples
31
- </a>
32
- </div>
33
- <div class="flex flex-col space-y-2 my-10">
34
- <div class="flex space-x-2 justify-center">
35
- <img src="https://badgen.net/npm/v/nanosplash" />
36
- <img src="https://badgen.net/npm/types/nanosplash" />
37
- <img src="https://badgen.net/npm/dw/nanosplash" />
38
- </div>
39
- <div class="flex space-x-2 justify-center">
40
- <img src="https://badgen.net/bundlephobia/min/nanosplash" />
41
- <img
42
- src="https://badgen.net/bundlephobia/tree-shaking/nanosplash"
43
- />
44
- </div>
45
- </div>
46
- <div class="flex rounded-xl text-slate-400 shadow-xl overflow-hidden">
47
- <div data-copy class="p-3 bg-slate-800 text-slate-400 font-mono">
48
- &lt;script src=&quot;https://unpkg.com/nanosplash/dist/iife/nanosplash.iife.js&quot;&gt;
49
- </div>
50
- <div id="copy" class="bg-pink-500 text-pink-200 p-3 cursor-pointer hover:text-white">Copy</div>
51
- </div>
52
- <div class="mt-10 flex justify-content items-center divide-x-2 text-slate-400">
53
- <a href="https://www.npmjs.com/package/nanosplash" target="_blank"><i class="lni lni-npm text-4xl hover:text-pink-500 px-5"></i></a>
54
- <a href="https://github.com/isakhauge/nanosplash" target="_blank"><i class="lni lni-github-original text-2xl hover:text-pink-500 px-5"></i></a>
10
+ <body class="bg-slate-50 min-w-full min-h-screen">
11
+ <div
12
+ id="main"
13
+ class="min-h-screen flex flex-col justify-center items-center p-5 overflow-hidden">
14
+ <div class="text-slate-700 font-medium text-4xl md:text-4xl xl:text-5xl drop-shadow-md tracking-wide">
15
+ Nanosplash
55
16
  </div>
56
- <a class="mt-10 text-pink-300 hover:text-pink-500" href="https://rawcdn.githack.com/isakhauge/nanosplash/0a6cdef58b0e47c0cad911952b1a329df58d2c24/docs/typedoc/index.html">API Reference Documentation</a>
57
- </div>
58
- <div id="example" class="grid grid-cols-1 xl:grid-cols-2 gap-1">
59
- <div id="a" class="p-20 bg-slate-100 flex flex-col items-center">
60
- <div class="text-xl mb-10">Give user progress feedback</div>
61
- <div class="text-white bg-slate-800 p-5 rounded-xl shadow-2xl font-mono text-sm break-all">
62
- ns.progress(<br>
63
- &nbsp;&nbsp;[promise1, 'Loading A'],<br>
64
- &nbsp;&nbsp;[promise2, 'Loading B'],<br>
65
- &nbsp;&nbsp;[promise3, 'Loading C'],<br>
66
- ).inside('#myDiv')
67
- </div>
68
- </div>
69
- <div id="b" class="p-20 bg-slate-100 flex flex-col items-center">
70
- <div class="text-xl mb-10">Handle async functions</div>
71
- <div class="text-white bg-slate-800 p-5 rounded-xl shadow-2xl font-mono text-sm break-all">
72
- ns.while(promise).show('Loading ...').inside('#myDiv')
73
- </div>
17
+ <div class="mt-5 md:mt-10 flex max-w-md justify-center flex-wrap gap-x-1 gap-y-1 drop-shadow-md">
18
+ <img loading="lazy" src="https://badgen.net/npm/v/nanosplash" alt="Version">
19
+ <img loading="lazy" src="https://badgen.net/npm/license/nanosplash" alt="License">
20
+ <img loading="lazy" src="https://badgen.net/npm/types/nanosplash" alt="Types">
21
+ <img loading="lazy" src="https://badgen.net/bundlephobia/minzip/nanosplash" alt="Minzipped size">
22
+ <img loading="lazy" src="https://badgen.net/bundlephobia/dependency-count/nanosplash" alt="Dependency count">
23
+ <img loading="lazy" src="https://badgen.net/bundlephobia/tree-shaking/nanosplash" alt="Tree shaking">
74
24
  </div>
75
- <div id="c" class="p-20 bg-slate-100 flex flex-col items-center">
76
- <div class="text-xl mb-10">Display fullscreen</div>
77
- <div class="text-white bg-slate-800 p-5 rounded-xl shadow-2xl font-mono text-sm break-all">
78
- ns.show('Fullscreen text')
79
- </div>
25
+ <div class="mt-5 md:mt-10 flex gap-x-3 w-full max-w-[500px] justify-center">
26
+ <button
27
+ id="run"
28
+ type="button"
29
+ class="py-2 px-3 bg-white text-slate-700 rounded-xl shadow flex items-center gap-x-2 ease-in-out duration-300 shadow-md hover:shadow-2xl hover:translate-y-[-2px] border border-[rgba(0,0,0,0.02)]">
30
+ <span class="material-symbols-outlined">magic_button</span>
31
+ Run demo
32
+ </button>
33
+ <a
34
+ id="doc"
35
+ href="https://github.com/isakhauge/nanosplash"
36
+ type="button"
37
+ class="py-2 px-3 bg-white text-slate-700 rounded-xl shadow flex items-center gap-x-2 ease-in-out duration-300 shadow-md hover:shadow-2xl hover:translate-y-[-2px] border border-[rgba(0,0,0,0.02)]">
38
+ <span class="material-symbols-outlined">menu_book</span>
39
+ Documentation
40
+ </a>
80
41
  </div>
81
- <div id="d" class="p-20 bg-slate-100 flex flex-col items-center">
82
- <div class="text-xl mb-10">Display multiple, independent instances</div>
83
- <div class="text-white bg-slate-800 p-5 rounded-xl shadow-2xl font-mono text-sm break-all">
84
- ns.show('Loading component A').inside('#a')<br>
85
- ns.show('Loading component B').inside('#b')<br>
86
- ns.show('Loading component C').inside('#c')
42
+ <div
43
+ id="wrapper"
44
+ class="relative min-w-[300px] mt-5 md:mt-20 flex flex-col md:flex-row gap-y-5 md:gap-y-0 md:gap-x-5 justify-stretch items-stretch bg-white 00 p-10 md:p-10 xl:p-20 rounded-xl ease-in-out duration-500 shadow-md hover:shadow-2xl hover:translate-y-[-2px] border border-[rgba(0,0,0,0.02)]">
45
+ <div class="absolute top-2 left-2 font-mono text-xs md:text-sm xl:text-base text-slate-500 cursor-default">#wrapper</div>
46
+ <div
47
+ id="a"
48
+ class="relative bg-white p-8 md:p-10 xl:p-20 rounded-xl shadow-md ease-in-out duration-500 hover:shadow-2xl hover:translate-y-[-2px] border border-[rgba(0,0,0,0.02)]">
49
+ <div class="absolute top-2 left-2 font-mono text-xs md:text-sm xl:text-base text-slate-500 cursor-default">#a</div>
50
+ <div class="text-slate-500 text-base md:text-xl xl:text-2xl font-medium cursor-default">Element A</div>
87
51
  </div>
88
- </div>
89
- <div id="e" class="p-20 bg-slate-100 flex flex-col items-center">
90
- <div class="text-xl mb-10">Move splash instance to another destination</div>
91
- <div class="text-white bg-slate-800 p-5 rounded-xl shadow-2xl font-mono text-sm break-all">
92
- const splash = ns.show('Loading').inside('#a')<br>
93
- splash.moveTo('#b')
52
+ <div
53
+ id="b"
54
+ class="relative bg-white p-8 md:p-10 xl:p-20 rounded-xl shadow-md ease-in-out duration-500 hover:shadow-2xl hover:translate-y-[-2px] border border-[rgba(0,0,0,0.02)]">
55
+ <div class="absolute top-2 left-2 font-mono text-xs md:text-sm xl:text-base text-slate-500 cursor-default">#b</div>
56
+ <div class="text-slate-500 text-base md:text-xl xl:text-2xl font-medium cursor-default">Element B</div>
94
57
  </div>
95
- </div>
96
- <div id="f" class="p-20 bg-slate-100 flex flex-col items-center">
97
- <div class="text-xl mb-10">Hide splash instances</div>
98
- <div class="text-white bg-slate-800 p-5 rounded-xl shadow-2xl font-mono text-sm break-all">
99
- // Hides one instance at a time, in a LIFO-fashion.<br>
100
- ns.hide()<br><br>
101
- // Hides all instances.<br>
102
- ns.hideAll()
58
+ <div
59
+ id="c"
60
+ class="relative bg-white p-8 md:p-10 xl:p-20 rounded-xl shadow-md ease-in-out duration-500 hover:shadow-2xl hover:translate-y-[-2px] border border-[rgba(0,0,0,0.02)]">
61
+ <div class="absolute top-2 left-2 font-mono text-xs md:text-sm xl:text-base text-slate-500 cursor-default">#c</div>
62
+ <div class="text-slate-500 text-base md:text-xl xl:text-2xl font-medium cursor-default">Element C</div>
103
63
  </div>
104
64
  </div>
105
65
  </div>
106
- <footer>
107
- <script type="module" src="/src/main.ts"></script>
108
- <script>
109
- window.addEventListener('load', () => {
110
- document.getElementById('demo').onclick = function () {
111
- const wait = ms => new Promise(r => setTimeout(r, ms))
112
- window.ns.progress(
113
- [wait(2000), 'Loading data from API'],
114
- [wait(4000), 'Restructuring'],
115
- [wait(6000), 'Indexing'],
116
- [wait(8000), 'Give this repo a star']
117
- )
118
- }
119
- document.getElementById('copy').onclick = function () {
120
- const text = document.querySelector('[data-copy]').innerText
121
- navigator.clipboard.writeText(text)
122
- alert('Copied to clipboard!')
123
- }
124
- })
125
- </script>
126
- </footer>
127
- <style>
128
- body {
129
- min-height: 100vh;
66
+ <script type="module" src="src/ts/main.ts"></script>
67
+ <script>
68
+ const wait = (ms) => new Promise(r => setTimeout(r, ms))
69
+ const ref = (selector) => document.querySelector(selector)
70
+ const run = ref('#run')
71
+ run.onclick = async () => {
72
+ console.log('Running demo')
73
+ const sec = (n) => n * 1000
74
+ ns.show('Nanosplash')
75
+ await wait(sec(2))
76
+ ns.show('Tiny loading screen')
77
+ await wait(sec(2))
78
+ ns.show('For web artisans')
79
+ await wait(sec(2))
80
+ ns.hide()
81
+ ns.showInside('#wrapper', 'Display over elements')
82
+ await wait(sec(2.25))
83
+ ns.hide()
84
+ ns.showInside('#a', 'Like this')
85
+ await wait(sec(0.5))
86
+ ns.showInside('#b', 'This')
87
+ await wait(sec(0.5))
88
+ ns.showInside('#c', 'Or this')
89
+ await wait(sec(1))
90
+ ns.hideAll()
91
+ ns.show('Simple API')
92
+ await wait(sec(1.5))
93
+ ns.show('1.5kb minzipped')
94
+ await wait(sec(1.5))
95
+ ns.show('No dependencies')
96
+ await wait(sec(1.5))
97
+ ns.show('99% test coverage')
98
+ await wait(sec(1.5))
99
+ ns.show('Nanosplash')
100
+ await wait(sec(2))
101
+ ns.hide()
130
102
  }
131
- </style>
103
+ </script>
132
104
  </body>
133
105
  </html>
package/package.json CHANGED
@@ -1,10 +1,12 @@
1
1
  {
2
2
  "name": "nanosplash",
3
- "description": "The simple, tiny loading screen",
4
- "version": "2.5.3",
3
+ "description": "The tiny loading screen for web artisans",
4
+ "private": false,
5
+ "version": "3.0.1",
6
+ "type": "module",
5
7
  "author": {
6
8
  "name": "Isak K. Hauge",
7
- "email": "isakhauge@gmail.com",
9
+ "email": "isakhauge@icloud.com",
8
10
  "url": "https://no.linkedin.com/in/isakhauge"
9
11
  },
10
12
  "keywords": [
@@ -30,45 +32,57 @@
30
32
  "url": "https://github.com/isakhauge/nanosplash.git"
31
33
  },
32
34
  "license": "MIT",
33
- "main": "./dist/module/nanosplash.es.js",
34
- "module": "./dist/module/nanosplash.es.js",
35
- "source": "./src/Nanosplash.ts",
36
- "unpkg": "./dist/iife/nanosplash.iife.js",
37
- "style": "./dist/module/style.css",
35
+ "main": "./dist/latest/es/ns.js",
36
+ "module": "./dist/latest/es/ns.js",
37
+ "source": "./src/main.ts",
38
+ "unpkg": "./dist/latest/iife/ns.iife.js",
39
+ "style": "./dist/latest/es/style.css",
38
40
  "exports": {
39
41
  ".": {
40
- "import": "./dist/module/nanosplash.es.js",
41
- "require": "./dist/module/nanosplash.cjs.js",
42
- "default": "./dist/module/nanosplash.es.js"
42
+ "types": {
43
+ "require": "./src/ts/types/global.d.ts",
44
+ "default": "./src/ts/types/global.d.ts"
45
+ },
46
+ "browser": {
47
+ "require": "./dist/latest/cjs/ns.cjs",
48
+ "default": "./dist/latest/es/ns.js"
49
+ },
50
+ "default": {
51
+ "require": "./dist/latest/cjs/ns.cjs",
52
+ "default": "./dist/latest/es/ns.js"
53
+ }
43
54
  }
44
55
  },
45
- "types": "./src/types.d.ts",
56
+ "types": "./src/ts/types/global.d.ts",
46
57
  "scripts": {
47
- "dev": "vite --host",
48
- "build.iife": "vite build -c vite.iife.config.js",
49
- "build.mod": "vite build -c vite.mod.config.js",
50
- "build.site": "vite build -c vite.site.config.js",
51
- "build": "tsc && yarn build.iife && yarn build.mod && yarn build.site && yarn doc",
52
- "doc": "typedoc --readme none --excludePrivate --excludeInternal --out docs/typedoc --entryPoints src/Core/Nanosplash.ts src/types.d.ts",
53
- "doc.watch": "yarn doc --watch",
54
- "serve": "vite preview",
58
+ "dev": "vite",
59
+ "build": "yarn build:all && yarn build:all:versioned && yarn build:demo",
60
+ "build:es": "tsc && cross-env entry=./src/ts/core/Service.ts format=es yarn vite build -m production --c vite.config.ts",
61
+ "build:cjs": "tsc && cross-env entry=./src/ts/core/Service.ts format=cjs yarn vite build -m production --c vite.config.ts",
62
+ "build:iife": "tsc && cross-env entry=./src/ts/main.ts format=iife yarn vite build -m production --c vite.config.ts",
63
+ "build:es:ver": "tsc && cross-env versioned=true entry=./src/ts/core/Service.ts format=es yarn vite build -m production --c vite.config.ts",
64
+ "build:cjs:ver": "tsc && cross-env versioned=true entry=./src/ts/core/Service.ts format=cjs yarn vite build -m production --c vite.config.ts",
65
+ "build:iife:ver": "tsc && cross-env versioned=true entry=./src/ts/main.ts format=iife yarn vite build -m production --c vite.config.ts",
66
+ "build:all": "yarn build:es && yarn build:cjs && yarn build:iife",
67
+ "build:all:versioned": "yarn build:es:ver && yarn build:cjs:ver && yarn build:iife:ver",
68
+ "build:demo": "tsc && vite build -m production --c vite.demo.config.ts",
69
+ "preview": "vite preview",
55
70
  "test": "vitest",
56
- "coverage": "vitest run --coverage"
71
+ "test:ui": "vitest --ui",
72
+ "coverage": "vitest --coverage"
57
73
  },
58
74
  "devDependencies": {
59
- "@types/jest": "^28.1.1",
60
- "@types/jsdom": "^16.2.14",
61
- "autoprefixer": "^10.4.7",
62
- "c8": "^7.11.3",
63
- "cssnano": "^5.1.12",
64
- "jsdom": "^20.0.0",
65
- "postcss": "^8.4.14",
66
- "sass": "^1.52.3",
67
- "ts-jest": "^28.0.5",
68
- "ts-node": "^10.8.1",
69
- "typedoc": "^0.22.17",
70
- "typescript": "^4.7.4",
71
- "vite": "^2.9.12",
72
- "vitest": "^0.15.1"
75
+ "@types/jsdom": "^21.1.2",
76
+ "@types/node": "^20.5.9",
77
+ "@types/rollup": "^0.54.0",
78
+ "@vitest/coverage-v8": "^0.34.3",
79
+ "@vitest/ui": "^0.34.3",
80
+ "cross-env": "^7.0.3",
81
+ "jsdom": "^22.1.0",
82
+ "sass": "^1.66.1",
83
+ "terser": "^5.19.3",
84
+ "typescript": "^5.2.2",
85
+ "vite": "^4.4.9",
86
+ "vitest": "^0.34.3"
73
87
  }
74
- }
88
+ }