@dt-dds/react-select 1.0.0-beta.68 → 1.0.0-beta.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,40 @@
1
1
  # @dt-ui/react-select
2
2
 
3
+ ## 1.0.0-beta.70
4
+
5
+ ### Patch Changes
6
+
7
+ - fix(config): update ESLint, TS, and Storybook config
8
+ - fix(icon-button): add missing @dt-dds/react-icon devDependency
9
+ - Updated dependencies
10
+ - Updated dependencies
11
+ - Updated dependencies [223664b]
12
+ - @dt-dds/react-checkbox@1.0.0-beta.53
13
+ - @dt-dds/react-core@1.0.0-beta.52
14
+ - @dt-dds/react-dropdown@1.0.0-beta.79
15
+ - @dt-dds/react-icon@1.0.0-beta.55
16
+ - @dt-dds/react-icon-button@1.0.0-beta.21
17
+ - @dt-dds/react-label-field@1.0.0-beta.53
18
+ - @dt-dds/react-tooltip@1.0.0-beta.61
19
+ - @dt-dds/react-typography@1.0.0-beta.43
20
+ - @dt-dds/themes@1.0.0-beta.10
21
+ - @dt-dds/react-box@1.0.0-beta.58
22
+
23
+ ## 1.0.0-beta.69
24
+
25
+ ### Minor Changes
26
+
27
+ - feat: add accessibility to Dropdown
28
+
29
+ ### Patch Changes
30
+
31
+ - refactor: fix sonar issues on Dropdown and Select
32
+ - Updated dependencies
33
+ - Updated dependencies
34
+ - Updated dependencies [223664b]
35
+ - @dt-dds/react-dropdown@1.0.0-beta.78
36
+ - @dt-dds/react-box@1.0.0-beta.57
37
+
3
38
  ## 1.0.0-beta.68
4
39
 
5
40
  ### Minor Changes
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { CustomTheme } from '@dt-dds/themes';
2
- import { BaseProps, Scale } from '@dt-dds/react-core';
3
2
  import { ReactNode } from 'react';
3
+ import { BaseProps, Scale } from '@dt-dds/react-core';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
 
