@servicetitan/marketing-ui 5.9.0 → 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/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.js +58 -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.js +98 -137
- package/dist/components/charts/line-chart/stores/line-chart.store.js.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.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.js +2 -1
- package/dist/components/charts/line-chart/utils/key.js.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/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.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-extended-card.js +76 -4
- package/dist/components/stat/stat-extended-card.js.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/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/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/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/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.js +71 -12
- 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.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/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/ads-texts.js +2 -1
- package/dist/utils/ads-texts.js.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.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.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.js +11 -6
- package/dist/utils/format-big-numbers.js.map +1 -1
- package/dist/utils/formatters.js +8 -7
- package/dist/utils/formatters.js.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.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/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 -39
- 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/__tests__/format-big-numbers.test.js +0 -16
- package/dist/utils/__tests__/format-big-numbers.test.js.map +0 -1
- package/dist/utils/__tests__/formatters.test.js +0 -45
- package/dist/utils/__tests__/formatters.test.js.map +0 -1
- package/dist/utils/__tests__/helpers.test.js +0 -31
- package/dist/utils/__tests__/helpers.test.js.map +0 -1
- package/dist/utils/__tests__/string-case.test.js +0 -20
- package/dist/utils/__tests__/string-case.test.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
- package/dist/utils/date/__tests__/date-range-picker.test.js +0 -93
- package/dist/utils/date/__tests__/date-range-picker.test.js.map +0 -1
- package/dist/utils/date/__tests__/date-tenant.test.js +0 -29
- package/dist/utils/date/__tests__/date-tenant.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ui/action-button/action-button.tsx"],"sourcesContent":["import { ReactNode, FC, useRef } from 'react';\nimport classnames from 'classnames';\nimport {\n Icon,\n BodyText,\n IconNameType,\n Tooltip,\n useFocusVisible,\n} from '@servicetitan/design-system';\nimport * as Styles from './action-button.module.less';\n\nexport interface ActionButtonProps {\n children: ReactNode;\n iconName?: IconNameType;\n hover?: 'primary' | 'negative' | 'none';\n disabled?: boolean;\n tooltip?: string;\n qaPrefix?: string;\n active?: boolean;\n onClick?(): void;\n}\n\nexport const ActionButton: FC<ActionButtonProps> = ({\n onClick,\n disabled,\n children,\n iconName,\n hover,\n qaPrefix,\n active,\n tooltip,\n}) => {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const { isFocusVisible, focusFunction, blurFunction } = useFocusVisible(buttonRef);\n\n const handleClick = () => {\n if (disabled) {\n return;\n }\n\n if (onClick) {\n onClick();\n }\n };\n\n const getButton = () => {\n const classes = classnames(Styles.actionButton, qaPrefix, {\n [Styles.primary]: hover === 'primary' && !disabled,\n [Styles.negative]: hover === 'negative' && !disabled,\n [Styles.active]: active && !disabled,\n [Styles.disabled]: disabled,\n [Styles.focusVisible]: isFocusVisible,\n });\n\n return (\n <button\n type=\"button\"\n ref={buttonRef}\n className={classes}\n onClick={handleClick}\n disabled={disabled}\n onFocus={focusFunction}\n onBlur={blurFunction}\n >\n {iconName && <Icon name={iconName} size=\"20px\" className=\"m-r-1\" />}\n <BodyText className={classnames(Styles.text, `${qaPrefix}-text`)}>\n {children}\n </BodyText>\n </button>\n );\n };\n\n if (!tooltip) {\n return getButton();\n }\n\n return (\n <Tooltip text={tooltip} direction=\"l\" el=\"div\" className={`${qaPrefix}-tooltip`}>\n {getButton()}\n </Tooltip>\n );\n};\n"],"names":["useRef","classnames","Icon","BodyText","Tooltip","useFocusVisible","Styles","ActionButton","onClick","disabled","children","iconName","hover","qaPrefix","active","tooltip","buttonRef","isFocusVisible","focusFunction","blurFunction","handleClick","getButton","classes","actionButton","primary","negative","focusVisible","button","type","ref","className","onFocus","onBlur","name","size","text","direction","el"],"mappings":";AAAA,SAAwBA,MAAM,QAAQ,QAAQ;AAC9C,OAAOC,gBAAgB,aAAa;AACpC,SACIC,IAAI,EACJC,QAAQ,EAERC,OAAO,EACPC,eAAe,QACZ,8BAA8B;AACrC,YAAYC,YAAY,8BAA8B;AAatD,OAAO,MAAMC,eAAsC,CAAC,EAChDC,OAAO,EACPC,QAAQ,EACRC,QAAQ,EACRC,QAAQ,EACRC,KAAK,EACLC,QAAQ,EACRC,MAAM,EACNC,OAAO,EACV;IACG,MAAMC,YAAYhB,OAA0B;IAC5C,MAAM,EAAEiB,cAAc,EAAEC,aAAa,EAAEC,YAAY,EAAE,GAAGd,gBAAgBW;IAExE,MAAMI,cAAc;QAChB,IAAIX,UAAU;YACV;QACJ;QAEA,IAAID,SAAS;YACTA;QACJ;IACJ;IAEA,MAAMa,YAAY;QACd,MAAMC,UAAUrB,WAAWK,OAAOiB,YAAY,EAAEV,UAAU;YACtD,CAACP,OAAOkB,OAAO,CAAC,EAAEZ,UAAU,aAAa,CAACH;YAC1C,CAACH,OAAOmB,QAAQ,CAAC,EAAEb,UAAU,cAAc,CAACH;YAC5C,CAACH,OAAOQ,MAAM,CAAC,EAAEA,UAAU,CAACL;YAC5B,CAACH,OAAOG,QAAQ,CAAC,EAAEA;YACnB,CAACH,OAAOoB,YAAY,CAAC,EAAET;QAC3B;QAEA,qBACI,MAACU;YACGC,MAAK;YACLC,KAAKb;YACLc,WAAWR;YACXd,SAASY;YACTX,UAAUA;YACVsB,SAASb;YACTc,QAAQb;;gBAEPR,0BAAY,KAACT;oBAAK+B,MAAMtB;oBAAUuB,MAAK;oBAAOJ,WAAU;;8BACzD,KAAC3B;oBAAS2B,WAAW7B,WAAWK,OAAO6B,IAAI,EAAE,GAAGtB,SAAS,KAAK,CAAC;8BAC1DH;;;;IAIjB;IAEA,IAAI,CAACK,SAAS;QACV,OAAOM;IACX;IAEA,qBACI,KAACjB;QAAQ+B,MAAMpB;QAASqB,WAAU;QAAIC,IAAG;QAAMP,WAAW,GAAGjB,SAAS,QAAQ,CAAC;kBAC1EQ;;AAGb,EAAE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const __esModule: true;
|
|
2
|
+
export const actionButton: string;
|
|
3
|
+
export const active: string;
|
|
4
|
+
export const disabled: string;
|
|
5
|
+
export const focusVisible: string;
|
|
6
|
+
export const negative: string;
|
|
7
|
+
export const primary: string;
|
|
8
|
+
export const text: string;
|
|
9
|
+
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ui/action-button/index.tsx"],"sourcesContent":["export * from './action-button';\n"],"names":[],"mappings":"AAAA,cAAc,kBAAkB"}
|
|
@@ -1,7 +1,25 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import classnames from 'classnames';
|
|
3
3
|
import { BodyText, Stack, Spinner } from '@servicetitan/design-system';
|
|
4
|
-
export const CenteredSpinner = ({ size, className, info })
|
|
5
|
-
return
|
|
4
|
+
export const CenteredSpinner = ({ size, className, info })=>{
|
|
5
|
+
return /*#__PURE__*/ _jsxs(Stack, {
|
|
6
|
+
justifyContent: "center",
|
|
7
|
+
alignItems: "center",
|
|
8
|
+
direction: "column",
|
|
9
|
+
className: classnames(className, 'h-100 w-100'),
|
|
10
|
+
children: [
|
|
11
|
+
/*#__PURE__*/ _jsx(Spinner, {
|
|
12
|
+
className: "of-hidden",
|
|
13
|
+
size: size
|
|
14
|
+
}),
|
|
15
|
+
!!info && /*#__PURE__*/ _jsx(BodyText, {
|
|
16
|
+
size: "small",
|
|
17
|
+
className: "m-t-1",
|
|
18
|
+
subdued: true,
|
|
19
|
+
children: info
|
|
20
|
+
})
|
|
21
|
+
]
|
|
22
|
+
});
|
|
6
23
|
};
|
|
24
|
+
|
|
7
25
|
//# sourceMappingURL=centered-spinner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ui/centered-spinner/centered-spinner.tsx"],"sourcesContent":["import { FC } from 'react';\nimport classnames from 'classnames';\nimport { BodyText, Stack, Spinner } from '@servicetitan/design-system';\n\nexport interface CenteredSpinnerPropsStrict {\n /** Size variants */\n size?: 'large' | 'medium' | 'small' | 'tiny';\n className?: string;\n info?: string;\n}\n\nexport const CenteredSpinner: FC<CenteredSpinnerPropsStrict> = ({ size, className, info }) => {\n return (\n <Stack\n justifyContent=\"center\"\n alignItems=\"center\"\n direction=\"column\"\n className={classnames(className, 'h-100 w-100')}\n >\n <Spinner className=\"of-hidden\" size={size} />\n {!!info && (\n <BodyText size=\"small\" className=\"m-t-1\" subdued>\n {info}\n </BodyText>\n )}\n </Stack>\n );\n};\n"],"names":["classnames","BodyText","Stack","Spinner","CenteredSpinner","size","className","info","justifyContent","alignItems","direction","subdued"],"mappings":";AACA,OAAOA,gBAAgB,aAAa;AACpC,SAASC,QAAQ,EAAEC,KAAK,EAAEC,OAAO,QAAQ,8BAA8B;AASvE,OAAO,MAAMC,kBAAkD,CAAC,EAAEC,IAAI,EAAEC,SAAS,EAAEC,IAAI,EAAE;IACrF,qBACI,MAACL;QACGM,gBAAe;QACfC,YAAW;QACXC,WAAU;QACVJ,WAAWN,WAAWM,WAAW;;0BAEjC,KAACH;gBAAQG,WAAU;gBAAYD,MAAMA;;YACpC,CAAC,CAACE,sBACC,KAACN;gBAASI,MAAK;gBAAQC,WAAU;gBAAQK,OAAO;0BAC3CJ;;;;AAKrB,EAAE"}
|
|
@@ -4,49 +4,85 @@ import classNames from 'classnames';
|
|
|
4
4
|
import { observer } from 'mobx-react';
|
|
5
5
|
import { BodyText, Form, Stack } from '@servicetitan/design-system';
|
|
6
6
|
import * as Styles from './date-range-picker.module.less';
|
|
7
|
-
const convertDateRange = (val, backward)
|
|
8
|
-
? {
|
|
7
|
+
const convertDateRange = (val, backward)=>val ? {
|
|
9
8
|
start: val.start,
|
|
10
|
-
end: new Date(val.end.getFullYear(), val.end.getMonth(), val.end.getDate() + (backward ? 1 : -1))
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
})
|
|
18
|
-
const
|
|
19
|
-
export const DateRangePicker = observer(({ compare, disabled, state, onChange, input, }) => {
|
|
9
|
+
end: new Date(val.end.getFullYear(), val.end.getMonth(), val.end.getDate() + (backward ? 1 : -1))
|
|
10
|
+
} : undefined;
|
|
11
|
+
const formatDate = (dt)=>dt.toLocaleString('en-US', {
|
|
12
|
+
day: 'numeric',
|
|
13
|
+
year: 'numeric',
|
|
14
|
+
month: 'short'
|
|
15
|
+
});
|
|
16
|
+
const formatDateRange = (range)=>`${formatDate(range.start)} - ${formatDate(range.end)}`;
|
|
17
|
+
export const DateRangePicker = observer(({ compare, disabled, state, onChange, input })=>{
|
|
20
18
|
const selectedOption = state.selectedOption;
|
|
21
19
|
/*
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const onPickerChange = val => {
|
|
20
|
+
* DateRangePickerOptions uses exclusive date ranges for end date (start >= dt > end)
|
|
21
|
+
* but anvil's DateRangePicker uses inclusive dates (with end set to endOfDay),
|
|
22
|
+
* so we performing some transformations here
|
|
23
|
+
* convertDateRange (predefined options, value and onChange)
|
|
24
|
+
*/ const onPickerChange = (val)=>{
|
|
28
25
|
const newVal = convertDateRange(val, true);
|
|
29
26
|
if (onChange) {
|
|
30
27
|
onChange(newVal);
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
28
|
+
} else {
|
|
33
29
|
state.onChange(newVal);
|
|
34
30
|
}
|
|
35
31
|
};
|
|
36
|
-
const options = useMemo(()
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
32
|
+
const options = useMemo(()=>state.options.options.map((o)=>({
|
|
33
|
+
text: o.text,
|
|
34
|
+
value: convertDateRange(o.value),
|
|
35
|
+
selected: o.key === (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.key)
|
|
36
|
+
})), [
|
|
37
|
+
selectedOption,
|
|
38
|
+
state.options.options
|
|
39
|
+
]);
|
|
40
|
+
const value = useMemo(()=>convertDateRange(state.value), [
|
|
41
|
+
state.value
|
|
42
|
+
]);
|
|
43
|
+
const compareValue = useMemo(()=>state.value && compare ? convertDateRange(state.options.getComparisonDateRange(state.value)) : undefined, [
|
|
44
|
+
compare,
|
|
45
|
+
state.value,
|
|
46
|
+
state.options
|
|
47
|
+
]);
|
|
48
|
+
const textValue = selectedOption ? selectedOption.text : compare || !value ? 'Custom Date Range' : formatDateRange(value);
|
|
49
|
+
return /*#__PURE__*/ _jsxs(Stack, {
|
|
50
|
+
children: [
|
|
51
|
+
/*#__PURE__*/ _jsx(Stack.Item, {
|
|
52
|
+
className: Styles.pickerContainer,
|
|
53
|
+
children: /*#__PURE__*/ _jsx(Form.DateRangePicker, {
|
|
54
|
+
onChange: onPickerChange,
|
|
55
|
+
options: options,
|
|
56
|
+
value: value,
|
|
57
|
+
required: true,
|
|
58
|
+
disabled: disabled,
|
|
59
|
+
label: !input && /*#__PURE__*/ _jsx("div", {
|
|
60
|
+
className: classNames(Styles.pickerValue, 'd-f flex-column justify-content-center t-truncate cursor-pointer'),
|
|
61
|
+
children: textValue
|
|
62
|
+
}),
|
|
63
|
+
input: input === null || input === void 0 ? void 0 : input(textValue)
|
|
64
|
+
})
|
|
65
|
+
}),
|
|
66
|
+
!!compare && /*#__PURE__*/ _jsxs(Stack, {
|
|
67
|
+
direction: "column",
|
|
68
|
+
justifyContent: "center",
|
|
69
|
+
className: "m-l-2",
|
|
70
|
+
children: [
|
|
71
|
+
/*#__PURE__*/ _jsx(BodyText, {
|
|
72
|
+
children: value ? formatDateRange(value) : ''
|
|
73
|
+
}),
|
|
74
|
+
!!compareValue && /*#__PURE__*/ _jsxs(BodyText, {
|
|
75
|
+
size: "xsmall",
|
|
76
|
+
subdued: true,
|
|
77
|
+
children: [
|
|
78
|
+
"vs. ",
|
|
79
|
+
formatDateRange(compareValue)
|
|
80
|
+
]
|
|
81
|
+
})
|
|
82
|
+
]
|
|
83
|
+
})
|
|
84
|
+
]
|
|
85
|
+
});
|
|
51
86
|
});
|
|
87
|
+
|
|
52
88
|
//# sourceMappingURL=date-range-picker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ui/date-range-picker/date-range-picker.tsx"],"sourcesContent":["import { ReactElement, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { observer } from 'mobx-react';\nimport { BodyText, DateRangePickerProps, Form, Stack } from '@servicetitan/design-system';\nimport { DateRange, DateRangePickerOptionsStateType } from '../../../utils/date';\nimport * as Styles from './date-range-picker.module.less';\n\ninterface TriggerProps {\n onClick?: () => void;\n}\n\nexport interface CustomDateRangePickerProps<OptionKeys extends string> {\n state: DateRangePickerOptionsStateType<OptionKeys>;\n onChange?: DateRangePickerOptionsStateType<OptionKeys>['onChange'];\n compare?: boolean;\n disabled?: boolean;\n input?: (textValue: string) => {\n element: (\n value: DateRangePickerProps['value'],\n triggerProp: TriggerProps,\n open: DateRangePickerProps['open'],\n error: DateRangePickerProps['error']\n ) => ReactElement;\n };\n}\n\nconst convertDateRange = (val?: DateRange, backward?: boolean): DateRange | undefined =>\n val\n ? {\n start: val.start,\n end: new Date(\n val.end.getFullYear(),\n val.end.getMonth(),\n val.end.getDate() + (backward ? 1 : -1)\n ),\n }\n : undefined;\n\nconst formatDate = (dt: Date) =>\n dt.toLocaleString('en-US', {\n day: 'numeric',\n year: 'numeric',\n month: 'short',\n });\n\nconst formatDateRange = (range: DateRange) =>\n `${formatDate(range.start)} - ${formatDate(range.end)}`;\n\nexport const DateRangePicker = observer(\n <OptionKeys extends string>({\n compare,\n disabled,\n state,\n onChange,\n input,\n }: CustomDateRangePickerProps<OptionKeys>) => {\n const selectedOption = state.selectedOption;\n\n /*\n * DateRangePickerOptions uses exclusive date ranges for end date (start >= dt > end)\n * but anvil's DateRangePicker uses inclusive dates (with end set to endOfDay),\n * so we performing some transformations here\n * convertDateRange (predefined options, value and onChange)\n */\n const onPickerChange: DateRangePickerOptionsStateType<OptionKeys>['onChange'] = val => {\n const newVal = convertDateRange(val, true);\n\n if (onChange) {\n onChange(newVal);\n } else {\n state.onChange(newVal);\n }\n };\n const options = useMemo(\n () =>\n state.options.options.map(o => ({\n text: o.text,\n value: convertDateRange(o.value),\n selected: o.key === selectedOption?.key,\n })),\n [selectedOption, state.options.options]\n );\n const value = useMemo(() => convertDateRange(state.value), [state.value]);\n const compareValue = useMemo(\n () =>\n state.value && compare\n ? convertDateRange(state.options.getComparisonDateRange(state.value))\n : undefined,\n [compare, state.value, state.options]\n );\n const textValue = selectedOption\n ? selectedOption.text\n : compare || !value\n ? 'Custom Date Range'\n : formatDateRange(value);\n\n return (\n <Stack>\n <Stack.Item className={Styles.pickerContainer}>\n <Form.DateRangePicker\n onChange={onPickerChange}\n options={options}\n value={value}\n required\n disabled={disabled}\n label={\n !input && (\n <div\n className={classNames(\n Styles.pickerValue,\n 'd-f flex-column justify-content-center t-truncate cursor-pointer'\n )}\n >\n {textValue}\n </div>\n )\n }\n input={input?.(textValue)}\n />\n </Stack.Item>\n {!!compare && (\n <Stack direction=\"column\" justifyContent=\"center\" className=\"m-l-2\">\n <BodyText>{value ? formatDateRange(value) : ''}</BodyText>\n {!!compareValue && (\n <BodyText size=\"xsmall\" subdued>\n vs. {formatDateRange(compareValue)}\n </BodyText>\n )}\n </Stack>\n )}\n </Stack>\n );\n }\n);\n"],"names":["useMemo","classNames","observer","BodyText","Form","Stack","Styles","convertDateRange","val","backward","start","end","Date","getFullYear","getMonth","getDate","undefined","formatDate","dt","toLocaleString","day","year","month","formatDateRange","range","DateRangePicker","compare","disabled","state","onChange","input","selectedOption","onPickerChange","newVal","options","map","o","text","value","selected","key","compareValue","getComparisonDateRange","textValue","Item","className","pickerContainer","required","label","div","pickerValue","direction","justifyContent","size","subdued"],"mappings":";AAAA,SAAuBA,OAAO,QAAQ,QAAQ;AAC9C,OAAOC,gBAAgB,aAAa;AACpC,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,QAAQ,EAAwBC,IAAI,EAAEC,KAAK,QAAQ,8BAA8B;AAE1F,YAAYC,YAAY,kCAAkC;AAqB1D,MAAMC,mBAAmB,CAACC,KAAiBC,WACvCD,MACM;QACIE,OAAOF,IAAIE,KAAK;QAChBC,KAAK,IAAIC,KACLJ,IAAIG,GAAG,CAACE,WAAW,IACnBL,IAAIG,GAAG,CAACG,QAAQ,IAChBN,IAAIG,GAAG,CAACI,OAAO,KAAMN,CAAAA,WAAW,IAAI,CAAC,CAAA;IAE7C,IACAO;AAEV,MAAMC,aAAa,CAACC,KAChBA,GAAGC,cAAc,CAAC,SAAS;QACvBC,KAAK;QACLC,MAAM;QACNC,OAAO;IACX;AAEJ,MAAMC,kBAAkB,CAACC,QACrB,GAAGP,WAAWO,MAAMd,KAAK,EAAE,GAAG,EAAEO,WAAWO,MAAMb,GAAG,GAAG;AAE3D,OAAO,MAAMc,kBAAkBvB,SAC3B,CAA4B,EACxBwB,OAAO,EACPC,QAAQ,EACRC,KAAK,EACLC,QAAQ,EACRC,KAAK,EACgC;IACrC,MAAMC,iBAAiBH,MAAMG,cAAc;IAE3C;;;;;SAKC,GACD,MAAMC,iBAA0ExB,CAAAA;QAC5E,MAAMyB,SAAS1B,iBAAiBC,KAAK;QAErC,IAAIqB,UAAU;YACVA,SAASI;QACb,OAAO;YACHL,MAAMC,QAAQ,CAACI;QACnB;IACJ;IACA,MAAMC,UAAUlC,QACZ,IACI4B,MAAMM,OAAO,CAACA,OAAO,CAACC,GAAG,CAACC,CAAAA,IAAM,CAAA;gBAC5BC,MAAMD,EAAEC,IAAI;gBACZC,OAAO/B,iBAAiB6B,EAAEE,KAAK;gBAC/BC,UAAUH,EAAEI,GAAG,MAAKT,2BAAAA,qCAAAA,eAAgBS,GAAG;YAC3C,CAAA,IACJ;QAACT;QAAgBH,MAAMM,OAAO,CAACA,OAAO;KAAC;IAE3C,MAAMI,QAAQtC,QAAQ,IAAMO,iBAAiBqB,MAAMU,KAAK,GAAG;QAACV,MAAMU,KAAK;KAAC;IACxE,MAAMG,eAAezC,QACjB,IACI4B,MAAMU,KAAK,IAAIZ,UACTnB,iBAAiBqB,MAAMM,OAAO,CAACQ,sBAAsB,CAACd,MAAMU,KAAK,KACjEtB,WACV;QAACU;QAASE,MAAMU,KAAK;QAAEV,MAAMM,OAAO;KAAC;IAEzC,MAAMS,YAAYZ,iBACZA,eAAeM,IAAI,GACnBX,WAAW,CAACY,QACV,sBACAf,gBAAgBe;IAExB,qBACI,MAACjC;;0BACG,KAACA,MAAMuC,IAAI;gBAACC,WAAWvC,OAAOwC,eAAe;0BACzC,cAAA,KAAC1C,KAAKqB,eAAe;oBACjBI,UAAUG;oBACVE,SAASA;oBACTI,OAAOA;oBACPS,QAAQ;oBACRpB,UAAUA;oBACVqB,OACI,CAAClB,uBACG,KAACmB;wBACGJ,WAAW5C,WACPK,OAAO4C,WAAW,EAClB;kCAGHP;;oBAIbb,KAAK,EAAEA,kBAAAA,4BAAAA,MAAQa;;;YAGtB,CAAC,CAACjB,yBACC,MAACrB;gBAAM8C,WAAU;gBAASC,gBAAe;gBAASP,WAAU;;kCACxD,KAAC1C;kCAAUmC,QAAQf,gBAAgBe,SAAS;;oBAC3C,CAAC,CAACG,8BACC,MAACtC;wBAASkD,MAAK;wBAASC,OAAO;;4BAAC;4BACvB/B,gBAAgBkB;;;;;;;AAOjD,GACF"}
|
|
@@ -8,8 +8,17 @@ import { Button, Tooltip } from '@servicetitan/design-system';
|
|
|
8
8
|
* return (
|
|
9
9
|
* <DisabledButton disabled="This button is disabled">knock knock</Button>
|
|
10
10
|
* )
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
*/ export const DisabledButton = (props)=>{
|
|
12
|
+
return props.disabled && props.disabled !== true ? /*#__PURE__*/ _jsx(Tooltip, {
|
|
13
|
+
text: props.disabled,
|
|
14
|
+
children: /*#__PURE__*/ _jsx(Button, {
|
|
15
|
+
...props,
|
|
16
|
+
disabled: true
|
|
17
|
+
})
|
|
18
|
+
}) : /*#__PURE__*/ _jsx(Button, {
|
|
19
|
+
...props,
|
|
20
|
+
disabled: !!props.disabled
|
|
21
|
+
});
|
|
14
22
|
};
|
|
23
|
+
|
|
15
24
|
//# sourceMappingURL=disabled-button.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ui/disabled-button.tsx"],"sourcesContent":["import { FC } from 'react';\nimport { Button, ButtonProps, Tooltip } from '@servicetitan/design-system';\n\ninterface DisabledButtonProps extends Omit<ButtonProps, 'disabled'> {\n disabled?: string | boolean;\n}\n\n/**\n * Button that shows disabled reason as tooltip\n *\n * @component\n * @example\n * return (\n * <DisabledButton disabled=\"This button is disabled\">knock knock</Button>\n * )\n */\nexport const DisabledButton: FC<DisabledButtonProps> = props => {\n return props.disabled && props.disabled !== true ? (\n <Tooltip text={props.disabled}>\n <Button {...props} disabled />\n </Tooltip>\n ) : (\n <Button {...props} disabled={!!props.disabled} />\n );\n};\n"],"names":["Button","Tooltip","DisabledButton","props","disabled","text"],"mappings":";AACA,SAASA,MAAM,EAAeC,OAAO,QAAQ,8BAA8B;AAM3E;;;;;;;;CAQC,GACD,OAAO,MAAMC,iBAA0CC,CAAAA;IACnD,OAAOA,MAAMC,QAAQ,IAAID,MAAMC,QAAQ,KAAK,qBACxC,KAACH;QAAQI,MAAMF,MAAMC,QAAQ;kBACzB,cAAA,KAACJ;YAAQ,GAAGG,KAAK;YAAEC,QAAQ;;uBAG/B,KAACJ;QAAQ,GAAGG,KAAK;QAAEC,UAAU,CAAC,CAACD,MAAMC,QAAQ;;AAErD,EAAE"}
|
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { BodyText, Icon, Stack, Tooltip } from '@servicetitan/design-system';
|
|
3
3
|
import { tokens } from '@servicetitan/tokens/core';
|
|
4
|
-
export const LabelWithHint = ({ label, textClassName, className, hint, textSize = 'small'
|
|
4
|
+
export const LabelWithHint = ({ label, textClassName, className, hint, textSize = 'small' })=>/*#__PURE__*/ _jsxs(Stack, {
|
|
5
|
+
spacing: 1,
|
|
6
|
+
alignItems: "flex-start",
|
|
7
|
+
className: className,
|
|
8
|
+
children: [
|
|
9
|
+
/*#__PURE__*/ _jsx(BodyText, {
|
|
10
|
+
size: textSize,
|
|
11
|
+
bold: true,
|
|
12
|
+
className: textClassName,
|
|
13
|
+
children: label
|
|
14
|
+
}),
|
|
15
|
+
!!hint && /*#__PURE__*/ _jsx(Tooltip, {
|
|
16
|
+
direction: "tr",
|
|
17
|
+
text: hint,
|
|
18
|
+
children: /*#__PURE__*/ _jsx(Icon, {
|
|
19
|
+
name: "info",
|
|
20
|
+
size: 18,
|
|
21
|
+
color: tokens.colorNeutral80
|
|
22
|
+
})
|
|
23
|
+
})
|
|
24
|
+
]
|
|
25
|
+
});
|
|
26
|
+
|
|
5
27
|
//# sourceMappingURL=label-with-hint.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ui/label-with-hint/label-with-hint.tsx"],"sourcesContent":["import { BodyText, Icon, Stack, Tooltip } from '@servicetitan/design-system';\nimport { tokens } from '@servicetitan/tokens/core';\nimport { FC } from 'react';\n\nexport interface LabelWithHintProps {\n label: string;\n hint?: string;\n textClassName?: string;\n className?: string;\n textSize?: 'large' | 'medium' | 'small' | 'xsmall';\n}\n\nexport const LabelWithHint: FC<LabelWithHintProps> = ({\n label,\n textClassName,\n className,\n hint,\n textSize = 'small',\n}) => (\n <Stack spacing={1} alignItems=\"flex-start\" className={className}>\n <BodyText size={textSize} bold className={textClassName}>\n {label}\n </BodyText>\n {!!hint && (\n <Tooltip direction=\"tr\" text={hint}>\n <Icon name=\"info\" size={18} color={tokens.colorNeutral80} />\n </Tooltip>\n )}\n </Stack>\n);\n"],"names":["BodyText","Icon","Stack","Tooltip","tokens","LabelWithHint","label","textClassName","className","hint","textSize","spacing","alignItems","size","bold","direction","text","name","color","colorNeutral80"],"mappings":";AAAA,SAASA,QAAQ,EAAEC,IAAI,EAAEC,KAAK,EAAEC,OAAO,QAAQ,8BAA8B;AAC7E,SAASC,MAAM,QAAQ,4BAA4B;AAWnD,OAAO,MAAMC,gBAAwC,CAAC,EAClDC,KAAK,EACLC,aAAa,EACbC,SAAS,EACTC,IAAI,EACJC,WAAW,OAAO,EACrB,iBACG,MAACR;QAAMS,SAAS;QAAGC,YAAW;QAAaJ,WAAWA;;0BAClD,KAACR;gBAASa,MAAMH;gBAAUI,IAAI;gBAACN,WAAWD;0BACrCD;;YAEJ,CAAC,CAACG,sBACC,KAACN;gBAAQY,WAAU;gBAAKC,MAAMP;0BAC1B,cAAA,KAACR;oBAAKgB,MAAK;oBAAOJ,MAAM;oBAAIK,OAAOd,OAAOe,cAAc;;;;OAItE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ui/line-text/index.tsx"],"sourcesContent":["export * from './line-text';\n"],"names":[],"mappings":"AAAA,cAAc,cAAc"}
|
|
@@ -1,25 +1,84 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
3
|
import classNames from 'classnames';
|
|
4
|
-
import { BodyText, Headline, MoreDetails
|
|
4
|
+
import { BodyText, Headline, MoreDetails } from '@servicetitan/design-system';
|
|
5
5
|
import { useClientRect } from '../../../utils/use-client-rect';
|
|
6
6
|
import * as Styles from './line-text.module.less';
|
|
7
|
-
const useLimited = ()
|
|
7
|
+
const useLimited = ()=>{
|
|
8
8
|
const [rect1, ref1] = useClientRect();
|
|
9
9
|
const [rect2, ref2] = useClientRect();
|
|
10
|
-
const limited = useMemo(()
|
|
11
|
-
|
|
10
|
+
const limited = useMemo(()=>!!(rect1 === null || rect1 === void 0 ? void 0 : rect1.width) && !!(rect2 === null || rect2 === void 0 ? void 0 : rect2.width) && ((rect2 === null || rect2 === void 0 ? void 0 : rect2.width) || 0) > ((rect1 === null || rect1 === void 0 ? void 0 : rect1.width) || 0), [
|
|
11
|
+
rect1,
|
|
12
|
+
rect2
|
|
13
|
+
]);
|
|
14
|
+
return [
|
|
15
|
+
ref1,
|
|
16
|
+
ref2,
|
|
17
|
+
limited
|
|
18
|
+
];
|
|
12
19
|
};
|
|
13
|
-
export const BodyTextLine = ({ children, wrapperClassName, ...props })
|
|
20
|
+
export const BodyTextLine = ({ children, wrapperClassName, ...props })=>{
|
|
14
21
|
const [ref1, ref2, limited] = useLimited();
|
|
15
|
-
return
|
|
16
|
-
|
|
17
|
-
|
|
22
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
23
|
+
ref: ref1,
|
|
24
|
+
className: classNames(wrapperClassName, 'w-100 position-relative d-f flex-row of-x-hidden'),
|
|
25
|
+
children: [
|
|
26
|
+
/*#__PURE__*/ _jsx(BodyText, {
|
|
27
|
+
...props,
|
|
28
|
+
className: classNames(props.className, Styles.mainText, {
|
|
29
|
+
[Styles.mainTextHidden]: limited
|
|
30
|
+
}),
|
|
31
|
+
ref: ref2,
|
|
32
|
+
children: children
|
|
33
|
+
}),
|
|
34
|
+
limited && /*#__PURE__*/ _jsxs("div", {
|
|
35
|
+
className: Styles.moreDetailsWrapper,
|
|
36
|
+
children: [
|
|
37
|
+
/*#__PURE__*/ _jsx(BodyText, {
|
|
38
|
+
...props,
|
|
39
|
+
className: classNames(props.className, Styles.moreDetailsText, 't-truncate'),
|
|
40
|
+
children: children
|
|
41
|
+
}),
|
|
42
|
+
/*#__PURE__*/ _jsx(MoreDetails, {
|
|
43
|
+
full: children !== null && children !== void 0 ? children : '',
|
|
44
|
+
short: "",
|
|
45
|
+
size: props.size
|
|
46
|
+
})
|
|
47
|
+
]
|
|
48
|
+
})
|
|
49
|
+
]
|
|
50
|
+
});
|
|
18
51
|
};
|
|
19
|
-
export const HeadlineLine = ({ children, wrapperClassName, ...props })
|
|
52
|
+
export const HeadlineLine = ({ children, wrapperClassName, ...props })=>{
|
|
20
53
|
const [ref1, ref2, limited] = useLimited();
|
|
21
|
-
return
|
|
22
|
-
|
|
23
|
-
|
|
54
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
55
|
+
ref: ref1,
|
|
56
|
+
className: classNames(wrapperClassName, 'w-100 position-relative d-f flex-row'),
|
|
57
|
+
children: [
|
|
58
|
+
/*#__PURE__*/ _jsx(Headline, {
|
|
59
|
+
...props,
|
|
60
|
+
className: classNames(props.className, Styles.mainText, {
|
|
61
|
+
[Styles.mainTextHidden]: limited
|
|
62
|
+
}),
|
|
63
|
+
ref: ref2,
|
|
64
|
+
children: children
|
|
65
|
+
}),
|
|
66
|
+
limited && /*#__PURE__*/ _jsxs("div", {
|
|
67
|
+
className: Styles.moreDetailsWrapper,
|
|
68
|
+
children: [
|
|
69
|
+
/*#__PURE__*/ _jsx(Headline, {
|
|
70
|
+
...props,
|
|
71
|
+
className: classNames(props.className, Styles.moreDetailsText, 't-truncate'),
|
|
72
|
+
children: children
|
|
73
|
+
}),
|
|
74
|
+
/*#__PURE__*/ _jsx(MoreDetails, {
|
|
75
|
+
full: children !== null && children !== void 0 ? children : '',
|
|
76
|
+
short: ""
|
|
77
|
+
})
|
|
78
|
+
]
|
|
79
|
+
})
|
|
80
|
+
]
|
|
81
|
+
});
|
|
24
82
|
};
|
|
83
|
+
|
|
25
84
|
//# sourceMappingURL=line-text.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ui/line-text/line-text.tsx"],"sourcesContent":["import { useMemo, FC } from 'react';\nimport classNames from 'classnames';\nimport {\n BodyText,\n BodyTextPropsStrict,\n Headline,\n HeadlinePropsStrict,\n MoreDetails,\n} from '@servicetitan/design-system';\nimport { useClientRect } from '../../../utils/use-client-rect';\nimport * as Styles from './line-text.module.less';\n\nconst useLimited = (): [\n (node: HTMLElement | null) => void,\n (node: HTMLElement | null) => void,\n boolean,\n] => {\n const [rect1, ref1] = useClientRect();\n const [rect2, ref2] = useClientRect();\n const limited = useMemo(\n () => !!rect1?.width && !!rect2?.width && (rect2?.width || 0) > (rect1?.width || 0),\n [rect1, rect2]\n );\n\n return [ref1, ref2, limited];\n};\n\nexport interface BodyTextLineProps extends BodyTextPropsStrict {\n wrapperClassName?: string;\n children?: string;\n}\n\nexport const BodyTextLine: FC<BodyTextLineProps> = ({ children, wrapperClassName, ...props }) => {\n const [ref1, ref2, limited] = useLimited();\n\n return (\n <div\n ref={ref1}\n className={classNames(\n wrapperClassName,\n 'w-100 position-relative d-f flex-row of-x-hidden'\n )}\n >\n <BodyText\n {...props}\n className={classNames(props.className, Styles.mainText, {\n [Styles.mainTextHidden]: limited,\n })}\n ref={ref2}\n >\n {children}\n </BodyText>\n\n {limited && (\n <div className={Styles.moreDetailsWrapper}>\n <BodyText\n {...props}\n className={classNames(\n props.className,\n Styles.moreDetailsText,\n 't-truncate'\n )}\n >\n {children}\n </BodyText>\n <MoreDetails full={children ?? ''} short=\"\" size={props.size} />\n </div>\n )}\n </div>\n );\n};\n\nexport interface HeadlineLineProps extends HeadlinePropsStrict {\n wrapperClassName?: string;\n children?: string;\n}\n\nexport const HeadlineLine: FC<HeadlineLineProps> = ({ children, wrapperClassName, ...props }) => {\n const [ref1, ref2, limited] = useLimited();\n\n return (\n <div\n ref={ref1}\n className={classNames(wrapperClassName, 'w-100 position-relative d-f flex-row')}\n >\n <Headline\n {...props}\n className={classNames(props.className, Styles.mainText, {\n [Styles.mainTextHidden]: limited,\n })}\n ref={ref2}\n >\n {children}\n </Headline>\n\n {limited && (\n <div className={Styles.moreDetailsWrapper}>\n <Headline\n {...props}\n className={classNames(\n props.className,\n Styles.moreDetailsText,\n 't-truncate'\n )}\n >\n {children}\n </Headline>\n <MoreDetails full={children ?? ''} short=\"\" />\n </div>\n )}\n </div>\n );\n};\n"],"names":["useMemo","classNames","BodyText","Headline","MoreDetails","useClientRect","Styles","useLimited","rect1","ref1","rect2","ref2","limited","width","BodyTextLine","children","wrapperClassName","props","div","ref","className","mainText","mainTextHidden","moreDetailsWrapper","moreDetailsText","full","short","size","HeadlineLine"],"mappings":";AAAA,SAASA,OAAO,QAAY,QAAQ;AACpC,OAAOC,gBAAgB,aAAa;AACpC,SACIC,QAAQ,EAERC,QAAQ,EAERC,WAAW,QACR,8BAA8B;AACrC,SAASC,aAAa,QAAQ,iCAAiC;AAC/D,YAAYC,YAAY,0BAA0B;AAElD,MAAMC,aAAa;IAKf,MAAM,CAACC,OAAOC,KAAK,GAAGJ;IACtB,MAAM,CAACK,OAAOC,KAAK,GAAGN;IACtB,MAAMO,UAAUZ,QACZ,IAAM,CAAC,EAACQ,kBAAAA,4BAAAA,MAAOK,KAAK,KAAI,CAAC,EAACH,kBAAAA,4BAAAA,MAAOG,KAAK,KAAI,AAACH,CAAAA,CAAAA,kBAAAA,4BAAAA,MAAOG,KAAK,KAAI,CAAA,IAAML,CAAAA,CAAAA,kBAAAA,4BAAAA,MAAOK,KAAK,KAAI,CAAA,GACjF;QAACL;QAAOE;KAAM;IAGlB,OAAO;QAACD;QAAME;QAAMC;KAAQ;AAChC;AAOA,OAAO,MAAME,eAAsC,CAAC,EAAEC,QAAQ,EAAEC,gBAAgB,EAAE,GAAGC,OAAO;IACxF,MAAM,CAACR,MAAME,MAAMC,QAAQ,GAAGL;IAE9B,qBACI,MAACW;QACGC,KAAKV;QACLW,WAAWnB,WACPe,kBACA;;0BAGJ,KAACd;gBACI,GAAGe,KAAK;gBACTG,WAAWnB,WAAWgB,MAAMG,SAAS,EAAEd,OAAOe,QAAQ,EAAE;oBACpD,CAACf,OAAOgB,cAAc,CAAC,EAAEV;gBAC7B;gBACAO,KAAKR;0BAEJI;;YAGJH,yBACG,MAACM;gBAAIE,WAAWd,OAAOiB,kBAAkB;;kCACrC,KAACrB;wBACI,GAAGe,KAAK;wBACTG,WAAWnB,WACPgB,MAAMG,SAAS,EACfd,OAAOkB,eAAe,EACtB;kCAGHT;;kCAEL,KAACX;wBAAYqB,MAAMV,qBAAAA,sBAAAA,WAAY;wBAAIW,OAAM;wBAAGC,MAAMV,MAAMU,IAAI;;;;;;AAKhF,EAAE;AAOF,OAAO,MAAMC,eAAsC,CAAC,EAAEb,QAAQ,EAAEC,gBAAgB,EAAE,GAAGC,OAAO;IACxF,MAAM,CAACR,MAAME,MAAMC,QAAQ,GAAGL;IAE9B,qBACI,MAACW;QACGC,KAAKV;QACLW,WAAWnB,WAAWe,kBAAkB;;0BAExC,KAACb;gBACI,GAAGc,KAAK;gBACTG,WAAWnB,WAAWgB,MAAMG,SAAS,EAAEd,OAAOe,QAAQ,EAAE;oBACpD,CAACf,OAAOgB,cAAc,CAAC,EAAEV;gBAC7B;gBACAO,KAAKR;0BAEJI;;YAGJH,yBACG,MAACM;gBAAIE,WAAWd,OAAOiB,kBAAkB;;kCACrC,KAACpB;wBACI,GAAGc,KAAK;wBACTG,WAAWnB,WACPgB,MAAMG,SAAS,EACfd,OAAOkB,eAAe,EACtB;kCAGHT;;kCAEL,KAACX;wBAAYqB,MAAMV,qBAAAA,sBAAAA,WAAY;wBAAIW,OAAM;;;;;;AAK7D,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ui/title-popover/index.tsx"],"sourcesContent":["export * from './title-popover';\n"],"names":[],"mappings":"AAAA,cAAc,kBAAkB"}
|