@elliemae/ds-legacy-left-navigation 1.0.0-rc.1

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 (248) hide show
  1. package/dist/cjs/LeftNavigation.js +51 -0
  2. package/dist/cjs/LeftNavigation.js.map +7 -0
  3. package/dist/cjs/LeftNavigationContext.js +70 -0
  4. package/dist/cjs/LeftNavigationContext.js.map +7 -0
  5. package/dist/cjs/common/getItemBackgroundStyle.js +57 -0
  6. package/dist/cjs/common/getItemBackgroundStyle.js.map +7 -0
  7. package/dist/cjs/common/getLeftBorderStyle.js +59 -0
  8. package/dist/cjs/common/getLeftBorderStyle.js.map +7 -0
  9. package/dist/cjs/common/getScrollbarStyle.js +59 -0
  10. package/dist/cjs/common/getScrollbarStyle.js.map +7 -0
  11. package/dist/cjs/common/index.js +32 -0
  12. package/dist/cjs/common/index.js.map +7 -0
  13. package/dist/cjs/configs/index.js +39 -0
  14. package/dist/cjs/configs/index.js.map +7 -0
  15. package/dist/cjs/configs/useLeftNavConfig.js +127 -0
  16. package/dist/cjs/configs/useLeftNavConfig.js.map +7 -0
  17. package/dist/cjs/configs/useLeftNavItems.js +85 -0
  18. package/dist/cjs/configs/useLeftNavItems.js.map +7 -0
  19. package/dist/cjs/configs/useLeftNavSmoothExpand.js +57 -0
  20. package/dist/cjs/configs/useLeftNavSmoothExpand.js.map +7 -0
  21. package/dist/cjs/constants/constants.js +68 -0
  22. package/dist/cjs/constants/constants.js.map +7 -0
  23. package/dist/cjs/constants/index.js +30 -0
  24. package/dist/cjs/constants/index.js.map +7 -0
  25. package/dist/cjs/exported-related/ChevronItem/index.js +40 -0
  26. package/dist/cjs/exported-related/ChevronItem/index.js.map +7 -0
  27. package/dist/cjs/exported-related/Icon/index.js +50 -0
  28. package/dist/cjs/exported-related/Icon/index.js.map +7 -0
  29. package/dist/cjs/exported-related/ItemRenderer/index.js +133 -0
  30. package/dist/cjs/exported-related/ItemRenderer/index.js.map +7 -0
  31. package/dist/cjs/exported-related/ItemRenderer/styled.js +107 -0
  32. package/dist/cjs/exported-related/ItemRenderer/styled.js.map +7 -0
  33. package/dist/cjs/exported-related/ItemRenderer/usePropsWithDefaults.js +69 -0
  34. package/dist/cjs/exported-related/ItemRenderer/usePropsWithDefaults.js.map +7 -0
  35. package/dist/cjs/exported-related/Notifications/index.js +62 -0
  36. package/dist/cjs/exported-related/Notifications/index.js.map +7 -0
  37. package/dist/cjs/exported-related/OpenWindowItem/index.js +47 -0
  38. package/dist/cjs/exported-related/OpenWindowItem/index.js.map +7 -0
  39. package/dist/cjs/exported-related/constants.js +71 -0
  40. package/dist/cjs/exported-related/constants.js.map +7 -0
  41. package/dist/cjs/exported-related/index.js +35 -0
  42. package/dist/cjs/exported-related/index.js.map +7 -0
  43. package/dist/cjs/hooks/index.js +32 -0
  44. package/dist/cjs/hooks/index.js.map +7 -0
  45. package/dist/cjs/hooks/useExpandableOnClickHandler.js +74 -0
  46. package/dist/cjs/hooks/useExpandableOnClickHandler.js.map +7 -0
  47. package/dist/cjs/hooks/useKeyboardNavigation.js +128 -0
  48. package/dist/cjs/hooks/useKeyboardNavigation.js.map +7 -0
  49. package/dist/cjs/hooks/useOpenableOnClickHandler.js +82 -0
  50. package/dist/cjs/hooks/useOpenableOnClickHandler.js.map +7 -0
  51. package/dist/cjs/hooks/useSelectFirstBodyItem.js +53 -0
  52. package/dist/cjs/hooks/useSelectFirstBodyItem.js.map +7 -0
  53. package/dist/cjs/index.js +46 -0
  54. package/dist/cjs/index.js.map +7 -0
  55. package/dist/cjs/outOfTheBox/ItemControlledDrilldown/index.js +147 -0
  56. package/dist/cjs/outOfTheBox/ItemControlledDrilldown/index.js.map +7 -0
  57. package/dist/cjs/outOfTheBox/ItemHeader/index.js +169 -0
  58. package/dist/cjs/outOfTheBox/ItemHeader/index.js.map +7 -0
  59. package/dist/cjs/outOfTheBox/ItemLink/index.js +102 -0
  60. package/dist/cjs/outOfTheBox/ItemLink/index.js.map +7 -0
  61. package/dist/cjs/outOfTheBox/ItemSection/index.js +83 -0
  62. package/dist/cjs/outOfTheBox/ItemSection/index.js.map +7 -0
  63. package/dist/cjs/outOfTheBox/ItemSeparator/index.js +68 -0
  64. package/dist/cjs/outOfTheBox/ItemSeparator/index.js.map +7 -0
  65. package/dist/cjs/outOfTheBox/ItemSkeleton/index.js +78 -0
  66. package/dist/cjs/outOfTheBox/ItemSkeleton/index.js.map +7 -0
  67. package/dist/cjs/outOfTheBox/ItemSubmenu/index.js +173 -0
  68. package/dist/cjs/outOfTheBox/ItemSubmenu/index.js.map +7 -0
  69. package/dist/cjs/outOfTheBox/ItemTextLabel/index.js +79 -0
  70. package/dist/cjs/outOfTheBox/ItemTextLabel/index.js.map +7 -0
  71. package/dist/cjs/outOfTheBox/ItemUncontrolledDrilldown/index.js +162 -0
  72. package/dist/cjs/outOfTheBox/ItemUncontrolledDrilldown/index.js.map +7 -0
  73. package/dist/cjs/outOfTheBox/ItemWithDate/index.js +101 -0
  74. package/dist/cjs/outOfTheBox/ItemWithDate/index.js.map +7 -0
  75. package/dist/cjs/outOfTheBox/index.js +83 -0
  76. package/dist/cjs/outOfTheBox/index.js.map +7 -0
  77. package/dist/cjs/outOfTheBox/styled.js +126 -0
  78. package/dist/cjs/outOfTheBox/styled.js.map +7 -0
  79. package/dist/cjs/package.json +4 -0
  80. package/dist/cjs/parts/LeftNavContent/index.js +158 -0
  81. package/dist/cjs/parts/LeftNavContent/index.js.map +7 -0
  82. package/dist/cjs/parts/LeftNavContent/styled.js +107 -0
  83. package/dist/cjs/parts/LeftNavContent/styled.js.map +7 -0
  84. package/dist/cjs/parts/LeftNavFooterItem/index.js +138 -0
  85. package/dist/cjs/parts/LeftNavFooterItem/index.js.map +7 -0
  86. package/dist/cjs/parts/LeftNavFooterItem/styled.js +102 -0
  87. package/dist/cjs/parts/LeftNavFooterItem/styled.js.map +7 -0
  88. package/dist/cjs/parts/LeftNavLoading/index.js +55 -0
  89. package/dist/cjs/parts/LeftNavLoading/index.js.map +7 -0
  90. package/dist/cjs/parts/OutOfTheBoxMapItem.js +59 -0
  91. package/dist/cjs/parts/OutOfTheBoxMapItem.js.map +7 -0
  92. package/dist/cjs/react-desc-prop-types.js +74 -0
  93. package/dist/cjs/react-desc-prop-types.js.map +7 -0
  94. package/dist/cjs/typescript-testing/typescript-left-navigation-valid.js +186 -0
  95. package/dist/cjs/typescript-testing/typescript-left-navigation-valid.js.map +7 -0
  96. package/dist/esm/LeftNavigation.js +21 -0
  97. package/dist/esm/LeftNavigation.js.map +7 -0
  98. package/dist/esm/LeftNavigationContext.js +40 -0
  99. package/dist/esm/LeftNavigationContext.js.map +7 -0
  100. package/dist/esm/common/getItemBackgroundStyle.js +27 -0
  101. package/dist/esm/common/getItemBackgroundStyle.js.map +7 -0
  102. package/dist/esm/common/getLeftBorderStyle.js +29 -0
  103. package/dist/esm/common/getLeftBorderStyle.js.map +7 -0
  104. package/dist/esm/common/getScrollbarStyle.js +29 -0
  105. package/dist/esm/common/getScrollbarStyle.js.map +7 -0
  106. package/dist/esm/common/index.js +5 -0
  107. package/dist/esm/common/index.js.map +7 -0
  108. package/dist/esm/configs/index.js +9 -0
  109. package/dist/esm/configs/index.js.map +7 -0
  110. package/dist/esm/configs/useLeftNavConfig.js +97 -0
  111. package/dist/esm/configs/useLeftNavConfig.js.map +7 -0
  112. package/dist/esm/configs/useLeftNavItems.js +55 -0
  113. package/dist/esm/configs/useLeftNavItems.js.map +7 -0
  114. package/dist/esm/configs/useLeftNavSmoothExpand.js +27 -0
  115. package/dist/esm/configs/useLeftNavSmoothExpand.js.map +7 -0
  116. package/dist/esm/constants/constants.js +38 -0
  117. package/dist/esm/constants/constants.js.map +7 -0
  118. package/dist/esm/constants/index.js +3 -0
  119. package/dist/esm/constants/index.js.map +7 -0
  120. package/dist/esm/exported-related/ChevronItem/index.js +10 -0
  121. package/dist/esm/exported-related/ChevronItem/index.js.map +7 -0
  122. package/dist/esm/exported-related/Icon/index.js +20 -0
  123. package/dist/esm/exported-related/Icon/index.js.map +7 -0
  124. package/dist/esm/exported-related/ItemRenderer/index.js +103 -0
  125. package/dist/esm/exported-related/ItemRenderer/index.js.map +7 -0
  126. package/dist/esm/exported-related/ItemRenderer/styled.js +77 -0
  127. package/dist/esm/exported-related/ItemRenderer/styled.js.map +7 -0
  128. package/dist/esm/exported-related/ItemRenderer/usePropsWithDefaults.js +39 -0
  129. package/dist/esm/exported-related/ItemRenderer/usePropsWithDefaults.js.map +7 -0
  130. package/dist/esm/exported-related/Notifications/index.js +37 -0
  131. package/dist/esm/exported-related/Notifications/index.js.map +7 -0
  132. package/dist/esm/exported-related/OpenWindowItem/index.js +17 -0
  133. package/dist/esm/exported-related/OpenWindowItem/index.js.map +7 -0
  134. package/dist/esm/exported-related/constants.js +41 -0
  135. package/dist/esm/exported-related/constants.js.map +7 -0
  136. package/dist/esm/exported-related/index.js +8 -0
  137. package/dist/esm/exported-related/index.js.map +7 -0
  138. package/dist/esm/hooks/index.js +5 -0
  139. package/dist/esm/hooks/index.js.map +7 -0
  140. package/dist/esm/hooks/useExpandableOnClickHandler.js +44 -0
  141. package/dist/esm/hooks/useExpandableOnClickHandler.js.map +7 -0
  142. package/dist/esm/hooks/useKeyboardNavigation.js +98 -0
  143. package/dist/esm/hooks/useKeyboardNavigation.js.map +7 -0
  144. package/dist/esm/hooks/useOpenableOnClickHandler.js +52 -0
  145. package/dist/esm/hooks/useOpenableOnClickHandler.js.map +7 -0
  146. package/dist/esm/hooks/useSelectFirstBodyItem.js +23 -0
  147. package/dist/esm/hooks/useSelectFirstBodyItem.js.map +7 -0
  148. package/dist/esm/index.js +15 -0
  149. package/dist/esm/index.js.map +7 -0
  150. package/dist/esm/outOfTheBox/ItemControlledDrilldown/index.js +117 -0
  151. package/dist/esm/outOfTheBox/ItemControlledDrilldown/index.js.map +7 -0
  152. package/dist/esm/outOfTheBox/ItemHeader/index.js +145 -0
  153. package/dist/esm/outOfTheBox/ItemHeader/index.js.map +7 -0
  154. package/dist/esm/outOfTheBox/ItemLink/index.js +72 -0
  155. package/dist/esm/outOfTheBox/ItemLink/index.js.map +7 -0
  156. package/dist/esm/outOfTheBox/ItemSection/index.js +59 -0
  157. package/dist/esm/outOfTheBox/ItemSection/index.js.map +7 -0
  158. package/dist/esm/outOfTheBox/ItemSeparator/index.js +38 -0
  159. package/dist/esm/outOfTheBox/ItemSeparator/index.js.map +7 -0
  160. package/dist/esm/outOfTheBox/ItemSkeleton/index.js +48 -0
  161. package/dist/esm/outOfTheBox/ItemSkeleton/index.js.map +7 -0
  162. package/dist/esm/outOfTheBox/ItemSubmenu/index.js +149 -0
  163. package/dist/esm/outOfTheBox/ItemSubmenu/index.js.map +7 -0
  164. package/dist/esm/outOfTheBox/ItemTextLabel/index.js +49 -0
  165. package/dist/esm/outOfTheBox/ItemTextLabel/index.js.map +7 -0
  166. package/dist/esm/outOfTheBox/ItemUncontrolledDrilldown/index.js +132 -0
  167. package/dist/esm/outOfTheBox/ItemUncontrolledDrilldown/index.js.map +7 -0
  168. package/dist/esm/outOfTheBox/ItemWithDate/index.js +71 -0
  169. package/dist/esm/outOfTheBox/ItemWithDate/index.js.map +7 -0
  170. package/dist/esm/outOfTheBox/index.js +52 -0
  171. package/dist/esm/outOfTheBox/index.js.map +7 -0
  172. package/dist/esm/outOfTheBox/styled.js +96 -0
  173. package/dist/esm/outOfTheBox/styled.js.map +7 -0
  174. package/dist/esm/package.json +4 -0
  175. package/dist/esm/parts/LeftNavContent/index.js +135 -0
  176. package/dist/esm/parts/LeftNavContent/index.js.map +7 -0
  177. package/dist/esm/parts/LeftNavContent/styled.js +77 -0
  178. package/dist/esm/parts/LeftNavContent/styled.js.map +7 -0
  179. package/dist/esm/parts/LeftNavFooterItem/index.js +114 -0
  180. package/dist/esm/parts/LeftNavFooterItem/index.js.map +7 -0
  181. package/dist/esm/parts/LeftNavFooterItem/styled.js +72 -0
  182. package/dist/esm/parts/LeftNavFooterItem/styled.js.map +7 -0
  183. package/dist/esm/parts/LeftNavLoading/index.js +25 -0
  184. package/dist/esm/parts/LeftNavLoading/index.js.map +7 -0
  185. package/dist/esm/parts/OutOfTheBoxMapItem.js +29 -0
  186. package/dist/esm/parts/OutOfTheBoxMapItem.js.map +7 -0
  187. package/dist/esm/react-desc-prop-types.js +44 -0
  188. package/dist/esm/react-desc-prop-types.js.map +7 -0
  189. package/dist/esm/typescript-testing/typescript-left-navigation-valid.js +163 -0
  190. package/dist/esm/typescript-testing/typescript-left-navigation-valid.js.map +7 -0
  191. package/dist/types/LeftNavigation.d.ts +9 -0
  192. package/dist/types/LeftNavigationContext.d.ts +21 -0
  193. package/dist/types/common/getItemBackgroundStyle.d.ts +6 -0
  194. package/dist/types/common/getLeftBorderStyle.d.ts +6 -0
  195. package/dist/types/common/getScrollbarStyle.d.ts +1 -0
  196. package/dist/types/common/index.d.ts +3 -0
  197. package/dist/types/configs/index.d.ts +3 -0
  198. package/dist/types/configs/useLeftNavConfig.d.ts +17 -0
  199. package/dist/types/configs/useLeftNavItems.d.ts +12 -0
  200. package/dist/types/configs/useLeftNavSmoothExpand.d.ts +10 -0
  201. package/dist/types/constants/constants.d.ts +32 -0
  202. package/dist/types/constants/index.d.ts +1 -0
  203. package/dist/types/exported-related/ChevronItem/index.d.ts +4 -0
  204. package/dist/types/exported-related/Icon/index.d.ts +6 -0
  205. package/dist/types/exported-related/ItemRenderer/index.d.ts +3 -0
  206. package/dist/types/exported-related/ItemRenderer/styled.d.ts +20 -0
  207. package/dist/types/exported-related/ItemRenderer/usePropsWithDefaults.d.ts +2 -0
  208. package/dist/types/exported-related/Notifications/index.d.ts +8 -0
  209. package/dist/types/exported-related/OpenWindowItem/index.d.ts +4 -0
  210. package/dist/types/exported-related/constants.d.ts +31 -0
  211. package/dist/types/exported-related/index.d.ts +6 -0
  212. package/dist/types/hooks/index.d.ts +3 -0
  213. package/dist/types/hooks/useExpandableOnClickHandler.d.ts +9 -0
  214. package/dist/types/hooks/useKeyboardNavigation.d.ts +8 -0
  215. package/dist/types/hooks/useOpenableOnClickHandler.d.ts +10 -0
  216. package/dist/types/hooks/useSelectFirstBodyItem.d.ts +3 -0
  217. package/dist/types/index.d.ts +6 -0
  218. package/dist/types/outOfTheBox/ItemControlledDrilldown/index.d.ts +3 -0
  219. package/dist/types/outOfTheBox/ItemHeader/index.d.ts +3 -0
  220. package/dist/types/outOfTheBox/ItemLink/index.d.ts +3 -0
  221. package/dist/types/outOfTheBox/ItemSection/index.d.ts +3 -0
  222. package/dist/types/outOfTheBox/ItemSeparator/index.d.ts +3 -0
  223. package/dist/types/outOfTheBox/ItemSkeleton/index.d.ts +8 -0
  224. package/dist/types/outOfTheBox/ItemSubmenu/index.d.ts +3 -0
  225. package/dist/types/outOfTheBox/ItemTextLabel/index.d.ts +3 -0
  226. package/dist/types/outOfTheBox/ItemUncontrolledDrilldown/index.d.ts +3 -0
  227. package/dist/types/outOfTheBox/ItemWithDate/index.d.ts +3 -0
  228. package/dist/types/outOfTheBox/index.d.ts +14 -0
  229. package/dist/types/outOfTheBox/styled.d.ts +24 -0
  230. package/dist/types/parts/LeftNavContent/index.d.ts +3 -0
  231. package/dist/types/parts/LeftNavContent/styled.d.ts +23 -0
  232. package/dist/types/parts/LeftNavFooterItem/index.d.ts +9 -0
  233. package/dist/types/parts/LeftNavFooterItem/styled.d.ts +14 -0
  234. package/dist/types/parts/LeftNavLoading/index.d.ts +4 -0
  235. package/dist/types/parts/OutOfTheBoxMapItem.d.ts +3 -0
  236. package/dist/types/react-desc-prop-types.d.ts +101 -0
  237. package/dist/types/tests/LeftNavigation.collapsed.test.d.ts +1 -0
  238. package/dist/types/tests/LeftNavigation.expanded.test.d.ts +1 -0
  239. package/dist/types/tests/LeftNavigation.opened.test.d.ts +1 -0
  240. package/dist/types/tests/a11y/axe-collapsed.test.d.ts +1 -0
  241. package/dist/types/tests/a11y/axe-expanded.test.d.ts +1 -0
  242. package/dist/types/tests/a11y/axe-opened.test.d.ts +1 -0
  243. package/dist/types/tests/events/LeftNavigation.events.keyboard.test.d.ts +1 -0
  244. package/dist/types/tests/events/LeftNavigation.events.subitems.test.d.ts +1 -0
  245. package/dist/types/tests/events/LeftNavigation.events.test.d.ts +1 -0
  246. package/dist/types/tests/events/LeftNavigation.focus.events.test.d.ts +1 -0
  247. package/dist/types/typescript-testing/typescript-left-navigation-valid.d.ts +1 -0
  248. package/package.json +269 -0
