ompchamber 2.0.2 → 3.1.0

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 (419) hide show
  1. package/README.md +31 -11
  2. package/bunfig.toml +11 -0
  3. package/dist/client/index.html +16 -5
  4. package/dist/client/index.js +1393 -0
  5. package/dist/client/static/js/index-8t70jhyj.js +5149 -0
  6. package/dist/client/static/js/index-n4wkqj7t.css +1 -0
  7. package/index.html +54 -0
  8. package/package.json +9 -10
  9. package/public/apple-touch-icon.png +0 -0
  10. package/public/icon-192x192.png +0 -0
  11. package/public/icon.svg +60 -0
  12. package/public/manifest.webmanifest +38 -0
  13. package/src/cli/lib/commands/serve.js +9 -5
  14. package/src/cli/lib/runtime.js +18 -7
  15. package/src/client/components/common/code-editor/handler.test.ts +274 -0
  16. package/src/client/components/common/code-editor/handler.ts +175 -0
  17. package/src/client/components/common/code-editor/index.tsx +185 -220
  18. package/src/client/components/common/code-surface/index.tsx +109 -12
  19. package/src/client/components/common/lazy-panels.tsx +5 -1
  20. package/src/client/components/common/provider-icon/glyphs.ts +118 -0
  21. package/src/client/components/common/provider-icon/index.tsx +85 -0
  22. package/src/client/components/common/viewport.ts +5 -3
  23. package/src/client/components/layout/RightActivityBar.tsx +2 -1
  24. package/src/client/components/layout/desktop-layout/TopNavbar.tsx +21 -4
  25. package/src/client/components/layout/desktop-layout/WorkspacePanels.tsx +4 -0
  26. package/src/client/components/layout/desktop-layout/index.tsx +26 -4
  27. package/src/client/components/mobile/LayoutWrapper.tsx +16 -0
  28. package/src/client/components/mobile/RightSidebar.tsx +11 -4
  29. package/src/client/components/mobile/SessionSidebar.tsx +10 -0
  30. package/src/client/components/mobile/mobile-right-sidebar/FullEditor.tsx +0 -1
  31. package/src/client/components/mobile/mobile-session-sidebar/Item.tsx +16 -1
  32. package/src/client/components/mobile/mobile-session-sidebar/List.tsx +3 -0
  33. package/src/client/components/settings/categories/ProviderSettings.tsx +45 -4
  34. package/src/client/components/settings/categories/UsageSettings.tsx +22 -7
  35. package/src/client/components/settings/categories/provider-settings/AddModelModal.tsx +322 -0
  36. package/src/client/components/settings/categories/provider-settings/AddProviderModal.tsx +152 -56
  37. package/src/client/components/settings/categories/provider-settings/AuthSection.tsx +52 -1
  38. package/src/client/components/settings/categories/provider-settings/DeleteProviderModal.tsx +133 -0
  39. package/src/client/components/settings/categories/provider-settings/DialectFields.tsx +136 -0
  40. package/src/client/components/settings/categories/provider-settings/EffortLadder.tsx +89 -0
  41. package/src/client/components/settings/categories/provider-settings/Header.tsx +2 -2
  42. package/src/client/components/settings/categories/provider-settings/LoginModal.tsx +2 -2
  43. package/src/client/components/settings/categories/provider-settings/ModelsList.tsx +22 -2
  44. package/src/client/components/settings/categories/provider-settings/PresetPicker.tsx +82 -0
  45. package/src/client/components/settings/categories/provider-settings/PriceFields.tsx +107 -0
  46. package/src/client/components/settings/categories/provider-settings/ReconnectModal.tsx +43 -22
  47. package/src/client/components/settings/categories/provider-settings/SidebarList.tsx +2 -2
  48. package/src/client/components/settings/categories/usage-settings/LimitsSection.tsx +115 -0
  49. package/src/client/components/settings/categories/usage-settings/ProviderCard.tsx +19 -26
  50. package/src/client/components/settings/categories/usage-settings/ProviderDetail.tsx +29 -22
  51. package/src/client/components/settings/categories/usage-settings/SidebarList.tsx +60 -48
  52. package/src/client/components/settings/categories/usage-settings/format.ts +36 -0
  53. package/src/client/components/settings/categories/usage-settings/providers.ts +52 -28
  54. package/src/client/components/workspace/browser-panel/AddressBar.tsx +1 -10
  55. package/src/client/components/workspace/browser-panel/Screencast.tsx +4 -5
  56. package/src/client/components/workspace/browser-panel/index.tsx +6 -6
  57. package/src/client/components/workspace/browser-toolbar/index.tsx +22 -12
  58. package/src/client/components/workspace/chat-timeline/AiMessageFooter.tsx +1 -1
  59. package/src/client/components/workspace/chat-timeline/GeneratingIndicator.tsx +1 -1
  60. package/src/client/components/workspace/chat-timeline/ToolCallCard.tsx +1 -1
  61. package/src/client/components/workspace/chat-timeline/tool-renderers/panels/Todo.tsx +1 -1
  62. package/src/client/components/workspace/diff-panel/Toolbar.tsx +71 -38
  63. package/src/client/components/workspace/diff-panel/index.tsx +139 -53
  64. package/src/client/components/workspace/editor/CommandPalette.test.ts +242 -0
  65. package/src/client/components/workspace/editor/CommandPalette.tsx +138 -0
  66. package/src/client/components/workspace/editor/FindWidget.test.ts +261 -0
  67. package/src/client/components/workspace/editor/FindWidget.tsx +219 -0
  68. package/src/client/components/workspace/editor/Tabs.tsx +2 -2
  69. package/src/client/components/workspace/editor/Toolbar.tsx +129 -26
  70. package/src/client/components/workspace/editor/index.tsx +180 -62
  71. package/src/client/components/workspace/file-explorer/Modals.tsx +79 -2
  72. package/src/client/components/workspace/file-explorer/TreeItem.tsx +43 -113
  73. package/src/client/components/workspace/model-dropdown/Item.tsx +13 -23
  74. package/src/client/components/workspace/model-dropdown/Panel.tsx +1 -1
  75. package/src/client/components/workspace/model-dropdown/Section.tsx +13 -4
  76. package/src/client/components/workspace/model-dropdown/index.tsx +7 -3
  77. package/src/client/components/workspace/todo-panel/PhaseGroup.tsx +76 -0
  78. package/src/client/components/workspace/todo-panel/Row.tsx +69 -0
  79. package/src/client/components/workspace/todo-panel/index.tsx +161 -0
  80. package/src/client/components/workspace/usage-panel/ProviderSelect.tsx +10 -5
  81. package/src/client/components/workspace/usage-panel/index.tsx +36 -18
  82. package/src/client/data/samples/dialogue-session.ts +1 -1
  83. package/src/client/data/samples/sample-tools/other.ts +1 -1
  84. package/src/client/data/settings/provider.ts +141 -9
  85. package/src/client/hooks/editor/find-harness.test-util.ts +170 -0
  86. package/src/client/hooks/editor/scroll-container.test.ts +102 -0
  87. package/src/client/hooks/editor/scroll-container.ts +26 -0
  88. package/src/client/hooks/editor/use-code-window.ts +2 -20
  89. package/src/client/hooks/editor/use-editor-find-write.test.ts +170 -0
  90. package/src/client/hooks/editor/use-editor-find.test.ts +118 -0
  91. package/src/client/hooks/editor/use-editor-find.ts +321 -0
  92. package/src/client/hooks/editor/use-editor-history.test.ts +216 -0
  93. package/src/client/hooks/editor/use-editor-history.ts +134 -0
  94. package/src/client/hooks/editor/use-file-editor.ts +24 -27
  95. package/src/client/hooks/editor/use-occurrences.test.ts +236 -0
  96. package/src/client/hooks/editor/use-occurrences.ts +98 -0
  97. package/src/client/hooks/models/use-provider-names.ts +1 -1
  98. package/src/client/hooks/settings/providers/actions.ts +337 -0
  99. package/src/client/hooks/settings/providers/api.ts +69 -0
  100. package/src/client/hooks/settings/providers/index.ts +138 -0
  101. package/src/client/hooks/settings/providers/messages.ts +77 -0
  102. package/src/client/hooks/settings/useUsageReport.ts +8 -3
  103. package/src/client/hooks/ui/theme.ts +3 -3
  104. package/src/client/hooks/workspace/file-tabs.ts +62 -11
  105. package/src/client/hooks/workspace/file-tree-actions.test.ts +348 -0
  106. package/src/client/hooks/workspace/file-tree-actions.ts +250 -0
  107. package/src/client/hooks/workspace/session-todos.ts +102 -0
  108. package/src/client/stubs/elkjs.ts +6 -1
  109. package/src/client/tailwind.css +30 -0
  110. package/src/server/index.ts +20 -2
  111. package/src/server/lib/assets/font-css.server.ts +86 -0
  112. package/src/server/lib/assets/fonts.server.ts +117 -0
  113. package/src/server/lib/bundler/css.ts +116 -0
  114. package/src/server/lib/lifecycle/shell-route.ts +17 -0
  115. package/src/server/lib/models/provider-listing.server.ts +257 -0
  116. package/src/server/lib/models/provider-registry.server.test.ts +122 -0
  117. package/src/server/lib/models/provider-registry.server.ts +76 -25
  118. package/src/server/lib/omp/config/models-config.ts +11 -0
  119. package/src/server/lib/omp/config/models-validation.test.ts +137 -0
  120. package/src/server/lib/omp/config/models-validation.ts +111 -2
  121. package/src/server/lib/omp/config/provider-seeds.test.ts +167 -0
  122. package/src/server/lib/omp/config/provider-seeds.ts +176 -0
  123. package/src/server/lib/omp/config/providers.ts +94 -100
  124. package/src/server/lib/omp/core/auth-credentials.ts +45 -0
  125. package/src/server/lib/omp/session/todos.ts +100 -0
  126. package/src/server/lib/omp/session/{usage.ts → usage/aggregate.ts} +1 -118
  127. package/src/server/lib/omp/session/usage/shaping.ts +130 -0
  128. package/src/server/lib/usage/deepseek.ts +4 -5
  129. package/src/server/lib/usage/kenari.ts +7 -6
  130. package/src/server/lib/usage/omp-usage.server.test.ts +126 -0
  131. package/src/server/lib/usage/omp-usage.server.ts +194 -0
  132. package/src/server/lib/usage/provider-key.ts +81 -3
  133. package/src/server/lib/usage/providers.server.test.ts +47 -0
  134. package/src/server/lib/usage/providers.server.ts +208 -0
  135. package/src/server/lib/usage/vendor-balance.server.test.ts +104 -0
  136. package/src/server/lib/usage/vendor-balance.server.ts +284 -0
  137. package/src/server/plugins/shell.server.ts +56 -0
  138. package/src/server/plugins/ssr.ts +24 -36
  139. package/src/server/plugins/static.test.ts +26 -29
  140. package/src/server/plugins/static.ts +40 -19
  141. package/src/server/routes/fs/action-create.test.ts +90 -0
  142. package/src/server/routes/fs/action.ts +23 -0
  143. package/src/server/routes/omp/index.ts +2 -0
  144. package/src/server/routes/omp/session-todos.ts +80 -0
  145. package/src/server/routes/settings/index.ts +2 -0
  146. package/src/server/routes/settings/provider-model.ts +107 -0
  147. package/src/server/routes/settings/provider-models.ts +65 -202
  148. package/src/server/routes/settings/providers.ts +22 -7
  149. package/src/server/routes/settings/usage.ts +125 -45
  150. package/src/server/routes/telemetry/tokens.ts +2 -1
  151. package/src/shared/lib/chat/{todo-parser.ts → todo/parser.ts} +17 -0
  152. package/src/shared/lib/chat/todo/progress.ts +97 -0
  153. package/src/shared/lib/chat/todo/snapshot.test.ts +156 -0
  154. package/src/shared/lib/chat/todo/snapshot.ts +215 -0
  155. package/src/shared/lib/code/editor/commands.test.ts +155 -0
  156. package/src/shared/lib/code/editor/commands.ts +260 -0
  157. package/src/shared/lib/code/editor/edits.test.ts +100 -0
  158. package/src/shared/lib/code/editor/edits.ts +122 -0
  159. package/src/shared/lib/code/editor/find-status.test.ts +50 -0
  160. package/src/shared/lib/code/editor/find-status.ts +36 -0
  161. package/src/shared/lib/code/editor/find.test.ts +203 -0
  162. package/src/shared/lib/code/editor/find.ts +224 -0
  163. package/src/{client/components/common/code-editor → shared/lib/code/editor}/history.test.ts +1 -1
  164. package/src/shared/lib/code/editor/keymap.test.ts +109 -0
  165. package/src/shared/lib/code/editor/keymap.ts +151 -0
  166. package/src/shared/lib/code/editor/layers.test.ts +77 -0
  167. package/src/shared/lib/code/editor/layers.ts +67 -0
  168. package/src/shared/lib/code/editor/line-edits.test.ts +131 -0
  169. package/src/shared/lib/code/editor/line-edits.ts +159 -0
  170. package/src/shared/lib/code/editor/lines.test.ts +81 -0
  171. package/src/shared/lib/code/editor/lines.ts +83 -0
  172. package/src/shared/lib/code/editor/marks.test.ts +86 -0
  173. package/src/shared/lib/code/editor/marks.ts +106 -0
  174. package/src/shared/lib/code/editor/occurrences.test.ts +117 -0
  175. package/src/shared/lib/code/editor/occurrences.ts +111 -0
  176. package/src/shared/lib/code/editor/palette.test.ts +91 -0
  177. package/src/shared/lib/code/editor/palette.ts +92 -0
  178. package/src/shared/lib/code/editor/reset-css.test.ts +35 -0
  179. package/src/shared/lib/code/editor/reset-css.ts +32 -0
  180. package/src/shared/lib/code/editor/text-commands.test.ts +178 -0
  181. package/src/shared/lib/code/editor/text-commands.ts +154 -0
  182. package/src/shared/lib/code/syntax-highlight.test.ts +75 -0
  183. package/src/shared/lib/code/syntax-highlight.ts +29 -17
  184. package/src/shared/lib/code/windowed-highlight.ts +52 -1
  185. package/src/shared/lib/fs/diff-parser.test.ts +116 -0
  186. package/src/shared/lib/fs/diff-parser.ts +86 -33
  187. package/src/shared/lib/models/{provider-connection.ts → provider/connection.ts} +37 -0
  188. package/src/shared/lib/models/provider/dialect.ts +179 -0
  189. package/src/shared/lib/models/provider/glyph.test.ts +116 -0
  190. package/src/shared/lib/models/provider/glyph.ts +200 -0
  191. package/src/shared/lib/models/{provider-models.ts → provider/models.ts} +91 -6
  192. package/src/shared/lib/models/provider/presets.test.ts +172 -0
  193. package/src/shared/lib/models/provider/presets.ts +83 -0
  194. package/src/shared/lib/ui/key-binding.test.ts +115 -0
  195. package/src/shared/lib/ui/key-binding.ts +143 -0
  196. package/src/shared/lib/util/platform.test.ts +87 -0
  197. package/src/shared/lib/util/platform.ts +30 -0
  198. package/src/shared/lib/workspace/file-tab-id.ts +29 -0
  199. package/src/shared/lib/workspace/keymap.test.ts +82 -0
  200. package/src/shared/lib/workspace/keymap.ts +30 -0
  201. package/src/shared/lib/workspace/refresh-cadence.ts +9 -0
  202. package/src/shared/lib/workspace/right-panels.ts +8 -0
  203. package/src/shared/lib/workspace/session-state/store.ts +0 -1
  204. package/src/shared/types/index.ts +1 -0
  205. package/src/shared/types/settings/provider.ts +81 -0
  206. package/src/shared/types/settings/usage.ts +88 -14
  207. package/src/shared/types/todo.ts +108 -0
  208. package/tsconfig.json +3 -1
  209. package/dist/client/static/css/index.5f630421b7.css +0 -2
  210. package/dist/client/static/font/KaTeX_AMS-Regular.a79f1c3119.woff2 +0 -0
  211. package/dist/client/static/font/KaTeX_Caligraphic-Bold.ec17d13264.woff2 +0 -0
  212. package/dist/client/static/font/KaTeX_Caligraphic-Regular.55fac25845.woff2 +0 -0
  213. package/dist/client/static/font/KaTeX_Fraktur-Bold.d42a5579b0.woff2 +0 -0
  214. package/dist/client/static/font/KaTeX_Fraktur-Regular.d3c882a649.woff2 +0 -0
  215. package/dist/client/static/font/KaTeX_Main-Bold.c3fb5ac22f.woff2 +0 -0
  216. package/dist/client/static/font/KaTeX_Main-BoldItalic.6f2bb1dff2.woff2 +0 -0
  217. package/dist/client/static/font/KaTeX_Main-Italic.8916142bec.woff2 +0 -0
  218. package/dist/client/static/font/KaTeX_Main-Regular.0462f03bdf.woff2 +0 -0
  219. package/dist/client/static/font/KaTeX_Math-BoldItalic.572d331f69.woff2 +0 -0
  220. package/dist/client/static/font/KaTeX_Math-Italic.f28c23acad.woff2 +0 -0
  221. package/dist/client/static/font/KaTeX_SansSerif-Bold.8c5b5494b6.woff2 +0 -0
  222. package/dist/client/static/font/KaTeX_SansSerif-Italic.3b1e59b3ba.woff2 +0 -0
  223. package/dist/client/static/font/KaTeX_SansSerif-Regular.ba21ed5f84.woff2 +0 -0
  224. package/dist/client/static/font/KaTeX_Script-Regular.03e9641d6f.woff2 +0 -0
  225. package/dist/client/static/font/KaTeX_Size1-Regular.eae34984b3.woff2 +0 -0
  226. package/dist/client/static/font/KaTeX_Size2-Regular.5916a24fa3.woff2 +0 -0
  227. package/dist/client/static/font/KaTeX_Size4-Regular.10d95fd3a2.woff2 +0 -0
  228. package/dist/client/static/font/KaTeX_Typewriter-Regular.a8709e3622.woff2 +0 -0
  229. package/dist/client/static/font/fira-code-latin-400-normal.2655b10c55.woff2 +0 -0
  230. package/dist/client/static/font/fira-code-latin-500-normal.92a991f204.woff2 +0 -0
  231. package/dist/client/static/font/fira-code-latin-600-normal.43788eb7f1.woff2 +0 -0
  232. package/dist/client/static/font/fira-code-latin-700-normal.2667215d33.woff2 +0 -0
  233. package/dist/client/static/js/77.0d81c74cf0.js +0 -139
  234. package/dist/client/static/js/77.0d81c74cf0.js.LICENSE.txt +0 -8
  235. package/dist/client/static/js/async/0.8e59f2eb5b.js +0 -1
  236. package/dist/client/static/js/async/0k.5852e6b4fa.js +0 -1
  237. package/dist/client/static/js/async/0w.9ed36d5860.js +0 -1
  238. package/dist/client/static/js/async/1.f387c12b63.js +0 -1
  239. package/dist/client/static/js/async/12.d091f91c99.js +0 -1
  240. package/dist/client/static/js/async/13.8f810a8a6c.js +0 -1
  241. package/dist/client/static/js/async/19.6fe909d55a.js +0 -160
  242. package/dist/client/static/js/async/1b.23f1141a38.js +0 -1
  243. package/dist/client/static/js/async/1k.973e8e21fc.js +0 -2
  244. package/dist/client/static/js/async/1k.973e8e21fc.js.LICENSE.txt +0 -11
  245. package/dist/client/static/js/async/1p.0d5cddda96.js +0 -1
  246. package/dist/client/static/js/async/2.b589f1733b.js +0 -1
  247. package/dist/client/static/js/async/2v.96165101de.js +0 -1
  248. package/dist/client/static/js/async/3.0cacc08423.js +0 -1
  249. package/dist/client/static/js/async/37.b28b2f61cd.js +0 -1
  250. package/dist/client/static/js/async/3d.5085fb913f.js +0 -1
  251. package/dist/client/static/js/async/3j.357c80ff38.js +0 -2
  252. package/dist/client/static/js/async/3j.357c80ff38.js.LICENSE.txt +0 -11
  253. package/dist/client/static/js/async/3p.bcf32a0983.js +0 -1
  254. package/dist/client/static/js/async/3r.3a69e98ee0.js +0 -64
  255. package/dist/client/static/js/async/3u.1228460e2a.js +0 -1
  256. package/dist/client/static/js/async/3y.3530b824ad.js +0 -198
  257. package/dist/client/static/js/async/3y.3530b824ad.js.LICENSE.txt +0 -5
  258. package/dist/client/static/js/async/4.9442eeb472.js +0 -1
  259. package/dist/client/static/js/async/4e.678285ca55.js +0 -1
  260. package/dist/client/static/js/async/4k.33a0c7eeb4.js +0 -1
  261. package/dist/client/static/js/async/4m.928a1dde85.js +0 -31
  262. package/dist/client/static/js/async/4m.928a1dde85.js.LICENSE.txt +0 -11
  263. package/dist/client/static/js/async/4q.aad20dab25.js +0 -1
  264. package/dist/client/static/js/async/5.ebaf8b89cc.js +0 -36
  265. package/dist/client/static/js/async/51.95bcae98af.js +0 -2
  266. package/dist/client/static/js/async/51.95bcae98af.js.LICENSE.txt +0 -6
  267. package/dist/client/static/js/async/5b.d88304bc13.js +0 -1
  268. package/dist/client/static/js/async/5j.d6407c4248.js +0 -287
  269. package/dist/client/static/js/async/5o.88316d4460.js +0 -62
  270. package/dist/client/static/js/async/6.f034c9b528.js +0 -1
  271. package/dist/client/static/js/async/66.5dfa29f957.js +0 -93
  272. package/dist/client/static/js/async/6o.5b1a06a382.js +0 -1
  273. package/dist/client/static/js/async/7.e4a9288dd0.js +0 -1
  274. package/dist/client/static/js/async/73.308dff4da8.js +0 -1
  275. package/dist/client/static/js/async/7e.a1cc9bfd88.js +0 -1
  276. package/dist/client/static/js/async/7g.a7814350c3.js +0 -1
  277. package/dist/client/static/js/async/7l.fadbbc0583.js +0 -1
  278. package/dist/client/static/js/async/8.5067439d8c.js +0 -1
  279. package/dist/client/static/js/async/8j.ea110663fb.js +0 -1
  280. package/dist/client/static/js/async/a.bce4542392.js +0 -1
  281. package/dist/client/static/js/async/aa.65d3852576.js +0 -1
  282. package/dist/client/static/js/async/ar.9303e5f2e8.js +0 -2
  283. package/dist/client/static/js/async/ar.9303e5f2e8.js.LICENSE.txt +0 -11
  284. package/dist/client/static/js/async/az.d656062b0f.js +0 -1
  285. package/dist/client/static/js/async/b.b4f6f06515.js +0 -1
  286. package/dist/client/static/js/async/bi.09688ba75c.js +0 -1
  287. package/dist/client/static/js/async/bq.586bc738d1.js +0 -1
  288. package/dist/client/static/js/async/c.797d933882.js +0 -1
  289. package/dist/client/static/js/async/c0.0af1e640d3.js +0 -24
  290. package/dist/client/static/js/async/ca.8a52cfd447.js +0 -1
  291. package/dist/client/static/js/async/cf.d34fff5d67.js +0 -1
  292. package/dist/client/static/js/async/ct.b74928f7a3.js +0 -1
  293. package/dist/client/static/js/async/cx.3cb0242a3a.js +0 -226
  294. package/dist/client/static/js/async/d.a5fc8fe1b3.js +0 -1
  295. package/dist/client/static/js/async/da.f62c70f6c8.js +0 -1
  296. package/dist/client/static/js/async/dp.1725d6432c.js +0 -1
  297. package/dist/client/static/js/async/e.93214d622b.js +0 -79
  298. package/dist/client/static/js/async/f.ab50467719.js +0 -19
  299. package/dist/client/static/js/async/f.ab50467719.js.LICENSE.txt +0 -12
  300. package/dist/client/static/js/async/f7.46971e9d6d.js +0 -2
  301. package/dist/client/static/js/async/f7.46971e9d6d.js.LICENSE.txt +0 -6
  302. package/dist/client/static/js/async/f8.bbf0dbae70.js +0 -1
  303. package/dist/client/static/js/async/g.cb81980498.js +0 -2
  304. package/dist/client/static/js/async/g.cb81980498.js.LICENSE.txt +0 -11
  305. package/dist/client/static/js/async/h.4e790471e4.js +0 -27
  306. package/dist/client/static/js/async/h1.393f066d09.js +0 -1
  307. package/dist/client/static/js/async/h3.216e9798ab.js +0 -148
  308. package/dist/client/static/js/async/hd.0da931b622.js +0 -1
  309. package/dist/client/static/js/async/hk.ba7fb04d41.js +0 -1
  310. package/dist/client/static/js/async/hn.b645041e00.js +0 -1
  311. package/dist/client/static/js/async/ho.475a5e1ae4.js +0 -1
  312. package/dist/client/static/js/async/hp.e9fe2e395a.js +0 -2
  313. package/dist/client/static/js/async/hp.e9fe2e395a.js.LICENSE.txt +0 -17
  314. package/dist/client/static/js/async/hs.e7c59d8090.js +0 -41
  315. package/dist/client/static/js/async/i.7c148e8440.js +0 -1
  316. package/dist/client/static/js/async/id.573df20f29.js +0 -1
  317. package/dist/client/static/js/async/j.ab925882d8.js +0 -1
  318. package/dist/client/static/js/async/jd.63886a1f09.js +0 -1
  319. package/dist/client/static/js/async/jg.d86ebd4013.js +0 -86
  320. package/dist/client/static/js/async/jl.874d352278.js +0 -1
  321. package/dist/client/static/js/async/jll.11313b455a.js +0 -1
  322. package/dist/client/static/js/async/js.67182759ef.js +0 -1
  323. package/dist/client/static/js/async/jsc.23b70d6f40.js +0 -1
  324. package/dist/client/static/js/async/jse.334588ff5d.js +0 -1
  325. package/dist/client/static/js/async/jz.72eb929106.js +0 -77
  326. package/dist/client/static/js/async/k.3210286401.js +0 -217
  327. package/dist/client/static/js/async/ka.c1990ecaa3.js +0 -115
  328. package/dist/client/static/js/async/katex-vendor.de6a87c308.js +0 -1
  329. package/dist/client/static/js/async/ku.29c8a59d0c.js +0 -1
  330. package/dist/client/static/js/async/ky.8dab1dade0.js +0 -1
  331. package/dist/client/static/js/async/l.12dd34e1be.js +0 -1
  332. package/dist/client/static/js/async/l9.949710adaf.js +0 -83
  333. package/dist/client/static/js/async/l9.949710adaf.js.LICENSE.txt +0 -13
  334. package/dist/client/static/js/async/ls.9d9a01026c.js +0 -104
  335. package/dist/client/static/js/async/m.eb2e6752e2.js +0 -28
  336. package/dist/client/static/js/async/m.eb2e6752e2.js.LICENSE.txt +0 -11
  337. package/dist/client/static/js/async/m3.d2b05f9604.js +0 -2
  338. package/dist/client/static/js/async/m3.d2b05f9604.js.LICENSE.txt +0 -6
  339. package/dist/client/static/js/async/ma.2c261b04dd.js +0 -2
  340. package/dist/client/static/js/async/ma.2c261b04dd.js.LICENSE.txt +0 -6
  341. package/dist/client/static/js/async/me.8ace414f80.js +0 -23
  342. package/dist/client/static/js/async/ms.98960af4eb.js +0 -67
  343. package/dist/client/static/js/async/ms.98960af4eb.js.LICENSE.txt +0 -12
  344. package/dist/client/static/js/async/mt.0352e976d8.js +0 -1
  345. package/dist/client/static/js/async/n.a9f1c51701.js +0 -1
  346. package/dist/client/static/js/async/na.a36cd532d6.js +0 -1
  347. package/dist/client/static/js/async/nk.fc7e58325e.js +0 -1
  348. package/dist/client/static/js/async/o.36353dfb88.js +0 -1
  349. package/dist/client/static/js/async/oc.b73042e8bd.js +0 -8
  350. package/dist/client/static/js/async/og.8eb577893a.js +0 -193
  351. package/dist/client/static/js/async/p.48ecfcd14e.js +0 -1
  352. package/dist/client/static/js/async/px.fc6877924b.js +0 -1
  353. package/dist/client/static/js/async/q.22588845a9.js +0 -21
  354. package/dist/client/static/js/async/q.22588845a9.js.LICENSE.txt +0 -6
  355. package/dist/client/static/js/async/q5.97dc1481b6.js +0 -286
  356. package/dist/client/static/js/async/qs.2a9ddb3c72.js +0 -1
  357. package/dist/client/static/js/async/r.51010ad87c.js +0 -1
  358. package/dist/client/static/js/async/rd.cb6bf495bb.js +0 -2
  359. package/dist/client/static/js/async/rd.cb6bf495bb.js.LICENSE.txt +0 -4
  360. package/dist/client/static/js/async/s.0f395cdda5.js +0 -94
  361. package/dist/client/static/js/async/t.4dca0e2ba8.js +0 -1
  362. package/dist/client/static/js/async/t9.d44f57d518.js +0 -1
  363. package/dist/client/static/js/async/ta.973534bbec.js +0 -1
  364. package/dist/client/static/js/async/tr.e878658140.js +0 -309
  365. package/dist/client/static/js/async/u.0871ac5b22.js +0 -1
  366. package/dist/client/static/js/async/ud.3065bfee31.js +0 -2
  367. package/dist/client/static/js/async/ud.3065bfee31.js.LICENSE.txt +0 -4
  368. package/dist/client/static/js/async/up.ea990da0ff.js +0 -32
  369. package/dist/client/static/js/async/uw.8890abbabc.js +0 -1
  370. package/dist/client/static/js/async/v.7d28d3c241.js +0 -34
  371. package/dist/client/static/js/async/vp.9b13bf8610.js +0 -1
  372. package/dist/client/static/js/async/vt.42416b707d.js +0 -1
  373. package/dist/client/static/js/async/w.08ac210f60.js +0 -1
  374. package/dist/client/static/js/async/wt.ad92393a90.js +0 -1
  375. package/dist/client/static/js/async/x.563f72ca6b.js +0 -1
  376. package/dist/client/static/js/async/x0.475516418f.js +0 -1
  377. package/dist/client/static/js/async/x1.da8687159b.js +0 -90
  378. package/dist/client/static/js/async/xe.da8dcc2015.js +0 -2
  379. package/dist/client/static/js/async/xe.da8dcc2015.js.LICENSE.txt +0 -11
  380. package/dist/client/static/js/async/xl.a3c562a58c.js +0 -1
  381. package/dist/client/static/js/async/xn.6510c0abe2.js +0 -2
  382. package/dist/client/static/js/async/xn.6510c0abe2.js.LICENSE.txt +0 -6
  383. package/dist/client/static/js/async/xn1.83a7784fe1.js +0 -10
  384. package/dist/client/static/js/async/xn1.83a7784fe1.js.LICENSE.txt +0 -11
  385. package/dist/client/static/js/async/xnl.feb0021e50.js +0 -2
  386. package/dist/client/static/js/async/xnl.feb0021e50.js.LICENSE.txt +0 -12
  387. package/dist/client/static/js/async/y.1a9ed7a5d8.js +0 -1
  388. package/dist/client/static/js/async/y6.43c57defe4.js +0 -1
  389. package/dist/client/static/js/async/yb.8c1342401d.js +0 -1
  390. package/dist/client/static/js/async/ybq.4491f2f2dc.js +0 -1
  391. package/dist/client/static/js/async/yg.35bebd6d0c.js +0 -149
  392. package/dist/client/static/js/async/yq.917ddd7ba2.js +0 -1
  393. package/dist/client/static/js/async/ys.00687cf82d.js +0 -38
  394. package/dist/client/static/js/async/yv.d99d829136.js +0 -1
  395. package/dist/client/static/js/async/z.56f61a4374.js +0 -1
  396. package/dist/client/static/js/async/zi.5fdb07b86a.js +0 -24
  397. package/dist/client/static/js/async/zj.654f37e8ff.js +0 -1
  398. package/dist/client/static/js/async/zn.966d6f1cc6.js +0 -1
  399. package/dist/client/static/js/async/zo.26213b40c0.js +0 -1
  400. package/dist/client/static/js/async/zx.e9f4105e00.js +0 -1
  401. package/dist/client/static/js/index.e6a257402a.js +0 -38
  402. package/dist/client/static/js/index.e6a257402a.js.LICENSE.txt +0 -4
  403. package/dist/client/static/js/markdown-vendor.71e43278b3.js +0 -144
  404. package/dist/client/static/js/shiki-vendor.cb8452ddcd.js +0 -1
  405. package/src/client/components/settings/categories/provider-settings/Icons.tsx +0 -35
  406. package/src/client/hooks/settings/providers.ts +0 -326
  407. package/src/server/plugins/dev-assets.ts +0 -49
  408. package/src/shared/lib/code/editor-utils.ts +0 -16
  409. package/src/shared/lib/models/provider-presets.ts +0 -29
  410. /package/dist/client/{apple-touch-icon.png → static/apple-touch-icon-dskx5sr3.png} +0 -0
  411. /package/dist/client/{icon-192x192.png → static/icon-192x192-6gn5cr2f.png} +0 -0
  412. /package/dist/client/{icon.svg → static/icon-d07z9dtz.svg} +0 -0
  413. /package/dist/client/{manifest.webmanifest → static/manifest-bnyy75kt.webmanifest} +0 -0
  414. /package/{dist/client → public}/icon-512x512.png +0 -0
  415. /package/{dist/client → public}/icon-maskable-512x512.png +0 -0
  416. /package/{dist/client → public}/sw.js +0 -0
  417. /package/src/{client/components/common/code-editor → shared/lib/code/editor}/history.ts +0 -0
  418. /package/src/shared/lib/models/{provider-cleanup.ts → provider/cleanup.ts} +0 -0
  419. /package/src/shared/lib/models/{provider-label.ts → provider/label.ts} +0 -0
