@admin-layout/tailwind-design-pro 12.0.16-alpha.7 → 12.0.16-alpha.70

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 (180) hide show
  1. package/README.md +20 -0
  2. package/lib/cdm-locales/en/menu.json +2 -1
  3. package/lib/cdm-locales/es/menu.json +2 -1
  4. package/lib/cdm-locales/index.d.ts +2 -0
  5. package/lib/cdm-locales/index.d.ts.map +1 -0
  6. package/lib/cdm-locales/index.ts +1 -0
  7. package/lib/components/LanguageMenu/LanguageMenu.js.map +1 -1
  8. package/lib/components/Layout/BasicLayout/index.d.ts +2 -1
  9. package/lib/components/Layout/BasicLayout/index.d.ts.map +1 -1
  10. package/lib/components/Layout/BasicLayout/index.js +131 -44
  11. package/lib/components/Layout/BasicLayout/index.js.map +1 -1
  12. package/lib/components/Layout/BasicLayout/utils.d.ts +2 -0
  13. package/lib/components/Layout/BasicLayout/utils.d.ts.map +1 -1
  14. package/lib/components/Layout/BasicLayout/utils.js +16 -13
  15. package/lib/components/Layout/BasicLayout/utils.js.map +1 -1
  16. package/lib/components/Layout/GlobalFooter/Account.d.ts +4 -0
  17. package/lib/components/Layout/GlobalFooter/Account.d.ts.map +1 -0
  18. package/lib/components/Layout/GlobalFooter/Account.js +147 -0
  19. package/lib/components/Layout/GlobalFooter/Account.js.map +1 -0
  20. package/lib/components/Layout/GlobalFooter/BottomMenuDropdown.d.ts.map +1 -1
  21. package/lib/components/Layout/GlobalFooter/BottomMenuDropdown.js +7 -12
  22. package/lib/components/Layout/GlobalFooter/BottomMenuDropdown.js.map +1 -1
  23. package/lib/components/Layout/GlobalHeader/Header.d.ts.map +1 -1
  24. package/lib/components/Layout/GlobalHeader/Header.js +31 -8
  25. package/lib/components/Layout/GlobalHeader/Header.js.map +1 -1
  26. package/lib/components/Layout/GlobalHeader/MainHeader.d.ts +0 -2
  27. package/lib/components/Layout/GlobalHeader/MainHeader.d.ts.map +1 -1
  28. package/lib/components/Layout/GlobalHeader/MainHeader.js +32 -84
  29. package/lib/components/Layout/GlobalHeader/MainHeader.js.map +1 -1
  30. package/lib/components/Layout/GlobalHeader/OrganizationDropdown.js +1 -1
  31. package/lib/components/Layout/GlobalHeader/OrganizationDropdown.js.map +1 -1
  32. package/lib/components/Layout/GlobalHeader/RightContent.d.ts +1 -0
  33. package/lib/components/Layout/GlobalHeader/RightContent.d.ts.map +1 -1
  34. package/lib/components/Layout/GlobalHeader/RightContent.js +73 -6
  35. package/lib/components/Layout/GlobalHeader/RightContent.js.map +1 -1
  36. package/lib/components/Layout/GlobalHeader/RightMenu.d.ts.map +1 -1
  37. package/lib/components/Layout/GlobalHeader/RightMenu.js +2 -4
  38. package/lib/components/Layout/GlobalHeader/RightMenu.js.map +1 -1
  39. package/lib/components/Layout/GlobalHeader/SearchBar.js.map +1 -1
  40. package/lib/components/Layout/GlobalHeader/index.d.ts +0 -1
  41. package/lib/components/Layout/GlobalHeader/index.d.ts.map +1 -1
  42. package/lib/components/Layout/ProTailwindLayout.d.ts +2 -2
  43. package/lib/components/Layout/ProTailwindLayout.d.ts.map +1 -1
  44. package/lib/components/Layout/ProTailwindLayout.js +69 -7
  45. package/lib/components/Layout/ProTailwindLayout.js.map +1 -1
  46. package/lib/components/Layout/Sidebar/Divider.js.map +1 -1
  47. package/lib/components/Layout/Sidebar/DynamicIcon.js.map +1 -1
  48. package/lib/components/Layout/Sidebar/MainSidebar.d.ts +5 -0
  49. package/lib/components/Layout/Sidebar/MainSidebar.d.ts.map +1 -0
  50. package/lib/components/Layout/Sidebar/{Sidebar.js → MainSidebar.js} +86 -30
  51. package/lib/components/Layout/Sidebar/MainSidebar.js.map +1 -0
  52. package/lib/components/Layout/Sidebar/MainSidebarMenu.d.ts +4 -0
  53. package/lib/components/Layout/Sidebar/MainSidebarMenu.d.ts.map +1 -0
  54. package/lib/components/Layout/Sidebar/MainSidebarMenu.js +294 -0
  55. package/lib/components/Layout/Sidebar/MainSidebarMenu.js.map +1 -0
  56. package/lib/components/Layout/Sidebar/PerplexSidebar.d.ts +5 -0
  57. package/lib/components/Layout/Sidebar/PerplexSidebar.d.ts.map +1 -0
  58. package/lib/components/Layout/Sidebar/PerplexSidebar.js +218 -0
  59. package/lib/components/Layout/Sidebar/PerplexSidebar.js.map +1 -0
  60. package/lib/components/Layout/Sidebar/PerplexSidebarMenu.d.ts +4 -0
  61. package/lib/components/Layout/Sidebar/PerplexSidebarMenu.d.ts.map +1 -0
  62. package/lib/components/Layout/Sidebar/PerplexSidebarMenu.js +330 -0
  63. package/lib/components/Layout/Sidebar/PerplexSidebarMenu.js.map +1 -0
  64. package/lib/components/Layout/TailwindLayout.d.ts.map +1 -1
  65. package/lib/components/Layout/TailwindLayout.js +37 -10
  66. package/lib/components/Layout/TailwindLayout.js.map +1 -1
  67. package/lib/components/Layout/getPageTitle.js.map +1 -1
  68. package/lib/components/Layout/slot-fill/AdditionalSettings.js.map +1 -1
  69. package/lib/components/Layout/slot-fill/Footer.js.map +1 -1
  70. package/lib/components/Layout/slot-fill/HeaderSearchBar.js.map +1 -1
  71. package/lib/components/Layout/slot-fill/HeaderSearchButton.js.map +1 -1
  72. package/lib/components/Layout/slot-fill/Logo.d.ts +4 -0
  73. package/lib/components/Layout/slot-fill/Logo.d.ts.map +1 -0
  74. package/lib/components/Layout/slot-fill/Logo.js +7 -0
  75. package/lib/components/Layout/slot-fill/Logo.js.map +1 -0
  76. package/lib/components/Layout/slot-fill/RightContent.js.map +1 -1
  77. package/lib/components/Layout/slot-fill/SideMenuLogo.d.ts +4 -0
  78. package/lib/components/Layout/slot-fill/SideMenuLogo.d.ts.map +1 -0
  79. package/lib/components/Layout/slot-fill/SideMenuLogo.js +7 -0
  80. package/lib/components/Layout/slot-fill/SideMenuLogo.js.map +1 -0
  81. package/lib/components/Layout/slot-fill/index.d.ts +2 -0
  82. package/lib/components/Layout/slot-fill/index.d.ts.map +1 -1
  83. package/lib/components/Layout/util.js +1 -1
  84. package/lib/components/Layout/util.js.map +1 -1
  85. package/lib/components/SettingDrawer/CheckBoxTheme.d.ts.map +1 -1
  86. package/lib/components/SettingDrawer/CheckBoxTheme.js +13 -3
  87. package/lib/components/SettingDrawer/CheckBoxTheme.js.map +1 -1
  88. package/lib/components/SettingDrawer/InvitationSettings.d.ts.map +1 -1
  89. package/lib/components/SettingDrawer/InvitationSettings.js +10 -6
  90. package/lib/components/SettingDrawer/InvitationSettings.js.map +1 -1
  91. package/lib/components/SettingDrawer/LayoutChange.d.ts.map +1 -1
  92. package/lib/components/SettingDrawer/LayoutChange.js +23 -16
  93. package/lib/components/SettingDrawer/LayoutChange.js.map +1 -1
  94. package/lib/components/SettingDrawer/MenuVisibilitySettings.d.ts +20 -0
  95. package/lib/components/SettingDrawer/MenuVisibilitySettings.d.ts.map +1 -0
  96. package/lib/components/SettingDrawer/MenuVisibilitySettings.js +120 -0
  97. package/lib/components/SettingDrawer/MenuVisibilitySettings.js.map +1 -0
  98. package/lib/components/SettingDrawer/NavigationsModes.d.ts +1 -1
  99. package/lib/components/SettingDrawer/NavigationsModes.d.ts.map +1 -1
  100. package/lib/components/SettingDrawer/NavigationsModes.js +90 -39
  101. package/lib/components/SettingDrawer/NavigationsModes.js.map +1 -1
  102. package/lib/components/SettingDrawer/RegionalSettings.d.ts.map +1 -1
  103. package/lib/components/SettingDrawer/RegionalSettings.js +54 -177
  104. package/lib/components/SettingDrawer/RegionalSettings.js.map +1 -1
  105. package/lib/components/SettingDrawer/SettingDrawer.d.ts.map +1 -1
  106. package/lib/components/SettingDrawer/SettingDrawer.js +404 -66
  107. package/lib/components/SettingDrawer/SettingDrawer.js.map +1 -1
  108. package/lib/components/SettingDrawer/Switch/index.js.map +1 -1
  109. package/lib/components/SettingDrawer/ThemeColor.d.ts.map +1 -1
  110. package/lib/components/SettingDrawer/ThemeColor.js +15 -3
  111. package/lib/components/SettingDrawer/ThemeColor.js.map +1 -1
  112. package/lib/components/SettingDrawer/types.d.ts +12 -0
  113. package/lib/components/SettingDrawer/types.d.ts.map +1 -1
  114. package/lib/components/UpdateSettingsResource/UpdateSettingsResource.server.d.ts +10 -5
  115. package/lib/components/UpdateSettingsResource/UpdateSettingsResource.server.d.ts.map +1 -1
  116. package/lib/components/UpdateSettingsResource/UpdateSettingsResource.server.js +97 -4
  117. package/lib/components/UpdateSettingsResource/UpdateSettingsResource.server.js.map +1 -1
  118. package/lib/components/index.js +1 -1
  119. package/lib/components/typings.d.ts +16 -1
  120. package/lib/components/typings.d.ts.map +1 -1
  121. package/lib/compute.d.ts.map +1 -1
  122. package/lib/compute.js +10 -2
  123. package/lib/compute.js.map +1 -1
  124. package/lib/config/constants.js.map +1 -1
  125. package/lib/config/env-config.d.ts +3 -0
  126. package/lib/config/env-config.d.ts.map +1 -1
  127. package/lib/config/env-config.js +10 -0
  128. package/lib/config/env-config.js.map +1 -1
  129. package/lib/helpers/DynamicIcon.js.map +1 -1
  130. package/lib/hooks/useMediaQuery.js.map +1 -1
  131. package/lib/hooks/useScrollThreshold.js.map +1 -1
  132. package/lib/hooks/useTailwindTheme.js +82 -0
  133. package/lib/hooks/useTailwindTheme.js.map +1 -0
  134. package/lib/icons.d.ts +2 -0
  135. package/lib/icons.d.ts.map +1 -1
  136. package/lib/icons.js +4 -2
  137. package/lib/icons.js.map +1 -1
  138. package/lib/index.d.ts +1 -0
  139. package/lib/index.d.ts.map +1 -1
  140. package/lib/index.js +1 -1
  141. package/lib/index.js.map +1 -1
  142. package/lib/machines/selectors.d.ts +118 -0
  143. package/lib/machines/selectors.d.ts.map +1 -0
  144. package/lib/machines/settingsMachine.d.ts +25 -2
  145. package/lib/machines/settingsMachine.d.ts.map +1 -1
  146. package/lib/machines/settingsMachine.js +174 -163
  147. package/lib/machines/settingsMachine.js.map +1 -1
  148. package/lib/machines/settingsMachine.test.d.ts +2 -0
  149. package/lib/machines/settingsMachine.test.d.ts.map +1 -0
  150. package/lib/machines/types.d.ts +106 -9
  151. package/lib/machines/types.d.ts.map +1 -1
  152. package/lib/machines/types.js.map +1 -1
  153. package/lib/module.js.map +1 -1
  154. package/lib/redux/searchReducer.js.map +1 -1
  155. package/lib/routes.json +9 -1
  156. package/lib/tailwindConfig.js.map +1 -1
  157. package/lib/utils/__tests__/configOverrides.test.d.ts +2 -0
  158. package/lib/utils/__tests__/configOverrides.test.d.ts.map +1 -0
  159. package/lib/utils/configOverrides.d.ts +213 -0
  160. package/lib/utils/configOverrides.d.ts.map +1 -0
  161. package/lib/utils/configOverrides.js +91 -0
  162. package/lib/utils/configOverrides.js.map +1 -0
  163. package/lib/utils/isBrowser/index.js.map +1 -1
  164. package/lib/utils/settingsUtils.d.ts +20 -0
  165. package/lib/utils/settingsUtils.d.ts.map +1 -0
  166. package/lib/utils/settingsUtils.js +74 -0
  167. package/lib/utils/settingsUtils.js.map +1 -0
  168. package/lib/utils/utils/index.js.map +1 -1
  169. package/package.json +6 -6
  170. package/lib/components/Layout/GlobalHeader/Logo.d.ts +0 -4
  171. package/lib/components/Layout/GlobalHeader/Logo.d.ts.map +0 -1
  172. package/lib/components/Layout/GlobalHeader/Logo.js +0 -141
  173. package/lib/components/Layout/GlobalHeader/Logo.js.map +0 -1
  174. package/lib/components/Layout/Sidebar/Sidebar.d.ts +0 -5
  175. package/lib/components/Layout/Sidebar/Sidebar.d.ts.map +0 -1
  176. package/lib/components/Layout/Sidebar/Sidebar.js.map +0 -1
  177. package/lib/components/Layout/Sidebar/SidebarMenu.d.ts +0 -4
  178. package/lib/components/Layout/Sidebar/SidebarMenu.d.ts.map +0 -1
  179. package/lib/components/Layout/Sidebar/SidebarMenu.js +0 -176
  180. package/lib/components/Layout/Sidebar/SidebarMenu.js.map +0 -1
