@sensorario/sg-components 0.0.64 → 0.0.68

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/dist/.htaccess ADDED
@@ -0,0 +1,32 @@
1
+ <IfModule mod_rewrite.c>
2
+ RewriteEngine On
3
+ RewriteBase /
4
+
5
+ # Don't rewrite files or directories
6
+ RewriteCond %{REQUEST_FILENAME} !-f
7
+ RewriteCond %{REQUEST_FILENAME} !-d
8
+
9
+ # Rewrite everything else to index.html to allow html5 state links
10
+ RewriteRule . index.html [L]
11
+ </IfModule>
12
+
13
+ # Compression
14
+ <IfModule mod_deflate.c>
15
+ AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
16
+ </IfModule>
17
+
18
+ # Disable Caching Completely
19
+ <IfModule mod_headers.c>
20
+ # Disable caching for all files
21
+ Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
22
+ Header set Pragma "no-cache"
23
+ Header set Expires "0"
24
+ </IfModule>
25
+
26
+ # Disable ETags
27
+ FileETag None
28
+
29
+ # Disable browser caching via mod_expires
30
+ <IfModule mod_expires.c>
31
+ ExpiresActive Off
32
+ </IfModule>
package/dist/index.es.js CHANGED
@@ -1,17 +1,21 @@
1
- import { Fragment as e, jsx as t, jsxs as n } from "react/jsx-runtime";
2
- import { useState as r } from "react";
3
- //#region src/components/Footer/Footer.tsx
4
- var i = ({ copyright: e = "© 2026 My Company", href: r = "#", links: i = [] }) => /* @__PURE__ */ n("footer", {
1
+ import { useEffect as e, useState as t } from "react";
2
+ import { Fragment as n, jsx as r, jsxs as i } from "react/jsx-runtime";
3
+ //#region src/components/Button/Button.tsx
4
+ var a = ({ label: e, ...t }) => /* @__PURE__ */ r("button", {
5
+ className: "custom-button",
6
+ ...t,
7
+ children: e
8
+ }), o = ({ copyright: e = "© 2026 My Company", href: t = "#", links: n = [] }) => /* @__PURE__ */ i("footer", {
5
9
  className: "footer",
6
- children: [/* @__PURE__ */ t("span", { children: /* @__PURE__ */ t("a", {
7
- href: r,
10
+ children: [/* @__PURE__ */ r("span", { children: /* @__PURE__ */ r("a", {
11
+ href: t,
8
12
  children: e
9
- }) }), i.length > 0 && /* @__PURE__ */ t("nav", { children: i.map(({ label: e, href: n }) => /* @__PURE__ */ t("a", {
10
- href: n,
13
+ }) }), n.length > 0 && /* @__PURE__ */ r("nav", { children: n.map(({ label: e, href: t }) => /* @__PURE__ */ r("a", {
14
+ href: t,
11
15
  style: { marginLeft: "16px" },
12
16
  children: e
13
- }, n)) })]
14
- }), a = [
17
+ }, t)) })]
18
+ }), s = [
15
19
  {
16
20
  label: "guitar",
17
21
  href: "https://guitar.simonegentili.com"
@@ -32,113 +36,183 @@ var i = ({ copyright: e = "© 2026 My Company", href: r = "#", links: i = [] })
32
36
  label: "code2image",
33
37
  href: "https://code2image.simonegentili.com"
34
38
  }
35
- ], o = () => /* @__PURE__ */ t(i, {
39
+ ], c = () => /* @__PURE__ */ r(o, {
36
40
  href: "https://simonegentili.com",
37
41
  copyright: "© 2026 simonegentili.com",
38
- links: a
39
- }), s = ({ onNavigate: e, title: n = "Simone Gentili - senior web developer, tech author and chess enthusiast", homePageKey: r = "home" }) => /* @__PURE__ */ t("header", {
42
+ links: s
43
+ }), l = ({ onNavigate: e, title: t = "Simone Gentili - senior web developer, tech author and chess enthusiast", homePageKey: n = "home", children: a }) => /* @__PURE__ */ r("header", {
40
44
  className: "header",
41
- children: /* @__PURE__ */ t("div", {
45
+ children: /* @__PURE__ */ i("div", {
42
46
  className: "header-container",
43
- children: /* @__PURE__ */ t("div", {
47
+ children: [/* @__PURE__ */ r("div", {
44
48
  className: "logo",
45
49
  onClick: () => {
46
- e?.(r);
50
+ e?.(n);
47
51
  },
48
- children: /* @__PURE__ */ t("h1", {
52
+ children: /* @__PURE__ */ r("h1", {
49
53
  className: "logo-text",
50
- children: n
54
+ children: t
51
55
  })
52
- })
56
+ }), a && /* @__PURE__ */ r("div", {
57
+ className: "header-actions",
58
+ children: a
59
+ })]
53
60
  })
54
- }), c = ({ onNavigate: e }) => /* @__PURE__ */ t(s, {
61
+ }), u = ({ onNavigate: e }) => /* @__PURE__ */ r(l, {
55
62
  onNavigate: e,
56
63
  title: "Simone Gentili - senior web developer, tech author and chess enthusiast",
57
64
  homePageKey: "home"
58
- }), l = ({ isLoggedIn: n, handleLogin: r, handleLogout: i }) => /* @__PURE__ */ t(e, { children: n ? /* @__PURE__ */ t("button", {
65
+ }), d = ({ isLoggedIn: e, handleLogin: t, handleLogout: i }) => /* @__PURE__ */ r(n, { children: e ? /* @__PURE__ */ r("button", {
59
66
  onClick: i,
60
67
  style: {
61
68
  fontSize: "0.9rem",
62
69
  padding: "0.4rem 1rem"
63
70
  },
64
71
  children: "logout"
65
- }) : /* @__PURE__ */ t("button", {
66
- onClick: r,
72
+ }) : /* @__PURE__ */ r("button", {
73
+ onClick: t,
67
74
  style: {
68
75
  fontSize: "0.9rem",
69
76
  padding: "0.4rem 1rem"
70
77
  },
71
78
  children: "Login"
72
- }) }), u = ({ open: e, onClose: r, title: i, children: a }) => e ? /* @__PURE__ */ t("div", {
79
+ }) }), f = ({ open: e, onClose: t, title: n, children: a }) => e ? /* @__PURE__ */ r("div", {
73
80
  className: "modal-overlay",
74
- children: /* @__PURE__ */ n("div", {
81
+ children: /* @__PURE__ */ i("div", {
75
82
  className: "modal-content",
76
83
  children: [
77
- i && /* @__PURE__ */ t("h2", {
84
+ n && /* @__PURE__ */ r("h2", {
78
85
  className: "modal-title",
79
- children: i
86
+ children: n
80
87
  }),
81
- /* @__PURE__ */ t("button", {
88
+ /* @__PURE__ */ r("button", {
82
89
  className: "modal-close",
83
- onClick: r,
90
+ onClick: t,
84
91
  children: "×"
85
92
  }),
86
- /* @__PURE__ */ t("div", {
93
+ /* @__PURE__ */ r("div", {
87
94
  className: "modal-children",
88
95
  children: a
89
96
  })
90
97
  ]
91
98
  })
92
- }) : null, d = ({ label: e, ...r }) => /* @__PURE__ */ n("div", {
99
+ }) : null, p = ({ label: e, invalid: t, ...n }) => /* @__PURE__ */ i("div", {
93
100
  className: "input-wrapper",
94
- children: [e && /* @__PURE__ */ t("label", {
101
+ children: [e && /* @__PURE__ */ r("label", {
95
102
  className: "input-label",
96
103
  children: e
97
- }), /* @__PURE__ */ t("input", {
104
+ }), /* @__PURE__ */ r("input", {
105
+ className: `input-field${t ? " input-field--invalid" : ""}`,
106
+ ...n
107
+ })]
108
+ }), m = ({ label: e, ...t }) => /* @__PURE__ */ i("div", {
109
+ className: "input-wrapper",
110
+ children: [e && /* @__PURE__ */ r("label", {
111
+ className: "input-label",
112
+ children: e
113
+ }), /* @__PURE__ */ r("input", {
98
114
  type: "password",
99
115
  className: "input-field",
100
- ...r
116
+ ...t
101
117
  })]
102
- }), f = ({ label: e, ...n }) => /* @__PURE__ */ t("button", {
103
- className: "custom-button",
104
- ...n,
105
- children: e
106
- }), p = ({ open: e, onClose: i, onSubmit: a }) => {
107
- let [o, s] = r(""), [c, l] = r(""), [p, m] = r("");
108
- return /* @__PURE__ */ t(u, {
118
+ }), h = ({ open: e, onClose: n, onLogin: o }) => {
119
+ let [s, c] = t(""), [l, u] = t("");
120
+ return /* @__PURE__ */ r(f, {
121
+ open: e,
122
+ onClose: n,
123
+ title: "Login",
124
+ children: /* @__PURE__ */ i("form", {
125
+ onSubmit: (e) => {
126
+ e.preventDefault(), o(s, l);
127
+ },
128
+ children: [
129
+ /* @__PURE__ */ r(p, {
130
+ label: "Username",
131
+ value: s,
132
+ onChange: (e) => c(e.target.value),
133
+ autoFocus: !0
134
+ }),
135
+ /* @__PURE__ */ r(m, {
136
+ label: "Password",
137
+ value: l,
138
+ onChange: (e) => u(e.target.value)
139
+ }),
140
+ /* @__PURE__ */ r(a, {
141
+ label: "Login",
142
+ type: "submit",
143
+ style: { width: "100%" }
144
+ })
145
+ ]
146
+ })
147
+ });
148
+ }, g = "simonegentili.com-access-token", _ = (e) => document.cookie.split("; ").some((t) => t.startsWith(`${e}=`) && t.slice(e.length + 1).length > 0), v = ({ title: a = "Quadrato", homePageKey: o = "home", onNavigate: s, cookieName: c = g, username: u = null, onLogin: f, onLogout: p, onUserAuthenticated: m }) => {
149
+ let [v, y] = t(() => _(c)), [b, x] = t(!1);
150
+ return e(() => {
151
+ m?.(v, v ? u : null);
152
+ }, []), /* @__PURE__ */ i(n, { children: [/* @__PURE__ */ r(l, {
153
+ onNavigate: s,
154
+ title: a,
155
+ homePageKey: o,
156
+ children: /* @__PURE__ */ i("div", {
157
+ className: "quadrato-header-auth",
158
+ children: [v && u && /* @__PURE__ */ r("span", {
159
+ className: "quadrato-header-username",
160
+ children: u
161
+ }), /* @__PURE__ */ r(d, {
162
+ isLoggedIn: v,
163
+ handleLogin: () => x(!0),
164
+ handleLogout: () => {
165
+ p?.();
166
+ let e = _(c);
167
+ y(e), m?.(e, null);
168
+ }
169
+ })]
170
+ })
171
+ }), /* @__PURE__ */ r(h, {
172
+ open: b,
173
+ onClose: () => x(!1),
174
+ onLogin: async (e, t) => {
175
+ await f(e, t);
176
+ let n = _(c);
177
+ y(n), x(!1), m?.(n, n ? e : null);
178
+ }
179
+ })] });
180
+ }, y = ({ open: e, onClose: n, onSubmit: o }) => {
181
+ let [s, c] = t(""), [l, u] = t(""), [d, p] = t("");
182
+ return /* @__PURE__ */ r(f, {
109
183
  open: e,
110
- onClose: i,
184
+ onClose: n,
111
185
  title: "Imposta una nuova password",
112
- children: /* @__PURE__ */ n("form", {
186
+ children: /* @__PURE__ */ i("form", {
113
187
  className: "set-password-modal-form",
114
188
  onSubmit: (e) => {
115
- if (e.preventDefault(), o === "" || c === "") {
116
- m("Inserisci ed conferma la nuova password.");
189
+ if (e.preventDefault(), s === "" || l === "") {
190
+ p("Inserisci ed conferma la nuova password.");
117
191
  return;
118
192
  }
119
- if (o !== c) {
120
- m("Le password non coincidono.");
193
+ if (s !== l) {
194
+ p("Le password non coincidono.");
121
195
  return;
122
196
  }
123
- m(""), a(o);
197
+ p(""), o(s);
124
198
  },
125
199
  children: [
126
- /* @__PURE__ */ t(d, {
200
+ /* @__PURE__ */ r(m, {
127
201
  label: "Nuova password",
128
- value: o,
129
- onChange: (e) => s(e.target.value),
202
+ value: s,
203
+ onChange: (e) => c(e.target.value),
130
204
  autoFocus: !0
131
205
  }),
132
- /* @__PURE__ */ t(d, {
206
+ /* @__PURE__ */ r(m, {
133
207
  label: "Conferma password",
134
- value: c,
135
- onChange: (e) => l(e.target.value)
208
+ value: l,
209
+ onChange: (e) => u(e.target.value)
136
210
  }),
137
- p && /* @__PURE__ */ t("p", {
211
+ d && /* @__PURE__ */ r("p", {
138
212
  className: "set-password-modal-error",
139
- children: p
213
+ children: d
140
214
  }),
141
- /* @__PURE__ */ t(f, {
215
+ /* @__PURE__ */ r(a, {
142
216
  label: "Salva password",
143
217
  type: "submit",
144
218
  style: { width: "100%" }
@@ -148,4 +222,4 @@ var i = ({ copyright: e = "© 2026 My Company", href: r = "#", links: i = [] })
148
222
  });
149
223
  };
150
224
  //#endregion
151
- export { l as Authenticator, i as Footer, s as Header, o as SGFooter, c as SGHeader, p as SetPasswordModal };
225
+ export { d as Authenticator, a as Button, o as Footer, l as Header, v as QuadratoHeader, c as SGFooter, u as SGHeader, y as SetPasswordModal };
@@ -1,2 +1,2 @@
1
- .footer{background-color:var(--primary-bg);border-top:1px solid var(--primary-border);font-family:var(--font-family);color:#555;justify-content:space-between;align-items:center;width:100%;padding:16px 32px;font-size:14px;display:flex;position:fixed;bottom:0;left:0}.footer a{color:#1ea7fd;text-decoration:none}.footer a:hover{text-decoration:underline}.logo-text{font-size:var(--font-size-h1);font-family:var(--font-family);margin:0;font-weight:400}.header{z-index:100;width:100%;font-size:var(--font-size);background-color:#fff;border-bottom:1px solid #e1e5e9;position:sticky;top:0;box-shadow:0 2px 4px #0000001a}.header-container{justify-content:flex-start;align-items:center;max-width:1200px;margin:0 auto;padding:16px;display:flex}.logo{cursor:pointer;color:#333;font-size:24px;font-weight:700;transition:color .2s}.logo:hover{color:#007acc}.logo-full{display:inline}.logo-short{display:none}@media (width<=768px){.header-container{padding:12px 16px}.logo{font-size:var(--font-size)}.logo-full{display:none}.logo-short{display:inline}}@media (width<=480px){.header-container{padding:8px 12px}.logo{font-size:var(--font-size)}}.modal-overlay{background:var(--modal-overlay);z-index:1000;justify-content:center;align-items:center;width:100vw;height:100vh;display:flex;position:fixed;top:0;left:0}.modal-children{font-family:var(--font-family);padding:16px}.modal-content{background:var(--modal-bg);font-size:var(--primary-font);border-radius:8px;min-width:320px;position:relative;box-shadow:0 2px 16px #00000026}.modal-title{color:var(--modal-title-color);font-family:var(--font-family);background-color:var(--primary-bg);font-size:var(--primary-font);border-top-left-radius:var(--primary-radius);border-top-right-radius:var(--primary-radius);margin-top:0;padding:16px}.modal-close{cursor:pointer;background:0 0;border:none;font-size:20px;position:absolute;top:8px;right:8px}.input-label{font-weight:500;font-family:var(--font-family);font-size:var(--primary-font);margin-bottom:4px;display:block}.input-field--invalid{background-color:#ffe5e5;border-color:#c00}.input-wrapper{margin-bottom:16px}.input-label{font-weight:500;font-size:var(--primary-font);margin-bottom:4px;display:block}.input-field{border-radius:var(--radius);width:calc(100% - 16px);font-size:var(--primary-font);border-style:solid;border-width:1px;padding:8px}.custom-button{border-radius:var(--primary-radius);border:1px solid var(--primary-border);background:var(--primary-bg);cursor:pointer;font-size:var(--primary-font);font-family:var(--font-family);padding:8px 16px;transition:background .2s}.custom-button:hover{background:var(--primary-hover-bg)}.login-modal-form{font-family:var(--font-family);font-size:var(--primary-font);flex-direction:column;gap:16px;display:flex}:root{--unit:3px;--primary-bg:#f5f5f5;--primary-border:#ccc;--radius:calc(var(--unit) * 2);--primary-radius:var(--radius);--primary-font:var(--font-size);--primary-hover-bg:#e0e0e0;--modal-bg:#fff;--modal-overlay:#0000004d;--modal-title-color:#222;--input-bg:#fff;--input-border:#ccc;--input-radius:var(--radius);--input-font:1rem;--font-size:14px;--font-family:Arial, sans-serif;--font-size-h1:calc(var(--font-size) * 1.5)}.theme-dark{--primary-bg:#222;--primary-border:#444;--primary-font:1rem;--font-family:"Inter", Arial, sans-serif;--primary-hover-bg:#333;--modal-bg:#222;--modal-title-color:#fff;--input-bg:#333;--input-border:#555;--input-font:1rem}form{font-family:var(--font-family)}.set-password-modal-form{font-family:var(--font-family);font-size:var(--primary-font);flex-direction:column;gap:16px;display:flex}.set-password-modal-error{color:#d32f2f;font-size:var(--primary-font);margin:0}
1
+ .custom-button{border-radius:var(--primary-radius);border:1px solid var(--primary-border);background:var(--primary-bg);cursor:pointer;font-size:var(--primary-font);font-family:var(--font-family);padding:8px 16px;transition:background .2s}.custom-button:hover{background:var(--primary-hover-bg)}.footer{background-color:var(--primary-bg);border-top:1px solid var(--primary-border);font-family:var(--font-family);color:#555;justify-content:space-between;align-items:center;width:100%;padding:16px 32px;font-size:14px;display:flex;position:fixed;bottom:0;left:0}.footer a{color:#1ea7fd;text-decoration:none}.footer a:hover{text-decoration:underline}.logo-text{font-size:var(--font-size-h1);font-family:var(--font-family);margin:0;font-weight:400}.header{z-index:100;width:100%;font-size:var(--font-size);background-color:#fff;border-bottom:1px solid #e1e5e9;position:sticky;top:0;box-shadow:0 2px 4px #0000001a}.header-container{justify-content:flex-start;align-items:center;max-width:1200px;margin:0 auto;padding:16px;display:flex}.header-actions{align-items:center;gap:12px;margin-left:auto;display:flex}.logo{cursor:pointer;color:#333;font-size:24px;font-weight:700;transition:color .2s}.logo:hover{color:#007acc}.logo-full{display:inline}.logo-short{display:none}@media (width<=768px){.header-container{padding:12px 16px}.logo{font-size:var(--font-size)}.logo-full{display:none}.logo-short{display:inline}}@media (width<=480px){.header-container{padding:8px 12px}.logo{font-size:var(--font-size)}}.modal-overlay{background:var(--modal-overlay);z-index:1000;justify-content:center;align-items:center;width:100vw;height:100vh;display:flex;position:fixed;top:0;left:0}.modal-children{font-family:var(--font-family);padding:16px}.modal-content{background:var(--modal-bg);font-size:var(--primary-font);border-radius:8px;min-width:320px;position:relative;box-shadow:0 2px 16px #00000026}.modal-title{color:var(--modal-title-color);font-family:var(--font-family);background-color:var(--primary-bg);font-size:var(--primary-font);border-top-left-radius:var(--primary-radius);border-top-right-radius:var(--primary-radius);margin-top:0;padding:16px}.modal-close{cursor:pointer;background:0 0;border:none;font-size:20px;position:absolute;top:8px;right:8px}.input-label{font-weight:500;font-family:var(--font-family);font-size:var(--primary-font);margin-bottom:4px;display:block}.input-field--invalid{background-color:#ffe5e5;border-color:#c00}.input-wrapper{margin-bottom:16px}.input-label{font-weight:500;font-size:var(--primary-font);margin-bottom:4px;display:block}.input-field{border-radius:var(--radius);width:calc(100% - 16px);font-size:var(--primary-font);border-style:solid;border-width:1px;padding:8px}.login-modal-form{font-family:var(--font-family);font-size:var(--primary-font);flex-direction:column;gap:16px;display:flex}.quadrato-header-auth{align-items:center;gap:12px;display:flex}.quadrato-header-username{font-size:var(--font-size);color:#333}:root{--unit:3px;--primary-bg:#f5f5f5;--primary-border:#ccc;--radius:calc(var(--unit) * 2);--primary-radius:var(--radius);--primary-font:var(--font-size);--primary-hover-bg:#e0e0e0;--modal-bg:#fff;--modal-overlay:#0000004d;--modal-title-color:#222;--input-bg:#fff;--input-border:#ccc;--input-radius:var(--radius);--input-font:1rem;--font-size:14px;--font-family:Arial, sans-serif;--font-size-h1:calc(var(--font-size) * 1.5)}.theme-dark{--primary-bg:#222;--primary-border:#444;--primary-font:1rem;--font-family:"Inter", Arial, sans-serif;--primary-hover-bg:#333;--modal-bg:#222;--modal-title-color:#fff;--input-bg:#333;--input-border:#555;--input-font:1rem}form{font-family:var(--font-family)}.set-password-modal-form{font-family:var(--font-family);font-size:var(--primary-font);flex-direction:column;gap:16px;display:flex}.set-password-modal-error{color:#d32f2f;font-size:var(--primary-font);margin:0}
2
2
  /*$vite$:1*/
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sensorario/sg-components",
3
- "version": "0.0.64",
3
+ "version": "0.0.68",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "scripts": {