@dxc-technology/halstack-react 6.1.0 → 6.2.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 (41) hide show
  1. package/accordion/Accordion.js +122 -103
  2. package/accordion/Accordion.stories.tsx +1 -2
  3. package/accordion/Accordion.test.js +9 -10
  4. package/accordion/types.d.ts +3 -3
  5. package/accordion-group/AccordionGroup.js +1 -21
  6. package/accordion-group/AccordionGroup.stories.tsx +27 -1
  7. package/accordion-group/AccordionGroup.test.js +20 -45
  8. package/accordion-group/types.d.ts +8 -2
  9. package/alert/Alert.js +1 -1
  10. package/box/Box.js +1 -1
  11. package/checkbox/Checkbox.js +88 -95
  12. package/checkbox/Checkbox.test.js +93 -16
  13. package/checkbox/types.d.ts +2 -2
  14. package/common/variables.js +8 -4
  15. package/dropdown/Dropdown.js +1 -1
  16. package/footer/Footer.stories.tsx +8 -1
  17. package/header/Header.stories.tsx +4 -4
  18. package/layout/ApplicationLayout.stories.tsx +1 -0
  19. package/package.json +8 -8
  20. package/select/Listbox.js +0 -1
  21. package/slider/Slider.js +112 -91
  22. package/slider/Slider.stories.tsx +7 -1
  23. package/slider/Slider.test.js +87 -24
  24. package/slider/types.d.ts +2 -2
  25. package/switch/Switch.js +1 -1
  26. package/tabs/Tab.d.ts +4 -0
  27. package/tabs/Tab.js +135 -0
  28. package/tabs/Tabs.js +360 -104
  29. package/tabs/Tabs.stories.tsx +74 -0
  30. package/tabs/Tabs.test.js +217 -6
  31. package/tabs/types.d.ts +14 -4
  32. package/tag/Tag.js +1 -1
  33. package/text-input/Icons.d.ts +8 -0
  34. package/text-input/Icons.js +60 -0
  35. package/text-input/Suggestion.js +7 -5
  36. package/text-input/Suggestions.d.ts +4 -0
  37. package/text-input/Suggestions.js +134 -0
  38. package/text-input/TextInput.js +103 -201
  39. package/text-input/TextInput.stories.tsx +189 -181
  40. package/text-input/TextInput.test.js +163 -162
  41. package/text-input/types.d.ts +16 -2
@@ -1,10 +1,16 @@
1
1
  import React from "react";
2
- import { userEvent, within, fireEvent } from "@storybook/testing-library";
2
+ import { userEvent, within } from "@storybook/testing-library";
3
3
  import { BackgroundColorProvider } from "../BackgroundColorContext";
4
4
  import Title from "../../.storybook/components/Title";
5
5
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
6
6
  import DarkContainer from "../../.storybook/components/DarkSection";
7
7
  import DxcTextInput from "./TextInput";
8
+ import DxcButton from "../button/Button";
9
+ import DxcCheckbox from "../checkbox/Checkbox";
10
+ import DxcFlex from "../flex/Flex";
11
+ import Suggestions from "./Suggestions";
12
+ import { ThemeProvider } from "styled-components";
13
+ import useTheme from "../useTheme";
8
14
 