@@ -0,0 +1,294 @@
1
+ import {jsx,jsxs}from'react/jsx-runtime';import {generateMenuPath}from'@admin-layout/client';import {useLocation,Link}from'@remix-run/react';import React__default,{useState,useCallback}from'react';import {icons}from'../../../icons.js';// Constants moved outside component
2
+ const SIDEBAR_WIDTHS = {
3
+ COLLAPSED: 64,
4
+ EXPANDED: 256
5
+ };
6
+ const POPUP_CONFIG = {
7
+ MAX_HEIGHT: 400,
8
+ MIN_WIDTH: 220};
9
+ // Pure function moved outside component
10
+ const getFirstLetter = name => name.charAt(0).toUpperCase();
11
+ // Utility for determining active menu item
12
+ const isMenuItemActive = (itemPath, currentPath, routeParams) => {
13
+ const menuPath = generateMenuPath(itemPath, routeParams);
14
+ // Exact match
15
+ if (currentPath === menuPath) {
16
+ return true;
17
+ }
18
+ // Check if current path is a child of the menu item path
19
+ if (menuPath && currentPath.startsWith(menuPath + '/')) {
20
+ return true;
21
+ }
22
+ return false;
23
+ };
24
+ // CSS keyframes definition moved outside component
25
+ const POPUP_ANIMATION_CSS = `
26
+ @keyframes fadeIn {
27
+ from { opacity: 0; transform: translateX(-10px); }
28
+ to { opacity: 1; transform: translateX(0); }
29
+ }
30
+ `;
31
+ const getTextColor = (active, navTheme) => {
32
+ if (active) return 'text-primary';
33
+ if (navTheme === 'realDark') return 'text-white';
34
+ return 'text-foreground';
35
+ };
36
+ const getIconColor = (active, navTheme) => {
37
+ if (active) return 'text-primary';
38
+ if (navTheme === 'realDark') return 'text-white';
39
+ return 'text-muted-foreground';
40
+ };
41
+ // Custom comparison function for React.memo
42
+ // Update the areMenuItemPropsEqual function to be more precise about location changes
43
+ const areMenuItemPropsEqual = (prevProps, nextProps) => {
44
+ // Always re-render if the item itself changed
45
+ if (prevProps.item !== nextProps.item) {
46
+ return false;
47
+ }
48
+ // Check only if active state changes instead of checking entire pathname
49
+ const prevIsActive = isMenuItemActive(prevProps.item.path, prevProps.locationPathname, prevProps.routeParams);
50
+ const nextIsActive = isMenuItemActive(nextProps.item.path, nextProps.locationPathname, nextProps.routeParams);
51
+ if (prevIsActive !== nextIsActive) {
52
+ return false;
53
+ }
54
+ // Rest of your existing checks...
55
+ if (prevProps.depth !== nextProps.depth || prevProps.isHoverMenu !== nextProps.isHoverMenu || prevProps.collapsed !== nextProps.collapsed || prevProps.navTheme !== nextProps.navTheme) {
56
+ return false;
57
+ }
58
+ // Check routeParams (shallow object comparison)
59
+ const prevRouteParamsKeys = Object.keys(prevProps.routeParams);
60
+ const nextRouteParamsKeys = Object.keys(nextProps.routeParams);
61
+ if (prevRouteParamsKeys.length !== nextRouteParamsKeys.length) {
62
+ return false;
63
+ }
64
+ for (const key of prevRouteParamsKeys) {
65
+ if (prevProps.routeParams[key] !== nextProps.routeParams[key]) {
66
+ return false;
67
+ }
68
+ }
69
+ // Check popupPosition
70
+ if (prevProps.popupPosition.top !== nextProps.popupPosition.top || prevProps.popupPosition.height !== nextProps.popupPosition.height) {
71
+ return false;
72
+ }
73
+ // Check if this specific item's open state changed
74
+ const prevIsOpen = prevProps.openMenus.includes(prevProps.item.path);
75
+ const nextIsOpen = nextProps.openMenus.includes(nextProps.item.path);
76
+ if (prevIsOpen !== nextIsOpen) {
77
+ return false;
78
+ }
79
+ // Check if this specific item's hover state changed
80
+ const prevIsHovered = prevProps.hoveredMenu === prevProps.item.path;
81
+ const nextIsHovered = nextProps.hoveredMenu === nextProps.item.path;
82
+ if (prevIsHovered !== nextIsHovered) {
83
+ return false;
84
+ }
85
+ // If none of the relevant props changed, don't re-render
86
+ return true;
87
+ };
88
+ const MenuItem = React__default.memo(({
89
+ item,
90
+ depth,
91
+ isHoverMenu,
92
+ openMenus,
93
+ hoveredMenu,
94
+ collapsed,
95
+ navTheme,
96
+ locationPathname,
97
+ routeParams,
98
+ popupPosition,
99
+ onToggleMenu,
100
+ onMenuHover,
101
+ onMenuLeave,
102
+ ChevronUpIcon,
103
+ ChevronDownIcon
104
+ }) => {
105
+ // Only log when actually rendering (not on every navigation)
106
+ const hasChildren = item.children && item.children.length > 0;
107
+ const isOpen = openMenus.includes(item.path);
108
+ const isActive = isMenuItemActive(item.path, locationPathname, routeParams);
109
+ const isHovered = hoveredMenu === item.path;
110
+ const menuItemPaddingLeft = `${depth * 1}rem`;
111
+ const subMenuItemPaddingLeft = `${depth * 2}rem`;
112
+ // Determine styling based on whether it's a parent or child item
113
+ const isParentWithChildren = hasChildren && depth === 0;
114
+ const shouldApplyBackground = isActive && !isParentWithChildren || isHovered;
115
+ const handleMenuClick = useCallback(e => {
116
+ if (hasChildren && !collapsed) {
117
+ onToggleMenu(item.path, depth, e);
118
+ }
119
+ }, [hasChildren, collapsed, item.path, depth, onToggleMenu]);
120
+ const renderPopupMenu = useCallback(() => {
121
+ if (!item.children || item.children.length === 0) return null;
122
+ return jsxs("div", {
123
+ className: "fixed shadow-themed-xl rounded-themed-lg border border-border z-[999] overflow-hidden themed-dropdown",
124
+ style: {
125
+ left: `${SIDEBAR_WIDTHS[collapsed ? 'COLLAPSED' : 'EXPANDED']}px`,
126
+ top: `${popupPosition.top}px`,
127
+ animation: 'fadeIn 0.2s ease-out forwards',
128
+ maxWidth: 'calc(100vw - 100px)',
129
+ width: 'max-content',
130
+ minWidth: POPUP_CONFIG.MIN_WIDTH
131
+ },
132
+ children: [jsx("style", {
133
+ dangerouslySetInnerHTML: {
134
+ __html: POPUP_ANIMATION_CSS
135
+ }
136
+ }), jsx("div", {
137
+ className: "font-medium text-sm px-4 py-3 border-b border-border whitespace-nowrap bg-muted",
138
+ children: jsx("span", {
139
+ className: "text-primary",
140
+ children: item.name
141
+ })
142
+ }), jsx("div", {
143
+ className: `max-h-[${POPUP_CONFIG.MAX_HEIGHT}px] overflow-y-auto overflow-x-hidden py-1`,
144
+ children: item.children.map(child => jsx(MenuItem, {
145
+ item: child,
146
+ depth: depth + 1,
147
+ isHoverMenu: true,
148
+ openMenus: openMenus,
149
+ hoveredMenu: hoveredMenu,
150
+ collapsed: collapsed,
151
+ navTheme: navTheme,
152
+ locationPathname: locationPathname,
153
+ routeParams: routeParams,
154
+ popupPosition: popupPosition,
155
+ onToggleMenu: onToggleMenu,
156
+ onMenuHover: onMenuHover,
157
+ onMenuLeave: onMenuLeave,
158
+ ChevronUpIcon: ChevronUpIcon,
159
+ ChevronDownIcon: ChevronDownIcon
160
+ }, child.path))
161
+ })]
162
+ });
163
+ }, [item, depth, collapsed, popupPosition.top, openMenus, hoveredMenu, navTheme, locationPathname, routeParams, onToggleMenu, onMenuHover, onMenuLeave, ChevronUpIcon, ChevronDownIcon]);
164
+ return jsxs("div", {
165
+ className: `w-full relative group ${isHovered && collapsed && !isHoverMenu ? 'rounded-themed' : ''}`,
166
+ style: {
167
+ backgroundColor: isHovered && !isHoverMenu ? 'hsl(var(--muted))' : ''
168
+ },
169
+ onMouseEnter: e => onMenuHover(e, item, isHoverMenu),
170
+ onMouseLeave: () => onMenuLeave(item, isHoverMenu),
171
+ children: [jsxs(Link, {
172
+ to: hasChildren && collapsed && !isHoverMenu ? '#' : generateMenuPath(item?.path, routeParams),
173
+ className: `flex items-center justify-between w-full px-1 py-2 hover:bg-muted text-sm cursor-pointer transition-colors rounded-themed mx-1 my-0.5 whitespace-nowrap overflow-hidden text-ellipsis ${shouldApplyBackground ? 'bg-muted' : ''}`,
174
+ style: {
175
+ paddingLeft: `calc(1rem + ${depth > 0 ? subMenuItemPaddingLeft : menuItemPaddingLeft})`
176
+ },
177
+ onClick: handleMenuClick,
178
+ children: [jsxs("div", {
179
+ className: `flex items-center ${collapsed && !isHoverMenu ? 'justify-center w-full' : 'gap-3'}`,
180
+ children: [item.icon ? jsx("span", {
181
+ className: `flex-shrink-0 ${getIconColor(isActive, navTheme)}`,
182
+ children: item.icon
183
+ }) : collapsed && !isHoverMenu ? jsx("span", {
184
+ className: `flex items-center justify-center flex-shrink-0 ${getIconColor(isActive, navTheme)}`,
185
+ children: getFirstLetter(item.name)
186
+ }) : null, (!collapsed || isHoverMenu) && jsx("span", {
187
+ className: `font-medium whitespace-nowrap overflow-hidden text-ellipsis ${getTextColor(isActive, navTheme)} ${depth > 0 ? `text-xs` : ''}`,
188
+ children: item.name
189
+ })]
190
+ }), hasChildren && (!collapsed || isHoverMenu) && jsx("span", {
191
+ className: `flex-shrink-0 ml-1 ${getIconColor(isActive, navTheme)}`,
192
+ children: isOpen ? jsx(ChevronUpIcon, {
193
+ className: "h-4 w-4"
194
+ }) : jsx(ChevronDownIcon, {
195
+ className: "h-4 w-4"
196
+ })
197
+ })]
198
+ }), collapsed && hasChildren && isHovered && !isHoverMenu && item.children.length > 0 && renderPopupMenu(), hasChildren && isOpen && !collapsed && jsx("div", {
199
+ className: "transition-all duration-200 ease-in-out",
200
+ children: item.children.map(child => jsx(MenuItem, {
201
+ item: child,
202
+ depth: depth + 1,
203
+ isHoverMenu: false,
204
+ openMenus: openMenus,
205
+ hoveredMenu: hoveredMenu,
206
+ collapsed: collapsed,
207
+ navTheme: navTheme,
208
+ locationPathname: locationPathname,
209
+ routeParams: routeParams,
210
+ popupPosition: popupPosition,
211
+ onToggleMenu: onToggleMenu,
212
+ onMenuHover: onMenuHover,
213
+ onMenuLeave: onMenuLeave,
214
+ ChevronUpIcon: ChevronUpIcon,
215
+ ChevronDownIcon: ChevronDownIcon
216
+ }, child.path))
217
+ })]
218
+ });
219
+ }, areMenuItemPropsEqual);
220
+ MenuItem.displayName = 'MenuItem';
221
+ const MainSidebarMenuComponent = ({
222
+ menuData,
223
+ routeParams,
224
+ settings,
225
+ collapsed
226
+ }) => {
227
+ const [openMenus, setOpenMenus] = useState([]);
228
+ const [hoveredMenu, setHoveredMenu] = useState(null);
229
+ const [popupPosition, setPopupPosition] = useState({
230
+ top: 0,
231
+ height: 0
232
+ });
233
+ const {
234
+ ChevronDownIcon,
235
+ ChevronUpIcon
236
+ } = icons;
237
+ const location = useLocation();
238
+ const navTheme = settings?.navTheme;
239
+ // Event handler for toggling menu open/closed
240
+ const toggleMenu = useCallback((path, depth, e) => {
241
+ e.preventDefault();
242
+ if (collapsed) return;
243
+ setOpenMenus(prev => {
244
+ if (prev.includes(path)) {
245
+ return prev.filter(item => item !== path);
246
+ } else {
247
+ return [...prev, path];
248
+ }
249
+ });
250
+ }, [collapsed]);
251
+ // Event handlers for hover effects
252
+ const handleMenuHover = useCallback((e, item, isHoverMenu) => {
253
+ // Only set hover state if the menu has children
254
+ if (collapsed && !isHoverMenu && item.children && item.children.length > 0) {
255
+ const element = e.currentTarget;
256
+ const rect = element.getBoundingClientRect();
257
+ setPopupPosition({
258
+ top: rect.top,
259
+ height: rect.height
260
+ });
261
+ setHoveredMenu(item.path);
262
+ }
263
+ }, [collapsed]);
264
+ const handleMenuLeave = useCallback((item, isHoverMenu) => {
265
+ if (collapsed && !isHoverMenu) {
266
+ setHoveredMenu(null);
267
+ }
268
+ }, [collapsed]);
269
+ return jsx("div", {
270
+ className: "overflow-hidden",
271
+ children: jsx("nav", {
272
+ className: `mt-2 ${collapsed ? 'px-1' : 'px-2'} overflow-x-hidden`,
273
+ children: menuData.map(item => jsx(MenuItem, {
274
+ item: item,
275
+ depth: 0,
276
+ isHoverMenu: false,
277
+ openMenus: openMenus,
278
+ hoveredMenu: hoveredMenu,
279
+ collapsed: collapsed,
280
+ navTheme: navTheme,
281
+ locationPathname: location.pathname,
282
+ routeParams: routeParams,
283
+ popupPosition: popupPosition,
284
+ onToggleMenu: toggleMenu,
285
+ onMenuHover: handleMenuHover,
286
+ onMenuLeave: handleMenuLeave,
287
+ ChevronUpIcon: ChevronUpIcon,
288
+ ChevronDownIcon: ChevronDownIcon
289
+ }, item.path))
290
+ })
291
+ });
292
+ };
293
+ // Export the memoized version to prevent unnecessary re-renders
294
+ const MainSidebarMenu = React__default.memo(MainSidebarMenuComponent);export{MainSidebarMenu};//# sourceMappingURL=MainSidebarMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MainSidebarMenu.js","sources":["../../../../src/components/Layout/Sidebar/MainSidebarMenu.tsx"],"sourcesContent":[null],"names":["React","_jsx","_jsxs"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { SidebarProps } from '../../typings';
3
+ export declare const PerplexSidebar: React.FC<SidebarProps>;
4
+ export default PerplexSidebar;
5
+ //# sourceMappingURL=PerplexSidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PerplexSidebar.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/Sidebar/PerplexSidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAK7C,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAyPjD,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,218 @@
1
+ import {jsxs,jsx}from'react/jsx-runtime';import React__default,{useEffect}from'react';import {useTranslation}from'react-i18next';import {getMenuSeparation}from'@admin-layout/client';import {Divider}from'./Divider.js';import {PerplexSidebarMenu}from'./PerplexSidebarMenu.js';import'@react-icons/all-files/fa/FaMoon.js';import'@react-icons/all-files/fa/FaSun.js';import {useMediaQuery}from'../../../hooks/useMediaQuery.js';import Account from'../GlobalFooter/Account.js';import'@common-stack/components-pro';import'reflect-metadata';import'@admin-layout/client/lib/constants/layout.js';import {SideMenuLogoSlot}from'../slot-fill/SideMenuLogo.js';const PerplexSidebar = props => {
2
+ const {
3
+ isSideMenuOpen,
4
+ closeSideMenu,
5
+ menuData,
6
+ collapsed,
7
+ routeParams,
8
+ settings,
9
+ location,
10
+ siderPinned,
11
+ setSiderPinned,
12
+ layoutSettings,
13
+ deviceSettings,
14
+ actor,
15
+ sideBarMarginTop,
16
+ showHeader,
17
+ menuHeaderRender,
18
+ isSideMenuLayout
19
+ } = props;
20
+ const [iconModule, setIconModule] = React__default.useState(null);
21
+ const {
22
+ t,
23
+ i18n
24
+ } = useTranslation('menu');
25
+ const {
26
+ isMobile
27
+ } = useMediaQuery();
28
+ const currentRoute = location?.pathname || '/';
29
+ const deviceType = isMobile ? 'mobile' : 'desktop';
30
+ // Helper function to get value from settings with route/device override support
31
+ const getUILayoutValue = path => {
32
+ // Check for route/device-specific override first
33
+ const routeDeviceKey = `[${currentRoute}][${deviceType}]`;
34
+ const uiOverride = settings?.uiSettings?.[routeDeviceKey];
35
+ if (uiOverride) {
36
+ const value = path.split('.').reduce((obj, key) => obj?.[key], uiOverride);
37
+ if (value !== undefined) return value;
38
+ }
39
+ // Fallback to settings (flattened uilayout from configuration-registries)
40
+ return path.split('.').reduce((obj, key) => obj?.[key], settings);
41
+ };
42
+ // Get layout settings from the new flat structure
43
+ const deviceLayout = {
44
+ navigationMode: getUILayoutValue('navigationMode'),
45
+ sideMenuType: getUILayoutValue('sideMenuType'),
46
+ contentWidth: getUILayoutValue('contentWidth'),
47
+ fixedHeader: getUILayoutValue('fixedHeader'),
48
+ fixedSidebar: getUILayoutValue('fixedSidebar'),
49
+ splitMenus: getUILayoutValue('splitMenus'),
50
+ upperMenuDividerName: getUILayoutValue('upperMenuDividerName'),
51
+ middleMenuDividerName: getUILayoutValue('middleMenuDividerName'),
52
+ lowerMenuDividerName: getUILayoutValue('lowerMenuDividerName')
53
+ };
54
+ useEffect(() => {
55
+ if (!iconModule) {
56
+ import('./DynamicIcon.js').then(module => {
57
+ setIconModule(module);
58
+ });
59
+ }
60
+ }, []);
61
+ // Close sidebar when clicking outside on mobile
62
+ useEffect(() => {
63
+ const handleClickOutside = event => {
64
+ const sidebar = document.getElementById('mobile-sidebar');
65
+ if (sidebar && !sidebar.contains(event.target) && isSideMenuOpen) {
66
+ closeSideMenu();
67
+ }
68
+ };
69
+ document.addEventListener('mousedown', handleClickOutside);
70
+ return () => {
71
+ document.removeEventListener('mousedown', handleClickOutside);
72
+ };
73
+ }, [isSideMenuOpen, closeSideMenu]);
74
+ // Close sidebar when pressing escape
75
+ useEffect(() => {
76
+ const handleEscape = event => {
77
+ if (event.key === 'Escape' && isSideMenuOpen) {
78
+ closeSideMenu();
79
+ }
80
+ };
81
+ document.addEventListener('keydown', handleEscape);
82
+ return () => {
83
+ document.removeEventListener('keydown', handleEscape);
84
+ };
85
+ }, [isSideMenuOpen, closeSideMenu]);
86
+ const {
87
+ middleMenus,
88
+ lowerMenus,
89
+ bottomMenus
90
+ } = getMenuSeparation(menuData || []);
91
+ const updateMenuIcons = (menuItems = []) => {
92
+ if (!menuItems || !Array.isArray(menuItems)) return [];
93
+ return menuItems.map(item => {
94
+ const updatedItem = {
95
+ ...item,
96
+ name: t(item.name),
97
+ icon: iconModule && item.icon ? iconModule.renderDynamicIcon(item.icon) : null
98
+ };
99
+ if (updatedItem.children) {
100
+ updatedItem.children = updateMenuIcons(updatedItem.children);
101
+ }
102
+ return updatedItem;
103
+ });
104
+ };
105
+ const bottomMenusData = {
106
+ menuData: updateMenuIcons(bottomMenus)
107
+ };
108
+ // Use CSS classes instead of theme-based styling
109
+ const getSidebarClasses = () => {
110
+ let classes = `text-gray-500 dark:text-gray-400 h-full flex flex-col`;
111
+ if (settings?.navTheme === 'realDark') {
112
+ classes += ' themed-sidebar';
113
+ }
114
+ if (showHeader) {
115
+ classes += ' md:h-[84vh]';
116
+ }
117
+ if (!showHeader) {
118
+ classes += ' md:h-[87vh]';
119
+ }
120
+ return classes;
121
+ };
122
+ const SidebarStyles = React__default.useMemo(() => ({
123
+ backgroundColor: settings?.navTheme === 'realDark' ? '#222' : '',
124
+ color: settings?.navTheme === 'realDark' ? '#fff !important' : ''
125
+ }), [settings]);
126
+ // Helper function to render a separator with a name
127
+ const renderSeparator = name => {
128
+ if (!deviceLayout?.splitMenus) return null;
129
+ return collapsed ? jsx("hr", {
130
+ className: "border-t border-border"
131
+ }) : jsx(Divider, {
132
+ className: "text-muted-foreground border-border my-2 p-0",
133
+ plain: true,
134
+ children: name
135
+ });
136
+ };
137
+ const renderSidebarContent = () => {
138
+ return jsxs("div", {
139
+ className: getSidebarClasses(),
140
+ style: SidebarStyles,
141
+ children: [jsx("div", {
142
+ className: "relative"
143
+ }), jsxs("div", {
144
+ className: "flex-grow overflow-y-auto",
145
+ children: [middleMenus?.length > 0 && jsxs("div", {
146
+ className: "removeBoxShadow",
147
+ children: [renderSeparator(deviceLayout?.middleMenuDividerName), jsx(PerplexSidebarMenu, {
148
+ menuData: updateMenuIcons(middleMenus),
149
+ routeParams: routeParams,
150
+ settings: settings,
151
+ collapsed: collapsed,
152
+ siderPinned: siderPinned,
153
+ setSiderPinned: setSiderPinned,
154
+ actor: actor,
155
+ deviceSettings: deviceSettings
156
+ })]
157
+ }), lowerMenus?.length > 0 && jsxs("div", {
158
+ className: "removeBoxShadow",
159
+ children: [renderSeparator(deviceLayout?.lowerMenuDividerName), jsx(PerplexSidebarMenu, {
160
+ menuData: updateMenuIcons(lowerMenus),
161
+ routeParams: routeParams,
162
+ settings: settings,
163
+ collapsed: collapsed,
164
+ siderPinned: siderPinned,
165
+ setSiderPinned: setSiderPinned,
166
+ actor: actor,
167
+ deviceSettings: deviceSettings
168
+ })]
169
+ })]
170
+ })]
171
+ });
172
+ };
173
+ return jsxs("div", {
174
+ children: [!isMobile && jsxs("aside", {
175
+ className: `${deviceLayout?.fixedSidebar ? 'fixed' : 'relative'} border-r border-border z-20 h-screen bg-card text-card-foreground md:block flex-shrink-0 transition-all duration-300 ease-in-out w-[92px]`,
176
+ children: [menuHeaderRender && isSideMenuLayout && jsx("div", {
177
+ className: "border-b border-border py-1 flex items-center justify-center",
178
+ children: jsx(SideMenuLogoSlot, {
179
+ settings: settings,
180
+ location: location
181
+ })
182
+ }), jsx("div", {
183
+ children: renderSidebarContent()
184
+ }), jsx("div", {
185
+ className: "flex-shrink-0 p-4 border-t border-border",
186
+ children: jsx(Account, {
187
+ menus: bottomMenusData,
188
+ collapsed: collapsed,
189
+ routeParams: routeParams,
190
+ layoutSettings: layoutSettings
191
+ })
192
+ })]
193
+ }), isSideMenuOpen && isMobile && jsx("div", {
194
+ className: "fixed inset-0 z-10 flex items-end bg-black bg-opacity-50 sm:items-center sm:justify-center transition-opacity duration-300",
195
+ onClick: closeSideMenu
196
+ }), isSideMenuOpen && isMobile && jsxs("aside", {
197
+ id: "mobile-sidebar",
198
+ className: `fixed inset-0 z-20 flex-shrink-0 bg-card text-card-foreground md:hidden transition-transform duration-300 ease-in-out transform w-[92px]`,
199
+ children: [menuHeaderRender && isSideMenuLayout && jsx("div", {
200
+ className: "border-b border-border py-1 flex items-center justify-center",
201
+ children: jsx(SideMenuLogoSlot, {
202
+ settings: settings,
203
+ location: location
204
+ })
205
+ }), jsx("div", {
206
+ children: renderSidebarContent()
207
+ }), jsx("div", {
208
+ className: "flex-shrink-0 p-4 border-t border-border",
209
+ children: jsx(Account, {
210
+ menus: bottomMenusData,
211
+ collapsed: collapsed,
212
+ routeParams: routeParams,
213
+ layoutSettings: layoutSettings
214
+ })
215
+ })]
216
+ })]
217
+ });
218
+ };export{PerplexSidebar,PerplexSidebar as default};//# sourceMappingURL=PerplexSidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PerplexSidebar.js","sources":["../../../../src/components/Layout/Sidebar/PerplexSidebar.tsx"],"sourcesContent":[null],"names":["React"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { SidebarMenuProps } from '../../typings';
3
+ export declare const PerplexSidebarMenu: React.FC<SidebarMenuProps>;
4
+ //# sourceMappingURL=PerplexSidebarMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PerplexSidebarMenu.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/Sidebar/PerplexSidebarMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAM3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAgazD,CAAC"}