@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.
Files changed (182) hide show
  1. package/dist/cjs/Calendar/CalendarPopover/CalendarPopover.cjs +31 -20
  2. package/dist/cjs/Calendar/CalendarPopover/CalendarPopover.module.scss.cjs +1 -1
  3. package/dist/cjs/Heading/Heading.module.scss.cjs +1 -1
  4. package/dist/esm/Avatar/Avatar.module.scss.mjs +1 -1
  5. package/dist/esm/AvatarGroup/AvatarGroup.module.scss.mjs +1 -1
  6. package/dist/esm/Badge/Badge.module.scss.mjs +1 -1
  7. package/dist/esm/Brand/Brand.module.scss.mjs +1 -1
  8. package/dist/esm/BrandMoment/BrandMoment.module.scss.mjs +1 -1
  9. package/dist/esm/Button/GenericButton/GenericButton.module.scss.mjs +1 -1
  10. package/dist/esm/ButtonGroup/ButtonGroup.module.scss.mjs +1 -1
  11. package/dist/esm/Calendar/CalendarPopover/CalendarPopover.mjs +31 -20
  12. package/dist/esm/Calendar/CalendarPopover/CalendarPopover.module.scss.mjs +2 -2
  13. package/dist/esm/Calendar/CalendarRange/CalendarRange.module.scss.mjs +1 -1
  14. package/dist/esm/Calendar/CalendarSingle/CalendarSingle.module.scss.mjs +1 -1
  15. package/dist/esm/Calendar/LegacyCalendarRange/LegacyCalendarRange.module.scss.mjs +1 -1
  16. package/dist/esm/Calendar/baseCalendarClassNames.module.scss.mjs +1 -1
  17. package/dist/esm/Card/Card.module.scss.mjs +1 -1
  18. package/dist/esm/Checkbox/Checkbox/Checkbox.module.scss.mjs +1 -1
  19. package/dist/esm/Checkbox/CheckboxField/CheckboxField.module.scss.mjs +1 -1
  20. package/dist/esm/Checkbox/CheckboxGroup/CheckboxGroup.module.scss.mjs +1 -1
  21. package/dist/esm/ClearButton/ClearButton.module.scss.mjs +1 -1
  22. package/dist/esm/Collapsible/Collapsible/Collapsible.module.scss.mjs +1 -1
  23. package/dist/esm/Collapsible/CollapsibleGroup/CollapsibleGroup.module.scss.mjs +1 -1
  24. package/dist/esm/Collapsible/ExpertAdviceCollapsible/ExpertAdviceCollapsible.module.scss.mjs +1 -1
  25. package/dist/esm/Container/Container.module.scss.mjs +1 -1
  26. package/dist/esm/Content/Content.module.scss.mjs +1 -1
  27. package/dist/esm/DateInput/DateInput/DateInput.module.scss.mjs +1 -1
  28. package/dist/esm/DateInput/DateInputDescription/DateInputDescription.module.scss.mjs +1 -1
  29. package/dist/esm/DateInput/DateInputWithIconButton/DateInputWithIconButton.module.scss.mjs +1 -1
  30. package/dist/esm/DatePicker/subcomponents/DateInputField/DateInputField.module.scss.mjs +1 -1
  31. package/dist/esm/DateRangePicker/DateRangePicker.module.scss.mjs +1 -1
  32. package/dist/esm/Divider/Divider.module.scss.mjs +1 -1
  33. package/dist/esm/EmptyState/EmptyState.module.scss.mjs +1 -1
  34. package/dist/esm/ErrorPage/ErrorPage.module.scss.mjs +1 -1
  35. package/dist/esm/FieldGroup/FieldGroup.module.scss.mjs +1 -1
  36. package/dist/esm/FieldMessage/FieldMessage.module.scss.mjs +1 -1
  37. package/dist/esm/Filter/Filter/subcomponents/FilterContents/FilterContents.module.scss.mjs +1 -1
  38. package/dist/esm/Filter/Filter/subcomponents/FilterPopover/FilterPopover.module.scss.mjs +1 -1
  39. package/dist/esm/Filter/FilterBar/FilterBar.module.scss.mjs +1 -1
  40. package/dist/esm/Filter/FilterBar/subcomponents/ClearAllButton/ClearAllButton.module.scss.mjs +1 -1
  41. package/dist/esm/Filter/FilterButton/FilterButton/FilterButton.module.scss.mjs +1 -1
  42. package/dist/esm/Filter/FilterButton/subcomponents/FilterButtonBase/FilterButtonBase.module.scss.mjs +1 -1
  43. package/dist/esm/Filter/FilterDatePicker/subcomponents/DateInputField/DateInputField.module.scss.mjs +1 -1
  44. package/dist/esm/Filter/FilterDatePicker/subcomponents/FilterDatePickerField/FilterDatePickerField.module.scss.mjs +1 -1
  45. package/dist/esm/Filter/FilterDateRangePicker/subcomponents/DateRangeDisplayLabel/DateRangeDisplayLabel.module.scss.mjs +1 -1
  46. package/dist/esm/Filter/FilterDateRangePicker/subcomponents/DateRangeInputField/DateRangeInputField.module.scss.mjs +1 -1
  47. package/dist/esm/Filter/FilterDateRangePicker/subcomponents/DateRangeValidationMessage/DateRangeValidationMessage.module.scss.mjs +1 -1
  48. package/dist/esm/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/FilterDateRangePickerField.module.scss.mjs +1 -1
  49. package/dist/esm/Filter/FilterMultiSelect/subcomponents/ListBox/ListBox.module.scss.mjs +1 -1
  50. package/dist/esm/Filter/FilterMultiSelect/subcomponents/ListBoxSection/ListBoxSection.module.scss.mjs +1 -1
  51. package/dist/esm/Filter/FilterMultiSelect/subcomponents/LoadMoreButton/LoadMoreButton.module.scss.mjs +1 -1
  52. package/dist/esm/Filter/FilterMultiSelect/subcomponents/MenuLayout/MenuFooter/MenuFooter.module.scss.mjs +1 -1
  53. package/dist/esm/Filter/FilterMultiSelect/subcomponents/MenuLayout/MenuLoadingSkeleton/MenuLoadingSkeleton.module.scss.mjs +1 -1
  54. package/dist/esm/Filter/FilterMultiSelect/subcomponents/MenuPopup/MenuPopup.module.scss.mjs +1 -1
  55. package/dist/esm/Filter/FilterMultiSelect/subcomponents/MultiSelectOption/MultiSelectOption.module.scss.mjs +1 -1
  56. package/dist/esm/Filter/FilterMultiSelect/subcomponents/NoResults/NoResults.module.scss.mjs +1 -1
  57. package/dist/esm/Filter/FilterMultiSelect/subcomponents/SearchInput/SearchInput.module.scss.mjs +1 -1
  58. package/dist/esm/Filter/FilterMultiSelect/subcomponents/SectionDivider/SectionDivider.module.scss.mjs +1 -1
  59. package/dist/esm/Filter/FilterMultiSelect/subcomponents/SelectionControlButton/SelectionControlButton.module.scss.mjs +1 -1
  60. package/dist/esm/Filter/FilterSelect/FilterSelect.module.scss.mjs +1 -1
  61. package/dist/esm/GuidanceBlock/GuidanceBlock.module.scss.mjs +1 -1
  62. package/dist/esm/Heading/Heading.module.scss.mjs +2 -2
  63. package/dist/esm/Icon/subcomponents/SVG/SVG.module.scss.mjs +1 -1
  64. package/dist/esm/Illustration/subcomponents/Base/Base.module.scss.mjs +1 -1
  65. package/dist/esm/Input/Input/Input.module.scss.mjs +1 -1
  66. package/dist/esm/Input/InputRange/InputRange.module.scss.mjs +1 -1
  67. package/dist/esm/Input/InputSearch/InputSearch.module.scss.mjs +1 -1
  68. package/dist/esm/Label/Label.module.scss.mjs +1 -1
  69. package/dist/esm/LabelledMessage/LabelledMessage.module.scss.mjs +1 -1
  70. package/dist/esm/LikertScaleLegacy/LikertScaleLegacy.module.scss.mjs +1 -1
  71. package/dist/esm/Loading/LoadingGraphic/LoadingGraphic.module.scss.mjs +1 -1
  72. package/dist/esm/Loading/LoadingHeading/LoadingHeading.module.scss.mjs +1 -1
  73. package/dist/esm/Loading/LoadingInput/LoadingInput.module.scss.mjs +1 -1
  74. package/dist/esm/Loading/LoadingParagraph/LoadingParagraph.module.scss.mjs +1 -1
  75. package/dist/esm/Loading/LoadingSpinner/LoadingSpinner.module.scss.mjs +1 -1
  76. package/dist/esm/Menu/subcomponents/MenuDropdown/MenuDropdown.module.scss.mjs +1 -1
  77. package/dist/esm/Menu/subcomponents/MenuHeading/MenuHeading.module.scss.mjs +1 -1
  78. package/dist/esm/Menu/subcomponents/MenuItem/MenuItem.module.scss.mjs +1 -1
  79. package/dist/esm/Menu/subcomponents/MenuList/MenuList.module.scss.mjs +1 -1
  80. package/dist/esm/Menu/subcomponents/StatelessMenu/StatelessMenu.module.scss.mjs +1 -1
  81. package/dist/esm/Modal/ConfirmationModal/ConfirmationModal.module.scss.mjs +1 -1
  82. package/dist/esm/Modal/ContextModal/ContextModal.module.scss.mjs +1 -1
  83. package/dist/esm/Modal/GenericModal/GenericModal.module.scss.mjs +1 -1
  84. package/dist/esm/Modal/GenericModal/subcomponents/ModalAccessibleDescription/ModalAccessibleDescription.module.scss.mjs +1 -1
  85. package/dist/esm/Modal/GenericModal/subcomponents/ModalAccessibleLabel/ModalAccessibleLabel.module.scss.mjs +1 -1
  86. package/dist/esm/Modal/GenericModal/subcomponents/ModalBody/ModalBody.module.scss.mjs +1 -1
  87. package/dist/esm/Modal/GenericModal/subcomponents/ModalFooter/ModalFooter.module.scss.mjs +1 -1
  88. package/dist/esm/Modal/GenericModal/subcomponents/ModalHeader/ModalHeader.module.scss.mjs +1 -1
  89. package/dist/esm/Modal/InputEditModal/InputEditModal.module.scss.mjs +1 -1
  90. package/dist/esm/MultiSelect/MultiSelect.module.scss.mjs +1 -1
  91. package/dist/esm/MultiSelect/subcomponents/Checkbox/Checkbox.module.scss.mjs +1 -1
  92. package/dist/esm/MultiSelect/subcomponents/MultiSelectOptionField/MultiSelectOptionField.module.scss.mjs +1 -1
  93. package/dist/esm/MultiSelect/subcomponents/MultiSelectOptions/MultiSelectOptions.module.scss.mjs +1 -1
  94. package/dist/esm/MultiSelect/subcomponents/MultiSelectToggle/MultiSelectToggle.module.scss.mjs +1 -1
  95. package/dist/esm/MultiSelect/subcomponents/Popover/Popover.module.scss.mjs +1 -1
  96. package/dist/esm/Notification/ToastNotification/ToastNotificationsList/ToastNotificationsList.module.scss.mjs +1 -1
  97. package/dist/esm/Notification/subcomponents/GenericNotification/GenericNotification.module.scss.mjs +1 -1
  98. package/dist/esm/Pagination/Pagination.module.scss.mjs +1 -1
  99. package/dist/esm/Pagination/subcomponents/TruncateIndicator/TruncateIndicator.module.scss.mjs +1 -1
  100. package/dist/esm/Popover/Popover.module.scss.mjs +1 -1
  101. package/dist/esm/ProgressBar/ProgressBar.module.scss.mjs +1 -1
  102. package/dist/esm/ProgressBar/subcomponents/Label/Label.module.scss.mjs +1 -1
  103. package/dist/esm/Radio/Radio/Radio.module.scss.mjs +1 -1
  104. package/dist/esm/Radio/RadioField/RadioField.module.scss.mjs +1 -1
  105. package/dist/esm/Radio/RadioGroup/RadioGroup.module.scss.mjs +1 -1
  106. package/dist/esm/RichTextEditor/EditableRichTextContent/EditableRichTextContent.module.scss.mjs +1 -1
  107. package/dist/esm/RichTextEditor/RichTextContent/RichTextContent.module.scss.mjs +1 -1
  108. package/dist/esm/RichTextEditor/RichTextEditor/RichTextEditor.module.scss.mjs +1 -1
  109. package/dist/esm/RichTextEditor/RichTextEditor/subcomponents/ToggleIconButton/ToggleIconButton.module.scss.mjs +1 -1
  110. package/dist/esm/RichTextEditor/RichTextEditor/subcomponents/Toolbar/Toolbar.module.scss.mjs +1 -1
  111. package/dist/esm/RichTextEditor/RichTextEditor/subcomponents/ToolbarSection/ToolbarSection.module.scss.mjs +1 -1
  112. package/dist/esm/RichTextEditor/utils/plugins/LinkManager/components/LinkPopover/LinkPopover.module.scss.mjs +1 -1
  113. package/dist/esm/SearchField/SearchField.module.scss.mjs +1 -1
  114. package/dist/esm/Select/Select.module.scss.mjs +1 -1
  115. package/dist/esm/Skirt/Skirt.module.scss.mjs +1 -1
  116. package/dist/esm/Skirt/subcomponents/SkirtCard/SkirtCard.module.scss.mjs +1 -1
  117. package/dist/esm/Slider/Slider.module.scss.mjs +1 -1
  118. package/dist/esm/SplitButton/SplitButton.module.scss.mjs +1 -1
  119. package/dist/esm/SplitButton/subcomponents/ActionButton/ActionButton.module.scss.mjs +1 -1
  120. package/dist/esm/SplitButton/subcomponents/BaseButton/BaseButton.module.scss.mjs +1 -1
  121. package/dist/esm/SplitButton/subcomponents/DropdownButton/DropdownButton.module.scss.mjs +1 -1
  122. package/dist/esm/Table/Table.module.scss.mjs +1 -1
  123. package/dist/esm/Tabs/subcomponents/Tab.module.scss.mjs +1 -1
  124. package/dist/esm/Tabs/subcomponents/TabList.module.scss.mjs +1 -1
  125. package/dist/esm/Tag/Tag.module.scss.mjs +1 -1
  126. package/dist/esm/Text/Text.module.scss.mjs +1 -1
  127. package/dist/esm/TextArea/TextArea.module.scss.mjs +1 -1
  128. package/dist/esm/TextAreaField/TextAreaField.module.scss.mjs +1 -1
  129. package/dist/esm/TextField/TextField.module.scss.mjs +1 -1
  130. package/dist/esm/Tile/MultiActionTile/MultiActionTile.module.scss.mjs +1 -1
  131. package/dist/esm/Tile/TileGrid/TileGrid.module.scss.mjs +1 -1
  132. package/dist/esm/Tile/subcomponents/GenericTile/GenericTile.module.scss.mjs +1 -1
  133. package/dist/esm/TimeField/TimeField.module.scss.mjs +1 -1
  134. package/dist/esm/TimeField/subcomponents/TimeSegment/TimeSegment.module.scss.mjs +1 -1
  135. package/dist/esm/TitleBlockZen/TitleBlockZen.module.scss.mjs +1 -1
  136. package/dist/esm/TitleBlockZen/subcomponents/MainActions.module.scss.mjs +1 -1
  137. package/dist/esm/TitleBlockZen/subcomponents/MobileActions.module.scss.mjs +1 -1
  138. package/dist/esm/TitleBlockZen/subcomponents/NavigationTabs.module.scss.mjs +1 -1
  139. package/dist/esm/TitleBlockZen/subcomponents/TitleBlockMenuItem.module.scss.mjs +1 -1
  140. package/dist/esm/TitleBlockZen/subcomponents/Toolbar.module.scss.mjs +1 -1
  141. package/dist/esm/ToggleSwitch/ToggleSwitch/ToggleSwitch.module.scss.mjs +1 -1
  142. package/dist/esm/ToggleSwitch/ToggleSwitchField/ToggleSwitchField.module.scss.mjs +1 -1
  143. package/dist/esm/Tooltip/Tooltip.module.scss.mjs +1 -1
  144. package/dist/esm/VisuallyHidden/VisuallyHidden.module.scss.mjs +1 -1
  145. package/dist/esm/Well/Well.module.scss.mjs +1 -1
  146. package/dist/esm/Workflow/subcomponents/Footer/components/FooterActions/FooterActions.module.scss.mjs +1 -1
  147. package/dist/esm/Workflow/subcomponents/Footer/components/ProgressStepper/ProgressStepper.module.scss.mjs +1 -1
  148. package/dist/esm/Workflow/subcomponents/Footer/components/Root/FooterRoot.module.scss.mjs +1 -1
  149. package/dist/esm/Workflow/subcomponents/Header/components/Actions/Actions.module.scss.mjs +1 -1
  150. package/dist/esm/Workflow/subcomponents/Header/components/Branding/Branding.module.scss.mjs +1 -1
  151. package/dist/esm/Workflow/subcomponents/Header/components/Root/Root.module.scss.mjs +1 -1
  152. package/dist/esm/Workflow/subcomponents/Header/components/Titles/Titles.module.scss.mjs +1 -1
  153. package/dist/esm/Workflow/subcomponents/Main/Main.module.scss.mjs +1 -1
  154. package/dist/esm/Workflow/subcomponents/Wrapper/Wrapper.module.scss.mjs +1 -1
  155. package/dist/esm/__future__/Select/Select.module.scss.mjs +1 -1
  156. package/dist/esm/__future__/Select/subcomponents/ListBox/ListBox.module.scss.mjs +1 -1
  157. package/dist/esm/__future__/Select/subcomponents/ListBoxSection/ListBoxSection.module.scss.mjs +1 -1
  158. package/dist/esm/__future__/Select/subcomponents/Option/Option.module.scss.mjs +1 -1
  159. package/dist/esm/__future__/Select/subcomponents/SectionDivider/SectionDivider.module.scss.mjs +1 -1
  160. package/dist/esm/__future__/Select/subcomponents/SelectPopoverContents/SelectPopoverContents.module.scss.mjs +1 -1
  161. package/dist/esm/__future__/Select/subcomponents/SelectToggle/SelectToggle.module.scss.mjs +1 -1
  162. package/dist/esm/__future__/Tag/RemovableTag/RemovableTag.module.scss.mjs +1 -1
  163. package/dist/esm/__future__/Tag/RemovableTag/subcomponents/RemoveButton.module.scss.mjs +1 -1
  164. package/dist/esm/__future__/Tag/Tag/Tag.module.scss.mjs +1 -1
  165. package/dist/esm/__future__/Workflow/subcomponents/Footer/components/FooterActions/FooterActions.module.scss.mjs +1 -1
  166. package/dist/esm/__future__/Workflow/subcomponents/Footer/components/ProgressStepper/ProgressStepper.module.scss.mjs +1 -1
  167. package/dist/esm/__future__/Workflow/subcomponents/Footer/components/Root/FooterRoot.module.scss.mjs +1 -1
  168. package/dist/esm/__future__/Workflow/subcomponents/Header/components/Actions/Actions.module.scss.mjs +1 -1
  169. package/dist/esm/__future__/Workflow/subcomponents/Header/components/Branding/Branding.module.scss.mjs +1 -1
  170. package/dist/esm/__future__/Workflow/subcomponents/Header/components/Root/Root.module.scss.mjs +1 -1
  171. package/dist/esm/__future__/Workflow/subcomponents/Header/components/Titles/Titles.module.scss.mjs +1 -1
  172. package/dist/esm/__future__/Workflow/subcomponents/Main/Main.module.scss.mjs +1 -1
  173. package/dist/esm/__future__/Workflow/subcomponents/Wrapper/Wrapper.module.scss.mjs +1 -1
  174. package/dist/types/Calendar/CalendarPopover/CalendarPopover.d.ts +3 -3
  175. package/package.json +26 -28
  176. package/src/Calendar/CalendarPopover/CalendarPopover.module.scss +8 -1
  177. package/src/Calendar/CalendarPopover/CalendarPopover.tsx +38 -24
  178. package/src/Calendar/CalendarPopover/_docs/CalendarPopover.stickersheet.stories.tsx +104 -15
  179. package/src/DatePicker/_docs/DatePicker.mdx +14 -0
  180. package/src/DatePicker/_docs/DatePicker.stories.tsx +116 -0
  181. package/src/DateRangePicker/_docs/DateRangePicker.mdx +5 -0
  182. 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: { disable: false },
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
- }: Partial<CalendarPopoverProps & { rowHeight: number }>): JSX.Element => {
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={{ paddingBottom: "24px", marginTop: `${rowHeight}px` }}
42
- />
66
+ style={{ marginBottom: `${rowHeight}px` }}
67
+ >
68
+ Reference element
69
+ </div>
43
70
  <CalendarPopover
44
71
  referenceElement={referenceElement}
45
- popperOptions={{
46
- modifiers: [
47
- {
48
- name: "offset",
49
- options: {
50
- offset: [24, 0],
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).
@@ -1,5 +1,6 @@
1
1
  @import "~@kaizen/design-tokens/sass/color";
2
2
  @import "~@kaizen/design-tokens/sass/typography";
3
+ @import "../../styles/foundation/_layers.css";
3
4
 
4
5
  @layer reset {
5
6
  .heading {