@sapia-ai/chatbot-v3 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/{EmbeddedVideoPlayer-SaMMfDIW.js → EmbeddedVideoPlayer-CNcds-dW.js} +283 -282
  2. package/dist/Preview-Dmns6UWL.js +84 -0
  3. package/dist/api.js +1 -1
  4. package/dist/{dist-DGBYKC8c.js → dist-B9SbMqZU.js} +2693 -2693
  5. package/dist/embed/createChatbot.d.ts +2 -0
  6. package/dist/{fix-webm-duration-BW9Fbdzt.js → fix-webm-duration-BWL-ZRDX.js} +2 -2
  7. package/dist/index.d.ts +0 -1
  8. package/dist/index.js +15479 -2067
  9. package/dist/jsx-runtime-8QqjHL5t.js +24 -0
  10. package/dist/messages-Czlp86gl.js +1963 -0
  11. package/dist/react-B0K-sClg.js +295 -0
  12. package/dist/{react-Bujo1aK5.js → react-ChCcxVnw.js} +90 -89
  13. package/dist/{react-GXf8sbzf.js → react-DJysvNxz.js} +72 -71
  14. package/dist/{react-BVzcquey.js → react-Dbs-sPBo.js} +93 -92
  15. package/dist/{react-lp7yfM94.js → react-NauLB_WU.js} +91 -90
  16. package/dist/{react-BGJ7Szvq.js → react-QrtEtv1G.js} +76 -74
  17. package/dist/{react-BrCGR7Ca.js → react-be7q6yw_.js} +312 -310
  18. package/dist/{react-CRTg4gz8.js → react-czRIxT0g.js} +85 -84
  19. package/dist/{react-BMxM8TWJ.js → react-dE7BdGuR.js} +49 -48
  20. package/package.json +14 -25
  21. package/dist/EmbeddedVideoPlayer-SaMMfDIW.js.map +0 -1
  22. package/dist/Preview-Db-hgkTh.js +0 -83
  23. package/dist/Preview-Db-hgkTh.js.map +0 -1
  24. package/dist/dash.all.min-DZ1yEcJk.js.map +0 -1
  25. package/dist/dist-BSi28_cP.js.map +0 -1
  26. package/dist/dist-DGBYKC8c.js.map +0 -1
  27. package/dist/dist-FvHBWiRa.js.map +0 -1
  28. package/dist/fix-webm-duration-BW9Fbdzt.js.map +0 -1
  29. package/dist/hls-mBncGwsE.js.map +0 -1
  30. package/dist/index.js.map +0 -1
  31. package/dist/max-Btet1snX.js.map +0 -1
  32. package/dist/messages-C4jqrtSG.js +0 -187
  33. package/dist/messages-C4jqrtSG.js.map +0 -1
  34. package/dist/react-BGJ7Szvq.js.map +0 -1
  35. package/dist/react-BMxM8TWJ.js.map +0 -1
  36. package/dist/react-BVzcquey.js.map +0 -1
  37. package/dist/react-BrCGR7Ca.js.map +0 -1
  38. package/dist/react-Bujo1aK5.js.map +0 -1
  39. package/dist/react-CRTg4gz8.js.map +0 -1
  40. package/dist/react-GXf8sbzf.js.map +0 -1
  41. package/dist/react-lp7yfM94.js.map +0 -1
  42. package/dist/sapia-chatbot.css +0 -3
  43. package/dist-umd/sapia-chatbot.umd.js.map +0 -1
