@alpaca-editor/core 1.0.4033 → 1.0.4037

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 (187) hide show
  1. package/dist/components/index.d.ts +1 -0
  2. package/dist/components/index.js +1 -0
  3. package/dist/components/index.js.map +1 -1
  4. package/dist/{editor/menubar → components/ui}/LanguageSelector.d.ts +1 -1
  5. package/dist/{editor/menubar → components/ui}/LanguageSelector.js +8 -8
  6. package/dist/components/ui/LanguageSelector.js.map +1 -0
  7. package/dist/components/ui/button.d.ts +1 -1
  8. package/dist/components/ui/dropdown-menu.d.ts +1 -1
  9. package/dist/components/ui/dropdown-menu.js +2 -2
  10. package/dist/components/ui/dropdown-menu.js.map +1 -1
  11. package/dist/components/ui/sonner.js +3 -1
  12. package/dist/components/ui/sonner.js.map +1 -1
  13. package/dist/config/config.js +5 -5
  14. package/dist/config/config.js.map +1 -1
  15. package/dist/editor/ContentTree.d.ts +2 -1
  16. package/dist/editor/ContentTree.js +33 -9
  17. package/dist/editor/ContentTree.js.map +1 -1
  18. package/dist/editor/PictureEditor.js +2 -2
  19. package/dist/editor/PictureEditor.js.map +1 -1
  20. package/dist/editor/ScrollingContentTree.d.ts +2 -1
  21. package/dist/editor/ScrollingContentTree.js +2 -2
  22. package/dist/editor/ScrollingContentTree.js.map +1 -1
  23. package/dist/editor/Terminal.d.ts +2 -0
  24. package/dist/editor/Terminal.js +2 -2
  25. package/dist/editor/Terminal.js.map +1 -1
  26. package/dist/editor/ai/AgentHistory.d.ts +11 -0
  27. package/dist/editor/ai/AgentHistory.js +12 -0
  28. package/dist/editor/ai/AgentHistory.js.map +1 -0
  29. package/dist/editor/ai/Agents.js +187 -24
  30. package/dist/editor/ai/Agents.js.map +1 -1
  31. package/dist/editor/ai/AiResponseMessage.d.ts +2 -1
  32. package/dist/editor/ai/AiResponseMessage.js +6 -6
  33. package/dist/editor/ai/AiResponseMessage.js.map +1 -1
  34. package/dist/editor/ai/AiTerminal.d.ts +1 -0
  35. package/dist/editor/ai/AiTerminal.js +330 -43
  36. package/dist/editor/ai/AiTerminal.js.map +1 -1
  37. package/dist/editor/client/itemsRepository.js +19 -7
  38. package/dist/editor/client/itemsRepository.js.map +1 -1
  39. package/dist/editor/field-types/InternalLinkFieldEditor.js +48 -1
  40. package/dist/editor/field-types/InternalLinkFieldEditor.js.map +1 -1
  41. package/dist/editor/field-types/richtext/contextMenuFactory.js +1 -1
  42. package/dist/editor/field-types/richtext/contextMenuFactory.js.map +1 -1
  43. package/dist/editor/menubar/ItemLanguageVersion.js +1 -1
  44. package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
  45. package/dist/editor/menubar/PageSelector.js +1 -1
  46. package/dist/editor/menubar/PageSelector.js.map +1 -1
  47. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +1 -1
  48. package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
  49. package/dist/editor/page-editor-chrome/FieldEditedIndicator.js +2 -2
  50. package/dist/editor/page-editor-chrome/FieldEditedIndicator.js.map +1 -1
  51. package/dist/editor/page-editor-chrome/FrameMenu.js +2 -2
  52. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  53. package/dist/editor/page-editor-chrome/InlineEditor.js +9 -9
  54. package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -1
  55. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +2 -2
  56. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js.map +1 -1
  57. package/dist/editor/page-editor-chrome/PageEditorChrome.js +1 -1
  58. package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
  59. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +1 -1
  60. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js.map +1 -1
  61. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +1 -1
  62. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +2 -2
  63. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
  64. package/dist/editor/page-editor-chrome/useInlineAICompletion.js +12 -12
  65. package/dist/editor/page-editor-chrome/useInlineAICompletion.js.map +1 -1
  66. package/dist/editor/page-viewer/EditorForm.js +1 -1
  67. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  68. package/dist/editor/page-viewer/MiniMap.js +10 -11
  69. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  70. package/dist/editor/page-viewer/PageViewer.js +2 -2
  71. package/dist/editor/page-viewer/PageViewer.js.map +1 -1
  72. package/dist/editor/page-viewer/PageViewerFrame.js +4 -4
  73. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  74. package/dist/editor/page-viewer/pageViewContext.d.ts +2 -2
  75. package/dist/editor/page-viewer/pageViewContext.js +11 -14
  76. package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
  77. package/dist/editor/services/agentService.d.ts +21 -1
  78. package/dist/editor/services/agentService.js +101 -0
  79. package/dist/editor/services/agentService.js.map +1 -1
  80. package/dist/editor/services/aiService.d.ts +1 -1
  81. package/dist/editor/services/aiService.js +1 -2
  82. package/dist/editor/services/aiService.js.map +1 -1
  83. package/dist/editor/sidebar/GraphQL.js +5 -6
  84. package/dist/editor/sidebar/GraphQL.js.map +1 -1
  85. package/dist/editor/sidebar/MainContentTree.d.ts +2 -1
  86. package/dist/editor/sidebar/MainContentTree.js +9 -5
  87. package/dist/editor/sidebar/MainContentTree.js.map +1 -1
  88. package/dist/editor/ui/Icons.d.ts +5 -0
  89. package/dist/editor/ui/Icons.js +3 -0
  90. package/dist/editor/ui/Icons.js.map +1 -1
  91. package/dist/editor/ui/ItemNameDialogNew.js +26 -14
  92. package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
  93. package/dist/editor/ui/PerfectTree.js +54 -2
  94. package/dist/editor/ui/PerfectTree.js.map +1 -1
  95. package/dist/editor/views/CompareView.js +3 -3
  96. package/dist/editor/views/CompareView.js.map +1 -1
  97. package/dist/editor/views/EditView.js +1 -1
  98. package/dist/editor/views/EditView.js.map +1 -1
  99. package/dist/editor/views/ItemEditor.js +1 -1
  100. package/dist/editor/views/ItemEditor.js.map +1 -1
  101. package/dist/index.d.ts +3 -4
  102. package/dist/index.js +3 -4
  103. package/dist/index.js.map +1 -1
  104. package/dist/page-wizard/steps/ContentStep.js +5 -5
  105. package/dist/page-wizard/steps/ContentStep.js.map +1 -1
  106. package/dist/page-wizard/steps/FindItemsStep.js +1 -1
  107. package/dist/page-wizard/steps/ImagesStep.js +1 -1
  108. package/dist/page-wizard/steps/ImagesStep.js.map +1 -1
  109. package/dist/page-wizard/steps/LayoutStep.js +1 -1
  110. package/dist/page-wizard/steps/LayoutStep.js.map +1 -1
  111. package/dist/page-wizard/steps/MetaDataStep.js +1 -1
  112. package/dist/page-wizard/steps/MetaDataStep.js.map +1 -1
  113. package/dist/page-wizard/steps/SelectStep.js +1 -1
  114. package/dist/page-wizard/steps/StructureStep.js +28 -11
  115. package/dist/page-wizard/steps/StructureStep.js.map +1 -1
  116. package/dist/page-wizard/steps/TranslateStep.d.ts +1 -0
  117. package/dist/page-wizard/steps/TranslateStep.js +67 -73
  118. package/dist/page-wizard/steps/TranslateStep.js.map +1 -1
  119. package/dist/revision.d.ts +2 -2
  120. package/dist/revision.js +2 -2
  121. package/dist/splash-screen/NewPage.js +1 -1
  122. package/dist/splash-screen/NewPage.js.map +1 -1
  123. package/dist/splash-screen/OpenPage.js +1 -1
  124. package/dist/splash-screen/OpenPage.js.map +1 -1
  125. package/dist/styles.css +71 -8
  126. package/package.json +1 -1
  127. package/src/components/index.ts +1 -0
  128. package/src/{editor/menubar → components/ui}/LanguageSelector.tsx +12 -12
  129. package/src/components/ui/dropdown-menu.tsx +3 -1
  130. package/src/components/ui/sonner.tsx +5 -1
  131. package/src/config/config.tsx +4 -3
  132. package/src/editor/ContentTree.tsx +41 -12
  133. package/src/editor/PictureEditor.tsx +2 -2
  134. package/src/editor/ScrollingContentTree.tsx +3 -0
  135. package/src/editor/Terminal.tsx +16 -7
  136. package/src/editor/ai/AgentHistory.tsx +85 -0
  137. package/src/editor/ai/Agents.tsx +256 -88
  138. package/src/editor/ai/AiResponseMessage.tsx +25 -11
  139. package/src/editor/ai/AiTerminal.tsx +571 -73
  140. package/src/editor/client/itemsRepository.ts +29 -12
  141. package/src/editor/field-types/InternalLinkFieldEditor.tsx +52 -1
  142. package/src/editor/field-types/richtext/components/SimpleRichTextEditor.css +64 -0
  143. package/src/editor/field-types/richtext/contextMenuFactory.tsx +7 -8
  144. package/src/editor/menubar/ItemLanguageVersion.tsx +1 -1
  145. package/src/editor/menubar/PageSelector.tsx +1 -0
  146. package/src/editor/page-editor-chrome/FieldActionIndicator.tsx +1 -1
  147. package/src/editor/page-editor-chrome/FieldEditedIndicator.tsx +3 -3
  148. package/src/editor/page-editor-chrome/FrameMenu.tsx +2 -2
  149. package/src/editor/page-editor-chrome/InlineEditor.tsx +9 -12
  150. package/src/editor/page-editor-chrome/LockedFieldIndicator.tsx +3 -3
  151. package/src/editor/page-editor-chrome/PageEditorChrome.tsx +3 -3
  152. package/src/editor/page-editor-chrome/PictureEditorOverlay.tsx +1 -1
  153. package/src/editor/page-editor-chrome/PlaceholderDropZone.tsx +1 -1
  154. package/src/editor/page-editor-chrome/PlaceholderDropZones.tsx +2 -2
  155. package/src/editor/page-editor-chrome/useInlineAICompletion.tsx +12 -18
  156. package/src/editor/page-viewer/EditorForm.tsx +1 -1
  157. package/src/editor/page-viewer/MiniMap.tsx +10 -11
  158. package/src/editor/page-viewer/PageViewer.tsx +8 -3
  159. package/src/editor/page-viewer/PageViewerFrame.tsx +4 -4
  160. package/src/editor/page-viewer/pageViewContext.ts +71 -66
  161. package/src/editor/services/agentService.ts +129 -1
  162. package/src/editor/services/aiService.ts +2 -4
  163. package/src/editor/sidebar/GraphQL.tsx +16 -15
  164. package/src/editor/sidebar/MainContentTree.tsx +12 -4
  165. package/src/editor/ui/Icons.tsx +35 -0
  166. package/src/editor/ui/ItemNameDialogNew.tsx +29 -13
  167. package/src/editor/ui/PerfectTree.tsx +70 -4
  168. package/src/editor/views/CompareView.tsx +3 -3
  169. package/src/editor/views/EditView.tsx +1 -1
  170. package/src/editor/views/ItemEditor.tsx +1 -1
  171. package/src/index.ts +10 -4
  172. package/src/page-wizard/steps/ContentStep.tsx +5 -5
  173. package/src/page-wizard/steps/FindItemsStep.tsx +1 -1
  174. package/src/page-wizard/steps/ImagesStep.tsx +1 -1
  175. package/src/page-wizard/steps/LayoutStep.tsx +1 -1
  176. package/src/page-wizard/steps/MetaDataStep.tsx +1 -1
  177. package/src/page-wizard/steps/SelectStep.tsx +1 -1
  178. package/src/page-wizard/steps/StructureStep.tsx +41 -17
  179. package/src/page-wizard/steps/TranslateStep.tsx +326 -222
  180. package/src/revision.ts +2 -2
  181. package/src/splash-screen/NewPage.tsx +1 -0
  182. package/src/splash-screen/OpenPage.tsx +1 -0
  183. package/dist/components/SimpleLanguageSelector.d.ts +0 -10
  184. package/dist/components/SimpleLanguageSelector.js +0 -59
  185. package/dist/components/SimpleLanguageSelector.js.map +0 -1
  186. package/dist/editor/menubar/LanguageSelector.js.map +0 -1
  187. package/src/components/SimpleLanguageSelector.tsx +0 -113
