@sippet-ai/operator-widget 0.0.12

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 (59) hide show
  1. package/LICENSE +2 -0
  2. package/README.md +136 -0
  3. package/cdn/loader.js +146 -0
  4. package/custom-elements.json +2241 -0
  5. package/dist/components/index.d.ts +1 -0
  6. package/dist/components/index.js +1 -0
  7. package/dist/components/voip-widget/index.d.ts +18 -0
  8. package/dist/components/voip-widget/index.js +4 -0
  9. package/dist/components/voip-widget/voip-widget-contacts-tab.d.ts +14 -0
  10. package/dist/components/voip-widget/voip-widget-contacts-tab.js +45 -0
  11. package/dist/components/voip-widget/voip-widget-history-tab.d.ts +13 -0
  12. package/dist/components/voip-widget/voip-widget-history-tab.js +43 -0
  13. package/dist/components/voip-widget/voip-widget-launcher.d.ts +18 -0
  14. package/dist/components/voip-widget/voip-widget-launcher.js +100 -0
  15. package/dist/components/voip-widget/voip-widget-panel.d.ts +21 -0
  16. package/dist/components/voip-widget/voip-widget-panel.js +193 -0
  17. package/dist/components/voip-widget/voip-widget-phone-tab.d.ts +21 -0
  18. package/dist/components/voip-widget/voip-widget-phone-tab.js +187 -0
  19. package/dist/components/voip-widget/voip-widget-queue-tab.d.ts +14 -0
  20. package/dist/components/voip-widget/voip-widget-queue-tab.js +49 -0
  21. package/dist/components/voip-widget/voip-widget-settings-tab.d.ts +21 -0
  22. package/dist/components/voip-widget/voip-widget-settings-tab.js +135 -0
  23. package/dist/components/voip-widget/voip-widget.d.ts +142 -0
  24. package/dist/components/voip-widget/voip-widget.js +1329 -0
  25. package/dist/components/voip-widget/voip-widget.types.d.ts +22 -0
  26. package/dist/components/voip-widget/voip-widget.types.js +1 -0
  27. package/dist/index.d.ts +3 -0
  28. package/dist/index.js +3 -0
  29. package/dist/lib/realtime.d.ts +1 -0
  30. package/dist/lib/realtime.js +1 -0
  31. package/dist/lib/sippet.d.ts +40 -0
  32. package/dist/lib/sippet.js +197 -0
  33. package/dist/lib/tailwindMixin.d.ts +6 -0
  34. package/dist/lib/tailwindMixin.js +24 -0
  35. package/dist/styles/tailwind.global.css +2 -0
  36. package/dist/styles/tailwind.global.css.js +1 -0
  37. package/package.json +126 -0
  38. package/react/SippetAIVoipWidget.d.ts +158 -0
  39. package/react/SippetAIVoipWidget.js +72 -0
  40. package/react/SippetAIVoipWidgetContactsTab.d.ts +67 -0
  41. package/react/SippetAIVoipWidgetContactsTab.js +29 -0
  42. package/react/SippetAIVoipWidgetHistoryTab.d.ts +55 -0
  43. package/react/SippetAIVoipWidgetHistoryTab.js +26 -0
  44. package/react/SippetAIVoipWidgetLauncher.d.ts +83 -0
  45. package/react/SippetAIVoipWidgetLauncher.js +41 -0
  46. package/react/SippetAIVoipWidgetPanel.d.ts +87 -0
  47. package/react/SippetAIVoipWidgetPanel.js +43 -0
  48. package/react/SippetAIVoipWidgetPhoneTab.d.ts +87 -0
  49. package/react/SippetAIVoipWidgetPhoneTab.js +43 -0
  50. package/react/SippetAIVoipWidgetQueueTab.d.ts +67 -0
  51. package/react/SippetAIVoipWidgetQueueTab.js +27 -0
  52. package/react/SippetAIVoipWidgetSettingsTab.d.ts +91 -0
  53. package/react/SippetAIVoipWidgetSettingsTab.js +47 -0
  54. package/react/index.d.ts +8 -0
  55. package/react/index.js +8 -0
  56. package/react/react-utils.js +67 -0
  57. package/types/custom-element-jsx.d.ts +956 -0
  58. package/types/custom-element-svelte.d.ts +264 -0
  59. package/types/custom-element-vuejs.d.ts +234 -0
