@dora-cell/sdk-react 1.0.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import React from 'react';
3
- import { DoraCellConfig, CallStatus, Call, ConnectionStatus, DoraCell } from '@dora-cell/sdk';
3
+ import { DoraCellConfig, DoraCell, CallStatus, Call, ConnectionStatus } from '@dora-cell/sdk';
4
4
 
5
5
  interface CallInterfaceProps {
6
6
  isOpen?: boolean;
@@ -54,6 +54,7 @@ declare function useDoraCell(): DoraCellContextValue;
54
54
  * Hook for making calls
55
55
  */
56
56
  declare function useCall(): {
57
+ sdk: DoraCell | null;
57
58
  call: (phoneNumber: string, extension?: string) => Promise<void>;
58
59
  hangup: () => void;
59
60
  toggleMute: () => void;
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import React from 'react';
3
- import { DoraCellConfig, CallStatus, Call, ConnectionStatus, DoraCell } from '@dora-cell/sdk';
3
+ import { DoraCellConfig, DoraCell, CallStatus, Call, ConnectionStatus } from '@dora-cell/sdk';
4
4
 
5
5
  interface CallInterfaceProps {
6
6
  isOpen?: boolean;
@@ -54,6 +54,7 @@ declare function useDoraCell(): DoraCellContextValue;
54
54
  * Hook for making calls
55
55
  */
56
56
  declare function useCall(): {
57
+ sdk: DoraCell | null;
57
58
  call: (phoneNumber: string, extension?: string) => Promise<void>;
58
59
  hangup: () => void;
59
60
  toggleMute: () => void;
package/dist/index.js CHANGED
@@ -189,6 +189,7 @@ function CallInterface({
189
189
  minimizeIcon
190
190
  }) {
191
191
  const {
192
+ sdk,
192
193
  callStatus,
193
194
  currentCall,
194
195
  callDuration,
@@ -208,13 +209,27 @@ function CallInterface({
208
209
  const remoteNumber = currentCall?.remoteNumber || "Unknown";
209
210
  const displayName = remoteNumber;
210
211
  react.useEffect(() => {
211
- if (currentCall && audioRef.current) {
212
- const stream = currentCall.getRemoteStream();
213
- if (stream && audioRef.current.srcObject !== stream) {
212
+ if (!currentCall || !sdk || !audioRef.current) return;
213
+ const updateStream = (stream) => {
214
+ if (audioRef.current && stream && audioRef.current.srcObject !== stream) {
214
215
  audioRef.current.srcObject = stream;
216
+ audioRef.current.play().catch((err) => {
217
+ console.warn("SDK UI: Auto-play failed, user interaction might be needed:", err);
218
+ });
215
219
  }
216
- }
217
- }, [currentCall, callStatus]);
220
+ };
221
+ const handleStream = (call, stream) => {
222
+ if (call.id === currentCall.id) {
223
+ updateStream(stream);
224
+ }
225
+ };
226
+ const initialStream = currentCall.getRemoteStream ? currentCall.getRemoteStream() : null;
227
+ if (initialStream) updateStream(initialStream);
228
+ sdk.on("call:stream", handleStream);
229
+ return () => {
230
+ sdk.off("call:stream", handleStream);
231
+ };
232
+ }, [currentCall, sdk, callStatus]);
218
233
  react.useEffect(() => {
219
234
  if (callStatus === "ringing" && isIncoming) {
220
235
  onOpenChange?.(true);
@@ -436,17 +451,22 @@ function Dialpad({
436
451
  const { extensions: fetchedExtensions, setExtension } = useExtensions();
437
452
  const [number, setNumber] = react.useState(initialNumber);
438
453
  const [keysVisible, setKeysVisible] = react.useState(showKeys);
439
- const [localSelectedExt, setLocalSelectedExt] = react.useState("");
454
+ const [localSelectedExt, setLocalSelectedExt] = react.useState(providedSelectedExtension || "");
440
455
  const extensions = providedExtensions?.length ? providedExtensions : fetchedExtensions.map((ext) => ({
441
456
  label: ext.extension,
442
457
  value: ext.extension
443
458
  }));
444
- const activeExtension = providedSelectedExtension || localSelectedExt || (extensions.length > 0 ? extensions[0].value : "");
445
459
  react.useEffect(() => {
446
- if (!localSelectedExt && extensions.length > 0 && !providedSelectedExtension) {
460
+ if (providedSelectedExtension && providedSelectedExtension !== localSelectedExt) {
461
+ setLocalSelectedExt(providedSelectedExtension);
462
+ }
463
+ }, [providedSelectedExtension]);
464
+ react.useEffect(() => {
465
+ if (!localSelectedExt && extensions.length > 0) {
447
466
  setLocalSelectedExt(extensions[0].value);
448
467
  }
449
- }, [extensions, providedSelectedExtension]);
468
+ }, [extensions, localSelectedExt]);
469
+ const activeExtension = localSelectedExt || (extensions.length > 0 ? extensions[0].value : "");
450
470
  const append = (digit) => setNumber((s) => s + digit);
451
471
  const backspace = () => setNumber((s) => s.slice(0, -1));
452
472
  const handleExtensionChange = async (ext) => {
@@ -460,7 +480,6 @@ function Dialpad({
460
480
  await call(number, activeExtension);
461
481
  onCallInitiated?.(number);
462
482
  } catch (e) {
463
- console.error("Call failed", e);
464
483
  }
465
484
  };
466
485
  const isCallDisabled = !number || number.trim() === "" || !isConnected || callStatus === "ringing" || callStatus === "ongoing" || callStatus === "connecting";
@@ -719,9 +738,9 @@ function DoraCellProvider({
719
738
  setIsMuted(true);
720
739
  }
721
740
  };
722
- const answerCall = () => {
741
+ const answerCall = async () => {
723
742
  try {
724
- sdk$1.answerCall();
743
+ await sdk$1.answerCall();
725
744
  } catch (err) {
726
745
  setError(err instanceof Error ? err : new Error("Failed to answer call"));
727
746
  }
@@ -751,8 +770,9 @@ function useDoraCell() {
751
770
  return context;
752
771
  }
753
772
  function useCall() {
754
- const { call, hangup, toggleMute, answerCall, callStatus, callDuration, isMuted, currentCall, error } = useDoraCell();
773
+ const { sdk, call, hangup, toggleMute, answerCall, callStatus, callDuration, isMuted, currentCall, error } = useDoraCell();
755
774
  return {
775
+ sdk,
756
776
  call,
757
777
  hangup,
758
778
  toggleMute,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/shared/src/utils.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/defaultAttributes.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/Icon.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/createLucideIcon.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/arrow-down-left.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/arrow-up-right.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/chevron-down.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/delete.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/maximize.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/mic-off.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/mic.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/minimize-2.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/phone.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/user.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/x.ts","../src/components/CallInterface.tsx","../src/components/Dialpad.tsx","../src/index.tsx"],"names":["forwardRef","createElement","__iconNode","useState","useRef","useEffect","jsxs","jsx","Fragment","createContext","sdk","DoraCell","call","extension","useContext"],"mappings":"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","file":"index.js","sourcesContent":["import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n\n/**\n * Is empty string\n *\n * @param {unknown} value\n * @returns {boolean} Whether the value is an empty string\n */\nexport const isEmptyString = (value: unknown): boolean => value === '';\n\n/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n};\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M17 7 7 17', key: '15tmo1' }],\n ['path', { d: 'M17 17H7V7', key: '1org7z' }],\n];\n\n/**\n * @component @name ArrowDownLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTcgNyA3IDE3IiAvPgogIDxwYXRoIGQ9Ik0xNyAxN0g3VjciIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/arrow-down-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowDownLeft = createLucideIcon('arrow-down-left', __iconNode);\n\nexport default ArrowDownLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M7 7h10v10', key: '1tivn9' }],\n ['path', { d: 'M7 17 17 7', key: '1vkiza' }],\n];\n\n/**\n * @component @name ArrowUpRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNyA3aDEwdjEwIiAvPgogIDxwYXRoIGQ9Ik03IDE3IDE3IDciIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/arrow-up-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowUpRight = createLucideIcon('arrow-up-right', __iconNode);\n\nexport default ArrowUpRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]];\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('chevron-down', __iconNode);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M10 5a2 2 0 0 0-1.344.519l-6.328 5.74a1 1 0 0 0 0 1.481l6.328 5.741A2 2 0 0 0 10 19h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2z',\n key: '1yo7s0',\n },\n ],\n ['path', { d: 'm12 9 6 6', key: 'anjzzh' }],\n ['path', { d: 'm18 9-6 6', key: '1fp51s' }],\n];\n\n/**\n * @component @name Delete\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgNWEyIDIgMCAwIDAtMS4zNDQuNTE5bC02LjMyOCA1Ljc0YTEgMSAwIDAgMCAwIDEuNDgxbDYuMzI4IDUuNzQxQTIgMiAwIDAgMCAxMCAxOWgxMGEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMnoiIC8+CiAgPHBhdGggZD0ibTEyIDkgNiA2IiAvPgogIDxwYXRoIGQ9Im0xOCA5LTYgNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/delete\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Delete = createLucideIcon('delete', __iconNode);\n\nexport default Delete;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M8 3H5a2 2 0 0 0-2 2v3', key: '1dcmit' }],\n ['path', { d: 'M21 8V5a2 2 0 0 0-2-2h-3', key: '1e4gt3' }],\n ['path', { d: 'M3 16v3a2 2 0 0 0 2 2h3', key: 'wsl5sc' }],\n ['path', { d: 'M16 21h3a2 2 0 0 0 2-2v-3', key: '18trek' }],\n];\n\n/**\n * @component @name Maximize\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAzSDVhMiAyIDAgMCAwLTIgMnYzIiAvPgogIDxwYXRoIGQ9Ik0yMSA4VjVhMiAyIDAgMCAwLTItMmgtMyIgLz4KICA8cGF0aCBkPSJNMyAxNnYzYTIgMiAwIDAgMCAyIDJoMyIgLz4KICA8cGF0aCBkPSJNMTYgMjFoM2EyIDIgMCAwIDAgMi0ydi0zIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/maximize\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Maximize = createLucideIcon('maximize', __iconNode);\n\nexport default Maximize;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 19v3', key: 'npa21l' }],\n ['path', { d: 'M15 9.34V5a3 3 0 0 0-5.68-1.33', key: '1gzdoj' }],\n ['path', { d: 'M16.95 16.95A7 7 0 0 1 5 12v-2', key: 'cqa7eg' }],\n ['path', { d: 'M18.89 13.23A7 7 0 0 0 19 12v-2', key: '16hl24' }],\n ['path', { d: 'm2 2 20 20', key: '1ooewy' }],\n ['path', { d: 'M9 9v3a3 3 0 0 0 5.12 2.12', key: 'r2i35w' }],\n];\n\n/**\n * @component @name MicOff\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTl2MyIgLz4KICA8cGF0aCBkPSJNMTUgOS4zNFY1YTMgMyAwIDAgMC01LjY4LTEuMzMiIC8+CiAgPHBhdGggZD0iTTE2Ljk1IDE2Ljk1QTcgNyAwIDAgMSA1IDEydi0yIiAvPgogIDxwYXRoIGQ9Ik0xOC44OSAxMy4yM0E3IDcgMCAwIDAgMTkgMTJ2LTIiIC8+CiAgPHBhdGggZD0ibTIgMiAyMCAyMCIgLz4KICA8cGF0aCBkPSJNOSA5djNhMyAzIDAgMCAwIDUuMTIgMi4xMiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/mic-off\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MicOff = createLucideIcon('mic-off', __iconNode);\n\nexport default MicOff;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 19v3', key: 'npa21l' }],\n ['path', { d: 'M19 10v2a7 7 0 0 1-14 0v-2', key: '1vc78b' }],\n ['rect', { x: '9', y: '2', width: '6', height: '13', rx: '3', key: 's6n7sd' }],\n];\n\n/**\n * @component @name Mic\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTl2MyIgLz4KICA8cGF0aCBkPSJNMTkgMTB2MmE3IDcgMCAwIDEtMTQgMHYtMiIgLz4KICA8cmVjdCB4PSI5IiB5PSIyIiB3aWR0aD0iNiIgaGVpZ2h0PSIxMyIgcng9IjMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/mic\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Mic = createLucideIcon('mic', __iconNode);\n\nexport default Mic;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm14 10 7-7', key: 'oa77jy' }],\n ['path', { d: 'M20 10h-6V4', key: 'mjg0md' }],\n ['path', { d: 'm3 21 7-7', key: 'tjx5ai' }],\n ['path', { d: 'M4 14h6v6', key: 'rmj7iw' }],\n];\n\n/**\n * @component @name Minimize2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTQgMTAgNy03IiAvPgogIDxwYXRoIGQ9Ik0yMCAxMGgtNlY0IiAvPgogIDxwYXRoIGQ9Im0zIDIxIDctNyIgLz4KICA8cGF0aCBkPSJNNCAxNGg2djYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/minimize-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Minimize2 = createLucideIcon('minimize-2', __iconNode);\n\nexport default Minimize2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384',\n key: '9njp5v',\n },\n ],\n];\n\n/**\n * @component @name Phone\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTMuODMyIDE2LjU2OGExIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgNi4zOTIgNi4zODQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/phone\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Phone = createLucideIcon('phone', __iconNode);\n\nexport default Phone;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2', key: '975kel' }],\n ['circle', { cx: '12', cy: '7', r: '4', key: '17ys0d' }],\n];\n\n/**\n * @component @name User\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTkgMjF2LTJhNCA0IDAgMCAwLTQtNEg5YTQgNCAwIDAgMC00IDR2MiIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjciIHI9IjQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/user\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst User = createLucideIcon('user', __iconNode);\n\nexport default User;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","'use client';\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useCall } from '../index';\nimport {\n Phone,\n Mic,\n MicOff,\n Maximize,\n Minimize2,\n ArrowUpRight,\n ArrowDownLeft,\n} from 'lucide-react';\n\ninterface CallInterfaceProps {\n isOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n onCallEnded?: () => void;\n maximizeIcon?: React.ReactNode;\n minimizeIcon?: React.ReactNode;\n}\n\nexport function CallInterface({\n isOpen = false,\n onOpenChange,\n onCallEnded,\n maximizeIcon,\n minimizeIcon,\n}: CallInterfaceProps) {\n const {\n callStatus,\n currentCall,\n callDuration,\n isMuted,\n hangup,\n answerCall,\n toggleMute,\n callError,\n } = useCall();\n\n const [isMinimized, setIsMinimized] = useState(false);\n const [wasConnected, setWasConnected] = useState(false);\n const [closeCountdown, setCloseCountdown] = useState<number | null>(null);\n const [connectingCountdown, setConnectingCountdown] = useState<number | null>(null);\n\n const audioRef = useRef<HTMLAudioElement | null>(null);\n const ringtoneRef = useRef<HTMLAudioElement | null>(null);\n\n const isIncoming = currentCall?.direction === 'inbound';\n const remoteNumber = currentCall?.remoteNumber || 'Unknown';\n const displayName = remoteNumber;\n\n // Attach remote stream to audio element\n useEffect(() => {\n if (currentCall && audioRef.current) {\n const stream = currentCall.getRemoteStream();\n if (stream && audioRef.current.srcObject !== stream) {\n audioRef.current.srcObject = stream;\n }\n }\n }, [currentCall, callStatus]);\n\n // Play ringtone for incoming calls\n useEffect(() => {\n if (callStatus === 'ringing' && isIncoming) {\n onOpenChange?.(true);\n ringtoneRef.current?.play().catch(() => { });\n } else {\n if (ringtoneRef.current) {\n ringtoneRef.current.pause();\n ringtoneRef.current.currentTime = 0;\n }\n }\n }, [callStatus, isIncoming, onOpenChange]);\n\n // Track connection state\n useEffect(() => {\n if (callStatus === 'connecting' || callStatus === 'ringing') {\n setWasConnected(false); // Reset on new call\n }\n if (callStatus === 'ongoing') {\n setWasConnected(true);\n }\n }, [callStatus]);\n\n // Handle call ended state and auto-close\n useEffect(() => {\n if (isOpen && callStatus === 'ended') {\n onCallEnded?.();\n const closeDelay = wasConnected ? 1500 : 3000;\n const start = Date.now();\n const iv = setInterval(() => {\n const remaining = Math.max(0, closeDelay - (Date.now() - start));\n setCloseCountdown(Math.ceil(remaining / 1000));\n\n if (remaining <= 0) {\n clearInterval(iv);\n onOpenChange?.(false);\n // Reset minimized state for the next call\n setIsMinimized(false);\n }\n }, 100);\n return () => clearInterval(iv);\n } else {\n setCloseCountdown(null);\n }\n }, [callStatus, isOpen, onOpenChange, wasConnected, onCallEnded]);\n\n // 60-second connection timeout for outbound calls\n useEffect(() => {\n let iv: ReturnType<typeof setInterval>;\n if (isOpen && callStatus === 'connecting' && !isIncoming) {\n setConnectingCountdown(60);\n iv = setInterval(() => {\n setConnectingCountdown((prev) => {\n if (prev === null || prev <= 0) {\n clearInterval(iv);\n if (callStatus === 'connecting') hangup();\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n } else {\n setConnectingCountdown(null);\n }\n return () => clearInterval(iv);\n }, [callStatus, isOpen, isIncoming, hangup]);\n\n if (!isOpen && callStatus === 'idle') return null;\n\n return (\n <div\n role=\"dialog\"\n aria-label=\"Call interface\"\n className={`dora-fixed dora-top-14 md:dora-top-16 dora-right-0 md:dora-right-4 dora-z-50 dora-transform dora-transition-all dora-duration-300 dora-ease-in-out dora-bg-[#1E1E1E] dora-shadow-xl ${isOpen ? 'dora-translate-x-0' : 'dora-translate-x-[110%]'\n } ${isMinimized\n ? 'dora-w-48 dora-h-20 dora-rounded-2xl dora-p-4 dora-flex dora-items-center dora-justify-between'\n : 'dora-w-full sm:dora-w-96 md:dora-max-w-sm max-h-[calc(100vh-3.5rem)] md:dora-max-h-[calc(100vh-4rem)] dora-rounded-none md:dora-rounded-2xl'\n }`}\n >\n <audio ref={audioRef} autoPlay className=\"dora-hidden\" />\n <audio\n ref={ringtoneRef}\n src=\"https://assets.mixkit.co/active_storage/sfx/2358/2358-preview.mp3\"\n loop\n preload=\"auto\"\n className=\"dora-hidden\"\n />\n\n {isMinimized ? (\n <div className=\"dora-flex dora-items-center dora-justify-between dora-w-full dora-h-full\">\n <button\n onClick={() => setIsMinimized(false)}\n className=\"dora-w-10 dora-h-10 dora-rounded-full dora-bg-[#2A2A2A] dora-flex dora-items-center dora-justify-center dora-text-slate-400 hover:dora-text-white dora-transition-colors\"\n aria-label=\"Maximize\"\n >\n {maximizeIcon || <Maximize size={18} />}\n </button>\n <div className=\"dora-relative dora-flex dora-items-center\">\n <div className=\"dora-w-11 dora-h-11 dora-rounded-full dora-bg-white dora-flex dora-items-center dora-justify-center dora--mr-3\">\n <span className=\"dora-text-xl dora-text-slate-900 dora-font-bold\">\n {displayName.charAt(0).toUpperCase()}\n </span>\n </div>\n <button\n onClick={hangup}\n className=\"dora-w-11 dora-h-11 dora-rounded-full dora-bg-red-500 dora-text-white dora-flex dora-items-center dora-justify-center dora-shadow-lg hover:dora-bg-red-600 dora-transition-colors dora-z-10\"\n aria-label=\"End call\"\n >\n <Phone size={18} className=\"dora-transform dora-rotate-[135deg]\" />\n </button>\n </div>\n </div>\n ) : (\n <div className=\"dora-flex dora-flex-col dora-py-4 md:dora-py-6 dora-gap-2.5 md:dora-gap-3.5 dora-px-3 md:dora-px-5 dora-relative\">\n <button\n onClick={() => setIsMinimized(true)}\n className=\"dora-absolute dora-top-2 dora-right-2 dora-text-slate-500 hover:dora-text-white dora-transition-colors\"\n aria-label=\"Minimize\"\n >\n {minimizeIcon || <Minimize2 size={16} />}\n </button>\n\n <div className=\"dora-flex dora-justify-between dora-gap-2 dora-items-start md:dora-items-center\">\n <div className=\"dora-flex dora-items-center dora-gap-2.5 md:dora-gap-4 dora-min-w-0\">\n <div className=\"dora-w-9 md:dora-w-11 dora-h-9 md:dora-h-11 dora-rounded-full dora-bg-white dora-flex dora-items-center dora-justify-center dora-shrink-0\">\n <span className=\"dora-text-lg md:dora-text-2xl dora-text-slate-900 dora-font-bold\">\n {displayName.charAt(0).toUpperCase()}\n </span>\n </div>\n <div className=\"dora-min-w-0 dora-flex-1\">\n <h2 className=\"dora-text-base md:dora-text-xl dora-font-normal dora-text-white dora-truncate\">\n {isIncoming ? displayName : (displayName === 'Unknown' ? 'Outgoing Call' : displayName)}\n </h2>\n <p className=\"dora-text-slate-400 dora-text-xs md:dora-text-sm dora-truncate\">\n {remoteNumber} &bull;{' '}\n {isMuted ? (\n <span className=\"dora-text-[#F99578]\">Call muted</span>\n ) : (\n <>\n {(callStatus === 'connecting' || callStatus === 'ringing') && (\n <span>\n {isIncoming ? 'Incoming Call...' : callStatus === 'connecting' ? 'Connecting...' : 'Ringing...'}\n </span>\n )}\n {callStatus === 'ongoing' && <span>On Call</span>}\n {callStatus === 'ended' && <span>Call Ended</span>}\n </>\n )}\n </p>\n </div>\n </div>\n\n <div className=\"dora-flex dora-items-center dora-justify-center dora-gap-1.5 md:dora-gap-3 dora-shrink-0\">\n {isIncoming && callStatus === 'ringing' && (\n <button\n onClick={answerCall}\n className=\"dora-rounded-full dora-bg-green-500 dora-text-white hover:dora-bg-green-600 dora-transition-colors dora-w-8 md:dora-w-9 dora-h-8 md:dora-h-9 dora-flex dora-items-center dora-justify-center dora-shrink-0\"\n aria-label=\"Answer\"\n >\n <Phone size={18} />\n </button>\n )}\n\n {(callStatus === 'ongoing' || (isIncoming && callStatus === 'ringing')) && (\n <button\n onClick={toggleMute}\n className={`dora-rounded-full dora-transition-colors dora-w-8 md:dora-w-9 dora-h-8 md:dora-h-9 dora-flex dora-items-center dora-justify-center dora-shrink-0 ${isMuted ? 'dora-bg-slate-700 hover:dora-bg-slate-600 dora-text-white' : 'dora-bg-[#2A2A2A] hover:dora-bg-[#333333] dora-text-slate-400'\n }`}\n aria-label=\"Toggle mute\"\n >\n {isMuted ? <MicOff size={18} /> : <Mic size={18} />}\n </button>\n )}\n\n <button\n onClick={hangup}\n className=\"dora-rounded-full dora-bg-red-600 dora-text-white hover:dora-bg-red-700 dora-transition-colors dora-w-8 md:dora-w-9 dora-h-8 md:dora-h-9 dora-flex dora-items-center dora-justify-center dora-shrink-0\"\n aria-label={isIncoming && callStatus === 'ringing' ? 'Decline' : 'End call'}\n >\n <Phone size={18} className=\"dora-transform dora-rotate-[135deg]\" />\n </button>\n </div>\n </div>\n\n <div className=\"dora-flex-1 dora-border-t dora-border-[#282828] dora-mt-2 dora-mb-2\" />\n\n {callError && callStatus === 'ended' && (\n <div className=\"dora-bg-red-900/20 dora-border dora-border-red-500/30 dora-rounded-lg dora-p-2 md:dora-p-3 dora-mb-2 md:dora-mb-3\">\n <p className=\"dora-text-red-400 dora-text-xs md:dora-text-sm dora-font-medium\">\n Call Failed\n </p>\n <p className=\"dora-text-red-300 dora-text-xs dora-mt-0.5 md:dora-mt-1\">\n {callError}\n </p>\n {closeCountdown !== null && (\n <div className=\"dora-mt-1.5 md:dora-mt-2\">\n <div className=\"dora-w-full dora-bg-red-900/30 dora-rounded-full dora-h-1.5 dora-overflow-hidden\">\n <div\n className=\"dora-bg-red-500 dora-h-full dora-transition-all dora-duration-100\"\n style={{\n width: `${Math.max(\n 0,\n (closeCountdown / (wasConnected ? 1 : 5)) * 100,\n )}%`,\n }}\n />\n </div>\n <p className=\"dora-text-xs dora-text-red-300 dora-mt-0.5 md:dora-mt-1 dora-text-center\">\n Closing in {closeCountdown}s\n </p>\n </div>\n )}\n </div>\n )}\n\n <div className=\"dora-flex dora-justify-between dora-items-center\">\n <div className=\"dora-text-slate-400 dora-text-xs md:dora-text-sm dora-font-light dora-tracking-wide dora-flex dora-items-center dora-gap-1\">\n {(callStatus === 'connecting' || callStatus === 'ringing') && (\n <span>{isIncoming ? 'Incoming call' : 'Outgoing call'}</span>\n )}\n {callStatus === 'ongoing' && <span>Ongoing</span>}\n {callStatus === 'ended' && <span>Call ended</span>}\n {(callStatus === 'connecting' || callStatus === 'ringing' || callStatus === 'ongoing') && (\n isIncoming\n ? <ArrowDownLeft className=\"dora-inline-block dora-ml-1 dora-text-green-400\" size={16} />\n : <ArrowUpRight className=\"dora-inline-block dora-ml-1 dora-text-blue-400\" size={16} />\n )}\n </div>\n\n {callStatus === 'ongoing' && (\n <div className=\"dora-bg-[#272727] dora-h-6 md:dora-h-7 dora-rounded-full dora-px-3 md:dora-px-4 dora-text-white dora-font-normal dora-text-xs md:dora-text-sm dora-flex dora-items-center dora-justify-center\">\n <span>{callDuration}</span>\n </div>\n )}\n\n {callStatus === 'ended' && closeCountdown !== null && (\n <div className=\"dora-bg-[#272727] dora-h-6 md:dora-h-7 dora-rounded-full dora-px-3 md:dora-px-4 dora-text-slate-400 dora-font-normal dora-text-xs dora-flex dora-items-center dora-justify-center dora-gap-1\">\n <span>Closing in {closeCountdown}s</span>\n </div>\n )}\n\n {(connectingCountdown !== null || callStatus === 'ringing') && !isIncoming && callStatus !== 'ongoing' && callStatus !== 'ended' && (\n <div className=\"dora-bg-[#272727] dora-h-8 dora-rounded-full dora-px-3 md:dora-px-4 dora-text-white dora-font-normal dora-text-xs md:dora-text-sm dora-flex dora-items-center dora-justify-center dora-gap-2\">\n <span className=\"dora-text-[#F99578] dora-whitespace-nowrap\">\n {callStatus === 'ringing' ? 'Ringing...' : 'Connecting...'}\n </span>\n {callStatus === 'connecting' && connectingCountdown && (\n <span className=\"dora-font-mono dora-ml-1 dora-text-slate-400\">\n {Math.floor(connectingCountdown / 60)}:{String(connectingCountdown % 60).padStart(2, '0')}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useEffect } from \"react\";\nimport {\n useCall,\n useConnectionStatus,\n useExtensions,\n CreditBalance,\n} from \"../index\";\nimport { Phone, Delete, X, User, ChevronDown } from \"lucide-react\";\n\ninterface DialpadProps {\n onCallInitiated?: (number: string) => void;\n initialNumber?: string;\n showKeys?: boolean;\n className?: string;\n availableExtensions?: Array<{ label: string; value: string }>;\n selectedExtension?: string;\n onExtensionChange?: (ext: string) => void;\n}\n\nexport function Dialpad({\n onCallInitiated,\n initialNumber = \"\",\n showKeys = true,\n className = \"\",\n availableExtensions: providedExtensions,\n selectedExtension: providedSelectedExtension,\n onExtensionChange,\n}: DialpadProps) {\n const { call, callStatus } = useCall();\n const { isConnected } = useConnectionStatus();\n const { extensions: fetchedExtensions, setExtension } = useExtensions();\n\n const [number, setNumber] = useState(initialNumber);\n const [keysVisible, setKeysVisible] = useState(showKeys);\n const [localSelectedExt, setLocalSelectedExt] = useState(\"\");\n\n const extensions = providedExtensions?.length\n ? providedExtensions\n : fetchedExtensions.map((ext) => ({\n label: ext.extension,\n value: ext.extension,\n }));\n\n const activeExtension =\n providedSelectedExtension ||\n localSelectedExt ||\n (extensions.length > 0 ? extensions[0].value : \"\");\n\n // Auto-initialize local extension selection\n useEffect(() => {\n if (\n !localSelectedExt &&\n extensions.length > 0 &&\n !providedSelectedExtension\n ) {\n setLocalSelectedExt(extensions[0].value);\n }\n }, [extensions, providedSelectedExtension]);\n\n const append = (digit: string) => setNumber((s) => s + digit);\n const backspace = () => setNumber((s) => s.slice(0, -1));\n\n const handleExtensionChange = async (ext: string) => {\n setLocalSelectedExt(ext);\n onExtensionChange?.(ext);\n // Re-initialize SIP with new extension\n await setExtension(ext);\n };\n\n const handleCall = async () => {\n if (!number || number.trim() === \"\") return;\n try {\n await call(number, activeExtension);\n onCallInitiated?.(number);\n } catch (e) {\n console.error(\"Call failed\", e);\n }\n };\n\n const isCallDisabled =\n !number ||\n number.trim() === \"\" ||\n !isConnected ||\n callStatus === \"ringing\" ||\n callStatus === \"ongoing\" ||\n callStatus === \"connecting\";\n\n const keypad_icon = (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.5333 3.2006C11.5339 3.50413 11.4444 3.801 11.2759 4.05352C11.1075 4.30605 10.8679 4.50284 10.5874 4.61891C10.3069 4.73499 9.99832 4.76512 9.70071 4.70548C9.40309 4.64584 9.12991 4.49911 8.91583 4.28393C8.77351 4.14156 8.66063 3.97254 8.58363 3.78654C8.50662 3.60054 8.46701 3.4012 8.46705 3.19989C8.46709 2.99858 8.50678 2.79925 8.58385 2.61328C8.66093 2.4273 8.77387 2.25834 8.91625 2.11602C9.05862 1.9737 9.22764 1.86081 9.41364 1.78381C9.59964 1.70681 9.79898 1.6672 10.0003 1.66723C10.2016 1.66727 10.4009 1.70696 10.5869 1.78404C10.7729 1.86111 10.9418 1.97406 11.0842 2.11643C11.3717 2.40393 11.5342 2.7931 11.5342 3.19977M14.5333 4.73227C14.7376 4.73703 14.9408 4.7009 15.131 4.62601C15.3211 4.55111 15.4944 4.43896 15.6406 4.29614C15.7868 4.15333 15.9029 3.98273 15.9822 3.79438C16.0616 3.60602 16.1024 3.40372 16.1024 3.19935C16.1024 2.99498 16.0616 2.79267 15.9822 2.60432C15.9029 2.41597 15.7868 2.24537 15.6406 2.10255C15.4944 1.95974 15.3211 1.84759 15.131 1.77269C14.9408 1.6978 14.7376 1.66167 14.5333 1.66643C14.1267 1.66643 13.7367 1.82798 13.4491 2.11554C13.1615 2.40309 13 2.7931 13 3.19977C13 3.60643 13.1615 3.99644 13.4491 4.284C13.7367 4.57155 14.1267 4.73227 14.5333 4.73227ZM7 3.2006C7.00061 3.50413 6.91102 3.801 6.7426 4.05352C6.57419 4.30605 6.33454 4.50284 6.05408 4.61891C5.77362 4.73499 5.46499 4.76512 5.16737 4.70548C4.86976 4.64584 4.59657 4.49911 4.3825 4.28393C4.24018 4.14161 4.12728 3.97265 4.05026 3.7867C3.97324 3.60075 3.93359 3.40145 3.93359 3.20018C3.93359 2.99891 3.97324 2.79961 4.05026 2.61366C4.12728 2.42771 4.24018 2.25875 4.3825 2.11643C4.52482 1.97411 4.69378 1.86122 4.87973 1.78419C5.06568 1.70717 5.26498 1.66753 5.46625 1.66753C5.66752 1.66753 5.86682 1.70717 6.05277 1.78419C6.23872 1.86122 6.40768 1.97411 6.55 2.11643C6.8375 2.40393 6.99917 2.7931 6.99917 3.19977M11.5333 7.7306C11.5352 7.93448 11.4964 8.1367 11.4192 8.32539C11.342 8.51409 11.2279 8.68548 11.0836 8.82952C10.9392 8.97357 10.7677 9.08737 10.5788 9.16426C10.39 9.24114 10.1877 9.27958 9.98381 9.2773C9.77993 9.27503 9.57856 9.2321 9.39148 9.15102C9.2044 9.06994 9.03538 8.95234 8.89433 8.80511C8.75327 8.65789 8.64301 8.484 8.57 8.29362C8.497 8.10325 8.46272 7.90022 8.46917 7.69643C8.48185 7.29562 8.65113 6.91575 8.94068 6.63833C9.23024 6.3609 9.617 6.20802 10.018 6.21249C10.419 6.21697 10.8022 6.37843 11.0855 6.66224C11.3688 6.94606 11.5296 7.32961 11.5333 7.7306ZM14.5333 9.2631C14.7376 9.26786 14.9408 9.23174 15.131 9.15684C15.3211 9.08194 15.4944 8.96979 15.6406 8.82698C15.7868 8.68416 15.9029 8.51356 15.9822 8.32521C16.0616 8.13686 16.1024 7.93455 16.1024 7.73018C16.1024 7.52581 16.0616 7.32351 15.9822 7.13515C15.9029 6.9468 15.7868 6.7762 15.6406 6.63339C15.4944 6.49057 15.3211 6.37842 15.131 6.30352C14.9408 6.22863 14.7376 6.1925 14.5333 6.19727C14.1267 6.19727 13.7367 6.35881 13.4491 6.64637C13.1615 6.93392 13 7.32393 13 7.7306C13 8.13726 13.1615 8.52727 13.4491 8.81483C13.7367 9.10239 14.1267 9.26393 14.5333 9.26393M7 7.7306C7.00021 8.03395 6.91038 8.33054 6.7419 8.58281C6.57341 8.83507 6.33385 9.03165 6.05356 9.14766C5.77326 9.26367 5.46485 9.29389 5.16737 9.23448C4.86989 9.17506 4.59673 9.0287 4.3825 8.81393C4.20461 8.63559 4.07342 8.41615 4.00054 8.17503C3.92766 7.93391 3.91534 7.67854 3.96468 7.43152C4.01401 7.1845 4.12347 6.95345 4.28337 6.75882C4.44328 6.56419 4.64869 6.41197 4.88144 6.31564C5.11419 6.21931 5.36709 6.18184 5.61777 6.20654C5.86845 6.23124 6.10918 6.31735 6.31865 6.45725C6.52812 6.59716 6.69988 6.78654 6.81872 7.00864C6.93756 7.23073 6.99982 7.4787 7 7.7306ZM11.5333 12.2623C11.5348 12.4893 11.4857 12.7138 11.3897 12.9196C11.2937 13.1253 11.1532 13.3071 10.9783 13.4519C10.8034 13.5967 10.5985 13.7007 10.3784 13.7566C10.1583 13.8124 9.9286 13.8186 9.70583 13.7748C9.42088 13.7191 9.1576 13.5836 8.94662 13.3841C8.73564 13.1847 8.58563 12.9294 8.51403 12.648C8.44244 12.3666 8.4522 12.0707 8.5422 11.7947C8.63219 11.5186 8.79871 11.2738 9.02238 11.0887C9.24606 10.9036 9.51769 10.7857 9.8057 10.7489C10.0937 10.7122 10.3862 10.7579 10.6493 10.8808C10.9123 11.0038 11.135 11.1989 11.2915 11.4434C11.448 11.688 11.5319 11.9719 11.5333 12.2623ZM11.5333 16.8006C11.5337 17.0274 11.4836 17.2515 11.3868 17.4567C11.29 17.6618 11.1488 17.8429 10.9735 17.9868C10.7981 18.1308 10.593 18.2339 10.3729 18.2889C10.1528 18.3439 9.92326 18.3493 9.70083 18.3048C9.40375 18.2453 9.13093 18.0992 8.91681 17.8849C8.70269 17.6705 8.55688 17.3975 8.49777 17.1004C8.43866 16.8032 8.46891 16.4952 8.58469 16.2152C8.70048 15.9353 8.89661 15.6959 9.14833 15.5273C9.37915 15.3731 9.64749 15.2845 9.92473 15.2708C10.202 15.2572 10.4777 15.3191 10.7225 15.4499C10.9673 15.5807 11.1721 15.7755 11.3149 16.0135C11.4577 16.2515 11.5332 16.523 11.5333 16.8006ZM16.0667 12.2623C16.0681 12.4893 16.019 12.7138 15.923 12.9196C15.827 13.1253 15.6865 13.3071 15.5116 13.4519C15.3367 13.5967 15.1318 13.7007 14.9117 13.7566C14.6917 13.8124 14.4619 13.8186 14.2392 13.7748C14.0165 13.7312 13.8062 13.6388 13.6236 13.5041C13.4409 13.3695 13.2904 13.1959 13.183 12.9961C13.0755 12.7962 13.0137 12.575 13.0021 12.3484C12.9905 12.1218 13.0294 11.8954 13.1158 11.6856C13.2509 11.3581 13.4952 11.0875 13.8072 10.9197C14.1193 10.7519 14.4797 10.6974 14.8274 10.7653C15.1751 10.8333 15.4886 11.0195 15.7145 11.2924C15.9404 11.5653 16.0648 11.908 16.0667 12.2623ZM7 12.2623C7.00227 12.5661 6.91412 12.8638 6.74675 13.1174C6.57939 13.371 6.34039 13.5691 6.06013 13.6864C5.77987 13.8038 5.47104 13.8352 5.1729 13.7766C4.87476 13.718 4.60079 13.572 4.38583 13.3573C4.20705 13.1796 4.07483 12.9606 4.00086 12.7196C3.9269 12.4787 3.91347 12.2232 3.96176 11.9759C4.01006 11.7285 4.11859 11.4968 4.27776 11.3014C4.43692 11.106 4.64181 10.9528 4.87428 10.8554C5.10676 10.758 5.35966 10.7194 5.61059 10.7431C5.86153 10.7668 6.10276 10.8519 6.31294 10.991C6.52313 11.1301 6.69578 11.3189 6.81561 11.5406C6.93545 11.7624 6.99878 12.0102 7 12.2623Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n\n return (\n <div className={`dora-bg-white dora-rounded-3xl ${className} dora-font-sans dora-relative dora-z-10`}>\n {/* Header with Logo and Credit Balance */}\n <div className=\"dora-flex dora-items-center dora-justify-between dora-mb-6\">\n <div className=\"dora-bg-emerald-500 dora-text-white dora-px-3 dora-py-1.5 dora-rounded-lg dora-text-xs md:dora-text-sm dora-font-semibold dora-shadow-sm\">\n Dora-cell\n </div>\n <CreditBalance />\n </div>\n\n {/* Main Content Area */}\n <div className=\"dora-bg-zinc-50 dora-p-6 dora-rounded-3xl dora-border dora-border-zinc-100 dora-shadow-inner\">\n {/* Caller ID Section */}\n <div className=\"dora-flex dora-items-center dora-justify-between dora-mb-5\">\n <span className=\"dora-text-zinc-500 dora-font-medium dora-text-sm dora-tracking-tight\">\n Caller ID\n </span>\n <div className=\"dora-relative\">\n <select\n disabled={extensions.length === 0}\n className=\"dora-appearance-none dora-bg-white dora-border dora-border-zinc-200 dora-rounded-xl dora-px-4 dora-py-2 dora-text-sm dora-font-semibold dora-text-zinc-900 dora-min-w-[170px] dora-pr-10 dora-outline-none focus:dora-border-emerald-500 dora-transition-all dora-shadow-sm disabled:dora-opacity-50\"\n value={activeExtension}\n onChange={(e) => handleExtensionChange(e.target.value)}\n >\n {extensions.length > 0 ? (\n extensions.map((ext) => (\n <option key={ext.value} value={ext.value}>\n {ext.label}\n </option>\n ))\n ) : (\n <option>Loading...</option>\n )}\n </select>\n <ChevronDown\n size={18}\n className=\"dora-absolute dora-right-4 dora-top-1/2 dora-transform dora--translate-y-1/2 dora-text-zinc-500 dora-pointer-events-none\"\n />\n </div>\n </div>\n\n {/* Input and Call Button */}\n <div className=\"dora-flex dora-items-center dora-gap-3 dora-mb-6\">\n <div className=\"dora-flex-1 dora-bg-white dora-border dora-border-zinc-200 dora-rounded-xl dora-flex dora-items-center dora-px-4 dora-h-12 dora-shadow-sm focus-within:dora-border-emerald-500 dora-transition-all\">\n <User size={18} className=\"dora-text-zinc-300 dora-mr-2\" />\n <input\n type=\"tel\"\n placeholder=\"Enter number\"\n value={number}\n onChange={(e) => setNumber(e.target.value)}\n className=\"dora-bg-transparent dora-border-none dora-outline-none dora-w-full dora-text-base dora-text-zinc-900 dora-font-medium dora-placeholder-zinc-300\"\n />\n </div>\n <button\n disabled={isCallDisabled}\n onClick={handleCall}\n className=\"dora-bg-emerald-500 dora-text-white dora-w-12 dora-h-12 dora-rounded-xl dora-flex dora-items-center dora-justify-center dora-shadow-lg dora-shadow-emerald-500/20 hover:dora-bg-emerald-600 active:dora-scale-95 dora-transition-all disabled:dora-opacity-50\"\n >\n <Phone size={20} fill=\"white\" className=\"dora-text-white\" />\n </button>\n </div>\n\n {/* Keypad and Controls */}\n <div className=\"dora-space-y-5\">\n {keysVisible ? (\n <div>\n <div className=\"dora-flex dora-mb-5\">\n <button\n onClick={() => setKeysVisible(false)}\n className=\"dora-flex dora-items-center dora-gap-2 dora-px-4 dora-py-2 dora-bg-white dora-border dora-border-zinc-200 dora-rounded-full dora-text-xs dora-font-semibold dora-text-zinc-600 hover:dora-bg-zinc-50 dora-transition-colors dora-shadow-sm active:dora-scale-95\"\n >\n <X size={16} className=\"dora-text-red-500\" />\n Close\n </button>\n </div>\n \n <div className=\"dora-grid dora-grid-cols-3 dora-gap-4\">\n {[\n \"1\", \"2\", \"3\",\n \"4\", \"5\", \"6\",\n \"7\", \"8\", \"9\",\n \"+\", \"0\", \"del\",\n ].map((d) => (\n <button\n key={d}\n onClick={() => (d === \"del\" ? backspace() : append(d))}\n className=\"dora-h-12 dora-bg-white dora-rounded-xl dora-flex dora-items-center dora-justify-center dora-text-lg dora-font-semibold dora-text-zinc-900 dora-shadow-sm border dora-border-zinc-50 hover:dora-bg-zinc-50 active:dora-scale-95 dora-transition-all\"\n >\n {d === \"del\" ? <Delete size={18} className=\"dora-text-zinc-500\" /> : d}\n </button>\n ))}\n </div>\n </div>\n ) : (\n <div className=\"dora-flex dora-justify-center\">\n <button\n onClick={() => setKeysVisible(true)}\n className=\"dora-flex dora-items-center dora-gap-2 dora-px-4 dora-py-2 dora-bg-white dora-border dora-border-zinc-200 dora-rounded-full dora-text-xs dora-font-semibold dora-text-zinc-500 hover:dora-bg-zinc-50 dora-transition-all active:dora-scale-95 dora-shadow-sm\"\n >\n <span className=\"dora-transform dora-scale-90\">{keypad_icon}</span>\n Open dialer\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n","/**\n * React bindings for Dora Cell SDK\n * Provides React Context and hooks for easy integration\n */\n\n'use client';\n\nimport React, { createContext, useContext, useEffect, useState, useRef } from 'react';\nimport { DoraCell } from '@dora-cell/sdk';\nimport type {\n DoraCellConfig,\n Call,\n CallStatus,\n ConnectionStatus,\n ConnectionState,\n} from '@dora-cell/sdk';\n\ninterface DoraCellContextValue {\n sdk: DoraCell | null;\n connectionStatus: ConnectionStatus;\n currentCall: Call | null;\n callStatus: CallStatus;\n callDuration: string;\n isMuted: boolean;\n isInitialized: boolean;\n error: Error | null;\n extension: string | null;\n\n // Methods\n call: (phoneNumber: string, extension?: string) => Promise<void>;\n hangup: () => void;\n toggleMute: () => void;\n answerCall: () => void;\n}\n\nconst DoraCellContext = createContext<DoraCellContextValue | undefined>(undefined);\n\nexport interface DoraCellProviderProps {\n config: DoraCellConfig;\n children: React.ReactNode;\n autoInitialize?: boolean;\n}\n\nexport function DoraCellProvider({\n config,\n children,\n autoInitialize = true,\n}: DoraCellProviderProps) {\n const [sdk] = useState(() => new DoraCell(config));\n const [isInitialized, setIsInitialized] = useState(false);\n const [connectionStatus, setConnectionStatus] = useState<ConnectionStatus>('disconnected');\n const [currentCall, setCurrentCall] = useState<Call | null>(null);\n const [callStatus, setCallStatus] = useState<CallStatus>('idle');\n const [callDuration, setCallDuration] = useState('00:00');\n const [isMuted, setIsMuted] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [extension, setExtension] = useState<string | null>(null);\n\n const durationIntervalRef = useRef<number | null>(null);\n\n // Initialize SDK\n useEffect(() => {\n if (!autoInitialize) return;\n\n const initializeSdk = async () => {\n try {\n await sdk.initialize();\n setIsInitialized(true);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to initialize SDK'));\n }\n };\n\n initializeSdk();\n\n return () => {\n sdk.destroy();\n };\n }, [sdk, autoInitialize]);\n\n // Set up event listeners\n useEffect(() => {\n if (!sdk) return;\n\n const handleConnectionStatus = (state: ConnectionState) => {\n setConnectionStatus(state.status);\n if (state.extension) {\n setExtension(state.extension);\n }\n if (state.error) {\n setError(new Error(state.error));\n }\n };\n\n const handleIncomingCall = (call: Call) => {\n setCurrentCall(call);\n setCallStatus('ringing');\n };\n\n const handleOutgoingCall = (call: Call) => {\n setCurrentCall(call);\n setCallStatus('connecting');\n };\n\n const handleCallRinging = (call: Call) => {\n setCallStatus('ringing');\n };\n\n const handleCallConnected = (call: Call) => {\n setCallStatus('ongoing');\n };\n\n const handleCallEnded = (call: Call) => {\n setCallStatus('ended');\n setCurrentCall(null);\n setIsMuted(false);\n\n // Reset to idle after a delay\n setTimeout(() => {\n setCallStatus('idle');\n }, 3000);\n };\n\n const handleCallFailed = (call: Call, errorMsg: string) => {\n setError(new Error(errorMsg));\n setCallStatus('ended');\n setCurrentCall(null);\n };\n\n const handleError = (err: Error) => {\n setError(err);\n };\n\n sdk.on('connection:status', handleConnectionStatus);\n sdk.on('call:incoming', handleIncomingCall);\n sdk.on('call:outgoing', handleOutgoingCall);\n sdk.on('call:ringing', handleCallRinging);\n sdk.on('call:connected', handleCallConnected);\n sdk.on('call:ended', handleCallEnded);\n sdk.on('call:failed', handleCallFailed);\n sdk.on('error', handleError);\n\n return () => {\n sdk.off('connection:status', handleConnectionStatus);\n sdk.off('call:incoming', handleIncomingCall);\n sdk.off('call:outgoing', handleOutgoingCall);\n sdk.off('call:ringing', handleCallRinging);\n sdk.off('call:connected', handleCallConnected);\n sdk.off('call:ended', handleCallEnded);\n sdk.off('call:failed', handleCallFailed);\n sdk.off('error', handleError);\n };\n }, [sdk]);\n\n // Update call duration\n useEffect(() => {\n if (callStatus === 'ongoing' && currentCall) {\n durationIntervalRef.current = window.setInterval(() => {\n const duration = currentCall.duration;\n const mm = String(Math.floor(duration / 60)).padStart(2, '0');\n const ss = String(duration % 60).padStart(2, '0');\n setCallDuration(`${mm}:${ss}`);\n }, 1000);\n } else {\n setCallDuration('00:00');\n if (durationIntervalRef.current) {\n clearInterval(durationIntervalRef.current);\n durationIntervalRef.current = null;\n }\n }\n\n return () => {\n if (durationIntervalRef.current) {\n clearInterval(durationIntervalRef.current);\n }\n };\n }, [callStatus, currentCall]);\n\n // Methods\n const call = async (phoneNumber: string, extension?: string) => {\n try {\n setError(null);\n await sdk.call(phoneNumber, { extension });\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to make call'));\n throw err;\n }\n };\n\n const hangup = () => {\n try {\n sdk.hangup();\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to hang up'));\n }\n };\n\n const toggleMute = () => {\n if (!currentCall) return;\n\n if (isMuted) {\n currentCall.unmute();\n setIsMuted(false);\n } else {\n currentCall.mute();\n setIsMuted(true);\n }\n };\n\n const answerCall = () => {\n try {\n sdk.answerCall();\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to answer call'));\n }\n };\n\n const contextValue: DoraCellContextValue = {\n sdk,\n connectionStatus,\n currentCall,\n callStatus,\n callDuration,\n isMuted,\n isInitialized,\n error,\n call,\n hangup,\n toggleMute,\n answerCall,\n extension,\n };\n\n return (\n <DoraCellContext.Provider value={contextValue}>\n {children}\n </DoraCellContext.Provider>\n );\n}\n\n/**\n * Hook to access Dora Cell SDK context\n */\nexport function useDoraCell(): DoraCellContextValue {\n const context = useContext(DoraCellContext);\n if (!context) {\n throw new Error('useDoraCell must be used within DoraCellProvider');\n }\n return context;\n}\n\n/**\n * Hook for making calls\n */\nexport function useCall() {\n const { call, hangup, toggleMute, answerCall, callStatus, callDuration, isMuted, currentCall, error } = useDoraCell();\n\n return {\n call,\n hangup,\n toggleMute,\n answerCall,\n callStatus,\n callDuration,\n isMuted,\n currentCall,\n callError: error?.message,\n };\n}\n\n/**\n * Hook for connection status\n */\nexport function useConnectionStatus() {\n const { connectionStatus, isInitialized, error, extension } = useDoraCell();\n\n return {\n connectionStatus,\n isInitialized,\n isConnected: connectionStatus === 'registered',\n error,\n extension,\n };\n}\n\n/**\n * Hook to fetch wallet/credit balance\n */\nexport function useWallet() {\n const { sdk, isInitialized } = useDoraCell();\n const [data, setData] = useState<{ balance: number, currency: string } | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = async () => {\n if (!sdk || !isInitialized) return;\n \n setIsLoading(true);\n setError(null);\n try {\n const val = await sdk.getWallet();\n setData(val);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch wallet'));\n } finally {\n setIsLoading(false);\n }\n };\n\n useEffect(() => {\n if (isInitialized) {\n console.log('SDK: useWallet fetching data...');\n fetchData();\n }\n }, [isInitialized, sdk]);\n\n // Listen for call ended to refresh balance\n useEffect(() => {\n if (!sdk || !isInitialized) return;\n\n const handleCallEnded = () => {\n console.log('SDK: Call ended, refreshing wallet balance in 2 seconds...');\n // Refresh after a small delay to allow backend to process call billing\n setTimeout(fetchData, 2000);\n };\n\n sdk.on('call:ended', handleCallEnded);\n return () => {\n sdk.off('call:ended', handleCallEnded);\n };\n }, [sdk, isInitialized]);\n\n return {\n balance: data?.balance ?? 0,\n currency: data?.currency ?? 'NGN',\n isLoading,\n error,\n refresh: fetchData\n };\n}\n\n/**\n * Hook for managing extensions (DID numbers)\n */\nexport function useExtensions() {\n const { sdk, isInitialized } = useDoraCell();\n const [extensions, setExtensions] = useState<any[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchExtensions = async () => {\n if (!sdk || !isInitialized) return;\n \n setIsLoading(true);\n setError(null);\n try {\n const data = await sdk.fetchExtensions();\n setExtensions(data);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch extensions'));\n } finally {\n setIsLoading(false);\n }\n };\n\n const setExtension = async (extension: string) => {\n if (!sdk) return;\n await sdk.setExtension(extension);\n };\n\n useEffect(() => {\n if (isInitialized) {\n fetchExtensions();\n }\n }, [isInitialized, sdk]);\n\n return {\n extensions,\n isLoading,\n error,\n setExtension,\n refresh: fetchExtensions\n };\n}\n\n/**\n * Credit Balance component - mirrors main app style\n */\nexport function CreditBalance() {\n const { balance, currency, isLoading, error } = useWallet();\n\n if (error) {\n console.warn('SDK: CreditBalance error:', error);\n }\n\n const formatted = new Intl.NumberFormat('en-NG', {\n style: 'currency',\n currency: currency === 'NGN' ? 'NGN' : (currency || 'NGN'),\n }).format(balance);\n\n return (\n <div className=\"dora-credit-balance dora-px-4 dora-py-2 dora-bg-zinc-100 dora-border dora-border-zinc-200 dora-rounded-full dora-text-sm dora-text-zinc-600 dora-whitespace-nowrap dora-flex dora-items-center dora-shadow-sm\">\n <span className=\"dora-text-xs dora-text-zinc-500 dora-mr-2\">\n Credit balance:\n </span>\n <span className=\"dora-font-bold dora-text-zinc-800\">{isLoading ? \"...\" : formatted}</span>\n </div>\n );\n}\n\nexport * from './components';\n"]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/shared/src/utils.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/defaultAttributes.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/Icon.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/createLucideIcon.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/arrow-down-left.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/arrow-up-right.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/chevron-down.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/delete.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/maximize.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/mic-off.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/mic.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/minimize-2.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/phone.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/user.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/x.ts","../src/components/CallInterface.tsx","../src/components/Dialpad.tsx","../src/index.tsx"],"names":["forwardRef","createElement","__iconNode","useState","useRef","useEffect","jsxs","jsx","Fragment","createContext","sdk","DoraCell","call","extension","useContext"],"mappings":";;;;;;;AAQO,IAAM,WAAA,GAAc,CAAC,MAAA,KAC1B,MAAA,CAAO,QAAQ,oBAAA,EAAsB,OAAO,EAAE,WAAA,EAAA;AAQzC,IAAM,WAAA,GAAc,CAAmB,MAAA,KAC5C,MAAA,CAAO,OAAA;AAAQ,EAAA,uBAAA;EAAyB,CAAC,KAAA,EAAO,IAAI,EAAA,KAClD,EAAA,GAAK,GAAG,WAAA,EAAA,GAAgB,GAAG,WAAA;AAC7B,CAAA;AAQK,IAAM,YAAA,GAAe,CAAmB,MAAA,KAAgC;AAC7E,EAAA,MAAM,SAAA,GAAY,YAAY,MAAM,CAAA;AAEpC,EAAA,OAAQ,SAAA,CAAU,OAAO,CAAC,CAAA,CAAE,aAAA,GAAgB,SAAA,CAAU,MAAM,CAAC,CAAA;AAC/D,CAAA;AAQO,IAAM,YAAA,GAAe,IAA2C,OAAA,KACrE,OAAA,CACG,OAAO,CAAC,SAAA,EAAW,OAAO,KAAA,KAAU;AACnC,EAAA,OACE,OAAA,CAAQ,SAAS,CAAA,IAChB,SAAA,CAAqB,IAAA,OAAW,EAAA,IACjC,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,KAAM,KAAA;AAEjC,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA,CACR,IAAA,EAAA;AAgBE,IAAM,WAAA,GAAc,CAAC,KAAA,KAA+B;AACzD,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,KAAK,UAAA,CAAW,OAAO,KAAK,IAAA,KAAS,MAAA,IAAU,SAAS,OAAA,EAAS;AACnE,MAAA,OAAO,IAAA;AACT,IAAA;AACF,EAAA;AACF,CAAA;;;ACxEA,IAAA,iBAAA,GAAe;EACb,KAAA,EAAO,4BAAA;EACP,KAAA,EAAO,EAAA;EACP,MAAA,EAAQ,EAAA;EACR,OAAA,EAAS,WAAA;EACT,IAAA,EAAM,MAAA;EACN,MAAA,EAAQ,cAAA;EACR,WAAA,EAAa,CAAA;EACb,aAAA,EAAe,OAAA;EACf,cAAA,EAAgB;AAClB,CAAA;;;ACcA,IAAM,IAAA,GAAOA,gBAAA;EACX,CACE;IACE,KAAA,GAAQ,cAAA;IACR,IAAA,GAAO,EAAA;IACP,WAAA,GAAc,CAAA;AACd,IAAA,mBAAA;IACA,SAAA,GAAY,EAAA;AACZ,IAAA,QAAA;AACA,IAAA,QAAA;IACA,GAAG;AAAA,GAAA,EAEL,GAAA,KAEAC,mBAAA;AACE,IAAA,KAAA;AACA,IAAA;AACE,MAAA,GAAA;MACA,GAAG,iBAAA;MACH,KAAA,EAAO,IAAA;MACP,MAAA,EAAQ,IAAA;MACR,MAAA,EAAQ,KAAA;AACR,MAAA,WAAA,EAAa,sBAAuB,MAAA,CAAO,WAAW,IAAI,EAAA,GAAM,MAAA,CAAO,IAAI,CAAA,GAAI,WAAA;MAC/E,SAAA,EAAW,YAAA,CAAa,UAAU,SAAS,CAAA;MAC3C,GAAI,CAAC,YAAY,CAAC,WAAA,CAAY,IAAI,CAAA,IAAK,EAAE,eAAe,MAAA,EAAA;MACxD,GAAG;AAAA,KAAA;AAEL,IAAA;MACE,GAAG,QAAA,CAAS,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAMA,mBAAA,CAAc,GAAA,EAAK,KAAK,CAAC,CAAA;AAC3D,MAAA,GAAI,MAAM,OAAA,CAAQ,QAAQ,CAAA,GAAI,QAAA,GAAW,CAAC,QAAQ;AAAA;AACpD;AAEN,CAAA;;;AC7CA,IAAM,gBAAA,GAAmB,CAAC,QAAA,EAAkB,QAAA,KAAuB;AACjE,EAAA,MAAM,SAAA,GAAYD,gBAAAA;AAAuC,IAAA,CAAC,EAAE,SAAA,EAAW,GAAG,OAAA,EAAS,GAAA,KACjFC,oBAAc,IAAA,EAAM;AAClB,MAAA,GAAA;AACA,MAAA,QAAA;MACA,SAAA,EAAW,YAAA;AACT,QAAA,CAAA,OAAA,EAAU,WAAA,CAAY,YAAA,CAAa,QAAQ,CAAC,CAAC,CAAA,CAAA;AAC7C,QAAA,CAAA,OAAA,EAAU,QAAQ,CAAA,CAAA;AAClB,QAAA;AAAA,OAAA;MAEF,GAAG;KACJ;AAAA,GAAA;AAGH,EAAA,SAAA,CAAU,WAAA,GAAc,aAAa,QAAQ,CAAA;AAE7C,EAAA,OAAO,SAAA;AACT,CAAA;;;ACzBO,IAAM,UAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU,CAAA;AAC3C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU;AAC7C,CAAA;AAaA,IAAM,aAAA,GAAgB,gBAAA,CAAiB,iBAAA,EAAmB,UAAU,CAAA;;;AChB7D,IAAMC,WAAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU,CAAA;AAC3C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU;AAC7C,CAAA;AAaA,IAAM,YAAA,GAAe,gBAAA,CAAiB,gBAAA,EAAkBA,WAAU,CAAA;;;AChB3D,IAAMA,WAAAA,GAAuB,CAAC,CAAC,MAAA,EAAQ,EAAE,GAAG,cAAA,EAAgB,GAAA,EAAK,QAAA,EAAU,CAAC,CAAA;AAanF,IAAM,WAAA,GAAc,gBAAA,CAAiB,cAAA,EAAgBA,WAAU,CAAA;;;ACbxD,IAAMA,WAAAA,GAAuB;AAClC,EAAA;AACE,IAAA,MAAA;AACA,IAAA;MACE,CAAA,EAAG,uHAAA;MACH,GAAA,EAAK;AAAA;AACP,GAAA;AAEF,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,WAAA,EAAa,GAAA,EAAK,UAAU,CAAA;AAC1C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,WAAA,EAAa,GAAA,EAAK,UAAU;AAC5C,CAAA;AAaA,IAAM,MAAA,GAAS,gBAAA,CAAiB,QAAA,EAAUA,WAAU,CAAA;;;ACvB7C,IAAMA,WAAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,wBAAA,EAA0B,GAAA,EAAK,UAAU,CAAA;AACvD,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,0BAAA,EAA4B,GAAA,EAAK,UAAU,CAAA;AACzD,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,yBAAA,EAA2B,GAAA,EAAK,UAAU,CAAA;AACxD,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,2BAAA,EAA6B,GAAA,EAAK,UAAU;AAC5D,CAAA;AAaA,IAAM,QAAA,GAAW,gBAAA,CAAiB,UAAA,EAAYA,WAAU,CAAA;;;AClBjD,IAAMA,WAAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,UAAA,EAAY,GAAA,EAAK,UAAU,CAAA;AACzC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,gCAAA,EAAkC,GAAA,EAAK,UAAU,CAAA;AAC/D,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,gCAAA,EAAkC,GAAA,EAAK,UAAU,CAAA;AAC/D,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,iCAAA,EAAmC,GAAA,EAAK,UAAU,CAAA;AAChE,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU,CAAA;AAC3C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,4BAAA,EAA8B,GAAA,EAAK,UAAU;AAC7D,CAAA;AAaA,IAAM,MAAA,GAAS,gBAAA,CAAiB,SAAA,EAAWA,WAAU,CAAA;;;ACpB9C,IAAMA,WAAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,UAAA,EAAY,GAAA,EAAK,UAAU,CAAA;AACzC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,4BAAA,EAA8B,GAAA,EAAK,UAAU,CAAA;AAC3D,EAAA,CAAC,MAAA,EAAQ,EAAE,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAK,KAAA,EAAO,GAAA,EAAK,MAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,UAAU;AAC/E,CAAA;AAaA,IAAM,GAAA,GAAM,gBAAA,CAAiB,KAAA,EAAOA,WAAU,CAAA;;;ACjBvC,IAAMA,WAAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU,CAAA;AAC3C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,aAAA,EAAe,GAAA,EAAK,UAAU,CAAA;AAC5C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,WAAA,EAAa,GAAA,EAAK,UAAU,CAAA;AAC1C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,WAAA,EAAa,GAAA,EAAK,UAAU;AAC5C,CAAA;AAaA,IAAM,SAAA,GAAY,gBAAA,CAAiB,YAAA,EAAcA,WAAU,CAAA;;;AClBpD,IAAMA,WAAAA,GAAuB;AAClC,EAAA;AACE,IAAA,MAAA;AACA,IAAA;MACE,CAAA,EAAG,uNAAA;MACH,GAAA,EAAK;AAAA;AACP;AAEJ,CAAA;AAaA,IAAM,KAAA,GAAQ,gBAAA,CAAiB,OAAA,EAASA,WAAU,CAAA;;;ACrB3C,IAAMA,YAAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,2CAAA,EAA6C,GAAA,EAAK,UAAU,CAAA;EAC1E,CAAC,QAAA,EAAU,EAAE,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,KAAK,CAAA,EAAG,GAAA,EAAK,GAAA,EAAK,QAAA,EAAU;AACzD,CAAA;AAaA,IAAM,IAAA,GAAO,gBAAA,CAAiB,MAAA,EAAQA,YAAU,CAAA;;;AChBzC,IAAMA,YAAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU,CAAA;AAC3C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU;AAC7C,CAAA;AAaA,IAAM,CAAA,GAAI,gBAAA,CAAiB,GAAA,EAAKA,YAAU,CAAA;ACGnC,SAAS,aAAA,CAAc;AAAA,EAC1B,MAAA,GAAS,KAAA;AAAA,EACT,YAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA;AACJ,CAAA,EAAuB;AACnB,EAAA,MAAM;AAAA,IACF,GAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,MACA,OAAA,EAAQ;AAEZ,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIC,eAAS,KAAK,CAAA;AACpD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,eAAwB,IAAI,CAAA;AACxE,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAElF,EAAA,MAAM,QAAA,GAAWC,aAAgC,IAAI,CAAA;AACrD,EAAA,MAAM,WAAA,GAAcA,aAAgC,IAAI,CAAA;AAExD,EAAA,MAAM,UAAA,GAAa,aAAa,SAAA,KAAc,SAAA;AAC9C,EAAA,MAAM,YAAA,GAAe,aAAa,YAAA,IAAgB,SAAA;AAClD,EAAA,MAAM,WAAA,GAAc,YAAA;AAGpB,EAAAC,eAAA,CAAU,MAAM;AACZ,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,GAAA,IAAO,CAAC,SAAS,OAAA,EAAS;AAE/C,IAAA,MAAM,YAAA,GAAe,CAAC,MAAA,KAAwB;AAC1C,MAAA,IAAI,SAAS,OAAA,IAAW,MAAA,IAAU,QAAA,CAAS,OAAA,CAAQ,cAAc,MAAA,EAAQ;AACrE,QAAA,QAAA,CAAS,QAAQ,SAAA,GAAY,MAAA;AAC7B,QAAA,QAAA,CAAS,OAAA,CAAQ,IAAA,EAAK,CAAE,KAAA,CAAM,CAAA,GAAA,KAAO;AACjC,UAAA,OAAA,CAAQ,IAAA,CAAK,+DAA+D,GAAG,CAAA;AAAA,QACnF,CAAC,CAAA;AAAA,MACL;AAAA,IACJ,CAAA;AAGA,IAAA,MAAM,YAAA,GAAe,CAAC,IAAA,EAAW,MAAA,KAAwB;AACrD,MAAA,IAAI,IAAA,CAAK,EAAA,KAAO,WAAA,CAAY,EAAA,EAAI;AAC5B,QAAA,YAAA,CAAa,MAAM,CAAA;AAAA,MACvB;AAAA,IACJ,CAAA;AAGA,IAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,eAAA,GAAkB,WAAA,CAAY,iBAAgB,GAAI,IAAA;AACpF,IAAA,IAAI,aAAA,eAA4B,aAAa,CAAA;AAE7C,IAAA,GAAA,CAAI,EAAA,CAAG,eAAe,YAAY,CAAA;AAClC,IAAA,OAAO,MAAM;AACT,MAAA,GAAA,CAAI,GAAA,CAAI,eAAe,YAAY,CAAA;AAAA,IACvC,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,WAAA,EAAa,GAAA,EAAK,UAAU,CAAC,CAAA;AAGjC,EAAAA,eAAA,CAAU,MAAM;AACZ,IAAA,IAAI,UAAA,KAAe,aAAa,UAAA,EAAY;AACxC,MAAA,YAAA,GAAe,IAAI,CAAA;AACnB,MAAA,WAAA,CAAY,OAAA,EAAS,IAAA,EAAK,CAAE,KAAA,CAAM,MAAM;AAAA,MAAE,CAAC,CAAA;AAAA,IAC/C,CAAA,MAAO;AACH,MAAA,IAAI,YAAY,OAAA,EAAS;AACrB,QAAA,WAAA,CAAY,QAAQ,KAAA,EAAM;AAC1B,QAAA,WAAA,CAAY,QAAQ,WAAA,GAAc,CAAA;AAAA,MACtC;AAAA,IACJ;AAAA,EACJ,CAAA,EAAG,CAAC,UAAA,EAAY,UAAA,EAAY,YAAY,CAAC,CAAA;AAGzC,EAAAA,eAAA,CAAU,MAAM;AACZ,IAAA,IAAI,UAAA,KAAe,YAAA,IAAgB,UAAA,KAAe,SAAA,EAAW;AACzD,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACzB;AACA,IAAA,IAAI,eAAe,SAAA,EAAW;AAC1B,MAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,IACxB;AAAA,EACJ,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAGf,EAAAA,eAAA,CAAU,MAAM;AACZ,IAAA,IAAI,MAAA,IAAU,eAAe,OAAA,EAAS;AAClC,MAAA,WAAA,IAAc;AACd,MAAA,MAAM,UAAA,GAAa,eAAe,IAAA,GAAO,GAAA;AACzC,MAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,MAAA,MAAM,EAAA,GAAK,YAAY,MAAM;AACzB,QAAA,MAAM,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,EAAG,cAAc,IAAA,CAAK,GAAA,KAAQ,KAAA,CAAM,CAAA;AAC/D,QAAA,iBAAA,CAAkB,IAAA,CAAK,IAAA,CAAK,SAAA,GAAY,GAAI,CAAC,CAAA;AAE7C,QAAA,IAAI,aAAa,CAAA,EAAG;AAChB,UAAA,aAAA,CAAc,EAAE,CAAA;AAChB,UAAA,YAAA,GAAe,KAAK,CAAA;AAEpB,UAAA,cAAA,CAAe,KAAK,CAAA;AAAA,QACxB;AAAA,MACJ,GAAG,GAAG,CAAA;AACN,MAAA,OAAO,MAAM,cAAc,EAAE,CAAA;AAAA,IACjC,CAAA,MAAO;AACH,MAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,IAC1B;AAAA,EACJ,GAAG,CAAC,UAAA,EAAY,QAAQ,YAAA,EAAc,YAAA,EAAc,WAAW,CAAC,CAAA;AAGhE,EAAAA,eAAA,CAAU,MAAM;AACZ,IAAA,IAAI,EAAA;AACJ,IAAA,IAAI,MAAA,IAAU,UAAA,KAAe,YAAA,IAAgB,CAAC,UAAA,EAAY;AACtD,MAAA,sBAAA,CAAuB,EAAE,CAAA;AACzB,MAAA,EAAA,GAAK,YAAY,MAAM;AACnB,QAAA,sBAAA,CAAuB,CAAC,IAAA,KAAS;AAC7B,UAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,IAAQ,CAAA,EAAG;AAC5B,YAAA,aAAA,CAAc,EAAE,CAAA;AAChB,YAAA,IAAI,UAAA,KAAe,cAAc,MAAA,EAAO;AACxC,YAAA,OAAO,CAAA;AAAA,UACX;AACA,UAAA,OAAO,IAAA,GAAO,CAAA;AAAA,QAClB,CAAC,CAAA;AAAA,MACL,GAAG,GAAI,CAAA;AAAA,IACX,CAAA,MAAO;AACH,MAAA,sBAAA,CAAuB,IAAI,CAAA;AAAA,IAC/B;AACA,IAAA,OAAO,MAAM,cAAc,EAAE,CAAA;AAAA,EACjC,GAAG,CAAC,UAAA,EAAY,MAAA,EAAQ,UAAA,EAAY,MAAM,CAAC,CAAA;AAE3C,EAAA,IAAI,CAAC,MAAA,IAAU,UAAA,KAAe,MAAA,EAAQ,OAAO,IAAA;AAE7C,EAAA,uBACIC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,gBAAA;AAAA,MACX,SAAA,EAAW,uLAAuL,MAAA,GAAS,oBAAA,GAAuB,yBAC9N,CAAA,CAAA,EAAI,WAAA,GACE,mGACA,6IACN,CAAA,CAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,WAAM,GAAA,EAAK,QAAA,EAAU,QAAA,EAAQ,IAAA,EAAC,WAAU,aAAA,EAAc,CAAA;AAAA,wBACvDA,cAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACG,GAAA,EAAK,WAAA;AAAA,YACL,GAAA,EAAI,mEAAA;AAAA,YACJ,IAAA,EAAI,IAAA;AAAA,YACJ,OAAA,EAAQ,MAAA;AAAA,YACR,SAAA,EAAU;AAAA;AAAA,SACd;AAAA,QAEC,WAAA,mBACGD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EAAA,EACX,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACG,OAAA,EAAS,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,cACnC,SAAA,EAAU,0KAAA;AAAA,cACV,YAAA,EAAW,UAAA;AAAA,cAEV,QAAA,EAAA,YAAA,oBAAgBA,cAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,WACzC;AAAA,0BACAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACX,QAAA,EAAA;AAAA,4BAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gHAAA,EACX,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iDAAA,EACX,QAAA,EAAA,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,IAC3B,CAAA,EACJ,CAAA;AAAA,4BACAA,cAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACG,OAAA,EAAS,MAAA;AAAA,gBACT,SAAA,EAAU,6LAAA;AAAA,gBACV,YAAA,EAAW,UAAA;AAAA,gBAEX,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,EAAA,EAAI,WAAU,qCAAA,EAAsC;AAAA;AAAA;AACrE,WAAA,EACJ;AAAA,SAAA,EACJ,CAAA,mBAEAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kHAAA,EACX,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACG,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,cAClC,SAAA,EAAU,wGAAA;AAAA,cACV,YAAA,EAAW,UAAA;AAAA,cAEV,QAAA,EAAA,YAAA,oBAAgBA,cAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,WAC1C;AAAA,0BAEAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iFAAA,EACX,QAAA,EAAA;AAAA,4BAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qEAAA,EACX,QAAA,EAAA;AAAA,8BAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2IAAA,EACX,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kEAAA,EACX,QAAA,EAAA,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,IAC3B,CAAA,EACJ,CAAA;AAAA,8BACAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACX,QAAA,EAAA;AAAA,gCAAAC,cAAA,CAAC,IAAA,EAAA,EAAG,WAAU,+EAAA,EACT,QAAA,EAAA,UAAA,GAAa,cAAe,WAAA,KAAgB,SAAA,GAAY,kBAAkB,WAAA,EAC/E,CAAA;AAAA,gCACAD,eAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gEAAA,EACR,QAAA,EAAA;AAAA,kBAAA,YAAA;AAAA,kBAAa,SAAA;AAAA,kBAAQ,GAAA;AAAA,kBACrB,0BACGC,cAAA,CAAC,MAAA,EAAA,EAAK,WAAU,qBAAA,EAAsB,QAAA,EAAA,YAAA,EAAU,oBAEhDD,eAAA,CAAAE,mBAAA,EAAA,EACM,QAAA,EAAA;AAAA,oBAAA,CAAA,UAAA,KAAe,YAAA,IAAgB,UAAA,KAAe,SAAA,qBAC5CD,cAAA,CAAC,MAAA,EAAA,EACI,uBAAa,kBAAA,GAAqB,UAAA,KAAe,YAAA,GAAe,eAAA,GAAkB,YAAA,EACvF,CAAA;AAAA,oBAEH,UAAA,KAAe,SAAA,oBAAaA,cAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,oBACzC,UAAA,KAAe,OAAA,oBAAWA,cAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,YAAA,EAAU;AAAA,mBAAA,EAC/C;AAAA,iBAAA,EAER;AAAA,eAAA,EACJ;AAAA,aAAA,EACJ,CAAA;AAAA,4BAEAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0FAAA,EACV,QAAA,EAAA;AAAA,cAAA,UAAA,IAAc,eAAe,SAAA,oBAC1BC,cAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACG,OAAA,EAAS,UAAA;AAAA,kBACT,SAAA,EAAU,4MAAA;AAAA,kBACV,YAAA,EAAW,QAAA;AAAA,kBAEX,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,eACrB;AAAA,cAAA,CAGF,UAAA,KAAe,SAAA,IAAc,UAAA,IAAc,UAAA,KAAe,SAAA,qBACxDA,cAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACG,OAAA,EAAS,UAAA;AAAA,kBACT,SAAA,EAAW,CAAA,iJAAA,EAAoJ,OAAA,GAAU,2DAAA,GAA8D,+DACnO,CAAA,CAAA;AAAA,kBACJ,YAAA,EAAW,aAAA;AAAA,kBAEV,QAAA,EAAA,OAAA,kCAAW,MAAA,EAAA,EAAO,IAAA,EAAM,IAAI,CAAA,mBAAKA,cAAA,CAAC,GAAA,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,eACrD;AAAA,8BAGJA,cAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACG,OAAA,EAAS,MAAA;AAAA,kBACT,SAAA,EAAU,wMAAA;AAAA,kBACV,YAAA,EAAY,UAAA,IAAc,UAAA,KAAe,SAAA,GAAY,SAAA,GAAY,UAAA;AAAA,kBAEjE,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,EAAA,EAAI,WAAU,qCAAA,EAAsC;AAAA;AAAA;AACrE,aAAA,EACJ;AAAA,WAAA,EACJ,CAAA;AAAA,0BAEAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qEAAA,EAAsE,CAAA;AAAA,UAEpF,aAAa,UAAA,KAAe,OAAA,oBACzBD,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mHAAA,EACX,QAAA,EAAA;AAAA,4BAAAC,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iEAAA,EAAkE,QAAA,EAAA,aAAA,EAE/E,CAAA;AAAA,4BACAA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yDAAA,EACR,QAAA,EAAA,SAAA,EACL,CAAA;AAAA,YACC,cAAA,KAAmB,IAAA,oBAChBD,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0BAAA,EACX,QAAA,EAAA;AAAA,8BAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kFAAA,EACX,QAAA,kBAAAA,cAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACG,SAAA,EAAU,mEAAA;AAAA,kBACV,KAAA,EAAO;AAAA,oBACH,KAAA,EAAO,GAAG,IAAA,CAAK,GAAA;AAAA,sBACX,CAAA;AAAA,sBACC,cAAA,IAAkB,YAAA,GAAe,CAAA,GAAI,CAAA,CAAA,GAAM;AAAA,qBAC/C,CAAA,CAAA;AAAA;AACL;AAAA,eACJ,EACJ,CAAA;AAAA,8BACAD,eAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0EAAA,EAA2E,QAAA,EAAA;AAAA,gBAAA,aAAA;AAAA,gBACxE,cAAA;AAAA,gBAAe;AAAA,eAAA,EAC/B;AAAA,aAAA,EACJ;AAAA,WAAA,EAER,CAAA;AAAA,0BAGJA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EACX,QAAA,EAAA;AAAA,4BAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4HAAA,EACT,QAAA,EAAA;AAAA,cAAA,CAAA,UAAA,KAAe,gBAAgB,UAAA,KAAe,SAAA,oCAC3C,MAAA,EAAA,EAAM,QAAA,EAAA,UAAA,GAAa,kBAAkB,eAAA,EAAgB,CAAA;AAAA,cAEzD,UAAA,KAAe,SAAA,oBAAaC,cAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,cACzC,UAAA,KAAe,OAAA,oBAAWA,cAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,cAAA,CACzC,eAAe,YAAA,IAAgB,UAAA,KAAe,aAAa,UAAA,KAAe,SAAA,MACxE,6BACMA,cAAA,CAAC,aAAA,EAAA,EAAc,WAAU,iDAAA,EAAkD,IAAA,EAAM,IAAI,CAAA,mBACrFA,cAAA,CAAC,gBAAa,SAAA,EAAU,gDAAA,EAAiD,MAAM,EAAA,EAAI,CAAA;AAAA,aAAA,EAEjG,CAAA;AAAA,YAEC,UAAA,KAAe,6BACZA,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+LAAA,EACX,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,YAAA,EAAa,CAAA,EACxB,CAAA;AAAA,YAGH,UAAA,KAAe,WAAW,cAAA,KAAmB,IAAA,mCACzC,KAAA,EAAA,EAAI,SAAA,EAAU,8LAAA,EACX,QAAA,kBAAAD,eAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,cAAA,aAAA;AAAA,cAAY,cAAA;AAAA,cAAe;AAAA,aAAA,EAAC,CAAA,EACtC,CAAA;AAAA,YAAA,CAGF,mBAAA,KAAwB,IAAA,IAAQ,UAAA,KAAe,SAAA,KAAc,CAAC,UAAA,IAAc,UAAA,KAAe,SAAA,IAAa,UAAA,KAAe,OAAA,oBACrHA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8LAAA,EACX,QAAA,EAAA;AAAA,8BAAAC,cAAA,CAAC,UAAK,SAAA,EAAU,4CAAA,EACX,QAAA,EAAA,UAAA,KAAe,SAAA,GAAY,eAAe,eAAA,EAC/C,CAAA;AAAA,cACC,eAAe,YAAA,IAAgB,mBAAA,oBAC5BD,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,8CAAA,EACX,QAAA,EAAA;AAAA,gBAAA,IAAA,CAAK,KAAA,CAAM,sBAAsB,EAAE,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAE,OAAO,mBAAA,GAAsB,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG;AAAA,eAAA,EAC5F;AAAA,aAAA,EAER;AAAA,WAAA,EAER;AAAA,SAAA,EACJ;AAAA;AAAA;AAAA,GAER;AAER;AChUO,SAAS,OAAA,CAAQ;AAAA,EACtB,eAAA;AAAA,EACA,aAAA,GAAgB,EAAA;AAAA,EAChB,QAAA,GAAW,IAAA;AAAA,EACX,SAAA,GAAY,EAAA;AAAA,EACZ,mBAAA,EAAqB,kBAAA;AAAA,EACrB,iBAAA,EAAmB,yBAAA;AAAA,EACnB;AACF,CAAA,EAAiB;AACf,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAW,GAAI,OAAA,EAAQ;AACrC,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,mBAAA,EAAoB;AAC5C,EAAA,MAAM,EAAE,UAAA,EAAY,iBAAA,EAAmB,YAAA,KAAiB,aAAA,EAAc;AAEtE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIH,eAAS,aAAa,CAAA;AAClD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,QAAQ,CAAA;AACvD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,cAAAA,CAAS,6BAA6B,EAAE,CAAA;AAExF,EAAA,MAAM,aAAa,kBAAA,EAAoB,MAAA,GACnC,qBACA,iBAAA,CAAkB,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,IAC9B,OAAO,GAAA,CAAI,SAAA;AAAA,IACX,OAAO,GAAA,CAAI;AAAA,GACb,CAAE,CAAA;AAGN,EAAAE,gBAAU,MAAM;AACd,IAAA,IAAI,yBAAA,IAA6B,8BAA8B,gBAAA,EAAkB;AAC/E,MAAA,mBAAA,CAAoB,yBAAyB,CAAA;AAAA,IAC/C;AAAA,EACF,CAAA,EAAG,CAAC,yBAAyB,CAAC,CAAA;AAG9B,EAAAA,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,gBAAA,IAAoB,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAC9C,MAAA,mBAAA,CAAoB,UAAA,CAAW,CAAC,CAAA,CAAE,KAAK,CAAA;AAAA,IACzC;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,gBAAgB,CAAC,CAAA;AAEjC,EAAA,MAAM,eAAA,GAAkB,qBAAqB,UAAA,CAAW,MAAA,GAAS,IAAI,UAAA,CAAW,CAAC,EAAE,KAAA,GAAQ,EAAA,CAAA;AAE3F,EAAA,MAAM,SAAS,CAAC,KAAA,KAAkB,UAAU,CAAC,CAAA,KAAM,IAAI,KAAK,CAAA;AAC5D,EAAA,MAAM,SAAA,GAAY,MAAM,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAEvD,EAAA,MAAM,qBAAA,GAAwB,OAAO,GAAA,KAAgB;AACnD,IAAA,mBAAA,CAAoB,GAAG,CAAA;AACvB,IAAA,iBAAA,GAAoB,GAAG,CAAA;AAEvB,IAAA,MAAM,aAAa,GAAG,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,aAAa,YAAY;AAC7B,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,IAAA,OAAW,EAAA,EAAI;AACrC,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,QAAQ,eAAe,CAAA;AAClC,MAAA,eAAA,GAAkB,MAAM,CAAA;AAAA,IAC1B,SAAS,CAAA,EAAG;AAAA,IAEZ;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,cAAA,GACJ,CAAC,MAAA,IACD,MAAA,CAAO,IAAA,EAAK,KAAM,EAAA,IAClB,CAAC,WAAA,IACD,UAAA,KAAe,SAAA,IACf,UAAA,KAAe,aACf,UAAA,KAAe,YAAA;AAEjB,EAAA,MAAM,8BACJE,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,IAAA;AAAA,MACN,MAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAM,4BAAA;AAAA,MAEN,QAAA,kBAAAA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAA,EAAE,mvLAAA;AAAA,UACF,IAAA,EAAK;AAAA;AAAA;AACP;AAAA,GACF;AAGF,EAAA,uBACED,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,+BAAA,EAAkC,SAAS,CAAA,uCAAA,CAAA,EAEzD,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0IAAA,EAA2I,QAAA,EAAA,WAAA,EAE1J,CAAA;AAAA,sBACAA,eAAC,aAAA,EAAA,EAAc;AAAA,KAAA,EACjB,CAAA;AAAA,oBAGAD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8FAAA,EAEb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EACb,QAAA,EAAA;AAAA,wBAAAC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sEAAA,EAAuE,QAAA,EAAA,WAAA,EAEvF,CAAA;AAAA,wBACAD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,QAAA,EAAU,WAAW,MAAA,KAAW,CAAA;AAAA,cAChC,SAAA,EAAU,sSAAA;AAAA,cACV,KAAA,EAAO,eAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,qBAAA,CAAsB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAEpD,QAAA,EAAA,UAAA,CAAW,SAAS,CAAA,GACnB,UAAA,CAAW,IAAI,CAAC,GAAA,qBACdA,cAAAA,CAAC,QAAA,EAAA,EAAuB,KAAA,EAAO,IAAI,KAAA,EAChC,QAAA,EAAA,GAAA,CAAI,SADM,GAAA,CAAI,KAEjB,CACD,CAAA,mBAEDA,cAAAA,CAAC,QAAA,EAAA,EAAO,QAAA,EAAA,YAAA,EAAU;AAAA;AAAA,WAEtB;AAAA,0BACAA,cAAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,EAAA;AAAA,cACN,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oMAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,EAAA,EAAI,WAAU,8BAAA,EAA+B,CAAA;AAAA,0BACzDA,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,KAAA;AAAA,cACL,WAAA,EAAY,cAAA;AAAA,cACZ,KAAA,EAAO,MAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cACzC,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA;AAAA,wBACAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAU,cAAA;AAAA,YACV,OAAA,EAAS,UAAA;AAAA,YACT,SAAA,EAAU,+PAAA;AAAA,YAEV,QAAA,kBAAAA,eAAC,KAAA,EAAA,EAAM,IAAA,EAAM,IAAI,IAAA,EAAK,OAAA,EAAQ,WAAU,iBAAA,EAAkB;AAAA;AAAA;AAC5D,OAAA,EACF,CAAA;AAAA,sBAGAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACZ,QAAA,EAAA,WAAA,mBACCD,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAC,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,kBAAAD,eAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,YACnC,SAAA,EAAU,iQAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAC,cAAAA,CAAC,CAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI,WAAU,mBAAA,EAAoB,CAAA;AAAA,cAAE;AAAA;AAAA;AAAA,SAE/C,EACF,CAAA;AAAA,wBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACZ,QAAA,EAAA;AAAA,UACC,GAAA;AAAA,UAAK,GAAA;AAAA,UAAK,GAAA;AAAA,UACV,GAAA;AAAA,UAAK,GAAA;AAAA,UAAK,GAAA;AAAA,UACV,GAAA;AAAA,UAAK,GAAA;AAAA,UAAK,GAAA;AAAA,UACV,GAAA;AAAA,UAAK,GAAA;AAAA,UAAK;AAAA,SACZ,CAAE,GAAA,CAAI,CAAC,CAAA,qBACLA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,SAAS,MAAO,CAAA,KAAM,QAAQ,SAAA,EAAU,GAAI,OAAO,CAAC,CAAA;AAAA,YACpD,SAAA,EAAU,qPAAA;AAAA,YAET,QAAA,EAAA,CAAA,KAAM,wBAAQA,cAAAA,CAAC,UAAO,IAAA,EAAM,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAqB,CAAA,GAAK;AAAA,WAAA;AAAA,UAJhE;AAAA,SAMR,CAAA,EACH;AAAA,OAAA,EACF,oBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCACb,QAAA,kBAAAD,eAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,UAClC,SAAA,EAAU,8PAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAAA,EAAgC,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,YAAO;AAAA;AAAA;AAAA,SAGvE,CAAA,EAEJ;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACjLA,IAAM,eAAA,GAAkBE,oBAAgD,MAAS,CAAA;AAQ1E,SAAS,gBAAA,CAAiB;AAAA,EAC7B,MAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA,GAAiB;AACrB,CAAA,EAA0B;AACtB,EAAA,MAAM,CAACC,KAAG,CAAA,GAAIP,cAAAA,CAAS,MAAM,IAAIQ,YAAA,CAAS,MAAM,CAAC,CAAA;AACjD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIR,eAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,eAA2B,cAAc,CAAA;AACzF,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAsB,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAqB,MAAM,CAAA;AAC/D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,OAAO,CAAA;AACxD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAE9D,EAAA,MAAM,mBAAA,GAAsBC,aAAsB,IAAI,CAAA;AAGtD,EAAAC,gBAAU,MAAM;AACZ,IAAA,IAAI,CAAC,cAAA,EAAgB;AAErB,IAAA,MAAM,gBAAgB,YAAY;AAC9B,MAAA,IAAI;AACA,QAAA,MAAMK,MAAI,UAAA,EAAW;AACrB,QAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,MACzB,SAAS,GAAA,EAAK;AACV,QAAA,QAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,0BAA0B,CAAC,CAAA;AAAA,MAC/E;AAAA,IACJ,CAAA;AAEA,IAAA,aAAA,EAAc;AAEd,IAAA,OAAO,MAAM;AACT,MAAAA,KAAA,CAAI,OAAA,EAAQ;AAAA,IAChB,CAAA;AAAA,EACJ,CAAA,EAAG,CAACA,KAAA,EAAK,cAAc,CAAC,CAAA;AAGxB,EAAAL,gBAAU,MAAM;AACZ,IAAA,IAAI,CAACK,KAAA,EAAK;AAEV,IAAA,MAAM,sBAAA,GAAyB,CAAC,KAAA,KAA2B;AACvD,MAAA,mBAAA,CAAoB,MAAM,MAAM,CAAA;AAChC,MAAA,IAAI,MAAM,SAAA,EAAW;AACjB,QAAA,YAAA,CAAa,MAAM,SAAS,CAAA;AAAA,MAChC;AACA,MAAA,IAAI,MAAM,KAAA,EAAO;AACb,QAAA,QAAA,CAAS,IAAI,KAAA,CAAM,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,MACnC;AAAA,IACJ,CAAA;AAEA,IAAA,MAAM,kBAAA,GAAqB,CAACE,KAAAA,KAAe;AACvC,MAAA,cAAA,CAAeA,KAAI,CAAA;AACnB,MAAA,aAAA,CAAc,SAAS,CAAA;AAAA,IAC3B,CAAA;AAEA,IAAA,MAAM,kBAAA,GAAqB,CAACA,KAAAA,KAAe;AACvC,MAAA,cAAA,CAAeA,KAAI,CAAA;AACnB,MAAA,aAAA,CAAc,YAAY,CAAA;AAAA,IAC9B,CAAA;AAEA,IAAA,MAAM,iBAAA,GAAoB,CAACA,KAAAA,KAAe;AACtC,MAAA,aAAA,CAAc,SAAS,CAAA;AAAA,IAC3B,CAAA;AAEA,IAAA,MAAM,mBAAA,GAAsB,CAACA,KAAAA,KAAe;AACxC,MAAA,aAAA,CAAc,SAAS,CAAA;AAAA,IAC3B,CAAA;AAEA,IAAA,MAAM,eAAA,GAAkB,CAACA,KAAAA,KAAe;AACpC,MAAA,aAAA,CAAc,OAAO,CAAA;AACrB,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,UAAA,CAAW,KAAK,CAAA;AAGhB,MAAA,UAAA,CAAW,MAAM;AACb,QAAA,aAAA,CAAc,MAAM,CAAA;AAAA,MACxB,GAAG,GAAI,CAAA;AAAA,IACX,CAAA;AAEA,IAAA,MAAM,gBAAA,GAAmB,CAACA,KAAAA,EAAY,QAAA,KAAqB;AACvD,MAAA,QAAA,CAAS,IAAI,KAAA,CAAM,QAAQ,CAAC,CAAA;AAC5B,MAAA,aAAA,CAAc,OAAO,CAAA;AACrB,MAAA,cAAA,CAAe,IAAI,CAAA;AAAA,IACvB,CAAA;AAEA,IAAA,MAAM,WAAA,GAAc,CAAC,GAAA,KAAe;AAChC,MAAA,QAAA,CAAS,GAAG,CAAA;AAAA,IAChB,CAAA;AAEA,IAAAF,KAAA,CAAI,EAAA,CAAG,qBAAqB,sBAAsB,CAAA;AAClD,IAAAA,KAAA,CAAI,EAAA,CAAG,iBAAiB,kBAAkB,CAAA;AAC1C,IAAAA,KAAA,CAAI,EAAA,CAAG,iBAAiB,kBAAkB,CAAA;AAC1C,IAAAA,KAAA,CAAI,EAAA,CAAG,gBAAgB,iBAAiB,CAAA;AACxC,IAAAA,KAAA,CAAI,EAAA,CAAG,kBAAkB,mBAAmB,CAAA;AAC5C,IAAAA,KAAA,CAAI,EAAA,CAAG,cAAc,eAAe,CAAA;AACpC,IAAAA,KAAA,CAAI,EAAA,CAAG,eAAe,gBAAgB,CAAA;AACtC,IAAAA,KAAA,CAAI,EAAA,CAAG,SAAS,WAAW,CAAA;AAE3B,IAAA,OAAO,MAAM;AACT,MAAAA,KAAA,CAAI,GAAA,CAAI,qBAAqB,sBAAsB,CAAA;AACnD,MAAAA,KAAA,CAAI,GAAA,CAAI,iBAAiB,kBAAkB,CAAA;AAC3C,MAAAA,KAAA,CAAI,GAAA,CAAI,iBAAiB,kBAAkB,CAAA;AAC3C,MAAAA,KAAA,CAAI,GAAA,CAAI,gBAAgB,iBAAiB,CAAA;AACzC,MAAAA,KAAA,CAAI,GAAA,CAAI,kBAAkB,mBAAmB,CAAA;AAC7C,MAAAA,KAAA,CAAI,GAAA,CAAI,cAAc,eAAe,CAAA;AACrC,MAAAA,KAAA,CAAI,GAAA,CAAI,eAAe,gBAAgB,CAAA;AACvC,MAAAA,KAAA,CAAI,GAAA,CAAI,SAAS,WAAW,CAAA;AAAA,IAChC,CAAA;AAAA,EACJ,CAAA,EAAG,CAACA,KAAG,CAAC,CAAA;AAGR,EAAAL,gBAAU,MAAM;AACZ,IAAA,IAAI,UAAA,KAAe,aAAa,WAAA,EAAa;AACzC,MAAA,mBAAA,CAAoB,OAAA,GAAU,MAAA,CAAO,WAAA,CAAY,MAAM;AACnD,QAAA,MAAM,WAAW,WAAA,CAAY,QAAA;AAC7B,QAAA,MAAM,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,QAAA,GAAW,EAAE,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AAC5D,QAAA,MAAM,KAAK,MAAA,CAAO,QAAA,GAAW,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAChD,QAAA,eAAA,CAAgB,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAA;AAAA,MACjC,GAAG,GAAI,CAAA;AAAA,IACX,CAAA,MAAO;AACH,MAAA,eAAA,CAAgB,OAAO,CAAA;AACvB,MAAA,IAAI,oBAAoB,OAAA,EAAS;AAC7B,QAAA,aAAA,CAAc,oBAAoB,OAAO,CAAA;AACzC,QAAA,mBAAA,CAAoB,OAAA,GAAU,IAAA;AAAA,MAClC;AAAA,IACJ;AAEA,IAAA,OAAO,MAAM;AACT,MAAA,IAAI,oBAAoB,OAAA,EAAS;AAC7B,QAAA,aAAA,CAAc,oBAAoB,OAAO,CAAA;AAAA,MAC7C;AAAA,IACJ,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,UAAA,EAAY,WAAW,CAAC,CAAA;AAG5B,EAAA,MAAM,IAAA,GAAO,OAAO,WAAA,EAAqBQ,UAAAA,KAAuB;AAC5D,IAAA,IAAI;AACA,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,MAAMH,MAAI,IAAA,CAAK,WAAA,EAAa,EAAE,SAAA,EAAAG,YAAW,CAAA;AAAA,IAC7C,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,qBAAqB,CAAC,CAAA;AACtE,MAAA,MAAM,GAAA;AAAA,IACV;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,SAAS,MAAM;AACjB,IAAA,IAAI;AACA,MAAAH,KAAA,CAAI,MAAA,EAAO;AAAA,IACf,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,mBAAmB,CAAC,CAAA;AAAA,IACxE;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,aAAa,MAAM;AACrB,IAAA,IAAI,CAAC,WAAA,EAAa;AAElB,IAAA,IAAI,OAAA,EAAS;AACT,MAAA,WAAA,CAAY,MAAA,EAAO;AACnB,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IACpB,CAAA,MAAO;AACH,MAAA,WAAA,CAAY,IAAA,EAAK;AACjB,MAAA,UAAA,CAAW,IAAI,CAAA;AAAA,IACnB;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,aAAa,YAAY;AAC3B,IAAA,IAAI;AACA,MAAA,MAAMA,MAAI,UAAA,EAAW;AAAA,IACzB,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,uBAAuB,CAAC,CAAA;AAAA,IAC5E;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,YAAA,GAAqC;AAAA,SACvCA,KAAA;AAAA,IACA,gBAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACJ;AAEA,EAAA,uBACIH,cAAAA,CAAC,eAAA,CAAgB,UAAhB,EAAyB,KAAA,EAAO,cAC5B,QAAA,EACL,CAAA;AAER;AAKO,SAAS,WAAA,GAAoC;AAChD,EAAA,MAAM,OAAA,GAAUO,iBAAW,eAAe,CAAA;AAC1C,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,EACtE;AACA,EAAA,OAAO,OAAA;AACX;AAKO,SAAS,OAAA,GAAU;AACtB,EAAA,MAAM,EAAE,GAAA,EAAK,IAAA,EAAM,MAAA,EAAQ,UAAA,EAAY,UAAA,EAAY,UAAA,EAAY,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,KAAA,EAAM,GAAI,WAAA,EAAY;AAEzH,EAAA,OAAO;AAAA,IACH,GAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAW,KAAA,EAAO;AAAA,GACtB;AACJ;AAKO,SAAS,mBAAA,GAAsB;AAClC,EAAA,MAAM,EAAE,gBAAA,EAAkB,aAAA,EAAe,KAAA,EAAO,SAAA,KAAc,WAAA,EAAY;AAE1E,EAAA,OAAO;AAAA,IACH,gBAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAa,gBAAA,KAAqB,YAAA;AAAA,IAClC,KAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAKO,SAAS,SAAA,GAAY;AACxB,EAAA,MAAM,EAAE,GAAA,EAAK,aAAA,EAAc,GAAI,WAAA,EAAY;AAC3C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIX,eAAuD,IAAI,CAAA;AACnF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,YAAY,YAAY;AAC1B,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,aAAA,EAAe;AAE5B,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACA,MAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,SAAA,EAAU;AAChC,MAAA,OAAA,CAAQ,GAAG,CAAA;AAAA,IACf,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,wBAAwB,CAAC,CAAA;AAAA,IAC7E,CAAA,SAAE;AACE,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACtB;AAAA,EACJ,CAAA;AAEA,EAAAE,gBAAU,MAAM;AACZ,IAAA,IAAI,aAAA,EAAe;AACf,MAAA,OAAA,CAAQ,IAAI,iCAAiC,CAAA;AAC7C,MAAA,SAAA,EAAU;AAAA,IACd;AAAA,EACJ,CAAA,EAAG,CAAC,aAAA,EAAe,GAAG,CAAC,CAAA;AAGvB,EAAAA,gBAAU,MAAM;AACZ,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,aAAA,EAAe;AAE5B,IAAA,MAAM,kBAAkB,MAAM;AAC1B,MAAA,OAAA,CAAQ,IAAI,4DAA4D,CAAA;AAExE,MAAA,UAAA,CAAW,WAAW,GAAI,CAAA;AAAA,IAC9B,CAAA;AAEA,IAAA,GAAA,CAAI,EAAA,CAAG,cAAc,eAAe,CAAA;AACpC,IAAA,OAAO,MAAM;AACT,MAAA,GAAA,CAAI,GAAA,CAAI,cAAc,eAAe,CAAA;AAAA,IACzC,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,GAAA,EAAK,aAAa,CAAC,CAAA;AAEvB,EAAA,OAAO;AAAA,IACH,OAAA,EAAS,MAAM,OAAA,IAAW,CAAA;AAAA,IAC1B,QAAA,EAAU,MAAM,QAAA,IAAY,KAAA;AAAA,IAC5B,SAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACb;AACJ;AAKO,SAAS,aAAA,GAAgB;AAC5B,EAAA,MAAM,EAAE,GAAA,EAAK,aAAA,EAAc,GAAI,WAAA,EAAY;AAC3C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIF,cAAAA,CAAgB,EAAE,CAAA;AACtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,kBAAkB,YAAY;AAChC,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,aAAA,EAAe;AAE5B,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,eAAA,EAAgB;AACvC,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACtB,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,4BAA4B,CAAC,CAAA;AAAA,IACjF,CAAA,SAAE;AACE,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACtB;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,OAAO,SAAA,KAAsB;AAC9C,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,MAAM,GAAA,CAAI,aAAa,SAAS,CAAA;AAAA,EACpC,CAAA;AAEA,EAAAE,gBAAU,MAAM;AACZ,IAAA,IAAI,aAAA,EAAe;AACf,MAAA,eAAA,EAAgB;AAAA,IACpB;AAAA,EACJ,CAAA,EAAG,CAAC,aAAA,EAAe,GAAG,CAAC,CAAA;AAEvB,EAAA,OAAO;AAAA,IACH,UAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACb;AACJ;AAKO,SAAS,aAAA,GAAgB;AAC5B,EAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAU,SAAA,EAAW,KAAA,KAAU,SAAA,EAAU;AAE1D,EAAA,IAAI,KAAA,EAAO;AACP,IAAA,OAAA,CAAQ,IAAA,CAAK,6BAA6B,KAAK,CAAA;AAAA,EACnD;AAEA,EAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS;AAAA,IAC7C,KAAA,EAAO,UAAA;AAAA,IACP,QAAA,EAAU,QAAA,KAAa,KAAA,GAAQ,KAAA,GAAS,QAAA,IAAY;AAAA,GACvD,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAEjB,EAAA,uBACIC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+MAAA,EACX,QAAA,EAAA;AAAA,oBAAAC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2CAAA,EAA4C,QAAA,EAAA,iBAAA,EAE5D,CAAA;AAAA,oBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mCAAA,EAAqC,QAAA,EAAA,SAAA,GAAY,QAAQ,SAAA,EAAU;AAAA,GAAA,EACvF,CAAA;AAER","file":"index.js","sourcesContent":["import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n\n/**\n * Is empty string\n *\n * @param {unknown} value\n * @returns {boolean} Whether the value is an empty string\n */\nexport const isEmptyString = (value: unknown): boolean => value === '';\n\n/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n};\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M17 7 7 17', key: '15tmo1' }],\n ['path', { d: 'M17 17H7V7', key: '1org7z' }],\n];\n\n/**\n * @component @name ArrowDownLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTcgNyA3IDE3IiAvPgogIDxwYXRoIGQ9Ik0xNyAxN0g3VjciIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/arrow-down-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowDownLeft = createLucideIcon('arrow-down-left', __iconNode);\n\nexport default ArrowDownLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M7 7h10v10', key: '1tivn9' }],\n ['path', { d: 'M7 17 17 7', key: '1vkiza' }],\n];\n\n/**\n * @component @name ArrowUpRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNyA3aDEwdjEwIiAvPgogIDxwYXRoIGQ9Ik03IDE3IDE3IDciIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/arrow-up-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowUpRight = createLucideIcon('arrow-up-right', __iconNode);\n\nexport default ArrowUpRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]];\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('chevron-down', __iconNode);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M10 5a2 2 0 0 0-1.344.519l-6.328 5.74a1 1 0 0 0 0 1.481l6.328 5.741A2 2 0 0 0 10 19h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2z',\n key: '1yo7s0',\n },\n ],\n ['path', { d: 'm12 9 6 6', key: 'anjzzh' }],\n ['path', { d: 'm18 9-6 6', key: '1fp51s' }],\n];\n\n/**\n * @component @name Delete\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgNWEyIDIgMCAwIDAtMS4zNDQuNTE5bC02LjMyOCA1Ljc0YTEgMSAwIDAgMCAwIDEuNDgxbDYuMzI4IDUuNzQxQTIgMiAwIDAgMCAxMCAxOWgxMGEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMnoiIC8+CiAgPHBhdGggZD0ibTEyIDkgNiA2IiAvPgogIDxwYXRoIGQ9Im0xOCA5LTYgNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/delete\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Delete = createLucideIcon('delete', __iconNode);\n\nexport default Delete;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M8 3H5a2 2 0 0 0-2 2v3', key: '1dcmit' }],\n ['path', { d: 'M21 8V5a2 2 0 0 0-2-2h-3', key: '1e4gt3' }],\n ['path', { d: 'M3 16v3a2 2 0 0 0 2 2h3', key: 'wsl5sc' }],\n ['path', { d: 'M16 21h3a2 2 0 0 0 2-2v-3', key: '18trek' }],\n];\n\n/**\n * @component @name Maximize\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAzSDVhMiAyIDAgMCAwLTIgMnYzIiAvPgogIDxwYXRoIGQ9Ik0yMSA4VjVhMiAyIDAgMCAwLTItMmgtMyIgLz4KICA8cGF0aCBkPSJNMyAxNnYzYTIgMiAwIDAgMCAyIDJoMyIgLz4KICA8cGF0aCBkPSJNMTYgMjFoM2EyIDIgMCAwIDAgMi0ydi0zIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/maximize\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Maximize = createLucideIcon('maximize', __iconNode);\n\nexport default Maximize;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 19v3', key: 'npa21l' }],\n ['path', { d: 'M15 9.34V5a3 3 0 0 0-5.68-1.33', key: '1gzdoj' }],\n ['path', { d: 'M16.95 16.95A7 7 0 0 1 5 12v-2', key: 'cqa7eg' }],\n ['path', { d: 'M18.89 13.23A7 7 0 0 0 19 12v-2', key: '16hl24' }],\n ['path', { d: 'm2 2 20 20', key: '1ooewy' }],\n ['path', { d: 'M9 9v3a3 3 0 0 0 5.12 2.12', key: 'r2i35w' }],\n];\n\n/**\n * @component @name MicOff\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTl2MyIgLz4KICA8cGF0aCBkPSJNMTUgOS4zNFY1YTMgMyAwIDAgMC01LjY4LTEuMzMiIC8+CiAgPHBhdGggZD0iTTE2Ljk1IDE2Ljk1QTcgNyAwIDAgMSA1IDEydi0yIiAvPgogIDxwYXRoIGQ9Ik0xOC44OSAxMy4yM0E3IDcgMCAwIDAgMTkgMTJ2LTIiIC8+CiAgPHBhdGggZD0ibTIgMiAyMCAyMCIgLz4KICA8cGF0aCBkPSJNOSA5djNhMyAzIDAgMCAwIDUuMTIgMi4xMiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/mic-off\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MicOff = createLucideIcon('mic-off', __iconNode);\n\nexport default MicOff;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 19v3', key: 'npa21l' }],\n ['path', { d: 'M19 10v2a7 7 0 0 1-14 0v-2', key: '1vc78b' }],\n ['rect', { x: '9', y: '2', width: '6', height: '13', rx: '3', key: 's6n7sd' }],\n];\n\n/**\n * @component @name Mic\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTl2MyIgLz4KICA8cGF0aCBkPSJNMTkgMTB2MmE3IDcgMCAwIDEtMTQgMHYtMiIgLz4KICA8cmVjdCB4PSI5IiB5PSIyIiB3aWR0aD0iNiIgaGVpZ2h0PSIxMyIgcng9IjMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/mic\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Mic = createLucideIcon('mic', __iconNode);\n\nexport default Mic;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm14 10 7-7', key: 'oa77jy' }],\n ['path', { d: 'M20 10h-6V4', key: 'mjg0md' }],\n ['path', { d: 'm3 21 7-7', key: 'tjx5ai' }],\n ['path', { d: 'M4 14h6v6', key: 'rmj7iw' }],\n];\n\n/**\n * @component @name Minimize2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTQgMTAgNy03IiAvPgogIDxwYXRoIGQ9Ik0yMCAxMGgtNlY0IiAvPgogIDxwYXRoIGQ9Im0zIDIxIDctNyIgLz4KICA8cGF0aCBkPSJNNCAxNGg2djYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/minimize-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Minimize2 = createLucideIcon('minimize-2', __iconNode);\n\nexport default Minimize2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384',\n key: '9njp5v',\n },\n ],\n];\n\n/**\n * @component @name Phone\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTMuODMyIDE2LjU2OGExIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgNi4zOTIgNi4zODQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/phone\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Phone = createLucideIcon('phone', __iconNode);\n\nexport default Phone;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2', key: '975kel' }],\n ['circle', { cx: '12', cy: '7', r: '4', key: '17ys0d' }],\n];\n\n/**\n * @component @name User\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTkgMjF2LTJhNCA0IDAgMCAwLTQtNEg5YTQgNCAwIDAgMC00IDR2MiIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjciIHI9IjQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/user\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst User = createLucideIcon('user', __iconNode);\n\nexport default User;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","'use client';\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useCall } from '../index';\nimport {\n Phone,\n Mic,\n MicOff,\n Maximize,\n Minimize2,\n ArrowUpRight,\n ArrowDownLeft,\n} from 'lucide-react';\n\ninterface CallInterfaceProps {\n isOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n onCallEnded?: () => void;\n maximizeIcon?: React.ReactNode;\n minimizeIcon?: React.ReactNode;\n}\n\nexport function CallInterface({\n isOpen = false,\n onOpenChange,\n onCallEnded,\n maximizeIcon,\n minimizeIcon,\n}: CallInterfaceProps) {\n const {\n sdk,\n callStatus,\n currentCall,\n callDuration,\n isMuted,\n hangup,\n answerCall,\n toggleMute,\n callError,\n } = useCall();\n\n const [isMinimized, setIsMinimized] = useState(false);\n const [wasConnected, setWasConnected] = useState(false);\n const [closeCountdown, setCloseCountdown] = useState<number | null>(null);\n const [connectingCountdown, setConnectingCountdown] = useState<number | null>(null);\n\n const audioRef = useRef<HTMLAudioElement | null>(null);\n const ringtoneRef = useRef<HTMLAudioElement | null>(null);\n\n const isIncoming = currentCall?.direction === 'inbound';\n const remoteNumber = currentCall?.remoteNumber || 'Unknown';\n const displayName = remoteNumber;\n\n // Attach remote stream to audio element\n useEffect(() => {\n if (!currentCall || !sdk || !audioRef.current) return;\n\n const updateStream = (stream: MediaStream) => {\n if (audioRef.current && stream && audioRef.current.srcObject !== stream) {\n audioRef.current.srcObject = stream;\n audioRef.current.play().catch(err => {\n console.warn('SDK UI: Auto-play failed, user interaction might be needed:', err);\n });\n }\n };\n\n // Handle stream from events (emitted when SSRC changes or bridge occurs)\n const handleStream = (call: any, stream: MediaStream) => {\n if (call.id === currentCall.id) {\n updateStream(stream);\n }\n };\n\n // Initial check for existing stream\n const initialStream = currentCall.getRemoteStream ? currentCall.getRemoteStream() : null;\n if (initialStream) updateStream(initialStream);\n\n sdk.on('call:stream', handleStream);\n return () => {\n sdk.off('call:stream', handleStream);\n };\n }, [currentCall, sdk, callStatus]);\n\n // Play ringtone for incoming calls\n useEffect(() => {\n if (callStatus === 'ringing' && isIncoming) {\n onOpenChange?.(true);\n ringtoneRef.current?.play().catch(() => { });\n } else {\n if (ringtoneRef.current) {\n ringtoneRef.current.pause();\n ringtoneRef.current.currentTime = 0;\n }\n }\n }, [callStatus, isIncoming, onOpenChange]);\n\n // Track connection state\n useEffect(() => {\n if (callStatus === 'connecting' || callStatus === 'ringing') {\n setWasConnected(false); // Reset on new call\n }\n if (callStatus === 'ongoing') {\n setWasConnected(true);\n }\n }, [callStatus]);\n\n // Handle call ended state and auto-close\n useEffect(() => {\n if (isOpen && callStatus === 'ended') {\n onCallEnded?.();\n const closeDelay = wasConnected ? 1500 : 3000;\n const start = Date.now();\n const iv = setInterval(() => {\n const remaining = Math.max(0, closeDelay - (Date.now() - start));\n setCloseCountdown(Math.ceil(remaining / 1000));\n\n if (remaining <= 0) {\n clearInterval(iv);\n onOpenChange?.(false);\n // Reset minimized state for the next call\n setIsMinimized(false);\n }\n }, 100);\n return () => clearInterval(iv);\n } else {\n setCloseCountdown(null);\n }\n }, [callStatus, isOpen, onOpenChange, wasConnected, onCallEnded]);\n\n // 60-second connection timeout for outbound calls\n useEffect(() => {\n let iv: ReturnType<typeof setInterval>;\n if (isOpen && callStatus === 'connecting' && !isIncoming) {\n setConnectingCountdown(60);\n iv = setInterval(() => {\n setConnectingCountdown((prev) => {\n if (prev === null || prev <= 0) {\n clearInterval(iv);\n if (callStatus === 'connecting') hangup();\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n } else {\n setConnectingCountdown(null);\n }\n return () => clearInterval(iv);\n }, [callStatus, isOpen, isIncoming, hangup]);\n\n if (!isOpen && callStatus === 'idle') return null;\n\n return (\n <div\n role=\"dialog\"\n aria-label=\"Call interface\"\n className={`dora-fixed dora-top-14 md:dora-top-16 dora-right-0 md:dora-right-4 dora-z-50 dora-transform dora-transition-all dora-duration-300 dora-ease-in-out dora-bg-[#1E1E1E] dora-shadow-xl ${isOpen ? 'dora-translate-x-0' : 'dora-translate-x-[110%]'\n } ${isMinimized\n ? 'dora-w-48 dora-h-20 dora-rounded-2xl dora-p-4 dora-flex dora-items-center dora-justify-between'\n : 'dora-w-full sm:dora-w-96 md:dora-max-w-sm max-h-[calc(100vh-3.5rem)] md:dora-max-h-[calc(100vh-4rem)] dora-rounded-none md:dora-rounded-2xl'\n }`}\n >\n <audio ref={audioRef} autoPlay className=\"dora-hidden\" />\n <audio\n ref={ringtoneRef}\n src=\"https://assets.mixkit.co/active_storage/sfx/2358/2358-preview.mp3\"\n loop\n preload=\"auto\"\n className=\"dora-hidden\"\n />\n\n {isMinimized ? (\n <div className=\"dora-flex dora-items-center dora-justify-between dora-w-full dora-h-full\">\n <button\n onClick={() => setIsMinimized(false)}\n className=\"dora-w-10 dora-h-10 dora-rounded-full dora-bg-[#2A2A2A] dora-flex dora-items-center dora-justify-center dora-text-slate-400 hover:dora-text-white dora-transition-colors\"\n aria-label=\"Maximize\"\n >\n {maximizeIcon || <Maximize size={18} />}\n </button>\n <div className=\"dora-relative dora-flex dora-items-center\">\n <div className=\"dora-w-11 dora-h-11 dora-rounded-full dora-bg-white dora-flex dora-items-center dora-justify-center dora--mr-3\">\n <span className=\"dora-text-xl dora-text-slate-900 dora-font-bold\">\n {displayName.charAt(0).toUpperCase()}\n </span>\n </div>\n <button\n onClick={hangup}\n className=\"dora-w-11 dora-h-11 dora-rounded-full dora-bg-red-500 dora-text-white dora-flex dora-items-center dora-justify-center dora-shadow-lg hover:dora-bg-red-600 dora-transition-colors dora-z-10\"\n aria-label=\"End call\"\n >\n <Phone size={18} className=\"dora-transform dora-rotate-[135deg]\" />\n </button>\n </div>\n </div>\n ) : (\n <div className=\"dora-flex dora-flex-col dora-py-4 md:dora-py-6 dora-gap-2.5 md:dora-gap-3.5 dora-px-3 md:dora-px-5 dora-relative\">\n <button\n onClick={() => setIsMinimized(true)}\n className=\"dora-absolute dora-top-2 dora-right-2 dora-text-slate-500 hover:dora-text-white dora-transition-colors\"\n aria-label=\"Minimize\"\n >\n {minimizeIcon || <Minimize2 size={16} />}\n </button>\n\n <div className=\"dora-flex dora-justify-between dora-gap-2 dora-items-start md:dora-items-center\">\n <div className=\"dora-flex dora-items-center dora-gap-2.5 md:dora-gap-4 dora-min-w-0\">\n <div className=\"dora-w-9 md:dora-w-11 dora-h-9 md:dora-h-11 dora-rounded-full dora-bg-white dora-flex dora-items-center dora-justify-center dora-shrink-0\">\n <span className=\"dora-text-lg md:dora-text-2xl dora-text-slate-900 dora-font-bold\">\n {displayName.charAt(0).toUpperCase()}\n </span>\n </div>\n <div className=\"dora-min-w-0 dora-flex-1\">\n <h2 className=\"dora-text-base md:dora-text-xl dora-font-normal dora-text-white dora-truncate\">\n {isIncoming ? displayName : (displayName === 'Unknown' ? 'Outgoing Call' : displayName)}\n </h2>\n <p className=\"dora-text-slate-400 dora-text-xs md:dora-text-sm dora-truncate\">\n {remoteNumber} &bull;{' '}\n {isMuted ? (\n <span className=\"dora-text-[#F99578]\">Call muted</span>\n ) : (\n <>\n {(callStatus === 'connecting' || callStatus === 'ringing') && (\n <span>\n {isIncoming ? 'Incoming Call...' : callStatus === 'connecting' ? 'Connecting...' : 'Ringing...'}\n </span>\n )}\n {callStatus === 'ongoing' && <span>On Call</span>}\n {callStatus === 'ended' && <span>Call Ended</span>}\n </>\n )}\n </p>\n </div>\n </div>\n\n <div className=\"dora-flex dora-items-center dora-justify-center dora-gap-1.5 md:dora-gap-3 dora-shrink-0\">\n {isIncoming && callStatus === 'ringing' && (\n <button\n onClick={answerCall}\n className=\"dora-rounded-full dora-bg-green-500 dora-text-white hover:dora-bg-green-600 dora-transition-colors dora-w-8 md:dora-w-9 dora-h-8 md:dora-h-9 dora-flex dora-items-center dora-justify-center dora-shrink-0\"\n aria-label=\"Answer\"\n >\n <Phone size={18} />\n </button>\n )}\n\n {(callStatus === 'ongoing' || (isIncoming && callStatus === 'ringing')) && (\n <button\n onClick={toggleMute}\n className={`dora-rounded-full dora-transition-colors dora-w-8 md:dora-w-9 dora-h-8 md:dora-h-9 dora-flex dora-items-center dora-justify-center dora-shrink-0 ${isMuted ? 'dora-bg-slate-700 hover:dora-bg-slate-600 dora-text-white' : 'dora-bg-[#2A2A2A] hover:dora-bg-[#333333] dora-text-slate-400'\n }`}\n aria-label=\"Toggle mute\"\n >\n {isMuted ? <MicOff size={18} /> : <Mic size={18} />}\n </button>\n )}\n\n <button\n onClick={hangup}\n className=\"dora-rounded-full dora-bg-red-600 dora-text-white hover:dora-bg-red-700 dora-transition-colors dora-w-8 md:dora-w-9 dora-h-8 md:dora-h-9 dora-flex dora-items-center dora-justify-center dora-shrink-0\"\n aria-label={isIncoming && callStatus === 'ringing' ? 'Decline' : 'End call'}\n >\n <Phone size={18} className=\"dora-transform dora-rotate-[135deg]\" />\n </button>\n </div>\n </div>\n\n <div className=\"dora-flex-1 dora-border-t dora-border-[#282828] dora-mt-2 dora-mb-2\" />\n\n {callError && callStatus === 'ended' && (\n <div className=\"dora-bg-red-900/20 dora-border dora-border-red-500/30 dora-rounded-lg dora-p-2 md:dora-p-3 dora-mb-2 md:dora-mb-3\">\n <p className=\"dora-text-red-400 dora-text-xs md:dora-text-sm dora-font-medium\">\n Call Failed\n </p>\n <p className=\"dora-text-red-300 dora-text-xs dora-mt-0.5 md:dora-mt-1\">\n {callError}\n </p>\n {closeCountdown !== null && (\n <div className=\"dora-mt-1.5 md:dora-mt-2\">\n <div className=\"dora-w-full dora-bg-red-900/30 dora-rounded-full dora-h-1.5 dora-overflow-hidden\">\n <div\n className=\"dora-bg-red-500 dora-h-full dora-transition-all dora-duration-100\"\n style={{\n width: `${Math.max(\n 0,\n (closeCountdown / (wasConnected ? 1 : 5)) * 100,\n )}%`,\n }}\n />\n </div>\n <p className=\"dora-text-xs dora-text-red-300 dora-mt-0.5 md:dora-mt-1 dora-text-center\">\n Closing in {closeCountdown}s\n </p>\n </div>\n )}\n </div>\n )}\n\n <div className=\"dora-flex dora-justify-between dora-items-center\">\n <div className=\"dora-text-slate-400 dora-text-xs md:dora-text-sm dora-font-light dora-tracking-wide dora-flex dora-items-center dora-gap-1\">\n {(callStatus === 'connecting' || callStatus === 'ringing') && (\n <span>{isIncoming ? 'Incoming call' : 'Outgoing call'}</span>\n )}\n {callStatus === 'ongoing' && <span>Ongoing</span>}\n {callStatus === 'ended' && <span>Call ended</span>}\n {(callStatus === 'connecting' || callStatus === 'ringing' || callStatus === 'ongoing') && (\n isIncoming\n ? <ArrowDownLeft className=\"dora-inline-block dora-ml-1 dora-text-green-400\" size={16} />\n : <ArrowUpRight className=\"dora-inline-block dora-ml-1 dora-text-blue-400\" size={16} />\n )}\n </div>\n\n {callStatus === 'ongoing' && (\n <div className=\"dora-bg-[#272727] dora-h-6 md:dora-h-7 dora-rounded-full dora-px-3 md:dora-px-4 dora-text-white dora-font-normal dora-text-xs md:dora-text-sm dora-flex dora-items-center dora-justify-center\">\n <span>{callDuration}</span>\n </div>\n )}\n\n {callStatus === 'ended' && closeCountdown !== null && (\n <div className=\"dora-bg-[#272727] dora-h-6 md:dora-h-7 dora-rounded-full dora-px-3 md:dora-px-4 dora-text-slate-400 dora-font-normal dora-text-xs dora-flex dora-items-center dora-justify-center dora-gap-1\">\n <span>Closing in {closeCountdown}s</span>\n </div>\n )}\n\n {(connectingCountdown !== null || callStatus === 'ringing') && !isIncoming && callStatus !== 'ongoing' && callStatus !== 'ended' && (\n <div className=\"dora-bg-[#272727] dora-h-8 dora-rounded-full dora-px-3 md:dora-px-4 dora-text-white dora-font-normal dora-text-xs md:dora-text-sm dora-flex dora-items-center dora-justify-center dora-gap-2\">\n <span className=\"dora-text-[#F99578] dora-whitespace-nowrap\">\n {callStatus === 'ringing' ? 'Ringing...' : 'Connecting...'}\n </span>\n {callStatus === 'connecting' && connectingCountdown && (\n <span className=\"dora-font-mono dora-ml-1 dora-text-slate-400\">\n {Math.floor(connectingCountdown / 60)}:{String(connectingCountdown % 60).padStart(2, '0')}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useEffect } from \"react\";\nimport {\n useCall,\n useConnectionStatus,\n useExtensions,\n CreditBalance,\n} from \"../index\";\nimport { Phone, Delete, X, User, ChevronDown } from \"lucide-react\";\n\ninterface DialpadProps {\n onCallInitiated?: (number: string) => void;\n initialNumber?: string;\n showKeys?: boolean;\n className?: string;\n availableExtensions?: Array<{ label: string; value: string }>;\n selectedExtension?: string;\n onExtensionChange?: (ext: string) => void;\n}\n\nexport function Dialpad({\n onCallInitiated,\n initialNumber = \"\",\n showKeys = true,\n className = \"\",\n availableExtensions: providedExtensions,\n selectedExtension: providedSelectedExtension,\n onExtensionChange,\n}: DialpadProps) {\n const { call, callStatus } = useCall();\n const { isConnected } = useConnectionStatus();\n const { extensions: fetchedExtensions, setExtension } = useExtensions();\n\n const [number, setNumber] = useState(initialNumber);\n const [keysVisible, setKeysVisible] = useState(showKeys);\n const [localSelectedExt, setLocalSelectedExt] = useState(providedSelectedExtension || \"\");\n\n const extensions = providedExtensions?.length\n ? providedExtensions\n : fetchedExtensions.map((ext) => ({\n label: ext.extension,\n value: ext.extension,\n }));\n\n // Sync local state ONLY when the prop value changes and is different\n useEffect(() => {\n if (providedSelectedExtension && providedSelectedExtension !== localSelectedExt) {\n setLocalSelectedExt(providedSelectedExtension);\n }\n }, [providedSelectedExtension]);\n\n // If we have no local selection but extensions loaded, pick the first one\n useEffect(() => {\n if (!localSelectedExt && extensions.length > 0) {\n setLocalSelectedExt(extensions[0].value);\n }\n }, [extensions, localSelectedExt]);\n\n const activeExtension = localSelectedExt || (extensions.length > 0 ? extensions[0].value : \"\");\n\n const append = (digit: string) => setNumber((s) => s + digit);\n const backspace = () => setNumber((s) => s.slice(0, -1));\n\n const handleExtensionChange = async (ext: string) => {\n setLocalSelectedExt(ext);\n onExtensionChange?.(ext);\n // Re-initialize SIP with new extension\n await setExtension(ext);\n };\n\n const handleCall = async () => {\n if (!number || number.trim() === \"\") return;\n try {\n await call(number, activeExtension);\n onCallInitiated?.(number);\n } catch (e) {\n // Error is handled via SDK events\n }\n };\n\n const isCallDisabled =\n !number ||\n number.trim() === \"\" ||\n !isConnected ||\n callStatus === \"ringing\" ||\n callStatus === \"ongoing\" ||\n callStatus === \"connecting\";\n\n const keypad_icon = (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.5333 3.2006C11.5339 3.50413 11.4444 3.801 11.2759 4.05352C11.1075 4.30605 10.8679 4.50284 10.5874 4.61891C10.3069 4.73499 9.99832 4.76512 9.70071 4.70548C9.40309 4.64584 9.12991 4.49911 8.91583 4.28393C8.77351 4.14156 8.66063 3.97254 8.58363 3.78654C8.50662 3.60054 8.46701 3.4012 8.46705 3.19989C8.46709 2.99858 8.50678 2.79925 8.58385 2.61328C8.66093 2.4273 8.77387 2.25834 8.91625 2.11602C9.05862 1.9737 9.22764 1.86081 9.41364 1.78381C9.59964 1.70681 9.79898 1.6672 10.0003 1.66723C10.2016 1.66727 10.4009 1.70696 10.5869 1.78404C10.7729 1.86111 10.9418 1.97406 11.0842 2.11643C11.3717 2.40393 11.5342 2.7931 11.5342 3.19977M14.5333 4.73227C14.7376 4.73703 14.9408 4.7009 15.131 4.62601C15.3211 4.55111 15.4944 4.43896 15.6406 4.29614C15.7868 4.15333 15.9029 3.98273 15.9822 3.79438C16.0616 3.60602 16.1024 3.40372 16.1024 3.19935C16.1024 2.99498 16.0616 2.79267 15.9822 2.60432C15.9029 2.41597 15.7868 2.24537 15.6406 2.10255C15.4944 1.95974 15.3211 1.84759 15.131 1.77269C14.9408 1.6978 14.7376 1.66167 14.5333 1.66643C14.1267 1.66643 13.7367 1.82798 13.4491 2.11554C13.1615 2.40309 13 2.7931 13 3.19977C13 3.60643 13.1615 3.99644 13.4491 4.284C13.7367 4.57155 14.1267 4.73227 14.5333 4.73227ZM7 3.2006C7.00061 3.50413 6.91102 3.801 6.7426 4.05352C6.57419 4.30605 6.33454 4.50284 6.05408 4.61891C5.77362 4.73499 5.46499 4.76512 5.16737 4.70548C4.86976 4.64584 4.59657 4.49911 4.3825 4.28393C4.24018 4.14161 4.12728 3.97265 4.05026 3.7867C3.97324 3.60075 3.93359 3.40145 3.93359 3.20018C3.93359 2.99891 3.97324 2.79961 4.05026 2.61366C4.12728 2.42771 4.24018 2.25875 4.3825 2.11643C4.52482 1.97411 4.69378 1.86122 4.87973 1.78419C5.06568 1.70717 5.26498 1.66753 5.46625 1.66753C5.66752 1.66753 5.86682 1.70717 6.05277 1.78419C6.23872 1.86122 6.40768 1.97411 6.55 2.11643C6.8375 2.40393 6.99917 2.7931 6.99917 3.19977M11.5333 7.7306C11.5352 7.93448 11.4964 8.1367 11.4192 8.32539C11.342 8.51409 11.2279 8.68548 11.0836 8.82952C10.9392 8.97357 10.7677 9.08737 10.5788 9.16426C10.39 9.24114 10.1877 9.27958 9.98381 9.2773C9.77993 9.27503 9.57856 9.2321 9.39148 9.15102C9.2044 9.06994 9.03538 8.95234 8.89433 8.80511C8.75327 8.65789 8.64301 8.484 8.57 8.29362C8.497 8.10325 8.46272 7.90022 8.46917 7.69643C8.48185 7.29562 8.65113 6.91575 8.94068 6.63833C9.23024 6.3609 9.617 6.20802 10.018 6.21249C10.419 6.21697 10.8022 6.37843 11.0855 6.66224C11.3688 6.94606 11.5296 7.32961 11.5333 7.7306ZM14.5333 9.2631C14.7376 9.26786 14.9408 9.23174 15.131 9.15684C15.3211 9.08194 15.4944 8.96979 15.6406 8.82698C15.7868 8.68416 15.9029 8.51356 15.9822 8.32521C16.0616 8.13686 16.1024 7.93455 16.1024 7.73018C16.1024 7.52581 16.0616 7.32351 15.9822 7.13515C15.9029 6.9468 15.7868 6.7762 15.6406 6.63339C15.4944 6.49057 15.3211 6.37842 15.131 6.30352C14.9408 6.22863 14.7376 6.1925 14.5333 6.19727C14.1267 6.19727 13.7367 6.35881 13.4491 6.64637C13.1615 6.93392 13 7.32393 13 7.7306C13 8.13726 13.1615 8.52727 13.4491 8.81483C13.7367 9.10239 14.1267 9.26393 14.5333 9.26393M7 7.7306C7.00021 8.03395 6.91038 8.33054 6.7419 8.58281C6.57341 8.83507 6.33385 9.03165 6.05356 9.14766C5.77326 9.26367 5.46485 9.29389 5.16737 9.23448C4.86989 9.17506 4.59673 9.0287 4.3825 8.81393C4.20461 8.63559 4.07342 8.41615 4.00054 8.17503C3.92766 7.93391 3.91534 7.67854 3.96468 7.43152C4.01401 7.1845 4.12347 6.95345 4.28337 6.75882C4.44328 6.56419 4.64869 6.41197 4.88144 6.31564C5.11419 6.21931 5.36709 6.18184 5.61777 6.20654C5.86845 6.23124 6.10918 6.31735 6.31865 6.45725C6.52812 6.59716 6.69988 6.78654 6.81872 7.00864C6.93756 7.23073 6.99982 7.4787 7 7.7306ZM11.5333 12.2623C11.5348 12.4893 11.4857 12.7138 11.3897 12.9196C11.2937 13.1253 11.1532 13.3071 10.9783 13.4519C10.8034 13.5967 10.5985 13.7007 10.3784 13.7566C10.1583 13.8124 9.9286 13.8186 9.70583 13.7748C9.42088 13.7191 9.1576 13.5836 8.94662 13.3841C8.73564 13.1847 8.58563 12.9294 8.51403 12.648C8.44244 12.3666 8.4522 12.0707 8.5422 11.7947C8.63219 11.5186 8.79871 11.2738 9.02238 11.0887C9.24606 10.9036 9.51769 10.7857 9.8057 10.7489C10.0937 10.7122 10.3862 10.7579 10.6493 10.8808C10.9123 11.0038 11.135 11.1989 11.2915 11.4434C11.448 11.688 11.5319 11.9719 11.5333 12.2623ZM11.5333 16.8006C11.5337 17.0274 11.4836 17.2515 11.3868 17.4567C11.29 17.6618 11.1488 17.8429 10.9735 17.9868C10.7981 18.1308 10.593 18.2339 10.3729 18.2889C10.1528 18.3439 9.92326 18.3493 9.70083 18.3048C9.40375 18.2453 9.13093 18.0992 8.91681 17.8849C8.70269 17.6705 8.55688 17.3975 8.49777 17.1004C8.43866 16.8032 8.46891 16.4952 8.58469 16.2152C8.70048 15.9353 8.89661 15.6959 9.14833 15.5273C9.37915 15.3731 9.64749 15.2845 9.92473 15.2708C10.202 15.2572 10.4777 15.3191 10.7225 15.4499C10.9673 15.5807 11.1721 15.7755 11.3149 16.0135C11.4577 16.2515 11.5332 16.523 11.5333 16.8006ZM16.0667 12.2623C16.0681 12.4893 16.019 12.7138 15.923 12.9196C15.827 13.1253 15.6865 13.3071 15.5116 13.4519C15.3367 13.5967 15.1318 13.7007 14.9117 13.7566C14.6917 13.8124 14.4619 13.8186 14.2392 13.7748C14.0165 13.7312 13.8062 13.6388 13.6236 13.5041C13.4409 13.3695 13.2904 13.1959 13.183 12.9961C13.0755 12.7962 13.0137 12.575 13.0021 12.3484C12.9905 12.1218 13.0294 11.8954 13.1158 11.6856C13.2509 11.3581 13.4952 11.0875 13.8072 10.9197C14.1193 10.7519 14.4797 10.6974 14.8274 10.7653C15.1751 10.8333 15.4886 11.0195 15.7145 11.2924C15.9404 11.5653 16.0648 11.908 16.0667 12.2623ZM7 12.2623C7.00227 12.5661 6.91412 12.8638 6.74675 13.1174C6.57939 13.371 6.34039 13.5691 6.06013 13.6864C5.77987 13.8038 5.47104 13.8352 5.1729 13.7766C4.87476 13.718 4.60079 13.572 4.38583 13.3573C4.20705 13.1796 4.07483 12.9606 4.00086 12.7196C3.9269 12.4787 3.91347 12.2232 3.96176 11.9759C4.01006 11.7285 4.11859 11.4968 4.27776 11.3014C4.43692 11.106 4.64181 10.9528 4.87428 10.8554C5.10676 10.758 5.35966 10.7194 5.61059 10.7431C5.86153 10.7668 6.10276 10.8519 6.31294 10.991C6.52313 11.1301 6.69578 11.3189 6.81561 11.5406C6.93545 11.7624 6.99878 12.0102 7 12.2623Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n\n return (\n <div className={`dora-bg-white dora-rounded-3xl ${className} dora-font-sans dora-relative dora-z-10`}>\n {/* Header with Logo and Credit Balance */}\n <div className=\"dora-flex dora-items-center dora-justify-between dora-mb-6\">\n <div className=\"dora-bg-emerald-500 dora-text-white dora-px-3 dora-py-1.5 dora-rounded-lg dora-text-xs md:dora-text-sm dora-font-semibold dora-shadow-sm\">\n Dora-cell\n </div>\n <CreditBalance />\n </div>\n\n {/* Main Content Area */}\n <div className=\"dora-bg-zinc-50 dora-p-6 dora-rounded-3xl dora-border dora-border-zinc-100 dora-shadow-inner\">\n {/* Caller ID Section */}\n <div className=\"dora-flex dora-items-center dora-justify-between dora-mb-5\">\n <span className=\"dora-text-zinc-500 dora-font-medium dora-text-sm dora-tracking-tight\">\n Caller ID\n </span>\n <div className=\"dora-relative\">\n <select\n disabled={extensions.length === 0}\n className=\"dora-appearance-none dora-bg-white dora-border dora-border-zinc-200 dora-rounded-xl dora-px-4 dora-py-2 dora-text-sm dora-font-semibold dora-text-zinc-900 dora-min-w-[170px] dora-pr-10 dora-outline-none focus:dora-border-emerald-500 dora-transition-all dora-shadow-sm disabled:dora-opacity-50\"\n value={activeExtension}\n onChange={(e) => handleExtensionChange(e.target.value)}\n >\n {extensions.length > 0 ? (\n extensions.map((ext) => (\n <option key={ext.value} value={ext.value}>\n {ext.label}\n </option>\n ))\n ) : (\n <option>Loading...</option>\n )}\n </select>\n <ChevronDown\n size={18}\n className=\"dora-absolute dora-right-4 dora-top-1/2 dora-transform dora--translate-y-1/2 dora-text-zinc-500 dora-pointer-events-none\"\n />\n </div>\n </div>\n\n {/* Input and Call Button */}\n <div className=\"dora-flex dora-items-center dora-gap-3 dora-mb-6\">\n <div className=\"dora-flex-1 dora-bg-white dora-border dora-border-zinc-200 dora-rounded-xl dora-flex dora-items-center dora-px-4 dora-h-12 dora-shadow-sm focus-within:dora-border-emerald-500 dora-transition-all\">\n <User size={18} className=\"dora-text-zinc-300 dora-mr-2\" />\n <input\n type=\"tel\"\n placeholder=\"Enter number\"\n value={number}\n onChange={(e) => setNumber(e.target.value)}\n className=\"dora-bg-transparent dora-border-none dora-outline-none dora-w-full dora-text-base dora-text-zinc-900 dora-font-medium dora-placeholder-zinc-300\"\n />\n </div>\n <button\n disabled={isCallDisabled}\n onClick={handleCall}\n className=\"dora-bg-emerald-500 dora-text-white dora-w-12 dora-h-12 dora-rounded-xl dora-flex dora-items-center dora-justify-center dora-shadow-lg dora-shadow-emerald-500/20 hover:dora-bg-emerald-600 active:dora-scale-95 dora-transition-all disabled:dora-opacity-50\"\n >\n <Phone size={20} fill=\"white\" className=\"dora-text-white\" />\n </button>\n </div>\n\n {/* Keypad and Controls */}\n <div className=\"dora-space-y-5\">\n {keysVisible ? (\n <div>\n <div className=\"dora-flex dora-mb-5\">\n <button\n onClick={() => setKeysVisible(false)}\n className=\"dora-flex dora-items-center dora-gap-2 dora-px-4 dora-py-2 dora-bg-white dora-border dora-border-zinc-200 dora-rounded-full dora-text-xs dora-font-semibold dora-text-zinc-600 hover:dora-bg-zinc-50 dora-transition-colors dora-shadow-sm active:dora-scale-95\"\n >\n <X size={16} className=\"dora-text-red-500\" />\n Close\n </button>\n </div>\n \n <div className=\"dora-grid dora-grid-cols-3 dora-gap-4\">\n {[\n \"1\", \"2\", \"3\",\n \"4\", \"5\", \"6\",\n \"7\", \"8\", \"9\",\n \"+\", \"0\", \"del\",\n ].map((d) => (\n <button\n key={d}\n onClick={() => (d === \"del\" ? backspace() : append(d))}\n className=\"dora-h-12 dora-bg-white dora-rounded-xl dora-flex dora-items-center dora-justify-center dora-text-lg dora-font-semibold dora-text-zinc-900 dora-shadow-sm border dora-border-zinc-50 hover:dora-bg-zinc-50 active:dora-scale-95 dora-transition-all\"\n >\n {d === \"del\" ? <Delete size={18} className=\"dora-text-zinc-500\" /> : d}\n </button>\n ))}\n </div>\n </div>\n ) : (\n <div className=\"dora-flex dora-justify-center\">\n <button\n onClick={() => setKeysVisible(true)}\n className=\"dora-flex dora-items-center dora-gap-2 dora-px-4 dora-py-2 dora-bg-white dora-border dora-border-zinc-200 dora-rounded-full dora-text-xs dora-font-semibold dora-text-zinc-500 hover:dora-bg-zinc-50 dora-transition-all active:dora-scale-95 dora-shadow-sm\"\n >\n <span className=\"dora-transform dora-scale-90\">{keypad_icon}</span>\n Open dialer\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n","/**\n * React bindings for Dora Cell SDK\n * Provides React Context and hooks for easy integration\n */\n\n'use client';\n\nimport React, { createContext, useContext, useEffect, useState, useRef } from 'react';\nimport { DoraCell } from '@dora-cell/sdk';\nimport type {\n DoraCellConfig,\n Call,\n CallStatus,\n ConnectionStatus,\n ConnectionState,\n} from '@dora-cell/sdk';\n\ninterface DoraCellContextValue {\n sdk: DoraCell | null;\n connectionStatus: ConnectionStatus;\n currentCall: Call | null;\n callStatus: CallStatus;\n callDuration: string;\n isMuted: boolean;\n isInitialized: boolean;\n error: Error | null;\n extension: string | null;\n\n // Methods\n call: (phoneNumber: string, extension?: string) => Promise<void>;\n hangup: () => void;\n toggleMute: () => void;\n answerCall: () => void;\n}\n\nconst DoraCellContext = createContext<DoraCellContextValue | undefined>(undefined);\n\nexport interface DoraCellProviderProps {\n config: DoraCellConfig;\n children: React.ReactNode;\n autoInitialize?: boolean;\n}\n\nexport function DoraCellProvider({\n config,\n children,\n autoInitialize = true,\n}: DoraCellProviderProps) {\n const [sdk] = useState(() => new DoraCell(config));\n const [isInitialized, setIsInitialized] = useState(false);\n const [connectionStatus, setConnectionStatus] = useState<ConnectionStatus>('disconnected');\n const [currentCall, setCurrentCall] = useState<Call | null>(null);\n const [callStatus, setCallStatus] = useState<CallStatus>('idle');\n const [callDuration, setCallDuration] = useState('00:00');\n const [isMuted, setIsMuted] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [extension, setExtension] = useState<string | null>(null);\n\n const durationIntervalRef = useRef<number | null>(null);\n\n // Initialize SDK\n useEffect(() => {\n if (!autoInitialize) return;\n\n const initializeSdk = async () => {\n try {\n await sdk.initialize();\n setIsInitialized(true);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to initialize SDK'));\n }\n };\n\n initializeSdk();\n\n return () => {\n sdk.destroy();\n };\n }, [sdk, autoInitialize]);\n\n // Set up event listeners\n useEffect(() => {\n if (!sdk) return;\n\n const handleConnectionStatus = (state: ConnectionState) => {\n setConnectionStatus(state.status);\n if (state.extension) {\n setExtension(state.extension);\n }\n if (state.error) {\n setError(new Error(state.error));\n }\n };\n\n const handleIncomingCall = (call: Call) => {\n setCurrentCall(call);\n setCallStatus('ringing');\n };\n\n const handleOutgoingCall = (call: Call) => {\n setCurrentCall(call);\n setCallStatus('connecting');\n };\n\n const handleCallRinging = (call: Call) => {\n setCallStatus('ringing');\n };\n\n const handleCallConnected = (call: Call) => {\n setCallStatus('ongoing');\n };\n\n const handleCallEnded = (call: Call) => {\n setCallStatus('ended');\n setCurrentCall(null);\n setIsMuted(false);\n\n // Reset to idle after a delay\n setTimeout(() => {\n setCallStatus('idle');\n }, 3000);\n };\n\n const handleCallFailed = (call: Call, errorMsg: string) => {\n setError(new Error(errorMsg));\n setCallStatus('ended');\n setCurrentCall(null);\n };\n\n const handleError = (err: Error) => {\n setError(err);\n };\n\n sdk.on('connection:status', handleConnectionStatus);\n sdk.on('call:incoming', handleIncomingCall);\n sdk.on('call:outgoing', handleOutgoingCall);\n sdk.on('call:ringing', handleCallRinging);\n sdk.on('call:connected', handleCallConnected);\n sdk.on('call:ended', handleCallEnded);\n sdk.on('call:failed', handleCallFailed);\n sdk.on('error', handleError);\n\n return () => {\n sdk.off('connection:status', handleConnectionStatus);\n sdk.off('call:incoming', handleIncomingCall);\n sdk.off('call:outgoing', handleOutgoingCall);\n sdk.off('call:ringing', handleCallRinging);\n sdk.off('call:connected', handleCallConnected);\n sdk.off('call:ended', handleCallEnded);\n sdk.off('call:failed', handleCallFailed);\n sdk.off('error', handleError);\n };\n }, [sdk]);\n\n // Update call duration\n useEffect(() => {\n if (callStatus === 'ongoing' && currentCall) {\n durationIntervalRef.current = window.setInterval(() => {\n const duration = currentCall.duration;\n const mm = String(Math.floor(duration / 60)).padStart(2, '0');\n const ss = String(duration % 60).padStart(2, '0');\n setCallDuration(`${mm}:${ss}`);\n }, 1000);\n } else {\n setCallDuration('00:00');\n if (durationIntervalRef.current) {\n clearInterval(durationIntervalRef.current);\n durationIntervalRef.current = null;\n }\n }\n\n return () => {\n if (durationIntervalRef.current) {\n clearInterval(durationIntervalRef.current);\n }\n };\n }, [callStatus, currentCall]);\n\n // Methods\n const call = async (phoneNumber: string, extension?: string) => {\n try {\n setError(null);\n await sdk.call(phoneNumber, { extension });\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to make call'));\n throw err;\n }\n };\n\n const hangup = () => {\n try {\n sdk.hangup();\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to hang up'));\n }\n };\n\n const toggleMute = () => {\n if (!currentCall) return;\n\n if (isMuted) {\n currentCall.unmute();\n setIsMuted(false);\n } else {\n currentCall.mute();\n setIsMuted(true);\n }\n };\n\n const answerCall = async () => {\n try {\n await sdk.answerCall();\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to answer call'));\n }\n };\n\n const contextValue: DoraCellContextValue = {\n sdk,\n connectionStatus,\n currentCall,\n callStatus,\n callDuration,\n isMuted,\n isInitialized,\n error,\n call,\n hangup,\n toggleMute,\n answerCall,\n extension,\n };\n\n return (\n <DoraCellContext.Provider value={contextValue}>\n {children}\n </DoraCellContext.Provider>\n );\n}\n\n/**\n * Hook to access Dora Cell SDK context\n */\nexport function useDoraCell(): DoraCellContextValue {\n const context = useContext(DoraCellContext);\n if (!context) {\n throw new Error('useDoraCell must be used within DoraCellProvider');\n }\n return context;\n}\n\n/**\n * Hook for making calls\n */\nexport function useCall() {\n const { sdk, call, hangup, toggleMute, answerCall, callStatus, callDuration, isMuted, currentCall, error } = useDoraCell();\n\n return {\n sdk,\n call,\n hangup,\n toggleMute,\n answerCall,\n callStatus,\n callDuration,\n isMuted,\n currentCall,\n callError: error?.message,\n };\n}\n\n/**\n * Hook for connection status\n */\nexport function useConnectionStatus() {\n const { connectionStatus, isInitialized, error, extension } = useDoraCell();\n\n return {\n connectionStatus,\n isInitialized,\n isConnected: connectionStatus === 'registered',\n error,\n extension,\n };\n}\n\n/**\n * Hook to fetch wallet/credit balance\n */\nexport function useWallet() {\n const { sdk, isInitialized } = useDoraCell();\n const [data, setData] = useState<{ balance: number, currency: string } | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = async () => {\n if (!sdk || !isInitialized) return;\n \n setIsLoading(true);\n setError(null);\n try {\n const val = await sdk.getWallet();\n setData(val);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch wallet'));\n } finally {\n setIsLoading(false);\n }\n };\n\n useEffect(() => {\n if (isInitialized) {\n console.log('SDK: useWallet fetching data...');\n fetchData();\n }\n }, [isInitialized, sdk]);\n\n // Listen for call ended to refresh balance\n useEffect(() => {\n if (!sdk || !isInitialized) return;\n\n const handleCallEnded = () => {\n console.log('SDK: Call ended, refreshing wallet balance in 2 seconds...');\n // Refresh after a small delay to allow backend to process call billing\n setTimeout(fetchData, 2000);\n };\n\n sdk.on('call:ended', handleCallEnded);\n return () => {\n sdk.off('call:ended', handleCallEnded);\n };\n }, [sdk, isInitialized]);\n\n return {\n balance: data?.balance ?? 0,\n currency: data?.currency ?? 'NGN',\n isLoading,\n error,\n refresh: fetchData\n };\n}\n\n/**\n * Hook for managing extensions (DID numbers)\n */\nexport function useExtensions() {\n const { sdk, isInitialized } = useDoraCell();\n const [extensions, setExtensions] = useState<any[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchExtensions = async () => {\n if (!sdk || !isInitialized) return;\n \n setIsLoading(true);\n setError(null);\n try {\n const data = await sdk.fetchExtensions();\n setExtensions(data);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch extensions'));\n } finally {\n setIsLoading(false);\n }\n };\n\n const setExtension = async (extension: string) => {\n if (!sdk) return;\n await sdk.setExtension(extension);\n };\n\n useEffect(() => {\n if (isInitialized) {\n fetchExtensions();\n }\n }, [isInitialized, sdk]);\n\n return {\n extensions,\n isLoading,\n error,\n setExtension,\n refresh: fetchExtensions\n };\n}\n\n/**\n * Credit Balance component - mirrors main app style\n */\nexport function CreditBalance() {\n const { balance, currency, isLoading, error } = useWallet();\n\n if (error) {\n console.warn('SDK: CreditBalance error:', error);\n }\n\n const formatted = new Intl.NumberFormat('en-NG', {\n style: 'currency',\n currency: currency === 'NGN' ? 'NGN' : (currency || 'NGN'),\n }).format(balance);\n\n return (\n <div className=\"dora-credit-balance dora-px-4 dora-py-2 dora-bg-zinc-100 dora-border dora-border-zinc-200 dora-rounded-full dora-text-sm dora-text-zinc-600 dora-whitespace-nowrap dora-flex dora-items-center dora-shadow-sm\">\n <span className=\"dora-text-xs dora-text-zinc-500 dora-mr-2\">\n Credit balance:\n </span>\n <span className=\"dora-font-bold dora-text-zinc-800\">{isLoading ? \"...\" : formatted}</span>\n </div>\n );\n}\n\nexport * from './components';\n"]}
package/dist/index.mjs CHANGED
@@ -187,6 +187,7 @@ function CallInterface({
187
187
  minimizeIcon
188
188
  }) {
189
189
  const {
190
+ sdk,
190
191
  callStatus,
191
192
  currentCall,
192
193
  callDuration,
@@ -206,13 +207,27 @@ function CallInterface({
206
207
  const remoteNumber = currentCall?.remoteNumber || "Unknown";
207
208
  const displayName = remoteNumber;
208
209
  useEffect(() => {
209
- if (currentCall && audioRef.current) {
210
- const stream = currentCall.getRemoteStream();
211
- if (stream && audioRef.current.srcObject !== stream) {
210
+ if (!currentCall || !sdk || !audioRef.current) return;
211
+ const updateStream = (stream) => {
212
+ if (audioRef.current && stream && audioRef.current.srcObject !== stream) {
212
213
  audioRef.current.srcObject = stream;
214
+ audioRef.current.play().catch((err) => {
215
+ console.warn("SDK UI: Auto-play failed, user interaction might be needed:", err);
216
+ });
213
217
  }
214
- }
215
- }, [currentCall, callStatus]);
218
+ };
219
+ const handleStream = (call, stream) => {
220
+ if (call.id === currentCall.id) {
221
+ updateStream(stream);
222
+ }
223
+ };
224
+ const initialStream = currentCall.getRemoteStream ? currentCall.getRemoteStream() : null;
225
+ if (initialStream) updateStream(initialStream);
226
+ sdk.on("call:stream", handleStream);
227
+ return () => {
228
+ sdk.off("call:stream", handleStream);
229
+ };
230
+ }, [currentCall, sdk, callStatus]);
216
231
  useEffect(() => {
217
232
  if (callStatus === "ringing" && isIncoming) {
218
233
  onOpenChange?.(true);
@@ -434,17 +449,22 @@ function Dialpad({
434
449
  const { extensions: fetchedExtensions, setExtension } = useExtensions();
435
450
  const [number, setNumber] = useState(initialNumber);
436
451
  const [keysVisible, setKeysVisible] = useState(showKeys);
437
- const [localSelectedExt, setLocalSelectedExt] = useState("");
452
+ const [localSelectedExt, setLocalSelectedExt] = useState(providedSelectedExtension || "");
438
453
  const extensions = providedExtensions?.length ? providedExtensions : fetchedExtensions.map((ext) => ({
439
454
  label: ext.extension,
440
455
  value: ext.extension
441
456
  }));
442
- const activeExtension = providedSelectedExtension || localSelectedExt || (extensions.length > 0 ? extensions[0].value : "");
443
457
  useEffect(() => {
444
- if (!localSelectedExt && extensions.length > 0 && !providedSelectedExtension) {
458
+ if (providedSelectedExtension && providedSelectedExtension !== localSelectedExt) {
459
+ setLocalSelectedExt(providedSelectedExtension);
460
+ }
461
+ }, [providedSelectedExtension]);
462
+ useEffect(() => {
463
+ if (!localSelectedExt && extensions.length > 0) {
445
464
  setLocalSelectedExt(extensions[0].value);
446
465
  }
447
- }, [extensions, providedSelectedExtension]);
466
+ }, [extensions, localSelectedExt]);
467
+ const activeExtension = localSelectedExt || (extensions.length > 0 ? extensions[0].value : "");
448
468
  const append = (digit) => setNumber((s) => s + digit);
449
469
  const backspace = () => setNumber((s) => s.slice(0, -1));
450
470
  const handleExtensionChange = async (ext) => {
@@ -458,7 +478,6 @@ function Dialpad({
458
478
  await call(number, activeExtension);
459
479
  onCallInitiated?.(number);
460
480
  } catch (e) {
461
- console.error("Call failed", e);
462
481
  }
463
482
  };
464
483
  const isCallDisabled = !number || number.trim() === "" || !isConnected || callStatus === "ringing" || callStatus === "ongoing" || callStatus === "connecting";
@@ -717,9 +736,9 @@ function DoraCellProvider({
717
736
  setIsMuted(true);
718
737
  }
719
738
  };
720
- const answerCall = () => {
739
+ const answerCall = async () => {
721
740
  try {
722
- sdk.answerCall();
741
+ await sdk.answerCall();
723
742
  } catch (err) {
724
743
  setError(err instanceof Error ? err : new Error("Failed to answer call"));
725
744
  }
@@ -749,8 +768,9 @@ function useDoraCell() {
749
768
  return context;
750
769
  }
751
770
  function useCall() {
752
- const { call, hangup, toggleMute, answerCall, callStatus, callDuration, isMuted, currentCall, error } = useDoraCell();
771
+ const { sdk, call, hangup, toggleMute, answerCall, callStatus, callDuration, isMuted, currentCall, error } = useDoraCell();
753
772
  return {
773
+ sdk,
754
774
  call,
755
775
  hangup,
756
776
  toggleMute,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/shared/src/utils.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/defaultAttributes.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/Icon.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/createLucideIcon.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/arrow-down-left.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/arrow-up-right.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/chevron-down.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/delete.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/maximize.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/mic-off.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/mic.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/minimize-2.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/phone.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/user.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/x.ts","../src/components/CallInterface.tsx","../src/components/Dialpad.tsx","../src/index.tsx"],"names":["forwardRef","createElement","__iconNode","useState","useEffect","jsx","jsxs","useRef","call","extension"],"mappings":"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","file":"index.mjs","sourcesContent":["import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n\n/**\n * Is empty string\n *\n * @param {unknown} value\n * @returns {boolean} Whether the value is an empty string\n */\nexport const isEmptyString = (value: unknown): boolean => value === '';\n\n/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n};\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M17 7 7 17', key: '15tmo1' }],\n ['path', { d: 'M17 17H7V7', key: '1org7z' }],\n];\n\n/**\n * @component @name ArrowDownLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTcgNyA3IDE3IiAvPgogIDxwYXRoIGQ9Ik0xNyAxN0g3VjciIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/arrow-down-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowDownLeft = createLucideIcon('arrow-down-left', __iconNode);\n\nexport default ArrowDownLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M7 7h10v10', key: '1tivn9' }],\n ['path', { d: 'M7 17 17 7', key: '1vkiza' }],\n];\n\n/**\n * @component @name ArrowUpRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNyA3aDEwdjEwIiAvPgogIDxwYXRoIGQ9Ik03IDE3IDE3IDciIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/arrow-up-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowUpRight = createLucideIcon('arrow-up-right', __iconNode);\n\nexport default ArrowUpRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]];\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('chevron-down', __iconNode);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M10 5a2 2 0 0 0-1.344.519l-6.328 5.74a1 1 0 0 0 0 1.481l6.328 5.741A2 2 0 0 0 10 19h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2z',\n key: '1yo7s0',\n },\n ],\n ['path', { d: 'm12 9 6 6', key: 'anjzzh' }],\n ['path', { d: 'm18 9-6 6', key: '1fp51s' }],\n];\n\n/**\n * @component @name Delete\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgNWEyIDIgMCAwIDAtMS4zNDQuNTE5bC02LjMyOCA1Ljc0YTEgMSAwIDAgMCAwIDEuNDgxbDYuMzI4IDUuNzQxQTIgMiAwIDAgMCAxMCAxOWgxMGEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMnoiIC8+CiAgPHBhdGggZD0ibTEyIDkgNiA2IiAvPgogIDxwYXRoIGQ9Im0xOCA5LTYgNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/delete\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Delete = createLucideIcon('delete', __iconNode);\n\nexport default Delete;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M8 3H5a2 2 0 0 0-2 2v3', key: '1dcmit' }],\n ['path', { d: 'M21 8V5a2 2 0 0 0-2-2h-3', key: '1e4gt3' }],\n ['path', { d: 'M3 16v3a2 2 0 0 0 2 2h3', key: 'wsl5sc' }],\n ['path', { d: 'M16 21h3a2 2 0 0 0 2-2v-3', key: '18trek' }],\n];\n\n/**\n * @component @name Maximize\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAzSDVhMiAyIDAgMCAwLTIgMnYzIiAvPgogIDxwYXRoIGQ9Ik0yMSA4VjVhMiAyIDAgMCAwLTItMmgtMyIgLz4KICA8cGF0aCBkPSJNMyAxNnYzYTIgMiAwIDAgMCAyIDJoMyIgLz4KICA8cGF0aCBkPSJNMTYgMjFoM2EyIDIgMCAwIDAgMi0ydi0zIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/maximize\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Maximize = createLucideIcon('maximize', __iconNode);\n\nexport default Maximize;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 19v3', key: 'npa21l' }],\n ['path', { d: 'M15 9.34V5a3 3 0 0 0-5.68-1.33', key: '1gzdoj' }],\n ['path', { d: 'M16.95 16.95A7 7 0 0 1 5 12v-2', key: 'cqa7eg' }],\n ['path', { d: 'M18.89 13.23A7 7 0 0 0 19 12v-2', key: '16hl24' }],\n ['path', { d: 'm2 2 20 20', key: '1ooewy' }],\n ['path', { d: 'M9 9v3a3 3 0 0 0 5.12 2.12', key: 'r2i35w' }],\n];\n\n/**\n * @component @name MicOff\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTl2MyIgLz4KICA8cGF0aCBkPSJNMTUgOS4zNFY1YTMgMyAwIDAgMC01LjY4LTEuMzMiIC8+CiAgPHBhdGggZD0iTTE2Ljk1IDE2Ljk1QTcgNyAwIDAgMSA1IDEydi0yIiAvPgogIDxwYXRoIGQ9Ik0xOC44OSAxMy4yM0E3IDcgMCAwIDAgMTkgMTJ2LTIiIC8+CiAgPHBhdGggZD0ibTIgMiAyMCAyMCIgLz4KICA8cGF0aCBkPSJNOSA5djNhMyAzIDAgMCAwIDUuMTIgMi4xMiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/mic-off\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MicOff = createLucideIcon('mic-off', __iconNode);\n\nexport default MicOff;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 19v3', key: 'npa21l' }],\n ['path', { d: 'M19 10v2a7 7 0 0 1-14 0v-2', key: '1vc78b' }],\n ['rect', { x: '9', y: '2', width: '6', height: '13', rx: '3', key: 's6n7sd' }],\n];\n\n/**\n * @component @name Mic\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTl2MyIgLz4KICA8cGF0aCBkPSJNMTkgMTB2MmE3IDcgMCAwIDEtMTQgMHYtMiIgLz4KICA8cmVjdCB4PSI5IiB5PSIyIiB3aWR0aD0iNiIgaGVpZ2h0PSIxMyIgcng9IjMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/mic\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Mic = createLucideIcon('mic', __iconNode);\n\nexport default Mic;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm14 10 7-7', key: 'oa77jy' }],\n ['path', { d: 'M20 10h-6V4', key: 'mjg0md' }],\n ['path', { d: 'm3 21 7-7', key: 'tjx5ai' }],\n ['path', { d: 'M4 14h6v6', key: 'rmj7iw' }],\n];\n\n/**\n * @component @name Minimize2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTQgMTAgNy03IiAvPgogIDxwYXRoIGQ9Ik0yMCAxMGgtNlY0IiAvPgogIDxwYXRoIGQ9Im0zIDIxIDctNyIgLz4KICA8cGF0aCBkPSJNNCAxNGg2djYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/minimize-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Minimize2 = createLucideIcon('minimize-2', __iconNode);\n\nexport default Minimize2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384',\n key: '9njp5v',\n },\n ],\n];\n\n/**\n * @component @name Phone\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTMuODMyIDE2LjU2OGExIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgNi4zOTIgNi4zODQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/phone\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Phone = createLucideIcon('phone', __iconNode);\n\nexport default Phone;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2', key: '975kel' }],\n ['circle', { cx: '12', cy: '7', r: '4', key: '17ys0d' }],\n];\n\n/**\n * @component @name User\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTkgMjF2LTJhNCA0IDAgMCAwLTQtNEg5YTQgNCAwIDAgMC00IDR2MiIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjciIHI9IjQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/user\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst User = createLucideIcon('user', __iconNode);\n\nexport default User;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","'use client';\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useCall } from '../index';\nimport {\n Phone,\n Mic,\n MicOff,\n Maximize,\n Minimize2,\n ArrowUpRight,\n ArrowDownLeft,\n} from 'lucide-react';\n\ninterface CallInterfaceProps {\n isOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n onCallEnded?: () => void;\n maximizeIcon?: React.ReactNode;\n minimizeIcon?: React.ReactNode;\n}\n\nexport function CallInterface({\n isOpen = false,\n onOpenChange,\n onCallEnded,\n maximizeIcon,\n minimizeIcon,\n}: CallInterfaceProps) {\n const {\n callStatus,\n currentCall,\n callDuration,\n isMuted,\n hangup,\n answerCall,\n toggleMute,\n callError,\n } = useCall();\n\n const [isMinimized, setIsMinimized] = useState(false);\n const [wasConnected, setWasConnected] = useState(false);\n const [closeCountdown, setCloseCountdown] = useState<number | null>(null);\n const [connectingCountdown, setConnectingCountdown] = useState<number | null>(null);\n\n const audioRef = useRef<HTMLAudioElement | null>(null);\n const ringtoneRef = useRef<HTMLAudioElement | null>(null);\n\n const isIncoming = currentCall?.direction === 'inbound';\n const remoteNumber = currentCall?.remoteNumber || 'Unknown';\n const displayName = remoteNumber;\n\n // Attach remote stream to audio element\n useEffect(() => {\n if (currentCall && audioRef.current) {\n const stream = currentCall.getRemoteStream();\n if (stream && audioRef.current.srcObject !== stream) {\n audioRef.current.srcObject = stream;\n }\n }\n }, [currentCall, callStatus]);\n\n // Play ringtone for incoming calls\n useEffect(() => {\n if (callStatus === 'ringing' && isIncoming) {\n onOpenChange?.(true);\n ringtoneRef.current?.play().catch(() => { });\n } else {\n if (ringtoneRef.current) {\n ringtoneRef.current.pause();\n ringtoneRef.current.currentTime = 0;\n }\n }\n }, [callStatus, isIncoming, onOpenChange]);\n\n // Track connection state\n useEffect(() => {\n if (callStatus === 'connecting' || callStatus === 'ringing') {\n setWasConnected(false); // Reset on new call\n }\n if (callStatus === 'ongoing') {\n setWasConnected(true);\n }\n }, [callStatus]);\n\n // Handle call ended state and auto-close\n useEffect(() => {\n if (isOpen && callStatus === 'ended') {\n onCallEnded?.();\n const closeDelay = wasConnected ? 1500 : 3000;\n const start = Date.now();\n const iv = setInterval(() => {\n const remaining = Math.max(0, closeDelay - (Date.now() - start));\n setCloseCountdown(Math.ceil(remaining / 1000));\n\n if (remaining <= 0) {\n clearInterval(iv);\n onOpenChange?.(false);\n // Reset minimized state for the next call\n setIsMinimized(false);\n }\n }, 100);\n return () => clearInterval(iv);\n } else {\n setCloseCountdown(null);\n }\n }, [callStatus, isOpen, onOpenChange, wasConnected, onCallEnded]);\n\n // 60-second connection timeout for outbound calls\n useEffect(() => {\n let iv: ReturnType<typeof setInterval>;\n if (isOpen && callStatus === 'connecting' && !isIncoming) {\n setConnectingCountdown(60);\n iv = setInterval(() => {\n setConnectingCountdown((prev) => {\n if (prev === null || prev <= 0) {\n clearInterval(iv);\n if (callStatus === 'connecting') hangup();\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n } else {\n setConnectingCountdown(null);\n }\n return () => clearInterval(iv);\n }, [callStatus, isOpen, isIncoming, hangup]);\n\n if (!isOpen && callStatus === 'idle') return null;\n\n return (\n <div\n role=\"dialog\"\n aria-label=\"Call interface\"\n className={`dora-fixed dora-top-14 md:dora-top-16 dora-right-0 md:dora-right-4 dora-z-50 dora-transform dora-transition-all dora-duration-300 dora-ease-in-out dora-bg-[#1E1E1E] dora-shadow-xl ${isOpen ? 'dora-translate-x-0' : 'dora-translate-x-[110%]'\n } ${isMinimized\n ? 'dora-w-48 dora-h-20 dora-rounded-2xl dora-p-4 dora-flex dora-items-center dora-justify-between'\n : 'dora-w-full sm:dora-w-96 md:dora-max-w-sm max-h-[calc(100vh-3.5rem)] md:dora-max-h-[calc(100vh-4rem)] dora-rounded-none md:dora-rounded-2xl'\n }`}\n >\n <audio ref={audioRef} autoPlay className=\"dora-hidden\" />\n <audio\n ref={ringtoneRef}\n src=\"https://assets.mixkit.co/active_storage/sfx/2358/2358-preview.mp3\"\n loop\n preload=\"auto\"\n className=\"dora-hidden\"\n />\n\n {isMinimized ? (\n <div className=\"dora-flex dora-items-center dora-justify-between dora-w-full dora-h-full\">\n <button\n onClick={() => setIsMinimized(false)}\n className=\"dora-w-10 dora-h-10 dora-rounded-full dora-bg-[#2A2A2A] dora-flex dora-items-center dora-justify-center dora-text-slate-400 hover:dora-text-white dora-transition-colors\"\n aria-label=\"Maximize\"\n >\n {maximizeIcon || <Maximize size={18} />}\n </button>\n <div className=\"dora-relative dora-flex dora-items-center\">\n <div className=\"dora-w-11 dora-h-11 dora-rounded-full dora-bg-white dora-flex dora-items-center dora-justify-center dora--mr-3\">\n <span className=\"dora-text-xl dora-text-slate-900 dora-font-bold\">\n {displayName.charAt(0).toUpperCase()}\n </span>\n </div>\n <button\n onClick={hangup}\n className=\"dora-w-11 dora-h-11 dora-rounded-full dora-bg-red-500 dora-text-white dora-flex dora-items-center dora-justify-center dora-shadow-lg hover:dora-bg-red-600 dora-transition-colors dora-z-10\"\n aria-label=\"End call\"\n >\n <Phone size={18} className=\"dora-transform dora-rotate-[135deg]\" />\n </button>\n </div>\n </div>\n ) : (\n <div className=\"dora-flex dora-flex-col dora-py-4 md:dora-py-6 dora-gap-2.5 md:dora-gap-3.5 dora-px-3 md:dora-px-5 dora-relative\">\n <button\n onClick={() => setIsMinimized(true)}\n className=\"dora-absolute dora-top-2 dora-right-2 dora-text-slate-500 hover:dora-text-white dora-transition-colors\"\n aria-label=\"Minimize\"\n >\n {minimizeIcon || <Minimize2 size={16} />}\n </button>\n\n <div className=\"dora-flex dora-justify-between dora-gap-2 dora-items-start md:dora-items-center\">\n <div className=\"dora-flex dora-items-center dora-gap-2.5 md:dora-gap-4 dora-min-w-0\">\n <div className=\"dora-w-9 md:dora-w-11 dora-h-9 md:dora-h-11 dora-rounded-full dora-bg-white dora-flex dora-items-center dora-justify-center dora-shrink-0\">\n <span className=\"dora-text-lg md:dora-text-2xl dora-text-slate-900 dora-font-bold\">\n {displayName.charAt(0).toUpperCase()}\n </span>\n </div>\n <div className=\"dora-min-w-0 dora-flex-1\">\n <h2 className=\"dora-text-base md:dora-text-xl dora-font-normal dora-text-white dora-truncate\">\n {isIncoming ? displayName : (displayName === 'Unknown' ? 'Outgoing Call' : displayName)}\n </h2>\n <p className=\"dora-text-slate-400 dora-text-xs md:dora-text-sm dora-truncate\">\n {remoteNumber} &bull;{' '}\n {isMuted ? (\n <span className=\"dora-text-[#F99578]\">Call muted</span>\n ) : (\n <>\n {(callStatus === 'connecting' || callStatus === 'ringing') && (\n <span>\n {isIncoming ? 'Incoming Call...' : callStatus === 'connecting' ? 'Connecting...' : 'Ringing...'}\n </span>\n )}\n {callStatus === 'ongoing' && <span>On Call</span>}\n {callStatus === 'ended' && <span>Call Ended</span>}\n </>\n )}\n </p>\n </div>\n </div>\n\n <div className=\"dora-flex dora-items-center dora-justify-center dora-gap-1.5 md:dora-gap-3 dora-shrink-0\">\n {isIncoming && callStatus === 'ringing' && (\n <button\n onClick={answerCall}\n className=\"dora-rounded-full dora-bg-green-500 dora-text-white hover:dora-bg-green-600 dora-transition-colors dora-w-8 md:dora-w-9 dora-h-8 md:dora-h-9 dora-flex dora-items-center dora-justify-center dora-shrink-0\"\n aria-label=\"Answer\"\n >\n <Phone size={18} />\n </button>\n )}\n\n {(callStatus === 'ongoing' || (isIncoming && callStatus === 'ringing')) && (\n <button\n onClick={toggleMute}\n className={`dora-rounded-full dora-transition-colors dora-w-8 md:dora-w-9 dora-h-8 md:dora-h-9 dora-flex dora-items-center dora-justify-center dora-shrink-0 ${isMuted ? 'dora-bg-slate-700 hover:dora-bg-slate-600 dora-text-white' : 'dora-bg-[#2A2A2A] hover:dora-bg-[#333333] dora-text-slate-400'\n }`}\n aria-label=\"Toggle mute\"\n >\n {isMuted ? <MicOff size={18} /> : <Mic size={18} />}\n </button>\n )}\n\n <button\n onClick={hangup}\n className=\"dora-rounded-full dora-bg-red-600 dora-text-white hover:dora-bg-red-700 dora-transition-colors dora-w-8 md:dora-w-9 dora-h-8 md:dora-h-9 dora-flex dora-items-center dora-justify-center dora-shrink-0\"\n aria-label={isIncoming && callStatus === 'ringing' ? 'Decline' : 'End call'}\n >\n <Phone size={18} className=\"dora-transform dora-rotate-[135deg]\" />\n </button>\n </div>\n </div>\n\n <div className=\"dora-flex-1 dora-border-t dora-border-[#282828] dora-mt-2 dora-mb-2\" />\n\n {callError && callStatus === 'ended' && (\n <div className=\"dora-bg-red-900/20 dora-border dora-border-red-500/30 dora-rounded-lg dora-p-2 md:dora-p-3 dora-mb-2 md:dora-mb-3\">\n <p className=\"dora-text-red-400 dora-text-xs md:dora-text-sm dora-font-medium\">\n Call Failed\n </p>\n <p className=\"dora-text-red-300 dora-text-xs dora-mt-0.5 md:dora-mt-1\">\n {callError}\n </p>\n {closeCountdown !== null && (\n <div className=\"dora-mt-1.5 md:dora-mt-2\">\n <div className=\"dora-w-full dora-bg-red-900/30 dora-rounded-full dora-h-1.5 dora-overflow-hidden\">\n <div\n className=\"dora-bg-red-500 dora-h-full dora-transition-all dora-duration-100\"\n style={{\n width: `${Math.max(\n 0,\n (closeCountdown / (wasConnected ? 1 : 5)) * 100,\n )}%`,\n }}\n />\n </div>\n <p className=\"dora-text-xs dora-text-red-300 dora-mt-0.5 md:dora-mt-1 dora-text-center\">\n Closing in {closeCountdown}s\n </p>\n </div>\n )}\n </div>\n )}\n\n <div className=\"dora-flex dora-justify-between dora-items-center\">\n <div className=\"dora-text-slate-400 dora-text-xs md:dora-text-sm dora-font-light dora-tracking-wide dora-flex dora-items-center dora-gap-1\">\n {(callStatus === 'connecting' || callStatus === 'ringing') && (\n <span>{isIncoming ? 'Incoming call' : 'Outgoing call'}</span>\n )}\n {callStatus === 'ongoing' && <span>Ongoing</span>}\n {callStatus === 'ended' && <span>Call ended</span>}\n {(callStatus === 'connecting' || callStatus === 'ringing' || callStatus === 'ongoing') && (\n isIncoming\n ? <ArrowDownLeft className=\"dora-inline-block dora-ml-1 dora-text-green-400\" size={16} />\n : <ArrowUpRight className=\"dora-inline-block dora-ml-1 dora-text-blue-400\" size={16} />\n )}\n </div>\n\n {callStatus === 'ongoing' && (\n <div className=\"dora-bg-[#272727] dora-h-6 md:dora-h-7 dora-rounded-full dora-px-3 md:dora-px-4 dora-text-white dora-font-normal dora-text-xs md:dora-text-sm dora-flex dora-items-center dora-justify-center\">\n <span>{callDuration}</span>\n </div>\n )}\n\n {callStatus === 'ended' && closeCountdown !== null && (\n <div className=\"dora-bg-[#272727] dora-h-6 md:dora-h-7 dora-rounded-full dora-px-3 md:dora-px-4 dora-text-slate-400 dora-font-normal dora-text-xs dora-flex dora-items-center dora-justify-center dora-gap-1\">\n <span>Closing in {closeCountdown}s</span>\n </div>\n )}\n\n {(connectingCountdown !== null || callStatus === 'ringing') && !isIncoming && callStatus !== 'ongoing' && callStatus !== 'ended' && (\n <div className=\"dora-bg-[#272727] dora-h-8 dora-rounded-full dora-px-3 md:dora-px-4 dora-text-white dora-font-normal dora-text-xs md:dora-text-sm dora-flex dora-items-center dora-justify-center dora-gap-2\">\n <span className=\"dora-text-[#F99578] dora-whitespace-nowrap\">\n {callStatus === 'ringing' ? 'Ringing...' : 'Connecting...'}\n </span>\n {callStatus === 'connecting' && connectingCountdown && (\n <span className=\"dora-font-mono dora-ml-1 dora-text-slate-400\">\n {Math.floor(connectingCountdown / 60)}:{String(connectingCountdown % 60).padStart(2, '0')}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useEffect } from \"react\";\nimport {\n useCall,\n useConnectionStatus,\n useExtensions,\n CreditBalance,\n} from \"../index\";\nimport { Phone, Delete, X, User, ChevronDown } from \"lucide-react\";\n\ninterface DialpadProps {\n onCallInitiated?: (number: string) => void;\n initialNumber?: string;\n showKeys?: boolean;\n className?: string;\n availableExtensions?: Array<{ label: string; value: string }>;\n selectedExtension?: string;\n onExtensionChange?: (ext: string) => void;\n}\n\nexport function Dialpad({\n onCallInitiated,\n initialNumber = \"\",\n showKeys = true,\n className = \"\",\n availableExtensions: providedExtensions,\n selectedExtension: providedSelectedExtension,\n onExtensionChange,\n}: DialpadProps) {\n const { call, callStatus } = useCall();\n const { isConnected } = useConnectionStatus();\n const { extensions: fetchedExtensions, setExtension } = useExtensions();\n\n const [number, setNumber] = useState(initialNumber);\n const [keysVisible, setKeysVisible] = useState(showKeys);\n const [localSelectedExt, setLocalSelectedExt] = useState(\"\");\n\n const extensions = providedExtensions?.length\n ? providedExtensions\n : fetchedExtensions.map((ext) => ({\n label: ext.extension,\n value: ext.extension,\n }));\n\n const activeExtension =\n providedSelectedExtension ||\n localSelectedExt ||\n (extensions.length > 0 ? extensions[0].value : \"\");\n\n // Auto-initialize local extension selection\n useEffect(() => {\n if (\n !localSelectedExt &&\n extensions.length > 0 &&\n !providedSelectedExtension\n ) {\n setLocalSelectedExt(extensions[0].value);\n }\n }, [extensions, providedSelectedExtension]);\n\n const append = (digit: string) => setNumber((s) => s + digit);\n const backspace = () => setNumber((s) => s.slice(0, -1));\n\n const handleExtensionChange = async (ext: string) => {\n setLocalSelectedExt(ext);\n onExtensionChange?.(ext);\n // Re-initialize SIP with new extension\n await setExtension(ext);\n };\n\n const handleCall = async () => {\n if (!number || number.trim() === \"\") return;\n try {\n await call(number, activeExtension);\n onCallInitiated?.(number);\n } catch (e) {\n console.error(\"Call failed\", e);\n }\n };\n\n const isCallDisabled =\n !number ||\n number.trim() === \"\" ||\n !isConnected ||\n callStatus === \"ringing\" ||\n callStatus === \"ongoing\" ||\n callStatus === \"connecting\";\n\n const keypad_icon = (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.5333 3.2006C11.5339 3.50413 11.4444 3.801 11.2759 4.05352C11.1075 4.30605 10.8679 4.50284 10.5874 4.61891C10.3069 4.73499 9.99832 4.76512 9.70071 4.70548C9.40309 4.64584 9.12991 4.49911 8.91583 4.28393C8.77351 4.14156 8.66063 3.97254 8.58363 3.78654C8.50662 3.60054 8.46701 3.4012 8.46705 3.19989C8.46709 2.99858 8.50678 2.79925 8.58385 2.61328C8.66093 2.4273 8.77387 2.25834 8.91625 2.11602C9.05862 1.9737 9.22764 1.86081 9.41364 1.78381C9.59964 1.70681 9.79898 1.6672 10.0003 1.66723C10.2016 1.66727 10.4009 1.70696 10.5869 1.78404C10.7729 1.86111 10.9418 1.97406 11.0842 2.11643C11.3717 2.40393 11.5342 2.7931 11.5342 3.19977M14.5333 4.73227C14.7376 4.73703 14.9408 4.7009 15.131 4.62601C15.3211 4.55111 15.4944 4.43896 15.6406 4.29614C15.7868 4.15333 15.9029 3.98273 15.9822 3.79438C16.0616 3.60602 16.1024 3.40372 16.1024 3.19935C16.1024 2.99498 16.0616 2.79267 15.9822 2.60432C15.9029 2.41597 15.7868 2.24537 15.6406 2.10255C15.4944 1.95974 15.3211 1.84759 15.131 1.77269C14.9408 1.6978 14.7376 1.66167 14.5333 1.66643C14.1267 1.66643 13.7367 1.82798 13.4491 2.11554C13.1615 2.40309 13 2.7931 13 3.19977C13 3.60643 13.1615 3.99644 13.4491 4.284C13.7367 4.57155 14.1267 4.73227 14.5333 4.73227ZM7 3.2006C7.00061 3.50413 6.91102 3.801 6.7426 4.05352C6.57419 4.30605 6.33454 4.50284 6.05408 4.61891C5.77362 4.73499 5.46499 4.76512 5.16737 4.70548C4.86976 4.64584 4.59657 4.49911 4.3825 4.28393C4.24018 4.14161 4.12728 3.97265 4.05026 3.7867C3.97324 3.60075 3.93359 3.40145 3.93359 3.20018C3.93359 2.99891 3.97324 2.79961 4.05026 2.61366C4.12728 2.42771 4.24018 2.25875 4.3825 2.11643C4.52482 1.97411 4.69378 1.86122 4.87973 1.78419C5.06568 1.70717 5.26498 1.66753 5.46625 1.66753C5.66752 1.66753 5.86682 1.70717 6.05277 1.78419C6.23872 1.86122 6.40768 1.97411 6.55 2.11643C6.8375 2.40393 6.99917 2.7931 6.99917 3.19977M11.5333 7.7306C11.5352 7.93448 11.4964 8.1367 11.4192 8.32539C11.342 8.51409 11.2279 8.68548 11.0836 8.82952C10.9392 8.97357 10.7677 9.08737 10.5788 9.16426C10.39 9.24114 10.1877 9.27958 9.98381 9.2773C9.77993 9.27503 9.57856 9.2321 9.39148 9.15102C9.2044 9.06994 9.03538 8.95234 8.89433 8.80511C8.75327 8.65789 8.64301 8.484 8.57 8.29362C8.497 8.10325 8.46272 7.90022 8.46917 7.69643C8.48185 7.29562 8.65113 6.91575 8.94068 6.63833C9.23024 6.3609 9.617 6.20802 10.018 6.21249C10.419 6.21697 10.8022 6.37843 11.0855 6.66224C11.3688 6.94606 11.5296 7.32961 11.5333 7.7306ZM14.5333 9.2631C14.7376 9.26786 14.9408 9.23174 15.131 9.15684C15.3211 9.08194 15.4944 8.96979 15.6406 8.82698C15.7868 8.68416 15.9029 8.51356 15.9822 8.32521C16.0616 8.13686 16.1024 7.93455 16.1024 7.73018C16.1024 7.52581 16.0616 7.32351 15.9822 7.13515C15.9029 6.9468 15.7868 6.7762 15.6406 6.63339C15.4944 6.49057 15.3211 6.37842 15.131 6.30352C14.9408 6.22863 14.7376 6.1925 14.5333 6.19727C14.1267 6.19727 13.7367 6.35881 13.4491 6.64637C13.1615 6.93392 13 7.32393 13 7.7306C13 8.13726 13.1615 8.52727 13.4491 8.81483C13.7367 9.10239 14.1267 9.26393 14.5333 9.26393M7 7.7306C7.00021 8.03395 6.91038 8.33054 6.7419 8.58281C6.57341 8.83507 6.33385 9.03165 6.05356 9.14766C5.77326 9.26367 5.46485 9.29389 5.16737 9.23448C4.86989 9.17506 4.59673 9.0287 4.3825 8.81393C4.20461 8.63559 4.07342 8.41615 4.00054 8.17503C3.92766 7.93391 3.91534 7.67854 3.96468 7.43152C4.01401 7.1845 4.12347 6.95345 4.28337 6.75882C4.44328 6.56419 4.64869 6.41197 4.88144 6.31564C5.11419 6.21931 5.36709 6.18184 5.61777 6.20654C5.86845 6.23124 6.10918 6.31735 6.31865 6.45725C6.52812 6.59716 6.69988 6.78654 6.81872 7.00864C6.93756 7.23073 6.99982 7.4787 7 7.7306ZM11.5333 12.2623C11.5348 12.4893 11.4857 12.7138 11.3897 12.9196C11.2937 13.1253 11.1532 13.3071 10.9783 13.4519C10.8034 13.5967 10.5985 13.7007 10.3784 13.7566C10.1583 13.8124 9.9286 13.8186 9.70583 13.7748C9.42088 13.7191 9.1576 13.5836 8.94662 13.3841C8.73564 13.1847 8.58563 12.9294 8.51403 12.648C8.44244 12.3666 8.4522 12.0707 8.5422 11.7947C8.63219 11.5186 8.79871 11.2738 9.02238 11.0887C9.24606 10.9036 9.51769 10.7857 9.8057 10.7489C10.0937 10.7122 10.3862 10.7579 10.6493 10.8808C10.9123 11.0038 11.135 11.1989 11.2915 11.4434C11.448 11.688 11.5319 11.9719 11.5333 12.2623ZM11.5333 16.8006C11.5337 17.0274 11.4836 17.2515 11.3868 17.4567C11.29 17.6618 11.1488 17.8429 10.9735 17.9868C10.7981 18.1308 10.593 18.2339 10.3729 18.2889C10.1528 18.3439 9.92326 18.3493 9.70083 18.3048C9.40375 18.2453 9.13093 18.0992 8.91681 17.8849C8.70269 17.6705 8.55688 17.3975 8.49777 17.1004C8.43866 16.8032 8.46891 16.4952 8.58469 16.2152C8.70048 15.9353 8.89661 15.6959 9.14833 15.5273C9.37915 15.3731 9.64749 15.2845 9.92473 15.2708C10.202 15.2572 10.4777 15.3191 10.7225 15.4499C10.9673 15.5807 11.1721 15.7755 11.3149 16.0135C11.4577 16.2515 11.5332 16.523 11.5333 16.8006ZM16.0667 12.2623C16.0681 12.4893 16.019 12.7138 15.923 12.9196C15.827 13.1253 15.6865 13.3071 15.5116 13.4519C15.3367 13.5967 15.1318 13.7007 14.9117 13.7566C14.6917 13.8124 14.4619 13.8186 14.2392 13.7748C14.0165 13.7312 13.8062 13.6388 13.6236 13.5041C13.4409 13.3695 13.2904 13.1959 13.183 12.9961C13.0755 12.7962 13.0137 12.575 13.0021 12.3484C12.9905 12.1218 13.0294 11.8954 13.1158 11.6856C13.2509 11.3581 13.4952 11.0875 13.8072 10.9197C14.1193 10.7519 14.4797 10.6974 14.8274 10.7653C15.1751 10.8333 15.4886 11.0195 15.7145 11.2924C15.9404 11.5653 16.0648 11.908 16.0667 12.2623ZM7 12.2623C7.00227 12.5661 6.91412 12.8638 6.74675 13.1174C6.57939 13.371 6.34039 13.5691 6.06013 13.6864C5.77987 13.8038 5.47104 13.8352 5.1729 13.7766C4.87476 13.718 4.60079 13.572 4.38583 13.3573C4.20705 13.1796 4.07483 12.9606 4.00086 12.7196C3.9269 12.4787 3.91347 12.2232 3.96176 11.9759C4.01006 11.7285 4.11859 11.4968 4.27776 11.3014C4.43692 11.106 4.64181 10.9528 4.87428 10.8554C5.10676 10.758 5.35966 10.7194 5.61059 10.7431C5.86153 10.7668 6.10276 10.8519 6.31294 10.991C6.52313 11.1301 6.69578 11.3189 6.81561 11.5406C6.93545 11.7624 6.99878 12.0102 7 12.2623Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n\n return (\n <div className={`dora-bg-white dora-rounded-3xl ${className} dora-font-sans dora-relative dora-z-10`}>\n {/* Header with Logo and Credit Balance */}\n <div className=\"dora-flex dora-items-center dora-justify-between dora-mb-6\">\n <div className=\"dora-bg-emerald-500 dora-text-white dora-px-3 dora-py-1.5 dora-rounded-lg dora-text-xs md:dora-text-sm dora-font-semibold dora-shadow-sm\">\n Dora-cell\n </div>\n <CreditBalance />\n </div>\n\n {/* Main Content Area */}\n <div className=\"dora-bg-zinc-50 dora-p-6 dora-rounded-3xl dora-border dora-border-zinc-100 dora-shadow-inner\">\n {/* Caller ID Section */}\n <div className=\"dora-flex dora-items-center dora-justify-between dora-mb-5\">\n <span className=\"dora-text-zinc-500 dora-font-medium dora-text-sm dora-tracking-tight\">\n Caller ID\n </span>\n <div className=\"dora-relative\">\n <select\n disabled={extensions.length === 0}\n className=\"dora-appearance-none dora-bg-white dora-border dora-border-zinc-200 dora-rounded-xl dora-px-4 dora-py-2 dora-text-sm dora-font-semibold dora-text-zinc-900 dora-min-w-[170px] dora-pr-10 dora-outline-none focus:dora-border-emerald-500 dora-transition-all dora-shadow-sm disabled:dora-opacity-50\"\n value={activeExtension}\n onChange={(e) => handleExtensionChange(e.target.value)}\n >\n {extensions.length > 0 ? (\n extensions.map((ext) => (\n <option key={ext.value} value={ext.value}>\n {ext.label}\n </option>\n ))\n ) : (\n <option>Loading...</option>\n )}\n </select>\n <ChevronDown\n size={18}\n className=\"dora-absolute dora-right-4 dora-top-1/2 dora-transform dora--translate-y-1/2 dora-text-zinc-500 dora-pointer-events-none\"\n />\n </div>\n </div>\n\n {/* Input and Call Button */}\n <div className=\"dora-flex dora-items-center dora-gap-3 dora-mb-6\">\n <div className=\"dora-flex-1 dora-bg-white dora-border dora-border-zinc-200 dora-rounded-xl dora-flex dora-items-center dora-px-4 dora-h-12 dora-shadow-sm focus-within:dora-border-emerald-500 dora-transition-all\">\n <User size={18} className=\"dora-text-zinc-300 dora-mr-2\" />\n <input\n type=\"tel\"\n placeholder=\"Enter number\"\n value={number}\n onChange={(e) => setNumber(e.target.value)}\n className=\"dora-bg-transparent dora-border-none dora-outline-none dora-w-full dora-text-base dora-text-zinc-900 dora-font-medium dora-placeholder-zinc-300\"\n />\n </div>\n <button\n disabled={isCallDisabled}\n onClick={handleCall}\n className=\"dora-bg-emerald-500 dora-text-white dora-w-12 dora-h-12 dora-rounded-xl dora-flex dora-items-center dora-justify-center dora-shadow-lg dora-shadow-emerald-500/20 hover:dora-bg-emerald-600 active:dora-scale-95 dora-transition-all disabled:dora-opacity-50\"\n >\n <Phone size={20} fill=\"white\" className=\"dora-text-white\" />\n </button>\n </div>\n\n {/* Keypad and Controls */}\n <div className=\"dora-space-y-5\">\n {keysVisible ? (\n <div>\n <div className=\"dora-flex dora-mb-5\">\n <button\n onClick={() => setKeysVisible(false)}\n className=\"dora-flex dora-items-center dora-gap-2 dora-px-4 dora-py-2 dora-bg-white dora-border dora-border-zinc-200 dora-rounded-full dora-text-xs dora-font-semibold dora-text-zinc-600 hover:dora-bg-zinc-50 dora-transition-colors dora-shadow-sm active:dora-scale-95\"\n >\n <X size={16} className=\"dora-text-red-500\" />\n Close\n </button>\n </div>\n \n <div className=\"dora-grid dora-grid-cols-3 dora-gap-4\">\n {[\n \"1\", \"2\", \"3\",\n \"4\", \"5\", \"6\",\n \"7\", \"8\", \"9\",\n \"+\", \"0\", \"del\",\n ].map((d) => (\n <button\n key={d}\n onClick={() => (d === \"del\" ? backspace() : append(d))}\n className=\"dora-h-12 dora-bg-white dora-rounded-xl dora-flex dora-items-center dora-justify-center dora-text-lg dora-font-semibold dora-text-zinc-900 dora-shadow-sm border dora-border-zinc-50 hover:dora-bg-zinc-50 active:dora-scale-95 dora-transition-all\"\n >\n {d === \"del\" ? <Delete size={18} className=\"dora-text-zinc-500\" /> : d}\n </button>\n ))}\n </div>\n </div>\n ) : (\n <div className=\"dora-flex dora-justify-center\">\n <button\n onClick={() => setKeysVisible(true)}\n className=\"dora-flex dora-items-center dora-gap-2 dora-px-4 dora-py-2 dora-bg-white dora-border dora-border-zinc-200 dora-rounded-full dora-text-xs dora-font-semibold dora-text-zinc-500 hover:dora-bg-zinc-50 dora-transition-all active:dora-scale-95 dora-shadow-sm\"\n >\n <span className=\"dora-transform dora-scale-90\">{keypad_icon}</span>\n Open dialer\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n","/**\n * React bindings for Dora Cell SDK\n * Provides React Context and hooks for easy integration\n */\n\n'use client';\n\nimport React, { createContext, useContext, useEffect, useState, useRef } from 'react';\nimport { DoraCell } from '@dora-cell/sdk';\nimport type {\n DoraCellConfig,\n Call,\n CallStatus,\n ConnectionStatus,\n ConnectionState,\n} from '@dora-cell/sdk';\n\ninterface DoraCellContextValue {\n sdk: DoraCell | null;\n connectionStatus: ConnectionStatus;\n currentCall: Call | null;\n callStatus: CallStatus;\n callDuration: string;\n isMuted: boolean;\n isInitialized: boolean;\n error: Error | null;\n extension: string | null;\n\n // Methods\n call: (phoneNumber: string, extension?: string) => Promise<void>;\n hangup: () => void;\n toggleMute: () => void;\n answerCall: () => void;\n}\n\nconst DoraCellContext = createContext<DoraCellContextValue | undefined>(undefined);\n\nexport interface DoraCellProviderProps {\n config: DoraCellConfig;\n children: React.ReactNode;\n autoInitialize?: boolean;\n}\n\nexport function DoraCellProvider({\n config,\n children,\n autoInitialize = true,\n}: DoraCellProviderProps) {\n const [sdk] = useState(() => new DoraCell(config));\n const [isInitialized, setIsInitialized] = useState(false);\n const [connectionStatus, setConnectionStatus] = useState<ConnectionStatus>('disconnected');\n const [currentCall, setCurrentCall] = useState<Call | null>(null);\n const [callStatus, setCallStatus] = useState<CallStatus>('idle');\n const [callDuration, setCallDuration] = useState('00:00');\n const [isMuted, setIsMuted] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [extension, setExtension] = useState<string | null>(null);\n\n const durationIntervalRef = useRef<number | null>(null);\n\n // Initialize SDK\n useEffect(() => {\n if (!autoInitialize) return;\n\n const initializeSdk = async () => {\n try {\n await sdk.initialize();\n setIsInitialized(true);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to initialize SDK'));\n }\n };\n\n initializeSdk();\n\n return () => {\n sdk.destroy();\n };\n }, [sdk, autoInitialize]);\n\n // Set up event listeners\n useEffect(() => {\n if (!sdk) return;\n\n const handleConnectionStatus = (state: ConnectionState) => {\n setConnectionStatus(state.status);\n if (state.extension) {\n setExtension(state.extension);\n }\n if (state.error) {\n setError(new Error(state.error));\n }\n };\n\n const handleIncomingCall = (call: Call) => {\n setCurrentCall(call);\n setCallStatus('ringing');\n };\n\n const handleOutgoingCall = (call: Call) => {\n setCurrentCall(call);\n setCallStatus('connecting');\n };\n\n const handleCallRinging = (call: Call) => {\n setCallStatus('ringing');\n };\n\n const handleCallConnected = (call: Call) => {\n setCallStatus('ongoing');\n };\n\n const handleCallEnded = (call: Call) => {\n setCallStatus('ended');\n setCurrentCall(null);\n setIsMuted(false);\n\n // Reset to idle after a delay\n setTimeout(() => {\n setCallStatus('idle');\n }, 3000);\n };\n\n const handleCallFailed = (call: Call, errorMsg: string) => {\n setError(new Error(errorMsg));\n setCallStatus('ended');\n setCurrentCall(null);\n };\n\n const handleError = (err: Error) => {\n setError(err);\n };\n\n sdk.on('connection:status', handleConnectionStatus);\n sdk.on('call:incoming', handleIncomingCall);\n sdk.on('call:outgoing', handleOutgoingCall);\n sdk.on('call:ringing', handleCallRinging);\n sdk.on('call:connected', handleCallConnected);\n sdk.on('call:ended', handleCallEnded);\n sdk.on('call:failed', handleCallFailed);\n sdk.on('error', handleError);\n\n return () => {\n sdk.off('connection:status', handleConnectionStatus);\n sdk.off('call:incoming', handleIncomingCall);\n sdk.off('call:outgoing', handleOutgoingCall);\n sdk.off('call:ringing', handleCallRinging);\n sdk.off('call:connected', handleCallConnected);\n sdk.off('call:ended', handleCallEnded);\n sdk.off('call:failed', handleCallFailed);\n sdk.off('error', handleError);\n };\n }, [sdk]);\n\n // Update call duration\n useEffect(() => {\n if (callStatus === 'ongoing' && currentCall) {\n durationIntervalRef.current = window.setInterval(() => {\n const duration = currentCall.duration;\n const mm = String(Math.floor(duration / 60)).padStart(2, '0');\n const ss = String(duration % 60).padStart(2, '0');\n setCallDuration(`${mm}:${ss}`);\n }, 1000);\n } else {\n setCallDuration('00:00');\n if (durationIntervalRef.current) {\n clearInterval(durationIntervalRef.current);\n durationIntervalRef.current = null;\n }\n }\n\n return () => {\n if (durationIntervalRef.current) {\n clearInterval(durationIntervalRef.current);\n }\n };\n }, [callStatus, currentCall]);\n\n // Methods\n const call = async (phoneNumber: string, extension?: string) => {\n try {\n setError(null);\n await sdk.call(phoneNumber, { extension });\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to make call'));\n throw err;\n }\n };\n\n const hangup = () => {\n try {\n sdk.hangup();\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to hang up'));\n }\n };\n\n const toggleMute = () => {\n if (!currentCall) return;\n\n if (isMuted) {\n currentCall.unmute();\n setIsMuted(false);\n } else {\n currentCall.mute();\n setIsMuted(true);\n }\n };\n\n const answerCall = () => {\n try {\n sdk.answerCall();\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to answer call'));\n }\n };\n\n const contextValue: DoraCellContextValue = {\n sdk,\n connectionStatus,\n currentCall,\n callStatus,\n callDuration,\n isMuted,\n isInitialized,\n error,\n call,\n hangup,\n toggleMute,\n answerCall,\n extension,\n };\n\n return (\n <DoraCellContext.Provider value={contextValue}>\n {children}\n </DoraCellContext.Provider>\n );\n}\n\n/**\n * Hook to access Dora Cell SDK context\n */\nexport function useDoraCell(): DoraCellContextValue {\n const context = useContext(DoraCellContext);\n if (!context) {\n throw new Error('useDoraCell must be used within DoraCellProvider');\n }\n return context;\n}\n\n/**\n * Hook for making calls\n */\nexport function useCall() {\n const { call, hangup, toggleMute, answerCall, callStatus, callDuration, isMuted, currentCall, error } = useDoraCell();\n\n return {\n call,\n hangup,\n toggleMute,\n answerCall,\n callStatus,\n callDuration,\n isMuted,\n currentCall,\n callError: error?.message,\n };\n}\n\n/**\n * Hook for connection status\n */\nexport function useConnectionStatus() {\n const { connectionStatus, isInitialized, error, extension } = useDoraCell();\n\n return {\n connectionStatus,\n isInitialized,\n isConnected: connectionStatus === 'registered',\n error,\n extension,\n };\n}\n\n/**\n * Hook to fetch wallet/credit balance\n */\nexport function useWallet() {\n const { sdk, isInitialized } = useDoraCell();\n const [data, setData] = useState<{ balance: number, currency: string } | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = async () => {\n if (!sdk || !isInitialized) return;\n \n setIsLoading(true);\n setError(null);\n try {\n const val = await sdk.getWallet();\n setData(val);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch wallet'));\n } finally {\n setIsLoading(false);\n }\n };\n\n useEffect(() => {\n if (isInitialized) {\n console.log('SDK: useWallet fetching data...');\n fetchData();\n }\n }, [isInitialized, sdk]);\n\n // Listen for call ended to refresh balance\n useEffect(() => {\n if (!sdk || !isInitialized) return;\n\n const handleCallEnded = () => {\n console.log('SDK: Call ended, refreshing wallet balance in 2 seconds...');\n // Refresh after a small delay to allow backend to process call billing\n setTimeout(fetchData, 2000);\n };\n\n sdk.on('call:ended', handleCallEnded);\n return () => {\n sdk.off('call:ended', handleCallEnded);\n };\n }, [sdk, isInitialized]);\n\n return {\n balance: data?.balance ?? 0,\n currency: data?.currency ?? 'NGN',\n isLoading,\n error,\n refresh: fetchData\n };\n}\n\n/**\n * Hook for managing extensions (DID numbers)\n */\nexport function useExtensions() {\n const { sdk, isInitialized } = useDoraCell();\n const [extensions, setExtensions] = useState<any[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchExtensions = async () => {\n if (!sdk || !isInitialized) return;\n \n setIsLoading(true);\n setError(null);\n try {\n const data = await sdk.fetchExtensions();\n setExtensions(data);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch extensions'));\n } finally {\n setIsLoading(false);\n }\n };\n\n const setExtension = async (extension: string) => {\n if (!sdk) return;\n await sdk.setExtension(extension);\n };\n\n useEffect(() => {\n if (isInitialized) {\n fetchExtensions();\n }\n }, [isInitialized, sdk]);\n\n return {\n extensions,\n isLoading,\n error,\n setExtension,\n refresh: fetchExtensions\n };\n}\n\n/**\n * Credit Balance component - mirrors main app style\n */\nexport function CreditBalance() {\n const { balance, currency, isLoading, error } = useWallet();\n\n if (error) {\n console.warn('SDK: CreditBalance error:', error);\n }\n\n const formatted = new Intl.NumberFormat('en-NG', {\n style: 'currency',\n currency: currency === 'NGN' ? 'NGN' : (currency || 'NGN'),\n }).format(balance);\n\n return (\n <div className=\"dora-credit-balance dora-px-4 dora-py-2 dora-bg-zinc-100 dora-border dora-border-zinc-200 dora-rounded-full dora-text-sm dora-text-zinc-600 dora-whitespace-nowrap dora-flex dora-items-center dora-shadow-sm\">\n <span className=\"dora-text-xs dora-text-zinc-500 dora-mr-2\">\n Credit balance:\n </span>\n <span className=\"dora-font-bold dora-text-zinc-800\">{isLoading ? \"...\" : formatted}</span>\n </div>\n );\n}\n\nexport * from './components';\n"]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/shared/src/utils.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/defaultAttributes.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/Icon.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/createLucideIcon.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/arrow-down-left.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/arrow-up-right.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/chevron-down.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/delete.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/maximize.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/mic-off.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/mic.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/minimize-2.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/phone.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/user.ts","../../../node_modules/.pnpm/lucide-react@0.555.0_react@19.2.3/node_modules/lucide-react/src/icons/x.ts","../src/components/CallInterface.tsx","../src/components/Dialpad.tsx","../src/index.tsx"],"names":["forwardRef","createElement","__iconNode","useState","useEffect","jsx","jsxs","useRef","call","extension"],"mappings":";;;;;AAQO,IAAM,WAAA,GAAc,CAAC,MAAA,KAC1B,MAAA,CAAO,QAAQ,oBAAA,EAAsB,OAAO,EAAE,WAAA,EAAA;AAQzC,IAAM,WAAA,GAAc,CAAmB,MAAA,KAC5C,MAAA,CAAO,OAAA;AAAQ,EAAA,uBAAA;EAAyB,CAAC,KAAA,EAAO,IAAI,EAAA,KAClD,EAAA,GAAK,GAAG,WAAA,EAAA,GAAgB,GAAG,WAAA;AAC7B,CAAA;AAQK,IAAM,YAAA,GAAe,CAAmB,MAAA,KAAgC;AAC7E,EAAA,MAAM,SAAA,GAAY,YAAY,MAAM,CAAA;AAEpC,EAAA,OAAQ,SAAA,CAAU,OAAO,CAAC,CAAA,CAAE,aAAA,GAAgB,SAAA,CAAU,MAAM,CAAC,CAAA;AAC/D,CAAA;AAQO,IAAM,YAAA,GAAe,IAA2C,OAAA,KACrE,OAAA,CACG,OAAO,CAAC,SAAA,EAAW,OAAO,KAAA,KAAU;AACnC,EAAA,OACE,OAAA,CAAQ,SAAS,CAAA,IAChB,SAAA,CAAqB,IAAA,OAAW,EAAA,IACjC,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,KAAM,KAAA;AAEjC,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA,CACR,IAAA,EAAA;AAgBE,IAAM,WAAA,GAAc,CAAC,KAAA,KAA+B;AACzD,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,KAAK,UAAA,CAAW,OAAO,KAAK,IAAA,KAAS,MAAA,IAAU,SAAS,OAAA,EAAS;AACnE,MAAA,OAAO,IAAA;AACT,IAAA;AACF,EAAA;AACF,CAAA;;;ACxEA,IAAA,iBAAA,GAAe;EACb,KAAA,EAAO,4BAAA;EACP,KAAA,EAAO,EAAA;EACP,MAAA,EAAQ,EAAA;EACR,OAAA,EAAS,WAAA;EACT,IAAA,EAAM,MAAA;EACN,MAAA,EAAQ,cAAA;EACR,WAAA,EAAa,CAAA;EACb,aAAA,EAAe,OAAA;EACf,cAAA,EAAgB;AAClB,CAAA;;;ACcA,IAAM,IAAA,GAAO,UAAA;EACX,CACE;IACE,KAAA,GAAQ,cAAA;IACR,IAAA,GAAO,EAAA;IACP,WAAA,GAAc,CAAA;AACd,IAAA,mBAAA;IACA,SAAA,GAAY,EAAA;AACZ,IAAA,QAAA;AACA,IAAA,QAAA;IACA,GAAG;AAAA,GAAA,EAEL,GAAA,KAEA,aAAA;AACE,IAAA,KAAA;AACA,IAAA;AACE,MAAA,GAAA;MACA,GAAG,iBAAA;MACH,KAAA,EAAO,IAAA;MACP,MAAA,EAAQ,IAAA;MACR,MAAA,EAAQ,KAAA;AACR,MAAA,WAAA,EAAa,sBAAuB,MAAA,CAAO,WAAW,IAAI,EAAA,GAAM,MAAA,CAAO,IAAI,CAAA,GAAI,WAAA;MAC/E,SAAA,EAAW,YAAA,CAAa,UAAU,SAAS,CAAA;MAC3C,GAAI,CAAC,YAAY,CAAC,WAAA,CAAY,IAAI,CAAA,IAAK,EAAE,eAAe,MAAA,EAAA;MACxD,GAAG;AAAA,KAAA;AAEL,IAAA;MACE,GAAG,QAAA,CAAS,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,aAAA,CAAc,GAAA,EAAK,KAAK,CAAC,CAAA;AAC3D,MAAA,GAAI,MAAM,OAAA,CAAQ,QAAQ,CAAA,GAAI,QAAA,GAAW,CAAC,QAAQ;AAAA;AACpD;AAEN,CAAA;;;AC7CA,IAAM,gBAAA,GAAmB,CAAC,QAAA,EAAkB,QAAA,KAAuB;AACjE,EAAA,MAAM,SAAA,GAAYA,UAAAA;AAAuC,IAAA,CAAC,EAAE,SAAA,EAAW,GAAG,OAAA,EAAS,GAAA,KACjFC,cAAc,IAAA,EAAM;AAClB,MAAA,GAAA;AACA,MAAA,QAAA;MACA,SAAA,EAAW,YAAA;AACT,QAAA,CAAA,OAAA,EAAU,WAAA,CAAY,YAAA,CAAa,QAAQ,CAAC,CAAC,CAAA,CAAA;AAC7C,QAAA,CAAA,OAAA,EAAU,QAAQ,CAAA,CAAA;AAClB,QAAA;AAAA,OAAA;MAEF,GAAG;KACJ;AAAA,GAAA;AAGH,EAAA,SAAA,CAAU,WAAA,GAAc,aAAa,QAAQ,CAAA;AAE7C,EAAA,OAAO,SAAA;AACT,CAAA;;;ACzBO,IAAM,UAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU,CAAA;AAC3C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU;AAC7C,CAAA;AAaA,IAAM,aAAA,GAAgB,gBAAA,CAAiB,iBAAA,EAAmB,UAAU,CAAA;;;AChB7D,IAAMC,WAAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU,CAAA;AAC3C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU;AAC7C,CAAA;AAaA,IAAM,YAAA,GAAe,gBAAA,CAAiB,gBAAA,EAAkBA,WAAU,CAAA;;;AChB3D,IAAMA,WAAAA,GAAuB,CAAC,CAAC,MAAA,EAAQ,EAAE,GAAG,cAAA,EAAgB,GAAA,EAAK,QAAA,EAAU,CAAC,CAAA;AAanF,IAAM,WAAA,GAAc,gBAAA,CAAiB,cAAA,EAAgBA,WAAU,CAAA;;;ACbxD,IAAMA,WAAAA,GAAuB;AAClC,EAAA;AACE,IAAA,MAAA;AACA,IAAA;MACE,CAAA,EAAG,uHAAA;MACH,GAAA,EAAK;AAAA;AACP,GAAA;AAEF,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,WAAA,EAAa,GAAA,EAAK,UAAU,CAAA;AAC1C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,WAAA,EAAa,GAAA,EAAK,UAAU;AAC5C,CAAA;AAaA,IAAM,MAAA,GAAS,gBAAA,CAAiB,QAAA,EAAUA,WAAU,CAAA;;;ACvB7C,IAAMA,WAAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,wBAAA,EAA0B,GAAA,EAAK,UAAU,CAAA;AACvD,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,0BAAA,EAA4B,GAAA,EAAK,UAAU,CAAA;AACzD,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,yBAAA,EAA2B,GAAA,EAAK,UAAU,CAAA;AACxD,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,2BAAA,EAA6B,GAAA,EAAK,UAAU;AAC5D,CAAA;AAaA,IAAM,QAAA,GAAW,gBAAA,CAAiB,UAAA,EAAYA,WAAU,CAAA;;;AClBjD,IAAMA,WAAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,UAAA,EAAY,GAAA,EAAK,UAAU,CAAA;AACzC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,gCAAA,EAAkC,GAAA,EAAK,UAAU,CAAA;AAC/D,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,gCAAA,EAAkC,GAAA,EAAK,UAAU,CAAA;AAC/D,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,iCAAA,EAAmC,GAAA,EAAK,UAAU,CAAA;AAChE,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU,CAAA;AAC3C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,4BAAA,EAA8B,GAAA,EAAK,UAAU;AAC7D,CAAA;AAaA,IAAM,MAAA,GAAS,gBAAA,CAAiB,SAAA,EAAWA,WAAU,CAAA;;;ACpB9C,IAAMA,WAAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,UAAA,EAAY,GAAA,EAAK,UAAU,CAAA;AACzC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,4BAAA,EAA8B,GAAA,EAAK,UAAU,CAAA;AAC3D,EAAA,CAAC,MAAA,EAAQ,EAAE,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAK,KAAA,EAAO,GAAA,EAAK,MAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,UAAU;AAC/E,CAAA;AAaA,IAAM,GAAA,GAAM,gBAAA,CAAiB,KAAA,EAAOA,WAAU,CAAA;;;ACjBvC,IAAMA,WAAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU,CAAA;AAC3C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,aAAA,EAAe,GAAA,EAAK,UAAU,CAAA;AAC5C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,WAAA,EAAa,GAAA,EAAK,UAAU,CAAA;AAC1C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,WAAA,EAAa,GAAA,EAAK,UAAU;AAC5C,CAAA;AAaA,IAAM,SAAA,GAAY,gBAAA,CAAiB,YAAA,EAAcA,WAAU,CAAA;;;AClBpD,IAAMA,WAAAA,GAAuB;AAClC,EAAA;AACE,IAAA,MAAA;AACA,IAAA;MACE,CAAA,EAAG,uNAAA;MACH,GAAA,EAAK;AAAA;AACP;AAEJ,CAAA;AAaA,IAAM,KAAA,GAAQ,gBAAA,CAAiB,OAAA,EAASA,WAAU,CAAA;;;ACrB3C,IAAMA,YAAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,2CAAA,EAA6C,GAAA,EAAK,UAAU,CAAA;EAC1E,CAAC,QAAA,EAAU,EAAE,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,KAAK,CAAA,EAAG,GAAA,EAAK,GAAA,EAAK,QAAA,EAAU;AACzD,CAAA;AAaA,IAAM,IAAA,GAAO,gBAAA,CAAiB,MAAA,EAAQA,YAAU,CAAA;;;AChBzC,IAAMA,YAAAA,GAAuB;AAClC,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU,CAAA;AAC3C,EAAA,CAAC,QAAQ,EAAE,CAAA,EAAG,YAAA,EAAc,GAAA,EAAK,UAAU;AAC7C,CAAA;AAaA,IAAM,CAAA,GAAI,gBAAA,CAAiB,GAAA,EAAKA,YAAU,CAAA;ACGnC,SAAS,aAAA,CAAc;AAAA,EAC1B,MAAA,GAAS,KAAA;AAAA,EACT,YAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA;AACJ,CAAA,EAAuB;AACnB,EAAA,MAAM;AAAA,IACF,GAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,MACA,OAAA,EAAQ;AAEZ,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,KAAK,CAAA;AACpD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAwB,IAAI,CAAA;AACxE,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAI,SAAwB,IAAI,CAAA;AAElF,EAAA,MAAM,QAAA,GAAW,OAAgC,IAAI,CAAA;AACrD,EAAA,MAAM,WAAA,GAAc,OAAgC,IAAI,CAAA;AAExD,EAAA,MAAM,UAAA,GAAa,aAAa,SAAA,KAAc,SAAA;AAC9C,EAAA,MAAM,YAAA,GAAe,aAAa,YAAA,IAAgB,SAAA;AAClD,EAAA,MAAM,WAAA,GAAc,YAAA;AAGpB,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,GAAA,IAAO,CAAC,SAAS,OAAA,EAAS;AAE/C,IAAA,MAAM,YAAA,GAAe,CAAC,MAAA,KAAwB;AAC1C,MAAA,IAAI,SAAS,OAAA,IAAW,MAAA,IAAU,QAAA,CAAS,OAAA,CAAQ,cAAc,MAAA,EAAQ;AACrE,QAAA,QAAA,CAAS,QAAQ,SAAA,GAAY,MAAA;AAC7B,QAAA,QAAA,CAAS,OAAA,CAAQ,IAAA,EAAK,CAAE,KAAA,CAAM,CAAA,GAAA,KAAO;AACjC,UAAA,OAAA,CAAQ,IAAA,CAAK,+DAA+D,GAAG,CAAA;AAAA,QACnF,CAAC,CAAA;AAAA,MACL;AAAA,IACJ,CAAA;AAGA,IAAA,MAAM,YAAA,GAAe,CAAC,IAAA,EAAW,MAAA,KAAwB;AACrD,MAAA,IAAI,IAAA,CAAK,EAAA,KAAO,WAAA,CAAY,EAAA,EAAI;AAC5B,QAAA,YAAA,CAAa,MAAM,CAAA;AAAA,MACvB;AAAA,IACJ,CAAA;AAGA,IAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,eAAA,GAAkB,WAAA,CAAY,iBAAgB,GAAI,IAAA;AACpF,IAAA,IAAI,aAAA,eAA4B,aAAa,CAAA;AAE7C,IAAA,GAAA,CAAI,EAAA,CAAG,eAAe,YAAY,CAAA;AAClC,IAAA,OAAO,MAAM;AACT,MAAA,GAAA,CAAI,GAAA,CAAI,eAAe,YAAY,CAAA;AAAA,IACvC,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,WAAA,EAAa,GAAA,EAAK,UAAU,CAAC,CAAA;AAGjC,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,UAAA,KAAe,aAAa,UAAA,EAAY;AACxC,MAAA,YAAA,GAAe,IAAI,CAAA;AACnB,MAAA,WAAA,CAAY,OAAA,EAAS,IAAA,EAAK,CAAE,KAAA,CAAM,MAAM;AAAA,MAAE,CAAC,CAAA;AAAA,IAC/C,CAAA,MAAO;AACH,MAAA,IAAI,YAAY,OAAA,EAAS;AACrB,QAAA,WAAA,CAAY,QAAQ,KAAA,EAAM;AAC1B,QAAA,WAAA,CAAY,QAAQ,WAAA,GAAc,CAAA;AAAA,MACtC;AAAA,IACJ;AAAA,EACJ,CAAA,EAAG,CAAC,UAAA,EAAY,UAAA,EAAY,YAAY,CAAC,CAAA;AAGzC,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,UAAA,KAAe,YAAA,IAAgB,UAAA,KAAe,SAAA,EAAW;AACzD,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACzB;AACA,IAAA,IAAI,eAAe,SAAA,EAAW;AAC1B,MAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,IACxB;AAAA,EACJ,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAGf,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,MAAA,IAAU,eAAe,OAAA,EAAS;AAClC,MAAA,WAAA,IAAc;AACd,MAAA,MAAM,UAAA,GAAa,eAAe,IAAA,GAAO,GAAA;AACzC,MAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,MAAA,MAAM,EAAA,GAAK,YAAY,MAAM;AACzB,QAAA,MAAM,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,EAAG,cAAc,IAAA,CAAK,GAAA,KAAQ,KAAA,CAAM,CAAA;AAC/D,QAAA,iBAAA,CAAkB,IAAA,CAAK,IAAA,CAAK,SAAA,GAAY,GAAI,CAAC,CAAA;AAE7C,QAAA,IAAI,aAAa,CAAA,EAAG;AAChB,UAAA,aAAA,CAAc,EAAE,CAAA;AAChB,UAAA,YAAA,GAAe,KAAK,CAAA;AAEpB,UAAA,cAAA,CAAe,KAAK,CAAA;AAAA,QACxB;AAAA,MACJ,GAAG,GAAG,CAAA;AACN,MAAA,OAAO,MAAM,cAAc,EAAE,CAAA;AAAA,IACjC,CAAA,MAAO;AACH,MAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,IAC1B;AAAA,EACJ,GAAG,CAAC,UAAA,EAAY,QAAQ,YAAA,EAAc,YAAA,EAAc,WAAW,CAAC,CAAA;AAGhE,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,EAAA;AACJ,IAAA,IAAI,MAAA,IAAU,UAAA,KAAe,YAAA,IAAgB,CAAC,UAAA,EAAY;AACtD,MAAA,sBAAA,CAAuB,EAAE,CAAA;AACzB,MAAA,EAAA,GAAK,YAAY,MAAM;AACnB,QAAA,sBAAA,CAAuB,CAAC,IAAA,KAAS;AAC7B,UAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,IAAQ,CAAA,EAAG;AAC5B,YAAA,aAAA,CAAc,EAAE,CAAA;AAChB,YAAA,IAAI,UAAA,KAAe,cAAc,MAAA,EAAO;AACxC,YAAA,OAAO,CAAA;AAAA,UACX;AACA,UAAA,OAAO,IAAA,GAAO,CAAA;AAAA,QAClB,CAAC,CAAA;AAAA,MACL,GAAG,GAAI,CAAA;AAAA,IACX,CAAA,MAAO;AACH,MAAA,sBAAA,CAAuB,IAAI,CAAA;AAAA,IAC/B;AACA,IAAA,OAAO,MAAM,cAAc,EAAE,CAAA;AAAA,EACjC,GAAG,CAAC,UAAA,EAAY,MAAA,EAAQ,UAAA,EAAY,MAAM,CAAC,CAAA;AAE3C,EAAA,IAAI,CAAC,MAAA,IAAU,UAAA,KAAe,MAAA,EAAQ,OAAO,IAAA;AAE7C,EAAA,uBACI,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,gBAAA;AAAA,MACX,SAAA,EAAW,uLAAuL,MAAA,GAAS,oBAAA,GAAuB,yBAC9N,CAAA,CAAA,EAAI,WAAA,GACE,mGACA,6IACN,CAAA,CAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,WAAM,GAAA,EAAK,QAAA,EAAU,QAAA,EAAQ,IAAA,EAAC,WAAU,aAAA,EAAc,CAAA;AAAA,wBACvD,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACG,GAAA,EAAK,WAAA;AAAA,YACL,GAAA,EAAI,mEAAA;AAAA,YACJ,IAAA,EAAI,IAAA;AAAA,YACJ,OAAA,EAAQ,MAAA;AAAA,YACR,SAAA,EAAU;AAAA;AAAA,SACd;AAAA,QAEC,WAAA,mBACG,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EAAA,EACX,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACG,OAAA,EAAS,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,cACnC,SAAA,EAAU,0KAAA;AAAA,cACV,YAAA,EAAW,UAAA;AAAA,cAEV,QAAA,EAAA,YAAA,oBAAgB,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,WACzC;AAAA,0BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACX,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gHAAA,EACX,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iDAAA,EACX,QAAA,EAAA,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,IAC3B,CAAA,EACJ,CAAA;AAAA,4BACA,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACG,OAAA,EAAS,MAAA;AAAA,gBACT,SAAA,EAAU,6LAAA;AAAA,gBACV,YAAA,EAAW,UAAA;AAAA,gBAEX,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,EAAA,EAAI,WAAU,qCAAA,EAAsC;AAAA;AAAA;AACrE,WAAA,EACJ;AAAA,SAAA,EACJ,CAAA,mBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kHAAA,EACX,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACG,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,cAClC,SAAA,EAAU,wGAAA;AAAA,cACV,YAAA,EAAW,UAAA;AAAA,cAEV,QAAA,EAAA,YAAA,oBAAgB,GAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,WAC1C;AAAA,0BAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iFAAA,EACX,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qEAAA,EACX,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2IAAA,EACX,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kEAAA,EACX,QAAA,EAAA,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,IAC3B,CAAA,EACJ,CAAA;AAAA,8BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACX,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,IAAA,EAAA,EAAG,WAAU,+EAAA,EACT,QAAA,EAAA,UAAA,GAAa,cAAe,WAAA,KAAgB,SAAA,GAAY,kBAAkB,WAAA,EAC/E,CAAA;AAAA,gCACA,IAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gEAAA,EACR,QAAA,EAAA;AAAA,kBAAA,YAAA;AAAA,kBAAa,SAAA;AAAA,kBAAQ,GAAA;AAAA,kBACrB,0BACG,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,qBAAA,EAAsB,QAAA,EAAA,YAAA,EAAU,oBAEhD,IAAA,CAAA,QAAA,EAAA,EACM,QAAA,EAAA;AAAA,oBAAA,CAAA,UAAA,KAAe,YAAA,IAAgB,UAAA,KAAe,SAAA,qBAC5C,GAAA,CAAC,MAAA,EAAA,EACI,uBAAa,kBAAA,GAAqB,UAAA,KAAe,YAAA,GAAe,eAAA,GAAkB,YAAA,EACvF,CAAA;AAAA,oBAEH,UAAA,KAAe,SAAA,oBAAa,GAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,oBACzC,UAAA,KAAe,OAAA,oBAAW,GAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,YAAA,EAAU;AAAA,mBAAA,EAC/C;AAAA,iBAAA,EAER;AAAA,eAAA,EACJ;AAAA,aAAA,EACJ,CAAA;AAAA,4BAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0FAAA,EACV,QAAA,EAAA;AAAA,cAAA,UAAA,IAAc,eAAe,SAAA,oBAC1B,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACG,OAAA,EAAS,UAAA;AAAA,kBACT,SAAA,EAAU,4MAAA;AAAA,kBACV,YAAA,EAAW,QAAA;AAAA,kBAEX,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,eACrB;AAAA,cAAA,CAGF,UAAA,KAAe,SAAA,IAAc,UAAA,IAAc,UAAA,KAAe,SAAA,qBACxD,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACG,OAAA,EAAS,UAAA;AAAA,kBACT,SAAA,EAAW,CAAA,iJAAA,EAAoJ,OAAA,GAAU,2DAAA,GAA8D,+DACnO,CAAA,CAAA;AAAA,kBACJ,YAAA,EAAW,aAAA;AAAA,kBAEV,QAAA,EAAA,OAAA,uBAAW,MAAA,EAAA,EAAO,IAAA,EAAM,IAAI,CAAA,mBAAK,GAAA,CAAC,GAAA,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,eACrD;AAAA,8BAGJ,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACG,OAAA,EAAS,MAAA;AAAA,kBACT,SAAA,EAAU,wMAAA;AAAA,kBACV,YAAA,EAAY,UAAA,IAAc,UAAA,KAAe,SAAA,GAAY,SAAA,GAAY,UAAA;AAAA,kBAEjE,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,EAAA,EAAI,WAAU,qCAAA,EAAsC;AAAA;AAAA;AACrE,aAAA,EACJ;AAAA,WAAA,EACJ,CAAA;AAAA,0BAEA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qEAAA,EAAsE,CAAA;AAAA,UAEpF,aAAa,UAAA,KAAe,OAAA,oBACzB,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mHAAA,EACX,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iEAAA,EAAkE,QAAA,EAAA,aAAA,EAE/E,CAAA;AAAA,4BACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yDAAA,EACR,QAAA,EAAA,SAAA,EACL,CAAA;AAAA,YACC,cAAA,KAAmB,IAAA,oBAChB,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0BAAA,EACX,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kFAAA,EACX,QAAA,kBAAA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACG,SAAA,EAAU,mEAAA;AAAA,kBACV,KAAA,EAAO;AAAA,oBACH,KAAA,EAAO,GAAG,IAAA,CAAK,GAAA;AAAA,sBACX,CAAA;AAAA,sBACC,cAAA,IAAkB,YAAA,GAAe,CAAA,GAAI,CAAA,CAAA,GAAM;AAAA,qBAC/C,CAAA,CAAA;AAAA;AACL;AAAA,eACJ,EACJ,CAAA;AAAA,8BACA,IAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0EAAA,EAA2E,QAAA,EAAA;AAAA,gBAAA,aAAA;AAAA,gBACxE,cAAA;AAAA,gBAAe;AAAA,eAAA,EAC/B;AAAA,aAAA,EACJ;AAAA,WAAA,EAER,CAAA;AAAA,0BAGJ,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EACX,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4HAAA,EACT,QAAA,EAAA;AAAA,cAAA,CAAA,UAAA,KAAe,gBAAgB,UAAA,KAAe,SAAA,yBAC3C,MAAA,EAAA,EAAM,QAAA,EAAA,UAAA,GAAa,kBAAkB,eAAA,EAAgB,CAAA;AAAA,cAEzD,UAAA,KAAe,SAAA,oBAAa,GAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,cACzC,UAAA,KAAe,OAAA,oBAAW,GAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,cAAA,CACzC,eAAe,YAAA,IAAgB,UAAA,KAAe,aAAa,UAAA,KAAe,SAAA,MACxE,6BACM,GAAA,CAAC,aAAA,EAAA,EAAc,WAAU,iDAAA,EAAkD,IAAA,EAAM,IAAI,CAAA,mBACrF,GAAA,CAAC,gBAAa,SAAA,EAAU,gDAAA,EAAiD,MAAM,EAAA,EAAI,CAAA;AAAA,aAAA,EAEjG,CAAA;AAAA,YAEC,UAAA,KAAe,6BACZ,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+LAAA,EACX,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,YAAA,EAAa,CAAA,EACxB,CAAA;AAAA,YAGH,UAAA,KAAe,WAAW,cAAA,KAAmB,IAAA,wBACzC,KAAA,EAAA,EAAI,SAAA,EAAU,8LAAA,EACX,QAAA,kBAAA,IAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,cAAA,aAAA;AAAA,cAAY,cAAA;AAAA,cAAe;AAAA,aAAA,EAAC,CAAA,EACtC,CAAA;AAAA,YAAA,CAGF,mBAAA,KAAwB,IAAA,IAAQ,UAAA,KAAe,SAAA,KAAc,CAAC,UAAA,IAAc,UAAA,KAAe,SAAA,IAAa,UAAA,KAAe,OAAA,oBACrH,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8LAAA,EACX,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,UAAK,SAAA,EAAU,4CAAA,EACX,QAAA,EAAA,UAAA,KAAe,SAAA,GAAY,eAAe,eAAA,EAC/C,CAAA;AAAA,cACC,eAAe,YAAA,IAAgB,mBAAA,oBAC5B,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,8CAAA,EACX,QAAA,EAAA;AAAA,gBAAA,IAAA,CAAK,KAAA,CAAM,sBAAsB,EAAE,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAE,OAAO,mBAAA,GAAsB,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG;AAAA,eAAA,EAC5F;AAAA,aAAA,EAER;AAAA,WAAA,EAER;AAAA,SAAA,EACJ;AAAA;AAAA;AAAA,GAER;AAER;AChUO,SAAS,OAAA,CAAQ;AAAA,EACtB,eAAA;AAAA,EACA,aAAA,GAAgB,EAAA;AAAA,EAChB,QAAA,GAAW,IAAA;AAAA,EACX,SAAA,GAAY,EAAA;AAAA,EACZ,mBAAA,EAAqB,kBAAA;AAAA,EACrB,iBAAA,EAAmB,yBAAA;AAAA,EACnB;AACF,CAAA,EAAiB;AACf,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAW,GAAI,OAAA,EAAQ;AACrC,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,mBAAA,EAAoB;AAC5C,EAAA,MAAM,EAAE,UAAA,EAAY,iBAAA,EAAmB,YAAA,KAAiB,aAAA,EAAc;AAEtE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,SAAS,aAAa,CAAA;AAClD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,QAAQ,CAAA;AACvD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,QAAAA,CAAS,6BAA6B,EAAE,CAAA;AAExF,EAAA,MAAM,aAAa,kBAAA,EAAoB,MAAA,GACnC,qBACA,iBAAA,CAAkB,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,IAC9B,OAAO,GAAA,CAAI,SAAA;AAAA,IACX,OAAO,GAAA,CAAI;AAAA,GACb,CAAE,CAAA;AAGN,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,yBAAA,IAA6B,8BAA8B,gBAAA,EAAkB;AAC/E,MAAA,mBAAA,CAAoB,yBAAyB,CAAA;AAAA,IAC/C;AAAA,EACF,CAAA,EAAG,CAAC,yBAAyB,CAAC,CAAA;AAG9B,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,gBAAA,IAAoB,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAC9C,MAAA,mBAAA,CAAoB,UAAA,CAAW,CAAC,CAAA,CAAE,KAAK,CAAA;AAAA,IACzC;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,gBAAgB,CAAC,CAAA;AAEjC,EAAA,MAAM,eAAA,GAAkB,qBAAqB,UAAA,CAAW,MAAA,GAAS,IAAI,UAAA,CAAW,CAAC,EAAE,KAAA,GAAQ,EAAA,CAAA;AAE3F,EAAA,MAAM,SAAS,CAAC,KAAA,KAAkB,UAAU,CAAC,CAAA,KAAM,IAAI,KAAK,CAAA;AAC5D,EAAA,MAAM,SAAA,GAAY,MAAM,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAEvD,EAAA,MAAM,qBAAA,GAAwB,OAAO,GAAA,KAAgB;AACnD,IAAA,mBAAA,CAAoB,GAAG,CAAA;AACvB,IAAA,iBAAA,GAAoB,GAAG,CAAA;AAEvB,IAAA,MAAM,aAAa,GAAG,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,aAAa,YAAY;AAC7B,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,IAAA,OAAW,EAAA,EAAI;AACrC,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,QAAQ,eAAe,CAAA;AAClC,MAAA,eAAA,GAAkB,MAAM,CAAA;AAAA,IAC1B,SAAS,CAAA,EAAG;AAAA,IAEZ;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,cAAA,GACJ,CAAC,MAAA,IACD,MAAA,CAAO,IAAA,EAAK,KAAM,EAAA,IAClB,CAAC,WAAA,IACD,UAAA,KAAe,SAAA,IACf,UAAA,KAAe,aACf,UAAA,KAAe,YAAA;AAEjB,EAAA,MAAM,8BACJC,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,IAAA;AAAA,MACN,MAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAM,4BAAA;AAAA,MAEN,QAAA,kBAAAA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAA,EAAE,mvLAAA;AAAA,UACF,IAAA,EAAK;AAAA;AAAA;AACP;AAAA,GACF;AAGF,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,+BAAA,EAAkC,SAAS,CAAA,uCAAA,CAAA,EAEzD,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0IAAA,EAA2I,QAAA,EAAA,WAAA,EAE1J,CAAA;AAAA,sBACAA,IAAC,aAAA,EAAA,EAAc;AAAA,KAAA,EACjB,CAAA;AAAA,oBAGAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8FAAA,EAEb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sEAAA,EAAuE,QAAA,EAAA,WAAA,EAEvF,CAAA;AAAA,wBACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,QAAA,EAAU,WAAW,MAAA,KAAW,CAAA;AAAA,cAChC,SAAA,EAAU,sSAAA;AAAA,cACV,KAAA,EAAO,eAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,qBAAA,CAAsB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAEpD,QAAA,EAAA,UAAA,CAAW,SAAS,CAAA,GACnB,UAAA,CAAW,IAAI,CAAC,GAAA,qBACdA,GAAAA,CAAC,QAAA,EAAA,EAAuB,KAAA,EAAO,IAAI,KAAA,EAChC,QAAA,EAAA,GAAA,CAAI,SADM,GAAA,CAAI,KAEjB,CACD,CAAA,mBAEDA,GAAAA,CAAC,QAAA,EAAA,EAAO,QAAA,EAAA,YAAA,EAAU;AAAA;AAAA,WAEtB;AAAA,0BACAA,GAAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,EAAA;AAAA,cACN,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oMAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,EAAA,EAAI,WAAU,8BAAA,EAA+B,CAAA;AAAA,0BACzDA,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,KAAA;AAAA,cACL,WAAA,EAAY,cAAA;AAAA,cACZ,KAAA,EAAO,MAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cACzC,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA;AAAA,wBACAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAU,cAAA;AAAA,YACV,OAAA,EAAS,UAAA;AAAA,YACT,SAAA,EAAU,+PAAA;AAAA,YAEV,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAM,IAAA,EAAM,IAAI,IAAA,EAAK,OAAA,EAAQ,WAAU,iBAAA,EAAkB;AAAA;AAAA;AAC5D,OAAA,EACF,CAAA;AAAA,sBAGAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACZ,QAAA,EAAA,WAAA,mBACCC,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,kBAAAC,IAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,YACnC,SAAA,EAAU,iQAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAAC,CAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI,WAAU,mBAAA,EAAoB,CAAA;AAAA,cAAE;AAAA;AAAA;AAAA,SAE/C,EACF,CAAA;AAAA,wBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACZ,QAAA,EAAA;AAAA,UACC,GAAA;AAAA,UAAK,GAAA;AAAA,UAAK,GAAA;AAAA,UACV,GAAA;AAAA,UAAK,GAAA;AAAA,UAAK,GAAA;AAAA,UACV,GAAA;AAAA,UAAK,GAAA;AAAA,UAAK,GAAA;AAAA,UACV,GAAA;AAAA,UAAK,GAAA;AAAA,UAAK;AAAA,SACZ,CAAE,GAAA,CAAI,CAAC,CAAA,qBACLA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,SAAS,MAAO,CAAA,KAAM,QAAQ,SAAA,EAAU,GAAI,OAAO,CAAC,CAAA;AAAA,YACpD,SAAA,EAAU,qPAAA;AAAA,YAET,QAAA,EAAA,CAAA,KAAM,wBAAQA,GAAAA,CAAC,UAAO,IAAA,EAAM,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAqB,CAAA,GAAK;AAAA,WAAA;AAAA,UAJhE;AAAA,SAMR,CAAA,EACH;AAAA,OAAA,EACF,oBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCACb,QAAA,kBAAAC,IAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,UAClC,SAAA,EAAU,8PAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAAA,EAAgC,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,YAAO;AAAA;AAAA;AAAA,SAGvE,CAAA,EAEJ;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACjLA,IAAM,eAAA,GAAkB,cAAgD,MAAS,CAAA;AAQ1E,SAAS,gBAAA,CAAiB;AAAA,EAC7B,MAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA,GAAiB;AACrB,CAAA,EAA0B;AACtB,EAAA,MAAM,CAAC,GAAG,CAAA,GAAIF,QAAAA,CAAS,MAAM,IAAI,QAAA,CAAS,MAAM,CAAC,CAAA;AACjD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,SAA2B,cAAc,CAAA;AACzF,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAsB,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAqB,MAAM,CAAA;AAC/D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,OAAO,CAAA;AACxD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAE9D,EAAA,MAAM,mBAAA,GAAsBI,OAAsB,IAAI,CAAA;AAGtD,EAAAH,UAAU,MAAM;AACZ,IAAA,IAAI,CAAC,cAAA,EAAgB;AAErB,IAAA,MAAM,gBAAgB,YAAY;AAC9B,MAAA,IAAI;AACA,QAAA,MAAM,IAAI,UAAA,EAAW;AACrB,QAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,MACzB,SAAS,GAAA,EAAK;AACV,QAAA,QAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,0BAA0B,CAAC,CAAA;AAAA,MAC/E;AAAA,IACJ,CAAA;AAEA,IAAA,aAAA,EAAc;AAEd,IAAA,OAAO,MAAM;AACT,MAAA,GAAA,CAAI,OAAA,EAAQ;AAAA,IAChB,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,GAAA,EAAK,cAAc,CAAC,CAAA;AAGxB,EAAAA,UAAU,MAAM;AACZ,IAAA,IAAI,CAAC,GAAA,EAAK;AAEV,IAAA,MAAM,sBAAA,GAAyB,CAAC,KAAA,KAA2B;AACvD,MAAA,mBAAA,CAAoB,MAAM,MAAM,CAAA;AAChC,MAAA,IAAI,MAAM,SAAA,EAAW;AACjB,QAAA,YAAA,CAAa,MAAM,SAAS,CAAA;AAAA,MAChC;AACA,MAAA,IAAI,MAAM,KAAA,EAAO;AACb,QAAA,QAAA,CAAS,IAAI,KAAA,CAAM,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,MACnC;AAAA,IACJ,CAAA;AAEA,IAAA,MAAM,kBAAA,GAAqB,CAACI,KAAAA,KAAe;AACvC,MAAA,cAAA,CAAeA,KAAI,CAAA;AACnB,MAAA,aAAA,CAAc,SAAS,CAAA;AAAA,IAC3B,CAAA;AAEA,IAAA,MAAM,kBAAA,GAAqB,CAACA,KAAAA,KAAe;AACvC,MAAA,cAAA,CAAeA,KAAI,CAAA;AACnB,MAAA,aAAA,CAAc,YAAY,CAAA;AAAA,IAC9B,CAAA;AAEA,IAAA,MAAM,iBAAA,GAAoB,CAACA,KAAAA,KAAe;AACtC,MAAA,aAAA,CAAc,SAAS,CAAA;AAAA,IAC3B,CAAA;AAEA,IAAA,MAAM,mBAAA,GAAsB,CAACA,KAAAA,KAAe;AACxC,MAAA,aAAA,CAAc,SAAS,CAAA;AAAA,IAC3B,CAAA;AAEA,IAAA,MAAM,eAAA,GAAkB,CAACA,KAAAA,KAAe;AACpC,MAAA,aAAA,CAAc,OAAO,CAAA;AACrB,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,UAAA,CAAW,KAAK,CAAA;AAGhB,MAAA,UAAA,CAAW,MAAM;AACb,QAAA,aAAA,CAAc,MAAM,CAAA;AAAA,MACxB,GAAG,GAAI,CAAA;AAAA,IACX,CAAA;AAEA,IAAA,MAAM,gBAAA,GAAmB,CAACA,KAAAA,EAAY,QAAA,KAAqB;AACvD,MAAA,QAAA,CAAS,IAAI,KAAA,CAAM,QAAQ,CAAC,CAAA;AAC5B,MAAA,aAAA,CAAc,OAAO,CAAA;AACrB,MAAA,cAAA,CAAe,IAAI,CAAA;AAAA,IACvB,CAAA;AAEA,IAAA,MAAM,WAAA,GAAc,CAAC,GAAA,KAAe;AAChC,MAAA,QAAA,CAAS,GAAG,CAAA;AAAA,IAChB,CAAA;AAEA,IAAA,GAAA,CAAI,EAAA,CAAG,qBAAqB,sBAAsB,CAAA;AAClD,IAAA,GAAA,CAAI,EAAA,CAAG,iBAAiB,kBAAkB,CAAA;AAC1C,IAAA,GAAA,CAAI,EAAA,CAAG,iBAAiB,kBAAkB,CAAA;AAC1C,IAAA,GAAA,CAAI,EAAA,CAAG,gBAAgB,iBAAiB,CAAA;AACxC,IAAA,GAAA,CAAI,EAAA,CAAG,kBAAkB,mBAAmB,CAAA;AAC5C,IAAA,GAAA,CAAI,EAAA,CAAG,cAAc,eAAe,CAAA;AACpC,IAAA,GAAA,CAAI,EAAA,CAAG,eAAe,gBAAgB,CAAA;AACtC,IAAA,GAAA,CAAI,EAAA,CAAG,SAAS,WAAW,CAAA;AAE3B,IAAA,OAAO,MAAM;AACT,MAAA,GAAA,CAAI,GAAA,CAAI,qBAAqB,sBAAsB,CAAA;AACnD,MAAA,GAAA,CAAI,GAAA,CAAI,iBAAiB,kBAAkB,CAAA;AAC3C,MAAA,GAAA,CAAI,GAAA,CAAI,iBAAiB,kBAAkB,CAAA;AAC3C,MAAA,GAAA,CAAI,GAAA,CAAI,gBAAgB,iBAAiB,CAAA;AACzC,MAAA,GAAA,CAAI,GAAA,CAAI,kBAAkB,mBAAmB,CAAA;AAC7C,MAAA,GAAA,CAAI,GAAA,CAAI,cAAc,eAAe,CAAA;AACrC,MAAA,GAAA,CAAI,GAAA,CAAI,eAAe,gBAAgB,CAAA;AACvC,MAAA,GAAA,CAAI,GAAA,CAAI,SAAS,WAAW,CAAA;AAAA,IAChC,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAGR,EAAAJ,UAAU,MAAM;AACZ,IAAA,IAAI,UAAA,KAAe,aAAa,WAAA,EAAa;AACzC,MAAA,mBAAA,CAAoB,OAAA,GAAU,MAAA,CAAO,WAAA,CAAY,MAAM;AACnD,QAAA,MAAM,WAAW,WAAA,CAAY,QAAA;AAC7B,QAAA,MAAM,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,QAAA,GAAW,EAAE,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AAC5D,QAAA,MAAM,KAAK,MAAA,CAAO,QAAA,GAAW,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAChD,QAAA,eAAA,CAAgB,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAA;AAAA,MACjC,GAAG,GAAI,CAAA;AAAA,IACX,CAAA,MAAO;AACH,MAAA,eAAA,CAAgB,OAAO,CAAA;AACvB,MAAA,IAAI,oBAAoB,OAAA,EAAS;AAC7B,QAAA,aAAA,CAAc,oBAAoB,OAAO,CAAA;AACzC,QAAA,mBAAA,CAAoB,OAAA,GAAU,IAAA;AAAA,MAClC;AAAA,IACJ;AAEA,IAAA,OAAO,MAAM;AACT,MAAA,IAAI,oBAAoB,OAAA,EAAS;AAC7B,QAAA,aAAA,CAAc,oBAAoB,OAAO,CAAA;AAAA,MAC7C;AAAA,IACJ,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,UAAA,EAAY,WAAW,CAAC,CAAA;AAG5B,EAAA,MAAM,IAAA,GAAO,OAAO,WAAA,EAAqBK,UAAAA,KAAuB;AAC5D,IAAA,IAAI;AACA,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,MAAM,IAAI,IAAA,CAAK,WAAA,EAAa,EAAE,SAAA,EAAAA,YAAW,CAAA;AAAA,IAC7C,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,qBAAqB,CAAC,CAAA;AACtE,MAAA,MAAM,GAAA;AAAA,IACV;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,SAAS,MAAM;AACjB,IAAA,IAAI;AACA,MAAA,GAAA,CAAI,MAAA,EAAO;AAAA,IACf,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,mBAAmB,CAAC,CAAA;AAAA,IACxE;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,aAAa,MAAM;AACrB,IAAA,IAAI,CAAC,WAAA,EAAa;AAElB,IAAA,IAAI,OAAA,EAAS;AACT,MAAA,WAAA,CAAY,MAAA,EAAO;AACnB,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IACpB,CAAA,MAAO;AACH,MAAA,WAAA,CAAY,IAAA,EAAK;AACjB,MAAA,UAAA,CAAW,IAAI,CAAA;AAAA,IACnB;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,aAAa,YAAY;AAC3B,IAAA,IAAI;AACA,MAAA,MAAM,IAAI,UAAA,EAAW;AAAA,IACzB,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,uBAAuB,CAAC,CAAA;AAAA,IAC5E;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,YAAA,GAAqC;AAAA,IACvC,GAAA;AAAA,IACA,gBAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACJ;AAEA,EAAA,uBACIJ,GAAAA,CAAC,eAAA,CAAgB,UAAhB,EAAyB,KAAA,EAAO,cAC5B,QAAA,EACL,CAAA;AAER;AAKO,SAAS,WAAA,GAAoC;AAChD,EAAA,MAAM,OAAA,GAAU,WAAW,eAAe,CAAA;AAC1C,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,EACtE;AACA,EAAA,OAAO,OAAA;AACX;AAKO,SAAS,OAAA,GAAU;AACtB,EAAA,MAAM,EAAE,GAAA,EAAK,IAAA,EAAM,MAAA,EAAQ,UAAA,EAAY,UAAA,EAAY,UAAA,EAAY,YAAA,EAAc,OAAA,EAAS,WAAA,EAAa,KAAA,EAAM,GAAI,WAAA,EAAY;AAEzH,EAAA,OAAO;AAAA,IACH,GAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAW,KAAA,EAAO;AAAA,GACtB;AACJ;AAKO,SAAS,mBAAA,GAAsB;AAClC,EAAA,MAAM,EAAE,gBAAA,EAAkB,aAAA,EAAe,KAAA,EAAO,SAAA,KAAc,WAAA,EAAY;AAE1E,EAAA,OAAO;AAAA,IACH,gBAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAa,gBAAA,KAAqB,YAAA;AAAA,IAClC,KAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAKO,SAAS,SAAA,GAAY;AACxB,EAAA,MAAM,EAAE,GAAA,EAAK,aAAA,EAAc,GAAI,WAAA,EAAY;AAC3C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIF,SAAuD,IAAI,CAAA;AACnF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,YAAY,YAAY;AAC1B,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,aAAA,EAAe;AAE5B,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACA,MAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,SAAA,EAAU;AAChC,MAAA,OAAA,CAAQ,GAAG,CAAA;AAAA,IACf,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,wBAAwB,CAAC,CAAA;AAAA,IAC7E,CAAA,SAAE;AACE,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACtB;AAAA,EACJ,CAAA;AAEA,EAAAC,UAAU,MAAM;AACZ,IAAA,IAAI,aAAA,EAAe;AACf,MAAA,OAAA,CAAQ,IAAI,iCAAiC,CAAA;AAC7C,MAAA,SAAA,EAAU;AAAA,IACd;AAAA,EACJ,CAAA,EAAG,CAAC,aAAA,EAAe,GAAG,CAAC,CAAA;AAGvB,EAAAA,UAAU,MAAM;AACZ,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,aAAA,EAAe;AAE5B,IAAA,MAAM,kBAAkB,MAAM;AAC1B,MAAA,OAAA,CAAQ,IAAI,4DAA4D,CAAA;AAExE,MAAA,UAAA,CAAW,WAAW,GAAI,CAAA;AAAA,IAC9B,CAAA;AAEA,IAAA,GAAA,CAAI,EAAA,CAAG,cAAc,eAAe,CAAA;AACpC,IAAA,OAAO,MAAM;AACT,MAAA,GAAA,CAAI,GAAA,CAAI,cAAc,eAAe,CAAA;AAAA,IACzC,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,GAAA,EAAK,aAAa,CAAC,CAAA;AAEvB,EAAA,OAAO;AAAA,IACH,OAAA,EAAS,MAAM,OAAA,IAAW,CAAA;AAAA,IAC1B,QAAA,EAAU,MAAM,QAAA,IAAY,KAAA;AAAA,IAC5B,SAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACb;AACJ;AAKO,SAAS,aAAA,GAAgB;AAC5B,EAAA,MAAM,EAAE,GAAA,EAAK,aAAA,EAAc,GAAI,WAAA,EAAY;AAC3C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAID,QAAAA,CAAgB,EAAE,CAAA;AACtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,kBAAkB,YAAY;AAChC,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,aAAA,EAAe;AAE5B,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,eAAA,EAAgB;AACvC,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACtB,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,4BAA4B,CAAC,CAAA;AAAA,IACjF,CAAA,SAAE;AACE,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACtB;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,OAAO,SAAA,KAAsB;AAC9C,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,MAAM,GAAA,CAAI,aAAa,SAAS,CAAA;AAAA,EACpC,CAAA;AAEA,EAAAC,UAAU,MAAM;AACZ,IAAA,IAAI,aAAA,EAAe;AACf,MAAA,eAAA,EAAgB;AAAA,IACpB;AAAA,EACJ,CAAA,EAAG,CAAC,aAAA,EAAe,GAAG,CAAC,CAAA;AAEvB,EAAA,OAAO;AAAA,IACH,UAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACb;AACJ;AAKO,SAAS,aAAA,GAAgB;AAC5B,EAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAU,SAAA,EAAW,KAAA,KAAU,SAAA,EAAU;AAE1D,EAAA,IAAI,KAAA,EAAO;AACP,IAAA,OAAA,CAAQ,IAAA,CAAK,6BAA6B,KAAK,CAAA;AAAA,EACnD;AAEA,EAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS;AAAA,IAC7C,KAAA,EAAO,UAAA;AAAA,IACP,QAAA,EAAU,QAAA,KAAa,KAAA,GAAQ,KAAA,GAAS,QAAA,IAAY;AAAA,GACvD,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAEjB,EAAA,uBACIE,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+MAAA,EACX,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2CAAA,EAA4C,QAAA,EAAA,iBAAA,EAE5D,CAAA;AAAA,oBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mCAAA,EAAqC,QAAA,EAAA,SAAA,GAAY,QAAQ,SAAA,EAAU;AAAA,GAAA,EACvF,CAAA;AAER","file":"index.mjs","sourcesContent":["import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n\n/**\n * Is empty string\n *\n * @param {unknown} value\n * @returns {boolean} Whether the value is an empty string\n */\nexport const isEmptyString = (value: unknown): boolean => value === '';\n\n/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n};\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M17 7 7 17', key: '15tmo1' }],\n ['path', { d: 'M17 17H7V7', key: '1org7z' }],\n];\n\n/**\n * @component @name ArrowDownLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTcgNyA3IDE3IiAvPgogIDxwYXRoIGQ9Ik0xNyAxN0g3VjciIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/arrow-down-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowDownLeft = createLucideIcon('arrow-down-left', __iconNode);\n\nexport default ArrowDownLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M7 7h10v10', key: '1tivn9' }],\n ['path', { d: 'M7 17 17 7', key: '1vkiza' }],\n];\n\n/**\n * @component @name ArrowUpRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNyA3aDEwdjEwIiAvPgogIDxwYXRoIGQ9Ik03IDE3IDE3IDciIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/arrow-up-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowUpRight = createLucideIcon('arrow-up-right', __iconNode);\n\nexport default ArrowUpRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]];\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('chevron-down', __iconNode);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M10 5a2 2 0 0 0-1.344.519l-6.328 5.74a1 1 0 0 0 0 1.481l6.328 5.741A2 2 0 0 0 10 19h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2z',\n key: '1yo7s0',\n },\n ],\n ['path', { d: 'm12 9 6 6', key: 'anjzzh' }],\n ['path', { d: 'm18 9-6 6', key: '1fp51s' }],\n];\n\n/**\n * @component @name Delete\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgNWEyIDIgMCAwIDAtMS4zNDQuNTE5bC02LjMyOCA1Ljc0YTEgMSAwIDAgMCAwIDEuNDgxbDYuMzI4IDUuNzQxQTIgMiAwIDAgMCAxMCAxOWgxMGEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMnoiIC8+CiAgPHBhdGggZD0ibTEyIDkgNiA2IiAvPgogIDxwYXRoIGQ9Im0xOCA5LTYgNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/delete\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Delete = createLucideIcon('delete', __iconNode);\n\nexport default Delete;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M8 3H5a2 2 0 0 0-2 2v3', key: '1dcmit' }],\n ['path', { d: 'M21 8V5a2 2 0 0 0-2-2h-3', key: '1e4gt3' }],\n ['path', { d: 'M3 16v3a2 2 0 0 0 2 2h3', key: 'wsl5sc' }],\n ['path', { d: 'M16 21h3a2 2 0 0 0 2-2v-3', key: '18trek' }],\n];\n\n/**\n * @component @name Maximize\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAzSDVhMiAyIDAgMCAwLTIgMnYzIiAvPgogIDxwYXRoIGQ9Ik0yMSA4VjVhMiAyIDAgMCAwLTItMmgtMyIgLz4KICA8cGF0aCBkPSJNMyAxNnYzYTIgMiAwIDAgMCAyIDJoMyIgLz4KICA8cGF0aCBkPSJNMTYgMjFoM2EyIDIgMCAwIDAgMi0ydi0zIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/maximize\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Maximize = createLucideIcon('maximize', __iconNode);\n\nexport default Maximize;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 19v3', key: 'npa21l' }],\n ['path', { d: 'M15 9.34V5a3 3 0 0 0-5.68-1.33', key: '1gzdoj' }],\n ['path', { d: 'M16.95 16.95A7 7 0 0 1 5 12v-2', key: 'cqa7eg' }],\n ['path', { d: 'M18.89 13.23A7 7 0 0 0 19 12v-2', key: '16hl24' }],\n ['path', { d: 'm2 2 20 20', key: '1ooewy' }],\n ['path', { d: 'M9 9v3a3 3 0 0 0 5.12 2.12', key: 'r2i35w' }],\n];\n\n/**\n * @component @name MicOff\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTl2MyIgLz4KICA8cGF0aCBkPSJNMTUgOS4zNFY1YTMgMyAwIDAgMC01LjY4LTEuMzMiIC8+CiAgPHBhdGggZD0iTTE2Ljk1IDE2Ljk1QTcgNyAwIDAgMSA1IDEydi0yIiAvPgogIDxwYXRoIGQ9Ik0xOC44OSAxMy4yM0E3IDcgMCAwIDAgMTkgMTJ2LTIiIC8+CiAgPHBhdGggZD0ibTIgMiAyMCAyMCIgLz4KICA8cGF0aCBkPSJNOSA5djNhMyAzIDAgMCAwIDUuMTIgMi4xMiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/mic-off\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MicOff = createLucideIcon('mic-off', __iconNode);\n\nexport default MicOff;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 19v3', key: 'npa21l' }],\n ['path', { d: 'M19 10v2a7 7 0 0 1-14 0v-2', key: '1vc78b' }],\n ['rect', { x: '9', y: '2', width: '6', height: '13', rx: '3', key: 's6n7sd' }],\n];\n\n/**\n * @component @name Mic\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTl2MyIgLz4KICA8cGF0aCBkPSJNMTkgMTB2MmE3IDcgMCAwIDEtMTQgMHYtMiIgLz4KICA8cmVjdCB4PSI5IiB5PSIyIiB3aWR0aD0iNiIgaGVpZ2h0PSIxMyIgcng9IjMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/mic\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Mic = createLucideIcon('mic', __iconNode);\n\nexport default Mic;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm14 10 7-7', key: 'oa77jy' }],\n ['path', { d: 'M20 10h-6V4', key: 'mjg0md' }],\n ['path', { d: 'm3 21 7-7', key: 'tjx5ai' }],\n ['path', { d: 'M4 14h6v6', key: 'rmj7iw' }],\n];\n\n/**\n * @component @name Minimize2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTQgMTAgNy03IiAvPgogIDxwYXRoIGQ9Ik0yMCAxMGgtNlY0IiAvPgogIDxwYXRoIGQ9Im0zIDIxIDctNyIgLz4KICA8cGF0aCBkPSJNNCAxNGg2djYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/minimize-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Minimize2 = createLucideIcon('minimize-2', __iconNode);\n\nexport default Minimize2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384',\n key: '9njp5v',\n },\n ],\n];\n\n/**\n * @component @name Phone\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTMuODMyIDE2LjU2OGExIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgNi4zOTIgNi4zODQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/phone\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Phone = createLucideIcon('phone', __iconNode);\n\nexport default Phone;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2', key: '975kel' }],\n ['circle', { cx: '12', cy: '7', r: '4', key: '17ys0d' }],\n];\n\n/**\n * @component @name User\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTkgMjF2LTJhNCA0IDAgMCAwLTQtNEg5YTQgNCAwIDAgMC00IDR2MiIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjciIHI9IjQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/user\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst User = createLucideIcon('user', __iconNode);\n\nexport default User;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","'use client';\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useCall } from '../index';\nimport {\n Phone,\n Mic,\n MicOff,\n Maximize,\n Minimize2,\n ArrowUpRight,\n ArrowDownLeft,\n} from 'lucide-react';\n\ninterface CallInterfaceProps {\n isOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n onCallEnded?: () => void;\n maximizeIcon?: React.ReactNode;\n minimizeIcon?: React.ReactNode;\n}\n\nexport function CallInterface({\n isOpen = false,\n onOpenChange,\n onCallEnded,\n maximizeIcon,\n minimizeIcon,\n}: CallInterfaceProps) {\n const {\n sdk,\n callStatus,\n currentCall,\n callDuration,\n isMuted,\n hangup,\n answerCall,\n toggleMute,\n callError,\n } = useCall();\n\n const [isMinimized, setIsMinimized] = useState(false);\n const [wasConnected, setWasConnected] = useState(false);\n const [closeCountdown, setCloseCountdown] = useState<number | null>(null);\n const [connectingCountdown, setConnectingCountdown] = useState<number | null>(null);\n\n const audioRef = useRef<HTMLAudioElement | null>(null);\n const ringtoneRef = useRef<HTMLAudioElement | null>(null);\n\n const isIncoming = currentCall?.direction === 'inbound';\n const remoteNumber = currentCall?.remoteNumber || 'Unknown';\n const displayName = remoteNumber;\n\n // Attach remote stream to audio element\n useEffect(() => {\n if (!currentCall || !sdk || !audioRef.current) return;\n\n const updateStream = (stream: MediaStream) => {\n if (audioRef.current && stream && audioRef.current.srcObject !== stream) {\n audioRef.current.srcObject = stream;\n audioRef.current.play().catch(err => {\n console.warn('SDK UI: Auto-play failed, user interaction might be needed:', err);\n });\n }\n };\n\n // Handle stream from events (emitted when SSRC changes or bridge occurs)\n const handleStream = (call: any, stream: MediaStream) => {\n if (call.id === currentCall.id) {\n updateStream(stream);\n }\n };\n\n // Initial check for existing stream\n const initialStream = currentCall.getRemoteStream ? currentCall.getRemoteStream() : null;\n if (initialStream) updateStream(initialStream);\n\n sdk.on('call:stream', handleStream);\n return () => {\n sdk.off('call:stream', handleStream);\n };\n }, [currentCall, sdk, callStatus]);\n\n // Play ringtone for incoming calls\n useEffect(() => {\n if (callStatus === 'ringing' && isIncoming) {\n onOpenChange?.(true);\n ringtoneRef.current?.play().catch(() => { });\n } else {\n if (ringtoneRef.current) {\n ringtoneRef.current.pause();\n ringtoneRef.current.currentTime = 0;\n }\n }\n }, [callStatus, isIncoming, onOpenChange]);\n\n // Track connection state\n useEffect(() => {\n if (callStatus === 'connecting' || callStatus === 'ringing') {\n setWasConnected(false); // Reset on new call\n }\n if (callStatus === 'ongoing') {\n setWasConnected(true);\n }\n }, [callStatus]);\n\n // Handle call ended state and auto-close\n useEffect(() => {\n if (isOpen && callStatus === 'ended') {\n onCallEnded?.();\n const closeDelay = wasConnected ? 1500 : 3000;\n const start = Date.now();\n const iv = setInterval(() => {\n const remaining = Math.max(0, closeDelay - (Date.now() - start));\n setCloseCountdown(Math.ceil(remaining / 1000));\n\n if (remaining <= 0) {\n clearInterval(iv);\n onOpenChange?.(false);\n // Reset minimized state for the next call\n setIsMinimized(false);\n }\n }, 100);\n return () => clearInterval(iv);\n } else {\n setCloseCountdown(null);\n }\n }, [callStatus, isOpen, onOpenChange, wasConnected, onCallEnded]);\n\n // 60-second connection timeout for outbound calls\n useEffect(() => {\n let iv: ReturnType<typeof setInterval>;\n if (isOpen && callStatus === 'connecting' && !isIncoming) {\n setConnectingCountdown(60);\n iv = setInterval(() => {\n setConnectingCountdown((prev) => {\n if (prev === null || prev <= 0) {\n clearInterval(iv);\n if (callStatus === 'connecting') hangup();\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n } else {\n setConnectingCountdown(null);\n }\n return () => clearInterval(iv);\n }, [callStatus, isOpen, isIncoming, hangup]);\n\n if (!isOpen && callStatus === 'idle') return null;\n\n return (\n <div\n role=\"dialog\"\n aria-label=\"Call interface\"\n className={`dora-fixed dora-top-14 md:dora-top-16 dora-right-0 md:dora-right-4 dora-z-50 dora-transform dora-transition-all dora-duration-300 dora-ease-in-out dora-bg-[#1E1E1E] dora-shadow-xl ${isOpen ? 'dora-translate-x-0' : 'dora-translate-x-[110%]'\n } ${isMinimized\n ? 'dora-w-48 dora-h-20 dora-rounded-2xl dora-p-4 dora-flex dora-items-center dora-justify-between'\n : 'dora-w-full sm:dora-w-96 md:dora-max-w-sm max-h-[calc(100vh-3.5rem)] md:dora-max-h-[calc(100vh-4rem)] dora-rounded-none md:dora-rounded-2xl'\n }`}\n >\n <audio ref={audioRef} autoPlay className=\"dora-hidden\" />\n <audio\n ref={ringtoneRef}\n src=\"https://assets.mixkit.co/active_storage/sfx/2358/2358-preview.mp3\"\n loop\n preload=\"auto\"\n className=\"dora-hidden\"\n />\n\n {isMinimized ? (\n <div className=\"dora-flex dora-items-center dora-justify-between dora-w-full dora-h-full\">\n <button\n onClick={() => setIsMinimized(false)}\n className=\"dora-w-10 dora-h-10 dora-rounded-full dora-bg-[#2A2A2A] dora-flex dora-items-center dora-justify-center dora-text-slate-400 hover:dora-text-white dora-transition-colors\"\n aria-label=\"Maximize\"\n >\n {maximizeIcon || <Maximize size={18} />}\n </button>\n <div className=\"dora-relative dora-flex dora-items-center\">\n <div className=\"dora-w-11 dora-h-11 dora-rounded-full dora-bg-white dora-flex dora-items-center dora-justify-center dora--mr-3\">\n <span className=\"dora-text-xl dora-text-slate-900 dora-font-bold\">\n {displayName.charAt(0).toUpperCase()}\n </span>\n </div>\n <button\n onClick={hangup}\n className=\"dora-w-11 dora-h-11 dora-rounded-full dora-bg-red-500 dora-text-white dora-flex dora-items-center dora-justify-center dora-shadow-lg hover:dora-bg-red-600 dora-transition-colors dora-z-10\"\n aria-label=\"End call\"\n >\n <Phone size={18} className=\"dora-transform dora-rotate-[135deg]\" />\n </button>\n </div>\n </div>\n ) : (\n <div className=\"dora-flex dora-flex-col dora-py-4 md:dora-py-6 dora-gap-2.5 md:dora-gap-3.5 dora-px-3 md:dora-px-5 dora-relative\">\n <button\n onClick={() => setIsMinimized(true)}\n className=\"dora-absolute dora-top-2 dora-right-2 dora-text-slate-500 hover:dora-text-white dora-transition-colors\"\n aria-label=\"Minimize\"\n >\n {minimizeIcon || <Minimize2 size={16} />}\n </button>\n\n <div className=\"dora-flex dora-justify-between dora-gap-2 dora-items-start md:dora-items-center\">\n <div className=\"dora-flex dora-items-center dora-gap-2.5 md:dora-gap-4 dora-min-w-0\">\n <div className=\"dora-w-9 md:dora-w-11 dora-h-9 md:dora-h-11 dora-rounded-full dora-bg-white dora-flex dora-items-center dora-justify-center dora-shrink-0\">\n <span className=\"dora-text-lg md:dora-text-2xl dora-text-slate-900 dora-font-bold\">\n {displayName.charAt(0).toUpperCase()}\n </span>\n </div>\n <div className=\"dora-min-w-0 dora-flex-1\">\n <h2 className=\"dora-text-base md:dora-text-xl dora-font-normal dora-text-white dora-truncate\">\n {isIncoming ? displayName : (displayName === 'Unknown' ? 'Outgoing Call' : displayName)}\n </h2>\n <p className=\"dora-text-slate-400 dora-text-xs md:dora-text-sm dora-truncate\">\n {remoteNumber} &bull;{' '}\n {isMuted ? (\n <span className=\"dora-text-[#F99578]\">Call muted</span>\n ) : (\n <>\n {(callStatus === 'connecting' || callStatus === 'ringing') && (\n <span>\n {isIncoming ? 'Incoming Call...' : callStatus === 'connecting' ? 'Connecting...' : 'Ringing...'}\n </span>\n )}\n {callStatus === 'ongoing' && <span>On Call</span>}\n {callStatus === 'ended' && <span>Call Ended</span>}\n </>\n )}\n </p>\n </div>\n </div>\n\n <div className=\"dora-flex dora-items-center dora-justify-center dora-gap-1.5 md:dora-gap-3 dora-shrink-0\">\n {isIncoming && callStatus === 'ringing' && (\n <button\n onClick={answerCall}\n className=\"dora-rounded-full dora-bg-green-500 dora-text-white hover:dora-bg-green-600 dora-transition-colors dora-w-8 md:dora-w-9 dora-h-8 md:dora-h-9 dora-flex dora-items-center dora-justify-center dora-shrink-0\"\n aria-label=\"Answer\"\n >\n <Phone size={18} />\n </button>\n )}\n\n {(callStatus === 'ongoing' || (isIncoming && callStatus === 'ringing')) && (\n <button\n onClick={toggleMute}\n className={`dora-rounded-full dora-transition-colors dora-w-8 md:dora-w-9 dora-h-8 md:dora-h-9 dora-flex dora-items-center dora-justify-center dora-shrink-0 ${isMuted ? 'dora-bg-slate-700 hover:dora-bg-slate-600 dora-text-white' : 'dora-bg-[#2A2A2A] hover:dora-bg-[#333333] dora-text-slate-400'\n }`}\n aria-label=\"Toggle mute\"\n >\n {isMuted ? <MicOff size={18} /> : <Mic size={18} />}\n </button>\n )}\n\n <button\n onClick={hangup}\n className=\"dora-rounded-full dora-bg-red-600 dora-text-white hover:dora-bg-red-700 dora-transition-colors dora-w-8 md:dora-w-9 dora-h-8 md:dora-h-9 dora-flex dora-items-center dora-justify-center dora-shrink-0\"\n aria-label={isIncoming && callStatus === 'ringing' ? 'Decline' : 'End call'}\n >\n <Phone size={18} className=\"dora-transform dora-rotate-[135deg]\" />\n </button>\n </div>\n </div>\n\n <div className=\"dora-flex-1 dora-border-t dora-border-[#282828] dora-mt-2 dora-mb-2\" />\n\n {callError && callStatus === 'ended' && (\n <div className=\"dora-bg-red-900/20 dora-border dora-border-red-500/30 dora-rounded-lg dora-p-2 md:dora-p-3 dora-mb-2 md:dora-mb-3\">\n <p className=\"dora-text-red-400 dora-text-xs md:dora-text-sm dora-font-medium\">\n Call Failed\n </p>\n <p className=\"dora-text-red-300 dora-text-xs dora-mt-0.5 md:dora-mt-1\">\n {callError}\n </p>\n {closeCountdown !== null && (\n <div className=\"dora-mt-1.5 md:dora-mt-2\">\n <div className=\"dora-w-full dora-bg-red-900/30 dora-rounded-full dora-h-1.5 dora-overflow-hidden\">\n <div\n className=\"dora-bg-red-500 dora-h-full dora-transition-all dora-duration-100\"\n style={{\n width: `${Math.max(\n 0,\n (closeCountdown / (wasConnected ? 1 : 5)) * 100,\n )}%`,\n }}\n />\n </div>\n <p className=\"dora-text-xs dora-text-red-300 dora-mt-0.5 md:dora-mt-1 dora-text-center\">\n Closing in {closeCountdown}s\n </p>\n </div>\n )}\n </div>\n )}\n\n <div className=\"dora-flex dora-justify-between dora-items-center\">\n <div className=\"dora-text-slate-400 dora-text-xs md:dora-text-sm dora-font-light dora-tracking-wide dora-flex dora-items-center dora-gap-1\">\n {(callStatus === 'connecting' || callStatus === 'ringing') && (\n <span>{isIncoming ? 'Incoming call' : 'Outgoing call'}</span>\n )}\n {callStatus === 'ongoing' && <span>Ongoing</span>}\n {callStatus === 'ended' && <span>Call ended</span>}\n {(callStatus === 'connecting' || callStatus === 'ringing' || callStatus === 'ongoing') && (\n isIncoming\n ? <ArrowDownLeft className=\"dora-inline-block dora-ml-1 dora-text-green-400\" size={16} />\n : <ArrowUpRight className=\"dora-inline-block dora-ml-1 dora-text-blue-400\" size={16} />\n )}\n </div>\n\n {callStatus === 'ongoing' && (\n <div className=\"dora-bg-[#272727] dora-h-6 md:dora-h-7 dora-rounded-full dora-px-3 md:dora-px-4 dora-text-white dora-font-normal dora-text-xs md:dora-text-sm dora-flex dora-items-center dora-justify-center\">\n <span>{callDuration}</span>\n </div>\n )}\n\n {callStatus === 'ended' && closeCountdown !== null && (\n <div className=\"dora-bg-[#272727] dora-h-6 md:dora-h-7 dora-rounded-full dora-px-3 md:dora-px-4 dora-text-slate-400 dora-font-normal dora-text-xs dora-flex dora-items-center dora-justify-center dora-gap-1\">\n <span>Closing in {closeCountdown}s</span>\n </div>\n )}\n\n {(connectingCountdown !== null || callStatus === 'ringing') && !isIncoming && callStatus !== 'ongoing' && callStatus !== 'ended' && (\n <div className=\"dora-bg-[#272727] dora-h-8 dora-rounded-full dora-px-3 md:dora-px-4 dora-text-white dora-font-normal dora-text-xs md:dora-text-sm dora-flex dora-items-center dora-justify-center dora-gap-2\">\n <span className=\"dora-text-[#F99578] dora-whitespace-nowrap\">\n {callStatus === 'ringing' ? 'Ringing...' : 'Connecting...'}\n </span>\n {callStatus === 'connecting' && connectingCountdown && (\n <span className=\"dora-font-mono dora-ml-1 dora-text-slate-400\">\n {Math.floor(connectingCountdown / 60)}:{String(connectingCountdown % 60).padStart(2, '0')}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useEffect } from \"react\";\nimport {\n useCall,\n useConnectionStatus,\n useExtensions,\n CreditBalance,\n} from \"../index\";\nimport { Phone, Delete, X, User, ChevronDown } from \"lucide-react\";\n\ninterface DialpadProps {\n onCallInitiated?: (number: string) => void;\n initialNumber?: string;\n showKeys?: boolean;\n className?: string;\n availableExtensions?: Array<{ label: string; value: string }>;\n selectedExtension?: string;\n onExtensionChange?: (ext: string) => void;\n}\n\nexport function Dialpad({\n onCallInitiated,\n initialNumber = \"\",\n showKeys = true,\n className = \"\",\n availableExtensions: providedExtensions,\n selectedExtension: providedSelectedExtension,\n onExtensionChange,\n}: DialpadProps) {\n const { call, callStatus } = useCall();\n const { isConnected } = useConnectionStatus();\n const { extensions: fetchedExtensions, setExtension } = useExtensions();\n\n const [number, setNumber] = useState(initialNumber);\n const [keysVisible, setKeysVisible] = useState(showKeys);\n const [localSelectedExt, setLocalSelectedExt] = useState(providedSelectedExtension || \"\");\n\n const extensions = providedExtensions?.length\n ? providedExtensions\n : fetchedExtensions.map((ext) => ({\n label: ext.extension,\n value: ext.extension,\n }));\n\n // Sync local state ONLY when the prop value changes and is different\n useEffect(() => {\n if (providedSelectedExtension && providedSelectedExtension !== localSelectedExt) {\n setLocalSelectedExt(providedSelectedExtension);\n }\n }, [providedSelectedExtension]);\n\n // If we have no local selection but extensions loaded, pick the first one\n useEffect(() => {\n if (!localSelectedExt && extensions.length > 0) {\n setLocalSelectedExt(extensions[0].value);\n }\n }, [extensions, localSelectedExt]);\n\n const activeExtension = localSelectedExt || (extensions.length > 0 ? extensions[0].value : \"\");\n\n const append = (digit: string) => setNumber((s) => s + digit);\n const backspace = () => setNumber((s) => s.slice(0, -1));\n\n const handleExtensionChange = async (ext: string) => {\n setLocalSelectedExt(ext);\n onExtensionChange?.(ext);\n // Re-initialize SIP with new extension\n await setExtension(ext);\n };\n\n const handleCall = async () => {\n if (!number || number.trim() === \"\") return;\n try {\n await call(number, activeExtension);\n onCallInitiated?.(number);\n } catch (e) {\n // Error is handled via SDK events\n }\n };\n\n const isCallDisabled =\n !number ||\n number.trim() === \"\" ||\n !isConnected ||\n callStatus === \"ringing\" ||\n callStatus === \"ongoing\" ||\n callStatus === \"connecting\";\n\n const keypad_icon = (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.5333 3.2006C11.5339 3.50413 11.4444 3.801 11.2759 4.05352C11.1075 4.30605 10.8679 4.50284 10.5874 4.61891C10.3069 4.73499 9.99832 4.76512 9.70071 4.70548C9.40309 4.64584 9.12991 4.49911 8.91583 4.28393C8.77351 4.14156 8.66063 3.97254 8.58363 3.78654C8.50662 3.60054 8.46701 3.4012 8.46705 3.19989C8.46709 2.99858 8.50678 2.79925 8.58385 2.61328C8.66093 2.4273 8.77387 2.25834 8.91625 2.11602C9.05862 1.9737 9.22764 1.86081 9.41364 1.78381C9.59964 1.70681 9.79898 1.6672 10.0003 1.66723C10.2016 1.66727 10.4009 1.70696 10.5869 1.78404C10.7729 1.86111 10.9418 1.97406 11.0842 2.11643C11.3717 2.40393 11.5342 2.7931 11.5342 3.19977M14.5333 4.73227C14.7376 4.73703 14.9408 4.7009 15.131 4.62601C15.3211 4.55111 15.4944 4.43896 15.6406 4.29614C15.7868 4.15333 15.9029 3.98273 15.9822 3.79438C16.0616 3.60602 16.1024 3.40372 16.1024 3.19935C16.1024 2.99498 16.0616 2.79267 15.9822 2.60432C15.9029 2.41597 15.7868 2.24537 15.6406 2.10255C15.4944 1.95974 15.3211 1.84759 15.131 1.77269C14.9408 1.6978 14.7376 1.66167 14.5333 1.66643C14.1267 1.66643 13.7367 1.82798 13.4491 2.11554C13.1615 2.40309 13 2.7931 13 3.19977C13 3.60643 13.1615 3.99644 13.4491 4.284C13.7367 4.57155 14.1267 4.73227 14.5333 4.73227ZM7 3.2006C7.00061 3.50413 6.91102 3.801 6.7426 4.05352C6.57419 4.30605 6.33454 4.50284 6.05408 4.61891C5.77362 4.73499 5.46499 4.76512 5.16737 4.70548C4.86976 4.64584 4.59657 4.49911 4.3825 4.28393C4.24018 4.14161 4.12728 3.97265 4.05026 3.7867C3.97324 3.60075 3.93359 3.40145 3.93359 3.20018C3.93359 2.99891 3.97324 2.79961 4.05026 2.61366C4.12728 2.42771 4.24018 2.25875 4.3825 2.11643C4.52482 1.97411 4.69378 1.86122 4.87973 1.78419C5.06568 1.70717 5.26498 1.66753 5.46625 1.66753C5.66752 1.66753 5.86682 1.70717 6.05277 1.78419C6.23872 1.86122 6.40768 1.97411 6.55 2.11643C6.8375 2.40393 6.99917 2.7931 6.99917 3.19977M11.5333 7.7306C11.5352 7.93448 11.4964 8.1367 11.4192 8.32539C11.342 8.51409 11.2279 8.68548 11.0836 8.82952C10.9392 8.97357 10.7677 9.08737 10.5788 9.16426C10.39 9.24114 10.1877 9.27958 9.98381 9.2773C9.77993 9.27503 9.57856 9.2321 9.39148 9.15102C9.2044 9.06994 9.03538 8.95234 8.89433 8.80511C8.75327 8.65789 8.64301 8.484 8.57 8.29362C8.497 8.10325 8.46272 7.90022 8.46917 7.69643C8.48185 7.29562 8.65113 6.91575 8.94068 6.63833C9.23024 6.3609 9.617 6.20802 10.018 6.21249C10.419 6.21697 10.8022 6.37843 11.0855 6.66224C11.3688 6.94606 11.5296 7.32961 11.5333 7.7306ZM14.5333 9.2631C14.7376 9.26786 14.9408 9.23174 15.131 9.15684C15.3211 9.08194 15.4944 8.96979 15.6406 8.82698C15.7868 8.68416 15.9029 8.51356 15.9822 8.32521C16.0616 8.13686 16.1024 7.93455 16.1024 7.73018C16.1024 7.52581 16.0616 7.32351 15.9822 7.13515C15.9029 6.9468 15.7868 6.7762 15.6406 6.63339C15.4944 6.49057 15.3211 6.37842 15.131 6.30352C14.9408 6.22863 14.7376 6.1925 14.5333 6.19727C14.1267 6.19727 13.7367 6.35881 13.4491 6.64637C13.1615 6.93392 13 7.32393 13 7.7306C13 8.13726 13.1615 8.52727 13.4491 8.81483C13.7367 9.10239 14.1267 9.26393 14.5333 9.26393M7 7.7306C7.00021 8.03395 6.91038 8.33054 6.7419 8.58281C6.57341 8.83507 6.33385 9.03165 6.05356 9.14766C5.77326 9.26367 5.46485 9.29389 5.16737 9.23448C4.86989 9.17506 4.59673 9.0287 4.3825 8.81393C4.20461 8.63559 4.07342 8.41615 4.00054 8.17503C3.92766 7.93391 3.91534 7.67854 3.96468 7.43152C4.01401 7.1845 4.12347 6.95345 4.28337 6.75882C4.44328 6.56419 4.64869 6.41197 4.88144 6.31564C5.11419 6.21931 5.36709 6.18184 5.61777 6.20654C5.86845 6.23124 6.10918 6.31735 6.31865 6.45725C6.52812 6.59716 6.69988 6.78654 6.81872 7.00864C6.93756 7.23073 6.99982 7.4787 7 7.7306ZM11.5333 12.2623C11.5348 12.4893 11.4857 12.7138 11.3897 12.9196C11.2937 13.1253 11.1532 13.3071 10.9783 13.4519C10.8034 13.5967 10.5985 13.7007 10.3784 13.7566C10.1583 13.8124 9.9286 13.8186 9.70583 13.7748C9.42088 13.7191 9.1576 13.5836 8.94662 13.3841C8.73564 13.1847 8.58563 12.9294 8.51403 12.648C8.44244 12.3666 8.4522 12.0707 8.5422 11.7947C8.63219 11.5186 8.79871 11.2738 9.02238 11.0887C9.24606 10.9036 9.51769 10.7857 9.8057 10.7489C10.0937 10.7122 10.3862 10.7579 10.6493 10.8808C10.9123 11.0038 11.135 11.1989 11.2915 11.4434C11.448 11.688 11.5319 11.9719 11.5333 12.2623ZM11.5333 16.8006C11.5337 17.0274 11.4836 17.2515 11.3868 17.4567C11.29 17.6618 11.1488 17.8429 10.9735 17.9868C10.7981 18.1308 10.593 18.2339 10.3729 18.2889C10.1528 18.3439 9.92326 18.3493 9.70083 18.3048C9.40375 18.2453 9.13093 18.0992 8.91681 17.8849C8.70269 17.6705 8.55688 17.3975 8.49777 17.1004C8.43866 16.8032 8.46891 16.4952 8.58469 16.2152C8.70048 15.9353 8.89661 15.6959 9.14833 15.5273C9.37915 15.3731 9.64749 15.2845 9.92473 15.2708C10.202 15.2572 10.4777 15.3191 10.7225 15.4499C10.9673 15.5807 11.1721 15.7755 11.3149 16.0135C11.4577 16.2515 11.5332 16.523 11.5333 16.8006ZM16.0667 12.2623C16.0681 12.4893 16.019 12.7138 15.923 12.9196C15.827 13.1253 15.6865 13.3071 15.5116 13.4519C15.3367 13.5967 15.1318 13.7007 14.9117 13.7566C14.6917 13.8124 14.4619 13.8186 14.2392 13.7748C14.0165 13.7312 13.8062 13.6388 13.6236 13.5041C13.4409 13.3695 13.2904 13.1959 13.183 12.9961C13.0755 12.7962 13.0137 12.575 13.0021 12.3484C12.9905 12.1218 13.0294 11.8954 13.1158 11.6856C13.2509 11.3581 13.4952 11.0875 13.8072 10.9197C14.1193 10.7519 14.4797 10.6974 14.8274 10.7653C15.1751 10.8333 15.4886 11.0195 15.7145 11.2924C15.9404 11.5653 16.0648 11.908 16.0667 12.2623ZM7 12.2623C7.00227 12.5661 6.91412 12.8638 6.74675 13.1174C6.57939 13.371 6.34039 13.5691 6.06013 13.6864C5.77987 13.8038 5.47104 13.8352 5.1729 13.7766C4.87476 13.718 4.60079 13.572 4.38583 13.3573C4.20705 13.1796 4.07483 12.9606 4.00086 12.7196C3.9269 12.4787 3.91347 12.2232 3.96176 11.9759C4.01006 11.7285 4.11859 11.4968 4.27776 11.3014C4.43692 11.106 4.64181 10.9528 4.87428 10.8554C5.10676 10.758 5.35966 10.7194 5.61059 10.7431C5.86153 10.7668 6.10276 10.8519 6.31294 10.991C6.52313 11.1301 6.69578 11.3189 6.81561 11.5406C6.93545 11.7624 6.99878 12.0102 7 12.2623Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n\n return (\n <div className={`dora-bg-white dora-rounded-3xl ${className} dora-font-sans dora-relative dora-z-10`}>\n {/* Header with Logo and Credit Balance */}\n <div className=\"dora-flex dora-items-center dora-justify-between dora-mb-6\">\n <div className=\"dora-bg-emerald-500 dora-text-white dora-px-3 dora-py-1.5 dora-rounded-lg dora-text-xs md:dora-text-sm dora-font-semibold dora-shadow-sm\">\n Dora-cell\n </div>\n <CreditBalance />\n </div>\n\n {/* Main Content Area */}\n <div className=\"dora-bg-zinc-50 dora-p-6 dora-rounded-3xl dora-border dora-border-zinc-100 dora-shadow-inner\">\n {/* Caller ID Section */}\n <div className=\"dora-flex dora-items-center dora-justify-between dora-mb-5\">\n <span className=\"dora-text-zinc-500 dora-font-medium dora-text-sm dora-tracking-tight\">\n Caller ID\n </span>\n <div className=\"dora-relative\">\n <select\n disabled={extensions.length === 0}\n className=\"dora-appearance-none dora-bg-white dora-border dora-border-zinc-200 dora-rounded-xl dora-px-4 dora-py-2 dora-text-sm dora-font-semibold dora-text-zinc-900 dora-min-w-[170px] dora-pr-10 dora-outline-none focus:dora-border-emerald-500 dora-transition-all dora-shadow-sm disabled:dora-opacity-50\"\n value={activeExtension}\n onChange={(e) => handleExtensionChange(e.target.value)}\n >\n {extensions.length > 0 ? (\n extensions.map((ext) => (\n <option key={ext.value} value={ext.value}>\n {ext.label}\n </option>\n ))\n ) : (\n <option>Loading...</option>\n )}\n </select>\n <ChevronDown\n size={18}\n className=\"dora-absolute dora-right-4 dora-top-1/2 dora-transform dora--translate-y-1/2 dora-text-zinc-500 dora-pointer-events-none\"\n />\n </div>\n </div>\n\n {/* Input and Call Button */}\n <div className=\"dora-flex dora-items-center dora-gap-3 dora-mb-6\">\n <div className=\"dora-flex-1 dora-bg-white dora-border dora-border-zinc-200 dora-rounded-xl dora-flex dora-items-center dora-px-4 dora-h-12 dora-shadow-sm focus-within:dora-border-emerald-500 dora-transition-all\">\n <User size={18} className=\"dora-text-zinc-300 dora-mr-2\" />\n <input\n type=\"tel\"\n placeholder=\"Enter number\"\n value={number}\n onChange={(e) => setNumber(e.target.value)}\n className=\"dora-bg-transparent dora-border-none dora-outline-none dora-w-full dora-text-base dora-text-zinc-900 dora-font-medium dora-placeholder-zinc-300\"\n />\n </div>\n <button\n disabled={isCallDisabled}\n onClick={handleCall}\n className=\"dora-bg-emerald-500 dora-text-white dora-w-12 dora-h-12 dora-rounded-xl dora-flex dora-items-center dora-justify-center dora-shadow-lg dora-shadow-emerald-500/20 hover:dora-bg-emerald-600 active:dora-scale-95 dora-transition-all disabled:dora-opacity-50\"\n >\n <Phone size={20} fill=\"white\" className=\"dora-text-white\" />\n </button>\n </div>\n\n {/* Keypad and Controls */}\n <div className=\"dora-space-y-5\">\n {keysVisible ? (\n <div>\n <div className=\"dora-flex dora-mb-5\">\n <button\n onClick={() => setKeysVisible(false)}\n className=\"dora-flex dora-items-center dora-gap-2 dora-px-4 dora-py-2 dora-bg-white dora-border dora-border-zinc-200 dora-rounded-full dora-text-xs dora-font-semibold dora-text-zinc-600 hover:dora-bg-zinc-50 dora-transition-colors dora-shadow-sm active:dora-scale-95\"\n >\n <X size={16} className=\"dora-text-red-500\" />\n Close\n </button>\n </div>\n \n <div className=\"dora-grid dora-grid-cols-3 dora-gap-4\">\n {[\n \"1\", \"2\", \"3\",\n \"4\", \"5\", \"6\",\n \"7\", \"8\", \"9\",\n \"+\", \"0\", \"del\",\n ].map((d) => (\n <button\n key={d}\n onClick={() => (d === \"del\" ? backspace() : append(d))}\n className=\"dora-h-12 dora-bg-white dora-rounded-xl dora-flex dora-items-center dora-justify-center dora-text-lg dora-font-semibold dora-text-zinc-900 dora-shadow-sm border dora-border-zinc-50 hover:dora-bg-zinc-50 active:dora-scale-95 dora-transition-all\"\n >\n {d === \"del\" ? <Delete size={18} className=\"dora-text-zinc-500\" /> : d}\n </button>\n ))}\n </div>\n </div>\n ) : (\n <div className=\"dora-flex dora-justify-center\">\n <button\n onClick={() => setKeysVisible(true)}\n className=\"dora-flex dora-items-center dora-gap-2 dora-px-4 dora-py-2 dora-bg-white dora-border dora-border-zinc-200 dora-rounded-full dora-text-xs dora-font-semibold dora-text-zinc-500 hover:dora-bg-zinc-50 dora-transition-all active:dora-scale-95 dora-shadow-sm\"\n >\n <span className=\"dora-transform dora-scale-90\">{keypad_icon}</span>\n Open dialer\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n","/**\n * React bindings for Dora Cell SDK\n * Provides React Context and hooks for easy integration\n */\n\n'use client';\n\nimport React, { createContext, useContext, useEffect, useState, useRef } from 'react';\nimport { DoraCell } from '@dora-cell/sdk';\nimport type {\n DoraCellConfig,\n Call,\n CallStatus,\n ConnectionStatus,\n ConnectionState,\n} from '@dora-cell/sdk';\n\ninterface DoraCellContextValue {\n sdk: DoraCell | null;\n connectionStatus: ConnectionStatus;\n currentCall: Call | null;\n callStatus: CallStatus;\n callDuration: string;\n isMuted: boolean;\n isInitialized: boolean;\n error: Error | null;\n extension: string | null;\n\n // Methods\n call: (phoneNumber: string, extension?: string) => Promise<void>;\n hangup: () => void;\n toggleMute: () => void;\n answerCall: () => void;\n}\n\nconst DoraCellContext = createContext<DoraCellContextValue | undefined>(undefined);\n\nexport interface DoraCellProviderProps {\n config: DoraCellConfig;\n children: React.ReactNode;\n autoInitialize?: boolean;\n}\n\nexport function DoraCellProvider({\n config,\n children,\n autoInitialize = true,\n}: DoraCellProviderProps) {\n const [sdk] = useState(() => new DoraCell(config));\n const [isInitialized, setIsInitialized] = useState(false);\n const [connectionStatus, setConnectionStatus] = useState<ConnectionStatus>('disconnected');\n const [currentCall, setCurrentCall] = useState<Call | null>(null);\n const [callStatus, setCallStatus] = useState<CallStatus>('idle');\n const [callDuration, setCallDuration] = useState('00:00');\n const [isMuted, setIsMuted] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [extension, setExtension] = useState<string | null>(null);\n\n const durationIntervalRef = useRef<number | null>(null);\n\n // Initialize SDK\n useEffect(() => {\n if (!autoInitialize) return;\n\n const initializeSdk = async () => {\n try {\n await sdk.initialize();\n setIsInitialized(true);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to initialize SDK'));\n }\n };\n\n initializeSdk();\n\n return () => {\n sdk.destroy();\n };\n }, [sdk, autoInitialize]);\n\n // Set up event listeners\n useEffect(() => {\n if (!sdk) return;\n\n const handleConnectionStatus = (state: ConnectionState) => {\n setConnectionStatus(state.status);\n if (state.extension) {\n setExtension(state.extension);\n }\n if (state.error) {\n setError(new Error(state.error));\n }\n };\n\n const handleIncomingCall = (call: Call) => {\n setCurrentCall(call);\n setCallStatus('ringing');\n };\n\n const handleOutgoingCall = (call: Call) => {\n setCurrentCall(call);\n setCallStatus('connecting');\n };\n\n const handleCallRinging = (call: Call) => {\n setCallStatus('ringing');\n };\n\n const handleCallConnected = (call: Call) => {\n setCallStatus('ongoing');\n };\n\n const handleCallEnded = (call: Call) => {\n setCallStatus('ended');\n setCurrentCall(null);\n setIsMuted(false);\n\n // Reset to idle after a delay\n setTimeout(() => {\n setCallStatus('idle');\n }, 3000);\n };\n\n const handleCallFailed = (call: Call, errorMsg: string) => {\n setError(new Error(errorMsg));\n setCallStatus('ended');\n setCurrentCall(null);\n };\n\n const handleError = (err: Error) => {\n setError(err);\n };\n\n sdk.on('connection:status', handleConnectionStatus);\n sdk.on('call:incoming', handleIncomingCall);\n sdk.on('call:outgoing', handleOutgoingCall);\n sdk.on('call:ringing', handleCallRinging);\n sdk.on('call:connected', handleCallConnected);\n sdk.on('call:ended', handleCallEnded);\n sdk.on('call:failed', handleCallFailed);\n sdk.on('error', handleError);\n\n return () => {\n sdk.off('connection:status', handleConnectionStatus);\n sdk.off('call:incoming', handleIncomingCall);\n sdk.off('call:outgoing', handleOutgoingCall);\n sdk.off('call:ringing', handleCallRinging);\n sdk.off('call:connected', handleCallConnected);\n sdk.off('call:ended', handleCallEnded);\n sdk.off('call:failed', handleCallFailed);\n sdk.off('error', handleError);\n };\n }, [sdk]);\n\n // Update call duration\n useEffect(() => {\n if (callStatus === 'ongoing' && currentCall) {\n durationIntervalRef.current = window.setInterval(() => {\n const duration = currentCall.duration;\n const mm = String(Math.floor(duration / 60)).padStart(2, '0');\n const ss = String(duration % 60).padStart(2, '0');\n setCallDuration(`${mm}:${ss}`);\n }, 1000);\n } else {\n setCallDuration('00:00');\n if (durationIntervalRef.current) {\n clearInterval(durationIntervalRef.current);\n durationIntervalRef.current = null;\n }\n }\n\n return () => {\n if (durationIntervalRef.current) {\n clearInterval(durationIntervalRef.current);\n }\n };\n }, [callStatus, currentCall]);\n\n // Methods\n const call = async (phoneNumber: string, extension?: string) => {\n try {\n setError(null);\n await sdk.call(phoneNumber, { extension });\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to make call'));\n throw err;\n }\n };\n\n const hangup = () => {\n try {\n sdk.hangup();\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to hang up'));\n }\n };\n\n const toggleMute = () => {\n if (!currentCall) return;\n\n if (isMuted) {\n currentCall.unmute();\n setIsMuted(false);\n } else {\n currentCall.mute();\n setIsMuted(true);\n }\n };\n\n const answerCall = async () => {\n try {\n await sdk.answerCall();\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to answer call'));\n }\n };\n\n const contextValue: DoraCellContextValue = {\n sdk,\n connectionStatus,\n currentCall,\n callStatus,\n callDuration,\n isMuted,\n isInitialized,\n error,\n call,\n hangup,\n toggleMute,\n answerCall,\n extension,\n };\n\n return (\n <DoraCellContext.Provider value={contextValue}>\n {children}\n </DoraCellContext.Provider>\n );\n}\n\n/**\n * Hook to access Dora Cell SDK context\n */\nexport function useDoraCell(): DoraCellContextValue {\n const context = useContext(DoraCellContext);\n if (!context) {\n throw new Error('useDoraCell must be used within DoraCellProvider');\n }\n return context;\n}\n\n/**\n * Hook for making calls\n */\nexport function useCall() {\n const { sdk, call, hangup, toggleMute, answerCall, callStatus, callDuration, isMuted, currentCall, error } = useDoraCell();\n\n return {\n sdk,\n call,\n hangup,\n toggleMute,\n answerCall,\n callStatus,\n callDuration,\n isMuted,\n currentCall,\n callError: error?.message,\n };\n}\n\n/**\n * Hook for connection status\n */\nexport function useConnectionStatus() {\n const { connectionStatus, isInitialized, error, extension } = useDoraCell();\n\n return {\n connectionStatus,\n isInitialized,\n isConnected: connectionStatus === 'registered',\n error,\n extension,\n };\n}\n\n/**\n * Hook to fetch wallet/credit balance\n */\nexport function useWallet() {\n const { sdk, isInitialized } = useDoraCell();\n const [data, setData] = useState<{ balance: number, currency: string } | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchData = async () => {\n if (!sdk || !isInitialized) return;\n \n setIsLoading(true);\n setError(null);\n try {\n const val = await sdk.getWallet();\n setData(val);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch wallet'));\n } finally {\n setIsLoading(false);\n }\n };\n\n useEffect(() => {\n if (isInitialized) {\n console.log('SDK: useWallet fetching data...');\n fetchData();\n }\n }, [isInitialized, sdk]);\n\n // Listen for call ended to refresh balance\n useEffect(() => {\n if (!sdk || !isInitialized) return;\n\n const handleCallEnded = () => {\n console.log('SDK: Call ended, refreshing wallet balance in 2 seconds...');\n // Refresh after a small delay to allow backend to process call billing\n setTimeout(fetchData, 2000);\n };\n\n sdk.on('call:ended', handleCallEnded);\n return () => {\n sdk.off('call:ended', handleCallEnded);\n };\n }, [sdk, isInitialized]);\n\n return {\n balance: data?.balance ?? 0,\n currency: data?.currency ?? 'NGN',\n isLoading,\n error,\n refresh: fetchData\n };\n}\n\n/**\n * Hook for managing extensions (DID numbers)\n */\nexport function useExtensions() {\n const { sdk, isInitialized } = useDoraCell();\n const [extensions, setExtensions] = useState<any[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchExtensions = async () => {\n if (!sdk || !isInitialized) return;\n \n setIsLoading(true);\n setError(null);\n try {\n const data = await sdk.fetchExtensions();\n setExtensions(data);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch extensions'));\n } finally {\n setIsLoading(false);\n }\n };\n\n const setExtension = async (extension: string) => {\n if (!sdk) return;\n await sdk.setExtension(extension);\n };\n\n useEffect(() => {\n if (isInitialized) {\n fetchExtensions();\n }\n }, [isInitialized, sdk]);\n\n return {\n extensions,\n isLoading,\n error,\n setExtension,\n refresh: fetchExtensions\n };\n}\n\n/**\n * Credit Balance component - mirrors main app style\n */\nexport function CreditBalance() {\n const { balance, currency, isLoading, error } = useWallet();\n\n if (error) {\n console.warn('SDK: CreditBalance error:', error);\n }\n\n const formatted = new Intl.NumberFormat('en-NG', {\n style: 'currency',\n currency: currency === 'NGN' ? 'NGN' : (currency || 'NGN'),\n }).format(balance);\n\n return (\n <div className=\"dora-credit-balance dora-px-4 dora-py-2 dora-bg-zinc-100 dora-border dora-border-zinc-200 dora-rounded-full dora-text-sm dora-text-zinc-600 dora-whitespace-nowrap dora-flex dora-items-center dora-shadow-sm\">\n <span className=\"dora-text-xs dora-text-zinc-500 dora-mr-2\">\n Credit balance:\n </span>\n <span className=\"dora-font-bold dora-text-zinc-800\">{isLoading ? \"...\" : formatted}</span>\n </div>\n );\n}\n\nexport * from './components';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dora-cell/sdk-react",
3
- "version": "1.0.2",
3
+ "version": "3.0.0",
4
4
  "description": "React bindings for Dora Cell SDK — includes self-contained, prefixed CSS",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -39,7 +39,7 @@
39
39
  "author": "Dora Cell",
40
40
  "license": "MIT",
41
41
  "peerDependencies": {
42
- "@dora-cell/sdk": "^1.0.2",
42
+ "@dora-cell/sdk": "^3.0.0",
43
43
  "react": "^18.0.0 || ^19.0.0",
44
44
  "react-dom": "^18.0.0 || ^19.0.0"
45
45
  },