@websolutespa/bom-mixer-llm 1.8.34 → 1.8.35

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 (53) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/index.css +42 -2
  3. package/dist/cjs/index.js +105 -42
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/esm/index.css +42 -2
  6. package/dist/esm/llm/components/Action/action.js +39 -0
  7. package/dist/esm/llm/components/Action/action.js.map +1 -0
  8. package/dist/esm/llm/components/ActionGroup/action-group.js +14 -0
  9. package/dist/esm/llm/components/ActionGroup/action-group.js.map +1 -0
  10. package/dist/esm/llm/components/Chunk/chunk.js +11 -0
  11. package/dist/esm/llm/components/Chunk/chunk.js.map +1 -1
  12. package/dist/esm/llm/components/Cta/cta.js +2 -2
  13. package/dist/esm/llm/components/Cta/cta.js.map +1 -1
  14. package/dist/esm/llm/theme.json.js +15 -15
  15. package/dist/esm/useLlm/message.service.js +11 -0
  16. package/dist/esm/useLlm/message.service.js.map +1 -1
  17. package/dist/esm/useLlm/useLlm.js +8 -1
  18. package/dist/esm/useLlm/useLlm.js.map +1 -1
  19. package/dist/types/llm/components/Action/action.d.ts +3 -0
  20. package/dist/types/llm/components/Action/action.d.ts.map +1 -0
  21. package/dist/types/llm/components/ActionGroup/action-group.d.ts +3 -0
  22. package/dist/types/llm/components/ActionGroup/action-group.d.ts.map +1 -0
  23. package/dist/types/llm/components/Chunk/chunk.d.ts.map +1 -1
  24. package/dist/types/llm/components/Cta/cta.d.ts +3 -1
  25. package/dist/types/llm/components/Cta/cta.d.ts.map +1 -1
  26. package/dist/types/llm/theme.d.ts +9 -9
  27. package/dist/types/types.d.ts +13 -1
  28. package/dist/types/types.d.ts.map +1 -1
  29. package/dist/types/useLlm/message.service.d.ts.map +1 -1
  30. package/dist/types/useLlm/mock-app.infra.d.ts +3 -0
  31. package/dist/types/useLlm/mock-app.infra.d.ts.map +1 -0
  32. package/dist/types/useLlm/mock-thread.infra.d.ts +3 -0
  33. package/dist/types/useLlm/mock-thread.infra.d.ts.map +1 -0
  34. package/dist/types/useLlm/useLlm.d.ts +5 -2
  35. package/dist/types/useLlm/useLlm.d.ts.map +1 -1
  36. package/package.json +1 -1
  37. package/src/llm/components/Action/_style.scss +4 -0
  38. package/src/llm/components/Action/action.tsx +31 -0
  39. package/src/llm/components/ActionGroup/_style.scss +8 -0
  40. package/src/llm/components/ActionGroup/action-group.tsx +15 -0
  41. package/src/llm/components/Chunk/chunk.tsx +13 -0
  42. package/src/llm/components/Cta/cta.tsx +5 -3
  43. package/src/llm/components/Header/_style.scss +1 -1
  44. package/src/llm/components/Hints/_style.scss +3 -1
  45. package/src/llm/components/Intro/_style.scss +18 -0
  46. package/src/llm/components/Text/_style.scss +17 -0
  47. package/src/llm/scss/style.scss +2 -0
  48. package/src/llm/theme.json +13 -13
  49. package/src/types.ts +19 -1
  50. package/src/useLlm/message.service.ts +11 -0
  51. package/src/useLlm/mock-app.infra.ts +272 -0
  52. package/src/useLlm/mock-thread.infra.ts +25 -0
  53. package/src/useLlm/useLlm.tsx +14 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @websolutespa/bom-mixer-llm
2
2
 
3
+ ## 1.8.35
4
+
5
+ ### Patch Changes
6
+
7
+ - Added: Action, LlmChunkAction, onAction handler
8
+
3
9
  ## 1.8.34
4
10
 
5
11
  ### Patch Changes
