@perspective-dev/viewer 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (394) hide show
  1. package/LICENSE.md +193 -0
  2. package/README.md +4 -0
  3. package/dist/cdn/perspective-viewer.js +3 -0
  4. package/dist/cdn/perspective-viewer.js.map +7 -0
  5. package/dist/css/dracula.css +1 -0
  6. package/dist/css/gruvbox-dark.css +1 -0
  7. package/dist/css/gruvbox.css +1 -0
  8. package/dist/css/icons.css +1 -0
  9. package/dist/css/intl/de.css +1 -0
  10. package/dist/css/intl/es.css +1 -0
  11. package/dist/css/intl/fr.css +1 -0
  12. package/dist/css/intl/ja.css +1 -0
  13. package/dist/css/intl/pt.css +1 -0
  14. package/dist/css/intl/zh.css +1 -0
  15. package/dist/css/intl.css +1 -0
  16. package/dist/css/monokai.css +1 -0
  17. package/dist/css/pro-dark.css +1 -0
  18. package/dist/css/pro.css +1 -0
  19. package/dist/css/solarized-dark.css +1 -0
  20. package/dist/css/solarized.css +1 -0
  21. package/dist/css/themes.css +1 -0
  22. package/dist/css/vaporwave.css +1 -0
  23. package/dist/css/variables.css +0 -0
  24. package/dist/esm/bootstrap.d.ts +1 -0
  25. package/dist/esm/extensions.d.ts +70 -0
  26. package/dist/esm/perspective-viewer.d.ts +39 -0
  27. package/dist/esm/perspective-viewer.inline.js +3 -0
  28. package/dist/esm/perspective-viewer.inline.js.map +7 -0
  29. package/dist/esm/perspective-viewer.js +3 -0
  30. package/dist/esm/perspective-viewer.js.map +7 -0
  31. package/dist/esm/plugin.d.ts +195 -0
  32. package/dist/esm/ts-rs/Aggregate.d.ts +1 -0
  33. package/dist/esm/ts-rs/ColumnConfigValues.d.ts +31 -0
  34. package/dist/esm/ts-rs/CustomDatetimeFormat.d.ts +1 -0
  35. package/dist/esm/ts-rs/CustomDatetimeStyleConfig.d.ts +15 -0
  36. package/dist/esm/ts-rs/CustomNumberFormatConfig.d.ts +18 -0
  37. package/dist/esm/ts-rs/DatetimeColorMode.d.ts +1 -0
  38. package/dist/esm/ts-rs/DatetimeFormatType.d.ts +6 -0
  39. package/dist/esm/ts-rs/Expressions.d.ts +3 -0
  40. package/dist/esm/ts-rs/Filter.d.ts +2 -0
  41. package/dist/esm/ts-rs/FilterReducer.d.ts +1 -0
  42. package/dist/esm/ts-rs/FilterTerm.d.ts +2 -0
  43. package/dist/esm/ts-rs/FormatMode.d.ts +1 -0
  44. package/dist/esm/ts-rs/FormatUnit.d.ts +1 -0
  45. package/dist/esm/ts-rs/NumberBackgroundMode.d.ts +1 -0
  46. package/dist/esm/ts-rs/NumberForegroundMode.d.ts +1 -0
  47. package/dist/esm/ts-rs/OptionalUpdate.d.ts +1 -0
  48. package/dist/esm/ts-rs/PluginConfig.d.ts +2 -0
  49. package/dist/esm/ts-rs/RoundingMode.d.ts +1 -0
  50. package/dist/esm/ts-rs/RoundingPriority.d.ts +1 -0
  51. package/dist/esm/ts-rs/Scalar.d.ts +5 -0
  52. package/dist/esm/ts-rs/SignDisplay.d.ts +1 -0
  53. package/dist/esm/ts-rs/SimpleDatetimeFormat.d.ts +1 -0
  54. package/dist/esm/ts-rs/SimpleDatetimeStyleConfig.d.ts +6 -0
  55. package/dist/esm/ts-rs/Sort.d.ts +2 -0
  56. package/dist/esm/ts-rs/SortDir.d.ts +1 -0
  57. package/dist/esm/ts-rs/StringColorMode.d.ts +1 -0
  58. package/dist/esm/ts-rs/TrailingZeroDisplay.d.ts +1 -0
  59. package/dist/esm/ts-rs/UseGrouping.d.ts +1 -0
  60. package/dist/esm/ts-rs/ViewerConfigUpdate.d.ts +102 -0
  61. package/dist/esm/ts-rs/serde_json/JsonValue.d.ts +3 -0
  62. package/dist/wasm/perspective-viewer.d.ts +1291 -0
  63. package/dist/wasm/perspective-viewer.js +3883 -0
  64. package/dist/wasm/perspective-viewer.wasm +0 -0
  65. package/dist/wasm/perspective-viewer.wasm.d.ts +142 -0
  66. package/dist/wasm/snippets/perspective-viewer-c69283f6f62a5f14/inline0.js +1 -0
  67. package/dist/wasm/snippets/perspective-viewer-c69283f6f62a5f14/inline1.js +1 -0
  68. package/dist/wasm/snippets/perspective-viewer-c69283f6f62a5f14/inline2.js +1 -0
  69. package/dist/wasm/snippets/perspective-viewer-c69283f6f62a5f14/inline3.js +44 -0
  70. package/dist/wasm/snippets/perspective-viewer-c69283f6f62a5f14/inline4.js +1 -0
  71. package/package.json +55 -0
  72. package/src/less/aggregate-selector.less +72 -0
  73. package/src/less/column-dropdown.less +95 -0
  74. package/src/less/column-selector.less +551 -0
  75. package/src/less/column-settings-panel.less +255 -0
  76. package/src/less/column-style.less +319 -0
  77. package/src/less/column-symbol-attributes.less +73 -0
  78. package/src/less/config-selector.less +363 -0
  79. package/src/less/containers/dropdown-menu.less +94 -0
  80. package/src/less/containers/pairs-list.less +46 -0
  81. package/src/less/containers/radio-list.less +29 -0
  82. package/src/less/containers/scroll-panel.less +27 -0
  83. package/src/less/containers/split-panel.less +80 -0
  84. package/src/less/containers/tabs.less +90 -0
  85. package/src/less/dom/checkbox.less +100 -0
  86. package/src/less/dom/scrollbar.less +35 -0
  87. package/src/less/dom/select.less +63 -0
  88. package/src/less/empty-column.less +72 -0
  89. package/src/less/expression-editor.less +152 -0
  90. package/src/less/filter-dropdown.less +53 -0
  91. package/src/less/filter-item.less +126 -0
  92. package/src/less/form/code-editor.less +137 -0
  93. package/src/less/form/debug.less +88 -0
  94. package/src/less/function-dropdown.less +45 -0
  95. package/src/less/plugin-selector.less +173 -0
  96. package/src/less/render-warning.less +81 -0
  97. package/src/less/status-bar.less +551 -0
  98. package/src/less/type-icon.less +68 -0
  99. package/src/less/viewer.less +368 -0
  100. package/src/rust/components/column_dropdown.rs +162 -0
  101. package/src/rust/components/column_selector/active_column.rs +462 -0
  102. package/src/rust/components/column_selector/add_expression_button.rs +59 -0
  103. package/src/rust/components/column_selector/aggregate_selector.rs +186 -0
  104. package/src/rust/components/column_selector/config_selector.rs +674 -0
  105. package/src/rust/components/column_selector/empty_column.rs +134 -0
  106. package/src/rust/components/column_selector/expression_toolbar.rs +45 -0
  107. package/src/rust/components/column_selector/filter_column.rs +530 -0
  108. package/src/rust/components/column_selector/inactive_column.rs +221 -0
  109. package/src/rust/components/column_selector/invalid_column.rs +37 -0
  110. package/src/rust/components/column_selector/pivot_column.rs +93 -0
  111. package/src/rust/components/column_selector/sort_column.rs +135 -0
  112. package/src/rust/components/column_selector.rs +426 -0
  113. package/src/rust/components/column_settings_sidebar/attributes_tab.rs +34 -0
  114. package/src/rust/components/column_settings_sidebar/mod.rs +17 -0
  115. package/src/rust/components/column_settings_sidebar/save_settings.rs +68 -0
  116. package/src/rust/components/column_settings_sidebar/sidebar.rs +396 -0
  117. package/src/rust/components/column_settings_sidebar/style_tab/column_style.rs +177 -0
  118. package/src/rust/components/column_settings_sidebar/style_tab/stub.rs +34 -0
  119. package/src/rust/components/column_settings_sidebar/style_tab/symbol/row_selector.rs +101 -0
  120. package/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_config.rs +24 -0
  121. package/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs.rs +185 -0
  122. package/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_selector.rs +55 -0
  123. package/src/rust/components/column_settings_sidebar/style_tab/symbol.rs +131 -0
  124. package/src/rust/components/column_settings_sidebar/style_tab.rs +231 -0
  125. package/src/rust/components/containers/dragdrop_list.rs +325 -0
  126. package/src/rust/components/containers/dropdown_menu.rs +104 -0
  127. package/src/rust/components/containers/kvpair.rs +47 -0
  128. package/src/rust/components/containers/mod.rs +28 -0
  129. package/src/rust/components/containers/scroll_panel.rs +311 -0
  130. package/src/rust/components/containers/scroll_panel_item.rs +111 -0
  131. package/src/rust/components/containers/select.rs +269 -0
  132. package/src/rust/components/containers/sidebar.rs +89 -0
  133. package/src/rust/components/containers/split_panel.rs +483 -0
  134. package/src/rust/components/containers/tab_list.rs +104 -0
  135. package/src/rust/components/containers/tests/mod.rs +11 -0
  136. package/src/rust/components/containers/tests/split_panel.rs +91 -0
  137. package/src/rust/components/containers/trap_door_panel.rs +50 -0
  138. package/src/rust/components/copy_dropdown.rs +136 -0
  139. package/src/rust/components/datetime_column_style/custom.rs +222 -0
  140. package/src/rust/components/datetime_column_style/simple.rs +122 -0
  141. package/src/rust/components/datetime_column_style.rs +284 -0
  142. package/src/rust/components/editable_header.rs +183 -0
  143. package/src/rust/components/empty_row.rs +169 -0
  144. package/src/rust/components/error_message.rs +56 -0
  145. package/src/rust/components/export_dropdown.rs +153 -0
  146. package/src/rust/components/expression_editor.rs +153 -0
  147. package/src/rust/components/filter_dropdown.rs +144 -0
  148. package/src/rust/components/font_loader.rs +254 -0
  149. package/src/rust/components/form/code_editor.rs +286 -0
  150. package/src/rust/components/form/color_range_selector.rs +115 -0
  151. package/src/rust/components/form/color_selector.rs +54 -0
  152. package/src/rust/components/form/debug.rs +253 -0
  153. package/src/rust/components/form/highlight.rs +50 -0
  154. package/src/rust/components/form/mod.rs +29 -0
  155. package/src/rust/components/form/number_field.rs +72 -0
  156. package/src/rust/components/form/number_input.rs +45 -0
  157. package/src/rust/components/form/number_range_field.rs +77 -0
  158. package/src/rust/components/form/optional_field.rs +53 -0
  159. package/src/rust/components/form/select_field.rs +104 -0
  160. package/src/rust/components/function_dropdown.rs +151 -0
  161. package/src/rust/components/mod.rs +45 -0
  162. package/src/rust/components/modal.rs +171 -0
  163. package/src/rust/components/number_column_style.rs +522 -0
  164. package/src/rust/components/plugin_selector.rs +196 -0
  165. package/src/rust/components/render_warning.rs +178 -0
  166. package/src/rust/components/status_bar.rs +315 -0
  167. package/src/rust/components/status_bar_counter.rs +229 -0
  168. package/src/rust/components/status_indicator.rs +164 -0
  169. package/src/rust/components/string_column_style.rs +186 -0
  170. package/src/rust/components/style/local_style.rs +35 -0
  171. package/src/rust/components/style/mod.rs +52 -0
  172. package/src/rust/components/style/style_cache.rs +132 -0
  173. package/src/rust/components/style/style_provider.rs +65 -0
  174. package/src/rust/components/style_controls/number_string_format/digits_section.rs +140 -0
  175. package/src/rust/components/style_controls/number_string_format/misc_section.rs +56 -0
  176. package/src/rust/components/style_controls/number_string_format/style_section.rs +69 -0
  177. package/src/rust/components/style_controls/number_string_format/types.rs +31 -0
  178. package/src/rust/components/style_controls/number_string_format.rs +259 -0
  179. package/src/rust/components/style_controls.rs +15 -0
  180. package/src/rust/components/type_icon.rs +53 -0
  181. package/src/rust/components/viewer.rs +668 -0
  182. package/src/rust/config/columns_config.rs +132 -0
  183. package/src/rust/config/datetime_column_style/color_mode.rs +62 -0
  184. package/src/rust/config/datetime_column_style/custom.rs +121 -0
  185. package/src/rust/config/datetime_column_style/custom_format.rs +90 -0
  186. package/src/rust/config/datetime_column_style/simple.rs +55 -0
  187. package/src/rust/config/datetime_column_style/simple_format.rs +86 -0
  188. package/src/rust/config/datetime_column_style.rs +104 -0
  189. package/src/rust/config/mod.rs +30 -0
  190. package/src/rust/config/number_column_style.rs +138 -0
  191. package/src/rust/config/number_string_format/enums.rs +298 -0
  192. package/src/rust/config/number_string_format.rs +269 -0
  193. package/src/rust/config/string_column_style.rs +140 -0
  194. package/src/rust/config/view_config.rs +24 -0
  195. package/src/rust/config/viewer_config.rs +337 -0
  196. package/src/rust/custom_elements/column_dropdown.rs +123 -0
  197. package/src/rust/custom_elements/copy_dropdown.rs +112 -0
  198. package/src/rust/custom_elements/debug_plugin.rs +114 -0
  199. package/src/rust/custom_elements/export_dropdown.rs +112 -0
  200. package/src/rust/custom_elements/filter_dropdown.rs +179 -0
  201. package/src/rust/custom_elements/function_dropdown.rs +115 -0
  202. package/src/rust/custom_elements/mod.rs +24 -0
  203. package/src/rust/custom_elements/modal.rs +395 -0
  204. package/src/rust/custom_elements/viewer.rs +880 -0
  205. package/src/rust/custom_events.rs +214 -0
  206. package/src/rust/dragdrop.rs +362 -0
  207. package/src/rust/exprtk/cursor.rs +81 -0
  208. package/src/rust/exprtk/mod.rs +17 -0
  209. package/src/rust/exprtk/tokenize/comment.rs +21 -0
  210. package/src/rust/exprtk/tokenize/number.rs +44 -0
  211. package/src/rust/exprtk/tokenize/string.rs +98 -0
  212. package/src/rust/exprtk/tokenize/symbol.rs +26 -0
  213. package/src/rust/exprtk/tokenize.rs +190 -0
  214. package/src/rust/js/clipboard.rs +77 -0
  215. package/src/rust/js/clipboard_item.rs +21 -0
  216. package/src/rust/js/intersection_observer.rs +32 -0
  217. package/src/rust/js/mimetype.rs +42 -0
  218. package/src/rust/js/mod.rs +29 -0
  219. package/src/rust/js/plugin.rs +167 -0
  220. package/src/rust/js/resize_observer.rs +37 -0
  221. package/src/rust/js/testing.rs +149 -0
  222. package/src/rust/lib.rs +116 -0
  223. package/src/rust/model/columns_iter_set.rs +340 -0
  224. package/src/rust/model/copy_export.rs +157 -0
  225. package/src/rust/model/create_col.rs +59 -0
  226. package/src/rust/model/edit_expression.rs +95 -0
  227. package/src/rust/model/export_app.rs +58 -0
  228. package/src/rust/model/export_method.rs +151 -0
  229. package/src/rust/model/get_viewer_config.rs +85 -0
  230. package/src/rust/model/intersection_observer.rs +81 -0
  231. package/src/rust/model/is_invalid_drop.rs +36 -0
  232. package/src/rust/model/mod.rs +93 -0
  233. package/src/rust/model/plugin_column_styles.rs +106 -0
  234. package/src/rust/model/resize_observer.rs +98 -0
  235. package/src/rust/model/restore_and_render.rs +113 -0
  236. package/src/rust/model/structural.rs +73 -0
  237. package/src/rust/model/update_and_render.rs +74 -0
  238. package/src/rust/presentation.rs +370 -0
  239. package/src/rust/renderer/activate.rs +49 -0
  240. package/src/rust/renderer/limits.rs +200 -0
  241. package/src/rust/renderer/plugin_store.rs +45 -0
  242. package/src/rust/renderer/registry.rs +135 -0
  243. package/src/rust/renderer/render_timer.rs +185 -0
  244. package/src/rust/renderer.rs +463 -0
  245. package/src/rust/session/column_defaults_update.rs +141 -0
  246. package/src/rust/session/drag_drop_update.rs +179 -0
  247. package/src/rust/session/metadata.rs +308 -0
  248. package/src/rust/session/replace_expression_update.rs +131 -0
  249. package/src/rust/session/view_subscription.rs +189 -0
  250. package/src/rust/session.rs +794 -0
  251. package/src/rust/utils/browser/blob.rs +49 -0
  252. package/src/rust/utils/browser/download.rs +26 -0
  253. package/src/rust/utils/browser/mod.rs +24 -0
  254. package/src/rust/utils/browser/request_animation_frame.rs +76 -0
  255. package/src/rust/utils/browser/selection.rs +79 -0
  256. package/src/rust/utils/browser/tests/debounce.rs +114 -0
  257. package/src/rust/utils/browser/tests/mod.rs +13 -0
  258. package/src/rust/utils/custom_element.rs +85 -0
  259. package/src/rust/utils/datetime.rs +49 -0
  260. package/src/rust/utils/debounce.rs +54 -0
  261. package/src/rust/utils/hooks/mod.rs +15 -0
  262. package/src/rust/utils/hooks/use_async_callback.rs +53 -0
  263. package/src/rust/utils/mod.rs +114 -0
  264. package/src/rust/utils/number_format.rs +48 -0
  265. package/src/rust/utils/pubsub.rs +222 -0
  266. package/src/rust/utils/scope.rs +54 -0
  267. package/src/rust/utils/tee.rs +88 -0
  268. package/src/rust/utils/tests/mod.rs +14 -0
  269. package/src/rust/utils/tests/pubsub.rs +95 -0
  270. package/src/rust/utils/tests/request_animation_frame.rs +42 -0
  271. package/src/rust/utils/wasm_abi.rs +61 -0
  272. package/src/rust/utils/weak_scope.rs +39 -0
  273. package/src/svg/align-scroll-icon.svg +7 -0
  274. package/src/svg/bg-pattern.png +0 -0
  275. package/src/svg/boolean-type.svg +3 -0
  276. package/src/svg/checkbox-checked-icon.svg +7 -0
  277. package/src/svg/checkbox-hover.svg +4 -0
  278. package/src/svg/checkbox-off.svg +4 -0
  279. package/src/svg/checkbox-on.svg +4 -0
  280. package/src/svg/checkbox-unchecked-icon.svg +3 -0
  281. package/src/svg/close-icon.svg +6 -0
  282. package/src/svg/column-settings-icon.svg +6 -0
  283. package/src/svg/datagrid-select-column.svg +15 -0
  284. package/src/svg/datagrid-select-region.svg +15 -0
  285. package/src/svg/datagrid-select-row.svg +13 -0
  286. package/src/svg/datagrid.svg +13 -0
  287. package/src/svg/date-type.svg +23 -0
  288. package/src/svg/downloading.gif +0 -0
  289. package/src/svg/drag-handle.svg +10 -0
  290. package/src/svg/drawer-bg-pattern-hidpi.png +0 -0
  291. package/src/svg/drawer-tab-hover.svg +8 -0
  292. package/src/svg/drawer-tab-invert-hover.svg +9 -0
  293. package/src/svg/drawer-tab-invert.svg +8 -0
  294. package/src/svg/drawer-tab.svg +7 -0
  295. package/src/svg/dropdown-selector-light.svg +3 -0
  296. package/src/svg/dropdown-selector.svg +3 -0
  297. package/src/svg/duplicate-icon.svg +4 -0
  298. package/src/svg/editable-icon.svg +5 -0
  299. package/src/svg/export-icon.svg +4 -0
  300. package/src/svg/expression.svg +10 -0
  301. package/src/svg/free-scroll-icon.svg +5 -0
  302. package/src/svg/inactive-mouseover.svg +4 -0
  303. package/src/svg/mega-menu-icons-candlestick.svg +38 -0
  304. package/src/svg/mega-menu-icons-datagrid.svg +38 -0
  305. package/src/svg/mega-menu-icons-heatmap.svg +60 -0
  306. package/src/svg/mega-menu-icons-map-scatter.svg +43 -0
  307. package/src/svg/mega-menu-icons-ohlc.svg +40 -0
  308. package/src/svg/mega-menu-icons-sunburst.svg +39 -0
  309. package/src/svg/mega-menu-icons-treemap.svg +44 -0
  310. package/src/svg/mega-menu-icons-x-bar.svg +36 -0
  311. package/src/svg/mega-menu-icons-x-y-line.svg +38 -0
  312. package/src/svg/mega-menu-icons-x-y-scatter.svg +72 -0
  313. package/src/svg/mega-menu-icons-y-area.svg +73 -0
  314. package/src/svg/mega-menu-icons-y-bar.svg +36 -0
  315. package/src/svg/mega-menu-icons-y-line.svg +36 -0
  316. package/src/svg/mega-menu-icons-y-scatter.svg +72 -0
  317. package/src/svg/number-type.svg +4 -0
  318. package/src/svg/radio-hover.svg +4 -0
  319. package/src/svg/radio-off.svg +3 -0
  320. package/src/svg/radio-on.svg +4 -0
  321. package/src/svg/read-only-icon.svg +6 -0
  322. package/src/svg/revert-icon.svg +4 -0
  323. package/src/svg/sort-abs-asc-icon.svg +3 -0
  324. package/src/svg/sort-abs-col-asc-icon.svg +3 -0
  325. package/src/svg/sort-abs-col-desc-icon.svg +3 -0
  326. package/src/svg/sort-abs-desc-icon.svg +3 -0
  327. package/src/svg/sort-asc-icon.svg +4 -0
  328. package/src/svg/sort-col-asc-icon.svg +4 -0
  329. package/src/svg/sort-col-desc-icon.svg +4 -0
  330. package/src/svg/sort-desc-icon.svg +4 -0
  331. package/src/svg/sort-none-icon.svg +3 -0
  332. package/src/svg/status_error.svg +70 -0
  333. package/src/svg/status_ok.svg +26 -0
  334. package/src/svg/string-type.svg +8 -0
  335. package/src/svg/theme-icon.svg +5 -0
  336. package/src/svg/updating.gif +0 -0
  337. package/src/themes/dracula.less +101 -0
  338. package/src/themes/gruvbox-dark.less +116 -0
  339. package/src/themes/gruvbox.less +152 -0
  340. package/src/themes/icons.less +130 -0
  341. package/src/themes/intl/de.less +102 -0
  342. package/src/themes/intl/es.less +102 -0
  343. package/src/themes/intl/fr.less +102 -0
  344. package/src/themes/intl/ja.less +102 -0
  345. package/src/themes/intl/pt.less +102 -0
  346. package/src/themes/intl/zh.less +102 -0
  347. package/src/themes/intl.less +102 -0
  348. package/src/themes/monokai.less +107 -0
  349. package/src/themes/pro-dark.less +147 -0
  350. package/src/themes/pro.less +186 -0
  351. package/src/themes/solarized-dark.less +78 -0
  352. package/src/themes/solarized.less +102 -0
  353. package/src/themes/themes.less +21 -0
  354. package/src/themes/vaporwave.less +145 -0
  355. package/src/themes/variables.less +24 -0
  356. package/src/ts/bootstrap.ts +26 -0
  357. package/src/ts/extensions.ts +124 -0
  358. package/src/ts/perspective-viewer.cdn.ts +19 -0
  359. package/src/ts/perspective-viewer.inline.ts +23 -0
  360. package/src/ts/perspective-viewer.ts +59 -0
  361. package/src/ts/plugin.ts +279 -0
  362. package/src/ts/ts-rs/Aggregate.ts +3 -0
  363. package/src/ts/ts-rs/ColumnConfigValues.ts +14 -0
  364. package/src/ts/ts-rs/CustomDatetimeFormat.ts +3 -0
  365. package/src/ts/ts-rs/CustomDatetimeStyleConfig.ts +5 -0
  366. package/src/ts/ts-rs/CustomNumberFormatConfig.ts +8 -0
  367. package/src/ts/ts-rs/DatetimeColorMode.ts +3 -0
  368. package/src/ts/ts-rs/DatetimeFormatType.ts +8 -0
  369. package/src/ts/ts-rs/Expressions.ts +3 -0
  370. package/src/ts/ts-rs/Filter.ts +4 -0
  371. package/src/ts/ts-rs/FilterReducer.ts +3 -0
  372. package/src/ts/ts-rs/FilterTerm.ts +4 -0
  373. package/src/ts/ts-rs/FormatMode.ts +3 -0
  374. package/src/ts/ts-rs/FormatUnit.ts +3 -0
  375. package/src/ts/ts-rs/NumberBackgroundMode.ts +3 -0
  376. package/src/ts/ts-rs/NumberForegroundMode.ts +3 -0
  377. package/src/ts/ts-rs/OnUpdateData.ts +8 -0
  378. package/src/ts/ts-rs/OptionalUpdate.ts +3 -0
  379. package/src/ts/ts-rs/PluginConfig.ts +4 -0
  380. package/src/ts/ts-rs/RoundingMode.ts +3 -0
  381. package/src/ts/ts-rs/RoundingPriority.ts +3 -0
  382. package/src/ts/ts-rs/Scalar.ts +7 -0
  383. package/src/ts/ts-rs/SignDisplay.ts +3 -0
  384. package/src/ts/ts-rs/SimpleDatetimeFormat.ts +3 -0
  385. package/src/ts/ts-rs/SimpleDatetimeStyleConfig.ts +4 -0
  386. package/src/ts/ts-rs/Sort.ts +4 -0
  387. package/src/ts/ts-rs/SortDir.ts +3 -0
  388. package/src/ts/ts-rs/StringColorMode.ts +3 -0
  389. package/src/ts/ts-rs/TrailingZeroDisplay.ts +3 -0
  390. package/src/ts/ts-rs/UseGrouping.ts +3 -0
  391. package/src/ts/ts-rs/ViewOnUpdateResp.ts +3 -0
  392. package/src/ts/ts-rs/ViewerConfigUpdate.ts +90 -0
  393. package/src/ts/ts-rs/serde_json/JsonValue.ts +3 -0
  394. package/tsconfig.json +15 -0
