@nethesis/chat-island 0.1.8 → 0.1.10

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/README.md CHANGED
@@ -1,23 +1,112 @@
1
- # chat-island
1
+ # NethVoice Chat Island
2
2
 
3
- NethVoice chat widget (XMPP) for nethvoice-cti, NethLink and any web page.
3
+ A fully standalone chat component for NethVoice: one-to-one and group chats, attachments, voice notes, reactions, replies and notifications.
4
+
5
+ It runs in [NethVoice CTI](https://github.com/nethesis/nethvoice-cti), in [NethLink](https://github.com/NethServer/nethlink) and in any web page, and talks to the per-tenant XMPP server of [ns8-nethvoice](https://github.com/nethesis/ns8-nethvoice) with the user's CTI token.
6
+
7
+ **[Try the live demo](https://nethesis.github.io/chat-island/)**
8
+
9
+ ## Builds
10
+
11
+ Available as component on `npm`
12
+
13
+ [![npm](https://img.shields.io/npm/dw/@nethesis/chat-island?label=npm&color=red&style=for-the-badge)](https://www.npmjs.com/package/@nethesis/chat-island)
14
+
15
+ Available as widget on `jsDelivr`
16
+
17
+ [![jsdelivr-js](https://img.shields.io/jsdelivr/npm/hw/@nethesis/chat-island?label=jsdelivr-js&style=for-the-badge)](https://cdn.jsdelivr.net/npm/@nethesis/chat-island@latest/dist-widget/index.widget.js)
18
+ [![jsdelivr-css](https://img.shields.io/jsdelivr/npm/hw/@nethesis/chat-island?label=jsdelivr-css&color=blue&style=for-the-badge)](https://cdn.jsdelivr.net/npm/@nethesis/chat-island@latest/dist-widget/index.widget.css)
19
+
20
+ ## Use it as a React component
21
+
22
+ ```sh
23
+ npm install @nethesis/chat-island
24
+ ```
4
25
 
5
26
  ```tsx
6
27
  import { ChatIsland } from '@nethesis/chat-island'
7
28
  import '@nethesis/chat-island/dist/index.css'
8
29
 
9
- <ChatIsland dataConfig={btoa(`${ctiHost}:${username}:${jwt}`)} serviceWorker="/chat-island-sw.js" />
30
+ <ChatIsland dataConfig={btoa(`${ctiHost}:${username}:${ctiToken}`)} serviceWorker="/chat-island-sw.js" />
31
+ ```
32
+
33
+ | Prop | Default | |
34
+ | --- | --- | --- |
35
+ | `dataConfig` | | Base64 of `<cti_host>:<cti_username>:<cti_token>` |
36
+ | `theme` | host's `dark` class | `light`, `dark` or `system` |
37
+ | `position` | `bottom-right` | or `bottom-left` |
38
+ | `serviceWorker` | | URL of `chat-island-sw.js` on the host: notifications with the tab closed |
39
+ | `notifications` | `click` | `auto` asks for permission once online |
40
+ | `newChatButton` | `true` | `false` when the host has its own list |
41
+ | `maxHeads` | `5` | chat heads kept in the dock |
42
+ | `sound` | `true` | chime for a message not in view |
43
+ | `drag` / `onDragStart` | `true` | off, or the host moves its own window (NethLink) |
44
+
45
+ `contactsFromOperators(operators, avatars, me)` turns the CTI operators into the contacts the island takes with `chat-island-contacts`.
46
+
47
+ ## Integrate in any template
48
+
49
+ The widget works in any HTML page, CMS or server-rendered application, without React. You need:
50
+
51
+ 1. the CDN CSS file;
52
+ 2. the CDN JavaScript bundle;
53
+ 3. an element with class `chat-island` and a Base64 config token in `data-config`;
54
+ 4. optionally, a script of yours that sends commands and listens to the island's browser events.
55
+
56
+ ```html
57
+ <!doctype html>
58
+ <html lang="en">
59
+ <head>
60
+ <meta charset="utf-8" />
61
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@nethesis/chat-island@latest/dist-widget/index.widget.css" />
62
+ </head>
63
+ <body>
64
+ <div class="chat-island" data-config="YOUR_BASE64_CONFIG_TOKEN" data-theme="system"></div>
65
+
66
+ <script src="https://cdn.jsdelivr.net/npm/@nethesis/chat-island@latest/dist-widget/index.widget.js"></script>
67
+ <script>
68
+ window.addEventListener('chat-island-unread', (e) => (document.title = `(${e.detail.total}) My page`))
69
+ // open the chat with an operator
70
+ window.dispatchEvent(new CustomEvent('chat-island-open', { detail: { username: 'mario' } }))
71
+ </script>
72
+ </body>
73
+ </html>
74
+ ```
75
+
76
+ The widget mounts on the `.chat-island` elements present when its script runs. Attributes:
77
+
78
+ | Attribute | |
79
+ | --- | --- |
80
+ | `data-config` | Base64 config token (required) |
81
+ | `data-theme` | `light`, `dark` or `system` |
82
+ | `data-position` | `bottom-right` or `bottom-left` |
83
+ | `data-service-worker` | URL of `chat-island-sw.js`, served by your site (same origin) |
84
+ | `data-notifications` | `auto` to ask for permission once online |
85
+ | `data-new-chat-button` | `false` to hide the new chat button |
86
+
87
+ ### Base64 config token
88
+
89
+ ```text
90
+ <cti_host>:<cti_username>:<cti_token>
91
+ ```
92
+
93
+ The CTI token comes from the NethVoice middleware login:
94
+
95
+ ```sh
96
+ TOKEN=$(curl -s -X POST https://cti.example.com/api/login \
97
+ -H 'Content-Type: application/json' -d '{"username":"mario","password":"..."}' | jq -r .token)
98
+ echo -n "cti.example.com:mario:$TOKEN" | base64 -w0
10
99
  ```
11
100
 
12
- Serve `dist/chat-island-sw.js` from the host for notifications with the tab closed.
13
- `theme`: `light`, `dark` or `system`; default follows the host's `dark` class on `<html>`.
14
- `drag={false}` when the host moves its own window; `onDragStart` gets the dock and header drags (NethLink).
101
+ The chat must be on in NethVoice and the user's CTI profile must have the Chat permission. With two-factor authentication, use a token from a QR code login.
102
+
103
+ A complete example page is in `widget-example/`; the live demo is `index.html`.
15
104
 
16
105
  ## Events
17
106
 
18
107
  | Event | Direction | Detail |
19
108
  | --- | --- | --- |
20
- | `chat-island-open` | in | `{ username }` colleague or group address |
109
+ | `chat-island-open` | in | `{ username }` operator or group address |
21
110
  | `chat-island-close` | in | |
22
111
  | `chat-island-new` | in | open the new chat panel |
23
112
  | `chat-island-delete` | in | `{ username }` purge a conversation, leave or destroy a group |
@@ -33,6 +122,16 @@ Serve `dist/chat-island-sw.js` from the host for notifications with the tab clos
33
122
  | `chat-island-call` | out | `{ username, number }` |
34
123
  | `chat-island-notify` | out | `{ peer, name, body, kind, author, text, attachment, avatar, ts }` message not in view |
35
124
 
125
+ ## Live demo
126
+
127
+ `index.html` is published on [GitHub Pages](https://nethesis.github.io/chat-island/) by `.github/workflows/pages.yml` at every push to `main`, with the widget built from the same commit. It logs in with NethVoice credentials (or a token), mounts the widget and shows its events.
128
+
129
+ ```sh
130
+ npm install
131
+ npm run build:widget
132
+ python3 -m http.server # then open http://localhost:8000/
133
+ ```
134
+
36
135
  ## Develop
37
136
 
38
137
  ```sh
@@ -41,4 +140,4 @@ npm run dev
41
140
  npm run build && npm run build:widget
42
141
  ```
43
142
 
44
- A tag publishes the package to npm.
143
+ A tag publishes the package to npm; jsDelivr serves the widget from it.
@@ -11,7 +11,7 @@ export interface ChatIslandProps {
11
11
  serviceWorker?: string;
12
12
  /** How many chat heads the dock keeps; older ones drop off. Default 5. */
13
13
  maxHeads?: number;
14
- /** Show the "new chat" button with the colleague picker. Off when the host has its own list. Default true. */
14
+ /** Show the "new chat" button with the operator picker. Off when the host has its own list. Default true. */
15
15
  newChatButton?: boolean;
16
16
  /** Notification permission: 'auto' asks once online, 'click' waits for the bell. Default 'click'. */
17
17
  notifications?: 'auto' | 'click';
package/dist/api.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { Contact } from './types';
2
2
  export declare function fetchContacts(host: string, token: string, me: string, onMe?: (name: string) => void): Promise<Contact[]>;
3
- /** Colleagues with the mobile app registered for push: a message reaches their phone even when they are not in the chat. */
3
+ /** Operators with the mobile app registered for push: a message reaches their phone even when they are not in the chat. */
4
4
  export declare function fetchMobile(host: string, token: string): Promise<string[]>;
5
- /** Forget a conversation on the server: my archive with that colleague or group is purged. */
5
+ /** Forget a conversation on the server: my archive with that operator or group is purged. */
6
6
  export declare function deleteHistory(host: string, token: string, peer: string): Promise<void>;
@@ -0,0 +1,3 @@
1
+ import type { Contact } from './types';
2
+ /** CTI operators (the middleware's /user/endpoints/all, all_avatars) as island contacts, without me. */
3
+ export declare function contactsFromOperators(operators: Record<string, any> | undefined, avatars: Record<string, string> | undefined, me: string): Contact[];
package/dist/index.css CHANGED
@@ -1,2 +1,2 @@
1
- .chat-island-root,.chat-island-root *,.chat-island-root :before,.chat-island-root :after,.chat-island-root ::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.ci-fixed{position:fixed}.ci-absolute{position:absolute}.ci-relative{position:relative}.ci--left-1{left:-.25rem}.ci--right-1{right:-.25rem}.ci--right-1\.5{right:-.375rem}.ci--top-1{top:-.25rem}.ci-bottom-0{bottom:0}.ci-bottom-1{bottom:.25rem}.ci-bottom-2{bottom:.5rem}.ci-bottom-5{bottom:1.25rem}.ci-bottom-full{bottom:100%}.ci-left-0{left:0}.ci-left-1\/2{left:50%}.ci-left-2{left:.5rem}.ci-left-3{left:.75rem}.ci-left-4{left:1rem}.ci-right-0{right:0}.ci-right-3{right:.75rem}.ci-right-4{right:1rem}.ci-top-16{top:4rem}.ci-z-10{z-index:10}.ci-z-20{z-index:20}.ci-z-30{z-index:30}.ci-z-\[1\]{z-index:1}.ci-z-\[9999\]{z-index:9999}.ci-m-0{margin:0}.ci-mx-3{margin-left:.75rem;margin-right:.75rem}.ci-my-1{margin-top:.25rem;margin-bottom:.25rem}.ci--mt-1\.5{margin-top:-.375rem}.ci-mb-1{margin-bottom:.25rem}.ci-mb-1\.5{margin-bottom:.375rem}.ci-mb-3{margin-bottom:.75rem}.ci-mt-0\.5{margin-top:.125rem}.ci-mt-1{margin-top:.25rem}.ci-mt-2{margin-top:.5rem}.ci-line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ci-block{display:block}.ci-flex{display:flex}.ci-grid{display:grid}.ci-hidden{display:none}.ci-h-10{height:2.5rem}.ci-h-12{height:3rem}.ci-h-2\.5{height:.625rem}.ci-h-3{height:.75rem}.ci-h-5{height:1.25rem}.ci-h-6{height:1.5rem}.ci-h-64{height:16rem}.ci-h-7{height:1.75rem}.ci-h-8{height:2rem}.ci-h-9{height:2.25rem}.ci-h-\[30rem\]{height:30rem}.ci-h-full{height:100%}.ci-max-h-32{max-height:8rem}.ci-max-h-60{max-height:15rem}.ci-max-h-64{max-height:16rem}.ci-max-h-\[30rem\]{max-height:30rem}.ci-min-h-0{min-height:0}.ci-w-0{width:0}.ci-w-10{width:2.5rem}.ci-w-12{width:3rem}.ci-w-2\.5{width:.625rem}.ci-w-3{width:.75rem}.ci-w-5{width:1.25rem}.ci-w-7{width:1.75rem}.ci-w-8{width:2rem}.ci-w-9{width:2.25rem}.ci-w-\[21rem\]{width:21rem}.ci-w-\[22rem\]{width:22rem}.ci-w-auto{width:auto}.ci-w-full{width:100%}.ci-min-w-0{min-width:0}.ci-min-w-5{min-width:1.25rem}.ci-max-w-\[80\%\]{max-width:80%}.ci-max-w-full{max-width:100%}.ci-flex-1{flex:1}.ci-shrink-0{flex-shrink:0}.ci--translate-x-1\/2{--tw-translate-x:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ci-rotate-45{--tw-rotate:45deg;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ci-transform{transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ci-pulse{50%{opacity:.5}}.ci-animate-pulse{animation:2s cubic-bezier(.4,0,.6,1) infinite ci-pulse}.ci-cursor-grab{cursor:grab}.ci-cursor-pointer{cursor:pointer}.ci-cursor-text{cursor:text}.ci-touch-none{touch-action:none}.ci-select-none{-webkit-user-select:none;user-select:none}.ci-select-text{-webkit-user-select:text;user-select:text}.ci-resize-none{resize:none}.ci-list-none{list-style-type:none}.ci-grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.ci-flex-col{flex-direction:column}.ci-flex-col-reverse{flex-direction:column-reverse}.ci-flex-wrap{flex-wrap:wrap}.ci-content-center{align-content:center}.ci-items-start{align-items:flex-start}.ci-items-end{align-items:flex-end}.ci-items-center{align-items:center}.ci-justify-start{justify-content:flex-start}.ci-justify-end{justify-content:flex-end}.ci-justify-center{justify-content:center}.ci-gap-0\.5{gap:.125rem}.ci-gap-1{gap:.25rem}.ci-gap-1\.5{gap:.375rem}.ci-gap-2{gap:.5rem}.ci-gap-3{gap:.75rem}.ci-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.ci-self-center{align-self:center}.ci-overflow-hidden{overflow:hidden}.ci-overflow-x-auto{overflow-x:auto}.ci-overflow-y-auto{overflow-y:auto}.ci-truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ci-whitespace-nowrap{white-space:nowrap}.ci-whitespace-pre{white-space:pre}.ci-whitespace-pre-wrap{white-space:pre-wrap}.ci-break-words{overflow-wrap:break-word}.ci-break-all{word-break:break-all}.ci-rounded{border-radius:.25rem}.ci-rounded-2xl{border-radius:1rem}.ci-rounded-3xl{border-radius:1.5rem}.ci-rounded-full{border-radius:9999px}.ci-rounded-lg{border-radius:.5rem}.ci-rounded-xl{border-radius:.75rem}.ci-rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.ci-rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.ci-rounded-bl-lg{border-bottom-left-radius:.5rem}.ci-rounded-br-lg{border-bottom-right-radius:.5rem}.ci-border{border-width:1px}.ci-border-0{border-width:0}.ci-border-b{border-bottom-width:1px}.ci-border-b-2{border-bottom-width:2px}.ci-border-l-4{border-left-width:4px}.ci-border-t{border-top-width:1px}.ci-border-solid{border-style:solid}.ci-border-emerald-400{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity,1))}.ci-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.ci-border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.ci-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.ci-border-iconSecondary{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity,1))}.ci-border-transparent{border-color:#0000}.ci-bg-black\/10{background-color:#0000001a}.ci-bg-black\/20{background-color:#0003}.ci-bg-black\/5{background-color:#0000000d}.ci-bg-elevationL2{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.ci-bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.ci-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.ci-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.ci-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.ci-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.ci-bg-iconSecondary{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.ci-bg-phoneIslandActive{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.ci-bg-phoneIslandCall{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.ci-bg-phoneIslandClose{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.ci-bg-transparent{background-color:#0000}.ci-object-cover{-o-object-fit:cover;object-fit:cover}.ci-p-0{padding:0}.ci-p-1{padding:.25rem}.ci-p-2{padding:.5rem}.ci-px-1{padding-left:.25rem;padding-right:.25rem}.ci-px-1\.5{padding-left:.375rem;padding-right:.375rem}.ci-px-2{padding-left:.5rem;padding-right:.5rem}.ci-px-2\.5{padding-left:.625rem;padding-right:.625rem}.ci-px-3{padding-left:.75rem;padding-right:.75rem}.ci-px-3\.5{padding-left:.875rem;padding-right:.875rem}.ci-px-4{padding-left:1rem;padding-right:1rem}.ci-px-5{padding-left:1.25rem;padding-right:1.25rem}.ci-py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.ci-py-1{padding-top:.25rem;padding-bottom:.25rem}.ci-py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.ci-py-2{padding-top:.5rem;padding-bottom:.5rem}.ci-py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.ci-py-3{padding-top:.75rem;padding-bottom:.75rem}.ci-py-6{padding-top:1.5rem;padding-bottom:1.5rem}.ci-pb-1\.5{padding-bottom:.375rem}.ci-pb-2{padding-bottom:.5rem}.ci-pl-11{padding-left:2.75rem}.ci-pl-2{padding-left:.5rem}.ci-pl-2\.5{padding-left:.625rem}.ci-pl-3{padding-left:.75rem}.ci-pr-1{padding-right:.25rem}.ci-pr-1\.5{padding-right:.375rem}.ci-pr-2{padding-right:.5rem}.ci-pr-4{padding-right:1rem}.ci-pt-2{padding-top:.5rem}.ci-text-left{text-align:left}.ci-text-center{text-align:center}.ci-text-right{text-align:right}.ci-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.ci-font-sans{font-family:Poppins,Inter,system-ui,sans-serif}.ci-text-\[0\.85em\]{font-size:.85em}.ci-text-\[10px\]{font-size:10px}.ci-text-lg{font-size:1.125rem;line-height:1.75rem}.ci-text-sm{font-size:.875rem;line-height:1.25rem}.ci-text-xs{font-size:.75rem;line-height:1rem}.ci-font-light{font-weight:300}.ci-font-medium{font-weight:500}.ci-italic{font-style:italic}.ci-not-italic{font-style:normal}.ci-leading-4{line-height:1rem}.ci-leading-none{line-height:1}.ci-tracking-wide{letter-spacing:.025em}.ci-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.ci-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.ci-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.ci-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.ci-text-inherit{color:inherit}.ci-text-primaryInvert{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.ci-text-secondaryNeutral{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.ci-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.ci-underline{text-decoration-line:underline}.ci-opacity-0{opacity:0}.ci-opacity-100{opacity:1}.ci-opacity-60{opacity:.6}.ci-opacity-80{opacity:.8}.ci-shadow-2xl{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.ci-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.ci-shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.ci-shadow-xl{--tw-shadow:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.ci-outline-none{outline-offset:2px;outline:2px solid #0000}.ci-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.ci-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.ci-ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity,1))}.ci-ring-gray-50{--tw-ring-opacity:1;--tw-ring-color:rgb(249 250 251/var(--tw-ring-opacity,1))}.ci-ring-iconSecondary{--tw-ring-opacity:1;--tw-ring-color:rgb(67 56 202/var(--tw-ring-opacity,1))}.ci-transition-all{transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ci-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ci-transition-transform{transition-property:transform;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ci-duration-200{transition-duration:.2s}.chat-island-root,.chat-island-root *{box-sizing:border-box}.chat-island-root{font-family:Poppins,Inter,system-ui,sans-serif;font-size:14px;line-height:1.4}.chat-island-root button{font:inherit;cursor:pointer}.chat-island-root textarea,.chat-island-root input{font:inherit}.chat-island-root ::-webkit-scrollbar{width:6px}.chat-island-root ::-webkit-scrollbar-thumb{background:#9ca3af80;border-radius:9999px}.placeholder\:ci-text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.hover\:ci-scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:ci-scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:ci-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\:ci-bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.hover\:ci-bg-gray-300\/70:hover{background-color:#d1d5dbb3}.hover\:ci-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.hover\:ci-bg-phoneIslandCallHover:hover{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity,1))}.hover\:ci-bg-phoneIslandCloseHover:hover{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity,1))}.hover\:ci-opacity-100:hover{opacity:1}.focus\:ci-z-20:focus{z-index:20}.focus\:ci-opacity-100:focus{opacity:1}.focus\:ci-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.focus\:ci-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.focus\:ci-ring-emerald-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity,1))}.focus\:ci-ring-gray-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity,1))}.focus\:ci-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity,1))}.focus\:ci-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:ci-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:ci-cursor-grabbing:active{cursor:grabbing}.enabled\:hover\:ci-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity,1))}.enabled\:hover\:ci-bg-gray-300\/70:hover:enabled{background-color:#d1d5dbb3}.enabled\:hover\:ci-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.disabled\:ci-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:ci-opacity-40:disabled{opacity:.4}.ci-group:focus-within .group-focus-within\:ci-flex,.ci-group:hover .group-hover\:ci-flex{display:flex}.ci-group:hover .group-hover\:ci-opacity-100{opacity:1}.dark\:ci-border-emerald-600:is(.ci-dark *){--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity,1))}.dark\:ci-border-gray-600:is(.ci-dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:ci-border-gray-700:is(.ci-dark *){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.dark\:ci-border-iconSecondaryDark:is(.ci-dark *){--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity,1))}.dark\:ci-bg-black\/10:is(.ci-dark *){background-color:#0000001a}.dark\:ci-bg-elevationL2Dark:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:ci-bg-emerald-950:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity,1))}.dark\:ci-bg-gray-300:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:ci-bg-gray-600:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:ci-bg-gray-800:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:ci-bg-gray-900:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.dark\:ci-bg-gray-950:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:ci-bg-iconSecondaryDark:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity,1))}.dark\:ci-bg-phoneIslandActiveDark:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:ci-bg-phoneIslandCallDark:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.dark\:ci-bg-phoneIslandCloseDark:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.dark\:ci-bg-white\/10:is(.ci-dark *){background-color:#ffffff1a}.dark\:ci-text-gray-200:is(.ci-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:ci-text-gray-400:is(.ci-dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:ci-text-gray-900:is(.ci-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:ci-text-gray-950:is(.ci-dark *){--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.dark\:ci-text-primaryInvertDark:is(.ci-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:ci-text-secondaryNeutralDark:is(.ci-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:ci-text-white:is(.ci-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:ci-ring-gray-700:is(.ci-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity,1))}.dark\:ci-ring-gray-950:is(.ci-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(3 7 18/var(--tw-ring-opacity,1))}.dark\:ci-ring-iconSecondaryDark:is(.ci-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity,1))}.dark\:placeholder\:ci-text-gray-400:is(.ci-dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:placeholder\:ci-text-gray-400:is(.ci-dark *)::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:hover\:ci-bg-gray-50:hover:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:hover\:ci-bg-gray-600:hover:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:hover\:ci-bg-gray-700\/30:hover:is(.ci-dark *){background-color:#3741514d}.dark\:hover\:ci-bg-gray-800:hover:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:hover\:ci-bg-phoneIslandCallHoverDark:hover:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity,1))}.dark\:hover\:ci-bg-phoneIslandCloseHoverDark:hover:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity,1))}.dark\:focus\:ci-ring-emerald-300:focus:is(.ci-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity,1))}.dark\:focus\:ci-ring-gray-500:focus:is(.ci-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.dark\:focus\:ci-ring-offset-black:focus:is(.ci-dark *){--tw-ring-offset-color:#000}.dark\:enabled\:hover\:ci-bg-gray-700\/30:hover:enabled:is(.ci-dark *){background-color:#3741514d}
1
+ .chat-island-root,.chat-island-root *,.chat-island-root :before,.chat-island-root :after,.chat-island-root ::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.ci-fixed{position:fixed}.ci-absolute{position:absolute}.ci-relative{position:relative}.ci--left-1{left:-.25rem}.ci--right-1{right:-.25rem}.ci--right-1\.5{right:-.375rem}.ci--top-1{top:-.25rem}.ci-bottom-0{bottom:0}.ci-bottom-1{bottom:.25rem}.ci-bottom-2{bottom:.5rem}.ci-bottom-5{bottom:1.25rem}.ci-bottom-full{bottom:100%}.ci-left-0{left:0}.ci-left-1\/2{left:50%}.ci-left-2{left:.5rem}.ci-left-3{left:.75rem}.ci-left-4{left:1rem}.ci-right-0{right:0}.ci-right-3{right:.75rem}.ci-right-4{right:1rem}.ci-top-16{top:4rem}.ci-z-10{z-index:10}.ci-z-20{z-index:20}.ci-z-30{z-index:30}.ci-z-\[1\]{z-index:1}.ci-z-\[9999\]{z-index:9999}.ci-m-0{margin:0}.ci-mx-3{margin-left:.75rem;margin-right:.75rem}.ci-my-1{margin-top:.25rem;margin-bottom:.25rem}.ci--mt-1\.5{margin-top:-.375rem}.ci-mb-1{margin-bottom:.25rem}.ci-mb-1\.5{margin-bottom:.375rem}.ci-mb-3{margin-bottom:.75rem}.ci-mt-0\.5{margin-top:.125rem}.ci-mt-1{margin-top:.25rem}.ci-mt-2{margin-top:.5rem}.ci-line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ci-block{display:block}.ci-flex{display:flex}.ci-grid{display:grid}.ci-hidden{display:none}.ci-h-10{height:2.5rem}.ci-h-12{height:3rem}.ci-h-2\.5{height:.625rem}.ci-h-3{height:.75rem}.ci-h-5{height:1.25rem}.ci-h-6{height:1.5rem}.ci-h-64{height:16rem}.ci-h-7{height:1.75rem}.ci-h-8{height:2rem}.ci-h-9{height:2.25rem}.ci-h-\[30rem\]{height:30rem}.ci-h-full{height:100%}.ci-max-h-32{max-height:8rem}.ci-max-h-60{max-height:15rem}.ci-max-h-64{max-height:16rem}.ci-max-h-\[30rem\]{max-height:30rem}.ci-min-h-0{min-height:0}.ci-w-0{width:0}.ci-w-10{width:2.5rem}.ci-w-12{width:3rem}.ci-w-2\.5{width:.625rem}.ci-w-3{width:.75rem}.ci-w-5{width:1.25rem}.ci-w-7{width:1.75rem}.ci-w-8{width:2rem}.ci-w-9{width:2.25rem}.ci-w-\[21rem\]{width:21rem}.ci-w-\[22rem\]{width:22rem}.ci-w-auto{width:auto}.ci-w-full{width:100%}.ci-min-w-0{min-width:0}.ci-min-w-5{min-width:1.25rem}.ci-max-w-\[80\%\]{max-width:80%}.ci-max-w-full{max-width:100%}.ci-flex-1{flex:1}.ci-shrink-0{flex-shrink:0}.ci--translate-x-1\/2{--tw-translate-x:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ci-rotate-45{--tw-rotate:45deg;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ci-transform{transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ci-pulse{50%{opacity:.5}}.ci-animate-pulse{animation:2s cubic-bezier(.4,0,.6,1) infinite ci-pulse}.ci-cursor-grab{cursor:grab}.ci-cursor-pointer{cursor:pointer}.ci-cursor-text{cursor:text}.ci-touch-none{touch-action:none}.ci-select-none{-webkit-user-select:none;user-select:none}.ci-select-text{-webkit-user-select:text;user-select:text}.ci-resize-none{resize:none}.ci-list-none{list-style-type:none}.ci-grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.ci-flex-col{flex-direction:column}.ci-flex-col-reverse{flex-direction:column-reverse}.ci-flex-wrap{flex-wrap:wrap}.ci-content-center{align-content:center}.ci-items-start{align-items:flex-start}.ci-items-end{align-items:flex-end}.ci-items-center{align-items:center}.ci-justify-start{justify-content:flex-start}.ci-justify-end{justify-content:flex-end}.ci-justify-center{justify-content:center}.ci-gap-0\.5{gap:.125rem}.ci-gap-1{gap:.25rem}.ci-gap-1\.5{gap:.375rem}.ci-gap-2{gap:.5rem}.ci-gap-3{gap:.75rem}.ci-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.ci-self-center{align-self:center}.ci-overflow-hidden{overflow:hidden}.ci-overflow-x-auto{overflow-x:auto}.ci-overflow-y-auto{overflow-y:auto}.ci-truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ci-whitespace-nowrap{white-space:nowrap}.ci-whitespace-pre{white-space:pre}.ci-whitespace-pre-wrap{white-space:pre-wrap}.ci-break-words{overflow-wrap:break-word}.ci-break-all{word-break:break-all}.ci-rounded{border-radius:.25rem}.ci-rounded-2xl{border-radius:1rem}.ci-rounded-3xl{border-radius:1.5rem}.ci-rounded-full{border-radius:9999px}.ci-rounded-lg{border-radius:.5rem}.ci-rounded-xl{border-radius:.75rem}.ci-rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.ci-rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.ci-rounded-bl-lg{border-bottom-left-radius:.5rem}.ci-rounded-br-lg{border-bottom-right-radius:.5rem}.ci-border{border-width:1px}.ci-border-0{border-width:0}.ci-border-b{border-bottom-width:1px}.ci-border-b-2{border-bottom-width:2px}.ci-border-l-4{border-left-width:4px}.ci-border-t{border-top-width:1px}.ci-border-solid{border-style:solid}.ci-border-emerald-400{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity,1))}.ci-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.ci-border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.ci-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.ci-border-iconSecondary{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity,1))}.ci-border-transparent{border-color:#0000}.ci-bg-black\/10{background-color:#0000001a}.ci-bg-black\/20{background-color:#0003}.ci-bg-black\/5{background-color:#0000000d}.ci-bg-elevationL2{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.ci-bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.ci-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.ci-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.ci-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.ci-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.ci-bg-iconSecondary{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.ci-bg-phoneIslandActive{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.ci-bg-phoneIslandCall{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.ci-bg-phoneIslandClose{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.ci-bg-transparent{background-color:#0000}.ci-object-cover{-o-object-fit:cover;object-fit:cover}.ci-p-0{padding:0}.ci-p-1{padding:.25rem}.ci-p-2{padding:.5rem}.ci-px-1{padding-left:.25rem;padding-right:.25rem}.ci-px-1\.5{padding-left:.375rem;padding-right:.375rem}.ci-px-2{padding-left:.5rem;padding-right:.5rem}.ci-px-2\.5{padding-left:.625rem;padding-right:.625rem}.ci-px-3{padding-left:.75rem;padding-right:.75rem}.ci-px-3\.5{padding-left:.875rem;padding-right:.875rem}.ci-px-4{padding-left:1rem;padding-right:1rem}.ci-px-5{padding-left:1.25rem;padding-right:1.25rem}.ci-py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.ci-py-1{padding-top:.25rem;padding-bottom:.25rem}.ci-py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.ci-py-2{padding-top:.5rem;padding-bottom:.5rem}.ci-py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.ci-py-3{padding-top:.75rem;padding-bottom:.75rem}.ci-py-6{padding-top:1.5rem;padding-bottom:1.5rem}.ci-pb-1\.5{padding-bottom:.375rem}.ci-pb-2{padding-bottom:.5rem}.ci-pl-11{padding-left:2.75rem}.ci-pl-2{padding-left:.5rem}.ci-pl-2\.5{padding-left:.625rem}.ci-pl-3{padding-left:.75rem}.ci-pr-1{padding-right:.25rem}.ci-pr-1\.5{padding-right:.375rem}.ci-pr-2{padding-right:.5rem}.ci-pr-4{padding-right:1rem}.ci-pt-2{padding-top:.5rem}.ci-text-left{text-align:left}.ci-text-center{text-align:center}.ci-text-right{text-align:right}.ci-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.ci-font-sans{font-family:Poppins,Inter,system-ui,sans-serif}.ci-text-\[0\.85em\]{font-size:.85em}.ci-text-\[10px\]{font-size:10px}.ci-text-lg{font-size:1.125rem;line-height:1.75rem}.ci-text-sm{font-size:.875rem;line-height:1.25rem}.ci-text-xs{font-size:.75rem;line-height:1rem}.ci-font-light{font-weight:300}.ci-font-medium{font-weight:500}.ci-italic{font-style:italic}.ci-not-italic{font-style:normal}.ci-leading-4{line-height:1rem}.ci-leading-none{line-height:1}.ci-tracking-wide{letter-spacing:.025em}.ci-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.ci-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.ci-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.ci-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.ci-text-inherit{color:inherit}.ci-text-primaryInvert{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.ci-text-secondaryNeutral{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.ci-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.ci-underline{text-decoration-line:underline}.ci-opacity-0{opacity:0}.ci-opacity-100{opacity:1}.ci-opacity-60{opacity:.6}.ci-opacity-80{opacity:.8}.ci-shadow-2xl{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.ci-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.ci-shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.ci-shadow-xl{--tw-shadow:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.ci-outline-none{outline-offset:2px;outline:2px solid #0000}.ci-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.ci-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.ci-ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity,1))}.ci-ring-gray-50{--tw-ring-opacity:1;--tw-ring-color:rgb(249 250 251/var(--tw-ring-opacity,1))}.ci-ring-iconSecondary{--tw-ring-opacity:1;--tw-ring-color:rgb(67 56 202/var(--tw-ring-opacity,1))}.ci-transition-all{transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ci-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ci-transition-transform{transition-property:transform;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ci-duration-200{transition-duration:.2s}.chat-island-root,.chat-island-root *{box-sizing:border-box}.chat-island-root{font-family:Poppins,Inter,system-ui,sans-serif;font-size:14px;line-height:1.4}:where(.chat-island-root) button:not(z),:where(.chat-island-root) input:not(z),:where(.chat-island-root) textarea:not(z){box-shadow:none;color:inherit;font:inherit;line-height:inherit;letter-spacing:inherit;text-align:inherit;text-transform:none;outline-offset:0;background:0 0;border:0 solid #0000;border-radius:0;width:auto;min-width:0;max-width:none;height:auto;min-height:0;margin:0;padding:0}:where(.chat-island-root) button:not(z){cursor:pointer}:where(.chat-island-root),:where(.chat-island-root) :not(z),:where(.chat-island-root) :before,:where(.chat-island-root) :after{border:0 solid #e5e7eb}:where(.chat-island-root) :is(h1,h2,h3,h4,h5,h6,p,blockquote,figure,pre,ol,ul):not(z){margin:0}:where(.chat-island-root) :is(ol,ul):not(z){padding:0;list-style:none}:where(.chat-island-root) :is(img,svg,video,audio,canvas):not(z){vertical-align:middle;display:block}:where(.chat-island-root) :is(img,video):not(z){max-width:100%;height:auto}.chat-island-root ::-webkit-scrollbar{width:6px}.chat-island-root ::-webkit-scrollbar-thumb{background:#9ca3af80;border-radius:9999px}.placeholder\:ci-text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.hover\:ci-scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:ci-scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:ci-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\:ci-bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.hover\:ci-bg-gray-300\/70:hover{background-color:#d1d5dbb3}.hover\:ci-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.hover\:ci-bg-phoneIslandCallHover:hover{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity,1))}.hover\:ci-bg-phoneIslandCloseHover:hover{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity,1))}.hover\:ci-opacity-100:hover{opacity:1}.focus\:ci-z-20:focus{z-index:20}.focus\:ci-opacity-100:focus{opacity:1}.focus\:ci-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.focus\:ci-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.focus\:ci-ring-emerald-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity,1))}.focus\:ci-ring-gray-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity,1))}.focus\:ci-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity,1))}.focus\:ci-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:ci-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:ci-cursor-grabbing:active{cursor:grabbing}.enabled\:hover\:ci-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity,1))}.enabled\:hover\:ci-bg-gray-300\/70:hover:enabled{background-color:#d1d5dbb3}.enabled\:hover\:ci-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.disabled\:ci-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:ci-opacity-40:disabled{opacity:.4}.ci-group:focus-within .group-focus-within\:ci-flex,.ci-group:hover .group-hover\:ci-flex{display:flex}.ci-group:hover .group-hover\:ci-opacity-100{opacity:1}.dark\:ci-border-emerald-600:is(.ci-dark *){--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity,1))}.dark\:ci-border-gray-600:is(.ci-dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:ci-border-gray-700:is(.ci-dark *){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.dark\:ci-border-iconSecondaryDark:is(.ci-dark *){--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity,1))}.dark\:ci-bg-black\/10:is(.ci-dark *){background-color:#0000001a}.dark\:ci-bg-elevationL2Dark:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:ci-bg-emerald-950:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(2 44 34/var(--tw-bg-opacity,1))}.dark\:ci-bg-gray-300:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:ci-bg-gray-600:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:ci-bg-gray-800:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:ci-bg-gray-900:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.dark\:ci-bg-gray-950:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:ci-bg-iconSecondaryDark:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity,1))}.dark\:ci-bg-phoneIslandActiveDark:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:ci-bg-phoneIslandCallDark:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.dark\:ci-bg-phoneIslandCloseDark:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.dark\:ci-bg-white\/10:is(.ci-dark *){background-color:#ffffff1a}.dark\:ci-text-gray-200:is(.ci-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:ci-text-gray-400:is(.ci-dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:ci-text-gray-900:is(.ci-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:ci-text-gray-950:is(.ci-dark *){--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.dark\:ci-text-primaryInvertDark:is(.ci-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:ci-text-secondaryNeutralDark:is(.ci-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:ci-text-white:is(.ci-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:ci-ring-gray-700:is(.ci-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity,1))}.dark\:ci-ring-gray-950:is(.ci-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(3 7 18/var(--tw-ring-opacity,1))}.dark\:ci-ring-iconSecondaryDark:is(.ci-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity,1))}.dark\:placeholder\:ci-text-gray-400:is(.ci-dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:placeholder\:ci-text-gray-400:is(.ci-dark *)::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:hover\:ci-bg-gray-50:hover:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:hover\:ci-bg-gray-600:hover:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:hover\:ci-bg-gray-700\/30:hover:is(.ci-dark *){background-color:#3741514d}.dark\:hover\:ci-bg-gray-800:hover:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:hover\:ci-bg-phoneIslandCallHoverDark:hover:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity,1))}.dark\:hover\:ci-bg-phoneIslandCloseHoverDark:hover:is(.ci-dark *){--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity,1))}.dark\:focus\:ci-ring-emerald-300:focus:is(.ci-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity,1))}.dark\:focus\:ci-ring-gray-500:focus:is(.ci-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.dark\:focus\:ci-ring-offset-black:focus:is(.ci-dark *){--tw-ring-offset-color:#000}.dark\:enabled\:hover\:ci-bg-gray-700\/30:hover:enabled:is(.ci-dark *){background-color:#3741514d}
2
2
  /*$vite$:1*/
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { ChatIsland, type ChatIslandProps } from './ChatIsland';
2
+ export { contactsFromOperators } from './contacts';
2
3
  export type { Contact, ConversationSummary, Message, Status } from './types';
3
4
  export type { Theme } from './theme';