@memori.ai/memori-react 9.0.0-alpha.20 → 9.0.0-alpha.21

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 (159) hide show
  1. package/CHANGELOG.md +438 -1
  2. package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js +1 -1
  3. package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js.map +1 -1
  4. package/dist/components/Avatar/AvatarView/AvatarComponent/constants.d.ts +2 -2
  5. package/dist/components/Avatar/AvatarView/AvatarComponent/constants.js +6 -6
  6. package/dist/components/Avatar/AvatarView/AvatarComponent/constants.js.map +1 -1
  7. package/dist/components/ChatInputs/ChatInputs.js +1 -1
  8. package/dist/components/ChatInputs/ChatInputs.js.map +1 -1
  9. package/dist/components/ContentPreviewModal/ContentPreviewModal.css +6 -22
  10. package/dist/components/FilePreview/FilePreview.css +41 -20
  11. package/dist/components/FilePreview/FilePreview.d.ts +2 -1
  12. package/dist/components/FilePreview/FilePreview.js +6 -2
  13. package/dist/components/FilePreview/FilePreview.js.map +1 -1
  14. package/dist/components/KnownFacts/KnownFacts.js +2 -2
  15. package/dist/components/KnownFacts/KnownFacts.js.map +1 -1
  16. package/dist/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.js +1 -1
  17. package/dist/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.js.map +1 -1
  18. package/dist/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyButtonWithDropdown.js +14 -12
  19. package/dist/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyButtonWithDropdown.js.map +1 -1
  20. package/dist/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +1 -106
  21. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +8 -9
  22. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +1 -0
  23. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
  24. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/components/TabSwitch.css +7 -0
  25. package/dist/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js +210 -62
  26. package/dist/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js.map +1 -1
  27. package/dist/components/MemoriArtifactSystem/context/ArtifactContext.d.ts +3 -1
  28. package/dist/components/MemoriArtifactSystem/context/ArtifactContext.js +65 -1
  29. package/dist/components/MemoriArtifactSystem/context/ArtifactContext.js.map +1 -1
  30. package/dist/components/MemoriArtifactSystem/types/artifact.types.d.ts +11 -0
  31. package/dist/components/MemoriArtifactSystem/utils/ArtifactAPI.js +18 -13
  32. package/dist/components/MemoriArtifactSystem/utils/ArtifactAPI.js.map +1 -1
  33. package/dist/components/MemoriArtifactSystem/utils/applyEdits.d.ts +8 -0
  34. package/dist/components/MemoriArtifactSystem/utils/applyEdits.js +117 -0
  35. package/dist/components/MemoriArtifactSystem/utils/applyEdits.js.map +1 -0
  36. package/dist/components/MemoriWidget/MemoriWidget.css +59 -0
  37. package/dist/components/Snippet/Snippet.css +6 -36
  38. package/dist/components/Snippet/Snippet.js +3 -1
  39. package/dist/components/Snippet/Snippet.js.map +1 -1
  40. package/dist/components/StartPanel/StartPanel.css +106 -0
  41. package/dist/components/StartPanel/StartPanel.js +1 -1
  42. package/dist/components/StartPanel/StartPanel.js.map +1 -1
  43. package/dist/components/UploadButton/UploadButton.css +0 -19
  44. package/dist/components/UploadButton/UploadButton.js +1 -3
  45. package/dist/components/UploadButton/UploadButton.js.map +1 -1
  46. package/dist/components/UploadButton/UploadImages/UploadImages.js +1 -1
  47. package/dist/components/UploadButton/UploadImages/UploadImages.js.map +1 -1
  48. package/dist/components/layouts/chat.css +2 -0
  49. package/dist/components/layouts/zoomed-full-body.css +1 -0
  50. package/dist/helpers/message.js +3 -0
  51. package/dist/helpers/message.js.map +1 -1
  52. package/dist/locales/de.json +3 -0
  53. package/dist/locales/en.json +3 -0
  54. package/dist/locales/es.json +3 -0
  55. package/dist/locales/fr.json +3 -0
  56. package/dist/locales/it.json +3 -0
  57. package/dist/styles.css +1 -1
  58. package/dist/version.d.ts +1 -1
  59. package/dist/version.js +1 -1
  60. package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js +2 -2
  61. package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js.map +1 -1
  62. package/esm/components/Avatar/AvatarView/AvatarComponent/constants.d.ts +2 -2
  63. package/esm/components/Avatar/AvatarView/AvatarComponent/constants.js +4 -5
  64. package/esm/components/Avatar/AvatarView/AvatarComponent/constants.js.map +1 -1
  65. package/esm/components/ChatInputs/ChatInputs.js +1 -1
  66. package/esm/components/ChatInputs/ChatInputs.js.map +1 -1
  67. package/esm/components/ContentPreviewModal/ContentPreviewModal.css +6 -22
  68. package/esm/components/FilePreview/FilePreview.css +41 -20
  69. package/esm/components/FilePreview/FilePreview.d.ts +2 -1
  70. package/esm/components/FilePreview/FilePreview.js +7 -3
  71. package/esm/components/FilePreview/FilePreview.js.map +1 -1
  72. package/esm/components/KnownFacts/KnownFacts.js +2 -2
  73. package/esm/components/KnownFacts/KnownFacts.js.map +1 -1
  74. package/esm/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.js +1 -1
  75. package/esm/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.js.map +1 -1
  76. package/esm/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyButtonWithDropdown.js +15 -13
  77. package/esm/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyButtonWithDropdown.js.map +1 -1
  78. package/esm/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +1 -106
  79. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +8 -9
  80. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +1 -0
  81. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
  82. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/components/TabSwitch.css +7 -0
  83. package/esm/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js +211 -63
  84. package/esm/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js.map +1 -1
  85. package/esm/components/MemoriArtifactSystem/context/ArtifactContext.d.ts +3 -1
  86. package/esm/components/MemoriArtifactSystem/context/ArtifactContext.js +66 -2
  87. package/esm/components/MemoriArtifactSystem/context/ArtifactContext.js.map +1 -1
  88. package/esm/components/MemoriArtifactSystem/types/artifact.types.d.ts +11 -0
  89. package/esm/components/MemoriArtifactSystem/utils/ArtifactAPI.js +18 -13
  90. package/esm/components/MemoriArtifactSystem/utils/ArtifactAPI.js.map +1 -1
  91. package/esm/components/MemoriArtifactSystem/utils/applyEdits.d.ts +8 -0
  92. package/esm/components/MemoriArtifactSystem/utils/applyEdits.js +112 -0
  93. package/esm/components/MemoriArtifactSystem/utils/applyEdits.js.map +1 -0
  94. package/esm/components/MemoriWidget/MemoriWidget.css +59 -0
  95. package/esm/components/Snippet/Snippet.css +6 -36
  96. package/esm/components/Snippet/Snippet.js +4 -2
  97. package/esm/components/Snippet/Snippet.js.map +1 -1
  98. package/esm/components/StartPanel/StartPanel.css +106 -0
  99. package/esm/components/StartPanel/StartPanel.js +2 -2
  100. package/esm/components/StartPanel/StartPanel.js.map +1 -1
  101. package/esm/components/UploadButton/UploadButton.css +0 -19
  102. package/esm/components/UploadButton/UploadButton.js +1 -3
  103. package/esm/components/UploadButton/UploadButton.js.map +1 -1
  104. package/esm/components/UploadButton/UploadImages/UploadImages.js +1 -1
  105. package/esm/components/UploadButton/UploadImages/UploadImages.js.map +1 -1
  106. package/esm/components/layouts/chat.css +2 -0
  107. package/esm/components/layouts/zoomed-full-body.css +1 -0
  108. package/esm/helpers/message.js +3 -0
  109. package/esm/helpers/message.js.map +1 -1
  110. package/esm/locales/de.json +3 -0
  111. package/esm/locales/en.json +3 -0
  112. package/esm/locales/es.json +3 -0
  113. package/esm/locales/fr.json +3 -0
  114. package/esm/locales/it.json +3 -0
  115. package/esm/styles.css +1 -1
  116. package/esm/version.d.ts +1 -1
  117. package/esm/version.js +1 -1
  118. package/package.json +1 -1
  119. package/src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.tsx +2 -2
  120. package/src/components/Avatar/AvatarView/AvatarComponent/constants.test.ts +19 -0
  121. package/src/components/Avatar/AvatarView/AvatarComponent/constants.ts +9 -6
  122. package/src/components/ChatInputs/ChatInputs.tsx +1 -0
  123. package/src/components/ContentPreviewModal/ContentPreviewModal.css +6 -22
  124. package/src/components/FilePreview/FilePreview.css +41 -20
  125. package/src/components/FilePreview/FilePreview.tsx +14 -0
  126. package/src/components/FilePreview/__snapshots__/FilePreview.test.tsx.snap +14 -0
  127. package/src/components/KnownFacts/KnownFacts.tsx +0 -2
  128. package/src/components/MediaWidget/MediaPreviewModal.test.tsx +2 -3
  129. package/src/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.tsx +19 -33
  130. package/src/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyButtonWithDropdown.tsx +44 -45
  131. package/src/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +1 -106
  132. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +8 -9
  133. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx +24 -20
  134. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/components/TabSwitch.css +7 -0
  135. package/src/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.tsx +357 -148
  136. package/src/components/MemoriArtifactSystem/context/ArtifactContext.tsx +111 -9
  137. package/src/components/MemoriArtifactSystem/types/artifact.types.ts +20 -1
  138. package/src/components/MemoriArtifactSystem/utils/ArtifactAPI.test.tsx +1 -0
  139. package/src/components/MemoriArtifactSystem/utils/ArtifactAPI.tsx +19 -13
  140. package/src/components/MemoriArtifactSystem/utils/applyEdits.test.ts +85 -0
  141. package/src/components/MemoriArtifactSystem/utils/applyEdits.ts +173 -0
  142. package/src/components/MemoriWidget/MemoriWidget.css +59 -0
  143. package/src/components/Snippet/Snippet.css +6 -36
  144. package/src/components/Snippet/Snippet.tsx +6 -7
  145. package/src/components/StartPanel/StartPanel.css +106 -0
  146. package/src/components/StartPanel/StartPanel.stories.tsx +20 -0
  147. package/src/components/StartPanel/StartPanel.tsx +8 -0
  148. package/src/components/UploadButton/UploadButton.css +0 -19
  149. package/src/components/UploadButton/UploadButton.tsx +0 -11
  150. package/src/components/UploadButton/UploadImages/UploadImages.tsx +1 -1
  151. package/src/components/layouts/chat.css +2 -0
  152. package/src/components/layouts/zoomed-full-body.css +1 -0
  153. package/src/helpers/message.ts +15 -0
  154. package/src/locales/de.json +3 -0
  155. package/src/locales/en.json +3 -0
  156. package/src/locales/es.json +3 -0
  157. package/src/locales/fr.json +3 -0
  158. package/src/locales/it.json +3 -0
  159. package/src/version.ts +1 -1
