@codecademy/gamut 68.2.3-alpha.df0cb3.0 → 68.2.3-alpha.f5f9ec.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 +1 -3
- 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>;
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Qb3BvdmVyQ29udGFpbmVyL1BvcG92ZXJDb250YWluZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCdUIiLCJmaWxlIjoiLi4vLi4vc3JjL1BvcG92ZXJDb250YWluZXIvUG9wb3ZlckNvbnRhaW5lci50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzeXN0ZW0gfSBmcm9tICdAY29kZWNhZGVteS9nYW11dC1zdHlsZXMnO1xuaW1wb3J0IHsgdmFyaWFuY2UgfSBmcm9tICdAY29kZWNhZGVteS92YXJpYW5jZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlV2luZG93U2Nyb2xsLCB1c2VXaW5kb3dTaXplIH0gZnJvbSAncmVhY3QtdXNlJztcblxuaW1wb3J0IHsgQm9keVBvcnRhbCB9IGZyb20gJy4uL0JvZHlQb3J0YWwnO1xuaW1wb3J0IHsgRm9jdXNUcmFwIH0gZnJvbSAnLi4vRm9jdXNUcmFwJztcbmltcG9ydCB7XG4gIHVzZVJlc2l6aW5nUGFyZW50RWZmZWN0LFxuICB1c2VTY3JvbGxpbmdQYXJlbnRzLFxuICB1c2VTY3JvbGxpbmdQYXJlbnRzRWZmZWN0LFxufSBmcm9tICcuL2hvb2tzJztcbmltcG9ydCB7IENvbnRhaW5lclN0YXRlLCBQb3BvdmVyQ29udGFpbmVyUHJvcHMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdldENvbnRhaW5lcnMsIGdldFBvc2l0aW9uLCBpc091dE9mVmlldyB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBQb3BvdmVyQ29udGVudCA9IHN0eWxlZC5kaXYoXG4gIHZhcmlhbmNlLmNvbXBvc2UoXG4gICAgc3lzdGVtLnBvc2l0aW9uaW5nLFxuICAgIHZhcmlhbmNlLmNyZWF0ZSh7XG4gICAgICB0cmFuc2Zvcm06IHtcbiAgICAgICAgcHJvcGVydHk6ICd0cmFuc2Zvcm0nLFxuICAgICAgfSxcbiAgICB9KVxuICApXG4pO1xuXG5leHBvcnQgY29uc3QgUG9wb3ZlckNvbnRhaW5lcjogUmVhY3QuRkM8UG9wb3ZlckNvbnRhaW5lclByb3BzPiA9ICh7XG4gIGFsaWdubWVudCA9ICdib3R0b20tbGVmdCcsXG4gIG9mZnNldCA9IDIwLFxuICB5ID0gMCxcbiAgeCA9IDAsXG4gIGludmVydEF4aXMsXG4gIGlubGluZSA9IGZhbHNlLFxuICBpc09wZW4sXG4gIG9uUmVxdWVzdENsb3NlLFxuICB0YXJnZXRSZWYsXG4gIGFsbG93UGFnZUludGVyYWN0aW9uLFxuICBjbG9zZU9uVmlld3BvcnRFeGl0ID0gZmFsc2UsXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgY29uc3QgcG9wb3ZlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGhhc1JlcXVlc3RlZENsb3NlUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgb25SZXF1ZXN0Q2xvc2VSZWYgPSB1c2VSZWYob25SZXF1ZXN0Q2xvc2UpO1xuICBjb25zdCB7IHdpZHRoOiB3aW5XLCBoZWlnaHQ6IHdpbkggfSA9IHVzZVdpbmRvd1NpemUoKTtcbiAgY29uc3QgeyB4OiB3aW5YLCB5OiB3aW5ZIH0gPSB1c2VXaW5kb3dTY3JvbGwoKTtcbiAgY29uc3QgW2NvbnRhaW5lcnMsIHNldENvbnRhaW5lcnNdID0gdXNlU3RhdGU8Q29udGFpbmVyU3RhdGU+KCk7XG4gIGNvbnN0IFt0YXJnZXRSZWN0LCBzZXRUYXJnZXRSZWN0XSA9IHVzZVN0YXRlPERPTVJlY3Q+KCk7XG4gIGNvbnN0IHBhcmVudCA9IGNvbnRhaW5lcnM/LnBhcmVudDtcblxuICAvLyBNZW1vaXplIHNjcm9sbGluZyBwYXJlbnRzIHRvIGF2b2lkIGV4cGVuc2l2ZSBET00gdHJhdmVyc2Fsc1xuICBjb25zdCBzY3JvbGxpbmdQYXJlbnRzID0gdXNlU2Nyb2xsaW5nUGFyZW50cyhcbiAgICB0YXJnZXRSZWYgYXMgUmVhY3QuUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cbiAgKTtcblxuICAvLyBLZWVwIG9uUmVxdWVzdENsb3NlIHJlZiB1cCB0byBkYXRlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgb25SZXF1ZXN0Q2xvc2VSZWYuY3VycmVudCA9IG9uUmVxdWVzdENsb3NlO1xuICB9LCBbb25SZXF1ZXN0Q2xvc2VdKTtcblxuICAvLyBEZXRlY3QgUlRMIGRpcmVjdGlvbiBmcm9tIHRoZSB0YXJnZXQgZWxlbWVudCBhbmQgd2F0Y2ggZm9yIGF0dHJpYnV0ZSBjaGFuZ2VzIHNvIHRoZVxuICAvLyBwb3NpdGlvbiByZWNhbGN1bGF0ZXMgd2hlbiBjaGFuZ2VzIG9jY3VyXG4gIGNvbnN0IFtpc1J0bCwgc2V0SXNSdGxdID0gdXNlU3RhdGUoZmFsc2UpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNoZWNrRGlyZWN0aW9uID0gKCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0UmVmPy5jdXJyZW50O1xuICAgICAgY29uc3QgZWwgPSB0YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50ID8gdGFyZ2V0IDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgc2V0SXNSdGwoZ2V0Q29tcHV0ZWRTdHlsZShlbCkuZGlyZWN0aW9uID09PSAncnRsJyk7XG4gICAgfTtcblxuICAgIGNoZWNrRGlyZWN0aW9uKCk7XG5cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGNoZWNrRGlyZWN0aW9uKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydkaXInXSxcbiAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgfSwgW3RhcmdldFJlZl0pO1xuXG4gIGNvbnN0IHBvcG92ZXJQb3NpdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChwYXJlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGdldFBvc2l0aW9uKHtcbiAgICAgICAgYWxpZ25tZW50LFxuICAgICAgICBjb250YWluZXI6IHBhcmVudCxcbiAgICAgICAgaW52ZXJ0QXhpcyxcbiAgICAgICAgaXNSdGwsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4geyBzdHlsZXM6IHt9LCBwaHlzaWNhbFN0eWxlczogdW5kZWZpbmVkIH07XG4gIH0sIFtwYXJlbnQsIHgsIHksIG9mZnNldCwgYWxpZ25tZW50LCBpbnZlcnRBeGlzLCBpc1J0bF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0UmVmPy5jdXJyZW50O1xuICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG4gICAgc2V0Q29udGFpbmVycyhnZXRDb250YWluZXJzKHRhcmdldCwgaW5saW5lLCB7IHg6IHdpblgsIHk6IHdpblkgfSkpO1xuICB9LCBbdGFyZ2V0UmVmLCBpbmxpbmUsIHdpblcsIHdpbkgsIHdpblgsIHdpblksIHRhcmdldFJlY3RdKTtcblxuICAvLyBVcGRhdGUgdGFyZ2V0IHJlY3RhbmdsZSB3aGVuIHdpbmRvdyBzaXplL3Njcm9sbCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0VGFyZ2V0UmVjdCh0YXJnZXRSZWY/LmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgfSwgW3RhcmdldFJlZiwgaXNPcGVuLCB3aW5XLCB3aW5ILCB3aW5YLCB3aW5ZXSk7XG5cbiAgLy8gVXBkYXRlIHRhcmdldCByZWN0YW5nbGUgd2hlbiBwYXJlbnQgc2l6ZS9zY3JvbGwgY2hhbmdlc1xuICBjb25zdCB1cGRhdGVUYXJnZXRQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChyZWN0PzogRE9NUmVjdCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0UmVmPy5jdXJyZW50O1xuICAgICAgaWYgKCF0YXJnZXQpIHJldHVybjtcblxuICAgICAgY29uc3QgbmV3UmVjdCA9IHJlY3QgfHwgdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgc2V0VGFyZ2V0UmVjdChuZXdSZWN0KTtcblxuICAgICAgY29uc3QgY3VycmVudFNjcm9sbFggPVxuICAgICAgICB3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICBjb25zdCBjdXJyZW50U2Nyb2xsWSA9XG4gICAgICAgIHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgICBzZXRDb250YWluZXJzKFxuICAgICAgICBnZXRDb250YWluZXJzKHRhcmdldCwgaW5saW5lLCB7IHg6IGN1cnJlbnRTY3JvbGxYLCB5OiBjdXJyZW50U2Nyb2xsWSB9KVxuICAgICAgKTtcbiAgICB9LFxuICAgIFt0YXJnZXRSZWYsIGlubGluZV1cbiAgKTtcblxuICB1c2VTY3JvbGxpbmdQYXJlbnRzRWZmZWN0KHRhcmdldFJlZiwgdXBkYXRlVGFyZ2V0UG9zaXRpb24pO1xuXG4gIHVzZVJlc2l6aW5nUGFyZW50RWZmZWN0KHRhcmdldFJlZiwgc2V0VGFyZ2V0UmVjdCk7XG5cbiAgLy8gSGFuZGxlIGNsb3NlT25WaWV3cG9ydEV4aXQgd2l0aCBjYWNoZWQgc2Nyb2xsaW5nIHBhcmVudHMgZm9yIHBlcmZvcm1hbmNlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjbG9zZU9uVmlld3BvcnRFeGl0KSByZXR1cm47XG5cbiAgICBjb25zdCByZWN0ID0gdGFyZ2V0UmVjdCB8fCBjb250YWluZXJzPy52aWV3cG9ydDtcbiAgICBpZiAoIXJlY3QpIHJldHVybjtcblxuICAgIGNvbnN0IGlzT3V0ID0gaXNPdXRPZlZpZXcoXG4gICAgICByZWN0LFxuICAgICAgdGFyZ2V0UmVmPy5jdXJyZW50IGFzIEhUTUxFbGVtZW50LFxuICAgICAgc2Nyb2xsaW5nUGFyZW50c1xuICAgICk7XG5cbiAgICBpZiAoaXNPdXQgJiYgIWhhc1JlcXVlc3RlZENsb3NlUmVmLmN1cnJlbnQpIHtcbiAgICAgIGhhc1JlcXVlc3RlZENsb3NlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgb25SZXF1ZXN0Q2xvc2VSZWYuY3VycmVudD8uKCk7XG4gICAgfSBlbHNlIGlmICghaXNPdXQpIHtcbiAgICAgIGhhc1JlcXVlc3RlZENsb3NlUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtcbiAgICB0YXJnZXRSZWN0LFxuICAgIGNvbnRhaW5lcnM/LnZpZXdwb3J0LFxuICAgIHRhcmdldFJlZixcbiAgICBjbG9zZU9uVmlld3BvcnRFeGl0LFxuICAgIHNjcm9sbGluZ1BhcmVudHMsXG4gIF0pO1xuICAvKipcbiAgICogQWxsb3dzIHRhcmdldFJlZiB0byBiZSBvciBjb250YWluIGEgYnV0dG9uIHRoYXQgdG9nZ2xlcyB0aGUgcG9wb3ZlciBvcGVuIGFuZCBjbG9zZWQuXG4gICAqIFdpdGhvdXQgdGhpcyBjaGVjayBpdCB3b3VsZCB0b2dnbGUgY2xvc2VkIHRoZW4gYmFjayBvcGVuIGltbWVkaWF0ZWx5LlxuICAgKlxuICAgKi9cbiAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBOb2RlO1xuICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHRhcmdldFJlZi5jdXJyZW50O1xuXG4gICAgICBpZiAoIXRhcmdldEVsZW1lbnQpIHJldHVybjtcbiAgICAgIGlmICh0YXJnZXRFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHJldHVybjtcbiAgICAgIGlmIChwb3BvdmVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKHRhcmdldCkpIHJldHVybjtcblxuICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIGl0J3MgYSBnZW51aW5lIG91dHNpZGUgY2xpY2tcbiAgICAgIG9uUmVxdWVzdENsb3NlPy4oKTtcbiAgICB9LFxuICAgIFtvblJlcXVlc3RDbG9zZSwgdGFyZ2V0UmVmXVxuICApO1xuXG4gIC8qKlxuICAgKiBCYWNrdXAgY2xpY2sgb3V0c2lkZSBoYW5kbGVyIGZvciBjYXNlcyB3aGVyZSBGb2N1c1RyYXAgZGV0ZWN0aW9uIG1pZ2h0IGJlIGludGVyZmVyZWQgd2l0aFxuICAgKiBieSBvdXIgb3duIGZsb2F0aW5nIGVsZW1lbnRzXG4gICAqL1xuICBjb25zdCBoYW5kbGVHbG9iYWxDbGlja091dHNpZGUgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgTm9kZTtcbiAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB0YXJnZXRSZWYuY3VycmVudDtcblxuICAgICAgaWYgKCF0YXJnZXRFbGVtZW50IHx8ICFpc09wZW4pIHJldHVybjtcblxuICAgICAgaWYgKFxuICAgICAgICB0YXJnZXRFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkgfHxcbiAgICAgICAgcG9wb3ZlclJlZi5jdXJyZW50Py5jb250YWlucyh0YXJnZXQpXG4gICAgICApXG4gICAgICAgIHJldHVybjtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNsaWNrZWQgZWxlbWVudCBpcyB3aXRoaW4gYW4gT3ZlcmxheSBjb21wb25lbnRcbiAgICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gdGFyZ2V0IGFzIEVsZW1lbnQ7XG4gICAgICBpZiAoY2xpY2tlZEVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtZmxvYXRpbmc9XCJvdmVybGF5XCJdJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiB0aGUgY2xpY2tlZCBlbGVtZW50IGlzIHdpdGhpbiBhbm90aGVyIFBvcG92ZXIgb3IgUG9wb3ZlckNvbnRhaW5lclxuICAgICAgY29uc3QgaXNGbG9hdGluZ0VsZW1lbnQgPSBjbGlja2VkRWxlbWVudC5jbG9zZXN0KFxuICAgICAgICAnW2RhdGEtZmxvYXRpbmc9XCJwb3BvdmVyXCJdJ1xuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgaXNGbG9hdGluZ0VsZW1lbnQgJiZcbiAgICAgICAgIXBvcG92ZXJSZWYuY3VycmVudD8uY29udGFpbnMoaXNGbG9hdGluZ0VsZW1lbnQpXG4gICAgICApIHtcbiAgICAgICAgb25SZXF1ZXN0Q2xvc2U/LigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG9uUmVxdWVzdENsb3NlPy4oKTtcbiAgICB9LFxuICAgIFtvblJlcXVlc3RDbG9zZSwgdGFyZ2V0UmVmLCBpc09wZW5dXG4gICk7XG5cbiAgLy8gQmFja3VwIGdsb2JhbCBjbGljayBsaXN0ZW5lciBmb3Igd2hlbiBhIFBvcG92ZXIgb3IgUG9wb3ZlckNvbnRhaW5lciBpcyBvcGVuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgLy8gVXNlIGEgc21hbGwgZGVsYXkgdG8gZW5zdXJlIHRoaXMgZG9lc24ndCBpbnRlcmZlcmUgd2l0aCB0aGUgRm9jdXNUcmFwJ3Mgb3duIGRldGVjdGlvblxuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUdsb2JhbENsaWNrT3V0c2lkZSwgdHJ1ZSk7XG4gICAgICB9LCA1MCk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAgICdtb3VzZWRvd24nLFxuICAgICAgICAgIGhhbmRsZUdsb2JhbENsaWNrT3V0c2lkZSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2lzT3BlbiwgaGFuZGxlR2xvYmFsQ2xpY2tPdXRzaWRlXSk7XG5cbiAgaWYgKCFpc09wZW4gfHwgIXRhcmdldFJlZikgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgY29udGVudCA9IChcbiAgICA8Rm9jdXNUcmFwXG4gICAgICBhbGxvd1BhZ2VJbnRlcmFjdGlvbj17aW5saW5lIHx8IGFsbG93UGFnZUludGVyYWN0aW9ufVxuICAgICAgb25DbGlja091dHNpZGU9e2hhbmRsZUNsaWNrT3V0c2lkZX1cbiAgICAgIG9uRXNjYXBlS2V5PXtvblJlcXVlc3RDbG9zZX1cbiAgICA+XG4gICAgICA8UG9wb3ZlckNvbnRlbnRcbiAgICAgICAgZGF0YS1mbG9hdGluZz1cInBvcG92ZXJcIlxuICAgICAgICBkYXRhLXRlc3RpZD1cInBvcG92ZXItY29udGVudC1jb250YWluZXJcIlxuICAgICAgICBwb3NpdGlvbj1cImFic29sdXRlXCJcbiAgICAgICAgcmVmPXtwb3BvdmVyUmVmfVxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgIHpJbmRleD17aW5saW5lID8gNSA6ICdpbml0aWFsJ31cbiAgICAgICAgey4uLnBvcG92ZXJQb3NpdGlvbi5zdHlsZXN9XG4gICAgICAgIC8qIFBoeXNpY2FsIGlubGluZSBzdHlsZSBmb3IgY2VudGVyZWQgYWxpZ25tZW50cyAodG9wL2JvdHRvbSkgd2hlcmVcbiAgICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0IHdvdWxkIGluY29ycmVjdGx5IGZsaXAgdGhlIGNlbnRlciBwb2ludCBpbiBSVEwgKi9cbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdhbXV0L25vLWlubGluZS1zdHlsZSAqL1xuICAgICAgICBzdHlsZT17cG9wb3ZlclBvc2l0aW9uLnBoeXNpY2FsU3R5bGVzfVxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgIC8+XG4gICAgPC9Gb2N1c1RyYXA+XG4gICk7XG5cbiAgaWYgKGlubGluZSkgcmV0dXJuIGNvbnRlbnQ7XG5cbiAgcmV0dXJuIDxCb2R5UG9ydGFsPntjb250ZW50fTwvQm9keVBvcnRhbD47XG59O1xuIl19 */");
|
|
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);
|
|
@@ -190,7 +189,6 @@ export const PopoverContainer = ({
|
|
|
190
189
|
if (!isOpen || !targetRef) return null;
|
|
191
190
|
const content = /*#__PURE__*/_jsx(FocusTrap, {
|
|
192
191
|
allowPageInteraction: inline || allowPageInteraction,
|
|
193
|
-
focusOnProps: focusOnProps,
|
|
194
192
|
onClickOutside: handleClickOutside,
|
|
195
193
|
onEscapeKey: onRequestClose,
|
|
196
194
|
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.f5f9ec.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.f5f9ec.0",
|
|
8
|
+
"@codecademy/gamut-illustrations": "0.58.10-alpha.f5f9ec.0",
|
|
9
|
+
"@codecademy/gamut-patterns": "0.10.29-alpha.f5f9ec.0",
|
|
10
|
+
"@codecademy/gamut-styles": "17.13.2-alpha.f5f9ec.0",
|
|
11
|
+
"@codecademy/variance": "0.26.2-alpha.f5f9ec.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 {};
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Builds a grid of days for a calendar month using native Date and Intl.
|
|
3
|
-
* Each row has 7 cells; leading/trailing cells may be null (padding from adjacent months).
|
|
4
|
-
*/
|
|
5
|
-
import type { IsoWeekday } from '../../utils/locale';
|
|
6
|
-
/**
|
|
7
|
-
* Number of empty cells before the 1st of the month, for a grid whose first column is
|
|
8
|
-
* `firstWeekday` (ISO: 1 = Monday … 7 = Sunday from `Intl.Locale#getWeekInfo`).
|
|
9
|
-
*/
|
|
10
|
-
export declare const getWeekdayOffsetInGrid: (date: Date, firstWeekday: IsoWeekday) => number;
|
|
11
|
-
/**
|
|
12
|
-
* Returns an array of weeks for the given month. Each week is an array of 7 items:
|
|
13
|
-
* each item is either a Date (that day) or null (padding from previous/next month).
|
|
14
|
-
*
|
|
15
|
-
* @param year - Full year (e.g. 2026)
|
|
16
|
-
* @param month - Month 0-11 (0 = January)
|
|
17
|
-
* @param firstWeekday - First day of the week for the calendar row (ISO 1–7, from `getWeekInfo().firstDay`)
|
|
18
|
-
*/
|
|
19
|
-
export declare const getMonthGrid: (year: number, month: number, firstWeekday: IsoWeekday) => (Date | null)[][];
|
|
20
|
-
/**
|
|
21
|
-
* Check if two dates are the same calendar day (ignoring time).
|
|
22
|
-
*/
|
|
23
|
-
export declare const isSameDay: (a: Date | null, b: Date | null) => boolean;
|
|
24
|
-
/**
|
|
25
|
-
* Check if `date` is between `start` and `end` (exclusive), ignoring time.
|
|
26
|
-
*/
|
|
27
|
-
export declare const isDateInRange: (date: Date, start: Date | null, end: Date | null) => boolean;
|
|
28
|
-
/**
|
|
29
|
-
* Check if `date` is in the `disabledDates` list (by calendar day).
|
|
30
|
-
*/
|
|
31
|
-
export declare const isDateDisabled: (date: Date, disabledDates?: Date[]) => boolean;
|
|
32
|
-
/** One visible day in the month grid with its row (for Home/End and keyboard nav). */
|
|
33
|
-
export type DateWithRow = {
|
|
34
|
-
date: Date;
|
|
35
|
-
rowIndex: number;
|
|
36
|
-
};
|
|
37
|
-
/** Flat list of dates in grid order (row-major, non-null only) with row index for Home/End */
|
|
38
|
-
export declare const getDatesWithRow: (weeks: (Date | null)[][]) => DateWithRow[];
|