@codecademy/gamut 68.2.3-alpha.df0cb3.0 → 68.2.3-alpha.df22d8.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.
Files changed (50) hide show
  1. package/dist/FocusTrap/index.d.ts +2 -2
  2. package/dist/PopoverContainer/PopoverContainer.js +3 -23
  3. package/dist/PopoverContainer/types.d.ts +0 -5
  4. package/dist/index.d.ts +0 -2
  5. package/dist/index.js +0 -2
  6. package/package.json +6 -7
  7. package/dist/DatePicker/Calendar/CalendarBody.d.ts +0 -3
  8. package/dist/DatePicker/Calendar/CalendarBody.js +0 -139
  9. package/dist/DatePicker/Calendar/CalendarFooter.d.ts +0 -3
  10. package/dist/DatePicker/Calendar/CalendarFooter.js +0 -57
  11. package/dist/DatePicker/Calendar/CalendarHeader.d.ts +0 -3
  12. package/dist/DatePicker/Calendar/CalendarHeader.js +0 -46
  13. package/dist/DatePicker/Calendar/CalendarNavLastMonth.d.ts +0 -3
  14. package/dist/DatePicker/Calendar/CalendarNavLastMonth.js +0 -30
  15. package/dist/DatePicker/Calendar/CalendarNavNextMonth.d.ts +0 -3
  16. package/dist/DatePicker/Calendar/CalendarNavNextMonth.js +0 -30
  17. package/dist/DatePicker/Calendar/CalendarWrapper.d.ts +0 -8
  18. package/dist/DatePicker/Calendar/CalendarWrapper.js +0 -27
  19. package/dist/DatePicker/Calendar/index.d.ts +0 -6
  20. package/dist/DatePicker/Calendar/index.js +0 -6
  21. package/dist/DatePicker/Calendar/types.d.ts +0 -77
  22. package/dist/DatePicker/Calendar/types.js +0 -1
  23. package/dist/DatePicker/Calendar/utils/dateGrid.d.ts +0 -38
  24. package/dist/DatePicker/Calendar/utils/dateGrid.js +0 -103
  25. package/dist/DatePicker/Calendar/utils/elements.d.ts +0 -18
  26. package/dist/DatePicker/Calendar/utils/elements.js +0 -116
  27. package/dist/DatePicker/Calendar/utils/format.d.ts +0 -44
  28. package/dist/DatePicker/Calendar/utils/format.js +0 -128
  29. package/dist/DatePicker/Calendar/utils/keyHandler.d.ts +0 -12
  30. package/dist/DatePicker/Calendar/utils/keyHandler.js +0 -126
  31. package/dist/DatePicker/Calendar/utils/validation.d.ts +0 -13
  32. package/dist/DatePicker/Calendar/utils/validation.js +0 -23
  33. package/dist/DatePicker/DatePicker.d.ts +0 -7
  34. package/dist/DatePicker/DatePicker.js +0 -155
  35. package/dist/DatePicker/DatePickerCalendar.d.ts +0 -11
  36. package/dist/DatePicker/DatePickerCalendar.js +0 -163
  37. package/dist/DatePicker/DatePickerContext.d.ts +0 -10
  38. package/dist/DatePicker/DatePickerContext.js +0 -18
  39. package/dist/DatePicker/DatePickerInput.d.ts +0 -16
  40. package/dist/DatePicker/DatePickerInput.js +0 -134
  41. package/dist/DatePicker/index.d.ts +0 -5
  42. package/dist/DatePicker/index.js +0 -5
  43. package/dist/DatePicker/types.d.ts +0 -86
  44. package/dist/DatePicker/types.js +0 -1
  45. package/dist/DatePicker/utils/dateSelect.d.ts +0 -19
  46. package/dist/DatePicker/utils/dateSelect.js +0 -146
  47. package/dist/DatePicker/utils/locale.d.ts +0 -38
  48. package/dist/DatePicker/utils/locale.js +0 -93
  49. package/dist/DatePicker/utils/translations.d.ts +0 -15
  50. package/dist/DatePicker/utils/translations.js +0 -10
@@ -23,8 +23,8 @@ export interface FocusTrapProps extends WithChildrenProp {
23
23
  */
24
24
  allowPageInteraction?: boolean;
25
25
  /**
26
- * Passthrough for react-focus-on library props (partial; only override what you need).
26
+ * Passthrough for react-focus-on library props
27
27
  */
28
- focusOnProps?: Partial<ReactFocusOnProps>;
28
+ focusOnProps?: ReactFocusOnProps;
29
29
  }
30
30
  export declare const FocusTrap: React.FC<FocusTrapProps>;
@@ -1,5 +1,5 @@
1
1
  import _styled from "@emotion/styled/base";
2
- import { system } from '@codecademy/gamut-styles';
2
+ import { system, useDirectionIsRtl } from '@codecademy/gamut-styles';
3
3
  import { variance } from '@codecademy/variance';
4
4
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
5
5
  import * as React from 'react';
