@simplybusiness/mobius-datepicker 4.2.7 → 4.3.1

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 (148) hide show
  1. package/CHANGELOG.md +15 -7
  2. package/dist/cjs/components/DatePicker/DatePicker.js +146 -80
  3. package/dist/cjs/components/DatePicker/DatePicker.js.map +1 -1
  4. package/dist/cjs/components/DatePicker/DatePickerIcon.js +14 -5
  5. package/dist/cjs/components/DatePicker/DatePickerIcon.js.map +1 -1
  6. package/dist/cjs/components/DatePicker/DatePickerModal.js +75 -31
  7. package/dist/cjs/components/DatePicker/DatePickerModal.js.map +1 -1
  8. package/dist/cjs/components/DatePicker/constants.js +24 -5
  9. package/dist/cjs/components/DatePicker/constants.js.map +1 -1
  10. package/dist/cjs/components/DatePicker/index.js +18 -16
  11. package/dist/cjs/components/DatePicker/index.js.map +1 -1
  12. package/dist/cjs/components/DatePicker/utils/dateObjToString.js +12 -5
  13. package/dist/cjs/components/DatePicker/utils/dateObjToString.js.map +1 -1
  14. package/dist/cjs/components/DatePicker/utils/formatErrorMessageText.js +24 -9
  15. package/dist/cjs/components/DatePicker/utils/formatErrorMessageText.js.map +1 -1
  16. package/dist/cjs/components/DatePicker/utils/getStartWeekday.js +21 -0
  17. package/dist/cjs/components/DatePicker/utils/getStartWeekday.js.map +1 -0
  18. package/dist/cjs/components/DatePicker/utils/index.js +21 -19
  19. package/dist/cjs/components/DatePicker/utils/index.js.map +1 -1
  20. package/dist/cjs/components/DatePicker/utils/validateDateFormat.js +23 -9
  21. package/dist/cjs/components/DatePicker/utils/validateDateFormat.js.map +1 -1
  22. package/dist/cjs/components/DatePicker/utils/weekdayAsOneLetter.js +16 -9
  23. package/dist/cjs/components/DatePicker/utils/weekdayAsOneLetter.js.map +1 -1
  24. package/dist/cjs/hooks/index.js +18 -16
  25. package/dist/cjs/hooks/index.js.map +1 -1
  26. package/dist/cjs/hooks/useFocusTrap/index.js +18 -16
  27. package/dist/cjs/hooks/useFocusTrap/index.js.map +1 -1
  28. package/dist/cjs/hooks/useFocusTrap/useFocusTrap.js +24 -15
  29. package/dist/cjs/hooks/useFocusTrap/useFocusTrap.js.map +1 -1
  30. package/dist/cjs/index.js +18 -16
  31. package/dist/cjs/index.js.map +1 -1
  32. package/dist/cjs/styles.d.js +3 -0
  33. package/dist/cjs/styles.d.js.map +1 -0
  34. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  35. package/dist/cjs/utils/StoryContainer.js +37 -9
  36. package/dist/cjs/utils/StoryContainer.js.map +1 -1
  37. package/dist/cjs/utils/excludeControls.js +19 -5
  38. package/dist/cjs/utils/excludeControls.js.map +1 -1
  39. package/dist/cjs/utils/index.js +20 -18
  40. package/dist/cjs/utils/index.js.map +1 -1
  41. package/dist/cjs/utils/isTouchDevice.js +11 -4
  42. package/dist/cjs/utils/isTouchDevice.js.map +1 -1
  43. package/dist/esm/components/DatePicker/DatePicker.js +82 -42
  44. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  45. package/dist/esm/components/DatePicker/DatePickerIcon.js +5 -2
  46. package/dist/esm/components/DatePicker/DatePickerIcon.js.map +1 -1
  47. package/dist/esm/components/DatePicker/DatePickerModal.js +47 -13
  48. package/dist/esm/components/DatePicker/DatePickerModal.js.map +1 -1
  49. package/dist/esm/components/DatePicker/constants.js +3 -2
  50. package/dist/esm/components/DatePicker/constants.js.map +1 -1
  51. package/dist/esm/components/DatePicker/index.js +1 -0
  52. package/dist/esm/components/DatePicker/index.js.map +1 -1
  53. package/dist/esm/components/DatePicker/utils/dateObjToString.js +2 -1
  54. package/dist/esm/components/DatePicker/utils/dateObjToString.js.map +1 -1
  55. package/dist/esm/components/DatePicker/utils/formatErrorMessageText.js +2 -1
  56. package/dist/esm/components/DatePicker/utils/formatErrorMessageText.js.map +1 -1
  57. package/dist/esm/components/DatePicker/utils/getStartWeekday.js +13 -0
  58. package/dist/esm/components/DatePicker/utils/getStartWeekday.js.map +1 -0
  59. package/dist/esm/components/DatePicker/utils/index.js +1 -0
  60. package/dist/esm/components/DatePicker/utils/index.js.map +1 -1
  61. package/dist/esm/components/DatePicker/utils/validateDateFormat.js +2 -1
  62. package/dist/esm/components/DatePicker/utils/validateDateFormat.js.map +1 -1
  63. package/dist/esm/components/DatePicker/utils/weekdayAsOneLetter.js +6 -5
  64. package/dist/esm/components/DatePicker/utils/weekdayAsOneLetter.js.map +1 -1
  65. package/dist/esm/hooks/index.js +1 -0
  66. package/dist/esm/hooks/index.js.map +1 -1
  67. package/dist/esm/hooks/useFocusTrap/index.js +1 -0
  68. package/dist/esm/hooks/useFocusTrap/index.js.map +1 -1
  69. package/dist/esm/hooks/useFocusTrap/useFocusTrap.js +12 -10
  70. package/dist/esm/hooks/useFocusTrap/useFocusTrap.js.map +1 -1
  71. package/dist/esm/index.js +1 -0
  72. package/dist/esm/index.js.map +1 -1
  73. package/dist/esm/styles.d.js +2 -0
  74. package/dist/esm/styles.d.js.map +1 -0
  75. package/dist/esm/utils/StoryContainer.js +28 -3
  76. package/dist/esm/utils/StoryContainer.js.map +1 -1
  77. package/dist/esm/utils/excludeControls.js +9 -1
  78. package/dist/esm/utils/excludeControls.js.map +1 -1
  79. package/dist/esm/utils/index.js +1 -0
  80. package/dist/esm/utils/index.js.map +1 -1
  81. package/dist/esm/utils/isTouchDevice.js +2 -1
  82. package/dist/esm/utils/isTouchDevice.js.map +1 -1
  83. package/package.json +8 -9
  84. package/src/components/DatePicker/DatePicker.tsx +4 -4
  85. package/src/components/DatePicker/DatePickerModal.tsx +4 -2
  86. package/src/components/DatePicker/constants.ts +2 -3
  87. package/src/components/DatePicker/utils/getStartWeekday.test.ts +33 -0
  88. package/src/components/DatePicker/utils/getStartWeekday.ts +19 -0
  89. package/src/components/DatePicker/utils/weekdayAsOneLetter.ts +2 -2
  90. package/src/utils/StoryContainer.tsx +19 -2
  91. package/dist/cjs/components/DatePicker/DatePicker.d.ts +0 -9
  92. package/dist/cjs/components/DatePicker/DatePicker.stories.d.ts +0 -11
  93. package/dist/cjs/components/DatePicker/DatePicker.stories.js +0 -79
  94. package/dist/cjs/components/DatePicker/DatePicker.stories.js.map +0 -1
  95. package/dist/cjs/components/DatePicker/DatePicker.test.d.ts +0 -1
  96. package/dist/cjs/components/DatePicker/DatePicker.test.js +0 -137
  97. package/dist/cjs/components/DatePicker/DatePicker.test.js.map +0 -1
  98. package/dist/cjs/components/DatePicker/DatePickerIcon.d.ts +0 -1
  99. package/dist/cjs/components/DatePicker/DatePickerModal.d.ts +0 -10
  100. package/dist/cjs/components/DatePicker/DatePickerModal.test.d.ts +0 -1
  101. package/dist/cjs/components/DatePicker/DatePickerModal.test.js +0 -105
  102. package/dist/cjs/components/DatePicker/DatePickerModal.test.js.map +0 -1
  103. package/dist/cjs/components/DatePicker/constants.d.ts +0 -2
  104. package/dist/cjs/components/DatePicker/index.d.ts +0 -1
  105. package/dist/cjs/components/DatePicker/utils/dateObjToString.d.ts +0 -1
  106. package/dist/cjs/components/DatePicker/utils/dateObjToString.test.d.ts +0 -1
  107. package/dist/cjs/components/DatePicker/utils/dateObjToString.test.js +0 -15
  108. package/dist/cjs/components/DatePicker/utils/dateObjToString.test.js.map +0 -1
  109. package/dist/cjs/components/DatePicker/utils/formatErrorMessageText.d.ts +0 -2
  110. package/dist/cjs/components/DatePicker/utils/formatErrorMessageText.test.d.ts +0 -1
  111. package/dist/cjs/components/DatePicker/utils/formatErrorMessageText.test.js +0 -35
  112. package/dist/cjs/components/DatePicker/utils/formatErrorMessageText.test.js.map +0 -1
  113. package/dist/cjs/components/DatePicker/utils/index.d.ts +0 -4
  114. package/dist/cjs/components/DatePicker/utils/validateDateFormat.d.ts +0 -2
  115. package/dist/cjs/components/DatePicker/utils/validateDateFormat.test.d.ts +0 -1
  116. package/dist/cjs/components/DatePicker/utils/validateDateFormat.test.js +0 -26
  117. package/dist/cjs/components/DatePicker/utils/validateDateFormat.test.js.map +0 -1
  118. package/dist/cjs/components/DatePicker/utils/weekdayAsOneLetter.d.ts +0 -2
  119. package/dist/cjs/components/DatePicker/utils/weekdayAsOneLetter.test.d.ts +0 -1
  120. package/dist/cjs/components/DatePicker/utils/weekdayAsOneLetter.test.js +0 -23
  121. package/dist/cjs/components/DatePicker/utils/weekdayAsOneLetter.test.js.map +0 -1
  122. package/dist/cjs/hooks/index.d.ts +0 -1
  123. package/dist/cjs/hooks/useFocusTrap/index.d.ts +0 -1
  124. package/dist/cjs/hooks/useFocusTrap/useFocusTrap.d.ts +0 -5
  125. package/dist/cjs/hooks/useFocusTrap/useFocusTrap.test.d.ts +0 -1
  126. package/dist/cjs/hooks/useFocusTrap/useFocusTrap.test.js +0 -65
  127. package/dist/cjs/hooks/useFocusTrap/useFocusTrap.test.js.map +0 -1
  128. package/dist/cjs/index.d.ts +0 -1
  129. package/dist/cjs/utils/StoryContainer.d.ts +0 -1
  130. package/dist/cjs/utils/excludeControls.d.ts +0 -1
  131. package/dist/cjs/utils/excludeControls.test.d.ts +0 -1
  132. package/dist/cjs/utils/excludeControls.test.js +0 -25
  133. package/dist/cjs/utils/excludeControls.test.js.map +0 -1
  134. package/dist/cjs/utils/index.d.ts +0 -3
  135. package/dist/cjs/utils/isTouchDevice.d.ts +0 -1
  136. package/dist/esm/components/DatePicker/utils/dateObjToString.test.js +0 -13
  137. package/dist/esm/components/DatePicker/utils/dateObjToString.test.js.map +0 -1
  138. package/dist/esm/components/DatePicker/utils/formatErrorMessageText.test.js +0 -33
  139. package/dist/esm/components/DatePicker/utils/formatErrorMessageText.test.js.map +0 -1
  140. package/dist/esm/components/DatePicker/utils/validateDateFormat.test.js +0 -24
  141. package/dist/esm/components/DatePicker/utils/validateDateFormat.test.js.map +0 -1
  142. package/dist/esm/components/DatePicker/utils/weekdayAsOneLetter.test.js +0 -21
  143. package/dist/esm/components/DatePicker/utils/weekdayAsOneLetter.test.js.map +0 -1
  144. package/dist/esm/tsconfig.esm.tsbuildinfo +0 -1
  145. package/dist/esm/utils/excludeControls.test.js +0 -23
  146. package/dist/esm/utils/excludeControls.test.js.map +0 -1
  147. package/dist/mobius-datepicker.d.ts +0 -14
  148. package/src/utils/StoryContainer.module.css +0 -13
