@websolutespa/bom-mixer-llm 1.8.0 → 1.8.2

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 (32) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/index.css +24 -16
  3. package/dist/cjs/index.js +36 -6
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/esm/index.css +24 -16
  6. package/dist/esm/llm/components/Prompt/prompt.js +2 -2
  7. package/dist/esm/llm/components/Prompt/prompt.js.map +1 -1
  8. package/dist/esm/llm/components/Text/text.js +34 -2
  9. package/dist/esm/llm/components/Text/text.js.map +1 -1
  10. package/dist/esm/llm/components/Thread/thread.js +1 -1
  11. package/dist/esm/llm/components/Thread/thread.js.map +1 -1
  12. package/dist/esm/useLlm/message.service.js +1 -1
  13. package/dist/esm/useLlm/message.service.js.map +1 -1
  14. package/dist/esm/useLlm/useLlmView.js +1 -1
  15. package/dist/esm/useLlm/useLlmView.js.map +1 -1
  16. package/dist/types/llm/components/Prompt/prompt.d.ts.map +1 -1
  17. package/dist/types/llm/components/Text/text.d.ts.map +1 -1
  18. package/dist/types/llm/components/Thread/thread.d.ts.map +1 -1
  19. package/dist/types/useLlm/mock-thread.lfo.d.ts.map +1 -1
  20. package/package.json +1 -1
  21. package/src/llm/components/BusyIndicator/_style.scss +1 -0
  22. package/src/llm/components/CardGroup/_style.scss +4 -2
  23. package/src/llm/components/Prompt/_style.scss +8 -8
  24. package/src/llm/components/Prompt/prompt.tsx +2 -7
  25. package/src/llm/components/Scroller/_style.scss +1 -0
  26. package/src/llm/components/Text/_style.scss +5 -0
  27. package/src/llm/components/Text/text.tsx +31 -3
  28. package/src/llm/components/Thread/_style.scss +10 -5
  29. package/src/llm/components/Thread/thread.tsx +1 -2
  30. package/src/useLlm/message.service.ts +1 -1
  31. package/src/useLlm/mock-thread.lfo.ts +2 -0
  32. package/src/useLlm/useLlmView.tsx +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @websolutespa/bom-mixer-llm
2
2
 
3
+ ## 1.8.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Added: markdown llm_pill click handler
8
+
9
+ ## 1.8.1
10
+
11
+ ### Patch Changes
12
+
13
+ - Modified: cards css
14
+
3
15
  ## 1.8.0
4
16
 
5
17
  ### Patch Changes
