@unovis/ts 1.3.0-alpha.2 → 1.3.0-beta.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 (245) hide show
  1. package/components/area/config.d.ts +6 -10
  2. package/components/area/config.js +3 -12
  3. package/components/area/config.js.map +1 -1
  4. package/components/area/index.d.ts +5 -6
  5. package/components/area/index.js +10 -9
  6. package/components/area/index.js.map +1 -1
  7. package/components/axis/config.d.ts +3 -27
  8. package/components/axis/config.js +3 -30
  9. package/components/axis/config.js.map +1 -1
  10. package/components/axis/index.d.ts +4 -3
  11. package/components/axis/index.js +7 -4
  12. package/components/axis/index.js.map +1 -1
  13. package/components/brush/config.d.ts +2 -12
  14. package/components/brush/config.js +11 -20
  15. package/components/brush/config.js.map +1 -1
  16. package/components/brush/index.d.ts +4 -3
  17. package/components/brush/index.js +4 -3
  18. package/components/brush/index.js.map +1 -1
  19. package/components/bullet-legend/config.d.ts +5 -11
  20. package/components/bullet-legend/config.js +12 -13
  21. package/components/bullet-legend/config.js.map +1 -1
  22. package/components/bullet-legend/index.d.ts +4 -3
  23. package/components/bullet-legend/index.js +11 -18
  24. package/components/bullet-legend/index.js.map +1 -1
  25. package/components/bullet-legend/modules/shape.d.ts +6 -0
  26. package/components/bullet-legend/modules/shape.js +58 -0
  27. package/components/bullet-legend/modules/shape.js.map +1 -0
  28. package/components/bullet-legend/style.js +6 -9
  29. package/components/bullet-legend/style.js.map +1 -1
  30. package/components/bullet-legend/types.d.ts +5 -0
  31. package/components/bullet-legend/types.js +7 -0
  32. package/components/bullet-legend/types.js.map +1 -1
  33. package/components/chord-diagram/config.d.ts +7 -23
  34. package/components/chord-diagram/config.js +3 -22
  35. package/components/chord-diagram/config.js.map +1 -1
  36. package/components/chord-diagram/index.d.ts +4 -3
  37. package/components/chord-diagram/index.js +7 -6
  38. package/components/chord-diagram/index.js.map +1 -1
  39. package/components/chord-diagram/modules/label.d.ts +3 -3
  40. package/components/chord-diagram/modules/label.js +1 -1
  41. package/components/chord-diagram/modules/label.js.map +1 -1
  42. package/components/chord-diagram/modules/link.d.ts +2 -2
  43. package/components/chord-diagram/modules/link.js.map +1 -1
  44. package/components/chord-diagram/modules/node.d.ts +2 -2
  45. package/components/chord-diagram/modules/node.js.map +1 -1
  46. package/components/chord-diagram/types.d.ts +3 -2
  47. package/components/chord-diagram/types.js.map +1 -1
  48. package/components/crosshair/config.d.ts +6 -14
  49. package/components/crosshair/config.js +3 -16
  50. package/components/crosshair/config.js.map +1 -1
  51. package/components/crosshair/index.d.ts +4 -3
  52. package/components/crosshair/index.js +4 -3
  53. package/components/crosshair/index.js.map +1 -1
  54. package/components/donut/config.d.ts +2 -19
  55. package/components/donut/config.js +5 -24
  56. package/components/donut/config.js.map +1 -1
  57. package/components/donut/index.d.ts +4 -3
  58. package/components/donut/index.js +5 -4
  59. package/components/donut/index.js.map +1 -1
  60. package/components/donut/modules/arc.d.ts +3 -3
  61. package/components/donut/modules/arc.js.map +1 -1
  62. package/components/flow-legend/config.d.ts +1 -11
  63. package/components/flow-legend/config.js +11 -16
  64. package/components/flow-legend/config.js.map +1 -1
  65. package/components/flow-legend/index.d.ts +4 -3
  66. package/components/flow-legend/index.js +5 -2
  67. package/components/flow-legend/index.js.map +1 -1
  68. package/components/free-brush/config.d.ts +2 -12
  69. package/components/free-brush/config.js +11 -20
  70. package/components/free-brush/config.js.map +1 -1
  71. package/components/free-brush/index.d.ts +4 -3
  72. package/components/free-brush/index.js +6 -5
  73. package/components/free-brush/index.js.map +1 -1
  74. package/components/graph/config.d.ts +3 -75
  75. package/components/graph/config.js +12 -78
  76. package/components/graph/config.js.map +1 -1
  77. package/components/graph/index.d.ts +8 -7
  78. package/components/graph/index.js +4 -3
  79. package/components/graph/index.js.map +1 -1
  80. package/components/graph/modules/layout.d.ts +7 -7
  81. package/components/graph/modules/layout.js.map +1 -1
  82. package/components/graph/modules/link/helper.d.ts +5 -5
  83. package/components/graph/modules/link/helper.js.map +1 -1
  84. package/components/graph/modules/link/index.d.ts +6 -6
  85. package/components/graph/modules/link/index.js.map +1 -1
  86. package/components/graph/modules/node/index.d.ts +6 -6
  87. package/components/graph/modules/node/index.js +2 -2
  88. package/components/graph/modules/node/index.js.map +1 -1
  89. package/components/graph/modules/panel/helper.d.ts +4 -4
  90. package/components/graph/modules/panel/helper.js.map +1 -1
  91. package/components/graph/modules/panel/index.d.ts +3 -3
  92. package/components/graph/modules/panel/index.js.map +1 -1
  93. package/components/grouped-bar/config.d.ts +5 -13
  94. package/components/grouped-bar/config.js +5 -16
  95. package/components/grouped-bar/config.js.map +1 -1
  96. package/components/grouped-bar/index.d.ts +4 -3
  97. package/components/grouped-bar/index.js +4 -3
  98. package/components/grouped-bar/index.js.map +1 -1
  99. package/components/leaflet-flow-map/config.d.ts +2 -16
  100. package/components/leaflet-flow-map/config.js +3 -21
  101. package/components/leaflet-flow-map/config.js.map +1 -1
  102. package/components/leaflet-flow-map/index.d.ts +4 -3
  103. package/components/leaflet-flow-map/index.js +3 -2
  104. package/components/leaflet-flow-map/index.js.map +1 -1
  105. package/components/leaflet-map/config.d.ts +4 -59
  106. package/components/leaflet-map/config.js +23 -67
  107. package/components/leaflet-map/config.js.map +1 -1
  108. package/components/leaflet-map/index.d.ts +4 -3
  109. package/components/leaflet-map/index.js +4 -3
  110. package/components/leaflet-map/index.js.map +1 -1
  111. package/components/leaflet-map/modules/map.d.ts +3 -3
  112. package/components/leaflet-map/modules/map.js.map +1 -1
  113. package/components/leaflet-map/modules/utils.d.ts +4 -4
  114. package/components/leaflet-map/modules/utils.js +6 -2
  115. package/components/leaflet-map/modules/utils.js.map +1 -1
  116. package/components/leaflet-map/renderer/mapboxgl-layer.d.ts +2 -2
  117. package/components/leaflet-map/renderer/mapboxgl-layer.js.map +1 -1
  118. package/components/line/config.d.ts +6 -11
  119. package/components/line/config.js +3 -13
  120. package/components/line/config.js.map +1 -1
  121. package/components/line/index.d.ts +4 -3
  122. package/components/line/index.js +5 -4
  123. package/components/line/index.js.map +1 -1
  124. package/components/nested-donut/config.d.ts +2 -21
  125. package/components/nested-donut/config.js +3 -24
  126. package/components/nested-donut/config.js.map +1 -1
  127. package/components/nested-donut/index.d.ts +4 -3
  128. package/components/nested-donut/index.js +15 -12
  129. package/components/nested-donut/index.js.map +1 -1
  130. package/components/nested-donut/modules/arc.d.ts +3 -3
  131. package/components/nested-donut/modules/arc.js +2 -1
  132. package/components/nested-donut/modules/arc.js.map +1 -1
  133. package/components/nested-donut/modules/label.d.ts +2 -2
  134. package/components/nested-donut/modules/label.js +9 -6
  135. package/components/nested-donut/modules/label.js.map +1 -1
  136. package/components/nested-donut/types.d.ts +1 -0
  137. package/components/nested-donut/types.js.map +1 -1
  138. package/components/sankey/config.d.ts +2 -47
  139. package/components/sankey/config.js +10 -57
  140. package/components/sankey/config.js.map +1 -1
  141. package/components/sankey/index.d.ts +4 -3
  142. package/components/sankey/index.js +3 -2
  143. package/components/sankey/index.js.map +1 -1
  144. package/components/sankey/modules/label.d.ts +7 -7
  145. package/components/sankey/modules/label.js.map +1 -1
  146. package/components/sankey/modules/link.d.ts +2 -2
  147. package/components/sankey/modules/link.js.map +1 -1
  148. package/components/sankey/modules/node.d.ts +7 -7
  149. package/components/sankey/modules/node.js +1 -1
  150. package/components/sankey/modules/node.js.map +1 -1
  151. package/components/scatter/config.d.ts +4 -16
  152. package/components/scatter/config.js +5 -19
  153. package/components/scatter/config.js.map +1 -1
  154. package/components/scatter/index.d.ts +4 -3
  155. package/components/scatter/index.js +5 -5
  156. package/components/scatter/index.js.map +1 -1
  157. package/components/scatter/modules/point.d.ts +2 -2
  158. package/components/scatter/modules/point.js.map +1 -1
  159. package/components/scatter/modules/utils.d.ts +2 -2
  160. package/components/scatter/modules/utils.js.map +1 -1
  161. package/components/stacked-bar/config.d.ts +5 -13
  162. package/components/stacked-bar/config.js +5 -16
  163. package/components/stacked-bar/config.js.map +1 -1
  164. package/components/stacked-bar/index.d.ts +4 -3
  165. package/components/stacked-bar/index.js +4 -3
  166. package/components/stacked-bar/index.js.map +1 -1
  167. package/components/timeline/config.d.ts +5 -16
  168. package/components/timeline/config.js +9 -21
  169. package/components/timeline/config.js.map +1 -1
  170. package/components/timeline/index.d.ts +4 -3
  171. package/components/timeline/index.js +4 -3
  172. package/components/timeline/index.js.map +1 -1
  173. package/components/tooltip/config.d.ts +1 -15
  174. package/components/tooltip/config.js +12 -16
  175. package/components/tooltip/config.js.map +1 -1
  176. package/components/tooltip/index.d.ts +4 -3
  177. package/components/tooltip/index.js +5 -3
  178. package/components/tooltip/index.js.map +1 -1
  179. package/components/topojson-map/config.d.ts +4 -36
  180. package/components/topojson-map/config.js +3 -38
  181. package/components/topojson-map/config.js.map +1 -1
  182. package/components/topojson-map/index.d.ts +4 -3
  183. package/components/topojson-map/index.js +4 -4
  184. package/components/topojson-map/index.js.map +1 -1
  185. package/components/vis-controls/config.d.ts +1 -5
  186. package/components/vis-controls/config.js +6 -9
  187. package/components/vis-controls/config.js.map +1 -1
  188. package/components/vis-controls/index.d.ts +3 -2
  189. package/components/vis-controls/index.js +5 -2
  190. package/components/vis-controls/index.js.map +1 -1
  191. package/components/xy-labels/config.d.ts +4 -16
  192. package/components/xy-labels/config.js +5 -20
  193. package/components/xy-labels/config.js.map +1 -1
  194. package/components/xy-labels/index.d.ts +4 -3
  195. package/components/xy-labels/index.js +3 -2
  196. package/components/xy-labels/index.js.map +1 -1
  197. package/components/xy-labels/modules/label.d.ts +3 -3
  198. package/components/xy-labels/modules/label.js +1 -1
  199. package/components/xy-labels/modules/label.js.map +1 -1
  200. package/containers/single-container/config.d.ts +2 -4
  201. package/containers/single-container/config.js +3 -8
  202. package/containers/single-container/config.js.map +1 -1
  203. package/containers/single-container/index.d.ts +4 -3
  204. package/containers/single-container/index.js +2 -2
  205. package/containers/single-container/index.js.map +1 -1
  206. package/containers/xy-container/config.d.ts +2 -22
  207. package/containers/xy-container/config.js +3 -26
  208. package/containers/xy-container/config.js.map +1 -1
  209. package/containers/xy-container/index.d.ts +3 -2
  210. package/containers/xy-container/index.js +2 -2
  211. package/containers/xy-container/index.js.map +1 -1
  212. package/core/component/config.d.ts +1 -6
  213. package/core/component/config.js +6 -12
  214. package/core/component/config.js.map +1 -1
  215. package/core/component/index.d.ts +7 -5
  216. package/core/component/index.js +8 -7
  217. package/core/component/index.js.map +1 -1
  218. package/core/container/config.d.ts +1 -21
  219. package/core/container/config.js +21 -25
  220. package/core/container/config.js.map +1 -1
  221. package/core/container/index.d.ts +5 -4
  222. package/core/container/index.js +4 -3
  223. package/core/container/index.js.map +1 -1
  224. package/core/xy-component/config.d.ts +2 -10
  225. package/core/xy-component/config.js +7 -16
  226. package/core/xy-component/config.js.map +1 -1
  227. package/core/xy-component/index.d.ts +5 -4
  228. package/core/xy-component/index.js +2 -0
  229. package/core/xy-component/index.js.map +1 -1
  230. package/data-models/map-graph.d.ts +1 -1
  231. package/data-models/map-graph.js +1 -1
  232. package/data-models/map-graph.js.map +1 -1
  233. package/index.js +1 -0
  234. package/index.js.map +1 -1
  235. package/package.json +1 -1
  236. package/types/accessor.d.ts +1 -1
  237. package/types.js +1 -1
  238. package/utils/color.d.ts +7 -3
  239. package/utils/color.js +18 -2
  240. package/utils/color.js.map +1 -1
  241. package/utils/data.d.ts +1 -1
  242. package/utils/data.js.map +1 -1
  243. package/core/config/index.d.ts +0 -3
  244. package/core/config/index.js +0 -16
  245. package/core/config/index.js.map +0 -1