@@ -1 +1 @@
1
- {"version":3,"file":"OpenPage.js","sourceRoot":"","sources":["../../src/splash-screen/OpenPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenPage.js","sourceRoot":"","sources":["../../src/splash-screen/OpenPage.tsx"],"names":[],"mappings":"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"}
package/dist/styles.css CHANGED
@@ -85,6 +85,7 @@
85
85
  --color-white: #fff;
86
86
  --spacing: 0.25rem;
87
87
  --breakpoint-xl: 80rem;
88
+ --container-md: 28rem;
88
89
  --container-lg: 32rem;
89
90
  --text-xs: 0.75rem;
90
91
  --text-xs--line-height: calc(1 / 0.75);
@@ -292,9 +293,6 @@
292
293
  .bottom-2 {
293
294
  bottom: calc(var(--spacing) * 2);
294
295
  }
295
- .bottom-8 {
296
- bottom: calc(var(--spacing) * 8);
297
- }
298
296
  .-left-1\.5 {
299
297
  left: calc(var(--spacing) * -1.5);
300
298
  }
@@ -382,6 +380,9 @@
382
380
  .mx-3 {
383
381
  margin-inline: calc(var(--spacing) * 3);
384
382
  }
383
+ .mx-4 {
384
+ margin-inline: calc(var(--spacing) * 4);
385
+ }
385
386
  .mx-6 {
386
387
  margin-inline: calc(var(--spacing) * 6);
387
388
  }
@@ -556,6 +557,10 @@
556
557
  width: calc(var(--spacing) * 2.5);
557
558
  height: calc(var(--spacing) * 2.5);
558
559
  }
