@servicetitan/marketing-ui 5.8.1 → 5.10.0
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/components/ads/ads-stat.js +21 -10
- package/dist/components/ads/ads-stat.js.map +1 -1
- package/dist/components/charts/funnel-chart/components/funnel-chart.js +118 -6
- package/dist/components/charts/funnel-chart/components/funnel-chart.js.map +1 -1
- package/dist/components/charts/funnel-chart/components/funnel-chart.module.less.d.ts +9 -0
- package/dist/components/charts/funnel-chart/components/funnel-svg.js +62 -12
- package/dist/components/charts/funnel-chart/components/funnel-svg.js.map +1 -1
- package/dist/components/charts/funnel-chart/funnel-chart.stories.d.ts +0 -1
- package/dist/components/charts/funnel-chart/funnel-chart.stories.d.ts.map +1 -1
- package/dist/components/charts/funnel-chart/index.js +1 -0
- package/dist/components/charts/funnel-chart/index.js.map +1 -1
- package/dist/components/charts/funnel-chart/utils/const.js +1 -0
- package/dist/components/charts/funnel-chart/utils/const.js.map +1 -1
- package/dist/components/charts/funnel-chart/utils/interface.js +2 -1
- package/dist/components/charts/funnel-chart/utils/interface.js.map +1 -1
- package/dist/components/charts/line-chart/components/body.js +105 -16
- package/dist/components/charts/line-chart/components/body.js.map +1 -1
- package/dist/components/charts/line-chart/components/body.module.less.d.ts +4 -0
- package/dist/components/charts/line-chart/components/container.js +12 -4
- package/dist/components/charts/line-chart/components/container.js.map +1 -1
- package/dist/components/charts/line-chart/components/hover-popover.js +56 -13
- package/dist/components/charts/line-chart/components/hover-popover.js.map +1 -1
- package/dist/components/charts/line-chart/components/hover-popover.module.less.d.ts +5 -0
- package/dist/components/charts/line-chart/components/sidebar.js +35 -5
- package/dist/components/charts/line-chart/components/sidebar.js.map +1 -1
- package/dist/components/charts/line-chart/components/sidebar.module.less.d.ts +13 -0
- package/dist/components/charts/line-chart/components/stuff.js +73 -32
- package/dist/components/charts/line-chart/components/stuff.js.map +1 -1
- package/dist/components/charts/line-chart/components/stuff.module.less.d.ts +6 -0
- package/dist/components/charts/line-chart/components/svg-bars.d.ts.map +1 -1
- package/dist/components/charts/line-chart/components/svg-bars.js +60 -26
- package/dist/components/charts/line-chart/components/svg-bars.js.map +1 -1
- package/dist/components/charts/line-chart/components/svg-body.js +52 -11
- package/dist/components/charts/line-chart/components/svg-body.js.map +1 -1
- package/dist/components/charts/line-chart/components/svg-lines.js +46 -27
- package/dist/components/charts/line-chart/components/svg-lines.js.map +1 -1
- package/dist/components/charts/line-chart/components/svg.module.less.d.ts +5 -0
- package/dist/components/charts/line-chart/index.js +1 -0
- package/dist/components/charts/line-chart/index.js.map +1 -1
- package/dist/components/charts/line-chart/stores/line-chart.store.d.ts.map +1 -1
- package/dist/components/charts/line-chart/stores/line-chart.store.js +98 -127
- package/dist/components/charts/line-chart/stores/line-chart.store.js.map +1 -1
- package/dist/components/charts/line-chart/stores/svg.store.d.ts.map +1 -1
- package/dist/components/charts/line-chart/stores/svg.store.js +66 -108
- package/dist/components/charts/line-chart/stores/svg.store.js.map +1 -1
- package/dist/components/charts/line-chart/utils/const.js +8 -7
- package/dist/components/charts/line-chart/utils/const.js.map +1 -1
- package/dist/components/charts/line-chart/utils/formatters.d.ts.map +1 -1
- package/dist/components/charts/line-chart/utils/formatters.js +13 -11
- package/dist/components/charts/line-chart/utils/formatters.js.map +1 -1
- package/dist/components/charts/line-chart/utils/interfaces.js +2 -1
- package/dist/components/charts/line-chart/utils/interfaces.js.map +1 -1
- package/dist/components/charts/line-chart/utils/internal-interfaces.js +2 -1
- package/dist/components/charts/line-chart/utils/internal-interfaces.js.map +1 -1
- package/dist/components/charts/line-chart/utils/key.d.ts.map +1 -1
- package/dist/components/charts/line-chart/utils/key.js +2 -1
- package/dist/components/charts/line-chart/utils/key.js.map +1 -1
- package/dist/components/charts/line-chart/utils/labels.d.ts.map +1 -1
- package/dist/components/charts/line-chart/utils/labels.js +50 -46
- package/dist/components/charts/line-chart/utils/labels.js.map +1 -1
- package/dist/components/charts/pie-chart/components/pie-chart.js +60 -6
- package/dist/components/charts/pie-chart/components/pie-chart.js.map +1 -1
- package/dist/components/charts/pie-chart/components/pie-chart.module.less.d.ts +3 -0
- package/dist/components/charts/pie-chart/components/pie.js +176 -39
- package/dist/components/charts/pie-chart/components/pie.js.map +1 -1
- package/dist/components/charts/pie-chart/index.js +2 -0
- package/dist/components/charts/pie-chart/index.js.map +1 -1
- package/dist/components/charts/pie-chart/pie-chart.stories.d.ts +0 -1
- package/dist/components/charts/pie-chart/pie-chart.stories.d.ts.map +1 -1
- package/dist/components/charts/pie-chart/utils/const.d.ts.map +1 -1
- package/dist/components/charts/pie-chart/utils/const.js +55 -39
- package/dist/components/charts/pie-chart/utils/const.js.map +1 -1
- package/dist/components/charts/pie-chart/utils/interface.js +2 -1
- package/dist/components/charts/pie-chart/utils/interface.js.map +1 -1
- package/dist/components/image-cropper/image-cropper.d.ts.map +1 -1
- package/dist/components/image-cropper/image-cropper.js +74 -88
- package/dist/components/image-cropper/image-cropper.js.map +1 -1
- package/dist/components/stat/stat-card.js +68 -22
- package/dist/components/stat/stat-card.js.map +1 -1
- package/dist/components/stat/stat-card.module.less.d.ts +5 -0
- package/dist/components/stat/stat-cards.stories.d.ts +0 -1
- package/dist/components/stat/stat-cards.stories.d.ts.map +1 -1
- package/dist/components/stat/stat-extended-card.js +76 -4
- package/dist/components/stat/stat-extended-card.js.map +1 -1
- package/dist/components/stat/stat-extended-card.stories.d.ts +0 -1
- package/dist/components/stat/stat-extended-card.stories.d.ts.map +1 -1
- package/dist/components/ui/action-button/action-button.js +33 -7
- package/dist/components/ui/action-button/action-button.js.map +1 -1
- package/dist/components/ui/action-button/action-button.module.less.d.ts +9 -0
- package/dist/components/ui/action-button/action-button.stories.d.ts +0 -1
- package/dist/components/ui/action-button/action-button.stories.d.ts.map +1 -1
- package/dist/components/ui/action-button/index.js +1 -0
- package/dist/components/ui/action-button/index.js.map +1 -1
- package/dist/components/ui/centered-spinner/centered-spinner.js +20 -2
- package/dist/components/ui/centered-spinner/centered-spinner.js.map +1 -1
- package/dist/components/ui/centered-spinner/centered-spinner.stories.d.ts +0 -1
- package/dist/components/ui/centered-spinner/centered-spinner.stories.d.ts.map +1 -1
- package/dist/components/ui/date-range-picker/date-range-picker.d.ts.map +1 -1
- package/dist/components/ui/date-range-picker/date-range-picker.js +71 -35
- package/dist/components/ui/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/ui/date-range-picker/date-range-picker.module.less.d.ts +4 -0
- package/dist/components/ui/date-range-picker/date-range-picker.stories.d.ts.map +1 -1
- package/dist/components/ui/disabled-button.js +12 -3
- package/dist/components/ui/disabled-button.js.map +1 -1
- package/dist/components/ui/label-with-hint/label-with-hint.js +23 -1
- package/dist/components/ui/label-with-hint/label-with-hint.js.map +1 -1
- package/dist/components/ui/label-with-hint/label-with-hint.stories.d.ts +0 -1
- package/dist/components/ui/label-with-hint/label-with-hint.stories.d.ts.map +1 -1
- package/dist/components/ui/line-text/index.js +1 -0
- package/dist/components/ui/line-text/index.js.map +1 -1
- package/dist/components/ui/line-text/line-text-body.stories.d.ts +0 -1
- package/dist/components/ui/line-text/line-text-body.stories.d.ts.map +1 -1
- package/dist/components/ui/line-text/line-text-head.stories.d.ts +0 -1
- package/dist/components/ui/line-text/line-text-head.stories.d.ts.map +1 -1
- package/dist/components/ui/line-text/line-text.js +71 -25
- package/dist/components/ui/line-text/line-text.js.map +1 -1
- package/dist/components/ui/line-text/line-text.module.less.d.ts +6 -0
- package/dist/components/ui/title-popover/index.js +1 -0
- package/dist/components/ui/title-popover/index.js.map +1 -1
- package/dist/components/ui/title-popover/title-popover.d.ts.map +1 -1
- package/dist/components/ui/title-popover/title-popover.js +78 -69
- package/dist/components/ui/title-popover/title-popover.js.map +1 -1
- package/dist/components/ui/title-popover/title-popover.module.less.d.ts +3 -0
- package/dist/components/ui/title-popover/title-popover.stories.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/__tests__/format-big-numbers.test.d.ts +2 -0
- package/dist/utils/__tests__/format-big-numbers.test.d.ts.map +1 -0
- package/dist/utils/__tests__/formatters.test.d.ts +2 -0
- package/dist/utils/__tests__/formatters.test.d.ts.map +1 -0
- package/dist/utils/__tests__/helpers.test.d.ts +2 -0
- package/dist/utils/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/utils/__tests__/string-case.test.d.ts +2 -0
- package/dist/utils/__tests__/string-case.test.d.ts.map +1 -0
- package/dist/utils/ads-texts.js +2 -1
- package/dist/utils/ads-texts.js.map +1 -1
- package/dist/utils/date/__tests__/date-range-picker.test.d.ts +2 -0
- package/dist/utils/date/__tests__/date-range-picker.test.d.ts.map +1 -0
- package/dist/utils/date/__tests__/date-tenant.test.d.ts +2 -0
- package/dist/utils/date/__tests__/date-tenant.test.d.ts.map +1 -0
- package/dist/utils/date/date-range-picker-options.d.ts.map +1 -1
- package/dist/utils/date/date-range-picker-options.js +90 -68
- package/dist/utils/date/date-range-picker-options.js.map +1 -1
- package/dist/utils/date/date-range-picker-state.d.ts.map +1 -1
- package/dist/utils/date/date-range-picker-state.js +42 -43
- package/dist/utils/date/date-range-picker-state.js.map +1 -1
- package/dist/utils/date/date-tenant.js +4 -6
- package/dist/utils/date/date-tenant.js.map +1 -1
- package/dist/utils/date/date.d.ts.map +1 -1
- package/dist/utils/date/date.js +5 -9
- package/dist/utils/date/date.js.map +1 -1
- package/dist/utils/date/index.js +1 -0
- package/dist/utils/date/index.js.map +1 -1
- package/dist/utils/format-big-numbers.d.ts.map +1 -1
- package/dist/utils/format-big-numbers.js +11 -6
- package/dist/utils/format-big-numbers.js.map +1 -1
- package/dist/utils/formatters.d.ts.map +1 -1
- package/dist/utils/formatters.js +8 -7
- package/dist/utils/formatters.js.map +1 -1
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/helpers.js +9 -12
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/marketing-parner-handlers.js +9 -12
- package/dist/utils/marketing-parner-handlers.js.map +1 -1
- package/dist/utils/string-case.js +1 -0
- package/dist/utils/string-case.js.map +1 -1
- package/dist/utils/use-client-rect.d.ts +1 -5
- package/dist/utils/use-client-rect.d.ts.map +1 -1
- package/dist/utils/use-client-rect.js +19 -19
- package/dist/utils/use-client-rect.js.map +1 -1
- package/dist/utils/use-target-range-store.js +7 -6
- package/dist/utils/use-target-range-store.js.map +1 -1
- package/package.json +11 -11
- package/src/components/charts/funnel-chart/funnel-chart.stories.tsx +3 -2
- package/src/components/charts/line-chart/components/svg-bars.tsx +2 -0
- package/src/components/ui/action-button/action-button.stories.tsx +3 -2
- package/src/components/ui/centered-spinner/centered-spinner.stories.tsx +3 -2
- package/src/components/ui/date-range-picker/date-range-picker.stories.tsx +5 -6
- package/src/components/ui/date-range-picker/date-range-picker.tsx +2 -2
- package/src/components/ui/line-text/line-text-body.stories.tsx +3 -2
- package/src/components/ui/line-text/line-text-head.stories.tsx +3 -2
- package/src/components/ui/line-text/line-text.tsx +1 -1
- package/src/components/ui/title-popover/title-popover.stories.tsx +3 -2
- package/src/utils/date/__tests__/date-range-picker.test.ts +1 -1
- package/src/utils/use-client-rect.ts +1 -1
- package/dist/components/charts/funnel-chart/funnel-chart.stories.js +0 -76
- package/dist/components/charts/funnel-chart/funnel-chart.stories.js.map +0 -1
- package/dist/components/charts/line-chart/line-chart.stories.js +0 -225
- package/dist/components/charts/line-chart/line-chart.stories.js.map +0 -1
- package/dist/components/charts/pie-chart/pie-chart.stories.js +0 -22
- package/dist/components/charts/pie-chart/pie-chart.stories.js.map +0 -1
- package/dist/components/image-cropper/image-cropper.stories.js +0 -48
- package/dist/components/image-cropper/image-cropper.stories.js.map +0 -1
- package/dist/components/stat/stat-cards.stories.js +0 -16
- package/dist/components/stat/stat-cards.stories.js.map +0 -1
- package/dist/components/stat/stat-extended-card.stories.js +0 -12
- package/dist/components/stat/stat-extended-card.stories.js.map +0 -1
- package/dist/components/ui/action-button/action-button.stories.js +0 -11
- package/dist/components/ui/action-button/action-button.stories.js.map +0 -1
- package/dist/components/ui/centered-spinner/centered-spinner.stories.js +0 -12
- package/dist/components/ui/centered-spinner/centered-spinner.stories.js.map +0 -1
- package/dist/components/ui/date-range-picker/date-range-picker.stories.js +0 -18
- package/dist/components/ui/date-range-picker/date-range-picker.stories.js.map +0 -1
- package/dist/components/ui/label-with-hint/label-with-hint.stories.js +0 -12
- package/dist/components/ui/label-with-hint/label-with-hint.stories.js.map +0 -1
- package/dist/components/ui/line-text/line-text-body.stories.js +0 -11
- package/dist/components/ui/line-text/line-text-body.stories.js.map +0 -1
- package/dist/components/ui/line-text/line-text-head.stories.js +0 -11
- package/dist/components/ui/line-text/line-text-head.stories.js.map +0 -1
- package/dist/components/ui/title-popover/title-popover.stories.js +0 -17
- package/dist/components/ui/title-popover/title-popover.stories.js.map +0 -1
- package/dist/utils/date/__mocks__/date-mock.js +0 -19
- package/dist/utils/date/__mocks__/date-mock.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/charts/line-chart/components/body.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, FC, Fragment } from 'react';\nimport { observer } from 'mobx-react';\nimport classNames from 'classnames';\nimport { Stack } from '@servicetitan/design-system';\nimport { provide, useDependencies } from '@servicetitan/react-ioc';\n\nimport { useClientRect } from '../../../../utils/use-client-rect';\nimport { LineChartStore } from '../stores/line-chart.store';\nimport { SvgStore } from '../stores/svg.store';\nimport { getXLabels } from '../utils/labels';\n\nimport { Sidebar } from './sidebar';\nimport { MetricsTitle, XAxisLabels } from './stuff';\nimport { SvgBody, SvgBodyHover } from './svg-body';\nimport { HoverPopover } from './hover-popover';\nimport * as Styles from './body.module.less';\n\nexport const Body: FC<{ classNameTitle?: string }> = provide({ singletons: [SvgStore] })(\n observer(({ classNameTitle }) => {\n const [{ display, metrics, left, right, periods, resolution, setHoveredIndex }, svgStore] =\n useDependencies(LineChartStore, SvgStore);\n\n useEffect(() => {\n svgStore.init(periods.length, metrics, left?.maxValue ?? 0, right?.maxValue ?? 0);\n }, [svgStore, periods, metrics, left, right]);\n const [rect, ref] = useClientRect();\n\n const onBarHover = useCallback(\n (ind: number) => setHoveredIndex(ind, true),\n [setHoveredIndex]\n );\n\n const onBarLeave = useCallback(\n (ind: number) => setHoveredIndex(ind, false),\n [setHoveredIndex]\n );\n\n const labels = useMemo(\n () => (display.xLabels ? getXLabels(periods, resolution, rect?.width ?? 0) : []),\n [display, periods, resolution, rect]\n );\n\n return (\n <div className=\"d-f flex-column\">\n <Stack alignItems=\"stretch\">\n {left && <Sidebar settings={left} classNameTitle={classNameTitle} />}\n <Stack.Item fill>\n <div\n ref={ref}\n className={classNames(Styles.chartWrapper, 'border-bottom', {\n 'border-left': !!left && display.yLeft,\n 'border-right': !!right && display.yRight,\n })}\n >\n {periods.length ? (\n <Fragment>\n {periods.length !== labels.length && (\n <div className={Styles.labelBorders}>\n {labels\n .map(([text, flex], ind) => [flex, `${ind}${text}`])\n .map(([flex, key]) => (\n <div key={key} style={{ flex }} />\n ))}\n </div>\n )}\n\n <SvgBody horizontalGrid={display.yGrid} metrics={metrics} />\n <HoverPopover />\n <SvgBodyHover\n onValueHover={onBarHover}\n onValueLeave={onBarLeave}\n />\n </Fragment>\n ) : (\n <Stack\n className=\"h-100\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n No Data\n </Stack>\n )}\n </div>\n </Stack.Item>\n {right && <Sidebar settings={right} right classNameTitle={classNameTitle} />}\n </Stack>\n {display.xLabels && (\n <XAxisLabels\n labels={labels}\n width={rect?.width ?? 0}\n left={left?.width ?? 0}\n right={right?.width ?? 0}\n labelsMerged={periods.length !== labels.length}\n hasBars={\n !!metrics.filter(\n m =>\n m.type === 'bar' ||\n m.type === 'stacked-bar' ||\n m.type === 'grouped-bar'\n ).length\n }\n />\n )}\n {display.metricsTitlePosition === 'bottom' && (\n <Stack direction=\"row\" justifyContent=\"center\" className=\"p-3\">\n <MetricsTitle metrics={metrics} />\n </Stack>\n )}\n </div>\n );\n })\n);\n"],"names":["useCallback","useEffect","useMemo","Fragment","observer","classNames","Stack","provide","useDependencies","useClientRect","LineChartStore","SvgStore","getXLabels","Sidebar","MetricsTitle","XAxisLabels","SvgBody","SvgBodyHover","HoverPopover","Styles","Body","singletons","classNameTitle","display","metrics","left","right","periods","resolution","setHoveredIndex","svgStore","init","length","maxValue","rect","ref","onBarHover","ind","onBarLeave","labels","xLabels","width","div","className","alignItems","settings","Item","fill","chartWrapper","yLeft","yRight","labelBorders","map","text","flex","key","style","horizontalGrid","yGrid","onValueHover","onValueLeave","justifyContent","labelsMerged","hasBars","filter","m","type","metricsTitlePosition","direction"],"mappings":"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"}
|
|
@@ -5,10 +5,18 @@ import { provide, useDependencies } from '@servicetitan/react-ioc';
|
|
|
5
5
|
import { LineChartStore } from '../stores/line-chart.store';
|
|
6
6
|
import { Body } from './body';
|
|
7
7
|
export const LineChart = provide({
|
|
8
|
-
singletons: [
|
|
9
|
-
|
|
8
|
+
singletons: [
|
|
9
|
+
LineChartStore
|
|
10
|
+
]
|
|
11
|
+
})(observer((props)=>{
|
|
10
12
|
const [{ init, isInit }] = useDependencies(LineChartStore);
|
|
11
|
-
useEffect(()
|
|
12
|
-
|
|
13
|
+
useEffect(()=>init(props), [
|
|
14
|
+
init,
|
|
15
|
+
props
|
|
16
|
+
]);
|
|
17
|
+
return isInit ? /*#__PURE__*/ _jsx(Body, {
|
|
18
|
+
classNameTitle: props.classNameTitle
|
|
19
|
+
}) : null;
|
|
13
20
|
}));
|
|
21
|
+
|
|
14
22
|
//# sourceMappingURL=container.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/charts/line-chart/components/container.tsx"],"sourcesContent":["import { useEffect, FC } from 'react';\nimport { observer } from 'mobx-react';\nimport { provide, useDependencies } from '@servicetitan/react-ioc';\nimport { LineChartProps } from '../utils/interfaces';\nimport { LineChartStore } from '../stores/line-chart.store';\nimport { Body } from './body';\n\nexport const LineChart: FC<LineChartProps> = provide({\n singletons: [LineChartStore],\n})(\n observer(props => {\n const [{ init, isInit }] = useDependencies(LineChartStore);\n\n useEffect(() => init(props), [init, props]);\n\n return isInit ? <Body classNameTitle={props.classNameTitle} /> : null;\n })\n);\n"],"names":["useEffect","observer","provide","useDependencies","LineChartStore","Body","LineChart","singletons","props","init","isInit","classNameTitle"],"mappings":";AAAA,SAASA,SAAS,QAAY,QAAQ;AACtC,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,OAAO,EAAEC,eAAe,QAAQ,0BAA0B;AAEnE,SAASC,cAAc,QAAQ,6BAA6B;AAC5D,SAASC,IAAI,QAAQ,SAAS;AAE9B,OAAO,MAAMC,YAAgCJ,QAAQ;IACjDK,YAAY;QAACH;KAAe;AAChC,GACIH,SAASO,CAAAA;IACL,MAAM,CAAC,EAAEC,IAAI,EAAEC,MAAM,EAAE,CAAC,GAAGP,gBAAgBC;IAE3CJ,UAAU,IAAMS,KAAKD,QAAQ;QAACC;QAAMD;KAAM;IAE1C,OAAOE,uBAAS,KAACL;QAAKM,gBAAgBH,MAAMG,cAAc;SAAO;AACrE,IACF"}
|
|
@@ -10,27 +10,70 @@ import { getFormatter } from '../utils/formatters';
|
|
|
10
10
|
import { periodDateTitleFormatter } from '../utils/labels';
|
|
11
11
|
import * as Styles from './hover-popover.module.less';
|
|
12
12
|
import { ColorTag } from './stuff';
|
|
13
|
-
export const HoverPopover = observer(()
|
|
13
|
+
export const HoverPopover = observer(()=>{
|
|
14
14
|
const [{ periods, resolution, hoveredIndex, metrics, display }, svgStore] = useDependencies(LineChartStore, SvgStore);
|
|
15
|
-
const formatDateTitle = useMemo(()
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
const formatDateTitle = useMemo(()=>periodDateTitleFormatter[resolution], [
|
|
16
|
+
resolution
|
|
17
|
+
]);
|
|
18
|
+
const formatValue = useCallback((title, value, isRight)=>getFormatter(isRight ? display.metricsRightFormat : display.metricsLeftFormat)(value) + ' ' + title, [
|
|
19
|
+
display
|
|
20
|
+
]);
|
|
21
|
+
const popoverStyle = useMemo(()=>{
|
|
20
22
|
const pos = svgStore.periodX(hoveredIndex);
|
|
21
23
|
if (hoveredIndex < periods.length / 2) {
|
|
22
|
-
return {
|
|
24
|
+
return {
|
|
25
|
+
left: `${svgStore.fpx(pos + 2)}%`
|
|
26
|
+
};
|
|
23
27
|
}
|
|
24
|
-
return {
|
|
25
|
-
|
|
28
|
+
return {
|
|
29
|
+
right: `${svgStore.fpx(102 - pos)}%`
|
|
30
|
+
};
|
|
31
|
+
}, [
|
|
32
|
+
svgStore,
|
|
33
|
+
hoveredIndex,
|
|
34
|
+
periods.length
|
|
35
|
+
]);
|
|
26
36
|
if (hoveredIndex < 0 || hoveredIndex >= periods.length) {
|
|
27
37
|
return null;
|
|
28
38
|
}
|
|
29
39
|
const period = periods[hoveredIndex];
|
|
30
40
|
const partialWeek = !!period.partial;
|
|
31
|
-
return
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
41
|
+
return /*#__PURE__*/ _jsxs(Fragment, {
|
|
42
|
+
children: [
|
|
43
|
+
/*#__PURE__*/ _jsx("div", {
|
|
44
|
+
className: Styles.line,
|
|
45
|
+
style: {
|
|
46
|
+
left: svgStore.fpx(svgStore.periodX(hoveredIndex)) + '%'
|
|
47
|
+
}
|
|
48
|
+
}),
|
|
49
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
50
|
+
className: classNames(Styles.popover, 'bg-white border border-radius-1 p-1'),
|
|
51
|
+
style: popoverStyle,
|
|
52
|
+
children: [
|
|
53
|
+
/*#__PURE__*/ _jsx(BodyText, {
|
|
54
|
+
size: "small",
|
|
55
|
+
bold: true,
|
|
56
|
+
children: formatDateTitle(period)
|
|
57
|
+
}),
|
|
58
|
+
partialWeek && /*#__PURE__*/ _jsx(BodyText, {
|
|
59
|
+
size: "xsmall",
|
|
60
|
+
subdued: true,
|
|
61
|
+
children: "Partial week"
|
|
62
|
+
}),
|
|
63
|
+
metrics.map((m)=>{
|
|
64
|
+
var _m_opts;
|
|
65
|
+
return m.values[hoveredIndex] !== undefined && /*#__PURE__*/ _jsx(ColorTag, {
|
|
66
|
+
label: formatValue(m.title, m.values[hoveredIndex], m.isRight),
|
|
67
|
+
color: m.color,
|
|
68
|
+
className: "m-t-1",
|
|
69
|
+
dashed: (_m_opts = m.opts) === null || _m_opts === void 0 ? void 0 : _m_opts.dashed,
|
|
70
|
+
small: true
|
|
71
|
+
}, m.title);
|
|
72
|
+
})
|
|
73
|
+
]
|
|
74
|
+
})
|
|
75
|
+
]
|
|
76
|
+
});
|
|
35
77
|
});
|
|
78
|
+
|
|
36
79
|
//# sourceMappingURL=hover-popover.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/charts/line-chart/components/hover-popover.tsx"],"sourcesContent":["import { useCallback, useMemo, FC, Fragment } from 'react';\nimport classNames from 'classnames';\nimport { observer } from 'mobx-react';\nimport { useDependencies } from '@servicetitan/react-ioc';\nimport { BodyText } from '@servicetitan/design-system';\nimport { LineChartStore } from '../stores/line-chart.store';\nimport { SvgStore } from '../stores/svg.store';\nimport { getFormatter } from '../utils/formatters';\nimport { periodDateTitleFormatter } from '../utils/labels';\nimport * as Styles from './hover-popover.module.less';\nimport { ColorTag } from './stuff';\n\nexport const HoverPopover: FC = observer(() => {\n const [{ periods, resolution, hoveredIndex, metrics, display }, svgStore] = useDependencies(\n LineChartStore,\n SvgStore\n );\n\n const formatDateTitle = useMemo(() => periodDateTitleFormatter[resolution], [resolution]);\n const formatValue = useCallback(\n (title: string, value: number, isRight: boolean) =>\n getFormatter(isRight ? display.metricsRightFormat : display.metricsLeftFormat)(value) +\n ' ' +\n title,\n [display]\n );\n const popoverStyle = useMemo(() => {\n const pos = svgStore.periodX(hoveredIndex);\n\n if (hoveredIndex < periods.length / 2) {\n return { left: `${svgStore.fpx(pos + 2)}%` };\n }\n\n return { right: `${svgStore.fpx(102 - pos)}%` };\n }, [svgStore, hoveredIndex, periods.length]);\n\n if (hoveredIndex < 0 || hoveredIndex >= periods.length) {\n return null;\n }\n\n const period = periods[hoveredIndex]!;\n const partialWeek = !!period.partial;\n\n return (\n <Fragment>\n <div\n className={Styles.line}\n style={{ left: svgStore.fpx(svgStore.periodX(hoveredIndex)) + '%' }}\n />\n <div\n className={classNames(Styles.popover, 'bg-white border border-radius-1 p-1')}\n style={popoverStyle}\n >\n <BodyText size=\"small\" bold>\n {formatDateTitle(period)}\n </BodyText>\n {partialWeek && (\n <BodyText size=\"xsmall\" subdued>\n Partial week\n </BodyText>\n )}\n {metrics.map(\n m =>\n m.values[hoveredIndex] !== undefined && (\n <ColorTag\n label={formatValue(m.title, m.values[hoveredIndex], m.isRight)}\n color={m.color}\n key={m.title}\n className=\"m-t-1\"\n dashed={m.opts?.dashed}\n small\n />\n )\n )}\n </div>\n </Fragment>\n );\n});\n"],"names":["useCallback","useMemo","Fragment","classNames","observer","useDependencies","BodyText","LineChartStore","SvgStore","getFormatter","periodDateTitleFormatter","Styles","ColorTag","HoverPopover","periods","resolution","hoveredIndex","metrics","display","svgStore","formatDateTitle","formatValue","title","value","isRight","metricsRightFormat","metricsLeftFormat","popoverStyle","pos","periodX","length","left","fpx","right","period","partialWeek","partial","div","className","line","style","popover","size","bold","subdued","map","m","values","undefined","label","color","dashed","opts","small"],"mappings":";AAAA,SAASA,WAAW,EAAEC,OAAO,EAAMC,QAAQ,QAAQ,QAAQ;AAC3D,OAAOC,gBAAgB,aAAa;AACpC,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,eAAe,QAAQ,0BAA0B;AAC1D,SAASC,QAAQ,QAAQ,8BAA8B;AACvD,SAASC,cAAc,QAAQ,6BAA6B;AAC5D,SAASC,QAAQ,QAAQ,sBAAsB;AAC/C,SAASC,YAAY,QAAQ,sBAAsB;AACnD,SAASC,wBAAwB,QAAQ,kBAAkB;AAC3D,YAAYC,YAAY,8BAA8B;AACtD,SAASC,QAAQ,QAAQ,UAAU;AAEnC,OAAO,MAAMC,eAAmBT,SAAS;IACrC,MAAM,CAAC,EAAEU,OAAO,EAAEC,UAAU,EAAEC,YAAY,EAAEC,OAAO,EAAEC,OAAO,EAAE,EAAEC,SAAS,GAAGd,gBACxEE,gBACAC;IAGJ,MAAMY,kBAAkBnB,QAAQ,IAAMS,wBAAwB,CAACK,WAAW,EAAE;QAACA;KAAW;IACxF,MAAMM,cAAcrB,YAChB,CAACsB,OAAeC,OAAeC,UAC3Bf,aAAae,UAAUN,QAAQO,kBAAkB,GAAGP,QAAQQ,iBAAiB,EAAEH,SAC/E,MACAD,OACJ;QAACJ;KAAQ;IAEb,MAAMS,eAAe1B,QAAQ;QACzB,MAAM2B,MAAMT,SAASU,OAAO,CAACb;QAE7B,IAAIA,eAAeF,QAAQgB,MAAM,GAAG,GAAG;YACnC,OAAO;gBAAEC,MAAM,GAAGZ,SAASa,GAAG,CAACJ,MAAM,GAAG,CAAC,CAAC;YAAC;QAC/C;QAEA,OAAO;YAAEK,OAAO,GAAGd,SAASa,GAAG,CAAC,MAAMJ,KAAK,CAAC,CAAC;QAAC;IAClD,GAAG;QAACT;QAAUH;QAAcF,QAAQgB,MAAM;KAAC;IAE3C,IAAId,eAAe,KAAKA,gBAAgBF,QAAQgB,MAAM,EAAE;QACpD,OAAO;IACX;IAEA,MAAMI,SAASpB,OAAO,CAACE,aAAa;IACpC,MAAMmB,cAAc,CAAC,CAACD,OAAOE,OAAO;IAEpC,qBACI,MAAClC;;0BACG,KAACmC;gBACGC,WAAW3B,OAAO4B,IAAI;gBACtBC,OAAO;oBAAET,MAAMZ,SAASa,GAAG,CAACb,SAASU,OAAO,CAACb,iBAAiB;gBAAI;;0BAEtE,MAACqB;gBACGC,WAAWnC,WAAWQ,OAAO8B,OAAO,EAAE;gBACtCD,OAAOb;;kCAEP,KAACrB;wBAASoC,MAAK;wBAAQC,IAAI;kCACtBvB,gBAAgBc;;oBAEpBC,6BACG,KAAC7B;wBAASoC,MAAK;wBAASE,OAAO;kCAAC;;oBAInC3B,QAAQ4B,GAAG,CACRC,CAAAA;4BAOoBA;+BANhBA,EAAEC,MAAM,CAAC/B,aAAa,KAAKgC,2BACvB,KAACpC;4BACGqC,OAAO5B,YAAYyB,EAAExB,KAAK,EAAEwB,EAAEC,MAAM,CAAC/B,aAAa,EAAE8B,EAAEtB,OAAO;4BAC7D0B,OAAOJ,EAAEI,KAAK;4BAEdZ,WAAU;4BACVa,MAAM,GAAEL,UAAAA,EAAEM,IAAI,cAANN,8BAAAA,QAAQK,MAAM;4BACtBE,KAAK;2BAHAP,EAAExB,KAAK;;;;;;AAU5C,GAAG"}
|
|
@@ -3,10 +3,40 @@ import classNames from 'classnames';
|
|
|
3
3
|
import { Stack } from '@servicetitan/design-system';
|
|
4
4
|
import * as Styles from './sidebar.module.less';
|
|
5
5
|
import { keyVal } from '../utils/key';
|
|
6
|
-
export const Sidebar = ({ settings, right, className, classNameTitle })
|
|
7
|
-
const sidebarTitle = settings.title ?
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
export const Sidebar = ({ settings, right, className, classNameTitle })=>{
|
|
7
|
+
const sidebarTitle = settings.title ? /*#__PURE__*/ _jsx(Stack.Item, {
|
|
8
|
+
className: classNames(Styles.sidebarTitle, Styles.sidebarTitleText, classNameTitle !== null && classNameTitle !== void 0 ? classNameTitle : Styles.sidebarTitleDefault),
|
|
9
|
+
children: settings.title || ''
|
|
10
|
+
}) : undefined;
|
|
11
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
12
|
+
className: classNames('d-f flex-row', className, Styles.sidebar, sidebarTitle ? Styles.sidebarWithTitle : Styles.sidebarNoTitle, right ? Styles.sidebarRight : Styles.sidebarLeft, {
|
|
13
|
+
[Styles.sidebarNoTitle]: !sidebarTitle
|
|
14
|
+
}),
|
|
15
|
+
style: {
|
|
16
|
+
width: `${settings.width}px`
|
|
17
|
+
},
|
|
18
|
+
children: [
|
|
19
|
+
!right && sidebarTitle,
|
|
20
|
+
/*#__PURE__*/ _jsxs(Stack, {
|
|
21
|
+
className: Styles.sidebarValues,
|
|
22
|
+
direction: "column",
|
|
23
|
+
justifyContent: "space-evenly",
|
|
24
|
+
children: [
|
|
25
|
+
/*#__PURE__*/ _jsx("div", {
|
|
26
|
+
className: Styles.labelGap
|
|
27
|
+
}),
|
|
28
|
+
settings.values.map((val, i)=>/*#__PURE__*/ _jsx("div", {
|
|
29
|
+
className: Styles.label,
|
|
30
|
+
children: val
|
|
31
|
+
}, keyVal(val, i))),
|
|
32
|
+
/*#__PURE__*/ _jsx("div", {
|
|
33
|
+
className: Styles.labelGap
|
|
34
|
+
})
|
|
35
|
+
]
|
|
36
|
+
}),
|
|
37
|
+
!!right && sidebarTitle
|
|
38
|
+
]
|
|
39
|
+
});
|
|
11
40
|
};
|
|
41
|
+
|
|
12
42
|
//# sourceMappingURL=sidebar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/charts/line-chart/components/sidebar.tsx"],"sourcesContent":["import { FC } from 'react';\nimport classNames from 'classnames';\nimport { Stack } from '@servicetitan/design-system';\nimport * as Styles from './sidebar.module.less';\nimport { SideMetricsSettings } from '../utils/internal-interfaces';\nimport { keyVal } from '../utils/key';\n\ninterface SidebarProps {\n settings: SideMetricsSettings;\n className?: string;\n classNameTitle?: string;\n right?: boolean;\n}\n\nexport const Sidebar: FC<SidebarProps> = ({ settings, right, className, classNameTitle }) => {\n const sidebarTitle = settings.title ? (\n <Stack.Item\n className={classNames(\n Styles.sidebarTitle,\n Styles.sidebarTitleText,\n classNameTitle ?? Styles.sidebarTitleDefault\n )}\n >\n {settings.title || ''}\n </Stack.Item>\n ) : undefined;\n\n return (\n <div\n className={classNames(\n 'd-f flex-row',\n className,\n Styles.sidebar,\n sidebarTitle ? Styles.sidebarWithTitle : Styles.sidebarNoTitle,\n right ? Styles.sidebarRight : Styles.sidebarLeft,\n {\n [Styles.sidebarNoTitle]: !sidebarTitle,\n }\n )}\n style={{ width: `${settings.width}px` }}\n >\n {!right && sidebarTitle}\n <Stack\n className={Styles.sidebarValues}\n direction=\"column\"\n justifyContent=\"space-evenly\"\n >\n <div className={Styles.labelGap} />\n {settings.values.map((val, i) => (\n <div key={keyVal(val, i)} className={Styles.label}>\n {val}\n </div>\n ))}\n <div className={Styles.labelGap} />\n </Stack>\n {!!right && sidebarTitle}\n </div>\n );\n};\n"],"names":["classNames","Stack","Styles","keyVal","Sidebar","settings","right","className","classNameTitle","sidebarTitle","title","Item","sidebarTitleText","sidebarTitleDefault","undefined","div","sidebar","sidebarWithTitle","sidebarNoTitle","sidebarRight","sidebarLeft","style","width","sidebarValues","direction","justifyContent","labelGap","values","map","val","i","label"],"mappings":";AACA,OAAOA,gBAAgB,aAAa;AACpC,SAASC,KAAK,QAAQ,8BAA8B;AACpD,YAAYC,YAAY,wBAAwB;AAEhD,SAASC,MAAM,QAAQ,eAAe;AAStC,OAAO,MAAMC,UAA4B,CAAC,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,SAAS,EAAEC,cAAc,EAAE;IACpF,MAAMC,eAAeJ,SAASK,KAAK,iBAC/B,KAACT,MAAMU,IAAI;QACPJ,WAAWP,WACPE,OAAOO,YAAY,EACnBP,OAAOU,gBAAgB,EACvBJ,2BAAAA,4BAAAA,iBAAkBN,OAAOW,mBAAmB;kBAG/CR,SAASK,KAAK,IAAI;SAEvBI;IAEJ,qBACI,MAACC;QACGR,WAAWP,WACP,gBACAO,WACAL,OAAOc,OAAO,EACdP,eAAeP,OAAOe,gBAAgB,GAAGf,OAAOgB,cAAc,EAC9DZ,QAAQJ,OAAOiB,YAAY,GAAGjB,OAAOkB,WAAW,EAChD;YACI,CAAClB,OAAOgB,cAAc,CAAC,EAAE,CAACT;QAC9B;QAEJY,OAAO;YAAEC,OAAO,GAAGjB,SAASiB,KAAK,CAAC,EAAE,CAAC;QAAC;;YAErC,CAAChB,SAASG;0BACX,MAACR;gBACGM,WAAWL,OAAOqB,aAAa;gBAC/BC,WAAU;gBACVC,gBAAe;;kCAEf,KAACV;wBAAIR,WAAWL,OAAOwB,QAAQ;;oBAC9BrB,SAASsB,MAAM,CAACC,GAAG,CAAC,CAACC,KAAKC,kBACvB,KAACf;4BAAyBR,WAAWL,OAAO6B,KAAK;sCAC5CF;2BADK1B,OAAO0B,KAAKC;kCAI1B,KAACf;wBAAIR,WAAWL,OAAOwB,QAAQ;;;;YAElC,CAAC,CAACpB,SAASG;;;AAGxB,EAAE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const __esModule: true;
|
|
2
|
+
export const label: string;
|
|
3
|
+
export const labelGap: string;
|
|
4
|
+
export const sidebar: string;
|
|
5
|
+
export const sidebarLeft: string;
|
|
6
|
+
export const sidebarNoTitle: string;
|
|
7
|
+
export const sidebarRight: string;
|
|
8
|
+
export const sidebarTitle: string;
|
|
9
|
+
export const sidebarTitleDefault: string;
|
|
10
|
+
export const sidebarTitleText: string;
|
|
11
|
+
export const sidebarValues: string;
|
|
12
|
+
export const sidebarWithTitle: string;
|
|
13
|
+
|
|
@@ -3,65 +3,106 @@ import { useMemo } from 'react';
|
|
|
3
3
|
import classNames from 'classnames';
|
|
4
4
|
import { BodyText, Stack } from '@servicetitan/design-system';
|
|
5
5
|
import * as Styles from './stuff.module.less';
|
|
6
|
-
export const ColorTag = ({ label, color, className, small, dashed })
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
export const ColorTag = ({ label, color, className, small, dashed })=>/*#__PURE__*/ _jsxs(Stack, {
|
|
7
|
+
alignItems: "center",
|
|
8
|
+
className: className,
|
|
9
|
+
children: [
|
|
10
|
+
/*#__PURE__*/ _jsx("div", {
|
|
11
|
+
style: dashed ? {
|
|
12
|
+
borderColor: color
|
|
13
|
+
} : {
|
|
14
|
+
backgroundColor: color
|
|
15
|
+
},
|
|
16
|
+
className: classNames(Styles.colorTag, dashed && Styles.colorTagDashed, small && Styles.colorTagSmall)
|
|
17
|
+
}),
|
|
18
|
+
/*#__PURE__*/ _jsx(BodyText, {
|
|
19
|
+
size: small ? 'xsmall' : 'small',
|
|
20
|
+
children: label
|
|
21
|
+
})
|
|
22
|
+
]
|
|
23
|
+
});
|
|
24
|
+
export const MetricsTitle = ({ metrics })=>/*#__PURE__*/ _jsx(Stack, {
|
|
25
|
+
alignItems: "center",
|
|
26
|
+
children: metrics.map((m)=>{
|
|
27
|
+
var _m_opts;
|
|
28
|
+
return /*#__PURE__*/ _jsx(ColorTag, {
|
|
29
|
+
label: m.title,
|
|
30
|
+
color: m.color,
|
|
31
|
+
dashed: (_m_opts = m.opts) === null || _m_opts === void 0 ? void 0 : _m_opts.dashed,
|
|
32
|
+
className: "m-r-4"
|
|
33
|
+
}, m.id);
|
|
34
|
+
})
|
|
35
|
+
});
|
|
36
|
+
export const XAxisLabels = ({ labels, width, left, right, labelsMerged, hasBars })=>{
|
|
37
|
+
const data = useMemo(()=>{
|
|
19
38
|
const styles = {};
|
|
20
|
-
const labelsMapped = labels.map(([text, flex], ind)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
39
|
+
const labelsMapped = labels.map(([text, flex], ind)=>({
|
|
40
|
+
text,
|
|
41
|
+
flex,
|
|
42
|
+
key: `${ind}${text}`,
|
|
43
|
+
className: ''
|
|
44
|
+
}));
|
|
26
45
|
if (hasBars) {
|
|
27
46
|
// when we have bars, all labels will get space equally, so no need to calculate margins
|
|
28
47
|
styles.marginLeft = `${left}px`;
|
|
29
48
|
styles.marginRight = `${right}px`;
|
|
30
|
-
}
|
|
31
|
-
else if (labels.length && !!width && !labelsMerged) {
|
|
49
|
+
} else if (labels.length && !!width && !labelsMerged) {
|
|
32
50
|
// when we have only lines, we should calculate available space for first and last label
|
|
33
51
|
const labelWidth = (width - left - right) / labels.length;
|
|
34
52
|
const labelHalfWidth = labelWidth / 2;
|
|
35
53
|
if (left) {
|
|
36
54
|
if (left > labelHalfWidth) {
|
|
37
55
|
styles.marginLeft = `${left - labelHalfWidth}px`;
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
56
|
+
} else {
|
|
40
57
|
labelsMapped[0].flex = (left + labelHalfWidth) / labelWidth;
|
|
41
58
|
}
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
59
|
+
} else {
|
|
44
60
|
labelsMapped[0].flex = 0.5;
|
|
45
61
|
labelsMapped[0].className = 't-truncate';
|
|
46
62
|
}
|
|
47
63
|
if (right) {
|
|
48
64
|
if (right > labelHalfWidth) {
|
|
49
65
|
styles.marginRight = `${right - labelHalfWidth}px`;
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
66
|
+
} else {
|
|
52
67
|
labelsMapped[labels.length - 1].flex = (right + labelHalfWidth) / labelWidth;
|
|
53
68
|
}
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
69
|
+
} else {
|
|
56
70
|
labelsMapped[labels.length - 1].flex = 0.5;
|
|
57
71
|
labelsMapped[labels.length - 1].className = 't-truncate';
|
|
58
72
|
}
|
|
59
73
|
}
|
|
60
74
|
return {
|
|
61
75
|
labels: labelsMapped,
|
|
62
|
-
styles
|
|
76
|
+
styles
|
|
63
77
|
};
|
|
64
|
-
}, [
|
|
65
|
-
|
|
78
|
+
}, [
|
|
79
|
+
labels,
|
|
80
|
+
left,
|
|
81
|
+
right,
|
|
82
|
+
labelsMerged,
|
|
83
|
+
width,
|
|
84
|
+
hasBars
|
|
85
|
+
]);
|
|
86
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
87
|
+
style: data.styles,
|
|
88
|
+
children: /*#__PURE__*/ _jsx(Stack, {
|
|
89
|
+
direction: "row",
|
|
90
|
+
justifyContent: "space-between",
|
|
91
|
+
alignItems: "center",
|
|
92
|
+
className: "m-t-1",
|
|
93
|
+
children: data.labels.map(({ text, flex, key, className })=>/*#__PURE__*/ _jsx("div", {
|
|
94
|
+
style: {
|
|
95
|
+
flex
|
|
96
|
+
},
|
|
97
|
+
className: className,
|
|
98
|
+
children: /*#__PURE__*/ _jsx(BodyText, {
|
|
99
|
+
size: "xsmall",
|
|
100
|
+
className: classNames(Styles.xAxisLabel, 'ta-center'),
|
|
101
|
+
children: text
|
|
102
|
+
})
|
|
103
|
+
}, key))
|
|
104
|
+
})
|
|
105
|
+
});
|
|
66
106
|
};
|
|
107
|
+
|
|
67
108
|
//# sourceMappingURL=stuff.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/charts/line-chart/components/stuff.tsx"],"sourcesContent":["import { CSSProperties, useMemo, FC } from 'react';\nimport classNames from 'classnames';\nimport { BodyText, Stack } from '@servicetitan/design-system';\nimport * as Styles from './stuff.module.less';\nimport { LineChartMetric } from '../utils/interfaces';\nimport { ChartXLabels } from '../utils/internal-interfaces';\n\ninterface ColorTagProps {\n label: string;\n color: string;\n className?: string;\n small?: boolean;\n dashed?: boolean;\n}\n\nexport const ColorTag: FC<ColorTagProps> = ({ label, color, className, small, dashed }) => (\n <Stack alignItems=\"center\" className={className}>\n <div\n style={\n dashed\n ? {\n borderColor: color,\n }\n : {\n backgroundColor: color,\n }\n }\n className={classNames(\n Styles.colorTag,\n dashed && Styles.colorTagDashed,\n small && Styles.colorTagSmall\n )}\n />\n <BodyText size={small ? 'xsmall' : 'small'}>{label}</BodyText>\n </Stack>\n);\n\ninterface MetricsTitleProps {\n metrics: LineChartMetric[];\n}\n\nexport const MetricsTitle: FC<MetricsTitleProps> = ({ metrics }) => (\n <Stack alignItems=\"center\">\n {metrics.map(m => (\n <ColorTag\n key={m.id}\n label={m.title}\n color={m.color}\n dashed={m.opts?.dashed}\n className=\"m-r-4\"\n />\n ))}\n </Stack>\n);\n\nexport const XAxisLabels: FC<{\n labels: ChartXLabels;\n width: number;\n left: number;\n right: number;\n labelsMerged: boolean;\n hasBars: boolean;\n}> = ({ labels, width, left, right, labelsMerged, hasBars }) => {\n const data = useMemo(() => {\n const styles: CSSProperties = {};\n const labelsMapped = labels.map(([text, flex], ind) => ({\n text,\n flex,\n key: `${ind}${text}`,\n className: '',\n }));\n\n if (hasBars) {\n // when we have bars, all labels will get space equally, so no need to calculate margins\n styles.marginLeft = `${left}px`;\n styles.marginRight = `${right}px`;\n } else if (labels.length && !!width && !labelsMerged) {\n // when we have only lines, we should calculate available space for first and last label\n\n const labelWidth = (width - left - right) / labels.length;\n const labelHalfWidth = labelWidth / 2;\n\n if (left) {\n if (left > labelHalfWidth) {\n styles.marginLeft = `${left - labelHalfWidth}px`;\n } else {\n labelsMapped[0].flex = (left + labelHalfWidth) / labelWidth;\n }\n } else {\n labelsMapped[0].flex = 0.5;\n labelsMapped[0].className = 't-truncate';\n }\n\n if (right) {\n if (right > labelHalfWidth) {\n styles.marginRight = `${right - labelHalfWidth}px`;\n } else {\n labelsMapped[labels.length - 1].flex = (right + labelHalfWidth) / labelWidth;\n }\n } else {\n labelsMapped[labels.length - 1].flex = 0.5;\n labelsMapped[labels.length - 1].className = 't-truncate';\n }\n }\n\n return {\n labels: labelsMapped,\n styles,\n };\n }, [labels, left, right, labelsMerged, width, hasBars]);\n\n return (\n <div style={data.styles}>\n <Stack\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n className=\"m-t-1\"\n >\n {data.labels.map(({ text, flex, key, className }) => (\n <div key={key} style={{ flex }} className={className}>\n <BodyText\n size=\"xsmall\"\n className={classNames(Styles.xAxisLabel, 'ta-center')}\n >\n {text}\n </BodyText>\n </div>\n ))}\n </Stack>\n </div>\n );\n};\n"],"names":["useMemo","classNames","BodyText","Stack","Styles","ColorTag","label","color","className","small","dashed","alignItems","div","style","borderColor","backgroundColor","colorTag","colorTagDashed","colorTagSmall","size","MetricsTitle","metrics","map","m","title","opts","id","XAxisLabels","labels","width","left","right","labelsMerged","hasBars","data","styles","labelsMapped","text","flex","ind","key","marginLeft","marginRight","length","labelWidth","labelHalfWidth","direction","justifyContent","xAxisLabel"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svg-bars.d.ts","sourceRoot":"","sources":["../../../../../src/components/charts/line-chart/components/svg-bars.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAG3B,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAI3D,UAAU,YAAY;IAClB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"svg-bars.d.ts","sourceRoot":"","sources":["../../../../../src/components/charts/line-chart/components/svg-bars.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAG3B,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAI3D,UAAU,YAAY;IAClB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,YAAY,CAqEpC,CAAC;AAEF,UAAU,iBAAiB;IACvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CA0B7C,CAAC"}
|