@deck.gl-community/widgets 9.2.5 → 9.3.0-beta.1

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
package/src/index.ts CHANGED
@@ -2,17 +2,114 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- export {PanWidget} from './widgets/pan-widget';
6
- export type {PanWidgetProps} from './widgets/pan-widget';
5
+ export {PanWidget} from './graph-widgets/pan-widget';
6
+ export type {PanWidgetProps} from './graph-widgets/pan-widget';
7
7
 
8
- export {ZoomRangeWidget} from './widgets/zoom-range-widget';
9
- export type {ZoomRangeWidgetProps} from './widgets/zoom-range-widget';
8
+ export {ZoomRangeWidget} from './graph-widgets/zoom-range-widget';
9
+ export type {ZoomRangeWidgetProps} from './graph-widgets/zoom-range-widget';
10
10
 
11
- export {HtmlOverlayWidget} from './widgets/html-overlay-widget';
12
- export type {HtmlOverlayWidgetProps} from './widgets/html-overlay-widget';
13
- export {HtmlOverlayItem} from './widgets/html-overlay-item';
14
- export type {HtmlOverlayItemProps} from './widgets/html-overlay-item';
15
- export {HtmlClusterWidget} from './widgets/html-cluster-widget';
16
- export type {HtmlClusterWidgetProps} from './widgets/html-cluster-widget';
17
- export {HtmlTooltipWidget} from './widgets/html-tooltip-widget';
18
- export type {HtmlTooltipWidgetProps} from './widgets/html-tooltip-widget';
11
+ export {HtmlOverlayWidget} from './html-overlay-widgets/html-overlay-widget';
12
+ export type {HtmlOverlayWidgetProps} from './html-overlay-widgets/html-overlay-widget';
13
+ export {HtmlOverlayItem} from './html-overlay-widgets/html-overlay-item';
14
+ export type {HtmlOverlayItemProps} from './html-overlay-widgets/html-overlay-item';
15
+ export {HtmlClusterWidget} from './html-overlay-widgets/html-cluster-widget';
16
+ export type {HtmlClusterWidgetProps} from './html-overlay-widgets/html-cluster-widget';
17
+ export {HtmlTooltipWidget} from './html-overlay-widgets/html-tooltip-widget';
18
+ export type {HtmlTooltipWidgetProps} from './html-overlay-widgets/html-tooltip-widget';
19
+
20
+ export {HeapMemoryWidget} from './widgets/heap-memory-widget';
21
+ export {
22
+ SettingsWidget,
23
+ type SettingsWidgetProps,
24
+ type SettingsWidgetSchema,
25
+ type SettingsWidgetSectionDescriptor,
26
+ type SettingsWidgetSettingDescriptor,
27
+ type SettingsWidgetState
28
+ } from './widgets/settings-widget';
29
+ export {
30
+ OmniBoxWidget,
31
+ type OmniBoxOption,
32
+ type OmniBoxOptionProvider,
33
+ type OmniBoxRenderOptionArgs,
34
+ type OmniBoxWidgetProps
35
+ } from './widgets/omni-box-widget';
36
+ export {ResetViewWidget, type ResetViewWidgetProps} from './widget-panels/reset-view-widget';
37
+ export {
38
+ TimeMeasureWidget,
39
+ type TimeMeasureRange,
40
+ type TimeMeasureSelectionState
41
+ } from './widget-panels/time-measure-widget';
42
+ export {ToastWidget, type ToastWidgetProps} from './widget-panels/toast-widget';
43
+ export {
44
+ toastManager,
45
+ type ToastEntry,
46
+ type ToastKind,
47
+ type ToastRequest
48
+ } from './widget-panels/toast-manager';
49
+ export {YZoomWidget, type YZoomWidgetProps} from './widget-panels/y-zoom-widget';
50
+ export {
51
+ AccordeonPanel,
52
+ AccordeonWidgetContainer,
53
+ ColumnWidgetContainer,
54
+ ColumnPanel,
55
+ CustomPanel,
56
+ MarkdownPanel,
57
+ TabbedPanel,
58
+ TabbedWidgetContainer,
59
+ WidgetContainerRenderer,
60
+ asPanelContainer,
61
+ type AccordeonWidgetContainerProps,
62
+ type AccordeonPanelProps,
63
+ type ColumnWidgetContainerProps,
64
+ type ColumnPanelProps,
65
+ type CustomPanelProps,
66
+ type MarkdownPanelProps,
67
+ type TabbedWidgetContainerProps,
68
+ type TabbedPanelProps,
69
+ type WidgetContainer,
70
+ type WidgetContainerPanelBase,
71
+ type WidgetPanel,
72
+ type WidgetPanelContainer,
73
+ type WidgetPanelContainerProps,
74
+ type WidgetPanelRecord,
75
+ type WidgetPanelTheme,
76
+ type WidgetPanelThemeMode
77
+ } from './widget-panels/widget-containers';
78
+ export {BoxWidget, type BoxWidgetProps} from './widget-panels/box-widget';
79
+ export {
80
+ FullScreenPanelWidget,
81
+ type FullScreenPanelWidgetProps
82
+ } from './widget-panels/full-screen-panel-widget';
83
+ export {
84
+ KeyboardShortcutsWidget,
85
+ KeyboardShortcutsPanel,
86
+ type KeyboardShortcutsPanelProps
87
+ } from './widget-panels/keyboard-shortcuts-widget';
88
+ export {ModalWidget, type ModalWidgetProps} from './widget-panels/modal-widget';
89
+ export {SettingsPanel, type SettingsPanelProps} from './widget-panels/settings-panel';
90
+ export {
91
+ SelectWidgetComponent,
92
+ type SelectWidgetComponentOption,
93
+ type SelectWidgetComponentProps
94
+ } from './widget-components/select-widget-component';
95
+ export {IconButton, makeTextIcon} from './widget-components/icon-button';
96
+ export {StatsPanel, type StatsPanelProps} from './widget-panels/stats-panel';
97
+ export {SidebarWidget, type SidebarWidgetProps} from './widget-panels/sidebar-widget';
98
+ export {
99
+ ToolbarWidget,
100
+ type ToolbarWidgetActionItem,
101
+ type ToolbarWidgetBadgeItem,
102
+ type ToolbarWidgetItem,
103
+ type ToolbarWidgetProps,
104
+ type ToolbarWidgetToggleGroupItem,
105
+ type ToolbarWidgetToggleOption
106
+ } from './widget-panels/toolbar-widget';
107
+ export {TextEditorPanel, type TextEditorPanelProps} from './widget-panels/text-editor-panel';
108
+
109
+ export {
110
+ type KeyboardShortcut,
111
+ isShortcutMatchingKeyEvent,
112
+ findShortcutMatchingKeyEvent,
113
+ DEFAULT_SHORTCUTS,
114
+ formatKey
115
+ } from './keyboard-shortcuts/keyboard-shortcuts';
@@ -0,0 +1,58 @@
1
+ import {findShortcutMatchingKeyEvent} from './keyboard-shortcuts';
2
+
3
+ import type {KeyboardShortcut} from './keyboard-shortcuts';
4
+ import type {EventManager, MjolnirKeyEvent} from 'mjolnir.js';
5
+
6
+ export class KeyboardShortcutsManager {
7
+ private shortcuts: KeyboardShortcut[] = [];
8
+ eventManager: EventManager;
9
+
10
+ constructor(eventManager: EventManager, shortcuts: KeyboardShortcut[]) {
11
+ this.eventManager = eventManager;
12
+ this.shortcuts = shortcuts;
13
+ }
14
+
15
+ start() {
16
+ // console.log('Installing keyboard shortcuts:', this.shortcuts);
17
+ this.eventManager.on('keydown', this._handleKeyDown);
18
+ }
19
+
20
+ stop() {
21
+ this.eventManager.off('keydown', this._handleKeyDown);
22
+ // console.log('Uninstalling keyboard shortcuts:', this.shortcuts);
23
+ }
24
+
25
+ private _handleKeyDown = (e: MjolnirKeyEvent) => {
26
+ // console.log('Mjolnir key event:', e);
27
+ const shortcut = findShortcutMatchingKeyEvent(e.srcEvent, this.shortcuts);
28
+ if (shortcut) {
29
+ shortcut?.onKeyPress?.();
30
+ // e.preventDefault();
31
+ }
32
+ // console.log('Key pressed:', e.srcEvent.key, 'Matching shortcut:', shortcut?.name);
33
+ };
34
+ }
35
+
36
+ export class KeyboardShortcutsManagerDocument {
37
+ private shortcuts: KeyboardShortcut[] = [];
38
+ private _handleKeyDown = (e: KeyboardEvent) => {
39
+ const shortcut = findShortcutMatchingKeyEvent(e, this.shortcuts);
40
+ if (shortcut) {
41
+ shortcut?.onKeyPress?.();
42
+ // e.preventDefault();
43
+ }
44
+ // console.log('Key pressed:', e.key, 'Matching shortcut:', shortcut?.name);
45
+ };
46
+
47
+ constructor(shortcuts: KeyboardShortcut[]) {
48
+ this.shortcuts = shortcuts;
49
+ }
50
+
51
+ start() {
52
+ document.addEventListener('keydown', this._handleKeyDown);
53
+ }
54
+
55
+ stop() {
56
+ document.removeEventListener('keydown', this._handleKeyDown);
57
+ }
58
+ }
@@ -0,0 +1,113 @@
1
+ export type KeyboardShortcut = {
2
+ key: string;
3
+ commandKey?: boolean;
4
+ shiftKey?: boolean;
5
+ ctrlKey?: boolean;
6
+ dragMouse?: boolean;
7
+ badges?: string[];
8
+ displayPair?: {
9
+ id: string;
10
+ position: 'primary' | 'secondary';
11
+ description: string;
12
+ };
13
+
14
+ name: string;
15
+ description: string;
16
+ onKeyPress?: () => void;
17
+ };
18
+
19
+ export const DEFAULT_SHORTCUTS: KeyboardShortcut[] = [
20
+ {
21
+ key: '/',
22
+ commandKey: true,
23
+ name: 'Show Shortcuts',
24
+ description: 'Show keyboard shortcuts'
25
+ }
26
+ ];
27
+
28
+ const navigator = typeof window !== 'undefined' ? globalThis.navigator : {platform: ''};
29
+ const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;
30
+
31
+ export const isShortcutMatchingKeyEvent = (e: KeyboardEvent, shortcut: KeyboardShortcut) => {
32
+ const isCmd = isMac ? e.metaKey : e.ctrlKey;
33
+ return (
34
+ shortcut.key.toLowerCase() === e.key.toLowerCase() &&
35
+ (shortcut.commandKey ? isCmd : true) &&
36
+ (shortcut.shiftKey ? e.shiftKey : true) &&
37
+ (shortcut.ctrlKey ? e.ctrlKey : true)
38
+ );
39
+ };
40
+
41
+ export const findShortcutMatchingKeyEvent = (e: KeyboardEvent, shortcuts: KeyboardShortcut[]) => {
42
+ return shortcuts.find((shortcut) => isShortcutMatchingKeyEvent(e, shortcut));
43
+ };
44
+
45
+ // Pretty “keycap” glyphs for KeyboardEvent.key (browser KeyEvent)
46
+ export const keyCharacter: Record<string, string> = {
47
+ // Arrows
48
+ ArrowLeft: '←',
49
+ ArrowRight: '→',
50
+ ArrowUp: '↑',
51
+ ArrowDown: '↓',
52
+
53
+ // Navigation
54
+ Home: '⤒',
55
+ End: '⤓',
56
+ PageUp: '⇞',
57
+ PageDown: '⇟',
58
+
59
+ // Editing
60
+ Backspace: '⌫',
61
+ Delete: '⌦',
62
+ Insert: 'Ins',
63
+
64
+ // Whitespace / confirm / escape
65
+ Enter: '⏎',
66
+ Escape: '⎋',
67
+ Tab: '⇥',
68
+ ' ': '␠', // KeyboardEvent.key for Space is literally " "
69
+ Spacebar: '␠', // legacy (some older browsers)
70
+
71
+ // Modifiers
72
+ Shift: 'Shift', // '⇧',
73
+ Control: '⌃',
74
+ Alt: '⌥',
75
+ Meta: '⌘', // Windows key on Win; Command on macOS
76
+ CapsLock: '⇪',
77
+
78
+ // System / toggles
79
+ ContextMenu: '≣',
80
+ PrintScreen: '⎙',
81
+ ScrollLock: '⇳',
82
+ Pause: '⏸',
83
+ NumLock: '⇭',
84
+
85
+ // Media keys (common)
86
+ MediaPlayPause: '⏯',
87
+ MediaStop: '⏹',
88
+ MediaTrackNext: '⏭',
89
+ MediaTrackPrevious: '⏮',
90
+ AudioVolumeMute: '🔇',
91
+ AudioVolumeDown: '🔉',
92
+ AudioVolumeUp: '🔊'
93
+ };
94
+
95
+ // Optional: normalize a KeyboardEvent into a human-friendly label
96
+ export function formatKey(key: string): string {
97
+ // Prefer mapping for special keys, otherwise use the raw key (letters, digits, punctuation).
98
+ // Make single characters uppercase for nicer display.
99
+ const mapped = keyCharacter[key];
100
+ if (mapped) return mapped;
101
+
102
+ // Function keys: "F1"..."F24"
103
+ if (/^F\d{1,2}$/.test(key)) return key;
104
+
105
+ // Numpad keys often come as "Numpad1", etc.
106
+ if (key.startsWith('Numpad')) return key.replace('Numpad', 'Num ');
107
+
108
+ // For plain characters: show as-is, but uppercase letters.
109
+ if (key.length === 1) return key.toUpperCase();
110
+
111
+ // Fallback for less common named keys
112
+ return key.toUpperCase();
113
+ }
@@ -0,0 +1,107 @@
1
+ export type KeyboardShortcut = {
2
+ key: string;
3
+ commandKey?: boolean;
4
+ shiftKey?: boolean;
5
+ ctrlKey?: boolean;
6
+ dragMouse?: boolean;
7
+
8
+ name: string;
9
+ description: string;
10
+ onKeyPress?: () => void;
11
+ };
12
+
13
+ export const DEFAULT_SHORTCUTS: KeyboardShortcut[] = [
14
+ {
15
+ key: '/',
16
+ commandKey: true,
17
+ name: 'Show Shortcuts',
18
+ description: 'Show keyboard shortcuts',
19
+ },
20
+ ];
21
+
22
+ const navigator = typeof window !== 'undefined' ? globalThis.navigator : { platform: '' };
23
+ const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;
24
+
25
+ export const isShortcutMatchingKeyEvent = (e: KeyboardEvent, shortcut: KeyboardShortcut) => {
26
+ const isCmd = isMac ? e.metaKey : e.ctrlKey;
27
+ return (
28
+ shortcut.key.toLowerCase() === e.key.toLowerCase() &&
29
+ (shortcut.commandKey ? isCmd : true) &&
30
+ (shortcut.shiftKey ? e.shiftKey : true) &&
31
+ (shortcut.ctrlKey ? e.ctrlKey : true)
32
+ );
33
+ };
34
+
35
+ export const findShortcutMatchingKeyEvent = (e: KeyboardEvent, shortcuts: KeyboardShortcut[]) => {
36
+ return shortcuts.find((shortcut) => isShortcutMatchingKeyEvent(e, shortcut));
37
+ };
38
+
39
+ // Pretty “keycap” glyphs for KeyboardEvent.key (browser KeyEvent)
40
+ export const keyCharacter: Record<string, string> = {
41
+ // Arrows
42
+ 'ArrowLeft': '←',
43
+ 'ArrowRight': '→',
44
+ 'ArrowUp': '↑',
45
+ 'ArrowDown': '↓',
46
+
47
+ // Navigation
48
+ 'Home': '⤒',
49
+ 'End': '⤓',
50
+ 'PageUp': '⇞',
51
+ 'PageDown': '⇟',
52
+
53
+ // Editing
54
+ 'Backspace': '⌫',
55
+ 'Delete': '⌦',
56
+ 'Insert': 'Ins',
57
+
58
+ // Whitespace / confirm / escape
59
+ 'Enter': '⏎',
60
+ 'Escape': '⎋',
61
+ 'Tab': '⇥',
62
+ ' ': '␠', // KeyboardEvent.key for Space is literally " "
63
+ 'Spacebar': '␠', // legacy (some older browsers)
64
+
65
+ // Modifiers
66
+ 'Shift': '⇧',
67
+ 'Control': '⌃',
68
+ 'Alt': '⌥',
69
+ 'Meta': '⌘', // Windows key on Win; Command on macOS
70
+ 'CapsLock': '⇪',
71
+
72
+ // System / toggles
73
+ 'ContextMenu': '≣',
74
+ 'PrintScreen': '⎙',
75
+ 'ScrollLock': '⇳',
76
+ 'Pause': '⏸',
77
+ 'NumLock': '⇭',
78
+
79
+ // Media keys (common)
80
+ 'MediaPlayPause': '⏯',
81
+ 'MediaStop': '⏹',
82
+ 'MediaTrackNext': '⏭',
83
+ 'MediaTrackPrevious': '⏮',
84
+ 'AudioVolumeMute': '🔇',
85
+ 'AudioVolumeDown': '🔉',
86
+ 'AudioVolumeUp': '🔊',
87
+ };
88
+
89
+ // Optional: normalize a KeyboardEvent into a human-friendly label
90
+ export function formatKey(key: string): string {
91
+ // Prefer mapping for special keys, otherwise use the raw key (letters, digits, punctuation).
92
+ // Make single characters uppercase for nicer display.
93
+ const mapped = keyCharacter[key];
94
+ if (mapped) return mapped;
95
+
96
+ // Function keys: "F1"..."F24"
97
+ if (/^F\d{1,2}$/.test(key)) return key;
98
+
99
+ // Numpad keys often come as "Numpad1", etc.
100
+ if (key.startsWith('Numpad')) return key.replace('Numpad', 'Num ');
101
+
102
+ // For plain characters: show as-is, but uppercase letters.
103
+ if (key.length === 1) return key.toUpperCase();
104
+
105
+ // Fallback for less common named keys
106
+ return key.toUpperCase();
107
+ }
@@ -0,0 +1,203 @@
1
+ import type {
2
+ SettingsWidgetOption,
3
+ SettingsWidgetSchema,
4
+ SettingsWidgetSectionDescriptor,
5
+ SettingsWidgetSettingDescriptor,
6
+ SettingsWidgetState,
7
+ SettingsWidgetValue
8
+ } from '../../widgets/settings-widget';
9
+
10
+ export type SettingValue = SettingsWidgetValue;
11
+ export type SettingDescriptor = SettingsWidgetSettingDescriptor;
12
+ export type SettingsSectionDescriptor = SettingsWidgetSectionDescriptor;
13
+ export type SettingsSchema = SettingsWidgetSchema;
14
+ export type SettingsState = SettingsWidgetState;
15
+
16
+ export function clamp(value: number, min?: number, max?: number): number {
17
+ let clamped = value;
18
+ if (Number.isFinite(min)) {
19
+ clamped = Math.max(min, clamped);
20
+ }
21
+ if (Number.isFinite(max)) {
22
+ clamped = Math.min(max, clamped);
23
+ }
24
+ return clamped;
25
+ }
26
+
27
+ export function setValueAtPath(
28
+ settings: SettingsState,
29
+ path: string,
30
+ value: SettingValue
31
+ ): SettingsState {
32
+ const segments = parsePath(path);
33
+ if (!segments.length) {
34
+ return settings;
35
+ }
36
+
37
+ const nextSettings: SettingsState = {...settings};
38
+ let writeCursor: Record<string, unknown> = nextSettings;
39
+ let readCursor: Record<string, unknown> = settings;
40
+
41
+ segments.forEach((segment, index) => {
42
+ const isLeaf = index === segments.length - 1;
43
+
44
+ if (isLeaf) {
45
+ writeCursor[segment] = value;
46
+ return;
47
+ }
48
+
49
+ const existingChild = readCursor[segment];
50
+ const nextChild = isRecord(existingChild) ? {...existingChild} : {};
51
+ writeCursor[segment] = nextChild;
52
+
53
+ writeCursor = nextChild;
54
+ readCursor = isRecord(existingChild) ? existingChild : {};
55
+ });
56
+
57
+ return nextSettings;
58
+ }
59
+
60
+ export function getSectionKey(section: SettingsSectionDescriptor, index: number): string {
61
+ return section.id ?? section.name ?? `section-${index}`;
62
+ }
63
+
64
+ export function buildInitialCollapsedState(
65
+ sections: SettingsSectionDescriptor[]
66
+ ): Record<string, boolean> {
67
+ return sections.reduce<Record<string, boolean>>((result, section, index) => {
68
+ result[getSectionKey(section, index)] = getInitialCollapsedState(section);
69
+ return result;
70
+ }, {});
71
+ }
72
+
73
+ export function normalizeOption(option: SettingsWidgetOption): {
74
+ label: string;
75
+ value: SettingValue;
76
+ } {
77
+ if (isRecord(option) && 'label' in option && 'value' in option) {
78
+ return {
79
+ label: String(option.label),
80
+ value: option.value
81
+ };
82
+ }
83
+
84
+ return {
85
+ label: String(option),
86
+ value: option
87
+ };
88
+ }
89
+
90
+ // eslint-disable-next-line complexity
91
+ export function resolveSettingValue(
92
+ setting: SettingDescriptor,
93
+ settings: SettingsState
94
+ ): SettingValue {
95
+ const currentValue = getValueAtPath(settings, setting.name);
96
+
97
+ if (setting.type === 'boolean') {
98
+ return typeof currentValue === 'boolean' ? currentValue : (getDefaultValue(setting) as boolean);
99
+ }
100
+
101
+ if (setting.type === 'number') {
102
+ const numericValue =
103
+ typeof currentValue === 'number'
104
+ ? currentValue
105
+ : Number.isFinite(Number(currentValue))
106
+ ? Number(currentValue)
107
+ : (getDefaultValue(setting) as number);
108
+ return clamp(numericValue, setting.min, setting.max);
109
+ }
110
+
111
+ if (setting.type === 'select') {
112
+ const normalizedOptions = (setting.options ?? []).map(normalizeOption);
113
+ const defaultValue = getDefaultValue(setting);
114
+ const candidateValue =
115
+ typeof currentValue === 'string' ||
116
+ typeof currentValue === 'number' ||
117
+ typeof currentValue === 'boolean'
118
+ ? currentValue
119
+ : defaultValue;
120
+
121
+ if (!normalizedOptions.length) {
122
+ return String(candidateValue);
123
+ }
124
+
125
+ const match = normalizedOptions.find((option) => option.value === candidateValue);
126
+ return match ? match.value : normalizedOptions[0].value;
127
+ }
128
+
129
+ if (typeof currentValue === 'string') {
130
+ return currentValue;
131
+ }
132
+
133
+ const defaultValue = getDefaultValue(setting);
134
+ return typeof defaultValue === 'string' ? defaultValue : String(defaultValue);
135
+ }
136
+
137
+ export function mergeCollapsedState(
138
+ previous: Record<string, boolean>,
139
+ sections: SettingsSectionDescriptor[]
140
+ ): Record<string, boolean> {
141
+ const nextState: Record<string, boolean> = {};
142
+
143
+ sections.forEach((section, index) => {
144
+ const key = getSectionKey(section, index);
145
+ nextState[key] = previous[key] ?? getInitialCollapsedState(section);
146
+ });
147
+
148
+ return nextState;
149
+ }
150
+
151
+ function isRecord(value: unknown): value is Record<string, unknown> {
152
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
153
+ }
154
+
155
+ function parsePath(path: string): string[] {
156
+ return path
157
+ .split('.')
158
+ .map((segment) => segment.trim())
159
+ .filter(Boolean);
160
+ }
161
+
162
+ function getValueAtPath(settings: SettingsState, path: string): unknown {
163
+ const segments = parsePath(path);
164
+ if (!segments.length) {
165
+ return undefined;
166
+ }
167
+
168
+ let current: unknown = settings;
169
+ for (const segment of segments) {
170
+ if (!isRecord(current)) {
171
+ return undefined;
172
+ }
173
+ current = current[segment];
174
+ }
175
+ return current;
176
+ }
177
+
178
+ function getInitialCollapsedState(section: SettingsSectionDescriptor): boolean {
179
+ return section.initiallyCollapsed ?? true;
180
+ }
181
+
182
+ function getDefaultValue(setting: SettingDescriptor): SettingValue {
183
+ if (setting.defaultValue !== undefined) {
184
+ return setting.defaultValue;
185
+ }
186
+
187
+ if (setting.type === 'boolean') {
188
+ return false;
189
+ }
190
+
191
+ if (setting.type === 'number') {
192
+ return Number.isFinite(setting.min) ? setting.min : 0;
193
+ }
194
+
195
+ if (setting.type === 'select') {
196
+ if (setting.options?.length) {
197
+ return normalizeOption(setting.options[0]).value;
198
+ }
199
+ return '';
200
+ }
201
+
202
+ return '';
203
+ }
@@ -0,0 +1,57 @@
1
+ /** @jsxImportSource preact */
2
+ import {Widget} from '@deck.gl/core';
3
+ import {render} from 'preact';
4
+
5
+ import type {WidgetPlacement, WidgetProps} from '@deck.gl/core';
6
+
7
+ export type ResetViewWidgetProps = WidgetProps & {
8
+ /** Widget positioning within the view. Default 'top-left'. */
9
+ placement?: WidgetPlacement;
10
+ /** Tooltip message */
11
+ label?: string;
12
+ /** Callback invoked when the widget button is clicked */
13
+ onResetView?: () => void;
14
+ };
15
+
16
+ /** @todo We can likely just add the onResetView callback to the official ResetViewWidget in deck.g; */
17
+ export class ResetViewWidget extends Widget<ResetViewWidgetProps> {
18
+ static defaultProps: Required<ResetViewWidgetProps> = {
19
+ ...Widget.defaultProps,
20
+ id: 'reset-view',
21
+ placement: 'top-left',
22
+ label: 'Resize to fit',
23
+ onResetView: undefined!
24
+ };
25
+
26
+ className = 'deck-widget-reset-view';
27
+ placement: WidgetPlacement = 'top-left';
28
+
29
+ constructor(props: ResetViewWidgetProps = {}) {
30
+ super(props);
31
+ this.setProps(this.props);
32
+ }
33
+
34
+ setProps(props: Partial<ResetViewWidgetProps>): void {
35
+ this.placement = props.placement ?? this.placement;
36
+ super.setProps(props);
37
+ }
38
+
39
+ onRenderHTML(rootElement: HTMLElement): void {
40
+ const label = this.props.label ?? 'Resize to fit';
41
+
42
+ render(
43
+ <div className="deck-widget-button">
44
+ <button
45
+ className="deck-widget-icon-button deck-widget-reset-focus"
46
+ type="button"
47
+ title={label}
48
+ aria-label={label}
49
+ onClick={() => this.props.onResetView?.()}
50
+ >
51
+ <div className="deck-widget-icon" />
52
+ </button>
53
+ </div>,
54
+ rootElement
55
+ );
56
+ }
57
+ }