9
15
  export default {
10
16
  title: "Text input",
@@ -71,6 +77,14 @@ export const Chromatic = () => (
71
77
  <Title title="Hovered action" theme="light" level={4} />
72
78
  <DxcTextInput label="Text input" defaultValue="Text" clearable />
73
79
  </ExampleContainer>
80
+ <ExampleContainer pseudoState="pseudo-active">
81
+ <Title title="Actived action" theme="light" level={4} />
82
+ <DxcTextInput label="Text input" action={action} clearable />
83
+ </ExampleContainer>
84
+ <ExampleContainer pseudoState="pseudo-focus">
85
+ <Title title="Focused action" theme="light" level={4} />
86
+ <DxcTextInput label="Text input" action={action} clearable />
87
+ </ExampleContainer>
74
88
  <ExampleContainer>
75
89
  <Title title="Without label" theme="light" level={4} />
76
90
  <DxcTextInput />
@@ -151,7 +165,7 @@ export const Chromatic = () => (
151
165
  </ExampleContainer>
152
166
  <BackgroundColorProvider color="#333333">
153
167
  <DarkContainer>
154
- <Title title="Dark" theme="dark" level={2} />
168
+ <Title title="Dark theme" theme="dark" level={2} />
155
169
  <ExampleContainer pseudoState="pseudo-hover">
156
170
  <Title title="Hovered" theme="dark" level={4} />
157
171
  <DxcTextInput label="Text input" />
@@ -164,6 +178,14 @@ export const Chromatic = () => (
164
178
  <Title title="Hovered action" theme="dark" level={4} />
165
179
  <DxcTextInput label="Text input" defaultValue="Text" clearable />
166
180
  </ExampleContainer>
181
+ <ExampleContainer pseudoState="pseudo-active">
182
+ <Title title="Actived action" theme="dark" level={4} />
183
+ <DxcTextInput label="Text input" action={action} clearable />
184
+ </ExampleContainer>
185
+ <ExampleContainer pseudoState="pseudo-focus">
186
+ <Title title="Focused action" theme="dark" level={4} />
187
+ <DxcTextInput label="Text input" action={action} clearable />
188
+ </ExampleContainer>
167
189
  <ExampleContainer>
168
190
  <Title title="Helper text, placeholder, optional and action" theme="dark" level={4} />
169
191
  <DxcTextInput
@@ -278,196 +300,182 @@ export const Chromatic = () => (
278
300
  </>
279
301
  );
280
302
 
281
- const FocusedActionTextInput = () => (
282
- <ExampleContainer expanded>
283
- <Title title="Focused action" theme="light" level={4} />
284
- <DxcTextInput label="Text input" action={action} clearable />
285
- </ExampleContainer>
286
- );
287
-
288
- const ActivedActionTextInput = () => (
289
- <ExampleContainer pseudoState="pseudo-active" expanded>
290
- <Title title="Actived action" theme="light" level={4} />
291
- <DxcTextInput label="Text input" action={action} clearable />
292
- </ExampleContainer>
293
- );
294
-
295
- const ShowOptionsAutosuggest = () => (
296
- <ExampleContainer expanded>
297
- <Title title="Show options" theme="light" level={4} />
298
- <DxcTextInput label="Text input" suggestions={countries} clearable />
299
- </ExampleContainer>
300
- );
301
-
302
- const HoveredOptionAutosuggest = () => (
303
- <ExampleContainer expanded pseudoState="pseudo-hover">
304
- <Title title="Hovered option" theme="light" level={4} />
305
- <DxcTextInput label="Text input" suggestions={country} clearable />
306
- </ExampleContainer>
307
- );
308
-
309
- const FocusedOptionAutosuggest = () => (
310
- <ExampleContainer expanded>
311
- <Title title="Focused option" theme="light" level={4} />
312
- <DxcTextInput label="Text input" suggestions={country} clearable />
313
- </ExampleContainer>
314
- );
315
-
316
- const ActivedOptionAutosuggest = () => (
317
- <ExampleContainer expanded pseudoState="pseudo-active">
318
- <Title title="Actived option" theme="light" level={4} />
319
- <DxcTextInput label="Text input" suggestions={country} clearable />
320
- </ExampleContainer>
321
- );
322
-
323
- const FocusedActionTextInputOnDark = () => (
324
- <BackgroundColorProvider color="#333333">
325
- <DarkContainer>
326
- <ExampleContainer expanded>
327
- <Title title="Focused action" theme="dark" level={4} />
328
- <DxcTextInput label="Text input" action={action} clearable />
329
- </ExampleContainer>
330
- </DarkContainer>
331
- </BackgroundColorProvider>
332
- );
333
-
334
- const ActivedActionTextInputOnDark = () => (
335
- <BackgroundColorProvider color="#333333">
336
- <DarkContainer>
337
- <ExampleContainer pseudoState="pseudo-active" expanded>
338
- <Title title="Actived action" theme="dark" level={4} />
339
- <DxcTextInput label="Text input" action={action} clearable />
340
- </ExampleContainer>
341
- </DarkContainer>
342
- </BackgroundColorProvider>
343
- );
303
+ const AutosuggestListbox = () => {
304
+ const colorsTheme: any = useTheme();
344
305
 
345
- const ShowOptionsAutosuggestOnDark = () => (
346
- <BackgroundColorProvider color="#333333">
347
- <DarkContainer>
348
- <ExampleContainer expanded>
349
- <Title title="Show options" theme="dark" level={4} />
350
- <DxcTextInput label="Text input" suggestions={countries} clearable />
351
- </ExampleContainer>
352
- </DarkContainer>
353
- </BackgroundColorProvider>
354
- );
355
-
356
- const HoveredActionAutosuggestOnDark = () => (
357
- <BackgroundColorProvider color="#333333">
358
- <DarkContainer>
359
- <ExampleContainer expanded pseudoState="pseudo-hover">
360
- <Title title="Hovered option" theme="dark" level={4} />
361
- <DxcTextInput label="Text input" suggestions={country} clearable />
306
+ return (
307
+ <ThemeProvider theme={colorsTheme.textInput}>
308
+ <ExampleContainer>
309
+ <Title title="Autosuggest listbox" theme="light" level={2} />
310
+ <ExampleContainer>
311
+ <Title title="List dialog uses a Radix Popover to appear over elements with a certain z-index" theme="light" level={3} />
312
+ <div
313
+ style={{
314
+ display: "flex",
315
+ flexDirection: "column",
316
+ gap: "20px",
317
+ height: "150px",
318
+ width: "500px",
319
+ marginBottom: "250px",
320
+ padding: "20px",
321
+ border: "1px solid black",
322
+ borderRadius: "4px",
323
+ overflow: "auto",
324
+ zIndex: "1300",
325
+ }}
326
+ >
327
+ <DxcTextInput
328
+ label="Label"
329
+ suggestions={countries}
330
+ optional
331
+ placeholder="Choose an option"
332
+ size="fillParent"
333
+ />
334
+ <button style={{ zIndex: "1", width: "100px" }}>Submit</button>
335
+ </div>
336
+ </ExampleContainer>
337
+ <Title title="Listbox suggestion states" theme="light" level={3} />
338
+ <ExampleContainer pseudoState="pseudo-hover">
339
+ <Title title="Hovered suggestion" theme="light" level={4} />
340
+ <Suggestions
341
+ id="x"
342
+ value=""
343
+ suggestions={country}
344
+ visualFocusIndex={-1}
345
+ highlightedSuggestions={false}
346
+ searchHasErrors={false}
347
+ isSearching={false}
348
+ suggestionOnClick={() => {}}
349
+ getTextInputWidth={() => 350}
350
+ />
351
+ </ExampleContainer>
352
+ <ExampleContainer pseudoState="pseudo-active">
353
+ <Title title="Active suggestion" theme="light" level={4} />
354
+ <Suggestions
355
+ id="x"
356
+ value=""
357
+ suggestions={country}
358
+ visualFocusIndex={-1}
359
+ highlightedSuggestions={false}
360
+ searchHasErrors={false}
361
+ isSearching={false}
362
+ suggestionOnClick={(suggestion) => {}}
363
+ getTextInputWidth={() => 350}
364
+ />
365
+ </ExampleContainer>
366
+ <ExampleContainer>
367
+ <Title title="Focused suggestion" theme="light" level={4} />
368
+ <Suggestions
369
+ id="x"
370
+ value=""
371
+ suggestions={country}
372
+ visualFocusIndex={0}
373
+ highlightedSuggestions={false}
374
+ searchHasErrors={false}
375
+ isSearching={false}
376
+ suggestionOnClick={(suggestion) => {}}
377
+ getTextInputWidth={() => 350}
378
+ />
379
+ </ExampleContainer>
380
+ <ExampleContainer>
381
+ <Title title="Highlighted suggestion" theme="light" level={4} />
382
+ <Suggestions
383
+ id="x"
384
+ value="Afgh"
385
+ suggestions={country}
386
+ visualFocusIndex={-1}
387
+ highlightedSuggestions={true}
388
+ searchHasErrors={false}
389
+ isSearching={false}
390
+ suggestionOnClick={(suggestion) => {}}
391
+ getTextInputWidth={() => 350}
392
+ />
393
+ </ExampleContainer>
362
394
  </ExampleContainer>
363
- </DarkContainer>
364
- </BackgroundColorProvider>
365
- );
366
-
367
- const FocusedOptionAutosuggestOnDark = () => (
368
- <BackgroundColorProvider color="#333333">
369
- <DarkContainer>
370
- <ExampleContainer expanded>
371
- <Title title="Focused option" theme="dark" level={4} />
372
- <DxcTextInput label="Text input" suggestions={country} clearable />
395
+ <ExampleContainer>
396
+ <Title title="Autosuggest Error" theme="light" level={3} />
397
+ <Suggestions
398
+ id="x"
399
+ value=""
400
+ suggestions={country}
401
+ visualFocusIndex={-1}
402
+ highlightedSuggestions={false}
403
+ searchHasErrors={true}
404
+ isSearching={false}
405
+ suggestionOnClick={(suggestion) => {}}
406
+ getTextInputWidth={() => 350}
407
+ />
373
408
  </ExampleContainer>
374
- </DarkContainer>
375
- </BackgroundColorProvider>
376
- );
377
-
378
- const ActivedOptionAutosuggestOnDark = () => (
379
- <BackgroundColorProvider color="#333333">
380
- <DarkContainer>
381
- <ExampleContainer expanded pseudoState="pseudo-active">
382
- <Title title="Actived option" theme="dark" level={4} />
383
- <DxcTextInput label="Text input" suggestions={country} clearable />
409
+ <ExampleContainer>
410
+ <Title title="Autosuggest Searching message" theme="light" level={3} />
411
+ <Suggestions
412
+ id="x"
413
+ value=""
414
+ suggestions={country}
415
+ visualFocusIndex={-1}
416
+ highlightedSuggestions={false}
417
+ searchHasErrors={false}
418
+ isSearching={true}
419
+ suggestionOnClick={(suggestion) => {}}
420
+ getTextInputWidth={() => 350}
421
+ />
384
422
  </ExampleContainer>
385
- </DarkContainer>
386
- </BackgroundColorProvider>
387
- );
388
-
389
- export const FocusedAction = FocusedActionTextInput.bind({});
390
- FocusedAction.play = async ({ canvasElement }) => {
391
- const canvas = within(canvasElement);
392
- const action = canvas.getByRole("button");
393
- await action.focus();
394
- };
395
-
396
- export const ActivedAction = ActivedActionTextInput.bind({});
397
- ActivedAction.play = async ({ canvasElement }) => {
398
- const canvas = within(canvasElement);
399
- const action = canvas.getByRole("button");
400
- await userEvent.click(action);
401
- };
402
-
403
- export const ShowOptions = ShowOptionsAutosuggest.bind({});
404
- ShowOptions.play = async ({ canvasElement }) => {
405
- const canvas = within(canvasElement);
406
- const autosuggest = canvas.getByRole("combobox");
407
- await userEvent.click(autosuggest);
408
- };
409
-
410
- export const HoveredOption = HoveredOptionAutosuggest.bind({});
411
- HoveredOption.play = async ({ canvasElement }) => {
412
- const canvas = within(canvasElement);
413
- const autosuggest = canvas.getByRole("combobox");
414
- await userEvent.click(autosuggest);
423
+ </ThemeProvider>
424
+ );
415
425
  };
416
426
 
417
- export const FocusedOption = FocusedOptionAutosuggest.bind({});
418
- FocusedOption.play = async ({ canvasElement }) => {
419
- const canvas = within(canvasElement);
420
- const autosuggest = canvas.getByRole("combobox");
421
- await userEvent.click(autosuggest);
422
- fireEvent.keyDown(autosuggest, { key: "ArrowDown", code: "ArrowDown", keyCode: 40, charCode: 40 });
423
- };
427
+ const DarkAutosuggestListbox = () => {
428
+ const colorsTheme: any = useTheme();
424
429
 
425
- export const ActivedOption = ActivedOptionAutosuggest.bind({});
426
- ActivedOption.play = async ({ canvasElement }) => {
427
- const canvas = within(canvasElement);
428
- const autosuggest = canvas.getByRole("combobox");
429
- await userEvent.click(autosuggest);
430
- };
431
-
432
- export const FocusedActionOnDark = FocusedActionTextInputOnDark.bind({});
433
- FocusedActionOnDark.play = async ({ canvasElement }) => {
434
- const canvas = within(canvasElement);
435
- const action = canvas.getByRole("button");
436
- await action.focus();
437
- };
438
-
439
- export const ActivedActionOnDark = ActivedActionTextInputOnDark.bind({});
440
- ActivedActionOnDark.play = async ({ canvasElement }) => {
441
- const canvas = within(canvasElement);
442
- const action = canvas.getByRole("button");
443
- await userEvent.click(action);
444
- };
445
-
446
- export const ShowOptionsOnDark = ShowOptionsAutosuggestOnDark.bind({});
447
- ShowOptionsOnDark.play = async ({ canvasElement }) => {
448
- const canvas = within(canvasElement);
449
- const autosuggest = canvas.getByRole("combobox");
450
- await userEvent.click(autosuggest);
451
- };
452
-
453
- export const HoveredActionOnDark = HoveredActionAutosuggestOnDark.bind({});
454
- HoveredActionOnDark.play = async ({ canvasElement }) => {
455
- const canvas = within(canvasElement);
456
- const autosuggest = canvas.getByRole("combobox");
457
- await userEvent.click(autosuggest);
430
+ return (
431
+ <ThemeProvider theme={colorsTheme.textInput}>
432
+ <BackgroundColorProvider color="#333333">
433
+ <DarkContainer>
434
+ <Title title="Dark theme" theme="dark" level={2} />
435
+ <ExampleContainer>
436
+ <Title title="Default with opened suggestions" theme="dark" level={3} />
437
+ <DxcFlex direction="column" gap="80px">
438
+ <DxcTextInput label="Label" suggestions={countries} optional placeholder="Choose an option" />
439
+ <DxcCheckbox
440
+ label="You understand the selection and give your consent"
441
+ onChange={() => {}}
442
+ labelPosition="after"
443
+ />
444
+ <DxcButton label="Submit" onClick={() => {}} size="medium" margin={{ bottom: "xxlarge" }} />
445
+ </DxcFlex>
446
+ </ExampleContainer>
447
+ <ExampleContainer>
448
+ <Title title="Autosuggest Error" theme="dark" level={3} />
449
+ <div style={{ height: "100px" }}>
450
+ <Suggestions
451
+ id="x"
452
+ value=""
453
+ suggestions={country}
454
+ visualFocusIndex={-1}
455
+ highlightedSuggestions={false}
456
+ searchHasErrors={true}
457
+ isSearching={false}
458
+ suggestionOnClick={(suggestion) => {}}
459
+ getTextInputWidth={() => 350}
460
+ />
461
+ </div>
462
+ </ExampleContainer>
463
+ </DarkContainer>
464
+ </BackgroundColorProvider>
465
+ </ThemeProvider>
466
+ );
458
467
  };
459
468
 
460
- export const FocusedOptionOnDark = FocusedOptionAutosuggestOnDark.bind({});
461
- FocusedOptionOnDark.play = async ({ canvasElement }) => {
469
+ export const AutosuggestListboxStates = AutosuggestListbox.bind({});
470
+ AutosuggestListboxStates.play = async ({ canvasElement }) => {
462
471
  const canvas = within(canvasElement);
463
- const autosuggest = canvas.getByRole("combobox");
464
- await userEvent.click(autosuggest);
465
- fireEvent.keyDown(autosuggest, { key: "ArrowDown", code: "ArrowDown", keyCode: 40, charCode: 40 });
472
+ const select = canvas.getByRole("combobox");
473
+ await userEvent.click(select);
466
474
  };
467
475
 
468
- export const ActivedOptionOnDark = ActivedOptionAutosuggestOnDark.bind({});
469
- ActivedOptionOnDark.play = async ({ canvasElement }) => {
476
+ export const AutosuggestListboxOnDark = DarkAutosuggestListbox.bind({});
477
+ AutosuggestListboxOnDark.play = async ({ canvasElement }) => {
470
478
  const canvas = within(canvasElement);
471
- const autosuggest = canvas.getByRole("combobox");
472
- await userEvent.click(autosuggest);
479
+ const select = canvas.getByRole("combobox");
480
+ await userEvent.click(select);
473
481
  };