@economic/taco 1.1.5-alpha.108 → 1.1.5-alpha.127

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 (130) hide show
  1. package/dist/components/Accordion/Accordion.stories.d.ts +26 -0
  2. package/dist/components/Backdrop/Backdrop.stories.d.ts +7 -0
  3. package/dist/components/Badge/Badge.stories.d.ts +15 -0
  4. package/dist/components/Banner/Banner.stories.d.ts +23 -0
  5. package/dist/components/Button/Button.stories.d.ts +69 -0
  6. package/dist/components/Calendar/Calendar.d.ts +3 -1
  7. package/dist/components/Calendar/Calendar.stories.d.ts +13 -0
  8. package/dist/components/Card/Card.stories.d.ts +12 -0
  9. package/dist/components/Datepicker/Datepicker.stories.d.ts +43 -0
  10. package/dist/components/Dialog/Dialog.d.ts +1 -1
  11. package/dist/components/Dialog/Dialog.stories.d.ts +54 -0
  12. package/dist/components/Field/Field.stories.d.ts +14 -0
  13. package/dist/components/Form/Form.stories.d.ts +14 -0
  14. package/dist/components/Group/Group.d.ts +11 -1
  15. package/dist/components/Group/Group.stories.d.ts +23 -0
  16. package/dist/components/Hanger/Hanger.stories.d.ts +11 -0
  17. package/dist/components/HoverCard/HoverCard.stories.d.ts +28 -0
  18. package/dist/components/Icon/Icon.stories.d.ts +24 -0
  19. package/dist/components/Icon/components/ChevronLeftSolid.d.ts +3 -0
  20. package/dist/components/Icon/components/ChevronRightSolid.d.ts +3 -0
  21. package/dist/components/Icon/components/index.d.ts +1 -1
  22. package/dist/components/IconButton/IconButton.stories.d.ts +45 -0
  23. package/dist/components/Input/Input.d.ts +1 -1
  24. package/dist/components/Input/Input.stories.d.ts +43 -0
  25. package/dist/components/Listbox/Listbox.stories.d.ts +44 -0
  26. package/dist/components/Menu/Menu.d.ts +2 -2
  27. package/dist/components/Menu/Menu.stories.d.ts +93 -0
  28. package/dist/components/Menu/components/Item.d.ts +1 -1
  29. package/dist/components/Menu/components/Link.d.ts +1 -1
  30. package/dist/components/Navigation/Navigation.stories.d.ts +7 -0
  31. package/dist/components/Pagination/Pagination.stories.d.ts +28 -0
  32. package/dist/components/Popover/Popover.stories.d.ts +14 -0
  33. package/dist/components/Progress/Progress.stories.d.ts +8 -0
  34. package/dist/components/RadioGroup/RadioGroup.stories.d.ts +49 -0
  35. package/dist/components/SearchInput/SearchInput.stories.d.ts +41 -0
  36. package/dist/components/Select/Select.stories.d.ts +35 -0
  37. package/dist/components/Spinner/Spinner.stories.d.ts +15 -0
  38. package/dist/components/Table/Table.stories.d.ts +32 -0
  39. package/dist/components/Table/util/rowIndexPath.d.ts +2 -2
  40. package/dist/components/Tabs/Tabs.stories.d.ts +19 -0
  41. package/dist/components/Textarea/Textarea.stories.d.ts +40 -0
  42. package/dist/components/Toast/Toast.d.ts +2 -2
  43. package/dist/components/Toast/Toast.stories.d.ts +12 -0
  44. package/dist/components/Toast/Toaster.d.ts +2 -2
  45. package/dist/components/Tooltip/Tooltip.stories.d.ts +25 -0
  46. package/dist/components/Tour/Tour.stories.d.ts +11 -0
  47. package/dist/css/Typography.stories.d.ts +6 -0
  48. package/dist/esm/components/Badge/Badge.js +1 -1
  49. package/dist/esm/components/Badge/Badge.js.map +1 -1
  50. package/dist/esm/components/Calendar/Calendar.js +4 -11
  51. package/dist/esm/components/Calendar/Calendar.js.map +1 -1
  52. package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
  53. package/dist/esm/components/Combobox/Combobox.js.map +1 -1
  54. package/dist/esm/components/Combobox/useCombobox.js +12 -13
  55. package/dist/esm/components/Combobox/useCombobox.js.map +1 -1
  56. package/dist/esm/components/Datepicker/Datepicker.js.map +1 -1
  57. package/dist/esm/components/Dialog/Dialog.js +39 -58
  58. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  59. package/dist/esm/components/Dialog/components/Content.js.map +1 -1
  60. package/dist/esm/components/Dialog/components/Drawer.js.map +1 -1
  61. package/dist/esm/components/Field/Field.js +10 -12
  62. package/dist/esm/components/Field/Field.js.map +1 -1
  63. package/dist/esm/components/Form/Form.js +6 -8
  64. package/dist/esm/components/Form/Form.js.map +1 -1
  65. package/dist/esm/components/Group/Group.js +9 -8
  66. package/dist/esm/components/Group/Group.js.map +1 -1
  67. package/dist/esm/components/Hanger/Hanger.js +27 -35
  68. package/dist/esm/components/Hanger/Hanger.js.map +1 -1
  69. package/dist/esm/components/HoverCard/HoverCard.js +8 -9
  70. package/dist/esm/components/HoverCard/HoverCard.js.map +1 -1
  71. package/dist/esm/components/Icon/components/ChevronLeftSolid.js +20 -0
  72. package/dist/esm/components/Icon/components/ChevronLeftSolid.js.map +1 -0
  73. package/dist/esm/components/Icon/components/ChevronRightSolid.js +20 -0
  74. package/dist/esm/components/Icon/components/ChevronRightSolid.js.map +1 -0
  75. package/dist/esm/components/Icon/components/index.js +4 -0
  76. package/dist/esm/components/Icon/components/index.js.map +1 -1
  77. package/dist/esm/components/Listbox/ScrollableList.js +2 -2
  78. package/dist/esm/components/Listbox/ScrollableList.js.map +1 -1
  79. package/dist/esm/components/Listbox/useListbox.js +3 -2
  80. package/dist/esm/components/Listbox/useListbox.js.map +1 -1
  81. package/dist/esm/components/Listbox/useMultiListbox.js +7 -7
  82. package/dist/esm/components/Listbox/useMultiListbox.js.map +1 -1
  83. package/dist/esm/components/Menu/components/Content.js.map +1 -1
  84. package/dist/esm/components/Menu/components/RadioGroup.js.map +1 -1
  85. package/dist/esm/components/Navigation/Navigation.js +2 -1
  86. package/dist/esm/components/Navigation/Navigation.js.map +1 -1
  87. package/dist/esm/components/Pagination/PageNumbers.js.map +1 -1
  88. package/dist/esm/components/Pagination/usePaginationShortcuts.js +4 -5
  89. package/dist/esm/components/Pagination/usePaginationShortcuts.js.map +1 -1
  90. package/dist/esm/components/Popover/Primitives.js.map +1 -1
  91. package/dist/esm/components/RadioGroup/RadioGroup.js.map +1 -1
  92. package/dist/esm/components/SearchInput/SearchInput.js +1 -2
  93. package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
  94. package/dist/esm/components/Select/useSelect.js +6 -7
  95. package/dist/esm/components/Select/useSelect.js.map +1 -1
  96. package/dist/esm/components/Spinner/Spinner.js.map +1 -1
  97. package/dist/esm/components/Table/components/BaseTable.js.map +1 -1
  98. package/dist/esm/components/Table/components/WindowedTable.js.map +1 -1
  99. package/dist/esm/components/Table/hooks/plugins/useRowActions.js +2 -3
  100. package/dist/esm/components/Table/hooks/plugins/useRowActions.js.map +1 -1
  101. package/dist/esm/components/Table/hooks/useTable.js +5 -1
  102. package/dist/esm/components/Table/hooks/useTable.js.map +1 -1
  103. package/dist/esm/components/Table/hooks/useTableKeyboardNavigation.js +18 -13
  104. package/dist/esm/components/Table/hooks/useTableKeyboardNavigation.js.map +1 -1
  105. package/dist/esm/components/Table/util/rowIndexPath.js.map +1 -1
  106. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  107. package/dist/esm/components/Toast/Toast.js +6 -1
  108. package/dist/esm/components/Toast/Toast.js.map +1 -1
  109. package/dist/esm/components/Toast/Toaster.js.map +1 -1
  110. package/dist/esm/components/Toast/util.js.map +1 -1
  111. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  112. package/dist/esm/components/Tour/Tour.js +1 -2
  113. package/dist/esm/components/Tour/Tour.js.map +1 -1
  114. package/dist/esm/index.css +623 -635
  115. package/dist/esm/index.js +1 -1
  116. package/dist/esm/primitives/Button.js.map +1 -1
  117. package/dist/esm/utils/hooks/useListKeyboardNavigation.js +10 -11
  118. package/dist/esm/utils/hooks/useListKeyboardNavigation.js.map +1 -1
  119. package/dist/esm/utils/input.js +1 -1
  120. package/dist/esm/utils/input.js.map +1 -1
  121. package/dist/index.css +623 -635
  122. package/dist/primitives/Button.d.ts +2 -1
  123. package/dist/taco.cjs.development.js +201 -164
  124. package/dist/taco.cjs.development.js.map +1 -1
  125. package/dist/taco.cjs.production.min.js +1 -1
  126. package/dist/taco.cjs.production.min.js.map +1 -1
  127. package/dist/utils/hooks/useListKeyboardNavigation.d.ts +1 -1
  128. package/dist/utils/tailwind.d.ts +1 -1
  129. package/package.json +5 -6
  130. package/types.json +18 -4
@@ -61,9 +61,10 @@ const useListbox = ({
61
61
  }, [data]);
62
62
 
