@dxc-technology/halstack-react 0.0.0-5aa300b → 0.0.0-5b43b04

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 (59) hide show
  1. package/HalstackContext.js +86 -45
  2. package/accordion/Accordion.stories.tsx +51 -2
  3. package/alert/Alert.stories.tsx +28 -0
  4. package/box/Box.stories.tsx +15 -0
  5. package/button/Button.stories.tsx +100 -9
  6. package/checkbox/Checkbox.stories.tsx +52 -0
  7. package/chip/Chip.js +8 -2
  8. package/chip/Chip.stories.tsx +55 -0
  9. package/common/variables.js +163 -137
  10. package/date-input/Calendar.d.ts +1 -1
  11. package/date-input/Calendar.js +43 -43
  12. package/date-input/DateInput.js +74 -32
  13. package/date-input/DateInput.stories.tsx +183 -30
  14. package/date-input/DateInput.test.js +120 -37
  15. package/date-input/DatePicker.js +38 -52
  16. package/date-input/Icons.d.ts +6 -0
  17. package/date-input/Icons.js +75 -0
  18. package/date-input/YearPicker.d.ts +1 -1
  19. package/date-input/YearPicker.js +23 -12
  20. package/date-input/types.d.ts +6 -8
  21. package/dialog/Dialog.js +1 -3
  22. package/dialog/Dialog.stories.tsx +42 -20
  23. package/dropdown/Dropdown.js +0 -1
  24. package/dropdown/Dropdown.stories.tsx +200 -82
  25. package/dropdown/DropdownMenu.js +8 -18
  26. package/dropdown/DropdownMenuItem.js +4 -15
  27. package/file-input/FileInput.stories.tsx +85 -2
  28. package/footer/Footer.stories.tsx +91 -0
  29. package/header/Header.js +18 -20
  30. package/header/Header.stories.tsx +149 -6
  31. package/link/Link.stories.tsx +60 -0
  32. package/package.json +1 -1
  33. package/paginator/Paginator.stories.tsx +24 -0
  34. package/paginator/Paginator.test.js +17 -10
  35. package/progress-bar/ProgressBar.js +4 -4
  36. package/progress-bar/ProgressBar.stories.jsx +35 -2
  37. package/quick-nav/QuickNav.stories.tsx +14 -0
  38. package/radio-group/RadioGroup.stories.tsx +131 -18
  39. package/resultsetTable/ResultsetTable.test.js +17 -22
  40. package/select/Listbox.d.ts +1 -1
  41. package/select/Listbox.js +5 -34
  42. package/select/Option.js +3 -14
  43. package/select/Select.js +43 -24
  44. package/select/Select.stories.tsx +475 -187
  45. package/select/Select.test.js +17 -22
  46. package/select/types.d.ts +2 -2
  47. package/sidenav/Sidenav.stories.tsx +93 -0
  48. package/slider/Slider.stories.tsx +57 -0
  49. package/spinner/Spinner.stories.jsx +27 -1
  50. package/switch/Switch.stories.tsx +33 -0
  51. package/table/Table.stories.jsx +80 -1
  52. package/tabs/Tabs.stories.tsx +38 -0
  53. package/tabs-nav/NavTabs.js +1 -1
  54. package/tabs-nav/Tab.js +30 -9
  55. package/tag/Tag.stories.tsx +14 -1
  56. package/text-input/TextInput.stories.tsx +69 -0
  57. package/textarea/Textarea.stories.jsx +60 -1
  58. package/toggle-group/ToggleGroup.stories.tsx +42 -0
  59. package/wizard/Wizard.stories.tsx +20 -0
@@ -16,42 +16,37 @@ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
16
16
 
17
17
  // Mocking DOMRect for Radix Primitive Popover
18
18
  global.globalThis = global;
19
+ global.DOMRect = {
20
+ fromRect: function fromRect() {
21
+ return {
22
+ top: 0,
23
+ left: 0,
24
+ bottom: 0,
25
+ right: 0,
26
+ width: 0,
27
+ height: 0
28
+ };
29
+ }
30
+ };
19
31
 