6
6
  interface SelectOptionProps extends BaseProps {
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { CustomTheme } from '@dt-dds/themes';
2
- import { BaseProps, Scale } from '@dt-dds/react-core';
3
2
  import { ReactNode } from 'react';
3
+ import { BaseProps, Scale } from '@dt-dds/react-core';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
 
6
6
  interface SelectOptionProps extends BaseProps {
package/dist/index.js CHANGED
@@ -64,13 +64,13 @@ __export(index_exports, {
64
64
  module.exports = __toCommonJS(index_exports);
65
65
 
66
66
  // src/Select.tsx
67
+ var import_react2 = require("react");
68
+ var Downshift = __toESM(require("downshift"));
67
69
  var import_react_box = require("@dt-dds/react-box");
68
70
  var import_react_icon = require("@dt-dds/react-icon");
69
71
  var import_react_icon_button = require("@dt-dds/react-icon-button");
70
72
  var import_react_label_field = require("@dt-dds/react-label-field");
71
73
  var import_react_tooltip = require("@dt-dds/react-tooltip");
72
- var Downshift = __toESM(require("downshift"));
73
- var import_react2 = require("react");
74
74
 
75
75
  // src/components/SelectOption.tsx
76
76
  var import_react_dropdown = require("@dt-dds/react-dropdown");
@@ -105,8 +105,8 @@ var SelectProvider = ({ children, value }) => {
105
105
  };
106
106
 
107
107
  // src/components/SelectOption.styled.ts
108
- var import_react_checkbox = require("@dt-dds/react-checkbox");
109
108
  var import_styled = __toESM(require("@emotion/styled"));
109
+ var import_react_checkbox = require("@dt-dds/react-checkbox");
110
110
  var SelectCheckboxStyled = (0, import_styled.default)(import_react_checkbox.Checkbox)`
111
111
  ${({ theme }) => `
112
112
  pointer-events: none;
@@ -148,10 +148,8 @@ var SelectOption = ({
148
148
  children: isMulti ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
149
149
  SelectCheckboxStyled,
150
150
  {
151
- "aria-hidden": "true",
152
151
  isChecked: isSelected,
153
152
  isDisabled,
154
- role: "presentation",
155
153
  tabIndex: -1,
156
154
  children
157
155
  }
@@ -161,9 +159,9 @@ var SelectOption = ({
161
159
  };
162
160
 
163
161
  // src/Select.styled.ts
162
+ var import_styled2 = __toESM(require("@emotion/styled"));
164
163
  var import_react_dropdown2 = require("@dt-dds/react-dropdown");
165
164
  var import_react_typography = require("@dt-dds/react-typography");
166
- var import_styled2 = __toESM(require("@emotion/styled"));
167
165
  var SelectStyled = import_styled2.default.div`
168
166
  position: relative;
169
167
  width: 100%;
@@ -183,9 +181,13 @@ var TypographyValueStyled = (0, import_styled2.default)(import_react_typography.
183
181
  text-overflow: ellipsis;
184
182
  white-space: nowrap;
185
183
 
186
- ${({ theme, scale, isFloatingLabel }) => `
187
- ${isFloatingLabel ? `padding-top: ${scale === "standard" ? theme.spacing.spacing_50 : theme.spacing.spacing_40};` : `padding-block: ${scale === "standard" ? theme.spacing.spacing_30 : theme.spacing.spacing_20};`}
188
- `}
184
+ ${({ theme, scale, isFloatingLabel }) => {
185
+ const paddingTop = scale === "standard" ? theme.spacing.spacing_50 : theme.spacing.spacing_40;
186
+ const paddingBlock = scale === "standard" ? theme.spacing.spacing_30 : theme.spacing.spacing_20;
187
+ return `
188
+ ${isFloatingLabel ? `padding-top: ${paddingTop};` : `padding-block: ${paddingBlock};`}
189
+ `;
190
+ }}
189
191
  `;
190
192
  var SelectContainerStyled = import_styled2.default.div`
191
193
  transition: border 0.2s ease-in-out;
@@ -338,6 +340,41 @@ var Select = ({
338
340
  }
339
341
  return selectedItems.length > 1 ? `${selectedItems.length} options selected` : (_a2 = selectedItems[0]) == null ? void 0 : _a2.label;
340
342
  };
343
+ const selectStateReducer = (state, actionAndChanges) => {
344
+ const { changes, type } = actionAndChanges;
345
+ switch (type) {
346
+ case useSelect.stateChangeTypes.ToggleButtonBlur:
347
+ return __spreadProps(__spreadValues({}, changes), {
348
+ isOpen: false,
349
+ selectedItem: state.selectedItem,
350
+ highlightedIndex: state.highlightedIndex
351
+ });
352
+ case useSelect.stateChangeTypes.ItemClick:
353
+ case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
354
+ case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:
355
+ return isMulti ? __spreadProps(__spreadValues({}, changes), {
356
+ isOpen: true,
357
+ highlightedIndex: state.highlightedIndex
358
+ }) : changes;
359
+ default:
360
+ return changes;
361
+ }
362
+ };
363
+ const handleSelectedItemChange = ({
364
+ selectedItem
365
+ }) => {
366
+ if (!selectedItem) {
367
+ return;
368
+ }
369
+ if (isMulti) {
370
+ const currentValue = Array.isArray(value) ? value : [];
371
+ const isSelectedItem = selectedOptionsSet.has(selectedItem.value);
372
+ const nextValue = isSelectedItem ? currentValue.filter((v) => v !== selectedItem.value) : [...currentValue, selectedItem.value];
373
+ onChange == null ? void 0 : onChange(nextValue);
374
+ return;
375
+ }
376
+ onChange == null ? void 0 : onChange(selectedItem.value);
377
+ };
341
378
  const {
342
379
  isOpen,
343
380
  closeMenu,
@@ -353,41 +390,16 @@ var Select = ({
353
390
  },
354
391
  defaultHighlightedIndex: isMulti || !(selectedItems == null ? void 0 : selectedItems[0]) ? 0 : void 0,
355
392
  selectedItem: !isMulti ? (_a = selectedItems == null ? void 0 : selectedItems[0]) != null ? _a : null : null,
356
- stateReducer(state, actionAndChanges) {
357
- const { changes, type } = actionAndChanges;
358
- switch (type) {
359
- case useSelect.stateChangeTypes.ToggleButtonBlur:
360
- return __spreadProps(__spreadValues({}, changes), {
361
- isOpen: false,
362
- selectedItem: state.selectedItem,
363
- highlightedIndex: state.highlightedIndex
364
- });
365
- case useSelect.stateChangeTypes.ItemClick:
366
- case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
367
- case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:
368
- return isMulti ? __spreadProps(__spreadValues({}, changes), {
369
- isOpen: true,
370
- highlightedIndex: state.highlightedIndex
371
- }) : changes;
372
- default:
373
- return changes;
374
- }
375
- },
376
- onSelectedItemChange: ({ selectedItem }) => {
377
- if (!selectedItem) {
378
- return;
379
- }
380
- if (isMulti) {
381
- const currentValue = Array.isArray(value) ? value : [];
382
- const isSelectedItem = selectedOptionsSet.has(selectedItem.value);
383
- const nextValue = isSelectedItem ? currentValue.filter((v) => v !== selectedItem.value) : [...currentValue, selectedItem.value];
384
- onChange == null ? void 0 : onChange(nextValue);
385
- return;
386
- }
387
- onChange == null ? void 0 : onChange(selectedItem.value);
388
- }
393
+ stateReducer: selectStateReducer,
394
+ onSelectedItemChange: handleSelectedItemChange
389
395
  });
390
396
  const disabled = isDisabled || options.length === 1;
397
+ const helperTextColor = (isDisabled2, hasError2) => {
398
+ if (isDisabled2) {
399
+ return "content.light";
400
+ }
401
+ return hasError2 ? "error.default" : "content.medium";
402
+ };
391
403
  const toggleProps = getToggleButtonProps({
392
404
  disabled,
393
405
  tabIndex: disabled ? -1 : 0,
@@ -479,7 +491,7 @@ var Select = ({
479
491
  helperText ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
480
492
  TypographyHelperTextStyled,
481
493
  {
482
- color: isDisabled ? "content.light" : hasError ? "error.default" : "content.medium",
494
+ color: helperTextColor(!!isDisabled, hasError),
483
495
  dataTestId: "select-helper-text",
484
496
  element: "span",
485
497
  fontStyles: "bodySmRegular",
@@ -493,6 +505,7 @@ var Select = ({
493
505
  anchorRef,
494
506
  "aria-multiselectable": isMulti,
495
507
  as: "ul",
508
+ isFocusable: false,
496
509
  isOpen,
497
510
  onClose: closeMenu,
498
511
  children
package/dist/index.mjs CHANGED
@@ -31,18 +31,18 @@ var __objRest = (source, exclude) => {
31
31
  };
32
32
 
33
33
  // src/Select.tsx
34
- import { Box } from "@dt-dds/react-box";
35
- import { Icon } from "@dt-dds/react-icon";
36
- import { IconButton } from "@dt-dds/react-icon-button";
37
- import { LabelField } from "@dt-dds/react-label-field";
38
- import { Tooltip } from "@dt-dds/react-tooltip";
39
- import * as Downshift from "downshift";
40
34
  import {
41
35
  Children,
42
36
  isValidElement,
43
37
  useMemo,
44
38
  useRef
45
39
  } from "react";
40
+ import * as Downshift from "downshift";
41
+ import { Box } from "@dt-dds/react-box";
42
+ import { Icon } from "@dt-dds/react-icon";
43
+ import { IconButton } from "@dt-dds/react-icon-button";
44
+ import { LabelField } from "@dt-dds/react-label-field";
45
+ import { Tooltip } from "@dt-dds/react-tooltip";
46
46
 
47
47
  // src/components/SelectOption.tsx
48
48
  import { Dropdown } from "@dt-dds/react-dropdown";
@@ -77,8 +77,8 @@ var SelectProvider = ({ children, value }) => {
77
77
  };
78
78
 
79
79
  // src/components/SelectOption.styled.ts
80
- import { Checkbox } from "@dt-dds/react-checkbox";
81
80
  import styled from "@emotion/styled";
81
+ import { Checkbox } from "@dt-dds/react-checkbox";
82
82
  var SelectCheckboxStyled = styled(Checkbox)`
83
83
  ${({ theme }) => `
84
84
  pointer-events: none;
@@ -120,10 +120,8 @@ var SelectOption = ({
120
120
  children: isMulti ? /* @__PURE__ */ jsx2(
121
121
  SelectCheckboxStyled,
122
122
  {
123
- "aria-hidden": "true",
124
123
  isChecked: isSelected,
125
124
  isDisabled,
126
- role: "presentation",
127
125
  tabIndex: -1,
128
126
  children
129
127
  }
@@ -133,9 +131,9 @@ var SelectOption = ({
133
131
  };
134
132
 
135
133
  // src/Select.styled.ts
134
+ import styled2 from "@emotion/styled";
136
135
  import { Dropdown as Dropdown2 } from "@dt-dds/react-dropdown";
137
136
  import { Typography } from "@dt-dds/react-typography";
138
- import styled2 from "@emotion/styled";
139
137
  var SelectStyled = styled2.div`
140
138
  position: relative;
141
139
  width: 100%;
@@ -155,9 +153,13 @@ var TypographyValueStyled = styled2(Typography, {
155
153
  text-overflow: ellipsis;
156
154
  white-space: nowrap;
157
155
 
158
- ${({ theme, scale, isFloatingLabel }) => `
159
- ${isFloatingLabel ? `padding-top: ${scale === "standard" ? theme.spacing.spacing_50 : theme.spacing.spacing_40};` : `padding-block: ${scale === "standard" ? theme.spacing.spacing_30 : theme.spacing.spacing_20};`}
160
- `}
156
+ ${({ theme, scale, isFloatingLabel }) => {
157
+ const paddingTop = scale === "standard" ? theme.spacing.spacing_50 : theme.spacing.spacing_40;
158
+ const paddingBlock = scale === "standard" ? theme.spacing.spacing_30 : theme.spacing.spacing_20;
159
+ return `
160
+ ${isFloatingLabel ? `padding-top: ${paddingTop};` : `padding-block: ${paddingBlock};`}
161
+ `;
162
+ }}
161
163
  `;
162
164
  var SelectContainerStyled = styled2.div`
163
165
  transition: border 0.2s ease-in-out;
@@ -310,6 +312,41 @@ var Select = ({
310
312
  }
311
313
  return selectedItems.length > 1 ? `${selectedItems.length} options selected` : (_a2 = selectedItems[0]) == null ? void 0 : _a2.label;
312
314
  };
315
+ const selectStateReducer = (state, actionAndChanges) => {
316
+ const { changes, type } = actionAndChanges;
317
+ switch (type) {
318
+ case useSelect.stateChangeTypes.ToggleButtonBlur:
319
+ return __spreadProps(__spreadValues({}, changes), {
320
+ isOpen: false,
321
+ selectedItem: state.selectedItem,
322
+ highlightedIndex: state.highlightedIndex
323
+ });
324
+ case useSelect.stateChangeTypes.ItemClick:
325
+ case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
326
+ case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:
327
+ return isMulti ? __spreadProps(__spreadValues({}, changes), {
328
+ isOpen: true,
329
+ highlightedIndex: state.highlightedIndex
330
+ }) : changes;
331
+ default:
332
+ return changes;
333
+ }
334
+ };
335
+ const handleSelectedItemChange = ({
336
+ selectedItem
337
+ }) => {
338
+ if (!selectedItem) {
339
+ return;
340
+ }
341
+ if (isMulti) {
342
+ const currentValue = Array.isArray(value) ? value : [];
343
+ const isSelectedItem = selectedOptionsSet.has(selectedItem.value);
344
+ const nextValue = isSelectedItem ? currentValue.filter((v) => v !== selectedItem.value) : [...currentValue, selectedItem.value];
345
+ onChange == null ? void 0 : onChange(nextValue);
346
+ return;
347
+ }
348
+ onChange == null ? void 0 : onChange(selectedItem.value);
349
+ };
313
350
  const {
314
351
  isOpen,
315
352
  closeMenu,
@@ -325,41 +362,16 @@ var Select = ({
325
362
  },
326
363
  defaultHighlightedIndex: isMulti || !(selectedItems == null ? void 0 : selectedItems[0]) ? 0 : void 0,
327
364
  selectedItem: !isMulti ? (_a = selectedItems == null ? void 0 : selectedItems[0]) != null ? _a : null : null,
328
- stateReducer(state, actionAndChanges) {
329
- const { changes, type } = actionAndChanges;
330
- switch (type) {
331
- case useSelect.stateChangeTypes.ToggleButtonBlur:
332
- return __spreadProps(__spreadValues({}, changes), {
333
- isOpen: false,
334
- selectedItem: state.selectedItem,
335
- highlightedIndex: state.highlightedIndex
336
- });
337
- case useSelect.stateChangeTypes.ItemClick:
338
- case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
339
- case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:
340
- return isMulti ? __spreadProps(__spreadValues({}, changes), {
341
- isOpen: true,
342
- highlightedIndex: state.highlightedIndex
343
- }) : changes;
344
- default:
345
- return changes;
346
- }
347
- },
348
- onSelectedItemChange: ({ selectedItem }) => {
349
- if (!selectedItem) {
350
- return;
351
- }
352
- if (isMulti) {
353
- const currentValue = Array.isArray(value) ? value : [];
354
- const isSelectedItem = selectedOptionsSet.has(selectedItem.value);
355
- const nextValue = isSelectedItem ? currentValue.filter((v) => v !== selectedItem.value) : [...currentValue, selectedItem.value];
356
- onChange == null ? void 0 : onChange(nextValue);
357
- return;
358
- }
359
- onChange == null ? void 0 : onChange(selectedItem.value);
360
- }
365
+ stateReducer: selectStateReducer,
366
+ onSelectedItemChange: handleSelectedItemChange
361
367
  });
362
368
  const disabled = isDisabled || options.length === 1;
369
+ const helperTextColor = (isDisabled2, hasError2) => {
370
+ if (isDisabled2) {
371
+ return "content.light";
372
+ }
373
+ return hasError2 ? "error.default" : "content.medium";
374
+ };
363
375
  const toggleProps = getToggleButtonProps({
364
376
  disabled,
365
377
  tabIndex: disabled ? -1 : 0,
@@ -451,7 +463,7 @@ var Select = ({
451
463
  helperText ? /* @__PURE__ */ jsx3(
452
464
  TypographyHelperTextStyled,
453
465
  {
454
- color: isDisabled ? "content.light" : hasError ? "error.default" : "content.medium",
466
+ color: helperTextColor(!!isDisabled, hasError),
455
467
  dataTestId: "select-helper-text",
456
468
  element: "span",
457
469
  fontStyles: "bodySmRegular",
@@ -465,6 +477,7 @@ var Select = ({
465
477
  anchorRef,
466
478
  "aria-multiselectable": isMulti,
467
479
  as: "ul",
480
+ isFocusable: false,
468
481
  isOpen,
469
482
  onClose: closeMenu,
470
483
  children
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dt-dds/react-select",
3
- "version": "1.0.0-beta.68",
3
+ "version": "1.0.0-beta.70",
4
4
  "license": "MIT",
5
5
  "exports": {
6
6
  ".": "./dist/index.js"
@@ -20,16 +20,16 @@
20
20
  "test:update:snapshot": "jest -u"
21
21
  },
22
22
  "dependencies": {
23
- "@dt-dds/react-box": "1.0.0-beta.56",
24
- "@dt-dds/react-checkbox": "1.0.0-beta.52",
25
- "@dt-dds/react-core": "1.0.0-beta.51",
26
- "@dt-dds/react-dropdown": "1.0.0-beta.77",
27
- "@dt-dds/react-icon": "1.0.0-beta.54",
28
- "@dt-dds/react-icon-button": "1.0.0-beta.20",
29
- "@dt-dds/react-label-field": "1.0.0-beta.52",
30
- "@dt-dds/react-tooltip": "1.0.0-beta.60",
31
- "@dt-dds/react-typography": "1.0.0-beta.42",
32
- "@dt-dds/themes": "1.0.0-beta.9",
23
+ "@dt-dds/react-box": "1.0.0-beta.58",
24
+ "@dt-dds/react-checkbox": "1.0.0-beta.53",
25
+ "@dt-dds/react-core": "1.0.0-beta.52",
26
+ "@dt-dds/react-dropdown": "1.0.0-beta.79",
27
+ "@dt-dds/react-icon": "1.0.0-beta.55",
28
+ "@dt-dds/react-icon-button": "1.0.0-beta.21",
29
+ "@dt-dds/react-label-field": "1.0.0-beta.53",
30
+ "@dt-dds/react-tooltip": "1.0.0-beta.61",
31
+ "@dt-dds/react-typography": "1.0.0-beta.43",
32
+ "@dt-dds/themes": "1.0.0-beta.10",
33
33
  "downshift": "^9.0.10"
34
34
  },
35
35
  "devDependencies": {