@mariozechner/pi-web-ui 0.5.44

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 (265) hide show
  1. package/README.md +252 -0
  2. package/dist/ChatPanel.d.ts +23 -0
  3. package/dist/ChatPanel.d.ts.map +1 -0
  4. package/dist/ChatPanel.js +224 -0
  5. package/dist/ChatPanel.js.map +1 -0
  6. package/dist/app.css +2 -0
  7. package/dist/components/AgentInterface.d.ts +35 -0
  8. package/dist/components/AgentInterface.d.ts.map +1 -0
  9. package/dist/components/AgentInterface.js +308 -0
  10. package/dist/components/AgentInterface.js.map +1 -0
  11. package/dist/components/AttachmentTile.d.ts +12 -0
  12. package/dist/components/AttachmentTile.d.ts.map +1 -0
  13. package/dist/components/AttachmentTile.js +114 -0
  14. package/dist/components/AttachmentTile.js.map +1 -0
  15. package/dist/components/ConsoleBlock.d.ts +11 -0
  16. package/dist/components/ConsoleBlock.d.ts.map +1 -0
  17. package/dist/components/ConsoleBlock.js +77 -0
  18. package/dist/components/ConsoleBlock.js.map +1 -0
  19. package/dist/components/Input.d.ts +26 -0
  20. package/dist/components/Input.d.ts.map +1 -0
  21. package/dist/components/Input.js +56 -0
  22. package/dist/components/Input.js.map +1 -0
  23. package/dist/components/MessageEditor.d.ts +38 -0
  24. package/dist/components/MessageEditor.d.ts.map +1 -0
  25. package/dist/components/MessageEditor.js +296 -0
  26. package/dist/components/MessageEditor.js.map +1 -0
  27. package/dist/components/MessageList.d.ts +13 -0
  28. package/dist/components/MessageList.d.ts.map +1 -0
  29. package/dist/components/MessageList.js +88 -0
  30. package/dist/components/MessageList.js.map +1 -0
  31. package/dist/components/Messages.d.ts +53 -0
  32. package/dist/components/Messages.d.ts.map +1 -0
  33. package/dist/components/Messages.js +323 -0
  34. package/dist/components/Messages.js.map +1 -0
  35. package/dist/components/ProviderKeyInput.d.ts +16 -0
  36. package/dist/components/ProviderKeyInput.d.ts.map +1 -0
  37. package/dist/components/ProviderKeyInput.js +183 -0
  38. package/dist/components/ProviderKeyInput.js.map +1 -0
  39. package/dist/components/SandboxedIframe.d.ts +63 -0
  40. package/dist/components/SandboxedIframe.d.ts.map +1 -0
  41. package/dist/components/SandboxedIframe.js +435 -0
  42. package/dist/components/SandboxedIframe.js.map +1 -0
  43. package/dist/components/StreamingMessageContainer.d.ts +17 -0
  44. package/dist/components/StreamingMessageContainer.d.ts.map +1 -0
  45. package/dist/components/StreamingMessageContainer.js +114 -0
  46. package/dist/components/StreamingMessageContainer.js.map +1 -0
  47. package/dist/dialogs/ApiKeyPromptDialog.d.ts +15 -0
  48. package/dist/dialogs/ApiKeyPromptDialog.d.ts.map +1 -0
  49. package/dist/dialogs/ApiKeyPromptDialog.js +80 -0
  50. package/dist/dialogs/ApiKeyPromptDialog.js.map +1 -0
  51. package/dist/dialogs/AttachmentOverlay.d.ts +32 -0
  52. package/dist/dialogs/AttachmentOverlay.d.ts.map +1 -0
  53. package/dist/dialogs/AttachmentOverlay.js +575 -0
  54. package/dist/dialogs/AttachmentOverlay.js.map +1 -0
  55. package/dist/dialogs/ModelSelector.d.ts +27 -0
  56. package/dist/dialogs/ModelSelector.d.ts.map +1 -0
  57. package/dist/dialogs/ModelSelector.js +334 -0
  58. package/dist/dialogs/ModelSelector.js.map +1 -0
  59. package/dist/dialogs/SettingsDialog.d.ts +31 -0
  60. package/dist/dialogs/SettingsDialog.d.ts.map +1 -0
  61. package/dist/dialogs/SettingsDialog.js +228 -0
  62. package/dist/dialogs/SettingsDialog.js.map +1 -0
  63. package/dist/index.d.ts +46 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +51 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/state/agent-session.d.ts +58 -0
  68. package/dist/state/agent-session.d.ts.map +1 -0
  69. package/dist/state/agent-session.js +252 -0
  70. package/dist/state/agent-session.js.map +1 -0
  71. package/dist/state/transports/AppTransport.d.ts +13 -0
  72. package/dist/state/transports/AppTransport.d.ts.map +1 -0
  73. package/dist/state/transports/AppTransport.js +316 -0
  74. package/dist/state/transports/AppTransport.js.map +1 -0
  75. package/dist/state/transports/ProviderTransport.d.ts +12 -0
  76. package/dist/state/transports/ProviderTransport.d.ts.map +1 -0
  77. package/dist/state/transports/ProviderTransport.js +44 -0
  78. package/dist/state/transports/ProviderTransport.js.map +1 -0
  79. package/dist/state/transports/index.d.ts +4 -0
  80. package/dist/state/transports/index.d.ts.map +1 -0
  81. package/dist/state/transports/index.js +4 -0
  82. package/dist/state/transports/index.js.map +1 -0
  83. package/dist/state/transports/proxy-types.d.ts +48 -0
  84. package/dist/state/transports/proxy-types.d.ts.map +1 -0
  85. package/dist/state/transports/proxy-types.js +2 -0
  86. package/dist/state/transports/proxy-types.js.map +1 -0
  87. package/dist/state/transports/types.d.ts +11 -0
  88. package/dist/state/transports/types.d.ts.map +1 -0
  89. package/dist/state/transports/types.js +2 -0
  90. package/dist/state/transports/types.js.map +1 -0
  91. package/dist/state/types.d.ts +15 -0
  92. package/dist/state/types.d.ts.map +1 -0
  93. package/dist/state/types.js +2 -0
  94. package/dist/state/types.js.map +1 -0
  95. package/dist/storage/app-storage.d.ts +26 -0
  96. package/dist/storage/app-storage.d.ts.map +1 -0
  97. package/dist/storage/app-storage.js +44 -0
  98. package/dist/storage/app-storage.js.map +1 -0
  99. package/dist/storage/backends/chrome-storage-backend.d.ts +18 -0
  100. package/dist/storage/backends/chrome-storage-backend.d.ts.map +1 -0
  101. package/dist/storage/backends/chrome-storage-backend.js +67 -0
  102. package/dist/storage/backends/chrome-storage-backend.js.map +1 -0
  103. package/dist/storage/backends/indexeddb-backend.d.ts +20 -0
  104. package/dist/storage/backends/indexeddb-backend.d.ts.map +1 -0
  105. package/dist/storage/backends/indexeddb-backend.js +89 -0
  106. package/dist/storage/backends/indexeddb-backend.js.map +1 -0
  107. package/dist/storage/backends/local-storage-backend.d.ts +18 -0
  108. package/dist/storage/backends/local-storage-backend.d.ts.map +1 -0
  109. package/dist/storage/backends/local-storage-backend.js +69 -0
  110. package/dist/storage/backends/local-storage-backend.js.map +1 -0
  111. package/dist/storage/repositories/provider-keys-repository.d.ts +34 -0
  112. package/dist/storage/repositories/provider-keys-repository.d.ts.map +1 -0
  113. package/dist/storage/repositories/provider-keys-repository.js +50 -0
  114. package/dist/storage/repositories/provider-keys-repository.js.map +1 -0
  115. package/dist/storage/repositories/settings-repository.d.ts +34 -0
  116. package/dist/storage/repositories/settings-repository.d.ts.map +1 -0
  117. package/dist/storage/repositories/settings-repository.js +46 -0
  118. package/dist/storage/repositories/settings-repository.js.map +1 -0
  119. package/dist/storage/types.d.ts +43 -0
  120. package/dist/storage/types.d.ts.map +1 -0
  121. package/dist/storage/types.js +2 -0
  122. package/dist/storage/types.js.map +1 -0
  123. package/dist/tools/artifacts/ArtifactElement.d.ts +10 -0
  124. package/dist/tools/artifacts/ArtifactElement.d.ts.map +1 -0
  125. package/dist/tools/artifacts/ArtifactElement.js +12 -0
  126. package/dist/tools/artifacts/ArtifactElement.js.map +1 -0
  127. package/dist/tools/artifacts/HtmlArtifact.d.ts +30 -0
  128. package/dist/tools/artifacts/HtmlArtifact.d.ts.map +1 -0
  129. package/dist/tools/artifacts/HtmlArtifact.js +217 -0
  130. package/dist/tools/artifacts/HtmlArtifact.js.map +1 -0
  131. package/dist/tools/artifacts/MarkdownArtifact.d.ts +20 -0
  132. package/dist/tools/artifacts/MarkdownArtifact.d.ts.map +1 -0
  133. package/dist/tools/artifacts/MarkdownArtifact.js +84 -0
  134. package/dist/tools/artifacts/MarkdownArtifact.js.map +1 -0
  135. package/dist/tools/artifacts/SvgArtifact.d.ts +19 -0
  136. package/dist/tools/artifacts/SvgArtifact.d.ts.map +1 -0
  137. package/dist/tools/artifacts/SvgArtifact.js +80 -0
  138. package/dist/tools/artifacts/SvgArtifact.js.map +1 -0
  139. package/dist/tools/artifacts/TextArtifact.d.ts +20 -0
  140. package/dist/tools/artifacts/TextArtifact.d.ts.map +1 -0
  141. package/dist/tools/artifacts/TextArtifact.js +147 -0
  142. package/dist/tools/artifacts/TextArtifact.js.map +1 -0
  143. package/dist/tools/artifacts/artifacts.d.ts +67 -0
  144. package/dist/tools/artifacts/artifacts.d.ts.map +1 -0
  145. package/dist/tools/artifacts/artifacts.js +836 -0
  146. package/dist/tools/artifacts/artifacts.js.map +1 -0
  147. package/dist/tools/artifacts/index.d.ts +7 -0
  148. package/dist/tools/artifacts/index.d.ts.map +1 -0
  149. package/dist/tools/artifacts/index.js +7 -0
  150. package/dist/tools/artifacts/index.js.map +1 -0
  151. package/dist/tools/index.d.ts +14 -0
  152. package/dist/tools/index.d.ts.map +1 -0
  153. package/dist/tools/index.js +29 -0
  154. package/dist/tools/index.js.map +1 -0
  155. package/dist/tools/javascript-repl.d.ts +43 -0
  156. package/dist/tools/javascript-repl.d.ts.map +1 -0
  157. package/dist/tools/javascript-repl.js +252 -0
  158. package/dist/tools/javascript-repl.js.map +1 -0
  159. package/dist/tools/renderer-registry.d.ts +11 -0
  160. package/dist/tools/renderer-registry.d.ts.map +1 -0
  161. package/dist/tools/renderer-registry.js +15 -0
  162. package/dist/tools/renderer-registry.js.map +1 -0
  163. package/dist/tools/renderers/BashRenderer.d.ts +12 -0
  164. package/dist/tools/renderers/BashRenderer.d.ts.map +1 -0
  165. package/dist/tools/renderers/BashRenderer.js +35 -0
  166. package/dist/tools/renderers/BashRenderer.js.map +1 -0
  167. package/dist/tools/renderers/CalculateRenderer.d.ts +12 -0
  168. package/dist/tools/renderers/CalculateRenderer.d.ts.map +1 -0
  169. package/dist/tools/renderers/CalculateRenderer.js +38 -0
  170. package/dist/tools/renderers/CalculateRenderer.js.map +1 -0
  171. package/dist/tools/renderers/DefaultRenderer.d.ts +8 -0
  172. package/dist/tools/renderers/DefaultRenderer.d.ts.map +1 -0
  173. package/dist/tools/renderers/DefaultRenderer.js +31 -0
  174. package/dist/tools/renderers/DefaultRenderer.js.map +1 -0
  175. package/dist/tools/renderers/GetCurrentTimeRenderer.d.ts +12 -0
  176. package/dist/tools/renderers/GetCurrentTimeRenderer.d.ts.map +1 -0
  177. package/dist/tools/renderers/GetCurrentTimeRenderer.js +30 -0
  178. package/dist/tools/renderers/GetCurrentTimeRenderer.js.map +1 -0
  179. package/dist/tools/types.d.ts +7 -0
  180. package/dist/tools/types.d.ts.map +1 -0
  181. package/dist/tools/types.js +2 -0
  182. package/dist/tools/types.js.map +1 -0
  183. package/dist/utils/attachment-utils.d.ts +19 -0
  184. package/dist/utils/attachment-utils.d.ts.map +1 -0
  185. package/dist/utils/attachment-utils.js +415 -0
  186. package/dist/utils/attachment-utils.js.map +1 -0
  187. package/dist/utils/auth-token.d.ts +3 -0
  188. package/dist/utils/auth-token.d.ts.map +1 -0
  189. package/dist/utils/auth-token.js +19 -0
  190. package/dist/utils/auth-token.js.map +1 -0
  191. package/dist/utils/format.d.ts +6 -0
  192. package/dist/utils/format.d.ts.map +1 -0
  193. package/dist/utils/format.js +47 -0
  194. package/dist/utils/format.js.map +1 -0
  195. package/dist/utils/i18n.d.ts +111 -0
  196. package/dist/utils/i18n.d.ts.map +1 -0
  197. package/dist/utils/i18n.js +224 -0
  198. package/dist/utils/i18n.js.map +1 -0
  199. package/dist/utils/test-sessions.d.ts +347 -0
  200. package/dist/utils/test-sessions.d.ts.map +1 -0
  201. package/dist/utils/test-sessions.js +2215 -0
  202. package/dist/utils/test-sessions.js.map +1 -0
  203. package/example/README.md +61 -0
  204. package/example/index.html +13 -0
  205. package/example/package-lock.json +1965 -0
  206. package/example/package.json +22 -0
  207. package/example/src/app.css +1 -0
  208. package/example/src/main.ts +57 -0
  209. package/example/src/test-sessions.ts +104 -0
  210. package/example/tsconfig.json +15 -0
  211. package/example/vite.config.ts +6 -0
  212. package/package.json +45 -0
  213. package/src/ChatPanel.ts +214 -0
  214. package/src/app.css +44 -0
  215. package/src/components/AgentInterface.ts +316 -0
  216. package/src/components/AttachmentTile.ts +112 -0
  217. package/src/components/ConsoleBlock.ts +67 -0
  218. package/src/components/Input.ts +112 -0
  219. package/src/components/MessageEditor.ts +272 -0
  220. package/src/components/MessageList.ts +82 -0
  221. package/src/components/Messages.ts +310 -0
  222. package/src/components/ProviderKeyInput.ts +170 -0
  223. package/src/components/SandboxedIframe.ts +525 -0
  224. package/src/components/StreamingMessageContainer.ts +101 -0
  225. package/src/dialogs/ApiKeyPromptDialog.ts +76 -0
  226. package/src/dialogs/AttachmentOverlay.ts +635 -0
  227. package/src/dialogs/ModelSelector.ts +324 -0
  228. package/src/dialogs/SettingsDialog.ts +223 -0
  229. package/src/index.ts +63 -0
  230. package/src/state/agent-session.ts +311 -0
  231. package/src/state/transports/AppTransport.ts +363 -0
  232. package/src/state/transports/ProviderTransport.ts +49 -0
  233. package/src/state/transports/index.ts +3 -0
  234. package/src/state/transports/proxy-types.ts +15 -0
  235. package/src/state/transports/types.ts +16 -0
  236. package/src/state/types.ts +11 -0
  237. package/src/storage/app-storage.ts +53 -0
  238. package/src/storage/backends/chrome-storage-backend.ts +82 -0
  239. package/src/storage/backends/indexeddb-backend.ts +107 -0
  240. package/src/storage/backends/local-storage-backend.ts +74 -0
  241. package/src/storage/repositories/provider-keys-repository.ts +55 -0
  242. package/src/storage/repositories/settings-repository.ts +51 -0
  243. package/src/storage/types.ts +48 -0
  244. package/src/tools/artifacts/ArtifactElement.ts +15 -0
  245. package/src/tools/artifacts/HtmlArtifact.ts +221 -0
  246. package/src/tools/artifacts/MarkdownArtifact.ts +81 -0
  247. package/src/tools/artifacts/SvgArtifact.ts +77 -0
  248. package/src/tools/artifacts/TextArtifact.ts +148 -0
  249. package/src/tools/artifacts/artifacts.ts +888 -0
  250. package/src/tools/artifacts/index.ts +6 -0
  251. package/src/tools/index.ts +35 -0
  252. package/src/tools/javascript-repl.ts +309 -0
  253. package/src/tools/renderer-registry.ts +18 -0
  254. package/src/tools/renderers/BashRenderer.ts +45 -0
  255. package/src/tools/renderers/CalculateRenderer.ts +49 -0
  256. package/src/tools/renderers/DefaultRenderer.ts +36 -0
  257. package/src/tools/renderers/GetCurrentTimeRenderer.ts +39 -0
  258. package/src/tools/types.ts +7 -0
  259. package/src/utils/attachment-utils.ts +472 -0
  260. package/src/utils/auth-token.ts +22 -0
  261. package/src/utils/format.ts +42 -0
  262. package/src/utils/i18n.ts +343 -0
  263. package/src/utils/test-sessions.ts +2247 -0
  264. package/tsconfig.build.json +20 -0
  265. package/tsconfig.json +7 -0
