@admin-layout/tailwind-design-pro 12.0.16-alpha.3 → 12.0.16-alpha.30

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 (173) hide show
  1. package/README.md +30 -0
  2. package/lib/cdm-locales/en/menu.json +2 -1
  3. package/lib/cdm-locales/es/menu.json +2 -1
  4. package/lib/components/Layout/BasicLayout/index.d.ts +1 -1
  5. package/lib/components/Layout/BasicLayout/index.d.ts.map +1 -1
  6. package/lib/components/Layout/BasicLayout/index.js +38 -9
  7. package/lib/components/Layout/BasicLayout/index.js.map +1 -1
  8. package/lib/components/Layout/BasicLayout/utils.d.ts +2 -0
  9. package/lib/components/Layout/BasicLayout/utils.d.ts.map +1 -1
  10. package/lib/components/Layout/BasicLayout/utils.js +12 -9
  11. package/lib/components/Layout/BasicLayout/utils.js.map +1 -1
  12. package/lib/components/Layout/GlobalFooter/BottomMenuDropdown.d.ts.map +1 -1
  13. package/lib/components/Layout/GlobalFooter/BottomMenuDropdown.js +4 -2
  14. package/lib/components/Layout/GlobalFooter/BottomMenuDropdown.js.map +1 -1
  15. package/lib/components/Layout/GlobalHeader/Header.js +1 -1
  16. package/lib/components/Layout/GlobalHeader/Header.js.map +1 -1
  17. package/lib/components/Layout/GlobalHeader/MainHeader.js +2 -2
  18. package/lib/components/Layout/GlobalHeader/MainHeader.js.map +1 -1
  19. package/lib/components/Layout/GlobalHeader/OrganizationDropdown.js +1 -1
  20. package/lib/components/Layout/GlobalHeader/RightContent.d.ts +1 -0
  21. package/lib/components/Layout/GlobalHeader/RightContent.d.ts.map +1 -1
  22. package/lib/components/Layout/GlobalHeader/RightContent.js +74 -6
  23. package/lib/components/Layout/GlobalHeader/RightContent.js.map +1 -1
  24. package/lib/components/Layout/GlobalHeader/RightMenu.d.ts.map +1 -1
  25. package/lib/components/Layout/GlobalHeader/RightMenu.js +2 -4
  26. package/lib/components/Layout/GlobalHeader/RightMenu.js.map +1 -1
  27. package/lib/components/Layout/ProTailwindLayout.d.ts +2 -2
  28. package/lib/components/Layout/ProTailwindLayout.d.ts.map +1 -1
  29. package/lib/components/Layout/ProTailwindLayout.js +69 -7
  30. package/lib/components/Layout/ProTailwindLayout.js.map +1 -1
  31. package/lib/components/Layout/Sidebar/MainSidebar.d.ts +5 -0
  32. package/lib/components/Layout/Sidebar/MainSidebar.d.ts.map +1 -0
  33. package/lib/components/Layout/Sidebar/{Sidebar.js → MainSidebar.js} +4 -5
  34. package/lib/components/Layout/Sidebar/MainSidebar.js.map +1 -0
  35. package/lib/components/Layout/Sidebar/MainSidebarMenu.d.ts +4 -0
  36. package/lib/components/Layout/Sidebar/MainSidebarMenu.d.ts.map +1 -0
  37. package/lib/components/Layout/Sidebar/MainSidebarMenu.js +293 -0
  38. package/lib/components/Layout/Sidebar/MainSidebarMenu.js.map +1 -0
  39. package/lib/components/Layout/Sidebar/PerplexSidebar.d.ts +5 -0
  40. package/lib/components/Layout/Sidebar/PerplexSidebar.d.ts.map +1 -0
  41. package/lib/components/Layout/Sidebar/PerplexSidebar.js +170 -0
  42. package/lib/components/Layout/Sidebar/PerplexSidebar.js.map +1 -0
  43. package/lib/components/Layout/Sidebar/PerplexSidebarMenu.d.ts +4 -0
  44. package/lib/components/Layout/Sidebar/PerplexSidebarMenu.d.ts.map +1 -0
  45. package/lib/components/Layout/Sidebar/PerplexSidebarMenu.js +261 -0
  46. package/lib/components/Layout/Sidebar/PerplexSidebarMenu.js.map +1 -0
  47. package/lib/components/Layout/TailwindLayout.d.ts.map +1 -1
  48. package/lib/components/Layout/TailwindLayout.js +8 -5
  49. package/lib/components/Layout/TailwindLayout.js.map +1 -1
  50. package/lib/components/Layout/util.js +1 -1
  51. package/lib/components/Layout/util.js.map +1 -1
  52. package/lib/components/SettingDrawer/InvitationSettings.js +1 -1
  53. package/lib/components/SettingDrawer/InvitationSettings.js.map +1 -1
  54. package/lib/components/SettingDrawer/LayoutChange.js +1 -1
  55. package/lib/components/SettingDrawer/LayoutChange.js.map +1 -1
  56. package/lib/components/SettingDrawer/MenuVisibilitySettings.d.ts +20 -0
  57. package/lib/components/SettingDrawer/MenuVisibilitySettings.d.ts.map +1 -0
  58. package/lib/components/SettingDrawer/MenuVisibilitySettings.js +120 -0
  59. package/lib/components/SettingDrawer/MenuVisibilitySettings.js.map +1 -0
  60. package/lib/components/SettingDrawer/NavigationsModes.d.ts.map +1 -1
  61. package/lib/components/SettingDrawer/NavigationsModes.js +91 -5
  62. package/lib/components/SettingDrawer/NavigationsModes.js.map +1 -1
  63. package/lib/components/SettingDrawer/RegionalSettings.js +1 -1
  64. package/lib/components/SettingDrawer/RegionalSettings.js.map +1 -1
  65. package/lib/components/SettingDrawer/SettingDrawer.d.ts.map +1 -1
  66. package/lib/components/SettingDrawer/SettingDrawer.js +10 -2
  67. package/lib/components/SettingDrawer/SettingDrawer.js.map +1 -1
  68. package/lib/components/index.d.ts +0 -1
  69. package/lib/components/index.d.ts.map +1 -1
  70. package/lib/components/index.js +1 -1
  71. package/lib/components/typings.d.ts +9 -6
  72. package/lib/components/typings.d.ts.map +1 -1
  73. package/lib/hooks/index.d.ts +0 -3
  74. package/lib/hooks/index.d.ts.map +1 -1
  75. package/lib/icons.d.ts +2 -0
  76. package/lib/icons.d.ts.map +1 -1
  77. package/lib/icons.js +4 -2
  78. package/lib/icons.js.map +1 -1
  79. package/lib/index.d.ts +1 -0
  80. package/lib/index.d.ts.map +1 -1
  81. package/lib/index.js +1 -1
  82. package/lib/index.js.map +1 -1
  83. package/lib/machines/settingsMachine.d.ts.map +1 -1
  84. package/lib/machines/settingsMachine.js +8 -1
  85. package/lib/machines/settingsMachine.js.map +1 -1
  86. package/lib/machines/types.d.ts +4 -1
  87. package/lib/machines/types.d.ts.map +1 -1
  88. package/package.json +6 -16
  89. package/lib/components/Layout/Sidebar/Sidebar.d.ts +0 -5
  90. package/lib/components/Layout/Sidebar/Sidebar.d.ts.map +0 -1
  91. package/lib/components/Layout/Sidebar/Sidebar.js.map +0 -1
  92. package/lib/components/Layout/Sidebar/SidebarMenu.d.ts +0 -4
  93. package/lib/components/Layout/Sidebar/SidebarMenu.d.ts.map +0 -1
  94. package/lib/components/Layout/Sidebar/SidebarMenu.js +0 -176
  95. package/lib/components/Layout/Sidebar/SidebarMenu.js.map +0 -1
  96. package/lib/components/UI/CardList.d.ts +0 -61
  97. package/lib/components/UI/CardList.d.ts.map +0 -1
  98. package/lib/components/UI/CardList.js +0 -43
  99. package/lib/components/UI/CardList.js.map +0 -1
  100. package/lib/components/UI/CategoriesTypeList.d.ts +0 -29
  101. package/lib/components/UI/CategoriesTypeList.d.ts.map +0 -1
  102. package/lib/components/UI/CategoriesTypeList.js +0 -139
  103. package/lib/components/UI/CategoriesTypeList.js.map +0 -1
  104. package/lib/components/UI/LazyLoadingGoogleMarker.d.ts +0 -83
  105. package/lib/components/UI/LazyLoadingGoogleMarker.d.ts.map +0 -1
  106. package/lib/components/UI/LazyLoadingGoogleMarker.js +0 -107
  107. package/lib/components/UI/LazyLoadingGoogleMarker.js.map +0 -1
  108. package/lib/components/UI/Pagination.d.ts +0 -6
  109. package/lib/components/UI/Pagination.d.ts.map +0 -1
  110. package/lib/components/UI/Pagination.js +0 -56
  111. package/lib/components/UI/Pagination.js.map +0 -1
  112. package/lib/components/UI/ParamSearchResultContainer.d.ts +0 -99
  113. package/lib/components/UI/ParamSearchResultContainer.d.ts.map +0 -1
  114. package/lib/components/UI/ParamSearchResultContainer.js +0 -120
  115. package/lib/components/UI/ParamSearchResultContainer.js.map +0 -1
  116. package/lib/components/UI/PropertyCard.d.ts +0 -24
  117. package/lib/components/UI/PropertyCard.d.ts.map +0 -1
  118. package/lib/components/UI/PropertyCard.js +0 -420
  119. package/lib/components/UI/PropertyCard.js.map +0 -1
  120. package/lib/components/UI/PropertyCardOnMap.d.ts +0 -10
  121. package/lib/components/UI/PropertyCardOnMap.d.ts.map +0 -1
  122. package/lib/components/UI/PropertyCardOnMap.js +0 -108
  123. package/lib/components/UI/PropertyCardOnMap.js.map +0 -1
  124. package/lib/components/UI/VehicleCard/PricePopover.d.ts +0 -8
  125. package/lib/components/UI/VehicleCard/PricePopover.d.ts.map +0 -1
  126. package/lib/components/UI/VehicleCard/PricePopover.js +0 -98
  127. package/lib/components/UI/VehicleCard/PricePopover.js.map +0 -1
  128. package/lib/components/UI/VehicleCard/VehicleBadge.d.ts +0 -7
  129. package/lib/components/UI/VehicleCard/VehicleBadge.d.ts.map +0 -1
  130. package/lib/components/UI/VehicleCard/VehicleFeature.d.ts +0 -9
  131. package/lib/components/UI/VehicleCard/VehicleFeature.d.ts.map +0 -1
  132. package/lib/components/UI/VehicleCard/VehicleFeature.js +0 -22
  133. package/lib/components/UI/VehicleCard/VehicleFeature.js.map +0 -1
  134. package/lib/components/UI/VehicleCard/types.d.ts +0 -59
  135. package/lib/components/UI/VehicleCard/types.d.ts.map +0 -1
  136. package/lib/components/UI/VehicleCard.d.ts +0 -15
  137. package/lib/components/UI/VehicleCard.d.ts.map +0 -1
  138. package/lib/components/UI/VehicleCard.js +0 -166
  139. package/lib/components/UI/VehicleCard.js.map +0 -1
  140. package/lib/components/UI/VehicleCardList.d.ts +0 -14
  141. package/lib/components/UI/VehicleCardList.d.ts.map +0 -1
  142. package/lib/components/UI/VehicleCardList.js +0 -38
  143. package/lib/components/UI/VehicleCardList.js.map +0 -1
  144. package/lib/components/UI/VehicleParamSearchResultContainer.d.ts +0 -90
  145. package/lib/components/UI/VehicleParamSearchResultContainer.d.ts.map +0 -1
  146. package/lib/components/UI/icons/LocationIcon.d.ts +0 -7
  147. package/lib/components/UI/icons/LocationIcon.d.ts.map +0 -1
  148. package/lib/components/UI/icons/LocationIcon.js +0 -18
  149. package/lib/components/UI/icons/LocationIcon.js.map +0 -1
  150. package/lib/components/UI/icons/index.d.ts +0 -2
  151. package/lib/components/UI/icons/index.d.ts.map +0 -1
  152. package/lib/components/UI/index.d.ts +0 -10
  153. package/lib/components/UI/index.d.ts.map +0 -1
  154. package/lib/components/typings.js +0 -6
  155. package/lib/components/typings.js.map +0 -1
  156. package/lib/hooks/use-get-current-lat-long.d.ts +0 -18
  157. package/lib/hooks/use-get-current-lat-long.d.ts.map +0 -1
  158. package/lib/hooks/use-get-current-lat-long.js +0 -29
  159. package/lib/hooks/use-get-current-lat-long.js.map +0 -1
  160. package/lib/hooks/useWindowSize.d.ts +0 -6
  161. package/lib/hooks/useWindowSize.d.ts.map +0 -1
  162. package/lib/hooks/useWindowSize.js +0 -20
  163. package/lib/hooks/useWindowSize.js.map +0 -1
  164. package/lib/middlewares/airbnbDatasourcesMiddleware.d.ts +0 -6
  165. package/lib/middlewares/airbnbDatasourcesMiddleware.d.ts.map +0 -1
  166. package/lib/middlewares/bookingCarRentalMiddleware.d.ts +0 -6
  167. package/lib/middlewares/bookingCarRentalMiddleware.d.ts.map +0 -1
  168. package/lib/middlewares/bookingDatasourcesMiddleware.d.ts +0 -7
  169. package/lib/middlewares/bookingDatasourcesMiddleware.d.ts.map +0 -1
  170. package/lib/middlewares/datasourcesMiddleware.d.ts +0 -6
  171. package/lib/middlewares/datasourcesMiddleware.d.ts.map +0 -1
  172. package/lib/middlewares/pricelineDatasourcesMiddleware.d.ts +0 -7
  173. package/lib/middlewares/pricelineDatasourcesMiddleware.d.ts.map +0 -1
