@unovis/ts 1.3.0-beta.2 → 1.3.0-beta.3

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 (227) hide show
  1. package/components/area/config.d.ts +10 -6
  2. package/components/area/config.js +12 -3
  3. package/components/area/config.js.map +1 -1
  4. package/components/area/index.d.ts +6 -5
  5. package/components/area/index.js +9 -10
  6. package/components/area/index.js.map +1 -1
  7. package/components/axis/config.d.ts +27 -3
  8. package/components/axis/config.js +30 -3
  9. package/components/axis/config.js.map +1 -1
  10. package/components/axis/index.d.ts +3 -4
  11. package/components/axis/index.js +4 -7
  12. package/components/axis/index.js.map +1 -1
  13. package/components/brush/config.d.ts +12 -2
  14. package/components/brush/config.js +20 -11
  15. package/components/brush/config.js.map +1 -1
  16. package/components/brush/index.d.ts +3 -4
  17. package/components/brush/index.js +3 -4
  18. package/components/brush/index.js.map +1 -1
  19. package/components/bullet-legend/config.d.ts +10 -1
  20. package/components/bullet-legend/config.js +14 -11
  21. package/components/bullet-legend/config.js.map +1 -1
  22. package/components/bullet-legend/index.d.ts +3 -4
  23. package/components/bullet-legend/index.js +2 -5
  24. package/components/bullet-legend/index.js.map +1 -1
  25. package/components/chord-diagram/config.d.ts +23 -7
  26. package/components/chord-diagram/config.js +22 -3
  27. package/components/chord-diagram/config.js.map +1 -1
  28. package/components/chord-diagram/index.d.ts +3 -4
  29. package/components/chord-diagram/index.js +6 -7
  30. package/components/chord-diagram/index.js.map +1 -1
  31. package/components/chord-diagram/modules/label.d.ts +3 -3
  32. package/components/chord-diagram/modules/label.js +1 -1
  33. package/components/chord-diagram/modules/label.js.map +1 -1
  34. package/components/chord-diagram/modules/link.d.ts +2 -2
  35. package/components/chord-diagram/modules/link.js.map +1 -1
  36. package/components/chord-diagram/modules/node.d.ts +2 -2
  37. package/components/chord-diagram/modules/node.js.map +1 -1
  38. package/components/chord-diagram/types.d.ts +2 -3
  39. package/components/chord-diagram/types.js.map +1 -1
  40. package/components/crosshair/config.d.ts +14 -4
  41. package/components/crosshair/config.js +16 -3
  42. package/components/crosshair/config.js.map +1 -1
  43. package/components/crosshair/index.d.ts +3 -4
  44. package/components/crosshair/index.js +3 -4
  45. package/components/crosshair/index.js.map +1 -1
  46. package/components/donut/config.d.ts +19 -2
  47. package/components/donut/config.js +24 -5
  48. package/components/donut/config.js.map +1 -1
  49. package/components/donut/index.d.ts +3 -4
  50. package/components/donut/index.js +4 -5
  51. package/components/donut/index.js.map +1 -1
  52. package/components/donut/modules/arc.d.ts +3 -3
  53. package/components/donut/modules/arc.js.map +1 -1
  54. package/components/flow-legend/config.d.ts +11 -1
  55. package/components/flow-legend/config.js +16 -11
  56. package/components/flow-legend/config.js.map +1 -1
  57. package/components/flow-legend/index.d.ts +3 -4
  58. package/components/flow-legend/index.js +2 -5
  59. package/components/flow-legend/index.js.map +1 -1
  60. package/components/free-brush/config.d.ts +12 -2
  61. package/components/free-brush/config.js +20 -11
  62. package/components/free-brush/config.js.map +1 -1
  63. package/components/free-brush/index.d.ts +3 -4
  64. package/components/free-brush/index.js +5 -6
  65. package/components/free-brush/index.js.map +1 -1
  66. package/components/graph/config.d.ts +75 -3
  67. package/components/graph/config.js +78 -12
  68. package/components/graph/config.js.map +1 -1
  69. package/components/graph/index.d.ts +7 -8
  70. package/components/graph/index.js +3 -4
  71. package/components/graph/index.js.map +1 -1
  72. package/components/graph/modules/layout.d.ts +7 -7
  73. package/components/graph/modules/layout.js.map +1 -1
  74. package/components/graph/modules/link/helper.d.ts +5 -5
  75. package/components/graph/modules/link/helper.js.map +1 -1
  76. package/components/graph/modules/link/index.d.ts +6 -6
  77. package/components/graph/modules/link/index.js.map +1 -1
  78. package/components/graph/modules/node/index.d.ts +6 -6
  79. package/components/graph/modules/node/index.js +2 -2
  80. package/components/graph/modules/node/index.js.map +1 -1
  81. package/components/graph/modules/panel/helper.d.ts +4 -4
  82. package/components/graph/modules/panel/helper.js.map +1 -1
  83. package/components/graph/modules/panel/index.d.ts +3 -3
  84. package/components/graph/modules/panel/index.js.map +1 -1
  85. package/components/grouped-bar/config.d.ts +13 -5
  86. package/components/grouped-bar/config.js +16 -5
  87. package/components/grouped-bar/config.js.map +1 -1
  88. package/components/grouped-bar/index.d.ts +3 -4
  89. package/components/grouped-bar/index.js +3 -4
  90. package/components/grouped-bar/index.js.map +1 -1
  91. package/components/leaflet-flow-map/config.d.ts +16 -2
  92. package/components/leaflet-flow-map/config.js +21 -3
  93. package/components/leaflet-flow-map/config.js.map +1 -1
  94. package/components/leaflet-flow-map/index.d.ts +3 -4
  95. package/components/leaflet-flow-map/index.js +2 -3
  96. package/components/leaflet-flow-map/index.js.map +1 -1
  97. package/components/leaflet-map/config.d.ts +59 -4
  98. package/components/leaflet-map/config.js +67 -23
  99. package/components/leaflet-map/config.js.map +1 -1
  100. package/components/leaflet-map/index.d.ts +3 -4
  101. package/components/leaflet-map/index.js +3 -4
  102. package/components/leaflet-map/index.js.map +1 -1
  103. package/components/leaflet-map/modules/map.d.ts +3 -3
  104. package/components/leaflet-map/modules/map.js.map +1 -1
  105. package/components/leaflet-map/modules/utils.d.ts +4 -4
  106. package/components/leaflet-map/modules/utils.js +2 -6
  107. package/components/leaflet-map/modules/utils.js.map +1 -1
  108. package/components/leaflet-map/renderer/mapboxgl-layer.d.ts +2 -2
  109. package/components/leaflet-map/renderer/mapboxgl-layer.js.map +1 -1
  110. package/components/line/config.d.ts +11 -6
  111. package/components/line/config.js +13 -3
  112. package/components/line/config.js.map +1 -1
  113. package/components/line/index.d.ts +3 -4
  114. package/components/line/index.js +4 -5
  115. package/components/line/index.js.map +1 -1
  116. package/components/nested-donut/config.d.ts +21 -2
  117. package/components/nested-donut/config.js +24 -3
  118. package/components/nested-donut/config.js.map +1 -1
  119. package/components/nested-donut/index.d.ts +3 -4
  120. package/components/nested-donut/index.js +3 -4
  121. package/components/nested-donut/index.js.map +1 -1
  122. package/components/nested-donut/modules/arc.d.ts +3 -3
  123. package/components/nested-donut/modules/arc.js.map +1 -1
  124. package/components/nested-donut/modules/label.d.ts +2 -2
  125. package/components/nested-donut/modules/label.js.map +1 -1
  126. package/components/sankey/config.d.ts +47 -2
  127. package/components/sankey/config.js +57 -10
  128. package/components/sankey/config.js.map +1 -1
  129. package/components/sankey/index.d.ts +3 -4
  130. package/components/sankey/index.js +2 -3
  131. package/components/sankey/index.js.map +1 -1
  132. package/components/sankey/modules/label.d.ts +7 -7
  133. package/components/sankey/modules/label.js.map +1 -1
  134. package/components/sankey/modules/link.d.ts +2 -2
  135. package/components/sankey/modules/link.js.map +1 -1
  136. package/components/sankey/modules/node.d.ts +7 -7
  137. package/components/sankey/modules/node.js +1 -1
  138. package/components/sankey/modules/node.js.map +1 -1
  139. package/components/scatter/config.d.ts +16 -4
  140. package/components/scatter/config.js +19 -5
  141. package/components/scatter/config.js.map +1 -1
  142. package/components/scatter/index.d.ts +3 -4
  143. package/components/scatter/index.js +5 -5
  144. package/components/scatter/index.js.map +1 -1
  145. package/components/scatter/modules/point.d.ts +2 -2
  146. package/components/scatter/modules/point.js.map +1 -1
  147. package/components/scatter/modules/utils.d.ts +2 -2
  148. package/components/scatter/modules/utils.js.map +1 -1
  149. package/components/stacked-bar/config.d.ts +13 -5
  150. package/components/stacked-bar/config.js +16 -5
  151. package/components/stacked-bar/config.js.map +1 -1
  152. package/components/stacked-bar/index.d.ts +3 -4
  153. package/components/stacked-bar/index.js +3 -4
  154. package/components/stacked-bar/index.js.map +1 -1
  155. package/components/timeline/config.d.ts +16 -5
  156. package/components/timeline/config.js +21 -9
  157. package/components/timeline/config.js.map +1 -1
  158. package/components/timeline/index.d.ts +3 -4
  159. package/components/timeline/index.js +3 -4
  160. package/components/timeline/index.js.map +1 -1
  161. package/components/tooltip/config.d.ts +15 -1
  162. package/components/tooltip/config.js +16 -12
  163. package/components/tooltip/config.js.map +1 -1
  164. package/components/tooltip/index.d.ts +3 -4
  165. package/components/tooltip/index.js +3 -5
  166. package/components/tooltip/index.js.map +1 -1
  167. package/components/topojson-map/config.d.ts +36 -4
  168. package/components/topojson-map/config.js +38 -3
  169. package/components/topojson-map/config.js.map +1 -1
  170. package/components/topojson-map/index.d.ts +3 -4
  171. package/components/topojson-map/index.js +4 -4
  172. package/components/topojson-map/index.js.map +1 -1
  173. package/components/vis-controls/config.d.ts +5 -1
  174. package/components/vis-controls/config.js +9 -6
  175. package/components/vis-controls/config.js.map +1 -1
  176. package/components/vis-controls/index.d.ts +2 -3
  177. package/components/vis-controls/index.js +2 -5
  178. package/components/vis-controls/index.js.map +1 -1
  179. package/components/xy-labels/config.d.ts +16 -4
  180. package/components/xy-labels/config.js +20 -5
  181. package/components/xy-labels/config.js.map +1 -1
  182. package/components/xy-labels/index.d.ts +3 -4
  183. package/components/xy-labels/index.js +2 -3
  184. package/components/xy-labels/index.js.map +1 -1
  185. package/components/xy-labels/modules/label.d.ts +3 -3
  186. package/components/xy-labels/modules/label.js +1 -1
  187. package/components/xy-labels/modules/label.js.map +1 -1
  188. package/containers/single-container/config.d.ts +4 -2
  189. package/containers/single-container/config.js +8 -3
  190. package/containers/single-container/config.js.map +1 -1
  191. package/containers/single-container/index.d.ts +3 -4
  192. package/containers/single-container/index.js +2 -2
  193. package/containers/single-container/index.js.map +1 -1
  194. package/containers/xy-container/config.d.ts +22 -2
  195. package/containers/xy-container/config.js +26 -3
  196. package/containers/xy-container/config.js.map +1 -1
  197. package/containers/xy-container/index.d.ts +2 -5
  198. package/containers/xy-container/index.js +2 -2
  199. package/containers/xy-container/index.js.map +1 -1
  200. package/core/component/config.d.ts +6 -1
  201. package/core/component/config.js +12 -6
  202. package/core/component/config.js.map +1 -1
  203. package/core/component/index.d.ts +5 -7
  204. package/core/component/index.js +7 -8
  205. package/core/component/index.js.map +1 -1
  206. package/core/config/index.d.ts +3 -0
  207. package/core/config/index.js +16 -0
  208. package/core/config/index.js.map +1 -0
  209. package/core/container/config.d.ts +21 -1
  210. package/core/container/config.js +25 -21
  211. package/core/container/config.js.map +1 -1
  212. package/core/container/index.d.ts +4 -5
  213. package/core/container/index.js +3 -4
  214. package/core/container/index.js.map +1 -1
  215. package/core/xy-component/config.d.ts +10 -2
  216. package/core/xy-component/config.js +16 -7
  217. package/core/xy-component/config.js.map +1 -1
  218. package/core/xy-component/index.d.ts +4 -5
  219. package/core/xy-component/index.js +0 -2
  220. package/core/xy-component/index.js.map +1 -1
  221. package/data-models/map-graph.d.ts +1 -1
  222. package/data-models/map-graph.js +1 -1
  223. package/data-models/map-graph.js.map +1 -1
  224. package/package.json +1 -1
  225. package/types/accessor.d.ts +1 -1
  226. package/utils/data.d.ts +1 -1
  227. package/utils/data.js.map +1 -1
