@noodleseed/assistant 1.26.1 → 1.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -2
- package/dist/{app-view-element-CiFVNIke.d.cts → app-view-element-BjRkwNN1.d.cts} +1 -1
- package/dist/{app-view-element-C_ATXseu.d.ts → app-view-element-mXHvcAXc.d.ts} +1 -1
- package/dist/app-view.d.cts +3 -3
- package/dist/app-view.d.ts +3 -3
- package/dist/{appearance-C24W6BRj.d.cts → appearance-BpVu3lpk.d.cts} +1 -0
- package/dist/{appearance-C24W6BRj.d.ts → appearance-BpVu3lpk.d.ts} +1 -0
- package/dist/{chunk-OZVDL77T.js → chunk-2A3ZEYZV.js} +51 -191
- package/dist/chunk-2A3ZEYZV.js.map +1 -0
- package/dist/{chunk-FNXAVRL5.js → chunk-WJV4MJUR.js} +178 -4
- package/dist/chunk-WJV4MJUR.js.map +1 -0
- package/dist/{client-BheCOERq.d.ts → client-CPFw8tfo.d.ts} +1 -1
- package/dist/{client-BiMRVxjs.d.cts → client-_xivfs4q.d.cts} +1 -1
- package/dist/client.cjs +176 -3
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +2 -2
- package/dist/client.d.ts +2 -2
- package/dist/client.js +1 -1
- package/dist/embed.global.js +41 -49
- package/dist/index.cjs +224 -189
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -2
- package/dist/react/client.cjs +176 -3
- package/dist/react/client.cjs.map +1 -1
- package/dist/react/client.d.cts +2 -2
- package/dist/react/client.d.ts +2 -2
- package/dist/react/client.js +1 -1
- package/dist/react.cjs +224 -189
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +3 -3
- package/dist/react.d.ts +3 -3
- package/dist/react.js +2 -2
- package/dist/server.d.cts +1 -1
- package/dist/server.d.ts +1 -1
- package/package.json +1 -1
- package/dist/chunk-FNXAVRL5.js.map +0 -1
- package/dist/chunk-OZVDL77T.js.map +0 -1
package/dist/react/client.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { b as AssistantPageContext, c as AssistantContext, C as CreateAssistantClientOptions, d as AssistantChatState, A as AssistantClient } from '../client-
|
|
2
|
-
import '../appearance-
|
|
1
|
+
import { b as AssistantPageContext, c as AssistantContext, C as CreateAssistantClientOptions, d as AssistantChatState, A as AssistantClient } from '../client-_xivfs4q.cjs';
|
|
2
|
+
import '../appearance-BpVu3lpk.cjs';
|
|
3
3
|
import 'ai';
|
|
4
4
|
|
|
5
5
|
type UseNoodleAssistantOptions<TPageContext extends AssistantPageContext = AssistantContext> = CreateAssistantClientOptions<TPageContext> & {
|
package/dist/react/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { b as AssistantPageContext, c as AssistantContext, C as CreateAssistantClientOptions, d as AssistantChatState, A as AssistantClient } from '../client-
|
|
2
|
-
import '../appearance-
|
|
1
|
+
import { b as AssistantPageContext, c as AssistantContext, C as CreateAssistantClientOptions, d as AssistantChatState, A as AssistantClient } from '../client-CPFw8tfo.js';
|
|
2
|
+
import '../appearance-BpVu3lpk.js';
|
|
3
3
|
import 'ai';
|
|
4
4
|
|
|
5
5
|
type UseNoodleAssistantOptions<TPageContext extends AssistantPageContext = AssistantContext> = CreateAssistantClientOptions<TPageContext> & {
|
package/dist/react/client.js
CHANGED
package/dist/react.cjs
CHANGED
|
@@ -22430,7 +22430,8 @@ var DEFAULT_APPEARANCE = {
|
|
|
22430
22430
|
showHeader: true,
|
|
22431
22431
|
showAvatars: true,
|
|
22432
22432
|
showTimestamps: false,
|
|
22433
|
-
showPoweredBy: true
|
|
22433
|
+
showPoweredBy: true,
|
|
22434
|
+
showConfirmationDetails: true
|
|
22434
22435
|
},
|
|
22435
22436
|
labels: {
|
|
22436
22437
|
welcomeHeading: "",
|
|
@@ -27360,6 +27361,178 @@ function isRecord(value) {
|
|
|
27360
27361
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
27361
27362
|
}
|
|
27362
27363
|
|
|
27364
|
+
// src/assistant-configuration-schema.ts
|
|
27365
|
+
var hexColorSchema = external_exports.string().regex(/^#[0-9A-Fa-f]{6}$/);
|
|
27366
|
+
var resolvedBorderColorSchema = external_exports.union([
|
|
27367
|
+
hexColorSchema,
|
|
27368
|
+
external_exports.string().max(64).refine(isBoundedRgbaColor, "must be a six-digit hex or bounded rgba color")
|
|
27369
|
+
]);
|
|
27370
|
+
var browserAssetUrlSchema = external_exports.string().trim().url().refine(isSecureBrowserAssetUrl, "must use https (http is allowed only for loopback testing)");
|
|
27371
|
+
var httpsUrlSchema = external_exports.string().trim().url().refine(isHttpsUrl, "must use https");
|
|
27372
|
+
var brandAssetSchema = external_exports.object({
|
|
27373
|
+
uri: browserAssetUrlSchema,
|
|
27374
|
+
darkUri: browserAssetUrlSchema.optional(),
|
|
27375
|
+
alt: external_exports.string().trim().min(1).max(240)
|
|
27376
|
+
}).strict();
|
|
27377
|
+
var brandThemeSchema = external_exports.object({
|
|
27378
|
+
surface: hexColorSchema.optional(),
|
|
27379
|
+
surfaceRaised: hexColorSchema.optional(),
|
|
27380
|
+
surfaceMuted: hexColorSchema.optional(),
|
|
27381
|
+
text: hexColorSchema.optional(),
|
|
27382
|
+
textMuted: hexColorSchema.optional(),
|
|
27383
|
+
accent: hexColorSchema.optional(),
|
|
27384
|
+
accentText: hexColorSchema.optional(),
|
|
27385
|
+
link: hexColorSchema.optional(),
|
|
27386
|
+
border: resolvedBorderColorSchema.optional(),
|
|
27387
|
+
borderStrong: resolvedBorderColorSchema.optional(),
|
|
27388
|
+
focus: hexColorSchema.optional(),
|
|
27389
|
+
success: hexColorSchema.optional(),
|
|
27390
|
+
warning: hexColorSchema.optional(),
|
|
27391
|
+
danger: hexColorSchema.optional(),
|
|
27392
|
+
code: hexColorSchema.optional()
|
|
27393
|
+
}).strict();
|
|
27394
|
+
var brandingSchema = external_exports.object({
|
|
27395
|
+
name: external_exports.string().trim().min(1).max(160).optional(),
|
|
27396
|
+
accent: hexColorSchema.optional(),
|
|
27397
|
+
surface: hexColorSchema.optional(),
|
|
27398
|
+
surfaceDark: hexColorSchema.optional(),
|
|
27399
|
+
logo: brandAssetSchema.optional(),
|
|
27400
|
+
mark: brandAssetSchema.optional(),
|
|
27401
|
+
avatar: brandAssetSchema.optional(),
|
|
27402
|
+
theme: external_exports.object({ light: brandThemeSchema.optional(), dark: brandThemeSchema.optional() }).strict().optional(),
|
|
27403
|
+
radius: external_exports.enum(["none", "sm", "md", "lg"]).optional(),
|
|
27404
|
+
density: external_exports.enum(["compact", "comfortable"]).optional(),
|
|
27405
|
+
typography: external_exports.enum(["system", "serif", "mono"]).optional(),
|
|
27406
|
+
colorScheme: external_exports.enum(["auto", "light", "dark"]).optional()
|
|
27407
|
+
}).strict();
|
|
27408
|
+
var labelsSchema = external_exports.object({
|
|
27409
|
+
welcomeHeading: external_exports.string().trim().min(1).max(160).optional(),
|
|
27410
|
+
welcomeMessage: external_exports.string().max(1e3).optional(),
|
|
27411
|
+
launcherPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
|
|
27412
|
+
composerPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
|
|
27413
|
+
thinking: external_exports.string().trim().min(1).max(80).optional(),
|
|
27414
|
+
send: external_exports.string().trim().min(1).max(80).optional(),
|
|
27415
|
+
stop: external_exports.string().trim().min(1).max(80).optional(),
|
|
27416
|
+
close: external_exports.string().trim().min(1).max(80).optional(),
|
|
27417
|
+
open: external_exports.string().trim().min(1).max(80).optional(),
|
|
27418
|
+
confirm: external_exports.string().trim().min(1).max(80).optional(),
|
|
27419
|
+
decline: external_exports.string().trim().min(1).max(80).optional(),
|
|
27420
|
+
cancel: external_exports.string().trim().min(1).max(80).optional(),
|
|
27421
|
+
confirmationHeading: external_exports.string().trim().min(1).max(120).optional(),
|
|
27422
|
+
additionalDetails: external_exports.string().trim().min(1).max(120).optional(),
|
|
27423
|
+
redacted: external_exports.string().trim().min(1).max(120).optional(),
|
|
27424
|
+
completed: external_exports.string().trim().min(1).max(80).optional(),
|
|
27425
|
+
stopped: external_exports.string().trim().min(1).max(80).optional(),
|
|
27426
|
+
copy: external_exports.string().trim().min(1).max(80).optional(),
|
|
27427
|
+
newMessages: external_exports.string().trim().min(1).max(80).optional(),
|
|
27428
|
+
reconnect: external_exports.string().trim().min(1).max(80).optional(),
|
|
27429
|
+
newConversation: external_exports.string().trim().min(1).max(80).optional(),
|
|
27430
|
+
retry: external_exports.string().trim().min(1).max(80).optional(),
|
|
27431
|
+
unavailable: external_exports.string().trim().min(1).max(240).optional(),
|
|
27432
|
+
sessionExpired: external_exports.string().trim().min(1).max(240).optional(),
|
|
27433
|
+
sessionIdle: external_exports.string().trim().min(1).max(120).optional(),
|
|
27434
|
+
sessionLoading: external_exports.string().trim().min(1).max(120).optional(),
|
|
27435
|
+
sessionReady: external_exports.string().trim().min(1).max(120).optional(),
|
|
27436
|
+
sessionError: external_exports.string().trim().min(1).max(120).optional(),
|
|
27437
|
+
signInHeading: external_exports.string().trim().min(1).max(120).optional(),
|
|
27438
|
+
signInBody: external_exports.string().max(240).optional(),
|
|
27439
|
+
signInAction: external_exports.string().trim().min(1).max(80).optional(),
|
|
27440
|
+
signUpAction: external_exports.string().trim().min(1).max(80).optional()
|
|
27441
|
+
}).strict();
|
|
27442
|
+
var presentationSchema = external_exports.object({
|
|
27443
|
+
panel: external_exports.object({
|
|
27444
|
+
surface: external_exports.enum(["solid", "glass"]).optional(),
|
|
27445
|
+
elevation: external_exports.enum(["soft", "dramatic"]).optional(),
|
|
27446
|
+
border: external_exports.enum(["subtle", "strong"]).optional(),
|
|
27447
|
+
radius: external_exports.number().int().min(0).max(64).optional()
|
|
27448
|
+
}).strict().optional(),
|
|
27449
|
+
launcher: external_exports.object({
|
|
27450
|
+
style: external_exports.enum(["pill", "bubble"]).optional(),
|
|
27451
|
+
icon: external_exports.enum(["brand-mark", "chat", "none"]).optional(),
|
|
27452
|
+
size: external_exports.enum(["md", "lg"]).optional(),
|
|
27453
|
+
status: external_exports.enum(["none", "session"]).optional(),
|
|
27454
|
+
effect: external_exports.enum(["none", "pulse"]).optional()
|
|
27455
|
+
}).strict().optional(),
|
|
27456
|
+
header: external_exports.object({
|
|
27457
|
+
mark: external_exports.enum(["none", "brand-mark", "status"]).optional(),
|
|
27458
|
+
badge: external_exports.object({
|
|
27459
|
+
text: external_exports.string().trim().min(1).max(80),
|
|
27460
|
+
tone: external_exports.enum(["neutral", "success", "warning", "danger"]).optional(),
|
|
27461
|
+
indicator: external_exports.boolean().optional()
|
|
27462
|
+
}).strict().optional()
|
|
27463
|
+
}).strict().optional(),
|
|
27464
|
+
composer: external_exports.object({
|
|
27465
|
+
leadingIcon: external_exports.enum(["none", "brand-mark"]).optional(),
|
|
27466
|
+
sendIcon: external_exports.enum(["arrow-up", "paper-plane"]).optional(),
|
|
27467
|
+
shape: external_exports.enum(["rounded", "pill"]).optional()
|
|
27468
|
+
}).strict().optional(),
|
|
27469
|
+
messages: external_exports.object({
|
|
27470
|
+
userStyle: external_exports.enum(["bubble", "accent"]).optional(),
|
|
27471
|
+
assistantStyle: external_exports.enum(["plain", "bubble"]).optional()
|
|
27472
|
+
}).strict().optional()
|
|
27473
|
+
}).strict();
|
|
27474
|
+
var assistantUiSchema = external_exports.object({
|
|
27475
|
+
theme: external_exports.enum(["auto", "light", "dark", "invert"]).optional(),
|
|
27476
|
+
layout: external_exports.object({
|
|
27477
|
+
mode: external_exports.enum(["floating", "inline", "drawer"]).optional(),
|
|
27478
|
+
position: external_exports.enum(["bottom-left", "bottom-center", "bottom-right"]).optional(),
|
|
27479
|
+
panelWidth: external_exports.number().int().min(280).max(1200).optional(),
|
|
27480
|
+
panelMinHeight: external_exports.number().int().min(240).max(1600).optional(),
|
|
27481
|
+
panelMaxHeight: external_exports.number().int().min(320).max(2400).optional(),
|
|
27482
|
+
edgeOffset: external_exports.number().int().min(0).max(96).optional(),
|
|
27483
|
+
zIndex: external_exports.number().int().min(0).max(2147483647).optional(),
|
|
27484
|
+
density: external_exports.enum(["compact", "comfortable"]).optional(),
|
|
27485
|
+
mobileFullscreen: external_exports.boolean().optional()
|
|
27486
|
+
}).strict().optional(),
|
|
27487
|
+
behavior: external_exports.object({
|
|
27488
|
+
startOpen: external_exports.boolean().optional(),
|
|
27489
|
+
closeOnEscape: external_exports.boolean().optional(),
|
|
27490
|
+
closeOnOutsideClick: external_exports.boolean().optional(),
|
|
27491
|
+
showLauncher: external_exports.boolean().optional(),
|
|
27492
|
+
showHeader: external_exports.boolean().optional(),
|
|
27493
|
+
showAvatars: external_exports.boolean().optional(),
|
|
27494
|
+
showTimestamps: external_exports.boolean().optional(),
|
|
27495
|
+
showPoweredBy: external_exports.boolean().optional(),
|
|
27496
|
+
showConfirmationDetails: external_exports.boolean().optional()
|
|
27497
|
+
}).strict().optional(),
|
|
27498
|
+
labels: labelsSchema.optional(),
|
|
27499
|
+
presentation: presentationSchema.optional(),
|
|
27500
|
+
suggestedPrompts: external_exports.array(external_exports.string().trim().min(1).max(240)).max(8).optional(),
|
|
27501
|
+
privacyUrl: httpsUrlSchema.optional(),
|
|
27502
|
+
termsUrl: httpsUrlSchema.optional(),
|
|
27503
|
+
locale: external_exports.string().trim().min(2).max(35).optional(),
|
|
27504
|
+
direction: external_exports.enum(["ltr", "rtl", "auto"]).optional()
|
|
27505
|
+
}).strict();
|
|
27506
|
+
var assistantConfigurationSchema = external_exports.object({ branding: brandingSchema.optional(), assistant: assistantUiSchema.optional() }).strict();
|
|
27507
|
+
function parseAssistantConfiguration(value) {
|
|
27508
|
+
const parsed = assistantConfigurationSchema.safeParse(value);
|
|
27509
|
+
return parsed.success ? parsed.data : void 0;
|
|
27510
|
+
}
|
|
27511
|
+
function isHttpsUrl(value) {
|
|
27512
|
+
try {
|
|
27513
|
+
return new URL(value).protocol === "https:";
|
|
27514
|
+
} catch {
|
|
27515
|
+
return false;
|
|
27516
|
+
}
|
|
27517
|
+
}
|
|
27518
|
+
function isSecureBrowserAssetUrl(value) {
|
|
27519
|
+
try {
|
|
27520
|
+
const url2 = new URL(value);
|
|
27521
|
+
if (url2.protocol === "https:") return true;
|
|
27522
|
+
if (url2.protocol !== "http:") return false;
|
|
27523
|
+
return url2.hostname === "localhost" || url2.hostname === "127.0.0.1" || url2.hostname === "[::1]";
|
|
27524
|
+
} catch {
|
|
27525
|
+
return false;
|
|
27526
|
+
}
|
|
27527
|
+
}
|
|
27528
|
+
function isBoundedRgbaColor(value) {
|
|
27529
|
+
const match = /^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(0(?:\.\d{1,6})?|1(?:\.0{1,6})?)\s*\)$/.exec(
|
|
27530
|
+
value
|
|
27531
|
+
);
|
|
27532
|
+
if (match === null) return false;
|
|
27533
|
+
return match.slice(1, 4).every((channel) => Number(channel) <= 255);
|
|
27534
|
+
}
|
|
27535
|
+
|
|
27363
27536
|
// src/client-errors.ts
|
|
27364
27537
|
async function refusalCode(response) {
|
|
27365
27538
|
try {
|
|
@@ -27393,6 +27566,7 @@ function parseSession(value) {
|
|
|
27393
27566
|
if (typeof value.token !== "string" || typeof value.expiresAt !== "string" || typeof value.endpoints.turns !== "string" || typeof value.endpoints.toolConfirmations !== "string" || interactions !== void 0 && typeof interactions !== "string" || apps !== void 0 && typeof apps !== "string" || sandbox !== void 0 && typeof sandbox !== "string" || transcript !== void 0 && typeof transcript !== "string") {
|
|
27394
27567
|
throw clientError("session_failed", "Assistant session response is invalid", true);
|
|
27395
27568
|
}
|
|
27569
|
+
const configuration = parseAssistantConfiguration(value.configuration);
|
|
27396
27570
|
return {
|
|
27397
27571
|
token: value.token,
|
|
27398
27572
|
expiresAt: value.expiresAt,
|
|
@@ -27404,7 +27578,7 @@ function parseSession(value) {
|
|
|
27404
27578
|
...typeof sandbox === "string" ? { sandbox } : {},
|
|
27405
27579
|
...typeof transcript === "string" ? { transcript } : {}
|
|
27406
27580
|
},
|
|
27407
|
-
...
|
|
27581
|
+
...configuration === void 0 ? {} : { configuration },
|
|
27408
27582
|
...isRecord2(value.resume) && typeof value.resume.tool === "string" ? { resume: { tool: value.resume.tool } } : {}
|
|
27409
27583
|
};
|
|
27410
27584
|
}
|
|
@@ -27498,9 +27672,9 @@ function toAssistantClientEvent(event) {
|
|
|
27498
27672
|
return { event: "unrecognized", data: { name: event.event, payload: value } };
|
|
27499
27673
|
}
|
|
27500
27674
|
function isViewAvailableDetail(value) {
|
|
27501
|
-
return hasString(value, "id") && hasString(value, "tool") && typeof value.resourceUri === "string" && value.resourceUri.startsWith("ui://") && hasOptionalString(value.title) && (value.replayed === void 0 || value.replayed === true) && isJsonValue(value.result, 0) && hasOptionalJson(value.arguments) && hasOptionalString(value.html) && (value.resourceMeta === void 0 || isRecord3(value.resourceMeta)) && (value.allowedOpenDomains === void 0 || Array.isArray(value.allowedOpenDomains) && value.allowedOpenDomains.every(
|
|
27675
|
+
return hasString(value, "id") && hasString(value, "tool") && typeof value.resourceUri === "string" && value.resourceUri.startsWith("ui://") && hasOptionalString(value.title) && (value.replayed === void 0 || value.replayed === true) && isJsonValue(value.result, 0) && hasOptionalJson(value.arguments) && hasOptionalString(value.html) && (value.resourceMeta === void 0 || isRecord3(value.resourceMeta)) && (value.allowedOpenDomains === void 0 || Array.isArray(value.allowedOpenDomains) && value.allowedOpenDomains.every(isHttpsUrl2)) && hasOptionalTurnId(value);
|
|
27502
27676
|
}
|
|
27503
|
-
function
|
|
27677
|
+
function isHttpsUrl2(value) {
|
|
27504
27678
|
if (typeof value !== "string") return false;
|
|
27505
27679
|
try {
|
|
27506
27680
|
return new URL(value).protocol === "https:";
|
|
@@ -28584,7 +28758,7 @@ function createInteractionCard(options) {
|
|
|
28584
28758
|
if (Object.keys(businessArguments).length > 0) {
|
|
28585
28759
|
card.append(createArgumentList(businessArguments, options.reviewSchema, options.labels));
|
|
28586
28760
|
}
|
|
28587
|
-
if (action !== void 0) {
|
|
28761
|
+
if (action !== void 0 && options.showDetails !== false) {
|
|
28588
28762
|
const technical = document.createElement("details");
|
|
28589
28763
|
technical.className = "proposal-details";
|
|
28590
28764
|
const summary = document.createElement("summary");
|
|
@@ -28666,7 +28840,7 @@ function createArgumentList(arguments_, schema, labels) {
|
|
|
28666
28840
|
return list;
|
|
28667
28841
|
}
|
|
28668
28842
|
function appendValue(parent, value, schema, labels) {
|
|
28669
|
-
if (value === "[REDACTED]") {
|
|
28843
|
+
if (schema?.writeOnly === true || schema?.["x-sensitive"] === true || value === "[REDACTED]") {
|
|
28670
28844
|
const hidden = document.createElement("span");
|
|
28671
28845
|
hidden.className = "proposal-redacted";
|
|
28672
28846
|
hidden.textContent = labels.redacted;
|
|
@@ -31587,6 +31761,7 @@ var AssistantElementEventController = class {
|
|
|
31587
31761
|
...description ? { description } : {},
|
|
31588
31762
|
...arguments_ ? { arguments: arguments_ } : {},
|
|
31589
31763
|
...reviewSchema ? { reviewSchema } : {},
|
|
31764
|
+
showDetails: this.#host.showConfirmationDetails(),
|
|
31590
31765
|
labels: {
|
|
31591
31766
|
heading: labels.confirmationHeading,
|
|
31592
31767
|
accept: labels.confirm,
|
|
@@ -31856,12 +32031,14 @@ var AssistantElementHostEnvironmentController = class {
|
|
|
31856
32031
|
};
|
|
31857
32032
|
|
|
31858
32033
|
// src/element-launcher-controller.ts
|
|
32034
|
+
var COLLAPSED_LAUNCHER_WIDTH_PROPERTY = "--_ns-assistant-launcher-collapsed-width";
|
|
31859
32035
|
var AssistantElementLauncherController = class {
|
|
31860
32036
|
#host;
|
|
31861
32037
|
#appearance;
|
|
31862
32038
|
#openPanel;
|
|
31863
32039
|
#sendMessage;
|
|
31864
32040
|
#root;
|
|
32041
|
+
#measurementFrame;
|
|
31865
32042
|
constructor(options) {
|
|
31866
32043
|
this.#host = options.host;
|
|
31867
32044
|
this.#appearance = options.appearance;
|
|
@@ -31892,6 +32069,8 @@ var AssistantElementLauncherController = class {
|
|
|
31892
32069
|
}
|
|
31893
32070
|
disconnect() {
|
|
31894
32071
|
document.removeEventListener("pointerdown", this.#handleDocumentPointerDown);
|
|
32072
|
+
this.#cancelWidthMeasurement();
|
|
32073
|
+
this.#host.style.removeProperty(COLLAPSED_LAUNCHER_WIDTH_PROPERTY);
|
|
31895
32074
|
this.#root = void 0;
|
|
31896
32075
|
}
|
|
31897
32076
|
sync() {
|
|
@@ -31913,7 +32092,13 @@ var AssistantElementLauncherController = class {
|
|
|
31913
32092
|
);
|
|
31914
32093
|
queryRequired(root, ".launcher").hidden = !appearance.behavior.showLauncher;
|
|
31915
32094
|
queryRequired(root, ".powered-by-row").hidden = !appearance.behavior.showPoweredBy;
|
|
31916
|
-
if (style === "bubble" || this.#host.hasAttribute("open"))
|
|
32095
|
+
if (style === "bubble" || this.#host.hasAttribute("open")) {
|
|
32096
|
+
this.#cancelWidthMeasurement();
|
|
32097
|
+
this.#host.style.removeProperty(COLLAPSED_LAUNCHER_WIDTH_PROPERTY);
|
|
32098
|
+
this.collapse(true);
|
|
32099
|
+
return;
|
|
32100
|
+
}
|
|
32101
|
+
if (!this.#host.hasAttribute("launcher-expanded")) this.#scheduleWidthMeasurement();
|
|
31917
32102
|
}
|
|
31918
32103
|
collapse(force = false) {
|
|
31919
32104
|
const root = this.#root;
|
|
@@ -31934,6 +32119,9 @@ var AssistantElementLauncherController = class {
|
|
|
31934
32119
|
#expand() {
|
|
31935
32120
|
const root = this.#root;
|
|
31936
32121
|
if (!root || this.#appearance().presentation.launcher.style === "bubble") return;
|
|
32122
|
+
this.#cancelWidthMeasurement();
|
|
32123
|
+
this.#measureCollapsedWidth();
|
|
32124
|
+
void queryRequired(root, ".launcher").offsetWidth;
|
|
31937
32125
|
this.#host.setAttribute("launcher-expanded", "");
|
|
31938
32126
|
const form = queryRequired(root, ".launcher-form");
|
|
31939
32127
|
const trigger = queryRequired(root, ".launcher-trigger");
|
|
@@ -31945,6 +32133,31 @@ var AssistantElementLauncherController = class {
|
|
|
31945
32133
|
if (this.#host.hasAttribute("launcher-expanded")) input.focus();
|
|
31946
32134
|
});
|
|
31947
32135
|
}
|
|
32136
|
+
#scheduleWidthMeasurement() {
|
|
32137
|
+
this.#cancelWidthMeasurement();
|
|
32138
|
+
this.#host.style.removeProperty(COLLAPSED_LAUNCHER_WIDTH_PROPERTY);
|
|
32139
|
+
this.#measurementFrame = requestAnimationFrame(() => {
|
|
32140
|
+
this.#measurementFrame = void 0;
|
|
32141
|
+
this.#measureCollapsedWidth();
|
|
32142
|
+
});
|
|
32143
|
+
}
|
|
32144
|
+
#cancelWidthMeasurement() {
|
|
32145
|
+
if (this.#measurementFrame === void 0) return;
|
|
32146
|
+
cancelAnimationFrame(this.#measurementFrame);
|
|
32147
|
+
this.#measurementFrame = void 0;
|
|
32148
|
+
}
|
|
32149
|
+
#measureCollapsedWidth() {
|
|
32150
|
+
const root = this.#root;
|
|
32151
|
+
if (!root || this.#host.hasAttribute("launcher-expanded") || this.#appearance().presentation.launcher.style === "bubble") {
|
|
32152
|
+
return;
|
|
32153
|
+
}
|
|
32154
|
+
const launcher = queryRequired(root, ".launcher");
|
|
32155
|
+
this.#host.style.removeProperty(COLLAPSED_LAUNCHER_WIDTH_PROPERTY);
|
|
32156
|
+
const collapsedWidth = launcher.offsetWidth;
|
|
32157
|
+
if (collapsedWidth > 0) {
|
|
32158
|
+
this.#host.style.setProperty(COLLAPSED_LAUNCHER_WIDTH_PROPERTY, `${collapsedWidth}px`);
|
|
32159
|
+
}
|
|
32160
|
+
}
|
|
31948
32161
|
#handleTrigger = () => {
|
|
31949
32162
|
if (this.#appearance().presentation.launcher.style === "bubble") {
|
|
31950
32163
|
this.#openPanel();
|
|
@@ -31984,7 +32197,7 @@ var AssistantElementLauncherController = class {
|
|
|
31984
32197
|
};
|
|
31985
32198
|
#handleDocumentPointerDown = (event) => {
|
|
31986
32199
|
if (event.composedPath().includes(this.#host)) return;
|
|
31987
|
-
this.collapse();
|
|
32200
|
+
this.collapse(true);
|
|
31988
32201
|
};
|
|
31989
32202
|
};
|
|
31990
32203
|
|
|
@@ -32057,177 +32270,6 @@ var AssistantElementPresentationGate = class {
|
|
|
32057
32270
|
}
|
|
32058
32271
|
};
|
|
32059
32272
|
|
|
32060
|
-
// src/assistant-configuration-schema.ts
|
|
32061
|
-
var hexColorSchema = external_exports.string().regex(/^#[0-9A-Fa-f]{6}$/);
|
|
32062
|
-
var resolvedBorderColorSchema = external_exports.union([
|
|
32063
|
-
hexColorSchema,
|
|
32064
|
-
external_exports.string().max(64).refine(isBoundedRgbaColor, "must be a six-digit hex or bounded rgba color")
|
|
32065
|
-
]);
|
|
32066
|
-
var browserAssetUrlSchema = external_exports.string().trim().url().refine(isSecureBrowserAssetUrl, "must use https (http is allowed only for loopback testing)");
|
|
32067
|
-
var httpsUrlSchema = external_exports.string().trim().url().refine(isHttpsUrl2, "must use https");
|
|
32068
|
-
var brandAssetSchema = external_exports.object({
|
|
32069
|
-
uri: browserAssetUrlSchema,
|
|
32070
|
-
darkUri: browserAssetUrlSchema.optional(),
|
|
32071
|
-
alt: external_exports.string().trim().min(1).max(240)
|
|
32072
|
-
}).strict();
|
|
32073
|
-
var brandThemeSchema = external_exports.object({
|
|
32074
|
-
surface: hexColorSchema.optional(),
|
|
32075
|
-
surfaceRaised: hexColorSchema.optional(),
|
|
32076
|
-
surfaceMuted: hexColorSchema.optional(),
|
|
32077
|
-
text: hexColorSchema.optional(),
|
|
32078
|
-
textMuted: hexColorSchema.optional(),
|
|
32079
|
-
accent: hexColorSchema.optional(),
|
|
32080
|
-
accentText: hexColorSchema.optional(),
|
|
32081
|
-
link: hexColorSchema.optional(),
|
|
32082
|
-
border: resolvedBorderColorSchema.optional(),
|
|
32083
|
-
borderStrong: resolvedBorderColorSchema.optional(),
|
|
32084
|
-
focus: hexColorSchema.optional(),
|
|
32085
|
-
success: hexColorSchema.optional(),
|
|
32086
|
-
warning: hexColorSchema.optional(),
|
|
32087
|
-
danger: hexColorSchema.optional(),
|
|
32088
|
-
code: hexColorSchema.optional()
|
|
32089
|
-
}).strict();
|
|
32090
|
-
var brandingSchema = external_exports.object({
|
|
32091
|
-
name: external_exports.string().trim().min(1).max(160).optional(),
|
|
32092
|
-
accent: hexColorSchema.optional(),
|
|
32093
|
-
surface: hexColorSchema.optional(),
|
|
32094
|
-
surfaceDark: hexColorSchema.optional(),
|
|
32095
|
-
logo: brandAssetSchema.optional(),
|
|
32096
|
-
mark: brandAssetSchema.optional(),
|
|
32097
|
-
avatar: brandAssetSchema.optional(),
|
|
32098
|
-
theme: external_exports.object({ light: brandThemeSchema.optional(), dark: brandThemeSchema.optional() }).strict().optional(),
|
|
32099
|
-
radius: external_exports.enum(["none", "sm", "md", "lg"]).optional(),
|
|
32100
|
-
density: external_exports.enum(["compact", "comfortable"]).optional(),
|
|
32101
|
-
typography: external_exports.enum(["system", "serif", "mono"]).optional(),
|
|
32102
|
-
colorScheme: external_exports.enum(["auto", "light", "dark"]).optional()
|
|
32103
|
-
}).strict();
|
|
32104
|
-
var labelsSchema = external_exports.object({
|
|
32105
|
-
welcomeHeading: external_exports.string().trim().min(1).max(160).optional(),
|
|
32106
|
-
welcomeMessage: external_exports.string().max(1e3).optional(),
|
|
32107
|
-
launcherPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
|
|
32108
|
-
composerPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
|
|
32109
|
-
thinking: external_exports.string().trim().min(1).max(80).optional(),
|
|
32110
|
-
send: external_exports.string().trim().min(1).max(80).optional(),
|
|
32111
|
-
stop: external_exports.string().trim().min(1).max(80).optional(),
|
|
32112
|
-
close: external_exports.string().trim().min(1).max(80).optional(),
|
|
32113
|
-
open: external_exports.string().trim().min(1).max(80).optional(),
|
|
32114
|
-
confirm: external_exports.string().trim().min(1).max(80).optional(),
|
|
32115
|
-
decline: external_exports.string().trim().min(1).max(80).optional(),
|
|
32116
|
-
cancel: external_exports.string().trim().min(1).max(80).optional(),
|
|
32117
|
-
confirmationHeading: external_exports.string().trim().min(1).max(120).optional(),
|
|
32118
|
-
additionalDetails: external_exports.string().trim().min(1).max(120).optional(),
|
|
32119
|
-
redacted: external_exports.string().trim().min(1).max(120).optional(),
|
|
32120
|
-
completed: external_exports.string().trim().min(1).max(80).optional(),
|
|
32121
|
-
stopped: external_exports.string().trim().min(1).max(80).optional(),
|
|
32122
|
-
copy: external_exports.string().trim().min(1).max(80).optional(),
|
|
32123
|
-
newMessages: external_exports.string().trim().min(1).max(80).optional(),
|
|
32124
|
-
reconnect: external_exports.string().trim().min(1).max(80).optional(),
|
|
32125
|
-
newConversation: external_exports.string().trim().min(1).max(80).optional(),
|
|
32126
|
-
retry: external_exports.string().trim().min(1).max(80).optional(),
|
|
32127
|
-
unavailable: external_exports.string().trim().min(1).max(240).optional(),
|
|
32128
|
-
sessionExpired: external_exports.string().trim().min(1).max(240).optional(),
|
|
32129
|
-
sessionIdle: external_exports.string().trim().min(1).max(120).optional(),
|
|
32130
|
-
sessionLoading: external_exports.string().trim().min(1).max(120).optional(),
|
|
32131
|
-
sessionReady: external_exports.string().trim().min(1).max(120).optional(),
|
|
32132
|
-
sessionError: external_exports.string().trim().min(1).max(120).optional(),
|
|
32133
|
-
signInHeading: external_exports.string().trim().min(1).max(120).optional(),
|
|
32134
|
-
signInBody: external_exports.string().max(240).optional(),
|
|
32135
|
-
signInAction: external_exports.string().trim().min(1).max(80).optional(),
|
|
32136
|
-
signUpAction: external_exports.string().trim().min(1).max(80).optional()
|
|
32137
|
-
}).strict();
|
|
32138
|
-
var presentationSchema = external_exports.object({
|
|
32139
|
-
panel: external_exports.object({
|
|
32140
|
-
surface: external_exports.enum(["solid", "glass"]).optional(),
|
|
32141
|
-
elevation: external_exports.enum(["soft", "dramatic"]).optional(),
|
|
32142
|
-
border: external_exports.enum(["subtle", "strong"]).optional(),
|
|
32143
|
-
radius: external_exports.number().int().min(0).max(64).optional()
|
|
32144
|
-
}).strict().optional(),
|
|
32145
|
-
launcher: external_exports.object({
|
|
32146
|
-
style: external_exports.enum(["pill", "bubble"]).optional(),
|
|
32147
|
-
icon: external_exports.enum(["brand-mark", "chat", "none"]).optional(),
|
|
32148
|
-
size: external_exports.enum(["md", "lg"]).optional(),
|
|
32149
|
-
status: external_exports.enum(["none", "session"]).optional(),
|
|
32150
|
-
effect: external_exports.enum(["none", "pulse"]).optional()
|
|
32151
|
-
}).strict().optional(),
|
|
32152
|
-
header: external_exports.object({
|
|
32153
|
-
mark: external_exports.enum(["none", "brand-mark", "status"]).optional(),
|
|
32154
|
-
badge: external_exports.object({
|
|
32155
|
-
text: external_exports.string().trim().min(1).max(80),
|
|
32156
|
-
tone: external_exports.enum(["neutral", "success", "warning", "danger"]).optional(),
|
|
32157
|
-
indicator: external_exports.boolean().optional()
|
|
32158
|
-
}).strict().optional()
|
|
32159
|
-
}).strict().optional(),
|
|
32160
|
-
composer: external_exports.object({
|
|
32161
|
-
leadingIcon: external_exports.enum(["none", "brand-mark"]).optional(),
|
|
32162
|
-
sendIcon: external_exports.enum(["arrow-up", "paper-plane"]).optional(),
|
|
32163
|
-
shape: external_exports.enum(["rounded", "pill"]).optional()
|
|
32164
|
-
}).strict().optional(),
|
|
32165
|
-
messages: external_exports.object({
|
|
32166
|
-
userStyle: external_exports.enum(["bubble", "accent"]).optional(),
|
|
32167
|
-
assistantStyle: external_exports.enum(["plain", "bubble"]).optional()
|
|
32168
|
-
}).strict().optional()
|
|
32169
|
-
}).strict();
|
|
32170
|
-
var assistantUiSchema = external_exports.object({
|
|
32171
|
-
theme: external_exports.enum(["auto", "light", "dark", "invert"]).optional(),
|
|
32172
|
-
layout: external_exports.object({
|
|
32173
|
-
mode: external_exports.enum(["floating", "inline", "drawer"]).optional(),
|
|
32174
|
-
position: external_exports.enum(["bottom-left", "bottom-center", "bottom-right"]).optional(),
|
|
32175
|
-
panelWidth: external_exports.number().int().min(280).max(1200).optional(),
|
|
32176
|
-
panelMinHeight: external_exports.number().int().min(240).max(1600).optional(),
|
|
32177
|
-
panelMaxHeight: external_exports.number().int().min(320).max(2400).optional(),
|
|
32178
|
-
edgeOffset: external_exports.number().int().min(0).max(96).optional(),
|
|
32179
|
-
zIndex: external_exports.number().int().min(0).max(2147483647).optional(),
|
|
32180
|
-
density: external_exports.enum(["compact", "comfortable"]).optional(),
|
|
32181
|
-
mobileFullscreen: external_exports.boolean().optional()
|
|
32182
|
-
}).strict().optional(),
|
|
32183
|
-
behavior: external_exports.object({
|
|
32184
|
-
startOpen: external_exports.boolean().optional(),
|
|
32185
|
-
closeOnEscape: external_exports.boolean().optional(),
|
|
32186
|
-
closeOnOutsideClick: external_exports.boolean().optional(),
|
|
32187
|
-
showLauncher: external_exports.boolean().optional(),
|
|
32188
|
-
showHeader: external_exports.boolean().optional(),
|
|
32189
|
-
showAvatars: external_exports.boolean().optional(),
|
|
32190
|
-
showTimestamps: external_exports.boolean().optional(),
|
|
32191
|
-
showPoweredBy: external_exports.boolean().optional()
|
|
32192
|
-
}).strict().optional(),
|
|
32193
|
-
labels: labelsSchema.optional(),
|
|
32194
|
-
presentation: presentationSchema.optional(),
|
|
32195
|
-
suggestedPrompts: external_exports.array(external_exports.string().trim().min(1).max(240)).max(8).optional(),
|
|
32196
|
-
privacyUrl: httpsUrlSchema.optional(),
|
|
32197
|
-
termsUrl: httpsUrlSchema.optional(),
|
|
32198
|
-
locale: external_exports.string().trim().min(2).max(35).optional(),
|
|
32199
|
-
direction: external_exports.enum(["ltr", "rtl", "auto"]).optional()
|
|
32200
|
-
}).strict();
|
|
32201
|
-
var assistantConfigurationSchema = external_exports.object({ branding: brandingSchema.optional(), assistant: assistantUiSchema.optional() }).strict();
|
|
32202
|
-
function parseAssistantConfiguration(value) {
|
|
32203
|
-
const parsed = assistantConfigurationSchema.safeParse(value);
|
|
32204
|
-
return parsed.success ? parsed.data : void 0;
|
|
32205
|
-
}
|
|
32206
|
-
function isHttpsUrl2(value) {
|
|
32207
|
-
try {
|
|
32208
|
-
return new URL(value).protocol === "https:";
|
|
32209
|
-
} catch {
|
|
32210
|
-
return false;
|
|
32211
|
-
}
|
|
32212
|
-
}
|
|
32213
|
-
function isSecureBrowserAssetUrl(value) {
|
|
32214
|
-
try {
|
|
32215
|
-
const url2 = new URL(value);
|
|
32216
|
-
if (url2.protocol === "https:") return true;
|
|
32217
|
-
if (url2.protocol !== "http:") return false;
|
|
32218
|
-
return url2.hostname === "localhost" || url2.hostname === "127.0.0.1" || url2.hostname === "[::1]";
|
|
32219
|
-
} catch {
|
|
32220
|
-
return false;
|
|
32221
|
-
}
|
|
32222
|
-
}
|
|
32223
|
-
function isBoundedRgbaColor(value) {
|
|
32224
|
-
const match = /^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(0(?:\.\d{1,6})?|1(?:\.0{1,6})?)\s*\)$/.exec(
|
|
32225
|
-
value
|
|
32226
|
-
);
|
|
32227
|
-
if (match === null) return false;
|
|
32228
|
-
return match.slice(1, 4).every((channel) => Number(channel) <= 255);
|
|
32229
|
-
}
|
|
32230
|
-
|
|
32231
32273
|
// src/element-public-configuration-controller.ts
|
|
32232
32274
|
var AssistantElementPublicConfigurationController = class {
|
|
32233
32275
|
#source;
|
|
@@ -32430,7 +32472,7 @@ var ASSISTANT_ELEMENT_STYLES = `<style>
|
|
|
32430
32472
|
:host([data-mode="floating"][open]) { width: min(var(--ns-assistant-panel-width, var(--ns-assistant-default-panel-width)), 100vw); }
|
|
32431
32473
|
button { font: inherit; }
|
|
32432
32474
|
button, textarea, input, select { -webkit-tap-highlight-color: transparent; }
|
|
32433
|
-
.launcher { display: flex; align-items: center; justify-content: center; gap: 12px; width: max-content; min-height: 44px; padding: 10px 14px; color: var(--ns-assistant-launcher-text, var(--ns-assistant-text, var(--ns-assistant-default-text))); background: var(--ns-assistant-launcher, color-mix(in srgb, var(--ns-assistant-panel, var(--ns-assistant-default-panel)) 50%, transparent)); border: 1px solid var(--ns-assistant-launcher-border, var(--ns-assistant-halo-launcher-border)); border-radius: 999px; box-shadow: var(--ns-assistant-halo-launcher-shadow), -6px 0 18px color-mix(in srgb, var(--ns-assistant-accent, var(--ns-assistant-default-accent)) 20%, transparent), 6px 0 18px color-mix(in srgb, var(--ns-assistant-accent, var(--ns-assistant-default-accent)) 20%, transparent), 0 0 40px color-mix(in srgb, var(--ns-assistant-accent, var(--ns-assistant-default-accent)) 10%, transparent); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); transition: width .5s cubic-bezier(.25,1,.5,1), height .5s cubic-bezier(.25,1,.5,1), padding .5s cubic-bezier(.25,1,.5,1), gap .35s cubic-bezier(.25,1,.5,1), transform .6s cubic-bezier(.25,1,.5,1), background-color .3s ease, box-shadow .3s ease; }
|
|
32475
|
+
.launcher { display: flex; align-items: center; justify-content: center; gap: 12px; width: var(--_ns-assistant-launcher-collapsed-width, max-content); min-height: 44px; padding: 10px 14px; color: var(--ns-assistant-launcher-text, var(--ns-assistant-text, var(--ns-assistant-default-text))); background: var(--ns-assistant-launcher, color-mix(in srgb, var(--ns-assistant-panel, var(--ns-assistant-default-panel)) 50%, transparent)); border: 1px solid var(--ns-assistant-launcher-border, var(--ns-assistant-halo-launcher-border)); border-radius: 999px; box-shadow: var(--ns-assistant-halo-launcher-shadow), -6px 0 18px color-mix(in srgb, var(--ns-assistant-accent, var(--ns-assistant-default-accent)) 20%, transparent), 6px 0 18px color-mix(in srgb, var(--ns-assistant-accent, var(--ns-assistant-default-accent)) 20%, transparent), 0 0 40px color-mix(in srgb, var(--ns-assistant-accent, var(--ns-assistant-default-accent)) 10%, transparent); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); transition: width .5s cubic-bezier(.25,1,.5,1), height .5s cubic-bezier(.25,1,.5,1), padding .5s cubic-bezier(.25,1,.5,1), gap .35s cubic-bezier(.25,1,.5,1), transform .6s cubic-bezier(.25,1,.5,1), background-color .3s ease, box-shadow .3s ease; will-change: width; }
|
|
32434
32476
|
:host([data-presentation-ready]) .launcher { padding: 10px 12px; }
|
|
32435
32477
|
.launcher[hidden] { display: none; }
|
|
32436
32478
|
.launcher:hover { transform: scale(1.02); box-shadow: var(--ns-assistant-halo-launcher-shadow-hover), -6px 0 18px color-mix(in srgb, var(--ns-assistant-accent, var(--ns-assistant-default-accent)) 20%, transparent), 6px 0 18px color-mix(in srgb, var(--ns-assistant-accent, var(--ns-assistant-default-accent)) 20%, transparent); }
|
|
@@ -32974,19 +33016,11 @@ var presentationStyles = `<style>
|
|
|
32974
33016
|
width: 28px;
|
|
32975
33017
|
height: 28px;
|
|
32976
33018
|
border-radius: 50%;
|
|
32977
|
-
|
|
32978
|
-
opacity: .6;
|
|
32979
|
-
transition: width .5s cubic-bezier(.25,1,.5,1), height .5s cubic-bezier(.25,1,.5,1), filter .5s cubic-bezier(.25,1,.5,1), opacity .5s cubic-bezier(.25,1,.5,1);
|
|
32980
|
-
}
|
|
32981
|
-
.launcher:hover .launcher-glyph:is(img), :host([launcher-expanded]) .launcher-glyph:is(img) {
|
|
32982
|
-
filter: none;
|
|
32983
|
-
opacity: 1;
|
|
33019
|
+
transition: width .5s cubic-bezier(.25,1,.5,1), height .5s cubic-bezier(.25,1,.5,1);
|
|
32984
33020
|
}
|
|
32985
33021
|
:host([data-launcher-style="bubble"]) .launcher-glyph:is(img) {
|
|
32986
33022
|
width: 32px;
|
|
32987
33023
|
height: 32px;
|
|
32988
|
-
filter: none;
|
|
32989
|
-
opacity: 1;
|
|
32990
33024
|
}
|
|
32991
33025
|
.launcher-status {
|
|
32992
33026
|
position: absolute;
|
|
@@ -33182,6 +33216,7 @@ var NoodleAssistantElement = class extends HTMLElementBase {
|
|
|
33182
33216
|
},
|
|
33183
33217
|
applyConfiguration: (configuration) => this.#applyConfiguration(configuration),
|
|
33184
33218
|
labels: () => this.#appearance.labels,
|
|
33219
|
+
showConfirmationDetails: () => this.#appearance.behavior.showConfirmationDetails,
|
|
33185
33220
|
respond: (id, response) => this.respond(id, response),
|
|
33186
33221
|
dispatchError: (detail) => this.#dispatchError(detail),
|
|
33187
33222
|
revealLatest: () => this.#revealLatest(),
|