vite-plugin-react-splash 1.0.3 → 1.0.4

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.
package/README.md CHANGED
@@ -71,6 +71,7 @@ function App() {
71
71
  | Option | Type | Description |
72
72
  | --- | --- | --- |
73
73
  | `logo` | `string \| { light: string, dark: string }` | SVG string or object with light/dark versions. |
74
+ | `mode` | `'light' \| 'dark' \| 'auto'` | Theme mode. `'auto'` detects system settings (default). |
74
75
  | `duration` | `number` | Time in ms before the splash screen automatically hides. |
75
76
  | `text` | `string` | Text to display below the logo. |
76
77
  | `version` | `string` | Version string to display at the bottom. |
package/dist/index.d.mts CHANGED
@@ -18,6 +18,7 @@ interface SplashScreenOptions {
18
18
  color: string;
19
19
  };
20
20
  };
21
+ mode?: 'light' | 'dark' | 'auto';
21
22
  animation?: 'none' | 'fade' | 'pulse' | 'slide-up' | 'gradient-mesh';
22
23
  meshColors?: string[];
23
24
  onlyStandalone?: boolean;
package/dist/index.d.ts CHANGED
@@ -18,6 +18,7 @@ interface SplashScreenOptions {
18
18
  color: string;
19
19
  };
20
20
  };
21
+ mode?: 'light' | 'dark' | 'auto';
21
22
  animation?: 'none' | 'fade' | 'pulse' | 'slide-up' | 'gradient-mesh';
22
23
  meshColors?: string[];
23
24
  onlyStandalone?: boolean;
