@kaizen/components 1.47.2 → 1.47.4
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/cjs/Calendar/CalendarPopover/CalendarPopover.cjs +31 -20
- package/dist/cjs/Calendar/CalendarPopover/CalendarPopover.module.scss.cjs +1 -1
- package/dist/cjs/Heading/Heading.module.scss.cjs +1 -1
- package/dist/esm/Avatar/Avatar.module.scss.mjs +1 -1
- package/dist/esm/AvatarGroup/AvatarGroup.module.scss.mjs +1 -1
- package/dist/esm/Badge/Badge.module.scss.mjs +1 -1
- package/dist/esm/Brand/Brand.module.scss.mjs +1 -1
- package/dist/esm/BrandMoment/BrandMoment.module.scss.mjs +1 -1
- package/dist/esm/Button/GenericButton/GenericButton.module.scss.mjs +1 -1
- package/dist/esm/ButtonGroup/ButtonGroup.module.scss.mjs +1 -1
- package/dist/esm/Calendar/CalendarPopover/CalendarPopover.mjs +31 -20
- package/dist/esm/Calendar/CalendarPopover/CalendarPopover.module.scss.mjs +2 -2
- package/dist/esm/Calendar/CalendarRange/CalendarRange.module.scss.mjs +1 -1
- package/dist/esm/Calendar/CalendarSingle/CalendarSingle.module.scss.mjs +1 -1
- package/dist/esm/Calendar/LegacyCalendarRange/LegacyCalendarRange.module.scss.mjs +1 -1
- package/dist/esm/Calendar/baseCalendarClassNames.module.scss.mjs +1 -1
- package/dist/esm/Card/Card.module.scss.mjs +1 -1
- package/dist/esm/Checkbox/Checkbox/Checkbox.module.scss.mjs +1 -1
- package/dist/esm/Checkbox/CheckboxField/CheckboxField.module.scss.mjs +1 -1
- package/dist/esm/Checkbox/CheckboxGroup/CheckboxGroup.module.scss.mjs +1 -1
- package/dist/esm/ClearButton/ClearButton.module.scss.mjs +1 -1
- package/dist/esm/Collapsible/Collapsible/Collapsible.module.scss.mjs +1 -1
- package/dist/esm/Collapsible/CollapsibleGroup/CollapsibleGroup.module.scss.mjs +1 -1
- package/dist/esm/Collapsible/ExpertAdviceCollapsible/ExpertAdviceCollapsible.module.scss.mjs +1 -1
- package/dist/esm/Container/Container.module.scss.mjs +1 -1
- package/dist/esm/Content/Content.module.scss.mjs +1 -1
- package/dist/esm/DateInput/DateInput/DateInput.module.scss.mjs +1 -1
- package/dist/esm/DateInput/DateInputDescription/DateInputDescription.module.scss.mjs +1 -1
- package/dist/esm/DateInput/DateInputWithIconButton/DateInputWithIconButton.module.scss.mjs +1 -1
- package/dist/esm/DatePicker/subcomponents/DateInputField/DateInputField.module.scss.mjs +1 -1
- package/dist/esm/DateRangePicker/DateRangePicker.module.scss.mjs +1 -1
- package/dist/esm/Divider/Divider.module.scss.mjs +1 -1
- package/dist/esm/EmptyState/EmptyState.module.scss.mjs +1 -1
- package/dist/esm/ErrorPage/ErrorPage.module.scss.mjs +1 -1
- package/dist/esm/FieldGroup/FieldGroup.module.scss.mjs +1 -1
- package/dist/esm/FieldMessage/FieldMessage.module.scss.mjs +1 -1
- package/dist/esm/Filter/Filter/subcomponents/FilterContents/FilterContents.module.scss.mjs +1 -1
- package/dist/esm/Filter/Filter/subcomponents/FilterPopover/FilterPopover.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterBar/FilterBar.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterBar/subcomponents/ClearAllButton/ClearAllButton.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterButton/FilterButton/FilterButton.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterButton/subcomponents/FilterButtonBase/FilterButtonBase.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterDatePicker/subcomponents/DateInputField/DateInputField.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterDatePicker/subcomponents/FilterDatePickerField/FilterDatePickerField.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterDateRangePicker/subcomponents/DateRangeDisplayLabel/DateRangeDisplayLabel.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterDateRangePicker/subcomponents/DateRangeInputField/DateRangeInputField.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterDateRangePicker/subcomponents/DateRangeValidationMessage/DateRangeValidationMessage.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/FilterDateRangePickerField.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterMultiSelect/subcomponents/ListBoxSection/ListBoxSection.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterMultiSelect/subcomponents/LoadMoreButton/LoadMoreButton.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterMultiSelect/subcomponents/MenuLayout/MenuFooter/MenuFooter.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterMultiSelect/subcomponents/MenuLayout/MenuLoadingSkeleton/MenuLoadingSkeleton.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterMultiSelect/subcomponents/MultiSelectOption/MultiSelectOption.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterMultiSelect/subcomponents/NoResults/NoResults.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterMultiSelect/subcomponents/SearchInput/SearchInput.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterMultiSelect/subcomponents/SectionDivider/SectionDivider.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterMultiSelect/subcomponents/SelectionControlButton/SelectionControlButton.module.scss.mjs +1 -1
- package/dist/esm/Filter/FilterSelect/FilterSelect.module.scss.mjs +1 -1
- package/dist/esm/GuidanceBlock/GuidanceBlock.module.scss.mjs +1 -1
- package/dist/esm/Heading/Heading.module.scss.mjs +2 -2
- package/dist/esm/Icon/subcomponents/SVG/SVG.module.scss.mjs +1 -1
- package/dist/esm/Illustration/subcomponents/Base/Base.module.scss.mjs +1 -1
- package/dist/esm/Input/Input/Input.module.scss.mjs +1 -1
- package/dist/esm/Input/InputRange/InputRange.module.scss.mjs +1 -1
- package/dist/esm/Input/InputSearch/InputSearch.module.scss.mjs +1 -1
- package/dist/esm/Label/Label.module.scss.mjs +1 -1
- package/dist/esm/LabelledMessage/LabelledMessage.module.scss.mjs +1 -1
- package/dist/esm/LikertScaleLegacy/LikertScaleLegacy.module.scss.mjs +1 -1
- package/dist/esm/Loading/LoadingGraphic/LoadingGraphic.module.scss.mjs +1 -1
- package/dist/esm/Loading/LoadingHeading/LoadingHeading.module.scss.mjs +1 -1
- package/dist/esm/Loading/LoadingInput/LoadingInput.module.scss.mjs +1 -1
- package/dist/esm/Loading/LoadingParagraph/LoadingParagraph.module.scss.mjs +1 -1
- package/dist/esm/Loading/LoadingSpinner/LoadingSpinner.module.scss.mjs +1 -1
- package/dist/esm/Menu/subcomponents/MenuDropdown/MenuDropdown.module.scss.mjs +1 -1
- package/dist/esm/Menu/subcomponents/MenuHeading/MenuHeading.module.scss.mjs +1 -1
- package/dist/esm/Menu/subcomponents/MenuItem/MenuItem.module.scss.mjs +1 -1
- package/dist/esm/Menu/subcomponents/MenuList/MenuList.module.scss.mjs +1 -1
- package/dist/esm/Menu/subcomponents/StatelessMenu/StatelessMenu.module.scss.mjs +1 -1
- package/dist/esm/Modal/ConfirmationModal/ConfirmationModal.module.scss.mjs +1 -1
- package/dist/esm/Modal/ContextModal/ContextModal.module.scss.mjs +1 -1
- package/dist/esm/Modal/GenericModal/GenericModal.module.scss.mjs +1 -1
- package/dist/esm/Modal/GenericModal/subcomponents/ModalAccessibleDescription/ModalAccessibleDescription.module.scss.mjs +1 -1
- package/dist/esm/Modal/GenericModal/subcomponents/ModalAccessibleLabel/ModalAccessibleLabel.module.scss.mjs +1 -1
- package/dist/esm/Modal/GenericModal/subcomponents/ModalBody/ModalBody.module.scss.mjs +1 -1
- package/dist/esm/Modal/GenericModal/subcomponents/ModalFooter/ModalFooter.module.scss.mjs +1 -1
- package/dist/esm/Modal/GenericModal/subcomponents/ModalHeader/ModalHeader.module.scss.mjs +1 -1
- package/dist/esm/Modal/InputEditModal/InputEditModal.module.scss.mjs +1 -1
- package/dist/esm/MultiSelect/MultiSelect.module.scss.mjs +1 -1
- package/dist/esm/MultiSelect/subcomponents/Checkbox/Checkbox.module.scss.mjs +1 -1
- package/dist/esm/MultiSelect/subcomponents/MultiSelectOptionField/MultiSelectOptionField.module.scss.mjs +1 -1
- package/dist/esm/MultiSelect/subcomponents/MultiSelectOptions/MultiSelectOptions.module.scss.mjs +1 -1
- package/dist/esm/MultiSelect/subcomponents/MultiSelectToggle/MultiSelectToggle.module.scss.mjs +1 -1
- package/dist/esm/MultiSelect/subcomponents/Popover/Popover.module.scss.mjs +1 -1
- package/dist/esm/Notification/ToastNotification/ToastNotificationsList/ToastNotificationsList.module.scss.mjs +1 -1
- package/dist/esm/Notification/subcomponents/GenericNotification/GenericNotification.module.scss.mjs +1 -1
- package/dist/esm/Pagination/Pagination.module.scss.mjs +1 -1
- package/dist/esm/Pagination/subcomponents/TruncateIndicator/TruncateIndicator.module.scss.mjs +1 -1
- package/dist/esm/Popover/Popover.module.scss.mjs +1 -1
- package/dist/esm/ProgressBar/ProgressBar.module.scss.mjs +1 -1
- package/dist/esm/ProgressBar/subcomponents/Label/Label.module.scss.mjs +1 -1
- package/dist/esm/Radio/Radio/Radio.module.scss.mjs +1 -1
- package/dist/esm/Radio/RadioField/RadioField.module.scss.mjs +1 -1
- package/dist/esm/Radio/RadioGroup/RadioGroup.module.scss.mjs +1 -1
- package/dist/esm/RichTextEditor/EditableRichTextContent/EditableRichTextContent.module.scss.mjs +1 -1
- package/dist/esm/RichTextEditor/RichTextContent/RichTextContent.module.scss.mjs +1 -1
- package/dist/esm/RichTextEditor/RichTextEditor/RichTextEditor.module.scss.mjs +1 -1
- package/dist/esm/RichTextEditor/RichTextEditor/subcomponents/ToggleIconButton/ToggleIconButton.module.scss.mjs +1 -1
- package/dist/esm/RichTextEditor/RichTextEditor/subcomponents/Toolbar/Toolbar.module.scss.mjs +1 -1
- package/dist/esm/RichTextEditor/RichTextEditor/subcomponents/ToolbarSection/ToolbarSection.module.scss.mjs +1 -1
- package/dist/esm/RichTextEditor/utils/plugins/LinkManager/components/LinkPopover/LinkPopover.module.scss.mjs +1 -1
- package/dist/esm/SearchField/SearchField.module.scss.mjs +1 -1
- package/dist/esm/Select/Select.module.scss.mjs +1 -1
- package/dist/esm/Skirt/Skirt.module.scss.mjs +1 -1
- package/dist/esm/Skirt/subcomponents/SkirtCard/SkirtCard.module.scss.mjs +1 -1
- package/dist/esm/Slider/Slider.module.scss.mjs +1 -1
- package/dist/esm/SplitButton/SplitButton.module.scss.mjs +1 -1
- package/dist/esm/SplitButton/subcomponents/ActionButton/ActionButton.module.scss.mjs +1 -1
- package/dist/esm/SplitButton/subcomponents/BaseButton/BaseButton.module.scss.mjs +1 -1
- package/dist/esm/SplitButton/subcomponents/DropdownButton/DropdownButton.module.scss.mjs +1 -1
- package/dist/esm/Table/Table.module.scss.mjs +1 -1
- package/dist/esm/Tabs/subcomponents/Tab.module.scss.mjs +1 -1
- package/dist/esm/Tabs/subcomponents/TabList.module.scss.mjs +1 -1
- package/dist/esm/Tag/Tag.module.scss.mjs +1 -1
- package/dist/esm/Text/Text.module.scss.mjs +1 -1
- package/dist/esm/TextArea/TextArea.module.scss.mjs +1 -1
- package/dist/esm/TextAreaField/TextAreaField.module.scss.mjs +1 -1
- package/dist/esm/TextField/TextField.module.scss.mjs +1 -1
- package/dist/esm/Tile/MultiActionTile/MultiActionTile.module.scss.mjs +1 -1
- package/dist/esm/Tile/TileGrid/TileGrid.module.scss.mjs +1 -1
- package/dist/esm/Tile/subcomponents/GenericTile/GenericTile.module.scss.mjs +1 -1
- package/dist/esm/TimeField/TimeField.module.scss.mjs +1 -1
- package/dist/esm/TimeField/subcomponents/TimeSegment/TimeSegment.module.scss.mjs +1 -1
- package/dist/esm/TitleBlockZen/TitleBlockZen.module.scss.mjs +1 -1
- package/dist/esm/TitleBlockZen/subcomponents/MainActions.module.scss.mjs +1 -1
- package/dist/esm/TitleBlockZen/subcomponents/MobileActions.module.scss.mjs +1 -1
- package/dist/esm/TitleBlockZen/subcomponents/NavigationTabs.module.scss.mjs +1 -1
- package/dist/esm/TitleBlockZen/subcomponents/TitleBlockMenuItem.module.scss.mjs +1 -1
- package/dist/esm/TitleBlockZen/subcomponents/Toolbar.module.scss.mjs +1 -1
- package/dist/esm/ToggleSwitch/ToggleSwitch/ToggleSwitch.module.scss.mjs +1 -1
- package/dist/esm/ToggleSwitch/ToggleSwitchField/ToggleSwitchField.module.scss.mjs +1 -1
- package/dist/esm/Tooltip/Tooltip.module.scss.mjs +1 -1
- package/dist/esm/VisuallyHidden/VisuallyHidden.module.scss.mjs +1 -1
- package/dist/esm/Well/Well.module.scss.mjs +1 -1
- package/dist/esm/Workflow/subcomponents/Footer/components/FooterActions/FooterActions.module.scss.mjs +1 -1
- package/dist/esm/Workflow/subcomponents/Footer/components/ProgressStepper/ProgressStepper.module.scss.mjs +1 -1
- package/dist/esm/Workflow/subcomponents/Footer/components/Root/FooterRoot.module.scss.mjs +1 -1
- package/dist/esm/Workflow/subcomponents/Header/components/Actions/Actions.module.scss.mjs +1 -1
- package/dist/esm/Workflow/subcomponents/Header/components/Branding/Branding.module.scss.mjs +1 -1
- package/dist/esm/Workflow/subcomponents/Header/components/Root/Root.module.scss.mjs +1 -1
- package/dist/esm/Workflow/subcomponents/Header/components/Titles/Titles.module.scss.mjs +1 -1
- package/dist/esm/Workflow/subcomponents/Main/Main.module.scss.mjs +1 -1
- package/dist/esm/Workflow/subcomponents/Wrapper/Wrapper.module.scss.mjs +1 -1
- package/dist/esm/__future__/Select/Select.module.scss.mjs +1 -1
- package/dist/esm/__future__/Select/subcomponents/ListBox/ListBox.module.scss.mjs +1 -1
- package/dist/esm/__future__/Select/subcomponents/ListBoxSection/ListBoxSection.module.scss.mjs +1 -1
- package/dist/esm/__future__/Select/subcomponents/Option/Option.module.scss.mjs +1 -1
- package/dist/esm/__future__/Select/subcomponents/SectionDivider/SectionDivider.module.scss.mjs +1 -1
- package/dist/esm/__future__/Select/subcomponents/SelectPopoverContents/SelectPopoverContents.module.scss.mjs +1 -1
- package/dist/esm/__future__/Select/subcomponents/SelectToggle/SelectToggle.module.scss.mjs +1 -1
- package/dist/esm/__future__/Tag/RemovableTag/RemovableTag.module.scss.mjs +1 -1
- package/dist/esm/__future__/Tag/RemovableTag/subcomponents/RemoveButton.module.scss.mjs +1 -1
- package/dist/esm/__future__/Tag/Tag/Tag.module.scss.mjs +1 -1
- package/dist/esm/__future__/Workflow/subcomponents/Footer/components/FooterActions/FooterActions.module.scss.mjs +1 -1
- package/dist/esm/__future__/Workflow/subcomponents/Footer/components/ProgressStepper/ProgressStepper.module.scss.mjs +1 -1
- package/dist/esm/__future__/Workflow/subcomponents/Footer/components/Root/FooterRoot.module.scss.mjs +1 -1
- package/dist/esm/__future__/Workflow/subcomponents/Header/components/Actions/Actions.module.scss.mjs +1 -1
- package/dist/esm/__future__/Workflow/subcomponents/Header/components/Branding/Branding.module.scss.mjs +1 -1
- package/dist/esm/__future__/Workflow/subcomponents/Header/components/Root/Root.module.scss.mjs +1 -1
- package/dist/esm/__future__/Workflow/subcomponents/Header/components/Titles/Titles.module.scss.mjs +1 -1
- package/dist/esm/__future__/Workflow/subcomponents/Main/Main.module.scss.mjs +1 -1
- package/dist/esm/__future__/Workflow/subcomponents/Wrapper/Wrapper.module.scss.mjs +1 -1
- package/dist/types/Calendar/CalendarPopover/CalendarPopover.d.ts +3 -3
- package/package.json +26 -28
- package/src/Calendar/CalendarPopover/CalendarPopover.module.scss +8 -1
- package/src/Calendar/CalendarPopover/CalendarPopover.tsx +38 -24
- package/src/Calendar/CalendarPopover/_docs/CalendarPopover.stickersheet.stories.tsx +104 -15
- package/src/DatePicker/_docs/DatePicker.mdx +14 -0
- package/src/DatePicker/_docs/DatePicker.stories.tsx +116 -0
- package/src/DateRangePicker/_docs/DateRangePicker.mdx +5 -0
- package/src/Heading/Heading.module.scss +1 -0
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React from "react"
|
|
2
|
+
import { offset, size, autoPlacement } from "@floating-ui/react-dom"
|
|
2
3
|
import { Meta } from "@storybook/react"
|
|
4
|
+
import { Text } from "~components/Text"
|
|
3
5
|
import {
|
|
4
6
|
StickerSheet,
|
|
5
7
|
StickerSheetStory,
|
|
@@ -11,7 +13,9 @@ import { CalendarPopover, CalendarPopoverProps } from "../index"
|
|
|
11
13
|
export default {
|
|
12
14
|
title: "Components/Date controls/Calendars/CalendarPopover",
|
|
13
15
|
parameters: {
|
|
14
|
-
chromatic: {
|
|
16
|
+
chromatic: {
|
|
17
|
+
disable: false,
|
|
18
|
+
},
|
|
15
19
|
controls: { disable: true },
|
|
16
20
|
a11y: {
|
|
17
21
|
config: {
|
|
@@ -24,34 +28,65 @@ export default {
|
|
|
24
28
|
],
|
|
25
29
|
},
|
|
26
30
|
},
|
|
31
|
+
viewport: {
|
|
32
|
+
viewports: {
|
|
33
|
+
ViewportFull: {
|
|
34
|
+
name: "Viewport full size",
|
|
35
|
+
styles: {
|
|
36
|
+
width: "1024px",
|
|
37
|
+
height: "1500px",
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
defaultViewport: "ViewportFull",
|
|
42
|
+
},
|
|
27
43
|
},
|
|
28
44
|
} satisfies Meta
|
|
29
45
|
|
|
30
46
|
const CalendarPopoverExample = ({
|
|
31
47
|
children,
|
|
32
48
|
rowHeight = 300,
|
|
33
|
-
|
|
49
|
+
/** this is here as a convenient way to test overlap */
|
|
50
|
+
strategy = "fixed",
|
|
51
|
+
}: Partial<
|
|
52
|
+
CalendarPopoverProps & {
|
|
53
|
+
rowHeight: number
|
|
54
|
+
/** this is here as a convenient way to test overlap */
|
|
55
|
+
strategy?: "absolute" | "fixed"
|
|
56
|
+
}
|
|
57
|
+
>): JSX.Element => {
|
|
34
58
|
const [referenceElement, setReferenceElement] =
|
|
35
59
|
React.useState<HTMLDivElement | null>(null)
|
|
36
60
|
|
|
37
61
|
return (
|
|
38
62
|
<>
|
|
39
63
|
<div
|
|
64
|
+
className="bg-orange-300 inline-block"
|
|
40
65
|
ref={setReferenceElement}
|
|
41
|
-
style={{
|
|
42
|
-
|
|
66
|
+
style={{ marginBottom: `${rowHeight}px` }}
|
|
67
|
+
>
|
|
68
|
+
Reference element
|
|
69
|
+
</div>
|
|
43
70
|
<CalendarPopover
|
|
44
71
|
referenceElement={referenceElement}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
72
|
+
floatingOptions={{
|
|
73
|
+
strategy,
|
|
74
|
+
middleware: [
|
|
75
|
+
offset(15),
|
|
76
|
+
size({
|
|
77
|
+
apply({ availableHeight, availableWidth, elements }) {
|
|
78
|
+
Object.assign(elements.floating.style, {
|
|
79
|
+
maxHeight: `${Math.max(availableHeight - 25, 155)}px`,
|
|
80
|
+
maxWidth: `${availableWidth}px`,
|
|
81
|
+
})
|
|
51
82
|
},
|
|
52
|
-
},
|
|
83
|
+
}),
|
|
84
|
+
autoPlacement({
|
|
85
|
+
// This needs to be here for testing purposes as the default behaviour
|
|
86
|
+
// will cause overlapping calendars in the table
|
|
87
|
+
allowedPlacements: ["bottom-start"],
|
|
88
|
+
}),
|
|
53
89
|
],
|
|
54
|
-
placement: "top-start",
|
|
55
90
|
}}
|
|
56
91
|
>
|
|
57
92
|
{children}
|
|
@@ -73,13 +108,13 @@ const StickerSheetTemplate: StickerSheetStory = {
|
|
|
73
108
|
</StickerSheet.Row>
|
|
74
109
|
|
|
75
110
|
<StickerSheet.Row rowTitle="CalendarSingle">
|
|
76
|
-
<CalendarPopoverExample>
|
|
111
|
+
<CalendarPopoverExample rowHeight={350}>
|
|
77
112
|
<CalendarSingle selected={new Date("2022-02-19")} />
|
|
78
113
|
</CalendarPopoverExample>
|
|
79
114
|
</StickerSheet.Row>
|
|
80
115
|
|
|
81
116
|
<StickerSheet.Row rowTitle="CalendarRange">
|
|
82
|
-
<CalendarPopoverExample>
|
|
117
|
+
<CalendarPopoverExample rowHeight={350}>
|
|
83
118
|
<CalendarRange
|
|
84
119
|
selected={{
|
|
85
120
|
from: new Date("2022-02-19"),
|
|
@@ -90,8 +125,9 @@ const StickerSheetTemplate: StickerSheetStory = {
|
|
|
90
125
|
</StickerSheet.Row>
|
|
91
126
|
|
|
92
127
|
<StickerSheet.Row rowTitle="CalendarRange with divider">
|
|
93
|
-
<CalendarPopoverExample>
|
|
128
|
+
<CalendarPopoverExample rowHeight={350}>
|
|
94
129
|
<CalendarRange
|
|
130
|
+
data-testid="sb-final-calendar"
|
|
95
131
|
selected={{
|
|
96
132
|
from: new Date("2022-02-19"),
|
|
97
133
|
to: new Date("2022-03-04"),
|
|
@@ -118,3 +154,56 @@ export const StickerSheetRTL: StickerSheetStory = {
|
|
|
118
154
|
textDirection: "rtl",
|
|
119
155
|
},
|
|
120
156
|
}
|
|
157
|
+
|
|
158
|
+
export const StickerSheetResponsive: StickerSheetStory = {
|
|
159
|
+
name: "Sticker Sheet (Responsive)",
|
|
160
|
+
render: () => (
|
|
161
|
+
<>
|
|
162
|
+
<Text variant="intro-lede" classNameOverride="mb-12 ">
|
|
163
|
+
CalendarSingle scaled to availableHeight
|
|
164
|
+
</Text>
|
|
165
|
+
<div className="h-[250px] p-12 bg-purple-100 overflow-hidden relative">
|
|
166
|
+
<CalendarPopoverExample strategy="absolute">
|
|
167
|
+
<CalendarSingle selected={new Date("2022-02-19")} />
|
|
168
|
+
</CalendarPopoverExample>
|
|
169
|
+
</div>
|
|
170
|
+
<Text variant="intro-lede" classNameOverride="mb-12 ">
|
|
171
|
+
CalendarRange scaled to availableHeight
|
|
172
|
+
</Text>
|
|
173
|
+
<div className="h-[250px] p-12 bg-purple-100 overflow-hidden relative">
|
|
174
|
+
<CalendarPopoverExample strategy="absolute">
|
|
175
|
+
<CalendarRange
|
|
176
|
+
selected={{
|
|
177
|
+
from: new Date("2022-02-19"),
|
|
178
|
+
to: new Date("2022-03-04"),
|
|
179
|
+
}}
|
|
180
|
+
hasDivider
|
|
181
|
+
/>
|
|
182
|
+
</CalendarPopoverExample>
|
|
183
|
+
</div>
|
|
184
|
+
<Text variant="intro-lede" classNameOverride="mb-12 mt-24">
|
|
185
|
+
CalendarSingle scaled to availableWidth
|
|
186
|
+
</Text>
|
|
187
|
+
<div className="h-[250px] p-12 bg-purple-100 overflow-hidden relative w-[250px]">
|
|
188
|
+
<CalendarPopoverExample strategy="absolute">
|
|
189
|
+
<CalendarSingle selected={new Date("2022-03-19")} />
|
|
190
|
+
</CalendarPopoverExample>
|
|
191
|
+
</div>
|
|
192
|
+
<Text variant="intro-lede" classNameOverride="mb-12 mt-24">
|
|
193
|
+
CalendarRanger scaled to availableWidth
|
|
194
|
+
</Text>
|
|
195
|
+
<div className="h-[250px] p-12 bg-purple-100 overflow-hidden relative w-[250px]">
|
|
196
|
+
<CalendarPopoverExample strategy="absolute">
|
|
197
|
+
<CalendarRange
|
|
198
|
+
data-testid="sb-final-calendar"
|
|
199
|
+
selected={{
|
|
200
|
+
from: new Date("2022-02-19"),
|
|
201
|
+
to: new Date("2022-03-04"),
|
|
202
|
+
}}
|
|
203
|
+
hasDivider
|
|
204
|
+
/>
|
|
205
|
+
</CalendarPopoverExample>
|
|
206
|
+
</div>
|
|
207
|
+
</>
|
|
208
|
+
),
|
|
209
|
+
}
|
|
@@ -70,3 +70,17 @@ There are multiple props to disable days within the Calendar.
|
|
|
70
70
|
|
|
71
71
|
<Canvas of={DatePickerStories.DisabledDays} />
|
|
72
72
|
<Controls of={DatePickerStories.DisabledDays} />
|
|
73
|
+
|
|
74
|
+
### Responsive behaviour
|
|
75
|
+
|
|
76
|
+
To ensure calendar content is accessible across multiple viewports and satisfy the [content reflow](https://www.w3.org/WAI/WCAG21/Understanding/reflow.html) spec in WCAG guidelines, the `DatePicker`'s popover will scroll when there is not enough space available. The main case for this is to assist users on 400% zoom and ensure content is not visually lost below the fold.
|
|
77
|
+
|
|
78
|
+
<Canvas of={DatePickerStories.LimitedViewportHeight} />
|
|
79
|
+
|
|
80
|
+
This is determined by the [size](https://floating-ui.com/docs/size) middleware from the `floatingUI` library, which calculates and sets the available height and width based on the viewport and available whitespace.
|
|
81
|
+
|
|
82
|
+
<Canvas of={DatePickerStories.FullViewportHeight} />
|
|
83
|
+
|
|
84
|
+
The `DatePicker`'s popover will also re-adjust its position to the top if there is not enough space available below.
|
|
85
|
+
|
|
86
|
+
<Canvas of={DatePickerStories.AboveIfAvailable} />
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { useEffect, useState } from "react"
|
|
2
2
|
import { action } from "@storybook/addon-actions"
|
|
3
3
|
import { Meta, StoryObj } from "@storybook/react"
|
|
4
|
+
import { userEvent, within, expect } from "@storybook/test"
|
|
4
5
|
import Highlight from "react-highlight"
|
|
5
6
|
import { Button } from "~components/Button"
|
|
6
7
|
import { defaultMonthControls } from "~components/Calendar/_docs/controls/defaultMonthControls"
|
|
@@ -249,3 +250,118 @@ export const Validation: Story = {
|
|
|
249
250
|
export const DisabledDays: Story = {
|
|
250
251
|
parameters: { controls: { include: /^disabled/ } },
|
|
251
252
|
}
|
|
253
|
+
|
|
254
|
+
export const LimitedWindowWidth: Story = {
|
|
255
|
+
name: "At 400% window size",
|
|
256
|
+
parameters: {
|
|
257
|
+
controls: { disable: true },
|
|
258
|
+
viewport: {
|
|
259
|
+
viewports: {
|
|
260
|
+
ViewportAt400: {
|
|
261
|
+
name: "Viewport at 400%",
|
|
262
|
+
styles: {
|
|
263
|
+
width: "320px",
|
|
264
|
+
height: "350px",
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
},
|
|
268
|
+
defaultViewport: "ViewportAt400",
|
|
269
|
+
},
|
|
270
|
+
a11y: { disable: true }, // accessible label fix to be addressed in a separate PR
|
|
271
|
+
},
|
|
272
|
+
play: async ({ canvasElement }) => {
|
|
273
|
+
const canvas = within(canvasElement)
|
|
274
|
+
await userEvent.click(canvas.getByRole("button", { name: "Choose date" }))
|
|
275
|
+
await expect(canvas.getByRole("dialog")).toBeInTheDocument()
|
|
276
|
+
},
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
export const AboveIfAvailable: Story = {
|
|
280
|
+
name: "Limited viewport autoplacement above",
|
|
281
|
+
args: {
|
|
282
|
+
labelText: "Calendar with space above",
|
|
283
|
+
},
|
|
284
|
+
parameters: {
|
|
285
|
+
viewport: {
|
|
286
|
+
viewports: {
|
|
287
|
+
LimitedViewportAutoPlace: {
|
|
288
|
+
name: "Limited vertical space",
|
|
289
|
+
styles: {
|
|
290
|
+
width: "1024px",
|
|
291
|
+
height: "500px",
|
|
292
|
+
},
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
defaultViewport: "LimitedViewportAutoPlace",
|
|
296
|
+
},
|
|
297
|
+
a11y: { disable: true }, // accessible label fix to be addressed in a separate PR
|
|
298
|
+
},
|
|
299
|
+
decorators: [
|
|
300
|
+
Story => (
|
|
301
|
+
<div className="mt-[350px]">
|
|
302
|
+
<Story />
|
|
303
|
+
</div>
|
|
304
|
+
),
|
|
305
|
+
],
|
|
306
|
+
play: async ({ canvasElement }) => {
|
|
307
|
+
const canvas = within(canvasElement)
|
|
308
|
+
await userEvent.click(canvas.getByRole("button", { name: "Choose date" }))
|
|
309
|
+
await expect(canvas.getByRole("dialog")).toBeInTheDocument()
|
|
310
|
+
},
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
export const LimitedViewportHeight: Story = {
|
|
314
|
+
name: "Limited viewport height",
|
|
315
|
+
args: {
|
|
316
|
+
labelText: "Calendar with reduced space below",
|
|
317
|
+
},
|
|
318
|
+
parameters: {
|
|
319
|
+
viewport: {
|
|
320
|
+
viewports: {
|
|
321
|
+
LimitedViewportHeight: {
|
|
322
|
+
name: "Limited vertical space",
|
|
323
|
+
styles: {
|
|
324
|
+
width: "1024px",
|
|
325
|
+
height: "300px",
|
|
326
|
+
},
|
|
327
|
+
},
|
|
328
|
+
},
|
|
329
|
+
defaultViewport: "LimitedViewportHeight",
|
|
330
|
+
},
|
|
331
|
+
a11y: { disable: true }, // accessible label fix to be addressed in a separate PR
|
|
332
|
+
},
|
|
333
|
+
decorators: [
|
|
334
|
+
Story => (
|
|
335
|
+
<div className="mb-[150px]">
|
|
336
|
+
<Story />
|
|
337
|
+
</div>
|
|
338
|
+
),
|
|
339
|
+
],
|
|
340
|
+
play: async ({ canvasElement }) => {
|
|
341
|
+
const canvas = within(canvasElement)
|
|
342
|
+
await userEvent.click(canvas.getByRole("button", { name: "Choose date" }))
|
|
343
|
+
await expect(canvas.getByRole("dialog")).toBeInTheDocument()
|
|
344
|
+
},
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
export const FullViewportHeight: Story = {
|
|
348
|
+
name: "Full viewport height",
|
|
349
|
+
args: {
|
|
350
|
+
labelText: "Calendar with full space below",
|
|
351
|
+
},
|
|
352
|
+
decorators: [
|
|
353
|
+
Story => (
|
|
354
|
+
<div className="mb-[350px]">
|
|
355
|
+
<Story />
|
|
356
|
+
</div>
|
|
357
|
+
),
|
|
358
|
+
],
|
|
359
|
+
play: async ({ canvasElement }) => {
|
|
360
|
+
const canvas = within(canvasElement)
|
|
361
|
+
await userEvent.click(canvas.getByRole("button", { name: "Choose date" }))
|
|
362
|
+
await expect(canvas.getByRole("dialog")).toBeInTheDocument()
|
|
363
|
+
},
|
|
364
|
+
parameters: {
|
|
365
|
+
a11y: { disable: true }, // accessible label fix to be addressed in a separate PR
|
|
366
|
+
},
|
|
367
|
+
}
|
|
@@ -23,3 +23,8 @@ Date range picker form field.
|
|
|
23
23
|
|
|
24
24
|
<Canvas of={DateRangePickerStories.Playground} />
|
|
25
25
|
<Controls of={DateRangePickerStories.Playground} />
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
## Responsive behaviour
|
|
29
|
+
|
|
30
|
+
As both the `DatePicker` and `DateRangePicker` use the `CalendarPopover` component under the hood, they share the same responsive behaviour. You can read more on this [here](/docs/components-date-controls-datepicker--docs#responsive-behaviour).
|