@simplybusiness/mobius-datepicker 4.0.0-beta.7 → 4.0.0-beta.8

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.
Files changed (90) hide show
  1. package/dist/cjs/components/NewDatePicker/DatePickerIcon.d.ts +1 -0
  2. package/dist/cjs/components/NewDatePicker/DatePickerIcon.js +7 -0
  3. package/dist/cjs/components/NewDatePicker/DatePickerIcon.js.map +1 -0
  4. package/dist/cjs/components/NewDatePicker/DatePickerModal.d.ts +7 -0
  5. package/dist/cjs/components/NewDatePicker/DatePickerModal.js +35 -0
  6. package/dist/cjs/components/NewDatePicker/DatePickerModal.js.map +1 -0
  7. package/dist/cjs/components/NewDatePicker/NewDatePicker.d.ts +7 -0
  8. package/dist/cjs/components/NewDatePicker/NewDatePicker.js +73 -0
  9. package/dist/cjs/components/NewDatePicker/NewDatePicker.js.map +1 -0
  10. package/dist/cjs/components/NewDatePicker/NewDatePicker.stories.d.ts +27 -0
  11. package/dist/cjs/components/NewDatePicker/NewDatePicker.stories.js +32 -0
  12. package/dist/cjs/components/NewDatePicker/NewDatePicker.stories.js.map +1 -0
  13. package/dist/cjs/components/NewDatePicker/NewDatePicker.test.d.ts +1 -0
  14. package/dist/cjs/components/NewDatePicker/NewDatePicker.test.js +80 -0
  15. package/dist/cjs/components/NewDatePicker/NewDatePicker.test.js.map +1 -0
  16. package/dist/cjs/components/NewDatePicker/constants.d.ts +2 -0
  17. package/dist/cjs/components/NewDatePicker/constants.js +7 -0
  18. package/dist/cjs/components/NewDatePicker/constants.js.map +1 -0
  19. package/dist/cjs/components/NewDatePicker/dateObjToString.d.ts +1 -0
  20. package/dist/cjs/components/NewDatePicker/dateObjToString.js +7 -0
  21. package/dist/cjs/components/NewDatePicker/dateObjToString.js.map +1 -0
  22. package/dist/cjs/components/NewDatePicker/dateObjToString.test.d.ts +1 -0
  23. package/dist/cjs/components/NewDatePicker/dateObjToString.test.js +15 -0
  24. package/dist/cjs/components/NewDatePicker/dateObjToString.test.js.map +1 -0
  25. package/dist/cjs/components/NewDatePicker/index.d.ts +1 -0
  26. package/dist/cjs/components/NewDatePicker/index.js +18 -0
  27. package/dist/cjs/components/NewDatePicker/index.js.map +1 -0
  28. package/dist/cjs/components/NewDatePicker/weekdayAsOneLetter.d.ts +2 -0
  29. package/dist/cjs/components/NewDatePicker/weekdayAsOneLetter.js +14 -0
  30. package/dist/cjs/components/NewDatePicker/weekdayAsOneLetter.js.map +1 -0
  31. package/dist/cjs/components/NewDatePicker/weekdayAsOneLetter.test.d.ts +1 -0
  32. package/dist/cjs/components/NewDatePicker/weekdayAsOneLetter.test.js +23 -0
  33. package/dist/cjs/components/NewDatePicker/weekdayAsOneLetter.test.js.map +1 -0
  34. package/dist/cjs/hooks/useFocusTrap.d.ts +5 -0
  35. package/dist/cjs/hooks/useFocusTrap.js +41 -0
  36. package/dist/cjs/hooks/useFocusTrap.js.map +1 -0
  37. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  38. package/dist/cjs/utils/excludeControls.d.ts +1 -0
  39. package/dist/cjs/utils/excludeControls.js +29 -0
  40. package/dist/cjs/utils/excludeControls.js.map +1 -0
  41. package/dist/cjs/utils/excludeControls.test.d.ts +1 -0
  42. package/dist/cjs/utils/excludeControls.test.js +25 -0
  43. package/dist/cjs/utils/excludeControls.test.js.map +1 -0
  44. package/dist/cjs/utils/isTouchDevice.d.ts +1 -0
  45. package/dist/cjs/utils/isTouchDevice.js +11 -0
  46. package/dist/cjs/utils/isTouchDevice.js.map +1 -0
  47. package/dist/esm/components/NewDatePicker/DatePickerIcon.js +3 -0
  48. package/dist/esm/components/NewDatePicker/DatePickerIcon.js.map +1 -0
  49. package/dist/esm/components/NewDatePicker/DatePickerModal.js +28 -0
  50. package/dist/esm/components/NewDatePicker/DatePickerModal.js.map +1 -0
  51. package/dist/esm/components/NewDatePicker/NewDatePicker.js +66 -0
  52. package/dist/esm/components/NewDatePicker/NewDatePicker.js.map +1 -0
  53. package/dist/esm/components/NewDatePicker/constants.js +4 -0
  54. package/dist/esm/components/NewDatePicker/constants.js.map +1 -0
  55. package/dist/esm/components/NewDatePicker/dateObjToString.js +3 -0
  56. package/dist/esm/components/NewDatePicker/dateObjToString.js.map +1 -0
  57. package/dist/esm/components/NewDatePicker/dateObjToString.test.js +13 -0
  58. package/dist/esm/components/NewDatePicker/dateObjToString.test.js.map +1 -0
  59. package/dist/esm/components/NewDatePicker/index.js +2 -0
  60. package/dist/esm/components/NewDatePicker/index.js.map +1 -0
  61. package/dist/esm/components/NewDatePicker/weekdayAsOneLetter.js +10 -0
  62. package/dist/esm/components/NewDatePicker/weekdayAsOneLetter.js.map +1 -0
  63. package/dist/esm/components/NewDatePicker/weekdayAsOneLetter.test.js +21 -0
  64. package/dist/esm/components/NewDatePicker/weekdayAsOneLetter.test.js.map +1 -0
  65. package/dist/esm/hooks/useFocusTrap.js +38 -0
  66. package/dist/esm/hooks/useFocusTrap.js.map +1 -0
  67. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  68. package/dist/esm/utils/excludeControls.js +25 -0
  69. package/dist/esm/utils/excludeControls.js.map +1 -0
  70. package/dist/esm/utils/excludeControls.test.js +23 -0
  71. package/dist/esm/utils/excludeControls.test.js.map +1 -0
  72. package/dist/esm/utils/isTouchDevice.js +7 -0
  73. package/dist/esm/utils/isTouchDevice.js.map +1 -0
  74. package/package.json +6 -4
  75. package/src/components/NewDatePicker/DatePickerIcon.tsx +1 -0
  76. package/src/components/NewDatePicker/DatePickerModal.tsx +69 -0
  77. package/src/components/NewDatePicker/NewDatePicker.mdx +521 -0
  78. package/src/components/NewDatePicker/NewDatePicker.stories.tsx +46 -0
  79. package/src/components/NewDatePicker/NewDatePicker.test.tsx +121 -0
  80. package/src/components/NewDatePicker/NewDatePicker.tsx +119 -0
  81. package/src/components/NewDatePicker/constants.ts +3 -0
  82. package/src/components/NewDatePicker/dateObjToString.test.ts +17 -0
  83. package/src/components/NewDatePicker/dateObjToString.ts +3 -0
  84. package/src/components/NewDatePicker/index.tsx +1 -0
  85. package/src/components/NewDatePicker/weekdayAsOneLetter.test.ts +28 -0
  86. package/src/components/NewDatePicker/weekdayAsOneLetter.ts +11 -0
  87. package/src/hooks/useFocusTrap.tsx +55 -0
  88. package/src/utils/excludeControls.test.ts +26 -0
  89. package/src/utils/excludeControls.ts +28 -0
  90. package/src/utils/isTouchDevice.ts +7 -0