@@ -1,187 +0,0 @@
1
- import e from "axios";
2
- //#region src/api/constants.ts
3
- var t = "ph-app-id", n = "apollographql-client-name", r = "fi-sapia", i = "apollographql-client-version", a = [
4
- "local",
5
- "dev",
6
- "qa",
7
- "sandbox",
8
- "product"
9
- ], o = [
10
- "ap-southeast-2",
11
- "eu-west-1",
12
- "us-east-1"
13
- ], s = "chatbot", c = {
14
- dev: "https://fi-api.dev.predictivehire.com",
15
- qa: "https://fi-api.qa.predictivehire.com",
16
- sandbox: "https://fi-api.sandbox.predictivehire.com",
17
- product: "https://fi-api.product.predictivehire.com"
18
- }, l = "http://fi.localhost.com:5004", u = ({ env: e, apiOrigin: t }) => t ? t.replace(/\/$/, "") : e === "local" ? l : c[e], d = (e) => `${u(e)}/api/${e.region}/${s}`, f = (e) => {
19
- let t, n = [];
20
- for (let r of e.split("\n")) {
21
- if (r === "" || r.startsWith(":")) continue;
22
- let e = r.indexOf(":"), i = e === -1 ? r : r.slice(0, e), a = e === -1 ? "" : r.slice(e + 1);
23
- a.startsWith(" ") && (a = a.slice(1)), i === "event" ? t = a : i === "data" && n.push(a);
24
- }
25
- return {
26
- event: t,
27
- data: n.join("\n")
28
- };
29
- };
30
- async function* p(e) {
31
- let t = e.getReader(), n = new TextDecoder(), r = "";
32
- try {
33
- for (;;) {
34
- let { value: e, done: i } = await t.read();
35
- if (i) break;
36
- r += n.decode(e, { stream: !0 }).replace(/\r\n/g, "\n");
37
- let a;
38
- for (; (a = r.indexOf("\n\n")) !== -1;) {
39
- let e = r.slice(0, a);
40
- r = r.slice(a + 2);
41
- let t = f(e);
42
- (t.event !== void 0 || t.data !== "") && (yield t);
43
- }
44
- }
45
- } finally {
46
- t.cancel().catch(() => {});
47
- }
48
- }
49
- //#endregion
50
- //#region src/api/client.ts
51
- var m = (...e) => globalThis.fetch(...e), h = class {
52
- constructor(a) {
53
- var o, s, c;
54
- this.baseUrl = d(a), this.baseHeaders = {
55
- [t]: a.appId,
56
- [n]: r,
57
- [i]: "1.0"
58
- }, this.http = (o = a.httpClient) == null ? e.create({ headers: this.baseHeaders }) : o, this.putImpl = (s = a.putImpl) == null ? e.put : s, this.fetchImpl = (c = a.fetchImpl) == null ? m : c;
59
- }
60
- fiTokenHeaders() {
61
- return this.fiToken ? { [this.fiToken.name]: this.fiToken.value } : {};
62
- }
63
- getFiToken() {
64
- return this.fiToken;
65
- }
66
- async startAts(e) {
67
- let t = await this.http.post(`${this.baseUrl}/${e}/start/ats`);
68
- return this.fiToken = t.data.fiToken, t.data;
69
- }
70
- async nextStream(e, t, n) {
71
- let r = await this.fetchImpl(`${this.baseUrl}/${e}/next/stream`, {
72
- method: "POST",
73
- headers: {
74
- ...this.baseHeaders,
75
- ...this.fiTokenHeaders(),
76
- "Content-Type": "application/json",
77
- Accept: "text/event-stream"
78
- },
79
- body: JSON.stringify({ candidateResponse: t }),
80
- signal: n.signal
81
- });
82
- if (!r.ok || !r.body) throw Error(`next/stream failed: ${r.status}`);
83
- let i;
84
- for await (let e of p(r.body)) {
85
- let t = JSON.parse(e.data);
86
- switch (t.type) {
87
- case "RUN_ERROR":
88
- var a;
89
- throw Error((a = t.message) == null ? "next/stream error" : a);
90
- case "STATE_SNAPSHOT":
91
- var o, s;
92
- (o = t.snapshot) != null && o.question && ((s = n.onMeta) == null || s.call(n, g(t.snapshot.question)));
93
- break;
94
- case "TEXT_MESSAGE_CONTENT":
95
- var c;
96
- t.delta && n.onDelta(t.delta, (c = t.messageId) == null ? "" : c);
97
- break;
98
- case "RUN_FINISHED":
99
- i = t.result;
100
- break;
101
- }
102
- if (i) break;
103
- }
104
- if (!i) throw Error("next/stream ended without a RUN_FINISHED frame");
105
- return i.fiToken && (this.fiToken = i.fiToken), i;
106
- }
107
- async editAnswer(e, t) {
108
- return (await this.http.post(`${this.baseUrl}/${e}/edit-answer`, { editAnswerInput: t }, { headers: this.fiTokenHeaders() })).data;
109
- }
110
- async extractHumanName(e, t) {
111
- return (await this.http.post(`${this.baseUrl}/${e}/extract-human-name`, {
112
- userText: t.userText,
113
- extractTypes: [t.extractType]
114
- })).data;
115
- }
116
- async getVideoUploadUrl(e, t, n) {
117
- return (await this.http.get(`${this.baseUrl}/${e}/questions/${t}/video-upload-signed-url`, {
118
- params: { extension: n },
119
- headers: this.fiTokenHeaders()
120
- })).data;
121
- }
122
- async uploadVideo(e, t, n, r) {
123
- await this.putImpl(e, t, {
124
- headers: { "Content-Type": `video/${n}` },
125
- onUploadProgress: (e) => {
126
- r && e.total && r(e.loaded / e.total);
127
- }
128
- });
129
- }
130
- async getVideoAccessUrl(e, t, n) {
131
- return (await this.http.get(`${this.baseUrl}/${e}/questions/${t}/video-access-signed-url`, {
132
- params: { extension: n },
133
- headers: this.fiTokenHeaders()
134
- })).data;
135
- }
136
- async detectAgc(e) {
137
- return (await this.http.post(`${this.baseUrl}/${e}/detect-agc`, {}, { headers: this.fiTokenHeaders() })).data;
138
- }
139
- async getAccessManagement(e) {
140
- return (await this.http.get(`${this.baseUrl}/${e}/access-management`)).data;
141
- }
142
- async verifyAccess(e, t) {
143
- return (await this.http.post(`${this.baseUrl}/${e}/verify-access`, { candidateEmail: t })).data;
144
- }
145
- async getTranslation(e) {
146
- return (await this.http.get(`${this.baseUrl}/translation/${e}`)).data;
147
- }
148
- }, g = (e) => {
149
- var t;
150
- return {
151
- _id: e._id,
152
- masterId: e.masterId,
153
- types: e.questionTypes,
154
- rules: e.rules,
155
- options: e.options,
156
- tags: e.tags,
157
- usageWhitelist: e.usageWhitelist,
158
- kind: e.kind,
159
- contents: ((t = e.contents) == null ? [] : t).map((e) => ({
160
- value: "",
161
- types: e.types,
162
- component: e.component
163
- }))
164
- };
165
- }, _ = /* @__PURE__ */ function(e) {
166
- return e.MAX_TEXT_LENGTH = "maxTextLength", e.MIN_TEXT_LENGTH = "minTextLength", e.RECOMMENDED_TEXT_LENGTH = "recommendedTextLength", e.MAX_VOICE_SECONDS = "maxVoiceSeconds", e.MIN_VOICE_SECONDS = "minVoiceSeconds", e.RECOMMENDED_VOICE_SECONDS = "recommendedVoiceSeconds", e;
167
- }({}), v = /* @__PURE__ */ function(e) {
168
- return e.AGENT = "AGENT", e.CANDIDATE = "CANDIDATE", e;
169
- }({}), y = /* @__PURE__ */ function(e) {
170
- return e.HINT = "HINT", e.FTQ = "FTQ", e.MCQ = "MCQ", e.VOICE = "VOICE", e.VIDEO = "VIDEO", e.SLIDER = "SLIDER", e.DROPDOWN = "DROPDOWN", e.BGQ = "BUTTON_GROUP_QUESTION", e;
171
- }({}), b = /* @__PURE__ */ function(e) {
172
- return e.TEXT = "TEXT", e.VOICE = "VOICE", e.VIDEO = "VIDEO", e.SLIDER = "SLIDER", e;
173
- }({}), x = /* @__PURE__ */ function(e) {
174
- return e.GENERAL_PY = "GENERAL_PY", e.CUSTOMER_SATISFACTION = "CUSTOMER_SATISFACTION", e.PII = "PII", e.SENSITIVE = "SENSITIVE", e.DISPLAY_IN_TI = "DISPLAY_IN_TI", e.HEXACO_PERSONALITY_TEST = "HEXACO_PERSONALITY_TEST", e;
175
- }({}), S = /* @__PURE__ */ function(e) {
176
- return e.FULL_NAME = "fullName", e.FIRST_NAME = "first_name", e.LAST_NAME = "last_name", e.EMAIL = "email", e.PHONE_NUMBER = "phoneNumber", e.LOCATION = "location", e;
177
- }({}), C = /* @__PURE__ */ function(e) {
178
- return e.TEST_CAMERA = "test_camera", e;
179
- }({}), w = /* @__PURE__ */ function(e) {
180
- return e.PRIMARY = "PRIMARY", e.SECONDARY = "SECONDARY", e.DEFAULT = "DEFAULT", e;
181
- }({}), T = /* @__PURE__ */ function(e) {
182
- return e.FI_ATS_ASSESSMENT_ORDER_COMPLETED = "FI_ATS_ASSESSMENT_ORDER_COMPLETED", e.FI_ASSESSMENT_STARTED = "FI_ASSESSMENT_STARTED", e.FI_ASSESSMENT_PII_SAVED = "FI_ASSESSMENT_PII_SAVED", e.FI_ASSESSMENT_PII_COMPLETED = "FI_ASSESSMENT_PII_COMPLETED", e.FI_ASSESSMENT_INPROGRESS = "FI_ASSESSMENT_INPROGRESS", e.FI_ASSESSMENT_COMPLETED = "FI_ASSESSMENT_COMPLETED", e.FI_ASSESSMENT_ENDED = "FI_ASSESSMENT_ENDED", e.FI_ASSESSMENT_DROPPED_OUT = "FI_ASSESSMENT_DROPPED_OUT", e.FI_PREDICTION_STARTED = "FI_PREDICTION_STARTED", e.FI_PREDICTION_COMPLETED = "FI_PREDICTION_COMPLETED", e.FI_ASSESSMENT_DUPLICATED = "FI_ASSESSMENT_DUPLICATED", e;
183
- }({});
184
- //#endregion
185
- export { u as _, x as a, _ as c, c as d, s as f, d as g, o as h, v as i, C as l, a as m, w as n, S as o, l as p, b as r, y as s, T as t, h as u };
186
-
187
- //# sourceMappingURL=messages-C4jqrtSG.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messages-C4jqrtSG.js","names":[],"sources":["../src/api/constants.ts","../src/api/config.ts","../src/api/sse.ts","../src/api/client.ts","../src/api/types/messages.ts"],"sourcesContent":["// Layer A — HTTP header names/values (ported from legacy FIApis.ts checkAxiosInstance).\n\nexport const PH_APP_ID_HEADER = 'ph-app-id'\nexport const CLIENT_NAME_HEADER = 'apollographql-client-name'\nexport const CLIENT_NAME_VALUE = 'fi-sapia'\nexport const CLIENT_VERSION_HEADER = 'apollographql-client-version'\nexport const CLIENT_VERSION_VALUE = '1.0'\n","// Layer A — environment/region configuration. Framework-agnostic, zero React.\n\nexport const ENVIRONMENTS = ['local', 'dev', 'qa', 'sandbox', 'product'] as const\nexport type Env = (typeof ENVIRONMENTS)[number]\n\nexport const REGIONS = ['ap-southeast-2', 'eu-west-1', 'us-east-1'] as const\nexport type Region = (typeof REGIONS)[number]\n\nexport const CHATBOT_API_PATH = 'chatbot'\n\n/** Backend origins per environment (ported from legacy src/types/Api.ts Domain map). */\nexport const API_ORIGIN_BY_ENV: Record<Exclude<Env, 'local'>, string> = {\n dev: 'https://fi-api.dev.predictivehire.com',\n qa: 'https://fi-api.qa.predictivehire.com',\n sandbox: 'https://fi-api.sandbox.predictivehire.com',\n product: 'https://fi-api.product.predictivehire.com',\n}\n\nexport const DEFAULT_LOCAL_API_ORIGIN = 'http://fi.localhost.com:5004'\n\nexport type ChatbotClientConfig = {\n env: Env\n region: Region\n appId: string\n /** Overrides the env-derived origin (required for env \"local\" if not on the default port). */\n apiOrigin?: string\n}\n\nexport const resolveApiOrigin = ({ env, apiOrigin }: Pick<ChatbotClientConfig, 'env' | 'apiOrigin'>): string => {\n if (apiOrigin) return apiOrigin.replace(/\\/$/, '')\n if (env === 'local') return DEFAULT_LOCAL_API_ORIGIN\n return API_ORIGIN_BY_ENV[env]\n}\n\n/** e.g. https://fi-api.dev.predictivehire.com/api/us-east-1/chatbot */\nexport const buildChatbotBaseUrl = (config: ChatbotClientConfig): string =>\n `${resolveApiOrigin(config)}/api/${config.region}/${CHATBOT_API_PATH}`\n","// Layer A — minimal Server-Sent-Events reader over a fetch ReadableStream.\n// No dependency: parses `event:`/`data:` frames separated by a blank line.\n// Assumes UTF-8 text frames terminated by \"\\n\\n\" (CRLF is normalised to LF).\n\nexport type SseFrame = {\n /** SSE event name (`event:` line); undefined for a default message frame. */\n event?: string\n /** Joined `data:` lines (one frame may carry several). */\n data: string\n}\n\n/** Parse a single frame block (text between blank-line separators). */\nconst parseFrame = (block: string): SseFrame => {\n let event: string | undefined\n const dataLines: string[] = []\n for (const line of block.split('\\n')) {\n if (line === '' || line.startsWith(':')) continue // blank or comment\n const idx = line.indexOf(':')\n const field = idx === -1 ? line : line.slice(0, idx)\n let value = idx === -1 ? '' : line.slice(idx + 1)\n if (value.startsWith(' ')) value = value.slice(1) // strip one leading space (SSE spec)\n if (field === 'event') event = value\n else if (field === 'data') dataLines.push(value)\n }\n return { event, data: dataLines.join('\\n') }\n}\n\n/**\n * Reads an SSE body, yielding parsed {event,data} frames as they arrive.\n * Cancels the underlying reader when the consumer stops (break / throw / abort),\n * so an aborted fetch tears the stream down cleanly.\n */\nexport async function* readSse(body: ReadableStream<Uint8Array>): AsyncGenerator<SseFrame> {\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n try {\n for (;;) {\n const { value, done } = await reader.read()\n if (done) break\n buffer += decoder.decode(value, { stream: true }).replace(/\\r\\n/g, '\\n')\n let sep: number\n while ((sep = buffer.indexOf('\\n\\n')) !== -1) {\n const block = buffer.slice(0, sep)\n buffer = buffer.slice(sep + 2)\n const frame = parseFrame(block)\n // Skip empty/keep-alive frames (comment-only or blank); a named event always yields.\n if (frame.event !== undefined || frame.data !== '') yield frame\n }\n }\n } finally {\n reader.cancel().catch(() => {})\n }\n}\n","// Layer A — ChatbotApiClient: all backend calls, no business logic, zero React.\n// Replaces legacy FIApis.ts module-level singletons with an injectable per-instance client.\n\nimport axios, { type AxiosInstance, type AxiosProgressEvent } from 'axios'\nimport {\n CLIENT_NAME_HEADER,\n CLIENT_NAME_VALUE,\n CLIENT_VERSION_HEADER,\n CLIENT_VERSION_VALUE,\n PH_APP_ID_HEADER,\n} from './constants'\nimport { buildChatbotBaseUrl, type ChatbotClientConfig } from './config'\nimport { readSse } from './sse'\nimport type {\n CandidateResponseInput,\n EditCandidateResponseInput,\n Question,\n} from './types/messages'\nimport type {\n AccessManagementResponse,\n AgUiFrame,\n DetectAgcResponse,\n EditAnswerResponse,\n ExtractHumanNameResponse,\n ExtractHumanNameType,\n FiToken,\n NextResponse,\n SnapshotQuestion,\n StartAtsResponse,\n TranslationResponse,\n VerifyAccessResponse,\n VideoSignedUrlResponse,\n} from './types/responses'\n\nexport type ChatbotApiClientOptions = ChatbotClientConfig & {\n /** Injectable for tests / instrumented hosts. */\n httpClient?: AxiosInstance\n /** Bare PUT for S3 uploads (no API headers); injectable for tests. */\n putImpl?: typeof axios.put\n /** fetch impl for the streaming transport (Axios can't stream); injectable for tests / mock streams. */\n fetchImpl?: typeof fetch\n}\n\n/** Handlers for nextStream — fired as frames arrive on the SSE. */\nexport type NextStreamHandlers = {\n /**\n * A chunk of agent message text. `messageId` (\"<baseId>:<contentIndex>\")\n * identifies which message it belongs to; a change of baseId marks a new\n * bundled message (consecutive hints arrive as separate baseIds in one run).\n */\n onDelta: (text: string, messageId: string) => void\n /** Optional leading frame carrying the question structure (types/rules/options) before the text. */\n onMeta?: (question: Question) => void\n /** Aborts the in-flight stream (new request / unmount). */\n signal?: AbortSignal\n}\n\n/** Default streaming transport: delegates to the platform fetch (errors lazily if absent). */\nconst defaultFetch: typeof fetch = (...args) => globalThis.fetch(...args)\n\nexport class ChatbotApiClient {\n private readonly http: AxiosInstance\n private readonly putImpl: typeof axios.put\n private readonly fetchImpl: typeof fetch\n private readonly baseUrl: string\n /** API/client headers reused by both the Axios instance and the fetch streaming path. */\n private readonly baseHeaders: Record<string, string>\n private fiToken?: FiToken\n\n constructor(options: ChatbotApiClientOptions) {\n this.baseUrl = buildChatbotBaseUrl(options)\n this.baseHeaders = {\n [PH_APP_ID_HEADER]: options.appId,\n [CLIENT_NAME_HEADER]: CLIENT_NAME_VALUE,\n [CLIENT_VERSION_HEADER]: CLIENT_VERSION_VALUE,\n }\n this.http = options.httpClient ?? axios.create({ headers: this.baseHeaders })\n this.putImpl = options.putImpl ?? axios.put\n this.fetchImpl = options.fetchImpl ?? defaultFetch\n }\n\n /** Dynamic session-token header for calls after /start/ats (token name varies per session). */\n private fiTokenHeaders(): Record<string, string> {\n return this.fiToken ? { [this.fiToken.name]: this.fiToken.value } : {}\n }\n\n getFiToken(): FiToken | undefined {\n return this.fiToken\n }\n\n async startAts(assessmentId: string): Promise<StartAtsResponse> {\n const res = await this.http.post<StartAtsResponse>(`${this.baseUrl}/${assessmentId}/start/ats`)\n this.fiToken = res.data.fiToken\n return res.data\n }\n\n /**\n * Loads the next question over /next/stream and consumes the\n * backend's AG-UI event stream (@see https://docs.ag-ui.com/concepts/events).\n * Each frame is data-only (`data: <json>`); the discriminator is the JSON\n * `type`. Fires onMeta from STATE_SNAPSHOT and onDelta per TEXT_MESSAGE_CONTENT,\n * then resolves with the authoritative NextResponse carried by RUN_FINISHED.\n */\n async nextStream(\n assessmentId: string,\n candidateResponse: CandidateResponseInput | undefined,\n handlers: NextStreamHandlers,\n ): Promise<NextResponse> {\n const res = await this.fetchImpl(`${this.baseUrl}/${assessmentId}/next/stream`, {\n method: 'POST',\n headers: {\n ...this.baseHeaders,\n ...this.fiTokenHeaders(),\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n },\n body: JSON.stringify({ candidateResponse }),\n signal: handlers.signal,\n })\n if (!res.ok || !res.body) throw new Error(`next/stream failed: ${res.status}`)\n\n let final: NextResponse | undefined\n for await (const frame of readSse(res.body)) {\n const event = JSON.parse(frame.data) as AgUiFrame\n switch (event.type) {\n case 'RUN_ERROR':\n throw new Error(event.message ?? 'next/stream error')\n case 'STATE_SNAPSHOT':\n if (event.snapshot?.question) handlers.onMeta?.(toQuestion(event.snapshot.question))\n break\n case 'TEXT_MESSAGE_CONTENT':\n if (event.delta) handlers.onDelta(event.delta, event.messageId ?? '')\n break\n case 'RUN_FINISHED':\n final = event.result\n break\n // RUN_STARTED / TEXT_MESSAGE_START / TEXT_MESSAGE_END / CUSTOM — no client action.\n }\n if (final) break\n }\n if (!final) throw new Error('next/stream ended without a RUN_FINISHED frame')\n if (final.fiToken) this.fiToken = final.fiToken\n return final\n }\n\n async editAnswer(\n assessmentId: string,\n editCandidateResponse: EditCandidateResponseInput,\n ): Promise<EditAnswerResponse> {\n const res = await this.http.post<EditAnswerResponse>(\n `${this.baseUrl}/${assessmentId}/edit-answer`,\n { editAnswerInput: editCandidateResponse },\n { headers: this.fiTokenHeaders() },\n )\n return res.data\n }\n\n async extractHumanName(\n assessmentId: string,\n input: { userText: string; extractType: ExtractHumanNameType },\n ): Promise<ExtractHumanNameResponse> {\n const res = await this.http.post<ExtractHumanNameResponse>(\n `${this.baseUrl}/${assessmentId}/extract-human-name`,\n { userText: input.userText, extractTypes: [input.extractType] },\n )\n return res.data\n }\n\n async getVideoUploadUrl(\n assessmentId: string,\n questionId: string,\n extension: string,\n ): Promise<VideoSignedUrlResponse> {\n const res = await this.http.get<VideoSignedUrlResponse>(\n `${this.baseUrl}/${assessmentId}/questions/${questionId}/video-upload-signed-url`,\n { params: { extension }, headers: this.fiTokenHeaders() },\n )\n return res.data\n }\n\n /** PUTs the recorded blob to the S3 signed URL, reporting upload progress 0–1. */\n async uploadVideo(\n signedUrl: string,\n blob: Blob,\n extension: string,\n onProgress?: (fraction: number) => void,\n ): Promise<void> {\n // Bare axios (not this.http): the S3 signed URL must not receive our API\n // auth/client headers, which aren't part of the signature.\n await this.putImpl(signedUrl, blob, {\n headers: { 'Content-Type': `video/${extension}` },\n onUploadProgress: (event: AxiosProgressEvent) => {\n if (onProgress && event.total) onProgress(event.loaded / event.total)\n },\n })\n }\n\n async getVideoAccessUrl(\n assessmentId: string,\n questionId: string,\n extension: string,\n ): Promise<VideoSignedUrlResponse> {\n const res = await this.http.get<VideoSignedUrlResponse>(\n `${this.baseUrl}/${assessmentId}/questions/${questionId}/video-access-signed-url`,\n { params: { extension }, headers: this.fiTokenHeaders() },\n )\n return res.data\n }\n\n async detectAgc(assessmentId: string): Promise<DetectAgcResponse> {\n const res = await this.http.post<DetectAgcResponse>(\n `${this.baseUrl}/${assessmentId}/detect-agc`,\n {},\n { headers: this.fiTokenHeaders() },\n )\n return res.data\n }\n\n async getAccessManagement(assessmentId: string): Promise<AccessManagementResponse> {\n const res = await this.http.get<AccessManagementResponse>(\n `${this.baseUrl}/${assessmentId}/access-management`,\n )\n return res.data\n }\n\n async verifyAccess(assessmentId: string, candidateEmail: string): Promise<VerifyAccessResponse> {\n const res = await this.http.post<VerifyAccessResponse>(\n `${this.baseUrl}/${assessmentId}/verify-access`,\n { candidateEmail },\n )\n return res.data\n }\n\n async getTranslation(language: string): Promise<TranslationResponse> {\n const res = await this.http.get<TranslationResponse>(`${this.baseUrl}/translation/${language}`)\n return res.data\n }\n}\n\n/**\n * Adapt an AG-UI STATE_SNAPSHOT question to our wire Question. `questionTypes`→`types`;\n * carry the BE render indicators (kind, per-content component) for agent-side rendering.\n * No text here (it streams via TEXT_MESSAGE_CONTENT), so each content keeps types + component.\n */\nconst toQuestion = (q: SnapshotQuestion): Question => ({\n _id: q._id,\n masterId: q.masterId,\n types: q.questionTypes,\n rules: q.rules,\n options: q.options,\n tags: q.tags,\n usageWhitelist: q.usageWhitelist,\n kind: q.kind,\n contents: (q.contents ?? []).map((c) => ({ value: '', types: c.types, component: c.component })),\n})\n","// Layer A — wire types shared with the backend.\n// Ported from legacy phapp-fi-widget src/types/Next.ts (values must match the BE contract).\n\nexport enum RuleName {\n MAX_TEXT_LENGTH = 'maxTextLength',\n MIN_TEXT_LENGTH = 'minTextLength',\n RECOMMENDED_TEXT_LENGTH = 'recommendedTextLength',\n MAX_VOICE_SECONDS = 'maxVoiceSeconds',\n MIN_VOICE_SECONDS = 'minVoiceSeconds',\n RECOMMENDED_VOICE_SECONDS = 'recommendedVoiceSeconds',\n}\n\nexport enum MessageSender {\n AGENT = 'AGENT',\n CANDIDATE = 'CANDIDATE',\n}\n\nexport enum QuestionType {\n HINT = 'HINT',\n FTQ = 'FTQ',\n MCQ = 'MCQ',\n VOICE = 'VOICE',\n VIDEO = 'VIDEO',\n SLIDER = 'SLIDER',\n DROPDOWN = 'DROPDOWN',\n BGQ = 'BUTTON_GROUP_QUESTION',\n}\n\nexport enum ContentType {\n TEXT = 'TEXT',\n VOICE = 'VOICE',\n VIDEO = 'VIDEO',\n SLIDER = 'SLIDER',\n}\n\nexport enum PHService {\n GENERAL_PY = 'GENERAL_PY',\n CUSTOMER_SATISFACTION = 'CUSTOMER_SATISFACTION',\n PII = 'PII',\n SENSITIVE = 'SENSITIVE',\n DISPLAY_IN_TI = 'DISPLAY_IN_TI',\n HEXACO_PERSONALITY_TEST = 'HEXACO_PERSONALITY_TEST',\n}\n\n/** Identified via question tag { name: \"PII_TYPE\", value: <PiiQuestionType> } */\nexport enum PiiQuestionType {\n FULL_NAME = 'fullName',\n FIRST_NAME = 'first_name',\n LAST_NAME = 'last_name',\n EMAIL = 'email',\n PHONE_NUMBER = 'phoneNumber',\n LOCATION = 'location',\n}\n\n/** Identified via question tag { name: \"VIDEO_TYPE\", value: <VideoQuestionType> } */\nexport enum VideoQuestionType {\n TEST_CAMERA = 'test_camera',\n}\n\nexport enum ButtonType {\n PRIMARY = 'PRIMARY',\n SECONDARY = 'SECONDARY',\n DEFAULT = 'DEFAULT',\n}\n\nexport enum AssessmentStatus {\n FI_ATS_ASSESSMENT_ORDER_COMPLETED = 'FI_ATS_ASSESSMENT_ORDER_COMPLETED',\n FI_ASSESSMENT_STARTED = 'FI_ASSESSMENT_STARTED',\n FI_ASSESSMENT_PII_SAVED = 'FI_ASSESSMENT_PII_SAVED',\n FI_ASSESSMENT_PII_COMPLETED = 'FI_ASSESSMENT_PII_COMPLETED',\n FI_ASSESSMENT_INPROGRESS = 'FI_ASSESSMENT_INPROGRESS',\n FI_ASSESSMENT_COMPLETED = 'FI_ASSESSMENT_COMPLETED',\n FI_ASSESSMENT_ENDED = 'FI_ASSESSMENT_ENDED',\n FI_ASSESSMENT_DROPPED_OUT = 'FI_ASSESSMENT_DROPPED_OUT',\n FI_PREDICTION_STARTED = 'FI_PREDICTION_STARTED',\n FI_PREDICTION_COMPLETED = 'FI_PREDICTION_COMPLETED',\n FI_ASSESSMENT_DUPLICATED = 'FI_ASSESSMENT_DUPLICATED',\n}\n\nexport type MessageIdentifier = string\n\nexport type Trigger = {\n action: string\n}\n\nexport type Style = {\n buttonType: ButtonType\n}\n\nexport type Content = {\n value: string\n text: string\n id: string\n}\n\nexport type ButtonGroupContent = Content & {\n triggers: Trigger[]\n style: Style\n}\n\nexport type AnswerContent = {\n text: string\n value: string\n /** Sanitized rich-text HTML for re-display; `text` stays the plain-text source for scoring. */\n html?: string\n triggers?: Trigger[]\n style?: Style\n}\n\nexport type Tag = {\n name: string\n value: string\n}\n\nexport type QuestionRule = {\n name: RuleName\n type: string\n value: number | string\n}\n\nexport type BubbleContent = {\n value: string\n types: ContentType[]\n /** BE A2UI-style render component (streaming STATE_SNAPSHOT / loaded chatLogs only). */\n component?: 'Text' | 'VoicePlayer' | 'VideoPlayer' | 'Slider'\n}\n\nexport type MCQQuestionOption = {\n id: string\n text: string\n value: string\n}\n\nexport type DropdownOption = MCQQuestionOption\n\nexport type BGQButton = MCQQuestionOption & {\n triggers: Trigger[]\n style: Style\n}\n\nexport type Question = {\n masterId?: string\n types: QuestionType[]\n rules?: QuestionRule[]\n contents: BubbleContent[]\n options?: MCQQuestionOption[] | BGQButton[]\n usageWhitelist?: PHService[]\n _id: string\n tags?: Tag[]\n /** BE message kind (streaming STATE_SNAPSHOT / loaded chatLogs only); \"Hint\" | \"Question\". */\n kind?: 'Hint' | 'Question'\n}\n\nexport type Answer = {\n _id: string\n question: Question\n text: string\n value: string\n}\n\nexport interface Message<T> {\n id: string\n sender: MessageSender\n messageIdentifier?: MessageIdentifier\n data: T\n}\n\nexport type CandidateResponse = Message<Answer>\nexport type AgentResponse = Message<Question>\n\nexport type CandidateResponseInput = {\n userAgent: string\n questionId: string\n answer?: AnswerContent\n}\n\nexport type EditCandidateResponseInput = Required<Omit<CandidateResponseInput, 'userAgent'>>\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"react-BGJ7Szvq.js","names":["CustomMediaElement"],"sources":["../../../node_modules/.pnpm/hls-video-element@1.5.11/node_modules/hls-video-element/dist/hls-video-element.js","../../../node_modules/.pnpm/hls-video-element@1.5.11/node_modules/hls-video-element/dist/react.js"],"sourcesContent":["import { CustomVideoElement } from \"custom-media-element\";\nimport { MediaTracksMixin } from \"media-tracks\";\nimport Hls from \"hls.js/dist/hls.mjs\";\nconst HlsVideoMixin = (superclass) => {\n return class HlsVideo extends superclass {\n static shadowRootOptions = { ...superclass.shadowRootOptions };\n static getTemplateHTML = (attrs, props = {}) => {\n const { src, ...rest } = attrs;\n return `\n <script type=\"application/json\" id=\"config\">\n ${JSON.stringify(props.config || {})}\n </script>\n ${superclass.getTemplateHTML(rest)}\n `;\n };\n #airplaySourceEl = null;\n #config = null;\n constructor() {\n super();\n this.#upgradeProperty(\"config\");\n }\n get config() {\n return this.#config;\n }\n set config(value) {\n this.#config = value;\n }\n attributeChangedCallback(attrName, oldValue, newValue) {\n if (attrName !== \"src\") {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n }\n if (attrName === \"src\" && oldValue != newValue) {\n this.load();\n }\n }\n #destroy() {\n var _a, _b;\n (_a = this.#airplaySourceEl) == null ? void 0 : _a.remove();\n (_b = this.nativeEl) == null ? void 0 : _b.removeEventListener(\n \"webkitcurrentplaybacktargetiswirelesschanged\",\n this.#toggleHlsLoad\n );\n if (this.api) {\n this.api.detachMedia();\n this.api.destroy();\n this.api = null;\n }\n }\n async load() {\n var _a, _b;\n const isFirstLoad = !this.api;\n this.#destroy();\n if (!this.src) {\n return;\n }\n if (isFirstLoad && !this.#config) {\n this.#config = JSON.parse(((_a = this.shadowRoot.getElementById(\"config\")) == null ? void 0 : _a.textContent) || \"{}\");\n }\n if (Hls.isSupported()) {\n await Promise.resolve();\n this.api = new Hls({\n // Mimic the media element with an Infinity duration for live streams.\n liveDurationInfinity: true,\n // Disable auto quality level/fragment loading.\n autoStartLoad: false,\n // Custom configuration for hls.js.\n ...this.config\n });\n this.api.loadSource(this.src);\n this.api.attachMedia(this.nativeEl);\n switch (this.nativeEl.preload) {\n case \"none\": {\n const loadSourceOnPlay = () => this.api.startLoad();\n this.nativeEl.addEventListener(\"play\", loadSourceOnPlay, {\n once: true\n });\n this.api.on(Hls.Events.DESTROYING, () => {\n this.nativeEl.removeEventListener(\"play\", loadSourceOnPlay);\n });\n break;\n }\n case \"metadata\": {\n const originalLength = this.api.config.maxBufferLength;\n const originalSize = this.api.config.maxBufferSize;\n this.api.config.maxBufferLength = 1;\n this.api.config.maxBufferSize = 1;\n const increaseBufferOnPlay = () => {\n this.api.config.maxBufferLength = originalLength;\n this.api.config.maxBufferSize = originalSize;\n };\n this.nativeEl.addEventListener(\"play\", increaseBufferOnPlay, {\n once: true\n });\n this.api.on(Hls.Events.DESTROYING, () => {\n this.nativeEl.removeEventListener(\"play\", increaseBufferOnPlay);\n });\n this.api.startLoad();\n break;\n }\n default:\n this.api.startLoad();\n }\n if (this.nativeEl.webkitCurrentPlaybackTargetIsWireless) {\n this.api.stopLoad();\n }\n this.nativeEl.addEventListener(\n \"webkitcurrentplaybacktargetiswirelesschanged\",\n this.#toggleHlsLoad\n );\n this.#airplaySourceEl = document.createElement(\"source\");\n this.#airplaySourceEl.setAttribute(\"type\", \"application/x-mpegURL\");\n this.#airplaySourceEl.setAttribute(\"src\", this.src);\n this.nativeEl.disableRemotePlayback = false;\n this.nativeEl.append(this.#airplaySourceEl);\n const levelIdMap = /* @__PURE__ */ new WeakMap();\n this.api.on(Hls.Events.MANIFEST_PARSED, (event, data) => {\n if (this.nativeEl.autoplay && this.nativeEl.paused) {\n this.nativeEl.play().catch((err) => {\n console.warn(\"Autoplay failed:\", err);\n });\n }\n removeAllMediaTracks();\n let videoTrack = this.videoTracks.getTrackById(\"main\");\n if (!videoTrack) {\n videoTrack = this.addVideoTrack(\"main\");\n videoTrack.id = \"main\";\n videoTrack.selected = true;\n }\n for (const [id, level] of data.levels.entries()) {\n const videoRendition = videoTrack.addRendition(\n level.url[0],\n level.width,\n level.height,\n level.videoCodec,\n level.bitrate\n );\n levelIdMap.set(level, `${id}`);\n videoRendition.id = `${id}`;\n }\n for (let [id, a] of data.audioTracks.entries()) {\n const kind = a.default ? \"main\" : \"alternative\";\n const audioTrack = this.addAudioTrack(kind, a.name, a.lang);\n audioTrack.id = `${id}`;\n if (a.default) {\n audioTrack.enabled = true;\n }\n }\n });\n this.audioTracks.addEventListener(\"change\", () => {\n var _a2;\n const audioTrackId = +((_a2 = [...this.audioTracks].find((t) => t.enabled)) == null ? void 0 : _a2.id);\n const availableIds = this.api.audioTracks.map((t) => t.id);\n if (audioTrackId != this.api.audioTrack && availableIds.includes(audioTrackId)) {\n this.api.audioTrack = audioTrackId;\n }\n });\n this.api.on(Hls.Events.LEVELS_UPDATED, (event, data) => {\n const videoTrack = this.videoTracks[this.videoTracks.selectedIndex ?? 0];\n if (!videoTrack) return;\n const levelIds = data.levels.map((l) => levelIdMap.get(l));\n for (const rendition of this.videoRenditions) {\n if (rendition.id && !levelIds.includes(rendition.id)) {\n videoTrack.removeRendition(rendition);\n }\n }\n });\n let lastFailedLevel = null;\n this.api.on(Hls.Events.ERROR, (event, data) => {\n if (data.type === Hls.ErrorTypes.NETWORK_ERROR && data.details === Hls.ErrorDetails.FRAG_LOAD_ERROR) {\n lastFailedLevel = data.frag.level;\n }\n });\n this.api.on(Hls.Events.LEVEL_SWITCHED, (event, data) => {\n const newLevel = data.level;\n if (lastFailedLevel !== null && newLevel < lastFailedLevel) {\n console.warn(\n `\\u26A0\\uFE0F hls.js downgraded quality from level ${lastFailedLevel} to ${newLevel} due to fragment load failure.`\n );\n this.videoRenditions.selectedIndex = newLevel;\n lastFailedLevel = null;\n }\n });\n const switchRendition = (event) => {\n const level = event.target.selectedIndex;\n if (level != this.api.nextLevel) {\n this.api.nextLevel = level;\n }\n };\n (_b = this.videoRenditions) == null ? void 0 : _b.addEventListener(\"change\", switchRendition);\n const removeAllMediaTracks = () => {\n for (const videoTrack of this.videoTracks) {\n this.removeVideoTrack(videoTrack);\n }\n for (const audioTrack of this.audioTracks) {\n this.removeAudioTrack(audioTrack);\n }\n };\n this.api.once(Hls.Events.DESTROYING, removeAllMediaTracks);\n return;\n }\n await Promise.resolve();\n if (this.nativeEl.canPlayType(\"application/vnd.apple.mpegurl\")) {\n this.nativeEl.src = this.src;\n }\n }\n #toggleHlsLoad = () => {\n var _a, _b, _c;\n if ((_a = this.nativeEl) == null ? void 0 : _a.webkitCurrentPlaybackTargetIsWireless) {\n (_b = this.api) == null ? void 0 : _b.stopLoad();\n } else {\n (_c = this.api) == null ? void 0 : _c.startLoad();\n }\n };\n // This is a pattern to update property values that are set before\n // the custom element is upgraded.\n // https://web.dev/custom-elements-best-practices/#make-properties-lazy\n #upgradeProperty(prop) {\n if (Object.prototype.hasOwnProperty.call(this, prop)) {\n const value = this[prop];\n delete this[prop];\n this[prop] = value;\n }\n }\n };\n};\nconst HlsVideoElement = HlsVideoMixin(MediaTracksMixin(CustomVideoElement));\nif (globalThis.customElements && !globalThis.customElements.get(\"hls-video\")) {\n globalThis.customElements.define(\"hls-video\", HlsVideoElement);\n}\nvar hls_video_element_default = HlsVideoElement;\nexport {\n Hls,\n HlsVideoElement,\n HlsVideoMixin,\n hls_video_element_default as default\n};\n","\"use client\";\n\n// dist/react.ts\nimport React from \"react\";\nimport CustomMediaElement from \"./hls-video-element.js\";\n\n// ../../node_modules/ce-la-react/dist/ce-la-react.js\nvar reservedReactProps = /* @__PURE__ */ new Set([\n \"style\",\n \"children\",\n \"ref\",\n \"key\",\n \"suppressContentEditableWarning\",\n \"suppressHydrationWarning\",\n \"dangerouslySetInnerHTML\"\n]);\nvar reactPropToAttrNameMap = {\n className: \"class\",\n htmlFor: \"for\"\n};\nfunction defaultToAttributeName(propName) {\n return propName.toLowerCase();\n}\nfunction defaultToAttributeValue(propValue) {\n if (typeof propValue === \"boolean\") return propValue ? \"\" : void 0;\n if (typeof propValue === \"function\") return void 0;\n if (typeof propValue === \"object\" && propValue !== null) return void 0;\n return propValue;\n}\nfunction createComponent({\n react: React2,\n tagName,\n elementClass,\n events,\n displayName,\n defaultProps,\n toAttributeName = defaultToAttributeName,\n toAttributeValue = defaultToAttributeValue\n}) {\n const IS_REACT_19_OR_NEWER = Number.parseInt(React2.version) >= 19;\n const ReactComponent = React2.forwardRef((props, ref) => {\n var _a, _b;\n const elementRef = React2.useRef(null);\n const prevElemPropsRef = React2.useRef(/* @__PURE__ */ new Map());\n const eventProps = {};\n const attrs = {};\n const reactProps = {};\n const elementProps = {};\n for (const [k, v] of Object.entries(props)) {\n if (reservedReactProps.has(k)) {\n reactProps[k] = v;\n continue;\n }\n const attrName = toAttributeName(reactPropToAttrNameMap[k] ?? k);\n if (elementClass.prototype && k in elementClass.prototype && !(k in (((_a = globalThis.HTMLElement) == null ? void 0 : _a.prototype) ?? {})) && !((_b = elementClass.observedAttributes) == null ? void 0 : _b.some((attr) => attr === attrName))) {\n elementProps[k] = v;\n continue;\n }\n if (k.startsWith(\"on\")) {\n eventProps[k] = v;\n continue;\n }\n const attrValue = toAttributeValue(v);\n if (attrName && attrValue != null) {\n attrs[attrName] = String(attrValue);\n if (!IS_REACT_19_OR_NEWER) {\n reactProps[attrName] = attrValue;\n }\n }\n if (attrName && IS_REACT_19_OR_NEWER) {\n const attrValueFromDefault = defaultToAttributeValue(v);\n if (attrValue !== attrValueFromDefault) {\n reactProps[attrName] = attrValue;\n } else {\n reactProps[attrName] = v;\n }\n }\n }\n if (typeof window !== \"undefined\") {\n for (const propName in eventProps) {\n const callback = eventProps[propName];\n const useCapture = propName.endsWith(\"Capture\");\n const eventName = ((events == null ? void 0 : events[propName]) ?? propName.slice(2).toLowerCase()).slice(\n 0,\n useCapture ? -7 : void 0\n );\n React2.useLayoutEffect(() => {\n const eventTarget = elementRef == null ? void 0 : elementRef.current;\n if (!eventTarget || typeof callback !== \"function\") return;\n eventTarget.addEventListener(eventName, callback, useCapture);\n return () => {\n eventTarget.removeEventListener(eventName, callback, useCapture);\n };\n }, [elementRef == null ? void 0 : elementRef.current, callback]);\n }\n React2.useLayoutEffect(() => {\n if (elementRef.current === null) return;\n const newElemProps = /* @__PURE__ */ new Map();\n for (const key in elementProps) {\n setProperty(elementRef.current, key, elementProps[key]);\n prevElemPropsRef.current.delete(key);\n newElemProps.set(key, elementProps[key]);\n }\n for (const [key, _value] of prevElemPropsRef.current) {\n setProperty(elementRef.current, key, void 0);\n }\n prevElemPropsRef.current = newElemProps;\n });\n }\n if (typeof window === \"undefined\" && (elementClass == null ? void 0 : elementClass.getTemplateHTML) && (elementClass == null ? void 0 : elementClass.shadowRootOptions)) {\n const { mode, delegatesFocus } = elementClass.shadowRootOptions;\n const templateShadowRoot = React2.createElement(\"template\", {\n shadowrootmode: mode,\n shadowrootdelegatesfocus: delegatesFocus,\n dangerouslySetInnerHTML: {\n __html: elementClass.getTemplateHTML(attrs, props)\n },\n key: \"ce-la-react-ssr-template-shadow-root\"\n });\n reactProps.children = [templateShadowRoot, reactProps.children];\n }\n return React2.createElement(tagName, {\n ...defaultProps,\n ...reactProps,\n ref: React2.useCallback(\n (node) => {\n elementRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref !== null) {\n ref.current = node;\n }\n },\n [ref]\n )\n }, reactProps.children);\n });\n ReactComponent.displayName = displayName ?? elementClass.name;\n return ReactComponent;\n}\nfunction setProperty(node, name, value) {\n var _a;\n node[name] = value;\n if (value == null && name in (((_a = globalThis.HTMLElement) == null ? void 0 : _a.prototype) ?? {})) {\n node.removeAttribute(name);\n }\n}\n\n// dist/react.ts\nvar react_default = createComponent({\n react: React,\n tagName: \"hls-video\",\n elementClass: CustomMediaElement,\n toAttributeName(propName) {\n if (propName === \"muted\") return \"\";\n if (propName === \"defaultMuted\") return \"muted\";\n return defaultToAttributeName(propName);\n }\n});\nexport {\n react_default as default\n};\n/*! Bundled license information:\n\nce-la-react/dist/ce-la-react.js:\n (**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Modified version of `@lit/react` for vanilla custom elements with support for SSR.\n *)\n*/\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"react-BMxM8TWJ.js","names":["CustomMediaElement"],"sources":["../../../node_modules/.pnpm/dash-video-element@0.3.2_@svta+cml-cta@1.0.6_@svta+cml-structured-field-values@1.1.3_@s_1d417b19612eff304477e3f6272644a6/node_modules/dash-video-element/dist/dash-video-element.js","../../../node_modules/.pnpm/dash-video-element@0.3.2_@svta+cml-cta@1.0.6_@svta+cml-structured-field-values@1.1.3_@s_1d417b19612eff304477e3f6272644a6/node_modules/dash-video-element/dist/react.js"],"sourcesContent":["import { CustomVideoElement } from \"custom-media-element\";\nimport { MediaTracksMixin } from \"media-tracks\";\nclass DashVideoElement extends MediaTracksMixin(CustomVideoElement) {\n static shadowRootOptions = { ...CustomVideoElement.shadowRootOptions };\n static getTemplateHTML = (attrs) => {\n const { src, ...rest } = attrs;\n return CustomVideoElement.getTemplateHTML(rest);\n };\n #apiInit;\n attributeChangedCallback(attrName, oldValue, newValue) {\n if (attrName !== \"src\") {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n }\n if (attrName === \"src\" && oldValue != newValue) {\n this.load();\n }\n }\n async _initThumbnails(representation) {\n const generateAllCues = async (totalThumbnails2, thumbnailDuration2) => {\n const promises = [];\n const timescale = representation.timescale || 1;\n const startNumber = representation.startNumber || 1;\n const pto = representation.presentationTimeOffset ? representation.presentationTimeOffset / timescale : 0;\n const tduration = representation.segmentDuration;\n for (let thIndex = 0; thIndex < totalThumbnails2; thIndex++) {\n const startTime = calculateThumbnailStartTime({\n thIndex,\n thduration: thumbnailDuration2,\n ttiles: totalThumbnails2,\n tduration,\n startNumber,\n pto\n });\n const endTime = startTime + thumbnailDuration2;\n const promise = new Promise((resolve, reject) => {\n this.api.provideThumbnail(startTime, ({ url, width, height, x, y }) => {\n try {\n const cue = new VTTCue(\n startTime,\n endTime,\n `${url}#xywh=${x},${y},${width},${height}`\n );\n resolve(cue);\n } catch (err) {\n reject(err);\n }\n });\n });\n promises.push(promise);\n }\n return await Promise.all(promises).catch((e) => console.error(\"Error processing thumbnails\", e));\n };\n const { totalThumbnails, thumbnailDuration } = calculateThumbnailTimes(representation);\n const cues = await generateAllCues(totalThumbnails, thumbnailDuration);\n let track = this.nativeEl.querySelector('track[label=\"thumbnails\"]');\n if (!track) {\n track = createThumbnailTrack();\n this.nativeEl.appendChild(track);\n const vttUrl = cuesToVttBlobUrl(cues);\n track.src = vttUrl;\n track.dispatchEvent(new Event(\"change\"));\n }\n }\n async load() {\n if (this.#apiInit) {\n this.api.attachSource(this.src);\n return;\n }\n this.#apiInit = true;\n const Dash = await import(\"dashjs\");\n this.api = Dash.MediaPlayer().create();\n this.api.initialize(this.nativeEl, this.src, this.autoplay);\n this.api.on(Dash.MediaPlayer.events.STREAM_INITIALIZED, () => {\n const bitrateList = this.api.getRepresentationsByType(\"video\");\n let videoTrack = this.videoTracks.getTrackById(\"main\");\n if (!videoTrack) {\n videoTrack = this.addVideoTrack(\"main\");\n videoTrack.id = \"main\";\n videoTrack.selected = true;\n }\n bitrateList.forEach((rep) => {\n const bitrate = rep.bandwidth ?? rep.bitrate ?? (Number.isFinite(rep.bitrateInKbit) ? rep.bitrateInKbit * 1e3 : void 0);\n const rendition = videoTrack.addRendition(rep.id, rep.width, rep.height, rep.mimeType ?? rep.codec, bitrate);\n rendition.id = rep.id;\n });\n this.videoRenditions.addEventListener(\"change\", () => {\n const selected = this.videoRenditions[this.videoRenditions.selectedIndex];\n if (selected == null ? void 0 : selected.id) {\n this.api.updateSettings({ streaming: { abr: { autoSwitchBitrate: { video: false } } } });\n this.api.setRepresentationForTypeById(\"video\", selected.id, true);\n } else {\n this.api.updateSettings({ streaming: { abr: { autoSwitchBitrate: { video: true } } } });\n }\n });\n if (!this.api.isDynamic()) {\n const imageReps = this.api.getRepresentationsByType(\"image\");\n imageReps.forEach(async (rep, idx) => {\n if (idx > 0) return;\n this._initThumbnails(rep);\n });\n }\n });\n }\n}\nfunction calculateThumbnailTimes(representation) {\n var _a, _b;\n const essentialProp = representation.essentialProperties[0];\n const [htiles, vtiles] = essentialProp.value.split(\"x\").map(Number);\n const ttiles = htiles * vtiles;\n const periodDuration = ((_b = (_a = representation.adaptation) == null ? void 0 : _a.period) == null ? void 0 : _b.duration) || null;\n const tileDuration = representation.segmentDuration;\n const timescale = representation.timescale || 1;\n const tduration = tileDuration / timescale;\n const thduration = tduration / ttiles;\n const totalThumbnails = periodDuration != null ? Math.ceil(periodDuration / thduration) : Math.ceil(tileDuration / thduration);\n return { totalThumbnails, thumbnailDuration: thduration };\n}\nfunction calculateThumbnailStartTime({ thIndex, tduration, thduration, ttiles, startNumber, pto }) {\n const tnumber = Math.floor(thIndex / ttiles) + startNumber;\n const thnumber = thIndex % ttiles + 1;\n const tileStartTime = (tnumber - 1) * tduration - pto;\n const thumbnailStartTime = (thnumber - 1) * thduration;\n return tileStartTime + thumbnailStartTime;\n}\nfunction createThumbnailTrack() {\n const track = document.createElement(\"track\");\n track.kind = \"metadata\";\n track.label = \"thumbnails\";\n track.srclang = \"en\";\n track.mode = \"hidden\";\n track.default = true;\n return track;\n}\nfunction cuesToVttBlobUrl(cues) {\n let vtt = \"WEBVTT\\n\\n\";\n for (const cue of cues) {\n vtt += `${formatTime(cue.startTime)} --> ${formatTime(cue.endTime)}\n`;\n vtt += `${cue.text}\n\n`;\n }\n const blob = new Blob([vtt], { type: \"text/vtt\" });\n return URL.createObjectURL(blob);\n function formatTime(t) {\n const h = String(Math.floor(t / 3600)).padStart(2, \"0\");\n const m = String(Math.floor(t % 3600 / 60)).padStart(2, \"0\");\n const s = (t % 60).toFixed(3).padStart(6, \"0\");\n return `${h}:${m}:${s}`;\n }\n}\nif (globalThis.customElements && !globalThis.customElements.get(\"dash-video\")) {\n globalThis.customElements.define(\"dash-video\", DashVideoElement);\n}\nvar dash_video_element_default = DashVideoElement;\nexport {\n dash_video_element_default as default\n};\n","\"use client\";\n\n// dist/react.ts\nimport React from \"react\";\nimport CustomMediaElement from \"./dash-video-element.js\";\n\n// ../../node_modules/ce-la-react/dist/ce-la-react.js\nvar reservedReactProps = /* @__PURE__ */ new Set([\n \"style\",\n \"children\",\n \"ref\",\n \"key\",\n \"suppressContentEditableWarning\",\n \"suppressHydrationWarning\",\n \"dangerouslySetInnerHTML\"\n]);\nvar reactPropToAttrNameMap = {\n className: \"class\",\n htmlFor: \"for\"\n};\nfunction defaultToAttributeName(propName) {\n return propName.toLowerCase();\n}\nfunction defaultToAttributeValue(propValue) {\n if (typeof propValue === \"boolean\") return propValue ? \"\" : void 0;\n if (typeof propValue === \"function\") return void 0;\n if (typeof propValue === \"object\" && propValue !== null) return void 0;\n return propValue;\n}\nfunction createComponent({\n react: React2,\n tagName,\n elementClass,\n events,\n displayName,\n defaultProps,\n toAttributeName = defaultToAttributeName,\n toAttributeValue = defaultToAttributeValue\n}) {\n const IS_REACT_19_OR_NEWER = Number.parseInt(React2.version) >= 19;\n const ReactComponent = React2.forwardRef((props, ref) => {\n var _a, _b;\n const elementRef = React2.useRef(null);\n const prevElemPropsRef = React2.useRef(/* @__PURE__ */ new Map());\n const eventProps = {};\n const attrs = {};\n const reactProps = {};\n const elementProps = {};\n for (const [k, v] of Object.entries(props)) {\n if (reservedReactProps.has(k)) {\n reactProps[k] = v;\n continue;\n }\n const attrName = toAttributeName(reactPropToAttrNameMap[k] ?? k);\n if (elementClass.prototype && k in elementClass.prototype && !(k in (((_a = globalThis.HTMLElement) == null ? void 0 : _a.prototype) ?? {})) && !((_b = elementClass.observedAttributes) == null ? void 0 : _b.some((attr) => attr === attrName))) {\n elementProps[k] = v;\n continue;\n }\n if (k.startsWith(\"on\")) {\n eventProps[k] = v;\n continue;\n }\n const attrValue = toAttributeValue(v);\n if (attrName && attrValue != null) {\n attrs[attrName] = String(attrValue);\n if (!IS_REACT_19_OR_NEWER) {\n reactProps[attrName] = attrValue;\n }\n }\n if (attrName && IS_REACT_19_OR_NEWER) {\n const attrValueFromDefault = defaultToAttributeValue(v);\n if (attrValue !== attrValueFromDefault) {\n reactProps[attrName] = attrValue;\n } else {\n reactProps[attrName] = v;\n }\n }\n }\n if (typeof window !== \"undefined\") {\n for (const propName in eventProps) {\n const callback = eventProps[propName];\n const useCapture = propName.endsWith(\"Capture\");\n const eventName = ((events == null ? void 0 : events[propName]) ?? propName.slice(2).toLowerCase()).slice(\n 0,\n useCapture ? -7 : void 0\n );\n React2.useLayoutEffect(() => {\n const eventTarget = elementRef == null ? void 0 : elementRef.current;\n if (!eventTarget || typeof callback !== \"function\") return;\n eventTarget.addEventListener(eventName, callback, useCapture);\n return () => {\n eventTarget.removeEventListener(eventName, callback, useCapture);\n };\n }, [elementRef == null ? void 0 : elementRef.current, callback]);\n }\n React2.useLayoutEffect(() => {\n if (elementRef.current === null) return;\n const newElemProps = /* @__PURE__ */ new Map();\n for (const key in elementProps) {\n setProperty(elementRef.current, key, elementProps[key]);\n prevElemPropsRef.current.delete(key);\n newElemProps.set(key, elementProps[key]);\n }\n for (const [key, _value] of prevElemPropsRef.current) {\n setProperty(elementRef.current, key, void 0);\n }\n prevElemPropsRef.current = newElemProps;\n });\n }\n if (typeof window === \"undefined\" && (elementClass == null ? void 0 : elementClass.getTemplateHTML) && (elementClass == null ? void 0 : elementClass.shadowRootOptions)) {\n const { mode, delegatesFocus } = elementClass.shadowRootOptions;\n const templateShadowRoot = React2.createElement(\"template\", {\n shadowrootmode: mode,\n shadowrootdelegatesfocus: delegatesFocus,\n dangerouslySetInnerHTML: {\n __html: elementClass.getTemplateHTML(attrs, props)\n },\n key: \"ce-la-react-ssr-template-shadow-root\"\n });\n reactProps.children = [templateShadowRoot, reactProps.children];\n }\n return React2.createElement(tagName, {\n ...defaultProps,\n ...reactProps,\n ref: React2.useCallback(\n (node) => {\n elementRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref !== null) {\n ref.current = node;\n }\n },\n [ref]\n )\n }, reactProps.children);\n });\n ReactComponent.displayName = displayName ?? elementClass.name;\n return ReactComponent;\n}\nfunction setProperty(node, name, value) {\n var _a;\n node[name] = value;\n if (value == null && name in (((_a = globalThis.HTMLElement) == null ? void 0 : _a.prototype) ?? {})) {\n node.removeAttribute(name);\n }\n}\n\n// dist/react.ts\nvar react_default = createComponent({\n react: React,\n tagName: \"dash-video\",\n elementClass: CustomMediaElement,\n toAttributeName(propName) {\n if (propName === \"muted\") return \"\";\n if (propName === \"defaultMuted\") return \"muted\";\n return defaultToAttributeName(propName);\n }\n});\nexport {\n react_default as default\n};\n/*! Bundled license information:\n\nce-la-react/dist/ce-la-react.js:\n (**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Modified version of `@lit/react` for vanilla custom elements with support for SSR.\n *)\n*/\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"react-BVzcquey.js","names":["CustomMediaElement"],"sources":["../../../node_modules/.pnpm/youtube-video-element@1.9.0/node_modules/youtube-video-element/dist/youtube-video-element.js","../../../node_modules/.pnpm/youtube-video-element@1.9.0/node_modules/youtube-video-element/dist/react.js"],"sourcesContent":["import { MediaPlayedRangesMixin } from \"media-played-ranges-mixin\";\nconst EMBED_BASE = \"https://www.youtube.com/embed\";\nconst EMBED_BASE_NOCOOKIE = \"https://www.youtube-nocookie.com/embed\";\nconst API_URL = \"https://www.youtube.com/iframe_api\";\nconst API_GLOBAL = \"YT\";\nconst API_GLOBAL_READY = \"onYouTubeIframeAPIReady\";\nconst VIDEO_MATCH_SRC = /(?:youtu\\.be\\/|youtube(?:-nocookie)?\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=|shorts\\/|live\\/))((\\w|-){11})/;\nconst PLAYLIST_MATCH_SRC = /(?:youtu\\.be\\/|youtube(?:-nocookie)?\\.com\\/.*?[?&]list=)([\\w_-]+)/;\nfunction parseStartTime(url) {\n if (!url) return;\n const tMatch = url.match(/[?&]t=([\\dms]+)/i);\n if (!tMatch) return;\n const tValue = tMatch[1].toLowerCase();\n let totalSeconds = 0;\n let hasValue = false;\n const minutesMatch = tValue.match(/(\\d+)m/);\n if (minutesMatch) {\n totalSeconds += parseInt(minutesMatch[1], 10) * 60;\n hasValue = true;\n }\n const secondsMatch = tValue.match(/(\\d+)s?$/);\n if (secondsMatch) {\n totalSeconds += parseInt(secondsMatch[1], 10);\n hasValue = true;\n }\n return hasValue ? totalSeconds : void 0;\n}\nfunction getTemplateHTML(attrs, props = {}) {\n var _a;\n const iframeAttrs = {\n src: serializeIframeUrl(attrs, props),\n frameborder: 0,\n width: \"100%\",\n height: \"100%\",\n allow: \"accelerometer; fullscreen; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n };\n if ((_a = props.config) == null ? void 0 : _a.referrerpolicy) {\n iframeAttrs.referrerpolicy = props.config.referrerpolicy;\n }\n if (props.config) {\n iframeAttrs[\"data-config\"] = JSON.stringify(props.config);\n }\n return (\n /*html*/\n `\n <style>\n :host {\n display: inline-block;\n line-height: 0;\n position: relative;\n min-width: 300px;\n min-height: 150px;\n }\n iframe {\n position: absolute;\n top: 0;\n left: 0;\n }\n </style>\n <iframe${serializeAttributes(iframeAttrs)}></iframe>\n `\n );\n}\nfunction serializeIframeUrl(attrs, props) {\n if (!attrs.src) return;\n const embedBase = attrs.src.includes(\"-nocookie\") ? EMBED_BASE_NOCOOKIE : EMBED_BASE;\n const params = {\n // ?controls=true is enabled by default in the iframe\n controls: attrs.controls === \"\" ? null : 0,\n autoplay: attrs.autoplay,\n loop: attrs.loop,\n mute: attrs.muted,\n playsinline: attrs.playsinline,\n preload: attrs.preload ?? \"metadata\",\n // https://developers.google.com/youtube/player_parameters#Parameters\n // origin: globalThis.location?.origin,\n enablejsapi: 1,\n cc_load_policy: 1,\n showinfo: 0,\n rel: 0,\n iv_load_policy: 3,\n modestbranding: 1,\n start: parseStartTime(attrs.src),\n ...props.config\n };\n if (VIDEO_MATCH_SRC.test(attrs.src)) {\n const matches2 = attrs.src.match(VIDEO_MATCH_SRC);\n const srcId = matches2 && matches2[1];\n return `${embedBase}/${srcId}?${serialize(params)}`;\n }\n const matches = attrs.src.match(PLAYLIST_MATCH_SRC);\n const playlistId = matches && matches[1];\n const extendedParams = {\n listType: \"playlist\",\n list: playlistId,\n ...params\n };\n return `${embedBase}?${serialize(extendedParams)}`;\n}\nclass YoutubeVideoElement extends MediaPlayedRangesMixin(globalThis.HTMLElement ?? class {\n}) {\n static getTemplateHTML = getTemplateHTML;\n static shadowRootOptions = { mode: \"open\" };\n static observedAttributes = [\n \"autoplay\",\n \"controls\",\n \"crossorigin\",\n \"loop\",\n \"muted\",\n \"playsinline\",\n \"poster\",\n \"preload\",\n \"src\"\n ];\n loadComplete = new PublicPromise();\n #loadRequested;\n #hasLoaded;\n #readyState = 0;\n #seeking = false;\n #seekComplete;\n isLoaded = false;\n #error = null;\n #config = null;\n #textTracksVideo = null;\n #initialVolume = 1;\n constructor() {\n super();\n this.#upgradeProperty(\"config\");\n }\n get config() {\n return this.#config;\n }\n set config(value) {\n this.#config = value;\n }\n async load() {\n if (this.#loadRequested) return;\n if (!this.shadowRoot) {\n this.attachShadow({ mode: \"open\" });\n }\n const isFirstLoad = !this.#hasLoaded;\n if (this.#hasLoaded) {\n this.loadComplete = new PublicPromise();\n this.isLoaded = false;\n }\n this.#hasLoaded = true;\n await (this.#loadRequested = Promise.resolve());\n this.#loadRequested = null;\n this.#readyState = 0;\n this.dispatchEvent(new Event(\"emptied\"));\n let oldApi = this.api;\n this.api = null;\n if (!this.src) {\n oldApi == null ? void 0 : oldApi.destroy();\n return;\n }\n this.#textTracksVideo = document.createElement(\"video\");\n this.textTracks = this.#textTracksVideo.textTracks;\n this.textTracks.addEventListener(\"change\", () => {\n var _a;\n const active = Array.from(this.textTracks).find((t) => t.mode === \"showing\");\n (_a = this.api) == null ? void 0 : _a.setOption(\"captions\", \"track\", active ? { languageCode: active.language } : {});\n });\n this.dispatchEvent(new Event(\"loadstart\"));\n let iframe = this.shadowRoot.querySelector(\"iframe\");\n let attrs = namedNodeMapToObject(this.attributes);\n if (isFirstLoad && iframe) {\n this.#config = JSON.parse(iframe.getAttribute(\"data-config\") || \"{}\");\n }\n if (!(iframe == null ? void 0 : iframe.src) || iframe.src !== serializeIframeUrl(attrs, this)) {\n this.shadowRoot.innerHTML = getTemplateHTML(attrs, this);\n iframe = this.shadowRoot.querySelector(\"iframe\");\n }\n const YT = await loadScript(API_URL, API_GLOBAL, API_GLOBAL_READY);\n this.api = new YT.Player(iframe, {\n events: {\n onReady: () => {\n var _a;\n this.#readyState = 1;\n this.dispatchEvent(new Event(\"loadedmetadata\"));\n this.dispatchEvent(new Event(\"durationchange\"));\n if (this.#initialVolume !== 1) {\n (_a = this.api) == null ? void 0 : _a.setVolume(this.#initialVolume * 100);\n }\n this.dispatchEvent(new Event(\"volumechange\"));\n this.dispatchEvent(new Event(\"loadcomplete\"));\n this.isLoaded = true;\n this.loadComplete.resolve();\n },\n onError: (error) => {\n console.error(error);\n this.#error = {\n code: error.data,\n message: `YouTube iframe player error #${error.data}; visit https://developers.google.com/youtube/iframe_api_reference#onError for the full error message.`\n };\n this.dispatchEvent(new Event(\"error\"));\n }\n }\n });\n let playFired = false;\n this.api.addEventListener(\"onStateChange\", (event) => {\n var _a;\n const state = event.data;\n if (state === YT.PlayerState.PLAYING || state === YT.PlayerState.BUFFERING) {\n if (!playFired) {\n playFired = true;\n this.dispatchEvent(new Event(\"play\"));\n }\n const captionList = this.api.getOption(\"captions\", \"tracklist\") || [];\n captionList.forEach((t) => {\n if (![...this.textTracks].some((tt) => tt.language === t.languageCode)) {\n this.#textTracksVideo.addTextTrack(\"subtitles\", t.displayName, t.languageCode);\n }\n this.textTracks = this.#textTracksVideo.textTracks;\n });\n this.dispatchEvent(new Event(\"loadstart\"));\n }\n if (state === YT.PlayerState.PLAYING) {\n if (this.seeking) {\n this.#seeking = false;\n (_a = this.#seekComplete) == null ? void 0 : _a.resolve();\n this.dispatchEvent(new Event(\"seeked\"));\n }\n this.#readyState = 3;\n this.dispatchEvent(new Event(\"playing\"));\n } else if (state === YT.PlayerState.PAUSED) {\n const diff = Math.abs(this.currentTime - lastCurrentTime);\n if (!this.seeking && diff > 0.1) {\n this.#seeking = true;\n this.dispatchEvent(new Event(\"seeking\"));\n }\n playFired = false;\n this.dispatchEvent(new Event(\"pause\"));\n }\n if (state === YT.PlayerState.ENDED) {\n playFired = false;\n this.dispatchEvent(new Event(\"pause\"));\n this.dispatchEvent(new Event(\"ended\"));\n if (this.loop) {\n this.play();\n }\n }\n });\n this.api.addEventListener(\"onPlaybackRateChange\", () => {\n this.dispatchEvent(new Event(\"ratechange\"));\n });\n this.api.addEventListener(\"onVolumeChange\", () => {\n var _a;\n const apiVolume = ((_a = this.api) == null ? void 0 : _a.getVolume()) / 100;\n this.#initialVolume = apiVolume;\n this.dispatchEvent(new Event(\"volumechange\"));\n });\n this.api.addEventListener(\"onVideoProgress\", () => {\n this.dispatchEvent(new Event(\"timeupdate\"));\n });\n await this.loadComplete;\n let lastCurrentTime = 0;\n setInterval(() => {\n var _a;\n const diff = Math.abs(this.currentTime - lastCurrentTime);\n const bufferedEnd = this.buffered.end(this.buffered.length - 1);\n if (this.seeking && bufferedEnd > 0.1) {\n this.#seeking = false;\n (_a = this.#seekComplete) == null ? void 0 : _a.resolve();\n this.dispatchEvent(new Event(\"seeked\"));\n } else if (!this.seeking && diff > 0.1) {\n this.#seeking = true;\n this.dispatchEvent(new Event(\"seeking\"));\n }\n lastCurrentTime = this.currentTime;\n }, 50);\n let lastBufferedEnd;\n const progressInterval = setInterval(() => {\n const bufferedEnd = this.buffered.end(this.buffered.length - 1);\n if (bufferedEnd >= this.duration) {\n clearInterval(progressInterval);\n this.#readyState = 4;\n }\n if (lastBufferedEnd != bufferedEnd) {\n lastBufferedEnd = bufferedEnd;\n this.dispatchEvent(new Event(\"progress\"));\n }\n }, 100);\n }\n async attributeChangedCallback(attrName, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (attrName) {\n case \"src\":\n case \"autoplay\":\n case \"controls\":\n case \"loop\":\n case \"playsinline\": {\n this.load();\n }\n }\n }\n async play() {\n var _a;\n this.#seekComplete = null;\n await this.loadComplete;\n (_a = this.api) == null ? void 0 : _a.playVideo();\n return createPlayPromise(this);\n }\n async pause() {\n var _a;\n await this.loadComplete;\n return (_a = this.api) == null ? void 0 : _a.pauseVideo();\n }\n get seeking() {\n return this.#seeking;\n }\n get readyState() {\n return this.#readyState;\n }\n get src() {\n return this.getAttribute(\"src\");\n }\n set src(val) {\n if (this.src == val) return;\n this.setAttribute(\"src\", val);\n }\n get error() {\n return this.#error;\n }\n /* onStateChange\n -1 (unstarted)\n 0 (ended)\n 1 (playing)\n 2 (paused)\n 3 (buffering)\n 5 (video cued).\n */\n get paused() {\n var _a, _b;\n if (!this.isLoaded) return !this.autoplay;\n return [-1, 0, 2, 5].includes((_b = (_a = this.api) == null ? void 0 : _a.getPlayerState) == null ? void 0 : _b.call(_a));\n }\n get duration() {\n var _a, _b;\n return ((_b = (_a = this.api) == null ? void 0 : _a.getDuration) == null ? void 0 : _b.call(_a)) ?? NaN;\n }\n get autoplay() {\n return this.hasAttribute(\"autoplay\");\n }\n set autoplay(val) {\n if (this.autoplay == val) return;\n this.toggleAttribute(\"autoplay\", Boolean(val));\n }\n get buffered() {\n var _a, _b;\n if (!this.isLoaded) return createTimeRanges();\n const progress = ((_a = this.api) == null ? void 0 : _a.getVideoLoadedFraction()) * ((_b = this.api) == null ? void 0 : _b.getDuration());\n if (progress > 0) {\n return createTimeRanges(0, progress);\n }\n return createTimeRanges();\n }\n get controls() {\n return this.hasAttribute(\"controls\");\n }\n set controls(val) {\n if (this.controls == val) return;\n this.toggleAttribute(\"controls\", Boolean(val));\n }\n get currentTime() {\n var _a, _b;\n return ((_b = (_a = this.api) == null ? void 0 : _a.getCurrentTime) == null ? void 0 : _b.call(_a)) ?? 0;\n }\n set currentTime(val) {\n if (this.currentTime == val) return;\n this.#seekComplete = new PublicPromise();\n this.loadComplete.then(() => {\n var _a, _b;\n (_a = this.api) == null ? void 0 : _a.seekTo(val, true);\n if (this.paused) {\n (_b = this.#seekComplete) == null ? void 0 : _b.then(() => {\n var _a2;\n if (!this.#seekComplete) return;\n (_a2 = this.api) == null ? void 0 : _a2.pauseVideo();\n });\n }\n });\n }\n set defaultMuted(val) {\n if (this.defaultMuted == val) return;\n this.toggleAttribute(\"muted\", Boolean(val));\n }\n get defaultMuted() {\n return this.hasAttribute(\"muted\");\n }\n get loop() {\n return this.hasAttribute(\"loop\");\n }\n set loop(val) {\n if (this.loop == val) return;\n this.toggleAttribute(\"loop\", Boolean(val));\n }\n set muted(val) {\n if (this.muted == val) return;\n this.loadComplete.then(() => {\n var _a, _b;\n val ? (_a = this.api) == null ? void 0 : _a.mute() : (_b = this.api) == null ? void 0 : _b.unMute();\n });\n }\n get muted() {\n var _a, _b;\n if (!this.isLoaded) return this.defaultMuted;\n return (_b = (_a = this.api) == null ? void 0 : _a.isMuted) == null ? void 0 : _b.call(_a);\n }\n get playbackRate() {\n var _a, _b;\n return ((_b = (_a = this.api) == null ? void 0 : _a.getPlaybackRate) == null ? void 0 : _b.call(_a)) ?? 1;\n }\n set playbackRate(val) {\n if (this.playbackRate == val) return;\n this.loadComplete.then(() => {\n var _a;\n (_a = this.api) == null ? void 0 : _a.setPlaybackRate(val);\n });\n }\n get playsInline() {\n return this.hasAttribute(\"playsinline\");\n }\n set playsInline(val) {\n if (this.playsInline == val) return;\n this.toggleAttribute(\"playsinline\", Boolean(val));\n }\n get poster() {\n return this.getAttribute(\"poster\");\n }\n set poster(val) {\n if (this.poster == val) return;\n this.setAttribute(\"poster\", `${val}`);\n }\n set volume(val) {\n if (this.volume == val) return;\n this.#initialVolume = val;\n this.loadComplete.then(() => {\n var _a;\n (_a = this.api) == null ? void 0 : _a.setVolume(val * 100);\n });\n }\n get volume() {\n var _a;\n if (!this.isLoaded) {\n return this.#initialVolume;\n }\n return ((_a = this.api) == null ? void 0 : _a.getVolume()) / 100;\n }\n // This is a pattern to update property values that are set before\n // the custom element is upgraded.\n // https://web.dev/custom-elements-best-practices/#make-properties-lazy\n #upgradeProperty(prop) {\n if (Object.prototype.hasOwnProperty.call(this, prop)) {\n const value = this[prop];\n delete this[prop];\n this[prop] = value;\n }\n }\n}\nfunction serializeAttributes(attrs) {\n let html = \"\";\n for (const key in attrs) {\n const value = attrs[key];\n if (value === \"\") html += ` ${escapeHtml(key)}`;\n else html += ` ${escapeHtml(key)}=\"${escapeHtml(`${value}`)}\"`;\n }\n return html;\n}\nfunction escapeHtml(str) {\n return str.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&apos;\").replace(/`/g, \"&#x60;\");\n}\nfunction serialize(props) {\n return String(new URLSearchParams(boolToBinary(props)));\n}\nfunction boolToBinary(props) {\n let p = {};\n for (let key in props) {\n let val = props[key];\n if (val === true || val === \"\") p[key] = 1;\n else if (val === false) p[key] = 0;\n else if (val != null) p[key] = val;\n }\n return p;\n}\nfunction namedNodeMapToObject(namedNodeMap) {\n let obj = {};\n for (let attr of namedNodeMap) {\n obj[attr.name] = attr.value;\n }\n return obj;\n}\nconst loadScriptCache = {};\nasync function loadScript(src, globalName, readyFnName) {\n if (loadScriptCache[src]) return loadScriptCache[src];\n if (globalName && self[globalName]) {\n await delay(0);\n return self[globalName];\n }\n return loadScriptCache[src] = new Promise(function(resolve, reject) {\n const script = document.createElement(\"script\");\n script.src = src;\n const ready = () => resolve(self[globalName]);\n if (readyFnName) self[readyFnName] = ready;\n script.onload = () => !readyFnName && ready();\n script.onerror = reject;\n document.head.append(script);\n });\n}\nconst delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\nfunction promisify(fn) {\n return (...args) => new Promise((resolve) => {\n fn(...args, (...res) => {\n if (res.length > 1) resolve(res);\n else resolve(res[0]);\n });\n });\n}\nfunction createPlayPromise(player) {\n return promisify((event, cb) => {\n let fn;\n player.addEventListener(\n event,\n fn = () => {\n player.removeEventListener(event, fn);\n cb();\n }\n );\n })(\"playing\");\n}\nclass PublicPromise extends Promise {\n constructor(executor = () => {\n }) {\n let res, rej;\n super((resolve, reject) => {\n executor(resolve, reject);\n res = resolve;\n rej = reject;\n });\n this.resolve = res;\n this.reject = rej;\n }\n}\nfunction createTimeRanges(start, end) {\n if (Array.isArray(start)) {\n return createTimeRangesObj(start);\n } else if (start == null || end == null || start === 0 && end === 0) {\n return createTimeRangesObj([[0, 0]]);\n }\n return createTimeRangesObj([[start, end]]);\n}\nfunction createTimeRangesObj(ranges) {\n Object.defineProperties(ranges, {\n start: {\n value: (i) => ranges[i][0]\n },\n end: {\n value: (i) => ranges[i][1]\n }\n });\n return ranges;\n}\nif (globalThis.customElements && !globalThis.customElements.get(\"youtube-video\")) {\n globalThis.customElements.define(\"youtube-video\", YoutubeVideoElement);\n}\nvar youtube_video_element_default = YoutubeVideoElement;\nexport {\n youtube_video_element_default as default\n};\n","\"use client\";\n\n// dist/react.ts\nimport React from \"react\";\nimport CustomMediaElement from \"./youtube-video-element.js\";\n\n// ../../node_modules/ce-la-react/dist/ce-la-react.js\nvar reservedReactProps = /* @__PURE__ */ new Set([\n \"style\",\n \"children\",\n \"ref\",\n \"key\",\n \"suppressContentEditableWarning\",\n \"suppressHydrationWarning\",\n \"dangerouslySetInnerHTML\"\n]);\nvar reactPropToAttrNameMap = {\n className: \"class\",\n htmlFor: \"for\"\n};\nfunction defaultToAttributeName(propName) {\n return propName.toLowerCase();\n}\nfunction defaultToAttributeValue(propValue) {\n if (typeof propValue === \"boolean\") return propValue ? \"\" : void 0;\n if (typeof propValue === \"function\") return void 0;\n if (typeof propValue === \"object\" && propValue !== null) return void 0;\n return propValue;\n}\nfunction createComponent({\n react: React2,\n tagName,\n elementClass,\n events,\n displayName,\n defaultProps,\n toAttributeName = defaultToAttributeName,\n toAttributeValue = defaultToAttributeValue\n}) {\n const IS_REACT_19_OR_NEWER = Number.parseInt(React2.version) >= 19;\n const ReactComponent = React2.forwardRef((props, ref) => {\n var _a, _b;\n const elementRef = React2.useRef(null);\n const prevElemPropsRef = React2.useRef(/* @__PURE__ */ new Map());\n const eventProps = {};\n const attrs = {};\n const reactProps = {};\n const elementProps = {};\n for (const [k, v] of Object.entries(props)) {\n if (reservedReactProps.has(k)) {\n reactProps[k] = v;\n continue;\n }\n const attrName = toAttributeName(reactPropToAttrNameMap[k] ?? k);\n if (elementClass.prototype && k in elementClass.prototype && !(k in (((_a = globalThis.HTMLElement) == null ? void 0 : _a.prototype) ?? {})) && !((_b = elementClass.observedAttributes) == null ? void 0 : _b.some((attr) => attr === attrName))) {\n elementProps[k] = v;\n continue;\n }\n if (k.startsWith(\"on\")) {\n eventProps[k] = v;\n continue;\n }\n const attrValue = toAttributeValue(v);\n if (attrName && attrValue != null) {\n attrs[attrName] = String(attrValue);\n if (!IS_REACT_19_OR_NEWER) {\n reactProps[attrName] = attrValue;\n }\n }\n if (attrName && IS_REACT_19_OR_NEWER) {\n const attrValueFromDefault = defaultToAttributeValue(v);\n if (attrValue !== attrValueFromDefault) {\n reactProps[attrName] = attrValue;\n } else {\n reactProps[attrName] = v;\n }\n }\n }\n if (typeof window !== \"undefined\") {\n for (const propName in eventProps) {\n const callback = eventProps[propName];\n const useCapture = propName.endsWith(\"Capture\");\n const eventName = ((events == null ? void 0 : events[propName]) ?? propName.slice(2).toLowerCase()).slice(\n 0,\n useCapture ? -7 : void 0\n );\n React2.useLayoutEffect(() => {\n const eventTarget = elementRef == null ? void 0 : elementRef.current;\n if (!eventTarget || typeof callback !== \"function\") return;\n eventTarget.addEventListener(eventName, callback, useCapture);\n return () => {\n eventTarget.removeEventListener(eventName, callback, useCapture);\n };\n }, [elementRef == null ? void 0 : elementRef.current, callback]);\n }\n React2.useLayoutEffect(() => {\n if (elementRef.current === null) return;\n const newElemProps = /* @__PURE__ */ new Map();\n for (const key in elementProps) {\n setProperty(elementRef.current, key, elementProps[key]);\n prevElemPropsRef.current.delete(key);\n newElemProps.set(key, elementProps[key]);\n }\n for (const [key, _value] of prevElemPropsRef.current) {\n setProperty(elementRef.current, key, void 0);\n }\n prevElemPropsRef.current = newElemProps;\n });\n }\n if (typeof window === \"undefined\" && (elementClass == null ? void 0 : elementClass.getTemplateHTML) && (elementClass == null ? void 0 : elementClass.shadowRootOptions)) {\n const { mode, delegatesFocus } = elementClass.shadowRootOptions;\n const templateShadowRoot = React2.createElement(\"template\", {\n shadowrootmode: mode,\n shadowrootdelegatesfocus: delegatesFocus,\n dangerouslySetInnerHTML: {\n __html: elementClass.getTemplateHTML(attrs, props)\n },\n key: \"ce-la-react-ssr-template-shadow-root\"\n });\n reactProps.children = [templateShadowRoot, reactProps.children];\n }\n return React2.createElement(tagName, {\n ...defaultProps,\n ...reactProps,\n ref: React2.useCallback(\n (node) => {\n elementRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref !== null) {\n ref.current = node;\n }\n },\n [ref]\n )\n }, reactProps.children);\n });\n ReactComponent.displayName = displayName ?? elementClass.name;\n return ReactComponent;\n}\nfunction setProperty(node, name, value) {\n var _a;\n node[name] = value;\n if (value == null && name in (((_a = globalThis.HTMLElement) == null ? void 0 : _a.prototype) ?? {})) {\n node.removeAttribute(name);\n }\n}\n\n// dist/react.ts\nvar react_default = createComponent({\n react: React,\n tagName: \"youtube-video\",\n elementClass: CustomMediaElement,\n toAttributeName(propName) {\n if (propName === \"muted\") return \"\";\n if (propName === \"defaultMuted\") return \"muted\";\n return defaultToAttributeName(propName);\n }\n});\nexport {\n react_default as default\n};\n/*! Bundled license information:\n\nce-la-react/dist/ce-la-react.js:\n (**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Modified version of `@lit/react` for vanilla custom elements with support for SSR.\n *)\n*/\n"],"x_google_ignoreList":[0,1],"mappings":"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"}