@@ -175,7 +175,7 @@
175
175
  /* Copy Menu Wrapper */
176
176
  .memori-copy-menu-wrapper {
177
177
  position: relative;
178
- z-index: 10001;
178
+ z-index: 10;
179
179
  display: inline-block;
180
180
  }
181
181
 
@@ -183,96 +183,6 @@
183
183
  gap: var(--memori-spacing-sm);
184
184
  }
185
185
 
186
- /* Copy Dropdown */
187
- .memori-copy-dropdown {
188
- position: absolute;
189
- z-index: 10001;
190
- top: 100%;
191
- right: 0;
192
- /* left: 0; */
193
- overflow: hidden;
194
- min-width: 280px;
195
- max-width: 320px;
196
- border: 1px solid var(--memori-copy-border);
197
- border: var(--memori-border) solid var(--memori-border-color);
198
- border-radius: 0.5rem;
199
- margin-top: var(--memori-spacing-xs);
200
- background: var(--memori-secondary-background);
201
- box-shadow: var(--memori-copy-shadow);
202
- }
203
-
204
- /* Responsive positioning */
205
- @media (max-width: 640px) {
206
- .memori-copy-dropdown {
207
- right: 0;
208
- left: auto;
209
- min-width: 260px;
210
- max-width: calc(100vw - var(--memori-spacing-xl));
211
- }
212
- }
213
-
214
- /* Headless UI Transition Classes */
215
- .memori-copy-dropdown-enter {
216
- transition: all 0.15s ease-out;
217
- }
218
-
219
- .memori-copy-dropdown-enter-from {
220
- opacity: 0;
221
- transform: translateY(-8px) scale(0.95);
222
- }
223
-
224
- .memori-copy-dropdown-enter-to {
225
- opacity: 1;
226
- transform: translateY(0) scale(1);
227
- }
228
-
229
- .memori-copy-dropdown-leave {
230
- transition: all 0.1s ease-in;
231
- }
232
-
233
- .memori-copy-dropdown-leave-from {
234
- opacity: 1;
235
- transform: translateY(0) scale(1);
236
- }
237
-
238
- .memori-copy-dropdown-leave-to {
239
- opacity: 0;
240
- transform: translateY(-8px) scale(0.95);
241
- }
242
-
243
- .memori-copy-dropdown-content {
244
- padding: var(--memori-spacing-sm) 0;
245
- }
246
-
247
- .memori-copy-dropdown-header {
248
- padding: var(--memori-spacing-sm) var(--memori-spacing-md) var(--memori-spacing-xs);
249
- border-bottom: 1px solid var(--memori-copy-border);
250
- margin-bottom: var(--memori-spacing-xs);
251
- }
252
-
253
- .memori-copy-dropdown-title {
254
- color: var(--memori-text-color);
255
- font-size: 0.75rem;
256
- font-weight: var(--memori-text-weight-semibold);
257
- letter-spacing: 0.05em;
258
- text-transform: uppercase;
259
- }
260
-
261
- .memori-copy-dropdown-list {
262
- max-height: 300px;
263
- overflow-y: auto;
264
- }
265
-
266
- .memori-copy-dropdown-empty {
267
- padding: var(--memori-spacing-md);
268
- text-align: center;
269
- }
270
-
271
- .memori-copy-dropdown-empty-text {
272
- color: var(--memori-text-color);
273
- font-size: var(--memori-text-size-small);
274
- }
275
-
276
186
  /* Copy Menu Item */
