plotjs 0.0.7__tar.gz → 0.0.8__tar.gz

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 (115) hide show
  1. {plotjs-0.0.7 → plotjs-0.0.8}/.github/workflows/tests-python.yaml +2 -0
  2. plotjs-0.0.7/AGENTS.md → plotjs-0.0.8/AGENT.md +16 -10
  3. {plotjs-0.0.7 → plotjs-0.0.8}/LICENSE +1 -1
  4. {plotjs-0.0.7 → plotjs-0.0.8}/PKG-INFO +1 -1
  5. plotjs-0.0.8/docs/developers/svg-parser-reference.md +164 -0
  6. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/CSS-2.html +258 -65
  7. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/CSS.html +258 -65
  8. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/area-natural-disasters.html +258 -65
  9. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/bug.html +258 -65
  10. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/javascript.html +258 -65
  11. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/javascript2.html +258 -65
  12. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/quickstart.html +258 -65
  13. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/quickstart10.html +258 -65
  14. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/quickstart11.html +258 -65
  15. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/quickstart2.html +258 -65
  16. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/quickstart3.html +258 -65
  17. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/quickstart4.html +258 -65
  18. plotjs-0.0.8/docs/iframes/quickstart5.html +1744 -0
  19. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/quickstart6.html +258 -65
  20. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/quickstart7.html +258 -65
  21. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/quickstart8.html +258 -65
  22. {plotjs-0.0.7 → plotjs-0.0.8}/docs/iframes/quickstart9.html +258 -65
  23. plotjs-0.0.8/docs/iframes/random-walk-1.html +39589 -0
  24. plotjs-0.0.8/docs/reference/plotjs.md +1 -0
  25. {plotjs-0.0.7 → plotjs-0.0.8}/justfile +9 -0
  26. {plotjs-0.0.7 → plotjs-0.0.8}/mkdocs.yaml +19 -1
  27. plotjs-0.0.8/plotjs/__init__.py +4 -0
  28. plotjs-0.0.7/plotjs/main.py → plotjs-0.0.8/plotjs/plotjs.py +83 -2
  29. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs/static/plotparser.js +1 -3
  30. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs/static/template.html +20 -8
  31. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs.egg-info/PKG-INFO +1 -1
  32. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs.egg-info/SOURCES.txt +4 -3
  33. {plotjs-0.0.7 → plotjs-0.0.8}/pyproject.toml +1 -1
  34. {plotjs-0.0.7 → plotjs-0.0.8}/tests/test-browser/conftest.py +0 -2
  35. {plotjs-0.0.7 → plotjs-0.0.8}/tests/test-browser/test_interactions.py +134 -2
  36. {plotjs-0.0.7 → plotjs-0.0.8}/tests/test-browser/test_rendering.py +0 -2
  37. plotjs-0.0.8/tests/test-javascript/EdgeCases.test.js +394 -0
  38. plotjs-0.0.8/tests/test-javascript/ParserSelectors.test.js +430 -0
  39. plotjs-0.0.8/tests/test-javascript/ParserSetHover.test.js +576 -0
  40. plotjs-0.0.8/tests/test-javascript/Selection.test.js +219 -0
  41. {plotjs-0.0.7 → plotjs-0.0.8}/tests/test-python/test_main.py +1 -1
  42. plotjs-0.0.8/tests/test-python/test_plotjs.py +358 -0
  43. {plotjs-0.0.7 → plotjs-0.0.8}/uv.lock +1 -1
  44. plotjs-0.0.7/docs/developers/svg-parser-reference.md +0 -123
  45. plotjs-0.0.7/docs/iframes/quickstart5.html +0 -1595
  46. plotjs-0.0.7/docs/iframes/random-walk-1.html +0 -39128
  47. plotjs-0.0.7/docs/reference/plotjs.md +0 -1
  48. plotjs-0.0.7/plotjs/__init__.py +0 -6
  49. plotjs-0.0.7/tests/test-browser/README.md +0 -120
  50. plotjs-0.0.7/tests/test-javascript/ParserSelectors.test.js +0 -50
  51. plotjs-0.0.7/tests/test-javascript/ParserSetHover.test.js +0 -48
  52. plotjs-0.0.7/tests/test-python/test_plotjs.py +0 -145
  53. {plotjs-0.0.7 → plotjs-0.0.8}/.coverage +0 -0
  54. {plotjs-0.0.7 → plotjs-0.0.8}/.gitattributes +0 -0
  55. {plotjs-0.0.7 → plotjs-0.0.8}/.github/workflows/doc.yaml +0 -0
  56. {plotjs-0.0.7 → plotjs-0.0.8}/.github/workflows/lint.yaml +0 -0
  57. {plotjs-0.0.7 → plotjs-0.0.8}/.github/workflows/pypi.yaml +0 -0
  58. {plotjs-0.0.7 → plotjs-0.0.8}/.github/workflows/tests-browser.yaml +0 -0
  59. {plotjs-0.0.7 → plotjs-0.0.8}/.github/workflows/tests-js.yaml +0 -0
  60. {plotjs-0.0.7 → plotjs-0.0.8}/.github/workflows/type.yaml +0 -0
  61. {plotjs-0.0.7 → plotjs-0.0.8}/.gitignore +0 -0
  62. {plotjs-0.0.7 → plotjs-0.0.8}/.pre-commit-config.yaml +0 -0
  63. {plotjs-0.0.7 → plotjs-0.0.8}/README.md +0 -0
  64. {plotjs-0.0.7 → plotjs-0.0.8}/bun.lock +0 -0
  65. {plotjs-0.0.7 → plotjs-0.0.8}/coverage-badge.svg +0 -0
  66. {plotjs-0.0.7 → plotjs-0.0.8}/docs/developers/contributing.md +0 -0
  67. {plotjs-0.0.7 → plotjs-0.0.8}/docs/developers/overview.md +0 -0
  68. {plotjs-0.0.7 → plotjs-0.0.8}/docs/developers/parsing-matplotlib-svg.md +0 -0
  69. {plotjs-0.0.7 → plotjs-0.0.8}/docs/gallery/index.md +0 -0
  70. {plotjs-0.0.7 → plotjs-0.0.8}/docs/gallery/index.qmd +0 -0
  71. {plotjs-0.0.7 → plotjs-0.0.8}/docs/guides/advanced/advanced.py +0 -0
  72. {plotjs-0.0.7 → plotjs-0.0.8}/docs/guides/advanced/index.md +0 -0
  73. {plotjs-0.0.7 → plotjs-0.0.8}/docs/guides/css/CSS.py +0 -0
  74. {plotjs-0.0.7 → plotjs-0.0.8}/docs/guides/css/index.md +0 -0
  75. {plotjs-0.0.7 → plotjs-0.0.8}/docs/guides/embed-graphs/index.md +0 -0
  76. {plotjs-0.0.7 → plotjs-0.0.8}/docs/guides/javascript/index.md +0 -0
  77. {plotjs-0.0.7 → plotjs-0.0.8}/docs/guides/javascript/javascript.py +0 -0
  78. {plotjs-0.0.7 → plotjs-0.0.8}/docs/guides/troubleshooting/index.md +0 -0
  79. {plotjs-0.0.7 → plotjs-0.0.8}/docs/img/how-it-works-1.png +0 -0
  80. {plotjs-0.0.7 → plotjs-0.0.8}/docs/img/how-it-works-2.png +0 -0
  81. {plotjs-0.0.7 → plotjs-0.0.8}/docs/img/overview.png +0 -0
  82. {plotjs-0.0.7 → plotjs-0.0.8}/docs/index.md +0 -0
  83. {plotjs-0.0.7 → plotjs-0.0.8}/docs/index.qmd +0 -0
  84. {plotjs-0.0.7 → plotjs-0.0.8}/docs/index_files/figure-commonmark/cell-3-output-1.png +0 -0
  85. {plotjs-0.0.7 → plotjs-0.0.8}/docs/reference/css.md +0 -0
  86. {plotjs-0.0.7 → plotjs-0.0.8}/docs/reference/datasets.md +0 -0
  87. {plotjs-0.0.7 → plotjs-0.0.8}/docs/reference/javascript.md +0 -0
  88. {plotjs-0.0.7 → plotjs-0.0.8}/docs/static/style.css +0 -0
  89. {plotjs-0.0.7 → plotjs-0.0.8}/docs/stylesheets/style.css +0 -0
  90. {plotjs-0.0.7 → plotjs-0.0.8}/overrides/partials/footer.html +0 -0
  91. {plotjs-0.0.7 → plotjs-0.0.8}/package.json +0 -0
  92. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs/css.py +0 -0
  93. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs/data/__init__.py +0 -0
  94. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs/data/datasets.py +0 -0
  95. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs/data/iris.csv +0 -0
  96. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs/data/mtcars.csv +0 -0
  97. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs/data/titanic.csv +0 -0
  98. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs/javascript.py +0 -0
  99. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs/static/default.css +0 -0
  100. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs/utils.py +0 -0
  101. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs.egg-info/dependency_links.txt +0 -0
  102. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs.egg-info/requires.txt +0 -0
  103. {plotjs-0.0.7 → plotjs-0.0.8}/plotjs.egg-info/top_level.txt +0 -0
  104. {plotjs-0.0.7 → plotjs-0.0.8}/pytest.ini +0 -0
  105. {plotjs-0.0.7 → plotjs-0.0.8}/setup.cfg +0 -0
  106. {plotjs-0.0.7 → plotjs-0.0.8}/tests/test-browser/__init__.py +0 -0
  107. {plotjs-0.0.7 → plotjs-0.0.8}/tests/test-python/__init__.py +0 -0
  108. {plotjs-0.0.7 → plotjs-0.0.8}/tests/test-python/static/script.js +0 -0
  109. {plotjs-0.0.7 → plotjs-0.0.8}/tests/test-python/static/script2.js +0 -0
  110. {plotjs-0.0.7 → plotjs-0.0.8}/tests/test-python/static/style-invalid.css +0 -0
  111. {plotjs-0.0.7 → plotjs-0.0.8}/tests/test-python/static/style.css +0 -0
  112. {plotjs-0.0.7 → plotjs-0.0.8}/tests/test-python/test_css.py +0 -0
  113. {plotjs-0.0.7 → plotjs-0.0.8}/tests/test-python/test_data.py +0 -0
  114. {plotjs-0.0.7 → plotjs-0.0.8}/tests/test-python/test_js.py +0 -0
  115. {plotjs-0.0.7 → plotjs-0.0.8}/tests/test-python/test_other_utils.py +0 -0
