groove-dev 0.27.85 → 0.27.87

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 (507) hide show
  1. package/CLAUDE.md +10 -0
  2. package/moe-training/client/scrubber.js +4 -2
  3. package/moe-training/client/step-classifier.js +17 -0
  4. package/moe-training/client/trajectory-capture.js +80 -6
  5. package/moe-training/client/transmission-queue.js +11 -0
  6. package/moe-training/test/client/scrubber.test.js +14 -4
  7. package/moe-training/test/client/step-classifier.test.js +47 -0
  8. package/moe-training/test/client/transmission-queue.test.js +33 -0
  9. package/node_modules/@groove-dev/cli/bin/groove.js +10 -1
  10. package/node_modules/@groove-dev/cli/package.json +1 -1
  11. package/node_modules/@groove-dev/cli/src/commands/connect.js +116 -205
  12. package/node_modules/@groove-dev/cli/src/commands/disconnect.js +38 -62
  13. package/node_modules/@groove-dev/cli/src/commands/remotes.js +75 -0
  14. package/node_modules/@groove-dev/daemon/package.json +1 -1
  15. package/node_modules/@groove-dev/daemon/src/process.js +56 -1
  16. package/node_modules/@groove-dev/gui/dist/assets/index-BCQY8ojz.css +1 -0
  17. package/node_modules/@groove-dev/gui/dist/assets/index-C5e7KVGN.js +8637 -0
  18. package/node_modules/@groove-dev/gui/dist/index.html +2 -2
  19. package/node_modules/@groove-dev/gui/package.json +2 -1
  20. package/node_modules/@groove-dev/gui/src/components/preview/preview-workspace.jsx +6 -5
  21. package/node_modules/@groove-dev/gui/src/components/preview/screenshot-overlay.jsx +41 -29
  22. package/node_modules/@groove-dev/gui/src/stores/groove.js +6 -2
  23. package/node_modules/@groove-dev/gui/src/views/agents.jsx +15 -1
  24. package/node_modules/@groove-dev/gui/src/views/settings.jsx +104 -26
  25. package/node_modules/base64-arraybuffer/CHANGELOG.md +28 -0
  26. package/node_modules/base64-arraybuffer/LICENSE +22 -0
  27. package/node_modules/base64-arraybuffer/README.md +27 -0
  28. package/node_modules/base64-arraybuffer/dist/base64-arraybuffer.es5.js +50 -0
  29. package/node_modules/base64-arraybuffer/dist/base64-arraybuffer.es5.js.map +1 -0
  30. package/node_modules/base64-arraybuffer/dist/base64-arraybuffer.umd.js +61 -0
  31. package/node_modules/base64-arraybuffer/dist/base64-arraybuffer.umd.js.map +1 -0
  32. package/node_modules/base64-arraybuffer/dist/lib/index.js +48 -0
  33. package/node_modules/base64-arraybuffer/dist/lib/index.js.map +1 -0
  34. package/node_modules/base64-arraybuffer/dist/types/index.d.ts +2 -0
  35. package/node_modules/base64-arraybuffer/package.json +54 -0
  36. package/node_modules/base64-arraybuffer/rollup.config.ts +40 -0
  37. package/node_modules/css-line-break/CHANGELOG.md +58 -0
  38. package/node_modules/css-line-break/LICENSE +22 -0
  39. package/node_modules/css-line-break/README.md +66 -0
  40. package/node_modules/css-line-break/dist/css-line-break.es5.js +706 -0
  41. package/node_modules/css-line-break/dist/css-line-break.es5.js.map +1 -0
  42. package/node_modules/css-line-break/dist/css-line-break.umd.js +718 -0
  43. package/node_modules/css-line-break/dist/css-line-break.umd.js.map +1 -0
  44. package/node_modules/css-line-break/dist/lib/LineBreak.js +516 -0
  45. package/node_modules/css-line-break/dist/lib/LineBreak.js.map +1 -0
  46. package/node_modules/css-line-break/dist/lib/Util.js +109 -0
  47. package/node_modules/css-line-break/dist/lib/Util.js.map +1 -0
  48. package/node_modules/css-line-break/dist/lib/index.js +9 -0
  49. package/node_modules/css-line-break/dist/lib/index.js.map +1 -0
  50. package/node_modules/css-line-break/dist/lib/linebreak-trie.js +6 -0
  51. package/node_modules/css-line-break/dist/lib/linebreak-trie.js.map +1 -0
  52. package/node_modules/css-line-break/dist/types/LineBreak.d.ts +38 -0
  53. package/node_modules/css-line-break/dist/types/Util.d.ts +5 -0
  54. package/node_modules/css-line-break/dist/types/index.d.ts +2 -0
  55. package/node_modules/css-line-break/dist/types/linebreak-trie.d.ts +2 -0
  56. package/node_modules/css-line-break/package.json +61 -0
  57. package/node_modules/css-line-break/rollup.config.ts +40 -0
  58. package/node_modules/html2canvas/CHANGELOG.md +566 -0
  59. package/node_modules/html2canvas/LICENSE +22 -0
  60. package/node_modules/html2canvas/README.md +73 -0
  61. package/node_modules/html2canvas/dist/html2canvas.esm.js +7822 -0
  62. package/node_modules/html2canvas/dist/html2canvas.esm.js.map +1 -0
  63. package/node_modules/html2canvas/dist/html2canvas.js +7830 -0
  64. package/node_modules/html2canvas/dist/html2canvas.js.map +1 -0
  65. package/node_modules/html2canvas/dist/html2canvas.min.js +20 -0
  66. package/node_modules/html2canvas/dist/lib/__tests__/index.js +144 -0
  67. package/node_modules/html2canvas/dist/lib/__tests__/index.js.map +1 -0
  68. package/node_modules/html2canvas/dist/lib/core/__mocks__/cache-storage.js +10 -0
  69. package/node_modules/html2canvas/dist/lib/core/__mocks__/cache-storage.js.map +1 -0
  70. package/node_modules/html2canvas/dist/lib/core/__mocks__/context.js +22 -0
  71. package/node_modules/html2canvas/dist/lib/core/__mocks__/context.js.map +1 -0
  72. package/node_modules/html2canvas/dist/lib/core/__mocks__/features.js +12 -0
  73. package/node_modules/html2canvas/dist/lib/core/__mocks__/features.js.map +1 -0
  74. package/node_modules/html2canvas/dist/lib/core/__mocks__/logger.js +24 -0
  75. package/node_modules/html2canvas/dist/lib/core/__mocks__/logger.js.map +1 -0
  76. package/node_modules/html2canvas/dist/lib/core/__tests__/cache-storage.js +420 -0
  77. package/node_modules/html2canvas/dist/lib/core/__tests__/cache-storage.js.map +1 -0
  78. package/node_modules/html2canvas/dist/lib/core/__tests__/logger.js +28 -0
  79. package/node_modules/html2canvas/dist/lib/core/__tests__/logger.js.map +1 -0
  80. package/node_modules/html2canvas/dist/lib/core/bitwise.js +6 -0
  81. package/node_modules/html2canvas/dist/lib/core/bitwise.js.map +1 -0
  82. package/node_modules/html2canvas/dist/lib/core/cache-storage.js +198 -0
  83. package/node_modules/html2canvas/dist/lib/core/cache-storage.js.map +1 -0
  84. package/node_modules/html2canvas/dist/lib/core/context.js +18 -0
  85. package/node_modules/html2canvas/dist/lib/core/context.js.map +1 -0
  86. package/node_modules/html2canvas/dist/lib/core/debugger.js +25 -0
  87. package/node_modules/html2canvas/dist/lib/core/debugger.js.map +1 -0
  88. package/node_modules/html2canvas/dist/lib/core/features.js +193 -0
  89. package/node_modules/html2canvas/dist/lib/core/features.js.map +1 -0
  90. package/node_modules/html2canvas/dist/lib/core/logger.js +88 -0
  91. package/node_modules/html2canvas/dist/lib/core/logger.js.map +1 -0
  92. package/node_modules/html2canvas/dist/lib/core/util.js +5 -0
  93. package/node_modules/html2canvas/dist/lib/core/util.js.map +1 -0
  94. package/node_modules/html2canvas/dist/lib/css/IPropertyDescriptor.js +3 -0
  95. package/node_modules/html2canvas/dist/lib/css/IPropertyDescriptor.js.map +1 -0
  96. package/node_modules/html2canvas/dist/lib/css/ITypeDescriptor.js +3 -0
  97. package/node_modules/html2canvas/dist/lib/css/ITypeDescriptor.js.map +1 -0
  98. package/node_modules/html2canvas/dist/lib/css/index.js +216 -0
  99. package/node_modules/html2canvas/dist/lib/css/index.js.map +1 -0
  100. package/node_modules/html2canvas/dist/lib/css/layout/__mocks__/bounds.js +9 -0
  101. package/node_modules/html2canvas/dist/lib/css/layout/__mocks__/bounds.js.map +1 -0
  102. package/node_modules/html2canvas/dist/lib/css/layout/bounds.js +42 -0
  103. package/node_modules/html2canvas/dist/lib/css/layout/bounds.js.map +1 -0
  104. package/node_modules/html2canvas/dist/lib/css/layout/text.js +137 -0
  105. package/node_modules/html2canvas/dist/lib/css/layout/text.js.map +1 -0
  106. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/background-tests.js +48 -0
  107. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/background-tests.js.map +1 -0
  108. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/font-family.js +25 -0
  109. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/font-family.js.map +1 -0
  110. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/paint-order.js +88 -0
  111. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/paint-order.js.map +1 -0
  112. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/text-shadow.js +94 -0
  113. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/text-shadow.js.map +1 -0
  114. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/transform-tests.js +18 -0
  115. package/node_modules/html2canvas/dist/lib/css/property-descriptors/__tests__/transform-tests.js.map +1 -0
  116. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-clip.js +24 -0
  117. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-clip.js.map +1 -0
  118. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-color.js +11 -0
  119. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-color.js.map +1 -0
  120. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-image.js +24 -0
  121. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-image.js.map +1 -0
  122. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-origin.js +24 -0
  123. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-origin.js.map +1 -0
  124. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-position.js +17 -0
  125. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-position.js.map +1 -0
  126. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-repeat.js +36 -0
  127. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-repeat.js.map +1 -0
  128. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-size.js +24 -0
  129. package/node_modules/html2canvas/dist/lib/css/property-descriptors/background-size.js.map +1 -0
  130. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-color.js +15 -0
  131. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-color.js.map +1 -0
  132. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-radius.js +18 -0
  133. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-radius.js.map +1 -0
  134. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-style.js +27 -0
  135. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-style.js.map +1 -0
  136. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-width.js +21 -0
  137. package/node_modules/html2canvas/dist/lib/css/property-descriptors/border-width.js.map +1 -0
  138. package/node_modules/html2canvas/dist/lib/css/property-descriptors/box-shadow.js +55 -0
  139. package/node_modules/html2canvas/dist/lib/css/property-descriptors/box-shadow.js.map +1 -0
  140. package/node_modules/html2canvas/dist/lib/css/property-descriptors/color.js +11 -0
  141. package/node_modules/html2canvas/dist/lib/css/property-descriptors/color.js.map +1 -0
  142. package/node_modules/html2canvas/dist/lib/css/property-descriptors/content.js +20 -0
  143. package/node_modules/html2canvas/dist/lib/css/property-descriptors/content.js.map +1 -0
  144. package/node_modules/html2canvas/dist/lib/css/property-descriptors/counter-increment.js +31 -0
  145. package/node_modules/html2canvas/dist/lib/css/property-descriptors/counter-increment.js.map +1 -0
  146. package/node_modules/html2canvas/dist/lib/css/property-descriptors/counter-reset.js +27 -0
  147. package/node_modules/html2canvas/dist/lib/css/property-descriptors/counter-reset.js.map +1 -0
  148. package/node_modules/html2canvas/dist/lib/css/property-descriptors/direction.js +19 -0
  149. package/node_modules/html2canvas/dist/lib/css/property-descriptors/direction.js.map +1 -0
  150. package/node_modules/html2canvas/dist/lib/css/property-descriptors/display.js +82 -0
  151. package/node_modules/html2canvas/dist/lib/css/property-descriptors/display.js.map +1 -0
  152. package/node_modules/html2canvas/dist/lib/css/property-descriptors/duration.js +15 -0
  153. package/node_modules/html2canvas/dist/lib/css/property-descriptors/duration.js.map +1 -0
  154. package/node_modules/html2canvas/dist/lib/css/property-descriptors/float.js +23 -0
  155. package/node_modules/html2canvas/dist/lib/css/property-descriptors/float.js.map +1 -0
  156. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-family.js +33 -0
  157. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-family.js.map +1 -0
  158. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-size.js +11 -0
  159. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-size.js.map +1 -0
  160. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-style.js +21 -0
  161. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-style.js.map +1 -0
  162. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-variant.js +14 -0
  163. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-variant.js.map +1 -0
  164. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-weight.js +26 -0
  165. package/node_modules/html2canvas/dist/lib/css/property-descriptors/font-weight.js.map +1 -0
  166. package/node_modules/html2canvas/dist/lib/css/property-descriptors/letter-spacing.js +22 -0
  167. package/node_modules/html2canvas/dist/lib/css/property-descriptors/letter-spacing.js.map +1 -0
  168. package/node_modules/html2canvas/dist/lib/css/property-descriptors/line-break.js +24 -0
  169. package/node_modules/html2canvas/dist/lib/css/property-descriptors/line-break.js.map +1 -0
  170. package/node_modules/html2canvas/dist/lib/css/property-descriptors/line-height.js +25 -0
  171. package/node_modules/html2canvas/dist/lib/css/property-descriptors/line-height.js.map +1 -0
  172. package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-image.js +17 -0
  173. package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-image.js.map +1 -0
  174. package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-position.js +19 -0
  175. package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-position.js.map +1 -0
  176. package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-type.js +123 -0
  177. package/node_modules/html2canvas/dist/lib/css/property-descriptors/list-style-type.js.map +1 -0
  178. package/node_modules/html2canvas/dist/lib/css/property-descriptors/margin.js +14 -0
  179. package/node_modules/html2canvas/dist/lib/css/property-descriptors/margin.js.map +1 -0
  180. package/node_modules/html2canvas/dist/lib/css/property-descriptors/opacity.js +17 -0
  181. package/node_modules/html2canvas/dist/lib/css/property-descriptors/opacity.js.map +1 -0
  182. package/node_modules/html2canvas/dist/lib/css/property-descriptors/overflow-wrap.js +19 -0
  183. package/node_modules/html2canvas/dist/lib/css/property-descriptors/overflow-wrap.js.map +1 -0
  184. package/node_modules/html2canvas/dist/lib/css/property-descriptors/overflow.js +28 -0
  185. package/node_modules/html2canvas/dist/lib/css/property-descriptors/overflow.js.map +1 -0
  186. package/node_modules/html2canvas/dist/lib/css/property-descriptors/padding.js +15 -0
  187. package/node_modules/html2canvas/dist/lib/css/property-descriptors/padding.js.map +1 -0
  188. package/node_modules/html2canvas/dist/lib/css/property-descriptors/paint-order.js +34 -0
  189. package/node_modules/html2canvas/dist/lib/css/property-descriptors/paint-order.js.map +1 -0
  190. package/node_modules/html2canvas/dist/lib/css/property-descriptors/position.js +23 -0
  191. package/node_modules/html2canvas/dist/lib/css/property-descriptors/position.js.map +1 -0
  192. package/node_modules/html2canvas/dist/lib/css/property-descriptors/quotes.js +42 -0
  193. package/node_modules/html2canvas/dist/lib/css/property-descriptors/quotes.js.map +1 -0
  194. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-align.js +22 -0
  195. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-align.js.map +1 -0
  196. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-decoration-color.js +11 -0
  197. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-decoration-color.js.map +1 -0
  198. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-decoration-line.js +29 -0
  199. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-decoration-line.js.map +1 -0
  200. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-shadow.js +47 -0
  201. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-shadow.js.map +1 -0
  202. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-transform.js +21 -0
  203. package/node_modules/html2canvas/dist/lib/css/property-descriptors/text-transform.js.map +1 -0
  204. package/node_modules/html2canvas/dist/lib/css/property-descriptors/transform-origin.js +25 -0
  205. package/node_modules/html2canvas/dist/lib/css/property-descriptors/transform-origin.js.map +1 -0
  206. package/node_modules/html2canvas/dist/lib/css/property-descriptors/transform.js +37 -0
  207. package/node_modules/html2canvas/dist/lib/css/property-descriptors/transform.js.map +1 -0
  208. package/node_modules/html2canvas/dist/lib/css/property-descriptors/visibility.js +21 -0
  209. package/node_modules/html2canvas/dist/lib/css/property-descriptors/visibility.js.map +1 -0
  210. package/node_modules/html2canvas/dist/lib/css/property-descriptors/webkit-text-stroke-color.js +11 -0
  211. package/node_modules/html2canvas/dist/lib/css/property-descriptors/webkit-text-stroke-color.js.map +1 -0
  212. package/node_modules/html2canvas/dist/lib/css/property-descriptors/webkit-text-stroke-width.js +17 -0
  213. package/node_modules/html2canvas/dist/lib/css/property-descriptors/webkit-text-stroke-width.js.map +1 -0
  214. package/node_modules/html2canvas/dist/lib/css/property-descriptors/word-break.js +27 -0
  215. package/node_modules/html2canvas/dist/lib/css/property-descriptors/word-break.js.map +1 -0
  216. package/node_modules/html2canvas/dist/lib/css/property-descriptors/z-index.js +20 -0
  217. package/node_modules/html2canvas/dist/lib/css/property-descriptors/z-index.js.map +1 -0
  218. package/node_modules/html2canvas/dist/lib/css/syntax/__tests__/tokernizer-tests.js +34 -0
  219. package/node_modules/html2canvas/dist/lib/css/syntax/__tests__/tokernizer-tests.js.map +1 -0
  220. package/node_modules/html2canvas/dist/lib/css/syntax/parser.js +147 -0
  221. package/node_modules/html2canvas/dist/lib/css/syntax/parser.js.map +1 -0
  222. package/node_modules/html2canvas/dist/lib/css/syntax/tokenizer.js +630 -0
  223. package/node_modules/html2canvas/dist/lib/css/syntax/tokenizer.js.map +1 -0
  224. package/node_modules/html2canvas/dist/lib/css/types/__tests__/color-tests.js +66 -0
  225. package/node_modules/html2canvas/dist/lib/css/types/__tests__/color-tests.js.map +1 -0
  226. package/node_modules/html2canvas/dist/lib/css/types/__tests__/image-tests.js +233 -0
  227. package/node_modules/html2canvas/dist/lib/css/types/__tests__/image-tests.js.map +1 -0
  228. package/node_modules/html2canvas/dist/lib/css/types/angle.js +81 -0
  229. package/node_modules/html2canvas/dist/lib/css/types/angle.js.map +1 -0
  230. package/node_modules/html2canvas/dist/lib/css/types/color.js +288 -0
  231. package/node_modules/html2canvas/dist/lib/css/types/color.js.map +1 -0
  232. package/node_modules/html2canvas/dist/lib/css/types/functions/-prefix-linear-gradient.js +33 -0
  233. package/node_modules/html2canvas/dist/lib/css/types/functions/-prefix-linear-gradient.js.map +1 -0
  234. package/node_modules/html2canvas/dist/lib/css/types/functions/-prefix-radial-gradient.js +84 -0
  235. package/node_modules/html2canvas/dist/lib/css/types/functions/-prefix-radial-gradient.js.map +1 -0
  236. package/node_modules/html2canvas/dist/lib/css/types/functions/-webkit-gradient.js +60 -0
  237. package/node_modules/html2canvas/dist/lib/css/types/functions/-webkit-gradient.js.map +1 -0
  238. package/node_modules/html2canvas/dist/lib/css/types/functions/__tests__/radial-gradient.js +68 -0
  239. package/node_modules/html2canvas/dist/lib/css/types/functions/__tests__/radial-gradient.js.map +1 -0
  240. package/node_modules/html2canvas/dist/lib/css/types/functions/counter.js +374 -0
  241. package/node_modules/html2canvas/dist/lib/css/types/functions/counter.js.map +1 -0
  242. package/node_modules/html2canvas/dist/lib/css/types/functions/gradient.js +165 -0
  243. package/node_modules/html2canvas/dist/lib/css/types/functions/gradient.js.map +1 -0
  244. package/node_modules/html2canvas/dist/lib/css/types/functions/linear-gradient.js +28 -0
  245. package/node_modules/html2canvas/dist/lib/css/types/functions/linear-gradient.js.map +1 -0
  246. package/node_modules/html2canvas/dist/lib/css/types/functions/radial-gradient.js +91 -0
  247. package/node_modules/html2canvas/dist/lib/css/types/functions/radial-gradient.js.map +1 -0
  248. package/node_modules/html2canvas/dist/lib/css/types/image.js +53 -0
  249. package/node_modules/html2canvas/dist/lib/css/types/image.js.map +1 -0
  250. package/node_modules/html2canvas/dist/lib/css/types/index.js +3 -0
  251. package/node_modules/html2canvas/dist/lib/css/types/index.js.map +1 -0
  252. package/node_modules/html2canvas/dist/lib/css/types/length-percentage.js +52 -0
  253. package/node_modules/html2canvas/dist/lib/css/types/length-percentage.js.map +1 -0
  254. package/node_modules/html2canvas/dist/lib/css/types/length.js +8 -0
  255. package/node_modules/html2canvas/dist/lib/css/types/length.js.map +1 -0
  256. package/node_modules/html2canvas/dist/lib/css/types/time.js +18 -0
  257. package/node_modules/html2canvas/dist/lib/css/types/time.js.map +1 -0
  258. package/node_modules/html2canvas/dist/lib/dom/__mocks__/document-cloner.js +24 -0
  259. package/node_modules/html2canvas/dist/lib/dom/__mocks__/document-cloner.js.map +1 -0
  260. package/node_modules/html2canvas/dist/lib/dom/document-cloner.js +530 -0
  261. package/node_modules/html2canvas/dist/lib/dom/document-cloner.js.map +1 -0
  262. package/node_modules/html2canvas/dist/lib/dom/element-container.js +35 -0
  263. package/node_modules/html2canvas/dist/lib/dom/element-container.js.map +1 -0
  264. package/node_modules/html2canvas/dist/lib/dom/elements/li-element-container.js +30 -0
  265. package/node_modules/html2canvas/dist/lib/dom/elements/li-element-container.js.map +1 -0
  266. package/node_modules/html2canvas/dist/lib/dom/elements/ol-element-container.js +31 -0
  267. package/node_modules/html2canvas/dist/lib/dom/elements/ol-element-container.js.map +1 -0
  268. package/node_modules/html2canvas/dist/lib/dom/elements/select-element-container.js +31 -0
  269. package/node_modules/html2canvas/dist/lib/dom/elements/select-element-container.js.map +1 -0
  270. package/node_modules/html2canvas/dist/lib/dom/elements/textarea-element-container.js +30 -0
  271. package/node_modules/html2canvas/dist/lib/dom/elements/textarea-element-container.js.map +1 -0
  272. package/node_modules/html2canvas/dist/lib/dom/node-parser.js +142 -0
  273. package/node_modules/html2canvas/dist/lib/dom/node-parser.js.map +1 -0
  274. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/canvas-element-container.js +32 -0
  275. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/canvas-element-container.js.map +1 -0
  276. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/iframe-element-container.js +55 -0
  277. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/iframe-element-container.js.map +1 -0
  278. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/image-element-container.js +33 -0
  279. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/image-element-container.js.map +1 -0
  280. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/index.js +3 -0
  281. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/index.js.map +1 -0
  282. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/input-element-container.js +102 -0
  283. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/input-element-container.js.map +1 -0
  284. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/pseudo-elements.js +1 -0
  285. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/pseudo-elements.js.map +1 -0
  286. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/svg-element-container.js +38 -0
  287. package/node_modules/html2canvas/dist/lib/dom/replaced-elements/svg-element-container.js.map +1 -0
  288. package/node_modules/html2canvas/dist/lib/dom/text-container.js +32 -0
  289. package/node_modules/html2canvas/dist/lib/dom/text-container.js.map +1 -0
  290. package/node_modules/html2canvas/dist/lib/index.js +181 -0
  291. package/node_modules/html2canvas/dist/lib/index.js.map +1 -0
  292. package/node_modules/html2canvas/dist/lib/invariant.js +10 -0
  293. package/node_modules/html2canvas/dist/lib/invariant.js.map +1 -0
  294. package/node_modules/html2canvas/dist/lib/render/background.js +187 -0
  295. package/node_modules/html2canvas/dist/lib/render/background.js.map +1 -0
  296. package/node_modules/html2canvas/dist/lib/render/bezier-curve.js +36 -0
  297. package/node_modules/html2canvas/dist/lib/render/bezier-curve.js.map +1 -0
  298. package/node_modules/html2canvas/dist/lib/render/border.js +105 -0
  299. package/node_modules/html2canvas/dist/lib/render/border.js.map +1 -0
  300. package/node_modules/html2canvas/dist/lib/render/bound-curves.js +190 -0
  301. package/node_modules/html2canvas/dist/lib/render/bound-curves.js.map +1 -0
  302. package/node_modules/html2canvas/dist/lib/render/box-sizing.js +21 -0
  303. package/node_modules/html2canvas/dist/lib/render/box-sizing.js.map +1 -0
  304. package/node_modules/html2canvas/dist/lib/render/canvas/canvas-renderer.js +1030 -0
  305. package/node_modules/html2canvas/dist/lib/render/canvas/canvas-renderer.js.map +1 -0
  306. package/node_modules/html2canvas/dist/lib/render/canvas/foreignobject-renderer.js +108 -0
  307. package/node_modules/html2canvas/dist/lib/render/canvas/foreignobject-renderer.js.map +1 -0
  308. package/node_modules/html2canvas/dist/lib/render/effects.js +41 -0
  309. package/node_modules/html2canvas/dist/lib/render/effects.js.map +1 -0
  310. package/node_modules/html2canvas/dist/lib/render/font-metrics.js +55 -0
  311. package/node_modules/html2canvas/dist/lib/render/font-metrics.js.map +1 -0
  312. package/node_modules/html2canvas/dist/lib/render/path.js +27 -0
  313. package/node_modules/html2canvas/dist/lib/render/path.js.map +1 -0
  314. package/node_modules/html2canvas/dist/lib/render/renderer.js +12 -0
  315. package/node_modules/html2canvas/dist/lib/render/renderer.js.map +1 -0
  316. package/node_modules/html2canvas/dist/lib/render/stacking-context.js +172 -0
  317. package/node_modules/html2canvas/dist/lib/render/stacking-context.js.map +1 -0
  318. package/node_modules/html2canvas/dist/lib/render/vector.js +18 -0
  319. package/node_modules/html2canvas/dist/lib/render/vector.js.map +1 -0
  320. package/node_modules/html2canvas/dist/types/__tests__/index.d.ts +1 -0
  321. package/node_modules/html2canvas/dist/types/core/__mocks__/cache-storage.d.ts +2 -0
  322. package/node_modules/html2canvas/dist/types/core/__mocks__/context.d.ts +9 -0
  323. package/node_modules/html2canvas/dist/types/core/__mocks__/features.d.ts +8 -0
  324. package/node_modules/html2canvas/dist/types/core/__mocks__/logger.d.ts +9 -0
  325. package/node_modules/html2canvas/dist/types/core/__tests__/cache-storage.d.ts +1 -0
  326. package/node_modules/html2canvas/dist/types/core/__tests__/logger.d.ts +1 -0
  327. package/node_modules/html2canvas/dist/types/core/bitwise.d.ts +1 -0
  328. package/node_modules/html2canvas/dist/types/core/cache-storage.d.ts +26 -0
  329. package/node_modules/html2canvas/dist/types/core/context.d.ts +15 -0
  330. package/node_modules/html2canvas/dist/types/core/debugger.d.ts +8 -0
  331. package/node_modules/html2canvas/dist/types/core/features.d.ts +12 -0
  332. package/node_modules/html2canvas/dist/types/core/logger.d.ts +18 -0
  333. package/node_modules/html2canvas/dist/types/core/util.d.ts +1 -0
  334. package/node_modules/html2canvas/dist/types/css/IPropertyDescriptor.d.ts +36 -0
  335. package/node_modules/html2canvas/dist/types/css/ITypeDescriptor.d.ts +6 -0
  336. package/node_modules/html2canvas/dist/types/css/index.d.ts +132 -0
  337. package/node_modules/html2canvas/dist/types/css/layout/__mocks__/bounds.d.ts +2 -0
  338. package/node_modules/html2canvas/dist/types/css/layout/bounds.d.ts +14 -0
  339. package/node_modules/html2canvas/dist/types/css/layout/text.d.ts +10 -0
  340. package/node_modules/html2canvas/dist/types/css/property-descriptors/__tests__/background-tests.d.ts +1 -0
  341. package/node_modules/html2canvas/dist/types/css/property-descriptors/__tests__/font-family.d.ts +1 -0
  342. package/node_modules/html2canvas/dist/types/css/property-descriptors/__tests__/paint-order.d.ts +1 -0
  343. package/node_modules/html2canvas/dist/types/css/property-descriptors/__tests__/text-shadow.d.ts +1 -0
  344. package/node_modules/html2canvas/dist/types/css/property-descriptors/__tests__/transform-tests.d.ts +1 -0
  345. package/node_modules/html2canvas/dist/types/css/property-descriptors/background-clip.d.ts +8 -0
  346. package/node_modules/html2canvas/dist/types/css/property-descriptors/background-color.d.ts +2 -0
  347. package/node_modules/html2canvas/dist/types/css/property-descriptors/background-image.d.ts +3 -0
  348. package/node_modules/html2canvas/dist/types/css/property-descriptors/background-origin.d.ts +8 -0
  349. package/node_modules/html2canvas/dist/types/css/property-descriptors/background-position.d.ts +5 -0
  350. package/node_modules/html2canvas/dist/types/css/property-descriptors/background-repeat.d.ts +9 -0
  351. package/node_modules/html2canvas/dist/types/css/property-descriptors/background-size.d.ts +11 -0
  352. package/node_modules/html2canvas/dist/types/css/property-descriptors/border-color.d.ts +5 -0
  353. package/node_modules/html2canvas/dist/types/css/property-descriptors/border-radius.d.ts +7 -0
  354. package/node_modules/html2canvas/dist/types/css/property-descriptors/border-style.d.ts +12 -0
  355. package/node_modules/html2canvas/dist/types/css/property-descriptors/border-width.d.ts +5 -0
  356. package/node_modules/html2canvas/dist/types/css/property-descriptors/box-shadow.d.ts +14 -0
  357. package/node_modules/html2canvas/dist/types/css/property-descriptors/color.d.ts +2 -0
  358. package/node_modules/html2canvas/dist/types/css/property-descriptors/content.d.ts +4 -0
  359. package/node_modules/html2canvas/dist/types/css/property-descriptors/counter-increment.d.ts +7 -0
  360. package/node_modules/html2canvas/dist/types/css/property-descriptors/counter-reset.d.ts +7 -0
  361. package/node_modules/html2canvas/dist/types/css/property-descriptors/direction.d.ts +6 -0
  362. package/node_modules/html2canvas/dist/types/css/property-descriptors/display.d.ts +35 -0
  363. package/node_modules/html2canvas/dist/types/css/property-descriptors/duration.d.ts +2 -0
  364. package/node_modules/html2canvas/dist/types/css/property-descriptors/float.d.ts +9 -0
  365. package/node_modules/html2canvas/dist/types/css/property-descriptors/font-family.d.ts +4 -0
  366. package/node_modules/html2canvas/dist/types/css/property-descriptors/font-size.d.ts +2 -0
  367. package/node_modules/html2canvas/dist/types/css/property-descriptors/font-style.d.ts +7 -0
  368. package/node_modules/html2canvas/dist/types/css/property-descriptors/font-variant.d.ts +2 -0
  369. package/node_modules/html2canvas/dist/types/css/property-descriptors/font-weight.d.ts +2 -0
  370. package/node_modules/html2canvas/dist/types/css/property-descriptors/letter-spacing.d.ts +2 -0
  371. package/node_modules/html2canvas/dist/types/css/property-descriptors/line-break.d.ts +6 -0
  372. package/node_modules/html2canvas/dist/types/css/property-descriptors/line-height.d.ts +4 -0
  373. package/node_modules/html2canvas/dist/types/css/property-descriptors/list-style-image.d.ts +3 -0
  374. package/node_modules/html2canvas/dist/types/css/property-descriptors/list-style-position.d.ts +6 -0
  375. package/node_modules/html2canvas/dist/types/css/property-descriptors/list-style-type.d.ts +58 -0
  376. package/node_modules/html2canvas/dist/types/css/property-descriptors/margin.d.ts +5 -0
  377. package/node_modules/html2canvas/dist/types/css/property-descriptors/opacity.d.ts +2 -0
  378. package/node_modules/html2canvas/dist/types/css/property-descriptors/overflow-wrap.d.ts +6 -0
  379. package/node_modules/html2canvas/dist/types/css/property-descriptors/overflow.d.ts +9 -0
  380. package/node_modules/html2canvas/dist/types/css/property-descriptors/padding.d.ts +5 -0
  381. package/node_modules/html2canvas/dist/types/css/property-descriptors/paint-order.d.ts +8 -0
  382. package/node_modules/html2canvas/dist/types/css/property-descriptors/position.d.ts +9 -0
  383. package/node_modules/html2canvas/dist/types/css/property-descriptors/quotes.d.ts +8 -0
  384. package/node_modules/html2canvas/dist/types/css/property-descriptors/text-align.d.ts +7 -0
  385. package/node_modules/html2canvas/dist/types/css/property-descriptors/text-decoration-color.d.ts +2 -0
  386. package/node_modules/html2canvas/dist/types/css/property-descriptors/text-decoration-line.d.ts +10 -0
  387. package/node_modules/html2canvas/dist/types/css/property-descriptors/text-shadow.d.ts +12 -0
  388. package/node_modules/html2canvas/dist/types/css/property-descriptors/text-transform.d.ts +8 -0
  389. package/node_modules/html2canvas/dist/types/css/property-descriptors/transform-origin.d.ts +4 -0
  390. package/node_modules/html2canvas/dist/types/css/property-descriptors/transform.d.ts +4 -0
  391. package/node_modules/html2canvas/dist/types/css/property-descriptors/visibility.d.ts +7 -0
  392. package/node_modules/html2canvas/dist/types/css/property-descriptors/webkit-text-stroke-color.d.ts +2 -0
  393. package/node_modules/html2canvas/dist/types/css/property-descriptors/webkit-text-stroke-width.d.ts +2 -0
  394. package/node_modules/html2canvas/dist/types/css/property-descriptors/word-break.d.ts +7 -0
  395. package/node_modules/html2canvas/dist/types/css/property-descriptors/z-index.d.ts +7 -0
  396. package/node_modules/html2canvas/dist/types/css/syntax/__tests__/tokernizer-tests.d.ts +1 -0
  397. package/node_modules/html2canvas/dist/types/css/syntax/parser.d.ts +34 -0
  398. package/node_modules/html2canvas/dist/types/css/syntax/tokenizer.d.ts +94 -0
  399. package/node_modules/html2canvas/dist/types/css/types/__tests__/color-tests.d.ts +1 -0
  400. package/node_modules/html2canvas/dist/types/css/types/__tests__/image-tests.d.ts +1 -0
  401. package/node_modules/html2canvas/dist/types/css/types/angle.d.ts +7 -0
  402. package/node_modules/html2canvas/dist/types/css/types/color.d.ts +11 -0
  403. package/node_modules/html2canvas/dist/types/css/types/functions/-prefix-linear-gradient.d.ts +4 -0
  404. package/node_modules/html2canvas/dist/types/css/types/functions/-prefix-radial-gradient.d.ts +4 -0
  405. package/node_modules/html2canvas/dist/types/css/types/functions/-webkit-gradient.d.ts +4 -0
  406. package/node_modules/html2canvas/dist/types/css/types/functions/__tests__/radial-gradient.d.ts +1 -0
  407. package/node_modules/html2canvas/dist/types/css/types/functions/counter.d.ts +10 -0
  408. package/node_modules/html2canvas/dist/types/css/types/functions/gradient.d.ts +7 -0
  409. package/node_modules/html2canvas/dist/types/css/types/functions/linear-gradient.d.ts +4 -0
  410. package/node_modules/html2canvas/dist/types/css/types/functions/radial-gradient.d.ts +12 -0
  411. package/node_modules/html2canvas/dist/types/css/types/image.d.ts +54 -0
  412. package/node_modules/html2canvas/dist/types/css/types/index.d.ts +1 -0
  413. package/node_modules/html2canvas/dist/types/css/types/length-percentage.d.ts +11 -0
  414. package/node_modules/html2canvas/dist/types/css/types/length.d.ts +4 -0
  415. package/node_modules/html2canvas/dist/types/css/types/time.d.ts +2 -0
  416. package/node_modules/html2canvas/dist/types/dom/__mocks__/document-cloner.d.ts +6 -0
  417. package/node_modules/html2canvas/dist/types/dom/document-cloner.d.ts +45 -0
  418. package/node_modules/html2canvas/dist/types/dom/element-container.d.ts +19 -0
  419. package/node_modules/html2canvas/dist/types/dom/elements/li-element-container.d.ts +6 -0
  420. package/node_modules/html2canvas/dist/types/dom/elements/ol-element-container.d.ts +7 -0
  421. package/node_modules/html2canvas/dist/types/dom/elements/select-element-container.d.ts +6 -0
  422. package/node_modules/html2canvas/dist/types/dom/elements/textarea-element-container.d.ts +6 -0
  423. package/node_modules/html2canvas/dist/types/dom/node-parser.d.ts +23 -0
  424. package/node_modules/html2canvas/dist/types/dom/replaced-elements/canvas-element-container.d.ts +8 -0
  425. package/node_modules/html2canvas/dist/types/dom/replaced-elements/iframe-element-container.d.ts +11 -0
  426. package/node_modules/html2canvas/dist/types/dom/replaced-elements/image-element-container.d.ts +8 -0
  427. package/node_modules/html2canvas/dist/types/dom/replaced-elements/index.d.ts +4 -0
  428. package/node_modules/html2canvas/dist/types/dom/replaced-elements/input-element-container.d.ts +12 -0
  429. package/node_modules/html2canvas/dist/types/dom/replaced-elements/pseudo-elements.d.ts +0 -0
  430. package/node_modules/html2canvas/dist/types/dom/replaced-elements/svg-element-container.d.ts +8 -0
  431. package/node_modules/html2canvas/dist/types/dom/text-container.d.ts +8 -0
  432. package/node_modules/html2canvas/dist/types/index.d.ts +10 -0
  433. package/node_modules/html2canvas/dist/types/invariant.d.ts +1 -0
  434. package/node_modules/html2canvas/dist/types/render/background.d.ts +16 -0
  435. package/node_modules/html2canvas/dist/types/render/bezier-curve.d.ts +14 -0
  436. package/node_modules/html2canvas/dist/types/render/border.d.ts +6 -0
  437. package/node_modules/html2canvas/dist/types/render/bound-curves.d.ts +32 -0
  438. package/node_modules/html2canvas/dist/types/render/box-sizing.d.ts +4 -0
  439. package/node_modules/html2canvas/dist/types/render/canvas/canvas-renderer.d.ts +53 -0
  440. package/node_modules/html2canvas/dist/types/render/canvas/foreignobject-renderer.d.ts +11 -0
  441. package/node_modules/html2canvas/dist/types/render/effects.d.ts +38 -0
  442. package/node_modules/html2canvas/dist/types/render/font-metrics.d.ts +11 -0
  443. package/node_modules/html2canvas/dist/types/render/path.d.ts +13 -0
  444. package/node_modules/html2canvas/dist/types/render/renderer.d.ts +7 -0
  445. package/node_modules/html2canvas/dist/types/render/stacking-context.d.ts +24 -0
  446. package/node_modules/html2canvas/dist/types/render/vector.d.ts +9 -0
  447. package/node_modules/html2canvas/package.json +124 -0
  448. package/node_modules/html2canvas/tsconfig.json +21 -0
  449. package/node_modules/text-segmentation/CHANGELOG.md +43 -0
  450. package/node_modules/text-segmentation/LICENSE +22 -0
  451. package/node_modules/text-segmentation/README.md +27 -0
  452. package/node_modules/text-segmentation/dist/lib/GraphemeBreak.js +218 -0
  453. package/node_modules/text-segmentation/dist/lib/GraphemeBreak.js.map +1 -0
  454. package/node_modules/text-segmentation/dist/lib/grapheme-break-trie.js +6 -0
  455. package/node_modules/text-segmentation/dist/lib/grapheme-break-trie.js.map +1 -0
  456. package/node_modules/text-segmentation/dist/lib/index.js +9 -0
  457. package/node_modules/text-segmentation/dist/lib/index.js.map +1 -0
  458. package/node_modules/text-segmentation/dist/text-segmentation.es5.js +384 -0
  459. package/node_modules/text-segmentation/dist/text-segmentation.es5.js.map +1 -0
  460. package/node_modules/text-segmentation/dist/text-segmentation.umd.js +397 -0
  461. package/node_modules/text-segmentation/dist/text-segmentation.umd.js.map +1 -0
  462. package/node_modules/text-segmentation/dist/types/GraphemeBreak.d.ts +21 -0
  463. package/node_modules/text-segmentation/dist/types/grapheme-break-trie.d.ts +2 -0
  464. package/node_modules/text-segmentation/dist/types/index.d.ts +1 -0
  465. package/node_modules/text-segmentation/package.json +55 -0
  466. package/node_modules/text-segmentation/rollup.config.ts +40 -0
  467. package/node_modules/utrie/CHANGELOG.md +32 -0
  468. package/node_modules/utrie/LICENSE +22 -0
  469. package/node_modules/utrie/dist/lib/Trie.js +143 -0
  470. package/node_modules/utrie/dist/lib/Trie.js.map +1 -0
  471. package/node_modules/utrie/dist/lib/TrieBuilder.js +888 -0
  472. package/node_modules/utrie/dist/lib/TrieBuilder.js.map +1 -0
  473. package/node_modules/utrie/dist/lib/Util.js +54 -0
  474. package/node_modules/utrie/dist/lib/Util.js.map +1 -0
  475. package/node_modules/utrie/dist/lib/index.js +10 -0
  476. package/node_modules/utrie/dist/lib/index.js.map +1 -0
  477. package/node_modules/utrie/dist/types/Trie.d.ts +76 -0
  478. package/node_modules/utrie/dist/types/TrieBuilder.d.ts +65 -0
  479. package/node_modules/utrie/dist/types/Util.d.ts +3 -0
  480. package/node_modules/utrie/dist/types/index.d.ts +2 -0
  481. package/node_modules/utrie/dist/utrie.es5.js +1101 -0
  482. package/node_modules/utrie/dist/utrie.es5.js.map +1 -0
  483. package/node_modules/utrie/dist/utrie.umd.js +1114 -0
  484. package/node_modules/utrie/dist/utrie.umd.js.map +1 -0
  485. package/node_modules/utrie/package.json +53 -0
  486. package/node_modules/utrie/rollup.config.ts +40 -0
  487. package/package.json +1 -1
  488. package/packages/cli/bin/groove.js +10 -1
  489. package/packages/cli/package.json +1 -1
  490. package/packages/cli/src/commands/connect.js +116 -205
  491. package/packages/cli/src/commands/disconnect.js +38 -62
  492. package/packages/cli/src/commands/remotes.js +75 -0
  493. package/packages/daemon/package.json +1 -1
  494. package/packages/daemon/src/process.js +56 -1
  495. package/packages/gui/dist/assets/index-BCQY8ojz.css +1 -0
  496. package/packages/gui/dist/assets/index-C5e7KVGN.js +8637 -0
  497. package/packages/gui/dist/index.html +2 -2
  498. package/packages/gui/package.json +2 -1
  499. package/packages/gui/src/components/preview/preview-workspace.jsx +6 -5
  500. package/packages/gui/src/components/preview/screenshot-overlay.jsx +41 -29
  501. package/packages/gui/src/stores/groove.js +6 -2
  502. package/packages/gui/src/views/agents.jsx +15 -1
  503. package/packages/gui/src/views/settings.jsx +104 -26
  504. package/node_modules/@groove-dev/gui/dist/assets/index-BbDDgazC.js +0 -8616
  505. package/node_modules/@groove-dev/gui/dist/assets/index-fhMxiPGp.css +0 -1
  506. package/packages/gui/dist/assets/index-BbDDgazC.js +0 -8616
  507. package/packages/gui/dist/assets/index-fhMxiPGp.css +0 -1
