@websolutespa/bom-llm 0.0.23 → 0.0.24

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @websolutespa/bom-llm
2
2
 
3
+ ## 0.0.24
4
+
5
+ ### Patch Changes
6
+
7
+ - Added: markdown llm_pill click handler
8
+
3
9
  ## 0.0.23
4
10
 
5
11
  ### Patch Changes
@@ -1471,6 +1471,14 @@ llm-embed {
1471
1471
  background: var(--llm-input-background);
1472
1472
  width: 100%;
1473
1473
  }
1474
+ .llm .llm__prompt-input.-speech-supported > .llm__prompt-textarea {
1475
+ padding: 10px 40px;
1476
+ }
1477
+ @media (min-width: 1024px) {
1478
+ .llm .llm__prompt-input.-speech-supported > .llm__prompt-textarea {
1479
+ padding: 18px 40px;
1480
+ }
1481
+ }
1474
1482
  .llm .llm__prompt-textarea {
1475
1483
  appearance: none;
1476
1484
  display: block;
@@ -1508,14 +1516,6 @@ llm-embed {
1508
1516
  max-height: 220px;
1509
1517
  }
1510
1518
  }
1511
- .-speech-supported .llm .llm__prompt-textarea {
1512
- padding: 10px 40px;
1513
- }
1514
- @media (min-width: 1024px) {
1515
- .-speech-supported .llm .llm__prompt-textarea {
1516
- padding: 18px 40px;
1517
- }
1518
- }
1519
1519
  .llm .llm__prompt-speak, .llm .llm__prompt-microphone {
1520
1520
  position: absolute;
1521
1521
  display: flex;
@@ -1817,6 +1817,10 @@ llm-embed {
1817
1817
  height: 320px;
1818
1818
  object-fit: cover;
1819
1819
  }
1820
+ .llm .llm__message--assistant .llm__inner--string .llm__text .llm__text-body .llm__pill {
1821
+ max-width: max(400px, 30vw);
1822
+ margin-bottom: 1em;
1823
+ }
1820
1824
  .llm .llm__text-disclaimer {
1821
1825
  line-height: 1;
1822
1826
  font-family: var(--llm-font-secondary);
package/dist/umd/index.js CHANGED
@@ -19022,7 +19022,7 @@ ${Object.entries(vars).map(_ref2 => {
19022
19022
  }
19023
19023
  }
19024
19024
  async mockMessage(request, onMessage, onEnd, onChunk) {
19025
- console.log('mockMessage', request);
19025
+ // console.log('mockMessage', request);
19026
19026
  this.abort();
19027
19027
  const aborter = new AbortController();
19028
19028
  const {
@@ -19882,7 +19882,7 @@ ${Object.entries(vars).map(_ref2 => {
19882
19882
  */
19883
19883
  if (scroller_) {
19884
19884
  const userMessages = Array.from(document.querySelectorAll('.llm.-open .llm__message.llm__message--user'));
19885
- console.log(userMessages);
19885
+ // console.log(userMessages);
19886
19886
  if (userMessages.length > 0) {
19887
19887
  const lastUserMessage = userMessages.pop();
19888
19888
  lastUserMessage.scrollIntoView({
@@ -27255,7 +27255,7 @@ void main(void) {
27255
27255
  const textArea = reactExports.useRef(null);
27256
27256
  const app = useLlm(state => state.app);
27257
27257
  const prompt = useLlm(state => state.prompt);
27258
- useLlm(state => state.messages);
27258
+ const messages = useLlm(state => state.messages);
27259
27259
  const streaming = useLlm(state => state.streaming);
27260
27260
  const speakEnabled = useLlm(state => state.speakEnabled);
27261
27261
  const {
@@ -27295,7 +27295,7 @@ void main(void) {
27295
27295
  className: "llm__prompt",
27296
27296
  children: /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
27297
27297
  className: "llm-container",
27298
- children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
27298
+ children: [messages.length === 0 && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
27299
27299
  className: "llm__prompt-suggestions",
27300
27300
  children: /*#__PURE__*/jsxRuntimeExports.jsx(Suggestions, {})
27301
27301
  }), /*#__PURE__*/jsxRuntimeExports.jsxs("form", {
@@ -30639,7 +30639,12 @@ void main(void) {
30639
30639
  const Text = props => {
30640
30640
  const label = useLabel();
30641
30641
  const app = useLlm(state => state.app);
30642
+ const {
30643
+ send
30644
+ } = useLlmView(state => state.actions);
30642
30645
  const appDisclaimer = app?.contents.disclaimer;
30646
+ const disclaimer = props.disclaimer ? appDisclaimer || label('llm.disclaimer') : '';
30647
+ const htmlRef = reactExports.useRef(null);
30643
30648
  const html = reactExports.useMemo(() => {
30644
30649
  marked.use({
30645
30650
  renderer: {
@@ -30656,14 +30661,39 @@ void main(void) {
30656
30661
  <img src="${href}"${title ? ` title="${title}"` : ''} alt="${text}" />
30657
30662
  </a>`;
30658
30663
  }
30664
+ /*
30665
+ html(html: string, block?: boolean) {
30666
+ console.log('html', html);
30667
+ return html;
30668
+ },
30669
+ */
30659
30670
  }
30660
30671
  });
30661
30672
  return marked.parse(props.body);
30662
30673
  }, [props.body]);
30663
- const disclaimer = props.disclaimer ? appDisclaimer || label('llm.disclaimer') : '';
30674
+ reactExports.useEffect(() => {
30675
+ let pills = [];
30676
+ if (htmlRef.current) {
30677
+ pills = Array.from(htmlRef.current.querySelectorAll('.llm__pill'));
30678
+ }
30679
+ const pillClickHandler = async event => {
30680
+ if (event.currentTarget) {
30681
+ await send(event.currentTarget.innerText, response => {
30682
+ // console.log('Suggestions.onMessage', response.chunks);
30683
+ }, response => {
30684
+ // console.log('Suggestions.onEnd', response);
30685
+ });
30686
+ }
30687
+ };
30688
+ pills.forEach(x => x.addEventListener('click', pillClickHandler));
30689
+ return () => {
30690
+ pills.forEach(x => x.removeEventListener('click', pillClickHandler));
30691
+ };
30692
+ }, [props.body, send]);
30664
30693
  return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
30665
30694
  className: "llm__text",
30666
30695
  children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
30696
+ ref: htmlRef,
30667
30697
  className: "llm__text-body",
30668
30698
  dangerouslySetInnerHTML: {
30669
30699
  __html: html