20
32
  global.ResizeObserver = /*#__PURE__*/function () {
21
- function ResizeObserver(cb) {
33
+ function ResizeObserver() {
22
34
  (0, _classCallCheck2["default"])(this, ResizeObserver);
23
- this.cb = cb;
24
35
  }
25
36
 
26
37
  (0, _createClass2["default"])(ResizeObserver, [{
27
38
  key: "observe",
28
- value: function observe() {
29
- this.cb([{
30
- borderBoxSize: {
31
- inlineSize: 0,
32
- blockSize: 0
33
- }
34
- }]);
35
- }
39
+ value: function observe() {}
36
40
  }, {
37
41
  key: "unobserve",
38
42
  value: function unobserve() {}
43
+ }, {
44
+ key: "disconnect",
45
+ value: function disconnect() {}
39
46
  }]);
40
47
  return ResizeObserver;
41
48
  }();
42
49
 
43
- global.DOMRect = {
44
- fromRect: function fromRect() {
45
- return {
46
- top: 0,
47
- left: 0,
48
- bottom: 0,
49
- right: 0,
50
- width: 0,
51
- height: 0
52
- };
53
- }
54
- };
55
50
  var single_options = [{
56
51
  label: "Option 01",
57
52
  value: "1"
package/select/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- /// <reference types="react" />
1
+ import React from "react";
2
2
  declare type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
3
3
  declare type Margin = {
4
4
  top?: Space;
@@ -201,7 +201,7 @@ export declare type ListboxProps = {
201
201
  optionalItem: Option;
202
202
  searchable: boolean;
203
203
  handleOptionOnClick: (option: Option) => void;
204
- getSelectWidth: () => number;
204
+ styles: React.CSSProperties;
205
205
  };
206
206
  /**
207
207
  * Reference to the select component.
@@ -3,6 +3,7 @@ import DxcSidenav from "./Sidenav";
3
3
  import Title from "../../.storybook/components/Title";
4
4
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
5
5
  import { userEvent, within } from "@storybook/testing-library";
6
+ import { HalstackProvider } from "../HalstackContext";
6
7
 
7
8
  export default {
8
9
  title: "Sidenav",
@@ -33,6 +34,16 @@ c-10.663,0-17.467,1.853-20.417,5.568c-2.949,3.711-4.428,10.23-4.428,19.558v31.11
33
34
  </svg>
34
35
  );
35
36
 
37
+ const TitleComponent = () => {
38
+ return <DxcSidenav.Title>Dxc technology</DxcSidenav.Title>;
39
+ };
40
+
41
+ const opinionatedTheme = {
42
+ sidenav: {
43
+ baseColor: "#f2f2f2",
44
+ },
45
+ };
46
+
36
47
  export const Chromatic = () => (
37
48
  <>
38
49
  <ExampleContainer>
@@ -101,6 +112,41 @@ export const Chromatic = () => (
101
112
  </DxcSidenav.Section>
102
113
  </DxcSidenav>
103
114
  </ExampleContainer>
115
+ <Title title="Opinionated theme" theme="light" level={2} />
116
+ <ExampleContainer>
117
+ <HalstackProvider theme={opinionatedTheme}>
118
+ <DxcSidenav title={<TitleComponent />}>
119
+ <DxcSidenav.Section>
120
+ <p>
121
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ullamcorper consectetur mollis. Suspendisse
122
+ vitae lacinia libero.
123
+ </p>
124
+ </DxcSidenav.Section>
125
+ <DxcSidenav.Section>
126
+ <DxcSidenav.Link>Single Link</DxcSidenav.Link>
127
+ <DxcSidenav.Group collapsable={false} title="Single Group" icon={iconSVG}>
128
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
129
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
130
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
131
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
132
+ </DxcSidenav.Group>
133
+ </DxcSidenav.Section>
134
+ <DxcSidenav.Section>
135
+ <DxcSidenav.Group collapsable={true} title="Section Group" icon={iconSVG}>
136
+ <DxcSidenav.Link selected>Group Link</DxcSidenav.Link>
137
+ <DxcSidenav.Link icon={iconSVG}>Group Link</DxcSidenav.Link>
138
+ </DxcSidenav.Group>
139
+ <DxcSidenav.Link icon={iconSVG}>Single Link</DxcSidenav.Link>
140
+ <DxcSidenav.Link>Single Link</DxcSidenav.Link>
141
+ <DxcSidenav.Group collapsable={false} title="Section Group">
142
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
143
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
144
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
145
+ </DxcSidenav.Group>
146
+ </DxcSidenav.Section>
147
+ </DxcSidenav>
148
+ </HalstackProvider>
149
+ </ExampleContainer>
104
150
  </>
105
151
  );
106
152
 
@@ -170,6 +216,44 @@ const HoverSidenav = () => (
170
216
  </ExampleContainer>
171
217
  );
172
218
 
219
+ const HoverSidenavOpinionated = () => (
220
+ <ExampleContainer pseudoState="pseudo-hover">
221
+ <Title title="Default sidenav" theme="light" level={4} />
222
+ <HalstackProvider theme={opinionatedTheme}>
223
+ <DxcSidenav title={<DxcSidenav.Title>Dxc technology</DxcSidenav.Title>}>
224
+ <DxcSidenav.Section>
225
+ <DxcSidenav.Link>Single Link</DxcSidenav.Link>
226
+ <DxcSidenav.Link>Single Link</DxcSidenav.Link>
227
+ <DxcSidenav.Group collapsable={true} title="Collapsable Group">
228
+ <DxcSidenav.Link selected>Group Link</DxcSidenav.Link>
229
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
230
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
231
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
232
+ </DxcSidenav.Group>
233
+ </DxcSidenav.Section>
234
+ <DxcSidenav.Section>
235
+ <DxcSidenav.Group collapsable={true} title="Not Collapsed Group">
236
+ <DxcSidenav.Link selected>Group Link</DxcSidenav.Link>
237
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
238
+ </DxcSidenav.Group>
239
+ <DxcSidenav.Link>Single Link</DxcSidenav.Link>
240
+ <DxcSidenav.Link>Single Link</DxcSidenav.Link>
241
+ <DxcSidenav.Group collapsable={true} title="Collapsable Group">
242
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
243
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
244
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
245
+ </DxcSidenav.Group>
246
+ <DxcSidenav.Group collapsable={true} title="Collapsable Group">
247
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
248
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
249
+ <DxcSidenav.Link>Group Link</DxcSidenav.Link>
250
+ </DxcSidenav.Group>
251
+ </DxcSidenav.Section>
252
+ </DxcSidenav>
253
+ </HalstackProvider>
254
+ </ExampleContainer>
255
+ );
256
+
173
257
  export const CollapseGroup = CollapsedGroup.bind({});
174
258
  CollapseGroup.play = async ({ canvasElement }) => {
175
259
  const canvas = within(canvasElement);
@@ -187,3 +271,12 @@ CollapseHoverGroup.play = async ({ canvasElement }) => {
187
271
  userEvent.click(group);
188
272
  });
189
273
  };
274
+
275
+ export const CollapseHoverGroupOpinionated = HoverSidenavOpinionated.bind({});
276
+ CollapseHoverGroupOpinionated.play = async ({ canvasElement }) => {
277
+ const canvas = within(canvasElement);
278
+ const collapsableGroups = canvas.getAllByText("Collapsable Group");
279
+ collapsableGroups.forEach((group) => {
280
+ userEvent.click(group);
281
+ });
282
+ };
@@ -4,6 +4,7 @@ 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
+ import { HalstackProvider } from "../HalstackContext";
7
8
 
8
9
  export default {
9
10
  title: "Slider",
@@ -12,6 +13,14 @@ export default {
12
13
 
13
14
  const labelFormat = (value) => `${value}E100000000000000000000000`;
14
15
 
16
+ const opinionatedTheme = {
17
+ slider: {
18
+ baseColor: "#0067b3",
19
+ fontColor: "#000000",
20
+ totalLineColor: "#e6e6e6",
21
+ },
22
+ };
23
+
15
24
  export const Chromatic = () => (
16
25
  <>
17
26
  <Title title="States" theme="light" level={2} />
@@ -179,5 +188,53 @@ export const Chromatic = () => (
179
188
  size="large"
180
189
  />
181
190
  </ExampleContainer>
191
+ <Title title="Opinionated theme" theme="light" level={2} />
192
+ <ExampleContainer pseudoState="pseudo-hover">
193
+ <Title title="Hovered" theme="light" level={4} />
194
+ <HalstackProvider theme={opinionatedTheme}>
195
+ <DxcSlider label="Slider" helperText="Help message" showLimitsValues />
196
+ </HalstackProvider>
197
+ </ExampleContainer>
198
+ <ExampleContainer pseudoState="pseudo-active">
199
+ <Title title="Active" theme="light" level={4} />
200
+ <HalstackProvider theme={opinionatedTheme}>
201
+ <DxcSlider label="Slider" helperText="Help message" showLimitsValues />
202
+ </HalstackProvider>
203
+ </ExampleContainer>
204
+ <ExampleContainer pseudoState="pseudo-focus">
205
+ <Title title="Focused" theme="light" level={4} />
206
+ <HalstackProvider theme={opinionatedTheme}>
207
+ <DxcSlider label="Slider" helperText="Help message" showLimitsValues />
208
+ </HalstackProvider>
209
+ </ExampleContainer>
210
+ <ExampleContainer>
211
+ <Title title="Disabled discrete slider with input" theme="light" level={4} />{" "}
212
+ <HalstackProvider theme={opinionatedTheme}>
213
+ <DxcSlider
214
+ label="Slider"
215
+ helperText="Help message"
216
+ disabled
217
+ defaultValue={40}
218
+ minValue={0}
219
+ maxValue={50}
220
+ showLimitsValues
221
+ showInput
222
+ marks
223
+ step={10}
224
+ />
225
+ </HalstackProvider>
226
+ </ExampleContainer>
227
+ <ExampleContainer>
228
+ <Title title="Continuous slider" theme="light" level={4} />
229
+ <HalstackProvider theme={opinionatedTheme}>
230
+ <DxcSlider defaultValue={65} label="Slider" helperText="Help message" showLimitsValues />
231
+ </HalstackProvider>
232
+ </ExampleContainer>
233
+ <ExampleContainer>
234
+ <Title title="Discrete slider" theme="light" level={4} />
235
+ <HalstackProvider theme={opinionatedTheme}>
236
+ <DxcSlider defaultValue={20} label="Slider" helperText="Help message" showLimitsValues marks step={5} />
237
+ </HalstackProvider>
238
+ </ExampleContainer>
182
239
  </>
183
240
  );
@@ -2,12 +2,23 @@ import React from "react";
2
2
  import DxcSpinner from "./Spinner";
3
3
  import Title from "../../.storybook/components/Title";
4
4
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
5
+ import { HalstackProvider } from "../HalstackContext";
5
6
 
6
7
  export default {
7
8
  title: "Spinner",
8
9
  component: DxcSpinner,
9
10
  };
10
11
 
12
+ const opinionatedTheme = {
13
+ spinner: {
14
+ accentColor: "#5f249f",
15
+ baseColor: "#ffffff",
16
+ fontColor: "#000000",
17
+ overlayColor: "#a46ede",
18
+ overlayFontColor: "#ffffff",
19
+ },
20
+ };
21
+
11
22
  export const Chromatic = () => (
12
23
  <>
13
24
  <ExampleContainer>
@@ -62,7 +73,13 @@ export const Chromatic = () => (
62
73
  <DxcSpinner margin="xlarge" mode="small" value="75"></DxcSpinner>
63
74
  <Title title="Xxlarge margin" theme="light" level={4} />
64
75
  <DxcSpinner margin="xxlarge" mode="small" value="75"></DxcSpinner>
65
- <hr />
76
+ </ExampleContainer>
77
+ <Title title="Opinionated theme" theme="light" level={2} />
78
+ <ExampleContainer>
79
+ <Title title="With label and value label" theme="light" level={4} />
80
+ <HalstackProvider theme={opinionatedTheme}>
81
+ <DxcSpinner label="Label" value="50" showValue></DxcSpinner>
82
+ </HalstackProvider>
66
83
  </ExampleContainer>
67
84
  </>
68
85
  );
@@ -101,3 +118,12 @@ export const SpinnerOverlayWithValueAndLabel = () => (
101
118
  <DxcSpinner mode="overlay" label="Label" value="50" showValue></DxcSpinner>
102
119
  </ExampleContainer>
103
120
  );
121
+
122
+ export const SpinnerOverlayWithValueAndLabelOpinionated = () => (
123
+ <ExampleContainer>
124
+ <HalstackProvider theme={opinionatedTheme}>
125
+ <Title title="Mode overlay" theme="light" level={4} />
126
+ <DxcSpinner mode="overlay" label="Label" value="50" showValue></DxcSpinner>
127
+ </HalstackProvider>
128
+ </ExampleContainer>
129
+ );
@@ -4,12 +4,20 @@ 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
+ import { HalstackProvider } from "../HalstackContext";
7
8
 
8
9
  export default {
9
10
  title: "Switch",
10
11
  component: DxcSwitch,
11
12
  };
12
13
 
14
+ const opinionatedTheme = {
15
+ switch: {
16
+ checkedBaseColor: "#5f249f",
17
+ fontColor: "#000000",
18
+ },
19
+ };
20
+
13
21
  export const Chromatic = () => (
14
22
  <>
15
23
  <ExampleContainer>
@@ -134,5 +142,30 @@ export const Chromatic = () => (
134
142
  <Title title="FitContent size" theme="light" level={4} />
135
143
  <DxcSwitch label="FitContent" size="fitContent" />
136
144
  </ExampleContainer>
145
+ <Title title="Opinionated theme" theme="light" level={2} />
146
+ <ExampleContainer>
147
+ <Title title="Checked" theme="light" level={4} />
148
+ <HalstackProvider theme={opinionatedTheme}>
149
+ <DxcSwitch label="Switch" defaultChecked />
150
+ </HalstackProvider>
151
+ </ExampleContainer>
152
+ <ExampleContainer>
153
+ <Title title="Default" theme="light" level={4} />
154
+ <HalstackProvider theme={opinionatedTheme}>
155
+ <DxcSwitch label="Switch" />
156
+ </HalstackProvider>
157
+ </ExampleContainer>
158
+ <ExampleContainer>
159
+ <Title title="Disabled" theme="light" level={4} />
160
+ <HalstackProvider theme={opinionatedTheme}>
161
+ <DxcSwitch label="Switch" disabled />
162
+ </HalstackProvider>
163
+ </ExampleContainer>
164
+ <ExampleContainer>
165
+ <Title title="Disabled checked" theme="light" level={4} />
166
+ <HalstackProvider theme={opinionatedTheme}>
167
+ <DxcSwitch label="Switch" disabled defaultChecked />
168
+ </HalstackProvider>
169
+ </ExampleContainer>
137
170
  </>
138
171
  );
@@ -2,12 +2,21 @@ import React from "react";
2
2
  import DxcTable from "./Table";
3
3
  import Title from "../../.storybook/components/Title";
4
4
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
5
+ import { HalstackProvider } from "../HalstackContext";
5
6
 
6
7
  export default {
7
8
  title: "Table",
8
9
  component: DxcTable,
9
10
  };
10
11
 
12
+ const opinionatedTheme = {
13
+ table: {
14
+ baseColor: "#5f249f",
15
+ headerFontColor: "#ffffff",
16
+ cellFontColor: "#000000",
17
+ },
18
+ };
19
+
11
20
  export const Chromatic = () => (
12
21
  <>
13
22
  <ExampleContainer>
@@ -271,7 +280,77 @@ export const Chromatic = () => (
271
280
  <td>Cell 9</td>
272
281
  </tr>
273
282
  </DxcTable>
274
- <hr />
283
+ </ExampleContainer>
284
+ <Title title="Opinionated theme" theme="light" level={2} />
285
+ <ExampleContainer>
286
+ <HalstackProvider theme={opinionatedTheme}>
287
+ <DxcTable>
288
+ <tr>
289
+ <th>
290
+ header<br></br>subheader
291
+ </th>
292
+ <th>
293
+ header<br></br>subheader
294
+ </th>
295
+ <th>
296
+ header<br></br>subheader
297
+ </th>
298
+ </tr>
299
+ <tr>
300
+ <td>
301
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
302
+ dolore magna aliqua.
303
+ </td>
304
+ <td>
305
+ Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
306
+ consequat.
307
+ </td>
308
+ <td>
309
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
310
+ </td>
311
+ </tr>
312
+ <tr>
313
+ <td>cell data</td>
314
+ <td>cell data</td>
315
+ <td>cell data</td>
316
+ </tr>
317
+ <tr>
318
+ <td>cell data</td>
319
+ <td>cell data</td>
320
+ <td>cell data</td>
321
+ </tr>
322
+ <tr>
323
+ <td>cell data</td>
324
+ <td>cell data</td>
325
+ <td>cell data</td>
326
+ </tr>
327
+ <tr>
328
+ <td>cell data</td>
329
+ <td>cell data</td>
330
+ <td>cell data</td>
331
+ </tr>
332
+ <tr>
333
+ <td>cell data</td>
334
+ <td>cell data</td>
335
+ <td>cell data</td>
336
+ </tr>
337
+ <tr>
338
+ <td>cell data</td>
339
+ <td>cell data</td>
340
+ <td>cell data</td>
341
+ </tr>
342
+ <tr>
343
+ <td>cell data</td>
344
+ <td>cell data</td>
345
+ <td>cell data</td>
346
+ </tr>
347
+ <tr>
348
+ <td>cell data</td>
349
+ <td>cell data</td>
350
+ <td>cell data</td>
351
+ </tr>
352
+ </DxcTable>
353
+ </HalstackProvider>
275
354
  </ExampleContainer>
276
355
  </>
277
356
  );
@@ -2,6 +2,7 @@ import React from "react";
2
2
  import DxcTabs from "./Tabs";
3
3
  import Title from "../../.storybook/components/Title";
4
4
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
5
+ import { HalstackProvider } from "../HalstackContext";
5
6
 
6
7
  export default {
7
8
  title: "Tabs",
@@ -81,6 +82,12 @@ const tabsIcon = tabs.map((tab, index) =>
81
82
 
82
83
  const tabsNotificationIcon = tabsNotification.map((tab) => ({ ...tab, icon: iconSVG }));
83
84
 
85
+ const opinionatedTheme = {
86
+ tabs: {
87
+ baseColor: "#5f249f",
88
+ },
89
+ };
90
+
84
91
  export const Chromatic = () => (
85
92
  <>
86
93
  <ExampleContainer>
@@ -156,6 +163,37 @@ export const Chromatic = () => (
156
163
  <Title title="Xxlarge margin" theme="light" level={4} />
157
164
  <DxcTabs tabs={tabs} margin="xxlarge" />
158
165
  </ExampleContainer>
166
+ <Title title="Opinionated theme" theme="light" level={2} />
167
+ <ExampleContainer>
168
+ <Title title="With icon and notification" theme="light" level={4} />
169
+ <HalstackProvider theme={opinionatedTheme}>
170
+ <DxcTabs tabs={tabsNotificationIcon} />
171
+ </HalstackProvider>
172
+ </ExampleContainer>
173
+ <ExampleContainer>
174
+ <Title title="Disabled" theme="light" level={4} />
175
+ <HalstackProvider theme={opinionatedTheme}>
176
+ <DxcTabs activeTabIndex={0} tabs={disabledTabs} />
177
+ </HalstackProvider>
178
+ </ExampleContainer>
179
+ <ExampleContainer pseudoState="pseudo-hover">
180
+ <Title title="Hovered" theme="light" level={4} />
181
+ <HalstackProvider theme={opinionatedTheme}>
182
+ <DxcTabs tabs={tabs} />
183
+ </HalstackProvider>
184
+ </ExampleContainer>
185
+ <ExampleContainer pseudoState="pseudo-focus">
186
+ <Title title="Focused" theme="light" level={4} />
187
+ <HalstackProvider theme={opinionatedTheme}>
188
+ <DxcTabs tabs={tabs} />
189
+ </HalstackProvider>
190
+ </ExampleContainer>
191
+ <ExampleContainer pseudoState="pseudo-active">
192
+ <Title title="Actived" theme="light" level={4} />
193
+ <HalstackProvider theme={opinionatedTheme}>
194
+ <DxcTabs tabs={tabs} />
195
+ </HalstackProvider>
196
+ </ExampleContainer>
159
197
  </>
160
198
  );
161
199
 
@@ -107,7 +107,7 @@ var DxcNavTabs = function DxcNavTabs(_ref) {
107
107
  };
108
108
 
109
109
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
110
- theme: colorsTheme.tabs
110
+ theme: colorsTheme.navTabs
111
111
  }, /*#__PURE__*/_react["default"].createElement(NavTabsContainer, {
112
112
  onKeyDown: handleOnKeyDown,
113
113
  role: "tablist",
package/tabs-nav/Tab.js CHANGED
@@ -23,6 +23,10 @@ var _Badge = _interopRequireDefault(require("../badge/Badge"));
23
23
 
24
24
  var _NavTabs = require("./NavTabs");
25
25
 
26
+ var _Typography = _interopRequireDefault(require("../typography/Typography"));
27
+
28
+ var _useTheme = _interopRequireDefault(require("../useTheme"));
29
+
26
30
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
27
31
 
28
32
  var _excluded = ["href", "active", "icon", "disabled", "notificationNumber", "children"];
@@ -50,6 +54,7 @@ var DxcTab = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, _ref2) {
50
54
  hasIcons = _useContext.hasIcons,
51
55
  focusedLabel = _useContext.focusedLabel;
52
56
 
57
+ var colorsTheme = (0, _useTheme["default"])();
53
58
  (0, _react.useLayoutEffect)(function () {
54
59
  var _tabRef$current;
55
60
 
@@ -71,7 +76,8 @@ var DxcTab = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, _ref2) {
71
76
  return /*#__PURE__*/_react["default"].createElement(TabContainer, {
72
77
  active: active,
73
78
  role: "tab",
74
- "aria-selected": active
79
+ "aria-selected": active,
80
+ "aria-disabled": disabled
75
81
  }, /*#__PURE__*/_react["default"].createElement(Tab, (0, _extends2["default"])({
76
82
  href: !disabled && href ? href : undefined,
77
83
  disabled: disabled,
@@ -92,29 +98,44 @@ var DxcTab = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, _ref2) {
92
98
  iconPosition: iconPosition
93
99
  }, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement("img", {
94
100
  src: icon
95
- }) : icon), /*#__PURE__*/_react["default"].createElement(LabelContainer, null, children, notificationNumber && /*#__PURE__*/_react["default"].createElement(BadgeContainer, null, /*#__PURE__*/_react["default"].createElement(_Badge["default"], {
101
+ }) : icon), /*#__PURE__*/_react["default"].createElement(LabelContainer, null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
102
+ color: disabled ? colorsTheme.navTabs.disabledFontColor : active ? colorsTheme.navTabs.selectedFontColor : colorsTheme.navTabs.unselectedFontColor,
103
+ fontFamily: colorsTheme.navTabs.fontFamily,
104
+ fontSize: colorsTheme.navTabs.fontSize,
105
+ fontStyle: colorsTheme.navTabs.fontStyle,
106
+ fontWeight: colorsTheme.navTabs.fontWeight,
107
+ textAlign: "center",
108
+ letterSpacing: "0.025em",
109
+ lineHeight: "1.715em"
110
+ }, " ", children), notificationNumber && /*#__PURE__*/_react["default"].createElement(BadgeContainer, null, /*#__PURE__*/_react["default"].createElement(_Badge["default"], {
96
111
  notificationText: notificationNumber > 99 ? "+99" : notificationNumber,
97
112
  disabled: disabled
98
113
  })))));
99
114
  });
100
115
 
101
- var TabContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n border-bottom: 2px solid ", ";\n"])), function (props) {
102
- return props.active ? "#6f2c91" : "#0000001a";
116
+ var TabContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n border-bottom: 2px solid ", ";\n svg {\n color: ", ";\n }\n\n &[aria-selected=\"true\"] {\n svg {\n color: ", ";\n }\n }\n\n &[aria-disabled=\"true\"] {\n svg {\n color: ", ";\n }\n }\n"])), function (props) {
117
+ return props.active ? props.theme.selectedUnderlineColor : props.theme.dividerColor;
118
+ }, function (props) {
119
+ return props.theme.unselectedIconColor;
120
+ }, function (props) {
121
+ return props.theme.selectedIconColor;
122
+ }, function (props) {
123
+ return props.theme.disabledIconColor;
103
124
  });
104
125
 
105
- var Tab = _styledComponents["default"].a(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: ", ";\n justify-content: center;\n align-items: center;\n\n font-family: \"Open Sans\";\n font-style: normal;\n font-weight: 400;\n font-size: 1rem;\n color: ", ";\n text-decoration-color: transparent;\n cursor: ", ";\n\n height: ", ";\n min-width: 164px;\n margin: 0.5rem;\n padding: 0.375rem;\n\n border-radius: 4px;\n\n ", "\n"])), function (props) {
126
+ var Tab = _styledComponents["default"].a(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: ", ";\n justify-content: center;\n align-items: center;\n\n \n text-decoration-color: transparent;\n cursor: ", ";\n background: ", ";\n\n height: ", ";\n min-width: 164px;\n margin: 0.5rem;\n padding: 0.375rem;\n\n border-radius: 4px;\n \n\n ", "\n"])), function (props) {
106
127
  return props.hasIcon && props.iconPosition === "top" ? "column" : "row";
107
- }, function (props) {
108
- return props.disabled ? "#0000004D" : "#333333";
109
128
  }, function (props) {
110
129
  return props.disabled ? "not-allowed" : "pointer";
130
+ }, function (props) {
131
+ return props.theme.selectedBackgroundColor;
111
132
  }, function (props) {
112
133
  return props.hasIcon && props.iconPosition === "top" ? "66px" : "32px";
113
134
  }, function (props) {
114
- return !props.disabled && ":hover {\n background: #0000000D;\n }\n\n :focus {\n outline: 2px solid #33aaff};\n }\n\n :active {\n background: #0000001A;\n outline: 2px solid #33aaff};\n }";
135
+ return !props.disabled && ":hover {\n background: ".concat(props.theme.hoverBackgroundColor, ";\n }\n\n :focus {\n outline: 2px solid ").concat(props.theme.focusOutline, ";\n }\n\n :active {\n background: ").concat(props.theme.pressedBackgroundColor, ";\n outline: 2px solid #33aaff};\n }");
115
136
  });
