@unovis/ts 1.6.6-stellar.1 → 1.6.7

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 (110) hide show
  1. package/components/area/index.js +8 -6
  2. package/components/area/index.js.map +1 -1
  3. package/components/area/style.js +3 -1
  4. package/components/area/style.js.map +1 -1
  5. package/components/axis/config.d.ts +10 -7
  6. package/components/axis/config.js +1 -1
  7. package/components/axis/config.js.map +1 -1
  8. package/components/axis/index.d.ts +1 -0
  9. package/components/axis/index.js +44 -53
  10. package/components/axis/index.js.map +1 -1
  11. package/components/axis/style.d.ts +2 -38
  12. package/components/axis/style.js +28 -24
  13. package/components/axis/style.js.map +1 -1
  14. package/components/brush/config.d.ts +3 -0
  15. package/components/brush/config.js +1 -1
  16. package/components/brush/config.js.map +1 -1
  17. package/components/brush/index.d.ts +1 -0
  18. package/components/brush/index.js +7 -3
  19. package/components/brush/index.js.map +1 -1
  20. package/components/bullet-legend/style.js +2 -1
  21. package/components/bullet-legend/style.js.map +1 -1
  22. package/components/chord-diagram/style.js +3 -2
  23. package/components/chord-diagram/style.js.map +1 -1
  24. package/components/crosshair/config.d.ts +8 -0
  25. package/components/crosshair/config.js +1 -1
  26. package/components/crosshair/config.js.map +1 -1
  27. package/components/crosshair/index.d.ts +2 -0
  28. package/components/crosshair/index.js +18 -5
  29. package/components/crosshair/index.js.map +1 -1
  30. package/components/donut/style.js +2 -1
  31. package/components/donut/style.js.map +1 -1
  32. package/components/flow-legend/style.js +2 -1
  33. package/components/flow-legend/style.js.map +1 -1
  34. package/components/free-brush/style.js +2 -1
  35. package/components/free-brush/style.js.map +1 -1
  36. package/components/graph/index.js +2 -0
  37. package/components/graph/index.js.map +1 -1
  38. package/components/graph/modules/link/style.js +3 -2
  39. package/components/graph/modules/link/style.js.map +1 -1
  40. package/components/graph/modules/node/style.js +3 -2
  41. package/components/graph/modules/node/style.js.map +1 -1
  42. package/components/graph/modules/panel/style.js +2 -1
  43. package/components/graph/modules/panel/style.js.map +1 -1
  44. package/components/grouped-bar/style.js +2 -1
  45. package/components/grouped-bar/style.js.map +1 -1
  46. package/components/leaflet-map/index.js +4 -2
  47. package/components/leaflet-map/index.js.map +1 -1
  48. package/components/plotband/style.js +2 -1
  49. package/components/plotband/style.js.map +1 -1
  50. package/components/plotline/style.js +2 -1
  51. package/components/plotline/style.js.map +1 -1
  52. package/components/sankey/config.d.ts +2 -0
  53. package/components/sankey/config.js +1 -1
  54. package/components/sankey/config.js.map +1 -1
  55. package/components/sankey/index.d.ts +3 -2
  56. package/components/sankey/index.js +18 -8
  57. package/components/sankey/index.js.map +1 -1
  58. package/components/sankey/modules/label.js +8 -2
  59. package/components/sankey/modules/label.js.map +1 -1
  60. package/components/sankey/types.d.ts +4 -0
  61. package/components/sankey/types.js +7 -2
  62. package/components/sankey/types.js.map +1 -1
  63. package/components/scatter/index.d.ts +4 -1
  64. package/components/scatter/index.js +20 -11
  65. package/components/scatter/index.js.map +1 -1
  66. package/components/stacked-bar/index.d.ts +4 -1
  67. package/components/stacked-bar/index.js +17 -6
  68. package/components/stacked-bar/index.js.map +1 -1
  69. package/components/stacked-bar/style.js +2 -1
  70. package/components/stacked-bar/style.js.map +1 -1
  71. package/components/timeline/config.d.ts +8 -2
  72. package/components/timeline/config.js +2 -2
  73. package/components/timeline/config.js.map +1 -1
  74. package/components/timeline/index.d.ts +2 -2
  75. package/components/timeline/index.js +63 -32
  76. package/components/timeline/index.js.map +1 -1
  77. package/components/timeline/style.d.ts +6 -1
  78. package/components/timeline/style.js +40 -46
  79. package/components/timeline/style.js.map +1 -1
  80. package/components/tooltip/style.js +3 -2
  81. package/components/tooltip/style.js.map +1 -1
  82. package/components/topojson-map/index.js +2 -0
  83. package/components/topojson-map/index.js.map +1 -1
  84. package/components/vis-controls/style.js +2 -1
  85. package/components/vis-controls/style.js.map +1 -1
  86. package/core/component/index.d.ts +4 -1
  87. package/core/component/index.js +6 -6
  88. package/core/component/index.js.map +1 -1
  89. package/index.js +3 -2
  90. package/index.js.map +1 -1
  91. package/package.json +10 -8
  92. package/styles/index.js +2 -1
  93. package/styles/index.js.map +1 -1
  94. package/types/misc.js +2 -0
  95. package/types/misc.js.map +1 -0
  96. package/types/style.d.ts +1 -0
  97. package/types.d.ts +1 -0
  98. package/types.js +2 -1
  99. package/types.js.map +1 -1
  100. package/utils/index.d.ts +1 -0
  101. package/utils/index.js +2 -1
  102. package/utils/index.js.map +1 -1
  103. package/utils/style.d.ts +1 -0
  104. package/utils/style.js +8 -2
  105. package/utils/style.js.map +1 -1
  106. package/utils/text.js +6 -2
  107. package/utils/text.js.map +1 -1
  108. package/utils/theme.d.ts +1 -0
  109. package/utils/theme.js +4 -0
  110. package/utils/theme.js.map +1 -0
@@ -1,5 +1,6 @@
1
1
  import { css, injectGlobal } from '@emotion/css';
2
2
  import { UNOVIS_ICON_FONT_FAMILY_DEFAULT } from '../../styles/index.js';
3
+ import { darkThemeCssSelectors } from '../../utils/theme.js';
3
4
 
4
5
  const root = css `
5
6
  label: vis-controls-component;
@@ -16,7 +17,7 @@ const variables = injectGlobal `
16
17
  --vis-dark-controls-button-color: #fff;
17
18
  }
18
19
 
