@natoora-libs/drawer-menu 0.0.10 → 0.0.12

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.
package/dist/index.cjs CHANGED
@@ -29,7 +29,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
29
29
  // src/index.ts
30
30
  var src_exports = {};
31
31
  __export(src_exports, {
32
- LeftDrawer: () => LeftDrawer_default,
32
+ LeftDrawer: () => LeftDrawer,
33
+ PinnedItems: () => PinnedItems,
33
34
  featureNames: () => featureNames,
34
35
  featuresAreEnabled: () => featuresAreEnabled,
35
36
  uiFeatureNames: () => uiFeatureNames,
@@ -40,7 +41,6 @@ module.exports = __toCommonJS(src_exports);
40
41
 
41
42
  // src/components/LeftDrawer/LeftDrawer.tsx
42
43
  var import_react2 = require("react");
43
- var import_react_router = require("react-router");
44
44
  var import_icons_material = require("@mui/icons-material");
45
45
  var import_material = require("@mui/material");
46
46
  var import_Icon = __toESM(require("@mui/material/Icon"), 1);
@@ -288,6 +288,7 @@ var colors = {
288
288
 
289
289
  // src/config/drawerAppList.tsx
290
290
  var import_react = require("react");
291
+ var import_react_router = require("react-router");
291
292
  var import_components = require("@natoora-libs/core/components");
292
293
 
293
294
  // src/config/features.ts
@@ -343,7 +344,7 @@ function featuresAreEnabled({
343
344
 
344
345
  // src/config/drawerAppList.tsx
345
346
  var import_jsx_runtime = require("react/jsx-runtime");
346
- var drawerAppList = [
347
+ var drawerAppGroup = [
347
348
  {
348
349
  groupName: "Home",
349
350
  apps: [
@@ -665,12 +666,32 @@ var drawerAppList = [
665
666
  ]
666
667
  }
667
668
  ];
668
- var useGetDrawerAppList = (enabledFeatures) => {
669
- return (0, import_react.useMemo)(() => {
669
+ var useGetDrawerAppList = ({
670
+ enabledFeatures,
671
+ reloadOnNavigate
672
+ }) => {
673
+ const navigate = (0, import_react_router.useNavigate)();
674
+ const navigateTo = (0, import_react.useCallback)(
675
+ (url) => {
676
+ const isAngularRoute = url.startsWith("/#");
677
+ if (isAngularRoute) {
678
+ window.location.assign(url);
679
+ return;
680
+ }
681
+ const isMicroFrontendRoute = url === "/react/release-notes" || url === "/react/purchase-orders" || url === "/admin" || url === "/reports";
682
+ if (isMicroFrontendRoute) {
683
+ window.location.assign(reloadOnNavigate ? "/react" + url : url);
684
+ return;
685
+ }
686
+ return navigate(url);
687
+ },
688
+ [reloadOnNavigate]
689
+ );
690
+ const drawerAppList = (0, import_react.useMemo)(() => {
670
691
  if (!enabledFeatures?.length) {
671
692
  return [];
672
693
  }
673
- return drawerAppList.map((group) => {
694
+ return drawerAppGroup.map((group) => {
674
695
  const enabledApps = group.apps.filter(
675
696
  (app) => app.routeName === "home" || app.routeName === "release-notes" || app.routeName === "logout" || featuresAreEnabled({
676
697
  enabledFeatures,
@@ -689,6 +710,11 @@ var useGetDrawerAppList = (enabledFeatures) => {
689
710
  return { ...group, apps: enabledApps };
690
711
  }).filter((group) => group.apps.length > 0);
691
712
  }, [enabledFeatures]);
713
+ return {
714
+ userSettingsUrl: "/#/user-settings",
715
+ drawerAppList,
716
+ navigateTo
717
+ };
692
718
  };
693
719
 
694
720
  // src/components/LeftDrawer/LeftDrawer.tsx
@@ -753,19 +779,12 @@ var LeftDrawer = ({
753
779
  onLogout,
754
780
  onTogglePinnedApp
755
781
  }) => {
756
- const navigate = (0, import_react_router.useNavigate)();
757
782
  const [openCollapse, setOpenCollapse] = (0, import_react2.useState)({});
758
- const drawerAppList2 = useGetDrawerAppList(enabledFeatures);
783
+ const { userSettingsUrl, drawerAppList, navigateTo } = useGetDrawerAppList({
784
+ enabledFeatures,
785
+ reloadOnNavigate
786
+ });
759
787
  const { classes } = useStyles();
760
- const navigateTo = (url, shouldReload) => {
761
- if (reloadOnNavigate || shouldReload) {
762
- const path = reloadOnNavigate ? `/react/${url}` : url;
763
- const fullUrl = window.location.origin + path;
764
- window.location.href = fullUrl;
765
- return;
766
- }
767
- return navigate(url);
768
- };
769
788
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
770
789
  import_material.SwipeableDrawer,
771
790
  {
@@ -792,13 +811,13 @@ var LeftDrawer = ({
792
811
  {
793
812
  icon: "edit",
794
813
  isContrast: true,
795
- onClick: () => navigateTo(`/#/user-settings`, true),
814
+ onClick: () => navigateTo(userSettingsUrl),
796
815
  size: "small",
797
816
  tooltip: "User Settings"
798
817
  }
799
818
  )
800
819
  ] }) }),
801
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_material.List, { children: drawerAppList2.map((group) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react2.Fragment, { children: [
820
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_material.List, { children: drawerAppList.map((group) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react2.Fragment, { children: [
802
821
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_material.ListSubheader, { disableSticky: true, className: classes.subheader, children: group.groupName }),
803
822
  group.apps.map((app) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react2.Fragment, { children: [
804
823
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
@@ -809,7 +828,7 @@ var LeftDrawer = ({
809
828
  if (app.routeName === "logout") {
810
829
  return onLogout();
811
830
  }
812
- return navigateTo(app.url, app.shouldReload);
831
+ return navigateTo(app.url);
813
832
  },
814
833
  children: [
815
834
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_material.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_Icon.default, { className: classes.iconMenu, children: app.icon }) }),
@@ -874,7 +893,7 @@ var LeftDrawer = ({
874
893
  import_material.ListItemButton,
875
894
  {
876
895
  className: classes.nested,
877
- onClick: () => navigateTo(child.url, child.shouldReload),
896
+ onClick: () => navigateTo(child.url),
878
897
  title: child.url,
879
898
  children: [
880
899
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_material.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_icons_material.FiberManualRecord, { style: { height: 12 } }) }),
@@ -895,7 +914,36 @@ var LeftDrawer = ({
895
914
  }
896
915
  );
897
916
  };
898
- var LeftDrawer_default = LeftDrawer;
917
+
918
+ // src/components/PinnedItems/PinnedItems.tsx
919
+ var import_material2 = require("@mui/material");
920
+ var import_jsx_runtime3 = require("react/jsx-runtime");
921
+ var PinnedItems = ({
922
+ enabledFeatures,
923
+ pinnedApps,
924
+ reloadOnNavigate
925
+ }) => {
926
+ const { drawerAppList, navigateTo } = useGetDrawerAppList({
927
+ enabledFeatures,
928
+ reloadOnNavigate
929
+ });
930
+ const items = drawerAppList.flatMap((app) => app.apps).filter((app) => app.pinned && pinnedApps[app.pinned]);
931
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material2.Box, { display: "flex", flexDirection: "row", gap: 1.5, children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material2.Tooltip, { title: item.name, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
932
+ import_material2.IconButton,
933
+ {
934
+ style: { backgroundColor: "gray", padding: 4 },
935
+ onClick: () => navigateTo(item.url),
936
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
937
+ import_material2.Icon,
938
+ {
939
+ style: { width: 32, height: 32, fill: "white" },
940
+ children: item.icon
941
+ },
942
+ item.name
943
+ )
944
+ }
945
+ ) }, item.name)) });
946
+ };
899
947
 
900
948
  // src/config/uiFeatures.ts
901
949
  var uiFeatureNames = {
@@ -913,6 +961,7 @@ var uiFeaturesAreEnabled = (enabledUIFeatures, feature) => enabledUIFeatures?.in
913
961
  // Annotate the CommonJS export names for ESM import in node:
914
962
  0 && (module.exports = {
915
963
  LeftDrawer,
964
+ PinnedItems,
916
965
  featureNames,
917
966
  featuresAreEnabled,
918
967
  uiFeatureNames,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/LeftDrawer/LeftDrawer.tsx","../src/resources/styles/colors/darkPalette.ts","../src/resources/styles/colors/lightPalette.ts","../src/resources/styles/colors.ts","../src/config/drawerAppList.tsx","../src/config/features.ts","../src/config/uiFeatures.ts"],"sourcesContent":["export { default as LeftDrawer } from './components/LeftDrawer/LeftDrawer';\nexport { useGetDrawerAppList } from './config/drawerAppList';\nexport { featureNames, featuresAreEnabled } from './config/features';\nexport { uiFeatureNames, uiFeaturesAreEnabled } from './config/uiFeatures';\n","import { Fragment, useState } from 'react';\nimport { useNavigate } from 'react-router';\n\nimport {\n PushPinOutlined,\n FiberManualRecord,\n ExpandLess,\n} from '@mui/icons-material';\nimport {\n AppBar,\n Collapse,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n ListSubheader,\n SwipeableDrawer,\n Toolbar,\n ListItemButton,\n Box,\n} from '@mui/material';\nimport Icon from '@mui/material/Icon';\nimport { RoundButton, UserBust } from '@natoora-libs/core/components';\nimport { makeStyles } from 'tss-react/mui';\n\nimport { colors } from '@/resources/styles/colors';\n\nimport { useGetDrawerAppList } from '../../config/drawerAppList';\n\nconst useStyles = makeStyles()((theme) => ({\n subheader: {\n textTransform: 'uppercase',\n fontSize: theme.spacing(1.5),\n },\n topBar: {\n backgroundColor: theme.palette.secondary.dark,\n width: theme.spacing(40),\n padding: theme.spacing(2),\n display: 'flex',\n alignItems: 'end',\n justifyContent: 'space-between',\n },\n drawer: {\n alignContent: 'space-between',\n flexDirection: 'column',\n minWidth: theme.spacing(80),\n },\n iconMenu: {\n height: '40px',\n width: '40px',\n opacity: 1,\n fill: colors.neutral700,\n },\n pinIcon: {\n height: '16px',\n width: '16px',\n fill: colors.neutral700,\n opacity: 0.5,\n '&:hover': {\n opacity: 1,\n cursor: 'pointer',\n },\n },\n expandIcon: {\n height: '22px',\n width: '22px',\n fill: colors.neutral700,\n },\n nested: {\n paddingLeft: theme.spacing(6),\n border: colors.neutral200,\n },\n appName: {\n '& .MuiTypography-body2': {\n fontWeight: 700,\n },\n },\n}));\n\ninterface LeftDrawerProps {\n open: boolean;\n enabledFeatures: string[];\n pinnedApps: Record<string, boolean>;\n user: {\n profile_picture: string;\n first_name: string;\n last_name: string;\n username: string;\n };\n reloadOnNavigate?: boolean;\n handleOpen: () => void;\n handleClose: () => void;\n onLogout: () => void;\n onTogglePinnedApp: (name: string, new_value: boolean) => void;\n}\n\nconst LeftDrawer = ({\n enabledFeatures,\n pinnedApps,\n open,\n user,\n reloadOnNavigate,\n handleClose,\n handleOpen,\n onLogout,\n onTogglePinnedApp,\n}: LeftDrawerProps) => {\n const navigate = useNavigate();\n const [openCollapse, setOpenCollapse] = useState({});\n const drawerAppList = useGetDrawerAppList(enabledFeatures);\n\n const { classes } = useStyles();\n\n const navigateTo = (url, shouldReload) => {\n if (reloadOnNavigate || shouldReload) {\n const path = reloadOnNavigate ? `/react/${url}` : url;\n const fullUrl = window.location.origin + path;\n\n window.location.href = fullUrl;\n return;\n }\n\n // eslint-disable-next-line consistent-return\n return navigate(url);\n };\n\n return (\n <SwipeableDrawer\n className={classes.drawer}\n id=\"primary-menu\"\n onClose={handleClose}\n onOpen={handleOpen}\n open={open}\n >\n <AppBar position=\"static\">\n <Toolbar className={classes.topBar}>\n <UserBust\n user={user}\n avatarProps={{ height: 50, width: 50 }}\n typographyProps={{\n name: { variant: 'subtitle1', component: 'div' },\n username: { variant: 'caption', component: 'div' },\n }}\n />\n <RoundButton\n icon=\"edit\"\n isContrast\n onClick={() => navigateTo(`/#/user-settings`, true)}\n size=\"small\"\n tooltip=\"User Settings\"\n />\n </Toolbar>\n </AppBar>\n\n <List>\n {drawerAppList.map((group) => (\n <Fragment key={group.groupName}>\n <ListSubheader disableSticky className={classes.subheader}>\n {group.groupName}\n </ListSubheader>\n\n {group.apps.map((app) => (\n <Fragment key={`${group.groupName}_${app.name}`}>\n <ListItem\n key={app.name}\n title={app.url}\n onClick={() => {\n if (app.routeName === 'logout') {\n return onLogout();\n }\n\n return navigateTo(app.url, app.shouldReload);\n }}\n >\n <ListItemIcon>\n <Icon className={classes.iconMenu}>{app.icon}</Icon>\n </ListItemIcon>\n <ListItemText\n className={classes.appName}\n primary={app.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n\n <Box\n display=\"flex\"\n gap={2}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n {!!app.children?.length && (\n <ExpandLess\n className={classes.expandIcon}\n style={{\n rotate: openCollapse[app.routeName]\n ? '0deg'\n : '180deg',\n }}\n data-testid=\"svg-close-collapse\"\n onClick={(event) => {\n event.stopPropagation();\n setOpenCollapse({\n ...openCollapse,\n [app.routeName]: !openCollapse[app.routeName],\n });\n }}\n />\n )}\n\n {app.pinned && (\n <PushPinOutlined\n className={classes.pinIcon}\n style={{ opacity: pinnedApps[app.pinned] ? 1 : 0.3 }}\n onClick={(event) => {\n if (!app.pinned) {\n return;\n }\n\n event.stopPropagation();\n onTogglePinnedApp(\n app.pinned,\n !pinnedApps[app.pinned],\n );\n }}\n />\n )}\n </Box>\n </ListItem>\n\n {!!app.children?.length && (\n <Collapse in={openCollapse[app.routeName]}>\n <List>\n {app.children.map((child) => (\n <ListItemButton\n key={child.name}\n className={classes.nested}\n onClick={() =>\n navigateTo(child.url, child.shouldReload)\n }\n title={child.url}\n >\n <ListItemIcon>\n <FiberManualRecord style={{ height: 12 }} />\n </ListItemIcon>\n <ListItemText\n primary={child.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n </ListItemButton>\n ))}\n </List>\n </Collapse>\n )}\n </Fragment>\n ))}\n </Fragment>\n ))}\n </List>\n </SwipeableDrawer>\n );\n};\n\nexport default LeftDrawer;\n","import { ThemePalette } from './interface';\n\n/**\n * Define the dark palette using the same ThemePalette interface.\n * Any missing or extra keys compared to lightPalette will trigger a TypeScript error.\n */\nconst darkPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#1C1B1A',\n neutral100: '#1F1F1F',\n neutral150: '#262626',\n neutral200: '#2E2E2E',\n neutral250: '#383838',\n neutral300: '#424242',\n neutral400: '#4C4C4C',\n neutral500: '#666666',\n neutral600: '#808080',\n neutral700: '#A3A3A3',\n neutral750: '#B3B3B3',\n neutral800: '#CCCCCC',\n neutral900: '#F5F5F5',\n\n // Input and contrast\n contrast: '#FFFFFF',\n constrastOpacity50: 'rgba(255,255,255,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#B0B0B0',\n default: '#444444',\n muiPrimary: '#E9FB62',\n muiPrimaryBlack: '#FFFFFF',\n lightMuiPrimaryColorBackground: '#e9fb6214',\n lightBlueBackground: '#e9fb6214',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1890d5',\n muiSecondary: '#DE5B99',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#66BB6A',\n muiSuccessAlternate: '#81C784',\n\n // Transparency variants\n blackOpacity10: 'inherit',\n blackOpacity20: 'inherit',\n blackOpacity30: 'inherit',\n blackOpacity50: 'inherit',\n blackOpacity80: 'inherit',\n primaryOpacity10: 'rgba(233, 251, 98, 0.10)',\n primaryOpacity20: 'rgba(233, 251, 98, 0.20)',\n primaryOpacity30: 'rgba(233, 251, 98, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, .3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(255, 255, 255, 0.08)',\n // Active Button\n buttonActiveText: '#E9FB62',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#EF5350',\n};\n\nexport default darkPalette;\n","import { ThemePalette } from './interface';\n\n/**\n * Define the light palette using the ThemePalette interface.\n */\nconst lightPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#F0EBE6',\n neutral100: '#FAFAFA',\n neutral150: '#F4F4F4',\n neutral200: '#F1F1F1',\n neutral250: '#ECECEC',\n neutral300: '#E0E0E0',\n neutral400: '#C8C8C8',\n neutral500: '#BDBDBD',\n neutral600: '#999999',\n neutral700: '#878787',\n neutral750: '#6c6c6c',\n neutral800: '#555555',\n neutral900: '#4D4D4D',\n\n // Input and contrast\n contrast: '#000000',\n constrastOpacity50: 'rgba(0,0,0,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#606060',\n default: '#E0E0E0',\n muiPrimary: '#0781CE',\n muiPrimaryBlack: '#000000',\n lightMuiPrimaryColorBackground: '#eff4fb',\n lightBlueBackground: '#eff4fb',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1565c0',\n muiSecondary: '#A42966',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#4caf50',\n muiSuccessAlternate: '#357a38',\n\n // Transparency variants\n blackOpacity10: 'rgba(0,0,0,0.1)',\n blackOpacity20: 'rgba(0,0,0,0.2)',\n blackOpacity30: 'rgba(0,0,0,0.3)',\n blackOpacity50: 'rgba(0,0,0,0.5)',\n blackOpacity80: 'rgba(0,0,0,0.8)',\n primaryOpacity10: 'rgba(7, 129, 206, 0.10)',\n primaryOpacity20: 'rgba(7, 129, 206, 0.20)',\n primaryOpacity30: 'rgba(7, 129, 206, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, 0.3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(0, 0, 0, 0.04)',\n // Active Button\n buttonActiveText: '#0781CE',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#D32F2F',\n};\n\nexport default lightPalette;\n","import darkPalette from './colors/darkPalette';\nimport lightPalette from './colors/lightPalette';\n\nconst stylesheet = localStorage.getItem('@stylesheet');\nexport const isDarkModeEnabled = stylesheet === 'styles/style-dark.css';\nconst palette = isDarkModeEnabled ? darkPalette : lightPalette;\n\ninterface Colors {\n // General colors\n white: string;\n black: string;\n\n // Neutral\n neutral50: string;\n neutral100: string;\n neutral150: string;\n neutral200: string;\n neutral250: string;\n neutral300: string;\n neutral400: string;\n neutral500: string;\n neutral600: string;\n neutral700: string;\n neutral750: string;\n neutral800: string;\n neutral900: string;\n\n // Input and contrast\n contrast: string;\n constrastOpacity50: string;\n\n // Icon and Material UI colors\n iconSearch: string;\n default: string;\n muiPrimary: string;\n muiPrimaryBlack: string;\n lightMuiPrimaryColorBackground: string;\n lightBlueBackground: string;\n muiPrimaryAlternate: string;\n muiPrimaryHover: string;\n muiSecondary: string;\n muiSecondaryAlternate: string;\n muiSuccess: string;\n muiSuccessAlternate: string;\n\n // Transparency\n blackOpacity10: string;\n blackOpacity20: string;\n blackOpacity30: string;\n blackOpacity50: string;\n blackOpacity80: string;\n primaryOpacity10: string;\n primaryOpacity20: string;\n primaryOpacity30: string;\n secondaryAlternateOpacity30: string;\n blueOpacity08: string;\n whiteOpacity10: string;\n whiteOpacity20: string;\n whiteOpacity40: string;\n\n // Table rows and top bar\n topBar: string;\n // Error Button\n error: string;\n\n roundButton: {\n default: {\n border: string;\n color: string;\n disabled: {\n color: string;\n };\n hover: {\n background: string;\n };\n };\n filled: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n active: {\n color: string;\n hover: {\n background: string;\n };\n };\n contrast: {\n border: string;\n color: string;\n hover: {\n background: string;\n };\n };\n tableButton: {\n color: string;\n };\n focused: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n error: string;\n };\n\n movementCard: {\n default: {\n background: string;\n };\n disabled: {\n background: string;\n };\n pill: {\n color: string;\n background: string;\n };\n };\n\n rowProductCard: {\n locationSubtitle: string;\n };\n}\n\nexport const colors: Colors = {\n white: palette.white,\n black: palette.black,\n\n neutral50: palette.neutral50,\n neutral100: palette.neutral100,\n neutral150: palette.neutral150,\n neutral200: palette.neutral200,\n neutral250: palette.neutral250,\n neutral300: palette.neutral300,\n neutral400: palette.neutral400,\n neutral500: palette.neutral500,\n neutral600: palette.neutral600,\n neutral700: palette.neutral700,\n neutral750: palette.neutral750,\n neutral800: palette.neutral800,\n neutral900: palette.neutral900,\n\n // Input and contrast\n contrast: palette.contrast,\n constrastOpacity50: palette.constrastOpacity50,\n\n iconSearch: palette.iconSearch,\n default: palette.default,\n muiPrimary: palette.muiPrimary,\n muiPrimaryBlack: palette.muiPrimaryBlack,\n lightMuiPrimaryColorBackground: palette.lightMuiPrimaryColorBackground,\n lightBlueBackground: palette.lightBlueBackground,\n muiPrimaryAlternate: palette.muiPrimaryAlternate,\n muiPrimaryHover: palette.muiPrimaryHover,\n muiSecondary: palette.muiSecondary,\n muiSecondaryAlternate: palette.muiSecondaryAlternate,\n muiSuccess: palette.muiSuccess,\n muiSuccessAlternate: palette.muiSuccessAlternate,\n\n // Transparency\n blackOpacity10: palette.blackOpacity10,\n blackOpacity20: palette.blackOpacity20,\n blackOpacity30: palette.blackOpacity30,\n blackOpacity50: palette.blackOpacity50,\n blackOpacity80: palette.blackOpacity80,\n primaryOpacity10: palette.primaryOpacity10,\n primaryOpacity20: palette.primaryOpacity20,\n primaryOpacity30: palette.primaryOpacity30,\n secondaryAlternateOpacity30: palette.secondaryAlternateOpacity30,\n blueOpacity08: palette.blueOpacity08,\n whiteOpacity10: palette.whiteOpacity10,\n whiteOpacity20: palette.whiteOpacity20,\n whiteOpacity40: palette.whiteOpacity40,\n\n topBar: palette.topBar,\n error: palette.error,\n\n roundButton: {\n default: {\n border: palette.neutral600,\n color: palette.contrast,\n disabled: {\n color: palette.blackOpacity20,\n },\n hover: {\n background: palette.buttonHoverBackground,\n },\n },\n filled: {\n background: palette.neutral100,\n color: palette.blackOpacity80,\n hover: {\n background: palette.neutral250,\n },\n },\n active: {\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity20,\n },\n },\n contrast: {\n border: palette.buttonContrastBorder,\n color: palette.buttonContrastText,\n hover: {\n background: palette.whiteOpacity10,\n },\n },\n tableButton: {\n color: palette.neutral800,\n },\n focused: {\n background: palette.primaryOpacity20,\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity30,\n },\n },\n error: palette.error,\n },\n\n movementCard: {\n default: {\n background: palette.neutral100,\n },\n disabled: {\n background: palette.neutral250,\n },\n pill: {\n color: palette.neutral200,\n background: palette.neutral600,\n },\n },\n\n rowProductCard: {\n locationSubtitle: palette.neutral800,\n },\n};\n","import { useMemo } from 'react';\n\nimport { icons } from '@natoora-libs/core/components';\nimport { featureNames, featuresAreEnabled } from '@/config/features';\n\ninterface DrawerAppChild {\n name: string;\n routeName: string;\n pinned: string;\n url: string;\n featureName?: string;\n shouldReload?: boolean;\n}\n\ninterface DrawerApp {\n name: string;\n routeName: string;\n featureNames: string[];\n pinned: string | null;\n icon: React.ReactElement;\n url: string;\n shouldReload?: boolean;\n children?: DrawerAppChild[];\n}\n\ninterface DrawerAppGroup {\n groupName: string;\n apps: DrawerApp[];\n}\n\nconst drawerAppList: DrawerAppGroup[] = [\n {\n groupName: 'Home',\n apps: [\n {\n name: 'Home',\n routeName: 'home',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconHome />,\n url: '/home',\n },\n ],\n },\n {\n groupName: 'App',\n apps: [\n {\n name: 'Notifications',\n routeName: 'appNotifications',\n featureNames: [featureNames.NOTIFICATIONS],\n pinned: 'notifications',\n icon: <icons.SvgIconNotification />,\n url: '/#/notifications',\n shouldReload: true,\n },\n {\n name: 'Promo Codes',\n routeName: 'promo_codes',\n featureNames: [featureNames.PROMO_CODES],\n pinned: 'promo_codes',\n icon: <icons.SvgIconPromoCode />,\n url: '/promo_codes',\n },\n {\n name: 'Search Categories',\n routeName: 'search-categories',\n featureNames: [featureNames.SEARCH_CATEGORIES],\n pinned: 'search_categories',\n icon: <icons.SvgIconSearchCategories />,\n url: '/search-categories',\n },\n {\n name: 'Content Management',\n routeName: 'content-management',\n featureNames: [featureNames.CONTENT_MANAGEMENT],\n pinned: 'content_management',\n icon: <icons.SvgIconContentManagement />,\n url: '/content-management',\n },\n ],\n },\n {\n groupName: 'Customer Service',\n apps: [\n {\n name: 'Aircall',\n routeName: 'recordedcalls',\n featureNames: [featureNames.AIRCALL],\n pinned: 'aircall',\n icon: <icons.SvgIconPhone />,\n url: '/air-call',\n },\n {\n name: 'Customers',\n routeName: 'customers',\n featureNames: [featureNames.CUSTOMERS],\n pinned: 'customers',\n icon: <icons.SvgIconAccount />,\n url: '/customers',\n children: [\n {\n name: 'Sites',\n routeName: 'customer-sites',\n pinned: 'customer-sites',\n url: '/customers/sites',\n },\n {\n name: 'Groups',\n routeName: 'customer-groups',\n pinned: 'customer-groups',\n url: '/customers/groups',\n },\n ],\n },\n {\n name: 'Orders',\n routeName: 'orders',\n featureNames: [featureNames.ORDERS],\n pinned: 'orders',\n icon: <icons.SvgIconOrders />,\n url: '/#/orders',\n shouldReload: true,\n },\n {\n name: 'Price Lists',\n routeName: 'price_list',\n featureNames: [featureNames.PRICE_LIST],\n pinned: 'price_list',\n icon: <icons.SvgIconPriceList />,\n url: '/#/price-list',\n shouldReload: true,\n },\n {\n name: 'Special Prices',\n routeName: 'special_prices',\n featureNames: [featureNames.SPECIAL_PRICES],\n pinned: 'special_prices',\n icon: <icons.SvgIconSpecialPrice />,\n url: '/#/pricing/special-prices',\n shouldReload: true,\n },\n ],\n },\n {\n groupName: 'Buying',\n apps: [\n {\n name: 'Purchase Orders',\n routeName: 'purchaseOrders',\n featureNames: [featureNames.PURCHASE_ORDERS],\n pinned: 'purchase_orders',\n icon: <icons.SvgIconBuying />,\n url: '/react/purchase-orders',\n shouldReload: true,\n },\n {\n name: 'Products',\n routeName: 'products',\n featureNames: [featureNames.PRODUCTS],\n pinned: 'products',\n icon: <icons.SvgIconProducts />,\n url: '/#/product-base-list',\n shouldReload: true,\n },\n {\n name: 'Suppliers',\n routeName: 'suppliers',\n featureNames: [featureNames.SUPPLIERS],\n pinned: 'suppliers',\n icon: <icons.SvgIconSupplier />,\n url: '/suppliers',\n },\n {\n name: 'Supplier Prices',\n routeName: 'supplier_prices',\n featureNames: [featureNames.SUPPLIER_PRICES],\n pinned: 'supplier_prices',\n icon: <icons.SvgIconSupplierPrices />,\n url: '/#/supplier-prices',\n shouldReload: true,\n },\n {\n name: 'Product Bulk Update',\n routeName: 'bulk-update',\n featureNames: [featureNames.BULK_UPDATE],\n pinned: 'product_bulk_update',\n icon: <icons.SvgIconImport />,\n url: '/bulk_update',\n },\n ],\n },\n {\n groupName: 'Operations',\n apps: [\n {\n name: 'Retail',\n routeName: 'retail',\n featureNames: [featureNames.RETAIL],\n pinned: 'retail',\n icon: <icons.SvgIconRetail />,\n url: '/#/retail/product-availability',\n shouldReload: true,\n },\n {\n name: 'Goods In',\n routeName: 'goodsin-list',\n featureNames: [featureNames.GOODS_IN],\n pinned: 'goods_in',\n icon: <icons.SvgIconGoodsin />,\n url: '/goodsin-list',\n },\n {\n name: 'Returns',\n routeName: 'goods-in-list',\n featureNames: [featureNames.RETURNS],\n pinned: 'returns',\n icon: <icons.SvgIconGoodsin />,\n url: '/returns',\n },\n {\n name: 'Stock and Locations',\n routeName: 'locations',\n featureNames: [featureNames.STOCK, featureNames.LOCATIONS],\n pinned: 'stock',\n icon: <icons.SvgIconLocation />,\n url: '/locations',\n children: [\n {\n name: 'Movements',\n routeName: 'movements',\n pinned: 'movements',\n url: '/movements',\n featureName: featureNames.STOCK_MOVEMENTS,\n },\n ],\n },\n {\n name: 'Kanban Cards',\n routeName: 'kanban',\n featureNames: [featureNames.KANBAN],\n pinned: 'kanban_cards',\n icon: <icons.SvgIconVkc />,\n url: '/#/kanbancards',\n shouldReload: true,\n },\n {\n name: 'Picking Stations',\n routeName: 'picking',\n featureNames: [featureNames.PICKING_STATIONS],\n pinned: 'picking_stations',\n icon: <icons.SvgIconScales />,\n url: '/#/pickingstation',\n shouldReload: true,\n },\n {\n name: 'Quality Control',\n routeName: 'qualityControl',\n featureNames: [featureNames.QUALITY_CONTROL],\n pinned: 'quality_control',\n icon: <icons.SvgIconQc />,\n url: '/#/quality-control',\n shouldReload: true,\n },\n {\n name: 'Service Delivery',\n routeName: 'runs',\n featureNames: [featureNames.SERVICE_DELIVERY],\n pinned: 'service_delivery',\n icon: <icons.SvgIconRuns />,\n url: '/#/transport',\n shouldReload: true,\n },\n {\n name: 'Ops Metrics',\n routeName: 'ops-metrics',\n featureNames: [featureNames.OPS_METRICS],\n pinned: 'ops_metrics',\n icon: <icons.SvgIconOpsMetrics />,\n url: '/ops-metrics',\n },\n ],\n },\n {\n groupName: 'Tools',\n apps: [\n {\n name: 'Accounts',\n routeName: 'accounts',\n featureNames: [featureNames.ACCOUNTS],\n pinned: 'accounts',\n icon: <icons.SvgIconAccounts />,\n url: '/#/accounts',\n shouldReload: true,\n },\n {\n name: 'Reports',\n routeName: 'reports',\n featureNames: [featureNames.REPORTS],\n pinned: 'reports',\n icon: <icons.SvgIconReports />,\n url: '/reports',\n shouldReload: true,\n },\n ],\n },\n {\n groupName: 'Settings',\n apps: [\n {\n name: 'Admin',\n routeName: 'admin',\n featureNames: [featureNames.ADMIN],\n pinned: 'admin',\n icon: <icons.SvgIconSetting />,\n url: '/admin',\n shouldReload: true,\n },\n {\n name: 'User Management',\n routeName: 'user-management',\n featureNames: [featureNames.USER_MANAGEMENT],\n pinned: 'users',\n icon: <icons.SvgIconUserManagement />,\n url: '/user-management',\n },\n {\n name: 'Logout',\n routeName: 'logout',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconLogin />,\n url: '/logout',\n },\n ],\n },\n {\n groupName: 'Release Notes',\n apps: [\n {\n name: 'Release Notes',\n routeName: 'release-notes',\n featureNames: [],\n pinned: null,\n // icon: <icons.SvgIconReleaseNote />,\n icon: <icons.SvgIconLogin />,\n url: '/react/release-notes',\n shouldReload: true,\n },\n ],\n },\n];\n\nexport const useGetDrawerAppList = (enabledFeatures: string[]) => {\n return useMemo(() => {\n if (!enabledFeatures?.length) {\n return [];\n }\n\n return drawerAppList\n .map((group) => {\n const enabledApps = group.apps\n .filter(\n (app) =>\n app.routeName === 'home' ||\n app.routeName === 'release-notes' ||\n app.routeName === 'logout' ||\n featuresAreEnabled({\n enabledFeatures,\n featureNames: app.featureNames,\n requireAll: false,\n }),\n )\n .map((app) => {\n const filteredChildren = app.children?.filter((child) => {\n if (child.featureName) {\n return enabledFeatures.includes(child.featureName);\n }\n\n return true;\n });\n\n return { ...app, children: filteredChildren };\n });\n\n return { ...group, apps: enabledApps };\n })\n .filter((group) => group.apps.length > 0);\n }, [enabledFeatures]);\n};\n","export const featureNames = {\n ACCOUNTS: 'accounts',\n ADMIN: 'admin',\n AIRCALL: 'aircall',\n BULK_UPDATE: 'product_bulk_update',\n CONTENT_MANAGEMENT: 'content_management',\n CUSTOMERS: 'customers',\n GOODS_IN: 'goods_in',\n KANBAN: 'kanban_cards',\n LOCATIONS: 'locations',\n NOTIFICATIONS: 'notifications',\n OPS_METRICS: 'ops_metrics',\n ORDERS: 'orders',\n PICKING_STATIONS: 'picking_stations',\n PRICE_LIST: 'price_list',\n PRODUCTS: 'products',\n PROMO_CODES: 'promo_codes',\n PURCHASE_ORDERS: 'purchase_orders',\n QUALITY_CONTROL: 'quality_control',\n REPORTS: 'reports',\n RETAIL: 'retail',\n RETURNS: 'returns',\n SEARCH_CATEGORIES: 'search_categories',\n SERVICE_DELIVERY: 'service_delivery',\n SPECIAL_PRICES: 'special_prices',\n STOCK: 'stock',\n STOCK_MOVEMENTS: 'stock_movements',\n SUPPLIERS: 'suppliers',\n SUPPLIER_PRICES: 'supplier_prices',\n USER_MANAGEMENT: 'users',\n};\n\nexport function featuresAreEnabled({\n enabledFeatures,\n featureNames,\n requireAll = true,\n}: {\n enabledFeatures: string[];\n featureNames: string[];\n requireAll?: boolean;\n}) {\n const storedPermissions = localStorage.getItem('permissions') || '';\n let enabled = false;\n\n if (requireAll) {\n enabled = featureNames.every(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n } else {\n enabled = featureNames.some(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n }\n\n return enabled;\n}\n","export const uiFeatureNames = {\n PURCHASE_ORDERS_REGIONS: 'purchases_regions',\n SUPPLIER_PORTAL_TAB: 'suppliers_portal_users_tab',\n SUPPLIER_PRICING_SECTION: 'suppliers_pricing_section',\n CUSTOMER_ESTIMATED_BASKET_SETTING: 'customers_estimated_basket_setting',\n ORDER_ISSUE_REPORTING: 'customers_order_issue_report_setting',\n CUSTOMER_PAYMENTS_SECTION: 'customers_payments_section',\n CUSTOMER_PREFERENCES_TAB: 'customers_preferences_tab',\n CUSTOMER_SUBSTITUTIONS_TAB: 'customers_substitutions_tab',\n PRODUCT_PREFERENCES_SECTION: 'product_preferences_section',\n};\n\nexport const uiFeaturesAreEnabled = (\n enabledUIFeatures: string[] | undefined,\n feature: string,\n) => enabledUIFeatures?.includes(feature);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAAmC;AACnC,0BAA4B;AAE5B,4BAIO;AACP,sBAYO;AACP,kBAAiB;AACjB,IAAAC,qBAAsC;AACtC,iBAA2B;;;ACjB3B,IAAM,cAA4B;AAAA;AAAA,EAEhC,OAAO;AAAA,EACP,OAAO;AAAA;AAAA,EAGP,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA;AAAA,EAGZ,UAAU;AAAA,EACV,oBAAoB;AAAA;AAAA,EAGpB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,gCAAgC;AAAA,EAChC,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,uBAAuB;AAAA,EACvB,YAAY;AAAA,EACZ,qBAAqB;AAAA;AAAA,EAGrB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,6BAA6B;AAAA,EAC7B,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA;AAAA,EAGhB,QAAQ;AAAA;AAAA;AAAA,EAIR,uBAAuB;AAAA;AAAA,EAEvB,kBAAkB;AAAA;AAAA,EAElB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA;AAAA,EAGpB,OAAO;AACT;AAEA,IAAO,sBAAQ;;;ACtEf,IAAM,eAA6B;AAAA;AAAA,EAEjC,OAAO;AAAA,EACP,OAAO;AAAA;AAAA,EAGP,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA;AAAA,EAGZ,UAAU;AAAA,EACV,oBAAoB;AAAA;AAAA,EAGpB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,gCAAgC;AAAA,EAChC,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,uBAAuB;AAAA,EACvB,YAAY;AAAA,EACZ,qBAAqB;AAAA;AAAA,EAGrB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,6BAA6B;AAAA,EAC7B,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA;AAAA,EAGhB,QAAQ;AAAA;AAAA;AAAA,EAIR,uBAAuB;AAAA;AAAA,EAEvB,kBAAkB;AAAA;AAAA,EAElB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA;AAAA,EAGpB,OAAO;AACT;AAEA,IAAO,uBAAQ;;;ACvEf,IAAM,aAAa,aAAa,QAAQ,aAAa;AAC9C,IAAM,oBAAoB,eAAe;AAChD,IAAM,UAAU,oBAAoB,sBAAc;AA0H3C,IAAM,SAAiB;AAAA,EAC5B,OAAO,QAAQ;AAAA,EACf,OAAO,QAAQ;AAAA,EAEf,WAAW,QAAQ;AAAA,EACnB,YAAY,QAAQ;AAAA,EACpB,YAAY,QAAQ;AAAA,EACpB,YAAY,QAAQ;AAAA,EACpB,YAAY,QAAQ;AAAA,EACpB,YAAY,QAAQ;AAAA,EACpB,YAAY,QAAQ;AAAA,EACpB,YAAY,QAAQ;AAAA,EACpB,YAAY,QAAQ;AAAA,EACpB,YAAY,QAAQ;AAAA,EACpB,YAAY,QAAQ;AAAA,EACpB,YAAY,QAAQ;AAAA,EACpB,YAAY,QAAQ;AAAA;AAAA,EAGpB,UAAU,QAAQ;AAAA,EAClB,oBAAoB,QAAQ;AAAA,EAE5B,YAAY,QAAQ;AAAA,EACpB,SAAS,QAAQ;AAAA,EACjB,YAAY,QAAQ;AAAA,EACpB,iBAAiB,QAAQ;AAAA,EACzB,gCAAgC,QAAQ;AAAA,EACxC,qBAAqB,QAAQ;AAAA,EAC7B,qBAAqB,QAAQ;AAAA,EAC7B,iBAAiB,QAAQ;AAAA,EACzB,cAAc,QAAQ;AAAA,EACtB,uBAAuB,QAAQ;AAAA,EAC/B,YAAY,QAAQ;AAAA,EACpB,qBAAqB,QAAQ;AAAA;AAAA,EAG7B,gBAAgB,QAAQ;AAAA,EACxB,gBAAgB,QAAQ;AAAA,EACxB,gBAAgB,QAAQ;AAAA,EACxB,gBAAgB,QAAQ;AAAA,EACxB,gBAAgB,QAAQ;AAAA,EACxB,kBAAkB,QAAQ;AAAA,EAC1B,kBAAkB,QAAQ;AAAA,EAC1B,kBAAkB,QAAQ;AAAA,EAC1B,6BAA6B,QAAQ;AAAA,EACrC,eAAe,QAAQ;AAAA,EACvB,gBAAgB,QAAQ;AAAA,EACxB,gBAAgB,QAAQ;AAAA,EACxB,gBAAgB,QAAQ;AAAA,EAExB,QAAQ,QAAQ;AAAA,EAChB,OAAO,QAAQ;AAAA,EAEf,aAAa;AAAA,IACX,SAAS;AAAA,MACP,QAAQ,QAAQ;AAAA,MAChB,OAAO,QAAQ;AAAA,MACf,UAAU;AAAA,QACR,OAAO,QAAQ;AAAA,MACjB;AAAA,MACA,OAAO;AAAA,QACL,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,YAAY,QAAQ;AAAA,MACpB,OAAO,QAAQ;AAAA,MACf,OAAO;AAAA,QACL,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,OAAO,QAAQ;AAAA,MACf,OAAO;AAAA,QACL,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,QAAQ,QAAQ;AAAA,MAChB,OAAO,QAAQ;AAAA,MACf,OAAO;AAAA,QACL,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,OAAO,QAAQ;AAAA,IACjB;AAAA,IACA,SAAS;AAAA,MACP,YAAY,QAAQ;AAAA,MACpB,OAAO,QAAQ;AAAA,MACf,OAAO;AAAA,QACL,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IACA,OAAO,QAAQ;AAAA,EACjB;AAAA,EAEA,cAAc;AAAA,IACZ,SAAS;AAAA,MACP,YAAY,QAAQ;AAAA,IACtB;AAAA,IACA,UAAU;AAAA,MACR,YAAY,QAAQ;AAAA,IACtB;AAAA,IACA,MAAM;AAAA,MACJ,OAAO,QAAQ;AAAA,MACf,YAAY,QAAQ;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,gBAAgB;AAAA,IACd,kBAAkB,QAAQ;AAAA,EAC5B;AACF;;;AChPA,mBAAwB;AAExB,wBAAsB;;;ACFf,IAAM,eAAe;AAAA,EAC1B,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,eAAe;AAAA,EACf,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,OAAO;AAAA,EACP,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,iBAAiB;AACnB;AAEO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA,cAAAC;AAAA,EACA,aAAa;AACf,GAIG;AACD,QAAM,oBAAoB,aAAa,QAAQ,aAAa,KAAK;AACjE,MAAI,UAAU;AAEd,MAAI,YAAY;AACd,cAAUA,cAAa;AAAA,MACrB,CAAC,YACC,gBAAgB,SAAS,OAAO,KAChC,kBAAkB,SAAS,GAAG,OAAO,OAAO;AAAA,IAChD;AAAA,EACF,OAAO;AACL,cAAUA,cAAa;AAAA,MACrB,CAAC,YACC,gBAAgB,SAAS,OAAO,KAChC,kBAAkB,SAAS,GAAG,OAAO,OAAO;AAAA,IAChD;AAAA,EACF;AAEA,SAAO;AACT;;;ADpBc;AATd,IAAM,gBAAkC;AAAA,EACtC;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC;AAAA,QACf,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,aAAN,EAAkB;AAAA,QACzB,KAAK;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,aAAa;AAAA,QACzC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,qBAAN,EAA0B;AAAA,QACjC,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,WAAW;AAAA,QACvC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,kBAAN,EAAuB;AAAA,QAC9B,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,iBAAiB;AAAA,QAC7C,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,yBAAN,EAA8B;AAAA,QACrC,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,kBAAkB;AAAA,QAC9C,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,0BAAN,EAA+B;AAAA,QACtC,KAAK;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,OAAO;AAAA,QACnC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,cAAN,EAAmB;AAAA,QAC1B,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,SAAS;AAAA,QACrC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,gBAAN,EAAqB;AAAA,QAC5B,KAAK;AAAA,QACL,UAAU;AAAA,UACR;AAAA,YACE,MAAM;AAAA,YACN,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,KAAK;AAAA,UACP;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,MAAM;AAAA,QAClC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,eAAN,EAAoB;AAAA,QAC3B,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,UAAU;AAAA,QACtC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,kBAAN,EAAuB;AAAA,QAC9B,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,cAAc;AAAA,QAC1C,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,qBAAN,EAA0B;AAAA,QACjC,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,eAAe;AAAA,QAC3C,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,eAAN,EAAoB;AAAA,QAC3B,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,QAAQ;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,iBAAN,EAAsB;AAAA,QAC7B,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,SAAS;AAAA,QACrC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,iBAAN,EAAsB;AAAA,QAC7B,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,eAAe;AAAA,QAC3C,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,uBAAN,EAA4B;AAAA,QACnC,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,WAAW;AAAA,QACvC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,eAAN,EAAoB;AAAA,QAC3B,KAAK;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,MAAM;AAAA,QAClC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,eAAN,EAAoB;AAAA,QAC3B,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,QAAQ;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,gBAAN,EAAqB;AAAA,QAC5B,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,OAAO;AAAA,QACnC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,gBAAN,EAAqB;AAAA,QAC5B,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,OAAO,aAAa,SAAS;AAAA,QACzD,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,iBAAN,EAAsB;AAAA,QAC7B,KAAK;AAAA,QACL,UAAU;AAAA,UACR;AAAA,YACE,MAAM;AAAA,YACN,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,KAAK;AAAA,YACL,aAAa,aAAa;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,MAAM;AAAA,QAClC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,YAAN,EAAiB;AAAA,QACxB,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,gBAAgB;AAAA,QAC5C,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,eAAN,EAAoB;AAAA,QAC3B,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,eAAe;AAAA,QAC3C,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,WAAN,EAAgB;AAAA,QACvB,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,gBAAgB;AAAA,QAC5C,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,aAAN,EAAkB;AAAA,QACzB,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,WAAW;AAAA,QACvC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,mBAAN,EAAwB;AAAA,QAC/B,KAAK;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,QAAQ;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,iBAAN,EAAsB;AAAA,QAC7B,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,OAAO;AAAA,QACnC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,gBAAN,EAAqB;AAAA,QAC5B,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,KAAK;AAAA,QACjC,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,gBAAN,EAAqB;AAAA,QAC5B,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC,aAAa,eAAe;AAAA,QAC3C,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,uBAAN,EAA4B;AAAA,QACnC,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC;AAAA,QACf,QAAQ;AAAA,QACR,MAAM,4CAAC,wBAAM,cAAN,EAAmB;AAAA,QAC1B,KAAK;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc,CAAC;AAAA,QACf,QAAQ;AAAA;AAAA,QAER,MAAM,4CAAC,wBAAM,cAAN,EAAmB;AAAA,QAC1B,KAAK;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,sBAAsB,CAAC,oBAA8B;AAChE,aAAO,sBAAQ,MAAM;AACnB,QAAI,CAAC,iBAAiB,QAAQ;AAC5B,aAAO,CAAC;AAAA,IACV;AAEA,WAAO,cACJ,IAAI,CAAC,UAAU;AACd,YAAM,cAAc,MAAM,KACvB;AAAA,QACC,CAAC,QACC,IAAI,cAAc,UAClB,IAAI,cAAc,mBAClB,IAAI,cAAc,YAClB,mBAAmB;AAAA,UACjB;AAAA,UACA,cAAc,IAAI;AAAA,UAClB,YAAY;AAAA,QACd,CAAC;AAAA,MACL,EACC,IAAI,CAAC,QAAQ;AACZ,cAAM,mBAAmB,IAAI,UAAU,OAAO,CAAC,UAAU;AACvD,cAAI,MAAM,aAAa;AACrB,mBAAO,gBAAgB,SAAS,MAAM,WAAW;AAAA,UACnD;AAEA,iBAAO;AAAA,QACT,CAAC;AAED,eAAO,EAAE,GAAG,KAAK,UAAU,iBAAiB;AAAA,MAC9C,CAAC;AAEH,aAAO,EAAE,GAAG,OAAO,MAAM,YAAY;AAAA,IACvC,CAAC,EACA,OAAO,CAAC,UAAU,MAAM,KAAK,SAAS,CAAC;AAAA,EAC5C,GAAG,CAAC,eAAe,CAAC;AACtB;;;AJ9PQ,IAAAC,sBAAA;AA1GR,IAAM,gBAAY,uBAAW,EAAE,CAAC,WAAW;AAAA,EACzC,WAAW;AAAA,IACT,eAAe;AAAA,IACf,UAAU,MAAM,QAAQ,GAAG;AAAA,EAC7B;AAAA,EACA,QAAQ;AAAA,IACN,iBAAiB,MAAM,QAAQ,UAAU;AAAA,IACzC,OAAO,MAAM,QAAQ,EAAE;AAAA,IACvB,SAAS,MAAM,QAAQ,CAAC;AAAA,IACxB,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,QAAQ;AAAA,IACN,cAAc;AAAA,IACd,eAAe;AAAA,IACf,UAAU,MAAM,QAAQ,EAAE;AAAA,EAC5B;AAAA,EACA,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM,OAAO;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM,OAAO;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM,OAAO;AAAA,EACf;AAAA,EACA,QAAQ;AAAA,IACN,aAAa,MAAM,QAAQ,CAAC;AAAA,IAC5B,QAAQ,OAAO;AAAA,EACjB;AAAA,EACA,SAAS;AAAA,IACP,0BAA0B;AAAA,MACxB,YAAY;AAAA,IACd;AAAA,EACF;AACF,EAAE;AAmBF,IAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAuB;AACrB,QAAM,eAAW,iCAAY;AAC7B,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,CAAC,CAAC;AACnD,QAAMC,iBAAgB,oBAAoB,eAAe;AAEzD,QAAM,EAAE,QAAQ,IAAI,UAAU;AAE9B,QAAM,aAAa,CAAC,KAAK,iBAAiB;AACxC,QAAI,oBAAoB,cAAc;AACpC,YAAM,OAAO,mBAAmB,UAAU,GAAG,KAAK;AAClD,YAAM,UAAU,OAAO,SAAS,SAAS;AAEzC,aAAO,SAAS,OAAO;AACvB;AAAA,IACF;AAGA,WAAO,SAAS,GAAG;AAAA,EACrB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,QAAQ;AAAA,MACnB,IAAG;AAAA,MACH,SAAS;AAAA,MACT,QAAQ;AAAA,MACR;AAAA,MAEA;AAAA,qDAAC,0BAAO,UAAS,UACf,wDAAC,2BAAQ,WAAW,QAAQ,QAC1B;AAAA;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,aAAa,EAAE,QAAQ,IAAI,OAAO,GAAG;AAAA,cACrC,iBAAiB;AAAA,gBACf,MAAM,EAAE,SAAS,aAAa,WAAW,MAAM;AAAA,gBAC/C,UAAU,EAAE,SAAS,WAAW,WAAW,MAAM;AAAA,cACnD;AAAA;AAAA,UACF;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,YAAU;AAAA,cACV,SAAS,MAAM,WAAW,oBAAoB,IAAI;AAAA,cAClD,MAAK;AAAA,cACL,SAAQ;AAAA;AAAA,UACV;AAAA,WACF,GACF;AAAA,QAEA,6CAAC,wBACE,UAAAA,eAAc,IAAI,CAAC,UAClB,8CAAC,0BACC;AAAA,uDAAC,iCAAc,eAAa,MAAC,WAAW,QAAQ,WAC7C,gBAAM,WACT;AAAA,UAEC,MAAM,KAAK,IAAI,CAAC,QACf,8CAAC,0BACC;AAAA;AAAA,cAAC;AAAA;AAAA,gBAEC,OAAO,IAAI;AAAA,gBACX,SAAS,MAAM;AACb,sBAAI,IAAI,cAAc,UAAU;AAC9B,2BAAO,SAAS;AAAA,kBAClB;AAEA,yBAAO,WAAW,IAAI,KAAK,IAAI,YAAY;AAAA,gBAC7C;AAAA,gBAEA;AAAA,+DAAC,gCACC,uDAAC,YAAAC,SAAA,EAAK,WAAW,QAAQ,UAAW,cAAI,MAAK,GAC/C;AAAA,kBACA;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAW,QAAQ;AAAA,sBACnB,SAAS,IAAI;AAAA,sBACb,WAAW,EAAE,SAAS,EAAE,SAAS,QAAQ,EAAE;AAAA;AAAA,kBAC7C;AAAA,kBAEA;AAAA,oBAAC;AAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,KAAK;AAAA,sBACL,YAAW;AAAA,sBACX,gBAAe;AAAA,sBAEd;AAAA,yBAAC,CAAC,IAAI,UAAU,UACf;AAAA,0BAAC;AAAA;AAAA,4BACC,WAAW,QAAQ;AAAA,4BACnB,OAAO;AAAA,8BACL,QAAQ,aAAa,IAAI,SAAS,IAC9B,SACA;AAAA,4BACN;AAAA,4BACA,eAAY;AAAA,4BACZ,SAAS,CAAC,UAAU;AAClB,oCAAM,gBAAgB;AACtB,8CAAgB;AAAA,gCACd,GAAG;AAAA,gCACH,CAAC,IAAI,SAAS,GAAG,CAAC,aAAa,IAAI,SAAS;AAAA,8BAC9C,CAAC;AAAA,4BACH;AAAA;AAAA,wBACF;AAAA,wBAGD,IAAI,UACH;AAAA,0BAAC;AAAA;AAAA,4BACC,WAAW,QAAQ;AAAA,4BACnB,OAAO,EAAE,SAAS,WAAW,IAAI,MAAM,IAAI,IAAI,IAAI;AAAA,4BACnD,SAAS,CAAC,UAAU;AAClB,kCAAI,CAAC,IAAI,QAAQ;AACf;AAAA,8BACF;AAEA,oCAAM,gBAAgB;AACtB;AAAA,gCACE,IAAI;AAAA,gCACJ,CAAC,WAAW,IAAI,MAAM;AAAA,8BACxB;AAAA,4BACF;AAAA;AAAA,wBACF;AAAA;AAAA;AAAA,kBAEJ;AAAA;AAAA;AAAA,cA7DK,IAAI;AAAA,YA8DX;AAAA,YAEC,CAAC,CAAC,IAAI,UAAU,UACf,6CAAC,4BAAS,IAAI,aAAa,IAAI,SAAS,GACtC,uDAAC,wBACE,cAAI,SAAS,IAAI,CAAC,UACjB;AAAA,cAAC;AAAA;AAAA,gBAEC,WAAW,QAAQ;AAAA,gBACnB,SAAS,MACP,WAAW,MAAM,KAAK,MAAM,YAAY;AAAA,gBAE1C,OAAO,MAAM;AAAA,gBAEb;AAAA,+DAAC,gCACC,uDAAC,2CAAkB,OAAO,EAAE,QAAQ,GAAG,GAAG,GAC5C;AAAA,kBACA;AAAA,oBAAC;AAAA;AAAA,sBACC,SAAS,MAAM;AAAA,sBACf,WAAW,EAAE,SAAS,EAAE,SAAS,QAAQ,EAAE;AAAA;AAAA,kBAC7C;AAAA;AAAA;AAAA,cAbK,MAAM;AAAA,YAcb,CACD,GACH,GACF;AAAA,eAxFW,GAAG,MAAM,SAAS,IAAI,IAAI,IAAI,EA0F7C,CACD;AAAA,aAjGY,MAAM,SAkGrB,CACD,GACH;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,qBAAQ;;;AMrQR,IAAM,iBAAiB;AAAA,EAC5B,yBAAyB;AAAA,EACzB,qBAAqB;AAAA,EACrB,0BAA0B;AAAA,EAC1B,mCAAmC;AAAA,EACnC,uBAAuB;AAAA,EACvB,2BAA2B;AAAA,EAC3B,0BAA0B;AAAA,EAC1B,4BAA4B;AAAA,EAC5B,6BAA6B;AAC/B;AAEO,IAAM,uBAAuB,CAClC,mBACA,YACG,mBAAmB,SAAS,OAAO;","names":["import_react","import_components","featureNames","import_jsx_runtime","drawerAppList","Icon"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/LeftDrawer/LeftDrawer.tsx","../src/resources/styles/colors/darkPalette.ts","../src/resources/styles/colors/lightPalette.ts","../src/resources/styles/colors.ts","../src/config/drawerAppList.tsx","../src/config/features.ts","../src/components/PinnedItems/PinnedItems.tsx","../src/config/uiFeatures.ts"],"sourcesContent":["export { LeftDrawer } from './components/LeftDrawer/LeftDrawer';\nexport { PinnedItems } from './components/PinnedItems/PinnedItems';\nexport { useGetDrawerAppList } from './config/drawerAppList';\nexport { featureNames, featuresAreEnabled } from './config/features';\nexport { uiFeatureNames, uiFeaturesAreEnabled } from './config/uiFeatures';\n","import { Fragment, useState } from 'react';\n\nimport {\n PushPinOutlined,\n FiberManualRecord,\n ExpandLess,\n} from '@mui/icons-material';\nimport {\n AppBar,\n Collapse,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n ListSubheader,\n SwipeableDrawer,\n Toolbar,\n ListItemButton,\n Box,\n} from '@mui/material';\nimport Icon from '@mui/material/Icon';\nimport { RoundButton, UserBust } from '@natoora-libs/core/components';\nimport { makeStyles } from 'tss-react/mui';\n\nimport { colors } from '@/resources/styles/colors';\n\nimport { useGetDrawerAppList } from '../../config/drawerAppList';\n\nconst useStyles = makeStyles()((theme) => ({\n subheader: {\n textTransform: 'uppercase',\n fontSize: theme.spacing(1.5),\n },\n topBar: {\n backgroundColor: theme.palette.secondary.dark,\n width: theme.spacing(40),\n padding: theme.spacing(2),\n display: 'flex',\n alignItems: 'end',\n justifyContent: 'space-between',\n },\n drawer: {\n alignContent: 'space-between',\n flexDirection: 'column',\n minWidth: theme.spacing(80),\n },\n iconMenu: {\n height: '40px',\n width: '40px',\n opacity: 1,\n fill: colors.neutral700,\n },\n pinIcon: {\n height: '16px',\n width: '16px',\n fill: colors.neutral700,\n opacity: 0.5,\n '&:hover': {\n opacity: 1,\n cursor: 'pointer',\n },\n },\n expandIcon: {\n height: '22px',\n width: '22px',\n fill: colors.neutral700,\n },\n nested: {\n paddingLeft: theme.spacing(6),\n border: colors.neutral200,\n },\n appName: {\n '& .MuiTypography-body2': {\n fontWeight: 700,\n },\n },\n}));\n\ninterface LeftDrawerProps {\n open: boolean;\n enabledFeatures: string[];\n pinnedApps: Record<string, boolean>;\n user: {\n profile_picture: string;\n first_name: string;\n last_name: string;\n username: string;\n };\n reloadOnNavigate?: boolean;\n handleOpen: () => void;\n handleClose: () => void;\n onLogout: () => void;\n onTogglePinnedApp: (name: string, new_value: boolean) => void;\n}\n\nexport const LeftDrawer = ({\n enabledFeatures,\n pinnedApps,\n open,\n user,\n reloadOnNavigate,\n handleClose,\n handleOpen,\n onLogout,\n onTogglePinnedApp,\n}: LeftDrawerProps) => {\n const [openCollapse, setOpenCollapse] = useState({});\n const { userSettingsUrl, drawerAppList, navigateTo } = useGetDrawerAppList({\n enabledFeatures,\n reloadOnNavigate,\n });\n\n const { classes } = useStyles();\n\n return (\n <SwipeableDrawer\n className={classes.drawer}\n id=\"primary-menu\"\n onClose={handleClose}\n onOpen={handleOpen}\n open={open}\n >\n <AppBar position=\"static\">\n <Toolbar className={classes.topBar}>\n <UserBust\n user={user}\n avatarProps={{ height: 50, width: 50 }}\n typographyProps={{\n name: { variant: 'subtitle1', component: 'div' },\n username: { variant: 'caption', component: 'div' },\n }}\n />\n <RoundButton\n icon=\"edit\"\n isContrast\n onClick={() => navigateTo(userSettingsUrl)}\n size=\"small\"\n tooltip=\"User Settings\"\n />\n </Toolbar>\n </AppBar>\n\n <List>\n {drawerAppList.map((group) => (\n <Fragment key={group.groupName}>\n <ListSubheader disableSticky className={classes.subheader}>\n {group.groupName}\n </ListSubheader>\n\n {group.apps.map((app) => (\n <Fragment key={`${group.groupName}_${app.name}`}>\n <ListItem\n key={app.name}\n title={app.url}\n onClick={() => {\n if (app.routeName === 'logout') {\n return onLogout();\n }\n\n return navigateTo(app.url);\n }}\n >\n <ListItemIcon>\n <Icon className={classes.iconMenu}>{app.icon}</Icon>\n </ListItemIcon>\n <ListItemText\n className={classes.appName}\n primary={app.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n\n <Box\n display=\"flex\"\n gap={2}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n {!!app.children?.length && (\n <ExpandLess\n className={classes.expandIcon}\n style={{\n rotate: openCollapse[app.routeName]\n ? '0deg'\n : '180deg',\n }}\n data-testid=\"svg-close-collapse\"\n onClick={(event) => {\n event.stopPropagation();\n setOpenCollapse({\n ...openCollapse,\n [app.routeName]: !openCollapse[app.routeName],\n });\n }}\n />\n )}\n\n {app.pinned && (\n <PushPinOutlined\n className={classes.pinIcon}\n style={{ opacity: pinnedApps[app.pinned] ? 1 : 0.3 }}\n onClick={(event) => {\n if (!app.pinned) {\n return;\n }\n\n event.stopPropagation();\n onTogglePinnedApp(\n app.pinned,\n !pinnedApps[app.pinned],\n );\n }}\n />\n )}\n </Box>\n </ListItem>\n\n {!!app.children?.length && (\n <Collapse in={openCollapse[app.routeName]}>\n <List>\n {app.children.map((child) => (\n <ListItemButton\n key={child.name}\n className={classes.nested}\n onClick={() => navigateTo(child.url)}\n title={child.url}\n >\n <ListItemIcon>\n <FiberManualRecord style={{ height: 12 }} />\n </ListItemIcon>\n <ListItemText\n primary={child.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n </ListItemButton>\n ))}\n </List>\n </Collapse>\n )}\n </Fragment>\n ))}\n </Fragment>\n ))}\n </List>\n </SwipeableDrawer>\n );\n};\n","import { ThemePalette } from './interface';\n\n/**\n * Define the dark palette using the same ThemePalette interface.\n * Any missing or extra keys compared to lightPalette will trigger a TypeScript error.\n */\nconst darkPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#1C1B1A',\n neutral100: '#1F1F1F',\n neutral150: '#262626',\n neutral200: '#2E2E2E',\n neutral250: '#383838',\n neutral300: '#424242',\n neutral400: '#4C4C4C',\n neutral500: '#666666',\n neutral600: '#808080',\n neutral700: '#A3A3A3',\n neutral750: '#B3B3B3',\n neutral800: '#CCCCCC',\n neutral900: '#F5F5F5',\n\n // Input and contrast\n contrast: '#FFFFFF',\n constrastOpacity50: 'rgba(255,255,255,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#B0B0B0',\n default: '#444444',\n muiPrimary: '#E9FB62',\n muiPrimaryBlack: '#FFFFFF',\n lightMuiPrimaryColorBackground: '#e9fb6214',\n lightBlueBackground: '#e9fb6214',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1890d5',\n muiSecondary: '#DE5B99',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#66BB6A',\n muiSuccessAlternate: '#81C784',\n\n // Transparency variants\n blackOpacity10: 'inherit',\n blackOpacity20: 'inherit',\n blackOpacity30: 'inherit',\n blackOpacity50: 'inherit',\n blackOpacity80: 'inherit',\n primaryOpacity10: 'rgba(233, 251, 98, 0.10)',\n primaryOpacity20: 'rgba(233, 251, 98, 0.20)',\n primaryOpacity30: 'rgba(233, 251, 98, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, .3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(255, 255, 255, 0.08)',\n // Active Button\n buttonActiveText: '#E9FB62',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#EF5350',\n};\n\nexport default darkPalette;\n","import { ThemePalette } from './interface';\n\n/**\n * Define the light palette using the ThemePalette interface.\n */\nconst lightPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#F0EBE6',\n neutral100: '#FAFAFA',\n neutral150: '#F4F4F4',\n neutral200: '#F1F1F1',\n neutral250: '#ECECEC',\n neutral300: '#E0E0E0',\n neutral400: '#C8C8C8',\n neutral500: '#BDBDBD',\n neutral600: '#999999',\n neutral700: '#878787',\n neutral750: '#6c6c6c',\n neutral800: '#555555',\n neutral900: '#4D4D4D',\n\n // Input and contrast\n contrast: '#000000',\n constrastOpacity50: 'rgba(0,0,0,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#606060',\n default: '#E0E0E0',\n muiPrimary: '#0781CE',\n muiPrimaryBlack: '#000000',\n lightMuiPrimaryColorBackground: '#eff4fb',\n lightBlueBackground: '#eff4fb',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1565c0',\n muiSecondary: '#A42966',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#4caf50',\n muiSuccessAlternate: '#357a38',\n\n // Transparency variants\n blackOpacity10: 'rgba(0,0,0,0.1)',\n blackOpacity20: 'rgba(0,0,0,0.2)',\n blackOpacity30: 'rgba(0,0,0,0.3)',\n blackOpacity50: 'rgba(0,0,0,0.5)',\n blackOpacity80: 'rgba(0,0,0,0.8)',\n primaryOpacity10: 'rgba(7, 129, 206, 0.10)',\n primaryOpacity20: 'rgba(7, 129, 206, 0.20)',\n primaryOpacity30: 'rgba(7, 129, 206, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, 0.3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(0, 0, 0, 0.04)',\n // Active Button\n buttonActiveText: '#0781CE',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#D32F2F',\n};\n\nexport default lightPalette;\n","import darkPalette from './colors/darkPalette';\nimport lightPalette from './colors/lightPalette';\n\nconst stylesheet = localStorage.getItem('@stylesheet');\nexport const isDarkModeEnabled = stylesheet === 'styles/style-dark.css';\nconst palette = isDarkModeEnabled ? darkPalette : lightPalette;\n\ninterface Colors {\n // General colors\n white: string;\n black: string;\n\n // Neutral\n neutral50: string;\n neutral100: string;\n neutral150: string;\n neutral200: string;\n neutral250: string;\n neutral300: string;\n neutral400: string;\n neutral500: string;\n neutral600: string;\n neutral700: string;\n neutral750: string;\n neutral800: string;\n neutral900: string;\n\n // Input and contrast\n contrast: string;\n constrastOpacity50: string;\n\n // Icon and Material UI colors\n iconSearch: string;\n default: string;\n muiPrimary: string;\n muiPrimaryBlack: string;\n lightMuiPrimaryColorBackground: string;\n lightBlueBackground: string;\n muiPrimaryAlternate: string;\n muiPrimaryHover: string;\n muiSecondary: string;\n muiSecondaryAlternate: string;\n muiSuccess: string;\n muiSuccessAlternate: string;\n\n // Transparency\n blackOpacity10: string;\n blackOpacity20: string;\n blackOpacity30: string;\n blackOpacity50: string;\n blackOpacity80: string;\n primaryOpacity10: string;\n primaryOpacity20: string;\n primaryOpacity30: string;\n secondaryAlternateOpacity30: string;\n blueOpacity08: string;\n whiteOpacity10: string;\n whiteOpacity20: string;\n whiteOpacity40: string;\n\n // Table rows and top bar\n topBar: string;\n // Error Button\n error: string;\n\n roundButton: {\n default: {\n border: string;\n color: string;\n disabled: {\n color: string;\n };\n hover: {\n background: string;\n };\n };\n filled: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n active: {\n color: string;\n hover: {\n background: string;\n };\n };\n contrast: {\n border: string;\n color: string;\n hover: {\n background: string;\n };\n };\n tableButton: {\n color: string;\n };\n focused: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n error: string;\n };\n\n movementCard: {\n default: {\n background: string;\n };\n disabled: {\n background: string;\n };\n pill: {\n color: string;\n background: string;\n };\n };\n\n rowProductCard: {\n locationSubtitle: string;\n };\n}\n\nexport const colors: Colors = {\n white: palette.white,\n black: palette.black,\n\n neutral50: palette.neutral50,\n neutral100: palette.neutral100,\n neutral150: palette.neutral150,\n neutral200: palette.neutral200,\n neutral250: palette.neutral250,\n neutral300: palette.neutral300,\n neutral400: palette.neutral400,\n neutral500: palette.neutral500,\n neutral600: palette.neutral600,\n neutral700: palette.neutral700,\n neutral750: palette.neutral750,\n neutral800: palette.neutral800,\n neutral900: palette.neutral900,\n\n // Input and contrast\n contrast: palette.contrast,\n constrastOpacity50: palette.constrastOpacity50,\n\n iconSearch: palette.iconSearch,\n default: palette.default,\n muiPrimary: palette.muiPrimary,\n muiPrimaryBlack: palette.muiPrimaryBlack,\n lightMuiPrimaryColorBackground: palette.lightMuiPrimaryColorBackground,\n lightBlueBackground: palette.lightBlueBackground,\n muiPrimaryAlternate: palette.muiPrimaryAlternate,\n muiPrimaryHover: palette.muiPrimaryHover,\n muiSecondary: palette.muiSecondary,\n muiSecondaryAlternate: palette.muiSecondaryAlternate,\n muiSuccess: palette.muiSuccess,\n muiSuccessAlternate: palette.muiSuccessAlternate,\n\n // Transparency\n blackOpacity10: palette.blackOpacity10,\n blackOpacity20: palette.blackOpacity20,\n blackOpacity30: palette.blackOpacity30,\n blackOpacity50: palette.blackOpacity50,\n blackOpacity80: palette.blackOpacity80,\n primaryOpacity10: palette.primaryOpacity10,\n primaryOpacity20: palette.primaryOpacity20,\n primaryOpacity30: palette.primaryOpacity30,\n secondaryAlternateOpacity30: palette.secondaryAlternateOpacity30,\n blueOpacity08: palette.blueOpacity08,\n whiteOpacity10: palette.whiteOpacity10,\n whiteOpacity20: palette.whiteOpacity20,\n whiteOpacity40: palette.whiteOpacity40,\n\n topBar: palette.topBar,\n error: palette.error,\n\n roundButton: {\n default: {\n border: palette.neutral600,\n color: palette.contrast,\n disabled: {\n color: palette.blackOpacity20,\n },\n hover: {\n background: palette.buttonHoverBackground,\n },\n },\n filled: {\n background: palette.neutral100,\n color: palette.blackOpacity80,\n hover: {\n background: palette.neutral250,\n },\n },\n active: {\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity20,\n },\n },\n contrast: {\n border: palette.buttonContrastBorder,\n color: palette.buttonContrastText,\n hover: {\n background: palette.whiteOpacity10,\n },\n },\n tableButton: {\n color: palette.neutral800,\n },\n focused: {\n background: palette.primaryOpacity20,\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity30,\n },\n },\n error: palette.error,\n },\n\n movementCard: {\n default: {\n background: palette.neutral100,\n },\n disabled: {\n background: palette.neutral250,\n },\n pill: {\n color: palette.neutral200,\n background: palette.neutral600,\n },\n },\n\n rowProductCard: {\n locationSubtitle: palette.neutral800,\n },\n};\n","import { useCallback, useMemo } from 'react';\nimport { useNavigate } from 'react-router';\n\nimport { icons } from '@natoora-libs/core/components';\nimport { featureNames, featuresAreEnabled } from '@/config/features';\n\ninterface DrawerAppChild {\n name: string;\n routeName: string;\n pinned: string;\n url: string;\n featureName?: string;\n shouldReload?: boolean;\n}\n\ninterface DrawerApp {\n name: string;\n routeName: string;\n featureNames: string[];\n pinned: string | null;\n icon: React.ReactElement;\n url: string;\n shouldReload?: boolean;\n children?: DrawerAppChild[];\n}\n\ninterface DrawerAppGroup {\n groupName: string;\n apps: DrawerApp[];\n}\n\nconst drawerAppGroup: DrawerAppGroup[] = [\n {\n groupName: 'Home',\n apps: [\n {\n name: 'Home',\n routeName: 'home',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconHome />,\n url: '/home',\n },\n ],\n },\n {\n groupName: 'App',\n apps: [\n {\n name: 'Notifications',\n routeName: 'appNotifications',\n featureNames: [featureNames.NOTIFICATIONS],\n pinned: 'notifications',\n icon: <icons.SvgIconNotification />,\n url: '/#/notifications',\n shouldReload: true,\n },\n {\n name: 'Promo Codes',\n routeName: 'promo_codes',\n featureNames: [featureNames.PROMO_CODES],\n pinned: 'promo_codes',\n icon: <icons.SvgIconPromoCode />,\n url: '/promo_codes',\n },\n {\n name: 'Search Categories',\n routeName: 'search-categories',\n featureNames: [featureNames.SEARCH_CATEGORIES],\n pinned: 'search_categories',\n icon: <icons.SvgIconSearchCategories />,\n url: '/search-categories',\n },\n {\n name: 'Content Management',\n routeName: 'content-management',\n featureNames: [featureNames.CONTENT_MANAGEMENT],\n pinned: 'content_management',\n icon: <icons.SvgIconContentManagement />,\n url: '/content-management',\n },\n ],\n },\n {\n groupName: 'Customer Service',\n apps: [\n {\n name: 'Aircall',\n routeName: 'recordedcalls',\n featureNames: [featureNames.AIRCALL],\n pinned: 'aircall',\n icon: <icons.SvgIconPhone />,\n url: '/air-call',\n },\n {\n name: 'Customers',\n routeName: 'customers',\n featureNames: [featureNames.CUSTOMERS],\n pinned: 'customers',\n icon: <icons.SvgIconAccount />,\n url: '/customers',\n children: [\n {\n name: 'Sites',\n routeName: 'customer-sites',\n pinned: 'customer-sites',\n url: '/customers/sites',\n },\n {\n name: 'Groups',\n routeName: 'customer-groups',\n pinned: 'customer-groups',\n url: '/customers/groups',\n },\n ],\n },\n {\n name: 'Orders',\n routeName: 'orders',\n featureNames: [featureNames.ORDERS],\n pinned: 'orders',\n icon: <icons.SvgIconOrders />,\n url: '/#/orders',\n shouldReload: true,\n },\n {\n name: 'Price Lists',\n routeName: 'price_list',\n featureNames: [featureNames.PRICE_LIST],\n pinned: 'price_list',\n icon: <icons.SvgIconPriceList />,\n url: '/#/price-list',\n shouldReload: true,\n },\n {\n name: 'Special Prices',\n routeName: 'special_prices',\n featureNames: [featureNames.SPECIAL_PRICES],\n pinned: 'special_prices',\n icon: <icons.SvgIconSpecialPrice />,\n url: '/#/pricing/special-prices',\n shouldReload: true,\n },\n ],\n },\n {\n groupName: 'Buying',\n apps: [\n {\n name: 'Purchase Orders',\n routeName: 'purchaseOrders',\n featureNames: [featureNames.PURCHASE_ORDERS],\n pinned: 'purchase_orders',\n icon: <icons.SvgIconBuying />,\n url: '/react/purchase-orders',\n shouldReload: true,\n },\n {\n name: 'Products',\n routeName: 'products',\n featureNames: [featureNames.PRODUCTS],\n pinned: 'products',\n icon: <icons.SvgIconProducts />,\n url: '/#/product-base-list',\n shouldReload: true,\n },\n {\n name: 'Suppliers',\n routeName: 'suppliers',\n featureNames: [featureNames.SUPPLIERS],\n pinned: 'suppliers',\n icon: <icons.SvgIconSupplier />,\n url: '/suppliers',\n },\n {\n name: 'Supplier Prices',\n routeName: 'supplier_prices',\n featureNames: [featureNames.SUPPLIER_PRICES],\n pinned: 'supplier_prices',\n icon: <icons.SvgIconSupplierPrices />,\n url: '/#/supplier-prices',\n shouldReload: true,\n },\n {\n name: 'Product Bulk Update',\n routeName: 'bulk-update',\n featureNames: [featureNames.BULK_UPDATE],\n pinned: 'product_bulk_update',\n icon: <icons.SvgIconImport />,\n url: '/bulk_update',\n },\n ],\n },\n {\n groupName: 'Operations',\n apps: [\n {\n name: 'Retail',\n routeName: 'retail',\n featureNames: [featureNames.RETAIL],\n pinned: 'retail',\n icon: <icons.SvgIconRetail />,\n url: '/#/retail/product-availability',\n shouldReload: true,\n },\n {\n name: 'Goods In',\n routeName: 'goodsin-list',\n featureNames: [featureNames.GOODS_IN],\n pinned: 'goods_in',\n icon: <icons.SvgIconGoodsin />,\n url: '/goodsin-list',\n },\n {\n name: 'Returns',\n routeName: 'goods-in-list',\n featureNames: [featureNames.RETURNS],\n pinned: 'returns',\n icon: <icons.SvgIconGoodsin />,\n url: '/returns',\n },\n {\n name: 'Stock and Locations',\n routeName: 'locations',\n featureNames: [featureNames.STOCK, featureNames.LOCATIONS],\n pinned: 'stock',\n icon: <icons.SvgIconLocation />,\n url: '/locations',\n children: [\n {\n name: 'Movements',\n routeName: 'movements',\n pinned: 'movements',\n url: '/movements',\n featureName: featureNames.STOCK_MOVEMENTS,\n },\n ],\n },\n {\n name: 'Kanban Cards',\n routeName: 'kanban',\n featureNames: [featureNames.KANBAN],\n pinned: 'kanban_cards',\n icon: <icons.SvgIconVkc />,\n url: '/#/kanbancards',\n shouldReload: true,\n },\n {\n name: 'Picking Stations',\n routeName: 'picking',\n featureNames: [featureNames.PICKING_STATIONS],\n pinned: 'picking_stations',\n icon: <icons.SvgIconScales />,\n url: '/#/pickingstation',\n shouldReload: true,\n },\n {\n name: 'Quality Control',\n routeName: 'qualityControl',\n featureNames: [featureNames.QUALITY_CONTROL],\n pinned: 'quality_control',\n icon: <icons.SvgIconQc />,\n url: '/#/quality-control',\n shouldReload: true,\n },\n {\n name: 'Service Delivery',\n routeName: 'runs',\n featureNames: [featureNames.SERVICE_DELIVERY],\n pinned: 'service_delivery',\n icon: <icons.SvgIconRuns />,\n url: '/#/transport',\n shouldReload: true,\n },\n {\n name: 'Ops Metrics',\n routeName: 'ops-metrics',\n featureNames: [featureNames.OPS_METRICS],\n pinned: 'ops_metrics',\n icon: <icons.SvgIconOpsMetrics />,\n url: '/ops-metrics',\n },\n ],\n },\n {\n groupName: 'Tools',\n apps: [\n {\n name: 'Accounts',\n routeName: 'accounts',\n featureNames: [featureNames.ACCOUNTS],\n pinned: 'accounts',\n icon: <icons.SvgIconAccounts />,\n url: '/#/accounts',\n shouldReload: true,\n },\n {\n name: 'Reports',\n routeName: 'reports',\n featureNames: [featureNames.REPORTS],\n pinned: 'reports',\n icon: <icons.SvgIconReports />,\n url: '/reports',\n shouldReload: true,\n },\n ],\n },\n {\n groupName: 'Settings',\n apps: [\n {\n name: 'Admin',\n routeName: 'admin',\n featureNames: [featureNames.ADMIN],\n pinned: 'admin',\n icon: <icons.SvgIconSetting />,\n url: '/admin',\n shouldReload: true,\n },\n {\n name: 'User Management',\n routeName: 'user-management',\n featureNames: [featureNames.USER_MANAGEMENT],\n pinned: 'users',\n icon: <icons.SvgIconUserManagement />,\n url: '/user-management',\n },\n {\n name: 'Logout',\n routeName: 'logout',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconLogin />,\n url: '/logout',\n },\n ],\n },\n {\n groupName: 'Release Notes',\n apps: [\n {\n name: 'Release Notes',\n routeName: 'release-notes',\n featureNames: [],\n pinned: null,\n // icon: <icons.SvgIconReleaseNote />,\n icon: <icons.SvgIconLogin />,\n url: '/react/release-notes',\n shouldReload: true,\n },\n ],\n },\n];\n\nexport const useGetDrawerAppList = ({\n enabledFeatures,\n reloadOnNavigate,\n}: {\n enabledFeatures: string[];\n reloadOnNavigate?: boolean;\n}) => {\n const navigate = useNavigate();\n\n const navigateTo = useCallback(\n (url: string) => {\n const isAngularRoute = url.startsWith('/#');\n if (isAngularRoute) {\n window.location.assign(url);\n\n return;\n }\n\n const isMicroFrontendRoute =\n url === '/react/release-notes' ||\n url === '/react/purchase-orders' ||\n url === '/admin' ||\n url === '/reports';\n if (isMicroFrontendRoute) {\n window.location.assign(reloadOnNavigate ? '/react' + url : url);\n\n return;\n }\n\n return navigate(url);\n },\n [reloadOnNavigate],\n );\n\n const drawerAppList = useMemo(() => {\n if (!enabledFeatures?.length) {\n return [];\n }\n\n return drawerAppGroup\n .map((group) => {\n const enabledApps = group.apps\n .filter(\n (app) =>\n app.routeName === 'home' ||\n app.routeName === 'release-notes' ||\n app.routeName === 'logout' ||\n featuresAreEnabled({\n enabledFeatures,\n featureNames: app.featureNames,\n requireAll: false,\n }),\n )\n .map((app) => {\n const filteredChildren = app.children?.filter((child) => {\n if (child.featureName) {\n return enabledFeatures.includes(child.featureName);\n }\n\n return true;\n });\n\n return { ...app, children: filteredChildren };\n });\n\n return { ...group, apps: enabledApps };\n })\n .filter((group) => group.apps.length > 0);\n }, [enabledFeatures]);\n\n return {\n userSettingsUrl: '/#/user-settings',\n drawerAppList,\n navigateTo,\n };\n};\n","export const featureNames = {\n ACCOUNTS: 'accounts',\n ADMIN: 'admin',\n AIRCALL: 'aircall',\n BULK_UPDATE: 'product_bulk_update',\n CONTENT_MANAGEMENT: 'content_management',\n CUSTOMERS: 'customers',\n GOODS_IN: 'goods_in',\n KANBAN: 'kanban_cards',\n LOCATIONS: 'locations',\n NOTIFICATIONS: 'notifications',\n OPS_METRICS: 'ops_metrics',\n ORDERS: 'orders',\n PICKING_STATIONS: 'picking_stations',\n PRICE_LIST: 'price_list',\n PRODUCTS: 'products',\n PROMO_CODES: 'promo_codes',\n PURCHASE_ORDERS: 'purchase_orders',\n QUALITY_CONTROL: 'quality_control',\n REPORTS: 'reports',\n RETAIL: 'retail',\n RETURNS: 'returns',\n SEARCH_CATEGORIES: 'search_categories',\n SERVICE_DELIVERY: 'service_delivery',\n SPECIAL_PRICES: 'special_prices',\n STOCK: 'stock',\n STOCK_MOVEMENTS: 'stock_movements',\n SUPPLIERS: 'suppliers',\n SUPPLIER_PRICES: 'supplier_prices',\n USER_MANAGEMENT: 'users',\n};\n\nexport function featuresAreEnabled({\n enabledFeatures,\n featureNames,\n requireAll = true,\n}: {\n enabledFeatures: string[];\n featureNames: string[];\n requireAll?: boolean;\n}) {\n const storedPermissions = localStorage.getItem('permissions') || '';\n let enabled = false;\n\n if (requireAll) {\n enabled = featureNames.every(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n } else {\n enabled = featureNames.some(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n }\n\n return enabled;\n}\n","import { Box, Icon, IconButton, Tooltip } from '@mui/material';\nimport { useGetDrawerAppList } from '@/config/drawerAppList';\n\ntype PinnedItemsProps = {\n enabledFeatures: string[];\n pinnedApps: Record<string, boolean>;\n reloadOnNavigate?: boolean;\n};\n\nexport const PinnedItems = ({\n enabledFeatures,\n pinnedApps,\n reloadOnNavigate,\n}: PinnedItemsProps) => {\n const { drawerAppList, navigateTo } = useGetDrawerAppList({\n enabledFeatures,\n reloadOnNavigate,\n });\n const items = drawerAppList\n .flatMap((app) => app.apps)\n .filter((app) => app.pinned && pinnedApps[app.pinned]);\n\n return (\n <Box display=\"flex\" flexDirection=\"row\" gap={1.5}>\n {items.map((item) => (\n <Tooltip title={item.name} key={item.name}>\n <IconButton\n style={{ backgroundColor: 'gray', padding: 4 }}\n onClick={() => navigateTo(item.url)}\n >\n <Icon\n key={item.name}\n style={{ width: 32, height: 32, fill: 'white' }}\n >\n {item.icon}\n </Icon>\n </IconButton>\n </Tooltip>\n ))}\n </Box>\n );\n};\n","export const uiFeatureNames = {\n PURCHASE_ORDERS_REGIONS: 'purchases_regions',\n SUPPLIER_PORTAL_TAB: 'suppliers_portal_users_tab',\n SUPPLIER_PRICING_SECTION: 'suppliers_pricing_section',\n CUSTOMER_ESTIMATED_BASKET_SETTING: 'customers_estimated_basket_setting',\n ORDER_ISSUE_REPORTING: 'customers_order_issue_report_setting',\n CUSTOMER_PAYMENTS_SECTION: 'customers_payments_section',\n CUSTOMER_PREFERENCES_TAB: 'customers_preferences_tab',\n CUSTOMER_SUBSTITUTIONS_TAB: 'customers_substitutions_tab',\n PRODUCT_PREFERENCES_SECTION: 'product_preferences_section',\n};\n\nexport const uiFeaturesAreEnabled = (\n enabledUIFeatures: string[] | undefined,\n feature: string,\n) => enabledUIFeatures?.includes(feature);\n"],"mappings":"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","names":["import_react","import_components","featureNames","import_jsx_runtime","Icon","import_material","import_jsx_runtime"]}
package/dist/index.d.cts CHANGED
@@ -18,6 +18,13 @@ interface LeftDrawerProps {
18
18
  }
19
19
  declare const LeftDrawer: ({ enabledFeatures, pinnedApps, open, user, reloadOnNavigate, handleClose, handleOpen, onLogout, onTogglePinnedApp, }: LeftDrawerProps) => react_jsx_runtime.JSX.Element;
20
20
 
21
+ type PinnedItemsProps = {
22
+ enabledFeatures: string[];
23
+ pinnedApps: Record<string, boolean>;
24
+ reloadOnNavigate?: boolean;
25
+ };
26
+ declare const PinnedItems: ({ enabledFeatures, pinnedApps, reloadOnNavigate, }: PinnedItemsProps) => react_jsx_runtime.JSX.Element;
27
+
21
28
  interface DrawerAppChild {
22
29
  name: string;
23
30
  routeName: string;
@@ -26,19 +33,26 @@ interface DrawerAppChild {
26
33
  featureName?: string;
27
34
  shouldReload?: boolean;
28
35
  }
29
- declare const useGetDrawerAppList: (enabledFeatures: string[]) => {
30
- apps: {
31
- children: DrawerAppChild[] | undefined;
32
- name: string;
33
- routeName: string;
34
- featureNames: string[];
35
- pinned: string | null;
36
- icon: React.ReactElement;
37
- url: string;
38
- shouldReload?: boolean;
36
+ declare const useGetDrawerAppList: ({ enabledFeatures, reloadOnNavigate, }: {
37
+ enabledFeatures: string[];
38
+ reloadOnNavigate?: boolean;
39
+ }) => {
40
+ userSettingsUrl: string;
41
+ drawerAppList: {
42
+ apps: {
43
+ children: DrawerAppChild[] | undefined;
44
+ name: string;
45
+ routeName: string;
46
+ featureNames: string[];
47
+ pinned: string | null;
48
+ icon: React.ReactElement;
49
+ url: string;
50
+ shouldReload?: boolean;
51
+ }[];
52
+ groupName: string;
39
53
  }[];
40
- groupName: string;
41
- }[];
54
+ navigateTo: (url: string) => void | Promise<void>;
55
+ };
42
56
 
43
57
  declare const featureNames: {
44
58
  ACCOUNTS: string;
@@ -90,4 +104,4 @@ declare const uiFeatureNames: {
90
104
  };
91
105
  declare const uiFeaturesAreEnabled: (enabledUIFeatures: string[] | undefined, feature: string) => boolean | undefined;
92
106
 
93
- export { LeftDrawer, featureNames, featuresAreEnabled, uiFeatureNames, uiFeaturesAreEnabled, useGetDrawerAppList };
107
+ export { LeftDrawer, PinnedItems, featureNames, featuresAreEnabled, uiFeatureNames, uiFeaturesAreEnabled, useGetDrawerAppList };
package/dist/index.d.ts CHANGED
@@ -18,6 +18,13 @@ interface LeftDrawerProps {
18
18
  }
19
19
  declare const LeftDrawer: ({ enabledFeatures, pinnedApps, open, user, reloadOnNavigate, handleClose, handleOpen, onLogout, onTogglePinnedApp, }: LeftDrawerProps) => react_jsx_runtime.JSX.Element;
20
20
 
21
+ type PinnedItemsProps = {
22
+ enabledFeatures: string[];
23
+ pinnedApps: Record<string, boolean>;
24
+ reloadOnNavigate?: boolean;
25
+ };
26
+ declare const PinnedItems: ({ enabledFeatures, pinnedApps, reloadOnNavigate, }: PinnedItemsProps) => react_jsx_runtime.JSX.Element;
27
+
21
28
  interface DrawerAppChild {
22
29
  name: string;
23
30
  routeName: string;
@@ -26,19 +33,26 @@ interface DrawerAppChild {
26
33
  featureName?: string;
27
34
  shouldReload?: boolean;
28
35
  }
29
- declare const useGetDrawerAppList: (enabledFeatures: string[]) => {
30
- apps: {
31
- children: DrawerAppChild[] | undefined;
32
- name: string;
33
- routeName: string;
34
- featureNames: string[];
35
- pinned: string | null;
36
- icon: React.ReactElement;
37
- url: string;
38
- shouldReload?: boolean;
36
+ declare const useGetDrawerAppList: ({ enabledFeatures, reloadOnNavigate, }: {
37
+ enabledFeatures: string[];
38
+ reloadOnNavigate?: boolean;
39
+ }) => {
40
+ userSettingsUrl: string;
41
+ drawerAppList: {
42
+ apps: {
43
+ children: DrawerAppChild[] | undefined;
44
+ name: string;
45
+ routeName: string;
46
+ featureNames: string[];
47
+ pinned: string | null;
48
+ icon: React.ReactElement;
49
+ url: string;
50
+ shouldReload?: boolean;
51
+ }[];
52
+ groupName: string;
39
53
  }[];
40
- groupName: string;
41
- }[];
54
+ navigateTo: (url: string) => void | Promise<void>;
55
+ };
42
56
 
43
57
  declare const featureNames: {
44
58
  ACCOUNTS: string;
@@ -90,4 +104,4 @@ declare const uiFeatureNames: {
90
104
  };
91
105
  declare const uiFeaturesAreEnabled: (enabledUIFeatures: string[] | undefined, feature: string) => boolean | undefined;
92
106
 
93
- export { LeftDrawer, featureNames, featuresAreEnabled, uiFeatureNames, uiFeaturesAreEnabled, useGetDrawerAppList };
107
+ export { LeftDrawer, PinnedItems, featureNames, featuresAreEnabled, uiFeatureNames, uiFeaturesAreEnabled, useGetDrawerAppList };
package/dist/index.js CHANGED
@@ -1,6 +1,5 @@
1
1
  // src/components/LeftDrawer/LeftDrawer.tsx
2
2
  import { Fragment, useState } from "react";
3
- import { useNavigate } from "react-router";
4
3
  import {
5
4
  PushPinOutlined,
6
5
  FiberManualRecord,
@@ -263,7 +262,8 @@ var colors = {
263
262
  };
264
263
 
265
264
  // src/config/drawerAppList.tsx
266
- import { useMemo } from "react";
265
+ import { useCallback, useMemo } from "react";
266
+ import { useNavigate } from "react-router";
267
267
  import { icons } from "@natoora-libs/core/components";
268
268
 
269
269
  // src/config/features.ts
@@ -319,7 +319,7 @@ function featuresAreEnabled({
319
319
 
320
320
  // src/config/drawerAppList.tsx
321
321
  import { jsx } from "react/jsx-runtime";
322
- var drawerAppList = [
322
+ var drawerAppGroup = [
323
323
  {
324
324
  groupName: "Home",
325
325
  apps: [
@@ -641,12 +641,32 @@ var drawerAppList = [
641
641
  ]
642
642
  }
643
643
  ];
644
- var useGetDrawerAppList = (enabledFeatures) => {
645
- return useMemo(() => {
644
+ var useGetDrawerAppList = ({
645
+ enabledFeatures,
646
+ reloadOnNavigate
647
+ }) => {
648
+ const navigate = useNavigate();
649
+ const navigateTo = useCallback(
650
+ (url) => {
651
+ const isAngularRoute = url.startsWith("/#");
652
+ if (isAngularRoute) {
653
+ window.location.assign(url);
654
+ return;
655
+ }
656
+ const isMicroFrontendRoute = url === "/react/release-notes" || url === "/react/purchase-orders" || url === "/admin" || url === "/reports";
657
+ if (isMicroFrontendRoute) {
658
+ window.location.assign(reloadOnNavigate ? "/react" + url : url);
659
+ return;
660
+ }
661
+ return navigate(url);
662
+ },
663
+ [reloadOnNavigate]
664
+ );
665
+ const drawerAppList = useMemo(() => {
646
666
  if (!enabledFeatures?.length) {
647
667
  return [];
648
668
  }
649
- return drawerAppList.map((group) => {
669
+ return drawerAppGroup.map((group) => {
650
670
  const enabledApps = group.apps.filter(
651
671
  (app) => app.routeName === "home" || app.routeName === "release-notes" || app.routeName === "logout" || featuresAreEnabled({
652
672
  enabledFeatures,
@@ -665,6 +685,11 @@ var useGetDrawerAppList = (enabledFeatures) => {
665
685
  return { ...group, apps: enabledApps };
666
686
  }).filter((group) => group.apps.length > 0);
667
687
  }, [enabledFeatures]);
688
+ return {
689
+ userSettingsUrl: "/#/user-settings",
690
+ drawerAppList,
691
+ navigateTo
692
+ };
668
693
  };
669
694
 
670
695
  // src/components/LeftDrawer/LeftDrawer.tsx
@@ -729,19 +754,12 @@ var LeftDrawer = ({
729
754
  onLogout,
730
755
  onTogglePinnedApp
731
756
  }) => {
732
- const navigate = useNavigate();
733
757
  const [openCollapse, setOpenCollapse] = useState({});
734
- const drawerAppList2 = useGetDrawerAppList(enabledFeatures);
758
+ const { userSettingsUrl, drawerAppList, navigateTo } = useGetDrawerAppList({
759
+ enabledFeatures,
760
+ reloadOnNavigate
761
+ });
735
762
  const { classes } = useStyles();
736
- const navigateTo = (url, shouldReload) => {
737
- if (reloadOnNavigate || shouldReload) {
738
- const path = reloadOnNavigate ? `/react/${url}` : url;
739
- const fullUrl = window.location.origin + path;
740
- window.location.href = fullUrl;
741
- return;
742
- }
743
- return navigate(url);
744
- };
745
763
  return /* @__PURE__ */ jsxs(
746
764
  SwipeableDrawer,
747
765
  {
@@ -768,13 +786,13 @@ var LeftDrawer = ({
768
786
  {
769
787
  icon: "edit",
770
788
  isContrast: true,
771
- onClick: () => navigateTo(`/#/user-settings`, true),
789
+ onClick: () => navigateTo(userSettingsUrl),
772
790
  size: "small",
773
791
  tooltip: "User Settings"
774
792
  }
775
793
  )
776
794
  ] }) }),
777
- /* @__PURE__ */ jsx2(List, { children: drawerAppList2.map((group) => /* @__PURE__ */ jsxs(Fragment, { children: [
795
+ /* @__PURE__ */ jsx2(List, { children: drawerAppList.map((group) => /* @__PURE__ */ jsxs(Fragment, { children: [
778
796
  /* @__PURE__ */ jsx2(ListSubheader, { disableSticky: true, className: classes.subheader, children: group.groupName }),
779
797
  group.apps.map((app) => /* @__PURE__ */ jsxs(Fragment, { children: [
780
798
  /* @__PURE__ */ jsxs(
@@ -785,7 +803,7 @@ var LeftDrawer = ({
785
803
  if (app.routeName === "logout") {
786
804
  return onLogout();
787
805
  }
788
- return navigateTo(app.url, app.shouldReload);
806
+ return navigateTo(app.url);
789
807
  },
790
808
  children: [
791
809
  /* @__PURE__ */ jsx2(ListItemIcon, { children: /* @__PURE__ */ jsx2(Icon, { className: classes.iconMenu, children: app.icon }) }),
@@ -850,7 +868,7 @@ var LeftDrawer = ({
850
868
  ListItemButton,
851
869
  {
852
870
  className: classes.nested,
853
- onClick: () => navigateTo(child.url, child.shouldReload),
871
+ onClick: () => navigateTo(child.url),
854
872
  title: child.url,
855
873
  children: [
856
874
  /* @__PURE__ */ jsx2(ListItemIcon, { children: /* @__PURE__ */ jsx2(FiberManualRecord, { style: { height: 12 } }) }),
@@ -871,7 +889,36 @@ var LeftDrawer = ({
871
889
  }
872
890
  );
873
891
  };
874
- var LeftDrawer_default = LeftDrawer;
892
+
893
+ // src/components/PinnedItems/PinnedItems.tsx
894
+ import { Box as Box2, Icon as Icon2, IconButton, Tooltip } from "@mui/material";
895
+ import { jsx as jsx3 } from "react/jsx-runtime";
896
+ var PinnedItems = ({
897
+ enabledFeatures,
898
+ pinnedApps,
899
+ reloadOnNavigate
900
+ }) => {
901
+ const { drawerAppList, navigateTo } = useGetDrawerAppList({
902
+ enabledFeatures,
903
+ reloadOnNavigate
904
+ });
905
+ const items = drawerAppList.flatMap((app) => app.apps).filter((app) => app.pinned && pinnedApps[app.pinned]);
906
+ return /* @__PURE__ */ jsx3(Box2, { display: "flex", flexDirection: "row", gap: 1.5, children: items.map((item) => /* @__PURE__ */ jsx3(Tooltip, { title: item.name, children: /* @__PURE__ */ jsx3(
907
+ IconButton,
908
+ {
909
+ style: { backgroundColor: "gray", padding: 4 },
910
+ onClick: () => navigateTo(item.url),
911
+ children: /* @__PURE__ */ jsx3(
912
+ Icon2,
913
+ {
914
+ style: { width: 32, height: 32, fill: "white" },
915
+ children: item.icon
916
+ },
917
+ item.name
918
+ )
919
+ }
920
+ ) }, item.name)) });
921
+ };
875
922
 
876
923
  // src/config/uiFeatures.ts
877
924
  var uiFeatureNames = {
@@ -887,7 +934,8 @@ var uiFeatureNames = {
887
934
  };
888
935
  var uiFeaturesAreEnabled = (enabledUIFeatures, feature) => enabledUIFeatures?.includes(feature);
889
936
  export {
890
- LeftDrawer_default as LeftDrawer,
937
+ LeftDrawer,
938
+ PinnedItems,
891
939
  featureNames,
892
940
  featuresAreEnabled,
893
941
  uiFeatureNames,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/LeftDrawer/LeftDrawer.tsx","../src/resources/styles/colors/darkPalette.ts","../src/resources/styles/colors/lightPalette.ts","../src/resources/styles/colors.ts","../src/config/drawerAppList.tsx","../src/config/features.ts","../src/config/uiFeatures.ts"],"sourcesContent":["import { Fragment, useState } from 'react';\nimport { useNavigate } from 'react-router';\n\nimport {\n PushPinOutlined,\n FiberManualRecord,\n ExpandLess,\n} from '@mui/icons-material';\nimport {\n AppBar,\n Collapse,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n ListSubheader,\n SwipeableDrawer,\n Toolbar,\n ListItemButton,\n Box,\n} from '@mui/material';\nimport Icon from '@mui/material/Icon';\nimport { RoundButton, UserBust } from '@natoora-libs/core/components';\nimport { makeStyles } from 'tss-react/mui';\n\nimport { colors } from '@/resources/styles/colors';\n\nimport { useGetDrawerAppList } from '../../config/drawerAppList';\n\nconst useStyles = makeStyles()((theme) => ({\n subheader: {\n textTransform: 'uppercase',\n fontSize: theme.spacing(1.5),\n },\n topBar: {\n backgroundColor: theme.palette.secondary.dark,\n width: theme.spacing(40),\n padding: theme.spacing(2),\n display: 'flex',\n alignItems: 'end',\n justifyContent: 'space-between',\n },\n drawer: {\n alignContent: 'space-between',\n flexDirection: 'column',\n minWidth: theme.spacing(80),\n },\n iconMenu: {\n height: '40px',\n width: '40px',\n opacity: 1,\n fill: colors.neutral700,\n },\n pinIcon: {\n height: '16px',\n width: '16px',\n fill: colors.neutral700,\n opacity: 0.5,\n '&:hover': {\n opacity: 1,\n cursor: 'pointer',\n },\n },\n expandIcon: {\n height: '22px',\n width: '22px',\n fill: colors.neutral700,\n },\n nested: {\n paddingLeft: theme.spacing(6),\n border: colors.neutral200,\n },\n appName: {\n '& .MuiTypography-body2': {\n fontWeight: 700,\n },\n },\n}));\n\ninterface LeftDrawerProps {\n open: boolean;\n enabledFeatures: string[];\n pinnedApps: Record<string, boolean>;\n user: {\n profile_picture: string;\n first_name: string;\n last_name: string;\n username: string;\n };\n reloadOnNavigate?: boolean;\n handleOpen: () => void;\n handleClose: () => void;\n onLogout: () => void;\n onTogglePinnedApp: (name: string, new_value: boolean) => void;\n}\n\nconst LeftDrawer = ({\n enabledFeatures,\n pinnedApps,\n open,\n user,\n reloadOnNavigate,\n handleClose,\n handleOpen,\n onLogout,\n onTogglePinnedApp,\n}: LeftDrawerProps) => {\n const navigate = useNavigate();\n const [openCollapse, setOpenCollapse] = useState({});\n const drawerAppList = useGetDrawerAppList(enabledFeatures);\n\n const { classes } = useStyles();\n\n const navigateTo = (url, shouldReload) => {\n if (reloadOnNavigate || shouldReload) {\n const path = reloadOnNavigate ? `/react/${url}` : url;\n const fullUrl = window.location.origin + path;\n\n window.location.href = fullUrl;\n return;\n }\n\n // eslint-disable-next-line consistent-return\n return navigate(url);\n };\n\n return (\n <SwipeableDrawer\n className={classes.drawer}\n id=\"primary-menu\"\n onClose={handleClose}\n onOpen={handleOpen}\n open={open}\n >\n <AppBar position=\"static\">\n <Toolbar className={classes.topBar}>\n <UserBust\n user={user}\n avatarProps={{ height: 50, width: 50 }}\n typographyProps={{\n name: { variant: 'subtitle1', component: 'div' },\n username: { variant: 'caption', component: 'div' },\n }}\n />\n <RoundButton\n icon=\"edit\"\n isContrast\n onClick={() => navigateTo(`/#/user-settings`, true)}\n size=\"small\"\n tooltip=\"User Settings\"\n />\n </Toolbar>\n </AppBar>\n\n <List>\n {drawerAppList.map((group) => (\n <Fragment key={group.groupName}>\n <ListSubheader disableSticky className={classes.subheader}>\n {group.groupName}\n </ListSubheader>\n\n {group.apps.map((app) => (\n <Fragment key={`${group.groupName}_${app.name}`}>\n <ListItem\n key={app.name}\n title={app.url}\n onClick={() => {\n if (app.routeName === 'logout') {\n return onLogout();\n }\n\n return navigateTo(app.url, app.shouldReload);\n }}\n >\n <ListItemIcon>\n <Icon className={classes.iconMenu}>{app.icon}</Icon>\n </ListItemIcon>\n <ListItemText\n className={classes.appName}\n primary={app.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n\n <Box\n display=\"flex\"\n gap={2}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n {!!app.children?.length && (\n <ExpandLess\n className={classes.expandIcon}\n style={{\n rotate: openCollapse[app.routeName]\n ? '0deg'\n : '180deg',\n }}\n data-testid=\"svg-close-collapse\"\n onClick={(event) => {\n event.stopPropagation();\n setOpenCollapse({\n ...openCollapse,\n [app.routeName]: !openCollapse[app.routeName],\n });\n }}\n />\n )}\n\n {app.pinned && (\n <PushPinOutlined\n className={classes.pinIcon}\n style={{ opacity: pinnedApps[app.pinned] ? 1 : 0.3 }}\n onClick={(event) => {\n if (!app.pinned) {\n return;\n }\n\n event.stopPropagation();\n onTogglePinnedApp(\n app.pinned,\n !pinnedApps[app.pinned],\n );\n }}\n />\n )}\n </Box>\n </ListItem>\n\n {!!app.children?.length && (\n <Collapse in={openCollapse[app.routeName]}>\n <List>\n {app.children.map((child) => (\n <ListItemButton\n key={child.name}\n className={classes.nested}\n onClick={() =>\n navigateTo(child.url, child.shouldReload)\n }\n title={child.url}\n >\n <ListItemIcon>\n <FiberManualRecord style={{ height: 12 }} />\n </ListItemIcon>\n <ListItemText\n primary={child.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n </ListItemButton>\n ))}\n </List>\n </Collapse>\n )}\n </Fragment>\n ))}\n </Fragment>\n ))}\n </List>\n </SwipeableDrawer>\n );\n};\n\nexport default LeftDrawer;\n","import { ThemePalette } from './interface';\n\n/**\n * Define the dark palette using the same ThemePalette interface.\n * Any missing or extra keys compared to lightPalette will trigger a TypeScript error.\n */\nconst darkPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#1C1B1A',\n neutral100: '#1F1F1F',\n neutral150: '#262626',\n neutral200: '#2E2E2E',\n neutral250: '#383838',\n neutral300: '#424242',\n neutral400: '#4C4C4C',\n neutral500: '#666666',\n neutral600: '#808080',\n neutral700: '#A3A3A3',\n neutral750: '#B3B3B3',\n neutral800: '#CCCCCC',\n neutral900: '#F5F5F5',\n\n // Input and contrast\n contrast: '#FFFFFF',\n constrastOpacity50: 'rgba(255,255,255,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#B0B0B0',\n default: '#444444',\n muiPrimary: '#E9FB62',\n muiPrimaryBlack: '#FFFFFF',\n lightMuiPrimaryColorBackground: '#e9fb6214',\n lightBlueBackground: '#e9fb6214',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1890d5',\n muiSecondary: '#DE5B99',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#66BB6A',\n muiSuccessAlternate: '#81C784',\n\n // Transparency variants\n blackOpacity10: 'inherit',\n blackOpacity20: 'inherit',\n blackOpacity30: 'inherit',\n blackOpacity50: 'inherit',\n blackOpacity80: 'inherit',\n primaryOpacity10: 'rgba(233, 251, 98, 0.10)',\n primaryOpacity20: 'rgba(233, 251, 98, 0.20)',\n primaryOpacity30: 'rgba(233, 251, 98, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, .3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(255, 255, 255, 0.08)',\n // Active Button\n buttonActiveText: '#E9FB62',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#EF5350',\n};\n\nexport default darkPalette;\n","import { ThemePalette } from './interface';\n\n/**\n * Define the light palette using the ThemePalette interface.\n */\nconst lightPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#F0EBE6',\n neutral100: '#FAFAFA',\n neutral150: '#F4F4F4',\n neutral200: '#F1F1F1',\n neutral250: '#ECECEC',\n neutral300: '#E0E0E0',\n neutral400: '#C8C8C8',\n neutral500: '#BDBDBD',\n neutral600: '#999999',\n neutral700: '#878787',\n neutral750: '#6c6c6c',\n neutral800: '#555555',\n neutral900: '#4D4D4D',\n\n // Input and contrast\n contrast: '#000000',\n constrastOpacity50: 'rgba(0,0,0,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#606060',\n default: '#E0E0E0',\n muiPrimary: '#0781CE',\n muiPrimaryBlack: '#000000',\n lightMuiPrimaryColorBackground: '#eff4fb',\n lightBlueBackground: '#eff4fb',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1565c0',\n muiSecondary: '#A42966',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#4caf50',\n muiSuccessAlternate: '#357a38',\n\n // Transparency variants\n blackOpacity10: 'rgba(0,0,0,0.1)',\n blackOpacity20: 'rgba(0,0,0,0.2)',\n blackOpacity30: 'rgba(0,0,0,0.3)',\n blackOpacity50: 'rgba(0,0,0,0.5)',\n blackOpacity80: 'rgba(0,0,0,0.8)',\n primaryOpacity10: 'rgba(7, 129, 206, 0.10)',\n primaryOpacity20: 'rgba(7, 129, 206, 0.20)',\n primaryOpacity30: 'rgba(7, 129, 206, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, 0.3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(0, 0, 0, 0.04)',\n // Active Button\n buttonActiveText: '#0781CE',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#D32F2F',\n};\n\nexport default lightPalette;\n","import darkPalette from './colors/darkPalette';\nimport lightPalette from './colors/lightPalette';\n\nconst stylesheet = localStorage.getItem('@stylesheet');\nexport const isDarkModeEnabled = stylesheet === 'styles/style-dark.css';\nconst palette = isDarkModeEnabled ? darkPalette : lightPalette;\n\ninterface Colors {\n // General colors\n white: string;\n black: string;\n\n // Neutral\n neutral50: string;\n neutral100: string;\n neutral150: string;\n neutral200: string;\n neutral250: string;\n neutral300: string;\n neutral400: string;\n neutral500: string;\n neutral600: string;\n neutral700: string;\n neutral750: string;\n neutral800: string;\n neutral900: string;\n\n // Input and contrast\n contrast: string;\n constrastOpacity50: string;\n\n // Icon and Material UI colors\n iconSearch: string;\n default: string;\n muiPrimary: string;\n muiPrimaryBlack: string;\n lightMuiPrimaryColorBackground: string;\n lightBlueBackground: string;\n muiPrimaryAlternate: string;\n muiPrimaryHover: string;\n muiSecondary: string;\n muiSecondaryAlternate: string;\n muiSuccess: string;\n muiSuccessAlternate: string;\n\n // Transparency\n blackOpacity10: string;\n blackOpacity20: string;\n blackOpacity30: string;\n blackOpacity50: string;\n blackOpacity80: string;\n primaryOpacity10: string;\n primaryOpacity20: string;\n primaryOpacity30: string;\n secondaryAlternateOpacity30: string;\n blueOpacity08: string;\n whiteOpacity10: string;\n whiteOpacity20: string;\n whiteOpacity40: string;\n\n // Table rows and top bar\n topBar: string;\n // Error Button\n error: string;\n\n roundButton: {\n default: {\n border: string;\n color: string;\n disabled: {\n color: string;\n };\n hover: {\n background: string;\n };\n };\n filled: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n active: {\n color: string;\n hover: {\n background: string;\n };\n };\n contrast: {\n border: string;\n color: string;\n hover: {\n background: string;\n };\n };\n tableButton: {\n color: string;\n };\n focused: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n error: string;\n };\n\n movementCard: {\n default: {\n background: string;\n };\n disabled: {\n background: string;\n };\n pill: {\n color: string;\n background: string;\n };\n };\n\n rowProductCard: {\n locationSubtitle: string;\n };\n}\n\nexport const colors: Colors = {\n white: palette.white,\n black: palette.black,\n\n neutral50: palette.neutral50,\n neutral100: palette.neutral100,\n neutral150: palette.neutral150,\n neutral200: palette.neutral200,\n neutral250: palette.neutral250,\n neutral300: palette.neutral300,\n neutral400: palette.neutral400,\n neutral500: palette.neutral500,\n neutral600: palette.neutral600,\n neutral700: palette.neutral700,\n neutral750: palette.neutral750,\n neutral800: palette.neutral800,\n neutral900: palette.neutral900,\n\n // Input and contrast\n contrast: palette.contrast,\n constrastOpacity50: palette.constrastOpacity50,\n\n iconSearch: palette.iconSearch,\n default: palette.default,\n muiPrimary: palette.muiPrimary,\n muiPrimaryBlack: palette.muiPrimaryBlack,\n lightMuiPrimaryColorBackground: palette.lightMuiPrimaryColorBackground,\n lightBlueBackground: palette.lightBlueBackground,\n muiPrimaryAlternate: palette.muiPrimaryAlternate,\n muiPrimaryHover: palette.muiPrimaryHover,\n muiSecondary: palette.muiSecondary,\n muiSecondaryAlternate: palette.muiSecondaryAlternate,\n muiSuccess: palette.muiSuccess,\n muiSuccessAlternate: palette.muiSuccessAlternate,\n\n // Transparency\n blackOpacity10: palette.blackOpacity10,\n blackOpacity20: palette.blackOpacity20,\n blackOpacity30: palette.blackOpacity30,\n blackOpacity50: palette.blackOpacity50,\n blackOpacity80: palette.blackOpacity80,\n primaryOpacity10: palette.primaryOpacity10,\n primaryOpacity20: palette.primaryOpacity20,\n primaryOpacity30: palette.primaryOpacity30,\n secondaryAlternateOpacity30: palette.secondaryAlternateOpacity30,\n blueOpacity08: palette.blueOpacity08,\n whiteOpacity10: palette.whiteOpacity10,\n whiteOpacity20: palette.whiteOpacity20,\n whiteOpacity40: palette.whiteOpacity40,\n\n topBar: palette.topBar,\n error: palette.error,\n\n roundButton: {\n default: {\n border: palette.neutral600,\n color: palette.contrast,\n disabled: {\n color: palette.blackOpacity20,\n },\n hover: {\n background: palette.buttonHoverBackground,\n },\n },\n filled: {\n background: palette.neutral100,\n color: palette.blackOpacity80,\n hover: {\n background: palette.neutral250,\n },\n },\n active: {\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity20,\n },\n },\n contrast: {\n border: palette.buttonContrastBorder,\n color: palette.buttonContrastText,\n hover: {\n background: palette.whiteOpacity10,\n },\n },\n tableButton: {\n color: palette.neutral800,\n },\n focused: {\n background: palette.primaryOpacity20,\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity30,\n },\n },\n error: palette.error,\n },\n\n movementCard: {\n default: {\n background: palette.neutral100,\n },\n disabled: {\n background: palette.neutral250,\n },\n pill: {\n color: palette.neutral200,\n background: palette.neutral600,\n },\n },\n\n rowProductCard: {\n locationSubtitle: palette.neutral800,\n },\n};\n","import { useMemo } from 'react';\n\nimport { icons } from '@natoora-libs/core/components';\nimport { featureNames, featuresAreEnabled } from '@/config/features';\n\ninterface DrawerAppChild {\n name: string;\n routeName: string;\n pinned: string;\n url: string;\n featureName?: string;\n shouldReload?: boolean;\n}\n\ninterface DrawerApp {\n name: string;\n routeName: string;\n featureNames: string[];\n pinned: string | null;\n icon: React.ReactElement;\n url: string;\n shouldReload?: boolean;\n children?: DrawerAppChild[];\n}\n\ninterface DrawerAppGroup {\n groupName: string;\n apps: DrawerApp[];\n}\n\nconst drawerAppList: DrawerAppGroup[] = [\n {\n groupName: 'Home',\n apps: [\n {\n name: 'Home',\n routeName: 'home',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconHome />,\n url: '/home',\n },\n ],\n },\n {\n groupName: 'App',\n apps: [\n {\n name: 'Notifications',\n routeName: 'appNotifications',\n featureNames: [featureNames.NOTIFICATIONS],\n pinned: 'notifications',\n icon: <icons.SvgIconNotification />,\n url: '/#/notifications',\n shouldReload: true,\n },\n {\n name: 'Promo Codes',\n routeName: 'promo_codes',\n featureNames: [featureNames.PROMO_CODES],\n pinned: 'promo_codes',\n icon: <icons.SvgIconPromoCode />,\n url: '/promo_codes',\n },\n {\n name: 'Search Categories',\n routeName: 'search-categories',\n featureNames: [featureNames.SEARCH_CATEGORIES],\n pinned: 'search_categories',\n icon: <icons.SvgIconSearchCategories />,\n url: '/search-categories',\n },\n {\n name: 'Content Management',\n routeName: 'content-management',\n featureNames: [featureNames.CONTENT_MANAGEMENT],\n pinned: 'content_management',\n icon: <icons.SvgIconContentManagement />,\n url: '/content-management',\n },\n ],\n },\n {\n groupName: 'Customer Service',\n apps: [\n {\n name: 'Aircall',\n routeName: 'recordedcalls',\n featureNames: [featureNames.AIRCALL],\n pinned: 'aircall',\n icon: <icons.SvgIconPhone />,\n url: '/air-call',\n },\n {\n name: 'Customers',\n routeName: 'customers',\n featureNames: [featureNames.CUSTOMERS],\n pinned: 'customers',\n icon: <icons.SvgIconAccount />,\n url: '/customers',\n children: [\n {\n name: 'Sites',\n routeName: 'customer-sites',\n pinned: 'customer-sites',\n url: '/customers/sites',\n },\n {\n name: 'Groups',\n routeName: 'customer-groups',\n pinned: 'customer-groups',\n url: '/customers/groups',\n },\n ],\n },\n {\n name: 'Orders',\n routeName: 'orders',\n featureNames: [featureNames.ORDERS],\n pinned: 'orders',\n icon: <icons.SvgIconOrders />,\n url: '/#/orders',\n shouldReload: true,\n },\n {\n name: 'Price Lists',\n routeName: 'price_list',\n featureNames: [featureNames.PRICE_LIST],\n pinned: 'price_list',\n icon: <icons.SvgIconPriceList />,\n url: '/#/price-list',\n shouldReload: true,\n },\n {\n name: 'Special Prices',\n routeName: 'special_prices',\n featureNames: [featureNames.SPECIAL_PRICES],\n pinned: 'special_prices',\n icon: <icons.SvgIconSpecialPrice />,\n url: '/#/pricing/special-prices',\n shouldReload: true,\n },\n ],\n },\n {\n groupName: 'Buying',\n apps: [\n {\n name: 'Purchase Orders',\n routeName: 'purchaseOrders',\n featureNames: [featureNames.PURCHASE_ORDERS],\n pinned: 'purchase_orders',\n icon: <icons.SvgIconBuying />,\n url: '/react/purchase-orders',\n shouldReload: true,\n },\n {\n name: 'Products',\n routeName: 'products',\n featureNames: [featureNames.PRODUCTS],\n pinned: 'products',\n icon: <icons.SvgIconProducts />,\n url: '/#/product-base-list',\n shouldReload: true,\n },\n {\n name: 'Suppliers',\n routeName: 'suppliers',\n featureNames: [featureNames.SUPPLIERS],\n pinned: 'suppliers',\n icon: <icons.SvgIconSupplier />,\n url: '/suppliers',\n },\n {\n name: 'Supplier Prices',\n routeName: 'supplier_prices',\n featureNames: [featureNames.SUPPLIER_PRICES],\n pinned: 'supplier_prices',\n icon: <icons.SvgIconSupplierPrices />,\n url: '/#/supplier-prices',\n shouldReload: true,\n },\n {\n name: 'Product Bulk Update',\n routeName: 'bulk-update',\n featureNames: [featureNames.BULK_UPDATE],\n pinned: 'product_bulk_update',\n icon: <icons.SvgIconImport />,\n url: '/bulk_update',\n },\n ],\n },\n {\n groupName: 'Operations',\n apps: [\n {\n name: 'Retail',\n routeName: 'retail',\n featureNames: [featureNames.RETAIL],\n pinned: 'retail',\n icon: <icons.SvgIconRetail />,\n url: '/#/retail/product-availability',\n shouldReload: true,\n },\n {\n name: 'Goods In',\n routeName: 'goodsin-list',\n featureNames: [featureNames.GOODS_IN],\n pinned: 'goods_in',\n icon: <icons.SvgIconGoodsin />,\n url: '/goodsin-list',\n },\n {\n name: 'Returns',\n routeName: 'goods-in-list',\n featureNames: [featureNames.RETURNS],\n pinned: 'returns',\n icon: <icons.SvgIconGoodsin />,\n url: '/returns',\n },\n {\n name: 'Stock and Locations',\n routeName: 'locations',\n featureNames: [featureNames.STOCK, featureNames.LOCATIONS],\n pinned: 'stock',\n icon: <icons.SvgIconLocation />,\n url: '/locations',\n children: [\n {\n name: 'Movements',\n routeName: 'movements',\n pinned: 'movements',\n url: '/movements',\n featureName: featureNames.STOCK_MOVEMENTS,\n },\n ],\n },\n {\n name: 'Kanban Cards',\n routeName: 'kanban',\n featureNames: [featureNames.KANBAN],\n pinned: 'kanban_cards',\n icon: <icons.SvgIconVkc />,\n url: '/#/kanbancards',\n shouldReload: true,\n },\n {\n name: 'Picking Stations',\n routeName: 'picking',\n featureNames: [featureNames.PICKING_STATIONS],\n pinned: 'picking_stations',\n icon: <icons.SvgIconScales />,\n url: '/#/pickingstation',\n shouldReload: true,\n },\n {\n name: 'Quality Control',\n routeName: 'qualityControl',\n featureNames: [featureNames.QUALITY_CONTROL],\n pinned: 'quality_control',\n icon: <icons.SvgIconQc />,\n url: '/#/quality-control',\n shouldReload: true,\n },\n {\n name: 'Service Delivery',\n routeName: 'runs',\n featureNames: [featureNames.SERVICE_DELIVERY],\n pinned: 'service_delivery',\n icon: <icons.SvgIconRuns />,\n url: '/#/transport',\n shouldReload: true,\n },\n {\n name: 'Ops Metrics',\n routeName: 'ops-metrics',\n featureNames: [featureNames.OPS_METRICS],\n pinned: 'ops_metrics',\n icon: <icons.SvgIconOpsMetrics />,\n url: '/ops-metrics',\n },\n ],\n },\n {\n groupName: 'Tools',\n apps: [\n {\n name: 'Accounts',\n routeName: 'accounts',\n featureNames: [featureNames.ACCOUNTS],\n pinned: 'accounts',\n icon: <icons.SvgIconAccounts />,\n url: '/#/accounts',\n shouldReload: true,\n },\n {\n name: 'Reports',\n routeName: 'reports',\n featureNames: [featureNames.REPORTS],\n pinned: 'reports',\n icon: <icons.SvgIconReports />,\n url: '/reports',\n shouldReload: true,\n },\n ],\n },\n {\n groupName: 'Settings',\n apps: [\n {\n name: 'Admin',\n routeName: 'admin',\n featureNames: [featureNames.ADMIN],\n pinned: 'admin',\n icon: <icons.SvgIconSetting />,\n url: '/admin',\n shouldReload: true,\n },\n {\n name: 'User Management',\n routeName: 'user-management',\n featureNames: [featureNames.USER_MANAGEMENT],\n pinned: 'users',\n icon: <icons.SvgIconUserManagement />,\n url: '/user-management',\n },\n {\n name: 'Logout',\n routeName: 'logout',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconLogin />,\n url: '/logout',\n },\n ],\n },\n {\n groupName: 'Release Notes',\n apps: [\n {\n name: 'Release Notes',\n routeName: 'release-notes',\n featureNames: [],\n pinned: null,\n // icon: <icons.SvgIconReleaseNote />,\n icon: <icons.SvgIconLogin />,\n url: '/react/release-notes',\n shouldReload: true,\n },\n ],\n },\n];\n\nexport const useGetDrawerAppList = (enabledFeatures: string[]) => {\n return useMemo(() => {\n if (!enabledFeatures?.length) {\n return [];\n }\n\n return drawerAppList\n .map((group) => {\n const enabledApps = group.apps\n .filter(\n (app) =>\n app.routeName === 'home' ||\n app.routeName === 'release-notes' ||\n app.routeName === 'logout' ||\n featuresAreEnabled({\n enabledFeatures,\n featureNames: app.featureNames,\n requireAll: false,\n }),\n )\n .map((app) => {\n const filteredChildren = app.children?.filter((child) => {\n if (child.featureName) {\n return enabledFeatures.includes(child.featureName);\n }\n\n return true;\n });\n\n return { ...app, children: filteredChildren };\n });\n\n return { ...group, apps: enabledApps };\n })\n .filter((group) => group.apps.length > 0);\n }, [enabledFeatures]);\n};\n","export const featureNames = {\n ACCOUNTS: 'accounts',\n ADMIN: 'admin',\n AIRCALL: 'aircall',\n BULK_UPDATE: 'product_bulk_update',\n CONTENT_MANAGEMENT: 'content_management',\n CUSTOMERS: 'customers',\n GOODS_IN: 'goods_in',\n KANBAN: 'kanban_cards',\n LOCATIONS: 'locations',\n NOTIFICATIONS: 'notifications',\n OPS_METRICS: 'ops_metrics',\n ORDERS: 'orders',\n PICKING_STATIONS: 'picking_stations',\n PRICE_LIST: 'price_list',\n PRODUCTS: 'products',\n PROMO_CODES: 'promo_codes',\n PURCHASE_ORDERS: 'purchase_orders',\n QUALITY_CONTROL: 'quality_control',\n REPORTS: 'reports',\n RETAIL: 'retail',\n RETURNS: 'returns',\n SEARCH_CATEGORIES: 'search_categories',\n SERVICE_DELIVERY: 'service_delivery',\n SPECIAL_PRICES: 'special_prices',\n STOCK: 'stock',\n STOCK_MOVEMENTS: 'stock_movements',\n SUPPLIERS: 'suppliers',\n SUPPLIER_PRICES: 'supplier_prices',\n USER_MANAGEMENT: 'users',\n};\n\nexport function featuresAreEnabled({\n enabledFeatures,\n featureNames,\n requireAll = true,\n}: {\n enabledFeatures: string[];\n featureNames: string[];\n requireAll?: boolean;\n}) {\n const storedPermissions = localStorage.getItem('permissions') || '';\n let enabled = false;\n\n if (requireAll) {\n enabled = featureNames.every(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n } else {\n enabled = featureNames.some(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n }\n\n return enabled;\n}\n","export const uiFeatureNames = {\n PURCHASE_ORDERS_REGIONS: 'purchases_regions',\n SUPPLIER_PORTAL_TAB: 'suppliers_portal_users_tab',\n SUPPLIER_PRICING_SECTION: 'suppliers_pricing_section',\n CUSTOMER_ESTIMATED_BASKET_SETTING: 'customers_estimated_basket_setting',\n ORDER_ISSUE_REPORTING: 'customers_order_issue_report_setting',\n CUSTOMER_PAYMENTS_SECTION: 'customers_payments_section',\n CUSTOMER_PREFERENCES_TAB: 'customers_preferences_tab',\n CUSTOMER_SUBSTITUTIONS_TAB: 'customers_substitutions_tab',\n PRODUCT_PREFERENCES_SECTION: 'product_preferences_section',\n};\n\nexport const uiFeaturesAreEnabled = (\n enabledUIFeatures: string[] | undefined,\n feature: string,\n) => enabledUIFeatures?.includes(feature);\n"],"mappings":"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","names":["featureNames","jsx","drawerAppList"]}
1
+ {"version":3,"sources":["../src/components/LeftDrawer/LeftDrawer.tsx","../src/resources/styles/colors/darkPalette.ts","../src/resources/styles/colors/lightPalette.ts","../src/resources/styles/colors.ts","../src/config/drawerAppList.tsx","../src/config/features.ts","../src/components/PinnedItems/PinnedItems.tsx","../src/config/uiFeatures.ts"],"sourcesContent":["import { Fragment, useState } from 'react';\n\nimport {\n PushPinOutlined,\n FiberManualRecord,\n ExpandLess,\n} from '@mui/icons-material';\nimport {\n AppBar,\n Collapse,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n ListSubheader,\n SwipeableDrawer,\n Toolbar,\n ListItemButton,\n Box,\n} from '@mui/material';\nimport Icon from '@mui/material/Icon';\nimport { RoundButton, UserBust } from '@natoora-libs/core/components';\nimport { makeStyles } from 'tss-react/mui';\n\nimport { colors } from '@/resources/styles/colors';\n\nimport { useGetDrawerAppList } from '../../config/drawerAppList';\n\nconst useStyles = makeStyles()((theme) => ({\n subheader: {\n textTransform: 'uppercase',\n fontSize: theme.spacing(1.5),\n },\n topBar: {\n backgroundColor: theme.palette.secondary.dark,\n width: theme.spacing(40),\n padding: theme.spacing(2),\n display: 'flex',\n alignItems: 'end',\n justifyContent: 'space-between',\n },\n drawer: {\n alignContent: 'space-between',\n flexDirection: 'column',\n minWidth: theme.spacing(80),\n },\n iconMenu: {\n height: '40px',\n width: '40px',\n opacity: 1,\n fill: colors.neutral700,\n },\n pinIcon: {\n height: '16px',\n width: '16px',\n fill: colors.neutral700,\n opacity: 0.5,\n '&:hover': {\n opacity: 1,\n cursor: 'pointer',\n },\n },\n expandIcon: {\n height: '22px',\n width: '22px',\n fill: colors.neutral700,\n },\n nested: {\n paddingLeft: theme.spacing(6),\n border: colors.neutral200,\n },\n appName: {\n '& .MuiTypography-body2': {\n fontWeight: 700,\n },\n },\n}));\n\ninterface LeftDrawerProps {\n open: boolean;\n enabledFeatures: string[];\n pinnedApps: Record<string, boolean>;\n user: {\n profile_picture: string;\n first_name: string;\n last_name: string;\n username: string;\n };\n reloadOnNavigate?: boolean;\n handleOpen: () => void;\n handleClose: () => void;\n onLogout: () => void;\n onTogglePinnedApp: (name: string, new_value: boolean) => void;\n}\n\nexport const LeftDrawer = ({\n enabledFeatures,\n pinnedApps,\n open,\n user,\n reloadOnNavigate,\n handleClose,\n handleOpen,\n onLogout,\n onTogglePinnedApp,\n}: LeftDrawerProps) => {\n const [openCollapse, setOpenCollapse] = useState({});\n const { userSettingsUrl, drawerAppList, navigateTo } = useGetDrawerAppList({\n enabledFeatures,\n reloadOnNavigate,\n });\n\n const { classes } = useStyles();\n\n return (\n <SwipeableDrawer\n className={classes.drawer}\n id=\"primary-menu\"\n onClose={handleClose}\n onOpen={handleOpen}\n open={open}\n >\n <AppBar position=\"static\">\n <Toolbar className={classes.topBar}>\n <UserBust\n user={user}\n avatarProps={{ height: 50, width: 50 }}\n typographyProps={{\n name: { variant: 'subtitle1', component: 'div' },\n username: { variant: 'caption', component: 'div' },\n }}\n />\n <RoundButton\n icon=\"edit\"\n isContrast\n onClick={() => navigateTo(userSettingsUrl)}\n size=\"small\"\n tooltip=\"User Settings\"\n />\n </Toolbar>\n </AppBar>\n\n <List>\n {drawerAppList.map((group) => (\n <Fragment key={group.groupName}>\n <ListSubheader disableSticky className={classes.subheader}>\n {group.groupName}\n </ListSubheader>\n\n {group.apps.map((app) => (\n <Fragment key={`${group.groupName}_${app.name}`}>\n <ListItem\n key={app.name}\n title={app.url}\n onClick={() => {\n if (app.routeName === 'logout') {\n return onLogout();\n }\n\n return navigateTo(app.url);\n }}\n >\n <ListItemIcon>\n <Icon className={classes.iconMenu}>{app.icon}</Icon>\n </ListItemIcon>\n <ListItemText\n className={classes.appName}\n primary={app.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n\n <Box\n display=\"flex\"\n gap={2}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n {!!app.children?.length && (\n <ExpandLess\n className={classes.expandIcon}\n style={{\n rotate: openCollapse[app.routeName]\n ? '0deg'\n : '180deg',\n }}\n data-testid=\"svg-close-collapse\"\n onClick={(event) => {\n event.stopPropagation();\n setOpenCollapse({\n ...openCollapse,\n [app.routeName]: !openCollapse[app.routeName],\n });\n }}\n />\n )}\n\n {app.pinned && (\n <PushPinOutlined\n className={classes.pinIcon}\n style={{ opacity: pinnedApps[app.pinned] ? 1 : 0.3 }}\n onClick={(event) => {\n if (!app.pinned) {\n return;\n }\n\n event.stopPropagation();\n onTogglePinnedApp(\n app.pinned,\n !pinnedApps[app.pinned],\n );\n }}\n />\n )}\n </Box>\n </ListItem>\n\n {!!app.children?.length && (\n <Collapse in={openCollapse[app.routeName]}>\n <List>\n {app.children.map((child) => (\n <ListItemButton\n key={child.name}\n className={classes.nested}\n onClick={() => navigateTo(child.url)}\n title={child.url}\n >\n <ListItemIcon>\n <FiberManualRecord style={{ height: 12 }} />\n </ListItemIcon>\n <ListItemText\n primary={child.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n </ListItemButton>\n ))}\n </List>\n </Collapse>\n )}\n </Fragment>\n ))}\n </Fragment>\n ))}\n </List>\n </SwipeableDrawer>\n );\n};\n","import { ThemePalette } from './interface';\n\n/**\n * Define the dark palette using the same ThemePalette interface.\n * Any missing or extra keys compared to lightPalette will trigger a TypeScript error.\n */\nconst darkPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#1C1B1A',\n neutral100: '#1F1F1F',\n neutral150: '#262626',\n neutral200: '#2E2E2E',\n neutral250: '#383838',\n neutral300: '#424242',\n neutral400: '#4C4C4C',\n neutral500: '#666666',\n neutral600: '#808080',\n neutral700: '#A3A3A3',\n neutral750: '#B3B3B3',\n neutral800: '#CCCCCC',\n neutral900: '#F5F5F5',\n\n // Input and contrast\n contrast: '#FFFFFF',\n constrastOpacity50: 'rgba(255,255,255,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#B0B0B0',\n default: '#444444',\n muiPrimary: '#E9FB62',\n muiPrimaryBlack: '#FFFFFF',\n lightMuiPrimaryColorBackground: '#e9fb6214',\n lightBlueBackground: '#e9fb6214',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1890d5',\n muiSecondary: '#DE5B99',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#66BB6A',\n muiSuccessAlternate: '#81C784',\n\n // Transparency variants\n blackOpacity10: 'inherit',\n blackOpacity20: 'inherit',\n blackOpacity30: 'inherit',\n blackOpacity50: 'inherit',\n blackOpacity80: 'inherit',\n primaryOpacity10: 'rgba(233, 251, 98, 0.10)',\n primaryOpacity20: 'rgba(233, 251, 98, 0.20)',\n primaryOpacity30: 'rgba(233, 251, 98, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, .3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(255, 255, 255, 0.08)',\n // Active Button\n buttonActiveText: '#E9FB62',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#EF5350',\n};\n\nexport default darkPalette;\n","import { ThemePalette } from './interface';\n\n/**\n * Define the light palette using the ThemePalette interface.\n */\nconst lightPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#F0EBE6',\n neutral100: '#FAFAFA',\n neutral150: '#F4F4F4',\n neutral200: '#F1F1F1',\n neutral250: '#ECECEC',\n neutral300: '#E0E0E0',\n neutral400: '#C8C8C8',\n neutral500: '#BDBDBD',\n neutral600: '#999999',\n neutral700: '#878787',\n neutral750: '#6c6c6c',\n neutral800: '#555555',\n neutral900: '#4D4D4D',\n\n // Input and contrast\n contrast: '#000000',\n constrastOpacity50: 'rgba(0,0,0,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#606060',\n default: '#E0E0E0',\n muiPrimary: '#0781CE',\n muiPrimaryBlack: '#000000',\n lightMuiPrimaryColorBackground: '#eff4fb',\n lightBlueBackground: '#eff4fb',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1565c0',\n muiSecondary: '#A42966',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#4caf50',\n muiSuccessAlternate: '#357a38',\n\n // Transparency variants\n blackOpacity10: 'rgba(0,0,0,0.1)',\n blackOpacity20: 'rgba(0,0,0,0.2)',\n blackOpacity30: 'rgba(0,0,0,0.3)',\n blackOpacity50: 'rgba(0,0,0,0.5)',\n blackOpacity80: 'rgba(0,0,0,0.8)',\n primaryOpacity10: 'rgba(7, 129, 206, 0.10)',\n primaryOpacity20: 'rgba(7, 129, 206, 0.20)',\n primaryOpacity30: 'rgba(7, 129, 206, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, 0.3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(0, 0, 0, 0.04)',\n // Active Button\n buttonActiveText: '#0781CE',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#D32F2F',\n};\n\nexport default lightPalette;\n","import darkPalette from './colors/darkPalette';\nimport lightPalette from './colors/lightPalette';\n\nconst stylesheet = localStorage.getItem('@stylesheet');\nexport const isDarkModeEnabled = stylesheet === 'styles/style-dark.css';\nconst palette = isDarkModeEnabled ? darkPalette : lightPalette;\n\ninterface Colors {\n // General colors\n white: string;\n black: string;\n\n // Neutral\n neutral50: string;\n neutral100: string;\n neutral150: string;\n neutral200: string;\n neutral250: string;\n neutral300: string;\n neutral400: string;\n neutral500: string;\n neutral600: string;\n neutral700: string;\n neutral750: string;\n neutral800: string;\n neutral900: string;\n\n // Input and contrast\n contrast: string;\n constrastOpacity50: string;\n\n // Icon and Material UI colors\n iconSearch: string;\n default: string;\n muiPrimary: string;\n muiPrimaryBlack: string;\n lightMuiPrimaryColorBackground: string;\n lightBlueBackground: string;\n muiPrimaryAlternate: string;\n muiPrimaryHover: string;\n muiSecondary: string;\n muiSecondaryAlternate: string;\n muiSuccess: string;\n muiSuccessAlternate: string;\n\n // Transparency\n blackOpacity10: string;\n blackOpacity20: string;\n blackOpacity30: string;\n blackOpacity50: string;\n blackOpacity80: string;\n primaryOpacity10: string;\n primaryOpacity20: string;\n primaryOpacity30: string;\n secondaryAlternateOpacity30: string;\n blueOpacity08: string;\n whiteOpacity10: string;\n whiteOpacity20: string;\n whiteOpacity40: string;\n\n // Table rows and top bar\n topBar: string;\n // Error Button\n error: string;\n\n roundButton: {\n default: {\n border: string;\n color: string;\n disabled: {\n color: string;\n };\n hover: {\n background: string;\n };\n };\n filled: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n active: {\n color: string;\n hover: {\n background: string;\n };\n };\n contrast: {\n border: string;\n color: string;\n hover: {\n background: string;\n };\n };\n tableButton: {\n color: string;\n };\n focused: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n error: string;\n };\n\n movementCard: {\n default: {\n background: string;\n };\n disabled: {\n background: string;\n };\n pill: {\n color: string;\n background: string;\n };\n };\n\n rowProductCard: {\n locationSubtitle: string;\n };\n}\n\nexport const colors: Colors = {\n white: palette.white,\n black: palette.black,\n\n neutral50: palette.neutral50,\n neutral100: palette.neutral100,\n neutral150: palette.neutral150,\n neutral200: palette.neutral200,\n neutral250: palette.neutral250,\n neutral300: palette.neutral300,\n neutral400: palette.neutral400,\n neutral500: palette.neutral500,\n neutral600: palette.neutral600,\n neutral700: palette.neutral700,\n neutral750: palette.neutral750,\n neutral800: palette.neutral800,\n neutral900: palette.neutral900,\n\n // Input and contrast\n contrast: palette.contrast,\n constrastOpacity50: palette.constrastOpacity50,\n\n iconSearch: palette.iconSearch,\n default: palette.default,\n muiPrimary: palette.muiPrimary,\n muiPrimaryBlack: palette.muiPrimaryBlack,\n lightMuiPrimaryColorBackground: palette.lightMuiPrimaryColorBackground,\n lightBlueBackground: palette.lightBlueBackground,\n muiPrimaryAlternate: palette.muiPrimaryAlternate,\n muiPrimaryHover: palette.muiPrimaryHover,\n muiSecondary: palette.muiSecondary,\n muiSecondaryAlternate: palette.muiSecondaryAlternate,\n muiSuccess: palette.muiSuccess,\n muiSuccessAlternate: palette.muiSuccessAlternate,\n\n // Transparency\n blackOpacity10: palette.blackOpacity10,\n blackOpacity20: palette.blackOpacity20,\n blackOpacity30: palette.blackOpacity30,\n blackOpacity50: palette.blackOpacity50,\n blackOpacity80: palette.blackOpacity80,\n primaryOpacity10: palette.primaryOpacity10,\n primaryOpacity20: palette.primaryOpacity20,\n primaryOpacity30: palette.primaryOpacity30,\n secondaryAlternateOpacity30: palette.secondaryAlternateOpacity30,\n blueOpacity08: palette.blueOpacity08,\n whiteOpacity10: palette.whiteOpacity10,\n whiteOpacity20: palette.whiteOpacity20,\n whiteOpacity40: palette.whiteOpacity40,\n\n topBar: palette.topBar,\n error: palette.error,\n\n roundButton: {\n default: {\n border: palette.neutral600,\n color: palette.contrast,\n disabled: {\n color: palette.blackOpacity20,\n },\n hover: {\n background: palette.buttonHoverBackground,\n },\n },\n filled: {\n background: palette.neutral100,\n color: palette.blackOpacity80,\n hover: {\n background: palette.neutral250,\n },\n },\n active: {\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity20,\n },\n },\n contrast: {\n border: palette.buttonContrastBorder,\n color: palette.buttonContrastText,\n hover: {\n background: palette.whiteOpacity10,\n },\n },\n tableButton: {\n color: palette.neutral800,\n },\n focused: {\n background: palette.primaryOpacity20,\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity30,\n },\n },\n error: palette.error,\n },\n\n movementCard: {\n default: {\n background: palette.neutral100,\n },\n disabled: {\n background: palette.neutral250,\n },\n pill: {\n color: palette.neutral200,\n background: palette.neutral600,\n },\n },\n\n rowProductCard: {\n locationSubtitle: palette.neutral800,\n },\n};\n","import { useCallback, useMemo } from 'react';\nimport { useNavigate } from 'react-router';\n\nimport { icons } from '@natoora-libs/core/components';\nimport { featureNames, featuresAreEnabled } from '@/config/features';\n\ninterface DrawerAppChild {\n name: string;\n routeName: string;\n pinned: string;\n url: string;\n featureName?: string;\n shouldReload?: boolean;\n}\n\ninterface DrawerApp {\n name: string;\n routeName: string;\n featureNames: string[];\n pinned: string | null;\n icon: React.ReactElement;\n url: string;\n shouldReload?: boolean;\n children?: DrawerAppChild[];\n}\n\ninterface DrawerAppGroup {\n groupName: string;\n apps: DrawerApp[];\n}\n\nconst drawerAppGroup: DrawerAppGroup[] = [\n {\n groupName: 'Home',\n apps: [\n {\n name: 'Home',\n routeName: 'home',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconHome />,\n url: '/home',\n },\n ],\n },\n {\n groupName: 'App',\n apps: [\n {\n name: 'Notifications',\n routeName: 'appNotifications',\n featureNames: [featureNames.NOTIFICATIONS],\n pinned: 'notifications',\n icon: <icons.SvgIconNotification />,\n url: '/#/notifications',\n shouldReload: true,\n },\n {\n name: 'Promo Codes',\n routeName: 'promo_codes',\n featureNames: [featureNames.PROMO_CODES],\n pinned: 'promo_codes',\n icon: <icons.SvgIconPromoCode />,\n url: '/promo_codes',\n },\n {\n name: 'Search Categories',\n routeName: 'search-categories',\n featureNames: [featureNames.SEARCH_CATEGORIES],\n pinned: 'search_categories',\n icon: <icons.SvgIconSearchCategories />,\n url: '/search-categories',\n },\n {\n name: 'Content Management',\n routeName: 'content-management',\n featureNames: [featureNames.CONTENT_MANAGEMENT],\n pinned: 'content_management',\n icon: <icons.SvgIconContentManagement />,\n url: '/content-management',\n },\n ],\n },\n {\n groupName: 'Customer Service',\n apps: [\n {\n name: 'Aircall',\n routeName: 'recordedcalls',\n featureNames: [featureNames.AIRCALL],\n pinned: 'aircall',\n icon: <icons.SvgIconPhone />,\n url: '/air-call',\n },\n {\n name: 'Customers',\n routeName: 'customers',\n featureNames: [featureNames.CUSTOMERS],\n pinned: 'customers',\n icon: <icons.SvgIconAccount />,\n url: '/customers',\n children: [\n {\n name: 'Sites',\n routeName: 'customer-sites',\n pinned: 'customer-sites',\n url: '/customers/sites',\n },\n {\n name: 'Groups',\n routeName: 'customer-groups',\n pinned: 'customer-groups',\n url: '/customers/groups',\n },\n ],\n },\n {\n name: 'Orders',\n routeName: 'orders',\n featureNames: [featureNames.ORDERS],\n pinned: 'orders',\n icon: <icons.SvgIconOrders />,\n url: '/#/orders',\n shouldReload: true,\n },\n {\n name: 'Price Lists',\n routeName: 'price_list',\n featureNames: [featureNames.PRICE_LIST],\n pinned: 'price_list',\n icon: <icons.SvgIconPriceList />,\n url: '/#/price-list',\n shouldReload: true,\n },\n {\n name: 'Special Prices',\n routeName: 'special_prices',\n featureNames: [featureNames.SPECIAL_PRICES],\n pinned: 'special_prices',\n icon: <icons.SvgIconSpecialPrice />,\n url: '/#/pricing/special-prices',\n shouldReload: true,\n },\n ],\n },\n {\n groupName: 'Buying',\n apps: [\n {\n name: 'Purchase Orders',\n routeName: 'purchaseOrders',\n featureNames: [featureNames.PURCHASE_ORDERS],\n pinned: 'purchase_orders',\n icon: <icons.SvgIconBuying />,\n url: '/react/purchase-orders',\n shouldReload: true,\n },\n {\n name: 'Products',\n routeName: 'products',\n featureNames: [featureNames.PRODUCTS],\n pinned: 'products',\n icon: <icons.SvgIconProducts />,\n url: '/#/product-base-list',\n shouldReload: true,\n },\n {\n name: 'Suppliers',\n routeName: 'suppliers',\n featureNames: [featureNames.SUPPLIERS],\n pinned: 'suppliers',\n icon: <icons.SvgIconSupplier />,\n url: '/suppliers',\n },\n {\n name: 'Supplier Prices',\n routeName: 'supplier_prices',\n featureNames: [featureNames.SUPPLIER_PRICES],\n pinned: 'supplier_prices',\n icon: <icons.SvgIconSupplierPrices />,\n url: '/#/supplier-prices',\n shouldReload: true,\n },\n {\n name: 'Product Bulk Update',\n routeName: 'bulk-update',\n featureNames: [featureNames.BULK_UPDATE],\n pinned: 'product_bulk_update',\n icon: <icons.SvgIconImport />,\n url: '/bulk_update',\n },\n ],\n },\n {\n groupName: 'Operations',\n apps: [\n {\n name: 'Retail',\n routeName: 'retail',\n featureNames: [featureNames.RETAIL],\n pinned: 'retail',\n icon: <icons.SvgIconRetail />,\n url: '/#/retail/product-availability',\n shouldReload: true,\n },\n {\n name: 'Goods In',\n routeName: 'goodsin-list',\n featureNames: [featureNames.GOODS_IN],\n pinned: 'goods_in',\n icon: <icons.SvgIconGoodsin />,\n url: '/goodsin-list',\n },\n {\n name: 'Returns',\n routeName: 'goods-in-list',\n featureNames: [featureNames.RETURNS],\n pinned: 'returns',\n icon: <icons.SvgIconGoodsin />,\n url: '/returns',\n },\n {\n name: 'Stock and Locations',\n routeName: 'locations',\n featureNames: [featureNames.STOCK, featureNames.LOCATIONS],\n pinned: 'stock',\n icon: <icons.SvgIconLocation />,\n url: '/locations',\n children: [\n {\n name: 'Movements',\n routeName: 'movements',\n pinned: 'movements',\n url: '/movements',\n featureName: featureNames.STOCK_MOVEMENTS,\n },\n ],\n },\n {\n name: 'Kanban Cards',\n routeName: 'kanban',\n featureNames: [featureNames.KANBAN],\n pinned: 'kanban_cards',\n icon: <icons.SvgIconVkc />,\n url: '/#/kanbancards',\n shouldReload: true,\n },\n {\n name: 'Picking Stations',\n routeName: 'picking',\n featureNames: [featureNames.PICKING_STATIONS],\n pinned: 'picking_stations',\n icon: <icons.SvgIconScales />,\n url: '/#/pickingstation',\n shouldReload: true,\n },\n {\n name: 'Quality Control',\n routeName: 'qualityControl',\n featureNames: [featureNames.QUALITY_CONTROL],\n pinned: 'quality_control',\n icon: <icons.SvgIconQc />,\n url: '/#/quality-control',\n shouldReload: true,\n },\n {\n name: 'Service Delivery',\n routeName: 'runs',\n featureNames: [featureNames.SERVICE_DELIVERY],\n pinned: 'service_delivery',\n icon: <icons.SvgIconRuns />,\n url: '/#/transport',\n shouldReload: true,\n },\n {\n name: 'Ops Metrics',\n routeName: 'ops-metrics',\n featureNames: [featureNames.OPS_METRICS],\n pinned: 'ops_metrics',\n icon: <icons.SvgIconOpsMetrics />,\n url: '/ops-metrics',\n },\n ],\n },\n {\n groupName: 'Tools',\n apps: [\n {\n name: 'Accounts',\n routeName: 'accounts',\n featureNames: [featureNames.ACCOUNTS],\n pinned: 'accounts',\n icon: <icons.SvgIconAccounts />,\n url: '/#/accounts',\n shouldReload: true,\n },\n {\n name: 'Reports',\n routeName: 'reports',\n featureNames: [featureNames.REPORTS],\n pinned: 'reports',\n icon: <icons.SvgIconReports />,\n url: '/reports',\n shouldReload: true,\n },\n ],\n },\n {\n groupName: 'Settings',\n apps: [\n {\n name: 'Admin',\n routeName: 'admin',\n featureNames: [featureNames.ADMIN],\n pinned: 'admin',\n icon: <icons.SvgIconSetting />,\n url: '/admin',\n shouldReload: true,\n },\n {\n name: 'User Management',\n routeName: 'user-management',\n featureNames: [featureNames.USER_MANAGEMENT],\n pinned: 'users',\n icon: <icons.SvgIconUserManagement />,\n url: '/user-management',\n },\n {\n name: 'Logout',\n routeName: 'logout',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconLogin />,\n url: '/logout',\n },\n ],\n },\n {\n groupName: 'Release Notes',\n apps: [\n {\n name: 'Release Notes',\n routeName: 'release-notes',\n featureNames: [],\n pinned: null,\n // icon: <icons.SvgIconReleaseNote />,\n icon: <icons.SvgIconLogin />,\n url: '/react/release-notes',\n shouldReload: true,\n },\n ],\n },\n];\n\nexport const useGetDrawerAppList = ({\n enabledFeatures,\n reloadOnNavigate,\n}: {\n enabledFeatures: string[];\n reloadOnNavigate?: boolean;\n}) => {\n const navigate = useNavigate();\n\n const navigateTo = useCallback(\n (url: string) => {\n const isAngularRoute = url.startsWith('/#');\n if (isAngularRoute) {\n window.location.assign(url);\n\n return;\n }\n\n const isMicroFrontendRoute =\n url === '/react/release-notes' ||\n url === '/react/purchase-orders' ||\n url === '/admin' ||\n url === '/reports';\n if (isMicroFrontendRoute) {\n window.location.assign(reloadOnNavigate ? '/react' + url : url);\n\n return;\n }\n\n return navigate(url);\n },\n [reloadOnNavigate],\n );\n\n const drawerAppList = useMemo(() => {\n if (!enabledFeatures?.length) {\n return [];\n }\n\n return drawerAppGroup\n .map((group) => {\n const enabledApps = group.apps\n .filter(\n (app) =>\n app.routeName === 'home' ||\n app.routeName === 'release-notes' ||\n app.routeName === 'logout' ||\n featuresAreEnabled({\n enabledFeatures,\n featureNames: app.featureNames,\n requireAll: false,\n }),\n )\n .map((app) => {\n const filteredChildren = app.children?.filter((child) => {\n if (child.featureName) {\n return enabledFeatures.includes(child.featureName);\n }\n\n return true;\n });\n\n return { ...app, children: filteredChildren };\n });\n\n return { ...group, apps: enabledApps };\n })\n .filter((group) => group.apps.length > 0);\n }, [enabledFeatures]);\n\n return {\n userSettingsUrl: '/#/user-settings',\n drawerAppList,\n navigateTo,\n };\n};\n","export const featureNames = {\n ACCOUNTS: 'accounts',\n ADMIN: 'admin',\n AIRCALL: 'aircall',\n BULK_UPDATE: 'product_bulk_update',\n CONTENT_MANAGEMENT: 'content_management',\n CUSTOMERS: 'customers',\n GOODS_IN: 'goods_in',\n KANBAN: 'kanban_cards',\n LOCATIONS: 'locations',\n NOTIFICATIONS: 'notifications',\n OPS_METRICS: 'ops_metrics',\n ORDERS: 'orders',\n PICKING_STATIONS: 'picking_stations',\n PRICE_LIST: 'price_list',\n PRODUCTS: 'products',\n PROMO_CODES: 'promo_codes',\n PURCHASE_ORDERS: 'purchase_orders',\n QUALITY_CONTROL: 'quality_control',\n REPORTS: 'reports',\n RETAIL: 'retail',\n RETURNS: 'returns',\n SEARCH_CATEGORIES: 'search_categories',\n SERVICE_DELIVERY: 'service_delivery',\n SPECIAL_PRICES: 'special_prices',\n STOCK: 'stock',\n STOCK_MOVEMENTS: 'stock_movements',\n SUPPLIERS: 'suppliers',\n SUPPLIER_PRICES: 'supplier_prices',\n USER_MANAGEMENT: 'users',\n};\n\nexport function featuresAreEnabled({\n enabledFeatures,\n featureNames,\n requireAll = true,\n}: {\n enabledFeatures: string[];\n featureNames: string[];\n requireAll?: boolean;\n}) {\n const storedPermissions = localStorage.getItem('permissions') || '';\n let enabled = false;\n\n if (requireAll) {\n enabled = featureNames.every(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n } else {\n enabled = featureNames.some(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n }\n\n return enabled;\n}\n","import { Box, Icon, IconButton, Tooltip } from '@mui/material';\nimport { useGetDrawerAppList } from '@/config/drawerAppList';\n\ntype PinnedItemsProps = {\n enabledFeatures: string[];\n pinnedApps: Record<string, boolean>;\n reloadOnNavigate?: boolean;\n};\n\nexport const PinnedItems = ({\n enabledFeatures,\n pinnedApps,\n reloadOnNavigate,\n}: PinnedItemsProps) => {\n const { drawerAppList, navigateTo } = useGetDrawerAppList({\n enabledFeatures,\n reloadOnNavigate,\n });\n const items = drawerAppList\n .flatMap((app) => app.apps)\n .filter((app) => app.pinned && pinnedApps[app.pinned]);\n\n return (\n <Box display=\"flex\" flexDirection=\"row\" gap={1.5}>\n {items.map((item) => (\n <Tooltip title={item.name} key={item.name}>\n <IconButton\n style={{ backgroundColor: 'gray', padding: 4 }}\n onClick={() => navigateTo(item.url)}\n >\n <Icon\n key={item.name}\n style={{ width: 32, height: 32, fill: 'white' }}\n >\n {item.icon}\n </Icon>\n </IconButton>\n </Tooltip>\n ))}\n </Box>\n );\n};\n","export const uiFeatureNames = {\n PURCHASE_ORDERS_REGIONS: 'purchases_regions',\n SUPPLIER_PORTAL_TAB: 'suppliers_portal_users_tab',\n SUPPLIER_PRICING_SECTION: 'suppliers_pricing_section',\n CUSTOMER_ESTIMATED_BASKET_SETTING: 'customers_estimated_basket_setting',\n ORDER_ISSUE_REPORTING: 'customers_order_issue_report_setting',\n CUSTOMER_PAYMENTS_SECTION: 'customers_payments_section',\n CUSTOMER_PREFERENCES_TAB: 'customers_preferences_tab',\n CUSTOMER_SUBSTITUTIONS_TAB: 'customers_substitutions_tab',\n PRODUCT_PREFERENCES_SECTION: 'product_preferences_section',\n};\n\nexport const uiFeaturesAreEnabled = (\n enabledUIFeatures: string[] | undefined,\n feature: string,\n) => enabledUIFeatures?.includes(feature);\n"],"mappings":"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","names":["featureNames","jsx","Box","Icon","jsx","Box","Icon"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@natoora-libs/drawer-menu",
3
- "version": "0.0.10",
3
+ "version": "0.0.12",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"