@sentropic/design-system-vue 0.36.40 → 0.36.42

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.
@@ -0,0 +1,94 @@
1
+ export type ColorScaleBarOrientation = "horizontal" | "vertical";
2
+ export type ColorScaleBarProps = {
3
+ colors: string[];
4
+ orientation?: ColorScaleBarOrientation;
5
+ length?: number;
6
+ thickness?: number;
7
+ min?: string;
8
+ max?: string;
9
+ label?: string;
10
+ class?: string;
11
+ };
12
+ /**
13
+ * ColorScaleBar — échelle de couleur continue (gradient) à partir de stops
14
+ * arbitraires. Seul le gradient est inline ; le reste du style est token-only.
15
+ */
16
+ export declare const ColorScaleBar: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
17
+ colors: {
18
+ type: () => string[];
19
+ default: () => never[];
20
+ };
21
+ orientation: {
22
+ type: () => ColorScaleBarOrientation;
23
+ default: string;
24
+ };
25
+ length: {
26
+ type: NumberConstructor;
27
+ default: undefined;
28
+ };
29
+ thickness: {
30
+ type: NumberConstructor;
31
+ default: undefined;
32
+ };
33
+ min: {
34
+ type: StringConstructor;
35
+ default: undefined;
36
+ };
37
+ max: {
38
+ type: StringConstructor;
39
+ default: undefined;
40
+ };
41
+ label: {
42
+ type: StringConstructor;
43
+ default: undefined;
44
+ };
45
+ class: {
46
+ type: StringConstructor;
47
+ default: undefined;
48
+ };
49
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
50
+ [key: string]: any;
51
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
52
+ colors: {
53
+ type: () => string[];
54
+ default: () => never[];
55
+ };
56
+ orientation: {
57
+ type: () => ColorScaleBarOrientation;
58
+ default: string;
59
+ };
60
+ length: {
61
+ type: NumberConstructor;
62
+ default: undefined;
63
+ };
64
+ thickness: {
65
+ type: NumberConstructor;
66
+ default: undefined;
67
+ };
68
+ min: {
69
+ type: StringConstructor;
70
+ default: undefined;
71
+ };
72
+ max: {
73
+ type: StringConstructor;
74
+ default: undefined;
75
+ };
76
+ label: {
77
+ type: StringConstructor;
78
+ default: undefined;
79
+ };
80
+ class: {
81
+ type: StringConstructor;
82
+ default: undefined;
83
+ };
84
+ }>> & Readonly<{}>, {
85
+ class: string;
86
+ length: number;
87
+ label: string;
88
+ max: string;
89
+ min: string;
90
+ orientation: ColorScaleBarOrientation;
91
+ colors: string[];
92
+ thickness: number;
93
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
94
+ //# sourceMappingURL=ColorScaleBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorScaleBar.d.ts","sourceRoot":"","sources":["../src/ColorScaleBar.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,wBAAwB,GAAG,YAAY,GAAG,UAAU,CAAC;AAEjE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,wBAAwB,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa;;cAGG,MAAM,MAAM,EAAE;;;;cACR,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cADpC,MAAM,MAAM,EAAE;;;;cACR,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4EAuE/D,CAAC"}
@@ -0,0 +1,68 @@
1
+ import { defineComponent, h } from "vue";
2
+ import { classNames } from "./classNames.js";
3
+ /**
4
+ * ColorScaleBar — échelle de couleur continue (gradient) à partir de stops
5
+ * arbitraires. Seul le gradient est inline ; le reste du style est token-only.
6
+ */
7
+ export const ColorScaleBar = defineComponent({
8
+ name: "ColorScaleBar",
9
+ props: {
10
+ colors: { type: Array, default: () => [] },
11
+ orientation: { type: String, default: "horizontal" },
12
+ length: { type: Number, default: undefined },
13
+ thickness: { type: Number, default: undefined },
14
+ min: { type: String, default: undefined },
15
+ max: { type: String, default: undefined },
16
+ label: { type: String, default: undefined },
17
+ class: { type: String, default: undefined },
18
+ },
19
+ setup(props, { attrs }) {
20
+ return () => {
21
+ const orientation = props.orientation ?? "horizontal";
22
+ const isVertical = orientation === "vertical";
23
+ const colors = props.colors ?? [];
24
+ const stops = colors.length >= 2 ? colors : colors.length === 1 ? [colors[0], colors[0]] : [];
25
+ const direction = isVertical ? "to top" : "to right";
26
+ const gradient = stops.length ? `linear-gradient(${direction}, ${stops.join(", ")})` : "none";
27
+ const safeLength = props.length !== undefined ? Math.max(Number(props.length) || 0, 1) : undefined;
28
+ const safeThickness = props.thickness !== undefined ? Math.max(Number(props.thickness) || 0, 1) : undefined;
29
+ const barStyle = { background: gradient };
30
+ if (isVertical) {
31
+ if (safeLength !== undefined)
32
+ barStyle.height = `${safeLength}px`;
33
+ if (safeThickness !== undefined)
34
+ barStyle.width = `${safeThickness}px`;
35
+ }
36
+ else {
37
+ if (safeLength !== undefined)
38
+ barStyle.width = `${safeLength}px`;
39
+ if (safeThickness !== undefined)
40
+ barStyle.height = `${safeThickness}px`;
41
+ }
42
+ const hasEndLabels = props.min !== undefined || props.max !== undefined;
43
+ const trackChildren = [];
44
+ if (hasEndLabels) {
45
+ trackChildren.push(h("span", { class: "st-colorScaleBar__end st-colorScaleBar__end--max" }, props.max ?? ""));
46
+ }
47
+ trackChildren.push(h("div", {
48
+ class: "st-colorScaleBar__bar",
49
+ style: barStyle,
50
+ role: "img",
51
+ "aria-label": props.label,
52
+ }));
53
+ if (hasEndLabels) {
54
+ trackChildren.push(h("span", { class: "st-colorScaleBar__end st-colorScaleBar__end--min" }, props.min ?? ""));
55
+ }
56
+ const children = [];
57
+ if (props.label) {
58
+ children.push(h("span", { class: "st-colorScaleBar__label" }, props.label));
59
+ }
60
+ children.push(h("div", { class: "st-colorScaleBar__track" }, trackChildren));
61
+ return h("div", {
62
+ ...attrs,
63
+ class: classNames("st-colorScaleBar", `st-colorScaleBar--${orientation}`, props.class),
64
+ }, children);
65
+ };
66
+ },
67
+ });
68
+ //# sourceMappingURL=ColorScaleBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorScaleBar.js","sourceRoot":"","sources":["../src/ColorScaleBar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ export type ColorSwatchShape = "square" | "circle" | "pill";
2
+ export type ColorSwatchProps = {
3
+ color: string;
4
+ size?: number;
5
+ shape?: ColorSwatchShape;
6
+ label?: string;
7
+ class?: string;
8
+ };
9
+ /**
10
+ * ColorSwatch — affiche UNE couleur arbitraire sous forme de pastille. Seule la
11
+ * couleur passée en prop est inline ; le reste du style est token-only.
12
+ */
13
+ export declare const ColorSwatch: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
14
+ color: {
15
+ type: StringConstructor;
16
+ required: true;
17
+ };
18
+ size: {
19
+ type: NumberConstructor;
20
+ default: number;
21
+ };
22
+ shape: {
23
+ type: () => ColorSwatchShape;
24
+ default: string;
25
+ };
26
+ label: {
27
+ type: StringConstructor;
28
+ default: undefined;
29
+ };
30
+ class: {
31
+ type: StringConstructor;
32
+ default: undefined;
33
+ };
34
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
35
+ [key: string]: any;
36
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
37
+ color: {
38
+ type: StringConstructor;
39
+ required: true;
40
+ };
41
+ size: {
42
+ type: NumberConstructor;
43
+ default: number;
44
+ };
45
+ shape: {
46
+ type: () => ColorSwatchShape;
47
+ default: string;
48
+ };
49
+ label: {
50
+ type: StringConstructor;
51
+ default: undefined;
52
+ };
53
+ class: {
54
+ type: StringConstructor;
55
+ default: undefined;
56
+ };
57
+ }>> & Readonly<{}>, {
58
+ size: number;
59
+ class: string;
60
+ label: string;
61
+ shape: ColorSwatchShape;
62
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
63
+ //# sourceMappingURL=ColorSwatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorSwatch.d.ts","sourceRoot":"","sources":["../src/ColorSwatch.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;cAKK,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;cAAtB,MAAM,gBAAgB;;;;;;;;;;;;;;;;4EA8BjD,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { defineComponent, h } from "vue";
2
+ import { classNames } from "./classNames.js";
3
+ /**
4
+ * ColorSwatch — affiche UNE couleur arbitraire sous forme de pastille. Seule la
5
+ * couleur passée en prop est inline ; le reste du style est token-only.
6
+ */
7
+ export const ColorSwatch = defineComponent({
8
+ name: "ColorSwatch",
9
+ props: {
10
+ color: { type: String, required: true },
11
+ size: { type: Number, default: 24 },
12
+ shape: { type: String, default: "square" },
13
+ label: { type: String, default: undefined },
14
+ class: { type: String, default: undefined },
15
+ },
16
+ setup(props, { attrs }) {
17
+ return () => {
18
+ const shape = props.shape ?? "square";
19
+ const safeSize = Math.max(Number(props.size ?? 24) || 0, 1);
20
+ const accessibleLabel = props.label ?? props.color;
21
+ const children = [
22
+ h("span", {
23
+ class: "st-colorSwatch__chip",
24
+ style: { background: props.color, width: `${safeSize}px`, height: `${safeSize}px` },
25
+ role: "img",
26
+ "aria-label": accessibleLabel,
27
+ }),
28
+ ];
29
+ if (props.label) {
30
+ children.push(h("span", { class: "st-colorSwatch__label" }, props.label));
31
+ }
32
+ return h("span", { ...attrs, class: classNames("st-colorSwatch", `st-colorSwatch--${shape}`, props.class) }, children);
33
+ };
34
+ },
35
+ });
36
+ //# sourceMappingURL=ColorSwatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorSwatch.js","sourceRoot":"","sources":["../src/ColorSwatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAY7C;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC;IACzC,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE;QACL,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;QACvC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QACnC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAgC,EAAE,OAAO,EAAE,QAAQ,EAAE;QACpE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;QAC3C,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;KAC5C;IACD,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;QACpB,OAAO,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5D,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;YAEnD,MAAM,QAAQ,GAAoC;gBAChD,CAAC,CAAC,MAAM,EAAE;oBACR,KAAK,EAAE,sBAAsB;oBAC7B,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,QAAQ,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,IAAI,EAAE;oBACnF,IAAI,EAAE,KAAK;oBACX,YAAY,EAAE,eAAe;iBAC9B,CAAC;aACH,CAAC;YAEF,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5E,CAAC;YAED,OAAO,CAAC,CACN,MAAM,EACN,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,gBAAgB,EAAE,mBAAmB,KAAK,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAC1F,QAAQ,CACT,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,96 @@
1
+ export type PointAndFigureChartMark = "x" | "o";
2
+ export type PointAndFigureChartDatum = {
3
+ /** Position temporelle (timestamp ou index) — ignorée pour l'empilement. */
4
+ date: number;
5
+ /** Prix de clôture : pilote la formation des colonnes. */
6
+ close: number;
7
+ };
8
+ export type PointAndFigureChartProps = {
9
+ data: PointAndFigureChartDatum[];
10
+ boxSize?: number;
11
+ reversal?: number;
12
+ label?: string;
13
+ width?: number;
14
+ height?: number;
15
+ size?: number;
16
+ class?: string;
17
+ };
18
+ export declare const PointAndFigureChart: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
19
+ data: {
20
+ type: () => PointAndFigureChartDatum[];
21
+ default: () => never[];
22
+ };
23
+ boxSize: {
24
+ type: NumberConstructor;
25
+ default: undefined;
26
+ };
27
+ reversal: {
28
+ type: NumberConstructor;
29
+ default: number;
30
+ };
31
+ label: {
32
+ type: StringConstructor;
33
+ default: undefined;
34
+ };
35
+ width: {
36
+ type: NumberConstructor;
37
+ default: number;
38
+ };
39
+ height: {
40
+ type: NumberConstructor;
41
+ default: number;
42
+ };
43
+ size: {
44
+ type: NumberConstructor;
45
+ default: undefined;
46
+ };
47
+ class: {
48
+ type: StringConstructor;
49
+ default: undefined;
50
+ };
51
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
52
+ [key: string]: any;
53
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
54
+ data: {
55
+ type: () => PointAndFigureChartDatum[];
56
+ default: () => never[];
57
+ };
58
+ boxSize: {
59
+ type: NumberConstructor;
60
+ default: undefined;
61
+ };
62
+ reversal: {
63
+ type: NumberConstructor;
64
+ default: number;
65
+ };
66
+ label: {
67
+ type: StringConstructor;
68
+ default: undefined;
69
+ };
70
+ width: {
71
+ type: NumberConstructor;
72
+ default: number;
73
+ };
74
+ height: {
75
+ type: NumberConstructor;
76
+ default: number;
77
+ };
78
+ size: {
79
+ type: NumberConstructor;
80
+ default: undefined;
81
+ };
82
+ class: {
83
+ type: StringConstructor;
84
+ default: undefined;
85
+ };
86
+ }>> & Readonly<{}>, {
87
+ size: number;
88
+ class: string;
89
+ data: PointAndFigureChartDatum[];
90
+ label: string;
91
+ height: number;
92
+ width: number;
93
+ boxSize: number;
94
+ reversal: number;
95
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
96
+ //# sourceMappingURL=PointAndFigureChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PointAndFigureChart.d.ts","sourceRoot":"","sources":["../src/PointAndFigureChart.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,uBAAuB,GAAG,GAAG,GAAG,GAAG,CAAC;AAEhD,MAAM,MAAM,wBAAwB,GAAG;IACrC,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,wBAAwB,EAAE,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAIF,eAAO,MAAM,mBAAmB;;cAGL,MAAM,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAhC,MAAM,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4EA0SzD,CAAC"}
@@ -0,0 +1,239 @@
1
+ import { defineComponent, h, ref } from "vue";
2
+ import { classNames } from "./classNames.js";
3
+ import { chartDataList, formatTick, niceTicks, scaleLinear } from "./chartScale.js";
4
+ const MARGIN = { top: 16, right: 18, bottom: 36, left: 52 };
5
+ export const PointAndFigureChart = defineComponent({
6
+ name: "PointAndFigureChart",
7
+ props: {
8
+ data: { type: Array, default: () => [] },
9
+ boxSize: { type: Number, default: undefined },
10
+ reversal: { type: Number, default: 3 },
11
+ label: { type: String, default: undefined },
12
+ width: { type: Number, default: 640 },
13
+ height: { type: Number, default: 320 },
14
+ size: { type: Number, default: undefined },
15
+ class: { type: String, default: undefined },
16
+ },
17
+ setup(props, { attrs }) {
18
+ const hoveredKey = ref(null);
19
+ function handlePointerMove(event) {
20
+ const target = event.target;
21
+ if (!(target instanceof Element)) {
22
+ hoveredKey.value = null;
23
+ return;
24
+ }
25
+ hoveredKey.value = target.getAttribute("data-chart-key");
26
+ }
27
+ return () => {
28
+ const data = props.data ?? [];
29
+ const label = props.label;
30
+ const width = props.width ?? 640;
31
+ const height = props.height ?? 320;
32
+ const boxSize = props.boxSize;
33
+ const reversal = props.reversal ?? 3;
34
+ // Points valides : date et close finis.
35
+ const validData = data.filter((d) => d && Number.isFinite(d.date) && Number.isFinite(d.close));
36
+ const closes = validData.map((d) => d.close);
37
+ const baseMin = closes.length ? Math.min(...closes) : 0;
38
+ const effectiveBox = Number.isFinite(boxSize) && boxSize > 0
39
+ ? boxSize
40
+ : closes.length
41
+ ? Math.max(...closes) - Math.min(...closes) > 0
42
+ ? (Math.max(...closes) - Math.min(...closes)) / 20
43
+ : 1
44
+ : 1;
45
+ const reversalBoxes = Math.max(1, Math.floor(Number.isFinite(reversal) ? reversal : 3));
46
+ // Colonnes P&F : suite de X (hausse) ou de O (baisse), cases [low..high].
47
+ const rawCols = [];
48
+ if (validData.length > 0 && effectiveBox > 0) {
49
+ const boxIndex = (price) => Math.floor((price - baseMin) / effectiveBox + 1e-9);
50
+ let mark = null;
51
+ let low = 0;
52
+ let high = 0;
53
+ for (let i = 0; i < closes.length; i++) {
54
+ const idx = boxIndex(closes[i]);
55
+ if (mark === null) {
56
+ mark = "x";
57
+ low = idx;
58
+ high = idx;
59
+ continue;
60
+ }
61
+ if (mark === "x") {
62
+ if (idx > high) {
63
+ high = idx;
64
+ }
65
+ else if (idx <= high - reversalBoxes) {
66
+ rawCols.push({ mark, low, high });
67
+ mark = "o";
68
+ high = high - 1;
69
+ low = idx;
70
+ }
71
+ }
72
+ else {
73
+ if (idx < low) {
74
+ low = idx;
75
+ }
76
+ else if (idx >= low + reversalBoxes) {
77
+ rawCols.push({ mark, low, high });
78
+ mark = "x";
79
+ low = low + 1;
80
+ high = idx;
81
+ }
82
+ }
83
+ }
84
+ if (mark !== null && high >= low)
85
+ rawCols.push({ mark, low, high });
86
+ }
87
+ const pnfColumns = rawCols.map((c) => ({
88
+ mark: c.mark,
89
+ low: c.low,
90
+ high: c.high,
91
+ priceLow: baseMin + c.low * effectiveBox,
92
+ priceHigh: baseMin + (c.high + 1) * effectiveBox,
93
+ }));
94
+ let priceMin;
95
+ let priceMax;
96
+ if (pnfColumns.length === 0) {
97
+ priceMin = closes.length ? Math.min(...closes) : 0;
98
+ priceMax = closes.length ? Math.max(...closes) : 0;
99
+ }
100
+ else {
101
+ priceMin = Infinity;
102
+ priceMax = -Infinity;
103
+ for (const c of pnfColumns) {
104
+ if (c.priceLow < priceMin)
105
+ priceMin = c.priceLow;
106
+ if (c.priceHigh > priceMax)
107
+ priceMax = c.priceHigh;
108
+ }
109
+ }
110
+ const yTicks = niceTicks(priceMin, priceMax);
111
+ const yMin = yTicks[0];
112
+ const yMax = yTicks[yTicks.length - 1];
113
+ const plotW = Math.max(width - MARGIN.left - MARGIN.right, 1);
114
+ const plotH = Math.max(height - MARGIN.top - MARGIN.bottom, 1);
115
+ const colW = pnfColumns.length > 0 ? plotW / pnfColumns.length : plotW;
116
+ const glyph = Math.min(colW, scaleLinear(effectiveBox, 0, Math.max(yMax - yMin, effectiveBox), 0, plotH)) * 0.7;
117
+ const marks = [];
118
+ pnfColumns.forEach((c, ci) => {
119
+ const cx = MARGIN.left + colW * ci + colW / 2;
120
+ for (let b = c.low; b <= c.high; b++) {
121
+ const priceMid = baseMin + (b + 0.5) * effectiveBox;
122
+ const cy = MARGIN.top + scaleLinear(priceMid, yMin, yMax, plotH, 0);
123
+ marks.push({
124
+ key: `${ci}-${b}`,
125
+ mark: c.mark,
126
+ cx,
127
+ cy,
128
+ r: Math.max(glyph / 2, 2),
129
+ priceLow: c.priceLow,
130
+ priceHigh: c.priceHigh,
131
+ });
132
+ }
133
+ });
134
+ const dataValueItems = pnfColumns.map((c) => `${c.mark === "x" ? "X" : "O"} ${formatTick(c.priceLow)} → ${formatTick(c.priceHigh)}`);
135
+ const hoveredMark = hoveredKey.value === null ? null : marks.find((m) => m.key === hoveredKey.value) ?? null;
136
+ const svgChildren = [];
137
+ for (const t of yTicks) {
138
+ const y = MARGIN.top + scaleLinear(t, yMin, yMax, plotH, 0);
139
+ svgChildren.push(h("line", {
140
+ key: `gy${t}`,
141
+ class: "st-pointAndFigureChart__grid",
142
+ x1: MARGIN.left,
143
+ x2: width - MARGIN.right,
144
+ y1: y,
145
+ y2: y,
146
+ }), h("text", {
147
+ key: `ty${t}`,
148
+ class: "st-pointAndFigureChart__tick",
149
+ x: MARGIN.left - 6,
150
+ y,
151
+ "text-anchor": "end",
152
+ "dominant-baseline": "middle",
153
+ }, formatTick(t)));
154
+ }
155
+ svgChildren.push(h("line", {
156
+ class: "st-pointAndFigureChart__axis",
157
+ x1: MARGIN.left,
158
+ x2: MARGIN.left,
159
+ y1: MARGIN.top,
160
+ y2: height - MARGIN.bottom,
161
+ }), h("line", {
162
+ class: "st-pointAndFigureChart__axis",
163
+ x1: MARGIN.left,
164
+ x2: width - MARGIN.right,
165
+ y1: height - MARGIN.bottom,
166
+ y2: height - MARGIN.bottom,
167
+ }));
168
+ marks.forEach((m) => {
169
+ if (m.mark === "x") {
170
+ svgChildren.push(h("g", {
171
+ key: m.key,
172
+ class: classNames("st-pointAndFigureChart__mark", "st-pointAndFigureChart__mark--x", hoveredKey.value !== null && hoveredKey.value !== m.key ? "st-pointAndFigureChart__mark--dim" : undefined),
173
+ "data-chart-key": m.key,
174
+ }, [
175
+ h("line", {
176
+ class: "st-pointAndFigureChart__glyph",
177
+ x1: m.cx - m.r,
178
+ y1: m.cy - m.r,
179
+ x2: m.cx + m.r,
180
+ y2: m.cy + m.r,
181
+ "data-chart-key": m.key,
182
+ }),
183
+ h("line", {
184
+ class: "st-pointAndFigureChart__glyph",
185
+ x1: m.cx - m.r,
186
+ y1: m.cy + m.r,
187
+ x2: m.cx + m.r,
188
+ y2: m.cy - m.r,
189
+ "data-chart-key": m.key,
190
+ }),
191
+ ]));
192
+ }
193
+ else {
194
+ svgChildren.push(h("circle", {
195
+ key: m.key,
196
+ class: classNames("st-pointAndFigureChart__mark", "st-pointAndFigureChart__mark--o", "st-pointAndFigureChart__glyph", hoveredKey.value !== null && hoveredKey.value !== m.key ? "st-pointAndFigureChart__mark--dim" : undefined),
197
+ cx: m.cx,
198
+ cy: m.cy,
199
+ r: m.r,
200
+ "data-chart-key": m.key,
201
+ }));
202
+ }
203
+ });
204
+ const children = [
205
+ h("div", {
206
+ class: "st-pointAndFigureChart__visual",
207
+ role: "img",
208
+ "aria-label": label,
209
+ onPointermove: handlePointerMove,
210
+ onPointerleave: () => (hoveredKey.value = null),
211
+ }, [
212
+ h("svg", {
213
+ viewBox: `0 0 ${width} ${height}`,
214
+ preserveAspectRatio: "xMidYMid meet",
215
+ width: "100%",
216
+ height: "100%",
217
+ focusable: "false",
218
+ "aria-hidden": "true",
219
+ }, svgChildren),
220
+ ]),
221
+ ];
222
+ const list = chartDataList(label ?? "point and figure", dataValueItems);
223
+ if (list)
224
+ children.push(list);
225
+ if (hoveredMark) {
226
+ children.push(h("div", {
227
+ class: "st-pointAndFigureChart__tooltip",
228
+ role: "presentation",
229
+ style: { left: `${(hoveredMark.cx / width) * 100}%`, top: `${(hoveredMark.cy / height) * 100}%` },
230
+ }, [
231
+ h("span", { class: "st-pointAndFigureChart__tooltipLabel" }, hoveredMark.mark === "x" ? "X" : "O"),
232
+ h("span", { class: "st-pointAndFigureChart__tooltipValue" }, `${formatTick(hoveredMark.priceLow)} → ${formatTick(hoveredMark.priceHigh)}`),
233
+ ]));
234
+ }
235
+ return h("div", { ...attrs, class: classNames("st-pointAndFigureChart", props.class) }, children);
236
+ };
237
+ },
238
+ });
239
+ //# sourceMappingURL=PointAndFigureChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PointAndFigureChart.js","sourceRoot":"","sources":["../src/PointAndFigureChart.ts"],"names":[],"mappings":"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"}