@@ -1,13 +0,0 @@
1
- /*! Bundled license information:
2
-
3
- lodash-es/lodash.js:
4
- (**
5
- * @license
6
- * Lodash (Custom Build) <https://lodash.com/>
7
- * Build: `lodash modularize exports="es" -o ./`
8
- * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
9
- * Released under MIT license <https://lodash.com/license>
10
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
11
- * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
12
- *)
13
- */
@@ -1,104 +0,0 @@
1
- "use strict";(self.rspackChunkompchamber=self.rspackChunkompchamber||[]).push([["ls"],{jE(t,e,r){var o=r("Gt"),a=class{constructor(t){this.init=t,this.records=this.init()}static{(0,o.K)(this,"ImperativeState")}reset(){this.records=this.init()}};r.d(e,{m:()=>a})},P0(t,e,r){function o(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}(0,r("Gt").K)(o,"populateCommonDb"),r.d(e,{S:()=>o})},Xd(t,e,r){var o=r("jE"),a=r("P0"),i=r("NH"),n=r("Yr"),s=r("M4"),c=r("Gt"),d=r("Xe"),l=r("El"),h={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},$=n.UI.gitGraph,m=(0,c.K)(()=>(0,i.$t)({...$,...(0,n.zj)().gitGraph}),"getConfig"),g=new o.m(()=>{let t=m(),e=t.mainBranchName,r=t.mainBranchOrder;return{mainBranchName:e,commits:new Map,head:null,branchConfig:new Map([[e,{name:e,order:r}]]),branches:new Map([[e,null]]),currBranch:e,direction:"LR",seq:0,options:{}}});function p(){return(0,i.yT)({length:7})}function y(t,e){let r=Object.create(null);return t.reduce((t,o)=>{let a=e(o);return r[a]||(r[a]=!0,t.push(o)),t},[])}(0,c.K)(p,"getID"),(0,c.K)(y,"uniqBy");var f=(0,c.K)(function(t){g.records.direction=t},"setDirection"),x=(0,c.K)(function(t){s.R.debug("options str",t),t=(t=t?.trim())||"{}";try{g.records.options=JSON.parse(t)}catch(t){s.R.error("error while parsing gitGraph options",t.message)}},"setOptions"),u=(0,c.K)(function(){return g.records.options},"getOptions"),b=(0,c.K)(function(t){let e=t.msg,r=t.id,o=t.type,a=t.tags;s.R.info("commit",e,r,o,a),s.R.debug("Entering commit:",e,r,o,a);let i=m();r=n.Y2.sanitizeText(r,i),e=n.Y2.sanitizeText(e,i),a=a?.map(t=>n.Y2.sanitizeText(t,i));let c={id:r||g.records.seq+"-"+p(),message:e,seq:g.records.seq++,type:o??h.NORMAL,tags:a??[],parents:null==g.records.head?[]:[g.records.head.id],branch:g.records.currBranch};g.records.head=c,s.R.info("main branch",i.mainBranchName),g.records.commits.has(c.id)&&s.R.warn(`Commit ID ${c.id} already exists`),g.records.commits.set(c.id,c),g.records.branches.set(g.records.currBranch,c.id),s.R.debug("in pushCommit "+c.id)},"commit"),k=(0,c.K)(function(t){let e=t.name,r=t.order;if(e=n.Y2.sanitizeText(e,m()),g.records.branches.has(e))throw Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${e}")`);g.records.branches.set(e,null!=g.records.head?g.records.head.id:null),g.records.branchConfig.set(e,{name:e,order:r}),E(e),s.R.debug("in createBranch")},"branch"),B=(0,c.K)(t=>{let e=t.branch,r=t.id,o=t.type,a=t.tags,i=m();e=n.Y2.sanitizeText(e,i),r&&(r=n.Y2.sanitizeText(r,i));let c=g.records.branches.get(g.records.currBranch),d=g.records.branches.get(e),l=c?g.records.commits.get(c):void 0,$=d?g.records.commits.get(d):void 0;if(l&&$&&l.branch===e)throw Error(`Cannot merge branch '${e}' into itself.`);if(g.records.currBranch===e){let t=Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw t.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},t}if(void 0===l||!l){let t=Error(`Incorrect usage of "merge". Current branch (${g.records.currBranch})has no commits`);throw t.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["commit"]},t}if(!g.records.branches.has(e)){let t=Error('Incorrect usage of "merge". Branch to be merged ('+e+") does not exist");throw t.hash={text:`merge ${e}`,token:`merge ${e}`,expected:[`branch ${e}`]},t}if(void 0===$||!$){let t=Error('Incorrect usage of "merge". Branch to be merged ('+e+") has no commits");throw t.hash={text:`merge ${e}`,token:`merge ${e}`,expected:['"commit"']},t}if(l===$){let t=Error('Incorrect usage of "merge". Both branches have same head');throw t.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},t}if(r&&g.records.commits.has(r)){let t=Error('Incorrect usage of "merge". Commit with id:'+r+" already exists, use different custom id");throw t.hash={text:`merge ${e} ${r} ${o} ${a?.join(" ")}`,token:`merge ${e} ${r} ${o} ${a?.join(" ")}`,expected:[`merge ${e} ${r}_UNIQUE ${o} ${a?.join(" ")}`]},t}let y={id:r||`${g.records.seq}-${p()}`,message:`merged branch ${e} into ${g.records.currBranch}`,seq:g.records.seq++,parents:null==g.records.head?[]:[g.records.head.id,d||""],branch:g.records.currBranch,type:h.MERGE,customType:o,customId:!!r,tags:a??[]};g.records.head=y,g.records.commits.set(y.id,y),g.records.branches.set(g.records.currBranch,y.id),s.R.debug(g.records.branches),s.R.debug("in mergeBranch")},"merge"),w=(0,c.K)(function(t){let e=t.id,r=t.targetId,o=t.tags,a=t.parent;s.R.debug("Entering cherryPick:",e,r,o);let i=m();if(e=n.Y2.sanitizeText(e,i),r=n.Y2.sanitizeText(r,i),o=o?.map(t=>n.Y2.sanitizeText(t,i)),a=n.Y2.sanitizeText(a,i),!e||!g.records.commits.has(e)){let t=Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw t.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},t}let c=g.records.commits.get(e);if(void 0===c||!c)throw Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(a&&!(Array.isArray(c.parents)&&c.parents.includes(a)))throw Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");let d=c.branch;if(c.type===h.MERGE&&!a)throw Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!r||!g.records.commits.has(r)){if(d===g.records.currBranch){let t=Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw t.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},t}let t=g.records.branches.get(g.records.currBranch);if(void 0===t||!t){let t=Error(`Incorrect usage of "cherry-pick". Current branch (${g.records.currBranch})has no commits`);throw t.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},t}let i=g.records.commits.get(t);if(void 0===i||!i){let t=Error(`Incorrect usage of "cherry-pick". Current branch (${g.records.currBranch})has no commits`);throw t.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},t}let n={id:g.records.seq+"-"+p(),message:`cherry-picked ${c?.message} into ${g.records.currBranch}`,seq:g.records.seq++,parents:null==g.records.head?[]:[g.records.head.id,c.id],branch:g.records.currBranch,type:h.CHERRY_PICK,tags:o?o.filter(Boolean):[`cherry-pick:${c.id}${c.type===h.MERGE?`|parent:${a}`:""}`]};g.records.head=n,g.records.commits.set(n.id,n),g.records.branches.set(g.records.currBranch,n.id),s.R.debug(g.records.branches),s.R.debug("in cherryPick")}},"cherryPick"),E=(0,c.K)(function(t){if(t=n.Y2.sanitizeText(t,m()),g.records.branches.has(t)){g.records.currBranch=t;let e=g.records.branches.get(g.records.currBranch);void 0!==e&&e?g.records.head=g.records.commits.get(e)??null:g.records.head=null}else{let e=Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw e.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},e}},"checkout");function T(t,e,r){let o=t.indexOf(e);-1===o?t.push(r):t.splice(o,1,r)}function C(t){let e=t.reduce((t,e)=>t.seq>e.seq?t:e,t[0]),r="";t.forEach(function(t){t===e?r+=" *":r+=" |"});let o=[r,e.id,e.seq];for(let t in g.records.branches)g.records.branches.get(t)===e.id&&o.push(t);if(s.R.debug(o.join(" ")),e.parents&&2==e.parents.length&&e.parents[0]&&e.parents[1]){let r=g.records.commits.get(e.parents[0]);T(t,e,r),e.parents[1]&&t.push(g.records.commits.get(e.parents[1]))}else if(0==e.parents.length)return;else if(e.parents[0]){let r=g.records.commits.get(e.parents[0]);T(t,e,r)}C(t=y(t,t=>t.id))}(0,c.K)(T,"upsert"),(0,c.K)(C,"prettyPrintCommitHistory");var L=(0,c.K)(function(){s.R.debug(g.records.commits),C([I()[0]])},"prettyPrint"),K=(0,c.K)(function(){g.reset(),(0,n.IU)()},"clear"),M=(0,c.K)(function(){return[...g.records.branchConfig.values()].map((t,e)=>null!==t.order&&void 0!==t.order?t:{...t,order:parseFloat(`0.${e}`)}).sort((t,e)=>(t.order??0)-(e.order??0)).map(({name:t})=>({name:t}))},"getBranchesAsObjArray"),R=(0,c.K)(function(){return g.records.branches},"getBranches"),v=(0,c.K)(function(){return g.records.commits},"getCommits"),I=(0,c.K)(function(){let t=[...g.records.commits.values()];return t.forEach(function(t){s.R.debug(t.id)}),t.sort((t,e)=>t.seq-e.seq),t},"getCommitsArray"),P={commitType:h,getConfig:m,setDirection:f,setOptions:x,getOptions:u,commit:b,branch:k,merge:B,cherryPick:w,checkout:E,prettyPrint:L,clear:K,getBranchesAsObjArray:M,getBranches:R,getCommits:v,getCommitsArray:I,getCurrentBranch:(0,c.K)(function(){return g.records.currBranch},"getCurrentBranch"),getDirection:(0,c.K)(function(){return g.records.direction},"getDirection"),getHead:(0,c.K)(function(){return g.records.head},"getHead"),setAccTitle:n.SV,getAccTitle:n.iN,getAccDescription:n.m7,setAccDescription:n.EI,setDiagramTitle:n.ke,getDiagramTitle:n.ab},O=(0,c.K)((t,e)=>{for(let r of((0,a.S)(t,e),t.dir&&e.setDirection(t.dir),t.statements))G(r,e)},"populate"),G=(0,c.K)((t,e)=>{let r={Commit:(0,c.K)(t=>e.commit(A(t)),"Commit"),Branch:(0,c.K)(t=>e.branch(S(t)),"Branch"),Merge:(0,c.K)(t=>e.merge(H(t)),"Merge"),Checkout:(0,c.K)(t=>e.checkout(D(t)),"Checkout"),CherryPicking:(0,c.K)(t=>e.cherryPick(W(t)),"CherryPicking")}[t.$type];r?r(t):s.R.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),A=(0,c.K)(t=>({id:t.id,msg:t.message??"",type:void 0!==t.type?h[t.type]:h.NORMAL,tags:t.tags??void 0}),"parseCommit"),S=(0,c.K)(t=>({name:t.name,order:t.order??0}),"parseBranch"),H=(0,c.K)(t=>({branch:t.branch,id:t.id??"",type:void 0!==t.type?h[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),D=(0,c.K)(t=>t.branch,"parseCheckout"),W=(0,c.K)(t=>({id:t.id,targetId:"",tags:t.tags?.length===0?void 0:t.tags,parent:t.parent}),"parseCherryPicking"),q={parse:(0,c.K)(async t=>{let e=await (0,d.qg)("gitGraph",t);s.R.debug(e),O(e,P)},"parse")},z=new Set(["redux","redux-dark","redux-color","redux-dark-color"]),_=new Set(["redux-color","redux-dark-color"]),Y=new Set(["dark","redux-dark","redux-dark-color","neo-dark"]),j=(0,c.K)((t,e,r=!1)=>r&&t>0?(t-1)%(e-1)+1:t%e,"calcColorIndex"),N=new Map,F=new Map,U=new Map,V=[],X=0,J="LR",Q=(0,c.K)(()=>{N.clear(),F.clear(),U.clear(),X=0,V=[],J="LR"},"clear"),Z=(0,c.K)(t=>{let e=document.createElementNS("http://www.w3.org/2000/svg","text");return("string"==typeof t?t.split(/\\n|\n|<br\s*\/?>/gi):t).forEach(t=>{let r=document.createElementNS("http://www.w3.org/2000/svg","tspan");r.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),r.setAttribute("dy","1em"),r.setAttribute("x","0"),r.setAttribute("class","row"),r.textContent=t.trim(),e.appendChild(r)}),e},"drawText"),tt=(0,c.K)(t=>{let e,r,o;return"BT"===J?(r=(0,c.K)((t,e)=>t<=e,"comparisonFunc"),o=1/0):(r=(0,c.K)((t,e)=>t>=e,"comparisonFunc"),o=0),t.forEach(t=>{let a="TB"===J||"BT"==J?F.get(t)?.y:F.get(t)?.x;void 0!==a&&r(a,o)&&(e=t,o=a)}),e},"findClosestParent"),te=(0,c.K)(t=>{let e="",r=1/0;return t.forEach(t=>{let o=F.get(t).y;o<=r&&(e=t,r=o)}),e||void 0},"findClosestParentBT"),tr=(0,c.K)((t,e,r)=>{let o=r,a=r,i=[];t.forEach(t=>{let r=e.get(t);if(!r)throw Error(`Commit not found for key ${t}`);r.parents.length?a=Math.max(o=ta(r),a):i.push(r),ti(r,o)}),o=a,i.forEach(t=>{tn(t,o,r)}),t.forEach(t=>{let r=e.get(t);if(r?.parents.length){let t=te(r.parents);(o=F.get(t).y-40)<=a&&(a=o);let e=N.get(r.branch).pos,i=o-10;F.set(r.id,{x:e,y:i})}})},"setParallelBTPos"),to=(0,c.K)(t=>{let e=tt(t.parents.filter(t=>null!==t));if(!e)throw Error(`Closest parent not found for commit ${t.id}`);let r=F.get(e)?.y;if(void 0===r)throw Error(`Closest parent position not found for commit ${t.id}`);return r},"findClosestParentPos"),ta=(0,c.K)(t=>to(t)+40,"calculateCommitPosition"),ti=(0,c.K)((t,e)=>{let r=N.get(t.branch);if(!r)throw Error(`Branch not found for commit ${t.id}`);let o=r.pos,a=e+10;return F.set(t.id,{x:o,y:a}),{x:o,y:a}},"setCommitPosition"),tn=(0,c.K)((t,e,r)=>{let o=N.get(t.branch);if(!o)throw Error(`Branch not found for commit ${t.id}`);let a=o.pos;F.set(t.id,{x:a,y:e+r})},"setRootPosition"),ts=(0,c.K)((t,e,r,o,a,i)=>{let{theme:s}=(0,n.D7)(),c=z.has(s??""),d=_.has(s??""),l=Y.has(s??"");if(i===h.HIGHLIGHT)t.append("rect").attr("x",r.x-10+3*!!c).attr("y",r.y-10+3*!!c).attr("width",c?14:20).attr("height",c?14:20).attr("class",`commit ${e.id} commit-highlight${j(a,8,d)} ${o}-outer`),t.append("rect").attr("x",r.x-6+2*!!c).attr("y",r.y-6+2*!!c).attr("width",c?8:12).attr("height",c?8:12).attr("class",`commit ${e.id} commit${j(a,8,d)} ${o}-inner`);else if(i===h.CHERRY_PICK)t.append("circle").attr("cx",r.x).attr("cy",r.y).attr("r",c?7:10).attr("class",`commit ${e.id} ${o}`),t.append("circle").attr("cx",r.x-3).attr("cy",r.y+2).attr("r",c?2.5:2.75).attr("fill",l?"#000000":"#fff").attr("class",`commit ${e.id} ${o}`),t.append("circle").attr("cx",r.x+3).attr("cy",r.y+2).attr("r",c?2.5:2.75).attr("fill",l?"#000000":"#fff").attr("class",`commit ${e.id} ${o}`),t.append("line").attr("x1",r.x+3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke",l?"#000000":"#fff").attr("class",`commit ${e.id} ${o}`),t.append("line").attr("x1",r.x-3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke",l?"#000000":"#fff").attr("class",`commit ${e.id} ${o}`);else{let n=t.append("circle");if(n.attr("cx",r.x),n.attr("cy",r.y),n.attr("r",c?7:10),n.attr("class",`commit ${e.id} commit${j(a,8,d)}`),i===h.MERGE){let i=t.append("circle");i.attr("cx",r.x),i.attr("cy",r.y),i.attr("r",c?5:6),i.attr("class",`commit ${o} ${e.id} commit${j(a,8,d)}`)}if(i===h.REVERSE){let i=t.append("path"),n=c?4:5;i.attr("d",`M ${r.x-n},${r.y-n}L${r.x+n},${r.y+n}M${r.x-n},${r.y+n}L${r.x+n},${r.y-n}`).attr("class",`commit ${o} ${e.id} commit${j(a,8,d)}`)}}},"drawCommitBullet"),tc=(0,c.K)((t,e,r,o,a)=>{if(e.type!==h.CHERRY_PICK&&(e.customId&&e.type===h.MERGE||e.type!==h.MERGE)&&a.showCommitLabel){let i=t.append("g"),n=i.insert("rect").attr("class","commit-label-bkg"),s=i.append("text").attr("x",o).attr("y",r.y+25).attr("class","commit-label").text(e.id),c=s.node()?.getBBox();if(c&&(n.attr("x",r.posWithOffset-c.width/2-2).attr("y",r.y+13.5).attr("width",c.width+4).attr("height",c.height+4),"TB"===J||"BT"===J?(n.attr("x",r.x-(c.width+16+5)).attr("y",r.y-12),s.attr("x",r.x-(c.width+16)).attr("y",r.y+c.height-12)):s.attr("x",r.posWithOffset-c.width/2),a.rotateCommitLabel))if("TB"===J||"BT"===J)s.attr("transform","rotate(-45, "+r.x+", "+r.y+")"),n.attr("transform","rotate(-45, "+r.x+", "+r.y+")");else{let t=-7.5-(c.width+10)/25*9.5,e=10+c.width/25*8.5;i.attr("transform","translate("+t+", "+e+") rotate(-45, "+o+", "+r.y+")")}}},"drawCommitLabel"),td=(0,c.K)((t,e,r,o)=>{if(e.tags.length>0){let a=0,i=0,n=0,s=[];for(let o of e.tags.reverse()){let e=t.insert("polygon"),c=t.append("circle"),d=t.append("text").attr("y",r.y-16-a).attr("class","tag-label").text(o),l=d.node()?.getBBox();if(!l)throw Error("Tag bbox not found");i=Math.max(i,l.width),n=Math.max(n,l.height),d.attr("x",r.posWithOffset-l.width/2),s.push({tag:d,hole:c,rect:e,yOffset:a}),a+=20}for(let{tag:t,hole:e,rect:a,yOffset:c}of s){let s=n/2,d=r.y-19.2-c;if(a.attr("class","tag-label-bkg").attr("points",`
2
- ${o-i/2-2},${d+2}
3
- ${o-i/2-2},${d-2}
4
- ${r.posWithOffset-i/2-4},${d-s-2}
5
- ${r.posWithOffset+i/2+4},${d-s-2}
6
- ${r.posWithOffset+i/2+4},${d+s+2}
7
- ${r.posWithOffset-i/2-4},${d+s+2}`),e.attr("cy",d).attr("cx",o-i/2+2).attr("r",1.5).attr("class","tag-hole"),"TB"===J||"BT"===J){let n=o+c;a.attr("class","tag-label-bkg").attr("points",`
8
- ${r.x},${n+2}
9
- ${r.x},${n-2}
10
- ${r.x+10},${n-s-2}
11
- ${r.x+10+i+4},${n-s-2}
12
- ${r.x+10+i+4},${n+s+2}
13
- ${r.x+10},${n+s+2}`).attr("transform","translate(12,12) rotate(45, "+r.x+","+o+")"),e.attr("cx",r.x+2).attr("cy",n).attr("transform","translate(12,12) rotate(45, "+r.x+","+o+")"),t.attr("x",r.x+5).attr("y",n+3).attr("transform","translate(14,14) rotate(45, "+r.x+","+o+")")}}}},"drawCommitTags"),tl=(0,c.K)(t=>{switch(t.customType??t.type){case h.NORMAL:return"commit-normal";case h.REVERSE:return"commit-reverse";case h.HIGHLIGHT:return"commit-highlight";case h.MERGE:return"commit-merge";case h.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),th=(0,c.K)((t,e,r,o)=>{let a={x:0,y:0};if(t.parents.length>0){let r=tt(t.parents);if(r){let i=o.get(r)??a;return"TB"===e?i.y+40:"BT"===e?(o.get(t.id)??a).y-40:i.x+40}}else if("TB"===e)return 30;else if("BT"===e)return(o.get(t.id)??a).y-40;return 0},"calculatePosition"),t$=(0,c.K)((t,e,r)=>{let o="BT"===J&&r?e:e+10,a=N.get(t.branch)?.pos,i="TB"===J||"BT"===J?N.get(t.branch)?.pos:o;if(void 0===i||void 0===a)throw Error(`Position were undefined for commit ${t.id}`);let s=z.has((0,n.D7)().theme??"");return{x:i,y:"TB"===J||"BT"===J?o:a+(s?7:-2),posWithOffset:o}},"getCommitPosition"),tm=(0,c.K)((t,e,r,o)=>{let a=t.append("g").attr("class","commit-bullets"),i=t.append("g").attr("class","commit-labels"),n=30*("TB"===J||"BT"===J),s=[...e.keys()],d=o.parallelCommits??!1,l=s.sort((0,c.K)((t,r)=>{let o=e.get(t)?.seq,a=e.get(r)?.seq;return void 0!==o&&void 0!==a?o-a:0},"sortKeys"));"BT"===J&&(d&&tr(l,e,n),l=l.reverse()),l.forEach(t=>{let s=e.get(t);if(!s)throw Error(`Commit not found for key ${t}`);d&&(n=th(s,J,n,F));let c=t$(s,n,d);if(r){let t=tl(s),e=s.customType??s.type,r=N.get(s.branch)?.index??0;ts(a,s,c,t,r,e),tc(i,s,c,n,o),td(i,s,c,n)}"TB"===J||"BT"===J?F.set(s.id,{x:c.x,y:c.posWithOffset}):F.set(s.id,{x:c.posWithOffset,y:c.y}),(n="BT"===J&&d?n+40:n+40+10)>X&&(X=n)})},"drawCommits"),tg=(0,c.K)((t,e,r,o,a)=>{let i=("TB"===J||"BT"===J?r.x<o.x:r.y<o.y)?e.branch:t.branch,n=(0,c.K)(t=>t.branch===i,"isOnBranchToGetCurve"),s=(0,c.K)(r=>r.seq>t.seq&&r.seq<e.seq,"isBetweenCommits");return[...a.values()].some(t=>s(t)&&n(t))},"shouldRerouteArrow"),tp=(0,c.K)((t,e,r=0)=>{let o=t+Math.abs(t-e)/2;if(r>5)return o;if(V.every(t=>Math.abs(t-o)>=10))return V.push(o),o;let a=Math.abs(t-e);return tp(t,e-a/5,r+1)},"findLane"),ty=(0,c.K)((t,e,r,o)=>{let a,{theme:i}=(0,n.D7)(),s=_.has(i??""),c=F.get(e.id),d=F.get(r.id);if(void 0===c||void 0===d)throw Error(`Commit positions not found for commits ${e.id} and ${r.id}`);let l=tg(e,r,c,d,o),$="",m="",g=0,p=0,y=N.get(r.branch)?.index;if(r.type===h.MERGE&&e.id!==r.parents[0]&&(y=N.get(e.branch)?.index),l){$="A 10 10, 0, 0, 0,",m="A 10 10, 0, 0, 1,",g=10,p=10;let t=c.y<d.y?tp(c.y,d.y):tp(d.y,c.y),r=c.x<d.x?tp(c.x,d.x):tp(d.x,c.x);"TB"===J?c.x<d.x?a=`M ${c.x} ${c.y} L ${r-g} ${c.y} ${m} ${r} ${c.y+p} L ${r} ${d.y-g} ${$} ${r+p} ${d.y} L ${d.x} ${d.y}`:(y=N.get(e.branch)?.index,a=`M ${c.x} ${c.y} L ${r+g} ${c.y} ${$} ${r} ${c.y+p} L ${r} ${d.y-g} ${m} ${r-p} ${d.y} L ${d.x} ${d.y}`):"BT"===J?c.x<d.x?a=`M ${c.x} ${c.y} L ${r-g} ${c.y} ${$} ${r} ${c.y-p} L ${r} ${d.y+g} ${m} ${r+p} ${d.y} L ${d.x} ${d.y}`:(y=N.get(e.branch)?.index,a=`M ${c.x} ${c.y} L ${r+g} ${c.y} ${m} ${r} ${c.y-p} L ${r} ${d.y+g} ${$} ${r-p} ${d.y} L ${d.x} ${d.y}`):c.y<d.y?a=`M ${c.x} ${c.y} L ${c.x} ${t-g} ${$} ${c.x+p} ${t} L ${d.x-g} ${t} ${m} ${d.x} ${t+p} L ${d.x} ${d.y}`:(y=N.get(e.branch)?.index,a=`M ${c.x} ${c.y} L ${c.x} ${t+g} ${m} ${c.x+p} ${t} L ${d.x-g} ${t} ${$} ${d.x} ${t-p} L ${d.x} ${d.y}`)}else $="A 20 20, 0, 0, 0,",m="A 20 20, 0, 0, 1,",g=20,p=20,"TB"===J?(c.x<d.x&&(a=r.type===h.MERGE&&e.id!==r.parents[0]?`M ${c.x} ${c.y} L ${c.x} ${d.y-g} ${$} ${c.x+p} ${d.y} L ${d.x} ${d.y}`:`M ${c.x} ${c.y} L ${d.x-g} ${c.y} ${m} ${d.x} ${c.y+p} L ${d.x} ${d.y}`),c.x>d.x&&($="A 20 20, 0, 0, 0,",m="A 20 20, 0, 0, 1,",g=20,p=20,a=r.type===h.MERGE&&e.id!==r.parents[0]?`M ${c.x} ${c.y} L ${c.x} ${d.y-g} ${m} ${c.x-p} ${d.y} L ${d.x} ${d.y}`:`M ${c.x} ${c.y} L ${d.x+g} ${c.y} ${$} ${d.x} ${c.y+p} L ${d.x} ${d.y}`),c.x===d.x&&(a=`M ${c.x} ${c.y} L ${d.x} ${d.y}`)):"BT"===J?(c.x<d.x&&(a=r.type===h.MERGE&&e.id!==r.parents[0]?`M ${c.x} ${c.y} L ${c.x} ${d.y+g} ${m} ${c.x+p} ${d.y} L ${d.x} ${d.y}`:`M ${c.x} ${c.y} L ${d.x-g} ${c.y} ${$} ${d.x} ${c.y-p} L ${d.x} ${d.y}`),c.x>d.x&&($="A 20 20, 0, 0, 0,",m="A 20 20, 0, 0, 1,",g=20,p=20,a=r.type===h.MERGE&&e.id!==r.parents[0]?`M ${c.x} ${c.y} L ${c.x} ${d.y+g} ${$} ${c.x-p} ${d.y} L ${d.x} ${d.y}`:`M ${c.x} ${c.y} L ${d.x+g} ${c.y} ${m} ${d.x} ${c.y-p} L ${d.x} ${d.y}`),c.x===d.x&&(a=`M ${c.x} ${c.y} L ${d.x} ${d.y}`)):(c.y<d.y&&(a=r.type===h.MERGE&&e.id!==r.parents[0]?`M ${c.x} ${c.y} L ${d.x-g} ${c.y} ${m} ${d.x} ${c.y+p} L ${d.x} ${d.y}`:`M ${c.x} ${c.y} L ${c.x} ${d.y-g} ${$} ${c.x+p} ${d.y} L ${d.x} ${d.y}`),c.y>d.y&&(a=r.type===h.MERGE&&e.id!==r.parents[0]?`M ${c.x} ${c.y} L ${d.x-g} ${c.y} ${$} ${d.x} ${c.y-p} L ${d.x} ${d.y}`:`M ${c.x} ${c.y} L ${c.x} ${d.y+g} ${m} ${c.x+p} ${d.y} L ${d.x} ${d.y}`),c.y===d.y&&(a=`M ${c.x} ${c.y} L ${d.x} ${d.y}`));if(void 0===a)throw Error("Line definition not found");t.append("path").attr("d",a).attr("class","arrow arrow"+j(y,8,s))},"drawArrow"),tf=(0,c.K)((t,e)=>{let r=t.append("g").attr("class","commit-arrows");[...e.keys()].forEach(t=>{let o=e.get(t);o.parents&&o.parents.length>0&&o.parents.forEach(t=>{ty(r,e.get(t),o,e)})})},"drawArrows"),tx=(0,c.K)((t,e,r,o)=>{let{look:a,theme:i,themeVariables:s}=(0,n.D7)(),{dropShadow:c,THEME_COLOR_LIMIT:d}=s,l=z.has(i??""),h=_.has(i??""),$=t.append("g");e.forEach((t,e)=>{let i=j(e,l?d:8,h),n=N.get(t.name)?.pos;if(void 0===n)throw Error(`Position not found for branch ${t.name}`);let s="TB"===J||"BT"===J?n:l?n+6+1:n-2,m=$.append("line");m.attr("x1",0),m.attr("y1",s),m.attr("x2",X),m.attr("y2",s),m.attr("class","branch branch"+i),"TB"===J?(m.attr("y1",30),m.attr("x1",n),m.attr("y2",X),m.attr("x2",n)):"BT"===J&&(m.attr("y1",X),m.attr("x1",n),m.attr("y2",30),m.attr("x2",n)),V.push(s);let g=Z(t.name),p=$.insert("rect"),y=$.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+i);y.node().appendChild(g);let f=g.getBBox(),x=4*!l,u=16*!!l,b=12*!!l;"neo"===a&&p.attr("data-look","neo"),p.attr("class","branchLabelBkg label"+i).attr("style","neo"===a?`filter:${l?`url(#${o}-drop-shadow)`:c}`:"").attr("rx",x).attr("ry",x).attr("x",-f.width-4-30*(!0===r.rotateCommitLabel)).attr("y",-f.height/2+10).attr("width",f.width+18+u).attr("height",f.height+4+b),y.attr("transform","translate("+(-f.width-14-30*(!0===r.rotateCommitLabel)+u/2)+", "+(s-f.height/2-2)+")"),"TB"===J?(p.attr("x",n-f.width/2-10).attr("y",0),y.attr("transform","translate("+(n-f.width/2-5)+", 0)"),l&&(p.attr("transform",`translate(${-u/2-3}, ${-b-10})`),y.attr("transform","translate("+(n-f.width/2-5)+", "+(-(2*b)+7)+")"))):"BT"===J?(p.attr("x",n-f.width/2-10).attr("y",X),y.attr("transform","translate("+(n-f.width/2-5)+", "+X+")"),l&&(p.attr("transform",`translate(${-u/2-3}, ${b+10})`),y.attr("transform","translate("+(n-f.width/2-5)+", "+(X+2*b+4)+")"))):p.attr("transform","translate(-19, "+(s-12-b/2)+")")})},"drawBranches"),tu=(0,c.K)(function(t,e,r,o,a){return N.set(t,{pos:e,index:r}),e+=50+40*!!a+("TB"===J||"BT"===J?o.width/2:0)},"setBranchPosition"),tb=(0,c.K)(function(t,e,r,o){Q(),s.R.debug("in gitgraph renderer",t+"\n","id:",e,r);let a=o.db;if(!a.getConfig)return void s.R.error("getConfig method is not available on db");let c=a.getConfig(),d=c.rotateCommitLabel??!1;U=a.getCommits();let h=a.getBranchesAsObjArray();J=a.getDirection();let $=(0,l.Ltv)(`[id="${e}"]`),{look:m,theme:g,themeVariables:p}=(0,n.D7)(),{useGradient:y,gradientStart:f,gradientStop:x,filterColor:u}=p;if(y){let t=$.append("defs").append("linearGradient").attr("id",e+"-gradient").attr("gradientUnits","objectBoundingBox").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");t.append("stop").attr("offset","0%").attr("stop-color",f).attr("stop-opacity",1),t.append("stop").attr("offset","100%").attr("stop-color",x).attr("stop-opacity",1)}"neo"===m&&z.has(g??"")&&$.append("defs").append("filter").attr("id",e+"-drop-shadow").attr("height","130%").attr("width","130%").append("feDropShadow").attr("dx","4").attr("dy","4").attr("stdDeviation",0).attr("flood-opacity","0.06").attr("flood-color",u);let b=0;h.forEach((t,e)=>{let r=Z(t.name),o=$.append("g"),a=o.insert("g").attr("class","branchLabel"),i=a.insert("g").attr("class","label branch-label");i.node()?.appendChild(r);let n=r.getBBox();b=tu(t.name,b,e,n,d),i.remove(),a.remove(),o.remove()}),tm($,U,!1,c),c.showBranches&&tx($,h,c,e),tf($,U),tm($,U,!0,c),i._K.insertTitle($,"gitTitleText",c.titleTopMargin??0,a.getDiagramTitle()),(0,n.mj)(void 0,$,c.diagramPadding,c.useMaxWidth)},"draw"),tk=new Set(["redux","redux-dark","redux-color","redux-dark-color"]),tB=new Set(["redux-color","redux-dark-color"]),tw=new Set(["neo","neo-dark"]),tE=new Set(["dark","redux-dark","redux-dark-color","neo-dark"]),tT=new Set(["redux","redux-dark","redux-color","redux-dark-color","neo","neo-dark"]),tC=(0,c.K)(t=>{let{svgId:e}=t,r="";if(t.useGradient&&e)for(let o=0;o<t.THEME_COLOR_LIMIT;o++)r+=`
14
- .label${o} { fill: ${t.mainBkg}; stroke: url(${e}-gradient); stroke-width: ${t.strokeWidth};}
15
- `;return r},"genGitGraphGradient"),tL=(0,c.K)(t=>{let{theme:e,themeVariables:r}=(0,n.zj)(),{borderColorArray:o}=r,a=tk.has(e);if(tw.has(e)){let e="";for(let r=0;r<t.THEME_COLOR_LIMIT;r++)if(0===r)e+=`
16
- .branch-label${r} { fill: ${t.nodeBorder};}
17
- .commit${r} { stroke: ${t.nodeBorder}; }
18
- .commit-highlight${r} { stroke: ${t.nodeBorder}; fill: ${t.nodeBorder}; }
19
- .arrow${r} { stroke: ${t.nodeBorder}; }
20
- .commit-bullets { fill: ${t.nodeBorder}; }
21
- .commit-cherry-pick${r} { stroke: ${t.nodeBorder}; }
22
- ${tC(t)}`;else{let o=r%8;e+=`
23
- .branch-label${r} { fill: ${t["gitBranchLabel"+o]}; }
24
- .commit${r} { stroke: ${t["git"+o]}; fill: ${t["git"+o]}; }
25
- .commit-highlight${r} { stroke: ${t["gitInv"+o]}; fill: ${t["gitInv"+o]}; }
26
- .arrow${r} { stroke: ${t["git"+o]}; }
27
- `}return e}if(tB.has(e)){let r="";for(let i=0;i<t.THEME_COLOR_LIMIT;i++)if(0===i)r+=`
28
- .branch-label${i} { fill: ${t.nodeBorder}; ${a?`font-weight:${t.noteFontWeight}`:""} }
29
- .commit${i} { stroke: ${t.nodeBorder}; }
30
- .commit-highlight${i} { stroke: ${t.nodeBorder}; fill: ${t.mainBkg}; }
31
- .label${i} { fill: ${t.mainBkg}; stroke: ${t.nodeBorder}; stroke-width: ${t.strokeWidth}; ${a?`font-weight:${t.noteFontWeight}`:""} }
32
- .arrow${i} { stroke: ${t.nodeBorder}; }
33
- .commit-bullets { fill: ${t.nodeBorder}; }
34
- `;else{let n=i%o.length;r+=`
35
- .branch-label${i} { fill: ${t.nodeBorder}; ${a?`font-weight:${t.noteFontWeight}`:""} }
36
- .commit${i} { stroke: ${o[n]}; fill: ${o[n]}; }
37
- .commit-highlight${i} { stroke: ${o[n]}; fill: ${o[n]}; }
38
- .label${i} { fill: ${tE.has(e)?t.mainBkg:o[n]}; stroke: ${o[n]}; stroke-width: ${t.strokeWidth}; }
39
- .arrow${i} { stroke: ${o[n]}; }
40
- `}return r}{let e="";for(let r=0;r<t.THEME_COLOR_LIMIT;r++)e+=`
41
- .branch-label${r} { fill: ${t.nodeBorder}; ${a?`font-weight:${t.noteFontWeight}`:""} }
42
- .commit${r} { stroke: ${t.nodeBorder}; }
43
- .commit-highlight${r} { stroke: ${t.nodeBorder}; fill: ${t.nodeBorder}; }
44
- .label${r} { fill: ${t.mainBkg}; stroke: ${t.nodeBorder}; stroke-width: ${t.strokeWidth}; ${a?`font-weight:${t.noteFontWeight}`:""}}
45
- .arrow${r} { stroke: ${t.nodeBorder}; }
46
- .commit-bullets { fill: ${t.nodeBorder}; }
47
- .commit-cherry-pick${r} { stroke: ${t.nodeBorder}; }
48
- `;return e}},"genColor"),tK=(0,c.K)(t=>`${Array.from({length:t.THEME_COLOR_LIMIT},(t,e)=>e).map(e=>{let r=e%8;return`
49
- .branch-label${e} { fill: ${t["gitBranchLabel"+r]}; }
50
- .commit${e} { stroke: ${t["git"+r]}; fill: ${t["git"+r]}; }
51
- .commit-highlight${e} { stroke: ${t["gitInv"+r]}; fill: ${t["gitInv"+r]}; }
52
- .label${e} { fill: ${t["git"+r]}; }
53
- .arrow${e} { stroke: ${t["git"+r]}; }
54
- `}).join("\n")}`,"normalTheme"),tM={parser:q,db:P,renderer:{draw:tb},styles:(0,c.K)(t=>{let{theme:e}=(0,n.zj)(),r=tT.has(e);return`
55
- .commit-id,
56
- .commit-msg,
57
- .branch-label {
58
- fill: lightgrey;
59
- color: lightgrey;
60
- font-family: 'trebuchet ms', verdana, arial, sans-serif;
61
- font-family: var(--mermaid-font-family);
62
- }
63
-
64
- ${r?tL(t):tK(t)}
65
-
66
- .branch {
67
- stroke-width: ${t.strokeWidth};
68
- stroke: ${t.commitLineColor??t.lineColor};
69
- stroke-dasharray: ${r?"4 2":"2"};
70
- }
71
- .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${r?t.nodeBorder:t.commitLabelColor}; ${r?`font-weight:${t.noteFontWeight};`:""}}
72
- .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${r?"transparent":t.commitLabelBackground}; opacity: ${r?"":.5}; }
73
- .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};}
74
- .tag-label-bkg { fill: ${r?t.mainBkg:t.tagLabelBackground}; stroke: ${r?t.nodeBorder:t.tagLabelBorder}; ${r?`filter:${t.dropShadow}`:""} }
75
- .tag-hole { fill: ${t.textColor}; }
76
-
77
- .commit-merge {
78
- stroke: ${r?t.mainBkg:t.primaryColor};
79
- fill: ${r?t.mainBkg:t.primaryColor};
80
- }
81
- .commit-reverse {
82
- stroke: ${r?t.mainBkg:t.primaryColor};
83
- fill: ${r?t.mainBkg:t.primaryColor};
84
- stroke-width: ${r?t.strokeWidth:3};
85
- }
86
- .commit-highlight-outer {
87
- }
88
- .commit-highlight-inner {
89
- stroke: ${r?t.mainBkg:t.primaryColor};
90
- fill: ${r?t.mainBkg:t.primaryColor};
91
- }
92
-
93
- .arrow {
94
- /* Intentional: neo themes keep the bold 8px arrow (like classic themes); only redux-geometry themes use the thinner options.strokeWidth. */
95
- stroke-width: ${tk.has(e)?t.strokeWidth:8};
96
- stroke-linecap: round;
97
- fill: none
98
- }
99
- .gitTitleText {
100
- text-anchor: middle;
101
- font-size: 18px;
102
- fill: ${t.textColor};
103
- }
104
- `},"getStyles")};r.d(e,{diagram:()=>tM})}}]);
@@ -1,28 +0,0 @@
1
- /*! LICENSE: m.eb2e6752e2.js.LICENSE.txt */
2
- "use strict";(self.rspackChunkompchamber=self.rspackChunkompchamber||[]).push([["m"],{ABt(e,t,n){n.d(t,{GitPanel:()=>ea});var s=n("j"),r=n("H"),a=n("X"),i=n("E6"),o=n("DB"),l=n("t"),c=n("hw"),d=n("Wb0"),h=n("S"),p=n("t3");function m(e){let{isGraphMode:t,onToggleMode:n,searchQuery:r,onSearchChange:a,onRefresh:i,onClose:l,isRefreshing:m,totalCommits:u,totalCount:f}=e;return(0,s.FD)("div",{className:"flex flex-col gap-2 px-3 lg:px-5 py-3 border-b border-ink/10 bg-paper select-none\n pl-[max(0.75rem,env(safe-area-inset-left,0px))] pr-[max(0.75rem,env(safe-area-inset-right,0px))]",children:[(0,s.FD)("div",{className:"flex items-center justify-between gap-2 lg:gap-4",children:[(0,s.FD)("div",{className:"flex flex-col min-w-0",children:[(0,s.FD)("div",{className:"flex items-center gap-2.5 min-w-0",children:[(0,s.Y)("h2",{className:"text-base font-semibold text-ink tracking-tight",children:t?"Graph":"History"}),(0,s.Y)("span",{className:"text-[11px] font-mono px-2 py-0.5 rounded-full bg-ink/5 text-ink/50 border border-ink/10 whitespace-nowrap",children:f&&f>u?`${u} of ${f}`:`${u} commits`})]}),(0,s.Y)("p",{className:"text-xs text-ink/50 mt-0.5 hidden lg:block",children:"Browse recent commits and inspect changed files."})]}),(0,s.FD)("div",{className:"flex items-center gap-1.5 lg:gap-2 flex-shrink-0",children:[(0,s.FD)("div",{className:"flex items-center bg-ink/5 p-0.5 rounded-lg border border-ink/10 text-xs",children:[(0,s.FD)("button",{type:"button",onClick:()=>n(!1),title:"History view",className:`flex items-center gap-1.5 px-2.5 py-1 rounded-md font-medium transition-colors cursor-pointer ${!t?"bg-paper text-ink shadow-xs":"text-ink/60 hover:text-ink hover:bg-ink/5"}`,children:[(0,s.Y)(c.A,{size:13}),(0,s.Y)("span",{className:"hidden lg:inline",children:"History"})]}),(0,s.FD)("button",{type:"button",onClick:()=>n(!0),title:"Graph view",className:`flex items-center gap-1.5 px-2.5 py-1 rounded-md font-medium transition-colors cursor-pointer ${t?"bg-paper text-ink shadow-xs":"text-ink/60 hover:text-ink hover:bg-ink/5"}`,children:[(0,s.Y)(o.A,{size:13}),(0,s.Y)("span",{className:"hidden lg:inline",children:"Graph"})]})]}),(0,s.FD)("button",{type:"button",onClick:i,disabled:m,className:"flex items-center gap-1.5 px-2.5 py-1.5 rounded-md border border-ink/15 hover:bg-ink/5 text-ink/70 hover:text-ink transition-colors cursor-pointer text-xs disabled:opacity-40",title:"Refresh commit history",children:[(0,s.Y)(d.A,{size:13,className:m?"animate-spin text-ink":""}),(0,s.Y)("span",{className:"hidden lg:inline",children:"refresh"})]}),(0,s.Y)("button",{type:"button",onClick:l,className:"p-2 -mr-1 rounded-md hover:bg-ink/5 text-ink/60 hover:text-ink transition-colors cursor-pointer",title:"Close modal",children:(0,s.Y)(h.A,{size:16})})]})]}),(0,s.FD)("div",{className:"relative mt-1",children:[(0,s.Y)(p.A,{size:13,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-ink/40"}),(0,s.Y)("input",{type:"text",value:r,onChange:e=>a(e.currentTarget.value),placeholder:"Filter commits by message, author, or hash...",className:"w-full bg-ink/[0.03] border border-ink/15 rounded-md pl-8 pr-3 py-1.5 text-xs text-ink placeholder-ink/40 focus:outline-none focus:border-ink/40 transition-colors font-mono"}),r&&(0,s.Y)("button",{type:"button",onClick:()=>a(""),className:"absolute right-2.5 top-1/2 -translate-y-1/2 text-ink/40 hover:text-ink cursor-pointer",children:(0,s.Y)(h.A,{size:12})})]})]})}let u=["#38bdf8","#f97316","#a855f7","#10b981","#ec4899","#eab308","#06b6d4","#6366f1"];function f(e,t){if(!e||!t)return!1;if(e===t)return!0;let n=Math.min(e.length,t.length);return n>=4&&e.substring(0,n)===t.substring(0,n)}function x(e){let t=new Map,n=[];for(let s of e){if("number"==typeof s.lane){t.set(s.hash,s.lane);continue}let e=n.findIndex(e=>f(e,s.hash)||f(e,s.shortHash));-1===e&&(-1===(e=n.indexOf(null))?(e=n.length,n.push(s.hash)):n[e]=s.hash),t.set(s.hash,e);let r=s.parents&&s.parents[0];if(r?n[e]=r:n[e]=null,s.parents&&s.parents.length>1)for(let e=1;e<s.parents.length;e++){let t=s.parents[e];if(!n.some(e=>f(e,t))){let e=n.indexOf(null);-1===e?n.push(t):n[e]=t}}}return t}function b(e){let{commits:t,nodePositions:n,selectedHash:a,hoveredHash:i,isGraphMode:o,laneWidth:l=18,paddingLeft:c=16,totalHeight:d}=e,h=(0,r.Kr)(()=>{if(!o){let e=new Map;return t.forEach(t=>e.set(t.hash,0)),e}return x(t)},[t,o]),p=(0,r.Kr)(()=>{let e=0;return h.forEach(t=>{t>e&&(e=t)}),e},[h]),m=o?(p+1)*l+2*c:36,f=(0,r.Kr)(()=>{if(!o){let e=[];for(let s=0;s<t.length-1;s++){let r=n[t[s].hash]??60*s+20,a=n[t[s+1].hash]??(s+1)*60+20;e.push({fromHash:t[s].hash,toHash:t[s+1].hash,fromLane:0,toLane:0,fromY:r,toY:a,color:"var(--theme-ink)"})}return e}return function(e,t,n,s){let r=[],a=new Map;for(let i of(e.forEach((e,t)=>{a.set(e.hash,t),e.shortHash&&a.set(e.shortHash,t),e.hash.length>=7&&a.set(e.hash.substring(0,7),t)}),e)){let o=t.get(i.hash)??0,l=n[i.hash]??0,c=u[o%u.length];if(i.parents&&0!==i.parents.length)for(let d of i.parents){let h=a.get(d);if("number"!=typeof h&&d.length>=7&&(h=a.get(d.substring(0,7))),"number"==typeof h){let s=e[h],a=t.get(s.hash)??o,c=n[s.hash]??l+60;r.push({fromHash:i.hash,toHash:s.hash,fromLane:o,toLane:a,fromY:l,toY:c,color:u[o%u.length]})}else r.push({fromHash:i.hash,toHash:"tail-"+i.hash,fromLane:o,toLane:o,fromY:l,toY:Math.max(l+80,s),color:c})}}return r}(t,h,n,d)},[t,h,n,d,o]);return(0,s.Y)("div",{className:"absolute top-0 left-0 pointer-events-none z-10",style:{width:m,height:d},children:(0,s.FD)("svg",{className:"w-full h-full overflow-visible",style:{width:m,height:d},children:[(0,s.Y)("defs",{children:(0,s.Y)("filter",{id:"node-glow",x:"-20%",y:"-20%",width:"140%",height:"140%",children:(0,s.Y)("feDropShadow",{dx:"0",dy:"0",stdDeviation:"2",floodOpacity:"0.35"})})}),f.map(e=>{let t=o?c+e.fromLane*l:16,n=o?c+e.toLane*l:16,r=o?e.color:"currentColor",a=o?.95:.25,i=function(e,t,n,s){if(1>Math.abs(e-n))return`M ${e} ${t} L ${n} ${s}`;let r=s-t;return`M ${e} ${t} C ${e} ${t+.45*r}, ${n} ${s-.45*r}, ${n} ${s}`}(t,e.fromY,n,e.toY);return(0,s.Y)("path",{d:i,fill:"none",stroke:r,strokeWidth:o?2.25:1.5,strokeLinecap:"round",strokeLinejoin:"round",strokeOpacity:a},`${e.fromHash}->${e.toHash}`)}),t.map(e=>{let t=h.get(e.hash)??0,r=o?c+t*l:16,d=n[e.hash]??20,p=a===e.hash||a===e.shortHash,m=i===e.hash||i===e.shortHash,f=o?u[t%u.length]:"var(--theme-success)";return(0,s.FD)("g",{children:[(p||m)&&(0,s.Y)("circle",{cx:r,cy:d,r:8,fill:f,fillOpacity:p?.35:.2,stroke:f,strokeWidth:1}),(0,s.Y)("circle",{cx:r,cy:d,r:o?4:4.5,fill:o?"var(--theme-paper)":f,stroke:f,strokeWidth:o?2.5:1.5,filter:"url(#node-glow)"}),o&&(0,s.Y)("circle",{cx:r,cy:d,r:1.8,fill:f})]},`node-${e.hash}`)})]})})}var g=n("z"),k=n("b0"),y=n("Go"),v=n("Nf");function w(e){let{commit:t,onAction:n,isBusy:r}=e;return(0,s.FD)("div",{className:"flex flex-wrap items-center gap-1.5 pt-1.5 pb-2",children:[(0,s.Y)("button",{type:"button",disabled:r,onClick:e=>{e.stopPropagation(),n("checkout",t)},className:"px-2.5 py-1 text-[11px] font-mono rounded border border-ink/20 hover:bg-ink/5 text-ink/80 hover:text-ink transition-colors cursor-pointer disabled:opacity-40",children:"checkout"}),(0,s.Y)("button",{type:"button",disabled:r,onClick:e=>{e.stopPropagation(),n("create_branch_here",t)},className:"px-2.5 py-1 text-[11px] font-mono rounded border border-ink/20 hover:bg-ink/5 text-ink/80 hover:text-ink transition-colors cursor-pointer disabled:opacity-40",children:"create branch here"}),(0,s.Y)("button",{type:"button",disabled:r,onClick:e=>{e.stopPropagation(),n("cherry_pick",t)},className:"px-2.5 py-1 text-[11px] font-mono rounded border border-ink/20 hover:bg-ink/5 text-ink/80 hover:text-ink transition-colors cursor-pointer disabled:opacity-40",children:"cherry-pick"}),(0,s.Y)("button",{type:"button",disabled:r,onClick:e=>{e.stopPropagation(),n("revert",t)},className:"px-2.5 py-1 text-[11px] font-mono rounded border border-ink/20 hover:bg-ink/5 text-ink/80 hover:text-ink transition-colors cursor-pointer disabled:opacity-40",children:"revert"}),(0,s.Y)("button",{type:"button",disabled:r,onClick:e=>{e.stopPropagation(),n("reset",t)},className:"px-2.5 py-1 text-[11px] font-mono rounded border border-ink/20 hover:bg-ink/5 text-ink/80 hover:text-ink transition-colors cursor-pointer disabled:opacity-40",children:"reset..."}),(0,s.Y)("button",{type:"button",disabled:r,onClick:e=>{e.stopPropagation(),n("merge",t)},className:"px-2.5 py-1 text-[11px] font-mono rounded border border-ink/20 hover:bg-ink/5 text-ink/80 hover:text-ink transition-colors cursor-pointer disabled:opacity-40",children:"merge into current"}),(0,s.Y)("button",{type:"button",disabled:r,onClick:e=>{e.stopPropagation(),n("rebase",t)},className:"px-2.5 py-1 text-[11px] font-mono rounded border border-ink/20 hover:bg-ink/5 text-ink/80 hover:text-ink transition-colors cursor-pointer disabled:opacity-40",children:"rebase onto this"})]})}var N=n("Wb"),Y=n("DU"),C=n("Po");function A(e){let{diffText:t,isLoading:n,filePath:a}=e,[i,o]=(0,r.J0)(!1),l=(0,C.w)(),c=(0,r.Kr)(()=>{if(!t)return[];let e=[],n=1,s=1,r=t.split(/\r?\n/);for(let t of r.some(e=>e.startsWith("@@"))?r:[`@@ -0,0 +1,${r.length} @@`,...r.map(e=>e.startsWith("+")||e.startsWith("-")?e:`+${e}`)])if(!(t.startsWith("diff --git")||t.startsWith("index ")||t.startsWith("---")||t.startsWith("+++")||t.startsWith("new file mode")||t.startsWith("deleted file mode")||t.startsWith("similarity index")||t.startsWith("old mode")||t.startsWith("new mode")||t.startsWith("\\ No newline")))if(t.startsWith("@@")){let r=t.match(/@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/);r&&(n=parseInt(r[1],10),s=parseInt(r[2],10)),e.push({type:"meta",text:t})}else if(t.startsWith("+"))e.push({type:"add",text:t.slice(1),newNum:s++});else if(t.startsWith("-"))e.push({type:"del",text:t.slice(1),oldNum:n++});else{let r=t.startsWith(" ")?t.slice(1):t;e.push({type:"context",text:r,oldNum:n++,newNum:s++})}return e},[t]),d=(0,Y.sQ)(a),h=(0,r.Kr)(()=>{let e=Array(c.length).fill(""),t=-1,n=n=>{if(t<0)return;let s=(0,Y.O9)(c.slice(t,n).map(e=>e.text).join("\n"),d);for(let r=t;r<n;r++)e[r]=s[r-t]??"";t=-1};return c.forEach((e,s)=>{"meta"===e.type?n(s):t<0&&(t=s)}),n(c.length),e},[c,d,l]);return n?(0,s.Y)("div",{className:"my-2 p-4 rounded bg-canvas border border-ink/10 text-ink/40 font-mono text-xs flex items-center justify-center",children:"Loading commit diff..."}):t&&0!==c.length?(0,s.FD)("div",{className:"my-2 rounded border border-ink/15 bg-paper overflow-hidden text-[11px] font-mono leading-relaxed shadow-xs text-ink",children:[(0,s.FD)("div",{className:"flex items-center justify-between px-3 py-1.5 bg-canvas border-b border-ink/10 text-ink/70 text-[10.5px]",children:[(0,s.Y)("span",{className:"font-semibold text-meta",children:"Diff preview"}),(0,s.Y)("button",{type:"button",onClick:()=>o(!i),className:"hover:text-ink flex items-center gap-1 cursor-pointer transition-colors",children:i?(0,s.FD)(s.FK,{children:[(0,s.Y)(N.A,{size:12})," Collapse context"]}):(0,s.FD)(s.FK,{children:[(0,s.Y)(y.A,{size:12})," Expand all context"]})})]}),(0,s.Y)("div",{className:"overflow-x-auto max-h-72 select-text",children:(0,s.Y)("div",{className:"w-max min-w-full divide-y divide-ink/[0.04]",children:c.map((e,t)=>{if("meta"===e.type)return(0,s.FD)("div",{className:"flex items-center gap-2 px-3 py-1 bg-canvas border-y border-ink/10 text-meta text-[10px] font-semibold",children:[(0,s.Y)("span",{children:"↕"}),(0,s.Y)("span",{children:e.text})]},t);let n="add"===e.type,r="del"===e.type;return(0,s.FD)("div",{className:`flex items-start font-mono ${n?"bg-success/10 hover:bg-success/15":r?"bg-error/10 hover:bg-error/15":"text-ink hover:bg-ink/[0.02]"}`,children:[(0,s.Y)("div",{className:`w-10 flex-shrink-0 text-right pr-2 py-0.5 select-none border-r border-ink/10 text-[10px] tabular-nums font-mono ${r?"bg-error/15 text-error font-semibold":n?"bg-success/15 text-success/70":"bg-canvas/50 text-ink/40"}`,children:e.oldNum??(n?"+":"")}),(0,s.Y)("div",{className:`w-10 flex-shrink-0 text-right pr-2 py-0.5 select-none border-r border-ink/10 text-[10px] tabular-nums font-mono ${n?"bg-success/15 text-success font-semibold":r?"bg-error/15 text-error/70":"bg-canvas/50 text-ink/40"}`,children:e.newNum??(r?"-":"")}),(0,s.Y)("div",{className:`w-4 flex-shrink-0 text-center py-0.5 select-none font-bold ${n?"text-success":r?"text-error":"opacity-0"}`,children:n?"+":r?"-":" "}),(0,s.Y)("div",{className:"flex-1 py-0.5 pr-3 whitespace-pre text-ink",children:e.text?(0,s.Y)("span",{className:"shiki",dangerouslySetInnerHTML:{__html:h[t]}}):" "})]},t)})})})]}):(0,s.Y)("div",{className:"my-2 p-3 rounded bg-canvas border border-ink/10 text-ink/40 font-mono text-xs text-center",children:"No diff content available for this file."})}function F(e){let{commit:t,isSelected:n,isGraphMode:a,onSelect:i,onAction:o,onToggleFile:l,isExpandedFile:c,isLoadingFile:d,fileDiffs:h,headerRef:p}=e,[m,u]=(0,r.J0)(!1);return(0,s.Y)("div",{onClick:()=>i(t),className:`border-b border-ink/5 transition-colors cursor-pointer ${n?"bg-ink/[0.03]":"hover:bg-ink/[0.015]"}`,children:(0,s.FD)("div",{className:"py-2.5 pr-4 pl-1 flex flex-col",children:[(0,s.FD)("div",{className:"flex flex-col gap-1",children:[t.refs&&t.refs.length>0&&(0,s.Y)("div",{className:"flex flex-wrap items-center gap-1.5 pb-0.5",children:t.refs.map((e,t)=>{let n=e.includes("stash"),r=e.includes("HEAD")||e.includes("main")||e.includes("master");return(0,s.Y)("span",{className:`px-2 py-0.5 rounded text-[10px] font-mono border ${n?"bg-warning/10 text-warning border-warning/25 font-semibold":r?"bg-ink/10 text-ink font-semibold border-ink/20":"bg-canvas text-meta border-ink/10 font-medium"}`,children:e},t)})}),(0,s.Y)("div",{ref:p,className:"text-[13px] font-semibold text-ink leading-snug break-words",children:t.message}),(0,s.FD)("div",{className:"flex items-center gap-2 text-[11px] text-ink/50 font-mono flex-wrap",children:[(0,s.Y)("span",{children:t.author}),(0,s.Y)("span",{children:"•"}),(0,s.Y)("span",{children:t.date}),(0,s.Y)("span",{children:"•"}),(0,s.FD)("button",{type:"button",onClick:e=>{e.stopPropagation(),navigator.clipboard.writeText(t.hash),u(!0),setTimeout(()=>u(!1),2e3)},title:"Copy commit hash",className:"inline-flex items-center gap-1 hover:text-ink transition-colors cursor-pointer text-ink/70",children:[(0,s.Y)("span",{children:t.shortHash}),m?(0,s.Y)(g.A,{size:11,className:"text-success"}):(0,s.Y)(k.A,{size:11})]})]})]}),(n||a)&&(0,s.Y)("div",{className:"mt-2",children:(0,s.Y)(w,{commit:t,onAction:o})}),t.files&&t.files.length>0&&(0,s.Y)("div",{className:"mt-2 flex flex-col gap-1",children:t.files.map((e,n)=>{let r=c(t.hash,e.file),a=`${t.hash}:${e.file}`,i=void 0!==h[a]?h[a]:e.diff,o=d(t.hash,e.file),p="A"===e.status?"text-success font-bold":"D"===e.status?"text-error font-bold":"R"===e.status?"text-meta font-bold":"text-info font-bold";return(0,s.FD)("div",{className:"flex flex-col",children:[(0,s.FD)("div",{onClick:n=>{n.stopPropagation(),l(t.hash,e)},className:"flex items-center gap-2 py-1 px-2 rounded hover:bg-ink/5 text-[11.5px] font-mono text-ink/80 transition-colors group cursor-pointer border border-transparent hover:border-ink/10",children:[(0,s.Y)("span",{className:`w-3.5 text-center flex-shrink-0 text-[11px] ${p}`,children:e.status||"M"}),(0,s.Y)("span",{className:"truncate flex-1 min-w-0 text-ink/90 group-hover:text-ink font-medium",children:e.file}),(0,s.FD)("span",{className:"flex items-center gap-1 text-[10.5px] tabular-nums flex-shrink-0 font-medium",children:[(0,s.FD)("span",{className:"text-success",children:["+",e.additions]}),(0,s.Y)("span",{className:"text-ink/30",children:"/"}),(0,s.FD)("span",{className:"text-error",children:["-",e.deletions]})]}),(0,s.Y)("span",{className:"text-ink/40 group-hover:text-ink flex-shrink-0",children:r?(0,s.Y)(y.A,{size:13}):(0,s.Y)(v.A,{size:13})})]}),r&&(0,s.Y)("div",{className:"pl-4 pr-1",children:(0,s.Y)(A,{diffText:i,isLoading:o,filePath:e.file})})]},n)})})]})})}let D=[{hash:"8f8ca583e7162b190f898394e1e3ad81472a1290",shortHash:"8f8ca583",author:"Wijarnako Putra Rajeb",date:"Sep 10, 2026, 12:40 PM",message:"feat(chat): persist composer draft and attachments per session",parents:["6d3bac50"],refs:["HEAD -> main","origin/main"],lane:0,files:[{file:"app/hooks/chat/timeline/index.ts",status:"M",additions:3,deletions:2,diff:`@@ -7,6 +7,7 @@
3
- import { useChatTimelineActions } from '@/client/hooks/chat/timeline/actions';
4
- import { useChatTimelineSend } from '@/client/hooks/chat/timeline/send';
5
- import { normalizeNoticePositions } from '@/shared/lib/chat/order';
6
- import { createOmpAgentCallbacks } from '@/shared/lib/chat/timeline/omp-callbacks';
7
- +import { useSessionState } from '@/client/hooks/workspace/session-state';
8
-
9
- interface UseChatTimelineOptions {
10
- folders?: any[];
11
- appSettings?: Record<string, any>;
12
- @@ -38,6 +39,7 @@
13
- }, [setSearchParams]);
14
-
15
- const { scrollRef, showScrollBottom, isScrolling, handleScroll, scrollToBottom } = useChatTimelineScroll();
16
-
17
- - const [inputValue, setInputValue] = useState('');
18
- - const [inputAttachments, setInputAttachments] = useState<Attachment[]>([]);
19
- + const { draft, setDraft, attachments, setAttachments } = useSessionState(sessionId);
20
- + const [inputValue, setInputValue] = useState(draft);`},{file:"app/components/workspace/SearchPanel.tsx",status:"M",additions:11,deletions:10},{file:"app/components/workspace/context-panel/RawMessagesList.tsx",status:"M",additions:4,deletions:3},{file:"app/components/workspace/git-panel/ChangesList.tsx",status:"M",additions:3,deletions:3},{file:"app/components/workspace/git-panel/RepoHeader.tsx",status:"M",additions:3,deletions:2},{file:"app/components/workspace/git-panel/index.tsx",status:"M",additions:3,deletions:2},{file:"app/hooks/workspace/git-tree.ts",status:"M",additions:22,deletions:16}]},{hash:"6d3bac504561a0e5b7218679124a91cfb23190ab",shortHash:"6d3bac50",author:"Wijarnako Putra Rajeb",date:"Sep 10, 2026, 12:40 PM",message:"feat(panels): persist git, search, and context panel state per session",parents:["ce7e5189"],lane:0,files:[{file:"app/components/workspace/SearchPanel.tsx",status:"M",additions:11,deletions:10},{file:"app/components/workspace/context-panel/RawMessagesList.tsx",status:"M",additions:4,deletions:3},{file:"app/components/workspace/git-panel/ChangesList.tsx",status:"M",additions:3,deletions:3},{file:"app/components/workspace/git-panel/RepoHeader.tsx",status:"M",additions:3,deletions:2},{file:"app/components/workspace/git-panel/index.tsx",status:"M",additions:3,deletions:2},{file:"app/hooks/workspace/git-tree.ts",status:"M",additions:22,deletions:16}]},{hash:"ce7e5189001b2a3c4d5e6f7a8b9c0d1e2f3a4b5c",shortHash:"ce7e5189",author:"Wijarnako Putra Rajeb",date:"Sep 10, 2026, 12:40 PM",message:"feat(panels): persist editor, file-explorer, browser, and terminal state per session",parents:["c087fa59"],lane:0,files:[{file:"app/components/workspace/editor/index.tsx",status:"M",additions:8,deletions:4},{file:"app/components/workspace/terminal-panel/index.tsx",status:"M",additions:12,deletions:5}]},{hash:"c087fa59123456789abcdef0123456789abcdef0",shortHash:"c087fa59",author:"Wijarnako Putra Rajeb",date:"Sep 10, 2026, 12:39 PM",message:"feat(layout): persist active right panel and opened files per session",parents:["221aa007"],lane:0,files:[{file:"app/components/layout/RightActivityBar.tsx",status:"M",additions:5,deletions:2},{file:"app/components/layout/desktop-layout/index.tsx",status:"M",additions:7,deletions:3}]},{hash:"221aa007abcdef0123456789abcdef0123456789",shortHash:"221aa007",author:"Wijarnako Putra Rajeb",date:"Sep 10, 2026, 12:39 PM",message:"feat(terminal): add per-session terminal output snapshot helpers",parents:["faf45f6f"],lane:0,files:[{file:"app/hooks/workspace/terminal-output.ts",status:"A",additions:45,deletions:0}]},{hash:"faf45f6f11223344556677889900aabbccddeeff",shortHash:"faf45f6f",author:"Wijarnako Putra Rajeb",date:"Sep 10, 2026, 12:39 PM",message:"feat(workspace): add per-session ui state persistence core",parents:["190196bd"],lane:0,files:[{file:"app/lib/workspace/session-state/store.ts",status:"M",additions:30,deletions:12}]},{hash:"190196bd99887766554433221100ffeeddccbbaa",shortHash:"190196bd",author:"Wijarnako Putra Rajeb",date:"Sep 10, 2026, 11:03 AM",message:"refactor(omp): unify live and reload message parsing behind shared core parser",parents:["c6944825"],lane:0,files:[{file:"app/lib/omp/session/parse-message-blocks.ts",status:"M",additions:18,deletions:24}]},{hash:"c694482500aabbccddee11223344556677889900",shortHash:"c6944825",author:"Wijarnako Putra Rajeb",date:"Sep 10, 2026, 10:55 AM",message:"fix(ui): use real session model in mobile view and drop fake fallbacks",parents:["aef783a5"],lane:0,files:[{file:"app/components/mobile/ScreenSwitcher.tsx",status:"M",additions:6,deletions:9}]},{hash:"aef783a512312312312312312312312312312312",shortHash:"aef783a5",author:"Wijarnako Putra Rajeb",date:"Sep 10, 2026, 10:54 AM",message:"fix(agent): fall back to persisted model selection on new-session spawn",parents:["3537f24b"],lane:0,files:[{file:"app/lib/omp/rpc/manager.ts",status:"M",additions:4,deletions:2}]},{hash:"3537f24b45645645645645645645645645645645",shortHash:"3537f24b",author:"Wijarnako Putra Rajeb",date:"Sep 10, 2026, 10:54 AM",message:"fix(omp): lift tool intent to message level in live mapper",parents:["e39af6e8"],lane:0,files:[{file:"app/lib/omp/session/mapper.ts",status:"M",additions:14,deletions:8}]},{hash:"e39af6e878978978978978978978978978978978",shortHash:"e39af6e8",author:"Wijarnako Putra Rajeb",date:"Sep 1, 2026, 07:00 PM",message:"refactor(ui): route inline alert/error banners through toast notifications",parents:["131681d9"],lane:0,files:[{file:"src/App.tsx",status:"M",additions:4,deletions:1},{file:"src/components/Header.tsx",status:"M",additions:3,deletions:0},{file:"src/components/LoginModalView.tsx",status:"M",additions:5,deletions:11},{file:"src/components/crd/CrdForm.tsx",status:"M",additions:5,deletions:17},{file:"src/components/sync/SyncLogsView.tsx",status:"M",additions:7,deletions:16},{file:"src/components/ui/ApiConfigModal.tsx",status:"M",additions:15,deletions:36}]},{hash:"131681d9aaaabbbbccccddddeeeeffff00001111",shortHash:"131681d9",author:"Wijarnako Putra Rajeb",date:"Sep 1, 2026, 03:46 PM",message:"fix(docker): persist sqlite data with named volume",parents:["008cbe07"],lane:0,files:[{file:".dockerignore",status:"M",additions:1,deletions:0,diff:`@@ -1,7 +1,8 @@
21
- node_modules
22
- dist
23
- +data
24
- .env
25
- .env.*
26
- !.env.example
27
- .git
28
- 2 unmodified lines`},{file:"docker-compose.yml",status:"M",additions:5,deletions:0}]},{hash:"008cbe0711112222333344445555666677778888",shortHash:"008cbe07",author:"Wijarnako Putra Rajeb",date:"Sep 1, 2026, 01:25 PM",message:"feat(logging): structured timestamped logging across all web flows, bridged to docker logs",parents:["81ad44d5","b3b71ed5"],refs:["origin/feat/whatsapp-notification","feat/whatsapp-notification"],lane:0,files:[{file:"server.ts",status:"M",additions:19,deletions:3}]},{hash:"81ad44d522223333444455556666777788889999",shortHash:"81ad44d5",author:"Wijarnako Putra Rajeb",date:"Sep 1, 2026, 01:07 PM",message:"WIP on main: b3b71ed fix(pbpmd): history modal reads live BOFIS API instead of sqlite cache",parents:["9616fad9"],refs:["refs/stash"],lane:1,files:[{file:"app/routes/api/pb-pmd/$id.history.ts",status:"M",additions:22,deletions:6}]},{hash:"9616fad933334444555566667777888899990000",shortHash:"9616fad9",author:"Wijarnako Putra Rajeb",date:"Sep 1, 2026, 01:07 PM",message:"index on main: b3b71ed fix(pbpmd): history modal reads live BOFIS API instead of sqlite cache",parents:["b3b71ed5"],lane:1,files:[{file:"app/routes/api/pb-pmd/$id.history.ts",status:"M",additions:15,deletions:4}]},{hash:"b3b71ed544445555666677778888999900001111",shortHash:"b3b71ed5",author:"Wijarnako Putra Rajeb",date:"Sep 1, 2026, 12:55 PM",message:"fix(pbpmd): history modal reads live BOFIS API instead of sqlite cache",parents:["4dc73776"],lane:0,files:[{file:"app/routes/api/pb-pmd/$id.history.ts",status:"M",additions:8,deletions:12}]},{hash:"4dc7377655556666777788889999000011112222",shortHash:"4dc73776",author:"Wijarnako Putra Rajeb",date:"Sep 1, 2026, 12:50 PM",message:"feat(ui): 13th KPI card TOTAL MANDAYS + gapless 6-col dashboard grid",parents:["acab6465"],lane:0,files:[{file:"app/components/dashboard/KPIGrid.tsx",status:"M",additions:35,deletions:7}]},{hash:"acab646566667777888899990000111122223333",shortHash:"acab6465",author:"Wijarnako Putra Rajeb",date:"Sep 1, 2026, 12:45 PM",message:"feat(pbpmd): history modal table layout, wider modal, drop edit scenario action",parents:["86a6d6c5"],lane:0,files:[{file:"app/components/pbpmd/HistoryModal.tsx",status:"M",additions:24,deletions:18}]},{hash:"86a6d6c577778888999900001111222233334444",shortHash:"86a6d6c5",author:"Wijarnako Putra Rajeb",date:"Sep 1, 2026, 12:45 PM",message:"feat(pbpmd): pb history modal reads sqlite cache via /api/pb-pmd/:id/history",parents:["9ffea446"],lane:0,files:[{file:"app/routes/api/pb-pmd/$id.history.ts",status:"M",additions:42,deletions:5}]},{hash:"9ffea44688889999000011112222333344445555",shortHash:"9ffea446",author:"Wijarnako Putra Rajeb",date:"Sep 1, 2026, 12:45 PM",message:"feat(dashboard): crdApproved threshold shifted 5 minutes from history date_end",parents:[],lane:0,files:[{file:"app/lib/dashboard/calculator.ts",status:"M",additions:12,deletions:2}]}];function M(e){let{output:t,onClose:n,onRefresh:a,onExecuteAction:i,rootPath:o,activeRepo:c}=e;if(!t)return null;let d=t.title.toLowerCase().includes("graph"),[h,p]=(0,r.J0)(d),[u,f]=(0,r.J0)(""),[g,k]=(0,r.J0)(""),[y,v]=(0,r.J0)(!1),{commits:w,hasMore:N,totalCount:Y,isLoadingMore:C,handleLoadMore:A}=function(e){let{output:t,isGraphMode:n,rootPath:s,activeRepo:a}=e,[i,o]=(0,r.J0)(!1),[l,c]=(0,r.J0)(t?.hasMore??t?.data?.length===50),[d,h]=(0,r.J0)(t?.total),p=(0,r.Kr)(()=>{let e=t?.data||[];return 0===e.length?D:e[0]&&"object"==typeof e[0]&&("hash"in e[0]||"shortHash"in e[0])?e.map(e=>({hash:e.hash||e.shortHash||"unknown",shortHash:e.shortHash||(e.hash?e.hash.slice(0,8):"unknown"),author:e.author||"Unknown",date:e.date||e.time||"",message:e.message||"",parents:Array.isArray(e.parents)?e.parents:[],refs:Array.isArray(e.refs)?e.refs:[],files:Array.isArray(e.files)?e.files:[],lane:"number"==typeof e.lane?e.lane:void 0})):D},[t?.data]),[m,u]=(0,r.J0)(p);(0,r.vJ)(()=>{u(p),c(t?.hasMore??t?.data?.length===50),"number"==typeof t?.total&&h(t.total)},[p,t?.hasMore,t?.data?.length,t?.total]);let f=(0,r.hb)(async()=>{if(!i&&l){o(!0);try{let e=new FormData;e.set("actionType",n?"graph":"history"),e.set("limit","50"),e.set("skip",String(m.length)),s&&e.set("root",s),a&&e.set("repo",a);let t=await fetch("/api/fs/git",{method:"POST",body:e}),r=await t.json();if(r.success&&Array.isArray(r.data)){let e=r.data.map(e=>({hash:e.hash||e.shortHash||"unknown",shortHash:e.shortHash||(e.hash?e.hash.slice(0,8):"unknown"),author:e.author||"Unknown",date:e.date||e.time||"",message:e.message||"",parents:Array.isArray(e.parents)?e.parents:[],refs:Array.isArray(e.refs)?e.refs:[],files:Array.isArray(e.files)?e.files:[],lane:"number"==typeof e.lane?e.lane:void 0}));u(t=>{let n=new Set(t.map(e=>e.hash));return[...t,...e.filter(e=>!n.has(e.hash))]}),c(!!(r.hasMore??50===e.length)),"number"==typeof r.total&&h(r.total)}else c(!1)}catch(e){console.error("Failed to load more commits:",e)}finally{o(!1)}}},[i,l,n,m.length,s,a]);return{commits:m,setCommits:u,hasMore:l,totalCount:d,isLoadingMore:i,handleLoadMore:f}}({output:t,isGraphMode:h,rootPath:o,activeRepo:c}),{fileDiffs:M,expandedFiles:S,loadingFiles:j,handleToggleFile:P,handleCommitAction:z}=function(e){let{onExecuteAction:t,rootPath:n,activeRepo:s}=e,[a,i]=(0,r.J0)({}),[o,l]=(0,r.J0)(new Set),[c,d]=(0,r.J0)(new Set),h=(0,r.hb)(async(e,t)=>{let r=`${e}:${t.file}`,c=o.has(r);if(l(e=>{let t=new Set(e);return t.has(r)?t.delete(r):t.add(r),t}),!c&&void 0===a[r]&&!t.diff){d(e=>new Set(e).add(r));try{let a=new FormData;a.set("actionType","commit_diff"),a.set("hash",e),a.set("file",t.file),n&&a.set("root",n),s&&"."!==s&&a.set("repo",s);let o=await fetch("/api/fs/git",{method:"POST",body:a}),l=await o.json();l&&"string"==typeof l.diff?i(e=>({...e,[r]:l.diff})):l&&l.error&&i(e=>({...e,[r]:`// Error: ${l.error}`}))}catch(e){console.error("Failed to load file diff:",e),i(t=>({...t,[r]:`// Error loading diff: ${e?.message||"Network error"}`}))}finally{d(e=>{let t=new Set(e);return t.delete(r),t})}}},[o,a,n,s]);return{fileDiffs:a,expandedFiles:o,loadingFiles:c,handleToggleFile:h,handleCommitAction:(0,r.hb)((e,n)=>{if(t)if("checkout"===e)t("checkout",void 0,{branch:n.hash});else if("create_branch_here"===e){let e=window.prompt(`Create new branch at commit ${n.shortHash}:`,`branch-${n.shortHash}`);e?.trim()&&t("create_branch",void 0,{branch:e.trim()})}else if("cherry_pick"===e)window.confirm(`Cherry-pick commit ${n.shortHash} onto current branch?`)&&t("cherry_pick",void 0,{hash:n.hash});else if("revert"===e)window.confirm(`Revert commit ${n.shortHash}?`)&&t("revert_commit",void 0,{hash:n.hash});else if("reset"===e){let e=window.prompt(`Reset current branch to ${n.shortHash} (soft, mixed, hard):`,"soft");e&&["soft","mixed","hard"].includes(e.toLowerCase())&&t("reset_commit",void 0,{hash:n.hash,mode:e.toLowerCase()})}else"merge"===e?window.confirm(`Merge commit ${n.shortHash} into current branch?`)&&t("merge_commit",void 0,{hash:n.hash}):"rebase"===e&&window.confirm(`Rebase current branch onto commit ${n.shortHash}?`)&&t("rebase_commit",void 0,{hash:n.hash})},[t])}}({onExecuteAction:i,rootPath:o,activeRepo:c});(0,r.vJ)(()=>{w.length>0&&!g&&k(w[0].hash)},[w,g]);let $=(0,r.Kr)(()=>{if(!u.trim())return w;let e=u.toLowerCase().trim();return w.filter(t=>t.message.toLowerCase().includes(e)||t.author.toLowerCase().includes(e)||t.shortHash.toLowerCase().includes(e)||t.hash.toLowerCase().includes(e)||t.refs?.some(t=>t.toLowerCase().includes(e)))},[w,u]),H=(0,r.li)(null),R=(0,r.li)(null),L=(0,r.li)(null),W=(0,r.li)({}),[J,T]=(0,r.J0)({}),[O,E]=(0,r.J0)(800);(0,r.vJ)(()=>{let e=L.current;if(!e||!N||C||u.trim())return;let t=new IntersectionObserver(e=>{e[0].isIntersecting&&A()},{root:H.current,threshold:.1});return t.observe(e),()=>t.disconnect()},[N,C,u,A]);let K=(0,r.hb)(()=>{if(!H.current||!R.current)return;let e=H.current.getBoundingClientRect(),t=H.current.scrollTop,n={};$.forEach((s,r)=>{let a=W.current[s.hash];if(a){let r=a.getBoundingClientRect();n[s.hash]=r.top+r.height/2-e.top+t}else n[s.hash]=60*r+20}),T(n),E(Math.max(R.current.offsetHeight,H.current.clientHeight,600))},[$]);(0,r.Nf)(()=>{K();let e=requestAnimationFrame(()=>{K()});return()=>cancelAnimationFrame(e)},[K,$,M,S,h]),(0,r.vJ)(()=>{let e=R.current;if(!e)return;let t=new ResizeObserver(()=>{K()});return t.observe(e),()=>t.disconnect()},[K]);let I=(0,r.Kr)(()=>x($),[$]),_=(0,r.Kr)(()=>{let e=0;return I.forEach(t=>{t>e&&(e=t)}),e},[I]),B=h?(_+1)*18+32:36,G=async()=>{v(!0),a&&await a(),setTimeout(()=>v(!1),600)};return(0,s.Y)("div",{className:"fixed inset-0 z-50 bg-canvas/80 backdrop-blur-xs flex items-center justify-center p-0 lg:p-5",onClick:n,role:"dialog","aria-modal":"true",children:(0,s.FD)("div",{className:"bg-paper border-ink/20 shadow-2xl flex flex-col overflow-hidden\n w-full h-full rounded-none border-0\n lg:w-[min(96vw,980px)] lg:h-[88vh] lg:rounded-xl lg:border\n pt-[env(safe-area-inset-top,0px)] lg:pt-0",onClick:e=>e.stopPropagation(),children:[(0,s.Y)(m,{isGraphMode:h,onToggleMode:p,searchQuery:u,onSearchChange:f,onRefresh:G,onClose:n,isRefreshing:y,totalCommits:$.length,totalCount:Y}),(0,s.Y)("div",{ref:H,className:"flex-1 overflow-y-auto scrollbar-overlay-container relative select-text",children:0===$.length?(0,s.Y)("div",{className:"flex flex-col items-center justify-center py-20 text-ink/40 font-mono text-xs",children:"No matching commits found."}):(0,s.FD)("div",{className:"relative min-h-full pb-8",children:[(0,s.Y)(b,{commits:$,nodePositions:J,selectedHash:g,isGraphMode:h,laneWidth:18,paddingLeft:16,totalHeight:O}),(0,s.FD)("div",{ref:R,className:"flex flex-col relative z-20",style:{paddingLeft:`${B}px`},children:[$.map(e=>(0,s.Y)(F,{commit:e,isSelected:g===e.hash,isGraphMode:h,onSelect:e=>k(e.hash),onAction:z,onToggleFile:P,isExpandedFile:(e,t)=>S.has(`${e}:${t}`),isLoadingFile:(e,t)=>j.has(`${e}:${t}`),fileDiffs:M,headerRef:t=>{W.current[e.hash]=t}},e.hash)),(0,s.Y)("div",{ref:L,className:"pt-3 pb-4 px-4 flex items-center justify-center",children:C?(0,s.FD)("div",{className:"flex items-center gap-2 text-xs text-ink/60 font-mono py-2",children:[(0,s.Y)(l.A,{size:14,className:"animate-spin text-info"}),(0,s.Y)("span",{children:"Loading more commits..."})]}):N&&!u.trim()?(0,s.Y)("button",{type:"button",onClick:A,className:"px-3 py-1.5 text-xs font-mono text-ink/70 hover:text-ink bg-ink/5 hover:bg-ink/10 rounded-md border border-ink/10 transition-colors cursor-pointer",children:"Load more commits..."}):$.length>10?(0,s.FD)("div",{className:"text-[11px] font-mono text-ink/40 py-2",children:["End of commit history (",$.length," commits)"]}):null})]})]})})]})})}function S(e){let{children:t,onClose:n,wide:r}=e;return(0,s.Y)("div",{className:"fixed inset-0 z-50 bg-canvas/80 flex items-center justify-center p-4",onClick:n,role:"dialog","aria-modal":"true",children:(0,s.Y)("div",{className:`bg-paper border border-ink/20 rounded-lg shadow-xl flex flex-col overflow-hidden ${r?"w-[min(94vw,680px)] max-h-[82vh]":"w-[min(94vw,420px)] max-h-[80vh]"}`,onClick:e=>e.stopPropagation(),children:t})})}function j(e){let{modal:t,onClose:n,onConfirm:r}=e;return t?(0,s.FD)(S,{onClose:n,children:[(0,s.FD)("div",{className:"flex items-center gap-3 px-4 py-3 border-b border-ink/10",children:[(0,s.Y)(i.A,{size:16,className:"text-error flex-shrink-0"}),(0,s.Y)("h3",{className:"text-sm font-semibold text-ink",children:"Confirm Action"})]}),(0,s.Y)("div",{className:"px-4 py-4 text-xs text-ink/80 leading-relaxed",children:t.message}),(0,s.FD)("div",{className:"flex items-center justify-end gap-2 px-4 py-3 border-t border-ink/10",children:[(0,s.Y)("button",{type:"button",onClick:n,className:"px-3 py-1.5 rounded border border-ink/20 text-ink/70 hover:bg-ink/5 hover:text-ink transition-colors cursor-pointer text-xs",children:"Cancel"}),(0,s.Y)("button",{type:"button",onClick:r,className:"px-3 py-1.5 rounded bg-error text-canvas hover:bg-error/90 transition-colors cursor-pointer text-xs font-medium",children:"Confirm"})]})]}):null}function P(e){let{isOpen:t,branchName:n,inputRef:a,onChange:i,onClose:l,onCreate:c}=e;if(!t)return null;let d=(0,r.hb)(()=>{n.trim()&&c()},[n,c]);return(0,s.FD)(S,{onClose:l,children:[(0,s.FD)("div",{className:"flex items-center gap-3 px-4 py-3 border-b border-ink/10",children:[(0,s.Y)(o.A,{size:16,className:"text-ink/60 flex-shrink-0"}),(0,s.Y)("h3",{className:"text-sm font-semibold text-ink",children:"Create New Branch"})]}),(0,s.Y)("div",{className:"px-4 py-4",children:(0,s.Y)("input",{ref:a,type:"text",value:n,onChange:e=>i(e.currentTarget.value),onKeyDown:e=>{"Enter"===e.key&&d(),"Escape"===e.key&&l()},placeholder:"branch-name",className:"w-full bg-canvas border border-ink/20 rounded px-3 py-2 text-xs focus:outline-none focus:border-ink/40 text-ink placeholder-ink/40 transition-colors"})}),(0,s.FD)("div",{className:"flex items-center justify-end gap-2 px-4 py-3 border-t border-ink/10",children:[(0,s.Y)("button",{type:"button",onClick:l,className:"px-3 py-1.5 rounded border border-ink/20 text-ink/70 hover:bg-ink/5 hover:text-ink transition-colors cursor-pointer text-xs",children:"Cancel"}),(0,s.Y)("button",{type:"button",onClick:d,disabled:!n.trim(),className:"px-3 py-1.5 rounded bg-ink text-canvas hover:bg-ink/90 transition-colors cursor-pointer text-xs font-medium disabled:opacity-40 disabled:cursor-not-allowed",children:"Create"})]})]})}function z(e){let{message:t,hasStagedChanges:n,isBusy:r=!1,onChangeMessage:a,onCommit:i}=e,o=n&&t.trim().length>0&&!r;return(0,s.FD)("div",{className:"border-t border-ink/10 bg-canvas/50 p-3 flex flex-col gap-2",children:[(0,s.Y)("textarea",{value:t,onChange:e=>a(e.currentTarget.value),onKeyDown:e=>{"Enter"===e.key&&(e.metaKey||e.ctrlKey)&&o&&(e.preventDefault(),i())},placeholder:"Commit message (⌘/Ctrl+Enter to commit)",rows:5,className:"w-full resize-y min-h-[100px] max-h-[200px] bg-paper border border-ink/20 rounded px-2.5 py-1.5 text-xs text-ink placeholder-ink/40 focus:outline-none focus:border-ink/40 transition-colors font-mono"}),(0,s.FD)("button",{type:"button",onClick:i,disabled:!o,title:n?"Commit staged changes":"Stage changes first",className:"flex items-center justify-center gap-1.5 px-3 py-1.5 rounded bg-ink text-canvas hover:bg-ink/90 transition-colors cursor-pointer text-xs font-medium disabled:opacity-40 disabled:cursor-not-allowed",children:[(0,s.Y)(g.A,{size:12}),"Commit"]})]})}var $=n("vZ"),H=n("r"),R=n("n"),L=n("Sj"),W=n("y");let J=(0,W.A)({name:"list",size:24,node:[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]]}),T=(0,W.A)({name:"folder-tree",size:24,node:[["path",{d:"M20 10a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"hod4my"}],["path",{d:"M20 21a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.9a1 1 0 0 1-.88-.55l-.42-.85a1 1 0 0 0-.92-.6H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"w4yl2u"}],["path",{d:"M3 5a2 2 0 0 0 2 2h3",key:"f2jnh7"}],["path",{d:"M3 3v13a2 2 0 0 0 2 2h3",key:"k8epm1"}]]});function O(e){let{branchRef:t,showBranchMenu:n,setShowBranchMenu:r,branch:a,branches:i,remoteBranches:l,onCheckout:d,onOpenBranchPrompt:h,optionsRef:p,showOptions:m,setShowOptions:u,onHistory:f,onGraph:x,viewMode:b,setViewMode:k,isBusy:v=!1,syncCount:w={ahead:0,behind:0},onSync:N}=e;return(0,s.FD)("div",{className:"p-3 border-b border-ink/10 bg-canvas/50 flex items-center justify-between",children:[(0,s.FD)("div",{className:"relative",ref:t,children:[(0,s.FD)("button",{onClick:()=>r(!n),className:"flex items-center space-x-1.5 hover:bg-ink/5 px-2 py-1 -ml-2 rounded transition-colors text-[11px] text-ink/80 font-medium",children:[(0,s.Y)($.A,{size:12,className:"text-ink/60"}),(0,s.Y)("span",{className:"truncate max-w-[140px]",children:a}),(0,s.Y)(y.A,{size:12,className:"text-ink/40"})]}),n&&(0,s.Y)("div",{className:"absolute top-full left-0 mt-1 w-48 bg-paper border border-ink/20 rounded-md shadow-lg z-50 flex flex-col overflow-hidden text-xs",children:(0,s.FD)("div",{className:"max-h-48 scrollbar-overlay-container scrollbar-overlay-static py-1",children:[i.length>0&&(0,s.FD)(s.FK,{children:[(0,s.Y)("div",{className:"px-3 py-1 text-[9px] uppercase tracking-wider text-ink/40 font-semibold",children:"Local"}),i.map(e=>(0,s.FD)("button",{onClick:()=>{d(e),r(!1)},className:"w-full text-left px-3 py-2 hover:bg-ink/5 flex items-center justify-between transition-colors",children:[(0,s.Y)("span",{className:"truncate",children:e}),a===e&&(0,s.Y)(g.A,{size:12,className:"text-ink"})]},e))]}),l.length>0&&(0,s.FD)(s.FK,{children:[(0,s.Y)("div",{className:"px-3 py-1 text-[9px] uppercase tracking-wider text-ink/40 font-semibold",children:"Remote"}),l.map(e=>(0,s.FD)("button",{onClick:()=>{d(e),r(!1)},className:"w-full text-left px-3 py-2 hover:bg-ink/5 flex items-center justify-between transition-colors",children:[(0,s.Y)("span",{className:"truncate",children:e}),a===e&&(0,s.Y)(g.A,{size:12,className:"text-ink"})]},e))]}),(0,s.Y)("div",{className:"w-full h-px bg-ink/10 my-1"}),(0,s.FD)("button",{onClick:()=>{h(),r(!1)},className:"w-full text-left px-3 py-2 hover:bg-ink/5 flex items-center space-x-2 transition-colors text-ink/80 italic",children:[(0,s.Y)(H.A,{size:12}),(0,s.Y)("span",{children:"Create new branch..."})]})]})})]}),(0,s.FD)("div",{className:"flex items-center space-x-2 text-ink/40 relative",ref:p,children:[(0,s.FD)("button",{type:"button",onClick:N,disabled:v,title:w.ahead>0&&w.behind>0?`Pull ${w.behind} then push ${w.ahead} commit(s)`:w.ahead>0?`Push ${w.ahead} commit(s)`:w.behind>0?`Pull ${w.behind} commit(s)`:"Up to date — sync anyway",className:"flex items-center gap-1 p-1 rounded hover:text-ink hover:bg-ink/5 cursor-pointer transition-colors disabled:opacity-40 disabled:cursor-not-allowed",children:[(0,s.Y)(R.A,{size:13}),(0,s.FD)("span",{className:"font-mono tabular-nums text-[10px]",children:["↑",w.ahead," ↓",w.behind]})]}),(0,s.Y)("button",{type:"button",onClick:f,title:"Commit History",className:"p-1 rounded hover:text-ink hover:bg-ink/5 cursor-pointer transition-colors",children:(0,s.Y)(c.A,{size:13})}),(0,s.Y)("button",{type:"button",onClick:x,title:"Git Graph",className:"p-1 rounded hover:text-ink hover:bg-ink/5 cursor-pointer transition-colors",children:(0,s.Y)(o.A,{size:13})}),(0,s.Y)("button",{type:"button",onClick:()=>u(!m),title:"View Options",className:"p-1 rounded hover:text-ink hover:bg-ink/5 cursor-pointer transition-colors",children:(0,s.Y)(L.A,{size:13})}),m&&(0,s.FD)("div",{className:"absolute right-0 top-full mt-1 w-36 bg-paper border border-ink/15 rounded-md shadow-lg z-50 py-1 font-mono text-xs",children:[(0,s.FD)("button",{type:"button",onClick:()=>{k("flat"),u(!1)},className:"w-full px-3 py-1.5 text-left text-ink hover:bg-ink/5 flex items-center justify-between transition-colors",children:[(0,s.FD)("div",{className:"flex items-center space-x-1.5",children:[(0,s.Y)(J,{size:12,className:"text-ink/60"}),(0,s.Y)("span",{children:"View as List"})]}),"flat"===b&&(0,s.Y)(g.A,{size:12,className:"text-ink"})]}),(0,s.FD)("button",{type:"button",onClick:()=>{k("tree"),u(!1)},className:"w-full px-3 py-1.5 text-left text-ink hover:bg-ink/5 flex items-center justify-between transition-colors",children:[(0,s.FD)("div",{className:"flex items-center space-x-1.5",children:[(0,s.Y)(T,{size:12,className:"text-ink/60"}),(0,s.Y)("span",{children:"View as Tree"})]}),"tree"===b&&(0,s.Y)(g.A,{size:12,className:"text-ink"})]})]})]})]})}var E=n("rm"),K=n("Ir"),I=n("FL");function _(e){let{repoRef:t,showRepoMenu:n,setShowRepoMenu:r,activeRepo:a,repos:i,isLoading:o,rootPath:l,reposScanning:c,onSelectRepo:d,onRefresh:h,onRefreshRepos:m}=e,[u,f]=(0,I.bL)("git.repoQuery",""),x=function(e){if(!e)return"workspace root";let t=e.replace(/\\/g,"/").split("/").filter(Boolean);return t.length>0?t[t.length-1]:"workspace root"}(l),b=e=>"."===e?x:e,k=i.filter(e=>!u.trim()||b(e).toLowerCase().includes(u.toLowerCase()));return(0,s.FD)("div",{className:"p-3 border-b border-ink/10 flex items-center justify-between",children:[(0,s.FD)("div",{className:"relative",ref:t,children:[(0,s.FD)("button",{onClick:()=>r(!n),className:"flex items-center space-x-1.5 hover:bg-ink/5 px-2 py-1 -ml-2 rounded transition-colors text-xs text-ink/80 font-medium",children:[(0,s.Y)(E.A,{size:12,className:"text-ink/60"}),(0,s.FD)("span",{className:"flex items-center space-x-1 truncate max-w-[150px]",children:[(0,s.Y)("span",{className:"text-ink/50 font-normal uppercase tracking-wider text-[10px]",children:"GIT"}),(0,s.Y)("span",{className:"text-ink/30",children:"•"}),(0,s.Y)("span",{children:"."===a?x:a.split("/").pop()})]}),(0,s.Y)(y.A,{size:12,className:"text-ink/40"})]}),n&&(0,s.FD)("div",{className:"absolute top-full left-0 mt-1 w-52 bg-paper border border-ink/20 rounded-md shadow-lg z-50 flex flex-col overflow-hidden text-xs",children:[(0,s.FD)("div",{className:"px-2 py-1.5 border-b border-ink/10 flex items-center space-x-1.5",children:[(0,s.Y)(p.A,{size:11,className:"text-ink/40 flex-shrink-0"}),(0,s.Y)("input",{type:"text",value:u,onChange:e=>f(e.currentTarget.value),placeholder:"Search repos...",title:"Search repositories",className:"w-full bg-transparent outline-none text-xs text-ink placeholder-ink/40",autoFocus:!0}),u&&(0,s.Y)("button",{type:"button",onClick:()=>f(""),title:"Clear search",className:"text-ink/40 hover:text-ink flex-shrink-0",children:"×"}),(0,s.Y)("button",{type:"button",onClick:m,title:"Refresh nested repos",disabled:c,className:"text-ink/40 hover:text-ink flex-shrink-0 transition-colors disabled:opacity-40 disabled:hover:text-ink/40",children:(0,s.Y)(K.A,{size:11,className:c?"animate-spin":""})})]}),(0,s.Y)("div",{className:"max-h-48 scrollbar-overlay-container scrollbar-overlay-static py-1",children:0===k.length?(0,s.Y)("div",{className:"px-3 py-2 text-ink/40 italic",children:"No repos found"}):k.map(e=>(0,s.FD)("button",{onClick:()=>{d(e),r(!1),f("")},title:b(e),className:"w-full text-left px-3 py-2 hover:bg-ink/5 flex items-center justify-between transition-colors",children:[(0,s.Y)("span",{className:"truncate",children:b(e)}),a===e&&(0,s.Y)(g.A,{size:12,className:"text-ink"})]},e))})]})]}),(0,s.Y)("div",{className:"flex space-x-2 text-ink/40",children:(0,s.Y)("button",{type:"button",onClick:h,title:"Refresh",className:"hover:text-ink cursor-pointer inline-flex",children:(0,s.Y)(K.A,{size:14,className:o?"animate-spin":""})})})]})}var B=n("DV"),G=n("I"),V=n("pX"),U=n("LQ");function q(e){let{change:t,isStaged:n,repo:r,rootPath:a,onAction:i}=e,o=(0,U.R)(t.status,n),l=o.charStatus,c=o.colorClass,d=t.file.split("/"),h=d.pop()||t.file,p=d.length>0?d.join("/"):"";return(0,s.FD)("div",{className:"flex items-center justify-between px-3 py-1 hover:bg-ink/5 cursor-pointer group text-[11px] transition-colors",onClick:()=>{window.dispatchEvent(new CustomEvent("omp:open-diff",{detail:{file:t.file,staged:n,status:l,repo:r||".",root:a}}))},children:[(0,s.FD)("div",{className:"flex items-center space-x-1.5 flex-1 min-w-0 pr-2",children:[(0,s.Y)("span",{className:`font-bold font-mono text-[9px] w-3 flex-shrink-0 text-center ${c}`,title:`Status: ${o.label}`,children:l}),(0,s.Y)(V.o,{name:h,size:12,className:"flex-shrink-0"}),(0,s.Y)("span",{className:`truncate ${c}`,title:t.file,children:h}),p&&(0,s.Y)("span",{className:"text-[9px] text-ink/40 truncate ml-1",children:p})]}),(0,s.Y)("div",{className:"flex items-center space-x-1 text-ink/40 flex-shrink-0",children:(0,s.FD)("div",{className:"flex items-center opacity-0 group-hover:opacity-100 space-x-1",children:[!n&&(0,s.FD)(s.FK,{children:[(0,s.Y)("button",{type:"button",onClick:()=>i("revert",t.file),title:"Discard Changes",className:"w-5 h-5 flex items-center justify-center rounded hover:text-error hover:bg-error/10 cursor-pointer transition-colors",children:(0,s.Y)(G.A,{size:11})}),(0,s.Y)("button",{type:"button",onClick:()=>i("stage",t.file),title:"Stage Changes",className:"w-5 h-5 flex items-center justify-center rounded hover:text-ink hover:bg-ink/10 cursor-pointer transition-colors",children:(0,s.Y)(H.A,{size:11})})]}),n&&(0,s.Y)("button",{type:"button",onClick:()=>i("unstage",t.file),title:"Unstage Changes",className:"w-5 h-5 flex items-center justify-center rounded hover:text-ink hover:bg-ink/10 cursor-pointer transition-colors",children:(0,s.Y)(B.A,{size:11})})]})})]})}function Q(e){let{node:t,isStaged:n,isFolderOpen:r,toggleFolder:a,onAction:i,depth:o=0,repo:l,rootPath:c}=e,d="folder"===t.type,h=!!d&&r(t.id);if(d)return(0,s.FD)("div",{className:"select-none",children:[(0,s.FD)("div",{className:"flex items-center justify-between px-2 py-1 hover:bg-ink/5 cursor-pointer rounded group transition-colors text-[11px]",onClick:()=>a(t.id),children:[(0,s.FD)("div",{className:"flex items-center space-x-1.5 flex-1 min-w-0 pr-1",children:[(0,s.Y)("span",{className:"w-3.5 h-3.5 flex items-center justify-center text-ink/40 flex-shrink-0",children:h?(0,s.Y)(y.A,{size:12}):(0,s.Y)(v.A,{size:12})}),(0,s.Y)(V.o,{name:t.name,isFolder:!0,isOpen:h,size:13,className:"flex-shrink-0"}),(0,s.Y)("span",{className:"font-medium text-ink truncate",children:t.name}),(0,s.Y)("span",{className:"text-[9px] text-ink/40 font-normal px-1 py-0.2 bg-ink/5 rounded-full ml-1",children:t.changeCount})]}),(0,s.Y)("div",{className:"flex items-center space-x-1 text-ink/40 flex-shrink-0",children:(0,s.Y)("div",{className:"flex items-center opacity-0 group-hover:opacity-100 space-x-1",children:n?(0,s.Y)("button",{type:"button",onClick:e=>{e.stopPropagation(),i("unstage",t.path)},title:`Unstage ${t.name}`,className:"w-5 h-5 flex items-center justify-center rounded hover:text-ink hover:bg-ink/10 cursor-pointer transition-colors",children:(0,s.Y)(B.A,{size:11})}):(0,s.FD)(s.FK,{children:[(0,s.Y)("button",{type:"button",onClick:e=>{e.stopPropagation(),i("revert",t.path)},title:`Discard changes in ${t.name}`,className:"w-5 h-5 flex items-center justify-center rounded hover:text-error hover:bg-error/10 cursor-pointer transition-colors",children:(0,s.Y)(G.A,{size:11})}),(0,s.Y)("button",{type:"button",onClick:e=>{e.stopPropagation(),i("stage",t.path)},title:`Stage ${t.name}`,className:"w-5 h-5 flex items-center justify-center rounded hover:text-ink hover:bg-ink/10 cursor-pointer transition-colors",children:(0,s.Y)(H.A,{size:11})})]})})})]}),h&&t.children&&t.children.length>0&&(0,s.Y)("div",{className:"ml-3 border-l border-ink/10 pl-1",children:t.children.map(e=>(0,s.Y)(Q,{node:e,isStaged:n,isFolderOpen:r,toggleFolder:a,onAction:i,depth:o+1,repo:l,rootPath:c},e.id))})]});let p=t.change,m=(0,U.R)(p?.status||"M",n),u=m.charStatus,f=m.colorClass,x=p?p.file:t.path;return(0,s.FD)("div",{className:"flex items-center justify-between px-2 py-0.5 hover:bg-ink/5 cursor-pointer rounded group transition-colors text-[11px]",onClick:()=>{window.dispatchEvent(new CustomEvent("omp:open-diff",{detail:{file:x,staged:n,status:u,repo:l||".",root:c}}))},children:[(0,s.FD)("div",{className:"flex items-center space-x-1.5 flex-1 min-w-0 pr-1",children:[(0,s.Y)("span",{className:"w-3.5 h-3.5 flex items-center justify-center flex-shrink-0",children:(0,s.Y)("span",{className:`font-bold font-mono text-[9px] ${f}`,title:`Status: ${m.label}`,children:u})}),(0,s.Y)(V.o,{name:t.name,size:12,className:"flex-shrink-0"}),(0,s.Y)("span",{className:`truncate ${f}`,title:x,children:t.name})]}),(0,s.Y)("div",{className:"flex items-center space-x-1 text-ink/40 flex-shrink-0",children:(0,s.Y)("div",{className:"flex items-center opacity-0 group-hover:opacity-100 space-x-1",children:n?(0,s.Y)("button",{type:"button",onClick:()=>i("unstage",x),title:"Unstage Changes",className:"w-5 h-5 flex items-center justify-center rounded hover:text-ink hover:bg-ink/10 cursor-pointer transition-colors",children:(0,s.Y)(B.A,{size:11})}):(0,s.FD)(s.FK,{children:[(0,s.Y)("button",{type:"button",onClick:()=>i("revert",x),title:"Discard Changes",className:"w-5 h-5 flex items-center justify-center rounded hover:text-error hover:bg-error/10 cursor-pointer transition-colors",children:(0,s.Y)(G.A,{size:11})}),(0,s.Y)("button",{type:"button",onClick:()=>i("stage",x),title:"Stage Changes",className:"w-5 h-5 flex items-center justify-center rounded hover:text-ink hover:bg-ink/10 cursor-pointer transition-colors",children:(0,s.Y)(H.A,{size:11})})]})})})]})}function Z(e){let{changes:t,isStaged:n,repo:a,rootPath:i,onAction:o}=e,{tree:l,isFolderOpen:c,toggleFolder:d}=function(e){let{sessionId:t,ready:n,read:s}=(0,I.p0)(),a=(0,r.Kr)(()=>(function(e){let t={id:"",name:"",path:"",type:"folder",children:[],changeCount:0};for(let n of e){let e=n.file.replace(/^[./]+/,""),s=e.endsWith("/"),r=e.replace(/\/$/,"").split("/").filter(Boolean),a=t,i="";for(let e=0;e<r.length;e++){let t=r[e];i=i?`${i}/${t}`:t;let o=e===r.length-1;if(o&&!s)a.children.push({id:i,name:t,path:i,type:"file",change:n,children:[],changeCount:1});else{let e=a.children.find(e=>"folder"===e.type&&e.name===t);e||(e={id:i,name:t,path:i,type:"folder",children:[],changeCount:0,change:o&&s?n:void 0},a.children.push(e)),a=e}}}return!function e(t){if("file"===t.type)return 1;let n=+!!t.change;for(let s of t.children)n+=e(s);return t.changeCount=n,t.children.sort((e,t)=>"folder"===e.type&&"file"===t.type?-1:"file"===e.type&&"folder"===t.type?1:e.name.localeCompare(t.name)),n}(t),t.children})(e),[e]),i=(0,r.Kr)(()=>{let e=new Set;return!function t(n){for(let s of n)"folder"===s.type&&(e.add(s.id),s.children&&s.children.length>0&&t(s.children))}(a),e},[a]),[o,l]=(0,I.bL)("git.expandedFolders",[]),c=(0,r.Kr)(()=>new Set(o),[o]),d=(0,r.li)(null);(0,r.vJ)(()=>{!n||d.current===t||0===i.size||(d.current=t,s("git.expandedFolders",[]).length>0||l(Array.from(i)))},[n,t,i,s,l]);let h=(0,r.hb)(e=>{l(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),Array.from(n)})},[l]),p=(0,r.hb)(e=>c.has(e),[c]);return{tree:a,expandedFolders:c,toggleFolder:h,isFolderOpen:p,expandAll:()=>l(Array.from(i)),collapseAll:()=>l([])}}(t);return 0===l.length?null:(0,s.Y)("div",{className:"py-0.5",children:l.map(e=>(0,s.Y)(Q,{node:e,isStaged:n,isFolderOpen:c,toggleFolder:d,onAction:o,repo:a,rootPath:i},e.id))})}function X(e){let{changes:t,isLoading:n,viewMode:r,repo:a,rootPath:i,onAction:o}=e,[l,c]=(0,I.bL)("git.stagedExpanded",!0),[d,h]=(0,I.bL)("git.unstagedExpanded",!0),p=t.filter(e=>{let t=e.status;return t&&" "!==t[0]&&"?"!==t[0]}),m=t.filter(e=>{let t=e.status;return t&&" "!==t[1]&&"?"!==t[1]||"??"===t});return n&&0===t.length?(0,s.Y)("div",{className:"flex-1 scrollbar-overlay-container scrollbar-overlay-static font-mono text-[11px] text-ink/80",children:(0,s.Y)("div",{className:"p-4 text-center text-ink/40 italic",children:"Loading..."})}):0===t.length?(0,s.Y)("div",{className:"flex-1 scrollbar-overlay-container scrollbar-overlay-static font-mono text-[11px] text-ink/80",children:(0,s.Y)("div",{className:"p-4 text-center text-ink/40 italic",children:"No changes found."})}):(0,s.Y)("div",{className:"flex-1 scrollbar-overlay-container scrollbar-overlay-static font-mono text-[11px] text-ink/80",children:(0,s.FD)("div",{className:"py-1",children:[p.length>0&&(0,s.FD)("div",{className:"mb-2",children:[(0,s.FD)("div",{className:"flex items-center justify-between px-3 py-1 group hover:bg-ink/5 cursor-pointer transition-colors",onClick:()=>c(!l),children:[(0,s.FD)("div",{className:"flex items-center space-x-1 font-semibold text-ink text-xs",children:[(0,s.Y)("span",{className:"w-3 text-center",children:l?"▾":"▸"}),(0,s.Y)("span",{children:"Staged Changes"}),(0,s.Y)("span",{className:"text-ink/40 font-normal ml-1 border border-ink/20 rounded-full px-1.5 text-[9px] bg-paper",children:p.length})]}),(0,s.Y)("div",{className:"opacity-0 group-hover:opacity-100 flex items-center space-x-1 text-ink/40 flex-shrink-0",children:(0,s.Y)("button",{type:"button",onClick:e=>{e.stopPropagation(),o("unstage_all")},title:"Unstage All Changes",className:"w-5 h-5 flex items-center justify-center rounded hover:text-ink hover:bg-ink/10 cursor-pointer transition-colors",children:(0,s.Y)(B.A,{size:12})})})]}),l&&("tree"===r?(0,s.Y)(Z,{changes:p,isStaged:!0,repo:a,rootPath:i,onAction:o}):p.map(e=>(0,s.Y)(q,{change:e,isStaged:!0,repo:a,rootPath:i,onAction:o},e.file+"staged")))]}),m.length>0&&(0,s.FD)("div",{children:[(0,s.FD)("div",{className:"flex items-center justify-between px-3 py-1 group hover:bg-ink/5 cursor-pointer transition-colors",onClick:()=>h(!d),children:[(0,s.FD)("div",{className:"flex items-center space-x-1 font-semibold text-ink text-xs",children:[(0,s.Y)("span",{className:"w-3 text-center",children:d?"▾":"▸"}),(0,s.Y)("span",{children:"Changes"}),(0,s.Y)("span",{className:"text-ink/40 font-normal ml-1 border border-ink/20 rounded-full px-1.5 text-[9px] bg-paper",children:m.length})]}),(0,s.FD)("div",{className:"opacity-0 group-hover:opacity-100 flex items-center space-x-1 text-ink/40 flex-shrink-0",children:[(0,s.Y)("button",{type:"button",onClick:e=>{e.stopPropagation(),o("revert_all")},title:"Discard All Changes",className:"w-5 h-5 flex items-center justify-center rounded hover:text-error hover:bg-error/10 cursor-pointer transition-colors",children:(0,s.Y)(G.A,{size:12})}),(0,s.Y)("button",{type:"button",onClick:e=>{e.stopPropagation(),o("stage_all")},title:"Stage All Changes",className:"w-5 h-5 flex items-center justify-center rounded hover:text-ink hover:bg-ink/10 cursor-pointer transition-colors",children:(0,s.Y)(H.A,{size:12})})]})]}),d&&("tree"===r?(0,s.Y)(Z,{changes:m,isStaged:!1,repo:a,rootPath:i,onAction:o}):m.map(e=>(0,s.Y)(q,{change:e,isStaged:!1,repo:a,rootPath:i,onAction:o},e.file+"unstaged")))]})]})})}var ee=n("wu"),et=n("oZ"),en=n("SW"),es=n("Af"),er=n("oj");function ea(e){let{className:t="",enabled:n=!0,rootPath:i,refreshKey:o=0}=e,l=(0,a.L)(),c=(0,a.L)(),{activeRepo:d,setActiveRepo:h,ready:p}=(0,en.Og)(i,"git.activeRepo"),{repos:m,scanning:u,rescan:f}=(0,en.Ml)(i,n),x=(0,en.gv)(d,m),b=(0,r.li)(x);b.current=x;let g=(0,r.li)("");g.current=`${i??""}\0${x}`;let k=(0,r.li)(""),y=(0,r.li)(""),v=(0,r.li)(void 0);l.data!==v.current&&(v.current=l.data,y.current=k.current);let w=y.current===g.current?l.data:void 0,N=e=>{if(!n)return;let t=e??b.current,s=new URLSearchParams;i&&s.set("root",i),t&&"."!==t&&s.set("repo",t),s.set("sync","1"),s.set("t",String(Date.now())),k.current=g.current,l.load(`/api/fs/git?${s.toString()}`)},[Y,C]=(0,I.bL)("git.commitDraft",""),[A,F]=(0,I.bL)("git.viewMode","flat"),[D,S]=(0,r.J0)(!1),$=(0,r.li)(null),[H,R]=(0,r.J0)(!1),L=(0,r.li)(null),[W,J]=(0,r.J0)(!1),T=(0,r.li)(null),[E,K]=(0,r.J0)(null),[B,G]=(0,r.J0)(!1),[V,U]=(0,r.J0)(""),q=(0,r.li)(null),[Q,Z]=(0,r.J0)(null),[ea,ei]=(0,r.J0)(!1),{toasts:eo,pushToast:el,dismissToast:ec}=(0,et.Y)();(0,r.vJ)(()=>{ei(!0)},[]),(0,r.vJ)(()=>{p&&N()},[o,i,n,p,x]),(0,es.n)(()=>N(),n&&p),(0,es.w)(()=>N(),n&&p),(0,r.vJ)(()=>{B&&q.current&&q.current.focus()},[B]),(0,r.vJ)(()=>{"idle"===c.state&&c.data&&("history"===c.data.type?Z({title:"Commit History",data:c.data.data||[]}):"graph"===c.data.type?Z({title:"Git Graph",data:c.data.data||[]}):c.data.success?N():el(c.data.error||"Git operation failed"))},[c.state,c.data]),(0,er.W)($,()=>S(!1)),(0,er.W)(L,()=>R(!1)),(0,er.W)(T,()=>J(!1));let ed=(e,t,n)=>{let s=new FormData;s.append("actionType",e),s.append("repo",x),i&&s.append("root",i),t&&s.append("file",t),n&&Object.entries(n).forEach(e=>{let[t,n]=e;return s.append(t,n)}),c.submit(s,{method:"POST",action:"/api/fs/git"}),"commit"===e&&C("")},eh=w?.branch||"main",ep=w?.branches||["main"],em=w?.remoteBranches||[],eu=w?.changes||[],ef="loading"===l.state||"idle"!==c.state,ex=eu.filter(e=>{let t=e.status;return t&&" "!==t[0]&&"?"!==t[0]});return n?(0,s.FD)("div",{className:`flex flex-col h-full bg-paper relative ${t}`,children:[ea&&(0,s.FD)(s.FK,{children:[(0,s.Y)(j,{modal:E,onClose:()=>K(null),onConfirm:()=>{E&&(ed(E.type,E.file),K(null))}}),(0,s.Y)(P,{isOpen:B,branchName:V,inputRef:q,onChange:U,onClose:()=>{G(!1),U("")},onCreate:()=>{V.trim()&&(ed("create_branch",void 0,{branch:V.trim()}),G(!1),U(""))}}),(0,s.Y)(M,{output:Q,onClose:()=>Z(null),onRefresh:()=>{Q&&ed(Q.title.toLowerCase().includes("graph")?"graph":"history")},onExecuteAction:(e,t,n)=>ed(e,t,n),rootPath:i,activeRepo:x})]}),(0,s.Y)(ee.y,{toasts:eo,onDismiss:ec}),(0,s.Y)(_,{repoRef:L,showRepoMenu:H,setShowRepoMenu:R,activeRepo:x,repos:m,isLoading:ef,rootPath:i,reposScanning:u,onSelectRepo:e=>{e!==x&&h(e)},onRefresh:()=>N(),onRefreshRepos:f}),(0,s.Y)(O,{branchRef:T,showBranchMenu:W,setShowBranchMenu:J,branch:eh,branches:ep,remoteBranches:em,onCheckout:e=>ed("checkout",void 0,{branch:e}),onOpenBranchPrompt:()=>G(!0),optionsRef:$,showOptions:D,setShowOptions:S,onHistory:()=>ed("history"),onGraph:()=>ed("graph"),viewMode:A,setViewMode:F,isBusy:ef,syncCount:w?.syncCount,onSync:()=>ed("sync")}),(0,s.Y)(z,{message:Y,hasStagedChanges:ex.length>0,isBusy:ef,onChangeMessage:C,onCommit:()=>ed("commit",void 0,{message:Y})}),(0,s.Y)(X,{changes:eu,isLoading:ef,viewMode:A,repo:x,rootPath:i,onAction:(e,t,n)=>{"revert"===e?K({type:e,file:t,message:`Are you sure you want to discard changes in ${t}?`}):"revert_all"===e?K({type:e,message:"Are you sure you want to discard ALL unstaged changes? This cannot be undone."}):ed(e,t,n)}})]}):(0,s.Y)("div",{className:`flex flex-col h-full bg-paper items-center justify-center text-ink/40 ${t}`,children:(0,s.Y)("span",{className:"text-xs font-mono",children:"No session selected"})})}},SW(e,t,n){n.d(t,{gv:()=>c,Ml:()=>h,Og:()=>d});var s=n("G"),r=n("FL"),a=n("oS");let i={repos:["."],scanning:!1},o=(e,t)=>{let n=setTimeout(e,t);return()=>clearTimeout(n)},l=function(e){let{fetch:t,scheduler:n=o}=e,s=new Map;function r(e){let t=s.get(e);return t||(t={snapshot:i,loaded:!1,listeners:new Set,controller:null,cancelRetry:null,pending:null},s.set(e,t)),t}function l(e,t){let n=s.get(e);if(!n)return;let r={...n.snapshot,...t};if(r.repos!==n.snapshot.repos||r.scanning!==n.snapshot.scanning)for(let e of(n.snapshot=r,n.listeners))e()}function c(e){e.cancelRetry?.(),e.cancelRetry=null}function d(e,s){let i=r(e);i.controller?.abort();let o=new AbortController;i.controller=o,l(e,{scanning:!0});let h=new URLSearchParams({reposOnly:"1"});e&&h.set("root",e),s&&h.set("rescan","1"),h.set("t",String(Date.now()));let p=(async()=>{let s=await t(`/api/fs/git?${h.toString()}`).catch(()=>null);if(i.controller!==o)return;i.controller=null;let r=(0,a.u)(s)&&Array.isArray(s.repos)?s.repos:null;if(!r)return void l(e,{scanning:!1});let p=(0,a.u)(s)&&!0===s.reposPending;i.loaded=!0,l(e,{repos:r.filter(e=>"string"==typeof e),scanning:p}),p?(c(i),i.cancelRetry=n(()=>{i.cancelRetry=null,0!==i.listeners.size&&d(e,!1)},1500)):c(i)})();return i.pending=p,p}return{snapshot:e=>s.get(e)?.snapshot??i,settled:e=>s.get(e)?.pending??Promise.resolve(),subscribe:function(e,t){let n=r(e);return n.listeners.add(t),null===n.controller&&null===n.cancelRetry&&(!n.loaded||n.snapshot.scanning)&&d(e,!1),()=>{n.listeners.delete(t),n.listeners.size>0||(n.controller?.abort(),n.controller=null,c(n))}},rescan:e=>void d(e,!0)}}({fetch:async e=>(await fetch(e)).json()});function c(e,t){return"."!==e||t.includes(".")?e:t[0]??"."}function d(e,t){let[n,a,i]=(0,r.bL)(t,null),o=e??"",l=(0,s.li)(o);l.current=o;let c=(0,s.li)(a);c.current=a;let d=(0,s.hb)(e=>{c.current({root:l.current,repo:e})},[]);return{activeRepo:n&&"object"==typeof n&&n.root===o&&"string"==typeof n.repo&&n.repo?n.repo:".",setActiveRepo:d,ready:i}}function h(e,t){let n=e??"",r=(0,s.hb)(e=>t?l.subscribe(n,e):()=>{},[n,t]),a=(0,s.hb)(()=>t?l.snapshot(n):i,[n,t]),o=(0,s.rz)(r,a),c=(0,s.hb)(()=>{t&&l.rescan(n)},[n,t]);return{repos:o.repos,scanning:o.scanning,rescan:c}}},rm(e,t,n){let s=(0,n("y").A)({name:"folder-git-2",size:24,node:[["path",{d:"M18 19a5 5 0 0 1-5-5v8",key:"sz5oeg"}],["path",{d:"M9 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v5",key:"1w6njk"}],["circle",{cx:"13",cy:"12",r:"2",key:"1j92g6"}],["circle",{cx:"20",cy:"19",r:"2",key:"1obnsp"}]]});n.d(t,{},{A:s})},Wb0(e,t,n){let s=(0,n("y").A)({name:"rotate-cw",size:24,node:[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]]});n.d(t,{},{A:s})}}]);
@@ -1,11 +0,0 @@
1
- /**
2
- * @license
3
- * SPDX-License-Identifier: Apache-2.0
4
- */
5
-
6
- /**
7
- * @license lucide-preact v1.47.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */
@@ -1,2 +0,0 @@
1
- /*! LICENSE: m3.d2b05f9604.js.LICENSE.txt */
2
- "use strict";(self.rspackChunkompchamber=self.rspackChunkompchamber||[]).push([["m3"],{ky(e,t,r){r.d(t,{BrowserPanel:()=>$});var n=r("j"),a=r("H"),l=r("Wb0"),i=r("Oj"),o=r("bu");let s={live:"Live","agent-offline":"Agent offline","browser-offline":"Browser offline","no-tab":"Tanpa tab"};function d(e){let{url:t,status:r,viewportMode:a,zoomLevel:d=100,onIncludeInChat:c,onReconnect:u,onOpenExternal:m,onChangeViewport:p,onZoomIn:b,onZoomOut:h,onResetZoom:f,onSetZoom:v}=e;return(0,n.Y)(o.K,{url:t??"",statusDotClass:"live"===r?"bg-success animate-pulse":"bg-ink/25",statusLabel:s[r],viewportMode:a,zoomLevel:d,onChangeViewport:p,onZoomIn:b,onZoomOut:h,onResetZoom:f,onSetZoom:v,onIncludeInChat:c,onOpenExternal:m,openExternalLabel:"Buka di jendela baru",openExternalTitle:t?"Open in new window":"No URL loaded",trailingControls:(0,n.Y)("button",{type:"button",onClick:u,"aria-label":"Sambungkan ulang live view",title:"Reconnect live view",className:o.B,children:(0,n.Y)(l.A,{size:14})}),children:(0,n.FD)("div",{className:"flex-1 min-w-0 flex items-center bg-canvas border border-ink/15 rounded-md px-2 py-0.5",children:[(0,n.Y)(i.A,{size:12,className:"text-ink/40 mr-1.5 flex-shrink-0"}),(0,n.Y)("span",{className:"w-full truncate text-ink/80 font-mono text-[11px]",title:t??"",children:t||"Agent belum membuka halaman"})]})})}var c=r("t"),u=r("zH"),m=r("m"),p=r("y");let b=(0,p.A)({name:"mouse-pointer-click",size:24,node:[["path",{d:"M14 4.1 12 6",key:"ita8i4"}],["path",{d:"m5.1 8-2.9-.8",key:"1go3kf"}],["path",{d:"m6 12-1.9 2",key:"mnht97"}],["path",{d:"M7.2 2.2 8 5.1",key:"1cfko1"}],["path",{d:"M9.037 9.69a.498.498 0 0 1 .653-.653l11 4.5a.5.5 0 0 1-.074.949l-4.349 1.041a1 1 0 0 0-.74.739l-1.04 4.35a.5.5 0 0 1-.95.074z",key:"s0h3yz"}]]});var h=r("zr"),f=r("DTR"),v=r("YL"),x=r("Sjr"),k=r("bt");let g=(0,p.A)({name:"move-vertical",size:24,node:[["path",{d:"M12 2v20",key:"t6zp3m"}],["path",{d:"m8 18 4 4 4-4",key:"bh5tu3"}],["path",{d:"m8 6 4-4 4 4",key:"ybng9g"}]]});var w=r("ke"),y=r("rr");let A={open:i.A,navigate:i.A,loaded:m.A,click:b,type:h.A,press:f.A,submit:v.A,wait:x.A,screenshot:k.A,scroll:g,upload:w.A,close:y.A,error:y.A};function z(e){let{actions:t}=e;return 0===t.length?null:(0,n.Y)("div",{className:"absolute bottom-3 left-3 z-20 flex flex-col gap-1.5 pointer-events-none max-w-[320px]",children:t.map(e=>{let t=A[e.kind],r="error"===e.kind;return(0,n.FD)("div",{className:`flex items-center gap-2 rounded-md border px-2.5 py-1.5 text-[11px] shadow-sm backdrop-blur-sm ${r?"border-error/30 bg-error/10 text-error":"border-ink/15 bg-paper/95 text-ink"}`,children:[(0,n.Y)(t,{size:12,className:`flex-shrink-0 ${r?"text-error":"text-ink/60"}`}),(0,n.Y)("span",{className:"truncate",children:e.label})]},e.id)})})}var N=r("nTz");let Y={"agent-offline":{title:"Agent belum berjalan",body:"Aktifkan sesi ini agar browser bisa dikendalikan agent."},"browser-offline":{title:"Belum ada browser aktif",body:"Minta agent membuka sebuah halaman; tampilan live akan muncul di sini."},"no-tab":{title:"Browser aktif, belum ada tab",body:"Sesi ini belum membuka tab di browser bersama."}};function I(e){let{status:t,url:r,tabs:a,targetId:l,frameSrc:o,actions:s,onSelectTarget:d,viewportMode:m,zoomLevel:p}=e,b="live"===t,h=b?null:Y[t];return(0,n.FD)("div",{className:"flex-1 flex flex-col min-h-0 bg-canvas/60 relative overflow-hidden",children:[(0,n.Y)(z,{actions:s}),b&&a.length>1&&(0,n.Y)("div",{className:"px-2 py-1 border-b border-ink/10 bg-paper flex items-center gap-1 overflow-x-auto flex-shrink-0",children:a.map(e=>{let t=e.targetId===l;return(0,n.Y)("button",{type:"button",onClick:()=>d(t?"":e.targetId),className:`px-2 py-0.5 rounded text-[11px] font-mono max-w-[220px] truncate border transition-colors cursor-pointer ${t?"bg-ink text-canvas border-ink":"bg-paper text-ink/70 border-ink/15 hover:border-ink/35 hover:text-ink"}`,title:e.url||e.title||e.targetId,children:e.title||e.url||e.targetId},e.targetId)})}),(0,n.Y)("div",{className:"flex-1 flex items-center justify-center p-2 min-h-0 overflow-auto",children:b?(0,n.Y)("div",{className:`relative flex flex-col bg-paper ${N.I[m]} transition-all duration-200`,style:{zoom:100!==p?`${p}%`:void 0,transformOrigin:"top center"},children:o?(0,n.Y)("img",{src:o,alt:r||"Live browser view",className:"w-full h-full object-contain bg-paper",draggable:!1}):(0,n.FD)("div",{className:"w-full h-full flex flex-col items-center justify-center text-center p-6 select-none",children:[(0,n.Y)(c.A,{size:20,className:"animate-spin text-ink/40 mb-2"}),(0,n.Y)("p",{className:"text-xs text-ink/60",children:"Menunggu frame pertama dari browser…"})]})}):(0,n.FD)("div",{className:"flex-1 flex flex-col items-center justify-center p-6 text-center select-none my-auto",children:[(0,n.Y)("div",{className:"w-12 h-12 rounded-xl bg-ink/5 border border-ink/10 flex items-center justify-center text-ink/40 mb-3",children:"agent-offline"===t?(0,n.Y)(u.A,{size:24}):(0,n.Y)(i.A,{size:24})}),(0,n.Y)("h3",{className:"text-sm font-semibold text-ink mb-1",children:h?.title}),(0,n.Y)("p",{className:"text-xs text-ink/60 max-w-sm",children:h?.body})]})})]})}var M=r("As");let L={status:"agent-offline",tabs:[]};var S=r("FL"),C=r("Fb");function $(e){let{className:t="",active:r=!0}=e,[l,i]=(0,S.bL)("browser.viewportMode","responsive"),[o,s]=(0,S.bL)("browser.zoomLevel",100),{status:c,url:u,title:m,tabs:p,targetId:b,frameSrc:h,actions:f,selectTarget:v,reconnect:x}=function(){let e=!(arguments.length>0)||void 0===arguments[0]||arguments[0],{sessionId:t,ready:r}=(0,M.O)(),[n,l]=(0,a.J0)(L),[i,o]=(0,a.J0)(void 0),[s,d]=(0,a.J0)([]),[c,u]=(0,a.J0)(""),[m,p]=(0,a.J0)(0),b=(0,a.li)(null),h=(0,a.li)(null),f=(0,a.li)(void 0),v=(0,a.li)(0),x=(0,a.li)([]),k=(0,a.hb)(e=>{u(e.trim())},[]),g=(0,a.hb)(()=>{p(e=>e+1)},[]);return(0,a.vJ)(()=>{let e=setInterval(()=>{d(e=>{let t=Date.now(),r=e.filter(e=>e.expiresAt>t),n=x.current.shift();return n?[...r.slice(-2),{...n,expiresAt:t+4e3}]:r.length===e.length?e:r})},500);return()=>clearInterval(e)},[]),(0,a.vJ)(()=>{l(L),o(void 0),u(""),x.current=[],d([])},[t]),(0,a.vJ)(()=>{if(!r||!t||!e)return;let n=!1,a=()=>{if(n)return;let e=c?`?target=${encodeURIComponent(c)}`:"",r=new EventSource(`/api/browser/${encodeURIComponent(t)}/stream${e}`);b.current=r,r.addEventListener("open",()=>{v.current=0}),r.addEventListener("state",e=>{try{let t=JSON.parse(e.data);t.targetId!==f.current&&o(void 0),f.current=t.targetId,l(t),"live"!==t.status&&o(void 0)}catch{}}),r.addEventListener("frame",e=>{try{let t=JSON.parse(e.data),r=f.current;if(r&&t.targetId&&t.targetId!==r)return;o(`data:${t.mimeType};base64,${t.data}`)}catch{}}),r.addEventListener("action",e=>{try{let t=JSON.parse(e.data);if("string"!=typeof t?.label||!t.label)return;x.current.push(t),x.current.length>16&&x.current.splice(0,x.current.length-16)}catch{}}),r.addEventListener("error",()=>{r.readyState===EventSource.CLOSED&&i()})},i=()=>{if(n||h.current)return;let e=Math.min(v.current+1,5);v.current=e,h.current=setTimeout(()=>{h.current=null,b.current?.close(),b.current=null,a()},Math.min(1e3*e,5e3))};return a(),()=>{n=!0,h.current&&(clearTimeout(h.current),h.current=null),b.current?.close(),b.current=null}},[r,t,c,m,e]),{status:n.status,url:n.url,title:n.title,tabs:n.tabs,targetId:n.targetId,frameSrc:i,actions:s,selectTarget:k,reconnect:g}}(r),k=(0,a.hb)(()=>{u&&(0,C.q)({url:u,title:m})},[u,m]);return(0,n.FD)("div",{className:`flex flex-col h-full w-full bg-paper text-ink overflow-hidden select-none ${t}`,children:[(0,n.Y)(d,{url:u,status:c,viewportMode:l,zoomLevel:o,onIncludeInChat:k,onReconnect:x,onOpenExternal:()=>{if(!u)return;let e=u.startsWith("/")&&"u">typeof window?`${window.location.origin}${u}`:u;window.open(e,"_blank","noopener,noreferrer")},onChangeViewport:i,onZoomIn:()=>s(e=>Math.min(200,e+10)),onZoomOut:()=>s(e=>Math.max(50,e-10)),onResetZoom:()=>s(100),onSetZoom:s}),(0,n.Y)(I,{status:c,url:u,tabs:p,targetId:b,frameSrc:h,actions:f,onSelectTarget:v,viewportMode:l,zoomLevel:o})]})}},Wb0(e,t,r){let n=(0,r("y").A)({name:"rotate-cw",size:24,node:[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]]});r.d(t,{},{A:n})},zr(e,t,r){let n=(0,r("y").A)({name:"type",size:24,node:[["path",{d:"M12 4v16",key:"1654pz"}],["path",{d:"M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2",key:"e0r10z"}],["path",{d:"M9 20h6",key:"s66wpe"}]]});r.d(t,{},{A:n})},ke(e,t,r){let n=(0,r("y").A)({name:"upload",size:24,node:[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]]});r.d(t,{},{A:n})}}]);
@@ -1,6 +0,0 @@
1
- /**
2
- * @license lucide-preact v1.47.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */
@@ -1,2 +0,0 @@
1
- /*! LICENSE: ma.2c261b04dd.js.LICENSE.txt */
2
- "use strict";(self.rspackChunkompchamber=self.rspackChunkompchamber||[]).push([["ma"],{nj(e,t,a){var n=a("j");function r(e){let{value:t,label:a,hint:r,tone:i="default",variant:l="metric",className:s=""}=e;return"compact"===l?(0,n.FD)("div",{className:"bg-canvas border border-ink/10 rounded-lg px-2.5 py-1.5 flex flex-col gap-0.5 flex-1 min-w-0",children:[(0,n.Y)("span",{className:"text-[10px] font-medium text-ink/50",children:a}),(0,n.Y)("span",{className:"text-xs font-semibold font-mono text-ink truncate",children:t})]}):(0,n.FD)("div",{className:`${"muted"===i?"bg-ink/5 border-ink/10":"bg-paper border-ink/15"} border rounded-lg p-3 shadow-xs flex flex-col justify-between h-full min-w-0 ${s}`,children:[(0,n.FD)("div",{className:"min-w-0",children:[(0,n.Y)("div",{className:"text-base font-bold tracking-tight text-ink leading-tight tabular-nums break-normal",children:t}),(0,n.Y)("div",{className:"text-[11px] font-semibold text-ink/75 mt-1.5 leading-snug min-h-[30px] flex items-start",children:(0,n.Y)("span",{className:"min-w-0 break-normal",children:a})})]}),r&&(0,n.Y)("div",{className:"text-[10px] text-ink/50 mt-1.5 leading-tight break-words",children:r})]})}a.d(t,{h:()=>r})},Cw(e,t,a){a.d(t,{H:()=>k});var n=a("j"),r=a("y");let i=(0,r.A)({name:"key-round",size:24,node:[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]});var l=a("p");function s(e){let{providerName:t,configured:a,error:r,note:s,children:d}=e;return(0,n.FD)("section",{className:"bg-paper border border-ink/15 rounded-lg shadow-xs",children:[(0,n.FD)("header",{className:"flex items-center justify-between gap-2 px-3.5 py-2.5 border-b border-ink/10",children:[(0,n.Y)("span",{className:"text-xs font-semibold text-ink",children:t}),(0,n.Y)("span",{className:"text-[10px] font-mono uppercase tracking-wider text-ink/50",children:a?"Connected":"Not configured"})]}),(0,n.FD)("div",{className:"p-3.5 space-y-4",children:[a?(0,n.FD)(n.FK,{children:[r&&(0,n.FD)("p",{className:"flex items-start gap-2 text-error text-xs leading-relaxed",children:[(0,n.Y)(l.A,{size:14,className:"shrink-0 mt-0.5"}),(0,n.Y)("span",{className:"break-words",children:r})]}),d]}):(0,n.FD)("div",{className:"flex items-start gap-2 text-ink/60 text-xs leading-relaxed",children:[(0,n.Y)(i,{size:14,className:"shrink-0 mt-0.5 text-ink/40"}),(0,n.FD)("p",{children:["Add the ",(0,n.Y)("span",{className:"font-semibold text-ink",children:t})," API key in Settings → Providers to see its balance, quota, and usage here."]})]}),s&&(0,n.Y)("p",{className:"text-[10px] text-ink/50 leading-relaxed border-t border-ink/10 pt-2.5",children:s})]})]})}var d=a("nj");let c=(0,r.A)({name:"ticket",size:24,node:[["path",{d:"M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z",key:"qn84l0"}],["path",{d:"M13 5v2",key:"dyzc3o"}],["path",{d:"M13 17v2",key:"1ont0d"}],["path",{d:"M13 11v2",key:"1wjjxi"}]]});var o=a("TW");function p(e){let{window:t}=e,a=t.usedRp+t.remainingRp,r=(0,o.Nk)(t.usedRp,a);return(0,n.FD)("div",{className:"bg-paper border border-ink/15 rounded-lg p-3 shadow-xs space-y-2",children:[(0,n.FD)("div",{className:"flex items-center justify-between gap-2",children:[(0,n.Y)("span",{className:"text-[11px] font-semibold text-ink",children:t.label}),(0,n.FD)("span",{className:"text-[10px] text-ink/50",children:["Resets ",(0,o.r6)(t.resetsAt)]})]}),(0,n.Y)("div",{className:"h-1.5 w-full bg-ink/10 rounded-full overflow-hidden",children:(0,n.Y)("div",{className:"h-full bg-ink/80 rounded-full",style:{width:`${r}%`}})}),(0,n.FD)("div",{className:"flex flex-wrap items-center justify-between gap-x-3 gap-y-0.5 text-[10px] text-ink/60",children:[(0,n.FD)("span",{children:["Used ",(0,n.Y)("span",{className:"font-semibold text-ink",children:(0,o.QH)(t.usedRp)})," ·"," ",(0,o.l9)(t.usedRp,a)]}),(0,n.FD)("span",{children:["Remaining ",(0,n.Y)("span",{className:"font-semibold text-ink",children:(0,o.QH)(t.remainingRp)})]})]})]})}function m(e){let{coupon:t}=e;return(0,n.FD)("div",{className:"bg-ink/5 border border-ink/10 rounded-lg p-3 shadow-xs",children:[(0,n.FD)("div",{className:"flex items-center gap-1.5 mb-1.5",children:[(0,n.Y)(c,{size:12,className:"text-ink/60"}),(0,n.FD)("span",{className:"text-[11px] font-semibold text-ink",children:["Active coupon · ",t.name]})]}),(0,n.FD)("div",{className:"text-[10px] text-ink/60 space-y-0.5",children:[(0,n.FD)("div",{children:["Remaining"," ",(0,n.Y)("span",{className:"font-semibold text-ink",children:null===t.remainingRp?"Unlimited":(0,o.QH)(t.remainingRp)})," ","· Used ",(0,n.Y)("span",{className:"font-semibold text-ink",children:(0,o.QH)(t.usedRp)})]}),(0,n.FD)("div",{children:["Expires ",(0,o.r6)(t.expiresAt)]}),t.scopeModels.length>0&&(0,n.FD)("div",{children:["Models: ",t.scopeModels.join(", ")]})]})]})}function u(e){let{quota:t}=e;return t?(0,n.FD)("div",{className:"space-y-2",children:[(0,n.FD)("div",{className:"flex items-center justify-between gap-2",children:[(0,n.Y)("h4",{className:"text-[10px] font-mono font-semibold uppercase tracking-wider text-ink/40",children:"Quota windows"}),t.planName&&(0,n.FD)("span",{className:"text-[10px] text-ink/60",children:["Plan ",(0,n.Y)("span",{className:"font-semibold text-ink",children:t.planName})]})]}),0===t.windows.length?(0,n.Y)("p",{className:"text-[11px] text-ink/50",children:"No quota windows reported."}):(0,n.Y)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-2.5",children:t.windows.map(e=>(0,n.Y)(p,{window:e},e.key))}),t.coupon&&(0,n.Y)(m,{coupon:t.coupon})]}):(0,n.Y)("p",{className:"text-[11px] text-ink/50",children:"Quota data is not available for this account."})}function h(e){let{usage:t}=e;if(!t)return(0,n.Y)("p",{className:"text-[11px] text-ink/50",children:"The 30-day usage report is not available."});let a=t.rows.reduce((e,t)=>e+t.inputTokens,0),r=t.rows.reduce((e,t)=>e+t.outputTokens,0);return(0,n.FD)("div",{className:"space-y-2",children:[(0,n.Y)("h4",{className:"text-[10px] font-mono font-semibold uppercase tracking-wider text-ink/40",children:"30-day usage by model"}),(0,n.Y)("div",{className:"overflow-x-auto border border-ink/15 rounded-lg shadow-xs",children:(0,n.FD)("table",{className:"w-full text-[11px]",children:[(0,n.Y)("thead",{className:"bg-ink/5 text-ink/60",children:(0,n.FD)("tr",{children:[(0,n.Y)("th",{className:"text-left font-semibold px-3 py-2 whitespace-nowrap",children:"Model"}),(0,n.Y)("th",{className:"text-right font-semibold px-3 py-2 whitespace-nowrap",children:"Requests"}),(0,n.Y)("th",{className:"text-right font-semibold px-3 py-2 whitespace-nowrap",children:"Input tokens"}),(0,n.Y)("th",{className:"text-right font-semibold px-3 py-2 whitespace-nowrap",children:"Output tokens"}),(0,n.Y)("th",{className:"text-right font-semibold px-3 py-2 whitespace-nowrap",children:"Cost"})]})}),(0,n.Y)("tbody",{className:"divide-y divide-ink/10",children:0===t.rows.length?(0,n.Y)("tr",{children:(0,n.Y)("td",{colSpan:5,className:"px-3 py-3 text-center text-ink/50",children:"No usage recorded in the last 30 days."})}):t.rows.map(e=>(0,n.FD)("tr",{children:[(0,n.Y)("td",{className:"px-3 py-1.5 font-mono text-ink whitespace-nowrap",children:e.model}),(0,n.Y)("td",{className:"px-3 py-1.5 text-right tabular-nums text-ink/80",children:(0,o.ZV)(e.requests)}),(0,n.Y)("td",{className:"px-3 py-1.5 text-right tabular-nums text-ink/80",children:(0,o.Rk)(e.inputTokens)}),(0,n.Y)("td",{className:"px-3 py-1.5 text-right tabular-nums text-ink/80",children:(0,o.Rk)(e.outputTokens)}),(0,n.Y)("td",{className:"px-3 py-1.5 text-right tabular-nums text-ink/80",children:(0,o.QH)(e.costRp)})]},e.model))}),(0,n.Y)("tfoot",{className:"bg-ink/5 border-t border-ink/15 font-semibold text-ink",children:(0,n.FD)("tr",{children:[(0,n.Y)("td",{className:"px-3 py-2",children:"Total"}),(0,n.Y)("td",{className:"px-3 py-2 text-right tabular-nums",children:(0,o.ZV)(t.totalRequests)}),(0,n.Y)("td",{className:"px-3 py-2 text-right tabular-nums",children:(0,o.Rk)(a)}),(0,n.Y)("td",{className:"px-3 py-2 text-right tabular-nums",children:(0,o.Rk)(r)}),(0,n.Y)("td",{className:"px-3 py-2 text-right tabular-nums",children:(0,o.QH)(t.totalCostRp)})]})})]})})]})}function x(e){let{report:t}=e,{balance:a,usage:r,quota:i}=t;if(!a&&!r&&!i)return(0,n.Y)("p",{className:"text-[11px] text-ink/50",children:"No kenari data was returned for this account."});let l=a?null!==a.amountRp?(0,o.QH)(a.amountRp):a.raw:"—",s=a?null!==a.amountRp?a.raw:"Amount could not be parsed":"Balance unavailable",c=r?r.rows.reduce((e,t)=>e+t.inputTokens+t.outputTokens,0):0;return(0,n.FD)(n.FK,{children:[(0,n.Y)("div",{className:"@container",children:(0,n.FD)("div",{className:"grid grid-cols-3 @[540px]:grid-cols-5 gap-2.5 items-stretch",children:[(0,n.Y)(d.h,{value:l,label:"Wallet balance",hint:s}),(0,n.Y)(d.h,{value:i?.planName??"—",label:"Active plan",hint:i?"kenari quota plan":"Quota unavailable"}),(0,n.Y)(d.h,{value:r?(0,o.ZV)(r.totalRequests):"—",label:"Requests (30 days)",hint:r?"Across all models":"Usage report unavailable"}),(0,n.Y)(d.h,{value:r?(0,o.QH)(r.totalCostRp):"—",label:"Cost (30 days)",hint:r?"Billed in Rupiah":"Usage report unavailable"}),(0,n.Y)(d.h,{value:r?(0,o.Rk)(c):"—",label:"Tokens processed (30 days)",hint:r?"Input + output":"Usage report unavailable",tone:"muted",className:"col-span-2 @[540px]:col-span-1"})]})}),(0,n.Y)(u,{quota:i}),(0,n.Y)(h,{usage:r})]})}function b(e){let{report:t}=e,a=t.balance;return a?(0,n.FD)(n.FK,{children:[(0,n.Y)("div",{className:"@container",children:(0,n.FD)("div",{className:"grid grid-cols-3 @[540px]:grid-cols-5 gap-2.5 items-stretch",children:[(0,n.Y)(d.h,{value:a.isAvailable?"Available":"Unavailable",label:"Prepaid balance",hint:a.isAvailable?"Account can spend":"Top up required",tone:a.isAvailable?"default":"muted"}),(0,n.Y)(d.h,{value:(0,o.ZV)(a.entries.length),label:"Currency buckets",hint:a.entries.length>0?"From the balance endpoint":"No entries returned",tone:"muted"})]})}),0===a.entries.length?(0,n.Y)("p",{className:"text-[11px] text-ink/50",children:"The balance endpoint returned no currency entries."}):(0,n.Y)("div",{className:"grid grid-cols-1 gap-2.5",children:a.entries.map(e=>(0,n.FD)("div",{className:"bg-paper border border-ink/15 rounded-lg p-3 shadow-xs",children:[(0,n.FD)("div",{className:"flex items-center justify-between gap-2 mb-2",children:[(0,n.Y)("span",{className:"text-[11px] font-semibold text-ink",children:e.currency}),(0,n.Y)("span",{className:"text-[10px] font-mono uppercase tracking-wider text-ink/40",children:"Balance"})]}),(0,n.FD)("dl",{className:"grid grid-cols-3 gap-2 text-[10px]",children:[(0,n.FD)("div",{children:[(0,n.Y)("dt",{className:"text-ink/50",children:"Total"}),(0,n.Y)("dd",{className:"font-semibold text-ink tabular-nums break-words",children:(0,o.ej)(e.totalBalance)})]}),(0,n.FD)("div",{children:[(0,n.Y)("dt",{className:"text-ink/50",children:"Granted"}),(0,n.Y)("dd",{className:"font-semibold text-ink tabular-nums break-words",children:(0,o.ej)(e.grantedBalance)})]}),(0,n.FD)("div",{children:[(0,n.Y)("dt",{className:"text-ink/50",children:"Topped up"}),(0,n.Y)("dd",{className:"font-semibold text-ink tabular-nums break-words",children:(0,o.ej)(e.toppedUpBalance)})]})]})]},e.currency))})]}):(0,n.Y)("p",{className:"text-[11px] text-ink/50",children:"DeepSeek balance data is not available."})}function k(e){let{providerId:t,report:a}=e;return"kenari"===t?(0,n.Y)(s,{providerName:"Kenari.id",configured:a.kenari.configured,error:a.kenari.error,children:(0,n.Y)(x,{report:a.kenari})}):(0,n.Y)(s,{providerName:"DeepSeek",configured:a.deepseek.configured,error:a.deepseek.error,note:"DeepSeek exposes no usage or quota API — only the prepaid balance (and the web console at platform.deepseek.com) is available.",children:(0,n.Y)(b,{report:a.deepseek})})}},TW(e,t,a){let n=new Intl.NumberFormat("id-ID",{style:"currency",currency:"IDR",maximumFractionDigits:0}),r=new Intl.NumberFormat("id-ID"),i=new Intl.NumberFormat("id-ID",{minimumFractionDigits:2,maximumFractionDigits:2,useGrouping:!1}),l=new Intl.DateTimeFormat("id-ID",{dateStyle:"medium",timeStyle:"short"});function s(e){return n.format(e)}function d(e){return r.format(e)}function c(e){let t=new Date(e);return Number.isNaN(t.getTime())?e:l.format(t)}function o(e,t){return t<=0?0:Math.min(100,Math.max(0,e/t*100))}function p(e,t){return t<=0?"0%":`${new Intl.NumberFormat("id-ID",{maximumFractionDigits:1}).format(e/t*100)}%`}function m(e){if(!Number.isFinite(e))return"0";let t=Math.abs(e);return t>=1e9?`${i.format(e/1e9)}B`:t>=1e6?`${i.format(e/1e6)}M`:t>=1e3?`${i.format(e/1e3)}K`:d(e)}function u(e){let t=Number(e);return""!==e.trim()&&Number.isFinite(t)?d(t):e}a.d(t,{Nk:()=>o,QH:()=>s,Rk:()=>m,ZV:()=>d,ej:()=>u,l9:()=>p,r6:()=>c})},hm(e,t,a){var n=a("TW");function r(e){let t=e.kenari.quota?.planName,a=e.deepseek.balance?.entries[0];return[{id:"kenari",name:"Kenari.id",configured:e.kenari.configured,error:e.kenari.error,hint:t??"Wallet & quota"},{id:"deepseek",name:"DeepSeek",configured:e.deepseek.configured,error:e.deepseek.error,hint:a?`${a.currency} ${(0,n.ej)(a.totalBalance)}`:"Prepaid balance"}]}function i(e){return e.configured?e.error?"Error":"Connected":"Not configured"}a.d(t,{R:()=>i,T:()=>r})},uY(e,t,a){var n=a("H");function r(){let[e,t]=(0,n.J0)(null),[a,r]=(0,n.J0)(!0),[i,l]=(0,n.J0)(null),s=(0,n.hb)(async e=>{e?.silent||r(!0),l(null);try{let e=await fetch("/api/settings/usage");if(!e.ok)throw Error(`Usage request failed (${e.status})`);let a=await e.json();t(a)}catch(e){l(e instanceof Error?e.message:"Failed to load provider usage")}finally{e?.silent||r(!1)}},[]);return(0,n.vJ)(()=>{s()},[s]),{report:e,isLoading:a,error:i,reload:s}}a.d(t,{N:()=>r})}}]);
@@ -1,6 +0,0 @@
1
- /**
2
- * @license lucide-preact v1.47.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */