@servicetitan/design-system 13.6.0 → 13.8.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/ActionMenu/ActionMenu.d.ts +7 -2
- package/dist/components/ActionMenu/ActionMenu.js +23 -3
- package/dist/components/ActionMenu/ActionMenu.js.map +1 -1
- package/dist/components/BackLink/BackLink.test.js +2 -2
- package/dist/components/BackLink/BackLink.test.js.map +1 -1
- package/dist/components/Button/Button.test.js +2 -2
- package/dist/components/Button/Button.test.js.map +1 -1
- package/dist/components/DatePicker/DatePicker.js +3 -1
- package/dist/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/components/Input/Input.css +3 -4
- package/dist/components/Input/Input.css.map +1 -1
- package/dist/components/Input/Input.js +5 -2
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/Input/index.css +3 -4
- package/dist/components/Input/index.css.map +1 -1
- package/dist/components/Link/Link.test.js +2 -2
- package/dist/components/Link/Link.test.js.map +1 -1
- package/dist/components/index.css +3 -4
- package/dist/components/index.css.map +1 -1
- package/dist/global/index.css +5 -4
- package/dist/global/index.css.map +1 -1
- package/dist/global/version.css +1 -1
- package/dist/system-light.css +5 -4
- package/dist/system-light.css.map +1 -1
- package/dist/system-light.min.css +1 -1
- package/dist/system.css +8 -8
- package/dist/system.css.map +1 -1
- package/dist/system.min.css +2 -2
- package/package.json +8 -8
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
2
|
import { PopoverProps } from '../Popover';
|
|
3
3
|
import { ActionMenuGroup } from './ActionMenuGroup';
|
|
4
4
|
import { ActionMenuItem } from './ActionMenuItem';
|
|
5
5
|
/**
|
|
6
6
|
* ActionMenu properties
|
|
7
7
|
*/
|
|
8
|
-
export declare type ActionMenuProps = PopoverProps
|
|
8
|
+
export declare type ActionMenuProps = Omit<PopoverProps, 'trigger'> & {
|
|
9
|
+
trigger?: PopoverProps['trigger'] | ((params: {
|
|
10
|
+
toggle: (newValue?: boolean) => void;
|
|
11
|
+
isOpen: boolean;
|
|
12
|
+
}) => ReactNode);
|
|
13
|
+
};
|
|
9
14
|
export interface ActionMenu extends FC<ActionMenuProps> {
|
|
10
15
|
/** Subcomponents */
|
|
11
16
|
Group: typeof ActionMenuGroup;
|
|
@@ -9,15 +9,35 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
9
9
|
}
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
|
-
import React from 'react';
|
|
13
12
|
import classnames from 'classnames';
|
|
13
|
+
import React from 'react';
|
|
14
14
|
import { Popover } from '../Popover';
|
|
15
15
|
import { ActionMenuGroup } from './ActionMenuGroup';
|
|
16
16
|
import { ActionMenuItem } from './ActionMenuItem';
|
|
17
17
|
export const ActionMenu = (_a) => {
|
|
18
18
|
var { children, className, direction = 'br', padding = null, // Disable Popover's default padding
|
|
19
|
-
wrapperClassName, width = 's' } = _a, props = __rest(_a, ["children", "className", "direction", "padding", "wrapperClassName", "width"]);
|
|
20
|
-
|
|
19
|
+
wrapperClassName, width = 's', open: openProp, trigger: triggerProp, onClickOutside } = _a, props = __rest(_a, ["children", "className", "direction", "padding", "wrapperClassName", "width", "open", "trigger", "onClickOutside"]);
|
|
20
|
+
const isControlled = typeof openProp !== 'undefined';
|
|
21
|
+
const [internalOpen, setInternalOpen] = React.useState(false);
|
|
22
|
+
const open = isControlled ? openProp : internalOpen;
|
|
23
|
+
const handleOpenToggle = (newValue) => {
|
|
24
|
+
if (!isControlled) {
|
|
25
|
+
setInternalOpen(typeof newValue === 'boolean' ? newValue : (prev) => !prev);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const handleClickOutside = () => {
|
|
29
|
+
if (!isControlled) {
|
|
30
|
+
setInternalOpen(false);
|
|
31
|
+
}
|
|
32
|
+
onClickOutside === null || onClickOutside === void 0 ? void 0 : onClickOutside();
|
|
33
|
+
};
|
|
34
|
+
const trigger = typeof triggerProp === 'function'
|
|
35
|
+
? triggerProp({
|
|
36
|
+
isOpen: open,
|
|
37
|
+
toggle: handleOpenToggle,
|
|
38
|
+
})
|
|
39
|
+
: triggerProp;
|
|
40
|
+
return (React.createElement(Popover, Object.assign({ className: classnames(className, 'ActionMenu__OverlayWrapper'), wrapperClassName: classnames(wrapperClassName, 'ActionMenu__TriggerWrapper'), popoverContentClassName: "ActionMenu", direction: direction, padding: padding, portal: true, width: width, "data-anvil-component": "ActionMenu", trigger: trigger, open: open, onClickOutside: handleClickOutside }, props), children));
|
|
21
41
|
};
|
|
22
42
|
ActionMenu.Group = ActionMenuGroup;
|
|
23
43
|
ActionMenu.Item = ActionMenuItem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionMenu.js","sourceRoot":"","sources":["../../../src/components/ActionMenu/ActionMenu.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ActionMenu.js","sourceRoot":"","sources":["../../../src/components/ActionMenu/ActionMenu.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAwB,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAgB,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAoBlD,MAAM,CAAC,MAAM,UAAU,GAAe,CAAC,EAWtC,EAAE,EAAE;QAXkC,EACtC,QAAQ,EACR,SAAS,EACT,SAAS,GAAG,IAAI,EAChB,OAAO,GAAG,IAAI,EAAE,oCAAoC;IACpD,gBAAgB,EAChB,KAAK,GAAG,GAAG,EACX,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,WAAW,EACpB,cAAc,OAEd,EADG,KAAK,cAV8B,mHAWtC,CADQ;IAER,MAAM,YAAY,GAAG,OAAO,QAAQ,KAAK,WAAW,CAAC;IACrD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;IAEpD,MAAM,gBAAgB,GAAG,CAAC,QAAkB,EAAE,EAAE;QAC/C,IAAI,CAAC,YAAY,EAAE;YAClB,eAAe,CACd,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAC1D,CAAC;SACF;IACF,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC/B,IAAI,CAAC,YAAY,EAAE;YAClB,eAAe,CAAC,KAAK,CAAC,CAAC;SACvB;QACD,cAAc,aAAd,cAAc,uBAAd,cAAc,EAAI,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,OAAO,GACZ,OAAO,WAAW,KAAK,UAAU;QAChC,CAAC,CAAC,WAAW,CAAC;YACZ,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,gBAAgB;SACvB,CAAC;QACJ,CAAC,CAAC,WAAW,CAAC;IAEhB,OAAO,CACN,oBAAC,OAAO,kBACP,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,4BAA4B,CAAC,EAC9D,gBAAgB,EAAE,UAAU,CAC3B,gBAAgB,EAChB,4BAA4B,CAC5B,EACD,uBAAuB,EAAC,YAAY,EACpC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,MAAM,QACN,KAAK,EAAE,KAAK,0BACS,YAAY,EACjC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,cAAc,EAAE,kBAAkB,IAC9B,KAAK,GAER,QAAQ,CACA,CACV,CAAC;AACH,CAAC,CAAC;AAEF,UAAU,CAAC,KAAK,GAAG,eAAe,CAAC;AACnC,UAAU,CAAC,IAAI,GAAG,cAAc,CAAC","sourcesContent":["import classnames from 'classnames';\nimport React, { FC, ReactNode } from 'react';\n\nimport { Popover, PopoverProps } from '../Popover';\nimport { ActionMenuGroup } from './ActionMenuGroup';\nimport { ActionMenuItem } from './ActionMenuItem';\n\n/**\n * ActionMenu properties\n */\nexport type ActionMenuProps = Omit<PopoverProps, 'trigger'> & {\n\ttrigger?:\n\t\t| PopoverProps['trigger']\n\t\t| ((params: {\n\t\t\t\ttoggle: (newValue?: boolean) => void;\n\t\t\t\tisOpen: boolean;\n\t\t }) => ReactNode);\n};\n\nexport interface ActionMenu extends FC<ActionMenuProps> {\n\t/** Subcomponents */\n\tGroup: typeof ActionMenuGroup;\n\tItem: typeof ActionMenuItem;\n}\n\nexport const ActionMenu: ActionMenu = ({\n\tchildren,\n\tclassName,\n\tdirection = 'br',\n\tpadding = null, // Disable Popover's default padding\n\twrapperClassName,\n\twidth = 's',\n\topen: openProp,\n\ttrigger: triggerProp,\n\tonClickOutside,\n\t...props\n}) => {\n\tconst isControlled = typeof openProp !== 'undefined';\n\tconst [internalOpen, setInternalOpen] = React.useState(false);\n\tconst open = isControlled ? openProp : internalOpen;\n\n\tconst handleOpenToggle = (newValue?: boolean) => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalOpen(\n\t\t\t\ttypeof newValue === 'boolean' ? newValue : (prev) => !prev\n\t\t\t);\n\t\t}\n\t};\n\n\tconst handleClickOutside = () => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalOpen(false);\n\t\t}\n\t\tonClickOutside?.();\n\t};\n\n\tconst trigger =\n\t\ttypeof triggerProp === 'function'\n\t\t\t? triggerProp({\n\t\t\t\t\tisOpen: open,\n\t\t\t\t\ttoggle: handleOpenToggle,\n\t\t\t })\n\t\t\t: triggerProp;\n\n\treturn (\n\t\t<Popover\n\t\t\tclassName={classnames(className, 'ActionMenu__OverlayWrapper')}\n\t\t\twrapperClassName={classnames(\n\t\t\t\twrapperClassName,\n\t\t\t\t'ActionMenu__TriggerWrapper'\n\t\t\t)}\n\t\t\tpopoverContentClassName=\"ActionMenu\"\n\t\t\tdirection={direction}\n\t\t\tpadding={padding}\n\t\t\tportal\n\t\t\twidth={width}\n\t\t\tdata-anvil-component=\"ActionMenu\"\n\t\t\ttrigger={trigger}\n\t\t\topen={open}\n\t\t\tonClickOutside={handleClickOutside}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</Popover>\n\t);\n};\n\nActionMenu.Group = ActionMenuGroup;\nActionMenu.Item = ActionMenuItem;\n"]}
|
|
@@ -4,7 +4,7 @@ import { BackLink } from './BackLink';
|
|
|
4
4
|
describe('BackLink', () => {
|
|
5
5
|
beforeEach(() => jest.spyOn(console, 'error'));
|
|
6
6
|
it('should be an anchor element if href attribute exists', () => {
|
|
7
|
-
const { getByRole } = render(React.createElement(BackLink, { href: "https://anvil.servicetitan.com" }, "Website"));
|
|
7
|
+
const { getByRole } = render(React.createElement(BackLink, { href: "https://v1.anvil.servicetitan.com" }, "Website"));
|
|
8
8
|
const link = getByRole('link');
|
|
9
9
|
expect(link).not.toHaveAttribute('type');
|
|
10
10
|
expect(link.tagName).toBe('A');
|
|
@@ -16,7 +16,7 @@ describe('BackLink', () => {
|
|
|
16
16
|
expect(link.tagName).toBe('BUTTON');
|
|
17
17
|
});
|
|
18
18
|
it('should pass through data automation attributes', () => {
|
|
19
|
-
const { container } = render(React.createElement(BackLink, { href: "https://anvil.servicetitan.com", "data-auto-sel": "automation-selector" }, "Website"));
|
|
19
|
+
const { container } = render(React.createElement(BackLink, { href: "https://v1.anvil.servicetitan.com", "data-auto-sel": "automation-selector" }, "Website"));
|
|
20
20
|
const element = container.querySelector('[data-auto-sel="automation-selector"]');
|
|
21
21
|
expect(element).not.toBeNull();
|
|
22
22
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackLink.test.js","sourceRoot":"","sources":["../../../src/components/BackLink/BackLink.test.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACzB,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/C,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC/D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC3B,oBAAC,QAAQ,IAAC,IAAI,EAAC,
|
|
1
|
+
{"version":3,"file":"BackLink.test.js","sourceRoot":"","sources":["../../../src/components/BackLink/BackLink.test.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACzB,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/C,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC/D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC3B,oBAAC,QAAQ,IAAC,IAAI,EAAC,mCAAmC,cAEvC,CACX,CAAC;QAEF,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAE/B,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QACjE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC3B,oBAAC,QAAQ,IAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,cAAoB,CAC/C,CAAC;QAEF,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEjC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACzD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC3B,oBAAC,QAAQ,IACR,IAAI,EAAC,mCAAmC,mBAC1B,qBAAqB,cAGzB,CACX,CAAC;QAEF,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CACtC,uCAAuC,CACvC,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import React from 'react';\nimport { render } from '@testing-library/react';\nimport { BackLink } from './BackLink';\n\ndescribe('BackLink', () => {\n\tbeforeEach(() => jest.spyOn(console, 'error'));\n\n\tit('should be an anchor element if href attribute exists', () => {\n\t\tconst { getByRole } = render(\n\t\t\t<BackLink href=\"https://v1.anvil.servicetitan.com\">\n\t\t\t\tWebsite\n\t\t\t</BackLink>\n\t\t);\n\n\t\tconst link = getByRole('link');\n\n\t\texpect(link).not.toHaveAttribute('type');\n\t\texpect(link.tagName).toBe('A');\n\t});\n\n\tit('should be a button element if no href attribute exists', () => {\n\t\tconst { getByRole } = render(\n\t\t\t<BackLink onClick={() => {}}>Website</BackLink>\n\t\t);\n\n\t\tconst link = getByRole('button');\n\n\t\texpect(link).not.toHaveAttribute('type', 'button');\n\t\texpect(link.tagName).toBe('BUTTON');\n\t});\n\n\tit('should pass through data automation attributes', () => {\n\t\tconst { container } = render(\n\t\t\t<BackLink\n\t\t\t\thref=\"https://v1.anvil.servicetitan.com\"\n\t\t\t\tdata-auto-sel=\"automation-selector\"\n\t\t\t>\n\t\t\t\tWebsite\n\t\t\t</BackLink>\n\t\t);\n\n\t\tconst element = container.querySelector(\n\t\t\t'[data-auto-sel=\"automation-selector\"]'\n\t\t);\n\n\t\texpect(element).not.toBeNull();\n\t});\n});\n"]}
|
|
@@ -10,7 +10,7 @@ describe('Button', () => {
|
|
|
10
10
|
expect(button.tagName).toBe('BUTTON');
|
|
11
11
|
});
|
|
12
12
|
it('should be an anchor element if href attribute exists', () => {
|
|
13
|
-
const { getByRole } = render(React.createElement(Button, { href: "https://anvil.servicetitan.com" }, "Label"));
|
|
13
|
+
const { getByRole } = render(React.createElement(Button, { href: "https://v1.anvil.servicetitan.com" }, "Label"));
|
|
14
14
|
const button = getByRole('button');
|
|
15
15
|
expect(button).not.toHaveAttribute('type');
|
|
16
16
|
expect(button.tagName).toBe('A');
|
|
@@ -30,7 +30,7 @@ describe('Button', () => {
|
|
|
30
30
|
it('should throw error if attributes and props are mismatched', () => {
|
|
31
31
|
expect(() => {
|
|
32
32
|
console.error = jest.fn(); // Prevent actual console.error from showing up in command line
|
|
33
|
-
render(React.createElement(Button, { el: "span", href: "https://anvil.servicetitan.com" }, "Label"));
|
|
33
|
+
render(React.createElement(Button, { el: "span", href: "https://v1.anvil.servicetitan.com" }, "Label"));
|
|
34
34
|
}).toThrowError();
|
|
35
35
|
});
|
|
36
36
|
it('should pass through data automation attributes', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.test.js","sourceRoot":"","sources":["../../../src/components/Button/Button.test.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACvB,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/C,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC1D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,oBAAC,MAAM,gBAAe,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEnC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC/D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC3B,oBAAC,MAAM,IAAC,IAAI,EAAC,
|
|
1
|
+
{"version":3,"file":"Button.test.js","sourceRoot":"","sources":["../../../src/components/Button/Button.test.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACvB,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/C,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC1D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,oBAAC,MAAM,gBAAe,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEnC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC/D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC3B,oBAAC,MAAM,IAAC,IAAI,EAAC,mCAAmC,YAAe,CAC/D,CAAC;QAEF,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEnC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACtD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,oBAAC,MAAM,IAAC,EAAE,EAAC,MAAM,YAAe,CAAC,CAAC;QAE/D,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEnC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,GAAG,EAAE;YACX,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,+DAA+D;YAC1F,MAAM,CACL,oBAAC,MAAM,IAAC,EAAE,EAAC,MAAM,EAAC,IAAI,EAAC,QAAQ,YAEtB,CACT,CAAC;QACH,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,GAAG,EAAE;YACX,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,+DAA+D;YAC1F,MAAM,CACL,oBAAC,MAAM,IAAC,EAAE,EAAC,MAAM,EAAC,IAAI,EAAC,mCAAmC,YAEjD,CACT,CAAC;QACH,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACzD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC3B,oBAAC,MAAM,qBAAe,qBAAqB,YAAe,CAC1D,CAAC;QAEF,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CACtC,uCAAuC,CACvC,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import React from 'react';\nimport { render } from '@testing-library/react';\nimport { Button } from './Button';\n\ndescribe('Button', () => {\n\tbeforeEach(() => jest.spyOn(console, 'error'));\n\n\tit('should be a button element with type by default', () => {\n\t\tconst { getByRole } = render(<Button>Label</Button>);\n\n\t\tconst button = getByRole('button');\n\n\t\texpect(button).toHaveAttribute('type', 'button');\n\t\texpect(button.tagName).toBe('BUTTON');\n\t});\n\n\tit('should be an anchor element if href attribute exists', () => {\n\t\tconst { getByRole } = render(\n\t\t\t<Button href=\"https://v1.anvil.servicetitan.com\">Label</Button>\n\t\t);\n\n\t\tconst button = getByRole('button');\n\n\t\texpect(button).not.toHaveAttribute('type');\n\t\texpect(button.tagName).toBe('A');\n\t});\n\n\tit('should be a span element if el prop was set', () => {\n\t\tconst { getByRole } = render(<Button el=\"span\">Label</Button>);\n\n\t\tconst button = getByRole('button');\n\n\t\texpect(button).not.toHaveAttribute('type');\n\t\texpect(button.tagName).toBe('SPAN');\n\t});\n\n\tit('should throw error if attributes and props are mismatched', () => {\n\t\texpect(() => {\n\t\t\tconsole.error = jest.fn(); // Prevent actual console.error from showing up in command line\n\t\t\trender(\n\t\t\t\t<Button el=\"span\" type=\"button\">\n\t\t\t\t\tLabel\n\t\t\t\t</Button>\n\t\t\t);\n\t\t}).toThrowError();\n\t});\n\n\tit('should throw error if attributes and props are mismatched', () => {\n\t\texpect(() => {\n\t\t\tconsole.error = jest.fn(); // Prevent actual console.error from showing up in command line\n\t\t\trender(\n\t\t\t\t<Button el=\"span\" href=\"https://v1.anvil.servicetitan.com\">\n\t\t\t\t\tLabel\n\t\t\t\t</Button>\n\t\t\t);\n\t\t}).toThrowError();\n\t});\n\n\tit('should pass through data automation attributes', () => {\n\t\tconst { container } = render(\n\t\t\t<Button data-auto-sel=\"automation-selector\">Label</Button>\n\t\t);\n\n\t\tconst element = container.querySelector(\n\t\t\t'[data-auto-sel=\"automation-selector\"]'\n\t\t);\n\n\t\texpect(element).not.toBeNull();\n\t});\n});\n"]}
|
|
@@ -32,7 +32,9 @@ export const DatePicker = React.forwardRef((props, ref) => {
|
|
|
32
32
|
const calendarRef = useRef(null);
|
|
33
33
|
const inputRef = useRef(null);
|
|
34
34
|
// Effects
|
|
35
|
-
useEffect(() =>
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
open && openCalendar();
|
|
37
|
+
}, [open]); // eslint-disable-line
|
|
36
38
|
useEffect(() => {
|
|
37
39
|
const next = toDateObj({ date: value, tz });
|
|
38
40
|
if (date.isEqualDate(next))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePicker.js","sourceRoot":"","sources":["../../../src/components/DatePicker/DatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { FC, useContext, useEffect, useRef } from 'react';\nimport classnames from 'classnames';\nimport {\n\tCalendar,\n\tCalendarProps,\n\tCalendarChangeEvent,\n\tCalendarCell,\n\tCalendarCellProps,\n} from '@progress/kendo-react-dateinputs';\nimport { Popover, PopoverProps } from '../Popover';\nimport { Icon } from '../Icon';\nimport { keys } from '../../utilities/keyCodes';\nimport { InputDateMask, InputDateMaskProps } from './InputDateMask';\nimport { InputPropsStrict } from '../Input';\nimport { TimezoneContext } from '../../utilities/TimezoneProvider';\nimport { FormFieldContext } from '../../components/FormField';\n\nimport {\n\tDateObj,\n\ttoDateObj,\n\ttoTimeZone,\n\tfromTimeZone,\n\ttoFormat,\n\tcompareObj,\n\tinvalidDate,\n\tisValidDate,\n} from './utils/utils';\nimport { PopperProps } from '../../internal';\n\nexport interface DatePickerPropsStrict\n\textends Pick<\n\t\tPopoverProps,\n\t\t'autoFlipVertically' | 'autoFlipHorizontally' | 'direction'\n\t> {\n\t/** Use custom component as a Calendar */\n\tcalendar?: React.ComponentType<CalendarProps>;\n\n\t/** Disabled state */\n\tdisabled?: InputDateMaskProps['disabled'];\n\n\t/** Error state */\n\terror?: InputDateMaskProps['error'];\n\n\t/** Character to use with partially complete dates. Default is '_' */\n\tmaskChar?: InputDateMaskProps['maskChar'];\n\n\t/** Object of InputDateMask props */\n\tmaskProps?: Omit<\n\t\tInputDateMaskProps,\n\t\t| 'onChange'\n\t\t| 'value'\n\t\t| 'minDate'\n\t\t| 'maxDate'\n\t\t| 'size'\n\t\t| 'maskChar'\n\t\t| 'placeholder'\n\t\t| 'error'\n\t>;\n\n\t/** Maximum date allowed */\n\tmaxDate?: InputDateMaskProps['maxDate'];\n\n\t/** Minimum date allowed */\n\tminDate?: InputDateMaskProps['minDate'];\n\n\t/** Input size */\n\tsize?: InputDateMaskProps['size'];\n\n\t/** Placeholder value */\n\tplaceholder?: InputDateMaskProps['placeholder'];\n\n\t/** Currently selected date */\n\tvalue?: Calendar['value'] | string;\n\n\t/** Opens calendar */\n\topen?: boolean;\n\n\t/** Returns ISO string instead of JS Date object */\n\tisoFormat?: boolean;\n\n\tinput?: {\n\t\t/** Called on every change of input text */\n\t\tonChange?: InputPropsStrict['onChange'];\n\n\t\t/** Called on blur of the input */\n\t\tonBlur?: (event: React.FocusEvent<HTMLElement>) => void;\n\t};\n\n\t/** Props to be passed to the portaled div */\n\tportalDataAttributes?: PopperProps['portalDataAttributes'];\n\n\t/** Called on DatePicker's blur event */\n\tonBlur?: (value: Date | string | undefined, data?: DateObj) => void;\n\n\t/** Called on every meaningful date change */\n\tonChange?: (value: Date | string | undefined, data?: DateObj) => void;\n\n\t/** Called on every open and close action */\n\tonOpenChange?: (open: boolean) => void;\n\n\t/** This will override default trigger component */\n\ttrigger?: (props: CustomTriggerProps) => React.ReactNode;\n}\n\ninterface CustomTriggerProps {\n\t/** Returns internal trigger value */\n\tvalue: DatePickerProps['value'] | any;\n\n\t/** Returns internal trigger prop */\n\tonClick?: () => void;\n\n\t/** Returns internal open state */\n\topen: DatePickerProps['open'];\n\n\t/** Returns interal error state */\n\terror: DatePickerProps['error'];\n}\n\nexport interface DatePickerProps extends DatePickerPropsStrict {\n\t/** Unstrict Props */\n\t[propName: string]: any;\n}\n\nexport const DatePicker: FC<DatePickerProps> = React.forwardRef(\n\t(props, ref: React.RefObject<any>) => {\n\t\tconst {\n\t\t\tdisabled,\n\t\t\tcalendar: CustomCalendar,\n\t\t\tdirection = 'br',\n\t\t\terror,\n\t\t\tmaskChar,\n\t\t\tmaskProps,\n\t\t\tmaxDate,\n\t\t\tminDate,\n\t\t\tisoFormat,\n\t\t\tinput: inputProps,\n\t\t\tonBlur,\n\t\t\tonChange,\n\t\t\tonOpenChange,\n\t\t\topen,\n\t\t\tplaceholder,\n\t\t\trequired,\n\t\t\tsize,\n\t\t\ttrigger,\n\t\t\tvalue,\n\t\t\tportalDataAttributes,\n\t\t\t...rest\n\t\t} = props;\n\t\tconst tz = useContext(TimezoneContext);\n\t\tconst minTZ = toTimeZone(minDate, tz); // In timezone (with shift)\n\t\tconst maxTZ = toTimeZone(maxDate, tz); // In timezone (with shift)\n\t\tconst todayTZ = toTimeZone(new Date(), tz, { startOfDay: true }); // In timezone (with shift)\n\n\t\t// State\n\t\tconst [date, setDate] = React.useState<DateObj>(\n\t\t\ttoDateObj({ date: value, tz })\n\t\t);\n\t\tconst [showCalendar, setShowCalendar] = React.useState(open);\n\n\t\t// Refs for focusing\n\t\tconst calendarRef = useRef(null);\n\t\tconst inputRef = useRef(null);\n\n\t\t// Effects\n\t\tuseEffect(() => open && openCalendar(), [open]); // eslint-disable-line\n\t\tuseEffect(() => {\n\t\t\tconst next = toDateObj({ date: value, tz });\n\n\t\t\tif (date.isEqualDate(next)) return;\n\n\t\t\tsetDate(next);\n\t\t\tonChangeReturn(next);\n\t\t}, [compareObj(value), isoFormat, tz]); // eslint-disable-line\n\n\t\t// Handlers\n\t\tconst openCalendar = () => {\n\t\t\t!showCalendar && setShowCalendar(true);\n\t\t\t!showCalendar && onOpenChange?.(true);\n\t\t};\n\t\tconst closeCalendar = () => {\n\t\t\tshowCalendar && setShowCalendar(false);\n\t\t\tshowCalendar && onOpenChange?.(false);\n\t\t};\n\t\tconst toggleCalendar = () =>\n\t\t\tshowCalendar ? closeCalendar() : openCalendar();\n\n\t\tconst handleKeyDown = (e: React.KeyboardEvent) => {\n\t\t\tconst { key } = e;\n\n\t\t\tif (key === keys.esc) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcloseCalendar();\n\t\t\t\t!trigger && inputRef.current?.focus();\n\t\t\t}\n\n\t\t\tif ([keys.space, keys.down].includes(key)) {\n\t\t\t\te.preventDefault();\n\t\t\t\topenCalendar();\n\t\t\t\tcalendarRef?.current?.focus();\n\t\t\t}\n\n\t\t\tif (showCalendar && key === keys.tab) closeCalendar();\n\t\t};\n\n\t\tconst handleCalendarChange = (e: CalendarChangeEvent) => {\n\t\t\tlet calendarDate = fromTimeZone(e.target?.value, tz); // Local timezone\n\n\t\t\tif (e.nativeEvent?.target?.className === 'k-nav-today')\n\t\t\t\tcalendarDate = fromTimeZone(todayTZ, tz); // Local timezone\n\n\t\t\tconst next = toDateObj({ date: calendarDate, tz });\n\n\t\t\tif (!date.isEqual(next)) {\n\t\t\t\te.syntheticEvent.stopPropagation(); // Keeps focus on input after click on calendar\n\t\t\t\tsetDate(next);\n\t\t\t\tonChangeReturn(next);\n\t\t\t}\n\n\t\t\tcloseCalendar();\n\t\t\t!trigger && inputRef.current?.focus(); // Sets focus back on enter keypress on calendar's date\n\t\t};\n\n\t\tconst handleMaskChange = (val: Date | undefined, data?: any) => {\n\t\t\tconst next = toDateObj({\n\t\t\t\tdate: val ? fromTimeZone(val, tz) : val, // As mask val is already in tz, sending it back to local tz\n\t\t\t\ttz,\n\t\t\t\tinvalidReason: data?.invalidReason,\n\t\t\t});\n\n\t\t\tif (!date.isEqual(next)) {\n\t\t\t\tsetDate(next);\n\t\t\t\tonChangeReturn(next);\n\t\t\t}\n\t\t};\n\n\t\tconst onChangeReturn = (val: DateObj | undefined) =>\n\t\t\tonChange?.(getReturnDate(val), val);\n\n\t\tconst getReturnDate = (val: DateObj | undefined) => {\n\t\t\tif (!val || !val.dateTime) return undefined; // Empty input\n\t\t\tif (!val.isValid)\n\t\t\t\treturn isoFormat ? invalidDate.toString() : invalidDate; // Invalid Date\n\t\t\treturn isoFormat ? val.toISO?.() : val.toJSDate(); // Good value\n\t\t};\n\n\t\tconst handleMaskBlur = (val: Date | undefined, data?: any) => {\n\t\t\tconst current = toDateObj({\n\t\t\t\tdate: val ? fromTimeZone(val, tz) : val, // As mask val is already in tz, sending it back to local tz\n\t\t\t\ttz,\n\t\t\t\tinvalidReason: data?.invalidReason,\n\t\t\t});\n\n\t\t\tonBlur?.(getReturnDate(current), current);\n\t\t};\n\n\t\t// Internal components\n\t\tconst maskValue = () => {\n\t\t\tif (typeof date?.dateTime === 'undefined') return undefined; // No entry (empty)\n\t\t\t// Entry is valid and within min-max\n\t\t\tif (date?.isValid) return toTimeZone(date.toJSDate(), tz); // In timezone (with shift)\n\t\t\tif (!date?.isValid || date?.invalidReason) return invalidDate; // Entry is not full or out of min-max range\n\t\t\tconsole.warn(\n\t\t\t\t'@servicetitan/design-system: Something wrong with DatePicker, dateObj received:',\n\t\t\t\tdate\n\t\t\t);\n\t\t\treturn undefined;\n\t\t};\n\n\t\tconst inputMaskProps = {\n\t\t\tdisabled,\n\t\t\terror,\n\t\t\tmaskChar,\n\t\t\tmaxDate: maxTZ, // In timezone (with shift)\n\t\t\tminDate: minTZ, // In timezone (with shift)\n\t\t\tonBlur: handleMaskBlur,\n\t\t\tonChange: handleMaskChange,\n\t\t\tplaceholder,\n\t\t\trequired,\n\t\t\tsize,\n\t\t\tvalue: maskValue(),\n\t\t\tinput: inputProps,\n\t\t\t...maskProps,\n\t\t};\n\n\t\t// custom cell to override the today highlight to match timezone today\n\t\tconst customCell = (props: CalendarCellProps) => {\n\t\t\tif (toFormat(props.value) === toFormat(todayTZ)) {\n\t\t\t\treturn <CalendarCell {...props} isToday />;\n\t\t\t}\n\t\t\treturn <CalendarCell {...props} isToday={false} />;\n\t\t};\n\n\t\tconst calendarProps = {\n\t\t\tvalue: date.isValid\n\t\t\t\t? date.toJSDate() // Local timezone\n\t\t\t\t: null,\n\t\t\tmax: isValidDate(maxDate) ? maxDate : undefined, // Local timezone\n\t\t\tmin: isValidDate(minDate) ? minDate : undefined, // Local timezone\n\t\t\tonChange: handleCalendarChange,\n\t\t\tref: calendarRef,\n\t\t\tcell: customCell,\n\t\t};\n\n\t\tconst customTrigger = trigger?.({\n\t\t\tvalue: date.isValid\n\t\t\t\t? date.toJSDate() // Local timezone\n\t\t\t\t: null,\n\t\t\tonClick: toggleCalendar,\n\t\t\topen: showCalendar,\n\t\t\terror,\n\t\t});\n\n\t\tconst { labelFor: inputId } = React.useContext(FormFieldContext);\n\t\tconst inputMask = (\n\t\t\t<InputDateMask\n\t\t\t\t{...inputMaskProps}\n\t\t\t\tid={inputId}\n\t\t\t\tinputRef={inputRef}\n\t\t\t\tcalendarRef={calendarRef}\n\t\t\t\tclassName=\"DatePicker__input\"\n\t\t\t\tonClick={openCalendar}\n\t\t\t\tshortLabel={\n\t\t\t\t\t<Icon\n\t\t\t\t\t\tname=\"event\"\n\t\t\t\t\t\tclassName=\"DatePicker__icon\"\n\t\t\t\t\t\tonClick={toggleCalendar}\n\t\t\t\t\t\taria-label=\"toggle calendar\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tfluid\n\t\t\t\tdata-anvil-component=\"DatePicker\"\n\t\t\t/>\n\t\t);\n\n\t\tconst DatePickerClasses = classnames('DatePicker', {\n\t\t\t'DatePicker--disabled': disabled,\n\t\t\t'DatePicker--open': showCalendar,\n\t\t\t[`DatePicker--${size}`]: size,\n\t\t});\n\n\t\treturn (\n\t\t\t<Popover\n\t\t\t\tportal\n\t\t\t\twrapperClassName={DatePickerClasses}\n\t\t\t\topen={showCalendar}\n\t\t\t\tpopoverContentClassName=\"DatePicker__calendar\"\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tdirection={direction}\n\t\t\t\tpadding={null}\n\t\t\t\twidth=\"auto\"\n\t\t\t\tref={ref}\n\t\t\t\tonClickOutside={closeCalendar}\n\t\t\t\ttrigger={customTrigger ?? inputMask}\n\t\t\t\tportalDataAttributes={portalDataAttributes}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t{CustomCalendar ? (\n\t\t\t\t\t<CustomCalendar {...calendarProps} />\n\t\t\t\t) : (\n\t\t\t\t\t<Calendar {...calendarProps} />\n\t\t\t\t)}\n\t\t\t</Popover>\n\t\t);\n\t}\n);\n"]}
|
|
1
|
+
{"version":3,"file":"DatePicker.js","sourceRoot":"","sources":["../../../src/components/DatePicker/DatePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAM,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EACN,QAAQ,EAGR,YAAY,GAEZ,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAgB,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,aAAa,EAAsB,MAAM,iBAAiB,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAEN,SAAS,EACT,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,WAAW,EACX,WAAW,GACX,MAAM,eAAe,CAAC;AAiGvB,MAAM,CAAC,MAAM,UAAU,GAAwB,KAAK,CAAC,UAAU,CAC9D,CAAC,KAAK,EAAE,GAAyB,EAAE,EAAE;IACpC,MAAM,EACL,QAAQ,EACR,QAAQ,EAAE,cAAc,EACxB,SAAS,GAAG,IAAI,EAChB,KAAK,EACL,QAAQ,EACR,SAAS,EACT,OAAO,EACP,OAAO,EACP,SAAS,EACT,KAAK,EAAE,UAAU,EACjB,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,KAAK,EACL,oBAAoB,KAEjB,KAAK,EADL,IAAI,UACJ,KAAK,EAtBH,gPAsBL,CAAQ,CAAC;IACV,MAAM,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,2BAA2B;IAClE,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,2BAA2B;IAClE,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,2BAA2B;IAE7F,QAAQ;IACR,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CACrC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAC9B,CAAC;IACF,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7D,oBAAoB;IACpB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE9B,UAAU;IACV,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,IAAI,YAAY,EAAE,CAAC;IACxB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,sBAAsB;IAElC,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAE5C,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAAE,OAAO;QAEnC,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,cAAc,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,sBAAsB;IAE9D,WAAW;IACX,MAAM,YAAY,GAAG,GAAG,EAAE;QACzB,CAAC,YAAY,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,YAAY,KAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAG,IAAI,CAAC,CAAA,CAAC;IACvC,CAAC,CAAC;IACF,MAAM,aAAa,GAAG,GAAG,EAAE;QAC1B,YAAY,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QACvC,YAAY,KAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAG,KAAK,CAAC,CAAA,CAAC;IACvC,CAAC,CAAC;IACF,MAAM,cAAc,GAAG,GAAG,EAAE,CAC3B,YAAY,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;IAEjD,MAAM,aAAa,GAAG,CAAC,CAAsB,EAAE,EAAE;;QAChD,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAElB,IAAI,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE;YACrB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,aAAa,EAAE,CAAC;YAChB,CAAC,OAAO,KAAI,MAAA,QAAQ,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAA,CAAC;SACtC;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC1C,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,YAAY,EAAE,CAAC;YACf,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,0CAAE,KAAK,EAAE,CAAC;SAC9B;QAED,IAAI,YAAY,IAAI,GAAG,KAAK,IAAI,CAAC,GAAG;YAAE,aAAa,EAAE,CAAC;IACvD,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,CAAC,CAAsB,EAAE,EAAE;;QACvD,IAAI,YAAY,GAAG,YAAY,CAAC,MAAA,CAAC,CAAC,MAAM,0CAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB;QAEvE,IAAI,CAAA,MAAA,MAAA,CAAC,CAAC,WAAW,0CAAE,MAAM,0CAAE,SAAS,MAAK,aAAa;YACrD,YAAY,GAAG,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB;QAE5D,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;QAEnD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACxB,CAAC,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,+CAA+C;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC;YACd,cAAc,CAAC,IAAI,CAAC,CAAC;SACrB;QAED,aAAa,EAAE,CAAC;QAChB,CAAC,OAAO,KAAI,MAAA,QAAQ,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAA,CAAC,CAAC,uDAAuD;IAC/F,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,GAAqB,EAAE,IAAU,EAAE,EAAE;QAC9D,MAAM,IAAI,GAAG,SAAS,CAAC;YACtB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG;YACvC,EAAE;YACF,aAAa,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,CAAC;YACd,cAAc,CAAC,IAAI,CAAC,CAAC;SACrB;IACF,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,GAAwB,EAAE,EAAE,CACnD,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAErC,MAAM,aAAa,GAAG,CAAC,GAAwB,EAAE,EAAE;;QAClD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC,CAAC,cAAc;QAC3D,IAAI,CAAC,GAAG,CAAC,OAAO;YACf,OAAO,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,eAAe;QACzE,OAAO,SAAS,CAAC,CAAC,CAAC,MAAA,GAAG,CAAC,KAAK,+CAAT,GAAG,CAAU,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,aAAa;IACjE,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,GAAqB,EAAE,IAAU,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,SAAS,CAAC;YACzB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG;YACvC,EAAE;YACF,aAAa,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa;SAClC,CAAC,CAAC;QAEH,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,aAAa,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,sBAAsB;IACtB,MAAM,SAAS,GAAG,GAAG,EAAE;QACtB,IAAI,OAAO,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAA,KAAK,WAAW;YAAE,OAAO,SAAS,CAAC,CAAC,mBAAmB;QAChF,oCAAoC;QACpC,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO;YAAE,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,2BAA2B;QACtF,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAA,KAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAA;YAAE,OAAO,WAAW,CAAC,CAAC,4CAA4C;QAC3G,OAAO,CAAC,IAAI,CACX,iFAAiF,EACjF,IAAI,CACJ,CAAC;QACF,OAAO,SAAS,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,cAAc,mBACnB,QAAQ;QACR,KAAK;QACL,QAAQ,EACR,OAAO,EAAE,KAAK,EACd,OAAO,EAAE,KAAK,EACd,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,gBAAgB,EAC1B,WAAW;QACX,QAAQ;QACR,IAAI,EACJ,KAAK,EAAE,SAAS,EAAE,EAClB,KAAK,EAAE,UAAU,IACd,SAAS,CACZ,CAAC;IAEF,sEAAsE;IACtE,MAAM,UAAU,GAAG,CAAC,KAAwB,EAAE,EAAE;QAC/C,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,EAAE;YAChD,OAAO,oBAAC,YAAY,oBAAK,KAAK,IAAE,OAAO,UAAG,CAAC;SAC3C;QACD,OAAO,oBAAC,YAAY,oBAAK,KAAK,IAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpD,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG;QACrB,KAAK,EAAE,IAAI,CAAC,OAAO;YAClB,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,iBAAiB;YACnC,CAAC,CAAC,IAAI;QACP,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAC/C,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAC/C,QAAQ,EAAE,oBAAoB;QAC9B,GAAG,EAAE,WAAW;QAChB,IAAI,EAAE,UAAU;KAChB,CAAC;IAEF,MAAM,aAAa,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG;QAC/B,KAAK,EAAE,IAAI,CAAC,OAAO;YAClB,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,iBAAiB;YACnC,CAAC,CAAC,IAAI;QACP,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,YAAY;QAClB,KAAK;KACL,CAAC,CAAC;IAEH,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,CACjB,oBAAC,aAAa,oBACT,cAAc,IAClB,EAAE,EAAE,OAAO,EACX,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAC,mBAAmB,EAC7B,OAAO,EAAE,YAAY,EACrB,UAAU,EACT,oBAAC,IAAI,IACJ,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,kBAAkB,EAC5B,OAAO,EAAE,cAAc,gBACZ,iBAAiB,GAC3B,EAEH,KAAK,gCACgB,YAAY,IAChC,CACF,CAAC;IAEF,MAAM,iBAAiB,GAAG,UAAU,CAAC,YAAY,EAAE;QAClD,sBAAsB,EAAE,QAAQ;QAChC,kBAAkB,EAAE,YAAY;QAChC,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,IAAI;KAC7B,CAAC,CAAC;IAEH,OAAO,CACN,oBAAC,OAAO,kBACP,MAAM,QACN,gBAAgB,EAAE,iBAAiB,EACnC,IAAI,EAAE,YAAY,EAClB,uBAAuB,EAAC,sBAAsB,EAC9C,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,IAAI,EACb,KAAK,EAAC,MAAM,EACZ,GAAG,EAAE,GAAG,EACR,cAAc,EAAE,aAAa,EAC7B,OAAO,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,SAAS,EACnC,oBAAoB,EAAE,oBAAoB,IACtC,IAAI,GAEP,cAAc,CAAC,CAAC,CAAC,CACjB,oBAAC,cAAc,oBAAK,aAAa,EAAI,CACrC,CAAC,CAAC,CAAC,CACH,oBAAC,QAAQ,oBAAK,aAAa,EAAI,CAC/B,CACQ,CACV,CAAC;AACH,CAAC,CACD,CAAC","sourcesContent":["import React, { FC, useContext, useEffect, useRef } from 'react';\nimport classnames from 'classnames';\nimport {\n\tCalendar,\n\tCalendarProps,\n\tCalendarChangeEvent,\n\tCalendarCell,\n\tCalendarCellProps,\n} from '@progress/kendo-react-dateinputs';\nimport { Popover, PopoverProps } from '../Popover';\nimport { Icon } from '../Icon';\nimport { keys } from '../../utilities/keyCodes';\nimport { InputDateMask, InputDateMaskProps } from './InputDateMask';\nimport { InputPropsStrict } from '../Input';\nimport { TimezoneContext } from '../../utilities/TimezoneProvider';\nimport { FormFieldContext } from '../../components/FormField';\n\nimport {\n\tDateObj,\n\ttoDateObj,\n\ttoTimeZone,\n\tfromTimeZone,\n\ttoFormat,\n\tcompareObj,\n\tinvalidDate,\n\tisValidDate,\n} from './utils/utils';\nimport { PopperProps } from '../../internal';\n\nexport interface DatePickerPropsStrict\n\textends Pick<\n\t\tPopoverProps,\n\t\t'autoFlipVertically' | 'autoFlipHorizontally' | 'direction'\n\t> {\n\t/** Use custom component as a Calendar */\n\tcalendar?: React.ComponentType<CalendarProps>;\n\n\t/** Disabled state */\n\tdisabled?: InputDateMaskProps['disabled'];\n\n\t/** Error state */\n\terror?: InputDateMaskProps['error'];\n\n\t/** Character to use with partially complete dates. Default is '_' */\n\tmaskChar?: InputDateMaskProps['maskChar'];\n\n\t/** Object of InputDateMask props */\n\tmaskProps?: Omit<\n\t\tInputDateMaskProps,\n\t\t| 'onChange'\n\t\t| 'value'\n\t\t| 'minDate'\n\t\t| 'maxDate'\n\t\t| 'size'\n\t\t| 'maskChar'\n\t\t| 'placeholder'\n\t\t| 'error'\n\t>;\n\n\t/** Maximum date allowed */\n\tmaxDate?: InputDateMaskProps['maxDate'];\n\n\t/** Minimum date allowed */\n\tminDate?: InputDateMaskProps['minDate'];\n\n\t/** Input size */\n\tsize?: InputDateMaskProps['size'];\n\n\t/** Placeholder value */\n\tplaceholder?: InputDateMaskProps['placeholder'];\n\n\t/** Currently selected date */\n\tvalue?: Calendar['value'] | string;\n\n\t/** Opens calendar */\n\topen?: boolean;\n\n\t/** Returns ISO string instead of JS Date object */\n\tisoFormat?: boolean;\n\n\tinput?: {\n\t\t/** Called on every change of input text */\n\t\tonChange?: InputPropsStrict['onChange'];\n\n\t\t/** Called on blur of the input */\n\t\tonBlur?: (event: React.FocusEvent<HTMLElement>) => void;\n\t};\n\n\t/** Props to be passed to the portaled div */\n\tportalDataAttributes?: PopperProps['portalDataAttributes'];\n\n\t/** Called on DatePicker's blur event */\n\tonBlur?: (value: Date | string | undefined, data?: DateObj) => void;\n\n\t/** Called on every meaningful date change */\n\tonChange?: (value: Date | string | undefined, data?: DateObj) => void;\n\n\t/** Called on every open and close action */\n\tonOpenChange?: (open: boolean) => void;\n\n\t/** This will override default trigger component */\n\ttrigger?: (props: CustomTriggerProps) => React.ReactNode;\n}\n\ninterface CustomTriggerProps {\n\t/** Returns internal trigger value */\n\tvalue: DatePickerProps['value'] | any;\n\n\t/** Returns internal trigger prop */\n\tonClick?: () => void;\n\n\t/** Returns internal open state */\n\topen: DatePickerProps['open'];\n\n\t/** Returns interal error state */\n\terror: DatePickerProps['error'];\n}\n\nexport interface DatePickerProps extends DatePickerPropsStrict {\n\t/** Unstrict Props */\n\t[propName: string]: any;\n}\n\nexport const DatePicker: FC<DatePickerProps> = React.forwardRef(\n\t(props, ref: React.RefObject<any>) => {\n\t\tconst {\n\t\t\tdisabled,\n\t\t\tcalendar: CustomCalendar,\n\t\t\tdirection = 'br',\n\t\t\terror,\n\t\t\tmaskChar,\n\t\t\tmaskProps,\n\t\t\tmaxDate,\n\t\t\tminDate,\n\t\t\tisoFormat,\n\t\t\tinput: inputProps,\n\t\t\tonBlur,\n\t\t\tonChange,\n\t\t\tonOpenChange,\n\t\t\topen,\n\t\t\tplaceholder,\n\t\t\trequired,\n\t\t\tsize,\n\t\t\ttrigger,\n\t\t\tvalue,\n\t\t\tportalDataAttributes,\n\t\t\t...rest\n\t\t} = props;\n\t\tconst tz = useContext(TimezoneContext);\n\t\tconst minTZ = toTimeZone(minDate, tz); // In timezone (with shift)\n\t\tconst maxTZ = toTimeZone(maxDate, tz); // In timezone (with shift)\n\t\tconst todayTZ = toTimeZone(new Date(), tz, { startOfDay: true }); // In timezone (with shift)\n\n\t\t// State\n\t\tconst [date, setDate] = React.useState<DateObj>(\n\t\t\ttoDateObj({ date: value, tz })\n\t\t);\n\t\tconst [showCalendar, setShowCalendar] = React.useState(open);\n\n\t\t// Refs for focusing\n\t\tconst calendarRef = useRef(null);\n\t\tconst inputRef = useRef(null);\n\n\t\t// Effects\n\t\tuseEffect(() => {\n\t\t\topen && openCalendar();\n\t\t}, [open]); // eslint-disable-line\n\n\t\tuseEffect(() => {\n\t\t\tconst next = toDateObj({ date: value, tz });\n\n\t\t\tif (date.isEqualDate(next)) return;\n\n\t\t\tsetDate(next);\n\t\t\tonChangeReturn(next);\n\t\t}, [compareObj(value), isoFormat, tz]); // eslint-disable-line\n\n\t\t// Handlers\n\t\tconst openCalendar = () => {\n\t\t\t!showCalendar && setShowCalendar(true);\n\t\t\t!showCalendar && onOpenChange?.(true);\n\t\t};\n\t\tconst closeCalendar = () => {\n\t\t\tshowCalendar && setShowCalendar(false);\n\t\t\tshowCalendar && onOpenChange?.(false);\n\t\t};\n\t\tconst toggleCalendar = () =>\n\t\t\tshowCalendar ? closeCalendar() : openCalendar();\n\n\t\tconst handleKeyDown = (e: React.KeyboardEvent) => {\n\t\t\tconst { key } = e;\n\n\t\t\tif (key === keys.esc) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcloseCalendar();\n\t\t\t\t!trigger && inputRef.current?.focus();\n\t\t\t}\n\n\t\t\tif ([keys.space, keys.down].includes(key)) {\n\t\t\t\te.preventDefault();\n\t\t\t\topenCalendar();\n\t\t\t\tcalendarRef?.current?.focus();\n\t\t\t}\n\n\t\t\tif (showCalendar && key === keys.tab) closeCalendar();\n\t\t};\n\n\t\tconst handleCalendarChange = (e: CalendarChangeEvent) => {\n\t\t\tlet calendarDate = fromTimeZone(e.target?.value, tz); // Local timezone\n\n\t\t\tif (e.nativeEvent?.target?.className === 'k-nav-today')\n\t\t\t\tcalendarDate = fromTimeZone(todayTZ, tz); // Local timezone\n\n\t\t\tconst next = toDateObj({ date: calendarDate, tz });\n\n\t\t\tif (!date.isEqual(next)) {\n\t\t\t\te.syntheticEvent.stopPropagation(); // Keeps focus on input after click on calendar\n\t\t\t\tsetDate(next);\n\t\t\t\tonChangeReturn(next);\n\t\t\t}\n\n\t\t\tcloseCalendar();\n\t\t\t!trigger && inputRef.current?.focus(); // Sets focus back on enter keypress on calendar's date\n\t\t};\n\n\t\tconst handleMaskChange = (val: Date | undefined, data?: any) => {\n\t\t\tconst next = toDateObj({\n\t\t\t\tdate: val ? fromTimeZone(val, tz) : val, // As mask val is already in tz, sending it back to local tz\n\t\t\t\ttz,\n\t\t\t\tinvalidReason: data?.invalidReason,\n\t\t\t});\n\n\t\t\tif (!date.isEqual(next)) {\n\t\t\t\tsetDate(next);\n\t\t\t\tonChangeReturn(next);\n\t\t\t}\n\t\t};\n\n\t\tconst onChangeReturn = (val: DateObj | undefined) =>\n\t\t\tonChange?.(getReturnDate(val), val);\n\n\t\tconst getReturnDate = (val: DateObj | undefined) => {\n\t\t\tif (!val || !val.dateTime) return undefined; // Empty input\n\t\t\tif (!val.isValid)\n\t\t\t\treturn isoFormat ? invalidDate.toString() : invalidDate; // Invalid Date\n\t\t\treturn isoFormat ? val.toISO?.() : val.toJSDate(); // Good value\n\t\t};\n\n\t\tconst handleMaskBlur = (val: Date | undefined, data?: any) => {\n\t\t\tconst current = toDateObj({\n\t\t\t\tdate: val ? fromTimeZone(val, tz) : val, // As mask val is already in tz, sending it back to local tz\n\t\t\t\ttz,\n\t\t\t\tinvalidReason: data?.invalidReason,\n\t\t\t});\n\n\t\t\tonBlur?.(getReturnDate(current), current);\n\t\t};\n\n\t\t// Internal components\n\t\tconst maskValue = () => {\n\t\t\tif (typeof date?.dateTime === 'undefined') return undefined; // No entry (empty)\n\t\t\t// Entry is valid and within min-max\n\t\t\tif (date?.isValid) return toTimeZone(date.toJSDate(), tz); // In timezone (with shift)\n\t\t\tif (!date?.isValid || date?.invalidReason) return invalidDate; // Entry is not full or out of min-max range\n\t\t\tconsole.warn(\n\t\t\t\t'@servicetitan/design-system: Something wrong with DatePicker, dateObj received:',\n\t\t\t\tdate\n\t\t\t);\n\t\t\treturn undefined;\n\t\t};\n\n\t\tconst inputMaskProps = {\n\t\t\tdisabled,\n\t\t\terror,\n\t\t\tmaskChar,\n\t\t\tmaxDate: maxTZ, // In timezone (with shift)\n\t\t\tminDate: minTZ, // In timezone (with shift)\n\t\t\tonBlur: handleMaskBlur,\n\t\t\tonChange: handleMaskChange,\n\t\t\tplaceholder,\n\t\t\trequired,\n\t\t\tsize,\n\t\t\tvalue: maskValue(),\n\t\t\tinput: inputProps,\n\t\t\t...maskProps,\n\t\t};\n\n\t\t// custom cell to override the today highlight to match timezone today\n\t\tconst customCell = (props: CalendarCellProps) => {\n\t\t\tif (toFormat(props.value) === toFormat(todayTZ)) {\n\t\t\t\treturn <CalendarCell {...props} isToday />;\n\t\t\t}\n\t\t\treturn <CalendarCell {...props} isToday={false} />;\n\t\t};\n\n\t\tconst calendarProps = {\n\t\t\tvalue: date.isValid\n\t\t\t\t? date.toJSDate() // Local timezone\n\t\t\t\t: null,\n\t\t\tmax: isValidDate(maxDate) ? maxDate : undefined, // Local timezone\n\t\t\tmin: isValidDate(minDate) ? minDate : undefined, // Local timezone\n\t\t\tonChange: handleCalendarChange,\n\t\t\tref: calendarRef,\n\t\t\tcell: customCell,\n\t\t};\n\n\t\tconst customTrigger = trigger?.({\n\t\t\tvalue: date.isValid\n\t\t\t\t? date.toJSDate() // Local timezone\n\t\t\t\t: null,\n\t\t\tonClick: toggleCalendar,\n\t\t\topen: showCalendar,\n\t\t\terror,\n\t\t});\n\n\t\tconst { labelFor: inputId } = React.useContext(FormFieldContext);\n\t\tconst inputMask = (\n\t\t\t<InputDateMask\n\t\t\t\t{...inputMaskProps}\n\t\t\t\tid={inputId}\n\t\t\t\tinputRef={inputRef}\n\t\t\t\tcalendarRef={calendarRef}\n\t\t\t\tclassName=\"DatePicker__input\"\n\t\t\t\tonClick={openCalendar}\n\t\t\t\tshortLabel={\n\t\t\t\t\t<Icon\n\t\t\t\t\t\tname=\"event\"\n\t\t\t\t\t\tclassName=\"DatePicker__icon\"\n\t\t\t\t\t\tonClick={toggleCalendar}\n\t\t\t\t\t\taria-label=\"toggle calendar\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tfluid\n\t\t\t\tdata-anvil-component=\"DatePicker\"\n\t\t\t/>\n\t\t);\n\n\t\tconst DatePickerClasses = classnames('DatePicker', {\n\t\t\t'DatePicker--disabled': disabled,\n\t\t\t'DatePicker--open': showCalendar,\n\t\t\t[`DatePicker--${size}`]: size,\n\t\t});\n\n\t\treturn (\n\t\t\t<Popover\n\t\t\t\tportal\n\t\t\t\twrapperClassName={DatePickerClasses}\n\t\t\t\topen={showCalendar}\n\t\t\t\tpopoverContentClassName=\"DatePicker__calendar\"\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tdirection={direction}\n\t\t\t\tpadding={null}\n\t\t\t\twidth=\"auto\"\n\t\t\t\tref={ref}\n\t\t\t\tonClickOutside={closeCalendar}\n\t\t\t\ttrigger={customTrigger ?? inputMask}\n\t\t\t\tportalDataAttributes={portalDataAttributes}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t{CustomCalendar ? (\n\t\t\t\t\t<CustomCalendar {...calendarProps} />\n\t\t\t\t) : (\n\t\t\t\t\t<Calendar {...calendarProps} />\n\t\t\t\t)}\n\t\t\t</Popover>\n\t\t);\n\t}\n);\n"]}
|
|
@@ -127,9 +127,6 @@
|
|
|
127
127
|
box-shadow: none;
|
|
128
128
|
/* Chrome autofill styling */
|
|
129
129
|
}
|
|
130
|
-
.Input > .Input__InnerWrapper > input[readonly] {
|
|
131
|
-
background-color: var(--colorsSurfaceGreySubdued, #f7f7f7);
|
|
132
|
-
}
|
|
133
130
|
.Input > .Input__InnerWrapper > input::placeholder {
|
|
134
131
|
color: var(--colorsTextDefault, #141414);
|
|
135
132
|
opacity: 0.4;
|
|
@@ -166,8 +163,10 @@
|
|
|
166
163
|
box-shadow: 0 0 0 3px var(--colorsFocusRingPrimary, #a9d1ff);
|
|
167
164
|
border-radius: 3px;
|
|
168
165
|
}
|
|
169
|
-
.Input:focus-within > .Input__InnerWrapper, .Input.Input--focus > .Input__InnerWrapper {
|
|
166
|
+
.Input:focus-within:not(.Input--readonly) > .Input__InnerWrapper, .Input.Input--focus:not(.Input--readonly) > .Input__InnerWrapper {
|
|
170
167
|
background-color: var(--colorsSurfaceDefault, white);
|
|
168
|
+
}
|
|
169
|
+
.Input:focus-within > .Input__InnerWrapper, .Input.Input--focus > .Input__InnerWrapper {
|
|
171
170
|
border-color: var(--colorsBorderPrimary, #0265dc);
|
|
172
171
|
}
|
|
173
172
|
.Input:focus-within > .Input__InnerWrapper > input, .Input.Input--focus > .Input__InnerWrapper > input {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../../src/utilities/_visually-hidden.scss","../../../src/components/Input/Input.scss","../../../node_modules/@servicetitan/tokens/core/tokens.scss","../../../src/utilities/_component-reset.scss","../../../src/utilities/_font-smoothing.scss"],"names":[],"mappings":"AAAA;ACKA;AA2BA;AAmBA;AAAA;AAAA;EACC,wBC/BiB;EDgCjB,2BChCiB;;;ADmClB;AAAA;AAAA;EACC,yBCpCiB;EDqCjB,4BCrCiB;;;ADwClB;AAAA;AAAA;EACC;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EACC;EACA;;;AAGD;AAAA;AAAA;EACC;EACA;;;AAMD;AASA;AACA;AExFC;EACA;AAEA;EACA;ECLC;EACA;EH4FD;EACA;EACA,OA9Ec;AAmFd;
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../src/utilities/_visually-hidden.scss","../../../src/components/Input/Input.scss","../../../node_modules/@servicetitan/tokens/core/tokens.scss","../../../src/utilities/_component-reset.scss","../../../src/utilities/_font-smoothing.scss"],"names":[],"mappings":"AAAA;ACKA;AA2BA;AAmBA;AAAA;AAAA;EACC,wBC/BiB;EDgCjB,2BChCiB;;;ADmClB;AAAA;AAAA;EACC,yBCpCiB;EDqCjB,4BCrCiB;;;ADwClB;AAAA;AAAA;EACC;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EACC;EACA;;;AAGD;AAAA;AAAA;EACC;EACA;;;AAMD;AASA;AACA;AExFC;EACA;AAEA;EACA;ECLC;EACA;EH4FD;EACA;EACA,OA9Ec;AAmFd;AAgFA;AAEA;AAKA;AAmBA;AAmBA;AAuCA;AAiBA;AAEA;AASA;AAmCA;AAmCA;AA0CA;AASA;;AA5TA;EACM;;AAGN;EAAkB,WCkCL;;ADhCb;EAIC,WC6BY;;AD1Bb;EACwB,SApExB;;AAqEA;EAAwB,SA3ExB;;AA4EA;EAAuB,SAzEvB;;AA0EA;EAAuB,SApEvB;;AA6EA;EACC;EACA;EACA;EACA;EACA;AAEA;EACA,kBAhHmB;EAiHnB;EACA,OApHa;EAqHb,eCnHgB;EDoHhB,YA1HD;EA2HC;;AAEA;EAAM;;AAEN;AAvBA;EACA;EACA;EACA;EAuBC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,aCVgB;EDWhB;AAEA;EACA;EACA;EACA,OA7IY;EA8IZ,YAlJF;EAmJE;AAOA;;AALA;EACC,OAlJW;EAmJX,SCnDkB;;ADuDnB;EAvFF;;AAyFG;EAzFH;;AA4FE;EA5FF;;AA8FG;EA9FH;;AAsGA;EACC,kBAnKoB;;AAuKrB;EAEC,SC9EiB;;ADiFlB;EAEC,kBA9KoB;;AAgLpB;EACM;;AAEN;EACC,OAxLY;EAyLZ,SCzFmB;;AD8FrB;EAEC,YCxFa;EDyFb,eC/LgB;;ADiMhB;EACC,kBAlMkB;;AAqMnB;EACC,cAhMY;;AAkMZ;EACC,OA3MW;;AAiNd;AA6BC;;AA5BA;EACC,kBAhNgB;EAiNhB,cA9MY;;AAgNZ;EACC,OAtNS;EAuNT;AAEA;;AACA;EACC,OA3NQ;EA4NR,SC7HiB;;ADgIlB;EA5JH;;AA8JI;EA9JJ;;AAiKG;EAjKH;;AAmKI;EAnKJ;;AAuKE;EAAgB,OA1ON;;AA8OX;EAEC;;AAGD;EAAsB,OAnPX;;AA8PX;EACC;EACA;EACA;EACA;EACA,OA9QW;;AAqRb;EACC;EACA;EACA;EACA;EACA;;AASD;EACC,OAhRc;EAiRd,YAJiB;EAKjB;;AAEA;EACC;EACA;EACA;;AAIF;EACC;EACA;EACA,WCjLY;EDkLZ;AAEA;EACA,OAlSc;EAmSd;EACA;EACA;EACA,YACC;;AAMF;EAA+D;;AAC/D;EAA8D;;AAC9D;EAA+D;;AAC/D;EAA8D;;AAE9D;EAAqE;;AACrE;EAAoE;;AACpE;EAAqE;;AACrE;EAAoE;;AAGpE;EAA0E;;AAE1E;EAAoE;;AACpE;EAAmE;;AACnE;EAAoE;;AACpE;EAAmE;;AAGnE;EACC,SAvTD;EAwTC,WCtNY;;ADwNb;EAAsD,SAvTtD;;AAwTA;EAAuD,SArTvD;;AAsTA;EAAsD,SAnTtD;;AAsTA;EAGC;;AAyBA;AAAA;AAAA;EAGC;EACA;;AAEA;AAAA;AAAA;EAGC;;AAGD;AAAA;AAAA;EAGC;;AAMH;AAAA;EAEC;EACA;EACA;EACA;;AAID;EACC;;AAEA;EAAQ;;AAIT;EAAqE;;AACrE;EAAoE;;;AAGrE;EACC;IAAO;;EACP;IAAK","file":"Input.css"}
|
|
@@ -126,8 +126,11 @@ export class Input extends React.Component {
|
|
|
126
126
|
} }));
|
|
127
127
|
}
|
|
128
128
|
render() {
|
|
129
|
-
const { actionPosition, children, className, disabled, el: InputElement, error, fluid, focus, iconPosition, inverted, loading, shortLabelPosition, transparent, readonly, } = this.props;
|
|
129
|
+
const { actionPosition, children, className, disabled, el: InputElement, error, fluid, focus, iconPosition, inverted, loading, shortLabelPosition, transparent, readOnly, readonly, } = this.props;
|
|
130
130
|
const _a = this.props, { inputRef } = _a, inputProps = __rest(_a, ["inputRef"]);
|
|
131
|
+
if ('readonly' in inputProps && !('readOnly' in inputProps)) {
|
|
132
|
+
inputProps.readOnly = inputProps.readonly;
|
|
133
|
+
}
|
|
131
134
|
const InputClasses = classnames('Input', className, {
|
|
132
135
|
[`Input--${this.computeSize().inputSize}`]: this.computeSize().inputSize,
|
|
133
136
|
'Input--disabled': disabled,
|
|
@@ -137,7 +140,7 @@ export class Input extends React.Component {
|
|
|
137
140
|
'Input--inverted': inverted,
|
|
138
141
|
'Input--loading': loading,
|
|
139
142
|
'Input--transparent': transparent,
|
|
140
|
-
'Input--readonly': readonly,
|
|
143
|
+
'Input--readonly': readOnly || readonly,
|
|
141
144
|
});
|
|
142
145
|
const [strictHtmlInputProps] = splitPropsUsingArray(inputProps, htmlInputPropsArray);
|
|
143
146
|
const htmlInputProps = Object.assign(Object.assign({}, strictHtmlInputProps), { tabIndex: this.computeTabIndex(), onChange: this.handleChange, ref: this.inputRef });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.js","sourceRoot":"","sources":["../../../src/components/Input/Input.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport classnames from 'classnames';\n\nimport { handleRef } from '../../utilities/SemanticUtils';\nimport { isElementOfType } from '../../utilities/isElementOfType';\n\nimport { InputAddon } from './InputAddon';\nimport { Icon, IconNameType, IconProps } from '../Icon';\nimport { Spinner } from '../Spinner';\nimport { Button } from '../Button';\nimport { FormFieldContext } from '../FormField';\n\nimport {\n\tsplitPropsUsingArray,\n\thtmlInputPropsArray,\n\tinputPropsArray,\n} from './inputProps';\n\nconst { Children, createElement, createRef, cloneElement, isValidElement } =\n\tReact;\n\nexport type InputElement = Pick<HTMLInputElement, 'focus' | 'select'>;\n\n/**\n * Input properties\n */\nexport interface InputPropsStrict\n\textends Omit<\n\t\tReact.InputHTMLAttributes<HTMLInputElement>,\n\t\t'size' | 'onChange' | 'tabIndex'\n\t> {\n\t/** An element type to render as (string or function). */\n\tel?: any;\n\n\t/** An Input can be formatted to alert the user to an action they may perform. */\n\taction?: React.ReactNode;\n\n\t/** An action can appear along side an Input on the right (default) or left side. */\n\tactionPosition?: 'right' | 'left';\n\n\t/** Additional classes. */\n\tclassName?: string;\n\n\t/** An Input field can show that it is disabled. */\n\tdisabled?: boolean;\n\n\t/** An Input field can show the data contains errors. */\n\terror?: boolean;\n\n\t/** Take on the size of its container. */\n\tfluid?: boolean;\n\n\t/** An Input field can show a user is currently interacting with it. */\n\tfocus?: boolean;\n\n\t/** Optional Icon to display inside the Input. */\n\ticon?: IconProps | string | React.ReactElement;\n\n\t/** An Icon can appear inside an Input on the right (default) or left side. */\n\ticonPosition?: 'right' | 'left';\n\n\t/** Shorthand for creating the HTML Input. */\n\tinput?: React.ReactNode;\n\n\t/** Format to appear on dark backgrounds. */\n\tinverted?: boolean;\n\n\t/** Shortcut for large-sized input */\n\tlarge?: boolean;\n\n\t/** An Icon Input field can show that it is currently loading data. */\n\tloading?: boolean;\n\n\t/**\n\t * Called on value change.\n\t *\n\t * @param {ChangeEvent} event - React's original SyntheticEvent.\n\t * @param {object} data - All props and a proposed value.\n\t */\n\tonChange?: (\n\t\tevent: React.ChangeEvent<HTMLInputElement>,\n\t\tdata: InputOnChangeData\n\t) => void;\n\n\t/** An Input can vary in size. */\n\tsize?: 'xsmall' | 'small' | 'medium' | 'large';\n\n\t/** Optional Label to display along side the Input. */\n\tshortLabel?: React.ReactNode;\n\n\t/** A Label can appear outside an Input on the left (default) or right side. */\n\tshortLabelPosition?: 'left' | 'right';\n\n\t/** Shortcut for small-sized input */\n\tsmall?: boolean;\n\n\t/** An Input can receive focus. */\n\ttabIndex?: number | string;\n\n\t/** Transparent Input has no background. */\n\ttransparent?: boolean;\n\n\t/** The HTML input type. */\n\ttype?: string;\n\n\t/** Shortcut for x-small-sized input */\n\txsmall?: boolean;\n\n\t/** forwarded input ref */\n\tinputRef?: React.RefObject<HTMLInputElement>;\n}\n\nexport interface InputProps extends InputPropsStrict {\n\t/** Unstrict Props */\n\t[propName: string]: any;\n}\n\nexport interface InputOnChangeData extends InputProps {\n\tvalue: string;\n}\n\nexport class Input extends React.Component<InputProps> {\n\tstatic defaultProps: Partial<InputProps> = {\n\t\tactionPosition: 'right',\n\t\tel: 'div',\n\t\ticonPosition: 'right',\n\t\tshortLabelPosition: 'left',\n\t\tsize: 'medium',\n\t\ttype: 'text',\n\t};\n\n\tstatic Addon = InputAddon;\n\tstatic contextType = FormFieldContext;\n\n\tinputRef: React.RefObject<HTMLInputElement> =\n\t\tthis.props.inputRef || createRef();\n\n\trenderAction = () => {\n\t\tconst { action, disabled } = this.props;\n\n\t\tif (action == null) return null;\n\t\tif (typeof action === 'string') {\n\t\t\treturn (\n\t\t\t\t<Button disabled={disabled} size={this.computeSize().inputSize}>\n\t\t\t\t\t{action}\n\t\t\t\t</Button>\n\t\t\t);\n\t\t}\n\t\tif (action != null && isValidElement(action)) {\n\t\t\treturn cloneElement(action as any, {\n\t\t\t\tdisabled,\n\t\t\t\tsize: this.computeSize().inputSize,\n\t\t\t});\n\t\t}\n\t};\n\n\trenderIcon = () => {\n\t\tconst { icon } = this.props;\n\n\t\t// Icon passed as string\n\t\tif (typeof icon === 'string') {\n\t\t\treturn (\n\t\t\t\t<InputAddon onClick={() => this.focus()}>\n\t\t\t\t\t<Icon\n\t\t\t\t\t\tname={icon as IconNameType}\n\t\t\t\t\t\tsize={this.computeSize().iconSize}\n\t\t\t\t\t/>\n\t\t\t\t</InputAddon>\n\t\t\t);\n\t\t}\n\n\t\t// Icon passed as React element\n\t\tif (icon != null && isValidElement(icon)) {\n\t\t\tconst sizedIcon = cloneElement(icon as any, {\n\t\t\t\tsize: this.computeSize().iconSize,\n\t\t\t});\n\t\t\tconst hasOnClick =\n\t\t\t\ttypeof (icon as any)?.props?.onClick !== 'undefined';\n\n\t\t\treturn (\n\t\t\t\t<InputAddon onClick={() => !hasOnClick && this.focus()}>\n\t\t\t\t\t{sizedIcon}\n\t\t\t\t</InputAddon>\n\t\t\t);\n\t\t}\n\n\t\t// Icon passed as Icon.props object\n\t\tif (icon != null && !isValidElement(icon)) {\n\t\t\tconst hasOnClick = typeof (icon as any)?.onClick !== 'undefined';\n\n\t\t\treturn (\n\t\t\t\t<InputAddon onClick={() => !hasOnClick && this.focus()}>\n\t\t\t\t\t<Icon {...icon} />\n\t\t\t\t</InputAddon>\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t};\n\n\t// Creating an input element\n\trenderInput = (htmlInputProps: any) => {\n\t\tconst { input, type } = this.props;\n\n\t\t// Handling case of duplicate ID's for the same FormField label\n\t\tconst isLabelAssigned = this.context.inputRef;\n\t\tconst labelFor = this.context.labelFor;\n\t\tif (!isLabelAssigned) {\n\t\t\tthis.context.inputRef = this.inputRef;\n\t\t}\n\n\t\tif (input != null && isValidElement(input)) {\n\t\t\treturn cloneElement(input as any, {\n\t\t\t\t...htmlInputProps,\n\t\t\t\tid: this.props.id || (!isLabelAssigned ? labelFor : undefined),\n\t\t\t});\n\t\t}\n\n\t\treturn createElement('input', {\n\t\t\t...htmlInputProps,\n\t\t\ttype,\n\t\t\tid: this.props.id || (!isLabelAssigned ? labelFor : undefined),\n\t\t});\n\t};\n\n\trenderShortLabel = () => {\n\t\tconst { shortLabel } = this.props;\n\n\t\tif (typeof shortLabel === 'string' && shortLabel !== '') {\n\t\t\treturn (\n\t\t\t\t<InputAddon onClick={() => this.focus()}>\n\t\t\t\t\t{shortLabel}\n\t\t\t\t</InputAddon>\n\t\t\t);\n\t\t}\n\n\t\t// Label passed as React element\n\t\tif (shortLabel != null && isValidElement(shortLabel)) {\n\t\t\tconst iconSize =\n\t\t\t\t(shortLabel as any).props.size || this.computeSize().iconSize;\n\n\t\t\tconst hasOnClick =\n\t\t\t\ttypeof (shortLabel.props as any)?.onClick !== 'undefined';\n\n\t\t\treturn (\n\t\t\t\t<InputAddon onClick={() => !hasOnClick && this.focus()}>\n\t\t\t\t\t{cloneElement(shortLabel as any, { size: iconSize })}\n\t\t\t\t</InputAddon>\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t};\n\n\t// Handling with size-related shortcut props, like xsmall=\"true\"...\n\tcomputeSize = (): { inputSize: InputProps['size']; iconSize: string } => {\n\t\tlet inputSize = this.props.size;\n\n\t\tif (this.props.xsmall) inputSize = 'xsmall';\n\t\tif (this.props.small) inputSize = 'small';\n\t\tif (this.props.large) inputSize = 'large';\n\n\t\tconst iconSize = {\n\t\t\txsmall: '16px',\n\t\t\tsmall: '20px',\n\t\t\tmedium: '20px',\n\t\t\tlarge: '24px',\n\t\t}[inputSize];\n\n\t\treturn { inputSize, iconSize };\n\t};\n\n\tcomputeTabIndex = () => {\n\t\tif (this.props.tabIndex) return this.props.tabIndex;\n\t\tif (this.props.disabled) return -1;\n\t};\n\n\tfocus = () => this.inputRef.current.focus();\n\n\tselect = () => this.inputRef.current.select();\n\n\thandleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tif (this.props.onChange) {\n\t\t\tthis.props.onChange(e, { ...this.props, value: e.target.value });\n\t\t}\n\t};\n\n\thandleChildOverrides = (child: any, defaultProps: any) => ({\n\t\t...defaultProps,\n\t\t...child.props,\n\t\tref: (c: any) => {\n\t\t\thandleRef(child.ref, c);\n\t\t\t(this.inputRef.current as any) = c;\n\t\t},\n\t});\n\n\trender() {\n\t\tconst {\n\t\t\tactionPosition,\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t\tdisabled,\n\t\t\tel: InputElement,\n\t\t\terror,\n\t\t\tfluid,\n\t\t\tfocus,\n\t\t\ticonPosition,\n\t\t\tinverted,\n\t\t\tloading,\n\t\t\tshortLabelPosition,\n\t\t\ttransparent,\n\t\t\treadonly,\n\t\t} = this.props;\n\t\tconst { inputRef, ...inputProps } = this.props;\n\n\t\tconst InputClasses = classnames('Input', className, {\n\t\t\t[`Input--${this.computeSize().inputSize}`]:\n\t\t\t\tthis.computeSize().inputSize,\n\t\t\t'Input--disabled': disabled,\n\t\t\t'Input--error': error,\n\t\t\t'Input--fluid': fluid,\n\t\t\t'Input--focus': focus,\n\t\t\t'Input--inverted': inverted,\n\t\t\t'Input--loading': loading,\n\t\t\t'Input--transparent': transparent,\n\t\t\t'Input--readonly': readonly,\n\t\t});\n\n\t\tconst [strictHtmlInputProps] = splitPropsUsingArray(\n\t\t\tinputProps,\n\t\t\thtmlInputPropsArray\n\t\t);\n\t\tconst htmlInputProps = {\n\t\t\t...strictHtmlInputProps,\n\t\t\ttabIndex: this.computeTabIndex(),\n\t\t\tonChange: this.handleChange,\n\t\t\tref: this.inputRef,\n\t\t};\n\t\tconst [, rest] = splitPropsUsingArray(inputProps, [\n\t\t\t...htmlInputPropsArray,\n\t\t\t...inputPropsArray,\n\t\t]);\n\n\t\t// Case of children passed directly into Input\n\t\tif (Children.count(children) !== 0) {\n\t\t\tconst childElements = Children.toArray(children).map((child, k) => {\n\t\t\t\tif (isElementOfType(child, Button)) {\n\t\t\t\t\treturn child;\n\t\t\t\t}\n\n\t\t\t\tif ((child as any).type === 'input') {\n\t\t\t\t\t// Passing htmlInputProps to the <input />\n\t\t\t\t\treturn cloneElement(\n\t\t\t\t\t\tchild as any,\n\t\t\t\t\t\tthis.handleChildOverrides(child, htmlInputProps)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn <Input.Addon key={k}>{child}</Input.Addon>;\n\t\t\t});\n\n\t\t\treturn (\n\t\t\t\t<InputElement\n\t\t\t\t\t{...rest}\n\t\t\t\t\tclassName={classnames(InputClasses, 'Input--with-children')}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"Input__InnerWrapper\">{childElements}</div>\n\t\t\t\t</InputElement>\n\t\t\t);\n\t\t}\n\n\t\t// Render with shorthands\n\t\treturn (\n\t\t\t<InputElement\n\t\t\t\tclassName={InputClasses}\n\t\t\t\tdata-anvil-component=\"Input\"\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t{actionPosition === 'left' && this.renderAction()}\n\t\t\t\t<div className=\"Input__InnerWrapper\">\n\t\t\t\t\t{iconPosition === 'left' && this.renderIcon()}\n\t\t\t\t\t{shortLabelPosition === 'left' && this.renderShortLabel()}\n\t\t\t\t\t{this.renderInput(htmlInputProps)}\n\t\t\t\t\t{loading && (\n\t\t\t\t\t\t<InputAddon onClick={() => this.focus()}>\n\t\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t\t</InputAddon>\n\t\t\t\t\t)}\n\t\t\t\t\t{shortLabelPosition === 'right' && this.renderShortLabel()}\n\t\t\t\t\t{iconPosition === 'right' && this.renderIcon()}\n\t\t\t\t</div>\n\t\t\t\t{actionPosition === 'right' && this.renderAction()}\n\t\t\t</InputElement>\n\t\t);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Input.js","sourceRoot":"","sources":["../../../src/components/Input/Input.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport classnames from 'classnames';\n\nimport { handleRef } from '../../utilities/SemanticUtils';\nimport { isElementOfType } from '../../utilities/isElementOfType';\n\nimport { InputAddon } from './InputAddon';\nimport { Icon, IconNameType, IconProps } from '../Icon';\nimport { Spinner } from '../Spinner';\nimport { Button } from '../Button';\nimport { FormFieldContext } from '../FormField';\n\nimport {\n\tsplitPropsUsingArray,\n\thtmlInputPropsArray,\n\tinputPropsArray,\n} from './inputProps';\n\nconst { Children, createElement, createRef, cloneElement, isValidElement } =\n\tReact;\n\nexport type InputElement = Pick<HTMLInputElement, 'focus' | 'select'>;\n\n/**\n * Input properties\n */\nexport interface InputPropsStrict\n\textends Omit<\n\t\tReact.InputHTMLAttributes<HTMLInputElement>,\n\t\t'size' | 'onChange' | 'tabIndex'\n\t> {\n\t/** An element type to render as (string or function). */\n\tel?: any;\n\n\t/** An Input can be formatted to alert the user to an action they may perform. */\n\taction?: React.ReactNode;\n\n\t/** An action can appear along side an Input on the right (default) or left side. */\n\tactionPosition?: 'right' | 'left';\n\n\t/** Additional classes. */\n\tclassName?: string;\n\n\t/** An Input field can show that it is disabled. */\n\tdisabled?: boolean;\n\n\t/** An Input field can show the data contains errors. */\n\terror?: boolean;\n\n\t/** Take on the size of its container. */\n\tfluid?: boolean;\n\n\t/** An Input field can show a user is currently interacting with it. */\n\tfocus?: boolean;\n\n\t/** Optional Icon to display inside the Input. */\n\ticon?: IconProps | string | React.ReactElement;\n\n\t/** An Icon can appear inside an Input on the right (default) or left side. */\n\ticonPosition?: 'right' | 'left';\n\n\t/** Shorthand for creating the HTML Input. */\n\tinput?: React.ReactNode;\n\n\t/** Format to appear on dark backgrounds. */\n\tinverted?: boolean;\n\n\t/** Shortcut for large-sized input */\n\tlarge?: boolean;\n\n\t/** An Icon Input field can show that it is currently loading data. */\n\tloading?: boolean;\n\n\t/**\n\t * Called on value change.\n\t *\n\t * @param {ChangeEvent} event - React's original SyntheticEvent.\n\t * @param {object} data - All props and a proposed value.\n\t */\n\tonChange?: (\n\t\tevent: React.ChangeEvent<HTMLInputElement>,\n\t\tdata: InputOnChangeData\n\t) => void;\n\n\t/** An Input can vary in size. */\n\tsize?: 'xsmall' | 'small' | 'medium' | 'large';\n\n\t/** Optional Label to display along side the Input. */\n\tshortLabel?: React.ReactNode;\n\n\t/** A Label can appear outside an Input on the left (default) or right side. */\n\tshortLabelPosition?: 'left' | 'right';\n\n\t/** Shortcut for small-sized input */\n\tsmall?: boolean;\n\n\t/** An Input can receive focus. */\n\ttabIndex?: number | string;\n\n\t/** Transparent Input has no background. */\n\ttransparent?: boolean;\n\n\t/** The HTML input type. */\n\ttype?: string;\n\n\t/** Shortcut for x-small-sized input */\n\txsmall?: boolean;\n\n\t/** forwarded input ref */\n\tinputRef?: React.RefObject<HTMLInputElement>;\n}\n\nexport interface InputProps extends InputPropsStrict {\n\t/** Unstrict Props */\n\t[propName: string]: any;\n}\n\nexport interface InputOnChangeData extends InputProps {\n\tvalue: string;\n}\n\nexport class Input extends React.Component<InputProps> {\n\tstatic defaultProps: Partial<InputProps> = {\n\t\tactionPosition: 'right',\n\t\tel: 'div',\n\t\ticonPosition: 'right',\n\t\tshortLabelPosition: 'left',\n\t\tsize: 'medium',\n\t\ttype: 'text',\n\t};\n\n\tstatic Addon = InputAddon;\n\tstatic contextType = FormFieldContext;\n\n\tinputRef: React.RefObject<HTMLInputElement> =\n\t\tthis.props.inputRef || createRef();\n\n\trenderAction = () => {\n\t\tconst { action, disabled } = this.props;\n\n\t\tif (action == null) return null;\n\t\tif (typeof action === 'string') {\n\t\t\treturn (\n\t\t\t\t<Button disabled={disabled} size={this.computeSize().inputSize}>\n\t\t\t\t\t{action}\n\t\t\t\t</Button>\n\t\t\t);\n\t\t}\n\t\tif (action != null && isValidElement(action)) {\n\t\t\treturn cloneElement(action as any, {\n\t\t\t\tdisabled,\n\t\t\t\tsize: this.computeSize().inputSize,\n\t\t\t});\n\t\t}\n\t};\n\n\trenderIcon = () => {\n\t\tconst { icon } = this.props;\n\n\t\t// Icon passed as string\n\t\tif (typeof icon === 'string') {\n\t\t\treturn (\n\t\t\t\t<InputAddon onClick={() => this.focus()}>\n\t\t\t\t\t<Icon\n\t\t\t\t\t\tname={icon as IconNameType}\n\t\t\t\t\t\tsize={this.computeSize().iconSize}\n\t\t\t\t\t/>\n\t\t\t\t</InputAddon>\n\t\t\t);\n\t\t}\n\n\t\t// Icon passed as React element\n\t\tif (icon != null && isValidElement(icon)) {\n\t\t\tconst sizedIcon = cloneElement(icon as any, {\n\t\t\t\tsize: this.computeSize().iconSize,\n\t\t\t});\n\t\t\tconst hasOnClick =\n\t\t\t\ttypeof (icon as any)?.props?.onClick !== 'undefined';\n\n\t\t\treturn (\n\t\t\t\t<InputAddon onClick={() => !hasOnClick && this.focus()}>\n\t\t\t\t\t{sizedIcon}\n\t\t\t\t</InputAddon>\n\t\t\t);\n\t\t}\n\n\t\t// Icon passed as Icon.props object\n\t\tif (icon != null && !isValidElement(icon)) {\n\t\t\tconst hasOnClick = typeof (icon as any)?.onClick !== 'undefined';\n\n\t\t\treturn (\n\t\t\t\t<InputAddon onClick={() => !hasOnClick && this.focus()}>\n\t\t\t\t\t<Icon {...icon} />\n\t\t\t\t</InputAddon>\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t};\n\n\t// Creating an input element\n\trenderInput = (htmlInputProps: any) => {\n\t\tconst { input, type } = this.props;\n\n\t\t// Handling case of duplicate ID's for the same FormField label\n\t\tconst isLabelAssigned = this.context.inputRef;\n\t\tconst labelFor = this.context.labelFor;\n\t\tif (!isLabelAssigned) {\n\t\t\tthis.context.inputRef = this.inputRef;\n\t\t}\n\n\t\tif (input != null && isValidElement(input)) {\n\t\t\treturn cloneElement(input as any, {\n\t\t\t\t...htmlInputProps,\n\t\t\t\tid: this.props.id || (!isLabelAssigned ? labelFor : undefined),\n\t\t\t});\n\t\t}\n\n\t\treturn createElement('input', {\n\t\t\t...htmlInputProps,\n\t\t\ttype,\n\t\t\tid: this.props.id || (!isLabelAssigned ? labelFor : undefined),\n\t\t});\n\t};\n\n\trenderShortLabel = () => {\n\t\tconst { shortLabel } = this.props;\n\n\t\tif (typeof shortLabel === 'string' && shortLabel !== '') {\n\t\t\treturn (\n\t\t\t\t<InputAddon onClick={() => this.focus()}>\n\t\t\t\t\t{shortLabel}\n\t\t\t\t</InputAddon>\n\t\t\t);\n\t\t}\n\n\t\t// Label passed as React element\n\t\tif (shortLabel != null && isValidElement(shortLabel)) {\n\t\t\tconst iconSize =\n\t\t\t\t(shortLabel as any).props.size || this.computeSize().iconSize;\n\n\t\t\tconst hasOnClick =\n\t\t\t\ttypeof (shortLabel.props as any)?.onClick !== 'undefined';\n\n\t\t\treturn (\n\t\t\t\t<InputAddon onClick={() => !hasOnClick && this.focus()}>\n\t\t\t\t\t{cloneElement(shortLabel as any, { size: iconSize })}\n\t\t\t\t</InputAddon>\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t};\n\n\t// Handling with size-related shortcut props, like xsmall=\"true\"...\n\tcomputeSize = (): { inputSize: InputProps['size']; iconSize: string } => {\n\t\tlet inputSize = this.props.size;\n\n\t\tif (this.props.xsmall) inputSize = 'xsmall';\n\t\tif (this.props.small) inputSize = 'small';\n\t\tif (this.props.large) inputSize = 'large';\n\n\t\tconst iconSize = {\n\t\t\txsmall: '16px',\n\t\t\tsmall: '20px',\n\t\t\tmedium: '20px',\n\t\t\tlarge: '24px',\n\t\t}[inputSize];\n\n\t\treturn { inputSize, iconSize };\n\t};\n\n\tcomputeTabIndex = () => {\n\t\tif (this.props.tabIndex) return this.props.tabIndex;\n\t\tif (this.props.disabled) return -1;\n\t};\n\n\tfocus = () => this.inputRef.current.focus();\n\n\tselect = () => this.inputRef.current.select();\n\n\thandleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tif (this.props.onChange) {\n\t\t\tthis.props.onChange(e, { ...this.props, value: e.target.value });\n\t\t}\n\t};\n\n\thandleChildOverrides = (child: any, defaultProps: any) => ({\n\t\t...defaultProps,\n\t\t...child.props,\n\t\tref: (c: any) => {\n\t\t\thandleRef(child.ref, c);\n\t\t\t(this.inputRef.current as any) = c;\n\t\t},\n\t});\n\n\trender() {\n\t\tconst {\n\t\t\tactionPosition,\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t\tdisabled,\n\t\t\tel: InputElement,\n\t\t\terror,\n\t\t\tfluid,\n\t\t\tfocus,\n\t\t\ticonPosition,\n\t\t\tinverted,\n\t\t\tloading,\n\t\t\tshortLabelPosition,\n\t\t\ttransparent,\n\t\t\treadOnly,\n\t\t\treadonly,\n\t\t} = this.props;\n\t\tconst { inputRef, ...inputProps } = this.props;\n\n\t\tif ('readonly' in inputProps && !('readOnly' in inputProps)) {\n\t\t\tinputProps.readOnly = inputProps.readonly;\n\t\t}\n\n\t\tconst InputClasses = classnames('Input', className, {\n\t\t\t[`Input--${this.computeSize().inputSize}`]:\n\t\t\t\tthis.computeSize().inputSize,\n\t\t\t'Input--disabled': disabled,\n\t\t\t'Input--error': error,\n\t\t\t'Input--fluid': fluid,\n\t\t\t'Input--focus': focus,\n\t\t\t'Input--inverted': inverted,\n\t\t\t'Input--loading': loading,\n\t\t\t'Input--transparent': transparent,\n\t\t\t'Input--readonly': readOnly || readonly,\n\t\t});\n\n\t\tconst [strictHtmlInputProps] = splitPropsUsingArray(\n\t\t\tinputProps,\n\t\t\thtmlInputPropsArray\n\t\t);\n\t\tconst htmlInputProps = {\n\t\t\t...strictHtmlInputProps,\n\t\t\ttabIndex: this.computeTabIndex(),\n\t\t\tonChange: this.handleChange,\n\t\t\tref: this.inputRef,\n\t\t};\n\t\tconst [, rest] = splitPropsUsingArray(inputProps, [\n\t\t\t...htmlInputPropsArray,\n\t\t\t...inputPropsArray,\n\t\t]);\n\n\t\t// Case of children passed directly into Input\n\t\tif (Children.count(children) !== 0) {\n\t\t\tconst childElements = Children.toArray(children).map((child, k) => {\n\t\t\t\tif (isElementOfType(child, Button)) {\n\t\t\t\t\treturn child;\n\t\t\t\t}\n\n\t\t\t\tif ((child as any).type === 'input') {\n\t\t\t\t\t// Passing htmlInputProps to the <input />\n\t\t\t\t\treturn cloneElement(\n\t\t\t\t\t\tchild as any,\n\t\t\t\t\t\tthis.handleChildOverrides(child, htmlInputProps)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn <Input.Addon key={k}>{child}</Input.Addon>;\n\t\t\t});\n\n\t\t\treturn (\n\t\t\t\t<InputElement\n\t\t\t\t\t{...rest}\n\t\t\t\t\tclassName={classnames(InputClasses, 'Input--with-children')}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"Input__InnerWrapper\">{childElements}</div>\n\t\t\t\t</InputElement>\n\t\t\t);\n\t\t}\n\n\t\t// Render with shorthands\n\t\treturn (\n\t\t\t<InputElement\n\t\t\t\tclassName={InputClasses}\n\t\t\t\tdata-anvil-component=\"Input\"\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t{actionPosition === 'left' && this.renderAction()}\n\t\t\t\t<div className=\"Input__InnerWrapper\">\n\t\t\t\t\t{iconPosition === 'left' && this.renderIcon()}\n\t\t\t\t\t{shortLabelPosition === 'left' && this.renderShortLabel()}\n\t\t\t\t\t{this.renderInput(htmlInputProps)}\n\t\t\t\t\t{loading && (\n\t\t\t\t\t\t<InputAddon onClick={() => this.focus()}>\n\t\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t\t</InputAddon>\n\t\t\t\t\t)}\n\t\t\t\t\t{shortLabelPosition === 'right' && this.renderShortLabel()}\n\t\t\t\t\t{iconPosition === 'right' && this.renderIcon()}\n\t\t\t\t</div>\n\t\t\t\t{actionPosition === 'right' && this.renderAction()}\n\t\t\t</InputElement>\n\t\t);\n\t}\n}\n"]}
|
|
@@ -127,9 +127,6 @@
|
|
|
127
127
|
box-shadow: none;
|
|
128
128
|
/* Chrome autofill styling */
|
|
129
129
|
}
|
|
130
|
-
.Input > .Input__InnerWrapper > input[readonly] {
|
|
131
|
-
background-color: var(--colorsSurfaceGreySubdued, #f7f7f7);
|
|
132
|
-
}
|
|
133
130
|
.Input > .Input__InnerWrapper > input::placeholder {
|
|
134
131
|
color: var(--colorsTextDefault, #141414);
|
|
135
132
|
opacity: 0.4;
|
|
@@ -166,8 +163,10 @@
|
|
|
166
163
|
box-shadow: 0 0 0 3px var(--colorsFocusRingPrimary, #a9d1ff);
|
|
167
164
|
border-radius: 3px;
|
|
168
165
|
}
|
|
169
|
-
.Input:focus-within > .Input__InnerWrapper, .Input.Input--focus > .Input__InnerWrapper {
|
|
166
|
+
.Input:focus-within:not(.Input--readonly) > .Input__InnerWrapper, .Input.Input--focus:not(.Input--readonly) > .Input__InnerWrapper {
|
|
170
167
|
background-color: var(--colorsSurfaceDefault, white);
|
|
168
|
+
}
|
|
169
|
+
.Input:focus-within > .Input__InnerWrapper, .Input.Input--focus > .Input__InnerWrapper {
|
|
171
170
|
border-color: var(--colorsBorderPrimary, #0265dc);
|
|
172
171
|
}
|
|
173
172
|
.Input:focus-within > .Input__InnerWrapper > input, .Input.Input--focus > .Input__InnerWrapper > input {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../../src/utilities/_visually-hidden.scss","../../../src/components/Input/Input.scss","../../../node_modules/@servicetitan/tokens/core/tokens.scss","../../../src/utilities/_component-reset.scss","../../../src/utilities/_font-smoothing.scss"],"names":[],"mappings":"AAAA;ACKA;AA2BA;AAmBA;AAAA;AAAA;EACC,wBC/BiB;EDgCjB,2BChCiB;;;ADmClB;AAAA;AAAA;EACC,yBCpCiB;EDqCjB,4BCrCiB;;;ADwClB;AAAA;AAAA;EACC;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EACC;EACA;;;AAGD;AAAA;AAAA;EACC;EACA;;;AAMD;AASA;AACA;AExFC;EACA;AAEA;EACA;ECLC;EACA;EH4FD;EACA;EACA,OA9Ec;AAmFd;
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../src/utilities/_visually-hidden.scss","../../../src/components/Input/Input.scss","../../../node_modules/@servicetitan/tokens/core/tokens.scss","../../../src/utilities/_component-reset.scss","../../../src/utilities/_font-smoothing.scss"],"names":[],"mappings":"AAAA;ACKA;AA2BA;AAmBA;AAAA;AAAA;EACC,wBC/BiB;EDgCjB,2BChCiB;;;ADmClB;AAAA;AAAA;EACC,yBCpCiB;EDqCjB,4BCrCiB;;;ADwClB;AAAA;AAAA;EACC;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;EACC;EACA;;;AAGD;AAAA;AAAA;EACC;EACA;;;AAMD;AASA;AACA;AExFC;EACA;AAEA;EACA;ECLC;EACA;EH4FD;EACA;EACA,OA9Ec;AAmFd;AAgFA;AAEA;AAKA;AAmBA;AAmBA;AAuCA;AAiBA;AAEA;AASA;AAmCA;AAmCA;AA0CA;AASA;;AA5TA;EACM;;AAGN;EAAkB,WCkCL;;ADhCb;EAIC,WC6BY;;AD1Bb;EACwB,SApExB;;AAqEA;EAAwB,SA3ExB;;AA4EA;EAAuB,SAzEvB;;AA0EA;EAAuB,SApEvB;;AA6EA;EACC;EACA;EACA;EACA;EACA;AAEA;EACA,kBAhHmB;EAiHnB;EACA,OApHa;EAqHb,eCnHgB;EDoHhB,YA1HD;EA2HC;;AAEA;EAAM;;AAEN;AAvBA;EACA;EACA;EACA;EAuBC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,aCVgB;EDWhB;AAEA;EACA;EACA;EACA,OA7IY;EA8IZ,YAlJF;EAmJE;AAOA;;AALA;EACC,OAlJW;EAmJX,SCnDkB;;ADuDnB;EAvFF;;AAyFG;EAzFH;;AA4FE;EA5FF;;AA8FG;EA9FH;;AAsGA;EACC,kBAnKoB;;AAuKrB;EAEC,SC9EiB;;ADiFlB;EAEC,kBA9KoB;;AAgLpB;EACM;;AAEN;EACC,OAxLY;EAyLZ,SCzFmB;;AD8FrB;EAEC,YCxFa;EDyFb,eC/LgB;;ADiMhB;EACC,kBAlMkB;;AAqMnB;EACC,cAhMY;;AAkMZ;EACC,OA3MW;;AAiNd;AA6BC;;AA5BA;EACC,kBAhNgB;EAiNhB,cA9MY;;AAgNZ;EACC,OAtNS;EAuNT;AAEA;;AACA;EACC,OA3NQ;EA4NR,SC7HiB;;ADgIlB;EA5JH;;AA8JI;EA9JJ;;AAiKG;EAjKH;;AAmKI;EAnKJ;;AAuKE;EAAgB,OA1ON;;AA8OX;EAEC;;AAGD;EAAsB,OAnPX;;AA8PX;EACC;EACA;EACA;EACA;EACA,OA9QW;;AAqRb;EACC;EACA;EACA;EACA;EACA;;AASD;EACC,OAhRc;EAiRd,YAJiB;EAKjB;;AAEA;EACC;EACA;EACA;;AAIF;EACC;EACA;EACA,WCjLY;EDkLZ;AAEA;EACA,OAlSc;EAmSd;EACA;EACA;EACA,YACC;;AAMF;EAA+D;;AAC/D;EAA8D;;AAC9D;EAA+D;;AAC/D;EAA8D;;AAE9D;EAAqE;;AACrE;EAAoE;;AACpE;EAAqE;;AACrE;EAAoE;;AAGpE;EAA0E;;AAE1E;EAAoE;;AACpE;EAAmE;;AACnE;EAAoE;;AACpE;EAAmE;;AAGnE;EACC,SAvTD;EAwTC,WCtNY;;ADwNb;EAAsD,SAvTtD;;AAwTA;EAAuD,SArTvD;;AAsTA;EAAsD,SAnTtD;;AAsTA;EAGC;;AAyBA;AAAA;AAAA;EAGC;EACA;;AAEA;AAAA;AAAA;EAGC;;AAGD;AAAA;AAAA;EAGC;;AAMH;AAAA;EAEC;EACA;EACA;EACA;;AAID;EACC;;AAEA;EAAQ;;AAIT;EAAqE;;AACrE;EAAoE;;;AAGrE;EACC;IAAO;;EACP;IAAK","file":"index.css"}
|
|
@@ -4,7 +4,7 @@ import { Link } from './Link';
|
|
|
4
4
|
describe('Link', () => {
|
|
5
5
|
beforeEach(() => jest.spyOn(console, 'error'));
|
|
6
6
|
it('should be an anchor element if href attribute exists', () => {
|
|
7
|
-
const { getByRole } = render(React.createElement(Link, { href: "https://anvil.servicetitan.com" }, "Website"));
|
|
7
|
+
const { getByRole } = render(React.createElement(Link, { href: "https://v1.anvil.servicetitan.com" }, "Website"));
|
|
8
8
|
const link = getByRole('link');
|
|
9
9
|
expect(link).not.toHaveAttribute('type');
|
|
10
10
|
expect(link.tagName).toBe('A');
|
|
@@ -16,7 +16,7 @@ describe('Link', () => {
|
|
|
16
16
|
expect(link.tagName).toBe('BUTTON');
|
|
17
17
|
});
|
|
18
18
|
it('should pass through data automation attributes', () => {
|
|
19
|
-
const { container } = render(React.createElement(Link, { href: "https://anvil.servicetitan.com", "data-auto-sel": "automation-selector" }, "Website"));
|
|
19
|
+
const { container } = render(React.createElement(Link, { href: "https://v1.anvil.servicetitan.com", "data-auto-sel": "automation-selector" }, "Website"));
|
|
20
20
|
const element = container.querySelector('[data-auto-sel="automation-selector"]');
|
|
21
21
|
expect(element).not.toBeNull();
|
|
22
22
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.test.js","sourceRoot":"","sources":["../../../src/components/Link/Link.test.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACrB,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/C,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC/D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC3B,oBAAC,IAAI,IAAC,IAAI,EAAC,
|
|
1
|
+
{"version":3,"file":"Link.test.js","sourceRoot":"","sources":["../../../src/components/Link/Link.test.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACrB,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAE/C,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC/D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC3B,oBAAC,IAAI,IAAC,IAAI,EAAC,mCAAmC,cAAe,CAC7D,CAAC;QAEF,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAE/B,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QACjE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,oBAAC,IAAI,IAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,cAAgB,CAAC,CAAC;QAEtE,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAE/B,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACzD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAC3B,oBAAC,IAAI,IACJ,IAAI,EAAC,mCAAmC,mBAC1B,qBAAqB,cAG7B,CACP,CAAC;QAEF,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CACtC,uCAAuC,CACvC,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import React from 'react';\nimport { render } from '@testing-library/react';\nimport { Link } from './Link';\n\ndescribe('Link', () => {\n\tbeforeEach(() => jest.spyOn(console, 'error'));\n\n\tit('should be an anchor element if href attribute exists', () => {\n\t\tconst { getByRole } = render(\n\t\t\t<Link href=\"https://v1.anvil.servicetitan.com\">Website</Link>\n\t\t);\n\n\t\tconst link = getByRole('link');\n\n\t\texpect(link).not.toHaveAttribute('type');\n\t\texpect(link.tagName).toBe('A');\n\t});\n\n\tit('should be a button element if no href attribute exists', () => {\n\t\tconst { getByRole } = render(<Link onClick={() => {}}>Website</Link>);\n\n\t\tconst link = getByRole('link');\n\n\t\texpect(link).not.toHaveAttribute('type', 'button');\n\t\texpect(link.tagName).toBe('BUTTON');\n\t});\n\n\tit('should pass through data automation attributes', () => {\n\t\tconst { container } = render(\n\t\t\t<Link\n\t\t\t\thref=\"https://v1.anvil.servicetitan.com\"\n\t\t\t\tdata-auto-sel=\"automation-selector\"\n\t\t\t>\n\t\t\t\tWebsite\n\t\t\t</Link>\n\t\t);\n\n\t\tconst element = container.querySelector(\n\t\t\t'[data-auto-sel=\"automation-selector\"]'\n\t\t);\n\n\t\texpect(element).not.toBeNull();\n\t});\n});\n"]}
|
|
@@ -8194,9 +8194,6 @@ button.a-Icon svg {
|
|
|
8194
8194
|
box-shadow: none;
|
|
8195
8195
|
/* Chrome autofill styling */
|
|
8196
8196
|
}
|
|
8197
|
-
.Input > .Input__InnerWrapper > input[readonly] {
|
|
8198
|
-
background-color: var(--colorsSurfaceGreySubdued, #f7f7f7);
|
|
8199
|
-
}
|
|
8200
8197
|
.Input > .Input__InnerWrapper > input::placeholder {
|
|
8201
8198
|
color: var(--colorsTextDefault, #141414);
|
|
8202
8199
|
opacity: 0.4;
|
|
@@ -8233,8 +8230,10 @@ button.a-Icon svg {
|
|
|
8233
8230
|
box-shadow: 0 0 0 3px var(--colorsFocusRingPrimary, #a9d1ff);
|
|
8234
8231
|
border-radius: 3px;
|
|
8235
8232
|
}
|
|
8236
|
-
.Input:focus-within > .Input__InnerWrapper, .Input.Input--focus > .Input__InnerWrapper {
|
|
8233
|
+
.Input:focus-within:not(.Input--readonly) > .Input__InnerWrapper, .Input.Input--focus:not(.Input--readonly) > .Input__InnerWrapper {
|
|
8237
8234
|
background-color: var(--colorsSurfaceDefault, white);
|
|
8235
|
+
}
|
|
8236
|
+
.Input:focus-within > .Input__InnerWrapper, .Input.Input--focus > .Input__InnerWrapper {
|
|
8238
8237
|
border-color: var(--colorsBorderPrimary, #0265dc);
|
|
8239
8238
|
}
|
|
8240
8239
|
.Input:focus-within > .Input__InnerWrapper > input, .Input.Input--focus > .Input__InnerWrapper > input {
|