@navikt/ds-react 5.15.1 → 5.16.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 (61) hide show
  1. package/_docs.json +44 -1
  2. package/cjs/form/combobox/Combobox.js +1 -1
  3. package/cjs/form/combobox/ComboboxProvider.js +2 -1
  4. package/cjs/form/combobox/ComboboxWrapper.js +1 -1
  5. package/cjs/form/combobox/FilteredOptions/FilteredOptions.js +59 -41
  6. package/cjs/form/combobox/FilteredOptions/filtered-options-util.js +3 -1
  7. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js +15 -3
  8. package/cjs/form/combobox/FilteredOptions/useVirtualFocus.js +52 -32
  9. package/cjs/form/combobox/Input/Input.js +3 -1
  10. package/cjs/form/combobox/SelectedOptions/selectedOptionsContext.js +3 -1
  11. package/cjs/util/hooks/descendants/descendant.js +117 -0
  12. package/cjs/util/hooks/descendants/useDescendant.js +108 -0
  13. package/cjs/util/hooks/descendants/utils.js +53 -0
  14. package/esm/form/combobox/Combobox.js +1 -1
  15. package/esm/form/combobox/Combobox.js.map +1 -1
  16. package/esm/form/combobox/ComboboxProvider.js +2 -1
  17. package/esm/form/combobox/ComboboxProvider.js.map +1 -1
  18. package/esm/form/combobox/ComboboxWrapper.js +1 -1
  19. package/esm/form/combobox/ComboboxWrapper.js.map +1 -1
  20. package/esm/form/combobox/FilteredOptions/FilteredOptions.js +59 -41
  21. package/esm/form/combobox/FilteredOptions/FilteredOptions.js.map +1 -1
  22. package/esm/form/combobox/FilteredOptions/filtered-options-util.d.ts +2 -1
  23. package/esm/form/combobox/FilteredOptions/filtered-options-util.js +3 -1
  24. package/esm/form/combobox/FilteredOptions/filtered-options-util.js.map +1 -1
  25. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +15 -3
  26. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  27. package/esm/form/combobox/FilteredOptions/useVirtualFocus.d.ts +2 -4
  28. package/esm/form/combobox/FilteredOptions/useVirtualFocus.js +52 -32
  29. package/esm/form/combobox/FilteredOptions/useVirtualFocus.js.map +1 -1
  30. package/esm/form/combobox/Input/Input.js +3 -1
  31. package/esm/form/combobox/Input/Input.js.map +1 -1
  32. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.d.ts +5 -2
  33. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.js +3 -1
  34. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.js.map +1 -1
  35. package/esm/form/combobox/types.d.ts +14 -0
  36. package/esm/util/hooks/descendants/descendant.d.ts +47 -0
  37. package/esm/util/hooks/descendants/descendant.js +114 -0
  38. package/esm/util/hooks/descendants/descendant.js.map +1 -0
  39. package/esm/util/hooks/descendants/useDescendant.d.ts +14 -0
  40. package/esm/util/hooks/descendants/useDescendant.js +82 -0
  41. package/esm/util/hooks/descendants/useDescendant.js.map +1 -0
  42. package/esm/util/hooks/descendants/utils.d.ts +12 -0
  43. package/esm/util/hooks/descendants/utils.js +46 -0
  44. package/esm/util/hooks/descendants/utils.js.map +1 -0
  45. package/package.json +3 -3
  46. package/src/form/combobox/Combobox.tsx +1 -1
  47. package/src/form/combobox/ComboboxProvider.tsx +2 -0
  48. package/src/form/combobox/ComboboxWrapper.tsx +0 -1
  49. package/src/form/combobox/FilteredOptions/FilteredOptions.tsx +131 -92
  50. package/src/form/combobox/FilteredOptions/filtered-options-util.ts +9 -2
  51. package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +22 -3
  52. package/src/form/combobox/FilteredOptions/useVirtualFocus.ts +63 -45
  53. package/src/form/combobox/Input/Input.tsx +3 -1
  54. package/src/form/combobox/SelectedOptions/selectedOptionsContext.tsx +11 -1
  55. package/src/form/combobox/combobox.stories.tsx +36 -1
  56. package/src/form/combobox/combobox.test.tsx +1 -3
  57. package/src/form/combobox/types.ts +15 -0
  58. package/src/util/hooks/descendants/descendant.stories.tsx +147 -0
  59. package/src/util/hooks/descendants/descendant.ts +161 -0
  60. package/src/util/hooks/descendants/useDescendant.tsx +111 -0
  61. package/src/util/hooks/descendants/utils.ts +56 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useVirtualFocus.js","sourceRoot":"","sources":["../../../../src/form/combobox/FilteredOptions/useVirtualFocus.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,QAAQ,EAAE,MAAM,OAAO,CAAC;AAe3D,MAAM,eAAe,GAAG,CACtB,YAAgC,EACd,EAAE;IACpB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvC,MAAM,iBAAiB,GAAkB,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ;QAC7D,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,CAAC;QACpD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,0BAA0B,GAAG,iBAAiB,CAAC,MAAM,CACzD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM,CAC1D,CAAC;IAEF,MAAM,aAAa,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,CAAC,EAAU,EAAE,EAAE,CACpC,iBAAiB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,KAAK,KAAK,CAAC,CAAC;IACpC,MAAM,kBAAkB,GAAG,KAAK,KAAK,0BAA0B,CAAC,MAAM,GAAG,CAAC,CAAC;IAE3E,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,EAAE;QAC1C,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,CACvC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EACrB,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,CAAC,MAAM,KAAI,CAAC,CACnC,CAAC;QACF,IAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;YAC9D,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;YACtD,MAAM,UAAU,GAAG,YAAY,CAAC,qBAAqB,EAAE,CAAC;YACxD,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;gBACvD,KAAK,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,CAAC,MAAc,EAAE,EAAE;QAC/C,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjB,cAAc,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,GAAG,EAAE,CACzB,qBAAqB,CACnB,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,0BAA0B,CAAC,MAAM,GAAG,CAAC,CAAC,CAC3D,CAAC;IACJ,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAC7B,qBAAqB,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,kBAAkB,GAAG,CAAC,EAAU,EAAE,EAAE;QACxC,MAAM,WAAW,GAAG,0BAA0B,CAAC,IAAI,CACjD,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CACjD,CAAC;QACF,MAAM,cAAc,GAAG,WAAW;YAChC,CAAC,CAAC,0BAA0B,CAAC,OAAO,CAAC,WAAW,CAAC;YACjD,CAAC,CAAC,CAAC,CAAC,CAAC;QACP,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,aAAa;QACb,cAAc;QACd,eAAe;QACf,kBAAkB;QAClB,QAAQ;QACR,WAAW;QACX,aAAa;QACb,kBAAkB;QAClB,cAAc;QACd,iBAAiB;KAClB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"useVirtualFocus.js","sourceRoot":"","sources":["../../../../src/form/combobox/FilteredOptions/useVirtualFocus.ts"],"names":[],"mappings":"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"}