@@ -0,0 +1 @@
1
+ export declare const DatePickerIcon: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DatePickerIcon = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const DatePickerIcon = () => (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: " " });
6
+ exports.DatePickerIcon = DatePickerIcon;
7
+ //# sourceMappingURL=DatePickerIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePickerIcon.js","sourceRoot":"","sources":["../../../../src/components/NewDatePicker/DatePickerIcon.tsx"],"names":[],"mappings":";;;;AAAO,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,iEAAM,CAAC;AAA9B,QAAA,cAAc,kBAAgB"}
@@ -0,0 +1,7 @@
1
+ export type DatePickerModalProps = {
2
+ date?: string;
3
+ isOpen: boolean;
4
+ onSelected: (date: string) => void;
5
+ top: number;
6
+ };
7
+ export declare const DatePickerModal: ({ date, isOpen, onSelected, top, }: DatePickerModalProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ "use client";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.DatePickerModal = void 0;
8
+ const jsx_runtime_1 = require("react/jsx-runtime");
9
+ const mobius_1 = require("@simplybusiness/mobius");
10
+ const dedupe_1 = __importDefault(require("classnames/dedupe"));
11
+ const react_1 = require("react");
12
+ const react_day_picker_1 = require("react-day-picker");
13
+ const useFocusTrap_1 = __importDefault(require("../../hooks/useFocusTrap"));
14
+ const DatePickerIcon_1 = require("./DatePickerIcon");
15
+ const constants_1 = require("./constants");
16
+ const dateObjToString_1 = require("./dateObjToString");
17
+ const weekdayAsOneLetter_1 = require("./weekdayAsOneLetter");
18
+ const DatePickerModal = ({ date, isOpen, onSelected, top, }) => {
19
+ const modalRef = (0, react_1.useRef)(null);
20
+ const initialDate = date ? new Date(date) : new Date();
21
+ const handleDayPickerSelect = (selectedDate) => {
22
+ if (!selectedDate)
23
+ return;
24
+ onSelected((0, dateObjToString_1.dateObjToString)(selectedDate));
25
+ };
26
+ const modalClasses = (0, dedupe_1.default)("mobius/DatePickerModal", {
27
+ "--is-open": isOpen,
28
+ });
29
+ return ((0, jsx_runtime_1.jsx)(useFocusTrap_1.default, { children: (0, jsx_runtime_1.jsxs)("div", { ref: modalRef, className: modalClasses, style: { top }, "aria-describedby": "screen-reader-title", children: [(0, jsx_runtime_1.jsx)(mobius_1.VisuallyHidden, { children: (0, jsx_runtime_1.jsx)("div", { id: "screen-reader-title", children: "Please select a date from the calendar" }) }), (0, jsx_runtime_1.jsx)(react_day_picker_1.DayPicker, { mode: "single", selected: initialDate, defaultMonth: initialDate, onSelect: handleDayPickerSelect, pagedNavigation: true, showOutsideDays: true, weekStartsOn: constants_1.MONDAY_AS_NUMBER, formatters: { formatWeekdayName: weekdayAsOneLetter_1.weekdayAsOneLetter }, components: {
30
+ IconLeft: DatePickerIcon_1.DatePickerIcon,
31
+ IconRight: DatePickerIcon_1.DatePickerIcon,
32
+ } })] }) }));
33
+ };
34
+ exports.DatePickerModal = DatePickerModal;
35
+ //# sourceMappingURL=DatePickerModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePickerModal.js","sourceRoot":"","sources":["../../../../src/components/NewDatePicker/DatePickerModal.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;AAEb,mDAAwD;AACxD,+DAA2C;AAC3C,iCAA+B;AAC/B,uDAA6C;AAC7C,4EAAiD;AACjD,qDAAkD;AAClD,2CAA+C;AAC/C,uDAAoD;AACpD,6DAA0D;AASnD,MAAM,eAAe,GAAG,CAAC,EAC9B,IAAI,EACJ,MAAM,EACN,UAAU,EACV,GAAG,GACkB,EAAE,EAAE;IACzB,MAAM,QAAQ,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAEvD,MAAM,qBAAqB,GAAG,CAAC,YAA8B,EAAE,EAAE;QAC/D,IAAI,CAAC,YAAY;YAAE,OAAO;QAE1B,UAAU,CAAC,IAAA,iCAAe,EAAC,YAAY,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,IAAA,gBAAU,EAAC,wBAAwB,EAAE;QACxD,WAAW,EAAE,MAAM;KACpB,CAAC,CAAC;IAEH,OAAO,CACL,uBAAC,sBAAS,cACR,iCACE,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,EAAE,GAAG,EAAE,sBACG,qBAAqB,aAEtC,uBAAC,uBAAc,cACb,gCAAK,EAAE,EAAC,qBAAqB,uDAEvB,GACS,EACjB,uBAAC,4BAAS,IACR,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,WAAW,EACrB,YAAY,EAAE,WAAW,EACzB,QAAQ,EAAE,qBAAqB,EAC/B,eAAe,QACf,eAAe,QACf,YAAY,EAAE,4BAAgB,EAC9B,UAAU,EAAE,EAAE,iBAAiB,EAAE,uCAAkB,EAAE,EACrD,UAAU,EAAE;wBACV,QAAQ,EAAE,+BAAc;wBACxB,SAAS,EAAE,+BAAc;qBAC1B,GACD,IACE,GACI,CACb,CAAC;AACJ,CAAC,CAAC;AAjDW,QAAA,eAAe,mBAiD1B"}
@@ -0,0 +1,7 @@
1
+ import { TextFieldProps } from "@simplybusiness/mobius";
2
+ export interface NewDatePickerProps extends Omit<TextFieldProps, "defaultValue" | "onChange"> {
3
+ onChange?: (date: string) => void;
4
+ defaultValue?: string;
5
+ id?: string;
6
+ }
7
+ export declare const NewDatePicker: (props: NewDatePickerProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ "use client";
3
+ var __rest = (this && this.__rest) || function (s, e) {
4
+ var t = {};
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
6
+ t[p] = s[p];
7
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
8
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
9
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
10
+ t[p[i]] = s[p[i]];
11
+ }
12
+ return t;
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.NewDatePicker = void 0;
19
+ const jsx_runtime_1 = require("react/jsx-runtime");
20
+ const mobius_1 = require("@simplybusiness/mobius");
21
+ const dedupe_1 = __importDefault(require("classnames/dedupe"));
22
+ const react_1 = require("react");
23
+ const isTouchDevice_1 = require("../../utils/isTouchDevice");
24
+ const DatePickerModal_1 = require("./DatePickerModal");
25
+ const NewDatePicker = (props) => {
26
+ const { onChange, defaultValue = "", isDisabled, validationState } = props, otherProps = __rest(props, ["onChange", "defaultValue", "isDisabled", "validationState"]);
27
+ const ref = (0, react_1.useRef)(null);
28
+ const [top, setTop] = (0, react_1.useState)(0);
29
+ const [isOpen, setIsOpen] = (0, react_1.useState)(false);
30
+ const [textFieldVal, setTextFieldVal] = (0, react_1.useState)(defaultValue); // yyyy-MM-dd
31
+ const touchDevice = (0, isTouchDevice_1.isTouchDevice)();
32
+ const containerClasses = (0, dedupe_1.default)("mobius/DatePickerContainer", {
33
+ "--is-disabled": isDisabled,
34
+ "--is-valid": validationState === "valid",
35
+ "--is-invalid": validationState === "invalid",
36
+ });
37
+ const popoverToggleClasses = (0, dedupe_1.default)("mobius/DateFieldButton", {
38
+ "--is-valid": validationState === "valid",
39
+ "--is-invalid": validationState === "invalid",
40
+ });
41
+ const setPopoverPosition = () => {
42
+ if (!ref.current || isOpen)
43
+ return;
44
+ const refHeight = ref.current.getBoundingClientRect().height;
45
+ setTop(refHeight);
46
+ };
47
+ const togglePopoverVisibility = () => {
48
+ setIsOpen(!isOpen);
49
+ setPopoverPosition();
50
+ };
51
+ const handleTextFieldChange = (event) => {
52
+ setTextFieldVal(event.target.value);
53
+ };
54
+ const onDateSelected = (selectedDate) => {
55
+ setTextFieldVal(selectedDate);
56
+ setIsOpen(false);
57
+ };
58
+ // When user manually types in date,
59
+ // select date when popover becomes visible
60
+ (0, react_1.useEffect)(() => {
61
+ if (!textFieldVal)
62
+ return;
63
+ if (onChange) {
64
+ onChange(textFieldVal);
65
+ }
66
+ }, [textFieldVal, onChange]);
67
+ if (touchDevice) {
68
+ return ((0, jsx_runtime_1.jsx)(mobius_1.TextField, Object.assign({ type: "date", onChange: handleTextFieldChange, value: textFieldVal, isDisabled: isDisabled, validationState: validationState }, otherProps)));
69
+ }
70
+ return ((0, jsx_runtime_1.jsxs)("div", { className: containerClasses, ref: ref, children: [(0, jsx_runtime_1.jsx)(mobius_1.TextField, Object.assign({ type: "date", className: "mobius/DatePicker", onChange: handleTextFieldChange, value: textFieldVal, isDisabled: isDisabled, validationState: validationState }, otherProps)), (0, jsx_runtime_1.jsx)(mobius_1.Button, { className: popoverToggleClasses, onClick: togglePopoverVisibility, isDisabled: isDisabled, children: (0, jsx_runtime_1.jsx)(mobius_1.VisuallyHidden, { children: "Pick date" }) }), isOpen && ((0, jsx_runtime_1.jsx)(DatePickerModal_1.DatePickerModal, { date: textFieldVal, isOpen: isOpen, top: top, onSelected: onDateSelected }))] }));
71
+ };
72
+ exports.NewDatePicker = NewDatePicker;
73
+ //# sourceMappingURL=NewDatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NewDatePicker.js","sourceRoot":"","sources":["../../../../src/components/NewDatePicker/NewDatePicker.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Meta } from "@storybook/react";
2
+ import { NewDatePicker, NewDatePickerProps } from "./NewDatePicker";
3
+ declare const _default: {
4
+ title: string;
5
+ component: (props: NewDatePickerProps) => import("react/jsx-runtime").JSX.Element;
6
+ argTypes: {
7
+ validationState: {
8
+ options: string[];
9
+ control: {
10
+ type: string;
11
+ };
12
+ mapping: {
13
+ valid: string;
14
+ invalid: string;
15
+ neither: string;
16
+ };
17
+ };
18
+ };
19
+ args: {
20
+ defaultValue: string;
21
+ errorMessage: string;
22
+ isDisabled: boolean;
23
+ isRequired: boolean;
24
+ };
25
+ };
26
+ export default _default;
27
+ export declare const Normal: Meta<typeof NewDatePicker>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Normal = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const excludeControls_1 = require("../../utils/excludeControls");
6
+ const NewDatePicker_1 = require("./NewDatePicker");
7
+ exports.default = {
8
+ title: "Forms/NewDatePicker",
9
+ component: NewDatePicker_1.NewDatePicker,
10
+ argTypes: Object.assign({ validationState: {
11
+ options: ["valid", "invalid", "neither"],
12
+ control: { type: "radio" },
13
+ mapping: {
14
+ valid: "valid",
15
+ invalid: "invalid",
16
+ neither: "",
17
+ },
18
+ } }, (0, excludeControls_1.excludeControls)("onChange", "id", "className", "description", "type", "aria-label", "aria-labelledby", "labelElementType", "inputElementType", "isReadOnly", "aria-describedby", "aria-errormessage")),
19
+ args: {
20
+ defaultValue: "",
21
+ errorMessage: "",
22
+ isDisabled: false,
23
+ isRequired: false,
24
+ },
25
+ };
26
+ exports.Normal = {
27
+ render: (args) => (0, jsx_runtime_1.jsx)(NewDatePicker_1.NewDatePicker, Object.assign({}, args)),
28
+ args: {
29
+ label: "Start date",
30
+ },
31
+ };
32
+ //# sourceMappingURL=NewDatePicker.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NewDatePicker.stories.js","sourceRoot":"","sources":["../../../../src/components/NewDatePicker/NewDatePicker.stories.tsx"],"names":[],"mappings":";;;;AACA,iEAA8D;AAC9D,mDAAoE;AAEpE,kBAAe;IACb,KAAK,EAAE,qBAAqB;IAC5B,SAAS,EAAE,6BAAa;IACxB,QAAQ,kBACN,eAAe,EAAE;YACf,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC;YACxC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC1B,OAAO,EAAE;gBACP,KAAK,EAAE,OAAO;gBACd,OAAO,EAAE,SAAS;gBAClB,OAAO,EAAE,EAAE;aACZ;SACF,IACE,IAAA,iCAAe,EAChB,UAAU,EACV,IAAI,EACJ,WAAW,EACX,aAAa,EACb,MAAM,EACN,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,CACpB,CACF;IACD,IAAI,EAAE;QACJ,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,EAAE;QAChB,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,KAAK;KAClB;CACF,CAAC;AAEW,QAAA,MAAM,GAA+B;IAChD,MAAM,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,uBAAC,6BAAa,oBAAK,IAAI,EAAI;IACjE,IAAI,EAAE;QACJ,KAAK,EAAE,YAAY;KACpB;CACF,CAAC"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const react_1 = require("@testing-library/react");
5
+ const _1 = require(".");
6
+ const mockMatchMedia = (matches) => {
7
+ Object.defineProperty(window, "matchMedia", {
8
+ writable: true,
9
+ configurable: true,
10
+ value: jest.fn().mockImplementation(query => ({
11
+ matches,
12
+ media: query,
13
+ onchange: null,
14
+ addListener: jest.fn(),
15
+ removeListener: jest.fn(),
16
+ addEventListener: jest.fn(),
17
+ removeEventListener: jest.fn(),
18
+ dispatchEvent: jest.fn(),
19
+ })),
20
+ });
21
+ };
22
+ describe("NewDatePicker", () => {
23
+ describe("given it is a touch device", () => {
24
+ beforeEach(() => {
25
+ mockMatchMedia(true);
26
+ });
27
+ it("should render without errors", () => {
28
+ const exampleDate = "2023-11-13";
29
+ const labelText = "Start date";
30
+ const testId = "date-picker";
31
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(_1.NewDatePicker, { defaultValue: exampleDate, label: labelText, "data-testid": testId }));
32
+ const inputField = react_1.screen.getByTestId(testId);
33
+ const label = react_1.screen.getByLabelText(labelText);
34
+ expect(inputField).toHaveValue(exampleDate);
35
+ expect(label).toBeInTheDocument();
36
+ });
37
+ describe("when value changes", () => {
38
+ it("triggers onChange", () => {
39
+ const labelText = "Start date";
40
+ const testId = "date-picker";
41
+ const onChange = jest.fn();
42
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(_1.NewDatePicker, { label: labelText, "data-testid": testId, onChange: onChange }));
43
+ const inputField = react_1.screen.getByTestId(testId);
44
+ const newDate = "2015-06-01";
45
+ react_1.fireEvent.change(inputField, { target: { value: newDate } });
46
+ expect(inputField).toHaveValue(newDate);
47
+ expect(onChange).toHaveBeenCalledWith(newDate);
48
+ });
49
+ });
50
+ });
51
+ describe("given it is a non-touch device", () => {
52
+ beforeEach(() => {
53
+ mockMatchMedia(false);
54
+ });
55
+ it("should render without errors", () => {
56
+ const exampleDate = "2023-11-13";
57
+ const labelText = "Start date";
58
+ const testId = "date-picker";
59
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(_1.NewDatePicker, { defaultValue: exampleDate, label: labelText, "data-testid": testId }));
60
+ const inputField = react_1.screen.getByTestId(testId);
61
+ const label = react_1.screen.getByLabelText(labelText);
62
+ expect(inputField).toHaveValue(exampleDate);
63
+ expect(label).toBeInTheDocument();
64
+ });
65
+ describe("when value changes", () => {
66
+ it("triggers onChange", () => {
67
+ const labelText = "Start date";
68
+ const testId = "date-picker";
69
+ const onChange = jest.fn();
70
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(_1.NewDatePicker, { label: labelText, "data-testid": testId, onChange: onChange }));
71
+ const inputField = react_1.screen.getByTestId(testId);
72
+ const newDate = "2015-06-01";
73
+ react_1.fireEvent.change(inputField, { target: { value: newDate } });
74
+ expect(inputField).toHaveValue(newDate);
75
+ expect(onChange).toHaveBeenCalledWith(newDate);
76
+ });
77
+ });
78
+ });
79
+ });
80
+ //# sourceMappingURL=NewDatePicker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NewDatePicker.test.js","sourceRoot":"","sources":["../../../../src/components/NewDatePicker/NewDatePicker.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const MONDAY_AS_NUMBER = 1;
2
+ export declare const DEFAULT_LOCALE: string;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DEFAULT_LOCALE = exports.MONDAY_AS_NUMBER = void 0;
5
+ exports.MONDAY_AS_NUMBER = 1;
6
+ exports.DEFAULT_LOCALE = ((_a = window === null || window === void 0 ? void 0 : window.navigator) === null || _a === void 0 ? void 0 : _a.language) || "en-GB";
7
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/components/NewDatePicker/constants.ts"],"names":[],"mappings":";;;;AAAa,QAAA,gBAAgB,GAAG,CAAC,CAAC;AAErB,QAAA,cAAc,GAAG,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,0CAAE,QAAQ,KAAI,OAAO,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const dateObjToString: (date: Date) => string;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dateObjToString = void 0;
4
+ const date_fns_1 = require("date-fns");
5
+ const dateObjToString = (date) => (0, date_fns_1.format)(date, "yyyy-MM-dd");
6
+ exports.dateObjToString = dateObjToString;
7
+ //# sourceMappingURL=dateObjToString.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateObjToString.js","sourceRoot":"","sources":["../../../../src/components/NewDatePicker/dateObjToString.ts"],"names":[],"mappings":";;;AAAA,uCAAkC;AAE3B,MAAM,eAAe,GAAG,CAAC,IAAU,EAAE,EAAE,CAAC,IAAA,iBAAM,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAA7D,QAAA,eAAe,mBAA8C"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const dateObjToString_1 = require("./dateObjToString");
4
+ describe("dateObjToString", () => {
5
+ describe("given a Date object", () => {
6
+ it("returns a formatted string as yyyy-mm-dd", () => {
7
+ const exampleDate = "2023-11-13";
8
+ const input = new Date(exampleDate);
9
+ const actual = (0, dateObjToString_1.dateObjToString)(input);
10
+ const expected = exampleDate;
11
+ expect(actual).toEqual(expected);
12
+ });
13
+ });
14
+ });
15
+ //# sourceMappingURL=dateObjToString.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateObjToString.test.js","sourceRoot":"","sources":["../../../../src/components/NewDatePicker/dateObjToString.test.ts"],"names":[],"mappings":";;AAAA,uDAAoD;AAEpD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,WAAW,GAAG,YAAY,CAAC;YAEjC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;YAEpC,MAAM,MAAM,GAAG,IAAA,iCAAe,EAAC,KAAK,CAAC,CAAC;YAEtC,MAAM,QAAQ,GAAG,WAAW,CAAC;YAE7B,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export * from "./NewDatePicker";
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./NewDatePicker"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/NewDatePicker/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC"}
@@ -0,0 +1,2 @@
1
+ import { DateFormatter } from "react-day-picker";
2
+ export declare const weekdayAsOneLetter: DateFormatter;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.weekdayAsOneLetter = void 0;
4
+ const constants_1 = require("./constants");
5
+ const weekdayAsOneLetter = (weekday, options) => {
6
+ var _a;
7
+ const locale = ((_a = options === null || options === void 0 ? void 0 : options.locale) === null || _a === void 0 ? void 0 : _a.code) || constants_1.DEFAULT_LOCALE;
8
+ const oneLetter = weekday.toLocaleString(locale, {
9
+ weekday: "narrow",
10
+ });
11
+ return oneLetter;
12
+ };
13
+ exports.weekdayAsOneLetter = weekdayAsOneLetter;
14
+ //# sourceMappingURL=weekdayAsOneLetter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weekdayAsOneLetter.js","sourceRoot":"","sources":["../../../../src/components/NewDatePicker/weekdayAsOneLetter.ts"],"names":[],"mappings":";;;AACA,2CAA6C;AAEtC,MAAM,kBAAkB,GAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;;IACpE,MAAM,MAAM,GAAG,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,IAAI,KAAI,0BAAc,CAAC;IACvD,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE;QAC/C,OAAO,EAAE,QAAQ;KAClB,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAPW,QAAA,kBAAkB,sBAO7B"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const weekdayAsOneLetter_1 = require("./weekdayAsOneLetter");
4
+ describe("weekdayAsOneLetter", () => {
5
+ describe("given a Date object and a locale", () => {
6
+ it("returns weekday as a single letter", () => {
7
+ const randomMonday = new Date("2023-11-13");
8
+ const locale = { locale: { code: "en-GB" } };
9
+ const actual = (0, weekdayAsOneLetter_1.weekdayAsOneLetter)(randomMonday, locale);
10
+ const expected = "M";
11
+ expect(actual).toEqual(expected);
12
+ });
13
+ });
14
+ describe("given a Date object and no locale", () => {
15
+ it("returns weekday as a single letter, using en-GB as default locale", () => {
16
+ const randomMonday = new Date("2023-11-13");
17
+ const actual = (0, weekdayAsOneLetter_1.weekdayAsOneLetter)(randomMonday);
18
+ const expected = "M";
19
+ expect(actual).toEqual(expected);
20
+ });
21
+ });
22
+ });
23
+ //# sourceMappingURL=weekdayAsOneLetter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weekdayAsOneLetter.test.js","sourceRoot":"","sources":["../../../../src/components/NewDatePicker/weekdayAsOneLetter.test.ts"],"names":[],"mappings":";;AAAA,6DAA0D;AAE1D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAChD,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;YAE7C,MAAM,MAAM,GAAG,IAAA,uCAAkB,EAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAExD,MAAM,QAAQ,GAAG,GAAG,CAAC;YAErB,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACjD,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;YAC3E,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;YAE5C,MAAM,MAAM,GAAG,IAAA,uCAAkB,EAAC,YAAY,CAAC,CAAC;YAEhD,MAAM,QAAQ,GAAG,GAAG,CAAC;YAErB,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { ReactNode } from "react";
2
+ export type FocusTrapProps = {
3
+ children: ReactNode;
4
+ };
5
+ export default function FocusTrap({ children }: FocusTrapProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const react_1 = require("react");
5
+ const useFocusTrap = () => {
6
+ const containerRef = (0, react_1.useRef)(null);
7
+ // eslint-disable-next-line consistent-return
8
+ (0, react_1.useEffect)(() => {
9
+ if (containerRef.current) {
10
+ const element = containerRef.current;
11
+ const focusableElements = containerRef.current.querySelectorAll('.rdp-nav_button, [tabindex]:not([tabindex="-1"])');
12
+ const firstElement = focusableElements[0];
13
+ const lastElement = focusableElements[focusableElements.length - 1];
14
+ const handleTabKeyPress = (event) => {
15
+ if (event.key === "Tab") {
16
+ if (event.shiftKey && document.activeElement === firstElement) {
17
+ event.preventDefault();
18
+ lastElement.focus();
19
+ }
20
+ else if (!event.shiftKey &&
21
+ document.activeElement === lastElement // TODO: handle for any day
22
+ ) {
23
+ event.preventDefault();
24
+ firstElement.focus();
25
+ }
26
+ }
27
+ };
28
+ element.addEventListener("keydown", handleTabKeyPress);
29
+ return () => {
30
+ element.removeEventListener("keydown", handleTabKeyPress);
31
+ };
32
+ }
33
+ }, []);
34
+ return containerRef;
35
+ };
36
+ function FocusTrap({ children }) {
37
+ const focusRef = useFocusTrap();
38
+ return ((0, jsx_runtime_1.jsx)("div", { className: "trap", ref: focusRef, children: children }));
39
+ }
40
+ exports.default = FocusTrap;
41
+ //# sourceMappingURL=useFocusTrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocusTrap.js","sourceRoot":"","sources":["../../../src/hooks/useFocusTrap.tsx"],"names":[],"mappings":";;;AAAA,iCAAqD;AAErD,MAAM,YAAY,GAAG,GAAG,EAAE;IACxB,MAAM,YAAY,GAAG,IAAA,cAAM,EAAwB,IAAI,CAAC,CAAC;IAEzD,6CAA6C;IAC7C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,YAAY,CAAC,OAAO,EAAE;YACxB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;YACrC,MAAM,iBAAiB,GACrB,YAAY,CAAC,OAAO,CAAC,gBAAgB,CACnC,kDAAkD,CACnD,CAAC;YAEJ,MAAM,YAAY,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,WAAW,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEpE,MAAM,iBAAiB,GAAG,CAAC,KAAoB,EAAE,EAAE;gBACjD,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;oBACvB,IAAI,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,YAAY,EAAE;wBAC7D,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,WAAW,CAAC,KAAK,EAAE,CAAC;qBACrB;yBAAM,IACL,CAAC,KAAK,CAAC,QAAQ;wBACf,QAAQ,CAAC,aAAa,KAAK,WAAW,CAAC,2BAA2B;sBAClE;wBACA,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,YAAY,CAAC,KAAK,EAAE,CAAC;qBACtB;iBACF;YACH,CAAC,CAAC;YAEF,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YACvD,OAAO,GAAG,EAAE;gBACV,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAC5D,CAAC,CAAC;SACH;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAMF,SAAwB,SAAS,CAAC,EAAE,QAAQ,EAAkB;IAC5D,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAEhC,OAAO,CACL,gCAAK,SAAS,EAAC,MAAM,EAAC,GAAG,EAAE,QAAQ,YAChC,QAAQ,GACL,CACP,CAAC;AACJ,CAAC;AARD,4BAQC"}