@noodleseed/assistant 1.26.0 → 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.
Files changed (39) hide show
  1. package/README.md +25 -2
  2. package/dist/{app-view-element-CiFVNIke.d.cts → app-view-element-BjRkwNN1.d.cts} +1 -1
  3. package/dist/{app-view-element-C_ATXseu.d.ts → app-view-element-mXHvcAXc.d.ts} +1 -1
  4. package/dist/app-view.d.cts +3 -3
  5. package/dist/app-view.d.ts +3 -3
  6. package/dist/{appearance-C24W6BRj.d.cts → appearance-BpVu3lpk.d.cts} +1 -0
  7. package/dist/{appearance-C24W6BRj.d.ts → appearance-BpVu3lpk.d.ts} +1 -0
  8. package/dist/{chunk-5PW6PXCI.js → chunk-2A3ZEYZV.js} +51 -180
  9. package/dist/chunk-2A3ZEYZV.js.map +1 -0
  10. package/dist/{chunk-FNXAVRL5.js → chunk-WJV4MJUR.js} +178 -4
  11. package/dist/chunk-WJV4MJUR.js.map +1 -0
  12. package/dist/{client-BheCOERq.d.ts → client-CPFw8tfo.d.ts} +1 -1
  13. package/dist/{client-BiMRVxjs.d.cts → client-_xivfs4q.d.cts} +1 -1
  14. package/dist/client.cjs +176 -3
  15. package/dist/client.cjs.map +1 -1
  16. package/dist/client.d.cts +2 -2
  17. package/dist/client.d.ts +2 -2
  18. package/dist/client.js +1 -1
  19. package/dist/embed.global.js +41 -49
  20. package/dist/index.cjs +224 -178
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.d.cts +3 -3
  23. package/dist/index.d.ts +3 -3
  24. package/dist/index.js +2 -2
  25. package/dist/react/client.cjs +176 -3
  26. package/dist/react/client.cjs.map +1 -1
  27. package/dist/react/client.d.cts +2 -2
  28. package/dist/react/client.d.ts +2 -2
  29. package/dist/react/client.js +1 -1
  30. package/dist/react.cjs +224 -178
  31. package/dist/react.cjs.map +1 -1
  32. package/dist/react.d.cts +3 -3
  33. package/dist/react.d.ts +3 -3
  34. package/dist/react.js +2 -2
  35. package/dist/server.d.cts +1 -1
  36. package/dist/server.d.ts +1 -1
  37. package/package.json +1 -1
  38. package/dist/chunk-5PW6PXCI.js.map +0 -1
  39. package/dist/chunk-FNXAVRL5.js.map +0 -1
package/README.md CHANGED
@@ -96,7 +96,11 @@ export default server(
96
96
  edgeOffset: 20,
97
97
  },
98
98
  theme: "invert",