package/dist/index.js CHANGED
@@ -1,13 +1,30 @@
1
- 'use strict';var react=require('react');var h=t=>{let{theme:s,animation:a,meshColors:e}=t,o=s?.light||{background:"#ffffff",color:"#000000"},i=s?.dark||{background:"#000000",color:"#ffffff"},n="";if(a==="pulse"&&(n+=`
1
+ 'use strict';var react=require('react');var h=a=>{let{theme:e,animation:r,meshColors:o,mode:i="auto"}=a,s=e?.light||{background:"#ffffff",color:"#000000"},t=e?.dark||{background:"#000000",color:"#ffffff"},n="",l="";if(i==="light"?l=`
2
+ #vite-splash-screen { background-color: ${s.background}; color: ${s.color}; }
3
+ .splash-logo-light { display: block; }
4
+ .splash-logo-dark { display: none; }
5
+ `:i==="dark"?l=`
6
+ #vite-splash-screen { background-color: ${t.background}; color: ${t.color}; }
7
+ .splash-logo-light { display: none; }
8
+ .splash-logo-dark { display: block; }
9
+ `:l=`
10
+ #vite-splash-screen { background-color: ${s.background}; color: ${s.color}; }
11
+ .splash-logo-light { display: block; }
12
+ .splash-logo-dark { display: none; }
13
+ @media (prefers-color-scheme: dark) {
14
+ #vite-splash-screen { background-color: ${t.background}; color: ${t.color}; }
15
+ .splash-logo-dark { display: block; }
16
+ .splash-logo-light { display: none; }
17
+ }
18
+ `,r==="pulse"&&(n+=`
2
19
  .splash-logo { animation: splash-pulse 2s infinite; }
3
20
  @keyframes splash-pulse {
4
21
  0%, 100% { transform: scale(1); opacity: 1; }
5
22
  50% { transform: scale(1.1); opacity: 0.8; }
6
23
  }
7
- `),a==="gradient-mesh"){let r=["#3498db","#9b59b6","#2ecc71"],c=e?.length?e:r,l=["center","20% 30%","80% 70%","40% 80%","70% 20%","10% 60%","90% 40%"],d=c.map((m,f)=>`radial-gradient(circle at ${l[f%l.length]}, ${m} 0%, transparent 50%)`).join(",");n+=`
24
+ `),r==="gradient-mesh"){let c=["#3498db","#9b59b6","#2ecc71"],g=o?.length?o:c,d=["center","20% 30%","80% 70%","40% 80%","70% 20%","10% 60%","90% 40%"],m=g.map((f,u)=>`radial-gradient(circle at ${d[u%d.length]}, ${f} 0%, transparent 50%)`).join(",");n+=`
8
25
  #vite-splash-screen::before {
9
26
  content: ""; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%;
10
- background: ${d}; z-index: -1; animation: rotate-mesh 20s linear infinite;
27
+ background: ${m}; z-index: -1; animation: rotate-mesh 20s linear infinite;
11
28
  opacity: 0.3; filter: blur(60px);
12
29
  }
13
30
  @keyframes rotate-mesh { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
@@ -17,31 +34,25 @@
17
34
  display: flex; flex-direction: column; align-items: center; justify-content: center;
18
35
  z-index: 999999; transition: opacity 0.5s, visibility 0.5s;
19
36
  font-family: -apple-system, system-ui, sans-serif;
20
- background-color: ${o.background}; color: ${o.color};
37
+ background-color: ${s.background}; color: ${s.color};
21
38
  }
22
39
  #vite-splash-screen.hidden { opacity: 0; visibility: hidden; pointer-events: none; }
23
40
  .splash-logo { width: 120px; height: 120px; margin-bottom: 20px; }
24
41
  .splash-logo svg { fill: currentColor; width: 100%; height: 100%; }
25
- .splash-logo-dark { display: none; }
26
- .splash-logo-light { display: block; }
27
42
  .splash-text { font-size: 1.2rem; font-weight: 500; }
28
43
  .splash-version { position: absolute; bottom: 20px; font-size: 0.8rem; opacity: 0.7; }
29
- @media (prefers-color-scheme: dark) {
30
- #vite-splash-screen { background-color: ${i.background}; color: ${i.color}; }
31
- .splash-logo-dark { display: block; }
32
- .splash-logo-light { display: none; }
33
- }
44
+ ${l}
34
45
  ${n}
35
- `.replace(/\s+/g," ").trim()};function u(){return {hideSplashScreen:react.useCallback(()=>{let s=document.getElementById("vite-splash-screen");s&&(s.classList.add("hidden"),setTimeout(()=>s.remove(),500));},[])}}function $(t){return {name:"vite-plugin-react-splash",transformIndexHtml(s){let a=h(t),{logo:e,text:o,version:i,duration:n=3e3,onlyStandalone:p=false,showOnce:r=false}=t,c=typeof e=="string"?`<div class="splash-logo">${e}</div>`:`<div class="splash-logo splash-logo-light">${e.light}</div><div class="splash-logo splash-logo-dark">${e.dark}</div>`,l=`
36
- <style>${a}</style>
46
+ `.replace(/\s+/g," ").trim()};function y(){return {hideSplashScreen:react.useCallback(()=>{let e=document.getElementById("vite-splash-screen");e&&(e.classList.add("hidden"),setTimeout(()=>e.remove(),500));},[])}}function x(a){return {name:"vite-plugin-react-splash",transformIndexHtml(e){let r=h(a),{logo:o,text:i,version:s,duration:t=3e3,onlyStandalone:n=false,showOnce:l=false}=a,p=typeof o=="string"?`<div class="splash-logo">${o}</div>`:`<div class="splash-logo splash-logo-light">${o.light}</div><div class="splash-logo splash-logo-dark">${o.dark}</div>`,c=`
47
+ <style>${r}</style>
37
48
  <div id="vite-splash-screen">
38
- ${c}
39
- ${o?`<div class="splash-text">${o}</div>`:""}
40
- ${i?`<div class="splash-version">v${i}</div>`:""}
49
+ ${p}
50
+ ${i?`<div class="splash-text">${i}</div>`:""}
51
+ ${s?`<div class="splash-version">v${s}</div>`:""}
41
52
  </div>
42
53
  <script>
43
54
  (function(){
44
- var d=${n},o=${p},s1=${r},s=document.getElementById('vite-splash-screen');
55
+ var d=${t},o=${n},s1=${l},s=document.getElementById('vite-splash-screen');
45
56
  if(s){
46
57
  var isPWA = window.matchMedia('(display-mode: standalone)').matches || (window.navigator && window.navigator.standalone);
47
58
  var shown = false;
@@ -58,4 +69,4 @@ ${i?`<div class="splash-version">v${i}</div>`:""}
58
69
  },d);
59
70
  }
60
71
  })();