@@ -0,0 +1,22 @@
1
+ export type VoipTab = 'phone' | 'queue' | 'contacts' | 'history' | 'settings';
2
+ export type SipStatus = 'idle' | 'connecting' | 'connected' | 'error';
3
+ export type CallState = 'idle' | 'incoming' | 'outgoing' | 'active' | 'held';
4
+ export type Contact = {
5
+ name: string;
6
+ number: string;
7
+ };
8
+ export type HistoryEntry = {
9
+ name: string;
10
+ number: string;
11
+ time: string;
12
+ type: string;
13
+ };
14
+ export type QueuedCall = {
15
+ id: string;
16
+ name: string;
17
+ time: string;
18
+ };
19
+ export type MediaDeviceOption = {
20
+ id: string;
21
+ label: string;
22
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ export * from './components/index.js';
2
+ export * from './lib/realtime.js';
3
+ export * from './lib/sippet.js';
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from './components/index.js';
2
+ export * from './lib/realtime.js';
3
+ export * from './lib/sippet.js';
@@ -0,0 +1 @@
1
+ export { DEFAULT_BASE_URL, getSocket, initSocket, joinEventsChannel, type EventsChannel, type EventsChannelEvent, type InitSocketOptions, type SocketOptions, } from '@sippet-ai/sdk-js';
@@ -0,0 +1 @@
1
+ export { DEFAULT_BASE_URL, getSocket, initSocket, joinEventsChannel, } from '@sippet-ai/sdk-js';
@@ -0,0 +1,40 @@
1
+ export declare const sippet: {
2
+ setApiKey(apiKey: string | null): void;
3
+ setSessionAuth(enabled: boolean): void;
4
+ setApiOrigin(apiOrigin: string | null): void;
5
+ call(phoneNumber: string): Promise<"not implemented yet" | "ok">;
6
+ answer(_callUuid?: string): Promise<"not implemented yet" | "ok">;
7
+ decline(_callUuid?: string): Promise<"not implemented yet" | "ok">;
8
+ hold(_callUuid?: string): Promise<"not implemented yet" | "ok">;
9
+ transfer(_callUuid: string, _queue: string): Promise<string>;
10
+ callDetails(callUuid: string): Promise<{
11
+ success: false;
12
+ errors: import("@sippet-ai/sdk-js/dist/ash_rpc.js").AshRpcError[];
13
+ } | {
14
+ success: boolean;
15
+ data: {
16
+ call: {
17
+ id: string;
18
+ } & {
19
+ direction: "inbound" | "outbound";
20
+ } & {
21
+ fromNumber: string;
22
+ } & {
23
+ toNumber: string;
24
+ } & {
25
+ status: "answered" | "completed" | "initiated" | "ringing" | "failed" | "busy" | "no_answer" | null;
26
+ } & {
27
+ callUuid: string;
28
+ } & {
29
+ startedAt: string | null;
30
+ } & {
31
+ endedAt: string | null;
32
+ } & {
33
+ durationSeconds: number | null;
34
+ };
35
+ codec: import("@sippet-ai/sdk-js").InferCallCodecResult | null;
36
+ };
37
+ }>;
38
+ getQueue(): Promise<import("@sippet-ai/sdk-js").ListCallQueueEntriesResult<("id" | "callUuid" | "queueName" | "callerIdNumber" | "callerIdName" | "state" | "agentName" | "waitStartedAt")[], unknown>>;
39
+ getActiveCalls(): Promise<import("@sippet-ai/sdk-js").ListCallsResult<("id" | "direction" | "fromNumber" | "toNumber" | "status" | "callUuid" | "startedAt" | "endedAt" | "durationSeconds")[], unknown>>;
40
+ };
@@ -0,0 +1,197 @@
1
+ import { buildCSRFHeaders, callCodec, listCallQueueEntries, listCalls, } from '@sippet-ai/sdk-js';
2
+ const WIDGET_SELECTOR = 'sippetai-voip-widget';
3
+ let configuredApiKey = null;
4
+ let configuredSessionAuth = false;
5
+ let configuredApiOrigin = null;
6
+ function getWidget() {
7
+ if (typeof document === 'undefined')
8
+ return null;
9
+ return document.querySelector(WIDGET_SELECTOR);
10
+ }
11
+ function requireWidget() {
12
+ const widget = getWidget();
13
+ if (!widget) {
14
+ throw new Error('sippetai-voip-widget not found on the page');
15
+ }
16
+ return widget;
17
+ }
18
+ function resolveApiKey(widget) {
19
+ if (resolveSessionAuth(widget)) {
20
+ throw new Error('apiKey is not used when sessionAuth is enabled');
21
+ }
22
+ const key = configuredApiKey ??
23
+ widget?.apiKey ??
24
+ widget?.getAttribute?.('api-key') ??
25
+ widget?.getAttribute?.('apiKey');
26
+ if (typeof key !== 'string' || key.length === 0) {
27
+ throw new Error('apiKey is required for this action');
28
+ }
29
+ return key;
30
+ }
31
+ function resolveSessionAuth(widget) {
32
+ if (configuredSessionAuth)
33
+ return true;
34
+ if (widget?.sessionAuth)
35
+ return true;
36
+ const attribute = widget?.getAttribute?.('session-auth');
37
+ return attribute !== null;
38
+ }
39
+ function resolveApiOrigin(widget) {
40
+ const apiOrigin = configuredApiOrigin ??
41
+ widget?.apiOrigin ??
42
+ widget?.getAttribute?.('api-origin');
43
+ return typeof apiOrigin === 'string' && apiOrigin.length > 0
44
+ ? apiOrigin
45
+ : null;
46
+ }
47
+ function configureSdk(apiOrigin) {
48
+ if (!apiOrigin || typeof globalThis === 'undefined')
49
+ return;
50
+ const configHolder = globalThis;
51
+ configHolder.SippetAiSdkConfig = {
52
+ ...configHolder.SippetAiSdkConfig,
53
+ rpcRunEndpoint: `${apiOrigin}/rpc/run`,
54
+ rpcValidateEndpoint: `${apiOrigin}/rpc/validate`,
55
+ };
56
+ }
57
+ function rpcConfig() {
58
+ const widget = getWidget();
59
+ if (resolveSessionAuth(widget ?? undefined)) {
60
+ configureSdk(resolveApiOrigin(widget ?? undefined));
61
+ return {
62
+ headers: buildCSRFHeaders(),
63
+ fetchOptions: { credentials: 'include' },
64
+ };
65
+ }
66
+ const apiKey = resolveApiKey(widget ?? undefined);
67
+ return { headers: { 'x-api-key': apiKey } };
68
+ }
69
+ export const sippet = {
70
+ setApiKey(apiKey) {
71
+ configuredApiKey = typeof apiKey === 'string' ? apiKey : null;
72
+ },
73
+ setSessionAuth(enabled) {
74
+ configuredSessionAuth = Boolean(enabled);
75
+ },
76
+ setApiOrigin(apiOrigin) {
77
+ configuredApiOrigin = typeof apiOrigin === 'string' ? apiOrigin : null;
78
+ configureSdk(configuredApiOrigin);
79
+ },
80
+ async call(phoneNumber) {
81
+ const widget = requireWidget();
82
+ widget.openPanel?.('phone');
83
+ if (!widget.callNumber)
84
+ return 'not implemented yet';
85
+ await widget.callNumber(phoneNumber);
86
+ return 'ok';
87
+ },
88
+ async answer(_callUuid) {
89
+ void _callUuid;
90
+ const widget = requireWidget();
91
+ widget.openPanel?.('phone');
92
+ if (!widget.answerCall)
93
+ return 'not implemented yet';
94
+ await widget.answerCall();
95
+ return 'ok';
96
+ },
97
+ async decline(_callUuid) {
98
+ void _callUuid;
99
+ const widget = requireWidget();
100
+ widget.openPanel?.('phone');
101
+ if (!widget.declineCall)
102
+ return 'not implemented yet';
103
+ await widget.declineCall();
104
+ return 'ok';
105
+ },
106
+ async hold(_callUuid) {
107
+ void _callUuid;
108
+ const widget = requireWidget();
109
+ widget.openPanel?.('phone');
110
+ if (!widget.toggleHold)
111
+ return 'not implemented yet';
112
+ await widget.toggleHold();
113
+ return 'ok';
114
+ },
115
+ async transfer(_callUuid, _queue) {
116
+ void _callUuid;
117
+ void _queue;
118
+ return 'not implemented yet';
119
+ },
120
+ async callDetails(callUuid) {
121
+ const config = rpcConfig();
122
+ const result = await listCalls({
123
+ fields: [
124
+ 'id',
125
+ 'callUuid',
126
+ 'direction',
127
+ 'fromNumber',
128
+ 'toNumber',
129
+ 'status',
130
+ 'startedAt',
131
+ 'endedAt',
132
+ 'durationSeconds',
133
+ ],
134
+ filter: {
135
+ callUuid: { eq: callUuid },
136
+ },
137
+ ...config,
138
+ });
139
+ if (!result.success) {
140
+ return result;
141
+ }
142
+ const call = result.data[0] ?? null;
143
+ if (!call) {
144
+ return { success: true, data: null };
145
+ }
146
+ const codecResult = await callCodec({
147
+ input: { callUuid },
148
+ ...config,
149
+ });
150
+ return {
151
+ success: true,
152
+ data: {
153
+ call,
154
+ codec: codecResult.success ? codecResult.data : null,
155
+ },
156
+ };
157
+ },
158
+ async getQueue() {
159
+ const config = rpcConfig();
160
+ return listCallQueueEntries({
161
+ fields: [
162
+ 'id',
163
+ 'callUuid',
164
+ 'queueName',
165
+ 'callerIdNumber',
166
+ 'callerIdName',
167
+ 'state',
168
+ 'agentName',
169
+ 'waitStartedAt',
170
+ ],
171
+ filter: {
172
+ state: { in: ['waiting', 'offering'] },
173
+ },
174
+ ...config,
175
+ });
176
+ },
177
+ async getActiveCalls() {
178
+ const config = rpcConfig();
179
+ return listCalls({
180
+ fields: [
181
+ 'id',
182
+ 'callUuid',
183
+ 'direction',
184
+ 'fromNumber',
185
+ 'toNumber',
186
+ 'status',
187
+ 'startedAt',
188
+ 'endedAt',
189
+ 'durationSeconds',
190
+ ],
191
+ filter: {
192
+ status: { in: ['initiated', 'ringing', 'answered'] },
193
+ },
194
+ ...config,
195
+ });
196
+ },
197
+ };
@@ -0,0 +1,6 @@
1
+ import { type LitElement } from 'lit';
2
+ declare global {
3
+ export type LitMixin<T = unknown> = new (...args: any[]) => T & LitElement;
4
+ }
5
+ export declare const tailwind: import("lit").CSSResult;
6
+ export declare const TW: <T extends LitMixin>(superClass: T) => T;
@@ -0,0 +1,24 @@
1
+ import { adoptStyles, unsafeCSS } from 'lit';
2
+ import tailwindCss from '../styles/tailwind.global.css.js';
3
+ export const tailwind = unsafeCSS(tailwindCss);
4
+ // https://github.com/tailwindlabs/tailwindcss/issues/15005
5
+ // Set all @property values from tailwind on the document
6
+ // And only do this once (check if there is already a stylesheet with the same content)
7
+ if (tailwind.styleSheet &&
8
+ document?.adoptedStyleSheets &&
9
+ !document.adoptedStyleSheets.some(sheet => sheet.cssRules[0]?.cssText === tailwind.styleSheet?.cssRules[0].cssText)) {
10
+ const propertiesSheet = new CSSStyleSheet();
11
+ let code = tailwind.cssText;
12
+ code = code
13
+ .replaceAll('inherits: false', 'inherits: true')
14
+ .substring(code.indexOf('@property'));
15
+ propertiesSheet.replaceSync(code);
16
+ document.adoptedStyleSheets.push(propertiesSheet);
17
+ }
18
+ export const TW = (superClass) => class extends superClass {
19
+ connectedCallback() {
20
+ super.connectedCallback();
21
+ if (this.shadowRoot)
22
+ adoptStyles(this.shadowRoot, [tailwind]);
23
+ }
24
+ };
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-orange-50:oklch(98% .016 73.684);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-400:oklch(82.8% .189 84.429);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-sky-100:oklch(95.1% .026 236.824);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-900:oklch(20.8% .042 265.755);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--font-weight-semibold:600;--tracking-wide:.025em;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.top-12{top:calc(var(--spacing)*12)}.-right-1{right:calc(var(--spacing)*-1)}.right-6{right:calc(var(--spacing)*6)}.bottom-6{bottom:calc(var(--spacing)*6)}.left-0{left:calc(var(--spacing)*0)}.z-10{z-index:10}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-8{height:calc(var(--spacing)*8)}.h-11{height:calc(var(--spacing)*11)}.h-14{height:calc(var(--spacing)*14)}.h-\[480px\]{height:480px}.h-full{height:100%}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-8{width:calc(var(--spacing)*8)}.w-11{width:calc(var(--spacing)*11)}.w-14{width:calc(var(--spacing)*14)}.w-44{width:calc(var(--spacing)*44)}.w-60{width:calc(var(--spacing)*60)}.w-80{width:calc(var(--spacing)*80)}.w-full{width:100%}.flex-1{flex:1}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-grab{cursor:grab}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-900{border-color:var(--color-slate-900)}.border-white{border-color:var(--color-white)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-700{background-color:var(--color-red-700)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-200{background-color:var(--color-slate-200)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-900\/80{background-color:#0f172bcc}@supports (color:color-mix(in lab, red, red)){.bg-slate-900\/80{background-color:color-mix(in oklab,var(--color-slate-900)80%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-amber-100{--tw-gradient-from:var(--color-amber-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-orange-50{--tw-gradient-via:var(--color-orange-50);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-sky-100{--tw-gradient-to:var(--color-sky-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.text-center{text-align:center}.font-sans{font-family:var(--font-sans)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-emerald-700{color:var(--color-emerald-700)}.text-red-700{color:var(--color-red-700)}.text-slate-900{color:var(--color-slate-900)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.opacity-50{opacity:.5}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}}.voip-primary{color:#fff;background-image:linear-gradient(#ffffff2e,#ffffff0a),linear-gradient(#4c1d95,#2e1065),linear-gradient(#ffffff1f,#ffffff05),linear-gradient(#3b136a,#1f0b3a);box-shadow:0 1px 2px #00000059,inset 0 1px #ffffff14}.voip-primary:hover{box-shadow:0 1px 2px #00000059,inset 0 1px #ffffff14,0 4px 25px 1px #8b5cf666}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
@@ -0,0 +1 @@
1
+ export default "/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-orange-50:oklch(98% .016 73.684);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-400:oklch(82.8% .189 84.429);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-sky-100:oklch(95.1% .026 236.824);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-900:oklch(20.8% .042 265.755);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--font-weight-semibold:600;--tracking-wide:.025em;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.top-12{top:calc(var(--spacing)*12)}.-right-1{right:calc(var(--spacing)*-1)}.right-6{right:calc(var(--spacing)*6)}.bottom-6{bottom:calc(var(--spacing)*6)}.left-0{left:calc(var(--spacing)*0)}.z-10{z-index:10}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-8{height:calc(var(--spacing)*8)}.h-11{height:calc(var(--spacing)*11)}.h-14{height:calc(var(--spacing)*14)}.h-\\[480px\\]{height:480px}.h-full{height:100%}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-8{width:calc(var(--spacing)*8)}.w-11{width:calc(var(--spacing)*11)}.w-14{width:calc(var(--spacing)*14)}.w-44{width:calc(var(--spacing)*44)}.w-60{width:calc(var(--spacing)*60)}.w-80{width:calc(var(--spacing)*80)}.w-full{width:100%}.flex-1{flex:1}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-grab{cursor:grab}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-900{border-color:var(--color-slate-900)}.border-white{border-color:var(--color-white)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-700{background-color:var(--color-red-700)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-200{background-color:var(--color-slate-200)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-900\\/80{background-color:#0f172bcc}@supports (color:color-mix(in lab, red, red)){.bg-slate-900\\/80{background-color:color-mix(in oklab,var(--color-slate-900)80%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-amber-100{--tw-gradient-from:var(--color-amber-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-orange-50{--tw-gradient-via:var(--color-orange-50);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-sky-100{--tw-gradient-to:var(--color-sky-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.text-center{text-align:center}.font-sans{font-family:var(--font-sans)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[9px\\]{font-size:9px}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-emerald-700{color:var(--color-emerald-700)}.text-red-700{color:var(--color-red-700)}.text-slate-900{color:var(--color-slate-900)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.opacity-50{opacity:.5}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\\:bg-slate-100:hover{background-color:var(--color-slate-100)}}.voip-primary{color:#fff;background-image:linear-gradient(#ffffff2e,#ffffff0a),linear-gradient(#4c1d95,#2e1065),linear-gradient(#ffffff1f,#ffffff05),linear-gradient(#3b136a,#1f0b3a);box-shadow:0 1px 2px #00000059,inset 0 1px #ffffff14}.voip-primary:hover{box-shadow:0 1px 2px #00000059,inset 0 1px #ffffff14,0 4px 25px 1px #8b5cf666}}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:\"*\";inherits:false}@property --tw-gradient-from{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:\"*\";inherits:false}@property --tw-gradient-via-stops{syntax:\"*\";inherits:false}@property --tw-gradient-from-position{syntax:\"<length-percentage>\";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:\"<length-percentage>\";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:\"<length-percentage>\";inherits:false;initial-value:100%}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}";
package/package.json ADDED
@@ -0,0 +1,126 @@
1
+ {
2
+ "name": "@sippet-ai/operator-widget",
3
+ "version": "0.0.12",
4
+ "description": "Sippet AI's operator widget to enable telephony calling features in any web application.",
5
+ "main": "dist/index.js",
6
+ "type": "module",
7
+ "scripts": {
8
+ "analyze": "cem analyze",
9
+ "analyze:dev": "cem analyze --watch",
10
+ "clean:build": "npx rimraf dist react types public cdn custom-elements.json",
11
+ "clean": "git clean -fqdx",
12
+ "dev": "npm run build && concurrently -k -r \"npm run analyze:dev\" \"npm run build:watch\" \"npm run storybook\"",
13
+ "test": "web-test-runner --group default",
14
+ "prebuild": "npm run clean:build",
15
+ "build": "tsc -p tsconfig.build.json && node ./scripts/copy-dist-styles.mjs && npm run analyze && npm run build:kitchen-sink",
16
+ "build:cdn": "npx cross-env BUILD_TARGET=cdn vite build && npm run analyze",
17
+ "build:html": "npx cross-env BUILD_TARGET=html vite build",
18
+ "prebuild:react": "npm run clean:build && tsc -p tsconfig.build.json && npm run analyze",
19
+ "build:react": "node ./scripts/copy-dist-styles.mjs && npx cross-env BUILD_TARGET=react vite build && npx rimraf -rf ./public/react/html",
20
+ "build:kitchen-sink": "npx rimraf ./public && npm run build:cdn && npm run build:html && npm run build:react",
21
+ "build:watch": "concurrently -k -r \"tsc --watch\" \"npx cross-env BUILD_TARGET=cdn vite build --watch\" \"npx cross-env BUILD_TARGET=html vite build --watch\"",
22
+ "new": "plop",
23
+ "deploy": "npm run build && npm publish",
24
+ "format": "npm run format:eslint && npm run format:prettier",
25
+ "format:eslint": "npx eslint --fix",
26
+ "format:prettier": "npx prettier . --write",
27
+ "lint": "wctools validate && npm run lint:eslint && npm run lint:prettier",
28
+ "lint:eslint": "npx eslint",
29
+ "lint:prettier": "npx prettier . --check",
30
+ "prepare": "husky && npx playwright install-deps",
31
+ "storybook": "storybook dev -p 6006",
32
+ "build-storybook": "storybook build"
33
+ },
34
+ "author": "Sippet AI",
35
+ "license": "UNLICENSED",
36
+ "dependencies": {
37
+ "@sippet-ai/sdk-js": "workspace:*",
38
+ "code-bubble": "^1.3.3",
39
+ "lit": "^3.2.1",
40
+ "lucide": "^0.562.0",
41
+ "phoenix": "^1.7.18",
42
+ "sip.js": "^0.21.2",
43
+ "wc-dox": "^1.3.5"
44
+ },
45
+ "devDependencies": {
46
+ "@custom-elements-manifest/analyzer": "^0.11.0",
47
+ "@eslint/js": "^9.16.0",
48
+ "@eslint/json": "^0.8.0",
49
+ "@eslint/markdown": "^6.2.1",
50
+ "@open-wc/testing": "^4.0.0",
51
+ "@playwright/test": "^1.46.1",
52
+ "@storybook/addon-a11y": "^10.1.11",
53
+ "@storybook/addon-docs": "^10.1.11",
54
+ "@storybook/addon-links": "^10.1.11",
55
+ "@storybook/web-components": "^10.1.11",
56
+ "@storybook/web-components-vite": "^10.1.11",
57
+ "@tailwindcss/cli": "^4.1.18",
58
+ "@tailwindcss/vite": "^4.1.18",
59
+ "@types/mocha": "^10.0.2",
60
+ "@types/phoenix": "^1.6.7",
61
+ "@wc-toolkit/cem-inheritance": "^1.2.2",
62
+ "@wc-toolkit/cem-sorter": "^1.0.1",
63
+ "@wc-toolkit/cem-validator": "^1.0.3",
64
+ "@wc-toolkit/jsdoc-tags": "^1.1.0",
65
+ "@wc-toolkit/jsx-types": "^1.5.2",
66
+ "@wc-toolkit/lazy-loader": "^1.0.1",
67
+ "@wc-toolkit/module-path-resolver": "^1.0.0",
68
+ "@wc-toolkit/react-wrappers": "^1.1.1",
69
+ "@wc-toolkit/storybook-helpers": "^10.0.0",
70
+ "@wc-toolkit/type-parser": "^1.2.0",
71
+ "@wc-toolkit/wctools": "^0.0.18",
72
+ "@web/dev-server-esbuild": "^1.0.4",
73
+ "@web/test-runner": "^0.20.2",
74
+ "@web/test-runner-commands": "^0.9.0",
75
+ "@web/test-runner-playwright": "^0.11.1",
76
+ "concurrently": "^9.1.0",
77
+ "custom-element-svelte-integration": "^1.1.2",
78
+ "custom-element-vuejs-integration": "^1.3.3",
79
+ "custom-elements-manifest-deprecator": "^1.1.1",
80
+ "eslint": "^9.16.0",
81
+ "eslint-config-prettier": "^9.1.0",
82
+ "eslint-plugin-lit": "^1.15.0",
83
+ "eslint-plugin-lit-a11y": "^5.1.1",
84
+ "eslint-plugin-require-extensions": "^0.1.3",
85
+ "eslint-plugin-storybook": "^10.1.11",
86
+ "glob": "^11.0.0",
87
+ "globals": "^15.13.0",
88
+ "husky": "^9.0.11",
89
+ "lint-staged": "^15.2.7",
90
+ "plop": "^4.0.1",
91
+ "prettier": "^3.3.2",
92
+ "rollup-plugin-summary": "^3.0.0",
93
+ "storybook": "^10.1.11",
94
+ "tailwindcss": "^4.1.18",
95
+ "typescript": "^5.5.3",
96
+ "typescript-eslint": "^8.17.0",
97
+ "vite": "^7.3.0",
98
+ "vite-plugin-dts": "^4.5.4"
99
+ },
100
+ "lint-staged": {
101
+ "*.js": "eslint --cache --fix",
102
+ "*.format:prettier": "prettier --write"
103
+ },
104
+ "files": [
105
+ "cdn",
106
+ "eslint",
107
+ "dist",
108
+ "react",
109
+ "types",
110
+ "index.d.ts",
111
+ "index.js",
112
+ "package.json",
113
+ "custom-elements.json",
114
+ "vscode.css-custom-data.json",
115
+ "vscode.html-custom-data.json",
116
+ "web-types.json"
117
+ ],
118
+ "keywords": [
119
+ "web-components",
120
+ "custom-elements",
121
+ "lit-element",
122
+ "typescript",
123
+ "lit"
124
+ ],
125
+ "customElements": "custom-elements.json"
126
+ }