@epam/ai-dial-conversation-input 1.2.0-rc.0 → 1.3.0-dev.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/components/Input/Input.tsx"],"names":[],"mappings":"AAkDA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAalE,wIAAwI;AACxI,eAAO,MAAM,KAAK,oGAquCjB,CAAC"}
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/components/Input/Input.tsx"],"names":[],"mappings":"AAkDA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAalE,wIAAwI;AACxI,eAAO,MAAM,KAAK,oGAqvCjB,CAAC"}
@@ -16,6 +16,8 @@ interface UseMentionSelectionMirrorResult {
16
16
  selectionRects: DOMRect[];
17
17
  /** Recomputes `selectionRects` from the textarea's current native selection. */
18
18
  updateSelectionRects: () => void;
19
+ /** Copies the textarea's vertical scroll offset and scrollbar gutter onto the mirror; wire it to the textarea's `onScroll`. */
20
+ syncMirrorToTextarea: () => void;
19
21
  }
20
22
  export declare const useMentionSelectionMirror: ({ textareaRef, message, isMirrorActive, }: UseMentionSelectionMirrorParams) => UseMentionSelectionMirrorResult;
21
23
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"useMentionSelectionMirror.d.ts","sourceRoot":"","sources":["../../src/hooks/useMentionSelectionMirror.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,wDAAwD;AACxD,UAAU,+BAA+B;IACvC,6EAA6E;IAC7E,WAAW,EAAE,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IACnD,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,gGAAgG;IAChG,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,yDAAyD;AACzD,UAAU,+BAA+B;IACvC,qDAAqD;IACrD,SAAS,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC5C,kFAAkF;IAClF,cAAc,EAAE,OAAO,EAAE,CAAC;IAC1B,gFAAgF;IAChF,oBAAoB,EAAE,MAAM,IAAI,CAAC;CAClC;AAmBD,eAAO,MAAM,yBAAyB,GAAI,2CAIvC,+BAA+B,KAAG,+BA6DpC,CAAC"}
1
+ {"version":3,"file":"useMentionSelectionMirror.d.ts","sourceRoot":"","sources":["../../src/hooks/useMentionSelectionMirror.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,wDAAwD;AACxD,UAAU,+BAA+B;IACvC,6EAA6E;IAC7E,WAAW,EAAE,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IACnD,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,gGAAgG;IAChG,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,yDAAyD;AACzD,UAAU,+BAA+B;IACvC,qDAAqD;IACrD,SAAS,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC5C,kFAAkF;IAClF,cAAc,EAAE,OAAO,EAAE,CAAC;IAC1B,gFAAgF;IAChF,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,+HAA+H;IAC/H,oBAAoB,EAAE,MAAM,IAAI,CAAC;CAClC;AAmBD,eAAO,MAAM,yBAAyB,GAAI,2CAIvC,+BAA+B,KAAG,+BAwGpC,CAAC"}
package/index.js CHANGED
@@ -372,6 +372,11 @@ var H = {
372
372
  return a.setStart(r.node, r.offset), a.setEnd(i.node, i.offset), a;
373
373
  }, He = ({ textareaRef: e, message: t, isMirrorActive: n }) => {
374
374
  let r = B(null), [i, a] = V([]), o = L(() => {
375
+ let t = e.current, n = r.current;
376
+ if (t == null || n == null) return;
377
+ let i = t.offsetWidth > t.clientWidth;
378
+ n.style.scrollbarGutter = i ? "stable" : "", n.scrollTop = t.scrollTop;
379
+ }, [e]), s = L(() => {
375
380
  let t = e.current, i = r.current, o = t?.selectionStart, s = t?.selectionEnd;
376
381
  if (!n || t == null || i == null || o == null || s == null || o === s) {
377
382
  a((e) => e.length === 0 ? e : []);
@@ -383,24 +388,33 @@ var H = {
383
388
  return;
384
389
  }
385
390
  let l = i.getBoundingClientRect();
386
- a(Array.from(c.getClientRects()).map((e) => new DOMRect(e.left - l.left, e.top - l.top, e.width, e.height)));
391
+ a(Array.from(c.getClientRects()).map((e) => new DOMRect(e.left - l.left, e.top - l.top + i.scrollTop, e.width, e.height)));
387
392
  }, [n, e]);
388
393
  return De(() => {
389
- o();
390
- }, [o, t]), R(() => {
394
+ n && o(), s();
395
+ }, [
396
+ n,
397
+ o,
398
+ s,
399
+ t
400
+ ]), R(() => {
391
401
  if (!n) return;
392
402
  let t = e.current;
393
403
  if (t == null || typeof ResizeObserver > "u") return;
394
- let r = new ResizeObserver(o);
404
+ let r = new ResizeObserver(() => {
405
+ o(), s();
406
+ });
395
407
  return r.observe(t), () => r.disconnect();
396
408
  }, [
397
409
  n,
398
410
  e,
399
- o
411
+ o,
412
+ s
400
413
  ]), {
401
414
  mirrorRef: r,
402
415
  selectionRects: i,
403
- updateSelectionRects: o
416
+ updateSelectionRects: s,
417
+ syncMirrorToTextarea: o
404
418
  };
405
419
  }, Ue = ({ messageProp: e, messageRevision: t }) => {
406
420
  let [n, r] = V(e), i = B(null);
@@ -2111,13 +2125,7 @@ var Kt = {
2111
2125
  top: n.top - r.top
2112
2126
  });
2113
2127
  }, []);
