@kaizen/components 1.52.1 → 1.54.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.
Files changed (228) hide show
  1. package/dist/cjs/Calendar/CalendarRange/CalendarRange.cjs +0 -2
  2. package/dist/cjs/Calendar/CalendarSingle/CalendarSingle.cjs +3 -5
  3. package/dist/cjs/DatePicker/DatePicker.cjs +8 -1
  4. package/dist/cjs/DatePicker/utils/getLocale.cjs +96 -3
  5. package/dist/cjs/DatePicker/utils/validateDate.cjs +28 -2
  6. package/dist/cjs/Filter/FilterBar/subcomponents/AddFiltersMenu/AddFiltersMenu.cjs +8 -1
  7. package/dist/cjs/Filter/FilterBar/subcomponents/ClearAllButton/ClearAllButton.cjs +14 -2
  8. package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarDatePicker/FilterBarDatePicker.cjs +1 -0
  9. package/dist/cjs/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.cjs +10 -1
  10. package/dist/cjs/Filter/FilterDatePicker/subcomponents/DateInputField/DateInputField.cjs +8 -1
  11. package/dist/cjs/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/FilterDateRangePickerField.cjs +5 -1
  12. package/dist/cjs/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/hooks/useEndDateValidation.cjs +1 -0
  13. package/dist/cjs/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/hooks/useStartDateValidation.cjs +1 -0
  14. package/dist/cjs/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/utils/validateEndDateBeforeStartDate.cjs +16 -1
  15. package/dist/esm/Calendar/CalendarRange/CalendarRange.mjs +0 -2
  16. package/dist/esm/Calendar/CalendarSingle/CalendarSingle.mjs +3 -5
  17. package/dist/esm/DatePicker/DatePicker.mjs +8 -1
  18. package/dist/esm/DatePicker/utils/getLocale.mjs +97 -4
  19. package/dist/esm/DatePicker/utils/validateDate.mjs +22 -2
  20. package/dist/esm/Filter/FilterBar/subcomponents/AddFiltersMenu/AddFiltersMenu.mjs +8 -1
  21. package/dist/esm/Filter/FilterBar/subcomponents/ClearAllButton/ClearAllButton.mjs +14 -2
  22. package/dist/esm/Filter/FilterBar/subcomponents/FilterBarDatePicker/FilterBarDatePicker.mjs +1 -0
  23. package/dist/esm/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.mjs +10 -1
  24. package/dist/esm/Filter/FilterDatePicker/subcomponents/DateInputField/DateInputField.mjs +8 -1
  25. package/dist/esm/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/FilterDateRangePickerField.mjs +5 -1
  26. package/dist/esm/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/hooks/useEndDateValidation.mjs +1 -0
  27. package/dist/esm/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/hooks/useStartDateValidation.mjs +1 -0
  28. package/dist/esm/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/utils/validateEndDateBeforeStartDate.mjs +10 -1
  29. package/dist/styles.css +2 -2
  30. package/dist/types/AvatarGroup/_docs/example-data.d.ts +8 -0
  31. package/dist/types/BrandMoment/_docs/ExampleHeaders.d.ts +3 -0
  32. package/dist/types/Calendar/_docs/controls/defaultMonthControls.d.ts +2 -0
  33. package/dist/types/Calendar/_docs/controls/weekStartsOnControls.d.ts +2 -0
  34. package/dist/types/Container/Container.d.ts +1 -1
  35. package/dist/types/Content/Content.d.ts +1 -1
  36. package/dist/types/DateInput/DateInput/DateInput.d.ts +1 -1
  37. package/dist/types/DatePicker/DatePicker.d.ts +3 -3
  38. package/dist/types/DatePicker/_docs/controls/datePickerLocaleControls.d.ts +2 -0
  39. package/dist/types/DatePicker/_docs/controls/disabledDayMatchersControls.d.ts +2 -0
  40. package/dist/types/DatePicker/subcomponents/DateInputField/DateInputField.d.ts +1 -1
  41. package/dist/types/DatePicker/types.d.ts +2 -1
  42. package/dist/types/DatePicker/utils/getLocale.d.ts +1 -2
  43. package/dist/types/DateRangePicker/DateRangePicker.d.ts +2 -2
  44. package/dist/types/Filter/FilterBar/context/types.d.ts +28 -0
  45. package/dist/types/Filter/FilterButton/subcomponents/FilterButtonBase/FilterButtonBase.d.ts +1 -1
  46. package/dist/types/Filter/FilterDatePicker/_docs/controls/disabledDaysControls.d.ts +2 -0
  47. package/dist/types/Filter/FilterDatePicker/_docs/controls/validationControls.d.ts +2 -0
  48. package/dist/types/Filter/FilterDatePicker/subcomponents/DateInputField/DateInputField.d.ts +1 -1
  49. package/dist/types/Filter/FilterDateRangePicker/_docs/controls/disabledDaysControls.d.ts +2 -0
  50. package/dist/types/Filter/FilterDateRangePicker/_docs/controls/validationControls.d.ts +2 -0
  51. package/dist/types/Filter/FilterMultiSelect/_docs/MockData.d.ts +10 -0
  52. package/dist/types/Filter/FilterSelect/_docs/mockData.d.ts +6 -0
  53. package/dist/types/Filter/_docs/controls/renderTriggerControls.d.ts +2 -0
  54. package/dist/types/Menu/_docs/MenuContentExample.d.ts +8 -0
  55. package/dist/types/Menu/_docs/examples.d.ts +11 -0
  56. package/dist/types/Modal/_docs/controls.d.ts +11 -0
  57. package/dist/types/MultiSelect/MultiSelect.d.ts +23 -0
  58. package/dist/types/MultiSelect/subcomponents/MultiSelectOptions/MultiSelectOptions.d.ts +13 -0
  59. package/dist/types/Select/Select.d.ts +3 -3
  60. package/dist/types/Workflow/_docs/controls/controls.d.ts +2 -0
  61. package/dist/types/Workflow/_docs/controls/index.d.ts +1 -0
  62. package/dist/types/__future__/Select/Select.d.ts +2 -2
  63. package/dist/types/__future__/Select/_docs/mockData.d.ts +6 -0
  64. package/dist/types/__future__/Select/subcomponents/SelectToggle/SelectToggle.d.ts +2 -2
  65. package/dist/types/__future__/Select/types.d.ts +22 -0
  66. package/dist/types/__future__/Workflow/_docs/controls/controls.d.ts +2 -0
  67. package/dist/types/__future__/Workflow/_docs/controls/index.d.ts +1 -0
  68. package/dist/types/__overlays__/Tooltip/v1/utils/isSemanticElement.d.ts +2 -2
  69. package/dist/types/utils/getNodeText.d.ts +2 -1
  70. package/locales/en.json +40 -0
  71. package/package.json +3 -3
  72. package/src/Avatar/_docs/Avatar.mdx +1 -1
  73. package/src/AvatarGroup/_docs/AvatarGroup.mdx +1 -1
  74. package/src/Badge/_docs/Badge.mdx +1 -1
  75. package/src/Brand/_docs/Brand.mdx +1 -1
  76. package/src/BrandMoment/_docs/BrandMoment.mdx +1 -1
  77. package/src/Button/Button/_docs/Button.mdx +1 -1
  78. package/src/Button/IconButton/_docs/IconButton.mdx +1 -1
  79. package/src/ButtonGroup/_docs/ButtonGroup.mdx +1 -1
  80. package/src/Calendar/CalendarRange/CalendarRange.tsx +0 -2
  81. package/src/Calendar/CalendarRange/_docs/CalendarRange.mdx +1 -1
  82. package/src/Calendar/CalendarSingle/CalendarSingle.tsx +1 -2
  83. package/src/Calendar/CalendarSingle/_docs/CalendarSingle.mdx +1 -1
  84. package/src/Card/_docs/Card.mdx +1 -1
  85. package/src/Checkbox/Checkbox/_docs/Checkbox.mdx +1 -1
  86. package/src/Checkbox/CheckboxField/_docs/CheckboxField.mdx +1 -1
  87. package/src/Checkbox/CheckboxGroup/_docs/CheckboxGroup.mdx +1 -1
  88. package/src/Collapsible/Collapsible/_docs/Collapsible.mdx +1 -1
  89. package/src/Collapsible/CollapsibleGroup/_docs/CollapsibleGroup.mdx +1 -1
  90. package/src/Collapsible/ExpertAdviceCollapsible/_docs/ExpertAdviceCollapsible.mdx +1 -1
  91. package/src/Container/_docs/Container.mdx +1 -1
  92. package/src/Content/_docs/Content.mdx +1 -1
  93. package/src/DateInput/DateInputDescription/DateInputDescription.spec.tsx +26 -18
  94. package/src/DatePicker/DatePicker.spec.tsx +100 -69
  95. package/src/DatePicker/DatePicker.tsx +15 -7
  96. package/src/DatePicker/_docs/DatePicker.mdx +1 -3
  97. package/src/DatePicker/_docs/DatePicker.stickersheet.stories.tsx +57 -21
  98. package/src/DatePicker/_docs/DatePicker.stories.tsx +2 -3
  99. package/src/DatePicker/_docs/controls/datePickerLocaleControls.ts +8 -2
  100. package/src/DatePicker/_docs/getLocale.stickersheet.stories.tsx +49 -0
  101. package/src/DatePicker/subcomponents/DateInputField/DateInputField.spec.tsx +49 -36
  102. package/src/DatePicker/types.ts +2 -1
  103. package/src/DatePicker/utils/getLocale.spec.ts +2 -2
  104. package/src/DatePicker/utils/getLocale.ts +141 -6
  105. package/src/DatePicker/utils/validateDate.spec.ts +40 -16
  106. package/src/DatePicker/utils/{validateDate.ts → validateDate.tsx} +24 -4
  107. package/src/DateRangePicker/DateRangePicker.tsx +2 -2
  108. package/src/DateRangePicker/_docs/DateRangePicker.mdx +1 -1
  109. package/src/Divider/_docs/Divider.mdx +1 -1
  110. package/src/EmptyState/_docs/EmptyState.mdx +1 -1
  111. package/src/ErrorPage/_docs/ErrorPage.mdx +1 -1
  112. package/src/FieldGroup/_docs/FieldGroup.mdx +1 -1
  113. package/src/FieldMessage/_docs/FieldMessage.mdx +1 -1
  114. package/src/Filter/Filter/_docs/Filter.mdx +1 -1
  115. package/src/Filter/FilterBar/FilterBar.spec.tsx +56 -25
  116. package/src/Filter/FilterBar/_docs/FilterBar.mdx +1 -1
  117. package/src/Filter/FilterBar/subcomponents/AddFiltersMenu/AddFiltersMenu.spec.tsx +21 -13
  118. package/src/Filter/FilterBar/subcomponents/AddFiltersMenu/AddFiltersMenu.tsx +11 -1
  119. package/src/Filter/FilterBar/subcomponents/ClearAllButton/ClearAllButton.tsx +17 -2
  120. package/src/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.spec.tsx +17 -8
  121. package/src/Filter/FilterBar/subcomponents/FilterBarDatePicker/FilterBarDatePicker.spec.tsx +37 -23
  122. package/src/Filter/FilterBar/subcomponents/FilterBarDateRangePicker/FilterBarDateRangePicker.spec.tsx +35 -23
  123. package/src/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.spec.tsx +42 -26
  124. package/src/Filter/FilterBar/subcomponents/FilterBarSelect/FilterBarSelect.spec.tsx +37 -24
  125. package/src/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.spec.tsx +12 -12
  126. package/src/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.tsx +15 -2
  127. package/src/Filter/FilterButton/_docs/filter-buttons.mdx +1 -1
  128. package/src/Filter/FilterDatePicker/FilterDatePicker.spec.tsx +21 -16
  129. package/src/Filter/FilterDatePicker/_docs/FilterDatePicker.mdx +1 -1
  130. package/src/Filter/FilterDatePicker/_docs/FilterDatePicker.stickersheet.stories.tsx +56 -1
  131. package/src/Filter/FilterDatePicker/hooks/useDateInputHandlers.spec.ts +3 -3
  132. package/src/Filter/FilterDatePicker/hooks/{useDateValidation.spec.tsx → useDateValidation.spec.ts} +13 -12
  133. package/src/Filter/FilterDatePicker/subcomponents/DateInputField/DateInputField.tsx +10 -1
  134. package/src/Filter/FilterDatePicker/subcomponents/FilterDatePickerField/FilterDatePickerField.spec.tsx +57 -36
  135. package/src/Filter/FilterDatePicker/utils/validateDate.spec.ts +52 -28
  136. package/src/Filter/FilterDateRangePicker/FilterDateRangePicker.spec.tsx +3 -2
  137. package/src/Filter/FilterDateRangePicker/_docs/FilterDateRangePicker.mdx +1 -1
  138. package/src/Filter/FilterDateRangePicker/_docs/FilterDateRangePicker.stickersheet.stories.tsx +55 -24
  139. package/src/Filter/FilterDateRangePicker/subcomponents/DateRangeInputField/DateRangeInputField.spec.tsx +43 -28
  140. package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/FilterDateRangePickerField.spec.tsx +82 -48
  141. package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/FilterDateRangePickerField.tsx +6 -1
  142. package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/hooks/{useEndDateValidation.spec.tsx → useEndDateValidation.spec.ts} +23 -20
  143. package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/hooks/{useStartDateValidation.spec.tsx → useStartDateValidation.spec.ts} +13 -11
  144. package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/utils/validateEndDateBeforeStartDate.spec.ts +17 -6
  145. package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/utils/{validateEndDateBeforeStartDate.ts → validateEndDateBeforeStartDate.tsx} +9 -3
  146. package/src/Filter/FilterMultiSelect/FilterMultiSelect.spec.tsx +10 -14
  147. package/src/Filter/FilterMultiSelect/_docs/FilterMultiSelect.mdx +1 -1
  148. package/src/Filter/FilterMultiSelect/context/SelectionProvider/SelectionProvider.spec.tsx +392 -372
  149. package/src/Filter/FilterMultiSelect/subcomponents/SearchInput/SearchInput.spec.tsx +9 -6
  150. package/src/Filter/FilterSelect/_docs/FilterSelect.mdx +1 -1
  151. package/src/GuidanceBlock/_docs/GuidanceBlock.mdx +1 -1
  152. package/src/Heading/_docs/Heading.mdx +1 -1
  153. package/src/Icon/_docs/Icon.mdx +1 -1
  154. package/src/Illustration/Scene/BrandMomentCaptureIntro/_docs/BrandMomentCaptureIntro.mdx +1 -1
  155. package/src/Illustration/Scene/_docs/Scene.mdx +1 -1
  156. package/src/Illustration/Spot/_docs/Spot.mdx +1 -1
  157. package/src/Input/Input/_docs/Input.mdx +1 -1
  158. package/src/Input/InputRange/_docs/InputRange.mdx +1 -1
  159. package/src/Input/InputSearch/InputSearch.spec.tsx +15 -14
  160. package/src/Input/InputSearch/_docs/InputSearch.mdx +1 -1
  161. package/src/Label/_docs/Label.mdx +1 -1
  162. package/src/LabelledMessage/_docs/LabelledMessage.mdx +1 -1
  163. package/src/LikertScaleLegacy/_docs/LikertScaleLegacy.mdx +1 -1
  164. package/src/Loading/LoadingGraphic/_docs/LoadingGraphic.mdx +1 -1
  165. package/src/Loading/LoadingHeading/_docs/LoadingHeading.mdx +1 -1
  166. package/src/Loading/LoadingInput/_docs/LoadingInput.mdx +1 -1
  167. package/src/Loading/LoadingParagraph/_docs/LoadingParagraph.mdx +1 -1
  168. package/src/Loading/LoadingSpinner/_docs/LoadingSpinner.mdx +1 -1
  169. package/src/Menu/_docs/Menu.mdx +1 -1
  170. package/src/Modal/ConfirmationModal/_docs/ConfirmationModal.mdx +1 -1
  171. package/src/Modal/ContextModal/_docs/ContextModal.mdx +1 -1
  172. package/src/Modal/GenericModal/_docs/GenericModal.mdx +1 -1
  173. package/src/Modal/InputEditModal/_docs/InputEditModal.mdx +1 -1
  174. package/src/MultiSelect/_docs/MultiSelect.mdx +1 -1
  175. package/src/Notification/GlobalNotification/_docs/GlobalNotification.mdx +1 -1
  176. package/src/Notification/InlineNotification/_docs/InlineNotification.mdx +1 -1
  177. package/src/Notification/ToastNotification/_docs/ToastNotification.mdx +1 -1
  178. package/src/Pagination/_docs/Pagination.mdx +1 -1
  179. package/src/Pagination/subcomponents/DirectionalLink/_docs/DirectionalLink.mdx +1 -1
  180. package/src/Pagination/subcomponents/PaginationLink/_docs/PaginationLink.mdx +1 -1
  181. package/src/Popover/_docs/Popover.mdx +1 -1
  182. package/src/ProgressBar/_docs/ProgressBar.mdx +1 -1
  183. package/src/Radio/Radio/_docs/Radio.mdx +1 -1
  184. package/src/Radio/RadioField/_docs/RadioField.mdx +1 -1
  185. package/src/Radio/RadioGroup/_docs/RadioGroup.mdx +1 -1
  186. package/src/RichTextEditor/EditableRichTextContent/_docs/EditableRichTextContent.mdx +1 -1
  187. package/src/RichTextEditor/RichTextContent/_docs/RichTextContent.mdx +1 -1
  188. package/src/RichTextEditor/RichTextEditor/_docs/RichTextEditor.mdx +1 -1
  189. package/src/RichTextEditor/RichTextEditor/subcomponents/ToggleIconButton/_docs/ToggleIconButton.mdx +1 -1
  190. package/src/RichTextEditor/RichTextEditor/subcomponents/Toolbar/_docs/Toolbar.mdx +1 -1
  191. package/src/SearchField/_docs/SearchField.mdx +1 -1
  192. package/src/Select/_docs/Select.mdx +1 -1
  193. package/src/Skirt/_docs/Skirt.mdx +1 -1
  194. package/src/Slider/_docs/Slider.mdx +1 -1
  195. package/src/SplitButton/SplitButton.spec.tsx +11 -6
  196. package/src/SplitButton/_docs/SplitButton.mdx +1 -1
  197. package/src/SplitButton/subcomponents/DropdownButton/DropdownButton.spec.tsx +15 -10
  198. package/src/Table/_docs/Table.mdx +1 -1
  199. package/src/Tabs/_docs/Tabs.mdx +1 -1
  200. package/src/Tag/_docs/Tag.mdx +1 -1
  201. package/src/Text/_docs/Text.mdx +1 -1
  202. package/src/TextArea/_docs/TextArea.mdx +1 -1
  203. package/src/TextAreaField/_docs/TextAreaField.mdx +1 -1
  204. package/src/TextField/_docs/TextField.mdx +1 -1
  205. package/src/Tile/InformationTile/_docs/InformationTile.mdx +1 -1
  206. package/src/Tile/MultiActionTile/_docs/MultiActionTile.mdx +1 -1
  207. package/src/Tile/TileGrid/_docs/TileGrid.mdx +1 -1
  208. package/src/TimeField/_docs/TimeField.mdx +1 -1
  209. package/src/TitleBlockZen/_docs/TitleBlockZen.mdx +1 -1
  210. package/src/ToggleSwitch/ToggleSwitch/_docs/ToggleSwitch.mdx +1 -1
  211. package/src/ToggleSwitch/ToggleSwitchField/_docs/ToggleSwitchField.mdx +1 -1
  212. package/src/VisuallyHidden/_docs/VisuallyHidden.mdx +1 -1
  213. package/src/Well/_docs/Well.mdx +1 -1
  214. package/src/Workflow/_docs/ProgressStepper.mdx +1 -1
  215. package/src/Workflow/_docs/Workflow.mdx +1 -1
  216. package/src/Workflow/_docs/WorkflowFooter.mdx +1 -1
  217. package/src/Workflow/_docs/WorkflowHeader.mdx +1 -1
  218. package/src/__future__/Select/_docs/Select.mdx +1 -1
  219. package/src/__future__/Tag/Tag/_docs/Tag.mdx +1 -1
  220. package/src/__future__/Workflow/_docs/ProgressStepper.mdx +1 -1
  221. package/src/__future__/Workflow/_docs/Workflow.mdx +1 -1
  222. package/src/__future__/Workflow/_docs/WorkflowFooter.mdx +1 -1
  223. package/src/__future__/Workflow/_docs/WorkflowHeader.mdx +1 -1
  224. package/src/__overlays__/Tooltip/v1/_docs/Tooltip.mdx +1 -1
  225. package/src/__overlays__/Tooltip/v3/_docs/ApiSpecification.mdx +0 -1
  226. package/src/__overlays__/Tooltip/v3/_docs/Tooltip.docs.stories.tsx +52 -0
  227. package/src/__overlays__/Tooltip/v3/_docs/Tooltip.mdx +40 -61
  228. package/src/__overlays__/Tooltip/v3/_docs/assets/tooltip_spec.png +0 -0