@@ -3,16 +3,16 @@ import { NumericAccessor, BooleanAccessor } from "../../../../types/accessor";
3
3
  import { GraphInputLink, GraphInputNode } from "../../../../types/graph";
4
4
  import { Spacing } from "../../../../types/spacing";
5
5
  import { GraphNode, GraphPanel, GraphPanelConfig } from '../../types';
6
- import { GraphConfigInterface } from '../../config';
6
+ import { GraphConfig } from '../../config';
7
7
  export declare const DEFAULT_PADDING = 15;
8
8
  export declare const DEFAULT_LABEL_MARGIN = 16;
9
9
  export declare const OUTLINE_SELECTION_PADDING = 5;
10
10
  export declare const DEFAULT_SIDE_LABEL_SIZE = 25;
11
11
  export declare function getPanelPadding(padding: number | Spacing | undefined): Spacing;
12
12
  export declare function initPanels(panelsConfig: GraphPanelConfig[] | undefined): GraphPanel[];
13
- export declare function setPanelForNodes<N extends GraphInputNode, L extends GraphInputLink>(panels: GraphPanel[], nodes: GraphNode<N, L>[], config: GraphConfigInterface<N, L>): void;
13
+ export declare function setPanelForNodes<N extends GraphInputNode, L extends GraphInputLink>(panels: GraphPanel[], nodes: GraphNode<N, L>[], config: GraphConfig<N, L>): void;
14
14
  export declare function setPanelBBox<N extends GraphInputNode, L extends GraphInputLink>(panelConfig: GraphPanel, panelNodes: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>, nodeSizeAccessor: NumericAccessor<N>, nodeDisabledAccessor: BooleanAccessor<N>): void;
15
15
  export declare function setPanelNumNodes<N extends GraphInputNode, L extends GraphInputLink>(panelConfig: GraphPanel, panelNodes: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>): void;