@@ -6,12 +6,12 @@
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <link rel="icon" type="image/png" href="/favicon.png" />
8
8
  <title>Groove GUI</title>
9
- <script type="module" crossorigin src="/assets/index-BbDDgazC.js"></script>
9
+ <script type="module" crossorigin src="/assets/index-C5e7KVGN.js"></script>
10
10
  <link rel="modulepreload" crossorigin href="/assets/vendor-C0HXlhrU.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/reactflow-BQPfi37R.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/codemirror-BBL3i_JW.js">
13
13
  <link rel="modulepreload" crossorigin href="/assets/xterm--7_ns2zW.js">
14
- <link rel="stylesheet" crossorigin href="/assets/index-fhMxiPGp.css">
14
+ <link rel="stylesheet" crossorigin href="/assets/index-BCQY8ojz.css">
15
15
  </head>
16
16
  <body>
17
17
  <div id="root"></div>
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/gui",
3
- "version": "0.27.85",
3
+ "version": "0.27.87",
4
4
  "description": "GROOVE GUI — visual agent control plane",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",
@@ -38,6 +38,7 @@
38
38
  "@xyflow/react": "^12.0.0",
39
39
  "clsx": "^2.1.1",
40
40
  "framer-motion": "^12.38.0",
41
+ "html2canvas": "^1.4.1",
41
42
  "lucide-react": "^1.7.0",