@@ -1179,6 +1179,7 @@ llm-embed {
1179
1179
  inset: 0;
1180
1180
  overflow-x: hidden;
1181
1181
  overflow-y: auto;
1182
+ max-width: 100%;
1182
1183
  /*
1183
1184
  &.lenis.lenis-stopped {
1184
1185
  overflow-x: hidden;
@@ -1336,6 +1337,14 @@ llm-embed {
1336
1337
  background: var(--llm-input-background);
1337
1338
  width: 100%;
1338
1339
  }
1340
+ .llm .llm__prompt-input.-speech-supported > .llm__prompt-textarea {
1341
+ padding: 10px 40px;
1342
+ }
1343
+ @media (min-width: 1024px) {
1344
+ .llm .llm__prompt-input.-speech-supported > .llm__prompt-textarea {
1345
+ padding: 18px 40px;
1346
+ }
1347
+ }
1339
1348
  .llm .llm__prompt-textarea {
1340
1349
  appearance: none;
1341
1350
  display: block;
@@ -1373,14 +1382,6 @@ llm-embed {
1373
1382
  max-height: 220px;
1374
1383
  }
1375
1384
  }
1376
- .-speech-supported .llm .llm__prompt-textarea {
1377
- padding: 10px 40px;
1378
- }
1379
- @media (min-width: 1024px) {
1380
- .-speech-supported .llm .llm__prompt-textarea {
1381
- padding: 18px 40px;
1382
- }
1383
- }
1384
1385
  .llm .llm__prompt-speak, .llm .llm__prompt-microphone {
1385
1386
  position: absolute;
1386
1387
  display: flex;
@@ -1682,6 +1683,10 @@ llm-embed {
1682
1683
  height: 320px;
1683
1684
  object-fit: cover;
1684
1685
  }
1686
+ .llm .llm__message--assistant .llm__inner--string .llm__text .llm__text-body .llm__pill {
1687
+ max-width: max(400px, 30vw);
1688
+ margin-bottom: 1em;
1689
+ }
1685
1690
  .llm .llm__text-disclaimer {
1686
1691
  line-height: 1;
1687
1692
  font-family: var(--llm-font-secondary);
@@ -1916,12 +1921,13 @@ llm-embed {
1916
1921
  }
1917
1922
  .llm .llm__cards {
1918
1923
  width: 100%;
1919
- max-width: min(1360px, 75vw + 60px);
1920
1924
  margin: 0 auto 3rem auto;
1925
+ overflow: hidden;
1921
1926
  }
1922
1927
  .llm .llm__cards .swiper {
1923
- position: relative;
1928
+ max-width: min(1360px, 75vw + 60px);
1924
1929
  margin-top: clamp(40px, 40px + (100vw - 375px) / 1545 * 48, 88px);
1930
+ position: relative;
1925
1931
  overflow: visible;
1926
1932
  }
1927
1933
  .llm .llm__cards .swiper-slide {
@@ -2559,14 +2565,15 @@ llm-embed {
2559
2565
  .llm .llm__message--user:last-child {
2560
2566
  margin-bottom: 20vh;
2561
2567
  }
2562
- .llm .llm__inner:empty {
2563
- display: none;
2564
- }
2565
- .llm .llm__inner--eventGroup {
2568
+ .llm .llm__inner {
2566
2569
  width: 100%;
2570
+ margin: 0 clamp(20px, 20px + (100vw - 375px) / 1545 * 90, 110px);
2567
2571
  }
2568
- .llm .llm__inner--tripadvisorGroup {
2569
- width: 100%;
2572
+ .llm .llm__inner--cardGroup {
2573
+ margin: 0;
2574
+ }
2575
+ .llm .llm__inner:empty {
2576
+ display: none;
2570
2577
  }
2571
2578
  .llm .llm__message--user .llm__inner--string {
2572
2579
  margin-left: auto;
@@ -2869,6 +2876,7 @@ llm-embed {
2869
2876
  height: 30px;
2870
2877
  left: 10px;
2871
2878
  bottom: -50px;
2879
+ margin: 0 clamp(20px, 20px + (100vw - 375px) / 1545 * 90, 110px);
2872
2880
  user-select: none;
2873
2881
  pointer-events: none;
2874
2882
  transition: none;
package/dist/cjs/index.js CHANGED
@@ -1455,7 +1455,7 @@ class MessageService {
1455
1455
  mockMessage(request, onMessage, onEnd, onChunk) {
1456
1456
  return __awaiter(this, void 0, void 0, function* () {
1457
1457
  var _a, e_2, _b, _c;
1458
- console.log('mockMessage', request);
1458
+ // console.log('mockMessage', request);
1459
1459
  this.abort();
1460
1460
  const aborter = new AbortController();
1461
1461
  const {
@@ -2311,7 +2311,7 @@ const createLlmViewStore = _ref => {
2311
2311
  */
2312
2312
  if (scroller_) {
2313
2313
  const userMessages = Array.from(document.querySelectorAll('.llm.-open .llm__message.llm__message--user'));
2314
- console.log(userMessages);
2314
+ // console.log(userMessages);
2315
2315
  if (userMessages.length > 0) {
2316
2316
  const lastUserMessage = userMessages.pop();
2317
2317
  lastUserMessage.scrollIntoView({
@@ -3560,7 +3560,7 @@ const Prompt = () => {
3560
3560
  const textArea = react.useRef(null);
3561
3561
  const app = useLlm(state => state.app);
3562
3562
  const prompt = useLlm(state => state.prompt);
3563
- useLlm(state => state.messages);
3563
+ const messages = useLlm(state => state.messages);
3564
3564
  const streaming = useLlm(state => state.streaming);
3565
3565
  const speakEnabled = useLlm(state => state.speakEnabled);
3566
3566
  const {
@@ -3601,7 +3601,7 @@ const Prompt = () => {
3601
3601
  className: "llm__prompt",
3602
3602
  children: jsxRuntime.jsxs("div", {
3603
3603
  className: "llm-container",
3604
- children: [jsxRuntime.jsx("div", {
3604
+ children: [messages.length === 0 && jsxRuntime.jsx("div", {
3605
3605
  className: "llm__prompt-suggestions",
3606
3606
  children: jsxRuntime.jsx(Suggestions, {})
3607
3607
  }), jsxRuntime.jsxs("form", {
@@ -4600,7 +4600,12 @@ function getEmailHtml(data, app) {
4600
4600
  const Text = props => {
4601
4601
  const label = bomMixerHooks.useLabel();
4602
4602
  const app = useLlm(state => state.app);
4603
+ const {
4604
+ send
4605
+ } = useLlmView(state => state.actions);
4603
4606
  const appDisclaimer = app === null || app === void 0 ? void 0 : app.contents.disclaimer;
4607
+ const disclaimer = props.disclaimer ? appDisclaimer || label('llm.disclaimer') : '';
4608
+ const htmlRef = react.useRef(null);
4604
4609
  const html = react.useMemo(() => {
4605
4610
  marked.marked.use({
4606
4611
  renderer: {
@@ -4617,14 +4622,39 @@ const Text = props => {
4617
4622
  <img src="${href}"${title ? ` title="${title}"` : ''} alt="${text}" />
4618
4623
  </a>`;
4619
4624
  }
4625
+ /*
4626
+ html(html: string, block?: boolean) {
4627
+ console.log('html', html);
4628
+ return html;
4629
+ },
4630
+ */
4620
4631
  }
4621
4632
  });
4622
4633
  return marked.marked.parse(props.body);
4623
4634
  }, [props.body]);
4624
- const disclaimer = props.disclaimer ? appDisclaimer || label('llm.disclaimer') : '';
4635
+ react.useEffect(() => {
4636
+ let pills = [];
4637
+ if (htmlRef.current) {
4638
+ pills = Array.from(htmlRef.current.querySelectorAll('.llm__pill'));
4639
+ }
4640
+ const pillClickHandler = event => __awaiter(void 0, void 0, void 0, function* () {
4641
+ if (event.currentTarget) {
4642
+ yield send(event.currentTarget.innerText, response => {
4643
+ // console.log('Suggestions.onMessage', response.chunks);
4644
+ }, response => {
4645
+ // console.log('Suggestions.onEnd', response);
4646
+ });
4647
+ }
4648
+ });
4649
+ pills.forEach(x => x.addEventListener('click', pillClickHandler));
4650
+ return () => {
4651
+ pills.forEach(x => x.removeEventListener('click', pillClickHandler));
4652
+ };
4653
+ }, [props.body, send]);
4625
4654
  return jsxRuntime.jsxs("div", {
4626
4655
  className: "llm__text",
4627
4656
  children: [jsxRuntime.jsx("div", {
4657
+ ref: htmlRef,
4628
4658
  className: "llm__text-body",
4629
4659
  dangerouslySetInnerHTML: {
4630
4660
  __html: html
@@ -4964,7 +4994,7 @@ const Stream = props => {
4964
4994
  const Thread = () => {
4965
4995
  const messages = useLlm(state => state.messages);
4966
4996
  return jsxRuntime.jsxs("div", {
4967
- className: "llm__thread llm-container",
4997
+ className: "llm__thread",
4968
4998
  children: [messages.map((message, m) => jsxRuntime.jsx("div", {
4969
4999
  className: bomCore.getClassNames('llm__message', `llm__message--${message.role}`, 'llm-row'),
4970
5000
  children: message.chunks.map((chunk, c) => jsxRuntime.jsx("div", {