@hitachivantara/uikit-react-core 5.19.2 → 5.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/cjs/components/Accordion/Accordion.cjs +19 -11
  2. package/dist/cjs/components/Accordion/Accordion.cjs.map +1 -1
  3. package/dist/cjs/components/Accordion/Accordion.styles.cjs +44 -68
  4. package/dist/cjs/components/Accordion/Accordion.styles.cjs.map +1 -1
  5. package/dist/cjs/components/ActionsGeneric/ActionsGeneric.cjs +22 -12
  6. package/dist/cjs/components/ActionsGeneric/ActionsGeneric.cjs.map +1 -1
  7. package/dist/cjs/components/ActionsGeneric/ActionsGeneric.styles.cjs +17 -53
  8. package/dist/cjs/components/ActionsGeneric/ActionsGeneric.styles.cjs.map +1 -1
  9. package/dist/cjs/components/AppSwitcher/Action/Action.cjs +23 -16
  10. package/dist/cjs/components/AppSwitcher/Action/Action.cjs.map +1 -1
  11. package/dist/cjs/components/AppSwitcher/Action/Action.styles.cjs +51 -91
  12. package/dist/cjs/components/AppSwitcher/Action/Action.styles.cjs.map +1 -1
  13. package/dist/cjs/components/AppSwitcher/AppSwitcher.cjs +28 -24
  14. package/dist/cjs/components/AppSwitcher/AppSwitcher.cjs.map +1 -1
  15. package/dist/cjs/components/AppSwitcher/AppSwitcher.styles.cjs +52 -116
  16. package/dist/cjs/components/AppSwitcher/AppSwitcher.styles.cjs.map +1 -1
  17. package/dist/cjs/components/AppSwitcher/TitleWithTooltip.cjs +3 -6
  18. package/dist/cjs/components/AppSwitcher/TitleWithTooltip.cjs.map +1 -1
  19. package/dist/cjs/components/BaseDropdown/BaseDropdown.cjs +6 -14
  20. package/dist/cjs/components/BaseDropdown/BaseDropdown.cjs.map +1 -1
  21. package/dist/cjs/components/BreadCrumb/Page/Page.styles.cjs +2 -2
  22. package/dist/cjs/components/BreadCrumb/Page/Page.styles.cjs.map +1 -1
  23. package/dist/cjs/components/Calendar/CalendarHeader/CalendarHeader.cjs +2 -6
  24. package/dist/cjs/components/Calendar/CalendarHeader/CalendarHeader.cjs.map +1 -1
  25. package/dist/cjs/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.cjs +2 -3
  26. package/dist/cjs/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.cjs.map +1 -1
  27. package/dist/cjs/components/Calendar/CalendarNavigation/Navigation/Navigation.cjs +2 -3
  28. package/dist/cjs/components/Calendar/CalendarNavigation/Navigation/Navigation.cjs.map +1 -1
  29. package/dist/cjs/components/Calendar/SingleCalendar/SingleCalendar.cjs +6 -14
  30. package/dist/cjs/components/Calendar/SingleCalendar/SingleCalendar.cjs.map +1 -1
  31. package/dist/cjs/components/Dialog/Actions/Actions.cjs.map +1 -1
  32. package/dist/cjs/components/Dialog/Content/Content.cjs.map +1 -1
  33. package/dist/cjs/components/Dialog/Dialog.cjs +47 -46
  34. package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -1
  35. package/dist/cjs/components/Dialog/Dialog.styles.cjs +15 -0
  36. package/dist/cjs/components/Dialog/Dialog.styles.cjs.map +1 -1
  37. package/dist/cjs/components/Dialog/Title/Title.cjs.map +1 -1
  38. package/dist/cjs/components/DropDownMenu/DropDownMenu.cjs +2 -3
  39. package/dist/cjs/components/DropDownMenu/DropDownMenu.cjs.map +1 -1
  40. package/dist/cjs/components/FileUploader/DropZone/DropZone.cjs +2 -3
  41. package/dist/cjs/components/FileUploader/DropZone/DropZone.cjs.map +1 -1
  42. package/dist/cjs/components/Focus/Focus.cjs +22 -44
  43. package/dist/cjs/components/Focus/Focus.cjs.map +1 -1
  44. package/dist/cjs/components/Focus/utils.cjs +0 -5
  45. package/dist/cjs/components/Focus/utils.cjs.map +1 -1
  46. package/dist/cjs/components/Header/Navigation/MenuBar/MenuBar.cjs +5 -1
  47. package/dist/cjs/components/Header/Navigation/MenuBar/MenuBar.cjs.map +1 -1
  48. package/dist/cjs/components/Header/Navigation/MenuItem/MenuItem.cjs +9 -6
  49. package/dist/cjs/components/Header/Navigation/MenuItem/MenuItem.cjs.map +1 -1
  50. package/dist/cjs/components/Header/Navigation/Navigation.cjs +4 -1
  51. package/dist/cjs/components/Header/Navigation/Navigation.cjs.map +1 -1
  52. package/dist/cjs/components/InlineEditor/InlineEditor.cjs +4 -5
  53. package/dist/cjs/components/InlineEditor/InlineEditor.cjs.map +1 -1
  54. package/dist/cjs/components/Input/Input.cjs +5 -6
  55. package/dist/cjs/components/Input/Input.cjs.map +1 -1
  56. package/dist/cjs/components/Pagination/Pagination.cjs +2 -6
  57. package/dist/cjs/components/Pagination/Pagination.cjs.map +1 -1
  58. package/dist/cjs/components/ScrollTo/Horizontal/ScrollToHorizontal.cjs +2 -6
  59. package/dist/cjs/components/ScrollTo/Horizontal/ScrollToHorizontal.cjs.map +1 -1
  60. package/dist/cjs/components/ScrollTo/Vertical/ScrollToVertical.cjs +2 -6
  61. package/dist/cjs/components/ScrollTo/Vertical/ScrollToVertical.cjs.map +1 -1
  62. package/dist/cjs/components/SelectionList/SelectionList.cjs +3 -8
  63. package/dist/cjs/components/SelectionList/SelectionList.cjs.map +1 -1
  64. package/dist/cjs/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.styles.cjs +5 -2
  65. package/dist/cjs/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.styles.cjs.map +1 -1
  66. package/dist/cjs/components/TagsInput/TagsInput.cjs +3 -4
  67. package/dist/cjs/components/TagsInput/TagsInput.cjs.map +1 -1
  68. package/dist/cjs/components/TimePicker/TimePicker.styles.cjs +1 -1
  69. package/dist/cjs/components/TimePicker/TimePicker.styles.cjs.map +1 -1
  70. package/dist/cjs/components/Tooltip/Tooltip.cjs +1 -1
  71. package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -1
  72. package/dist/cjs/components/VerticalNavigation/Actions/Action.cjs +2 -3
  73. package/dist/cjs/components/VerticalNavigation/Actions/Action.cjs.map +1 -1
  74. package/dist/cjs/hooks/useCss.cjs +4 -13
  75. package/dist/cjs/hooks/useCss.cjs.map +1 -1
  76. package/dist/cjs/hooks/useEmotionCache.cjs +4 -4
  77. package/dist/cjs/hooks/useEmotionCache.cjs.map +1 -1
  78. package/dist/cjs/hooks/useTheme.cjs +3 -1
  79. package/dist/cjs/hooks/useTheme.cjs.map +1 -1
  80. package/dist/cjs/index.cjs +25 -19
  81. package/dist/cjs/index.cjs.map +1 -1
  82. package/dist/cjs/providers/Provider.cjs +5 -4
  83. package/dist/cjs/providers/Provider.cjs.map +1 -1
  84. package/dist/cjs/providers/ThemeProvider.cjs +13 -15
  85. package/dist/cjs/providers/ThemeProvider.cjs.map +1 -1
  86. package/dist/cjs/utils/keyboardUtils.cjs +30 -0
  87. package/dist/cjs/utils/keyboardUtils.cjs.map +1 -0
  88. package/dist/esm/components/Accordion/Accordion.js +22 -13
  89. package/dist/esm/components/Accordion/Accordion.js.map +1 -1
  90. package/dist/esm/components/Accordion/Accordion.styles.js +44 -66
  91. package/dist/esm/components/Accordion/Accordion.styles.js.map +1 -1
  92. package/dist/esm/components/ActionsGeneric/ActionsGeneric.js +25 -14
  93. package/dist/esm/components/ActionsGeneric/ActionsGeneric.js.map +1 -1
  94. package/dist/esm/components/ActionsGeneric/ActionsGeneric.styles.js +17 -51
  95. package/dist/esm/components/ActionsGeneric/ActionsGeneric.styles.js.map +1 -1
  96. package/dist/esm/components/AppSwitcher/Action/Action.js +26 -18
  97. package/dist/esm/components/AppSwitcher/Action/Action.js.map +1 -1
  98. package/dist/esm/components/AppSwitcher/Action/Action.styles.js +51 -89
  99. package/dist/esm/components/AppSwitcher/Action/Action.styles.js.map +1 -1
  100. package/dist/esm/components/AppSwitcher/AppSwitcher.js +31 -26
  101. package/dist/esm/components/AppSwitcher/AppSwitcher.js.map +1 -1
  102. package/dist/esm/components/AppSwitcher/AppSwitcher.styles.js +52 -114
  103. package/dist/esm/components/AppSwitcher/AppSwitcher.styles.js.map +1 -1
  104. package/dist/esm/components/AppSwitcher/TitleWithTooltip.js +3 -6
  105. package/dist/esm/components/AppSwitcher/TitleWithTooltip.js.map +1 -1
  106. package/dist/esm/components/BaseDropdown/BaseDropdown.js +6 -14
  107. package/dist/esm/components/BaseDropdown/BaseDropdown.js.map +1 -1
  108. package/dist/esm/components/BreadCrumb/Page/Page.styles.js +1 -1
  109. package/dist/esm/components/BreadCrumb/Page/Page.styles.js.map +1 -1
  110. package/dist/esm/components/Calendar/CalendarHeader/CalendarHeader.js +2 -6
  111. package/dist/esm/components/Calendar/CalendarHeader/CalendarHeader.js.map +1 -1
  112. package/dist/esm/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.js +2 -3
  113. package/dist/esm/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.js.map +1 -1
  114. package/dist/esm/components/Calendar/CalendarNavigation/Navigation/Navigation.js +2 -3
  115. package/dist/esm/components/Calendar/CalendarNavigation/Navigation/Navigation.js.map +1 -1
  116. package/dist/esm/components/Calendar/SingleCalendar/SingleCalendar.js +6 -14
  117. package/dist/esm/components/Calendar/SingleCalendar/SingleCalendar.js.map +1 -1
  118. package/dist/esm/components/Dialog/Actions/Actions.js.map +1 -1
  119. package/dist/esm/components/Dialog/Content/Content.js.map +1 -1
  120. package/dist/esm/components/Dialog/Dialog.js +47 -46
  121. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  122. package/dist/esm/components/Dialog/Dialog.styles.js +15 -0
  123. package/dist/esm/components/Dialog/Dialog.styles.js.map +1 -1
  124. package/dist/esm/components/Dialog/Title/Title.js.map +1 -1
  125. package/dist/esm/components/DropDownMenu/DropDownMenu.js +2 -3
  126. package/dist/esm/components/DropDownMenu/DropDownMenu.js.map +1 -1
  127. package/dist/esm/components/FileUploader/DropZone/DropZone.js +2 -3
  128. package/dist/esm/components/FileUploader/DropZone/DropZone.js.map +1 -1
  129. package/dist/esm/components/Focus/Focus.js +23 -45
  130. package/dist/esm/components/Focus/Focus.js.map +1 -1
  131. package/dist/esm/components/Focus/utils.js +0 -5
  132. package/dist/esm/components/Focus/utils.js.map +1 -1
  133. package/dist/esm/components/Header/Navigation/MenuBar/MenuBar.js +5 -1
  134. package/dist/esm/components/Header/Navigation/MenuBar/MenuBar.js.map +1 -1
  135. package/dist/esm/components/Header/Navigation/MenuItem/MenuItem.js +9 -6
  136. package/dist/esm/components/Header/Navigation/MenuItem/MenuItem.js.map +1 -1
  137. package/dist/esm/components/Header/Navigation/Navigation.js +4 -1
  138. package/dist/esm/components/Header/Navigation/Navigation.js.map +1 -1
  139. package/dist/esm/components/InlineEditor/InlineEditor.js +3 -4
  140. package/dist/esm/components/InlineEditor/InlineEditor.js.map +1 -1
  141. package/dist/esm/components/Input/Input.js +5 -6
  142. package/dist/esm/components/Input/Input.js.map +1 -1
  143. package/dist/esm/components/Pagination/Pagination.js +2 -6
  144. package/dist/esm/components/Pagination/Pagination.js.map +1 -1
  145. package/dist/esm/components/ScrollTo/Horizontal/ScrollToHorizontal.js +2 -6
  146. package/dist/esm/components/ScrollTo/Horizontal/ScrollToHorizontal.js.map +1 -1
  147. package/dist/esm/components/ScrollTo/Vertical/ScrollToVertical.js +2 -6
  148. package/dist/esm/components/ScrollTo/Vertical/ScrollToVertical.js.map +1 -1
  149. package/dist/esm/components/SelectionList/SelectionList.js +3 -8
  150. package/dist/esm/components/SelectionList/SelectionList.js.map +1 -1
  151. package/dist/esm/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.styles.js +5 -2
  152. package/dist/esm/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.styles.js.map +1 -1
  153. package/dist/esm/components/TagsInput/TagsInput.js +3 -4
  154. package/dist/esm/components/TagsInput/TagsInput.js.map +1 -1
  155. package/dist/esm/components/TimePicker/TimePicker.styles.js +1 -1
  156. package/dist/esm/components/TimePicker/TimePicker.styles.js.map +1 -1
  157. package/dist/esm/components/Tooltip/Tooltip.js +1 -1
  158. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  159. package/dist/esm/components/VerticalNavigation/Actions/Action.js +2 -3
  160. package/dist/esm/components/VerticalNavigation/Actions/Action.js.map +1 -1
  161. package/dist/esm/hooks/useCss.js +4 -13
  162. package/dist/esm/hooks/useCss.js.map +1 -1
  163. package/dist/esm/hooks/useEmotionCache.js +4 -4
  164. package/dist/esm/hooks/useEmotionCache.js.map +1 -1
  165. package/dist/esm/hooks/useTheme.js +3 -1
  166. package/dist/esm/hooks/useTheme.js.map +1 -1
  167. package/dist/esm/index.js +241 -244
  168. package/dist/esm/index.js.map +1 -1
  169. package/dist/esm/providers/Provider.js +4 -3
  170. package/dist/esm/providers/Provider.js.map +1 -1
  171. package/dist/esm/providers/ThemeProvider.js +4 -13
  172. package/dist/esm/providers/ThemeProvider.js.map +1 -1
  173. package/dist/esm/utils/keyboardUtils.js +30 -0
  174. package/dist/esm/utils/keyboardUtils.js.map +1 -0
  175. package/dist/types/index.d.ts +274 -330
  176. package/package.json +4 -4
  177. package/dist/cjs/components/Accordion/accordionClasses.cjs +0 -8
  178. package/dist/cjs/components/Accordion/accordionClasses.cjs.map +0 -1
  179. package/dist/cjs/components/ActionsGeneric/actionsGenericClasses.cjs +0 -8
  180. package/dist/cjs/components/ActionsGeneric/actionsGenericClasses.cjs.map +0 -1
  181. package/dist/cjs/components/AppSwitcher/Action/actionClasses.cjs +0 -8
  182. package/dist/cjs/components/AppSwitcher/Action/actionClasses.cjs.map +0 -1
  183. package/dist/cjs/components/AppSwitcher/appSwitcherClasses.cjs +0 -8
  184. package/dist/cjs/components/AppSwitcher/appSwitcherClasses.cjs.map +0 -1
  185. package/dist/cjs/utils/keyboardUtils/keyCheck.cjs +0 -9
  186. package/dist/cjs/utils/keyboardUtils/keyCheck.cjs.map +0 -1
  187. package/dist/cjs/utils/keyboardUtils/keyboardCodes.cjs +0 -105
  188. package/dist/cjs/utils/keyboardUtils/keyboardCodes.cjs.map +0 -1
  189. package/dist/esm/components/Accordion/accordionClasses.js +0 -8
  190. package/dist/esm/components/Accordion/accordionClasses.js.map +0 -1
  191. package/dist/esm/components/ActionsGeneric/actionsGenericClasses.js +0 -8
  192. package/dist/esm/components/ActionsGeneric/actionsGenericClasses.js.map +0 -1
  193. package/dist/esm/components/AppSwitcher/Action/actionClasses.js +0 -8
  194. package/dist/esm/components/AppSwitcher/Action/actionClasses.js.map +0 -1
  195. package/dist/esm/components/AppSwitcher/appSwitcherClasses.js +0 -8
  196. package/dist/esm/components/AppSwitcher/appSwitcherClasses.js.map +0 -1
  197. package/dist/esm/utils/keyboardUtils/keyCheck.js +0 -9
  198. package/dist/esm/utils/keyboardUtils/keyCheck.js.map +0 -1
  199. package/dist/esm/utils/keyboardUtils/keyboardCodes.js +0 -105
  200. package/dist/esm/utils/keyboardUtils/keyboardCodes.js.map +0 -1
@@ -4,11 +4,11 @@ import React__default, { useState } from "react";
4
4
  import ConditionalWrapper from "../../utils/ConditionalWrapper.js";
5
5
  import { Global } from "@emotion/react";
6
6
  import { StyledFocusWrapper, StyledFalseFocus } from "./Focus.styles.js";
7
- import { getFocusableChildren, setFocusTo, isOneOfKeys, isKey } from "./utils.js";
7
+ import { getFocusableChildren, setFocusTo } from "./utils.js";
8
8
  import focusClasses from "./focusClasses.js";
9
9
  import { jsxs, jsx } from "@emotion/react/jsx-runtime";
10
10
  import isBrowser from "../../utils/browser.js";
11
- import { keyboardCodes } from "../../utils/keyboardUtils/keyboardCodes.js";
11
+ import { isOneOfKeys, isKey } from "../../utils/keyboardUtils.js";
12
12
  function _EMOTION_STRINGIFIED_CSS_ERROR__() {
13
13
  return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).";
14
14
  }
