@evelan/jexity-widget 0.10.5 → 0.11.0

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.
Files changed (34) hide show
  1. package/dist/index.mjs +1620 -1446
  2. package/dist/index.mjs.map +1 -1
  3. package/dist/react.mjs +1786 -1615
  4. package/dist/react.mjs.map +1 -1
  5. package/dist/types/features/chat/components/ChatInput.d.ts.map +1 -1
  6. package/dist/types/features/chat/components/ChatScreen.d.ts +14 -1
  7. package/dist/types/features/chat/components/ChatScreen.d.ts.map +1 -1
  8. package/dist/types/features/chat/components/EscalationFormScreen.d.ts.map +1 -1
  9. package/dist/types/features/chat/components/HumanHandoffAction.d.ts +19 -0
  10. package/dist/types/features/chat/components/HumanHandoffAction.d.ts.map +1 -0
  11. package/dist/types/features/chat/components/MessageList.d.ts.map +1 -1
  12. package/dist/types/features/chat/hooks/useConvexSession.d.ts +4 -1
  13. package/dist/types/features/chat/hooks/useConvexSession.d.ts.map +1 -1
  14. package/dist/types/features/home/components/HomeScreen.d.ts +6 -3
  15. package/dist/types/features/home/components/HomeScreen.d.ts.map +1 -1
  16. package/dist/types/i18n/locales/de.d.ts.map +1 -1
  17. package/dist/types/i18n/locales/en.d.ts +8 -0
  18. package/dist/types/i18n/locales/en.d.ts.map +1 -1
  19. package/dist/types/module/screens/ScreenRouter.d.ts +11 -1
  20. package/dist/types/module/screens/ScreenRouter.d.ts.map +1 -1
  21. package/dist/types/module/screens/screens.state.d.ts +3 -0
  22. package/dist/types/module/screens/screens.state.d.ts.map +1 -1
  23. package/dist/types/module/shell/WidgetShell.d.ts.map +1 -1
  24. package/dist/types/module/visitor/visitor.state.d.ts +23 -21
  25. package/dist/types/module/visitor/visitor.state.d.ts.map +1 -1
  26. package/dist/types/shared/ui/Header.d.ts +4 -2
  27. package/dist/types/shared/ui/Header.d.ts.map +1 -1
  28. package/dist/types/shared/ui/LoadingScreen.d.ts +5 -2
  29. package/dist/types/shared/ui/LoadingScreen.d.ts.map +1 -1
  30. package/dist/widget.js +30 -30
  31. package/dist/widget.js.map +1 -1
  32. package/package.json +1 -1
  33. package/dist/types/features/chat/lib/chat.d.ts +0 -3
  34. package/dist/types/features/chat/lib/chat.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ChatInput.d.ts","sourceRoot":"","sources":["../../../../../src/features/chat/components/ChatInput.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2CAA2C,CAAA;AAEnE,UAAU,cAAc;IACtB,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAA;IACvC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,EAAE,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,IAAI,CAAA;IACtE,aAAa,EAAE,MAAM,OAAO,CAAC;QAAE,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IAC5F,YAAY,EAAE,MAAM,IAAI,CAAA;CACzB;AAED,sEAAsE;AACtE,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,cAAc,gCA+ErI"}
