@data-club/ai-hub 0.0.1 → 0.0.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserMenu.d.ts","sourceRoot":"","sources":["../../../src/components/ChatShell/UserMenu.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAkB1D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,KAAK,EAAE,cAAc,CAAC;IACtB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"UserMenu.d.ts","sourceRoot":"","sources":["../../../src/components/ChatShell/UserMenu.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAkB1D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,KAAK,EAAE,cAAc,CAAC;IACtB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,CAyIxD"}
|
|
@@ -57,7 +57,19 @@ export function UserMenu(props) {
|
|
|
57
57
|
return;
|
|
58
58
|
function handleClick(e) {
|
|
59
59
|
const node = wrapRef.current;
|
|
60
|
-
if (
|
|
60
|
+
if (!node)
|
|
61
|
+
return;
|
|
62
|
+
// Shadow-DOM safety: when this component is packaged as a Web Component
|
|
63
|
+
// (`defineWebComponent`), events that bubble to `document` are
|
|
64
|
+
// *retargeted* so `e.target` becomes the host element, never the clicked
|
|
65
|
+
// node inside the shadow root. `node.contains(e.target)` would then be
|
|
66
|
+
// false for clicks on the button itself, so a second click could never
|
|
67
|
+
// toggle the menu closed. `composedPath()` crosses the shadow boundary
|
|
68
|
+
// and lists the real nodes the event traversed; fall back to `e.target`
|
|
69
|
+
// where it isn't available.
|
|
70
|
+
const path = typeof e.composedPath === "function" ? e.composedPath() : [];
|
|
71
|
+
const clickedInside = path.length > 0 ? path.includes(node) : node.contains(e.target);
|
|
72
|
+
if (!clickedInside) {
|
|
61
73
|
setOpen(false);
|
|
62
74
|
}
|
|
63
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserMenu.js","sourceRoot":"","sources":["../../../src/components/ChatShell/UserMenu.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EACL,SAAS,EACT,MAAM,EACN,QAAQ,GAET,MAAM,OAAO,CAAC;AAGf,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,IAAsB;IAC9C,OAAO,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,aAAa,CAAC;AAC7E,CAAC;AAkBD;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACxB,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,MAAM,EAAE,oBAAoB,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC5C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,IAAI,IAAI,CAAC;IAE3D,iEAAiE;IACjE,oCAAoC;IACpC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,SAAS,WAAW,CAAC,CAAa;YAChC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;YAC7B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"UserMenu.js","sourceRoot":"","sources":["../../../src/components/ChatShell/UserMenu.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@data-club/ai-hub",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "React package for the data-club ai-hub: chat UI, login + change-password, admin UI, AIHub.* primitives, defineWebComponent helper, client SDK. See docs/SPECIFICATIONS.md §7.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -84,7 +84,20 @@ export function UserMenu(props: UserMenuProps): ReactNode {
|
|
|
84
84
|
if (!open) return;
|
|
85
85
|
function handleClick(e: MouseEvent): void {
|
|
86
86
|
const node = wrapRef.current;
|
|
87
|
-
if (
|
|
87
|
+
if (!node) return;
|
|
88
|
+
// Shadow-DOM safety: when this component is packaged as a Web Component
|
|
89
|
+
// (`defineWebComponent`), events that bubble to `document` are
|
|
90
|
+
// *retargeted* so `e.target` becomes the host element, never the clicked
|
|
91
|
+
// node inside the shadow root. `node.contains(e.target)` would then be
|
|
92
|
+
// false for clicks on the button itself, so a second click could never
|
|
93
|
+
// toggle the menu closed. `composedPath()` crosses the shadow boundary
|
|
94
|
+
// and lists the real nodes the event traversed; fall back to `e.target`
|
|
95
|
+
// where it isn't available.
|
|
96
|
+
const path =
|
|
97
|
+
typeof e.composedPath === "function" ? e.composedPath() : [];
|
|
98
|
+
const clickedInside =
|
|
99
|
+
path.length > 0 ? path.includes(node) : node.contains(e.target as Node);
|
|
100
|
+
if (!clickedInside) {
|
|
88
101
|
setOpen(false);
|
|
89
102
|
}
|
|
90
103
|
}
|