rapidograph 1.0.7 → 1.0.9

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.
@@ -47,7 +47,6 @@ export declare class Rapidobar extends LitElement {
47
47
  private _textSizeDiv;
48
48
  private _bars;
49
49
  render(): import('lit-html').TemplateResult<1>;
50
- connectedCallback(): void;
51
50
  protected firstUpdated(_changedProperties: PropertyValues): void;
52
51
  updated(changedProperties: Map<string, never>): void;
53
52
  private _calculateYAxisWidths;
@@ -1,21 +1,21 @@
1
- import { LitElement as V, unsafeCSS as z, css as H, html as c, nothing as S } from "lit";
2
- import { state as _, property as d, query as y, queryAll as R, eventOptions as A, customElement as N } from "lit/decorators.js";
1
+ import { LitElement as V, unsafeCSS as z, css as H, html as c, nothing as $ } from "lit";
2
+ import { state as _, property as d, query as y, queryAll as R, eventOptions as b, customElement as N } from "lit/decorators.js";
3
3
  import { Tooltip as K } from "../../helpers/tooltip/index.js";
4
- import { classMap as C } from "lit/directives/class-map.js";
4
+ import { classMap as B } from "lit/directives/class-map.js";
5
5
  import { styleMap as F } from "lit/directives/style-map.js";
6
6
  import U from "./rapidobar.css.js";
7
- import { Orientation as b, XAxisPosition as T, YAxisPosition as v, Theme as m, ShowLabels as k } from "../../shared/enums.js";
8
- import { formatLabels as P, getMinAndMax as j, generateTicks as q, checkIfSomePositiveAndNegative as G, checkIfAllPositiveOrNegative as J, noop as Q, formatLabel as D, getSizeInPercentages as Z, getUpdatedYAxisWidth as f } from "../../utils/rapidobar.js";
9
- import { MIN_Y_AXIS_WIDTH as tt, MAX_Y_AXIS_WIDTH as L, DEFAULT_Y_AXIS_WIDTH as it, X_AXIS_LAST_LABEL_CSS_VAR as et, X_AXIS_FIRST_LABEL_CSS_VAR as st, DATA_LENGTH_CSS_VAR as at, X_AXIS_HEIGHT_CSS_VAR as rt, Y_AXIS_WIDTH_CSS_VAR as I, SCROLLBAR_WIDTH_CSS_VAR as ot } from "../../shared/constants.js";
10
- import { calculateYAxisWidths as nt, getTextWidth as M, getScrollbarSize as lt } from "../../utils/dom.js";
11
- var ht = Object.defineProperty, ct = Object.getOwnPropertyDescriptor, s = (t, i, a, o) => {
12
- for (var r = o > 1 ? void 0 : o ? ct(i, a) : i, l = t.length - 1, n; l >= 0; l--)
13
- (n = t[l]) && (r = (o ? n(i, a, r) : n(r)) || r);
14
- return o && r && ht(i, a, r), r;
7
+ import { Orientation as u, XAxisPosition as I, YAxisPosition as g, Theme as A, ShowLabels as M } from "../../shared/enums.js";
8
+ import { analyzeValues as j, formatLabels as S, generateTicks as q, noop as G, formatLabel as P, getSizeInPercentages as J, getUpdatedYAxisWidth as v } from "../../utils/rapidobar.js";
9
+ import { MIN_Y_AXIS_WIDTH as Q, MAX_Y_AXIS_WIDTH as m, DEFAULT_Y_AXIS_WIDTH as Z, X_AXIS_LAST_LABEL_CSS_VAR as tt, X_AXIS_FIRST_LABEL_CSS_VAR as it, DATA_LENGTH_CSS_VAR as et, X_AXIS_HEIGHT_CSS_VAR as st, Y_AXIS_WIDTH_CSS_VAR as C, SCROLLBAR_WIDTH_CSS_VAR as at } from "../../shared/constants.js";
10
+ import { calculateYAxisWidths as rt, getTextWidth as D, getScrollbarSize as ot } from "../../utils/dom.js";
11
+ var nt = Object.defineProperty, lt = Object.getOwnPropertyDescriptor, s = (t, i, r, o) => {
12
+ for (var a = o > 1 ? void 0 : o ? lt(i, r) : i, n = t.length - 1, l; n >= 0; n--)
13
+ (l = t[n]) && (a = (o ? l(i, r, a) : l(a)) || a);
14
+ return o && a && nt(i, r, a), a;
15
15
  };
16
16
  let e = class extends V {
17
17
  constructor() {
18
- super(...arguments), this._data = [], this._categoryLabels = [], this._ticks = [], this._tickLabels = [], this._hasPositive = !0, this._hasNegative = !1, this._allPositive = !0, this._allNegative = !1, this._yAxisMinWidth = tt, this._yAxisMaxWidth = L, this._xAxisHeight = 0, this._firstXAxisLabelWidth = 0, this._lastXAxisLabelWidth = 0, this._scrollbarSize = 0, this._activeBar = null, this._yAxisWidth = it, this._isDraggingYAxis = !1, this._focusedBarIndex = 0, this.formatters = {}, this.orientation = b.Vertical, this.xAxisPosition = T.Bottom, this.yAxisPosition = v.Left, this.theme = m.Light, this.tooltipTheme = m.Light, this.categoryLabel = "", this.valueLabel = "", this.showLabels = k.Always;
18
+ super(...arguments), this._data = [], this._categoryLabels = [], this._ticks = [], this._tickLabels = [], this._hasPositive = !0, this._hasNegative = !1, this._allPositive = !0, this._allNegative = !1, this._yAxisMinWidth = Q, this._yAxisMaxWidth = m, this._xAxisHeight = 0, this._firstXAxisLabelWidth = 0, this._lastXAxisLabelWidth = 0, this._scrollbarSize = 0, this._activeBar = null, this._yAxisWidth = Z, this._isDraggingYAxis = !1, this._focusedBarIndex = 0, this.formatters = {}, this.orientation = u.Vertical, this.xAxisPosition = I.Bottom, this.yAxisPosition = g.Left, this.theme = A.Light, this.tooltipTheme = A.Light, this.categoryLabel = "", this.valueLabel = "", this.showLabels = M.Always;
19
19
  }
20
20
  static get styles() {
21
21
  return H`
@@ -35,12 +35,12 @@ let e = class extends V {
35
35
  set data(t) {
36
36
  const i = this._data;
37
37
  this._data = t, this.requestUpdate("data", i);
38
- const a = this._data.length, o = new Array(a), r = new Array(a);
39
- this.data.forEach(({ category: x, value: u }, p) => {
40
- o[p] = x, r[p] = u;
41
- }), this._categoryLabels = P(o, this.formatters.category);
42
- const [l, n] = j(r);
43
- this._ticks = q(l, n), this._tickLabels = P(this._ticks, this.formatters.value), [this._hasPositive, this._hasNegative] = G(r), [this._allPositive, this._allNegative] = J(r), this._calculateTickWidths();
38
+ const r = this._data.length, o = new Array(r), a = new Array(r);
39
+ this.data.forEach(({ category: l, value: x }, p) => {
40
+ o[p] = l, a[p] = x;
41
+ });
42
+ const n = j(a);
43
+ this._hasPositive = n.hasPositive, this._hasNegative = n.hasNegative, this._allPositive = n.allPositive, this._allNegative = n.allNegative, this._categoryLabels = S(o, this.formatters.category), this._ticks = q(n.axisMin, n.axisMax), this._tickLabels = S(this._ticks, this.formatters.value), this._calculateTickWidths();
44
44
  }
45
45
  get _wrapperClasses() {
46
46
  return {
@@ -53,12 +53,12 @@ let e = class extends V {
53
53
  }
54
54
  get _wrapperStyles() {
55
55
  return {
56
- [ot]: `${this._scrollbarSize}px`,
57
- [I]: `${this._yAxisWidth}px`,
58
- [rt]: `${this._xAxisHeight}px`,
59
- [at]: this.data.length,
60
- [st]: `${this._firstXAxisLabelWidth}px`,
61
- [et]: `${this._lastXAxisLabelWidth}px`
56
+ [at]: `${this._scrollbarSize}px`,
57
+ [C]: `${this._yAxisWidth}px`,
58
+ [st]: `${this._xAxisHeight}px`,
59
+ [et]: this.data.length,
60
+ [it]: `${this._firstXAxisLabelWidth}px`,
61
+ [tt]: `${this._lastXAxisLabelWidth}px`
62
62
  };
63
63
  }
64
64
  get _barContainerClasses() {
@@ -68,105 +68,93 @@ let e = class extends V {
68
68
  };
69
69
  }
70
70
  render() {
71
- const t = this.orientation === b.Vertical, i = t ? this.categoryLabel : this.valueLabel, a = t ? this.valueLabel : this.categoryLabel;
72
- let o, r;
73
- t ? (o = this._categoryLabels, r = this._tickLabels) : (o = this._tickLabels, r = this._categoryLabels);
74
- const l = [];
75
- for (const h of o)
76
- l.push(c`
77
- <div class="rpg-axis-label" title=${h}>${h}</div>
78
- `);
79
- const n = c`
71
+ const t = this.orientation === u.Vertical, i = t ? this.categoryLabel : this.valueLabel, r = t ? this.valueLabel : this.categoryLabel;
72
+ let o, a;
73
+ t ? (o = this._categoryLabels, a = this._tickLabels) : (o = this._tickLabels, a = this._categoryLabels);
74
+ const n = o.map(
75
+ (h) => c`<div class="rpg-axis-label" title=${h}>${h}</div>`
76
+ ), l = c`
80
77
  <div class="rpg-x-axis">
81
78
  ${i ? c`<div class="rpg-axis-label rpg-axis-title">
82
79
  <div class="rpg-axis-title-content">${i}</div>
83
- </div>` : S}
84
- <div class="rpg-x-axis-labels">${l}</div>
80
+ </div>` : $}
81
+ <div class="rpg-x-axis-labels">${n}</div>
85
82
  </div>
86
- `, x = [];
87
- for (const h of r)
88
- x.push(c`
89
- <div class="rpg-axis-label" title=${h}>${h}</div>
90
- `);
91
- const u = c`
83
+ `, x = a.map(
84
+ (h) => c`<div class="rpg-axis-label" title=${h}>${h}</div>`
85
+ ), p = c`
92
86
  <div class="rpg-y-axis">
93
87
  <div class="rpg-y-axis-labels">${x}</div>
94
88
  <div
95
89
  class="rpg-y-axis-line-container"
96
90
  role="slider"
97
- tabindex=${this.yAxisPosition === v.Left ? "1" : "0"}
91
+ tabindex=${this.yAxisPosition === g.Left ? "1" : "0"}
98
92
  aria-valuemin="0"
99
93
  aria-valuemax="100"
100
94
  aria-valuenow=${this._yAxisWidthPercentage}
101
95
  aria-valuetext=${this._yAxisWidthDescription}
102
96
  aria-label=${`Y-axis positioned ${this.yAxisPosition}`}
103
- @dragstart=${Q}
97
+ @dragstart=${G}
104
98
  @pointerdown=${this.onYAxisPointerDown}
105
99
  @keydown=${this.onYAxisKeyDown}
106
100
  >
107
- ${a ? c`<div class="rpg-axis-label rpg-axis-title">
108
- <div class="rpg-axis-title-content">${a}</div>
109
- </div>` : S}
101
+ ${r ? c`<div class="rpg-axis-label rpg-axis-title">
102
+ <div class="rpg-axis-title-content">${r}</div>
103
+ </div>` : $}
110
104
  <div class="rpg-y-axis-line"></div>
111
105
  </div>
112
106
  </div>
113
- `, p = [];
114
- for (let h = 0; h < this._ticks.length - 1; h++)
115
- p.push(c`<div class="rpg-gridline"></div>`);
116
- const W = [];
117
- for (const [h, { value: g }] of this.data.entries()) {
118
- const w = h === this._focusedBarIndex, $ = this._categoryLabels[h], X = this._tickLabels[h], B = D(g, this.formatters.data), Y = D(
119
- g,
107
+ `, T = this._ticks.slice(1).map(() => c`<div class="rpg-gridline"></div>`), X = this.data.map(({ value: h }, f) => {
108
+ const L = f === this._focusedBarIndex, W = this._categoryLabels[f], Y = this._tickLabels[f], w = P(h, this.formatters.data), E = P(
109
+ h,
120
110
  this.formatters.tooltip || this.formatters.value
121
- ), E = this._allPositive || !this._allNegative ? g >= 0 : g > 0, O = Z(
122
- g,
111
+ ), k = this._allPositive || !this._allNegative ? h >= 0 : h > 0, O = J(
112
+ h,
123
113
  this._ticks[0],
124
114
  this._ticks.at(-1)
125
115
  );
126
- W.push(
127
- c`<li
128
- class="rpg-bar ${E ? "positive" : "negative"}"
129
- tabindex=${w ? 0 : -1}
130
- aria-current=${w ? "true" : "false"}
131
- aria-label="${$}: ${X}"
132
- data-category=${$}
133
- data-value=${Y}
116
+ return c`<li
117
+ class="rpg-bar ${k ? "positive" : "negative"}"
118
+ tabindex=${L ? 0 : -1}
119
+ aria-current=${L ? "true" : "false"}
120
+ aria-label="${W}: ${Y}"
121
+ data-category=${W}
122
+ data-value=${E}
123
+ >
124
+ <div
125
+ class="rpg-bar-content"
126
+ style="--rpg-bar-size: ${Math.abs(O)}%;"
134
127
  >
135
- <div
136
- class="rpg-bar-content"
137
- style="--rpg-bar-size: ${Math.abs(O)}%;"
138
- >
139
- <div class="rpg-bar-label">${B}</div>
140
- <div class="rpg-small-bar-label">${B}</div>
141
- </div>
142
- </li>`
143
- );
144
- }
128
+ <div class="rpg-bar-label">${w}</div>
129
+ <div class="rpg-small-bar-label">${w}</div>
130
+ </div>
131
+ </li>`;
132
+ });
145
133
  return c`
146
134
  <div
147
- class=${C(this._wrapperClasses)}
135
+ class=${B(this._wrapperClasses)}
148
136
  style=${F(this._wrapperStyles)}
149
137
  role="figure"
150
138
  >
151
139
  <div class="rpg-scrollable">
152
140
  <div class="rpg-scrollable-content">
153
- ${t ? n : u}
141
+ ${t ? l : p}
154
142
  <div class="rpg-content-container">
155
- <div class="rpg-gridlines">${p}</div>
143
+ <div class="rpg-gridlines">${T}</div>
156
144
  <ul
157
- class=${C(this._barContainerClasses)}
145
+ class=${B(this._barContainerClasses)}
158
146
  @mouseenter=${this.onBarEnter}
159
147
  @mouseleave=${this.onBarContainerMouseLeave}
160
148
  @focus=${this.onBarContainerFocus}
161
149
  @blur=${this.onBarContainerBlur}
162
150
  @keydown=${this.onBarContainerKeyDown}
163
151
  >
164
- ${this.data.length ? W : c`<div class="rpg-empty-state">No data</div>`}
152
+ ${this.data.length ? X : c`<div class="rpg-empty-state">No data</div>`}
165
153
  </ul>
166
154
  </div>
167
155
  </div>
168
156
  </div>
169
- ${t ? u : n}
157
+ ${t ? p : l}
170
158
  </div>
171
159
  <tool-tip
172
160
  .element=${this._isDraggingYAxis ? null : this._activeBar}
@@ -178,18 +166,15 @@ let e = class extends V {
178
166
  <div id="rpg-get-text-width" class="rpg-axis-label"></div>
179
167
  `;
180
168
  }
181
- connectedCallback() {
182
- super.connectedCallback(), customElements.get("tool-tip") || customElements.define("tool-tip", K);
183
- }
184
169
  firstUpdated(t) {
185
170
  super.firstUpdated(t), this._calculateYAxisWidths(), this.addObservers();
186
171
  }
187
172
  updated(t) {
188
- this._xAxis && (this._xAxisHeight = this._xAxis.getBoundingClientRect().height ?? 0), (t.get("orientation") || t.get("data")) && this._calculateYAxisWidths();
173
+ this._xAxis && (this._xAxisHeight = (this._xAxis.getBoundingClientRect().height || 1) - 1), (t.has("orientation") || t.has("data")) && this._calculateYAxisWidths();
189
174
  }
190
175
  _calculateYAxisWidths() {
191
- const t = this.orientation === b.Vertical;
192
- [this._yAxisMinWidth, this._yAxisWidth, this._yAxisMaxWidth] = nt(
176
+ const t = this.orientation === u.Vertical;
177
+ [this._yAxisMinWidth, this._yAxisWidth, this._yAxisMaxWidth] = rt(
193
178
  this._textSizeDiv,
194
179
  this._wrapper,
195
180
  this._yAxis,
@@ -197,10 +182,10 @@ let e = class extends V {
197
182
  );
198
183
  }
199
184
  _calculateTickWidths() {
200
- this._firstXAxisLabelWidth = M(
185
+ this._firstXAxisLabelWidth = D(
201
186
  this._textSizeDiv,
202
187
  this._tickLabels[0].toString()
203
- ), this._lastXAxisLabelWidth = M(
188
+ ), this._lastXAxisLabelWidth = D(
204
189
  this._textSizeDiv,
205
190
  this._tickLabels.at(-1)?.toString()
206
191
  );
@@ -210,7 +195,7 @@ let e = class extends V {
210
195
  root: this._scrollableElem,
211
196
  threshold: 1
212
197
  }, i = () => {
213
- this._scrollbarSize = lt(
198
+ this._scrollbarSize = ot(
214
199
  this.orientation,
215
200
  this._scrollableElem
216
201
  );
@@ -238,50 +223,50 @@ let e = class extends V {
238
223
  (!i || i && !this._barContainer.contains(i)) && (this._activeBar = null, this._focusedBarIndex = 0);
239
224
  }
240
225
  onBarContainerKeyDown(t) {
241
- const i = this.orientation === b.Vertical, a = i ? "ArrowRight" : "ArrowDown", o = i ? "ArrowLeft" : "ArrowUp", r = t.key;
242
- r === a ? (t.preventDefault(), this._focusedBarIndex = Math.min(
226
+ const i = this.orientation === u.Vertical, r = i ? "ArrowRight" : "ArrowDown", o = i ? "ArrowLeft" : "ArrowUp", a = t.key;
227
+ a === r ? (t.preventDefault(), this._focusedBarIndex = Math.min(
243
228
  this._focusedBarIndex + 1,
244
229
  this.data.length - 1
245
- ), this._bars[this._focusedBarIndex].focus()) : r === o ? (t.preventDefault(), this._focusedBarIndex = Math.max(this._focusedBarIndex - 1, 0), this._bars[this._focusedBarIndex].focus()) : r === "Home" ? (t.preventDefault(), this._focusedBarIndex = 0, this._bars[this._focusedBarIndex].focus()) : r === "End" && (t.preventDefault(), this._focusedBarIndex = this.data.length - 1, this._bars[this._focusedBarIndex].focus());
230
+ ), this._bars[this._focusedBarIndex].focus()) : a === o ? (t.preventDefault(), this._focusedBarIndex = Math.max(this._focusedBarIndex - 1, 0), this._bars[this._focusedBarIndex].focus()) : a === "Home" ? (t.preventDefault(), this._focusedBarIndex = 0, this._bars[this._focusedBarIndex].focus()) : a === "End" && (t.preventDefault(), this._focusedBarIndex = this.data.length - 1, this._bars[this._focusedBarIndex].focus());
246
231
  }
247
232
  onYAxisPointerDown(t) {
248
233
  t.preventDefault(), this._isDraggingYAxis = !0;
249
234
  let i = this._yAxisWidth;
250
- const a = this, o = (l) => {
251
- const n = a._wrapper, x = l.clientX, u = t.clientX;
252
- i = a._yAxisWidth + (a.yAxisPosition === v.Left ? x - u : u - x);
253
- let p = a._yAxisMaxWidth;
254
- i < a._yAxisMinWidth && (i = a._yAxisMinWidth), a._yAxisMaxWidth > n.offsetWidth - L && (p = n.offsetWidth - L), i > p && (i = p), this._wrapper.style.setProperty(I, `${i}px`);
235
+ const r = (a) => {
236
+ const n = this._wrapper, l = a.clientX, x = t.clientX;
237
+ i = this._yAxisWidth + (this.yAxisPosition === g.Left ? l - x : x - l);
238
+ let p = this._yAxisMaxWidth;
239
+ i < this._yAxisMinWidth && (i = this._yAxisMinWidth), this._yAxisMaxWidth > n.offsetWidth - m && (p = n.offsetWidth - m), i > p && (i = p), this._wrapper.style.setProperty(C, `${i}px`);
240
+ }, o = () => {
241
+ this._yAxisWidth = i, this._isDraggingYAxis = !1, this._oldCursor ? document.body.style.cursor = this._oldCursor : document.body.style.removeProperty("cursor"), window.removeEventListener("pointermove", r), window.removeEventListener("pointerup", o);
255
242
  };
256
- function r() {
257
- a._yAxisWidth = i, a._isDraggingYAxis = !1, a._oldCursor ? document.body.style.cursor = a._oldCursor : document.body.style.removeProperty("cursor"), window.removeEventListener("pointermove", o), window.removeEventListener("pointerup", r);
258
- }
259
- a._oldCursor = document.body.style.cursor, document.body.style.cursor = "col-resize", window.addEventListener("pointermove", o), window.addEventListener("pointerup", r);
243
+ this._oldCursor = document.body.style.cursor, document.body.style.cursor = "col-resize", window.addEventListener("pointermove", r), window.addEventListener("pointerup", o);
260
244
  }
261
245
  onYAxisKeyDown(t) {
262
- const i = parseInt(this._yAxisWidthPercentage ?? "0", 10), a = t.key, o = this.yAxisPosition === v.Left, r = o ? "ArrowLeft" : "ArrowRight", l = o ? "ArrowRight" : "ArrowLeft", n = {
246
+ const i = parseInt(this._yAxisWidthPercentage ?? "0", 10), r = t.key, o = this.yAxisPosition === g.Left, a = o ? "ArrowLeft" : "ArrowRight", n = o ? "ArrowRight" : "ArrowLeft", l = {
263
247
  currentPercentage: i,
264
248
  minWidth: this._yAxisMinWidth,
265
249
  maxWidth: this._yAxisMaxWidth
266
250
  };
267
- a === r ? (t.preventDefault(), this._yAxisWidth = f({
268
- ...n,
251
+ r === a ? (t.preventDefault(), this._yAxisWidth = v({
252
+ ...l,
269
253
  widthPercentage: Math.max(i - 5, 0)
270
- }) ?? this._yAxisWidth) : a === l ? (t.preventDefault(), this._yAxisWidth = f({
271
- ...n,
254
+ }) ?? this._yAxisWidth) : r === n ? (t.preventDefault(), this._yAxisWidth = v({
255
+ ...l,
272
256
  widthPercentage: Math.min(i + 5, 100)
273
- }) ?? this._yAxisWidth) : a === "Home" ? (t.preventDefault(), this._yAxisWidth = f({
274
- ...n,
257
+ }) ?? this._yAxisWidth) : r === "Home" ? (t.preventDefault(), this._yAxisWidth = v({
258
+ ...l,
275
259
  widthPercentage: 0
276
- }) ?? this._yAxisWidth) : a === "End" && (t.preventDefault(), this._yAxisWidth = f({
277
- ...n,
260
+ }) ?? this._yAxisWidth) : r === "End" && (t.preventDefault(), this._yAxisWidth = v({
261
+ ...l,
278
262
  widthPercentage: 100
279
263
  }) ?? this._yAxisWidth);
280
264
  }
281
265
  disconnectedCallback() {
282
- super.disconnectedCallback(), this._vObserver?.unobserve(this._barContainer), this._hObserver?.unobserve(this._barContainer);
266
+ super.disconnectedCallback(), this._vObserver?.disconnect(), this._hObserver?.disconnect();
283
267
  }
284
268
  };
269
+ customElements.get("tool-tip") || customElements.define("tool-tip", K);
285
270
  s([
286
271
  _()
287
272
  ], e.prototype, "_xAxisHeight", 2);
@@ -313,19 +298,19 @@ s([
313
298
  d({ type: Object, attribute: !1 })
314
299
  ], e.prototype, "formatters", 2);
315
300
  s([
316
- d({ type: b, reflect: !0 })
301
+ d({ type: u, reflect: !0 })
317
302
  ], e.prototype, "orientation", 2);
318
303
  s([
319
- d({ type: T, attribute: "x-axis-position" })
304
+ d({ type: I, attribute: "x-axis-position" })
320
305
  ], e.prototype, "xAxisPosition", 2);
321
306
  s([
322
- d({ type: v, attribute: "y-axis-position" })
307
+ d({ type: g, attribute: "y-axis-position" })
323
308
  ], e.prototype, "yAxisPosition", 2);
324
309
  s([
325
- d({ type: m, reflect: !0 })
310
+ d({ type: A, reflect: !0 })
326
311
  ], e.prototype, "theme", 2);
327
312
  s([
328
- d({ type: m, attribute: "tooltip-theme" })
313
+ d({ type: A, attribute: "tooltip-theme" })
329
314
  ], e.prototype, "tooltipTheme", 2);
330
315
  s([
331
316
  d({ type: String, attribute: "category-label" })
@@ -334,7 +319,7 @@ s([
334
319
  d({ type: String, attribute: "value-label" })
335
320
  ], e.prototype, "valueLabel", 2);
336
321
  s([
337
- d({ type: k, attribute: "show-labels" })
322
+ d({ type: M, attribute: "show-labels" })
338
323
  ], e.prototype, "showLabels", 2);
339
324
  s([
340
325
  y(".rpg")
@@ -358,19 +343,19 @@ s([
358
343
  R(".rpg-bar")
359
344
  ], e.prototype, "_bars", 2);
360
345
  s([
361
- A({ capture: !0 })
346
+ b({ capture: !0 })
362
347
  ], e.prototype, "onBarEnter", 1);
363
348
  s([
364
- A({ capture: !0 })
349
+ b({ capture: !0 })
365
350
  ], e.prototype, "onBarContainerMouseLeave", 1);
366
351
  s([
367
- A({ capture: !0 })
352
+ b({ capture: !0 })
368
353
  ], e.prototype, "onBarContainerFocus", 1);
369
354
  s([
370
- A({ capture: !0 })
355
+ b({ capture: !0 })
371
356
  ], e.prototype, "onBarContainerBlur", 1);
372
357
  s([
373
- A({ capture: !0 })
358
+ b({ capture: !0 })
374
359
  ], e.prototype, "onBarContainerKeyDown", 1);
375
360
  e = s([
376
361
  N("rapido-bar")
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../lib/components/rapido-bar/index.ts"],"sourcesContent":["import {\n DATA_LENGTH_CSS_VAR,\n DEFAULT_Y_AXIS_WIDTH,\n type DataItem,\n MAX_Y_AXIS_WIDTH,\n MIN_Y_AXIS_WIDTH,\n Orientation,\n SCROLLBAR_WIDTH_CSS_VAR,\n ShowLabels,\n Theme,\n type ValueFormatters,\n XAxisPosition,\n X_AXIS_FIRST_LABEL_CSS_VAR,\n X_AXIS_HEIGHT_CSS_VAR,\n X_AXIS_LAST_LABEL_CSS_VAR,\n YAxisPosition,\n Y_AXIS_WIDTH_CSS_VAR,\n} from \"../../shared\";\nimport {\n LitElement,\n type PropertyValues,\n css,\n html,\n nothing,\n unsafeCSS,\n} from \"lit\";\nimport {\n calculateYAxisWidths,\n checkIfAllPositiveOrNegative,\n checkIfSomePositiveAndNegative,\n formatLabel,\n formatLabels,\n generateTicks,\n getMinAndMax,\n getScrollbarSize,\n getSizeInPercentages,\n getTextWidth,\n getUpdatedYAxisWidth,\n noop,\n} from \"../../utils\";\nimport {\n customElement,\n eventOptions,\n property,\n query,\n queryAll,\n state,\n} from \"lit/decorators.js\";\nimport { Tooltip } from \"../../helpers/tooltip\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport styles from \"./rapidobar.css?inline\";\n\n@customElement(\"rapido-bar\")\nexport class Rapidobar extends LitElement {\n static get styles() {\n return css`\n ${unsafeCSS(styles)}\n `;\n }\n\n private _data: DataItem[] = [];\n private _categoryLabels: (string | number)[] = [];\n private _ticks: number[] = [];\n private _tickLabels: (string | number)[] = [];\n private _hasPositive: boolean = true;\n private _hasNegative: boolean = false;\n private _allPositive: boolean = true;\n private _allNegative: boolean = false;\n private _yAxisMinWidth: number = MIN_Y_AXIS_WIDTH;\n private _yAxisMaxWidth: number = MAX_Y_AXIS_WIDTH;\n private _vObserver: IntersectionObserver | undefined;\n private _hObserver: IntersectionObserver | undefined;\n private _oldCursor?: string;\n\n private get _yAxisWidthPercentage() {\n const maxYAxisWidth = this._yAxisMaxWidth - this._yAxisMinWidth;\n const currentYAxisWidth = this._yAxisWidth - this._yAxisMinWidth;\n return ((currentYAxisWidth * 100) / maxYAxisWidth).toFixed(0);\n }\n\n private get _yAxisWidthDescription() {\n return `Y-axis offset ${this._yAxisWidthPercentage}%`;\n }\n\n @state()\n private _xAxisHeight: number = 0;\n @state()\n private _firstXAxisLabelWidth: number = 0;\n @state()\n private _lastXAxisLabelWidth: number = 0;\n @state()\n private _scrollbarSize: number = 0;\n @state()\n private _activeBar: HTMLElement | null = null;\n @state()\n private _yAxisWidth: number = DEFAULT_Y_AXIS_WIDTH;\n @state()\n private _isDraggingYAxis: boolean = false;\n @state()\n private _focusedBarIndex: number = 0;\n\n @property({ type: Array, attribute: false })\n get data(): DataItem[] {\n return this._data || [];\n }\n\n set data(value: DataItem[]) {\n const oldValue = this._data;\n this._data = value;\n this.requestUpdate(\"data\", oldValue);\n\n const length = this._data.length;\n const categories = new Array<string>(length);\n const values = new Array<number>(length);\n this.data.forEach(({ category, value }, index) => {\n categories[index] = category;\n values[index] = value;\n });\n this._categoryLabels = formatLabels(categories, this.formatters.category);\n const [minBarSize, maxBarSize] = getMinAndMax(values);\n this._ticks = generateTicks(minBarSize, maxBarSize);\n this._tickLabels = formatLabels(this._ticks, this.formatters.value);\n [this._hasPositive, this._hasNegative] =\n checkIfSomePositiveAndNegative(values);\n [this._allPositive, this._allNegative] =\n checkIfAllPositiveOrNegative(values);\n this._calculateTickWidths();\n }\n\n @property({ type: Object, attribute: false })\n formatters: ValueFormatters = {};\n\n @property({ type: Orientation, reflect: true })\n orientation: Orientation = Orientation.Vertical;\n\n @property({ type: XAxisPosition, attribute: \"x-axis-position\" })\n xAxisPosition: XAxisPosition = XAxisPosition.Bottom;\n\n @property({ type: YAxisPosition, attribute: \"y-axis-position\" })\n yAxisPosition: YAxisPosition = YAxisPosition.Left;\n\n @property({ type: Theme, reflect: true })\n theme: Theme = Theme.Light;\n\n @property({ type: Theme, attribute: \"tooltip-theme\" })\n tooltipTheme: Theme = Theme.Light;\n\n @property({ type: String, attribute: \"category-label\" })\n categoryLabel: string = \"\";\n\n @property({ type: String, attribute: \"value-label\" })\n valueLabel: string = \"\";\n\n @property({ type: ShowLabels, attribute: \"show-labels\" })\n showLabels: ShowLabels = ShowLabels.Always;\n\n private get _wrapperClasses() {\n return {\n rpg: true,\n [this.orientation]: true,\n [`x-axis-${this.xAxisPosition}`]: true,\n [`y-axis-${this.yAxisPosition}`]: true,\n [`labels-${this.showLabels}`]: true,\n };\n }\n private get _wrapperStyles() {\n return {\n [SCROLLBAR_WIDTH_CSS_VAR]: `${this._scrollbarSize}px`,\n [Y_AXIS_WIDTH_CSS_VAR]: `${this._yAxisWidth}px`,\n [X_AXIS_HEIGHT_CSS_VAR]: `${this._xAxisHeight}px`,\n [DATA_LENGTH_CSS_VAR]: this.data.length,\n [X_AXIS_FIRST_LABEL_CSS_VAR]: `${this._firstXAxisLabelWidth}px`,\n [X_AXIS_LAST_LABEL_CSS_VAR]: `${this._lastXAxisLabelWidth}px`,\n };\n }\n private get _barContainerClasses() {\n return {\n \"rpg-bar-container\": true,\n \"start-from-half\": this._hasPositive && this._hasNegative,\n };\n }\n\n @query(\".rpg\")\n private _wrapper!: HTMLElement;\n @query(\".rpg-scrollable\")\n private _scrollableElem!: HTMLElement;\n @query(\".rpg-bar-container\")\n private _barContainer!: HTMLElement;\n @query(\".rpg-x-axis\")\n private _xAxis!: HTMLElement;\n @query(\".rpg-y-axis\")\n private _yAxis!: HTMLElement;\n @query(\"#rpg-get-text-width\")\n private _textSizeDiv!: HTMLElement;\n @queryAll(\".rpg-bar\")\n private _bars!: HTMLElement[];\n\n render() {\n const isVertical = this.orientation === Orientation.Vertical;\n const xAxisLabel = isVertical ? this.categoryLabel : this.valueLabel;\n const yAxisLabel = isVertical ? this.valueLabel : this.categoryLabel;\n let xAxisLabels;\n let yAxisLabels;\n if (isVertical) {\n xAxisLabels = this._categoryLabels;\n yAxisLabels = this._tickLabels;\n } else {\n xAxisLabels = this._tickLabels;\n yAxisLabels = this._categoryLabels;\n }\n\n const xAxisLabelTemplates = [];\n for (const label of xAxisLabels) {\n xAxisLabelTemplates.push(html`\n <div class=\"rpg-axis-label\" title=${label}>${label}</div>\n `);\n }\n const xAxisTemplate = html`\n <div class=\"rpg-x-axis\">\n ${xAxisLabel\n ? html`<div class=\"rpg-axis-label rpg-axis-title\">\n <div class=\"rpg-axis-title-content\">${xAxisLabel}</div>\n </div>`\n : nothing}\n <div class=\"rpg-x-axis-labels\">${xAxisLabelTemplates}</div>\n </div>\n `;\n\n const yAxisLabelTemplates = [];\n for (const label of yAxisLabels) {\n yAxisLabelTemplates.push(html`\n <div class=\"rpg-axis-label\" title=${label}>${label}</div>\n `);\n }\n\n // tabindex matches flex order - visual and focus order are synchronized\n const yAxisTemplate = html`\n <div class=\"rpg-y-axis\">\n <div class=\"rpg-y-axis-labels\">${yAxisLabelTemplates}</div>\n <div\n class=\"rpg-y-axis-line-container\"\n role=\"slider\"\n tabindex=${this.yAxisPosition === YAxisPosition.Left ? \"1\" : \"0\"}\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow=${this._yAxisWidthPercentage}\n aria-valuetext=${this._yAxisWidthDescription}\n aria-label=${`Y-axis positioned ${this.yAxisPosition}`}\n @dragstart=${noop}\n @pointerdown=${this.onYAxisPointerDown}\n @keydown=${this.onYAxisKeyDown}\n >\n ${yAxisLabel\n ? html`<div class=\"rpg-axis-label rpg-axis-title\">\n <div class=\"rpg-axis-title-content\">${yAxisLabel}</div>\n </div>`\n : nothing}\n <div class=\"rpg-y-axis-line\"></div>\n </div>\n </div>\n `;\n\n const gridlineTemplates = [];\n for (let i = 0; i < this._ticks.length - 1; i++) {\n gridlineTemplates.push(html`<div class=\"rpg-gridline\"></div>`);\n }\n\n const barTemplates = [];\n for (const [index, { value }] of this.data.entries()) {\n const isFocused = index === this._focusedBarIndex;\n const category = this._categoryLabels[index];\n const axisValue = this._tickLabels[index];\n const barValue = formatLabel(value, this.formatters.data);\n const tooltipValue = formatLabel(\n value,\n this.formatters.tooltip || this.formatters.value,\n );\n\n const isPositive =\n this._allPositive || !this._allNegative ? value >= 0 : value > 0;\n const barSize = getSizeInPercentages(\n value,\n this._ticks[0],\n this._ticks.at(-1),\n );\n\n barTemplates.push(\n html`<li\n class=\"rpg-bar ${isPositive ? \"positive\" : \"negative\"}\"\n tabindex=${isFocused ? 0 : -1}\n aria-current=${isFocused ? \"true\" : \"false\"}\n aria-label=\"${category}: ${axisValue}\"\n data-category=${category}\n data-value=${tooltipValue}\n >\n <div\n class=\"rpg-bar-content\"\n style=\"--rpg-bar-size: ${Math.abs(barSize)}%;\"\n >\n <div class=\"rpg-bar-label\">${barValue}</div>\n <div class=\"rpg-small-bar-label\">${barValue}</div>\n </div>\n </li>`,\n );\n }\n\n return html`\n <div\n class=${classMap(this._wrapperClasses)}\n style=${styleMap(this._wrapperStyles)}\n role=\"figure\"\n >\n <div class=\"rpg-scrollable\">\n <div class=\"rpg-scrollable-content\">\n ${isVertical ? xAxisTemplate : yAxisTemplate}\n <div class=\"rpg-content-container\">\n <div class=\"rpg-gridlines\">${gridlineTemplates}</div>\n <ul\n class=${classMap(this._barContainerClasses)}\n @mouseenter=${this.onBarEnter}\n @mouseleave=${this.onBarContainerMouseLeave}\n @focus=${this.onBarContainerFocus}\n @blur=${this.onBarContainerBlur}\n @keydown=${this.onBarContainerKeyDown}\n >\n ${this.data.length\n ? barTemplates\n : html`<div class=\"rpg-empty-state\">No data</div>`}\n </ul>\n </div>\n </div>\n </div>\n ${isVertical ? yAxisTemplate : xAxisTemplate}\n </div>\n <tool-tip\n .element=${this._isDraggingYAxis ? null : this._activeBar}\n .container=${this._scrollableElem}\n orientation=${this.orientation}\n theme=${this.tooltipTheme}\n ></tool-tip>\n <div aria-live=\"polite\">${this._yAxisWidthDescription}</div>\n <div id=\"rpg-get-text-width\" class=\"rpg-axis-label\"></div>\n `;\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n if (!customElements.get(\"tool-tip\")) {\n customElements.define(\"tool-tip\", Tooltip);\n }\n }\n\n protected firstUpdated(_changedProperties: PropertyValues): void {\n super.firstUpdated(_changedProperties);\n\n this._calculateYAxisWidths();\n this.addObservers();\n }\n\n updated(changedProperties: Map<string, never>) {\n if (this._xAxis) {\n this._xAxisHeight = this._xAxis.getBoundingClientRect().height ?? 1 - 1;\n }\n\n if (changedProperties.get(\"orientation\") || changedProperties.get(\"data\")) {\n this._calculateYAxisWidths();\n }\n }\n\n private _calculateYAxisWidths(): void {\n const isVertical = this.orientation === Orientation.Vertical;\n [this._yAxisMinWidth, this._yAxisWidth, this._yAxisMaxWidth] =\n calculateYAxisWidths(\n this._textSizeDiv,\n this._wrapper,\n this._yAxis,\n isVertical ? this._tickLabels : this._categoryLabels,\n );\n }\n\n private _calculateTickWidths(): void {\n this._firstXAxisLabelWidth = getTextWidth(\n this._textSizeDiv,\n this._tickLabels[0].toString(),\n );\n this._lastXAxisLabelWidth = getTextWidth(\n this._textSizeDiv,\n this._tickLabels.at(-1)?.toString(),\n );\n }\n\n private addObservers() {\n const options = {\n root: this._scrollableElem,\n threshold: 1,\n };\n\n const callback = () => {\n this._scrollbarSize = getScrollbarSize(\n this.orientation,\n this._scrollableElem,\n );\n };\n this._vObserver = new IntersectionObserver(callback, {\n ...options,\n rootMargin: \"0px -16px\",\n });\n this._hObserver = new IntersectionObserver(callback, {\n ...options,\n rootMargin: \"-16px 0px\",\n });\n this._vObserver.observe(this._barContainer);\n this._hObserver.observe(this._barContainer);\n }\n\n @eventOptions({ capture: true })\n private onBarEnter(event: MouseEvent) {\n const target = event.target as HTMLElement;\n if (target.classList.contains(\"rpg-bar\")) {\n this._activeBar = target;\n }\n }\n\n @eventOptions({ capture: true })\n private onBarContainerMouseLeave(event: MouseEvent) {\n if (event.target === event.currentTarget) {\n this._activeBar = null;\n }\n }\n\n @eventOptions({ capture: true })\n private onBarContainerFocus(event: FocusEvent) {\n this._activeBar = event.target as HTMLElement;\n }\n\n @eventOptions({ capture: true })\n private onBarContainerBlur(event: FocusEvent) {\n const nextFocused = event.relatedTarget as HTMLElement;\n if (\n !nextFocused ||\n (nextFocused && !this._barContainer.contains(nextFocused))\n ) {\n this._activeBar = null;\n this._focusedBarIndex = 0;\n }\n }\n\n @eventOptions({ capture: true })\n private onBarContainerKeyDown(event: KeyboardEvent) {\n const isVertical = this.orientation === Orientation.Vertical;\n const nextKey = isVertical ? \"ArrowRight\" : \"ArrowDown\";\n const prevKey = isVertical ? \"ArrowLeft\" : \"ArrowUp\";\n const key = event.key;\n\n if (key === nextKey) {\n event.preventDefault();\n this._focusedBarIndex = Math.min(\n this._focusedBarIndex + 1,\n this.data.length - 1,\n );\n this._bars[this._focusedBarIndex].focus();\n } else if (key === prevKey) {\n event.preventDefault();\n this._focusedBarIndex = Math.max(this._focusedBarIndex - 1, 0);\n this._bars[this._focusedBarIndex].focus();\n } else if (key === \"Home\") {\n event.preventDefault();\n this._focusedBarIndex = 0;\n this._bars[this._focusedBarIndex].focus();\n } else if (key === \"End\") {\n event.preventDefault();\n this._focusedBarIndex = this.data.length - 1;\n this._bars[this._focusedBarIndex].focus();\n }\n }\n\n private onYAxisPointerDown(pointerDownEvent: PointerEvent) {\n pointerDownEvent.preventDefault();\n this._isDraggingYAxis = true;\n\n let newWidth = this._yAxisWidth;\n const self = this;\n\n const handlePointerMove = (pointerMoveEvent: PointerEvent) => {\n const parent = self._wrapper;\n\n const moveClientX = pointerMoveEvent.clientX;\n const downClientX = pointerDownEvent.clientX;\n\n newWidth =\n self._yAxisWidth +\n (self.yAxisPosition === YAxisPosition.Left\n ? moveClientX - downClientX\n : downClientX - moveClientX);\n let allowedMaxWidth = self._yAxisMaxWidth;\n\n // the pointer is out of slider => lock the thumb within the boundaries\n if (newWidth < self._yAxisMinWidth) {\n newWidth = self._yAxisMinWidth;\n }\n\n if (self._yAxisMaxWidth > parent.offsetWidth - MAX_Y_AXIS_WIDTH) {\n allowedMaxWidth = parent.offsetWidth - MAX_Y_AXIS_WIDTH;\n }\n if (newWidth > allowedMaxWidth) {\n newWidth = allowedMaxWidth;\n }\n this._wrapper.style.setProperty(Y_AXIS_WIDTH_CSS_VAR, `${newWidth}px`);\n };\n\n function handlePointerUp(): void {\n self._yAxisWidth = newWidth;\n self._isDraggingYAxis = false;\n if (self._oldCursor) {\n document.body.style.cursor = self._oldCursor;\n } else {\n document.body.style.removeProperty(\"cursor\");\n }\n window.removeEventListener(\"pointermove\", handlePointerMove);\n window.removeEventListener(\"pointerup\", handlePointerUp);\n }\n\n self._oldCursor = document.body.style.cursor;\n document.body.style.cursor = \"col-resize\";\n window.addEventListener(\"pointermove\", handlePointerMove);\n window.addEventListener(\"pointerup\", handlePointerUp);\n }\n\n private onYAxisKeyDown(event: KeyboardEvent): void {\n const percentage = parseInt(this._yAxisWidthPercentage ?? \"0\", 10);\n const key = event.key;\n const isLeftAxis = this.yAxisPosition === YAxisPosition.Left;\n const leftKey = isLeftAxis ? \"ArrowLeft\" : \"ArrowRight\";\n const rightKey = isLeftAxis ? \"ArrowRight\" : \"ArrowLeft\";\n const commonArgs = {\n currentPercentage: percentage,\n minWidth: this._yAxisMinWidth,\n maxWidth: this._yAxisMaxWidth,\n };\n\n if (key === leftKey) {\n event.preventDefault();\n this._yAxisWidth =\n getUpdatedYAxisWidth({\n ...commonArgs,\n widthPercentage: Math.max(percentage - 5, 0),\n }) ?? this._yAxisWidth;\n } else if (key === rightKey) {\n event.preventDefault();\n this._yAxisWidth =\n getUpdatedYAxisWidth({\n ...commonArgs,\n widthPercentage: Math.min(percentage + 5, 100),\n }) ?? this._yAxisWidth;\n } else if (key === \"Home\") {\n event.preventDefault();\n this._yAxisWidth =\n getUpdatedYAxisWidth({\n ...commonArgs,\n widthPercentage: 0,\n }) ?? this._yAxisWidth;\n } else if (key === \"End\") {\n event.preventDefault();\n this._yAxisWidth =\n getUpdatedYAxisWidth({\n ...commonArgs,\n widthPercentage: 100,\n }) ?? this._yAxisWidth;\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this._vObserver?.unobserve(this._barContainer);\n this._hObserver?.unobserve(this._barContainer);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"rapido-bar\": Rapidobar;\n }\n}\n"],"names":["Rapidobar","LitElement","MIN_Y_AXIS_WIDTH","MAX_Y_AXIS_WIDTH","DEFAULT_Y_AXIS_WIDTH","Orientation","XAxisPosition","YAxisPosition","Theme","ShowLabels","css","unsafeCSS","styles","maxYAxisWidth","value","oldValue","length","categories","values","category","index","formatLabels","minBarSize","maxBarSize","getMinAndMax","generateTicks","checkIfSomePositiveAndNegative","checkIfAllPositiveOrNegative","SCROLLBAR_WIDTH_CSS_VAR","Y_AXIS_WIDTH_CSS_VAR","X_AXIS_HEIGHT_CSS_VAR","DATA_LENGTH_CSS_VAR","X_AXIS_FIRST_LABEL_CSS_VAR","X_AXIS_LAST_LABEL_CSS_VAR","isVertical","xAxisLabel","yAxisLabel","xAxisLabels","yAxisLabels","xAxisLabelTemplates","label","html","xAxisTemplate","nothing","yAxisLabelTemplates","yAxisTemplate","noop","gridlineTemplates","i","barTemplates","isFocused","axisValue","barValue","formatLabel","tooltipValue","isPositive","barSize","getSizeInPercentages","classMap","styleMap","Tooltip","_changedProperties","changedProperties","calculateYAxisWidths","getTextWidth","options","callback","getScrollbarSize","event","target","nextFocused","nextKey","prevKey","key","pointerDownEvent","newWidth","self","handlePointerMove","pointerMoveEvent","parent","moveClientX","downClientX","allowedMaxWidth","handlePointerUp","percentage","isLeftAxis","leftKey","rightKey","commonArgs","getUpdatedYAxisWidth","__decorateClass","state","property","query","queryAll","eventOptions","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../lib/components/rapido-bar/index.ts"],"sourcesContent":["import {\n DATA_LENGTH_CSS_VAR,\n DEFAULT_Y_AXIS_WIDTH,\n type DataItem,\n MAX_Y_AXIS_WIDTH,\n MIN_Y_AXIS_WIDTH,\n Orientation,\n SCROLLBAR_WIDTH_CSS_VAR,\n ShowLabels,\n Theme,\n type ValueFormatters,\n XAxisPosition,\n X_AXIS_FIRST_LABEL_CSS_VAR,\n X_AXIS_HEIGHT_CSS_VAR,\n X_AXIS_LAST_LABEL_CSS_VAR,\n YAxisPosition,\n Y_AXIS_WIDTH_CSS_VAR,\n} from \"../../shared\";\nimport {\n LitElement,\n type PropertyValues,\n css,\n html,\n nothing,\n unsafeCSS,\n} from \"lit\";\nimport {\n analyzeValues,\n calculateYAxisWidths,\n formatLabel,\n formatLabels,\n generateTicks,\n getScrollbarSize,\n getSizeInPercentages,\n getTextWidth,\n getUpdatedYAxisWidth,\n noop,\n} from \"../../utils\";\nimport {\n customElement,\n eventOptions,\n property,\n query,\n queryAll,\n state,\n} from \"lit/decorators.js\";\nimport { Tooltip } from \"../../helpers/tooltip\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport styles from \"./rapidobar.css?inline\";\n\n@customElement(\"rapido-bar\")\nexport class Rapidobar extends LitElement {\n static {\n if (!customElements.get(\"tool-tip\")) {\n customElements.define(\"tool-tip\", Tooltip);\n }\n }\n\n static get styles() {\n return css`\n ${unsafeCSS(styles)}\n `;\n }\n\n private _data: DataItem[] = [];\n private _categoryLabels: (string | number)[] = [];\n private _ticks: number[] = [];\n private _tickLabels: (string | number)[] = [];\n private _hasPositive: boolean = true;\n private _hasNegative: boolean = false;\n private _allPositive: boolean = true;\n private _allNegative: boolean = false;\n private _yAxisMinWidth: number = MIN_Y_AXIS_WIDTH;\n private _yAxisMaxWidth: number = MAX_Y_AXIS_WIDTH;\n private _vObserver: IntersectionObserver | undefined;\n private _hObserver: IntersectionObserver | undefined;\n private _oldCursor?: string;\n\n private get _yAxisWidthPercentage() {\n const maxYAxisWidth = this._yAxisMaxWidth - this._yAxisMinWidth;\n const currentYAxisWidth = this._yAxisWidth - this._yAxisMinWidth;\n return ((currentYAxisWidth * 100) / maxYAxisWidth).toFixed(0);\n }\n\n private get _yAxisWidthDescription() {\n return `Y-axis offset ${this._yAxisWidthPercentage}%`;\n }\n\n @state()\n private _xAxisHeight: number = 0;\n @state()\n private _firstXAxisLabelWidth: number = 0;\n @state()\n private _lastXAxisLabelWidth: number = 0;\n @state()\n private _scrollbarSize: number = 0;\n @state()\n private _activeBar: HTMLElement | null = null;\n @state()\n private _yAxisWidth: number = DEFAULT_Y_AXIS_WIDTH;\n @state()\n private _isDraggingYAxis: boolean = false;\n @state()\n private _focusedBarIndex: number = 0;\n\n @property({ type: Array, attribute: false })\n get data(): DataItem[] {\n return this._data || [];\n }\n\n set data(value: DataItem[]) {\n const oldValue = this._data;\n this._data = value;\n this.requestUpdate(\"data\", oldValue);\n\n const length = this._data.length;\n const categories = new Array<string>(length);\n const values = new Array<number>(length);\n this.data.forEach(({ category, value }, index) => {\n categories[index] = category;\n values[index] = value;\n });\n\n const analysis = analyzeValues(values);\n this._hasPositive = analysis.hasPositive;\n this._hasNegative = analysis.hasNegative;\n this._allPositive = analysis.allPositive;\n this._allNegative = analysis.allNegative;\n\n this._categoryLabels = formatLabels(categories, this.formatters.category);\n this._ticks = generateTicks(analysis.axisMin, analysis.axisMax);\n this._tickLabels = formatLabels(this._ticks, this.formatters.value);\n this._calculateTickWidths();\n }\n\n @property({ type: Object, attribute: false })\n formatters: ValueFormatters = {};\n\n @property({ type: Orientation, reflect: true })\n orientation: Orientation = Orientation.Vertical;\n\n @property({ type: XAxisPosition, attribute: \"x-axis-position\" })\n xAxisPosition: XAxisPosition = XAxisPosition.Bottom;\n\n @property({ type: YAxisPosition, attribute: \"y-axis-position\" })\n yAxisPosition: YAxisPosition = YAxisPosition.Left;\n\n @property({ type: Theme, reflect: true })\n theme: Theme = Theme.Light;\n\n @property({ type: Theme, attribute: \"tooltip-theme\" })\n tooltipTheme: Theme = Theme.Light;\n\n @property({ type: String, attribute: \"category-label\" })\n categoryLabel: string = \"\";\n\n @property({ type: String, attribute: \"value-label\" })\n valueLabel: string = \"\";\n\n @property({ type: ShowLabels, attribute: \"show-labels\" })\n showLabels: ShowLabels = ShowLabels.Always;\n\n private get _wrapperClasses() {\n return {\n rpg: true,\n [this.orientation]: true,\n [`x-axis-${this.xAxisPosition}`]: true,\n [`y-axis-${this.yAxisPosition}`]: true,\n [`labels-${this.showLabels}`]: true,\n };\n }\n private get _wrapperStyles() {\n return {\n [SCROLLBAR_WIDTH_CSS_VAR]: `${this._scrollbarSize}px`,\n [Y_AXIS_WIDTH_CSS_VAR]: `${this._yAxisWidth}px`,\n [X_AXIS_HEIGHT_CSS_VAR]: `${this._xAxisHeight}px`,\n [DATA_LENGTH_CSS_VAR]: this.data.length,\n [X_AXIS_FIRST_LABEL_CSS_VAR]: `${this._firstXAxisLabelWidth}px`,\n [X_AXIS_LAST_LABEL_CSS_VAR]: `${this._lastXAxisLabelWidth}px`,\n };\n }\n private get _barContainerClasses() {\n return {\n \"rpg-bar-container\": true,\n \"start-from-half\": this._hasPositive && this._hasNegative,\n };\n }\n\n @query(\".rpg\")\n private _wrapper!: HTMLElement;\n @query(\".rpg-scrollable\")\n private _scrollableElem!: HTMLElement;\n @query(\".rpg-bar-container\")\n private _barContainer!: HTMLElement;\n @query(\".rpg-x-axis\")\n private _xAxis!: HTMLElement;\n @query(\".rpg-y-axis\")\n private _yAxis!: HTMLElement;\n @query(\"#rpg-get-text-width\")\n private _textSizeDiv!: HTMLElement;\n @queryAll(\".rpg-bar\")\n private _bars!: HTMLElement[];\n\n render() {\n const isVertical = this.orientation === Orientation.Vertical;\n const xAxisLabel = isVertical ? this.categoryLabel : this.valueLabel;\n const yAxisLabel = isVertical ? this.valueLabel : this.categoryLabel;\n let xAxisLabels;\n let yAxisLabels;\n if (isVertical) {\n xAxisLabels = this._categoryLabels;\n yAxisLabels = this._tickLabels;\n } else {\n xAxisLabels = this._tickLabels;\n yAxisLabels = this._categoryLabels;\n }\n\n const xAxisLabelTemplates = xAxisLabels.map(\n (label) =>\n html`<div class=\"rpg-axis-label\" title=${label}>${label}</div>`,\n );\n const xAxisTemplate = html`\n <div class=\"rpg-x-axis\">\n ${xAxisLabel\n ? html`<div class=\"rpg-axis-label rpg-axis-title\">\n <div class=\"rpg-axis-title-content\">${xAxisLabel}</div>\n </div>`\n : nothing}\n <div class=\"rpg-x-axis-labels\">${xAxisLabelTemplates}</div>\n </div>\n `;\n\n const yAxisLabelTemplates = yAxisLabels.map(\n (label) =>\n html`<div class=\"rpg-axis-label\" title=${label}>${label}</div>`,\n );\n\n // tabindex matches flex order - visual and focus order are synchronized\n const yAxisTemplate = html`\n <div class=\"rpg-y-axis\">\n <div class=\"rpg-y-axis-labels\">${yAxisLabelTemplates}</div>\n <div\n class=\"rpg-y-axis-line-container\"\n role=\"slider\"\n tabindex=${this.yAxisPosition === YAxisPosition.Left ? \"1\" : \"0\"}\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow=${this._yAxisWidthPercentage}\n aria-valuetext=${this._yAxisWidthDescription}\n aria-label=${`Y-axis positioned ${this.yAxisPosition}`}\n @dragstart=${noop}\n @pointerdown=${this.onYAxisPointerDown}\n @keydown=${this.onYAxisKeyDown}\n >\n ${yAxisLabel\n ? html`<div class=\"rpg-axis-label rpg-axis-title\">\n <div class=\"rpg-axis-title-content\">${yAxisLabel}</div>\n </div>`\n : nothing}\n <div class=\"rpg-y-axis-line\"></div>\n </div>\n </div>\n `;\n\n const gridlineTemplates = this._ticks\n .slice(1)\n .map(() => html`<div class=\"rpg-gridline\"></div>`);\n\n const barTemplates = this.data.map(({ value }, index) => {\n const isFocused = index === this._focusedBarIndex;\n const category = this._categoryLabels[index];\n const axisValue = this._tickLabels[index];\n const barValue = formatLabel(value, this.formatters.data);\n const tooltipValue = formatLabel(\n value,\n this.formatters.tooltip || this.formatters.value,\n );\n\n const isPositive =\n this._allPositive || !this._allNegative ? value >= 0 : value > 0;\n const barSize = getSizeInPercentages(\n value,\n this._ticks[0],\n this._ticks.at(-1),\n );\n\n return html`<li\n class=\"rpg-bar ${isPositive ? \"positive\" : \"negative\"}\"\n tabindex=${isFocused ? 0 : -1}\n aria-current=${isFocused ? \"true\" : \"false\"}\n aria-label=\"${category}: ${axisValue}\"\n data-category=${category}\n data-value=${tooltipValue}\n >\n <div\n class=\"rpg-bar-content\"\n style=\"--rpg-bar-size: ${Math.abs(barSize)}%;\"\n >\n <div class=\"rpg-bar-label\">${barValue}</div>\n <div class=\"rpg-small-bar-label\">${barValue}</div>\n </div>\n </li>`;\n });\n\n return html`\n <div\n class=${classMap(this._wrapperClasses)}\n style=${styleMap(this._wrapperStyles)}\n role=\"figure\"\n >\n <div class=\"rpg-scrollable\">\n <div class=\"rpg-scrollable-content\">\n ${isVertical ? xAxisTemplate : yAxisTemplate}\n <div class=\"rpg-content-container\">\n <div class=\"rpg-gridlines\">${gridlineTemplates}</div>\n <ul\n class=${classMap(this._barContainerClasses)}\n @mouseenter=${this.onBarEnter}\n @mouseleave=${this.onBarContainerMouseLeave}\n @focus=${this.onBarContainerFocus}\n @blur=${this.onBarContainerBlur}\n @keydown=${this.onBarContainerKeyDown}\n >\n ${this.data.length\n ? barTemplates\n : html`<div class=\"rpg-empty-state\">No data</div>`}\n </ul>\n </div>\n </div>\n </div>\n ${isVertical ? yAxisTemplate : xAxisTemplate}\n </div>\n <tool-tip\n .element=${this._isDraggingYAxis ? null : this._activeBar}\n .container=${this._scrollableElem}\n orientation=${this.orientation}\n theme=${this.tooltipTheme}\n ></tool-tip>\n <div aria-live=\"polite\">${this._yAxisWidthDescription}</div>\n <div id=\"rpg-get-text-width\" class=\"rpg-axis-label\"></div>\n `;\n }\n\n protected firstUpdated(_changedProperties: PropertyValues): void {\n super.firstUpdated(_changedProperties);\n\n this._calculateYAxisWidths();\n this.addObservers();\n }\n\n updated(changedProperties: Map<string, never>) {\n if (this._xAxis) {\n this._xAxisHeight = (this._xAxis.getBoundingClientRect().height || 1) - 1;\n }\n\n if (changedProperties.has(\"orientation\") || changedProperties.has(\"data\")) {\n this._calculateYAxisWidths();\n }\n }\n\n private _calculateYAxisWidths(): void {\n const isVertical = this.orientation === Orientation.Vertical;\n [this._yAxisMinWidth, this._yAxisWidth, this._yAxisMaxWidth] =\n calculateYAxisWidths(\n this._textSizeDiv,\n this._wrapper,\n this._yAxis,\n isVertical ? this._tickLabels : this._categoryLabels,\n );\n }\n\n private _calculateTickWidths(): void {\n this._firstXAxisLabelWidth = getTextWidth(\n this._textSizeDiv,\n this._tickLabels[0].toString(),\n );\n this._lastXAxisLabelWidth = getTextWidth(\n this._textSizeDiv,\n this._tickLabels.at(-1)?.toString(),\n );\n }\n\n private addObservers() {\n const options = {\n root: this._scrollableElem,\n threshold: 1,\n };\n\n const callback = () => {\n this._scrollbarSize = getScrollbarSize(\n this.orientation,\n this._scrollableElem,\n );\n };\n this._vObserver = new IntersectionObserver(callback, {\n ...options,\n rootMargin: \"0px -16px\",\n });\n this._hObserver = new IntersectionObserver(callback, {\n ...options,\n rootMargin: \"-16px 0px\",\n });\n this._vObserver.observe(this._barContainer);\n this._hObserver.observe(this._barContainer);\n }\n\n @eventOptions({ capture: true })\n private onBarEnter(event: MouseEvent) {\n const target = event.target as HTMLElement;\n if (target.classList.contains(\"rpg-bar\")) {\n this._activeBar = target;\n }\n }\n\n @eventOptions({ capture: true })\n private onBarContainerMouseLeave(event: MouseEvent) {\n if (event.target === event.currentTarget) {\n this._activeBar = null;\n }\n }\n\n @eventOptions({ capture: true })\n private onBarContainerFocus(event: FocusEvent) {\n this._activeBar = event.target as HTMLElement;\n }\n\n @eventOptions({ capture: true })\n private onBarContainerBlur(event: FocusEvent) {\n const nextFocused = event.relatedTarget as HTMLElement;\n if (\n !nextFocused ||\n (nextFocused && !this._barContainer.contains(nextFocused))\n ) {\n this._activeBar = null;\n this._focusedBarIndex = 0;\n }\n }\n\n @eventOptions({ capture: true })\n private onBarContainerKeyDown(event: KeyboardEvent) {\n const isVertical = this.orientation === Orientation.Vertical;\n const nextKey = isVertical ? \"ArrowRight\" : \"ArrowDown\";\n const prevKey = isVertical ? \"ArrowLeft\" : \"ArrowUp\";\n const key = event.key;\n\n if (key === nextKey) {\n event.preventDefault();\n this._focusedBarIndex = Math.min(\n this._focusedBarIndex + 1,\n this.data.length - 1,\n );\n this._bars[this._focusedBarIndex].focus();\n } else if (key === prevKey) {\n event.preventDefault();\n this._focusedBarIndex = Math.max(this._focusedBarIndex - 1, 0);\n this._bars[this._focusedBarIndex].focus();\n } else if (key === \"Home\") {\n event.preventDefault();\n this._focusedBarIndex = 0;\n this._bars[this._focusedBarIndex].focus();\n } else if (key === \"End\") {\n event.preventDefault();\n this._focusedBarIndex = this.data.length - 1;\n this._bars[this._focusedBarIndex].focus();\n }\n }\n\n private onYAxisPointerDown(pointerDownEvent: PointerEvent) {\n pointerDownEvent.preventDefault();\n this._isDraggingYAxis = true;\n\n let newWidth = this._yAxisWidth;\n\n const handlePointerMove = (pointerMoveEvent: PointerEvent) => {\n const parent = this._wrapper;\n\n const moveClientX = pointerMoveEvent.clientX;\n const downClientX = pointerDownEvent.clientX;\n\n newWidth =\n this._yAxisWidth +\n (this.yAxisPosition === YAxisPosition.Left\n ? moveClientX - downClientX\n : downClientX - moveClientX);\n let allowedMaxWidth = this._yAxisMaxWidth;\n\n // the pointer is out of slider => lock the thumb within the boundaries\n if (newWidth < this._yAxisMinWidth) {\n newWidth = this._yAxisMinWidth;\n }\n\n if (this._yAxisMaxWidth > parent.offsetWidth - MAX_Y_AXIS_WIDTH) {\n allowedMaxWidth = parent.offsetWidth - MAX_Y_AXIS_WIDTH;\n }\n if (newWidth > allowedMaxWidth) {\n newWidth = allowedMaxWidth;\n }\n this._wrapper.style.setProperty(Y_AXIS_WIDTH_CSS_VAR, `${newWidth}px`);\n };\n\n const handlePointerUp = () => {\n this._yAxisWidth = newWidth;\n this._isDraggingYAxis = false;\n if (this._oldCursor) {\n document.body.style.cursor = this._oldCursor;\n } else {\n document.body.style.removeProperty(\"cursor\");\n }\n window.removeEventListener(\"pointermove\", handlePointerMove);\n window.removeEventListener(\"pointerup\", handlePointerUp);\n };\n\n this._oldCursor = document.body.style.cursor;\n document.body.style.cursor = \"col-resize\";\n window.addEventListener(\"pointermove\", handlePointerMove);\n window.addEventListener(\"pointerup\", handlePointerUp);\n }\n\n private onYAxisKeyDown(event: KeyboardEvent): void {\n const percentage = parseInt(this._yAxisWidthPercentage ?? \"0\", 10);\n const key = event.key;\n const isLeftAxis = this.yAxisPosition === YAxisPosition.Left;\n const leftKey = isLeftAxis ? \"ArrowLeft\" : \"ArrowRight\";\n const rightKey = isLeftAxis ? \"ArrowRight\" : \"ArrowLeft\";\n const commonArgs = {\n currentPercentage: percentage,\n minWidth: this._yAxisMinWidth,\n maxWidth: this._yAxisMaxWidth,\n };\n\n if (key === leftKey) {\n event.preventDefault();\n this._yAxisWidth =\n getUpdatedYAxisWidth({\n ...commonArgs,\n widthPercentage: Math.max(percentage - 5, 0),\n }) ?? this._yAxisWidth;\n } else if (key === rightKey) {\n event.preventDefault();\n this._yAxisWidth =\n getUpdatedYAxisWidth({\n ...commonArgs,\n widthPercentage: Math.min(percentage + 5, 100),\n }) ?? this._yAxisWidth;\n } else if (key === \"Home\") {\n event.preventDefault();\n this._yAxisWidth =\n getUpdatedYAxisWidth({\n ...commonArgs,\n widthPercentage: 0,\n }) ?? this._yAxisWidth;\n } else if (key === \"End\") {\n event.preventDefault();\n this._yAxisWidth =\n getUpdatedYAxisWidth({\n ...commonArgs,\n widthPercentage: 100,\n }) ?? this._yAxisWidth;\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this._vObserver?.disconnect();\n this._hObserver?.disconnect();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"rapido-bar\": Rapidobar;\n }\n}\n"],"names":["Rapidobar","LitElement","MIN_Y_AXIS_WIDTH","MAX_Y_AXIS_WIDTH","DEFAULT_Y_AXIS_WIDTH","Orientation","XAxisPosition","YAxisPosition","Theme","ShowLabels","css","unsafeCSS","styles","maxYAxisWidth","value","oldValue","length","categories","values","category","index","analysis","analyzeValues","formatLabels","generateTicks","SCROLLBAR_WIDTH_CSS_VAR","Y_AXIS_WIDTH_CSS_VAR","X_AXIS_HEIGHT_CSS_VAR","DATA_LENGTH_CSS_VAR","X_AXIS_FIRST_LABEL_CSS_VAR","X_AXIS_LAST_LABEL_CSS_VAR","isVertical","xAxisLabel","yAxisLabel","xAxisLabels","yAxisLabels","xAxisLabelTemplates","label","html","xAxisTemplate","nothing","yAxisLabelTemplates","yAxisTemplate","noop","gridlineTemplates","barTemplates","isFocused","axisValue","barValue","formatLabel","tooltipValue","isPositive","barSize","getSizeInPercentages","classMap","styleMap","_changedProperties","changedProperties","calculateYAxisWidths","getTextWidth","options","callback","getScrollbarSize","event","target","nextFocused","nextKey","prevKey","key","pointerDownEvent","newWidth","handlePointerMove","pointerMoveEvent","parent","moveClientX","downClientX","allowedMaxWidth","handlePointerUp","percentage","isLeftAxis","leftKey","rightKey","commonArgs","getUpdatedYAxisWidth","Tooltip","__decorateClass","state","property","query","queryAll","eventOptions","customElement"],"mappings":"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"}
package/dist/utils/dom.js CHANGED
@@ -1,40 +1,38 @@
1
- import { MIN_Y_AXIS_WIDTH as c, MAX_Y_AXIS_WIDTH as f, DEFAULT_Y_AXIS_WIDTH as d, MAX_CONTENT_WIDTH as l, Y_AXIS_WIDTH_CSS_VAR as _, Y_AXIS_LINE_WIDTH as I } from "../shared/constants.js";
2
- import { Orientation as g } from "../shared/enums.js";
3
- function T(e, t = "") {
1
+ import { MIN_Y_AXIS_WIDTH as l, MAX_Y_AXIS_WIDTH as c, DEFAULT_Y_AXIS_WIDTH as d, MAX_CONTENT_WIDTH as s, Y_AXIS_WIDTH_CSS_VAR as _, Y_AXIS_LINE_WIDTH as g } from "../shared/constants.js";
2
+ import { Orientation as a } from "../shared/enums.js";
3
+ function I(e, t = "") {
4
4
  if (!t || !e)
5
5
  return 0;
6
- const n = document.createTextNode(t);
7
- e.appendChild(n);
6
+ const i = document.createTextNode(t);
7
+ e.appendChild(i);
8
8
  const o = Math.ceil(e.getBoundingClientRect().width);
9
9
  return e.replaceChildren(), o;
10
10
  }
11
- function S(e, t) {
12
- let n = 0;
13
- return e === g.Vertical && (n = t.offsetHeight - t.clientHeight), e === g.Horizontal && (n = t.offsetWidth - t.clientWidth), n;
11
+ function A(e, t) {
12
+ let i = 0;
13
+ return e === a.Vertical && (i = t.offsetHeight - t.clientHeight), e === a.Horizontal && (i = t.offsetWidth - t.clientWidth), i;
14
14
  }
15
- function M(e, t, n, o = []) {
16
- const r = /* @__PURE__ */ new Map([
17
- ["min", c],
15
+ function H(e, t, i, o = []) {
16
+ const h = /* @__PURE__ */ new Map([
17
+ ["min", l],
18
18
  ["width", d],
19
- ["max", f]
19
+ ["max", c]
20
20
  ]);
21
- if (o.length && e && t && n) {
22
- n.style.removeProperty("width");
23
- const a = [...o].sort((W, u) => {
24
- const h = W.toString(), s = u.toString();
25
- return s.length !== h.length ? s.length - h.length : s.localeCompare(h);
21
+ if (o.length && e && t && i) {
22
+ i.style.removeProperty("width");
23
+ let r = "";
24
+ o.forEach((W) => {
25
+ const f = W.toString();
26
+ f.length > r.length && (r = f);
26
27
  });
27
- let i = T(
28
- e,
29
- a[0].toString()
30
- ) + I + 6;
31
- r.set("min", Math.min(i, c)), r.set("max", Math.max(i, f)), i > d && (i = d), i > t.offsetWidth - l && (i = t.offsetWidth - l), r.set("width", i), t.style.setProperty(_, `${i}px`), n.style.setProperty("width", `var(${_})`);
28
+ let n = I(e, r) + g + 6;
29
+ h.set("min", Math.min(n, l)), h.set("max", Math.max(n, c)), n > d && (n = d), n > t.offsetWidth - s && (n = t.offsetWidth - s), h.set("width", n), t.style.setProperty(_, `${n}px`), i.style.setProperty("width", `var(${_})`);
32
30
  }
33
- return Array.from(r.values());
31
+ return Array.from(h.values());
34
32
  }
35
33
  export {
36
- M as calculateYAxisWidths,
37
- S as getScrollbarSize,
38
- T as getTextWidth
34
+ H as calculateYAxisWidths,
35
+ A as getScrollbarSize,
36
+ I as getTextWidth
39
37
  };
40
38
  //# sourceMappingURL=dom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom.js","sources":["../../lib/utils/dom.ts"],"sourcesContent":["import {\n DEFAULT_Y_AXIS_WIDTH,\n MAX_CONTENT_WIDTH,\n MAX_Y_AXIS_WIDTH,\n MIN_Y_AXIS_WIDTH,\n Orientation,\n Y_AXIS_LINE_WIDTH,\n Y_AXIS_WIDTH_CSS_VAR,\n} from \"../shared\";\n\n/**\n * Measures the rendered width of a given text string in a specific font.\n * @param {HTMLElement} textSizeDiv - Existing element used to measure text size.\n * @param {string} text - The text to measure.\n * @returns {number} The width of the text in pixels.\n */\nexport function getTextWidth(\n textSizeDiv: HTMLElement,\n text: string = \"\",\n): number {\n if (!text || !textSizeDiv) {\n return 0;\n }\n\n const content = document.createTextNode(text);\n textSizeDiv.appendChild(content);\n const width = Math.ceil(textSizeDiv.getBoundingClientRect().width);\n textSizeDiv.replaceChildren();\n\n return width;\n}\n\n/**\n * Calculates the size of the browser's scrollbar.\n * Useful for layout adjustments when dragging y-axis.\n * @param {Orientation} orientation - Chart orientation.\n * @param {HTMLElement} scrollableElement - Chart element that can be scrolled.\n * @returns {number} The scrollbar size in pixels.\n */\nexport function getScrollbarSize(\n orientation: Orientation,\n scrollableElement: HTMLElement,\n): number {\n let width = 0;\n if (orientation === Orientation.Vertical) {\n width = scrollableElement.offsetHeight - scrollableElement.clientHeight;\n }\n if (orientation === Orientation.Horizontal) {\n width = scrollableElement.offsetWidth - scrollableElement.clientWidth;\n }\n return width;\n}\n\n/**\n * Calculates the width of the y-axis based on label content,\n * label formatting, tick labels, and any additional spacing.\n * @param {HTMLElement} textSizeDiv - Existing element used to measure text size.\n * @param {HTMLElement} wrapper - Chart wrapper element.\n * @param {HTMLElement} yAxis - Y-axis element.\n * @param {(string | number)[]} formattedValues - Formatted ticks or labels (depending on the orientation).\n * @returns {number} Y-axis width in pixels.\n */\nexport function calculateYAxisWidths<T extends string | number>(\n textSizeDiv: HTMLElement,\n wrapper: HTMLElement,\n yAxis: HTMLElement,\n formattedValues: T[] = [],\n): number[] {\n const result = new Map<string, number>([\n [\"min\", MIN_Y_AXIS_WIDTH],\n [\"width\", DEFAULT_Y_AXIS_WIDTH],\n [\"max\", MAX_Y_AXIS_WIDTH],\n ]);\n\n if (formattedValues.length && !!textSizeDiv && !!wrapper && !!yAxis) {\n // reset width when values change so that the new one is calculated correctly\n yAxis.style.removeProperty(\"width\");\n\n const sortedValues = [...formattedValues].sort((a, b) => {\n const strA = a.toString();\n const strB = b.toString();\n if (strB.length !== strA.length) {\n return strB.length - strA.length;\n }\n return strB.localeCompare(strA);\n });\n const longestLabelWidth = getTextWidth(\n textSizeDiv,\n sortedValues[0].toString(),\n );\n // margin 8px + 2px to avoid ellipsis = 6\n let newWidth = longestLabelWidth + Y_AXIS_LINE_WIDTH + 6;\n result.set(\"min\", Math.min(newWidth, MIN_Y_AXIS_WIDTH));\n result.set(\"max\", Math.max(newWidth, MAX_Y_AXIS_WIDTH));\n\n if (newWidth > DEFAULT_Y_AXIS_WIDTH) {\n newWidth = DEFAULT_Y_AXIS_WIDTH;\n }\n if (newWidth > wrapper.offsetWidth - MAX_CONTENT_WIDTH) {\n newWidth = wrapper.offsetWidth - MAX_CONTENT_WIDTH;\n }\n\n result.set(\"width\", newWidth);\n wrapper.style.setProperty(Y_AXIS_WIDTH_CSS_VAR, `${newWidth}px`);\n yAxis.style.setProperty(\"width\", `var(${Y_AXIS_WIDTH_CSS_VAR})`);\n }\n\n return Array.from(result.values());\n}\n"],"names":["getTextWidth","textSizeDiv","text","content","width","getScrollbarSize","orientation","scrollableElement","Orientation","calculateYAxisWidths","wrapper","yAxis","formattedValues","result","MIN_Y_AXIS_WIDTH","DEFAULT_Y_AXIS_WIDTH","MAX_Y_AXIS_WIDTH","sortedValues","a","b","strA","strB","newWidth","Y_AXIS_LINE_WIDTH","MAX_CONTENT_WIDTH","Y_AXIS_WIDTH_CSS_VAR"],"mappings":";;AAgBO,SAASA,EACdC,GACAC,IAAe,IACP;AACR,MAAI,CAACA,KAAQ,CAACD;AACZ,WAAO;AAGT,QAAME,IAAU,SAAS,eAAeD,CAAI;AAC5C,EAAAD,EAAY,YAAYE,CAAO;AAC/B,QAAMC,IAAQ,KAAK,KAAKH,EAAY,sBAAA,EAAwB,KAAK;AACjE,SAAAA,EAAY,gBAAA,GAELG;AACT;AASO,SAASC,EACdC,GACAC,GACQ;AACR,MAAIH,IAAQ;AACZ,SAAIE,MAAgBE,EAAY,aAC9BJ,IAAQG,EAAkB,eAAeA,EAAkB,eAEzDD,MAAgBE,EAAY,eAC9BJ,IAAQG,EAAkB,cAAcA,EAAkB,cAErDH;AACT;AAWO,SAASK,EACdR,GACAS,GACAC,GACAC,IAAuB,CAAA,GACb;AACV,QAAMC,wBAAa,IAAoB;AAAA,IACrC,CAAC,OAAOC,CAAgB;AAAA,IACxB,CAAC,SAASC,CAAoB;AAAA,IAC9B,CAAC,OAAOC,CAAgB;AAAA,EAAA,CACzB;AAED,MAAIJ,EAAgB,UAAYX,KAAiBS,KAAaC,GAAO;AAEnE,IAAAA,EAAM,MAAM,eAAe,OAAO;AAElC,UAAMM,IAAe,CAAC,GAAGL,CAAe,EAAE,KAAK,CAACM,GAAGC,MAAM;AACvD,YAAMC,IAAOF,EAAE,SAAA,GACTG,IAAOF,EAAE,SAAA;AACf,aAAIE,EAAK,WAAWD,EAAK,SAChBC,EAAK,SAASD,EAAK,SAErBC,EAAK,cAAcD,CAAI;AAAA,IAChC,CAAC;AAMD,QAAIE,IALsBtB;AAAA,MACxBC;AAAA,MACAgB,EAAa,CAAC,EAAE,SAAA;AAAA,IAAS,IAGQM,IAAoB;AACvD,IAAAV,EAAO,IAAI,OAAO,KAAK,IAAIS,GAAUR,CAAgB,CAAC,GACtDD,EAAO,IAAI,OAAO,KAAK,IAAIS,GAAUN,CAAgB,CAAC,GAElDM,IAAWP,MACbO,IAAWP,IAETO,IAAWZ,EAAQ,cAAcc,MACnCF,IAAWZ,EAAQ,cAAcc,IAGnCX,EAAO,IAAI,SAASS,CAAQ,GAC5BZ,EAAQ,MAAM,YAAYe,GAAsB,GAAGH,CAAQ,IAAI,GAC/DX,EAAM,MAAM,YAAY,SAAS,OAAOc,CAAoB,GAAG;AAAA,EACjE;AAEA,SAAO,MAAM,KAAKZ,EAAO,OAAA,CAAQ;AACnC;"}
1
+ {"version":3,"file":"dom.js","sources":["../../lib/utils/dom.ts"],"sourcesContent":["import {\n DEFAULT_Y_AXIS_WIDTH,\n MAX_CONTENT_WIDTH,\n MAX_Y_AXIS_WIDTH,\n MIN_Y_AXIS_WIDTH,\n Orientation,\n Y_AXIS_LINE_WIDTH,\n Y_AXIS_WIDTH_CSS_VAR,\n} from \"../shared\";\n\n/**\n * Measures the rendered width of a given text string in a specific font.\n * @param {HTMLElement} textSizeDiv - Existing element used to measure text size.\n * @param {string} text - The text to measure.\n * @returns {number} The width of the text in pixels.\n */\nexport function getTextWidth(\n textSizeDiv: HTMLElement,\n text: string = \"\",\n): number {\n if (!text || !textSizeDiv) {\n return 0;\n }\n\n const content = document.createTextNode(text);\n textSizeDiv.appendChild(content);\n const width = Math.ceil(textSizeDiv.getBoundingClientRect().width);\n textSizeDiv.replaceChildren();\n\n return width;\n}\n\n/**\n * Calculates the size of the browser's scrollbar.\n * Useful for layout adjustments when dragging y-axis.\n * @param {Orientation} orientation - Chart orientation.\n * @param {HTMLElement} scrollableElement - Chart element that can be scrolled.\n * @returns {number} The scrollbar size in pixels.\n */\nexport function getScrollbarSize(\n orientation: Orientation,\n scrollableElement: HTMLElement,\n): number {\n let width = 0;\n if (orientation === Orientation.Vertical) {\n width = scrollableElement.offsetHeight - scrollableElement.clientHeight;\n }\n if (orientation === Orientation.Horizontal) {\n width = scrollableElement.offsetWidth - scrollableElement.clientWidth;\n }\n return width;\n}\n\n/**\n * Calculates the width of the y-axis based on label content,\n * label formatting, tick labels, and any additional spacing.\n * @param {HTMLElement} textSizeDiv - Existing element used to measure text size.\n * @param {HTMLElement} wrapper - Chart wrapper element.\n * @param {HTMLElement} yAxis - Y-axis element.\n * @param {(string | number)[]} formattedValues - Formatted ticks or labels (depending on the orientation).\n * @returns {number} Y-axis width in pixels.\n */\nexport function calculateYAxisWidths<T extends string | number>(\n textSizeDiv: HTMLElement,\n wrapper: HTMLElement,\n yAxis: HTMLElement,\n formattedValues: T[] = [],\n): number[] {\n const result = new Map<string, number>([\n [\"min\", MIN_Y_AXIS_WIDTH],\n [\"width\", DEFAULT_Y_AXIS_WIDTH],\n [\"max\", MAX_Y_AXIS_WIDTH],\n ]);\n\n if (formattedValues.length && !!textSizeDiv && !!wrapper && !!yAxis) {\n // reset width when values change so that the new one is calculated correctly\n yAxis.style.removeProperty(\"width\");\n\n let longestLabel = \"\";\n formattedValues.forEach((value) => {\n const label = value.toString();\n if (label.length > longestLabel.length) {\n longestLabel = label;\n }\n });\n const longestLabelWidth = getTextWidth(textSizeDiv, longestLabel);\n // margin 8px + 2px to avoid ellipsis = 6\n let newWidth = longestLabelWidth + Y_AXIS_LINE_WIDTH + 6;\n result.set(\"min\", Math.min(newWidth, MIN_Y_AXIS_WIDTH));\n result.set(\"max\", Math.max(newWidth, MAX_Y_AXIS_WIDTH));\n\n if (newWidth > DEFAULT_Y_AXIS_WIDTH) {\n newWidth = DEFAULT_Y_AXIS_WIDTH;\n }\n if (newWidth > wrapper.offsetWidth - MAX_CONTENT_WIDTH) {\n newWidth = wrapper.offsetWidth - MAX_CONTENT_WIDTH;\n }\n\n result.set(\"width\", newWidth);\n wrapper.style.setProperty(Y_AXIS_WIDTH_CSS_VAR, `${newWidth}px`);\n yAxis.style.setProperty(\"width\", `var(${Y_AXIS_WIDTH_CSS_VAR})`);\n }\n\n return Array.from(result.values());\n}\n"],"names":["getTextWidth","textSizeDiv","text","content","width","getScrollbarSize","orientation","scrollableElement","Orientation","calculateYAxisWidths","wrapper","yAxis","formattedValues","result","MIN_Y_AXIS_WIDTH","DEFAULT_Y_AXIS_WIDTH","MAX_Y_AXIS_WIDTH","longestLabel","value","label","newWidth","Y_AXIS_LINE_WIDTH","MAX_CONTENT_WIDTH","Y_AXIS_WIDTH_CSS_VAR"],"mappings":";;AAgBO,SAASA,EACdC,GACAC,IAAe,IACP;AACR,MAAI,CAACA,KAAQ,CAACD;AACZ,WAAO;AAGT,QAAME,IAAU,SAAS,eAAeD,CAAI;AAC5C,EAAAD,EAAY,YAAYE,CAAO;AAC/B,QAAMC,IAAQ,KAAK,KAAKH,EAAY,sBAAA,EAAwB,KAAK;AACjE,SAAAA,EAAY,gBAAA,GAELG;AACT;AASO,SAASC,EACdC,GACAC,GACQ;AACR,MAAIH,IAAQ;AACZ,SAAIE,MAAgBE,EAAY,aAC9BJ,IAAQG,EAAkB,eAAeA,EAAkB,eAEzDD,MAAgBE,EAAY,eAC9BJ,IAAQG,EAAkB,cAAcA,EAAkB,cAErDH;AACT;AAWO,SAASK,EACdR,GACAS,GACAC,GACAC,IAAuB,CAAA,GACb;AACV,QAAMC,wBAAa,IAAoB;AAAA,IACrC,CAAC,OAAOC,CAAgB;AAAA,IACxB,CAAC,SAASC,CAAoB;AAAA,IAC9B,CAAC,OAAOC,CAAgB;AAAA,EAAA,CACzB;AAED,MAAIJ,EAAgB,UAAYX,KAAiBS,KAAaC,GAAO;AAEnE,IAAAA,EAAM,MAAM,eAAe,OAAO;AAElC,QAAIM,IAAe;AACnB,IAAAL,EAAgB,QAAQ,CAACM,MAAU;AACjC,YAAMC,IAAQD,EAAM,SAAA;AACpB,MAAIC,EAAM,SAASF,EAAa,WAC9BA,IAAeE;AAAA,IAEnB,CAAC;AAGD,QAAIC,IAFsBpB,EAAaC,GAAagB,CAAY,IAE7BI,IAAoB;AACvD,IAAAR,EAAO,IAAI,OAAO,KAAK,IAAIO,GAAUN,CAAgB,CAAC,GACtDD,EAAO,IAAI,OAAO,KAAK,IAAIO,GAAUJ,CAAgB,CAAC,GAElDI,IAAWL,MACbK,IAAWL,IAETK,IAAWV,EAAQ,cAAcY,MACnCF,IAAWV,EAAQ,cAAcY,IAGnCT,EAAO,IAAI,SAASO,CAAQ,GAC5BV,EAAQ,MAAM,YAAYa,GAAsB,GAAGH,CAAQ,IAAI,GAC/DT,EAAM,MAAM,YAAY,SAAS,OAAOY,CAAoB,GAAG;AAAA,EACjE;AAEA,SAAO,MAAM,KAAKV,EAAO,OAAA,CAAQ;AACnC;"}
@@ -1,17 +1,20 @@
1
1
  export declare function noop(): void;
2
2
  export declare function echo<T extends string | number>(value: T): T;
3
3
  /**
4
- * Checks whether the dataset contains both positive and negative values.
4
+ * Analyzes an array of values in a single pass to extract min/max,
5
+ * axis bounds, and positivity flags.
5
6
  * @param {number[]} values - Array of numeric values to analyze.
6
- * @returns {[boolean, boolean]} Both true if at least one value is positive and one is negative.
7
7
  */
8
- export declare function checkIfSomePositiveAndNegative(values?: number[]): [boolean, boolean];
9
- /**
10
- * Checks whether all values in the dataset are either entirely positive or entirely negative.
11
- * @param {number[]} values - Array of numeric values to check.
12
- * @returns {[boolean, boolean]} Both true if all values have the same sign (all >= 0 or all <= 0).
13
- */
14
- export declare function checkIfAllPositiveOrNegative(values?: number[]): [boolean, boolean];
8
+ export declare function analyzeValues(values?: number[]): {
9
+ min: number;
10
+ max: number;
11
+ axisMin: number;
12
+ axisMax: number;
13
+ hasPositive: boolean;
14
+ hasNegative: boolean;
15
+ allPositive: boolean;
16
+ allNegative: boolean;
17
+ };
15
18
  /**
16
19
  * Use label formatter if it exists, or return the original label.
17
20
  * @param {string | number} label - Axis or bar label
@@ -25,12 +28,6 @@ export declare function formatLabel<T extends string | number>(label: T, formatt
25
28
  * @returns {(string | number)[]} - Formatted labels.
26
29
  */
27
30
  export declare function formatLabels<T extends string | number>(labels: T[], formatter?: (value: T) => string | number): (string | number)[];
28
- /**
29
- * Computes the minimum and maximum values from the dataset.
30
- * @param {number[]} values - Array of numeric values.
31
- * @returns {[number, number]} Min and max values.
32
- */
33
- export declare function getMinAndMax(values?: number[]): [number, number];
34
31
  /**
35
32
  * Generates a list of tick values for the value axis based on
36
33
  * all the values and desired tick count.
@@ -1,74 +1,83 @@
1
- function P() {
1
+ function v() {
2
2
  }
3
- function m(t) {
3
+ function d(t) {
4
4
  return t;
5
5
  }
6
- function b(t = []) {
7
- const o = t.some((e) => e > 0), n = t.some((e) => e < 0);
8
- return [o, n];
9
- }
10
- function w(t = []) {
6
+ function P(t = []) {
11
7
  if (!t.length)
12
- return [!1, !1];
13
- const o = t.every((e) => e >= 0), n = t.every((e) => e <= 0);
14
- return [o, n];
8
+ return {
9
+ min: 0,
10
+ max: 0,
11
+ axisMin: 0,
12
+ axisMax: 0,
13
+ hasPositive: !1,
14
+ hasNegative: !1,
15
+ allPositive: !1,
16
+ allNegative: !1
17
+ };
18
+ let o = t[0], a = t[0], s = !1, e = !1, n = !0, i = !0;
19
+ for (const r of t)
20
+ r < o && (o = r), r > a && (a = r), r > 0 && (s = !0, i = !1), r < 0 && (e = !0, n = !1);
21
+ let l = o, f = a;
22
+ if (s && e) {
23
+ const r = Math.max(Math.abs(o), Math.abs(a));
24
+ l = -r, f = r;
25
+ }
26
+ return {
27
+ min: o,
28
+ max: a,
29
+ axisMin: l,
30
+ axisMax: f,
31
+ hasPositive: s,
32
+ hasNegative: e,
33
+ allPositive: n,
34
+ allNegative: i
35
+ };
15
36
  }
16
- function v(t, o = m) {
37
+ function m(t, o = d) {
17
38
  return o(t);
18
39
  }
19
- function A(t, o = m) {
20
- return t.map((n) => v(n, o));
21
- }
22
- function N(t = []) {
23
- if (!t.length)
24
- return [0, 0];
25
- const o = Math.min(...t), n = Math.max(...t), [e, r] = b(t);
26
- if (e && r) {
27
- const a = Math.max(Math.abs(o), Math.abs(n));
28
- return [-Math.abs(a), a];
29
- }
30
- return [o, n];
40
+ function w(t, o = d) {
41
+ return t.map((a) => m(a, o));
31
42
  }
32
- function S(t = 0, o = 100, n = 5, e = 0.5) {
33
- if (n <= 1)
43
+ function N(t = 0, o = 100, a = 5, s = 0.5) {
44
+ if (a <= 1)
34
45
  return [];
35
- let r = t, a = o;
46
+ let e = t, n = o;
36
47
  if (t === o) {
37
- let l = 1;
38
- t !== 0 && (l = Math.pow(10, Math.floor(Math.log10(Math.abs(t)))) * 0.1), r = t - l, a = t + l;
48
+ let h = 1;
49
+ t !== 0 && (h = Math.pow(10, Math.floor(Math.log10(Math.abs(t)))) * 0.1), e = t - h, n = t + h;
39
50
  }
40
- let s = (a - r) / (n - 1);
41
- s === 0 && (s = 1);
42
- const c = Math.floor(Math.log10(s)), h = Math.pow(10, c), u = s / h, p = Math.ceil(u / e) * e, i = parseFloat((p * h).toPrecision(12)), M = i.toString().indexOf("."), x = M >= 0 ? i.toString().length - M - 1 : 0;
43
- let f;
44
- return r < 0 && a > 0 ? f = -Math.floor(n / 2) * i : a <= 0 ? f = a - i * (n - 1) : f = r, Array.from({ length: n }, (l, g) => {
45
- const d = Math.pow(10, x);
46
- return Math.round((f + g * i) * d) / d;
51
+ let i = (n - e) / (a - 1);
52
+ i === 0 && (i = 1);
53
+ const l = Math.floor(Math.log10(i)), f = Math.pow(10, l), r = i / f, p = Math.ceil(r / s) * s, c = parseFloat((p * f).toPrecision(12)), M = c.toString().indexOf("."), b = M >= 0 ? c.toString().length - M - 1 : 0;
54
+ let u;
55
+ return e < 0 && n > 0 ? u = -Math.floor(a / 2) * c : n <= 0 ? u = n - c * (a - 1) : u = e, Array.from({ length: a }, (h, g) => {
56
+ const x = Math.pow(10, b);
57
+ return Math.round((u + g * c) * x) / x;
47
58
  });
48
59
  }
49
- function I(t = 0, o = 0, n = 100) {
50
- const e = +o, r = +n, a = +t;
51
- return e === 0 && r === 0 ? 0 : e >= 0 && r >= 0 ? (a - e) / (r - e) * 100 : e <= 0 && r <= 0 ? (r - a) / (r - e) * 100 : a >= 0 ? a / r * 100 : Math.abs(a) / Math.abs(e) * 100;
60
+ function S(t = 0, o = 0, a = 100) {
61
+ const s = +o, e = +a, n = +t;
62
+ return s === 0 && e === 0 ? 0 : s >= 0 && e >= 0 ? (n - s) / (e - s) * 100 : s <= 0 && e <= 0 ? (e - n) / (e - s) * 100 : n >= 0 ? n / e * 100 : Math.abs(n) / Math.abs(s) * 100;
52
63
  }
53
- function V({
64
+ function z({
54
65
  currentPercentage: t = 0,
55
66
  minWidth: o = 0,
56
- maxWidth: n = 100,
57
- widthPercentage: e
67
+ maxWidth: a = 100,
68
+ widthPercentage: s
58
69
  }) {
59
- const r = +t, a = +o, s = +n, c = +e;
60
- return r === c ? null : (s - a) * c / 100 + a;
70
+ const e = +t, n = +o, i = +a, l = +s;
71
+ return e === l ? null : (i - n) * l / 100 + n;
61
72
  }
62
73
  export {
63
- w as checkIfAllPositiveOrNegative,
64
- b as checkIfSomePositiveAndNegative,
65
- m as echo,
66
- v as formatLabel,
67
- A as formatLabels,
68
- S as generateTicks,
69
- N as getMinAndMax,
70
- I as getSizeInPercentages,
71
- V as getUpdatedYAxisWidth,
72
- P as noop
74
+ P as analyzeValues,
75
+ d as echo,
76
+ m as formatLabel,
77
+ w as formatLabels,
78
+ N as generateTicks,
79
+ S as getSizeInPercentages,
80
+ z as getUpdatedYAxisWidth,
81
+ v as noop
73
82
  };
74
83
  //# sourceMappingURL=rapidobar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rapidobar.js","sources":["../../lib/utils/rapidobar.ts"],"sourcesContent":["export function noop() {}\nexport function echo<T extends string | number>(value: T): T {\n return value;\n}\n\n/**\n * Checks whether the dataset contains both positive and negative values.\n * @param {number[]} values - Array of numeric values to analyze.\n * @returns {[boolean, boolean]} Both true if at least one value is positive and one is negative.\n */\nexport function checkIfSomePositiveAndNegative(\n values: number[] = [],\n): [boolean, boolean] {\n const hasPositive = values.some((value) => value > 0);\n const hasNegative = values.some((value) => value < 0);\n return [hasPositive, hasNegative];\n}\n\n/**\n * Checks whether all values in the dataset are either entirely positive or entirely negative.\n * @param {number[]} values - Array of numeric values to check.\n * @returns {[boolean, boolean]} Both true if all values have the same sign (all >= 0 or all <= 0).\n */\nexport function checkIfAllPositiveOrNegative(\n values: number[] = [],\n): [boolean, boolean] {\n if (!values.length) {\n return [false, false];\n }\n const allPositive = values.every((value) => value >= 0);\n const allNegative = values.every((value) => value <= 0);\n return [allPositive, allNegative];\n}\n\n/**\n * Use label formatter if it exists, or return the original label.\n * @param {string | number} label - Axis or bar label\n * @param [formatter=echo] - Axis or bar label formatter\n */\nexport function formatLabel<T extends string | number>(\n label: T,\n formatter: (value: T) => string | number = echo,\n): string | number {\n return formatter(label);\n}\n\n/**\n * Use label formatter if it exists, or return the original labels.\n * @param {string | number} labels - Axis or bar labels.\n * @param [formatter=echo] - Axis or bar label formatter.\n * @returns {(string | number)[]} - Formatted labels.\n */\nexport function formatLabels<T extends string | number>(\n labels: T[],\n formatter: (value: T) => string | number = echo,\n): (string | number)[] {\n return labels.map((label) => formatLabel(label, formatter));\n}\n\n/**\n * Computes the minimum and maximum values from the dataset.\n * @param {number[]} values - Array of numeric values.\n * @returns {[number, number]} Min and max values.\n */\nexport function getMinAndMax(values: number[] = []): [number, number] {\n if (!values.length) {\n return [0, 0];\n }\n\n const minValue = Math.min(...values);\n const maxValue = Math.max(...values);\n const [hasPositive, hasNegative] = checkIfSomePositiveAndNegative(values);\n\n if (hasPositive && hasNegative) {\n const max = Math.max(Math.abs(minValue), Math.abs(maxValue));\n return [-Math.abs(max), max];\n }\n return [minValue, maxValue];\n}\n\n/**\n * Generates a list of tick values for the value axis based on\n * all the values and desired tick count.\n * @param {number} min - Minimum bar value.\n * @param {number} max - Maximum bar value.\n * @param {number} numOfTicks - Number of ticks for the axis.\n * @param {number} granularity - Force the rough tick step to the next available increment.\n * @returns {number[]} An array of tick values evenly distributed across the range.\n */\nexport function generateTicks(\n min: number = 0,\n max: number = 100,\n numOfTicks: number = 5,\n granularity: number = 0.5,\n): number[] {\n if (numOfTicks <= 1) {\n return [];\n }\n\n let start = min;\n let stop = max;\n\n if (min === max) {\n // expand the range equally by 10%\n let offset = 1;\n if (min !== 0) {\n const magnitude = Math.pow(10, Math.floor(Math.log10(Math.abs(min))));\n offset = magnitude * 0.1;\n }\n start = min - offset;\n stop = min + offset;\n }\n\n let step = (stop - start) / (numOfTicks - 1);\n if (step === 0) {\n step = 1;\n }\n const power = Math.floor(Math.log10(step));\n const magnitude = Math.pow(10, power);\n const normalizedStep = step / magnitude;\n const factor = Math.ceil(normalizedStep / granularity) * granularity;\n const increment = parseFloat((factor * magnitude).toPrecision(12));\n\n const decimalIndex = increment.toString().indexOf(\".\");\n const decimals =\n decimalIndex >= 0 ? increment.toString().length - decimalIndex - 1 : 0;\n\n let axisMin;\n if (start < 0 && stop > 0) {\n axisMin = -Math.floor(numOfTicks / 2) * increment;\n } else if (stop <= 0) {\n axisMin = stop - increment * (numOfTicks - 1);\n } else {\n axisMin = start;\n }\n\n return Array.from({ length: numOfTicks }, (_, index) => {\n const factor = Math.pow(10, decimals);\n return Math.round((axisMin + index * increment) * factor) / factor;\n });\n}\n\n/**\n * Converts a given numeric value into a percentage of a reference size.\n * @param {number} value - The value to convert.\n * @param {number} min - Minimum value.\n * @param {number} max - Maximum value.\n * @returns {number} The value expressed as a percentage of the total.\n */\nexport function getSizeInPercentages(\n value: number = 0,\n min: number = 0,\n max: number = 100,\n): number {\n const start = +min;\n const stop = +max;\n const val = +value;\n\n if (start === 0 && stop === 0) {\n return 0;\n }\n\n if (start >= 0 && stop >= 0) {\n return ((val - start) / (stop - start)) * 100;\n }\n\n if (start <= 0 && stop <= 0) {\n return ((stop - val) / (stop - start)) * 100;\n }\n\n if (val >= 0) {\n return (val / stop) * 100;\n } else {\n return (Math.abs(val) / Math.abs(start)) * 100;\n }\n}\n\n/**\n * Returns the new y-axis width based on min, max and current width in percentages.\n * @param {Object} params - Configuration options.\n * @param {number} [params.currentPercentage=0] - Previously applied y-axis width (in %).\n * @param {number} [params.minWidth=0] - Minimum allowed width (in #).\n * @param {number} [params.maxWidth=100] - Maximum allowed width (in #).\n * @param {number} params.widthPercentage - Newly calculated required width (in %).\n * @returns {number | null} Updated y-axis width in pixels or null if current and new are the same.\n */\nexport function getUpdatedYAxisWidth({\n currentPercentage = 0,\n minWidth = 0,\n maxWidth = 100,\n widthPercentage,\n}: {\n currentPercentage?: number;\n minWidth?: number;\n maxWidth?: number;\n widthPercentage: number;\n}): number | null {\n const curr = +currentPercentage;\n const min = +minWidth;\n const max = +maxWidth;\n const width = +widthPercentage;\n\n if (curr === width) {\n return null;\n }\n const maxValue = max - min;\n const absolute = (maxValue * width) / 100;\n return absolute + min;\n}\n"],"names":["noop","echo","value","checkIfSomePositiveAndNegative","values","hasPositive","hasNegative","checkIfAllPositiveOrNegative","allPositive","allNegative","formatLabel","label","formatter","formatLabels","labels","getMinAndMax","minValue","maxValue","max","generateTicks","min","numOfTicks","granularity","start","stop","offset","step","power","magnitude","normalizedStep","factor","increment","decimalIndex","decimals","axisMin","_","index","getSizeInPercentages","val","getUpdatedYAxisWidth","currentPercentage","minWidth","maxWidth","widthPercentage","curr","width"],"mappings":"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"}
1
+ {"version":3,"file":"rapidobar.js","sources":["../../lib/utils/rapidobar.ts"],"sourcesContent":["export function noop() {}\nexport function echo<T extends string | number>(value: T): T {\n return value;\n}\n\n/**\n * Analyzes an array of values in a single pass to extract min/max,\n * axis bounds, and positivity flags.\n * @param {number[]} values - Array of numeric values to analyze.\n */\nexport function analyzeValues(values: number[] = []) {\n if (!values.length) {\n return {\n min: 0,\n max: 0,\n axisMin: 0,\n axisMax: 0,\n hasPositive: false,\n hasNegative: false,\n allPositive: false,\n allNegative: false,\n };\n }\n\n let min = values[0];\n let max = values[0];\n let hasPositive = false;\n let hasNegative = false;\n let allPositive = true;\n let allNegative = true;\n\n for (const value of values) {\n if (value < min) min = value;\n if (value > max) max = value;\n\n if (value > 0) {\n hasPositive = true;\n allNegative = false;\n }\n if (value < 0) {\n hasNegative = true;\n allPositive = false;\n }\n }\n\n // Symmetric axis bounds for mixed positive/negative values\n let axisMin = min;\n let axisMax = max;\n if (hasPositive && hasNegative) {\n const absMax = Math.max(Math.abs(min), Math.abs(max));\n axisMin = -absMax;\n axisMax = absMax;\n }\n\n return {\n min,\n max,\n axisMin,\n axisMax,\n hasPositive,\n hasNegative,\n allPositive,\n allNegative,\n };\n}\n\n/**\n * Use label formatter if it exists, or return the original label.\n * @param {string | number} label - Axis or bar label\n * @param [formatter=echo] - Axis or bar label formatter\n */\nexport function formatLabel<T extends string | number>(\n label: T,\n formatter: (value: T) => string | number = echo,\n): string | number {\n return formatter(label);\n}\n\n/**\n * Use label formatter if it exists, or return the original labels.\n * @param {string | number} labels - Axis or bar labels.\n * @param [formatter=echo] - Axis or bar label formatter.\n * @returns {(string | number)[]} - Formatted labels.\n */\nexport function formatLabels<T extends string | number>(\n labels: T[],\n formatter: (value: T) => string | number = echo,\n): (string | number)[] {\n return labels.map((label) => formatLabel(label, formatter));\n}\n\n/**\n * Generates a list of tick values for the value axis based on\n * all the values and desired tick count.\n * @param {number} min - Minimum bar value.\n * @param {number} max - Maximum bar value.\n * @param {number} numOfTicks - Number of ticks for the axis.\n * @param {number} granularity - Force the rough tick step to the next available increment.\n * @returns {number[]} An array of tick values evenly distributed across the range.\n */\nexport function generateTicks(\n min: number = 0,\n max: number = 100,\n numOfTicks: number = 5,\n granularity: number = 0.5,\n): number[] {\n if (numOfTicks <= 1) {\n return [];\n }\n\n let start = min;\n let stop = max;\n\n if (min === max) {\n // expand the range equally by 10%\n let offset = 1;\n if (min !== 0) {\n const magnitude = Math.pow(10, Math.floor(Math.log10(Math.abs(min))));\n offset = magnitude * 0.1;\n }\n start = min - offset;\n stop = min + offset;\n }\n\n let step = (stop - start) / (numOfTicks - 1);\n if (step === 0) {\n step = 1;\n }\n const power = Math.floor(Math.log10(step));\n const magnitude = Math.pow(10, power);\n const normalizedStep = step / magnitude;\n const factor = Math.ceil(normalizedStep / granularity) * granularity;\n const increment = parseFloat((factor * magnitude).toPrecision(12));\n\n const decimalIndex = increment.toString().indexOf(\".\");\n const decimals =\n decimalIndex >= 0 ? increment.toString().length - decimalIndex - 1 : 0;\n\n let axisMin;\n if (start < 0 && stop > 0) {\n axisMin = -Math.floor(numOfTicks / 2) * increment;\n } else if (stop <= 0) {\n axisMin = stop - increment * (numOfTicks - 1);\n } else {\n axisMin = start;\n }\n\n return Array.from({ length: numOfTicks }, (_, index) => {\n const factor = Math.pow(10, decimals);\n return Math.round((axisMin + index * increment) * factor) / factor;\n });\n}\n\n/**\n * Converts a given numeric value into a percentage of a reference size.\n * @param {number} value - The value to convert.\n * @param {number} min - Minimum value.\n * @param {number} max - Maximum value.\n * @returns {number} The value expressed as a percentage of the total.\n */\nexport function getSizeInPercentages(\n value: number = 0,\n min: number = 0,\n max: number = 100,\n): number {\n const start = +min;\n const stop = +max;\n const val = +value;\n\n if (start === 0 && stop === 0) {\n return 0;\n }\n\n if (start >= 0 && stop >= 0) {\n return ((val - start) / (stop - start)) * 100;\n }\n\n if (start <= 0 && stop <= 0) {\n return ((stop - val) / (stop - start)) * 100;\n }\n\n if (val >= 0) {\n return (val / stop) * 100;\n } else {\n return (Math.abs(val) / Math.abs(start)) * 100;\n }\n}\n\n/**\n * Returns the new y-axis width based on min, max and current width in percentages.\n * @param {Object} params - Configuration options.\n * @param {number} [params.currentPercentage=0] - Previously applied y-axis width (in %).\n * @param {number} [params.minWidth=0] - Minimum allowed width (in #).\n * @param {number} [params.maxWidth=100] - Maximum allowed width (in #).\n * @param {number} params.widthPercentage - Newly calculated required width (in %).\n * @returns {number | null} Updated y-axis width in pixels or null if current and new are the same.\n */\nexport function getUpdatedYAxisWidth({\n currentPercentage = 0,\n minWidth = 0,\n maxWidth = 100,\n widthPercentage,\n}: {\n currentPercentage?: number;\n minWidth?: number;\n maxWidth?: number;\n widthPercentage: number;\n}): number | null {\n const curr = +currentPercentage;\n const min = +minWidth;\n const max = +maxWidth;\n const width = +widthPercentage;\n\n if (curr === width) {\n return null;\n }\n const maxValue = max - min;\n const absolute = (maxValue * width) / 100;\n return absolute + min;\n}\n"],"names":["noop","echo","value","analyzeValues","values","min","max","hasPositive","hasNegative","allPositive","allNegative","axisMin","axisMax","absMax","formatLabel","label","formatter","formatLabels","labels","generateTicks","numOfTicks","granularity","start","stop","offset","step","power","magnitude","normalizedStep","factor","increment","decimalIndex","decimals","_","index","getSizeInPercentages","val","getUpdatedYAxisWidth","currentPercentage","minWidth","maxWidth","widthPercentage","curr","width"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rapidograph",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "description": "A micro-library for efficient, customizable HTML chart visualization.",
5
5
  "keywords": [
6
6
  "visualization",
@@ -31,8 +31,8 @@
31
31
  "default": "./dist/index.js"
32
32
  },
33
33
  "./*": {
34
- "types": "./dist/components/*.d.ts",
35
- "default": "./dist/components/*.js"
34
+ "types": "./dist/components/*/index.d.ts",
35
+ "default": "./dist/components/*/index.js"
36
36
  }
37
37
  },
38
38
  "sideEffects": false,