@@ -73,9 +73,11 @@ const Input = forwardRef((_a, ref) => {
73
73
  onEnter(e);
74
74
  break;
75
75
  case "Home":
76
+ toggleIsListOpen(false);
76
77
  virtualFocus.moveFocusToTop();
77
78
  break;
78
79
  case "End":
80
+ toggleIsListOpen(true);
79
81
  virtualFocus.moveFocusToBottom();
80
82
  break;
81
83
  default:
@@ -106,7 +108,7 @@ const Input = forwardRef((_a, ref) => {
106
108
  // Otherwise ignore keystrokes, so it doesn't interfere with text editing
107
109
  if (isListOpen && activeDecendantId) {
108
110
  e.preventDefault();
109
- if (virtualFocus.isFocusOnTheTop) {
111
+ if (virtualFocus.isFocusOnTheTop()) {
110
112
  toggleIsListOpen(false);
111
113
  }
112
114
  virtualFocus.moveFocusUp();
@@ -1 +1 @@
1
- {"version":3,"file":"Input.js","sourceRoot":"","sources":["../../../../src/form/combobox/Input/Input.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Input.js","sourceRoot":"","sources":["../../../../src/form/combobox/Input/Input.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EAGZ,UAAU,EACV,WAAW,GACZ,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,mBAAmB,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AASjD,MAAM,KAAK,GAAG,UAAU,CACtB,CAAC,EAA2B,EAAE,GAAG,EAAE,EAAE;QAApC,EAAE,cAAc,OAAW,EAAN,IAAI,cAAzB,kBAA2B,CAAF;IACxB,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE,CAAC;IAC5E,MAAM,EACJ,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,aAAa,GACd,GAAG,yBAAyB,EAAE,CAAC;IAChC,MAAM,EACJ,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,6BAA6B,EAC7B,kBAAkB,EAClB,YAAY,GACb,GAAG,yBAAyB,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,KAA0B,EAAE,EAAE;QAC7B,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAE,EAAE;YAC/C,OAAO,eAAe,CAAC,IAAI,CACzB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAChE,CAAC;QACJ,CAAC,CAAC;QAEF,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,wDAAwD;YACxD,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,aAAa,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC9D,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;aAAM,IAAI,kBAAkB,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,+EAA+E;YAC/E,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YAClE,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,uCAAuC;YACvC,MAAM,aAAa,GACjB,cAAc,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC5D,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YACnC,IACE,CAAC,aAAa;gBACd,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,EAC7D,CAAC;gBACD,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC,EACD;QACE,cAAc;QACd,UAAU;QACV,aAAa;QACb,eAAe;QACf,aAAa;QACb,UAAU;QACV,eAAe;QACf,kBAAkB;QAClB,gBAAgB;QAChB,YAAY;QACZ,KAAK;KACN,CACF,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,CAAwC,EAAE,EAAE;QAC/D,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;YACd,KAAK,QAAQ;gBACX,UAAU,CAAC,CAAC,CAAC,CAAC;gBACd,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACxB,MAAM;YACR,KAAK,OAAO,CAAC;YACb,KAAK,QAAQ;gBACX,OAAO,CAAC,CAAC,CAAC,CAAC;gBACX,MAAM;YACR,KAAK,MAAM;gBACT,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACxB,YAAY,CAAC,cAAc,EAAE,CAAC;gBAC9B,MAAM;YACR,KAAK,KAAK;gBACR,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACvB,YAAY,CAAC,iBAAiB,EAAE,CAAC;gBACjC,MAAM;YACR;gBACE,MAAM;QACV,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,CAAC,EAAE,EAAE;QACJ,6BAA6B,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YAC1B,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;gBACjB,MAAM,kBAAkB,GACtB,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC9C,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YACjC,+DAA+D;YAC/D,0CAA0C;YAC1C,IAAI,CAAC,CAAC,MAAM,CAAC,cAAc,MAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAA,EAAE,CAAC;gBAC9C,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,IAAI,YAAY,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACvD,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;gBACD,YAAY,CAAC,aAAa,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC/B,qEAAqE;YACrE,yEAAyE;YACzE,IAAI,UAAU,IAAI,iBAAiB,EAAE,CAAC;gBACpC,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,IAAI,YAAY,CAAC,eAAe,EAAE,EAAE,CAAC;oBACnC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;gBACD,YAAY,CAAC,WAAW,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC,EACD;QACE,KAAK;QACL,eAAe;QACf,oBAAoB;QACpB,UAAU;QACV,iBAAiB;QACjB,6BAA6B;QAC7B,gBAAgB;QAChB,YAAY;KACb,CACF,CAAC;IAEF,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,KAAoC,EAAE,EAAE;QACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QACpC,IAAI,QAAQ,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YAChC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,YAAY,CAAC,cAAc,EAAE,CAAC;QAC9B,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC,EACD,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CACnE,CAAC;IAEF,OAAO,CACL,+CACM,IAAI,EACJ,IAAI,CAAC,UAAU,EAAE,CAAC,cAAc,CAAC,CAAC,IACtC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,eAAe,EACzB,IAAI,EAAC,MAAM,EACX,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,mBACT,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC,mBACvD,CAAC,CAAC,UAAU,EAC3B,YAAY,EAAC,KAAK,uBACC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,2BAChC,iBAAiB,sBACtB,eAAe,kBACnB,UAAU,CAAC,cAAc,CAAC,EACxC,SAAS,EAAE,EAAE,CACX,cAAc,EACd,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,IAAI,EAAE,CAC5B,IACD,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -1,17 +1,20 @@
1
1
  import React from "react";
2
- import { ComboboxProps } from "../types";
2
+ import { ComboboxProps, MaxSelected } from "../types";
3
3
  type SelectedOptionsContextType = {
4
4
  addSelectedOption: (option: string) => void;
5
5
  isMultiSelect?: boolean;
6
6
  removeSelectedOption: (option: string) => void;
7
7
  prevSelectedOptions?: string[];
8
8
  selectedOptions: string[];
9
+ maxSelected?: MaxSelected & {
10
+ isLimitReached: boolean;
11
+ };
9
12
  setSelectedOptions: (any: any) => void;
10
13
  toggleOption: (option: string, event: React.KeyboardEvent | React.PointerEvent) => void;
11
14
  };
12
15
  export declare const SelectedOptionsProvider: ({ children, value, }: {
13
16
  children: any;
14
- value: Pick<ComboboxProps, "allowNewValues" | "isMultiSelect" | "options" | "selectedOptions" | "onToggleSelected">;
17
+ value: Pick<ComboboxProps, "allowNewValues" | "isMultiSelect" | "options" | "selectedOptions" | "onToggleSelected" | "maxSelected">;
15
18
  }) => React.JSX.Element;
16
19
  export declare const useSelectedOptionsContext: () => SelectedOptionsContextType;
17
20
  export {};
@@ -6,7 +6,7 @@ const SelectedOptionsContext = createContext({});
6
6
  export const SelectedOptionsProvider = ({ children, value, }) => {
7
7
  const { clearInput, focusInput } = useInputContext();
8
8
  const { customOptions, removeCustomOption, addCustomOption, setCustomOptions, } = useCustomOptionsContext();
9
- const { allowNewValues, isMultiSelect, selectedOptions: externalSelectedOptions, onToggleSelected, options, } = value;
9
+ const { allowNewValues, isMultiSelect, selectedOptions: externalSelectedOptions, onToggleSelected, options, maxSelected, } = value;
10
10
  const [internalSelectedOptions, setSelectedOptions] = useState([]);
11
11
  const selectedOptions = useMemo(() => externalSelectedOptions !== null && externalSelectedOptions !== void 0 ? externalSelectedOptions : [...customOptions, ...internalSelectedOptions], [customOptions, externalSelectedOptions, internalSelectedOptions]);
12
12
  const addSelectedOption = useCallback((option) => {
@@ -64,6 +64,7 @@ export const SelectedOptionsProvider = ({ children, value, }) => {
64
64
  selectedOptions,
65
65
  ]);
66
66
  const prevSelectedOptions = usePrevious(selectedOptions);
67
+ const isLimitReached = !!(maxSelected === null || maxSelected === void 0 ? void 0 : maxSelected.limit) && selectedOptions.length >= maxSelected.limit;
67
68
  const selectedOptionsState = {
68
69
  addSelectedOption,
69
70
  isMultiSelect,
@@ -72,6 +73,7 @@ export const SelectedOptionsProvider = ({ children, value, }) => {
72
73
  selectedOptions,
73
74
  setSelectedOptions,
74
75
  toggleOption,
76
+ maxSelected: maxSelected && Object.assign(Object.assign({}, maxSelected), { isLimitReached }),
75
77
  };
76
78
  return (React.createElement(SelectedOptionsContext.Provider, { value: selectedOptionsState }, children));
77
79
  };
@@ -1 +1 @@
1
- {"version":3,"file":"selectedOptionsContext.js","sourceRoot":"","sources":["../../../../src/form/combobox/SelectedOptions/selectedOptionsContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"selectedOptionsContext.js","sourceRoot":"","sources":["../../../../src/form/combobox/SelectedOptions/selectedOptionsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,OAAO,EACP,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAiBlE,MAAM,sBAAsB,GAAG,aAAa,CAC1C,EAAgC,CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,EACtC,QAAQ,EACR,KAAK,GAYN,EAAE,EAAE;IACH,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,eAAe,EAAE,CAAC;IACrD,MAAM,EACJ,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,GAAG,uBAAuB,EAAE,CAAC;IAC9B,MAAM,EACJ,cAAc,EACd,aAAa,EACb,eAAe,EAAE,uBAAuB,EACxC,gBAAgB,EAChB,OAAO,EACP,WAAW,GACZ,GAAG,KAAK,CAAC;IACV,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CACH,uBAAuB,aAAvB,uBAAuB,cAAvB,uBAAuB,GAAI,CAAC,GAAG,aAAa,EAAE,GAAG,uBAAuB,CAAC,EAC3E,CAAC,aAAa,EAAE,uBAAuB,EAAE,uBAAuB,CAAC,CAClE,CAAC;IAEF,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,MAAc,EAAE,EAAE;;QACjB,MAAM,cAAc,GAAG,CAAC,OAAO;aAC5B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;aAC/B,QAAQ,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,sDAAI,CAAC,CAAC;QACrC,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;YAC1C,CAAC,aAAa,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,aAAa,EAAE,CAAC;YACzB,kBAAkB,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBACzC,GAAG,kBAAkB;gBACrB,MAAM;aACP,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAC7B,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;QACD,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAG,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACnD,CAAC,EACD;QACE,eAAe;QACf,cAAc;QACd,aAAa;QACb,gBAAgB;QAChB,OAAO;QACP,gBAAgB;KACjB,CACF,CAAC;IAEF,MAAM,oBAAoB,GAAG,WAAW,CACtC,CAAC,MAAc,EAAE,EAAE;QACjB,MAAM,cAAc,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,cAAc,EAAE,CAAC;YACnB,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,kBAAkB,CAAC,CAAC,kBAAkB,EAAE,EAAE,CACxC,kBAAkB,CAAC,MAAM,CACvB,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,KAAK,MAAM,CAC9C,CACF,CAAC;QACJ,CAAC;QACD,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAG,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;IACpD,CAAC,EACD,CAAC,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CACtD,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,MAAc,EAAE,KAA+C,EAAE,EAAE;QAClE,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QACD,UAAU,CAAC,KAAK,CAAC,CAAC;QAClB,UAAU,EAAE,CAAC;IACf,CAAC,EACD;QACE,iBAAiB;QACjB,UAAU;QACV,UAAU;QACV,oBAAoB;QACpB,eAAe;KAChB,CACF,CAAC;IAEF,MAAM,mBAAmB,GAAG,WAAW,CAAW,eAAe,CAAC,CAAC;IAEnE,MAAM,cAAc,GAClB,CAAC,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,KAAK,CAAA,IAAI,eAAe,CAAC,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC;IAEtE,MAAM,oBAAoB,GAAG;QAC3B,iBAAiB;QACjB,aAAa;QACb,oBAAoB;QACpB,mBAAmB;QACnB,eAAe;QACf,kBAAkB;QAClB,YAAY;QACZ,WAAW,EAAE,WAAW,oCACnB,WAAW,KACd,cAAc,GACf;KACF,CAAC;IAEF,OAAO,CACL,oBAAC,sBAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,oBAAoB,IACzD,QAAQ,CACuB,CACnC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,EAAE;IAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
@@ -1,5 +1,15 @@
1
1
  import React, { ChangeEvent, InputHTMLAttributes } from "react";
2
2
  import { FormFieldProps } from "../useFormField";
3
+ export type MaxSelected = {
4
+ /**
5
+ * The limit for maximum selected options
6
+ */
7
+ limit: number;
8
+ /**
9
+ * Override the message to display when the limit for maximum selected options has been reached
10
+ */
11
+ message?: string;
12
+ };
3
13
  export interface ComboboxProps extends FormFieldProps, Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "onChange" | "value"> {
4
14
  /**
5
15
  * Combobox label
@@ -87,6 +97,10 @@ export interface ComboboxProps extends FormFieldProps, Omit<InputHTMLAttributes<
87
97
  * e.g. for a filter, where options can be toggled elsewhere/programmatically.
88
98
  */
89
99
  selectedOptions?: string[];
100
+ /**
101
+ * Options for the maximum number of selected options.
102
+ */
103
+ maxSelected?: MaxSelected;
90
104
  /**
91
105
  * Set to "true" to enable inline autocomplete.
92
106
  *
@@ -0,0 +1,47 @@
1
+ export type DescendantOptions<T = object> = T & {
2
+ /**
3
+ * If `true`, the item will be registered in all nodes map
4
+ * but omitted from enabled nodes map
5
+ */
6
+ disabled?: boolean;
7
+ };
8
+ export type Descendant<T, K> = DescendantOptions<K> & {
9
+ /**
10
+ * DOM element of the item
11
+ */
12
+ node: T;
13
+ /**
14
+ * index of item in all nodes map and enabled nodes map
15
+ */
16
+ index: number;
17
+ };
18
+ /**
19
+ * @internal
20
+ *
21
+ * Class to manage descendants and their relative indices in the DOM.
22
+ * It uses `node.compareDocumentPosition(...)` under the hood
23
+ */
24
+ export declare class DescendantsManager<T extends HTMLElement, K extends Record<string, any> = object> {
25
+ private descendants;
26
+ register: (nodeOrOptions: T | null | DescendantOptions<K>) => void | ((node: T | null) => void);
27
+ unregister: (node: T) => void;
28
+ destroy: () => void;
29
+ private assignIndex;
30
+ count: () => number;
31
+ enabledCount: () => number;
32
+ values: () => Descendant<T, K>[];
33
+ enabledValues: () => Descendant<T, K>[];
34
+ item: (index: number) => Descendant<T, K> | undefined;
35
+ enabledItem: (index: number) => Descendant<T, K> | undefined;
36
+ first: () => Descendant<T, K> | undefined;
37
+ firstEnabled: () => Descendant<T, K> | undefined;
38
+ last: () => Descendant<T, K> | undefined;
39
+ lastEnabled: () => Descendant<T, K> | undefined;
40
+ indexOf: (node: T | null) => number;
41
+ enabledIndexOf: (node: T | null) => number;
42
+ next: (index: number, loop?: boolean) => Descendant<T, K> | undefined;
43
+ nextEnabled: (index: number, loop?: boolean) => Descendant<T, K> | undefined;
44
+ prev: (index: number, loop?: boolean) => Descendant<T, K> | undefined;
45
+ prevEnabled: (index: number, loop?: boolean) => Descendant<T, K> | undefined;
46
+ private registerNode;
47
+ }
@@ -0,0 +1,114 @@
1
+ /**
2
+ * https://github.com/chakra-ui/chakra-ui/tree/5ec0be610b5a69afba01a9c22365155c1b519136/packages/components/descendant
3
+ */
4
+ import { getNextIndex, getPrevIndex, isElement, sortNodes } from "./utils";
5
+ /**
6
+ * @internal
7
+ *
8
+ * Class to manage descendants and their relative indices in the DOM.
9
+ * It uses `node.compareDocumentPosition(...)` under the hood
10
+ */
11
+ export class DescendantsManager {
12
+ constructor() {
13
+ this.descendants = new Map();
14
+ this.register = (nodeOrOptions) => {
15
+ if (nodeOrOptions == null)
16
+ return;
17
+ if (isElement(nodeOrOptions)) {
18
+ return this.registerNode(nodeOrOptions);
19
+ }
20
+ return (node) => {
21
+ this.registerNode(node, nodeOrOptions);
22
+ };
23
+ };
24
+ this.unregister = (node) => {
25
+ this.descendants.delete(node);
26
+ const sorted = sortNodes(Array.from(this.descendants.keys()));
27
+ this.assignIndex(sorted);
28
+ };
29
+ this.destroy = () => {
30
+ this.descendants.clear();
31
+ };
32
+ this.assignIndex = (descendants) => {
33
+ this.descendants.forEach((descendant) => {
34
+ const index = descendants.indexOf(descendant.node);
35
+ descendant.index = index;
36
+ descendant.node.dataset["index"] = descendant.index.toString();
37
+ });
38
+ };
39
+ this.count = () => this.descendants.size;
40
+ this.enabledCount = () => this.enabledValues().length;
41
+ this.values = () => {
42
+ const values = Array.from(this.descendants.values());
43
+ return values.sort((a, b) => a.index - b.index);
44
+ };
45
+ this.enabledValues = () => {
46
+ return this.values().filter((descendant) => !descendant.disabled);
47
+ };
48
+ this.item = (index) => {
49
+ if (this.count() === 0)
50
+ return undefined;
51
+ return this.values()[index];
52
+ };
53
+ this.enabledItem = (index) => {
54
+ if (this.enabledCount() === 0)
55
+ return undefined;
56
+ return this.enabledValues()[index];
57
+ };
58
+ this.first = () => this.item(0);
59
+ this.firstEnabled = () => this.enabledItem(0);
60
+ this.last = () => this.item(this.descendants.size - 1);
61
+ this.lastEnabled = () => {
62
+ const lastIndex = this.enabledValues().length - 1;
63
+ return this.enabledItem(lastIndex);
64
+ };
65
+ this.indexOf = (node) => {
66
+ var _a, _b;
67
+ if (!node)
68
+ return -1;
69
+ return (_b = (_a = this.descendants.get(node)) === null || _a === void 0 ? void 0 : _a.index) !== null && _b !== void 0 ? _b : -1;
70
+ };
71
+ this.enabledIndexOf = (node) => {
72
+ if (node == null)
73
+ return -1;
74
+ return this.enabledValues().findIndex((i) => i.node.isSameNode(node));
75
+ };
76
+ this.next = (index, loop = true) => {
77
+ const next = getNextIndex(index, this.count(), loop);
78
+ return this.item(next);
79
+ };
80
+ this.nextEnabled = (index, loop = true) => {
81
+ const item = this.item(index);
82
+ if (!item)
83
+ return;
84
+ const enabledIndex = this.enabledIndexOf(item.node);
85
+ const nextEnabledIndex = getNextIndex(enabledIndex, this.enabledCount(), loop);
86
+ return this.enabledItem(nextEnabledIndex);
87
+ };
88
+ this.prev = (index, loop = true) => {
89
+ const prev = getPrevIndex(index, this.count() - 1, loop);
90
+ return this.item(prev);
91
+ };
92
+ this.prevEnabled = (index, loop = true) => {
93
+ const item = this.item(index);
94
+ if (!item)
95
+ return;
96
+ const enabledIndex = this.enabledIndexOf(item.node);
97
+ const prevEnabledIndex = getPrevIndex(enabledIndex, this.enabledCount() - 1, loop);
98
+ return this.enabledItem(prevEnabledIndex);
99
+ };
100
+ this.registerNode = (node, options) => {
101
+ if (!node || this.descendants.has(node))
102
+ return;
103
+ const keys = Array.from(this.descendants.keys()).concat(node);
104
+ const sorted = sortNodes(keys);
105
+ if (options === null || options === void 0 ? void 0 : options.disabled) {
106
+ options.disabled = !!options.disabled;
107
+ }
108
+ const descendant = Object.assign({ node, index: -1 }, options);
109
+ this.descendants.set(node, descendant);
110
+ this.assignIndex(sorted);
111
+ };
112
+ }
113
+ }
114
+ //# sourceMappingURL=descendant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descendant.js","sourceRoot":"","sources":["../../../../src/util/hooks/descendants/descendant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * https://github.com/chakra-ui/chakra-ui/tree/5ec0be610b5a69afba01a9c22365155c1b519136/packages/components/descendant
3
+ */
4
+ import React from "react";
5
+ import { DescendantOptions, DescendantsManager } from "./descendant";
6
+ /**
7
+ * Provides strongly typed versions of the context provider and hooks above.
8
+ */
9
+ export declare function createDescendantContext<T extends HTMLElement = HTMLElement, K extends Record<string, any> = object>(): readonly [React.Provider<DescendantsManager<T, K>>, () => DescendantsManager<T, K>, () => DescendantsManager<T, K>, (options?: DescendantOptions<K>) => {
10
+ descendants: DescendantsManager<HTMLElement, Record<string, any>>;
11
+ index: number;
12
+ enabledIndex: number;
13
+ register: (instance: T | null) => void;
14
+ }];
@@ -0,0 +1,82 @@
1
+ /**
2
+ * https://github.com/chakra-ui/chakra-ui/tree/5ec0be610b5a69afba01a9c22365155c1b519136/packages/components/descendant
3
+ */
4
+ import React, { useRef, useState } from "react";
5
+ import { createContext } from "../../create-context";
6
+ import { useClientLayoutEffect } from "../useClientLayoutEffect";
7
+ import { mergeRefs } from "../useMergeRefs";
8
+ import { DescendantsManager } from "./descendant";
9
+ import { cast } from "./utils";
10
+ /**
11
+ * @internal
12
+ * Initializing DescendantsManager
13
+ */
14
+ function useDescendants() {
15
+ const descendants = useRef(new DescendantsManager()).current;
16
+ useClientLayoutEffect(() => {
17
+ return () => {
18
+ descendants.destroy();
19
+ };
20
+ });
21
+ return descendants;
22
+ }
23
+ const [DescendantsContextProvider, useDescendantsContext] = createContext({
24
+ name: "DescendantsProvider",
25
+ errorMessage: "useDescendantsContext must be used within DescendantsProvider",
26
+ });
27
+ /**
28
+ * @internal
29
+ * This hook provides information to descendant component:
30
+ * - Index compared to other descendants
31
+ * - ref callback to register the descendant
32
+ * - Its enabled index compared to other enabled descendants
33
+ */
34
+ function useDescendant(options) {
35
+ const descendants = useDescendantsContext();
36
+ const [index, setIndex] = useState(-1);
37
+ const ref = useRef(null);
38
+ useClientLayoutEffect(() => {
39
+ return () => {
40
+ if (!ref.current)
41
+ return;
42
+ descendants.unregister(ref.current);
43
+ };
44
+ }, []);
45
+ useClientLayoutEffect(() => {
46
+ if (!ref.current)
47
+ return;
48
+ const dataIndex = Number(ref.current.dataset["index"]);
49
+ if (index != dataIndex && !Number.isNaN(dataIndex)) {
50
+ setIndex(dataIndex);
51
+ }
52
+ });
53
+ const refCallback = options
54
+ ? cast(descendants.register(options))
55
+ : cast(descendants.register);
56
+ return {
57
+ descendants,
58
+ index,
59
+ enabledIndex: descendants.enabledIndexOf(ref.current),
60
+ register: mergeRefs([refCallback, ref]),
61
+ };
62
+ }
63
+ /**
64
+ * Provides strongly typed versions of the context provider and hooks above.
65
+ */
66
+ export function createDescendantContext() {
67
+ const ContextProvider = cast((props) => (React.createElement(DescendantsContextProvider, Object.assign({}, props.value), props.children)));
68
+ const _useDescendantsContext = () => cast(useDescendantsContext());
69
+ const _useDescendant = (options) => useDescendant(options);
70
+ const _useDescendants = () => useDescendants();
71
+ return [
72
+ // context provider
73
+ ContextProvider,
74
+ // call this when you need to read from context
75
+ _useDescendantsContext,
76
+ // descendants state information, to be called and passed to `ContextProvider`
77
+ _useDescendants,
78
+ // descendant index information
79
+ _useDescendant,
80
+ ];
81
+ }
82
+ //# sourceMappingURL=useDescendant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDescendant.js","sourceRoot":"","sources":["../../../../src/util/hooks/descendants/useDescendant.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAqB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B;;;GAGG;AACH,SAAS,cAAc;IAIrB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,kBAAkB,EAAQ,CAAC,CAAC,OAAO,CAAC;IACnE,qBAAqB,CAAC,GAAG,EAAE;QACzB,OAAO,GAAG,EAAE;YACV,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,0BAA0B,EAAE,qBAAqB,CAAC,GAAG,aAAa,CAEvE;IACA,IAAI,EAAE,qBAAqB;IAC3B,YAAY,EAAE,+DAA+D;CAC9E,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,SAAS,aAAa,CAGpB,OAA8B;IAC9B,MAAM,WAAW,GAAG,qBAAqB,EAAE,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,CAAI,IAAI,CAAC,CAAC;IAE5B,qBAAqB,CAAC,GAAG,EAAE;QACzB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,GAAG,CAAC,OAAO;gBAAE,OAAO;YACzB,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,qBAAqB,CAAC,GAAG,EAAE;QACzB,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,OAAO;QACzB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACvD,IAAI,KAAK,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACnD,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,OAAO;QACzB,CAAC,CAAC,IAAI,CAAuB,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC,CAAC,IAAI,CAAuB,WAAW,CAAC,QAAQ,CAAC,CAAC;IAErD,OAAO;QACL,WAAW;QACX,KAAK;QACL,YAAY,EAAE,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;QACrD,QAAQ,EAAE,SAAS,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;KACxC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IAIrC,MAAM,eAAe,GAAG,IAAI,CAC1B,CAAC,KAAK,EAAE,EAAE,CAAC,CACT,oBAAC,0BAA0B,oBAAK,KAAK,CAAC,KAAK,GACxC,KAAK,CAAC,QAAQ,CACY,CAC9B,CACF,CAAC;IAEF,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAClC,IAAI,CAA2B,qBAAqB,EAAE,CAAC,CAAC;IAE1D,MAAM,cAAc,GAAG,CAAC,OAA8B,EAAE,EAAE,CACxD,aAAa,CAAO,OAAO,CAAC,CAAC;IAE/B,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,cAAc,EAAQ,CAAC;IAErD,OAAO;QACL,mBAAmB;QACnB,eAAe;QACf,+CAA+C;QAC/C,sBAAsB;QACtB,8EAA8E;QAC9E,eAAe;QACf,+BAA+B;QAC/B,cAAc;KACN,CAAC;AACb,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Sort an array of DOM nodes according to the HTML tree order
3
+ * @see http://www.w3.org/TR/html5/infrastructure.html#tree-order
4
+ * Inspired by
5
+ * - https://github.com/floating-ui/floating-ui/blob/8e449abb0bfda143c6a6eb01d3e6943c095b744f/packages/react/src/components/FloatingList.tsx#L8
6
+ * - https://github.com/chakra-ui/chakra-ui/tree/5ec0be610b5a69afba01a9c22365155c1b519136/packages/components/descendant
7
+ */
8
+ export declare function sortNodes(nodes: Node[]): Node[];
9
+ export declare const isElement: (el: any) => el is HTMLElement;
10
+ export declare function getNextIndex(current: number, max: number, loop: boolean): number;
11
+ export declare function getPrevIndex(current: number, max: number, loop: boolean): number;
12
+ export declare const cast: <T>(value: any) => T;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Sort an array of DOM nodes according to the HTML tree order
3
+ * @see http://www.w3.org/TR/html5/infrastructure.html#tree-order
4
+ * Inspired by
5
+ * - https://github.com/floating-ui/floating-ui/blob/8e449abb0bfda143c6a6eb01d3e6943c095b744f/packages/react/src/components/FloatingList.tsx#L8
6
+ * - https://github.com/chakra-ui/chakra-ui/tree/5ec0be610b5a69afba01a9c22365155c1b519136/packages/components/descendant
7
+ */
8
+ export function sortNodes(nodes) {
9
+ return nodes.sort((a, b) => {
10
+ const compare = a.compareDocumentPosition(b);
11
+ if (compare & Node.DOCUMENT_POSITION_FOLLOWING ||
12
+ compare & Node.DOCUMENT_POSITION_CONTAINED_BY) {
13
+ // a < b
14
+ return -1;
15
+ }
16
+ if (compare & Node.DOCUMENT_POSITION_PRECEDING ||
17
+ compare & Node.DOCUMENT_POSITION_CONTAINS) {
18
+ // a > b
19
+ return 1;
20
+ }
21
+ if (compare & Node.DOCUMENT_POSITION_DISCONNECTED ||
22
+ compare & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC) {
23
+ throw Error("Cannot sort the given nodes.");
24
+ }
25
+ else {
26
+ return 0;
27
+ }
28
+ });
29
+ }
30
+ export const isElement = (el) => typeof el == "object" &&
31
+ "nodeType" in el &&
32
+ el.nodeType === Node.ELEMENT_NODE;
33
+ export function getNextIndex(current, max, loop) {
34
+ let next = current + 1;
35
+ if (loop && next >= max)
36
+ next = 0;
37
+ return next;
38
+ }
39
+ export function getPrevIndex(current, max, loop) {
40
+ let next = current - 1;
41
+ if (loop && next < 0)
42
+ next = max;
43
+ return next;
44
+ }
45
+ export const cast = (value) => value;
46
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/util/hooks/descendants/utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACzB,MAAM,OAAO,GAAG,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;QAE7C,IACE,OAAO,GAAG,IAAI,CAAC,2BAA2B;YAC1C,OAAO,GAAG,IAAI,CAAC,8BAA8B,EAC7C,CAAC;YACD,QAAQ;YACR,OAAO,CAAC,CAAC,CAAC;QACZ,CAAC;QAED,IACE,OAAO,GAAG,IAAI,CAAC,2BAA2B;YAC1C,OAAO,GAAG,IAAI,CAAC,0BAA0B,EACzC,CAAC;YACD,QAAQ;YACR,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IACE,OAAO,GAAG,IAAI,CAAC,8BAA8B;YAC7C,OAAO,GAAG,IAAI,CAAC,yCAAyC,EACxD,CAAC;YACD,MAAM,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAO,EAAqB,EAAE,CACtD,OAAO,EAAE,IAAI,QAAQ;IACrB,UAAU,IAAI,EAAE;IAChB,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,CAAC;AAEpC,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,GAAW,EAAE,IAAa;IACtE,IAAI,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC;IACvB,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG;QAAE,IAAI,GAAG,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,GAAW,EAAE,IAAa;IACtE,IAAI,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC;IACvB,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC;QAAE,IAAI,GAAG,GAAG,CAAC;IACjC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,CAAI,KAAU,EAAE,EAAE,CAAC,KAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@navikt/ds-react",
3
- "version": "5.15.1",
3
+ "version": "5.16.0",
4
4
  "description": "Aksel react-components for NAV designsystem",
5
5
  "author": "Aksel | NAV designsystem team",
6
6
  "license": "MIT",
@@ -38,8 +38,8 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@floating-ui/react": "0.25.4",
41
- "@navikt/aksel-icons": "^5.15.1",
42
- "@navikt/ds-tokens": "^5.15.1",
41
+ "@navikt/aksel-icons": "^5.16.0",
42
+ "@navikt/ds-tokens": "^5.16.0",
43
43
  "@radix-ui/react-tabs": "1.0.0",
44
44
  "@radix-ui/react-toggle-group": "1.0.0",
45
45
  "clsx": "^1.2.1",
@@ -89,7 +89,7 @@ export const Combobox = forwardRef<
89
89
  "navds-combobox__wrapper-inner navds-text-field__input",
90
90
  {
91
91
  "navds-combobox__wrapper-inner--virtually-unfocused":
92
- activeDecendantId !== null,
92
+ activeDecendantId !== undefined,
93
93
  },
94
94
  )}
95
95
  onClick={focusInput}
@@ -43,6 +43,7 @@ const ComboboxProvider = forwardRef<HTMLInputElement, ComboboxProps>(
43
43
  isMultiSelect,
44
44
  onToggleSelected,
45
45
  selectedOptions,
46
+ maxSelected,
46
47
  options,
47
48
  value,
48
49
  onChange,
@@ -71,6 +72,7 @@ const ComboboxProvider = forwardRef<HTMLInputElement, ComboboxProps>(
71
72
  allowNewValues,
72
73
  isMultiSelect,
73
74
  selectedOptions,
75
+ maxSelected,
74
76
  onToggleSelected,
75
77
  options,
76
78
  }}
@@ -57,7 +57,6 @@ const ComboboxWrapper = ({
57
57
  )}
58
58
  onFocus={onFocusInsideWrapper}
59
59
  onBlur={onBlurWrapper}
60
- tabIndex={-1}
61
60
  >
62
61
  {children}
63
62
  </div>