560
+ .size-3 {
561
+ width: calc(var(--spacing) * 3);
562
+ height: calc(var(--spacing) * 3);
563
+ }
559
564
  .size-3\.5 {
560
565
  width: calc(var(--spacing) * 3.5);
561
566
  height: calc(var(--spacing) * 3.5);
@@ -620,12 +625,12 @@
620
625
  .h-12 {
621
626
  height: calc(var(--spacing) * 12);
622
627
  }
628
+ .h-15 {
629
+ height: calc(var(--spacing) * 15);
630
+ }
623
631
  .h-16 {
624
632
  height: calc(var(--spacing) * 16);
625
633
  }
626
- .h-20 {
627
- height: calc(var(--spacing) * 20);
628
- }
629
634
  .h-23 {
630
635
  height: calc(var(--spacing) * 23);
631
636
  }
@@ -674,8 +679,8 @@
674
679
  .h-\[160px\] {
675
680
  height: 160px;
676
681
  }
677
- .h-\[400px\] {
678
- height: 400px;
682
+ .h-\[250px\] {
683
+ height: 250px;
679
684
  }
680
685
  .h-\[600px\] {
681
686
  height: 600px;
@@ -710,6 +715,9 @@
710
715
  .max-h-60 {
711
716
  max-height: calc(var(--spacing) * 60);
712
717
  }
718
+ .max-h-64 {
719
+ max-height: calc(var(--spacing) * 64);
720
+ }
713
721
  .max-h-80 {
714
722
  max-height: calc(var(--spacing) * 80);
715
723
  }
@@ -752,6 +760,9 @@
752
760
  .min-h-8 {
753
761
  min-height: calc(var(--spacing) * 8);
754
762
  }
763
+ .min-h-\[70px\] {
764
+ min-height: 70px;
765
+ }
755
766
  .min-h-\[100px\] {
756
767
  min-height: 100px;
757
768
  }
@@ -842,6 +853,9 @@
842
853
  .w-96 {
843
854
  width: calc(var(--spacing) * 96);
844
855
  }
856
+ .w-\[--radix-dropdown-menu-trigger-width\] {
857
+ width: --radix-dropdown-menu-trigger-width;
858
+ }
845
859
  .w-\[2px\] {
846
860
  width: 2px;
847
861
  }
@@ -869,6 +883,9 @@
869
883
  .w-\[400px\] {
870
884
  width: 400px;
871
885
  }
886
+ .w-\[450px\] {
887
+ width: 450px;
888
+ }
872
889
  .w-auto {
873
890
  width: auto;
874
891
  }
@@ -908,6 +925,9 @@
908
925
  .max-w-lg {
909
926
  max-width: var(--container-lg);
910
927
  }
928
+ .max-w-md {
929
+ max-width: var(--container-md);
930
+ }
911
931
  .max-w-none {
912
932
  max-width: none;
913
933
  }
@@ -941,6 +961,9 @@
941
961
  .min-w-\[120px\] {
942
962
  min-width: 120px;
943
963
  }
964
+ .min-w-\[200px\] {
965
+ min-width: 200px;
966
+ }
944
967
  .min-w-full {
945
968
  min-width: 100%;
946
969
  }
@@ -2499,12 +2522,21 @@
2499
2522
  -webkit-user-select: text;
2500
2523
  user-select: text;
2501
2524
  }
2525
+ .\!\[--width\:340px\] {
2526
+ --width: 340px !important;
2527
+ }
2528
+ .\[-ms-overflow-style\:none\] {
2529
+ -ms-overflow-style: none;
2530
+ }
2502
2531
  .\[animation-delay\:-0\.3s\] {
2503
2532
  animation-delay: -0.3s;
2504
2533
  }
2505
2534
  .\[animation-delay\:-0\.15s\] {
2506
2535
  animation-delay: -0.15s;
2507
2536
  }
2537
+ .\[scrollbar-width\:none\] {
2538
+ scrollbar-width: none;
2539
+ }
2508
2540
  .fade-in {
2509
2541
  --tw-enter-opacity: 0;
2510
2542
  }
@@ -2812,6 +2844,13 @@
2812
2844
  }
2813
2845
  }
