@sybilion/uilib 1.3.23 → 1.3.26
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.
- package/dist/esm/components/ui/TextWithDeferTooltip/TextWithDeferTooltip.js +1 -25
- package/dist/esm/components/ui/Tooltip/Tooltip.js +92 -7
- package/dist/esm/components/ui/Tooltip/Tooltip.styl.js +2 -2
- package/dist/esm/components/widgets/DriversComparisonChart/DriversComparisonChart.js +1 -2
- package/dist/esm/components/widgets/PerformanceChart/HorizonsSelector/HorizonsSelector.js +34 -0
- package/dist/esm/components/widgets/PerformanceChart/HorizonsSelector/HorizonsSelector.styl.js +7 -0
- package/dist/esm/components/widgets/PerformanceChart/PerformanceChart.constants.js +17 -0
- package/dist/esm/components/widgets/PerformanceChart/PerformanceChart.js +807 -0
- package/dist/esm/components/widgets/PerformanceChart/PerformanceChart.styl.js +7 -0
- package/dist/esm/components/widgets/PerformanceChart/PerformanceTable.js +130 -0
- package/dist/esm/components/widgets/PerformanceChart/PerformanceUnderChartLegend/PerformanceUnderChartLegend.js +20 -0
- package/dist/esm/components/widgets/PerformanceChart/PerformanceUnderChartLegend/PerformanceUnderChartLegend.styl.js +7 -0
- package/dist/esm/components/widgets/PerformanceChart/performanceChart.helpers.js +591 -0
- package/dist/esm/components/widgets/PerformanceChart/performanceChartUserSeries.js +109 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/types/src/components/ui/Tooltip/Tooltip.d.ts +3 -3
- package/dist/esm/types/src/components/ui/Tooltip/Tooltip.types.d.ts +1 -0
- package/dist/esm/types/src/components/widgets/PerformanceChart/HorizonsSelector/HorizonsSelector.d.ts +7 -0
- package/dist/esm/types/src/components/widgets/PerformanceChart/PerformanceChart.constants.d.ts +3 -0
- package/dist/esm/types/src/components/widgets/PerformanceChart/PerformanceChart.d.ts +54 -0
- package/dist/esm/types/src/components/widgets/PerformanceChart/PerformanceTable.d.ts +31 -0
- package/dist/esm/types/src/components/widgets/PerformanceChart/PerformanceUnderChartLegend/PerformanceUnderChartLegend.d.ts +20 -0
- package/dist/esm/types/src/components/widgets/PerformanceChart/index.d.ts +4 -0
- package/dist/esm/types/src/components/widgets/PerformanceChart/performanceChart.helpers.d.ts +212 -0
- package/dist/esm/types/src/components/widgets/PerformanceChart/performanceChartUserSeries.d.ts +20 -0
- package/dist/esm/types/src/docs/pages/PerformanceChartPage.d.ts +1 -0
- package/dist/esm/types/src/index.d.ts +1 -0
- package/package.json +1 -1
- package/src/components/ui/TextWithDeferTooltip/TextWithDeferTooltip.tsx +5 -37
- package/src/components/ui/Tooltip/Tooltip.styl +12 -0
- package/src/components/ui/Tooltip/Tooltip.styl.d.ts +1 -0
- package/src/components/ui/Tooltip/Tooltip.tsx +156 -8
- package/src/components/ui/Tooltip/Tooltip.types.ts +1 -0
- package/src/components/widgets/PerformanceChart/HorizonsSelector/HorizonsSelector.styl +25 -0
- package/src/components/widgets/PerformanceChart/HorizonsSelector/HorizonsSelector.styl.d.ts +11 -0
- package/src/components/widgets/PerformanceChart/HorizonsSelector/HorizonsSelector.tsx +67 -0
- package/src/components/widgets/PerformanceChart/PerformanceChart.constants.ts +17 -0
- package/src/components/widgets/PerformanceChart/PerformanceChart.styl +194 -0
- package/src/components/widgets/PerformanceChart/PerformanceChart.styl.d.ts +30 -0
- package/src/components/widgets/PerformanceChart/PerformanceChart.tsx +1251 -0
- package/src/components/widgets/PerformanceChart/PerformanceTable.tsx +381 -0
- package/src/components/widgets/PerformanceChart/PerformanceUnderChartLegend/PerformanceUnderChartLegend.styl +49 -0
- package/src/components/widgets/PerformanceChart/PerformanceUnderChartLegend/PerformanceUnderChartLegend.styl.d.ts +12 -0
- package/src/components/widgets/PerformanceChart/PerformanceUnderChartLegend/PerformanceUnderChartLegend.tsx +83 -0
- package/src/components/widgets/PerformanceChart/index.ts +28 -0
- package/src/components/widgets/PerformanceChart/performanceChart.helpers.ts +790 -0
- package/src/components/widgets/PerformanceChart/performanceChartUserSeries.ts +149 -0
- package/src/docs/pages/PerformanceChartPage.tsx +211 -0
- package/src/docs/pages/TextWithDeferTooltipPage.tsx +26 -10
- package/src/docs/pages/TooltipPage.tsx +30 -0
- package/src/docs/registry.ts +6 -0
- package/src/index.ts +1 -0
|
@@ -4,43 +4,19 @@ import { Tooltip, TooltipTrigger, TooltipContent } from '../Tooltip/Tooltip.js';
|
|
|
4
4
|
|
|
5
5
|
function TextWithDeferTooltip({ className, children, width, maxWidth, side = 'bottom', overTrigger = false, ...props }) {
|
|
6
6
|
const [withTooltip, setWithTooltip] = useState(false);
|
|
7
|
-
const [tooltipStyles, setTooltipStyles] = useState({});
|
|
8
7
|
const ref = useRef(null);
|
|
9
|
-
const cachedFontSizeRef = useRef(null);
|
|
10
8
|
const handleMouseEnter = () => {
|
|
11
9
|
if (!ref.current)
|
|
12
10
|
return;
|
|
13
11
|
const isOverflowingHorizontally = ref.current.scrollWidth - ref.current.clientWidth > 3;
|
|
14
12
|
const isOverflowingVertically = ref.current.scrollHeight - ref.current.clientHeight > 3;
|
|
15
13
|
if (isOverflowingHorizontally || isOverflowingVertically) {
|
|
16
|
-
const styles = {
|
|
17
|
-
fontSize: cachedFontSizeRef.current || undefined,
|
|
18
|
-
};
|
|
19
|
-
if (ref.current) {
|
|
20
|
-
const { width: rectWidth, left, top, } = ref.current.getBoundingClientRect();
|
|
21
|
-
styles.width = `${width ?? rectWidth}px`;
|
|
22
|
-
if (!cachedFontSizeRef.current) {
|
|
23
|
-
const { fontSize } = window.getComputedStyle(ref.current);
|
|
24
|
-
cachedFontSizeRef.current = fontSize;
|
|
25
|
-
styles.fontSize = fontSize;
|
|
26
|
-
}
|
|
27
|
-
if (overTrigger) {
|
|
28
|
-
styles.transform = `translate(${left}px, ${top}px) !important`;
|
|
29
|
-
// styles.translateX = `${left}px`;
|
|
30
|
-
// styles.translateY = `${top}px`;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
setTooltipStyles(styles);
|
|
34
14
|
setWithTooltip(true);
|
|
35
15
|
}
|
|
36
16
|
};
|
|
37
17
|
const textElement = (jsx("div", { ref: ref, className: className, onMouseEnter: handleMouseEnter, ...props, children: children }));
|
|
38
18
|
if (withTooltip) {
|
|
39
|
-
|
|
40
|
-
return (jsxs(Tooltip, { open: withTooltip, onOpenChange: setWithTooltip, children: [jsx(TooltipTrigger, { asChild: true, children: textElement }), jsx(TooltipContent, { side: tooltipSide, style: {
|
|
41
|
-
...(maxWidth !== undefined && { maxWidth: `${maxWidth}px` }),
|
|
42
|
-
...tooltipStyles,
|
|
43
|
-
}, children: children })] }));
|
|
19
|
+
return (jsxs(Tooltip, { open: withTooltip, onOpenChange: setWithTooltip, children: [jsx(TooltipTrigger, { asChild: true, children: textElement }), jsx(TooltipContent, { side: side, overTrigger: overTrigger, maxWidth: maxWidth, style: width !== undefined ? { width: `${width}px` } : undefined, children: children })] }));
|
|
44
20
|
}
|
|
45
21
|
return textElement;
|
|
46
22
|
}
|
|
@@ -1,22 +1,107 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import cn from 'classnames';
|
|
3
|
+
import { createContext, useRef, useMemo, useContext, useCallback, useLayoutEffect } from 'react';
|
|
3
4
|
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
4
5
|
import S from './Tooltip.styl.js';
|
|
5
6
|
|
|
7
|
+
const TooltipContext = createContext(null);
|
|
8
|
+
function composeRefs(...refs) {
|
|
9
|
+
return (node) => {
|
|
10
|
+
for (const ref of refs) {
|
|
11
|
+
if (typeof ref === 'function') {
|
|
12
|
+
ref(node);
|
|
13
|
+
}
|
|
14
|
+
else if (ref) {
|
|
15
|
+
ref.current = node;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function getPopperWrapper(contentEl) {
|
|
21
|
+
const wrapper = contentEl.parentElement;
|
|
22
|
+
if (!wrapper?.hasAttribute('data-radix-popper-content-wrapper'))
|
|
23
|
+
return null;
|
|
24
|
+
return wrapper;
|
|
25
|
+
}
|
|
26
|
+
const OVER_TRIGGER_OFFSET = { left: -10, top: -6 };
|
|
27
|
+
function applyOverTriggerStyles(contentEl, triggerEl) {
|
|
28
|
+
const wrapper = getPopperWrapper(contentEl);
|
|
29
|
+
if (!wrapper)
|
|
30
|
+
return;
|
|
31
|
+
const rect = triggerEl.getBoundingClientRect();
|
|
32
|
+
const computed = window.getComputedStyle(triggerEl);
|
|
33
|
+
wrapper.style.setProperty('position', 'fixed', 'important');
|
|
34
|
+
wrapper.style.setProperty('left', `${rect.left + OVER_TRIGGER_OFFSET.left}px`, 'important');
|
|
35
|
+
wrapper.style.setProperty('top', `${rect.top + OVER_TRIGGER_OFFSET.top}px`, 'important');
|
|
36
|
+
wrapper.style.setProperty('transform', 'none', 'important');
|
|
37
|
+
wrapper.style.setProperty('min-width', '0', 'important');
|
|
38
|
+
wrapper.style.setProperty('width', `${rect.width}px`, 'important');
|
|
39
|
+
contentEl.style.width = '100%';
|
|
40
|
+
contentEl.style.boxSizing = 'border-box';
|
|
41
|
+
contentEl.style.fontSize = computed.fontSize;
|
|
42
|
+
contentEl.style.lineHeight = computed.lineHeight;
|
|
43
|
+
}
|
|
44
|
+
function clearOverTriggerStyles(contentEl) {
|
|
45
|
+
if (!contentEl)
|
|
46
|
+
return;
|
|
47
|
+
const wrapper = getPopperWrapper(contentEl);
|
|
48
|
+
if (!wrapper)
|
|
49
|
+
return;
|
|
50
|
+
wrapper.style.removeProperty('position');
|
|
51
|
+
wrapper.style.removeProperty('left');
|
|
52
|
+
wrapper.style.removeProperty('top');
|
|
53
|
+
wrapper.style.removeProperty('transform');
|
|
54
|
+
wrapper.style.removeProperty('min-width');
|
|
55
|
+
wrapper.style.removeProperty('width');
|
|
56
|
+
contentEl.style.removeProperty('width');
|
|
57
|
+
contentEl.style.removeProperty('box-sizing');
|
|
58
|
+
contentEl.style.removeProperty('font-size');
|
|
59
|
+
contentEl.style.removeProperty('line-height');
|
|
60
|
+
}
|
|
6
61
|
function TooltipProvider({ delayDuration = 0, ...props }) {
|
|
7
62
|
return (jsx(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delayDuration: delayDuration, ...props }));
|
|
8
63
|
}
|
|
9
|
-
function Tooltip(props) {
|
|
10
|
-
|
|
64
|
+
function Tooltip({ children, ...props }) {
|
|
65
|
+
const triggerRef = useRef(null);
|
|
66
|
+
const contextValue = useMemo(() => ({ triggerRef }), []);
|
|
67
|
+
return (jsx(TooltipProvider, { children: jsx(TooltipContext.Provider, { value: contextValue, children: jsx(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props, children: children }) }) }));
|
|
11
68
|
}
|
|
12
|
-
function TooltipTrigger({ ...props }) {
|
|
13
|
-
|
|
69
|
+
function TooltipTrigger({ ref, ...props }) {
|
|
70
|
+
const context = useContext(TooltipContext);
|
|
71
|
+
return (jsx(TooltipPrimitive.Trigger, { ref: context ? composeRefs(context.triggerRef, ref) : ref, "data-slot": "tooltip-trigger", ...props }));
|
|
14
72
|
}
|
|
15
|
-
function TooltipContent({ className, sideOffset = 0, children, maxWidth, ...props }) {
|
|
16
|
-
const
|
|
73
|
+
function TooltipContent({ className, sideOffset = 0, children, maxWidth, overTrigger = false, align, side, avoidCollisions, style: styleProp, ...props }) {
|
|
74
|
+
const context = useContext(TooltipContext);
|
|
75
|
+
const contentRef = useRef(null);
|
|
76
|
+
const updateOverTriggerPosition = useCallback(() => {
|
|
77
|
+
const triggerEl = context?.triggerRef.current;
|
|
78
|
+
const contentEl = contentRef.current;
|
|
79
|
+
if (!overTrigger || !triggerEl || !contentEl)
|
|
80
|
+
return;
|
|
81
|
+
applyOverTriggerStyles(contentEl, triggerEl);
|
|
82
|
+
}, [context, overTrigger]);
|
|
83
|
+
useLayoutEffect(() => {
|
|
84
|
+
if (!overTrigger)
|
|
85
|
+
return;
|
|
86
|
+
let frameId = 0;
|
|
87
|
+
const tick = () => {
|
|
88
|
+
updateOverTriggerPosition();
|
|
89
|
+
frameId = requestAnimationFrame(tick);
|
|
90
|
+
};
|
|
91
|
+
tick();
|
|
92
|
+
window.addEventListener('scroll', updateOverTriggerPosition, true);
|
|
93
|
+
window.addEventListener('resize', updateOverTriggerPosition);
|
|
94
|
+
return () => {
|
|
95
|
+
cancelAnimationFrame(frameId);
|
|
96
|
+
window.removeEventListener('scroll', updateOverTriggerPosition, true);
|
|
97
|
+
window.removeEventListener('resize', updateOverTriggerPosition);
|
|
98
|
+
clearOverTriggerStyles(contentRef.current);
|
|
99
|
+
};
|
|
100
|
+
}, [overTrigger, updateOverTriggerPosition]);
|
|
101
|
+
const style = { ...styleProp };
|
|
17
102
|
if (maxWidth)
|
|
18
103
|
style.maxWidth = `${maxWidth}px`;
|
|
19
|
-
return (jsx(TooltipPrimitive.Portal, { children: jsxs(TooltipPrimitive.Content, { "data-slot": "tooltip-content", sideOffset: sideOffset, className: cn(S.tooltipContent, className), ...props, style: style, children: [children, jsx(TooltipPrimitive.Arrow, { className: S.tooltipArrow })] }) }));
|
|
104
|
+
return (jsx(TooltipPrimitive.Portal, { children: jsxs(TooltipPrimitive.Content, { ref: contentRef, "data-slot": "tooltip-content", side: overTrigger ? 'bottom' : side, align: overTrigger ? 'start' : align, sideOffset: overTrigger ? 0 : sideOffset, avoidCollisions: overTrigger ? false : avoidCollisions, className: cn(S.tooltipContent, overTrigger && S.tooltipContentOverTrigger, className), ...props, style: style, children: [children, !overTrigger && jsx(TooltipPrimitive.Arrow, { className: S.tooltipArrow })] }) }));
|
|
20
105
|
}
|
|
21
106
|
|
|
22
107
|
export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import styleInject from 'style-inject';
|
|
2
2
|
|
|
3
|
-
var css_248z = "@media (max-width:768px){:root{--page-x-padding:var(--p-6);--page-y-padding:var(--p-6)}}.Tooltip_tooltipContent__b3pS-{backdrop-filter:blur(10px);background-color:var(--popover);border:1px solid var(--border);border-radius:.375rem;box-shadow:0 10px 15px -3px rgba(0,0,0,.1);color:var(--popover-foreground);font-size:12px;padding:6px 12px;text-wrap:balance;transform-origin:var(--radix-tooltip-content-transform-origin);width:-moz-fit-content;width:fit-content;word-break:break-word;z-index:50}.Tooltip_tooltipContent__b3pS-[data-state=delayed-open],.Tooltip_tooltipContent__b3pS-[data-state=instant-open],.Tooltip_tooltipContent__b3pS-[data-state=open]{animation:Tooltip_fade-in__ZQqZv .15s ease-out,Tooltip_zoom-in__SbWQb .15s ease-out}.Tooltip_tooltipContent__b3pS-[data-state=closed]{animation:Tooltip_fade-out__UOBET .1s ease-in,Tooltip_zoom-out__fodOk .1s ease-in}.Tooltip_tooltipContent__b3pS-[data-state=delayed-open][data-side=bottom],.Tooltip_tooltipContent__b3pS-[data-state=instant-open][data-side=bottom],.Tooltip_tooltipContent__b3pS-[data-state=open][data-side=bottom]{animation:Tooltip_fade-in__ZQqZv .15s ease-out,Tooltip_zoom-in__SbWQb .15s ease-out,Tooltip_slide-in-from-top-2__8uuS- .15s ease-out}.Tooltip_tooltipContent__b3pS-[data-state=delayed-open][data-side=left],.Tooltip_tooltipContent__b3pS-[data-state=instant-open][data-side=left],.Tooltip_tooltipContent__b3pS-[data-state=open][data-side=left]{animation:Tooltip_fade-in__ZQqZv .15s ease-out,Tooltip_zoom-in__SbWQb .15s ease-out,Tooltip_slide-in-from-right-2__Uu79F .15s ease-out}.Tooltip_tooltipContent__b3pS-[data-state=delayed-open][data-side=right],.Tooltip_tooltipContent__b3pS-[data-state=instant-open][data-side=right],.Tooltip_tooltipContent__b3pS-[data-state=open][data-side=right]{animation:Tooltip_fade-in__ZQqZv .15s ease-out,Tooltip_zoom-in__SbWQb .15s ease-out,Tooltip_slide-in-from-left-2__23kHm .15s ease-out}.Tooltip_tooltipContent__b3pS-[data-state=delayed-open][data-side=top],.Tooltip_tooltipContent__b3pS-[data-state=instant-open][data-side=top],.Tooltip_tooltipContent__b3pS-[data-state=open][data-side=top]{animation:Tooltip_fade-in__ZQqZv .15s ease-out,Tooltip_zoom-in__SbWQb .15s ease-out,Tooltip_slide-in-from-bottom-2__O-Aa8 .15s ease-out}.Tooltip_tooltipContent__b3pS-[data-state=closed][data-side=bottom],.Tooltip_tooltipContent__b3pS-[data-state=closed][data-side=left],.Tooltip_tooltipContent__b3pS-[data-state=closed][data-side=right],.Tooltip_tooltipContent__b3pS-[data-state=closed][data-side=top]{animation:Tooltip_fade-out__UOBET .1s ease-in,Tooltip_zoom-out__fodOk .1s ease-in}.Tooltip_tooltipArrow__87DVL{background-color:var(--popover);border-bottom:1px solid var(--border);border-left-width:1px;border-left:0 solid var(--border);border-radius:2px;border-right:1px solid var(--border);border-top-width:1px;border-top:0 solid var(--border);fill:var(--popover);height:10px;transform:translateY(calc(-50% + .5px)) rotate(45deg);width:10px;z-index:50}@keyframes Tooltip_fade-in__ZQqZv{0%{opacity:0}to{opacity:1}}@keyframes Tooltip_fade-out__UOBET{0%{opacity:1}to{opacity:0}}@keyframes Tooltip_zoom-in__SbWQb{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes Tooltip_zoom-out__fodOk{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}@keyframes Tooltip_slide-in-from-top-2__8uuS-{0%{opacity:0;transform:translateY(-.5rem)}to{opacity:1;transform:translateY(0)}}@keyframes Tooltip_slide-in-from-right-2__Uu79F{0%{opacity:0;transform:translateX(.5rem)}to{opacity:1;transform:translateX(0)}}@keyframes Tooltip_slide-in-from-left-2__23kHm{0%{opacity:0;transform:translateX(-.5rem)}to{opacity:1;transform:translateX(0)}}@keyframes Tooltip_slide-in-from-bottom-2__O-Aa8{0%{opacity:0;transform:translateY(.5rem)}to{opacity:1;transform:translateY(0)}}";
|
|
4
|
-
var S = {"tooltipContent":"Tooltip_tooltipContent__b3pS-","fade-in":"Tooltip_fade-in__ZQqZv","zoom-in":"Tooltip_zoom-in__SbWQb","fade-out":"Tooltip_fade-out__UOBET","zoom-out":"Tooltip_zoom-out__fodOk","slide-in-from-top-2":"Tooltip_slide-in-from-top-2__8uuS-","slide-in-from-right-2":"Tooltip_slide-in-from-right-2__Uu79F","slide-in-from-left-2":"Tooltip_slide-in-from-left-2__23kHm","slide-in-from-bottom-2":"Tooltip_slide-in-from-bottom-2__O-Aa8","tooltipArrow":"Tooltip_tooltipArrow__87DVL"};
|
|
3
|
+
var css_248z = "@media (max-width:768px){:root{--page-x-padding:var(--p-6);--page-y-padding:var(--p-6)}}.Tooltip_tooltipContent__b3pS-{backdrop-filter:blur(10px);background-color:var(--popover);border:1px solid var(--border);border-radius:.375rem;box-shadow:0 10px 15px -3px rgba(0,0,0,.1);color:var(--popover-foreground);font-size:12px;padding:6px 12px;text-wrap:balance;transform-origin:var(--radix-tooltip-content-transform-origin);width:-moz-fit-content;width:fit-content;word-break:break-word;z-index:50}.Tooltip_tooltipContent__b3pS-[data-state=delayed-open],.Tooltip_tooltipContent__b3pS-[data-state=instant-open],.Tooltip_tooltipContent__b3pS-[data-state=open]{animation:Tooltip_fade-in__ZQqZv .15s ease-out,Tooltip_zoom-in__SbWQb .15s ease-out}.Tooltip_tooltipContent__b3pS-[data-state=closed]{animation:Tooltip_fade-out__UOBET .1s ease-in,Tooltip_zoom-out__fodOk .1s ease-in}.Tooltip_tooltipContent__b3pS-[data-state=delayed-open][data-side=bottom],.Tooltip_tooltipContent__b3pS-[data-state=instant-open][data-side=bottom],.Tooltip_tooltipContent__b3pS-[data-state=open][data-side=bottom]{animation:Tooltip_fade-in__ZQqZv .15s ease-out,Tooltip_zoom-in__SbWQb .15s ease-out,Tooltip_slide-in-from-top-2__8uuS- .15s ease-out}.Tooltip_tooltipContent__b3pS-[data-state=delayed-open][data-side=left],.Tooltip_tooltipContent__b3pS-[data-state=instant-open][data-side=left],.Tooltip_tooltipContent__b3pS-[data-state=open][data-side=left]{animation:Tooltip_fade-in__ZQqZv .15s ease-out,Tooltip_zoom-in__SbWQb .15s ease-out,Tooltip_slide-in-from-right-2__Uu79F .15s ease-out}.Tooltip_tooltipContent__b3pS-[data-state=delayed-open][data-side=right],.Tooltip_tooltipContent__b3pS-[data-state=instant-open][data-side=right],.Tooltip_tooltipContent__b3pS-[data-state=open][data-side=right]{animation:Tooltip_fade-in__ZQqZv .15s ease-out,Tooltip_zoom-in__SbWQb .15s ease-out,Tooltip_slide-in-from-left-2__23kHm .15s ease-out}.Tooltip_tooltipContent__b3pS-[data-state=delayed-open][data-side=top],.Tooltip_tooltipContent__b3pS-[data-state=instant-open][data-side=top],.Tooltip_tooltipContent__b3pS-[data-state=open][data-side=top]{animation:Tooltip_fade-in__ZQqZv .15s ease-out,Tooltip_zoom-in__SbWQb .15s ease-out,Tooltip_slide-in-from-bottom-2__O-Aa8 .15s ease-out}.Tooltip_tooltipContent__b3pS-[data-state=closed][data-side=bottom],.Tooltip_tooltipContent__b3pS-[data-state=closed][data-side=left],.Tooltip_tooltipContent__b3pS-[data-state=closed][data-side=right],.Tooltip_tooltipContent__b3pS-[data-state=closed][data-side=top]{animation:Tooltip_fade-out__UOBET .1s ease-in,Tooltip_zoom-out__fodOk .1s ease-in}.Tooltip_tooltipContentOverTrigger__VQAU3{box-sizing:border-box;height:auto}.Tooltip_tooltipContentOverTrigger__VQAU3[data-state=delayed-open],.Tooltip_tooltipContentOverTrigger__VQAU3[data-state=instant-open],.Tooltip_tooltipContentOverTrigger__VQAU3[data-state=open]{animation:Tooltip_fade-in__ZQqZv .15s ease-out}.Tooltip_tooltipContentOverTrigger__VQAU3[data-state=closed]{animation:Tooltip_fade-out__UOBET .1s ease-in}.Tooltip_tooltipArrow__87DVL{background-color:var(--popover);border-bottom:1px solid var(--border);border-left-width:1px;border-left:0 solid var(--border);border-radius:2px;border-right:1px solid var(--border);border-top-width:1px;border-top:0 solid var(--border);fill:var(--popover);height:10px;transform:translateY(calc(-50% + .5px)) rotate(45deg);width:10px;z-index:50}@keyframes Tooltip_fade-in__ZQqZv{0%{opacity:0}to{opacity:1}}@keyframes Tooltip_fade-out__UOBET{0%{opacity:1}to{opacity:0}}@keyframes Tooltip_zoom-in__SbWQb{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes Tooltip_zoom-out__fodOk{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}@keyframes Tooltip_slide-in-from-top-2__8uuS-{0%{opacity:0;transform:translateY(-.5rem)}to{opacity:1;transform:translateY(0)}}@keyframes Tooltip_slide-in-from-right-2__Uu79F{0%{opacity:0;transform:translateX(.5rem)}to{opacity:1;transform:translateX(0)}}@keyframes Tooltip_slide-in-from-left-2__23kHm{0%{opacity:0;transform:translateX(-.5rem)}to{opacity:1;transform:translateX(0)}}@keyframes Tooltip_slide-in-from-bottom-2__O-Aa8{0%{opacity:0;transform:translateY(.5rem)}to{opacity:1;transform:translateY(0)}}";
|
|
4
|
+
var S = {"tooltipContent":"Tooltip_tooltipContent__b3pS-","fade-in":"Tooltip_fade-in__ZQqZv","zoom-in":"Tooltip_zoom-in__SbWQb","fade-out":"Tooltip_fade-out__UOBET","zoom-out":"Tooltip_zoom-out__fodOk","slide-in-from-top-2":"Tooltip_slide-in-from-top-2__8uuS-","slide-in-from-right-2":"Tooltip_slide-in-from-right-2__Uu79F","slide-in-from-left-2":"Tooltip_slide-in-from-left-2__23kHm","slide-in-from-bottom-2":"Tooltip_slide-in-from-bottom-2__O-Aa8","tooltipContentOverTrigger":"Tooltip_tooltipContentOverTrigger__VQAU3","tooltipArrow":"Tooltip_tooltipArrow__87DVL"};
|
|
5
5
|
styleInject(css_248z);
|
|
6
6
|
|
|
7
7
|
export { S as default };
|
|
@@ -10,8 +10,7 @@ import '../../ui/Sidebar/Sidebar.js';
|
|
|
10
10
|
import 'lucide-react';
|
|
11
11
|
import '../../ui/Page/Breadcrumbs/Breadcrumbs.styl.js';
|
|
12
12
|
import '../../ui/Page/pageContext.js';
|
|
13
|
-
import '
|
|
14
|
-
import '../../ui/Tooltip/Tooltip.styl.js';
|
|
13
|
+
import '../../ui/Tooltip/Tooltip.js';
|
|
15
14
|
import '../../ui/Page/PageHeader/PageHeader.styl.js';
|
|
16
15
|
import '../../ui/Page/PageEmptyCanvas/PageEmptyCanvas.styl.js';
|
|
17
16
|
import '../../ui/Page/PageContent/PageContent.styl.js';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { Tabs, TabsList, TabsTrigger } from '../../../ui/Tabs/Tabs.js';
|
|
4
|
+
import { useThrottledCallback } from '../../../../hooks/useThrottledCallback.js';
|
|
5
|
+
import S from './HorizonsSelector.styl.js';
|
|
6
|
+
|
|
7
|
+
function HorizonsSelector({ selectedHorizon, onHorizonChange, availableHorizons, }) {
|
|
8
|
+
const horizons = useMemo(() => {
|
|
9
|
+
return availableHorizons
|
|
10
|
+
.sort((a, b) => {
|
|
11
|
+
// Sort by horizon number: horizon_1, horizon_2, etc.
|
|
12
|
+
const numA = parseInt(a.replace('horizon_', ''), 10);
|
|
13
|
+
const numB = parseInt(b.replace('horizon_', ''), 10);
|
|
14
|
+
return numA - numB;
|
|
15
|
+
})
|
|
16
|
+
.map(horizon => {
|
|
17
|
+
const num = horizon.replace('horizon_', '');
|
|
18
|
+
return {
|
|
19
|
+
value: horizon,
|
|
20
|
+
label: num,
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
}, [availableHorizons]);
|
|
24
|
+
const onChangeThrottled = useThrottledCallback(onHorizonChange, 300);
|
|
25
|
+
if (horizons.length === 0) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
return (jsxs("div", { className: S.root, children: [jsx("span", { className: S.horizonsLabel, children: "Planning horizon in months:" }), jsx(Tabs, { value: selectedHorizon, onValueChange: onHorizonChange, variant: "button", children: jsx(TabsList, { children: horizons.map(horizon => (jsx(TabsTrigger, { value: horizon.value, onPointerMove: () => {
|
|
29
|
+
if (selectedHorizon !== horizon.value)
|
|
30
|
+
onChangeThrottled(horizon.value);
|
|
31
|
+
}, children: horizon.label }, horizon.value))) }) })] }));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { HorizonsSelector };
|
package/dist/esm/components/widgets/PerformanceChart/HorizonsSelector/HorizonsSelector.styl.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import styleInject from 'style-inject';
|
|
2
|
+
|
|
3
|
+
var css_248z = "@media (max-width:768px){:root{--page-x-padding:var(--p-6);--page-y-padding:var(--p-6)}}.HorizonsSelector_root__r5vAR{align-items:center;display:flex;flex-grow:1;gap:var(--p-4);justify-content:flex-end}.HorizonsSelector_horizonsLabel__-OzSL{color:var(--foreground);font-size:14px;font-weight:500}.HorizonsSelector_horizonsButtons__Z0aVg{display:flex;gap:var(--p-2)}.HorizonsSelector_horizonButton__YYpIJ{min-width:40px}.HorizonsSelector_infoIcon__7p03J{font-size:12px;margin-left:4px;opacity:.6}";
|
|
4
|
+
var S = {"root":"HorizonsSelector_root__r5vAR","horizonsLabel":"HorizonsSelector_horizonsLabel__-OzSL","horizonsButtons":"HorizonsSelector_horizonsButtons__Z0aVg","horizonButton":"HorizonsSelector_horizonButton__YYpIJ","infoIcon":"HorizonsSelector_infoIcon__7p03J"};
|
|
5
|
+
styleInject(css_248z);
|
|
6
|
+
|
|
7
|
+
export { S as default };
|