even-toolkit 1.6.0 → 1.6.2
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/CHANGELOG.md +19 -0
- package/dist/glasses/storage.d.ts +9 -8
- package/dist/glasses/storage.d.ts.map +1 -1
- package/dist/glasses/storage.js +53 -27
- package/dist/glasses/storage.js.map +1 -1
- package/dist/web/components/drawer-shell.d.ts.map +1 -1
- package/dist/web/components/drawer-shell.js +1 -2
- package/dist/web/components/drawer-shell.js.map +1 -1
- package/dist/web/components/nav-header.d.ts.map +1 -1
- package/dist/web/components/nav-header.js +3 -1
- package/dist/web/components/nav-header.js.map +1 -1
- package/dist/web/components/side-drawer.d.ts +1 -1
- package/dist/web/components/side-drawer.d.ts.map +1 -1
- package/glasses/storage.ts +37 -25
- package/package.json +1 -1
- package/web/components/drawer-shell.tsx +3 -4
- package/web/components/nav-header.tsx +20 -6
- package/web/components/side-drawer.tsx +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.6.2
|
|
4
|
+
|
|
5
|
+
Released: 2026-04-02
|
|
6
|
+
|
|
7
|
+
No breaking changes.
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- `DrawerShell` header overrides now accept full React node titles cleanly for embedded controls like browser URL bars
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- `NavHeader` no longer reserves empty left or right spacing when those slots are unused
|
|
16
|
+
- header layout handling is more reliable for screens that need full-width interactive content in the title area
|
|
17
|
+
|
|
18
|
+
### Notes
|
|
19
|
+
|
|
20
|
+
- This release is backward compatible with existing 1.6.x consumers.
|
|
21
|
+
|
|
3
22
|
## 1.5.0
|
|
4
23
|
|
|
5
24
|
Released: 2026-03-31
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Persistent storage for Even Hub apps.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Writes to BOTH the SDK bridge AND browser localStorage.
|
|
5
|
+
* Reads from SDK bridge first, falls back to localStorage.
|
|
6
|
+
* This ensures persistence on the real Even Hub (bridge)
|
|
7
|
+
* and in development/simulator (localStorage).
|
|
7
8
|
*/
|
|
8
|
-
/** Read a JSON value
|
|
9
|
+
/** Read a JSON value — tries SDK bridge first, then localStorage */
|
|
9
10
|
export declare function storageGet<T>(key: string, fallback: T): Promise<T>;
|
|
10
|
-
/** Read a raw string
|
|
11
|
+
/** Read a raw string — tries SDK bridge first, then localStorage */
|
|
11
12
|
export declare function storageGetRaw(key: string): Promise<string>;
|
|
12
|
-
/** Write a JSON value to SDK
|
|
13
|
+
/** Write a JSON value to BOTH SDK bridge and localStorage */
|
|
13
14
|
export declare function storageSet(key: string, value: unknown): Promise<void>;
|
|
14
|
-
/** Write a raw string to SDK
|
|
15
|
+
/** Write a raw string to BOTH SDK bridge and localStorage */
|
|
15
16
|
export declare function storageSetRaw(key: string, value: string): Promise<void>;
|
|
16
|
-
/** Remove a key from SDK
|
|
17
|
+
/** Remove a key from BOTH SDK bridge and localStorage */
|
|
17
18
|
export declare function storageRemove(key: string): Promise<void>;
|
|
18
19
|
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../glasses/storage.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../glasses/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwBH,oEAAoE;AACpE,wBAAsB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAaxE;AAED,oEAAoE;AACpE,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAahE;AAED,6DAA6D;AAC7D,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAO3E;AAED,6DAA6D;AAC7D,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7E;AAED,yDAAyD;AACzD,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM9D"}
|
package/dist/glasses/storage.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Persistent storage for Even Hub apps.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Writes to BOTH the SDK bridge AND browser localStorage.
|
|
5
|
+
* Reads from SDK bridge first, falls back to localStorage.
|
|
6
|
+
* This ensures persistence on the real Even Hub (bridge)
|
|
7
|
+
* and in development/simulator (localStorage).
|
|
7
8
|
*/
|
|
8
9
|
function getBridge() {
|
|
9
10
|
const bridge = window.__evenBridge;
|
|
@@ -29,59 +30,84 @@ async function getRawBridge() {
|
|
|
29
30
|
return null;
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
|
-
/** Read a JSON value
|
|
33
|
+
/** Read a JSON value — tries SDK bridge first, then localStorage */
|
|
33
34
|
export async function storageGet(key, fallback) {
|
|
34
35
|
const bridge = getBridge() ?? await getRawBridge();
|
|
35
|
-
if (
|
|
36
|
-
|
|
36
|
+
if (bridge?.getLocalStorage) {
|
|
37
|
+
try {
|
|
38
|
+
const raw = await bridge.getLocalStorage(key);
|
|
39
|
+
if (raw && raw !== '')
|
|
40
|
+
return JSON.parse(raw);
|
|
41
|
+
}
|
|
42
|
+
catch { /* fall through */ }
|
|
43
|
+
}
|
|
37
44
|
try {
|
|
38
|
-
const raw =
|
|
39
|
-
if (raw
|
|
45
|
+
const raw = localStorage.getItem(key);
|
|
46
|
+
if (raw)
|
|
40
47
|
return JSON.parse(raw);
|
|
41
48
|
}
|
|
42
49
|
catch { /* ignore */ }
|
|
43
50
|
return fallback;
|
|
44
51
|
}
|
|
45
|
-
/** Read a raw string
|
|
52
|
+
/** Read a raw string — tries SDK bridge first, then localStorage */
|
|
46
53
|
export async function storageGetRaw(key) {
|
|
47
54
|
const bridge = getBridge() ?? await getRawBridge();
|
|
48
|
-
if (
|
|
49
|
-
|
|
55
|
+
if (bridge?.getLocalStorage) {
|
|
56
|
+
try {
|
|
57
|
+
const val = await bridge.getLocalStorage(key);
|
|
58
|
+
if (val && val !== '')
|
|
59
|
+
return val;
|
|
60
|
+
}
|
|
61
|
+
catch { /* fall through */ }
|
|
62
|
+
}
|
|
50
63
|
try {
|
|
51
|
-
return
|
|
64
|
+
return localStorage.getItem(key) ?? '';
|
|
52
65
|
}
|
|
53
66
|
catch {
|
|
54
67
|
return '';
|
|
55
68
|
}
|
|
56
69
|
}
|
|
57
|
-
/** Write a JSON value to SDK
|
|
70
|
+
/** Write a JSON value to BOTH SDK bridge and localStorage */
|
|
58
71
|
export async function storageSet(key, value) {
|
|
59
|
-
const
|
|
60
|
-
if (!bridge?.setLocalStorage)
|
|
61
|
-
return;
|
|
72
|
+
const json = JSON.stringify(value);
|
|
62
73
|
try {
|
|
63
|
-
|
|
74
|
+
localStorage.setItem(key, json);
|
|
64
75
|
}
|
|
65
76
|
catch { /* ignore */ }
|
|
77
|
+
const bridge = getBridge();
|
|
78
|
+
if (bridge?.setLocalStorage) {
|
|
79
|
+
try {
|
|
80
|
+
await bridge.setLocalStorage(key, json);
|
|
81
|
+
}
|
|
82
|
+
catch { /* ignore */ }
|
|
83
|
+
}
|
|
66
84
|
}
|
|
67
|
-
/** Write a raw string to SDK
|
|
85
|
+
/** Write a raw string to BOTH SDK bridge and localStorage */
|
|
68
86
|
export async function storageSetRaw(key, value) {
|
|
69
|
-
const bridge = getBridge();
|
|
70
|
-
if (!bridge?.setLocalStorage)
|
|
71
|
-
return;
|
|
72
87
|
try {
|
|
73
|
-
|
|
88
|
+
localStorage.setItem(key, value);
|
|
74
89
|
}
|
|
75
90
|
catch { /* ignore */ }
|
|
91
|
+
const bridge = getBridge();
|
|
92
|
+
if (bridge?.setLocalStorage) {
|
|
93
|
+
try {
|
|
94
|
+
await bridge.setLocalStorage(key, value);
|
|
95
|
+
}
|
|
96
|
+
catch { /* ignore */ }
|
|
97
|
+
}
|
|
76
98
|
}
|
|
77
|
-
/** Remove a key from SDK
|
|
99
|
+
/** Remove a key from BOTH SDK bridge and localStorage */
|
|
78
100
|
export async function storageRemove(key) {
|
|
79
|
-
const bridge = getBridge();
|
|
80
|
-
if (!bridge?.setLocalStorage)
|
|
81
|
-
return;
|
|
82
101
|
try {
|
|
83
|
-
|
|
102
|
+
localStorage.removeItem(key);
|
|
84
103
|
}
|
|
85
104
|
catch { /* ignore */ }
|
|
105
|
+
const bridge = getBridge();
|
|
106
|
+
if (bridge?.setLocalStorage) {
|
|
107
|
+
try {
|
|
108
|
+
await bridge.setLocalStorage(key, '');
|
|
109
|
+
}
|
|
110
|
+
catch { /* ignore */ }
|
|
111
|
+
}
|
|
86
112
|
}
|
|
87
113
|
//# sourceMappingURL=storage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../glasses/storage.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../glasses/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawer-shell.d.ts","sourceRoot":"","sources":["../../../web/components/drawer-shell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvE,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,eAAe,CAAC;AAIxE,UAAU,gBAAgB;IACxB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD,iBAAS,WAAW,CAAC,EACnB,KAAK,EACL,WAAW,EACX,KAAK,EACL,MAAM,EACN,KAAK,EACL,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,WAAW,EACX,QAA4B,EAC5B,SAAS,GACV,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"drawer-shell.d.ts","sourceRoot":"","sources":["../../../web/components/drawer-shell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvE,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,eAAe,CAAC;AAIxE,UAAU,gBAAgB;IACxB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD,iBAAS,WAAW,CAAC,EACnB,KAAK,EACL,WAAW,EACX,KAAK,EACL,MAAM,EACN,KAAK,EACL,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,WAAW,EACX,QAA4B,EAC5B,SAAS,GACV,EAAE,gBAAgB,2CA2GlB;AAED,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -27,8 +27,7 @@ function DrawerShell({ items, bottomItems, title, footer, width, getPageTitle, d
|
|
|
27
27
|
? isNestedRoute(pathname)
|
|
28
28
|
: !allItemIds.has(pathname);
|
|
29
29
|
// Resolve header values (screen overrides > defaults)
|
|
30
|
-
const
|
|
31
|
-
const headerTitle = pageTitlePrefix ? (_jsxs("div", { className: "flex items-center justify-center gap-1.5 min-w-0", children: [_jsx("span", { className: "shrink-0", children: pageTitlePrefix }), _jsx("span", { className: "truncate", children: headerTitleText })] })) : headerTitleText;
|
|
30
|
+
const headerTitle = headerOverride?.title ?? (pageTitlePrefix ? (_jsxs("div", { className: "flex items-center justify-center gap-1.5 min-w-0", children: [_jsx("span", { className: "shrink-0", children: pageTitlePrefix }), _jsx("span", { className: "truncate", children: getPageTitle(pathname) })] })) : getPageTitle(pathname));
|
|
32
31
|
const headerHidden = headerOverride?.hidden ?? false;
|
|
33
32
|
const handleBack = useCallback(() => {
|
|
34
33
|
const explicit = headerOverride?.backTo ?? getBackPath?.(pathname);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawer-shell.js","sourceRoot":"","sources":["../../../web/components/drawer-shell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAiBlC,MAAM,iBAAiB,GAAG,CACxB,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,4BAA4B,YAC5F,eAAM,CAAC,EAAC,wBAAwB,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,GAAG,GACpH,CACP,CAAC;AAEF,SAAS,WAAW,CAAC,EACnB,KAAK,EACL,WAAW,EACX,KAAK,EACL,MAAM,EACN,KAAK,EACL,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,WAAW,EACX,QAAQ,GAAG,iBAAiB,EAC5B,SAAS,GACQ;IACjB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAA4B,IAAI,CAAC,CAAC;IAEtF,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE;QAChD,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,aAAa,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE;QAC9B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,IAAI,WAAW;YAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IAEzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACnC,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE1C,qFAAqF;IACrF,MAAM,MAAM,GAAG,aAAa;QAC1B,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC;QACzB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE9B,sDAAsD;IACtD,MAAM,
|
|
1
|
+
{"version":3,"file":"drawer-shell.js","sourceRoot":"","sources":["../../../web/components/drawer-shell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-header.d.ts","sourceRoot":"","sources":["../../../web/components/nav-header.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,cAAc;IACtB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"nav-header.d.ts","sourceRoot":"","sources":["../../../web/components/nav-header.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,cAAc;IACtB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,cAAc,2CAwBnE;AAED,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from '../utils/cn';
|
|
3
3
|
function NavHeader({ title, left, right, className }) {
|
|
4
|
-
return (_jsxs("div", { className: cn('flex items-center
|
|
4
|
+
return (_jsxs("div", { className: cn('flex items-center w-full box-border px-3 h-[52px] bg-surface rounded-b-[6px]', className), children: [left ? (_jsx("div", { className: "flex items-center gap-2 shrink-0 min-w-[40px] mr-2", children: left })) : null, _jsx("div", { className: "flex flex-1 min-w-0 items-center justify-center", children: typeof title === 'string'
|
|
5
|
+
? (_jsx("span", { className: "block w-full truncate text-[17px] tracking-[-0.17px] font-normal text-text text-center", children: title }))
|
|
6
|
+
: (_jsx("div", { className: "w-full min-w-0", children: title })) }), right ? (_jsx("div", { className: "flex items-center gap-2 justify-end shrink-0 min-w-[40px] ml-2", children: right })) : null] }));
|
|
5
7
|
}
|
|
6
8
|
export { NavHeader };
|
|
7
9
|
//# sourceMappingURL=nav-header.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-header.js","sourceRoot":"","sources":["../../../web/components/nav-header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAUjC,SAAS,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAkB;IAClE,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"nav-header.js","sourceRoot":"","sources":["../../../web/components/nav-header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAUjC,SAAS,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAkB;IAClE,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,8EAA8E,EAAE,SAAS,CAAC,aAC1G,IAAI,CAAC,CAAC,CAAC,CACN,cAAK,SAAS,EAAC,oDAAoD,YAAE,IAAI,GAAO,CACjF,CAAC,CAAC,CAAC,IAAI,EACR,cAAK,SAAS,EAAC,iDAAiD,YAC7D,OAAO,KAAK,KAAK,QAAQ;oBACxB,CAAC,CAAC,CACE,eAAM,SAAS,EAAC,wFAAwF,YACrG,KAAK,GACD,CACR;oBACH,CAAC,CAAC,CACE,cAAK,SAAS,EAAC,gBAAgB,YAC5B,KAAK,GACF,CACP,GACD,EACL,KAAK,CAAC,CAAC,CAAC,CACP,cAAK,SAAS,EAAC,gEAAgE,YAAE,KAAK,GAAO,CAC9F,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -24,7 +24,7 @@ declare function DrawerTrigger({ onClick, className }: {
|
|
|
24
24
|
className?: string;
|
|
25
25
|
}): import("react/jsx-runtime").JSX.Element;
|
|
26
26
|
interface DrawerHeaderConfig {
|
|
27
|
-
title?:
|
|
27
|
+
title?: ReactNode;
|
|
28
28
|
left?: ReactNode;
|
|
29
29
|
right?: ReactNode;
|
|
30
30
|
below?: ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"side-drawer.d.ts","sourceRoot":"","sources":["../../../web/components/side-drawer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyF,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAK9H,UAAU,cAAc;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8DD,iBAAS,UAAU,CAAC,EAClB,IAAI,EACJ,OAAO,EACP,UAAU,EACV,QAAQ,EACR,KAAK,EACL,WAAW,EACX,KAAK,EACL,MAAM,EACN,QAAQ,EACR,KAAqB,EACrB,SAAS,GACV,EAAE,eAAe,2CAsFjB;AAID,iBAAS,aAAa,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAgBzF;AAID,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"side-drawer.d.ts","sourceRoot":"","sources":["../../../web/components/side-drawer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyF,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAK9H,UAAU,cAAc;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8DD,iBAAS,UAAU,CAAC,EAClB,IAAI,EACJ,OAAO,EACP,UAAU,EACV,QAAQ,EACR,KAAK,EACL,WAAW,EACX,KAAK,EACL,MAAM,EACN,QAAQ,EACR,KAAqB,EACrB,SAAS,GACV,EAAE,eAAe,2CAsFjB;AAID,iBAAS,aAAa,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAgBzF;AAID,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,wBAAwB;IAChC,SAAS,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAChD,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,QAAA,MAAM,mBAAmB,0DAAuD,CAAC;AAEjF,iBAAS,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAiBzD;AAED,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC;AAC3E,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,CAAC"}
|
package/glasses/storage.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Persistent storage for Even Hub apps.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Writes to BOTH the SDK bridge AND browser localStorage.
|
|
5
|
+
* Reads from SDK bridge first, falls back to localStorage.
|
|
6
|
+
* This ensures persistence on the real Even Hub (bridge)
|
|
7
|
+
* and in development/simulator (localStorage).
|
|
7
8
|
*/
|
|
8
9
|
|
|
9
10
|
function getBridge(): any {
|
|
@@ -28,51 +29,62 @@ async function getRawBridge(): Promise<any> {
|
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
/** Read a JSON value
|
|
32
|
+
/** Read a JSON value — tries SDK bridge first, then localStorage */
|
|
32
33
|
export async function storageGet<T>(key: string, fallback: T): Promise<T> {
|
|
33
34
|
const bridge = getBridge() ?? await getRawBridge();
|
|
34
|
-
if (
|
|
35
|
+
if (bridge?.getLocalStorage) {
|
|
36
|
+
try {
|
|
37
|
+
const raw = await bridge.getLocalStorage(key);
|
|
38
|
+
if (raw && raw !== '') return JSON.parse(raw);
|
|
39
|
+
} catch { /* fall through */ }
|
|
40
|
+
}
|
|
35
41
|
try {
|
|
36
|
-
const raw =
|
|
37
|
-
if (raw
|
|
42
|
+
const raw = localStorage.getItem(key);
|
|
43
|
+
if (raw) return JSON.parse(raw);
|
|
38
44
|
} catch { /* ignore */ }
|
|
39
45
|
return fallback;
|
|
40
46
|
}
|
|
41
47
|
|
|
42
|
-
/** Read a raw string
|
|
48
|
+
/** Read a raw string — tries SDK bridge first, then localStorage */
|
|
43
49
|
export async function storageGetRaw(key: string): Promise<string> {
|
|
44
50
|
const bridge = getBridge() ?? await getRawBridge();
|
|
45
|
-
if (
|
|
51
|
+
if (bridge?.getLocalStorage) {
|
|
52
|
+
try {
|
|
53
|
+
const val = await bridge.getLocalStorage(key);
|
|
54
|
+
if (val && val !== '') return val;
|
|
55
|
+
} catch { /* fall through */ }
|
|
56
|
+
}
|
|
46
57
|
try {
|
|
47
|
-
return
|
|
58
|
+
return localStorage.getItem(key) ?? '';
|
|
48
59
|
} catch {
|
|
49
60
|
return '';
|
|
50
61
|
}
|
|
51
62
|
}
|
|
52
63
|
|
|
53
|
-
/** Write a JSON value to SDK
|
|
64
|
+
/** Write a JSON value to BOTH SDK bridge and localStorage */
|
|
54
65
|
export async function storageSet(key: string, value: unknown): Promise<void> {
|
|
66
|
+
const json = JSON.stringify(value);
|
|
67
|
+
try { localStorage.setItem(key, json); } catch { /* ignore */ }
|
|
55
68
|
const bridge = getBridge();
|
|
56
|
-
if (
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
} catch { /* ignore */ }
|
|
69
|
+
if (bridge?.setLocalStorage) {
|
|
70
|
+
try { await bridge.setLocalStorage(key, json); } catch { /* ignore */ }
|
|
71
|
+
}
|
|
60
72
|
}
|
|
61
73
|
|
|
62
|
-
/** Write a raw string to SDK
|
|
74
|
+
/** Write a raw string to BOTH SDK bridge and localStorage */
|
|
63
75
|
export async function storageSetRaw(key: string, value: string): Promise<void> {
|
|
76
|
+
try { localStorage.setItem(key, value); } catch { /* ignore */ }
|
|
64
77
|
const bridge = getBridge();
|
|
65
|
-
if (
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
} catch { /* ignore */ }
|
|
78
|
+
if (bridge?.setLocalStorage) {
|
|
79
|
+
try { await bridge.setLocalStorage(key, value); } catch { /* ignore */ }
|
|
80
|
+
}
|
|
69
81
|
}
|
|
70
82
|
|
|
71
|
-
/** Remove a key from SDK
|
|
83
|
+
/** Remove a key from BOTH SDK bridge and localStorage */
|
|
72
84
|
export async function storageRemove(key: string): Promise<void> {
|
|
85
|
+
try { localStorage.removeItem(key); } catch { /* ignore */ }
|
|
73
86
|
const bridge = getBridge();
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
} catch { /* ignore */ }
|
|
87
|
+
if (bridge?.setLocalStorage) {
|
|
88
|
+
try { await bridge.setLocalStorage(key, ''); } catch { /* ignore */ }
|
|
89
|
+
}
|
|
78
90
|
}
|
package/package.json
CHANGED
|
@@ -65,13 +65,12 @@ function DrawerShell({
|
|
|
65
65
|
: !allItemIds.has(pathname);
|
|
66
66
|
|
|
67
67
|
// Resolve header values (screen overrides > defaults)
|
|
68
|
-
const
|
|
69
|
-
const headerTitle = pageTitlePrefix ? (
|
|
68
|
+
const headerTitle = headerOverride?.title ?? (pageTitlePrefix ? (
|
|
70
69
|
<div className="flex items-center justify-center gap-1.5 min-w-0">
|
|
71
70
|
<span className="shrink-0">{pageTitlePrefix}</span>
|
|
72
|
-
<span className="truncate">{
|
|
71
|
+
<span className="truncate">{getPageTitle(pathname)}</span>
|
|
73
72
|
</div>
|
|
74
|
-
) :
|
|
73
|
+
) : getPageTitle(pathname));
|
|
75
74
|
const headerHidden = headerOverride?.hidden ?? false;
|
|
76
75
|
|
|
77
76
|
const handleBack = useCallback(() => {
|
|
@@ -10,12 +10,26 @@ interface NavHeaderProps {
|
|
|
10
10
|
|
|
11
11
|
function NavHeader({ title, left, right, className }: NavHeaderProps) {
|
|
12
12
|
return (
|
|
13
|
-
<div className={cn('flex items-center
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
<div className={cn('flex items-center w-full box-border px-3 h-[52px] bg-surface rounded-b-[6px]', className)}>
|
|
14
|
+
{left ? (
|
|
15
|
+
<div className="flex items-center gap-2 shrink-0 min-w-[40px] mr-2">{left}</div>
|
|
16
|
+
) : null}
|
|
17
|
+
<div className="flex flex-1 min-w-0 items-center justify-center">
|
|
18
|
+
{typeof title === 'string'
|
|
19
|
+
? (
|
|
20
|
+
<span className="block w-full truncate text-[17px] tracking-[-0.17px] font-normal text-text text-center">
|
|
21
|
+
{title}
|
|
22
|
+
</span>
|
|
23
|
+
)
|
|
24
|
+
: (
|
|
25
|
+
<div className="w-full min-w-0">
|
|
26
|
+
{title}
|
|
27
|
+
</div>
|
|
28
|
+
)}
|
|
29
|
+
</div>
|
|
30
|
+
{right ? (
|
|
31
|
+
<div className="flex items-center gap-2 justify-end shrink-0 min-w-[40px] ml-2">{right}</div>
|
|
32
|
+
) : null}
|
|
19
33
|
</div>
|
|
20
34
|
);
|
|
21
35
|
}
|
|
@@ -207,7 +207,7 @@ function DrawerTrigger({ onClick, className }: { onClick: () => void; className?
|
|
|
207
207
|
/* ── Drawer Header Context ── */
|
|
208
208
|
|
|
209
209
|
interface DrawerHeaderConfig {
|
|
210
|
-
title?:
|
|
210
|
+
title?: ReactNode;
|
|
211
211
|
left?: ReactNode;
|
|
212
212
|
right?: ReactNode;
|
|
213
213
|
below?: ReactNode;
|