@@ -28,3 +28,5 @@ jobs:
28
28
 
29
29
  - name: Run unit tests (excluding browser tests)
30
30
  run: uv run pytest tests/test-python/ -v
31
+ env:
32
+ MPLBACKEND: Agg
@@ -12,17 +12,23 @@ PlotJS is a Python package that transforms static matplotlib charts into interac
12
12
  Matplotlib Figure → SVG Export (Python) → HTML Template (Jinja2) → Interactive Browser
13
13
  ```
14
14
 
15
- ### Workflow:
16
-
17
15
  1. **Python (PlotJS class):** Captures matplotlib figure as SVG string, collects tooltip/styling metadata
18
16
  2. **Jinja2 Template:** Injects SVG + CSS + JavaScript parser + configuration into HTML
19
17
  3. **Browser (PlotSVGParser):** Parses SVG structure to identify plot elements, attaches hover interactivity
20
18
 
19
+ ## How to run command
20
+
21
+ Always use `uv` and/or `just` for running commands:
22
+
23
+ - `uv run pytest tests/test-python`
24
+ - `uv run pytest tests/test-python`
25
+ - `uv run python -c "import matplotlib"`
26
+
21
27
  ## Key Components
22
28
 
23
29
  ### Python Module (`/plotjs/`)
24
30
 
25
- **`main.py`** - Core `PlotJS` class with method chaining
31
+ **`plotjs.py`** - Core `PlotJS` class with method chaining
26
32
 
27
33
  - `__init__(fig, **savefig_kws)` - Converts matplotlib figure to SVG
28
34
  - `add_tooltip(labels, groups, hover_nearest, ax)` - Configure hover tooltips
@@ -125,17 +131,17 @@ Optional `seed` parameter ensures deterministic UUID generation for consistent o
125
131
  ```