116
137
 
117
- var TabIconContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n margin-bottom: ", ";\n margin-right: ", ";\n\n img,\n svg {\n height: 24px;\n width: 24px;\n }\n"])), function (props) {
138
+ var TabIconContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n margin-bottom: ", ";\n margin-right: ", ";\n\n img,\n svg {\n height: 24px;\n width: 24px;\n }\n\n"])), function (props) {
118
139
  return props.iconPosition === "top" && "0.375rem";
119
140
  }, function (props) {
120
141
  return props.iconPosition === "left" && "0.625rem";
@@ -3,6 +3,7 @@ import { userEvent, within } from "@storybook/testing-library";
3
3
  import Title from "../../.storybook/components/Title";
4
4
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
5
5
  import DxcTag from "./Tag";
6
+ import { HalstackProvider } from "../HalstackContext";
6
7
 
7
8
  export default {
8
9
  title: "Tag",
@@ -23,6 +24,13 @@ const largeIcon = (
23
24
  </svg>
24
25
  );
25
26
 
27
+ const opinionatedTheme = {
28
+ tag: {
29
+ fontColor: "#000000",
30
+ iconColor: "#ffffff",
31
+ },
32
+ };
33
+
26
34
  export const Chromatic = () => (
27
35
  <>
28
36
  <ExampleContainer>
@@ -124,7 +132,12 @@ export const Chromatic = () => (
124
132
  <Title title="FitContent size" theme="light" level={4} />
125
133
  <DxcTag label="FitContent" size="fitContent" icon={icon} />
126
134
  </ExampleContainer>
127
- <hr />
135
+ <Title title="Opinionated theme" theme="light" level={2} />
136
+ <ExampleContainer>
137
+ <HalstackProvider theme={opinionatedTheme}>
138
+ <DxcTag label="Tag" icon={icon} />
139
+ </HalstackProvider>
140
+ </ExampleContainer>
128
141
  </>
129
142
  );
130
143