1
+ {"version":3,"file":"ChatInput.d.ts","sourceRoot":"","sources":["../../../../../src/features/chat/components/ChatInput.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2CAA2C,CAAA;AAEnE,UAAU,cAAc;IACtB,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAA;IACvC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,EAAE,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,IAAI,CAAA;IACtE,aAAa,EAAE,MAAM,OAAO,CAAC;QAAE,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IAC5F,YAAY,EAAE,MAAM,IAAI,CAAA;CACzB;AAED,sEAAsE;AACtE,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,cAAc,gCAiFrI"}
@@ -1,7 +1,17 @@
1
+ import type { Id } from '@repo/backend/convex/_generated/dataModel';
2
+ import type { SessionResult } from '../hooks/useConvexSession';
1
3
  interface ChatScreenProps {
2
4
  greeting: string;
3
5
  orgSlug: string;
4
6
  projSlug?: string;
7
+ sessionId: Id<'contactSessions'> | null;
8
+ visitorId: string | null;
9
+ isLoading: boolean;
10
+ sessionNotFound: boolean;
11
+ resumeFailed: boolean;
12
+ isOrgDeleted: boolean;
13
+ ensureSession: () => Promise<SessionResult | null>;
14
+ startFresh: () => Promise<SessionResult | null>;
5
15
  }
6
16
  /**
7
17
  * Chat screen — renders immediately with greeting + input.
@@ -9,7 +19,10 @@ interface ChatScreenProps {
9
19
  *
10
20
  * Owns the conversations query so both MessageList and ChatInput
11
21
  * can react to streaming status from a single subscription.
22
+ *
23
+ * Note: session state is hoisted into WidgetShell so the Header can show
24
+ * HumanHandoffAction with the same sessionId/visitorId — no duplicate subscriptions.
12
25
  */
13
- export declare function ChatScreen({ greeting, orgSlug, projSlug }: ChatScreenProps): import("preact").JSX.Element;
26
+ export declare function ChatScreen({ greeting, orgSlug, projSlug, sessionId, visitorId, isLoading, sessionNotFound, resumeFailed, isOrgDeleted, ensureSession, startFresh }: ChatScreenProps): import("preact").JSX.Element;
14
27
  export {};
15
28
  //# sourceMappingURL=ChatScreen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatScreen.d.ts","sourceRoot":"","sources":["../../../../../src/features/chat/components/ChatScreen.tsx"],"names":[],"mappings":"AAUA,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,eAAe,gCA6D1E"}
1
+ {"version":3,"file":"ChatScreen.d.ts","sourceRoot":"","sources":["../../../../../src/features/chat/components/ChatScreen.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2CAA2C,CAAA;AAMnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE9D,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAA;IACvC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe,EAAE,OAAO,CAAA;IACxB,YAAY,EAAE,OAAO,CAAA;IACrB,YAAY,EAAE,OAAO,CAAA;IACrB,aAAa,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAClD,UAAU,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;CAChD;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,eAAe,gCA8FnL"}
@@ -1 +1 @@
1
- {"version":3,"file":"EscalationFormScreen.d.ts","sourceRoot":"","sources":["../../../../../src/features/chat/components/EscalationFormScreen.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2CAA2C,CAAA;AAEnE,UAAU,yBAAyB;IACjC,aAAa,EAAE,EAAE,CAAC,eAAe,CAAC,CAAA;IAClC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAA;IAChC,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,yBAAyB,gCAwDtG"}
1
+ {"version":3,"file":"EscalationFormScreen.d.ts","sourceRoot":"","sources":["../../../../../src/features/chat/components/EscalationFormScreen.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2CAA2C,CAAA;AAEnE,UAAU,yBAAyB;IACjC,aAAa,EAAE,EAAE,CAAC,eAAe,CAAC,CAAA;IAClC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAA;IAChC,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,yBAAyB,gCAiEtG"}
@@ -0,0 +1,19 @@
1
+ import type { Id } from '@repo/backend/convex/_generated/dataModel';
2
+ interface HumanHandoffActionProps {
3
+ sessionId: Id<'contactSessions'> | null;
4
+ visitorId: string | null;
5
+ }
6
+ /**
7
+ * Header button — "Talk to human".
8
+ *
9
+ * Calls createEscalationRequest. Backend decides:
10
+ * - If session has visitor info → returns { skipForm:true, ticketRef } →
11
+ * navigate to ConfirmationScreen (no form needed).
12
+ * - Else → returns { skipForm:false, formMessageId } →
13
+ * navigate to EscalationFormScreen (existing flow).
14
+ *
15
+ * Zero LLM tokens consumed on this path.
16
+ */
17
+ export declare function HumanHandoffAction({ sessionId, visitorId }: HumanHandoffActionProps): import("preact").JSX.Element;
18
+ export {};
19
+ //# sourceMappingURL=HumanHandoffAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HumanHandoffAction.d.ts","sourceRoot":"","sources":["../../../../../src/features/chat/components/HumanHandoffAction.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2CAA2C,CAAA;AAEnE,UAAU,uBAAuB;IAC/B,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAA;IACvC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,uBAAuB,gCAkDnF"}
@@ -1 +1 @@
1
- {"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../../../src/features/chat/components/MessageList.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,2CAA2C,CAAA;AAgBxE,UAAU,gBAAgB;IACxB,aAAa,EAAE,GAAG,CAAC,eAAe,CAAC,EAAE,GAAG,SAAS,CAAA;IACjD,QAAQ,EAAE,MAAM,CAAA;IAChB,8DAA8D;IAC9D,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,oEAAoE;IACpE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,iDAAiD;IACjD,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAA;IACvC,iDAAiD;IACjD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,gBAAgB,gCAsH3I"}
1
+ {"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../../../src/features/chat/components/MessageList.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,2CAA2C,CAAA;AAgBxE,UAAU,gBAAgB;IACxB,aAAa,EAAE,GAAG,CAAC,eAAe,CAAC,EAAE,GAAG,SAAS,CAAA;IACjD,QAAQ,EAAE,MAAM,CAAA;IAChB,8DAA8D;IAC9D,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,oEAAoE;IACpE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,iDAAiD;IACjD,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAA;IACvC,iDAAiD;IACjD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,gBAAgB,gCAkI3I"}
@@ -1,5 +1,5 @@
1
1
  type SessionStatus = 'active' | 'escalated' | 'assigned' | 'resolved' | 'org_deleted' | null;
2
- interface SessionResult {
2
+ export interface SessionResult {
3
3
  sessionId: Id<'contactSessions'>;
4
4
  visitorId: string;
5
5
  }
@@ -19,6 +19,9 @@ interface ConvexSession {
19
19
  ensureSession: () => Promise<SessionResult | null>;
20
20
  /** Clears the failed resume state and starts a fresh session. */
21
21
  startFresh: () => Promise<SessionResult | null>;
22
+ /** Clears cached resolved session so next ensureSession() re-resolves from currentSessionRef.
23
+ * Called by HomeScreen when visitor resumes a different history entry. */
24
+ resetSession: () => void;
22
25
  }
23
26
  /**
24
27
  * Lazy session hook — does NOT create a session on mount.
@@ -1 +1 @@
1
- {"version":3,"file":"useConvexSession.d.ts","sourceRoot":"","sources":["../../../../../src/features/chat/hooks/useConvexSession.ts"],"names":[],"mappings":"AAOA,KAAK,aAAa,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,GAAG,IAAI,CAAA;AAE5F,UAAU,aAAa;IACrB,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAA;IAChC,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,aAAa;IACrB,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAA;IACvC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,OAAO,CAAA;IAClB,kFAAkF;IAClF,eAAe,EAAE,OAAO,CAAA;IACxB,0EAA0E;IAC1E,YAAY,EAAE,OAAO,CAAA;IACrB,8CAA8C;IAC9C,aAAa,EAAE,aAAa,CAAA;IAC5B,wFAAwF;IACxF,YAAY,EAAE,OAAO,CAAA;IACrB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAClD,iEAAiE;IACjE,UAAU,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;CAChD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,CAiGlF"}
1
+ {"version":3,"file":"useConvexSession.d.ts","sourceRoot":"","sources":["../../../../../src/features/chat/hooks/useConvexSession.ts"],"names":[],"mappings":"AAOA,KAAK,aAAa,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,GAAG,IAAI,CAAA;AAE5F,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAA;IAChC,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,aAAa;IACrB,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAA;IACvC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,OAAO,CAAA;IAClB,kFAAkF;IAClF,eAAe,EAAE,OAAO,CAAA;IACxB,0EAA0E;IAC1E,YAAY,EAAE,OAAO,CAAA;IACrB,8CAA8C;IAC9C,aAAa,EAAE,aAAa,CAAA;IAC5B,wFAAwF;IACxF,YAAY,EAAE,OAAO,CAAA;IACrB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAClD,iEAAiE;IACjE,UAAU,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAC/C;8EAC0E;IAC1E,YAAY,EAAE,MAAM,IAAI,CAAA;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,CA0GlF"}
@@ -1,14 +1,17 @@
1
+ import type { SessionResult } from '../../chat/hooks/useConvexSession';
1
2
  interface HomeScreenProps {
2
3
  greeting: string;
3
4
  title: string;
5
+ onStartFresh: () => Promise<SessionResult | null>;
6
+ onResetSession: () => void;
4
7
  }
5
8
  /**
6
9
  * Home / greeting screen.
7
10
  *
8
11
  * Session resume (GDPR):
9
- * - sessionStorage ref exists (same tab) → show resume card with reference
10
- * - No ref (new tab / after close) → show start chat + optional reference lookup
12
+ * - sessionHistory has entries → show multi-entry history list
13
+ * - No history (new tab / after close) → show start chat + optional reference lookup
11
14
  */
12
- export declare function HomeScreen({ title }: HomeScreenProps): import("preact").JSX.Element;
15
+ export declare function HomeScreen({ title, onStartFresh, onResetSession }: HomeScreenProps): import("preact").JSX.Element;
13
16
  export {};
14
17
  //# sourceMappingURL=HomeScreen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HomeScreen.d.ts","sourceRoot":"","sources":["../../../../../src/features/home/components/HomeScreen.tsx"],"names":[],"mappings":"AAOA,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,eAAe,gCA4EpD"}
1
+ {"version":3,"file":"HomeScreen.d.ts","sourceRoot":"","sources":["../../../../../src/features/home/components/HomeScreen.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AAEtE,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IAEb,YAAY,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAEjD,cAAc,EAAE,MAAM,IAAI,CAAA;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,eAAe,gCAkGlF"}
@@ -1 +1 @@
1
- {"version":3,"file":"de.d.ts","sourceRoot":"","sources":["../../../../src/i18n/locales/de.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AAEzC,eAAO,MAAM,EAAE,EAAE,aAwDhB,CAAA"}
1
+ {"version":3,"file":"de.d.ts","sourceRoot":"","sources":["../../../../src/i18n/locales/de.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AAEzC,eAAO,MAAM,EAAE,EAAE,aAiEhB,CAAA"}
@@ -12,6 +12,7 @@ export interface WidgetStrings {
12
12
  localeLabelDe: string;
13
13
  localeLabelEn: string;
14
14
  resumeConversation: string;
15
+ startingConversation: string;
15
16
  sessionNotFound: string;
16
17
  startNewConversation: string;
17
18
  chatWith: string;
@@ -52,6 +53,13 @@ export interface WidgetStrings {
52
53
  fabLabel: string;
53
54
  /** Shown when a session belongs to an org that has been deleted. */
54
55
  chatNoLongerAvailable: string;
56
+ talkToHuman: string;
57
+ talkToHumanAria: string;
58
+ handoffPending: string;
59
+ handoffFailed: string;
60
+ handoffRateLimited: string;
61
+ resumeListLabel: string;
62
+ resumeListTimestamp: string;
55
63
  }
56
64
  export declare const en: WidgetStrings;
57
65
  //# sourceMappingURL=en.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../../src/i18n/locales/en.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,eAAe,EAAE,MAAM,CAAA;IACvB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IAEZ,mBAAmB,EAAE,MAAM,CAAA;IAC3B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,gBAAgB,EAAE,MAAM,CAAA;IACxB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,wBAAwB,EAAE,MAAM,CAAA;IAChC,sBAAsB,EAAE,MAAM,CAAA;IAC9B,sBAAsB,EAAE,MAAM,CAAA;IAE9B,qBAAqB,EAAE,MAAM,CAAA;IAE7B,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,EAAE,MAAM,CAAA;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,oEAAoE;IACpE,qBAAqB,EAAE,MAAM,CAAA;CAC9B;AAED,eAAO,MAAM,EAAE,EAAE,aAwDhB,CAAA"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../../src/i18n/locales/en.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,eAAe,EAAE,MAAM,CAAA;IACvB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IAEZ,mBAAmB,EAAE,MAAM,CAAA;IAC3B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,gBAAgB,EAAE,MAAM,CAAA;IACxB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,wBAAwB,EAAE,MAAM,CAAA;IAChC,sBAAsB,EAAE,MAAM,CAAA;IAC9B,sBAAsB,EAAE,MAAM,CAAA;IAE9B,qBAAqB,EAAE,MAAM,CAAA;IAE7B,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,EAAE,MAAM,CAAA;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,oEAAoE;IACpE,qBAAqB,EAAE,MAAM,CAAA;IAE7B,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,eAAe,EAAE,MAAM,CAAA;IACvB,mBAAmB,EAAE,MAAM,CAAA;CAC5B;AAED,eAAO,MAAM,EAAE,EAAE,aAiEhB,CAAA"}
@@ -1,10 +1,20 @@
1
+ import type { SessionResult } from '../../features/chat/hooks/useConvexSession';
1
2
  interface ScreenRouterProps {
2
3
  greeting: string;
3
4
  title: string;
4
5
  orgSlug: string;
5
6
  projSlug?: string;
7
+ sessionId: Id<'contactSessions'> | null;
8
+ visitorId: string | null;
9
+ isLoading: boolean;
10
+ sessionNotFound: boolean;
11
+ resumeFailed: boolean;
12
+ isOrgDeleted: boolean;
13
+ ensureSession: () => Promise<SessionResult | null>;
14
+ startFresh: () => Promise<SessionResult | null>;
15
+ resetSession: () => void;
6
16
  }
7
17
  /** Renders only the active screen. No animation — add transitions later once routing is stable. */
8
- export declare function ScreenRouter({ greeting, title, orgSlug, projSlug }: ScreenRouterProps): import("preact").JSX.Element;
18
+ export declare function ScreenRouter({ greeting, title, orgSlug, projSlug, sessionId, visitorId, isLoading, sessionNotFound, resumeFailed, isOrgDeleted, ensureSession, startFresh, resetSession }: ScreenRouterProps): import("preact").JSX.Element;
9
19
  export {};
10
20
  //# sourceMappingURL=ScreenRouter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenRouter.d.ts","sourceRoot":"","sources":["../../../../src/module/screens/ScreenRouter.tsx"],"names":[],"mappings":"AAYA,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,mGAAmG;AACnG,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,iBAAiB,gCA4CrF"}
1
+ {"version":3,"file":"ScreenRouter.d.ts","sourceRoot":"","sources":["../../../../src/module/screens/ScreenRouter.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAA;AAE/E,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAA;IACvC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe,EAAE,OAAO,CAAA;IACxB,YAAY,EAAE,OAAO,CAAA;IACrB,YAAY,EAAE,OAAO,CAAA;IACrB,aAAa,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAClD,UAAU,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAC/C,YAAY,EAAE,MAAM,IAAI,CAAA;CACzB;AAED,mGAAmG;AACnG,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,iBAAiB,gCAwD5M"}
@@ -23,6 +23,9 @@ export type ScreenState = {
23
23
  message: string;
24
24
  };
25
25
  export declare const screenStack: import("@preact/signals").Signal<ScreenState[]>;
26
+ export declare function computeInitialStack(): ScreenState[];
27
+ /** Re-seed the stack after initVisitor() has populated history. */
28
+ export declare function resetInitialStack(): void;
26
29
  /**
27
30
  * Escalation form style:
28
31
  * - 'inline': form card rendered inside the chat thread (default)
@@ -1 +1 @@
1
- {"version":3,"file":"screens.state.d.ts","sourceRoot":"","sources":["../../../../src/module/screens/screens.state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2CAA2C,CAAA;AAEnE,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GACd;IAAE,EAAE,EAAE,WAAW,CAAA;CAAE,GACnB;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GACd;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GACd;IAAE,EAAE,EAAE,iBAAiB,CAAC;IAAC,aAAa,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC;IAAC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAClH;IAAE,EAAE,EAAE,cAAc,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpC,eAAO,MAAM,WAAW,iDAA0C,CAAA;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,uDAAwC,CAAA;AAExE,wCAAwC;AACxC,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAElD;AAED,oDAAoD;AACpD,wBAAgB,IAAI,IAAI,IAAI,CAI3B;AAED,sEAAsE;AACtE,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAEjD"}
1
+ {"version":3,"file":"screens.state.d.ts","sourceRoot":"","sources":["../../../../src/module/screens/screens.state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2CAA2C,CAAA;AAGnE,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GACd;IAAE,EAAE,EAAE,WAAW,CAAA;CAAE,GACnB;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GACd;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GACd;IAAE,EAAE,EAAE,iBAAiB,CAAC;IAAC,aAAa,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC;IAAC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAClH;IAAE,EAAE,EAAE,cAAc,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAKpC,eAAO,MAAM,WAAW,iDAA+C,CAAA;AAEvE,wBAAgB,mBAAmB,IAAI,WAAW,EAAE,CAMnD;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,uDAAwC,CAAA;AAExE,wCAAwC;AACxC,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAElD;AAED,oDAAoD;AACpD,wBAAgB,IAAI,IAAI,IAAI,CAI3B;AAED,sEAAsE;AACtE,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAEjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetShell.d.ts","sourceRoot":"","sources":["../../../../src/module/shell/WidgetShell.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,UAAU,gBAAgB;IACxB,OAAO,EAAE,iBAAiB,CAAA;CAC3B;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,gBAAgB,gCAkFxD"}
1
+ {"version":3,"file":"WidgetShell.d.ts","sourceRoot":"","sources":["../../../../src/module/shell/WidgetShell.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,UAAU,gBAAgB;IACxB,OAAO,EAAE,iBAAiB,CAAA;CAC3B;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,gBAAgB,gCAiIxD"}
@@ -1,26 +1,28 @@
1
- /** Short alphanumeric reference visible to the visitor (e.g. "JEX-A3B7C2"). */
2
- export declare const sessionRef: import("@preact/signals").Signal<string | null>;
3
- /** True once the visitor has sent at least one message in any session. */
4
- export declare const hasActiveSession: import("@preact/signals").Signal<boolean>;
1
+ export declare const SESSION_HISTORY_TTL_MS: number;
2
+ export type SessionHistoryEntry = {
3
+ ref: string;
4
+ startedAt: number;
5
+ lastActivityAt: number;
6
+ };
7
+ export declare const sessionHistory: import("@preact/signals").Signal<SessionHistoryEntry[]>;
8
+ export declare const currentSessionRef: import("@preact/signals").Signal<string | null>;
9
+ export declare const hasAnyHistory: import("@preact/signals").ReadonlySignal<boolean>;
5
10
  /**
6
- * Load session state from sessionStorage on widget boot.
7
- * sessionStorage is cleared when the browser tab closes GDPR safe.
8
- * Call once from WidgetShell on mount.
11
+ * Set by HomeScreen actions BEFORE navigating to chat, so ChatScreen
12
+ * can render the correct LoadingScreen copy on mount. Consumed + cleared
13
+ * by ChatScreen.
14
+ *
15
+ * - 'fresh' — visitor clicked "Start new conversation"
16
+ * - 'resume' — visitor clicked a history entry or used the lookup form
17
+ * - null — initial mount (first-time visitor lands on chat) OR not set
9
18
  */
19
+ export declare const chatMountIntent: import("@preact/signals").Signal<"fresh" | "resume" | null>;
20
+ /** Call once on widget mount before computing initial screen. */
10
21
  export declare function initVisitor(): void;
11
- /**
12
- * Create a fresh session ref and persist it.
13
- * Called when the visitor starts a new conversation.
14
- */
22
+ /** Generate a fresh ref, push to history, set as current. */
15
23
  export declare function startNewSession(): string;
16
- /**
17
- * Resume with an existing session ref (e.g. typed into the lookup field).
18
- * Sets the ref + marks active so ChatScreen auto-resolves the session.
19
- */
20
- export declare function resumeWithRef(ref: string): void;
21
- /**
22
- * Mark the current session as active (first message sent).
23
- * Called from ChatInput on first send.
24
- */
25
- export declare function markSessionActive(): void;
24
+ /** Resume an existing entry — bumps lastActivityAt + sets current. */
25
+ export declare function resumeSession(ref: string): void;
26
+ /** Mark activity on the current session (visitor send or bot final reply). */
27
+ export declare function markActivity(ref: string): void;
26
28
  //# sourceMappingURL=visitor.state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"visitor.state.d.ts","sourceRoot":"","sources":["../../../../src/module/visitor/visitor.state.ts"],"names":[],"mappings":"AAKA,+EAA+E;AAC/E,eAAO,MAAM,UAAU,iDAA8B,CAAA;AAErD,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,2CAAgB,CAAA;AAM7C;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAUlC;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CASxC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAO/C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAMxC"}
1
+ {"version":3,"file":"visitor.state.d.ts","sourceRoot":"","sources":["../../../../src/module/visitor/visitor.state.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB,QAAiB,CAAA;AAEpD,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAID,eAAO,MAAM,cAAc,yDAAoC,CAAA;AAC/D,eAAO,MAAM,iBAAiB,iDAA8B,CAAA;AAG5D,eAAO,MAAM,aAAa,mDAAkD,CAAA;AAE5E;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,6DAA0C,CAAA;AA2BtE,iEAAiE;AACjE,wBAAgB,WAAW,IAAI,IAAI,CASlC;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,IAAI,MAAM,CAQxC;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAS/C;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQ9C"}
@@ -1,7 +1,9 @@
1
+ import type { ComponentChildren } from 'preact';
1
2
  interface HeaderProps {
2
3
  title: string;
4
+ rightAction?: ComponentChildren;
3
5
  }
4
- /** Chat window header bar — shows bot icon, title, and back button when on a nested screen. */
5
- export declare function Header({ title }: HeaderProps): import("preact").JSX.Element;
6
+ /** Chat window header bar — shows bot icon, title, back button (nested screens), and an optional right-side action slot. */
7
+ export declare function Header({ title, rightAction }: HeaderProps): import("preact").JSX.Element;
6
8
  export {};
7
9
  //# sourceMappingURL=Header.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../../src/shared/ui/Header.tsx"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,+FAA+F;AAC/F,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,WAAW,gCAyB5C"}
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../../src/shared/ui/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAK/C,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAA;IAGb,WAAW,CAAC,EAAE,iBAAiB,CAAA;CAChC;AAED,4HAA4H;AAC5H,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,WAAW,gCA0BzD"}
@@ -1,7 +1,10 @@
1
1
  interface LoadingScreenProps {
2
2
  message?: string;
3
3
  }
4
- /** Full-coverage overlay shown during async operations. */
5
- export declare function LoadingScreen({ message }: LoadingScreenProps): import("preact").JSX.Element;
4
+ /**
5
+ * Full-coverage overlay shown during async operations.
6
+ * Defers first paint by 80ms to suppress single-frame flicker on fast resolves.
7
+ */
8
+ export declare function LoadingScreen({ message }: LoadingScreenProps): import("preact").JSX.Element | null;
6
9
  export {};
7
10
  //# sourceMappingURL=LoadingScreen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoadingScreen.d.ts","sourceRoot":"","sources":["../../../../src/shared/ui/LoadingScreen.tsx"],"names":[],"mappings":"AAAA,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,gCAO5D"}
1
+ {"version":3,"file":"LoadingScreen.d.ts","sourceRoot":"","sources":["../../../../src/shared/ui/LoadingScreen.tsx"],"names":[],"mappings":"AAEA,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,uCAgB5D"}