@servicetitan/anvil2 1.28.0 → 1.29.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 (80) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/{Combobox-JAm3x-tw.js → Combobox-DCrEfyl2.js} +235 -124
  3. package/dist/Combobox-DCrEfyl2.js.map +1 -0
  4. package/dist/Combobox.css +100 -68
  5. package/dist/Combobox.js +1 -1
  6. package/dist/{DateField-5mNXaJ7q.js → DateField-4jR9NvbC.js} +327 -320
  7. package/dist/DateField-4jR9NvbC.js.map +1 -0
  8. package/dist/DateField.js +1 -1
  9. package/dist/{Dialog-B4M0DXxG.js → Dialog-CL3bfZuB.js} +2 -2
  10. package/dist/{Dialog-B4M0DXxG.js.map → Dialog-CL3bfZuB.js.map} +1 -1
  11. package/dist/{Dialog-CUK5YvVY-Dv5edacC.js → Dialog-CYBt_JdP-CmF0MUHL.js} +77 -48
  12. package/dist/Dialog-CYBt_JdP-CmF0MUHL.js.map +1 -0
  13. package/dist/Dialog.js +1 -1
  14. package/dist/{Drawer-BqqZB3Sn.js → Drawer-8nHrKktU.js} +2 -2
  15. package/dist/{Drawer-BqqZB3Sn.js.map → Drawer-8nHrKktU.js.map} +1 -1
  16. package/dist/{Drawer-CrXiK2w0-BMzKuNFt.js → Drawer-UQlX-LQG-BSCnMRad.js} +84 -57
  17. package/dist/Drawer-UQlX-LQG-BSCnMRad.js.map +1 -0
  18. package/dist/{Drawer-CrXiK2w0.css → Drawer-UQlX-LQG.css} +26 -25
  19. package/dist/Drawer.js +1 -1
  20. package/dist/InputMask-B8N8PP1W-DlUKpMR4.js +323 -0
  21. package/dist/InputMask-B8N8PP1W-DlUKpMR4.js.map +1 -0
  22. package/dist/{InputMask-BmXj5mob.js → InputMask-jsL7rSOk.js} +2 -2
  23. package/dist/{InputMask-BmXj5mob.js.map → InputMask-jsL7rSOk.js.map} +1 -1
  24. package/dist/InputMask.js +1 -1
  25. package/dist/{Label-CbYy5kwu-BCTOKxOk.js → Label-CUVr-jvI-BXhER5eQ.js} +3 -3
  26. package/dist/{Label-CbYy5kwu-BCTOKxOk.js.map → Label-CUVr-jvI-BXhER5eQ.js.map} +1 -1
  27. package/dist/{Menu-IEBrkdoN.js → Menu-CsfX8-_z.js} +4 -3
  28. package/dist/Menu-CsfX8-_z.js.map +1 -0
  29. package/dist/Menu.js +1 -1
  30. package/dist/{Page-qlpHVAMH.js → Page-vKi5JkDS.js} +5 -5
  31. package/dist/{Page-qlpHVAMH.js.map → Page-vKi5JkDS.js.map} +1 -1
  32. package/dist/Page.js +1 -1
  33. package/dist/{Popover-B7K3o_l4.js → Popover-OFlyW8gN.js} +2 -2
  34. package/dist/{Popover-B7K3o_l4.js.map → Popover-OFlyW8gN.js.map} +1 -1
  35. package/dist/{Popover-C1B3UJXp-B5obSIvA.js → Popover-tu_N1aS6-CSLR1Xzc.js} +5 -5
  36. package/dist/Popover-tu_N1aS6-CSLR1Xzc.js.map +1 -0
  37. package/dist/Popover.js +1 -1
  38. package/dist/{ProgressBar-BLg29adn-CMz5eu5f.js → ProgressBar-DQ1lsFk2-Ci4eqzM0.js} +3 -3
  39. package/dist/{ProgressBar-BLg29adn-CMz5eu5f.js.map → ProgressBar-DQ1lsFk2-Ci4eqzM0.js.map} +1 -1
  40. package/dist/{ProgressBar-_DyYSgfx.js → ProgressBar-gVRLaKPz.js} +2 -2
  41. package/dist/{ProgressBar-_DyYSgfx.js.map → ProgressBar-gVRLaKPz.js.map} +1 -1
  42. package/dist/ProgressBar.js +1 -1
  43. package/dist/{TextField-Lwe9XAou-tH8gcQTq.js → TextField-B8LHWOoC-DSV9zY-z.js} +2 -2
  44. package/dist/{TextField-Lwe9XAou-tH8gcQTq.js.map → TextField-B8LHWOoC-DSV9zY-z.js.map} +1 -1
  45. package/dist/{TextField-tF-ERwA8.js → TextField-DgxJO1a7.js} +2 -2
  46. package/dist/{TextField-tF-ERwA8.js.map → TextField-DgxJO1a7.js.map} +1 -1
  47. package/dist/TextField.js +1 -1
  48. package/dist/{Textarea-BrzxOEx3.js → Textarea-B-Dv2RXs.js} +2 -2
  49. package/dist/Textarea-B-Dv2RXs.js.map +1 -0
  50. package/dist/Textarea.js +1 -1
  51. package/dist/Toast.js +1 -1
  52. package/dist/{Toolbar-D9fMSiGU.js → Toolbar-7BeCY61H.js} +2 -2
  53. package/dist/{Toolbar-D9fMSiGU.js.map → Toolbar-7BeCY61H.js.map} +1 -1
  54. package/dist/Toolbar.js +1 -1
  55. package/dist/{Tooltip-BEo0IRDf.js → Tooltip-BVBq-KxK.js} +2 -2
  56. package/dist/{Tooltip-BEo0IRDf.js.map → Tooltip-BVBq-KxK.js.map} +1 -1
  57. package/dist/{Tooltip-36nMbVT3-DMkvo60s.js → Tooltip-C8sCGmKM-CLrDofvy.js} +4 -4
  58. package/dist/{Tooltip-36nMbVT3-DMkvo60s.js.map → Tooltip-C8sCGmKM-CLrDofvy.js.map} +1 -1
  59. package/dist/Tooltip.js +1 -1
  60. package/dist/components/Dialog/Dialog.d.ts +1 -0
  61. package/dist/components/Drawer/Drawer.d.ts +1 -0
  62. package/dist/index.js +14 -14
  63. package/dist/{toast-DkO9HWpH.js → toast-CbokOkfo.js} +6 -2
  64. package/dist/toast-CbokOkfo.js.map +1 -0
  65. package/package.json +3 -3
  66. package/dist/Combobox-JAm3x-tw.js.map +0 -1
  67. package/dist/DateField-5mNXaJ7q.js.map +0 -1
  68. package/dist/Dialog-CUK5YvVY-Dv5edacC.js.map +0 -1
  69. package/dist/Drawer-CrXiK2w0-BMzKuNFt.js.map +0 -1
  70. package/dist/InputMask-CQzrMoEy-CLNvXsm7.js +0 -195
  71. package/dist/InputMask-CQzrMoEy-CLNvXsm7.js.map +0 -1
  72. package/dist/Menu-IEBrkdoN.js.map +0 -1
  73. package/dist/Popover-C1B3UJXp-B5obSIvA.js.map +0 -1
  74. package/dist/Textarea-BrzxOEx3.js.map +0 -1
  75. package/dist/toast-DkO9HWpH.js.map +0 -1
  76. /package/dist/{Dialog-CUK5YvVY.css → Dialog-CYBt_JdP.css} +0 -0
  77. /package/dist/{Label-CbYy5kwu.css → Label-CUVr-jvI.css} +0 -0
  78. /package/dist/{Popover-C1B3UJXp.css → Popover-tu_N1aS6.css} +0 -0
  79. /package/dist/{ProgressBar-BLg29adn.css → ProgressBar-DQ1lsFk2.css} +0 -0
  80. /package/dist/{Tooltip-36nMbVT3.css → Tooltip-C8sCGmKM.css} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @servicetitan/anvil2
