@sproutsocial/seeds-react-menu 1.16.16 → 1.17.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 (39) hide show
  1. package/.turbo/turbo-build.log +14 -14
  2. package/CHANGELOG.md +21 -0
  3. package/dist/esm/v3/index.js +90 -56
  4. package/dist/esm/v3/index.js.map +1 -1
  5. package/dist/v3/index.d.mts +18 -0
  6. package/dist/v3/index.d.ts +18 -0
  7. package/dist/v3/index.js +90 -56
  8. package/dist/v3/index.js.map +1 -1
  9. package/package.json +1 -1
  10. package/src/ActionMenu/ActionMenu.stories.tsx +1 -1
  11. package/src/Autocomplete/Autocomplete.stories.tsx +1 -1
  12. package/src/MenuContent/MenuContent.stories.tsx +1 -1
  13. package/src/MenuFooter/MenuFooter.stories.tsx +1 -1
  14. package/src/MenuGroup/MenuGroup.stories.tsx +1 -1
  15. package/src/MenuHeader/MenuHeader.stories.tsx +1 -1
  16. package/src/MenuItem/MenuItem.stories.tsx +1 -1
  17. package/src/MenuToggleButton/MenuToggleButton.stories.tsx +1 -1
  18. package/src/MultiSelectMenu/MultiSelectMenu.stories.tsx +1 -1
  19. package/src/NestedMenu/NestedMenu.stories.tsx +1 -1
  20. package/src/SingleSelectMenu/SingleSelectMenu.stories.tsx +1 -1
  21. package/src/SubmenuItem/SubmenuItem.stories.tsx +1 -1
  22. package/src/v2/Autocomplete/Autocomplete.stories.tsx +1 -1
  23. package/src/v2/Select/Select.stories.tsx +1 -1
  24. package/src/v3/ActionMenu.stories.tsx +1 -1
  25. package/src/v3/MenuButton.stories.tsx +1 -1
  26. package/src/v3/ModalStories.stories.tsx +1 -1
  27. package/src/v3/MultiCombobox.stories.tsx +1 -1
  28. package/src/v3/MultiCombobox.tsx +7 -0
  29. package/src/v3/MultiSearchableSelect.stories.tsx +1 -1
  30. package/src/v3/MultiSearchableSelect.tsx +7 -0
  31. package/src/v3/MultiSelect.stories.tsx +1 -1
  32. package/src/v3/MultiSelect.tsx +9 -1
  33. package/src/v3/SingleCombobox.stories.tsx +1 -1
  34. package/src/v3/SingleCombobox.tsx +7 -0
  35. package/src/v3/SingleSearchableSelect.stories.tsx +1 -1
  36. package/src/v3/SingleSearchableSelect.tsx +7 -0
  37. package/src/v3/SingleSelect.stories.tsx +1 -1
  38. package/src/v3/SingleSelect.tsx +9 -1
  39. package/src/v3/__tests__/ariaLabels.test.tsx +133 -0
