@pingux/astro 2.70.0-alpha.0 → 2.70.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/components/AccordionItem/AccordionItem.d.ts +1 -1
- package/lib/cjs/components/AccordionItem/AccordionItem.js +1 -1
- package/lib/cjs/components/Calendar/Calendar.js +4 -0
- package/lib/cjs/components/Calendar/Calendar.mdx +1 -1
- package/lib/cjs/components/Calendar/Calendar.test.js +1 -4
- package/lib/cjs/components/Calendar/CalendarCell.js +1 -1
- package/lib/cjs/components/DatePicker/DatePicker.test.js +62 -6
- package/lib/cjs/components/Grid/Grid.d.ts +4 -0
- package/lib/cjs/components/Grid/Grid.js +24 -0
- package/lib/cjs/components/Grid/Grid.mdx +13 -0
- package/lib/cjs/components/Grid/Grid.stories.d.ts +5 -0
- package/lib/cjs/components/Grid/Grid.stories.js +72 -0
- package/lib/cjs/components/Grid/Grid.styles.d.ts +2 -0
- package/lib/cjs/components/Grid/Grid.styles.js +9 -0
- package/lib/cjs/components/Grid/Grid.test.d.ts +1 -0
- package/lib/cjs/components/Grid/Grid.test.js +27 -0
- package/lib/cjs/components/Grid/index.d.ts +1 -0
- package/lib/cjs/components/Grid/index.js +14 -0
- package/lib/cjs/components/RangeCalendar/RangeCalendar.d.ts +7 -0
- package/lib/cjs/components/RangeCalendar/RangeCalendar.js +100 -0
- package/lib/cjs/components/RangeCalendar/RangeCalendar.mdx +39 -0
- package/lib/cjs/components/RangeCalendar/RangeCalendar.stories.d.ts +103 -0
- package/lib/cjs/components/RangeCalendar/RangeCalendar.stories.js +131 -0
- package/lib/cjs/components/RangeCalendar/RangeCalendar.styles.d.ts +104 -0
- package/lib/cjs/components/RangeCalendar/RangeCalendar.styles.js +118 -0
- package/lib/cjs/components/RangeCalendar/RangeCalendar.test.d.ts +1 -0
- package/lib/cjs/components/RangeCalendar/RangeCalendar.test.js +217 -0
- package/lib/cjs/components/RangeCalendar/RangeCalendarCell.d.ts +4 -0
- package/lib/cjs/components/RangeCalendar/RangeCalendarCell.js +96 -0
- package/lib/cjs/components/RangeCalendar/RangeCalendarGrid.d.ts +4 -0
- package/lib/cjs/components/RangeCalendar/RangeCalendarGrid.js +70 -0
- package/lib/cjs/components/RangeCalendar/RangeCalendarHeader.d.ts +4 -0
- package/lib/cjs/components/RangeCalendar/RangeCalendarHeader.js +85 -0
- package/lib/cjs/components/RangeCalendar/index.d.ts +2 -0
- package/lib/cjs/components/RangeCalendar/index.js +33 -0
- package/lib/cjs/index.d.ts +5 -2
- package/lib/cjs/index.js +92 -65
- package/lib/cjs/styles/theme.js +1 -0
- package/lib/cjs/styles/variants/index.js +8 -0
- package/lib/cjs/styles/variants/variants.js +2 -0
- package/lib/cjs/types/calendar.d.ts +51 -16
- package/lib/cjs/types/grid.d.ts +21 -0
- package/lib/cjs/types/grid.js +6 -0
- package/lib/cjs/types/index.d.ts +1 -0
- package/lib/cjs/types/index.js +43 -32
- package/lib/components/AccordionItem/AccordionItem.js +0 -3
- package/lib/components/Calendar/Calendar.js +4 -0
- package/lib/components/Calendar/Calendar.mdx +1 -1
- package/lib/components/Calendar/Calendar.test.js +1 -4
- package/lib/components/Calendar/CalendarCell.js +1 -1
- package/lib/components/DatePicker/DatePicker.test.js +62 -6
- package/lib/components/Grid/Grid.js +14 -0
- package/lib/components/Grid/Grid.mdx +13 -0
- package/lib/components/Grid/Grid.stories.js +62 -0
- package/lib/components/Grid/Grid.styles.js +1 -0
- package/lib/components/Grid/Grid.test.js +24 -0
- package/lib/components/Grid/index.js +1 -0
- package/lib/components/RangeCalendar/RangeCalendar.js +86 -0
- package/lib/components/RangeCalendar/RangeCalendar.mdx +39 -0
- package/lib/components/RangeCalendar/RangeCalendar.stories.js +112 -0
- package/lib/components/RangeCalendar/RangeCalendar.styles.js +110 -0
- package/lib/components/RangeCalendar/RangeCalendar.test.js +208 -0
- package/lib/components/RangeCalendar/RangeCalendarCell.js +82 -0
- package/lib/components/RangeCalendar/RangeCalendarGrid.js +61 -0
- package/lib/components/RangeCalendar/RangeCalendarHeader.js +76 -0
- package/lib/components/RangeCalendar/index.js +2 -0
- package/lib/index.js +5 -2
- package/lib/styles/theme.js +2 -1
- package/lib/styles/variants/index.js +1 -0
- package/lib/styles/variants/variants.js +2 -0
- package/lib/types/grid.js +1 -0
- package/lib/types/index.js +1 -0
- package/package.json +13 -10
@@ -25,7 +25,7 @@ var _hooks = require("../../hooks");
|
|
25
25
|
var _index = require("../../index");
|
26
26
|
var _Accordion = require("../AccordionGroup/Accordion.styles");
|
27
27
|
var _react2 = require("@emotion/react");
|
28
|
-
var _excluded = ["containerProps", "buttonProps", "regionProps"];
|
28
|
+
var _excluded = ["containerProps", "buttonProps", "regionProps"];
|
29
29
|
function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
30
30
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
31
31
|
var validHeadingTags = ['h1', 'h2', 'h3', 'h4'];
|
@@ -64,6 +64,10 @@ var Calendar = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
64
64
|
prevButtonProps = _ref.prevButtonProps,
|
65
65
|
nextButtonProps = _ref.nextButtonProps,
|
66
66
|
title = _ref.title;
|
67
|
+
|
68
|
+
// to remove warning for unknown event handler property `onFocusChange`.
|
69
|
+
delete prevButtonProps.onFocusChange;
|
70
|
+
delete nextButtonProps.onFocusChange;
|
67
71
|
var _useState = (0, _react.useState)(null),
|
68
72
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
69
73
|
yearChangeDirection = _useState2[0],
|
@@ -25,7 +25,7 @@ These keys provide additional functionality to the component.
|
|
25
25
|
| Tab | Components in the calendar are focusable and follow the page tab sequence. |
|
26
26
|
| Shift + Tab | Moves focus to the previous focusable component. |
|
27
27
|
| Pressing Home:(Fn + Right Arrow Key) Or Control or Command + Home | Shifts the focus to the first calendar date. |
|
28
|
-
| Pressing
|
28
|
+
| Pressing End:(Fn + left Arrow Key) Or Control or Command + End | Shifts the focus to the last calendar date. |
|
29
29
|
| Arrow key | Navigates up, down, right, and left across the calendar. |
|
30
30
|
| Page up | Changes the grid of dates to the previous month. |
|
31
31
|
| Page down | Changes the grid of dates to the next month. |
|
@@ -212,15 +212,12 @@ test('allows users to select and navigate through calendar items', function () {
|
|
212
212
|
});
|
213
213
|
test('readonly calendar', function () {
|
214
214
|
getComponent({
|
215
|
-
isReadOnly: true
|
216
|
-
defaultValue: '2022-08-10'
|
215
|
+
isReadOnly: true
|
217
216
|
});
|
218
217
|
expect(_testWrapper.screen.queryByRole('grid')).toHaveAttribute('aria-readonly', 'true');
|
219
218
|
var dateButtons = _testWrapper.screen.queryAllByRole('button');
|
220
219
|
_userEvent["default"].click(dateButtons[4]);
|
221
220
|
expect(dateButtons[4]).not.toHaveClass('is-selected');
|
222
|
-
expect(dateButtons[4]).toHaveFocus();
|
223
|
-
expect(dateButtons[4]).toHaveAttribute('tabindex', '0');
|
224
221
|
});
|
225
222
|
test('disabled calendar date', function () {
|
226
223
|
getComponent({
|
@@ -62,7 +62,7 @@ var CalendarCell = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
62
62
|
setFocused(false);
|
63
63
|
focusNextPage();
|
64
64
|
}
|
65
|
-
}, [
|
65
|
+
}, [focusNextPage, focusPreviousPage, formattedDate, state, setFocused, cellRef]);
|
66
66
|
var _useHover = (0, _interactions.useHover)({}),
|
67
67
|
hoverProps = _useHover.hoverProps,
|
68
68
|
isHovered = _useHover.isHovered;
|
@@ -626,12 +626,6 @@ test('dateField should handle autofocus when deleting segments from middle', fun
|
|
626
626
|
key: 'Backspace'
|
627
627
|
});
|
628
628
|
}
|
629
|
-
_testWrapper.fireEvent.keyDown(year, {
|
630
|
-
key: 'Backspace'
|
631
|
-
});
|
632
|
-
_testWrapper.fireEvent.keyUp(year, {
|
633
|
-
key: 'Backspace'
|
634
|
-
});
|
635
629
|
expect(day).toHaveFocus();
|
636
630
|
expect(hiddenInput).toHaveValue('');
|
637
631
|
});
|
@@ -671,6 +665,68 @@ test('segment focus should move to the year if month is already empty', function
|
|
671
665
|
}
|
672
666
|
expect(year).toHaveFocus();
|
673
667
|
});
|
668
|
+
test('segment focus stay on year if all are empty for year segment', function () {
|
669
|
+
getComponent({
|
670
|
+
defaultValue: ''
|
671
|
+
});
|
672
|
+
var hiddenInput = _testWrapper.screen.queryByTestId('date-field');
|
673
|
+
var inputButtons = _testWrapper.screen.queryAllByRole('spinbutton');
|
674
|
+
var year = inputButtons[0];
|
675
|
+
expect(hiddenInput).toHaveValue('');
|
676
|
+
(0, _testWrapper.act)(function () {
|
677
|
+
year.focus();
|
678
|
+
});
|
679
|
+
expect(year).toHaveFocus();
|
680
|
+
_testWrapper.fireEvent.keyDown(year, {
|
681
|
+
key: 'Backspace'
|
682
|
+
});
|
683
|
+
_testWrapper.fireEvent.keyUp(year, {
|
684
|
+
key: 'Backspace'
|
685
|
+
});
|
686
|
+
expect(year).toHaveFocus();
|
687
|
+
});
|
688
|
+
test('segment focus should move to previous if all are empty for month segment', function () {
|
689
|
+
getComponent({
|
690
|
+
defaultValue: ''
|
691
|
+
});
|
692
|
+
var hiddenInput = _testWrapper.screen.queryByTestId('date-field');
|
693
|
+
var inputButtons = _testWrapper.screen.queryAllByRole('spinbutton');
|
694
|
+
var month = inputButtons[1];
|
695
|
+
var year = inputButtons[0];
|
696
|
+
expect(hiddenInput).toHaveValue('');
|
697
|
+
(0, _testWrapper.act)(function () {
|
698
|
+
month.focus();
|
699
|
+
});
|
700
|
+
expect(month).toHaveFocus();
|
701
|
+
_testWrapper.fireEvent.keyDown(month, {
|
702
|
+
key: 'Backspace'
|
703
|
+
});
|
704
|
+
_testWrapper.fireEvent.keyUp(month, {
|
705
|
+
key: 'Backspace'
|
706
|
+
});
|
707
|
+
expect(year).toHaveFocus();
|
708
|
+
});
|
709
|
+
test('segment focus should move to previous if all are empty for day segment', function () {
|
710
|
+
getComponent({
|
711
|
+
defaultValue: ''
|
712
|
+
});
|
713
|
+
var hiddenInput = _testWrapper.screen.queryByTestId('date-field');
|
714
|
+
var inputButtons = _testWrapper.screen.queryAllByRole('spinbutton');
|
715
|
+
var day = inputButtons[2];
|
716
|
+
var month = inputButtons[1];
|
717
|
+
expect(hiddenInput).toHaveValue('');
|
718
|
+
(0, _testWrapper.act)(function () {
|
719
|
+
day.focus();
|
720
|
+
});
|
721
|
+
expect(day).toHaveFocus();
|
722
|
+
_testWrapper.fireEvent.keyDown(day, {
|
723
|
+
key: 'Backspace'
|
724
|
+
});
|
725
|
+
_testWrapper.fireEvent.keyUp(day, {
|
726
|
+
key: 'Backspace'
|
727
|
+
});
|
728
|
+
expect(month).toHaveFocus();
|
729
|
+
});
|
674
730
|
test('should add the correct number of padded 0 to year, month and day', function () {
|
675
731
|
getComponent({
|
676
732
|
defaultValue: '0009-08-02'
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports["default"] = exports.Grid = void 0;
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
11
|
+
var _themeUi = require("theme-ui");
|
12
|
+
var _react2 = require("@emotion/react");
|
13
|
+
var Grid = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
|
14
|
+
return (0, _react2.jsx)(_themeUi.Grid, (0, _extends2["default"])({
|
15
|
+
ref: ref
|
16
|
+
}, props));
|
17
|
+
});
|
18
|
+
exports.Grid = Grid;
|
19
|
+
Grid.defaultProps = {
|
20
|
+
repeat: 'fit'
|
21
|
+
};
|
22
|
+
Grid.displayName = 'Grid';
|
23
|
+
var _default = Grid;
|
24
|
+
exports["default"] = _default;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { Meta } from '@storybook/addon-docs';
|
2
|
+
|
3
|
+
<Meta title="Components/Grid/Grid" />
|
4
|
+
|
5
|
+
# Grid
|
6
|
+
|
7
|
+
A responsive layout utility component which utilizes [CSS Grid](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout) to position child elements in a variety of ways. Great for providing mobile-first UI layouts.
|
8
|
+
|
9
|
+
Uses the [responsive values](https://theme-ui.com/sx-prop#responsive-values) array syntax and the [Grid from Theme-UI](https://theme-ui.com/components/grid/).
|
10
|
+
|
11
|
+
### Required Components
|
12
|
+
|
13
|
+
`Grid` should be used to position other components, but there are none that are specifically required. `Box` is used for demonstration below.
|
@@ -0,0 +1,5 @@
|
|
1
|
+
import { StoryFn } from '@storybook/react';
|
2
|
+
import { GridProps } from '../../types';
|
3
|
+
declare const _default: import("@storybook/types").ComponentAnnotations<import("@storybook/react/dist/types-0a347bb9").R, import("@storybook/types").Args>;
|
4
|
+
export default _default;
|
5
|
+
export declare const Default: StoryFn<GridProps>;
|
@@ -0,0 +1,72 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports["default"] = exports.Default = void 0;
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
10
|
+
var _storybookDocsLayout = _interopRequireDefault(require("../../../.storybook/storybookDocsLayout"));
|
11
|
+
var _index = require("../../index");
|
12
|
+
var _Grid = _interopRequireDefault(require("./Grid.mdx"));
|
13
|
+
var _react2 = require("@emotion/react");
|
14
|
+
var _default = {
|
15
|
+
title: 'Components/Grid',
|
16
|
+
component: _index.Grid,
|
17
|
+
parameters: {
|
18
|
+
docs: {
|
19
|
+
page: function page() {
|
20
|
+
return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_Grid["default"], null), (0, _react2.jsx)(_storybookDocsLayout["default"], null));
|
21
|
+
}
|
22
|
+
}
|
23
|
+
}
|
24
|
+
};
|
25
|
+
exports["default"] = _default;
|
26
|
+
var Default = function Default() {
|
27
|
+
return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_index.Text, {
|
28
|
+
mb: "sm",
|
29
|
+
fontStyle: "italic"
|
30
|
+
}, "Minimum width of child elements at responsive breakpoints"), (0, _react2.jsx)(_index.Grid, {
|
31
|
+
width: [128, null, 192]
|
32
|
+
}, (0, _react2.jsx)(_index.Box, {
|
33
|
+
bg: "accent.90"
|
34
|
+
}, "Box"), (0, _react2.jsx)(_index.Box, {
|
35
|
+
bg: "neutral.80"
|
36
|
+
}, "Box"), (0, _react2.jsx)(_index.Box, {
|
37
|
+
bg: "accent.90"
|
38
|
+
}, "Box"), (0, _react2.jsx)(_index.Box, {
|
39
|
+
bg: "neutral.80"
|
40
|
+
}, "Box")), (0, _react2.jsx)(_index.Text, {
|
41
|
+
mt: "xl",
|
42
|
+
mb: "sm",
|
43
|
+
fontStyle: "italic"
|
44
|
+
}, "Defined number of equally-sized columns at responsive breakpoints"), (0, _react2.jsx)(_index.Grid, {
|
45
|
+
gap: 2,
|
46
|
+
columns: [2, null, 4]
|
47
|
+
}, (0, _react2.jsx)(_index.Box, {
|
48
|
+
bg: "accent.90"
|
49
|
+
}, "Box"), (0, _react2.jsx)(_index.Box, {
|
50
|
+
bg: "neutral.80"
|
51
|
+
}, "Box"), (0, _react2.jsx)(_index.Box, {
|
52
|
+
bg: "accent.90"
|
53
|
+
}, "Box"), (0, _react2.jsx)(_index.Box, {
|
54
|
+
bg: "neutral.80"
|
55
|
+
}, "Box")), (0, _react2.jsx)(_index.Text, {
|
56
|
+
mt: "xl",
|
57
|
+
mb: "sm",
|
58
|
+
fontStyle: "italic"
|
59
|
+
}, "Columns using grid syntax sizing at responsive breakpoints"), (0, _react2.jsx)(_index.Grid, {
|
60
|
+
gap: 2,
|
61
|
+
columns: [2, '1fr 2fr']
|
62
|
+
}, (0, _react2.jsx)(_index.Box, {
|
63
|
+
bg: "accent.90"
|
64
|
+
}, "Box"), (0, _react2.jsx)(_index.Box, {
|
65
|
+
bg: "neutral.80"
|
66
|
+
}, "Box"), (0, _react2.jsx)(_index.Box, {
|
67
|
+
bg: "accent.90"
|
68
|
+
}, "Box"), (0, _react2.jsx)(_index.Box, {
|
69
|
+
bg: "neutral.80"
|
70
|
+
}, "Box")));
|
71
|
+
};
|
72
|
+
exports.Default = Default;
|
@@ -0,0 +1,9 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
4
|
+
_Object$defineProperty(exports, "__esModule", {
|
5
|
+
value: true
|
6
|
+
});
|
7
|
+
exports["default"] = void 0;
|
8
|
+
var _default = {};
|
9
|
+
exports["default"] = _default;
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,27 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
4
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
6
|
+
var _index = require("../../index");
|
7
|
+
var _testWrapper = require("../../utils/testUtils/testWrapper");
|
8
|
+
var _universalComponentTest = require("../../utils/testUtils/universalComponentTest");
|
9
|
+
var _react2 = require("@emotion/react");
|
10
|
+
var defaultProps = {
|
11
|
+
'data-testid': 'grid'
|
12
|
+
};
|
13
|
+
var getComponent = function getComponent() {
|
14
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
15
|
+
return (0, _testWrapper.render)((0, _react2.jsx)(_index.Grid, (0, _extends2["default"])({}, defaultProps, props)));
|
16
|
+
};
|
17
|
+
|
18
|
+
// Needs to be added to each components test file
|
19
|
+
(0, _universalComponentTest.universalComponentTests)({
|
20
|
+
renderComponent: function renderComponent(props) {
|
21
|
+
return (0, _react2.jsx)(_index.Grid, (0, _extends2["default"])({}, defaultProps, props));
|
22
|
+
}
|
23
|
+
});
|
24
|
+
test('renders Grid component', function () {
|
25
|
+
getComponent();
|
26
|
+
expect(_testWrapper.screen.getByTestId('grid')).toBeInTheDocument();
|
27
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
export { default } from './Grid';
|
@@ -0,0 +1,14 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
_Object$defineProperty(exports, "default", {
|
9
|
+
enumerable: true,
|
10
|
+
get: function get() {
|
11
|
+
return _Grid["default"];
|
12
|
+
}
|
13
|
+
});
|
14
|
+
var _Grid = _interopRequireDefault(require("./Grid"));
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { DateValue } from '@internationalized/date';
|
3
|
+
import { RangeCalendarProps, RangeValue, StringOrRangeValue } from '../../types';
|
4
|
+
export declare const parseDateIfString: (value: DateValue | string) => DateValue;
|
5
|
+
export declare const parseDateRangeIfString: (value: StringOrRangeValue) => RangeValue<DateValue>;
|
6
|
+
declare const RangeCalendar: React.ForwardRefExoticComponent<RangeCalendarProps & React.RefAttributes<HTMLDivElement>>;
|
7
|
+
export default RangeCalendar;
|
@@ -0,0 +1,100 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
|
4
|
+
var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
|
5
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
|
6
|
+
var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
|
7
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
8
|
+
var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
|
9
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
|
10
|
+
var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
|
11
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
12
|
+
var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
|
13
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
14
|
+
_Object$defineProperty(exports, "__esModule", {
|
15
|
+
value: true
|
16
|
+
});
|
17
|
+
exports.parseDateRangeIfString = exports.parseDateIfString = exports["default"] = void 0;
|
18
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
19
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
20
|
+
var _react = _interopRequireWildcard(require("react"));
|
21
|
+
var _date = require("@internationalized/date");
|
22
|
+
var _calendar = require("@react-aria/calendar");
|
23
|
+
var _i18n = require("@react-aria/i18n");
|
24
|
+
var _calendar2 = require("@react-stately/calendar");
|
25
|
+
var _hooks = require("../../hooks");
|
26
|
+
var _index = require("../../index");
|
27
|
+
var _RangeCalendarGrid = _interopRequireDefault(require("./RangeCalendarGrid"));
|
28
|
+
var _RangeCalendarHeader = _interopRequireDefault(require("./RangeCalendarHeader"));
|
29
|
+
var _react2 = require("@emotion/react");
|
30
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
31
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
32
|
+
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
33
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
34
|
+
var parseDateIfString = function parseDateIfString(value) {
|
35
|
+
return typeof value === 'string' ? (0, _date.parseDate)(value) : value;
|
36
|
+
};
|
37
|
+
exports.parseDateIfString = parseDateIfString;
|
38
|
+
var parseDateRangeIfString = function parseDateRangeIfString(value) {
|
39
|
+
var start = parseDateIfString(value.start);
|
40
|
+
var end = parseDateIfString(value.end);
|
41
|
+
return {
|
42
|
+
start: start,
|
43
|
+
end: end
|
44
|
+
};
|
45
|
+
};
|
46
|
+
exports.parseDateRangeIfString = parseDateRangeIfString;
|
47
|
+
var RangeCalendar = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
48
|
+
var defaultFocusedValue = props.defaultFocusedValue,
|
49
|
+
defaultValue = props.defaultValue,
|
50
|
+
hasAutoFocus = props.hasAutoFocus,
|
51
|
+
maxValue = props.maxValue,
|
52
|
+
minValue = props.minValue,
|
53
|
+
value = props.value;
|
54
|
+
var _useLocale = (0, _i18n.useLocale)(),
|
55
|
+
locale = _useLocale.locale;
|
56
|
+
var calenderRangeRef = (0, _hooks.useLocalOrForwardRef)(ref);
|
57
|
+
var parsedDates = {
|
58
|
+
value: value && parseDateRangeIfString(value),
|
59
|
+
defaultValue: defaultValue && parseDateRangeIfString(defaultValue),
|
60
|
+
defaultFocusedValue: defaultFocusedValue && parseDateIfString(defaultFocusedValue),
|
61
|
+
maxValue: maxValue && parseDateIfString(maxValue),
|
62
|
+
minValue: minValue && parseDateIfString(minValue)
|
63
|
+
};
|
64
|
+
var state = (0, _calendar2.useRangeCalendarState)(_objectSpread(_objectSpread(_objectSpread({
|
65
|
+
autoFocus: hasAutoFocus
|
66
|
+
}, props), parsedDates), {}, {
|
67
|
+
visibleDuration: {
|
68
|
+
months: 2
|
69
|
+
},
|
70
|
+
pageBehavior: 'single',
|
71
|
+
locale: locale,
|
72
|
+
createCalendar: _date.createCalendar
|
73
|
+
}));
|
74
|
+
var _ref = (0, _calendar.useRangeCalendar)(_objectSpread(_objectSpread({}, props), parsedDates), state, calenderRangeRef),
|
75
|
+
calendarProps = _ref.calendarProps,
|
76
|
+
prevButtonProps = _ref.prevButtonProps,
|
77
|
+
nextButtonProps = _ref.nextButtonProps;
|
78
|
+
return (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({}, calendarProps, {
|
79
|
+
ref: calenderRangeRef,
|
80
|
+
variant: "rangeCalendar.calendarContainer",
|
81
|
+
role: "group"
|
82
|
+
}), (0, _react2.jsx)(_RangeCalendarHeader["default"], {
|
83
|
+
state: state,
|
84
|
+
calendarProps: calendarProps,
|
85
|
+
prevButtonProps: prevButtonProps,
|
86
|
+
nextButtonProps: nextButtonProps
|
87
|
+
}), (0, _react2.jsx)(_index.Box, {
|
88
|
+
isRow: true,
|
89
|
+
gap: "26px"
|
90
|
+
}, (0, _react2.jsx)(_RangeCalendarGrid["default"], {
|
91
|
+
state: state
|
92
|
+
}), (0, _react2.jsx)(_RangeCalendarGrid["default"], {
|
93
|
+
state: state,
|
94
|
+
offset: {
|
95
|
+
months: 1
|
96
|
+
}
|
97
|
+
})));
|
98
|
+
});
|
99
|
+
var _default = RangeCalendar;
|
100
|
+
exports["default"] = _default;
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import { Meta } from '@storybook/addon-docs';
|
2
|
+
|
3
|
+
<Meta title="Experimental/RangeCalendar/RangeCalendar" />
|
4
|
+
|
5
|
+
# RangeCalendar
|
6
|
+
|
7
|
+
The RangeCalendar component displays months in two grid-like views and gives users the ability to quickly to select a contiguous range of dates.
|
8
|
+
|
9
|
+
This component is built on [useRangeCalendar](https://react-spectrum.adobe.com/react-aria/useRangeCalendar.html), [useCalendarGrid](https://react-spectrum.adobe.com/react-aria/useCalendar.html#usecalendargrid), and
|
10
|
+
[useCalendarCell](https://react-spectrum.adobe.com/react-aria/useCalendar.html#usecalendarcell) from React Aria, and [useRangeCalendarState](https://react-spectrum.adobe.com/react-stately/useRangeCalendarState.html) from React Stately.
|
11
|
+
|
12
|
+
### Required components
|
13
|
+
|
14
|
+
This component can be used independently and does not require additional components.
|
15
|
+
|
16
|
+
### Accessibility
|
17
|
+
|
18
|
+
#### Keyboard Navigation
|
19
|
+
|
20
|
+
These keys provide additional functionality to the component.
|
21
|
+
|
22
|
+
| Keys | Functions |
|
23
|
+
| ---- | --------- |
|
24
|
+
| Space or Enter | Selects the start and end dates when a date is focused, and navigates to the calendar pages when the navigational buttons are focused. |
|
25
|
+
| Tab | Components in the calendar are focusable and follow the page tab sequence. |
|
26
|
+
| Shift + Tab | Moves focus to the previous focusable component. |
|
27
|
+
| Pressing Home:(Fn + Right Arrow Key) Or Control or Command + Home | Shifts the focus to the first calendar date of the currently focused month. |
|
28
|
+
| Pressing End:(Fn + left Arrow Key) Or Control or Command + End | Shifts the focus to the last calendar date of the currently focused month. |
|
29
|
+
| Arrow key | Navigates up, down, right, and left across the calendar. If at the end of the current calendar, the right arrow key navigates to the next calendar. If at the beginning of the current calendar, the left arrow key navigates to the previous calendar. |
|
30
|
+
| Page up | Changes focus to the same date in the previous month. |
|
31
|
+
| Page down | Changes focus to the same date in the next month. |
|
32
|
+
| Shift + page up | Changes the grid of dates to the same months in the previous year. |
|
33
|
+
| Shift+ page down | Changes the grid of dates to the same months in the next year. |
|
34
|
+
|
35
|
+
#### Screen Readers
|
36
|
+
|
37
|
+
This component uses the following attributes to assist screen readers:
|
38
|
+
- The **`aria-label`** attribute is used to provide an accessible name.
|
39
|
+
- In each data cell, the **`aria-selected`** attribute is set to “true” for all dates within the selected range, and **`aria-disabled`** is set to “false” by default.
|
@@ -0,0 +1,103 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { StoryFn } from '@storybook/react';
|
3
|
+
import { RangeCalendarProps } from '../../types';
|
4
|
+
declare const _default: {
|
5
|
+
title: string;
|
6
|
+
component: React.ForwardRefExoticComponent<RangeCalendarProps & React.RefAttributes<HTMLDivElement>>;
|
7
|
+
parameters: {
|
8
|
+
actions: {
|
9
|
+
argTypesRegex: string;
|
10
|
+
};
|
11
|
+
source: {
|
12
|
+
type: string;
|
13
|
+
};
|
14
|
+
docs: {
|
15
|
+
page: () => React.JSX.Element;
|
16
|
+
};
|
17
|
+
};
|
18
|
+
argTypes: {
|
19
|
+
'aria-controls': {
|
20
|
+
control: {
|
21
|
+
type: string;
|
22
|
+
};
|
23
|
+
table: {
|
24
|
+
type: {
|
25
|
+
summary: string;
|
26
|
+
};
|
27
|
+
category: string;
|
28
|
+
};
|
29
|
+
description: string;
|
30
|
+
};
|
31
|
+
'aria-describedby': {
|
32
|
+
control: {
|
33
|
+
type: string;
|
34
|
+
};
|
35
|
+
table: {
|
36
|
+
type: {
|
37
|
+
summary: string;
|
38
|
+
};
|
39
|
+
category: string;
|
40
|
+
};
|
41
|
+
description: string;
|
42
|
+
};
|
43
|
+
'aria-details': {
|
44
|
+
control: {
|
45
|
+
type: string;
|
46
|
+
};
|
47
|
+
table: {
|
48
|
+
type: {
|
49
|
+
summary: string;
|
50
|
+
};
|
51
|
+
category: string;
|
52
|
+
};
|
53
|
+
description: string;
|
54
|
+
};
|
55
|
+
'aria-errormessage': {
|
56
|
+
control: {
|
57
|
+
type: string;
|
58
|
+
};
|
59
|
+
table: {
|
60
|
+
type: {
|
61
|
+
summary: string;
|
62
|
+
};
|
63
|
+
category: string;
|
64
|
+
};
|
65
|
+
description: string;
|
66
|
+
};
|
67
|
+
'aria-label': {
|
68
|
+
control: {
|
69
|
+
type: string;
|
70
|
+
};
|
71
|
+
table: {
|
72
|
+
type: {
|
73
|
+
summary: string;
|
74
|
+
};
|
75
|
+
category: string;
|
76
|
+
};
|
77
|
+
description: string;
|
78
|
+
};
|
79
|
+
'aria-labelledby': {
|
80
|
+
control: {
|
81
|
+
type: string;
|
82
|
+
};
|
83
|
+
table: {
|
84
|
+
type: {
|
85
|
+
summary: string;
|
86
|
+
};
|
87
|
+
category: string;
|
88
|
+
};
|
89
|
+
description: string;
|
90
|
+
};
|
91
|
+
};
|
92
|
+
args: {
|
93
|
+
defaultFocusedValue: string;
|
94
|
+
};
|
95
|
+
};
|
96
|
+
export default _default;
|
97
|
+
export declare const Default: StoryFn<RangeCalendarProps>;
|
98
|
+
export declare const DefaultValue: StoryFn<RangeCalendarProps>;
|
99
|
+
export declare const Disabled: StoryFn<RangeCalendarProps>;
|
100
|
+
export declare const UnavailableDates: StoryFn<RangeCalendarProps>;
|
101
|
+
export declare const MinimumDate: StoryFn<RangeCalendarProps>;
|
102
|
+
export declare const MaximumDate: StoryFn<RangeCalendarProps>;
|
103
|
+
export declare const Controlled: StoryFn<RangeCalendarProps>;
|