277
187
  .memori-copy-menu-item {
278
188
  position: relative;
@@ -441,11 +351,6 @@
441
351
 
442
352
  /* Responsive Design */
443
353
  @media (max-width: 640px) {
444
- .memori-copy-dropdown {
445
- min-width: 260px;
446
- max-width: calc(100vw - var(--memori-spacing-xl));
447
- }
448
-
449
354
  .memori-copy-toast {
450
355
  right: var(--memori-spacing-md);
451
356
  left: var(--memori-spacing-md);
@@ -468,7 +373,6 @@
468
373
  /* Print Media Queries */
469
374
  @media print {
470
375
  .memori-copy-button-wrapper,
471
- .memori-copy-dropdown,
472
376
  .memori-copy-toast {
473
377
  display: none !important;
474
378
  }
@@ -480,10 +384,6 @@
480
384
  border-width: 2px;
481
385
  }
482
386
 
483
- .memori-copy-dropdown {
484
- border-width: 2px;
485
- }
486
-
487
387
  .memori-copy-menu-item:hover:not(:disabled) {
488
388
  background: var(--memori-copy-surface-pressed);
489
389
  color: var(--memori-text-color);
@@ -494,7 +394,6 @@
494
394
  @media (prefers-reduced-motion: reduce) {
495
395
  .memori-copy-button,
496
396
  .memori-copy-menu-item,
497
- .memori-copy-dropdown,
498
397
  .memori-copy-toast {
499
398
  transition: none;
500
399
  }
@@ -504,10 +403,6 @@
504
403
  animation: none;
505
404
  }
506
405
 
507
- .memori-copy-dropdown {
508
- animation: none;
509
- }
510
-
511
406
  .memori-copy-toast {
512
407
  animation: none;
513
408
  }
@@ -634,7 +634,6 @@ body:has(.memori-artifact-panel-drawer-fullscreen) .memori-drawer__backdrop,
634
634
  align-items: center;
635
635
  padding: 0 var(--memori-spacing-md);
636
636
  padding-bottom: var(--memori-spacing-sm);
637
- border-bottom: 1px solid color-mix(in oklch, var(--memori-border-color) 75%, transparent);
638
637
  margin-top: var(--memori-spacing-lg);
639
638
  /* justify-content: space-between; */
640
639
  gap: var(--memori-spacing-sm);
@@ -698,8 +697,10 @@ body:has(.memori-artifact-panel-drawer-fullscreen) .memori-drawer__backdrop,
698
697
 
699
698
  /* Match website_assistant / hidden_chat sidebar close — never outline primary fill */
700
699
  .memori-widget .memori-artifact-drawer--close.memori-icon-button.memori-button,
701
- .memori-widget .memori-artifact-drawer--close.memori-icon-button.memori-button:hover:not(:disabled, .memori-button--disabled),
702
- .memori-widget .memori-artifact-drawer--close.memori-icon-button.memori-button:active:not(:disabled, .memori-button--disabled) {
700
+ .memori-widget
701
+ .memori-artifact-drawer--close.memori-icon-button.memori-button:hover:not(:disabled, .memori-button--disabled),
702
+ .memori-widget
703
+ .memori-artifact-drawer--close.memori-icon-button.memori-button:active:not(:disabled, .memori-button--disabled) {
703
704
  border: var(--memori-border, 1px) solid color-mix(in srgb, var(--memori-text-color, #111827) 18%, transparent);
704
705
  background: transparent;
705
706
  box-shadow: none;
@@ -707,7 +708,8 @@ body:has(.memori-artifact-panel-drawer-fullscreen) .memori-drawer__backdrop,
707
708
  transform: none;
708
709
  }
709
710
 
710
- .memori-widget .memori-artifact-drawer--close.memori-icon-button.memori-button:hover:not(:disabled, .memori-button--disabled) {
711
+ .memori-widget
712
+ .memori-artifact-drawer--close.memori-icon-button.memori-button:hover:not(:disabled, .memori-button--disabled) {
711
713
  background: color-mix(in srgb, var(--memori-text-color, #111827) 6%, transparent);
712
714
  }
713
715
 
@@ -790,6 +792,7 @@ body:has(.memori-artifact-panel-drawer-fullscreen) .memori-drawer__backdrop,
790
792
  max-width: fit-content;
791
793
  flex: 0 0 auto;
792
794
  justify-content: flex-start;
795
+ /* border: var(--memori-border, 1px) solid color-mix(in srgb, var(--memori-text-color, #111827) 18%, transparent); */
793
796
  }
794
797
 
795
798
  .memori-artifact-drawer-top-right .memori-tab-switch__tab {
@@ -1045,11 +1048,7 @@ body:has(.memori-artifact-panel-drawer-fullscreen) .memori-drawer__backdrop,
1045
1048
  border: 1px solid var(--memori-border-color);
1046
1049
  border-radius: var(--memori-radius-box);
1047
1050
  /* Soft contrast vs canvas — not pure white / not heavy fill */
1048
- background: color-mix(
1049
- in srgb,
1050
- var(--memori-text-color) 6%,
1051
- var(--memori-secondary-background)
1052
- ) !important;
1051
+ background: color-mix(in srgb, var(--memori-text-color) 6%, var(--memori-secondary-background)) !important;
1053
1052
  box-shadow: var(--memori-shadow-lg);
1054
1053
  color: var(--memori-text-color);
1055
1054
  }
@@ -168,6 +168,7 @@ const ArtifactDrawer = ({ isChatLogPanel = false, isLayoutColumn = false }) => {
168
168
  timestamp: new Date(),
169
169
  size: 0,
170
170
  id: '',
171
+ artifactId: '',
171
172
  });
172
173
  }, icon: _jsx(LinkIcon, { className: "memori-artifact-action-icon" }), label: t('artifact.external') || 'External', children: t('artifact.external') || 'External' })] })] }), _jsx(IconButton, { onClick: closeArtifact, "aria-label": t('artifact.close') || 'Close', title: t('artifact.close') || 'Close', className: "memori-artifact-drawer--close", children: _jsx(X, { className: "memori-icon-close", "aria-hidden": true }) })] })] })) }), _jsx("div", { className: "memori-artifact-panel--content", children: _jsx("div", { className: "memori-artifact-panel--main", children: _jsx(ArtifactPreview, { artifact: state.currentArtifact, activeTab: activeTab }) }) })] }));