@@ -1,17 +1,73 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { useSelector } from 'react-redux';
3
2
  import { filterRoutesWithLocale, transformData, addProLayoutParentKeys, removeUnnecessaryProperties, menuDataRender } from '@admin-layout/client';
4
3
  import { matchParentRoute } from '@admin-layout/client/lib/utils/parentRoute.js';
5
- import { ClientContainerService } from 'common';
6
4
  import { ClientTypes } from '@common-stack/client-core';
5
+ import { getAvailableCategories, getMenusByAdvancedFilter } from '@common-stack/client-react/lib/utils/filteredRoutes.js';
6
+ import { ClientContainerService } from 'common';
7
+ import * as React from 'react';
8
+ import { useSelector } from 'react-redux';
7
9
  import { createSelector } from 'reselect';
8
- import BasicLayoutEnhanced from './TailwindLayout.js';
9
10
  import { config } from '../../config/env-config.js';
11
+ import BasicLayoutEnhanced from './TailwindLayout.js';
10
12
  import stylesheet from '../../styles/index.css?url';
11
13
  const selectOrgName = state => state.platform.orgName;
12
- const selector = createSelector([selectOrgName], orgName => ({
13
- orgName
14
+ const selectSettings = state => state.settings;
15
+ const selector = createSelector([selectOrgName, selectSettings], (orgName, settings) => ({
16
+ orgName,
17
+ settings
14
18
  }));
19
+ /**
20
+ * Filter menu items based on user visibility settings using filteredRoutes utilities
21
+ */
22
+ function filterMenuItemsByVisibility(menuData, settings) {
23
+ if (!menuData || !Array.isArray(menuData)) return [];
24
+ const hiddenMenuCategories = settings?.hiddenMenuCategories || [];
25
+ // Deduplicate hiddenMenuKeys using Set for consistent behavior
26
+ const hiddenMenuKeys = settings?.hiddenMenuKeys ? Array.from(new Set(settings.hiddenMenuKeys)) : [];
27
+ // Convert menu data to format expected by filteredRoutes utilities
28
+ const menuItemsWithCategories = menuData.map(item => ({
29
+ ...item,
30
+ // Use position as category for filtering
31
+ category: item.position || 'default',
32
+ // Ensure key exists for filtering
33
+ key: item.key || item.path || ''
34
+ }));
35
+ // Step 1: Filter by categories using advanced filter
36
+ const availableCategories = getAvailableCategories(menuItemsWithCategories);
37
+ const visibleCategories = availableCategories.filter(category => !hiddenMenuCategories.includes(category.toLowerCase()));
38
+ let filteredByCategory = menuItemsWithCategories;
39
+ if (visibleCategories.length !== availableCategories.length) {
40
+ // Use advanced filter to get menus by visible categories
41
+ const filters = {
42
+ categories: visibleCategories.length > 0 ? visibleCategories : ['__no_matches__'] // Empty array would show all
43
+ };
44
+ const filteredMenuMaps = getMenusByAdvancedFilter(menuItemsWithCategories, filters);
45
+ // Convert back to array format
46
+ filteredByCategory = filteredMenuMaps.map(menuMap => {
47
+ const path = Object.keys(menuMap)[0];
48
+ return {
49
+ ...menuMap[path],
50
+ path
51
+ };
52
+ });
53
+ }
54
+ // Step 2: Filter out individually hidden items recursively
55
+ const filterItemsRecursively = items => {
56
+ return items.filter(item => {
57
+ if (!item?.key) return false;
58
+ // Skip if this specific item is hidden
59
+ if (hiddenMenuKeys.includes(item.key)) {
60
+ return false;
61
+ }
62
+ // Process children recursively
63
+ if (item.children && Array.isArray(item.children) && item.children.length > 0) {
64
+ item.children = filterItemsRecursively(item.children);
65
+ }
66
+ return true;
67
+ });
68
+ };
69
+ return filterItemsRecursively(filteredByCategory);
70
+ }
15
71
  const ProTailwindLayout = props => {
16
72
  const {
17
73
  loaderData: {
@@ -20,15 +76,21 @@ const ProTailwindLayout = props => {
20
76
  }
21
77
  } = props;
22
78
  const {
23
- orgName
79
+ orgName,
80
+ settings
24
81
  } = useSelector(state => selector(state));
82
+ // Apply menu visibility filters
83
+ const filteredMenuData = React.useMemo(() => {
84
+ return filterMenuItemsByVisibility(newMenuData, settings);
85
+ }, [newMenuData, settings?.hiddenMenuCategories, settings?.hiddenMenuKeys]);
25
86
  const params = {
26
87
  orgName: orgName
27
88
  };
28
89
  return jsx(BasicLayoutEnhanced, {
29
90
  routeParams: params,
30
91
  permissions: permissions,
31
- menuData: newMenuData
92
+ menuData: filteredMenuData,
93
+ fullMenuData: newMenuData
32
94
  });
33
95
  };
34
96
  const handle = {
@@ -1 +1 @@
1
- {"version":3,"file":"ProTailwindLayout.js","sources":["../../../src/components/Layout/ProTailwindLayout.tsx"],"sourcesContent":[null],"names":["_jsx","TailwindLayout"],"mappings":"+jBAqBA,MAAM,aAAa,GAAG,KAAC,IAAO,KAAG,CAAA,QAAM,CAAA,OAAS;AAEhD,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,aAAa,CAAC,EAAE,YAAY;AAE7D,EAAA;;AAII,MAAA,iBAAoB,GAAA,KAAA,IAAW;AAG/B,EAAA,MAAA;AACA,IAAA,UAAQ,EAAA;AACZ,MAAE,WAAA;AACF,MAAA;AAEA;AACI,GAAA,GAAA,KAAY;EACd,MAAA;AACF,IAAA;AAEA,GAAM,GAAA,WAAa,CAAA,SAAQ,QAAQ,MAAI,CAAA,CAAA;AACnC,EAAA,MAAA,MAAmB,GAAA;IACnB,OAAI,EAAA;AACJ,GAAA;SACeA,GAAA,CAAAC;IACf,WAAC,EAAA,MAAA;IAAC,WAAgB,EAAA,WAAA;AACd,IAAA,QAAA,EAAA;IACJ;;;AAKA,EAAA,IAAA,EAAA;AACA;cACkB,MAAA,CAAM;KACpB,EAAA,YAAY;AACZ,EAAA,IAAA,EAAA;;AAEY,MAAA,MAAA,GAAE,MAAC,MAAA,IAAA;AACf,EAAA,MAAA;IACJ;MACM,MAAA,CAAA,OAAA;MACC,WAAA,GAAA,EAAA;;eAEQ,GAAA,gBAAA,CAAA,WAAA,EAAA,MAAA,CAAA,WAAA,CAAA;WACb,CAAA,EAAA;AACN,IAAE,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA;AAEF;QACgF,eAAA,GAAA,sBAAA,CAAA,WAAA,CAAA,QAAA,CAAA,CAAA;AAC5E,EAAA,MAAA,iBAAyB,GAAA,aAAY,gBAAG,CAAA;AACxC,EAAA,MAAA,+CAAmC,CAAA,iBAAA,CAAA;AAEnC,EAAA,sBAAK,CAAA,OAAA,CAAA,IAAA,IAAA,2BAAA,CAAA,IAAA,CAAA,CAAA;AACD,EAAA,IAAA,WAAiB,GAAA,MAAA;iBAEX,GAAA,MAAc,EAAA,YAAU,EAAI,WAAW;AAC7C,EAAA,IAAA,CAAA,WAAA,EAAY;UAEN,IAAA,KAAA,CAAA,uBAAsB,CAAA;AAC5B;MACH,CAAA,WAAA,EAAA;IAAC,MAAO,IAAG,KAAC,CAAA,uBAAA,CAAA;AACT;AACA,EAAA,MAAA,WAAQ,GAAM,cAAG,CAAA,eAAA,EAAA,WAAA,CAAA;SACpB;AACD,IAAA;AACJ,IAAC;AAED,GAAM;AACF;AACF,eAAA,YAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ProTailwindLayout.js","sources":["../../../src/components/Layout/ProTailwindLayout.tsx"],"sourcesContent":[null],"names":["_jsx","TailwindLayout"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { SidebarProps } from '../../typings';
3
+ export declare const MainSidebar: React.FC<SidebarProps>;
4
+ export default MainSidebar;
5
+ //# sourceMappingURL=MainSidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MainSidebar.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/Sidebar/MainSidebar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAIzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAM7C,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAwM9C,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1,4 +1,4 @@
1
- import {jsxs,jsx}from'react/jsx-runtime';import React__default,{useState,useEffect}from'react';import {useTranslation}from'react-i18next';import BottomMenuDropDown from'../GlobalFooter/BottomMenuDropdown.js';import {getMenuSeparation}from'@admin-layout/client';import {Divider}from'./Divider.js';import {SidebarMenu}from'./SidebarMenu.js';import {RightContent}from'../GlobalHeader/RightContent.js';import {icons}from'../../../icons.js';import'@react-icons/all-files/fa/FaMoon.js';import'@react-icons/all-files/fa/FaSun.js';import'../../../hooks/use-get-current-lat-long.js';import {useMediaQuery}from'../../../hooks/useMediaQuery.js';const Sidebar = props => {
1
+ import {jsxs,jsx}from'react/jsx-runtime';import {getMenuSeparation}from'@admin-layout/client';import React__default,{useEffect}from'react';import {useTranslation}from'react-i18next';import'@react-icons/all-files/fa/FaMoon.js';import'@react-icons/all-files/fa/FaSun.js';import {useMediaQuery}from'../../../hooks/useMediaQuery.js';import {icons}from'../../../icons.js';import BottomMenuDropDown from'../GlobalFooter/BottomMenuDropdown.js';import {RightContent}from'../GlobalHeader/RightContent.js';import {Divider}from'./Divider.js';import {MainSidebarMenu}from'./MainSidebarMenu.js';const MainSidebar = props => {
2
2
  const {
3
3
  isSideMenuOpen,
4
4
  closeSideMenu,
@@ -9,7 +9,6 @@ import {jsxs,jsx}from'react/jsx-runtime';import React__default,{useState,useEffe
9
9
  setCollapsed,
10
10
  location
11
11
  } = props;
12
- const [isPagesMenuOpen, setIsPagesMenuOpen] = useState(false);
13
12
  const [iconModule, setIconModule] = React__default.useState(null);
14
13
  const {
15
14
  t,
@@ -131,7 +130,7 @@ import {jsxs,jsx}from'react/jsx-runtime';import React__default,{useState,useEffe
131
130
  className: "flex-grow overflow-y-auto",
132
131
  children: [middleMenus?.length > 0 && jsxs("div", {
133
132
  className: "removeBoxShadow",
134
- children: [renderSeparator(deviceLayout?.middleMenuDividerName), jsx(SidebarMenu, {
133
+ children: [renderSeparator(deviceLayout?.middleMenuDividerName), jsx(MainSidebarMenu, {
135
134
  menuData: updateMenuIcons(middleMenus),
136
135
  routeParams: routeParams,
137
136
  settings: settings,
@@ -139,7 +138,7 @@ import {jsxs,jsx}from'react/jsx-runtime';import React__default,{useState,useEffe
139
138
  })]
140
139
  }), lowerMenus?.length > 0 && jsxs("div", {
141
140
  className: "removeBoxShadow",
142
- children: [renderSeparator(deviceLayout?.lowerMenuDividerName), jsx(SidebarMenu, {
141
+ children: [renderSeparator(deviceLayout?.lowerMenuDividerName), jsx(MainSidebarMenu, {
143
142
  menuData: updateMenuIcons(lowerMenus),
144
143
  routeParams: routeParams,
145
144
  settings: settings,
@@ -177,4 +176,4 @@ import {jsxs,jsx}from'react/jsx-runtime';import React__default,{useState,useEffe
177
176
  children: renderSidebarContent()
178
177
  })]
179
178
  });
180
- };export{Sidebar,Sidebar as default};//# sourceMappingURL=Sidebar.js.map
179
+ };export{MainSidebar,MainSidebar as default};//# sourceMappingURL=MainSidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MainSidebar.js","sources":["../../../../src/components/Layout/Sidebar/MainSidebar.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 MainSidebarMenu: React.NamedExoticComponent<SidebarMenuProps>;
4
+ //# sourceMappingURL=MainSidebarMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MainSidebarMenu.d.ts","sourceRoot":"","sources":["../../../../src/components/Layout/Sidebar/MainSidebarMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAmZjD,eAAO,MAAM,eAAe,8CAAuC,CAAC"}
@@ -0,0 +1,293 @@
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 paddingLeft = `${depth * 1}rem`;
111
+ // Determine styling based on whether it's a parent or child item
112
+ const isParentWithChildren = hasChildren && depth === 0;
113
+ const shouldApplyBackground = isActive && !isParentWithChildren || isHovered;
114
+ const handleMenuClick = useCallback(e => {
115
+ if (hasChildren && !collapsed) {
116
+ onToggleMenu(item.path, depth, e);
117
+ }
118
+ }, [hasChildren, collapsed, item.path, depth, onToggleMenu]);
119
+ const renderPopupMenu = useCallback(() => {
120
+ if (!item.children || item.children.length === 0) return null;
121
+ return jsxs("div", {
122
+ className: "fixed shadow-themed-xl rounded-themed-lg border border-border z-[999] overflow-hidden themed-dropdown",
123
+ style: {
124
+ left: `${SIDEBAR_WIDTHS[collapsed ? 'COLLAPSED' : 'EXPANDED']}px`,
125
+ top: `${popupPosition.top}px`,
126
+ animation: 'fadeIn 0.2s ease-out forwards',
127
+ maxWidth: 'calc(100vw - 100px)',
128
+ width: 'max-content',
129
+ minWidth: POPUP_CONFIG.MIN_WIDTH
130
+ },
131
+ children: [jsx("style", {
132
+ dangerouslySetInnerHTML: {
133
+ __html: POPUP_ANIMATION_CSS
134
+ }
135
+ }), jsx("div", {
136
+ className: "font-medium text-sm px-4 py-3 border-b border-border whitespace-nowrap bg-muted",
137
+ children: jsx("span", {
138
+ className: "text-primary",
139
+ children: item.name
140
+ })
141
+ }), jsx("div", {
142
+ className: `max-h-[${POPUP_CONFIG.MAX_HEIGHT}px] overflow-y-auto overflow-x-hidden py-1`,
143
+ children: item.children.map(child => jsx(MenuItem, {
144
+ item: child,
145
+ depth: depth + 1,
146
+ isHoverMenu: true,
147
+ openMenus: openMenus,
148
+ hoveredMenu: hoveredMenu,
149
+ collapsed: collapsed,
150
+ navTheme: navTheme,
151
+ locationPathname: locationPathname,
152
+ routeParams: routeParams,
153
+ popupPosition: popupPosition,
154
+ onToggleMenu: onToggleMenu,
155
+ onMenuHover: onMenuHover,
156
+ onMenuLeave: onMenuLeave,
157
+ ChevronUpIcon: ChevronUpIcon,
158
+ ChevronDownIcon: ChevronDownIcon
159
+ }, child.path))
160
+ })]
161
+ });
162
+ }, [item, depth, collapsed, popupPosition.top, openMenus, hoveredMenu, navTheme, locationPathname, routeParams, onToggleMenu, onMenuHover, onMenuLeave, ChevronUpIcon, ChevronDownIcon]);
163
+ return jsxs("div", {
164
+ className: `w-full relative group ${isHovered && collapsed && !isHoverMenu ? 'rounded-themed' : ''}`,
165
+ style: {
166
+ backgroundColor: isHovered && !isHoverMenu ? 'hsl(var(--muted))' : ''
167
+ },
168
+ onMouseEnter: e => onMenuHover(e, item, isHoverMenu),
169
+ onMouseLeave: () => onMenuLeave(item, isHoverMenu),
170
+ children: [jsxs(Link, {
171
+ to: hasChildren && collapsed && !isHoverMenu ? '#' : generateMenuPath(item?.path, routeParams),
172
+ 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' : ''}`,
173
+ style: {
174
+ paddingLeft: `calc(1rem + ${paddingLeft})`
175
+ },
176
+ onClick: handleMenuClick,
177
+ children: [jsxs("div", {
178
+ className: `flex items-center ${collapsed && !isHoverMenu ? 'justify-center w-full' : 'gap-3'}`,
179
+ children: [item.icon ? jsx("span", {
180
+ className: `flex-shrink-0 ${getIconColor(isActive, navTheme)}`,
181
+ children: item.icon
182
+ }) : collapsed && !isHoverMenu ? jsx("span", {
183
+ className: `flex items-center justify-center flex-shrink-0 ${getIconColor(isActive, navTheme)}`,
184
+ children: getFirstLetter(item.name)
185
+ }) : null, (!collapsed || isHoverMenu) && jsx("span", {
186
+ className: `font-medium whitespace-nowrap overflow-hidden text-ellipsis ${getTextColor(isActive, navTheme)}`,
187
+ children: item.name
188
+ })]
189
+ }), hasChildren && (!collapsed || isHoverMenu) && jsx("span", {
190
+ className: `flex-shrink-0 ml-1 ${getIconColor(isActive, navTheme)}`,
191
+ children: isOpen ? jsx(ChevronUpIcon, {
192
+ className: "h-4 w-4"
193
+ }) : jsx(ChevronDownIcon, {
194
+ className: "h-4 w-4"
195
+ })
196
+ })]
197
+ }), collapsed && hasChildren && isHovered && !isHoverMenu && item.children.length > 0 && renderPopupMenu(), hasChildren && isOpen && !collapsed && jsx("div", {
198
+ className: "transition-all duration-200 ease-in-out",
199
+ children: item.children.map(child => jsx(MenuItem, {
200
+ item: child,
201
+ depth: depth + 1,
202
+ isHoverMenu: false,
203
+ openMenus: openMenus,
204
+ hoveredMenu: hoveredMenu,
205
+ collapsed: collapsed,
206
+ navTheme: navTheme,
207
+ locationPathname: locationPathname,
208
+ routeParams: routeParams,
209
+ popupPosition: popupPosition,
210
+ onToggleMenu: onToggleMenu,
211
+ onMenuHover: onMenuHover,
212
+ onMenuLeave: onMenuLeave,
213
+ ChevronUpIcon: ChevronUpIcon,
214
+ ChevronDownIcon: ChevronDownIcon
215
+ }, child.path))
216
+ })]
217
+ });
218
+ }, areMenuItemPropsEqual);
219
+ MenuItem.displayName = 'MenuItem';
220
+ const MainSidebarMenuComponent = ({
221
+ menuData,
222
+ routeParams,
223
+ settings,
224
+ collapsed
225
+ }) => {
226
+ const [openMenus, setOpenMenus] = useState([]);
227
+ const [hoveredMenu, setHoveredMenu] = useState(null);
228
+ const [popupPosition, setPopupPosition] = useState({
229
+ top: 0,
230
+ height: 0
231
+ });
232
+ const {
233
+ ChevronDownIcon,
234
+ ChevronUpIcon
235
+ } = icons;
236
+ const location = useLocation();
237
+ const navTheme = settings?.navTheme;
238
+ // Event handler for toggling menu open/closed
239
+ const toggleMenu = useCallback((path, depth, e) => {
240
+ e.preventDefault();
241
+ if (collapsed) return;
242
+ setOpenMenus(prev => {
243
+ if (prev.includes(path)) {
244
+ return prev.filter(item => item !== path);
245
+ } else {
246
+ return [...prev, path];
247
+ }
248
+ });
249
+ }, [collapsed]);
250
+ // Event handlers for hover effects
251
+ const handleMenuHover = useCallback((e, item, isHoverMenu) => {
252
+ // Only set hover state if the menu has children
253
+ if (collapsed && !isHoverMenu && item.children && item.children.length > 0) {
254
+ const element = e.currentTarget;
255
+ const rect = element.getBoundingClientRect();
256
+ setPopupPosition({
257
+ top: rect.top,
258
+ height: rect.height
259
+ });
260
+ setHoveredMenu(item.path);
261
+ }
262
+ }, [collapsed]);
263
+ const handleMenuLeave = useCallback((item, isHoverMenu) => {
264
+ if (collapsed && !isHoverMenu) {
265
+ setHoveredMenu(null);
266
+ }
267
+ }, [collapsed]);
268
+ return jsx("div", {
269
+ className: "overflow-hidden",
270
+ children: jsx("nav", {
271
+ className: `mt-2 ${collapsed ? 'px-1' : 'px-2'} overflow-x-hidden`,
272
+ children: menuData.map(item => jsx(MenuItem, {
273
+ item: item,
274
+ depth: 0,
275
+ isHoverMenu: false,
276
+ openMenus: openMenus,
277
+ hoveredMenu: hoveredMenu,
278
+ collapsed: collapsed,
279
+ navTheme: navTheme,
280
+ locationPathname: location.pathname,
281
+ routeParams: routeParams,
282
+ popupPosition: popupPosition,
283
+ onToggleMenu: toggleMenu,
284
+ onMenuHover: handleMenuHover,
285
+ onMenuLeave: handleMenuLeave,
286
+ ChevronUpIcon: ChevronUpIcon,
287
+ ChevronDownIcon: ChevronDownIcon
288
+ }, item.path))
289
+ })
290
+ });
291
+ };
292
+ // Export the memoized version to prevent unnecessary re-renders
293
+ 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":"2OAMA;AACA,MAAM,cAAc,GAAG;AACnB,EAAA,SAAA,EAAS,EAAE;AACX,EAAA,QAAA,EAAQ;CACF;AAEV,MAAM,YAAY,GAAG;AACjB,EAAA,UAAA,EAAU,GAAK;AACf,EAAA,SAAA,EAAS,IAEH;AAEV;AACA,MAAM,cAAc,GAAG,IAAa,QAAK,CAAA,MAAK,CAAA,CAAM,CAAC,CAAC,WAAE,EAAW;AAEnE;AACA,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAE,WAAmB,EAAE,WAAmC,KAAI;QAC9F,QAAA,mBAA2B,CAAA,UAAS,WAAE,CAAA;;AAG5C,EAAA,IAAA,WAAe,KAAA,QAAa,EAAA;AACxB,IAAA,OAAA,IAAO;;;MAIP,QAAA,IAAY,WAAA,CAAA,UAAY,CAAA,QAAW,GAAW,GAAA,CAAA,EAAI;AAClD,IAAA,OAAA,IAAO;;AAGX,EAAA,OAAA;AACJ,CAAC;AAED;AACA,MAAM,mBAAmB,GAAG;;;;;CAK3B;AAED,MAAM,YAAY,GAAG,CAAC,MAAe,EAAE,QAAiB,KAAI;AACxD,EAAA,IAAA,MAAU,EAAA,OAAA,cAAA;AAAE,EAAA,IAAA,QAAA,eAAqB,EAAC,OAAA,YAAA;SAC9B,iBAAuB;AAAE,CAAA;AAC7B,MAAA,sBAAwB,EAAC,QAAA,KAAA;AAC7B,EAAE,IAAA,MAAA,EAAA,OAAA,cAAA;AAEF,EAAA,IAAM,aAAe,UAAkB,EAAA,OAAiB,YAAI;AACxD,EAAA,OAAU,uBAAA;AAAE,CAAA;;AACiB;AAC7B,MAAA,kCAA+B,EAAA,SAAA,KAAA;AACnC;AAqBA,EAA4C,IAAA,SAAA,CAAA,IAAA,KAAA,SAAA,CAAA,IAAA,EAAA;AAC5C,IAAsF,OAAA,KAAA;AACtF;;QAEQ,YAAc,GAAA,gBAAe,CAAA,SAAO,CAAA,IAAA,CAAA,IAAA,EAAA,SAAA,CAAA,gBAAA,EAAA,SAAA,CAAA,WAAA,CAAA;AACpC,EAAA,MAAA,YAAY,GAAC,gBAAA,CAAA,SAAA,CAAA,IAAA,CAAA,IAAA,EAAA,SAAA,CAAA,gBAAA,EAAA,SAAA,CAAA,WAAA,CAAA;MAChB,YAAA,KAAA,YAAA,EAAA;IAED,OAAyE,KAAA;AACzE;AACA;AACA,EAAA,IAAA,SAAgB,CAAA,KAAA,KAAiB,SAAA,CAAA,KAAG,IAAA,SAAA,CAAA,WAAA,KAAA,SAAA,CAAA,WAAA,IAAA,SAAA,CAAA,SAAA,KAAA,SAAA,CAAA,SAAA,IAAA,SAAA,CAAA,QAAA,KAAA,SAAA,CAAA,QAAA,EAAA;AAChC,IAAA,OAAA;;;AAIJ,EAAA,MACI,mBAAoB,GAAA,MAAA,CAAS,IAAM,CAAA,SAAA,CAAA,WAAA,CAAA;AACnC,EAAA,MAAA,mBAAU,GAAgB,MAAA,CAAA,IAAA,CAAA,SAAqB,CAAA,WAAA,CAAA;AAC/C,EAAA,IAAA,mBAAU,CAAA,MAAc,KAAA,mBAAmB,CAAA,MAAA,EAAA;AAC3C,IAAA,OAAA,KAAA;AAEA;OACH,MAAA,GAAA,IAAA,mBAAA,EAAA;IAED,IAAgD,SAAA,CAAA,WAAA,CAAA,GAAA,CAAA,KAAA,SAAA,CAAA,WAAA,CAAA,GAAA,CAAA,EAAA;MAC1C,OAAA,KAAA;;;AAGF;MACH,SAAA,CAAA,aAAA,CAAA,GAAA,KAAA,SAAA,CAAA,aAAA,CAAA,GAAA,IAAA,SAAA,CAAA,aAAA,CAAA,MAAA,KAAA,SAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AACD,IAAA,OAAW,KAAA;AACP;AACI;QACJ,UAAC,GAAA,SAAA,CAAA,SAAA,CAAA,QAAA,CAAA,SAAA,CAAA,IAAA,CAAA,IAAA,CAAA;QACJ,UAAA,GAAA,SAAA,CAAA,SAAA,CAAA,QAAA,CAAA,SAAA,CAAA,IAAA,CAAA,IAAA,CAAA;MAEqB,UAAA,KAAA,UAAA,EAAA;IACtB,OACI,KAAA;;AAGA;QACH,aAAA,GAAA,SAAA,CAAA,WAAA,KAAA,SAAA,CAAA,IAAA,CAAA,IAAA;QAEkD,aAAA,GAAA,SAAA,CAAA,WAAA,KAAA,SAAA,CAAA,IAAA,CAAA,IAAA;AACnD,EAAA,IAAA,aAAgB,KAAY;AAC5B,IAAA,OAAgB,KAAA;AAChB;AACI;SACH,IAAA;;MAGK,QAAA,GAAAA,cAAA,CAAa,IAAG,CAAA,CAAA;MAChB;AACN,EAAA,KAAA;AACI,EAAA,WAAA;WACH;aAEwD;AACzD,EAAA,SAAO;AACX,EAAE,QAAA;AAEF,EAAA,gBAAiB;aAkBoD;AAC7D,EAAA,aAAiB;cACX;AACN,EAAA,WAAc;AACd,EAAA;AACA,EAAA;;AAGA,CAAA,KAAA;;AAGA,EAAA,MAAA,kBAAwB,CAAA,QAAA,IAAW,KACT,QAAE,CAAA,MAAA,GAAA,CAAA;AACpB,EAAA,MAAA,MAAe,GAAA,SAAA,CAAI,QAAC,CAAA,IAAY,CAAA,IAAA,CAAA;gBAChB,GAAA,iBAAY,IAAK,CAAA,IAAI,EAAC,gBAAA,EAAA,WAAA,CAAA;QACtC,SAAC,GAAA,WAAA,KAAA,IAAA,CAAA,IAAA;AACL,EAAA,MACC,WAAW,WAAW,GAAE,CAAA,CAAA,GAAK,CAAA;AAGlC;QACI,oBAAkB,GAAQ,WAAS,IAAO,KAAA,KAAM,CAAA;AAAE,EAAA,MAAA,qBAAY,GAAA,QAAA,IAAA,CAAA,oBAAA,IAAA,SAAA;AAE9D,EAAA,MAAA,eAEQ,GAAA,WAAA,CAAA,CAAA,IAAiH;AAE7G,IAAA,IAAA,WAAA,IAAM,CAAA,SAAiB,EAAA;AACvB,MAAA,YAAA,CAAG,IAAE,CAAG,IAAa,EAAA,KAAA,EAAA,CAAC;AACtB;AACA,GAAA,EAAA,CAAA,WAAA,EAAA,SAA+B,EAAA,IAAA,CAAA,IAAA,EAAA,KAAA,EAAA,YAAA,CAAA,CAAA;AAC/B,EAAA,MAAA,eAAO,GAAa,WAAA,CAAA,MAAA;sBACZ,IAAE,IAAY,CAAA,QAAC,CAAS,MAAA,KAAA,CAAA,EAAA,OAAA,IAAA;eAGpC,CAAA,KAAA,EAAA;AA4BZ,MAAG,SAAA,EAAA,uGAAA;WACK,EAAA;QACJ,IAAK,EAAA,CAAA,EAAA,cAAA,CAAA,SAAA,GAAA,WAAA,GAAA,UAAA,CAAA,CAAA,EAAA,CAAA;QACL,GAAS,EAAA,CAAA,EAAA,aAAA,CAAA,GAAA,CAAA,EAAA,CAAA;AACT,QAAA,SAAA,EAAA,+BAAiB;QACjB,QAAS,EAAA,qBAAA;QACT,KAAW,EAAA,aAAA;QACX,QAAQ,EAAA,YAAA,CAAA;;cAEG,EAAA,CAAAC,GAAA,CAAA,OAAA,EAAA;QACX,uBAAY,EAAA;UACD,MAAA,EAAA;;QAEX,EAAaA,GAAA,CAAA,KAAA,EAAA;QACb,SAAe,EAAA,iFAAA;AAClB,QAAE,QAAA,EAAAA,GAAA,CAAA,MAAA,EAAA;UAEI,SAEC,EAAA,cAAA;oBAWQ,IAAW,CAAA;AACd,SAAA;AAoEjB,OACqB,CAAA,EAAAA,GAAA,CAAA,KAAA,EAAA;AAEzB,QAAQ,SAAC,EAAA,CAAW,OAAG,EAAA,YAAW,CAAA,UAAA,CAAA,0CAAA,CAAA;AAElC,QAA8B,QAAA,EAAA,IAAA,CAAA,QAAA,CAAA,GAAgC,CAAE,KAAQ,IAAAA,GAAa,CAAA,QAAA,EAAU;UACrF,IAAU,EAAA,KAAA;UACV,KAAY,EAAA,KAAA,GAAgB,CAAA;AAClC,UAAM,WAAc,EAAA;AACpB,UAAM,SAAiB,EAAA;AACvB,UAAM,WAAW,EAAW,WAAE;AAC9B,UAAM,SAAQ,EAAI,SAAgB;UAEY,QAAA,EAAA,QAAA;UACxC,gBAAa,EAAA,gBACa;UACtB,WAAc,EAAA,WAAG;AACnB,UAAA,aAAa,EAAA,aAAA;sBAAS,EAAA,YAAA;AAEtB,UAAA,WAAa,EAAK,WAAI;AAClB,UAAA,WAAS,EAAA,WAAa;AAClB,UAAA,aAAO,EAAI,aAAS;yBACvB,EAAA;iBAAM,IAAC,CAAA;AACJ,OAAA,CAAA;;AAER,GAAA,EAAA,CAAA,IAAE,EAAC,KAAA,EAAA,SAAA,EAAA,aAAA,CAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,CAAA,CAAA;AACP,EAAA,OACUC,IAAA,CAAA,KACZ,EAAA;IAEF,SAAmC,EAAA,CAAA,sBAAA,EAAA,SAAA,IAAA,SAAA,IAAA,CAAA,WAAA,GAAA,gBAAA,GAAA,EAAA,CAAA,CAAA;IACnC,KAAM,EAAA;qBAEkD,EAAA,SAAA,IAAA,CAAA,WAAA,GAAA,mBAAA,GAAA;AAChD,KAAA;AACI,IAAA,YAAA,EAAM,CAAO,IAAA,qBAAkC,WAAA,CAAA;AAC/C,IAAA,YAAA,EAAM,MAAO,WAAQ,CAAA,IAAA,EAAA,WAAA,CAAqB;AAE1C,IAAA,QAAA,EAAA,CAAAA,IAAA,CAAA,IAAA,EAAA;qBACS,IAAI,SAAI,IAAA,CAAA,WAAA,GAAA,GAAA,GAAA,gBAAA,CAAA,IAAA,EAAA,IAAA,EAAA,WAAA,CAAA;iBACP,CAAA,sLAAa,EAAA,qBAAA,GAAA,UAAA,GAAA,EAAA,CAAA,CAAA;AACtB,MAAA,KAAA,EAAA;AAED,QAAA,WAAA,EAAA,CAAA,YAAoB,EAAI,WAAE,CAAA,CAAA;;AAElC,MACA,OAAU,EAAA,eACZ;MAEI,QAAA,EAAA,CAAAA,IAAA,CAAA,KAAkB,EAAW;AAE3B,QAAA,SAAa,EAAA,CAAA,oBAAmB,SAAA,IAAA,CAAA,WAAA,GAAA,uBAAA,GAAA,OAAA,CAAA,CAAA;gBACd,EAAA,CAAA,IAAA,CAAA,IAAK,GAAAD,GAAE,CAAA,MAAA,EAAA;UACxB,SAAA,EAAA,CAAA,cAAA,EAAA,YAAA,CAAA,QAAA,EAAA,QAAA,CAAA,CAAA,CAAA;AACL,UACU,QAAC,EACb,IAAA,CAAA;SAEK,CAAA,gBACE,CAAS,0BAAkB;AAyBxC,UAAE,SAAA,EAAA,CAAA,+CAAA,EAAA,YAAA,CAAA,QAAA,EAAA,QAAA,CAAA,CAAA,CAAA;AAEF,UAAgE,QAAA,EAAA,cAAA,CAAA,IAAA,CAAA,IAAA;AAChE,SAAa,CAAA,GAAA,IAAA,EAAA,CAAA,CAAA,SAAkB,IAAA,WAAmC,KAAAA,GAAA,CAAA,MAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -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;AAU1B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA+MjD,CAAC;AAEF,eAAe,cAAc,CAAC"}