@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.
- package/dist/FocusTrap/index.d.ts +2 -2
- package/dist/PopoverContainer/PopoverContainer.js +3 -23
- package/dist/PopoverContainer/types.d.ts +0 -5
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -2
- package/package.json +6 -7
- package/dist/DatePicker/Calendar/CalendarBody.d.ts +0 -3
- package/dist/DatePicker/Calendar/CalendarBody.js +0 -139
- package/dist/DatePicker/Calendar/CalendarFooter.d.ts +0 -3
- package/dist/DatePicker/Calendar/CalendarFooter.js +0 -57
- package/dist/DatePicker/Calendar/CalendarHeader.d.ts +0 -3
- package/dist/DatePicker/Calendar/CalendarHeader.js +0 -46
- package/dist/DatePicker/Calendar/CalendarNavLastMonth.d.ts +0 -3
- package/dist/DatePicker/Calendar/CalendarNavLastMonth.js +0 -30
- package/dist/DatePicker/Calendar/CalendarNavNextMonth.d.ts +0 -3
- package/dist/DatePicker/Calendar/CalendarNavNextMonth.js +0 -30
- package/dist/DatePicker/Calendar/CalendarWrapper.d.ts +0 -8
- package/dist/DatePicker/Calendar/CalendarWrapper.js +0 -27
- package/dist/DatePicker/Calendar/index.d.ts +0 -6
- package/dist/DatePicker/Calendar/index.js +0 -6
- package/dist/DatePicker/Calendar/types.d.ts +0 -77
- package/dist/DatePicker/Calendar/types.js +0 -1
- package/dist/DatePicker/Calendar/utils/dateGrid.d.ts +0 -38
- package/dist/DatePicker/Calendar/utils/dateGrid.js +0 -103
- package/dist/DatePicker/Calendar/utils/elements.d.ts +0 -18
- package/dist/DatePicker/Calendar/utils/elements.js +0 -116
- package/dist/DatePicker/Calendar/utils/format.d.ts +0 -44
- package/dist/DatePicker/Calendar/utils/format.js +0 -128
- package/dist/DatePicker/Calendar/utils/keyHandler.d.ts +0 -12
- package/dist/DatePicker/Calendar/utils/keyHandler.js +0 -126
- package/dist/DatePicker/Calendar/utils/validation.d.ts +0 -13
- package/dist/DatePicker/Calendar/utils/validation.js +0 -23
- package/dist/DatePicker/DatePicker.d.ts +0 -7
- package/dist/DatePicker/DatePicker.js +0 -155
- package/dist/DatePicker/DatePickerCalendar.d.ts +0 -11
- package/dist/DatePicker/DatePickerCalendar.js +0 -163
- package/dist/DatePicker/DatePickerContext.d.ts +0 -10
- package/dist/DatePicker/DatePickerContext.js +0 -18
- package/dist/DatePicker/DatePickerInput.d.ts +0 -16
- package/dist/DatePicker/DatePickerInput.js +0 -134
- package/dist/DatePicker/index.d.ts +0 -5
- package/dist/DatePicker/index.js +0 -5
- package/dist/DatePicker/types.d.ts +0 -86
- package/dist/DatePicker/types.js +0 -1
- package/dist/DatePicker/utils/dateSelect.d.ts +0 -19
- package/dist/DatePicker/utils/dateSelect.js +0 -146
- package/dist/DatePicker/utils/locale.d.ts +0 -38
- package/dist/DatePicker/utils/locale.js +0 -93
- package/dist/DatePicker/utils/translations.d.ts +0 -15
- 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
|
|
26
|
+
* Passthrough for react-focus-on library props
|
|
27
27
|
*/
|
|
28
|
-
focusOnProps?:
|
|
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.
|
|
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.
|
|
8
|
-
"@codecademy/gamut-illustrations": "0.58.10-alpha.
|
|
9
|
-
"@codecademy/gamut-patterns": "0.10.29-alpha.
|
|
10
|
-
"@codecademy/gamut-styles": "17.13.2-alpha.
|
|
11
|
-
"@codecademy/variance": "0.26.2-alpha.
|
|
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,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,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,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,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,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,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 {};
|