@deck.gl-community/widgets 9.2.5 → 9.3.1-alpha.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 (295) hide show
  1. package/README.md +11 -1
  2. package/dist/graph-widgets/_deprecate/long-press-button.d.ts.map +1 -0
  3. package/dist/graph-widgets/_deprecate/long-press-button.js.map +1 -0
  4. package/dist/graph-widgets/_deprecate/view-control-widget.d.ts.map +1 -0
  5. package/dist/graph-widgets/_deprecate/view-control-widget.js.map +1 -0
  6. package/dist/{widgets → graph-widgets}/long-press-button.d.ts +1 -0
  7. package/dist/graph-widgets/long-press-button.d.ts.map +1 -0
  8. package/dist/{widgets → graph-widgets}/long-press-button.js +1 -0
  9. package/dist/graph-widgets/long-press-button.js.map +1 -0
  10. package/dist/graph-widgets/long-press-controller.d.ts.map +1 -0
  11. package/dist/graph-widgets/long-press-controller.js.map +1 -0
  12. package/dist/{widgets → graph-widgets}/pan-widget.d.ts +3 -2
  13. package/dist/graph-widgets/pan-widget.d.ts.map +1 -0
  14. package/dist/{widgets → graph-widgets}/pan-widget.js +19 -15
  15. package/dist/graph-widgets/pan-widget.js.map +1 -0
  16. package/dist/{widgets → graph-widgets}/zoom-range-widget.d.ts +3 -3
  17. package/dist/graph-widgets/zoom-range-widget.d.ts.map +1 -0
  18. package/dist/{widgets → graph-widgets}/zoom-range-widget.js +24 -23
  19. package/dist/graph-widgets/zoom-range-widget.js.map +1 -0
  20. package/dist/html-overlay-widgets/html-cluster-widget.d.ts.map +1 -0
  21. package/dist/html-overlay-widgets/html-cluster-widget.js.map +1 -0
  22. package/dist/{widgets → html-overlay-widgets}/html-overlay-item.d.ts +1 -0
  23. package/dist/html-overlay-widgets/html-overlay-item.d.ts.map +1 -0
  24. package/dist/html-overlay-widgets/html-overlay-item.js.map +1 -0
  25. package/dist/{widgets → html-overlay-widgets}/html-overlay-widget.d.ts +8 -2
  26. package/dist/html-overlay-widgets/html-overlay-widget.d.ts.map +1 -0
  27. package/dist/{widgets → html-overlay-widgets}/html-overlay-widget.js +21 -7
  28. package/dist/html-overlay-widgets/html-overlay-widget.js.map +1 -0
  29. package/dist/{widgets → html-overlay-widgets}/html-tooltip-widget.d.ts +1 -0
  30. package/dist/html-overlay-widgets/html-tooltip-widget.d.ts.map +1 -0
  31. package/dist/html-overlay-widgets/html-tooltip-widget.js.map +1 -0
  32. package/dist/index.cjs +5119 -87
  33. package/dist/index.cjs.map +4 -4
  34. package/dist/index.d.ts +33 -12
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +27 -6
  37. package/dist/index.js.map +1 -1
  38. package/dist/keyboard-shortcuts/keyboard-shortcuts-manager.d.ts +18 -0
  39. package/dist/keyboard-shortcuts/keyboard-shortcuts-manager.d.ts.map +1 -0
  40. package/dist/keyboard-shortcuts/keyboard-shortcuts-manager.js +47 -0
  41. package/dist/keyboard-shortcuts/keyboard-shortcuts-manager.js.map +1 -0
  42. package/dist/keyboard-shortcuts/keyboard-shortcuts.d.ts +22 -0
  43. package/dist/keyboard-shortcuts/keyboard-shortcuts.d.ts.map +1 -0
  44. package/dist/keyboard-shortcuts/keyboard-shortcuts.js +83 -0
  45. package/dist/keyboard-shortcuts/keyboard-shortcuts.js.map +1 -0
  46. package/dist/lib/settings/settings.d.ts +17 -0
  47. package/dist/lib/settings/settings.d.ts.map +1 -0
  48. package/dist/lib/settings/settings.js +140 -0
  49. package/dist/lib/settings/settings.js.map +1 -0
  50. package/dist/ready-to-upstream-widgets/reset-view-widget.d.ts +21 -0
  51. package/dist/ready-to-upstream-widgets/reset-view-widget.d.ts.map +1 -0
  52. package/dist/ready-to-upstream-widgets/reset-view-widget.js +29 -0
  53. package/dist/ready-to-upstream-widgets/reset-view-widget.js.map +1 -0
  54. package/dist/widget-components/icon-button.d.ts +12 -0
  55. package/dist/widget-components/icon-button.d.ts.map +1 -0
  56. package/dist/widget-components/icon-button.js +12 -0
  57. package/dist/widget-components/icon-button.js.map +1 -0
  58. package/dist/widget-components/select-widget-component.d.ts +15 -0
  59. package/dist/widget-components/select-widget-component.d.ts.map +1 -0
  60. package/dist/widget-components/select-widget-component.js +229 -0
  61. package/dist/widget-components/select-widget-component.js.map +1 -0
  62. package/dist/widget-panels/box-widget.d.ts +43 -0
  63. package/dist/widget-panels/box-widget.d.ts.map +1 -0
  64. package/dist/widget-panels/box-widget.js +191 -0
  65. package/dist/widget-panels/box-widget.js.map +1 -0
  66. package/dist/widget-panels/box-widget.test.d.ts +2 -0
  67. package/dist/widget-panels/box-widget.test.d.ts.map +1 -0
  68. package/dist/widget-panels/box-widget.test.js +41 -0
  69. package/dist/widget-panels/box-widget.test.js.map +1 -0
  70. package/dist/widget-panels/full-screen-panel-widget.d.ts +33 -0
  71. package/dist/widget-panels/full-screen-panel-widget.d.ts.map +1 -0
  72. package/dist/widget-panels/full-screen-panel-widget.js +153 -0
  73. package/dist/widget-panels/full-screen-panel-widget.js.map +1 -0
  74. package/dist/widget-panels/full-screen-panel-widget.test.d.ts +2 -0
  75. package/dist/widget-panels/full-screen-panel-widget.test.d.ts.map +1 -0
  76. package/dist/widget-panels/full-screen-panel-widget.test.js +40 -0
  77. package/dist/widget-panels/full-screen-panel-widget.test.js.map +1 -0
  78. package/dist/widget-panels/heap-memory-widget.d.ts +26 -0
  79. package/dist/widget-panels/heap-memory-widget.d.ts.map +1 -0
  80. package/dist/widget-panels/heap-memory-widget.js +156 -0
  81. package/dist/widget-panels/heap-memory-widget.js.map +1 -0
  82. package/dist/widget-panels/keyboard-shortcuts-widget.d.ts +46 -0
  83. package/dist/widget-panels/keyboard-shortcuts-widget.d.ts.map +1 -0
  84. package/dist/widget-panels/keyboard-shortcuts-widget.js +301 -0
  85. package/dist/widget-panels/keyboard-shortcuts-widget.js.map +1 -0
  86. package/dist/widget-panels/modal-widget.d.ts +62 -0
  87. package/dist/widget-panels/modal-widget.d.ts.map +1 -0
  88. package/dist/widget-panels/modal-widget.js +309 -0
  89. package/dist/widget-panels/modal-widget.js.map +1 -0
  90. package/dist/widget-panels/modal-widget.test.d.ts +2 -0
  91. package/dist/widget-panels/modal-widget.test.d.ts.map +1 -0
  92. package/dist/widget-panels/modal-widget.test.js +103 -0
  93. package/dist/widget-panels/modal-widget.test.js.map +1 -0
  94. package/dist/widget-panels/omni-box-widget.d.ts +59 -0
  95. package/dist/widget-panels/omni-box-widget.d.ts.map +1 -0
  96. package/dist/widget-panels/omni-box-widget.js +562 -0
  97. package/dist/widget-panels/omni-box-widget.js.map +1 -0
  98. package/dist/widget-panels/omni-box-widget.test.d.ts +2 -0
  99. package/dist/widget-panels/omni-box-widget.test.d.ts.map +1 -0
  100. package/dist/widget-panels/omni-box-widget.test.js +49 -0
  101. package/dist/widget-panels/omni-box-widget.test.js.map +1 -0
  102. package/dist/widget-panels/reset-view-widget.d.ts +20 -0
  103. package/dist/widget-panels/reset-view-widget.d.ts.map +1 -0
  104. package/dist/widget-panels/reset-view-widget.js +28 -0
  105. package/dist/widget-panels/reset-view-widget.js.map +1 -0
  106. package/dist/widget-panels/settings-panel.d.ts +49 -0
  107. package/dist/widget-panels/settings-panel.d.ts.map +1 -0
  108. package/dist/widget-panels/settings-panel.js +263 -0
  109. package/dist/widget-panels/settings-panel.js.map +1 -0
  110. package/dist/widget-panels/settings-panel.test.d.ts +2 -0
  111. package/dist/widget-panels/settings-panel.test.d.ts.map +1 -0
  112. package/dist/widget-panels/settings-panel.test.js +217 -0
  113. package/dist/widget-panels/settings-panel.test.js.map +1 -0
  114. package/dist/widget-panels/sidebar-widget.d.ts +65 -0
  115. package/dist/widget-panels/sidebar-widget.d.ts.map +1 -0
  116. package/dist/widget-panels/sidebar-widget.js +339 -0
  117. package/dist/widget-panels/sidebar-widget.js.map +1 -0
  118. package/dist/widget-panels/sidebar-widget.test.d.ts +2 -0
  119. package/dist/widget-panels/sidebar-widget.test.d.ts.map +1 -0
  120. package/dist/widget-panels/sidebar-widget.test.js +175 -0
  121. package/dist/widget-panels/sidebar-widget.test.js.map +1 -0
  122. package/dist/widget-panels/stats-panel.d.ts +34 -0
  123. package/dist/widget-panels/stats-panel.d.ts.map +1 -0
  124. package/dist/widget-panels/stats-panel.js +61 -0
  125. package/dist/widget-panels/stats-panel.js.map +1 -0
  126. package/dist/widget-panels/stats-panel.test.d.ts +2 -0
  127. package/dist/widget-panels/stats-panel.test.d.ts.map +1 -0
  128. package/dist/widget-panels/stats-panel.test.js +36 -0
  129. package/dist/widget-panels/stats-panel.test.js.map +1 -0
  130. package/dist/widget-panels/text-editor-panel-monaco-runtime.d.ts +17 -0
  131. package/dist/widget-panels/text-editor-panel-monaco-runtime.d.ts.map +1 -0
  132. package/dist/widget-panels/text-editor-panel-monaco-runtime.js +69 -0
  133. package/dist/widget-panels/text-editor-panel-monaco-runtime.js.map +1 -0
  134. package/dist/widget-panels/text-editor-panel.d.ts +42 -0
  135. package/dist/widget-panels/text-editor-panel.d.ts.map +1 -0
  136. package/dist/widget-panels/text-editor-panel.js +249 -0
  137. package/dist/widget-panels/text-editor-panel.js.map +1 -0
  138. package/dist/widget-panels/text-editor-panel.test.d.ts +2 -0
  139. package/dist/widget-panels/text-editor-panel.test.d.ts.map +1 -0
  140. package/dist/widget-panels/text-editor-panel.test.js +393 -0
  141. package/dist/widget-panels/text-editor-panel.test.js.map +1 -0
  142. package/dist/widget-panels/time-measure-widget.d.ts +49 -0
  143. package/dist/widget-panels/time-measure-widget.d.ts.map +1 -0
  144. package/dist/widget-panels/time-measure-widget.js +351 -0
  145. package/dist/widget-panels/time-measure-widget.js.map +1 -0
  146. package/dist/widget-panels/toast-manager.d.ts +24 -0
  147. package/dist/widget-panels/toast-manager.d.ts.map +1 -0
  148. package/dist/widget-panels/toast-manager.js +96 -0
  149. package/dist/widget-panels/toast-manager.js.map +1 -0
  150. package/dist/widget-panels/toast-manager.test.d.ts +2 -0
  151. package/dist/widget-panels/toast-manager.test.d.ts.map +1 -0
  152. package/dist/widget-panels/toast-manager.test.js +75 -0
  153. package/dist/widget-panels/toast-manager.test.js.map +1 -0
  154. package/dist/widget-panels/toast-widget.d.ts +20 -0
  155. package/dist/widget-panels/toast-widget.d.ts.map +1 -0
  156. package/dist/widget-panels/toast-widget.js +207 -0
  157. package/dist/widget-panels/toast-widget.js.map +1 -0
  158. package/dist/widget-panels/toast-widget.test.d.ts +2 -0
  159. package/dist/widget-panels/toast-widget.test.d.ts.map +1 -0
  160. package/dist/widget-panels/toast-widget.test.js +81 -0
  161. package/dist/widget-panels/toast-widget.test.js.map +1 -0
  162. package/dist/widget-panels/toggle-widget.d.ts +34 -0
  163. package/dist/widget-panels/toggle-widget.d.ts.map +1 -0
  164. package/dist/widget-panels/toggle-widget.js +46 -0
  165. package/dist/widget-panels/toggle-widget.js.map +1 -0
  166. package/dist/widget-panels/toolbar-widget.d.ts +53 -0
  167. package/dist/widget-panels/toolbar-widget.d.ts.map +1 -0
  168. package/dist/widget-panels/toolbar-widget.js +160 -0
  169. package/dist/widget-panels/toolbar-widget.js.map +1 -0
  170. package/dist/widget-panels/toolbar-widget.test.d.ts +2 -0
  171. package/dist/widget-panels/toolbar-widget.test.d.ts.map +1 -0
  172. package/dist/widget-panels/toolbar-widget.test.js +105 -0
  173. package/dist/widget-panels/toolbar-widget.test.js.map +1 -0
  174. package/dist/widget-panels/widget-containers.d.ts +275 -0
  175. package/dist/widget-panels/widget-containers.d.ts.map +1 -0
  176. package/dist/widget-panels/widget-containers.js +761 -0
  177. package/dist/widget-panels/widget-containers.js.map +1 -0
  178. package/dist/widget-panels/widget-containers.test.d.ts +2 -0
  179. package/dist/widget-panels/widget-containers.test.d.ts.map +1 -0
  180. package/dist/widget-panels/widget-containers.test.js +337 -0
  181. package/dist/widget-panels/widget-containers.test.js.map +1 -0
  182. package/dist/widget-panels/y-zoom-widget.d.ts +66 -0
  183. package/dist/widget-panels/y-zoom-widget.d.ts.map +1 -0
  184. package/dist/widget-panels/y-zoom-widget.js +264 -0
  185. package/dist/widget-panels/y-zoom-widget.js.map +1 -0
  186. package/dist/widget-panels/y-zoom-widget.test.d.ts +2 -0
  187. package/dist/widget-panels/y-zoom-widget.test.d.ts.map +1 -0
  188. package/dist/widget-panels/y-zoom-widget.test.js +71 -0
  189. package/dist/widget-panels/y-zoom-widget.test.js.map +1 -0
  190. package/dist/widgets/heap-memory-widget.d.ts +26 -0
  191. package/dist/widgets/heap-memory-widget.d.ts.map +1 -0
  192. package/dist/widgets/heap-memory-widget.js +158 -0
  193. package/dist/widgets/heap-memory-widget.js.map +1 -0
  194. package/dist/widgets/keyboard-shortcuts-widget.d.ts +28 -0
  195. package/dist/widgets/keyboard-shortcuts-widget.d.ts.map +1 -0
  196. package/dist/widgets/keyboard-shortcuts-widget.js +125 -0
  197. package/dist/widgets/keyboard-shortcuts-widget.js.map +1 -0
  198. package/dist/widgets/omni-box-widget.d.ts +59 -0
  199. package/dist/widgets/omni-box-widget.d.ts.map +1 -0
  200. package/dist/widgets/omni-box-widget.js +493 -0
  201. package/dist/widgets/omni-box-widget.js.map +1 -0
  202. package/dist/widgets/settings-widget.d.ts +64 -0
  203. package/dist/widgets/settings-widget.d.ts.map +1 -0
  204. package/dist/widgets/settings-widget.js +148 -0
  205. package/dist/widgets/settings-widget.js.map +1 -0
  206. package/dist/widgets/view-manager-utils.d.ts +1 -1
  207. package/dist/widgets/view-manager-utils.d.ts.map +1 -1
  208. package/dist/widgets/view-manager-utils.js.map +1 -1
  209. package/package.json +4 -3
  210. package/src/{widgets → graph-widgets}/long-press-button.tsx +1 -0
  211. package/src/{widgets → graph-widgets}/pan-widget.tsx +30 -23
  212. package/src/{widgets → graph-widgets}/zoom-range-widget.tsx +36 -34
  213. package/src/{widgets → html-overlay-widgets}/html-overlay-item.tsx +1 -0
  214. package/src/{widgets → html-overlay-widgets}/html-overlay-widget.tsx +32 -9
  215. package/src/{widgets → html-overlay-widgets}/html-tooltip-widget.tsx +1 -0
  216. package/src/index.ts +109 -12
  217. package/src/keyboard-shortcuts/keyboard-shortcuts-manager.ts +58 -0
  218. package/src/keyboard-shortcuts/keyboard-shortcuts.ts +113 -0
  219. package/src/keyboard-shortcuts/keyboard-shortcuts.ts.disabled +107 -0
  220. package/src/lib/settings/settings.ts +203 -0
  221. package/src/ready-to-upstream-widgets/reset-view-widget.tsx +57 -0
  222. package/src/widget-components/icon-button.tsx +38 -0
  223. package/src/widget-components/select-widget-component.tsx +354 -0
  224. package/src/widget-panels/box-widget.test.tsx +50 -0
  225. package/src/widget-panels/box-widget.tsx +284 -0
  226. package/src/widget-panels/full-screen-panel-widget.test.tsx +49 -0
  227. package/src/widget-panels/full-screen-panel-widget.tsx +223 -0
  228. package/src/widget-panels/heap-memory-widget.tsx +221 -0
  229. package/src/widget-panels/keyboard-shortcuts-widget.tsx +511 -0
  230. package/src/widget-panels/modal-widget.test.tsx +124 -0
  231. package/src/widget-panels/modal-widget.tsx +464 -0
  232. package/src/widget-panels/omni-box-widget.test.tsx +59 -0
  233. package/src/widget-panels/omni-box-widget.tsx +849 -0
  234. package/src/widget-panels/reset-view-widget.tsx +56 -0
  235. package/src/widget-panels/settings-panel.test.tsx +286 -0
  236. package/src/widget-panels/settings-panel.tsx +619 -0
  237. package/src/widget-panels/sidebar-widget.test.tsx +215 -0
  238. package/src/widget-panels/sidebar-widget.tsx +525 -0
  239. package/src/widget-panels/stats-panel.test.tsx +41 -0
  240. package/src/widget-panels/stats-panel.tsx +108 -0
  241. package/src/widget-panels/text-editor-panel-monaco-runtime.ts +97 -0
  242. package/src/widget-panels/text-editor-panel.test.tsx +618 -0
  243. package/src/widget-panels/text-editor-panel.tsx +375 -0
  244. package/src/widget-panels/time-measure-widget.tsx +445 -0
  245. package/src/widget-panels/toast-manager.test.ts +98 -0
  246. package/src/widget-panels/toast-manager.ts +134 -0
  247. package/src/widget-panels/toast-widget.test.tsx +105 -0
  248. package/src/widget-panels/toast-widget.tsx +293 -0
  249. package/src/widget-panels/toggle-widget.tsx +93 -0
  250. package/src/widget-panels/toolbar-widget.test.ts +129 -0
  251. package/src/widget-panels/toolbar-widget.tsx +293 -0
  252. package/src/widget-panels/widget-containers.test.tsx +453 -0
  253. package/src/widget-panels/widget-containers.tsx +1330 -0
  254. package/src/widget-panels/worker-modules.d.ts +7 -0
  255. package/src/widget-panels/y-zoom-widget.test.tsx +101 -0
  256. package/src/widget-panels/y-zoom-widget.tsx +376 -0
  257. package/src/widgets/heap-memory-widget.tsx +223 -0
  258. package/src/widgets/keyboard-shortcuts-widget.tsx +245 -0
  259. package/src/widgets/omni-box-widget.tsx +768 -0
  260. package/src/widgets/settings-widget.tsx +277 -0
  261. package/src/widgets/view-manager-utils.ts +1 -1
  262. package/dist/_deprecate/long-press-button.d.ts.map +0 -1
  263. package/dist/_deprecate/long-press-button.js.map +0 -1
  264. package/dist/_deprecate/view-control-widget.d.ts.map +0 -1
  265. package/dist/_deprecate/view-control-widget.js.map +0 -1
  266. package/dist/widgets/html-cluster-widget.d.ts.map +0 -1
  267. package/dist/widgets/html-cluster-widget.js.map +0 -1
  268. package/dist/widgets/html-overlay-item.d.ts.map +0 -1
  269. package/dist/widgets/html-overlay-item.js.map +0 -1
  270. package/dist/widgets/html-overlay-widget.d.ts.map +0 -1
  271. package/dist/widgets/html-overlay-widget.js.map +0 -1
  272. package/dist/widgets/html-tooltip-widget.d.ts.map +0 -1
  273. package/dist/widgets/html-tooltip-widget.js.map +0 -1
  274. package/dist/widgets/long-press-button.d.ts.map +0 -1
  275. package/dist/widgets/long-press-button.js.map +0 -1
  276. package/dist/widgets/long-press-controller.d.ts.map +0 -1
  277. package/dist/widgets/long-press-controller.js.map +0 -1
  278. package/dist/widgets/pan-widget.d.ts.map +0 -1
  279. package/dist/widgets/pan-widget.js.map +0 -1
  280. package/dist/widgets/zoom-range-widget.d.ts.map +0 -1
  281. package/dist/widgets/zoom-range-widget.js.map +0 -1
  282. /package/dist/{_deprecate → graph-widgets/_deprecate}/long-press-button.d.ts +0 -0
  283. /package/dist/{_deprecate → graph-widgets/_deprecate}/long-press-button.js +0 -0
  284. /package/dist/{_deprecate → graph-widgets/_deprecate}/view-control-widget.d.ts +0 -0
  285. /package/dist/{_deprecate → graph-widgets/_deprecate}/view-control-widget.js +0 -0
  286. /package/dist/{widgets → graph-widgets}/long-press-controller.d.ts +0 -0
  287. /package/dist/{widgets → graph-widgets}/long-press-controller.js +0 -0
  288. /package/dist/{widgets → html-overlay-widgets}/html-cluster-widget.d.ts +0 -0
  289. /package/dist/{widgets → html-overlay-widgets}/html-cluster-widget.js +0 -0
  290. /package/dist/{widgets → html-overlay-widgets}/html-overlay-item.js +0 -0
  291. /package/dist/{widgets → html-overlay-widgets}/html-tooltip-widget.js +0 -0
  292. /package/src/{_deprecate → graph-widgets/_deprecate}/long-press-button.tsx +0 -0
  293. /package/src/{_deprecate → graph-widgets/_deprecate}/view-control-widget.tsx +0 -0
  294. /package/src/{widgets → graph-widgets}/long-press-controller.ts +0 -0
  295. /package/src/{widgets → html-overlay-widgets}/html-cluster-widget.ts +0 -0
