@orbe-agro/client-core 5.6.129 → 5.6.131

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/dist/@ecme/assets/styles/app.css +3 -15
  2. package/dist/@ecme/assets/styles/tailwind/index.css +3 -15
  3. package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.js +17 -13
  4. package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.js.map +1 -1
  5. package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.js +22 -197
  6. package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.js.map +1 -1
  7. package/dist/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.js +3 -17
  8. package/dist/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.js.map +1 -1
  9. package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.d.ts.map +1 -1
  10. package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.d.ts +0 -6
  11. package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.d.ts.map +1 -1
  12. package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.d.ts.map +1 -1
  13. package/dist/@types/base/configs/navigation.config/submenu/ticket/cadastros.submenu.d.ts.map +1 -1
  14. package/dist/@types/base/configs/navigation.config/submenu/ticket/relatorios.submenu.d.ts.map +1 -1
  15. package/dist/base/assets/styles/init.css +3 -15
  16. package/dist/base/configs/navigation.config/submenu/ticket/cadastros.submenu.js +19 -7
  17. package/dist/base/configs/navigation.config/submenu/ticket/cadastros.submenu.js.map +1 -1
  18. package/dist/base/configs/navigation.config/submenu/ticket/relatorios.submenu.js +13 -1
  19. package/dist/base/configs/navigation.config/submenu/ticket/relatorios.submenu.js.map +1 -1
  20. package/lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.tsx +27 -199
  21. package/lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.tsx +23 -16
  22. package/lib/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.tsx +3 -25
  23. package/lib/base/configs/navigation.config/submenu/ticket/cadastros.submenu.ts +19 -7
  24. package/lib/base/configs/navigation.config/submenu/ticket/relatorios.submenu.ts +13 -0
  25. package/package.json +1 -1