2
2
 
3
+ ## 1.29.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#1143](https://github.com/servicetitan/hammer/pull/1143) [`a783c92`](https://github.com/servicetitan/hammer/commit/a783c92caa122b604f20accb599d1ff6625de951) Thanks [@AdamLantz](https://github.com/AdamLantz)! - [Combobox] Add support for grouping Combobox options
8
+
9
+ - [#1153](https://github.com/servicetitan/hammer/pull/1153) [`326735c`](https://github.com/servicetitan/hammer/commit/326735cd8805190e971d6a88ee33a70df7ec782c) Thanks [@w-a-t-s-o-n](https://github.com/w-a-t-s-o-n)! - [toast] Add `onDismiss` to `toast` methods
10
+
11
+ ### Patch Changes
12
+
13
+ - [#1125](https://github.com/servicetitan/hammer/pull/1125) [`3570a1c`](https://github.com/servicetitan/hammer/commit/3570a1c63fbfa1509a1a6bd4c67c5bb5848f39e5) Thanks [@pbuckingham-st](https://github.com/pbuckingham-st)! - [DateField] Better handling of inputs and accepting default states
14
+
15
+ - [#1145](https://github.com/servicetitan/hammer/pull/1145) [`21b1215`](https://github.com/servicetitan/hammer/commit/21b12159e07ef53c47bde1313bc395c6002a54ec) Thanks [@tounsoo](https://github.com/tounsoo)! - [PopoverLegacy] Fix PopoverLegacyButton to handle undefined children
16
+
17
+ - [#1124](https://github.com/servicetitan/hammer/pull/1124) [`bf2eb9f`](https://github.com/servicetitan/hammer/commit/bf2eb9f7225eb94ff3dad2749b6ada920986e4a3) Thanks [@tounsoo](https://github.com/tounsoo)! - [Dialog, Drawer] Reimplement fix contained scrolling when Dialog or Drawer is open and new `enableScrollChaining` prop is `false` (default)
18
+
19
+ - [#1145](https://github.com/servicetitan/hammer/pull/1145) [`21b1215`](https://github.com/servicetitan/hammer/commit/21b12159e07ef53c47bde1313bc395c6002a54ec) Thanks [@tounsoo](https://github.com/tounsoo)! - [Menu] Add `root` prop to Menu for fallback usages
20
+
21
+ - Updated dependencies [[`a783c92`](https://github.com/servicetitan/hammer/commit/a783c92caa122b604f20accb599d1ff6625de951), [`3570a1c`](https://github.com/servicetitan/hammer/commit/3570a1c63fbfa1509a1a6bd4c67c5bb5848f39e5), [`21b1215`](https://github.com/servicetitan/hammer/commit/21b12159e07ef53c47bde1313bc395c6002a54ec), [`326735c`](https://github.com/servicetitan/hammer/commit/326735cd8805190e971d6a88ee33a70df7ec782c), [`bf2eb9f`](https://github.com/servicetitan/hammer/commit/bf2eb9f7225eb94ff3dad2749b6ada920986e4a3), [`21b1215`](https://github.com/servicetitan/hammer/commit/21b12159e07ef53c47bde1313bc395c6002a54ec)]:
22
+ - @servicetitan/hammer-react@1.30.0
23
+
3
24
  ## 1.28.0
4
25
 
5
26
  ### Minor Changes
@@ -117,6 +138,15 @@
117
138
  - @servicetitan/hammer-react@1.29.0
118
139
  - @servicetitan/hammer-token@2.2.0
119
140
 
141
+ ## 1.26.5
142
+
143
+ ### Patch Changes
144
+
145
+ - [#1144](https://github.com/servicetitan/hammer/pull/1144) [`6e92522`](https://github.com/servicetitan/hammer/commit/6e925224b4cf56c49ccbb215a28f20ec3156790c) Thanks [@tounsoo](https://github.com/tounsoo)! - [PopoverLegacy] Fix PopoverLegacyButton to handle undefined children
146
+
147
+ - Updated dependencies [[`6e92522`](https://github.com/servicetitan/hammer/commit/6e925224b4cf56c49ccbb215a28f20ec3156790c)]:
148
+ - @servicetitan/hammer-react@1.28.5
149
+
120
150
  ## 1.26.4
121
151
 
122
152
  ### Patch Changes
@@ -3,10 +3,11 @@ import { useTrackingId } from './useTrackingId.js';
3
3
  import React__default, { useRef, useCallback, useEffect, useMemo, cloneElement, useLayoutEffect, useReducer, Component, createContext, useState, useId, useContext, useDeferredValue } from 'react';
4
4
  import { g as getDefaultExportFromCjs, c as cx } from './index-tZvMCc77.js';
5
5
  import { a as _extends, _ as _objectWithoutPropertiesLoose } from './extends-Bg2s_OKl.js';
6
- import { e as PopoverLegacy, u as usePopoverLegacyContext, d as Popover, f as usePopoverContext } from './Popover-C1B3UJXp-B5obSIvA.js';
6
+ import { e as PopoverLegacy, u as usePopoverLegacyContext, d as Popover, f as usePopoverContext } from './Popover-tu_N1aS6-CSLR1Xzc.js';
7
+ import { s as styles$3 } from './Listbox.module-CJuWm7RR-CJuWm7RR.js';
7
8
  import { s as supportsPopover } from './supportsPopover-8aJR37cf-8aJR37cf.js';
8
9
  import { F as Flex } from './Flex-pdHNcZrF-CdQdYhOU.js';
9
- import { L as Label } from './Label-CbYy5kwu-BCTOKxOk.js';
10
+ import { L as Label } from './Label-CUVr-jvI-BXhER5eQ.js';
10
11
  import { B as Button } from './Button-Ce--YZ9L-Csh0Zzuf.js';
11
12
  import { C as Chip } from './Chip-CAxTyjIZ-DfkCTnYy.js';
12
13
  import { S as SvgClose } from './close-DZj38AEh.js';
@@ -14,7 +15,6 @@ import { S as SvgChevronRight } from './chevron_right-BdpsxX7x.js';
14
15
  import { H as Helper } from './Helper-Ba5DBS51-DBtASfJG.js';
15
16
  import { T as Text } from './Text-C2n3GDdC-rz_AelM0.js';
16
17
  import { S as Spinner } from './Spinner-DdirfhPp-c7cDfIit.js';
17
- import { s as styles$3 } from './Listbox.module-CJuWm7RR-CJuWm7RR.js';
18
18
  import { s as styles$2 } from './ListView.module-BqvHsIQ9-BqvHsIQ9.js';
19
19
  import { I as Icon$2 } from './Icon-DbHA5GV1-DwO2aGkj.js';
20
20
  import { c as checkboxStyles, a as SvgIndeterminateCheckBox, S as SvgCheckBox, b as SvgCheckBoxOutlineBlank } from './Checkbox.module-DMrZNVpb-DL8zOKBQ.js';
@@ -8081,54 +8081,57 @@ const ComboboxLegacyEmpty = function({
8081
8081
  return !items.length ? children : null;
8082
8082
  };
8083
8083
 
8084
- const item = "_item_1ued6_5";
8085
- const input = "_input_1ued6_18";
8086
- const prefix = "_prefix_1ued6_46";
8087
- const suffix = "_suffix_1ued6_47";
8088
- const combobox = "_combobox_1ued6_62";
8089
- const select = "_select_1ued6_71";
8090
- const chip = "_chip_1ued6_167";
8091
- const listview = "_listview_1ued6_208";
8092
- const empty = "_empty_1ued6_216";
8093
- const children = "_children_1ued6_244";
8094
- const Icon = "_Icon_1ued6_247";
8095
- const small = "_small_1ued6_252";
8096
- const large = "_large_1ued6_255";
8097
- const error = "_error_1ued6_273";
8098
- const disabled = "_disabled_1ued6_286";
8084
+ const item = "_item_pdvrn_5";
8085
+ const group = "_group_pdvrn_18";
8086
+ const input = "_input_pdvrn_31";
8087
+ const prefix = "_prefix_pdvrn_59";
8088
+ const suffix = "_suffix_pdvrn_60";
8089
+ const combobox = "_combobox_pdvrn_75";
8090
+ const select = "_select_pdvrn_84";
8091
+ const chip = "_chip_pdvrn_180";
8092
+ const listview = "_listview_pdvrn_221";
8093
+ const empty = "_empty_pdvrn_229";
8094
+ const children = "_children_pdvrn_271";
8095
+ const Icon = "_Icon_pdvrn_274";
8096
+ const small = "_small_pdvrn_279";
8097
+ const large = "_large_pdvrn_282";
8098
+ const error = "_error_pdvrn_300";
8099
+ const disabled = "_disabled_pdvrn_313";
8099
8100
  const styles = {
8100
- "buttons-wrapper": "_buttons-wrapper_1ued6_3",
8101
- "search-field": "_search-field_1ued6_4",
8101
+ "buttons-wrapper": "_buttons-wrapper_pdvrn_3",
8102
+ "search-field": "_search-field_pdvrn_4",
8102
8103
  item: item,
8104
+ group: group,
8103
8105
  input: input,
8104
- "input-wrapper": "_input-wrapper_1ued6_19",
8105
- "toggle-button-wrapper": "_toggle-button-wrapper_1ued6_32",
8106
- "close-button-wrapper": "_close-button-wrapper_1ued6_33",
8106
+ "input-wrapper": "_input-wrapper_pdvrn_32",
8107
+ "toggle-button-wrapper": "_toggle-button-wrapper_pdvrn_45",
8108
+ "close-button-wrapper": "_close-button-wrapper_pdvrn_46",
8107
8109
  prefix: prefix,
8108
8110
  suffix: suffix,
8109
8111
  combobox: combobox,
8110
8112
  select: select,
8111
- "popover-content": "_popover-content_1ued6_74",
8112
- "no-clear-button": "_no-clear-button_1ued6_93",
8113
- "input-flex": "_input-flex_1ued6_96",
8114
- "fake-placeholder": "_fake-placeholder_1ued6_124",
8115
- "close-button": "_close-button_1ued6_33",
8116
- "toggle-button": "_toggle-button_1ued6_32",
8117
- "rows-wrapper": "_rows-wrapper_1ued6_157",
8118
- "chip-wrapper": "_chip-wrapper_1ued6_167",
8113
+ "popover-content": "_popover-content_pdvrn_87",
8114
+ "no-clear-button": "_no-clear-button_pdvrn_106",
8115
+ "input-flex": "_input-flex_pdvrn_109",
8116
+ "fake-placeholder": "_fake-placeholder_pdvrn_137",
8117
+ "close-button": "_close-button_pdvrn_46",
8118
+ "toggle-button": "_toggle-button_pdvrn_45",
8119
+ "rows-wrapper": "_rows-wrapper_pdvrn_170",
8120
+ "chip-wrapper": "_chip-wrapper_pdvrn_180",
8119
8121
  chip: chip,
8120
8122
  listview: listview,
8121
- "loading-spinner": "_loading-spinner_1ued6_212",
8123
+ "loading-spinner": "_loading-spinner_pdvrn_225",
8122
8124
  empty: empty,
8125
+ "group-title": "_group-title_pdvrn_240",
8123
8126
  children: children,
8124
8127
  Icon: Icon,
8125
8128
  small: small,
8126
8129
  large: large,
8127
8130
  error: error,
8128
- "loading-infinite": "_loading-infinite_1ued6_286",
8129
- "loading-progress": "_loading-progress_1ued6_286",
8131
+ "loading-infinite": "_loading-infinite_pdvrn_313",
8132
+ "loading-progress": "_loading-progress_pdvrn_313",
8130
8133
  disabled: disabled,
8131
- "listview-option": "_listview-option_1ued6_304"
8134
+ "listview-option": "_listview-option_pdvrn_331"
8132
8135
  };
8133
8136
 
8134
8137
  const ComboboxTrigger = ({
@@ -8464,6 +8467,9 @@ const ComboboxSelectTrigger$1 = (props) => {
8464
8467
  return /* @__PURE__ */ jsx(ComboboxTrigger, { ...props, variant: "select" });
8465
8468
  };
8466
8469
 
8470
+ const ComboboxGroupContext = createContext(null);
8471
+ const ComboboxGroupProvider = ComboboxGroupContext.Provider;
8472
+
8467
8473
  const ComboboxContentElement = function({
8468
8474
  children,
8469
8475
  className,
@@ -8482,7 +8488,8 @@ const ComboboxContentElement = function({
8482
8488
  isDisabled,
8483
8489
  isReadOnly,
8484
8490
  contentRef,
8485
- closeMenu
8491
+ closeMenu,
8492
+ groups
8486
8493
  } = useCombobox();
8487
8494
  const ComboboxPopoverContentClassNames = cx(
8488
8495
  styles["popover-content"],
@@ -8499,6 +8506,37 @@ const ComboboxContentElement = function({
8499
8506
  if (context?.controlled) return;
8500
8507
  context?.popover.close?.(closeMenu);
8501
8508
  };
8509
+ const resolveChildren = (groupItems) => children?.({
8510
+ items: groupItems,
8511
+ inputValue,
8512
+ selectedItem,
8513
+ getMenuProps,
8514
+ getItemProps,
8515
+ listProps: {
8516
+ ...getMenuProps({}, { suppressRefError: true }),
8517
+ style: {
8518
+ display: groupItems.length ? undefined : "none",
8519
+ overflow: "auto"
8520
+ }
8521
+ },
8522
+ options: items.map((item, index) => ({
8523
+ optionProps: {
8524
+ ...getItemProps({
8525
+ item,
8526
+ index
8527
+ }),
8528
+ tabIndex: disablePopover ? -1 : undefined,
8529
+ selected: itemToKey(selectedItem) === itemToKey(item) || selectedItems.some(
8530
+ (selectedItem2) => itemToKey(selectedItem2) === itemToKey(item)
8531
+ ),
8532
+ disabled: !!isDisabled || !!isReadOnly
8533
+ // also see "isItemDisabled" function
8534
+ },
8535
+ item,
8536
+ index
8537
+ }))
8538
+ });
8539
+ const id = useId();
8502
8540
  return disablePopover ? /* @__PURE__ */ jsx(
8503
8541
  "div",
8504
8542
  {
@@ -8506,35 +8544,27 @@ const ComboboxContentElement = function({
8506
8544
  className: ComboboxPopoverContentClassNames,
8507
8545
  ref: contentRef,
8508
8546
  onBlur: handleBlur,
8509
- children: children ? children({
8510
- items,
8511
- inputValue,
8512
- selectedItem,
8513
- getMenuProps,
8514
- getItemProps,
8515
- listProps: {
8516
- ...getMenuProps({}, { suppressRefError: true }),
8517
- style: {
8518
- display: items.length ? "" : "none",
8519
- overflow: "auto"
8520
- }
8521
- },
8522
- options: items.map((item, index) => ({
8523
- optionProps: {
8524
- ...getItemProps({
8525
- item,
8526
- index
8527
- }),
8528
- selected: itemToKey(selectedItem) === itemToKey(item) || selectedItems.some(
8529
- (selectedItem2) => itemToKey(selectedItem2) === itemToKey(item)
8547
+ children: groups?.length ? groups.map((group) => /* @__PURE__ */ jsx(ComboboxGroupProvider, { value: group, children: /* @__PURE__ */ jsx(
8548
+ "ul",
8549
+ {
8550
+ "aria-labelledby": `${id}-group-${group.key}`,
8551
+ className: cx(styles["group"], styles$3["listbox"]),
8552
+ "data-anv": "combobox-group",
8553
+ role: "group",
8554
+ children: /* @__PURE__ */ jsxs("li", { children: [
8555
+ /* @__PURE__ */ jsx(
8556
+ Text,
8557
+ {
8558
+ className: styles["group-title"],
8559
+ id: `${id}-group-${group.key}`,
8560
+ variant: "eyebrow",
8561
+ children: group.label
8562
+ }
8530
8563
  ),
8531
- disabled: !!isDisabled || !!isReadOnly
8532
- // also see "isItemDisabled" function
8533
- },
8534
- item,
8535
- index
8536
- }))
8537
- }) : null
8564
+ resolveChildren(group.items)
8565
+ ] })
8566
+ }
8567
+ ) }, group.key)) : resolveChildren(items)
8538
8568
  }
8539
8569
  ) : /* @__PURE__ */ jsx(
8540
8570
  Popover.Content,
@@ -8545,36 +8575,27 @@ const ComboboxContentElement = function({
8545
8575
  ref: getMenuProps({ ref: contentRef }, { suppressRefError: true }).ref,
8546
8576
  tabIndex: -1,
8547
8577
  onBlur: handleBlur,
8548
- children: children ? children({
8549
- items,
8550
- inputValue,
8551
- selectedItem,
8552
- getMenuProps,
8553
- getItemProps,
8554
- listProps: {
8555
- ...getMenuProps({}, { suppressRefError: true }),
8556
- style: {
8557
- display: items.length ? undefined : "none",
8558
- overflow: "auto"
8559
- }
8560
- },
8561
- options: items.map((item, index) => ({
8562
- optionProps: {
8563
- ...getItemProps({
8564
- item,
8565
- index
8566
- }),
8567
- tabIndex: -1,
8568
- selected: itemToKey(selectedItem) === itemToKey(item) || selectedItems.some(
8569
- (selectedItem2) => itemToKey(selectedItem2) === itemToKey(item)
8578
+ children: groups?.length ? groups.map((group) => /* @__PURE__ */ jsx(ComboboxGroupProvider, { value: group, children: /* @__PURE__ */ jsx(
8579
+ "ul",
8580
+ {
8581
+ "aria-labelledby": `${id}-group-${group.key}`,
8582
+ className: cx(styles["group"], styles$3["listbox"]),
8583
+ "data-anv": "combobox-group",
8584
+ role: "group",
8585
+ children: /* @__PURE__ */ jsxs("li", { children: [
8586
+ /* @__PURE__ */ jsx(
8587
+ Text,
8588
+ {
8589
+ className: styles["group-title"],
8590
+ id: `${id}-group-${group.key}`,
8591
+ variant: "eyebrow",
8592
+ children: group.label
8593
+ }
8570
8594
  ),
8571
- disabled: !!isDisabled || !!isReadOnly
8572
- // also see "isItemDisabled" function
8573
- },
8574
- item,
8575
- index
8576
- }))
8577
- }) : null
8595
+ resolveChildren(group.items)
8596
+ ] })
8597
+ }
8598
+ ) }, group.key)) : resolveChildren(items)
8578
8599
  }
8579
8600
  );
8580
8601
  };
@@ -8669,7 +8690,7 @@ const ComboboxItemElement = function({
8669
8690
  children,
8670
8691
  disabled: disabledProp,
8671
8692
  item,
8672
- index,
8693
+ index: indexProp,
8673
8694
  alignItems,
8674
8695
  justifyItems,
8675
8696
  alignContent,
@@ -8689,8 +8710,11 @@ const ComboboxItemElement = function({
8689
8710
  selectedItems,
8690
8711
  disabledItems,
8691
8712
  setDisabledItems,
8692
- highlightedIndex
8713
+ highlightedIndex,
8714
+ items,
8715
+ groupBy
8693
8716
  } = useCombobox();
8717
+ const index = groupBy ? items.indexOf(item) : indexProp;
8694
8718
  const disabled = disabledProp || item && item instanceof Object && "disabled" in item && item.disabled;
8695
8719
  useEffect(() => {
8696
8720
  if (disabledProp && !disabledItems.includes(item)) {
@@ -8915,6 +8939,40 @@ const useDownshiftEnvironment = () => {
8915
8939
  return { ref: wrapperDivRef, environment };
8916
8940
  };
8917
8941
 
8942
+ function useGroups({
8943
+ items,
8944
+ groupBy,
8945
+ groupToString,
8946
+ groupSorter = (a, b) => `${a}`.localeCompare(`${b}`)
8947
+ }) {
8948
+ const { groups, orderedItems } = useMemo(() => {
8949
+ if (!groupBy) return { groups: [], orderedItems: items };
8950
+ const groupsSansItems = [];
8951
+ const groupedItems = {};
8952
+ items.forEach((item) => {
8953
+ const groupKey = item[groupBy];
8954
+ if (!groupedItems[groupKey]) {
8955
+ groupedItems[groupKey] = [];
8956
+ }
8957
+ groupedItems[groupKey].push(item);
8958
+ });
8959
+ Object.keys(groupedItems).forEach((key) => {
8960
+ groupsSansItems.push({ key, label: groupToString?.(key) ?? key });
8961
+ });
8962
+ groupsSansItems.sort((a, b) => groupSorter(a.key, b.key));
8963
+ const orderedItems2 = [];
8964
+ const groups2 = groupsSansItems.map((group) => ({
8965
+ ...group,
8966
+ items: groupedItems[group.key].map((item) => {
8967
+ orderedItems2.push(item);
8968
+ return item;
8969
+ })
8970
+ }));
8971
+ return { groups: groups2, orderedItems: orderedItems2 };
8972
+ }, [groupBy, groupSorter, groupToString, items]);
8973
+ return { groups, orderedItems };
8974
+ }
8975
+
8918
8976
  const ADD_NEW = Symbol.for("add-new");
8919
8977
  const ComboboxContext = createContext(null);
8920
8978
  const useCombobox = function() {
@@ -8952,6 +9010,9 @@ const ComboboxSingle = function(props) {
8952
9010
  root,
8953
9011
  onInputValueChange,
8954
9012
  environment: environmentProp,
9013
+ groupBy,
9014
+ groupToString,
9015
+ groupSorter,
8955
9016
  ...rest
8956
9017
  } = componentProps;
8957
9018
  const ComboboxClassNames = cx(styles["combobox"], className);
@@ -8971,10 +9032,22 @@ const ComboboxSingle = function(props) {
8971
9032
  closeMenu();
8972
9033
  };
8973
9034
  const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();
9035
+ const { orderedItems: allItemsOrderedByGroup } = useGroups({
9036
+ items: itemsProp,
9037
+ groupBy,
9038
+ groupToString,
9039
+ groupSorter
9040
+ });
9041
+ const { groups: searchedGroups, orderedItems: searchedItemsOrderedByGroup } = useGroups({
9042
+ items,
9043
+ groupBy,
9044
+ groupToString,
9045
+ groupSorter
9046
+ });
8974
9047
  const showAddNew = hasAddNew && !hasExactMatch;
8975
9048
  const combinedItems = useMemo(
8976
- () => showAddNew ? [...items, ADD_NEW] : items,
8977
- [items, showAddNew]
9049
+ () => showAddNew ? [...searchedItemsOrderedByGroup, ADD_NEW] : searchedItemsOrderedByGroup,
9050
+ [searchedItemsOrderedByGroup, showAddNew]
8978
9051
  );
8979
9052
  const itemToString = itemToStringProp ?? defaultItemToString;
8980
9053
  const itemToKey = itemToKeyProp ?? defaultItemToKey;
@@ -9039,18 +9112,20 @@ const ComboboxSingle = function(props) {
9039
9112
  const inputValueMatchesSelectedItem = selectedItem2 != null && inputValue2 === itemToString(selectedItem2);
9040
9113
  const inputValueIsEmpty = inputValue2 == null || inputValue2 === "";
9041
9114
  if (type === useCombobox$1.stateChangeTypes.InputKeyDownEnter || type === useCombobox$1.stateChangeTypes.ItemClick) {
9042
- setItems(itemsProp);
9115
+ setItems(allItemsOrderedByGroup);
9043
9116
  setHasExactMatch(true);
9044
9117
  } else if (!inputValueMatchesSelectedItem && !inputValueIsEmpty && !disableFilter) {
9045
- setItems(matchSorter(itemsProp, inputValue2, filterOptions));
9118
+ setItems(
9119
+ matchSorter(allItemsOrderedByGroup, inputValue2, filterOptions)
9120
+ );
9046
9121
  setHasExactMatch(
9047
- matchSorter(itemsProp, inputValue2, {
9122
+ matchSorter(allItemsOrderedByGroup, inputValue2, {
9048
9123
  ...filterOptions,
9049
9124
  threshold: matchSorter.rankings.EQUAL
9050
9125
  }).length > 0
9051
9126
  );
9052
9127
  } else {
9053
- setItems(itemsProp);
9128
+ setItems(allItemsOrderedByGroup);
9054
9129
  setHasExactMatch(true);
9055
9130
  }
9056
9131
  }),
@@ -9062,7 +9137,7 @@ const ComboboxSingle = function(props) {
9062
9137
  onIsOpenChange({ isOpen: isOpen2, inputValue: inputValue2, selectedItem: selectedItem2 }) {
9063
9138
  if (isOpen2 === false) {
9064
9139
  setTimeout(() => {
9065
- setItems(itemsProp);
9140
+ setItems(allItemsOrderedByGroup);
9066
9141
  if (inputValue2 === "") {
9067
9142
  selectItem(null);
9068
9143
  } else {
@@ -9106,25 +9181,25 @@ const ComboboxSingle = function(props) {
9106
9181
  const inputValueMatchesSelectedItem = selectedItem != null && inputValue === itemToString(selectedItem);
9107
9182
  const inputValueIsEmpty = inputValue == null || inputValue === "";
9108
9183
  if (!inputValueMatchesSelectedItem && !inputValueIsEmpty && !disableFilter) {
9109
- setItems(matchSorter(itemsProp, inputValue, filterOptions));
9184
+ setItems(matchSorter(allItemsOrderedByGroup, inputValue, filterOptions));
9110
9185
  setHasExactMatch(
9111
- matchSorter(itemsProp, inputValue, {
9186
+ matchSorter(allItemsOrderedByGroup, inputValue, {
9112
9187
  ...filterOptions,
9113
9188
  threshold: matchSorter.rankings.EQUAL
9114
9189
  }).length > 0
9115
9190
  );
9116
9191
  } else {
9117
- setItems(itemsProp);
9192
+ setItems(allItemsOrderedByGroup);
9118
9193
  setHasExactMatch(true);
9119
9194
  }
9120
- }, [itemsProp]);
9195
+ }, [allItemsOrderedByGroup]);
9121
9196
  return /* @__PURE__ */ jsx(
9122
9197
  ComboboxContext.Provider,
9123
9198
  {
9124
9199
  value: {
9125
9200
  multiple: false,
9126
9201
  select: false,
9127
- items,
9202
+ items: searchedItemsOrderedByGroup,
9128
9203
  itemToString,
9129
9204
  itemToKey,
9130
9205
  isOpen,
@@ -9159,7 +9234,10 @@ const ComboboxSingle = function(props) {
9159
9234
  loading,
9160
9235
  referenceRef,
9161
9236
  contentRef,
9162
- closeMenu
9237
+ closeMenu,
9238
+ groupBy,
9239
+ groupToString,
9240
+ groups: searchedGroups
9163
9241
  },
9164
9242
  children: /* @__PURE__ */ jsx(
9165
9243
  "div",
@@ -9222,6 +9300,8 @@ const ComboboxMultiple = function(props) {
9222
9300
  activeIndex: activeIndexProp,
9223
9301
  selectedItems: selectedItemsProp,
9224
9302
  environment: environmentProp,
9303
+ groupBy,
9304
+ groupToString,
9225
9305
  ...rest
9226
9306
  } = componentProps;
9227
9307
  const ComboboxClassNames = cx(styles["combobox"], className);
@@ -9242,10 +9322,20 @@ const ComboboxMultiple = function(props) {
9242
9322
  closeMenu();
9243
9323
  };
9244
9324
  const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();
9325
+ const { orderedItems: allItemsOrderedByGroup } = useGroups({
9326
+ items: itemsProp,
9327
+ groupBy,
9328
+ groupToString
9329
+ });
9330
+ const { groups: searchedGroups, orderedItems: searchedItemsOrderedByGroup } = useGroups({
9331
+ items,
9332
+ groupBy,
9333
+ groupToString
9334
+ });
9245
9335
  const showAddNew = hasAddNew && !hasExactMatch;
9246
9336
  const combinedItems = useMemo(
9247
- () => showAddNew ? [...items, ADD_NEW] : items,
9248
- [items, showAddNew]
9337
+ () => showAddNew ? [...items, ADD_NEW] : searchedItemsOrderedByGroup,
9338
+ [items, searchedItemsOrderedByGroup, showAddNew]
9249
9339
  );
9250
9340
  const itemToString = itemToStringProp ?? defaultItemToString;
9251
9341
  const itemToKey = itemToKeyProp ?? defaultItemToKey;
@@ -9385,18 +9475,20 @@ const ComboboxMultiple = function(props) {
9385
9475
  const inputValueMatchesSelectedItem = selectedItem2 != null && inputValue2 === itemToString(selectedItem2);
9386
9476
  const inputValueIsEmpty = inputValue2 == null || inputValue2 === "";
9387
9477
  if (type === useCombobox$1.stateChangeTypes.InputKeyDownEnter || type === useCombobox$1.stateChangeTypes.ItemClick) {
9388
- setItems(itemsProp);
9478
+ setItems(allItemsOrderedByGroup);
9389
9479
  setHasExactMatch(true);
9390
9480
  } else if (!inputValueMatchesSelectedItem && !inputValueIsEmpty && !disableFilter) {
9391
- setItems(matchSorter(itemsProp, inputValue2, filterOptions));
9481
+ setItems(
9482
+ matchSorter(allItemsOrderedByGroup, inputValue2, filterOptions)
9483
+ );
9392
9484
  setHasExactMatch(
9393
- matchSorter(itemsProp, inputValue2, {
9485
+ matchSorter(allItemsOrderedByGroup, inputValue2, {
9394
9486
  ...filterOptions,
9395
9487
  threshold: matchSorter.rankings.EQUAL
9396
9488
  }).length > 0
9397
9489
  );
9398
9490
  } else {
9399
- setItems(itemsProp);
9491
+ setItems(allItemsOrderedByGroup);
9400
9492
  setHasExactMatch(true);
9401
9493
  }
9402
9494
  }),
@@ -9404,7 +9496,7 @@ const ComboboxMultiple = function(props) {
9404
9496
  if (isOpen2 === false) {
9405
9497
  setTimeout(() => {
9406
9498
  setInputValue("");
9407
- setItems(itemsProp);
9499
+ setItems(allItemsOrderedByGroup);
9408
9500
  }, 200);
9409
9501
  }
9410
9502
  },
@@ -9459,7 +9551,7 @@ const ComboboxMultiple = function(props) {
9459
9551
  value: {
9460
9552
  multiple: true,
9461
9553
  select: false,
9462
- items,
9554
+ items: searchedItemsOrderedByGroup,
9463
9555
  itemToString,
9464
9556
  itemToKey,
9465
9557
  isOpen,
@@ -9498,7 +9590,10 @@ const ComboboxMultiple = function(props) {
9498
9590
  loading,
9499
9591
  referenceRef,
9500
9592
  contentRef,
9501
- closeMenu
9593
+ closeMenu,
9594
+ groupBy,
9595
+ groupToString,
9596
+ groups: searchedGroups
9502
9597
  },
9503
9598
  children: /* @__PURE__ */ jsx(
9504
9599
  "div",
@@ -9549,6 +9644,8 @@ const SelectSingle = function(props) {
9549
9644
  minPopoverHeight,
9550
9645
  root,
9551
9646
  environment: environmentProp,
9647
+ groupBy,
9648
+ groupToString,
9552
9649
  ...rest
9553
9650
  } = componentProps;
9554
9651
  const ComboboxClassNames = cx(styles["combobox"], className);
@@ -9566,6 +9663,11 @@ const SelectSingle = function(props) {
9566
9663
  const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();
9567
9664
  const itemToString = itemToStringProp ?? defaultItemToString;
9568
9665
  const itemToKey = itemToKeyProp ?? defaultItemToKey;
9666
+ const { groups, orderedItems } = useGroups({
9667
+ items,
9668
+ groupBy,
9669
+ groupToString
9670
+ });
9569
9671
  const {
9570
9672
  isOpen,
9571
9673
  getLabelProps,
@@ -9579,7 +9681,7 @@ const SelectSingle = function(props) {
9579
9681
  closeMenu
9580
9682
  } = useSelect({
9581
9683
  ...rest,
9582
- items,
9684
+ items: orderedItems,
9583
9685
  itemToString,
9584
9686
  itemToKey,
9585
9687
  isOpen: open,
@@ -9633,7 +9735,7 @@ const SelectSingle = function(props) {
9633
9735
  multiple: false,
9634
9736
  select: true,
9635
9737
  disableClearSelection,
9636
- items,
9738
+ items: orderedItems,
9637
9739
  itemToString,
9638
9740
  itemToKey,
9639
9741
  isOpen,
@@ -9659,7 +9761,10 @@ const SelectSingle = function(props) {
9659
9761
  loading,
9660
9762
  referenceRef,
9661
9763
  contentRef,
9662
- closeMenu
9764
+ closeMenu,
9765
+ groups,
9766
+ groupBy,
9767
+ groupToString
9663
9768
  },
9664
9769
  children: /* @__PURE__ */ jsx(
9665
9770
  "div",
@@ -9718,6 +9823,8 @@ const SelectMultiple = function(props) {
9718
9823
  activeIndex: activeIndexProp,
9719
9824
  selectedItems: selectedItemsProp,
9720
9825
  environment: environmentProp,
9826
+ groupBy,
9827
+ groupToString,
9721
9828
  ...rest
9722
9829
  } = componentProps;
9723
9830
  const ComboboxClassNames = cx(styles["combobox"], className);
@@ -9735,6 +9842,7 @@ const SelectMultiple = function(props) {
9735
9842
  const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();
9736
9843
  const itemToString = itemToStringProp ?? defaultItemToString;
9737
9844
  const itemToKey = itemToKeyProp ?? defaultItemToKey;
9845
+ const { groups, orderedItems } = useGroups({ items, groupBy, groupToString });
9738
9846
  const {
9739
9847
  getSelectedItemProps,
9740
9848
  getDropdownProps,
@@ -9787,7 +9895,7 @@ const SelectMultiple = function(props) {
9787
9895
  closeMenu
9788
9896
  } = useSelect({
9789
9897
  ...rest,
9790
- items,
9898
+ items: orderedItems,
9791
9899
  itemToString,
9792
9900
  itemToKey,
9793
9901
  selectedItem: null,
@@ -9856,7 +9964,7 @@ const SelectMultiple = function(props) {
9856
9964
  value: {
9857
9965
  multiple: true,
9858
9966
  select: true,
9859
- items,
9967
+ items: orderedItems,
9860
9968
  itemToString,
9861
9969
  itemToKey,
9862
9970
  isOpen,
@@ -9888,7 +9996,10 @@ const SelectMultiple = function(props) {
9888
9996
  loading,
9889
9997
  referenceRef,
9890
9998
  contentRef,
9891
- closeMenu
9999
+ closeMenu,
10000
+ groupBy,
10001
+ groupToString,
10002
+ groups
9892
10003
  },
9893
10004
  children: /* @__PURE__ */ jsx(
9894
10005
  "div",
@@ -10217,4 +10328,4 @@ const Combobox = Object.assign(ComboboxElement, {
10217
10328
  });
10218
10329
 
10219
10330
  export { Combobox as C, ComboboxElement as a, ComboboxSelect as b, ComboboxSearchField as c, ComboboxSelectTrigger as d, ComboboxContent as e, ComboboxList as f, ComboboxItem as g, ComboboxItemAddNew as h, ComboboxEmpty as i, useInfiniteCombobox as u };
10220
- //# sourceMappingURL=Combobox-JAm3x-tw.js.map
10331
+ //# sourceMappingURL=Combobox-DCrEfyl2.js.map