@chatcops/widget 0.5.0 → 0.7.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 (92) hide show
  1. package/README.md +4 -3
  2. package/dist/api/client.d.ts +21 -0
  3. package/dist/api/client.d.ts.map +1 -1
  4. package/dist/api/protocol.d.ts +39 -0
  5. package/dist/api/protocol.d.ts.map +1 -0
  6. package/dist/api/turnstile.d.ts +8 -0
  7. package/dist/api/turnstile.d.ts.map +1 -0
  8. package/dist/api/types.d.ts +17 -1
  9. package/dist/api/types.d.ts.map +1 -1
  10. package/dist/chatcops.esm.js +1217 -537
  11. package/dist/chatcops.full.min.js +1 -0
  12. package/dist/chatcops.min.js +1 -1
  13. package/dist/chatcops.panel.js +1 -0
  14. package/dist/chunks/prechat-form-DiHgHUnU.js +1 -0
  15. package/dist/chunks/turnstile-CAnVL3fK.js +1 -0
  16. package/dist/dom/bubble.d.ts +3 -0
  17. package/dist/dom/bubble.d.ts.map +1 -1
  18. package/dist/dom/fab.d.ts +4 -2
  19. package/dist/dom/fab.d.ts.map +1 -1
  20. package/dist/dom/icons.d.ts +4 -0
  21. package/dist/dom/icons.d.ts.map +1 -0
  22. package/dist/dom/input.d.ts +1 -0
  23. package/dist/dom/input.d.ts.map +1 -1
  24. package/dist/dom/messages.d.ts +39 -2
  25. package/dist/dom/messages.d.ts.map +1 -1
  26. package/dist/dom/panel.d.ts +8 -0
  27. package/dist/dom/panel.d.ts.map +1 -1
  28. package/dist/dom/prechat-form.d.ts.map +1 -1
  29. package/dist/dom/shadow.d.ts +10 -1
  30. package/dist/dom/shadow.d.ts.map +1 -1
  31. package/dist/i18n.d.ts +13 -1
  32. package/dist/i18n.d.ts.map +1 -1
  33. package/dist/index.d.ts +41 -5
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/loader/index.d.ts +2 -0
  36. package/dist/loader/index.d.ts.map +1 -0
  37. package/dist/loader/loader.d.ts +71 -0
  38. package/dist/loader/loader.d.ts.map +1 -0
  39. package/dist/locales/ar.d.ts +4 -0
  40. package/dist/locales/ar.d.ts.map +1 -0
  41. package/dist/locales/ar.js +1 -0
  42. package/dist/locales/de.d.ts +4 -0
  43. package/dist/locales/de.d.ts.map +1 -0
  44. package/dist/locales/de.js +1 -0
  45. package/dist/locales/es.d.ts +4 -0
  46. package/dist/locales/es.d.ts.map +1 -0
  47. package/dist/locales/es.js +1 -0
  48. package/dist/locales/fr.d.ts +4 -0
  49. package/dist/locales/fr.d.ts.map +1 -0
  50. package/dist/locales/fr.js +1 -0
  51. package/dist/locales/he.d.ts +4 -0
  52. package/dist/locales/he.d.ts.map +1 -0
  53. package/dist/locales/he.js +1 -0
  54. package/dist/locales/hi.d.ts +4 -0
  55. package/dist/locales/hi.d.ts.map +1 -0
  56. package/dist/locales/hi.js +1 -0
  57. package/dist/locales/it.d.ts +4 -0
  58. package/dist/locales/it.d.ts.map +1 -0
  59. package/dist/locales/it.js +1 -0
  60. package/dist/locales/ja.d.ts +4 -0
  61. package/dist/locales/ja.d.ts.map +1 -0
  62. package/dist/locales/ja.js +1 -0
  63. package/dist/locales/ko.d.ts +4 -0
  64. package/dist/locales/ko.d.ts.map +1 -0
  65. package/dist/locales/ko.js +1 -0
  66. package/dist/locales/nl.d.ts +4 -0
  67. package/dist/locales/nl.d.ts.map +1 -0
  68. package/dist/locales/nl.js +1 -0
  69. package/dist/locales/pt.d.ts +4 -0
  70. package/dist/locales/pt.d.ts.map +1 -0
  71. package/dist/locales/pt.js +1 -0
  72. package/dist/locales/ur.d.ts +4 -0
  73. package/dist/locales/ur.d.ts.map +1 -0
  74. package/dist/locales/ur.js +1 -0
  75. package/dist/locales/zh.d.ts +4 -0
  76. package/dist/locales/zh.d.ts.map +1 -0
  77. package/dist/locales/zh.js +1 -0
  78. package/dist/markdown.d.ts.map +1 -1
  79. package/dist/namespace.d.ts.map +1 -1
  80. package/dist/panel.d.ts +6 -0
  81. package/dist/panel.d.ts.map +1 -0
  82. package/dist/script-config.d.ts +5 -0
  83. package/dist/script-config.d.ts.map +1 -0
  84. package/dist/storage.d.ts +30 -10
  85. package/dist/storage.d.ts.map +1 -1
  86. package/dist/theme.d.ts +15 -0
  87. package/dist/theme.d.ts.map +1 -1
  88. package/dist/version.d.ts +3 -0
  89. package/dist/version.d.ts.map +1 -0
  90. package/dist/widget.d.ts +132 -14
  91. package/dist/widget.d.ts.map +1 -1
  92. package/package.json +25 -7