@@ -0,0 +1,195 @@
1
+ import { View } from "@perspective-dev/client";
2
+ /**
3
+ * The `IPerspectiveViewerPlugin` interface defines the necessary API for a
4
+ * `<perspective-viewer>` plugin, which also must be an `HTMLElement` via the
5
+ * Custom Elements API or otherwise. Rather than implement this API from
6
+ * scratch however, the simplest way is to inherit from
7
+ * `<perspective-viewer-plugin>`, which implements `IPerspectiveViewerPlugin`
8
+ * with non-offensive default implementations, where only the `draw()` and
9
+ * `name()` methods need be overridden to get started with a simple plugin.
10
+ *
11
+ * Note that plugins are frozen once a `<perspective-viewer>` has been
12
+ * instantiated, so generally new plugin code must be executed at the module
13
+ * level (if packaged as a library), or during application init to ensure global
14
+ * availability of a plugin.
15
+ *
16
+ * @example
17
+ * ```javascript
18
+ * const BasePlugin = customElements.get("perspective-viewer-plugin");
19
+ * class MyPlugin extends BasePlugin {
20
+ * get name() {
21
+ * return "My Plugin";
22
+ * }
23
+ * async draw(view) {
24
+ * const count = await view.num_rows();
25
+ * this.innerHTML = `View has ${count} rows`;
26
+ * }
27
+ * }
28
+ *
29
+ * customElements.define("my-plugin", MyPlugin);
30
+ * const Viewer = customElements.get("perspective-viewer");
31
+ * Viewer.registerPlugin("my-plugin");
32
+ * ```
33
+ * @noInheritDoc
34
+ */
35
+ export interface IPerspectiveViewerPlugin {
36
+ /**
37
+ * The name for this plugin, which is used as both it's unique key for use
38
+ * as a parameter for the `plugin` field of a `ViewerConfig`, and as the
39
+ * display name for this plugin in the `<perspective-viewer>` UI.
40
+ */
41
+ get name(): string;
42
+ /**
43
+ * Select mode determines how column add/remove buttons behave for this
44
+ * plugin. `"select"` mode exclusively selects the added column, removing
45
+ * other columns. `"toggle"` mode toggles the column on or off (dependent
46
+ * on column state), leaving existing columns alone.
47
+ */
48
+ get select_mode(): string | undefined;
49
+ /**
50
+ * The minimum number of columns required for this plugin to operate.
51
+ * This mostly affects drag/drop and column remove button behavior,
52
+ * preventing the use from applying configs which violate this min.
53
+ *
54
+ * While this option can technically be `undefined` (as in the case of
55
+ * `@perspective-dev/viewer-datagrid`), doing so currently has nearly
56
+ * identical behavior to 1.
57
+ */
58
+ get min_config_columns(): number | undefined;
59
+ /**
60
+ * The named column labels, if desired. Named columns behave differently
61
+ * in drag/drop mode than unnamed columns, having replace/swap behavior
62
+ * rather than insert. If provided, the length of `config_column_names`
63
+ * _must_ be `>= min_config_columns`, as this is assumed by the drag/drop
64
+ * logic.
65
+ */
66
+ get config_column_names(): string[] | undefined;
67
+ /**
68
+ * The load priority of the plugin. If the plugin shares priority with another,
69
+ * the first to load has a higher priority.
70
+ *
71
+ * A larger number has a higher priority.
72
+ *
73
+ * The plugin with the highest priority will be loaded by default by the Perspective viewer.
74
+ * If you would like to instead begin with a lower priority plugin, choose it explicitly with
75
+ * a `HTMLPerspectiveViewerPluginElement.restore` call.
76
+ */
77
+ get priority(): number | undefined;
78
+ /**
79
+ * Given a column's grouping (determined by indexing it in `plugin.config_column_names`)
80
+ * and its view type, determines whether or not to render column styles in the settings sidebar.
81
+ * Implementing this function and `column_style_config` allows the plugin to interface with the viewer's column configuration API.
82
+ */
83
+ can_render_column_styles?: (view_type: string, group: string) => boolean;
84
+ /**
85
+ * Determines which column configuration controls are populated in the viewer.
86
+ * Corresponds to the data the plugin will recieve on save.
87
+ * Implementing this function and `can_render_column_styles` allows the plugin to interface with the viewer's column configuration API.
88
+ */
89
+ column_style_config?: (view_type: string, group: string) => any;
90
+ /**
91
+ * Render this plugin using the provided `View`. While there is no
92
+ * provision to cancel a render in progress per se, calling a method on
93
+ * a `View` which has been deleted will throw an exception.
94
+ *
95
+ * @example
96
+ * ```
97
+ * async draw(view: perspective.View): Promise<void> {
98
+ * const csv = await view.to_csv();
99
+ * this.innerHTML = `<pre>${csv}</pre>`;
100
+ * }
101
+ * ```
102
+ */
103
+ draw(view: View): Promise<void>;
104
+ /**
105
+ * Draw under the assumption that the `ViewConfig` has not changed since
106
+ * the previous call to `draw()`, but the underlying data has. Defaults to
107
+ * dispatch to `draw()`.
108
+ *
109
+ * @example
110
+ * ```javascript
111
+ * async update(view: perspective.View): Promise<void> {
112
+ * return this.draw(view);
113
+ * }
114
+ * ```
115
+ */
116
+ update(view: View): Promise<void>;
117
+ /**
118
+ * Clear this plugin, though it is up to the discretion of the plugin
119
+ * author to determine what this means. Defaults to resetting this
120
+ * element's `innerHTML`, so be sure to override if you want custom
121
+ * behavior.
122
+ *
123
+ * @example
124
+ * ```javascript
125
+ * async clear(): Promise<void> {
126
+ * this.innerHTML = "";
127
+ * }
128
+ * ```
129
+ */
130
+ clear(): Promise<void>;
131
+ /**
132
+ * Like `update()`, but for when the dimensions of the plugin have changed
133
+ * and the underlying data has not.
134
+ */
135
+ resize(): Promise<void>;
136
+ /**
137
+ * Notify the plugin that the style environment has changed. Useful for
138
+ * plugins which read CSS styles via `window.getComputedStyle()`.
139
+ */
140
+ restyle(): Promise<void>;
141
+ /**
142
+ * Save this plugin's state to a JSON-serializable value. While this value
143
+ * can be anything, it should work reciprocally with `restore()` to return
144
+ * this plugin's renderer to the same state, though potentially with a
145
+ * different `View`.
146
+ *
147
+ * `save()` should be used for user-persistent settings that are
148
+ * data-agnostic, so the user can have persistent view during refresh or
149
+ * reload. For example, `@perspective-dev/viewer-d3fc` uses
150
+ * `plugin_config` to remember the user-repositionable legend coordinates.
151
+ */
152
+ save(): Promise<any>;
153
+ /**
154
+ * Restore this plugin to a state previously returned by `save()`.
155
+ */
156
+ restore(config: any): Promise<void>;
157
+ /**
158
+ * Free any resources acquired by this plugin and prepare to be deleted.
159
+ */
160
+ delete(): Promise<void>;
161
+ }
162
+ /**
163
+ * The `<perspective-viewer-plugin>` element, the default perspective plugin
164
+ * which is registered and activated automcatically when a
165
+ * `<perspective-viewer>` is loaded without plugins. While you will not
166
+ * typically instantiate this class directly, it is simple enough to function
167
+ * as a good "default" plugin implementation which can be extended to create
168
+ * custom plugins.
169
+ *
170
+ * @example
171
+ * ```javascript
172
+ * class MyPlugin extends customElements.get("perspective-viewer-plugin") {
173
+ * // Custom plugin overrides
174
+ * }
175
+ * ```
176
+ * @noInheritDoc
177
+ */
178
+ export declare class HTMLPerspectiveViewerPluginElement extends HTMLElement implements IPerspectiveViewerPlugin {
179
+ constructor();
180
+ get name(): string;
181
+ get select_mode(): "select" | "toggle";
182
+ get min_config_columns(): number | undefined;
183
+ get config_column_names(): string[] | undefined;
184
+ get priority(): number;
185
+ can_render_column_styles(): boolean;
186
+ column_style_config(): any;
187
+ update(view: View): Promise<void>;
188
+ draw(view: View): Promise<void>;
189
+ clear(): Promise<void>;
190
+ resize(): Promise<void>;
191
+ restyle(): Promise<void>;
192
+ save(): Promise<any>;
193
+ restore(): Promise<void>;
194
+ delete(): Promise<void>;
195
+ }
@@ -0,0 +1 @@
1
+ export type Aggregate = string | [string, Array<string>];
@@ -0,0 +1,31 @@
1
+ import type { CustomNumberFormatConfig } from "./CustomNumberFormatConfig.js";
2
+ import type { DatetimeColorMode } from "./DatetimeColorMode.js";
3
+ import type { DatetimeFormatType } from "./DatetimeFormatType.js";
4
+ import type { FormatMode } from "./FormatMode.js";
5
+ import type { NumberBackgroundMode } from "./NumberBackgroundMode.js";
6
+ import type { NumberForegroundMode } from "./NumberForegroundMode.js";
7
+ import type { StringColorMode } from "./StringColorMode.js";
8
+ /**
9
+ * The value de/serialized and stored in the viewer config.
10
+ * Also passed to the plugin via `plugin.save()`.
11
+ */
12
+ export type ColumnConfigValues = {
13
+ symbols?: {
14
+ [key in string]?: string;
15
+ };
16
+ number_format?: CustomNumberFormatConfig | null;
17
+ aggregate_depth?: number;
18
+ number_fg_mode?: NumberForegroundMode;
19
+ number_bg_mode?: NumberBackgroundMode;
20
+ pos_fg_color: string | null;
21
+ neg_fg_color: string | null;
22
+ pos_bg_color: string | null;
23
+ neg_bg_color: string | null;
24
+ fg_gradient: number | null;
25
+ bg_gradient: number | null;
26
+ format?: FormatMode;
27
+ string_color_mode?: StringColorMode;
28
+ color?: string | null;
29
+ date_format?: DatetimeFormatType;
30
+ datetime_color_mode?: DatetimeColorMode;
31
+ };
@@ -0,0 +1 @@
1
+ export type CustomDatetimeFormat = "long" | "short" | "narrow" | "numeric" | "2-digit" | "disabled";
@@ -0,0 +1,15 @@
1
+ import type { CustomDatetimeFormat } from "./CustomDatetimeFormat.js";
2
+ import type { FormatUnit } from "./FormatUnit.js";
3
+ export type CustomDatetimeStyleConfig = {
4
+ format: FormatUnit;
5
+ timeZone?: string | null;
6
+ fractionalSecondDigits?: number;
7
+ second?: CustomDatetimeFormat;
8
+ minute?: CustomDatetimeFormat;
9
+ hour?: CustomDatetimeFormat;
10
+ day?: CustomDatetimeFormat;
11
+ weekday?: CustomDatetimeFormat;
12
+ month?: CustomDatetimeFormat;
13
+ year?: CustomDatetimeFormat;
14
+ hour12?: boolean;
15
+ };
@@ -0,0 +1,18 @@
1
+ import type { RoundingMode } from "./RoundingMode.js";
2
+ import type { RoundingPriority } from "./RoundingPriority.js";
3
+ import type { SignDisplay } from "./SignDisplay.js";
4
+ import type { TrailingZeroDisplay } from "./TrailingZeroDisplay.js";
5
+ import type { UseGrouping } from "./UseGrouping.js";
6
+ export type CustomNumberFormatConfig = {
7
+ minimumIntegerDigits: number | null;
8
+ minimumFractionDigits: number | null;
9
+ maximumFractionDigits: number | null;
10
+ minimumSignificantDigits: number | null;
11
+ maximumSignificantDigits: number | null;
12
+ roundingPriority: RoundingPriority | null;
13
+ roundingIncrement: number | null;
14
+ roundingMode: RoundingMode | null;
15
+ trailingZeroDisplay: TrailingZeroDisplay | null;
16
+ useGrouping: UseGrouping | null;
17
+ signDisplay: SignDisplay | null;
18
+ };
@@ -0,0 +1 @@
1
+ export type DatetimeColorMode = "none" | "foreground" | "background";
@@ -0,0 +1,6 @@
1
+ import type { CustomDatetimeStyleConfig } from "./CustomDatetimeStyleConfig.js";
2
+ import type { SimpleDatetimeStyleConfig } from "./SimpleDatetimeStyleConfig.js";
3
+ /**
4
+ * `Simple` case has all default-able keys and must be last!
5
+ */
6
+ export type DatetimeFormatType = CustomDatetimeStyleConfig | SimpleDatetimeStyleConfig;
@@ -0,0 +1,3 @@
1
+ export type Expressions = {
2
+ [key in string]?: string;
3
+ };
@@ -0,0 +1,2 @@
1
+ import type { FilterTerm } from "./FilterTerm.js";
2
+ export type Filter = [string, string, FilterTerm];
@@ -0,0 +1 @@
1
+ export type FilterReducer = "and" | "or";
@@ -0,0 +1,2 @@
1
+ import type { Scalar } from "./Scalar.js";
2
+ export type FilterTerm = Array<Scalar> | Scalar;
@@ -0,0 +1 @@
1
+ export type FormatMode = "none" | "link" | "bold" | "italics";
@@ -0,0 +1 @@
1
+ export type FormatUnit = "custom";
@@ -0,0 +1 @@
1
+ export type NumberBackgroundMode = "disabled" | "color" | "gradient" | "pulse";
@@ -0,0 +1 @@
1
+ export type NumberForegroundMode = "disabled" | "color" | "bar";
@@ -0,0 +1 @@
1
+ export type OptionalUpdate<T> = null | T;
@@ -0,0 +1,2 @@
1
+ import type { JsonValue } from "./serde_json/JsonValue.js";
2
+ export type PluginConfig = JsonValue;
@@ -0,0 +1 @@
1
+ export type RoundingMode = "ceil" | "floor" | "expand" | "trunc" | "halfCeil" | "halfFloor" | "halfExpand" | "halfTrunc" | "halfEven";
@@ -0,0 +1 @@
1
+ export type RoundingPriority = "auto" | "morePrecision" | "lessPrecision";
@@ -0,0 +1,5 @@
1
+ /**
2
+ * This type represents the ViewConfig serializable type, which must be JSON
3
+ * safe.
4
+ */
5
+ export type Scalar = number | string | boolean | null;
@@ -0,0 +1 @@
1
+ export type SignDisplay = "auto" | "always" | "exceptZero" | "negative" | "never";
@@ -0,0 +1 @@
1
+ export type SimpleDatetimeFormat = "full" | "long" | "medium" | "short" | "disabled";
@@ -0,0 +1,6 @@
1
+ import type { SimpleDatetimeFormat } from "./SimpleDatetimeFormat.js";
2
+ export type SimpleDatetimeStyleConfig = {
3
+ timeZone?: string | null;
4
+ dateStyle?: SimpleDatetimeFormat;
5
+ timeStyle?: SimpleDatetimeFormat;
6
+ };
@@ -0,0 +1,2 @@
1
+ import type { SortDir } from "./SortDir.js";
2
+ export type Sort = [string, SortDir];
@@ -0,0 +1 @@
1
+ export type SortDir = "none" | "desc" | "asc" | "col desc" | "col asc" | "desc abs" | "asc abs" | "col desc abs" | "col asc abs";
@@ -0,0 +1 @@
1
+ export type StringColorMode = "none" | "foreground" | "background" | "series";
@@ -0,0 +1 @@
1
+ export type TrailingZeroDisplay = "auto" | "stripIfInteger";
@@ -0,0 +1 @@
1
+ export type UseGrouping = "always" | "auto" | "min2" | boolean;
@@ -0,0 +1,102 @@
1
+ import type { Aggregate } from "./Aggregate.js";
2
+ import type { ColumnConfigValues } from "./ColumnConfigValues.js";
3
+ import type { Expressions } from "./Expressions.js";
4
+ import type { Filter } from "./Filter.js";
5
+ import type { FilterReducer } from "./FilterReducer.js";
6
+ import type { OptionalUpdate } from "./OptionalUpdate.js";
7
+ import type { PluginConfig } from "./PluginConfig.js";
8
+ import type { Sort } from "./Sort.js";
9
+ export type ViewerConfigUpdate = {
10
+ version?: OptionalUpdate<string>;
11
+ plugin?: OptionalUpdate<string>;
12
+ title?: OptionalUpdate<string>;
13
+ theme?: OptionalUpdate<string>;
14
+ settings?: OptionalUpdate<boolean>;
15
+ plugin_config?: PluginConfig | null;
16
+ columns_config?: OptionalUpdate<{
17
+ [key in string]?: ColumnConfigValues;
18
+ }>;
19
+ /**
20
+ * A group by _groups_ the dataset by the unique values of each column used
21
+ * as a group by - a close analogue in SQL to the `GROUP BY` statement.
22
+ * The underlying dataset is aggregated to show the values belonging to
23
+ * each group, and a total row is calculated for each group, showing
24
+ * the currently selected aggregated value (e.g. `sum`) of the column.
25
+ * Group by are useful for hierarchies, categorizing data and
26
+ * attributing values, i.e. showing the number of units sold based on
27
+ * State and City. In Perspective, group by are represented as an array
28
+ * of string column names to pivot, are applied in the order provided;
29
+ * For example, a group by of `["State", "City", "Postal Code"]` shows
30
+ * the values for each Postal Code, which are grouped by City,
31
+ * which are in turn grouped by State.
32
+ */
33
+ group_by?: Array<string>;
34
+ /**
35
+ * A split by _splits_ the dataset by the unique values of each column used
36
+ * as a split by. The underlying dataset is not aggregated, and a new
37
+ * column is created for each unique value of the split by. Each newly
38
+ * created column contains the parts of the dataset that correspond to
39
+ * the column header, i.e. a `View` that has `["State"]` as its split
40
+ * by will have a new column for each state. In Perspective, Split By
41
+ * are represented as an array of string column names to pivot.
42
+ */
43
+ split_by?: Array<string>;
44
+ /**
45
+ * The `columns` property specifies which columns should be included in the
46
+ * [`crate::View`]'s output. This allows users to show or hide a specific
47
+ * subset of columns, as well as control the order in which columns
48
+ * appear to the user. This is represented in Perspective as an array
49
+ * of string column names.
50
+ */
51
+ columns?: Array<string | null>;
52
+ /**
53
+ * The `filter` property specifies columns on which the query can be
54
+ * filtered, returning rows that pass the specified filter condition.
55
+ * This is analogous to the `WHERE` clause in SQL. There is no limit on
56
+ * the number of columns where `filter` is applied, but the resulting
57
+ * dataset is one that passes all the filter conditions, i.e. the
58
+ * filters are joined with an `AND` condition.
59
+ *
60
+ * Perspective represents `filter` as an array of arrays, with the values
61
+ * of each inner array being a string column name, a string filter
62
+ * operator, and a filter operand in the type of the column.
63
+ */
64
+ filter?: Array<Filter>;
65
+ /**
66
+ * The `sort` property specifies columns on which the query should be
67
+ * sorted, analogous to `ORDER BY` in SQL. A column can be sorted
68
+ * regardless of its data type, and sorts can be applied in ascending
69
+ * or descending order. Perspective represents `sort` as an array of
70
+ * arrays, with the values of each inner array being a string column
71
+ * name and a string sort direction. When `column-pivots` are applied,
72
+ * the additional sort directions `"col asc"` and `"col desc"` will
73
+ * determine the order of pivot columns groups.
74
+ */
75
+ sort?: Array<Sort>;
76
+ /**
77
+ * The `expressions` property specifies _new_ columns in Perspective that
78
+ * are created using existing column values or arbitary scalar values
79
+ * defined within the expression. In `<perspective-viewer>`,
80
+ * expressions are added using the "New Column" button in the side
81
+ * panel.
82
+ */
83
+ expressions?: Expressions;
84
+ /**
85
+ * Aggregates perform a calculation over an entire column, and are
86
+ * displayed when one or more [Group By](#group-by) are applied to the
87
+ * `View`. Aggregates can be specified by the user, or Perspective will
88
+ * use the following sensible default aggregates based on column type:
89
+ *
90
+ * - "sum" for `integer` and `float` columns
91
+ * - "count" for all other columns
92
+ *
93
+ * Perspective provides a selection of aggregate functions that can be
94
+ * applied to columns in the `View` constructor using a dictionary of
95
+ * column name to aggregate function name.
96
+ */
97
+ aggregates?: {
98
+ [key in string]?: Aggregate;
99
+ };
100
+ group_by_depth?: number;
101
+ filter_op?: FilterReducer;
102
+ };
@@ -0,0 +1,3 @@
1
+ export type JsonValue = number | string | boolean | Array<JsonValue> | {
2
+ [key in string]?: JsonValue;
3
+ } | null;