16
- export declare function updatePanelBBoxSize<N extends GraphInputNode, L extends GraphInputLink>(nodesSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>, panels: GraphPanel[], config: GraphConfigInterface<N, L>): void;
17
- export declare function updatePanelNumNodes<N extends GraphInputNode, L extends GraphInputLink>(nodesSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>, panels: GraphPanel[], config: GraphConfigInterface<N, L>): void;
16
+ export declare function updatePanelBBoxSize<N extends GraphInputNode, L extends GraphInputLink>(nodesSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>, panels: GraphPanel[], config: GraphConfig<N, L>): void;
17
+ export declare function updatePanelNumNodes<N extends GraphInputNode, L extends GraphInputLink>(nodesSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>, panels: GraphPanel[], config: GraphConfig<N, L>): void;
18
18
  export declare function getLabelTranslateTransform<N extends GraphInputNode, L extends GraphInputLink>(panel: GraphPanel): string;
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sources":["../../../../../src/components/graph/modules/panel/helper.ts"],"sourcesContent":["import { Selection } from 'd3-selection'\n\n// Types\nimport { NumericAccessor, BooleanAccessor } from 'types/accessor'\nimport { Position } from 'types/position'\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\nimport { Spacing } from 'types/spacing'\n\n// Utils\nimport { getBoolean, isPlainObject } from 'utils/data'\n\n// Local Types\nimport { GraphNode, GraphPanel, GraphPanelConfig } from '../../types'\n\n// Config\nimport { GraphConfigInterface } from '../../config'\n\n// Helpers\nimport { getX, getY, getNodeSize } from '../node/helper'\n\n// Styles\nimport * as nodeSelectors from '../node/style'\n\nexport const DEFAULT_PADDING = 15\nexport const DEFAULT_LABEL_MARGIN = 16\nexport const OUTLINE_SELECTION_PADDING = 5\nexport const DEFAULT_SIDE_LABEL_SIZE = 25\n\nexport function getPanelPadding (padding: number | Spacing | undefined): Spacing {\n const isPaddingAnObject = isPlainObject(padding)\n return {\n left: (isPaddingAnObject ? (padding as Spacing).left : (padding as number)) ?? DEFAULT_PADDING,\n right: (isPaddingAnObject ? (padding as Spacing).right : (padding as number)) ?? DEFAULT_PADDING,\n top: (isPaddingAnObject ? (padding as Spacing).top : (padding as number)) ?? DEFAULT_PADDING,\n bottom: (isPaddingAnObject ? (padding as Spacing).bottom : (padding as number)) ?? DEFAULT_PADDING,\n }\n}\n\nexport function initPanels (panelsConfig: GraphPanelConfig[] | undefined): GraphPanel[] {\n const panels = (panelsConfig ?? []).map(p => ({\n ...p,\n _padding: getPanelPadding(p.padding),\n })) as GraphPanel[]\n\n return panels\n}\n\nexport function setPanelForNodes<N extends GraphInputNode, L extends GraphInputLink> (\n panels: GraphPanel[],\n nodes: GraphNode<N, L>[],\n config: GraphConfigInterface<N, L>\n): void {\n if (!panels) return\n\n // For each node store its related panels\n nodes.forEach(node => {\n // Find all panels to which node belong\n const nodePanels = panels.filter(panel => panel.nodes && panel.nodes.includes(node._id))\n node._panels = nodePanels\n })\n}\n\nexport function setPanelBBox<N extends GraphInputNode, L extends GraphInputLink> (\n panelConfig: GraphPanel,\n panelNodes: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n nodeSizeAccessor: NumericAccessor<N>,\n nodeDisabledAccessor: BooleanAccessor<N>\n): void {\n const selection = panelNodes.select(`.${nodeSelectors.node}`)\n if (selection.empty()) return\n\n const labelApprxHeight = 40\n const labelApprxWidth = 110\n const labelMargin = 10\n let box: { x1: number; x2: number; y1: number; y2: number }\n\n selection.each((d, i) => {\n const nodeSize = getNodeSize(d, nodeSizeAccessor, i)\n const w = Math.max(nodeSize, labelApprxWidth)\n const h = nodeSize + labelMargin + labelApprxHeight\n // const nodeBBox = node.getBBox()\n const yShift = 10 // This is hard to calculate, so we just use an approximation\n\n const coords = {\n x1: getX(d) - w / 2, // We use d.x and d.y instead of bBox values here because `gBBox` contains initial ...\n y1: getY(d) - h / 2 + yShift, // ... coordinates (before transition starts), not target coordinates\n x2: getX(d) + w / 2,\n y2: getY(d) + h / 2 + yShift,\n }\n\n if (!box) {\n box = {\n ...coords,\n }\n } else {\n if (box.x1 > coords.x1) box.x1 = coords.x1\n if (box.y1 > coords.y1) box.y1 = coords.y1\n if (box.x2 < coords.x2) box.x2 = coords.x2\n if (box.y2 < coords.y2) box.y2 = coords.y2\n }\n })\n\n panelConfig._x = box.x1 - panelConfig._padding.left\n panelConfig._y = box.y1 - panelConfig._padding.top\n panelConfig._width = box.x2 - box.x1 + panelConfig._padding.left + panelConfig._padding.right\n panelConfig._height = box.y2 - box.y1 + panelConfig._padding.top + panelConfig._padding.bottom\n panelConfig._disabled = selection.data()\n .map((node, i) => getBoolean(node, nodeDisabledAccessor, node._index) || node._state.greyout)\n .every(d => d)\n}\n\nexport function setPanelNumNodes<N extends GraphInputNode, L extends GraphInputLink> (\n panelConfig: GraphPanel,\n panelNodes: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n): void {\n panelConfig._numNodes = panelNodes.size()\n}\n\nexport function updatePanelBBoxSize<N extends GraphInputNode, L extends GraphInputLink> (\n nodesSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n panels: GraphPanel[],\n config: GraphConfigInterface<N, L>\n): void {\n const { layoutNonConnectedAside } = config\n if (!panels) return\n\n panels.forEach(panelConfig => {\n const panelNodes = nodesSelection.filter(node => {\n return (!layoutNonConnectedAside || node._isConnected) && panelConfig.nodes.includes(node._id)\n })\n setPanelBBox(panelConfig, panelNodes, config.nodeSize, config.nodeDisabled)\n })\n}\n\nexport function updatePanelNumNodes<N extends GraphInputNode, L extends GraphInputLink> (\n nodesSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n panels: GraphPanel[],\n config: GraphConfigInterface<N, L>\n): void {\n const { layoutNonConnectedAside } = config\n if (!panels) return\n\n panels.forEach(panelConfig => {\n const panelNodes = nodesSelection.filter(node => {\n return (!layoutNonConnectedAside || node._isConnected) && panelConfig.nodes.includes(node._id)\n })\n setPanelNumNodes(panelConfig, panelNodes)\n })\n}\n\nexport function getLabelTranslateTransform<N extends GraphInputNode, L extends GraphInputLink> (panel: GraphPanel): string {\n const x = panel._width / 2\n const dy = DEFAULT_LABEL_MARGIN + (panel.dashedOutline ? OUTLINE_SELECTION_PADDING : 0)\n const y = panel.labelPosition === Position.Bottom\n ? panel._height + dy\n : -dy\n\n return `translate(${x}, ${y})`\n}\n\n"],"names":["nodeSelectors.node"],"mappings":"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"}
1
+ {"version":3,"file":"helper.js","sources":["../../../../../src/components/graph/modules/panel/helper.ts"],"sourcesContent":["import { Selection } from 'd3-selection'\n\n// Types\nimport { NumericAccessor, BooleanAccessor } from 'types/accessor'\nimport { Position } from 'types/position'\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\nimport { Spacing } from 'types/spacing'\n\n// Utils\nimport { getBoolean, isPlainObject } from 'utils/data'\n\n// Local Types\nimport { GraphNode, GraphPanel, GraphPanelConfig } from '../../types'\n\n// Config\nimport { GraphConfig } from '../../config'\n\n// Helpers\nimport { getX, getY, getNodeSize } from '../node/helper'\n\n// Styles\nimport * as nodeSelectors from '../node/style'\n\nexport const DEFAULT_PADDING = 15\nexport const DEFAULT_LABEL_MARGIN = 16\nexport const OUTLINE_SELECTION_PADDING = 5\nexport const DEFAULT_SIDE_LABEL_SIZE = 25\n\nexport function getPanelPadding (padding: number | Spacing | undefined): Spacing {\n const isPaddingAnObject = isPlainObject(padding)\n return {\n left: (isPaddingAnObject ? (padding as Spacing).left : (padding as number)) ?? DEFAULT_PADDING,\n right: (isPaddingAnObject ? (padding as Spacing).right : (padding as number)) ?? DEFAULT_PADDING,\n top: (isPaddingAnObject ? (padding as Spacing).top : (padding as number)) ?? DEFAULT_PADDING,\n bottom: (isPaddingAnObject ? (padding as Spacing).bottom : (padding as number)) ?? DEFAULT_PADDING,\n }\n}\n\nexport function initPanels (panelsConfig: GraphPanelConfig[] | undefined): GraphPanel[] {\n const panels = (panelsConfig ?? []).map(p => ({\n ...p,\n _padding: getPanelPadding(p.padding),\n })) as GraphPanel[]\n\n return panels\n}\n\nexport function setPanelForNodes<N extends GraphInputNode, L extends GraphInputLink> (\n panels: GraphPanel[],\n nodes: GraphNode<N, L>[],\n config: GraphConfig<N, L>\n): void {\n if (!panels) return\n\n // For each node store its related panels\n nodes.forEach(node => {\n // Find all panels to which node belong\n const nodePanels = panels.filter(panel => panel.nodes && panel.nodes.includes(node._id))\n node._panels = nodePanels\n })\n}\n\nexport function setPanelBBox<N extends GraphInputNode, L extends GraphInputLink> (\n panelConfig: GraphPanel,\n panelNodes: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n nodeSizeAccessor: NumericAccessor<N>,\n nodeDisabledAccessor: BooleanAccessor<N>\n): void {\n const selection = panelNodes.select(`.${nodeSelectors.node}`)\n if (selection.empty()) return\n\n const labelApprxHeight = 40\n const labelApprxWidth = 110\n const labelMargin = 10\n let box: { x1: number; x2: number; y1: number; y2: number }\n\n selection.each((d, i) => {\n const nodeSize = getNodeSize(d, nodeSizeAccessor, i)\n const w = Math.max(nodeSize, labelApprxWidth)\n const h = nodeSize + labelMargin + labelApprxHeight\n // const nodeBBox = node.getBBox()\n const yShift = 10 // This is hard to calculate, so we just use an approximation\n\n const coords = {\n x1: getX(d) - w / 2, // We use d.x and d.y instead of bBox values here because `gBBox` contains initial ...\n y1: getY(d) - h / 2 + yShift, // ... coordinates (before transition starts), not target coordinates\n x2: getX(d) + w / 2,\n y2: getY(d) + h / 2 + yShift,\n }\n\n if (!box) {\n box = {\n ...coords,\n }\n } else {\n if (box.x1 > coords.x1) box.x1 = coords.x1\n if (box.y1 > coords.y1) box.y1 = coords.y1\n if (box.x2 < coords.x2) box.x2 = coords.x2\n if (box.y2 < coords.y2) box.y2 = coords.y2\n }\n })\n\n panelConfig._x = box.x1 - panelConfig._padding.left\n panelConfig._y = box.y1 - panelConfig._padding.top\n panelConfig._width = box.x2 - box.x1 + panelConfig._padding.left + panelConfig._padding.right\n panelConfig._height = box.y2 - box.y1 + panelConfig._padding.top + panelConfig._padding.bottom\n panelConfig._disabled = selection.data()\n .map((node, i) => getBoolean(node, nodeDisabledAccessor, node._index) || node._state.greyout)\n .every(d => d)\n}\n\nexport function setPanelNumNodes<N extends GraphInputNode, L extends GraphInputLink> (\n panelConfig: GraphPanel,\n panelNodes: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n): void {\n panelConfig._numNodes = panelNodes.size()\n}\n\nexport function updatePanelBBoxSize<N extends GraphInputNode, L extends GraphInputLink> (\n nodesSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n panels: GraphPanel[],\n config: GraphConfig<N, L>\n): void {\n const { layoutNonConnectedAside } = config\n if (!panels) return\n\n panels.forEach(panelConfig => {\n const panelNodes = nodesSelection.filter(node => {\n return (!layoutNonConnectedAside || node._isConnected) && panelConfig.nodes.includes(node._id)\n })\n setPanelBBox(panelConfig, panelNodes, config.nodeSize, config.nodeDisabled)\n })\n}\n\nexport function updatePanelNumNodes<N extends GraphInputNode, L extends GraphInputLink> (\n nodesSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n panels: GraphPanel[],\n config: GraphConfig<N, L>\n): void {\n const { layoutNonConnectedAside } = config\n if (!panels) return\n\n panels.forEach(panelConfig => {\n const panelNodes = nodesSelection.filter(node => {\n return (!layoutNonConnectedAside || node._isConnected) && panelConfig.nodes.includes(node._id)\n })\n setPanelNumNodes(panelConfig, panelNodes)\n })\n}\n\nexport function getLabelTranslateTransform<N extends GraphInputNode, L extends GraphInputLink> (panel: GraphPanel): string {\n const x = panel._width / 2\n const dy = DEFAULT_LABEL_MARGIN + (panel.dashedOutline ? OUTLINE_SELECTION_PADDING : 0)\n const y = panel.labelPosition === Position.Bottom\n ? panel._height + dy\n : -dy\n\n return `translate(${x}, ${y})`\n}\n\n"],"names":["nodeSelectors.node"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Selection } from 'd3-selection';
2
2
  import { GraphInputLink, GraphInputNode } from "../../../../types/graph";
3
3
  import { GraphNode, GraphLink, GraphPanel } from '../../types';
4
- import { GraphConfigInterface } from '../../config';
4
+ import { GraphConfig } from '../../config';
5
5
  export declare function createPanels<N extends GraphNode, L extends GraphLink>(selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>): void;
6
- export declare function updatePanels<N extends GraphNode, L extends GraphLink>(selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>, config: GraphConfigInterface<GraphInputNode, GraphInputLink>, duration: number): void;
7
- export declare function removePanels<N extends GraphNode, L extends GraphLink>(selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>, config: GraphConfigInterface<GraphInputNode, GraphInputLink>, duration: number): void;
6
+ export declare function updatePanels<N extends GraphNode, L extends GraphLink>(selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>, config: GraphConfig<GraphInputNode, GraphInputLink>, duration: number): void;
7
+ export declare function removePanels<N extends GraphNode, L extends GraphLink>(selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>, config: GraphConfig<GraphInputNode, GraphInputLink>, duration: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/panel/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Utils\nimport { trimString } from 'utils/text'\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Local Types\nimport { GraphNode, GraphLink, GraphPanel } from '../../types'\n\n// Config\nimport { GraphConfigInterface } from '../../config'\n\n// Helpers\nimport { setLabelRect } from '../node/helper'\nimport { getLabelTranslateTransform, OUTLINE_SELECTION_PADDING, DEFAULT_SIDE_LABEL_SIZE } from './helper'\n\n// Styles\nimport * as panelSelectors from './style'\nimport { appendShape, updateShape } from '../shape'\n\nexport function createPanels<N extends GraphNode, L extends GraphLink> (\n selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>\n): void {\n selection\n .attr('transform', d => `translate(${d._x}, ${d._y})`)\n .style('opacity', 0)\n\n selection.append('rect').attr('class', panelSelectors.panelSelection)\n .attr('rx', 9)\n .attr('ry', 9)\n .attr('width', d => d._width)\n .attr('height', d => d._height)\n\n selection.append('rect').attr('class', panelSelectors.panel)\n .attr('rx', 7)\n .attr('ry', 7)\n .attr('width', d => d._width)\n .attr('height', d => d._height)\n\n const panelLabel = selection.append('g').attr('class', panelSelectors.label)\n .attr('transform', getLabelTranslateTransform)\n panelLabel.append('rect').attr('class', panelSelectors.background)\n panelLabel.append('text').attr('class', panelSelectors.labelText)\n .attr('dy', '0.32em')\n\n const sideIcon = selection.append('g')\n .attr('class', panelSelectors.sideIconGroup)\n .attr('transform', (d, i, elements) => {\n const dx = -OUTLINE_SELECTION_PADDING\n const dy = -OUTLINE_SELECTION_PADDING\n return `translate(${d._width + dx}, ${-dy})`\n })\n appendShape(sideIcon, (d: GraphPanel) => d.sideIconShape, panelSelectors.sideIconShape, panelSelectors.customSideIcon)\n sideIcon.append('text').attr('class', panelSelectors.sideIconSymbol)\n}\n\nexport function updatePanels<N extends GraphNode, L extends GraphLink> (\n selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>,\n config: GraphConfigInterface<GraphInputNode, GraphInputLink>,\n duration: number\n): void {\n smartTransition(selection, duration)\n .attr('transform', d => `translate(${d._x}, ${d._y})`)\n .style('opacity', d => d._disabled ? 0.4 : 1)\n\n const panels = selection.selectAll<SVGRectElement, GraphPanel>(`.${panelSelectors.panel}`).data(d => [d])\n smartTransition(panels, duration)\n .attr('width', d => d._width)\n .attr('height', d => d._height)\n .style('stroke', d => d.borderColor)\n .style('stroke-width', d => d.borderWidth)\n\n const panelSelection = selection.select<SVGRectElement>(`.${panelSelectors.panelSelection}`)\n .classed(panelSelectors.panelSelectionActive, d => d.dashedOutline)\n\n smartTransition(panelSelection, duration)\n .attr('x', d => -OUTLINE_SELECTION_PADDING)\n .attr('y', d => -OUTLINE_SELECTION_PADDING)\n .attr('width', d => d._width + OUTLINE_SELECTION_PADDING * 2)\n .attr('height', d => d._height + OUTLINE_SELECTION_PADDING * 2)\n\n const sideIcon = selection.select<SVGGElement>(`.${panelSelectors.sideIconGroup}`)\n\n sideIcon.select<SVGGElement>(`.${panelSelectors.sideIconShape}`)\n .call(updateShape, (d: GraphPanel) => d.sideIconShape, (d: GraphPanel) => d.sideIconShapeSize ?? DEFAULT_SIDE_LABEL_SIZE)\n .style('stroke', d => d.sideIconShapeStroke)\n .style('cursor', d => d.sideIconCursor ?? null)\n .style('opacity', d => d.sideIconShape ? 1 : 0)\n\n sideIcon.select(`.${panelSelectors.sideIconSymbol}`)\n .html(d => d.sideIconSymbol)\n .attr('dy', 1)\n .style('fill', d => d.sideIconSymbolColor)\n .style('font-size', d => d.sideIconFontSize ?? ((d.sideIconShapeSize ?? DEFAULT_SIDE_LABEL_SIZE) / 2.5))\n\n smartTransition(sideIcon, duration)\n .attr('transform', d => {\n const dx = -OUTLINE_SELECTION_PADDING\n const dy = -OUTLINE_SELECTION_PADDING\n return `translate(${d._width + dx}, ${-dy})`\n })\n\n const panelLabel = selection.select<SVGGElement>(`.${panelSelectors.label}`)\n\n panelLabel.select<SVGTextElement>(`.${panelSelectors.labelText}`)\n .text(d => trimString(d.label))\n\n smartTransition(panelLabel, duration)\n .attr('transform', getLabelTranslateTransform)\n\n panelLabel\n .on('mouseover', (event: MouseEvent, d) => {\n const label = select<SVGGElement, GraphPanel<N, L>>(event.currentTarget as SVGGElement)\n const labelContent = d.label\n label.select('text').text(labelContent)\n setLabelRect(label, labelContent, panelSelectors.labelText)\n })\n .on('mouseleave', (event: MouseEvent, d) => {\n const label = select<SVGGElement, GraphPanel<N, L>>(event.currentTarget as SVGGElement)\n const labelContent = trimString(d.label)\n label.select('text').text(labelContent)\n setLabelRect(label, labelContent, panelSelectors.labelText)\n })\n}\n\nexport function removePanels<N extends GraphNode, L extends GraphLink> (\n selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>,\n config: GraphConfigInterface<GraphInputNode, GraphInputLink>,\n duration: number\n): void {\n smartTransition(selection, duration / 2)\n .style('opacity', 0)\n .remove()\n}\n"],"names":["panelSelectors.panelSelection","panelSelectors.panel","panelSelectors.label","panelSelectors.background","panelSelectors.labelText","panelSelectors.sideIconGroup","panelSelectors.sideIconShape","panelSelectors.customSideIcon","panelSelectors.sideIconSymbol","panelSelection","panelSelectors.panelSelectionActive"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/panel/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Utils\nimport { trimString } from 'utils/text'\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Local Types\nimport { GraphNode, GraphLink, GraphPanel } from '../../types'\n\n// Config\nimport { GraphConfig } from '../../config'\n\n// Helpers\nimport { setLabelRect } from '../node/helper'\nimport { getLabelTranslateTransform, OUTLINE_SELECTION_PADDING, DEFAULT_SIDE_LABEL_SIZE } from './helper'\n\n// Styles\nimport * as panelSelectors from './style'\nimport { appendShape, updateShape } from '../shape'\n\nexport function createPanels<N extends GraphNode, L extends GraphLink> (\n selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>\n): void {\n selection\n .attr('transform', d => `translate(${d._x}, ${d._y})`)\n .style('opacity', 0)\n\n selection.append('rect').attr('class', panelSelectors.panelSelection)\n .attr('rx', 9)\n .attr('ry', 9)\n .attr('width', d => d._width)\n .attr('height', d => d._height)\n\n selection.append('rect').attr('class', panelSelectors.panel)\n .attr('rx', 7)\n .attr('ry', 7)\n .attr('width', d => d._width)\n .attr('height', d => d._height)\n\n const panelLabel = selection.append('g').attr('class', panelSelectors.label)\n .attr('transform', getLabelTranslateTransform)\n panelLabel.append('rect').attr('class', panelSelectors.background)\n panelLabel.append('text').attr('class', panelSelectors.labelText)\n .attr('dy', '0.32em')\n\n const sideIcon = selection.append('g')\n .attr('class', panelSelectors.sideIconGroup)\n .attr('transform', (d, i, elements) => {\n const dx = -OUTLINE_SELECTION_PADDING\n const dy = -OUTLINE_SELECTION_PADDING\n return `translate(${d._width + dx}, ${-dy})`\n })\n appendShape(sideIcon, (d: GraphPanel) => d.sideIconShape, panelSelectors.sideIconShape, panelSelectors.customSideIcon)\n sideIcon.append('text').attr('class', panelSelectors.sideIconSymbol)\n}\n\nexport function updatePanels<N extends GraphNode, L extends GraphLink> (\n selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>,\n config: GraphConfig<GraphInputNode, GraphInputLink>,\n duration: number\n): void {\n smartTransition(selection, duration)\n .attr('transform', d => `translate(${d._x}, ${d._y})`)\n .style('opacity', d => d._disabled ? 0.4 : 1)\n\n const panels = selection.selectAll<SVGRectElement, GraphPanel>(`.${panelSelectors.panel}`).data(d => [d])\n smartTransition(panels, duration)\n .attr('width', d => d._width)\n .attr('height', d => d._height)\n .style('stroke', d => d.borderColor)\n .style('stroke-width', d => d.borderWidth)\n\n const panelSelection = selection.select<SVGRectElement>(`.${panelSelectors.panelSelection}`)\n .classed(panelSelectors.panelSelectionActive, d => d.dashedOutline)\n\n smartTransition(panelSelection, duration)\n .attr('x', d => -OUTLINE_SELECTION_PADDING)\n .attr('y', d => -OUTLINE_SELECTION_PADDING)\n .attr('width', d => d._width + OUTLINE_SELECTION_PADDING * 2)\n .attr('height', d => d._height + OUTLINE_SELECTION_PADDING * 2)\n\n const sideIcon = selection.select<SVGGElement>(`.${panelSelectors.sideIconGroup}`)\n\n sideIcon.select<SVGGElement>(`.${panelSelectors.sideIconShape}`)\n .call(updateShape, (d: GraphPanel) => d.sideIconShape, (d: GraphPanel) => d.sideIconShapeSize ?? DEFAULT_SIDE_LABEL_SIZE)\n .style('stroke', d => d.sideIconShapeStroke)\n .style('cursor', d => d.sideIconCursor ?? null)\n .style('opacity', d => d.sideIconShape ? 1 : 0)\n\n sideIcon.select(`.${panelSelectors.sideIconSymbol}`)\n .html(d => d.sideIconSymbol)\n .attr('dy', 1)\n .style('fill', d => d.sideIconSymbolColor)\n .style('font-size', d => d.sideIconFontSize ?? ((d.sideIconShapeSize ?? DEFAULT_SIDE_LABEL_SIZE) / 2.5))\n\n smartTransition(sideIcon, duration)\n .attr('transform', d => {\n const dx = -OUTLINE_SELECTION_PADDING\n const dy = -OUTLINE_SELECTION_PADDING\n return `translate(${d._width + dx}, ${-dy})`\n })\n\n const panelLabel = selection.select<SVGGElement>(`.${panelSelectors.label}`)\n\n panelLabel.select<SVGTextElement>(`.${panelSelectors.labelText}`)\n .text(d => trimString(d.label))\n\n smartTransition(panelLabel, duration)\n .attr('transform', getLabelTranslateTransform)\n\n panelLabel\n .on('mouseover', (event: MouseEvent, d) => {\n const label = select<SVGGElement, GraphPanel<N, L>>(event.currentTarget as SVGGElement)\n const labelContent = d.label\n label.select('text').text(labelContent)\n setLabelRect(label, labelContent, panelSelectors.labelText)\n })\n .on('mouseleave', (event: MouseEvent, d) => {\n const label = select<SVGGElement, GraphPanel<N, L>>(event.currentTarget as SVGGElement)\n const labelContent = trimString(d.label)\n label.select('text').text(labelContent)\n setLabelRect(label, labelContent, panelSelectors.labelText)\n })\n}\n\nexport function removePanels<N extends GraphNode, L extends GraphLink> (\n selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>,\n config: GraphConfig<GraphInputNode, GraphInputLink>,\n duration: number\n): void {\n smartTransition(selection, duration / 2)\n .style('opacity', 0)\n .remove()\n}\n"],"names":["panelSelectors.panelSelection","panelSelectors.panel","panelSelectors.label","panelSelectors.background","panelSelectors.labelText","panelSelectors.sideIconGroup","panelSelectors.sideIconShape","panelSelectors.customSideIcon","panelSelectors.sideIconSymbol","panelSelection","panelSelectors.panelSelectionActive"],"mappings":"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"}
@@ -1,9 +1,7 @@
1
- import { XYComponentConfigInterface } from "../../core/xy-component/config";
2
- import { ColorAccessor, StringAccessor } from "../../types/accessor";
1
+ import { XYComponentConfigInterface, XYComponentConfig } from "../../core/xy-component/config";
2
+ import { StringAccessor } from "../../types/accessor";
3
3
  import { Orientation } from "../../types/position";
4
4
  export interface GroupedBarConfigInterface<Datum> extends XYComponentConfigInterface<Datum> {
5
- /** Bar color accessor function. Default: `d => d.color` */
6
- color?: ColorAccessor<Datum>;
7
5
  /** Force set the group width in pixels. Default: `undefined` */
8
6
  groupWidth?: number;
9
7
  /** Maximum group width for dynamic sizing. Limits the groupWidth property from the top. Default: `undefined` */
@@ -25,4 +23,14 @@ export interface GroupedBarConfigInterface<Datum> extends XYComponentConfigInter
25
23
  /** Chart orientation: `Orientation.Vertical` or `Orientation.Horizontal`. Default `Orientation.Vertical` */
26
24
  orientation?: Orientation | string;
27
25
  }
28
- export declare const GroupedBarDefaultConfig: GroupedBarConfigInterface<unknown>;
26
+ export declare class GroupedBarConfig<Datum> extends XYComponentConfig<Datum> implements GroupedBarConfigInterface<Datum> {
27
+ groupMaxWidth: any;
28
+ groupWidth: any;
29
+ dataStep: any;
30
+ groupPadding: number;
31
+ barPadding: number;
32
+ roundedCorners: number;
33
+ barMinHeight: number;
34
+ cursor: any;
35
+ orientation: Orientation;
36
+ }
@@ -1,9 +1,20 @@
1
- import { XYComponentDefaultConfig } from '../../core/xy-component/config.js';
1
+ import { XYComponentConfig } from '../../core/xy-component/config.js';
2
2
  import { Orientation } from '../../types/position.js';
3
3
 
4
- const GroupedBarDefaultConfig = Object.assign(Object.assign({}, XYComponentDefaultConfig), {
5
- // eslint-disable-next-line dot-notation
6
- color: (d) => d['color'], groupMaxWidth: undefined, groupWidth: undefined, dataStep: undefined, groupPadding: 0.05, barPadding: 0.0, roundedCorners: 2, barMinHeight: 2, cursor: null, orientation: Orientation.Vertical });
4
+ class GroupedBarConfig extends XYComponentConfig {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.groupMaxWidth = undefined;
8
+ this.groupWidth = undefined;
9
+ this.dataStep = undefined;
10
+ this.groupPadding = 0.05;
11
+ this.barPadding = 0.0;
12
+ this.roundedCorners = 2;
13
+ this.barMinHeight = 2;
14
+ this.cursor = null;
15
+ this.orientation = Orientation.Vertical;
16
+ }
17
+ }
7
18
 
8
- export { GroupedBarDefaultConfig };
19
+ export { GroupedBarConfig };
9
20
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../src/components/grouped-bar/config.ts"],"sourcesContent":["import { XYComponentConfigInterface, XYComponentDefaultConfig } from 'core/xy-component/config'\n\n// Types\nimport { ColorAccessor, StringAccessor } from 'types/accessor'\nimport { Orientation } from 'types/position'\n\nexport interface GroupedBarConfigInterface<Datum> extends XYComponentConfigInterface<Datum> {\n /** Bar color accessor function. Default: `d => d.color` */\n color?: ColorAccessor<Datum>;\n /** Force set the group width in pixels. Default: `undefined` */\n groupWidth?: number;\n /** Maximum group width for dynamic sizing. Limits the groupWidth property from the top. Default: `undefined` */\n groupMaxWidth?: number;\n /** Expected step between the bar groups in the X axis units.\n * Needed to correctly calculate the width of the bar groups when there are gaps in the data.\n * Default: `undefined` */\n dataStep?: number;\n /** Fractional padding between the groups in the range of [0,1). Default: `0.05` */\n groupPadding?: number;\n /** Fractional padding between the bars in the range of [0,1). Default: `0` */\n barPadding?: number;\n /** Rounded bar corners. Boolean or number (to set the radius in pixels explicitly). Default: `2` */\n roundedCorners?: number | boolean;\n /** Sets the minimum bar height for better visibility of small values. Default: `1` */\n barMinHeight?: number;\n /** Configurable bar cursor when hovering over. Default: `null` */\n cursor?: StringAccessor<Datum>;\n /** Chart orientation: `Orientation.Vertical` or `Orientation.Horizontal`. Default `Orientation.Vertical` */\n orientation?: Orientation | string;\n}\n\nexport const GroupedBarDefaultConfig: GroupedBarConfigInterface<unknown> = {\n ...XYComponentDefaultConfig,\n // eslint-disable-next-line dot-notation\n color: (d: unknown): string => d['color'],\n groupMaxWidth: undefined,\n groupWidth: undefined,\n dataStep: undefined,\n groupPadding: 0.05,\n barPadding: 0.0,\n roundedCorners: 2,\n barMinHeight: 2,\n cursor: null,\n orientation: Orientation.Vertical,\n}\n"],"names":[],"mappings":";;;AA+BO,MAAM,uBAAuB,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAC/B,wBAAwB,CAAA,EAAA;;IAE3B,KAAK,EAAE,CAAC,CAAU,KAAa,CAAC,CAAC,OAAO,CAAC,EACzC,aAAa,EAAE,SAAS,EACxB,UAAU,EAAE,SAAS,EACrB,QAAQ,EAAE,SAAS,EACnB,YAAY,EAAE,IAAI,EAClB,UAAU,EAAE,GAAG,EACf,cAAc,EAAE,CAAC,EACjB,YAAY,EAAE,CAAC,EACf,MAAM,EAAE,IAAI,EACZ,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAA;;;;"}
1
+ {"version":3,"file":"config.js","sources":["../../../src/components/grouped-bar/config.ts"],"sourcesContent":["import { XYComponentConfigInterface, XYComponentConfig } from 'core/xy-component/config'\n\n// Types\nimport { StringAccessor } from 'types/accessor'\nimport { Orientation } from 'types/position'\n\nexport interface GroupedBarConfigInterface<Datum> extends XYComponentConfigInterface<Datum> {\n /** Force set the group width in pixels. Default: `undefined` */\n groupWidth?: number;\n /** Maximum group width for dynamic sizing. Limits the groupWidth property from the top. Default: `undefined` */\n groupMaxWidth?: number;\n /** Expected step between the bar groups in the X axis units.\n * Needed to correctly calculate the width of the bar groups when there are gaps in the data.\n * Default: `undefined` */\n dataStep?: number;\n /** Fractional padding between the groups in the range of [0,1). Default: `0.05` */\n groupPadding?: number;\n /** Fractional padding between the bars in the range of [0,1). Default: `0` */\n barPadding?: number;\n /** Rounded bar corners. Boolean or number (to set the radius in pixels explicitly). Default: `2` */\n roundedCorners?: number | boolean;\n /** Sets the minimum bar height for better visibility of small values. Default: `1` */\n barMinHeight?: number;\n /** Configurable bar cursor when hovering over. Default: `null` */\n cursor?: StringAccessor<Datum>;\n /** Chart orientation: `Orientation.Vertical` or `Orientation.Horizontal`. Default `Orientation.Vertical` */\n orientation?: Orientation | string;\n}\n\nexport class GroupedBarConfig<Datum> extends XYComponentConfig<Datum> implements GroupedBarConfigInterface<Datum> {\n groupMaxWidth = undefined\n groupWidth = undefined\n dataStep = undefined\n groupPadding = 0.05\n barPadding = 0.0\n roundedCorners = 2\n barMinHeight = 2\n cursor = null\n orientation = Orientation.Vertical\n}\n"],"names":[],"mappings":";;;AA6BM,MAAO,gBAAwB,SAAQ,iBAAwB,CAAA;AAArE,IAAA,WAAA,GAAA;;QACE,IAAa,CAAA,aAAA,GAAG,SAAS,CAAA;QACzB,IAAU,CAAA,UAAA,GAAG,SAAS,CAAA;QACtB,IAAQ,CAAA,QAAA,GAAG,SAAS,CAAA;QACpB,IAAY,CAAA,YAAA,GAAG,IAAI,CAAA;QACnB,IAAU,CAAA,UAAA,GAAG,GAAG,CAAA;QAChB,IAAc,CAAA,cAAA,GAAG,CAAC,CAAA;QAClB,IAAY,CAAA,YAAA,GAAG,CAAC,CAAA;QAChB,IAAM,CAAA,MAAA,GAAG,IAAI,CAAA;AACb,QAAA,IAAA,CAAA,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAA;KACnC;AAAA;;;;"}
@@ -2,12 +2,11 @@ import { XYComponentCore } from "../../core/xy-component";
2
2
  import { NumericAccessor } from "../../types/accessor";
3
3
  import { Spacing } from "../../types/spacing";
4
4
  import { Direction } from "../../types/direction";
5
- import { GroupedBarConfigInterface } from './config';
5
+ import { GroupedBarConfig, GroupedBarConfigInterface } from './config';
6
6
  import * as s from './style';
7
- export declare class GroupedBar<Datum> extends XYComponentCore<Datum, GroupedBarConfigInterface<Datum>> {
7
+ export declare class GroupedBar<Datum> extends XYComponentCore<Datum, GroupedBarConfig<Datum>, GroupedBarConfigInterface<Datum>> {
8
8
  static selectors: typeof s;
9
- protected _defaultConfig: GroupedBarConfigInterface<Datum>;
10
- config: GroupedBarConfigInterface<Datum>;
9
+ config: GroupedBarConfig<Datum>;
11
10
  getAccessors: () => NumericAccessor<Datum>[];
12
11
  events: {
13
12
  [x: string]: {
@@ -8,15 +8,14 @@ import { smartTransition } from '../../utils/d3.js';
8
8
  import { getColor } from '../../utils/color.js';
9
9
  import { Direction } from '../../types/direction.js';
10
10
  import { Orientation } from '../../types/position.js';
11
- import { GroupedBarDefaultConfig } from './config.js';
11
+ import { GroupedBarConfig } from './config.js';
12
12
  import * as style from './style.js';
13
13
  import { barGroup, barGroupExit, bar } from './style.js';
14
14
 
15
15
  class GroupedBar extends XYComponentCore {
16
16
  constructor(config) {
17
17
  super();
18
- this._defaultConfig = GroupedBarDefaultConfig;
19
- this.config = this._defaultConfig;
18
+ this.config = new GroupedBarConfig();
20
19
  this.getAccessors = () => isArray(this.config.y) ? this.config.y : [this.config.y];
21
20
  this.events = {
22
21
  [GroupedBar.selectors.barGroup]: {
@@ -28,7 +27,7 @@ class GroupedBar extends XYComponentCore {
28
27
  };
29
28
  this._barData = [];
30
29
  if (config)
31
- this.setConfig(config);
30
+ this.config.init(config);
32
31
  }
33
32
  get bleed() {
34
33
  this._barData = this._getVisibleData();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/grouped-bar/index.ts"],"sourcesContent":["import { scaleBand } from 'd3-scale'\nimport { min, max, range } from 'd3-array'\nimport { select } from 'd3'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Utils\nimport { clamp, getExtent, getMax, getMin, getNumber, getString, isArray, isEmpty, isNumber } from 'utils/data'\nimport { roundedRectPath } from 'utils/path'\nimport { smartTransition } from 'utils/d3'\nimport { getColor } from 'utils/color'\n\n// Types\nimport { NumericAccessor } from 'types/accessor'\nimport { Spacing } from 'types/spacing'\nimport { Direction } from 'types/direction'\nimport { Orientation } from 'types/position'\nimport { ContinuousScale } from 'types/scale'\n\n// Config\nimport { GroupedBarDefaultConfig, GroupedBarConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\nexport class GroupedBar<Datum> extends XYComponentCore<Datum, GroupedBarConfigInterface<Datum>> {\n static selectors = s\n protected _defaultConfig = GroupedBarDefaultConfig as GroupedBarConfigInterface<Datum>\n public config: GroupedBarConfigInterface<Datum> = this._defaultConfig\n\n getAccessors = (): NumericAccessor<Datum>[] =>\n isArray(this.config.y) ? this.config.y : [this.config.y]\n\n events = {\n [GroupedBar.selectors.barGroup]: {\n mouseover: this._raiseSelection,\n },\n [GroupedBar.selectors.bar]: {\n mouseover: this._raiseSelection,\n },\n }\n\n private _barData: Datum[] = []\n\n constructor (config?: GroupedBarConfigInterface<Datum>) {\n super()\n if (config) this.setConfig(config)\n }\n\n get bleed (): Spacing {\n this._barData = this._getVisibleData()\n if (this._barData.length === 0) return { top: 0, bottom: 0, left: 0, right: 0 }\n\n // By default, horizontal orientation is \"flipped\", i.e. the `yDirection` of `XYContainer` is set to `Direction.North`\n const isHorizontalAndFlipped = !this.isVertical() && (this.dataScale.range()[0] > this.dataScale.range()[1])\n const dataDomain = this.dataScale.domain()\n const halfGroupWidth = this._getGroupWidth() / 2\n\n const dataScaleValues = this._barData.map((d, i) => getNumber(d, this.config.x, i))\n const firstDataValue = min(dataScaleValues)\n const lastDataValue = max(dataScaleValues)\n const firstValuePx = this.dataScale(firstDataValue)\n const lastValuePx = this.dataScale(lastDataValue)\n\n const dataDomainRequiredStart = this.dataScale.invert(firstValuePx + (isHorizontalAndFlipped ? halfGroupWidth : -halfGroupWidth))\n const dataDomainRequiredEnd = this.dataScale.invert(lastValuePx + (isHorizontalAndFlipped ? -halfGroupWidth : halfGroupWidth))\n const bleedPxStart = dataDomainRequiredStart <= dataDomain[0] ? this.dataScale(dataDomain[0]) - this.dataScale(dataDomainRequiredStart) : 0\n const bleedPxEnd = dataDomainRequiredEnd > dataDomain[1] ? this.dataScale(dataDomainRequiredEnd) - this.dataScale(dataDomain[1]) : 0\n\n return {\n top: this.isVertical() ? 0 : (isHorizontalAndFlipped ? -bleedPxEnd : bleedPxStart),\n bottom: this.isVertical() ? 0 : (isHorizontalAndFlipped ? -bleedPxStart : bleedPxEnd),\n left: this.isVertical() ? bleedPxStart : 0,\n right: this.isVertical() ? bleedPxEnd : 0,\n }\n }\n\n private get dataScale (): ContinuousScale {\n return this.isVertical() ? this.xScale : this.yScale\n }\n\n private get valueScale (): ContinuousScale {\n return this.isVertical() ? this.yScale : this.xScale\n }\n\n private isVertical (): boolean {\n return this.config.orientation === Orientation.Vertical\n }\n\n _render (customDuration?: number): void {\n const { config } = this\n const duration = isNumber(customDuration)\n ? customDuration\n : config.duration\n const groupWidth = this._getGroupWidth()\n\n const yAccessors = this.getAccessors()\n const innerBandScaleRange = [-groupWidth / 2, groupWidth / 2] as [\n number,\n number,\n ]\n const innerBandScale = scaleBand<number>()\n .domain(range(yAccessors.length))\n .range(innerBandScaleRange)\n .paddingInner(config.barPadding)\n .paddingOuter(config.barPadding)\n\n const barGroups = this.g\n .selectAll<SVGGElement, Datum>(`.${s.barGroup}`)\n .data(this._barData, (d, i) => `${getString(d, config.id, i) ?? i}`)\n\n const getBarGroupsTransform = (d: Datum, i: number): string => {\n const v = this.dataScale(getNumber(d, config.x, i))\n const x = this.isVertical() ? v : 0\n const y = this.isVertical() ? 0 : v\n return `translate(${x},${y})`\n }\n\n const barGroupsEnter = barGroups\n .enter()\n .append('g')\n .attr('class', s.barGroup)\n .attr('transform', getBarGroupsTransform)\n .style('opacity', 1)\n\n const barGroupsMerged = barGroupsEnter.merge(barGroups)\n smartTransition(barGroupsMerged, duration)\n .attr('transform', getBarGroupsTransform)\n .style('opacity', 1)\n\n const barGroupExit = barGroups.exit().attr('class', s.barGroupExit)\n smartTransition(barGroupExit, duration).style('opacity', 0).remove()\n\n // Animate exiting bars going down\n smartTransition(barGroupExit.selectAll<SVGPathElement, Datum>(`.${s.bar}`), duration)\n .attr('transform', (d, i, e) => {\n return this.isVertical()\n ? `translate(0,${this.yScale(0)}) scale(1,0)`\n : `translate(${this.xScale(0)},0) scale(0,1)`\n })\n\n const barWidth = innerBandScale.bandwidth()\n const bars = barGroupsMerged\n .selectAll<SVGPathElement, Datum>(`.${s.bar}`)\n .data((d) => yAccessors.map(() => d))\n\n const valueAxisDirection = this._getValueAxisDirection()\n const barsEnter = bars\n .enter()\n .append('path')\n .attr('class', s.bar)\n .attr('d', (d, i) => {\n const x = innerBandScale(i)\n const y = this.valueScale(0)\n const width = barWidth\n const height = 0\n return this._getBarPath(x, y, width, height, false, valueAxisDirection)\n })\n .style('fill', (d, i) => getColor(d, config.color, i))\n\n const barsMerged = barsEnter.merge(bars)\n smartTransition(barsMerged, duration)\n .attr('d', (d, j) => {\n const x = innerBandScale(j)\n const width = barWidth\n\n // Todo: Find a way to pass the datum index to `getNumber` below\n const value = getNumber(d, yAccessors[j])\n const isNegative = value < 0\n let y = isNegative ? this.valueScale(0) : this.valueScale(value || 0)\n let height = Math.abs(this.valueScale(0) - this.valueScale(value)) || 0\n\n // Optionally set minimum bar height\n if (height < config.barMinHeight) {\n const dir = valueAxisDirection === Direction.North ? -1 : 1\n y = this.valueScale(0) + dir * config.barMinHeight\n height = config.barMinHeight\n }\n return this._getBarPath(x, y, width, height, isNegative, valueAxisDirection)\n })\n .style('fill', (d, i) => getColor(d, config.color, i))\n .style('cursor', (d, i) => getString(d, config.cursor, i))\n\n smartTransition(bars.exit(), duration).remove()\n }\n\n _getValueAxisDirection (): Direction.North | Direction.South {\n return this.valueScale.range()[0] > this.valueScale.range()[1]\n ? Direction.North\n : Direction.South\n }\n\n _getVisibleData (): Datum[] {\n const {\n config,\n datamodel: { data },\n } = this\n const groupWidth = this._getGroupWidth()\n const halfGroupWidth = data.length < 2 ? 0 : groupWidth / 2\n\n const dataScale = this.dataScale\n const xHalfGroupWidth = Math.abs(\n (dataScale.invert(halfGroupWidth) as number) -\n (dataScale.invert(0) as number)\n )\n const filtered = data?.filter((d, i) => {\n const v = getNumber(d, config.x, i)\n const domain: number[] | Date[] = dataScale.domain()\n const domainMin = +domain[0]\n const domainMax = +domain[1]\n return (\n v >= domainMin - xHalfGroupWidth && v <= domainMax + xHalfGroupWidth\n )\n })\n\n return filtered\n }\n\n _getBarPath (\n x: number,\n y: number,\n width: number,\n height: number,\n isNegative: boolean,\n direction: Direction.North | Direction.South\n ): string {\n const { config } = this\n\n const cornerRadius = config.roundedCorners\n ? isNumber(config.roundedCorners)\n ? +config.roundedCorners\n : width / 2\n : 0\n const cornerRadiusClamped = clamp(\n cornerRadius,\n 0,\n Math.min(height, width) / 2\n )\n\n const isNorthDirected = direction === Direction.North\n const roundedTop = this.isVertical() && isNegative !== isNorthDirected\n const roundedBottom = this.isVertical() && isNegative === isNorthDirected\n const roundedLeft = !this.isVertical() && isNegative\n const roundedRight = !this.isVertical() && !isNegative\n\n return roundedRectPath({\n x: this.isVertical() ? x : y + (isNorthDirected ? 0 : -height),\n y: this.isVertical() ? y + (isNorthDirected ? 0 : -height) : x,\n w: this.isVertical() ? width : height,\n h: this.isVertical() ? height : width,\n tl: roundedTop || roundedLeft,\n tr: roundedTop || roundedRight,\n bl: roundedBottom || roundedLeft,\n br: roundedBottom || roundedRight,\n r: cornerRadiusClamped,\n })\n }\n\n _getGroupWidth (): number {\n const {\n config,\n datamodel: { data },\n } = this\n if (isEmpty(data)) return 0\n if (config.groupWidth) { return min([config.groupWidth, config.groupMaxWidth]) }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const isOrdinal = this.dataScale.bandwidth\n const domain = (\n this.dataScale.domain ? this.dataScale.domain() : []\n ) as number[]\n const domainLength = isOrdinal ? domain.length : domain[1] - domain[0]\n\n // If the dataStep property is provided the amount of data elements is calculates as domainLength / dataStep\n // otherwise we get the number of data elements within the domain range\n // Or if the scale is ordinal we use data.length\n let dataSize =\n 1 + domainLength / config.dataStep ||\n (!isOrdinal &&\n data.filter((d, i) => {\n const value = getNumber(d, config.x, i)\n return value >= domain[0] && value <= domain[1]\n }).length) ||\n data.length\n\n // We increase the dataSize by 1 to take into account possible additional domain space\n if (!isOrdinal && dataSize >= 2) dataSize += 1\n\n const c = dataSize < 2 ? 1 : 1 - config.groupPadding\n const groupWidth =\n (c * (this.isVertical() ? this._width : this._height)) / dataSize\n return min([groupWidth, config.groupMaxWidth])\n }\n\n getValueScaleExtent (scaleByVisibleData: boolean): number[] {\n const { datamodel } = this\n const yAccessors = this.getAccessors()\n\n const data = scaleByVisibleData ? this._getVisibleData() : datamodel.data\n const min = getMin(data, ...yAccessors)\n const max = getMax(data, ...yAccessors)\n return [min > 0 ? 0 : min, max < 0 ? 0 : max]\n }\n\n _raiseSelection (d, i, els): void {\n select(els[i]).raise()\n }\n\n getDataScaleExtent (): number[] {\n const { config, datamodel } = this\n return getExtent(datamodel.data, config.x)\n }\n\n getYDataExtent (scaleByVisibleData: boolean): number[] {\n return this.isVertical()\n ? this.getValueScaleExtent(scaleByVisibleData)\n : this.getDataScaleExtent()\n }\n\n getXDataExtent (): number[] {\n return this.isVertical()\n ? this.getDataScaleExtent()\n : this.getValueScaleExtent(false)\n }\n}\n"],"names":["s.barGroup","barGroupExit","s.barGroupExit","s.bar","s"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/grouped-bar/index.ts"],"sourcesContent":["import { scaleBand } from 'd3-scale'\nimport { min, max, range } from 'd3-array'\nimport { select } from 'd3'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Utils\nimport { clamp, getExtent, getMax, getMin, getNumber, getString, isArray, isEmpty, isNumber } from 'utils/data'\nimport { roundedRectPath } from 'utils/path'\nimport { smartTransition } from 'utils/d3'\nimport { getColor } from 'utils/color'\n\n// Types\nimport { NumericAccessor } from 'types/accessor'\nimport { Spacing } from 'types/spacing'\nimport { Direction } from 'types/direction'\nimport { Orientation } from 'types/position'\nimport { ContinuousScale } from 'types/scale'\n\n// Config\nimport { GroupedBarConfig, GroupedBarConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\nexport class GroupedBar<Datum> extends XYComponentCore<Datum, GroupedBarConfig<Datum>, GroupedBarConfigInterface<Datum>> {\n static selectors = s\n config: GroupedBarConfig<Datum> = new GroupedBarConfig()\n getAccessors = (): NumericAccessor<Datum>[] =>\n isArray(this.config.y) ? this.config.y : [this.config.y]\n\n events = {\n [GroupedBar.selectors.barGroup]: {\n mouseover: this._raiseSelection,\n },\n [GroupedBar.selectors.bar]: {\n mouseover: this._raiseSelection,\n },\n }\n\n private _barData: Datum[] = []\n\n constructor (config?: GroupedBarConfigInterface<Datum>) {\n super()\n if (config) this.config.init(config)\n }\n\n get bleed (): Spacing {\n this._barData = this._getVisibleData()\n if (this._barData.length === 0) return { top: 0, bottom: 0, left: 0, right: 0 }\n\n // By default, horizontal orientation is \"flipped\", i.e. the `yDirection` of `XYContainer` is set to `Direction.North`\n const isHorizontalAndFlipped = !this.isVertical() && (this.dataScale.range()[0] > this.dataScale.range()[1])\n const dataDomain = this.dataScale.domain()\n const halfGroupWidth = this._getGroupWidth() / 2\n\n const dataScaleValues = this._barData.map((d, i) => getNumber(d, this.config.x, i))\n const firstDataValue = min(dataScaleValues)\n const lastDataValue = max(dataScaleValues)\n const firstValuePx = this.dataScale(firstDataValue)\n const lastValuePx = this.dataScale(lastDataValue)\n\n const dataDomainRequiredStart = this.dataScale.invert(firstValuePx + (isHorizontalAndFlipped ? halfGroupWidth : -halfGroupWidth))\n const dataDomainRequiredEnd = this.dataScale.invert(lastValuePx + (isHorizontalAndFlipped ? -halfGroupWidth : halfGroupWidth))\n const bleedPxStart = dataDomainRequiredStart <= dataDomain[0] ? this.dataScale(dataDomain[0]) - this.dataScale(dataDomainRequiredStart) : 0\n const bleedPxEnd = dataDomainRequiredEnd > dataDomain[1] ? this.dataScale(dataDomainRequiredEnd) - this.dataScale(dataDomain[1]) : 0\n\n return {\n top: this.isVertical() ? 0 : (isHorizontalAndFlipped ? -bleedPxEnd : bleedPxStart),\n bottom: this.isVertical() ? 0 : (isHorizontalAndFlipped ? -bleedPxStart : bleedPxEnd),\n left: this.isVertical() ? bleedPxStart : 0,\n right: this.isVertical() ? bleedPxEnd : 0,\n }\n }\n\n private get dataScale (): ContinuousScale {\n return this.isVertical() ? this.xScale : this.yScale\n }\n\n private get valueScale (): ContinuousScale {\n return this.isVertical() ? this.yScale : this.xScale\n }\n\n private isVertical (): boolean {\n return this.config.orientation === Orientation.Vertical\n }\n\n _render (customDuration?: number): void {\n const { config } = this\n const duration = isNumber(customDuration)\n ? customDuration\n : config.duration\n const groupWidth = this._getGroupWidth()\n\n const yAccessors = this.getAccessors()\n const innerBandScaleRange = [-groupWidth / 2, groupWidth / 2] as [\n number,\n number,\n ]\n const innerBandScale = scaleBand<number>()\n .domain(range(yAccessors.length))\n .range(innerBandScaleRange)\n .paddingInner(config.barPadding)\n .paddingOuter(config.barPadding)\n\n const barGroups = this.g\n .selectAll<SVGGElement, Datum>(`.${s.barGroup}`)\n .data(this._barData, (d, i) => `${getString(d, config.id, i) ?? i}`)\n\n const getBarGroupsTransform = (d: Datum, i: number): string => {\n const v = this.dataScale(getNumber(d, config.x, i))\n const x = this.isVertical() ? v : 0\n const y = this.isVertical() ? 0 : v\n return `translate(${x},${y})`\n }\n\n const barGroupsEnter = barGroups\n .enter()\n .append('g')\n .attr('class', s.barGroup)\n .attr('transform', getBarGroupsTransform)\n .style('opacity', 1)\n\n const barGroupsMerged = barGroupsEnter.merge(barGroups)\n smartTransition(barGroupsMerged, duration)\n .attr('transform', getBarGroupsTransform)\n .style('opacity', 1)\n\n const barGroupExit = barGroups.exit().attr('class', s.barGroupExit)\n smartTransition(barGroupExit, duration).style('opacity', 0).remove()\n\n // Animate exiting bars going down\n smartTransition(barGroupExit.selectAll<SVGPathElement, Datum>(`.${s.bar}`), duration)\n .attr('transform', (d, i, e) => {\n return this.isVertical()\n ? `translate(0,${this.yScale(0)}) scale(1,0)`\n : `translate(${this.xScale(0)},0) scale(0,1)`\n })\n\n const barWidth = innerBandScale.bandwidth()\n const bars = barGroupsMerged\n .selectAll<SVGPathElement, Datum>(`.${s.bar}`)\n .data((d) => yAccessors.map(() => d))\n\n const valueAxisDirection = this._getValueAxisDirection()\n const barsEnter = bars\n .enter()\n .append('path')\n .attr('class', s.bar)\n .attr('d', (d, i) => {\n const x = innerBandScale(i)\n const y = this.valueScale(0)\n const width = barWidth\n const height = 0\n return this._getBarPath(x, y, width, height, false, valueAxisDirection)\n })\n .style('fill', (d, i) => getColor(d, config.color, i))\n\n const barsMerged = barsEnter.merge(bars)\n smartTransition(barsMerged, duration)\n .attr('d', (d, j) => {\n const x = innerBandScale(j)\n const width = barWidth\n\n // Todo: Find a way to pass the datum index to `getNumber` below\n const value = getNumber(d, yAccessors[j])\n const isNegative = value < 0\n let y = isNegative ? this.valueScale(0) : this.valueScale(value || 0)\n let height = Math.abs(this.valueScale(0) - this.valueScale(value)) || 0\n\n // Optionally set minimum bar height\n if (height < config.barMinHeight) {\n const dir = valueAxisDirection === Direction.North ? -1 : 1\n y = this.valueScale(0) + dir * config.barMinHeight\n height = config.barMinHeight\n }\n return this._getBarPath(x, y, width, height, isNegative, valueAxisDirection)\n })\n .style('fill', (d, i) => getColor(d, config.color, i))\n .style('cursor', (d, i) => getString(d, config.cursor, i))\n\n smartTransition(bars.exit(), duration).remove()\n }\n\n _getValueAxisDirection (): Direction.North | Direction.South {\n return this.valueScale.range()[0] > this.valueScale.range()[1]\n ? Direction.North\n : Direction.South\n }\n\n _getVisibleData (): Datum[] {\n const {\n config,\n datamodel: { data },\n } = this\n const groupWidth = this._getGroupWidth()\n const halfGroupWidth = data.length < 2 ? 0 : groupWidth / 2\n\n const dataScale = this.dataScale\n const xHalfGroupWidth = Math.abs(\n (dataScale.invert(halfGroupWidth) as number) -\n (dataScale.invert(0) as number)\n )\n const filtered = data?.filter((d, i) => {\n const v = getNumber(d, config.x, i)\n const domain: number[] | Date[] = dataScale.domain()\n const domainMin = +domain[0]\n const domainMax = +domain[1]\n return (\n v >= domainMin - xHalfGroupWidth && v <= domainMax + xHalfGroupWidth\n )\n })\n\n return filtered\n }\n\n _getBarPath (\n x: number,\n y: number,\n width: number,\n height: number,\n isNegative: boolean,\n direction: Direction.North | Direction.South\n ): string {\n const { config } = this\n\n const cornerRadius = config.roundedCorners\n ? isNumber(config.roundedCorners)\n ? +config.roundedCorners\n : width / 2\n : 0\n const cornerRadiusClamped = clamp(\n cornerRadius,\n 0,\n Math.min(height, width) / 2\n )\n\n const isNorthDirected = direction === Direction.North\n const roundedTop = this.isVertical() && isNegative !== isNorthDirected\n const roundedBottom = this.isVertical() && isNegative === isNorthDirected\n const roundedLeft = !this.isVertical() && isNegative\n const roundedRight = !this.isVertical() && !isNegative\n\n return roundedRectPath({\n x: this.isVertical() ? x : y + (isNorthDirected ? 0 : -height),\n y: this.isVertical() ? y + (isNorthDirected ? 0 : -height) : x,\n w: this.isVertical() ? width : height,\n h: this.isVertical() ? height : width,\n tl: roundedTop || roundedLeft,\n tr: roundedTop || roundedRight,\n bl: roundedBottom || roundedLeft,\n br: roundedBottom || roundedRight,\n r: cornerRadiusClamped,\n })\n }\n\n _getGroupWidth (): number {\n const {\n config,\n datamodel: { data },\n } = this\n if (isEmpty(data)) return 0\n if (config.groupWidth) { return min([config.groupWidth, config.groupMaxWidth]) }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const isOrdinal = this.dataScale.bandwidth\n const domain = (\n this.dataScale.domain ? this.dataScale.domain() : []\n ) as number[]\n const domainLength = isOrdinal ? domain.length : domain[1] - domain[0]\n\n // If the dataStep property is provided the amount of data elements is calculates as domainLength / dataStep\n // otherwise we get the number of data elements within the domain range\n // Or if the scale is ordinal we use data.length\n let dataSize =\n 1 + domainLength / config.dataStep ||\n (!isOrdinal &&\n data.filter((d, i) => {\n const value = getNumber(d, config.x, i)\n return value >= domain[0] && value <= domain[1]\n }).length) ||\n data.length\n\n // We increase the dataSize by 1 to take into account possible additional domain space\n if (!isOrdinal && dataSize >= 2) dataSize += 1\n\n const c = dataSize < 2 ? 1 : 1 - config.groupPadding\n const groupWidth =\n (c * (this.isVertical() ? this._width : this._height)) / dataSize\n return min([groupWidth, config.groupMaxWidth])\n }\n\n getValueScaleExtent (scaleByVisibleData: boolean): number[] {\n const { datamodel } = this\n const yAccessors = this.getAccessors()\n\n const data = scaleByVisibleData ? this._getVisibleData() : datamodel.data\n const min = getMin(data, ...yAccessors)\n const max = getMax(data, ...yAccessors)\n return [min > 0 ? 0 : min, max < 0 ? 0 : max]\n }\n\n _raiseSelection (d, i, els): void {\n select(els[i]).raise()\n }\n\n getDataScaleExtent (): number[] {\n const { config, datamodel } = this\n return getExtent(datamodel.data, config.x)\n }\n\n getYDataExtent (scaleByVisibleData: boolean): number[] {\n return this.isVertical()\n ? this.getValueScaleExtent(scaleByVisibleData)\n : this.getDataScaleExtent()\n }\n\n getXDataExtent (): number[] {\n return this.isVertical()\n ? this.getDataScaleExtent()\n : this.getValueScaleExtent(false)\n }\n}\n"],"names":["s.barGroup","barGroupExit","s.barGroupExit","s.bar","s"],"mappings":";;;;;;;;;;;;;;AA0BM,MAAO,UAAkB,SAAQ,eAAiF,CAAA;AAiBtH,IAAA,WAAA,CAAa,MAAyC,EAAA;AACpD,QAAA,KAAK,EAAE,CAAA;AAhBT,QAAA,IAAA,CAAA,MAAM,GAA4B,IAAI,gBAAgB,EAAE,CAAA;AACxD,QAAA,IAAA,CAAA,YAAY,GAAG,MACb,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAE1D,QAAA,IAAA,CAAA,MAAM,GAAG;AACP,YAAA,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,GAAG;gBAC/B,SAAS,EAAE,IAAI,CAAC,eAAe;AAChC,aAAA;AACD,YAAA,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,GAAG;gBAC1B,SAAS,EAAE,IAAI,CAAC,eAAe;AAChC,aAAA;SACF,CAAA;QAEO,IAAQ,CAAA,QAAA,GAAY,EAAE,CAAA;AAI5B,QAAA,IAAI,MAAM;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;KACrC;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;AACtC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;;AAG/E,QAAA,MAAM,sBAAsB,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5G,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAA;QAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;AAEhD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AACnF,QAAA,MAAM,cAAc,GAAG,GAAG,CAAC,eAAe,CAAC,CAAA;AAC3C,QAAA,MAAM,aAAa,GAAG,GAAG,CAAC,eAAe,CAAC,CAAA;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QAEjD,MAAM,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,IAAI,sBAAsB,GAAG,cAAc,GAAG,CAAC,cAAc,CAAC,CAAC,CAAA;QACjI,MAAM,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,IAAI,sBAAsB,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC,CAAC,CAAA;AAC9H,QAAA,MAAM,YAAY,GAAG,uBAAuB,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAA;AAC3I,QAAA,MAAM,UAAU,GAAG,qBAAqB,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAEpI,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,sBAAsB,GAAG,CAAC,UAAU,GAAG,YAAY,CAAC;YAClF,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,sBAAsB,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC;AACrF,YAAA,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,YAAY,GAAG,CAAC;AAC1C,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,GAAG,CAAC;SAC1C,CAAA;KACF;AAED,IAAA,IAAY,SAAS,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;KACrD;AAED,IAAA,IAAY,UAAU,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;KACrD;IAEO,UAAU,GAAA;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ,CAAA;KACxD;AAED,IAAA,OAAO,CAAE,cAAuB,EAAA;AAC9B,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AACvB,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC;AACvC,cAAE,cAAc;AAChB,cAAE,MAAM,CAAC,QAAQ,CAAA;AACnB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;AAExC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;AACtC,QAAA,MAAM,mBAAmB,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,CAG3D,CAAA;QACD,MAAM,cAAc,GAAG,SAAS,EAAU;AACvC,aAAA,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;aAChC,KAAK,CAAC,mBAAmB,CAAC;AAC1B,aAAA,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;AAC/B,aAAA,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;AAElC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC;AACrB,aAAA,SAAS,CAAqB,CAAI,CAAA,EAAAA,QAAU,EAAE,CAAC;AAC/C,aAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAG,EAAA,CAAA,EAAA,GAAA,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAA,CAAE,CAAA,EAAA,CAAC,CAAA;AAEtE,QAAA,MAAM,qBAAqB,GAAG,CAAC,CAAQ,EAAE,CAAS,KAAY;AAC5D,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AACnD,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;AACnC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;AACnC,YAAA,OAAO,CAAa,UAAA,EAAA,CAAC,CAAI,CAAA,EAAA,CAAC,GAAG,CAAA;AAC/B,SAAC,CAAA;QAED,MAAM,cAAc,GAAG,SAAS;AAC7B,aAAA,KAAK,EAAE;aACP,MAAM,CAAC,GAAG,CAAC;AACX,aAAA,IAAI,CAAC,OAAO,EAAEA,QAAU,CAAC;AACzB,aAAA,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC;AACxC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAEtB,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;AACvD,QAAA,eAAe,CAAC,eAAe,EAAE,QAAQ,CAAC;AACvC,aAAA,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC;AACxC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAEtB,QAAA,MAAMC,cAAY,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,EAAEC,YAAc,CAAC,CAAA;AACnE,QAAA,eAAe,CAACD,cAAY,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;;AAGpE,QAAA,eAAe,CAACA,cAAY,CAAC,SAAS,CAAwB,CAAA,CAAA,EAAIE,GAAK,CAAA,CAAE,CAAC,EAAE,QAAQ,CAAC;aAClF,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAI;YAC7B,OAAO,IAAI,CAAC,UAAU,EAAE;kBACpB,eAAe,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAc,YAAA,CAAA;kBAC3C,aAAa,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,cAAA,CAAgB,CAAA;AACjD,SAAC,CAAC,CAAA;AAEJ,QAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,EAAE,CAAA;QAC3C,MAAM,IAAI,GAAG,eAAe;AACzB,aAAA,SAAS,CAAwB,CAAI,CAAA,EAAAA,GAAK,EAAE,CAAC;AAC7C,aAAA,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAEvC,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAA;QACxD,MAAM,SAAS,GAAG,IAAI;AACnB,aAAA,KAAK,EAAE;aACP,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,IAAI,CAAC,OAAO,EAAEA,GAAK,CAAC;aACpB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AAClB,YAAA,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;YAC5B,MAAM,KAAK,GAAG,QAAQ,CAAA;YACtB,MAAM,MAAM,GAAG,CAAC,CAAA;AAChB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAA;AACzE,SAAC,CAAC;aACD,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;QAExD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AACxC,QAAA,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;aAClC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AAClB,YAAA,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;YAC3B,MAAM,KAAK,GAAG,QAAQ,CAAA;;YAGtB,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AACzC,YAAA,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAA;YAC5B,IAAI,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC,CAAA;YACrE,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAA;;AAGvE,YAAA,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE;AAChC,gBAAA,MAAM,GAAG,GAAG,kBAAkB,KAAK,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;AAC3D,gBAAA,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,YAAY,CAAA;AAClD,gBAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAA;AAC7B,aAAA;AACD,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAA;AAC9E,SAAC,CAAC;aACD,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aACrD,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;QAE5D,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;KAChD;IAED,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;cAC1D,SAAS,CAAC,KAAK;AACjB,cAAE,SAAS,CAAC,KAAK,CAAA;KACpB;IAED,eAAe,GAAA;QACb,MAAM,EACJ,MAAM,EACN,SAAS,EAAE,EAAE,IAAI,EAAE,GACpB,GAAG,IAAI,CAAA;AACR,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;AACxC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,CAAA;AAE3D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAChC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAC7B,SAAS,CAAC,MAAM,CAAC,cAAc,CAAY;AACzC,YAAA,SAAS,CAAC,MAAM,CAAC,CAAC,CAAY,CAClC,CAAA;AACD,QAAA,MAAM,QAAQ,GAAG,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACrC,YAAA,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACnC,YAAA,MAAM,MAAM,GAAsB,SAAS,CAAC,MAAM,EAAE,CAAA;AACpD,YAAA,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAC5B,YAAA,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAC5B,YAAA,QACE,CAAC,IAAI,SAAS,GAAG,eAAe,IAAI,CAAC,IAAI,SAAS,GAAG,eAAe,EACrE;AACH,SAAC,CAAC,CAAA;AAEF,QAAA,OAAO,QAAQ,CAAA;KAChB;IAED,WAAW,CACT,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc,EACd,UAAmB,EACnB,SAA4C,EAAA;AAE5C,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AAEvB,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc;AACxC,cAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC;AAC/B,kBAAE,CAAC,MAAM,CAAC,cAAc;kBACtB,KAAK,GAAG,CAAC;cACX,CAAC,CAAA;AACL,QAAA,MAAM,mBAAmB,GAAG,KAAK,CAC/B,YAAY,EACZ,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAC5B,CAAA;AAED,QAAA,MAAM,eAAe,GAAG,SAAS,KAAK,SAAS,CAAC,KAAK,CAAA;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,UAAU,KAAK,eAAe,CAAA;QACtE,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,UAAU,KAAK,eAAe,CAAA;QACzE,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,UAAU,CAAA;QACpD,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAA;AAEtD,QAAA,OAAO,eAAe,CAAC;YACrB,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;YAC9D,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;AAC9D,YAAA,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,GAAG,MAAM;AACrC,YAAA,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,GAAG,KAAK;YACrC,EAAE,EAAE,UAAU,IAAI,WAAW;YAC7B,EAAE,EAAE,UAAU,IAAI,YAAY;YAC9B,EAAE,EAAE,aAAa,IAAI,WAAW;YAChC,EAAE,EAAE,aAAa,IAAI,YAAY;AACjC,YAAA,CAAC,EAAE,mBAAmB;AACvB,SAAA,CAAC,CAAA;KACH;IAED,cAAc,GAAA;QACZ,MAAM,EACJ,MAAM,EACN,SAAS,EAAE,EAAE,IAAI,EAAE,GACpB,GAAG,IAAI,CAAA;QACR,IAAI,OAAO,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC,CAAA;QAC3B,IAAI,MAAM,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAA;AAAE,SAAA;;;AAIhF,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAA;QAC1C,MAAM,MAAM,IACV,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,CACzC,CAAA;QACb,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;;;;QAKtE,IAAI,QAAQ,GACV,CAAC,GAAG,YAAY,GAAG,MAAM,CAAC,QAAQ;AAClC,aAAC,CAAC,SAAS;gBACT,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACnB,oBAAA,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACvC,oBAAA,OAAO,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,CAAA;iBAChD,CAAC,CAAC,MAAM,CAAC;YACZ,IAAI,CAAC,MAAM,CAAA;;AAGb,QAAA,IAAI,CAAC,SAAS,IAAI,QAAQ,IAAI,CAAC;YAAE,QAAQ,IAAI,CAAC,CAAA;AAE9C,QAAA,MAAM,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,YAAY,CAAA;QACpD,MAAM,UAAU,GACd,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAA;QACnE,OAAO,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAA;KAC/C;AAED,IAAA,mBAAmB,CAAE,kBAA2B,EAAA;AAC9C,QAAA,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;AAC1B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;AAEtC,QAAA,MAAM,IAAI,GAAG,kBAAkB,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,SAAS,CAAC,IAAI,CAAA;QACzE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,UAAU,CAAC,CAAA;QACvC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,UAAU,CAAC,CAAA;QACvC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAA;KAC9C;AAED,IAAA,eAAe,CAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAA;QACxB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;KACvB;IAED,kBAAkB,GAAA;AAChB,QAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;QAClC,OAAO,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;KAC3C;AAED,IAAA,cAAc,CAAE,kBAA2B,EAAA;QACzC,OAAO,IAAI,CAAC,UAAU,EAAE;AACtB,cAAE,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;AAC9C,cAAE,IAAI,CAAC,kBAAkB,EAAE,CAAA;KAC9B;IAED,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,UAAU,EAAE;AACtB,cAAE,IAAI,CAAC,kBAAkB,EAAE;AAC3B,cAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;KACpC;;AAxSM,UAAS,CAAA,SAAA,GAAGC,KAAC;;;;"}
@@ -1,4 +1,4 @@
1
- import { LeafletMapConfigInterface } from "../leaflet-map/config";
1
+ import { LeafletMapConfig, LeafletMapConfigInterface } from "../leaflet-map/config";
2
2
  import { ColorAccessor, NumericAccessor } from "../../types/accessor";
3
3
  import { GenericDataRecord } from "../../types/data";
4
4
  export interface LeafletFlowMapConfigInterface<PointDatum extends GenericDataRecord, FlowDatum extends GenericDataRecord> extends LeafletMapConfigInterface<PointDatum> {
@@ -29,4 +29,18 @@ export interface LeafletFlowMapConfigInterface<PointDatum extends GenericDataRec
29
29
  /** Flow source point mouse leave callback function. Default: `undefined` */
30
30
  onSourcePointMouseLeave?: (f: FlowDatum, event: MouseEvent) => void;
31
31
  }
32
- export declare const LeafletFlowMapDefaultConfig: LeafletFlowMapConfigInterface<GenericDataRecord, GenericDataRecord>;
32
+ export declare class LeafletFlowMapConfig<PointDatum extends GenericDataRecord = GenericDataRecord, FlowDatum extends GenericDataRecord = GenericDataRecord> extends LeafletMapConfig<PointDatum> implements LeafletFlowMapConfigInterface<PointDatum, FlowDatum> {
33
+ sourceLongitude: (f: FlowDatum) => number;
34
+ sourceLatitude: (f: FlowDatum) => number;
35
+ targetLongitude: (f: FlowDatum) => number;
36
+ targetLatitude: (f: FlowDatum) => number;
37
+ sourcePointRadius: number;
38
+ sourcePointColor: string;
39
+ flowParticleColor: string;
40
+ flowParticleRadius: number;
41
+ flowParticleSpeed: number;
42
+ flowParticleDensity: number;
43
+ onSourcePointClick: any;
44
+ onSourcePointMouseEnter: any;
45
+ onSourcePointMouseLeave: any;
46
+ }
@@ -1,7 +1,25 @@
1
- import { LeafletMapDefaultConfig } from '../leaflet-map/config.js';
1
+ import { LeafletMapConfig } from '../leaflet-map/config.js';
2
2
 
3
3
  /* eslint-disable dot-notation */
4
- const LeafletFlowMapDefaultConfig = Object.assign(Object.assign({}, LeafletMapDefaultConfig), { sourceLongitude: (f) => f['sourceLongitude'], sourceLatitude: (f) => f['sourceLatitude'], targetLongitude: (f) => f['targetLongitude'], targetLatitude: (f) => f['targetLatitude'], sourcePointRadius: 3, sourcePointColor: '#88919f', flowParticleColor: '#949dad', flowParticleRadius: 1.1, flowParticleSpeed: 0.07, flowParticleDensity: 0.6, onSourcePointClick: undefined, onSourcePointMouseEnter: undefined, onSourcePointMouseLeave: undefined });
4
+ class LeafletFlowMapConfig extends LeafletMapConfig {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.sourceLongitude = (f) => f['sourceLongitude'];
8
+ this.sourceLatitude = (f) => f['sourceLatitude'];
9
+ this.targetLongitude = (f) => f['targetLongitude'];
10
+ this.targetLatitude = (f) => f['targetLatitude'];
11
+ this.sourcePointRadius = 3;
12
+ this.sourcePointColor = '#88919f';
13
+ this.flowParticleColor = '#949dad';
14
+ this.flowParticleRadius = 1.1;
15
+ this.flowParticleSpeed = 0.07;
16
+ this.flowParticleDensity = 0.6;
17
+ // Events
18
+ this.onSourcePointClick = undefined;
19
+ this.onSourcePointMouseEnter = undefined;
20
+ this.onSourcePointMouseLeave = undefined;
21
+ }
22
+ }
5
23
 
6
- export { LeafletFlowMapDefaultConfig };
24
+ export { LeafletFlowMapConfig };
7
25
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../src/components/leaflet-flow-map/config.ts"],"sourcesContent":["/* eslint-disable dot-notation */\n\n// Config\nimport { LeafletMapDefaultConfig, LeafletMapConfigInterface } from 'components/leaflet-map/config'\n\n// Types\nimport { ColorAccessor, NumericAccessor } from 'types/accessor'\nimport { GenericDataRecord } from 'types/data'\n\nexport interface LeafletFlowMapConfigInterface<PointDatum extends GenericDataRecord, FlowDatum extends GenericDataRecord> extends LeafletMapConfigInterface<PointDatum> {\n /** Flow source point longitude accessor function or value. Default:.`f => f.sourceLongitude` */\n sourceLongitude?: NumericAccessor<FlowDatum>;\n /** Flow source point latitude accessor function or value. Default: `f => f.sourceLatitude` */\n sourceLatitude?: NumericAccessor<FlowDatum>;\n /** Flow target point longitude accessor function or value. Default: `f => f.targetLongitude` */\n targetLongitude?: NumericAccessor<FlowDatum>;\n /** Flow target point latitude accessor function or value. Default: `f => f.targetLatitude` */\n targetLatitude?: NumericAccessor<FlowDatum>;\n /** Flow source point radius accessor function or value. Default: `3` */\n sourcePointRadius?: NumericAccessor<FlowDatum>;\n /** Source point color accessor function or value. Default: `'#88919f'` */\n sourcePointColor?: ColorAccessor<FlowDatum>;\n /** Flow particle color accessor function or value. Default: `'#949dad'` */\n flowParticleColor?: ColorAccessor<FlowDatum>;\n /** Flow particle radius accessor function or value. Default: `1.1` */\n flowParticleRadius?: NumericAccessor<FlowDatum>;\n /** Flow particle speed accessor function or value. The unit is arbitrary, recommended range is 0 – 0.2. Default: `0.07` */\n flowParticleSpeed?: NumericAccessor<FlowDatum>;\n /** Flow particle density accessor function or value on the range of [0, 1]. Default: `0.6` */\n flowParticleDensity?: NumericAccessor<FlowDatum>;\n\n // Events\n /** Flow source point click callback function. Default: `undefined` */\n onSourcePointClick?: (f: FlowDatum, x: number, y: number, event: MouseEvent) => void;\n /** Flow source point mouse over callback function. Default: `undefined` */\n onSourcePointMouseEnter?: (f: FlowDatum, x: number, y: number, event: MouseEvent) => void;\n /** Flow source point mouse leave callback function. Default: `undefined` */\n onSourcePointMouseLeave?: (f: FlowDatum, event: MouseEvent) => void;\n}\n\nexport const LeafletFlowMapDefaultConfig: LeafletFlowMapConfigInterface<GenericDataRecord, GenericDataRecord> = {\n ...LeafletMapDefaultConfig,\n sourceLongitude: <FlowDatum>(f: FlowDatum): number => f['sourceLongitude'] as number,\n sourceLatitude: <FlowDatum>(f: FlowDatum): number => f['sourceLatitude'] as number,\n targetLongitude: <FlowDatum>(f: FlowDatum): number => f['targetLongitude'] as number,\n targetLatitude: <FlowDatum>(f: FlowDatum): number => f['targetLatitude'] as number,\n sourcePointRadius: 3,\n sourcePointColor: '#88919f',\n flowParticleColor: '#949dad',\n flowParticleRadius: 1.1,\n flowParticleSpeed: 0.07,\n flowParticleDensity: 0.6,\n onSourcePointClick: undefined,\n onSourcePointMouseEnter: undefined,\n onSourcePointMouseLeave: undefined,\n}\n"],"names":[],"mappings":";;AAAA;AAwCa,MAAA,2BAA2B,mCACnC,uBAAuB,CAAA,EAAA,EAC1B,eAAe,EAAE,CAAY,CAAY,KAAa,CAAC,CAAC,iBAAiB,CAAW,EACpF,cAAc,EAAE,CAAY,CAAY,KAAa,CAAC,CAAC,gBAAgB,CAAW,EAClF,eAAe,EAAE,CAAY,CAAY,KAAa,CAAC,CAAC,iBAAiB,CAAW,EACpF,cAAc,EAAE,CAAY,CAAY,KAAa,CAAC,CAAC,gBAAgB,CAAW,EAClF,iBAAiB,EAAE,CAAC,EACpB,gBAAgB,EAAE,SAAS,EAC3B,iBAAiB,EAAE,SAAS,EAC5B,kBAAkB,EAAE,GAAG,EACvB,iBAAiB,EAAE,IAAI,EACvB,mBAAmB,EAAE,GAAG,EACxB,kBAAkB,EAAE,SAAS,EAC7B,uBAAuB,EAAE,SAAS,EAClC,uBAAuB,EAAE,SAAS;;;;"}
1
+ {"version":3,"file":"config.js","sources":["../../../src/components/leaflet-flow-map/config.ts"],"sourcesContent":["/* eslint-disable dot-notation */\n\n// Config\nimport { LeafletMapConfig, LeafletMapConfigInterface } from 'components/leaflet-map/config'\n\n// Types\nimport { ColorAccessor, NumericAccessor } from 'types/accessor'\nimport { GenericDataRecord } from 'types/data'\n\nexport interface LeafletFlowMapConfigInterface<PointDatum extends GenericDataRecord, FlowDatum extends GenericDataRecord> extends LeafletMapConfigInterface<PointDatum> {\n /** Flow source point longitude accessor function or value. Default:.`f => f.sourceLongitude` */\n sourceLongitude?: NumericAccessor<FlowDatum>;\n /** Flow source point latitude accessor function or value. Default: `f => f.sourceLatitude` */\n sourceLatitude?: NumericAccessor<FlowDatum>;\n /** Flow target point longitude accessor function or value. Default: `f => f.targetLongitude` */\n targetLongitude?: NumericAccessor<FlowDatum>;\n /** Flow target point latitude accessor function or value. Default: `f => f.targetLatitude` */\n targetLatitude?: NumericAccessor<FlowDatum>;\n /** Flow source point radius accessor function or value. Default: `3` */\n sourcePointRadius?: NumericAccessor<FlowDatum>;\n /** Source point color accessor function or value. Default: `'#88919f'` */\n sourcePointColor?: ColorAccessor<FlowDatum>;\n /** Flow particle color accessor function or value. Default: `'#949dad'` */\n flowParticleColor?: ColorAccessor<FlowDatum>;\n /** Flow particle radius accessor function or value. Default: `1.1` */\n flowParticleRadius?: NumericAccessor<FlowDatum>;\n /** Flow particle speed accessor function or value. The unit is arbitrary, recommended range is 0 – 0.2. Default: `0.07` */\n flowParticleSpeed?: NumericAccessor<FlowDatum>;\n /** Flow particle density accessor function or value on the range of [0, 1]. Default: `0.6` */\n flowParticleDensity?: NumericAccessor<FlowDatum>;\n\n // Events\n /** Flow source point click callback function. Default: `undefined` */\n onSourcePointClick?: (f: FlowDatum, x: number, y: number, event: MouseEvent) => void;\n /** Flow source point mouse over callback function. Default: `undefined` */\n onSourcePointMouseEnter?: (f: FlowDatum, x: number, y: number, event: MouseEvent) => void;\n /** Flow source point mouse leave callback function. Default: `undefined` */\n onSourcePointMouseLeave?: (f: FlowDatum, event: MouseEvent) => void;\n}\n\nexport class LeafletFlowMapConfig<\n PointDatum extends GenericDataRecord = GenericDataRecord,\n FlowDatum extends GenericDataRecord = GenericDataRecord,\n> extends LeafletMapConfig<PointDatum> implements LeafletFlowMapConfigInterface<PointDatum, FlowDatum> {\n sourceLongitude = (f: FlowDatum): number => f['sourceLongitude'] as number\n sourceLatitude = (f: FlowDatum): number => f['sourceLatitude'] as number\n targetLongitude = (f: FlowDatum): number => f['targetLongitude'] as number\n targetLatitude = (f: FlowDatum): number => f['targetLatitude'] as number\n sourcePointRadius = 3\n sourcePointColor = '#88919f'\n flowParticleColor = '#949dad'\n flowParticleRadius = 1.1\n flowParticleSpeed = 0.07\n flowParticleDensity = 0.6\n\n // Events\n onSourcePointClick = undefined\n onSourcePointMouseEnter = undefined\n onSourcePointMouseLeave = undefined\n}\n"],"names":[],"mappings":";;AAAA;AAwCM,MAAO,oBAGX,SAAQ,gBAA4B,CAAA;AAHtC,IAAA,WAAA,GAAA;;QAIE,IAAe,CAAA,eAAA,GAAG,CAAC,CAAY,KAAa,CAAC,CAAC,iBAAiB,CAAW,CAAA;QAC1E,IAAc,CAAA,cAAA,GAAG,CAAC,CAAY,KAAa,CAAC,CAAC,gBAAgB,CAAW,CAAA;QACxE,IAAe,CAAA,eAAA,GAAG,CAAC,CAAY,KAAa,CAAC,CAAC,iBAAiB,CAAW,CAAA;QAC1E,IAAc,CAAA,cAAA,GAAG,CAAC,CAAY,KAAa,CAAC,CAAC,gBAAgB,CAAW,CAAA;QACxE,IAAiB,CAAA,iBAAA,GAAG,CAAC,CAAA;QACrB,IAAgB,CAAA,gBAAA,GAAG,SAAS,CAAA;QAC5B,IAAiB,CAAA,iBAAA,GAAG,SAAS,CAAA;QAC7B,IAAkB,CAAA,kBAAA,GAAG,GAAG,CAAA;QACxB,IAAiB,CAAA,iBAAA,GAAG,IAAI,CAAA;QACxB,IAAmB,CAAA,mBAAA,GAAG,GAAG,CAAA;;QAGzB,IAAkB,CAAA,kBAAA,GAAG,SAAS,CAAA;QAC9B,IAAuB,CAAA,uBAAA,GAAG,SAAS,CAAA;QACnC,IAAuB,CAAA,uBAAA,GAAG,SAAS,CAAA;KACpC;AAAA;;;;"}
@@ -1,15 +1,13 @@
1
1
  import { ComponentCore } from "../../core/component";
2
2
  import { ComponentType } from "../../types/component";
3
3
  import { GenericDataRecord } from "../../types/data";
4
- import { LeafletFlowMapConfigInterface } from './config';
4
+ import { LeafletFlowMapConfig, LeafletFlowMapConfigInterface } from './config';
5
5
  import { Particle } from './types';
6
6
  export declare class LeafletFlowMap<PointDatum extends GenericDataRecord, FlowDatum extends GenericDataRecord> extends ComponentCore<{
7
7
  points: PointDatum[];
8
8
  flows?: FlowDatum[];
9
- }, LeafletFlowMapConfigInterface<PointDatum, FlowDatum>> {
9
+ }, LeafletFlowMapConfig<PointDatum, FlowDatum>, LeafletFlowMapConfigInterface<PointDatum, FlowDatum>> {
10
10
  static selectors: typeof import("../leaflet-map/style");
11
- protected _defaultConfig: LeafletFlowMapConfigInterface<PointDatum, FlowDatum>;
12
- config: LeafletFlowMapConfigInterface<PointDatum, FlowDatum>;
13
11
  type: ComponentType;
14
12
  private leafletMap;
15
13
  private leafletMapInstance;
@@ -19,6 +17,7 @@ export declare class LeafletFlowMap<PointDatum extends GenericDataRecord, FlowDa
19
17
  private onCanvasMouseMoveBound;
20
18
  private onCanvasClickBound;
21
19
  private canvasElement;
20
+ config: LeafletFlowMapConfig<PointDatum, FlowDatum>;
22
21
  private panningOffset;
23
22
  private resizeObserver;
24
23
  private renderer;
@@ -6,19 +6,18 @@ import { throttle, getNumber } from '../../utils/data.js';
6
6
  import { getDataLatLngBounds } from '../../utils/map.js';
7
7
  import { getColor } from '../../utils/color.js';
8
8
  import { LeafletMap } from '../leaflet-map/index.js';
9
- import { LeafletFlowMapDefaultConfig } from './config.js';
9
+ import { LeafletFlowMapConfig } from './config.js';
10
10
 
11
11
  class LeafletFlowMap extends ComponentCore {
12
12
  constructor(container, config, data) {
13
13
  var _a;
14
14
  super(ComponentType.HTML);
15
- this._defaultConfig = LeafletFlowMapDefaultConfig;
16
- this.config = this._defaultConfig;
17
15
  this.type = ComponentType.HTML;
18
16
  this.flows = [];
19
17
  this.points = [];
20
18
  this.onCanvasMouseMoveBound = throttle(this.onCanvasMouseMove.bind(this), 60);
21
19
  this.onCanvasClickBound = this.onCanvasClick.bind(this);
20
+ this.config = new LeafletFlowMapConfig();
22
21
  this.panningOffset = { x: 0, y: 0 };
23
22
  this.particles = [];
24
23
  this.leafletMap = new LeafletMap(container, config, (_a = data === null || data === void 0 ? void 0 : data.points) !== null && _a !== void 0 ? _a : []);