@ixfx/components 0.2.3 → 0.2.4

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 (579) hide show
  1. package/LICENSE +1 -1
  2. package/bundle/chunk-pbuEa-1d.js +13 -0
  3. package/bundle/index.d.ts +4702 -569
  4. package/bundle/index.d.ts.map +1 -1
  5. package/bundle/index.js +34929 -2800
  6. package/bundle/index.js.map +1 -1
  7. package/bundle/style.css +133 -0
  8. package/dist/ac-text/ac-text.d.ts +99 -0
  9. package/dist/ac-text/ac-text.d.ts.map +1 -0
  10. package/dist/ac-text/ac-text.js +571 -0
  11. package/dist/ac-text/ac-text.js.map +1 -0
  12. package/dist/button/button-styles.d.ts +2 -0
  13. package/dist/button/button-styles.d.ts.map +1 -0
  14. package/dist/button/button-styles.js +75 -0
  15. package/dist/button/button-styles.js.map +1 -0
  16. package/dist/button/button.d.ts +16 -0
  17. package/dist/button/button.d.ts.map +1 -0
  18. package/dist/button/button.js +58 -0
  19. package/dist/button/button.js.map +1 -0
  20. package/dist/button/radio-group.d.ts +44 -0
  21. package/dist/button/radio-group.d.ts.map +1 -0
  22. package/dist/button/radio-group.js +385 -0
  23. package/dist/button/radio-group.js.map +1 -0
  24. package/dist/button/split-button.d.ts +59 -0
  25. package/dist/button/split-button.d.ts.map +1 -0
  26. package/dist/button/split-button.js +480 -0
  27. package/dist/button/split-button.js.map +1 -0
  28. package/dist/button/types.d.ts +18 -0
  29. package/dist/button/types.d.ts.map +1 -0
  30. package/dist/button/types.js +2 -0
  31. package/dist/button/types.js.map +1 -0
  32. package/dist/checkbox.d.ts +64 -0
  33. package/dist/checkbox.d.ts.map +1 -0
  34. package/dist/checkbox.js +265 -0
  35. package/dist/checkbox.js.map +1 -0
  36. package/dist/colour-picker/colour-picker-popup.d.ts +102 -0
  37. package/dist/colour-picker/colour-picker-popup.d.ts.map +1 -0
  38. package/dist/colour-picker/colour-picker-popup.js +399 -0
  39. package/dist/colour-picker/colour-picker-popup.js.map +1 -0
  40. package/dist/colour-picker/colour-picker.d.ts +100 -0
  41. package/dist/colour-picker/colour-picker.d.ts.map +1 -0
  42. package/dist/colour-picker/colour-picker.js +567 -0
  43. package/dist/colour-picker/colour-picker.js.map +1 -0
  44. package/dist/colour-picker/index.d.ts +4 -0
  45. package/dist/colour-picker/index.d.ts.map +1 -0
  46. package/dist/colour-picker/index.js +3 -0
  47. package/dist/colour-picker/index.js.map +1 -0
  48. package/dist/colour-picker/styles.d.ts +2 -0
  49. package/dist/colour-picker/styles.d.ts.map +1 -0
  50. package/dist/colour-picker/styles.js +139 -0
  51. package/dist/colour-picker/styles.js.map +1 -0
  52. package/dist/colour-picker/types.d.ts +33 -0
  53. package/dist/colour-picker/types.d.ts.map +1 -0
  54. package/dist/colour-picker/types.js +2 -0
  55. package/dist/colour-picker/types.js.map +1 -0
  56. package/dist/colour-picker/util.d.ts +15 -0
  57. package/dist/colour-picker/util.d.ts.map +1 -0
  58. package/dist/colour-picker/util.js +35 -0
  59. package/dist/colour-picker/util.js.map +1 -0
  60. package/dist/common/searchable.d.ts +9 -0
  61. package/dist/common/searchable.d.ts.map +1 -0
  62. package/dist/common/searchable.js +9 -0
  63. package/dist/common/searchable.js.map +1 -0
  64. package/dist/common/tree-component.d.ts +172 -0
  65. package/dist/common/tree-component.d.ts.map +1 -0
  66. package/dist/common/tree-component.js +8 -0
  67. package/dist/common/tree-component.js.map +1 -0
  68. package/dist/common/tree-data-model.d.ts +100 -0
  69. package/dist/common/tree-data-model.d.ts.map +1 -0
  70. package/dist/common/tree-data-model.js +207 -0
  71. package/dist/common/tree-data-model.js.map +1 -0
  72. package/dist/common/tree-item.d.ts +7 -0
  73. package/dist/common/tree-item.d.ts.map +1 -0
  74. package/dist/common/tree-item.js +2 -0
  75. package/dist/common/tree-item.js.map +1 -0
  76. package/dist/common/types.d.ts +69 -0
  77. package/dist/common/types.d.ts.map +1 -0
  78. package/dist/common/types.js +6 -0
  79. package/dist/common/types.js.map +1 -0
  80. package/dist/crumbs/crumb-navigation.d.ts +96 -0
  81. package/dist/crumbs/crumb-navigation.d.ts.map +1 -0
  82. package/dist/crumbs/crumb-navigation.js +911 -0
  83. package/dist/crumbs/crumb-navigation.js.map +1 -0
  84. package/dist/crumbs/crumb-path-controller.d.ts +18 -0
  85. package/dist/crumbs/crumb-path-controller.d.ts.map +1 -0
  86. package/dist/crumbs/crumb-path-controller.js +81 -0
  87. package/dist/crumbs/crumb-path-controller.js.map +1 -0
  88. package/dist/crumbs/crumb-path.d.ts +65 -0
  89. package/dist/crumbs/crumb-path.d.ts.map +1 -0
  90. package/dist/crumbs/crumb-path.js +691 -0
  91. package/dist/crumbs/crumb-path.js.map +1 -0
  92. package/dist/data-display.d.ts +10 -3
  93. package/dist/data-display.d.ts.map +1 -1
  94. package/dist/data-display.js +45 -28
  95. package/dist/data-display.js.map +1 -1
  96. package/dist/editable-label/editable-label.d.ts +98 -0
  97. package/dist/editable-label/editable-label.d.ts.map +1 -0
  98. package/dist/editable-label/editable-label.js +348 -0
  99. package/dist/editable-label/editable-label.js.map +1 -0
  100. package/dist/editable-label/editable-number.d.ts +96 -0
  101. package/dist/editable-label/editable-number.d.ts.map +1 -0
  102. package/dist/editable-label/editable-number.js +702 -0
  103. package/dist/editable-label/editable-number.js.map +1 -0
  104. package/dist/hex/colour.d.ts +6 -0
  105. package/dist/hex/colour.d.ts.map +1 -0
  106. package/dist/hex/colour.js +33 -0
  107. package/dist/hex/colour.js.map +1 -0
  108. package/dist/hex/data.d.ts +18 -0
  109. package/dist/hex/data.d.ts.map +1 -0
  110. package/dist/hex/data.js +61 -0
  111. package/dist/hex/data.js.map +1 -0
  112. package/dist/hex/diff.d.ts +14 -0
  113. package/dist/hex/diff.d.ts.map +1 -0
  114. package/dist/hex/diff.js +31 -0
  115. package/dist/hex/diff.js.map +1 -0
  116. package/dist/hex/hex-editor.d.ts +101 -0
  117. package/dist/hex/hex-editor.d.ts.map +1 -0
  118. package/dist/hex/hex-editor.js +894 -0
  119. package/dist/hex/hex-editor.js.map +1 -0
  120. package/dist/hex/selection.d.ts +11 -0
  121. package/dist/hex/selection.d.ts.map +1 -0
  122. package/dist/hex/selection.js +218 -0
  123. package/dist/hex/selection.js.map +1 -0
  124. package/dist/hex/types.d.ts +34 -0
  125. package/dist/hex/types.d.ts.map +1 -0
  126. package/dist/hex/types.js +4 -0
  127. package/dist/hex/types.js.map +1 -0
  128. package/dist/icons/defaults.d.ts +27 -0
  129. package/dist/icons/defaults.d.ts.map +1 -0
  130. package/dist/icons/defaults.js +34 -0
  131. package/dist/icons/defaults.js.map +1 -0
  132. package/dist/icons/icon.d.ts +31 -0
  133. package/dist/icons/icon.d.ts.map +1 -0
  134. package/dist/icons/icon.js +125 -0
  135. package/dist/icons/icon.js.map +1 -0
  136. package/dist/icons/index.d.ts +5 -0
  137. package/dist/icons/index.d.ts.map +1 -0
  138. package/dist/icons/index.js +6 -0
  139. package/dist/icons/index.js.map +1 -0
  140. package/dist/icons/registry.d.ts +11 -0
  141. package/dist/icons/registry.d.ts.map +1 -0
  142. package/dist/icons/registry.js +17 -0
  143. package/dist/icons/registry.js.map +1 -0
  144. package/dist/incr-search/ac-adapter.d.ts +18 -0
  145. package/dist/incr-search/ac-adapter.d.ts.map +1 -0
  146. package/dist/incr-search/ac-adapter.js +29 -0
  147. package/dist/incr-search/ac-adapter.js.map +1 -0
  148. package/dist/incr-search/controller-miller.d.ts +9 -0
  149. package/dist/incr-search/controller-miller.d.ts.map +1 -0
  150. package/dist/incr-search/controller-miller.js +8 -0
  151. package/dist/incr-search/controller-miller.js.map +1 -0
  152. package/dist/incr-search/controller-tree.d.ts +55 -0
  153. package/dist/incr-search/controller-tree.d.ts.map +1 -0
  154. package/dist/incr-search/controller-tree.js +106 -0
  155. package/dist/incr-search/controller-tree.js.map +1 -0
  156. package/dist/incr-search/element-search.d.ts +15 -0
  157. package/dist/incr-search/element-search.d.ts.map +1 -0
  158. package/dist/incr-search/element-search.js +82 -0
  159. package/dist/incr-search/element-search.js.map +1 -0
  160. package/dist/incr-search/fuzzy.d.ts +3 -0
  161. package/dist/incr-search/fuzzy.d.ts.map +1 -0
  162. package/dist/incr-search/fuzzy.js +37 -0
  163. package/dist/incr-search/fuzzy.js.map +1 -0
  164. package/dist/incr-search/highlight.d.ts +5 -0
  165. package/dist/incr-search/highlight.d.ts.map +1 -0
  166. package/dist/incr-search/highlight.js +54 -0
  167. package/dist/incr-search/highlight.js.map +1 -0
  168. package/dist/incr-search/incr-search.d.ts +3 -0
  169. package/dist/incr-search/incr-search.d.ts.map +1 -0
  170. package/dist/incr-search/incr-search.js +73 -0
  171. package/dist/incr-search/incr-search.js.map +1 -0
  172. package/dist/incr-search/index.d.ts +12 -0
  173. package/dist/incr-search/index.d.ts.map +1 -0
  174. package/dist/incr-search/index.js +8 -0
  175. package/dist/incr-search/index.js.map +1 -0
  176. package/dist/incr-search/types.d.ts +59 -0
  177. package/dist/incr-search/types.d.ts.map +1 -0
  178. package/dist/incr-search/types.js +2 -0
  179. package/dist/incr-search/types.js.map +1 -0
  180. package/dist/index.d.ts +49 -9
  181. package/dist/index.d.ts.map +1 -1
  182. package/dist/index.js +50 -10
  183. package/dist/index.js.map +1 -1
  184. package/dist/interaction/index.d.ts +10 -0
  185. package/dist/interaction/index.d.ts.map +1 -0
  186. package/dist/interaction/index.js +10 -0
  187. package/dist/interaction/index.js.map +1 -0
  188. package/dist/interaction/tickled-controller.d.ts +186 -0
  189. package/dist/interaction/tickled-controller.d.ts.map +1 -0
  190. package/dist/interaction/tickled-controller.js +256 -0
  191. package/dist/interaction/tickled-controller.js.map +1 -0
  192. package/dist/interaction/tickled-styles.d.ts +53 -0
  193. package/dist/interaction/tickled-styles.d.ts.map +1 -0
  194. package/dist/interaction/tickled-styles.js +106 -0
  195. package/dist/interaction/tickled-styles.js.map +1 -0
  196. package/dist/interaction/tree-keyboard-controller.d.ts +30 -0
  197. package/dist/interaction/tree-keyboard-controller.d.ts.map +1 -0
  198. package/dist/interaction/tree-keyboard-controller.js +105 -0
  199. package/dist/interaction/tree-keyboard-controller.js.map +1 -0
  200. package/dist/keyboard.d.ts +16 -0
  201. package/dist/keyboard.d.ts.map +1 -0
  202. package/dist/keyboard.js +22 -0
  203. package/dist/keyboard.js.map +1 -0
  204. package/dist/labelled-radial-input/index.d.ts +2 -0
  205. package/dist/labelled-radial-input/index.d.ts.map +1 -0
  206. package/dist/labelled-radial-input/index.js +2 -0
  207. package/dist/labelled-radial-input/index.js.map +1 -0
  208. package/dist/labelled-radial-input/labelled-radial-input.d.ts +77 -0
  209. package/dist/labelled-radial-input/labelled-radial-input.d.ts.map +1 -0
  210. package/dist/labelled-radial-input/labelled-radial-input.js +214 -0
  211. package/dist/labelled-radial-input/labelled-radial-input.js.map +1 -0
  212. package/dist/labelled-range-input/index.d.ts +2 -0
  213. package/dist/labelled-range-input/index.d.ts.map +1 -0
  214. package/dist/labelled-range-input/index.js +2 -0
  215. package/dist/labelled-range-input/index.js.map +1 -0
  216. package/dist/labelled-range-input/labelled-range-input.d.ts +80 -0
  217. package/dist/labelled-range-input/labelled-range-input.d.ts.map +1 -0
  218. package/dist/labelled-range-input/labelled-range-input.js +137 -0
  219. package/dist/labelled-range-input/labelled-range-input.js.map +1 -0
  220. package/dist/led.d.ts +20 -0
  221. package/dist/led.d.ts.map +1 -0
  222. package/dist/led.js +100 -0
  223. package/dist/led.js.map +1 -0
  224. package/dist/menu/index.d.ts +14 -0
  225. package/dist/menu/index.d.ts.map +1 -0
  226. package/dist/menu/index.js +13 -0
  227. package/dist/menu/index.js.map +1 -0
  228. package/dist/menu/menu-bar.d.ts +23 -0
  229. package/dist/menu/menu-bar.d.ts.map +1 -0
  230. package/dist/menu/menu-bar.js +110 -0
  231. package/dist/menu/menu-bar.js.map +1 -0
  232. package/dist/menu/menu-check-item.d.ts +33 -0
  233. package/dist/menu/menu-check-item.d.ts.map +1 -0
  234. package/dist/menu/menu-check-item.js +175 -0
  235. package/dist/menu/menu-check-item.js.map +1 -0
  236. package/dist/menu/menu-command-controller.d.ts +14 -0
  237. package/dist/menu/menu-command-controller.d.ts.map +1 -0
  238. package/dist/menu/menu-command-controller.js +22 -0
  239. package/dist/menu/menu-command-controller.js.map +1 -0
  240. package/dist/menu/menu-container.d.ts +36 -0
  241. package/dist/menu/menu-container.d.ts.map +1 -0
  242. package/dist/menu/menu-container.js +351 -0
  243. package/dist/menu/menu-container.js.map +1 -0
  244. package/dist/menu/menu-from-tree.d.ts +17 -0
  245. package/dist/menu/menu-from-tree.d.ts.map +1 -0
  246. package/dist/menu/menu-from-tree.js +103 -0
  247. package/dist/menu/menu-from-tree.js.map +1 -0
  248. package/dist/menu/menu-header.d.ts +12 -0
  249. package/dist/menu/menu-header.d.ts.map +1 -0
  250. package/dist/menu/menu-header.js +36 -0
  251. package/dist/menu/menu-header.js.map +1 -0
  252. package/dist/menu/menu-item.d.ts +41 -0
  253. package/dist/menu/menu-item.d.ts.map +1 -0
  254. package/dist/menu/menu-item.js +240 -0
  255. package/dist/menu/menu-item.js.map +1 -0
  256. package/dist/menu/menu-radio-group.d.ts +24 -0
  257. package/dist/menu/menu-radio-group.d.ts.map +1 -0
  258. package/dist/menu/menu-radio-group.js +71 -0
  259. package/dist/menu/menu-radio-group.js.map +1 -0
  260. package/dist/menu/menu-radio-item.d.ts +22 -0
  261. package/dist/menu/menu-radio-item.d.ts.map +1 -0
  262. package/dist/menu/menu-radio-item.js +116 -0
  263. package/dist/menu/menu-radio-item.js.map +1 -0
  264. package/dist/menu/menu-separator.d.ts +11 -0
  265. package/dist/menu/menu-separator.d.ts.map +1 -0
  266. package/dist/menu/menu-separator.js +29 -0
  267. package/dist/menu/menu-separator.js.map +1 -0
  268. package/dist/menu/menu-sub-trigger.d.ts +46 -0
  269. package/dist/menu/menu-sub-trigger.d.ts.map +1 -0
  270. package/dist/menu/menu-sub-trigger.js +302 -0
  271. package/dist/menu/menu-sub-trigger.js.map +1 -0
  272. package/dist/menu/menu-trigger.d.ts +57 -0
  273. package/dist/menu/menu-trigger.d.ts.map +1 -0
  274. package/dist/menu/menu-trigger.js +351 -0
  275. package/dist/menu/menu-trigger.js.map +1 -0
  276. package/dist/miller/index.d.ts +5 -0
  277. package/dist/miller/index.d.ts.map +1 -0
  278. package/dist/miller/index.js +5 -0
  279. package/dist/miller/index.js.map +1 -0
  280. package/dist/miller/miller-base.d.ts +184 -0
  281. package/dist/miller/miller-base.d.ts.map +1 -0
  282. package/dist/miller/miller-base.js +1249 -0
  283. package/dist/miller/miller-base.js.map +1 -0
  284. package/dist/miller/miller-list.d.ts +30 -0
  285. package/dist/miller/miller-list.d.ts.map +1 -0
  286. package/dist/miller/miller-list.js +192 -0
  287. package/dist/miller/miller-list.js.map +1 -0
  288. package/dist/miller/miller-tree-controller.d.ts +58 -0
  289. package/dist/miller/miller-tree-controller.d.ts.map +1 -0
  290. package/dist/miller/miller-tree-controller.js +134 -0
  291. package/dist/miller/miller-tree-controller.js.map +1 -0
  292. package/dist/miller/types.d.ts +63 -0
  293. package/dist/miller/types.d.ts.map +1 -0
  294. package/dist/miller/types.js +6 -0
  295. package/dist/miller/types.js.map +1 -0
  296. package/dist/mixins/labelled-input-base.d.ts +38 -0
  297. package/dist/mixins/labelled-input-base.d.ts.map +1 -0
  298. package/dist/mixins/labelled-input-base.js +171 -0
  299. package/dist/mixins/labelled-input-base.js.map +1 -0
  300. package/dist/mixins/labelled-input-util.d.ts +3 -0
  301. package/dist/mixins/labelled-input-util.d.ts.map +1 -0
  302. package/dist/mixins/labelled-input-util.js +10 -0
  303. package/dist/mixins/labelled-input-util.js.map +1 -0
  304. package/dist/my-element.d.ts.map +1 -1
  305. package/dist/my-element.js +1 -1
  306. package/dist/my-element.js.map +1 -1
  307. package/dist/narrowed-text/index.d.ts +3 -0
  308. package/dist/narrowed-text/index.d.ts.map +1 -0
  309. package/dist/narrowed-text/index.js +3 -0
  310. package/dist/narrowed-text/index.js.map +1 -0
  311. package/dist/narrowed-text/narrowed-text.d.ts +48 -0
  312. package/dist/narrowed-text/narrowed-text.d.ts.map +1 -0
  313. package/dist/narrowed-text/narrowed-text.js +668 -0
  314. package/dist/narrowed-text/narrowed-text.js.map +1 -0
  315. package/dist/narrowed-text/types.d.ts +20 -0
  316. package/dist/narrowed-text/types.d.ts.map +1 -0
  317. package/dist/narrowed-text/types.js +2 -0
  318. package/dist/narrowed-text/types.js.map +1 -0
  319. package/dist/panel/panel-group.d.ts +23 -0
  320. package/dist/panel/panel-group.d.ts.map +1 -0
  321. package/dist/panel/panel-group.js +109 -0
  322. package/dist/panel/panel-group.js.map +1 -0
  323. package/dist/panel/panel.d.ts +39 -0
  324. package/dist/panel/panel.d.ts.map +1 -0
  325. package/dist/panel/panel.js +417 -0
  326. package/dist/panel/panel.js.map +1 -0
  327. package/dist/plots/colour-map.d.ts +31 -0
  328. package/dist/plots/colour-map.d.ts.map +1 -0
  329. package/dist/plots/colour-map.js +133 -0
  330. package/dist/plots/colour-map.js.map +1 -0
  331. package/dist/plots/data.d.ts +27 -0
  332. package/dist/plots/data.d.ts.map +1 -0
  333. package/dist/plots/data.js +47 -0
  334. package/dist/plots/data.js.map +1 -0
  335. package/dist/plots/single-axis.d.ts +41 -0
  336. package/dist/plots/single-axis.d.ts.map +1 -0
  337. package/dist/plots/single-axis.js +428 -0
  338. package/dist/plots/single-axis.js.map +1 -0
  339. package/dist/plots/svg-utils.d.ts +12 -0
  340. package/dist/plots/svg-utils.d.ts.map +1 -0
  341. package/dist/plots/svg-utils.js +64 -0
  342. package/dist/plots/svg-utils.js.map +1 -0
  343. package/dist/plots/xy-axis.d.ts +42 -0
  344. package/dist/plots/xy-axis.d.ts.map +1 -0
  345. package/dist/plots/xy-axis.js +307 -0
  346. package/dist/plots/xy-axis.js.map +1 -0
  347. package/dist/polar-pad/polar-pad.d.ts +132 -0
  348. package/dist/polar-pad/polar-pad.d.ts.map +1 -0
  349. package/dist/polar-pad/polar-pad.js +598 -0
  350. package/dist/polar-pad/polar-pad.js.map +1 -0
  351. package/dist/radial-input/radial-input.d.ts +45 -0
  352. package/dist/radial-input/radial-input.d.ts.map +1 -0
  353. package/dist/radial-input/radial-input.js +692 -0
  354. package/dist/radial-input/radial-input.js.map +1 -0
  355. package/dist/radial-input/svg-utils.d.ts +147 -0
  356. package/dist/radial-input/svg-utils.d.ts.map +1 -0
  357. package/dist/radial-input/svg-utils.js +346 -0
  358. package/dist/radial-input/svg-utils.js.map +1 -0
  359. package/dist/radial-input/types.d.ts +25 -0
  360. package/dist/radial-input/types.d.ts.map +1 -0
  361. package/dist/radial-input/types.js +5 -0
  362. package/dist/radial-input/types.js.map +1 -0
  363. package/dist/range/range-multi.d.ts +62 -0
  364. package/dist/range/range-multi.d.ts.map +1 -0
  365. package/dist/range/range-multi.js +652 -0
  366. package/dist/range/range-multi.js.map +1 -0
  367. package/dist/range/range.d.ts +23 -0
  368. package/dist/range/range.d.ts.map +1 -0
  369. package/dist/range/range.js +153 -0
  370. package/dist/range/range.js.map +1 -0
  371. package/dist/range-input/index.d.ts +2 -0
  372. package/dist/range-input/index.d.ts.map +1 -0
  373. package/dist/range-input/index.js +2 -0
  374. package/dist/range-input/index.js.map +1 -0
  375. package/dist/range-input/range-input.d.ts +92 -0
  376. package/dist/range-input/range-input.d.ts.map +1 -0
  377. package/dist/range-input/range-input.js +472 -0
  378. package/dist/range-input/range-input.js.map +1 -0
  379. package/dist/selecthorizontal.d.ts +1 -1
  380. package/dist/selecthorizontal.d.ts.map +1 -1
  381. package/dist/selecthorizontal.js +3 -3
  382. package/dist/selecthorizontal.js.map +1 -1
  383. package/dist/snap-container/snap-container.d.ts +45 -0
  384. package/dist/snap-container/snap-container.d.ts.map +1 -0
  385. package/dist/snap-container/snap-container.js +352 -0
  386. package/dist/snap-container/snap-container.js.map +1 -0
  387. package/dist/split-layout/split-layout.d.ts +25 -9
  388. package/dist/split-layout/split-layout.d.ts.map +1 -1
  389. package/dist/split-layout/split-layout.js +520 -66
  390. package/dist/split-layout/split-layout.js.map +1 -1
  391. package/dist/styles/popup.d.ts +11 -0
  392. package/dist/styles/popup.d.ts.map +1 -0
  393. package/dist/styles/popup.js +20 -0
  394. package/dist/styles/popup.js.map +1 -0
  395. package/dist/styles/prominence.d.ts +58 -0
  396. package/dist/styles/prominence.d.ts.map +1 -0
  397. package/dist/styles/prominence.js +94 -0
  398. package/dist/styles/prominence.js.map +1 -0
  399. package/dist/styles/tooltip.d.ts +2 -0
  400. package/dist/styles/tooltip.d.ts.map +1 -0
  401. package/dist/styles/tooltip.js +100 -0
  402. package/dist/styles/tooltip.js.map +1 -0
  403. package/dist/svg-edit-label.js +1 -1
  404. package/dist/svg-edit-label.js.map +1 -1
  405. package/dist/swipe/index.d.ts +2 -0
  406. package/dist/swipe/index.d.ts.map +1 -0
  407. package/dist/swipe/index.js +2 -0
  408. package/dist/swipe/index.js.map +1 -0
  409. package/dist/swipe/swipe.d.ts +65 -0
  410. package/dist/swipe/swipe.d.ts.map +1 -0
  411. package/dist/swipe/swipe.js +229 -0
  412. package/dist/swipe/swipe.js.map +1 -0
  413. package/dist/tabs/tab-layout-item.d.ts.map +1 -1
  414. package/dist/tabs/tab-layout-item.js +1 -1
  415. package/dist/tabs/tab-layout-item.js.map +1 -1
  416. package/dist/tabs/tab-layout.d.ts.map +1 -1
  417. package/dist/tabs/tab-layout.js +1 -1
  418. package/dist/tabs/tab-layout.js.map +1 -1
  419. package/dist/tabs/tab-list-item.d.ts +22 -6
  420. package/dist/tabs/tab-list-item.d.ts.map +1 -1
  421. package/dist/tabs/tab-list-item.js +174 -42
  422. package/dist/tabs/tab-list-item.js.map +1 -1
  423. package/dist/tabs/tab-list.d.ts +15 -5
  424. package/dist/tabs/tab-list.d.ts.map +1 -1
  425. package/dist/tabs/tab-list.js +159 -50
  426. package/dist/tabs/tab-list.js.map +1 -1
  427. package/dist/tabs/tab-panel.d.ts +1 -1
  428. package/dist/tabs/tab-panel.d.ts.map +1 -1
  429. package/dist/tabs/tab-panel.js +2 -2
  430. package/dist/tabs/tab-panel.js.map +1 -1
  431. package/dist/tabs/tab-panels.d.ts +3 -3
  432. package/dist/tabs/tab-panels.d.ts.map +1 -1
  433. package/dist/tabs/tab-panels.js +6 -6
  434. package/dist/tabs/tab-panels.js.map +1 -1
  435. package/dist/timeline/index.d.ts +9 -0
  436. package/dist/timeline/index.d.ts.map +1 -0
  437. package/dist/timeline/index.js +8 -0
  438. package/dist/timeline/index.js.map +1 -0
  439. package/dist/timeline/timeline-controller.d.ts +48 -0
  440. package/dist/timeline/timeline-controller.d.ts.map +1 -0
  441. package/dist/timeline/timeline-controller.js +81 -0
  442. package/dist/timeline/timeline-controller.js.map +1 -0
  443. package/dist/timeline/timeline-draw.d.ts +28 -0
  444. package/dist/timeline/timeline-draw.d.ts.map +1 -0
  445. package/dist/timeline/timeline-draw.js +330 -0
  446. package/dist/timeline/timeline-draw.js.map +1 -0
  447. package/dist/timeline/timeline-element.d.ts +140 -0
  448. package/dist/timeline/timeline-element.d.ts.map +1 -0
  449. package/dist/timeline/timeline-element.js +888 -0
  450. package/dist/timeline/timeline-element.js.map +1 -0
  451. package/dist/timeline/timeline-interactions.d.ts +40 -0
  452. package/dist/timeline/timeline-interactions.d.ts.map +1 -0
  453. package/dist/timeline/timeline-interactions.js +393 -0
  454. package/dist/timeline/timeline-interactions.js.map +1 -0
  455. package/dist/timeline/timeline-styles.d.ts +2 -0
  456. package/dist/timeline/timeline-styles.d.ts.map +1 -0
  457. package/dist/timeline/timeline-styles.js +153 -0
  458. package/dist/timeline/timeline-styles.js.map +1 -0
  459. package/dist/timeline/timeline-track-tabs.d.ts +30 -0
  460. package/dist/timeline/timeline-track-tabs.d.ts.map +1 -0
  461. package/dist/timeline/timeline-track-tabs.js +204 -0
  462. package/dist/timeline/timeline-track-tabs.js.map +1 -0
  463. package/dist/timeline/types.d.ts +144 -0
  464. package/dist/timeline/types.d.ts.map +1 -0
  465. package/dist/timeline/types.js +3 -0
  466. package/dist/timeline/types.js.map +1 -0
  467. package/dist/tree/index.d.ts +5 -0
  468. package/dist/tree/index.d.ts.map +1 -0
  469. package/dist/tree/index.js +5 -0
  470. package/dist/tree/index.js.map +1 -0
  471. package/dist/tree/tree-base.d.ts +70 -0
  472. package/dist/tree/tree-base.d.ts.map +1 -0
  473. package/dist/tree/tree-base.js +1028 -0
  474. package/dist/tree/tree-base.js.map +1 -0
  475. package/dist/tree/tree-controller.d.ts +14 -0
  476. package/dist/tree/tree-controller.d.ts.map +1 -0
  477. package/dist/tree/tree-controller.js +96 -0
  478. package/dist/tree/tree-controller.js.map +1 -0
  479. package/dist/tree/tree-list.d.ts +20 -0
  480. package/dist/tree/tree-list.d.ts.map +1 -0
  481. package/dist/tree/tree-list.js +174 -0
  482. package/dist/tree/tree-list.js.map +1 -0
  483. package/dist/tree/types.d.ts +14 -0
  484. package/dist/tree/types.d.ts.map +1 -0
  485. package/dist/tree/types.js +7 -0
  486. package/dist/tree/types.js.map +1 -0
  487. package/dist/util/checkbox.d.ts +2 -0
  488. package/dist/util/checkbox.d.ts.map +1 -0
  489. package/dist/util/checkbox.js +69 -0
  490. package/dist/util/checkbox.js.map +1 -0
  491. package/dist/util/circle-arc.d.ts +6 -6
  492. package/dist/util/circle-arc.d.ts.map +1 -1
  493. package/dist/util/circle-arc.js +28 -20
  494. package/dist/util/circle-arc.js.map +1 -1
  495. package/dist/util/clamp.d.ts +4 -0
  496. package/dist/util/clamp.d.ts.map +1 -0
  497. package/dist/util/clamp.js +23 -0
  498. package/dist/util/clamp.js.map +1 -0
  499. package/dist/util/compare.d.ts +8 -8
  500. package/dist/util/compare.d.ts.map +1 -1
  501. package/dist/util/compare.js +13 -13
  502. package/dist/util/compare.js.map +1 -1
  503. package/dist/util/content-editable.d.ts +1 -1
  504. package/dist/util/content-editable.d.ts.map +1 -1
  505. package/dist/util/content-editable.js +2 -2
  506. package/dist/util/content-editable.js.map +1 -1
  507. package/dist/util/coordinates.d.ts +3 -0
  508. package/dist/util/coordinates.d.ts.map +1 -0
  509. package/dist/util/coordinates.js +11 -0
  510. package/dist/util/coordinates.js.map +1 -0
  511. package/dist/util/drag.d.ts +16 -0
  512. package/dist/util/drag.d.ts.map +1 -0
  513. package/dist/util/drag.js +20 -0
  514. package/dist/util/drag.js.map +1 -0
  515. package/dist/util/is-numeric.d.ts +2 -0
  516. package/dist/util/is-numeric.d.ts.map +1 -0
  517. package/dist/util/is-numeric.js +9 -0
  518. package/dist/util/is-numeric.js.map +1 -0
  519. package/dist/util/key-value.d.ts +2 -2
  520. package/dist/util/key-value.d.ts.map +1 -1
  521. package/dist/util/key-value.js +4 -5
  522. package/dist/util/key-value.js.map +1 -1
  523. package/dist/util/near.d.ts +2 -0
  524. package/dist/util/near.d.ts.map +1 -0
  525. package/dist/util/near.js +6 -0
  526. package/dist/util/near.js.map +1 -0
  527. package/dist/util/svg-editable-text.d.ts +6 -2
  528. package/dist/util/svg-editable-text.d.ts.map +1 -1
  529. package/dist/util/svg-editable-text.js +5 -7
  530. package/dist/util/svg-editable-text.js.map +1 -1
  531. package/dist/util/time.d.ts.map +1 -1
  532. package/dist/util/time.js +1 -1
  533. package/dist/util/time.js.map +1 -1
  534. package/dist/util/tooltip-controller.d.ts +10 -0
  535. package/dist/util/tooltip-controller.d.ts.map +1 -0
  536. package/dist/util/tooltip-controller.js +237 -0
  537. package/dist/util/tooltip-controller.js.map +1 -0
  538. package/dist/util/tooltip.d.ts +21 -0
  539. package/dist/util/tooltip.d.ts.map +1 -0
  540. package/dist/util/tooltip.js +98 -0
  541. package/dist/util/tooltip.js.map +1 -0
  542. package/dist/util/value-drag.d.ts +33 -0
  543. package/dist/util/value-drag.d.ts.map +1 -0
  544. package/dist/util/value-drag.js +154 -0
  545. package/dist/util/value-drag.js.map +1 -0
  546. package/dist/xy-pad.d.ts +117 -0
  547. package/dist/xy-pad.d.ts.map +1 -0
  548. package/dist/xy-pad.js +455 -0
  549. package/dist/xy-pad.js.map +1 -0
  550. package/package.json +47 -30
  551. package/README.md +0 -14
  552. package/dist/charts/frequency-histogram-plot.d.ts +0 -33
  553. package/dist/charts/frequency-histogram-plot.d.ts.map +0 -1
  554. package/dist/charts/frequency-histogram-plot.js +0 -54
  555. package/dist/charts/frequency-histogram-plot.js.map +0 -1
  556. package/dist/charts/histogram-vis.d.ts +0 -57
  557. package/dist/charts/histogram-vis.d.ts.map +0 -1
  558. package/dist/charts/histogram-vis.js +0 -222
  559. package/dist/charts/histogram-vis.js.map +0 -1
  560. package/dist/charts/plot.d.ts +0 -199
  561. package/dist/charts/plot.d.ts.map +0 -1
  562. package/dist/charts/plot.js +0 -914
  563. package/dist/charts/plot.js.map +0 -1
  564. package/dist/crumb-nav.d.ts +0 -41
  565. package/dist/crumb-nav.d.ts.map +0 -1
  566. package/dist/crumb-nav.js +0 -198
  567. package/dist/crumb-nav.js.map +0 -1
  568. package/dist/crumb-navigation.d.ts +0 -30
  569. package/dist/crumb-navigation.d.ts.map +0 -1
  570. package/dist/crumb-navigation.js +0 -307
  571. package/dist/crumb-navigation.js.map +0 -1
  572. package/dist/dial.d.ts +0 -89
  573. package/dist/dial.d.ts.map +0 -1
  574. package/dist/dial.js +0 -506
  575. package/dist/dial.js.map +0 -1
  576. package/dist/util/drag-controller.d.ts +0 -13
  577. package/dist/util/drag-controller.d.ts.map +0 -1
  578. package/dist/util/drag-controller.js +0 -21
  579. package/dist/util/drag-controller.js.map +0 -1