99
- behavior: { showTimestamps: true, showPoweredBy: false },
99
+ behavior: {
100
+ showTimestamps: true,
101
+ showPoweredBy: false,
102
+ showConfirmationDetails: false,
103
+ },
100
104
  labels: {
101
105
  welcomeHeading: "How can Acme help?",
102
106
  welcomeMessage: "Fast answers from the tools your team already uses.",
@@ -160,6 +164,14 @@ The generic prompt chips ship as defaults, while an authored list—including `[
160
164
  “Available on ChatGPT” promotion. Partial configuration objects merge with the remaining defaults;
161
165
  `presentation.panel.surface: "glass"` remains available when a translucent panel is intentional.
162
166
 
167
+ `behavior.showConfirmationDetails` defaults to `true`. Set it to `false` to remove the built-in
168
+ confirmation card's Additional details disclosure and connector mechanics while keeping its title,
169
+ description, schema-projected business fields, Confirm, and Don't proceed controls. The option changes only
170
+ the managed Web Component's presentation: `confirm: true` still suspends execution, the connector still runs
171
+ only after acceptance, and decline/cancel still stop. Public `embedId` and authenticated `sessionEndpoint`
172
+ React mounts both honor the deployed value without a client prop. Headless/BYO renderers keep the unchanged
173
+ `data-confirmation` part and choose their own presentation.
174
+
163
175
  ### Configure and deploy
164
176
 
165
177
  Configure the model through Noodle managed config, validate, and deploy the assistant-enabled server before
@@ -221,6 +233,17 @@ same assistant to anonymous visitors — a marketing site, docs, or landing page
221
233
  capability allowlist, per-surface daily budgets, and a kill switch. `noodle deploy` provisions a stable
222
234
  embed id and prints a one-line snippet; the embed id is deliberately not a credential:
223
235
 
236
+ ```ts
237
+ assistant: embeddedAssistant({
238
+ model,
239
+ access: publicWebsite({
240
+ origins: ["https://www.example.com"],
241
+ capabilities: [answerProductQuestion],
242
+ }),
243
+ behavior: { showConfirmationDetails: false },
244
+ }),
245
+ ```
246
+
224
247
  ```html
225
248
  <script src="https://cloud.noodleseed.dev/v1/assistant/embed.js"
226
249
  data-embed-id="pub_7f2q4k9x" async></script>
@@ -688,7 +711,7 @@ context.
688
711
 
689
712
  Server branding controls customer name, themed logo/mark/avatar assets, semantic light/dark colors, density,
690
713
  radius, typography, and automatic theme. `embeddedAssistant(...)` controls theme selection,
691
- floating/inline/drawer layout, position and dimensions, mobile and launcher/header/avatar/timestamp/attribution behavior, visible labels, suggested
714
+ floating/inline/drawer layout, position and dimensions, mobile and launcher/header/avatar/timestamp/attribution/confirmation-detail behavior, visible labels, suggested
692
715
  prompts, privacy/terms links, locale, and text direction.
693
716
  Named slots cover launcher/header/composer/footer extensions. Public methods include `open`, `close`,
694
717
  `toggle`, `focusComposer`, `sendMessage`, `stop`, `reconnect`, `updateContext`, `updateModelContext`, `respond`, `confirmTool`, and `resetSession`;
@@ -1,4 +1,4 @@
1
- import { A as AssistantClient, a as AssistantViewAvailableDetail, e as AssistantErrorDetail } from './client-BiMRVxjs.cjs';
1
+ import { A as AssistantClient, a as AssistantViewAvailableDetail, e as AssistantErrorDetail } from './client-_xivfs4q.cjs';
2
2
 
3
3
  declare const APP_VIEW_TAG_NAME = "noodle-app-view";
4
4
  interface AssistantAppViewErrorDetail {
@@ -1,4 +1,4 @@
1
- import { A as AssistantClient, a as AssistantViewAvailableDetail, e as AssistantErrorDetail } from './client-BheCOERq.js';
1
+ import { A as AssistantClient, a as AssistantViewAvailableDetail, e as AssistantErrorDetail } from './client-CPFw8tfo.js';
2
2
 
3
3
  declare const APP_VIEW_TAG_NAME = "noodle-app-view";
4
4
  interface AssistantAppViewErrorDetail {
@@ -1,6 +1,6 @@
1
- export { A as APP_VIEW_TAG_NAME, a as AssistantAppViewErrorDetail, N as NoodleAppViewElement } from './app-view-element-CiFVNIke.cjs';
2
- export { A as AssistantClient, a as AssistantViewAvailableDetail } from './client-BiMRVxjs.cjs';
3
- import './appearance-C24W6BRj.cjs';
1
+ export { A as APP_VIEW_TAG_NAME, a as AssistantAppViewErrorDetail, N as NoodleAppViewElement } from './app-view-element-BjRkwNN1.cjs';
2
+ export { A as AssistantClient, a as AssistantViewAvailableDetail } from './client-_xivfs4q.cjs';
3
+ import './appearance-BpVu3lpk.cjs';
4
4
  import 'ai';
5
5
 
6
6
  /** Register the framework-neutral MCP App host. Safe to call more than once or during SSR. */
@@ -1,6 +1,6 @@
1
- export { A as APP_VIEW_TAG_NAME, a as AssistantAppViewErrorDetail, N as NoodleAppViewElement } from './app-view-element-C_ATXseu.js';
2
- export { A as AssistantClient, a as AssistantViewAvailableDetail } from './client-BheCOERq.js';
3
- import './appearance-C24W6BRj.js';
1
+ export { A as APP_VIEW_TAG_NAME, a as AssistantAppViewErrorDetail, N as NoodleAppViewElement } from './app-view-element-mXHvcAXc.js';
2
+ export { A as AssistantClient, a as AssistantViewAvailableDetail } from './client-CPFw8tfo.js';
3
+ import './appearance-BpVu3lpk.js';
4
4
  import 'ai';
5
5
 
6
6
  /** Register the framework-neutral MCP App host. Safe to call more than once or during SSR. */
@@ -98,6 +98,7 @@ interface AssistantUiConfiguration {
98
98
  readonly showAvatars?: boolean;
99
99
  readonly showTimestamps?: boolean;
100
100
  readonly showPoweredBy?: boolean;
101
+ readonly showConfirmationDetails?: boolean;
101
102
  };
102
103
  readonly labels?: Partial<AssistantLabels>;
103
104
  readonly presentation?: AssistantPresentationConfiguration;
@@ -98,6 +98,7 @@ interface AssistantUiConfiguration {
98
98
  readonly showAvatars?: boolean;
99
99
  readonly showTimestamps?: boolean;
100
100
  readonly showPoweredBy?: boolean;
101
+ readonly showConfirmationDetails?: boolean;
101
102
  };
102
103
  readonly labels?: Partial<AssistantLabels>;
103
104
  readonly presentation?: AssistantPresentationConfiguration;
@@ -8,12 +8,10 @@ import {
8
8
  copyAssistantModelContext,
9
9
  copyAssistantPageContext,
10
10
  createAssistantClient,
11
+ parseAssistantConfiguration,
11
12
  publicConfigurationUrl,
12
13
  sessionSourceKey
13
- } from "./chunk-FNXAVRL5.js";
14
- import {
15
- external_exports
16
- } from "./chunk-3YYTUJPJ.js";
14
+ } from "./chunk-WJV4MJUR.js";
17
15
 
18
16
  // src/appearance.ts
19
17
  var common = {
@@ -101,7 +99,8 @@ var DEFAULT_APPEARANCE = {
101
99
  showHeader: true,
102
100
  showAvatars: true,
103
101
  showTimestamps: false,
104
- showPoweredBy: true
102
+ showPoweredBy: true,
103
+ showConfirmationDetails: true
105
104
  },
106
105
  labels: {
107
106
  welcomeHeading: "",
@@ -744,7 +743,7 @@ function createInteractionCard(options) {
744
743
  if (Object.keys(businessArguments).length > 0) {
745
744
  card.append(createArgumentList(businessArguments, options.reviewSchema, options.labels));
746
745
  }
747
- if (action !== void 0) {
746
+ if (action !== void 0 && options.showDetails !== false) {
748
747
  const technical = document.createElement("details");
749
748
  technical.className = "proposal-details";
750
749
  const summary = document.createElement("summary");
@@ -826,7 +825,7 @@ function createArgumentList(arguments_, schema, labels) {
826
825
  return list;
827
826
  }
828
827
  function appendValue(parent, value, schema, labels) {
829
- if (value === "[REDACTED]") {
828
+ if (schema?.writeOnly === true || schema?.["x-sensitive"] === true || value === "[REDACTED]") {
830
829
  const hidden = document.createElement("span");
831
830
  hidden.className = "proposal-redacted";
832
831
  hidden.textContent = labels.redacted;
@@ -3747,6 +3746,7 @@ var AssistantElementEventController = class {
3747
3746
  ...description ? { description } : {},
3748
3747
  ...arguments_ ? { arguments: arguments_ } : {},
3749
3748
  ...reviewSchema ? { reviewSchema } : {},
3749
+ showDetails: this.#host.showConfirmationDetails(),
3750
3750
  labels: {
3751
3751
  heading: labels.confirmationHeading,
3752
3752
  accept: labels.confirm,
@@ -4016,12 +4016,14 @@ var AssistantElementHostEnvironmentController = class {
4016
4016
  };
4017
4017
 
4018
4018
  // src/element-launcher-controller.ts
4019
+ var COLLAPSED_LAUNCHER_WIDTH_PROPERTY = "--_ns-assistant-launcher-collapsed-width";
4019
4020
  var AssistantElementLauncherController = class {
4020
4021
  #host;
4021
4022
  #appearance;
4022
4023
  #openPanel;
4023
4024
  #sendMessage;
4024
4025
  #root;
4026
+ #measurementFrame;
4025
4027
  constructor(options) {
4026
4028
  this.#host = options.host;
4027
4029
  this.#appearance = options.appearance;
@@ -4052,6 +4054,8 @@ var AssistantElementLauncherController = class {
4052
4054
  }
4053
4055
  disconnect() {
4054
4056
  document.removeEventListener("pointerdown", this.#handleDocumentPointerDown);
4057
+ this.#cancelWidthMeasurement();
4058
+ this.#host.style.removeProperty(COLLAPSED_LAUNCHER_WIDTH_PROPERTY);
4055
4059
  this.#root = void 0;
4056
4060
  }
4057
4061
  sync() {
@@ -4073,7 +4077,13 @@ var AssistantElementLauncherController = class {
4073
4077
  );
4074
4078
  queryRequired(root, ".launcher").hidden = !appearance.behavior.showLauncher;
4075
4079
  queryRequired(root, ".powered-by-row").hidden = !appearance.behavior.showPoweredBy;
4076
- if (style === "bubble" || this.#host.hasAttribute("open")) this.collapse(true);
4080
+ if (style === "bubble" || this.#host.hasAttribute("open")) {
4081
+ this.#cancelWidthMeasurement();
4082
+ this.#host.style.removeProperty(COLLAPSED_LAUNCHER_WIDTH_PROPERTY);
4083
+ this.collapse(true);
4084
+ return;
4085
+ }
4086
+ if (!this.#host.hasAttribute("launcher-expanded")) this.#scheduleWidthMeasurement();
4077
4087
  }
4078
4088
  collapse(force = false) {
4079
4089
  const root = this.#root;
@@ -4094,6 +4104,9 @@ var AssistantElementLauncherController = class {
4094
4104
  #expand() {
4095
4105
  const root = this.#root;
4096
4106
  if (!root || this.#appearance().presentation.launcher.style === "bubble") return;
4107
+ this.#cancelWidthMeasurement();
4108
+ this.#measureCollapsedWidth();
4109
+ void queryRequired(root, ".launcher").offsetWidth;
4097
4110
  this.#host.setAttribute("launcher-expanded", "");
4098
4111
  const form = queryRequired(root, ".launcher-form");
4099
4112
  const trigger = queryRequired(root, ".launcher-trigger");
@@ -4105,6 +4118,31 @@ var AssistantElementLauncherController = class {
4105
4118
  if (this.#host.hasAttribute("launcher-expanded")) input.focus();
4106
4119
  });
4107
4120
  }
4121
+ #scheduleWidthMeasurement() {
4122
+ this.#cancelWidthMeasurement();
4123
+ this.#host.style.removeProperty(COLLAPSED_LAUNCHER_WIDTH_PROPERTY);
4124
+ this.#measurementFrame = requestAnimationFrame(() => {
4125
+ this.#measurementFrame = void 0;
4126
+ this.#measureCollapsedWidth();
4127
+ });
4128
+ }
4129
+ #cancelWidthMeasurement() {
4130
+ if (this.#measurementFrame === void 0) return;
4131
+ cancelAnimationFrame(this.#measurementFrame);
4132
+ this.#measurementFrame = void 0;
4133
+ }
4134
+ #measureCollapsedWidth() {
4135
+ const root = this.#root;
4136
+ if (!root || this.#host.hasAttribute("launcher-expanded") || this.#appearance().presentation.launcher.style === "bubble") {
4137
+ return;
4138
+ }
4139
+ const launcher = queryRequired(root, ".launcher");
4140
+ this.#host.style.removeProperty(COLLAPSED_LAUNCHER_WIDTH_PROPERTY);
4141
+ const collapsedWidth = launcher.offsetWidth;
4142
+ if (collapsedWidth > 0) {
4143
+ this.#host.style.setProperty(COLLAPSED_LAUNCHER_WIDTH_PROPERTY, `${collapsedWidth}px`);
4144
+ }
4145
+ }
4108
4146
  #handleTrigger = () => {
4109
4147
  if (this.#appearance().presentation.launcher.style === "bubble") {
4110
4148
  this.#openPanel();
@@ -4144,7 +4182,7 @@ var AssistantElementLauncherController = class {
4144
4182
  };
4145
4183
  #handleDocumentPointerDown = (event) => {
4146
4184
  if (event.composedPath().includes(this.#host)) return;
4147
- this.collapse();
4185
+ this.collapse(true);
4148
4186
  };
4149
4187
  };
4150
4188
 
@@ -4217,166 +4255,6 @@ var AssistantElementPresentationGate = class {
4217
4255
  }
4218
4256
  };
4219
4257
 
4220
- // src/assistant-configuration-schema.ts
4221
- var hexColorSchema = external_exports.string().regex(/^#[0-9A-Fa-f]{6}$/);
4222
- var browserAssetUrlSchema = external_exports.string().trim().url().refine(isSecureBrowserAssetUrl, "must use https (http is allowed only for loopback testing)");
4223
- var httpsUrlSchema = external_exports.string().trim().url().refine(isHttpsUrl, "must use https");
4224
- var brandAssetSchema = external_exports.object({
4225
- uri: browserAssetUrlSchema,
4226
- darkUri: browserAssetUrlSchema.optional(),
4227
- alt: external_exports.string().trim().min(1).max(240)
4228
- }).strict();
4229
- var brandThemeSchema = external_exports.object({
4230
- surface: hexColorSchema.optional(),
4231
- surfaceRaised: hexColorSchema.optional(),
4232
- surfaceMuted: hexColorSchema.optional(),
4233
- text: hexColorSchema.optional(),
4234
- textMuted: hexColorSchema.optional(),
4235
- accent: hexColorSchema.optional(),
4236
- accentText: hexColorSchema.optional(),
4237
- link: hexColorSchema.optional(),
4238
- border: hexColorSchema.optional(),
4239
- borderStrong: hexColorSchema.optional(),
4240
- focus: hexColorSchema.optional(),
4241
- success: hexColorSchema.optional(),
4242
- warning: hexColorSchema.optional(),
4243
- danger: hexColorSchema.optional(),
4244
- code: hexColorSchema.optional()
4245
- }).strict();
4246
- var brandingSchema = external_exports.object({
4247
- name: external_exports.string().trim().min(1).max(160).optional(),
4248
- accent: hexColorSchema.optional(),
4249
- surface: hexColorSchema.optional(),
4250
- surfaceDark: hexColorSchema.optional(),
4251
- logo: brandAssetSchema.optional(),
4252
- mark: brandAssetSchema.optional(),
4253
- avatar: brandAssetSchema.optional(),
4254
- theme: external_exports.object({ light: brandThemeSchema.optional(), dark: brandThemeSchema.optional() }).strict().optional(),
4255
- radius: external_exports.enum(["none", "sm", "md", "lg"]).optional(),
4256
- density: external_exports.enum(["compact", "comfortable"]).optional(),
4257
- typography: external_exports.enum(["system", "serif", "mono"]).optional(),
4258
- colorScheme: external_exports.enum(["auto", "light", "dark"]).optional()
4259
- }).strict();
4260
- var labelsSchema = external_exports.object({
4261
- welcomeHeading: external_exports.string().trim().min(1).max(160).optional(),
4262
- welcomeMessage: external_exports.string().max(1e3).optional(),
4263
- launcherPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
4264
- composerPlaceholder: external_exports.string().trim().min(1).max(160).optional(),
4265
- thinking: external_exports.string().trim().min(1).max(80).optional(),
4266
- send: external_exports.string().trim().min(1).max(80).optional(),
4267
- stop: external_exports.string().trim().min(1).max(80).optional(),
4268
- close: external_exports.string().trim().min(1).max(80).optional(),
4269
- open: external_exports.string().trim().min(1).max(80).optional(),
4270
- confirm: external_exports.string().trim().min(1).max(80).optional(),
4271
- decline: external_exports.string().trim().min(1).max(80).optional(),
4272
- cancel: external_exports.string().trim().min(1).max(80).optional(),
4273
- confirmationHeading: external_exports.string().trim().min(1).max(120).optional(),
4274
- additionalDetails: external_exports.string().trim().min(1).max(120).optional(),
4275
- redacted: external_exports.string().trim().min(1).max(120).optional(),
4276
- completed: external_exports.string().trim().min(1).max(80).optional(),
4277
- stopped: external_exports.string().trim().min(1).max(80).optional(),
4278
- copy: external_exports.string().trim().min(1).max(80).optional(),
4279
- newMessages: external_exports.string().trim().min(1).max(80).optional(),
4280
- reconnect: external_exports.string().trim().min(1).max(80).optional(),
4281
- newConversation: external_exports.string().trim().min(1).max(80).optional(),
4282
- retry: external_exports.string().trim().min(1).max(80).optional(),
4283
- unavailable: external_exports.string().trim().min(1).max(240).optional(),
4284
- sessionExpired: external_exports.string().trim().min(1).max(240).optional(),
4285
- sessionIdle: external_exports.string().trim().min(1).max(120).optional(),
4286
- sessionLoading: external_exports.string().trim().min(1).max(120).optional(),
4287
- sessionReady: external_exports.string().trim().min(1).max(120).optional(),
4288
- sessionError: external_exports.string().trim().min(1).max(120).optional(),
4289
- signInHeading: external_exports.string().trim().min(1).max(120).optional(),
4290
- signInBody: external_exports.string().max(240).optional(),
4291
- signInAction: external_exports.string().trim().min(1).max(80).optional(),
4292
- signUpAction: external_exports.string().trim().min(1).max(80).optional()
4293
- }).strict();
4294
- var presentationSchema = external_exports.object({
4295
- panel: external_exports.object({
4296
- surface: external_exports.enum(["solid", "glass"]).optional(),
4297
- elevation: external_exports.enum(["soft", "dramatic"]).optional(),
4298
- border: external_exports.enum(["subtle", "strong"]).optional(),
4299
- radius: external_exports.number().int().min(0).max(64).optional()
4300
- }).strict().optional(),
4301
- launcher: external_exports.object({
4302
- style: external_exports.enum(["pill", "bubble"]).optional(),
4303
- icon: external_exports.enum(["brand-mark", "chat", "none"]).optional(),
4304
- size: external_exports.enum(["md", "lg"]).optional(),
4305
- status: external_exports.enum(["none", "session"]).optional(),
4306
- effect: external_exports.enum(["none", "pulse"]).optional()
4307
- }).strict().optional(),
4308
- header: external_exports.object({
4309
- mark: external_exports.enum(["none", "brand-mark", "status"]).optional(),
4310
- badge: external_exports.object({
4311
- text: external_exports.string().trim().min(1).max(80),
4312
- tone: external_exports.enum(["neutral", "success", "warning", "danger"]).optional(),
4313
- indicator: external_exports.boolean().optional()
4314
- }).strict().optional()
4315
- }).strict().optional(),
4316
- composer: external_exports.object({
4317
- leadingIcon: external_exports.enum(["none", "brand-mark"]).optional(),
4318
- sendIcon: external_exports.enum(["arrow-up", "paper-plane"]).optional(),
4319
- shape: external_exports.enum(["rounded", "pill"]).optional()
4320
- }).strict().optional(),
4321
- messages: external_exports.object({
4322
- userStyle: external_exports.enum(["bubble", "accent"]).optional(),
4323
- assistantStyle: external_exports.enum(["plain", "bubble"]).optional()
4324
- }).strict().optional()
4325
- }).strict();
4326
- var assistantUiSchema = external_exports.object({
4327
- theme: external_exports.enum(["auto", "light", "dark", "invert"]).optional(),
4328
- layout: external_exports.object({
4329
- mode: external_exports.enum(["floating", "inline", "drawer"]).optional(),
4330
- position: external_exports.enum(["bottom-left", "bottom-center", "bottom-right"]).optional(),
4331
- panelWidth: external_exports.number().int().min(280).max(1200).optional(),
4332
- panelMinHeight: external_exports.number().int().min(240).max(1600).optional(),
4333
- panelMaxHeight: external_exports.number().int().min(320).max(2400).optional(),
4334
- edgeOffset: external_exports.number().int().min(0).max(96).optional(),
4335
- zIndex: external_exports.number().int().min(0).max(2147483647).optional(),
4336
- density: external_exports.enum(["compact", "comfortable"]).optional(),
4337
- mobileFullscreen: external_exports.boolean().optional()
4338
- }).strict().optional(),
4339
- behavior: external_exports.object({
4340
- startOpen: external_exports.boolean().optional(),
4341
- closeOnEscape: external_exports.boolean().optional(),
4342
- closeOnOutsideClick: external_exports.boolean().optional(),
4343
- showLauncher: external_exports.boolean().optional(),
4344
- showHeader: external_exports.boolean().optional(),
4345
- showAvatars: external_exports.boolean().optional(),
4346
- showTimestamps: external_exports.boolean().optional(),
4347
- showPoweredBy: external_exports.boolean().optional()
4348
- }).strict().optional(),
4349
- labels: labelsSchema.optional(),
4350
- presentation: presentationSchema.optional(),
4351
- suggestedPrompts: external_exports.array(external_exports.string().trim().min(1).max(240)).max(8).optional(),
4352
- privacyUrl: httpsUrlSchema.optional(),
4353
- termsUrl: httpsUrlSchema.optional(),
4354
- locale: external_exports.string().trim().min(2).max(35).optional(),
4355
- direction: external_exports.enum(["ltr", "rtl", "auto"]).optional()
4356
- }).strict();
4357
- var assistantConfigurationSchema = external_exports.object({ branding: brandingSchema.optional(), assistant: assistantUiSchema.optional() }).strict();
4358
- function parseAssistantConfiguration(value) {
4359
- const parsed = assistantConfigurationSchema.safeParse(value);
4360
- return parsed.success ? parsed.data : void 0;
4361
- }
4362
- function isHttpsUrl(value) {
4363
- try {
4364
- return new URL(value).protocol === "https:";
4365
- } catch {
4366
- return false;
4367
- }
4368
- }
4369
- function isSecureBrowserAssetUrl(value) {
4370
- try {
4371
- const url = new URL(value);
4372
- if (url.protocol === "https:") return true;
4373
- if (url.protocol !== "http:") return false;
4374
- return url.hostname === "localhost" || url.hostname === "127.0.0.1" || url.hostname === "[::1]";
4375
- } catch {
4376
- return false;
4377
- }
4378
- }
4379
-
4380
4258
  // src/element-public-configuration-controller.ts
4381
4259
  var AssistantElementPublicConfigurationController = class {
4382
4260
  #source;
@@ -4556,7 +4434,7 @@ var ASSISTANT_ELEMENT_STYLES = `<style>
4556
4434
  :host([data-mode="floating"][open]) { width: min(var(--ns-assistant-panel-width, var(--ns-assistant-default-panel-width)), 100vw); }
4557
4435
  button { font: inherit; }
4558
4436
  button, textarea, input, select { -webkit-tap-highlight-color: transparent; }
4559
- .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; }
4437
+ .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; }
4560
4438
  :host([data-presentation-ready]) .launcher { padding: 10px 12px; }
4561
4439
  .launcher[hidden] { display: none; }
4562
4440
  .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); }
@@ -5100,19 +4978,11 @@ var presentationStyles = `<style>
5100
4978
  width: 28px;
5101
4979
  height: 28px;
5102
4980
  border-radius: 50%;
5103
- filter: grayscale(100%);
5104
- opacity: .6;
5105
- 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);
5106
- }
5107
- .launcher:hover .launcher-glyph:is(img), :host([launcher-expanded]) .launcher-glyph:is(img) {
5108
- filter: none;
5109
- opacity: 1;
4981
+ transition: width .5s cubic-bezier(.25,1,.5,1), height .5s cubic-bezier(.25,1,.5,1);
5110
4982
  }
5111
4983
  :host([data-launcher-style="bubble"]) .launcher-glyph:is(img) {
5112
4984
  width: 32px;
5113
4985
  height: 32px;
5114
- filter: none;
5115
- opacity: 1;
5116
4986
  }
5117
4987
  .launcher-status {
5118
4988
  position: absolute;
@@ -5308,6 +5178,7 @@ var NoodleAssistantElement = class extends HTMLElementBase {
5308
5178
  },
5309
5179
  applyConfiguration: (configuration) => this.#applyConfiguration(configuration),
5310
5180
  labels: () => this.#appearance.labels,
5181
+ showConfirmationDetails: () => this.#appearance.behavior.showConfirmationDetails,
5311
5182
  respond: (id, response) => this.respond(id, response),
5312
5183
  dispatchError: (detail) => this.#dispatchError(detail),
5313
5184
  revealLatest: () => this.#revealLatest(),
@@ -5899,4 +5770,4 @@ export {
5899
5770
  dompurify/dist/purify.es.mjs:
5900
5771
  (*! @license DOMPurify 3.4.11 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.11/LICENSE *)
5901
5772
  */
5902
- //# sourceMappingURL=chunk-5PW6PXCI.js.map
5773
+ //# sourceMappingURL=chunk-2A3ZEYZV.js.map