@@ -1,30 +1,26 @@
1
- import { Config } from '../config/index.js';
2
1
  import { Sizing } from '../../types/component.js';
3
2
 
4
3
  // Core
5
- class ContainerConfig extends Config {
6
- constructor() {
7
- super(...arguments);
8
- this.duration = undefined;
9
- this.margin = {
10
- top: 0,
11
- bottom: 0,
12
- left: 0,
13
- right: 0,
14
- };
15
- this.padding = {
16
- top: 0,
17
- bottom: 0,
18
- left: 0,
19
- right: 0,
20
- };
21
- this.sizing = Sizing.Fit;
22
- this.width = undefined;
23
- this.height = undefined;
24
- this.svgDefs = undefined;
25
- this.ariaLabel = undefined;
26
- }
27
- }
4
+ const ContainerDefaultConfig = {
5
+ duration: undefined,
6
+ margin: {
7
+ top: 0,
8
+ bottom: 0,
9
+ left: 0,
10
+ right: 0,
11
+ },
12
+ padding: {
13
+ top: 0,
14
+ bottom: 0,
15
+ left: 0,
16
+ right: 0,
17
+ },
18
+ sizing: Sizing.Fit,
19
+ width: undefined,
20
+ height: undefined,
21
+ svgDefs: undefined,
22
+ ariaLabel: undefined,
23
+ };
28
24
 
29
- export { ContainerConfig };
25
+ export { ContainerDefaultConfig };
30
26
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../src/core/container/config.ts"],"sourcesContent":["// Core\nimport { Config } from 'core/config'\n\n// Types\nimport { Sizing } from 'types/component'\nimport { Spacing } from 'types/spacing'\n\nexport interface ContainerConfigInterface {\n /** Animation duration of all the components within the container. Default: `undefined` */\n duration?: number;\n /** Margins. Default: `{ top: 0, bottom: 0, left: 0, right: 0 }` */\n margin?: Spacing;\n /** Padding. Default: `{ top: 0, bottom: 0, left: 0, right: 0 }` */\n padding?: Spacing;\n /** Defines whether components should fit into the container or the container should expand to fit to the component's size. Default: `Sizing.Fit` */\n sizing?: Sizing | string;\n /** Width in pixels or in CSS units.\n * Percentage units `\"%\"` are not supported here. If you want to set `width` as a percentage, do it via `style`\n * of the corresponding DOM element.\n * By default, Container automatically fits to the size of the parent element.\n * Default: `undefined`\n */\n width?: number | string;\n /** Height in pixels or in CSS units.\n * Percentage units `\"%\"` are not supported here. If you want to set `height` as a percentage, do it via `style`\n * of the corresponding DOM element.\n * By default, Container automatically fits to the size of the parent element.\n * Default: `undefined`\n */\n height?: number | string;\n /** Custom SVG defs available to all the components within the container. Default: `undefined`. */\n svgDefs?: string;\n /** Alternative text description of the chart for accessibility purposes. It will be applied as an\n * `aria-label` attribute to the div element containing your chart. Default: `undefined`.\n */\n ariaLabel?: string | null | undefined;\n}\n\nexport class ContainerConfig extends Config implements ContainerConfigInterface {\n duration = undefined\n margin = {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }\n\n padding = {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }\n\n sizing = Sizing.Fit\n width = undefined\n height = undefined\n\n svgDefs = undefined\n ariaLabel = undefined\n}\n"],"names":[],"mappings":";;;AAAA;AAsCM,MAAO,eAAgB,SAAQ,MAAM,CAAA;AAA3C,IAAA,WAAA,GAAA;;QACE,IAAQ,CAAA,QAAA,GAAG,SAAS,CAAA;AACpB,QAAA,IAAA,CAAA,MAAM,GAAG;AACP,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,KAAK,EAAE,CAAC;SACT,CAAA;AAED,QAAA,IAAA,CAAA,OAAO,GAAG;AACR,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,KAAK,EAAE,CAAC;SACT,CAAA;AAED,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA;QACnB,IAAK,CAAA,KAAA,GAAG,SAAS,CAAA;QACjB,IAAM,CAAA,MAAA,GAAG,SAAS,CAAA;QAElB,IAAO,CAAA,OAAA,GAAG,SAAS,CAAA;QACnB,IAAS,CAAA,SAAA,GAAG,SAAS,CAAA;KACtB;AAAA;;;;"}
1
+ {"version":3,"file":"config.js","sources":["../../../src/core/container/config.ts"],"sourcesContent":["// Core\n\n// Types\nimport { Sizing } from 'types/component'\nimport { Spacing } from 'types/spacing'\n\nexport interface ContainerConfigInterface {\n /** Animation duration of all the components within the container. Default: `undefined` */\n duration?: number;\n /** Margins. Default: `{ top: 0, bottom: 0, left: 0, right: 0 }` */\n margin?: Spacing;\n /** Padding. Default: `{ top: 0, bottom: 0, left: 0, right: 0 }` */\n padding?: Spacing;\n /** Defines whether components should fit into the container or the container should expand to fit to the component's size. Default: `Sizing.Fit` */\n sizing?: Sizing | string;\n /** Width in pixels or in CSS units.\n * Percentage units `\"%\"` are not supported here. If you want to set `width` as a percentage, do it via `style`\n * of the corresponding DOM element.\n * By default, Container automatically fits to the size of the parent element.\n * Default: `undefined`\n */\n width?: number | string;\n /** Height in pixels or in CSS units.\n * Percentage units `\"%\"` are not supported here. If you want to set `height` as a percentage, do it via `style`\n * of the corresponding DOM element.\n * By default, Container automatically fits to the size of the parent element.\n * Default: `undefined`\n */\n height?: number | string;\n /** Custom SVG defs available to all the components within the container. Default: `undefined`. */\n svgDefs?: string;\n /** Alternative text description of the chart for accessibility purposes. It will be applied as an\n * `aria-label` attribute to the div element containing your chart. Default: `undefined`.\n */\n ariaLabel?: string | null | undefined;\n}\n\nexport const ContainerDefaultConfig: ContainerConfigInterface = {\n duration: undefined,\n margin: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n },\n\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n },\n\n sizing: Sizing.Fit,\n width: undefined,\n height: undefined,\n\n svgDefs: undefined,\n ariaLabel: undefined,\n}\n"],"names":[],"mappings":";;AAAA;AAqCa,MAAA,sBAAsB,GAA6B;AAC9D,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,CAAC;AACT,KAAA;AAED,IAAA,OAAO,EAAE;AACP,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,CAAC;AACT,KAAA;IAED,MAAM,EAAE,MAAM,CAAC,GAAG;AAClB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,MAAM,EAAE,SAAS;AAEjB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,SAAS,EAAE,SAAS;;;;;"}
@@ -1,10 +1,11 @@
1
1
  import { Selection } from 'd3-selection';