173
174
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ArtifactDrawer.js","sourceRoot":"","sources":["../../../../../src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx"],"names":[],"mappings":";AAMA,OAAc,EAAE,QAAQ,EAAE,WAAW,EAAW,SAAS,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EACL,CAAC,EAGD,YAAY,EACZ,QAAQ,EACR,IAAI,IAAI,QAAQ,EAChB,OAAO,EACP,IAAI,GACL,MAAM,cAAc,CAAC;AACtB,OAAO,eAAe,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,eAAe,MAAM,oCAAoC,CAAC;AAEjE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,UAAU,MAAM,gCAAgC,CAAC;AAExD,MAAM,cAAc,GAMf,CAAC,EAAE,cAAc,GAAG,KAAK,EAAE,cAAc,GAAG,KAAK,EAAE,EAAE,EAAE;;IAC1D,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,WAAW,EAAE,CAAC;IACjE,MAAM,EAAE,CAAC,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAc,SAAS,CAAC,CAAC;IAKnE,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,GAAgB,EAAE,EAAE;QACnB,YAAY,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;IAGF,MAAM,EACJ,SAAS,EACT,OAAO,EACP,UAAU,EAAE,gBAAgB,EAC5B,eAAe,GAChB,GAAG,eAAe,CACjB,KAAK,CAAC,eAAe,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,EAChE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EACnC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EACvC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CACrC,CAAC;IAGF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,WAAW,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,WAAW,EAAE,CAAC;QACd,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE/C,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACjE,CAAC,EAAE,EAAE,CAAC,CAAC;IAKP,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACxC,IAAI,CAAC,KAAK,CAAC,eAAe;YAAE,OAAO;QAEnC,IAAI,CAAC;YACH,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;gBACzD,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACrE,CAAC;iBAAM,CAAC;gBAEN,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBACpD,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC;gBAC/C,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;gBAClC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,WAAW,CAAC;gBAClC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC;gBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACpC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACjB,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAClB,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBAC7B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACrC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAK5B,MAAM,sBAAsB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9C,IAAI,gBAAgB,EAAE,CAAC;YACrB,gBAAgB,EAAE,CAAC;QACrB,CAAC;IACH,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAKvB,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,aAAa,EAAE,CAAC;IAClB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,UAAU,GACd,CAAA,MAAA,KAAK,CAAC,eAAe,0CAAE,QAAQ,MAAK,MAAM;QAC1C,CAAA,MAAA,KAAK,CAAC,eAAe,0CAAE,QAAQ,MAAK,UAAU,CAAC;IAEjD,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,EAAE,QAAQ,EAAiC,EAAE,EAAE;QAC9C,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CACL,cACE,KAAK,EAAE;oBACL,SAAS,EAAE,MAAM;oBACjB,SAAS,EAAE,MAAM;oBACjB,UAAU,EAAE,oCAAoC;oBAChD,SAAS,EAAE,OAAO;oBAClB,MAAM,EAAE,wCAAwC;iBACjD,EACD,SAAS,EAAC,uBAAuB,YAEhC,QAAQ,GACL,CACP,CAAC;QACJ,CAAC;aAAM,IAAI,cAAc,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEvC,OAAO,cAAK,SAAS,EAAC,+BAA+B,YAAE,QAAQ,GAAO,CAAC;QACzE,CAAC;aAAM,CAAC;YAEN,OAAO,CACL,KAAC,MAAM,IACL,SAAS,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,SAAS,EACjC,IAAI,EAAE,KAAK,CAAC,YAAY,EACxB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAC,OAAO,EACd,IAAI,EAAC,IAAI,EACT,SAAS,EACP,KAAK,CAAC,YAAY,IAAI,QAAQ;oBAC5B,CAAC,CAAC,yCAAyC;oBAC3C,CAAC,CAAC,8BAA8B,EAEpC,QAAQ,EAAE,KAAK,YAEd,QAAQ,GACF,CACV,CAAC;QACJ,CAAC;IACH,CAAC,EACD;QACE,cAAc;QACd,cAAc;QACd,WAAW;QACX,KAAK,CAAC,YAAY;QAClB,KAAK,CAAC,YAAY;QAClB,QAAQ;QACR,SAAS;KACV,CACF,CAAC;IAKF,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,QAAgB,EAAU,EAAE;QACjE,MAAM,SAAS,GAA2B;YACxC,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,kBAAkB;YACxB,QAAQ,EAAE,eAAe;YACzB,GAAG,EAAE,UAAU;YACf,UAAU,EAAE,iBAAiB;YAC7B,UAAU,EAAE,iBAAiB;YAC7B,GAAG,EAAE,eAAe;YACpB,GAAG,EAAE,UAAU;YACf,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,eAAe;YACvB,IAAI,EAAE,aAAa;YACnB,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,eAAe;YACvB,GAAG,EAAE,YAAY;YACjB,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,WAAW;YACjB,GAAG,EAAE,YAAY;SAClB,CAAC;QACF,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC;IAC7C,CAAC,EAAE,EAAE,CAAC,CAAC;IAKP,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,QAAsB,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAEtC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAClD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,KAAK,CACH,2EAA2E,CAC5E,CAAC;gBACF,OAAO;YACT,CAAC;YAGD,UAAU,CAAC,GAAG,EAAE;gBACd,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC,EAAE,KAAK,CAAC,CAAC;QACZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,OAAO,CACL,MAAC,gBAAgB,eAEf,cACE,SAAS,EAAE,EAAE,CAAC,0CAA0C,EAAE;oBACxD,sDAAsD,EAAE,CAAC,UAAU;oBACnE,mDAAmD,EAAE,cAAc;iBACpE,CAAC,YAGD,CAAC,QAAQ,IAAI,CACZ,8BAEG,UAAU,IAAI,CACb,KAAC,SAAS,IACR,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,eAAe,EAC5B,UAAU,EAAE,UAAU,GACtB,CACH,EACD,KAAC,eAAe,IACd,QAAQ,EAAE,KAAK,CAAC,eAAe,EAC/B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,KAAK,EACd,QAAQ,EAAE,QAAQ,GAClB,EACD,CAAC,cAAc,IAAI,CAClB,KAAC,UAAU,IACT,OAAO,EAAE,aAAa,gBACV,CAAC,CAAC,gBAAgB,CAAC,IAAI,OAAO,EAC1C,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,OAAO,EACrC,SAAS,EAAC,+BAA+B,YAEzC,KAAC,CAAC,IAAC,SAAS,EAAC,mBAAmB,wBAAe,GACpC,CACd,IACA,CACJ,GACG,EAGN,cACE,SAAS,EAAE,EAAE,CAAC,kCAAkC,EAAE;oBAChD,8CAA8C,EAAE,CAAC,UAAU;oBAC3D,2CAA2C,EAAE,cAAc;iBAC5D,CAAC,YAGD,QAAQ,IAAI,CACX,8BACG,UAAU,IAAI,CACb,KAAC,SAAS,IACR,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,eAAe,EAC5B,UAAU,EAAE,UAAU,GACtB,CACH,EACD,eAAK,SAAS,EAAC,0CAA0C,aACvD,MAAC,QAAQ,IAAC,SAAS,EAAC,4BAA4B,aAC9C,KAAC,QAAQ,CAAC,OAAO,IACf,WAAW,EAAE,KAAK,EAClB,SAAS,EAAC,+BAA+B,EACzC,MAAM,EAAE,CACN,KAAoD,EACpD,EAAE,CAAC,CACH,KAAC,MAAM,OACD,KAAK,EACT,SAAS,EAAE,EAAE,CACX,eAAe,EACf,6BAA6B,EAC7B,0BAA0B,CAC3B,EACD,OAAO,EAAC,OAAO,EACf,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,IAAI,SAAS,YAEzC,KAAC,YAAY,IAAC,SAAS,EAAC,6BAA6B,GAAG,GACjD,CACV,GACD,EACF,MAAC,QAAQ,CAAC,IAAI,IACZ,SAAS,EAAC,wBAAwB,EAClC,SAAS,EAAC,QAAQ,EAClB,KAAK,EAAC,KAAK,EACX,UAAU,EAAE,CAAC,EACb,SAAS,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,SAAS,aAEjC,KAAC,QAAQ,CAAC,IAAI,IACZ,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,KAAC,IAAI,IAAC,SAAS,EAAC,6BAA6B,GAAG,EACtD,KAAK,EAAE,CAAC,CAAC,eAAe,CAAC,IAAI,MAAM,YAElC,CAAC,CAAC,eAAe,CAAC,IAAI,MAAM,GACf,EAEf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;oDACpB,MAAM,OAAO,GAAG,GAAG,EAAE;wDACnB,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;4DACtB,KAAK,MAAM;gEACT,OAAO,CACL,KAAC,QAAQ,IAAC,SAAS,EAAC,6BAA6B,GAAG,CACrD,CAAC;4DACJ,KAAK,UAAU;gEACb,OAAO,CACL,KAAC,QAAQ,IAAC,SAAS,EAAC,6BAA6B,GAAG,CACrD,CAAC;4DACJ,KAAK,OAAO,CAAC;4DACb,KAAK,KAAK;gEACR,OAAO,CACL,KAAC,OAAO,IAAC,SAAS,EAAC,6BAA6B,GAAG,CACpD,CAAC;4DACJ;gEACE,OAAO,CACL,KAAC,QAAQ,IAAC,SAAS,EAAC,6BAA6B,GAAG,CACrD,CAAC;wDACN,CAAC;oDACH,CAAC,CAAC;oDAEF,OAAO,CACL,KAAC,QAAQ,CAAC,IAAI,IAEZ,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACvC,QAAQ,EACN,SAAS,CAAC,OAAO;4DACjB,SAAS,CAAC,YAAY,KAAK,MAAM,CAAC,EAAE,EAEtC,IAAI,EAAE,OAAO,EAAE,EACf,KAAK,EAAE,MAAM,CAAC,KAAK,YAElB,MAAM,CAAC,KAAK,IAVR,MAAM,CAAC,EAAE,CAWA,CACjB,CAAC;gDACJ,CAAC,CAAC,EAEF,KAAC,QAAQ,CAAC,IAAI,IACZ,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,GAAG,EAAE;;wDACZ,OAAA,kBAAkB,CAChB,MAAA,KAAK,CAAC,eAAe,mCAAI;4DACvB,OAAO,EAAE,EAAE;4DACX,QAAQ,EAAE,EAAE;4DACZ,KAAK,EAAE,EAAE;4DACT,SAAS,EAAE,IAAI,IAAI,EAAE;4DACrB,IAAI,EAAE,CAAC;4DACP,EAAE,EAAE,EAAE;yDACP,CACF,CAAA;qDAAA,EAEH,IAAI,EAAE,KAAC,QAAQ,IAAC,SAAS,EAAC,6BAA6B,GAAG,EAC1D,KAAK,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,UAAU,YAE1C,CAAC,CAAC,mBAAmB,CAAC,IAAI,UAAU,GACvB,IACF,IACP,EACX,KAAC,UAAU,IACT,OAAO,EAAE,aAAa,gBACV,CAAC,CAAC,gBAAgB,CAAC,IAAI,OAAO,EAC1C,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,OAAO,EACrC,SAAS,EAAC,+BAA+B,YAEzC,KAAC,CAAC,IAAC,SAAS,EAAC,mBAAmB,wBAAe,GACpC,IACT,IACL,CACJ,GACG,EAGN,cAAK,SAAS,EAAC,gCAAgC,YAC7C,cAAK,SAAS,EAAC,6BAA6B,YAC1C,KAAC,eAAe,IACd,QAAQ,EAAE,KAAK,CAAC,eAAe,EAC/B,SAAS,EAAE,SAAS,GACpB,GACE,GACF,IACW,CACpB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"ArtifactDrawer.js","sourceRoot":"","sources":["../../../../../src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx"],"names":[],"mappings":"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"}
@@ -18,6 +18,13 @@
18
18
  background-color: transparent;