@@ -15,6 +15,9 @@ interface SingleSelectBaseProps {
15
15
  placeholder?: string;
16
16
  includePlaceholderItem?: boolean;
17
17
  disabled?: boolean;
18
+ "aria-label"?: string;
19
+ /** Id of a visible label. Preferred over `aria-label`. */
20
+ "aria-labelledby"?: string;
18
21
  "aria-describedby"?: string;
19
22
  isInvalid?: boolean;
20
23
  required?: boolean;
@@ -53,6 +56,9 @@ interface MultiSelectBaseProps {
53
56
  id?: string;
54
57
  placeholder?: string;
55
58
  disabled?: boolean;
59
+ "aria-label"?: string;
60
+ /** Id of a visible label. Preferred over `aria-label`. */
61
+ "aria-labelledby"?: string;
56
62
  "aria-describedby"?: string;
57
63
  isInvalid?: boolean;
58
64
  required?: boolean;
@@ -99,6 +105,9 @@ interface SingleComboboxBaseProps {
99
105
  emptyText?: string;
100
106
  disabled?: boolean;
101
107
  filter?: ((item: unknown, query: string) => boolean) | null;
108
+ "aria-label"?: string;
109
+ /** Id of a visible label. Preferred over `aria-label`. */
110
+ "aria-labelledby"?: string;
102
111
  "aria-describedby"?: string;
103
112
  isInvalid?: boolean;
104
113
  required?: boolean;
@@ -150,6 +159,9 @@ interface MultiComboboxBaseProps {
150
159
  filter?: ((item: unknown, query: string) => boolean) | null;
151
160
  inputValue?: string;
152
161
  onInputValueChange?: (value: string) => void;
162
+ "aria-label"?: string;
163
+ /** Id of a visible label. Preferred over `aria-label`. */
164
+ "aria-labelledby"?: string;
153
165
  "aria-describedby"?: string;
154
166
  isInvalid?: boolean;
155
167
  required?: boolean;
@@ -210,6 +222,9 @@ interface SingleSearchableSelectBaseProps {
210
222
  loadingText?: string;
211
223
  disabled?: boolean;
212
224
  filter?: ((item: unknown, query: string) => boolean) | null;
225
+ "aria-label"?: string;
226
+ /** Id of a visible label. Preferred over `aria-label`. */
227
+ "aria-labelledby"?: string;
213
228
  "aria-describedby"?: string;
214
229
  isInvalid?: boolean;
215
230
  required?: boolean;
@@ -262,6 +277,9 @@ interface MultiSearchableSelectBaseProps {
262
277
  loadingText?: string;
263
278
  disabled?: boolean;
264
279
  filter?: ((item: unknown, query: string) => boolean) | null;
280
+ "aria-label"?: string;
281
+ /** Id of a visible label. Preferred over `aria-label`. */
282
+ "aria-labelledby"?: string;
265
283
  "aria-describedby"?: string;
266
284
  isInvalid?: boolean;
267
285
  required?: boolean;
@@ -15,6 +15,9 @@ interface SingleSelectBaseProps {
15
15
  placeholder?: string;
16
16
  includePlaceholderItem?: boolean;
17
17
  disabled?: boolean;
18
+ "aria-label"?: string;
19
+ /** Id of a visible label. Preferred over `aria-label`. */
20
+ "aria-labelledby"?: string;
18
21
  "aria-describedby"?: string;
19
22
  isInvalid?: boolean;
20
23
  required?: boolean;
@@ -53,6 +56,9 @@ interface MultiSelectBaseProps {
53
56
  id?: string;
54
57
  placeholder?: string;
55
58
  disabled?: boolean;
59
+ "aria-label"?: string;
60
+ /** Id of a visible label. Preferred over `aria-label`. */
61
+ "aria-labelledby"?: string;
56
62
  "aria-describedby"?: string;
57
63
  isInvalid?: boolean;
58
64
  required?: boolean;
@@ -99,6 +105,9 @@ interface SingleComboboxBaseProps {
99
105
  emptyText?: string;
100
106
  disabled?: boolean;
101
107
  filter?: ((item: unknown, query: string) => boolean) | null;
108
+ "aria-label"?: string;
109
+ /** Id of a visible label. Preferred over `aria-label`. */
110
+ "aria-labelledby"?: string;
102
111
  "aria-describedby"?: string;
103
112
  isInvalid?: boolean;
104
113
  required?: boolean;
@@ -150,6 +159,9 @@ interface MultiComboboxBaseProps {
150
159
  filter?: ((item: unknown, query: string) => boolean) | null;
151
160
  inputValue?: string;
152
161
  onInputValueChange?: (value: string) => void;
162
+ "aria-label"?: string;
163
+ /** Id of a visible label. Preferred over `aria-label`. */
164
+ "aria-labelledby"?: string;
153
165
  "aria-describedby"?: string;
154
166
  isInvalid?: boolean;
155
167
  required?: boolean;
@@ -210,6 +222,9 @@ interface SingleSearchableSelectBaseProps {
210
222
  loadingText?: string;
211
223
  disabled?: boolean;
212
224
  filter?: ((item: unknown, query: string) => boolean) | null;
225
+ "aria-label"?: string;
226
+ /** Id of a visible label. Preferred over `aria-label`. */
227
+ "aria-labelledby"?: string;
213
228
  "aria-describedby"?: string;
214
229
  isInvalid?: boolean;
215
230
  required?: boolean;
@@ -262,6 +277,9 @@ interface MultiSearchableSelectBaseProps {
262
277
  loadingText?: string;
263
278
  disabled?: boolean;
264
279
  filter?: ((item: unknown, query: string) => boolean) | null;
280
+ "aria-label"?: string;
281
+ /** Id of a visible label. Preferred over `aria-label`. */
282
+ "aria-labelledby"?: string;
265
283
  "aria-describedby"?: string;
266
284
  isInvalid?: boolean;
267
285
  required?: boolean;
package/dist/v3/index.js CHANGED
@@ -387,6 +387,8 @@ var StyledValue = (0, import_styled_components4.default)(import_select3.Select.V
387
387
  function SingleSelect(props) {
388
388
  const { id, placeholder, includePlaceholderItem, fullWidth = true } = props;
389
389
  const ariaDescribedBy = props["aria-describedby"];
390
+ const ariaLabel = props["aria-label"];
391
+ const ariaLabelledBy = props["aria-labelledby"];
390
392
  const isInvalid = props.isInvalid;
391
393
  const isChildrenMode = "children" in props && props.children != null;
392
394
  const selectedItemId = props.selectedItemId;
@@ -460,43 +462,50 @@ function SingleSelect(props) {
460
462
  ),
461
463
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_select3.Select.Portal, { container: portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(SelectPositioner, { sideOffset: 8, alignItemWithTrigger: false, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(SelectPopup, { children: [
462
464
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_select3.Select.ScrollUpArrow, {}),
463
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_select3.Select.List, { children: children ? children : groupBy ? groupItems(data, groupBy).map((group, index, arr) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(React4.Fragment, { children: [
464
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(SelectGroup, { children: [
465
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(SelectGroupLabel, { children: renderGroupHeading ? renderGroupHeading(group.value) : group.value }),
466
- group.items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
467
- SelectItem,
468
- {
469
- value: String(item.id),
470
- label: itemToString(item),
471
- disabled: item.disabled,
472
- inputType,
473
- renderItem: renderItem ? () => renderItem(item) : () => itemToString(item)
474
- },
475
- item.id
476
- ))
477
- ] }),
478
- index < arr.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(SelectSeparator, {})
479
- ] }, group.value)) : /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
480
- includePlaceholderItem && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
481
- SelectItem,
482
- {
483
- value: null,
484
- label: placeholder ?? ""
485
- },
486
- "placeholder"
487
- ),
488
- data.map((item) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
489
- SelectItem,
490
- {
491
- value: String(item.id),
492
- label: itemToString(item),
493
- disabled: item.disabled,
494
- inputType,
495
- renderItem: renderItem ? () => renderItem(item) : () => itemToString(item)
496
- },
497
- item.id
498
- ))
499
- ] }) }),
465
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
466
+ import_select3.Select.List,
467
+ {
468
+ "aria-label": ariaLabel,
469
+ "aria-labelledby": ariaLabelledBy,
470
+ children: children ? children : groupBy ? groupItems(data, groupBy).map((group, index, arr) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(React4.Fragment, { children: [
471
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(SelectGroup, { children: [
472
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(SelectGroupLabel, { children: renderGroupHeading ? renderGroupHeading(group.value) : group.value }),
473
+ group.items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
474
+ SelectItem,
475
+ {
476
+ value: String(item.id),
477
+ label: itemToString(item),
478
+ disabled: item.disabled,
479
+ inputType,
480
+ renderItem: renderItem ? () => renderItem(item) : () => itemToString(item)
481
+ },
482
+ item.id
483
+ ))
484
+ ] }),
485
+ index < arr.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(SelectSeparator, {})
486
+ ] }, group.value)) : /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
487
+ includePlaceholderItem && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
488
+ SelectItem,
489
+ {
490
+ value: null,
491
+ label: placeholder ?? ""
492
+ },
493
+ "placeholder"
494
+ ),
495
+ data.map((item) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
496
+ SelectItem,
497
+ {
498
+ value: String(item.id),
499
+ label: itemToString(item),
500
+ disabled: item.disabled,
501
+ inputType,
502
+ renderItem: renderItem ? () => renderItem(item) : () => itemToString(item)
503
+ },
504
+ item.id
505
+ ))
506
+ ] })
507
+ }
508
+ ),
500
509
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_select3.Select.ScrollDownArrow, {})
501
510
  ] }) }) })