61
- </script>`.replace(/>\s+</g,"><").trim();return s.replace("<body>",`<body>${l}`)}}}exports.useSplashScreen=u;exports.viteSplashScreen=$;
72
+ </script>`.replace(/>\s+</g,"><").trim();return e.replace("<body>",`<body>${c}`)}}}exports.useSplashScreen=y;exports.viteSplashScreen=x;
package/dist/index.mjs CHANGED
@@ -1,13 +1,30 @@
1
- import {useCallback}from'react';var h=t=>{let{theme:s,animation:a,meshColors:e}=t,o=s?.light||{background:"#ffffff",color:"#000000"},i=s?.dark||{background:"#000000",color:"#ffffff"},n="";if(a==="pulse"&&(n+=`
1
+ import {useCallback}from'react';var h=a=>{let{theme:e,animation:r,meshColors:o,mode:i="auto"}=a,s=e?.light||{background:"#ffffff",color:"#000000"},t=e?.dark||{background:"#000000",color:"#ffffff"},n="",l="";if(i==="light"?l=`
2
+ #vite-splash-screen { background-color: ${s.background}; color: ${s.color}; }
3
+ .splash-logo-light { display: block; }
4
+ .splash-logo-dark { display: none; }
5
+ `:i==="dark"?l=`
6
+ #vite-splash-screen { background-color: ${t.background}; color: ${t.color}; }
7
+ .splash-logo-light { display: none; }
8
+ .splash-logo-dark { display: block; }
9
+ `:l=`
10
+ #vite-splash-screen { background-color: ${s.background}; color: ${s.color}; }
11
+ .splash-logo-light { display: block; }
12
+ .splash-logo-dark { display: none; }
13
+ @media (prefers-color-scheme: dark) {
14
+ #vite-splash-screen { background-color: ${t.background}; color: ${t.color}; }
15
+ .splash-logo-dark { display: block; }
16
+ .splash-logo-light { display: none; }
17
+ }
18
+ `,r==="pulse"&&(n+=`
2
19
  .splash-logo { animation: splash-pulse 2s infinite; }
3
20
  @keyframes splash-pulse {
4
21
  0%, 100% { transform: scale(1); opacity: 1; }
5
22
  50% { transform: scale(1.1); opacity: 0.8; }
6
23
  }
7
- `),a==="gradient-mesh"){let r=["#3498db","#9b59b6","#2ecc71"],c=e?.length?e:r,l=["center","20% 30%","80% 70%","40% 80%","70% 20%","10% 60%","90% 40%"],d=c.map((m,f)=>`radial-gradient(circle at ${l[f%l.length]}, ${m} 0%, transparent 50%)`).join(",");n+=`
24
+ `),r==="gradient-mesh"){let c=["#3498db","#9b59b6","#2ecc71"],g=o?.length?o:c,d=["center","20% 30%","80% 70%","40% 80%","70% 20%","10% 60%","90% 40%"],m=g.map((f,u)=>`radial-gradient(circle at ${d[u%d.length]}, ${f} 0%, transparent 50%)`).join(",");n+=`
8
25
  #vite-splash-screen::before {
9
26
  content: ""; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%;
10
- background: ${d}; z-index: -1; animation: rotate-mesh 20s linear infinite;
27
+ background: ${m}; z-index: -1; animation: rotate-mesh 20s linear infinite;
11
28
  opacity: 0.3; filter: blur(60px);
12
29
  }
13
30
  @keyframes rotate-mesh { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
@@ -17,31 +34,25 @@ import {useCallback}from'react';var h=t=>{let{theme:s,animation:a,meshColors:e}=
17
34
  display: flex; flex-direction: column; align-items: center; justify-content: center;
18
35
  z-index: 999999; transition: opacity 0.5s, visibility 0.5s;
19
36
  font-family: -apple-system, system-ui, sans-serif;
20
- background-color: ${o.background}; color: ${o.color};
37
+ background-color: ${s.background}; color: ${s.color};
21
38
  }
22
39
  #vite-splash-screen.hidden { opacity: 0; visibility: hidden; pointer-events: none; }
23
40
  .splash-logo { width: 120px; height: 120px; margin-bottom: 20px; }
24
41
  .splash-logo svg { fill: currentColor; width: 100%; height: 100%; }
25
- .splash-logo-dark { display: none; }
26
- .splash-logo-light { display: block; }
27
42
  .splash-text { font-size: 1.2rem; font-weight: 500; }
28
43
  .splash-version { position: absolute; bottom: 20px; font-size: 0.8rem; opacity: 0.7; }
29
- @media (prefers-color-scheme: dark) {
30
- #vite-splash-screen { background-color: ${i.background}; color: ${i.color}; }
31
- .splash-logo-dark { display: block; }
32
- .splash-logo-light { display: none; }
33
- }
44
+ ${l}
34
45
  ${n}
35
- `.replace(/\s+/g," ").trim()};function u(){return {hideSplashScreen:useCallback(()=>{let s=document.getElementById("vite-splash-screen");s&&(s.classList.add("hidden"),setTimeout(()=>s.remove(),500));},[])}}function $(t){return {name:"vite-plugin-react-splash",transformIndexHtml(s){let a=h(t),{logo:e,text:o,version:i,duration:n=3e3,onlyStandalone:p=false,showOnce:r=false}=t,c=typeof e=="string"?`<div class="splash-logo">${e}</div>`:`<div class="splash-logo splash-logo-light">${e.light}</div><div class="splash-logo splash-logo-dark">${e.dark}</div>`,l=`
36
- <style>${a}</style>
46
+ `.replace(/\s+/g," ").trim()};function y(){return {hideSplashScreen:useCallback(()=>{let e=document.getElementById("vite-splash-screen");e&&(e.classList.add("hidden"),setTimeout(()=>e.remove(),500));},[])}}function x(a){return {name:"vite-plugin-react-splash",transformIndexHtml(e){let r=h(a),{logo:o,text:i,version:s,duration:t=3e3,onlyStandalone:n=false,showOnce:l=false}=a,p=typeof o=="string"?`<div class="splash-logo">${o}</div>`:`<div class="splash-logo splash-logo-light">${o.light}</div><div class="splash-logo splash-logo-dark">${o.dark}</div>`,c=`
47
+ <style>${r}</style>
37
48
  <div id="vite-splash-screen">
38
- ${c}
39
- ${o?`<div class="splash-text">${o}</div>`:""}
40
- ${i?`<div class="splash-version">v${i}</div>`:""}
49
+ ${p}
50
+ ${i?`<div class="splash-text">${i}</div>`:""}
51
+ ${s?`<div class="splash-version">v${s}</div>`:""}
41
52
  </div>
42
53
  <script>
43
54
  (function(){
44
- var d=${n},o=${p},s1=${r},s=document.getElementById('vite-splash-screen');
55
+ var d=${t},o=${n},s1=${l},s=document.getElementById('vite-splash-screen');
45
56
  if(s){
46
57
  var isPWA = window.matchMedia('(display-mode: standalone)').matches || (window.navigator && window.navigator.standalone);
47
58
  var shown = false;
@@ -58,4 +69,4 @@ ${i?`<div class="splash-version">v${i}</div>`:""}
58
69
  },d);
59
70
  }
60
71
  })();
61
- </script>`.replace(/>\s+</g,"><").trim();return s.replace("<body>",`<body>${l}`)}}}export{u as useSplashScreen,$ as viteSplashScreen};
72
+ </script>`.replace(/>\s+</g,"><").trim();return e.replace("<body>",`<body>${c}`)}}}export{y as useSplashScreen,x as viteSplashScreen};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plugin-react-splash",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "A Vite plugin and React hook for easy splash screen management in React apps.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",