@@ -18,7 +18,7 @@ const focusStyles = process.env.NODE_ENV === "production" ? {
18
18
  } : {
19
19
  name: "1ahoc7i-focusStyles",
20
20
  styles: ".HvFocus-focused{outline-color:#52a8ec;outline-style:solid;outline-width:0px;outline-offset:-1px;box-shadow:0 0 0 1px #52a8ec,0 0 0 4px rgba(29, 155, 209, 0.3);@media (-webkit-min-device-pixel-ratio: 0){outline-color:#52a8ec;outline-style:solid;outline-width:0px;outline-offset:-1px;box-shadow:0 0 0 1px #52a8ec,0 0 0 4px rgba(29, 155, 209, 0.3);}}.HvFocus-focusDisabled{outline:none;box-shadow:none;}.HvFocus-focusDisabled *:focus{outline:none;box-shadow:none;}.HvFocus-focusDisabled *{outline:none!important;box-shadow:none!important;};label:focusStyles;",
21
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2h2LXVpa2l0LXJlYWN0L2h2LXVpa2l0LXJlYWN0L3BhY2thZ2VzL2NvcmUvc3JjL2NvbXBvbmVudHMvRm9jdXMvRm9jdXMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVd1QiIsImZpbGUiOiIvaG9tZS9ydW5uZXIvd29yay9odi11aWtpdC1yZWFjdC9odi11aWtpdC1yZWFjdC9wYWNrYWdlcy9jb3JlL3NyYy9jb21wb25lbnRzL0ZvY3VzL0ZvY3VzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsc3ggfSBmcm9tIFwiY2xzeFwiO1xuaW1wb3J0IGlzTmlsIGZyb20gXCJsb2Rhc2gvaXNOaWxcIjtcbmltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBIdkJhc2VQcm9wcyB9IGZyb20gXCJAY29yZS90eXBlc1wiO1xuaW1wb3J0IHsga2V5Ym9hcmRDb2RlcywgaXNCcm93c2VyIH0gZnJvbSBcIkBjb3JlL3V0aWxzXCI7XG5pbXBvcnQgQ29uZGl0aW9uYWxXcmFwcGVyIGZyb20gXCJAY29yZS91dGlscy9Db25kaXRpb25hbFdyYXBwZXJcIjtcbmltcG9ydCB7IGNzcywgR2xvYmFsIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5pbXBvcnQgeyBTdHlsZWRGb2N1c1dyYXBwZXIsIFN0eWxlZEZhbHNlRm9jdXMgfSBmcm9tIFwiLi9Gb2N1cy5zdHlsZXNcIjtcbmltcG9ydCB7IGdldEZvY3VzYWJsZUNoaWxkcmVuLCBpc0tleSwgaXNPbmVPZktleXMsIHNldEZvY3VzVG8gfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IGZvY3VzQ2xhc3NlcywgeyBIdkZvY3VzQ2xhc3NlcyB9IGZyb20gXCIuL2ZvY3VzQ2xhc3Nlc1wiO1xuXG5jb25zdCBmb2N1c1N0eWxlcyA9IGNzc2BcbiAgLkh2Rm9jdXMtZm9jdXNlZCB7XG4gICAgb3V0bGluZS1jb2xvcjogIzUyYThlYztcbiAgICBvdXRsaW5lLXN0eWxlOiBzb2xpZDtcbiAgICBvdXRsaW5lLXdpZHRoOiAwcHg7XG4gICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICM1MmE4ZWMsIDAgMCAwIDRweCByZ2JhKDI5LCAxNTUsIDIwOSwgMC4zKTtcblxuICAgIEBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAwKSB7XG4gICAgICBvdXRsaW5lLWNvbG9yOiAjNTJhOGVjO1xuICAgICAgb3V0bGluZS1zdHlsZTogc29saWQ7XG4gICAgICBvdXRsaW5lLXdpZHRoOiAwcHg7XG4gICAgICBvdXRsaW5lLW9mZnNldDogLTFweDtcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjNTJhOGVjLCAwIDAgMCA0cHggcmdiYSgyOSwgMTU1LCAyMDksIDAuMyk7XG4gICAgfVxuICB9XG5cbiAgLkh2Rm9jdXMtZm9jdXNEaXNhYmxlZCB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG4gIC5IdkZvY3VzLWZvY3VzRGlzYWJsZWQgKjpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG4gIC5IdkZvY3VzLWZvY3VzRGlzYWJsZWQgKiB7XG4gICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50O1xuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxuYDtcblxuZXhwb3J0IHR5cGUgSHZGb2N1c1N0cmF0ZWdpZXMgPSBcImxpc3Rib3hcIiB8IFwibWVudVwiIHwgXCJjYXJkXCIgfCBcImdyaWRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBIdkZvY3VzUHJvcHMgZXh0ZW5kcyBIdkJhc2VQcm9wczxIVE1MRWxlbWVudCwgXCJjaGlsZHJlblwiPiB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIC8qKiBFeHRyYSBjb25maWd1cmF0aW9uIGZvciB0aGUgY2hpbGQgZWxlbWVudC4gKi9cbiAgY29uZmlndXJhdGlvbj86IHtcbiAgICB0YWJJbmRleD86IG51bWJlcjtcbiAgfTtcbiAgLyoqIEluZGljYXRlcyB0aGF0IHRoZSBkaXNhYmxlZCBjbGFzcyBzaG91bGQgYmUgYXBwbGllZC4gKi9cbiAgZGlzYWJsZWRDbGFzcz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBmb2N1cyBpcyBzZWxlY3RlZC4gKi9cbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgZm9jdXMgaXMgZGlzYWJsZWQuICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIFRoZSByZWZlcmVuY2UgdG8gdGhlIHJvb3QgZWxlbWVudCB0byBob2xkIGFsbCBGb2N1cycgY29udGV4dC4gKi9cbiAgcm9vdFJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gIC8qKiBTaG93IGZvY3VzIHdoZW4gY2xpY2sgZWxlbWVudC4gdiAqL1xuICBmb2N1c09uQ2xpY2s/OiBib29sZWFuO1xuICAvKiogU2hvdyBmb2N1cyB3aGVuIGNsaWNrIGVsZW1lbnQuIHYgKi9cbiAgZm9jdXNEaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBGb2N1cyBhbmQgbmF2aWdhdGlvbiBzdHJhdGVneSB0byBiZSB1c2VkLiB2ICovXG4gIHN0cmF0ZWd5PzogSHZGb2N1c1N0cmF0ZWdpZXM7XG4gIC8qKiBVc2VzIGFuIGFic29sdXRlIHBvc2l0aW9uZWQgZGl2IGFzIGEgZm9jdXMuIHYgKi9cbiAgdXNlRmFsc2VGb2N1cz86IGJvb2xlYW47XG4gIC8qKiBOYXJyb3dzIHRoZSByZXN1bHRzIG9mIHRoZSBmb2N1cyB0byBvbmx5IHRoZXNlcyBjbGFzcyB2ICovXG4gIGZpbHRlckNsYXNzPzogc3RyaW5nO1xuICAvKiogSG93IG11Y2ggdGhlIG5hdmlnYXRpb24gd2lsbCBza2lwIHdoZW4gdXNpbmcgdGhlIGFycm93cy4gdiAqL1xuICBuYXZpZ2F0aW9uSnVtcD86IG51bWJlcjtcbiAgLyoqIEEgSnNzIE9iamVjdCB1c2VkIHRvIG92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC4gKi9cbiAgY2xhc3Nlcz86IEh2Rm9jdXNDbGFzc2VzO1xufVxuXG5leHBvcnQgY29uc3QgSHZGb2N1cyA9ICh7XG4gIGNsYXNzZXMsXG4gIGNoaWxkcmVuLFxuICBjb25maWd1cmF0aW9uID0ge30sXG4gIGRpc2FibGVkQ2xhc3MgPSBmYWxzZSxcbiAgc2VsZWN0ZWQgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgcm9vdFJlZiA9IHVuZGVmaW5lZCxcbiAgZm9jdXNPbkNsaWNrID0gZmFsc2UsXG4gIGZvY3VzRGlzYWJsZWQgPSB0cnVlLFxuICBzdHJhdGVneSA9IFwibGlzdGJveFwiLFxuICB1c2VGYWxzZUZvY3VzID0gZmFsc2UsXG4gIGZpbHRlckNsYXNzLFxuICBuYXZpZ2F0aW9uSnVtcCA9IDQsXG59OiBIdkZvY3VzUHJvcHMpID0+IHtcbiAgY29uc3QgW3Nob3dGb2N1cywgc2V0U2hvd0ZvY3VzXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW2NoaWxkRm9jdXMsIHNldENoaWxkRm9jdXNdID0gdXNlU3RhdGU8YW55PigpO1xuICBjb25zdCBbaGFzUnVuQ29uZmlnLCBzZXRIYXNSdW5Db25maWddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGdldEZvY3VzZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgZm9jdXNlcyA9IHJvb3RSZWY/LmN1cnJlbnRcbiAgICAgID8gQXJyYXkuZnJvbShcbiAgICAgICAgICByb290UmVmLmN1cnJlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgICAgIGZpbHRlckNsYXNzIHx8IGZvY3VzQ2xhc3Nlcy5yb290IHx8IGNsYXNzZXM/LnJvb3QgfHwgXCJyb290XCJcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogW107XG4gICAgcmV0dXJuIGZvY3VzZXM7XG4gIH07XG5cbiAgY29uc3Qgc2V0VGFiSW5kZXggPSAoZWwsIHRhYkluZGV4ID0gMCkgPT4ge1xuICAgIGNvbnN0IGVsQ2hpbGRGb2N1cyA9IGdldEZvY3VzYWJsZUNoaWxkcmVuKGVsKVswXTtcbiAgICBpZiAoZWxDaGlsZEZvY3VzKSB7XG4gICAgICBlbC50YWJJbmRleCA9IC0xO1xuICAgICAgZWxDaGlsZEZvY3VzLnRhYkluZGV4ID0gdGFiSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnRhYkluZGV4ID0gdGFiSW5kZXg7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNldFNlbGVjdGVkVGFiSW5kZXggPSAoKSA9PiB7XG4gICAgY29uc3QgZm9jdXNlcyA9IGdldEZvY3VzZXMoKTtcbiAgICBjb25zdCBmaXJzdFNlbGVjdGVkID0gZm9jdXNlcy5maW5kKChmb2N1cykgPT5cbiAgICAgIGZvY3VzLmNsYXNzTGlzdC5jb250YWlucyhcbiAgICAgICAgZm9jdXNDbGFzc2VzLnNlbGVjdGVkIHx8IGNsYXNzZXM/LnNlbGVjdGVkIHx8IFwic2VsZWN0ZWRcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICBpZiAoIWZpcnN0U2VsZWN0ZWQpIHJldHVybjtcbiAgICBmb2N1c2VzLmZvckVhY2goKGZvY3VzKSA9PiBzZXRUYWJJbmRleChmb2N1cywgLTEpKTtcbiAgICBzZXRUYWJJbmRleChmaXJzdFNlbGVjdGVkLCAwKTtcbiAgfTtcblxuICBjb25zdCBjbGVhclRhYlNpYmxpbmdzID0gKGVsKSA9PiB7XG4gICAgZ2V0Rm9jdXNlcygpLmZvckVhY2goKGZvY3VzKSA9PiBzZXRUYWJJbmRleChmb2N1cywgLTEpKTtcbiAgICBzZXRUYWJJbmRleChlbCwgMCk7XG4gIH07XG5cbiAgY29uc3Qgb25Gb2N1c1N0cmF0ZWd5ID0gKGV2dCkgPT4ge1xuICAgIGlmIChzdHJhdGVneSA9PT0gXCJsaXN0Ym94XCIpIHtcbiAgICAgIGNsZWFyVGFiU2libGluZ3MoZXZ0LmN1cnJlbnRUYXJnZXQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvbkJsdXJTdHJhdGVneSA9ICgpID0+IHtcbiAgICBpZiAoXG4gICAgICBzdHJhdGVneSA9PT0gXCJsaXN0Ym94XCIgJiZcbiAgICAgIHJvb3RSZWYgJiZcbiAgICAgIHJvb3RSZWYuY3VycmVudCAmJlxuICAgICAgIXJvb3RSZWYuY3VycmVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KVxuICAgICkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldFNlbGVjdGVkVGFiSW5kZXgoKTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY29uZmlnID0gKGVsKSA9PiB7XG4gICAgY29uc3QgeyB0YWJJbmRleCB9ID0gY29uZmlndXJhdGlvbjtcbiAgICBpZiAoIWVsIHx8IGhhc1J1bkNvbmZpZykgcmV0dXJuO1xuICAgIGlmIChzdHJhdGVneSA9PT0gXCJjYXJkXCIpIHtcbiAgICAgIHNldENoaWxkRm9jdXMoY2hpbGRyZW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdHJhdGVneSA9PT0gXCJncmlkXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmb2N1c2FibGVDaGlsZHJlbiA9IGdldEZvY3VzYWJsZUNoaWxkcmVuKGVsKTtcbiAgICBpZiAoZm9jdXNhYmxlQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBmb2N1c2FibGVDaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gc2V0VGFiSW5kZXgoY2hpbGQsIC0xKSk7XG4gICAgICBzZXRDaGlsZEZvY3VzKGZvY3VzYWJsZUNoaWxkcmVuWzBdKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTmlsKHRhYkluZGV4KSkgc2V0VGFiSW5kZXgoZWwsIHRhYkluZGV4KTtcbiAgICBzZXRIYXNSdW5Db25maWcodHJ1ZSk7XG4gIH07XG5cbiAgY29uc3QgYWRkRm9jdXNDbGFzcyA9IChldnQpID0+IHtcbiAgICBpZiAoIXVzZUZhbHNlRm9jdXMpIHtcbiAgICAgIGV2dC5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5hZGQoZm9jdXNDbGFzc2VzLmZvY3VzZWQpO1xuICAgICAgaWYgKGNsYXNzZXM/LmZvY3VzZWQpIHtcbiAgICAgICAgZXZ0LmN1cnJlbnRUYXJnZXQuY2xhc3NMaXN0LmFkZChjbGFzc2VzLmZvY3VzZWQpO1xuICAgICAgfVxuICAgICAgLy8gYWRkIGdsb2JhbCBjbGFzcyBIdklzRm9jdXNlZCBhcyBhIG1hcmtlclxuICAgICAgLy8gbm90IHRvIGJlIHN0eWxlZCBkaXJlY3RseSwgb25seSBhcyBoZWxwZXIgaW4gc3BlY2lmaWMgY3NzIHF1ZXJpZXNcbiAgICAgIGV2dC5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5hZGQoXCJIdklzRm9jdXNlZFwiKTtcbiAgICAgIGNsYXNzZXM/LmZvY3VzXG4gICAgICAgID8uc3BsaXQoXCIgXCIpXG4gICAgICAgIC5mb3JFYWNoKChjKSA9PiBldnQuY3VycmVudFRhcmdldC5jbGFzc0xpc3QuYWRkKGMpKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlRm9jdXNDbGFzcyA9ICgpID0+IHtcbiAgICBpZiAoIXVzZUZhbHNlRm9jdXMpIHtcbiAgICAgIGdldEZvY3VzZXMoKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChmb2N1c0NsYXNzZXMuZm9jdXNlZCkge1xuICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShmb2N1c0NsYXNzZXMuZm9jdXNlZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsYXNzZXM/LmZvY3VzZWQpIHtcbiAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3Nlcy5mb2N1c2VkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgdGhlIGdsb2JhbCBjbGFzcyBIdklzRm9jdXNlZFxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJIdklzRm9jdXNlZFwiKTtcbiAgICAgICAgY2xhc3Nlcz8uZm9jdXM/LnNwbGl0KFwiIFwiKS5mb3JFYWNoKChjKSA9PiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoYykpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uRm9jdXMgPSAoZXZ0KSA9PiB7XG4gICAgYWRkRm9jdXNDbGFzcyhldnQpO1xuICAgIHNldFNob3dGb2N1cyh0cnVlKTtcbiAgICAvLyBnaXZlIGZvY3VzIHRvIGNoaWxkIGVsZW1lbnQgaWYgYW55IGZvY3VzYWJsZVxuXG4gICAgaWYgKGNoaWxkRm9jdXMgJiYgY2hpbGRGb2N1cy5mb2N1cykgY2hpbGRGb2N1cy5mb2N1cygpO1xuICAgIG9uRm9jdXNTdHJhdGVneShldnQpO1xuICB9O1xuXG4gIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICBzZXRTaG93Rm9jdXMoZmFsc2UpO1xuICAgIHJlbW92ZUZvY3VzQ2xhc3MoKTtcbiAgICBvbkJsdXJTdHJhdGVneSgpO1xuICB9O1xuXG4gIGNvbnN0IG9uTW91c2VEb3duID0gKGV2dCkgPT4ge1xuICAgIGNvbnN0IGhhc0NhcmQgPSAhIWV2dC5jdXJyZW50VGFyZ2V0Py5xdWVyeVNlbGVjdG9yKFwiLkh2SXNDYXJkR3JpZEVsZW1lbnRcIik7XG4gICAgaWYgKHN0cmF0ZWd5ID09PSBcImdyaWRcIiAmJiBoYXNDYXJkKSByZXR1cm47XG5cbiAgICBzZXRGb2N1c1RvKGV2dC5jdXJyZW50VGFyZ2V0KTtcbiAgICBzZXRUYWJJbmRleChldnQuY3VycmVudFRhcmdldCwgMCk7XG4gICAgLy8gcmVtb3ZlIGZvY3VzIG91dGxpbmUgdW5sZXNzIGV4cGxpY2l0bHkgZW5hYmxlZFxuICAgIGlmICghZm9jdXNPbkNsaWNrKSB7XG4gICAgICAvLyBUT0RPIHRoaXMgcGllY2Ugb2YgY29kZSB3b3JrcyBvbmx5IGJlY2F1c2Ugb25Nb3VzZURvd24gaXMgaGFwcGVuaW5nIGFmdGVyIHRoZSBmb2N1cyBldmVudFxuICAgICAgLy8gVGhlcmUgaXMgbm90aGluZyBpbiBoZXJlIHRoYXQgZ3VhcmFudGVlcyB0aGUgb3JkZXIgb2YgdGhlc2UgZXZlbnRzLCBzbyBpdCBtYXkgcHJlc2VudCBhIHByb2JsZW0gaW4gdGhlIGZ1dHVyZVxuICAgICAgcmVtb3ZlRm9jdXNDbGFzcygpO1xuICAgICAgc2V0U2hvd0ZvY3VzKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZm9jdXNBbmRVcGRhdGVJbmRleCA9IChuZXh0Rm9jdXMsIHByZXZpb3VzRm9jdXMsIGZvY3VzZXNMaXN0KSA9PiB7XG4gICAgaWYgKGZvY3VzZXNMaXN0Py5pbmNsdWRlcyhwcmV2aW91c0ZvY3VzKSkge1xuICAgICAgc2V0VGFiSW5kZXgocHJldmlvdXNGb2N1cywgLTEpO1xuICAgIH1cbiAgICBzZXRUYWJJbmRleChuZXh0Rm9jdXMsIDApO1xuICAgIHNldEZvY3VzVG8obmV4dEZvY3VzKTtcbiAgfTtcblxuICBjb25zdCBnZXRFbmFibGVkS2V5cyA9IChjdXJyZW50Rm9jdXNJbmRleCwganVtcCwgbGlzdFNpemUpID0+ICh7XG4gICAgcmlnaHQ6XG4gICAgICAoY3VycmVudEZvY3VzSW5kZXggKyAxKSAlIGp1bXAgPT09IDAgfHxcbiAgICAgIGN1cnJlbnRGb2N1c0luZGV4ICsgMSA+IGxpc3RTaXplIC0gMSxcbiAgICBsZWZ0OiBjdXJyZW50Rm9jdXNJbmRleCAlIGp1bXAgPT09IDAsXG4gICAgdXA6IGN1cnJlbnRGb2N1c0luZGV4IC0ganVtcCA8IDAsXG4gICAgZG93bjpcbiAgICAgIGN1cnJlbnRGb2N1c0luZGV4ICsganVtcCA+IGxpc3RTaXplIHx8XG4gICAgICBjdXJyZW50Rm9jdXNJbmRleCArIGp1bXAgPiBsaXN0U2l6ZSAtIDEsXG4gIH0pO1xuXG4gIGNvbnN0IG9uR3JpZEtleURvd25IYW5kbGVyID0gKFxuICAgIGV2dCxcbiAgICBmb2N1c2VzLFxuICAgIGZvY3VzZXNMaXN0LFxuICAgIGN1cnJlbnRGb2N1c0luZGV4LFxuICAgIGp1bXBcbiAgKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgQXJyb3dVcCxcbiAgICAgIEFycm93RG93bixcbiAgICAgIEhvbWUsXG4gICAgICBFbmQsXG4gICAgICBBcnJvd0xlZnQsXG4gICAgICBBcnJvd1JpZ2h0LFxuICAgICAgRW50ZXIsXG4gICAgICBTcGFjZUJhcixcbiAgICB9ID0ga2V5Ym9hcmRDb2RlcztcblxuICAgIGNvbnN0IGNoaWxkRm9jdXNJc0lucHV0ID0gY2hpbGRGb2N1cyAmJiBjaGlsZEZvY3VzLm5vZGVOYW1lID09PSBcIklOUFVUXCI7XG5cbiAgICBpZiAoXG4gICAgICAhaXNPbmVPZktleXMoZXZ0LCBbXG4gICAgICAgIEFycm93VXAsXG4gICAgICAgIEFycm93RG93bixcbiAgICAgICAgQXJyb3dMZWZ0LFxuICAgICAgICBBcnJvd1JpZ2h0LFxuICAgICAgICBIb21lLFxuICAgICAgICBFbmQsXG4gICAgICAgIFNwYWNlQmFyLFxuICAgICAgICBFbnRlcixcbiAgICAgIF0pIHx8XG4gICAgICAoY2hpbGRGb2N1c0lzSW5wdXQgJiYgaXNLZXkoZXZ0LCBFbnRlcikpXG4gICAgKSB7XG4gICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gd2UnbGwgZG8gc29tZXRoaW5nIHdpdGggdGhlIGtleSBzbyBwcmV2ZW50IGRlZmF1bHQgYW5kIHN0b3AgcHJvcGFnYXRpb25cbiAgICAvLyBleGNlcHQgZm9yIEVudGVyIGFuZCBTcGFjZUJhclxuICAgIGlmICghaXNPbmVPZktleXMoZXZ0LCBbRW50ZXIsIFNwYWNlQmFyXSkpIHtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGNvbnN0IGJsb2NrZWRLZXlzID0gZ2V0RW5hYmxlZEtleXMoXG4gICAgICBjdXJyZW50Rm9jdXNJbmRleCxcbiAgICAgIGp1bXAsXG4gICAgICBmb2N1c2VzTGlzdC5sZW5ndGhcbiAgICApO1xuXG4gICAgc3dpdGNoIChldnQua2V5Q29kZSkge1xuICAgICAgY2FzZSBTcGFjZUJhcjpcbiAgICAgIGNhc2UgRW50ZXI6XG4gICAgICAgIGlmIChpc0Jyb3dzZXIoXCJmaXJlZm94XCIpKSB7XG4gICAgICAgICAgZXZ0LnRhcmdldC5jbGljaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV2dC5jdXJyZW50VGFyZ2V0LmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEFycm93VXA6XG4gICAgICAgIGlmICghYmxvY2tlZEtleXMudXApIHtcbiAgICAgICAgICBmb2N1c0FuZFVwZGF0ZUluZGV4KFxuICAgICAgICAgICAgZm9jdXNlcy5qdW1wIHx8IGZvY3VzZXMubGFzdCxcbiAgICAgICAgICAgIGV2dC5jdXJyZW50LFxuICAgICAgICAgICAgZm9jdXNlc0xpc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBcnJvd0Rvd246XG4gICAgICAgIGlmICghYmxvY2tlZEtleXMuZG93bikge1xuICAgICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoXG4gICAgICAgICAgICBmb2N1c2VzLmZhbGwgfHwgZm9jdXNlcy5maXJzdCxcbiAgICAgICAgICAgIGV2dC5jdXJyZW50LFxuICAgICAgICAgICAgZm9jdXNlc0xpc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBcnJvd0xlZnQ6XG4gICAgICAgIGlmICghYmxvY2tlZEtleXMubGVmdCkge1xuICAgICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoXG4gICAgICAgICAgICBmb2N1c2VzLnByZXZpb3VzIHx8IGZvY3VzZXMubGFzdCxcbiAgICAgICAgICAgIGV2dC5jdXJyZW50LFxuICAgICAgICAgICAgZm9jdXNlc0xpc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBcnJvd1JpZ2h0OlxuICAgICAgICBpZiAoIWJsb2NrZWRLZXlzLnJpZ2h0KSB7XG4gICAgICAgICAgZm9jdXNBbmRVcGRhdGVJbmRleChcbiAgICAgICAgICAgIGZvY3VzZXMubmV4dCB8fCBmb2N1c2VzLmZpcnN0LFxuICAgICAgICAgICAgZXZ0LmN1cnJlbnQsXG4gICAgICAgICAgICBmb2N1c2VzTGlzdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEhvbWU6XG4gICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoZm9jdXNlcy5maXJzdCwgZXZ0LmN1cnJlbnQsIGZvY3VzZXNMaXN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVuZDpcbiAgICAgICAgZm9jdXNBbmRVcGRhdGVJbmRleChmb2N1c2VzLmxhc3QsIGV2dC5jdXJyZW50LCBmb2N1c2VzTGlzdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25WZXJ0aWNhbEFycmFuZ2VtZW50SGFuZGxlciA9IChldnQsIGZvY3VzZXMsIGZvY3VzZXNMaXN0KSA9PiB7XG4gICAgY29uc3QgeyBBcnJvd1VwLCBBcnJvd0Rvd24sIEhvbWUsIEVuZCwgRW50ZXIsIFNwYWNlQmFyIH0gPSBrZXlib2FyZENvZGVzO1xuICAgIGNvbnN0IGNoaWxkRm9jdXNJc0lucHV0ID0gY2hpbGRGb2N1cyAmJiBjaGlsZEZvY3VzLm5vZGVOYW1lID09PSBcIklOUFVUXCI7XG5cbiAgICBpZiAoXG4gICAgICAhaXNPbmVPZktleXMoZXZ0LCBbQXJyb3dVcCwgQXJyb3dEb3duLCBIb21lLCBFbmQsIFNwYWNlQmFyLCBFbnRlcl0pIHx8XG4gICAgICAoY2hpbGRGb2N1c0lzSW5wdXQgJiYgaXNLZXkoZXZ0LCBFbnRlcikpXG4gICAgKSB7XG4gICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gd2UnbGwgZG8gc29tZXRoaW5nIHdpdGggdGhlIGtleSBzbyBwcmV2ZW50IGRlZmF1bHQgYW5kIHN0b3AgcHJvcGFnYXRpb25cbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBzd2l0Y2ggKGV2dC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIFNwYWNlQmFyOlxuICAgICAgY2FzZSBFbnRlcjpcbiAgICAgICAgZXZ0LnRhcmdldC5jbGljaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQXJyb3dVcDpcbiAgICAgICAgZm9jdXNBbmRVcGRhdGVJbmRleChcbiAgICAgICAgICBmb2N1c2VzLnByZXZpb3VzIHx8IGZvY3VzZXMubGFzdCxcbiAgICAgICAgICBldnQuY3VycmVudCxcbiAgICAgICAgICBmb2N1c2VzTGlzdFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQXJyb3dEb3duOlxuICAgICAgICBmb2N1c0FuZFVwZGF0ZUluZGV4KFxuICAgICAgICAgIGZvY3VzZXMubmV4dCB8fCBmb2N1c2VzLmZpcnN0LFxuICAgICAgICAgIGV2dC5jdXJyZW50LFxuICAgICAgICAgIGZvY3VzZXNMaXN0XG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBIb21lOlxuICAgICAgICBmb2N1c0FuZFVwZGF0ZUluZGV4KGZvY3VzZXMuZmlyc3QsIGV2dC5jdXJyZW50LCBmb2N1c2VzTGlzdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFbmQ6XG4gICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoZm9jdXNlcy5sYXN0LCBldnQuY3VycmVudCwgZm9jdXNlc0xpc3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uU2luZ2xlSGFuZGxlciA9IChldnQpID0+IHtcbiAgICBjb25zdCB7IEVudGVyLCBTcGFjZUJhciB9ID0ga2V5Ym9hcmRDb2RlcztcbiAgICBjb25zdCBjaGlsZEZvY3VzSXNJbnB1dCA9IGNoaWxkRm9jdXMgJiYgY2hpbGRGb2N1cy5ub2RlTmFtZSA9PT0gXCJJTlBVVFwiO1xuXG4gICAgaWYgKFxuICAgICAgIWlzT25lT2ZLZXlzKGV2dCwgW1NwYWNlQmFyLCBFbnRlcl0pIHx8XG4gICAgICAoY2hpbGRGb2N1c0lzSW5wdXQgJiYgaXNLZXkoZXZ0LCBFbnRlcikpXG4gICAgKSB7XG4gICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gd2UnbGwgZG8gc29tZXRoaW5nIHdpdGggdGhlIGtleSBzbyBwcmV2ZW50IGRlZmF1bHQgYW5kIHN0b3AgcHJvcGFnYXRpb25cbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBldnQuY3VycmVudFRhcmdldC5jbGljaygpO1xuICB9O1xuXG4gIGNvbnN0IG9uS2V5RG93biA9IChldnQpID0+IHtcbiAgICBpZiAocm9vdFJlZj8uY3VycmVudCA9PSBudWxsKSB7XG4gICAgICAvLyBvcGVyYXRpbmcgb3V0c2lkZSBvZiBhIGNvbXBvc2l0ZSB3aWRnZXRcbiAgICAgIC8vIG5vdGhpbmcgdG8gbWFuYWdlLCBqdXN0IHN0eWxlIGFuZCB0cmlnZ2VyIGNsaWNrc1xuICAgICAgb25TaW5nbGVIYW5kbGVyKGV2dCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVE9ETyBrZWVwIHRoZSBzbWFydCBkZWZhdWx0LCBidXQgYWxsb3cgdG8gZXhwbGljaXRseSBvdmVycmlkZSBpZiBkaXNhYmxlZCBlbGVtZW50cyBzaG91bGQgYmUgZm9jdXNhYmxlXG4gICAgY29uc3QgaXNEaXNhYmxlZEZvY3VzYWJsZSA9IHN0cmF0ZWd5ID09PSBcIm1lbnVcIjtcbiAgICBjb25zdCBmb2N1c2VzTGlzdCA9IGdldEZvY3VzZXMoKS5maWx0ZXIoXG4gICAgICAoZWwpID0+XG4gICAgICAgIGlzRGlzYWJsZWRGb2N1c2FibGUgfHxcbiAgICAgICAgIWVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc2VzPy5kaXNhYmxlZCBhcyBzdHJpbmcpXG4gICAgKTtcblxuICAgIGNvbnN0IGN1cnJlbnRGb2N1cyA9IGZvY3VzZXNMaXN0LmluZGV4T2YoZXZ0LmN1cnJlbnRUYXJnZXQpO1xuXG4gICAgY29uc3QgZm9jdXNlcyA9IHtcbiAgICAgIGZpcnN0OiBmb2N1c2VzTGlzdFswXSxcbiAgICAgIGxhc3Q6IGZvY3VzZXNMaXN0W2ZvY3VzZXNMaXN0Lmxlbmd0aCAtIDFdLFxuICAgICAgcHJldmlvdXM6IGZvY3VzZXNMaXN0W2N1cnJlbnRGb2N1cyAtIDFdLFxuICAgICAgbmV4dDogZm9jdXNlc0xpc3RbY3VycmVudEZvY3VzICsgMV0sXG4gICAgICBmYWxsOiBmb2N1c2VzTGlzdFtjdXJyZW50Rm9jdXMgKyBuYXZpZ2F0aW9uSnVtcF0sXG4gICAgICBqdW1wOiBmb2N1c2VzTGlzdFtjdXJyZW50Rm9jdXMgLSBuYXZpZ2F0aW9uSnVtcF0sXG4gICAgfTtcblxuICAgIGlmIChzdHJhdGVneSA9PT0gXCJncmlkXCIpIHtcbiAgICAgIG9uR3JpZEtleURvd25IYW5kbGVyKFxuICAgICAgICBldnQsXG4gICAgICAgIGZvY3VzZXMsXG4gICAgICAgIGZvY3VzZXNMaXN0LFxuICAgICAgICBjdXJyZW50Rm9jdXMsXG4gICAgICAgIG5hdmlnYXRpb25KdW1wXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRPRE8gYWRkIHByb3BlcnR5IGZvciBzcGVjaWZ5aW5nIHRoZSBjb21wb3NpdGUgd2lkZ2V0IG9yaWVudGF0aW9uXG4gICAgLy8gVE9ETyBpbXBsZW1lbnQgaGFuZGxlciBmb3IgaG9yaXpvbnRhbCBvcmllbnRhdGlvblxuICAgIG9uVmVydGljYWxBcnJhbmdlbWVudEhhbmRsZXIoZXZ0LCBmb2N1c2VzLCBmb2N1c2VzTGlzdCk7XG4gIH07XG5cbiAgY29uc3Qgb25LZXlVcCA9IChldnQpID0+IHtcbiAgICBpZiAoaXNCcm93c2VyKFwiZmlyZWZveFwiKSkgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgaWYgKGRpc2FibGVkKSByZXR1cm4gY2hpbGRyZW47XG5cbiAgY29uc3QgZm9jdXNXcmFwcGVyID0gKGNoaWxkcmVuVG9XcmFwKSA9PiAoXG4gICAgPFN0eWxlZEZvY3VzV3JhcHBlclxuICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICBjbGFzc2VzPy5leHRlcm5hbFJlZmVyZW5jZSxcbiAgICAgICAgZm9jdXNDbGFzc2VzLmV4dGVybmFsUmVmZXJlbmNlXG4gICAgICApfVxuICAgID5cbiAgICAgIHtjaGlsZHJlblRvV3JhcH1cbiAgICAgIHtzaG93Rm9jdXMgJiYgKFxuICAgICAgICA8U3R5bGVkRmFsc2VGb2N1c1xuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChjbGFzc2VzPy5mYWxzZUZvY3VzLCBmb2N1c0NsYXNzZXMuZmFsc2VGb2N1cyl9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvU3R5bGVkRm9jdXNXcmFwcGVyPlxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPENvbmRpdGlvbmFsV3JhcHBlciBjb25kaXRpb249e3VzZUZhbHNlRm9jdXN9IHdyYXBwZXI9e2ZvY3VzV3JhcHBlcn0+XG4gICAgICA8R2xvYmFsIHN0eWxlcz17Zm9jdXNTdHlsZXN9IC8+XG4gICAgICB7UmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xzeChcbiAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgZm9jdXNDbGFzc2VzLnJvb3QsXG4gICAgICAgICAgY2xhc3Nlcz8ucm9vdCxcbiAgICAgICAgICBmaWx0ZXJDbGFzcyxcbiAgICAgICAgICBzZWxlY3RlZCAmJiBjbHN4KGZvY3VzQ2xhc3Nlcy5zZWxlY3RlZCwgY2xhc3Nlcz8uc2VsZWN0ZWQpLFxuICAgICAgICAgIGRpc2FibGVkQ2xhc3MgJiYgY2xzeChmb2N1c0NsYXNzZXMuZGlzYWJsZWQsIGNsYXNzZXM/LmRpc2FibGVkKSxcbiAgICAgICAgICBmb2N1c0Rpc2FibGVkICYmXG4gICAgICAgICAgICBjbHN4KGZvY3VzQ2xhc3Nlcy5mb2N1c0Rpc2FibGVkLCBjbGFzc2VzPy5mb2N1c0Rpc2FibGVkKVxuICAgICAgICApLFxuICAgICAgICByZWY6IGNvbmZpZyxcbiAgICAgICAgb25Gb2N1cyxcbiAgICAgICAgb25CbHVyLFxuICAgICAgICBvbk1vdXNlRG93bixcbiAgICAgICAgb25LZXlEb3duLFxuICAgICAgICBvbktleVVwLFxuICAgICAgICBzZWxlY3RlZCxcbiAgICAgIH0pfVxuICAgIDwvQ29uZGl0aW9uYWxXcmFwcGVyPlxuICApO1xufTtcbiJdfQ== */",
21
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2h2LXVpa2l0LXJlYWN0L2h2LXVpa2l0LXJlYWN0L3BhY2thZ2VzL2NvcmUvc3JjL2NvbXBvbmVudHMvRm9jdXMvRm9jdXMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVd1QiIsImZpbGUiOiIvaG9tZS9ydW5uZXIvd29yay9odi11aWtpdC1yZWFjdC9odi11aWtpdC1yZWFjdC9wYWNrYWdlcy9jb3JlL3NyYy9jb21wb25lbnRzL0ZvY3VzL0ZvY3VzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsc3ggfSBmcm9tIFwiY2xzeFwiO1xuaW1wb3J0IGlzTmlsIGZyb20gXCJsb2Rhc2gvaXNOaWxcIjtcbmltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBIdkJhc2VQcm9wcyB9IGZyb20gXCJAY29yZS90eXBlc1wiO1xuaW1wb3J0IHsgaXNCcm93c2VyLCBpc0tleSwgaXNPbmVPZktleXMgfSBmcm9tIFwiQGNvcmUvdXRpbHNcIjtcbmltcG9ydCBDb25kaXRpb25hbFdyYXBwZXIgZnJvbSBcIkBjb3JlL3V0aWxzL0NvbmRpdGlvbmFsV3JhcHBlclwiO1xuaW1wb3J0IHsgY3NzLCBHbG9iYWwgfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmltcG9ydCB7IFN0eWxlZEZvY3VzV3JhcHBlciwgU3R5bGVkRmFsc2VGb2N1cyB9IGZyb20gXCIuL0ZvY3VzLnN0eWxlc1wiO1xuaW1wb3J0IHsgZ2V0Rm9jdXNhYmxlQ2hpbGRyZW4sIHNldEZvY3VzVG8gfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IGZvY3VzQ2xhc3NlcywgeyBIdkZvY3VzQ2xhc3NlcyB9IGZyb20gXCIuL2ZvY3VzQ2xhc3Nlc1wiO1xuXG5jb25zdCBmb2N1c1N0eWxlcyA9IGNzc2BcbiAgLkh2Rm9jdXMtZm9jdXNlZCB7XG4gICAgb3V0bGluZS1jb2xvcjogIzUyYThlYztcbiAgICBvdXRsaW5lLXN0eWxlOiBzb2xpZDtcbiAgICBvdXRsaW5lLXdpZHRoOiAwcHg7XG4gICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICM1MmE4ZWMsIDAgMCAwIDRweCByZ2JhKDI5LCAxNTUsIDIwOSwgMC4zKTtcblxuICAgIEBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAwKSB7XG4gICAgICBvdXRsaW5lLWNvbG9yOiAjNTJhOGVjO1xuICAgICAgb3V0bGluZS1zdHlsZTogc29saWQ7XG4gICAgICBvdXRsaW5lLXdpZHRoOiAwcHg7XG4gICAgICBvdXRsaW5lLW9mZnNldDogLTFweDtcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjNTJhOGVjLCAwIDAgMCA0cHggcmdiYSgyOSwgMTU1LCAyMDksIDAuMyk7XG4gICAgfVxuICB9XG5cbiAgLkh2Rm9jdXMtZm9jdXNEaXNhYmxlZCB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG4gIC5IdkZvY3VzLWZvY3VzRGlzYWJsZWQgKjpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG4gIC5IdkZvY3VzLWZvY3VzRGlzYWJsZWQgKiB7XG4gICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50O1xuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxuYDtcblxuZXhwb3J0IHR5cGUgSHZGb2N1c1N0cmF0ZWdpZXMgPSBcImxpc3Rib3hcIiB8IFwibWVudVwiIHwgXCJjYXJkXCIgfCBcImdyaWRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBIdkZvY3VzUHJvcHMgZXh0ZW5kcyBIdkJhc2VQcm9wczxIVE1MRWxlbWVudCwgXCJjaGlsZHJlblwiPiB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIC8qKiBFeHRyYSBjb25maWd1cmF0aW9uIGZvciB0aGUgY2hpbGQgZWxlbWVudC4gKi9cbiAgY29uZmlndXJhdGlvbj86IHtcbiAgICB0YWJJbmRleD86IG51bWJlcjtcbiAgfTtcbiAgLyoqIEluZGljYXRlcyB0aGF0IHRoZSBkaXNhYmxlZCBjbGFzcyBzaG91bGQgYmUgYXBwbGllZC4gKi9cbiAgZGlzYWJsZWRDbGFzcz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBmb2N1cyBpcyBzZWxlY3RlZC4gKi9cbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgZm9jdXMgaXMgZGlzYWJsZWQuICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIFRoZSByZWZlcmVuY2UgdG8gdGhlIHJvb3QgZWxlbWVudCB0byBob2xkIGFsbCBGb2N1cycgY29udGV4dC4gKi9cbiAgcm9vdFJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gIC8qKiBTaG93IGZvY3VzIHdoZW4gY2xpY2sgZWxlbWVudC4gdiAqL1xuICBmb2N1c09uQ2xpY2s/OiBib29sZWFuO1xuICAvKiogU2hvdyBmb2N1cyB3aGVuIGNsaWNrIGVsZW1lbnQuIHYgKi9cbiAgZm9jdXNEaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBGb2N1cyBhbmQgbmF2aWdhdGlvbiBzdHJhdGVneSB0byBiZSB1c2VkLiB2ICovXG4gIHN0cmF0ZWd5PzogSHZGb2N1c1N0cmF0ZWdpZXM7XG4gIC8qKiBVc2VzIGFuIGFic29sdXRlIHBvc2l0aW9uZWQgZGl2IGFzIGEgZm9jdXMuIHYgKi9cbiAgdXNlRmFsc2VGb2N1cz86IGJvb2xlYW47XG4gIC8qKiBOYXJyb3dzIHRoZSByZXN1bHRzIG9mIHRoZSBmb2N1cyB0byBvbmx5IHRoZXNlcyBjbGFzcyB2ICovXG4gIGZpbHRlckNsYXNzPzogc3RyaW5nO1xuICAvKiogSG93IG11Y2ggdGhlIG5hdmlnYXRpb24gd2lsbCBza2lwIHdoZW4gdXNpbmcgdGhlIGFycm93cy4gdiAqL1xuICBuYXZpZ2F0aW9uSnVtcD86IG51bWJlcjtcbiAgLyoqIEEgSnNzIE9iamVjdCB1c2VkIHRvIG92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC4gKi9cbiAgY2xhc3Nlcz86IEh2Rm9jdXNDbGFzc2VzO1xufVxuXG5leHBvcnQgY29uc3QgSHZGb2N1cyA9ICh7XG4gIGNsYXNzZXMsXG4gIGNoaWxkcmVuLFxuICBjb25maWd1cmF0aW9uID0ge30sXG4gIGRpc2FibGVkQ2xhc3MgPSBmYWxzZSxcbiAgc2VsZWN0ZWQgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgcm9vdFJlZiA9IHVuZGVmaW5lZCxcbiAgZm9jdXNPbkNsaWNrID0gZmFsc2UsXG4gIGZvY3VzRGlzYWJsZWQgPSB0cnVlLFxuICBzdHJhdGVneSA9IFwibGlzdGJveFwiLFxuICB1c2VGYWxzZUZvY3VzID0gZmFsc2UsXG4gIGZpbHRlckNsYXNzLFxuICBuYXZpZ2F0aW9uSnVtcCA9IDQsXG59OiBIdkZvY3VzUHJvcHMpID0+IHtcbiAgY29uc3QgW3Nob3dGb2N1cywgc2V0U2hvd0ZvY3VzXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW2NoaWxkRm9jdXMsIHNldENoaWxkRm9jdXNdID0gdXNlU3RhdGU8YW55PigpO1xuICBjb25zdCBbaGFzUnVuQ29uZmlnLCBzZXRIYXNSdW5Db25maWddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGdldEZvY3VzZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgZm9jdXNlcyA9IHJvb3RSZWY/LmN1cnJlbnRcbiAgICAgID8gQXJyYXkuZnJvbShcbiAgICAgICAgICByb290UmVmLmN1cnJlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgICAgIGZpbHRlckNsYXNzIHx8IGZvY3VzQ2xhc3Nlcy5yb290IHx8IGNsYXNzZXM/LnJvb3QgfHwgXCJyb290XCJcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogW107XG4gICAgcmV0dXJuIGZvY3VzZXM7XG4gIH07XG5cbiAgY29uc3Qgc2V0VGFiSW5kZXggPSAoZWwsIHRhYkluZGV4ID0gMCkgPT4ge1xuICAgIGNvbnN0IGVsQ2hpbGRGb2N1cyA9IGdldEZvY3VzYWJsZUNoaWxkcmVuKGVsKVswXTtcbiAgICBpZiAoZWxDaGlsZEZvY3VzKSB7XG4gICAgICBlbC50YWJJbmRleCA9IC0xO1xuICAgICAgZWxDaGlsZEZvY3VzLnRhYkluZGV4ID0gdGFiSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnRhYkluZGV4ID0gdGFiSW5kZXg7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNldFNlbGVjdGVkVGFiSW5kZXggPSAoKSA9PiB7XG4gICAgY29uc3QgZm9jdXNlcyA9IGdldEZvY3VzZXMoKTtcbiAgICBjb25zdCBmaXJzdFNlbGVjdGVkID0gZm9jdXNlcy5maW5kKChmb2N1cykgPT5cbiAgICAgIGZvY3VzLmNsYXNzTGlzdC5jb250YWlucyhcbiAgICAgICAgZm9jdXNDbGFzc2VzLnNlbGVjdGVkIHx8IGNsYXNzZXM/LnNlbGVjdGVkIHx8IFwic2VsZWN0ZWRcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICBpZiAoIWZpcnN0U2VsZWN0ZWQpIHJldHVybjtcbiAgICBmb2N1c2VzLmZvckVhY2goKGZvY3VzKSA9PiBzZXRUYWJJbmRleChmb2N1cywgLTEpKTtcbiAgICBzZXRUYWJJbmRleChmaXJzdFNlbGVjdGVkLCAwKTtcbiAgfTtcblxuICBjb25zdCBjbGVhclRhYlNpYmxpbmdzID0gKGVsKSA9PiB7XG4gICAgZ2V0Rm9jdXNlcygpLmZvckVhY2goKGZvY3VzKSA9PiBzZXRUYWJJbmRleChmb2N1cywgLTEpKTtcbiAgICBzZXRUYWJJbmRleChlbCwgMCk7XG4gIH07XG5cbiAgY29uc3Qgb25Gb2N1c1N0cmF0ZWd5ID0gKGV2dCkgPT4ge1xuICAgIGlmIChzdHJhdGVneSA9PT0gXCJsaXN0Ym94XCIpIHtcbiAgICAgIGNsZWFyVGFiU2libGluZ3MoZXZ0LmN1cnJlbnRUYXJnZXQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvbkJsdXJTdHJhdGVneSA9ICgpID0+IHtcbiAgICBpZiAoXG4gICAgICBzdHJhdGVneSA9PT0gXCJsaXN0Ym94XCIgJiZcbiAgICAgIHJvb3RSZWYgJiZcbiAgICAgIHJvb3RSZWYuY3VycmVudCAmJlxuICAgICAgIXJvb3RSZWYuY3VycmVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KVxuICAgICkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldFNlbGVjdGVkVGFiSW5kZXgoKTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY29uZmlnID0gKGVsKSA9PiB7XG4gICAgY29uc3QgeyB0YWJJbmRleCB9ID0gY29uZmlndXJhdGlvbjtcbiAgICBpZiAoIWVsIHx8IGhhc1J1bkNvbmZpZykgcmV0dXJuO1xuICAgIGlmIChzdHJhdGVneSA9PT0gXCJjYXJkXCIpIHtcbiAgICAgIHNldENoaWxkRm9jdXMoY2hpbGRyZW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdHJhdGVneSA9PT0gXCJncmlkXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmb2N1c2FibGVDaGlsZHJlbiA9IGdldEZvY3VzYWJsZUNoaWxkcmVuKGVsKTtcbiAgICBpZiAoZm9jdXNhYmxlQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBmb2N1c2FibGVDaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gc2V0VGFiSW5kZXgoY2hpbGQsIC0xKSk7XG4gICAgICBzZXRDaGlsZEZvY3VzKGZvY3VzYWJsZUNoaWxkcmVuWzBdKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTmlsKHRhYkluZGV4KSkgc2V0VGFiSW5kZXgoZWwsIHRhYkluZGV4KTtcbiAgICBzZXRIYXNSdW5Db25maWcodHJ1ZSk7XG4gIH07XG5cbiAgY29uc3QgYWRkRm9jdXNDbGFzcyA9IChldnQpID0+IHtcbiAgICBpZiAoIXVzZUZhbHNlRm9jdXMpIHtcbiAgICAgIGV2dC5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5hZGQoZm9jdXNDbGFzc2VzLmZvY3VzZWQpO1xuICAgICAgaWYgKGNsYXNzZXM/LmZvY3VzZWQpIHtcbiAgICAgICAgZXZ0LmN1cnJlbnRUYXJnZXQuY2xhc3NMaXN0LmFkZChjbGFzc2VzLmZvY3VzZWQpO1xuICAgICAgfVxuICAgICAgLy8gYWRkIGdsb2JhbCBjbGFzcyBIdklzRm9jdXNlZCBhcyBhIG1hcmtlclxuICAgICAgLy8gbm90IHRvIGJlIHN0eWxlZCBkaXJlY3RseSwgb25seSBhcyBoZWxwZXIgaW4gc3BlY2lmaWMgY3NzIHF1ZXJpZXNcbiAgICAgIGV2dC5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5hZGQoXCJIdklzRm9jdXNlZFwiKTtcbiAgICAgIGNsYXNzZXM/LmZvY3VzXG4gICAgICAgID8uc3BsaXQoXCIgXCIpXG4gICAgICAgIC5mb3JFYWNoKChjKSA9PiBldnQuY3VycmVudFRhcmdldC5jbGFzc0xpc3QuYWRkKGMpKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlRm9jdXNDbGFzcyA9ICgpID0+IHtcbiAgICBpZiAoIXVzZUZhbHNlRm9jdXMpIHtcbiAgICAgIGdldEZvY3VzZXMoKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChmb2N1c0NsYXNzZXMuZm9jdXNlZCkge1xuICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShmb2N1c0NsYXNzZXMuZm9jdXNlZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsYXNzZXM/LmZvY3VzZWQpIHtcbiAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3Nlcy5mb2N1c2VkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgdGhlIGdsb2JhbCBjbGFzcyBIdklzRm9jdXNlZFxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJIdklzRm9jdXNlZFwiKTtcbiAgICAgICAgY2xhc3Nlcz8uZm9jdXM/LnNwbGl0KFwiIFwiKS5mb3JFYWNoKChjKSA9PiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoYykpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uRm9jdXMgPSAoZXZ0KSA9PiB7XG4gICAgYWRkRm9jdXNDbGFzcyhldnQpO1xuICAgIHNldFNob3dGb2N1cyh0cnVlKTtcbiAgICAvLyBnaXZlIGZvY3VzIHRvIGNoaWxkIGVsZW1lbnQgaWYgYW55IGZvY3VzYWJsZVxuXG4gICAgaWYgKGNoaWxkRm9jdXMgJiYgY2hpbGRGb2N1cy5mb2N1cykgY2hpbGRGb2N1cy5mb2N1cygpO1xuICAgIG9uRm9jdXNTdHJhdGVneShldnQpO1xuICB9O1xuXG4gIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICBzZXRTaG93Rm9jdXMoZmFsc2UpO1xuICAgIHJlbW92ZUZvY3VzQ2xhc3MoKTtcbiAgICBvbkJsdXJTdHJhdGVneSgpO1xuICB9O1xuXG4gIGNvbnN0IG9uTW91c2VEb3duID0gKGV2dCkgPT4ge1xuICAgIGNvbnN0IGhhc0NhcmQgPSAhIWV2dC5jdXJyZW50VGFyZ2V0Py5xdWVyeVNlbGVjdG9yKFwiLkh2SXNDYXJkR3JpZEVsZW1lbnRcIik7XG4gICAgaWYgKHN0cmF0ZWd5ID09PSBcImdyaWRcIiAmJiBoYXNDYXJkKSByZXR1cm47XG5cbiAgICBzZXRGb2N1c1RvKGV2dC5jdXJyZW50VGFyZ2V0KTtcbiAgICBzZXRUYWJJbmRleChldnQuY3VycmVudFRhcmdldCwgMCk7XG4gICAgLy8gcmVtb3ZlIGZvY3VzIG91dGxpbmUgdW5sZXNzIGV4cGxpY2l0bHkgZW5hYmxlZFxuICAgIGlmICghZm9jdXNPbkNsaWNrKSB7XG4gICAgICAvLyBUT0RPIHRoaXMgcGllY2Ugb2YgY29kZSB3b3JrcyBvbmx5IGJlY2F1c2Ugb25Nb3VzZURvd24gaXMgaGFwcGVuaW5nIGFmdGVyIHRoZSBmb2N1cyBldmVudFxuICAgICAgLy8gVGhlcmUgaXMgbm90aGluZyBpbiBoZXJlIHRoYXQgZ3VhcmFudGVlcyB0aGUgb3JkZXIgb2YgdGhlc2UgZXZlbnRzLCBzbyBpdCBtYXkgcHJlc2VudCBhIHByb2JsZW0gaW4gdGhlIGZ1dHVyZVxuICAgICAgcmVtb3ZlRm9jdXNDbGFzcygpO1xuICAgICAgc2V0U2hvd0ZvY3VzKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZm9jdXNBbmRVcGRhdGVJbmRleCA9IChuZXh0Rm9jdXMsIHByZXZpb3VzRm9jdXMsIGZvY3VzZXNMaXN0KSA9PiB7XG4gICAgaWYgKGZvY3VzZXNMaXN0Py5pbmNsdWRlcyhwcmV2aW91c0ZvY3VzKSkge1xuICAgICAgc2V0VGFiSW5kZXgocHJldmlvdXNGb2N1cywgLTEpO1xuICAgIH1cbiAgICBzZXRUYWJJbmRleChuZXh0Rm9jdXMsIDApO1xuICAgIHNldEZvY3VzVG8obmV4dEZvY3VzKTtcbiAgfTtcblxuICBjb25zdCBnZXRFbmFibGVkS2V5cyA9IChjdXJyZW50Rm9jdXNJbmRleCwganVtcCwgbGlzdFNpemUpID0+ICh7XG4gICAgcmlnaHQ6XG4gICAgICAoY3VycmVudEZvY3VzSW5kZXggKyAxKSAlIGp1bXAgPT09IDAgfHxcbiAgICAgIGN1cnJlbnRGb2N1c0luZGV4ICsgMSA+IGxpc3RTaXplIC0gMSxcbiAgICBsZWZ0OiBjdXJyZW50Rm9jdXNJbmRleCAlIGp1bXAgPT09IDAsXG4gICAgdXA6IGN1cnJlbnRGb2N1c0luZGV4IC0ganVtcCA8IDAsXG4gICAgZG93bjpcbiAgICAgIGN1cnJlbnRGb2N1c0luZGV4ICsganVtcCA+IGxpc3RTaXplIHx8XG4gICAgICBjdXJyZW50Rm9jdXNJbmRleCArIGp1bXAgPiBsaXN0U2l6ZSAtIDEsXG4gIH0pO1xuXG4gIGNvbnN0IG9uR3JpZEtleURvd25IYW5kbGVyID0gKFxuICAgIGV2dCxcbiAgICBmb2N1c2VzLFxuICAgIGZvY3VzZXNMaXN0LFxuICAgIGN1cnJlbnRGb2N1c0luZGV4LFxuICAgIGp1bXBcbiAgKSA9PiB7XG4gICAgY29uc3QgY2hpbGRGb2N1c0lzSW5wdXQgPSBjaGlsZEZvY3VzICYmIGNoaWxkRm9jdXMubm9kZU5hbWUgPT09IFwiSU5QVVRcIjtcblxuICAgIGlmIChcbiAgICAgICFpc09uZU9mS2V5cyhldnQsIFtcbiAgICAgICAgXCJBcnJvd1VwXCIsXG4gICAgICAgIFwiQXJyb3dEb3duXCIsXG4gICAgICAgIFwiQXJyb3dMZWZ0XCIsXG4gICAgICAgIFwiQXJyb3dSaWdodFwiLFxuICAgICAgICBcIkhvbWVcIixcbiAgICAgICAgXCJFbmRcIixcbiAgICAgICAgXCJTcGFjZVwiLFxuICAgICAgICBcIkVudGVyXCIsXG4gICAgICBdKSB8fFxuICAgICAgKGNoaWxkRm9jdXNJc0lucHV0ICYmIGlzS2V5KGV2dCwgXCJFbnRlclwiKSlcbiAgICApIHtcbiAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB3ZSdsbCBkbyBzb21ldGhpbmcgd2l0aCB0aGUga2V5IHNvIHByZXZlbnQgZGVmYXVsdCBhbmQgc3RvcCBwcm9wYWdhdGlvblxuICAgIC8vIGV4Y2VwdCBmb3IgRW50ZXIgYW5kIFNwYWNlQmFyXG4gICAgaWYgKCFpc09uZU9mS2V5cyhldnQsIFtcIkVudGVyXCIsIFwiU3BhY2VcIl0pKSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBjb25zdCBibG9ja2VkS2V5cyA9IGdldEVuYWJsZWRLZXlzKFxuICAgICAgY3VycmVudEZvY3VzSW5kZXgsXG4gICAgICBqdW1wLFxuICAgICAgZm9jdXNlc0xpc3QubGVuZ3RoXG4gICAgKTtcblxuICAgIHN3aXRjaCAoZXZ0LmNvZGUpIHtcbiAgICAgIGNhc2UgXCJTcGFjZVwiOlxuICAgICAgY2FzZSBcIkVudGVyXCI6XG4gICAgICAgIGlmIChpc0Jyb3dzZXIoXCJmaXJlZm94XCIpKSB7XG4gICAgICAgICAgZXZ0LnRhcmdldC5jbGljaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV2dC5jdXJyZW50VGFyZ2V0LmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiQXJyb3dVcFwiOlxuICAgICAgICBpZiAoIWJsb2NrZWRLZXlzLnVwKSB7XG4gICAgICAgICAgZm9jdXNBbmRVcGRhdGVJbmRleChcbiAgICAgICAgICAgIGZvY3VzZXMuanVtcCB8fCBmb2N1c2VzLmxhc3QsXG4gICAgICAgICAgICBldnQuY3VycmVudCxcbiAgICAgICAgICAgIGZvY3VzZXNMaXN0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIjpcbiAgICAgICAgaWYgKCFibG9ja2VkS2V5cy5kb3duKSB7XG4gICAgICAgICAgZm9jdXNBbmRVcGRhdGVJbmRleChcbiAgICAgICAgICAgIGZvY3VzZXMuZmFsbCB8fCBmb2N1c2VzLmZpcnN0LFxuICAgICAgICAgICAgZXZ0LmN1cnJlbnQsXG4gICAgICAgICAgICBmb2N1c2VzTGlzdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiQXJyb3dMZWZ0XCI6XG4gICAgICAgIGlmICghYmxvY2tlZEtleXMubGVmdCkge1xuICAgICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoXG4gICAgICAgICAgICBmb2N1c2VzLnByZXZpb3VzIHx8IGZvY3VzZXMubGFzdCxcbiAgICAgICAgICAgIGV2dC5jdXJyZW50LFxuICAgICAgICAgICAgZm9jdXNlc0xpc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkFycm93UmlnaHRcIjpcbiAgICAgICAgaWYgKCFibG9ja2VkS2V5cy5yaWdodCkge1xuICAgICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoXG4gICAgICAgICAgICBmb2N1c2VzLm5leHQgfHwgZm9jdXNlcy5maXJzdCxcbiAgICAgICAgICAgIGV2dC5jdXJyZW50LFxuICAgICAgICAgICAgZm9jdXNlc0xpc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkhvbWVcIjpcbiAgICAgICAgZm9jdXNBbmRVcGRhdGVJbmRleChmb2N1c2VzLmZpcnN0LCBldnQuY3VycmVudCwgZm9jdXNlc0xpc3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJFbmRcIjpcbiAgICAgICAgZm9jdXNBbmRVcGRhdGVJbmRleChmb2N1c2VzLmxhc3QsIGV2dC5jdXJyZW50LCBmb2N1c2VzTGlzdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25WZXJ0aWNhbEFycmFuZ2VtZW50SGFuZGxlciA9IChldnQsIGZvY3VzZXMsIGZvY3VzZXNMaXN0KSA9PiB7XG4gICAgY29uc3QgY2hpbGRGb2N1c0lzSW5wdXQgPSBjaGlsZEZvY3VzICYmIGNoaWxkRm9jdXMubm9kZU5hbWUgPT09IFwiSU5QVVRcIjtcblxuICAgIGlmIChcbiAgICAgICFpc09uZU9mS2V5cyhldnQsIFtcbiAgICAgICAgXCJBcnJvd1VwXCIsXG4gICAgICAgIFwiQXJyb3dEb3duXCIsXG4gICAgICAgIFwiSG9tZVwiLFxuICAgICAgICBcIkVuZFwiLFxuICAgICAgICBcIlNwYWNlXCIsXG4gICAgICAgIFwiRW50ZXJcIixcbiAgICAgIF0pIHx8XG4gICAgICAoY2hpbGRGb2N1c0lzSW5wdXQgJiYgaXNLZXkoZXZ0LCBcIkVudGVyXCIpKVxuICAgICkge1xuICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHdlJ2xsIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBrZXkgc28gcHJldmVudCBkZWZhdWx0IGFuZCBzdG9wIHByb3BhZ2F0aW9uXG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgc3dpdGNoIChldnQuY29kZSkge1xuICAgICAgY2FzZSBcIlNwYWNlXCI6XG4gICAgICBjYXNlIFwiRW50ZXJcIjpcbiAgICAgICAgZXZ0LnRhcmdldC5jbGljaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJBcnJvd1VwXCI6XG4gICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoXG4gICAgICAgICAgZm9jdXNlcy5wcmV2aW91cyB8fCBmb2N1c2VzLmxhc3QsXG4gICAgICAgICAgZXZ0LmN1cnJlbnQsXG4gICAgICAgICAgZm9jdXNlc0xpc3RcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiQXJyb3dEb3duXCI6XG4gICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoXG4gICAgICAgICAgZm9jdXNlcy5uZXh0IHx8IGZvY3VzZXMuZmlyc3QsXG4gICAgICAgICAgZXZ0LmN1cnJlbnQsXG4gICAgICAgICAgZm9jdXNlc0xpc3RcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiSG9tZVwiOlxuICAgICAgICBmb2N1c0FuZFVwZGF0ZUluZGV4KGZvY3VzZXMuZmlyc3QsIGV2dC5jdXJyZW50LCBmb2N1c2VzTGlzdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkVuZFwiOlxuICAgICAgICBmb2N1c0FuZFVwZGF0ZUluZGV4KGZvY3VzZXMubGFzdCwgZXZ0LmN1cnJlbnQsIGZvY3VzZXNMaXN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfTtcblxuICBjb25zdCBvblNpbmdsZUhhbmRsZXIgPSAoZXZ0KSA9PiB7XG4gICAgY29uc3QgY2hpbGRGb2N1c0lzSW5wdXQgPSBjaGlsZEZvY3VzICYmIGNoaWxkRm9jdXMubm9kZU5hbWUgPT09IFwiSU5QVVRcIjtcblxuICAgIGlmIChcbiAgICAgICFpc09uZU9mS2V5cyhldnQsIFtcIlNwYWNlXCIsIFwiRW50ZXJcIl0pIHx8XG4gICAgICAoY2hpbGRGb2N1c0lzSW5wdXQgJiYgaXNLZXkoZXZ0LCBcIkVudGVyXCIpKVxuICAgICkge1xuICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHdlJ2xsIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBrZXkgc28gcHJldmVudCBkZWZhdWx0IGFuZCBzdG9wIHByb3BhZ2F0aW9uXG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgZXZ0LmN1cnJlbnRUYXJnZXQuY2xpY2soKTtcbiAgfTtcblxuICBjb25zdCBvbktleURvd24gPSAoZXZ0KSA9PiB7XG4gICAgaWYgKHJvb3RSZWY/LmN1cnJlbnQgPT0gbnVsbCkge1xuICAgICAgLy8gb3BlcmF0aW5nIG91dHNpZGUgb2YgYSBjb21wb3NpdGUgd2lkZ2V0XG4gICAgICAvLyBub3RoaW5nIHRvIG1hbmFnZSwganVzdCBzdHlsZSBhbmQgdHJpZ2dlciBjbGlja3NcbiAgICAgIG9uU2luZ2xlSGFuZGxlcihldnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRPRE8ga2VlcCB0aGUgc21hcnQgZGVmYXVsdCwgYnV0IGFsbG93IHRvIGV4cGxpY2l0bHkgb3ZlcnJpZGUgaWYgZGlzYWJsZWQgZWxlbWVudHMgc2hvdWxkIGJlIGZvY3VzYWJsZVxuICAgIGNvbnN0IGlzRGlzYWJsZWRGb2N1c2FibGUgPSBzdHJhdGVneSA9PT0gXCJtZW51XCI7XG4gICAgY29uc3QgZm9jdXNlc0xpc3QgPSBnZXRGb2N1c2VzKCkuZmlsdGVyKFxuICAgICAgKGVsKSA9PlxuICAgICAgICBpc0Rpc2FibGVkRm9jdXNhYmxlIHx8XG4gICAgICAgICFlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3Nlcz8uZGlzYWJsZWQgYXMgc3RyaW5nKVxuICAgICk7XG5cbiAgICBjb25zdCBjdXJyZW50Rm9jdXMgPSBmb2N1c2VzTGlzdC5pbmRleE9mKGV2dC5jdXJyZW50VGFyZ2V0KTtcblxuICAgIGNvbnN0IGZvY3VzZXMgPSB7XG4gICAgICBmaXJzdDogZm9jdXNlc0xpc3RbMF0sXG4gICAgICBsYXN0OiBmb2N1c2VzTGlzdFtmb2N1c2VzTGlzdC5sZW5ndGggLSAxXSxcbiAgICAgIHByZXZpb3VzOiBmb2N1c2VzTGlzdFtjdXJyZW50Rm9jdXMgLSAxXSxcbiAgICAgIG5leHQ6IGZvY3VzZXNMaXN0W2N1cnJlbnRGb2N1cyArIDFdLFxuICAgICAgZmFsbDogZm9jdXNlc0xpc3RbY3VycmVudEZvY3VzICsgbmF2aWdhdGlvbkp1bXBdLFxuICAgICAganVtcDogZm9jdXNlc0xpc3RbY3VycmVudEZvY3VzIC0gbmF2aWdhdGlvbkp1bXBdLFxuICAgIH07XG5cbiAgICBpZiAoc3RyYXRlZ3kgPT09IFwiZ3JpZFwiKSB7XG4gICAgICBvbkdyaWRLZXlEb3duSGFuZGxlcihcbiAgICAgICAgZXZ0LFxuICAgICAgICBmb2N1c2VzLFxuICAgICAgICBmb2N1c2VzTGlzdCxcbiAgICAgICAgY3VycmVudEZvY3VzLFxuICAgICAgICBuYXZpZ2F0aW9uSnVtcFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUT0RPIGFkZCBwcm9wZXJ0eSBmb3Igc3BlY2lmeWluZyB0aGUgY29tcG9zaXRlIHdpZGdldCBvcmllbnRhdGlvblxuICAgIC8vIFRPRE8gaW1wbGVtZW50IGhhbmRsZXIgZm9yIGhvcml6b250YWwgb3JpZW50YXRpb25cbiAgICBvblZlcnRpY2FsQXJyYW5nZW1lbnRIYW5kbGVyKGV2dCwgZm9jdXNlcywgZm9jdXNlc0xpc3QpO1xuICB9O1xuXG4gIGNvbnN0IG9uS2V5VXAgPSAoZXZ0KSA9PiB7XG4gICAgaWYgKGlzQnJvd3NlcihcImZpcmVmb3hcIikpIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9O1xuXG4gIGlmIChkaXNhYmxlZCkgcmV0dXJuIGNoaWxkcmVuO1xuXG4gIGNvbnN0IGZvY3VzV3JhcHBlciA9IChjaGlsZHJlblRvV3JhcCkgPT4gKFxuICAgIDxTdHlsZWRGb2N1c1dyYXBwZXJcbiAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgY2xhc3Nlcz8uZXh0ZXJuYWxSZWZlcmVuY2UsXG4gICAgICAgIGZvY3VzQ2xhc3Nlcy5leHRlcm5hbFJlZmVyZW5jZVxuICAgICAgKX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW5Ub1dyYXB9XG4gICAgICB7c2hvd0ZvY3VzICYmIChcbiAgICAgICAgPFN0eWxlZEZhbHNlRm9jdXNcbiAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goY2xhc3Nlcz8uZmFsc2VGb2N1cywgZm9jdXNDbGFzc2VzLmZhbHNlRm9jdXMpfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L1N0eWxlZEZvY3VzV3JhcHBlcj5cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxDb25kaXRpb25hbFdyYXBwZXIgY29uZGl0aW9uPXt1c2VGYWxzZUZvY3VzfSB3cmFwcGVyPXtmb2N1c1dyYXBwZXJ9PlxuICAgICAgPEdsb2JhbCBzdHlsZXM9e2ZvY3VzU3R5bGVzfSAvPlxuICAgICAge1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICBjbGFzc05hbWU6IGNsc3goXG4gICAgICAgICAgY2hpbGRyZW4ucHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGZvY3VzQ2xhc3Nlcy5yb290LFxuICAgICAgICAgIGNsYXNzZXM/LnJvb3QsXG4gICAgICAgICAgZmlsdGVyQ2xhc3MsXG4gICAgICAgICAgc2VsZWN0ZWQgJiYgY2xzeChmb2N1c0NsYXNzZXMuc2VsZWN0ZWQsIGNsYXNzZXM/LnNlbGVjdGVkKSxcbiAgICAgICAgICBkaXNhYmxlZENsYXNzICYmIGNsc3goZm9jdXNDbGFzc2VzLmRpc2FibGVkLCBjbGFzc2VzPy5kaXNhYmxlZCksXG4gICAgICAgICAgZm9jdXNEaXNhYmxlZCAmJlxuICAgICAgICAgICAgY2xzeChmb2N1c0NsYXNzZXMuZm9jdXNEaXNhYmxlZCwgY2xhc3Nlcz8uZm9jdXNEaXNhYmxlZClcbiAgICAgICAgKSxcbiAgICAgICAgcmVmOiBjb25maWcsXG4gICAgICAgIG9uRm9jdXMsXG4gICAgICAgIG9uQmx1cixcbiAgICAgICAgb25Nb3VzZURvd24sXG4gICAgICAgIG9uS2V5RG93bixcbiAgICAgICAgb25LZXlVcCxcbiAgICAgICAgc2VsZWN0ZWQsXG4gICAgICB9KX1cbiAgICA8L0NvbmRpdGlvbmFsV3JhcHBlcj5cbiAgKTtcbn07XG4iXX0= */",
22
22
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
23
23
  };
