@elliemae/ds-menu-button 3.45.0-rc.0 → 3.45.0-rc.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (282) hide show
  1. package/dist/cjs/DSMenuButton.js +16 -5
  2. package/dist/cjs/DSMenuButton.js.map +2 -2
  3. package/dist/cjs/config/useMenuButton.js +49 -18
  4. package/dist/cjs/config/useMenuButton.js.map +3 -3
  5. package/dist/cjs/config/useSplitInherithedProps.js +141 -0
  6. package/dist/cjs/config/useSplitInherithedProps.js.map +7 -0
  7. package/dist/cjs/config/useValidateProps.js.map +2 -2
  8. package/dist/cjs/constants/index.js +17 -4
  9. package/dist/cjs/constants/index.js.map +2 -2
  10. package/dist/cjs/index.js +7 -3
  11. package/dist/cjs/index.js.map +3 -3
  12. package/dist/cjs/parts/DSFlyoutMenu/DSFlyoutMenu.js +96 -0
  13. package/dist/cjs/parts/DSFlyoutMenu/DSFlyoutMenu.js.map +7 -0
  14. package/dist/cjs/parts/DSFlyoutMenu/config/useFlyoutMenu.js +54 -0
  15. package/dist/cjs/parts/DSFlyoutMenu/config/useFlyoutMenu.js.map +7 -0
  16. package/dist/cjs/parts/{ItemFactory.js → DSFlyoutMenu/config/useValidateProps.js} +9 -35
  17. package/dist/cjs/parts/DSFlyoutMenu/config/useValidateProps.js.map +7 -0
  18. package/dist/cjs/parts/DSFlyoutMenu/constants/index.js +46 -0
  19. package/dist/cjs/parts/DSFlyoutMenu/constants/index.js.map +7 -0
  20. package/dist/cjs/{DSMenuButtonCTX.js → parts/DSFlyoutMenu/index.js} +7 -8
  21. package/dist/cjs/parts/DSFlyoutMenu/index.js.map +7 -0
  22. package/dist/cjs/parts/DSFlyoutMenu/react-desc-prop-types.js +62 -0
  23. package/dist/cjs/parts/DSFlyoutMenu/react-desc-prop-types.js.map +7 -0
  24. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/DSMenuBehaviouralContextProvider.js +70 -0
  25. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/DSMenuBehaviouralContextProvider.js.map +7 -0
  26. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/MenuBehaviouralContextProviderCTX.js +40 -0
  27. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/MenuBehaviouralContextProviderCTX.js.map +7 -0
  28. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useFocusTracker.js +186 -0
  29. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useFocusTracker.js.map +7 -0
  30. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useGlobalEvents.js +89 -0
  31. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useGlobalEvents.js.map +7 -0
  32. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useMenuBehaviouralContextProvider.js +92 -0
  33. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useMenuBehaviouralContextProvider.js.map +7 -0
  34. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useMenuItemEventsHandlers.js +315 -0
  35. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useMenuItemEventsHandlers.js.map +7 -0
  36. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useMenuOpenStatus.js +66 -0
  37. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useMenuOpenStatus.js.map +7 -0
  38. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useValidateProps.js +40 -0
  39. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/config/useValidateProps.js.map +7 -0
  40. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/constants/Errors.js +58 -0
  41. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/constants/Errors.js.map +7 -0
  42. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/constants/index.js +44 -0
  43. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/constants/index.js.map +7 -0
  44. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/index.js +37 -0
  45. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/index.js.map +7 -0
  46. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/react-desc-prop-types.js +53 -0
  47. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/react-desc-prop-types.js.map +7 -0
  48. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/utils/multipleSelectionHelpers.js +139 -0
  49. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/utils/multipleSelectionHelpers.js.map +7 -0
  50. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/utils/nodeGettersByCriterias.js +144 -0
  51. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/utils/nodeGettersByCriterias.js.map +7 -0
  52. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/utils/singleSelectionHelpers.js +44 -0
  53. package/dist/cjs/parts/DSMenuBehaviouralContextProvider/utils/singleSelectionHelpers.js.map +7 -0
  54. package/dist/cjs/parts/DSMenuItemRendererFactory/ActivableMenuItem.js +116 -0
  55. package/dist/cjs/parts/DSMenuItemRendererFactory/ActivableMenuItem.js.map +7 -0
  56. package/dist/cjs/parts/DSMenuItemRendererFactory/ActivableWithSubmenuMenuItem.js +159 -0
  57. package/dist/cjs/parts/DSMenuItemRendererFactory/ActivableWithSubmenuMenuItem.js.map +7 -0
  58. package/dist/cjs/parts/DSMenuItemRendererFactory/DSMenuItemRendererFactory.js +97 -0
  59. package/dist/cjs/parts/DSMenuItemRendererFactory/DSMenuItemRendererFactory.js.map +7 -0
  60. package/dist/cjs/parts/DSMenuItemRendererFactory/MultipleSelectMenuItem.js +122 -0
  61. package/dist/cjs/parts/DSMenuItemRendererFactory/MultipleSelectMenuItem.js.map +7 -0
  62. package/dist/cjs/parts/DSMenuItemRendererFactory/MultipleSelectWithSubmenuMenuItem.js +173 -0
  63. package/dist/cjs/parts/DSMenuItemRendererFactory/MultipleSelectWithSubmenuMenuItem.js.map +7 -0
  64. package/dist/cjs/parts/DSMenuItemRendererFactory/SingleSelectMenuItem.js +130 -0
  65. package/dist/cjs/parts/DSMenuItemRendererFactory/SingleSelectMenuItem.js.map +7 -0
  66. package/dist/cjs/parts/DSMenuItemRendererFactory/SingleSelectWithSubmenuMenuItem.js +176 -0
  67. package/dist/cjs/parts/DSMenuItemRendererFactory/SingleSelectWithSubmenuMenuItem.js.map +7 -0
  68. package/dist/cjs/parts/DSMenuItemRendererFactory/WithSubmenuMenuItem.js +162 -0
  69. package/dist/cjs/parts/DSMenuItemRendererFactory/WithSubmenuMenuItem.js.map +7 -0
  70. package/dist/cjs/parts/DSMenuItemRendererFactory/config/useMenuItemRendererFactory.js +57 -0
  71. package/dist/cjs/parts/DSMenuItemRendererFactory/config/useMenuItemRendererFactory.js.map +7 -0
  72. package/dist/cjs/parts/DSMenuItemRendererFactory/config/useValidateProps.js +40 -0
  73. package/dist/cjs/parts/DSMenuItemRendererFactory/config/useValidateProps.js.map +7 -0
  74. package/dist/cjs/parts/DSMenuItemRendererFactory/constants/index.js +48 -0
  75. package/dist/cjs/parts/DSMenuItemRendererFactory/constants/index.js.map +7 -0
  76. package/dist/cjs/parts/DSMenuItemRendererFactory/index.js +37 -0
  77. package/dist/cjs/parts/DSMenuItemRendererFactory/index.js.map +7 -0
  78. package/dist/cjs/parts/DSMenuItemRendererFactory/react-desc-prop-types.js +51 -0
  79. package/dist/cjs/parts/DSMenuItemRendererFactory/react-desc-prop-types.js.map +7 -0
  80. package/dist/cjs/parts/DSMenuItemRendererFactory/useMenuItemHighlightState.js +62 -0
  81. package/dist/cjs/parts/DSMenuItemRendererFactory/useMenuItemHighlightState.js.map +7 -0
  82. package/dist/cjs/parts/DSOpinionatedButton/DSOpinionatedButton.js +100 -0
  83. package/dist/cjs/parts/DSOpinionatedButton/DSOpinionatedButton.js.map +7 -0
  84. package/dist/cjs/parts/DSOpinionatedButton/config/useOpinionatedButton.js +80 -0
  85. package/dist/cjs/parts/DSOpinionatedButton/config/useOpinionatedButton.js.map +7 -0
  86. package/dist/cjs/parts/DSOpinionatedButton/config/useTriggerEventsHandlers.js +98 -0
  87. package/dist/cjs/parts/DSOpinionatedButton/config/useTriggerEventsHandlers.js.map +7 -0
  88. package/dist/cjs/parts/DSOpinionatedButton/config/useValidateProps.js +40 -0
  89. package/dist/cjs/parts/DSOpinionatedButton/config/useValidateProps.js.map +7 -0
  90. package/dist/cjs/parts/DSOpinionatedButton/constants/index.js +48 -0
  91. package/dist/cjs/parts/DSOpinionatedButton/constants/index.js.map +7 -0
  92. package/dist/cjs/parts/DSOpinionatedButton/index.js +37 -0
  93. package/dist/cjs/parts/DSOpinionatedButton/index.js.map +7 -0
  94. package/dist/cjs/parts/DSOpinionatedButton/react-desc-prop-types.js +53 -0
  95. package/dist/cjs/parts/DSOpinionatedButton/react-desc-prop-types.js.map +7 -0
  96. package/dist/cjs/react-desc-prop-types.js +61 -25
  97. package/dist/cjs/react-desc-prop-types.js.map +2 -2
  98. package/dist/cjs/utils/nodesTypeguardsAndGetters.js +123 -0
  99. package/dist/cjs/utils/nodesTypeguardsAndGetters.js.map +7 -0
  100. package/dist/cjs/utils/useOptionsArrayToDsTree.js +55 -0
  101. package/dist/cjs/utils/useOptionsArrayToDsTree.js.map +7 -0
  102. package/dist/esm/DSMenuButton.js +19 -8
  103. package/dist/esm/DSMenuButton.js.map +2 -2
  104. package/dist/esm/config/useMenuButton.js +51 -20
  105. package/dist/esm/config/useMenuButton.js.map +3 -3
  106. package/dist/esm/config/useSplitInherithedProps.js +111 -0
  107. package/dist/esm/config/useSplitInherithedProps.js.map +7 -0
  108. package/dist/esm/config/useValidateProps.js.map +2 -2
  109. package/dist/esm/constants/index.js +17 -4
  110. package/dist/esm/constants/index.js.map +2 -2
  111. package/dist/esm/index.js +8 -4
  112. package/dist/esm/index.js.map +3 -3
  113. package/dist/esm/parts/DSFlyoutMenu/DSFlyoutMenu.js +66 -0
  114. package/dist/esm/parts/DSFlyoutMenu/DSFlyoutMenu.js.map +7 -0
  115. package/dist/esm/parts/DSFlyoutMenu/config/useFlyoutMenu.js +24 -0
  116. package/dist/esm/parts/DSFlyoutMenu/config/useFlyoutMenu.js.map +7 -0
  117. package/dist/esm/parts/DSFlyoutMenu/config/useValidateProps.js +10 -0
  118. package/dist/esm/parts/DSFlyoutMenu/config/useValidateProps.js.map +7 -0
  119. package/dist/esm/parts/DSFlyoutMenu/constants/index.js +16 -0
  120. package/dist/esm/parts/DSFlyoutMenu/constants/index.js.map +7 -0
  121. package/dist/esm/parts/DSFlyoutMenu/index.js +7 -0
  122. package/dist/esm/parts/DSFlyoutMenu/index.js.map +7 -0
  123. package/dist/esm/parts/DSFlyoutMenu/react-desc-prop-types.js +40 -0
  124. package/dist/esm/parts/DSFlyoutMenu/react-desc-prop-types.js.map +7 -0
  125. package/dist/esm/parts/DSMenuBehaviouralContextProvider/DSMenuBehaviouralContextProvider.js +42 -0
  126. package/dist/esm/parts/DSMenuBehaviouralContextProvider/DSMenuBehaviouralContextProvider.js.map +7 -0
  127. package/dist/esm/parts/DSMenuBehaviouralContextProvider/MenuBehaviouralContextProviderCTX.js +10 -0
  128. package/dist/esm/parts/DSMenuBehaviouralContextProvider/MenuBehaviouralContextProviderCTX.js.map +7 -0
  129. package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useFocusTracker.js +161 -0
  130. package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useFocusTracker.js.map +7 -0
  131. package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useGlobalEvents.js +59 -0
  132. package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useGlobalEvents.js.map +7 -0
  133. package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useMenuBehaviouralContextProvider.js +65 -0
  134. package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useMenuBehaviouralContextProvider.js.map +7 -0
  135. package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useMenuItemEventsHandlers.js +292 -0
  136. package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useMenuItemEventsHandlers.js.map +7 -0
  137. package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useMenuOpenStatus.js +36 -0
  138. package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useMenuOpenStatus.js.map +7 -0
  139. package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useValidateProps.js +10 -0
  140. package/dist/esm/parts/DSMenuBehaviouralContextProvider/config/useValidateProps.js.map +7 -0
  141. package/dist/esm/parts/DSMenuBehaviouralContextProvider/constants/Errors.js +28 -0
  142. package/dist/esm/parts/DSMenuBehaviouralContextProvider/constants/Errors.js.map +7 -0
  143. package/dist/esm/parts/DSMenuBehaviouralContextProvider/constants/index.js +14 -0
  144. package/dist/esm/parts/DSMenuBehaviouralContextProvider/constants/index.js.map +7 -0
  145. package/dist/esm/parts/DSMenuBehaviouralContextProvider/index.js +10 -0
  146. package/dist/esm/parts/DSMenuBehaviouralContextProvider/index.js.map +7 -0
  147. package/dist/esm/parts/DSMenuBehaviouralContextProvider/react-desc-prop-types.js +23 -0
  148. package/dist/esm/parts/DSMenuBehaviouralContextProvider/react-desc-prop-types.js.map +7 -0
  149. package/dist/esm/parts/DSMenuBehaviouralContextProvider/utils/multipleSelectionHelpers.js +113 -0
  150. package/dist/esm/parts/DSMenuBehaviouralContextProvider/utils/multipleSelectionHelpers.js.map +7 -0
  151. package/dist/esm/parts/DSMenuBehaviouralContextProvider/utils/nodeGettersByCriterias.js +123 -0
  152. package/dist/esm/parts/DSMenuBehaviouralContextProvider/utils/nodeGettersByCriterias.js.map +7 -0
  153. package/dist/esm/parts/DSMenuBehaviouralContextProvider/utils/singleSelectionHelpers.js +14 -0
  154. package/dist/esm/parts/DSMenuBehaviouralContextProvider/utils/singleSelectionHelpers.js.map +7 -0
  155. package/dist/esm/parts/DSMenuItemRendererFactory/ActivableMenuItem.js +91 -0
  156. package/dist/esm/parts/DSMenuItemRendererFactory/ActivableMenuItem.js.map +7 -0
  157. package/dist/esm/parts/DSMenuItemRendererFactory/ActivableWithSubmenuMenuItem.js +134 -0
  158. package/dist/esm/parts/DSMenuItemRendererFactory/ActivableWithSubmenuMenuItem.js.map +7 -0
  159. package/dist/esm/parts/DSMenuItemRendererFactory/DSMenuItemRendererFactory.js +78 -0
  160. package/dist/esm/parts/DSMenuItemRendererFactory/DSMenuItemRendererFactory.js.map +7 -0
  161. package/dist/esm/parts/DSMenuItemRendererFactory/MultipleSelectMenuItem.js +97 -0
  162. package/dist/esm/parts/DSMenuItemRendererFactory/MultipleSelectMenuItem.js.map +7 -0
  163. package/dist/esm/parts/DSMenuItemRendererFactory/MultipleSelectWithSubmenuMenuItem.js +148 -0
  164. package/dist/esm/parts/DSMenuItemRendererFactory/MultipleSelectWithSubmenuMenuItem.js.map +7 -0
  165. package/dist/esm/parts/DSMenuItemRendererFactory/SingleSelectMenuItem.js +105 -0
  166. package/dist/esm/parts/DSMenuItemRendererFactory/SingleSelectMenuItem.js.map +7 -0
  167. package/dist/esm/parts/DSMenuItemRendererFactory/SingleSelectWithSubmenuMenuItem.js +151 -0
  168. package/dist/esm/parts/DSMenuItemRendererFactory/SingleSelectWithSubmenuMenuItem.js.map +7 -0
  169. package/dist/esm/parts/DSMenuItemRendererFactory/WithSubmenuMenuItem.js +137 -0
  170. package/dist/esm/parts/DSMenuItemRendererFactory/WithSubmenuMenuItem.js.map +7 -0
  171. package/dist/esm/parts/DSMenuItemRendererFactory/config/useMenuItemRendererFactory.js +30 -0
  172. package/dist/esm/parts/DSMenuItemRendererFactory/config/useMenuItemRendererFactory.js.map +7 -0
  173. package/dist/esm/parts/DSMenuItemRendererFactory/config/useValidateProps.js +10 -0
  174. package/dist/esm/parts/DSMenuItemRendererFactory/config/useValidateProps.js.map +7 -0
  175. package/dist/esm/parts/DSMenuItemRendererFactory/constants/index.js +18 -0
  176. package/dist/esm/parts/DSMenuItemRendererFactory/constants/index.js.map +7 -0
  177. package/dist/esm/parts/DSMenuItemRendererFactory/index.js +7 -0
  178. package/dist/esm/parts/DSMenuItemRendererFactory/index.js.map +7 -0
  179. package/dist/esm/parts/DSMenuItemRendererFactory/react-desc-prop-types.js +26 -0
  180. package/dist/esm/parts/DSMenuItemRendererFactory/react-desc-prop-types.js.map +7 -0
  181. package/dist/esm/parts/DSMenuItemRendererFactory/useMenuItemHighlightState.js +32 -0
  182. package/dist/esm/parts/DSMenuItemRendererFactory/useMenuItemHighlightState.js.map +7 -0
  183. package/dist/esm/parts/DSOpinionatedButton/DSOpinionatedButton.js +70 -0
  184. package/dist/esm/parts/DSOpinionatedButton/DSOpinionatedButton.js.map +7 -0
  185. package/dist/esm/parts/DSOpinionatedButton/config/useOpinionatedButton.js +53 -0
  186. package/dist/esm/parts/DSOpinionatedButton/config/useOpinionatedButton.js.map +7 -0
  187. package/dist/esm/parts/DSOpinionatedButton/config/useTriggerEventsHandlers.js +68 -0
  188. package/dist/esm/parts/DSOpinionatedButton/config/useTriggerEventsHandlers.js.map +7 -0
  189. package/dist/esm/parts/DSOpinionatedButton/config/useValidateProps.js +10 -0
  190. package/dist/esm/parts/DSOpinionatedButton/config/useValidateProps.js.map +7 -0
  191. package/dist/esm/parts/DSOpinionatedButton/constants/index.js +18 -0
  192. package/dist/esm/parts/DSOpinionatedButton/constants/index.js.map +7 -0
  193. package/dist/esm/parts/DSOpinionatedButton/index.js +10 -0
  194. package/dist/esm/parts/DSOpinionatedButton/index.js.map +7 -0
  195. package/dist/esm/parts/DSOpinionatedButton/react-desc-prop-types.js +23 -0
  196. package/dist/esm/parts/DSOpinionatedButton/react-desc-prop-types.js.map +7 -0
  197. package/dist/esm/react-desc-prop-types.js +62 -26
  198. package/dist/esm/react-desc-prop-types.js.map +2 -2
  199. package/dist/esm/utils/nodesTypeguardsAndGetters.js +93 -0
  200. package/dist/esm/utils/nodesTypeguardsAndGetters.js.map +7 -0
  201. package/dist/esm/utils/useOptionsArrayToDsTree.js +25 -0
  202. package/dist/esm/utils/useOptionsArrayToDsTree.js.map +7 -0
  203. package/dist/types/DSMenuButton.d.ts +4 -6
  204. package/dist/types/config/useMenuButton.d.ts +9 -13
  205. package/dist/types/config/useSplitInherithedProps.d.ts +495 -0
  206. package/dist/types/config/useValidateProps.d.ts +3 -3
  207. package/dist/types/constants/index.d.ts +14 -2
  208. package/dist/types/index.d.ts +4 -2
  209. package/dist/types/parts/DSFlyoutMenu/DSFlyoutMenu.d.ts +5 -0
  210. package/dist/types/parts/DSFlyoutMenu/config/useFlyoutMenu.d.ts +8 -0
  211. package/dist/types/parts/DSFlyoutMenu/config/useValidateProps.d.ts +3 -0
  212. package/dist/types/parts/DSFlyoutMenu/constants/index.d.ts +7 -0
  213. package/dist/types/parts/DSFlyoutMenu/index.d.ts +1 -0
  214. package/dist/types/parts/DSFlyoutMenu/react-desc-prop-types.d.ts +25 -0
  215. package/dist/types/parts/DSMenuBehaviouralContextProvider/DSMenuBehaviouralContextProvider.d.ts +5 -0
  216. package/dist/types/parts/DSMenuBehaviouralContextProvider/MenuBehaviouralContextProviderCTX.d.ts +5 -0
  217. package/dist/types/parts/DSMenuBehaviouralContextProvider/config/useFocusTracker.d.ts +15 -0
  218. package/dist/types/parts/DSMenuBehaviouralContextProvider/config/useGlobalEvents.d.ts +15 -0
  219. package/dist/types/parts/DSMenuBehaviouralContextProvider/config/useMenuBehaviouralContextProvider.d.ts +15 -0
  220. package/dist/types/parts/DSMenuBehaviouralContextProvider/config/useMenuItemEventsHandlers.d.ts +18 -0
  221. package/dist/types/parts/DSMenuBehaviouralContextProvider/config/useMenuOpenStatus.d.ts +17 -0
  222. package/dist/types/parts/DSMenuBehaviouralContextProvider/config/useValidateProps.d.ts +3 -0
  223. package/dist/types/parts/DSMenuBehaviouralContextProvider/constants/Errors.d.ts +15 -0
  224. package/dist/types/parts/DSMenuBehaviouralContextProvider/constants/index.d.ts +7 -0
  225. package/dist/types/parts/DSMenuBehaviouralContextProvider/index.d.ts +1 -0
  226. package/dist/types/parts/DSMenuBehaviouralContextProvider/react-desc-prop-types.d.ts +24 -0
  227. package/dist/types/parts/DSMenuBehaviouralContextProvider/utils/multipleSelectionHelpers.d.ts +6 -0
  228. package/dist/types/parts/DSMenuBehaviouralContextProvider/utils/nodeGettersByCriterias.d.ts +35 -0
  229. package/dist/types/parts/DSMenuBehaviouralContextProvider/utils/singleSelectionHelpers.d.ts +13 -0
  230. package/dist/types/parts/DSMenuItemRendererFactory/ActivableMenuItem.d.ts +5 -0
  231. package/dist/types/parts/DSMenuItemRendererFactory/ActivableWithSubmenuMenuItem.d.ts +7 -0
  232. package/dist/types/parts/DSMenuItemRendererFactory/DSMenuItemRendererFactory.d.ts +5 -0
  233. package/dist/types/parts/DSMenuItemRendererFactory/MultipleSelectMenuItem.d.ts +5 -0
  234. package/dist/types/parts/DSMenuItemRendererFactory/MultipleSelectWithSubmenuMenuItem.d.ts +7 -0
  235. package/dist/types/parts/DSMenuItemRendererFactory/SingleSelectMenuItem.d.ts +5 -0
  236. package/dist/types/parts/DSMenuItemRendererFactory/SingleSelectWithSubmenuMenuItem.d.ts +7 -0
  237. package/dist/types/parts/DSMenuItemRendererFactory/WithSubmenuMenuItem.d.ts +7 -0
  238. package/dist/types/parts/DSMenuItemRendererFactory/config/useMenuItemRendererFactory.d.ts +6 -0
  239. package/dist/types/parts/DSMenuItemRendererFactory/config/useValidateProps.d.ts +3 -0
  240. package/dist/types/parts/DSMenuItemRendererFactory/constants/index.d.ts +6 -0
  241. package/dist/types/parts/DSMenuItemRendererFactory/index.d.ts +1 -0
  242. package/dist/types/parts/DSMenuItemRendererFactory/react-desc-prop-types.d.ts +24 -0
  243. package/dist/types/parts/DSMenuItemRendererFactory/useMenuItemHighlightState.d.ts +12 -0
  244. package/dist/types/parts/DSOpinionatedButton/DSOpinionatedButton.d.ts +5 -0
  245. package/dist/types/parts/DSOpinionatedButton/config/useOpinionatedButton.d.ts +38 -0
  246. package/dist/types/parts/DSOpinionatedButton/config/useTriggerEventsHandlers.d.ts +14 -0
  247. package/dist/types/parts/DSOpinionatedButton/config/useValidateProps.d.ts +3 -0
  248. package/dist/types/parts/DSOpinionatedButton/constants/index.d.ts +6 -0
  249. package/dist/types/parts/DSOpinionatedButton/index.d.ts +1 -0
  250. package/dist/types/parts/DSOpinionatedButton/react-desc-prop-types.d.ts +23 -0
  251. package/dist/types/react-desc-prop-types.d.ts +206 -41
  252. package/dist/types/utils/nodesTypeguardsAndGetters.d.ts +22 -0
  253. package/dist/types/utils/useOptionsArrayToDsTree.d.ts +8 -0
  254. package/package.json +18 -16
  255. package/dist/cjs/DSMenuButtonCTX.js.map +0 -7
  256. package/dist/cjs/parts/ItemFactory.js.map +0 -7
  257. package/dist/cjs/parts/Menu.js +0 -125
  258. package/dist/cjs/parts/Menu.js.map +0 -7
  259. package/dist/cjs/parts/MenuButtonContent.js +0 -156
  260. package/dist/cjs/parts/MenuButtonContent.js.map +0 -7
  261. package/dist/cjs/parts/MenuItem.js +0 -252
  262. package/dist/cjs/parts/MenuItem.js.map +0 -7
  263. package/dist/cjs/styled.js +0 -132
  264. package/dist/cjs/styled.js.map +0 -7
  265. package/dist/esm/DSMenuButtonCTX.js +0 -8
  266. package/dist/esm/DSMenuButtonCTX.js.map +0 -7
  267. package/dist/esm/parts/ItemFactory.js +0 -36
  268. package/dist/esm/parts/ItemFactory.js.map +0 -7
  269. package/dist/esm/parts/Menu.js +0 -95
  270. package/dist/esm/parts/Menu.js.map +0 -7
  271. package/dist/esm/parts/MenuButtonContent.js +0 -126
  272. package/dist/esm/parts/MenuButtonContent.js.map +0 -7
  273. package/dist/esm/parts/MenuItem.js +0 -229
  274. package/dist/esm/parts/MenuItem.js.map +0 -7
  275. package/dist/esm/styled.js +0 -102
  276. package/dist/esm/styled.js.map +0 -7
  277. package/dist/types/DSMenuButtonCTX.d.ts +0 -15
  278. package/dist/types/parts/ItemFactory.d.ts +0 -14
  279. package/dist/types/parts/Menu.d.ts +0 -14
  280. package/dist/types/parts/MenuButtonContent.d.ts +0 -1
  281. package/dist/types/parts/MenuItem.d.ts +0 -21
  282. package/dist/types/styled.d.ts +0 -16
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var nodeGettersByCriterias_exports = {};
30
+ __export(nodeGettersByCriterias_exports, {
31
+ getAllSingleSelectIdsFromParent: () => getAllSingleSelectIdsFromParent,
32
+ getChildrenByCriterias: () => getChildrenByCriterias,
33
+ getFocusableSiblingsList: () => getFocusableSiblingsList,
34
+ getParentsByCriterias: () => getParentsByCriterias,
35
+ getSubMenusPath: () => getSubMenusPath
36
+ });
37
+ module.exports = __toCommonJS(nodeGettersByCriterias_exports);
38
+ var React = __toESM(require("react"));
39
+ var import_nodesTypeguardsAndGetters = require("../../../utils/nodesTypeguardsAndGetters.js");
40
+ var import_Errors = require("../constants/Errors.js");
41
+ const getSubMenusPath = (itemNode) => {
42
+ const subMenuNodesPath = [];
43
+ itemNode.walkParents((node) => {
44
+ if (node.dsId === itemNode.dsId) return true;
45
+ if ((0, import_nodesTypeguardsAndGetters.isWithSubmenuNode)(node)) {
46
+ subMenuNodesPath.push(node);
47
+ }
48
+ return true;
49
+ });
50
+ return subMenuNodesPath.reverse();
51
+ };
52
+ const getFocusableSiblingsList = (itemNode) => {
53
+ const { parent: parentNode } = itemNode;
54
+ if (!parentNode) {
55
+ console.log("getFocusableSiblingsList > itemNode", itemNode);
56
+ throw import_Errors.UNEXPECTED_INTERNAL_ERRORS.NODE_WITHOUT_PARENT;
57
+ }
58
+ if (!(0, import_nodesTypeguardsAndGetters.isMenuNodeAllowedToHaveChildren)(parentNode)) {
59
+ console.log("parentNode", parentNode);
60
+ console.log("itemNode", itemNode);
61
+ throw import_Errors.TREE_STRUCTURE_ERRORS.NODE_CANNOT_HAVE_CHILDREN;
62
+ }
63
+ const focusableSiblingsNodes = [];
64
+ let parseableParentNode = parentNode;
65
+ if ((0, import_nodesTypeguardsAndGetters.isGroup)(parentNode)) {
66
+ if (!parentNode.parent) {
67
+ throw import_Errors.TREE_STRUCTURE_ERRORS.GROUP_WITHOUT_PARENT;
68
+ }
69
+ parseableParentNode = parentNode.parent;
70
+ }
71
+ parseableParentNode.children.forEach((node) => {
72
+ if ((0, import_nodesTypeguardsAndGetters.isFocusableNode)(node)) {
73
+ focusableSiblingsNodes.push(node);
74
+ }
75
+ if ((0, import_nodesTypeguardsAndGetters.isGroup)(node)) {
76
+ node.children.forEach((groupChild) => {
77
+ if ((0, import_nodesTypeguardsAndGetters.isFocusableNode)(groupChild)) {
78
+ focusableSiblingsNodes.push(groupChild);
79
+ }
80
+ });
81
+ }
82
+ });
83
+ return focusableSiblingsNodes;
84
+ };
85
+ const getAllSingleSelectIdsFromParent = (oldestParent) => {
86
+ const singleSelectionableItemsIds = [];
87
+ oldestParent.walk((node) => {
88
+ const typeCastedNode = node;
89
+ if ((0, import_nodesTypeguardsAndGetters.isSingleSelectNode)(typeCastedNode)) {
90
+ singleSelectionableItemsIds.push(node.dsId);
91
+ }
92
+ return true;
93
+ });
94
+ return singleSelectionableItemsIds;
95
+ };
96
+ const getParentsByCriterias = (menuNode) => {
97
+ let oldestGroupFoundSoFar;
98
+ const selectionableParentsWithSubmenu = [];
99
+ const groupParents = [];
100
+ menuNode.walkParents((node) => {
101
+ if (node.dsId === menuNode.dsId) return true;
102
+ const typeCastedNode = node;
103
+ if ((0, import_nodesTypeguardsAndGetters.isGroup)(typeCastedNode)) {
104
+ oldestGroupFoundSoFar = typeCastedNode;
105
+ groupParents.push(oldestGroupFoundSoFar);
106
+ return true;
107
+ }
108
+ if ((0, import_nodesTypeguardsAndGetters.isSelectionableWithSubmenuNode)(typeCastedNode)) {
109
+ selectionableParentsWithSubmenu.push(typeCastedNode);
110
+ return true;
111
+ }
112
+ return true;
113
+ });
114
+ if (!oldestGroupFoundSoFar) {
115
+ console.log("node:", menuNode);
116
+ console.log("parent:", menuNode.parent);
117
+ throw import_Errors.TREE_STRUCTURE_ERRORS.PARENT_NOT_GROUP;
118
+ }
119
+ return {
120
+ oldestGroup: oldestGroupFoundSoFar,
121
+ selectionableParentsWithSubmenu,
122
+ groupParents
123
+ };
124
+ };
125
+ const getChildrenByCriterias = (menuNode) => {
126
+ const selectionableChilrens = [];
127
+ const multiSelectionableChilrens = [];
128
+ menuNode.walk((node) => {
129
+ if (node.dsId === menuNode.dsId) return true;
130
+ const typeCastedNode = node;
131
+ if ((0, import_nodesTypeguardsAndGetters.isSelectionableNode)(typeCastedNode)) {
132
+ selectionableChilrens.push(typeCastedNode);
133
+ if ((0, import_nodesTypeguardsAndGetters.isMultipleSelectNode)(typeCastedNode)) {
134
+ multiSelectionableChilrens.push(typeCastedNode);
135
+ }
136
+ }
137
+ return true;
138
+ });
139
+ return {
140
+ selectionableChilrens,
141
+ multiSelectionableChilrens
142
+ };
143
+ };
144
+ //# sourceMappingURL=nodeGettersByCriterias.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/parts/DSMenuBehaviouralContextProvider/utils/nodeGettersByCriterias.ts", "../../../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["/* eslint-disable no-console */\n/* eslint-disable max-lines */\n/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport type { DSMenuButtonT } from '../../../react-desc-prop-types.js';\nimport {\n isFocusableNode,\n isGroup,\n isMenuNodeAllowedToHaveChildren,\n isMultipleSelectNode,\n isSelectionableNode,\n isSelectionableWithSubmenuNode,\n isSingleSelectNode,\n isWithSubmenuNode,\n} from '../../../utils/nodesTypeguardsAndGetters.js';\nimport { TREE_STRUCTURE_ERRORS, UNEXPECTED_INTERNAL_ERRORS } from '../constants/Errors.js';\n\nexport const getSubMenusPath = (itemNode: DSMenuButtonT.MenuNode) => {\n const subMenuNodesPath: DSMenuButtonT.WithSubmenuMenuNodes[] = [];\n itemNode.walkParents((node) => {\n // discards itself, we want the parents only\n if (node.dsId === itemNode.dsId) return true;\n if (isWithSubmenuNode(node)) {\n subMenuNodesPath.push(node);\n }\n return true;\n });\n return subMenuNodesPath.reverse();\n};\n\nexport const getFocusableSiblingsList = (itemNode: DSMenuButtonT.MenuNode) => {\n const { parent: parentNode } = itemNode;\n if (!parentNode) {\n console.log('getFocusableSiblingsList > itemNode', itemNode);\n throw UNEXPECTED_INTERNAL_ERRORS.NODE_WITHOUT_PARENT;\n }\n if (!isMenuNodeAllowedToHaveChildren(parentNode)) {\n // this should be impossible to reach, if this is reached, there is a bug in the code/validation checks\n console.log('parentNode', parentNode);\n console.log('itemNode', itemNode);\n throw TREE_STRUCTURE_ERRORS.NODE_CANNOT_HAVE_CHILDREN;\n }\n // each tree depth may be composed of a mix of focusable and non-focusable nodes\n // in particular, the parent node may be a group node which is not focusable but it's children are (and are visually siblings)\n // we need to do our calculations only on top of focusable nodes, and we also need to consider the scenario of a group node\n const focusableSiblingsNodes: DSMenuButtonT.PseudoFocusableMenuNodes[] = [];\n\n let parseableParentNode = parentNode;\n // nesting a group node inside another group node is not allowed\n // I could not find a supporting explicit statement in the WCAG standard,\n // but given how everything else is defined and graphically represented,\n // it's the only logical conclusion.\n // Nesting would result in nodes being visually siblings\n // but logically non-exclusively selectable,\n // which would be a contradiction of the visuals\n // so violating the WCAG standard for other reasons\n if (isGroup(parentNode)) {\n if (!parentNode.parent) {\n throw TREE_STRUCTURE_ERRORS.GROUP_WITHOUT_PARENT;\n }\n parseableParentNode = parentNode.parent;\n }\n\n parseableParentNode.children.forEach((node) => {\n if (isFocusableNode(node)) {\n focusableSiblingsNodes.push(node);\n }\n // if we encounter a group node we need to add it's children too\n // (which here is guaranteed because we checked it in the if statement above)\n if (isGroup(node)) {\n node.children.forEach((groupChild) => {\n if (isFocusableNode(groupChild)) {\n focusableSiblingsNodes.push(groupChild);\n }\n });\n }\n });\n\n return focusableSiblingsNodes;\n};\n\n/**\n * This functions walks the tree downwards starting from the oldest shared parent and returns all the single-selectable items ids\n * @param oldestParent - the oldest parent to start the walk from\n * @returns string | number[] - the list of all the single-selectable items ids starting from the oldest shared group\n */\nexport const getAllSingleSelectIdsFromParent = (oldestParent: DSMenuButtonT.MenuNodesAllowedToHaveChildren) => {\n const singleSelectionableItemsIds: (string | number)[] = [];\n oldestParent.walk((node) => {\n // DSTree typescript doesn't understand ethereogeneous subitems, so we need to typecast manually\n const typeCastedNode = node as unknown as\n | DSMenuButtonT.SingleSelectionableMenuNodes\n | DSMenuButtonT.MenuNodeSeparatorItem;\n // is the node is a single-selectable item, we add it to the list\n if (isSingleSelectNode(typeCastedNode)) {\n singleSelectionableItemsIds.push(node.dsId);\n }\n // we walk all the tree (from the shared group), we never shortcircuit\n return true;\n });\n return singleSelectionableItemsIds;\n};\n\n/**\n * walk all parents from a given node and gives back multiple supporting datastructures by different criterias\n *\n * @param menuNode\n * @returns {object} - an object holding different datastructures and information about the parents\n * @property {Object} oldestGroup - the oldest shared group\n * @property {Object[]} selectionableParentsWithSubmenu - the single/multiple selection parents with submenu\n * @property {Object[]} groupParents - all the 'groups' encountered while traversing the tree upwards\n */\nexport const getParentsByCriterias = (menuNode: DSMenuButtonT.MenuNode) => {\n // group\n let oldestGroupFoundSoFar: DSMenuButtonT.MenuNodeGroupItem;\n const selectionableParentsWithSubmenu: DSMenuButtonT.SelectionablesWithSubmenuMenuNodes[] = [];\n const groupParents: DSMenuButtonT.MenuNodeGroupItem[] = [];\n\n menuNode.walkParents((node) => {\n // discards itself, we want the parents only\n if (node.dsId === menuNode.dsId) return true;\n // DSTree is not able to understand ethereogeneous subitems, so we need to typecast manually\n const typeCastedNode = node as unknown as DSMenuButtonT.MenuNode;\n\n if (isGroup(typeCastedNode)) {\n oldestGroupFoundSoFar = typeCastedNode;\n groupParents.push(oldestGroupFoundSoFar);\n // nothing else to do in this walking step, returing true to continue the walk\n return true;\n }\n // we continue checking shared parents untill we see the pattern\n // group -> single-select-with-submenu -> group -> ...\n // the moment the parent of a group is not a single-select-with-submenu we can stop,\n // we have found the oldest shared group\n if (isSelectionableWithSubmenuNode(typeCastedNode)) {\n selectionableParentsWithSubmenu.push(typeCastedNode);\n return true;\n }\n // the node is not a single-select-with-submenu, we can stop the walk\n return true;\n });\n // if we found no group parent starting from menuNode, the tree is malformed\n // @ts-expect-error - typescript doesn't understand that \"walkParents\" actually executes the function synchronously\n // so it thinks that oldestGroupFoundSoFar was never assigned, it's a false positive\n if (!oldestGroupFoundSoFar) {\n console.log('node:', menuNode);\n console.log('parent:', menuNode.parent);\n throw TREE_STRUCTURE_ERRORS.PARENT_NOT_GROUP;\n }\n return {\n oldestGroup: oldestGroupFoundSoFar,\n selectionableParentsWithSubmenu,\n groupParents,\n };\n};\n\n/**\n * walk all childrens from a given node and gives back multiple supporting datastructures by different criterias\n *\n * @param menuNode\n * @returns {object} - an object holding different datastructures and information about the children\n * @property {Object[]} selectionableChilrens - the single/multiple selection children (regardless of the presence of a submenu)\n * @property {Object[]} multiSelectionableChilrens - the multiple selection children (regardless of the presence of a submenu)\n */\nexport const getChildrenByCriterias = (menuNode: DSMenuButtonT.MenuNode) => {\n const selectionableChilrens: DSMenuButtonT.SelectionableMenuNodes[] = [];\n const multiSelectionableChilrens: DSMenuButtonT.MultipleSelectionableMenuNodes[] = [];\n menuNode.walk((node) => {\n // discards itself, we want the children only\n if (node.dsId === menuNode.dsId) return true;\n // DSTree is not able to understand ethereogeneous subitems, so we need to typecast manually\n const typeCastedNode = node as unknown as DSMenuButtonT.MenuNode;\n if (isSelectionableNode(typeCastedNode)) {\n selectionableChilrens.push(typeCastedNode);\n if (isMultipleSelectNode(typeCastedNode)) {\n multiSelectionableChilrens.push(typeCastedNode);\n }\n }\n // we walk all the tree (from the shared group), we never shortcircuit\n return true;\n });\n return {\n selectionableChilrens,\n multiSelectionableChilrens,\n };\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var singleSelectionHelpers_exports = {};
30
+ __export(singleSelectionHelpers_exports, {
31
+ getNewSelectionSingleSelect: () => getNewSelectionSingleSelect
32
+ });
33
+ module.exports = __toCommonJS(singleSelectionHelpers_exports);
34
+ var React = __toESM(require("react"));
35
+ var import_nodeGettersByCriterias = require("./nodeGettersByCriterias.js");
36
+ const getNewSelectionSingleSelect = (selectedItems, selectedItem) => {
37
+ const { oldestGroup, selectionableParentsWithSubmenu } = (0, import_nodeGettersByCriterias.getParentsByCriterias)(selectedItem);
38
+ const itemsIdsToDeselect = (0, import_nodeGettersByCriterias.getAllSingleSelectIdsFromParent)(oldestGroup);
39
+ const newSelection = selectedItems.filter((item) => !itemsIdsToDeselect.includes(item.plainItem.dsId));
40
+ newSelection.push(...selectionableParentsWithSubmenu);
41
+ newSelection.push(selectedItem);
42
+ return newSelection;
43
+ };
44
+ //# sourceMappingURL=singleSelectionHelpers.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/parts/DSMenuBehaviouralContextProvider/utils/singleSelectionHelpers.ts", "../../../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import { type DSMenuButtonT } from '../../../react-desc-prop-types.js';\nimport { getAllSingleSelectIdsFromParent, getParentsByCriterias } from './nodeGettersByCriterias.js';\n\n/**\n * When a single-selectable item is selected, all other single-selectable items in the same group are deselected;\n *\n * If the (visual) parent is a single-select-with-submenu,\n * the selection must be propagated because\n * a single-select within a single-select-with-submenu can't be selected without implying the selection of the parent single-select-with-submenu\n *\n * @param selectedItems - the current selected items\n * @param selectedItem - the newly selected item\n * @returns DSMenuButtonT.SelectionableMenuNodes[] - the new selection\n */\nexport const getNewSelectionSingleSelect = (\n selectedItems: DSMenuButtonT.SelectionableMenuNodes[],\n selectedItem: DSMenuButtonT.MenuNodeSingleSelectItem | DSMenuButtonT.MenuNodeSingleSelectWithSubmenuItem,\n) => {\n const { oldestGroup, selectionableParentsWithSubmenu } = getParentsByCriterias(selectedItem);\n const itemsIdsToDeselect = getAllSingleSelectIdsFromParent(oldestGroup);\n // we remove all the ids of single selection parents from the previous selection\n const newSelection = selectedItems.filter((item) => !itemsIdsToDeselect.includes(item.plainItem.dsId));\n // we add all the parents submenus to the selection\n newSelection.push(...selectionableParentsWithSubmenu);\n // finally we add the newly selected item\n newSelection.push(selectedItem);\n\n return newSelection;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADCvB,oCAAuE;AAahE,MAAM,8BAA8B,CACzC,eACA,iBACG;AACH,QAAM,EAAE,aAAa,gCAAgC,QAAI,qDAAsB,YAAY;AAC3F,QAAM,yBAAqB,+DAAgC,WAAW;AAEtE,QAAM,eAAe,cAAc,OAAO,CAAC,SAAS,CAAC,mBAAmB,SAAS,KAAK,UAAU,IAAI,CAAC;AAErG,eAAa,KAAK,GAAG,+BAA+B;AAEpD,eAAa,KAAK,YAAY;AAE9B,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var ActivableMenuItem_exports = {};
30
+ __export(ActivableMenuItem_exports, {
31
+ ActivableMenuItem: () => ActivableMenuItem
32
+ });
33
+ module.exports = __toCommonJS(ActivableMenuItem_exports);
34
+ var React = __toESM(require("react"));
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var import_ds_menu_items_commons = require("@elliemae/ds-menu-items-commons");
37
+ var import_react = __toESM(require("react"));
38
+ var import_MenuBehaviouralContextProviderCTX = require("../DSMenuBehaviouralContextProvider/MenuBehaviouralContextProviderCTX.js");
39
+ var import_constants = require("../DSMenuBehaviouralContextProvider/constants/index.js");
40
+ const ActivableMenuItem = ({
41
+ itemNode
42
+ }) => {
43
+ const { dsId, plainItem } = itemNode;
44
+ const { label, secondaryLabel, leftDecoration: LeftDecComponent, minWidth, disabled } = plainItem;
45
+ const {
46
+ focusRegion,
47
+ menuItemEventsHandlers: {
48
+ handleFocusableMenuItemKeyDown,
49
+ handleFocusableMenuItemClick,
50
+ handleFocusableMenuItemOnMouseEnter,
51
+ handleMenuItemFocusReconciliation
52
+ }
53
+ } = import_react.default.useContext(import_MenuBehaviouralContextProviderCTX.MenuBehaviouralContextProviderContext);
54
+ const gridLayout = import_react.default.useMemo(() => {
55
+ const cols = LeftDecComponent ? ["min-content", "auto"] : ["auto"];
56
+ if (secondaryLabel) cols.push("auto");
57
+ return cols;
58
+ }, [LeftDecComponent, secondaryLabel]);
59
+ const focusedRegionPerformanceHelper = import_react.default.useRef(focusRegion);
60
+ focusedRegionPerformanceHelper.current = focusRegion;
61
+ const isFocused = focusRegion === import_constants.MENU_FOCUS_REGIONS.ITEM_BY_DSID(dsId);
62
+ const handleFocusOnRender = import_react.default.useCallback(
63
+ (node) => {
64
+ if (node && focusRegion === import_constants.MENU_FOCUS_REGIONS.ITEM_BY_DSID(dsId)) {
65
+ node.focus();
66
+ }
67
+ },
68
+ // we need to change the callback reference every time the focusRegion changes or else the focus will not be set
69
+ [dsId, focusRegion]
70
+ // we are using the "as='div'", typescript is not able to infer the correct type
71
+ // the logic here actually receives a ref to a HTMLDivElement,
72
+ // but the component must think this is a HTMLLIElement ref callback
73
+ );
74
+ const handleOnMouseEnter = import_react.default.useCallback(
75
+ (e) => {
76
+ handleFocusableMenuItemOnMouseEnter(itemNode, e);
77
+ },
78
+ [handleFocusableMenuItemOnMouseEnter, itemNode]
79
+ );
80
+ const handleOnFocusReconciliation = import_react.default.useCallback(() => {
81
+ handleMenuItemFocusReconciliation(itemNode);
82
+ }, [handleMenuItemFocusReconciliation, itemNode]);
83
+ const spacelessDsIdForDom = `ds-menu-item-${`${dsId}`.replace(/\s/g, "")}`;
84
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
85
+ import_ds_menu_items_commons.StyledGlobalMenuItemWrapper,
86
+ {
87
+ innerRef: handleFocusOnRender,
88
+ onKeyDown: handleFocusableMenuItemKeyDown,
89
+ onClick: handleFocusableMenuItemClick,
90
+ onMouseEnter: handleOnMouseEnter,
91
+ onFocus: handleOnFocusReconciliation,
92
+ as: "div",
93
+ id: `${spacelessDsIdForDom}`,
94
+ role: "menuitem",
95
+ tabIndex: isFocused ? 0 : -1,
96
+ "aria-disabled": disabled,
97
+ applyAriaDisabled: disabled,
98
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
99
+ import_ds_menu_items_commons.StyledContentWrapper,
100
+ {
101
+ cols: gridLayout,
102
+ minHeight: "16px",
103
+ gutter: "xxs",
104
+ alignItems: "center",
105
+ minWidth: minWidth ?? void 0,
106
+ children: [
107
+ LeftDecComponent ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LeftDecComponent, {}) : null,
108
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_menu_items_commons.StyleMenuItemLabel, { children: label }),
109
+ secondaryLabel !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_menu_items_commons.StyleMenuItemSecondaryLabel, { children: secondaryLabel })
110
+ ]
111
+ }
112
+ )
113
+ }
114
+ );
115
+ };
116
+ //# sourceMappingURL=ActivableMenuItem.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/parts/DSMenuItemRendererFactory/ActivableMenuItem.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["/* eslint-disable max-lines */\nimport {\n StyleMenuItemLabel,\n StyleMenuItemSecondaryLabel,\n StyledContentWrapper,\n StyledGlobalMenuItemWrapper,\n} from '@elliemae/ds-menu-items-commons';\nimport React from 'react';\nimport type { DSMenuButtonT } from '../../react-desc-prop-types.js';\nimport { MenuBehaviouralContextProviderContext } from '../DSMenuBehaviouralContextProvider/MenuBehaviouralContextProviderCTX.js';\nimport { MENU_FOCUS_REGIONS } from '../DSMenuBehaviouralContextProvider/constants/index.js';\n\nexport const ActivableMenuItem: React.ComponentType<{ itemNode: DSMenuButtonT.MenuNodeActivableItem }> = ({\n itemNode,\n}) => {\n const { dsId, plainItem } = itemNode;\n const { label, secondaryLabel, leftDecoration: LeftDecComponent, minWidth, disabled } = plainItem;\n\n const {\n focusRegion,\n menuItemEventsHandlers: {\n handleFocusableMenuItemKeyDown,\n handleFocusableMenuItemClick,\n handleFocusableMenuItemOnMouseEnter,\n handleMenuItemFocusReconciliation,\n },\n } = React.useContext(MenuBehaviouralContextProviderContext);\n\n const gridLayout = React.useMemo(() => {\n const cols = LeftDecComponent ? ['min-content', 'auto'] : ['auto'];\n if (secondaryLabel) cols.push('auto');\n return cols;\n }, [LeftDecComponent, secondaryLabel]);\n\n const focusedRegionPerformanceHelper = React.useRef(focusRegion);\n focusedRegionPerformanceHelper.current = focusRegion;\n\n const isFocused = focusRegion === MENU_FOCUS_REGIONS.ITEM_BY_DSID(dsId);\n\n const handleFocusOnRender = React.useCallback(\n (node: HTMLDivElement) => {\n if (node && focusRegion === MENU_FOCUS_REGIONS.ITEM_BY_DSID(dsId)) {\n node.focus();\n }\n },\n // we need to change the callback reference every time the focusRegion changes or else the focus will not be set\n [dsId, focusRegion],\n // we are using the \"as='div'\", typescript is not able to infer the correct type\n // the logic here actually receives a ref to a HTMLDivElement,\n // but the component must think this is a HTMLLIElement ref callback\n ) as unknown as React.RefCallback<HTMLLIElement>;\n const handleOnMouseEnter = React.useCallback<React.MouseEventHandler<HTMLDivElement>>(\n (e) => {\n handleFocusableMenuItemOnMouseEnter(itemNode, e);\n },\n [handleFocusableMenuItemOnMouseEnter, itemNode],\n );\n const handleOnFocusReconciliation = React.useCallback(() => {\n handleMenuItemFocusReconciliation(itemNode);\n }, [handleMenuItemFocusReconciliation, itemNode]);\n\n const spacelessDsIdForDom = `ds-menu-item-${`${dsId}`.replace(/\\s/g, '')}`;\n\n return (\n <StyledGlobalMenuItemWrapper\n innerRef={handleFocusOnRender}\n onKeyDown={handleFocusableMenuItemKeyDown}\n onClick={handleFocusableMenuItemClick}\n onMouseEnter={handleOnMouseEnter}\n onFocus={handleOnFocusReconciliation}\n as=\"div\"\n id={`${spacelessDsIdForDom}`}\n role=\"menuitem\"\n tabIndex={isFocused ? 0 : -1}\n aria-disabled={disabled}\n applyAriaDisabled={disabled}\n >\n <StyledContentWrapper\n cols={gridLayout}\n minHeight=\"16px\"\n gutter=\"xxs\"\n alignItems=\"center\"\n minWidth={minWidth ?? undefined}\n >\n {LeftDecComponent ? <LeftDecComponent /> : null}\n <StyleMenuItemLabel>{label}</StyleMenuItemLabel>\n {secondaryLabel !== undefined && <StyleMenuItemSecondaryLabel>{secondaryLabel}</StyleMenuItemSecondaryLabel>}\n </StyledContentWrapper>\n </StyledGlobalMenuItemWrapper>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;AD6EjB;AA5EN,mCAKO;AACP,mBAAkB;AAElB,+CAAsD;AACtD,uBAAmC;AAE5B,MAAM,oBAA4F,CAAC;AAAA,EACxG;AACF,MAAM;AACJ,QAAM,EAAE,MAAM,UAAU,IAAI;AAC5B,QAAM,EAAE,OAAO,gBAAgB,gBAAgB,kBAAkB,UAAU,SAAS,IAAI;AAExF,QAAM;AAAA,IACJ;AAAA,IACA,wBAAwB;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,IAAI,aAAAA,QAAM,WAAW,8EAAqC;AAE1D,QAAM,aAAa,aAAAA,QAAM,QAAQ,MAAM;AACrC,UAAM,OAAO,mBAAmB,CAAC,eAAe,MAAM,IAAI,CAAC,MAAM;AACjE,QAAI,eAAgB,MAAK,KAAK,MAAM;AACpC,WAAO;AAAA,EACT,GAAG,CAAC,kBAAkB,cAAc,CAAC;AAErC,QAAM,iCAAiC,aAAAA,QAAM,OAAO,WAAW;AAC/D,iCAA+B,UAAU;AAEzC,QAAM,YAAY,gBAAgB,oCAAmB,aAAa,IAAI;AAEtE,QAAM,sBAAsB,aAAAA,QAAM;AAAA,IAChC,CAAC,SAAyB;AACxB,UAAI,QAAQ,gBAAgB,oCAAmB,aAAa,IAAI,GAAG;AACjE,aAAK,MAAM;AAAA,MACb;AAAA,IACF;AAAA;AAAA,IAEA,CAAC,MAAM,WAAW;AAAA;AAAA;AAAA;AAAA,EAIpB;AACA,QAAM,qBAAqB,aAAAA,QAAM;AAAA,IAC/B,CAAC,MAAM;AACL,0CAAoC,UAAU,CAAC;AAAA,IACjD;AAAA,IACA,CAAC,qCAAqC,QAAQ;AAAA,EAChD;AACA,QAAM,8BAA8B,aAAAA,QAAM,YAAY,MAAM;AAC1D,sCAAkC,QAAQ;AAAA,EAC5C,GAAG,CAAC,mCAAmC,QAAQ,CAAC;AAEhD,QAAM,sBAAsB,gBAAgB,GAAG,IAAI,GAAG,QAAQ,OAAO,EAAE,CAAC;AAExE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU;AAAA,MACV,WAAW;AAAA,MACX,SAAS;AAAA,MACT,cAAc;AAAA,MACd,SAAS;AAAA,MACT,IAAG;AAAA,MACH,IAAI,GAAG,mBAAmB;AAAA,MAC1B,MAAK;AAAA,MACL,UAAU,YAAY,IAAI;AAAA,MAC1B,iBAAe;AAAA,MACf,mBAAmB;AAAA,MAEnB;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN,WAAU;AAAA,UACV,QAAO;AAAA,UACP,YAAW;AAAA,UACX,UAAU,YAAY;AAAA,UAErB;AAAA,+BAAmB,4CAAC,oBAAiB,IAAK;AAAA,YAC3C,4CAAC,mDAAoB,iBAAM;AAAA,YAC1B,mBAAmB,UAAa,4CAAC,4DAA6B,0BAAe;AAAA;AAAA;AAAA,MAChF;AAAA;AAAA,EACF;AAEJ;",
6
+ "names": ["React"]
7
+ }
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var ActivableWithSubmenuMenuItem_exports = {};
30
+ __export(ActivableWithSubmenuMenuItem_exports, {
31
+ ActivableWithSubmenuMenuItem: () => ActivableWithSubmenuMenuItem
32
+ });
33
+ module.exports = __toCommonJS(ActivableWithSubmenuMenuItem_exports);
34
+ var React = __toESM(require("react"));
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var import_ds_menu_items_commons = require("@elliemae/ds-menu-items-commons");
37
+ var import_react = __toESM(require("react"));
38
+ var import_ds_floating_context = require("@elliemae/ds-floating-context");
39
+ var import_MenuBehaviouralContextProviderCTX = require("../DSMenuBehaviouralContextProvider/MenuBehaviouralContextProviderCTX.js");
40
+ var import_constants = require("../DSMenuBehaviouralContextProvider/constants/index.js");
41
+ const placementOrderPreference = [
42
+ "right-start",
43
+ "right-start",
44
+ "right",
45
+ "left-start",
46
+ "left-end",
47
+ "left"
48
+ ];
49
+ const ActivableWithSubmenuMenuItem = ({ itemNode, FlyoutMenuCircularDepInject }) => {
50
+ const { dsId, plainItem } = itemNode;
51
+ const { label, secondaryLabel, leftDecoration: LeftDecComponent, minWidth, disabled } = plainItem;
52
+ const floatingContext = (0, import_ds_floating_context.useFloatingContext)({
53
+ placement: placementOrderPreference[0],
54
+ placementOrderPreference,
55
+ animationDuration: 100,
56
+ customOffset: [0, 0]
57
+ });
58
+ const {
59
+ refs: { setReference }
60
+ } = floatingContext;
61
+ const {
62
+ focusRegion,
63
+ openedSubItems,
64
+ menuItemEventsHandlers: {
65
+ handleFocusableMenuItemKeyDown,
66
+ handleFocusableMenuItemClick,
67
+ handleFocusableMenuItemOnMouseEnter,
68
+ handleMenuItemFocusReconciliation
69
+ }
70
+ } = import_react.default.useContext(import_MenuBehaviouralContextProviderCTX.MenuBehaviouralContextProviderContext);
71
+ const gridLayout = import_react.default.useMemo(() => {
72
+ const cols = LeftDecComponent ? ["min-content", "auto"] : ["auto"];
73
+ if (secondaryLabel) cols.push("auto");
74
+ return cols;
75
+ }, [LeftDecComponent, secondaryLabel]);
76
+ const focusedRegionPerformanceHelper = import_react.default.useRef(focusRegion);
77
+ focusedRegionPerformanceHelper.current = focusRegion;
78
+ const isExpanded = openedSubItems.some((itemWithOpenSubmenu) => itemWithOpenSubmenu.dsId === dsId);
79
+ const isFocused = focusRegion === import_constants.MENU_FOCUS_REGIONS.ITEM_BY_DSID(dsId);
80
+ const handleFocusOnRender = import_react.default.useCallback(
81
+ (node) => {
82
+ setReference(node);
83
+ if (node && focusRegion === import_constants.MENU_FOCUS_REGIONS.ITEM_BY_DSID(dsId)) {
84
+ node.focus();
85
+ }
86
+ },
87
+ // we need to change the callback reference every time the focusRegion changes or else the focus will not be set
88
+ [dsId, focusRegion, setReference]
89
+ // we are using the "as='div'", typescript is not able to infer the correct type
90
+ // the logic here actually receives a ref to a HTMLDivElement,
91
+ // but the component must think this is a HTMLLIElement ref callback
92
+ );
93
+ const handleOnMouseEnter = import_react.default.useCallback(
94
+ (e) => {
95
+ handleFocusableMenuItemOnMouseEnter(itemNode, e);
96
+ },
97
+ [handleFocusableMenuItemOnMouseEnter, itemNode]
98
+ );
99
+ const handleOnFocusReconciliation = import_react.default.useCallback(() => {
100
+ handleMenuItemFocusReconciliation(itemNode);
101
+ }, [handleMenuItemFocusReconciliation, itemNode]);
102
+ const spacelessDsIdForDom = `ds-menu-item-${`${dsId}`.replace(/\s/g, "")}`;
103
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
104
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
105
+ import_ds_menu_items_commons.StyledGlobalMenuItemWrapper,
106
+ {
107
+ innerRef: handleFocusOnRender,
108
+ onKeyDown: handleFocusableMenuItemKeyDown,
109
+ onClick: handleFocusableMenuItemClick,
110
+ onMouseEnter: handleOnMouseEnter,
111
+ onFocus: handleOnFocusReconciliation,
112
+ as: "div",
113
+ id: `${spacelessDsIdForDom}`,
114
+ tabIndex: isFocused ? 0 : -1,
115
+ role: "menuitem",
116
+ "aria-controls": (
117
+ /* ********************************************************************************************************************
118
+ * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-controls
119
+ * The aria-controls only needs to be set when the popup is visible, but it is valid and easier to program to reference an element that is not visible.
120
+ * ********************************************************************************************************************
121
+ * ^^^ some automated tools will mark an error if the aria-controls references an element that does (yet) exist in the DOM
122
+ * so, while technically valid to not check if expanded, we are doing it to avoid automated tools marking an error
123
+ * ******************************************************************************************************************** */
124
+ isExpanded ? itemNode.plainChildren.map((child) => `ds-menu-item-${`${child.dsId}`.replace(/\s/g, "")}`).join(" ") : void 0
125
+ ),
126
+ "aria-haspopup": "menu",
127
+ "aria-expanded": isExpanded,
128
+ "aria-disabled": disabled,
129
+ applyAriaDisabled: disabled,
130
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
131
+ import_ds_menu_items_commons.StyledContentWrapper,
132
+ {
133
+ cols: gridLayout,
134
+ minHeight: "16px",
135
+ gutter: "xxs",
136
+ alignItems: "center",
137
+ minWidth: minWidth ?? void 0,
138
+ children: [
139
+ LeftDecComponent ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LeftDecComponent, {}) : null,
140
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_menu_items_commons.StyleMenuItemLabel, { children: label }),
141
+ secondaryLabel !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_menu_items_commons.StyleMenuItemSecondaryLabel, { children: secondaryLabel })
142
+ ]
143
+ }
144
+ )
145
+ }
146
+ ),
147
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
148
+ FlyoutMenuCircularDepInject,
149
+ {
150
+ isMenuOpen: isExpanded,
151
+ floatingContext: floatingContext.context,
152
+ floatingStyles: floatingContext.floatingStyles,
153
+ setFloatingRef: floatingContext.refs.setFloating,
154
+ itemNode
155
+ }
156
+ )
157
+ ] });
158
+ };
159
+ //# sourceMappingURL=ActivableWithSubmenuMenuItem.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/parts/DSMenuItemRendererFactory/ActivableWithSubmenuMenuItem.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["/* eslint-disable max-lines */\nimport {\n StyleMenuItemLabel,\n StyleMenuItemSecondaryLabel,\n StyledContentWrapper,\n StyledGlobalMenuItemWrapper,\n} from '@elliemae/ds-menu-items-commons';\nimport React from 'react';\nimport { useFloatingContext, type DSHookFloatingContextT } from '@elliemae/ds-floating-context';\nimport type { DSMenuButtonT } from '../../react-desc-prop-types.js';\nimport { MenuBehaviouralContextProviderContext } from '../DSMenuBehaviouralContextProvider/MenuBehaviouralContextProviderCTX.js';\nimport { MENU_FOCUS_REGIONS } from '../DSMenuBehaviouralContextProvider/constants/index.js';\nimport { type DSMenuItemRendererFactoryT } from './react-desc-prop-types.js';\nconst placementOrderPreference: Required<DSHookFloatingContextT.Props>['placementOrderPreference'] = [\n 'right-start',\n 'right-start',\n 'right',\n 'left-start',\n 'left-end',\n 'left',\n];\nexport const ActivableWithSubmenuMenuItem: React.ComponentType<{\n itemNode: DSMenuButtonT.MenuNodeActivableWithSubmenuItem;\n FlyoutMenuCircularDepInject: DSMenuItemRendererFactoryT.RequiredProps['FlyoutMenuCircularDepInject'];\n}> = ({ itemNode, FlyoutMenuCircularDepInject }) => {\n const { dsId, plainItem } = itemNode;\n const { label, secondaryLabel, leftDecoration: LeftDecComponent, minWidth, disabled } = plainItem;\n const floatingContext = useFloatingContext({\n placement: placementOrderPreference[0],\n placementOrderPreference,\n animationDuration: 100,\n customOffset: [0, 0],\n });\n const {\n refs: { setReference },\n } = floatingContext;\n\n const {\n focusRegion,\n openedSubItems,\n menuItemEventsHandlers: {\n handleFocusableMenuItemKeyDown,\n handleFocusableMenuItemClick,\n handleFocusableMenuItemOnMouseEnter,\n handleMenuItemFocusReconciliation,\n },\n } = React.useContext(MenuBehaviouralContextProviderContext);\n\n const gridLayout = React.useMemo(() => {\n const cols = LeftDecComponent ? ['min-content', 'auto'] : ['auto'];\n if (secondaryLabel) cols.push('auto');\n return cols;\n }, [LeftDecComponent, secondaryLabel]);\n\n const focusedRegionPerformanceHelper = React.useRef(focusRegion);\n focusedRegionPerformanceHelper.current = focusRegion;\n\n const isExpanded = openedSubItems.some((itemWithOpenSubmenu) => itemWithOpenSubmenu.dsId === dsId);\n const isFocused = focusRegion === MENU_FOCUS_REGIONS.ITEM_BY_DSID(dsId);\n\n const handleFocusOnRender = React.useCallback(\n (node: HTMLDivElement) => {\n setReference(node);\n if (node && focusRegion === MENU_FOCUS_REGIONS.ITEM_BY_DSID(dsId)) {\n node.focus();\n }\n },\n // we need to change the callback reference every time the focusRegion changes or else the focus will not be set\n [dsId, focusRegion, setReference],\n // we are using the \"as='div'\", typescript is not able to infer the correct type\n // the logic here actually receives a ref to a HTMLDivElement,\n // but the component must think this is a HTMLLIElement ref callback\n ) as unknown as React.RefCallback<HTMLLIElement>;\n\n const handleOnMouseEnter = React.useCallback<React.MouseEventHandler<HTMLDivElement>>(\n (e) => {\n handleFocusableMenuItemOnMouseEnter(itemNode, e);\n },\n [handleFocusableMenuItemOnMouseEnter, itemNode],\n );\n const handleOnFocusReconciliation = React.useCallback(() => {\n handleMenuItemFocusReconciliation(itemNode);\n }, [handleMenuItemFocusReconciliation, itemNode]);\n\n const spacelessDsIdForDom = `ds-menu-item-${`${dsId}`.replace(/\\s/g, '')}`;\n return (\n <>\n <StyledGlobalMenuItemWrapper\n innerRef={handleFocusOnRender}\n onKeyDown={handleFocusableMenuItemKeyDown}\n onClick={handleFocusableMenuItemClick}\n onMouseEnter={handleOnMouseEnter}\n onFocus={handleOnFocusReconciliation}\n as=\"div\"\n id={`${spacelessDsIdForDom}`}\n tabIndex={isFocused ? 0 : -1}\n role=\"menuitem\"\n aria-controls={\n /* ********************************************************************************************************************\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-controls\n * The aria-controls only needs to be set when the popup is visible, but it is valid and easier to program to reference an element that is not visible.\n * ********************************************************************************************************************\n * ^^^ some automated tools will mark an error if the aria-controls references an element that does (yet) exist in the DOM\n * so, while technically valid to not check if expanded, we are doing it to avoid automated tools marking an error\n * ******************************************************************************************************************** */\n isExpanded\n ? itemNode.plainChildren.map((child) => `ds-menu-item-${`${child.dsId}`.replace(/\\s/g, '')}`).join(' ')\n : undefined\n }\n aria-haspopup=\"menu\"\n aria-expanded={isExpanded}\n aria-disabled={disabled}\n applyAriaDisabled={disabled}\n >\n <StyledContentWrapper\n cols={gridLayout}\n minHeight=\"16px\"\n gutter=\"xxs\"\n alignItems=\"center\"\n minWidth={minWidth ?? undefined}\n >\n {LeftDecComponent ? <LeftDecComponent /> : null}\n <StyleMenuItemLabel>{label}</StyleMenuItemLabel>\n {secondaryLabel !== undefined && <StyleMenuItemSecondaryLabel>{secondaryLabel}</StyleMenuItemSecondaryLabel>}\n </StyledContentWrapper>\n </StyledGlobalMenuItemWrapper>\n <FlyoutMenuCircularDepInject\n isMenuOpen={isExpanded}\n floatingContext={floatingContext.context}\n floatingStyles={floatingContext.floatingStyles}\n setFloatingRef={floatingContext.refs.setFloating}\n itemNode={itemNode}\n />\n </>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADsFnB;AArFJ,mCAKO;AACP,mBAAkB;AAClB,iCAAgE;AAEhE,+CAAsD;AACtD,uBAAmC;AAEnC,MAAM,2BAA+F;AAAA,EACnG;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACO,MAAM,+BAGR,CAAC,EAAE,UAAU,4BAA4B,MAAM;AAClD,QAAM,EAAE,MAAM,UAAU,IAAI;AAC5B,QAAM,EAAE,OAAO,gBAAgB,gBAAgB,kBAAkB,UAAU,SAAS,IAAI;AACxF,QAAM,sBAAkB,+CAAmB;AAAA,IACzC,WAAW,yBAAyB,CAAC;AAAA,IACrC;AAAA,IACA,mBAAmB;AAAA,IACnB,cAAc,CAAC,GAAG,CAAC;AAAA,EACrB,CAAC;AACD,QAAM;AAAA,IACJ,MAAM,EAAE,aAAa;AAAA,EACvB,IAAI;AAEJ,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,wBAAwB;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,IAAI,aAAAA,QAAM,WAAW,8EAAqC;AAE1D,QAAM,aAAa,aAAAA,QAAM,QAAQ,MAAM;AACrC,UAAM,OAAO,mBAAmB,CAAC,eAAe,MAAM,IAAI,CAAC,MAAM;AACjE,QAAI,eAAgB,MAAK,KAAK,MAAM;AACpC,WAAO;AAAA,EACT,GAAG,CAAC,kBAAkB,cAAc,CAAC;AAErC,QAAM,iCAAiC,aAAAA,QAAM,OAAO,WAAW;AAC/D,iCAA+B,UAAU;AAEzC,QAAM,aAAa,eAAe,KAAK,CAAC,wBAAwB,oBAAoB,SAAS,IAAI;AACjG,QAAM,YAAY,gBAAgB,oCAAmB,aAAa,IAAI;AAEtE,QAAM,sBAAsB,aAAAA,QAAM;AAAA,IAChC,CAAC,SAAyB;AACxB,mBAAa,IAAI;AACjB,UAAI,QAAQ,gBAAgB,oCAAmB,aAAa,IAAI,GAAG;AACjE,aAAK,MAAM;AAAA,MACb;AAAA,IACF;AAAA;AAAA,IAEA,CAAC,MAAM,aAAa,YAAY;AAAA;AAAA;AAAA;AAAA,EAIlC;AAEA,QAAM,qBAAqB,aAAAA,QAAM;AAAA,IAC/B,CAAC,MAAM;AACL,0CAAoC,UAAU,CAAC;AAAA,IACjD;AAAA,IACA,CAAC,qCAAqC,QAAQ;AAAA,EAChD;AACA,QAAM,8BAA8B,aAAAA,QAAM,YAAY,MAAM;AAC1D,sCAAkC,QAAQ;AAAA,EAC5C,GAAG,CAAC,mCAAmC,QAAQ,CAAC;AAEhD,QAAM,sBAAsB,gBAAgB,GAAG,IAAI,GAAG,QAAQ,OAAO,EAAE,CAAC;AACxE,SACE,4EACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,UAAU;AAAA,QACV,WAAW;AAAA,QACX,SAAS;AAAA,QACT,cAAc;AAAA,QACd,SAAS;AAAA,QACT,IAAG;AAAA,QACH,IAAI,GAAG,mBAAmB;AAAA,QAC1B,UAAU,YAAY,IAAI;AAAA,QAC1B,MAAK;AAAA,QACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAQE,aACI,SAAS,cAAc,IAAI,CAAC,UAAU,gBAAgB,GAAG,MAAM,IAAI,GAAG,QAAQ,OAAO,EAAE,CAAC,EAAE,EAAE,KAAK,GAAG,IACpG;AAAA;AAAA,QAEN,iBAAc;AAAA,QACd,iBAAe;AAAA,QACf,iBAAe;AAAA,QACf,mBAAmB;AAAA,QAEnB;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN,WAAU;AAAA,YACV,QAAO;AAAA,YACP,YAAW;AAAA,YACX,UAAU,YAAY;AAAA,YAErB;AAAA,iCAAmB,4CAAC,oBAAiB,IAAK;AAAA,cAC3C,4CAAC,mDAAoB,iBAAM;AAAA,cAC1B,mBAAmB,UAAa,4CAAC,4DAA6B,0BAAe;AAAA;AAAA;AAAA,QAChF;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,YAAY;AAAA,QACZ,iBAAiB,gBAAgB;AAAA,QACjC,gBAAgB,gBAAgB;AAAA,QAChC,gBAAgB,gBAAgB,KAAK;AAAA,QACrC;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;",
6
+ "names": ["React"]
7
+ }