19
- body.theme-dark ${`.${root}`} {
20
+ ${darkThemeCssSelectors} ${`.${root}`} {
20
21
  --vis-controls-buttons-border-color: var(--vis-dark-controls.buttons-border-color);
21
22
  --vis-controls-buttons-background-color: var(--vis-dark-controls-buttons-background-color);
22
23
  --vis-controls-button-color: var(--vis-dark-controls-button-color);
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","sources":["../../../src/components/vis-controls/style.ts"],"sourcesContent":["import { css, injectGlobal } from '@emotion/css'\nimport { UNOVIS_ICON_FONT_FAMILY_DEFAULT } from 'styles/index'\n\nexport const root = css`\n label: vis-controls-component;\n`\n\nexport const variables = injectGlobal`\n :root {\n --vis-controls-buttons-border-color: rgba(108, 119, 140, 0.15);\n --vis-controls-buttons-background-color: rgba(255, 255, 255, 1);\n --vis-controls-button-color: #6c778c;\n --vis-controls-button-icon-font: ${UNOVIS_ICON_FONT_FAMILY_DEFAULT};\n\n --vis-dark-controls-buttons-border-color: #6c778c;\n --vis-dark-controls-buttons-background-color: var(--vis-color-grey);\n --vis-dark-controls-button-color: #fff;\n }\n\n body.theme-dark ${`.${root}`} {\n --vis-controls-buttons-border-color: var(--vis-dark-controls.buttons-border-color);\n --vis-controls-buttons-background-color: var(--vis-dark-controls-buttons-background-color);\n --vis-controls-button-color: var(--vis-dark-controls-button-color);\n }\n`\n\nexport const items = css`\n label: items;\n background-color: var(--vis-controls-buttons-background-color);\n border: 1px solid var(--vis-controls-buttons-border-color);\n border-radius: 4px;\n opacity: 1;\n transition: all 300ms;\n`\n\nexport const horizontalItems = css`\n label: horizontal;\n display: inline-flex;\n`\n\nexport const item = css`\n label: item;\n`\n\nexport const itemButton = css`\n label: item-button;\n font-family: var(--vis-controls-button-icon-font);\n display: block;\n cursor: pointer;\n user-select: none;\n outline: none;\n width: 30px;\n height: 30px;\n line-height: 28px;\n border: none;\n border-radius: inherit;\n box-sizing: border-box;\n color: var(--vis-controls-button-color);\n background-color: inherit;\n`\n\nexport const borderLeft = css`\n border-left: 1px solid var(--vis-controls-buttons-border-color);\n`\n\nexport const borderTop = css`\n border-top: 1px solid var(--vis-controls-buttons-border-color);\n`\n\nexport const borderRight = css`\n border-right: 1px solid var(--vis-controls-buttons-border-color);\n`\n\nexport const borderBottom = css`\n border-bottom: 1px solid var(--vis-controls-buttons-border-color);\n`\n\nexport const disabled = css`\n label: disabled;\n opacity: 0.4;\n pointer-events: none;\n`\n"],"names":[],"mappings":";;;AAGO,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;EAEtB;AAEM,MAAM,SAAS,GAAG,YAAY,CAAA,CAAA;;;;;uCAKE,+BAA+B,CAAA;;;;;;;AAOlD,kBAAA,EAAA,CAAA,CAAA,EAAI,IAAI,CAAE,CAAA,CAAA;;;;;EAK7B;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;;;;;;EAOvB;AAEM,MAAM,eAAe,GAAG,GAAG,CAAA,CAAA;;;EAGjC;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;EAEtB;AAEM,MAAM,UAAU,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;;;;EAe5B;AAEM,MAAM,UAAU,GAAG,GAAG,CAAA,CAAA;;EAE5B;AAEM,MAAM,SAAS,GAAG,GAAG,CAAA,CAAA;;EAE3B;AAEM,MAAM,WAAW,GAAG,GAAG,CAAA,CAAA;;EAE7B;AAEM,MAAM,YAAY,GAAG,GAAG,CAAA,CAAA;;EAE9B;AAEM,MAAM,QAAQ,GAAG,GAAG,CAAA,CAAA;;;;;;;;"}
1
+ {"version":3,"file":"style.js","sources":["../../../src/components/vis-controls/style.ts"],"sourcesContent":["import { css, injectGlobal } from '@emotion/css'\nimport { UNOVIS_ICON_FONT_FAMILY_DEFAULT } from 'styles/index'\nimport { darkThemeCssSelectors } from 'utils/theme'\n\nexport const root = css`\n label: vis-controls-component;\n`\n\nexport const variables = injectGlobal`\n :root {\n --vis-controls-buttons-border-color: rgba(108, 119, 140, 0.15);\n --vis-controls-buttons-background-color: rgba(255, 255, 255, 1);\n --vis-controls-button-color: #6c778c;\n --vis-controls-button-icon-font: ${UNOVIS_ICON_FONT_FAMILY_DEFAULT};\n\n --vis-dark-controls-buttons-border-color: #6c778c;\n --vis-dark-controls-buttons-background-color: var(--vis-color-grey);\n --vis-dark-controls-button-color: #fff;\n }\n\n ${darkThemeCssSelectors} ${`.${root}`} {\n --vis-controls-buttons-border-color: var(--vis-dark-controls.buttons-border-color);\n --vis-controls-buttons-background-color: var(--vis-dark-controls-buttons-background-color);\n --vis-controls-button-color: var(--vis-dark-controls-button-color);\n }\n`\n\nexport const items = css`\n label: items;\n background-color: var(--vis-controls-buttons-background-color);\n border: 1px solid var(--vis-controls-buttons-border-color);\n border-radius: 4px;\n opacity: 1;\n transition: all 300ms;\n`\n\nexport const horizontalItems = css`\n label: horizontal;\n display: inline-flex;\n`\n\nexport const item = css`\n label: item;\n`\n\nexport const itemButton = css`\n label: item-button;\n font-family: var(--vis-controls-button-icon-font);\n display: block;\n cursor: pointer;\n user-select: none;\n outline: none;\n width: 30px;\n height: 30px;\n line-height: 28px;\n border: none;\n border-radius: inherit;\n box-sizing: border-box;\n color: var(--vis-controls-button-color);\n background-color: inherit;\n`\n\nexport const borderLeft = css`\n border-left: 1px solid var(--vis-controls-buttons-border-color);\n`\n\nexport const borderTop = css`\n border-top: 1px solid var(--vis-controls-buttons-border-color);\n`\n\nexport const borderRight = css`\n border-right: 1px solid var(--vis-controls-buttons-border-color);\n`\n\nexport const borderBottom = css`\n border-bottom: 1px solid var(--vis-controls-buttons-border-color);\n`\n\nexport const disabled = css`\n label: disabled;\n opacity: 0.4;\n pointer-events: none;\n`\n"],"names":[],"mappings":";;;;AAIO,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;EAEtB;AAEM,MAAM,SAAS,GAAG,YAAY,CAAA,CAAA;;;;;uCAKE,+BAA+B,CAAA;;;;;;;IAOlE,qBAAqB,CAAA,CAAA,EAAI,CAAI,CAAA,EAAA,IAAI,CAAE,CAAA,CAAA;;;;;EAKtC;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;;;;;;EAOvB;AAEM,MAAM,eAAe,GAAG,GAAG,CAAA,CAAA;;;EAGjC;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;EAEtB;AAEM,MAAM,UAAU,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;;;;EAe5B;AAEM,MAAM,UAAU,GAAG,GAAG,CAAA,CAAA;;EAE5B;AAEM,MAAM,SAAS,GAAG,GAAG,CAAA,CAAA;;EAE3B;AAEM,MAAM,WAAW,GAAG,GAAG,CAAA,CAAA;;EAE7B;AAEM,MAAM,YAAY,GAAG,GAAG,CAAA,CAAA;;EAE9B;AAEM,MAAM,QAAQ,GAAG,GAAG,CAAA,CAAA;;;;;;;;"}
@@ -43,7 +43,10 @@ export declare class ComponentCore<CoreDatum, ConfigInterface extends ComponentC
43
43
  _render(duration?: number): void;
44
44
  private _setCustomAttributes;
45
45
  private _setUpComponentEvents;
46
- protected _mapEventDatum(datum: unknown): unknown;
46
+ protected _mapEventDatum(datum: unknown, index: number): {
47
+ datum: unknown;
48
+ index: number;
49
+ };
47
50
  private _bindEvents;
48
51
  destroy(): void;
49
52
  isDestroyed(): boolean;
@@ -101,11 +101,11 @@ class ComponentCore {
101
101
  // Set up user-defined events
102
102
  this._bindEvents(this.config.events, '.user');
103
103
  }
104
- // Sometimes we don't want to pass the original data to the event handler.
104
+ // Sometimes we don't want to pass the original data and/or index to the event handler.
105
105
  // This method can be overridden by components to implement a custom mapping.
106
- // See Stacked Bar for an example.
107
- _mapEventDatum(datum) {
108
- return datum;
106
+ // See Stacked Bar and Scatter for examples.
107
+ _mapEventDatum(datum, index) {
108
+ return { datum, index };
109
109
  }
110
110
  _bindEvents(events = this.events, suffix = '') {
111
111
  Object.keys(events).forEach(className => {
@@ -116,8 +116,8 @@ class ComponentCore {
116
116
  const els = selection.nodes();
117
117
  const i = els.indexOf(event.currentTarget);
118
118
  const eventFunction = events[className][eventType];
119
- const datum = this._mapEventDatum(d);
120
- return eventFunction === null || eventFunction === void 0 ? void 0 : eventFunction(datum, event, i, els);
119
+ const { datum, index } = this._mapEventDatum(d, i);
120
+ return eventFunction === null || eventFunction === void 0 ? void 0 : eventFunction(datum, event, index, els);
121
121
  });
122
122
  });
123
123
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/core/component/index.ts"],"sourcesContent":["import { select, Selection, ValueFn } from 'd3-selection'\nimport { Transition } from 'd3-transition'\n\n// Core\nimport { CoreDataModel } from 'data-models/core'\n\n// Utils\nimport { merge, throttle } from 'utils/data'\nimport { guid } from 'utils/misc'\n\n// Types\nimport { ComponentType, Sizing } from 'types/component'\nimport { Spacing } from 'types/spacing'\n\n// Local Types\nimport { VisEventCallback, VisEventType } from './types'\n\n// Config\nimport { ComponentDefaultConfig, ComponentConfigInterface } from './config'\n\nexport class ComponentCore<\n CoreDatum,\n ConfigInterface extends ComponentConfigInterface = ComponentConfigInterface,\n> {\n public element: SVGGElement | HTMLElement\n public type: ComponentType = ComponentType.SVG\n public g: Selection<SVGGElement, unknown, null, undefined> | Selection<HTMLElement, unknown, null, undefined>\n public config: ConfigInterface\n public prevConfig: ConfigInterface\n public datamodel: CoreDataModel<CoreDatum> = new CoreDataModel()\n public sizing: Sizing | string = Sizing.Fit // Supported by SingleContainer and a subset of components only (Sankey)\n public uid: string\n\n protected events: {\n [selector: string]: {\n [eventType in VisEventType]?: VisEventCallback;\n };\n } = {}\n\n /** Default configuration */\n protected _defaultConfig: ConfigInterface = ComponentDefaultConfig as ConfigInterface\n /** Component width in pixels. This property is set automatically by the container. */\n protected _width = 400\n /** Component height in pixels. This property is set automatically by the container. */\n protected _height = 200\n /** Container width in pixels. This property is set automatically by the container. */\n protected _containerWidth: number | undefined = undefined\n /** Container height in pixels. This property is set automatically by the container. */\n protected _containerHeight: number | undefined = undefined\n /** Container margin in pixels. This property is set automatically by the container. */\n protected _containerMargin: Spacing = { top: 0, bottom: 0, left: 0, right: 0 }\n\n _setUpComponentEventsThrottled = throttle(this._setUpComponentEvents, 500)\n\n /** Set the container margin. Called automatically by containers. */\n setContainerMargin (margin: Spacing): void {\n this._containerMargin = margin\n }\n\n _setCustomAttributesThrottled = throttle(this._setCustomAttributes, 500)\n\n constructor (type = ComponentType.SVG) {\n if (type === ComponentType.SVG) {\n this.element = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n } else {\n this.element = document.createElement('div')\n }\n this.uid = guid()\n this.g = select(this.element) as Selection<SVGGElement, unknown, null, undefined> | Selection<HTMLElement, unknown, null, undefined>\n\n // Setting the root class if available\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line dot-notation\n const rootClass = this.constructor?.['selectors']?.root as string\n if (rootClass) this.g.attr('class', rootClass)\n }\n\n setConfig (config: ConfigInterface): void {\n this.prevConfig = this.config // Store the previous config instance\n this.config = merge(this._defaultConfig, config)\n }\n\n setData (data: CoreDatum): void {\n this.datamodel.data = data\n }\n\n setSize (width: number, height: number, containerWidth: number, containerHeight: number): void {\n if (isFinite(width)) this._width = width\n if (isFinite(height)) this._height = height\n if (isFinite(containerWidth)) this._containerWidth = containerWidth\n if (isFinite(containerHeight)) this._containerHeight = containerHeight\n }\n\n render (duration = this.config.duration): void {\n this._render(duration)\n\n // While transition is in progress, we add the 'animating' attribute to the component's SVG group\n const ANIMATING_ATTR = 'animating'\n if (duration) {\n this.g.attr(ANIMATING_ATTR, '')\n const transition = this.g\n .transition(ANIMATING_ATTR)\n .duration(duration) as Transition<SVGGElement | HTMLElement, unknown, null, undefined>\n\n transition.on('end interrupt', () => {\n this.g.attr(ANIMATING_ATTR, null)\n })\n }\n this._setUpComponentEventsThrottled()\n this._setCustomAttributesThrottled()\n }\n\n get bleed (): Spacing {\n return { top: 0, bottom: 0, left: 0, right: 0 }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n _render (duration = this.config.duration): void {\n }\n\n private _setCustomAttributes (): void {\n const attributeMap = this.config.attributes\n\n Object.keys(attributeMap).forEach(className => {\n Object.keys(attributeMap[className]).forEach(attr => {\n const selection = (this.g as Selection<SVGGElement | HTMLElement, unknown, null, undefined>)\n .selectAll<SVGGElement | HTMLElement, unknown>(`.${className}`)\n\n selection.attr(attr, attributeMap[className][attr] as ValueFn<SVGGElement | HTMLElement, unknown, string | number | boolean>)\n })\n })\n }\n\n private _setUpComponentEvents (): void {\n // Set up default events\n this._bindEvents(this.events)\n\n // Set up user-defined events\n this._bindEvents(this.config.events, '.user')\n }\n\n // Sometimes we don't want to pass the original data to the event handler.\n // This method can be overridden by components to implement a custom mapping.\n // See Stacked Bar for an example.\n protected _mapEventDatum (datum: unknown): unknown {\n return datum\n }\n\n private _bindEvents (events = this.events, suffix = ''): void {\n Object.keys(events).forEach(className => {\n Object.keys(events[className]).forEach(eventType => {\n const selection = (this.g as Selection<SVGGElement | HTMLElement, unknown, null, undefined>)\n .selectAll<SVGGElement | HTMLElement, unknown>(`.${className}`)\n selection.on(eventType + suffix, (event: MouseEvent & WheelEvent & PointerEvent & TouchEvent, d) => {\n const els = selection.nodes()\n const i = els.indexOf(event.currentTarget as SVGGElement | HTMLElement)\n const eventFunction = events[className][eventType as VisEventType]\n const datum = this._mapEventDatum(d)\n return eventFunction?.(datum, event, i, els)\n })\n })\n })\n }\n\n public destroy (): void {\n this.g?.remove()\n this.element = undefined\n }\n\n public isDestroyed (): boolean {\n return !this.element\n }\n}\n"],"names":[],"mappings":";;;;;;;MAoBa,aAAa,CAAA;AAyCxB,IAAA,WAAA,CAAa,IAAI,GAAG,aAAa,CAAC,GAAG,EAAA;;AApC9B,QAAA,IAAA,CAAA,IAAI,GAAkB,aAAa,CAAC,GAAG,CAAA;AAIvC,QAAA,IAAA,CAAA,SAAS,GAA6B,IAAI,aAAa,EAAE,CAAA;AACzD,QAAA,IAAA,CAAA,MAAM,GAAoB,MAAM,CAAC,GAAG,CAAA;QAGjC,IAAM,CAAA,MAAA,GAIZ,EAAE,CAAA;;QAGI,IAAc,CAAA,cAAA,GAAoB,sBAAyC,CAAA;;QAE3E,IAAM,CAAA,MAAA,GAAG,GAAG,CAAA;;QAEZ,IAAO,CAAA,OAAA,GAAG,GAAG,CAAA;;QAEb,IAAe,CAAA,eAAA,GAAuB,SAAS,CAAA;;QAE/C,IAAgB,CAAA,gBAAA,GAAuB,SAAS,CAAA;;AAEhD,QAAA,IAAA,CAAA,gBAAgB,GAAY,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;QAE9E,IAA8B,CAAA,8BAAA,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAA;QAO1E,IAA6B,CAAA,6BAAA,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAA;AAGtE,QAAA,IAAI,IAAI,KAAK,aAAa,CAAC,GAAG,EAAE;YAC9B,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAA;AAC3E,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;AAC7C,SAAA;AACD,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE,CAAA;QACjB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAwG,CAAA;;;;;AAMpI,QAAA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAG,WAAW,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAc,CAAA;AACjE,QAAA,IAAI,SAAS;YAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;KAC/C;;AArBD,IAAA,kBAAkB,CAAE,MAAe,EAAA;AACjC,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAA;KAC/B;AAqBD,IAAA,SAAS,CAAE,MAAuB,EAAA;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAA;QAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;KACjD;AAED,IAAA,OAAO,CAAE,IAAe,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAA;KAC3B;AAED,IAAA,OAAO,CAAE,KAAa,EAAE,MAAc,EAAE,cAAsB,EAAE,eAAuB,EAAA;QACrF,IAAI,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACxC,IAAI,QAAQ,CAAC,MAAM,CAAC;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QAC3C,IAAI,QAAQ,CAAC,cAAc,CAAC;AAAE,YAAA,IAAI,CAAC,eAAe,GAAG,cAAc,CAAA;QACnE,IAAI,QAAQ,CAAC,eAAe,CAAC;AAAE,YAAA,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAA;KACvE;AAED,IAAA,MAAM,CAAE,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;;QAGtB,MAAM,cAAc,GAAG,WAAW,CAAA;AAClC,QAAA,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AAC/B,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC;iBACtB,UAAU,CAAC,cAAc,CAAC;iBAC1B,QAAQ,CAAC,QAAQ,CAAoE,CAAA;AAExF,YAAA,UAAU,CAAC,EAAE,CAAC,eAAe,EAAE,MAAK;gBAClC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;AACnC,aAAC,CAAC,CAAA;AACH,SAAA;QACD,IAAI,CAAC,8BAA8B,EAAE,CAAA;QACrC,IAAI,CAAC,6BAA6B,EAAE,CAAA;KACrC;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;KAChD;;AAGD,IAAA,OAAO,CAAE,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAA;KACvC;IAEO,oBAAoB,GAAA;AAC1B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA;QAE3C,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,SAAS,IAAG;AAC5C,YAAA,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;AAClD,gBAAA,MAAM,SAAS,GAAI,IAAI,CAAC,CAAoE;AACzF,qBAAA,SAAS,CAAqC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC,CAAA;AAEjE,gBAAA,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,CAA2E,CAAC,CAAA;AAC/H,aAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;KACH;IAEO,qBAAqB,GAAA;;AAE3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;;QAG7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAC9C;;;;AAKS,IAAA,cAAc,CAAE,KAAc,EAAA;AACtC,QAAA,OAAO,KAAK,CAAA;KACb;IAEO,WAAW,CAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,EAAA;QACpD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,IAAG;AACtC,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,IAAG;AACjD,gBAAA,MAAM,SAAS,GAAI,IAAI,CAAC,CAAoE;AACzF,qBAAA,SAAS,CAAqC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC,CAAA;AACjE,gBAAA,SAAS,CAAC,EAAE,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC,KAA0D,EAAE,CAAC,KAAI;AACjG,oBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,CAAA;oBAC7B,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,aAA0C,CAAC,CAAA;oBACvE,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,SAAyB,CAAC,CAAA;oBAClE,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;AACpC,oBAAA,OAAO,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAb,aAAa,CAAG,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;AAC9C,iBAAC,CAAC,CAAA;AACJ,aAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;KACH;IAEM,OAAO,GAAA;;AACZ,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,EAAE,CAAA;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;KACzB;IAEM,WAAW,GAAA;AAChB,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAA;KACrB;AACF;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/core/component/index.ts"],"sourcesContent":["import { select, Selection, ValueFn } from 'd3-selection'\nimport { Transition } from 'd3-transition'\n\n// Core\nimport { CoreDataModel } from 'data-models/core'\n\n// Utils\nimport { merge, throttle } from 'utils/data'\nimport { guid } from 'utils/misc'\n\n// Types\nimport { ComponentType, Sizing } from 'types/component'\nimport { Spacing } from 'types/spacing'\n\n// Local Types\nimport { VisEventCallback, VisEventType } from './types'\n\n// Config\nimport { ComponentDefaultConfig, ComponentConfigInterface } from './config'\n\nexport class ComponentCore<\n CoreDatum,\n ConfigInterface extends ComponentConfigInterface = ComponentConfigInterface,\n> {\n public element: SVGGElement | HTMLElement\n public type: ComponentType = ComponentType.SVG\n public g: Selection<SVGGElement, unknown, null, undefined> | Selection<HTMLElement, unknown, null, undefined>\n public config: ConfigInterface\n public prevConfig: ConfigInterface\n public datamodel: CoreDataModel<CoreDatum> = new CoreDataModel()\n public sizing: Sizing | string = Sizing.Fit // Supported by SingleContainer and a subset of components only (Sankey)\n public uid: string\n\n protected events: {\n [selector: string]: {\n [eventType in VisEventType]?: VisEventCallback;\n };\n } = {}\n\n /** Default configuration */\n protected _defaultConfig: ConfigInterface = ComponentDefaultConfig as ConfigInterface\n /** Component width in pixels. This property is set automatically by the container. */\n protected _width = 400\n /** Component height in pixels. This property is set automatically by the container. */\n protected _height = 200\n /** Container width in pixels. This property is set automatically by the container. */\n protected _containerWidth: number | undefined = undefined\n /** Container height in pixels. This property is set automatically by the container. */\n protected _containerHeight: number | undefined = undefined\n /** Container margin in pixels. This property is set automatically by the container. */\n protected _containerMargin: Spacing = { top: 0, bottom: 0, left: 0, right: 0 }\n\n _setUpComponentEventsThrottled = throttle(this._setUpComponentEvents, 500)\n\n /** Set the container margin. Called automatically by containers. */\n setContainerMargin (margin: Spacing): void {\n this._containerMargin = margin\n }\n\n _setCustomAttributesThrottled = throttle(this._setCustomAttributes, 500)\n\n constructor (type = ComponentType.SVG) {\n if (type === ComponentType.SVG) {\n this.element = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n } else {\n this.element = document.createElement('div')\n }\n this.uid = guid()\n this.g = select(this.element) as Selection<SVGGElement, unknown, null, undefined> | Selection<HTMLElement, unknown, null, undefined>\n\n // Setting the root class if available\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line dot-notation\n const rootClass = this.constructor?.['selectors']?.root as string\n if (rootClass) this.g.attr('class', rootClass)\n }\n\n setConfig (config: ConfigInterface): void {\n this.prevConfig = this.config // Store the previous config instance\n this.config = merge(this._defaultConfig, config)\n }\n\n setData (data: CoreDatum): void {\n this.datamodel.data = data\n }\n\n setSize (width: number, height: number, containerWidth: number, containerHeight: number): void {\n if (isFinite(width)) this._width = width\n if (isFinite(height)) this._height = height\n if (isFinite(containerWidth)) this._containerWidth = containerWidth\n if (isFinite(containerHeight)) this._containerHeight = containerHeight\n }\n\n render (duration = this.config.duration): void {\n this._render(duration)\n\n // While transition is in progress, we add the 'animating' attribute to the component's SVG group\n const ANIMATING_ATTR = 'animating'\n if (duration) {\n this.g.attr(ANIMATING_ATTR, '')\n const transition = this.g\n .transition(ANIMATING_ATTR)\n .duration(duration) as Transition<SVGGElement | HTMLElement, unknown, null, undefined>\n\n transition.on('end interrupt', () => {\n this.g.attr(ANIMATING_ATTR, null)\n })\n }\n this._setUpComponentEventsThrottled()\n this._setCustomAttributesThrottled()\n }\n\n get bleed (): Spacing {\n return { top: 0, bottom: 0, left: 0, right: 0 }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n _render (duration = this.config.duration): void {\n }\n\n private _setCustomAttributes (): void {\n const attributeMap = this.config.attributes\n\n Object.keys(attributeMap).forEach(className => {\n Object.keys(attributeMap[className]).forEach(attr => {\n const selection = (this.g as Selection<SVGGElement | HTMLElement, unknown, null, undefined>)\n .selectAll<SVGGElement | HTMLElement, unknown>(`.${className}`)\n\n selection.attr(attr, attributeMap[className][attr] as ValueFn<SVGGElement | HTMLElement, unknown, string | number | boolean>)\n })\n })\n }\n\n private _setUpComponentEvents (): void {\n // Set up default events\n this._bindEvents(this.events)\n\n // Set up user-defined events\n this._bindEvents(this.config.events, '.user')\n }\n\n // Sometimes we don't want to pass the original data and/or index to the event handler.\n // This method can be overridden by components to implement a custom mapping.\n // See Stacked Bar and Scatter for examples.\n protected _mapEventDatum (datum: unknown, index: number): { datum: unknown; index: number } {\n return { datum, index }\n }\n\n private _bindEvents (events = this.events, suffix = ''): void {\n Object.keys(events).forEach(className => {\n Object.keys(events[className]).forEach(eventType => {\n const selection = (this.g as Selection<SVGGElement | HTMLElement, unknown, null, undefined>)\n .selectAll<SVGGElement | HTMLElement, unknown>(`.${className}`)\n selection.on(eventType + suffix, (event: MouseEvent & WheelEvent & PointerEvent & TouchEvent, d) => {\n const els = selection.nodes()\n const i = els.indexOf(event.currentTarget as SVGGElement | HTMLElement)\n const eventFunction = events[className][eventType as VisEventType]\n const { datum, index } = this._mapEventDatum(d, i)\n return eventFunction?.(datum, event, index, els)\n })\n })\n })\n }\n\n public destroy (): void {\n this.g?.remove()\n this.element = undefined\n }\n\n public isDestroyed (): boolean {\n return !this.element\n }\n}\n"],"names":[],"mappings":"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"}
package/index.js CHANGED
@@ -58,7 +58,7 @@ export { ChordLabelAlignment } from './components/chord-diagram/types.js';
58
58
  export { MapPointLabelPosition, MapProjection, MapProjectionKind, TopoJSONMapPointShape } from './components/topojson-map/types.js';
59
59
  export { LeafletMapPointShape, LeafletMapRenderer } from './components/leaflet-map/types.js';
60
60
  export { GraphFitViewAlignment, GraphLayoutType, GraphLinkArrowStyle, GraphLinkStyle, GraphNodeSelectionHighlightMode, GraphNodeShape } from './components/graph/types.js';
61
- export { SankeyEnterTransitionType, SankeyExitTransitionType, SankeyLayout, SankeyNodeAlign, SankeySubLabelPlacement, SankeyZoomMode } from './components/sankey/types.js';
61
+ export { SankeyEnterTransitionType, SankeyExitTransitionType, SankeyLayout, SankeyNodeAlign, SankeySubLabelPlacement, SankeyZoomMode, SankeyZoomOrigin } from './components/sankey/types.js';
62
62
  export { VisControlsOrientation } from './components/vis-controls/types.js';
63
63
  export { FreeBrushMode } from './components/free-brush/types.js';
64
64
  export { BulletLegendOrientation, BulletShape } from './components/bullet-legend/types.js';
@@ -75,6 +75,7 @@ export { getCSSVariableValue, getCSSVariableValueInPixels, getHref, getPixelValu
75
75
  export { DefaultRange } from './utils/scale.js';
76
76
  export { smartTransition } from './utils/d3.js';
77
77
  export { getDataLatLngBounds } from './utils/map.js';
78
- export { cssvar, getCssVarNames, injectGlobalCssVariables } from './utils/style.js';
78
+ export { cssvar, getCssVarNames, injectGlobalCssVariables, isDarkThemeEnabled } from './utils/style.js';
79
+ export { darkThemeCssSelectors } from './utils/theme.js';
79
80
  export { getHTMLTransform } from './utils/html.js';
80
81
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@unovis/ts",
3
3
  "description": "Modular data visualization framework for React, Angular, Svelte, Vue, Solid, and vanilla TypeScript or JavaScript",
4
- "version": "1.6.6-stellar.1",
4
+ "version": "1.6.7",
5
5
  "packageManager": "pnpm@10.23.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -35,9 +35,11 @@
35
35
  "dist/styles/index.js"
36
36
  ],
37
37
  "scripts": {
38
- "build": "sha=$(tar cf - ./src | shasum); if [[ $(echo $sha) == $(< .srcsha) ]] && [[ -d \"./dist\" ]]; then echo \"Lib Build Exists\"; else npm run forcebuild; echo $sha > .srcsha; fi",
39
- "forcebuild": "rimraf dist; rollup -c; rm -rf dist/.cache; cp LICENSE README.md package.json ./dist",
40
- "publish:dist": "cd ./dist; npm publish"
38
+ "build": "sha=$(tar cf - ./src | shasum); if [[ $(echo $sha) == $(< .srcsha) ]] && [[ -d \"./dist\" ]]; then echo \"Lib Build Exists\"; else npm run forcebuild; echo $sha > .srcsha; fi; npm run build:package-json",
39
+ "forcebuild": "rimraf dist; rollup -c; rm -rf dist/.cache; cp LICENSE README.md ./dist; npm run build:package-json",
40
+ "publish:dist": "cd ./dist; npm publish",
41
+ "build:package-json": "node -e \"const p=JSON.parse(require('fs').readFileSync('package.json','utf8')); delete p.typesVersions; require('fs').writeFileSync('./dist/package.json', JSON.stringify(p, null, 2))\"",
42
+ "license:check": "pnpm license-report --config=../../lic-report-config.json > licences.md"
41
43
  },
42
44
  "devDependencies": {
43
45
  "@rollup/plugin-json": "^4.1.0",
@@ -50,7 +52,8 @@
50
52
  "rollup-plugin-rename-node-modules": "^1.3.1",
51
53
  "rollup-plugin-terser": "^7.0.2",
52
54
  "rollup-plugin-typescript2": "^0.31.1",
53
- "rollup-plugin-visualizer": "^4.2.2"
55
+ "rollup-plugin-visualizer": "^4.2.2",
56
+ "typescript": "~4.2.4"
54
57
  },
55
58
  "dependencies": {
56
59
  "@emotion/css": "^11.7.1",
@@ -119,7 +122,6 @@
119
122
  "three": "^0.135.0",
120
123
  "throttle-debounce": "^5.0.0",
121
124
  "topojson-client": "^3.1.0",
122
- "tslib": "^2.3.1",
123
- "typescript": "~4.2.4"
125
+ "tslib": "^2.3.1"
124
126
  }
125
- }
127
+ }
package/styles/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { injectGlobal } from '@emotion/css';
2
2
  import { getCSSVariableValue } from '../utils/misc.js';
3
+ import { darkThemeCssSelectors } from '../utils/theme.js';
3
4
  import { getCSSColorVariable, getLighterColor, colors, getDarkerColor, colorsDark } from './colors.js';
4
5
  import { fills, getPatternVariable, lines } from './patterns.js';
5
6
 
@@ -40,7 +41,7 @@ const variables = injectGlobal `
40
41
  `;
41
42
  })}