@@ -4493,9 +4493,6 @@ hr:is(.dark *){
4493
4493
  .-left-2{
4494
4494
  left: -0.5rem;
4495
4495
  }
4496
- .-left-3{
4497
- left: -0.75rem;
4498
- }
4499
4496
  .-right-2{
4500
4497
  right: -0.5rem;
4501
4498
  }
@@ -4556,9 +4553,6 @@ hr:is(.dark *){
4556
4553
  .z-10{
4557
4554
  z-index: 10;
4558
4555
  }
4559
- .z-20{
4560
- z-index: 20;
4561
- }
4562
4556
  .z-30{
4563
4557
  z-index: 30;
4564
4558
  }
@@ -5275,9 +5269,6 @@ hr:is(.dark *){
5275
5269
  .min-w-\[330px\]{
5276
5270
  min-width: 330px;
5277
5271
  }
5278
- .min-w-\[calc\(100\%\+1\.5rem\)\]{
5279
- min-width: calc(100% + 1.5rem);
5280
- }
5281
5272
  .min-w-full{
5282
5273
  min-width: 100%;
5283
5274
  }
@@ -5624,6 +5615,9 @@ hr:is(.dark *){
5624
5615
  .text-clip{
5625
5616
  text-overflow: clip;
5626
5617
  }
5618
+ .whitespace-normal{
5619
+ white-space: normal;
5620
+ }
5627
5621
  .whitespace-nowrap{
5628
5622
  white-space: nowrap;
5629
5623
  }
@@ -7096,9 +7090,6 @@ hr:is(.dark *){
7096
7090
  .active\:bg-gray-100:active{
7097
7091
  background-color: var(--gray-100);
7098
7092
  }
7099
- .group\/item:hover .group-hover\/item\:block{
7100
- display: block;
7101
- }
7102
7093
  .group:hover .group-hover\:block{
7103
7094
  display: block;
7104
7095
  }
@@ -7143,9 +7134,6 @@ hr:is(.dark *){
7143
7134
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
7144
7135
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
7145
7136
  }
7146
- .group\/item:focus-visible .group-focus-visible\/item\:block{
7147
- display: block;
7148
- }
7149
7137
  .group.active .group-\[\.active\]\:bg-white{
7150
7138
  --tw-bg-opacity: 1;
7151
7139
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
@@ -1165,9 +1165,6 @@ video {
1165
1165
  .-left-2 {
1166
1166
  left: -0.5rem;
1167
1167
  }
1168
- .-left-3 {
1169
- left: -0.75rem;
1170
- }
1171
1168
  .-right-2 {
1172
1169
  right: -0.5rem;
1173
1170
  }
@@ -1228,9 +1225,6 @@ video {
1228
1225
  .z-10 {
1229
1226
  z-index: 10;
1230
1227
  }
1231
- .z-20 {
1232
- z-index: 20;
1233
- }
1234
1228
  .z-30 {
1235
1229
  z-index: 30;
1236
1230
  }
@@ -1947,9 +1941,6 @@ video {
1947
1941
  .min-w-\[330px\] {
1948
1942
  min-width: 330px;
1949
1943
  }
1950
- .min-w-\[calc\(100\%\+1\.5rem\)\] {
1951
- min-width: calc(100% + 1.5rem);
1952
- }
1953
1944
  .min-w-full {
1954
1945
  min-width: 100%;
1955
1946
  }
@@ -2298,6 +2289,9 @@ video {
2298
2289
  .text-clip {
2299
2290
  text-overflow: clip;
2300
2291
  }
2292
+ .whitespace-normal {
2293
+ white-space: normal;
2294
+ }
2301
2295
  .whitespace-nowrap {
2302
2296
  white-space: nowrap;
2303
2297
  }
@@ -3770,9 +3764,6 @@ video {
3770
3764
  .active\:bg-gray-100:active {
3771
3765
  background-color: var(--gray-100);
3772
3766
  }
3773
- .group\/item:hover .group-hover\/item\:block {
3774
- display: block;
3775
- }
3776
3767
  .group:hover .group-hover\:block {
3777
3768
  display: block;
3778
3769
  }
@@ -3817,9 +3808,6 @@ video {
3817
3808
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
3818
3809
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
3819
3810
  }
3820
- .group\/item:focus-visible .group-focus-visible\/item\:block {
3821
- display: block;
3822
- }
3823
3811
  .group.active .group-\[\.active\]\:bg-white {
3824
3812
  --tw-bg-opacity: 1;
3825
3813
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
@@ -44,20 +44,24 @@ const filterNavigationByAuthority = (navTree, userAuthority) => {
44
44
  return acc;
45
45
  }, []);
46
46
  };
47
+ const compareNavigationOrder = (a, b) => {
48
+ const orderA = a.sortOrder ?? Number.MAX_SAFE_INTEGER;
49
+ const orderB = b.sortOrder ?? Number.MAX_SAFE_INTEGER;
50
+ if (orderA !== orderB) {
51
+ return orderA - orderB;
52
+ }
53
+ const titleCompare = a.title.localeCompare(b.title, "pt-BR");
54
+ if (titleCompare !== 0) {
55
+ return titleCompare;
56
+ }
57
+ return a.key.localeCompare(b.key, "pt-BR");
58
+ };
59
+ const sortNavigationNodeList = (navTree) => [...navTree].sort(compareNavigationOrder);
47
60
  const sortNavigationRecursively = (navTree) => {
48
- return [...navTree].map((nav) => ({
61
+ return sortNavigationNodeList(navTree).map((nav) => ({
49
62
  ...nav,
50
63
  subMenu: nav.subMenu ? sortNavigationRecursively(nav.subMenu) : nav.subMenu
51
- })).sort((a, b) => {
52
- if (a.sortOrder !== void 0 || b.sortOrder !== void 0) {
53
- const orderA = a.sortOrder ?? Number.MAX_SAFE_INTEGER;
54
- const orderB = b.sortOrder ?? Number.MAX_SAFE_INTEGER;
55
- if (orderA !== orderB) {
56
- return orderA - orderB;
57
- }
58
- }
59
- return a.title.localeCompare(b.title, "pt-BR");
60
- });
64
+ }));
61
65
  };
62
66
  const VerticalMenuContent = (props) => {
63
67
  const {
@@ -79,7 +83,6 @@ const VerticalMenuContent = (props) => {
79
83
  );
80
84
  return sortNavigationRecursively(filteredTree);
81
85
  }, [navigationTree, userAuthority]);
82
- console.log("Filtered Navigation Tree:", filteredNavigationTree);
83
86
  const { activedRoute } = useMenuActive(filteredNavigationTree, routeKey);
84
87
  useEffect(() => {
85
88
  if (activedRoute?.key) {
@@ -95,7 +98,8 @@ const VerticalMenuContent = (props) => {
95
98
  };
96
99
  const renderNavigation = (navTree, cascade = 0, indent) => {
97
100
  const nextCascade = cascade + 1;
98
- return /* @__PURE__ */ jsx(Fragment, { children: navTree.map((nav) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
101
+ const orderedNavTree = sortNavigationNodeList(navTree);
102
+ return /* @__PURE__ */ jsx(Fragment, { children: orderedNavTree.map((nav) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
99
103
  nav.type === NAV_ITEM_TYPE_ITEM && /* @__PURE__ */ jsx(
100
104
  VerticalSingleMenuItem,
101
105
  {
@@ -1 +1 @@
1
- {"version":3,"file":"VerticalMenuContent.js","sources":["../../../../../lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.tsx"],"sourcesContent":["import { useState, useEffect, useMemo, Fragment } from 'react'\nimport Menu from '@/components/ui/Menu'\nimport VerticalSingleMenuItem from './VerticalSingleMenuItem'\nimport VerticalCollapsedMenuItem from './VerticalCollapsedMenuItem'\nimport { themeConfig } from '@/configs/theme.config'\nimport {\n NAV_ITEM_TYPE_TITLE,\n NAV_ITEM_TYPE_COLLAPSE,\n NAV_ITEM_TYPE_ITEM,\n} from '@/constants/navigation.constant'\nimport useMenuActive from '@/utils/hooks/useMenuActive'\nimport useTranslation from '@/utils/hooks/useTranslation'\nimport { Direction } from '@/@types/theme'\nimport type { NavigationTree } from '@/@types/navigation'\nimport type { TraslationFn } from '@/@types/common'\nimport { LinkRenderer } from '@/components/layouts/Layouts'\n\nexport interface VerticalMenuContentProps {\n collapsed?: boolean\n routeKey: string\n navigationTree?: NavigationTree[]\n onMenuItemClick?: () => void\n direction?: Direction\n translationSetup?: boolean\n userAuthority: string[]\n linkRenderer?: LinkRenderer\n}\n\nconst { MenuGroup } = Menu\n\nconst findAncestorKeys = (\n navTree: NavigationTree[],\n targetKey: string,\n): string[] | null => {\n for (const node of navTree) {\n if (node.key === targetKey) return []\n if (node.subMenu && node.subMenu.length > 0) {\n const found = findAncestorKeys(node.subMenu, targetKey)\n if (found !== null) return [node.key, ...found]\n }\n }\n return null\n}\n\nconst filterNavigationByAuthority = (\n navTree: NavigationTree[],\n userAuthority: string[],\n): NavigationTree[] => {\n return navTree.reduce((acc: NavigationTree[], nav) => {\n // Verifica se deve excluir o item quando o usuário possui alguma funcionalidade específica\n if (nav.excludeWhenHasPaths && nav.excludeWhenHasPaths.length > 0) {\n const shouldExclude = nav.excludeWhenHasPaths.some((path) =>\n userAuthority.includes(path),\n )\n if (shouldExclude) {\n return acc\n }\n }\n\n if (nav.subMenu && nav.subMenu.length > 0) {\n const filteredSubMenu = filterNavigationByAuthority(\n nav.subMenu,\n userAuthority,\n )\n if (filteredSubMenu.length > 0) {\n acc.push({ ...nav, subMenu: filteredSubMenu })\n }\n } else {\n if ((nav.path && userAuthority.includes(nav.path)) || !nav.path) {\n acc.push(nav)\n }\n }\n return acc\n }, [])\n}\n\nconst sortNavigationRecursively = (\n navTree: NavigationTree[],\n): NavigationTree[] => {\n return [...navTree]\n .map((nav) => ({\n ...nav,\n subMenu: nav.subMenu\n ? sortNavigationRecursively(nav.subMenu)\n : nav.subMenu,\n }))\n .sort((a, b) => {\n if (a.sortOrder !== undefined || b.sortOrder !== undefined) {\n const orderA = a.sortOrder ?? Number.MAX_SAFE_INTEGER\n const orderB = b.sortOrder ?? Number.MAX_SAFE_INTEGER\n\n if (orderA !== orderB) {\n return orderA - orderB\n }\n }\n\n return a.title.localeCompare(b.title, 'pt-BR')\n })\n}\n\nconst VerticalMenuContent = (props: VerticalMenuContentProps) => {\n const {\n collapsed,\n routeKey,\n navigationTree = [],\n onMenuItemClick,\n direction = themeConfig.direction,\n translationSetup,\n userAuthority,\n linkRenderer,\n } = props\n\n const { t } = useTranslation(!translationSetup)\n const [defaulExpandKey, setDefaulExpandKey] = useState<string[]>([])\n\n const filteredNavigationTree = useMemo(() => {\n const filteredTree = filterNavigationByAuthority(\n navigationTree,\n userAuthority,\n )\n\n return sortNavigationRecursively(filteredTree)\n }, [navigationTree, userAuthority])\n\n console.log('Filtered Navigation Tree:', filteredNavigationTree)\n\n const { activedRoute } = useMenuActive(filteredNavigationTree, routeKey)\n\n useEffect(() => {\n if (activedRoute?.key) {\n const ancestors = findAncestorKeys(\n filteredNavigationTree,\n activedRoute.key,\n )\n setDefaulExpandKey(ancestors ?? [])\n }\n }, [activedRoute?.key, filteredNavigationTree])\n\n const handleLinkClick = () => {\n onMenuItemClick?.()\n }\n\n const renderNavigation = (\n navTree: NavigationTree[],\n cascade: number = 0,\n indent?: boolean,\n ) => {\n const nextCascade = cascade + 1\n\n return (\n <>\n {navTree.map((nav) => (\n <Fragment key={nav.key}>\n {nav.type === NAV_ITEM_TYPE_ITEM && (\n <VerticalSingleMenuItem\n key={nav.key}\n currentKey={activedRoute?.key}\n parentKeys={defaulExpandKey}\n nav={nav}\n sideCollapsed={collapsed}\n direction={direction}\n indent={indent}\n renderAsIcon={cascade <= 0}\n showIcon={cascade <= 0}\n userAuthority={userAuthority}\n showTitle={\n nav.forceShowTitle ??\n (collapsed ? cascade >= 1 : cascade <= 1)\n }\n t={t as TraslationFn}\n onLinkClick={handleLinkClick}\n linkRenderer={linkRenderer}\n />\n )}\n {nav.type === NAV_ITEM_TYPE_COLLAPSE && (\n <VerticalCollapsedMenuItem\n key={nav.key}\n currentKey={activedRoute?.key}\n parentKeys={defaulExpandKey}\n nav={nav}\n sideCollapsed={collapsed}\n direction={direction}\n indent={nextCascade >= 2}\n dotIndent={nextCascade >= 2}\n renderAsIcon={nextCascade <= 1}\n userAuthority={userAuthority}\n t={t as TraslationFn}\n onLinkClick={onMenuItemClick}\n >\n {nav.subMenu &&\n nav.subMenu.length > 0 &&\n renderNavigation(\n nav.subMenu,\n nextCascade,\n true,\n )}\n </VerticalCollapsedMenuItem>\n )}\n {nav.type === NAV_ITEM_TYPE_TITLE && (\n <MenuGroup\n key={nav.key}\n label={t(nav.translateKey) || nav.title}\n >\n {nav.subMenu &&\n nav.subMenu.length > 0 &&\n renderNavigation(\n nav.subMenu,\n cascade,\n false,\n )}\n </MenuGroup>\n )}\n </Fragment>\n ))}\n </>\n )\n }\n\n return (\n <Menu\n className=\"px-4 pb-4\"\n sideCollapsed={collapsed}\n defaultActiveKeys={activedRoute?.key ? [activedRoute.key] : []}\n defaultExpandedKeys={defaulExpandKey}\n defaultCollapseActiveKeys={\n activedRoute?.parentKey ? [activedRoute.parentKey] : []\n }\n >\n {renderNavigation(filteredNavigationTree, 0)}\n </Menu>\n )\n}\n\nexport default VerticalMenuContent\n"],"names":["Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"VerticalMenuContent.js","sources":["../../../../../lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.tsx"],"sourcesContent":["import { useState, useEffect, useMemo, Fragment } from 'react'\nimport Menu from '@/components/ui/Menu'\nimport VerticalSingleMenuItem from './VerticalSingleMenuItem'\nimport VerticalCollapsedMenuItem from './VerticalCollapsedMenuItem'\nimport { themeConfig } from '@/configs/theme.config'\nimport {\n NAV_ITEM_TYPE_TITLE,\n NAV_ITEM_TYPE_COLLAPSE,\n NAV_ITEM_TYPE_ITEM,\n} from '@/constants/navigation.constant'\nimport useMenuActive from '@/utils/hooks/useMenuActive'\nimport useTranslation from '@/utils/hooks/useTranslation'\nimport { Direction } from '@/@types/theme'\nimport type { NavigationTree } from '@/@types/navigation'\nimport type { TraslationFn } from '@/@types/common'\nimport { LinkRenderer } from '@/components/layouts/Layouts'\n\nexport interface VerticalMenuContentProps {\n collapsed?: boolean\n routeKey: string\n navigationTree?: NavigationTree[]\n onMenuItemClick?: () => void\n direction?: Direction\n translationSetup?: boolean\n userAuthority: string[]\n linkRenderer?: LinkRenderer\n}\n\nconst { MenuGroup } = Menu\n\nconst findAncestorKeys = (\n navTree: NavigationTree[],\n targetKey: string,\n): string[] | null => {\n for (const node of navTree) {\n if (node.key === targetKey) return []\n if (node.subMenu && node.subMenu.length > 0) {\n const found = findAncestorKeys(node.subMenu, targetKey)\n if (found !== null) return [node.key, ...found]\n }\n }\n return null\n}\n\nconst filterNavigationByAuthority = (\n navTree: NavigationTree[],\n userAuthority: string[],\n): NavigationTree[] => {\n return navTree.reduce((acc: NavigationTree[], nav) => {\n // Verifica se deve excluir o item quando o usuário possui alguma funcionalidade específica\n if (nav.excludeWhenHasPaths && nav.excludeWhenHasPaths.length > 0) {\n const shouldExclude = nav.excludeWhenHasPaths.some((path) =>\n userAuthority.includes(path),\n )\n if (shouldExclude) {\n return acc\n }\n }\n\n if (nav.subMenu && nav.subMenu.length > 0) {\n const filteredSubMenu = filterNavigationByAuthority(\n nav.subMenu,\n userAuthority,\n )\n if (filteredSubMenu.length > 0) {\n acc.push({ ...nav, subMenu: filteredSubMenu })\n }\n } else {\n if ((nav.path && userAuthority.includes(nav.path)) || !nav.path) {\n acc.push(nav)\n }\n }\n return acc\n }, [])\n}\n\nconst compareNavigationOrder = (a: NavigationTree, b: NavigationTree) => {\n const orderA = a.sortOrder ?? Number.MAX_SAFE_INTEGER\n const orderB = b.sortOrder ?? Number.MAX_SAFE_INTEGER\n\n if (orderA !== orderB) {\n return orderA - orderB\n }\n\n const titleCompare = a.title.localeCompare(b.title, 'pt-BR')\n\n if (titleCompare !== 0) {\n return titleCompare\n }\n\n return a.key.localeCompare(b.key, 'pt-BR')\n}\n\nconst sortNavigationNodeList = (navTree: NavigationTree[]): NavigationTree[] =>\n [...navTree].sort(compareNavigationOrder)\n\nconst sortNavigationRecursively = (\n navTree: NavigationTree[],\n): NavigationTree[] => {\n return sortNavigationNodeList(navTree)\n .map((nav) => ({\n ...nav,\n subMenu: nav.subMenu\n ? sortNavigationRecursively(nav.subMenu)\n : nav.subMenu,\n }))\n}\n\nconst VerticalMenuContent = (props: VerticalMenuContentProps) => {\n const {\n collapsed,\n routeKey,\n navigationTree = [],\n onMenuItemClick,\n direction = themeConfig.direction,\n translationSetup,\n userAuthority,\n linkRenderer,\n } = props\n\n const { t } = useTranslation(!translationSetup)\n const [defaulExpandKey, setDefaulExpandKey] = useState<string[]>([])\n\n const filteredNavigationTree = useMemo(() => {\n const filteredTree = filterNavigationByAuthority(\n navigationTree,\n userAuthority,\n )\n\n return sortNavigationRecursively(filteredTree)\n }, [navigationTree, userAuthority])\n\n const { activedRoute } = useMenuActive(filteredNavigationTree, routeKey)\n\n useEffect(() => {\n if (activedRoute?.key) {\n const ancestors = findAncestorKeys(\n filteredNavigationTree,\n activedRoute.key,\n )\n setDefaulExpandKey(ancestors ?? [])\n }\n }, [activedRoute?.key, filteredNavigationTree])\n\n const handleLinkClick = () => {\n onMenuItemClick?.()\n }\n\n const renderNavigation = (\n navTree: NavigationTree[],\n cascade: number = 0,\n indent?: boolean,\n ) => {\n const nextCascade = cascade + 1\n const orderedNavTree = sortNavigationNodeList(navTree)\n\n return (\n <>\n {orderedNavTree.map((nav) => (\n <Fragment key={nav.key}>\n {nav.type === NAV_ITEM_TYPE_ITEM && (\n <VerticalSingleMenuItem\n key={nav.key}\n currentKey={activedRoute?.key}\n parentKeys={defaulExpandKey}\n nav={nav}\n sideCollapsed={collapsed}\n direction={direction}\n indent={indent}\n renderAsIcon={cascade <= 0}\n showIcon={cascade <= 0}\n userAuthority={userAuthority}\n showTitle={\n nav.forceShowTitle ??\n (collapsed ? cascade >= 1 : cascade <= 1)\n }\n t={t as TraslationFn}\n onLinkClick={handleLinkClick}\n linkRenderer={linkRenderer}\n />\n )}\n {nav.type === NAV_ITEM_TYPE_COLLAPSE && (\n <VerticalCollapsedMenuItem\n key={nav.key}\n currentKey={activedRoute?.key}\n parentKeys={defaulExpandKey}\n nav={nav}\n sideCollapsed={collapsed}\n direction={direction}\n indent={nextCascade >= 2}\n dotIndent={nextCascade >= 2}\n renderAsIcon={nextCascade <= 1}\n userAuthority={userAuthority}\n t={t as TraslationFn}\n onLinkClick={onMenuItemClick}\n >\n {nav.subMenu &&\n nav.subMenu.length > 0 &&\n renderNavigation(\n nav.subMenu,\n nextCascade,\n true,\n )}\n </VerticalCollapsedMenuItem>\n )}\n {nav.type === NAV_ITEM_TYPE_TITLE && (\n <MenuGroup\n key={nav.key}\n label={t(nav.translateKey) || nav.title}\n >\n {nav.subMenu &&\n nav.subMenu.length > 0 &&\n renderNavigation(\n nav.subMenu,\n cascade,\n false,\n )}\n </MenuGroup>\n )}\n </Fragment>\n ))}\n </>\n )\n }\n\n return (\n <Menu\n className=\"px-4 pb-4\"\n sideCollapsed={collapsed}\n defaultActiveKeys={activedRoute?.key ? [activedRoute.key] : []}\n defaultExpandedKeys={defaulExpandKey}\n defaultCollapseActiveKeys={\n activedRoute?.parentKey ? [activedRoute.parentKey] : []\n }\n >\n {renderNavigation(filteredNavigationTree, 0)}\n </Menu>\n )\n}\n\nexport default VerticalMenuContent\n"],"names":["Fragment"],"mappings":";;;;;;;;;AA4BA,MAAM,EAAE,cAAc;AAEtB,MAAM,mBAAmB,CACrB,SACA,cACkB;AAClB,aAAW,QAAQ,SAAS;AACxB,QAAI,KAAK,QAAQ,UAAW,QAAO,CAAA;AACnC,QAAI,KAAK,WAAW,KAAK,QAAQ,SAAS,GAAG;AACzC,YAAM,QAAQ,iBAAiB,KAAK,SAAS,SAAS;AACtD,UAAI,UAAU,KAAM,QAAO,CAAC,KAAK,KAAK,GAAG,KAAK;AAAA,IAClD;AAAA,EACJ;AACA,SAAO;AACX;AAEA,MAAM,8BAA8B,CAChC,SACA,kBACmB;AACnB,SAAO,QAAQ,OAAO,CAAC,KAAuB,QAAQ;AAElD,QAAI,IAAI,uBAAuB,IAAI,oBAAoB,SAAS,GAAG;AAC/D,YAAM,gBAAgB,IAAI,oBAAoB;AAAA,QAAK,CAAC,SAChD,cAAc,SAAS,IAAI;AAAA,MAAA;AAE/B,UAAI,eAAe;AACf,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,QAAI,IAAI,WAAW,IAAI,QAAQ,SAAS,GAAG;AACvC,YAAM,kBAAkB;AAAA,QACpB,IAAI;AAAA,QACJ;AAAA,MAAA;AAEJ,UAAI,gBAAgB,SAAS,GAAG;AAC5B,YAAI,KAAK,EAAE,GAAG,KAAK,SAAS,iBAAiB;AAAA,MACjD;AAAA,IACJ,OAAO;AACH,UAAK,IAAI,QAAQ,cAAc,SAAS,IAAI,IAAI,KAAM,CAAC,IAAI,MAAM;AAC7D,YAAI,KAAK,GAAG;AAAA,MAChB;AAAA,IACJ;AACA,WAAO;AAAA,EACX,GAAG,CAAA,CAAE;AACT;AAEA,MAAM,yBAAyB,CAAC,GAAmB,MAAsB;AACrE,QAAM,SAAS,EAAE,aAAa,OAAO;AACrC,QAAM,SAAS,EAAE,aAAa,OAAO;AAErC,MAAI,WAAW,QAAQ;AACnB,WAAO,SAAS;AAAA,EACpB;AAEA,QAAM,eAAe,EAAE,MAAM,cAAc,EAAE,OAAO,OAAO;AAE3D,MAAI,iBAAiB,GAAG;AACpB,WAAO;AAAA,EACX;AAEA,SAAO,EAAE,IAAI,cAAc,EAAE,KAAK,OAAO;AAC7C;AAEA,MAAM,yBAAyB,CAAC,YAC5B,CAAC,GAAG,OAAO,EAAE,KAAK,sBAAsB;AAE5C,MAAM,4BAA4B,CAC9B,YACmB;AACnB,SAAO,uBAAuB,OAAO,EAChC,IAAI,CAAC,SAAS;AAAA,IACX,GAAG;AAAA,IACH,SAAS,IAAI,UACP,0BAA0B,IAAI,OAAO,IACrC,IAAI;AAAA,EAAA,EACZ;AACV;AAEA,MAAM,sBAAsB,CAAC,UAAoC;AAC7D,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA,iBAAiB,CAAA;AAAA,IACjB;AAAA,IACA,YAAY,YAAY;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACA;AAEJ,QAAM,EAAE,EAAA,IAAM,eAAe,CAAC,gBAAgB;AAC9C,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAmB,CAAA,CAAE;AAEnE,QAAM,yBAAyB,QAAQ,MAAM;AACzC,UAAM,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,IAAA;AAGJ,WAAO,0BAA0B,YAAY;AAAA,EACjD,GAAG,CAAC,gBAAgB,aAAa,CAAC;AAElC,QAAM,EAAE,aAAA,IAAiB,cAAc,wBAAwB,QAAQ;AAEvE,YAAU,MAAM;AACZ,QAAI,cAAc,KAAK;AACnB,YAAM,YAAY;AAAA,QACd;AAAA,QACA,aAAa;AAAA,MAAA;AAEjB,yBAAmB,aAAa,EAAE;AAAA,IACtC;AAAA,EACJ,GAAG,CAAC,cAAc,KAAK,sBAAsB,CAAC;AAE9C,QAAM,kBAAkB,MAAM;AAC1B,sBAAA;AAAA,EACJ;AAEA,QAAM,mBAAmB,CACrB,SACA,UAAkB,GAClB,WACC;AACD,UAAM,cAAc,UAAU;AAC9B,UAAM,iBAAiB,uBAAuB,OAAO;AAErD,2CAES,UAAA,eAAe,IAAI,CAAC,QACjB,qBAACA,YAAA,EACI,UAAA;AAAA,MAAA,IAAI,SAAS,sBACV;AAAA,QAAC;AAAA,QAAA;AAAA,UAEG,YAAY,cAAc;AAAA,UAC1B,YAAY;AAAA,UACZ;AAAA,UACA,eAAe;AAAA,UACf;AAAA,UACA;AAAA,UACA,cAAc,WAAW;AAAA,UACzB,UAAU,WAAW;AAAA,UACrB;AAAA,UACA,WACI,IAAI,mBACH,YAAY,WAAW,IAAI,WAAW;AAAA,UAE3C;AAAA,UACA,aAAa;AAAA,UACb;AAAA,QAAA;AAAA,QAhBK,IAAI;AAAA,MAAA;AAAA,MAmBhB,IAAI,SAAS,0BACV;AAAA,QAAC;AAAA,QAAA;AAAA,UAEG,YAAY,cAAc;AAAA,UAC1B,YAAY;AAAA,UACZ;AAAA,UACA,eAAe;AAAA,UACf;AAAA,UACA,QAAQ,eAAe;AAAA,UACvB,WAAW,eAAe;AAAA,UAC1B,cAAc,eAAe;AAAA,UAC7B;AAAA,UACA;AAAA,UACA,aAAa;AAAA,UAEZ,UAAA,IAAI,WACD,IAAI,QAAQ,SAAS,KACrB;AAAA,YACI,IAAI;AAAA,YACJ;AAAA,YACA;AAAA,UAAA;AAAA,QACJ;AAAA,QAnBC,IAAI;AAAA,MAAA;AAAA,MAsBhB,IAAI,SAAS,uBACV;AAAA,QAAC;AAAA,QAAA;AAAA,UAEG,OAAO,EAAE,IAAI,YAAY,KAAK,IAAI;AAAA,UAEjC,UAAA,IAAI,WACD,IAAI,QAAQ,SAAS,KACrB;AAAA,YACI,IAAI;AAAA,YACJ;AAAA,YACA;AAAA,UAAA;AAAA,QACJ;AAAA,QATC,IAAI;AAAA,MAAA;AAAA,IAUb,EAAA,GA1DO,IAAI,GA4DnB,CACH,GACL;AAAA,EAER;AAEA,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAU;AAAA,MACV,eAAe;AAAA,MACf,mBAAmB,cAAc,MAAM,CAAC,aAAa,GAAG,IAAI,CAAA;AAAA,MAC5D,qBAAqB;AAAA,MACrB,2BACI,cAAc,YAAY,CAAC,aAAa,SAAS,IAAI,CAAA;AAAA,MAGxD,UAAA,iBAAiB,wBAAwB,CAAC;AAAA,IAAA;AAAA,EAAA;AAGvD;"}
@@ -1,121 +1,21 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { BrowserRouter } from "react-router-dom";
3
3
  import VerticalMenuContent from "./VerticalMenuContent.js";
4
- import { NAV_ITEM_TYPE_ITEM, NAV_ITEM_TYPE_COLLAPSE } from "../../../constants/navigation.constant.js";
5
- const mockNavigationTree = [
6
- {
7
- key: "inicio",
8
- path: "/inicio",
9
- title: "Início",
10
- translateKey: "nav.inicio",
11
- icon: "",
12
- type: NAV_ITEM_TYPE_ITEM,
13
- authority: ["/inicio"],
14
- subMenu: []
15
- },
16
- {
17
- key: "cadastros",
18
- path: "",
19
- title: "Cadastros",
20
- translateKey: "nav.cadastros",
21
- icon: "",
22
- type: NAV_ITEM_TYPE_COLLAPSE,
23
- authority: ["/cadastros"],
24
- subMenu: [
25
- {
26
- key: "clientes",
27
- path: "/cadastros/clientes",
28
- title: "Clientes",
29
- translateKey: "nav.clientes",
30
- icon: "",
31
- type: NAV_ITEM_TYPE_ITEM,
32
- authority: ["/cadastros/clientes"],
33
- subMenu: []
34
- },
35
- {
36
- key: "fornecedores",
37
- path: "/cadastros/fornecedores",
38
- title: "Fornecedores",
39
- translateKey: "nav.fornecedores",
40
- icon: "",
41
- type: NAV_ITEM_TYPE_ITEM,
42
- authority: ["/cadastros/fornecedores"],
43
- subMenu: []
44
- }
45
- ]
46
- },
47
- {
48
- key: "relatorios",
49
- path: "/relatorios",
50
- title: "Relatórios",
51
- translateKey: "nav.relatorios",
52
- icon: "ChartBarIcon",
53
- type: NAV_ITEM_TYPE_ITEM,
54
- authority: ["/relatorios"],
55
- subMenu: []
56
- },
57
- {
58
- key: "configuracoes",
59
- path: "",
60
- title: "Configurações",
61
- translateKey: "nav.configuracoes",
62
- icon: "",
63
- type: NAV_ITEM_TYPE_COLLAPSE,
64
- authority: ["/configuracoes"],
65
- subMenu: [
66
- {
67
- key: "perfil",
68
- path: "/configuracoes/perfil",
69
- title: "Perfil",
70
- translateKey: "nav.perfil",
71
- icon: "",
72
- type: NAV_ITEM_TYPE_ITEM,
73
- authority: ["/configuracoes/perfil"],
74
- subMenu: []
75
- },
76
- {
77
- key: "integracoes",
78
- path: "",
79
- title: "Integrações",
80
- translateKey: "nav.integracoes",
81
- icon: "",
82
- type: NAV_ITEM_TYPE_COLLAPSE,
83
- authority: ["/configuracoes/integracoes"],
84
- subMenu: [
85
- {
86
- key: "webhooks",
87
- path: "/configuracoes/integracoes/webhooks",
88
- title: "Webhooks",
89
- translateKey: "nav.webhooks",
90
- icon: "WebhookIcon",
91
- type: NAV_ITEM_TYPE_ITEM,
92
- authority: ["/configuracoes/integracoes/webhooks"],
93
- subMenu: []
94
- },
95
- {
96
- key: "lorem.ipsum",
97
- path: "/configuracoes/integracoes/lorem-ipsum",
98
- title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
99
- translateKey: "nav.loremIpsum",
100
- icon: "LoremIpsumIcon",
101
- type: NAV_ITEM_TYPE_ITEM,
102
- authority: ["/configuracoes/integracoes/lorem-ipsum"],
103
- subMenu: []
104
- }
105
- ]
106
- }
107
- ]
108
- }
109
- ];
110
- const allUserAuthority = [
111
- "/inicio",
112
- "/cadastros/clientes",
113
- "/cadastros/fornecedores",
114
- "/relatorios",
115
- "/configuracoes/perfil",
116
- "/configuracoes/integracoes/webhooks",
117
- "/configuracoes/integracoes/lorem-ipsum"
118
- ];
4
+ import modulesNavigationConfig from "../../../../base/configs/navigation.config/modules.navigation.js";
5
+ const collectAuthorityPaths = (navTree) => {
6
+ return navTree.reduce((acc, node) => {
7
+ if (node.path) {
8
+ acc.push(node.path);
9
+ }
10
+ if (node.subMenu?.length) {
11
+ acc.push(...collectAuthorityPaths(node.subMenu));
12
+ }
13
+ return acc;
14
+ }, []);
15
+ };
16
+ const allAuthority = Array.from(
17
+ new Set(collectAuthorityPaths(modulesNavigationConfig))
18
+ );
119
19
  const meta = {
120
20
  title: "@ecme/Template/VerticalMenuContent",
121
21
  component: VerticalMenuContent,
@@ -142,93 +42,18 @@ const meta = {
142
42
  const Default = {
143
43
  args: {
144
44
  collapsed: false,
145
- routeKey: "/inicio",
146
- navigationTree: mockNavigationTree,
147
- userAuthority: allUserAuthority,
148
- direction: "ltr",
149
- translationSetup: true
150
- }
151
- };
152
- const Collapsed = {
153
- args: {
154
- collapsed: true,
155
- routeKey: "/cadastros/clientes",
156
- navigationTree: mockNavigationTree,
157
- userAuthority: allUserAuthority,
158
- direction: "ltr",
159
- translationSetup: true
160
- }
161
- };
162
- const WithExpandedMenu = {
163
- args: {
164
- collapsed: false,
165
- routeKey: "/configuracoes/integracoes/webhooks",
166
- navigationTree: mockNavigationTree,
167
- userAuthority: allUserAuthority,
45
+ routeKey: "modules",
46
+ navigationTree: modulesNavigationConfig,
47
+ userAuthority: allAuthority,
168
48
  direction: "ltr",
169
49
  translationSetup: true
170
- }
171
- };
172
- const LimitedAuthority = {
173
- args: {
174
- collapsed: false,
175
- routeKey: "/inicio",
176
- navigationTree: mockNavigationTree,
177
- userAuthority: ["/inicio", "/relatorios"],
178
- direction: "ltr",
179
- translationSetup: true
180
- }
181
- };
182
- const RTLDirection = {
183
- args: {
184
- collapsed: false,
185
- routeKey: "/inicio",
186
- navigationTree: mockNavigationTree,
187
- userAuthority: allUserAuthority,
188
- direction: "rtl",
189
- translationSetup: true
190
- }
191
- };
192
- const MinimalNavigation = {
193
- args: {
194
- collapsed: false,
195
- routeKey: "/inicio",
196
- navigationTree: [
197
- {
198
- key: "inicio",
199
- path: "/inicio",
200
- title: "Início",
201
- translateKey: "nav.inicio",
202
- icon: "",
203
- type: NAV_ITEM_TYPE_ITEM,
204
- authority: ["/inicio"],
205
- subMenu: []
206
- }
207
- ],
208
- userAuthority: ["/inicio"],
209
- direction: "ltr",
210
- translationSetup: true
211
- }
212
- };
213
- const WithMenuClick = {
214
- args: {
215
- collapsed: false,
216
- routeKey: "/inicio",
217
- navigationTree: mockNavigationTree,
218
- userAuthority: allUserAuthority,
219
- direction: "ltr",
220
- translationSetup: true,
221
- onMenuItemClick: () => alert("Menu item clicked!")
222
- }
50
+ },
51
+ decorators: [
52
+ (Story) => /* @__PURE__ */ jsx("div", { style: { maxWidth: "25vw" }, children: /* @__PURE__ */ jsx(Story, {}) })
53
+ ]
223
54
  };
224
55
  export {
225
- Collapsed,
226
56
  Default,
227
- LimitedAuthority,
228
- MinimalNavigation,
229
- RTLDirection,
230
- WithExpandedMenu,
231
- WithMenuClick,
232
57
  meta as default
233
58
  };
234
59
  //# sourceMappingURL=VerticalMenuContent.stories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VerticalMenuContent.stories.js","sources":["../../../../../lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react'\nimport { BrowserRouter } from 'react-router-dom'\nimport VerticalMenuContent from './VerticalMenuContent'\nimport type { NavigationTree } from '@/@types/navigation'\nimport {\n NAV_ITEM_TYPE_COLLAPSE,\n NAV_ITEM_TYPE_ITEM,\n} from '@/constants/navigation.constant'\n\nconst mockNavigationTree: NavigationTree[] = [\n {\n key: 'inicio',\n path: '/inicio',\n title: 'Início',\n translateKey: 'nav.inicio',\n icon: '',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/inicio'],\n subMenu: [],\n },\n {\n key: 'cadastros',\n path: '',\n title: 'Cadastros',\n translateKey: 'nav.cadastros',\n icon: '',\n type: NAV_ITEM_TYPE_COLLAPSE,\n authority: ['/cadastros'],\n subMenu: [\n {\n key: 'clientes',\n path: '/cadastros/clientes',\n title: 'Clientes',\n translateKey: 'nav.clientes',\n icon: '',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/cadastros/clientes'],\n subMenu: [],\n },\n {\n key: 'fornecedores',\n path: '/cadastros/fornecedores',\n title: 'Fornecedores',\n translateKey: 'nav.fornecedores',\n icon: '',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/cadastros/fornecedores'],\n subMenu: [],\n },\n ],\n },\n {\n key: 'relatorios',\n path: '/relatorios',\n title: 'Relatórios',\n translateKey: 'nav.relatorios',\n icon: 'ChartBarIcon',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/relatorios'],\n subMenu: [],\n },\n {\n key: 'configuracoes',\n path: '',\n title: 'Configurações',\n translateKey: 'nav.configuracoes',\n icon: '',\n type: NAV_ITEM_TYPE_COLLAPSE,\n authority: ['/configuracoes'],\n subMenu: [\n {\n key: 'perfil',\n path: '/configuracoes/perfil',\n title: 'Perfil',\n translateKey: 'nav.perfil',\n icon: '',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/configuracoes/perfil'],\n subMenu: [],\n },\n {\n key: 'integracoes',\n path: '',\n title: 'Integrações',\n translateKey: 'nav.integracoes',\n icon: '',\n type: NAV_ITEM_TYPE_COLLAPSE,\n authority: ['/configuracoes/integracoes'],\n subMenu: [\n {\n key: 'webhooks',\n path: '/configuracoes/integracoes/webhooks',\n title: 'Webhooks',\n translateKey: 'nav.webhooks',\n icon: 'WebhookIcon',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/configuracoes/integracoes/webhooks'],\n subMenu: [],\n },\n {\n key: 'lorem.ipsum',\n path: '/configuracoes/integracoes/lorem-ipsum',\n title: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',\n translateKey: 'nav.loremIpsum',\n icon: 'LoremIpsumIcon',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/configuracoes/integracoes/lorem-ipsum'],\n subMenu: [],\n },\n ],\n },\n ],\n },\n]\n\nconst allUserAuthority = [\n '/inicio',\n '/cadastros/clientes',\n '/cadastros/fornecedores',\n '/relatorios',\n '/configuracoes/perfil',\n '/configuracoes/integracoes/webhooks',\n '/configuracoes/integracoes/lorem-ipsum',\n]\n\nconst meta: Meta<typeof VerticalMenuContent> = {\n title: '@ecme/Template/VerticalMenuContent',\n component: VerticalMenuContent,\n parameters: {\n layout: 'padded',\n },\n tags: ['autodocs'],\n decorators: [\n (Story) => (\n <BrowserRouter>\n <Story />\n </BrowserRouter>\n ),\n ],\n argTypes: {\n collapsed: {\n control: 'boolean',\n },\n direction: {\n control: { type: 'select' },\n options: ['ltr', 'rtl'],\n },\n routeKey: {\n control: 'text',\n },\n },\n}\n\nexport default meta\ntype TStory = StoryObj<typeof VerticalMenuContent>\n\nexport const Default: TStory = {\n args: {\n collapsed: false,\n routeKey: '/inicio',\n navigationTree: mockNavigationTree,\n userAuthority: allUserAuthority,\n direction: 'ltr',\n translationSetup: true,\n },\n}\n\nexport const Collapsed: TStory = {\n args: {\n collapsed: true,\n routeKey: '/cadastros/clientes',\n navigationTree: mockNavigationTree,\n userAuthority: allUserAuthority,\n direction: 'ltr',\n translationSetup: true,\n },\n}\n\nexport const WithExpandedMenu: TStory = {\n args: {\n collapsed: false,\n routeKey: '/configuracoes/integracoes/webhooks',\n navigationTree: mockNavigationTree,\n userAuthority: allUserAuthority,\n direction: 'ltr',\n translationSetup: true,\n },\n}\n\nexport const LimitedAuthority: TStory = {\n args: {\n collapsed: false,\n routeKey: '/inicio',\n navigationTree: mockNavigationTree,\n userAuthority: ['/inicio', '/relatorios'],\n direction: 'ltr',\n translationSetup: true,\n },\n}\n\nexport const RTLDirection: TStory = {\n args: {\n collapsed: false,\n routeKey: '/inicio',\n navigationTree: mockNavigationTree,\n userAuthority: allUserAuthority,\n direction: 'rtl',\n translationSetup: true,\n },\n}\n\nexport const MinimalNavigation: TStory = {\n args: {\n collapsed: false,\n routeKey: '/inicio',\n navigationTree: [\n {\n key: 'inicio',\n path: '/inicio',\n title: 'Início',\n translateKey: 'nav.inicio',\n icon: '',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/inicio'],\n subMenu: [],\n },\n ],\n userAuthority: ['/inicio'],\n direction: 'ltr',\n translationSetup: true,\n },\n}\n\nexport const WithMenuClick: TStory = {\n args: {\n collapsed: false,\n routeKey: '/inicio',\n navigationTree: mockNavigationTree,\n userAuthority: allUserAuthority,\n direction: 'ltr',\n translationSetup: true,\n onMenuItemClick: () => alert('Menu item clicked!'),\n },\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VerticalMenuContent.stories.js","sources":["../../../../../lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react'\nimport { BrowserRouter } from 'react-router-dom'\nimport VerticalMenuContent from './VerticalMenuContent'\nimport type { NavigationTree } from '@/@types/navigation'\nimport modulesNavigationConfig from '@base/configs/navigation.config/modules.navigation'\n\nconst collectAuthorityPaths = (navTree: NavigationTree[]): string[] => {\n return navTree.reduce((acc: string[], node) => {\n if (node.path) {\n acc.push(node.path)\n }\n\n if (node.subMenu?.length) {\n acc.push(...collectAuthorityPaths(node.subMenu))\n }\n\n return acc\n }, [])\n}\n\nconst allAuthority = Array.from(\n new Set(collectAuthorityPaths(modulesNavigationConfig)),\n)\n\nconst meta: Meta<typeof VerticalMenuContent> = {\n title: '@ecme/Template/VerticalMenuContent',\n component: VerticalMenuContent,\n parameters: {\n layout: 'padded',\n },\n tags: ['autodocs'],\n decorators: [\n (Story) => (\n <BrowserRouter>\n <Story />\n </BrowserRouter>\n ),\n ],\n argTypes: {\n collapsed: {\n control: 'boolean',\n },\n direction: {\n control: { type: 'select' },\n options: ['ltr', 'rtl'],\n },\n routeKey: {\n control: 'text',\n },\n },\n}\n\nexport default meta\ntype TStory = StoryObj<typeof VerticalMenuContent>\n\nexport const Default: TStory = {\n args: {\n collapsed: false,\n routeKey: 'modules',\n navigationTree: modulesNavigationConfig,\n userAuthority: allAuthority,\n direction: 'ltr',\n translationSetup: true,\n },\n decorators: [\n (Story) => (\n <div style={{ maxWidth: '25vw' }}>\n <Story />\n </div>\n ),\n ],\n}\n"],"names":[],"mappings":";;;;AAMA,MAAM,wBAAwB,CAAC,YAAwC;AACnE,SAAO,QAAQ,OAAO,CAAC,KAAe,SAAS;AAC3C,QAAI,KAAK,MAAM;AACX,UAAI,KAAK,KAAK,IAAI;AAAA,IACtB;AAEA,QAAI,KAAK,SAAS,QAAQ;AACtB,UAAI,KAAK,GAAG,sBAAsB,KAAK,OAAO,CAAC;AAAA,IACnD;AAEA,WAAO;AAAA,EACX,GAAG,CAAA,CAAE;AACT;AAEA,MAAM,eAAe,MAAM;AAAA,EACvB,IAAI,IAAI,sBAAsB,uBAAuB,CAAC;AAC1D;AAEA,MAAM,OAAyC;AAAA,EAC3C,OAAO;AAAA,EACP,WAAW;AAAA,EACX,YAAY;AAAA,IACR,QAAQ;AAAA,EAAA;AAAA,EAEZ,MAAM,CAAC,UAAU;AAAA,EACjB,YAAY;AAAA,IACR,CAAC,UACG,oBAAC,eAAA,EACG,UAAA,oBAAC,SAAM,EAAA,CACX;AAAA,EAAA;AAAA,EAGR,UAAU;AAAA,IACN,WAAW;AAAA,MACP,SAAS;AAAA,IAAA;AAAA,IAEb,WAAW;AAAA,MACP,SAAS,EAAE,MAAM,SAAA;AAAA,MACjB,SAAS,CAAC,OAAO,KAAK;AAAA,IAAA;AAAA,IAE1B,UAAU;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,EACb;AAER;AAKO,MAAM,UAAkB;AAAA,EAC3B,MAAM;AAAA,IACF,WAAW;AAAA,IACX,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,WAAW;AAAA,IACX,kBAAkB;AAAA,EAAA;AAAA,EAEtB,YAAY;AAAA,IACR,CAAC,UACG,oBAAC,OAAA,EAAI,OAAO,EAAE,UAAU,OAAA,GACpB,UAAA,oBAAC,OAAA,CAAA,CAAM,EAAA,CACX;AAAA,EAAA;AAGZ;"}
@@ -1,10 +1,8 @@
1
1
  import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
2
  import "../../ui/Tooltip/index.js";
3
3
  import { Menu } from "../../ui/Menu/index.js";
4
- import "../../ui/ScrollBar/index.js";
5
4
  import VerticalMenuIcon from "./VerticalMenuIcon.js";
6
5
  import { Link } from "react-router-dom";
7
- import ScrollBar from "../../ui/ScrollBar/ScrollBar.js";
8
6
  import Tooltip from "../../ui/Tooltip/Tooltip.js";
9
7
  const { MenuItem } = Menu;
10
8
  const DefaultItem = (props) => {
@@ -17,21 +15,9 @@ const DefaultItem = (props) => {
17
15
  t,
18
16
  linkRenderer
19
17
  } = props;
20
- const translatedTitle = t(nav.translateKey, nav.title);
21
- const renderItemContent = (titleClassName) => /* @__PURE__ */ jsxs(Fragment, { children: [
18
+ const linkContent = /* @__PURE__ */ jsxs(Fragment, { children: [
22
19
  showIcon && /* @__PURE__ */ jsx(VerticalMenuIcon, { icon: nav.icon }),
23
- showTitle && /* @__PURE__ */ jsx("span", { className: titleClassName, children: translatedTitle })
24
- ] });
25
- const linkContent = /* @__PURE__ */ jsxs("span", { className: "relative flex min-w-0 flex-1 items-center gap-2", children: [
26
- /* @__PURE__ */ jsx("span", { className: "flex min-w-0 flex-1 items-center gap-2 overflow-hidden", children: renderItemContent("truncate") }),
27
- showTitle && /* @__PURE__ */ jsx("div", { className: "w-100 absolute -left-3 top-1/2 z-20 hidden min-w-[calc(100%+1.5rem)] -translate-y-1/2 group-hover/item:block group-focus-visible/item:block", children: /* @__PURE__ */ jsx(
28
- ScrollBar,
29
- {
30
- autoHide: true,
31
- className: "max-h-16 rounded-lg bg-gray-100 text-gray-900 dark:bg-gray-700 dark:text-gray-100",
32
- children: /* @__PURE__ */ jsx("div", { className: "flex h-full w-max min-w-full items-center gap-2 whitespace-nowrap rounded-lg px-3 font-semibold", children: renderItemContent() })
33
- }
34
- ) })
20
+ showTitle && /* @__PURE__ */ jsx("span", { className: "whitespace-normal", children: t(nav.translateKey, nav.title) })
35
21
  ] });
36
22
  const renderLink = () => {
37
23
  if (linkRenderer) {
@@ -41,7 +27,7 @@ const DefaultItem = (props) => {
41
27
  Link,
42
28
  {
43
29
  to: nav.path,
44
- className: "group/item relative flex w-full min-w-0 items-center gap-2",
30
+ className: "flex h-full w-full items-center gap-2",
45
31
  target: nav.isExternalLink ? "_blank" : "",
46
32
  onClick: () => onLinkClick?.({
47
33
  key: nav.key,
@@ -1 +1 @@
1
- {"version":3,"file":"VerticalSingleMenuItem.js","sources":["../../../../../lib/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.tsx"],"sourcesContent":["import Tooltip from '@/components/ui/Tooltip'\nimport Menu from '@/components/ui/Menu'\nimport ScrollBar from '@/components/ui/ScrollBar'\nimport VerticalMenuIcon from './VerticalMenuIcon'\nimport { Link } from 'react-router-dom'\nimport type { CommonProps } from '@/@types/common'\nimport type { Direction } from '@/@types/theme'\nimport type { NavigationTree } from '@/@types/navigation'\n\nconst { MenuItem } = Menu\n\ntype LinkRenderer = (\n nav: NavigationTree,\n children: React.ReactNode,\n) => React.ReactNode\n\ninterface CollapsedItemProps extends CommonProps {\n nav: NavigationTree\n direction?: Direction\n linkRenderer?: LinkRenderer\n onLinkClick?: (link: { key: string; title: string; path: string }) => void\n t: (\n key: string,\n fallback?: string | Record<string, string | number>,\n ) => string\n renderAsIcon?: boolean\n userAuthority: string[]\n currentKey?: string\n parentKeys?: string[]\n}\n\ninterface DefaultItemProps {\n nav: NavigationTree\n onLinkClick?: (link: { key: string; title: string; path: string }) => void\n sideCollapsed?: boolean\n t: (\n key: string,\n fallback?: string | Record<string, string | number>,\n ) => string\n indent?: boolean\n userAuthority: string[]\n showIcon?: boolean\n showTitle?: boolean\n linkRenderer?: LinkRenderer\n}\n\ninterface VerticalMenuItemProps extends CollapsedItemProps, DefaultItemProps {}\n\nconst DefaultItem = (props: DefaultItemProps) => {\n const {\n nav,\n onLinkClick,\n showTitle,\n indent,\n showIcon = true,\n t,\n linkRenderer,\n } = props\n\n const translatedTitle = t(nav.translateKey, nav.title)\n\n const renderItemContent = (titleClassName?: string) => (\n <>\n {showIcon && <VerticalMenuIcon icon={nav.icon} />}\n {showTitle && (\n <span className={titleClassName}>{translatedTitle}</span>\n )}\n </>\n )\n\n const linkContent = (\n <span className=\"relative flex min-w-0 flex-1 items-center gap-2\">\n <span className=\"flex min-w-0 flex-1 items-center gap-2 overflow-hidden\">\n {renderItemContent('truncate')}\n </span>\n {showTitle && (\n <div className=\"w-100 absolute -left-3 top-1/2 z-20 hidden min-w-[calc(100%+1.5rem)] -translate-y-1/2 group-hover/item:block group-focus-visible/item:block\">\n <ScrollBar\n autoHide\n className=\"max-h-16 rounded-lg bg-gray-100 text-gray-900 dark:bg-gray-700 dark:text-gray-100\"\n >\n <div className=\"flex h-full w-max min-w-full items-center gap-2 whitespace-nowrap rounded-lg px-3 font-semibold\">\n {renderItemContent()}\n </div>\n </ScrollBar>\n </div>\n )}\n </span>\n )\n\n const renderLink = () => {\n if (linkRenderer) {\n return linkRenderer(nav, linkContent)\n }\n\n return (\n <Link\n to={nav.path}\n className=\"group/item relative flex w-full min-w-0 items-center gap-2\"\n target={nav.isExternalLink ? '_blank' : ''}\n onClick={() =>\n onLinkClick?.({\n key: nav.key,\n title: nav.title,\n path: nav.path,\n })\n }\n >\n {linkContent}\n </Link>\n )\n }\n\n return (\n <MenuItem key={nav.key} eventKey={nav.key} dotIndent={indent}>\n {renderLink()}\n </MenuItem>\n )\n}\nconst VerticalSingleMenuItem = (props: VerticalMenuItemProps) => {\n const { sideCollapsed, nav, t, userAuthority, onLinkClick, linkRenderer } =\n props\n\n if (sideCollapsed) {\n return (\n <Tooltip\n title={t(nav.translateKey, nav.title)}\n placement={props.direction === 'rtl' ? 'left' : 'right'}\n >\n <DefaultItem\n nav={nav}\n onLinkClick={onLinkClick}\n t={t}\n userAuthority={userAuthority}\n linkRenderer={linkRenderer}\n showIcon={true}\n showTitle={false}\n indent={props.indent}\n />\n </Tooltip>\n )\n }\n\n return (\n <DefaultItem\n nav={nav}\n onLinkClick={onLinkClick}\n t={t}\n userAuthority={userAuthority}\n linkRenderer={linkRenderer}\n showIcon={true}\n showTitle={true}\n indent={props.indent}\n />\n )\n}\nexport default VerticalSingleMenuItem\n"],"names":[],"mappings":";;;;;;;;AASA,MAAM,EAAE,aAAa;AAuCrB,MAAM,cAAc,CAAC,UAA4B;AAC7C,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,EAAA,IACA;AAEJ,QAAM,kBAAkB,EAAE,IAAI,cAAc,IAAI,KAAK;AAErD,QAAM,oBAAoB,CAAC,mBACvB,qBAAA,UAAA,EACK,UAAA;AAAA,IAAA,YAAY,oBAAC,kBAAA,EAAiB,MAAM,IAAI,MAAM;AAAA,IAC9C,aACG,oBAAC,QAAA,EAAK,WAAW,gBAAiB,UAAA,gBAAA,CAAgB;AAAA,EAAA,GAE1D;AAGJ,QAAM,cACF,qBAAC,QAAA,EAAK,WAAU,mDACZ,UAAA;AAAA,IAAA,oBAAC,QAAA,EAAK,WAAU,0DACX,UAAA,kBAAkB,UAAU,GACjC;AAAA,IACC,aACG,oBAAC,OAAA,EAAI,WAAU,+IACX,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,UAAQ;AAAA,QACR,WAAU;AAAA,QAEV,UAAA,oBAAC,OAAA,EAAI,WAAU,mGACV,8BAAkB,CACvB;AAAA,MAAA;AAAA,IAAA,EACJ,CACJ;AAAA,EAAA,GAER;AAGJ,QAAM,aAAa,MAAM;AACrB,QAAI,cAAc;AACd,aAAO,aAAa,KAAK,WAAW;AAAA,IACxC;AAEA,WACI;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,IAAI,IAAI;AAAA,QACR,WAAU;AAAA,QACV,QAAQ,IAAI,iBAAiB,WAAW;AAAA,QACxC,SAAS,MACL,cAAc;AAAA,UACV,KAAK,IAAI;AAAA,UACT,OAAO,IAAI;AAAA,UACX,MAAM,IAAI;AAAA,QAAA,CACb;AAAA,QAGJ,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGb;AAEA,SACI,oBAAC,UAAA,EAAuB,UAAU,IAAI,KAAK,WAAW,QACjD,UAAA,WAAA,EAAW,GADD,IAAI,GAEnB;AAER;AACA,MAAM,yBAAyB,CAAC,UAAiC;AAC7D,QAAM,EAAE,eAAe,KAAK,GAAG,eAAe,aAAa,iBACvD;AAEJ,MAAI,eAAe;AACf,WACI;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,OAAO,EAAE,IAAI,cAAc,IAAI,KAAK;AAAA,QACpC,WAAW,MAAM,cAAc,QAAQ,SAAS;AAAA,QAEhD,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,UAAU;AAAA,YACV,WAAW;AAAA,YACX,QAAQ,MAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MAClB;AAAA,IAAA;AAAA,EAGZ;AAEA,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV,WAAW;AAAA,MACX,QAAQ,MAAM;AAAA,IAAA;AAAA,EAAA;AAG1B;"}
1
+ {"version":3,"file":"VerticalSingleMenuItem.js","sources":["../../../../../lib/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.tsx"],"sourcesContent":["import Tooltip from '@/components/ui/Tooltip'\nimport Menu from '@/components/ui/Menu'\nimport ScrollBar from '@/components/ui/ScrollBar'\nimport VerticalMenuIcon from './VerticalMenuIcon'\nimport { Link } from 'react-router-dom'\nimport type { CommonProps } from '@/@types/common'\nimport type { Direction } from '@/@types/theme'\nimport type { NavigationTree } from '@/@types/navigation'\n\nconst { MenuItem } = Menu\n\ntype LinkRenderer = (\n nav: NavigationTree,\n children: React.ReactNode,\n) => React.ReactNode\n\ninterface CollapsedItemProps extends CommonProps {\n nav: NavigationTree\n direction?: Direction\n linkRenderer?: LinkRenderer\n onLinkClick?: (link: { key: string; title: string; path: string }) => void\n t: (\n key: string,\n fallback?: string | Record<string, string | number>,\n ) => string\n renderAsIcon?: boolean\n userAuthority: string[]\n currentKey?: string\n parentKeys?: string[]\n}\n\ninterface DefaultItemProps {\n nav: NavigationTree\n onLinkClick?: (link: { key: string; title: string; path: string }) => void\n sideCollapsed?: boolean\n t: (\n key: string,\n fallback?: string | Record<string, string | number>,\n ) => string\n indent?: boolean\n userAuthority: string[]\n showIcon?: boolean\n showTitle?: boolean\n linkRenderer?: LinkRenderer\n}\n\ninterface VerticalMenuItemProps extends CollapsedItemProps, DefaultItemProps {}\n\nconst DefaultItem = (props: DefaultItemProps) => {\n const {\n nav,\n onLinkClick,\n showTitle,\n indent,\n showIcon = true,\n t,\n linkRenderer,\n } = props\n\n const linkContent = (\n <>\n {showIcon && <VerticalMenuIcon icon={nav.icon} />}\n {showTitle && (\n <span className=\"whitespace-normal\">{t(nav.translateKey, nav.title)}</span>\n )}\n </>\n )\n\n const renderLink = () => {\n if (linkRenderer) {\n return linkRenderer(nav, linkContent)\n }\n\n return (\n <Link\n to={nav.path}\n className=\"flex h-full w-full items-center gap-2\"\n target={nav.isExternalLink ? '_blank' : ''}\n onClick={() =>\n onLinkClick?.({\n key: nav.key,\n title: nav.title,\n path: nav.path,\n })\n }\n >\n {linkContent}\n </Link>\n )\n }\n\n return (\n <MenuItem key={nav.key} eventKey={nav.key} dotIndent={indent}>\n {renderLink()}\n </MenuItem>\n )\n}\nconst VerticalSingleMenuItem = (props: VerticalMenuItemProps) => {\n const { sideCollapsed, nav, t, userAuthority, onLinkClick, linkRenderer } =\n props\n\n if (sideCollapsed) {\n return (\n <Tooltip\n title={t(nav.translateKey, nav.title)}\n placement={props.direction === 'rtl' ? 'left' : 'right'}\n >\n <DefaultItem\n nav={nav}\n onLinkClick={onLinkClick}\n t={t}\n userAuthority={userAuthority}\n linkRenderer={linkRenderer}\n showIcon={true}\n showTitle={false}\n indent={props.indent}\n />\n </Tooltip>\n )\n }\n\n return (\n <DefaultItem\n nav={nav}\n onLinkClick={onLinkClick}\n t={t}\n userAuthority={userAuthority}\n linkRenderer={linkRenderer}\n showIcon={true}\n showTitle={true}\n indent={props.indent}\n />\n )\n}\nexport default VerticalSingleMenuItem\n"],"names":[],"mappings":";;;;;;AASA,MAAM,EAAE,aAAa;AAuCrB,MAAM,cAAc,CAAC,UAA4B;AAC7C,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,EAAA,IACA;AAEJ,QAAM,cACF,qBAAA,UAAA,EACK,UAAA;AAAA,IAAA,YAAY,oBAAC,kBAAA,EAAiB,MAAM,IAAI,MAAM;AAAA,IAC9C,aACG,oBAAC,QAAA,EAAK,WAAU,qBAAqB,YAAE,IAAI,cAAc,IAAI,KAAK,EAAA,CAAE;AAAA,EAAA,GAE5E;AAGJ,QAAM,aAAa,MAAM;AACrB,QAAI,cAAc;AACd,aAAO,aAAa,KAAK,WAAW;AAAA,IACxC;AAEA,WACI;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,IAAI,IAAI;AAAA,QACR,WAAU;AAAA,QACV,QAAQ,IAAI,iBAAiB,WAAW;AAAA,QACxC,SAAS,MACL,cAAc;AAAA,UACV,KAAK,IAAI;AAAA,UACT,OAAO,IAAI;AAAA,UACX,MAAM,IAAI;AAAA,QAAA,CACb;AAAA,QAGJ,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGb;AAEA,SACI,oBAAC,UAAA,EAAuB,UAAU,IAAI,KAAK,WAAW,QACjD,UAAA,WAAA,EAAW,GADD,IAAI,GAEnB;AAER;AACA,MAAM,yBAAyB,CAAC,UAAiC;AAC7D,QAAM,EAAE,eAAe,KAAK,GAAG,eAAe,aAAa,iBACvD;AAEJ,MAAI,eAAe;AACf,WACI;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,OAAO,EAAE,IAAI,cAAc,IAAI,KAAK;AAAA,QACpC,WAAW,MAAM,cAAc,QAAQ,SAAS;AAAA,QAEhD,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,UAAU;AAAA,YACV,WAAW;AAAA,YACX,QAAQ,MAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MAClB;AAAA,IAAA;AAAA,EAGZ;AAEA,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV,WAAW;AAAA,MACX,QAAQ,MAAM;AAAA,IAAA;AAAA,EAAA;AAG1B;"}
@@ -1 +1 @@
1
- {"version":3,"file":"VerticalMenuContent.d.ts","sourceRoot":"","sources":["../../../../../../lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAE3D,MAAM,WAAW,wBAAwB;IACrC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,cAAc,EAAE,CAAA;IACjC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,YAAY,CAAC,EAAE,YAAY,CAAA;CAC9B;AA0ED,QAAA,MAAM,mBAAmB,GAAI,OAAO,wBAAwB,4CAmI3D,CAAA;AAED,eAAe,mBAAmB,CAAA"}
1
+ {"version":3,"file":"VerticalMenuContent.d.ts","sourceRoot":"","sources":["../../../../../../lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAE3D,MAAM,WAAW,wBAAwB;IACrC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,cAAc,EAAE,CAAA;IACjC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,YAAY,CAAC,EAAE,YAAY,CAAA;CAC9B;AAkFD,QAAA,MAAM,mBAAmB,GAAI,OAAO,wBAAwB,4CAkI3D,CAAA;AAED,eAAe,mBAAmB,CAAA"}
@@ -4,10 +4,4 @@ declare const meta: Meta<typeof VerticalMenuContent>;
4
4
  export default meta;
5
5
  type TStory = StoryObj<typeof VerticalMenuContent>;
6
6
  export declare const Default: TStory;
7
- export declare const Collapsed: TStory;
8
- export declare const WithExpandedMenu: TStory;
9
- export declare const LimitedAuthority: TStory;
10
- export declare const RTLDirection: TStory;
11
- export declare const MinimalNavigation: TStory;
12
- export declare const WithMenuClick: TStory;
13
7
  //# sourceMappingURL=VerticalMenuContent.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VerticalMenuContent.stories.d.ts","sourceRoot":"","sources":["../../../../../../lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,mBAAmB,MAAM,uBAAuB,CAAA;AA2HvD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,mBAAmB,CA0B1C,CAAA;AAED,eAAe,IAAI,CAAA;AACnB,KAAK,MAAM,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAElD,eAAO,MAAM,OAAO,EAAE,MASrB,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,MASvB,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,MAS9B,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,MAS9B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,MAS1B,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,MAoB/B,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,MAU3B,CAAA"}
1
+ {"version":3,"file":"VerticalMenuContent.stories.d.ts","sourceRoot":"","sources":["../../../../../../lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,mBAAmB,MAAM,uBAAuB,CAAA;AAsBvD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,mBAAmB,CA0B1C,CAAA;AAED,eAAe,IAAI,CAAA;AACnB,KAAK,MAAM,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAElD,eAAO,MAAM,OAAO,EAAE,MAgBrB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"VerticalSingleMenuItem.d.ts","sourceRoot":"","sources":["../../../../../../lib/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAIzD,KAAK,YAAY,GAAG,CAChB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,KACxB,KAAK,CAAC,SAAS,CAAA;AAEpB,UAAU,kBAAmB,SAAQ,WAAW;IAC5C,GAAG,EAAE,cAAc,CAAA;IACnB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC1E,CAAC,EAAE,CACC,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAClD,MAAM,CAAA;IACX,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,UAAU,gBAAgB;IACtB,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC1E,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,CAAC,EAAE,CACC,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAClD,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,YAAY,CAAA;CAC9B;AAED,UAAU,qBAAsB,SAAQ,kBAAkB,EAAE,gBAAgB;CAAG;AAyE/E,QAAA,MAAM,sBAAsB,GAAI,OAAO,qBAAqB,4CAoC3D,CAAA;AACD,eAAe,sBAAsB,CAAA"}
1
+ {"version":3,"file":"VerticalSingleMenuItem.d.ts","sourceRoot":"","sources":["../../../../../../lib/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAIzD,KAAK,YAAY,GAAG,CAChB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,KACxB,KAAK,CAAC,SAAS,CAAA;AAEpB,UAAU,kBAAmB,SAAQ,WAAW;IAC5C,GAAG,EAAE,cAAc,CAAA;IACnB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC1E,CAAC,EAAE,CACC,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAClD,MAAM,CAAA;IACX,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,UAAU,gBAAgB;IACtB,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC1E,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,CAAC,EAAE,CACC,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAClD,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,YAAY,CAAA;CAC9B;AAED,UAAU,qBAAsB,SAAQ,kBAAkB,EAAE,gBAAgB;CAAG;AAmD/E,QAAA,MAAM,sBAAsB,GAAI,OAAO,qBAAqB,4CAoC3D,CAAA;AACD,eAAe,sBAAsB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"cadastros.submenu.d.ts","sourceRoot":"","sources":["../../../../../../../lib/base/configs/navigation.config/submenu/ticket/cadastros.submenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AASpD,QAAA,MAAM,gBAAgB,EAAE,cAAc,EAQrC,CAAA;AAED,eAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"cadastros.submenu.d.ts","sourceRoot":"","sources":["../../../../../../../lib/base/configs/navigation.config/submenu/ticket/cadastros.submenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAepD,QAAA,MAAM,gBAAgB,EAAE,cAAc,EAcrC,CAAA;AAED,eAAe,gBAAgB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"relatorios.submenu.d.ts","sourceRoot":"","sources":["../../../../../../../lib/base/configs/navigation.config/submenu/ticket/relatorios.submenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAQpD,QAAA,MAAM,iBAAiB,EAAE,cAAc,EAMtC,CAAA;AAED,eAAe,iBAAiB,CAAA"}
1
+ {"version":3,"file":"relatorios.submenu.d.ts","sourceRoot":"","sources":["../../../../../../../lib/base/configs/navigation.config/submenu/ticket/relatorios.submenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAepD,QAAA,MAAM,iBAAiB,EAAE,cAAc,EAYtC,CAAA;AAED,eAAe,iBAAiB,CAAA"}
@@ -4493,9 +4493,6 @@ hr:is(.dark *){
4493
4493
  .-left-2{
4494
4494
  left: -0.5rem;
4495
4495
  }
4496
- .-left-3{
4497
- left: -0.75rem;
4498
- }
4499
4496
  .-right-2{
4500
4497
  right: -0.5rem;
4501
4498
  }
@@ -4556,9 +4553,6 @@ hr:is(.dark *){
4556
4553
  .z-10{
4557
4554
  z-index: 10;
4558
4555
  }
4559
- .z-20{
4560
- z-index: 20;
4561
- }
4562
4556
  .z-30{
4563
4557
  z-index: 30;
4564
4558
  }
@@ -5275,9 +5269,6 @@ hr:is(.dark *){
5275
5269
  .min-w-\[330px\]{
5276
5270
  min-width: 330px;
5277
5271
  }
5278
- .min-w-\[calc\(100\%\+1\.5rem\)\]{
5279
- min-width: calc(100% + 1.5rem);
5280
- }
5281
5272
  .min-w-full{
5282
5273
  min-width: 100%;
5283
5274
  }
@@ -5624,6 +5615,9 @@ hr:is(.dark *){
5624
5615
  .text-clip{
5625
5616
  text-overflow: clip;
5626
5617
  }
5618
+ .whitespace-normal{
5619
+ white-space: normal;
5620
+ }
5627
5621
  .whitespace-nowrap{
5628
5622
  white-space: nowrap;
5629
5623
  }
@@ -7110,9 +7104,6 @@ hr:is(.dark *){
7110
7104
  .active\:bg-gray-100:active{
7111
7105
  background-color: var(--gray-100);
7112
7106
  }
7113
- .group\/item:hover .group-hover\/item\:block{
7114
- display: block;
7115
- }
7116
7107
  .group:hover .group-hover\:block{
7117
7108
  display: block;
7118
7109
  }
@@ -7157,9 +7148,6 @@ hr:is(.dark *){
7157
7148
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
7158
7149
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
7159
7150
  }
7160
- .group\/item:focus-visible .group-focus-visible\/item\:block{
7161
- display: block;
7162
- }
7163
7151
  .group.active .group-\[\.active\]\:bg-white{
7164
7152
  --tw-bg-opacity: 1;
7165
7153
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
@@ -4,15 +4,27 @@ import vinculoUnidadeMedidaSubmenu from "./config/vinculoUnidadeMedida.submenu.j
4
4
  import vinculoTransgeniaOperacaoSubmenu from "./config/vinculoTransgeniaOperacao.submenu.js";
5
5
  import vinculoProdutoOperacaoSubmenu from "./config/vinculoProdutoOperacao.submenu.js";
6
6
  import vinculoProdutorOperacaoSubmenu from "./config/vinculoProdutorOperacao.submenu.js";
7
+ import motivoCancelamentoSubmenu from "./config/motivoCancelamento.submenu.js";
8
+ import cadastrosOperacaoSubmenu from "./config/cadastrosOperacao.submenu.js";
9
+ import operacoesMovimentacaoGraosSubmenu from "./config/operacoesMovimentacaoGraos.submenu.js";
7
10
  import recebimentoCentroSubmenu from "./config/recebimentoCentro.submenu.js";
11
+ import rotaRomaneioSubmenu from "./config/rotaRomaneio.submenu.js";
12
+ import tabelaBiodieselSubmenu from "./config/tabelaBiodiesel.submenu.js";
13
+ import tabelaClassificacaoSubmenu from "./config/tabelaClassificacao.submenu.js";
8
14
  const cadastrosSubmenu = [
9
- { ...recebimentoCentroSubmenu, sortOrder: 1 },
10
- { ...vinculoSafraOperacaoSubmenu, sortOrder: 2 },
11
- { ...vinculoDepositoOperacaoSubmenu, sortOrder: 3 },
12
- { ...vinculoUnidadeMedidaSubmenu, sortOrder: 4 },
13
- { ...vinculoTransgeniaOperacaoSubmenu, sortOrder: 5 },
14
- { ...vinculoProdutoOperacaoSubmenu, sortOrder: 6 },
15
- { ...vinculoProdutorOperacaoSubmenu, sortOrder: 7 }
15
+ { ...operacoesMovimentacaoGraosSubmenu, sortOrder: 1 },
16
+ { ...recebimentoCentroSubmenu, sortOrder: 2 },
17
+ { ...vinculoSafraOperacaoSubmenu, sortOrder: 3 },
18
+ { ...vinculoDepositoOperacaoSubmenu, sortOrder: 4 },
19
+ { ...vinculoUnidadeMedidaSubmenu, sortOrder: 5 },
20
+ { ...vinculoTransgeniaOperacaoSubmenu, sortOrder: 6 },
21
+ { ...vinculoProdutoOperacaoSubmenu, sortOrder: 7 },
22
+ { ...vinculoProdutorOperacaoSubmenu, sortOrder: 8 },
23
+ { ...motivoCancelamentoSubmenu, sortOrder: 9 },
24
+ { ...cadastrosOperacaoSubmenu, sortOrder: 10 },
25
+ { ...rotaRomaneioSubmenu, sortOrder: 11 },
26
+ { ...tabelaBiodieselSubmenu, sortOrder: 12 },
27
+ { ...tabelaClassificacaoSubmenu, sortOrder: 13 }
16
28
  ];
17
29
  export {
18
30
  cadastrosSubmenu as default
@@ -1 +1 @@
1
- {"version":3,"file":"cadastros.submenu.js","sources":["../../../../../../lib/base/configs/navigation.config/submenu/ticket/cadastros.submenu.ts"],"sourcesContent":["import { NavigationTree } from \"@/@types/navigation\"\nimport vinculoSafraOperacaoSubmenu from \"./config/vinculoSafraOperacao.submenu\"\nimport vinculoDepositoOperacaoSubmenu from \"./config/vinculoDepositoOperacao.submenu\"\nimport vinculoUnidadeMedidaSubmenu from \"./config/vinculoUnidadeMedida.submenu\"\nimport vinculoTransgeniaOperacaoSubmenu from \"./config/vinculoTransgeniaOperacao.submenu\"\nimport vinculoProdutoOperacaoSubmenu from \"./config/vinculoProdutoOperacao.submenu\"\nimport vinculoProdutorOperacaoSubmenu from \"./config/vinculoProdutorOperacao.submenu\"\nimport recebimentoCentroSubmenu from \"./config/recebimentoCentro.submenu\"\n\nconst cadastrosSubmenu: NavigationTree[] = [\n { ...recebimentoCentroSubmenu, sortOrder: 1 },\n { ...vinculoSafraOperacaoSubmenu, sortOrder: 2 },\n { ...vinculoDepositoOperacaoSubmenu, sortOrder: 3 },\n { ...vinculoUnidadeMedidaSubmenu, sortOrder: 4 },\n { ...vinculoTransgeniaOperacaoSubmenu, sortOrder: 5 },\n { ...vinculoProdutoOperacaoSubmenu, sortOrder: 6 },\n { ...vinculoProdutorOperacaoSubmenu, sortOrder: 7 },\n]\n\nexport default cadastrosSubmenu\n"],"names":[],"mappings":";;;;;;;AASA,MAAM,mBAAqC;AAAA,EACvC,EAAE,GAAG,0BAA0B,WAAW,EAAA;AAAA,EAC1C,EAAE,GAAG,6BAA6B,WAAW,EAAA;AAAA,EAC7C,EAAE,GAAG,gCAAgC,WAAW,EAAA;AAAA,EAChD,EAAE,GAAG,6BAA6B,WAAW,EAAA;AAAA,EAC7C,EAAE,GAAG,kCAAkC,WAAW,EAAA;AAAA,EAClD,EAAE,GAAG,+BAA+B,WAAW,EAAA;AAAA,EAC/C,EAAE,GAAG,gCAAgC,WAAW,EAAA;AACpD;"}
1
+ {"version":3,"file":"cadastros.submenu.js","sources":["../../../../../../lib/base/configs/navigation.config/submenu/ticket/cadastros.submenu.ts"],"sourcesContent":["import { NavigationTree } from \"@/@types/navigation\"\nimport vinculoSafraOperacaoSubmenu from \"./config/vinculoSafraOperacao.submenu\"\nimport vinculoDepositoOperacaoSubmenu from \"./config/vinculoDepositoOperacao.submenu\"\nimport vinculoUnidadeMedidaSubmenu from \"./config/vinculoUnidadeMedida.submenu\"\nimport vinculoTransgeniaOperacaoSubmenu from \"./config/vinculoTransgeniaOperacao.submenu\"\nimport vinculoProdutoOperacaoSubmenu from \"./config/vinculoProdutoOperacao.submenu\"\nimport vinculoProdutorOperacaoSubmenu from \"./config/vinculoProdutorOperacao.submenu\"\nimport motivoCancelamentoSubmenu from \"./config/motivoCancelamento.submenu\"\nimport cadastrosOperacaoSubmenu from \"./config/cadastrosOperacao.submenu\"\nimport operacoesMovimentacaoGraosSubmenu from \"./config/operacoesMovimentacaoGraos.submenu\"\nimport recebimentoCentroSubmenu from \"./config/recebimentoCentro.submenu\"\nimport rotaRomaneioSubmenu from \"./config/rotaRomaneio.submenu\"\nimport tabelaBiodieselSubmenu from \"./config/tabelaBiodiesel.submenu\"\nimport tabelaClassificacaoSubmenu from \"./config/tabelaClassificacao.submenu\"\n\nconst cadastrosSubmenu: NavigationTree[] = [\n { ...operacoesMovimentacaoGraosSubmenu, sortOrder: 1 },\n { ...recebimentoCentroSubmenu, sortOrder: 2 },\n { ...vinculoSafraOperacaoSubmenu, sortOrder: 3 },\n { ...vinculoDepositoOperacaoSubmenu, sortOrder: 4 },\n { ...vinculoUnidadeMedidaSubmenu, sortOrder: 5 },\n { ...vinculoTransgeniaOperacaoSubmenu, sortOrder: 6 },\n { ...vinculoProdutoOperacaoSubmenu, sortOrder: 7 },\n { ...vinculoProdutorOperacaoSubmenu, sortOrder: 8 },\n { ...motivoCancelamentoSubmenu, sortOrder: 9 },\n { ...cadastrosOperacaoSubmenu, sortOrder: 10 },\n { ...rotaRomaneioSubmenu, sortOrder: 11 },\n { ...tabelaBiodieselSubmenu, sortOrder: 12 },\n { ...tabelaClassificacaoSubmenu, sortOrder: 13 },\n]\n\nexport default cadastrosSubmenu\n"],"names":[],"mappings":";;;;;;;;;;;;;AAeA,MAAM,mBAAqC;AAAA,EACvC,EAAE,GAAG,mCAAmC,WAAW,EAAA;AAAA,EACnD,EAAE,GAAG,0BAA0B,WAAW,EAAA;AAAA,EAC1C,EAAE,GAAG,6BAA6B,WAAW,EAAA;AAAA,EAC7C,EAAE,GAAG,gCAAgC,WAAW,EAAA;AAAA,EAChD,EAAE,GAAG,6BAA6B,WAAW,EAAA;AAAA,EAC7C,EAAE,GAAG,kCAAkC,WAAW,EAAA;AAAA,EAClD,EAAE,GAAG,+BAA+B,WAAW,EAAA;AAAA,EAC/C,EAAE,GAAG,gCAAgC,WAAW,EAAA;AAAA,EAChD,EAAE,GAAG,2BAA2B,WAAW,EAAA;AAAA,EAC3C,EAAE,GAAG,0BAA0B,WAAW,GAAA;AAAA,EAC1C,EAAE,GAAG,qBAAqB,WAAW,GAAA;AAAA,EACrC,EAAE,GAAG,wBAAwB,WAAW,GAAA;AAAA,EACxC,EAAE,GAAG,4BAA4B,WAAW,GAAA;AAChD;"}
@@ -1,14 +1,26 @@
1
+ import extratoProdutorSubmenu from "./config/extratoProdutor.submenu.js";
2
+ import controleTicketSubmenu from "./config/controleTicket.submenu.js";
1
3
  import motivoCancelamentoSubmenu from "./config/motivoCancelamento.submenu.js";
2
4
  import cadastrosOperacaoSubmenu from "./config/cadastrosOperacao.submenu.js";
3
5
  import operacoesMovimentacaoGraosSubmenu from "./config/operacoesMovimentacaoGraos.submenu.js";
6
+ import relatorioFisicoFiscalSubmenu from "./config/relatorioFisicoFiscal.submenu.js";
7
+ import recebimentoCentroSubmenu from "./config/recebimentoCentro.submenu.js";
4
8
  import rotaRomaneioSubmenu from "./config/rotaRomaneio.submenu.js";
5
9
  import tabelaBiodieselSubmenu from "./config/tabelaBiodiesel.submenu.js";
10
+ import toleranciaDiferencaPrecoSubmenu from "./config/toleranciaDiferencaPreco.submenu.js";
11
+ import relatorioMediaPonderadaSubmenu from "./config/relatorioMediaPonderada.submenu.js";
6
12
  const relatoriosSubmenu = [
7
13
  { ...motivoCancelamentoSubmenu, sortOrder: 1 },
8
14
  { ...cadastrosOperacaoSubmenu, sortOrder: 2 },
9
15
  { ...operacoesMovimentacaoGraosSubmenu, sortOrder: 3 },
10
16
  { ...rotaRomaneioSubmenu, sortOrder: 4 },
11
- { ...tabelaBiodieselSubmenu, sortOrder: 5 }
17
+ { ...tabelaBiodieselSubmenu, sortOrder: 5 },
18
+ { ...extratoProdutorSubmenu, sortOrder: 6 },
19
+ { ...controleTicketSubmenu, sortOrder: 7 },
20
+ { ...relatorioFisicoFiscalSubmenu, sortOrder: 8 },
21
+ { ...relatorioMediaPonderadaSubmenu, sortOrder: 9 },
22
+ { ...recebimentoCentroSubmenu, sortOrder: 10 },
23
+ { ...toleranciaDiferencaPrecoSubmenu, sortOrder: 11 }
12
24
  ];
13
25
  export {
14
26
  relatoriosSubmenu as default
@@ -1 +1 @@
1
- {"version":3,"file":"relatorios.submenu.js","sources":["../../../../../../lib/base/configs/navigation.config/submenu/ticket/relatorios.submenu.ts"],"sourcesContent":["import { NavigationTree } from \"@/@types/navigation\"\nimport motivoCancelamentoSubmenu from \"./config/motivoCancelamento.submenu\"\nimport cadastrosOperacaoSubmenu from \"./config/cadastrosOperacao.submenu\"\nimport operacoesMovimentacaoGraosSubmenu from \"./config/operacoesMovimentacaoGraos.submenu\"\nimport rotaRomaneioSubmenu from \"./config/rotaRomaneio.submenu\"\nimport tabelaBiodieselSubmenu from \"./config/tabelaBiodiesel.submenu\"\n\n\nconst relatoriosSubmenu: NavigationTree[] = [\n { ...motivoCancelamentoSubmenu, sortOrder: 1 },\n { ...cadastrosOperacaoSubmenu, sortOrder: 2 },\n { ...operacoesMovimentacaoGraosSubmenu, sortOrder: 3 },\n { ...rotaRomaneioSubmenu, sortOrder: 4 },\n { ...tabelaBiodieselSubmenu, sortOrder: 5 },\n]\n\nexport default relatoriosSubmenu\n"],"names":[],"mappings":";;;;;AAQA,MAAM,oBAAsC;AAAA,EACxC,EAAE,GAAG,2BAA2B,WAAW,EAAA;AAAA,EAC3C,EAAE,GAAG,0BAA0B,WAAW,EAAA;AAAA,EAC1C,EAAE,GAAG,mCAAmC,WAAW,EAAA;AAAA,EACnD,EAAE,GAAG,qBAAqB,WAAW,EAAA;AAAA,EACrC,EAAE,GAAG,wBAAwB,WAAW,EAAA;AAC5C;"}
1
+ {"version":3,"file":"relatorios.submenu.js","sources":["../../../../../../lib/base/configs/navigation.config/submenu/ticket/relatorios.submenu.ts"],"sourcesContent":["import { NavigationTree } from \"@/@types/navigation\"\nimport extratoProdutorSubmenu from \"./config/extratoProdutor.submenu\"\nimport controleTicketSubmenu from \"./config/controleTicket.submenu\"\nimport motivoCancelamentoSubmenu from \"./config/motivoCancelamento.submenu\"\nimport cadastrosOperacaoSubmenu from \"./config/cadastrosOperacao.submenu\"\nimport operacoesMovimentacaoGraosSubmenu from \"./config/operacoesMovimentacaoGraos.submenu\"\nimport relatorioFisicoFiscalSubmenu from \"./config/relatorioFisicoFiscal.submenu\"\nimport recebimentoCentroSubmenu from \"./config/recebimentoCentro.submenu\"\nimport rotaRomaneioSubmenu from \"./config/rotaRomaneio.submenu\"\nimport tabelaBiodieselSubmenu from \"./config/tabelaBiodiesel.submenu\"\nimport tabelaClassificacaoSubmenu from \"./config/tabelaClassificacao.submenu\"\nimport toleranciaDiferencaPrecoSubmenu from \"./config/toleranciaDiferencaPreco.submenu\"\nimport relatorioMediaPonderadaSubmenu from \"./config/relatorioMediaPonderada.submenu\"\n\n\nconst relatoriosSubmenu: NavigationTree[] = [\n { ...motivoCancelamentoSubmenu, sortOrder: 1 },\n { ...cadastrosOperacaoSubmenu, sortOrder: 2 },\n { ...operacoesMovimentacaoGraosSubmenu, sortOrder: 3 },\n { ...rotaRomaneioSubmenu, sortOrder: 4 },\n { ...tabelaBiodieselSubmenu, sortOrder: 5 },\n { ...extratoProdutorSubmenu, sortOrder: 6 },\n { ...controleTicketSubmenu, sortOrder: 7 },\n { ...relatorioFisicoFiscalSubmenu, sortOrder: 8 },\n { ...relatorioMediaPonderadaSubmenu, sortOrder: 9 },\n { ...recebimentoCentroSubmenu, sortOrder: 10 },\n { ...toleranciaDiferencaPrecoSubmenu, sortOrder: 11 },\n]\n\nexport default relatoriosSubmenu\n"],"names":[],"mappings":";;;;;;;;;;;AAeA,MAAM,oBAAsC;AAAA,EACxC,EAAE,GAAG,2BAA2B,WAAW,EAAA;AAAA,EAC3C,EAAE,GAAG,0BAA0B,WAAW,EAAA;AAAA,EAC1C,EAAE,GAAG,mCAAmC,WAAW,EAAA;AAAA,EACnD,EAAE,GAAG,qBAAqB,WAAW,EAAA;AAAA,EACrC,EAAE,GAAG,wBAAwB,WAAW,EAAA;AAAA,EACxC,EAAE,GAAG,wBAAwB,WAAW,EAAA;AAAA,EACxC,EAAE,GAAG,uBAAuB,WAAW,EAAA;AAAA,EACvC,EAAE,GAAG,8BAA8B,WAAW,EAAA;AAAA,EAC9C,EAAE,GAAG,gCAAgC,WAAW,EAAA;AAAA,EAChD,EAAE,GAAG,0BAA0B,WAAW,GAAA;AAAA,EAC1C,EAAE,GAAG,iCAAiC,WAAW,GAAA;AACrD;"}
@@ -2,126 +2,25 @@ import type { Meta, StoryObj } from '@storybook/react'
2
2
  import { BrowserRouter } from 'react-router-dom'
3
3
  import VerticalMenuContent from './VerticalMenuContent'
4
4
  import type { NavigationTree } from '@/@types/navigation'
5
- import {
6
- NAV_ITEM_TYPE_COLLAPSE,
7
- NAV_ITEM_TYPE_ITEM,
8
- } from '@/constants/navigation.constant'
5
+ import modulesNavigationConfig from '@base/configs/navigation.config/modules.navigation'
9
6
 
10
- const mockNavigationTree: NavigationTree[] = [
11
- {
12
- key: 'inicio',
13
- path: '/inicio',
14
- title: 'Início',
15
- translateKey: 'nav.inicio',
16
- icon: '',
17
- type: NAV_ITEM_TYPE_ITEM,
18
- authority: ['/inicio'],
19
- subMenu: [],
20
- },
21
- {
22
- key: 'cadastros',
23
- path: '',
24
- title: 'Cadastros',
25
- translateKey: 'nav.cadastros',
26
- icon: '',
27
- type: NAV_ITEM_TYPE_COLLAPSE,
28
- authority: ['/cadastros'],
29
- subMenu: [
30
- {
31
- key: 'clientes',
32
- path: '/cadastros/clientes',
33
- title: 'Clientes',
34
- translateKey: 'nav.clientes',
35
- icon: '',
36
- type: NAV_ITEM_TYPE_ITEM,
37
- authority: ['/cadastros/clientes'],
38
- subMenu: [],
39
- },
40
- {
41
- key: 'fornecedores',
42
- path: '/cadastros/fornecedores',
43
- title: 'Fornecedores',
44
- translateKey: 'nav.fornecedores',
45
- icon: '',
46
- type: NAV_ITEM_TYPE_ITEM,
47
- authority: ['/cadastros/fornecedores'],
48
- subMenu: [],
49
- },
50
- ],
51
- },
52
- {
53
- key: 'relatorios',
54
- path: '/relatorios',
55
- title: 'Relatórios',
56
- translateKey: 'nav.relatorios',
57
- icon: 'ChartBarIcon',
58
- type: NAV_ITEM_TYPE_ITEM,
59
- authority: ['/relatorios'],
60
- subMenu: [],
61
- },
62
- {
63
- key: 'configuracoes',
64
- path: '',
65
- title: 'Configurações',
66
- translateKey: 'nav.configuracoes',
67
- icon: '',
68
- type: NAV_ITEM_TYPE_COLLAPSE,
69
- authority: ['/configuracoes'],
70
- subMenu: [
71
- {
72
- key: 'perfil',
73
- path: '/configuracoes/perfil',
74
- title: 'Perfil',
75
- translateKey: 'nav.perfil',
76
- icon: '',
77
- type: NAV_ITEM_TYPE_ITEM,
78
- authority: ['/configuracoes/perfil'],
79
- subMenu: [],
80
- },
81
- {
82
- key: 'integracoes',
83
- path: '',
84
- title: 'Integrações',
85
- translateKey: 'nav.integracoes',
86
- icon: '',
87
- type: NAV_ITEM_TYPE_COLLAPSE,
88
- authority: ['/configuracoes/integracoes'],
89
- subMenu: [
90
- {
91
- key: 'webhooks',
92
- path: '/configuracoes/integracoes/webhooks',
93
- title: 'Webhooks',
94
- translateKey: 'nav.webhooks',
95
- icon: 'WebhookIcon',
96
- type: NAV_ITEM_TYPE_ITEM,
97
- authority: ['/configuracoes/integracoes/webhooks'],
98
- subMenu: [],
99
- },
100
- {
101
- key: 'lorem.ipsum',
102
- path: '/configuracoes/integracoes/lorem-ipsum',
103
- title: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
104
- translateKey: 'nav.loremIpsum',
105
- icon: 'LoremIpsumIcon',
106
- type: NAV_ITEM_TYPE_ITEM,
107
- authority: ['/configuracoes/integracoes/lorem-ipsum'],
108
- subMenu: [],
109
- },
110
- ],
111
- },
112
- ],
113
- },
114
- ]
7
+ const collectAuthorityPaths = (navTree: NavigationTree[]): string[] => {
8
+ return navTree.reduce((acc: string[], node) => {
9
+ if (node.path) {
10
+ acc.push(node.path)
11
+ }
12
+
13
+ if (node.subMenu?.length) {
14
+ acc.push(...collectAuthorityPaths(node.subMenu))
15
+ }
16
+
17
+ return acc
18
+ }, [])
19
+ }
115
20
 
116
- const allUserAuthority = [
117
- '/inicio',
118
- '/cadastros/clientes',
119
- '/cadastros/fornecedores',
120
- '/relatorios',
121
- '/configuracoes/perfil',
122
- '/configuracoes/integracoes/webhooks',
123
- '/configuracoes/integracoes/lorem-ipsum',
124
- ]
21
+ const allAuthority = Array.from(
22
+ new Set(collectAuthorityPaths(modulesNavigationConfig)),
23
+ )
125
24
 
126
25
  const meta: Meta<typeof VerticalMenuContent> = {
127
26
  title: '@ecme/Template/VerticalMenuContent',
@@ -157,88 +56,17 @@ type TStory = StoryObj<typeof VerticalMenuContent>
157
56
  export const Default: TStory = {
158
57
  args: {
159
58
  collapsed: false,
160
- routeKey: '/inicio',
161
- navigationTree: mockNavigationTree,
162
- userAuthority: allUserAuthority,
163
- direction: 'ltr',
164
- translationSetup: true,
165
- },
166
- }
167
-
168
- export const Collapsed: TStory = {
169
- args: {
170
- collapsed: true,
171
- routeKey: '/cadastros/clientes',
172
- navigationTree: mockNavigationTree,
173
- userAuthority: allUserAuthority,
174
- direction: 'ltr',
175
- translationSetup: true,
176
- },
177
- }
178
-
179
- export const WithExpandedMenu: TStory = {
180
- args: {
181
- collapsed: false,
182
- routeKey: '/configuracoes/integracoes/webhooks',
183
- navigationTree: mockNavigationTree,
184
- userAuthority: allUserAuthority,
185
- direction: 'ltr',
186
- translationSetup: true,
187
- },
188
- }
189
-
190
- export const LimitedAuthority: TStory = {
191
- args: {
192
- collapsed: false,
193
- routeKey: '/inicio',
194
- navigationTree: mockNavigationTree,
195
- userAuthority: ['/inicio', '/relatorios'],
196
- direction: 'ltr',
197
- translationSetup: true,
198
- },
199
- }
200
-
201
- export const RTLDirection: TStory = {
202
- args: {
203
- collapsed: false,
204
- routeKey: '/inicio',
205
- navigationTree: mockNavigationTree,
206
- userAuthority: allUserAuthority,
207
- direction: 'rtl',
208
- translationSetup: true,
209
- },
210
- }
211
-
212
- export const MinimalNavigation: TStory = {
213
- args: {
214
- collapsed: false,
215
- routeKey: '/inicio',
216
- navigationTree: [
217
- {
218
- key: 'inicio',
219
- path: '/inicio',
220
- title: 'Início',
221
- translateKey: 'nav.inicio',
222
- icon: '',
223
- type: NAV_ITEM_TYPE_ITEM,
224
- authority: ['/inicio'],
225
- subMenu: [],
226
- },
227
- ],
228
- userAuthority: ['/inicio'],
59
+ routeKey: 'modules',
60
+ navigationTree: modulesNavigationConfig,
61
+ userAuthority: allAuthority,
229
62
  direction: 'ltr',
230
63
  translationSetup: true,
231
64
  },
232
- }
233
-
234
- export const WithMenuClick: TStory = {
235
- args: {
236
- collapsed: false,
237
- routeKey: '/inicio',
238
- navigationTree: mockNavigationTree,
239
- userAuthority: allUserAuthority,
240
- direction: 'ltr',
241
- translationSetup: true,
242
- onMenuItemClick: () => alert('Menu item clicked!'),
243
- },
65
+ decorators: [
66
+ (Story) => (
67
+ <div style={{ maxWidth: '25vw' }}>
68
+ <Story />
69
+ </div>
70
+ ),
71
+ ],
244
72
  }
@@ -74,28 +74,36 @@ const filterNavigationByAuthority = (
74
74
  }, [])
75
75
  }
76
76
 
77
+ const compareNavigationOrder = (a: NavigationTree, b: NavigationTree) => {
78
+ const orderA = a.sortOrder ?? Number.MAX_SAFE_INTEGER
79
+ const orderB = b.sortOrder ?? Number.MAX_SAFE_INTEGER
80
+
81
+ if (orderA !== orderB) {
82
+ return orderA - orderB
83
+ }
84
+
85
+ const titleCompare = a.title.localeCompare(b.title, 'pt-BR')
86
+
87
+ if (titleCompare !== 0) {
88
+ return titleCompare
89
+ }
90
+
91
+ return a.key.localeCompare(b.key, 'pt-BR')
92
+ }
93
+
94
+ const sortNavigationNodeList = (navTree: NavigationTree[]): NavigationTree[] =>
95
+ [...navTree].sort(compareNavigationOrder)
96
+
77
97
  const sortNavigationRecursively = (
78
98
  navTree: NavigationTree[],
79
99
  ): NavigationTree[] => {
80
- return [...navTree]
100
+ return sortNavigationNodeList(navTree)
81
101
  .map((nav) => ({
82
102
  ...nav,
83
103
  subMenu: nav.subMenu
84
104
  ? sortNavigationRecursively(nav.subMenu)
85
105
  : nav.subMenu,
86
106
  }))
87
- .sort((a, b) => {
88
- if (a.sortOrder !== undefined || b.sortOrder !== undefined) {
89
- const orderA = a.sortOrder ?? Number.MAX_SAFE_INTEGER
90
- const orderB = b.sortOrder ?? Number.MAX_SAFE_INTEGER
91
-
92
- if (orderA !== orderB) {
93
- return orderA - orderB
94
- }
95
- }
96
-
97
- return a.title.localeCompare(b.title, 'pt-BR')
98
- })
99
107
  }
100
108
 
101
109
  const VerticalMenuContent = (props: VerticalMenuContentProps) => {
@@ -122,8 +130,6 @@ const VerticalMenuContent = (props: VerticalMenuContentProps) => {
122
130
  return sortNavigationRecursively(filteredTree)
123
131
  }, [navigationTree, userAuthority])
124
132
 
125
- console.log('Filtered Navigation Tree:', filteredNavigationTree)
126
-
127
133
  const { activedRoute } = useMenuActive(filteredNavigationTree, routeKey)
128
134
 
129
135
  useEffect(() => {
@@ -146,10 +152,11 @@ const VerticalMenuContent = (props: VerticalMenuContentProps) => {
146
152
  indent?: boolean,
147
153
  ) => {
148
154
  const nextCascade = cascade + 1
155
+ const orderedNavTree = sortNavigationNodeList(navTree)
149
156
 
150
157
  return (
151
158
  <>
152
- {navTree.map((nav) => (
159
+ {orderedNavTree.map((nav) => (
153
160
  <Fragment key={nav.key}>
154
161
  {nav.type === NAV_ITEM_TYPE_ITEM && (
155
162
  <VerticalSingleMenuItem
@@ -57,37 +57,15 @@ const DefaultItem = (props: DefaultItemProps) => {
57
57
  linkRenderer,
58
58
  } = props
59
59
 
60
- const translatedTitle = t(nav.translateKey, nav.title)
61
-
62
- const renderItemContent = (titleClassName?: string) => (
60
+ const linkContent = (
63
61
  <>
64
62
  {showIcon && <VerticalMenuIcon icon={nav.icon} />}
65
63
  {showTitle && (
66
- <span className={titleClassName}>{translatedTitle}</span>
64
+ <span className="whitespace-normal">{t(nav.translateKey, nav.title)}</span>
67
65
  )}
68
66
  </>
69
67
  )
70
68
 
71
- const linkContent = (
72
- <span className="relative flex min-w-0 flex-1 items-center gap-2">
73
- <span className="flex min-w-0 flex-1 items-center gap-2 overflow-hidden">
74
- {renderItemContent('truncate')}
75
- </span>
76
- {showTitle && (
77
- <div className="w-100 absolute -left-3 top-1/2 z-20 hidden min-w-[calc(100%+1.5rem)] -translate-y-1/2 group-hover/item:block group-focus-visible/item:block">
78
- <ScrollBar
79
- autoHide
80
- className="max-h-16 rounded-lg bg-gray-100 text-gray-900 dark:bg-gray-700 dark:text-gray-100"
81
- >
82
- <div className="flex h-full w-max min-w-full items-center gap-2 whitespace-nowrap rounded-lg px-3 font-semibold">
83
- {renderItemContent()}
84
- </div>
85
- </ScrollBar>
86
- </div>
87
- )}
88
- </span>
89
- )
90
-
91
69
  const renderLink = () => {
92
70
  if (linkRenderer) {
93
71
  return linkRenderer(nav, linkContent)
@@ -96,7 +74,7 @@ const DefaultItem = (props: DefaultItemProps) => {
96
74
  return (
97
75
  <Link
98
76
  to={nav.path}
99
- className="group/item relative flex w-full min-w-0 items-center gap-2"
77
+ className="flex h-full w-full items-center gap-2"
100
78
  target={nav.isExternalLink ? '_blank' : ''}
101
79
  onClick={() =>
102
80
  onLinkClick?.({
@@ -5,16 +5,28 @@ import vinculoUnidadeMedidaSubmenu from "./config/vinculoUnidadeMedida.submenu"
5
5
  import vinculoTransgeniaOperacaoSubmenu from "./config/vinculoTransgeniaOperacao.submenu"
6
6
  import vinculoProdutoOperacaoSubmenu from "./config/vinculoProdutoOperacao.submenu"
7
7
  import vinculoProdutorOperacaoSubmenu from "./config/vinculoProdutorOperacao.submenu"
8
+ import motivoCancelamentoSubmenu from "./config/motivoCancelamento.submenu"
9
+ import cadastrosOperacaoSubmenu from "./config/cadastrosOperacao.submenu"
10
+ import operacoesMovimentacaoGraosSubmenu from "./config/operacoesMovimentacaoGraos.submenu"
8
11
  import recebimentoCentroSubmenu from "./config/recebimentoCentro.submenu"
12
+ import rotaRomaneioSubmenu from "./config/rotaRomaneio.submenu"
13
+ import tabelaBiodieselSubmenu from "./config/tabelaBiodiesel.submenu"
14
+ import tabelaClassificacaoSubmenu from "./config/tabelaClassificacao.submenu"
9
15
 
10
16
  const cadastrosSubmenu: NavigationTree[] = [
11
- { ...recebimentoCentroSubmenu, sortOrder: 1 },
12
- { ...vinculoSafraOperacaoSubmenu, sortOrder: 2 },
13
- { ...vinculoDepositoOperacaoSubmenu, sortOrder: 3 },
14
- { ...vinculoUnidadeMedidaSubmenu, sortOrder: 4 },
15
- { ...vinculoTransgeniaOperacaoSubmenu, sortOrder: 5 },
16
- { ...vinculoProdutoOperacaoSubmenu, sortOrder: 6 },
17
- { ...vinculoProdutorOperacaoSubmenu, sortOrder: 7 },
17
+ { ...operacoesMovimentacaoGraosSubmenu, sortOrder: 1 },
18
+ { ...recebimentoCentroSubmenu, sortOrder: 2 },
19
+ { ...vinculoSafraOperacaoSubmenu, sortOrder: 3 },
20
+ { ...vinculoDepositoOperacaoSubmenu, sortOrder: 4 },
21
+ { ...vinculoUnidadeMedidaSubmenu, sortOrder: 5 },
22
+ { ...vinculoTransgeniaOperacaoSubmenu, sortOrder: 6 },
23
+ { ...vinculoProdutoOperacaoSubmenu, sortOrder: 7 },
24
+ { ...vinculoProdutorOperacaoSubmenu, sortOrder: 8 },
25
+ { ...motivoCancelamentoSubmenu, sortOrder: 9 },
26
+ { ...cadastrosOperacaoSubmenu, sortOrder: 10 },
27
+ { ...rotaRomaneioSubmenu, sortOrder: 11 },
28
+ { ...tabelaBiodieselSubmenu, sortOrder: 12 },
29
+ { ...tabelaClassificacaoSubmenu, sortOrder: 13 },
18
30
  ]
19
31
 
20
32
  export default cadastrosSubmenu
@@ -1,9 +1,16 @@
1
1
  import { NavigationTree } from "@/@types/navigation"
2
+ import extratoProdutorSubmenu from "./config/extratoProdutor.submenu"
3
+ import controleTicketSubmenu from "./config/controleTicket.submenu"
2
4
  import motivoCancelamentoSubmenu from "./config/motivoCancelamento.submenu"
3
5
  import cadastrosOperacaoSubmenu from "./config/cadastrosOperacao.submenu"
4
6
  import operacoesMovimentacaoGraosSubmenu from "./config/operacoesMovimentacaoGraos.submenu"
7
+ import relatorioFisicoFiscalSubmenu from "./config/relatorioFisicoFiscal.submenu"
8
+ import recebimentoCentroSubmenu from "./config/recebimentoCentro.submenu"
5
9
  import rotaRomaneioSubmenu from "./config/rotaRomaneio.submenu"
6
10
  import tabelaBiodieselSubmenu from "./config/tabelaBiodiesel.submenu"
11
+ import tabelaClassificacaoSubmenu from "./config/tabelaClassificacao.submenu"
12
+ import toleranciaDiferencaPrecoSubmenu from "./config/toleranciaDiferencaPreco.submenu"
13
+ import relatorioMediaPonderadaSubmenu from "./config/relatorioMediaPonderada.submenu"
7
14
 
8
15
 
9
16
  const relatoriosSubmenu: NavigationTree[] = [
@@ -12,6 +19,12 @@ const relatoriosSubmenu: NavigationTree[] = [
12
19
  { ...operacoesMovimentacaoGraosSubmenu, sortOrder: 3 },
13
20
  { ...rotaRomaneioSubmenu, sortOrder: 4 },
14
21
  { ...tabelaBiodieselSubmenu, sortOrder: 5 },
22
+ { ...extratoProdutorSubmenu, sortOrder: 6 },
23
+ { ...controleTicketSubmenu, sortOrder: 7 },
24
+ { ...relatorioFisicoFiscalSubmenu, sortOrder: 8 },
25
+ { ...relatorioMediaPonderadaSubmenu, sortOrder: 9 },
26
+ { ...recebimentoCentroSubmenu, sortOrder: 10 },
27
+ { ...toleranciaDiferencaPrecoSubmenu, sortOrder: 11 },
15
28
  ]
16
29
 
17
30
  export default relatoriosSubmenu
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orbe-agro/client-core",
3
- "version": "5.6.129",
3
+ "version": "5.6.131",
4
4
  "description": "Biblioteca principal de componentes e utilidades para os microfrontends do Orbe Agro.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",