42
43
  "react": "^19.0.0",
43
44
  "react-dom": "^19.0.0",
@@ -224,7 +224,7 @@ const DEVICE_WIDTHS = {
224
224
  mobile: '375px',
225
225
  };
226
226
 
227
- export function PreviewWorkspace() {
227
+ export function PreviewWorkspace({ embedded = false }) {
228
228
  const previewState = useGrooveStore((s) => s.previewState);
229
229
  const iframeRef = useRef(null);
230
230
  const [iframeKey, setIframeKey] = useState(0);
@@ -269,10 +269,11 @@ export function PreviewWorkspace() {
269
269
  </div>
270
270
  </div>
271
271
 
272
- {/* Right pane: chat */}
273
- <div className="flex-[2] min-w-[280px] max-w-[480px] border-l border-border md:max-w-none md:flex-[2]">
274
- <PreviewChat />
275
- </div>
272
+ {!embedded && (
273
+ <div className="flex-[2] min-w-[280px] max-w-[480px] border-l border-border md:max-w-none md:flex-[2]">
274
+ <PreviewChat />
275
+ </div>
276
+ )}
276
277
  </div>
277
278
  );
278
279
  }
@@ -2,6 +2,7 @@
2
2
  import { useState, useRef, useCallback, useEffect } from 'react';
3
3
  import { Send, X, Loader2 } from 'lucide-react';
4
4
  import { useGrooveStore } from '../../stores/groove';
5
+ import html2canvas from 'html2canvas';
5
6
 
6
7
  export function ScreenshotOverlay({ iframeRef }) {
7
8
  const toggleScreenshotMode = useGrooveStore((s) => s.toggleScreenshotMode);
@@ -77,37 +78,48 @@ export function ScreenshotOverlay({ iframeRef }) {
77
78
  return canvas.toDataURL('image/png');
78
79
  }
79
80
 
80
- try {
81
- const iframe = iframeRef.current;
82
- if (!iframe) { finishCapture(drawPlaceholder()); return; }
81
+ const iframe = iframeRef.current;
82
+ if (!iframe) { finishCapture(drawPlaceholder()); return; }
83
83
 
84
- const canvas = document.createElement('canvas');
85
- const dpr = window.devicePixelRatio || 1;
86
- canvas.width = selRect.w * dpr;
87
- canvas.height = selRect.h * dpr;
88
- const ctx = canvas.getContext('2d');
89
- ctx.scale(dpr, dpr);
84
+ const iframeRect = iframe.getBoundingClientRect();
85
+ const overlayRect = overlayRef.current.getBoundingClientRect();
86
+ const offsetX = selRect.x - (iframeRect.left - overlayRect.left);
87
+ const offsetY = selRect.y - (iframeRect.top - overlayRect.top);
90
88
 
91
- const iframeRect = iframe.getBoundingClientRect();
92
- const overlayRect = overlayRef.current.getBoundingClientRect();
93
- const offsetX = selRect.x - (iframeRect.left - overlayRect.left);
94
- const offsetY = selRect.y - (iframeRect.top - overlayRect.top);
95
-
96
- try {
97
- ctx.drawImage(iframe, -offsetX * dpr, -offsetY * dpr, iframeRect.width * dpr, iframeRect.height * dpr, 0, 0, selRect.w, selRect.h);
98
- const testPixel = ctx.getImageData(0, 0, 1, 1).data;
99
- if (testPixel[0] === 0 && testPixel[1] === 0 && testPixel[2] === 0 && testPixel[3] === 0) {
100
- throw new Error('blank');
101
- }
102
- finishCapture(canvas.toDataURL('image/png'));
103
- } catch {
104
- finishCapture(drawPlaceholder());
105
- }
106
- } catch {
107
- setStart(null);
108
- setEnd(null);
109
- setCaptured(null);
110
- }
89
+ let iframeBody;
90
+ try {
91
+ iframeBody = iframe.contentDocument?.body || iframe.contentWindow?.document?.body;
92
+ } catch { /* cross-origin fallback */ }
93
+
94
+ if (!iframeBody) { finishCapture(drawPlaceholder()); return; }
95
+
96
+ html2canvas(iframeBody, {
97
+ width: iframeRect.width,
98
+ height: iframeRect.height,
99
+ windowWidth: iframeRect.width,
100
+ windowHeight: iframeRect.height,
101
+ x: 0,
102
+ y: 0,
103
+ useCORS: true,
104
+ logging: false,
105
+ }).then((fullCanvas) => {
106
+ const dpr = window.devicePixelRatio || 1;
107
+ const cropCanvas = document.createElement('canvas');
108
+ cropCanvas.width = selRect.w * dpr;
109
+ cropCanvas.height = selRect.h * dpr;
110
+ const ctx = cropCanvas.getContext('2d');
111
+ ctx.drawImage(
112
+ fullCanvas,
113
+ offsetX * (fullCanvas.width / iframeRect.width),
114
+ offsetY * (fullCanvas.height / iframeRect.height),
115
+ selRect.w * (fullCanvas.width / iframeRect.width),
116
+ selRect.h * (fullCanvas.height / iframeRect.height),
117
+ 0, 0, cropCanvas.width, cropCanvas.height,
118
+ );
119
+ finishCapture(cropCanvas.toDataURL('image/png'));
120
+ }).catch(() => {
121
+ finishCapture(drawPlaceholder());
122
+ });
111
123
  }, [dragging, start, end, iframeRef]);