2
- import { ContainerConfig, ContainerConfigInterface } from './config';
2
+ import { ContainerConfigInterface } from './config';
3
3
  export declare class ContainerCore {
4
4
  svg: Selection<SVGSVGElement, unknown, null, undefined>;
5
5
  element: SVGSVGElement;
6
- prevConfig: ContainerConfig;
7
- config: ContainerConfig;
6
+ prevConfig: ContainerConfigInterface;
7
+ config: ContainerConfigInterface;
8
+ protected _defaultConfig: ContainerConfigInterface;
8
9
  protected _container: HTMLElement;
9
10
  protected _requestedAnimationFrame: number;
10
11
  protected _isFirstRender: boolean;
@@ -15,7 +16,7 @@ export declare class ContainerCore {
15
16
  updateContainer<T extends ContainerConfigInterface>(config: T): void;
16
17
  protected _preRender(): void;
17
18
  protected _render(duration?: number): void;
18
- render(duration?: any): void;
19
+ render(duration?: number): void;
19
20
  get containerWidth(): number;
20
21
  get containerHeight(): number;
21
22
  get width(): number;
@@ -1,10 +1,12 @@
1
1
  import { select } from 'd3-selection';
2
2
  import { Sizing } from '../../types/component.js';
3
- import { clamp, isEqual } from '../../utils/data.js';
3
+ import { merge, clamp, isEqual } from '../../utils/data.js';
4
4
  import { ResizeObserver } from '../../utils/resize-observer.js';
5
+ import { ContainerDefaultConfig } from './config.js';
5
6
 
6
7
  class ContainerCore {
7
8
  constructor(element) {
9
+ this._defaultConfig = ContainerDefaultConfig;
8
10
  this._isFirstRender = true;
9
11
  this._requestedAnimationFrame = null;
10
12
  this._container = element;
@@ -23,9 +25,8 @@ class ContainerCore {
23
25
  }
24
26
  updateContainer(config) {
25
27
  // eslint-disable-next-line @typescript-eslint/naming-convention
26
- const ConfigModel = this.config.constructor;
27
28
  this.prevConfig = this.config;
28
- this.config = new ConfigModel().init(config);
29
+ this.config = merge(this._defaultConfig, config);
29
30
  }
30
31
  // The `_preRender` step should be used to perform some actions before rendering.
31
32
  // For example, calculating scales, setting component sizes, etc ...
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/core/container/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Types\nimport { Sizing } from 'types/component'\n\n// Utils\nimport { isEqual, clamp } from 'utils/data'\nimport { ResizeObserver } from 'utils/resize-observer'\n\n// Config\nimport { ContainerConfig, ContainerConfigInterface } from './config'\n\nexport class ContainerCore {\n svg: Selection<SVGSVGElement, unknown, null, undefined>\n element: SVGSVGElement\n prevConfig: ContainerConfig\n config: ContainerConfig\n\n protected _container: HTMLElement\n protected _requestedAnimationFrame: number\n protected _isFirstRender = true\n protected _resizeObserver: ResizeObserver | undefined\n private _containerSize: { width: number; height: number }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static DEFAULT_CONTAINER_HEIGHT = 300\n\n constructor (element: HTMLElement) {\n this._requestedAnimationFrame = null\n this._container = element\n\n // Setting `role` attribute to `image` to make the container accessible\n const container = select(this._container)\n container.attr('role', 'figure')\n\n // Create SVG element for visualizations\n this.svg = container.append('svg')\n // We set `display` to `block` because inline elements have an invisible\n // inline space that adds 4px to the height of the container\n .style('display', 'block')\n .attr('xmlns', 'http://www.w3.org/2000/svg')\n .attr('height', ContainerCore.DEFAULT_CONTAINER_HEIGHT) // Overriding default SVG height of 150\n .attr('aria-hidden', true)\n\n this.element = this.svg.node()\n }\n\n public updateContainer<T extends ContainerConfigInterface> (config: T): void {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const ConfigModel = (this.config.constructor as typeof ContainerConfig)\n this.prevConfig = this.config\n this.config = new ConfigModel().init(config)\n }\n\n // The `_preRender` step should be used to perform some actions before rendering.\n // For example, calculating scales, setting component sizes, etc ...\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n protected _preRender (): void {}\n\n // The `_render` step should be used to perform the actual rendering\n protected _render (duration?: number): void {\n const { config } = this\n\n // Add `svgDefs` if provided in the config\n if (config.svgDefs) {\n this.svg.select('.svgDefs').remove()\n this.svg.append('defs').attr('class', 'svgDefs').html(config.svgDefs)\n }\n\n // Apply the `aria-label` attribute\n select(this._container)\n .attr('aria-label', config.ariaLabel)\n\n this._isFirstRender = false\n }\n\n // Warning: Some Containers (i.e. Single Container) may override this method, so if you introduce any changes here,\n // make sure to check that other containers didn't break after them.\n public render (duration = this.config.duration): void {\n const width = this.config.width || this.containerWidth\n const height = this.config.height || this.containerHeight\n\n // We set SVG size in `render()` instead of `_render()`, because the size values in pixels will become\n // available only in the next animation when being accessed via `element.clientWidth` and `element.clientHeight`,\n // and we rely on those values when setting width and size of the components.\n this.svg\n .attr('width', width)\n .attr('height', height)\n\n // Set up Resize Observer. We do it in `render()` to capture container size change if it happened\n // in the next animation frame after the initial `render` was called.\n if (!this._resizeObserver) this._setUpResizeObserver()\n\n // Schedule the actual rendering in the next frame\n cancelAnimationFrame(this._requestedAnimationFrame)\n this._requestedAnimationFrame = requestAnimationFrame(() => {\n this._preRender()\n this._render(duration)\n })\n }\n\n get containerWidth (): number {\n return this.config.width\n ? this.element.clientWidth\n : (this._container.clientWidth || this._container.getBoundingClientRect().width)\n }\n\n get containerHeight (): number {\n return this.config.height\n ? this.element.clientHeight\n : (this._container.clientHeight || this._container.getBoundingClientRect().height || ContainerCore.DEFAULT_CONTAINER_HEIGHT)\n }\n\n get width (): number {\n return clamp(this.containerWidth - this.config.margin.left - this.config.margin.right, 0, Number.POSITIVE_INFINITY)\n }\n\n get height (): number {\n return clamp(this.containerHeight - this.config.margin.top - this.config.margin.bottom, 0, Number.POSITIVE_INFINITY)\n }\n\n protected _removeAllChildren (): void {\n while (this.element.firstChild) {\n this.element.removeChild(this.element.firstChild)\n }\n }\n\n protected _onResize (): void {\n const { config } = this\n const redrawOnResize = config.sizing === Sizing.Fit || config.sizing === Sizing.FitWidth\n if (redrawOnResize) this.render(0)\n }\n\n protected _setUpResizeObserver (): void {\n if (this._resizeObserver) return\n const containerRect = this._container.getBoundingClientRect()\n this._containerSize = { width: containerRect.width, height: containerRect.height }\n\n this._resizeObserver = new ResizeObserver((entries, observer) => {\n const resizedContainerRect = this._container.getBoundingClientRect()\n const resizedContainerSize = { width: resizedContainerRect.width, height: resizedContainerRect.height }\n const hasSizeChanged = !isEqual(this._containerSize, resizedContainerSize)\n // Do resize only if element is attached to the DOM\n // will come in useful when some ancestor of container becomes detached\n if (hasSizeChanged && resizedContainerSize.width && resizedContainerSize.height) {\n this._containerSize = resizedContainerSize\n this._onResize()\n }\n })\n this._resizeObserver.observe(this._container)\n }\n\n public destroy (): void {\n cancelAnimationFrame(this._requestedAnimationFrame)\n this._resizeObserver?.disconnect()\n this.svg.remove()\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/core/container/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Types\nimport { Sizing } from 'types/component'\n\n// Utils\nimport { isEqual, clamp, merge } from 'utils/data'\nimport { ResizeObserver } from 'utils/resize-observer'\n\n// Config\nimport { ContainerDefaultConfig, ContainerConfigInterface } from './config'\n\nexport class ContainerCore {\n public svg: Selection<SVGSVGElement, unknown, null, undefined>\n public element: SVGSVGElement\n public prevConfig: ContainerConfigInterface\n public config: ContainerConfigInterface\n\n protected _defaultConfig: ContainerConfigInterface = ContainerDefaultConfig\n protected _container: HTMLElement\n protected _requestedAnimationFrame: number\n protected _isFirstRender = true\n protected _resizeObserver: ResizeObserver | undefined\n private _containerSize: { width: number; height: number }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static DEFAULT_CONTAINER_HEIGHT = 300\n\n constructor (element: HTMLElement) {\n this._requestedAnimationFrame = null\n this._container = element\n\n // Setting `role` attribute to `image` to make the container accessible\n const container = select(this._container)\n container.attr('role', 'figure')\n\n // Create SVG element for visualizations\n this.svg = container.append('svg')\n // We set `display` to `block` because inline elements have an invisible\n // inline space that adds 4px to the height of the container\n .style('display', 'block')\n .attr('xmlns', 'http://www.w3.org/2000/svg')\n .attr('height', ContainerCore.DEFAULT_CONTAINER_HEIGHT) // Overriding default SVG height of 150\n .attr('aria-hidden', true)\n\n this.element = this.svg.node()\n }\n\n public updateContainer<T extends ContainerConfigInterface> (config: T): void {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n this.prevConfig = this.config\n this.config = merge(this._defaultConfig, config)\n }\n\n // The `_preRender` step should be used to perform some actions before rendering.\n // For example, calculating scales, setting component sizes, etc ...\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n protected _preRender (): void {}\n\n // The `_render` step should be used to perform the actual rendering\n protected _render (duration?: number): void {\n const { config } = this\n\n // Add `svgDefs` if provided in the config\n if (config.svgDefs) {\n this.svg.select('.svgDefs').remove()\n this.svg.append('defs').attr('class', 'svgDefs').html(config.svgDefs)\n }\n\n // Apply the `aria-label` attribute\n select(this._container)\n .attr('aria-label', config.ariaLabel)\n\n this._isFirstRender = false\n }\n\n // Warning: Some Containers (i.e. Single Container) may override this method, so if you introduce any changes here,\n // make sure to check that other containers didn't break after them.\n public render (duration = this.config.duration): void {\n const width = this.config.width || this.containerWidth\n const height = this.config.height || this.containerHeight\n\n // We set SVG size in `render()` instead of `_render()`, because the size values in pixels will become\n // available only in the next animation when being accessed via `element.clientWidth` and `element.clientHeight`,\n // and we rely on those values when setting width and size of the components.\n this.svg\n .attr('width', width)\n .attr('height', height)\n\n // Set up Resize Observer. We do it in `render()` to capture container size change if it happened\n // in the next animation frame after the initial `render` was called.\n if (!this._resizeObserver) this._setUpResizeObserver()\n\n // Schedule the actual rendering in the next frame\n cancelAnimationFrame(this._requestedAnimationFrame)\n this._requestedAnimationFrame = requestAnimationFrame(() => {\n this._preRender()\n this._render(duration)\n })\n }\n\n get containerWidth (): number {\n return this.config.width\n ? this.element.clientWidth\n : (this._container.clientWidth || this._container.getBoundingClientRect().width)\n }\n\n get containerHeight (): number {\n return this.config.height\n ? this.element.clientHeight\n : (this._container.clientHeight || this._container.getBoundingClientRect().height || ContainerCore.DEFAULT_CONTAINER_HEIGHT)\n }\n\n get width (): number {\n return clamp(this.containerWidth - this.config.margin.left - this.config.margin.right, 0, Number.POSITIVE_INFINITY)\n }\n\n get height (): number {\n return clamp(this.containerHeight - this.config.margin.top - this.config.margin.bottom, 0, Number.POSITIVE_INFINITY)\n }\n\n protected _removeAllChildren (): void {\n while (this.element.firstChild) {\n this.element.removeChild(this.element.firstChild)\n }\n }\n\n protected _onResize (): void {\n const { config } = this\n const redrawOnResize = config.sizing === Sizing.Fit || config.sizing === Sizing.FitWidth\n if (redrawOnResize) this.render(0)\n }\n\n protected _setUpResizeObserver (): void {\n if (this._resizeObserver) return\n const containerRect = this._container.getBoundingClientRect()\n this._containerSize = { width: containerRect.width, height: containerRect.height }\n\n this._resizeObserver = new ResizeObserver((entries, observer) => {\n const resizedContainerRect = this._container.getBoundingClientRect()\n const resizedContainerSize = { width: resizedContainerRect.width, height: resizedContainerRect.height }\n const hasSizeChanged = !isEqual(this._containerSize, resizedContainerSize)\n // Do resize only if element is attached to the DOM\n // will come in useful when some ancestor of container becomes detached\n if (hasSizeChanged && resizedContainerSize.width && resizedContainerSize.height) {\n this._containerSize = resizedContainerSize\n this._onResize()\n }\n })\n this._resizeObserver.observe(this._container)\n }\n\n public destroy (): void {\n cancelAnimationFrame(this._requestedAnimationFrame)\n this._resizeObserver?.disconnect()\n this.svg.remove()\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { ContinuousScale } from "../../types/scale";
2
2
  import { ColorAccessor, NumericAccessor } from "../../types/accessor";
3
- import { ComponentConfig, ComponentConfigInterface } from '../component/config';
3
+ import { ComponentConfigInterface } from '../component/config';
4
4
  export interface XYComponentConfigInterface<Datum> extends ComponentConfigInterface {
5
5
  /** Accessor function for getting the values along the X axis. Default: `undefined` */
6
6
  x: NumericAccessor<Datum>;
@@ -27,12 +27,4 @@ export interface XYComponentConfigInterface<Datum> extends ComponentConfigInterf
27
27
  */
28
28
  excludeFromDomainCalculation?: boolean;
29
29
  }
30
- export declare class XYComponentConfig<Datum> extends ComponentConfig implements XYComponentConfigInterface<Datum> {
31
- x: any;
32
- y: any;
33
- id: (d: Datum, i: number) => string;
34
- color: (d: Datum | Datum[]) => string;
35
- xScale: any;
36
- yScale: any;
37
- excludeFromDomainCalculation: boolean;
38
- }
30
+ export declare const XYComponentDefaultConfig: XYComponentConfigInterface<unknown>;
@@ -1,20 +1,11 @@
1
- import { ComponentConfig } from '../component/config.js';
1
+ import { ComponentDefaultConfig } from '../component/config.js';
2
2
 
3
3
  // Config
4
- class XYComponentConfig extends ComponentConfig {
5
- constructor() {
6
- super(...arguments);
7
- this.x = undefined;
8
- this.y = undefined;
9
- // eslint-disable-next-line dot-notation
10
- this.id = (d, i) => { var _a; return (_a = d['id']) !== null && _a !== void 0 ? _a : `${i}`; };
11
- // eslint-disable-next-line dot-notation
12
- this.color = (d) => d['color'];
13
- this.xScale = undefined;
14
- this.yScale = undefined;
15
- this.excludeFromDomainCalculation = false;
16
- }
17
- }
4
+ const XYComponentDefaultConfig = Object.assign(Object.assign({}, ComponentDefaultConfig), { x: undefined, y: undefined,
5
+ // eslint-disable-next-line dot-notation
6
+ id: (d, i) => { var _a; return (_a = d['id']) !== null && _a !== void 0 ? _a : `${i}`; },
7
+ // eslint-disable-next-line dot-notation
8
+ color: (d) => d['color'], xScale: undefined, yScale: undefined, excludeFromDomainCalculation: false });
18
9
 
19
- export { XYComponentConfig };
10
+ export { XYComponentDefaultConfig };
20
11
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../src/core/xy-component/config.ts"],"sourcesContent":["import { ContinuousScale } from 'types/scale'\n\n// Types\nimport { ColorAccessor, NumericAccessor } from 'types/accessor'\n\n// Config\nimport { ComponentConfig, ComponentConfigInterface } from '../component/config'\n\nexport interface XYComponentConfigInterface<Datum> extends ComponentConfigInterface {\n /** Accessor function for getting the values along the X axis. Default: `undefined` */\n x: NumericAccessor<Datum>;\n /** A single of multiple accessor functions for getting the values along the Y axis. Default: `undefined` */\n y: NumericAccessor<Datum> | NumericAccessor<Datum>[];\n /** Accessor function for getting the unique data record id. Used for more persistent data updates. Default: `(d, i) => d.id ?? i` */\n id?: ((d: Datum, i: number, ...any: any[]) => string);\n /** Component color accessor function. Default: `d => d.color` */\n color?: ColorAccessor<Datum> | ColorAccessor<Datum[]>;\n /** Scale for X dimension, e.g. Scale.scaleLinear(). If you set xScale you'll be responsible for setting it's `domain` and `range` as well.\n * Only continuous scales are supported.\n * Default: `undefined`\n */\n xScale?: ContinuousScale;\n /** Scale for Y dimension, e.g. Scale.scaleLinear(). If you set yScale you'll be responsible for setting it's `domain` and `range` as well.\n * Only continuous scales are supported.\n * Default: `undefined`\n */\n yScale?: ContinuousScale;\n /** Identifies whether the component should be excluded from overall X and Y domain calculations or not.\n * This property can be useful when you want pass individual data to a component and you don't want it to affect\n * the scales of the chart.\n * Default: `false`\n */\n excludeFromDomainCalculation?: boolean;\n}\n\nexport class XYComponentConfig<Datum> extends ComponentConfig implements XYComponentConfigInterface<Datum> {\n x = undefined\n y = undefined\n // eslint-disable-next-line dot-notation\n id = (d: Datum, i: number): string => d['id'] ?? `${i}`\n // eslint-disable-next-line dot-notation\n color = (d: Datum | Datum[]): string => d['color']\n xScale = undefined\n yScale = undefined\n excludeFromDomainCalculation = false\n}\n"],"names":[],"mappings":";;AAKA;AA8BM,MAAO,iBAAyB,SAAQ,eAAe,CAAA;AAA7D,IAAA,WAAA,GAAA;;QACE,IAAC,CAAA,CAAA,GAAG,SAAS,CAAA;QACb,IAAC,CAAA,CAAA,GAAG,SAAS,CAAA;;QAEb,IAAE,CAAA,EAAA,GAAG,CAAC,CAAQ,EAAE,CAAS,eAAa,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,IAAI,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAA,EAAG,CAAC,CAAE,CAAA,CAAA,EAAA,CAAA;;QAEvD,IAAK,CAAA,KAAA,GAAG,CAAC,CAAkB,KAAa,CAAC,CAAC,OAAO,CAAC,CAAA;QAClD,IAAM,CAAA,MAAA,GAAG,SAAS,CAAA;QAClB,IAAM,CAAA,MAAA,GAAG,SAAS,CAAA;QAClB,IAA4B,CAAA,4BAAA,GAAG,KAAK,CAAA;KACrC;AAAA;;;;"}
1
+ {"version":3,"file":"config.js","sources":["../../../src/core/xy-component/config.ts"],"sourcesContent":["import { ContinuousScale } from 'types/scale'\n\n// Types\nimport { ColorAccessor, NumericAccessor } from 'types/accessor'\n\n// Config\nimport { ComponentDefaultConfig, ComponentConfigInterface } from '../component/config'\n\nexport interface XYComponentConfigInterface<Datum> extends ComponentConfigInterface {\n /** Accessor function for getting the values along the X axis. Default: `undefined` */\n x: NumericAccessor<Datum>;\n /** A single of multiple accessor functions for getting the values along the Y axis. Default: `undefined` */\n y: NumericAccessor<Datum> | NumericAccessor<Datum>[];\n /** Accessor function for getting the unique data record id. Used for more persistent data updates. Default: `(d, i) => d.id ?? i` */\n id?: ((d: Datum, i: number, ...any: any[]) => string);\n /** Component color accessor function. Default: `d => d.color` */\n color?: ColorAccessor<Datum> | ColorAccessor<Datum[]>;\n /** Scale for X dimension, e.g. Scale.scaleLinear(). If you set xScale you'll be responsible for setting it's `domain` and `range` as well.\n * Only continuous scales are supported.\n * Default: `undefined`\n */\n xScale?: ContinuousScale;\n /** Scale for Y dimension, e.g. Scale.scaleLinear(). If you set yScale you'll be responsible for setting it's `domain` and `range` as well.\n * Only continuous scales are supported.\n * Default: `undefined`\n */\n yScale?: ContinuousScale;\n /** Identifies whether the component should be excluded from overall X and Y domain calculations or not.\n * This property can be useful when you want pass individual data to a component and you don't want it to affect\n * the scales of the chart.\n * Default: `false`\n */\n excludeFromDomainCalculation?: boolean;\n}\n\nexport const XYComponentDefaultConfig: XYComponentConfigInterface<unknown> = {\n ...ComponentDefaultConfig,\n x: undefined,\n y: undefined,\n // eslint-disable-next-line dot-notation\n id: <Datum>(d: Datum, i: number): string => d['id'] ?? `${i}`,\n // eslint-disable-next-line dot-notation\n color: <Datum>(d: Datum | Datum[]): string => d['color'],\n xScale: undefined,\n yScale: undefined,\n excludeFromDomainCalculation: false,\n}\n"],"names":[],"mappings":";;AAKA;AA8BO,MAAM,wBAAwB,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAChC,sBAAsB,CAAA,EAAA,EACzB,CAAC,EAAE,SAAS,EACZ,CAAC,EAAE,SAAS;;AAEZ,IAAA,EAAE,EAAE,CAAQ,CAAQ,EAAE,CAAS,KAAa,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,MAAA,CAAC,CAAC,IAAI,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,GAAG,CAAC,CAAA,CAAE,CAAA,EAAA;;IAE7D,KAAK,EAAE,CAAQ,CAAkB,KAAa,CAAC,CAAC,OAAO,CAAC,EACxD,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,SAAS,EACjB,4BAA4B,EAAE,KAAK,EAAA;;;;"}
@@ -2,17 +2,18 @@ import { Selection } from 'd3-selection';
2
2
  import { ComponentCore } from "../component";
3
3
  import { SeriesDataModel } from "../../data-models/series";
4
4
  import { ContinuousScale, ScaleDimension } from "../../types/scale";
5
- import { XYComponentConfig, XYComponentConfigInterface } from './config';
6
- export declare class XYComponentCore<Datum, ConfigClass extends XYComponentConfig<Datum> = XYComponentConfig<Datum>, ConfigInterface extends Partial<XYComponentConfigInterface<Datum>> = Partial<XYComponentConfigInterface<Datum>>> extends ComponentCore<Datum[], ConfigClass, ConfigInterface> {
5
+ import { XYComponentConfigInterface } from './config';
6
+ export declare class XYComponentCore<Datum, ConfigInterface extends Partial<XYComponentConfigInterface<Datum>> = Partial<XYComponentConfigInterface<Datum>>> extends ComponentCore<Datum[], ConfigInterface> {
7
7
  element: SVGGraphicsElement;
8
8
  g: Selection<SVGGElement, unknown, null, undefined>;
9
- config: ConfigClass;
10
- prevConfig: ConfigClass;
9
+ config: ConfigInterface;
10
+ prevConfig: ConfigInterface;
11
11
  datamodel: SeriesDataModel<Datum>;
12
12
  /** Clippable components can be affected by a clipping path (set up in the container) */
13
13
  clippable: boolean;
14
14
  /** Identifies whether the component displayed stacked data (eg StackedBar, Area) */
15
15
  stacked: boolean;
16
+ protected _defaultConfig: ConfigInterface;
16
17
  private _xScale;
17
18
  private _yScale;
18
19
  get xScale(): ContinuousScale;
@@ -2,6 +2,7 @@ import { ComponentCore } from '../component/index.js';
2
2
  import { SeriesDataModel } from '../../data-models/series.js';
3
3
  import { getExtent, filterDataByRange, isArray } from '../../utils/data.js';
4
4
  import { Scale, ScaleDimension } from '../../types/scale.js';
5
+ import { XYComponentDefaultConfig } from './config.js';
5
6
 
6
7
  // Core
7
8
  class XYComponentCore extends ComponentCore {
@@ -12,6 +13,7 @@ class XYComponentCore extends ComponentCore {
12
13
  this.clippable = true;
13
14
  /** Identifies whether the component displayed stacked data (eg StackedBar, Area) */
14
15
  this.stacked = false;
16
+ this._defaultConfig = XYComponentDefaultConfig;
15
17
  this._xScale = Scale.scaleLinear();
16
18
  this._yScale = Scale.scaleLinear();
17
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/core/xy-component/index.ts"],"sourcesContent":["import { Selection } from 'd3-selection'\n\n// Core\nimport { ComponentCore } from 'core/component'\nimport { SeriesDataModel } from 'data-models/series'\n\n// Utils\nimport { filterDataByRange, getExtent, isArray } from 'utils/data'\n\n// Types\nimport { NumericAccessor } from 'types/accessor'\nimport { ContinuousScale, Scale, ScaleDimension } from 'types/scale'\n\n// Config\nimport { XYComponentConfig, XYComponentConfigInterface } from './config'\n\nexport class XYComponentCore<\n Datum,\n ConfigClass extends XYComponentConfig<Datum> = XYComponentConfig<Datum>,\n ConfigInterface extends Partial<XYComponentConfigInterface<Datum>> = Partial<XYComponentConfigInterface<Datum>>,\n> extends ComponentCore<Datum[], ConfigClass, ConfigInterface> {\n element: SVGGraphicsElement\n g: Selection<SVGGElement, unknown, null, undefined>\n config: ConfigClass\n prevConfig: ConfigClass\n datamodel: SeriesDataModel<Datum> = new SeriesDataModel()\n\n /** Clippable components can be affected by a clipping path (set up in the container) */\n clippable = true\n\n /** Identifies whether the component displayed stacked data (eg StackedBar, Area) */\n stacked = false\n\n private _xScale: ContinuousScale = Scale.scaleLinear()\n private _yScale: ContinuousScale = Scale.scaleLinear()\n\n get xScale (): ContinuousScale {\n return this.config.xScale || this._xScale\n }\n\n get yScale (): ContinuousScale {\n return this.config.yScale || this._yScale\n }\n\n setConfig (config: ConfigInterface): void {\n // We don't allow changing scales after the component has been initialized\n if (this.config?.xScale) config.xScale = this.config.xScale\n if (this.config?.yScale) config.yScale = this.config.yScale\n\n super.setConfig(config)\n }\n\n setScaleDomain (dimension: ScaleDimension, domain: number[]): void {\n if (dimension === ScaleDimension.X) this._xScale?.domain(domain)\n if (dimension === ScaleDimension.Y) this._yScale?.domain(domain)\n }\n\n setScaleRange (dimension: ScaleDimension, range: number[]): void {\n if (dimension === ScaleDimension.X) this._xScale?.range(range)\n if (dimension === ScaleDimension.Y) this._yScale?.range(range)\n }\n\n setScale (dimension: ScaleDimension, scale: ContinuousScale): void {\n if (scale && (dimension === ScaleDimension.X)) this._xScale = scale\n if (scale && (dimension === ScaleDimension.Y)) this._yScale = scale\n }\n\n getDataExtent (dimension: ScaleDimension, scaleByVisibleData: boolean): number[] {\n const { config, datamodel } = this\n\n switch (dimension) {\n case ScaleDimension.X: return this.getXDataExtent()\n case ScaleDimension.Y: return this.getYDataExtent(scaleByVisibleData)\n default: return getExtent(datamodel.data, config[dimension])\n }\n }\n\n getXDataExtent (): number[] {\n const { config, datamodel } = this\n return getExtent(datamodel.data, config.x)\n }\n\n getYDataExtent (scaleByVisibleData: boolean): number[] {\n const { config, datamodel } = this\n\n const data = scaleByVisibleData ? filterDataByRange(datamodel.data, this.xScale.domain() as [number, number], config.x) : datamodel.data\n const yAccessors = (isArray(config.y) ? config.y : [config.y]) as NumericAccessor<Datum>[]\n return getExtent(data, ...yAccessors)\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/core/xy-component/index.ts"],"sourcesContent":["import { Selection } from 'd3-selection'\n\n// Core\nimport { ComponentCore } from 'core/component'\nimport { SeriesDataModel } from 'data-models/series'\n\n// Utils\nimport { filterDataByRange, getExtent, isArray } from 'utils/data'\n\n// Types\nimport { NumericAccessor } from 'types/accessor'\nimport { ContinuousScale, Scale, ScaleDimension } from 'types/scale'\n\n// Config\nimport { XYComponentDefaultConfig, XYComponentConfigInterface } from './config'\n\nexport class XYComponentCore<\n Datum,\n ConfigInterface extends Partial<XYComponentConfigInterface<Datum>> = Partial<XYComponentConfigInterface<Datum>>,\n> extends ComponentCore<Datum[], ConfigInterface> {\n public element: SVGGraphicsElement\n public g: Selection<SVGGElement, unknown, null, undefined>\n public config: ConfigInterface\n public prevConfig: ConfigInterface\n public datamodel: SeriesDataModel<Datum> = new SeriesDataModel()\n\n /** Clippable components can be affected by a clipping path (set up in the container) */\n public clippable = true\n\n /** Identifies whether the component displayed stacked data (eg StackedBar, Area) */\n public stacked = false\n\n protected _defaultConfig: ConfigInterface = XYComponentDefaultConfig as ConfigInterface\n\n private _xScale: ContinuousScale = Scale.scaleLinear()\n private _yScale: ContinuousScale = Scale.scaleLinear()\n\n get xScale (): ContinuousScale {\n return this.config.xScale || this._xScale\n }\n\n get yScale (): ContinuousScale {\n return this.config.yScale || this._yScale\n }\n\n setConfig (config: ConfigInterface): void {\n // We don't allow changing scales after the component has been initialized\n if (this.config?.xScale) config.xScale = this.config.xScale\n if (this.config?.yScale) config.yScale = this.config.yScale\n\n super.setConfig(config)\n }\n\n setScaleDomain (dimension: ScaleDimension, domain: number[]): void {\n if (dimension === ScaleDimension.X) this._xScale?.domain(domain)\n if (dimension === ScaleDimension.Y) this._yScale?.domain(domain)\n }\n\n setScaleRange (dimension: ScaleDimension, range: number[]): void {\n if (dimension === ScaleDimension.X) this._xScale?.range(range)\n if (dimension === ScaleDimension.Y) this._yScale?.range(range)\n }\n\n setScale (dimension: ScaleDimension, scale: ContinuousScale): void {\n if (scale && (dimension === ScaleDimension.X)) this._xScale = scale\n if (scale && (dimension === ScaleDimension.Y)) this._yScale = scale\n }\n\n getDataExtent (dimension: ScaleDimension, scaleByVisibleData: boolean): number[] {\n const { config, datamodel } = this\n\n switch (dimension) {\n case ScaleDimension.X: return this.getXDataExtent()\n case ScaleDimension.Y: return this.getYDataExtent(scaleByVisibleData)\n default: return getExtent(datamodel.data, config[dimension])\n }\n }\n\n getXDataExtent (): number[] {\n const { config, datamodel } = this\n return getExtent(datamodel.data, config.x)\n }\n\n getYDataExtent (scaleByVisibleData: boolean): number[] {\n const { config, datamodel } = this\n\n const data = scaleByVisibleData ? filterDataByRange(datamodel.data, this.xScale.domain() as [number, number], config.x) : datamodel.data\n const yAccessors = (isArray(config.y) ? config.y : [config.y]) as NumericAccessor<Datum>[]\n return getExtent(data, ...yAccessors)\n }\n}\n"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ export declare class MapGraphDataModel<AreaDatum, PointDatum, LinkDatum> extends
9
9
  private _areas;
10
10
  private _points;
11
11
  private _links;
12
- pointId: ((n: PointDatum) => string);
12
+ pointId: ((n: PointDatum, i: number) => string);
13
13
  linkSource: ((l: LinkDatum) => number | string | PointDatum);
14
14
  linkTarget: ((l: LinkDatum) => number | string | PointDatum);
15
15
  get data(): MapGraphData<AreaDatum, PointDatum, LinkDatum>;
@@ -48,7 +48,7 @@ class MapGraphDataModel extends CoreDataModel {
48
48
  if (isNumber(pointIdentifier))
49
49
  foundPoint = points[pointIdentifier];
50
50
  else if (isString(pointIdentifier))
51
- foundPoint = points.find(node => this.pointId(node) === pointIdentifier);
51
+ foundPoint = points.find((node, i) => this.pointId(node, i) === pointIdentifier);
52
52
  else if (isObject(pointIdentifier))
53
53
  foundPoint = points.find(node => node === pointIdentifier);
54
54
  if (!foundPoint) {
@@ -1 +1 @@
1
- {"version":3,"file":"map-graph.js","sources":["../../src/data-models/map-graph.ts"],"sourcesContent":["// Utils\nimport { cloneDeep, isNumber, isObject, isString } from 'utils/data'\n\n// Core Data Model\nimport { CoreDataModel } from 'data-models/core'\n\n// Types\nimport { MapLink } from 'types/map'\n\nexport type MapGraphData<AreaDatum, PointDatum, LinkDatum> = {\n areas?: AreaDatum[];\n points?: PointDatum[];\n links?: LinkDatum[];\n}\n\nexport class MapGraphDataModel<AreaDatum, PointDatum, LinkDatum> extends CoreDataModel<MapGraphData<AreaDatum, PointDatum, LinkDatum>> {\n private _areas: AreaDatum[] = []\n private _points: PointDatum[] = []\n private _links: MapLink<PointDatum, LinkDatum>[] = []\n\n // Model configuration\n /* eslint-disable-next-line dot-notation */\n public pointId: ((n: PointDatum) => string) = n => n['id']\n /* eslint-disable-next-line dot-notation */\n public linkSource: ((l: LinkDatum) => number | string | PointDatum) = l => l['source']\n /* eslint-disable-next-line dot-notation */\n public linkTarget: ((l: LinkDatum) => number | string | PointDatum) = l => l['target']\n\n get data (): MapGraphData<AreaDatum, PointDatum, LinkDatum> {\n return this._data\n }\n\n set data (data: MapGraphData<AreaDatum, PointDatum, LinkDatum>) {\n if (!data) return\n this._data = data\n\n this._areas = cloneDeep(data?.areas ?? [])\n this._points = cloneDeep(data?.points ?? [])\n\n this._links = cloneDeep(data?.links ?? []).reduce((arr, link) => {\n const source = this.findPoint(this.points, this.linkSource(link))\n const target = this.findPoint(this.points, this.linkTarget(link))\n if (source && target) arr.push({ source, target })\n return arr\n }, [])\n }\n\n get areas (): AreaDatum[] {\n return this._areas\n }\n\n get points (): PointDatum[] {\n return this._points\n }\n\n get links (): MapLink<PointDatum, LinkDatum>[] {\n return this._links\n }\n\n private findPoint (points: PointDatum[], pointIdentifier: number | string | PointDatum): PointDatum | undefined {\n let foundPoint: PointDatum | undefined\n if (isNumber(pointIdentifier)) foundPoint = points[pointIdentifier as number]\n else if (isString(pointIdentifier)) foundPoint = points.find(node => this.pointId(node) === pointIdentifier)\n else if (isObject(pointIdentifier)) foundPoint = points.find(node => node === pointIdentifier)\n\n if (!foundPoint) {\n console.warn(`Point ${pointIdentifier} is missing from the points list`)\n }\n\n return foundPoint\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"map-graph.js","sources":["../../src/data-models/map-graph.ts"],"sourcesContent":["// Utils\nimport { cloneDeep, isNumber, isObject, isString } from 'utils/data'\n\n// Core Data Model\nimport { CoreDataModel } from 'data-models/core'\n\n// Types\nimport { MapLink } from 'types/map'\n\nexport type MapGraphData<AreaDatum, PointDatum, LinkDatum> = {\n areas?: AreaDatum[];\n points?: PointDatum[];\n links?: LinkDatum[];\n}\n\nexport class MapGraphDataModel<AreaDatum, PointDatum, LinkDatum> extends CoreDataModel<MapGraphData<AreaDatum, PointDatum, LinkDatum>> {\n private _areas: AreaDatum[] = []\n private _points: PointDatum[] = []\n private _links: MapLink<PointDatum, LinkDatum>[] = []\n\n // Model configuration\n /* eslint-disable-next-line dot-notation */\n public pointId: ((n: PointDatum, i: number) => string) = n => n['id']\n /* eslint-disable-next-line dot-notation */\n public linkSource: ((l: LinkDatum) => number | string | PointDatum) = l => l['source']\n /* eslint-disable-next-line dot-notation */\n public linkTarget: ((l: LinkDatum) => number | string | PointDatum) = l => l['target']\n\n get data (): MapGraphData<AreaDatum, PointDatum, LinkDatum> {\n return this._data\n }\n\n set data (data: MapGraphData<AreaDatum, PointDatum, LinkDatum>) {\n if (!data) return\n this._data = data\n\n this._areas = cloneDeep(data?.areas ?? [])\n this._points = cloneDeep(data?.points ?? [])\n\n this._links = cloneDeep(data?.links ?? []).reduce((arr, link) => {\n const source = this.findPoint(this.points, this.linkSource(link))\n const target = this.findPoint(this.points, this.linkTarget(link))\n if (source && target) arr.push({ source, target })\n return arr\n }, [])\n }\n\n get areas (): AreaDatum[] {\n return this._areas\n }\n\n get points (): PointDatum[] {\n return this._points\n }\n\n get links (): MapLink<PointDatum, LinkDatum>[] {\n return this._links\n }\n\n private findPoint (points: PointDatum[], pointIdentifier: number | string | PointDatum): PointDatum | undefined {\n let foundPoint: PointDatum | undefined\n if (isNumber(pointIdentifier)) foundPoint = points[pointIdentifier as number]\n else if (isString(pointIdentifier)) foundPoint = points.find((node, i) => this.pointId(node, i) === pointIdentifier)\n else if (isObject(pointIdentifier)) foundPoint = points.find(node => node === pointIdentifier)\n\n if (!foundPoint) {\n console.warn(`Point ${pointIdentifier} is missing from the points list`)\n }\n\n return foundPoint\n }\n}\n"],"names":[],"mappings":";;;AAAA;AAeM,MAAO,iBAAoD,SAAQ,aAA6D,CAAA;AAAtI,IAAA,WAAA,GAAA;;QACU,IAAM,CAAA,MAAA,GAAgB,EAAE,CAAA;QACxB,IAAO,CAAA,OAAA,GAAiB,EAAE,CAAA;QAC1B,IAAM,CAAA,MAAA,GAAqC,EAAE,CAAA;;;QAI9C,IAAO,CAAA,OAAA,GAA2C,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAA;;QAE9D,IAAU,CAAA,UAAA,GAAqD,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAA;;QAE/E,IAAU,CAAA,UAAA,GAAqD,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAA;KA6CvF;AA3CC,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;KAClB;IAED,IAAI,IAAI,CAAE,IAAoD,EAAA;;AAC5D,QAAA,IAAI,CAAC,IAAI;YAAE,OAAM;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;AAEjB,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC,CAAA;AAC1C,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,MAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC,CAAA;QAE5C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;AAC9D,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;AACjE,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;YACjE,IAAI,MAAM,IAAI,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;AAClD,YAAA,OAAO,GAAG,CAAA;SACX,EAAE,EAAE,CAAC,CAAA;KACP;AAED,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;KACnB;AAED,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;KACpB;AAED,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;KACnB;IAEO,SAAS,CAAE,MAAoB,EAAE,eAA6C,EAAA;AACpF,QAAA,IAAI,UAAkC,CAAA;QACtC,IAAI,QAAQ,CAAC,eAAe,CAAC;AAAE,YAAA,UAAU,GAAG,MAAM,CAAC,eAAyB,CAAC,CAAA;aACxE,IAAI,QAAQ,CAAC,eAAe,CAAC;YAAE,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,eAAe,CAAC,CAAA;aAC/G,IAAI,QAAQ,CAAC,eAAe,CAAC;AAAE,YAAA,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,eAAe,CAAC,CAAA;QAE9F,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,CAAC,IAAI,CAAC,SAAS,eAAe,CAAA,gCAAA,CAAkC,CAAC,CAAA;AACzE,SAAA;AAED,QAAA,OAAO,UAAU,CAAA;KAClB;AACF;;;;"}
package/index.js CHANGED
@@ -50,6 +50,7 @@ export { GraphLayoutType, GraphLinkArrowStyle, GraphLinkStyle, GraphNodeShape }
50
50
  export { SankeyEnterTransitionType, SankeyExitTransitionType, SankeyLayout, SankeyNodeAlign, SankeySubLabelPlacement } from './components/sankey/types.js';
51
51
  export { VisControlsOrientation } from './components/vis-controls/types.js';
52
52
  export { FreeBrushMode } from './components/free-brush/types.js';
53
+ export { BulletShape } from './components/bullet-legend/types.js';
53
54
  export { XYLabelPositioning } from './components/xy-labels/types.js';
54
55
  export { NestedDonutDirection, NestedDonutSegmentLabelAlignment } from './components/nested-donut/types.js';
55
56
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@unovis/ts",
3
3
  "description": "Modular data visualization framework for React, Angular, Svelte, and vanilla TypeScript or JavaScript",
4
- "version": "1.3.0-alpha.2",
4
+ "version": "1.3.0-beta.0",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/f5/unovis.git",
@@ -1,5 +1,5 @@
1
1
  export declare type NumericAccessor<Datum> = ((d: Datum, i: number, ...any: any[]) => number | null | undefined) | number | null | undefined;
2
2
  export declare type StringAccessor<Datum> = ((d: Datum, i: number, ...any: any[]) => string | null | undefined) | string | null;
3
- export declare type ColorAccessor<Datum> = ((d: Datum, i: number, ...any: any[]) => string | null | undefined) | string | string[] | null | undefined;
3
+ export declare type ColorAccessor<Datum> = ((d: Datum, i: number, ...any: any[]) => string | null | undefined) | string | null | undefined;
4
4
  export declare type BooleanAccessor<Datum> = ((d: Datum, i: number, ...any: any[]) => boolean | null | undefined) | boolean | null | undefined;
5
5
  export declare type GenericAccessor<ReturnType, Datum> = ((d: Datum, i: number, ...any: any[]) => ReturnType | null | undefined) | ReturnType | null | undefined;
package/types.js CHANGED
@@ -22,7 +22,7 @@ export { GraphLayoutType, GraphLinkArrowStyle, GraphLinkStyle, GraphNodeShape }
22
22
  export { SankeyEnterTransitionType, SankeyExitTransitionType, SankeyLayout, SankeyNodeAlign, SankeySubLabelPlacement } from './components/sankey/types.js';
23
23
  export { VisControlsOrientation } from './components/vis-controls/types.js';
24
24
  export { FreeBrushMode } from './components/free-brush/types.js';
25
- import './components/bullet-legend/types.js';
25
+ export { BulletShape } from './components/bullet-legend/types.js';
26
26
  export { XYLabelPositioning } from './components/xy-labels/types.js';
27
27
  export { NestedDonutDirection, NestedDonutSegmentLabelAlignment } from './components/nested-donut/types.js';
28
28
 
package/utils/color.d.ts CHANGED
@@ -1,10 +1,14 @@
1
1
  import { ColorAccessor } from "../types/accessor";
2
- /** Retrieves color from the data if provided, fallbacks to CSS variables if the index was passed */
3
- export declare function getColor<T>(d: T, accessor: ColorAccessor<T>, index?: number, dontFallbackToCssVar?: boolean): string | null;
4
- export declare function hexToRgb(hex: string): {
2
+ declare type RGBColor = {
5
3
  r: number;
6
4
  g: number;
7
5
  b: number;
8
6
  };
7
+ /** Retrieves color from the data if provided, fallbacks to CSS variables if the index was passed */
8
+ export declare function getColor<T>(d: T, accessor: ColorAccessor<T>, index?: number, dontFallbackToCssVar?: boolean): string | null;
9
+ export declare function hexToRgb(hex: string): RGBColor;
10
+ export declare function rgbToBrightness(rgb: RGBColor): number;
9
11
  export declare function hexToBrightness(hex: string): number;
10
12
  export declare function getHexValue(s: string, context: HTMLElement | SVGElement): string;
13
+ export declare function rgbaToRgb(rgba: string, backgroundColor?: string): RGBColor;
14
+ export {};
package/utils/color.js CHANGED
@@ -18,15 +18,31 @@ function hexToRgb(hex) {
18
18
  b: parseInt(parsed[3], 16),
19
19
  } : { r: 0, g: 0, b: 0 };
20
20
  }
21
+ function rgbToBrightness(rgb) {
22
+ return (0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b) / 255;
23
+ }
21
24
  function hexToBrightness(hex) {
22
25
  const rgb = hexToRgb(hex);
23
- return (0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b) / 255;
26
+ return rgbToBrightness(rgb);
24
27
  }
25
28
  function getHexValue(s, context) {
26
29
  var _a;
27
30
  const hex = isStringCSSVariable(s) ? getCSSVariableValue(s, context) : s;
28
31
  return (_a = color(hex)) === null || _a === void 0 ? void 0 : _a.formatHex();
32
+ }
33
+ function rgbaToRgb(rgba, backgroundColor) {
34
+ var _a;
35
+ const rgb = (_a = color(rgba)) === null || _a === void 0 ? void 0 : _a.rgb();
36
+ if (!rgb || rgb.opacity === 1)
37
+ return rgb;
38
+ const alpha = 1 - rgb.opacity;
39
+ const bg = color(backgroundColor !== null && backgroundColor !== void 0 ? backgroundColor : '#fff').rgb();
40
+ return {
41
+ r: Math.round((rgb.opacity * (rgb.r / 255) + (alpha * (bg.r / 255))) * 255),
42
+ g: Math.round((rgb.opacity * (rgb.g / 255) + (alpha * (bg.g / 255))) * 255),
43
+ b: Math.round((rgb.opacity * (rgb.b / 255) + (alpha * (bg.b / 255))) * 255),
44
+ };
29
45
  }
30
46
 
31
- export { getColor, getHexValue, hexToBrightness, hexToRgb };
47
+ export { getColor, getHexValue, hexToBrightness, hexToRgb, rgbToBrightness, rgbaToRgb };
32
48
  //# sourceMappingURL=color.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"color.js","sources":["../../src/utils/color.ts"],"sourcesContent":["import { color } from 'd3-color'\n\n// Core\nimport { getCSSColorVariable } from 'styles/colors'\n\n// Utils\nimport { ColorAccessor, StringAccessor } from 'types/accessor'\nimport { getString, isNumber } from 'utils/data'\nimport { isStringCSSVariable, getCSSVariableValue } from 'utils/misc'\n\n/** Retrieves color from the data if provided, fallbacks to CSS variables if the index was passed */\nexport function getColor<T> (\n d: T,\n accessor: ColorAccessor<T>,\n index?: number,\n dontFallbackToCssVar?: boolean\n): string | null {\n if (Array.isArray(accessor) && isFinite(index)) return accessor[index % accessor.length]\n\n const value = getString(d, accessor as StringAccessor<T>, index)\n return (value || ((isNumber(index) && !dontFallbackToCssVar) ? `var(${getCSSColorVariable(index)})` : null))\n}\n\nexport function hexToRgb (hex: string): { r: number; g: number; b: number } {\n const parsed = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n return parsed ? {\n r: parseInt(parsed[1], 16),\n g: parseInt(parsed[2], 16),\n b: parseInt(parsed[3], 16),\n } : { r: 0, g: 0, b: 0 }\n}\n\nexport function hexToBrightness (hex: string): number {\n const rgb = hexToRgb(hex)\n return (0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b) / 255\n}\n\nexport function getHexValue (s: string, context: HTMLElement | SVGElement): string {\n const hex = isStringCSSVariable(s) ? getCSSVariableValue(s, context) : s\n return color(hex)?.formatHex()\n}\n"],"names":[],"mappings":";;;;;AAUA;AACM,SAAU,QAAQ,CACtB,CAAI,EACJ,QAA0B,EAC1B,KAAc,EACd,oBAA8B,EAAA;IAE9B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAExF,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,EAAE,QAA6B,EAAE,KAAK,CAAC,CAAA;AAChE,IAAA,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAO,IAAA,EAAA,mBAAmB,CAAC,KAAK,CAAC,CAAA,CAAA,CAAG,GAAG,IAAI,CAAC,EAAC;AAC9G,CAAC;AAEK,SAAU,QAAQ,CAAE,GAAW,EAAA;IACnC,MAAM,MAAM,GAAG,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACpE,OAAO,MAAM,GAAG;QACd,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC3B,KAAA,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;AAC1B,CAAC;AAEK,SAAU,eAAe,CAAE,GAAW,EAAA;AAC1C,IAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IACzB,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAA;AACjE,CAAC;AAEe,SAAA,WAAW,CAAE,CAAS,EAAE,OAAiC,EAAA;;AACvE,IAAA,MAAM,GAAG,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IACxE,OAAO,CAAA,EAAA,GAAA,KAAK,CAAC,GAAG,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,EAAE,CAAA;AAChC;;;;"}
1
+ {"version":3,"file":"color.js","sources":["../../src/utils/color.ts"],"sourcesContent":["import { color } from 'd3-color'\n\n// Core\nimport { getCSSColorVariable } from 'styles/colors'\n\n// Utils\nimport { ColorAccessor, StringAccessor } from 'types/accessor'\nimport { getString, isNumber } from 'utils/data'\nimport { isStringCSSVariable, getCSSVariableValue } from 'utils/misc'\n\ntype RGBColor = { r: number; g: number; b: number }\n\n/** Retrieves color from the data if provided, fallbacks to CSS variables if the index was passed */\nexport function getColor<T> (\n d: T,\n accessor: ColorAccessor<T>,\n index?: number,\n dontFallbackToCssVar?: boolean\n): string | null {\n if (Array.isArray(accessor) && isFinite(index)) return accessor[index % accessor.length]\n\n const value = getString(d, accessor as StringAccessor<T>, index)\n return (value || ((isNumber(index) && !dontFallbackToCssVar) ? `var(${getCSSColorVariable(index)})` : null))\n}\n\nexport function hexToRgb (hex: string): RGBColor {\n const parsed = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n return parsed ? {\n r: parseInt(parsed[1], 16),\n g: parseInt(parsed[2], 16),\n b: parseInt(parsed[3], 16),\n } : { r: 0, g: 0, b: 0 }\n}\n\nexport function rgbToBrightness (rgb: RGBColor): number {\n return (0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b) / 255\n}\n\nexport function hexToBrightness (hex: string): number {\n const rgb = hexToRgb(hex)\n return rgbToBrightness(rgb)\n}\n\nexport function getHexValue (s: string, context: HTMLElement | SVGElement): string {\n const hex = isStringCSSVariable(s) ? getCSSVariableValue(s, context) : s\n return color(hex)?.formatHex()\n}\n\nexport function rgbaToRgb (rgba: string, backgroundColor?: string): RGBColor {\n const rgb = color(rgba)?.rgb()\n if (!rgb || rgb.opacity === 1) return rgb\n const alpha = 1 - rgb.opacity\n const bg = color(backgroundColor ?? '#fff').rgb()\n return {\n r: Math.round((rgb.opacity * (rgb.r / 255) + (alpha * (bg.r / 255))) * 255),\n g: Math.round((rgb.opacity * (rgb.g / 255) + (alpha * (bg.g / 255))) * 255),\n b: Math.round((rgb.opacity * (rgb.b / 255) + (alpha * (bg.b / 255))) * 255),\n }\n}\n"],"names":[],"mappings":";;;;;AAYA;AACM,SAAU,QAAQ,CACtB,CAAI,EACJ,QAA0B,EAC1B,KAAc,EACd,oBAA8B,EAAA;IAE9B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAExF,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,EAAE,QAA6B,EAAE,KAAK,CAAC,CAAA;AAChE,IAAA,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAO,IAAA,EAAA,mBAAmB,CAAC,KAAK,CAAC,CAAA,CAAA,CAAG,GAAG,IAAI,CAAC,EAAC;AAC9G,CAAC;AAEK,SAAU,QAAQ,CAAE,GAAW,EAAA;IACnC,MAAM,MAAM,GAAG,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACpE,OAAO,MAAM,GAAG;QACd,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC3B,KAAA,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;AAC1B,CAAC;AAEK,SAAU,eAAe,CAAE,GAAa,EAAA;IAC5C,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAA;AACjE,CAAC;AAEK,SAAU,eAAe,CAAE,GAAW,EAAA;AAC1C,IAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;AACzB,IAAA,OAAO,eAAe,CAAC,GAAG,CAAC,CAAA;AAC7B,CAAC;AAEe,SAAA,WAAW,CAAE,CAAS,EAAE,OAAiC,EAAA;;AACvE,IAAA,MAAM,GAAG,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IACxE,OAAO,CAAA,EAAA,GAAA,KAAK,CAAC,GAAG,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,EAAE,CAAA;AAChC,CAAC;AAEe,SAAA,SAAS,CAAE,IAAY,EAAE,eAAwB,EAAA;;IAC/D,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,EAAE,CAAA;AAC9B,IAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC;AAAE,QAAA,OAAO,GAAG,CAAA;AACzC,IAAA,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAA;AAC7B,IAAA,MAAM,EAAE,GAAG,KAAK,CAAC,eAAe,KAAf,IAAA,IAAA,eAAe,KAAf,KAAA,CAAA,GAAA,eAAe,GAAI,MAAM,CAAC,CAAC,GAAG,EAAE,CAAA;IACjD,OAAO;AACL,QAAA,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;AAC3E,QAAA,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;AAC3E,QAAA,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;KAC5E,CAAA;AACH;;;;"}
package/utils/data.d.ts CHANGED
@@ -6,7 +6,7 @@ export declare const isFunction: <T>(a: T) => boolean;
6
6
  export declare const isUndefined: <T>(a: T) => boolean;
7
7
  export declare const isNil: <T>(a: T) => boolean;
8
8
  export declare const isString: <T>(a: T) => boolean;
9
- export declare const isArray: <T>(a: T) => boolean;
9
+ export declare const isArray: <T>(a: T) => a is T extends any[] ? T : never;
10
10
  export declare const isObject: <T>(a: T) => boolean;
11
11
  export declare const isAClassInstance: <T>(a: T) => boolean;
12
12
  export declare const isPlainObject: <T>(a: T) => boolean;