126
132
  plotjs/
127
133
  ├── __init__.py # Package exports
128
- ├── main.py # Core PlotJS class (330 lines)
129
- ├── css.py # CSS utilities (100 lines)
130
- ├── javascript.py # JavaScript utilities (23 lines)
131
- ├── utils.py # Internal helpers (43 lines)
134
+ ├── plotjs.py # Core PlotJS class
135
+ ├── css.py # CSS utilities
136
+ ├── javascript.py # JavaScript utilities
137
+ ├── utils.py # Internal helpers
132
138
  ├── data/
133
139
  │ ├── datasets.py # Sample datasets with Narwhals
134
140
  │ └── *.csv # Data files
135
141
  └── static/
136
- ├── template.html # Jinja2 HTML template (104 lines)
137
- ├── plotparser.js # SVG parser class (229 lines)
138
- └── default.css # Default styles (41 lines)
142
+ ├── template.html # Jinja2 HTML template
143
+ ├── plotparser.js # SVG parser class
144
+ └── default.css # Default styles
139
145
 
140
146
  tests/
141
147
  ├── test-python/ # Python unit tests
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Joseph Barbier
3
+ Copyright (c) 2026 Joseph Barbier
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plotjs
3
- Version: 0.0.7
3
+ Version: 0.0.8
4
4
  Summary: Turn static matplotlib charts into interactive web visualizations