112
124
 
113
125
  useEffect(() => {
@@ -58,6 +58,7 @@ export const useGrooveStore = create((set, get) => ({
58
58
 
59
59
  // ── Preview ───────────────────────────────────────────────
60
60
  previewState: { url: null, teamId: null, kind: null, deviceSize: 'desktop', screenshotMode: false },
61
+ showPreviewInAgents: false,
61
62
  previewChat: [],
62
63
  previewIterating: false,
63
64
 
@@ -1187,14 +1188,17 @@ export const useGrooveStore = create((set, get) => ({
1187
1188
  // ── Preview ──────────────────────────────────────────────
1188
1189
 
1189
1190
  openPreview(url, teamId, kind) {
1190
- set({ previewState: { url, teamId, kind, deviceSize: 'desktop', screenshotMode: false }, previewChat: [], activeView: 'preview' });
1191
+ set({ previewState: { url, teamId, kind, deviceSize: 'desktop', screenshotMode: false }, previewChat: [], showPreviewInAgents: true });
1191
1192
  },
1192
1193
  closePreview() {
1193
1194
  const { previewState } = get();
1194
1195
  if (previewState.teamId) {
1195
1196
  api.delete(`/preview/${previewState.teamId}`).catch(() => {});
1196
1197
  }
1197
- set({ previewState: { url: null, teamId: null, kind: null, deviceSize: 'desktop', screenshotMode: false }, previewChat: [], previewIterating: false, activeView: 'agents' });
1198
+ set({ previewState: { url: null, teamId: null, kind: null, deviceSize: 'desktop', screenshotMode: false }, previewChat: [], previewIterating: false, showPreviewInAgents: false, activeView: 'agents' });
1199
+ },
1200
+ togglePreviewInAgents() {
1201
+ set((s) => ({ showPreviewInAgents: !s.showPreviewInAgents }));
1198
1202
  },
1199
1203
  setPreviewDevice(size) {
1200
1204
  set((s) => ({ previewState: { ...s.previewState, deviceSize: size } }));
@@ -10,7 +10,8 @@ import { RootNode } from '../components/agents/root-node';
10
10
  import { cn } from '../lib/cn';
11
11
  import { Button } from '../components/ui/button';
12
12
  import { Badge } from '../components/ui/badge';
13
- import { Plus, Users, Zap, X, Check, Rocket, Server, Monitor, Code2, TestTube, Shield, Pencil, Copy, Trash2, ChevronDown, ChevronLeft, ChevronRight, FolderOpen, Radio } from 'lucide-react';
13
+ import { Plus, Users, Zap, X, Check, Rocket, Server, Monitor, Code2, TestTube, Shield, Pencil, Copy, Trash2, ChevronDown, ChevronLeft, ChevronRight, FolderOpen, Radio, Eye } from 'lucide-react';
14
+ import { PreviewWorkspace } from '../components/preview/preview-workspace';
14
15
  import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuSeparator } from '../components/ui/context-menu';
15
16
 
16
17
  const NODE_TYPES = { agentNode: AgentNode, rootNode: RootNode };
@@ -795,6 +796,9 @@ export default function AgentsView() {
795
796
  const selectAgent = useGrooveStore((s) => s.selectAgent);
796
797
  const recommendedTeam = useGrooveStore((s) => s.recommendedTeam);
797
798
  const checkRecommendedTeam = useGrooveStore((s) => s.checkRecommendedTeam);
799
+ const showPreviewInAgents = useGrooveStore((s) => s.showPreviewInAgents);
800
+ const previewState = useGrooveStore((s) => s.previewState);
801
+ const togglePreviewInAgents = useGrooveStore((s) => s.togglePreviewInAgents);
798
802
 
799
803
  // Poll for recommended team while a planner is running
800
804
  useEffect(() => {
@@ -845,6 +849,8 @@ export default function AgentsView() {
845
849
  </div>
846
850
  ) : teamAgents.length === 0 ? (
847
851
  <EmptyState onPlanner={launchPlanner} onSpawn={() => openDetail({ type: 'spawn' })} />
852
+ ) : showPreviewInAgents && previewState.url ? (
853
+ <PreviewWorkspace embedded />
848
854
  ) : (
849
855
  <ReactFlowProvider key={activeTeamId}>
850
856
  <AgentTreeInner />
@@ -861,6 +867,14 @@ export default function AgentsView() {
861
867
  Spawn
862
868
  </button>
863
869
  )}
870
+ {!isLoading && teamAgents.length > 0 && previewState.url && (
871
+ <button
872
+ onClick={togglePreviewInAgents}
873
+ className="absolute bottom-4 right-4 z-40 flex items-center gap-1.5 h-8 px-4 rounded-md bg-info/15 text-info text-xs font-semibold font-sans hover:bg-info/25 transition-colors cursor-pointer select-none shadow-lg shadow-black/10"
874
+ >
875
+ {showPreviewInAgents ? <><Users size={14} /> Team</> : <><Eye size={14} /> Preview</>}
876
+ </button>
877
+ )}
864
878
  </div>
865
879
  );
866
880
  }
@@ -14,12 +14,14 @@ import { api } from '../lib/api';
14
14
  import { cn } from '../lib/cn';
15
15
  import { fmtUptime } from '../lib/format';
16
16
  import { Dialog, DialogContent } from '../components/ui/dialog';
17
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
17
18
  import {
18
19
  Key, Eye, EyeOff, Check, Cpu, Download, Loader2, RefreshCw, Terminal, Copy,
19
20
  FolderOpen, FolderSearch, Users, Gauge, ChevronRight,
20
21
  ShieldCheck, Settings, Lock, Database, Shield,
21
22
  Newspaper, Radio, Send, MessageSquare, MessageCircle,
22
23
  Plus, Trash2, Plug, PlugZap, TestTube, X, HelpCircle, ExternalLink,
24
+ Sparkles, Share2, Gift,
23
25
  } from 'lucide-react';
24
26
 
25
27
  /* ── Toggle ────────────────────────────────────────────────── */
@@ -1409,39 +1411,115 @@ function TrainingDataSection() {
1409
1411
 
1410
1412
  {/* Consent dialog */}
1411
1413
  <Dialog open={consentOpen} onOpenChange={setConsentOpen}>
1412
- <DialogContent title="Data Collection Consent" description="Review what data is collected and how it is used.">
1413
- <div className="px-5 py-4 space-y-3">
1414
- <div className="space-y-2.5 text-xs text-text-1 font-sans leading-relaxed">
1415
- <div className="flex items-start gap-2.5">
1416
- <Database size={13} className="text-accent flex-shrink-0 mt-0.5" />
1417
- <div><span className="font-semibold text-text-0">What is collected:</span> Agent session trajectories — thoughts, tool calls, observations, and outcomes.</div>
1414
+ <DialogContent className="max-w-2xl" description="Review how your data helps build open source AI">
1415
+
1416
+ {/* 1. Hero Section */}
1417
+ <div className="relative bg-gradient-to-br from-accent/5 to-transparent px-6 pt-8 pb-6 text-center">
1418
+ <DialogPrimitive.Close className="absolute top-3 right-3 p-1.5 rounded-md text-text-3 hover:text-text-0 hover:bg-surface-5 transition-colors">
1419
+ <X size={16} />
1420
+ </DialogPrimitive.Close>
1421
+ <div className="flex justify-center mb-3">
1422
+ <div className="w-14 h-14 rounded-xl bg-accent/10 flex items-center justify-center">
1423
+ <Sparkles size={32} className="text-accent" />
1418
1424
  </div>
1419
- <div className="flex items-start gap-2.5">
1420
- <Cpu size={13} className="text-accent flex-shrink-0 mt-0.5" />
1421
- <div><span className="font-semibold text-text-0">How it is used:</span> Training MoE expert models that become Groove agents.</div>
1422
- </div>
1423
- <div className="flex items-start gap-2.5">
1424
- <Shield size={13} className="text-accent flex-shrink-0 mt-0.5" />
1425
- <div><span className="font-semibold text-text-0">PII protection:</span> 13 categories of sensitive data (emails, API keys, file paths, etc.) are automatically scrubbed before transmission.</div>
1426
- </div>
1427
- <div className="flex items-start gap-2.5">
1428
- <Settings size={13} className="text-accent flex-shrink-0 mt-0.5" />
1429
- <div><span className="font-semibold text-text-0">Opt out anytime:</span> Toggle the setting OFF to stop collection immediately.</div>
1425
+ </div>
1426
+ <DialogPrimitive.Title className="text-xl font-bold text-text-0 font-sans">Help Build Open Source Intelligence</DialogPrimitive.Title>
1427
+ <p className="text-sm text-text-2 font-sans mt-2 max-w-md mx-auto">
1428
+ Your usage data trains a free, local MoE model that every Groove user gets to use — including you.
1429
+ </p>
1430
+ </div>
1431
+
1432
+ {/* 2. Value Proposition */}
1433
+ <div className="px-6 pt-5 pb-1">
1434
+ <div className="grid grid-cols-3 gap-3">
1435
+ {[
1436
+ { icon: Share2, title: 'You Share', desc: 'Anonymized agent session data: tool calls, error patterns, task flows' },
1437
+ { icon: Cpu, title: 'We Train', desc: 'A Groove-specific Mixture of Experts model built on real multi-agent workflows' },
1438
+ { icon: Gift, title: 'Everyone Wins', desc: 'Free, local, open source model for all Groove users. More data = smarter agents' },
1439
+ ].map(({ icon: Icon, title, desc }) => (
1440
+ <div key={title} className="rounded-lg border border-border-subtle bg-surface-2/50 p-3 text-center">
1441
+ <div className="flex justify-center mb-2">
1442
+ <Icon size={18} className="text-accent" />
1443
+ </div>
1444
+ <div className="text-xs font-semibold text-text-0 font-sans mb-1">{title}</div>
1445
+ <div className="text-2xs text-text-2 font-sans leading-relaxed">{desc}</div>
1446
+ </div>
1447
+ ))}
1448
+ </div>
1449
+ </div>
1450
+
1451
+ {/* 3. What We Collect */}
1452
+ <div className="px-6 pt-4">
1453
+ <div className="text-xs font-semibold uppercase text-text-3 tracking-wider font-sans mb-2.5">What We Collect</div>
1454
+ <div className="space-y-1.5">
1455
+ {[
1456
+ 'Agent tool calling patterns',
1457
+ 'Error and recovery sequences',
1458
+ 'Task complexity and coordination events',
1459
+ 'Model and provider usage metadata',
1460
+ 'Session duration and outcomes',
1461
+ ].map((item) => (
1462
+ <div key={item} className="flex items-center gap-2">
1463
+ <Check size={12} className="text-accent flex-shrink-0" />
1464
+ <span className="text-xs text-text-1 font-sans">{item}</span>
1465
+ </div>
1466
+ ))}
1467
+ </div>
1468
+ <p className="text-xs text-text-0 font-sans font-medium mt-3">
1469
+ That&apos;s it. Groove orchestration data only.
1470
+ </p>
1471
+ </div>
1472
+
1473
+ {/* 4. What We Never Collect */}
1474
+ <div className="px-6 pt-4">
1475
+ <div className="rounded-lg border border-border-subtle bg-surface-2/30 p-4">
1476
+ <div className="flex items-center gap-2 mb-2.5">
1477
+ <Shield size={14} className="text-text-2" />
1478
+ <span className="text-xs font-semibold uppercase text-text-3 tracking-wider font-sans">What We Never Collect</span>
1430
1479
  </div>
1431
- <div className="flex items-start gap-2.5">
1432
- <Trash2 size={13} className="text-danger flex-shrink-0 mt-0.5" />
1433
- <div><span className="font-semibold text-text-0">Delete data:</span> Permanently delete all previously collected data at any time.</div>
1480
+ <div className="space-y-1.5">
1481
+ {[
1482
+ 'Your source code or file contents',
1483
+ 'API keys, passwords, or credentials',
1484
+ 'Personal information — emails, names, file paths',
1485
+ 'Anything that could identify your IP or projects',
1486
+ ].map((item) => (
1487
+ <div key={item} className="flex items-center gap-2">
1488
+ <X size={12} className="text-danger flex-shrink-0" />
1489
+ <span className="text-xs text-text-1 font-sans">{item}</span>
1490
+ </div>
1491
+ ))}
1434
1492
  </div>
1493
+ <p className="text-xs text-text-0 font-sans font-medium mt-3">
1494
+ 13 categories of PII are automatically scrubbed before any data leaves your machine.
1495
+ </p>
1435
1496
  </div>
1436
1497
  </div>
1437
- <div className="flex items-center gap-2 px-5 py-4 border-t border-border-subtle">
1438
- <Button variant="primary" size="sm" onClick={handleAgree} className="flex-1 h-8 text-xs">
1439
- I Agree — Start Contributing
1440
- </Button>
1441
- <Button variant="ghost" size="sm" onClick={() => setConsentOpen(false)} className="h-8 text-xs px-3">
1442
- Cancel
1498
+
1499
+ {/* 5. Mission Statement */}
1500
+ <div className="px-6 pt-4">
1501
+ <div className="border-l-2 border-accent/30 pl-3">
1502
+ <p className="text-xs text-text-3 italic leading-relaxed font-sans">
1503
+ We believe in open source, decentralized intelligence. Not walled gardens. Not data hoarding. Every contribution makes the model better for everyone. We need your help to get there.
1504
+ </p>
1505
+ </div>
1506
+ </div>
1507
+
1508
+ {/* 6. CTA Section */}
1509
+ <div className="border-t border-border-subtle mt-5 pt-4 pb-1 px-6">
1510
+ <Button variant="primary" size="sm" onClick={handleAgree} className="w-full h-10 text-sm font-semibold">
1511
+ Join the Movement — Start Contributing
1443
1512
  </Button>
1513
+ <div className="text-center mt-2.5">
1514
+ <button onClick={() => setConsentOpen(false)} className="text-xs text-text-3 hover:text-text-1 transition-colors font-sans cursor-pointer">
1515
+ Not now
1516
+ </button>
1517
+ </div>
1518
+ <p className="text-center text-2xs text-text-4 font-sans mt-2 mb-1">
1519
+ You can opt out and delete your data anytime in Settings
1520
+ </p>
1444
1521
  </div>
1522
+
1445
1523
  </DialogContent>
1446
1524
  </Dialog>
1447
1525
 
@@ -0,0 +1,28 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
+
5
+ ## [1.0.2](https://github.com/niklasvh/base64-arraybuffer/compare/v1.0.1...v1.0.2) (2022-01-22)
6
+
7
+
8
+ ### fix
9
+
10
+ * source maps (#33) ([bd5a8ef](https://github.com/niklasvh/base64-arraybuffer/commit/bd5a8eff3a44ea07f9b68533c477076124220ddd)), closes [#33](https://github.com/niklasvh/base64-arraybuffer/issues/33)
11
+
12
+
13
+
14
+ ## [1.0.1](https://github.com/niklasvh/base64-arraybuffer/compare/v1.0.0...v1.0.1) (2021-08-10)
15
+
16
+
17
+ ### fix
18
+
19
+ * make lib loadable on ie9 (#30) ([a618d14](https://github.com/niklasvh/base64-arraybuffer/commit/a618d14d323f4eb230321a3609bfbc9f23f430c0)), closes [#30](https://github.com/niklasvh/base64-arraybuffer/issues/30)
20
+
21
+
22
+
23
+ # [1.0.0](https://github.com/niklasvh/base64-arraybuffer/compare/v0.2.0...v1.0.0) (2021-08-10)
24
+
25
+
26
+ ### docs
27
+
28
+ * update readme (#29) ([0a0253d](https://github.com/niklasvh/base64-arraybuffer/commit/0a0253dcc2e3f01a1f6d04fa81d578f714fce27f)), closes [#29](https://github.com/niklasvh/base64-arraybuffer/issues/29)
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Niklas von Hertzen
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,27 @@
1
+ # base64-arraybuffer
2
+
3
+ ![CI](https://github.com/niklasvh/base64-arraybuffer/workflows/CI/badge.svg?branch=master)
4
+ [![NPM Downloads](https://img.shields.io/npm/dm/base64-arraybuffer.svg)](https://www.npmjs.org/package/base64-arraybuffer)
5
+ [![NPM Version](https://img.shields.io/npm/v/base64-arraybuffer.svg)](https://www.npmjs.org/package/base64-arraybuffer)
6
+
7
+ Encode/decode base64 data into ArrayBuffers
8
+
9
+ ### Installing
10
+ You can install the module via npm:
11
+
12
+ npm install base64-arraybuffer
13
+
14
+ ## API
15
+ The library encodes and decodes base64 to and from ArrayBuffers
16
+
17
+ - __encode(buffer)__ - Encodes `ArrayBuffer` into base64 string
18
+ - __decode(str)__ - Decodes base64 string to `ArrayBuffer`
19
+
20
+ ### Testing
21
+ You can run the test suite with:
22
+
23
+ npm test
24
+
25
+ ## License
26
+ Copyright (c) 2012 Niklas von Hertzen
27
+ Licensed under the MIT license.
@@ -0,0 +1,50 @@
1
+ /*
2
+ * base64-arraybuffer 1.0.2 <https://github.com/niklasvh/base64-arraybuffer>
3
+ * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>
4
+ * Released under MIT License
5
+ */
6
+ var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
7
+ // Use a lookup table to find the index.
8
+ var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);
9
+ for (var i = 0; i < chars.length; i++) {
10
+ lookup[chars.charCodeAt(i)] = i;
11
+ }
12
+ var encode = function (arraybuffer) {
13
+ var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';
14
+ for (i = 0; i < len; i += 3) {
15
+ base64 += chars[bytes[i] >> 2];
16
+ base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
17
+ base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
18
+ base64 += chars[bytes[i + 2] & 63];
19
+ }
20
+ if (len % 3 === 2) {
21
+ base64 = base64.substring(0, base64.length - 1) + '=';
22
+ }
23
+ else if (len % 3 === 1) {
24
+ base64 = base64.substring(0, base64.length - 2) + '==';
25
+ }
26
+ return base64;
27
+ };
28
+ var decode = function (base64) {
29
+ var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;
30
+ if (base64[base64.length - 1] === '=') {
31
+ bufferLength--;
32
+ if (base64[base64.length - 2] === '=') {
33
+ bufferLength--;
34
+ }
35
+ }
36
+ var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);
37
+ for (i = 0; i < len; i += 4) {
38
+ encoded1 = lookup[base64.charCodeAt(i)];
39
+ encoded2 = lookup[base64.charCodeAt(i + 1)];
40
+ encoded3 = lookup[base64.charCodeAt(i + 2)];
41
+ encoded4 = lookup[base64.charCodeAt(i + 3)];
42
+ bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
43
+ bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
44
+ bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
45
+ }
46
+ return arraybuffer;
47
+ };
48
+
49
+ export { decode, encode };
50
+ //# sourceMappingURL=base64-arraybuffer.es5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64-arraybuffer.es5.js","sources":["../../src/index.ts"],"sourcesContent":["const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const encode = (arraybuffer: ArrayBuffer): string => {\n let bytes = new Uint8Array(arraybuffer),\n i,\n len = bytes.length,\n base64 = '';\n\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n\n return base64;\n};\n\nexport const decode = (base64: string): ArrayBuffer => {\n let bufferLength = base64.length * 0.75,\n len = base64.length,\n i,\n p = 0,\n encoded1,\n encoded2,\n encoded3,\n encoded4;\n\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n const arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return arraybuffer;\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /*
2
+ * base64-arraybuffer 1.0.2 <https://github.com/niklasvh/base64-arraybuffer>
3
+ * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>
4
+ * Released under MIT License
5
+ */
6
+ (function (global, factory) {
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
8
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['base64-arraybuffer'] = {}));
10
+ }(this, (function (exports) { 'use strict';
11
+
12
+ var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
13
+ // Use a lookup table to find the index.
14
+ var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);
15
+ for (var i = 0; i < chars.length; i++) {
16
+ lookup[chars.charCodeAt(i)] = i;
17
+ }
18
+ var encode = function (arraybuffer) {
19
+ var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';
20
+ for (i = 0; i < len; i += 3) {
21
+ base64 += chars[bytes[i] >> 2];
22
+ base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
23
+ base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
24
+ base64 += chars[bytes[i + 2] & 63];
25
+ }
26
+ if (len % 3 === 2) {
27
+ base64 = base64.substring(0, base64.length - 1) + '=';
28
+ }
29
+ else if (len % 3 === 1) {
30
+ base64 = base64.substring(0, base64.length - 2) + '==';
31
+ }
32
+ return base64;
33
+ };
34
+ var decode = function (base64) {
35
+ var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;
36
+ if (base64[base64.length - 1] === '=') {
37
+ bufferLength--;
38
+ if (base64[base64.length - 2] === '=') {
39
+ bufferLength--;
40
+ }
41
+ }
42
+ var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);
43
+ for (i = 0; i < len; i += 4) {
44
+ encoded1 = lookup[base64.charCodeAt(i)];
45
+ encoded2 = lookup[base64.charCodeAt(i + 1)];
46
+ encoded3 = lookup[base64.charCodeAt(i + 2)];
47
+ encoded4 = lookup[base64.charCodeAt(i + 3)];
48
+ bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
49
+ bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
50
+ bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
51
+ }
52
+ return arraybuffer;
53
+ };
54
+
55
+ exports.decode = decode;
56
+ exports.encode = encode;
57
+
58
+ Object.defineProperty(exports, '__esModule', { value: true });
59
+
60
+ })));
61
+ //# sourceMappingURL=base64-arraybuffer.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64-arraybuffer.umd.js","sources":["../../src/index.ts"],"sourcesContent":["const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const encode = (arraybuffer: ArrayBuffer): string => {\n let bytes = new Uint8Array(arraybuffer),\n i,\n len = bytes.length,\n base64 = '';\n\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n\n return base64;\n};\n\nexport const decode = (base64: string): ArrayBuffer => {\n let bufferLength = base64.length * 0.75,\n len = base64.length,\n i,\n p = 0,\n encoded1,\n encoded2,\n encoded3,\n encoded4;\n\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n const arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return arraybuffer;\n};\n"],"names":[],"mappings":"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"}