@@ -0,0 +1,393 @@
1
+ /** @jsxImportSource preact */
2
+ import { DarkTheme, LightTheme } from '@deck.gl/widgets';
3
+ import { h, render } from 'preact';
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5
+ import { WidgetContainerRenderer, asPanelContainer } from "./widget-containers.js";
6
+ import { TextEditorPanel } from "./text-editor-panel.js";
7
+ const monacoHarness = vi.hoisted(() => {
8
+ const modelsByUri = new Map();
9
+ const configureJsonSchema = vi.fn();
10
+ const clearJsonSchema = vi.fn();
11
+ const setTheme = vi.fn();
12
+ const loadTextEditorMonacoRuntime = vi.fn();
13
+ let lastCreatedModel = null;
14
+ let lastCreatedEditor = null;
15
+ /**
16
+ * Builds a fake Monaco runtime used by the text-editor widget tests.
17
+ */
18
+ function createRuntime() {
19
+ return {
20
+ monaco: {
21
+ Uri: {
22
+ parse: (uri) => ({
23
+ toString: () => uri
24
+ })
25
+ },
26
+ editor: {
27
+ getModel: (uri) => modelsByUri.get(uri.toString()) ?? null,
28
+ createModel: (value, language, uri) => {
29
+ let currentValue = value;
30
+ const listeners = new Set();
31
+ const model = {
32
+ uri,
33
+ language,
34
+ getValue: () => currentValue,
35
+ setValue: (nextValue) => {
36
+ currentValue = nextValue;
37
+ listeners.forEach((listener) => listener());
38
+ },
39
+ onDidChangeContent: (listener) => {
40
+ listeners.add(listener);
41
+ return {
42
+ dispose: () => listeners.delete(listener)
43
+ };
44
+ },
45
+ dispose: vi.fn(),
46
+ emitUserInput: (nextValue) => {
47
+ currentValue = nextValue;
48
+ listeners.forEach((listener) => listener());
49
+ }
50
+ };
51
+ modelsByUri.set(uri.toString(), model);
52
+ lastCreatedModel = model;
53
+ return model;
54
+ },
55
+ create: (_hostElement, _options) => {
56
+ const editor = {
57
+ updateOptions: vi.fn(),
58
+ dispose: vi.fn()
59
+ };
60
+ lastCreatedEditor = editor;
61
+ return editor;
62
+ },
63
+ setModelLanguage: (model, language) => {
64
+ model.language = language;
65
+ },
66
+ setTheme
67
+ }
68
+ },
69
+ configureJsonSchema,
70
+ clearJsonSchema
71
+ };
72
+ }
73
+ /**
74
+ * Resets the fake Monaco harness to the default resolved runtime state.
75
+ */
76
+ function reset() {
77
+ modelsByUri.clear();
78
+ configureJsonSchema.mockReset();
79
+ clearJsonSchema.mockReset();
80
+ setTheme.mockReset();
81
+ loadTextEditorMonacoRuntime.mockReset();
82
+ loadTextEditorMonacoRuntime.mockResolvedValue(createRuntime());
83
+ lastCreatedModel = null;
84
+ lastCreatedEditor = null;
85
+ }
86
+ /**
87
+ * Returns the most recently created fake Monaco model.
88
+ */
89
+ function getLastCreatedModel() {
90
+ return lastCreatedModel;
91
+ }
92
+ /**
93
+ * Returns the most recently created fake Monaco editor.
94
+ */
95
+ function getLastCreatedEditor() {
96
+ return lastCreatedEditor;
97
+ }
98
+ return {
99
+ clearJsonSchema,
100
+ configureJsonSchema,
101
+ createRuntime,
102
+ getLastCreatedEditor,
103
+ getLastCreatedModel,
104
+ loadTextEditorMonacoRuntime,
105
+ reset,
106
+ setTheme
107
+ };
108
+ });
109
+ vi.mock('./text-editor-panel-monaco-runtime', () => ({
110
+ loadTextEditorMonacoRuntime: monacoHarness.loadTextEditorMonacoRuntime
111
+ }));
112
+ /**
113
+ * Flushes queued microtasks so Preact effects and mocked async loaders settle.
114
+ */
115
+ async function flushMicrotasks() {
116
+ await Promise.resolve();
117
+ await Promise.resolve();
118
+ await new Promise((resolve) => setTimeout(resolve, 0));
119
+ await Promise.resolve();
120
+ await new Promise((resolve) => setTimeout(resolve, 0));
121
+ }
122
+ /**
123
+ * Waits until a test predicate becomes true or fails after a bounded number of retries.
124
+ */
125
+ async function waitForCondition(predicate, message, attempts = 8) {
126
+ for (let attempt = 0; attempt < attempts; attempt += 1) {
127
+ if (predicate()) {
128
+ return;
129
+ }
130
+ await flushMicrotasks();
131
+ }
132
+ throw new Error(message);
133
+ }
134
+ afterEach(() => {
135
+ for (const rootElement of [...document.body.children]) {
136
+ render(null, rootElement);
137
+ }
138
+ document.body.innerHTML = '';
139
+ });
140
+ beforeEach(() => {
141
+ monacoHarness.reset();
142
+ });
143
+ describe('TextEditorPanel', () => {
144
+ it('creates a widget panel with the expected id and title', () => {
145
+ const panel = new TextEditorPanel({
146
+ id: 'text-editor',
147
+ title: 'Text editor'
148
+ });
149
+ expect(panel.id).toBe('text-editor');
150
+ expect(panel.title).toBe('Text editor');
151
+ });
152
+ it('renders a loading state before monaco resolves', () => {
153
+ const root = document.createElement('div');
154
+ document.body.appendChild(root);
155
+ let resolveRuntime;
156
+ const pendingRuntime = new Promise((resolve) => {
157
+ resolveRuntime = resolve;
158
+ });
159
+ monacoHarness.loadTextEditorMonacoRuntime.mockReturnValueOnce(pendingRuntime);
160
+ render(new TextEditorPanel({ id: 'loading', title: 'Loading' }).content, root);
161
+ expect(root.querySelector('[data-text-editor-loading]')?.textContent).toContain('Loading editor');
162
+ expect(root.querySelector('[data-text-editor-host]')).toBeNull();
163
+ resolveRuntime?.(monacoHarness.createRuntime());
164
+ });
165
+ it('initializes from defaultValue when uncontrolled', async () => {
166
+ const root = document.createElement('div');
167
+ document.body.appendChild(root);
168
+ render(new TextEditorPanel({
169
+ id: 'uncontrolled',
170
+ title: 'Uncontrolled',
171
+ defaultValue: '{\"alpha\":1}'
172
+ }).content, root);
173
+ await waitForCondition(() => monacoHarness.getLastCreatedModel() !== null, 'Expected Monaco model to be created for uncontrolled panel.');
174
+ expect(monacoHarness.getLastCreatedModel()?.getValue()).toBe('{"alpha":1}');
175
+ expect(root.querySelector('[data-text-editor-host]')).toBeTruthy();
176
+ });
177
+ it('uses the light Monaco theme by default', async () => {
178
+ const root = document.createElement('div');
179
+ document.body.appendChild(root);
180
+ render(h(WidgetContainerRenderer, {
181
+ container: asPanelContainer(new TextEditorPanel({ id: 'light', title: 'Light' }))
182
+ }), root);
183
+ await waitForCondition(() => monacoHarness.getLastCreatedModel() !== null, 'Expected Monaco model to be created for light theme panel.');
184
+ expect(monacoHarness.setTheme).toHaveBeenCalledWith('vs');
185
+ });
186
+ it('uses the dark Monaco theme for a dark panel override', async () => {
187
+ const root = document.createElement('div');
188
+ document.body.appendChild(root);
189
+ render(h(WidgetContainerRenderer, {
190
+ container: asPanelContainer(new TextEditorPanel({
191
+ id: 'dark',
192
+ title: 'Dark',
193
+ theme: 'dark'
194
+ }))
195
+ }), root);
196
+ await waitForCondition(() => monacoHarness.getLastCreatedModel() !== null, 'Expected Monaco model to be created for dark theme panel.');
197
+ expect(monacoHarness.setTheme).toHaveBeenCalledWith('vs-dark');
198
+ });
199
+ it('uses custom Monaco theme ids when provided', async () => {
200
+ const root = document.createElement('div');
201
+ document.body.appendChild(root);
202
+ render(h(WidgetContainerRenderer, {
203
+ container: asPanelContainer(new TextEditorPanel({
204
+ id: 'custom-theme',
205
+ title: 'Custom theme',
206
+ theme: 'dark',
207
+ lightMonacoTheme: 'custom-light',
208
+ darkMonacoTheme: 'custom-dark'
209
+ }))
210
+ }), root);
211
+ await waitForCondition(() => monacoHarness.getLastCreatedModel() !== null, 'Expected Monaco model to be created for custom theme panel.');
212
+ expect(monacoHarness.setTheme).toHaveBeenCalledWith('custom-dark');
213
+ });
214
+ it('updates the Monaco theme when the effective panel theme changes', async () => {
215
+ const root = document.createElement('div');
216
+ document.body.appendChild(root);
217
+ render(h(WidgetContainerRenderer, {
218
+ container: asPanelContainer(new TextEditorPanel({
219
+ id: 'theme-switch',
220
+ title: 'Theme switch',
221
+ theme: 'dark'
222
+ }))
223
+ }), root);
224
+ await waitForCondition(() => monacoHarness.getLastCreatedModel() !== null, 'Expected Monaco model to be created before theme update.');
225
+ render(h(WidgetContainerRenderer, {
226
+ container: asPanelContainer(new TextEditorPanel({
227
+ id: 'theme-switch',
228
+ title: 'Theme switch',
229
+ theme: 'light'
230
+ }))
231
+ }), root);
232
+ await flushMicrotasks();
233
+ await waitForCondition(() => monacoHarness.setTheme.mock.lastCall?.[0] === 'vs', 'Expected Monaco theme to update to the light theme.');
234
+ expect(monacoHarness.setTheme).toHaveBeenLastCalledWith('vs');
235
+ });
236
+ it('updates to the custom light Monaco theme when the effective panel theme changes', async () => {
237
+ const root = document.createElement('div');
238
+ document.body.appendChild(root);
239
+ render(h(WidgetContainerRenderer, {
240
+ container: asPanelContainer(new TextEditorPanel({
241
+ id: 'custom-theme-switch',
242
+ title: 'Custom theme switch',
243
+ theme: 'dark',
244
+ lightMonacoTheme: 'custom-light',
245
+ darkMonacoTheme: 'custom-dark'
246
+ }))
247
+ }), root);
248
+ await waitForCondition(() => monacoHarness.getLastCreatedModel() !== null, 'Expected Monaco model to be created before custom theme update.');
249
+ render(h(WidgetContainerRenderer, {
250
+ container: asPanelContainer(new TextEditorPanel({
251
+ id: 'custom-theme-switch',
252
+ title: 'Custom theme switch',
253
+ theme: 'light',
254
+ lightMonacoTheme: 'custom-light',
255
+ darkMonacoTheme: 'custom-dark'
256
+ }))
257
+ }), root);
258
+ await flushMicrotasks();
259
+ await waitForCondition(() => monacoHarness.setTheme.mock.lastCall?.[0] === 'custom-light', 'Expected Monaco theme to update to the custom light theme.');
260
+ expect(monacoHarness.setTheme).toHaveBeenLastCalledWith('custom-light');
261
+ });
262
+ it('updates the Monaco theme when inherited widget theme variables change', async () => {
263
+ const widgetContainer = document.createElement('div');
264
+ const root = document.createElement('div');
265
+ widgetContainer.className = 'deck-widget-container';
266
+ widgetContainer.style.setProperty('--menu-background', LightTheme['--menu-background'] ?? '');
267
+ widgetContainer.appendChild(root);
268
+ document.body.appendChild(widgetContainer);
269
+ render(h(WidgetContainerRenderer, {
270
+ container: asPanelContainer(new TextEditorPanel({
271
+ id: 'theme-vars-switch',
272
+ title: 'Theme vars switch'
273
+ }))
274
+ }), root);
275
+ await waitForCondition(() => monacoHarness.getLastCreatedModel() !== null, 'Expected Monaco model to be created before inherited theme update.');
276
+ expect(monacoHarness.setTheme).toHaveBeenLastCalledWith('vs');
277
+ widgetContainer.style.setProperty('--menu-background', DarkTheme['--menu-background'] ?? '');
278
+ await waitForCondition(() => monacoHarness.setTheme.mock.lastCall?.[0] === 'vs-dark', 'Expected Monaco theme to update after inherited widget theme changes.');
279
+ expect(monacoHarness.setTheme).toHaveBeenLastCalledWith('vs-dark');
280
+ });
281
+ it('respects controlled value updates', async () => {
282
+ const root = document.createElement('div');
283
+ document.body.appendChild(root);
284
+ render(new TextEditorPanel({
285
+ id: 'controlled',
286
+ title: 'Controlled',
287
+ value: '{"alpha":1}'
288
+ }).content, root);
289
+ await waitForCondition(() => monacoHarness.getLastCreatedModel() !== null, 'Expected Monaco model to be created for controlled panel.');
290
+ expect(monacoHarness.getLastCreatedModel()?.getValue()).toBe('{"alpha":1}');
291
+ render(new TextEditorPanel({
292
+ id: 'controlled',
293
+ title: 'Controlled',
294
+ value: '{"alpha":2}'
295
+ }).content, root);
296
+ await waitForCondition(() => monacoHarness.getLastCreatedModel()?.getValue() === '{"alpha":2}', 'Expected controlled Monaco value to update after rerender.');
297
+ expect(monacoHarness.getLastCreatedModel()?.getValue()).toBe('{"alpha":2}');
298
+ });
299
+ it('calls onValueChange when the editor content changes', async () => {
300
+ const root = document.createElement('div');
301
+ document.body.appendChild(root);
302
+ const onValueChange = vi.fn();
303
+ render(new TextEditorPanel({
304
+ id: 'changes',
305
+ title: 'Changes',
306
+ defaultValue: 'start',
307
+ onValueChange
308
+ }).content, root);
309
+ await waitForCondition(() => monacoHarness.getLastCreatedModel() !== null, 'Expected Monaco model before simulating user input.');
310
+ monacoHarness.getLastCreatedModel()?.emitUserInput('next');
311
+ await waitForCondition(() => onValueChange.mock.calls.length > 0, 'Expected onValueChange to be called after simulated input.');
312
+ expect(onValueChange).toHaveBeenLastCalledWith('next');
313
+ });
314
+ it('applies JSON-schema configuration only in json mode', async () => {
315
+ const root = document.createElement('div');
316
+ document.body.appendChild(root);
317
+ render(new TextEditorPanel({
318
+ id: 'json-editor',
319
+ title: 'JSON editor',
320
+ jsonSchema: {
321
+ type: 'object'
322
+ }
323
+ }).content, root);
324
+ await waitForCondition(() => monacoHarness.configureJsonSchema.mock.calls.length > 0, 'Expected JSON schema registration for JSON editor.');
325
+ expect(monacoHarness.configureJsonSchema).toHaveBeenCalledWith('inmemory://deck-gl-community/widgets/json-editor', { type: 'object' });
326
+ render(new TextEditorPanel({
327
+ id: 'plain-editor',
328
+ title: 'Plain editor',
329
+ language: 'plaintext',
330
+ jsonSchema: {
331
+ type: 'object'
332
+ }
333
+ }).content, root);
334
+ await waitForCondition(() => monacoHarness.clearJsonSchema.mock.calls.some(([uri]) => uri === 'inmemory://deck-gl-community/widgets/plain-editor'), 'Expected plain-text mode to clear JSON schema registration.');
335
+ expect(monacoHarness.clearJsonSchema).toHaveBeenCalledWith('inmemory://deck-gl-community/widgets/plain-editor');
336
+ });
337
+ it('updates schema registration when jsonSchema changes', async () => {
338
+ const root = document.createElement('div');
339
+ document.body.appendChild(root);
340
+ render(new TextEditorPanel({
341
+ id: 'schema-editor',
342
+ title: 'Schema editor',
343
+ jsonSchema: {
344
+ type: 'object',
345
+ required: ['alpha']
346
+ }
347
+ }).content, root);
348
+ await flushMicrotasks();
349
+ render(new TextEditorPanel({
350
+ id: 'schema-editor',
351
+ title: 'Schema editor',
352
+ jsonSchema: {
353
+ type: 'object',
354
+ required: ['beta']
355
+ }
356
+ }).content, root);
357
+ await flushMicrotasks();
358
+ await waitForCondition(() => monacoHarness.configureJsonSchema.mock.lastCall?.[0] ===
359
+ 'inmemory://deck-gl-community/widgets/schema-editor' &&
360
+ JSON.stringify(monacoHarness.configureJsonSchema.mock.lastCall?.[1]) ===
361
+ JSON.stringify({
362
+ type: 'object',
363
+ required: ['beta']
364
+ }), 'Expected schema registration to update after jsonSchema changes.');
365
+ expect(monacoHarness.configureJsonSchema).toHaveBeenLastCalledWith('inmemory://deck-gl-community/widgets/schema-editor', {
366
+ type: 'object',
367
+ required: ['beta']
368
+ });
369
+ });
370
+ it('disposes editor resources on unmount', async () => {
371
+ const root = document.createElement('div');
372
+ document.body.appendChild(root);
373
+ render(new TextEditorPanel({ id: 'dispose', title: 'Dispose' }).content, root);
374
+ await waitForCondition(() => monacoHarness.getLastCreatedModel() !== null &&
375
+ monacoHarness.getLastCreatedEditor() !== null, 'Expected Monaco resources before unmount.');
376
+ const model = monacoHarness.getLastCreatedModel();
377
+ const editor = monacoHarness.getLastCreatedEditor();
378
+ render(null, root);
379
+ await flushMicrotasks();
380
+ expect(editor?.dispose).toHaveBeenCalledTimes(1);
381
+ expect(model?.dispose).toHaveBeenCalledTimes(1);
382
+ expect(monacoHarness.clearJsonSchema).toHaveBeenCalledWith('inmemory://deck-gl-community/widgets/dispose');
383
+ });
384
+ it('renders a load error fallback when monaco loading fails', async () => {
385
+ const root = document.createElement('div');
386
+ document.body.appendChild(root);
387
+ monacoHarness.loadTextEditorMonacoRuntime.mockRejectedValueOnce(new Error('boom'));
388
+ render(new TextEditorPanel({ id: 'error', title: 'Error' }).content, root);
389
+ await waitForCondition(() => (root.querySelector('[data-text-editor-error]')?.textContent ?? '').includes('boom'), 'Expected text editor error fallback to render when Monaco loading fails.');
390
+ expect(root.querySelector('[data-text-editor-error]')?.textContent).toContain('boom');
391
+ });
392
+ });
393
+ //# sourceMappingURL=text-editor-panel.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-editor-panel.test.js","sourceRoot":"","sources":["../../src/widget-panels/text-editor-panel.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /** @jsxImportSource preact */
2
+ import { Deck, Widget } from '@deck.gl/core';
3
+ import type { PickingInfo, WidgetPlacement, WidgetProps } from '@deck.gl/core';
4
+ import type { MjolnirGestureEvent, MjolnirPointerEvent } from 'mjolnir.js';
5
+ export type TimeMeasureRange = {
6
+ startTimeMs: number;
7
+ endTimeMs: number;
8
+ };
9
+ type TimeMeasureWidgetProps = WidgetProps & {
10
+ placement?: WidgetPlacement;
11
+ viewId?: string | null;
12
+ /** View to listen to for interactions. Defaults to 'main'. */
13
+ eventViewId?: string | string[] | null;
14
+ /** View to use for projecting pointer -> time. Defaults to event view. */
15
+ projectionViewId?: string | null;
16
+ label?: string;
17
+ activeLabel?: string;
18
+ onActivate?: () => void;
19
+ onDeactivate?: () => void;
20
+ onRangeChange?: (range: TimeMeasureRange | null) => void;
21
+ onSelectionChange?: (selection: TimeMeasureSelectionState) => void;
22
+ };
23
+ export type TimeMeasureSelectionState = {
24
+ phase: 'idle' | 'selecting-start' | 'selecting-end' | 'selected';
25
+ cursorTimeMs: number | null;
26
+ draftStartTimeMs: number | null;
27
+ range: TimeMeasureRange | null;
28
+ };
29
+ export declare class TimeMeasureWidget extends Widget<TimeMeasureWidgetProps, null> {
30
+ #private;
31
+ static defaultProps: Required<TimeMeasureWidgetProps>;
32
+ className: string;
33
+ placement: WidgetPlacement;
34
+ constructor(props?: TimeMeasureWidgetProps);
35
+ setProps(props: Partial<TimeMeasureWidgetProps>): void;
36
+ onAdd({ deck, viewId }: {
37
+ deck: Deck;
38
+ viewId: string | null;
39
+ }): HTMLDivElement | void;
40
+ onRemove(): void;
41
+ onRenderHTML(rootElement: HTMLElement): void;
42
+ onHover(info: PickingInfo, event: MjolnirPointerEvent | MjolnirGestureEvent): void;
43
+ onClick(info: PickingInfo, event: MjolnirGestureEvent): void;
44
+ onDragStart(info: PickingInfo, event: MjolnirGestureEvent): void;
45
+ onDrag(info: PickingInfo, event: MjolnirGestureEvent): void;
46
+ onDragEnd(info: PickingInfo, event: MjolnirGestureEvent): void;
47
+ }
48
+ export {};
49
+ //# sourceMappingURL=time-measure-widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-measure-widget.d.ts","sourceRoot":"","sources":["../../src/widget-panels/time-measure-widget.tsx"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAC,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAC;AAK3C,OAAO,KAAK,EAAC,WAAW,EAAY,eAAe,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AACvF,OAAO,KAAK,EAEV,mBAAmB,EAEnB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,gBAAgB,GAAG;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC,CAAC;AAExE,KAAK,sBAAsB,GAAG,WAAW,GAAG;IAC1C,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACvC,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,KAAK,IAAI,CAAC;IACzD,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,eAAe,GAAG,UAAU,CAAC;IACjE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,qBAAa,iBAAkB,SAAQ,MAAM,CAAC,sBAAsB,EAAE,IAAI,CAAC;;IACzE,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAanD;IAEF,SAAS,SAA8B;IACvC,SAAS,EAAE,eAAe,CAAc;gBAiB5B,KAAK,GAAE,sBAA2B;IAK9C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,IAAI;IAQtD,KAAK,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,EAAE;QAAC,IAAI,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAC,GAAG,cAAc,GAAG,IAAI;IAWjF,QAAQ,IAAI,IAAI;IAIhB,YAAY,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAc5C,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,GAAG,mBAAmB,GAAG,IAAI;IAalF,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAoC5D,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAwBhE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAY3D,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,GAAG,IAAI;CAqP/D"}