5
5
  Author-email: Joseph Barbier <joseph.barbierdarnal@mail.com>
6
6
  License-Expression: MIT
@@ -0,0 +1,164 @@
1
+ ## Classes
2
+
3
+ <dl>
4
+ <dt><a href="#Selection">Selection</a></dt>
5
+ <dd><p>Lightweight Selection wrapper that mimics d3-selection&#39;s chainable API.
6
+ Provides basic DOM manipulation methods for working with SVG elements.</p>
7
+ </dd>
8
+ </dl>
9
+
10
+ ## Functions
11
+
12
+ <dl>
13
+ <dt><a href="#select">select(selector)</a> ⇒ <code><a href="#Selection">Selection</a></code></dt>
14
+ <dd><p>Create a Selection from a DOM element or selector string.</p>
15
+ </dd>
16
+ <dt><a href="#getPointerPosition">getPointerPosition(event, svgElement)</a> ⇒ <code>Array.&lt;number&gt;</code></dt>
17
+ <dd><p>Get mouse position relative to an SVG element.</p>
18
+ </dd>
19
+ <dt><a href="#findBars">findBars(svg, axes_class)</a> ⇒ <code><a href="#Selection">Selection</a></code></dt>
20
+ <dd><p>Find bar elements (<code>patch</code> groups with clipping) inside a given axes.</p>
21
+ </dd>
22
+ <dt><a href="#findPoints">findPoints(svg, axes_class, tooltip_groups)</a> ⇒ <code><a href="#Selection">Selection</a></code></dt>
23
+ <dd><p>Find scatter plot points inside a given axes.
24
+ Handles both <code>&lt;use&gt;</code> and <code>&lt;path&gt;</code> fallback cases,
25
+ and assigns <code>data-group</code> attributes based on tooltip groups.</p>
26
+ </dd>
27
+ <dt><a href="#findLines">findLines(svg, axes_class)</a> ⇒ <code><a href="#Selection">Selection</a></code></dt>
28
+ <dd><p>Find line elements (<code>line2d</code> paths) inside a given axes,
29
+ excluding axis grid lines.</p>
30
+ </dd>
31
+ <dt><a href="#findAreas">findAreas(svg, axes_class)</a> ⇒ <code><a href="#Selection">Selection</a></code></dt>
32
+ <dd><p>Find filled area elements (<code>FillBetweenPolyCollection</code> paths) inside a given axes.</p>
33
+ </dd>
34
+ <dt><a href="#nearestElementFromMouse">nearestElementFromMouse(mouseX, mouseY, elements)</a> ⇒ <code>Element</code> | <code>null</code></dt>
35
+ <dd><p>Compute the nearest element to the mouse cursor from a set of elements.
36
+ Uses bounding box centers for distance.
37
+ This function is used when the <code>hover_nearest</code> argument is true.</p>
38
+ </dd>
39
+ <dt><a href="#setHoverEffect">setHoverEffect(plot_element, axes_class, tooltip_labels, tooltip_groups, show_tooltip, hover_nearest)</a></dt>
40
+ <dd><p>Attach hover interaction and tooltip display to plot elements.
41
+ Can highlight nearest element (if enabled) or hovered element directly.</p>
42
+ </dd>
43
+ </dl>
44
+
45
+ <a name="Selection"></a>
46
+
47
+ ## Selection
48
+ Lightweight Selection wrapper that mimics d3-selection's chainable API.
49
+ Provides basic DOM manipulation methods for working with SVG elements.
50
+
51
+ **Kind**: global class
52
+ <a name="select"></a>
53
+
54
+ ## select(selector) ⇒ [<code>Selection</code>](#Selection)
55
+ Create a Selection from a DOM element or selector string.
56
+
57
+ **Kind**: global function
58
+ **Returns**: [<code>Selection</code>](#Selection) - New Selection instance
59
+
60
+ | Param | Type | Description |
61
+ | --- | --- | --- |
62
+ | selector | <code>string</code> \| <code>Element</code> | CSS selector string or DOM element |
63
+
64
+ <a name="getPointerPosition"></a>
65
+
66
+ ## getPointerPosition(event, svgElement) ⇒ <code>Array.&lt;number&gt;</code>
67
+ Get mouse position relative to an SVG element.
68
+
69
+ **Kind**: global function
70
+ **Returns**: <code>Array.&lt;number&gt;</code> - [x, y] coordinates relative to the SVG
71
+
72
+ | Param | Type | Description |
73
+ | --- | --- | --- |
74
+ | event | <code>MouseEvent</code> | The mouse event |
75
+ | svgElement | <code>Element</code> \| [<code>Selection</code>](#Selection) | The SVG element or Selection |
76
+
77
+ <a name="findBars"></a>
78
+
79
+ ## findBars(svg, axes_class) ⇒ [<code>Selection</code>](#Selection)
80
+ Find bar elements (`patch` groups with clipping) inside a given axes.
81
+
82
+ **Kind**: global function
83
+ **Returns**: [<code>Selection</code>](#Selection) - Selection of bar elements.
84
+
85
+ | Param | Type | Description |
86
+ | --- | --- | --- |
87
+ | svg | [<code>Selection</code>](#Selection) | Selection of the SVG element. |
88
+ | axes_class | <code>string</code> | ID of the axes group (e.g. "axes_1"). |
89
+
90
+ <a name="findPoints"></a>
91
+
92
+ ## findPoints(svg, axes_class, tooltip_groups) ⇒ [<code>Selection</code>](#Selection)
93
+ Find scatter plot points inside a given axes.
94
+ Handles both `<use>` and `<path>` fallback cases,
95
+ and assigns `data-group` attributes based on tooltip groups.
96
+
97
+ **Kind**: global function
98
+ **Returns**: [<code>Selection</code>](#Selection) - Selection of point elements.
99
+
100
+ | Param | Type | Description |
101
+ | --- | --- | --- |
102
+ | svg | [<code>Selection</code>](#Selection) | Selection of the SVG element. |
103
+ | axes_class | <code>string</code> | ID of the axes group (e.g. "axes_1"). |
104
+ | tooltip_groups | <code>Array.&lt;string&gt;</code> | Group identifiers for tooltips, parallel to points. |
105
+
106
+ <a name="findLines"></a>
107
+
108
+ ## findLines(svg, axes_class) ⇒ [<code>Selection</code>](#Selection)
109
+ Find line elements (`line2d` paths) inside a given axes,
110
+ excluding axis grid lines.
111
+
112
+ **Kind**: global function
113
+ **Returns**: [<code>Selection</code>](#Selection) - Selection of line elements.
114
+
115
+ | Param | Type | Description |
116
+ | --- | --- | --- |
117
+ | svg | [<code>Selection</code>](#Selection) | Selection of the SVG element. |
118
+ | axes_class | <code>string</code> | ID of the axes group. |
119
+
120
+ <a name="findAreas"></a>
121
+
122
+ ## findAreas(svg, axes_class) ⇒ [<code>Selection</code>](#Selection)
123
+ Find filled area elements (`FillBetweenPolyCollection` paths) inside a given axes.
124
+
125
+ **Kind**: global function
126
+ **Returns**: [<code>Selection</code>](#Selection) - Selection of area elements.
127
+
128
+ | Param | Type | Description |
129
+ | --- | --- | --- |
130
+ | svg | [<code>Selection</code>](#Selection) | Selection of the SVG element. |
131
+ | axes_class | <code>string</code> | ID of the axes group. |
132
+
133
+ <a name="nearestElementFromMouse"></a>
134
+
135
+ ## nearestElementFromMouse(mouseX, mouseY, elements) ⇒ <code>Element</code> \| <code>null</code>
136
+ Compute the nearest element to the mouse cursor from a set of elements.
137
+ Uses bounding box centers for distance.
138
+ This function is used when the `hover_nearest` argument is true.
139
+
140
+ **Kind**: global function
141
+ **Returns**: <code>Element</code> \| <code>null</code> - The nearest DOM element or `null`.
142
+
143
+ | Param | Type | Description |
144
+ | --- | --- | --- |
145
+ | mouseX | <code>number</code> | X coordinate of the mouse relative to SVG. |
146
+ | mouseY | <code>number</code> | Y coordinate of the mouse relative to SVG. |
147
+ | elements | [<code>Selection</code>](#Selection) | Selection of candidate elements. |
148
+
149
+ <a name="setHoverEffect"></a>
150
+
151
+ ## setHoverEffect(plot_element, axes_class, tooltip_labels, tooltip_groups, show_tooltip, hover_nearest)
152
+ Attach hover interaction and tooltip display to plot elements.
153
+ Can highlight nearest element (if enabled) or hovered element directly.
154
+
155
+ **Kind**: global function
156
+
157
+ | Param | Type | Description |
158
+ | --- | --- | --- |
159
+ | plot_element | [<code>Selection</code>](#Selection) | Selection of plot elements (points, lines, etc.). |
160
+ | axes_class | <code>string</code> | ID of the axes group. |
161
+ | tooltip_labels | <code>Array.&lt;string&gt;</code> | Tooltip labels for each element. |
162
+ | tooltip_groups | <code>Array.&lt;string&gt;</code> | Group identifiers for each element. |
163
+ | show_tooltip | <code>&quot;block&quot;</code> \| <code>&quot;none&quot;</code> | Whether to display tooltips. |
164
+ | hover_nearest | <code>boolean</code> | If true, highlight nearest element instead of hovered one. |