package/dist/storage.d.ts CHANGED
@@ -1,3 +1,12 @@
1
+ import type { MessageErrorType } from './dom/messages.js';
2
+ /** Where the widget keeps the conversation: nowhere (`none`), this tab (`session`) or this browser (`local`). */
3
+ export type Persistence = 'none' | 'session' | 'local';
4
+ /** A string store: localStorage, sessionStorage, or memory for `none`. Never throws. */
5
+ export interface KeyStore {
6
+ get(key: string): string | null;
7
+ set(key: string, value: string): void;
8
+ remove(key: string): void;
9
+ }
1
10
  interface StoredConversation {
2
11
  id: string;
3
12
  messages: Array<{
@@ -5,24 +14,35 @@ interface StoredConversation {
5
14
  role: 'user' | 'assistant';
6
15
  content: string;
7
16
  status?: 'streaming' | 'complete' | 'error';
8
- errorType?: 'rate_limit' | 'network' | 'provider_error' | 'timeout';
17
+ errorType?: MessageErrorType;
9
18
  timestamp: number;
19
+ sources?: Array<{
20
+ url: string;
21
+ title?: string;
22
+ }>;
10
23
  }>;
24
+ /** Pre-chat answers, kept with the conversation so a restored chat has them too. */
25
+ userData?: Record<string, string>;
26
+ /** The pre-chat form was submitted for this conversation. */
27
+ preChatDone?: boolean;
11
28
  updatedAt: number;
12
29
  }
30
+ /** The store for a persistence mode. Every call is wrapped, since storage can be blocked or full. */
31
+ export declare function keyStore(persistence: Persistence): KeyStore;
32
+ /**
33
+ * The saved conversation for one widget. Nothing here runs until the widget
34
+ * reads or saves, so constructing it touches no storage.
35
+ */
13
36
  export declare class ConversationStorage {
37
+ readonly store: KeyStore;
14
38
  private key;
15
- private sessionKey;
16
- /** Without a siteId the keys are the ones the widget has always used. */
17
- constructor(siteId?: string);
18
- load(): StoredConversation | null;
39
+ private ttlMs;
40
+ /** Without a siteId the key is the one the widget has always used. */
41
+ constructor(siteId?: string, persistence?: Persistence, historyTtlDays?: number);
42
+ /** The saved conversation, or null when there is none, it's unreadable, or it expired. */
43
+ load(now?: number): StoredConversation | null;
19
44
  save(conversation: StoredConversation): void;
20
45
  clear(): void;
21
- getSessionId(): string;
22
- isPreChatCompleted(sessionId: string): boolean;
23
- setPreChatCompleted(sessionId: string, data?: Record<string, string>): void;
24
- getPreChatData(sessionId: string): Record<string, string> | null;
25
- setPreChatData(sessionId: string, data: Record<string, string>): void;
26
46
  }
27
47
  export {};
28
48
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,UAAU,kBAAkB;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;QAC5C,SAAS,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAAC;QACpE,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,UAAU,CAAS;IAE3B,yEAAyE;gBAC7D,MAAM,CAAC,EAAE,MAAM;IAK3B,IAAI,IAAI,kBAAkB,GAAG,IAAI;IAUjC,IAAI,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI;IAc5C,KAAK,IAAI,IAAI;IAQb,YAAY,IAAI,MAAM;IAatB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAQ9C,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAW3E,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAchE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;CAOtE"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,iHAAiH;AACjH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvD,wFAAwF;AACxF,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAChC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,UAAU,kBAAkB;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;QAC5C,SAAS,CAAC,EAAE,gBAAgB,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAClD,CAAC,CAAC;IACH,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,6DAA6D;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD,qGAAqG;AACrG,wBAAgB,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,QAAQ,CAiC3D;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,KAAK,CAAS;IAEtB,sEAAsE;gBAC1D,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,GAAE,WAAqB,EAAE,cAAc,SAAK;IAOpF,0FAA0F;IAC1F,IAAI,CAAC,GAAG,SAAa,GAAG,kBAAkB,GAAG,IAAI;IAmEjD,IAAI,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI;IAQ5C,KAAK,IAAI,IAAI;CAGd"}
package/dist/theme.d.ts CHANGED
@@ -1,5 +1,13 @@
1
+ export type ThemeMode = 'light' | 'dark' | 'auto';
1
2
  export interface ThemeConfig {
3
+ /**
4
+ * `auto` (the default) follows the visitor's system setting and switches
5
+ * when it changes. `dark` is the look the widget had before light mode.
6
+ */
7
+ mode?: ThemeMode;
2
8
  accent?: string;
9
+ /** The accent in dark mode. Defaults to `accent`. */
10
+ accentDark?: string;
3
11
  textColor?: string;
4
12
  bgColor?: string;
5
13
  fontFamily?: string;
@@ -7,6 +15,13 @@ export interface ThemeConfig {
7
15
  position?: 'bottom-right' | 'bottom-left';
8
16
  }
9
17
  export declare function applyTheme(root: ShadowRoot, theme: ThemeConfig): void;
18
+ /**
19
+ * The mode to show. A config from before light mode that sets `bgColor` or
20
+ * `textColor` but no `mode` was made for the dark look, unless its colors are
21
+ * light, so it keeps the mode its colors fit instead of getting light text
22
+ * on light panels.
23
+ */
24
+ export declare function themeMode(theme: ThemeConfig): ThemeMode | undefined;
10
25
  export declare function contrastRatio(a: string, b: string): number;
11
26
  /**
12
27
  * Picks the text color for an accent background, and the accent shade to put
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC;CAC3C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CA6BrE;AA6BD,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYhG"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAElD,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC;CAC3C;AAID,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAsBrE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAKnE;AA8CD,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYhG"}
@@ -0,0 +1,3 @@
1
+ /** The widget's version, from package.json at build time. */
2
+ export declare const VERSION: string;
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAEA,6DAA6D;AAC7D,eAAO,MAAM,OAAO,EAAE,MAAsF,CAAC"}
package/dist/widget.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { type Persistence } from './storage.js';
2
+ import { type ThemeConfig } from './theme.js';
1
3
  import { type WidgetLocaleStrings } from './i18n.js';
2
4
  import type { MessageData } from './dom/messages.js';
3
5
  export interface PreChatField {
@@ -19,6 +21,16 @@ export interface WidgetConfig {
19
21
  apiUrl: string;
20
22
  /** Request/stream inactivity timeout in milliseconds. Defaults to 30000. */
21
23
  timeout?: number;
24
+ /**
25
+ * Your Cloudflare Turnstile site key, when the server has `turnstile` set.
26
+ * Cloudflare's script loads only when the widget first needs a session.
27
+ */
28
+ turnstileSiteKey?: string;
29
+ /**
30
+ * For a visitor your site has signed in: an HS256 JWT your server signs
31
+ * with the chat server's `identity.secret` (`sub`, `exp`, optional `tier`).
32
+ */
33
+ userToken?: string;
22
34
  mode?: 'popup' | 'inline';
23
35
  /**
24
36
  * Names this widget's saved conversation. Set a different one on each widget
@@ -27,31 +39,45 @@ export interface WidgetConfig {
27
39
  */
28
40
  siteId?: string;
29
41
  container?: string | HTMLElement;
30
- theme?: {
31
- accent?: string;
32
- textColor?: string;
33
- bgColor?: string;
34
- fontFamily?: string;
35
- borderRadius?: string | number;
36
- position?: 'bottom-right' | 'bottom-left';
37
- };
42
+ theme?: ThemeConfig;
38
43
  branding?: {
39
44
  name?: string;
40
45
  avatar?: string;
41
46
  subtitle?: string;
42
47
  };
43
48
  welcomeMessage?: string;
49
+ /**
50
+ * The note at the top of the chat that visitors are talking to an AI, as
51
+ * the EU AI Act asks (Article 50). On by default. `text` replaces the
52
+ * wording, and `learnMoreUrl` adds a link. `false` turns it off, and then
53
+ * telling visitors is up to you.
54
+ */
55
+ disclosure?: false | {
56
+ text?: string;
57
+ learnMoreUrl?: string;
58
+ };
59
+ suggestions?: string[];
44
60
  welcomeBubble?: {
45
61
  text: string;
46
62
  delay?: number;
47
63
  showOnce?: boolean;
48
64
  };
49
65
  placeholder?: string;
66
+ /**
67
+ * Where the conversation is kept: `local` (this browser, the default),
68
+ * `session` (this tab) or `none` (memory only, gone on reload). Nothing is
69
+ * read or written until the chat is opened (or shown, in inline mode).
70
+ */
71
+ persistence?: Persistence;
72
+ /** Saved conversations older than this are dropped. Default 30 days. */
73
+ historyTtlDays?: number;
74
+ /** @deprecated Use `persistence: 'none'`. `false` is read as that. */
50
75
  persistHistory?: boolean;
51
76
  maxMessages?: number;
52
77
  pageContext?: boolean;
53
78
  autoOpen?: boolean | number;
54
79
  locale?: string;
80
+ dir?: 'ltr' | 'rtl' | 'auto';
55
81
  strings?: Partial<WidgetLocaleStrings>;
56
82
  preChatForm?: PreChatFormConfig;
57
83
  onOpen?: () => void;
@@ -61,8 +87,31 @@ export interface WidgetConfig {
61
87
  onLeadCaptured?: (leadData?: Record<string, unknown>) => void;
62
88
  onPreChatSubmit?: (data: Record<string, string>) => void;
63
89
  }
64
- export type WidgetEventType = 'open' | 'close' | 'message' | 'error' | 'leadCaptured' | 'preChatSubmit';
65
- export type WidgetEventHandler = (...args: unknown[]) => void;
90
+ /** What `update()` can change on a running chat. */
91
+ export type WidgetUpdate = Pick<WidgetConfig, 'branding' | 'welcomeMessage' | 'disclosure' | 'suggestions' | 'placeholder' | 'strings'> & {
92
+ theme?: Omit<ThemeConfig, 'position'>;
93
+ };
94
+ /** What each widget event passes to its handlers. */
95
+ export interface WidgetEvents {
96
+ open: [];
97
+ close: [];
98
+ /** A message the visitor sent, or a finished reply. */
99
+ message: [message: MessageData];
100
+ /** A reply that failed. */
101
+ error: [error: Error];
102
+ leadCaptured: [lead: Record<string, unknown> | undefined];
103
+ preChatSubmit: [data: Record<string, string>];
104
+ }
105
+ export type WidgetEventType = keyof WidgetEvents;
106
+ /** A handler for one event, typed by it: `on('message', (message) => ...)`. */
107
+ export type WidgetEventHandler<E extends WidgetEventType = WidgetEventType> = (...args: WidgetEvents[E]) => void;
108
+ /**
109
+ * The pre-chat form's chunk, loaded once and only by widgets that use the
110
+ * form. A failed load is forgotten, so the next widget tries again.
111
+ */
112
+ export declare function loadPreChatForm(): Promise<typeof import('./dom/prechat-form.js')>;
113
+ /** Starts downloading what this config will need, before the chat is shown. */
114
+ export declare function prefetch(config: WidgetConfig): void;
66
115
  export declare class Widget {
67
116
  private config;
68
117
  private shadow;
@@ -76,31 +125,100 @@ export declare class Widget {
76
125
  private namespace;
77
126
  private locale;
78
127
  private conversationId;
128
+ /** The pre-chat form was submitted for this conversation. */
129
+ private preChatDone;
130
+ /** The saved conversation has been read (on first open, or at mount in inline mode). */
131
+ private hydrated;
79
132
  private messages;
80
133
  private userData?;
81
134
  private isStreaming;
135
+ /** Set once the server answers in protocol v1 (0.6 and later). */
136
+ private v1;
82
137
  private destroyed;
138
+ /** Goes up on newConversation() and clear(), so a reply from before is ignored. */
139
+ private generation;
140
+ /** What the site added with setContext(), sent with every message. */
141
+ private pageData?;
142
+ /** The conversation the visitor details were last sent with: a v1 server keeps them from its first message. */
143
+ private userDataSentWith?;
144
+ /** Visitor details came from setUser(), so they're sent without a pre-chat form. */
145
+ private userFromSite;
83
146
  private abortController?;
84
147
  private retryRequests;
85
148
  private eventHandlers;
86
149
  private containerEl?;
87
150
  private autoOpenTimer?;
151
+ private unreadReplies;
152
+ private savedOverflow?;
88
153
  get isInline(): boolean;
89
154
  constructor(config: WidgetConfig);
90
155
  private resolveContainer;
91
156
  init(): void;
157
+ /** Reads the saved conversation and shows it, or the pre-chat form. Runs once. */
158
+ private hydrate;
92
159
  open(): void;
93
160
  close(): void;
94
161
  toggle(): void;
162
+ /**
163
+ * Sends `text` as the visitor, as if they typed it, and opens the chat
164
+ * first unless `open: false`. Resolves when the reply has finished. A
165
+ * message sent while a reply is still coming is ignored, as in the input.
166
+ */
167
+ sendMessage(text: string, options?: {
168
+ open?: boolean;
169
+ }): Promise<void>;
170
+ /**
171
+ * Starts a fresh conversation: a new id, and the log back to the welcome
172
+ * message. A reply that's still coming is stopped. Pre-chat answers stay.
173
+ */
174
+ newConversation(): void;
175
+ /**
176
+ * Like newConversation(), and forgets what this browser saved: the
177
+ * transcript and the pre-chat answers, so the form shows again.
178
+ */
179
+ clear(): void;
180
+ private reset;
181
+ /**
182
+ * The signed-in visitor. `token` is the identity token for the server
183
+ * (signed-in visitors); `name` and `email` are sent as visitor details, and
184
+ * the name greets them. Switching to another user, or signing out with
185
+ * `null`, clears the chat, so one person's conversation never shows for
186
+ * the next.
187
+ */
188
+ setUser(user: {
189
+ name?: string;
190
+ email?: string;
191
+ token?: string;
192
+ } | null): void;
193
+ /**
194
+ * Details about the page or the visitor that the bot should know for the
195
+ * next messages, such as `{ plan: 'Team' }`. Sent with each message as
196
+ * page context; `null` removes them. Ignored when `pageContext: false`.
197
+ */
198
+ setContext(data: Record<string, string> | null): void;
199
+ /**
200
+ * Changes the look or wording of the running chat without loading it
201
+ * again: the theme (not `position`), branding, strings, placeholder,
202
+ * disclosure, welcome message and suggestions. What you leave out stays
203
+ * as it is. A conversation that has only the welcome message shows the
204
+ * new one; otherwise the welcome message and suggestions are for the
205
+ * next conversation.
206
+ */
207
+ update(changes: WidgetUpdate): void;
208
+ private panelLabels;
209
+ private actionLabels;
210
+ private renderDisclosure;
211
+ private isStale;
95
212
  destroy(): void;
96
- on(event: WidgetEventType, handler: WidgetEventHandler): () => void;
97
- off(event: WidgetEventType, handler: WidgetEventHandler): void;
213
+ private lockScroll;
214
+ private restoreScroll;
215
+ on<E extends WidgetEventType>(event: E, handler: WidgetEventHandler<E>): () => void;
216
+ off<E extends WidgetEventType>(event: E, handler: WidgetEventHandler<E>): void;
98
217
  private emit;
99
- private isPreChatCompleted;
100
- private setPreChatCompleted;
101
218
  private showPreChatForm;
102
219
  private handlePreChatSubmit;
103
220
  private showChatView;
221
+ private renderSuggestions;
104
222
  private handleSend;
105
223
  private handleRetry;
106
224
  private handleRegenerate;
@@ -1 +1 @@
1
- {"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,18 @@
1
1
  {
2
2
  "name": "@chatcops/widget",
3
- "version": "0.5.0",
3
+ "version": "0.7.0",
4
4
  "description": "Embeddable AI chatbot widget - zero dependencies, Shadow DOM isolated",
5
+ "keywords": [
6
+ "chatcops",
7
+ "ai",
8
+ "chatbot",
9
+ "chat-widget",
10
+ "embeddable",
11
+ "shadow-dom",
12
+ "customer-support"
13
+ ],
14
+ "homepage": "https://chat.codercops.com",
15
+ "bugs": "https://github.com/codercops/chatcops/issues",
5
16
  "type": "module",
6
17
  "main": "dist/chatcops.min.js",
7
18
  "module": "dist/chatcops.esm.js",
@@ -9,32 +20,39 @@
9
20
  "exports": {
10
21
  ".": {
11
22
  "types": "./dist/index.d.ts",
12
- "import": "./dist/chatcops.esm.js",
13
- "require": "./dist/chatcops.min.js"
23
+ "import": "./dist/chatcops.esm.js"
24
+ },
25
+ "./locales/*": {
26
+ "types": "./dist/locales/*.d.ts",
27
+ "import": "./dist/locales/*.js"
14
28
  }
15
29
  },
16
30
  "files": [
17
31
  "dist"
18
32
  ],
19
33
  "devDependencies": {
34
+ "happy-dom": "^20.14.5",
35
+ "terser": "^5.37.0",
20
36
  "typescript": "^5.7.0",
21
37
  "vite": "^6.4.3",
22
- "terser": "^5.37.0",
23
38
  "vitest": "^4.1.11",
24
- "happy-dom": "^20.14.5"
39
+ "@chatcops/core": "^0.6.0"
25
40
  },
26
41
  "repository": {
27
42
  "type": "git",
28
- "url": "https://github.com/codercops/chatcops",
43
+ "url": "git+https://github.com/codercops/chatcops.git",
29
44
  "directory": "packages/widget"
30
45
  },
31
46
  "publishConfig": {
32
47
  "access": "public"
33
48
  },
34
49
  "license": "MIT",
50
+ "engines": {
51
+ "node": ">=22"
52
+ },
35
53
  "scripts": {
36
54
  "dev": "vite build --watch",
37
- "build": "vite build && tsc --emitDeclarationOnly",
55
+ "build": "vite build && vite build -c vite.panel.config.ts && vite build -c vite.loader.config.ts && rm -f tsconfig.tsbuildinfo && tsc --emitDeclarationOnly",
38
56
  "typecheck": "tsc --noEmit",
39
57
  "test": "vitest run",
40
58
  "test:watch": "vitest",