@123toto/ai-app-assistant-client 0.1.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.
@@ -0,0 +1,341 @@
1
+ import { capturePage } from "./capture.js";
2
+ import { createElementPickerSession } from "./picker.js";
3
+ /**
4
+ * Framework-neutral browser controller for capture, selection and conversation.
5
+ * Angular, React, Vue and Web Components can all bind to the same snapshots.
6
+ */
7
+ export class AiDocsAssistantController {
8
+ client;
9
+ config;
10
+ #state = { status: "idle" };
11
+ #messages = [];
12
+ #selectedElement;
13
+ #selecting = false;
14
+ #maxConversationTurns;
15
+ #picker;
16
+ #requestController;
17
+ #lastQuestion;
18
+ #phaseTimers = [];
19
+ #pageKey;
20
+ #listeners = new Set();
21
+ constructor(config, client) {
22
+ this.client = client;
23
+ this.config = Object.freeze({ ...config });
24
+ this.#maxConversationTurns = clampInteger(config.maxConversationTurns ?? 3, 1, 10);
25
+ this.#pageKey = this.currentPageKey();
26
+ }
27
+ get snapshot() {
28
+ const conversationTurns = this.#messages.filter((message) => message.role === "assistant").length;
29
+ const selectedElementLabel = describeElement(this.#selectedElement);
30
+ return {
31
+ state: this.#state,
32
+ messages: [...this.#messages],
33
+ selecting: this.#selecting,
34
+ ...(selectedElementLabel ? { selectedElementLabel } : {}),
35
+ loading: this.#state.status === "loading",
36
+ maxConversationTurns: this.#maxConversationTurns,
37
+ conversationTurns,
38
+ conversationLimitReached: conversationTurns >= this.#maxConversationTurns
39
+ };
40
+ }
41
+ /** Subscribes to complete immutable snapshots and immediately emits the current one. */
42
+ subscribe(listener) {
43
+ this.#listeners.add(listener);
44
+ listener(this.snapshot);
45
+ return () => this.#listeners.delete(listener);
46
+ }
47
+ /** Captures the current page and sends one question to the configured backend. */
48
+ async ask(options = {}) {
49
+ this.syncPage();
50
+ if (this.snapshot.conversationLimitReached) {
51
+ throw new Error("Conversation limit reached. Start a new conversation.");
52
+ }
53
+ const question = options.question?.trim()
54
+ || this.config.defaultQuestion
55
+ || "Présente cette page et explique ses principales actions.";
56
+ const selectedElement = options.selectedElement ?? this.#selectedElement;
57
+ const conversation = conversationHistory(this.#messages, this.#maxConversationTurns);
58
+ this.#lastQuestion = question;
59
+ this.stop();
60
+ const controller = new AbortController();
61
+ this.#requestController = controller;
62
+ this.#state = { status: "loading", phase: "preparing", partialText: "" };
63
+ const selectedElementLabel = describeElement(selectedElement);
64
+ this.#messages = [...this.#messages, {
65
+ id: crypto.randomUUID(),
66
+ role: "user",
67
+ text: question,
68
+ ...(selectedElementLabel ? { selectedElementLabel } : {})
69
+ }];
70
+ this.notify();
71
+ try {
72
+ const captured = this.capture(selectedElement);
73
+ const input = {
74
+ html: captured.html,
75
+ htmlTruncated: captured.htmlTruncated,
76
+ ...(captured.selectedElementHtml ? { selectedElementHtml: captured.selectedElementHtml } : {}),
77
+ question,
78
+ ...(conversation.length ? { conversation } : {})
79
+ };
80
+ const response = this.config.streaming === false
81
+ ? await this.client.ask(input, { signal: controller.signal })
82
+ : await this.client.stream(input, {
83
+ signal: controller.signal,
84
+ onEvent: (event) => this.applyStreamEvent(event)
85
+ });
86
+ this.#state = { status: "success", response };
87
+ this.#messages = [...this.#messages, {
88
+ id: crypto.randomUUID(), role: "assistant", response
89
+ }];
90
+ this.clearSelectedElement();
91
+ this.notify();
92
+ return response;
93
+ }
94
+ catch (error) {
95
+ const normalized = normalizeAiDocsError(error);
96
+ if (normalized.name === "AbortError" && this.#messages.at(-1)?.role === "user") {
97
+ this.#messages = this.#messages.slice(0, -1);
98
+ }
99
+ this.#state = normalized.name === "AbortError"
100
+ ? { status: "idle" }
101
+ : { status: "error", error: normalized, canRetry: true };
102
+ this.notify();
103
+ throw normalized;
104
+ }
105
+ finally {
106
+ if (this.#requestController === controller)
107
+ this.#requestController = undefined;
108
+ }
109
+ }
110
+ /** Starts a cancellable DOM picker without sending a question. */
111
+ async selectElement() {
112
+ this.cancelElementSelection();
113
+ this.#selecting = true;
114
+ this.notify();
115
+ const picker = createElementPickerSession({
116
+ excludeSelectors: ["[data-ai-docs-ui]", ...(this.config.redactSelectors ?? [])]
117
+ });
118
+ this.#picker = picker;
119
+ try {
120
+ const element = await picker.result;
121
+ this.#selectedElement = element;
122
+ this.#messages = [...this.#messages, {
123
+ id: crypto.randomUUID(),
124
+ role: "selection",
125
+ label: describeElement(element) ?? "Selected element"
126
+ }];
127
+ this.notify();
128
+ return element;
129
+ }
130
+ finally {
131
+ if (this.#picker === picker)
132
+ this.#picker = undefined;
133
+ this.#selecting = false;
134
+ this.notify();
135
+ }
136
+ }
137
+ /** Backward-compatible shortcut; prefer selection followed by a custom prompt. */
138
+ async selectAndAsk(question, options) {
139
+ const picker = createElementPickerSession({
140
+ ...(options?.signal ? { signal: options.signal } : {}),
141
+ excludeSelectors: ["[data-ai-docs-ui]", ...(this.config.redactSelectors ?? [])]
142
+ });
143
+ return this.ask({ question, selectedElement: await picker.result });
144
+ }
145
+ cancelElementSelection() {
146
+ this.#picker?.cancel();
147
+ this.#picker = undefined;
148
+ this.#selecting = false;
149
+ this.notify();
150
+ }
151
+ /** Forgets the selected target but keeps the current conversation. */
152
+ clearSelectedElement() {
153
+ this.#selectedElement = undefined;
154
+ if (this.#messages.at(-1)?.role === "selection") {
155
+ this.#messages = this.#messages.slice(0, -1);
156
+ }
157
+ this.notify();
158
+ }
159
+ /** Aborts only the active request; messages remain available for retry. */
160
+ stop() {
161
+ this.clearPhaseTimers();
162
+ this.#requestController?.abort(new DOMException("Request stopped.", "AbortError"));
163
+ this.#requestController = undefined;
164
+ }
165
+ /** Replays the last question after automatic transport retries are exhausted. */
166
+ retry() {
167
+ if (!this.#lastQuestion)
168
+ return Promise.reject(new Error("No request to retry."));
169
+ if (this.#messages.at(-1)?.role === "user")
170
+ this.#messages = this.#messages.slice(0, -1);
171
+ return this.ask({ question: this.#lastQuestion });
172
+ }
173
+ /** Clears every conversation-scoped value, including DOM selection. */
174
+ newConversation() {
175
+ this.clearPhaseTimers();
176
+ this.stop();
177
+ this.cancelElementSelection();
178
+ this.#messages = [];
179
+ this.#selectedElement = undefined;
180
+ this.#lastQuestion = undefined;
181
+ this.#state = { status: "idle" };
182
+ this.notify();
183
+ }
184
+ /** Starts a fresh conversation when the host page key changes. */
185
+ syncPage(key = this.currentPageKey()) {
186
+ if (key === this.#pageKey)
187
+ return false;
188
+ this.#pageKey = key;
189
+ this.newConversation();
190
+ return true;
191
+ }
192
+ reset() { this.newConversation(); }
193
+ /** Updates the server-defined limit and prevents keeping an invalid session. */
194
+ setMaxConversationTurns(value) {
195
+ const previousLimit = this.#maxConversationTurns;
196
+ const nextLimit = clampInteger(value, 1, 10);
197
+ const currentTurns = this.snapshot.conversationTurns;
198
+ if (nextLimit === previousLimit)
199
+ return;
200
+ this.#maxConversationTurns = nextLimit;
201
+ if (nextLimit < previousLimit && currentTurns >= nextLimit)
202
+ this.newConversation();
203
+ else
204
+ this.notify();
205
+ }
206
+ /** Centralizes safe DOM capture for every framework connector. */
207
+ capture(selectedElement) {
208
+ const root = this.config.rootSelector
209
+ ? document.querySelector(this.config.rootSelector) ?? document.body
210
+ : document;
211
+ return capturePage({
212
+ root,
213
+ ...(selectedElement ? { selectedElement } : {}),
214
+ redactSelectors: ["[data-ai-docs-ui]", ...(this.config.redactSelectors ?? [])],
215
+ ...(this.config.maxHtmlChars ? { maxHtmlChars: this.config.maxHtmlChars } : {}),
216
+ ...(this.config.includeFormValues !== undefined
217
+ ? { includeFormValues: this.config.includeFormValues }
218
+ : {})
219
+ });
220
+ }
221
+ /** Translates transport events into stable UI phases and partial text. */
222
+ applyStreamEvent(event) {
223
+ if (event.type === "status") {
224
+ this.clearPhaseTimers();
225
+ if (event.phase === "preparing") {
226
+ this.#state = { status: "loading", phase: "preparing", partialText: "" };
227
+ }
228
+ else {
229
+ this.#state = { status: "loading", phase: "thinking", partialText: "" };
230
+ this.#phaseTimers.push(setTimeout(() => {
231
+ if (this.#state.status === "loading" && this.#state.phase === "thinking") {
232
+ this.#state = { ...this.#state, phase: "writing" };
233
+ this.notify();
234
+ }
235
+ }, 3_000));
236
+ }
237
+ }
238
+ else if (event.type === "partial") {
239
+ const retry = this.#state.status === "loading" ? this.#state.retry : undefined;
240
+ this.#state = {
241
+ status: "loading", phase: "writing", partialText: event.text,
242
+ ...(retry ? { retry } : {})
243
+ };
244
+ }
245
+ else if (event.type === "retry") {
246
+ this.#state = {
247
+ status: "loading", phase: "thinking", partialText: "", retry: event
248
+ };
249
+ }
250
+ else if (event.type === "complete") {
251
+ this.clearPhaseTimers();
252
+ this.#state = { status: "loading", phase: "finalizing", partialText: "" };
253
+ }
254
+ this.notify();
255
+ }
256
+ clearPhaseTimers() {
257
+ this.#phaseTimers.forEach((timer) => clearTimeout(timer));
258
+ this.#phaseTimers = [];
259
+ }
260
+ currentPageKey() {
261
+ return this.config.pageKey?.() ?? `${location.pathname}${location.search}`;
262
+ }
263
+ notify() {
264
+ const snapshot = this.snapshot;
265
+ this.#listeners.forEach((listener) => listener(snapshot));
266
+ }
267
+ }
268
+ export function describeAiDocsElement(element) {
269
+ return describeElement(element);
270
+ }
271
+ export function normalizeAiDocsError(error) {
272
+ if (error instanceof Error && error.name === "AbortError")
273
+ return error;
274
+ const payload = error && typeof error === "object" && "error" in error
275
+ ? error.error
276
+ : undefined;
277
+ const responseBody = error && typeof error === "object" && "responseBody" in error
278
+ ? error.responseBody
279
+ : undefined;
280
+ const message = extractErrorMessage(payload)
281
+ ?? extractErrorMessage(responseBody)
282
+ ?? (error instanceof Error && error.message !== "[object Object]" ? error.message : undefined);
283
+ return new Error(message ?? "The assistant request failed. Please try again.");
284
+ }
285
+ /** Reads common HTTP envelopes without dumping technical JSON into the chat. */
286
+ function extractErrorMessage(value, depth = 0) {
287
+ if (depth > 4 || value === undefined || value === null)
288
+ return undefined;
289
+ if (typeof value === "string") {
290
+ const trimmed = value.trim();
291
+ if (!trimmed || trimmed === "[object Object]")
292
+ return undefined;
293
+ if ((trimmed.startsWith("{") || trimmed.startsWith("["))) {
294
+ try {
295
+ return extractErrorMessage(JSON.parse(trimmed), depth + 1);
296
+ }
297
+ catch {
298
+ return trimmed.slice(0, 500);
299
+ }
300
+ }
301
+ return trimmed.slice(0, 500);
302
+ }
303
+ if (typeof value !== "object")
304
+ return undefined;
305
+ const record = value;
306
+ for (const field of ["message", "error", "detail", "details"]) {
307
+ const message = extractErrorMessage(record[field], depth + 1);
308
+ if (message)
309
+ return message;
310
+ }
311
+ return undefined;
312
+ }
313
+ function describeElement(element) {
314
+ if (!element)
315
+ return undefined;
316
+ const text = element.textContent?.replace(/\s+/g, " ").trim();
317
+ const label = element.getAttribute("aria-label") || element.getAttribute("title") || text;
318
+ return label ? label.slice(0, 80) : element.tagName.toLowerCase();
319
+ }
320
+ function conversationHistory(messages, maxTurns) {
321
+ return messages.filter((message) => message.role !== "selection").slice(-(maxTurns * 2)).map((message) => ({
322
+ role: message.role,
323
+ content: message.role === "user"
324
+ ? message.text.slice(0, 8_000)
325
+ : renderResponseForHistory(message.response).slice(0, 8_000)
326
+ }));
327
+ }
328
+ function renderResponseForHistory(response) {
329
+ return [
330
+ response.answer.title,
331
+ response.answer.summary,
332
+ ...response.answer.sections.flatMap((section) => [section.heading, section.content]),
333
+ ...(response.answer.steps ?? []).flatMap((step) => [step.label, step.description]),
334
+ ...(response.answer.warnings ?? []),
335
+ ...response.limitations
336
+ ].filter((part) => Boolean(part)).join("\n");
337
+ }
338
+ function clampInteger(value, minimum, maximum) {
339
+ return Math.min(maximum, Math.max(minimum, Math.round(value)));
340
+ }
341
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../src/controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { capturePage, type CaptureOptions, type CaptureResult } from "./capture.js";
2
+ export { AiDocsHttpError, createAiDocsClient, type AiDocsClient, type AiDocsClientOptions, type AiDocsStreamTransport, type AiDocsTransport, type AskInput } from "./client.js";
3
+ export { createElementPickerSession, pickElement, type ElementPickerOptions, type ElementPickerSession } from "./picker.js";
4
+ export { AiDocsAssistantController, describeAiDocsElement, normalizeAiDocsError, type AiDocsControllerConfig, type AiDocsControllerListener, type AiDocsControllerMessage, type AiDocsControllerSnapshot, type AiDocsControllerState } from "./controller.js";
5
+ export { AiDocsSettingsController, createAiDocsSettingsClient, type AiDocsSettingsClient, type AiDocsSettingsClientOptions, type AiDocsSettingsListener, type AiDocsSettingsSnapshot } from "./settings.js";
6
+ export type { AiDocsAccessView, AiDocsAccessRule, AiDocsConfigurationInput, AiDocsConfigurationOptions, AiDocsConnectionResult, AiDocsConnectionTestInput, AiDocsCredentials, AiDocsManagedConfigurationView, AiDocsModelInfoContract, AiDocsProvider, AiDocsProviderInfoContract } from "@123toto/ai-app-assistant-contracts";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,QAAQ,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC5B,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,iBAAiB,EACjB,8BAA8B,EAC9B,uBAAuB,EACvB,cAAc,EACd,0BAA0B,EAC3B,MAAM,qCAAqC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { capturePage } from "./capture.js";
2
+ export { AiDocsHttpError, createAiDocsClient } from "./client.js";
3
+ export { createElementPickerSession, pickElement } from "./picker.js";
4
+ export { AiDocsAssistantController, describeAiDocsElement, normalizeAiDocsError } from "./controller.js";
5
+ export { AiDocsSettingsController, createAiDocsSettingsClient } from "./settings.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAGZ,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,kBAAkB,EAMnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,WAAW,EAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EAMrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAK3B,MAAM,eAAe,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface ElementPickerOptions {
2
+ signal?: AbortSignal;
3
+ overlayClassName?: string;
4
+ /** Selectors ignored by the picker, such as the assistant itself. */
5
+ excludeSelectors?: string[];
6
+ }
7
+ export interface ElementPickerSession {
8
+ result: Promise<Element>;
9
+ cancel(reason?: unknown): void;
10
+ }
11
+ /** Starts a cancellable picker session whose listeners are always cleaned up. */
12
+ export declare function createElementPickerSession(options?: ElementPickerOptions): ElementPickerSession;
13
+ export declare function pickElement(options?: ElementPickerOptions): Promise<Element>;
14
+ //# sourceMappingURL=picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker.d.ts","sourceRoot":"","sources":["../src/picker.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAChC;AAED,iFAAiF;AACjF,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,oBAAyB,GACjC,oBAAoB,CAmItB;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,CAEhF"}
package/dist/picker.js ADDED
@@ -0,0 +1,140 @@
1
+ /** Starts a cancellable picker session whose listeners are always cleaned up. */
2
+ export function createElementPickerSession(options = {}) {
3
+ const controller = new AbortController();
4
+ const relayAbort = () => controller.abort(options.signal?.reason);
5
+ if (options.signal?.aborted)
6
+ relayAbort();
7
+ else
8
+ options.signal?.addEventListener("abort", relayAbort, { once: true });
9
+ const result = new Promise((resolve, reject) => {
10
+ const overlay = document.createElement("div");
11
+ overlay.className = options.overlayClassName ?? "ai-docs-element-highlight";
12
+ Object.assign(overlay.style, {
13
+ position: "fixed",
14
+ pointerEvents: "none",
15
+ zIndex: "2147483647",
16
+ border: "2px solid #20a779",
17
+ borderRadius: "8px",
18
+ background: "rgba(32, 167, 121, 0.13)",
19
+ boxShadow: "0 0 0 4px rgba(32, 167, 121, 0.12), 0 0 28px rgba(32, 167, 121, 0.38)",
20
+ transition: "left 90ms ease, top 90ms ease, width 90ms ease, height 90ms ease",
21
+ display: "none"
22
+ });
23
+ const glow = typeof overlay.animate === "function" ? overlay.animate([
24
+ { boxShadow: "0 0 0 3px rgba(32,167,121,.12), 0 0 16px rgba(32,167,121,.28)" },
25
+ { boxShadow: "0 0 0 7px rgba(32,167,121,.05), 0 0 34px rgba(32,167,121,.5)" },
26
+ { boxShadow: "0 0 0 3px rgba(32,167,121,.12), 0 0 16px rgba(32,167,121,.28)" }
27
+ ], { duration: 1_700, iterations: Infinity, easing: "ease-in-out" }) : undefined;
28
+ document.body.append(overlay);
29
+ let hovered;
30
+ let animationFrame;
31
+ let pointer;
32
+ let settled = false;
33
+ const cleanup = () => {
34
+ document.removeEventListener("pointermove", onPointerMove, true);
35
+ document.removeEventListener("click", onClick, true);
36
+ document.removeEventListener("keydown", onKeyDown, true);
37
+ controller.signal.removeEventListener("abort", onAbort);
38
+ options.signal?.removeEventListener("abort", relayAbort);
39
+ if (animationFrame !== undefined)
40
+ cancelAnimationFrame(animationFrame);
41
+ glow?.cancel();
42
+ overlay.remove();
43
+ };
44
+ const finish = (element) => {
45
+ if (settled)
46
+ return;
47
+ settled = true;
48
+ if (typeof overlay.animate !== "function") {
49
+ cleanup();
50
+ resolve(element);
51
+ return;
52
+ }
53
+ const confirmation = overlay.animate([
54
+ { opacity: 1, transform: "scale(1)" },
55
+ { opacity: 1, transform: "scale(1.025)", background: "rgba(32,167,121,.3)" },
56
+ { opacity: 0, transform: "scale(.96)" }
57
+ ], { duration: 360, easing: "cubic-bezier(.2,.9,.3,1)" });
58
+ void confirmation.finished.finally(() => {
59
+ cleanup();
60
+ resolve(element);
61
+ });
62
+ };
63
+ const fail = (reason) => {
64
+ if (settled)
65
+ return;
66
+ settled = true;
67
+ cleanup();
68
+ reject(reason);
69
+ };
70
+ const onPointerMove = (event) => {
71
+ if (settled)
72
+ return;
73
+ pointer = { x: event.clientX, y: event.clientY };
74
+ if (animationFrame !== undefined)
75
+ return;
76
+ animationFrame = requestAnimationFrame(() => {
77
+ animationFrame = undefined;
78
+ if (!pointer)
79
+ return;
80
+ const target = document.elementFromPoint(pointer.x, pointer.y);
81
+ if (!target || target === overlay || isExcluded(target, options.excludeSelectors)) {
82
+ hovered = undefined;
83
+ overlay.style.display = "none";
84
+ return;
85
+ }
86
+ hovered = target;
87
+ const rect = target.getBoundingClientRect();
88
+ Object.assign(overlay.style, {
89
+ display: "block",
90
+ left: `${rect.left}px`,
91
+ top: `${rect.top}px`,
92
+ width: `${rect.width}px`,
93
+ height: `${rect.height}px`
94
+ });
95
+ });
96
+ };
97
+ const onClick = (event) => {
98
+ if (settled)
99
+ return;
100
+ const clicked = event.target;
101
+ if (clicked instanceof Element && isExcluded(clicked, options.excludeSelectors))
102
+ return;
103
+ if (!hovered)
104
+ return;
105
+ event.preventDefault();
106
+ event.stopImmediatePropagation();
107
+ finish(hovered);
108
+ };
109
+ const onKeyDown = (event) => {
110
+ if (event.key !== "Escape")
111
+ return;
112
+ event.preventDefault();
113
+ fail(new DOMException("Element selection cancelled.", "AbortError"));
114
+ };
115
+ const onAbort = () => {
116
+ fail(controller.signal.reason ?? new DOMException("Aborted", "AbortError"));
117
+ };
118
+ if (controller.signal.aborted) {
119
+ onAbort();
120
+ return;
121
+ }
122
+ document.addEventListener("pointermove", onPointerMove, true);
123
+ document.addEventListener("click", onClick, true);
124
+ document.addEventListener("keydown", onKeyDown, true);
125
+ controller.signal.addEventListener("abort", onAbort, { once: true });
126
+ });
127
+ return {
128
+ result,
129
+ cancel: (reason = new DOMException("Element selection cancelled.", "AbortError")) => {
130
+ controller.abort(reason);
131
+ }
132
+ };
133
+ }
134
+ export function pickElement(options = {}) {
135
+ return createElementPickerSession(options).result;
136
+ }
137
+ function isExcluded(element, selectors) {
138
+ return (selectors ?? []).some((selector) => element.matches(selector) || element.closest(selector) !== null);
139
+ }
140
+ //# sourceMappingURL=picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker.js","sourceRoot":"","sources":["../src/picker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { type AiDocsSettingsClient, type AiDocsSettingsClientOptions } from "./settings.js";
2
+ export interface AiDocsSettingsElementConfig {
3
+ endpoint: string;
4
+ /** Lets framework connectors reuse their authenticated HTTP transport. */
5
+ client?: AiDocsSettingsClient;
6
+ headers?: AiDocsSettingsClientOptions["headers"];
7
+ title?: string;
8
+ confirmRevoke?: () => boolean | Promise<boolean>;
9
+ theme?: Partial<AiDocsSettingsTheme>;
10
+ }
11
+ export interface AiDocsSettingsTheme {
12
+ accent: string;
13
+ surface: string;
14
+ surfaceMuted: string;
15
+ text: string;
16
+ textMuted: string;
17
+ border: string;
18
+ danger: string;
19
+ }
20
+ declare const HTMLElementBase: typeof HTMLElement;
21
+ /** Optional framework-independent settings screen for the managed server API. */
22
+ export declare class AiDocsSettingsElement extends HTMLElementBase {
23
+ #private;
24
+ static readonly observedAttributes: string[];
25
+ connectedCallback(): void;
26
+ disconnectedCallback(): void;
27
+ attributeChangedCallback(): void;
28
+ /** Supplies dynamic authorization headers without coupling to a framework. */
29
+ configure(config: AiDocsSettingsElementConfig): void;
30
+ show(): void;
31
+ close(): void;
32
+ /** Rebuilds transport only when needed, then reloads the safe admin snapshot. */
33
+ private initialize;
34
+ private render;
35
+ private renderForm;
36
+ private get resolvedTitle();
37
+ private readonly onClick;
38
+ private readonly onSubmit;
39
+ private readonly onChange;
40
+ private form;
41
+ /** Keeps unsaved values across controller status renders. */
42
+ private captureDraft;
43
+ private connectionInput;
44
+ private loadModels;
45
+ private testConnection;
46
+ private save;
47
+ private revoke;
48
+ private applyTheme;
49
+ }
50
+ declare global {
51
+ interface HTMLElementTagNameMap {
52
+ "ai-docs-settings": AiDocsSettingsElement;
53
+ }
54
+ }
55
+ export declare function defineAiDocsSettingsElement(tagName?: string): typeof AiDocsSettingsElement;
56
+ export {};
57
+ //# sourceMappingURL=settings-web-component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-web-component.d.ts","sourceRoot":"","sources":["../src/settings-web-component.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAEjC,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,OAAO,CAAC,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAgBD,QAAA,MAAM,eAAe,EAAE,OAAO,WAEf,CAAC;AAEhB,iFAAiF;AACjF,qBAAa,qBAAsB,SAAQ,eAAe;;IACxD,MAAM,CAAC,QAAQ,CAAC,kBAAkB,WAAiC;IAY5D,iBAAiB,IAAI,IAAI;IASzB,oBAAoB,IAAI,IAAI;IAO5B,wBAAwB,IAAI,IAAI;IAIvC,8EAA8E;IACvE,SAAS,CAAC,MAAM,EAAE,2BAA2B,GAAG,IAAI;IAMpD,IAAI,IAAI,IAAI;IAOZ,KAAK,IAAI,IAAI;IAEpB,iFAAiF;YACnE,UAAU;IAkCxB,OAAO,CAAC,MAAM;IA6Bd,OAAO,CAAC,UAAU;IAyClB,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,CAAC,QAAQ,CAAC,OAAO,CAMtB;IAEF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGvB;IAEF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAMvB;IAEF,OAAO,CAAC,IAAI;IAEZ,6DAA6D;IAC7D,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,eAAe;YAUT,UAAU;YAOV,cAAc;YAId,IAAI;YAiCJ,MAAM;IAYpB,OAAO,CAAC,UAAU;CAkBnB;AA8DD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAAG,kBAAkB,EAAE,qBAAqB,CAAC;KAAE;CAC/E;AAED,wBAAgB,2BAA2B,CAAC,OAAO,SAAqB,GAAG,OAAO,qBAAqB,CAGtG"}