@@ -0,0 +1,114 @@
1
+ import * as React from "react";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { useContext, useCallback, useMemo } from "react";
4
+ import { MenuExpand, MenuCollapse } from "@elliemae/ds-legacy-icons";
5
+ import { DSSkeleton } from "@elliemae/ds-legacy-skeleton";
6
+ import { Grid } from "@elliemae/ds-legacy-grid";
7
+ import { SimpleTruncatedTooltipText } from "@elliemae/ds-legacy-truncated-tooltip-text";
8
+ import {
9
+ StyledFooterMenu,
10
+ StyledFooterItem,
11
+ StyledFooterLabel,
12
+ StyledFooterSeparator,
13
+ StyledMenuCollapse
14
+ } from "./styled.js";
15
+ import { useKeyboardNavigation } from "../../hooks/index.js";
16
+ import LeftNavigationContext from "../../LeftNavigationContext.js";
17
+ import { FOOTER_DS_ID, FOOTER_MENU_CLOSE_DS_ID } from "../../exported-related/constants.js";
18
+ const LeftNavFooterItem = (props) => {
19
+ const { footerLabel, FooterLabelComponent, onFooterExpand = () => null, onFooterClose = () => null } = props;
20
+ const {
21
+ leftNavProps: { labelOverflow, isSkeleton },
22
+ expandedForAnimation,
23
+ setFocusedItem,
24
+ visibleItemsRefs
25
+ } = useContext(LeftNavigationContext);
26
+ const id = FOOTER_DS_ID;
27
+ const handleOnClick = expandedForAnimation ? onFooterClose : onFooterExpand;
28
+ const onKeyDown = useKeyboardNavigation({
29
+ item: {
30
+ dsId: id,
31
+ itemOpts: {
32
+ selectable: !expandedForAnimation,
33
+ openable: false,
34
+ closable: false
35
+ }
36
+ },
37
+ onClick: handleOnClick
38
+ });
39
+ const handleMenuCollapseClick = useCallback(
40
+ (e) => {
41
+ e.stopPropagation();
42
+ handleOnClick(e);
43
+ },
44
+ [handleOnClick]
45
+ );
46
+ const label = useMemo(() => {
47
+ if (FooterLabelComponent) {
48
+ return /* @__PURE__ */ jsx(FooterLabelComponent, {});
49
+ }
50
+ if (labelOverflow === "truncate") {
51
+ return /* @__PURE__ */ jsx(SimpleTruncatedTooltipText, { value: footerLabel, placement: "bottom-start" });
52
+ }
53
+ return footerLabel;
54
+ }, [footerLabel, FooterLabelComponent, labelOverflow]);
55
+ if (isSkeleton) {
56
+ return /* @__PURE__ */ jsx(StyledFooterMenu, { "data-testid": "leftnav-container", children: /* @__PURE__ */ jsx(Grid, { height: "48px", justifyContent: "center", alignItems: "center", cols: ["1fr"], p: "xxs", children: /* @__PURE__ */ jsx(DSSkeleton, { variant: "rectangular", height: "24px" }) }) }, id);
57
+ }
58
+ return /* @__PURE__ */ jsx(StyledFooterMenu, { "data-testid": "leftnav-container", children: /* @__PURE__ */ jsx(
59
+ StyledFooterItem,
60
+ {
61
+ ref: visibleItemsRefs.current[id],
62
+ tabIndex: expandedForAnimation ? -1 : 0,
63
+ expanded: expandedForAnimation,
64
+ pt: "xxs2",
65
+ height: expandedForAnimation ? "auto" : "48px",
66
+ alignItems: "flex-start",
67
+ pl: "xxs2",
68
+ cols: expandedForAnimation ? ["auto", "1fr", "auto"] : ["38px"],
69
+ onClick: expandedForAnimation ? () => null : handleOnClick,
70
+ onKeyDown,
71
+ onFocus: () => setFocusedItem(id),
72
+ "data-testid": "leftnav-item-container",
73
+ role: "menuitem",
74
+ "aria-label": expandedForAnimation ? `Footer, ${typeof footerLabel === "string" ? footerLabel : ""}` : `Expand left navigation`,
75
+ children: !expandedForAnimation ? /* @__PURE__ */ jsx(MenuExpand, { size: "m", color: ["brand-primary", "800"], "data-testid": "leftnav-footer-btn" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
76
+ /* @__PURE__ */ jsx(
77
+ StyledFooterLabel,
78
+ {
79
+ mt: "5px",
80
+ mr: "12px",
81
+ mb: "16px",
82
+ "data-testid": "leftnav-itemlabel",
83
+ labelOverflow,
84
+ "aria-live": "polite",
85
+ children: label
86
+ }
87
+ ),
88
+ /* @__PURE__ */ jsx(StyledFooterSeparator, { mt: "xxxs" }),
89
+ /* @__PURE__ */ jsx(
90
+ StyledMenuCollapse,
91
+ {
92
+ buttonType: "raw",
93
+ onClick: handleMenuCollapseClick,
94
+ "data-testid": "leftnav-footer-btn",
95
+ tabIndex: 0,
96
+ onFocus: (e) => {
97
+ e.stopPropagation();
98
+ setFocusedItem(FOOTER_MENU_CLOSE_DS_ID);
99
+ },
100
+ role: "button",
101
+ "aria-label": "Collapse left navigation",
102
+ children: /* @__PURE__ */ jsx(MenuCollapse, { size: "m", color: ["brand-primary", "800"] })
103
+ }
104
+ )
105
+ ] })
106
+ }
107
+ ) }, id);
108
+ };
109
+ var LeftNavFooterItem_default = LeftNavFooterItem;
110
+ export {
111
+ LeftNavFooterItem,
112
+ LeftNavFooterItem_default as default
113
+ };
114
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/LeftNavFooterItem/index.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\nimport React, { useContext, useCallback, useMemo } from 'react';\nimport { MenuExpand, MenuCollapse } from '@elliemae/ds-legacy-icons';\nimport { DSSkeleton } from '@elliemae/ds-legacy-skeleton';\nimport { Grid } from '@elliemae/ds-legacy-grid';\n\nimport { SimpleTruncatedTooltipText } from '@elliemae/ds-legacy-truncated-tooltip-text';\nimport {\n StyledFooterMenu,\n StyledFooterItem,\n StyledFooterLabel,\n StyledFooterSeparator,\n StyledMenuCollapse,\n} from './styled.js';\nimport { useKeyboardNavigation } from '../../hooks/index.js';\nimport LeftNavigationContext from '../../LeftNavigationContext.js';\nimport { FOOTER_DS_ID, FOOTER_MENU_CLOSE_DS_ID } from '../../exported-related/constants.js';\n\ntype LeftNavFooterItemProps = {\n footerLabel: string;\n FooterLabelComponent?: React.ComponentType<unknown>;\n onFooterExpand: React.MouseEventHandler & React.KeyboardEventHandler;\n onFooterClose: React.MouseEventHandler & React.KeyboardEventHandler;\n};\n\n// eslint-disable-next-line complexity\nexport const LeftNavFooterItem: React.ComponentType<LeftNavFooterItemProps> = (props) => {\n const { footerLabel, FooterLabelComponent, onFooterExpand = () => null, onFooterClose = () => null } = props;\n const {\n leftNavProps: { labelOverflow, isSkeleton },\n expandedForAnimation,\n setFocusedItem,\n visibleItemsRefs,\n } = useContext(LeftNavigationContext);\n\n const id = FOOTER_DS_ID;\n\n const handleOnClick = expandedForAnimation ? onFooterClose : onFooterExpand;\n\n const onKeyDown = useKeyboardNavigation({\n item: {\n dsId: id,\n itemOpts: {\n selectable: !expandedForAnimation,\n openable: false,\n closable: false,\n },\n },\n onClick: handleOnClick,\n });\n\n const handleMenuCollapseClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.KeyboardEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n handleOnClick(e as React.MouseEvent<HTMLButtonElement, MouseEvent>);\n },\n [handleOnClick],\n );\n\n const label = useMemo(() => {\n if (FooterLabelComponent) {\n return <FooterLabelComponent />;\n }\n if (labelOverflow === 'truncate') {\n return <SimpleTruncatedTooltipText value={footerLabel} placement=\"bottom-start\" />;\n }\n return footerLabel;\n }, [footerLabel, FooterLabelComponent, labelOverflow]);\n\n if (isSkeleton) {\n return (\n <StyledFooterMenu key={id} data-testid=\"leftnav-container\">\n <Grid height=\"48px\" justifyContent=\"center\" alignItems=\"center\" cols={['1fr']} p=\"xxs\">\n <DSSkeleton variant=\"rectangular\" height=\"24px\" />\n </Grid>\n </StyledFooterMenu>\n );\n }\n\n return (\n <StyledFooterMenu key={id} data-testid=\"leftnav-container\">\n <StyledFooterItem\n ref={visibleItemsRefs.current[id]}\n tabIndex={expandedForAnimation ? -1 : 0}\n expanded={expandedForAnimation}\n pt=\"xxs2\"\n height={expandedForAnimation ? 'auto' : '48px'}\n alignItems=\"flex-start\"\n pl=\"xxs2\"\n cols={expandedForAnimation ? ['auto', '1fr', 'auto'] : ['38px']}\n onClick={expandedForAnimation ? () => null : handleOnClick}\n onKeyDown={onKeyDown}\n onFocus={() => setFocusedItem(id)}\n data-testid=\"leftnav-item-container\"\n role=\"menuitem\"\n aria-label={\n expandedForAnimation\n ? `Footer, ${typeof footerLabel === 'string' ? footerLabel : ''}`\n : `Expand left navigation`\n }\n >\n {!expandedForAnimation ? (\n <MenuExpand size=\"m\" color={['brand-primary', '800']} data-testid=\"leftnav-footer-btn\" />\n ) : (\n <>\n <StyledFooterLabel\n mt=\"5px\"\n mr=\"12px\"\n mb=\"16px\"\n data-testid=\"leftnav-itemlabel\"\n labelOverflow={labelOverflow}\n aria-live=\"polite\"\n >\n {label}\n </StyledFooterLabel>\n <StyledFooterSeparator mt=\"xxxs\" />\n <StyledMenuCollapse\n buttonType=\"raw\"\n onClick={handleMenuCollapseClick}\n data-testid=\"leftnav-footer-btn\"\n tabIndex={0}\n onFocus={(e: React.FocusEvent) => {\n e.stopPropagation();\n setFocusedItem(FOOTER_MENU_CLOSE_DS_ID);\n }}\n role=\"button\"\n aria-label=\"Collapse left navigation\"\n >\n <MenuCollapse size=\"m\" color={['brand-primary', '800']} />\n </StyledMenuCollapse>\n </>\n )}\n </StyledFooterItem>\n </StyledFooterMenu>\n );\n};\n\nexport default LeftNavFooterItem;\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,72 @@
1
+ import * as React from "react";
2
+ import { styled } from "@elliemae/ds-legacy-system";
3
+ import { DSButtonV2 } from "@elliemae/ds-legacy-button-v2";
4
+ import { Grid } from "@elliemae/ds-legacy-grid";
5
+ import { getLeftBorderStyle, getItemBackgroundStyle } from "../../common/index.js";
6
+ import { DSLeftNavigationName, DSLeftNavigationSlots } from "../../constants/index.js";
7
+ const StyledFooterMenu = styled(Grid, { name: DSLeftNavigationName, slot: DSLeftNavigationSlots.FOOTER_MENU })`
8
+ width: 100%;
9
+ margin-top: auto;
10
+ background: ${(props) => props.theme.colors.neutral["000"]};
11
+
12
+ border-top: 1px solid ${(props) => props.theme.colors.neutral[100]};
13
+ `;
14
+ const StyledFooterItem = styled(Grid, { name: DSLeftNavigationName, slot: DSLeftNavigationSlots.FOOTER_ITEM })`
15
+ position: relative;
16
+ ${(props) => getLeftBorderStyle({ ...props })}
17
+
18
+ min-height: 48px;
19
+ cursor: ${(props) => props.expanded ? "auto" : "pointer"};
20
+
21
+ ${getItemBackgroundStyle}
22
+
23
+ outline: none;
24
+
25
+ :focus {
26
+ &:before {
27
+ content: '';
28
+ position: absolute;
29
+ height: 100%;
30
+ width: 100%;
31
+ top: 0;
32
+ left: 0px;
33
+ border: 2px solid ${(props) => props.theme.colors.brand[600]};
34
+ pointer-events: none;
35
+ }
36
+ }
37
+ `;
38
+ const StyledFooterLabel = styled(Grid, {
39
+ name: DSLeftNavigationName,
40
+ slot: DSLeftNavigationSlots.FOOTER_LABEL
41
+ })`
42
+ font-size: 11px;
43
+ color: ${(props) => props.theme.colors.neutral[500]};
44
+ line-height: 14px;
45
+ word-break: ${(props) => props.labelOverflow === "wrapAll" ? "break-all" : "normal"};
46
+ `;
47
+ const StyledFooterSeparator = styled(Grid, {
48
+ name: DSLeftNavigationName,
49
+ slot: DSLeftNavigationSlots.FOOTER_SEPARATOR
50
+ })`
51
+ height: 16px;
52
+ width: 1px;
53
+ background-color: ${(props) => props.theme.colors.neutral[100]};
54
+ `;
55
+ const StyledMenuCollapse = styled(DSButtonV2, {
56
+ name: DSLeftNavigationName,
57
+ slot: DSLeftNavigationSlots.FOOTER_MENU_COLLAPSE
58
+ })`
59
+ padding: 0;
60
+ margin: 0 12px;
61
+ :focus {
62
+ outline: 2px solid ${(props) => props.theme.colors.brand[800]};
63
+ }
64
+ `;
65
+ export {
66
+ StyledFooterItem,
67
+ StyledFooterLabel,
68
+ StyledFooterMenu,
69
+ StyledFooterSeparator,
70
+ StyledMenuCollapse
71
+ };
72
+ //# sourceMappingURL=styled.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/LeftNavFooterItem/styled.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { styled } from '@elliemae/ds-legacy-system';\nimport { DSButtonV2 } from '@elliemae/ds-legacy-button-v2';\nimport { Grid } from '@elliemae/ds-legacy-grid';\nimport { getLeftBorderStyle, getItemBackgroundStyle } from '../../common/index.js';\nimport { DSLeftNavigationName, DSLeftNavigationSlots } from '../../constants/index.js';\nimport type { DSLeftNavigationT } from '../../react-desc-prop-types.js';\n\nexport const StyledFooterMenu = styled(Grid, { name: DSLeftNavigationName, slot: DSLeftNavigationSlots.FOOTER_MENU })`\n width: 100%;\n margin-top: auto;\n background: ${(props) => props.theme.colors.neutral['000']};\n\n border-top: 1px solid ${(props) => props.theme.colors.neutral[100]};\n`;\n\nexport const StyledFooterItem = styled(Grid, { name: DSLeftNavigationName, slot: DSLeftNavigationSlots.FOOTER_ITEM })<{\n expanded?: boolean;\n opened?: boolean;\n selected?: boolean;\n selectedParent?: boolean;\n}>`\n position: relative;\n ${(props) => getLeftBorderStyle({ ...props })}\n\n min-height: 48px;\n cursor: ${(props) => (props.expanded ? 'auto' : 'pointer')};\n\n ${getItemBackgroundStyle}\n\n outline: none;\n\n :focus {\n &:before {\n content: '';\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n left: 0px;\n border: 2px solid ${(props) => props.theme.colors.brand[600]};\n pointer-events: none;\n }\n }\n`;\n\nexport const StyledFooterLabel = styled(Grid, {\n name: DSLeftNavigationName,\n slot: DSLeftNavigationSlots.FOOTER_LABEL,\n})<{ labelOverflow?: DSLeftNavigationT.LabelOveflowT }>`\n font-size: 11px;\n color: ${(props) => props.theme.colors.neutral[500]};\n line-height: 14px;\n word-break: ${(props) => (props.labelOverflow === 'wrapAll' ? 'break-all' : 'normal')};\n`;\n\nexport const StyledFooterSeparator = styled(Grid, {\n name: DSLeftNavigationName,\n slot: DSLeftNavigationSlots.FOOTER_SEPARATOR,\n})`\n height: 16px;\n width: 1px;\n background-color: ${(props) => props.theme.colors.neutral[100]};\n`;\n\nexport const StyledMenuCollapse = styled(DSButtonV2, {\n name: DSLeftNavigationName,\n slot: DSLeftNavigationSlots.FOOTER_MENU_COLLAPSE,\n})`\n padding: 0;\n margin: 0 12px;\n :focus {\n outline: 2px solid ${(props) => props.theme.colors.brand[800]};\n }\n`;\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,YAAY;AACrB,SAAS,oBAAoB,8BAA8B;AAC3D,SAAS,sBAAsB,6BAA6B;AAGrD,MAAM,mBAAmB,OAAO,MAAM,EAAE,MAAM,sBAAsB,MAAM,sBAAsB,YAAY,CAAC;AAAA;AAAA;AAAA,gBAGpG,CAAC,UAAU,MAAM,MAAM,OAAO,QAAQ,KAAK;AAAA;AAAA,0BAEjC,CAAC,UAAU,MAAM,MAAM,OAAO,QAAQ,GAAG;AAAA;AAG5D,MAAM,mBAAmB,OAAO,MAAM,EAAE,MAAM,sBAAsB,MAAM,sBAAsB,YAAY,CAAC;AAAA;AAAA,IAOhH,CAAC,UAAU,mBAAmB,EAAE,GAAG,MAAM,CAAC;AAAA;AAAA;AAAA,YAGlC,CAAC,UAAW,MAAM,WAAW,SAAS;AAAA;AAAA,IAE9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAYsB,CAAC,UAAU,MAAM,MAAM,OAAO,MAAM,GAAG;AAAA;AAAA;AAAA;AAAA;AAM1D,MAAM,oBAAoB,OAAO,MAAM;AAAA,EAC5C,MAAM;AAAA,EACN,MAAM,sBAAsB;AAC9B,CAAC;AAAA;AAAA,WAEU,CAAC,UAAU,MAAM,MAAM,OAAO,QAAQ,GAAG;AAAA;AAAA,gBAEpC,CAAC,UAAW,MAAM,kBAAkB,YAAY,cAAc;AAAA;AAGvE,MAAM,wBAAwB,OAAO,MAAM;AAAA,EAChD,MAAM;AAAA,EACN,MAAM,sBAAsB;AAC9B,CAAC;AAAA;AAAA;AAAA,sBAGqB,CAAC,UAAU,MAAM,MAAM,OAAO,QAAQ,GAAG;AAAA;AAGxD,MAAM,qBAAqB,OAAO,YAAY;AAAA,EACnD,MAAM;AAAA,EACN,MAAM,sBAAsB;AAC9B,CAAC;AAAA;AAAA;AAAA;AAAA,yBAIwB,CAAC,UAAU,MAAM,MAAM,OAAO,MAAM,GAAG;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,25 @@
1
+ import * as React from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { DSCircularIndeterminateIndicator } from "@elliemae/ds-legacy-circular-progress-indicator";
4
+ import Grid from "@elliemae/ds-legacy-grid";
5
+ import { styled } from "@elliemae/ds-legacy-system";
6
+ import { DSLeftNavigationName, DSLeftNavigationSlots } from "../../constants/index.js";
7
+ const StyledLoaderWrapper = styled(Grid, { name: DSLeftNavigationName, slot: DSLeftNavigationSlots.LOADER_WRAPPER })`
8
+ height: 100%;
9
+ place-items: center;
10
+ z-index: 0;
11
+ background-color: white;
12
+ `;
13
+ const LeftNavLoading = ({ expanded }) => /* @__PURE__ */ jsx(StyledLoaderWrapper, { role: "menuitem", "aria-label": "Loading...", children: /* @__PURE__ */ jsx(
14
+ DSCircularIndeterminateIndicator,
15
+ {
16
+ size: expanded ? "l" : "s",
17
+ text: "Loading...",
18
+ showText: expanded,
19
+ withTooltip: !expanded
20
+ }
21
+ ) });
22
+ export {
23
+ LeftNavLoading
24
+ };
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/LeftNavLoading/index.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { DSCircularIndeterminateIndicator } from '@elliemae/ds-legacy-circular-progress-indicator';\nimport Grid from '@elliemae/ds-legacy-grid';\nimport { styled } from '@elliemae/ds-legacy-system';\nimport { DSLeftNavigationName, DSLeftNavigationSlots } from '../../constants/index.js';\n\nconst StyledLoaderWrapper = styled(Grid, { name: DSLeftNavigationName, slot: DSLeftNavigationSlots.LOADER_WRAPPER })`\n height: 100%;\n place-items: center;\n z-index: 0;\n background-color: white;\n`;\n\nexport const LeftNavLoading: React.ComponentType<{ expanded: boolean }> = ({ expanded }) => (\n <StyledLoaderWrapper role=\"menuitem\" aria-label=\"Loading...\">\n <DSCircularIndeterminateIndicator\n size={expanded ? 'l' : 's'}\n text=\"Loading...\"\n showText={expanded}\n withTooltip={!expanded}\n />\n </StyledLoaderWrapper>\n);\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACenB;AAdJ,SAAS,wCAAwC;AACjD,OAAO,UAAU;AACjB,SAAS,cAAc;AACvB,SAAS,sBAAsB,6BAA6B;AAE5D,MAAM,sBAAsB,OAAO,MAAM,EAAE,MAAM,sBAAsB,MAAM,sBAAsB,eAAe,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAO5G,MAAM,iBAA6D,CAAC,EAAE,SAAS,MACpF,oBAAC,uBAAoB,MAAK,YAAW,cAAW,cAC9C;AAAA,EAAC;AAAA;AAAA,IACC,MAAM,WAAW,MAAM;AAAA,IACvB,MAAK;AAAA,IACL,UAAU;AAAA,IACV,aAAa,CAAC;AAAA;AAChB,GACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,29 @@
1
+ import * as React from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import React2 from "react";
4
+ import { outOfTheBoxComponents } from "../outOfTheBox/index.js";
5
+ import { LeftNavContext } from "../LeftNavigationContext.js";
6
+ const OutOfTheBoxMapItem = (props) => {
7
+ const {
8
+ item,
9
+ item: { type, Component }
10
+ } = props;
11
+ const ctx = React2.useContext(LeftNavContext);
12
+ const finalItem = {
13
+ ...item,
14
+ itemOpts: {
15
+ ...item.itemOpts
16
+ }
17
+ };
18
+ if (typeof type === "string" && !!outOfTheBoxComponents[type]) {
19
+ const OutOfTheBoxComponent = outOfTheBoxComponents[type];
20
+ return /* @__PURE__ */ jsx(OutOfTheBoxComponent, { item: finalItem, ctx });
21
+ }
22
+ if (!Component)
23
+ return null;
24
+ return /* @__PURE__ */ jsx(Component, { item, ctx });
25
+ };
26
+ export {
27
+ OutOfTheBoxMapItem
28
+ };
29
+ //# sourceMappingURL=OutOfTheBoxMapItem.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/parts/OutOfTheBoxMapItem.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { outOfTheBoxComponents } from '../outOfTheBox/index.js';\nimport type { DSLeftNavigationT } from '../react-desc-prop-types.js';\nimport { LeftNavContext } from '../LeftNavigationContext.js';\n\nexport const OutOfTheBoxMapItem: React.ComponentType<DSLeftNavigationT.OutOfTheBoxMapItemT> = (props) => {\n const {\n item,\n item: { type, Component },\n } = props;\n const ctx = React.useContext(LeftNavContext);\n\n const finalItem = {\n ...item,\n itemOpts: {\n ...item.itemOpts,\n },\n };\n if (typeof type === 'string' && !!outOfTheBoxComponents[type]) {\n const OutOfTheBoxComponent = outOfTheBoxComponents[type];\n return <OutOfTheBoxComponent item={finalItem} ctx={ctx} />;\n }\n if (!Component) return null;\n // we expect an error to be threw if Component is not defined and type is not a valid out-of-the-box...\n return <Component item={item} ctx={ctx} />;\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACoBZ;AApBX,OAAOA,YAAW;AAClB,SAAS,6BAA6B;AAEtC,SAAS,sBAAsB;AAExB,MAAM,qBAAiF,CAAC,UAAU;AACvG,QAAM;AAAA,IACJ;AAAA,IACA,MAAM,EAAE,MAAM,UAAU;AAAA,EAC1B,IAAI;AACJ,QAAM,MAAMA,OAAM,WAAW,cAAc;AAE3C,QAAM,YAAY;AAAA,IAChB,GAAG;AAAA,IACH,UAAU;AAAA,MACR,GAAG,KAAK;AAAA,IACV;AAAA,EACF;AACA,MAAI,OAAO,SAAS,YAAY,CAAC,CAAC,sBAAsB,IAAI,GAAG;AAC7D,UAAM,uBAAuB,sBAAsB,IAAI;AACvD,WAAO,oBAAC,wBAAqB,MAAM,WAAW,KAAU;AAAA,EAC1D;AACA,MAAI,CAAC;AAAW,WAAO;AAEvB,SAAO,oBAAC,aAAU,MAAY,KAAU;AAC1C;",
6
+ "names": ["React"]
7
+ }
@@ -0,0 +1,44 @@
1
+ import * as React from "react";
2
+ import { PropTypes, describe } from "@elliemae/ds-legacy-props-helpers";
3
+ import { outOfTheBoxTypes } from "./outOfTheBox/index.js";
4
+ const leftNavItemProps = {
5
+ type: PropTypes.oneOf(outOfTheBoxTypes).description("out of the box types"),
6
+ dsId: PropTypes.string.description("unique identifier for the left nav item"),
7
+ Component: PropTypes.func.description(
8
+ "A custom component, receives the item as prop. This is used only when type is not defined or doesn't matches any out-of-the-box"
9
+ ),
10
+ CollapsedComponent: PropTypes.func.description("A component which is renderer when the left-nav is collapsed"),
11
+ itemOpts: PropTypes.object.description("Item options")
12
+ };
13
+ const leftNavigationProps = {
14
+ containerProps: PropTypes.shape({ expandedWidth: PropTypes.string }).description("Set of Properties attached to the main container").defaultValue({ expandedWidth: "240px" }),
15
+ expanded: PropTypes.bool.description("Whether to show the left navigation expanded or collapsed").defaultValue(false),
16
+ loading: PropTypes.bool.description("Whether the left-nav is loading").defaultValue(false),
17
+ openedItem: PropTypes.string.description("The id of the left navigation item you want to be opened").defaultValue(null),
18
+ footerLabel: PropTypes.oneOfType([PropTypes.node, PropTypes.string]).description(
19
+ "The label to show in the footer item"
20
+ ),
21
+ FooterLabelComponent: PropTypes.func.description("The component to show in the footer item"),
22
+ onFooterExpand: PropTypes.func.description("The function to call when the left-nav is opened via the footer"),
23
+ onFooterClose: PropTypes.func.description("The function to call when the left-nav is closed via the footer"),
24
+ onSelectedChange: PropTypes.func.description("A callback which triggers when the selected item changes").defaultValue(() => null),
25
+ onFocusChange: PropTypes.func.description("A callback which triggers when the focused item changes").defaultValue(() => null),
26
+ items: PropTypes.arrayOf(PropTypes.object).description("The array of items you want to render inside the left nav").defaultValue([]),
27
+ disableDefaultSelection: PropTypes.bool.description("Whether you do not want to automatically select the first body item").defaultValue(false),
28
+ isSkeleton: PropTypes.bool.description("Whether the component is in skeleton mode").defaultValue(false)
29
+ };
30
+ const LeftNavItemProps = () => null;
31
+ LeftNavItemProps.displayName = "LeftNavItemProps";
32
+ const LeftNavItemPropsSchema = describe(LeftNavItemProps);
33
+ LeftNavItemPropsSchema.propTypes = leftNavItemProps;
34
+ const LeftNavItemOptions = () => null;
35
+ LeftNavItemOptions.displayName = "LeftNavItemOptions";
36
+ const LeftNavItemOptionsSchema = describe(LeftNavItemOptions);
37
+ LeftNavItemOptionsSchema.propTypes = leftNavItemProps;
38
+ export {
39
+ LeftNavItemOptionsSchema,
40
+ LeftNavItemPropsSchema,
41
+ leftNavItemProps,
42
+ leftNavigationProps
43
+ };
44
+ //# sourceMappingURL=react-desc-prop-types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../src/react-desc-prop-types.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import type { WeakValidationMap } from 'react';\nimport { PropTypes, describe } from '@elliemae/ds-legacy-props-helpers';\nimport { type Theme } from '@elliemae/ds-legacy-system';\nimport type { GlobalAttributesT, XstyledProps } from '@elliemae/ds-legacy-props-helpers';\n\nimport { outOfTheBoxTypes } from './outOfTheBox/index.js';\nimport type { ContextProps } from './LeftNavigationContext.js';\n\ntype ColorsKey = keyof Theme['colors'];\n\nexport declare namespace DSLeftNavigationT {\n export type LabelOveflowT = 'wrap' | 'wrapAll' | 'truncate';\n\n export interface DefaultProps {\n expanded: boolean;\n expandedWidth: string;\n openedItem: string | null;\n items: GenericItemItemProps[];\n footerLabel: string;\n labelOverflow: LabelOveflowT;\n onSelectedChange: (item: string | null) => void;\n onFocusChange: (item: string | null) => void;\n onFooterExpand: () => void;\n onFooterClose: () => void;\n onItemClick: (item: GenericItemItemProps, e: React.MouseEvent<HTMLElement>) => void;\n loading: boolean;\n isSkeleton: boolean;\n }\n export interface OptionalProps {\n FooterLabelComponent?: React.ComponentType<unknown>;\n selectedItem?: string | null;\n selectedParent?: string | null;\n disableDefaultSelection?: boolean;\n withoutBodyShadow?: boolean;\n actionRef?: React.RefObject<{ setFocusedItem: React.Dispatch<React.SetStateAction<string | null>> }>;\n HeaderComponent?: GenericItemItemProps;\n BodyHeaderComponent?: GenericItemItemProps;\n }\n\n export interface Props\n extends Partial<DefaultProps>,\n OptionalProps,\n Omit<GlobalAttributesT<HTMLButtonElement>, keyof DefaultProps | keyof OptionalProps>,\n XstyledProps {}\n export interface InternalProps\n extends DefaultProps,\n OptionalProps,\n Omit<GlobalAttributesT<HTMLButtonElement>, keyof DefaultProps | keyof OptionalProps>,\n XstyledProps {}\n\n export type OutOfTheBoxT =\n | 'ds-left-nav-item-header'\n | 'ds-left-nav-item-link'\n | 'ds-left-nav-item-submenu'\n | 'ds-left-nav-item-controlled-drilldown'\n | 'ds-left-nav-item-uncontrolled-drilldown'\n | 'ds-left-nav-item-section'\n | 'ds-left-nav-item-separator'\n | 'ds-left-nav-item-text-label'\n | 'ds-left-nav-item-with-date';\n\n export interface ItemOptsT extends Record<string, unknown> {\n label?: string | JSX.Element;\n labelBold?: boolean;\n labelColor?: [ColorsKey, keyof Theme['colors'][ColorsKey]];\n labelOverflow?: LabelOveflowT;\n labelRightSection?: string | JSX.Element;\n selectable?: boolean;\n focuseable?: boolean;\n startOpened?: boolean;\n isOpened?: boolean;\n openable?: boolean;\n closable?: boolean;\n indent?: number;\n LeftComponent?: React.ComponentType<ComponentProps>;\n RightComponent?: React.ComponentType<ComponentProps>;\n BottomComponent?: React.ComponentType<ComponentProps>;\n ariaLabel?: string;\n ariaRole?: string;\n ariaLive?: string;\n ariaExpanded?: boolean;\n ariaDescribedBy?: string;\n items?: GenericItemItemProps[];\n labelDataTestId?: string;\n skeletonVariant?: 'item' | 'subitem';\n }\n\n export interface ComponentProps {\n item: GenericItemItemProps;\n ctx: ContextProps;\n }\n export interface GenericItemItemProps {\n dsId?: string;\n type?: string;\n CollapsedComponent?: React.ComponentType<ComponentProps> | null;\n Component?: React.ComponentType<ComponentProps>;\n itemOpts: ItemOptsT;\n }\n export interface OutOfTheBoxMapItemT {\n item: GenericItemItemProps;\n }\n export interface ItemRendererT {\n item: GenericItemItemProps;\n subitems?: JSX.Element[];\n minHeight?: string;\n paddingTop?: string;\n onClick?: () => void;\n shadowStyle?: (opened: boolean, type?: string) => (theme: Theme) => string;\n hasBorderBottom?: boolean;\n borderBottomMr?: string;\n children: React.ReactNode;\n }\n}\nexport const leftNavItemProps = {\n type: PropTypes.oneOf(outOfTheBoxTypes).description('out of the box types'),\n dsId: PropTypes.string.description('unique identifier for the left nav item'),\n Component: PropTypes.func.description(\n \"A custom component, receives the item as prop. This is used only when type is not defined or doesn't matches any out-of-the-box\",\n ),\n CollapsedComponent: PropTypes.func.description('A component which is renderer when the left-nav is collapsed'),\n itemOpts: PropTypes.object.description('Item options'),\n};\n\nexport const leftNavigationProps = {\n containerProps: PropTypes.shape({ expandedWidth: PropTypes.string })\n .description('Set of Properties attached to the main container')\n .defaultValue({ expandedWidth: '240px' }),\n expanded: PropTypes.bool.description('Whether to show the left navigation expanded or collapsed').defaultValue(false),\n loading: PropTypes.bool.description('Whether the left-nav is loading').defaultValue(false),\n openedItem: PropTypes.string\n .description('The id of the left navigation item you want to be opened')\n .defaultValue(null),\n footerLabel: PropTypes.oneOfType([PropTypes.node, PropTypes.string]).description(\n 'The label to show in the footer item',\n ),\n FooterLabelComponent: PropTypes.func.description('The component to show in the footer item'),\n onFooterExpand: PropTypes.func.description('The function to call when the left-nav is opened via the footer'),\n onFooterClose: PropTypes.func.description('The function to call when the left-nav is closed via the footer'),\n onSelectedChange: PropTypes.func\n .description('A callback which triggers when the selected item changes')\n .defaultValue(() => null),\n onFocusChange: PropTypes.func\n .description('A callback which triggers when the focused item changes')\n .defaultValue(() => null),\n items: PropTypes.arrayOf(PropTypes.object)\n .description('The array of items you want to render inside the left nav')\n .defaultValue([]),\n disableDefaultSelection: PropTypes.bool\n .description('Whether you do not want to automatically select the first body item')\n .defaultValue(false),\n isSkeleton: PropTypes.bool.description('Whether the component is in skeleton mode').defaultValue(false),\n} as unknown as WeakValidationMap<DSLeftNavigationT.Props>;\n\nconst LeftNavItemProps = () => null;\nLeftNavItemProps.displayName = 'LeftNavItemProps';\nexport const LeftNavItemPropsSchema = describe(LeftNavItemProps);\nLeftNavItemPropsSchema.propTypes = leftNavItemProps;\n\nconst LeftNavItemOptions = () => null;\nLeftNavItemOptions.displayName = 'LeftNavItemOptions';\nexport const LeftNavItemOptionsSchema = describe(LeftNavItemOptions);\nLeftNavItemOptionsSchema.propTypes = leftNavItemProps;\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACCvB,SAAS,WAAW,gBAAgB;AAIpC,SAAS,wBAAwB;AA4G1B,MAAM,mBAAmB;AAAA,EAC9B,MAAM,UAAU,MAAM,gBAAgB,EAAE,YAAY,sBAAsB;AAAA,EAC1E,MAAM,UAAU,OAAO,YAAY,yCAAyC;AAAA,EAC5E,WAAW,UAAU,KAAK;AAAA,IACxB;AAAA,EACF;AAAA,EACA,oBAAoB,UAAU,KAAK,YAAY,8DAA8D;AAAA,EAC7G,UAAU,UAAU,OAAO,YAAY,cAAc;AACvD;AAEO,MAAM,sBAAsB;AAAA,EACjC,gBAAgB,UAAU,MAAM,EAAE,eAAe,UAAU,OAAO,CAAC,EAChE,YAAY,kDAAkD,EAC9D,aAAa,EAAE,eAAe,QAAQ,CAAC;AAAA,EAC1C,UAAU,UAAU,KAAK,YAAY,2DAA2D,EAAE,aAAa,KAAK;AAAA,EACpH,SAAS,UAAU,KAAK,YAAY,iCAAiC,EAAE,aAAa,KAAK;AAAA,EACzF,YAAY,UAAU,OACnB,YAAY,0DAA0D,EACtE,aAAa,IAAI;AAAA,EACpB,aAAa,UAAU,UAAU,CAAC,UAAU,MAAM,UAAU,MAAM,CAAC,EAAE;AAAA,IACnE;AAAA,EACF;AAAA,EACA,sBAAsB,UAAU,KAAK,YAAY,0CAA0C;AAAA,EAC3F,gBAAgB,UAAU,KAAK,YAAY,iEAAiE;AAAA,EAC5G,eAAe,UAAU,KAAK,YAAY,iEAAiE;AAAA,EAC3G,kBAAkB,UAAU,KACzB,YAAY,0DAA0D,EACtE,aAAa,MAAM,IAAI;AAAA,EAC1B,eAAe,UAAU,KACtB,YAAY,yDAAyD,EACrE,aAAa,MAAM,IAAI;AAAA,EAC1B,OAAO,UAAU,QAAQ,UAAU,MAAM,EACtC,YAAY,2DAA2D,EACvE,aAAa,CAAC,CAAC;AAAA,EAClB,yBAAyB,UAAU,KAChC,YAAY,qEAAqE,EACjF,aAAa,KAAK;AAAA,EACrB,YAAY,UAAU,KAAK,YAAY,2CAA2C,EAAE,aAAa,KAAK;AACxG;AAEA,MAAM,mBAAmB,MAAM;AAC/B,iBAAiB,cAAc;AACxB,MAAM,yBAAyB,SAAS,gBAAgB;AAC/D,uBAAuB,YAAY;AAEnC,MAAM,qBAAqB,MAAM;AACjC,mBAAmB,cAAc;AAC1B,MAAM,2BAA2B,SAAS,kBAAkB;AACnE,yBAAyB,YAAY;",
6
+ "names": []
7
+ }
@@ -0,0 +1,163 @@
1
+ import * as React from "react";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { createRef } from "react";
4
+ import { LeftNavigation } from "../index.js";
5
+ import { ITEM_TYPES } from "../exported-related/constants.js";
6
+ const ref = createRef();
7
+ const testOptionalProps = {
8
+ selectedItem: "selected item",
9
+ selectedParent: "parent",
10
+ disableDefaultSelection: true,
11
+ withoutBodyShadow: true,
12
+ actionRef: ref,
13
+ HeaderComponent: {
14
+ type: ITEM_TYPES.LEFT_NAV_ITEM_HEADER,
15
+ dsId: "application-header-id",
16
+ CollapsedComponent: () => /* @__PURE__ */ jsx("div", {}),
17
+ itemOpts: {
18
+ label: "Notifications"
19
+ }
20
+ },
21
+ BodyHeaderComponent: {
22
+ type: ITEM_TYPES.LEFT_NAV_ITEM_SUBMENU,
23
+ dsId: "application-submenu-forms-id",
24
+ CollapsedComponent: () => /* @__PURE__ */ jsx("div", {}),
25
+ itemOpts: {
26
+ label: "Forms"
27
+ }
28
+ }
29
+ };
30
+ const testPartialDefaults = {};
31
+ const testProps = {
32
+ ...testOptionalProps,
33
+ ...testPartialDefaults
34
+ };
35
+ const testPropsAsSyntax = {
36
+ ...testOptionalProps,
37
+ ...testPartialDefaults
38
+ };
39
+ const testCompleteDefaults = {
40
+ expanded: true,
41
+ expandedWidth: "100px",
42
+ openedItem: "opened item",
43
+ items: [
44
+ {
45
+ type: ITEM_TYPES.LEFT_NAV_ITEM_HEADER,
46
+ dsId: "application-header-id",
47
+ CollapsedComponent: () => /* @__PURE__ */ jsx("div", {}),
48
+ itemOpts: {
49
+ label: "Notifications"
50
+ }
51
+ }
52
+ ],
53
+ footerLabel: "",
54
+ onSelectedChange: () => null,
55
+ onFocusChange: () => null,
56
+ onFooterExpand: () => null,
57
+ onFooterClose: () => null,
58
+ labelOverflow: "wrap",
59
+ onItemClick: () => null,
60
+ isSkeleton: false,
61
+ loading: false
62
+ };
63
+ const testInternalProps = {
64
+ ...testOptionalProps,
65
+ ...testCompleteDefaults
66
+ };
67
+ const testInternalPropsAsSyntax = {
68
+ ...testOptionalProps,
69
+ ...testCompleteDefaults
70
+ };
71
+ const testExplicitDefinition = {
72
+ expanded: true,
73
+ expandedWidth: "100px",
74
+ openedItem: "opened item",
75
+ items: [
76
+ {
77
+ type: ITEM_TYPES.LEFT_NAV_ITEM_HEADER,
78
+ dsId: "application-header-id",
79
+ CollapsedComponent: () => /* @__PURE__ */ jsx("div", {}),
80
+ itemOpts: {
81
+ label: "Notifications"
82
+ }
83
+ }
84
+ ],
85
+ footerLabel: "",
86
+ onSelectedChange: () => null,
87
+ onFocusChange: () => null,
88
+ onFooterExpand: () => null,
89
+ onFooterClose: () => null,
90
+ labelOverflow: "wrap",
91
+ onItemClick: () => null,
92
+ isSkeleton: false,
93
+ loading: false
94
+ };
95
+ const testInferedTypeCompatibility = {
96
+ expanded: true,
97
+ expandedWidth: "100px",
98
+ openedItem: "opened item",
99
+ items: [
100
+ {
101
+ type: ITEM_TYPES.LEFT_NAV_ITEM_HEADER,
102
+ dsId: "application-header-id",
103
+ CollapsedComponent: () => /* @__PURE__ */ jsx("div", {}),
104
+ itemOpts: {
105
+ label: "Notifications"
106
+ }
107
+ }
108
+ ],
109
+ footerLabel: "",
110
+ onSelectedChange: () => null,
111
+ onFocusChange: () => null,
112
+ onFooterExpand: () => null,
113
+ onFooterClose: () => null,
114
+ labelOverflow: "wrap",
115
+ onItemClick: () => null,
116
+ isSkeleton: false,
117
+ loading: false
118
+ };
119
+ const testDefinitionAsConst = {
120
+ expanded: true,
121
+ expandedWidth: "100px",
122
+ openedItem: "opened item",
123
+ footerLabel: "",
124
+ onSelectedChange: () => null,
125
+ onFocusChange: () => null,
126
+ onFooterExpand: () => null,
127
+ onFooterClose: () => null,
128
+ labelOverflow: "wrap",
129
+ onItemClick: () => null,
130
+ isSkeleton: false,
131
+ loading: false
132
+ };
133
+ const ExampleUsageComponent = () => /* @__PURE__ */ jsxs(Fragment, { children: [
134
+ /* @__PURE__ */ jsx(LeftNavigation, { ...testExplicitDefinition }),
135
+ /* @__PURE__ */ jsx(LeftNavigation, { ...testInferedTypeCompatibility }),
136
+ /* @__PURE__ */ jsx(LeftNavigation, { ...testDefinitionAsConst }),
137
+ /* @__PURE__ */ jsx(
138
+ LeftNavigation,
139
+ {
140
+ expanded: true,
141
+ expandedWidth: "100px",
142
+ openedItem: "opened item",
143
+ items: [
144
+ {
145
+ type: ITEM_TYPES.LEFT_NAV_ITEM_HEADER,
146
+ dsId: "application-header-id",
147
+ CollapsedComponent: () => /* @__PURE__ */ jsx("div", {}),
148
+ itemOpts: {
149
+ label: "Notifications"
150
+ }
151
+ }
152
+ ],
153
+ footerLabel: "",
154
+ onSelectedChange: () => null,
155
+ onFocusChange: () => null,
156
+ onFooterExpand: () => null,
157
+ onFooterClose: () => null,
158
+ labelOverflow: "wrap",
159
+ onItemClick: () => null
160
+ }
161
+ )
162
+ ] });
163
+ //# sourceMappingURL=typescript-left-navigation-valid.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/typescript-testing/typescript-left-navigation-valid.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable @typescript-eslint/no-unused-vars, no-unused-vars */\nimport { createRef } from 'react';\nimport { LeftNavigation } from '../index.js';\nimport type { DSLeftNavigationT } from '../index.js';\nimport { ITEM_TYPES } from '../exported-related/constants.js';\n// test we expose the namespace and the namespace follows our deliverable conventions\ntype ComponentPropsForApp = DSLeftNavigationT.Props;\ntype ComponentPropsInternals = DSLeftNavigationT.InternalProps;\ntype ComponentPropsDefaultProps = DSLeftNavigationT.DefaultProps;\ntype ComponentPropsOptionalProps = DSLeftNavigationT.OptionalProps;\n\nconst ref = createRef<{ setFocusedItem: React.Dispatch<React.SetStateAction<string | null>> }>();\n\nconst testOptionalProps: ComponentPropsOptionalProps = {\n selectedItem: 'selected item',\n selectedParent: 'parent',\n disableDefaultSelection: true,\n withoutBodyShadow: true,\n actionRef: ref,\n HeaderComponent: {\n type: ITEM_TYPES.LEFT_NAV_ITEM_HEADER,\n dsId: 'application-header-id',\n CollapsedComponent: () => <div />,\n itemOpts: {\n label: 'Notifications',\n },\n },\n BodyHeaderComponent: {\n type: ITEM_TYPES.LEFT_NAV_ITEM_SUBMENU,\n dsId: 'application-submenu-forms-id',\n CollapsedComponent: () => <div />,\n itemOpts: {\n label: 'Forms',\n },\n },\n};\n\n// difference Props and InternalProps is that InternalProps has all the default props filled in\n// Props allows for partial defaults\nconst testPartialDefaults: Partial<ComponentPropsDefaultProps> = {};\nconst testProps: ComponentPropsForApp = {\n ...testOptionalProps,\n ...testPartialDefaults,\n};\nconst testPropsAsSyntax = {\n ...testOptionalProps,\n ...testPartialDefaults,\n} as ComponentPropsForApp;\n// InternalProps requires all defaults to be filled in\nconst testCompleteDefaults: Required<ComponentPropsDefaultProps> = {\n expanded: true,\n expandedWidth: '100px',\n openedItem: 'opened item',\n items: [\n {\n type: ITEM_TYPES.LEFT_NAV_ITEM_HEADER,\n dsId: 'application-header-id',\n CollapsedComponent: () => <div />,\n itemOpts: {\n label: 'Notifications',\n },\n },\n ],\n footerLabel: '',\n onSelectedChange: () => null,\n onFocusChange: () => null,\n onFooterExpand: () => null,\n onFooterClose: () => null,\n labelOverflow: 'wrap',\n onItemClick: () => null,\n isSkeleton: false,\n loading: false,\n};\nconst testInternalProps: ComponentPropsInternals = {\n ...testOptionalProps,\n ...testCompleteDefaults,\n};\nconst testInternalPropsAsSyntax = {\n ...testOptionalProps,\n ...testCompleteDefaults,\n} as ComponentPropsInternals;\n\n// using the explicit type definition, if there is an error, it will be marked on the key that is wrong\nconst testExplicitDefinition: ComponentPropsForApp = {\n expanded: true,\n expandedWidth: '100px',\n openedItem: 'opened item',\n items: [\n {\n type: ITEM_TYPES.LEFT_NAV_ITEM_HEADER,\n dsId: 'application-header-id',\n CollapsedComponent: () => <div />,\n itemOpts: {\n label: 'Notifications',\n },\n },\n ],\n footerLabel: '',\n onSelectedChange: () => null,\n onFocusChange: () => null,\n onFooterExpand: () => null,\n onFooterClose: () => null,\n labelOverflow: 'wrap',\n onItemClick: () => null,\n isSkeleton: false,\n loading: false,\n};\n\n// using the \"as\" syntax, if there is an error, it will be marking the whole object as wrong because it is not compatible with the type\nconst testInferedTypeCompatibility = {\n expanded: true,\n expandedWidth: '100px',\n openedItem: 'opened item',\n items: [\n {\n type: ITEM_TYPES.LEFT_NAV_ITEM_HEADER,\n dsId: 'application-header-id',\n CollapsedComponent: () => <div />,\n itemOpts: {\n label: 'Notifications',\n },\n },\n ],\n footerLabel: '',\n onSelectedChange: () => null,\n onFocusChange: () => null,\n onFooterExpand: () => null,\n onFooterClose: () => null,\n labelOverflow: 'wrap',\n onItemClick: () => null,\n isSkeleton: false,\n loading: false,\n} as ComponentPropsForApp;\n\nconst testDefinitionAsConst = {\n expanded: true,\n expandedWidth: '100px',\n openedItem: 'opened item',\n footerLabel: '',\n onSelectedChange: () => null,\n onFocusChange: () => null,\n onFooterExpand: () => null,\n onFooterClose: () => null,\n labelOverflow: 'wrap',\n onItemClick: () => null,\n isSkeleton: false,\n loading: false,\n} as const;\n\nconst ExampleUsageComponent = () => (\n <>\n {/* works with explicitly casted props, all syntaxes */}\n <LeftNavigation {...testExplicitDefinition} />\n <LeftNavigation {...testInferedTypeCompatibility} />\n <LeftNavigation {...testDefinitionAsConst} />\n {/* works with inline values */}\n <LeftNavigation\n expanded\n expandedWidth=\"100px\"\n openedItem=\"opened item\"\n items={[\n {\n type: ITEM_TYPES.LEFT_NAV_ITEM_HEADER,\n dsId: 'application-header-id',\n CollapsedComponent: () => <div />,\n itemOpts: {\n label: 'Notifications',\n },\n },\n ]}\n footerLabel=\"\"\n onSelectedChange={() => null}\n onFocusChange={() => null}\n onFooterExpand={() => null}\n onFooterClose={() => null}\n labelOverflow=\"wrap\"\n onItemClick={() => null}\n />\n </>\n);\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACsBO,SAgI5B,UAhI4B,KAgI5B,YAhI4B;AArB9B,SAAS,iBAAiB;AAC1B,SAAS,sBAAsB;AAE/B,SAAS,kBAAkB;AAO3B,MAAM,MAAM,UAAmF;AAE/F,MAAM,oBAAiD;AAAA,EACrD,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,yBAAyB;AAAA,EACzB,mBAAmB;AAAA,EACnB,WAAW;AAAA,EACX,iBAAiB;AAAA,IACf,MAAM,WAAW;AAAA,IACjB,MAAM;AAAA,IACN,oBAAoB,MAAM,oBAAC,SAAI;AAAA,IAC/B,UAAU;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,qBAAqB;AAAA,IACnB,MAAM,WAAW;AAAA,IACjB,MAAM;AAAA,IACN,oBAAoB,MAAM,oBAAC,SAAI;AAAA,IAC/B,UAAU;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AACF;AAIA,MAAM,sBAA2D,CAAC;AAClE,MAAM,YAAkC;AAAA,EACtC,GAAG;AAAA,EACH,GAAG;AACL;AACA,MAAM,oBAAoB;AAAA,EACxB,GAAG;AAAA,EACH,GAAG;AACL;AAEA,MAAM,uBAA6D;AAAA,EACjE,UAAU;AAAA,EACV,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,OAAO;AAAA,IACL;AAAA,MACE,MAAM,WAAW;AAAA,MACjB,MAAM;AAAA,MACN,oBAAoB,MAAM,oBAAC,SAAI;AAAA,MAC/B,UAAU;AAAA,QACR,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAa;AAAA,EACb,kBAAkB,MAAM;AAAA,EACxB,eAAe,MAAM;AAAA,EACrB,gBAAgB,MAAM;AAAA,EACtB,eAAe,MAAM;AAAA,EACrB,eAAe;AAAA,EACf,aAAa,MAAM;AAAA,EACnB,YAAY;AAAA,EACZ,SAAS;AACX;AACA,MAAM,oBAA6C;AAAA,EACjD,GAAG;AAAA,EACH,GAAG;AACL;AACA,MAAM,4BAA4B;AAAA,EAChC,GAAG;AAAA,EACH,GAAG;AACL;AAGA,MAAM,yBAA+C;AAAA,EACnD,UAAU;AAAA,EACV,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,OAAO;AAAA,IACL;AAAA,MACE,MAAM,WAAW;AAAA,MACjB,MAAM;AAAA,MACN,oBAAoB,MAAM,oBAAC,SAAI;AAAA,MAC/B,UAAU;AAAA,QACR,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAa;AAAA,EACb,kBAAkB,MAAM;AAAA,EACxB,eAAe,MAAM;AAAA,EACrB,gBAAgB,MAAM;AAAA,EACtB,eAAe,MAAM;AAAA,EACrB,eAAe;AAAA,EACf,aAAa,MAAM;AAAA,EACnB,YAAY;AAAA,EACZ,SAAS;AACX;AAGA,MAAM,+BAA+B;AAAA,EACnC,UAAU;AAAA,EACV,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,OAAO;AAAA,IACL;AAAA,MACE,MAAM,WAAW;AAAA,MACjB,MAAM;AAAA,MACN,oBAAoB,MAAM,oBAAC,SAAI;AAAA,MAC/B,UAAU;AAAA,QACR,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAa;AAAA,EACb,kBAAkB,MAAM;AAAA,EACxB,eAAe,MAAM;AAAA,EACrB,gBAAgB,MAAM;AAAA,EACtB,eAAe,MAAM;AAAA,EACrB,eAAe;AAAA,EACf,aAAa,MAAM;AAAA,EACnB,YAAY;AAAA,EACZ,SAAS;AACX;AAEA,MAAM,wBAAwB;AAAA,EAC5B,UAAU;AAAA,EACV,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,kBAAkB,MAAM;AAAA,EACxB,eAAe,MAAM;AAAA,EACrB,gBAAgB,MAAM;AAAA,EACtB,eAAe,MAAM;AAAA,EACrB,eAAe;AAAA,EACf,aAAa,MAAM;AAAA,EACnB,YAAY;AAAA,EACZ,SAAS;AACX;AAEA,MAAM,wBAAwB,MAC5B,iCAEE;AAAA,sBAAC,kBAAgB,GAAG,wBAAwB;AAAA,EAC5C,oBAAC,kBAAgB,GAAG,8BAA8B;AAAA,EAClD,oBAAC,kBAAgB,GAAG,uBAAuB;AAAA,EAE3C;AAAA,IAAC;AAAA;AAAA,MACC,UAAQ;AAAA,MACR,eAAc;AAAA,MACd,YAAW;AAAA,MACX,OAAO;AAAA,QACL;AAAA,UACE,MAAM,WAAW;AAAA,UACjB,MAAM;AAAA,UACN,oBAAoB,MAAM,oBAAC,SAAI;AAAA,UAC/B,UAAU;AAAA,YACR,OAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,MACA,aAAY;AAAA,MACZ,kBAAkB,MAAM;AAAA,MACxB,eAAe,MAAM;AAAA,MACrB,gBAAgB,MAAM;AAAA,MACtB,eAAe,MAAM;AAAA,MACrB,eAAc;AAAA,MACd,aAAa,MAAM;AAAA;AAAA,EACrB;AAAA,GACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { DSLeftNavigationT } from './react-desc-prop-types.js';
3
+ export declare const LeftNavigation: {
4
+ (props: DSLeftNavigationT.Props): JSX.Element;
5
+ propTypes: React.WeakValidationMap<DSLeftNavigationT.Props>;
6
+ defaultProps: DSLeftNavigationT.DefaultProps;
7
+ displayName: string;
8
+ };
9
+ export declare const LeftNavigationWithSchema: import("@elliemae/ds-legacy-props-helpers/dist/types/propTypes/types.js").DocumentedReactComponent<DSLeftNavigationT.Props>;
@@ -0,0 +1,21 @@
1
+ import type { MutableRefObject, RefObject } from 'react';
2
+ import type React from 'react';
3
+ import type { DSLeftNavigationT } from './react-desc-prop-types.js';
4
+ export type ContextProps = {
5
+ selectedItem: string | null;
6
+ setSelectedItem: React.Dispatch<React.SetStateAction<string | null>>;
7
+ selectedParent: string | null;
8
+ setSelectedParent: React.Dispatch<React.SetStateAction<string | null>>;
9
+ focusedItem: string | null;
10
+ setFocusedItem: React.Dispatch<React.SetStateAction<string | null>>;
11
+ openedDrilldowns: string[];
12
+ setOpenedDrilldowns: React.Dispatch<React.SetStateAction<string[]>>;
13
+ visibleItems: string[];
14
+ visibleItemsRefs: MutableRefObject<Record<string, RefObject<HTMLDivElement>>>;
15
+ leftNavProps: DSLeftNavigationT.InternalProps;
16
+ expandedForAnimation: boolean;
17
+ };
18
+ export declare const defaultProps: DSLeftNavigationT.DefaultProps;
19
+ export declare const defaultContext: ContextProps;
20
+ export declare const LeftNavContext: React.Context<ContextProps>;
21
+ export default LeftNavContext;
@@ -0,0 +1,6 @@
1
+ import type { Theme } from '@elliemae/ds-legacy-system';
2
+ export declare const getItemBackgroundStyle: (props: {
3
+ theme: Theme;
4
+ selected?: boolean;
5
+ opened?: boolean;
6
+ }) => string;
@@ -0,0 +1,6 @@
1
+ import type { Theme } from '@elliemae/ds-legacy-system';
2
+ export declare const getLeftBorderStyle: (props: {
3
+ theme: Theme;
4
+ selected?: boolean;
5
+ selectedParent?: boolean;
6
+ }) => string;
@@ -0,0 +1 @@
1
+ export declare const getScrolbarStyle: () => string;
@@ -0,0 +1,3 @@
1
+ export * from './getItemBackgroundStyle.js';
2
+ export * from './getLeftBorderStyle.js';
3
+ export * from './getScrollbarStyle.js';
@@ -0,0 +1,3 @@
1
+ import { useLeftNavConfig } from './useLeftNavConfig.js';
2
+ export { useLeftNavConfig } from './useLeftNavConfig.js';
3
+ export default useLeftNavConfig;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import type { DSLeftNavigationT } from '../react-desc-prop-types.js';
3
+ export declare const useLeftNavConfig: (props: DSLeftNavigationT.Props) => {
4
+ leftNavProps: DSLeftNavigationT.InternalProps;
5
+ expandedForAnimation: boolean;
6
+ selectedItem: string | null;
7
+ setSelectedItem: React.Dispatch<React.SetStateAction<string | null>>;
8
+ selectedParent: string | null;
9
+ setSelectedParent: React.Dispatch<React.SetStateAction<string | null>>;
10
+ focusedItem: string | null;
11
+ setFocusedItem: React.Dispatch<React.SetStateAction<string | null>>;
12
+ openedDrilldowns: string[];
13
+ setOpenedDrilldowns: React.Dispatch<React.SetStateAction<string[]>>;
14
+ visibleItems: string[];
15
+ visibleItemsRefs: React.MutableRefObject<Record<string, React.RefObject<HTMLDivElement>>>;
16
+ };
17
+ export default useLeftNavConfig;