63
63
  const handleListboxKeyDown = event => {
64
- const charKey = String.fromCharCode(event.keyCode);
64
+ const charKey = event.key; // event.key always returns the whole string (String.fromCharCode(event.keyCode) does not)
65
+ // We need to filter out only alphabetical or numeric letters, that's why that condition has been changed
65
66
 
66
- if (charKey.match(/(\w)/g)) {
67
+ if (charKey.length === 1 && /(\w)/g.test(charKey)) {
67
68
  const nextIndex = getNextIndex(charKey);
68
69
 
69
70
  if (nextIndex > -1 && nextIndex !== currentIndex) {
@@ -1 +1 @@
1
- {"version":3,"file":"useListbox.js","sources":["../../../../src/components/Listbox/useListbox.tsx"],"sourcesContent":["import * as React from 'react';\nimport { v4 as uuid } from 'uuid';\nimport { ListboxProps } from './Listbox';\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\nimport { setInputValueByRef, getIndexFromValue, findByValue, getActiveDescendant, useFlattenedData, sanitizeItem } from './util';\nimport { ScrollableListProps } from './ScrollableList';\nimport { useTypeahead } from './useTypeahead';\n\ntype useListbox = {\n list: ScrollableListProps;\n input: Omit<React.HTMLAttributes<HTMLInputElement>, 'defaultValue'>;\n};\n\nexport const useListbox = (\n {\n data: externalData = [],\n defaultValue,\n disabled,\n emptyValue,\n id: nativeId,\n invalid,\n name,\n onChange,\n onFocus,\n onKeyDown,\n value = emptyValue,\n ...otherProps\n }: ListboxProps,\n ref: React.Ref<HTMLInputElement>\n): useListbox => {\n const data = useFlattenedData(emptyValue !== undefined ? [{ text: '', value: emptyValue }, ...externalData] : externalData);\n const id = React.useMemo(() => nativeId || uuid(), [nativeId]);\n const inputRef = useProxiedRef<HTMLInputElement>(ref);\n const currentIndex = value !== undefined ? getIndexFromValue(data, value) : undefined;\n const { getNextIndex } = useTypeahead({ data, currentIndex });\n\n const setInputValueByIndex = (index: number | undefined): void => {\n if (index !== undefined) {\n const option = data[index];\n\n if (option && !option.disabled) {\n setInputValueByRef(inputRef.current, option.value);\n }\n }\n };\n\n const handleListboxChange = (index: number): void => {\n setInputValueByIndex(index);\n };\n\n React.useEffect(() => {\n if (data.length && currentIndex === undefined) {\n if (defaultValue !== undefined) {\n const defaultValueIndex = getIndexFromValue(data, defaultValue);\n\n if (defaultValueIndex !== undefined) {\n setInputValueByIndex(defaultValueIndex);\n }\n } else {\n setInputValueByIndex(0);\n }\n }\n }, [data]);\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLElement>): void => {\n const charKey = String.fromCharCode(event.keyCode);\n\n if (charKey.match(/(\\w)/g)) {\n const nextIndex = getNextIndex(charKey);\n\n if (nextIndex > -1 && nextIndex !== currentIndex) {\n setInputValueByIndex(nextIndex);\n }\n return;\n }\n\n if (onKeyDown) {\n event.persist();\n onKeyDown(event);\n }\n };\n\n const handleListboxFocus = (event: React.FocusEvent<HTMLElement>): void => {\n if (currentIndex === undefined && data.length) {\n setInputValueByIndex(0);\n }\n\n if (onFocus) {\n event.persist();\n onFocus(event);\n }\n };\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n event.persist();\n\n if (onChange) {\n const item = findByValue(data, event.target.value);\n (event as any).detail = sanitizeItem(item);\n\n const indexes = item?.path?.split('.') ?? [];\n\n if (indexes.length > 1) {\n // we don't want to map the current item\n indexes.pop();\n // we need to rebuild the path as we map\n let lastPath: string;\n\n (event as any).detail.parents = indexes.map(i => {\n lastPath = lastPath ? [lastPath, i].join('.') : i;\n return sanitizeItem(data.find(i => i.path === lastPath));\n });\n }\n\n onChange(event);\n }\n };\n\n const list: ScrollableListProps = {\n ...otherProps,\n 'aria-activedescendant': getActiveDescendant(data, currentIndex, id),\n data,\n disabled,\n id,\n invalid,\n onChange: handleListboxChange,\n onFocus: handleListboxFocus,\n onKeyDown: handleListboxKeyDown,\n scrollOnFocus: true,\n tabIndex: disabled ? -1 : otherProps.tabIndex ? otherProps.tabIndex : 0,\n value: currentIndex,\n };\n\n const input = {\n name,\n onChange: handleInputChange,\n ref: inputRef,\n tabIndex: -1,\n value: value ?? '',\n };\n\n return { list, input };\n};\n"],"names":["useListbox","data","externalData","defaultValue","disabled","emptyValue","id","nativeId","invalid","name","onChange","onFocus","onKeyDown","value","otherProps","ref","useFlattenedData","undefined","text","React","uuid","inputRef","useProxiedRef","currentIndex","getIndexFromValue","getNextIndex","useTypeahead","setInputValueByIndex","index","option","setInputValueByRef","current","handleListboxChange","length","defaultValueIndex","handleListboxKeyDown","event","charKey","String","fromCharCode","keyCode","match","nextIndex","persist","handleListboxFocus","handleInputChange","item","findByValue","target","detail","sanitizeItem","indexes","path","split","pop","lastPath","parents","map","i","join","find","list","getActiveDescendant","scrollOnFocus","tabIndex","input"],"mappings":";;;;;;MAaaA,UAAU,GAAG,CACtB;EACIC,IAAI,EAAEC,YAAY,GAAG,EADzB;EAEIC,YAFJ;EAGIC,QAHJ;EAIIC,UAJJ;EAKIC,EAAE,EAAEC,QALR;EAMIC,OANJ;EAOIC,IAPJ;EAQIC,QARJ;EASIC,OATJ;EAUIC,SAVJ;EAWIC,KAAK,GAAGR,UAXZ;EAYI,GAAGS;AAZP,CADsB,EAetBC,GAfsB;EAiBtB,MAAMd,IAAI,GAAGe,gBAAgB,CAACX,UAAU,KAAKY,SAAf,GAA2B,CAAC;IAAEC,IAAI,EAAE,EAAR;IAAYL,KAAK,EAAER;GAApB,EAAkC,GAAGH,YAArC,CAA3B,GAAgFA,YAAjF,CAA7B;EACA,MAAMI,EAAE,GAAGa,OAAA,CAAc,MAAMZ,QAAQ,IAAIa,EAAI,EAApC,EAAwC,CAACb,QAAD,CAAxC,CAAX;EACA,MAAMc,QAAQ,GAAGC,aAAa,CAAmBP,GAAnB,CAA9B;EACA,MAAMQ,YAAY,GAAGV,KAAK,KAAKI,SAAV,GAAsBO,iBAAiB,CAACvB,IAAD,EAAOY,KAAP,CAAvC,GAAuDI,SAA5E;EACA,MAAM;IAAEQ;MAAiBC,YAAY,CAAC;IAAEzB,IAAF;IAAQsB;GAAT,CAArC;;EAEA,MAAMI,oBAAoB,GAAIC,KAAD;IACzB,IAAIA,KAAK,KAAKX,SAAd,EAAyB;MACrB,MAAMY,MAAM,GAAG5B,IAAI,CAAC2B,KAAD,CAAnB;;MAEA,IAAIC,MAAM,IAAI,CAACA,MAAM,CAACzB,QAAtB,EAAgC;QAC5B0B,kBAAkB,CAACT,QAAQ,CAACU,OAAV,EAAmBF,MAAM,CAAChB,KAA1B,CAAlB;;;GALZ;;EAUA,MAAMmB,mBAAmB,GAAIJ,KAAD;IACxBD,oBAAoB,CAACC,KAAD,CAApB;GADJ;;EAIAT,SAAA,CAAgB;IACZ,IAAIlB,IAAI,CAACgC,MAAL,IAAeV,YAAY,KAAKN,SAApC,EAA+C;MAC3C,IAAId,YAAY,KAAKc,SAArB,EAAgC;QAC5B,MAAMiB,iBAAiB,GAAGV,iBAAiB,CAACvB,IAAD,EAAOE,YAAP,CAA3C;;QAEA,IAAI+B,iBAAiB,KAAKjB,SAA1B,EAAqC;UACjCU,oBAAoB,CAACO,iBAAD,CAApB;;OAJR,MAMO;QACHP,oBAAoB,CAAC,CAAD,CAApB;;;GATZ,EAYG,CAAC1B,IAAD,CAZH;;EAcA,MAAMkC,oBAAoB,GAAIC,KAAD;IACzB,MAAMC,OAAO,GAAGC,MAAM,CAACC,YAAP,CAAoBH,KAAK,CAACI,OAA1B,CAAhB;;IAEA,IAAIH,OAAO,CAACI,KAAR,CAAc,OAAd,CAAJ,EAA4B;MACxB,MAAMC,SAAS,GAAGjB,YAAY,CAACY,OAAD,CAA9B;;MAEA,IAAIK,SAAS,GAAG,CAAC,CAAb,IAAkBA,SAAS,KAAKnB,YAApC,EAAkD;QAC9CI,oBAAoB,CAACe,SAAD,CAApB;;;MAEJ;;;IAGJ,IAAI9B,SAAJ,EAAe;MACXwB,KAAK,CAACO,OAAN;MACA/B,SAAS,CAACwB,KAAD,CAAT;;GAdR;;EAkBA,MAAMQ,kBAAkB,GAAIR,KAAD;IACvB,IAAIb,YAAY,KAAKN,SAAjB,IAA8BhB,IAAI,CAACgC,MAAvC,EAA+C;MAC3CN,oBAAoB,CAAC,CAAD,CAApB;;;IAGJ,IAAIhB,OAAJ,EAAa;MACTyB,KAAK,CAACO,OAAN;MACAhC,OAAO,CAACyB,KAAD,CAAP;;GAPR;;EAWA,MAAMS,iBAAiB,GAAIT,KAAD;IACtBA,KAAK,CAACO,OAAN;;IAEA,IAAIjC,QAAJ,EAAc;MAAA;;MACV,MAAMoC,IAAI,GAAGC,WAAW,CAAC9C,IAAD,EAAOmC,KAAK,CAACY,MAAN,CAAanC,KAApB,CAAxB;MACCuB,KAAa,CAACa,MAAd,GAAuBC,YAAY,CAACJ,IAAD,CAAnC;MAED,MAAMK,OAAO,uBAAGL,IAAH,aAAGA,IAAH,qCAAGA,IAAI,CAAEM,IAAT,+CAAG,WAAYC,KAAZ,CAAkB,GAAlB,CAAH,+DAA6B,EAA1C;;MAEA,IAAIF,OAAO,CAAClB,MAAR,GAAiB,CAArB,EAAwB;;QAEpBkB,OAAO,CAACG,GAAR,GAFoB;;QAIpB,IAAIC,QAAJ;QAECnB,KAAa,CAACa,MAAd,CAAqBO,OAArB,GAA+BL,OAAO,CAACM,GAAR,CAAYC,CAAC;UACzCH,QAAQ,GAAGA,QAAQ,GAAG,CAACA,QAAD,EAAWG,CAAX,EAAcC,IAAd,CAAmB,GAAnB,CAAH,GAA6BD,CAAhD;UACA,OAAOR,YAAY,CAACjD,IAAI,CAAC2D,IAAL,CAAUF,CAAC,IAAIA,CAAC,CAACN,IAAF,KAAWG,QAA1B,CAAD,CAAnB;SAF4B,CAA/B;;;MAML7C,QAAQ,CAAC0B,KAAD,CAAR;;GArBR;;EAyBA,MAAMyB,IAAI,GAAwB,EAC9B,GAAG/C,UAD2B;IAE9B,yBAAyBgD,mBAAmB,CAAC7D,IAAD,EAAOsB,YAAP,EAAqBjB,EAArB,CAFd;IAG9BL,IAH8B;IAI9BG,QAJ8B;IAK9BE,EAL8B;IAM9BE,OAN8B;IAO9BE,QAAQ,EAAEsB,mBAPoB;IAQ9BrB,OAAO,EAAEiC,kBARqB;IAS9BhC,SAAS,EAAEuB,oBATmB;IAU9B4B,aAAa,EAAE,IAVe;IAW9BC,QAAQ,EAAE5D,QAAQ,GAAG,CAAC,CAAJ,GAAQU,UAAU,CAACkD,QAAX,GAAsBlD,UAAU,CAACkD,QAAjC,GAA4C,CAXxC;IAY9BnD,KAAK,EAAEU;GAZX;EAeA,MAAM0C,KAAK,GAAG;IACVxD,IADU;IAEVC,QAAQ,EAAEmC,iBAFA;IAGV9B,GAAG,EAAEM,QAHK;IAIV2C,QAAQ,EAAE,CAAC,CAJD;IAKVnD,KAAK,EAAEA,KAAF,aAAEA,KAAF,cAAEA,KAAF,GAAW;GALpB;EAQA,OAAO;IAAEgD,IAAF;IAAQI;GAAf;AACH;;;;"}
1
+ {"version":3,"file":"useListbox.js","sources":["../../../../src/components/Listbox/useListbox.tsx"],"sourcesContent":["import * as React from 'react';\nimport { v4 as uuid } from 'uuid';\nimport { ListboxProps } from './Listbox';\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\nimport { setInputValueByRef, getIndexFromValue, findByValue, getActiveDescendant, useFlattenedData, sanitizeItem } from './util';\nimport { ScrollableListProps } from './ScrollableList';\nimport { useTypeahead } from './useTypeahead';\n\ntype useListbox = {\n list: ScrollableListProps;\n input: Omit<React.HTMLAttributes<HTMLInputElement>, 'defaultValue'>;\n};\n\nexport const useListbox = (\n {\n data: externalData = [],\n defaultValue,\n disabled,\n emptyValue,\n id: nativeId,\n invalid,\n name,\n onChange,\n onFocus,\n onKeyDown,\n value = emptyValue,\n ...otherProps\n }: ListboxProps,\n ref: React.Ref<HTMLInputElement>\n): useListbox => {\n const data = useFlattenedData(emptyValue !== undefined ? [{ text: '', value: emptyValue }, ...externalData] : externalData);\n const id = React.useMemo(() => nativeId || uuid(), [nativeId]);\n const inputRef = useProxiedRef<HTMLInputElement>(ref);\n const currentIndex = value !== undefined ? getIndexFromValue(data, value) : undefined;\n const { getNextIndex } = useTypeahead({ data, currentIndex });\n\n const setInputValueByIndex = (index: number | undefined): void => {\n if (index !== undefined) {\n const option = data[index];\n\n if (option && !option.disabled) {\n setInputValueByRef(inputRef.current, option.value);\n }\n }\n };\n\n const handleListboxChange = (index: number): void => {\n setInputValueByIndex(index);\n };\n\n React.useEffect(() => {\n if (data.length && currentIndex === undefined) {\n if (defaultValue !== undefined) {\n const defaultValueIndex = getIndexFromValue(data, defaultValue);\n\n if (defaultValueIndex !== undefined) {\n setInputValueByIndex(defaultValueIndex);\n }\n } else {\n setInputValueByIndex(0);\n }\n }\n }, [data]);\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLElement>): void => {\n const charKey = event.key;\n\n // event.key always returns the whole string (String.fromCharCode(event.keyCode) does not)\n // We need to filter out only alphabetical or numeric letters, that's why that condition has been changed\n if (charKey.length === 1 && /(\\w)/g.test(charKey)) {\n const nextIndex = getNextIndex(charKey);\n\n if (nextIndex > -1 && nextIndex !== currentIndex) {\n setInputValueByIndex(nextIndex);\n }\n return;\n }\n\n if (onKeyDown) {\n event.persist();\n onKeyDown(event);\n }\n };\n\n const handleListboxFocus = (event: React.FocusEvent<HTMLElement>): void => {\n if (currentIndex === undefined && data.length) {\n setInputValueByIndex(0);\n }\n\n if (onFocus) {\n event.persist();\n onFocus(event);\n }\n };\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n event.persist();\n\n if (onChange) {\n const item = findByValue(data, event.target.value);\n (event as any).detail = sanitizeItem(item);\n\n const indexes = item?.path?.split('.') ?? [];\n\n if (indexes.length > 1) {\n // we don't want to map the current item\n indexes.pop();\n // we need to rebuild the path as we map\n let lastPath: string;\n\n (event as any).detail.parents = indexes.map(i => {\n lastPath = lastPath ? [lastPath, i].join('.') : i;\n return sanitizeItem(data.find(i => i.path === lastPath));\n });\n }\n\n onChange(event);\n }\n };\n\n const list: ScrollableListProps = {\n ...otherProps,\n 'aria-activedescendant': getActiveDescendant(data, currentIndex, id),\n data,\n disabled,\n id,\n invalid,\n onChange: handleListboxChange,\n onFocus: handleListboxFocus,\n onKeyDown: handleListboxKeyDown,\n scrollOnFocus: true,\n tabIndex: disabled ? -1 : otherProps.tabIndex ? otherProps.tabIndex : 0,\n value: currentIndex,\n };\n\n const input = {\n name,\n onChange: handleInputChange,\n ref: inputRef,\n tabIndex: -1,\n value: value ?? '',\n };\n\n return { list, input };\n};\n"],"names":["useListbox","data","externalData","defaultValue","disabled","emptyValue","id","nativeId","invalid","name","onChange","onFocus","onKeyDown","value","otherProps","ref","useFlattenedData","undefined","text","React","uuid","inputRef","useProxiedRef","currentIndex","getIndexFromValue","getNextIndex","useTypeahead","setInputValueByIndex","index","option","setInputValueByRef","current","handleListboxChange","length","defaultValueIndex","handleListboxKeyDown","event","charKey","key","test","nextIndex","persist","handleListboxFocus","handleInputChange","item","findByValue","target","detail","sanitizeItem","indexes","path","split","pop","lastPath","parents","map","i","join","find","list","getActiveDescendant","scrollOnFocus","tabIndex","input"],"mappings":"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"}
@@ -2,7 +2,6 @@ import { useMemo, useState, useEffect } from 'react';
2
2
  import { v4 } from 'uuid';
3
3
  import { useLocalization } from '../Provider/Provider.js';
4
4
  import { useProxiedRef } from '../../utils/hooks/useProxiedRef.js';
5
- import keycode from 'keycode';
6
5
  import { getIndexFromValue, getSelectedIndexesFromValue, setInputValueByRef, getActiveDescendant, findByValue } from './util.js';
7
6
  import { useTypeahead } from './useTypeahead.js';
8
7
 
@@ -101,9 +100,10 @@ const useMultiListbox = ({
101
100
  };
102
101
 
103
102
  const handleListboxKeyDown = (event, index) => {
104
- const charKey = String.fromCharCode(event.keyCode);
103
+ const charKey = event.key; // event.key always returns the whole string (String.fromCharCode(event.keyCode) does not)
104
+ // We need to filter out only alphabetical or numeric letters, that's why that condition has been changed
105
105
 
106
- if (charKey.match(/(\w)/g)) {
106
+ if (charKey.length === 1 && /(\w)/g.test(charKey)) {
107
107
  const nextIndex = getNextIndex(charKey);
108
108
 
109
109
  if (nextIndex > -1 && nextIndex !== currentIndex) {
@@ -113,22 +113,22 @@ const useMultiListbox = ({
113
113
  return;
114
114
  }
115
115
 
116
- switch (event.keyCode) {
117
- case keycode('space'):
116
+ switch (event.key) {
117
+ case ' ':
118
118
  {
119
119
  event.preventDefault();
120
120
  setInputValueByIndex(index);
121
121
  break;
122
122
  }
123
123
 
124
- case keycode('enter'):
124
+ case 'Enter':
125
125
  {
126
126
  setInputValueByIndex(index);
127
127
  break;
128
128
  }
129
129
  }
130
130
 
131
- setCurrentIndex(index);
131
+ setCurrentIndex(index !== undefined ? index : 0);
132
132
 
133
133
  if (onKeyDown) {
134
134
  event.persist();
@@ -1 +1 @@
1
- {"version":3,"file":"useMultiListbox.js","sources":["../../../../src/components/Listbox/useMultiListbox.tsx"],"sourcesContent":["import * as React from 'react';\nimport keycode from 'keycode';\nimport { v4 as uuid } from 'uuid';\nimport { useLocalization } from '../Provider/Provider';\nimport { ListboxProps } from './Listbox';\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\nimport { setInputValueByRef, getIndexFromValue, getSelectedIndexesFromValue, findByValue, getActiveDescendant } from './util';\nimport { ScrollableListProps, ScrollableListItem, ScrollableListItemValue } from './ScrollableList';\nimport { useTypeahead } from './useTypeahead';\n\ntype useListbox = {\n list: ScrollableListProps;\n input: Omit<React.HTMLAttributes<HTMLInputElement>, 'defaultValue'>;\n};\n\nexport const useMultiListbox = (\n {\n data: externalData = [],\n defaultValue,\n disabled,\n emptyValue: _,\n id: nativeId,\n name,\n onClick,\n onChange,\n onFocus,\n onKeyDown,\n value,\n ...otherProps\n }: ListboxProps,\n ref: React.Ref<HTMLInputElement>\n): useListbox => {\n const { texts } = useLocalization();\n const id = React.useMemo(() => nativeId || uuid(), [nativeId]);\n const inputRef = useProxiedRef<HTMLInputElement>(ref);\n const data = React.useMemo(() => {\n return [{ text: texts.listbox.allOption, value: '#ALL-OPTIONS#' }, ...externalData];\n }, [externalData]);\n const [currentIndex, setCurrentIndex] = React.useState(getIndexFromValue(data, value) || 0);\n const [allOptionsSelected, setAllOptionsSelected] = React.useState(false);\n const { getNextIndex } = useTypeahead({ data, currentIndex });\n const [selectedIndexes, setSelectedIndexes] = React.useState(getSelectedIndexesFromValue(data, value));\n\n React.useEffect(() => {\n if (defaultValue && !value) {\n setInputValueByRef(inputRef.current, defaultValue.toString());\n }\n }, []);\n\n React.useEffect(() => {\n const selectableItemsCount = data.filter(item => !item.disabled).length - 1;\n\n if (selectableItemsCount === selectedIndexes.length) {\n setAllOptionsSelected(true);\n } else {\n setAllOptionsSelected(false);\n }\n }, [selectedIndexes, data]);\n\n const setInputValueByIndex = (index: number | undefined): void => {\n if (index !== undefined) {\n const option = data[index];\n\n if (option && !option.disabled) {\n let newInputValue: ScrollableListItemValue = '';\n const currentInputValue = inputRef.current?.value;\n const currentValuesArray = currentInputValue?.split(',') || [];\n const optionAlreadySelected = currentValuesArray.findIndex(val => val === String(option.value)) !== -1;\n\n // Handling the select_all option\n if (option.value === '#ALL-OPTIONS#') {\n if (!allOptionsSelected) {\n newInputValue = data\n .filter((option, index) => index !== 0 && !option.disabled)\n .map(option => option.value)\n .join(',');\n } else {\n newInputValue = '';\n }\n } else {\n // Handling rest options\n if (optionAlreadySelected) {\n newInputValue = currentValuesArray.filter(val => val !== String(option.value)).join(',');\n } else {\n newInputValue = currentInputValue ? `${currentInputValue},${option.value}` : option.value;\n }\n }\n\n setInputValueByRef(inputRef.current, newInputValue);\n }\n }\n };\n\n const handleListboxClick = (event: React.MouseEvent<HTMLLIElement>, index: number): void => {\n event.preventDefault();\n\n if (!data[index].disabled) {\n setCurrentIndex(index);\n setInputValueByIndex(index);\n }\n\n if (onClick) {\n onClick(event);\n }\n };\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLElement>, index: number): void => {\n const charKey = String.fromCharCode(event.keyCode);\n\n if (charKey.match(/(\\w)/g)) {\n const nextIndex = getNextIndex(charKey);\n\n if (nextIndex > -1 && nextIndex !== currentIndex) {\n setCurrentIndex(nextIndex);\n }\n return;\n }\n\n switch (event.keyCode) {\n case keycode('space'): {\n event.preventDefault();\n setInputValueByIndex(index);\n break;\n }\n\n case keycode('enter'): {\n setInputValueByIndex(index);\n break;\n }\n\n default:\n }\n setCurrentIndex(index);\n\n if (onKeyDown) {\n event.persist();\n onKeyDown(event);\n }\n };\n\n const handleListboxFocus = (event: React.FocusEvent<HTMLElement>): void => {\n if (onFocus) {\n event.persist();\n onFocus(event);\n }\n };\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n event.persist();\n\n setSelectedIndexes(getSelectedIndexesFromValue(data, event.target.value));\n\n if (onChange) {\n const detail: ScrollableListItem[] = [];\n const valuesArray = event.target.value.split(',');\n\n valuesArray.forEach(val => {\n const item = findByValue(data, val);\n if (item) {\n detail.push(item);\n }\n });\n (event as any).detail = detail;\n\n onChange(event);\n }\n };\n\n const list = {\n ...otherProps,\n 'aria-activedescendant': getActiveDescendant(data, currentIndex, id),\n 'aria-multiselectable': true,\n data,\n disabled,\n id,\n onChange: () => null,\n onClick: handleListboxClick,\n onFocus: handleListboxFocus,\n onKeyDown: handleListboxKeyDown,\n scrollOnFocus: false,\n tabIndex: disabled ? -1 : otherProps.tabIndex ? otherProps.tabIndex : 0,\n value: currentIndex,\n selectedIndexes,\n multiselect: true,\n allOptionsSelected,\n };\n\n const input = {\n name,\n onChange: handleInputChange,\n ref: inputRef,\n tabIndex: -1,\n value: value ?? '',\n };\n\n return { list, input };\n};\n"],"names":["useMultiListbox","data","externalData","defaultValue","disabled","emptyValue","_","id","nativeId","name","onClick","onChange","onFocus","onKeyDown","value","otherProps","ref","texts","useLocalization","React","uuid","inputRef","useProxiedRef","text","listbox","allOption","currentIndex","setCurrentIndex","getIndexFromValue","allOptionsSelected","setAllOptionsSelected","getNextIndex","useTypeahead","selectedIndexes","setSelectedIndexes","getSelectedIndexesFromValue","setInputValueByRef","current","toString","selectableItemsCount","filter","item","length","setInputValueByIndex","index","undefined","option","newInputValue","currentInputValue","currentValuesArray","split","optionAlreadySelected","findIndex","val","String","map","join","handleListboxClick","event","preventDefault","handleListboxKeyDown","charKey","fromCharCode","keyCode","match","nextIndex","keycode","persist","handleListboxFocus","handleInputChange","target","detail","valuesArray","forEach","findByValue","push","list","getActiveDescendant","scrollOnFocus","tabIndex","multiselect","input"],"mappings":"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"}
1
+ {"version":3,"file":"useMultiListbox.js","sources":["../../../../src/components/Listbox/useMultiListbox.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { v4 as uuid } from 'uuid';\r\nimport { useLocalization } from '../Provider/Provider';\r\nimport { ListboxProps } from './Listbox';\r\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\r\nimport { setInputValueByRef, getIndexFromValue, getSelectedIndexesFromValue, findByValue, getActiveDescendant } from './util';\r\nimport { ScrollableListProps, ScrollableListItem, ScrollableListItemValue } from './ScrollableList';\r\nimport { useTypeahead } from './useTypeahead';\r\n\r\ntype useListbox = {\r\n list: ScrollableListProps;\r\n input: Omit<React.HTMLAttributes<HTMLInputElement>, 'defaultValue'>;\r\n};\r\n\r\nexport const useMultiListbox = (\r\n {\r\n data: externalData = [],\r\n defaultValue,\r\n disabled,\r\n emptyValue: _,\r\n id: nativeId,\r\n name,\r\n onClick,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n value,\r\n ...otherProps\r\n }: ListboxProps,\r\n ref: React.Ref<HTMLInputElement>\r\n): useListbox => {\r\n const { texts } = useLocalization();\r\n const id = React.useMemo(() => nativeId || uuid(), [nativeId]);\r\n const inputRef = useProxiedRef<HTMLInputElement>(ref);\r\n const data = React.useMemo(() => {\r\n return [{ text: texts.listbox.allOption, value: '#ALL-OPTIONS#' }, ...externalData];\r\n }, [externalData]);\r\n const [currentIndex, setCurrentIndex] = React.useState(getIndexFromValue(data, value) || 0);\r\n const [allOptionsSelected, setAllOptionsSelected] = React.useState(false);\r\n const { getNextIndex } = useTypeahead({ data, currentIndex });\r\n const [selectedIndexes, setSelectedIndexes] = React.useState(getSelectedIndexesFromValue(data, value));\r\n\r\n React.useEffect(() => {\r\n if (defaultValue && !value) {\r\n setInputValueByRef(inputRef.current, defaultValue.toString());\r\n }\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n const selectableItemsCount = data.filter(item => !item.disabled).length - 1;\r\n\r\n if (selectableItemsCount === selectedIndexes.length) {\r\n setAllOptionsSelected(true);\r\n } else {\r\n setAllOptionsSelected(false);\r\n }\r\n }, [selectedIndexes, data]);\r\n\r\n const setInputValueByIndex = (index: number | undefined): void => {\r\n if (index !== undefined) {\r\n const option = data[index];\r\n\r\n if (option && !option.disabled) {\r\n let newInputValue: ScrollableListItemValue = '';\r\n const currentInputValue = inputRef.current?.value;\r\n const currentValuesArray = currentInputValue?.split(',') || [];\r\n const optionAlreadySelected = currentValuesArray.findIndex(val => val === String(option.value)) !== -1;\r\n\r\n // Handling the select_all option\r\n if (option.value === '#ALL-OPTIONS#') {\r\n if (!allOptionsSelected) {\r\n newInputValue = data\r\n .filter((option, index) => index !== 0 && !option.disabled)\r\n .map(option => option.value)\r\n .join(',');\r\n } else {\r\n newInputValue = '';\r\n }\r\n } else {\r\n // Handling rest options\r\n if (optionAlreadySelected) {\r\n newInputValue = currentValuesArray.filter(val => val !== String(option.value)).join(',');\r\n } else {\r\n newInputValue = currentInputValue ? `${currentInputValue},${option.value}` : option.value;\r\n }\r\n }\r\n\r\n setInputValueByRef(inputRef.current, newInputValue);\r\n }\r\n }\r\n };\r\n\r\n const handleListboxClick = (event: React.MouseEvent<HTMLLIElement>, index: number): void => {\r\n event.preventDefault();\r\n\r\n if (!data[index].disabled) {\r\n setCurrentIndex(index);\r\n setInputValueByIndex(index);\r\n }\r\n\r\n if (onClick) {\r\n onClick(event);\r\n }\r\n };\r\n\r\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLElement>, index?: number): void => {\r\n const charKey = event.key;\r\n\r\n // event.key always returns the whole string (String.fromCharCode(event.keyCode) does not)\r\n // We need to filter out only alphabetical or numeric letters, that's why that condition has been changed\r\n if (charKey.length === 1 && /(\\w)/g.test(charKey)) {\r\n const nextIndex = getNextIndex(charKey);\r\n\r\n if (nextIndex > -1 && nextIndex !== currentIndex) {\r\n setCurrentIndex(nextIndex);\r\n }\r\n return;\r\n }\r\n\r\n switch (event.key) {\r\n case ' ': {\r\n event.preventDefault();\r\n setInputValueByIndex(index);\r\n break;\r\n }\r\n\r\n case 'Enter': {\r\n setInputValueByIndex(index);\r\n break;\r\n }\r\n\r\n default:\r\n }\r\n setCurrentIndex(index !== undefined ? index : 0);\r\n\r\n if (onKeyDown) {\r\n event.persist();\r\n onKeyDown(event);\r\n }\r\n };\r\n\r\n const handleListboxFocus = (event: React.FocusEvent<HTMLElement>): void => {\r\n if (onFocus) {\r\n event.persist();\r\n onFocus(event);\r\n }\r\n };\r\n\r\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\r\n event.persist();\r\n\r\n setSelectedIndexes(getSelectedIndexesFromValue(data, event.target.value));\r\n\r\n if (onChange) {\r\n const detail: ScrollableListItem[] = [];\r\n const valuesArray = event.target.value.split(',');\r\n\r\n valuesArray.forEach(val => {\r\n const item = findByValue(data, val);\r\n if (item) {\r\n detail.push(item);\r\n }\r\n });\r\n (event as any).detail = detail;\r\n\r\n onChange(event);\r\n }\r\n };\r\n\r\n const list = {\r\n ...otherProps,\r\n 'aria-activedescendant': getActiveDescendant(data, currentIndex, id),\r\n 'aria-multiselectable': true,\r\n data,\r\n disabled,\r\n id,\r\n onChange: () => null,\r\n onClick: handleListboxClick,\r\n onFocus: handleListboxFocus,\r\n onKeyDown: handleListboxKeyDown,\r\n scrollOnFocus: false,\r\n tabIndex: disabled ? -1 : otherProps.tabIndex ? otherProps.tabIndex : 0,\r\n value: currentIndex,\r\n selectedIndexes,\r\n multiselect: true,\r\n allOptionsSelected,\r\n };\r\n\r\n const input = {\r\n name,\r\n onChange: handleInputChange,\r\n ref: inputRef,\r\n tabIndex: -1,\r\n value: value ?? '',\r\n };\r\n\r\n return { list, input };\r\n};\r\n"],"names":["useMultiListbox","data","externalData","defaultValue","disabled","emptyValue","_","id","nativeId","name","onClick","onChange","onFocus","onKeyDown","value","otherProps","ref","texts","useLocalization","React","uuid","inputRef","useProxiedRef","text","listbox","allOption","currentIndex","setCurrentIndex","getIndexFromValue","allOptionsSelected","setAllOptionsSelected","getNextIndex","useTypeahead","selectedIndexes","setSelectedIndexes","getSelectedIndexesFromValue","setInputValueByRef","current","toString","selectableItemsCount","filter","item","length","setInputValueByIndex","index","undefined","option","newInputValue","currentInputValue","currentValuesArray","split","optionAlreadySelected","findIndex","val","String","map","join","handleListboxClick","event","preventDefault","handleListboxKeyDown","charKey","key","test","nextIndex","persist","handleListboxFocus","handleInputChange","target","detail","valuesArray","forEach","findByValue","push","list","getActiveDescendant","scrollOnFocus","tabIndex","multiselect","input"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Content.js","sources":["../../../../../src/components/Menu/components/Content.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport cn from 'classnames';\nimport { Placement } from '../../../types';\nimport { useProxiedRef } from '../../../utils/hooks/useProxiedRef';\nimport { useCurrentMenu } from '../Context';\n\nexport type MenuContentProps = Omit<DropdownMenuPrimitive.DropdownMenuContentProps, 'children' | 'side'> & {\n children: React.ReactNode;\n /** Set the position of the Menu relative to its trigger. Default value is `bottom` */\n placement?: Placement;\n};\n\nexport const Content = React.forwardRef(function MenuContent(props: MenuContentProps, ref: React.Ref<HTMLDivElement>) {\n const internalRef = useProxiedRef<any>(ref);\n const menu = useCurrentMenu();\n const { children, placement: side, ...otherProps } = props;\n const className = cn('border rounded block outline-none p-1 wcag-white border-grey yt-shadow', props.className);\n\n return (\n <DropdownMenuPrimitive.Content\n {...otherProps}\n align=\"start\"\n className={className}\n data-taco=\"menu\"\n side={side}\n sideOffset={2}\n style={{ minWidth: menu?.minWidth }}\n ref={internalRef}\n >\n {children}\n </DropdownMenuPrimitive.Content>\n );\n});\n"],"names":["Content","React","MenuContent","props","ref","internalRef","useProxiedRef","menu","useCurrentMenu","children","placement","side","otherProps","className","cn","DropdownMenuPrimitive","align","sideOffset","style","minWidth"],"mappings":";;;;;;MAaaA,OAAO,gBAAGC,UAAA,CAAiB,SAASC,WAAT,CAAqBC,KAArB,EAA8CC,GAA9C;EACpC,MAAMC,WAAW,GAAGC,aAAa,CAAMF,GAAN,CAAjC;EACA,MAAMG,IAAI,GAAGC,cAAc,EAA3B;EACA,MAAM;IAAEC,QAAF;IAAYC,SAAS,EAAEC,IAAvB;IAA6B,GAAGC;MAAeT,KAArD;EACA,MAAMU,SAAS,GAAGC,EAAE,CAAC,wEAAD,EAA2EX,KAAK,CAACU,SAAjF,CAApB;EAEA,OACIZ,aAAA,CAACc,SAAD,oBACQH;IACJI,KAAK,EAAC;IACNH,SAAS,EAAEA;iBACD;IACVF,IAAI,EAAEA;IACNM,UAAU,EAAE;IACZC,KAAK,EAAE;MAAEC,QAAQ,EAAEZ,IAAF,aAAEA,IAAF,uBAAEA,IAAI,CAAEY;;IACzBf,GAAG,EAAEC;IART,EAUKI,QAVL,CADJ;AAcH,CApBsB;;;;"}
1
+ {"version":3,"file":"Content.js","sources":["../../../../../src/components/Menu/components/Content.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport cn from 'classnames';\nimport { Placement } from '../../../types';\nimport { useProxiedRef } from '../../../utils/hooks/useProxiedRef';\nimport { useCurrentMenu } from '../Context';\n\nexport type MenuContentProps = Omit<DropdownMenuPrimitive.DropdownMenuContentProps, 'children' | 'side'> & {\n children: React.ReactNode;\n /** Set the position of the Menu relative to its trigger. Default value is `bottom` */\n placement?: Placement;\n};\n\nexport const Content = React.forwardRef(function MenuContent(props: MenuContentProps, ref: React.Ref<HTMLDivElement>) {\n const internalRef = useProxiedRef<any>(ref);\n const menu = useCurrentMenu();\n const { children, placement: side, ...otherProps } = props;\n const className = cn('border rounded block outline-none p-1 wcag-white border-grey yt-shadow', props.className);\n\n return (\n <DropdownMenuPrimitive.Content\n {...otherProps}\n align=\"start\"\n className={className}\n data-taco=\"menu\"\n side={side}\n sideOffset={2}\n style={{ minWidth: menu?.minWidth }}\n ref={internalRef}>\n {children}\n </DropdownMenuPrimitive.Content>\n );\n});\n"],"names":["Content","React","MenuContent","props","ref","internalRef","useProxiedRef","menu","useCurrentMenu","children","placement","side","otherProps","className","cn","DropdownMenuPrimitive","align","sideOffset","style","minWidth"],"mappings":";;;;;;MAaaA,OAAO,gBAAGC,UAAA,CAAiB,SAASC,WAAT,CAAqBC,KAArB,EAA8CC,GAA9C;EACpC,MAAMC,WAAW,GAAGC,aAAa,CAAMF,GAAN,CAAjC;EACA,MAAMG,IAAI,GAAGC,cAAc,EAA3B;EACA,MAAM;IAAEC,QAAF;IAAYC,SAAS,EAAEC,IAAvB;IAA6B,GAAGC;MAAeT,KAArD;EACA,MAAMU,SAAS,GAAGC,EAAE,CAAC,wEAAD,EAA2EX,KAAK,CAACU,SAAjF,CAApB;EAEA,OACIZ,aAAA,CAACc,SAAD,oBACQH;IACJI,KAAK,EAAC;IACNH,SAAS,EAAEA;iBACD;IACVF,IAAI,EAAEA;IACNM,UAAU,EAAE;IACZC,KAAK,EAAE;MAAEC,QAAQ,EAAEZ,IAAF,aAAEA,IAAF,uBAAEA,IAAI,CAAEY;;IACzBf,GAAG,EAAEC;IART,EASKI,QATL,CADJ;AAaH,CAnBsB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroup.js","sources":["../../../../../src/components/Menu/components/RadioGroup.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport cn from 'classnames';\nimport { getRadioGroupItemValueAsString, RadioGroupItemProps, RadioGroupProps, useRadioGroup } from '../../RadioGroup/RadioGroup';\nimport { useItemStyling } from './Item';\n\nexport type MenuRadioGroupItemProps = RadioGroupItemProps<HTMLDivElement>;\n\nexport const RadioItem = (props: MenuRadioGroupItemProps) => {\n const context = React.useContext(MenuRadioGroupContext);\n const { children, value, ...otherProps } = props;\n const disabled = context.disabled || props.disabled;\n const className = useItemStyling({\n disabled: disabled,\n indented: true,\n className: props.className,\n });\n\n return (\n <DropdownMenuPrimitive.RadioItem\n {...otherProps}\n className={className}\n disabled={disabled}\n value={getRadioGroupItemValueAsString(value)}\n >\n <DropdownMenuPrimitive.ItemIndicator className=\"absolute left-0 ml-1.5\">\n <span className=\"ml-1 flex h-1.5 w-1.5 rounded-full bg-current \" />\n </DropdownMenuPrimitive.ItemIndicator>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n};\n\nconst MenuRadioGroupContext = React.createContext({ disabled: false });\n\nexport type MenuRadioGroupProps = RadioGroupProps;\n\nexport const RadioGroup = (props: MenuRadioGroupProps) => {\n const { context, props: otherProps } = useRadioGroup(props);\n const className = cn('flex flex-col', props.className);\n\n return (\n <MenuRadioGroupContext.Provider value={context}>\n <DropdownMenuPrimitive.RadioGroup {...otherProps} className={className} />\n </MenuRadioGroupContext.Provider>\n );\n};\nRadioGroup.Item = RadioItem;\n"],"names":["RadioItem","props","context","React","MenuRadioGroupContext","children","value","otherProps","disabled","className","useItemStyling","indented","DropdownMenuPrimitive","getRadioGroupItemValueAsString","RadioGroup","useRadioGroup","cn","Provider","Item"],"mappings":";;;;;;MAQaA,SAAS,GAAIC,KAAD;EACrB,MAAMC,OAAO,GAAGC,UAAA,CAAiBC,qBAAjB,CAAhB;EACA,MAAM;IAAEC,QAAF;IAAYC,KAAZ;IAAmB,GAAGC;MAAeN,KAA3C;EACA,MAAMO,QAAQ,GAAGN,OAAO,CAACM,QAAR,IAAoBP,KAAK,CAACO,QAA3C;EACA,MAAMC,SAAS,GAAGC,cAAc,CAAC;IAC7BF,QAAQ,EAAEA,QADmB;IAE7BG,QAAQ,EAAE,IAFmB;IAG7BF,SAAS,EAAER,KAAK,CAACQ;GAHW,CAAhC;EAMA,OACIN,aAAA,CAACS,WAAD,oBACQL;IACJE,SAAS,EAAEA;IACXD,QAAQ,EAAEA;IACVF,KAAK,EAAEO,8BAA8B,CAACP,KAAD;IAJzC,EAMIH,aAAA,CAACS,aAAD;IAAqCH,SAAS,EAAC;GAA/C,EACIN,aAAA,OAAA;IAAMM,SAAS,EAAC;GAAhB,CADJ,CANJ,EASKJ,QATL,CADJ;AAaH;AAED,MAAMD,qBAAqB,gBAAGD,aAAA,CAAoB;EAAEK,QAAQ,EAAE;AAAZ,CAApB,CAA9B;MAIaM,UAAU,GAAIb,KAAD;EACtB,MAAM;IAAEC,OAAF;IAAWD,KAAK,EAAEM;MAAeQ,aAAa,CAACd,KAAD,CAApD;EACA,MAAMQ,SAAS,GAAGO,EAAE,CAAC,eAAD,EAAkBf,KAAK,CAACQ,SAAxB,CAApB;EAEA,OACIN,aAAA,CAACC,qBAAqB,CAACa,QAAvB;IAAgCX,KAAK,EAAEJ;GAAvC,EACIC,aAAA,CAACS,YAAD,oBAAsCL;IAAYE,SAAS,EAAEA;IAA7D,CADJ,CADJ;AAKH;AACDK,UAAU,CAACI,IAAX,GAAkBlB,SAAlB;;;;"}
1
+ {"version":3,"file":"RadioGroup.js","sources":["../../../../../src/components/Menu/components/RadioGroup.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport cn from 'classnames';\nimport { getRadioGroupItemValueAsString, RadioGroupItemProps, RadioGroupProps, useRadioGroup } from '../../RadioGroup/RadioGroup';\nimport { useItemStyling } from './Item';\n\nexport type MenuRadioGroupItemProps = RadioGroupItemProps<HTMLDivElement>;\n\nexport const RadioItem = (props: MenuRadioGroupItemProps) => {\n const context = React.useContext(MenuRadioGroupContext);\n const { children, value, ...otherProps } = props;\n const disabled = context.disabled || props.disabled;\n const className = useItemStyling({\n disabled: disabled,\n indented: true,\n className: props.className,\n });\n\n return (\n <DropdownMenuPrimitive.RadioItem\n {...otherProps}\n className={className}\n disabled={disabled}\n value={getRadioGroupItemValueAsString(value)}>\n <DropdownMenuPrimitive.ItemIndicator className=\"absolute left-0 ml-1.5\">\n <span className=\"ml-1 flex h-1.5 w-1.5 rounded-full bg-current \" />\n </DropdownMenuPrimitive.ItemIndicator>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n};\n\nconst MenuRadioGroupContext = React.createContext({ disabled: false });\n\nexport type MenuRadioGroupProps = RadioGroupProps;\n\nexport const RadioGroup = (props: MenuRadioGroupProps) => {\n const { context, props: otherProps } = useRadioGroup(props);\n const className = cn('flex flex-col', props.className);\n\n return (\n <MenuRadioGroupContext.Provider value={context}>\n <DropdownMenuPrimitive.RadioGroup {...otherProps} className={className} />\n </MenuRadioGroupContext.Provider>\n );\n};\nRadioGroup.Item = RadioItem;\n"],"names":["RadioItem","props","context","React","MenuRadioGroupContext","children","value","otherProps","disabled","className","useItemStyling","indented","DropdownMenuPrimitive","getRadioGroupItemValueAsString","RadioGroup","useRadioGroup","cn","Provider","Item"],"mappings":";;;;;;MAQaA,SAAS,GAAIC,KAAD;EACrB,MAAMC,OAAO,GAAGC,UAAA,CAAiBC,qBAAjB,CAAhB;EACA,MAAM;IAAEC,QAAF;IAAYC,KAAZ;IAAmB,GAAGC;MAAeN,KAA3C;EACA,MAAMO,QAAQ,GAAGN,OAAO,CAACM,QAAR,IAAoBP,KAAK,CAACO,QAA3C;EACA,MAAMC,SAAS,GAAGC,cAAc,CAAC;IAC7BF,QAAQ,EAAEA,QADmB;IAE7BG,QAAQ,EAAE,IAFmB;IAG7BF,SAAS,EAAER,KAAK,CAACQ;GAHW,CAAhC;EAMA,OACIN,aAAA,CAACS,WAAD,oBACQL;IACJE,SAAS,EAAEA;IACXD,QAAQ,EAAEA;IACVF,KAAK,EAAEO,8BAA8B,CAACP,KAAD;IAJzC,EAKIH,aAAA,CAACS,aAAD;IAAqCH,SAAS,EAAC;GAA/C,EACIN,aAAA,OAAA;IAAMM,SAAS,EAAC;GAAhB,CADJ,CALJ,EAQKJ,QARL,CADJ;AAYH;AAED,MAAMD,qBAAqB,gBAAGD,aAAA,CAAoB;EAAEK,QAAQ,EAAE;AAAZ,CAApB,CAA9B;MAIaM,UAAU,GAAIb,KAAD;EACtB,MAAM;IAAEC,OAAF;IAAWD,KAAK,EAAEM;MAAeQ,aAAa,CAACd,KAAD,CAApD;EACA,MAAMQ,SAAS,GAAGO,EAAE,CAAC,eAAD,EAAkBf,KAAK,CAACQ,SAAxB,CAApB;EAEA,OACIN,aAAA,CAACC,qBAAqB,CAACa,QAAvB;IAAgCX,KAAK,EAAEJ;GAAvC,EACIC,aAAA,CAACS,YAAD,oBAAsCL;IAAYE,SAAS,EAAEA;IAA7D,CADJ,CADJ;AAKH;AACDK,UAAU,CAACI,IAAX,GAAkBlB,SAAlB;;;;"}
@@ -81,7 +81,8 @@ const MenuGroup = /*#__PURE__*/React__default.forwardRef(function MenuGroup(prop
81
81
  const Menu = /*#__PURE__*/React__default.forwardRef(function Menu(props, ref) {
82
82
  const scrollableAreas = React__default.useMemo(() => {
83
83
  const scrollableAreas = [];
84
- React__default.Children.toArray(props.children).filter(child => !!child).map(child => {
84
+ const children = React__default.Children.toArray(props.children).filter(child => !!child);
85
+ children.forEach(child => {
85
86
  if (child.props.fixed) {
86
87
  scrollableAreas.push(child);
87
88
  } else {
@@ -1 +1 @@
1
- {"version":3,"file":"Navigation.js","sources":["../../../../src/components/Navigation/Navigation.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport { TreeviewProps, Treeview, TreeviewGroupProps, TreeviewItemProps } from '../Treeview/Treeview';\nimport { Icon } from '../Icon/Icon';\nimport { useDropTarget } from '../../utils/hooks/useDropTarget';\nimport './Navigation.css';\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\n\n// Item\nexport type NavigationItemProps = Omit<TreeviewItemProps, 'prefix'> & {\n /** Change the style to indicate the link is selected */\n active?: boolean;\n /** Handler to be used when dropping a dragged element over the navigation link */\n onDrop?: React.DragEventHandler;\n /**\n * Small amount of information placed next to the text of the link.\n * This can be any valid react element, for e.g. a `span`.\n * Should be used to indicate a relevant information of the link,\n * for e.g. the number of unread notifications\n */\n postfix?: React.ReactNode;\n /**\n * Small amount of information placed before the text of the link.\n * This can be any valid react element, for e.g. a `span`.\n * Should be used to indicate a feedback for user,\n * for e.g. display some sort of visual informational state or a relevant icon.\n */\n prefix?: React.ReactNode;\n /** Target of the link */\n target?: string;\n};\n\nconst Item = React.forwardRef(function Item(props: NavigationItemProps, ref: React.Ref<HTMLAnchorElement>) {\n const { active, children, onDrop, postfix, prefix, role, ...otherProps } = props;\n const proxyRef = useProxiedRef<HTMLAnchorElement>(ref);\n const [isDraggedOver, dropTargetProps] = useDropTarget(onDrop);\n const isTreeitem = role === 'treeitem';\n const className = cn(\n 'yt-navigation__item cursor-pointer',\n {\n 'w-full mb-px py-1 px-3 flex items-center hover:bg-grey-dark': isTreeitem,\n 'bg-white w-full h-10 px-3 flex-shrink-0 flex items-center justify-between cursor-pointer': !isTreeitem,\n 'yt-navigation__item--active': active && !isDraggedOver,\n 'bg-grey-dark': isTreeitem && active && !isDraggedOver,\n 'yt-navigation__item--dropping bg-blue': isDraggedOver,\n },\n props.className\n );\n\n const handleClick = (event: React.MouseEvent<HTMLSpanElement>): void => {\n if (event.target instanceof HTMLAnchorElement || event.target instanceof HTMLButtonElement) {\n return;\n }\n\n if (proxyRef.current) {\n proxyRef.current.click();\n }\n };\n\n return (\n <span {...dropTargetProps} className={className} onClick={handleClick} role={role}>\n {prefix && <span className=\"yt-navigation__item__prefix flex items-center\">{prefix}</span>}\n <a {...otherProps} className=\"block flex-grow truncate\" ref={proxyRef}>\n {children}\n </a>\n {postfix && <span className=\"yt-navigation__item__postfix ml-1\">{postfix}</span>}\n </span>\n );\n});\n\n// Panel\nexport type NavigationPanelProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst Panel = React.forwardRef(function Panel(props: NavigationPanelProps, ref: React.Ref<HTMLDivElement>) {\n return <div {...props} className={cn('w-full bg-white p-3', props.className)} ref={ref} />;\n});\n\n// Group\nexport type NavigationMenuGroupProps = TreeviewGroupProps;\n\nconst MenuGroup = React.forwardRef(function MenuGroup(props: NavigationMenuGroupProps, ref: React.Ref<HTMLDivElement>) {\n const className = cn(\n 'flex-shrink-0 space-y-1 outline-none',\n {\n 'bg-white pb-2': props.fixed,\n },\n props.className\n );\n const title = (expanded: boolean): JSX.Element => {\n const className = cn('bg-white h-10 pl-3 pr-1 flex items-center justify-between w-full', {\n 'mb-1': expanded,\n 'cursor-pointer hover:text-blue': !props.fixed,\n });\n\n return (\n <span className={className}>\n {typeof props.title === 'function' ? props.title(expanded) : props.title}\n {!props.fixed && <Icon name={expanded ? 'chevron-up' : 'chevron-down'} />}\n </span>\n );\n };\n\n return <Treeview.Group {...props} className={className} title={title} ref={ref} />;\n});\n\n// Menu\nexport type NavigationMenuProps = React.PropsWithChildren<TreeviewProps>;\n\nexport type ForwardedNavigationMenuWithStatics = React.ForwardRefExoticComponent<\n NavigationMenuProps & React.RefAttributes<HTMLDivElement>\n> & {\n /** Expandable region reprezenting a group of related links */\n Group: React.ForwardRefExoticComponent<NavigationMenuGroupProps & React.RefAttributes<HTMLDivElement>>;\n};\n\nconst Menu = React.forwardRef(function Menu(props: NavigationMenuProps, ref: React.Ref<HTMLDivElement>) {\n const scrollableAreas = React.useMemo(() => {\n const scrollableAreas: any[] = [];\n\n React.Children.toArray(props.children)\n .filter(child => !!child)\n .map((child: React.ReactElement<NavigationMenuGroupProps>) => {\n if (child.props.fixed) {\n scrollableAreas.push(child);\n } else {\n const x = scrollableAreas[scrollableAreas.length - 1];\n if (Array.isArray(x)) {\n x.push(child);\n } else {\n scrollableAreas.push([child]);\n }\n }\n });\n\n return scrollableAreas;\n }, [props.children]);\n\n return (\n <Treeview\n {...props}\n className={cn('divide-grey-light flex flex-grow flex-col divide-y-2 overflow-y-auto', props.className)}\n ref={ref}\n >\n {scrollableAreas.map((area, i) =>\n Array.isArray(area) ? (\n <div\n className=\"divide-grey-light flex h-0 flex-auto flex-shrink-0 flex-grow flex-col divide-y-2 overflow-y-auto\"\n key={i}\n >\n {area}\n </div>\n ) : (\n area\n )\n )}\n </Treeview>\n );\n}) as ForwardedNavigationMenuWithStatics;\n\nMenu.Group = MenuGroup;\n\n// Navigation\nexport type NavigationProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport type ForwardedNavigationWithStatics = React.ForwardRefExoticComponent<\n NavigationProps & React.RefAttributes<HTMLDivElement>\n> & {\n /** Navigation link */\n Item: React.ForwardRefExoticComponent<NavigationItemProps & React.RefAttributes<HTMLAnchorElement>>;\n /**\n * Container for the expandable groups that hold navigation links.\n * Should be used as a direct child of Navigation component, e.g. `Navigation.Menu`.\n * Should have the menu groups as a direct child, e.g. `Navigation.Menu.Group`\n */\n Menu: ForwardedNavigationMenuWithStatics;\n /**\n * Isolated container within the Navigation.\n * This can be used to create a region in the Navigation that is usually not scrollable, nor expandable,\n * containing useful information for user and quick actions\n */\n Panel: React.ForwardRefExoticComponent<NavigationPanelProps & React.RefAttributes<HTMLDivElement>>;\n};\n\nexport const Navigation = React.forwardRef(function Navigation(props: NavigationProps, ref: React.Ref<HTMLDivElement>) {\n const { children, ...otherProps } = props;\n const className = cn('h-full flex flex-col bg-grey-light divide-y-2 divide-grey-light', props.className);\n\n return (\n <div {...otherProps} className={className} data-taco=\"navigation\" ref={ref}>\n {children}\n </div>\n );\n}) as ForwardedNavigationWithStatics;\n\nNavigation.Menu = Menu;\nNavigation.Item = Item;\nNavigation.Panel = Panel;\n"],"names":["Item","React","forwardRef","props","ref","active","children","onDrop","postfix","prefix","role","otherProps","proxyRef","useProxiedRef","isDraggedOver","dropTargetProps","useDropTarget","isTreeitem","className","cn","handleClick","event","target","HTMLAnchorElement","HTMLButtonElement","current","click","onClick","Panel","MenuGroup","fixed","title","expanded","Icon","name","Treeview","Group","Menu","scrollableAreas","useMemo","Children","toArray","filter","child","map","push","x","length","Array","isArray","area","i","key","Navigation"],"mappings":"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"}
1
+ {"version":3,"file":"Navigation.js","sources":["../../../../src/components/Navigation/Navigation.tsx"],"sourcesContent":["import React from 'react';\r\nimport cn from 'classnames';\r\nimport { TreeviewProps, Treeview, TreeviewGroupProps, TreeviewItemProps } from '../Treeview/Treeview';\r\nimport { Icon } from '../Icon/Icon';\r\nimport { useDropTarget } from '../../utils/hooks/useDropTarget';\r\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\r\nimport './Navigation.css';\r\n\r\n// Item\r\nexport type NavigationItemProps = Omit<TreeviewItemProps, 'prefix'> & {\r\n /** Change the style to indicate the link is selected */\r\n active?: boolean;\r\n /** Handler to be used when dropping a dragged element over the navigation link */\r\n onDrop?: React.DragEventHandler;\r\n /**\r\n * Small amount of information placed next to the text of the link.\r\n * This can be any valid react element, for e.g. a `span`.\r\n * Should be used to indicate a relevant information of the link,\r\n * for e.g. the number of unread notifications\r\n */\r\n postfix?: React.ReactNode;\r\n /**\r\n * Small amount of information placed before the text of the link.\r\n * This can be any valid react element, for e.g. a `span`.\r\n * Should be used to indicate a feedback for user,\r\n * for e.g. display some sort of visual informational state or a relevant icon.\r\n */\r\n prefix?: React.ReactNode;\r\n /** Target of the link */\r\n target?: string;\r\n};\r\n\r\nconst Item = React.forwardRef(function Item(props: NavigationItemProps, ref: React.Ref<HTMLAnchorElement>) {\r\n const { active, children, onDrop, postfix, prefix, role, ...otherProps } = props;\r\n const proxyRef = useProxiedRef<HTMLAnchorElement>(ref);\r\n const [isDraggedOver, dropTargetProps] = useDropTarget(onDrop);\r\n const isTreeitem = role === 'treeitem';\r\n const className = cn(\r\n 'yt-navigation__item cursor-pointer',\r\n {\r\n 'w-full mb-px py-1 px-3 flex items-center hover:bg-grey-dark': isTreeitem,\r\n 'bg-white w-full h-10 px-3 flex-shrink-0 flex items-center justify-between cursor-pointer': !isTreeitem,\r\n 'yt-navigation__item--active': active && !isDraggedOver,\r\n 'bg-grey-dark': isTreeitem && active && !isDraggedOver,\r\n 'yt-navigation__item--dropping bg-blue': isDraggedOver,\r\n },\r\n props.className\r\n );\r\n\r\n const handleClick = (event: React.MouseEvent<HTMLSpanElement>): void => {\r\n if (event.target instanceof HTMLAnchorElement || event.target instanceof HTMLButtonElement) {\r\n return;\r\n }\r\n\r\n if (proxyRef.current) {\r\n proxyRef.current.click();\r\n }\r\n };\r\n\r\n return (\r\n <span {...dropTargetProps} className={className} onClick={handleClick} role={role}>\r\n {prefix && <span className=\"yt-navigation__item__prefix flex items-center\">{prefix}</span>}\r\n <a {...otherProps} className=\"block flex-grow truncate\" ref={proxyRef}>\r\n {children}\r\n </a>\r\n {postfix && <span className=\"yt-navigation__item__postfix ml-1\">{postfix}</span>}\r\n </span>\r\n );\r\n});\r\n\r\n// Panel\r\nexport type NavigationPanelProps = React.HTMLAttributes<HTMLDivElement>;\r\n\r\nconst Panel = React.forwardRef(function Panel(props: NavigationPanelProps, ref: React.Ref<HTMLDivElement>) {\r\n return <div {...props} className={cn('w-full bg-white p-3', props.className)} ref={ref} />;\r\n});\r\n\r\n// Group\r\nexport type NavigationMenuGroupProps = TreeviewGroupProps;\r\n\r\nconst MenuGroup = React.forwardRef(function MenuGroup(props: NavigationMenuGroupProps, ref: React.Ref<HTMLDivElement>) {\r\n const className = cn(\r\n 'flex-shrink-0 space-y-1 outline-none',\r\n {\r\n 'bg-white pb-2': props.fixed,\r\n },\r\n props.className\r\n );\r\n const title = (expanded: boolean): JSX.Element => {\r\n const className = cn('bg-white h-10 pl-3 pr-1 flex items-center justify-between w-full', {\r\n 'mb-1': expanded,\r\n 'cursor-pointer hover:text-blue': !props.fixed,\r\n });\r\n\r\n return (\r\n <span className={className}>\r\n {typeof props.title === 'function' ? props.title(expanded) : props.title}\r\n {!props.fixed && <Icon name={expanded ? 'chevron-up' : 'chevron-down'} />}\r\n </span>\r\n );\r\n };\r\n\r\n return <Treeview.Group {...props} className={className} title={title} ref={ref} />;\r\n});\r\n\r\n// Menu\r\nexport type NavigationMenuProps = React.PropsWithChildren<TreeviewProps>;\r\n\r\nexport type ForwardedNavigationMenuWithStatics = React.ForwardRefExoticComponent<\r\n NavigationMenuProps & React.RefAttributes<HTMLDivElement>\r\n> & {\r\n /** Expandable region reprezenting a group of related links */\r\n Group: React.ForwardRefExoticComponent<NavigationMenuGroupProps & React.RefAttributes<HTMLDivElement>>;\r\n};\r\n\r\nconst Menu = React.forwardRef(function Menu(props: NavigationMenuProps, ref: React.Ref<HTMLDivElement>) {\r\n const scrollableAreas = React.useMemo(() => {\r\n const scrollableAreas: any[] = [];\r\n\r\n const children = React.Children.toArray(props.children).filter(\r\n child => !!child\r\n ) as React.ReactElement<NavigationMenuGroupProps>[];\r\n\r\n children.forEach(child => {\r\n if (child.props.fixed) {\r\n scrollableAreas.push(child);\r\n } else {\r\n const x = scrollableAreas[scrollableAreas.length - 1];\r\n if (Array.isArray(x)) {\r\n x.push(child);\r\n } else {\r\n scrollableAreas.push([child]);\r\n }\r\n }\r\n });\r\n\r\n return scrollableAreas;\r\n }, [props.children]);\r\n\r\n return (\r\n <Treeview\r\n {...props}\r\n className={cn('divide-grey-light flex flex-grow flex-col divide-y-2 overflow-y-auto', props.className)}\r\n ref={ref}>\r\n {scrollableAreas.map((area, i) =>\r\n Array.isArray(area) ? (\r\n <div\r\n className=\"divide-grey-light flex h-0 flex-auto flex-shrink-0 flex-grow flex-col divide-y-2 overflow-y-auto\"\r\n key={i}>\r\n {area}\r\n </div>\r\n ) : (\r\n area\r\n )\r\n )}\r\n </Treeview>\r\n );\r\n}) as ForwardedNavigationMenuWithStatics;\r\n\r\nMenu.Group = MenuGroup;\r\n\r\n// Navigation\r\nexport type NavigationProps = React.HTMLAttributes<HTMLDivElement>;\r\n\r\nexport type ForwardedNavigationWithStatics = React.ForwardRefExoticComponent<\r\n NavigationProps & React.RefAttributes<HTMLDivElement>\r\n> & {\r\n /** Navigation link */\r\n Item: React.ForwardRefExoticComponent<NavigationItemProps & React.RefAttributes<HTMLAnchorElement>>;\r\n /**\r\n * Container for the expandable groups that hold navigation links.\r\n * Should be used as a direct child of Navigation component, e.g. `Navigation.Menu`.\r\n * Should have the menu groups as a direct child, e.g. `Navigation.Menu.Group`\r\n */\r\n Menu: ForwardedNavigationMenuWithStatics;\r\n /**\r\n * Isolated container within the Navigation.\r\n * This can be used to create a region in the Navigation that is usually not scrollable, nor expandable,\r\n * containing useful information for user and quick actions\r\n */\r\n Panel: React.ForwardRefExoticComponent<NavigationPanelProps & React.RefAttributes<HTMLDivElement>>;\r\n};\r\n\r\nexport const Navigation = React.forwardRef(function Navigation(props: NavigationProps, ref: React.Ref<HTMLDivElement>) {\r\n const { children, ...otherProps } = props;\r\n const className = cn('h-full flex flex-col bg-grey-light divide-y-2 divide-grey-light', props.className);\r\n\r\n return (\r\n <div {...otherProps} className={className} data-taco=\"navigation\" ref={ref}>\r\n {children}\r\n </div>\r\n );\r\n}) as ForwardedNavigationWithStatics;\r\n\r\nNavigation.Menu = Menu;\r\nNavigation.Item = Item;\r\nNavigation.Panel = Panel;\r\n"],"names":["Item","React","forwardRef","props","ref","active","children","onDrop","postfix","prefix","role","otherProps","proxyRef","useProxiedRef","isDraggedOver","dropTargetProps","useDropTarget","isTreeitem","className","cn","handleClick","event","target","HTMLAnchorElement","HTMLButtonElement","current","click","onClick","Panel","MenuGroup","fixed","title","expanded","Icon","name","Treeview","Group","Menu","scrollableAreas","useMemo","Children","toArray","filter","child","forEach","push","x","length","Array","isArray","map","area","i","key","Navigation"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PageNumbers.js","sources":["../../../../src/components/Pagination/PageNumbers.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Button } from '../Button/Button';\nimport { useLocalization } from '../Provider/Provider';\n\ntype PageNumberProps = {\n currentPageIndex: number;\n onClick: (pageIndex: number) => void;\n pageCount: number;\n};\n\nconst createPageRange = (pageCount: number, pageNumber: number): number[] => {\n let lowerLimit = Math.min(pageNumber, pageCount);\n let upperLimit = Math.min(pageNumber, pageCount);\n\n for (let b = 1; b < 5 && b < pageCount; ) {\n if (lowerLimit > 1) {\n lowerLimit--;\n b++;\n }\n if (b < 5 && upperLimit < pageCount) {\n upperLimit++;\n b++;\n }\n }\n\n const range: number[] = [];\n\n for (let i = lowerLimit; i <= upperLimit; i++) {\n range.push(i);\n }\n\n return range;\n};\n\nexport const PageNumbers = ({ currentPageIndex = 0, onClick: handleClick, pageCount }: PageNumberProps): JSX.Element => {\n const range = createPageRange(pageCount, currentPageIndex + 1);\n const { texts } = useLocalization();\n\n return (\n <>\n {range.map((pageNumber: number) => (\n <Button\n appearance={pageNumber === currentPageIndex + 1 ? 'primary' : 'default'}\n aria-current={pageNumber === currentPageIndex + 1 ? 'page' : undefined}\n key={pageNumber}\n onClick={() => handleClick(pageNumber - 1)}\n aria-label={texts.pagination.actions.pageX.replace('[X]', String(pageNumber))}\n tooltip={texts.pagination.actions.pageX.replace('[X]', String(pageNumber))}\n >\n {pageNumber}\n </Button>\n ))}\n </>\n );\n};\n"],"names":["createPageRange","pageCount","pageNumber","lowerLimit","Math","min","upperLimit","b","range","i","push","PageNumbers","currentPageIndex","onClick","handleClick","texts","useLocalization","React","map","Button","appearance","undefined","key","pagination","actions","pageX","replace","String","tooltip"],"mappings":";;;;AAUA,MAAMA,eAAe,GAAG,CAACC,SAAD,EAAoBC,UAApB;EACpB,IAAIC,UAAU,GAAGC,IAAI,CAACC,GAAL,CAASH,UAAT,EAAqBD,SAArB,CAAjB;EACA,IAAIK,UAAU,GAAGF,IAAI,CAACC,GAAL,CAASH,UAAT,EAAqBD,SAArB,CAAjB;;EAEA,KAAK,IAAIM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAAJ,IAASA,CAAC,GAAGN,SAA7B,GAA0C;IACtC,IAAIE,UAAU,GAAG,CAAjB,EAAoB;MAChBA,UAAU;MACVI,CAAC;;;IAEL,IAAIA,CAAC,GAAG,CAAJ,IAASD,UAAU,GAAGL,SAA1B,EAAqC;MACjCK,UAAU;MACVC,CAAC;;;;EAIT,MAAMC,KAAK,GAAa,EAAxB;;EAEA,KAAK,IAAIC,CAAC,GAAGN,UAAb,EAAyBM,CAAC,IAAIH,UAA9B,EAA0CG,CAAC,EAA3C,EAA+C;IAC3CD,KAAK,CAACE,IAAN,CAAWD,CAAX;;;EAGJ,OAAOD,KAAP;AACH,CAtBD;;MAwBaG,WAAW,GAAG,CAAC;EAAEC,gBAAgB,GAAG,CAArB;EAAwBC,OAAO,EAAEC,WAAjC;EAA8Cb;AAA9C,CAAD;EACvB,MAAMO,KAAK,GAAGR,eAAe,CAACC,SAAD,EAAYW,gBAAgB,GAAG,CAA/B,CAA7B;EACA,MAAM;IAAEG;MAAUC,eAAe,EAAjC;EAEA,OACIC,aAAA,SAAA,MAAA,EACKT,KAAK,CAACU,GAAN,CAAWhB,UAAD,IACPe,aAAA,CAACE,MAAD;IACIC,UAAU,EAAElB,UAAU,KAAKU,gBAAgB,GAAG,CAAlC,GAAsC,SAAtC,GAAkD;oBAChDV,UAAU,KAAKU,gBAAgB,GAAG,CAAlC,GAAsC,MAAtC,GAA+CS;IAC7DC,GAAG,EAAEpB;IACLW,OAAO,EAAE,MAAMC,WAAW,CAACZ,UAAU,GAAG,CAAd;kBACda,KAAK,CAACQ,UAAN,CAAiBC,OAAjB,CAAyBC,KAAzB,CAA+BC,OAA/B,CAAuC,KAAvC,EAA8CC,MAAM,CAACzB,UAAD,CAApD;IACZ0B,OAAO,EAAEb,KAAK,CAACQ,UAAN,CAAiBC,OAAjB,CAAyBC,KAAzB,CAA+BC,OAA/B,CAAuC,KAAvC,EAA8CC,MAAM,CAACzB,UAAD,CAApD;GANb,EAQKA,UARL,CADH,CADL,CADJ;AAgBH;;;;"}
1
+ {"version":3,"file":"PageNumbers.js","sources":["../../../../src/components/Pagination/PageNumbers.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Button } from '../Button/Button';\nimport { useLocalization } from '../Provider/Provider';\n\ntype PageNumberProps = {\n currentPageIndex: number;\n onClick: (pageIndex: number) => void;\n pageCount: number;\n};\n\nconst createPageRange = (pageCount: number, pageNumber: number): number[] => {\n let lowerLimit = Math.min(pageNumber, pageCount);\n let upperLimit = Math.min(pageNumber, pageCount);\n\n for (let b = 1; b < 5 && b < pageCount; ) {\n if (lowerLimit > 1) {\n lowerLimit--;\n b++;\n }\n if (b < 5 && upperLimit < pageCount) {\n upperLimit++;\n b++;\n }\n }\n\n const range: number[] = [];\n\n for (let i = lowerLimit; i <= upperLimit; i++) {\n range.push(i);\n }\n\n return range;\n};\n\nexport const PageNumbers = ({ currentPageIndex = 0, onClick: handleClick, pageCount }: PageNumberProps): JSX.Element => {\n const range = createPageRange(pageCount, currentPageIndex + 1);\n const { texts } = useLocalization();\n\n return (\n <>\n {range.map((pageNumber: number) => (\n <Button\n appearance={pageNumber === currentPageIndex + 1 ? 'primary' : 'default'}\n aria-current={pageNumber === currentPageIndex + 1 ? 'page' : undefined}\n key={pageNumber}\n onClick={() => handleClick(pageNumber - 1)}\n aria-label={texts.pagination.actions.pageX.replace('[X]', String(pageNumber))}\n tooltip={texts.pagination.actions.pageX.replace('[X]', String(pageNumber))}>\n {pageNumber}\n </Button>\n ))}\n </>\n );\n};\n"],"names":["createPageRange","pageCount","pageNumber","lowerLimit","Math","min","upperLimit","b","range","i","push","PageNumbers","currentPageIndex","onClick","handleClick","texts","useLocalization","React","map","Button","appearance","undefined","key","pagination","actions","pageX","replace","String","tooltip"],"mappings":";;;;AAUA,MAAMA,eAAe,GAAG,CAACC,SAAD,EAAoBC,UAApB;EACpB,IAAIC,UAAU,GAAGC,IAAI,CAACC,GAAL,CAASH,UAAT,EAAqBD,SAArB,CAAjB;EACA,IAAIK,UAAU,GAAGF,IAAI,CAACC,GAAL,CAASH,UAAT,EAAqBD,SAArB,CAAjB;;EAEA,KAAK,IAAIM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAAJ,IAASA,CAAC,GAAGN,SAA7B,GAA0C;IACtC,IAAIE,UAAU,GAAG,CAAjB,EAAoB;MAChBA,UAAU;MACVI,CAAC;;;IAEL,IAAIA,CAAC,GAAG,CAAJ,IAASD,UAAU,GAAGL,SAA1B,EAAqC;MACjCK,UAAU;MACVC,CAAC;;;;EAIT,MAAMC,KAAK,GAAa,EAAxB;;EAEA,KAAK,IAAIC,CAAC,GAAGN,UAAb,EAAyBM,CAAC,IAAIH,UAA9B,EAA0CG,CAAC,EAA3C,EAA+C;IAC3CD,KAAK,CAACE,IAAN,CAAWD,CAAX;;;EAGJ,OAAOD,KAAP;AACH,CAtBD;;MAwBaG,WAAW,GAAG,CAAC;EAAEC,gBAAgB,GAAG,CAArB;EAAwBC,OAAO,EAAEC,WAAjC;EAA8Cb;AAA9C,CAAD;EACvB,MAAMO,KAAK,GAAGR,eAAe,CAACC,SAAD,EAAYW,gBAAgB,GAAG,CAA/B,CAA7B;EACA,MAAM;IAAEG;MAAUC,eAAe,EAAjC;EAEA,OACIC,aAAA,SAAA,MAAA,EACKT,KAAK,CAACU,GAAN,CAAWhB,UAAD,IACPe,aAAA,CAACE,MAAD;IACIC,UAAU,EAAElB,UAAU,KAAKU,gBAAgB,GAAG,CAAlC,GAAsC,SAAtC,GAAkD;oBAChDV,UAAU,KAAKU,gBAAgB,GAAG,CAAlC,GAAsC,MAAtC,GAA+CS;IAC7DC,GAAG,EAAEpB;IACLW,OAAO,EAAE,MAAMC,WAAW,CAACZ,UAAU,GAAG,CAAd;kBACda,KAAK,CAACQ,UAAN,CAAiBC,OAAjB,CAAyBC,KAAzB,CAA+BC,OAA/B,CAAuC,KAAvC,EAA8CC,MAAM,CAACzB,UAAD,CAApD;IACZ0B,OAAO,EAAEb,KAAK,CAACQ,UAAN,CAAiBC,OAAjB,CAAyBC,KAAzB,CAA+BC,OAA/B,CAAuC,KAAvC,EAA8CC,MAAM,CAACzB,UAAD,CAApD;GANb,EAOKA,UAPL,CADH,CADL,CADJ;AAeH;;;;"}
@@ -1,5 +1,4 @@
1
1
  import React__default from 'react';
2
- import keycode from 'keycode';
3
2
 
4
3
  const usePaginationShortcuts = ({
5
4
  setPageIndex,
@@ -8,25 +7,25 @@ const usePaginationShortcuts = ({
8
7
  dangerouslyHijackGlobalKeyboardNavigation: useGlobalKeyboardNavigation
9
8
  }) => {
10
9
  const onKeyDown = event => {
11
- if (setPageIndex && event.keyCode === keycode('home')) {
10
+ if (setPageIndex && event.key === 'Home') {
12
11
  event.preventDefault();
13
12
  setPageIndex(0);
14
13
  return;
15
14
  }
16
15
 
17
- if (setPageIndex && event.keyCode === keycode('end')) {
16
+ if (setPageIndex && event.key === 'End') {
18
17
  event.preventDefault();
19
18
  setPageIndex(maxPageIndex);
20
19
  return;
21
20
  }
22
21
 
23
- if (setPageIndex && event.keyCode === keycode('page up')) {
22
+ if (setPageIndex && event.key === 'PageUp') {
24
23
  event.preventDefault();
25
24
  setPageIndex(Math.max(0, pageIndex - 1));
26
25
  return;
27
26
  }
28
27
 
29
- if (setPageIndex && event.keyCode === keycode('page down')) {
28
+ if (setPageIndex && event.key === 'PageDown') {
30
29
  event.preventDefault();
31
30
  setPageIndex(Math.min(maxPageIndex, pageIndex + 1));
32
31
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"usePaginationShortcuts.js","sources":["../../../../src/components/Pagination/usePaginationShortcuts.tsx"],"sourcesContent":["import React from 'react';\nimport keycode from 'keycode';\n\ninterface Props {\n setPageIndex: (pageIndex: number) => void;\n maxPageIndex: number;\n pageIndex: number;\n dangerouslyHijackGlobalKeyboardNavigation: boolean;\n}\n\nexport const usePaginationShortcuts = ({\n setPageIndex,\n maxPageIndex,\n pageIndex,\n dangerouslyHijackGlobalKeyboardNavigation: useGlobalKeyboardNavigation,\n}: Props) => {\n const onKeyDown = (event: KeyboardEvent): void => {\n if (setPageIndex && event.keyCode === keycode('home')) {\n event.preventDefault();\n setPageIndex(0);\n return;\n }\n\n if (setPageIndex && event.keyCode === keycode('end')) {\n event.preventDefault();\n setPageIndex(maxPageIndex);\n return;\n }\n\n if (setPageIndex && event.keyCode === keycode('page up')) {\n event.preventDefault();\n setPageIndex(Math.max(0, pageIndex - 1));\n return;\n }\n\n if (setPageIndex && event.keyCode === keycode('page down')) {\n event.preventDefault();\n setPageIndex(Math.min(maxPageIndex, pageIndex + 1));\n return;\n }\n };\n\n React.useEffect(() => {\n if (useGlobalKeyboardNavigation) {\n window.addEventListener('keydown', onKeyDown);\n }\n\n return () => {\n if (useGlobalKeyboardNavigation) {\n window.removeEventListener('keydown', onKeyDown);\n }\n };\n }, [onKeyDown, useGlobalKeyboardNavigation]);\n};\n"],"names":["usePaginationShortcuts","setPageIndex","maxPageIndex","pageIndex","dangerouslyHijackGlobalKeyboardNavigation","useGlobalKeyboardNavigation","onKeyDown","event","keyCode","keycode","preventDefault","Math","max","min","React","useEffect","window","addEventListener","removeEventListener"],"mappings":";;;MAUaA,sBAAsB,GAAG,CAAC;EACnCC,YADmC;EAEnCC,YAFmC;EAGnCC,SAHmC;EAInCC,yCAAyC,EAAEC;AAJR,CAAD;EAMlC,MAAMC,SAAS,GAAIC,KAAD;IACd,IAAIN,YAAY,IAAIM,KAAK,CAACC,OAAN,KAAkBC,OAAO,CAAC,MAAD,CAA7C,EAAuD;MACnDF,KAAK,CAACG,cAAN;MACAT,YAAY,CAAC,CAAD,CAAZ;MACA;;;IAGJ,IAAIA,YAAY,IAAIM,KAAK,CAACC,OAAN,KAAkBC,OAAO,CAAC,KAAD,CAA7C,EAAsD;MAClDF,KAAK,CAACG,cAAN;MACAT,YAAY,CAACC,YAAD,CAAZ;MACA;;;IAGJ,IAAID,YAAY,IAAIM,KAAK,CAACC,OAAN,KAAkBC,OAAO,CAAC,SAAD,CAA7C,EAA0D;MACtDF,KAAK,CAACG,cAAN;MACAT,YAAY,CAACU,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYT,SAAS,GAAG,CAAxB,CAAD,CAAZ;MACA;;;IAGJ,IAAIF,YAAY,IAAIM,KAAK,CAACC,OAAN,KAAkBC,OAAO,CAAC,WAAD,CAA7C,EAA4D;MACxDF,KAAK,CAACG,cAAN;MACAT,YAAY,CAACU,IAAI,CAACE,GAAL,CAASX,YAAT,EAAuBC,SAAS,GAAG,CAAnC,CAAD,CAAZ;MACA;;GAtBR;;EA0BAW,cAAK,CAACC,SAAN,CAAgB;IACZ,IAAIV,2BAAJ,EAAiC;MAC7BW,MAAM,CAACC,gBAAP,CAAwB,SAAxB,EAAmCX,SAAnC;;;IAGJ,OAAO;MACH,IAAID,2BAAJ,EAAiC;QAC7BW,MAAM,CAACE,mBAAP,CAA2B,SAA3B,EAAsCZ,SAAtC;;KAFR;GALJ,EAUG,CAACA,SAAD,EAAYD,2BAAZ,CAVH;AAWH;;;;"}
1
+ {"version":3,"file":"usePaginationShortcuts.js","sources":["../../../../src/components/Pagination/usePaginationShortcuts.tsx"],"sourcesContent":["import React from 'react';\n\ninterface Props {\n setPageIndex: (pageIndex: number) => void;\n maxPageIndex: number;\n pageIndex: number;\n dangerouslyHijackGlobalKeyboardNavigation: boolean;\n}\n\nexport const usePaginationShortcuts = ({\n setPageIndex,\n maxPageIndex,\n pageIndex,\n dangerouslyHijackGlobalKeyboardNavigation: useGlobalKeyboardNavigation,\n}: Props) => {\n const onKeyDown = (event: KeyboardEvent): void => {\n if (setPageIndex && event.key === 'Home') {\n event.preventDefault();\n setPageIndex(0);\n return;\n }\n\n if (setPageIndex && event.key === 'End') {\n event.preventDefault();\n setPageIndex(maxPageIndex);\n return;\n }\n\n if (setPageIndex && event.key === 'PageUp') {\n event.preventDefault();\n setPageIndex(Math.max(0, pageIndex - 1));\n return;\n }\n\n if (setPageIndex && event.key === 'PageDown') {\n event.preventDefault();\n setPageIndex(Math.min(maxPageIndex, pageIndex + 1));\n return;\n }\n };\n\n React.useEffect(() => {\n if (useGlobalKeyboardNavigation) {\n window.addEventListener('keydown', onKeyDown);\n }\n\n return () => {\n if (useGlobalKeyboardNavigation) {\n window.removeEventListener('keydown', onKeyDown);\n }\n };\n }, [onKeyDown, useGlobalKeyboardNavigation]);\n};\n"],"names":["usePaginationShortcuts","setPageIndex","maxPageIndex","pageIndex","dangerouslyHijackGlobalKeyboardNavigation","useGlobalKeyboardNavigation","onKeyDown","event","key","preventDefault","Math","max","min","React","useEffect","window","addEventListener","removeEventListener"],"mappings":";;MASaA,sBAAsB,GAAG,CAAC;EACnCC,YADmC;EAEnCC,YAFmC;EAGnCC,SAHmC;EAInCC,yCAAyC,EAAEC;AAJR,CAAD;EAMlC,MAAMC,SAAS,GAAIC,KAAD;IACd,IAAIN,YAAY,IAAIM,KAAK,CAACC,GAAN,KAAc,MAAlC,EAA0C;MACtCD,KAAK,CAACE,cAAN;MACAR,YAAY,CAAC,CAAD,CAAZ;MACA;;;IAGJ,IAAIA,YAAY,IAAIM,KAAK,CAACC,GAAN,KAAc,KAAlC,EAAyC;MACrCD,KAAK,CAACE,cAAN;MACAR,YAAY,CAACC,YAAD,CAAZ;MACA;;;IAGJ,IAAID,YAAY,IAAIM,KAAK,CAACC,GAAN,KAAc,QAAlC,EAA4C;MACxCD,KAAK,CAACE,cAAN;MACAR,YAAY,CAACS,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYR,SAAS,GAAG,CAAxB,CAAD,CAAZ;MACA;;;IAGJ,IAAIF,YAAY,IAAIM,KAAK,CAACC,GAAN,KAAc,UAAlC,EAA8C;MAC1CD,KAAK,CAACE,cAAN;MACAR,YAAY,CAACS,IAAI,CAACE,GAAL,CAASV,YAAT,EAAuBC,SAAS,GAAG,CAAnC,CAAD,CAAZ;MACA;;GAtBR;;EA0BAU,cAAK,CAACC,SAAN,CAAgB;IACZ,IAAIT,2BAAJ,EAAiC;MAC7BU,MAAM,CAACC,gBAAP,CAAwB,SAAxB,EAAmCV,SAAnC;;;IAGJ,OAAO;MACH,IAAID,2BAAJ,EAAiC;QAC7BU,MAAM,CAACE,mBAAP,CAA2B,SAA3B,EAAsCX,SAAtC;;KAFR;GALJ,EAUG,CAACA,SAAD,EAAYD,2BAAZ,CAVH;AAWH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Primitives.js","sources":["../../../../src/components/Popover/Primitives.tsx"],"sourcesContent":["import * as React from 'react';\nimport cn from 'classnames';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { Placement } from '../../types';\n\nexport const UnstyledArrow = React.forwardRef(function PopoverArrow(\n props: React.SVGAttributes<SVGElement>,\n ref: React.Ref<SVGSVGElement>\n) {\n return (\n <PopoverPrimitive.Arrow className=\"pointer-events-none -mt-px\" asChild offset={2} width={30} height={11}>\n <svg {...props} ref={ref} viewBox=\"0 19 30 11\" style={{ transform: 'rotateZ(180deg)' }}>\n <path\n className=\"text-grey-dark group-focus:text-blue-light fill-current\"\n d=\"M23.7,27.1L17,19.9C16.5,19.3,15.8,19,15,19s-1.6,0.3-2.1,0.9l-6.6,7.2C5.3,28.1,3.4,29,2,29h26 C26.7,29,24.6,28.1,23.7,27.1z\"\n ></path>\n <path\n className=\"fill-current\"\n d=\"M23,27.8c1.1,1.2,3.4,2.2,5,2.2h2H0h2c1.7,0,3.9-1,5-2.2l6.6-7.2c0.7-0.8,2-0.8,2.7,0L23,27.8L23,27.8z\"\n ></path>\n </svg>\n </PopoverPrimitive.Arrow>\n );\n});\n\nexport type UnstyledContentProps = Omit<PopoverPrimitive.PopoverContentProps, 'side'> & {\n /** Set the position of the Popover relative to its trigger. Default value is `bottom` */\n placement?: Placement;\n};\nexport const UnstyledContent = React.forwardRef(function PopoverContent(\n props: UnstyledContentProps,\n ref: React.Ref<HTMLDivElement>\n) {\n const { placement: side, ...otherProps } = props;\n\n const className = cn(\n 'border border-transparent rounded p-3 yt-shadow focus:yt-focus outline-none group z-[996]',\n props.className\n );\n\n return <PopoverPrimitive.Content {...otherProps} className={className} side={side} sideOffset={1} ref={ref} />;\n});\n"],"names":["UnstyledArrow","React","PopoverArrow","props","ref","PopoverPrimitive","className","asChild","offset","width","height","viewBox","style","transform","d","UnstyledContent","PopoverContent","placement","side","otherProps","cn","sideOffset"],"mappings":";;;;MAKaA,aAAa,gBAAGC,UAAA,CAAiB,SAASC,YAAT,CAC1CC,KAD0C,EAE1CC,GAF0C;EAI1C,OACIH,aAAA,CAACI,KAAD;IAAwBC,SAAS,EAAC;IAA6BC,OAAO;IAACC,MAAM,EAAE;IAAGC,KAAK,EAAE;IAAIC,MAAM,EAAE;GAArG,EACIT,aAAA,MAAA,oBAASE;IAAOC,GAAG,EAAEA;IAAKO,OAAO,EAAC;IAAaC,KAAK,EAAE;MAAEC,SAAS,EAAE;;IAAnE,EACIZ,aAAA,OAAA;IACIK,SAAS,EAAC;IACVQ,CAAC,EAAC;GAFN,CADJ,EAKIb,aAAA,OAAA;IACIK,SAAS,EAAC;IACVQ,CAAC,EAAC;GAFN,CALJ,CADJ,CADJ;AAcH,CAlB4B;MAwBhBC,eAAe,gBAAGd,UAAA,CAAiB,SAASe,cAAT,CAC5Cb,KAD4C,EAE5CC,GAF4C;EAI5C,MAAM;IAAEa,SAAS,EAAEC,IAAb;IAAmB,GAAGC;MAAehB,KAA3C;EAEA,MAAMG,SAAS,GAAGc,EAAE,CAChB,2FADgB,EAEhBjB,KAAK,CAACG,SAFU,CAApB;EAKA,OAAOL,aAAA,CAACI,OAAD,oBAA8Bc;IAAYb,SAAS,EAAEA;IAAWY,IAAI,EAAEA;IAAMG,UAAU,EAAE;IAAGjB,GAAG,EAAEA;IAAhG,CAAP;AACH,CAZ8B;;;;"}
1
+ {"version":3,"file":"Primitives.js","sources":["../../../../src/components/Popover/Primitives.tsx"],"sourcesContent":["import * as React from 'react';\nimport cn from 'classnames';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { Placement } from '../../types';\n\nexport const UnstyledArrow = React.forwardRef(function PopoverArrow(\n props: React.SVGAttributes<SVGElement>,\n ref: React.Ref<SVGSVGElement>\n) {\n return (\n <PopoverPrimitive.Arrow className=\"pointer-events-none -mt-px\" asChild offset={2} width={30} height={11}>\n <svg {...props} ref={ref} viewBox=\"0 19 30 11\" style={{ transform: 'rotateZ(180deg)' }}>\n <path\n className=\"text-grey-dark group-focus:text-blue-light fill-current\"\n d=\"M23.7,27.1L17,19.9C16.5,19.3,15.8,19,15,19s-1.6,0.3-2.1,0.9l-6.6,7.2C5.3,28.1,3.4,29,2,29h26 C26.7,29,24.6,28.1,23.7,27.1z\"></path>\n <path\n className=\"fill-current\"\n d=\"M23,27.8c1.1,1.2,3.4,2.2,5,2.2h2H0h2c1.7,0,3.9-1,5-2.2l6.6-7.2c0.7-0.8,2-0.8,2.7,0L23,27.8L23,27.8z\"></path>\n </svg>\n </PopoverPrimitive.Arrow>\n );\n});\n\nexport type UnstyledContentProps = Omit<PopoverPrimitive.PopoverContentProps, 'side'> & {\n /** Set the position of the Popover relative to its trigger. Default value is `bottom` */\n placement?: Placement;\n};\nexport const UnstyledContent = React.forwardRef(function PopoverContent(\n props: UnstyledContentProps,\n ref: React.Ref<HTMLDivElement>\n) {\n const { placement: side, ...otherProps } = props;\n\n const className = cn(\n 'border border-transparent rounded p-3 yt-shadow focus:yt-focus outline-none group z-[996]',\n props.className\n );\n\n return <PopoverPrimitive.Content {...otherProps} className={className} side={side} sideOffset={1} ref={ref} />;\n});\n"],"names":["UnstyledArrow","React","PopoverArrow","props","ref","PopoverPrimitive","className","asChild","offset","width","height","viewBox","style","transform","d","UnstyledContent","PopoverContent","placement","side","otherProps","cn","sideOffset"],"mappings":";;;;MAKaA,aAAa,gBAAGC,UAAA,CAAiB,SAASC,YAAT,CAC1CC,KAD0C,EAE1CC,GAF0C;EAI1C,OACIH,aAAA,CAACI,KAAD;IAAwBC,SAAS,EAAC;IAA6BC,OAAO;IAACC,MAAM,EAAE;IAAGC,KAAK,EAAE;IAAIC,MAAM,EAAE;GAArG,EACIT,aAAA,MAAA,oBAASE;IAAOC,GAAG,EAAEA;IAAKO,OAAO,EAAC;IAAaC,KAAK,EAAE;MAAEC,SAAS,EAAE;;IAAnE,EACIZ,aAAA,OAAA;IACIK,SAAS,EAAC;IACVQ,CAAC,EAAC;GAFN,CADJ,EAIIb,aAAA,OAAA;IACIK,SAAS,EAAC;IACVQ,CAAC,EAAC;GAFN,CAJJ,CADJ,CADJ;AAYH,CAhB4B;MAsBhBC,eAAe,gBAAGd,UAAA,CAAiB,SAASe,cAAT,CAC5Cb,KAD4C,EAE5CC,GAF4C;EAI5C,MAAM;IAAEa,SAAS,EAAEC,IAAb;IAAmB,GAAGC;MAAehB,KAA3C;EAEA,MAAMG,SAAS,GAAGc,EAAE,CAChB,2FADgB,EAEhBjB,KAAK,CAACG,SAFU,CAApB;EAKA,OAAOL,aAAA,CAACI,OAAD,oBAA8Bc;IAAYb,SAAS,EAAEA;IAAWY,IAAI,EAAEA;IAAMG,UAAU,EAAE;IAAGjB,GAAG,EAAEA;IAAhG,CAAP;AACH,CAZ8B;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroup.js","sources":["../../../../src/components/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import * as React from 'react';\nimport cn from 'classnames';\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport { Orientation } from '../../types';\n\nexport type RadioGroupItemValue = string | number | boolean | null;\n\nexport const getRadioGroupItemValueAsString = (value: RadioGroupItemValue): string => String(value ?? '');\n\nexport const findByValue = (values: RadioGroupItemValue[], valueAsString: string): RadioGroupItemValue =>\n values.find(value => getRadioGroupItemValueAsString(value) === valueAsString) as RadioGroupItemValue;\n\nconst RadioGroupContext = React.createContext({ disabled: false, invalid: false });\n\nexport type RadioGroupItemProps<T = HTMLButtonElement> = Omit<\n React.ButtonHTMLAttributes<T>,\n 'children' | 'onSelect' | 'value'\n> & {\n /** Label for the radio group item */\n children: React.ReactNode;\n /* Whether the radio group item is disabled */\n disabled?: boolean;\n /** Value of the radio button */\n value: RadioGroupItemValue;\n};\n\nconst RadioGroupItem = React.forwardRef(function RadioGroupItem(props: RadioGroupItemProps, ref: React.Ref<HTMLButtonElement>) {\n const context = React.useContext(RadioGroupContext);\n const { children, value, ...otherProps } = props;\n\n const isDisabled = context.disabled || props.disabled;\n\n const className = cn(\n 'flex flex-shrink-0 self-start items-center justify-center h-4 w-4 mt-[0.2rem] rounded-full bg-white border-2',\n {\n 'border-grey-dark hover:border-4 focus:yt-focus aria-checked:bg-blue aria-checked:border-blue hover:aria-checked:border-blue-light':\n !isDisabled && !context.invalid,\n 'border-grey cursor-not-allowed aria-checked:bg-blue-light aria-checked:border-blue-light ': isDisabled,\n 'border-red hover:border-4 text-red focus:border-red focus:yt-focus-red aria-checked:bg-red aria-checked:border-red':\n context.invalid && !isDisabled,\n }\n );\n const labelClassName = cn(\n 'flex items-center gap-2',\n {\n 'cursor-pointer': !isDisabled,\n 'cursor-not-allowed text-grey-dark': isDisabled,\n },\n props.className\n );\n\n return (\n <label className={labelClassName}>\n <RadioGroupPrimitive.Item\n {...otherProps}\n className={className}\n disabled={isDisabled}\n ref={ref}\n value={getRadioGroupItemValueAsString(value)}\n >\n <RadioGroupPrimitive.Indicator className=\"h-2 w-2 rounded-full bg-white\" />\n </RadioGroupPrimitive.Item>\n {children}\n </label>\n );\n});\n\ntype ReactGroupBaseChild = React.ReactElement<RadioGroupItemProps> | boolean | null;\n\ntype RadioGroupBaseProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'defaultValue' | 'onChange' | 'value'> & {\n children: ReactGroupBaseChild[];\n /* Whether the radio group is disabled */\n disabled?: boolean;\n /* Whether the radio group is in an invalid state */\n invalid?: boolean;\n /** The name of the radio group, used when submitting an HTML form */\n name?: string;\n /**\n * Orientation of the radio group\n * @defaultValue vertical\n */\n orientation?: Orientation;\n /* Whether the radio group requires user input */\n required?: boolean;\n};\n\ninterface UncontrolledRadioGroupProps extends RadioGroupBaseProps {\n /* The default value (uncontrolled) */\n defaultValue?: RadioGroupItemValue;\n onChange?: never;\n value?: never;\n}\n\ninterface ControlledRadioGroupProps extends RadioGroupBaseProps {\n defaultValue?: never;\n /** Handler called when the value changes */\n onChange: (value: RadioGroupItemValue) => void;\n /** The current value (controlled) */\n value?: RadioGroupItemValue;\n}\n\nexport type RadioGroupProps = UncontrolledRadioGroupProps | ControlledRadioGroupProps;\n\nexport type ForwardedRadioGroupWithStatics = React.ForwardRefExoticComponent<\n RadioGroupProps & React.RefAttributes<HTMLDivElement>\n> & {\n /** Item component rendered in a `RadioGroup` component */\n Item: React.ForwardRefExoticComponent<RadioGroupItemProps>;\n};\n\nexport const useRadioGroup = (props: RadioGroupProps) => {\n const { children, defaultValue, disabled, invalid, onChange, orientation = 'vertical', value, ...otherProps } = props;\n\n const values = React.useMemo<RadioGroupItemValue[]>(() => {\n const radioGroupItemValues: RadioGroupItemValue[] = [];\n\n React.Children.forEach(children, child => {\n if (React.isValidElement(child)) {\n radioGroupItemValues.push(child.props.value);\n }\n });\n\n return radioGroupItemValues;\n }, [children]);\n\n const context = React.useMemo(() => ({ disabled: disabled ?? false, invalid: invalid ?? false }), [disabled, invalid]);\n\n let valueProps;\n\n if (onChange !== undefined) {\n const handleChange = (value: string): void => onChange(findByValue(values, value));\n\n valueProps = {\n onValueChange: handleChange,\n value: value !== undefined ? getRadioGroupItemValueAsString(value) : undefined,\n };\n } else {\n valueProps = {\n defaultValue: defaultValue !== undefined ? getRadioGroupItemValueAsString(defaultValue) : undefined,\n };\n }\n\n return {\n context,\n props: {\n ...otherProps,\n ...valueProps,\n children,\n orientation,\n },\n };\n};\n\nexport const RadioGroup = React.forwardRef(function RadioGroup(props: RadioGroupProps, ref: React.Ref<HTMLDivElement>) {\n const { context, props: otherProps } = useRadioGroup(props);\n const className = cn(\n 'flex items-start gap-y-2',\n {\n 'flex-wrap gap-x-4 ': otherProps.orientation === 'horizontal',\n 'flex-col': otherProps.orientation === 'vertical',\n },\n otherProps.className\n );\n\n return (\n <RadioGroupContext.Provider value={context}>\n <RadioGroupPrimitive.Root {...otherProps} className={className} data-taco=\"radio-group\" ref={ref} />\n </RadioGroupContext.Provider>\n );\n}) as ForwardedRadioGroupWithStatics;\nRadioGroup.Item = RadioGroupItem;\n"],"names":["getRadioGroupItemValueAsString","value","String","findByValue","values","valueAsString","find","RadioGroupContext","React","disabled","invalid","RadioGroupItem","props","ref","context","children","otherProps","isDisabled","className","cn","labelClassName","RadioGroupPrimitive","useRadioGroup","defaultValue","onChange","orientation","radioGroupItemValues","forEach","child","push","valueProps","undefined","handleChange","onValueChange","RadioGroup","Provider","Item"],"mappings":"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"}
1
+ {"version":3,"file":"RadioGroup.js","sources":["../../../../src/components/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import * as React from 'react';\nimport cn from 'classnames';\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport { Orientation } from '../../types';\n\nexport type RadioGroupItemValue = string | number | boolean | null;\n\nexport const getRadioGroupItemValueAsString = (value: RadioGroupItemValue): string => String(value ?? '');\n\nexport const findByValue = (values: RadioGroupItemValue[], valueAsString: string): RadioGroupItemValue =>\n values.find(value => getRadioGroupItemValueAsString(value) === valueAsString) as RadioGroupItemValue;\n\nconst RadioGroupContext = React.createContext({ disabled: false, invalid: false });\n\nexport type RadioGroupItemProps<T = HTMLButtonElement> = Omit<\n React.ButtonHTMLAttributes<T>,\n 'children' | 'onSelect' | 'value'\n> & {\n /** Label for the radio group item */\n children: React.ReactNode;\n /* Whether the radio group item is disabled */\n disabled?: boolean;\n /** Value of the radio button */\n value: RadioGroupItemValue;\n};\n\nconst RadioGroupItem = React.forwardRef(function RadioGroupItem(props: RadioGroupItemProps, ref: React.Ref<HTMLButtonElement>) {\n const context = React.useContext(RadioGroupContext);\n const { children, value, ...otherProps } = props;\n\n const isDisabled = context.disabled || props.disabled;\n\n const className = cn(\n 'flex flex-shrink-0 self-start items-center justify-center h-4 w-4 mt-[0.2rem] rounded-full bg-white border-2',\n {\n 'border-grey-dark hover:border-4 focus:yt-focus aria-checked:bg-blue aria-checked:border-blue hover:aria-checked:border-blue-light':\n !isDisabled && !context.invalid,\n 'border-grey cursor-not-allowed aria-checked:bg-blue-light aria-checked:border-blue-light ': isDisabled,\n 'border-red hover:border-4 text-red focus:border-red focus:yt-focus-red aria-checked:bg-red aria-checked:border-red':\n context.invalid && !isDisabled,\n }\n );\n const labelClassName = cn(\n 'flex items-center gap-2',\n {\n 'cursor-pointer': !isDisabled,\n 'cursor-not-allowed text-grey-dark': isDisabled,\n },\n props.className\n );\n\n return (\n <label className={labelClassName}>\n <RadioGroupPrimitive.Item\n {...otherProps}\n className={className}\n disabled={isDisabled}\n ref={ref}\n value={getRadioGroupItemValueAsString(value)}>\n <RadioGroupPrimitive.Indicator className=\"h-2 w-2 rounded-full bg-white\" />\n </RadioGroupPrimitive.Item>\n {children}\n </label>\n );\n});\n\ntype ReactGroupBaseChild = React.ReactElement<RadioGroupItemProps> | boolean | null;\n\ntype RadioGroupBaseProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'defaultValue' | 'onChange' | 'value'> & {\n children: ReactGroupBaseChild[];\n /* Whether the radio group is disabled */\n disabled?: boolean;\n /* Whether the radio group is in an invalid state */\n invalid?: boolean;\n /** The name of the radio group, used when submitting an HTML form */\n name?: string;\n /**\n * Orientation of the radio group\n * @defaultValue vertical\n */\n orientation?: Orientation;\n /* Whether the radio group requires user input */\n required?: boolean;\n};\n\ninterface UncontrolledRadioGroupProps extends RadioGroupBaseProps {\n /* The default value (uncontrolled) */\n defaultValue?: RadioGroupItemValue;\n onChange?: never;\n value?: never;\n}\n\ninterface ControlledRadioGroupProps extends RadioGroupBaseProps {\n defaultValue?: never;\n /** Handler called when the value changes */\n onChange: (value: RadioGroupItemValue) => void;\n /** The current value (controlled) */\n value?: RadioGroupItemValue;\n}\n\nexport type RadioGroupProps = UncontrolledRadioGroupProps | ControlledRadioGroupProps;\n\nexport type ForwardedRadioGroupWithStatics = React.ForwardRefExoticComponent<\n RadioGroupProps & React.RefAttributes<HTMLDivElement>\n> & {\n /** Item component rendered in a `RadioGroup` component */\n Item: React.ForwardRefExoticComponent<RadioGroupItemProps>;\n};\n\nexport const useRadioGroup = (props: RadioGroupProps) => {\n const { children, defaultValue, disabled, invalid, onChange, orientation = 'vertical', value, ...otherProps } = props;\n\n const values = React.useMemo<RadioGroupItemValue[]>(() => {\n const radioGroupItemValues: RadioGroupItemValue[] = [];\n\n React.Children.forEach(children, child => {\n if (React.isValidElement(child)) {\n radioGroupItemValues.push(child.props.value);\n }\n });\n\n return radioGroupItemValues;\n }, [children]);\n\n const context = React.useMemo(() => ({ disabled: disabled ?? false, invalid: invalid ?? false }), [disabled, invalid]);\n\n let valueProps;\n\n if (onChange !== undefined) {\n const handleChange = (value: string): void => onChange(findByValue(values, value));\n\n valueProps = {\n onValueChange: handleChange,\n value: value !== undefined ? getRadioGroupItemValueAsString(value) : undefined,\n };\n } else {\n valueProps = {\n defaultValue: defaultValue !== undefined ? getRadioGroupItemValueAsString(defaultValue) : undefined,\n };\n }\n\n return {\n context,\n props: {\n ...otherProps,\n ...valueProps,\n children,\n orientation,\n },\n };\n};\n\nexport const RadioGroup = React.forwardRef(function RadioGroup(props: RadioGroupProps, ref: React.Ref<HTMLDivElement>) {\n const { context, props: otherProps } = useRadioGroup(props);\n const className = cn(\n 'flex items-start gap-y-2',\n {\n 'flex-wrap gap-x-4 ': otherProps.orientation === 'horizontal',\n 'flex-col': otherProps.orientation === 'vertical',\n },\n otherProps.className\n );\n\n return (\n <RadioGroupContext.Provider value={context}>\n <RadioGroupPrimitive.Root {...otherProps} className={className} data-taco=\"radio-group\" ref={ref} />\n </RadioGroupContext.Provider>\n );\n}) as ForwardedRadioGroupWithStatics;\nRadioGroup.Item = RadioGroupItem;\n"],"names":["getRadioGroupItemValueAsString","value","String","findByValue","values","valueAsString","find","RadioGroupContext","React","disabled","invalid","RadioGroupItem","props","ref","context","children","otherProps","isDisabled","className","cn","labelClassName","RadioGroupPrimitive","useRadioGroup","defaultValue","onChange","orientation","radioGroupItemValues","forEach","child","push","valueProps","undefined","handleChange","onValueChange","RadioGroup","Provider","Item"],"mappings":"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"}
@@ -16,7 +16,6 @@ import '../Calendar/Calendar.js';
16
16
  import '../Checkbox/Checkbox.js';
17
17
  import '../../utils/hooks/useProxiedRef.js';
18
18
  import { Input } from '../Input/Input.js';
19
- import keycode from 'keycode';
20
19
  import '../../utils/hooks/useListKeyboardNavigation.js';
21
20
  import '../../utils/hooks/useListScrollTo.js';
22
21
  import '../../utils/hooks/useBoundingClientRectListener.js';
@@ -70,7 +69,7 @@ const SearchInput = /*#__PURE__*/forwardRef(function SearchInput({
70
69
  const handleKeyDown = event => {
71
70
  var _props$onKeyDown;
72
71
 
73
- const isEnterKeyPressed = event.keyCode === keycode('enter');
72
+ const isEnterKeyPressed = event.key === 'Enter';
74
73
 
75
74
  if (isEnterKeyPressed) {
76
75
  handleClick();
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.js","sources":["../../../../src/components/SearchInput/SearchInput.tsx"],"sourcesContent":["import * as React from 'react';\nimport keycode from 'keycode';\nimport { Input, InputProps, useLocalization, IconButton } from '../..';\n\nexport type SearchInputTexts = {\n /**\n * aria-label text for input\n */\n inputLabel: string;\n};\n\nexport type SearchInputProps = Omit<InputProps, 'icon'> & {\n /** Current input value will be passed to the method. In order to get the value, the component must be controlled otherwise value will always be undefined */\n onSearch?: (value: string | number | readonly string[] | undefined) => void;\n};\n\nexport const SearchInput = React.forwardRef(function SearchInput(\n { onSearch, ...props }: SearchInputProps,\n ref: React.Ref<HTMLInputElement>\n) {\n const { texts } = useLocalization();\n\n const handleClick = (): void => {\n if (!props.disabled) {\n onSearch?.(props.value);\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n const isEnterKeyPressed = event.keyCode === keycode('enter');\n\n if (isEnterKeyPressed) {\n handleClick();\n }\n\n props.onKeyDown?.(event);\n };\n\n return (\n <Input\n aria-label={texts.searchInput.inputLabel}\n {...props}\n button={\n <IconButton\n icon=\"search\"\n className=\"!border-transparent !bg-transparent focus:!border-transparent peer-focus:!border-transparent peer-focus:peer-active:!border-transparent\"\n disabled={props.disabled}\n onClick={handleClick}\n />\n }\n onKeyDown={handleKeyDown}\n ref={ref}\n type=\"search\"\n />\n );\n});\n"],"names":["SearchInput","React","onSearch","props","ref","texts","useLocalization","handleClick","disabled","value","handleKeyDown","event","isEnterKeyPressed","keyCode","keycode","onKeyDown","Input","searchInput","inputLabel","button","IconButton","icon","className","onClick","type"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAgBaA,WAAW,gBAAGC,UAAA,CAAiB,SAASD,WAAT,CACxC;EAAEE,QAAF;EAAY,GAAGC;AAAf,CADwC,EAExCC,GAFwC;EAIxC,MAAM;IAAEC;MAAUC,eAAe,EAAjC;;EAEA,MAAMC,WAAW,GAAG;IAChB,IAAI,CAACJ,KAAK,CAACK,QAAX,EAAqB;MACjBN,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ,CAAGC,KAAK,CAACM,KAAT,CAAR;;GAFR;;EAMA,MAAMC,aAAa,GAAIC,KAAD;;;IAClB,MAAMC,iBAAiB,GAAGD,KAAK,CAACE,OAAN,KAAkBC,OAAO,CAAC,OAAD,CAAnD;;IAEA,IAAIF,iBAAJ,EAAuB;MACnBL,WAAW;;;IAGf,oBAAAJ,KAAK,CAACY,SAAN,2EAAAZ,KAAK,EAAaQ,KAAb,CAAL;GAPJ;;EAUA,OACIV,aAAA,CAACe,KAAD;kBACgBX,KAAK,CAACY,WAAN,CAAkBC;KAC1Bf;IACJgB,MAAM,EACFlB,aAAA,CAACmB,UAAD;MACIC,IAAI,EAAC;MACLC,SAAS,EAAC;MACVd,QAAQ,EAAEL,KAAK,CAACK;MAChBe,OAAO,EAAEhB;KAJb;IAOJQ,SAAS,EAAEL;IACXN,GAAG,EAAEA;IACLoB,IAAI,EAAC;IAbT,CADJ;AAiBH,CAvC0B;;;;"}
1
+ {"version":3,"file":"SearchInput.js","sources":["../../../../src/components/SearchInput/SearchInput.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Input, InputProps, useLocalization, IconButton } from '../..';\n\nexport type SearchInputTexts = {\n /**\n * aria-label text for input\n */\n inputLabel: string;\n};\n\nexport type SearchInputProps = Omit<InputProps, 'icon'> & {\n /** Current input value will be passed to the method. In order to get the value, the component must be controlled otherwise value will always be undefined */\n onSearch?: (value: string | number | readonly string[] | undefined) => void;\n};\n\nexport const SearchInput = React.forwardRef(function SearchInput(\n { onSearch, ...props }: SearchInputProps,\n ref: React.Ref<HTMLInputElement>\n) {\n const { texts } = useLocalization();\n\n const handleClick = (): void => {\n if (!props.disabled) {\n onSearch?.(props.value);\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n const isEnterKeyPressed = event.key === 'Enter';\n\n if (isEnterKeyPressed) {\n handleClick();\n }\n\n props.onKeyDown?.(event);\n };\n\n return (\n <Input\n aria-label={texts.searchInput.inputLabel}\n {...props}\n button={\n <IconButton\n icon=\"search\"\n className=\"!border-transparent !bg-transparent focus:!border-transparent peer-focus:!border-transparent peer-focus:peer-active:!border-transparent\"\n disabled={props.disabled}\n onClick={handleClick}\n />\n }\n onKeyDown={handleKeyDown}\n ref={ref}\n type=\"search\"\n />\n );\n});\n"],"names":["SearchInput","React","onSearch","props","ref","texts","useLocalization","handleClick","disabled","value","handleKeyDown","event","isEnterKeyPressed","key","onKeyDown","Input","searchInput","inputLabel","button","IconButton","icon","className","onClick","type"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAeaA,WAAW,gBAAGC,UAAA,CAAiB,SAASD,WAAT,CACxC;EAAEE,QAAF;EAAY,GAAGC;AAAf,CADwC,EAExCC,GAFwC;EAIxC,MAAM;IAAEC;MAAUC,eAAe,EAAjC;;EAEA,MAAMC,WAAW,GAAG;IAChB,IAAI,CAACJ,KAAK,CAACK,QAAX,EAAqB;MACjBN,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ,CAAGC,KAAK,CAACM,KAAT,CAAR;;GAFR;;EAMA,MAAMC,aAAa,GAAIC,KAAD;;;IAClB,MAAMC,iBAAiB,GAAGD,KAAK,CAACE,GAAN,KAAc,OAAxC;;IAEA,IAAID,iBAAJ,EAAuB;MACnBL,WAAW;;;IAGf,oBAAAJ,KAAK,CAACW,SAAN,2EAAAX,KAAK,EAAaQ,KAAb,CAAL;GAPJ;;EAUA,OACIV,aAAA,CAACc,KAAD;kBACgBV,KAAK,CAACW,WAAN,CAAkBC;KAC1Bd;IACJe,MAAM,EACFjB,aAAA,CAACkB,UAAD;MACIC,IAAI,EAAC;MACLC,SAAS,EAAC;MACVb,QAAQ,EAAEL,KAAK,CAACK;MAChBc,OAAO,EAAEf;KAJb;IAOJO,SAAS,EAAEJ;IACXN,GAAG,EAAEA;IACLmB,IAAI,EAAC;IAbT,CADJ;AAiBH,CAvC0B;;;;"}
@@ -3,7 +3,6 @@ import cn from 'classnames';
3
3
  import { v4 } from 'uuid';
4
4
  import { useLocalization } from '../Provider/Provider.js';
5
5
  import { useProxiedRef } from '../../utils/hooks/useProxiedRef.js';
6
- import keycode from 'keycode';
7
6
  import { createCustomEvent } from '../../utils/input.js';
8
7
  import { useFlattenedData, findByValue, setInputValueByRef, sanitizeItem } from '../Listbox/util.js';
9
8
 
@@ -60,15 +59,15 @@ const useSelect = ({
60
59
  }, []); // event handlers
61
60
 
62
61
  const handleButtonKeyDown = event => {
63
- if (event.keyCode === keycode('up') || event.keyCode === keycode('down')) {
62
+ if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
64
63
  event.preventDefault();
65
64
  setOpen(true);
66
65
  }
67
66
  };
68
67
 
69
68
  const handleListboxKeyDown = event => {
70
- switch (event.keyCode) {
71
- case keycode('escape'):
69
+ switch (event.key) {
70
+ case 'Escape':
72
71
  {
73
72
  event.preventDefault();
74
73
 
@@ -80,10 +79,10 @@ const useSelect = ({
80
79
  break;
81
80
  }
82
81
 
83
- case keycode('tab'):
84
- case keycode('enter'):
82
+ case 'Tab':
83
+ case 'Enter':
85
84
  {
86
- if (event.keyCode !== keycode('tab')) {
85
+ if (event.key !== 'Tab') {
87
86
  event.preventDefault();
88
87
  }
89
88