@noodleseed/assistant 1.26.1 → 1.28.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-QH7PL3GU.js} +52 -192
- package/dist/chunk-QH7PL3GU.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 +42 -50
- package/dist/index.cjs +225 -190
- 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 +225 -190
- 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/index.cjs
CHANGED
|
@@ -22427,7 +22427,8 @@ var DEFAULT_APPEARANCE = {
|
|
|
22427
22427
|
showHeader: true,
|
|
22428
22428
|
showAvatars: true,
|
|
22429
22429
|
showTimestamps: false,
|
|
22430
|
-
showPoweredBy: true
|
|
22430
|
+
showPoweredBy: true,
|
|
22431
|
+
showConfirmationDetails: true
|
|
22431
22432
|
},
|
|
22432
22433
|
labels: {
|
|
22433
22434
|
welcomeHeading: "",
|
|
@@ -27357,6 +27358,178 @@ function isRecord(value) {
|
|
|
27357
27358
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
27358
27359
|
}
|
|
27359
27360
|
|
|
27361
|
+
// src/assistant-configuration-schema.ts
|
|
27362
|
+
var hexColorSchema = external_exports.string().regex(/^#[0-9A-Fa-f]{6}$/);
|
|
27363
|
+
var resolvedBorderColorSchema = external_exports.union([
|
|
27364
|
+
hexColorSchema,
|
|
27365
|
+
external_exports.string().max(64).refine(isBoundedRgbaColor, "must be a six-digit hex or bounded rgba color")
|
|
27366
|
+
]);
|
|
27367
|
+
var browserAssetUrlSchema = external_exports.string().trim().url().refine(isSecureBrowserAssetUrl, "must use https (http is allowed only for loopback testing)");
|
|
27368
|
+
var httpsUrlSchema = external_exports.string().trim().url().refine(isHttpsUrl, "must use https");
|
|
27369
|
+
var brandAssetSchema = external_exports.object({
|
|
27370
|
+
uri: browserAssetUrlSchema,
|
|
27371
|
+
darkUri: browserAssetUrlSchema.optional(),
|
|
27372
|
+
alt: external_exports.string().trim().min(1).max(240)
|
|
27373
|
+
}).strict();
|
|
27374
|
+
var brandThemeSchema = external_exports.object({
|
|
27375
|
+
surface: hexColorSchema.optional(),
|
|
27376
|
+
surfaceRaised: hexColorSchema.optional(),
|
|
27377
|
+
surfaceMuted: hexColorSchema.optional(),
|
|
27378
|
+
text: hexColorSchema.optional(),
|
|
27379
|
+
textMuted: hexColorSchema.optional(),
|
|
27380
|
+
accent: hexColorSchema.optional(),
|
|
27381
|
+
accentText: hexColorSchema.optional(),
|
|
27382
|
+
link: hexColorSchema.optional(),
|
|
27383
|
+
border: resolvedBorderColorSchema.optional(),
|
|
27384
|
+
borderStrong: resolvedBorderColorSchema.optional(),
|
|
27385
|
+
focus: hexColorSchema.optional(),
|
|
27386
|
+
success: hexColorSchema.optional(),
|
|
27387
|
+
warning: hexColorSchema.optional(),
|
|
27388
|
+
danger: hexColorSchema.optional(),
|
|
27389
|
+
code: hexColorSchema.optional()
|
|
27390
|
+
}).strict();
|
|
27391
|
+
var brandingSchema = external_exports.object({
|
|
27392
|
+
name: external_exports.string().trim().min(1).max(160).optional(),
|
|
27393
|
+
accent: hexColorSchema.optional(),
|
|
27394
|
+
surface: hexColorSchema.optional(),
|
|
27395
|
+
surfaceDark: hexColorSchema.optional(),
|
|
27396
|
+
logo: brandAssetSchema.optional(),
|
|
27397
|
+
mark: brandAssetSchema.optional(),
|
|
27398
|
+
avatar: brandAssetSchema.optional(),
|
|
27399
|
+
theme: external_exports.object({ light: brandThemeSchema.optional(), dark: brandThemeSchema.optional() }).strict().optional(),
|
|
27400
|
+
radius: external_exports.enum(["none", "sm", "md", "lg"]).optional(),
|
|
27401
|
+
density: external_exports.enum(["compact", "comfortable"]).optional(),
|
|
27402
|
+
typography: external_exports.enum(["system", "serif", "mono"]).optional(),
|
|
27403
|
+
colorScheme: external_exports.enum(["auto", "light", "dark"]).optional()
|
|
27404
|
+
}).strict();
|
|
27405
|
+
var labelsSchema = external_exports.object({
|
|
27406
|
+
welcomeHeading: external_exports.string().trim().min(1).max(160).optional(),
|
|
27407
|
+
welcomeMessage: external_exports.string().max(1e3).optional(),
|
|
27408
|
+
launcherPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
|
|
27409
|
+
composerPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
|
|
27410
|
+
thinking: external_exports.string().trim().min(1).max(80).optional(),
|
|
27411
|
+
send: external_exports.string().trim().min(1).max(80).optional(),
|
|
27412
|
+
stop: external_exports.string().trim().min(1).max(80).optional(),
|
|
27413
|
+
close: external_exports.string().trim().min(1).max(80).optional(),
|
|
27414
|
+
open: external_exports.string().trim().min(1).max(80).optional(),
|
|
27415
|
+
confirm: external_exports.string().trim().min(1).max(80).optional(),
|
|
27416
|
+
decline: external_exports.string().trim().min(1).max(80).optional(),
|
|
27417
|
+
cancel: external_exports.string().trim().min(1).max(80).optional(),
|
|
27418
|
+
confirmationHeading: external_exports.string().trim().min(1).max(120).optional(),
|
|
27419
|
+
additionalDetails: external_exports.string().trim().min(1).max(120).optional(),
|
|
27420
|
+
redacted: external_exports.string().trim().min(1).max(120).optional(),
|
|
27421
|
+
completed: external_exports.string().trim().min(1).max(80).optional(),
|
|
27422
|
+
stopped: external_exports.string().trim().min(1).max(80).optional(),
|
|
27423
|
+
copy: external_exports.string().trim().min(1).max(80).optional(),
|
|
27424
|
+
newMessages: external_exports.string().trim().min(1).max(80).optional(),
|
|
27425
|
+
reconnect: external_exports.string().trim().min(1).max(80).optional(),
|
|
27426
|
+
newConversation: external_exports.string().trim().min(1).max(80).optional(),
|
|
27427
|
+
retry: external_exports.string().trim().min(1).max(80).optional(),
|
|
27428
|
+
unavailable: external_exports.string().trim().min(1).max(240).optional(),
|
|
27429
|
+
sessionExpired: external_exports.string().trim().min(1).max(240).optional(),
|
|
27430
|
+
sessionIdle: external_exports.string().trim().min(1).max(120).optional(),
|
|
27431
|
+
sessionLoading: external_exports.string().trim().min(1).max(120).optional(),
|
|
27432
|
+
sessionReady: external_exports.string().trim().min(1).max(120).optional(),
|
|
27433
|
+
sessionError: external_exports.string().trim().min(1).max(120).optional(),
|
|
27434
|
+
signInHeading: external_exports.string().trim().min(1).max(120).optional(),
|
|
27435
|
+
signInBody: external_exports.string().max(240).optional(),
|
|
27436
|
+
signInAction: external_exports.string().trim().min(1).max(80).optional(),
|
|
27437
|
+
signUpAction: external_exports.string().trim().min(1).max(80).optional()
|
|
27438
|
+
}).strict();
|
|
27439
|
+
var presentationSchema = external_exports.object({
|
|
27440
|
+
panel: external_exports.object({
|
|
27441
|
+
surface: external_exports.enum(["solid", "glass"]).optional(),
|
|
27442
|
+
elevation: external_exports.enum(["soft", "dramatic"]).optional(),
|
|
27443
|
+
border: external_exports.enum(["subtle", "strong"]).optional(),
|
|
27444
|
+
radius: external_exports.number().int().min(0).max(64).optional()
|
|
27445
|
+
}).strict().optional(),
|
|
27446
|
+
launcher: external_exports.object({
|
|
27447
|
+
style: external_exports.enum(["pill", "bubble"]).optional(),
|
|
27448
|
+
icon: external_exports.enum(["brand-mark", "chat", "none"]).optional(),
|
|
27449
|
+
size: external_exports.enum(["md", "lg"]).optional(),
|
|
27450
|
+
status: external_exports.enum(["none", "session"]).optional(),
|
|
27451
|
+
effect: external_exports.enum(["none", "pulse"]).optional()
|
|
27452
|
+
}).strict().optional(),
|
|
27453
|
+
header: external_exports.object({
|
|
27454
|
+
mark: external_exports.enum(["none", "brand-mark", "status"]).optional(),
|
|
27455
|
+
badge: external_exports.object({
|
|
27456
|
+
text: external_exports.string().trim().min(1).max(80),
|
|
27457
|
+
tone: external_exports.enum(["neutral", "success", "warning", "danger"]).optional(),
|
|
27458
|
+
indicator: external_exports.boolean().optional()
|
|
27459
|
+
}).strict().optional()
|
|
27460
|
+
}).strict().optional(),
|
|
27461
|
+
composer: external_exports.object({
|
|
27462
|
+
leadingIcon: external_exports.enum(["none", "brand-mark"]).optional(),
|
|
27463
|
+
sendIcon: external_exports.enum(["arrow-up", "paper-plane"]).optional(),
|
|
27464
|
+
shape: external_exports.enum(["rounded", "pill"]).optional()
|
|
27465
|
+
}).strict().optional(),
|
|
27466
|
+
messages: external_exports.object({
|
|
27467
|
+
userStyle: external_exports.enum(["bubble", "accent"]).optional(),
|
|
27468
|
+
assistantStyle: external_exports.enum(["plain", "bubble"]).optional()
|
|
27469
|
+
}).strict().optional()
|
|
27470
|
+
}).strict();
|
|
27471
|
+
var assistantUiSchema = external_exports.object({
|
|
27472
|
+
theme: external_exports.enum(["auto", "light", "dark", "invert"]).optional(),
|
|
27473
|
+
layout: external_exports.object({
|
|
27474
|
+
mode: external_exports.enum(["floating", "inline", "drawer"]).optional(),
|
|
27475
|
+
position: external_exports.enum(["bottom-left", "bottom-center", "bottom-right"]).optional(),
|
|
27476
|
+
panelWidth: external_exports.number().int().min(280).max(1200).optional(),
|
|
27477
|
+
panelMinHeight: external_exports.number().int().min(240).max(1600).optional(),
|
|
27478
|
+
panelMaxHeight: external_exports.number().int().min(320).max(2400).optional(),
|
|
27479
|
+
edgeOffset: external_exports.number().int().min(0).max(96).optional(),
|
|
27480
|
+
zIndex: external_exports.number().int().min(0).max(2147483647).optional(),
|
|
27481
|
+
density: external_exports.enum(["compact", "comfortable"]).optional(),
|
|
27482
|
+
mobileFullscreen: external_exports.boolean().optional()
|
|
27483
|
+
}).strict().optional(),
|
|
27484
|
+
behavior: external_exports.object({
|
|
27485
|
+
startOpen: external_exports.boolean().optional(),
|
|
27486
|
+
closeOnEscape: external_exports.boolean().optional(),
|
|
27487
|
+
closeOnOutsideClick: external_exports.boolean().optional(),
|
|
27488
|
+
showLauncher: external_exports.boolean().optional(),
|
|
27489
|
+
showHeader: external_exports.boolean().optional(),
|
|
27490
|
+
showAvatars: external_exports.boolean().optional(),
|
|
27491
|
+
showTimestamps: external_exports.boolean().optional(),
|
|
27492
|
+
showPoweredBy: external_exports.boolean().optional(),
|
|
27493
|
+
showConfirmationDetails: external_exports.boolean().optional()
|
|
27494
|
+
}).strict().optional(),
|
|
27495
|
+
labels: labelsSchema.optional(),
|
|
27496
|
+
presentation: presentationSchema.optional(),
|
|
27497
|
+
suggestedPrompts: external_exports.array(external_exports.string().trim().min(1).max(240)).max(8).optional(),
|
|
27498
|
+
privacyUrl: httpsUrlSchema.optional(),
|
|
27499
|
+
termsUrl: httpsUrlSchema.optional(),
|
|
27500
|
+
locale: external_exports.string().trim().min(2).max(35).optional(),
|
|
27501
|
+
direction: external_exports.enum(["ltr", "rtl", "auto"]).optional()
|
|
27502
|
+
}).strict();
|
|
27503
|
+
var assistantConfigurationSchema = external_exports.object({ branding: brandingSchema.optional(), assistant: assistantUiSchema.optional() }).strict();
|
|
27504
|
+
function parseAssistantConfiguration(value) {
|
|
27505
|
+
const parsed = assistantConfigurationSchema.safeParse(value);
|
|
27506
|
+
return parsed.success ? parsed.data : void 0;
|
|
27507
|
+
}
|
|
27508
|
+
function isHttpsUrl(value) {
|
|
27509
|
+
try {
|
|
27510
|
+
return new URL(value).protocol === "https:";
|
|
27511
|
+
} catch {
|
|
27512
|
+
return false;
|
|
27513
|
+
}
|
|
27514
|
+
}
|
|
27515
|
+
function isSecureBrowserAssetUrl(value) {
|
|
27516
|
+
try {
|
|
27517
|
+
const url2 = new URL(value);
|
|
27518
|
+
if (url2.protocol === "https:") return true;
|
|
27519
|
+
if (url2.protocol !== "http:") return false;
|
|
27520
|
+
return url2.hostname === "localhost" || url2.hostname === "127.0.0.1" || url2.hostname === "[::1]";
|
|
27521
|
+
} catch {
|
|
27522
|
+
return false;
|
|
27523
|
+
}
|
|
27524
|
+
}
|
|
27525
|
+
function isBoundedRgbaColor(value) {
|
|
27526
|
+
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(
|
|
27527
|
+
value
|
|
27528
|
+
);
|
|
27529
|
+
if (match === null) return false;
|
|
27530
|
+
return match.slice(1, 4).every((channel) => Number(channel) <= 255);
|
|
27531
|
+
}
|
|
27532
|
+
|
|
27360
27533
|
// src/client-errors.ts
|
|
27361
27534
|
async function refusalCode(response) {
|
|
27362
27535
|
try {
|
|
@@ -27390,6 +27563,7 @@ function parseSession(value) {
|
|
|
27390
27563
|
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") {
|
|
27391
27564
|
throw clientError("session_failed", "Assistant session response is invalid", true);
|
|
27392
27565
|
}
|
|
27566
|
+
const configuration = parseAssistantConfiguration(value.configuration);
|
|
27393
27567
|
return {
|
|
27394
27568
|
token: value.token,
|
|
27395
27569
|
expiresAt: value.expiresAt,
|
|
@@ -27401,7 +27575,7 @@ function parseSession(value) {
|
|
|
27401
27575
|
...typeof sandbox === "string" ? { sandbox } : {},
|
|
27402
27576
|
...typeof transcript === "string" ? { transcript } : {}
|
|
27403
27577
|
},
|
|
27404
|
-
...
|
|
27578
|
+
...configuration === void 0 ? {} : { configuration },
|
|
27405
27579
|
...isRecord2(value.resume) && typeof value.resume.tool === "string" ? { resume: { tool: value.resume.tool } } : {}
|
|
27406
27580
|
};
|
|
27407
27581
|
}
|
|
@@ -27495,9 +27669,9 @@ function toAssistantClientEvent(event) {
|
|
|
27495
27669
|
return { event: "unrecognized", data: { name: event.event, payload: value } };
|
|
27496
27670
|
}
|
|
27497
27671
|
function isViewAvailableDetail(value) {
|
|
27498
|
-
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(
|
|
27672
|
+
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);
|
|
27499
27673
|
}
|
|
27500
|
-
function
|
|
27674
|
+
function isHttpsUrl2(value) {
|
|
27501
27675
|
if (typeof value !== "string") return false;
|
|
27502
27676
|
try {
|
|
27503
27677
|
return new URL(value).protocol === "https:";
|
|
@@ -28581,7 +28755,7 @@ function createInteractionCard(options) {
|
|
|
28581
28755
|
if (Object.keys(businessArguments).length > 0) {
|
|
28582
28756
|
card.append(createArgumentList(businessArguments, options.reviewSchema, options.labels));
|
|
28583
28757
|
}
|
|
28584
|
-
if (action !== void 0) {
|
|
28758
|
+
if (action !== void 0 && options.showDetails !== false) {
|
|
28585
28759
|
const technical = document.createElement("details");
|
|
28586
28760
|
technical.className = "proposal-details";
|
|
28587
28761
|
const summary = document.createElement("summary");
|
|
@@ -28663,7 +28837,7 @@ function createArgumentList(arguments_, schema, labels) {
|
|
|
28663
28837
|
return list;
|
|
28664
28838
|
}
|
|
28665
28839
|
function appendValue(parent, value, schema, labels) {
|
|
28666
|
-
if (value === "[REDACTED]") {
|
|
28840
|
+
if (schema?.writeOnly === true || schema?.["x-sensitive"] === true || value === "[REDACTED]") {
|
|
28667
28841
|
const hidden = document.createElement("span");
|
|
28668
28842
|
hidden.className = "proposal-redacted";
|
|
28669
28843
|
hidden.textContent = labels.redacted;
|
|
@@ -31584,6 +31758,7 @@ var AssistantElementEventController = class {
|
|
|
31584
31758
|
...description ? { description } : {},
|
|
31585
31759
|
...arguments_ ? { arguments: arguments_ } : {},
|
|
31586
31760
|
...reviewSchema ? { reviewSchema } : {},
|
|
31761
|
+
showDetails: this.#host.showConfirmationDetails(),
|
|
31587
31762
|
labels: {
|
|
31588
31763
|
heading: labels.confirmationHeading,
|
|
31589
31764
|
accept: labels.confirm,
|
|
@@ -31853,12 +32028,14 @@ var AssistantElementHostEnvironmentController = class {
|
|
|
31853
32028
|
};
|
|
31854
32029
|
|
|
31855
32030
|
// src/element-launcher-controller.ts
|
|
32031
|
+
var COLLAPSED_LAUNCHER_WIDTH_PROPERTY = "--_ns-assistant-launcher-collapsed-width";
|
|
31856
32032
|
var AssistantElementLauncherController = class {
|
|
31857
32033
|
#host;
|
|
31858
32034
|
#appearance;
|
|
31859
32035
|
#openPanel;
|
|
31860
32036
|
#sendMessage;
|
|
31861
32037
|
#root;
|
|
32038
|
+
#measurementFrame;
|
|
31862
32039
|
constructor(options) {
|
|
31863
32040
|
this.#host = options.host;
|
|
31864
32041
|
this.#appearance = options.appearance;
|
|
@@ -31889,6 +32066,8 @@ var AssistantElementLauncherController = class {
|
|
|
31889
32066
|
}
|
|
31890
32067
|
disconnect() {
|
|
31891
32068
|
document.removeEventListener("pointerdown", this.#handleDocumentPointerDown);
|
|
32069
|
+
this.#cancelWidthMeasurement();
|
|
32070
|
+
this.#host.style.removeProperty(COLLAPSED_LAUNCHER_WIDTH_PROPERTY);
|
|
31892
32071
|
this.#root = void 0;
|
|
31893
32072
|
}
|
|
31894
32073
|
sync() {
|
|
@@ -31910,7 +32089,13 @@ var AssistantElementLauncherController = class {
|
|
|
31910
32089
|
);
|
|
31911
32090
|
queryRequired(root, ".launcher").hidden = !appearance.behavior.showLauncher;
|
|
31912
32091
|
queryRequired(root, ".powered-by-row").hidden = !appearance.behavior.showPoweredBy;
|
|
31913
|
-
if (style === "bubble" || this.#host.hasAttribute("open"))
|
|
32092
|
+
if (style === "bubble" || this.#host.hasAttribute("open")) {
|
|
32093
|
+
this.#cancelWidthMeasurement();
|
|
32094
|
+
this.#host.style.removeProperty(COLLAPSED_LAUNCHER_WIDTH_PROPERTY);
|
|
32095
|
+
this.collapse(true);
|
|
32096
|
+
return;
|
|
32097
|
+
}
|
|
32098
|
+
if (!this.#host.hasAttribute("launcher-expanded")) this.#scheduleWidthMeasurement();
|
|
31914
32099
|
}
|
|
31915
32100
|
collapse(force = false) {
|
|
31916
32101
|
const root = this.#root;
|
|
@@ -31931,6 +32116,9 @@ var AssistantElementLauncherController = class {
|
|
|
31931
32116
|
#expand() {
|
|
31932
32117
|
const root = this.#root;
|
|
31933
32118
|
if (!root || this.#appearance().presentation.launcher.style === "bubble") return;
|
|
32119
|
+
this.#cancelWidthMeasurement();
|
|
32120
|
+
this.#measureCollapsedWidth();
|
|
32121
|
+
void queryRequired(root, ".launcher").offsetWidth;
|
|
31934
32122
|
this.#host.setAttribute("launcher-expanded", "");
|
|
31935
32123
|
const form = queryRequired(root, ".launcher-form");
|
|
31936
32124
|
const trigger = queryRequired(root, ".launcher-trigger");
|
|
@@ -31942,6 +32130,31 @@ var AssistantElementLauncherController = class {
|
|
|
31942
32130
|
if (this.#host.hasAttribute("launcher-expanded")) input.focus();
|
|
31943
32131
|
});
|
|
31944
32132
|
}
|
|
32133
|
+
#scheduleWidthMeasurement() {
|
|
32134
|
+
this.#cancelWidthMeasurement();
|
|
32135
|
+
this.#host.style.removeProperty(COLLAPSED_LAUNCHER_WIDTH_PROPERTY);
|
|
32136
|
+
this.#measurementFrame = requestAnimationFrame(() => {
|
|
32137
|
+
this.#measurementFrame = void 0;
|
|
32138
|
+
this.#measureCollapsedWidth();
|
|
32139
|
+
});
|
|
32140
|
+
}
|
|
32141
|
+
#cancelWidthMeasurement() {
|
|
32142
|
+
if (this.#measurementFrame === void 0) return;
|
|
32143
|
+
cancelAnimationFrame(this.#measurementFrame);
|
|
32144
|
+
this.#measurementFrame = void 0;
|
|
32145
|
+
}
|
|
32146
|
+
#measureCollapsedWidth() {
|
|
32147
|
+
const root = this.#root;
|
|
32148
|
+
if (!root || this.#host.hasAttribute("launcher-expanded") || this.#appearance().presentation.launcher.style === "bubble") {
|
|
32149
|
+
return;
|
|
32150
|
+
}
|
|
32151
|
+
const launcher = queryRequired(root, ".launcher");
|
|
32152
|
+
this.#host.style.removeProperty(COLLAPSED_LAUNCHER_WIDTH_PROPERTY);
|
|
32153
|
+
const collapsedWidth = launcher.offsetWidth;
|
|
32154
|
+
if (collapsedWidth > 0) {
|
|
32155
|
+
this.#host.style.setProperty(COLLAPSED_LAUNCHER_WIDTH_PROPERTY, `${collapsedWidth}px`);
|
|
32156
|
+
}
|
|
32157
|
+
}
|
|
31945
32158
|
#handleTrigger = () => {
|
|
31946
32159
|
if (this.#appearance().presentation.launcher.style === "bubble") {
|
|
31947
32160
|
this.#openPanel();
|
|
@@ -31981,7 +32194,7 @@ var AssistantElementLauncherController = class {
|
|
|
31981
32194
|
};
|
|
31982
32195
|
#handleDocumentPointerDown = (event) => {
|
|
31983
32196
|
if (event.composedPath().includes(this.#host)) return;
|
|
31984
|
-
this.collapse();
|
|
32197
|
+
this.collapse(true);
|
|
31985
32198
|
};
|
|
31986
32199
|
};
|
|
31987
32200
|
|
|
@@ -32054,177 +32267,6 @@ var AssistantElementPresentationGate = class {
|
|
|
32054
32267
|
}
|
|
32055
32268
|
};
|
|
32056
32269
|
|
|
32057
|
-
// src/assistant-configuration-schema.ts
|
|
32058
|
-
var hexColorSchema = external_exports.string().regex(/^#[0-9A-Fa-f]{6}$/);
|
|
32059
|
-
var resolvedBorderColorSchema = external_exports.union([
|
|
32060
|
-
hexColorSchema,
|
|
32061
|
-
external_exports.string().max(64).refine(isBoundedRgbaColor, "must be a six-digit hex or bounded rgba color")
|
|
32062
|
-
]);
|
|
32063
|
-
var browserAssetUrlSchema = external_exports.string().trim().url().refine(isSecureBrowserAssetUrl, "must use https (http is allowed only for loopback testing)");
|
|
32064
|
-
var httpsUrlSchema = external_exports.string().trim().url().refine(isHttpsUrl2, "must use https");
|
|
32065
|
-
var brandAssetSchema = external_exports.object({
|
|
32066
|
-
uri: browserAssetUrlSchema,
|
|
32067
|
-
darkUri: browserAssetUrlSchema.optional(),
|
|
32068
|
-
alt: external_exports.string().trim().min(1).max(240)
|
|
32069
|
-
}).strict();
|
|
32070
|
-
var brandThemeSchema = external_exports.object({
|
|
32071
|
-
surface: hexColorSchema.optional(),
|
|
32072
|
-
surfaceRaised: hexColorSchema.optional(),
|
|
32073
|
-
surfaceMuted: hexColorSchema.optional(),
|
|
32074
|
-
text: hexColorSchema.optional(),
|
|
32075
|
-
textMuted: hexColorSchema.optional(),
|
|
32076
|
-
accent: hexColorSchema.optional(),
|
|
32077
|
-
accentText: hexColorSchema.optional(),
|
|
32078
|
-
link: hexColorSchema.optional(),
|
|
32079
|
-
border: resolvedBorderColorSchema.optional(),
|
|
32080
|
-
borderStrong: resolvedBorderColorSchema.optional(),
|
|
32081
|
-
focus: hexColorSchema.optional(),
|
|
32082
|
-
success: hexColorSchema.optional(),
|
|
32083
|
-
warning: hexColorSchema.optional(),
|
|
32084
|
-
danger: hexColorSchema.optional(),
|
|
32085
|
-
code: hexColorSchema.optional()
|
|
32086
|
-
}).strict();
|
|
32087
|
-
var brandingSchema = external_exports.object({
|
|
32088
|
-
name: external_exports.string().trim().min(1).max(160).optional(),
|
|
32089
|
-
accent: hexColorSchema.optional(),
|
|
32090
|
-
surface: hexColorSchema.optional(),
|
|
32091
|
-
surfaceDark: hexColorSchema.optional(),
|
|
32092
|
-
logo: brandAssetSchema.optional(),
|
|
32093
|
-
mark: brandAssetSchema.optional(),
|
|
32094
|
-
avatar: brandAssetSchema.optional(),
|
|
32095
|
-
theme: external_exports.object({ light: brandThemeSchema.optional(), dark: brandThemeSchema.optional() }).strict().optional(),
|
|
32096
|
-
radius: external_exports.enum(["none", "sm", "md", "lg"]).optional(),
|
|
32097
|
-
density: external_exports.enum(["compact", "comfortable"]).optional(),
|
|
32098
|
-
typography: external_exports.enum(["system", "serif", "mono"]).optional(),
|
|
32099
|
-
colorScheme: external_exports.enum(["auto", "light", "dark"]).optional()
|
|
32100
|
-
}).strict();
|
|
32101
|
-
var labelsSchema = external_exports.object({
|
|
32102
|
-
welcomeHeading: external_exports.string().trim().min(1).max(160).optional(),
|
|
32103
|
-
welcomeMessage: external_exports.string().max(1e3).optional(),
|
|
32104
|
-
launcherPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
|
|
32105
|
-
composerPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
|
|
32106
|
-
thinking: external_exports.string().trim().min(1).max(80).optional(),
|
|
32107
|
-
send: external_exports.string().trim().min(1).max(80).optional(),
|
|
32108
|
-
stop: external_exports.string().trim().min(1).max(80).optional(),
|
|
32109
|
-
close: external_exports.string().trim().min(1).max(80).optional(),
|
|
32110
|
-
open: external_exports.string().trim().min(1).max(80).optional(),
|
|
32111
|
-
confirm: external_exports.string().trim().min(1).max(80).optional(),
|
|
32112
|
-
decline: external_exports.string().trim().min(1).max(80).optional(),
|
|
32113
|
-
cancel: external_exports.string().trim().min(1).max(80).optional(),
|
|
32114
|
-
confirmationHeading: external_exports.string().trim().min(1).max(120).optional(),
|
|
32115
|
-
additionalDetails: external_exports.string().trim().min(1).max(120).optional(),
|
|
32116
|
-
redacted: external_exports.string().trim().min(1).max(120).optional(),
|
|
32117
|
-
completed: external_exports.string().trim().min(1).max(80).optional(),
|
|
32118
|
-
stopped: external_exports.string().trim().min(1).max(80).optional(),
|
|
32119
|
-
copy: external_exports.string().trim().min(1).max(80).optional(),
|
|
32120
|
-
newMessages: external_exports.string().trim().min(1).max(80).optional(),
|
|
32121
|
-
reconnect: external_exports.string().trim().min(1).max(80).optional(),
|
|
32122
|
-
newConversation: external_exports.string().trim().min(1).max(80).optional(),
|
|
32123
|
-
retry: external_exports.string().trim().min(1).max(80).optional(),
|
|
32124
|
-
unavailable: external_exports.string().trim().min(1).max(240).optional(),
|
|
32125
|
-
sessionExpired: external_exports.string().trim().min(1).max(240).optional(),
|
|
32126
|
-
sessionIdle: external_exports.string().trim().min(1).max(120).optional(),
|
|
32127
|
-
sessionLoading: external_exports.string().trim().min(1).max(120).optional(),
|
|
32128
|
-
sessionReady: external_exports.string().trim().min(1).max(120).optional(),
|
|
32129
|
-
sessionError: external_exports.string().trim().min(1).max(120).optional(),
|
|
32130
|
-
signInHeading: external_exports.string().trim().min(1).max(120).optional(),
|
|
32131
|
-
signInBody: external_exports.string().max(240).optional(),
|
|
32132
|
-
signInAction: external_exports.string().trim().min(1).max(80).optional(),
|
|
32133
|
-
signUpAction: external_exports.string().trim().min(1).max(80).optional()
|
|
32134
|
-
}).strict();
|
|
32135
|
-
var presentationSchema = external_exports.object({
|
|
32136
|
-
panel: external_exports.object({
|
|
32137
|
-
surface: external_exports.enum(["solid", "glass"]).optional(),
|
|
32138
|
-
elevation: external_exports.enum(["soft", "dramatic"]).optional(),
|
|
32139
|
-
border: external_exports.enum(["subtle", "strong"]).optional(),
|
|
32140
|
-
radius: external_exports.number().int().min(0).max(64).optional()
|
|
32141
|
-
}).strict().optional(),
|
|
32142
|
-
launcher: external_exports.object({
|
|
32143
|
-
style: external_exports.enum(["pill", "bubble"]).optional(),
|
|
32144
|
-
icon: external_exports.enum(["brand-mark", "chat", "none"]).optional(),
|
|
32145
|
-
size: external_exports.enum(["md", "lg"]).optional(),
|
|
32146
|
-
status: external_exports.enum(["none", "session"]).optional(),
|
|
32147
|
-
effect: external_exports.enum(["none", "pulse"]).optional()
|
|
32148
|
-
}).strict().optional(),
|
|
32149
|
-
header: external_exports.object({
|
|
32150
|
-
mark: external_exports.enum(["none", "brand-mark", "status"]).optional(),
|
|
32151
|
-
badge: external_exports.object({
|
|
32152
|
-
text: external_exports.string().trim().min(1).max(80),
|
|
32153
|
-
tone: external_exports.enum(["neutral", "success", "warning", "danger"]).optional(),
|
|
32154
|
-
indicator: external_exports.boolean().optional()
|
|
32155
|
-
}).strict().optional()
|
|
32156
|
-
}).strict().optional(),
|
|
32157
|
-
composer: external_exports.object({
|
|
32158
|
-
leadingIcon: external_exports.enum(["none", "brand-mark"]).optional(),
|
|
32159
|
-
sendIcon: external_exports.enum(["arrow-up", "paper-plane"]).optional(),
|
|
32160
|
-
shape: external_exports.enum(["rounded", "pill"]).optional()
|
|
32161
|
-
}).strict().optional(),
|
|
32162
|
-
messages: external_exports.object({
|
|
32163
|
-
userStyle: external_exports.enum(["bubble", "accent"]).optional(),
|
|
32164
|
-
assistantStyle: external_exports.enum(["plain", "bubble"]).optional()
|
|
32165
|
-
}).strict().optional()
|
|
32166
|
-
}).strict();
|
|
32167
|
-
var assistantUiSchema = external_exports.object({
|
|
32168
|
-
theme: external_exports.enum(["auto", "light", "dark", "invert"]).optional(),
|
|
32169
|
-
layout: external_exports.object({
|
|
32170
|
-
mode: external_exports.enum(["floating", "inline", "drawer"]).optional(),
|
|
32171
|
-
position: external_exports.enum(["bottom-left", "bottom-center", "bottom-right"]).optional(),
|
|
32172
|
-
panelWidth: external_exports.number().int().min(280).max(1200).optional(),
|
|
32173
|
-
panelMinHeight: external_exports.number().int().min(240).max(1600).optional(),
|
|
32174
|
-
panelMaxHeight: external_exports.number().int().min(320).max(2400).optional(),
|
|
32175
|
-
edgeOffset: external_exports.number().int().min(0).max(96).optional(),
|
|
32176
|
-
zIndex: external_exports.number().int().min(0).max(2147483647).optional(),
|
|
32177
|
-
density: external_exports.enum(["compact", "comfortable"]).optional(),
|
|
32178
|
-
mobileFullscreen: external_exports.boolean().optional()
|
|
32179
|
-
}).strict().optional(),
|
|
32180
|
-
behavior: external_exports.object({
|
|
32181
|
-
startOpen: external_exports.boolean().optional(),
|
|
32182
|
-
closeOnEscape: external_exports.boolean().optional(),
|
|
32183
|
-
closeOnOutsideClick: external_exports.boolean().optional(),
|
|
32184
|
-
showLauncher: external_exports.boolean().optional(),
|
|
32185
|
-
showHeader: external_exports.boolean().optional(),
|
|
32186
|
-
showAvatars: external_exports.boolean().optional(),
|
|
32187
|
-
showTimestamps: external_exports.boolean().optional(),
|
|
32188
|
-
showPoweredBy: external_exports.boolean().optional()
|
|
32189
|
-
}).strict().optional(),
|
|
32190
|
-
labels: labelsSchema.optional(),
|
|
32191
|
-
presentation: presentationSchema.optional(),
|
|
32192
|
-
suggestedPrompts: external_exports.array(external_exports.string().trim().min(1).max(240)).max(8).optional(),
|
|
32193
|
-
privacyUrl: httpsUrlSchema.optional(),
|
|
32194
|
-
termsUrl: httpsUrlSchema.optional(),
|
|
32195
|
-
locale: external_exports.string().trim().min(2).max(35).optional(),
|
|
32196
|
-
direction: external_exports.enum(["ltr", "rtl", "auto"]).optional()
|
|
32197
|
-
}).strict();
|
|
32198
|
-
var assistantConfigurationSchema = external_exports.object({ branding: brandingSchema.optional(), assistant: assistantUiSchema.optional() }).strict();
|
|
32199
|
-
function parseAssistantConfiguration(value) {
|
|
32200
|
-
const parsed = assistantConfigurationSchema.safeParse(value);
|
|
32201
|
-
return parsed.success ? parsed.data : void 0;
|
|
32202
|
-
}
|
|
32203
|
-
function isHttpsUrl2(value) {
|
|
32204
|
-
try {
|
|
32205
|
-
return new URL(value).protocol === "https:";
|
|
32206
|
-
} catch {
|
|
32207
|
-
return false;
|
|
32208
|
-
}
|
|
32209
|
-
}
|
|
32210
|
-
function isSecureBrowserAssetUrl(value) {
|
|
32211
|
-
try {
|
|
32212
|
-
const url2 = new URL(value);
|
|
32213
|
-
if (url2.protocol === "https:") return true;
|
|
32214
|
-
if (url2.protocol !== "http:") return false;
|
|
32215
|
-
return url2.hostname === "localhost" || url2.hostname === "127.0.0.1" || url2.hostname === "[::1]";
|
|
32216
|
-
} catch {
|
|
32217
|
-
return false;
|
|
32218
|
-
}
|
|
32219
|
-
}
|
|
32220
|
-
function isBoundedRgbaColor(value) {
|
|
32221
|
-
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(
|
|
32222
|
-
value
|
|
32223
|
-
);
|
|
32224
|
-
if (match === null) return false;
|
|
32225
|
-
return match.slice(1, 4).every((channel) => Number(channel) <= 255);
|
|
32226
|
-
}
|
|
32227
|
-
|
|
32228
32270
|
// src/element-public-configuration-controller.ts
|
|
32229
32271
|
var AssistantElementPublicConfigurationController = class {
|
|
32230
32272
|
#source;
|
|
@@ -32427,12 +32469,12 @@ var ASSISTANT_ELEMENT_STYLES = `<style>
|
|
|
32427
32469
|
:host([data-mode="floating"][open]) { width: min(var(--ns-assistant-panel-width, var(--ns-assistant-default-panel-width)), 100vw); }
|
|
32428
32470
|
button { font: inherit; }
|
|
32429
32471
|
button, textarea, input, select { -webkit-tap-highlight-color: transparent; }
|
|
32430
|
-
.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; }
|
|
32472
|
+
.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; }
|
|
32431
32473
|
:host([data-presentation-ready]) .launcher { padding: 10px 12px; }
|
|
32432
32474
|
.launcher[hidden] { display: none; }
|
|
32433
32475
|
.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); }
|
|
32434
32476
|
.launcher-trigger, .launcher-form { min-width: 0; margin: 0; padding: 0; border: 0; background: transparent; font: inherit; }
|
|
32435
|
-
.launcher-trigger { display: flex; align-items: center; gap: 12px; min-height: 28px; color: var(--ns-assistant-
|
|
32477
|
+
.launcher-trigger { display: flex; align-items: center; gap: 12px; min-height: 28px; color: var(--ns-assistant-launcher-text, var(--ns-assistant-text, var(--ns-assistant-default-text))); cursor: text; }
|
|
32436
32478
|
.launcher-label { padding-left: 6px; white-space: nowrap; font-size: 15px; line-height: 20px; }
|
|
32437
32479
|
.launcher-arrow, .launcher-send { position: relative; display: grid; width: 28px; height: 28px; flex: 0 0 28px; place-items: center; border: 0; border-radius: 50%; color: var(--ns-assistant-text, var(--ns-assistant-default-text)); background: var(--ns-assistant-launcher-action, var(--ns-assistant-halo-launcher-action)); cursor: pointer; }
|
|
32438
32480
|
.launcher-arrow:hover, .launcher-send:hover { background: var(--ns-assistant-launcher-action-hover, var(--ns-assistant-halo-launcher-action-hover)); }
|
|
@@ -32971,19 +33013,11 @@ var presentationStyles = `<style>
|
|
|
32971
33013
|
width: 28px;
|
|
32972
33014
|
height: 28px;
|
|
32973
33015
|
border-radius: 50%;
|
|
32974
|
-
|
|
32975
|
-
opacity: .6;
|
|
32976
|
-
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);
|
|
32977
|
-
}
|
|
32978
|
-
.launcher:hover .launcher-glyph:is(img), :host([launcher-expanded]) .launcher-glyph:is(img) {
|
|
32979
|
-
filter: none;
|
|
32980
|
-
opacity: 1;
|
|
33016
|
+
transition: width .5s cubic-bezier(.25,1,.5,1), height .5s cubic-bezier(.25,1,.5,1);
|
|
32981
33017
|
}
|
|
32982
33018
|
:host([data-launcher-style="bubble"]) .launcher-glyph:is(img) {
|
|
32983
33019
|
width: 32px;
|
|
32984
33020
|
height: 32px;
|
|
32985
|
-
filter: none;
|
|
32986
|
-
opacity: 1;
|
|
32987
33021
|
}
|
|
32988
33022
|
.launcher-status {
|
|
32989
33023
|
position: absolute;
|
|
@@ -33179,6 +33213,7 @@ var NoodleAssistantElement = class extends HTMLElementBase {
|
|
|
33179
33213
|
},
|
|
33180
33214
|
applyConfiguration: (configuration) => this.#applyConfiguration(configuration),
|
|
33181
33215
|
labels: () => this.#appearance.labels,
|
|
33216
|
+
showConfirmationDetails: () => this.#appearance.behavior.showConfirmationDetails,
|
|
33182
33217
|
respond: (id, response) => this.respond(id, response),
|
|
33183
33218
|
dispatchError: (detail) => this.#dispatchError(detail),
|
|
33184
33219
|
revealLatest: () => this.#revealLatest(),
|