@@ -1,6 +1,7 @@
1
1
  import React, { useEffect, useState } from "react"
2
- import { render, screen, waitFor, within } from "@testing-library/react"
2
+ import { screen, waitFor, within } from "@testing-library/react"
3
3
  import userEvent from "@testing-library/user-event"
4
+ import { renderWithIntl } from "~tests"
4
5
  import { FilterMultiSelect } from "../index"
5
6
  import { FilterBar, FilterBarProps } from "./FilterBar"
6
7
  import { useFilterBarContext } from "./context/FilterBarContext"
@@ -137,11 +138,21 @@ const FilterBarWrapper = <T extends FiltersValues>({
137
138
  )
138
139
  }
139
140
 
141
+ const waitForI18nContent = async (): Promise<void> => {
142
+ await waitFor(() => {
143
+ expect(
144
+ screen.getByRole("button", { name: "Clear all filters" })
145
+ ).toBeVisible()
146
+ })
147
+ }
148
+
140
149
  describe("<FilterBar />", () => {
141
- it("renders filters in the provided order", () => {
142
- const { getAllByTestId } = render(
150
+ it("renders filters in the provided order", async () => {
151
+ const { getAllByTestId } = renderWithIntl(
143
152
  <FilterBarWrapper<ValuesSimple> filters={simpleFilters} />
144
153
  )
154
+ await waitForI18nContent()
155
+
145
156
  const filters = getAllByTestId(TEST_ID__FILTER)
146
157
  expect(filters.length).toBe(3)
147
158
  expect(filters[0]).toHaveTextContent("Flavour")
@@ -150,7 +161,7 @@ describe("<FilterBar />", () => {
150
161
  })
151
162
 
152
163
  it("retains Filter accessibility", async () => {
153
- render(<FilterBarWrapper filters={simpleFilters} />)
164
+ renderWithIntl(<FilterBarWrapper filters={simpleFilters} />)
154
165
 
155
166
  const filterButton = screen.getByRole("button", { name: "Flavour" })
156
167
  await user.click(filterButton)
@@ -162,9 +173,11 @@ describe("<FilterBar />", () => {
162
173
 
163
174
  describe("Removable filters", () => {
164
175
  it("shows inactive filters in the Add Filters menu only", async () => {
165
- const { getByRole, queryByText } = render(
176
+ const { getByRole, queryByText } = renderWithIntl(
166
177
  <FilterBarWrapper<ValuesRemovable> filters={filtersRemovable} />
167
178
  )
179
+ await waitForI18nContent()
180
+
168
181
  expect(queryByText("Topping")).not.toBeInTheDocument()
169
182
 
170
183
  const addFiltersButton = getByRole("button", { name: "Add Filters" })
@@ -178,13 +191,14 @@ describe("<FilterBar />", () => {
178
191
  })
179
192
  })
180
193
 
181
- it("shows removable filter as active if there is a default value", () => {
182
- const { getByRole } = render(
194
+ it("shows removable filter as active if there is a default value", async () => {
195
+ const { getByRole } = renderWithIntl(
183
196
  <FilterBarWrapper<ValuesRemovable>
184
197
  filters={filtersRemovable}
185
198
  defaultValues={{ topping: "pearls" }}
186
199
  />
187
200
  )
201
+ await waitForI18nContent()
188
202
  expect(getByRole("button", { name: "Topping : Pearls" })).toBeVisible()
189
203
  expect(
190
204
  getByRole("button", { name: "Remove filter - Topping" })
@@ -192,12 +206,13 @@ describe("<FilterBar />", () => {
192
206
  })
193
207
 
194
208
  it("does not show active removable filters in the Add Filters menu", async () => {
195
- const { getByRole } = render(
209
+ const { getByRole } = renderWithIntl(
196
210
  <FilterBarWrapper<ValuesRemovable>
197
211
  filters={filtersRemovable}
198
212
  defaultValues={{ topping: "pearls" }}
199
213
  />
200
214
  )
215
+ await waitForI18nContent()
201
216
 
202
217
  const addFiltersButton = getByRole("button", { name: "Add Filters" })
203
218
  await user.click(addFiltersButton)
@@ -210,12 +225,13 @@ describe("<FilterBar />", () => {
210
225
  })
211
226
 
212
227
  it("clears the value of a filter if it is removed", async () => {
213
- const { getByRole } = render(
228
+ const { getByRole } = renderWithIntl(
214
229
  <FilterBarWrapper<ValuesRemovable>
215
230
  filters={filtersRemovable}
216
231
  defaultValues={{ topping: "pearls" }}
217
232
  />
218
233
  )
234
+ await waitForI18nContent()
219
235
 
220
236
  const filterButton = getByRole("button", { name: "Topping : Pearls" })
221
237
  expect(filterButton).toBeVisible()
@@ -242,7 +258,7 @@ describe("<FilterBar />", () => {
242
258
  })
243
259
 
244
260
  it("adds new filters in the provided order", async () => {
245
- const { getByRole, getAllByTestId } = render(
261
+ const { getByRole, getAllByTestId } = renderWithIntl(
246
262
  <FilterBarWrapper<ValuesSimple>
247
263
  filters={simpleFilters.map(filter => ({
248
264
  ...filter,
@@ -250,6 +266,7 @@ describe("<FilterBar />", () => {
250
266
  }))}
251
267
  />
252
268
  )
269
+ await waitForI18nContent()
253
270
 
254
271
  const addFiltersButton = getByRole("button", { name: "Add Filters" })
255
272
  await user.click(addFiltersButton)
@@ -275,18 +292,19 @@ describe("<FilterBar />", () => {
275
292
 
276
293
  describe("Dependent filters", () => {
277
294
  describe("Condition not met", () => {
278
- it("does not show a dependent filter", () => {
279
- const { queryByRole, getByRole } = render(
295
+ it("does not show a dependent filter", async () => {
296
+ const { queryByRole, getByRole } = renderWithIntl(
280
297
  <FilterBarWrapper filters={filtersDependent} />
281
298
  )
299
+ await waitForI18nContent()
282
300
  expect(
283
301
  queryByRole("button", { name: "Topping" })
284
302
  ).not.toBeInTheDocument()
285
303
  expect(getByRole("button", { name: "Add Filters" })).toBeDisabled()
286
304
  })
287
305
 
288
- it("clears the value if the filter is not usable", () => {
289
- const { getByTestId } = render(
306
+ it("clears the value if the filter is not usable", async () => {
307
+ const { getByTestId } = renderWithIntl(
290
308
  <FilterBarWrapper
291
309
  filters={filtersDependent}
292
310
  defaultValues={{
@@ -294,6 +312,7 @@ describe("<FilterBar />", () => {
294
312
  }}
295
313
  />
296
314
  )
315
+ await waitForI18nContent()
297
316
  expect(getByTestId("testid__values").textContent).toEqual(
298
317
  JSON.stringify({})
299
318
  )
@@ -302,9 +321,10 @@ describe("<FilterBar />", () => {
302
321
 
303
322
  describe("Condition met", () => {
304
323
  it("shows a non-removable dependent filter in active filters", async () => {
305
- const { queryByRole, getByRole, findByRole } = render(
324
+ const { queryByRole, getByRole, findByRole } = renderWithIntl(
306
325
  <FilterBarWrapper filters={filtersDependent} />
307
326
  )
327
+ await waitForI18nContent()
308
328
 
309
329
  const flavourButton = getByRole("button", { name: "Flavour" })
310
330
  expect(
@@ -323,7 +343,7 @@ describe("<FilterBar />", () => {
323
343
  })
324
344
 
325
345
  it("shows a removable dependent filter in Add Filters menu", async () => {
326
- const { getByRole, findByRole } = render(
346
+ const { getByRole, findByRole } = renderWithIntl(
327
347
  <FilterBarWrapper
328
348
  filters={[
329
349
  {
@@ -351,6 +371,7 @@ describe("<FilterBar />", () => {
351
371
  ]}
352
372
  />
353
373
  )
374
+ await waitForI18nContent()
354
375
 
355
376
  const addFiltersButton = getByRole("button", { name: "Add Filters" })
356
377
  expect(addFiltersButton).toBeDisabled()
@@ -400,7 +421,9 @@ describe("<FilterBar />", () => {
400
421
  )
401
422
  }
402
423
 
403
- const { queryByRole, getByRole } = render(<Wrapper />)
424
+ const { queryByRole, getByRole } = renderWithIntl(<Wrapper />)
425
+ await waitForI18nContent()
426
+
404
427
  expect(
405
428
  queryByRole("button", { name: "Topping : Pearls" })
406
429
  ).not.toBeInTheDocument()
@@ -440,7 +463,9 @@ describe("<FilterBar />", () => {
440
463
  )
441
464
  }
442
465
 
443
- const { getByRole } = render(<Wrapper />)
466
+ const { getByRole } = renderWithIntl(<Wrapper />)
467
+ await waitForI18nContent()
468
+
444
469
  expect(
445
470
  getByRole("button", { name: "Flavour : Jasmine Milk Tea" })
446
471
  ).toBeVisible()
@@ -533,12 +558,13 @@ describe("<FilterBar />", () => {
533
558
  },
534
559
  ] satisfies Filters<ValuesComplexDeps>
535
560
 
536
- const { queryByRole, getByRole } = render(
561
+ const { queryByRole, getByRole } = renderWithIntl(
537
562
  <FilterBarWrapper
538
563
  filters={filters}
539
564
  defaultValues={{ milk: "full-cream" }}
540
565
  />
541
566
  )
567
+ await waitForI18nContent()
542
568
 
543
569
  const coffeeButton = getByRole("button", { name: "Coffee" })
544
570
  expect(coffeeButton).toBeVisible()
@@ -611,7 +637,7 @@ describe("<FilterBar />", () => {
611
637
 
612
638
  describe("Clear all", () => {
613
639
  it("clears all the values of all the filters", async () => {
614
- const { getByRole } = render(
640
+ const { getByRole } = renderWithIntl(
615
641
  <FilterBarWrapper<ValuesSimple>
616
642
  filters={simpleFilters}
617
643
  defaultValues={{
@@ -621,6 +647,7 @@ describe("<FilterBar />", () => {
621
647
  }}
622
648
  />
623
649
  )
650
+ await waitForI18nContent()
624
651
 
625
652
  const flavourButton = getByRole("button", {
626
653
  name: "Flavour : Jasmine Milk Tea",
@@ -644,7 +671,7 @@ describe("<FilterBar />", () => {
644
671
  })
645
672
 
646
673
  it("removes all removable filters", async () => {
647
- const { getByRole } = render(
674
+ const { getByRole } = renderWithIntl(
648
675
  <FilterBarWrapper<ValuesRemovable>
649
676
  filters={filtersRemovable}
650
677
  defaultValues={{
@@ -653,6 +680,7 @@ describe("<FilterBar />", () => {
653
680
  }}
654
681
  />
655
682
  )
683
+ await waitForI18nContent()
656
684
 
657
685
  const flavourButton = getByRole("button", {
658
686
  name: "Flavour : Jasmine Milk Tea",
@@ -712,7 +740,8 @@ describe("<FilterBar />", () => {
712
740
  )
713
741
  }
714
742
 
715
- const { getByRole } = render(<Wrapper />)
743
+ const { getByRole } = renderWithIntl(<Wrapper />)
744
+ await waitForI18nContent()
716
745
 
717
746
  const flavourButton = getByRole("button", { name: "Flavour" })
718
747
  expect(flavourButton.textContent).toEqual("Flavour")
@@ -767,7 +796,8 @@ describe("<FilterBar />", () => {
767
796
  )
768
797
  }
769
798
 
770
- const { getByRole, queryByRole } = render(<Wrapper />)
799
+ const { getByRole, queryByRole } = renderWithIntl(<Wrapper />)
800
+ await waitForI18nContent()
771
801
 
772
802
  expect(queryByRole("button", { name: "Flavour" })).not.toBeInTheDocument()
773
803
 
@@ -877,7 +907,7 @@ describe("<FilterBar />", () => {
877
907
  ] satisfies Filters<AsyncValues>
878
908
 
879
909
  it("can re-fetch options with all active filter values pulled off of the FilterBarContext", async () => {
880
- const { getByRole, queryByRole } = render(
910
+ const { getByRole, queryByRole } = renderWithIntl(
881
911
  <FilterBarWrapper<AsyncValues> filters={config} defaultValues={{}} />
882
912
  )
883
913
 
@@ -951,9 +981,10 @@ describe("<FilterBar />", () => {
951
981
  ] satisfies Filters<CycleFilterValues>
952
982
 
953
983
  it("opens the Custom Date filter when Cycle's 'custom' value is selected", async () => {
954
- const { getByRole } = render(
984
+ const { getByRole } = renderWithIntl(
955
985
  <FilterBarWrapper<CycleFilterValues> filters={cycleFilters} />
956
986
  )
987
+ await waitForI18nContent()
957
988
 
958
989
  const customDateButton = getByRole("button", { name: "Custom Date" })
959
990
  expect(customDateButton).toHaveAttribute("aria-expanded", "false")
@@ -9,7 +9,7 @@ import * as FilterBarStories from "./FilterBar.stories"
9
9
 
10
10
  <ResourceLinks
11
11
  sourceCode="https://github.com/cultureamp/kaizen-design-system/tree/main/packages/components/src/FilterBar"
12
- className="!mb-8"
12
+
13
13
  />
14
14
 
15
15
  <KAIOInstallation exportNames="FilterBar" />
@@ -1,6 +1,7 @@
1
1
  import React from "react"
2
- import { render, waitFor } from "@testing-library/react"
2
+ import { waitFor, screen } from "@testing-library/react"
3
3
  import userEvent from "@testing-library/user-event"
4
+ import { renderWithIntl } from "~tests"
4
5
  import {
5
6
  FilterBarProvider,
6
7
  FilterBarProviderProps,
@@ -52,22 +53,25 @@ describe("<AddFiltersMenu />", () => {
52
53
  },
53
54
  ] satisfies Filters<Values>
54
55
 
55
- const { getByRole, queryByRole } = render(
56
- <AddFiltersMenuWrapper filters={filters} />
57
- )
56
+ renderWithIntl(<AddFiltersMenuWrapper filters={filters} />)
58
57
 
59
- const addFiltersButton = getByRole("button", { name: "Add Filters" })
58
+ await waitFor(() => {
59
+ expect(screen.getByRole("button", { name: "Add Filters" })).toBeVisible()
60
+ })
61
+ const addFiltersButton = screen.getByRole("button", { name: "Add Filters" })
60
62
  await user.click(addFiltersButton)
61
63
 
62
64
  await waitFor(() => {
63
- expect(getByRole("list")).toBeVisible()
65
+ expect(screen.getByRole("list")).toBeVisible()
64
66
  })
65
- expect(getByRole("button", { name: "Coffee" })).toBeVisible()
66
- expect(queryByRole("button", { name: "Tea" })).not.toBeInTheDocument()
67
- expect(getByRole("button", { name: "Milk" })).toBeVisible()
67
+ expect(screen.getByRole("button", { name: "Coffee" })).toBeVisible()
68
+ expect(
69
+ screen.queryByRole("button", { name: "Tea" })
70
+ ).not.toBeInTheDocument()
71
+ expect(screen.getByRole("button", { name: "Milk" })).toBeVisible()
68
72
  })
69
73
 
70
- it("disables the Add Filters button when there are no inactive filters", () => {
74
+ it("disables the Add Filters button when there are no inactive filters", async () => {
71
75
  const filters = [
72
76
  {
73
77
  id: "coffee",
@@ -76,9 +80,13 @@ describe("<AddFiltersMenu />", () => {
76
80
  },
77
81
  ] satisfies Filters<Values>
78
82
 
79
- const { getByRole } = render(<AddFiltersMenuWrapper filters={filters} />)
83
+ renderWithIntl(<AddFiltersMenuWrapper filters={filters} />)
80
84
 
81
- const addFiltersButton = getByRole("button", { name: "Add Filters" })
82
- expect(addFiltersButton).toBeDisabled()
85
+ await waitFor(() => {
86
+ const addFiltersButton = screen.getByRole("button", {
87
+ name: "Add Filters",
88
+ })
89
+ expect(addFiltersButton).toBeDisabled()
90
+ })
83
91
  })
84
92
  })
@@ -1,10 +1,20 @@
1
1
  import React from "react"
2
+ import { useIntl } from "@cultureamp/i18n-react-intl"
2
3
  import { Button } from "~components/Button"
3
4
  import { AddIcon } from "~components/Icon"
4
5
  import { Menu, MenuList, MenuItem } from "~components/Menu"
5
6
  import { useFilterBarContext } from "../../context/FilterBarContext"
6
7
 
7
8
  export const AddFiltersMenu = (): JSX.Element => {
9
+ const { formatMessage } = useIntl()
10
+
11
+ const menuButtonLabel = formatMessage({
12
+ id: "filterBar.addFiltersMenu.buttonLabel",
13
+ defaultMessage: "Add Filters",
14
+ description:
15
+ "Menu button label to show additional available filter options",
16
+ })
17
+
8
18
  const { getInactiveFilters, showFilter } = useFilterBarContext()
9
19
  const inactiveFilters = getInactiveFilters()
10
20
 
@@ -12,7 +22,7 @@ export const AddFiltersMenu = (): JSX.Element => {
12
22
  <Menu
13
23
  button={
14
24
  <Button
15
- label="Add Filters"
25
+ label={menuButtonLabel}
16
26
  secondary
17
27
  disabled={inactiveFilters.length === 0}
18
28
  icon={<AddIcon role="presentation" />}
@@ -1,15 +1,30 @@
1
1
  import React from "react"
2
+ import { useIntl } from "@cultureamp/i18n-react-intl"
2
3
  import { Button } from "~components/Button"
3
4
  import { useFilterBarContext } from "../../context/FilterBarContext"
4
5
  import styles from "./ClearAllButton.module.scss"
5
6
 
6
7
  export const ClearAllButton = (): JSX.Element => {
8
+ const { formatMessage } = useIntl()
9
+
10
+ const clearButtonLabel = formatMessage({
11
+ id: "filterBar.clearAllButton.label",
12
+ defaultMessage: "Clear all",
13
+ description: "Button label to clear all values within the filter bar",
14
+ })
15
+
16
+ const clearButtonAriaLabel = formatMessage({
17
+ id: "filterBar.clearAllButton.ariaLabel",
18
+ defaultMessage: "Clear all filters",
19
+ description: "Button aria-label to clear all values within the filter bar",
20
+ })
21
+
7
22
  const { clearAllFilters } = useFilterBarContext()
8
23
 
9
24
  return (
10
25
  <Button
11
- label="Clear all"
12
- aria-label="Clear all filters"
26
+ label={clearButtonLabel}
27
+ aria-label={clearButtonAriaLabel}
13
28
  classNameOverride={styles.clearAllButton}
14
29
  secondary
15
30
  onClick={clearAllFilters}
@@ -1,6 +1,7 @@
1
1
  import React from "react"
2
- import { render, waitFor } from "@testing-library/react"
2
+ import { screen, waitFor } from "@testing-library/react"
3
3
  import userEvent from "@testing-library/user-event"
4
+ import { renderWithIntl } from "~tests"
4
5
  import { FilterBarProvider } from "../../context/FilterBarContext"
5
6
  import { FilterBarButton, FilterBarButtonProps } from "./FilterBarButton"
6
7
 
@@ -41,20 +42,28 @@ const FilterBarButtonWrapper = (
41
42
  )
42
43
 
43
44
  describe("<FilterBarButton />", () => {
44
- it("does not show a remove button when it is not removable", () => {
45
- const { getByRole, queryByRole } = render(<FilterBarButtonWrapper />)
46
- expect(getByRole("button", { name: "Coffee" })).toBeVisible()
45
+ it("does not show a remove button when it is not removable", async () => {
46
+ const { getByRole, queryByRole } = renderWithIntl(
47
+ <FilterBarButtonWrapper />
48
+ )
49
+ await waitFor(() => {
50
+ expect(getByRole("button", { name: "Coffee" })).toBeVisible()
51
+ })
47
52
  expect(
48
53
  queryByRole("button", { name: "Remove filter - Coffee" })
49
54
  ).not.toBeInTheDocument()
50
55
  })
51
56
 
52
57
  it("shows a remove button when it is removable", async () => {
53
- const { getByRole } = render(<FilterBarButtonWrapper isRemovable />)
54
- const filterButton = getByRole("button", { name: "Coffee" })
55
- expect(filterButton).toBeVisible()
58
+ renderWithIntl(<FilterBarButtonWrapper isRemovable />)
59
+ const filterButton = await screen.findByRole("button", { name: "Coffee" })
60
+ await waitFor(() => {
61
+ expect(filterButton).toBeVisible()
62
+ })
56
63
 
57
- const removeButton = getByRole("button", { name: "Remove filter - Coffee" })
64
+ const removeButton = screen.getByRole("button", {
65
+ name: "Remove filter - Coffee",
66
+ })
58
67
  expect(removeButton).toBeVisible()
59
68
 
60
69
  await user.click(removeButton)
@@ -1,6 +1,7 @@
1
1
  import React, { useState } from "react"
2
- import { render, screen, waitFor, within } from "@testing-library/react"
2
+ import { screen, waitFor, within } from "@testing-library/react"
3
3
  import userEvent from "@testing-library/user-event"
4
+ import { renderWithIntl } from "~tests"
4
5
  import {
5
6
  FilterAttributes,
6
7
  FilterBarProvider,
@@ -56,35 +57,46 @@ const FilterBarDatePickerWrapper = ({
56
57
  }
57
58
 
58
59
  describe("<FilterBarDatePicker />", () => {
59
- it("shows the name in the trigger button", () => {
60
- const { getByRole } = render(<FilterBarDatePickerWrapper />)
61
- const triggerButton = getByRole("button", { name: "Drank" })
62
- expect(triggerButton).toBeInTheDocument()
60
+ it("shows the name in the trigger button", async () => {
61
+ renderWithIntl(<FilterBarDatePickerWrapper />)
62
+ await waitFor(() => {
63
+ const triggerButton = screen.getByRole("button", { name: "Drank" })
64
+ expect(triggerButton).toBeInTheDocument()
65
+ })
63
66
  })
64
67
 
65
68
  describe("Removable", () => {
66
- it("does not show the remove button when isRemovable is false", () => {
67
- const { queryByRole } = render(<FilterBarDatePickerWrapper />)
68
- expect(
69
- queryByRole("button", { name: "Remove filter - Drank" })
70
- ).not.toBeInTheDocument()
69
+ it("does not show the remove button when isRemovable is false", async () => {
70
+ renderWithIntl(<FilterBarDatePickerWrapper />)
71
+ await waitFor(() => {
72
+ expect(
73
+ screen.getByRole("button", { name: "Drank" })
74
+ ).toBeInTheDocument()
75
+ expect(
76
+ screen.queryByRole("button", { name: "Remove filter - Drank" })
77
+ ).not.toBeInTheDocument()
78
+ })
71
79
  })
72
80
 
73
- it("shows the remove button when isRemovable is true", () => {
74
- const { getByRole } = render(
81
+ it("shows the remove button when isRemovable is true", async () => {
82
+ renderWithIntl(
75
83
  <FilterBarDatePickerWrapper
76
84
  filterAttributes={{ isRemovable: true }}
77
85
  defaultValues={{ drank: new Date("2023-05-01") }}
78
86
  />
79
87
  )
80
- expect(
81
- getByRole("button", { name: "Remove filter - Drank" })
82
- ).toBeVisible()
88
+ await waitFor(() => {
89
+ expect(
90
+ screen.getByRole("button", { name: "Remove filter - Drank" })
91
+ ).toBeVisible()
92
+ })
83
93
  })
84
94
  })
85
95
 
86
96
  it("can toggle its open state", async () => {
87
- const { getByRole, queryByRole } = render(<FilterBarDatePickerWrapper />)
97
+ const { getByRole, queryByRole } = renderWithIntl(
98
+ <FilterBarDatePickerWrapper />
99
+ )
88
100
  const triggerButton = getByRole("button", { name: "Drank" })
89
101
 
90
102
  await user.click(triggerButton)
@@ -100,20 +112,22 @@ describe("<FilterBarDatePicker />", () => {
100
112
  })
101
113
  })
102
114
 
103
- it("shows a selected value when provided", () => {
104
- const { getByRole } = render(
115
+ it("shows a selected value when provided", async () => {
116
+ const { getByRole } = renderWithIntl(
105
117
  <FilterBarDatePickerWrapper
106
118
  defaultValues={{ drank: new Date("2023-06-06") }}
107
119
  />
108
120
  )
109
- const triggerButton = getByRole("button", {
110
- name: "Drank : 6 Jun 2023",
121
+ await waitFor(() => {
122
+ const triggerButton = getByRole("button", {
123
+ name: "Drank : 6 Jun 2023",
124
+ })
125
+ expect(triggerButton).toBeInTheDocument()
111
126
  })
112
- expect(triggerButton).toBeInTheDocument()
113
127
  })
114
128
 
115
129
  it("updates the selected value in the trigger button when selecting a date", async () => {
116
- render(
130
+ renderWithIntl(
117
131
  <FilterBarDatePickerWrapper
118
132
  defaultValues={{ drank: new Date("2023-06-06") }}
119
133
  />
@@ -143,7 +157,7 @@ describe("<FilterBarDatePicker />", () => {
143
157
 
144
158
  it("allows calling additional functions on selection change", async () => {
145
159
  const onChange = jest.fn()
146
- render(<FilterBarDatePickerWrapper onDateChange={onChange} />)
160
+ renderWithIntl(<FilterBarDatePickerWrapper onDateChange={onChange} />)
147
161
 
148
162
  const triggerButton = screen.getByRole("button", { name: "Drank" })
149
163
  await user.click(triggerButton)