@@ -0,0 +1,13 @@
1
+ import { DEFAULT_LOCALE, MONDAY_AS_NUMBER, SUNDAY_AS_NUMBER } from "../constants";
2
+ // Calculates start of week for calendar in UK and US locales
3
+ // Add more to the switch statement as needed
4
+ export const getStartWeekday = (locale)=>{
5
+ switch(locale || DEFAULT_LOCALE){
6
+ case "en-US":
7
+ return SUNDAY_AS_NUMBER;
8
+ default:
9
+ return MONDAY_AS_NUMBER;
10
+ }
11
+ };
12
+
13
+ //# sourceMappingURL=getStartWeekday.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/DatePicker/utils/getStartWeekday.ts"],"sourcesContent":["import {\n DEFAULT_LOCALE,\n MONDAY_AS_NUMBER,\n SUNDAY_AS_NUMBER,\n} from \"../constants\";\n\ntype WeekStart = 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined;\n\n// Calculates start of week for calendar in UK and US locales\n// Add more to the switch statement as needed\nexport const getStartWeekday = (locale?: string): WeekStart => {\n switch (locale || DEFAULT_LOCALE) {\n case \"en-US\":\n return SUNDAY_AS_NUMBER;\n\n default:\n return MONDAY_AS_NUMBER;\n }\n};\n"],"names":["DEFAULT_LOCALE","MONDAY_AS_NUMBER","SUNDAY_AS_NUMBER","getStartWeekday","locale"],"mappings":"AAAA,SACEA,cAAc,EACdC,gBAAgB,EAChBC,gBAAgB,QACX,eAAe;AAItB,6DAA6D;AAC7D,6CAA6C;AAC7C,OAAO,MAAMC,kBAAkB,CAACC;IAC9B,OAAQA,UAAUJ;QAChB,KAAK;YACH,OAAOE;QAET;YACE,OAAOD;IACX;AACF,EAAE"}
@@ -2,4 +2,5 @@ export * from "./dateObjToString";
2
2
  export * from "./formatErrorMessageText";