42
43
 
43
- body.theme-dark {
44
+ ${darkThemeCssSelectors} {
44
45
  ${colors.map((c, i) => `${getCSSColorVariable(i)}: var(--vis-dark-color${i});`)}
45
46
  }
46
47
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/styles/index.ts"],"sourcesContent":["import { injectGlobal } from '@emotion/css'\nimport { getCSSVariableValue } from 'utils/misc'\nimport { UnovisText } from 'types/text'\nimport { colors, colorsDark, getCSSColorVariable, getLighterColor, getDarkerColor } from './colors'\nimport { fills, lines, getPatternVariable } from './patterns'\n\nexport const UNOVIS_ICON_FONT_FAMILY_DEFAULT = globalThis?.UNOVIS_ICON_FONT_FAMILY || 'FontAwesome'\nexport const UNOVIS_FONT_WH_RATIO_DEFAULT: number = globalThis?.UNOVIS_FONT_W2H_RATIO_DEFAULT || 0.5\nexport const UNOVIS_TEXT_SEPARATOR_DEFAULT: string[] = globalThis?.UNOVIS_TEXT_SEPARATOR_DEFAULT || [' ', '-', '.', ',']\nexport const UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT: string = globalThis?.UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT || '-'\nexport const UNOVIS_TEXT_DEFAULT: UnovisText = globalThis?.UNOVIS_TEXT_DEFAULT || {\n // If you change these defaults, don't forget to update the values in the `UnovisText` type in `types/text.ts`\n text: '',\n fontSize: 12,\n fontFamily: 'var(--vis-font-family)',\n lineHeight: 1.25,\n marginTop: 0,\n marginBottom: 0,\n}\n\nexport const variables = injectGlobal`\n :root {\n label: vis-root-styles;\n --vis-font-family: Inter, Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n --vis-font-wh-ratio: ${UNOVIS_FONT_WH_RATIO_DEFAULT};\n --vis-color-main: var(${getCSSColorVariable(0)});\n --vis-color-main-light: ${getLighterColor(colors[0])};\n --vis-color-main-dark: ${getDarkerColor(colors[0])};\n --vis-color-grey: #2a2a2a;\n ${colors.map((c, i) => `${getCSSColorVariable(i)}: ${c};`)}\n ${colorsDark.map((c, i) => `--vis-dark-color${i}: ${c};`)}\n ${fills.map((p, i) => `\n --${getPatternVariable(p)}: url(#${getPatternVariable(p)});\n --vis-pattern-fill${i}: var(--${getPatternVariable(p)});\n `)}\n ${lines.map((p, i) => `\n --${getPatternVariable(p)}: url(#${getPatternVariable(p)});\n --vis-pattern-marker${i}: var(--${getPatternVariable(p)});\n --vis-pattern-dasharray${i}: ${p.dashArray?.join(' ')};\n `)}\n\n body.theme-dark {\n ${colors.map((c, i) => `${getCSSColorVariable(i)}: var(--vis-dark-color${i});`)}\n }\n\n body.theme-patterns {\n ${fills.map((_, i) => `path[style*=\"fill: var(${getCSSColorVariable(i)})\"] {\n mask: var(--vis-pattern-fill${i});\n }`)}\n ${lines.map((_, i) => `\n path[stroke=\"var(${getCSSColorVariable(i)})\"]:not([style*=\"fill\"]),\n path[style*=\"stroke: var(${getCSSColorVariable(i)})\"]:not([style*=\"fill\"]) {\n marker: var(--vis-pattern-marker${i});\n stroke-dasharray: var(--vis-pattern-dasharray${i});\n }\n `)}\n}\n`\n\nexport function getFontWidthToHeightRatio (context: HTMLElement | SVGGElement | undefined = window?.document.body): number {\n return context ? +getCSSVariableValue('var(--vis-font-wh-ratio)', context) : UNOVIS_FONT_WH_RATIO_DEFAULT\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/styles/index.ts"],"sourcesContent":["import { injectGlobal } from '@emotion/css'\nimport { getCSSVariableValue } from 'utils/misc'\nimport { darkThemeCssSelectors } from 'utils/theme'\nimport { UnovisText } from 'types/text'\nimport { colors, colorsDark, getCSSColorVariable, getLighterColor, getDarkerColor } from './colors'\nimport { fills, lines, getPatternVariable } from './patterns'\n\nexport const UNOVIS_ICON_FONT_FAMILY_DEFAULT = globalThis?.UNOVIS_ICON_FONT_FAMILY || 'FontAwesome'\nexport const UNOVIS_FONT_WH_RATIO_DEFAULT: number = globalThis?.UNOVIS_FONT_W2H_RATIO_DEFAULT || 0.5\nexport const UNOVIS_TEXT_SEPARATOR_DEFAULT: string[] = globalThis?.UNOVIS_TEXT_SEPARATOR_DEFAULT || [' ', '-', '.', ',']\nexport const UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT: string = globalThis?.UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT || '-'\nexport const UNOVIS_TEXT_DEFAULT: UnovisText = globalThis?.UNOVIS_TEXT_DEFAULT || {\n // If you change these defaults, don't forget to update the values in the `UnovisText` type in `types/text.ts`\n text: '',\n fontSize: 12,\n fontFamily: 'var(--vis-font-family)',\n lineHeight: 1.25,\n marginTop: 0,\n marginBottom: 0,\n}\n\nexport const variables = injectGlobal`\n :root {\n label: vis-root-styles;\n --vis-font-family: Inter, Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n --vis-font-wh-ratio: ${UNOVIS_FONT_WH_RATIO_DEFAULT};\n --vis-color-main: var(${getCSSColorVariable(0)});\n --vis-color-main-light: ${getLighterColor(colors[0])};\n --vis-color-main-dark: ${getDarkerColor(colors[0])};\n --vis-color-grey: #2a2a2a;\n ${colors.map((c, i) => `${getCSSColorVariable(i)}: ${c};`)}\n ${colorsDark.map((c, i) => `--vis-dark-color${i}: ${c};`)}\n ${fills.map((p, i) => `\n --${getPatternVariable(p)}: url(#${getPatternVariable(p)});\n --vis-pattern-fill${i}: var(--${getPatternVariable(p)});\n `)}\n ${lines.map((p, i) => `\n --${getPatternVariable(p)}: url(#${getPatternVariable(p)});\n --vis-pattern-marker${i}: var(--${getPatternVariable(p)});\n --vis-pattern-dasharray${i}: ${p.dashArray?.join(' ')};\n `)}\n\n ${darkThemeCssSelectors} {\n ${colors.map((c, i) => `${getCSSColorVariable(i)}: var(--vis-dark-color${i});`)}\n }\n\n body.theme-patterns {\n ${fills.map((_, i) => `path[style*=\"fill: var(${getCSSColorVariable(i)})\"] {\n mask: var(--vis-pattern-fill${i});\n }`)}\n ${lines.map((_, i) => `\n path[stroke=\"var(${getCSSColorVariable(i)})\"]:not([style*=\"fill\"]),\n path[style*=\"stroke: var(${getCSSColorVariable(i)})\"]:not([style*=\"fill\"]) {\n marker: var(--vis-pattern-marker${i});\n stroke-dasharray: var(--vis-pattern-dasharray${i});\n }\n `)}\n}\n`\n\nexport function getFontWidthToHeightRatio (context: HTMLElement | SVGGElement | undefined = window?.document.body): number {\n return context ? +getCSSVariableValue('var(--vis-font-wh-ratio)', context) : UNOVIS_FONT_WH_RATIO_DEFAULT\n}\n"],"names":[],"mappings":"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"}
package/types/misc.js ADDED
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=misc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare type UnovisCssVariablesDefinition = Record<string, string | undefined>;
package/types.d.ts CHANGED
@@ -11,6 +11,7 @@ export * from "./types/spacing";
11
11
  export * from "./types/graph";
12
12
  export * from "./types/data";
13
13
  export * from "./types/direction";
14
+ export * from "./types/misc";
14
15
  export * from "./core/component/types";
15
16
  export * from "./components/crosshair/types";
16
17
  export * from "./components/axis/types";
package/types.js CHANGED
@@ -11,6 +11,7 @@ import './types/spacing.js';
11
11
  import './types/graph.js';
12
12
  export { FindNearestDirection } from './types/data.js';
13
13
  export { Direction } from './types/direction.js';
14
+ import './types/misc.js';
14
15
  import './core/component/types.js';
15
16
  import './components/crosshair/types.js';
16
17
  export { AxisType } from './components/axis/types.js';
@@ -19,7 +20,7 @@ export { MapPointLabelPosition, MapProjection, MapProjectionKind, TopoJSONMapPoi
19
20
  export { LeafletMapPointShape, LeafletMapRenderer } from './components/leaflet-map/types.js';
20
21
  export { MapLibreArcticDark, MapLibreArcticLight } from './components/leaflet-map/renderer/map-style.js';
21
22
  export { GraphFitViewAlignment, GraphLayoutType, GraphLinkArrowStyle, GraphLinkStyle, GraphNodeSelectionHighlightMode, GraphNodeShape } from './components/graph/types.js';
22
- export { SankeyEnterTransitionType, SankeyExitTransitionType, SankeyLayout, SankeyNodeAlign, SankeySubLabelPlacement, SankeyZoomMode } from './components/sankey/types.js';
23
+ export { SankeyEnterTransitionType, SankeyExitTransitionType, SankeyLayout, SankeyNodeAlign, SankeySubLabelPlacement, SankeyZoomMode, SankeyZoomOrigin } from './components/sankey/types.js';
23
24
  export { VisControlsOrientation } from './components/vis-controls/types.js';
24
25
  export { FreeBrushMode } from './components/free-brush/types.js';
25
26
  export { BulletLegendOrientation, BulletShape } from './components/bullet-legend/types.js';
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["/* eslint-disable max-len */\n// Global Types\nexport * from 'types/accessor'\nexport * from 'types/curve'\nexport * from 'types/symbol'\nexport * from 'types/scale'\nexport * from 'types/position'\nexport * from 'types/shape'\nexport * from 'types/component'\nexport * from 'types/text'\nexport * from 'types/map'\nexport * from 'types/spacing'\nexport * from 'types/graph'\nexport * from 'types/data'\nexport * from 'types/direction'\n\n// Component Types\nexport * from 'core/component/types'\nexport * from 'components/crosshair/types'\nexport * from 'components/axis/types'\nexport * from 'components/chord-diagram/types'\nexport * from 'components/topojson-map/types'\nexport * from 'components/leaflet-map/types'\nexport * from 'components/leaflet-map/renderer/map-style'\nexport * from 'components/graph/types'\nexport * from 'components/sankey/types'\nexport * from 'components/vis-controls/types'\nexport * from 'components/free-brush/types'\nexport * from 'components/bullet-legend/types'\nexport * from 'components/rolling-pin-legend/types'\nexport * from 'components/xy-labels/types'\nexport * from 'components/nested-donut/types'\nexport * from 'components/annotations/types'\nexport * from 'components/plotline/types'\nexport * from 'components/timeline/types'\nexport * from 'components/plotband/types'\nexport * from 'components/treemap/types'\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA"}
1
+ {"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["/* eslint-disable max-len */\n// Global Types\nexport * from 'types/accessor'\nexport * from 'types/curve'\nexport * from 'types/symbol'\nexport * from 'types/scale'\nexport * from 'types/position'\nexport * from 'types/shape'\nexport * from 'types/component'\nexport * from 'types/text'\nexport * from 'types/map'\nexport * from 'types/spacing'\nexport * from 'types/graph'\nexport * from 'types/data'\nexport * from 'types/direction'\nexport * from 'types/misc'\n\n// Component Types\nexport * from 'core/component/types'\nexport * from 'components/crosshair/types'\nexport * from 'components/axis/types'\nexport * from 'components/chord-diagram/types'\nexport * from 'components/topojson-map/types'\nexport * from 'components/leaflet-map/types'\nexport * from 'components/leaflet-map/renderer/map-style'\nexport * from 'components/graph/types'\nexport * from 'components/sankey/types'\nexport * from 'components/vis-controls/types'\nexport * from 'components/free-brush/types'\nexport * from 'components/bullet-legend/types'\nexport * from 'components/rolling-pin-legend/types'\nexport * from 'components/xy-labels/types'\nexport * from 'components/nested-donut/types'\nexport * from 'components/annotations/types'\nexport * from 'components/plotline/types'\nexport * from 'components/timeline/types'\nexport * from 'components/plotband/types'\nexport * from 'components/treemap/types'\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA"}
package/utils/index.d.ts CHANGED
@@ -9,4 +9,5 @@ export * from './scale';
9
9
  export * from './d3';
10
10
  export * from './map';
11
11
  export * from './style';
12
+ export * from './theme';
12
13
  export * from './html';
package/utils/index.js CHANGED
@@ -8,6 +8,7 @@ import './type.js';
8
8
  export { DefaultRange } from './scale.js';
9
9
  export { smartTransition } from './d3.js';
10
10
  export { getDataLatLngBounds } from './map.js';
11
- export { cssvar, getCssVarNames, injectGlobalCssVariables } from './style.js';
11
+ export { cssvar, getCssVarNames, injectGlobalCssVariables, isDarkThemeEnabled } from './style.js';
12
+ export { darkThemeCssSelectors } from './theme.js';
12
13
  export { getHTMLTransform } from './html.js';
13
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
package/utils/style.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { KebabToCamelCase, RemovePrefix } from "./type";
2
+ export declare const isDarkThemeEnabled: (...targetElements: HTMLElement[]) => boolean;
2
3
  export declare function getCssVarNames<T extends Record<string, unknown>, Prefix extends string = '--vis-'>(cssVarsObject: T, prefix?: Prefix): {
3
4
  [Property in Extract<keyof T, string> as KebabToCamelCase<RemovePrefix<Property, Prefix>>]: Property;
4
5
  };
package/utils/style.js CHANGED
@@ -1,6 +1,12 @@
1
1
  import { injectGlobal } from '@emotion/css';
2
2
  import { kebabCaseToCamel } from './text.js';
3
+ import { darkThemeCssSelectors } from './theme.js';
3
4
 
5
+ const isDarkThemeEnabled = (...targetElements) => {
6
+ const elements = targetElements.length > 0 ? targetElements : [document.documentElement, document.body];
7
+ return (elements.some(element => element.getAttribute('data-theme') === 'dark') ||
8
+ ['dark-theme', 'theme-dark'].some((className) => elements.some(element => element.classList.contains(className))));
9
+ };
4
10
  function getCssVarNames(cssVarsObject, prefix) {
5
11
  const defaultPrefix = '--vis-';
6
12
  const entries = Object.entries(cssVarsObject);
@@ -9,7 +15,7 @@ function getCssVarNames(cssVarsObject, prefix) {
9
15
  function injectGlobalCssVariables(cssVarsObject, componentRootClassName) {
10
16
  injectGlobal({
11
17
  ':root': cssVarsObject,
12
- [`body.theme-dark .${componentRootClassName}`]: Object.keys(cssVarsObject)
18
+ [`${darkThemeCssSelectors} .${componentRootClassName}`]: Object.keys(cssVarsObject)
13
19
  .filter(key => key.includes('--vis-dark'))
14
20
  .map(key => ({
15
21
  [key.replace('--vis-dark', '--vis')]: `var(${key})`,
@@ -20,5 +26,5 @@ function cssvar(name) {
20
26
  return `var(${name})`;
21
27
  }
22
28
 
23
- export { cssvar, getCssVarNames, injectGlobalCssVariables };
29
+ export { cssvar, getCssVarNames, injectGlobalCssVariables, isDarkThemeEnabled };
24
30
  //# sourceMappingURL=style.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","sources":["../../src/utils/style.ts"],"sourcesContent":["import { injectGlobal } from '@emotion/css'\n\nimport { kebabCaseToCamel } from 'utils/text'\nimport type { KebabToCamelCase, RemovePrefix } from 'utils/type'\n\nexport function getCssVarNames<\n T extends Record<string, unknown>,\n Prefix extends string = '--vis-',\n> (cssVarsObject: T, prefix?: Prefix): {\n [Property in Extract<keyof T, string> as KebabToCamelCase<RemovePrefix<Property, Prefix>>]: Property\n} {\n const defaultPrefix = '--vis-'\n const entries = Object.entries(cssVarsObject)\n return Object.fromEntries(\n entries.map(([key]) => [kebabCaseToCamel(key.replace(prefix ?? defaultPrefix, '')), key])\n ) as {\n [Property in Extract<keyof T, string> as KebabToCamelCase<RemovePrefix<Property, Prefix>>]: Property\n }\n}\n\nexport function injectGlobalCssVariables<T extends Record<string, string | number | undefined>> (\n cssVarsObject: T,\n componentRootClassName: string\n): void {\n injectGlobal({\n ':root': cssVarsObject,\n [`body.theme-dark .${componentRootClassName}`]: Object.keys(cssVarsObject)\n .filter(key => key.includes('--vis-dark'))\n .map(key => ({\n [key.replace('--vis-dark', '--vis')]: `var(${key})`,\n })),\n })\n}\n\nexport function cssvar<T extends string> (name: T): `var(${T})` {\n return `var(${name})` as `var(${T})`\n}\n"],"names":[],"mappings":";;;AAKgB,SAAA,cAAc,CAG3B,aAAgB,EAAE,MAAe,EAAA;IAGlC,MAAM,aAAa,GAAG,QAAQ,CAAA;IAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;AAC7C,IAAA,OAAO,MAAM,CAAC,WAAW,CACvB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAN,MAAM,GAAI,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAG1F,CAAA;AACH,CAAC;AAEe,SAAA,wBAAwB,CACtC,aAAgB,EAChB,sBAA8B,EAAA;AAE9B,IAAA,YAAY,CAAC;AACX,QAAA,OAAO,EAAE,aAAa;QACtB,CAAC,CAAA,iBAAA,EAAoB,sBAAsB,CAAA,CAAE,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;aACvE,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACzC,aAAA,GAAG,CAAC,GAAG,KAAK;AACX,YAAA,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAO,IAAA,EAAA,GAAG,CAAG,CAAA,CAAA;AACpD,SAAA,CAAC,CAAC;AACN,KAAA,CAAC,CAAA;AACJ,CAAC;AAEK,SAAU,MAAM,CAAoB,IAAO,EAAA;IAC/C,OAAO,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA,CAAkB,CAAA;AACtC;;;;"}
1
+ {"version":3,"file":"style.js","sources":["../../src/utils/style.ts"],"sourcesContent":["import { injectGlobal } from '@emotion/css'\n\nimport { kebabCaseToCamel } from 'utils/text'\nimport type { KebabToCamelCase, RemovePrefix } from 'utils/type'\nimport { darkThemeCssSelectors } from 'utils/theme'\n\nexport const isDarkThemeEnabled = (...targetElements: HTMLElement[]): boolean => {\n const elements = targetElements.length > 0 ? targetElements : [document.documentElement, document.body]\n\n return (\n elements.some(element => element.getAttribute('data-theme') === 'dark') ||\n ['dark-theme', 'theme-dark'].some(\n (className) => elements.some(element =>\n element.classList.contains(className)\n )\n )\n )\n}\n\nexport function getCssVarNames<\n T extends Record<string, unknown>,\n Prefix extends string = '--vis-',\n> (cssVarsObject: T, prefix?: Prefix): {\n [Property in Extract<keyof T, string> as KebabToCamelCase<RemovePrefix<Property, Prefix>>]: Property\n} {\n const defaultPrefix = '--vis-'\n const entries = Object.entries(cssVarsObject)\n return Object.fromEntries(\n entries.map(([key]) => [kebabCaseToCamel(key.replace(prefix ?? defaultPrefix, '')), key])\n ) as {\n [Property in Extract<keyof T, string> as KebabToCamelCase<RemovePrefix<Property, Prefix>>]: Property\n }\n}\n\nexport function injectGlobalCssVariables<T extends Record<string, string | number | undefined>> (\n cssVarsObject: T,\n componentRootClassName: string\n): void {\n injectGlobal({\n ':root': cssVarsObject,\n [`${darkThemeCssSelectors} .${componentRootClassName}`]: Object.keys(cssVarsObject)\n .filter(key => key.includes('--vis-dark'))\n .map(key => ({\n [key.replace('--vis-dark', '--vis')]: `var(${key})`,\n })),\n })\n}\n\nexport function cssvar<T extends string> (name: T): `var(${T})` {\n return `var(${name})` as `var(${T})`\n}\n"],"names":[],"mappings":";;;;MAMa,kBAAkB,GAAG,CAAC,GAAG,cAA6B,KAAa;IAC9E,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;AAEvG,IAAA,QACE,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,MAAM,CAAC;AACvE,QAAA,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,IAAI,CAC/B,CAAC,SAAS,KAAK,QAAQ,CAAC,IAAI,CAAC,OAAO,IAClC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CACtC,CACF,EACF;AACH,EAAC;AAEe,SAAA,cAAc,CAG3B,aAAgB,EAAE,MAAe,EAAA;IAGlC,MAAM,aAAa,GAAG,QAAQ,CAAA;IAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;AAC7C,IAAA,OAAO,MAAM,CAAC,WAAW,CACvB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAN,MAAM,GAAI,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAG1F,CAAA;AACH,CAAC;AAEe,SAAA,wBAAwB,CACtC,aAAgB,EAChB,sBAA8B,EAAA;AAE9B,IAAA,YAAY,CAAC;AACX,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,CAAC,CAAG,EAAA,qBAAqB,CAAK,EAAA,EAAA,sBAAsB,CAAE,CAAA,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;aAChF,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACzC,aAAA,GAAG,CAAC,GAAG,KAAK;AACX,YAAA,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAO,IAAA,EAAA,GAAG,CAAG,CAAA,CAAA;AACpD,SAAA,CAAC,CAAC;AACN,KAAA,CAAC,CAAA;AACJ,CAAC;AAEK,SAAU,MAAM,CAAoB,IAAO,EAAA;IAC/C,OAAO,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA,CAAkB,CAAA;AACtC;;;;"}
package/utils/text.js CHANGED
@@ -3,7 +3,8 @@ import striptags from 'striptags';
3
3
  import { TextAlign, TrimMode, VerticalAlign } from '../types/text.js';
4
4
  import { flatten, isArray, merge } from './data.js';
5
5
  import { getTextAnchorFromTextAlign } from '../types/svg.js';
6
- import { getFontWidthToHeightRatio, UNOVIS_TEXT_DEFAULT, UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT, UNOVIS_TEXT_SEPARATOR_DEFAULT } from '../styles/index.js';
6
+ import { toPx } from './to-px.js';
7
+ import { UNOVIS_TEXT_DEFAULT, getFontWidthToHeightRatio, UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT, UNOVIS_TEXT_SEPARATOR_DEFAULT } from '../styles/index.js';
7
8
 
8
9
  const textAlignToAnchor = (textAlign) => {
9
10
  switch (textAlign) {
@@ -148,6 +149,9 @@ function wrapSVGText(textElement, width, separator = [' ', '-', '.', ',']) {
148
149
  tspanContent += word;
149
150
  });
150
151
  }
152
+ // TODO: When we calculate `maxCharacters` we don't take into account that the ellipsis character is wider than the regular characters,
153
+ // which sometimes leads to labels getting cut off. We should rethink the tolerance value and maybe subtract a few characters from `maxCharacters`,
154
+ // but this can be a breaking change and should be done carefully testing all components that use `trimSVGText`
151
155
  /**
152
156
  * Trims an SVG text element based on the specified max width, trim type, and other options.
153
157
  * @param {Selection<SVGTextElement, any, SVGElement, any>} svgTextSelection - The D3 selection of the SVG text element to be trimmed.
@@ -163,7 +167,7 @@ function trimSVGText(svgTextSelection, maxWidth, trimType, fastMode, fontSize, f
163
167
  if (maxWidth === void 0) { maxWidth = 50; }
164
168
  if (trimType === void 0) { trimType = TrimMode.Middle; }
165
169
  if (fastMode === void 0) { fastMode = true; }
166
- if (fontSize === void 0) { fontSize = +((_a = window.getComputedStyle(svgTextSelection.node())) === null || _a === void 0 ? void 0 : _a.fontSize) || 0; }
170
+ if (fontSize === void 0) { fontSize = toPx(((_a = window.getComputedStyle(svgTextSelection.node())) === null || _a === void 0 ? void 0 : _a.fontSize) || UNOVIS_TEXT_DEFAULT.fontSize); }
167
171
  if (fontWidthToHeightRatio === void 0) { fontWidthToHeightRatio = getFontWidthToHeightRatio(); }
168
172
  const text = svgTextSelection.text() || '';
169
173
  const textLength = text.length;