2814
2846
  }
2847
+ .hover\:bg-green-50 {
2848
+ &:hover {
2849
+ @media (hover: hover) {
2850
+ background-color: var(--color-green-50);
2851
+ }
2852
+ }
2853
+ }
2815
2854
  .hover\:bg-green-600 {
2816
2855
  &:hover {
2817
2856
  @media (hover: hover) {
@@ -2847,6 +2886,13 @@
2847
2886
  }
2848
2887
  }
2849
2888
  }
2889
+ .hover\:bg-red-200 {
2890
+ &:hover {
2891
+ @media (hover: hover) {
2892
+ background-color: var(--color-red-200);
2893
+ }
2894
+ }
2895
+ }
2850
2896
  .hover\:bg-red-400 {
2851
2897
  &:hover {
2852
2898
  @media (hover: hover) {
@@ -2996,6 +3042,13 @@
2996
3042
  }
2997
3043
  }
2998
3044
  }
3045
+ .hover\:text-red-800 {
3046
+ &:hover {
3047
+ @media (hover: hover) {
3048
+ color: var(--color-red-800);
3049
+ }
3050
+ }
3051
+ }
2999
3052
  .hover\:text-white {
3000
3053
  &:hover {
3001
3054
  @media (hover: hover) {
@@ -3660,6 +3713,11 @@
3660
3713
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3661
3714
  }
3662
3715
  }
3716
+ .xl\:\!\[--width\:660px\] {
3717
+ @media (width >= 80rem) {
3718
+ --width: 660px !important;
3719
+ }
3720
+ }
3663
3721
  .dark\:border-input {
3664
3722
  @media (prefers-color-scheme: dark) {
3665
3723
  border-color: var(--input);
@@ -3881,6 +3939,11 @@
3881
3939
  padding-left: calc(var(--spacing) * 5);
3882
3940
  }
3883
3941
  }
3942
+ .\[\&\:\:-webkit-scrollbar\]\:hidden {
3943
+ &::-webkit-scrollbar {
3944
+ display: none;
3945
+ }
3946
+ }
3884
3947
  .data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive {
3885
3948
  &[data-variant="destructive"] {
3886
3949
  :is(& > *) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alpaca-editor/core",
3
- "version": "1.0.4033",
3
+ "version": "1.0.4037",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -1,2 +1,3 @@
1
1
  export { FilterInput, highlightMatch } from "./FilterInput";
2
2
  export type { FilterInputProps } from "./FilterInput";
3
+ export { LanguageSelector } from "./ui/LanguageSelector";
@@ -2,12 +2,12 @@
2
2
 
3
3
  import * as React from "react";
4
4
  import { Check, ChevronsUpDown } from "lucide-react";
5
- import { useEditContext } from "../client/editContext";
6
- import { Language } from "../pageModel";
5
+ import { useEditContext } from "../../editor/client/editContext";
6
+ import { Language } from "../../editor/pageModel";
7
7
  import { cn } from "../../lib/utils";
8
- import { Button } from "../../components/ui/button";
9
- import { Switch } from "../../components/ui/switch";
10
- import { FilterInput, highlightMatch } from "../../components/FilterInput";
8
+ import { Button } from "./button";
9
+ import { Switch } from "./switch";
10
+ import { FilterInput, highlightMatch } from "../FilterInput";
11
11
 
12
12
  import {
13
13
  Command,
@@ -15,12 +15,8 @@ import {
15
15
  CommandGroup,
16
16
  CommandItem,
17
17
  CommandList,
18
- } from "../../components/ui/command";
19
- import {
20
- Popover,
21
- PopoverContent,
22
- PopoverTrigger,
23
- } from "../../components/ui/popover";
18
+ } from "./command";
19
+ import { Popover, PopoverContent, PopoverTrigger } from "./popover";
24
20
 
25
21
  export function LanguageSelector({
26
22
  selectedLanguage,
@@ -103,7 +99,10 @@ export function LanguageSelector({
103
99
  )}
104
100
  {!currentLanguage && <div>Select language</div>}
105
101
  </div>
106
- <ChevronsUpDown className="h-4 w-4 shrink-0 opacity-50" />
102
+ <ChevronsUpDown
103
+ className="h-4 w-4 shrink-0 opacity-50"
104
+ strokeWidth={1}
105
+ />
107
106
  </Button>
108
107
  </PopoverTrigger>
109
108
  <PopoverContent className="w-64 p-0" align="start">
@@ -171,6 +170,7 @@ export function LanguageSelector({
171
170
  ? "opacity-100"
172
171
  : "opacity-0",
173
172
  )}
173
+ strokeWidth={1}
174
174
  />
175
175
  </CommandItem>
176
176
  ))}
@@ -34,6 +34,7 @@ function DropdownMenuTrigger({
34
34
  function DropdownMenuContent({
35
35
  className,
36
36
  sideOffset = 4,
37
+ align = "start",
37
38
  ...props
38
39
  }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {
39
40
  return (
@@ -41,8 +42,9 @@ function DropdownMenuContent({
41
42
  <DropdownMenuPrimitive.Content
42
43
  data-slot="dropdown-menu-content"
43
44
  sideOffset={sideOffset}
45
+ align={align}
44
46
  className={cn(
45
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",
47
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) w-[--radix-dropdown-menu-trigger-width] min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",
46
48
  className,
47
49
  )}
48
50
  {...props}
@@ -8,8 +8,12 @@ const Toaster = ({ ...props }: ToasterProps) => {
8
8
 
9
9
  return (
10
10
  <Sonner
11
+ duration={4000}
11
12
  theme={theme as ToasterProps["theme"]}
12
- className="toaster group"
13
+ className="toaster group ![--width:340px] xl:![--width:660px]"
14
+ toastOptions={{
15
+ className: "w-[400px] max-h-64 overflow-y-auto",
16
+ }}
13
17
  style={
14
18
  {
15
19
  "--normal-bg": "var(--popover)",
@@ -34,6 +34,7 @@ import {
34
34
  GraphQLIcon,
35
35
  JsonIcon,
36
36
  PageWizardIcon,
37
+ SecretAgentIcon,
37
38
  TreeIcon,
38
39
  } from "../editor/ui/Icons";
39
40
  import { Debug } from "../editor/sidebar/Debug";
@@ -443,12 +444,12 @@ export const getConfiguration = (): EditorConfiguration => {
443
444
  {
444
445
  name: "agents",
445
446
  title: "Agents",
446
- icon: <SparklesIcon strokeWidth={1} />,
447
+ icon: <SecretAgentIcon strokeWidth={1} />,
447
448
  leftSidebar: {
448
449
  panels: [
449
450
  {
450
451
  name: "ai-terminal",
451
- title: "Agent",
452
+ title: "Agents",
452
453
  content: <Agents />,
453
454
  initialSize: 70,
454
455
  noOverflow: true,
@@ -580,7 +581,7 @@ export const getConfiguration = (): EditorConfiguration => {
580
581
  name: "tree",
581
582
  icon: <TreeIcon />,
582
583
  title: "Content",
583
- content: <MainContentTree mode="normal" />,
584
+ content: <MainContentTree mode="normal" hideRootNodes={true} />,
584
585
  initialSize: 80,
585
586
  },
586
587
  ],
@@ -55,6 +55,7 @@ export default function ContentTree({
55
55
  showGrabCursorForDraggableNodes,
56
56
  enableDragAndDrop,
57
57
  enableContextMenu,
58
+ hideRootNodes,
58
59
  }: {
59
60
  isDraggable?: (item: ItemTreeNodeData) => boolean;
60
61
  dragEnd?: () => void;
@@ -83,6 +84,7 @@ export default function ContentTree({
83
84
  showGrabCursorForDraggableNodes?: boolean;
84
85
  enableDragAndDrop?: boolean;
85
86
  enableContextMenu?: boolean;
87
+ hideRootNodes?: boolean; // When true, hides root nodes and displays their children as top-level nodes
86
88
  }) {
87
89
  const [treeNodes, setTreeNodes] = useState<TreeNode[]>([]);
88
90
 
@@ -187,6 +189,35 @@ export default function ContentTree({
187
189
  async (force: boolean = false) => {
188
190
  if (!force && treeNodes.length > 0) return treeNodes;
189
191
 
192
+ if (hideRootNodes) {
193
+ // Load children of root nodes and show them as root level nodes
194
+ const rootNodes = await Promise.all(
195
+ rootItemIds
196
+ ?.map((rootItemId) =>
197
+ loadNode({
198
+ id: rootItemId,
199
+ language,
200
+ version: 0,
201
+ }),
202
+ )
203
+ .filter((x) => x) || [],
204
+ );
205
+
206
+ const allChildren: CustomTreeNode[] = [];
207
+ for (const rootNode of rootNodes) {
208
+ if (rootNode) {
209
+ const children = await loadNodeChildren(rootNode);
210
+ // Remove parent reference since these will be displayed as root nodes
211
+ children.forEach((child) => {
212
+ child.parent = undefined;
213
+ });
214
+ allChildren.push(...children);
215
+ }
216
+ }
217
+
218
+ return allChildren;
219
+ }
220
+
190
221
  return await Promise.all(
191
222
  rootItemIds
192
223
  ?.map((rootItemId) =>
@@ -199,7 +230,14 @@ export default function ContentTree({
199
230
  .filter((x) => x) || [],
200
231
  );
201
232
  },
202
- [loadNode, loadNodeChildren, rootItemIds, language, treeNodes],
233
+ [
234
+ loadNode,
235
+ loadNodeChildren,
236
+ rootItemIds,
237
+ language,
238
+ treeNodes,
239
+ hideRootNodes,
240
+ ],
203
241
  );
204
242
 
205
243
  const doPreloadNodes = useCallback(
@@ -289,7 +327,7 @@ export default function ContentTree({
289
327
  };
290
328
 
291
329
  load();
292
- }, [language, rootItemIds]);
330
+ }, [language, rootItemIds, hideRootNodes]);
293
331
 
294
332
  // Handle expanded keys changes without forcing reload
295
333
  useEffect(() => {
@@ -680,15 +718,6 @@ export default function ContentTree({
680
718
  [loadNodeChildren],
681
719
  );
682
720
 
683
- const loadOnExpand = useCallback(
684
- async (node: CustomTreeNode) => {
685
- node.children = null;
686
- setTreeNodes([...treeNodes]);
687
- await loadChildren(node);
688
- },
689
- [loadChildren, treeNodes],
690
- );
691
-
692
721
  const handleDragOverZone = useCallback(
693
722
  (node: CustomTreeNode | null, index: number, event: React.DragEvent) => {
694
723
  event.dataTransfer.dropEffect = event.ctrlKey ? "copy" : "move";
@@ -716,7 +745,7 @@ export default function ContentTree({
716
745
  expandedKeys={expandedKeys}
717
746
  onToggleExpand={handleToggleExpand}
718
747
  renderNode={memoizedRenderNode}
719
- onLazyLoad={loadOnExpand}
748
+ onLazyLoad={loadChildren}
720
749
  onDoubleClick={handleDoubleClick}
721
750
  onSelect={handleNodeSelect}
722
751
  selectedKeys={selectedKeys}
@@ -214,14 +214,14 @@ export function PictureEditor({
214
214
  }}
215
215
  onWheel={(e) => {
216
216
  if (forwardScrollevents)
217
- editContext?.pageView.editorIframeRef!.current?.contentWindow?.document.documentElement?.scrollBy(
217
+ editContext?.pageView.editorIframe!?.contentWindow?.document.documentElement?.scrollBy(
218
218
  {
219
219
  behavior: "instant",
220
220
  left: 0,
221
221
  top: e.deltaY,
222
222
  },
223
223
  );
224
- editContext?.pageView.editorIframeRef!.current?.contentWindow?.document.body?.scrollBy(
224
+ editContext?.pageView.editorIframe!?.contentWindow?.document.body?.scrollBy(
225
225
  {
226
226
  behavior: "instant",
227
227
  left: 0,
@@ -13,6 +13,7 @@ export function ScrollingContentTree({
13
13
  rootItemIds,
14
14
  expandedItemId,
15
15
  scrollToSelected = true,
16
+ hideRootNodes,
16
17
  }: {
17
18
  selectedItemId?: string;
18
19
  onSelectionChange?: (itemIds: ItemTreeNodeData[]) => void;
@@ -20,6 +21,7 @@ export function ScrollingContentTree({
20
21
  rootItemIds?: string[];
21
22
  expandedItemId?: string;
22
23
  scrollToSelected?: boolean;
24
+ hideRootNodes?: boolean;
23
25
  }) {
24
26
  const [selectedItem, setSelectdItem] = useState<FullItem | null>(null);
25
27
  const [expandedItem, setExpandedItem] = useState<FullItem | null>();
@@ -70,6 +72,7 @@ export function ScrollingContentTree({
70
72
  className="h-full p-1"
71
73
  onSelectionChange={onSelectionChange}
72
74
  scrollToSelected={scrollToSelected}
75
+ hideRootNodes={hideRootNodes}
73
76
  />
74
77
  </div>
75
78
  );
@@ -28,6 +28,8 @@ export const Terminal = forwardRef<
28
28
  onReset: () => void;
29
29
  toolbar?: React.ReactNode;
30
30
  statusbar?: React.ReactNode;
31
+ rightbar?: React.ReactNode;
32
+ submitOverride?: React.ReactNode;
31
33
  infobar?: React.ReactNode;
32
34
  disabled?: boolean;
33
35
  className?: string;
@@ -41,6 +43,8 @@ export const Terminal = forwardRef<
41
43
  onReset,
42
44
  toolbar,
43
45
  statusbar,
46
+ rightbar,
47
+ submitOverride,
44
48
  infobar,
45
49
  disabled,
46
50
  className,
@@ -227,13 +231,18 @@ export const Terminal = forwardRef<
227
231
  />
228
232
  <div className="flex items-center justify-between py-1">
229
233
  {statusbar}
230
- <SimpleIconButton
231
- icon={<Send size={16} strokeWidth={1} />}
232
- className="tour-send-button"
233
- onClick={submit}
234
- disabled={prompt.trim().length === 0}
235
- label="Send"
236
- />
234
+ <div className="flex items-center gap-1">
235
+ {rightbar}
236
+ {submitOverride ?? (
237
+ <SimpleIconButton
238
+ icon={<Send size={16} strokeWidth={1} />}
239
+ className="tour-send-button"
240
+ onClick={submit}
241
+ disabled={prompt.trim().length === 0}
242
+ label="Send"
243
+ />
244
+ )}
245
+ </div>
237
246
  </div>
238
247
  </div>
239
248
  </div>
@@ -0,0 +1,85 @@
1
+ import React from "react";
2
+ import { History, Trash2 } from "lucide-react";
3
+ import { SimpleIconButton } from "../ui/SimpleIconButton";
4
+ import { AgentChat } from "../services/agentService";
5
+ import {
6
+ Popover,
7
+ PopoverContent,
8
+ PopoverTrigger,
9
+ } from "../../components/ui/popover";
10
+
11
+ interface AgentHistoryProps {
12
+ closedAgents: AgentChat[];
13
+ isOpen: boolean;
14
+ onOpenChange: (open: boolean) => void;
15
+ onOpenAgent: (agent: AgentChat) => void;
16
+ onDeleteAgent: (agent: AgentChat) => void;
17
+ formatDateToLocalTime: (dateString: string) => string;
18
+ }
19
+
20
+ export function AgentHistory({
21
+ closedAgents,
22
+ isOpen,
23
+ onOpenChange,
24
+ onOpenAgent,
25
+ onDeleteAgent,
26
+ formatDateToLocalTime,
27
+ }: AgentHistoryProps) {
28
+ const handleDeleteClick = (e: React.MouseEvent, agent: AgentChat) => {
29
+ e.stopPropagation(); // Prevent opening the agent
30
+ onDeleteAgent(agent);
31
+ };
32
+
33
+ return (
34
+ <Popover open={isOpen} onOpenChange={onOpenChange}>
35
+ <PopoverTrigger asChild>
36
+ <SimpleIconButton
37
+ onClick={() => {}}
38
+ icon={<History className="size-4" strokeWidth={1} />}
39
+ label="Agent History"
40
+ className="text-gray-600 hover:text-gray-800"
41
+ />
42
+ </PopoverTrigger>
43
+ <PopoverContent className="w-72 p-0" align="end">
44
+ <div className="border-b border-gray-100 px-3 py-2 text-xs font-medium text-gray-500">
45
+ Agent History
46
+ </div>
47
+ <div className="max-h-80 overflow-y-auto">
48
+ {closedAgents.length === 0 ? (
49
+ <div className="px-3 py-2 text-xs text-gray-500">
50
+ No closed agents found
51
+ </div>
52
+ ) : (
53
+ closedAgents.map((agent) => (
54
+ <div
55
+ key={agent.id}
56
+ className="group flex cursor-pointer items-center justify-between border-b border-gray-50 px-3 py-2 text-xs hover:bg-gray-50"
57
+ onClick={() => onOpenAgent(agent)}
58
+ >
59
+ <div className="min-w-0 flex-1">
60
+ <div className="truncate font-medium text-gray-900">
61
+ {agent.name}
62
+ </div>
63
+ <div className="truncate text-gray-500">
64
+ {agent.profileName}
65
+ </div>
66
+ <div className="text-xs text-gray-400">
67
+ {formatDateToLocalTime(agent.updatedDate)}
68
+ </div>
69
+ </div>
70
+ <div className="ml-2 flex-shrink-0">
71
+ <SimpleIconButton
72
+ onClick={(e) => handleDeleteClick(e, agent)}
73
+ icon={<Trash2 className="size-3" strokeWidth={1} />}
74
+ label="Delete Agent"
75
+ className="text-red-600 opacity-0 transition-opacity group-hover:opacity-100 hover:text-red-800"
76
+ />
77
+ </div>
78
+ </div>
79
+ ))
80
+ )}
81
+ </div>
82
+ </PopoverContent>
83
+ </Popover>
84
+ );
85
+ }