502
511
  ]
@@ -527,6 +536,8 @@ var Placeholder = import_styled_components5.default.div`
527
536
  function MultiSelect(props) {
528
537
  const { id, placeholder = "Select...", fullWidth = true } = props;
529
538
  const ariaDescribedBy = props["aria-describedby"];
539
+ const ariaLabel = props["aria-label"];
540
+ const ariaLabelledBy = props["aria-labelledby"];
530
541
  const isInvalid = props.isInvalid;
531
542
  const isChildrenMode = "children" in props && props.children != null;
532
543
  const data = isChildrenMode ? [] : props.data;
@@ -612,10 +623,29 @@ function MultiSelect(props) {
612
623
  ),
613
624
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_select4.Select.Portal, { container: portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SelectPositioner, { sideOffset: 8, alignItemWithTrigger: false, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(SelectPopup, { children: [
614
625
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_select4.Select.ScrollUpArrow, {}),
615
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_select4.Select.List, { children: children ? children : groupBy ? groupItems(data, groupBy).map((group, index, arr) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(React5.Fragment, { children: [
616
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(SelectGroup, { children: [
617
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SelectGroupLabel, { children: renderGroupHeading ? renderGroupHeading(group.value) : group.value }),
618
- group.items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
626
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
627
+ import_select4.Select.List,
628
+ {
629
+ "aria-label": ariaLabel,
630
+ "aria-labelledby": ariaLabelledBy,
631
+ children: children ? children : groupBy ? groupItems(data, groupBy).map((group, index, arr) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(React5.Fragment, { children: [
632
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(SelectGroup, { children: [
633
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SelectGroupLabel, { children: renderGroupHeading ? renderGroupHeading(group.value) : group.value }),
634
+ group.items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
635
+ SelectItem,
636
+ {
637
+ value: String(item.id),
638
+ label: itemToString(item),
639
+ disabled: item.disabled,
640
+ inputType,
641
+ hidden: removeSelectedItems && value.includes(String(item.id)),
642
+ renderItem: renderItem ? () => renderItem(item) : void 0
643
+ },
644
+ item.id
645
+ ))
646
+ ] }),
647
+ index < arr.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SelectSeparator, {})
648
+ ] }, group.value)) : data.map((item) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
619
649
  SelectItem,
620
650
  {
621
651
  value: String(item.id),
@@ -623,24 +653,12 @@ function MultiSelect(props) {
623
653
  disabled: item.disabled,
624
654
  inputType,
625
655
  hidden: removeSelectedItems && value.includes(String(item.id)),
626
- renderItem: renderItem ? () => renderItem(item) : void 0
656
+ renderItem: renderItem ? () => renderItem(item) : () => itemToString(item)
627
657
  },
628
658
  item.id
629
659
  ))
630
- ] }),
631
- index < arr.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SelectSeparator, {})
632
- ] }, group.value)) : data.map((item) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
633
- SelectItem,
634
- {
635
- value: String(item.id),
636
- label: itemToString(item),
637
- disabled: item.disabled,
638
- inputType,
639
- hidden: removeSelectedItems && value.includes(String(item.id)),
640
- renderItem: renderItem ? () => renderItem(item) : () => itemToString(item)
641
- },
642
- item.id
643
- )) }),
660
+ }
661
+ ),
644
662
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_select4.Select.ScrollDownArrow, {})
645
663
  ] }) }) })
646
664
  ]
@@ -1439,6 +1457,8 @@ function SingleCombobox(props) {
1439
1457
  fullWidth = true
1440
1458
  } = props;
1441
1459
  const ariaDescribedBy = props["aria-describedby"];
1460
+ const ariaLabel = props["aria-label"];
1461
+ const ariaLabelledBy = props["aria-labelledby"];
1442
1462
  const isInvalid = props.isInvalid;
1443
1463
  const isChildrenMode = "children" in props && props.children != null;
1444
1464
  const data = isChildrenMode ? [] : props.data;
@@ -1542,6 +1562,8 @@ function SingleCombobox(props) {
1542
1562
  /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1543
1563
  ComboboxList,
1544
1564
  {
1565
+ "aria-label": ariaLabel,
1566
+ "aria-labelledby": ariaLabelledBy,
1545
1567
  style: isVirtualized ? {
1546
1568
  padding: 0,
1547
1569
  flex: 1,
@@ -1631,6 +1653,8 @@ function MultiCombobox(props) {
1631
1653
  fullWidth = true
1632
1654
  } = props;
1633
1655
  const ariaDescribedBy = props["aria-describedby"];
1656
+ const ariaLabel = props["aria-label"];
1657
+ const ariaLabelledBy = props["aria-labelledby"];
1634
1658
  const isInvalid = props.isInvalid;
1635
1659
  const isChildrenMode = "children" in props && props.children != null;
1636
1660
  const data = isChildrenMode ? [] : props.data;
@@ -1991,6 +2015,8 @@ function MultiCombobox(props) {
1991
2015
  /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1992
2016
  ComboboxList,
1993
2017
  {
2018
+ "aria-label": ariaLabel,
2019
+ "aria-labelledby": ariaLabelledBy,
1994
2020
  style: isVirtualized ? {
1995
2021
  padding: 0,
1996
2022
  flex: 1,
@@ -2088,6 +2114,8 @@ function SingleSearchableSelect(props) {
2088
2114
  fullWidth = true
2089
2115
  } = props;
2090
2116
  const ariaDescribedBy = props["aria-describedby"];
2117
+ const ariaLabel = props["aria-label"];
2118
+ const ariaLabelledBy = props["aria-labelledby"];
2091
2119
  const isInvalid = props.isInvalid;
2092
2120
  const isChildrenMode = "children" in props && props.children != null;
2093
2121
  const data = isChildrenMode ? [] : props.data;
@@ -2195,6 +2223,8 @@ function SingleSearchableSelect(props) {
2195
2223
  /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2196
2224
  SearchableSelectList,
2197
2225
  {
2226
+ "aria-label": ariaLabel,
2227
+ "aria-labelledby": ariaLabelledBy,
2198
2228
  style: isVirtualized ? {
2199
2229
  padding: 0,
2200
2230
  flex: 1,
@@ -2301,6 +2331,8 @@ function MultiSearchableSelect(props) {
2301
2331
  fullWidth = true
2302
2332
  } = props;
2303
2333
  const ariaDescribedBy = props["aria-describedby"];
2334
+ const ariaLabel = props["aria-label"];
2335
+ const ariaLabelledBy = props["aria-labelledby"];
2304
2336
  const isInvalid = props.isInvalid;
2305
2337
  const isChildrenMode = "children" in props && props.children != null;
2306
2338
  const data = isChildrenMode ? [] : props.data;
@@ -2605,6 +2637,8 @@ function MultiSearchableSelect(props) {
2605
2637
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
2606
2638
  SearchableSelectList,
2607
2639
  {
2640
+ "aria-label": ariaLabel,
2641
+ "aria-labelledby": ariaLabelledBy,
2608
2642
  style: isVirtualized ? {
2609
2643
  padding: 0,
2610
2644
  flex: 1,