@@ -16,7 +16,7 @@ const PopoverContent = /*#__PURE__*/_styled("div", {
16
16
  transform: {
17
17
  property: 'transform'
18
18
  }
19
- })), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Qb3BvdmVyQ29udGFpbmVyL1BvcG92ZXJDb250YWluZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCdUIiLCJmaWxlIjoiLi4vLi4vc3JjL1BvcG92ZXJDb250YWluZXIvUG9wb3ZlckNvbnRhaW5lci50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzeXN0ZW0gfSBmcm9tICdAY29kZWNhZGVteS9nYW11dC1zdHlsZXMnO1xuaW1wb3J0IHsgdmFyaWFuY2UgfSBmcm9tICdAY29kZWNhZGVteS92YXJpYW5jZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlV2luZG93U2Nyb2xsLCB1c2VXaW5kb3dTaXplIH0gZnJvbSAncmVhY3QtdXNlJztcblxuaW1wb3J0IHsgQm9keVBvcnRhbCB9IGZyb20gJy4uL0JvZHlQb3J0YWwnO1xuaW1wb3J0IHsgRm9jdXNUcmFwIH0gZnJvbSAnLi4vRm9jdXNUcmFwJztcbmltcG9ydCB7XG4gIHVzZVJlc2l6aW5nUGFyZW50RWZmZWN0LFxuICB1c2VTY3JvbGxpbmdQYXJlbnRzLFxuICB1c2VTY3JvbGxpbmdQYXJlbnRzRWZmZWN0LFxufSBmcm9tICcuL2hvb2tzJztcbmltcG9ydCB7IENvbnRhaW5lclN0YXRlLCBQb3BvdmVyQ29udGFpbmVyUHJvcHMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdldENvbnRhaW5lcnMsIGdldFBvc2l0aW9uLCBpc091dE9mVmlldyB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBQb3BvdmVyQ29udGVudCA9IHN0eWxlZC5kaXYoXG4gIHZhcmlhbmNlLmNvbXBvc2UoXG4gICAgc3lzdGVtLnBvc2l0aW9uaW5nLFxuICAgIHZhcmlhbmNlLmNyZWF0ZSh7XG4gICAgICB0cmFuc2Zvcm06IHtcbiAgICAgICAgcHJvcGVydHk6ICd0cmFuc2Zvcm0nLFxuICAgICAgfSxcbiAgICB9KVxuICApXG4pO1xuXG5leHBvcnQgY29uc3QgUG9wb3ZlckNvbnRhaW5lcjogUmVhY3QuRkM8UG9wb3ZlckNvbnRhaW5lclByb3BzPiA9ICh7XG4gIGFsaWdubWVudCA9ICdib3R0b20tbGVmdCcsXG4gIG9mZnNldCA9IDIwLFxuICB5ID0gMCxcbiAgeCA9IDAsXG4gIGludmVydEF4aXMsXG4gIGlubGluZSA9IGZhbHNlLFxuICBpc09wZW4sXG4gIG9uUmVxdWVzdENsb3NlLFxuICB0YXJnZXRSZWYsXG4gIGFsbG93UGFnZUludGVyYWN0aW9uLFxuICBjbG9zZU9uVmlld3BvcnRFeGl0ID0gZmFsc2UsXG4gIGZvY3VzT25Qcm9wcyxcbiAgLi4ucmVzdFxufSkgPT4ge1xuICBjb25zdCBwb3BvdmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgaGFzUmVxdWVzdGVkQ2xvc2VSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBvblJlcXVlc3RDbG9zZVJlZiA9IHVzZVJlZihvblJlcXVlc3RDbG9zZSk7XG4gIGNvbnN0IHsgd2lkdGg6IHdpblcsIGhlaWdodDogd2luSCB9ID0gdXNlV2luZG93U2l6ZSgpO1xuICBjb25zdCB7IHg6IHdpblgsIHk6IHdpblkgfSA9IHVzZVdpbmRvd1Njcm9sbCgpO1xuICBjb25zdCBbY29udGFpbmVycywgc2V0Q29udGFpbmVyc10gPSB1c2VTdGF0ZTxDb250YWluZXJTdGF0ZT4oKTtcbiAgY29uc3QgW3RhcmdldFJlY3QsIHNldFRhcmdldFJlY3RdID0gdXNlU3RhdGU8RE9NUmVjdD4oKTtcbiAgY29uc3QgcGFyZW50ID0gY29udGFpbmVycz8ucGFyZW50O1xuXG4gIC8vIE1lbW9pemUgc2Nyb2xsaW5nIHBhcmVudHMgdG8gYXZvaWQgZXhwZW5zaXZlIERPTSB0cmF2ZXJzYWxzXG4gIGNvbnN0IHNjcm9sbGluZ1BhcmVudHMgPSB1c2VTY3JvbGxpbmdQYXJlbnRzKFxuICAgIHRhcmdldFJlZiBhcyBSZWFjdC5SZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPlxuICApO1xuXG4gIC8vIEtlZXAgb25SZXF1ZXN0Q2xvc2UgcmVmIHVwIHRvIGRhdGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBvblJlcXVlc3RDbG9zZVJlZi5jdXJyZW50ID0gb25SZXF1ZXN0Q2xvc2U7XG4gIH0sIFtvblJlcXVlc3RDbG9zZV0pO1xuXG4gIC8vIERldGVjdCBSVEwgZGlyZWN0aW9uIGZyb20gdGhlIHRhcmdldCBlbGVtZW50IGFuZCB3YXRjaCBmb3IgYXR0cmlidXRlIGNoYW5nZXMgc28gdGhlXG4gIC8vIHBvc2l0aW9uIHJlY2FsY3VsYXRlcyB3aGVuIGNoYW5nZXMgb2NjdXJcbiAgY29uc3QgW2lzUnRsLCBzZXRJc1J0bF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY2hlY2tEaXJlY3Rpb24gPSAoKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRSZWY/LmN1cnJlbnQ7XG4gICAgICBjb25zdCBlbCA9IHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgPyB0YXJnZXQgOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICBzZXRJc1J0bChnZXRDb21wdXRlZFN0eWxlKGVsKS5kaXJlY3Rpb24gPT09ICdydGwnKTtcbiAgICB9O1xuXG4gICAgY2hlY2tEaXJlY3Rpb24oKTtcblxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2hlY2tEaXJlY3Rpb24pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB7XG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbJ2RpciddLFxuICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9LCBbdGFyZ2V0UmVmXSk7XG5cbiAgY29uc3QgcG9wb3ZlclBvc2l0aW9uID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHBhcmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZ2V0UG9zaXRpb24oe1xuICAgICAgICBhbGlnbm1lbnQsXG4gICAgICAgIGNvbnRhaW5lcjogcGFyZW50LFxuICAgICAgICBpbnZlcnRBeGlzLFxuICAgICAgICBpc1J0bCxcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7IHN0eWxlczoge30sIHBoeXNpY2FsU3R5bGVzOiB1bmRlZmluZWQgfTtcbiAgfSwgW3BhcmVudCwgeCwgeSwgb2Zmc2V0LCBhbGlnbm1lbnQsIGludmVydEF4aXMsIGlzUnRsXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRSZWY/LmN1cnJlbnQ7XG4gICAgaWYgKCF0YXJnZXQpIHJldHVybjtcbiAgICBzZXRDb250YWluZXJzKGdldENvbnRhaW5lcnModGFyZ2V0LCBpbmxpbmUsIHsgeDogd2luWCwgeTogd2luWSB9KSk7XG4gIH0sIFt0YXJnZXRSZWYsIGlubGluZSwgd2luVywgd2luSCwgd2luWCwgd2luWSwgdGFyZ2V0UmVjdF0pO1xuXG4gIC8vIFVwZGF0ZSB0YXJnZXQgcmVjdGFuZ2xlIHdoZW4gd2luZG93IHNpemUvc2Nyb2xsIGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRUYXJnZXRSZWN0KHRhcmdldFJlZj8uY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICB9LCBbdGFyZ2V0UmVmLCBpc09wZW4sIHdpblcsIHdpbkgsIHdpblgsIHdpblldKTtcblxuICAvLyBVcGRhdGUgdGFyZ2V0IHJlY3RhbmdsZSB3aGVuIHBhcmVudCBzaXplL3Njcm9sbCBjaGFuZ2VzXG4gIGNvbnN0IHVwZGF0ZVRhcmdldFBvc2l0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHJlY3Q/OiBET01SZWN0KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRSZWY/LmN1cnJlbnQ7XG4gICAgICBpZiAoIXRhcmdldCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBuZXdSZWN0ID0gcmVjdCB8fCB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBzZXRUYXJnZXRSZWN0KG5ld1JlY3QpO1xuXG4gICAgICBjb25zdCBjdXJyZW50U2Nyb2xsWCA9XG4gICAgICAgIHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxZID1cbiAgICAgICAgd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICAgIHNldENvbnRhaW5lcnMoXG4gICAgICAgIGdldENvbnRhaW5lcnModGFyZ2V0LCBpbmxpbmUsIHsgeDogY3VycmVudFNjcm9sbFgsIHk6IGN1cnJlbnRTY3JvbGxZIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgW3RhcmdldFJlZiwgaW5saW5lXVxuICApO1xuXG4gIHVzZVNjcm9sbGluZ1BhcmVudHNFZmZlY3QodGFyZ2V0UmVmLCB1cGRhdGVUYXJnZXRQb3NpdGlvbik7XG5cbiAgdXNlUmVzaXppbmdQYXJlbnRFZmZlY3QodGFyZ2V0UmVmLCBzZXRUYXJnZXRSZWN0KTtcblxuICAvLyBIYW5kbGUgY2xvc2VPblZpZXdwb3J0RXhpdCB3aXRoIGNhY2hlZCBzY3JvbGxpbmcgcGFyZW50cyBmb3IgcGVyZm9ybWFuY2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNsb3NlT25WaWV3cG9ydEV4aXQpIHJldHVybjtcblxuICAgIGNvbnN0IHJlY3QgPSB0YXJnZXRSZWN0IHx8IGNvbnRhaW5lcnM/LnZpZXdwb3J0O1xuICAgIGlmICghcmVjdCkgcmV0dXJuO1xuXG4gICAgY29uc3QgaXNPdXQgPSBpc091dE9mVmlldyhcbiAgICAgIHJlY3QsXG4gICAgICB0YXJnZXRSZWY/LmN1cnJlbnQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICBzY3JvbGxpbmdQYXJlbnRzXG4gICAgKTtcblxuICAgIGlmIChpc091dCAmJiAhaGFzUmVxdWVzdGVkQ2xvc2VSZWYuY3VycmVudCkge1xuICAgICAgaGFzUmVxdWVzdGVkQ2xvc2VSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICBvblJlcXVlc3RDbG9zZVJlZi5jdXJyZW50Py4oKTtcbiAgICB9IGVsc2UgaWYgKCFpc091dCkge1xuICAgICAgaGFzUmVxdWVzdGVkQ2xvc2VSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW1xuICAgIHRhcmdldFJlY3QsXG4gICAgY29udGFpbmVycz8udmlld3BvcnQsXG4gICAgdGFyZ2V0UmVmLFxuICAgIGNsb3NlT25WaWV3cG9ydEV4aXQsXG4gICAgc2Nyb2xsaW5nUGFyZW50cyxcbiAgXSk7XG4gIC8qKlxuICAgKiBBbGxvd3MgdGFyZ2V0UmVmIHRvIGJlIG9yIGNvbnRhaW4gYSBidXR0b24gdGhhdCB0b2dnbGVzIHRoZSBwb3BvdmVyIG9wZW4gYW5kIGNsb3NlZC5cbiAgICogV2l0aG91dCB0aGlzIGNoZWNrIGl0IHdvdWxkIHRvZ2dsZSBjbG9zZWQgdGhlbiBiYWNrIG9wZW4gaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqL1xuICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIE5vZGU7XG4gICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gdGFyZ2V0UmVmLmN1cnJlbnQ7XG5cbiAgICAgIGlmICghdGFyZ2V0RWxlbWVudCkgcmV0dXJuO1xuICAgICAgaWYgKHRhcmdldEVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkgcmV0dXJuO1xuICAgICAgaWYgKHBvcG92ZXJSZWYuY3VycmVudD8uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuO1xuXG4gICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgaXQncyBhIGdlbnVpbmUgb3V0c2lkZSBjbGlja1xuICAgICAgb25SZXF1ZXN0Q2xvc2U/LigpO1xuICAgIH0sXG4gICAgW29uUmVxdWVzdENsb3NlLCB0YXJnZXRSZWZdXG4gICk7XG5cbiAgLyoqXG4gICAqIEJhY2t1cCBjbGljayBvdXRzaWRlIGhhbmRsZXIgZm9yIGNhc2VzIHdoZXJlIEZvY3VzVHJhcCBkZXRlY3Rpb24gbWlnaHQgYmUgaW50ZXJmZXJlZCB3aXRoXG4gICAqIGJ5IG91ciBvd24gZmxvYXRpbmcgZWxlbWVudHNcbiAgICovXG4gIGNvbnN0IGhhbmRsZUdsb2JhbENsaWNrT3V0c2lkZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBOb2RlO1xuICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHRhcmdldFJlZi5jdXJyZW50O1xuXG4gICAgICBpZiAoIXRhcmdldEVsZW1lbnQgfHwgIWlzT3BlbikgcmV0dXJuO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHRhcmdldEVsZW1lbnQuY29udGFpbnModGFyZ2V0KSB8fFxuICAgICAgICBwb3BvdmVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKHRhcmdldClcbiAgICAgIClcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGUgY2xpY2tlZCBlbGVtZW50IGlzIHdpdGhpbiBhbiBPdmVybGF5IGNvbXBvbmVudFxuICAgICAgY29uc3QgY2xpY2tlZEVsZW1lbnQgPSB0YXJnZXQgYXMgRWxlbWVudDtcbiAgICAgIGlmIChjbGlja2VkRWxlbWVudC5jbG9zZXN0KCdbZGF0YS1mbG9hdGluZz1cIm92ZXJsYXlcIl0nKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBjbGlja2VkIGVsZW1lbnQgaXMgd2l0aGluIGFub3RoZXIgUG9wb3ZlciBvciBQb3BvdmVyQ29udGFpbmVyXG4gICAgICBjb25zdCBpc0Zsb2F0aW5nRWxlbWVudCA9IGNsaWNrZWRFbGVtZW50LmNsb3Nlc3QoXG4gICAgICAgICdbZGF0YS1mbG9hdGluZz1cInBvcG92ZXJcIl0nXG4gICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBpc0Zsb2F0aW5nRWxlbWVudCAmJlxuICAgICAgICAhcG9wb3ZlclJlZi5jdXJyZW50Py5jb250YWlucyhpc0Zsb2F0aW5nRWxlbWVudClcbiAgICAgICkge1xuICAgICAgICBvblJlcXVlc3RDbG9zZT8uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgb25SZXF1ZXN0Q2xvc2U/LigpO1xuICAgIH0sXG4gICAgW29uUmVxdWVzdENsb3NlLCB0YXJnZXRSZWYsIGlzT3Blbl1cbiAgKTtcblxuICAvLyBCYWNrdXAgZ2xvYmFsIGNsaWNrIGxpc3RlbmVyIGZvciB3aGVuIGEgUG9wb3ZlciBvciBQb3BvdmVyQ29udGFpbmVyIGlzIG9wZW5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAvLyBVc2UgYSBzbWFsbCBkZWxheSB0byBlbnN1cmUgdGhpcyBkb2Vzbid0IGludGVyZmVyZSB3aXRoIHRoZSBGb2N1c1RyYXAncyBvd24gZGV0ZWN0aW9uXG4gICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlR2xvYmFsQ2xpY2tPdXRzaWRlLCB0cnVlKTtcbiAgICAgIH0sIDUwKTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgJ21vdXNlZG93bicsXG4gICAgICAgICAgaGFuZGxlR2xvYmFsQ2xpY2tPdXRzaWRlLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbaXNPcGVuLCBoYW5kbGVHbG9iYWxDbGlja091dHNpZGVdKTtcblxuICBpZiAoIWlzT3BlbiB8fCAhdGFyZ2V0UmVmKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjb250ZW50ID0gKFxuICAgIDxGb2N1c1RyYXBcbiAgICAgIGFsbG93UGFnZUludGVyYWN0aW9uPXtpbmxpbmUgfHwgYWxsb3dQYWdlSW50ZXJhY3Rpb259XG4gICAgICBmb2N1c09uUHJvcHM9e2ZvY3VzT25Qcm9wc31cbiAgICAgIG9uQ2xpY2tPdXRzaWRlPXtoYW5kbGVDbGlja091dHNpZGV9XG4gICAgICBvbkVzY2FwZUtleT17b25SZXF1ZXN0Q2xvc2V9XG4gICAgPlxuICAgICAgPFBvcG92ZXJDb250ZW50XG4gICAgICAgIGRhdGEtZmxvYXRpbmc9XCJwb3BvdmVyXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJwb3BvdmVyLWNvbnRlbnQtY29udGFpbmVyXCJcbiAgICAgICAgcG9zaXRpb249XCJhYnNvbHV0ZVwiXG4gICAgICAgIHJlZj17cG9wb3ZlclJlZn1cbiAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICB6SW5kZXg9e2lubGluZSA/IDUgOiAnaW5pdGlhbCd9XG4gICAgICAgIHsuLi5wb3BvdmVyUG9zaXRpb24uc3R5bGVzfVxuICAgICAgICAvKiBQaHlzaWNhbCBpbmxpbmUgc3R5bGUgZm9yIGNlbnRlcmVkIGFsaWdubWVudHMgKHRvcC9ib3R0b20pIHdoZXJlXG4gICAgICAgICAgIGluc2V0LWlubGluZS1zdGFydCB3b3VsZCBpbmNvcnJlY3RseSBmbGlwIHRoZSBjZW50ZXIgcG9pbnQgaW4gUlRMICovXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnYW11dC9uby1pbmxpbmUtc3R5bGUgKi9cbiAgICAgICAgc3R5bGU9e3BvcG92ZXJQb3NpdGlvbi5waHlzaWNhbFN0eWxlc31cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAvPlxuICAgIDwvRm9jdXNUcmFwPlxuICApO1xuXG4gIGlmIChpbmxpbmUpIHJldHVybiBjb250ZW50O1xuXG4gIHJldHVybiA8Qm9keVBvcnRhbD57Y29udGVudH08L0JvZHlQb3J0YWw+O1xufTtcbiJdfQ== */");
19
+ })), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Qb3BvdmVyQ29udGFpbmVyL1BvcG92ZXJDb250YWluZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCdUIiLCJmaWxlIjoiLi4vLi4vc3JjL1BvcG92ZXJDb250YWluZXIvUG9wb3ZlckNvbnRhaW5lci50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzeXN0ZW0sIHVzZURpcmVjdGlvbklzUnRsIH0gZnJvbSAnQGNvZGVjYWRlbXkvZ2FtdXQtc3R5bGVzJztcbmltcG9ydCB7IHZhcmlhbmNlIH0gZnJvbSAnQGNvZGVjYWRlbXkvdmFyaWFuY2UnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVdpbmRvd1Njcm9sbCwgdXNlV2luZG93U2l6ZSB9IGZyb20gJ3JlYWN0LXVzZSc7XG5cbmltcG9ydCB7IEJvZHlQb3J0YWwgfSBmcm9tICcuLi9Cb2R5UG9ydGFsJztcbmltcG9ydCB7IEZvY3VzVHJhcCB9IGZyb20gJy4uL0ZvY3VzVHJhcCc7XG5pbXBvcnQge1xuICB1c2VSZXNpemluZ1BhcmVudEVmZmVjdCxcbiAgdXNlU2Nyb2xsaW5nUGFyZW50cyxcbiAgdXNlU2Nyb2xsaW5nUGFyZW50c0VmZmVjdCxcbn0gZnJvbSAnLi9ob29rcyc7XG5pbXBvcnQgeyBDb250YWluZXJTdGF0ZSwgUG9wb3ZlckNvbnRhaW5lclByb3BzIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRDb250YWluZXJzLCBnZXRQb3NpdGlvbiwgaXNPdXRPZlZpZXcgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgUG9wb3ZlckNvbnRlbnQgPSBzdHlsZWQuZGl2KFxuICB2YXJpYW5jZS5jb21wb3NlKFxuICAgIHN5c3RlbS5wb3NpdGlvbmluZyxcbiAgICB2YXJpYW5jZS5jcmVhdGUoe1xuICAgICAgdHJhbnNmb3JtOiB7XG4gICAgICAgIHByb3BlcnR5OiAndHJhbnNmb3JtJyxcbiAgICAgIH0sXG4gICAgfSlcbiAgKVxuKTtcblxuZXhwb3J0IGNvbnN0IFBvcG92ZXJDb250YWluZXI6IFJlYWN0LkZDPFBvcG92ZXJDb250YWluZXJQcm9wcz4gPSAoe1xuICBhbGlnbm1lbnQgPSAnYm90dG9tLWxlZnQnLFxuICBvZmZzZXQgPSAyMCxcbiAgeSA9IDAsXG4gIHggPSAwLFxuICBpbnZlcnRBeGlzLFxuICBpbmxpbmUgPSBmYWxzZSxcbiAgaXNPcGVuLFxuICBvblJlcXVlc3RDbG9zZSxcbiAgdGFyZ2V0UmVmLFxuICBhbGxvd1BhZ2VJbnRlcmFjdGlvbixcbiAgY2xvc2VPblZpZXdwb3J0RXhpdCA9IGZhbHNlLFxuICAuLi5yZXN0XG59KSA9PiB7XG4gIGNvbnN0IHBvcG92ZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBoYXNSZXF1ZXN0ZWRDbG9zZVJlZiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IG9uUmVxdWVzdENsb3NlUmVmID0gdXNlUmVmKG9uUmVxdWVzdENsb3NlKTtcbiAgY29uc3QgeyB3aWR0aDogd2luVywgaGVpZ2h0OiB3aW5IIH0gPSB1c2VXaW5kb3dTaXplKCk7XG4gIGNvbnN0IHsgeDogd2luWCwgeTogd2luWSB9ID0gdXNlV2luZG93U2Nyb2xsKCk7XG4gIGNvbnN0IFtjb250YWluZXJzLCBzZXRDb250YWluZXJzXSA9IHVzZVN0YXRlPENvbnRhaW5lclN0YXRlPigpO1xuICBjb25zdCBbdGFyZ2V0UmVjdCwgc2V0VGFyZ2V0UmVjdF0gPSB1c2VTdGF0ZTxET01SZWN0PigpO1xuICBjb25zdCBwYXJlbnQgPSBjb250YWluZXJzPy5wYXJlbnQ7XG4gIGNvbnN0IGlzUnRsID0gdXNlRGlyZWN0aW9uSXNSdGwoXG4gICAgdGFyZ2V0UmVmIGFzIFJlYWN0LlJlZk9iamVjdDxIVE1MRWxlbWVudCB8IG51bGw+XG4gICk7XG5cbiAgLy8gTWVtb2l6ZSBzY3JvbGxpbmcgcGFyZW50cyB0byBhdm9pZCBleHBlbnNpdmUgRE9NIHRyYXZlcnNhbHNcbiAgY29uc3Qgc2Nyb2xsaW5nUGFyZW50cyA9IHVzZVNjcm9sbGluZ1BhcmVudHMoXG4gICAgdGFyZ2V0UmVmIGFzIFJlYWN0LlJlZk9iamVjdDxIVE1MRWxlbWVudCB8IG51bGw+XG4gICk7XG5cbiAgLy8gS2VlcCBvblJlcXVlc3RDbG9zZSByZWYgdXAgdG8gZGF0ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIG9uUmVxdWVzdENsb3NlUmVmLmN1cnJlbnQgPSBvblJlcXVlc3RDbG9zZTtcbiAgfSwgW29uUmVxdWVzdENsb3NlXSk7XG5cbiAgY29uc3QgcG9wb3ZlclBvc2l0aW9uID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHBhcmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZ2V0UG9zaXRpb24oe1xuICAgICAgICBhbGlnbm1lbnQsXG4gICAgICAgIGNvbnRhaW5lcjogcGFyZW50LFxuICAgICAgICBpbnZlcnRBeGlzLFxuICAgICAgICBpc1J0bCxcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7IHN0eWxlczoge30sIHBoeXNpY2FsU3R5bGVzOiB1bmRlZmluZWQgfTtcbiAgfSwgW3BhcmVudCwgeCwgeSwgb2Zmc2V0LCBhbGlnbm1lbnQsIGludmVydEF4aXMsIGlzUnRsXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRSZWY/LmN1cnJlbnQ7XG4gICAgaWYgKCF0YXJnZXQpIHJldHVybjtcbiAgICBzZXRDb250YWluZXJzKGdldENvbnRhaW5lcnModGFyZ2V0LCBpbmxpbmUsIHsgeDogd2luWCwgeTogd2luWSB9KSk7XG4gIH0sIFt0YXJnZXRSZWYsIGlubGluZSwgd2luVywgd2luSCwgd2luWCwgd2luWSwgdGFyZ2V0UmVjdF0pO1xuXG4gIC8vIFVwZGF0ZSB0YXJnZXQgcmVjdGFuZ2xlIHdoZW4gd2luZG93IHNpemUvc2Nyb2xsIGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRUYXJnZXRSZWN0KHRhcmdldFJlZj8uY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICB9LCBbdGFyZ2V0UmVmLCBpc09wZW4sIHdpblcsIHdpbkgsIHdpblgsIHdpblldKTtcblxuICAvLyBVcGRhdGUgdGFyZ2V0IHJlY3RhbmdsZSB3aGVuIHBhcmVudCBzaXplL3Njcm9sbCBjaGFuZ2VzXG4gIGNvbnN0IHVwZGF0ZVRhcmdldFBvc2l0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHJlY3Q/OiBET01SZWN0KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRSZWY/LmN1cnJlbnQ7XG4gICAgICBpZiAoIXRhcmdldCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBuZXdSZWN0ID0gcmVjdCB8fCB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBzZXRUYXJnZXRSZWN0KG5ld1JlY3QpO1xuXG4gICAgICBjb25zdCBjdXJyZW50U2Nyb2xsWCA9XG4gICAgICAgIHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxZID1cbiAgICAgICAgd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICAgIHNldENvbnRhaW5lcnMoXG4gICAgICAgIGdldENvbnRhaW5lcnModGFyZ2V0LCBpbmxpbmUsIHsgeDogY3VycmVudFNjcm9sbFgsIHk6IGN1cnJlbnRTY3JvbGxZIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgW3RhcmdldFJlZiwgaW5saW5lXVxuICApO1xuXG4gIHVzZVNjcm9sbGluZ1BhcmVudHNFZmZlY3QodGFyZ2V0UmVmLCB1cGRhdGVUYXJnZXRQb3NpdGlvbik7XG5cbiAgdXNlUmVzaXppbmdQYXJlbnRFZmZlY3QodGFyZ2V0UmVmLCBzZXRUYXJnZXRSZWN0KTtcblxuICAvLyBIYW5kbGUgY2xvc2VPblZpZXdwb3J0RXhpdCB3aXRoIGNhY2hlZCBzY3JvbGxpbmcgcGFyZW50cyBmb3IgcGVyZm9ybWFuY2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNsb3NlT25WaWV3cG9ydEV4aXQpIHJldHVybjtcblxuICAgIGNvbnN0IHJlY3QgPSB0YXJnZXRSZWN0IHx8IGNvbnRhaW5lcnM/LnZpZXdwb3J0O1xuICAgIGlmICghcmVjdCkgcmV0dXJuO1xuXG4gICAgY29uc3QgaXNPdXQgPSBpc091dE9mVmlldyhcbiAgICAgIHJlY3QsXG4gICAgICB0YXJnZXRSZWY/LmN1cnJlbnQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICBzY3JvbGxpbmdQYXJlbnRzXG4gICAgKTtcblxuICAgIGlmIChpc091dCAmJiAhaGFzUmVxdWVzdGVkQ2xvc2VSZWYuY3VycmVudCkge1xuICAgICAgaGFzUmVxdWVzdGVkQ2xvc2VSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICBvblJlcXVlc3RDbG9zZVJlZi5jdXJyZW50Py4oKTtcbiAgICB9IGVsc2UgaWYgKCFpc091dCkge1xuICAgICAgaGFzUmVxdWVzdGVkQ2xvc2VSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW1xuICAgIHRhcmdldFJlY3QsXG4gICAgY29udGFpbmVycz8udmlld3BvcnQsXG4gICAgdGFyZ2V0UmVmLFxuICAgIGNsb3NlT25WaWV3cG9ydEV4aXQsXG4gICAgc2Nyb2xsaW5nUGFyZW50cyxcbiAgXSk7XG4gIC8qKlxuICAgKiBBbGxvd3MgdGFyZ2V0UmVmIHRvIGJlIG9yIGNvbnRhaW4gYSBidXR0b24gdGhhdCB0b2dnbGVzIHRoZSBwb3BvdmVyIG9wZW4gYW5kIGNsb3NlZC5cbiAgICogV2l0aG91dCB0aGlzIGNoZWNrIGl0IHdvdWxkIHRvZ2dsZSBjbG9zZWQgdGhlbiBiYWNrIG9wZW4gaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqL1xuICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIE5vZGU7XG4gICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gdGFyZ2V0UmVmLmN1cnJlbnQ7XG5cbiAgICAgIGlmICghdGFyZ2V0RWxlbWVudCkgcmV0dXJuO1xuICAgICAgaWYgKHRhcmdldEVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkgcmV0dXJuO1xuICAgICAgaWYgKHBvcG92ZXJSZWYuY3VycmVudD8uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuO1xuXG4gICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgaXQncyBhIGdlbnVpbmUgb3V0c2lkZSBjbGlja1xuICAgICAgb25SZXF1ZXN0Q2xvc2U/LigpO1xuICAgIH0sXG4gICAgW29uUmVxdWVzdENsb3NlLCB0YXJnZXRSZWZdXG4gICk7XG5cbiAgLyoqXG4gICAqIEJhY2t1cCBjbGljayBvdXRzaWRlIGhhbmRsZXIgZm9yIGNhc2VzIHdoZXJlIEZvY3VzVHJhcCBkZXRlY3Rpb24gbWlnaHQgYmUgaW50ZXJmZXJlZCB3aXRoXG4gICAqIGJ5IG91ciBvd24gZmxvYXRpbmcgZWxlbWVudHNcbiAgICovXG4gIGNvbnN0IGhhbmRsZUdsb2JhbENsaWNrT3V0c2lkZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBOb2RlO1xuICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHRhcmdldFJlZi5jdXJyZW50O1xuXG4gICAgICBpZiAoIXRhcmdldEVsZW1lbnQgfHwgIWlzT3BlbikgcmV0dXJuO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHRhcmdldEVsZW1lbnQuY29udGFpbnModGFyZ2V0KSB8fFxuICAgICAgICBwb3BvdmVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKHRhcmdldClcbiAgICAgIClcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGUgY2xpY2tlZCBlbGVtZW50IGlzIHdpdGhpbiBhbiBPdmVybGF5IGNvbXBvbmVudFxuICAgICAgY29uc3QgY2xpY2tlZEVsZW1lbnQgPSB0YXJnZXQgYXMgRWxlbWVudDtcbiAgICAgIGlmIChjbGlja2VkRWxlbWVudC5jbG9zZXN0KCdbZGF0YS1mbG9hdGluZz1cIm92ZXJsYXlcIl0nKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBjbGlja2VkIGVsZW1lbnQgaXMgd2l0aGluIGFub3RoZXIgUG9wb3ZlciBvciBQb3BvdmVyQ29udGFpbmVyXG4gICAgICBjb25zdCBpc0Zsb2F0aW5nRWxlbWVudCA9IGNsaWNrZWRFbGVtZW50LmNsb3Nlc3QoXG4gICAgICAgICdbZGF0YS1mbG9hdGluZz1cInBvcG92ZXJcIl0nXG4gICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBpc0Zsb2F0aW5nRWxlbWVudCAmJlxuICAgICAgICAhcG9wb3ZlclJlZi5jdXJyZW50Py5jb250YWlucyhpc0Zsb2F0aW5nRWxlbWVudClcbiAgICAgICkge1xuICAgICAgICBvblJlcXVlc3RDbG9zZT8uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgb25SZXF1ZXN0Q2xvc2U/LigpO1xuICAgIH0sXG4gICAgW29uUmVxdWVzdENsb3NlLCB0YXJnZXRSZWYsIGlzT3Blbl1cbiAgKTtcblxuICAvLyBCYWNrdXAgZ2xvYmFsIGNsaWNrIGxpc3RlbmVyIGZvciB3aGVuIGEgUG9wb3ZlciBvciBQb3BvdmVyQ29udGFpbmVyIGlzIG9wZW5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAvLyBVc2UgYSBzbWFsbCBkZWxheSB0byBlbnN1cmUgdGhpcyBkb2Vzbid0IGludGVyZmVyZSB3aXRoIHRoZSBGb2N1c1RyYXAncyBvd24gZGV0ZWN0aW9uXG4gICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlR2xvYmFsQ2xpY2tPdXRzaWRlLCB0cnVlKTtcbiAgICAgIH0sIDUwKTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgJ21vdXNlZG93bicsXG4gICAgICAgICAgaGFuZGxlR2xvYmFsQ2xpY2tPdXRzaWRlLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbaXNPcGVuLCBoYW5kbGVHbG9iYWxDbGlja091dHNpZGVdKTtcblxuICBpZiAoIWlzT3BlbiB8fCAhdGFyZ2V0UmVmKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjb250ZW50ID0gKFxuICAgIDxGb2N1c1RyYXBcbiAgICAgIGFsbG93UGFnZUludGVyYWN0aW9uPXtpbmxpbmUgfHwgYWxsb3dQYWdlSW50ZXJhY3Rpb259XG4gICAgICBvbkNsaWNrT3V0c2lkZT17aGFuZGxlQ2xpY2tPdXRzaWRlfVxuICAgICAgb25Fc2NhcGVLZXk9e29uUmVxdWVzdENsb3NlfVxuICAgID5cbiAgICAgIDxQb3BvdmVyQ29udGVudFxuICAgICAgICBkYXRhLWZsb2F0aW5nPVwicG9wb3ZlclwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwicG9wb3Zlci1jb250ZW50LWNvbnRhaW5lclwiXG4gICAgICAgIHBvc2l0aW9uPVwiYWJzb2x1dGVcIlxuICAgICAgICByZWY9e3BvcG92ZXJSZWZ9XG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgekluZGV4PXtpbmxpbmUgPyA1IDogJ2luaXRpYWwnfVxuICAgICAgICB7Li4ucG9wb3ZlclBvc2l0aW9uLnN0eWxlc31cbiAgICAgICAgLyogUGh5c2ljYWwgaW5saW5lIHN0eWxlIGZvciBjZW50ZXJlZCBhbGlnbm1lbnRzICh0b3AvYm90dG9tKSB3aGVyZVxuICAgICAgICAgICBpbnNldC1pbmxpbmUtc3RhcnQgd291bGQgaW5jb3JyZWN0bHkgZmxpcCB0aGUgY2VudGVyIHBvaW50IGluIFJUTCAqL1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2FtdXQvbm8taW5saW5lLXN0eWxlICovXG4gICAgICAgIHN0eWxlPXtwb3BvdmVyUG9zaXRpb24ucGh5c2ljYWxTdHlsZXN9XG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgLz5cbiAgICA8L0ZvY3VzVHJhcD5cbiAgKTtcblxuICBpZiAoaW5saW5lKSByZXR1cm4gY29udGVudDtcblxuICByZXR1cm4gPEJvZHlQb3J0YWw+e2NvbnRlbnR9PC9Cb2R5UG9ydGFsPjtcbn07XG4iXX0= */");
20
20
  export const PopoverContainer = ({
21
21
  alignment = 'bottom-left',
22
22
  offset = 20,
@@ -29,7 +29,6 @@ export const PopoverContainer = ({
29
29
  targetRef,
30
30
  allowPageInteraction,
31
31
  closeOnViewportExit = false,
32
- focusOnProps,
33
32
  ...rest
34
33
  }) => {
35
34
  const popoverRef = useRef(null);
@@ -46,6 +45,7 @@ export const PopoverContainer = ({
46
45
  const [containers, setContainers] = useState();
47
46
  const [targetRect, setTargetRect] = useState();
48
47
  const parent = containers?.parent;
48
+ const isRtl = useDirectionIsRtl(targetRef);
49
49
 
50
50
  // Memoize scrolling parents to avoid expensive DOM traversals
51
51
  const scrollingParents = useScrollingParents(targetRef);
@@ -54,25 +54,6 @@ export const PopoverContainer = ({
54
54
  useEffect(() => {
55
55
  onRequestCloseRef.current = onRequestClose;
56
56
  }, [onRequestClose]);
57
-
58
- // Detect RTL direction from the target element and watch for attribute changes so the
59
- // position recalculates when changes occur
60
- const [isRtl, setIsRtl] = useState(false);
61
- useEffect(() => {
62
- const checkDirection = () => {
63
- const target = targetRef?.current;
64
- const el = target instanceof Element ? target : document.documentElement;
65
- setIsRtl(getComputedStyle(el).direction === 'rtl');
66
- };
67
- checkDirection();
68
- const observer = new MutationObserver(checkDirection);
69
- observer.observe(document.documentElement, {
70
- attributes: true,
71
- attributeFilter: ['dir'],
72
- subtree: true
73
- });
74
- return () => observer.disconnect();
75
- }, [targetRef]);
76
57
  const popoverPosition = useMemo(() => {
77
58
  if (parent !== undefined) {
78
59
  return getPosition({
@@ -190,7 +171,6 @@ export const PopoverContainer = ({
190
171
  if (!isOpen || !targetRef) return null;
191
172
  const content = /*#__PURE__*/_jsx(FocusTrap, {
192
173
  allowPageInteraction: inline || allowPageInteraction,
193
- focusOnProps: focusOnProps,
194
174
  onClickOutside: handleClickOutside,
195
175
  onEscapeKey: onRequestClose,
196
176
  children: /*#__PURE__*/_jsx(PopoverContent, {
@@ -65,9 +65,4 @@ export interface PopoverContainerProps extends PopoverAlignment, WithChildrenPro
65
65
  * Defaults to false.
66
66
  */
67
67
  closeOnViewportExit?: boolean;
68
- /**
69
- * Optional props passed to the internal FocusTrap (react-focus-on).
70
- * Use e.g. { autoFocus: false, focusLock: false } to keep focus on the trigger when the popover opens.
71
- */
72
- focusOnProps?: Partial<import('../FocusTrap').FocusTrapProps['focusOnProps']>;
73
68
  }
package/dist/index.d.ts CHANGED
@@ -16,8 +16,6 @@ export * from './Card';
16
16
  export * from './Coachmark';
17
17
  export * from './ConnectedForm';
18
18
  export * from './ContentContainer';
19
- export * from './DatePicker';
20
- export * from './DatePicker/Calendar';
21
19
  export * from './DelayedRenderWrapper';
22
20
  export * from './Disclosure';
23
21
  export * from './DataList';
package/dist/index.js CHANGED
@@ -15,8 +15,6 @@ export * from './Card';
15
15
  export * from './Coachmark';
16
16
  export * from './ConnectedForm';
17
17
  export * from './ContentContainer';
18
- export * from './DatePicker';
19
- export * from './DatePicker/Calendar';
20
18
  export * from './DelayedRenderWrapper';
21
19
  export * from './Disclosure';
22
20
  export * from './DataList';
package/package.json CHANGED
@@ -1,15 +1,14 @@
1
1
  {
2
2
  "name": "@codecademy/gamut",
3
3
  "description": "Styleguide & Component library for Codecademy",
4
- "version": "68.2.3-alpha.df0cb3.0",
4
+ "version": "68.2.3-alpha.df22d8.0",
5
5
  "author": "Codecademy Engineering <dev@codecademy.com>",
6
6
  "dependencies": {
7
- "@codecademy/gamut-icons": "9.57.3-alpha.df0cb3.0",
8
- "@codecademy/gamut-illustrations": "0.58.10-alpha.df0cb3.0",
9
- "@codecademy/gamut-patterns": "0.10.29-alpha.df0cb3.0",
10
- "@codecademy/gamut-styles": "17.13.2-alpha.df0cb3.0",
11
- "@codecademy/variance": "0.26.2-alpha.df0cb3.0",
12
- "@formatjs/intl-locale": "^5.3.1",
7
+ "@codecademy/gamut-icons": "9.57.3-alpha.df22d8.0",
8
+ "@codecademy/gamut-illustrations": "0.58.10-alpha.df22d8.0",
9
+ "@codecademy/gamut-patterns": "0.10.29-alpha.df22d8.0",
10
+ "@codecademy/gamut-styles": "17.13.2-alpha.df22d8.0",
11
+ "@codecademy/variance": "0.26.2-alpha.df22d8.0",
13
12
  "@react-aria/interactions": "3.25.0",
14
13
  "@types/marked": "^4.0.8",
15
14
  "@vidstack/react": "^1.12.12",
@@ -1,3 +0,0 @@
1
- import * as React from 'react';
2
- import { CalendarBodyProps } from './types';
3
- export declare const CalendarBody: React.FC<CalendarBodyProps>;
@@ -1,139 +0,0 @@
1
- import { useCallback, useEffect, useMemo, useRef } from 'react';
2
- import * as React from 'react';
3
- import { useIsoFirstWeekday, useResolvedLocale } from '../utils/locale';
4
- import { getDatesWithRow, getMonthGrid, isDateDisabled, isDateInRange, isSameDay } from './utils/dateGrid';
5
- import { CalendarTable, DateCell, TableHeader } from './utils/elements';
6
- import { formatDateForAriaLabel, getWeekdayNames } from './utils/format';
7
- import { keyHandler } from './utils/keyHandler';
8
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
- export const CalendarBody = ({
10
- displayDate,
11
- selectedDate,
12
- endDate = null,
13
- disabledDates = [],
14
- onDateSelect,
15
- locale,
16
- weekStartsOn,
17
- labelledById,
18
- focusedDate,
19
- onFocusedDateChange,
20
- onDisplayDateChange,
21
- onEscapeKeyPress,
22
- hasAdjacentMonthRight,
23
- hasAdjacentMonthLeft,
24
- focusGridSync
25
- }) => {
26
- const resolvedLocale = useResolvedLocale(locale);
27
- const firstWeekday = useIsoFirstWeekday(resolvedLocale, weekStartsOn);
28
- const year = displayDate.getFullYear();
29
- const month = displayDate.getMonth();
30
- const weeks = getMonthGrid(year, month, firstWeekday);
31
- const weekdayLabels = getWeekdayNames('short', resolvedLocale, firstWeekday);
32
- const weekdayFullNames = getWeekdayNames('long', resolvedLocale, firstWeekday);
33
- const buttonRefs = useRef(new Map());
34
- const tableRef = useRef(null);
35
- const datesWithRow = useMemo(() => getDatesWithRow(weeks), [weeks]);
36
- const focusTarget = focusedDate ?? selectedDate;
37
- const isToday = useCallback(date => date !== null && isSameDay(date, new Date()), []);
38
- const focusButton = useCallback(date => {
39
- if (date === null) return false;
40
- const key = new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();
41
- const el = buttonRefs.current.get(key);
42
- if (!el) return false;
43
- el.focus();
44
- return true;
45
- }, []);
46
- useEffect(() => {
47
- // Keep the roving tabindex / focused day aligned with `focusTarget` when it makes sense for a11y.
48
- if (focusTarget === null) return;
49
-
50
- // Standalone calendar (e.g. Storybook): always move DOM focus to the active day.
51
- if (!focusGridSync) {
52
- focusButton(focusTarget);
53
- return;
54
- }
55
- const inGrid = tableRef.current?.contains(document.activeElement);
56
- const requested = focusGridSync.gridFocusRequested;
57
-
58
- // Focus is already in this grid (keyboard nav): update which day is focused as `focusTarget` changes.
59
- if (inGrid) {
60
- focusButton(focusTarget);
61
- return;
62
- }
63
-
64
- // DatePicker opened via keyboard / ArrowDown: parent asked to move focus into the grid once.
65
- if (requested) {
66
- const success = focusButton(focusTarget);
67
- if (success) {
68
- focusGridSync.onGridFocusRequestHandled();
69
- }
70
- }
71
- // If !inGrid && !requested (e.g. calendar opened with the mouse): leave focus on the input — do not call focusButton.
72
- }, [focusTarget, focusButton, focusGridSync]);
73
- const handleKeyDown = useCallback((e, date) => keyHandler({
74
- e,
75
- date,
76
- onFocusedDateChange,
77
- datesWithRow,
78
- month,
79
- year,
80
- disabledDates,
81
- onDateSelect,
82
- onEscapeKeyPress,
83
- onDisplayDateChange,
84
- hasAdjacentMonthRight,
85
- hasAdjacentMonthLeft
86
- }), [onFocusedDateChange, datesWithRow, month, year, disabledDates, onDateSelect, onEscapeKeyPress, onDisplayDateChange, hasAdjacentMonthLeft, hasAdjacentMonthRight]);
87
- const setButtonRef = useCallback((date, el) => {
88
- const k = new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();
89
- if (el) buttonRefs.current.set(k, el);else buttonRefs.current.delete(k);
90
- }, []);
91
- return /*#__PURE__*/_jsxs(CalendarTable, {
92
- "aria-labelledby": labelledById,
93
- ref: tableRef,
94
- role: "grid",
95
- children: [/*#__PURE__*/_jsx("thead", {
96
- children: /*#__PURE__*/_jsx("tr", {
97
- children: weekdayLabels.map((label, i) => /*#__PURE__*/_jsx(TableHeader, {
98
- abbr: weekdayFullNames[i],
99
- scope: "col",
100
- children: label
101
- }, label))
102
- })
103
- }), /*#__PURE__*/_jsx("tbody", {
104
- children: weeks.map((week, rowIndex) => /*#__PURE__*/_jsx("tr", {
105
- children: week.map((date, colIndex) => {
106
- if (date === null) {
107
- return /*#__PURE__*/_jsx("td", {
108
- role: "gridcell"
109
- }, `empty-${rowIndex}-${colIndex}`);
110
- }
111
- const selected = isSameDay(date, selectedDate) || isSameDay(date, endDate);
112
- const range = !!selectedDate && !!endDate;
113
- const inRange = range && isDateInRange(date, selectedDate, endDate);
114
- const disabled = isDateDisabled(date, disabledDates);
115
- const today = isToday(date);
116
- // this is making the selected date a differnet color bc it is focused, look into further
117
- const isFocused = focusTarget !== null && isSameDay(date, focusTarget);
118
- return /*#__PURE__*/_jsx(DateCell, {
119
- "aria-label": formatDateForAriaLabel(date, resolvedLocale),
120
- "aria-selected": selected,
121
- isDisabled: disabled,
122
- isInRange: inRange,
123
- isRangeEnd: range && isSameDay(date, endDate),
124
- isRangeStart: range && isSameDay(date, selectedDate),
125
- isSelected: selected,
126
- isToday: today,
127
- ref: el => setButtonRef(date, el),
128
- role: "gridcell",
129
- tabIndex: isFocused ? 0 : -1,
130
- onClick: () => onDateSelect(date),
131
- onFocus: () => onFocusedDateChange?.(date),
132
- onKeyDown: e => handleKeyDown(e, date),
133
- children: date.getDate()
134
- }, date.getTime());
135
- })
136
- }, week.join('-')))
137
- })]
138
- });
139
- };
@@ -1,3 +0,0 @@
1
- import * as React from 'react';
2
- import { CalendarFooterProps } from './types';
3
- export declare const CalendarFooter: React.FC<CalendarFooterProps>;
@@ -1,57 +0,0 @@
1
- import * as React from 'react';
2
- import { FlexBox } from '../../Box';
3
- import { TextButton } from '../../Button';
4
- import { useResolvedLocale } from '../utils/locale';
5
- import { DEFAULT_DATE_PICKER_TRANSLATIONS } from '../utils/translations';
6
- import { getRelativeTodayLabel } from './utils/format';
7
-
8
- // function formatQuickActionLabel(action: QuickAction): string {
9
- // const { num, timePeriod } = action;
10
- // const period =
11
- // timePeriod === 'day'
12
- // ? num === 1
13
- // ? 'day'
14
- // : 'days'
15
- // : timePeriod === 'week'
16
- // ? num === 1
17
- // ? 'week'
18
- // : 'weeks'
19
- // : timePeriod === 'month'
20
- // ? num === 1
21
- // ? 'month'
22
- // : 'months'
23
- // : num === 1
24
- // ? 'year'
25
- // : 'years';
26
- // return `${num} ${period}`;
27
- // }
28
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
29
- export const CalendarFooter = ({
30
- onClearDate,
31
- onTodayClick,
32
- locale,
33
- clearText = DEFAULT_DATE_PICKER_TRANSLATIONS.clearText,
34
- disabled,
35
- showClearButton
36
- }) => {
37
- const resolvedLocale = useResolvedLocale(locale);
38
- // const actions = quickActions.slice(0, 3);
39
-
40
- return /*#__PURE__*/_jsxs(FlexBox, {
41
- alignItems: "center",
42
- borderTop: 1,
43
- justifyContent: "space-between",
44
- p: 12,
45
- children: [showClearButton && /*#__PURE__*/_jsx(TextButton, {
46
- disabled: disabled,
47
- onClick: () => onClearDate?.(),
48
- children: clearText
49
- }), /*#__PURE__*/_jsx(FlexBox, {
50
- gap: 32,
51
- children: /*#__PURE__*/_jsx(TextButton, {
52
- onClick: () => onTodayClick?.(),
53
- children: getRelativeTodayLabel(resolvedLocale)
54
- })
55
- })]
56
- });
57
- };
@@ -1,3 +0,0 @@
1
- import * as React from 'react';
2
- import { CalendarHeaderProps } from './types';
3
- export declare const CalendarHeader: React.FC<CalendarHeaderProps>;
@@ -1,46 +0,0 @@
1
- import * as React from 'react';
2
- import { FlexBox } from '../../Box';
3
- import { Text } from '../../Typography';
4
- import { useResolvedLocale } from '../utils/locale';
5
- import { CalendarNavLastMonth } from './CalendarNavLastMonth';
6
- import { CalendarNavNextMonth } from './CalendarNavNextMonth';
7
- import { formatMonthYear } from './utils/format';
8
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
- export const CalendarHeader = ({
10
- displayDate,
11
- locale,
12
- headingId,
13
- onDisplayDateChange,
14
- hideLastNav,
15
- hideNextNav,
16
- onLastMonthClick,
17
- onNextMonthClick
18
- }) => {
19
- const resolvedLocale = useResolvedLocale(locale);
20
- return /*#__PURE__*/_jsxs(FlexBox, {
21
- alignItems: "center",
22
- pb: 8,
23
- children: [!hideLastNav && /*#__PURE__*/_jsx(CalendarNavLastMonth, {
24
- displayDate: displayDate,
25
- locale: locale,
26
- onDisplayDateChange: onDisplayDateChange,
27
- onLastMonthClick: onLastMonthClick
28
- }), /*#__PURE__*/_jsx(FlexBox, {
29
- justifyContent: "center",
30
- width: "100%",
31
- children: /*#__PURE__*/_jsx(Text, {
32
- "aria-live": "polite",
33
- fontSize: 16,
34
- fontWeight: "title",
35
- id: headingId,
36
- textAlign: "center",
37
- children: formatMonthYear(displayDate, resolvedLocale)
38
- })
39
- }), !hideNextNav && /*#__PURE__*/_jsx(CalendarNavNextMonth, {
40
- displayDate: displayDate,
41
- locale: locale,
42
- onDisplayDateChange: onDisplayDateChange,
43
- onNextMonthClick: onNextMonthClick
44
- })]
45
- });
46
- };
@@ -1,3 +0,0 @@
1
- import * as React from 'react';
2
- import { CalendarNavProps } from './types';
3
- export declare const CalendarNavLastMonth: React.FC<CalendarNavProps>;
@@ -1,30 +0,0 @@
1
- import { MiniChevronLeftIcon } from '@codecademy/gamut-icons';
2
- import * as React from 'react';
3
- import { IconButton } from '../../Button';
4
- import { useResolvedLocale } from '../utils/locale';
5
- import { getRelativeMonthLabels } from './utils/format';
6
- import { jsx as _jsx } from "react/jsx-runtime";
7
- export const CalendarNavLastMonth = ({
8
- displayDate,
9
- onDisplayDateChange,
10
- onLastMonthClick,
11
- locale
12
- }) => {
13
- const resolvedLocale = useResolvedLocale(locale);
14
- const {
15
- lastMonth
16
- } = getRelativeMonthLabels(resolvedLocale);
17
- const handleLastMonth = () => {
18
- const lastMonth = new Date(displayDate.getFullYear(), displayDate.getMonth() - 1, 1);
19
- onDisplayDateChange?.(lastMonth);
20
- onLastMonthClick?.();
21
- };
22
- return /*#__PURE__*/_jsx(IconButton, {
23
- alignSelf: "flex-start",
24
- "aria-label": lastMonth,
25
- icon: MiniChevronLeftIcon,
26
- size: "small",
27
- tip: lastMonth,
28
- onClick: handleLastMonth
29
- });
30
- };
@@ -1,3 +0,0 @@
1
- import * as React from 'react';
2
- import { CalendarNavProps } from './types';
3
- export declare const CalendarNavNextMonth: React.FC<CalendarNavProps>;
@@ -1,30 +0,0 @@
1
- import { MiniChevronRightIcon } from '@codecademy/gamut-icons';
2
- import * as React from 'react';
3
- import { IconButton } from '../../Button';
4
- import { useResolvedLocale } from '../utils/locale';
5
- import { getRelativeMonthLabels } from './utils/format';
6
- import { jsx as _jsx } from "react/jsx-runtime";
7
- export const CalendarNavNextMonth = ({
8
- displayDate,
9
- onDisplayDateChange,
10
- onNextMonthClick,
11
- locale
12
- }) => {
13
- const resolvedLocale = useResolvedLocale(locale);
14
- const {
15
- nextMonth
16
- } = getRelativeMonthLabels(resolvedLocale);
17
- const handleNextMonth = () => {
18
- const nextMonth = new Date(displayDate.getFullYear(), displayDate.getMonth() + 1, 1);
19
- onDisplayDateChange?.(nextMonth);
20
- onNextMonthClick?.();
21
- };
22
- return /*#__PURE__*/_jsx(IconButton, {
23
- alignSelf: "flex-end",
24
- "aria-label": nextMonth,
25
- icon: MiniChevronRightIcon,
26
- size: "small",
27
- tip: nextMonth,
28
- onClick: handleNextMonth
29
- });
30
- };
@@ -1,8 +0,0 @@
1
- import * as React from 'react';
2
- import { WithChildrenProp } from '../../utils';
3
- /**
4
- * Outer wrapper for the calendar (header + body + footer).
5
- * Used by DatePickerCalendar to group the calendar content.
6
- * Renders a CheckerDense pattern shadow at offset left 8, top 8.
7
- */
8
- export declare const CalendarWrapper: React.FC<WithChildrenProp>;
@@ -1,27 +0,0 @@
1
- import { CheckerDense } from '@codecademy/gamut-patterns';
2
- import * as React from 'react';
3
- import { Box } from '../../Box';
4
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
- /**
6
- * Outer wrapper for the calendar (header + body + footer).
7
- * Used by DatePickerCalendar to group the calendar content.
8
- * Renders a CheckerDense pattern shadow at offset left 8, top 8.
9
- */
10
- export const CalendarWrapper = ({
11
- children
12
- }) => /*#__PURE__*/_jsxs(Box, {
13
- position: "relative",
14
- width: "max-content",
15
- children: [/*#__PURE__*/_jsx(CheckerDense, {
16
- left: 8,
17
- position: "absolute",
18
- top: 8
19
- }), /*#__PURE__*/_jsx(Box, {
20
- bg: "background",
21
- border: 1,
22
- borderRadius: "sm",
23
- position: "relative",
24
- zIndex: 1,
25
- children: children
26
- })]
27
- });
@@ -1,6 +0,0 @@
1
- export * from './CalendarWrapper';
2
- export * from './CalendarHeader';
3
- export * from './CalendarBody';
4
- export * from './CalendarFooter';
5
- export * from './CalendarNavLastMonth';
6
- export * from './CalendarNavNextMonth';
@@ -1,6 +0,0 @@
1
- export * from './CalendarWrapper';
2
- export * from './CalendarHeader';
3
- export * from './CalendarBody';
4
- export * from './CalendarFooter';
5
- export * from './CalendarNavLastMonth';
6
- export * from './CalendarNavNextMonth';
@@ -1,77 +0,0 @@
1
- import type { IsoWeekday } from '../utils/locale';
2
- export interface CalendarBaseProps {
3
- /** Used for the currently displayed month and year */
4
- displayDate: Date;
5
- /** Called when the displayed month changes. Pass the new date (e.g. setDisplayDate) so the calendar updates. */
6
- onDisplayDateChange: (newDate: Date) => void;
7
- /**
8
- * Locale for formatting and `Intl.Locale` APIs. Accepts `Intl.LocalesArgument` (e.g. `'en-US'`,
9
- * `['en-GB', 'en']`, or a prebuilt `Intl.Locale`). Omitted → runtime default (user agent).
10
- */
11
- locale?: Intl.LocalesArgument;
12
- /** Dates that should be disabled (unselectable) */
13
- disabledDates?: Date[];
14
- }
15
- export interface CalendarNavProps extends Omit<CalendarBaseProps, 'disabledDates'> {
16
- /** Called after navigating to previous month. */
17
- onLastMonthClick?: () => void;
18
- /** Called after navigating to next month */
19
- onNextMonthClick?: () => void;
20
- }
21
- export interface CalendarHeaderProps extends CalendarNavProps {
22
- hideLastNav?: boolean;
23
- hideNextNav?: boolean;
24
- /** Used for the currently displayed second month and year when in two-month view */
25
- secondDisplayDate?: Date;
26
- /** id for the heading (for grid aria-labelledby) */
27
- headingId: string;
28
- }
29
- export interface CalendarBodyProps extends CalendarBaseProps {
30
- /** Selected start date (single or range start) */
31
- selectedDate: Date | null;
32
- /** Selected end date (range only; undefined for single-date mode) */
33
- endDate?: Date | null;
34
- /** Called when a date cell is selected */
35
- onDateSelect: (date: Date) => void;
36
- /**
37
- * Force first column to this ISO weekday (1 = Monday … 7 = Sunday). Same scale as
38
- * `Intl.Locale#getWeekInfo().firstDay`. Omit to use locale (polyfill where needed).
39
- */
40
- weekStartsOn?: IsoWeekday;
41
- /** Id of the month/year heading (aria-labelledby on grid) */
42
- labelledById: string;
43
- /** For keyboard nav: which cell has focus (roving tabindex) */
44
- focusedDate: Date | null;
45
- /** Callback when focused date changes (e.g. arrow keys) */
46
- onFocusedDateChange: (date: Date | null) => void;
47
- /** Called when the escape key is pressed */
48
- onEscapeKeyPress?: () => void;
49
- /** When true (e.g. two-month view), arrow keys move focus to adjacent month without changing visible date. */
50
- hasAdjacentMonthRight?: boolean;
51
- /** When true (e.g. two-month view), arrow keys move focus to adjacent month without changing visible date. */
52
- hasAdjacentMonthLeft?: boolean;
53
- /**
54
- * When set (DatePicker), only programmatically focuses a day when the grid already has focus
55
- * or `gridFocusRequested` is true (keyboard open / ArrowDown from input).
56
- * Omit for standalone calendar stories — keeps legacy behavior (always sync focus to focusedDate).
57
- */
58
- focusGridSync?: {
59
- gridFocusRequested: boolean;
60
- signal: boolean;
61
- onGridFocusRequestHandled: () => void;
62
- };
63
- }
64
- export interface QuickAction {
65
- num: number;
66
- timePeriod: 'day' | 'week' | 'month' | 'year';
67
- onClick: () => void;
68
- }
69
- export interface CalendarFooterProps extends Pick<CalendarBaseProps, 'locale'> {
70
- disabled?: boolean;
71
- showClearButton?: boolean;
72
- clearText?: string;
73
- onClearDate?: () => void;
74
- onTodayClick?: () => void;
75
- /** Max 3 quick actions (e.g. "7 days", "1 month") */
76
- quickActions?: QuickAction[];
77
- }
@@ -1 +0,0 @@
1
- export {};