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 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
- * Uses the SDK bridge's setLocalStorage/getLocalStorage directly.
5
- * No browser localStorage, no caching — the SDK bridge is the single source of truth.
6
- * Falls back silently when SDK is not available (web/dev).
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 from SDK storage */
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 from SDK storage */
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 storage */
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 storage */
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 storage */
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;;;;;;GAMG;AAwBH,yCAAyC;AACzC,wBAAsB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAQxE;AAED,yCAAyC;AACzC,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhE;AAED,wCAAwC;AACxC,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3E;AAED,wCAAwC;AACxC,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7E;AAED,oCAAoC;AACpC,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM9D"}
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"}
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * Persistent storage for Even Hub apps.
3
3
  *
4
- * Uses the SDK bridge's setLocalStorage/getLocalStorage directly.
5
- * No browser localStorage, no caching — the SDK bridge is the single source of truth.
6
- * Falls back silently when SDK is not available (web/dev).
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 from SDK storage */
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 (!bridge?.getLocalStorage)
36
- return fallback;
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 = await bridge.getLocalStorage(key);
39
- if (raw && 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 from SDK storage */
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 (!bridge?.getLocalStorage)
49
- return '';
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 await bridge.getLocalStorage(key);
64
+ return localStorage.getItem(key) ?? '';
52
65
  }
53
66
  catch {
54
67
  return '';
55
68
  }
56
69
  }
57
- /** Write a JSON value to SDK storage */
70
+ /** Write a JSON value to BOTH SDK bridge and localStorage */
58
71
  export async function storageSet(key, value) {
59
- const bridge = getBridge();
60
- if (!bridge?.setLocalStorage)
61
- return;
72
+ const json = JSON.stringify(value);
62
73
  try {
63
- await bridge.setLocalStorage(key, JSON.stringify(value));
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 storage */
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
- await bridge.setLocalStorage(key, value);
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 storage */
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
- await bridge.setLocalStorage(key, '');
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":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../glasses/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,SAAS,SAAS;IAChB,MAAM,MAAM,GAAI,MAAc,CAAC,YAAY,CAAC;IAC5C,IAAI,MAAM,EAAE,eAAe;QAAE,OAAO,MAAM,CAAC;IAC3C,IAAI,MAAM,EAAE,SAAS,EAAE,eAAe;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC;IAChE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;IAC7B,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAC7B,aAAa,CAAC,YAAY,EAAE;YAC5B,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;SACjF,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAI,GAAW,EAAE,QAAW;IAC1D,MAAM,MAAM,GAAG,SAAS,EAAE,IAAI,MAAM,YAAY,EAAE,CAAC;IACnD,IAAI,MAAM,EAAE,eAAe,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACxB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,MAAM,MAAM,GAAG,SAAS,EAAE,IAAI,MAAM,YAAY,EAAE,CAAC;IACnD,IAAI,MAAM,EAAE,eAAe,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE;gBAAE,OAAO,GAAG,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,KAAc;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC;QAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,MAAM,EAAE,eAAe,EAAE,CAAC;QAC5B,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,KAAa;IAC5D,IAAI,CAAC;QAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,MAAM,EAAE,eAAe,EAAE,CAAC;QAC5B,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,IAAI,CAAC;QAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,MAAM,EAAE,eAAe,EAAE,CAAC;QAC5B,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACvE,CAAC;AACH,CAAC"}
@@ -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,2CA4GlB;AAED,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
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 headerTitleText = headerOverride?.title ?? getPageTitle(pathname);
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":"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"}
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,2CAUnE;AAED,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EAAE,cAAc,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 justify-between w-full box-border px-3 h-[52px] bg-surface rounded-b-[6px]', className), children: [_jsx("div", { className: "flex items-center gap-2 shrink-0 min-w-[40px]", children: left }), _jsx("span", { className: "text-[17px] tracking-[-0.17px] font-normal text-text text-center flex-1 truncate", children: title }), _jsx("div", { className: "flex items-center gap-2 justify-end shrink-0 min-w-[40px]", children: right })] }));
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,8FAA8F,EAAE,SAAS,CAAC,aAC3H,cAAK,SAAS,EAAC,+CAA+C,YAAE,IAAI,GAAO,EAC3E,eAAM,SAAS,EAAC,kFAAkF,YAC/F,KAAK,GACD,EACP,cAAK,SAAS,EAAC,2DAA2D,YAAE,KAAK,GAAO,IACpF,CACP,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,SAAS,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?: string;
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,MAAM,CAAC;IACf,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"}
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"}
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * Persistent storage for Even Hub apps.
3
3
  *
4
- * Uses the SDK bridge's setLocalStorage/getLocalStorage directly.
5
- * No browser localStorage, no caching — the SDK bridge is the single source of truth.
6
- * Falls back silently when SDK is not available (web/dev).
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 from SDK storage */
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 (!bridge?.getLocalStorage) return fallback;
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 = await bridge.getLocalStorage(key);
37
- if (raw && raw !== '') return JSON.parse(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 from SDK storage */
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 (!bridge?.getLocalStorage) return '';
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 await bridge.getLocalStorage(key);
58
+ return localStorage.getItem(key) ?? '';
48
59
  } catch {
49
60
  return '';
50
61
  }
51
62
  }
52
63
 
53
- /** Write a JSON value to SDK storage */
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 (!bridge?.setLocalStorage) return;
57
- try {
58
- await bridge.setLocalStorage(key, JSON.stringify(value));
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 storage */
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 (!bridge?.setLocalStorage) return;
66
- try {
67
- await bridge.setLocalStorage(key, value);
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 storage */
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 (!bridge?.setLocalStorage) return;
75
- try {
76
- await bridge.setLocalStorage(key, '');
77
- } catch { /* ignore */ }
87
+ if (bridge?.setLocalStorage) {
88
+ try { await bridge.setLocalStorage(key, ''); } catch { /* ignore */ }
89
+ }
78
90
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "even-toolkit",
3
- "version": "1.6.0",
3
+ "version": "1.6.2",
4
4
  "bin": {
5
5
  "even-toolkit": "./bin/create.js"
6
6
  },
@@ -65,13 +65,12 @@ function DrawerShell({
65
65
  : !allItemIds.has(pathname);
66
66
 
67
67
  // Resolve header values (screen overrides > defaults)
68
- const headerTitleText = headerOverride?.title ?? getPageTitle(pathname);
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">{headerTitleText}</span>
71
+ <span className="truncate">{getPageTitle(pathname)}</span>
73
72
  </div>
74
- ) : headerTitleText;
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 justify-between w-full box-border px-3 h-[52px] bg-surface rounded-b-[6px]', className)}>
14
- <div className="flex items-center gap-2 shrink-0 min-w-[40px]">{left}</div>
15
- <span className="text-[17px] tracking-[-0.17px] font-normal text-text text-center flex-1 truncate">
16
- {title}
17
- </span>
18
- <div className="flex items-center gap-2 justify-end shrink-0 min-w-[40px]">{right}</div>
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?: string;
210
+ title?: ReactNode;
211
211
  left?: ReactNode;
212
212
  right?: ReactNode;
213
213
  below?: ReactNode;