19
19
  }
20
20
 
21
+ .memori-tabs[data-memori-variant='segmented'] .memori-tabs__tab {
22
+ flex: 1 1 0;
23
+ border: var(--memori-border, 1px) solid
24
+ color-mix(in srgb, var(--memori-text-color, #111827) 18%, transparent);
25
+ border-radius: var(--memori-radius-box);
26
+ }
27
+
21
28
  .memori-tab-switch__tab {
22
29
  min-width: 40px;
23
30
  flex: 0 0 auto;
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import React, { useEffect, useMemo, useCallback, memo } from 'react';
2
+ import React, { useEffect, useState, useMemo, useCallback, memo, useRef, } from 'react';
3
3
  import { useArtifact } from '../../context/ArtifactContext';
4
4
  import { ChevronRight, ChevronDown, ChevronLeft, ChevronUp, } from 'lucide-react';
5
5
  import ArtifactDrawer from '../ArtifactDrawer/ArtifactDrawer';
@@ -12,6 +12,8 @@ import MarkdownIcon from '../../../../icons/artifacts/MarkdownIcon';
12
12
  import PythonIcon from '../../../../icons/artifacts/PythonIcon';
13
13
  import SvgIcon from '../../../../icons/artifacts/SvgIcon';
14
14
  import XmlIcon from '../../../../icons/artifacts/XmlIcon';
15
+ import { parseEdits } from '../../utils/applyEdits';
16
+ import { useTranslation } from 'react-i18next';
15
17
  const formatBytes = (bytes) => {
16
18
  if (bytes === 0)
17
19
  return '0 Bytes';
@@ -20,24 +22,64 @@ const formatBytes = (bytes) => {
20
22
  const i = Math.floor(Math.log(bytes) / Math.log(k));
21
23
  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
22
24
  };
23
- const hashContent = (str) => {
24
- let hash = 0;
25
- const len = Math.min(str.length, 200);
26
- for (let i = 0; i < len; i++) {
27
- hash = (hash << 5) - hash + str.charCodeAt(i);
28
- hash |= 0;
29
- }
30
- return Math.abs(hash).toString(36);
31
- };
32
25
  const CLASS_ATTR_RE = /class\s*=\s*["']([^"']*)["']/i;
33
- const hasMemoriArtifactClass = (openingTag) => {
26
+ const DATA_ACTION_RE = /data-action\s*=\s*["']([^"']+)["']/i;
27
+ const getClassList = (openingTag) => {
34
28
  const m = openingTag.match(CLASS_ATTR_RE);
35
29
  if (!m)
30
+ return [];
31
+ return m[1].split(/\s+/).filter(Boolean);
32
+ };
33
+ const getDataAction = (openingTag) => {
34
+ var _a;
35
+ const m = openingTag.match(DATA_ACTION_RE);
36
+ return ((_a = m === null || m === void 0 ? void 0 : m[1]) === null || _a === void 0 ? void 0 : _a.trim().toLowerCase()) || null;
37
+ };
38
+ const isCreateArtifactTag = (openingTag) => {
39
+ const classes = getClassList(openingTag);
40
+ if (classes.includes('memori-artifact-update'))
41
+ return false;
42
+ if (!classes.includes('memori-artifact'))
43
+ return false;
44
+ const action = getDataAction(openingTag);
45
+ return action === null || action === 'create';
46
+ };
47
+ const isUpdateArtifactTag = (openingTag) => {
48
+ const classes = getClassList(openingTag);
49
+ if (classes.includes('memori-artifact-update'))
50
+ return true;
51
+ if (!classes.includes('memori-artifact'))
36
52
  return false;
37
- return /\bmemori-artifact\b/.test(m[1]);
53
+ return getDataAction(openingTag) === 'update';
54
+ };
55
+ const findMatchingOutputClose = (cleaned, openEnd) => {
56
+ let depth = 1;
57
+ let pos = openEnd;
58
+ let closeStart = -1;
59
+ while (pos < cleaned.length && depth > 0) {
60
+ const nextOpen = cleaned.indexOf('<output', pos);
61
+ const nextClose = cleaned.indexOf('</output>', pos);
62
+ if (nextClose === -1) {
63
+ return cleaned.length;
64
+ }
65
+ if (nextOpen !== -1 && nextOpen < nextClose) {
66
+ depth++;
67
+ pos = nextOpen + '<output'.length;
68
+ }
69
+ else {
70
+ depth--;
71
+ if (depth === 0) {
72
+ closeStart = nextClose;
73
+ }
74
+ else {
75
+ pos = nextClose + '</output>'.length;
76
+ }
77
+ }
78
+ }
79
+ return closeStart;
38
80
  };
39
81
  const detectArtifacts = (text, isFromUser, messageKey) => {
40
- var _a;
82
+ var _a, _b;
41
83
  if (!text || isFromUser)
42
84
  return [];
43
85
  const cleaned = stripReasoningTags(text);
@@ -51,37 +93,12 @@ const detectArtifacts = (text, isFromUser, messageKey) => {
51
93
  if (!openMatch)
52
94
  break;
53
95
  const fullOpenTag = openMatch[0];
54
- const openStart = openMatch.index;
55
- const openEnd = openStart + fullOpenTag.length;
56
- if (!hasMemoriArtifactClass(fullOpenTag)) {
96
+ const openEnd = openMatch.index + fullOpenTag.length;
97
+ if (!isCreateArtifactTag(fullOpenTag)) {
57
98
  searchFrom = openEnd;
58
99
  continue;
59
100
  }
60
- let depth = 1;
61
- let pos = openEnd;
62
- let closeStart = -1;
63
- while (pos < cleaned.length && depth > 0) {
64
- const nextOpen = cleaned.indexOf('<output', pos);
65
- const nextClose = cleaned.indexOf('</output>', pos);
66
- if (nextClose === -1) {
67
- closeStart = cleaned.length;
68
- depth = 0;
69
- break;
70
- }
71
- if (nextOpen !== -1 && nextOpen < nextClose) {
72
- depth++;
73
- pos = nextOpen + '<output'.length;
74
- }
75
- else {
76
- depth--;
77
- if (depth === 0) {
78
- closeStart = nextClose;
79
- }
80
- else {
81
- pos = nextClose + '</output>'.length;
82
- }
83
- }
84
- }
101
+ const closeStart = findMatchingOutputClose(cleaned, openEnd);
85
102
  if (closeStart === -1) {
86
103
  searchFrom = openEnd;
87
104
  continue;
@@ -95,9 +112,12 @@ const detectArtifacts = (text, isFromUser, messageKey) => {
95
112
  (htmlTitleMatch === null || htmlTitleMatch === void 0 ? void 0 : htmlTitleMatch[1]) ||
96
113
  `${mimeType.toUpperCase()} Artifact`;
97
114
  artifactNum++;
98
- const stableId = `artifact-${messageKey}-${artifactNum}-${hashContent(content)}`;
115
+ const dataArtifactIdMatch = fullOpenTag.match(/data-artifact-id\s*=\s*["']([^"']+)["']/i);
116
+ const artifactId = ((_b = dataArtifactIdMatch === null || dataArtifactIdMatch === void 0 ? void 0 : dataArtifactIdMatch[1]) === null || _b === void 0 ? void 0 : _b.trim()) ||
117
+ `artifact-${messageKey}-${artifactNum}`;
99
118
  artifacts.push({
100
- id: stableId,
119
+ id: `artifact-ui-${artifactId}`,
120
+ artifactId,
101
121
  content,
102
122
  mimeType,
103
123
  title,
@@ -111,9 +131,46 @@ const detectArtifacts = (text, isFromUser, messageKey) => {
111
131
  }
112
132
  return artifacts;
113
133
  };
134
+ const detectUpdates = (text, isFromUser) => {
135
+ var _a;
136
+ if (!text || isFromUser)
137
+ return [];
138
+ const cleaned = stripReasoningTags(text);
139
+ const updates = [];
140
+ let searchFrom = 0;
141
+ const OPEN_TAG_RE = /<output\b([^>]*)>/gi;
142
+ while (searchFrom < cleaned.length) {
143
+ OPEN_TAG_RE.lastIndex = searchFrom;
144
+ const openMatch = OPEN_TAG_RE.exec(cleaned);
145
+ if (!openMatch)
146
+ break;
147
+ const fullOpenTag = openMatch[0];
148
+ const openEnd = openMatch.index + fullOpenTag.length;
149
+ if (!isUpdateArtifactTag(fullOpenTag)) {
150
+ searchFrom = openEnd;
151
+ continue;
152
+ }
153
+ const closeStart = cleaned.indexOf('</output>', openEnd);
154
+ const bodyEnd = closeStart === -1 ? cleaned.length : closeStart;
155
+ const body = cleaned.slice(openEnd, bodyEnd).trim();
156
+ const idMatch = fullOpenTag.match(/data-artifact-id\s*=\s*["']([^"']+)["']/i);
157
+ const artifactId = (_a = idMatch === null || idMatch === void 0 ? void 0 : idMatch[1]) === null || _a === void 0 ? void 0 : _a.trim();
158
+ const edits = parseEdits(body);
159
+ if (artifactId && edits) {
160
+ updates.push({ artifactId, edits });
161
+ }
162
+ else if (artifactId) {
163
+ updates.push({ artifactId, edits: [] });
164
+ }
165
+ searchFrom =
166
+ closeStart === -1 ? cleaned.length : closeStart + '</output>'.length;
167
+ }
168
+ return updates;
169
+ };
114
170
  const ArtifactHandler = ({ isChatlogPanel = false, message, }) => {
115
171
  var _a;
116
- const { openArtifact, state, closeArtifact } = useArtifact();
172
+ const { openArtifact, state, closeArtifact, registerArtifact, applyArtifactUpdate, } = useArtifact();
173
+ const { t } = useTranslation();
117
174
  const messageText = useMemo(() => message.text || '', [message.text]);
118
175
  const translatedMessageText = useMemo(() => message.translatedText || '', [message.translatedText]);
119
176
  const messageKey = useMemo(() => `${message.timestamp}-${message.fromUser ? '1' : '0'}`, [message.timestamp, message.fromUser]);
@@ -133,18 +190,79 @@ const ArtifactHandler = ({ isChatlogPanel = false, message, }) => {
133
190
  return primary;
134
191
  return detectArtifacts(translatedMessageText, fromUser, messageKey);
135
192
  }, [messageText, translatedMessageText, message.fromUser, messageKey]);
193
+ const detectedUpdates = useMemo(() => {
194
+ const fromUser = message.fromUser || false;
195
+ const primary = detectUpdates(messageText, fromUser);
196
+ if (primary.length > 0)
197
+ return primary;
198
+ return detectUpdates(translatedMessageText, fromUser);
199
+ }, [messageText, translatedMessageText, message.fromUser]);
200
+ const [updateResultMap, setUpdateResultMap] = useState({});
201
+ const [failedUpdates, setFailedUpdates] = useState([]);
202
+ const processedUpdatesRef = useRef('');
203
+ const hasAutoOpenedRef = useRef('');
136
204
  useEffect(() => {
137
- if (!messageText || artifacts.length === 0)
205
+ if (!messageText && !translatedMessageText)
138
206
  return;
139
- artifacts.forEach(artifact => dispatchArtifactCreatedEvent(artifact));
140
- if (!isChatlogPanel) {
141
- const timer = setTimeout(() => openArtifact(artifacts[0], { isChatLogPanel: false }), 100);
142
- return () => clearTimeout(timer);
207
+ artifacts.forEach(artifact => {
208
+ registerArtifact(artifact);
209
+ dispatchArtifactCreatedEvent(artifact);
210
+ });
211
+ const updatesSignature = `${messageKey}:${detectedUpdates
212
+ .map(u => `${u.artifactId}:${JSON.stringify(u.edits)}`)
213
+ .join('|')}`;
214
+ let lastUpdated = null;
215
+ if (detectedUpdates.length > 0 &&
216
+ processedUpdatesRef.current !== updatesSignature) {
217
+ processedUpdatesRef.current = updatesSignature;
218
+ const nextMap = {};
219
+ const nextFailed = [];
220
+ detectedUpdates.forEach((update, idx) => {
221
+ var _a;
222
+ if (!update.edits.length) {
223
+ nextFailed.push({
224
+ artifactId: update.artifactId,
225
+ reason: 'invalid',
226
+ });
227
+ return;
228
+ }
229
+ const result = applyArtifactUpdate(update.artifactId, update.edits);
230
+ if (result.updatedArtifact) {
231
+ nextMap[idx] = result.updatedArtifact;
232
+ lastUpdated = result.updatedArtifact;
233
+ dispatchArtifactCreatedEvent(result.updatedArtifact);
234
+ }
235
+ else {
236
+ nextFailed.push({
237
+ artifactId: update.artifactId,
238
+ reason: (_a = result.failureReason) !== null && _a !== void 0 ? _a : 'no-match',
239
+ });
240
+ }
241
+ });
242
+ setUpdateResultMap(nextMap);
243
+ setFailedUpdates(nextFailed);
143
244
  }
245
+ if (isChatlogPanel)
246
+ return;
247
+ const openTarget = lastUpdated !== null && lastUpdated !== void 0 ? lastUpdated : (Object.keys(updateResultMap).length === 0 && artifacts.length > 0
248
+ ? artifacts[0]
249
+ : null);
250
+ if (!openTarget)
251
+ return;
252
+ if (hasAutoOpenedRef.current === messageKey)
253
+ return;
254
+ hasAutoOpenedRef.current = messageKey;
255
+ const timer = setTimeout(() => openArtifact(openTarget, { isChatLogPanel: false }), 100);
256
+ return () => clearTimeout(timer);
144
257
  }, [
145
258
  messageKey,
146
259
  messageText,
260
+ translatedMessageText,
147
261
  artifacts,
262
+ detectedUpdates,
263
+ updateResultMap,
264
+ registerArtifact,
265
+ applyArtifactUpdate,
148
266
  dispatchArtifactCreatedEvent,
149
267
  isChatlogPanel,
150
268
  openArtifact,
@@ -157,7 +275,13 @@ const ArtifactHandler = ({ isChatlogPanel = false, message, }) => {
157
275
  else {
158
276
  openArtifact(artifact, { isChatLogPanel: isChatlogPanel });
159
277
  }
160
- }, [state.isDrawerOpen, (_a = state.currentArtifact) === null || _a === void 0 ? void 0 : _a.id, closeArtifact, openArtifact]);
278
+ }, [
279
+ state.isDrawerOpen,
280
+ (_a = state.currentArtifact) === null || _a === void 0 ? void 0 : _a.id,
281
+ closeArtifact,
282
+ openArtifact,
283
+ isChatlogPanel,
284
+ ]);
161
285
  const getIconForMimeType = useCallback((mimeType) => {
162
286
  const m = mimeType.toLowerCase();
163
287
  const iconProps = { 'aria-hidden': true };
@@ -179,20 +303,44 @@ const ArtifactHandler = ({ isChatlogPanel = false, message, }) => {
179
303
  return _jsx(SvgIcon, { ...iconProps });
180
304
  return _jsx(DocumentIcon, { ...iconProps });
181
305
  }, []);
182
- if (artifacts.length === 0)
306
+ const updatedLabel = t('artifact.updated') || 'updated';
307
+ const updateFailedLabel = t('artifact.updateFailed') || 'Update could not be applied';
308
+ const updateFailedHint = t('artifact.updateFailedHint') ||
309
+ 'The patch did not match the current content. Ask to rewrite the artifact.';
310
+ const updateEntries = Object.entries(updateResultMap);
311
+ const hasCreates = artifacts.length > 0;
312
+ const hasUpdates = updateEntries.length > 0;
313
+ const hasFailed = failedUpdates.length > 0;
314
+ if (!hasCreates && !hasUpdates && !hasFailed)
183
315
  return null;
184
- return (_jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: '10px' }, children: artifacts.map(artifact => {
185
- var _a, _b, _c, _d;
186
- const isSelected = state.isDrawerOpen && ((_a = state.currentArtifact) === null || _a === void 0 ? void 0 : _a.id) === artifact.id;
187
- return (_jsxs(React.Fragment, { children: [_jsxs("button", { type: "button", className: `memori-artifact-handler${isSelected ? ' memori-artifact-handler--selected' : ''}`, onClick: () => handleArtifactClick(artifact), "aria-pressed": isSelected, "aria-label": artifact.title, style: isSelected
188
- ? {
189
- border: '2px solid var(--memori-border-primary)',
190
- }
191
- : undefined, children: [_jsx("div", { className: "memori-artifact-handler-icon", children: getIconForMimeType(artifact.mimeType) }), _jsxs("div", { className: "memori-artifact-handler-info", children: [_jsx("div", { className: "memori-artifact-handler-title", children: artifact.title }), _jsxs("div", { className: "memori-artifact-handler-meta", children: [artifact.mimeType, " \u2022 ", formatBytes(artifact.size || 0)] })] }), _jsx("div", { className: "memori-artifact-handler-action", children: isChatlogPanel ? (state.isDrawerOpen &&
192
- ((_b = state.currentArtifact) === null || _b === void 0 ? void 0 : _b.id) === artifact.id ? (_jsx(ChevronUp, { className: "memori-artifact-handler-action-icon" })) : (_jsx(ChevronDown, { className: "memori-artifact-handler-action-icon" }))) : state.isDrawerOpen &&
193
- ((_c = state.currentArtifact) === null || _c === void 0 ? void 0 : _c.id) === artifact.id ? (_jsx(ChevronLeft, { className: "memori-artifact-handler-action-icon" })) : (_jsx(ChevronRight, { className: "memori-artifact-handler-action-icon" })) })] }), isChatlogPanel && state.isDrawerOpen &&
194
- ((_d = state.currentArtifact) === null || _d === void 0 ? void 0 : _d.id) === artifact.id && (_jsx(ArtifactDrawer, { isChatLogPanel: true }))] }, artifact.id));
195
- }) }));
316
+ const renderChevron = (isSelected) => {
317
+ if (isChatlogPanel) {
318
+ return isSelected ? (_jsx(ChevronUp, { className: "memori-artifact-handler-action-icon" })) : (_jsx(ChevronDown, { className: "memori-artifact-handler-action-icon" }));
319
+ }
320
+ return isSelected ? (_jsx(ChevronLeft, { className: "memori-artifact-handler-action-icon" })) : (_jsx(ChevronRight, { className: "memori-artifact-handler-action-icon" }));
321
+ };
322
+ const renderInlineDrawer = (isSelected) => isChatlogPanel && isSelected ? (_jsx(ArtifactDrawer, { isChatLogPanel: true })) : null;
323
+ return (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '10px' }, children: [artifacts.map(artifact => {
324
+ var _a;
325
+ const isSelected = state.isDrawerOpen && ((_a = state.currentArtifact) === null || _a === void 0 ? void 0 : _a.id) === artifact.id;
326
+ return (_jsxs(React.Fragment, { children: [_jsxs("button", { type: "button", className: `memori-artifact-handler${isSelected ? ' memori-artifact-handler--selected' : ''}`, onClick: () => handleArtifactClick(artifact), "aria-pressed": isSelected, "aria-label": artifact.title, style: isSelected
327
+ ? {
328
+ border: '2px solid var(--memori-border-primary)',
329
+ }
330
+ : undefined, children: [_jsx("div", { className: "memori-artifact-handler-icon", children: getIconForMimeType(artifact.mimeType) }), _jsxs("div", { className: "memori-artifact-handler-info", children: [_jsx("div", { className: "memori-artifact-handler-title", children: artifact.title }), _jsxs("div", { className: "memori-artifact-handler-meta", children: [artifact.mimeType, " \u2022 ", formatBytes(artifact.size || 0)] })] }), _jsx("div", { className: "memori-artifact-handler-action", children: renderChevron(isSelected) })] }), renderInlineDrawer(isSelected)] }, artifact.id));
331
+ }), updateEntries.map(([, artifact]) => {
332
+ var _a;
333
+ const isSelected = state.isDrawerOpen && ((_a = state.currentArtifact) === null || _a === void 0 ? void 0 : _a.id) === artifact.id;
334
+ return (_jsxs(React.Fragment, { children: [_jsxs("button", { type: "button", className: `memori-artifact-handler${isSelected ? ' memori-artifact-handler--selected' : ''}`, onClick: () => handleArtifactClick(artifact), "aria-pressed": isSelected, "aria-label": `${artifact.title} — ${updatedLabel}`, style: isSelected
335
+ ? {
336
+ border: '2px solid var(--memori-border-primary)',
337
+ }
338
+ : undefined, children: [_jsx("div", { className: "memori-artifact-handler-icon", children: getIconForMimeType(artifact.mimeType) }), _jsxs("div", { className: "memori-artifact-handler-info", children: [_jsxs("div", { className: "memori-artifact-handler-title", children: [artifact.title, " \u2014 ", updatedLabel] }), _jsxs("div", { className: "memori-artifact-handler-meta", children: [artifact.mimeType, " \u2022 ", formatBytes(artifact.size || 0)] })] }), _jsx("div", { className: "memori-artifact-handler-action", children: renderChevron(isSelected) })] }), renderInlineDrawer(isSelected)] }, artifact.id));
339
+ }), failedUpdates.map((failed, idx) => (_jsxs("div", { className: "memori-artifact-handler memori-artifact-handler--failed", style: {
340
+ opacity: 0.85,
341
+ border: '1px dashed var(--memori-danger, #ef4444)',
342
+ cursor: 'default',
343
+ }, role: "status", children: [_jsx("div", { className: "memori-artifact-handler-icon", children: "\u26A0\uFE0F" }), _jsxs("div", { className: "memori-artifact-handler-info", children: [_jsx("div", { className: "memori-artifact-handler-title", children: updateFailedLabel }), _jsxs("div", { className: "memori-artifact-handler-meta", children: [failed.artifactId, " \u2022 ", updateFailedHint] })] })] }, `failed-${failed.artifactId}-${idx}`)))] }));
196
344
  };
197
345
  const MemoizedArtifactHandler = memo(ArtifactHandler, (prev, next) => {
198
346
  const prevText = prev.message.text || prev.message.translatedText || '';