@@ -800,7 +800,7 @@ llm-embed {
800
800
  .llm .llm__header-wrapper {
801
801
  display: flex;
802
802
  justify-content: space-between;
803
- padding: 0 var(--llm-size-5, 2.5rem);
803
+ padding: 0 min(var(--llm-size-5, 2.5rem), clamp(20px * var(--s, 1), 20px * var(--s, 1) + (var(--u, 1vw) * 100 - 375px) / 1545 * 90 * var(--s, 1), 110px * var(--s, 1)));
804
804
  align-items: center;
805
805
  height: 70px;
806
806
  z-index: 2;
@@ -1107,6 +1107,16 @@ llm-embed {
1107
1107
  .llm .llm__intro-blob > div {
1108
1108
  height: 100%;
1109
1109
  }
1110
+ .llm.-chat .llm__intro-blob {
1111
+ width: 50px;
1112
+ height: 50px;
1113
+ }
1114
+ @media (min-width: 1440px) {
1115
+ .llm.-chat .llm__intro-blob {
1116
+ width: 60px;
1117
+ height: 60px;
1118
+ }
1119
+ }
1110
1120
  @media (min-width: 1024px) {
1111
1121
  .llm .llm__intro-wrapper {
1112
1122
  justify-content: space-between;
@@ -1118,6 +1128,9 @@ llm-embed {
1118
1128
  gap: var(--llm-size-5, 2.5rem);
1119
1129
  color: var(--llm-color-title-foreground);
1120
1130
  }
1131
+ .llm.-chat .llm__intro-text {
1132
+ gap: var(--llm-size-3, 1.5rem);
1133
+ }
1121
1134
  .llm .llm__intro-hints {
1122
1135
  margin-top: var(--llm-size-5, 2.5rem);
1123
1136
  }
@@ -1126,6 +1139,9 @@ llm-embed {
1126
1139
  margin-top: 0;
1127
1140
  }
1128
1141
  }
1142
+ .llm.-chat .llm__intro-hints {
1143
+ margin-top: var(--llm-size-3, 1.5rem);
1144
+ }
1129
1145
  .llm .llm__customIntro {
1130
1146
  position: absolute;
1131
1147
  top: 0;
@@ -1152,7 +1168,7 @@ llm-embed {
1152
1168
  }
1153
1169
  }
1154
1170
  .llm .llm__hints .swiper-wrapper {
1155
- padding: 1px 0;
1171
+ padding: 4px 0;
1156
1172
  }
1157
1173
  .llm .llm__hints .swiper-slide {
1158
1174
  height: auto;
@@ -1223,6 +1239,7 @@ llm-embed {
1223
1239
  }
1224
1240
  .llm .llm__hint-title.column {
1225
1241
  flex-direction: column;
1242
+ width: 100%;
1226
1243
  }
1227
1244
  .llm .llm__hint-title i {
1228
1245
  flex-shrink: 0;
@@ -1235,6 +1252,7 @@ llm-embed {
1235
1252
  fill: currentColor;
1236
1253
  }
1237
1254
  .llm .llm__hint-body {
1255
+ width: 100%;
1238
1256
  line-height: 140%;
1239
1257
  }
1240
1258
 
@@ -1915,6 +1933,21 @@ llm-embed {
1915
1933
  border-radius: 12px;
1916
1934
  padding: var(--llm-size-3, 1.5rem) var(--llm-size-4, 2rem);
1917
1935
  }
1936
+ .llm.-chat .llm__message--user .llm__text {
1937
+ display: flex;
1938
+ flex-direction: column;
1939
+ }
1940
+ .llm.-chat .llm__message--user .llm__text .llm__text-body {
1941
+ align-self: flex-end;
1942
+ padding: 0.5em 0;
1943
+ padding: var(--llm-pill-padding, 8px);
1944
+ border: var(--llm-pill-border);
1945
+ border-radius: var(--llm-pill-border-radius);
1946
+ background: var(--llm-pill-background);
1947
+ color: var(--llm-pill-foreground);
1948
+ font-family: var(--llm-pill-font-family);
1949
+ text-align: right;
1950
+ }
1918
1951
  .llm .llm__message--assistant .llm__inner--text:first-child .llm__text .llm__text-body, .llm .llm__message--assistant .llm__inner--text:first-child .llm__text .llm__text-body > p, .llm .llm__message--assistant .llm__inner--text:first-child .llm__text .llm__text-body > h2,
1919
1952
  .llm .llm__message--assistant .llm__inner--string:first-child .llm__text .llm__text-body,
1920
1953
  .llm .llm__message--assistant .llm__inner--string:first-child .llm__text .llm__text-body > p,
@@ -4232,4 +4265,11 @@ llm-embed {
4232
4265
  width: var(--llm-scroll-proposition-border-radius);
4233
4266
  height: var(--llm-scroll-proposition-border-radius);
4234
4267
  transform: rotate(90deg);
4268
+ }
4269
+
4270
+ .llm .llm__actions {
4271
+ display: flex;
4272
+ gap: var(--llm-size-4, 2rem);
4273
+ padding-top: var(--llm-size-2, 1rem);
4274
+ margin-top: auto;
4235
4275
  }
package/dist/cjs/index.js CHANGED
@@ -355,13 +355,12 @@ var color = {
355
355
  error: "#ff4848"
356
356
  };
357
357
  var border = "1px solid var(--llm-color-neutral-200)";
358
- var main = {
359
- background: "var(--llm-color-background)",
360
- foreground: "var(--llm-color-foreground)"
361
- };
362
- var canvas = {
363
- opacity: 0.8,
364
- enabled: true
358
+ var trigger = {
359
+ position: "bottom",
360
+ size: "60px",
361
+ background: "var(--llm-color-base-200)",
362
+ foreground: "var(--llm-color-base-100)",
363
+ boxShadow: "var(--llm-shadow-md)"
365
364
  };
366
365
  var chat = {
367
366
  top: "auto",
@@ -373,12 +372,13 @@ var chat = {
373
372
  borderRadius: "8px",
374
373
  boxShadow: "var(--llm-shadow-sm)"
375
374
  };
376
- var trigger = {
377
- position: "bottom",
378
- size: "60px",
379
- background: "var(--llm-color-base-200)",
380
- foreground: "var(--llm-color-base-100)",
381
- boxShadow: "var(--llm-shadow-md)"
375
+ var main = {
376
+ background: "var(--llm-color-background)",
377
+ foreground: "var(--llm-color-foreground)"
378
+ };
379
+ var canvas = {
380
+ opacity: 0.8,
381
+ enabled: true
382
382
  };
383
383
  var popup = {
384
384
  maxWidth: "210px",
@@ -498,10 +498,10 @@ var theme = {
498
498
  typography: typography,
499
499
  color: color,
500
500
  border: border,
501
+ trigger: trigger,
502
+ chat: chat,
501
503
  main: main,
502
504
  canvas: canvas,
503
- chat: chat,
504
- trigger: trigger,
505
505
  popup: popup,
506
506
  triggerCta: triggerCta,
507
507
  hint: hint,
@@ -1609,6 +1609,17 @@ class MessageDecoder {
1609
1609
  // response = { ...response, ...rest };
1610
1610
  }
1611
1611
  break;
1612
+ case 'action':
1613
+ case 'actionItem':
1614
+ if (lastMessage && lastMessage.type === 'actionGroup') {
1615
+ lastMessage.items.push(x);
1616
+ } else {
1617
+ chunkItems.push({
1618
+ type: 'actionGroup',
1619
+ items: [x]
1620
+ });
1621
+ }
1622
+ break;
1612
1623
  case 'cardItem':
1613
1624
  if (lastMessage && lastMessage.type === 'cardGroup') {
1614
1625
  lastMessage.items.push(x);
@@ -2939,6 +2950,7 @@ const createLlmStore = _ref => {
2939
2950
  apiKey,
2940
2951
  threadId,
2941
2952
  decorateUrl,
2953
+ onAction,
2942
2954
  endpoint,
2943
2955
  storage,
2944
2956
  test,
@@ -3268,10 +3280,16 @@ const createLlmStore = _ref => {
3268
3280
  decorateUrl: (item, defaultUrl) => __awaiter(void 0, void 0, void 0, function* () {
3269
3281
  let url;
3270
3282
  if (typeof decorateUrl === 'function') {
3271
- url = yield decorateUrl(item);
3283
+ url = (yield decorateUrl(item)) || undefined;
3272
3284
  }
3273
3285
  return url || defaultUrl || '#';
3274
3286
  }),
3287
+ onAction: item => __awaiter(void 0, void 0, void 0, function* () {
3288
+ if (typeof onAction === 'function') {
3289
+ return yield onAction(item);
3290
+ }
3291
+ return;
3292
+ }),
3275
3293
  clear: () => set(state => ({
3276
3294
  messages: []
3277
3295
  }))
@@ -4701,6 +4719,68 @@ function ScrollProposition() {
4701
4719
  });
4702
4720
  }
4703
4721
 
4722
+ const Cta = props => {
4723
+ const onClick = event => {
4724
+ if (typeof props.onClick === 'function') {
4725
+ props.onClick(event);
4726
+ }
4727
+ };
4728
+ const bg = props.type == 'button' || props.type == 'submit' ? jsxRuntime.jsx(Canvas, {}) : '';
4729
+ const icon = props.icon || (props.type == 'text' ? jsxRuntime.jsx(bomMixerIcons.IconLlmArrowRight, {}) : '');
4730
+ const classNames = bomCore.getClassNames('llm__cta', `llm__cta--${props.type}`, props.className);
4731
+ return props.url ? jsxRuntime.jsxs("a", {
4732
+ className: classNames,
4733
+ href: props.url,
4734
+ target: props.target,
4735
+ children: [bg, jsxRuntime.jsx("span", {
4736
+ children: props.label
4737
+ }), icon]
4738
+ }) : jsxRuntime.jsxs("button", {
4739
+ className: classNames,
4740
+ onClick: onClick,
4741
+ type: props.type == 'button' || props.type == 'submit' ? props.type : undefined,
4742
+ children: [bg, jsxRuntime.jsx("span", {
4743
+ children: props.label
4744
+ }), icon]
4745
+ });
4746
+ };
4747
+
4748
+ const Action = props => {
4749
+ const label = bomMixerHooks.useLabel();
4750
+ const {
4751
+ onAction
4752
+ } = useLlm(state => state.actions);
4753
+ const {
4754
+ open
4755
+ } = useLlmView(state => state.actions);
4756
+ const dismissable = useLlmView(state => state.dismissable);
4757
+ const onAction_ = event => __awaiter(void 0, void 0, void 0, function* () {
4758
+ // console.log('Action.onAction', props.id);
4759
+ const shouldClose = yield onAction(props);
4760
+ if (dismissable && shouldClose !== false) {
4761
+ open();
4762
+ }
4763
+ });
4764
+ const classNames = bomCore.getClassNames('llm__action', {
4765
+ [`llm__action--${props.type}`]: !!props.type
4766
+ });
4767
+ return jsxRuntime.jsx(Cta, {
4768
+ type: "button",
4769
+ className: classNames,
4770
+ label: props.title || label('llm.tellMeMore'),
4771
+ icon: jsxRuntime.jsx(bomMixerIcons.IconLlmArrowRight, {}),
4772
+ onClick: onAction_
4773
+ });
4774
+ };
4775
+
4776
+ const ActionGroup = props => {
4777
+ const classNames = bomCore.getClassNames('llm__actions');
4778
+ return jsxRuntime.jsx("div", {
4779
+ className: classNames,
4780
+ children: props.items.map((item, i) => jsxRuntime.jsx(Action, Object.assign({}, item), i))
4781
+ });
4782
+ };
4783
+
4704
4784
  const Dialog = _a => {
4705
4785
  var {
4706
4786
  children,
@@ -5110,32 +5190,6 @@ const CardGroup = props => {
5110
5190
  });
5111
5191
  };
5112
5192
 
5113
- const Cta = props => {
5114
- const onClick = event => {
5115
- if (typeof props.onClick === 'function') {
5116
- props.onClick(event);
5117
- }
5118
- };
5119
- const bg = props.type == 'button' || props.type == 'submit' ? jsxRuntime.jsx(Canvas, {}) : '';
5120
- const icon = props.type == 'text' ? jsxRuntime.jsx(bomMixerIcons.IconLlmArrowRight, {}) : '';
5121
- const classNames = bomCore.getClassNames('llm__cta', `llm__cta--${props.type}`);
5122
- return props.url ? jsxRuntime.jsxs("a", {
5123
- className: classNames,
5124
- href: props.url,
5125
- target: props.target,
5126
- children: [bg, jsxRuntime.jsx("span", {
5127
- children: props.label
5128
- }), icon]
5129
- }) : jsxRuntime.jsxs("button", {
5130
- className: classNames,
5131
- onClick: onClick,
5132
- type: props.type == 'button' || props.type == 'submit' ? props.type : undefined,
5133
- children: [bg, jsxRuntime.jsx("span", {
5134
- children: props.label
5135
- }), icon]
5136
- });
5137
- };
5138
-
5139
5193
  const Event = props => {
5140
5194
  const label = bomMixerHooks.useLabel();
5141
5195
  const {
@@ -6038,6 +6092,15 @@ const Chunk = _ref => {
6038
6092
  {
6039
6093
  return jsxRuntime.jsx(StreamError, Object.assign({}, item));
6040
6094
  }
6095
+ case 'action':
6096
+ case 'actionItem':
6097
+ {
6098
+ return jsxRuntime.jsx(Action, Object.assign({}, item));
6099
+ }
6100
+ case 'actionGroup':
6101
+ {
6102
+ return jsxRuntime.jsx(ActionGroup, Object.assign({}, item));
6103
+ }
6041
6104
  case 'card':
6042
6105
  case 'cardItem':
6043
6106
  {