2114
- De(() => {
2115
- dn();
2116
- }, [
2117
- dn,
2118
- on,
2119
- Y
2120
- ]), R(() => {
2128
+ R(() => {
2121
2129
  if (on == null) return;
2122
2130
  let e = Z.current;
2123
2131
  if (e == null || typeof ResizeObserver > "u") return;
@@ -2290,11 +2298,19 @@ var Kt = {
2290
2298
  an,
2291
2299
  G,
2292
2300
  nn
2293
- ]), Qn = It || Zn.length > 0, { mirrorRef: $n, selectionRects: er, updateSelectionRects: tr } = He({
2301
+ ]), Qn = It || Zn.length > 0, { mirrorRef: $n, selectionRects: er, updateSelectionRects: tr, syncMirrorToTextarea: nr } = He({
2294
2302
  textareaRef: Z,
2295
2303
  message: Y,
2296
2304
  isMirrorActive: Qn
2297
- }), nr = /* @__PURE__ */ P("textarea", {
2305
+ });
2306
+ De(() => {
2307
+ dn();
2308
+ }, [
2309
+ dn,
2310
+ on,
2311
+ Y
2312
+ ]);
2313
+ let rr = /* @__PURE__ */ P("textarea", {
2298
2314
  className: l(K.textarea, Qn && K.textareaMentionMode, I?.fontClassName || "dial-body-paragraph-text", "relative z-0 max-h-[272px] w-full resize-none overflow-y-auto border-0 bg-transparent pe-1 ps-1 outline-none [field-sizing:content]", "disabled:cursor-not-allowed"),
2299
2315
  ref: Z,
2300
2316
  autoFocus: mt,
@@ -2305,6 +2321,9 @@ var Kt = {
2305
2321
  Wt(e.target.value, e.target.selectionStart ?? e.target.value.length, t?.isComposing ?? !1), u?.(e.target.value);
2306
2322
  },
2307
2323
  onSelect: tr,
2324
+ onScroll: () => {
2325
+ nr(), on != null && dn();
2326
+ },
2308
2327
  onFocus: $t,
2309
2328
  onClick: Qt,
2310
2329
  onKeyDown: Yn,
@@ -2319,7 +2338,7 @@ var Kt = {
2319
2338
  disabled: W,
2320
2339
  readOnly: $,
2321
2340
  rows: 1
2322
- }), rr = G == null ? nr : /* @__PURE__ */ F(N, { children: [nr, /* @__PURE__ */ P("div", {
2341
+ }), ir = G == null ? rr : /* @__PURE__ */ F(N, { children: [rr, /* @__PURE__ */ P("div", {
2323
2342
  "aria-hidden": !0,
2324
2343
  className: l("pointer-events-none absolute", I?.fontClassName || "dial-body-paragraph-text"),
2325
2344
  style: {
@@ -2353,7 +2372,7 @@ var Kt = {
2353
2372
  className: "inline-block h-[1lh] w-0"
2354
2373
  })
2355
2374
  })
2356
- })] }), ir = /* @__PURE__ */ F("div", {
2375
+ })] }), ar = /* @__PURE__ */ F("div", {
2357
2376
  ref: cn,
2358
2377
  className: "relative -me-1 -ms-1 w-[calc(100%+8px)]",
2359
2378
  children: [Qn && /* @__PURE__ */ F("div", {
@@ -2369,8 +2388,8 @@ var Kt = {
2369
2388
  height: e.height
2370
2389
  }
2371
2390
  }, `selection-${t}`))]
2372
- }), rr]
2373
- }), ar = Te ? void 0 : /* @__PURE__ */ P(pt, {
2391
+ }), ir]
2392
+ }), or = Te ? void 0 : /* @__PURE__ */ P(pt, {
2374
2393
  onAttachClick: Oe ? void 0 : () => Nn.current?.click(),
2375
2394
  attachLabel: y,
2376
2395
  addMenuTitle: C,
@@ -2388,10 +2407,10 @@ var Kt = {
2388
2407
  toolsBackLabel: st,
2389
2408
  menuOverlays: lt,
2390
2409
  getCaretPosition: () => Z.current?.selectionStart ?? Y.length
2391
- }), or = ke === tt.Inline && (!Mt || je), sr = ar && /* @__PURE__ */ P("div", {
2410
+ }), sr = ke === tt.Inline && (!Mt || je), cr = or && /* @__PURE__ */ P("div", {
2392
2411
  className: l("flex", H.addCluster),
2393
- children: ar
2394
- }), cr = Hn.length > 0 && it != null && /* @__PURE__ */ P("div", {
2412
+ children: or
2413
+ }), lr = Hn.length > 0 && it != null && /* @__PURE__ */ P("div", {
2395
2414
  className: l("min-w-0 flex-1", H.toolsChips),
2396
2415
  children: /* @__PURE__ */ P(ht, {
2397
2416
  items: Hn,
@@ -2451,26 +2470,26 @@ var Kt = {
2451
2470
  analyserNodeRef: On,
2452
2471
  onStop: jn,
2453
2472
  onDiscard: Mn,
2454
- attachButton: ar,
2473
+ attachButton: or,
2455
2474
  stopLabel: ae,
2456
2475
  discardLabel: oe,
2457
2476
  processingLabel: Ge
2458
2477
  }),
2459
- !$ && U && ir,
2460
- !$ && !U && or && cr && /* @__PURE__ */ P("div", {
2478
+ !$ && U && ar,
2479
+ !$ && !U && sr && lr && /* @__PURE__ */ P("div", {
2461
2480
  className: "flex",
2462
- children: cr
2481
+ children: lr
2463
2482
  }),
2464
2483
  !$ && !U && /* @__PURE__ */ F("div", {
2465
- className: l("flex items-center gap-2", or ? "flex-nowrap" : "flex-wrap", H.actionRow),
2484
+ className: l("flex items-center gap-2", sr ? "flex-nowrap" : "flex-wrap", H.actionRow),
2466
2485
  children: [
2467
- or && sr,
2486
+ sr && cr,
2468
2487
  /* @__PURE__ */ P("div", {
2469
- className: l("flex min-w-0 items-center self-stretch", or ? "flex-1" : "w-full", H.textareaWrap),
2470
- children: ir
2488
+ className: l("flex min-w-0 items-center self-stretch", sr ? "flex-1" : "w-full", H.textareaWrap),
2489
+ children: ar
2471
2490
  }),
2472
- !or && sr,
2473
- !or && cr,
2491
+ !sr && cr,
2492
+ !sr && lr,
2474
2493
  /* @__PURE__ */ P("div", {
2475
2494
  className: l("ms-auto flex flex-shrink-0 items-center gap-2", H.footerActions),
2476
2495
  children: Me ? Me({
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@epam/ai-dial-conversation-input",
3
3
  "description": "Conversation message input with model selection, attachments, voice input, and edit mode",
4
- "version": "1.2.0-rc.0",
4
+ "version": "1.3.0-dev.5",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "main": "./index.js",
@@ -19,10 +19,10 @@
19
19
  "dependencies": {
20
20
  "react-window": "^2.2.7",
21
21
  "@tabler/icons-react": "^3.44.0",
22
- "@epam/ai-dial-attachment-input": "1.2.0-rc.0"
22
+ "@epam/ai-dial-attachment-input": "1.3.0-dev.5"
23
23
  },
24
24
  "peerDependencies": {
25
- "@epam/ai-dial-chat-shared": "1.2.0-rc.0",
25
+ "@epam/ai-dial-chat-shared": "1.3.0-dev.5",
26
26
  "react": "^19.2.8",
27
27
  "@epam/ai-dial-ui-kit": "^0.15.0"
28
28
  },