24
24
  const HvFocus = ({
@@ -162,103 +162,81 @@ const HvFocus = ({
162
162
  down: currentFocusIndex + jump > listSize || currentFocusIndex + jump > listSize - 1
163
163
  });
164
164
  const onGridKeyDownHandler = (evt, focuses, focusesList, currentFocusIndex, jump) => {
165
- const {
166
- ArrowUp,
167
- ArrowDown,
168
- Home,
169
- End,
170
- ArrowLeft,
171
- ArrowRight,
172
- Enter,
173
- SpaceBar
174
- } = keyboardCodes;
175
165
  const childFocusIsInput = childFocus && childFocus.nodeName === "INPUT";
176
- if (!isOneOfKeys(evt, [ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Home, End, SpaceBar, Enter]) || childFocusIsInput && isKey(evt, Enter)) {
166
+ if (!isOneOfKeys(evt, ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End", "Space", "Enter"]) || childFocusIsInput && isKey(evt, "Enter")) {
177
167
  return;
178
168
  }
179
- if (!isOneOfKeys(evt, [Enter, SpaceBar])) {
169
+ if (!isOneOfKeys(evt, ["Enter", "Space"])) {
180
170
  evt.preventDefault();
181
171
  evt.stopPropagation();
182
172
  }
183
173
  const blockedKeys = getEnabledKeys(currentFocusIndex, jump, focusesList.length);
184
- switch (evt.keyCode) {
185
- case SpaceBar:
186
- case Enter:
174
+ switch (evt.code) {
175
+ case "Space":
176
+ case "Enter":
187
177
  if (isBrowser("firefox")) {
188
178
  evt.target.click();
189
179
  } else {
190
180
  evt.currentTarget.click();
191
181
  }
192
182
  break;
193
- case ArrowUp:
183
+ case "ArrowUp":
194
184
  if (!blockedKeys.up) {
195
185
  focusAndUpdateIndex(focuses.jump || focuses.last, evt.current, focusesList);
196
186
  }
197
187
  break;
198
- case ArrowDown:
188
+ case "ArrowDown":
199
189
  if (!blockedKeys.down) {
200
190
  focusAndUpdateIndex(focuses.fall || focuses.first, evt.current, focusesList);
201
191
  }
202
192
  break;
203
- case ArrowLeft:
193
+ case "ArrowLeft":
204
194
  if (!blockedKeys.left) {
205
195
  focusAndUpdateIndex(focuses.previous || focuses.last, evt.current, focusesList);
206
196
  }
207
197
  break;
208
- case ArrowRight:
198
+ case "ArrowRight":
209
199
  if (!blockedKeys.right) {
210
200
  focusAndUpdateIndex(focuses.next || focuses.first, evt.current, focusesList);
211
201
  }
212
202
  break;
213
- case Home:
203
+ case "Home":
214
204
  focusAndUpdateIndex(focuses.first, evt.current, focusesList);
215
205
  break;
216
- case End:
206
+ case "End":
217
207
  focusAndUpdateIndex(focuses.last, evt.current, focusesList);
218
208
  break;
219
209
  }
220
210
  };
221
211
  const onVerticalArrangementHandler = (evt, focuses, focusesList) => {
222
- const {
223
- ArrowUp,
224
- ArrowDown,
225
- Home,
226
- End,
227
- Enter,
228
- SpaceBar
229
- } = keyboardCodes;
230
212
  const childFocusIsInput = childFocus && childFocus.nodeName === "INPUT";
231
- if (!isOneOfKeys(evt, [ArrowUp, ArrowDown, Home, End, SpaceBar, Enter]) || childFocusIsInput && isKey(evt, Enter)) {
213
+ if (!isOneOfKeys(evt, ["ArrowUp", "ArrowDown", "Home", "End", "Space", "Enter"]) || childFocusIsInput && isKey(evt, "Enter")) {
232
214
  return;
233
215
  }
234
216
  evt.preventDefault();
235
217
  evt.stopPropagation();
236
- switch (evt.keyCode) {
237
- case SpaceBar:
238
- case Enter:
218
+ switch (evt.code) {
219
+ case "Space":
220
+ case "Enter":
239
221
  evt.target.click();
240
222
  break;
241
- case ArrowUp:
223
+ case "ArrowUp":
242
224
  focusAndUpdateIndex(focuses.previous || focuses.last, evt.current, focusesList);
243
225
  break;
244
- case ArrowDown:
226
+ case "ArrowDown":
245
227
  focusAndUpdateIndex(focuses.next || focuses.first, evt.current, focusesList);
246
228
  break;
247
- case Home:
229
+ case "Home":
248
230
  focusAndUpdateIndex(focuses.first, evt.current, focusesList);
249
231
  break;
250
- case End:
232
+ case "End":
251
233
  focusAndUpdateIndex(focuses.last, evt.current, focusesList);
252
234
  break;
253
235
  }
254
236
  };
255
237
  const onSingleHandler = (evt) => {
256
- const {
257
- Enter,
258
- SpaceBar
259
- } = keyboardCodes;
260
238
  const childFocusIsInput = childFocus && childFocus.nodeName === "INPUT";
261
- if (!isOneOfKeys(evt, [SpaceBar, Enter]) || childFocusIsInput && isKey(evt, Enter)) {
239
+ if (!isOneOfKeys(evt, ["Space", "Enter"]) || childFocusIsInput && isKey(evt, "Enter")) {
262
240
  return;
263
241
  }
264
242
  evt.preventDefault();
@@ -1 +1 @@
1
- {"version":3,"file":"Focus.js","sources":["../../../../src/components/Focus/Focus.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport isNil from \"lodash/isNil\";\nimport React, { RefObject, useState } from \"react\";\nimport { HvBaseProps } from \"@core/types\";\nimport { keyboardCodes, isBrowser } from \"@core/utils\";\nimport ConditionalWrapper from \"@core/utils/ConditionalWrapper\";\nimport { css, Global } from \"@emotion/react\";\nimport { StyledFocusWrapper, StyledFalseFocus } from \"./Focus.styles\";\nimport { getFocusableChildren, isKey, isOneOfKeys, setFocusTo } from \"./utils\";\nimport focusClasses, { HvFocusClasses } from \"./focusClasses\";\n\nconst focusStyles = css`\n .HvFocus-focused {\n outline-color: #52a8ec;\n outline-style: solid;\n outline-width: 0px;\n outline-offset: -1px;\n box-shadow: 0 0 0 1px #52a8ec, 0 0 0 4px rgba(29, 155, 209, 0.3);\n\n @media (-webkit-min-device-pixel-ratio: 0) {\n outline-color: #52a8ec;\n outline-style: solid;\n outline-width: 0px;\n outline-offset: -1px;\n box-shadow: 0 0 0 1px #52a8ec, 0 0 0 4px rgba(29, 155, 209, 0.3);\n }\n }\n\n .HvFocus-focusDisabled {\n outline: none;\n box-shadow: none;\n }\n .HvFocus-focusDisabled *:focus {\n outline: none;\n box-shadow: none;\n }\n .HvFocus-focusDisabled * {\n outline: none !important;\n box-shadow: none !important;\n }\n`;\n\nexport type HvFocusStrategies = \"listbox\" | \"menu\" | \"card\" | \"grid\";\n\nexport interface HvFocusProps extends HvBaseProps<HTMLElement, \"children\"> {\n children: React.ReactElement;\n /** Extra configuration for the child element. */\n configuration?: {\n tabIndex?: number;\n };\n /** Indicates that the disabled class should be applied. */\n disabledClass?: boolean;\n /** Whether the focus is selected. */\n selected?: boolean;\n /** Whether the focus is disabled. */\n disabled?: boolean;\n /** The reference to the root element to hold all Focus' context. */\n rootRef?: RefObject<HTMLElement>;\n /** Show focus when click element. v */\n focusOnClick?: boolean;\n /** Show focus when click element. v */\n focusDisabled?: boolean;\n /** Focus and navigation strategy to be used. v */\n strategy?: HvFocusStrategies;\n /** Uses an absolute positioned div as a focus. v */\n useFalseFocus?: boolean;\n /** Narrows the results of the focus to only theses class v */\n filterClass?: string;\n /** How much the navigation will skip when using the arrows. v */\n navigationJump?: number;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvFocusClasses;\n}\n\nexport const HvFocus = ({\n classes,\n children,\n configuration = {},\n disabledClass = false,\n selected = false,\n disabled = false,\n rootRef = undefined,\n focusOnClick = false,\n focusDisabled = true,\n strategy = \"listbox\",\n useFalseFocus = false,\n filterClass,\n navigationJump = 4,\n}: HvFocusProps) => {\n const [showFocus, setShowFocus] = useState<boolean>(false);\n const [childFocus, setChildFocus] = useState<any>();\n const [hasRunConfig, setHasRunConfig] = useState(false);\n\n const getFocuses = () => {\n const focuses = rootRef?.current\n ? Array.from(\n rootRef.current.getElementsByClassName(\n filterClass || focusClasses.root || classes?.root || \"root\"\n )\n )\n : [];\n return focuses;\n };\n\n const setTabIndex = (el, tabIndex = 0) => {\n const elChildFocus = getFocusableChildren(el)[0];\n if (elChildFocus) {\n el.tabIndex = -1;\n elChildFocus.tabIndex = tabIndex;\n } else {\n el.tabIndex = tabIndex;\n }\n };\n\n const setSelectedTabIndex = () => {\n const focuses = getFocuses();\n const firstSelected = focuses.find((focus) =>\n focus.classList.contains(\n focusClasses.selected || classes?.selected || \"selected\"\n )\n );\n\n if (!firstSelected) return;\n focuses.forEach((focus) => setTabIndex(focus, -1));\n setTabIndex(firstSelected, 0);\n };\n\n const clearTabSiblings = (el) => {\n getFocuses().forEach((focus) => setTabIndex(focus, -1));\n setTabIndex(el, 0);\n };\n\n const onFocusStrategy = (evt) => {\n if (strategy === \"listbox\") {\n clearTabSiblings(evt.currentTarget);\n }\n };\n\n const onBlurStrategy = () => {\n if (\n strategy === \"listbox\" &&\n rootRef &&\n rootRef.current &&\n !rootRef.current.contains(document.activeElement)\n ) {\n setTimeout(() => {\n setSelectedTabIndex();\n }, 10);\n }\n };\n\n const config = (el) => {\n const { tabIndex } = configuration;\n if (!el || hasRunConfig) return;\n if (strategy === \"card\") {\n setChildFocus(children);\n return;\n }\n\n if (strategy === \"grid\") {\n return;\n }\n\n const focusableChildren = getFocusableChildren(el);\n if (focusableChildren.length) {\n focusableChildren.forEach((child) => setTabIndex(child, -1));\n setChildFocus(focusableChildren[0]);\n }\n\n if (!isNil(tabIndex)) setTabIndex(el, tabIndex);\n setHasRunConfig(true);\n };\n\n const addFocusClass = (evt) => {\n if (!useFalseFocus) {\n evt.currentTarget.classList.add(focusClasses.focused);\n if (classes?.focused) {\n evt.currentTarget.classList.add(classes.focused);\n }\n // add global class HvIsFocused as a marker\n // not to be styled directly, only as helper in specific css queries\n evt.currentTarget.classList.add(\"HvIsFocused\");\n classes?.focus\n ?.split(\" \")\n .forEach((c) => evt.currentTarget.classList.add(c));\n }\n };\n\n const removeFocusClass = () => {\n if (!useFalseFocus) {\n getFocuses().forEach((element) => {\n if (focusClasses.focused) {\n element.classList.remove(focusClasses.focused);\n }\n if (classes?.focused) {\n element.classList.remove(classes.focused);\n }\n // remove the global class HvIsFocused\n element.classList.remove(\"HvIsFocused\");\n classes?.focus?.split(\" \").forEach((c) => element.classList.remove(c));\n });\n }\n };\n\n const onFocus = (evt) => {\n addFocusClass(evt);\n setShowFocus(true);\n // give focus to child element if any focusable\n\n if (childFocus && childFocus.focus) childFocus.focus();\n onFocusStrategy(evt);\n };\n\n const onBlur = () => {\n setShowFocus(false);\n removeFocusClass();\n onBlurStrategy();\n };\n\n const onMouseDown = (evt) => {\n const hasCard = !!evt.currentTarget?.querySelector(\".HvIsCardGridElement\");\n if (strategy === \"grid\" && hasCard) return;\n\n setFocusTo(evt.currentTarget);\n setTabIndex(evt.currentTarget, 0);\n // remove focus outline unless explicitly enabled\n if (!focusOnClick) {\n // TODO this piece of code works only because onMouseDown is happening after the focus event\n // There is nothing in here that guarantees the order of these events, so it may present a problem in the future\n removeFocusClass();\n setShowFocus(false);\n }\n };\n\n const focusAndUpdateIndex = (nextFocus, previousFocus, focusesList) => {\n if (focusesList?.includes(previousFocus)) {\n setTabIndex(previousFocus, -1);\n }\n setTabIndex(nextFocus, 0);\n setFocusTo(nextFocus);\n };\n\n const getEnabledKeys = (currentFocusIndex, jump, listSize) => ({\n right:\n (currentFocusIndex + 1) % jump === 0 ||\n currentFocusIndex + 1 > listSize - 1,\n left: currentFocusIndex % jump === 0,\n up: currentFocusIndex - jump < 0,\n down:\n currentFocusIndex + jump > listSize ||\n currentFocusIndex + jump > listSize - 1,\n });\n\n const onGridKeyDownHandler = (\n evt,\n focuses,\n focusesList,\n currentFocusIndex,\n jump\n ) => {\n const {\n ArrowUp,\n ArrowDown,\n Home,\n End,\n ArrowLeft,\n ArrowRight,\n Enter,\n SpaceBar,\n } = keyboardCodes;\n\n const childFocusIsInput = childFocus && childFocus.nodeName === \"INPUT\";\n\n if (\n !isOneOfKeys(evt, [\n ArrowUp,\n ArrowDown,\n ArrowLeft,\n ArrowRight,\n Home,\n End,\n SpaceBar,\n Enter,\n ]) ||\n (childFocusIsInput && isKey(evt, Enter))\n ) {\n // nothing to do\n return;\n }\n\n // we'll do something with the key so prevent default and stop propagation\n // except for Enter and SpaceBar\n if (!isOneOfKeys(evt, [Enter, SpaceBar])) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n const blockedKeys = getEnabledKeys(\n currentFocusIndex,\n jump,\n focusesList.length\n );\n\n switch (evt.keyCode) {\n case SpaceBar:\n case Enter:\n if (isBrowser(\"firefox\")) {\n evt.target.click();\n } else {\n evt.currentTarget.click();\n }\n break;\n case ArrowUp:\n if (!blockedKeys.up) {\n focusAndUpdateIndex(\n focuses.jump || focuses.last,\n evt.current,\n focusesList\n );\n }\n break;\n case ArrowDown:\n if (!blockedKeys.down) {\n focusAndUpdateIndex(\n focuses.fall || focuses.first,\n evt.current,\n focusesList\n );\n }\n break;\n case ArrowLeft:\n if (!blockedKeys.left) {\n focusAndUpdateIndex(\n focuses.previous || focuses.last,\n evt.current,\n focusesList\n );\n }\n break;\n case ArrowRight:\n if (!blockedKeys.right) {\n focusAndUpdateIndex(\n focuses.next || focuses.first,\n evt.current,\n focusesList\n );\n }\n break;\n case Home:\n focusAndUpdateIndex(focuses.first, evt.current, focusesList);\n break;\n case End:\n focusAndUpdateIndex(focuses.last, evt.current, focusesList);\n break;\n default:\n }\n };\n\n const onVerticalArrangementHandler = (evt, focuses, focusesList) => {\n const { ArrowUp, ArrowDown, Home, End, Enter, SpaceBar } = keyboardCodes;\n const childFocusIsInput = childFocus && childFocus.nodeName === \"INPUT\";\n\n if (\n !isOneOfKeys(evt, [ArrowUp, ArrowDown, Home, End, SpaceBar, Enter]) ||\n (childFocusIsInput && isKey(evt, Enter))\n ) {\n // nothing to do\n return;\n }\n\n // we'll do something with the key so prevent default and stop propagation\n evt.preventDefault();\n evt.stopPropagation();\n\n switch (evt.keyCode) {\n case SpaceBar:\n case Enter:\n evt.target.click();\n break;\n case ArrowUp:\n focusAndUpdateIndex(\n focuses.previous || focuses.last,\n evt.current,\n focusesList\n );\n break;\n case ArrowDown:\n focusAndUpdateIndex(\n focuses.next || focuses.first,\n evt.current,\n focusesList\n );\n break;\n case Home:\n focusAndUpdateIndex(focuses.first, evt.current, focusesList);\n break;\n case End:\n focusAndUpdateIndex(focuses.last, evt.current, focusesList);\n break;\n default:\n }\n };\n\n const onSingleHandler = (evt) => {\n const { Enter, SpaceBar } = keyboardCodes;\n const childFocusIsInput = childFocus && childFocus.nodeName === \"INPUT\";\n\n if (\n !isOneOfKeys(evt, [SpaceBar, Enter]) ||\n (childFocusIsInput && isKey(evt, Enter))\n ) {\n // nothing to do\n return;\n }\n\n // we'll do something with the key so prevent default and stop propagation\n evt.preventDefault();\n evt.stopPropagation();\n\n evt.currentTarget.click();\n };\n\n const onKeyDown = (evt) => {\n if (rootRef?.current == null) {\n // operating outside of a composite widget\n // nothing to manage, just style and trigger clicks\n onSingleHandler(evt);\n return;\n }\n\n // TODO keep the smart default, but allow to explicitly override if disabled elements should be focusable\n const isDisabledFocusable = strategy === \"menu\";\n const focusesList = getFocuses().filter(\n (el) =>\n isDisabledFocusable ||\n !el.classList.contains(classes?.disabled as string)\n );\n\n const currentFocus = focusesList.indexOf(evt.currentTarget);\n\n const focuses = {\n first: focusesList[0],\n last: focusesList[focusesList.length - 1],\n previous: focusesList[currentFocus - 1],\n next: focusesList[currentFocus + 1],\n fall: focusesList[currentFocus + navigationJump],\n jump: focusesList[currentFocus - navigationJump],\n };\n\n if (strategy === \"grid\") {\n onGridKeyDownHandler(\n evt,\n focuses,\n focusesList,\n currentFocus,\n navigationJump\n );\n return;\n }\n\n // TODO add property for specifying the composite widget orientation\n // TODO implement handler for horizontal orientation\n onVerticalArrangementHandler(evt, focuses, focusesList);\n };\n\n const onKeyUp = (evt) => {\n if (isBrowser(\"firefox\")) evt.preventDefault();\n };\n\n if (disabled) return children;\n\n const focusWrapper = (childrenToWrap) => (\n <StyledFocusWrapper\n className={clsx(\n classes?.externalReference,\n focusClasses.externalReference\n )}\n >\n {childrenToWrap}\n {showFocus && (\n <StyledFalseFocus\n className={clsx(classes?.falseFocus, focusClasses.falseFocus)}\n />\n )}\n </StyledFocusWrapper>\n );\n\n return (\n <ConditionalWrapper condition={useFalseFocus} wrapper={focusWrapper}>\n <Global styles={focusStyles} />\n {React.cloneElement(children, {\n className: clsx(\n children.props.className,\n focusClasses.root,\n classes?.root,\n filterClass,\n selected && clsx(focusClasses.selected, classes?.selected),\n disabledClass && clsx(focusClasses.disabled, classes?.disabled),\n focusDisabled &&\n clsx(focusClasses.focusDisabled, classes?.focusDisabled)\n ),\n ref: config,\n onFocus,\n onBlur,\n onMouseDown,\n onKeyDown,\n onKeyUp,\n selected,\n })}\n </ConditionalWrapper>\n );\n};\n"],"names":["focusStyles","process","env","NODE_ENV","name","styles","map","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","HvFocus","classes","children","configuration","disabledClass","selected","disabled","rootRef","undefined","focusOnClick","focusDisabled","strategy","useFalseFocus","filterClass","navigationJump","showFocus","setShowFocus","useState","childFocus","setChildFocus","hasRunConfig","setHasRunConfig","getFocuses","focuses","current","Array","from","getElementsByClassName","focusClasses","root","setTabIndex","el","tabIndex","elChildFocus","getFocusableChildren","setSelectedTabIndex","firstSelected","find","focus","classList","contains","forEach","clearTabSiblings","onFocusStrategy","evt","currentTarget","onBlurStrategy","document","activeElement","setTimeout","config","focusableChildren","length","child","isNil","addFocusClass","add","focused","split","c","removeFocusClass","element","remove","onFocus","onBlur","onMouseDown","hasCard","querySelector","setFocusTo","focusAndUpdateIndex","nextFocus","previousFocus","focusesList","includes","getEnabledKeys","currentFocusIndex","jump","listSize","right","left","up","down","onGridKeyDownHandler","ArrowUp","ArrowDown","Home","End","ArrowLeft","ArrowRight","Enter","SpaceBar","keyboardCodes","childFocusIsInput","nodeName","isOneOfKeys","isKey","preventDefault","stopPropagation","blockedKeys","keyCode","isBrowser","target","click","last","fall","first","previous","next","onVerticalArrangementHandler","onSingleHandler","onKeyDown","isDisabledFocusable","filter","currentFocus","indexOf","onKeyUp","focusWrapper","childrenToWrap","_jsxs","StyledFocusWrapper","className","clsx","externalReference","StyledFalseFocus","falseFocus","ConditionalWrapper","condition","wrapper","_jsx","Global","React","cloneElement","props","ref"],"mappings":"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"}
1
+ {"version":3,"file":"Focus.js","sources":["../../../../src/components/Focus/Focus.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport isNil from \"lodash/isNil\";\nimport React, { RefObject, useState } from \"react\";\nimport { HvBaseProps } from \"@core/types\";\nimport { isBrowser, isKey, isOneOfKeys } from \"@core/utils\";\nimport ConditionalWrapper from \"@core/utils/ConditionalWrapper\";\nimport { css, Global } from \"@emotion/react\";\nimport { StyledFocusWrapper, StyledFalseFocus } from \"./Focus.styles\";\nimport { getFocusableChildren, setFocusTo } from \"./utils\";\nimport focusClasses, { HvFocusClasses } from \"./focusClasses\";\n\nconst focusStyles = css`\n .HvFocus-focused {\n outline-color: #52a8ec;\n outline-style: solid;\n outline-width: 0px;\n outline-offset: -1px;\n box-shadow: 0 0 0 1px #52a8ec, 0 0 0 4px rgba(29, 155, 209, 0.3);\n\n @media (-webkit-min-device-pixel-ratio: 0) {\n outline-color: #52a8ec;\n outline-style: solid;\n outline-width: 0px;\n outline-offset: -1px;\n box-shadow: 0 0 0 1px #52a8ec, 0 0 0 4px rgba(29, 155, 209, 0.3);\n }\n }\n\n .HvFocus-focusDisabled {\n outline: none;\n box-shadow: none;\n }\n .HvFocus-focusDisabled *:focus {\n outline: none;\n box-shadow: none;\n }\n .HvFocus-focusDisabled * {\n outline: none !important;\n box-shadow: none !important;\n }\n`;\n\nexport type HvFocusStrategies = \"listbox\" | \"menu\" | \"card\" | \"grid\";\n\nexport interface HvFocusProps extends HvBaseProps<HTMLElement, \"children\"> {\n children: React.ReactElement;\n /** Extra configuration for the child element. */\n configuration?: {\n tabIndex?: number;\n };\n /** Indicates that the disabled class should be applied. */\n disabledClass?: boolean;\n /** Whether the focus is selected. */\n selected?: boolean;\n /** Whether the focus is disabled. */\n disabled?: boolean;\n /** The reference to the root element to hold all Focus' context. */\n rootRef?: RefObject<HTMLElement>;\n /** Show focus when click element. v */\n focusOnClick?: boolean;\n /** Show focus when click element. v */\n focusDisabled?: boolean;\n /** Focus and navigation strategy to be used. v */\n strategy?: HvFocusStrategies;\n /** Uses an absolute positioned div as a focus. v */\n useFalseFocus?: boolean;\n /** Narrows the results of the focus to only theses class v */\n filterClass?: string;\n /** How much the navigation will skip when using the arrows. v */\n navigationJump?: number;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvFocusClasses;\n}\n\nexport const HvFocus = ({\n classes,\n children,\n configuration = {},\n disabledClass = false,\n selected = false,\n disabled = false,\n rootRef = undefined,\n focusOnClick = false,\n focusDisabled = true,\n strategy = \"listbox\",\n useFalseFocus = false,\n filterClass,\n navigationJump = 4,\n}: HvFocusProps) => {\n const [showFocus, setShowFocus] = useState<boolean>(false);\n const [childFocus, setChildFocus] = useState<any>();\n const [hasRunConfig, setHasRunConfig] = useState(false);\n\n const getFocuses = () => {\n const focuses = rootRef?.current\n ? Array.from(\n rootRef.current.getElementsByClassName(\n filterClass || focusClasses.root || classes?.root || \"root\"\n )\n )\n : [];\n return focuses;\n };\n\n const setTabIndex = (el, tabIndex = 0) => {\n const elChildFocus = getFocusableChildren(el)[0];\n if (elChildFocus) {\n el.tabIndex = -1;\n elChildFocus.tabIndex = tabIndex;\n } else {\n el.tabIndex = tabIndex;\n }\n };\n\n const setSelectedTabIndex = () => {\n const focuses = getFocuses();\n const firstSelected = focuses.find((focus) =>\n focus.classList.contains(\n focusClasses.selected || classes?.selected || \"selected\"\n )\n );\n\n if (!firstSelected) return;\n focuses.forEach((focus) => setTabIndex(focus, -1));\n setTabIndex(firstSelected, 0);\n };\n\n const clearTabSiblings = (el) => {\n getFocuses().forEach((focus) => setTabIndex(focus, -1));\n setTabIndex(el, 0);\n };\n\n const onFocusStrategy = (evt) => {\n if (strategy === \"listbox\") {\n clearTabSiblings(evt.currentTarget);\n }\n };\n\n const onBlurStrategy = () => {\n if (\n strategy === \"listbox\" &&\n rootRef &&\n rootRef.current &&\n !rootRef.current.contains(document.activeElement)\n ) {\n setTimeout(() => {\n setSelectedTabIndex();\n }, 10);\n }\n };\n\n const config = (el) => {\n const { tabIndex } = configuration;\n if (!el || hasRunConfig) return;\n if (strategy === \"card\") {\n setChildFocus(children);\n return;\n }\n\n if (strategy === \"grid\") {\n return;\n }\n\n const focusableChildren = getFocusableChildren(el);\n if (focusableChildren.length) {\n focusableChildren.forEach((child) => setTabIndex(child, -1));\n setChildFocus(focusableChildren[0]);\n }\n\n if (!isNil(tabIndex)) setTabIndex(el, tabIndex);\n setHasRunConfig(true);\n };\n\n const addFocusClass = (evt) => {\n if (!useFalseFocus) {\n evt.currentTarget.classList.add(focusClasses.focused);\n if (classes?.focused) {\n evt.currentTarget.classList.add(classes.focused);\n }\n // add global class HvIsFocused as a marker\n // not to be styled directly, only as helper in specific css queries\n evt.currentTarget.classList.add(\"HvIsFocused\");\n classes?.focus\n ?.split(\" \")\n .forEach((c) => evt.currentTarget.classList.add(c));\n }\n };\n\n const removeFocusClass = () => {\n if (!useFalseFocus) {\n getFocuses().forEach((element) => {\n if (focusClasses.focused) {\n element.classList.remove(focusClasses.focused);\n }\n if (classes?.focused) {\n element.classList.remove(classes.focused);\n }\n // remove the global class HvIsFocused\n element.classList.remove(\"HvIsFocused\");\n classes?.focus?.split(\" \").forEach((c) => element.classList.remove(c));\n });\n }\n };\n\n const onFocus = (evt) => {\n addFocusClass(evt);\n setShowFocus(true);\n // give focus to child element if any focusable\n\n if (childFocus && childFocus.focus) childFocus.focus();\n onFocusStrategy(evt);\n };\n\n const onBlur = () => {\n setShowFocus(false);\n removeFocusClass();\n onBlurStrategy();\n };\n\n const onMouseDown = (evt) => {\n const hasCard = !!evt.currentTarget?.querySelector(\".HvIsCardGridElement\");\n if (strategy === \"grid\" && hasCard) return;\n\n setFocusTo(evt.currentTarget);\n setTabIndex(evt.currentTarget, 0);\n // remove focus outline unless explicitly enabled\n if (!focusOnClick) {\n // TODO this piece of code works only because onMouseDown is happening after the focus event\n // There is nothing in here that guarantees the order of these events, so it may present a problem in the future\n removeFocusClass();\n setShowFocus(false);\n }\n };\n\n const focusAndUpdateIndex = (nextFocus, previousFocus, focusesList) => {\n if (focusesList?.includes(previousFocus)) {\n setTabIndex(previousFocus, -1);\n }\n setTabIndex(nextFocus, 0);\n setFocusTo(nextFocus);\n };\n\n const getEnabledKeys = (currentFocusIndex, jump, listSize) => ({\n right:\n (currentFocusIndex + 1) % jump === 0 ||\n currentFocusIndex + 1 > listSize - 1,\n left: currentFocusIndex % jump === 0,\n up: currentFocusIndex - jump < 0,\n down:\n currentFocusIndex + jump > listSize ||\n currentFocusIndex + jump > listSize - 1,\n });\n\n const onGridKeyDownHandler = (\n evt,\n focuses,\n focusesList,\n currentFocusIndex,\n jump\n ) => {\n const childFocusIsInput = childFocus && childFocus.nodeName === \"INPUT\";\n\n if (\n !isOneOfKeys(evt, [\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Home\",\n \"End\",\n \"Space\",\n \"Enter\",\n ]) ||\n (childFocusIsInput && isKey(evt, \"Enter\"))\n ) {\n // nothing to do\n return;\n }\n\n // we'll do something with the key so prevent default and stop propagation\n // except for Enter and SpaceBar\n if (!isOneOfKeys(evt, [\"Enter\", \"Space\"])) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n const blockedKeys = getEnabledKeys(\n currentFocusIndex,\n jump,\n focusesList.length\n );\n\n switch (evt.code) {\n case \"Space\":\n case \"Enter\":\n if (isBrowser(\"firefox\")) {\n evt.target.click();\n } else {\n evt.currentTarget.click();\n }\n break;\n case \"ArrowUp\":\n if (!blockedKeys.up) {\n focusAndUpdateIndex(\n focuses.jump || focuses.last,\n evt.current,\n focusesList\n );\n }\n break;\n case \"ArrowDown\":\n if (!blockedKeys.down) {\n focusAndUpdateIndex(\n focuses.fall || focuses.first,\n evt.current,\n focusesList\n );\n }\n break;\n case \"ArrowLeft\":\n if (!blockedKeys.left) {\n focusAndUpdateIndex(\n focuses.previous || focuses.last,\n evt.current,\n focusesList\n );\n }\n break;\n case \"ArrowRight\":\n if (!blockedKeys.right) {\n focusAndUpdateIndex(\n focuses.next || focuses.first,\n evt.current,\n focusesList\n );\n }\n break;\n case \"Home\":\n focusAndUpdateIndex(focuses.first, evt.current, focusesList);\n break;\n case \"End\":\n focusAndUpdateIndex(focuses.last, evt.current, focusesList);\n break;\n default:\n }\n };\n\n const onVerticalArrangementHandler = (evt, focuses, focusesList) => {\n const childFocusIsInput = childFocus && childFocus.nodeName === \"INPUT\";\n\n if (\n !isOneOfKeys(evt, [\n \"ArrowUp\",\n \"ArrowDown\",\n \"Home\",\n \"End\",\n \"Space\",\n \"Enter\",\n ]) ||\n (childFocusIsInput && isKey(evt, \"Enter\"))\n ) {\n // nothing to do\n return;\n }\n\n // we'll do something with the key so prevent default and stop propagation\n evt.preventDefault();\n evt.stopPropagation();\n\n switch (evt.code) {\n case \"Space\":\n case \"Enter\":\n evt.target.click();\n break;\n case \"ArrowUp\":\n focusAndUpdateIndex(\n focuses.previous || focuses.last,\n evt.current,\n focusesList\n );\n break;\n case \"ArrowDown\":\n focusAndUpdateIndex(\n focuses.next || focuses.first,\n evt.current,\n focusesList\n );\n break;\n case \"Home\":\n focusAndUpdateIndex(focuses.first, evt.current, focusesList);\n break;\n case \"End\":\n focusAndUpdateIndex(focuses.last, evt.current, focusesList);\n break;\n default:\n }\n };\n\n const onSingleHandler = (evt) => {\n const childFocusIsInput = childFocus && childFocus.nodeName === \"INPUT\";\n\n if (\n !isOneOfKeys(evt, [\"Space\", \"Enter\"]) ||\n (childFocusIsInput && isKey(evt, \"Enter\"))\n ) {\n // nothing to do\n return;\n }\n\n // we'll do something with the key so prevent default and stop propagation\n evt.preventDefault();\n evt.stopPropagation();\n\n evt.currentTarget.click();\n };\n\n const onKeyDown = (evt) => {\n if (rootRef?.current == null) {\n // operating outside of a composite widget\n // nothing to manage, just style and trigger clicks\n onSingleHandler(evt);\n return;\n }\n\n // TODO keep the smart default, but allow to explicitly override if disabled elements should be focusable\n const isDisabledFocusable = strategy === \"menu\";\n const focusesList = getFocuses().filter(\n (el) =>\n isDisabledFocusable ||\n !el.classList.contains(classes?.disabled as string)\n );\n\n const currentFocus = focusesList.indexOf(evt.currentTarget);\n\n const focuses = {\n first: focusesList[0],\n last: focusesList[focusesList.length - 1],\n previous: focusesList[currentFocus - 1],\n next: focusesList[currentFocus + 1],\n fall: focusesList[currentFocus + navigationJump],\n jump: focusesList[currentFocus - navigationJump],\n };\n\n if (strategy === \"grid\") {\n onGridKeyDownHandler(\n evt,\n focuses,\n focusesList,\n currentFocus,\n navigationJump\n );\n return;\n }\n\n // TODO add property for specifying the composite widget orientation\n // TODO implement handler for horizontal orientation\n onVerticalArrangementHandler(evt, focuses, focusesList);\n };\n\n const onKeyUp = (evt) => {\n if (isBrowser(\"firefox\")) evt.preventDefault();\n };\n\n if (disabled) return children;\n\n const focusWrapper = (childrenToWrap) => (\n <StyledFocusWrapper\n className={clsx(\n classes?.externalReference,\n focusClasses.externalReference\n )}\n >\n {childrenToWrap}\n {showFocus && (\n <StyledFalseFocus\n className={clsx(classes?.falseFocus, focusClasses.falseFocus)}\n />\n )}\n </StyledFocusWrapper>\n );\n\n return (\n <ConditionalWrapper condition={useFalseFocus} wrapper={focusWrapper}>\n <Global styles={focusStyles} />\n {React.cloneElement(children, {\n className: clsx(\n children.props.className,\n focusClasses.root,\n classes?.root,\n filterClass,\n selected && clsx(focusClasses.selected, classes?.selected),\n disabledClass && clsx(focusClasses.disabled, classes?.disabled),\n focusDisabled &&\n clsx(focusClasses.focusDisabled, classes?.focusDisabled)\n ),\n ref: config,\n onFocus,\n onBlur,\n onMouseDown,\n onKeyDown,\n onKeyUp,\n selected,\n })}\n </ConditionalWrapper>\n );\n};\n"],"names":["focusStyles","process","env","NODE_ENV","name","styles","map","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","HvFocus","classes","children","configuration","disabledClass","selected","disabled","rootRef","undefined","focusOnClick","focusDisabled","strategy","useFalseFocus","filterClass","navigationJump","showFocus","setShowFocus","useState","childFocus","setChildFocus","hasRunConfig","setHasRunConfig","getFocuses","focuses","current","Array","from","getElementsByClassName","focusClasses","root","setTabIndex","el","tabIndex","elChildFocus","getFocusableChildren","setSelectedTabIndex","firstSelected","find","focus","classList","contains","forEach","clearTabSiblings","onFocusStrategy","evt","currentTarget","onBlurStrategy","document","activeElement","setTimeout","config","focusableChildren","length","child","isNil","addFocusClass","add","focused","split","c","removeFocusClass","element","remove","onFocus","onBlur","onMouseDown","hasCard","querySelector","setFocusTo","focusAndUpdateIndex","nextFocus","previousFocus","focusesList","includes","getEnabledKeys","currentFocusIndex","jump","listSize","right","left","up","down","onGridKeyDownHandler","childFocusIsInput","nodeName","isOneOfKeys","isKey","preventDefault","stopPropagation","blockedKeys","code","isBrowser","target","click","last","fall","first","previous","next","onVerticalArrangementHandler","onSingleHandler","onKeyDown","isDisabledFocusable","filter","currentFocus","indexOf","onKeyUp","focusWrapper","childrenToWrap","_jsxs","StyledFocusWrapper","className","clsx","externalReference","StyledFalseFocus","falseFocus","ConditionalWrapper","condition","wrapper","_jsx","Global","React","cloneElement","props","ref"],"mappings":"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"}
@@ -1,14 +1,9 @@
1
- import { isKeypress } from "../../utils/keyboardUtils/keyCheck.js";
2
- const isKey = (evt, key) => isKeypress(evt, key);
3
- const isOneOfKeys = (evt, keys) => keys.some((key) => isKey(evt, key));
4
1
  const getFocusableChildren = (el) => (el == null ? void 0 : el.querySelectorAll("input, button, select, textarea, a[href]")) || [];
5
2
  const setFocusTo = (el) => {
6
3
  el.focus();
7
4
  };
8
5
  export {
9
6
  getFocusableChildren,
10
- isKey,
11
- isOneOfKeys,
12
7
  setFocusTo
13
8
  };
14
9
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../src/components/Focus/utils.ts"],"sourcesContent":["import { isKeypress } from \"@core/utils\";\n\nexport const isKey = (evt, key) => isKeypress(evt, key);\n\nexport const isOneOfKeys = (evt, keys) => keys.some((key) => isKey(evt, key));\n\nexport const getFocusableChildren = (el) =>\n el?.querySelectorAll(\"input, button, select, textarea, a[href]\") || [];\n\nexport const setFocusTo = (el) => {\n el.focus();\n};\n"],"names":["isKey","evt","key","isKeypress","isOneOfKeys","keys","some","getFocusableChildren","el","querySelectorAll","setFocusTo","focus"],"mappings":";AAEO,MAAMA,QAAQA,CAACC,KAAKC,QAAQC,WAAWF,KAAKC,GAAG;AAEzCE,MAAAA,cAAcA,CAACH,KAAKI,SAASA,KAAKC,KAAMJ,CAAQF,QAAAA,MAAMC,KAAKC,GAAG,CAAC;AAErE,MAAMK,uBAAwBC,CACnCA,QAAAA,yBAAIC,iBAAiB,gDAA+C,CAAE;AAEjE,MAAMC,aAAcF,CAAO,OAAA;AAChCA,KAAGG,MAAM;AACX;"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../src/components/Focus/utils.ts"],"sourcesContent":["export const getFocusableChildren = (el) =>\n el?.querySelectorAll(\"input, button, select, textarea, a[href]\") || [];\n\nexport const setFocusTo = (el) => {\n el.focus();\n};\n"],"names":["getFocusableChildren","el","querySelectorAll","setFocusTo","focus"],"mappings":"AAAO,MAAMA,uBAAwBC,CACnCA,QAAAA,yBAAIC,iBAAiB,gDAA+C,CAAE;AAEjE,MAAMC,aAAcF,CAAO,OAAA;AAChCA,KAAGG,MAAM;AACX;"}
@@ -10,6 +10,8 @@ const HvMenuBar = ({
10
10
  data = [],
11
11
  onClick,
12
12
  type = "menubar",
13
+ levels,
14
+ currentLevel,
13
15
  className
14
16
  }) => {
15
17
  const selectionPath = useContext(SelectionContext);
@@ -27,7 +29,9 @@ const HvMenuBar = ({
27
29
  children: data.map((item) => /* @__PURE__ */ jsx(HvMenuItem, {
28
30
  item,
29
31
  type,
30
- onClick
32
+ onClick,
33
+ levels,
34
+ currentLevel
31
35
  }, item.id))
32
36
  })
33
37
  });
@@ -1 +1 @@
1
- {"version":3,"file":"MenuBar.js","sources":["../../../../../../src/components/Header/Navigation/MenuBar/MenuBar.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { MouseEvent, useContext } from \"react\";\nimport { HvHeaderNavigationItemProp } from \"@core/components\";\nimport { HvBaseProps } from \"@core/types\";\nimport { HvMenuItem } from \"../MenuItem\";\nimport { SelectionContext } from \"../utils/SelectionContext\";\nimport { MenuBarRoot, MenuBarUl } from \"./MenuBar.styles\";\nimport headerMenuBarClasses from \"./menuBarClasses\";\n\nexport interface HvMenuBarProps extends HvBaseProps<HTMLDivElement, \"onClick\"> {\n data: HvHeaderNavigationItemProp[];\n type: string;\n onClick?: (event: MouseEvent, selection: HvHeaderNavigationItemProp) => void;\n}\n\nexport const HvMenuBar = ({\n id,\n data = [],\n onClick,\n type = \"menubar\",\n className,\n}: HvMenuBarProps) => {\n const selectionPath = useContext(SelectionContext);\n\n const isMenu = type === \"menu\";\n\n const isActive =\n isMenu && data.filter((item) => item.id === selectionPath?.[1]).length > 0;\n\n return (\n <MenuBarRoot\n className={clsx(\n className,\n isMenu && headerMenuBarClasses.hidden,\n isActive && headerMenuBarClasses.active\n )}\n $type={type}\n $hidden={isMenu}\n $active={isActive}\n >\n <MenuBarUl id={id} onFocus={() => {}}>\n {data.map((item: HvHeaderNavigationItemProp) => (\n <HvMenuItem key={item.id} item={item} type={type} onClick={onClick} />\n ))}\n </MenuBarUl>\n </MenuBarRoot>\n );\n};\n"],"names":["HvMenuBar","id","data","onClick","type","className","selectionPath","useContext","SelectionContext","isMenu","isActive","filter","item","length","MenuBarRoot","clsx","headerMenuBarClasses","hidden","active","$type","$hidden","$active","children","MenuBarUl","onFocus","map","HvMenuItem"],"mappings":";;;;;;;AAeO,MAAMA,YAAYA,CAAC;AAAA,EACxBC;AAAAA,EACAC,OAAO,CAAE;AAAA,EACTC;AAAAA,EACAC,OAAO;AAAA,EACPC;AACc,MAAM;AACdC,QAAAA,gBAAgBC,WAAWC,gBAAgB;AAEjD,QAAMC,SAASL,SAAS;AAElBM,QAAAA,WACJD,UAAUP,KAAKS,OAAQC,CAAAA,SAASA,KAAKX,QAAOK,+CAAgB,GAAE,EAAEO,SAAS;AAE3E,6BACGC,aAAW;AAAA,IACVT,WAAWU,KACTV,WACAI,UAAUO,qBAAqBC,QAC/BP,YAAYM,qBAAqBE,MACnC;AAAA,IACAC,OAAOf;AAAAA,IACPgB,SAASX;AAAAA,IACTY,SAASX;AAAAA,IAASY,8BAEjBC,WAAS;AAAA,MAACtB;AAAAA,MAAQuB,SAASA,MAAM;AAAA,MAAC;AAAA,MAAEF,UAClCpB,KAAKuB,IAAI,CAACb,6BACRc,YAAU;AAAA,QAAed;AAAAA,QAAYR;AAAAA,QAAYD;AAAAA,MAAAA,GAAjCS,KAAKX,EAA+C,CACtE;AAAA,IAAA,CACQ;AAAA,EAAA,CACA;AAEjB;"}
1
+ {"version":3,"file":"MenuBar.js","sources":["../../../../../../src/components/Header/Navigation/MenuBar/MenuBar.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { MouseEvent, useContext } from \"react\";\nimport { HvHeaderNavigationItemProp } from \"@core/components\";\nimport { HvBaseProps } from \"@core/types\";\nimport { HvMenuItem } from \"../MenuItem\";\nimport { SelectionContext } from \"../utils/SelectionContext\";\nimport { MenuBarRoot, MenuBarUl } from \"./MenuBar.styles\";\nimport headerMenuBarClasses from \"./menuBarClasses\";\n\nexport interface HvMenuBarProps extends HvBaseProps<HTMLDivElement, \"onClick\"> {\n data: HvHeaderNavigationItemProp[];\n type: string;\n onClick?: (event: MouseEvent, selection: HvHeaderNavigationItemProp) => void;\n levels: number;\n currentLevel: number;\n}\n\nexport const HvMenuBar = ({\n id,\n data = [],\n onClick,\n type = \"menubar\",\n levels,\n currentLevel,\n className,\n}: HvMenuBarProps) => {\n const selectionPath = useContext(SelectionContext);\n\n const isMenu = type === \"menu\";\n\n const isActive =\n isMenu && data.filter((item) => item.id === selectionPath?.[1]).length > 0;\n\n return (\n <MenuBarRoot\n className={clsx(\n className,\n isMenu && headerMenuBarClasses.hidden,\n isActive && headerMenuBarClasses.active\n )}\n $type={type}\n $hidden={isMenu}\n $active={isActive}\n >\n <MenuBarUl id={id} onFocus={() => {}}>\n {data.map((item: HvHeaderNavigationItemProp) => (\n <HvMenuItem\n key={item.id}\n item={item}\n type={type}\n onClick={onClick}\n levels={levels}\n currentLevel={currentLevel}\n />\n ))}\n </MenuBarUl>\n </MenuBarRoot>\n );\n};\n"],"names":["HvMenuBar","id","data","onClick","type","levels","currentLevel","className","selectionPath","useContext","SelectionContext","isMenu","isActive","filter","item","length","MenuBarRoot","clsx","headerMenuBarClasses","hidden","active","$type","$hidden","$active","children","MenuBarUl","onFocus","map","HvMenuItem"],"mappings":";;;;;;;AAiBO,MAAMA,YAAYA,CAAC;AAAA,EACxBC;AAAAA,EACAC,OAAO,CAAE;AAAA,EACTC;AAAAA,EACAC,OAAO;AAAA,EACPC;AAAAA,EACAC;AAAAA,EACAC;AACc,MAAM;AACdC,QAAAA,gBAAgBC,WAAWC,gBAAgB;AAEjD,QAAMC,SAASP,SAAS;AAElBQ,QAAAA,WACJD,UAAUT,KAAKW,OAAQC,CAAAA,SAASA,KAAKb,QAAOO,+CAAgB,GAAE,EAAEO,SAAS;AAE3E,6BACGC,aAAW;AAAA,IACVT,WAAWU,KACTV,WACAI,UAAUO,qBAAqBC,QAC/BP,YAAYM,qBAAqBE,MACnC;AAAA,IACAC,OAAOjB;AAAAA,IACPkB,SAASX;AAAAA,IACTY,SAASX;AAAAA,IAASY,8BAEjBC,WAAS;AAAA,MAACxB;AAAAA,MAAQyB,SAASA,MAAM;AAAA,MAAC;AAAA,MAAEF,UAClCtB,KAAKyB,IAAI,CAACb,6BACRc,YAAU;AAAA,QAETd;AAAAA,QACAV;AAAAA,QACAD;AAAAA,QACAE;AAAAA,QACAC;AAAAA,MAAAA,GALKQ,KAAKb,EAMX,CACF;AAAA,IAAA,CACQ;AAAA,EAAA,CACA;AAEjB;"}
@@ -5,8 +5,7 @@ import { MenuItemLi, MenuItemLink, MenuItemLabel } from "./MenuItem.styles.js";
5
5
  import { jsx, jsxs } from "@emotion/react/jsx-runtime";
6
6
  import { HvMenuBar } from "../MenuBar/MenuBar.js";
7
7
  import { HvTypography } from "../../../Typography/Typography.js";
8
- import { isKeypress } from "../../../../utils/keyboardUtils/keyCheck.js";
9
- import { keyboardCodes } from "../../../../utils/keyboardUtils/keyboardCodes.js";
8
+ import { isKey } from "../../../../utils/keyboardUtils.js";
10
9
  const traverseItem = (node) => {
11
10
  var _a;
12
11
  let href;
@@ -35,7 +34,9 @@ const HvMenuItem = ({
35
34
  id,
36
35
  item,
37
36
  type,
38
- onClick
37
+ onClick,
38
+ levels,
39
+ currentLevel
39
40
  }) => {
40
41
  const selectionPath = useContext(SelectionContext);
41
42
  const {
@@ -49,7 +50,7 @@ const HvMenuItem = ({
49
50
  const isSelected = (selectionPath == null ? void 0 : selectionPath[isMenu ? 1 : 0]) === item.id;
50
51
  const isCurrent = isSelected ? (selectionPath == null ? void 0 : selectionPath.length) > (isMenu ? 2 : 1) ? true : "page" : void 0;
51
52
  const actionHandler = (event) => {
52
- if (event.type === "click" || isKeypress(event, keyboardCodes.Enter) || isKeypress(event, keyboardCodes.SpaceBar)) {
53
+ if (event.type === "click" || isKey(event, "Enter") || isKey(event, "Space")) {
53
54
  if (event.type === "click") {
54
55
  event.currentTarget.blur();
55
56
  }
@@ -107,10 +108,12 @@ const HvMenuItem = ({
107
108
  "aria-current": isCurrent,
108
109
  children: label
109
110
  })
110
- ), hasSubLevel && /* @__PURE__ */ jsx(HvMenuBar, {
111
+ ), hasSubLevel && currentLevel < levels && /* @__PURE__ */ jsx(HvMenuBar, {
111
112
  data,
112
113
  onClick,
113
- type: "menu"
114
+ type: "menu",
115
+ levels,
116
+ currentLevel: currentLevel + 1
114
117
  })]
115
118
  }, item.label);
116
119
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItem.js","sources":["../../../../../../src/components/Header/Navigation/MenuItem/MenuItem.tsx"],"sourcesContent":["import React, { MouseEvent, useContext } from \"react\";\nimport { HvHeaderNavigationItemProp, HvTypography } from \"@core/components\";\nimport { HvBaseProps } from \"@core/types\";\nimport { isKeypress, keyboardCodes } from \"@core/utils\";\nimport { HvMenuBar } from \"../MenuBar\";\nimport { FocusContext } from \"../utils/FocusContext\";\nimport { SelectionContext } from \"../utils/SelectionContext\";\nimport { MenuItemLabel, MenuItemLi, MenuItemLink } from \"./MenuItem.styles\";\n\nexport interface MenuItemProps extends HvBaseProps<HTMLDivElement, \"onClick\"> {\n item: HvHeaderNavigationItemProp;\n type?: string;\n onClick?: (event: MouseEvent, selection: HvHeaderNavigationItemProp) => void;\n}\n\n// Traverse the tree of items and return the first href it finds\nconst traverseItem = (node: HvHeaderNavigationItemProp) => {\n let href;\n let target;\n\n if (node?.href) {\n href = node?.href;\n target = node?.target;\n } else if (node?.data != null && node?.data?.length > 0) {\n let i = 0;\n while (href == null && i < node.data.length) {\n const childNavItem = traverseItem(node?.data[i]);\n if (childNavItem?.href != null) {\n href = childNavItem?.href;\n target = childNavItem?.target;\n break;\n }\n\n i += 1;\n }\n }\n\n return { href, target };\n};\n\nexport const HvMenuItem = ({ id, item, type, onClick }: MenuItemProps) => {\n const selectionPath = useContext(SelectionContext);\n const { dispatch } = useContext(FocusContext);\n\n const { data } = item;\n const hasSubLevel = data && data.length;\n const isMenu = type === \"menu\";\n const isSelected = selectionPath?.[isMenu ? 1 : 0] === item.id;\n const isCurrent = isSelected\n ? selectionPath?.length > (isMenu ? 2 : 1)\n ? true\n : \"page\"\n : undefined;\n\n const actionHandler = (event: any) => {\n if (\n event.type === \"click\" ||\n isKeypress(event, keyboardCodes.Enter) ||\n isKeypress(event, keyboardCodes.SpaceBar)\n ) {\n if (event.type === \"click\") {\n event.currentTarget.blur();\n }\n onClick?.(event, item);\n }\n };\n\n const handleFocus = (event: React.FocusEvent) => {\n dispatch?.({ type: \"setItemFocused\", itemFocused: event.currentTarget });\n };\n\n const itemProps = {\n onClick: actionHandler,\n onKeyDown: actionHandler,\n onFocus: handleFocus,\n };\n\n const label = (\n <HvTypography\n component=\"span\"\n variant={isSelected ? \"label\" : \"body\"}\n data-text={item.label}\n >\n {item.label}\n </HvTypography>\n );\n\n let itemHref = item?.href;\n let itemTarget = item?.target;\n\n // apps should configure the href even on parent items without content\n // so the fallback logic is theirs, but if not we'll do our best to find a link\n if (item?.href == null) {\n const { href, target } = traverseItem(item);\n itemHref = href;\n itemTarget = target;\n }\n\n return (\n <MenuItemLi\n id={id}\n key={item.label}\n $selected={!!isSelected}\n $isMenu={isMenu}\n >\n {itemHref ? (\n <MenuItemLink\n href={itemHref}\n target={itemTarget}\n {...itemProps}\n $isSelected={isSelected}\n $isMenu={isMenu}\n aria-current={isCurrent}\n >\n {label}\n </MenuItemLink>\n ) : (\n // keeping this code path for backwards compatibility, but\n // shouldn't really be used as it's not accessible\n <MenuItemLabel\n role=\"button\"\n {...itemProps}\n tabIndex={0}\n $isSelected={isSelected}\n $isMenu={isMenu}\n aria-current={isCurrent}\n >\n {label}\n </MenuItemLabel>\n )}\n {hasSubLevel && <HvMenuBar data={data} onClick={onClick} type=\"menu\" />}\n </MenuItemLi>\n );\n};\n"],"names":["traverseItem","node","href","target","data","length","i","childNavItem","HvMenuItem","id","item","type","onClick","selectionPath","useContext","SelectionContext","dispatch","FocusContext","hasSubLevel","isMenu","isSelected","isCurrent","undefined","actionHandler","event","isKeypress","keyboardCodes","Enter","SpaceBar","currentTarget","blur","handleFocus","itemFocused","itemProps","onKeyDown","onFocus","label","HvTypography","component","variant","children","itemHref","itemTarget","MenuItemLi","$selected","$isMenu","_jsx","MenuItemLink","$isSelected","MenuItemLabel","role","tabIndex","HvMenuBar"],"mappings":";;;;;;;;;AAgBA,MAAMA,eAAeA,CAACC,SAAqC;;AACrDC,MAAAA;AACAC,MAAAA;AAEJ,MAAIF,6BAAMC,MAAM;AACdA,WAAOD,6BAAMC;AACbC,aAASF,6BAAME;AAAAA,EAAAA,YACNF,6BAAMG,SAAQ,UAAQH,kCAAMG,SAANH,mBAAYI,UAAS,GAAG;AACvD,QAAIC,IAAI;AACR,WAAOJ,QAAQ,QAAQI,IAAIL,KAAKG,KAAKC,QAAQ;AAC3C,YAAME,eAAeP,aAAaC,6BAAMG,KAAKE,EAAE;AAC3CC,WAAAA,6CAAcL,SAAQ,MAAM;AAC9BA,eAAOK,6CAAcL;AACrBC,iBAASI,6CAAcJ;AACvB;AAAA,MACF;AAEK,WAAA;AAAA,IACP;AAAA,EACF;AAEO,SAAA;AAAA,IAAED;AAAAA,IAAMC;AAAAA,EAAAA;AACjB;AAEO,MAAMK,aAAaA,CAAC;AAAA,EAAEC;AAAAA,EAAIC;AAAAA,EAAMC;AAAAA,EAAMC;AAAuB,MAAM;AAClEC,QAAAA,gBAAgBC,WAAWC,gBAAgB;AAC3C,QAAA;AAAA,IAAEC;AAAAA,EAAAA,IAAaF,WAAWG,YAAY;AAEtC,QAAA;AAAA,IAAEb;AAAAA,EAASM,IAAAA;AACXQ,QAAAA,cAAcd,QAAQA,KAAKC;AACjC,QAAMc,SAASR,SAAS;AACxB,QAAMS,cAAaP,+CAAgBM,SAAS,IAAI,QAAOT,KAAKD;AACtDY,QAAAA,YAAYD,cACdP,+CAAeR,WAAUc,SAAS,IAAI,KACpC,OACA,SACFG;AAEEC,QAAAA,gBAAgBA,CAACC,UAAe;AACpC,QACEA,MAAMb,SAAS,WACfc,WAAWD,OAAOE,cAAcC,KAAK,KACrCF,WAAWD,OAAOE,cAAcE,QAAQ,GACxC;AACIJ,UAAAA,MAAMb,SAAS,SAAS;AAC1Ba,cAAMK,cAAcC;MACtB;AACAlB,yCAAUY,OAAOd;AAAAA,IACnB;AAAA,EAAA;AAGIqB,QAAAA,cAAcA,CAACP,UAA4B;AACpC,yCAAA;AAAA,MAAEb,MAAM;AAAA,MAAkBqB,aAAaR,MAAMK;AAAAA,IAAAA;AAAAA,EAAe;AAGzE,QAAMI,YAAY;AAAA,IAChBrB,SAASW;AAAAA,IACTW,WAAWX;AAAAA,IACXY,SAASJ;AAAAA,EAAAA;AAGLK,QAAAA,4BACHC,cAAY;AAAA,IACXC,WAAU;AAAA,IACVC,SAASnB,aAAa,UAAU;AAAA,IAChC,aAAWV,KAAK0B;AAAAA,IAAMI,UAErB9B,KAAK0B;AAAAA,EAAAA,CACM;AAGhB,MAAIK,WAAW/B,6BAAMR;AACrB,MAAIwC,aAAahC,6BAAMP;AAInBO,OAAAA,6BAAMR,SAAQ,MAAM;AAChB,UAAA;AAAA,MAAEA;AAAAA,MAAMC;AAAAA,IAAAA,IAAWH,aAAaU,IAAI;AAC/BR,eAAAA;AACEC,iBAAAA;AAAAA,EACf;AAEA,8BACGwC,YAAU;AAAA,IACTlC;AAAAA,IAEAmC,WAAW,CAAC,CAACxB;AAAAA,IACbyB,SAAS1B;AAAAA,IAAOqB,UAEfC,CAAAA,WACCK,oBAACC,cAAY;AAAA,MACX7C,MAAMuC;AAAAA,MACNtC,QAAQuC;AAAAA,MAAW,GACfT;AAAAA,MACJe,aAAa5B;AAAAA,MACbyB,SAAS1B;AAAAA,MACT,gBAAcE;AAAAA,MAAUmB,UAEvBJ;AAAAA,IAAAA,CACW;AAAA;AAAA;AAAA,0BAIba,eAAa;AAAA,QACZC,MAAK;AAAA,QAAQ,GACTjB;AAAAA,QACJkB,UAAU;AAAA,QACVH,aAAa5B;AAAAA,QACbyB,SAAS1B;AAAAA,QACT,gBAAcE;AAAAA,QAAUmB,UAEvBJ;AAAAA,MAAAA,CACY;AAAA,OAEhBlB,mCAAgBkC,WAAS;AAAA,MAAChD;AAAAA,MAAYQ;AAAAA,MAAkBD,MAAK;AAAA,IAAA,CAAQ,CAAC;AAAA,EAAA,GA7BlED,KAAK0B,KA8BA;AAEhB;"}
1
+ {"version":3,"file":"MenuItem.js","sources":["../../../../../../src/components/Header/Navigation/MenuItem/MenuItem.tsx"],"sourcesContent":["import React, { MouseEvent, useContext } from \"react\";\nimport { HvHeaderNavigationItemProp, HvTypography } from \"@core/components\";\nimport { HvBaseProps } from \"@core/types\";\nimport { isKey } from \"@core/utils\";\nimport { HvMenuBar } from \"../MenuBar\";\nimport { FocusContext } from \"../utils/FocusContext\";\nimport { SelectionContext } from \"../utils/SelectionContext\";\nimport { MenuItemLabel, MenuItemLi, MenuItemLink } from \"./MenuItem.styles\";\n\nexport interface MenuItemProps extends HvBaseProps<HTMLDivElement, \"onClick\"> {\n item: HvHeaderNavigationItemProp;\n type?: string;\n onClick?: (event: MouseEvent, selection: HvHeaderNavigationItemProp) => void;\n levels: number;\n currentLevel: number;\n}\n\n// Traverse the tree of items and return the first href it finds\nconst traverseItem = (node: HvHeaderNavigationItemProp) => {\n let href;\n let target;\n\n if (node?.href) {\n href = node?.href;\n target = node?.target;\n } else if (node?.data != null && node?.data?.length > 0) {\n let i = 0;\n while (href == null && i < node.data.length) {\n const childNavItem = traverseItem(node?.data[i]);\n if (childNavItem?.href != null) {\n href = childNavItem?.href;\n target = childNavItem?.target;\n break;\n }\n\n i += 1;\n }\n }\n\n return { href, target };\n};\n\nexport const HvMenuItem = ({\n id,\n item,\n type,\n onClick,\n levels,\n currentLevel,\n}: MenuItemProps) => {\n const selectionPath = useContext(SelectionContext);\n const { dispatch } = useContext(FocusContext);\n\n const { data } = item;\n const hasSubLevel = data && data.length;\n const isMenu = type === \"menu\";\n const isSelected = selectionPath?.[isMenu ? 1 : 0] === item.id;\n const isCurrent = isSelected\n ? selectionPath?.length > (isMenu ? 2 : 1)\n ? true\n : \"page\"\n : undefined;\n\n const actionHandler = (event: any) => {\n if (\n event.type === \"click\" ||\n isKey(event, \"Enter\") ||\n isKey(event, \"Space\")\n ) {\n if (event.type === \"click\") {\n event.currentTarget.blur();\n }\n onClick?.(event, item);\n }\n };\n\n const handleFocus = (event: React.FocusEvent) => {\n dispatch?.({ type: \"setItemFocused\", itemFocused: event.currentTarget });\n };\n\n const itemProps = {\n onClick: actionHandler,\n onKeyDown: actionHandler,\n onFocus: handleFocus,\n };\n\n const label = (\n <HvTypography\n component=\"span\"\n variant={isSelected ? \"label\" : \"body\"}\n data-text={item.label}\n >\n {item.label}\n </HvTypography>\n );\n\n let itemHref = item?.href;\n let itemTarget = item?.target;\n\n // apps should configure the href even on parent items without content\n // so the fallback logic is theirs, but if not we'll do our best to find a link\n if (item?.href == null) {\n const { href, target } = traverseItem(item);\n itemHref = href;\n itemTarget = target;\n }\n\n return (\n <MenuItemLi\n id={id}\n key={item.label}\n $selected={!!isSelected}\n $isMenu={isMenu}\n >\n {itemHref ? (\n <MenuItemLink\n href={itemHref}\n target={itemTarget}\n {...itemProps}\n $isSelected={isSelected}\n $isMenu={isMenu}\n aria-current={isCurrent}\n >\n {label}\n </MenuItemLink>\n ) : (\n // keeping this code path for backwards compatibility, but\n // shouldn't really be used as it's not accessible\n <MenuItemLabel\n role=\"button\"\n {...itemProps}\n tabIndex={0}\n $isSelected={isSelected}\n $isMenu={isMenu}\n aria-current={isCurrent}\n >\n {label}\n </MenuItemLabel>\n )}\n {hasSubLevel && currentLevel < levels && (\n <HvMenuBar\n data={data}\n onClick={onClick}\n type=\"menu\"\n levels={levels}\n currentLevel={currentLevel + 1}\n />\n )}\n </MenuItemLi>\n );\n};\n"],"names":["traverseItem","node","href","target","data","length","i","childNavItem","HvMenuItem","id","item","type","onClick","levels","currentLevel","selectionPath","useContext","SelectionContext","dispatch","FocusContext","hasSubLevel","isMenu","isSelected","isCurrent","undefined","actionHandler","event","isKey","currentTarget","blur","handleFocus","itemFocused","itemProps","onKeyDown","onFocus","label","HvTypography","component","variant","children","itemHref","itemTarget","MenuItemLi","$selected","$isMenu","_jsx","MenuItemLink","$isSelected","MenuItemLabel","role","tabIndex","HvMenuBar"],"mappings":"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"}
@@ -12,6 +12,7 @@ const HvHeaderNavigation = ({
12
12
  onClick,
13
13
  className,
14
14
  classes,
15
+ levels = 2,
15
16
  ...others
16
17
  }) => {
17
18
  const selectionPath = useSelectionPath(data, selected);
@@ -28,7 +29,9 @@ const HvHeaderNavigation = ({
28
29
  children: /* @__PURE__ */ jsx(HvMenuBar, {
29
30
  data,
30
31
  type: "menubar",
31
- onClick: handleClick
32
+ onClick: handleClick,
33
+ levels,
34
+ currentLevel: 1
32
35
  })
33
36
  })
34
37
  })
@@ -1 +1 @@
1
- {"version":3,"file":"Navigation.js","sources":["../../../../../src/components/Header/Navigation/Navigation.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { MouseEvent } from \"react\";\nimport { useSelectionPath } from \"@core/hooks\";\nimport { HvBaseProps } from \"@core/types\";\nimport { HvMenuBar, HvMenuBarProps } from \"./MenuBar\";\nimport { StyledNav } from \"./Navigation.styles\";\nimport { FocusProvider } from \"./utils/FocusContext\";\nimport { SelectionContext } from \"./utils/SelectionContext\";\nimport headerNavigationClasses, {\n HvHeaderNavigationClasses,\n} from \"./navigationClasses\";\n\nexport interface HvHeaderNavigationItemProp {\n id: string;\n label: string;\n path?: string;\n href?: string;\n target?: string;\n data?: HvHeaderNavigationItemProp[];\n}\n\nexport interface HvHeaderNavigationProps\n extends HvBaseProps<HTMLDivElement, \"onClick\"> {\n data: HvHeaderNavigationItemProp[];\n selected?: string;\n onClick?: (event: MouseEvent, selection: HvHeaderNavigationItemProp) => void;\n classes?: HvHeaderNavigationClasses;\n}\n\nexport const HvHeaderNavigation = ({\n data,\n selected,\n onClick,\n className,\n classes,\n ...others\n}: HvHeaderNavigationProps) => {\n const selectionPath = useSelectionPath(data, selected);\n\n const handleClick: HvMenuBarProps[\"onClick\"] = (event, selection) => {\n event.preventDefault();\n\n onClick?.(event, selection);\n };\n\n return (\n <SelectionContext.Provider value={selectionPath}>\n <FocusProvider>\n <StyledNav\n className={clsx(\n className,\n headerNavigationClasses.root,\n classes?.root\n )}\n {...others}\n >\n <HvMenuBar data={data} type=\"menubar\" onClick={handleClick} />\n </StyledNav>\n </FocusProvider>\n </SelectionContext.Provider>\n );\n};\n"],"names":["HvHeaderNavigation","data","selected","onClick","className","classes","others","selectionPath","useSelectionPath","handleClick","event","selection","preventDefault","_jsx","SelectionContext","Provider","value","children","FocusProvider","StyledNav","clsx","headerNavigationClasses","root","HvMenuBar","type"],"mappings":";;;;;;;;AA6BO,MAAMA,qBAAqBA,CAAC;AAAA,EACjCC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACA,GAAGC;AACoB,MAAM;AACvBC,QAAAA,gBAAgBC,iBAAiBP,MAAMC,QAAQ;AAE/CO,QAAAA,cAAyCA,CAACC,OAAOC,cAAc;AACnED,UAAME,eAAe;AAErBT,uCAAUO,OAAOC;AAAAA,EAAS;AAI1BE,SAAAA,oBAACC,iBAAiBC,UAAQ;AAAA,IAACC,OAAOT;AAAAA,IAAcU,8BAC7CC,eAAa;AAAA,MAAAD,8BACXE,WAAS;AAAA,QACRf,WAAWgB,KACThB,WACAiB,wBAAwBC,MACxBjB,mCAASiB,IACX;AAAA,QAAE,GACEhB;AAAAA,QAAMW,8BAETM,WAAS;AAAA,UAACtB;AAAAA,UAAYuB,MAAK;AAAA,UAAUrB,SAASM;AAAAA,QAAAA,CAAc;AAAA,MAAA,CACpD;AAAA,IAAA,CACE;AAAA,EAAA,CACU;AAE/B;"}
1
+ {"version":3,"file":"Navigation.js","sources":["../../../../../src/components/Header/Navigation/Navigation.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { MouseEvent } from \"react\";\nimport { useSelectionPath } from \"@core/hooks\";\nimport { HvBaseProps } from \"@core/types\";\nimport { HvMenuBar, HvMenuBarProps } from \"./MenuBar\";\nimport { StyledNav } from \"./Navigation.styles\";\nimport { FocusProvider } from \"./utils/FocusContext\";\nimport { SelectionContext } from \"./utils/SelectionContext\";\nimport headerNavigationClasses, {\n HvHeaderNavigationClasses,\n} from \"./navigationClasses\";\n\nexport interface HvHeaderNavigationItemProp {\n id: string;\n label: string;\n path?: string;\n href?: string;\n target?: string;\n data?: HvHeaderNavigationItemProp[];\n}\n\nexport interface HvHeaderNavigationProps\n extends HvBaseProps<HTMLDivElement, \"onClick\"> {\n data: HvHeaderNavigationItemProp[];\n selected?: string;\n onClick?: (event: MouseEvent, selection: HvHeaderNavigationItemProp) => void;\n classes?: HvHeaderNavigationClasses;\n levels?: 1 | 2;\n}\n\nexport const HvHeaderNavigation = ({\n data,\n selected,\n onClick,\n className,\n classes,\n levels = 2,\n ...others\n}: HvHeaderNavigationProps) => {\n const selectionPath = useSelectionPath(data, selected);\n\n const handleClick: HvMenuBarProps[\"onClick\"] = (event, selection) => {\n event.preventDefault();\n\n onClick?.(event, selection);\n };\n\n return (\n <SelectionContext.Provider value={selectionPath}>\n <FocusProvider>\n <StyledNav\n className={clsx(\n className,\n headerNavigationClasses.root,\n classes?.root\n )}\n {...others}\n >\n <HvMenuBar\n data={data}\n type=\"menubar\"\n onClick={handleClick}\n levels={levels}\n currentLevel={1}\n />\n </StyledNav>\n </FocusProvider>\n </SelectionContext.Provider>\n );\n};\n"],"names":["HvHeaderNavigation","data","selected","onClick","className","classes","levels","others","selectionPath","useSelectionPath","handleClick","event","selection","preventDefault","_jsx","SelectionContext","Provider","value","children","FocusProvider","StyledNav","clsx","headerNavigationClasses","root","HvMenuBar","type","currentLevel"],"mappings":";;;;;;;;AA8BO,MAAMA,qBAAqBA,CAAC;AAAA,EACjCC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC,SAAS;AAAA,EACT,GAAGC;AACoB,MAAM;AACvBC,QAAAA,gBAAgBC,iBAAiBR,MAAMC,QAAQ;AAE/CQ,QAAAA,cAAyCA,CAACC,OAAOC,cAAc;AACnED,UAAME,eAAe;AAErBV,uCAAUQ,OAAOC;AAAAA,EAAS;AAI1BE,SAAAA,oBAACC,iBAAiBC,UAAQ;AAAA,IAACC,OAAOT;AAAAA,IAAcU,8BAC7CC,eAAa;AAAA,MAAAD,8BACXE,WAAS;AAAA,QACRhB,WAAWiB,KACTjB,WACAkB,wBAAwBC,MACxBlB,mCAASkB,IACX;AAAA,QAAE,GACEhB;AAAAA,QAAMW,8BAETM,WAAS;AAAA,UACRvB;AAAAA,UACAwB,MAAK;AAAA,UACLtB,SAASO;AAAAA,UACTJ;AAAAA,UACAoB,cAAc;AAAA,QAAA,CACf;AAAA,MAAA,CACQ;AAAA,IAAA,CACE;AAAA,EAAA,CACU;AAE/B;"}
@@ -1,15 +1,14 @@
1
1
  import { useState, useRef, useLayoutEffect } from "react";
2
2
  import { Edit } from "@hitachivantara/uikit-react-icons";
3
- import { useTheme } from "@hitachivantara/uikit-react-core";
4
3
  import { useClasses } from "./InlineEditor.styles.js";
5
4
  import { staticClasses } from "./InlineEditor.styles.js";
6
5
  import { jsx } from "@emotion/react/jsx-runtime";
7
6
  import { useControlled } from "../../hooks/useControlled.js";
7
+ import { useTheme } from "../../hooks/useTheme.js";
8
8
  import { HvInput } from "../Input/Input.js";
9
9
  import { HvButton } from "../Button/Button.js";
10
10
  import { HvTypography } from "../Typography/Typography.js";
11
- import { isKeypress } from "../../utils/keyboardUtils/keyCheck.js";
12
- import { keyboardCodes } from "../../utils/keyboardUtils/keyboardCodes.js";
11
+ import { isKey } from "../../utils/keyboardUtils.js";
13
12
  const HvInlineEditor = ({
14
13
  className,
15
14
  classes: classesProp,
@@ -59,7 +58,7 @@ const HvInlineEditor = ({
59
58
  onBlur == null ? void 0 : onBlur(event, newValue);
60
59
  };
61
60
  const handleKeyDown = (event) => {
62
- if (isKeypress(event, keyboardCodes.Esc)) {
61
+ if (isKey(event, "Esc")) {
63
62
  setEditMode(false);
64
63
  setValue(cachedValue);
65
64
  }