@@ -0,0 +1,894 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { css, html, LitElement } from 'lit';
8
+ import { customElement, property, state } from 'lit/decorators.js';
9
+ import { repeat } from 'lit/directives/repeat.js';
10
+ import { styleMap } from 'lit/directives/style-map.js';
11
+ import { createShadeMap, getAsciiClass } from './colour.js';
12
+ import { applyDiff, clearChangeset, createHexStore, getChangeset, readByte, reverseDiff, length as storeLength, writeByte, writeBytes } from './data.js';
13
+ import { createUndoRedoStack, push as pushDiff, redo as redoDiff, undo as undoDiff } from './diff.js';
14
+ import { bytesPerRow, clampPos, extendContiguous, extendRectangular, getCursorPos, getSelectedPositions, moveSelection, selectionContains, selectionFromPointerRange } from './selection.js';
15
+ import { isContiguousSelection, isRectangularSelection } from './types.js';
16
+ let IxfxHexEditorElement = class IxfxHexEditorElement extends LitElement {
17
+ constructor() {
18
+ super(...arguments);
19
+ this.columns = 4;
20
+ this.colourScheme = `ascii`;
21
+ this.showChangeset = true;
22
+ this.hideOffsetCol = false;
23
+ this.hideHexCol = false;
24
+ this.hideTextCol = false;
25
+ this._selection = null;
26
+ this._scrollTop = 0;
27
+ this._editState = null;
28
+ this._containerH = 0;
29
+ this._shadeMap = null;
30
+ this._focusSide = null;
31
+ this._store = createHexStore(new Uint8Array(0));
32
+ this._undoStack = createUndoRedoStack();
33
+ this._copyBuffer = null;
34
+ this._rowHeight = 24;
35
+ this._dragStart = null;
36
+ this._dragAnchor = null;
37
+ this._rectAnchorX = 0;
38
+ this._rectAnchorY = 0;
39
+ this._rectAnchorXFromKeyboard = 0;
40
+ this._rectAnchorYFromKeyboard = 0;
41
+ this._initialSelectionPoint = 0;
42
+ this._currentCursorPoint = 0;
43
+ this._pointerMode = null;
44
+ this._currentDragDiff = null;
45
+ this._shiftClickTarget = null;
46
+ this._onScroll = (e) => {
47
+ const target = e.target;
48
+ this._scrollTop = target.scrollTop;
49
+ this.requestUpdate();
50
+ };
51
+ this._onKeyDown = (e) => {
52
+ const isNavigationKey = [`ArrowLeft`, `ArrowRight`, `ArrowUp`, `ArrowDown`].includes(e.key);
53
+ if (isNavigationKey) {
54
+ e.preventDefault();
55
+ e.stopPropagation();
56
+ if (this._editState) {
57
+ this._editState = null;
58
+ }
59
+ const dir = e.key.replace(`Arrow`, ``).toLowerCase();
60
+ const dataLen = storeLength(this._store);
61
+ const bpr = bytesPerRow(this.columns);
62
+ if (e.metaKey || e.ctrlKey) {
63
+ if (!this._selection || this._selection.kind !== `rectangular`) {
64
+ let startPos = 0;
65
+ if (this._selection?.kind === `single`) {
66
+ startPos = this._selection.pos;
67
+ }
68
+ else if (this._selection?.kind === `contiguous`) {
69
+ startPos = Math.min(this._selection.start, this._selection.end);
70
+ }
71
+ this._rectAnchorXFromKeyboard = startPos % bpr;
72
+ this._rectAnchorYFromKeyboard = Math.floor(startPos / bpr);
73
+ this._selection = { kind: `rectangular`, x: this._rectAnchorXFromKeyboard, y: this._rectAnchorYFromKeyboard, width: 1, height: 1 };
74
+ }
75
+ this._selection = extendRectangular(this._selection, dir, this.columns, dataLen, this._rectAnchorXFromKeyboard, this._rectAnchorYFromKeyboard);
76
+ }
77
+ else if (e.shiftKey) {
78
+ if (!this._selection) {
79
+ this._initialSelectionPoint = 0;
80
+ this._currentCursorPoint = 0;
81
+ }
82
+ else if (this._selection.kind === `single`) {
83
+ this._initialSelectionPoint = this._selection.pos;
84
+ this._currentCursorPoint = this._selection.pos;
85
+ }
86
+ else if (this._selection.kind === `rectangular`) {
87
+ const cursorPos = this._selection.y * bpr + this._selection.x;
88
+ this._initialSelectionPoint = cursorPos;
89
+ this._currentCursorPoint = cursorPos;
90
+ }
91
+ const newPos = getCursorPos(this._selection, dir, this.columns, dataLen);
92
+ const start = Math.min(this._initialSelectionPoint, newPos);
93
+ const end = Math.max(this._initialSelectionPoint, newPos);
94
+ this._currentCursorPoint = newPos;
95
+ this._selection = { kind: `contiguous`, start, end };
96
+ }
97
+ else {
98
+ this._selection = moveSelection(this._selection, dir, this.columns, dataLen);
99
+ const pos = getCursorPos(this._selection, dir, this.columns, dataLen);
100
+ this._initialSelectionPoint = pos;
101
+ this._currentCursorPoint = pos;
102
+ }
103
+ this._dispatchSelectEvent();
104
+ this.requestUpdate();
105
+ return;
106
+ }
107
+ if (e.key === `Tab`) {
108
+ e.preventDefault();
109
+ e.stopPropagation();
110
+ if (this._editState) {
111
+ this._advanceCursor();
112
+ }
113
+ else {
114
+ const dataLen = storeLength(this._store);
115
+ this._selection = moveSelection(this._selection, `right`, this.columns, dataLen);
116
+ this._dispatchSelectEvent();
117
+ }
118
+ this.requestUpdate();
119
+ return;
120
+ }
121
+ if (e.key === `Escape`) {
122
+ e.preventDefault();
123
+ e.stopPropagation();
124
+ if (this._editState) {
125
+ this._editState = null;
126
+ }
127
+ else if (this._selection && this._selection.kind !== `single`) {
128
+ const sel = this._selection;
129
+ let firstPos = 0;
130
+ if (sel.kind === `contiguous`) {
131
+ const c = sel;
132
+ firstPos = Math.min(c.start, c.end);
133
+ }
134
+ if (sel.kind === `rectangular`) {
135
+ const r = sel;
136
+ firstPos = r.y * bytesPerRow(this.columns) + r.x;
137
+ }
138
+ this._selection = { kind: `single`, pos: firstPos };
139
+ this._dispatchSelectEvent();
140
+ }
141
+ this.requestUpdate();
142
+ return;
143
+ }
144
+ if (this._editState) {
145
+ e.stopPropagation();
146
+ if (e.key === `Backspace`) {
147
+ this._handleBackspace();
148
+ return;
149
+ }
150
+ if (e.key === `Enter`) {
151
+ if (this._editState.side === `hex` && this._editState.partial.startsWith(`.`)) {
152
+ this._commitDecimalValue();
153
+ }
154
+ return;
155
+ }
156
+ if (e.key.length === 1) {
157
+ this._handleValueEntry(e.key);
158
+ }
159
+ return;
160
+ }
161
+ if (this._selection && this._selection.kind === `single` && e.key.length === 1) {
162
+ e.preventDefault();
163
+ e.stopPropagation();
164
+ const pos = this._selection.pos;
165
+ const side = this._focusSide ?? `hex`;
166
+ this._editState = { pos, side, partial: `` };
167
+ this._handleValueEntry(e.key);
168
+ }
169
+ };
170
+ }
171
+ static { this.styles = css `
172
+ :host {
173
+ --hex-row-height: 24px;
174
+ --hex-offset-width: 8ch;
175
+ --hex-font: monospace;
176
+ --hex-font-size: 0.85rem;
177
+ --hex-changed-weight: bold;
178
+
179
+ --ascii-null: #808080;
180
+ --ascii-printable: #4caf50;
181
+ --ascii-whitespace: #ffffff;
182
+ --ascii-control: #f48fb1;
183
+ --ascii-other: #ffeb3b;
184
+
185
+ --shade-null: #808080;
186
+ --shade-max: #ffffff;
187
+ --shade-step-start: #ff0000;
188
+ --shade-step-end: #0000ff;
189
+
190
+ display: block;
191
+ font-family: var(--hex-font);
192
+ font-size: var(--hex-font-size);
193
+ }
194
+
195
+ .hex-editor {
196
+ display: flex;
197
+ flex-direction: column;
198
+ height: 300px;
199
+ overflow: hidden;
200
+ background: #1e1e1e;
201
+ color: #e0e0e0;
202
+ border: 1px solid #333;
203
+ border-radius: 4px;
204
+ }
205
+
206
+ .scroll-container {
207
+ flex: 1;
208
+ overflow-y: auto;
209
+ position: relative;
210
+ }
211
+
212
+ .header {
213
+ display: flex;
214
+ background: #2d2d2d;
215
+ font-weight: bold;
216
+ border-bottom: 1px solid #444;
217
+ height: var(--hex-row-height);
218
+ flex-shrink: 0;
219
+ align-items: center;
220
+ }
221
+
222
+ .row {
223
+ display: flex;
224
+ height: var(--hex-row-height);
225
+ align-items: center;
226
+ }
227
+
228
+ .row:hover {
229
+ background: rgba(255, 255, 255, 0.05);
230
+ }
231
+
232
+ .offset-cell {
233
+ width: var(--hex-offset-width);
234
+ padding: 0 8px;
235
+ text-align: right;
236
+ color: #888;
237
+ flex-shrink: 0;
238
+ box-sizing: border-box;
239
+ }
240
+
241
+ .col-group {
242
+ display: inline-flex;
243
+ gap: 4px;
244
+ margin-right: 16px;
245
+ }
246
+
247
+ .col-header {
248
+ width: calc(8ch + 28px);
249
+ padding: 0 8px;
250
+ color: #555;
251
+ text-align: right;
252
+ flex-shrink: 0;
253
+ box-sizing: border-box;
254
+ }
255
+
256
+ .col-header.active {
257
+ color: #aaa;
258
+ }
259
+
260
+ .text-header {
261
+ padding: 4px 8px;
262
+ color: #555;
263
+ width: calc(var(--columns, 4) * 4 * 1ch);
264
+ box-sizing: border-box;
265
+ flex-shrink: 0;
266
+ }
267
+
268
+ .text-header.active {
269
+ color: #aaa;
270
+ }
271
+
272
+ .hex-cell, .text-char {
273
+ display: inline-block;
274
+ width: 2ch;
275
+ text-align: center;
276
+ cursor: pointer;
277
+ user-select: none;
278
+ padding: 2px 0;
279
+ }
280
+
281
+ .hex-cell.selected, .text-char.selected {
282
+ background: rgba(100, 149, 237, 0.4);
283
+ }
284
+
285
+ .hex-cell.changed, .text-char.changed {
286
+ font-weight: var(--hex-changed-weight);
287
+ }
288
+
289
+ .hex-cell.editing {
290
+ background: rgba(255, 215, 0, 0.3);
291
+ }
292
+
293
+
294
+ .text-area {
295
+ display: inline-flex;
296
+ gap: 0;
297
+ }
298
+
299
+ .text-char {
300
+ width: 1ch;
301
+ text-align: left;
302
+ }
303
+
304
+ .byte-null { color: var(--ascii-null); }
305
+ .byte-printable { color: var(--ascii-printable); }
306
+ .byte-whitespace { color: var(--ascii-whitespace); }
307
+ .byte-control { color: var(--ascii-control); }
308
+ .byte-other { color: var(--ascii-other); }
309
+ `; }
310
+ setData(data) {
311
+ this._store = createHexStore(data);
312
+ this._undoStack = createUndoRedoStack();
313
+ this._selection = null;
314
+ this._editState = null;
315
+ this._scrollTop = 0;
316
+ this.requestUpdate();
317
+ }
318
+ undo() {
319
+ const diff = undoDiff(this._undoStack);
320
+ if (!diff)
321
+ return;
322
+ const reverse = reverseDiff(diff);
323
+ applyDiff(this._store, reverse);
324
+ this.requestUpdate();
325
+ }
326
+ redo() {
327
+ const diff = redoDiff(this._undoStack);
328
+ if (!diff)
329
+ return;
330
+ applyDiff(this._store, diff);
331
+ this.requestUpdate();
332
+ }
333
+ recomputeColours() {
334
+ const style = getComputedStyle(this);
335
+ const nullC = style.getPropertyValue(`--shade-null`).trim() || `#808080`;
336
+ const maxC = style.getPropertyValue(`--shade-max`).trim() || `#ffffff`;
337
+ const stepStart = style.getPropertyValue(`--shade-step-start`).trim() || `#ff0000`;
338
+ const stepEnd = style.getPropertyValue(`--shade-step-end`).trim() || `#0000ff`;
339
+ this._shadeMap = createShadeMap(nullC, maxC, stepStart, stepEnd);
340
+ this.requestUpdate();
341
+ }
342
+ *selectedBytes() {
343
+ const positions = getSelectedPositions(this._selection, this.columns);
344
+ for (let i = 0; i < positions.length; i++) {
345
+ const pos = positions[i];
346
+ yield {
347
+ selection_index: i,
348
+ array_index: pos,
349
+ value: readByte(this._store, pos),
350
+ };
351
+ }
352
+ }
353
+ containsPosition(pos) {
354
+ return selectionContains(this._selection, pos, this.columns);
355
+ }
356
+ selectSingle(position) {
357
+ this._selection = { kind: `single`, pos: position };
358
+ this._dispatchSelectEvent();
359
+ this.requestUpdate();
360
+ }
361
+ selectContiguous(start, end) {
362
+ this._selection = {
363
+ kind: `contiguous`,
364
+ start: start,
365
+ end: end,
366
+ };
367
+ this._dispatchSelectEvent();
368
+ this.requestUpdate();
369
+ }
370
+ selectRectangular(x, y, width, height) {
371
+ this._selection = {
372
+ kind: `rectangular`,
373
+ x,
374
+ y,
375
+ width,
376
+ height,
377
+ };
378
+ this._dispatchSelectEvent();
379
+ this.requestUpdate();
380
+ }
381
+ clearSelection() {
382
+ this._selection = null;
383
+ this._dispatchSelectEvent();
384
+ this.requestUpdate();
385
+ }
386
+ getSelection() {
387
+ return this._selection;
388
+ }
389
+ firstUpdated() {
390
+ const container = this.shadowRoot?.querySelector(`.scroll-container`);
391
+ if (container) {
392
+ const ro = new ResizeObserver((entries) => {
393
+ this._containerH = entries[0].contentRect.height;
394
+ this.requestUpdate();
395
+ });
396
+ ro.observe(container);
397
+ this._containerH = container.clientHeight;
398
+ }
399
+ this.recomputeColours();
400
+ }
401
+ _onPointerDown(pos, side, e) {
402
+ e.preventDefault();
403
+ if (e.button !== 0)
404
+ return;
405
+ this.shadowRoot?.querySelector(`.hex-editor`)?.focus();
406
+ this._focusSide = side;
407
+ const target = e.target;
408
+ target.setPointerCapture(e.pointerId);
409
+ const bpr = bytesPerRow(this.columns);
410
+ const startX = pos % bpr;
411
+ const startY = Math.floor(pos / bpr);
412
+ if (e.metaKey || e.ctrlKey) {
413
+ this._pointerMode = `select-rect`;
414
+ this._dragAnchor = pos;
415
+ this._rectAnchorX = startX;
416
+ this._rectAnchorY = startY;
417
+ }
418
+ else if (e.shiftKey) {
419
+ this._pointerMode = `select-cont`;
420
+ if (!this._selection || this._selection.kind !== `single`) {
421
+ this._dragAnchor = pos;
422
+ }
423
+ else {
424
+ this._dragAnchor = this._selection.pos;
425
+ this._shiftClickTarget = pos;
426
+ }
427
+ }
428
+ else {
429
+ this._pointerMode = `pending`;
430
+ this._dragStart = { pos, startValue: readByte(this._store, pos), startY: e.clientY, startX: e.clientX };
431
+ this._dragAnchor = pos;
432
+ this._currentDragDiff = null;
433
+ }
434
+ }
435
+ _onPointerMove(pos, _side, e) {
436
+ if (!this._dragStart)
437
+ return;
438
+ const dy = Math.abs(e.clientY - this._dragStart.startY);
439
+ const dx = Math.abs(e.clientX - this._dragStart.startX);
440
+ if (this._pointerMode === `pending` && dy > 4 && dy > dx) {
441
+ this._pointerMode = `drag-value`;
442
+ this._editState = null;
443
+ }
444
+ if (this._pointerMode === `drag-value`) {
445
+ const delta = Math.round((e.clientY - this._dragStart.startY) / 4);
446
+ const newValue = Math.max(0, Math.min(255, this._dragStart.startValue - delta));
447
+ this._currentDragDiff = writeByte(this._store, pos, newValue);
448
+ this.requestUpdate();
449
+ }
450
+ if (this._pointerMode === `select-cont`) {
451
+ if (this._dragAnchor !== null) {
452
+ const mode = `contiguous`;
453
+ this._selection = selectionFromPointerRange(this._dragAnchor, pos, mode, this.columns);
454
+ this._dispatchSelectEvent();
455
+ }
456
+ }
457
+ if (this._pointerMode === `select-rect`) {
458
+ const bpr = bytesPerRow(this.columns);
459
+ const currentX = pos % bpr;
460
+ const currentY = Math.floor(pos / bpr);
461
+ const x = Math.min(this._rectAnchorX, currentX);
462
+ const y = Math.min(this._rectAnchorY, currentY);
463
+ const width = Math.abs(currentX - this._rectAnchorX) + 1;
464
+ const height = Math.abs(currentY - this._rectAnchorY) + 1;
465
+ this._selection = { kind: `rectangular`, x, y, width, height };
466
+ this._dispatchSelectEvent();
467
+ }
468
+ }
469
+ _onPointerUp(pos, side, e) {
470
+ const target = e.target;
471
+ target.releasePointerCapture(e.pointerId);
472
+ if (this._pointerMode === `pending`) {
473
+ this._selection = { kind: `single`, pos };
474
+ this._initialSelectionPoint = pos;
475
+ this._currentCursorPoint = pos;
476
+ this._editState = { pos, side, partial: `` };
477
+ this._dispatchSelectEvent();
478
+ }
479
+ if (this._pointerMode === `select-cont`) {
480
+ if (this._dragAnchor !== null && this._shiftClickTarget !== null) {
481
+ this._selection = {
482
+ kind: `contiguous`,
483
+ start: this._dragAnchor,
484
+ end: this._shiftClickTarget,
485
+ };
486
+ this._initialSelectionPoint = Math.min(this._dragAnchor, this._shiftClickTarget);
487
+ this._currentCursorPoint = Math.max(this._dragAnchor, this._shiftClickTarget);
488
+ this._dispatchSelectEvent();
489
+ }
490
+ else if (this._dragAnchor !== null) {
491
+ const mode = `contiguous`;
492
+ this._selection = selectionFromPointerRange(this._dragAnchor, pos, mode, this.columns);
493
+ this._initialSelectionPoint = this._dragAnchor;
494
+ this._currentCursorPoint = pos;
495
+ this._dispatchSelectEvent();
496
+ }
497
+ }
498
+ if (this._pointerMode === `select-rect`) {
499
+ const bpr = bytesPerRow(this.columns);
500
+ const currentX = pos % bpr;
501
+ const currentY = Math.floor(pos / bpr);
502
+ const x = Math.min(this._rectAnchorX, currentX);
503
+ const y = Math.min(this._rectAnchorY, currentY);
504
+ const width = Math.abs(currentX - this._rectAnchorX) + 1;
505
+ const height = Math.abs(currentY - this._rectAnchorY) + 1;
506
+ this._selection = { kind: `rectangular`, x, y, width, height };
507
+ this._dispatchSelectEvent();
508
+ }
509
+ if (this._pointerMode === `drag-value` && this._currentDragDiff) {
510
+ pushDiff(this._undoStack, this._currentDragDiff);
511
+ this._dispatchChangeEvent(this._currentDragDiff);
512
+ }
513
+ this._pointerMode = null;
514
+ this._dragStart = null;
515
+ this._dragAnchor = null;
516
+ this._currentDragDiff = null;
517
+ this._shiftClickTarget = null;
518
+ }
519
+ _handleBackspace() {
520
+ if (!this._editState)
521
+ return;
522
+ this._editState = { ...this._editState, partial: `` };
523
+ this.requestUpdate();
524
+ }
525
+ _handleValueEntry(key) {
526
+ if (!this._editState)
527
+ return;
528
+ const { pos, side, partial } = this._editState;
529
+ if (side === `text`) {
530
+ if (key.length === 1 && key.charCodeAt(0) >= 0x20 && key.charCodeAt(0) <= 0x7E) {
531
+ const value = key.charCodeAt(0);
532
+ const diff = writeByte(this._store, pos, value);
533
+ pushDiff(this._undoStack, diff);
534
+ this._dispatchChangeEvent(diff);
535
+ this._advanceCursor();
536
+ }
537
+ return;
538
+ }
539
+ if (partial === `` && key === `.`) {
540
+ this._editState = { ...this._editState, partial: `.` };
541
+ this.requestUpdate();
542
+ return;
543
+ }
544
+ if (partial.startsWith(`.`)) {
545
+ if (/\d/.test(key)) {
546
+ let newPartial = partial + key;
547
+ if (Number(newPartial.slice(1)) > 255) {
548
+ newPartial = `.255`;
549
+ }
550
+ this._editState = { ...this._editState, partial: newPartial };
551
+ this.requestUpdate();
552
+ }
553
+ return;
554
+ }
555
+ const hexChars = `0123456789ABCDEFabcdef`;
556
+ if (hexChars.includes(key)) {
557
+ const newPartial = (partial + key.toUpperCase()).slice(-2);
558
+ this._editState = { ...this._editState, partial: newPartial };
559
+ this.requestUpdate();
560
+ if (newPartial.length === 2) {
561
+ const value = Number.parseInt(newPartial, 16);
562
+ const diff = writeByte(this._store, pos, value);
563
+ pushDiff(this._undoStack, diff);
564
+ this._dispatchChangeEvent(diff);
565
+ this._advanceCursor();
566
+ }
567
+ }
568
+ else if (partial !== ``) {
569
+ this._editState = { ...this._editState, partial: `` };
570
+ this.requestUpdate();
571
+ }
572
+ }
573
+ _commitDecimalValue() {
574
+ if (!this._editState)
575
+ return;
576
+ const value = Number.parseInt(this._editState.partial.slice(1), 10);
577
+ if (!isNaN(value)) {
578
+ const diff = writeByte(this._store, this._editState.pos, value);
579
+ pushDiff(this._undoStack, diff);
580
+ this._dispatchChangeEvent(diff);
581
+ this._advanceCursor();
582
+ }
583
+ }
584
+ _advanceCursor() {
585
+ if (!this._editState)
586
+ return;
587
+ const dataLen = storeLength(this._store);
588
+ const newPos = clampPos(this._editState.pos + 1, dataLen);
589
+ this._editState = { pos: newPos, side: this._editState.side, partial: `` };
590
+ this._selection = { kind: `single`, pos: newPos };
591
+ this.requestUpdate();
592
+ }
593
+ _dispatchChangeEvent(diff) {
594
+ this.dispatchEvent(new CustomEvent(`hex-change`, {
595
+ detail: { diff },
596
+ bubbles: true,
597
+ composed: true,
598
+ }));
599
+ }
600
+ _dispatchSelectEvent() {
601
+ const sel = this._selection;
602
+ let detail;
603
+ if (!sel) {
604
+ detail = { type: `none` };
605
+ }
606
+ else if (sel.kind === `single`) {
607
+ detail = { type: `single`, position: sel.pos };
608
+ }
609
+ else if (sel.kind === `contiguous`) {
610
+ detail = { type: `contiguous`, start: sel.start, end: sel.end };
611
+ }
612
+ else if (sel.kind === `rectangular`) {
613
+ detail = { type: `rectangular`, x: sel.x, y: sel.y, width: sel.width, height: sel.height };
614
+ }
615
+ else {
616
+ detail = { type: `none` };
617
+ }
618
+ this.dispatchEvent(new CustomEvent(`select`, {
619
+ detail,
620
+ bubbles: true,
621
+ composed: true,
622
+ }));
623
+ }
624
+ _copy() {
625
+ const positions = getSelectedPositions(this._selection, this.columns);
626
+ if (positions.length === 0)
627
+ return;
628
+ const bytes = positions.map((p) => readByte(this._store, p));
629
+ this._copyBuffer = new Uint8Array(bytes);
630
+ const hexStr = bytes.map((b) => b.toString(16).padStart(2, `0`)).join(` `);
631
+ navigator.clipboard?.writeText(hexStr).catch(() => { });
632
+ }
633
+ async _paste() {
634
+ let bytes = null;
635
+ try {
636
+ const text = await navigator.clipboard?.readText();
637
+ if (text) {
638
+ bytes = this._parseHexString(text);
639
+ }
640
+ }
641
+ catch {
642
+ // ignore
643
+ }
644
+ if (!bytes && this._copyBuffer) {
645
+ bytes = Array.from(this._copyBuffer);
646
+ }
647
+ if (!bytes || bytes.length === 0)
648
+ return;
649
+ if (!this._selection)
650
+ return;
651
+ const entries = new Map();
652
+ if (this._selection.kind === `single`) {
653
+ const startPos = this._selection.pos;
654
+ const dataLen = storeLength(this._store);
655
+ for (let i = 0; i < bytes.length && startPos + i < dataLen; i++) {
656
+ entries.set(startPos + i, bytes[i]);
657
+ }
658
+ }
659
+ else if (this._selection.kind === `contiguous`) {
660
+ const startPos = Math.min(this._selection.start, this._selection.end);
661
+ const endPos = Math.max(this._selection.start, this._selection.end);
662
+ const available = endPos - startPos + 1;
663
+ for (let i = 0; i < Math.min(bytes.length, available); i++) {
664
+ entries.set(startPos + i, bytes[i]);
665
+ }
666
+ }
667
+ else if (this._selection.kind === `rectangular`) {
668
+ const { x, y, width, height } = this._selection;
669
+ const bpr = bytesPerRow(this.columns);
670
+ let byteIdx = 0;
671
+ for (let row = 0; row < height && byteIdx < bytes.length; row++) {
672
+ for (let col = 0; col < width && byteIdx < bytes.length; col++) {
673
+ const pos = (y + row) * bpr + x + col;
674
+ entries.set(pos, bytes[byteIdx++]);
675
+ }
676
+ }
677
+ }
678
+ if (entries.size > 0) {
679
+ const diff = writeBytes(this._store, entries);
680
+ pushDiff(this._undoStack, diff);
681
+ this._dispatchChangeEvent(diff);
682
+ this.requestUpdate();
683
+ }
684
+ }
685
+ _parseHexString(text) {
686
+ const bytes = [];
687
+ const cleaned = text.replace(/[^0-9A-F]/gi, ` `).trim();
688
+ if (!cleaned)
689
+ return bytes;
690
+ const parts = cleaned.split(/\s+/);
691
+ for (const part of parts) {
692
+ if (part.length === 1) {
693
+ bytes.push(Number.parseInt(part + part, 16));
694
+ }
695
+ else if (part.length === 2) {
696
+ bytes.push(Number.parseInt(part, 16));
697
+ }
698
+ }
699
+ return bytes;
700
+ }
701
+ _getColHeaders() {
702
+ const headers = [];
703
+ for (let i = 0; i < this.columns; i++) {
704
+ const offset = i * 4;
705
+ headers.push(`+${offset.toString(16).toUpperCase()}`);
706
+ }
707
+ return headers;
708
+ }
709
+ _isRowShaded(pos) {
710
+ const sel = this._selection;
711
+ if (!sel || sel.kind !== `single`)
712
+ return true;
713
+ const bpr = bytesPerRow(this.columns);
714
+ const row = Math.floor(pos / bpr);
715
+ const selRow = Math.floor(sel.pos / bpr);
716
+ return row === selRow;
717
+ }
718
+ _isHexShaded(pos) {
719
+ return this._isRowShaded(pos);
720
+ }
721
+ _isTextShaded(pos) {
722
+ return this._isRowShaded(pos);
723
+ }
724
+ render() {
725
+ const dataLen = storeLength(this._store);
726
+ const bpr = bytesPerRow(this.columns);
727
+ const totalRows = Math.ceil(dataLen / bpr);
728
+ const containerH = this._containerH > 0 ? this._containerH : 280;
729
+ const startRow = Math.floor(this._scrollTop / this._rowHeight);
730
+ const endRow = Math.min(startRow + Math.ceil(containerH / this._rowHeight) + 2, totalRows);
731
+ const topSpacerHeight = startRow * this._rowHeight;
732
+ const botSpacerHeight = (totalRows - endRow) * this._rowHeight;
733
+ const changeset = getChangeset(this._store);
734
+ const colHeaders = this._getColHeaders();
735
+ const hexActive = this._focusSide === `hex` || this._focusSide === null;
736
+ const textActive = this._focusSide === `text`;
737
+ return html `
738
+ <div class="hex-editor" tabindex="0" @keydown=${this._onKeyDown} @pointerleave=${() => { }}>
739
+ <div class="header">
740
+ ${this.hideOffsetCol ? null : html `<span class="offset-cell">Offset</span>`}
741
+ ${this.hideHexCol ? null : repeat(colHeaders, h => html `<span class="col-header ${hexActive ? `active` : ``}">${h}</span>`)}
742
+ ${this.hideTextCol ? null : html `<span class="text-header ${textActive ? `active` : ``}">Text</span>`}
743
+ </div>
744
+ <div class="scroll-container" @scroll=${this._onScroll}>
745
+ <div style="height: ${topSpacerHeight}px"></div>
746
+ ${repeat(Array.from({ length: endRow - startRow }, (_, i) => startRow + i), rowIndex => rowIndex, rowIndex => this._renderRow(rowIndex, changeset))}
747
+ <div style="height: ${botSpacerHeight}px"></div>
748
+ </div>
749
+ </div>
750
+ `;
751
+ }
752
+ _renderRow(rowIndex, changeset) {
753
+ const bpr = bytesPerRow(this.columns);
754
+ const offset = rowIndex * bpr;
755
+ return html `
756
+ <div class="row" data-row=${rowIndex}>
757
+ ${this.hideOffsetCol ? null : html `<span class="offset-cell">${offset.toString(16).toUpperCase().padStart(6, `0`)}</span>`}
758
+ ${this.hideHexCol
759
+ ? null
760
+ : repeat(Array.from({ length: this.columns }, (_, i) => i), colIndex => colIndex, colIndex => this._renderColumn(rowIndex, colIndex, changeset))}
761
+ ${this.hideTextCol
762
+ ? null
763
+ : html `
764
+ <span class="text-area">
765
+ ${repeat(Array.from({ length: bpr }, (_, i) => i), i => i, i => this._renderTextChar(offset + i, changeset))}
766
+ </span>
767
+ `}
768
+ </div>
769
+ `;
770
+ }
771
+ _renderColumn(rowIndex, colIndex, changeset) {
772
+ const bpr = bytesPerRow(this.columns);
773
+ const basePos = rowIndex * bpr + colIndex * 4;
774
+ return html `
775
+ <span class="col-group">
776
+ ${[0, 1, 2, 3].map(b => this._renderHexCell(basePos + b, changeset))}
777
+ </span>
778
+ `;
779
+ }
780
+ _renderHexCell(pos, changeset) {
781
+ const dataLen = storeLength(this._store);
782
+ if (pos >= dataLen) {
783
+ return html `<span class="hex-cell"></span>`;
784
+ }
785
+ const byte = readByte(this._store, pos);
786
+ const hexStr = byte.toString(16).toUpperCase().padStart(2, `0`);
787
+ const isSelected = selectionContains(this._selection, pos, this.columns);
788
+ const isChanged = this.showChangeset && changeset.has(pos);
789
+ const isEditing = this._editState?.pos === pos;
790
+ const classes = [`hex-cell`];
791
+ if (isSelected)
792
+ classes.push(`selected`);
793
+ if (isChanged)
794
+ classes.push(`changed`);
795
+ if (isEditing)
796
+ classes.push(`editing`);
797
+ if (this._isHexShaded(pos))
798
+ classes.push(`shaded`);
799
+ let displayText = hexStr;
800
+ let colourStyle;
801
+ if (isEditing && this._editState) {
802
+ displayText = this._editState.partial === `` ? hexStr : `${this._editState.partial}_`;
803
+ }
804
+ if (this.colourScheme === `shade` && this._shadeMap) {
805
+ colourStyle = { color: this._shadeMap.forByte(byte) };
806
+ }
807
+ else if (this.colourScheme === `ascii`) {
808
+ classes.push(getAsciiClass(byte));
809
+ }
810
+ return html `
811
+ <span
812
+ class=${classes.join(` `)}
813
+ style=${styleMap(colourStyle || {})}
814
+ @pointerdown=${(e) => this._onPointerDown(pos, `hex`, e)}
815
+ @pointerup=${(e) => this._onPointerUp(pos, `hex`, e)}
816
+ @pointermove=${(e) => this._onPointerMove(pos, `hex`, e)}
817
+ >${displayText}</span>
818
+ `;
819
+ }
820
+ _renderTextChar(pos, changeset) {
821
+ const dataLen = storeLength(this._store);
822
+ if (pos >= dataLen) {
823
+ return html `<span class="text-char"></span>`;
824
+ }
825
+ const byte = readByte(this._store, pos);
826
+ const char = byte >= 0x20 && byte <= 0x7E ? String.fromCharCode(byte) : `.`;
827
+ const isSelected = selectionContains(this._selection, pos, this.columns);
828
+ const isChanged = this.showChangeset && changeset.has(pos);
829
+ const classes = [`text-char`];
830
+ if (isSelected)
831
+ classes.push(`selected`);
832
+ if (isChanged)
833
+ classes.push(`changed`);
834
+ if (this._isTextShaded(pos))
835
+ classes.push(`shaded`);
836
+ let colourStyle;
837
+ if (this.colourScheme === `shade` && this._shadeMap) {
838
+ colourStyle = { color: this._shadeMap.forByte(byte) };
839
+ }
840
+ else if (this.colourScheme === `ascii`) {
841
+ classes.push(getAsciiClass(byte));
842
+ }
843
+ return html `
844
+ <span
845
+ class=${classes.join(` `)}
846
+ style=${styleMap(colourStyle || {})}
847
+ @pointerdown=${(e) => this._onPointerDown(pos, `text`, e)}
848
+ @pointerup=${(e) => this._onPointerUp(pos, `text`, e)}
849
+ @pointermove=${(e) => this._onPointerMove(pos, `text`, e)}
850
+ >${char}</span>
851
+ `;
852
+ }
853
+ };
854
+ __decorate([
855
+ property({ type: Number })
856
+ ], IxfxHexEditorElement.prototype, "columns", void 0);
857
+ __decorate([
858
+ property({ type: String })
859
+ ], IxfxHexEditorElement.prototype, "colourScheme", void 0);
860
+ __decorate([
861
+ property({ type: Boolean })
862
+ ], IxfxHexEditorElement.prototype, "showChangeset", void 0);
863
+ __decorate([
864
+ property({ type: Boolean, attribute: `hide-offset-col` })
865
+ ], IxfxHexEditorElement.prototype, "hideOffsetCol", void 0);
866
+ __decorate([
867
+ property({ type: Boolean, attribute: `hide-hex-col` })
868
+ ], IxfxHexEditorElement.prototype, "hideHexCol", void 0);
869
+ __decorate([
870
+ property({ type: Boolean, attribute: `hide-text-col` })
871
+ ], IxfxHexEditorElement.prototype, "hideTextCol", void 0);
872
+ __decorate([
873
+ state()
874
+ ], IxfxHexEditorElement.prototype, "_selection", void 0);
875
+ __decorate([
876
+ state()
877
+ ], IxfxHexEditorElement.prototype, "_scrollTop", void 0);
878
+ __decorate([
879
+ state()
880
+ ], IxfxHexEditorElement.prototype, "_editState", void 0);
881
+ __decorate([
882
+ state()
883
+ ], IxfxHexEditorElement.prototype, "_containerH", void 0);
884
+ __decorate([
885
+ state()
886
+ ], IxfxHexEditorElement.prototype, "_shadeMap", void 0);
887
+ __decorate([
888
+ state()
889
+ ], IxfxHexEditorElement.prototype, "_focusSide", void 0);
890
+ IxfxHexEditorElement = __decorate([
891
+ customElement(`ixfx-hex-editor`)
892
+ ], IxfxHexEditorElement);
893
+ export { IxfxHexEditorElement };
894
+ //# sourceMappingURL=hex-editor.js.map