@@ -0,0 +1,575 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Button, html, icon } from "@mariozechner/mini-lit";
8
+ import "@mariozechner/mini-lit/dist/ModeToggle.js";
9
+ import { renderAsync } from "docx-preview";
10
+ import { LitElement } from "lit";
11
+ import { state } from "lit/decorators.js";
12
+ import { Download, X } from "lucide";
13
+ import * as pdfjsLib from "pdfjs-dist";
14
+ import * as XLSX from "xlsx";
15
+ import { i18n } from "../utils/i18n.js";
16
+ export class AttachmentOverlay extends LitElement {
17
+ constructor() {
18
+ super(...arguments);
19
+ this.showExtractedText = false;
20
+ this.error = null;
21
+ // Track current loading task to cancel if needed
22
+ this.currentLoadingTask = null;
23
+ this.handleBackdropClick = () => {
24
+ this.close();
25
+ };
26
+ this.handleDownload = () => {
27
+ if (!this.attachment)
28
+ return;
29
+ // Create a blob from the base64 content
30
+ const byteCharacters = atob(this.attachment.content);
31
+ const byteNumbers = new Array(byteCharacters.length);
32
+ for (let i = 0; i < byteCharacters.length; i++) {
33
+ byteNumbers[i] = byteCharacters.charCodeAt(i);
34
+ }
35
+ const byteArray = new Uint8Array(byteNumbers);
36
+ const blob = new Blob([byteArray], { type: this.attachment.mimeType });
37
+ // Create download link
38
+ const url = URL.createObjectURL(blob);
39
+ const a = document.createElement("a");
40
+ a.href = url;
41
+ a.download = this.attachment.fileName;
42
+ document.body.appendChild(a);
43
+ a.click();
44
+ document.body.removeChild(a);
45
+ URL.revokeObjectURL(url);
46
+ };
47
+ }
48
+ createRenderRoot() {
49
+ return this;
50
+ }
51
+ static open(attachment, onClose) {
52
+ const overlay = new AttachmentOverlay();
53
+ overlay.attachment = attachment;
54
+ overlay.onCloseCallback = onClose;
55
+ document.body.appendChild(overlay);
56
+ overlay.setupEventListeners();
57
+ }
58
+ setupEventListeners() {
59
+ this.boundHandleKeyDown = (e) => {
60
+ if (e.key === "Escape") {
61
+ this.close();
62
+ }
63
+ };
64
+ window.addEventListener("keydown", this.boundHandleKeyDown);
65
+ }
66
+ close() {
67
+ this.cleanup();
68
+ if (this.boundHandleKeyDown) {
69
+ window.removeEventListener("keydown", this.boundHandleKeyDown);
70
+ }
71
+ this.onCloseCallback?.();
72
+ this.remove();
73
+ }
74
+ getFileType() {
75
+ if (!this.attachment)
76
+ return "text";
77
+ if (this.attachment.type === "image")
78
+ return "image";
79
+ if (this.attachment.mimeType === "application/pdf")
80
+ return "pdf";
81
+ if (this.attachment.mimeType?.includes("wordprocessingml"))
82
+ return "docx";
83
+ if (this.attachment.mimeType?.includes("presentationml") ||
84
+ this.attachment.fileName.toLowerCase().endsWith(".pptx"))
85
+ return "pptx";
86
+ if (this.attachment.mimeType?.includes("spreadsheetml") ||
87
+ this.attachment.mimeType?.includes("ms-excel") ||
88
+ this.attachment.fileName.toLowerCase().endsWith(".xlsx") ||
89
+ this.attachment.fileName.toLowerCase().endsWith(".xls"))
90
+ return "excel";
91
+ return "text";
92
+ }
93
+ getFileTypeLabel() {
94
+ const type = this.getFileType();
95
+ switch (type) {
96
+ case "pdf":
97
+ return i18n("PDF");
98
+ case "docx":
99
+ return i18n("Document");
100
+ case "pptx":
101
+ return i18n("Presentation");
102
+ case "excel":
103
+ return i18n("Spreadsheet");
104
+ default:
105
+ return "";
106
+ }
107
+ }
108
+ cleanup() {
109
+ this.showExtractedText = false;
110
+ this.error = null;
111
+ // Cancel any loading PDF task when closing
112
+ if (this.currentLoadingTask) {
113
+ this.currentLoadingTask.destroy();
114
+ this.currentLoadingTask = null;
115
+ }
116
+ }
117
+ render() {
118
+ if (!this.attachment)
119
+ return html ``;
120
+ return html `
121
+ <!-- Full screen overlay -->
122
+ <div class="fixed inset-0 bg-black/90 z-50 flex flex-col" @click=${this.handleBackdropClick}>
123
+ <!-- Compact header bar -->
124
+ <div class="bg-background/95 backdrop-blur border-b border-border" @click=${(e) => e.stopPropagation()}>
125
+ <div class="px-4 py-2 flex items-center justify-between">
126
+ <div class="flex items-center gap-3 min-w-0">
127
+ <span class="text-sm font-medium text-foreground truncate">${this.attachment.fileName}</span>
128
+ </div>
129
+ <div class="flex items-center gap-2">
130
+ ${this.renderToggle()}
131
+ ${Button({
132
+ variant: "ghost",
133
+ size: "icon",
134
+ onClick: this.handleDownload,
135
+ children: icon(Download, "sm"),
136
+ className: "h-8 w-8",
137
+ })}
138
+ ${Button({
139
+ variant: "ghost",
140
+ size: "icon",
141
+ onClick: () => this.close(),
142
+ children: icon(X, "sm"),
143
+ className: "h-8 w-8",
144
+ })}
145
+ </div>
146
+ </div>
147
+ </div>
148
+
149
+ <!-- Content container -->
150
+ <div class="flex-1 flex items-center justify-center overflow-auto" @click=${(e) => e.stopPropagation()}>
151
+ ${this.renderContent()}
152
+ </div>
153
+ </div>
154
+ `;
155
+ }
156
+ renderToggle() {
157
+ if (!this.attachment)
158
+ return html ``;
159
+ const fileType = this.getFileType();
160
+ const hasExtractedText = !!this.attachment.extractedText;
161
+ const showToggle = fileType !== "image" && fileType !== "text" && fileType !== "pptx" && hasExtractedText;
162
+ if (!showToggle)
163
+ return html ``;
164
+ const fileTypeLabel = this.getFileTypeLabel();
165
+ return html `
166
+ <mode-toggle
167
+ .modes=${[fileTypeLabel, i18n("Text")]}
168
+ .selectedIndex=${this.showExtractedText ? 1 : 0}
169
+ @mode-change=${(e) => {
170
+ e.stopPropagation();
171
+ this.showExtractedText = e.detail.index === 1;
172
+ this.error = null;
173
+ }}
174
+ ></mode-toggle>
175
+ `;
176
+ }
177
+ renderContent() {
178
+ if (!this.attachment)
179
+ return html ``;
180
+ // Error state
181
+ if (this.error) {
182
+ return html `
183
+ <div class="bg-destructive/10 border border-destructive text-destructive p-4 rounded-lg max-w-2xl">
184
+ <div class="font-medium mb-1">${i18n("Error loading file")}</div>
185
+ <div class="text-sm opacity-90">${this.error}</div>
186
+ </div>
187
+ `;
188
+ }
189
+ // Content based on file type
190
+ return this.renderFileContent();
191
+ }
192
+ renderFileContent() {
193
+ if (!this.attachment)
194
+ return html ``;
195
+ const fileType = this.getFileType();
196
+ // Show extracted text if toggled
197
+ if (this.showExtractedText && fileType !== "image") {
198
+ return html `
199
+ <div class="bg-card border border-border text-foreground p-6 w-full h-full max-w-4xl overflow-auto">
200
+ <pre class="whitespace-pre-wrap font-mono text-xs leading-relaxed">${this.attachment.extractedText || i18n("No text content available")}</pre>
201
+ </div>
202
+ `;
203
+ }
204
+ // Render based on file type
205
+ switch (fileType) {
206
+ case "image": {
207
+ const imageUrl = `data:${this.attachment.mimeType};base64,${this.attachment.content}`;
208
+ return html `
209
+ <img src="${imageUrl}" class="max-w-full max-h-full object-contain rounded-lg shadow-lg" alt="${this.attachment.fileName}" />
210
+ `;
211
+ }
212
+ case "pdf":
213
+ return html `
214
+ <div
215
+ id="pdf-container"
216
+ class="bg-card text-foreground overflow-auto shadow-lg border border-border w-full h-full max-w-[1000px]"
217
+ ></div>
218
+ `;
219
+ case "docx":
220
+ return html `
221
+ <div
222
+ id="docx-container"
223
+ class="bg-card text-foreground overflow-auto shadow-lg border border-border w-full h-full max-w-[1000px]"
224
+ ></div>
225
+ `;
226
+ case "excel":
227
+ return html ` <div id="excel-container" class="bg-card text-foreground overflow-auto w-full h-full"></div> `;
228
+ case "pptx":
229
+ return html `
230
+ <div
231
+ id="pptx-container"
232
+ class="bg-card text-foreground overflow-auto shadow-lg border border-border w-full h-full max-w-[1000px]"
233
+ ></div>
234
+ `;
235
+ default:
236
+ return html `
237
+ <div class="bg-card border border-border text-foreground p-6 w-full h-full max-w-4xl overflow-auto">
238
+ <pre class="whitespace-pre-wrap font-mono text-sm">${this.attachment.extractedText || i18n("No content available")}</pre>
239
+ </div>
240
+ `;
241
+ }
242
+ }
243
+ async updated(changedProperties) {
244
+ super.updated(changedProperties);
245
+ // Only process if we need to render the actual file (not extracted text)
246
+ if ((changedProperties.has("attachment") || changedProperties.has("showExtractedText")) &&
247
+ this.attachment &&
248
+ !this.showExtractedText &&
249
+ !this.error) {
250
+ const fileType = this.getFileType();
251
+ switch (fileType) {
252
+ case "pdf":
253
+ await this.renderPdf();
254
+ break;
255
+ case "docx":
256
+ await this.renderDocx();
257
+ break;
258
+ case "excel":
259
+ await this.renderExcel();
260
+ break;
261
+ case "pptx":
262
+ await this.renderExtractedText();
263
+ break;
264
+ }
265
+ }
266
+ }
267
+ async renderPdf() {
268
+ const container = this.querySelector("#pdf-container");
269
+ if (!container || !this.attachment)
270
+ return;
271
+ let pdf = null;
272
+ try {
273
+ // Convert base64 to ArrayBuffer
274
+ const arrayBuffer = this.base64ToArrayBuffer(this.attachment.content);
275
+ // Cancel any existing loading task
276
+ if (this.currentLoadingTask) {
277
+ this.currentLoadingTask.destroy();
278
+ }
279
+ // Load the PDF
280
+ this.currentLoadingTask = pdfjsLib.getDocument({ data: arrayBuffer });
281
+ pdf = await this.currentLoadingTask.promise;
282
+ this.currentLoadingTask = null;
283
+ // Clear container and add wrapper
284
+ container.innerHTML = "";
285
+ const wrapper = document.createElement("div");
286
+ wrapper.className = "";
287
+ container.appendChild(wrapper);
288
+ // Render all pages
289
+ for (let pageNum = 1; pageNum <= pdf.numPages; pageNum++) {
290
+ const page = await pdf.getPage(pageNum);
291
+ // Create a container for each page
292
+ const pageContainer = document.createElement("div");
293
+ pageContainer.className = "mb-4 last:mb-0";
294
+ // Create canvas for this page
295
+ const canvas = document.createElement("canvas");
296
+ const context = canvas.getContext("2d");
297
+ // Set scale for reasonable resolution
298
+ const viewport = page.getViewport({ scale: 1.5 });
299
+ canvas.height = viewport.height;
300
+ canvas.width = viewport.width;
301
+ // Style the canvas
302
+ canvas.className = "w-full max-w-full h-auto block mx-auto bg-white rounded shadow-sm border border-border";
303
+ // Fill white background for proper PDF rendering
304
+ if (context) {
305
+ context.fillStyle = "white";
306
+ context.fillRect(0, 0, canvas.width, canvas.height);
307
+ }
308
+ // Render page
309
+ await page.render({
310
+ canvasContext: context,
311
+ viewport: viewport,
312
+ canvas: canvas,
313
+ }).promise;
314
+ pageContainer.appendChild(canvas);
315
+ // Add page separator for multi-page documents
316
+ if (pageNum < pdf.numPages) {
317
+ const separator = document.createElement("div");
318
+ separator.className = "h-px bg-border my-4";
319
+ pageContainer.appendChild(separator);
320
+ }
321
+ wrapper.appendChild(pageContainer);
322
+ }
323
+ }
324
+ catch (error) {
325
+ console.error("Error rendering PDF:", error);
326
+ this.error = error?.message || i18n("Failed to load PDF");
327
+ }
328
+ finally {
329
+ if (pdf) {
330
+ pdf.destroy();
331
+ }
332
+ }
333
+ }
334
+ async renderDocx() {
335
+ const container = this.querySelector("#docx-container");
336
+ if (!container || !this.attachment)
337
+ return;
338
+ try {
339
+ // Convert base64 to ArrayBuffer
340
+ const arrayBuffer = this.base64ToArrayBuffer(this.attachment.content);
341
+ // Clear container first
342
+ container.innerHTML = "";
343
+ // Create a wrapper div for the document
344
+ const wrapper = document.createElement("div");
345
+ wrapper.className = "docx-wrapper-custom";
346
+ container.appendChild(wrapper);
347
+ // Render the DOCX file into the wrapper
348
+ await renderAsync(arrayBuffer, wrapper, undefined, {
349
+ className: "docx",
350
+ inWrapper: true,
351
+ ignoreWidth: true, // Let it be responsive
352
+ ignoreHeight: false,
353
+ ignoreFonts: false,
354
+ breakPages: true,
355
+ ignoreLastRenderedPageBreak: true,
356
+ experimental: false,
357
+ trimXmlDeclaration: true,
358
+ useBase64URL: false,
359
+ renderHeaders: true,
360
+ renderFooters: true,
361
+ renderFootnotes: true,
362
+ renderEndnotes: true,
363
+ });
364
+ // Apply custom styles to match theme and fix sizing
365
+ const style = document.createElement("style");
366
+ style.textContent = `
367
+ #docx-container {
368
+ padding: 0;
369
+ }
370
+
371
+ #docx-container .docx-wrapper-custom {
372
+ max-width: 100%;
373
+ overflow-x: auto;
374
+ }
375
+
376
+ #docx-container .docx-wrapper {
377
+ max-width: 100% !important;
378
+ margin: 0 !important;
379
+ background: transparent !important;
380
+ padding: 0em !important;
381
+ }
382
+
383
+ #docx-container .docx-wrapper > section.docx {
384
+ box-shadow: none !important;
385
+ border: none !important;
386
+ border-radius: 0 !important;
387
+ margin: 0 !important;
388
+ padding: 2em !important;
389
+ background: white !important;
390
+ color: black !important;
391
+ max-width: 100% !important;
392
+ width: 100% !important;
393
+ min-width: 0 !important;
394
+ overflow-x: auto !important;
395
+ }
396
+
397
+ /* Fix tables and wide content */
398
+ #docx-container table {
399
+ max-width: 100% !important;
400
+ width: auto !important;
401
+ overflow-x: auto !important;
402
+ display: block !important;
403
+ }
404
+
405
+ #docx-container img {
406
+ max-width: 100% !important;
407
+ height: auto !important;
408
+ }
409
+
410
+ /* Fix paragraphs and text */
411
+ #docx-container p,
412
+ #docx-container span,
413
+ #docx-container div {
414
+ max-width: 100% !important;
415
+ word-wrap: break-word !important;
416
+ overflow-wrap: break-word !important;
417
+ }
418
+
419
+ /* Hide page breaks in web view */
420
+ #docx-container .docx-page-break {
421
+ display: none !important;
422
+ }
423
+ `;
424
+ container.appendChild(style);
425
+ }
426
+ catch (error) {
427
+ console.error("Error rendering DOCX:", error);
428
+ this.error = error?.message || i18n("Failed to load document");
429
+ }
430
+ }
431
+ async renderExcel() {
432
+ const container = this.querySelector("#excel-container");
433
+ if (!container || !this.attachment)
434
+ return;
435
+ try {
436
+ // Convert base64 to ArrayBuffer
437
+ const arrayBuffer = this.base64ToArrayBuffer(this.attachment.content);
438
+ // Read the workbook
439
+ const workbook = XLSX.read(arrayBuffer, { type: "array" });
440
+ // Clear container
441
+ container.innerHTML = "";
442
+ const wrapper = document.createElement("div");
443
+ wrapper.className = "overflow-auto h-full flex flex-col";
444
+ container.appendChild(wrapper);
445
+ // Create tabs for multiple sheets
446
+ if (workbook.SheetNames.length > 1) {
447
+ const tabContainer = document.createElement("div");
448
+ tabContainer.className = "flex gap-2 mb-4 border-b border-border sticky top-0 bg-card z-10";
449
+ const sheetContents = [];
450
+ workbook.SheetNames.forEach((sheetName, index) => {
451
+ // Create tab button
452
+ const tab = document.createElement("button");
453
+ tab.textContent = sheetName;
454
+ tab.className =
455
+ index === 0
456
+ ? "px-4 py-2 text-sm font-medium border-b-2 border-primary text-primary"
457
+ : "px-4 py-2 text-sm font-medium text-muted-foreground hover:text-foreground hover:border-b-2 hover:border-border transition-colors";
458
+ // Create sheet content
459
+ const sheetDiv = document.createElement("div");
460
+ sheetDiv.style.display = index === 0 ? "flex" : "none";
461
+ sheetDiv.className = "flex-1 overflow-auto";
462
+ sheetDiv.appendChild(this.renderExcelSheet(workbook.Sheets[sheetName], sheetName));
463
+ sheetContents.push(sheetDiv);
464
+ // Tab click handler
465
+ tab.onclick = () => {
466
+ // Update tab styles
467
+ tabContainer.querySelectorAll("button").forEach((btn, btnIndex) => {
468
+ if (btnIndex === index) {
469
+ btn.className = "px-4 py-2 text-sm font-medium border-b-2 border-primary text-primary";
470
+ }
471
+ else {
472
+ btn.className =
473
+ "px-4 py-2 text-sm font-medium text-muted-foreground hover:text-foreground hover:border-b-2 hover:border-border transition-colors";
474
+ }
475
+ });
476
+ // Show/hide sheets
477
+ sheetContents.forEach((content, contentIndex) => {
478
+ content.style.display = contentIndex === index ? "flex" : "none";
479
+ });
480
+ };
481
+ tabContainer.appendChild(tab);
482
+ });
483
+ wrapper.appendChild(tabContainer);
484
+ sheetContents.forEach((content) => {
485
+ wrapper.appendChild(content);
486
+ });
487
+ }
488
+ else {
489
+ // Single sheet
490
+ const sheetName = workbook.SheetNames[0];
491
+ wrapper.appendChild(this.renderExcelSheet(workbook.Sheets[sheetName], sheetName));
492
+ }
493
+ }
494
+ catch (error) {
495
+ console.error("Error rendering Excel:", error);
496
+ this.error = error?.message || i18n("Failed to load spreadsheet");
497
+ }
498
+ }
499
+ renderExcelSheet(worksheet, sheetName) {
500
+ const sheetDiv = document.createElement("div");
501
+ // Generate HTML table
502
+ const htmlTable = XLSX.utils.sheet_to_html(worksheet, { id: `sheet-${sheetName}` });
503
+ const tempDiv = document.createElement("div");
504
+ tempDiv.innerHTML = htmlTable;
505
+ // Find and style the table
506
+ const table = tempDiv.querySelector("table");
507
+ if (table) {
508
+ table.className = "w-full border-collapse text-foreground";
509
+ // Style all cells
510
+ table.querySelectorAll("td, th").forEach((cell) => {
511
+ const cellEl = cell;
512
+ cellEl.className = "border border-border px-3 py-2 text-sm text-left";
513
+ });
514
+ // Style header row
515
+ const headerCells = table.querySelectorAll("thead th, tr:first-child td");
516
+ if (headerCells.length > 0) {
517
+ headerCells.forEach((th) => {
518
+ const thEl = th;
519
+ thEl.className =
520
+ "border border-border px-3 py-2 text-sm font-semibold bg-muted text-foreground sticky top-0";
521
+ });
522
+ }
523
+ // Alternate row colors
524
+ table.querySelectorAll("tbody tr:nth-child(even)").forEach((row) => {
525
+ const rowEl = row;
526
+ rowEl.className = "bg-muted/30";
527
+ });
528
+ sheetDiv.appendChild(table);
529
+ }
530
+ return sheetDiv;
531
+ }
532
+ base64ToArrayBuffer(base64) {
533
+ const binaryString = atob(base64);
534
+ const bytes = new Uint8Array(binaryString.length);
535
+ for (let i = 0; i < binaryString.length; i++) {
536
+ bytes[i] = binaryString.charCodeAt(i);
537
+ }
538
+ return bytes.buffer;
539
+ }
540
+ async renderExtractedText() {
541
+ const container = this.querySelector("#pptx-container");
542
+ if (!container || !this.attachment)
543
+ return;
544
+ try {
545
+ // Display the extracted text content
546
+ container.innerHTML = "";
547
+ const wrapper = document.createElement("div");
548
+ wrapper.className = "p-6 overflow-auto";
549
+ // Create a pre element to preserve formatting
550
+ const pre = document.createElement("pre");
551
+ pre.className = "whitespace-pre-wrap text-sm text-foreground font-mono";
552
+ pre.textContent = this.attachment.extractedText || i18n("No text content available");
553
+ wrapper.appendChild(pre);
554
+ container.appendChild(wrapper);
555
+ }
556
+ catch (error) {
557
+ console.error("Error rendering extracted text:", error);
558
+ this.error = error?.message || i18n("Failed to display text content");
559
+ }
560
+ }
561
+ }
562
+ __decorate([
563
+ state()
564
+ ], AttachmentOverlay.prototype, "attachment", void 0);
565
+ __decorate([
566
+ state()
567
+ ], AttachmentOverlay.prototype, "showExtractedText", void 0);
568
+ __decorate([
569
+ state()
570
+ ], AttachmentOverlay.prototype, "error", void 0);
571
+ // Register the custom element only once
572
+ if (!customElements.get("attachment-overlay")) {
573
+ customElements.define("attachment-overlay", AttachmentOverlay);
574
+ }
575
+ //# sourceMappingURL=AttachmentOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttachmentOverlay.js","sourceRoot":"","sources":["../../src/dialogs/AttachmentOverlay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { DialogBase, type TemplateResult } from "@mariozechner/mini-lit";
2
+ import type { Model } from "@mariozechner/pi-ai";
3
+ import type { PropertyValues } from "lit";
4
+ export declare class ModelSelector extends DialogBase {
5
+ currentModel: Model<any> | null;
6
+ searchQuery: string;
7
+ filterThinking: boolean;
8
+ filterVision: boolean;
9
+ ollamaModels: Model<any>[];
10
+ ollamaError: string | null;
11
+ selectedIndex: number;
12
+ private navigationMode;
13
+ private onSelectCallback?;
14
+ private scrollContainerRef;
15
+ private searchInputRef;
16
+ private lastMousePosition;
17
+ protected modalWidth: string;
18
+ static open(currentModel: Model<any> | null, onSelect: (model: Model<any>) => void): Promise<void>;
19
+ firstUpdated(changedProperties: PropertyValues): Promise<void>;
20
+ private fetchOllamaModels;
21
+ private formatTokens;
22
+ private handleSelect;
23
+ private getFilteredModels;
24
+ private scrollToSelected;
25
+ protected renderContent(): TemplateResult;
26
+ }
27
+ //# sourceMappingURL=ModelSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelSelector.d.ts","sourceRoot":"","sources":["../../src/dialogs/ModelSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAA4B,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAClH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAS1C,qBACa,aAAc,SAAQ,UAAU;IACnC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IACvC,WAAW,SAAM;IACjB,cAAc,UAAS;IACvB,YAAY,UAAS;IACrB,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAM;IAChC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,aAAa,SAAK;IAClB,OAAO,CAAC,cAAc,CAAiC;IAEhE,OAAO,CAAC,gBAAgB,CAAC,CAA8B;IACvD,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,iBAAiB,CAAkB;IAE3C,UAAmB,UAAU,SAAsB;WAEtC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI;IAQzE,YAAY,CAAC,iBAAiB,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;YAuD/D,iBAAiB;IAgE/B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,iBAAiB;IAkDzB,OAAO,CAAC,gBAAgB;cAYL,aAAa,IAAI,cAAc;CA2FlD"}