3
3
  export * from "./validateDateFormat";
4
4
  export * from "./weekdayAsOneLetter";
5
+
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/DatePicker/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"sources":["../../../../../src/components/DatePicker/utils/index.ts"],"sourcesContent":["export * from \"./dateObjToString\";\nexport * from \"./formatErrorMessageText\";\nexport * from \"./validateDateFormat\";\nexport * from \"./weekdayAsOneLetter\";\n"],"names":[],"mappings":"AAAA,cAAc,oBAAoB;AAClC,cAAc,2BAA2B;AACzC,cAAc,uBAAuB;AACrC,cAAc,uBAAuB"}
@@ -1,7 +1,7 @@
1
1
  import { isMatch } from "date-fns";
2
2
  // eg 2023-12-31
3
3
  export const DATE_FORMAT = "yyyy-MM-dd";
4
- export const validateDateFormat = (date) => {
4
+ export const validateDateFormat = (date)=>{
5
5
  if (date === "") {
6
6
  return "";
7
7
  }
@@ -10,4 +10,5 @@ export const validateDateFormat = (date) => {
10
10
  }
11
11
  throw Error(`DatePicker defaultValue '${date}' is invalid. The expected format is '${DATE_FORMAT}' `);
12
12
  };
13
+
13
14
  //# sourceMappingURL=validateDateFormat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validateDateFormat.js","sourceRoot":"","sources":["../../../../../src/components/DatePicker/utils/validateDateFormat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,gBAAgB;AAChB,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC;AAExC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,EAAE;IACjD,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,CACT,4BAA4B,IAAI,yCAAyC,WAAW,IAAI,CACzF,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../../../../src/components/DatePicker/utils/validateDateFormat.ts"],"sourcesContent":["import { isMatch } from \"date-fns\";\n\n// eg 2023-12-31\nexport const DATE_FORMAT = \"yyyy-MM-dd\";\n\nexport const validateDateFormat = (date: string) => {\n if (date === \"\") {\n return \"\";\n }\n\n if (isMatch(date, DATE_FORMAT)) {\n return date;\n }\n\n throw Error(\n `DatePicker defaultValue '${date}' is invalid. The expected format is '${DATE_FORMAT}' `,\n );\n};\n"],"names":["isMatch","DATE_FORMAT","validateDateFormat","date","Error"],"mappings":"AAAA,SAASA,OAAO,QAAQ,WAAW;AAEnC,gBAAgB;AAChB,OAAO,MAAMC,cAAc,aAAa;AAExC,OAAO,MAAMC,qBAAqB,CAACC;IACjC,IAAIA,SAAS,IAAI;QACf,OAAO;IACT;IAEA,IAAIH,QAAQG,MAAMF,cAAc;QAC9B,OAAOE;IACT;IAEA,MAAMC,MACJ,CAAC,yBAAyB,EAAED,KAAK,sCAAsC,EAAEF,YAAY,EAAE,CAAC;AAE5F,EAAE"}
@@ -1,10 +1,11 @@
1
1
  import { DEFAULT_LOCALE } from "../constants";
2
- export const weekdayAsOneLetter = (weekday, options) => {
3
- var _a;
4
- const locale = ((_a = options === null || options === void 0 ? void 0 : options.locale) === null || _a === void 0 ? void 0 : _a.code) || DEFAULT_LOCALE;
5
- const oneLetter = weekday.toLocaleString(locale, {
6
- weekday: "narrow",
2
+ export const weekdayAsOneLetter = (date, options)=>{
3
+ var _options_locale;
4
+ const locale = (options === null || options === void 0 ? void 0 : (_options_locale = options.locale) === null || _options_locale === void 0 ? void 0 : _options_locale.code) || DEFAULT_LOCALE;
5
+ const oneLetter = date.toLocaleString(locale, {
6
+ weekday: "narrow"
7
7
  });
8
8
  return oneLetter;
9
9
  };
10
+
10
11
  //# sourceMappingURL=weekdayAsOneLetter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"weekdayAsOneLetter.js","sourceRoot":"","sources":["../../../../../src/components/DatePicker/utils/weekdayAsOneLetter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,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,cAAc,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"}
1
+ {"version":3,"sources":["../../../../../src/components/DatePicker/utils/weekdayAsOneLetter.ts"],"sourcesContent":["import { DateFormatter } from \"react-day-picker\";\nimport { DEFAULT_LOCALE } from \"../constants\";\n\nexport const weekdayAsOneLetter: DateFormatter = (date, options) => {\n const locale = options?.locale?.code || DEFAULT_LOCALE;\n const oneLetter = date.toLocaleString(locale, {\n weekday: \"narrow\",\n });\n\n return oneLetter;\n};\n"],"names":["DEFAULT_LOCALE","weekdayAsOneLetter","date","options","locale","code","oneLetter","toLocaleString","weekday"],"mappings":"AACA,SAASA,cAAc,QAAQ,eAAe;AAE9C,OAAO,MAAMC,qBAAoC,CAACC,MAAMC;QACvCA;IAAf,MAAMC,SAASD,CAAAA,oBAAAA,+BAAAA,kBAAAA,QAASC,MAAM,cAAfD,sCAAAA,gBAAiBE,IAAI,KAAIL;IACxC,MAAMM,YAAYJ,KAAKK,cAAc,CAACH,QAAQ;QAC5CI,SAAS;IACX;IAEA,OAAOF;AACT,EAAE"}
@@ -1,2 +1,3 @@
1
1
  export * from "./useFocusTrap";
2
+
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.tsx"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"sources":["../../../src/hooks/index.tsx"],"sourcesContent":["export * from \"./useFocusTrap\";\n"],"names":[],"mappings":"AAAA,cAAc,iBAAiB"}
@@ -1,2 +1,3 @@
1
1
  export * from "./useFocusTrap";
2
+
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/index.tsx"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"sources":["../../../../src/hooks/useFocusTrap/index.tsx"],"sourcesContent":["export * from \"./useFocusTrap\";\n"],"names":[],"mappings":"AAAA,cAAc,iBAAiB"}
@@ -1,38 +1,40 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useEffect, useRef } from "react";
3
- const useFocusTrap = () => {
3
+ const useFocusTrap = ()=>{
4
4
  const containerRef = useRef(null);
5
- useEffect(() => {
5
+ useEffect(()=>{
6
6
  if (containerRef.current) {
7
7
  const element = containerRef.current;
8
8
  const focusableElements = containerRef.current.querySelectorAll('.rdp-nav_button, [tabindex="0"]');
9
9
  const firstElement = focusableElements[0];
10
10
  const lastElement = focusableElements[focusableElements.length - 1];
11
- const handleTabKeyPress = (event) => {
11
+ const handleTabKeyPress = (event)=>{
12
12
  if (event.key === "Tab") {
13
13
  if (event.shiftKey && document.activeElement === firstElement) {
14
14
  event.preventDefault();
15
15
  lastElement.focus();
16
- }
17
- else if (!event.shiftKey &&
18
- document.activeElement &&
19
- document.activeElement.className.indexOf("rdp-day") > -1) {
16
+ } else if (!event.shiftKey && document.activeElement && document.activeElement.className.indexOf("rdp-day") > -1) {
20
17
  event.preventDefault();
21
18
  firstElement.focus();
22
19
  }
23
20
  }
24
21
  };
25
22
  element.addEventListener("keydown", handleTabKeyPress);
26
- return () => {
23
+ return ()=>{
27
24
  element.removeEventListener("keydown", handleTabKeyPress);
28
25
  };
29
26
  }
30
- return () => { };
27
+ return ()=>{};
31
28
  }, []);
32
29
  return containerRef;
33
30
  };
34
31
  export default function FocusTrap({ children }) {
35
32
  const focusRef = useFocusTrap();
36
- return (_jsx("div", { className: "trap", ref: focusRef, children: children }));
33
+ return /*#__PURE__*/ _jsx("div", {
34
+ className: "trap",
35
+ ref: focusRef,
36
+ children: children
37
+ });
37
38
  }
39
+
38
40
  //# sourceMappingURL=useFocusTrap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFocusTrap.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/useFocusTrap.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAa,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAErD,MAAM,YAAY,GAAG,GAAG,EAAE;IACxB,MAAM,YAAY,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;YACrC,MAAM,iBAAiB,GACrB,YAAY,CAAC,OAAO,CAAC,gBAAgB,CACnC,iCAAiC,CAClC,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,CAAC;oBACxB,IAAI,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,YAAY,EAAE,CAAC;wBAC9D,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,WAAW,CAAC,KAAK,EAAE,CAAC;oBACtB,CAAC;yBAAM,IACL,CAAC,KAAK,CAAC,QAAQ;wBACf,QAAQ,CAAC,aAAa;wBACtB,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EACxD,CAAC;wBACD,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,YAAY,CAAC,KAAK,EAAE,CAAC;oBACvB,CAAC;gBACH,CAAC;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;QACJ,CAAC;QACD,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAMF,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,QAAQ,EAAkB;IAC5D,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAEhC,OAAO,CACL,cAAK,SAAS,EAAC,MAAM,EAAC,GAAG,EAAE,QAAQ,YAChC,QAAQ,GACL,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"sources":["../../../../src/hooks/useFocusTrap/useFocusTrap.tsx"],"sourcesContent":["import { ReactNode, useEffect, useRef } from \"react\";\n\nconst useFocusTrap = () => {\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (containerRef.current) {\n const element = containerRef.current;\n const focusableElements =\n containerRef.current.querySelectorAll<HTMLElement>(\n '.rdp-nav_button, [tabindex=\"0\"]',\n );\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n const handleTabKeyPress = (event: KeyboardEvent) => {\n if (event.key === \"Tab\") {\n if (event.shiftKey && document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n } else if (\n !event.shiftKey &&\n document.activeElement &&\n document.activeElement.className.indexOf(\"rdp-day\") > -1\n ) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n };\n\n element.addEventListener(\"keydown\", handleTabKeyPress);\n return () => {\n element.removeEventListener(\"keydown\", handleTabKeyPress);\n };\n }\n return () => {};\n }, []);\n\n return containerRef;\n};\n\nexport type FocusTrapProps = {\n children: ReactNode;\n};\n\nexport default function FocusTrap({ children }: FocusTrapProps) {\n const focusRef = useFocusTrap();\n\n return (\n <div className=\"trap\" ref={focusRef}>\n {children}\n </div>\n );\n}\n"],"names":["useEffect","useRef","useFocusTrap","containerRef","current","element","focusableElements","querySelectorAll","firstElement","lastElement","length","handleTabKeyPress","event","key","shiftKey","document","activeElement","preventDefault","focus","className","indexOf","addEventListener","removeEventListener","FocusTrap","children","focusRef","div","ref"],"mappings":";AAAA,SAAoBA,SAAS,EAAEC,MAAM,QAAQ,QAAQ;AAErD,MAAMC,eAAe;IACnB,MAAMC,eAAeF,OAA8B;IAEnDD,UAAU;QACR,IAAIG,aAAaC,OAAO,EAAE;YACxB,MAAMC,UAAUF,aAAaC,OAAO;YACpC,MAAME,oBACJH,aAAaC,OAAO,CAACG,gBAAgB,CACnC;YAGJ,MAAMC,eAAeF,iBAAiB,CAAC,EAAE;YACzC,MAAMG,cAAcH,iBAAiB,CAACA,kBAAkBI,MAAM,GAAG,EAAE;YAEnE,MAAMC,oBAAoB,CAACC;gBACzB,IAAIA,MAAMC,GAAG,KAAK,OAAO;oBACvB,IAAID,MAAME,QAAQ,IAAIC,SAASC,aAAa,KAAKR,cAAc;wBAC7DI,MAAMK,cAAc;wBACpBR,YAAYS,KAAK;oBACnB,OAAO,IACL,CAACN,MAAME,QAAQ,IACfC,SAASC,aAAa,IACtBD,SAASC,aAAa,CAACG,SAAS,CAACC,OAAO,CAAC,aAAa,CAAC,GACvD;wBACAR,MAAMK,cAAc;wBACpBT,aAAaU,KAAK;oBACpB;gBACF;YACF;YAEAb,QAAQgB,gBAAgB,CAAC,WAAWV;YACpC,OAAO;gBACLN,QAAQiB,mBAAmB,CAAC,WAAWX;YACzC;QACF;QACA,OAAO,KAAO;IAChB,GAAG,EAAE;IAEL,OAAOR;AACT;AAMA,eAAe,SAASoB,UAAU,EAAEC,QAAQ,EAAkB;IAC5D,MAAMC,WAAWvB;IAEjB,qBACE,KAACwB;QAAIP,WAAU;QAAOQ,KAAKF;kBACxBD;;AAGP"}
package/dist/esm/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from "./components/DatePicker";
2
+
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"sources":["../../src/index.tsx"],"sourcesContent":["export * from \"./components/DatePicker\";\n"],"names":[],"mappings":"AAAA,cAAc,0BAA0B"}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=styles.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/styles.d.ts"],"names":[],"mappings":""}
@@ -1,4 +1,29 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import styles from "./StoryContainer.module.css";
3
- export const StoryContainer = (props) => (_jsx("div", Object.assign({ className: styles.storyContainer }, props)));
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ const css = `
3
+ :root {
4
+ --story-container-width: auto;
5
+ }
6
+
7
+ @media (min-width: 641px) {
8
+ :root {
9
+ --story-container-width: var(--size-inner-container);
10
+ }
11
+ }
12
+
13
+ .story-container {
14
+ width: var(--story-container-width);
15
+ }
16
+ `;
17
+ export const StoryContainer = (props)=>/*#__PURE__*/ _jsxs(_Fragment, {
18
+ children: [
19
+ /*#__PURE__*/ _jsx("style", {
20
+ children: css
21
+ }),
22
+ /*#__PURE__*/ _jsx("div", {
23
+ className: "story-container",
24
+ ...props
25
+ })
26
+ ]
27
+ });
28
+
4
29
  //# sourceMappingURL=StoryContainer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StoryContainer.js","sourceRoot":"","sources":["../../../src/utils/StoryContainer.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,6BAA6B,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAA8B,EAAE,EAAE,CAAC,CAChE,4BAAK,SAAS,EAAE,MAAM,CAAC,cAAc,IAAM,KAAK,EAAI,CACrD,CAAC"}
1
+ {"version":3,"sources":["../../../src/utils/StoryContainer.tsx"],"sourcesContent":["const css = `\n :root {\n --story-container-width: auto;\n }\n\n @media (min-width: 641px) {\n :root {\n --story-container-width: var(--size-inner-container);\n }\n }\n\n .story-container {\n width: var(--story-container-width);\n }\n`;\n\nexport const StoryContainer = (props: Record<string, unknown>) => (\n <>\n <style>{css}</style>\n <div className=\"story-container\" {...props} />\n </>\n);\n"],"names":["css","StoryContainer","props","style","div","className"],"mappings":";AAAA,MAAMA,MAAM,CAAC;;;;;;;;;;;;;;AAcb,CAAC;AAED,OAAO,MAAMC,iBAAiB,CAACC,sBAC7B;;0BACE,KAACC;0BAAOH;;0BACR,KAACI;gBAAIC,WAAU;gBAAmB,GAAGH,KAAK;;;OAE5C"}
@@ -21,5 +21,13 @@
21
21
  // },
22
22
  // }}
23
23
  // />
24
- export const excludeControls = (...args) => args.reduce((prev, acc) => (Object.assign(Object.assign({}, prev), { [acc]: { table: { disable: true } } })), {});
24
+ export const excludeControls = (...args)=>args.reduce((prev, acc)=>({
25
+ ...prev,
26
+ [acc]: {
27
+ table: {
28
+ disable: true
29
+ }
30
+ }
31
+ }), {});
32
+
25
33
  //# sourceMappingURL=excludeControls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"excludeControls.js","sourceRoot":"","sources":["../../../src/utils/excludeControls.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,mEAAmE;AACnE,eAAe;AACf,EAAE;AACF,gCAAgC;AAChC,mGAAmG;AACnG,EAAE;AACF,uCAAuC;AACvC,EAAE;AACF,QAAQ;AACR,mCAAmC;AACnC,4BAA4B;AAC5B,gBAAgB;AAChB,eAAe;AACf,mBAAmB;AACnB,wBAAwB;AACxB,WAAW;AACX,iBAAiB;AACjB,yBAAyB;AACzB,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK;AACL,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE,CACnD,IAAI,CAAC,MAAM,CACT,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,iCAAM,IAAI,KAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAG,EACjE,EAAE,CACH,CAAC"}
1
+ {"version":3,"sources":["../../../src/utils/excludeControls.ts"],"sourcesContent":["// This function generates data structure required to hide specified\n// prop from individual stories. Key 'table' is where specified key\n// is disabled.\n//\n// The above is documented here:\n// https://storybook.js.org/docs/react/essentials/controls#disable-controls-for-specific-properties\n//\n// The expected usage looks as follows:\n//\n// <Meta\n// title=\"Components/MyComponent\"\n// component={MyComponent}\n// argTypes={{\n// label: {\n// control: {\n// type: \"text\",\n// },\n// table: {\n// disable: true,\n// },\n// },\n// }}\n// />\nexport const excludeControls = (...args: string[]) =>\n args.reduce(\n (prev, acc) => ({ ...prev, [acc]: { table: { disable: true } } }),\n {},\n );\n"],"names":["excludeControls","args","reduce","prev","acc","table","disable"],"mappings":"AAAA,oEAAoE;AACpE,mEAAmE;AACnE,eAAe;AACf,EAAE;AACF,gCAAgC;AAChC,mGAAmG;AACnG,EAAE;AACF,uCAAuC;AACvC,EAAE;AACF,QAAQ;AACR,mCAAmC;AACnC,4BAA4B;AAC5B,gBAAgB;AAChB,eAAe;AACf,mBAAmB;AACnB,wBAAwB;AACxB,WAAW;AACX,iBAAiB;AACjB,yBAAyB;AACzB,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK;AACL,OAAO,MAAMA,kBAAkB,CAAC,GAAGC,OACjCA,KAAKC,MAAM,CACT,CAACC,MAAMC,MAAS,CAAA;YAAE,GAAGD,IAAI;YAAE,CAACC,IAAI,EAAE;gBAAEC,OAAO;oBAAEC,SAAS;gBAAK;YAAE;QAAE,CAAA,GAC/D,CAAC,GACD"}
@@ -1,4 +1,5 @@
1
1
  export * from "./excludeControls";
2
2
  export * from "./isTouchDevice";
3
3
  export * from "./StoryContainer";
4
+
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"sources":["../../../src/utils/index.ts"],"sourcesContent":["export * from \"./excludeControls\";\nexport * from \"./isTouchDevice\";\nexport * from \"./StoryContainer\";\n"],"names":[],"mappings":"AAAA,cAAc,oBAAoB;AAClC,cAAc,kBAAkB;AAChC,cAAc,mBAAmB"}
@@ -1,7 +1,8 @@
1
- export const isTouchDevice = () => {
1
+ export const isTouchDevice = ()=>{
2
2
  if (typeof window !== "undefined") {
3
3
  return window.matchMedia("(hover: none), (pointer: coarse)").matches;
4
4
  }
5
5
  return undefined;
6
6
  };
7
+
7
8
  //# sourceMappingURL=isTouchDevice.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"isTouchDevice.js","sourceRoot":"","sources":["../../../src/utils/isTouchDevice.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,GAAwB,EAAE;IACrD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO,CAAC;IACvE,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../../src/utils/isTouchDevice.ts"],"sourcesContent":["export const isTouchDevice = (): boolean | undefined => {\n if (typeof window !== \"undefined\") {\n return window.matchMedia(\"(hover: none), (pointer: coarse)\").matches;\n }\n\n return undefined;\n};\n"],"names":["isTouchDevice","window","matchMedia","matches","undefined"],"mappings":"AAAA,OAAO,MAAMA,gBAAgB;IAC3B,IAAI,OAAOC,WAAW,aAAa;QACjC,OAAOA,OAAOC,UAAU,CAAC,oCAAoCC,OAAO;IACtE;IAEA,OAAOC;AACT,EAAE"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@simplybusiness/mobius-datepicker",
3
3
  "license": "UNLICENSED",
4
- "version": "4.2.7",
4
+ "version": "4.3.1",
5
5
  "description": "Mobius date picker component",
6
6
  "repository": {
7
7
  "type": "git",
@@ -9,7 +9,7 @@
9
9
  },
10
10
  "main": "dist/cjs/index.js",
11
11
  "module": "dist/esm/index.js",
12
- "types": "dist/mobius-datepicker.d.ts",
12
+ "types": "./src/index.tsx",
13
13
  "files": [
14
14
  "src/**",
15
15
  "dist/cjs/**/*",
@@ -19,7 +19,7 @@
19
19
  ],
20
20
  "exports": {
21
21
  ".": {
22
- "types": "./dist/mobius-datepicker.d.ts",
22
+ "types": "./src/index.tsx",
23
23
  "require": "./dist/cjs/index.js",
24
24
  "import": "./dist/esm/index.js"
25
25
  }
@@ -28,17 +28,15 @@
28
28
  "clean": "rm -rf dist",
29
29
  "build": "yarn run -T turbo run turbo:build",
30
30
  "prepack": "yarn run build",
31
- "build:cjs": "tsc",
32
- "build:esm": "tsc -p tsconfig.esm.json",
33
- "build:extract-api": "api-extractor run",
31
+ "build:cjs": "yarn swc --config-file ../.swcrc ./src -d ./dist/cjs -C module.type=commonjs",
32
+ "build:esm": "yarn swc --config-file ../.swcrc ./src -d ./dist/esm -C module.type=es6",
34
33
  "lint": "eslint --ext .tsx,.ts,.js,.jsx,.mjs .",
35
34
  "test": "NODE_OPTIONS=--experimental-vm-modules jest",
36
35
  "test:coverage": "NODE_OPTIONS=--experimental-vm-modules jest --collect-coverage",
37
- "check-types": "tsc --noEmit --emitDeclarationOnly false --pretty"
36
+ "check-types": "tsc --noEmit --pretty"
38
37
  },
39
38
  "sideEffects": false,
40
39
  "devDependencies": {
41
- "@microsoft/api-extractor": "^7.39.1",
42
40
  "@swc/core": "^1.3.102",
43
41
  "@swc/jest": "^0.2.29",
44
42
  "@testing-library/dom": "^9.3.3",
@@ -73,7 +71,8 @@
73
71
  },
74
72
  "dependencies": {
75
73
  "@simplybusiness/icons": "^4.2.7",
76
- "@simplybusiness/mobius": "^4.2.7",
74
+ "@simplybusiness/mobius": "^4.2.8",
75
+ "@swc/cli": "^0.1.63",
77
76
  "classnames": "^2.5.1",
78
77
  "date-fns": "^2.30.0",
79
78
  "react-day-picker": "^8.10.0"
@@ -11,11 +11,11 @@ import classNames from "classnames/dedupe";
11
11
  import {
12
12
  ChangeEvent,
13
13
  FocusEvent,
14
+ Suspense,
15
+ lazy,
14
16
  useEffect,
15
17
  useRef,
16
18
  useState,
17
- lazy,
18
- Suspense,
19
19
  } from "react";
20
20
  import { isTouchDevice } from "../../utils/isTouchDevice";
21
21
  import { formatErrorMessageText, validateDateFormat } from "./utils";
@@ -138,7 +138,7 @@ export const DatePicker = (props: DatePickerProps) => {
138
138
  ref={inputRef}
139
139
  type="date"
140
140
  className="mobius/DatePicker"
141
- // @ts-ignore
141
+ // @ts-expect-error event type
142
142
  onBlur={handleBlur}
143
143
  onChange={handleTextFieldChange}
144
144
  value={textFieldVal}
@@ -157,7 +157,7 @@ export const DatePicker = (props: DatePickerProps) => {
157
157
  ref={inputRef}
158
158
  type="date"
159
159
  className="mobius/DatePicker"
160
- // @ts-ignore
160
+ // @ts-expect-error event type
161
161
  onBlur={handleBlur}
162
162
  onChange={handleTextFieldChange}
163
163
  value={textFieldVal}
@@ -6,8 +6,8 @@ import { useRef } from "react";
6
6
  import { DayPicker } from "react-day-picker";
7
7
  import FocusTrap from "../../hooks/useFocusTrap/useFocusTrap";
8
8
  import { DatePickerIcon } from "./DatePickerIcon";
9
- import { MONDAY_AS_NUMBER } from "./constants";
10
9
  import { dateObjToString, weekdayAsOneLetter } from "./utils";
10
+ import { getStartWeekday } from "./utils/getStartWeekday";
11
11
 
12
12
  const PARENT_NODE = typeof document !== "undefined" && document.body;
13
13
 
@@ -20,6 +20,8 @@ export type DatePickerModalProps = {
20
20
  max?: string;
21
21
  };
22
22
 
23
+ const startWeekday = getStartWeekday(navigator?.language);
24
+
23
25
  const DatePickerModal = ({
24
26
  date,
25
27
  isOpen,
@@ -81,7 +83,7 @@ const DatePickerModal = ({
81
83
  onSelect={handleDayPickerSelect}
82
84
  pagedNavigation
83
85
  showOutsideDays
84
- weekStartsOn={MONDAY_AS_NUMBER}
86
+ weekStartsOn={startWeekday}
85
87
  formatters={{ formatWeekdayName: weekdayAsOneLetter }}
86
88
  components={{
87
89
  IconLeft: DatePickerIcon,
@@ -1,4 +1,3 @@
1
+ export const SUNDAY_AS_NUMBER = 0;
1
2
  export const MONDAY_AS_NUMBER = 1;
2
-
3
- export const DEFAULT_LOCALE =
4
- (typeof window !== "undefined" && window?.navigator?.language) || "en-GB";
3
+ export const DEFAULT_LOCALE = "en-GB";
@@ -0,0 +1,33 @@
1
+ import { MONDAY_AS_NUMBER, SUNDAY_AS_NUMBER } from "../constants";
2
+ import { getStartWeekday } from "./getStartWeekday";
3
+
4
+ describe("getStartWeekday", () => {
5
+ beforeEach(() => {
6
+ jest.spyOn(navigator, "languages", "get").mockReturnValue([]);
7
+ jest.spyOn(navigator, "language", "get").mockImplementation(() => "en-GB");
8
+ });
9
+
10
+ it("assumes default of en-GB (Monday) when no args supplied", () => {
11
+ const day = getStartWeekday();
12
+
13
+ expect(day).toEqual(MONDAY_AS_NUMBER);
14
+ });
15
+
16
+ it("returns Monday for en-GB", () => {
17
+ const day = getStartWeekday("en-GB");
18
+
19
+ expect(day).toEqual(MONDAY_AS_NUMBER);
20
+ });
21
+
22
+ it("returns Sunday for en-US", () => {
23
+ const day = getStartWeekday("en-US");
24
+
25
+ expect(day).toEqual(SUNDAY_AS_NUMBER);
26
+ });
27
+
28
+ it("returns Monday for anywhere else", () => {
29
+ const day = getStartWeekday("de-DE");
30
+
31
+ expect(day).toEqual(MONDAY_AS_NUMBER);
32
+ });
33
+ });
@@ -0,0 +1,19 @@
1
+ import {
2
+ DEFAULT_LOCALE,
3
+ MONDAY_AS_NUMBER,
4
+ SUNDAY_AS_NUMBER,
5
+ } from "../constants";
6
+
7
+ type WeekStart = 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined;
8
+
9
+ // Calculates start of week for calendar in UK and US locales
10
+ // Add more to the switch statement as needed
11
+ export const getStartWeekday = (locale?: string): WeekStart => {
12
+ switch (locale || DEFAULT_LOCALE) {
13
+ case "en-US":
14
+ return SUNDAY_AS_NUMBER;
15
+
16
+ default:
17
+ return MONDAY_AS_NUMBER;
18
+ }
19
+ };
@@ -1,9 +1,9 @@
1
1
  import { DateFormatter } from "react-day-picker";
2
2
  import { DEFAULT_LOCALE } from "../constants";
3
3
 
4
- export const weekdayAsOneLetter: DateFormatter = (weekday, options) => {
4
+ export const weekdayAsOneLetter: DateFormatter = (date, options) => {
5
5
  const locale = options?.locale?.code || DEFAULT_LOCALE;
6
- const oneLetter = weekday.toLocaleString(locale, {
6
+ const oneLetter = date.toLocaleString(locale, {
7
7
  weekday: "narrow",
8
8
  });
9
9
 
@@ -1,5 +1,22 @@
1
- import styles from "./StoryContainer.module.css";
1
+ const css = `
2
+ :root {
3
+ --story-container-width: auto;
4
+ }
5
+
6
+ @media (min-width: 641px) {
7
+ :root {
8
+ --story-container-width: var(--size-inner-container);
9
+ }
10
+ }
11
+
12
+ .story-container {
13
+ width: var(--story-container-width);
14
+ }
15
+ `;
2
16
 
3
17
  export const StoryContainer = (props: Record<string, unknown>) => (
4
- <div className={styles.storyContainer} {...props} />
18
+ <>
19
+ <style>{css}</style>
20
+ <div className="story-container" {...props} />
21
+ </>
5
22
  );
@@ -1,9 +0,0 @@
1
- import { TextFieldProps } from "@simplybusiness/mobius";
2
- export interface DatePickerProps extends Omit<TextFieldProps, "defaultValue" | "onChange" | "onBlur" | "onFocus"> {
3
- onChange?: (date: string | undefined) => void;
4
- defaultValue?: string;
5
- min?: string;
6
- max?: string;
7
- id?: string;
8
- }
9
- export declare const DatePicker: (props: DatePickerProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,11 +0,0 @@
1
- import type { Meta, StoryObj } from "@storybook/react";
2
- import { DatePicker } from "./DatePicker";
3
- type StoryType = StoryObj<typeof DatePicker>;
4
- declare const meta: Meta<typeof DatePicker>;
5
- export declare const Normal: StoryType;
6
- export declare const WithMinValue: StoryType;
7
- export declare const WithMaxValue: StoryType;
8
- export declare const Disabled: StoryType;
9
- export declare const Valid: StoryType;
10
- export declare const Invalid: StoryType;
11
- export default meta;
@@ -1,79 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Invalid = exports.Valid = exports.Disabled = exports.WithMaxValue = exports.WithMinValue = exports.Normal = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const date_fns_1 = require("date-fns");
6
- const utils_1 = require("../../utils");
7
- const DatePicker_1 = require("./DatePicker");
8
- const meta = {
9
- title: "Forms/DatePicker",
10
- component: DatePicker_1.DatePicker,
11
- argTypes: Object.assign({ validationState: {
12
- options: ["valid", "invalid", "neither"],
13
- control: { type: "radio" },
14
- mapping: {
15
- valid: "valid",
16
- invalid: "invalid",
17
- neither: "",
18
- },
19
- } }, (0, utils_1.excludeControls)("description", "type", "labelElementType", "inputElementType", "isReadOnly")),
20
- args: {
21
- defaultValue: "",
22
- errorMessage: "",
23
- isDisabled: false,
24
- isRequired: false,
25
- min: "",
26
- max: "",
27
- },
28
- decorators: [
29
- Story => ((0, jsx_runtime_1.jsx)(utils_1.StoryContainer, { style: { height: 450 }, children: (0, jsx_runtime_1.jsx)(Story, {}) })),
30
- ],
31
- };
32
- exports.Normal = {
33
- render: (args) => (0, jsx_runtime_1.jsx)(DatePicker_1.DatePicker, Object.assign({}, args)),
34
- args: {
35
- label: "Start date",
36
- },
37
- };
38
- const aWeekFromToday = (0, date_fns_1.format)((0, date_fns_1.add)(new Date(), { weeks: 1 }), "yyyy-MM-dd");
39
- const twoMonthsFromToday = (0, date_fns_1.format)((0, date_fns_1.add)(new Date(), { months: 2 }), "yyyy-MM-dd");
40
- exports.WithMinValue = {
41
- render: (args) => (0, jsx_runtime_1.jsx)(DatePicker_1.DatePicker, Object.assign({}, args)),
42
- args: {
43
- label: "Start date (a week from today)",
44
- min: aWeekFromToday,
45
- isRequired: true,
46
- },
47
- };
48
- exports.WithMaxValue = {
49
- render: (args) => (0, jsx_runtime_1.jsx)(DatePicker_1.DatePicker, Object.assign({}, args)),
50
- args: {
51
- label: "End date (two months from today)",
52
- max: twoMonthsFromToday,
53
- isRequired: true,
54
- },
55
- };
56
- exports.Disabled = {
57
- render: (args) => (0, jsx_runtime_1.jsx)(DatePicker_1.DatePicker, Object.assign({}, args)),
58
- args: {
59
- label: "Start date",
60
- isDisabled: true,
61
- },
62
- };
63
- exports.Valid = {
64
- render: (args) => (0, jsx_runtime_1.jsx)(DatePicker_1.DatePicker, Object.assign({}, args)),
65
- args: {
66
- label: "Start date",
67
- validationState: "valid",
68
- },
69
- };
70
- exports.Invalid = {
71
- render: (args) => (0, jsx_runtime_1.jsx)(DatePicker_1.DatePicker, Object.assign({}, args)),
72
- args: {
73
- label: "Start date",
74
- validationState: "invalid",
75
- errorMessage: "This is an error message",
76
- },
77
- };
78
- exports.default = meta;
79
- //# sourceMappingURL=DatePicker.stories.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DatePicker.stories.js","sourceRoot":"","sources":["../../../../src/components/DatePicker/DatePicker.stories.tsx"],"names":[],"mappings":";;;;AACA,uCAAuC;AACvC,uCAA8D;AAC9D,6CAA2D;AAI3D,MAAM,IAAI,GAA4B;IACpC,KAAK,EAAE,kBAAkB;IACzB,SAAS,EAAE,uBAAU;IACrB,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,uBAAe,EAChB,aAAa,EACb,MAAM,EACN,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,CACb,CACF;IACD,IAAI,EAAE;QACJ,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,EAAE;QAChB,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,KAAK;QACjB,GAAG,EAAE,EAAE;QACP,GAAG,EAAE,EAAE;KACR;IACD,UAAU,EAAE;QACV,KAAK,CAAC,EAAE,CAAC,CACP,uBAAC,sBAAc,IAAC,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,YACpC,uBAAC,KAAK,KAAG,GACM,CAClB;KACF;CACF,CAAC;AAEW,QAAA,MAAM,GAAc;IAC/B,MAAM,EAAE,CAAC,IAAqB,EAAE,EAAE,CAAC,uBAAC,uBAAU,oBAAK,IAAI,EAAI;IAC3D,IAAI,EAAE;QACJ,KAAK,EAAE,YAAY;KACpB;CACF,CAAC;AAEF,MAAM,cAAc,GAAG,IAAA,iBAAM,EAAC,IAAA,cAAG,EAAC,IAAI,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;AAC3E,MAAM,kBAAkB,GAAG,IAAA,iBAAM,EAAC,IAAA,cAAG,EAAC,IAAI,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;AAEnE,QAAA,YAAY,GAAc;IACrC,MAAM,EAAE,CAAC,IAAqB,EAAE,EAAE,CAAC,uBAAC,uBAAU,oBAAK,IAAI,EAAI;IAC3D,IAAI,EAAE;QACJ,KAAK,EAAE,gCAAgC;QACvC,GAAG,EAAE,cAAc;QACnB,UAAU,EAAE,IAAI;KACjB;CACF,CAAC;AAEW,QAAA,YAAY,GAAc;IACrC,MAAM,EAAE,CAAC,IAAqB,EAAE,EAAE,CAAC,uBAAC,uBAAU,oBAAK,IAAI,EAAI;IAC3D,IAAI,EAAE;QACJ,KAAK,EAAE,kCAAkC;QACzC,GAAG,EAAE,kBAAkB;QACvB,UAAU,EAAE,IAAI;KACjB;CACF,CAAC;AAEW,QAAA,QAAQ,GAAc;IACjC,MAAM,EAAE,CAAC,IAAqB,EAAE,EAAE,CAAC,uBAAC,uBAAU,oBAAK,IAAI,EAAI;IAC3D,IAAI,EAAE;QACJ,KAAK,EAAE,YAAY;QACnB,UAAU,EAAE,IAAI;KACjB;CACF,CAAC;AAEW,QAAA,KAAK,GAAc;IAC9B,MAAM,EAAE,CAAC,IAAqB,EAAE,EAAE,CAAC,uBAAC,uBAAU,oBAAK,IAAI,EAAI;IAC3D,IAAI,EAAE;QACJ,KAAK,EAAE,YAAY;QACnB,eAAe,EAAE,OAAO;KACzB;CACF,CAAC;AAEW,QAAA,OAAO,GAAc;IAChC,MAAM,EAAE,CAAC,IAAqB,EAAE,EAAE,CAAC,uBAAC,uBAAU,oBAAK,IAAI,EAAI;IAC3D,IAAI,EAAE;QACJ,KAAK,EAAE,YAAY;QACnB,eAAe,EAAE,SAAS;QAC1B,YAAY,EAAE,0BAA0B;KACzC;CACF,CAAC;AAEF,kBAAe,IAAI,CAAC"}
@@ -1 +0,0 @@
1
- export {};