@corti/embedded-web 0.1.0 → 0.2.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/README.md +70 -47
- package/dist/CortiEmbedded.d.ts +5 -4
- package/dist/CortiEmbedded.js +186 -103
- package/dist/CortiEmbedded.js.map +1 -1
- package/dist/bundle.js +1615 -20
- package/dist/corti-embedded.d.ts +17 -1
- package/dist/corti-embedded.js +4 -3
- package/dist/corti-embedded.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/react/CortiEmbeddedReact.d.ts +30 -23
- package/dist/react/CortiEmbeddedReact.js +67 -21
- package/dist/react/CortiEmbeddedReact.js.map +1 -1
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/styles/base.js +1 -1
- package/dist/styles/base.js.map +1 -1
- package/dist/styles/container-styles.js +2 -2
- package/dist/styles/container-styles.js.map +1 -1
- package/dist/styles/theme.js +2 -2
- package/dist/styles/theme.js.map +1 -1
- package/dist/types/api.d.ts +3 -14
- package/dist/types/api.js.map +1 -1
- package/dist/types/payloads.d.ts +1 -4
- package/dist/types/payloads.js.map +1 -1
- package/dist/types/protocol.d.ts +0 -1
- package/dist/types/protocol.js.map +1 -1
- package/dist/utils/PostMessageHandler.d.ts +19 -70
- package/dist/utils/PostMessageHandler.js +98 -202
- package/dist/utils/PostMessageHandler.js.map +1 -1
- package/dist/utils/baseUrl.js +8 -8
- package/dist/utils/baseUrl.js.map +1 -1
- package/dist/utils/embedUrl.js +3 -3
- package/dist/utils/embedUrl.js.map +1 -1
- package/dist/utils/errorFormatter.js +44 -20
- package/dist/utils/errorFormatter.js.map +1 -1
- package/dist/web-bundle.js +1473 -13
- package/dist/web-index.d.ts +3 -3
- package/dist/web-index.js +3 -3
- package/dist/web-index.js.map +1 -1
- package/package.json +18 -10
- package/dist/tsconfig.tsbuildinfo +0 -1
package/dist/corti-embedded.d.ts
CHANGED
|
@@ -1 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
import type { CortiEmbeddedAPI, CortiEmbeddedWindowAPI } from "./types/api.js";
|
|
2
|
+
/**
|
|
3
|
+
* Type representing the corti-embedded custom element in the DOM.
|
|
4
|
+
* When this package is installed, tag-name based APIs like
|
|
5
|
+
* document.querySelector('corti-embedded') and document.createElement('corti-embedded')
|
|
6
|
+
* are automatically typed via HTMLElementTagNameMap. Other lookups such as getElementById
|
|
7
|
+
* still return HTMLElement | null and require a cast or narrowing to CortiEmbeddedElement.
|
|
8
|
+
*/
|
|
9
|
+
export type CortiEmbeddedElement = HTMLElement & CortiEmbeddedAPI;
|
|
10
|
+
declare global {
|
|
11
|
+
interface Window {
|
|
12
|
+
CortiEmbedded?: CortiEmbeddedWindowAPI;
|
|
13
|
+
}
|
|
14
|
+
interface HTMLElementTagNameMap {
|
|
15
|
+
"corti-embedded": CortiEmbeddedElement;
|
|
16
|
+
}
|
|
17
|
+
}
|
package/dist/corti-embedded.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { CortiEmbedded } from
|
|
1
|
+
import { CortiEmbedded } from "./CortiEmbedded.js";
|
|
2
2
|
// Register the main component
|
|
3
|
-
if (!customElements.get(
|
|
4
|
-
customElements.define(
|
|
3
|
+
if (!customElements.get("corti-embedded")) {
|
|
4
|
+
customElements.define("corti-embedded", CortiEmbedded);
|
|
5
|
+
}
|
|
5
6
|
//# sourceMappingURL=corti-embedded.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corti-embedded.js","sourceRoot":"","sources":["../src/corti-embedded.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"corti-embedded.js","sourceRoot":"","sources":["../src/corti-embedded.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,8BAA8B;AAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;IAC1C,cAAc,CAAC,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;AACzD,CAAC","sourcesContent":["import { CortiEmbedded } from \"./CortiEmbedded.js\";\nimport type { CortiEmbeddedAPI, CortiEmbeddedWindowAPI } from \"./types/api.js\";\n\n// Register the main component\nif (!customElements.get(\"corti-embedded\")) {\n customElements.define(\"corti-embedded\", CortiEmbedded);\n}\n\n/**\n * Type representing the corti-embedded custom element in the DOM.\n * When this package is installed, tag-name based APIs like\n * document.querySelector('corti-embedded') and document.createElement('corti-embedded')\n * are automatically typed via HTMLElementTagNameMap. Other lookups such as getElementById\n * still return HTMLElement | null and require a cast or narrowing to CortiEmbeddedElement.\n */\nexport type CortiEmbeddedElement = HTMLElement & CortiEmbeddedAPI;\n\n// Extend Window interface\ndeclare global {\n interface Window {\n CortiEmbedded?: CortiEmbeddedWindowAPI;\n }\n interface HTMLElementTagNameMap {\n \"corti-embedded\": CortiEmbeddedElement;\n }\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
export { CortiEmbedded } from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
5
|
-
export type { PostMessageHandlerCallbacks } from
|
|
1
|
+
import "./corti-embedded.js";
|
|
2
|
+
export { CortiEmbedded } from "./CortiEmbedded.js";
|
|
3
|
+
export * from "./react/index.js";
|
|
4
|
+
export * from "./types/index.js";
|
|
5
|
+
export type { PostMessageHandlerCallbacks } from "./utils/PostMessageHandler.js";
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
export { CortiEmbedded } from
|
|
1
|
+
import "./corti-embedded.js";
|
|
2
|
+
export { CortiEmbedded } from "./CortiEmbedded.js";
|
|
3
3
|
// Export React components
|
|
4
|
-
export * from
|
|
4
|
+
export * from "./react/index.js";
|
|
5
5
|
// Export clean public types only
|
|
6
|
-
export * from
|
|
6
|
+
export * from "./types/index.js";
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,0BAA0B;AAC1B,cAAc,kBAAkB,CAAC;AAEjC,iCAAiC;AACjC,cAAc,kBAAkB,CAAC","sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,0BAA0B;AAC1B,cAAc,kBAAkB,CAAC;AAEjC,iCAAiC;AACjC,cAAc,kBAAkB,CAAC","sourcesContent":["import \"./corti-embedded.js\";\n\nexport { CortiEmbedded } from \"./CortiEmbedded.js\";\n\n// Export React components\nexport * from \"./react/index.js\";\n\n// Export clean public types only\nexport * from \"./types/index.js\";\n\n// Export PostMessageHandler types for advanced usage\nexport type { PostMessageHandlerCallbacks } from \"./utils/PostMessageHandler.js\";\n"]}
|
|
@@ -1,21 +1,29 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import
|
|
3
|
-
import type {
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import "../corti-embedded.js";
|
|
3
|
+
import type { CortiEmbedded } from "../CortiEmbedded.js";
|
|
4
|
+
import type { CortiEmbeddedAPI } from "../types";
|
|
4
5
|
export interface CortiEmbeddedEventDetail {
|
|
5
6
|
name: string;
|
|
6
7
|
payload: unknown;
|
|
7
8
|
}
|
|
9
|
+
export type CortiEmbeddedEvent = CustomEvent<CortiEmbeddedEventDetail>;
|
|
10
|
+
export type CortiEmbeddedReadyEvent = CustomEvent<Record<string, unknown>>;
|
|
11
|
+
export interface CortiEmbeddedErrorDetail {
|
|
12
|
+
message: string;
|
|
13
|
+
code?: string;
|
|
14
|
+
details?: unknown;
|
|
15
|
+
}
|
|
8
16
|
export interface CortiEmbeddedReactProps {
|
|
9
17
|
baseURL: string;
|
|
10
|
-
visibility?:
|
|
11
|
-
onEvent?: (event:
|
|
12
|
-
onReady?: (event:
|
|
13
|
-
onError?: (event: CustomEvent<
|
|
18
|
+
visibility?: "visible" | "hidden";
|
|
19
|
+
onEvent?: (event: CortiEmbeddedEvent) => void;
|
|
20
|
+
onReady?: (event: CortiEmbeddedReadyEvent) => void;
|
|
21
|
+
onError?: (event: CustomEvent<CortiEmbeddedErrorDetail>) => void;
|
|
14
22
|
className?: string;
|
|
15
23
|
style?: React.CSSProperties;
|
|
16
24
|
}
|
|
17
25
|
export type CortiEmbeddedReactRef = CortiEmbedded & CortiEmbeddedAPI;
|
|
18
|
-
export * from
|
|
26
|
+
export * from "../types/index.js";
|
|
19
27
|
export declare const CortiEmbeddedReact: React.ForwardRefExoticComponent<CortiEmbeddedReactProps & React.RefAttributes<CortiEmbeddedReactRef>>;
|
|
20
28
|
export interface UseCortiEmbeddedStatusOptions {
|
|
21
29
|
enabled?: boolean;
|
|
@@ -23,26 +31,25 @@ export interface UseCortiEmbeddedStatusOptions {
|
|
|
23
31
|
shouldRefreshOnEvent?: (event: CortiEmbeddedEventDetail) => boolean;
|
|
24
32
|
}
|
|
25
33
|
export interface UseCortiEmbeddedStatusResult {
|
|
26
|
-
status: Awaited<ReturnType<CortiEmbeddedReactRef[
|
|
34
|
+
status: Awaited<ReturnType<CortiEmbeddedReactRef["getStatus"]>> | null;
|
|
27
35
|
isLoading: boolean;
|
|
28
36
|
error: unknown;
|
|
29
37
|
lastEvent: CortiEmbeddedEventDetail | null;
|
|
30
|
-
refresh: () => Promise<void>;
|
|
31
38
|
}
|
|
32
39
|
export declare function useCortiEmbeddedStatus(ref: React.RefObject<CortiEmbeddedReactRef | null>, options?: UseCortiEmbeddedStatusOptions): UseCortiEmbeddedStatusResult;
|
|
33
40
|
export interface UseCortiEmbeddedApiResult {
|
|
34
|
-
auth: (...args: Parameters<CortiEmbeddedReactRef[
|
|
35
|
-
createInteraction: (...args: Parameters<CortiEmbeddedReactRef[
|
|
36
|
-
configureSession: (...args: Parameters<CortiEmbeddedReactRef[
|
|
37
|
-
addFacts: (...args: Parameters<CortiEmbeddedReactRef[
|
|
38
|
-
navigate: (...args: Parameters<CortiEmbeddedReactRef[
|
|
39
|
-
startRecording: (...args: Parameters<CortiEmbeddedReactRef[
|
|
40
|
-
stopRecording: (...args: Parameters<CortiEmbeddedReactRef[
|
|
41
|
-
getStatus: (...args: Parameters<CortiEmbeddedReactRef[
|
|
42
|
-
configure: (...args: Parameters<CortiEmbeddedReactRef[
|
|
43
|
-
getTemplates: (...args: Parameters<CortiEmbeddedReactRef[
|
|
44
|
-
setCredentials: (...args: Parameters<CortiEmbeddedReactRef[
|
|
45
|
-
show: (...args: Parameters<CortiEmbeddedReactRef[
|
|
46
|
-
hide: (...args: Parameters<CortiEmbeddedReactRef[
|
|
41
|
+
auth: (...args: Parameters<CortiEmbeddedReactRef["auth"]>) => ReturnType<CortiEmbeddedReactRef["auth"]>;
|
|
42
|
+
createInteraction: (...args: Parameters<CortiEmbeddedReactRef["createInteraction"]>) => ReturnType<CortiEmbeddedReactRef["createInteraction"]>;
|
|
43
|
+
configureSession: (...args: Parameters<CortiEmbeddedReactRef["configureSession"]>) => ReturnType<CortiEmbeddedReactRef["configureSession"]>;
|
|
44
|
+
addFacts: (...args: Parameters<CortiEmbeddedReactRef["addFacts"]>) => ReturnType<CortiEmbeddedReactRef["addFacts"]>;
|
|
45
|
+
navigate: (...args: Parameters<CortiEmbeddedReactRef["navigate"]>) => ReturnType<CortiEmbeddedReactRef["navigate"]>;
|
|
46
|
+
startRecording: (...args: Parameters<CortiEmbeddedReactRef["startRecording"]>) => ReturnType<CortiEmbeddedReactRef["startRecording"]>;
|
|
47
|
+
stopRecording: (...args: Parameters<CortiEmbeddedReactRef["stopRecording"]>) => ReturnType<CortiEmbeddedReactRef["stopRecording"]>;
|
|
48
|
+
getStatus: (...args: Parameters<CortiEmbeddedReactRef["getStatus"]>) => ReturnType<CortiEmbeddedReactRef["getStatus"]>;
|
|
49
|
+
configure: (...args: Parameters<CortiEmbeddedReactRef["configure"]>) => ReturnType<CortiEmbeddedReactRef["configure"]>;
|
|
50
|
+
getTemplates: (...args: Parameters<CortiEmbeddedReactRef["getTemplates"]>) => ReturnType<CortiEmbeddedReactRef["getTemplates"]>;
|
|
51
|
+
setCredentials: (...args: Parameters<CortiEmbeddedReactRef["setCredentials"]>) => ReturnType<CortiEmbeddedReactRef["setCredentials"]>;
|
|
52
|
+
show: (...args: Parameters<CortiEmbeddedReactRef["show"]>) => ReturnType<CortiEmbeddedReactRef["show"]>;
|
|
53
|
+
hide: (...args: Parameters<CortiEmbeddedReactRef["hide"]>) => ReturnType<CortiEmbeddedReactRef["hide"]>;
|
|
47
54
|
}
|
|
48
55
|
export declare function useCortiEmbeddedApi(ref: React.RefObject<CortiEmbeddedReactRef | null>): UseCortiEmbeddedApiResult;
|
|
@@ -1,25 +1,73 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import { CortiEmbedded } from '../CortiEmbedded.js';
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import "../corti-embedded.js";
|
|
4
3
|
// Export public types
|
|
5
|
-
export * from
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
4
|
+
export * from "../types/index.js";
|
|
5
|
+
// Renders the custom element directly so React sets the ref to the actual
|
|
6
|
+
// CortiEmbedded DOM instance. This avoids the @lit/react wrapper chain that
|
|
7
|
+
// was preventing the ref from reaching the DOM node in React 19.
|
|
8
|
+
export const CortiEmbeddedReact = React.forwardRef(({ onEvent, onReady, onError, baseURL, visibility, className, style }, forwardedRef) => {
|
|
9
|
+
const internalRef = React.useRef(null);
|
|
10
|
+
const hasEmittedReadyRef = React.useRef(false);
|
|
11
|
+
// "Latest ref" pattern: update on every render so handlers are always
|
|
12
|
+
// current without re-attaching event listeners.
|
|
13
|
+
const onEventRef = React.useRef(onEvent);
|
|
14
|
+
const onReadyRef = React.useRef(onReady);
|
|
15
|
+
const onErrorRef = React.useRef(onError);
|
|
16
|
+
onEventRef.current = onEvent;
|
|
17
|
+
onReadyRef.current = onReady;
|
|
18
|
+
onErrorRef.current = onError;
|
|
19
|
+
// Expose the DOM element to the consumer's forwarded ref. Native element
|
|
20
|
+
// refs are set during React's mutation phase, before layout effects run,
|
|
21
|
+
// so internalRef.current is always populated when this executes.
|
|
22
|
+
React.useImperativeHandle(forwardedRef, () => internalRef.current, []);
|
|
23
|
+
// Keep LitElement reactive properties in sync with React props.
|
|
24
|
+
React.useLayoutEffect(() => {
|
|
25
|
+
if (internalRef.current)
|
|
26
|
+
internalRef.current.baseURL = baseURL;
|
|
27
|
+
}, [baseURL]);
|
|
28
|
+
React.useLayoutEffect(() => {
|
|
29
|
+
if (internalRef.current == null || visibility === undefined)
|
|
30
|
+
return;
|
|
31
|
+
internalRef.current.visibility = visibility;
|
|
32
|
+
}, [visibility]);
|
|
33
|
+
// Attach DOM event listeners once on mount. The latest-ref pattern above
|
|
34
|
+
// ensures handlers always call the current prop without re-attaching.
|
|
35
|
+
React.useEffect(() => {
|
|
36
|
+
const el = internalRef.current;
|
|
37
|
+
if (!el)
|
|
38
|
+
return undefined;
|
|
39
|
+
const handleEvent = (e) => onEventRef.current?.(e);
|
|
40
|
+
const handleReady = (e) => {
|
|
41
|
+
if (hasEmittedReadyRef.current)
|
|
42
|
+
return;
|
|
43
|
+
hasEmittedReadyRef.current = true;
|
|
44
|
+
onReadyRef.current?.(e);
|
|
45
|
+
};
|
|
46
|
+
const handleError = (e) => onErrorRef.current?.(e);
|
|
47
|
+
el.addEventListener("event", handleEvent);
|
|
48
|
+
el.addEventListener("embedded.ready", handleReady);
|
|
49
|
+
el.addEventListener("error", handleError);
|
|
50
|
+
return () => {
|
|
51
|
+
el.removeEventListener("event", handleEvent);
|
|
52
|
+
el.removeEventListener("embedded.ready", handleReady);
|
|
53
|
+
el.removeEventListener("error", handleError);
|
|
54
|
+
};
|
|
55
|
+
}, []);
|
|
56
|
+
return React.createElement("corti-embedded", {
|
|
57
|
+
ref: internalRef,
|
|
58
|
+
baseurl: baseURL,
|
|
59
|
+
...(visibility !== undefined ? { visibility } : {}),
|
|
60
|
+
...(className !== undefined ? { className } : {}),
|
|
61
|
+
style,
|
|
62
|
+
});
|
|
16
63
|
});
|
|
64
|
+
CortiEmbeddedReact.displayName = "CortiEmbeddedReact";
|
|
17
65
|
export function useCortiEmbeddedStatus(ref, options = {}) {
|
|
18
66
|
const { enabled = true, onError, shouldRefreshOnEvent = event => {
|
|
19
67
|
const normalized = event.name.toLowerCase();
|
|
20
|
-
if (normalized.includes(
|
|
68
|
+
if (normalized.includes("getstatus"))
|
|
21
69
|
return false;
|
|
22
|
-
if (normalized.includes(
|
|
70
|
+
if (normalized.includes("statusreturned"))
|
|
23
71
|
return false;
|
|
24
72
|
return true;
|
|
25
73
|
}, } = options;
|
|
@@ -68,21 +116,20 @@ export function useCortiEmbeddedStatus(ref, options = {}) {
|
|
|
68
116
|
return;
|
|
69
117
|
refresh();
|
|
70
118
|
};
|
|
71
|
-
target.addEventListener(
|
|
72
|
-
return () => target.removeEventListener(
|
|
119
|
+
target.addEventListener("event", handleEvent);
|
|
120
|
+
return () => target.removeEventListener("event", handleEvent);
|
|
73
121
|
}, [enabled, ref, refresh]);
|
|
74
122
|
return {
|
|
75
123
|
status,
|
|
76
124
|
isLoading,
|
|
77
125
|
error,
|
|
78
126
|
lastEvent,
|
|
79
|
-
refresh,
|
|
80
127
|
};
|
|
81
128
|
}
|
|
82
129
|
function getCortiEmbeddedInstanceFromRefOrThrow(ref) {
|
|
83
130
|
const instance = ref.current;
|
|
84
131
|
if (!instance) {
|
|
85
|
-
throw new Error(
|
|
132
|
+
throw new Error("No active corti-embedded instance found for this ref. Mount <CortiEmbeddedReact ref={...} /> first.");
|
|
86
133
|
}
|
|
87
134
|
return instance;
|
|
88
135
|
}
|
|
@@ -104,5 +151,4 @@ export function useCortiEmbeddedApi(ref) {
|
|
|
104
151
|
hide: (...args) => getInstance().hide(...args),
|
|
105
152
|
}), [getInstance]);
|
|
106
153
|
}
|
|
107
|
-
CortiEmbeddedReact.displayName = 'CortiEmbeddedReact';
|
|
108
154
|
//# sourceMappingURL=CortiEmbeddedReact.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CortiEmbeddedReact.js","sourceRoot":"","sources":["../../src/react/CortiEmbeddedReact.ts"],"names":[],"mappings":"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","sourcesContent":["import { createComponent } from '@lit/react';\nimport * as React from 'react';\nimport { CortiEmbedded } from '../CortiEmbedded.js';\nimport type { CortiEmbeddedAPI } from '../types';\n\nexport interface CortiEmbeddedEventDetail {\n name: string;\n payload: unknown;\n}\n\n// Props interface\nexport interface CortiEmbeddedReactProps {\n baseURL: string;\n visibility?: 'visible' | 'hidden';\n\n // Event handlers\n onEvent?: (event: CustomEvent<CortiEmbeddedEventDetail>) => void;\n onReady?: (event: CustomEvent<unknown>) => void;\n onError?: (event: CustomEvent<unknown>) => void;\n\n // Additional props\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport type CortiEmbeddedReactRef = CortiEmbedded & CortiEmbeddedAPI;\n\n// Export public types\nexport * from '../types/index.js';\n\n// Create the component directly without additional forwardRef wrapping\nexport const CortiEmbeddedReact = createComponent({\n tagName: 'corti-embedded',\n elementClass: CortiEmbedded,\n react: React,\n events: {\n onEvent: 'embedded-event',\n onReady: 'ready',\n onError: 'error',\n },\n}) as React.ForwardRefExoticComponent<\n CortiEmbeddedReactProps & React.RefAttributes<CortiEmbeddedReactRef>\n>;\n\nexport interface UseCortiEmbeddedStatusOptions {\n enabled?: boolean;\n onError?: (error: unknown) => void;\n shouldRefreshOnEvent?: (event: CortiEmbeddedEventDetail) => boolean;\n}\n\nexport interface UseCortiEmbeddedStatusResult {\n status: Awaited<ReturnType<CortiEmbeddedReactRef['getStatus']>> | null;\n isLoading: boolean;\n error: unknown;\n lastEvent: CortiEmbeddedEventDetail | null;\n refresh: () => Promise<void>;\n}\n\nexport function useCortiEmbeddedStatus(\n ref: React.RefObject<CortiEmbeddedReactRef | null>,\n options: UseCortiEmbeddedStatusOptions = {},\n): UseCortiEmbeddedStatusResult {\n const {\n enabled = true,\n onError,\n shouldRefreshOnEvent = event => {\n const normalized = event.name.toLowerCase();\n if (normalized.includes('getstatus')) return false;\n if (normalized.includes('statusreturned')) return false;\n return true;\n },\n } = options;\n const [status, setStatus] =\n React.useState<UseCortiEmbeddedStatusResult['status']>(null);\n const [isLoading, setIsLoading] = React.useState(false);\n const [error, setError] = React.useState<unknown>(null);\n const [lastEvent, setLastEvent] =\n React.useState<UseCortiEmbeddedStatusResult['lastEvent']>(null);\n const onErrorRef = React.useRef(onError);\n const shouldRefreshOnEventRef = React.useRef(shouldRefreshOnEvent);\n const isRefreshingRef = React.useRef(false);\n\n React.useEffect(() => {\n onErrorRef.current = onError;\n }, [onError]);\n\n React.useEffect(() => {\n shouldRefreshOnEventRef.current = shouldRefreshOnEvent;\n }, [shouldRefreshOnEvent]);\n\n const refresh = React.useCallback(async () => {\n if (!enabled || !ref.current || isRefreshingRef.current) return;\n isRefreshingRef.current = true;\n setIsLoading(true);\n try {\n const nextStatus = await ref.current.getStatus();\n setStatus(nextStatus);\n setError(null);\n } catch (refreshError) {\n setError(refreshError);\n onErrorRef.current?.(refreshError);\n } finally {\n setIsLoading(false);\n isRefreshingRef.current = false;\n }\n }, [enabled, ref]);\n\n React.useEffect(() => {\n if (!enabled || !ref.current) return undefined;\n\n const target = ref.current;\n const handleEvent = (event: Event) => {\n const { detail } = event as CustomEvent<CortiEmbeddedEventDetail>;\n setLastEvent(detail);\n if (!shouldRefreshOnEventRef.current(detail)) return;\n if (isRefreshingRef.current) return;\n refresh();\n };\n\n target.addEventListener('embedded-event', handleEvent);\n return () => target.removeEventListener('embedded-event', handleEvent);\n }, [enabled, ref, refresh]);\n\n return {\n status,\n isLoading,\n error,\n lastEvent,\n refresh,\n };\n}\n\nexport interface UseCortiEmbeddedApiResult {\n auth: (\n ...args: Parameters<CortiEmbeddedReactRef['auth']>\n ) => ReturnType<CortiEmbeddedReactRef['auth']>;\n createInteraction: (\n ...args: Parameters<CortiEmbeddedReactRef['createInteraction']>\n ) => ReturnType<CortiEmbeddedReactRef['createInteraction']>;\n configureSession: (\n ...args: Parameters<CortiEmbeddedReactRef['configureSession']>\n ) => ReturnType<CortiEmbeddedReactRef['configureSession']>;\n addFacts: (\n ...args: Parameters<CortiEmbeddedReactRef['addFacts']>\n ) => ReturnType<CortiEmbeddedReactRef['addFacts']>;\n navigate: (\n ...args: Parameters<CortiEmbeddedReactRef['navigate']>\n ) => ReturnType<CortiEmbeddedReactRef['navigate']>;\n startRecording: (\n ...args: Parameters<CortiEmbeddedReactRef['startRecording']>\n ) => ReturnType<CortiEmbeddedReactRef['startRecording']>;\n stopRecording: (\n ...args: Parameters<CortiEmbeddedReactRef['stopRecording']>\n ) => ReturnType<CortiEmbeddedReactRef['stopRecording']>;\n getStatus: (\n ...args: Parameters<CortiEmbeddedReactRef['getStatus']>\n ) => ReturnType<CortiEmbeddedReactRef['getStatus']>;\n configure: (\n ...args: Parameters<CortiEmbeddedReactRef['configure']>\n ) => ReturnType<CortiEmbeddedReactRef['configure']>;\n getTemplates: (\n ...args: Parameters<CortiEmbeddedReactRef['getTemplates']>\n ) => ReturnType<CortiEmbeddedReactRef['getTemplates']>;\n setCredentials: (\n ...args: Parameters<CortiEmbeddedReactRef['setCredentials']>\n ) => ReturnType<CortiEmbeddedReactRef['setCredentials']>;\n show: (\n ...args: Parameters<CortiEmbeddedReactRef['show']>\n ) => ReturnType<CortiEmbeddedReactRef['show']>;\n hide: (\n ...args: Parameters<CortiEmbeddedReactRef['hide']>\n ) => ReturnType<CortiEmbeddedReactRef['hide']>;\n}\n\nfunction getCortiEmbeddedInstanceFromRefOrThrow(\n ref: React.RefObject<CortiEmbeddedReactRef | null>,\n): CortiEmbeddedReactRef {\n const instance = ref.current;\n if (!instance) {\n throw new Error(\n 'No active corti-embedded instance found for this ref. Mount <CortiEmbeddedReact ref={...} /> first.',\n );\n }\n return instance;\n}\n\nexport function useCortiEmbeddedApi(\n ref: React.RefObject<CortiEmbeddedReactRef | null>,\n): UseCortiEmbeddedApiResult {\n const getInstance = React.useCallback(\n () => getCortiEmbeddedInstanceFromRefOrThrow(ref),\n [ref],\n );\n\n return React.useMemo(\n () => ({\n auth: (...args) => getInstance().auth(...args),\n createInteraction: (...args) => getInstance().createInteraction(...args),\n configureSession: (...args) => getInstance().configureSession(...args),\n addFacts: (...args) => getInstance().addFacts(...args),\n navigate: (...args) => getInstance().navigate(...args),\n startRecording: (...args) => getInstance().startRecording(...args),\n stopRecording: (...args) => getInstance().stopRecording(...args),\n getStatus: (...args) => getInstance().getStatus(...args),\n configure: (...args) => getInstance().configure(...args),\n getTemplates: (...args) => getInstance().getTemplates(...args),\n setCredentials: (...args) => getInstance().setCredentials(...args),\n show: (...args) => getInstance().show(...args),\n hide: (...args) => getInstance().hide(...args),\n }),\n [getInstance],\n );\n}\n\nCortiEmbeddedReact.displayName = 'CortiEmbeddedReact';\n"]}
|
|
1
|
+
{"version":3,"file":"CortiEmbeddedReact.js","sourceRoot":"","sources":["../../src/react/CortiEmbeddedReact.ts"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport \"../corti-embedded.js\";\nimport type { CortiEmbedded } from \"../CortiEmbedded.js\";\nimport type { CortiEmbeddedAPI } from \"../types\";\n\nexport interface CortiEmbeddedEventDetail {\n name: string;\n payload: unknown;\n}\n\nexport type CortiEmbeddedEvent = CustomEvent<CortiEmbeddedEventDetail>;\nexport type CortiEmbeddedReadyEvent = CustomEvent<Record<string, unknown>>;\n\nexport interface CortiEmbeddedErrorDetail {\n message: string;\n code?: string;\n details?: unknown;\n}\n\n// Props interface\nexport interface CortiEmbeddedReactProps {\n baseURL: string;\n visibility?: \"visible\" | \"hidden\";\n\n // Event handlers receive the raw CustomEvent emitted by the custom element.\n onEvent?: (event: CortiEmbeddedEvent) => void;\n onReady?: (event: CortiEmbeddedReadyEvent) => void;\n onError?: (event: CustomEvent<CortiEmbeddedErrorDetail>) => void;\n\n // Additional props\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport type CortiEmbeddedReactRef = CortiEmbedded & CortiEmbeddedAPI;\n\n// Export public types\nexport * from \"../types/index.js\";\n\n// Renders the custom element directly so React sets the ref to the actual\n// CortiEmbedded DOM instance. This avoids the @lit/react wrapper chain that\n// was preventing the ref from reaching the DOM node in React 19.\nexport const CortiEmbeddedReact = React.forwardRef<\n CortiEmbeddedReactRef,\n CortiEmbeddedReactProps\n>(\n (\n { onEvent, onReady, onError, baseURL, visibility, className, style },\n forwardedRef,\n ) => {\n const internalRef = React.useRef<CortiEmbeddedReactRef | null>(null);\n const hasEmittedReadyRef = React.useRef(false);\n\n // \"Latest ref\" pattern: update on every render so handlers are always\n // current without re-attaching event listeners.\n const onEventRef = React.useRef(onEvent);\n const onReadyRef = React.useRef(onReady);\n const onErrorRef = React.useRef(onError);\n onEventRef.current = onEvent;\n onReadyRef.current = onReady;\n onErrorRef.current = onError;\n\n // Expose the DOM element to the consumer's forwarded ref. Native element\n // refs are set during React's mutation phase, before layout effects run,\n // so internalRef.current is always populated when this executes.\n React.useImperativeHandle(forwardedRef, () => internalRef.current!, []);\n\n // Keep LitElement reactive properties in sync with React props.\n React.useLayoutEffect(() => {\n if (internalRef.current) internalRef.current.baseURL = baseURL;\n }, [baseURL]);\n\n React.useLayoutEffect(() => {\n if (internalRef.current == null || visibility === undefined) return;\n internalRef.current.visibility = visibility;\n }, [visibility]);\n\n // Attach DOM event listeners once on mount. The latest-ref pattern above\n // ensures handlers always call the current prop without re-attaching.\n React.useEffect(() => {\n const el = internalRef.current;\n if (!el) return undefined;\n\n const handleEvent = (e: Event) =>\n onEventRef.current?.(e as CortiEmbeddedEvent);\n const handleReady = (e: Event) => {\n if (hasEmittedReadyRef.current) return;\n hasEmittedReadyRef.current = true;\n onReadyRef.current?.(e as CortiEmbeddedReadyEvent);\n };\n const handleError = (e: Event) =>\n onErrorRef.current?.(e as CustomEvent<CortiEmbeddedErrorDetail>);\n\n el.addEventListener(\"event\", handleEvent);\n el.addEventListener(\"embedded.ready\", handleReady);\n el.addEventListener(\"error\", handleError);\n return () => {\n el.removeEventListener(\"event\", handleEvent);\n el.removeEventListener(\"embedded.ready\", handleReady);\n el.removeEventListener(\"error\", handleError);\n };\n }, []);\n\n return React.createElement(\"corti-embedded\", {\n ref: internalRef,\n baseurl: baseURL,\n ...(visibility !== undefined ? { visibility } : {}),\n ...(className !== undefined ? { className } : {}),\n style,\n });\n },\n);\n\nCortiEmbeddedReact.displayName = \"CortiEmbeddedReact\";\n\nexport interface UseCortiEmbeddedStatusOptions {\n enabled?: boolean;\n onError?: (error: unknown) => void;\n shouldRefreshOnEvent?: (event: CortiEmbeddedEventDetail) => boolean;\n}\n\nexport interface UseCortiEmbeddedStatusResult {\n status: Awaited<ReturnType<CortiEmbeddedReactRef[\"getStatus\"]>> | null;\n isLoading: boolean;\n error: unknown;\n lastEvent: CortiEmbeddedEventDetail | null;\n}\n\nexport function useCortiEmbeddedStatus(\n ref: React.RefObject<CortiEmbeddedReactRef | null>,\n options: UseCortiEmbeddedStatusOptions = {},\n): UseCortiEmbeddedStatusResult {\n const {\n enabled = true,\n onError,\n shouldRefreshOnEvent = event => {\n const normalized = event.name.toLowerCase();\n if (normalized.includes(\"getstatus\")) return false;\n if (normalized.includes(\"statusreturned\")) return false;\n return true;\n },\n } = options;\n const [status, setStatus] =\n React.useState<UseCortiEmbeddedStatusResult[\"status\"]>(null);\n const [isLoading, setIsLoading] = React.useState(false);\n const [error, setError] = React.useState<unknown>(null);\n const [lastEvent, setLastEvent] =\n React.useState<UseCortiEmbeddedStatusResult[\"lastEvent\"]>(null);\n const onErrorRef = React.useRef(onError);\n const shouldRefreshOnEventRef = React.useRef(shouldRefreshOnEvent);\n const isRefreshingRef = React.useRef(false);\n\n React.useEffect(() => {\n onErrorRef.current = onError;\n }, [onError]);\n\n React.useEffect(() => {\n shouldRefreshOnEventRef.current = shouldRefreshOnEvent;\n }, [shouldRefreshOnEvent]);\n\n const refresh = React.useCallback(async () => {\n if (!enabled || !ref.current || isRefreshingRef.current) return;\n isRefreshingRef.current = true;\n setIsLoading(true);\n try {\n const nextStatus = await ref.current.getStatus();\n setStatus(nextStatus);\n setError(null);\n } catch (refreshError) {\n setError(refreshError);\n onErrorRef.current?.(refreshError);\n } finally {\n setIsLoading(false);\n isRefreshingRef.current = false;\n }\n }, [enabled, ref]);\n\n React.useEffect(() => {\n if (!enabled || !ref.current) return undefined;\n\n const target = ref.current;\n const handleEvent = (event: Event) => {\n const { detail } = event as CustomEvent<CortiEmbeddedEventDetail>;\n setLastEvent(detail);\n if (!shouldRefreshOnEventRef.current(detail)) return;\n if (isRefreshingRef.current) return;\n refresh();\n };\n\n target.addEventListener(\"event\", handleEvent);\n return () => target.removeEventListener(\"event\", handleEvent);\n }, [enabled, ref, refresh]);\n\n return {\n status,\n isLoading,\n error,\n lastEvent,\n };\n}\n\nexport interface UseCortiEmbeddedApiResult {\n auth: (\n ...args: Parameters<CortiEmbeddedReactRef[\"auth\"]>\n ) => ReturnType<CortiEmbeddedReactRef[\"auth\"]>;\n createInteraction: (\n ...args: Parameters<CortiEmbeddedReactRef[\"createInteraction\"]>\n ) => ReturnType<CortiEmbeddedReactRef[\"createInteraction\"]>;\n configureSession: (\n ...args: Parameters<CortiEmbeddedReactRef[\"configureSession\"]>\n ) => ReturnType<CortiEmbeddedReactRef[\"configureSession\"]>;\n addFacts: (\n ...args: Parameters<CortiEmbeddedReactRef[\"addFacts\"]>\n ) => ReturnType<CortiEmbeddedReactRef[\"addFacts\"]>;\n navigate: (\n ...args: Parameters<CortiEmbeddedReactRef[\"navigate\"]>\n ) => ReturnType<CortiEmbeddedReactRef[\"navigate\"]>;\n startRecording: (\n ...args: Parameters<CortiEmbeddedReactRef[\"startRecording\"]>\n ) => ReturnType<CortiEmbeddedReactRef[\"startRecording\"]>;\n stopRecording: (\n ...args: Parameters<CortiEmbeddedReactRef[\"stopRecording\"]>\n ) => ReturnType<CortiEmbeddedReactRef[\"stopRecording\"]>;\n getStatus: (\n ...args: Parameters<CortiEmbeddedReactRef[\"getStatus\"]>\n ) => ReturnType<CortiEmbeddedReactRef[\"getStatus\"]>;\n configure: (\n ...args: Parameters<CortiEmbeddedReactRef[\"configure\"]>\n ) => ReturnType<CortiEmbeddedReactRef[\"configure\"]>;\n getTemplates: (\n ...args: Parameters<CortiEmbeddedReactRef[\"getTemplates\"]>\n ) => ReturnType<CortiEmbeddedReactRef[\"getTemplates\"]>;\n setCredentials: (\n ...args: Parameters<CortiEmbeddedReactRef[\"setCredentials\"]>\n ) => ReturnType<CortiEmbeddedReactRef[\"setCredentials\"]>;\n show: (\n ...args: Parameters<CortiEmbeddedReactRef[\"show\"]>\n ) => ReturnType<CortiEmbeddedReactRef[\"show\"]>;\n hide: (\n ...args: Parameters<CortiEmbeddedReactRef[\"hide\"]>\n ) => ReturnType<CortiEmbeddedReactRef[\"hide\"]>;\n}\n\nfunction getCortiEmbeddedInstanceFromRefOrThrow(\n ref: React.RefObject<CortiEmbeddedReactRef | null>,\n): CortiEmbeddedReactRef {\n const instance = ref.current;\n if (!instance) {\n throw new Error(\n \"No active corti-embedded instance found for this ref. Mount <CortiEmbeddedReact ref={...} /> first.\",\n );\n }\n return instance;\n}\n\nexport function useCortiEmbeddedApi(\n ref: React.RefObject<CortiEmbeddedReactRef | null>,\n): UseCortiEmbeddedApiResult {\n const getInstance = React.useCallback(\n () => getCortiEmbeddedInstanceFromRefOrThrow(ref),\n [ref],\n );\n\n return React.useMemo(\n () => ({\n auth: (...args) => getInstance().auth(...args),\n createInteraction: (...args) => getInstance().createInteraction(...args),\n configureSession: (...args) => getInstance().configureSession(...args),\n addFacts: (...args) => getInstance().addFacts(...args),\n navigate: (...args) => getInstance().navigate(...args),\n startRecording: (...args) => getInstance().startRecording(...args),\n stopRecording: (...args) => getInstance().stopRecording(...args),\n getStatus: (...args) => getInstance().getStatus(...args),\n configure: (...args) => getInstance().configure(...args),\n getTemplates: (...args) => getInstance().getTemplates(...args),\n setCredentials: (...args) => getInstance().setCredentials(...args),\n show: (...args) => getInstance().show(...args),\n hide: (...args) => getInstance().hide(...args),\n }),\n [getInstance],\n );\n}\n"]}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export type { CortiEmbeddedReactProps, CortiEmbeddedReactRef, } from
|
|
1
|
+
export * from "./CortiEmbeddedReact.js";
|
|
2
|
+
export type { CortiEmbeddedReactProps, CortiEmbeddedReactRef, } from "./CortiEmbeddedReact.js";
|
package/dist/react/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from "./CortiEmbeddedReact.js";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC","sourcesContent":["export * from
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC","sourcesContent":["export * from \"./CortiEmbeddedReact.js\";\nexport type {\n CortiEmbeddedReactProps,\n CortiEmbeddedReactRef,\n} from \"./CortiEmbeddedReact.js\";\n"]}
|
package/dist/styles/base.js
CHANGED
package/dist/styles/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/styles/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAA;;;;CAI5B,CAAC","sourcesContent":["import { css } from
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/styles/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAA;;;;CAI5B,CAAC","sourcesContent":["import { css } from \"lit\";\n\n/**\n * Base styles to be applied to all components within the application.\n */\nexport const baseStyles = css`\n * {\n box-sizing: border-box;\n }\n`;\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { css } from
|
|
1
|
+
import { css } from "lit";
|
|
2
2
|
// Main container styles for the Corti Agent component
|
|
3
3
|
export const containerStyles = css `
|
|
4
4
|
:host {
|
|
@@ -19,7 +19,7 @@ export const containerStyles = css `
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/* Handle visibility state */
|
|
22
|
-
:host([visibility=
|
|
22
|
+
:host([visibility="hidden"]) {
|
|
23
23
|
display: none;
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-styles.js","sourceRoot":"","sources":["../../src/styles/container-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,sDAAsD;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BjC,CAAC","sourcesContent":["import { css } from
|
|
1
|
+
{"version":3,"file":"container-styles.js","sourceRoot":"","sources":["../../src/styles/container-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,sDAAsD;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BjC,CAAC","sourcesContent":["import { css } from \"lit\";\n\n// Main container styles for the Corti Agent component\nexport const containerStyles = css`\n :host {\n /* Make the component fill its container completely */\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n\n margin: 0;\n padding: 0;\n background-color: transparent;\n overflow: hidden;\n }\n\n /* Handle visibility state */\n :host([visibility=\"hidden\"]) {\n display: none;\n }\n\n /* Ensure iframe fills the entire component */\n iframe {\n width: 100% !important;\n height: 100% !important;\n border: none !important;\n margin: 0 !important;\n padding: 0 !important;\n }\n`;\n"]}
|
package/dist/styles/theme.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { css } from
|
|
1
|
+
import { css } from "lit";
|
|
2
2
|
const ThemeStyles = css `
|
|
3
3
|
:host {
|
|
4
4
|
color-scheme: light dark;
|
|
5
5
|
/* Component Defaults */
|
|
6
|
-
--component-font-family:
|
|
6
|
+
--component-font-family: "Segoe UI", Roboto, sans-serif;
|
|
7
7
|
|
|
8
8
|
/* Plain (Default) Colors */
|
|
9
9
|
--plain-bg-color: light-dark(#f5f5f5, #3a3a3a);
|
package/dist/styles/theme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/styles/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,WAAW,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiGtB,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["import { css } from
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/styles/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,WAAW,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiGtB,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["import { css } from \"lit\";\n\nconst ThemeStyles = css`\n :host {\n color-scheme: light dark;\n /* Component Defaults */\n --component-font-family: \"Segoe UI\", Roboto, sans-serif;\n\n /* Plain (Default) Colors */\n --plain-bg-color: light-dark(#f5f5f5, #3a3a3a);\n --plain-border-color: light-dark(\n rgba(0, 0, 0, 0.08),\n rgba(255, 255, 255, 0.1)\n );\n --plain-active-color: light-dark(#f0f0f0, #393939);\n --plain-text-color: light-dark(#333, #eee);\n\n /* Accent Colors */\n --accent-bg-color: light-dark(#232323, #ffffff);\n --accent-border-color: light-dark(#1a1a1a, #f5f5f5);\n --accent-active-color: light-dark(#3a3a3a, #f5f5f5);\n --accent-text-color: light-dark(#fff, #333);\n\n /* User Colors (Same as Plain) */\n --msg-user-bg-color: var(--plain-bg-color);\n --msg-user-border-color: var(--plain-border-color);\n --msg-user-active-color: var(--plain-active-color);\n --msg-user-text-color: var(--plain-text-color);\n\n /* Response Colors */\n --msg-agent-bg-color: transparent;\n --msg-agent-border-color: light-dark(\n rgba(0, 0, 0, 0.05),\n rgba(255, 255, 255, 0.08)\n );\n --msg-agent-active-color: light-dark(\n rgba(0, 0, 0, 0.02),\n rgba(255, 255, 255, 0.05)\n );\n --msg-agent-text-color: var(--plain-text-color);\n\n /* Success Colors */\n --success-bg-color: light-dark(\n rgba(34, 197, 94, 0.1),\n rgba(34, 197, 94, 0.2)\n );\n --success-border-color: light-dark(\n rgba(34, 197, 94, 0.2),\n rgba(34, 197, 94, 0.3)\n );\n --success-active-color: light-dark(\n rgba(34, 197, 94, 0.15),\n rgba(34, 197, 94, 0.25)\n );\n --success-text-color: light-dark(#22c55e, #4ade80);\n\n /* Info Colors */\n --info-bg-color: light-dark(\n rgba(59, 130, 246, 0.1),\n rgba(59, 130, 246, 0.2)\n );\n --info-border-color: light-dark(\n rgba(59, 130, 246, 0.2),\n rgba(59, 130, 246, 0.3)\n );\n --info-active-color: light-dark(\n rgba(59, 130, 246, 0.15),\n rgba(59, 130, 246, 0.25)\n );\n --info-text-color: light-dark(#3b82f6, #60a5fa);\n\n /* Error Colors */\n --error-bg-color: light-dark(\n rgba(239, 68, 68, 0.1),\n rgba(239, 68, 68, 0.2)\n );\n --error-border-color: light-dark(\n rgba(239, 68, 68, 0.2),\n rgba(239, 68, 68, 0.3)\n );\n --error-active-color: light-dark(\n rgba(239, 68, 68, 0.15),\n rgba(239, 68, 68, 0.25)\n );\n --error-text-color: light-dark(#ef4444, #f87171);\n\n /* Layout defaults */\n --base-background: light-dark(#fff, #222);\n --card-padding: 8px;\n --card-border-radius: 12px;\n --card-inner-border-radius: 8px;\n --card-box-shadow: 0 4px 16px rgba(0, 0, 0, 0.05);\n }\n\n :host {\n /* Apply base font and color directly to the host */\n font-family: var(--component-font-family);\n color: var(--plain-text-color);\n }\n`;\n\nexport default ThemeStyles;\n"]}
|
package/dist/types/api.d.ts
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import type { ConfigureAppPayload } from "./config.js";
|
|
2
2
|
import type { AuthChangedEventPayload, DocumentEventPayload, ErrorEventPayload, InteractionCreatedEventPayload, NavigationChangedEventPayload, UsageEventPayload } from "./events.js";
|
|
3
|
-
import type { AddFactsPayload,
|
|
3
|
+
import type { AddFactsPayload, ConfigureSessionPayload, CreateInteractionPayload, Fact, KeycloakTokenResponse, NavigatePayload, SetCredentialsPayload } from "./payloads.js";
|
|
4
4
|
import type { DefaultMode } from "./protocol.js";
|
|
5
5
|
import type { AuthResponse, ConfigureAppResponse, CreateInteractionResponse, GetStatusResponse, GetTemplatesResponse } from "./responses.js";
|
|
6
6
|
export type { ConfigureAppPayload } from "./config.js";
|
|
7
7
|
export type { UserInfo } from "./responses.js";
|
|
8
|
-
/**
|
|
9
|
-
* Authentication credentials for Assistant
|
|
10
|
-
*/
|
|
11
|
-
export type AuthCredentials = AuthPayload;
|
|
12
8
|
/**
|
|
13
9
|
* User information returned from authentication
|
|
14
10
|
*/
|
|
@@ -64,11 +60,6 @@ export interface CortiEmbeddedV1API {
|
|
|
64
60
|
export interface CortiEmbeddedWindowAPI {
|
|
65
61
|
v1: CortiEmbeddedV1API;
|
|
66
62
|
}
|
|
67
|
-
declare global {
|
|
68
|
-
interface Window {
|
|
69
|
-
CortiEmbedded?: CortiEmbeddedWindowAPI;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
63
|
/**
|
|
73
64
|
* Event listener function type
|
|
74
65
|
*/
|
|
@@ -82,7 +73,7 @@ export interface CortiEmbeddedAPI {
|
|
|
82
73
|
* @param credentials Authentication credentials
|
|
83
74
|
* @returns Promise resolving to user information
|
|
84
75
|
*/
|
|
85
|
-
auth(credentials:
|
|
76
|
+
auth(credentials: KeycloakTokenResponse): Promise<User>;
|
|
86
77
|
/**
|
|
87
78
|
* Create a new interaction
|
|
88
79
|
* @param encounter Encounter request data
|
|
@@ -138,9 +129,7 @@ export interface CortiEmbeddedAPI {
|
|
|
138
129
|
* @param credentials Authentication credentials to store
|
|
139
130
|
* @returns Promise that resolves when credentials are set
|
|
140
131
|
*/
|
|
141
|
-
setCredentials(credentials:
|
|
142
|
-
password: string;
|
|
143
|
-
}): Promise<void>;
|
|
132
|
+
setCredentials(credentials: SetCredentialsPayload): Promise<void>;
|
|
144
133
|
/**
|
|
145
134
|
* Show the embedded UI
|
|
146
135
|
*/
|
package/dist/types/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"AAAA,qCAAqC","sourcesContent":["// Public API types for SDK consumers\n\nimport type { ConfigureAppPayload } from \"./config.js\";\nimport type {\n AuthChangedEventPayload,\n DocumentEventPayload,\n ErrorEventPayload,\n InteractionCreatedEventPayload,\n NavigationChangedEventPayload,\n UsageEventPayload,\n} from \"./events.js\";\nimport type {\n AddFactsPayload,\n
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/types/api.ts"],"names":[],"mappings":"AAAA,qCAAqC","sourcesContent":["// Public API types for SDK consumers\n\nimport type { ConfigureAppPayload } from \"./config.js\";\nimport type {\n AuthChangedEventPayload,\n DocumentEventPayload,\n ErrorEventPayload,\n InteractionCreatedEventPayload,\n NavigationChangedEventPayload,\n UsageEventPayload,\n} from \"./events.js\";\nimport type {\n AddFactsPayload,\n ConfigureSessionPayload,\n CreateInteractionPayload,\n Fact,\n KeycloakTokenResponse,\n NavigatePayload,\n SetCredentialsPayload,\n} from \"./payloads.js\";\nimport type { DefaultMode } from \"./protocol.js\";\nimport type {\n AuthResponse,\n ConfigureAppResponse,\n CreateInteractionResponse,\n GetStatusResponse,\n GetTemplatesResponse,\n} from \"./responses.js\";\n\nexport type { ConfigureAppPayload } from \"./config.js\";\n// Re-export common types for public API\nexport type { UserInfo } from \"./responses.js\";\n\n/**\n * User information returned from authentication\n */\nexport interface User {\n id: string;\n email: string;\n}\n\n/**\n * Details of a created interaction\n */\nexport interface InteractionDetails {\n id: string;\n createdAt: string;\n}\n\n/**\n * Session configuration options\n */\nexport interface SessionConfig {\n defaultLanguage?: string;\n defaultOutputLanguage?: string;\n defaultTemplateKey?: string;\n defaultMode?: DefaultMode;\n}\n\n/**\n * Event data types for component events\n */\nexport interface EmbeddedEventData {\n ready: undefined;\n \"auth-changed\": AuthChangedEventPayload;\n \"interaction-created\": InteractionCreatedEventPayload;\n \"recording-started\": undefined;\n \"recording-stopped\": undefined;\n \"document-generated\": DocumentEventPayload;\n \"document-updated\": DocumentEventPayload;\n \"document-synced\": DocumentEventPayload;\n \"navigation-changed\": NavigationChangedEventPayload;\n usage: UsageEventPayload;\n error: ErrorEventPayload;\n}\n\n// Window API Types\nexport interface CortiEmbeddedV1API {\n auth(payload: KeycloakTokenResponse): Promise<AuthResponse>;\n createInteraction(\n payload: CreateInteractionPayload,\n ): Promise<CreateInteractionResponse>;\n addFacts(payload: AddFactsPayload): Promise<void>;\n configureSession(payload: ConfigureSessionPayload): Promise<void>;\n configure(payload: ConfigureAppPayload): Promise<ConfigureAppResponse>;\n navigate(payload: NavigatePayload): Promise<void>;\n startRecording(): Promise<void>;\n stopRecording(): Promise<void>;\n setCredentials(payload: SetCredentialsPayload): Promise<void>;\n getStatus(): Promise<GetStatusResponse>;\n getTemplates(): Promise<GetTemplatesResponse>;\n}\nexport interface CortiEmbeddedWindowAPI {\n v1: CortiEmbeddedV1API;\n}\n\n/**\n * Event listener function type\n */\nexport type EventListener<T = unknown> = (data: T) => void;\n\n/**\n * Public API interface for the Corti Embedded component\n */\nexport interface CortiEmbeddedAPI {\n /**\n * Authenticate with the Corti system\n * @param credentials Authentication credentials\n * @returns Promise resolving to user information\n */\n auth(credentials: KeycloakTokenResponse): Promise<User>;\n\n /**\n * Create a new interaction\n * @param encounter Encounter request data\n * @returns Promise resolving to interaction details\n */\n createInteraction(\n encounter: CreateInteractionPayload,\n ): Promise<InteractionDetails>;\n\n /**\n * Configure the current session\n * @param config Session configuration\n * @returns Promise that resolves when configuration is complete\n */\n configureSession(config: SessionConfig): Promise<void>;\n\n /**\n * Add facts to the current session\n * @param facts Array of facts to add\n * @returns Promise that resolves when facts are added\n */\n addFacts(facts: Fact[]): Promise<void>;\n\n /**\n * Navigate to a specific path within the embedded UI\n * @param path Path to navigate to\n * @returns Promise that resolves when navigation is complete\n */\n navigate(path: string): Promise<void>;\n\n /**\n * Start recording\n * @returns Promise that resolves when recording starts\n */\n startRecording(): Promise<void>;\n\n /**\n * Stop recording\n * @returns Promise that resolves when recording stops\n */\n stopRecording(): Promise<void>;\n\n /**\n * Get current component status\n * @returns Promise resolving to current status\n */\n getStatus(): Promise<GetStatusResponse>;\n\n /**\n * Get all templates available to the current user\n * @returns Promise resolving to list of templates\n */\n getTemplates(): Promise<GetTemplatesResponse>;\n\n /**\n * Configure the application\n * @param config Application configuration\n * @returns Promise that resolves when configuration is applied\n */\n configure(config: ConfigureAppPayload): Promise<ConfigureAppResponse>;\n\n /**\n * Set authentication credentials without triggering auth flow\n * @param credentials Authentication credentials to store\n * @returns Promise that resolves when credentials are set\n */\n setCredentials(credentials: SetCredentialsPayload): Promise<void>;\n\n /**\n * Show the embedded UI\n */\n show(): void;\n\n /**\n * Hide the embedded UI\n */\n hide(): void;\n}\n"]}
|
package/dist/types/payloads.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Corti } from "@corti/sdk";
|
|
2
|
-
import type {
|
|
2
|
+
import type { DefaultMode } from "./protocol.js";
|
|
3
3
|
export interface KeycloakTokenResponse {
|
|
4
4
|
access_token: string;
|
|
5
5
|
token_type: string;
|
|
@@ -17,9 +17,6 @@ export interface KeycloakTokenResponse {
|
|
|
17
17
|
sub: string;
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
-
export interface AuthPayload extends KeycloakTokenResponse {
|
|
21
|
-
mode: AuthMode;
|
|
22
|
-
}
|
|
23
20
|
export interface Fact {
|
|
24
21
|
text: Corti.FactsCreateInput["text"];
|
|
25
22
|
group: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payloads.js","sourceRoot":"","sources":["../../src/types/payloads.ts"],"names":[],"mappings":"","sourcesContent":["// Payload types for embedded API requests and responses\nimport type { Corti } from \"@corti/sdk\";\n\nimport type {
|
|
1
|
+
{"version":3,"file":"payloads.js","sourceRoot":"","sources":["../../src/types/payloads.ts"],"names":[],"mappings":"","sourcesContent":["// Payload types for embedded API requests and responses\nimport type { Corti } from \"@corti/sdk\";\n\nimport type { DefaultMode } from \"./protocol.js\";\n\n// Keycloak token structure\nexport interface KeycloakTokenResponse {\n access_token: string;\n token_type: string;\n expires_at?: number | null;\n expires_in?: number | null;\n refresh_expires_in?: number | null;\n refresh_token?: string;\n id_token?: string;\n \"not-before-policy\"?: number | null;\n session_state?: string;\n scope?: string;\n profile?: {\n name: string;\n email: string;\n sub: string;\n };\n}\n\n// Fact structure\nexport interface Fact {\n text: Corti.FactsCreateInput[\"text\"];\n group: string;\n source?: Corti.FactsCreateInput[\"source\"];\n}\n\n// Create interaction payload\nexport interface CreateInteractionPayload {\n assignedUserId?: Corti.InteractionsCreateRequest[\"assignedUserId\"] | null;\n encounter: {\n identifier: Corti.InteractionsCreateRequest[\"encounter\"][\"identifier\"];\n status: Corti.InteractionsCreateRequest[\"encounter\"][\"status\"];\n type: Corti.InteractionsCreateRequest[\"encounter\"][\"type\"];\n period: {\n startedAt: string;\n endedAt?: string;\n };\n title?: string;\n };\n patient?: {\n identifier?: Corti.InteractionsPatient[\"identifier\"];\n name?: string;\n birthDate?: string | null;\n gender?: Corti.InteractionsPatient[\"gender\"];\n };\n}\n\n// Add facts payload\nexport interface AddFactsPayload {\n facts: Fact[];\n}\n\n// Configure session payload\nexport interface ConfigureSessionPayload {\n defaultLanguage?: string;\n defaultOutputLanguage?: string;\n defaultTemplateKey?: string;\n defaultMode?: DefaultMode;\n}\n\n// Navigate payload\nexport interface NavigatePayload {\n path: string;\n}\n\n// Set credentials payload\nexport interface SetCredentialsPayload {\n password: string;\n}\n"]}
|
package/dist/types/protocol.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export type APIVersion = "v1";
|
|
2
2
|
export type MessageType = "CORTI_EMBEDDED" | "CORTI_EMBEDDED_RESPONSE" | "CORTI_EMBEDDED_EVENT";
|
|
3
|
-
export type AuthMode = "stateless" | "stateful";
|
|
4
3
|
export type DefaultMode = "virtual" | "in-person";
|
|
5
4
|
export type EmbeddedAction = "auth" | "createInteraction" | "addFacts" | "configureSession" | "navigate" | "startRecording" | "stopRecording" | "getStatus" | "getTemplates" | "configure" | "setCredentials";
|
|
6
5
|
export type DeprecatedEmbeddedEvent = "ready" | "loaded" | "recordingStarted" | "recordingStopped" | "documentGenerated" | "documentUpdated" | "documentSynced" | "authChanged" | "interactionCreated" | "navigationChanged" | "usage";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/types/protocol.ts"],"names":[],"mappings":"AAAA,4FAA4F","sourcesContent":["// Protocol types for communication between parent applications and embedded Corti Assistant\n\nexport type APIVersion = \"v1\";\n\nexport type MessageType
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/types/protocol.ts"],"names":[],"mappings":"AAAA,4FAA4F","sourcesContent":["// Protocol types for communication between parent applications and embedded Corti Assistant\n\nexport type APIVersion = \"v1\";\n\nexport type MessageType =\n | \"CORTI_EMBEDDED\"\n | \"CORTI_EMBEDDED_RESPONSE\"\n | \"CORTI_EMBEDDED_EVENT\";\n\nexport type DefaultMode = \"virtual\" | \"in-person\";\n\nexport type EmbeddedAction =\n | \"auth\"\n | \"createInteraction\"\n | \"addFacts\"\n | \"configureSession\"\n | \"navigate\"\n | \"startRecording\"\n | \"stopRecording\"\n | \"getStatus\"\n | \"getTemplates\"\n | \"configure\"\n | \"setCredentials\";\n\nexport type DeprecatedEmbeddedEvent =\n | \"ready\"\n | \"loaded\"\n | \"recordingStarted\"\n | \"recordingStopped\"\n | \"documentGenerated\"\n | \"documentUpdated\"\n | \"documentSynced\"\n | \"authChanged\"\n | \"interactionCreated\"\n | \"navigationChanged\"\n | \"usage\";\n\n// Base Message Types\nexport interface BaseMessage {\n type: MessageType;\n version: APIVersion;\n}\n\nexport interface EmbeddedRequest extends BaseMessage {\n type: \"CORTI_EMBEDDED\";\n action: EmbeddedAction;\n requestId: string;\n payload?: unknown;\n}\n\nexport interface EmbeddedResponse extends BaseMessage {\n type: \"CORTI_EMBEDDED_RESPONSE\";\n action: EmbeddedAction;\n requestId: string;\n success: boolean;\n payload?: unknown;\n error?: string;\n errorCode?: string;\n errorDetails?: unknown;\n}\n\ninterface BaseEventMessage extends BaseMessage {\n type: \"CORTI_EMBEDDED_EVENT\";\n event: string | DeprecatedEmbeddedEvent;\n payload?: unknown;\n}\n\nexport interface DeprecatedEmbeddedEventMessage extends BaseEventMessage {\n event: DeprecatedEmbeddedEvent;\n deprecated: true;\n}\n\nexport interface EmbeddedEventMessage extends BaseEventMessage {\n payload: null | Record<string, unknown>;\n confidential: boolean;\n}\n\n// Specific Request Types\nexport interface AuthRequest extends EmbeddedRequest {\n action: \"auth\";\n}\n\nexport interface CreateInteractionRequest extends EmbeddedRequest {\n action: \"createInteraction\";\n}\n\nexport interface AddFactsRequest extends EmbeddedRequest {\n action: \"addFacts\";\n}\n\nexport interface ConfigureSessionRequest extends EmbeddedRequest {\n action: \"configureSession\";\n}\n\nexport interface NavigateRequest extends EmbeddedRequest {\n action: \"navigate\";\n}\n\nexport interface StartRecordingRequest extends EmbeddedRequest {\n action: \"startRecording\";\n}\n\nexport interface StopRecordingRequest extends EmbeddedRequest {\n action: \"stopRecording\";\n}\n\nexport interface GetStatusRequest extends EmbeddedRequest {\n action: \"getStatus\";\n}\n\nexport interface GetTemplatesRequest extends EmbeddedRequest {\n action: \"getTemplates\";\n}\n\nexport interface ConfigureRequest extends EmbeddedRequest {\n action: \"configure\";\n}\n\nexport interface SetCredentialsRequest extends EmbeddedRequest {\n action: \"setCredentials\";\n}\n\n// Event Types\nexport interface ReadyEvent extends DeprecatedEmbeddedEventMessage {\n event: \"ready\";\n}\n\nexport interface LoadedEvent extends DeprecatedEmbeddedEventMessage {\n event: \"loaded\";\n}\n\nexport interface RecordingStartedEvent extends DeprecatedEmbeddedEventMessage {\n event: \"recordingStarted\";\n}\n\nexport interface RecordingStoppedEvent extends DeprecatedEmbeddedEventMessage {\n event: \"recordingStopped\";\n}\n\nexport interface DocumentGeneratedEvent extends DeprecatedEmbeddedEventMessage {\n event: \"documentGenerated\";\n}\n\nexport interface DocumentUpdatedEvent extends DeprecatedEmbeddedEventMessage {\n event: \"documentUpdated\";\n}\n\nexport interface DocumentSyncedEvent extends DeprecatedEmbeddedEventMessage {\n event: \"documentSynced\";\n}\n\nexport interface AuthChangedEvent extends DeprecatedEmbeddedEventMessage {\n event: \"authChanged\";\n}\n\nexport interface InteractionCreatedEvent extends DeprecatedEmbeddedEventMessage {\n event: \"interactionCreated\";\n}\n\nexport interface NavigationChangedEvent extends DeprecatedEmbeddedEventMessage {\n event: \"navigationChanged\";\n}\n\nexport interface UsageEvent extends DeprecatedEmbeddedEventMessage {\n event: \"usage\";\n}\n\n// Request/Response/Event type unions\nexport type AnyEmbeddedRequest =\n | AuthRequest\n | CreateInteractionRequest\n | AddFactsRequest\n | ConfigureSessionRequest\n | GetTemplatesRequest\n | NavigateRequest\n | StartRecordingRequest\n | StopRecordingRequest\n | GetStatusRequest\n | ConfigureRequest\n | SetCredentialsRequest;\n\nexport type AnyEmbeddedResponse = EmbeddedResponse;\n\nexport type AnyDeprecatedEmbeddedEvent =\n | ReadyEvent\n | LoadedEvent\n | RecordingStartedEvent\n | RecordingStoppedEvent\n | DocumentGeneratedEvent\n | DocumentUpdatedEvent\n | DocumentSyncedEvent\n | AuthChangedEvent\n | InteractionCreatedEvent\n | NavigationChangedEvent\n | UsageEvent;\n\nexport type AnyEvent = EmbeddedEventMessage | AnyDeprecatedEmbeddedEvent;\n\nexport type AnyEmbeddedMessage =\n | AnyEmbeddedRequest\n | AnyEmbeddedResponse\n | AnyDeprecatedEmbeddedEvent;\n"]}
|